commit d92cd9f569d90e6b4ae905f73a7f3234d857b138 Author: helloxujingliang <3225043@qq.com> Date: Sat Jul 8 15:37:34 2023 +0800 创建项目 diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..ec03946 --- /dev/null +++ b/.env.dev @@ -0,0 +1,18 @@ +NODE_ENV = development + +VUE_APP_OIDC_AUTHORITY = http://112.233.241.108:12796 +VUE_APP_OIDC_CLIENTID = OpenAuth.Pro +VUE_APP_OIDC_REDIRECTURI = http://112.233.241.108:1803/#/oidc-callback +VUE_APP_OIDC_POSTLOGOUTREDIRECTURI = http://112.233.241.108:1803 +VUE_APP_OIDC_RESPONSETYPE = code +VUE_APP_OIDC_SCOPE = openid profile openauthapi +VUE_APP_OIDC_AUTOMATICSILENTRENEW = true +VUE_APP_OIDC_SILENTREDIRECTURI = http://112.233.241.108:1803/silent-renew-oidc.html + +#VUE_APP_BASE_API =http://192.168.10.123:9159/api +#VUE_APP_BASE_IMG_URL = http://192.168.10.123:9159 + + + +VUE_APP_BASE_API =http://223.99.16.253:9001/api +VUE_APP_BASE_IMG_URL =http://223.99.16.253:9001 diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..d7e8755 --- /dev/null +++ b/.env.prod @@ -0,0 +1,16 @@ +NODE_ENV = production + +VUE_APP_OIDC_AUTHORITY = http://demo.openauth.me:12796 +VUE_APP_OIDC_CLIENTID = OpenAuth.Pro +VUE_APP_OIDC_REDIRECTURI = http://demo.openauth.me:1803/#/oidc-callback +VUE_APP_OIDC_POSTLOGOUTREDIRECTURI = http://demo.openauth.me:1803 +VUE_APP_OIDC_RESPONSETYPE = code +VUE_APP_OIDC_SCOPE = openid profile openauthapi +VUE_APP_OIDC_AUTOMATICSILENTRENEW = true +VUE_APP_OIDC_SILENTREDIRECTURI = http://demo.openauth.me:1803/silent-renew-oidc.html + +#VUE_APP_BASE_API = http://192.168.10.123:9159/api +#VUE_APP_BASE_IMG_URL = http://192.168.10.123:9159 + +VUE_APP_BASE_API =http://112.36.23.242:9158/api +VUE_APP_BASE_IMG_URL = http://112.36.23.242:9158 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1738663 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..c275c5f --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..a673655 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..10da9ff --- /dev/null +++ b/build.bat @@ -0,0 +1 @@ +npm run build \ No newline at end of file diff --git a/install.bat b/install.bat new file mode 100644 index 0000000..67301ac --- /dev/null +++ b/install.bat @@ -0,0 +1 @@ +npm install --registry=https://registry.npm.taobao.org \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..e16f957 --- /dev/null +++ b/package.json @@ -0,0 +1,83 @@ +{ + "name": "openauth-pro", + "version": "3.0.0", + "description": "OpenAuth.Pro--OpenAuth.Core��ҵ��", + "author": "yubaolee ", + "scripts": { + "serve": "vue-cli-service serve", + "dev": "vue-cli-service serve --mode dev", + "build": "vue-cli-service build --mode prod", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@geoman-io/leaflet-geoman-free": "^2.11.2", + "@riophae/vue-treeselect": "^0.4.0", + "@turf/turf": "^6.3.0", + "ajv": "^8.6.2", + "axios": "^0.21.1", + "core-js": "^3.6.4", + "echarts": "^3.8.5", + "echarts-gl": "^2.0.2", + "electron-builder": "^22.11.7", + "element-ui": "^2.10.1", + "highcharts-vue": "^1.3.5", + "jquery": "^3.6.0", + "js-cookie": "2.2.0", + "jsplumb": "^2.12.8", + "leaflet": "^1.7.1", + "leaflet-minimap": "^3.6.1", + "leaflet.chinatmsproviders": "^3.0.4", + "leaflet.markercluster": "^1.5.0", + "mars3d": "^3.0.13", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "proj4leaflet": "^1.0.2", + "terraformer-wkt-parser": "^1.2.1", + "videojs-contrib-hls": "^5.15.0", + "vue": "^2.6.11", + "vue-codemirror-lite": "^1.0.4", + "vue-contextmenu": "^1.5.10", + "vue-count-to": "^1.0.13", + "vue-draggable-resizable-gorkys": "^2.3.6", + "vue-file-toolbar-menu": "^1.3.4", + "vue-json-excel": "^0.2.98", + "vue-layer": "^0.9.14", + "vue-multiselect": "^2.1.6", + "vue-router": "3.0.1", + "vue-video-player": "^5.0.2", + "vuedraggable": "^2.23.2", + "vuex": "3.0.1", + "vuex-oidc": "^2.0.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.3.0", + "@vue/cli-plugin-eslint": "~4.3.0", + "@vue/cli-service": "~4.3.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "node-sass": "^4.7.2", + "sass-loader": "^8.0.0", + "strip-pragma-loader": "^1.0.0", + "svg-sprite-loader": "^5.0.0", + "vue-template-compiler": "^2.6.11" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/config/config.json b/public/config/config.json new file mode 100644 index 0000000..5889423 Binary files /dev/null and b/public/config/config.json differ diff --git a/public/config/widget.json b/public/config/widget.json new file mode 100644 index 0000000..35ee4f4 --- /dev/null +++ b/public/config/widget.json @@ -0,0 +1,246 @@ +{ + "version": "20210105", + "defaultOptions": { + "style": "dark", + "windowOptions": { + "skin": "layer-mars-dialog animation-scale-up", + "position": { + "top": 50, + "right": 10 + }, + "maxmin": false, + "resize": true + }, + "autoReset": false, + "autoDisable": true, + "disableOther": true + }, + "openAtStart": [ + { + "name": "右上角工具栏", + "uri": "widgets/toolBarRight/widget.js", + "css": { + "top": "10px", + "left": "auto", + "right": "10px" + } + }, + { + "name": "放大缩小按钮", + "uri": "widgets/toolButton/zoom.js" + } + ], + "widgets": [ + { + "name": "模板-iframe弹窗", + "uri": "widgets/_example/widget.js", + "windowOptions": { + "width": 300, + "height": 400, + "position": { + "bottom": 10, + "right": 10 + }, + "maxmin": true, + "resize": true + }, + "autoDisable": false, + "disableOther": false, + "openAtStart": false + }, + { + "name": "模板-div弹窗", + "uri": "widgets/_example_divwin/widget.js" + }, + { + "name": "模板-2个弹窗", + "uri": "widgets/_example_2win/widget.js" + }, + { + "name": "模板-append模板", + "uri": "widgets/_example_append/widget.js" + }, + + { + "name": "地图切换", + "uri": "widgets/manageBasemaps/widget.js", + "group": "forlayer", + "autoDisable": false, + "disableOther": false + }, + { + "name": "图层管理", + "uri": "widgets/manageLayers/widget.js", + "group": "forlayer", + "autoCenter": true, + "windowOptions": { + "position": { + "top": 50, + "bottom": 30, + "right": 10 + } + }, + "css": { + "max-width": "300px" + }, + "autoDisable": false, + "disableOther": false + }, + { + "name": "剖面分析图表", + "uri": "widgets/measureChars/widget.js", + "windowOptions": { + "noTitle": true, + "position": { + "bottom": 30, + "left": 30, + "right": 60 + } + }, + "disableOther": false + }, + { + "name": "视角书签", + "uri": "widgets/bookmark/widget.js", + "windowOptions": { + "position": { + "top": 50, + "bottom": 30, + "right": 10 + } + } + }, + { + "name": "漫游路线设置", + "uri": "widgets/roamLine/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + { + "name": "漫游路线", + "uri": "widgets/roamFly/widget.js", + "windowOptions": { + "position": { + "bottom": 60, + "right": 5 + } + } + }, + { + "name": "路线剖面", + "uri": "widgets/roamChars/widget.js", + "windowOptions": { + "noTitle": true, + "position": { + "top": 10, + "left": 10, + "right": 10 + } + }, + "disableOther": false + }, + { + "name": "卷帘对比", + "uri": "widgets/mapSwipe/widget.js", + "group": "mapCompare", + "autoDisable": false, + "disableOther": false + }, + { + "name": "双屏对比", + "uri": "widgets/mapCompare/widget.js", + "autoDisable": false, + "disableOther": false, + "group": "mapCompare", + "windowOptions": { + "position": { + "top": 160, + "bottom": 40, + "left": 10 + }, + "maxmin": true + } + }, + { + "name": "百度街景", + "uri": "widgets/streetscape/widget.js", + "autoDisable": false, + "disableOther": false, + "group": "mapCompare", + "windowOptions": { + "position": { + "top": 160, + "bottom": 40, + "left": 10 + }, + "maxmin": true + } + }, + { + "name": "标绘", + "uri": "widgets/plot/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + }, + "openAtStart": false + }, + { + "name": "模型库", + "uri": "widgets/plot-model/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + { + "name": "分组名称编辑", + "uri": "widgets/plotGroupName/widget.js", + "windowOptions": { + "position": "t" + }, + "disableOther": false + }, + { + "name": "属性编辑", + "uri": "widgets/plotAttr/widget.js", + "windowOptions": { + "position": { + "top": 60, + "bottom": 30, + "left": 10 + } + }, + "disableOther": false + }, + { + "name": "路线导航", + "uri": "widgets/queryRoute/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + + { + "name": "打印", + "uri": "widgets/print/widget.js", + "autoDisable": false, + "disableOther": false + } + ] +} diff --git a/public/css/widget-win.css b/public/css/widget-win.css new file mode 100644 index 0000000..689240f --- /dev/null +++ b/public/css/widget-win.css @@ -0,0 +1,139 @@ +/* +* widget模块的公共css +*/ + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; + border: none; + overflow: hidden; + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 14px; + background-color:transparent!important; +} +body { + padding:1px; +} +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { color: #62a8ea;text-decoration: none;} + +a:hover, a:focus { + color: #89bceb; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} +ul, li {list-style: none;} + + + +.dark { color: #ffffff; } +.dark a{color:#ffffff;text-decoration: none;} +.dark a:hover {color:#CC3300;text-decoration:underline;} +.dark .content{ + overflow: auto; + position: relative; + background: transparent; + height: 400px; + -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; +} +.dark .form-control,.dark .input-group-addon,.dark .btn-default,.dark input ,.dark .dropdown-menu { + color: #ffffff; + background-color: rgba(63, 72, 84, 0.6); +} + +.input-group{ + width:100%; +} + + + +.dark .btn-primary { + background-color: rgba(32, 160, 255, 0.2); +} +.dark .btn-danger { + background-color: rgba(255, 109, 109, 0.2); +} +.dark .btn-warning { + background-color: rgba(196, 188, 181, 0.2); +} +.dark .table-hover > tbody > tr:hover { + background-color: rgba(63, 72, 84, 1); +} +.dark .dropdown-menu > li > a { + color: #ffffff; +} +.dark .dropdown-menu > li > a:hover,.dark .dropdown-menu > li > a:focus { + background-color: #4db3ff; +} + +/*滚动条*/ +body, html { + scrollbar-base-color:#f4f7fc; + scrollbar-track-color:#f4f7fc; + scrollbar-face-color:#797979; + scrollbar-arrow-color:#f4f7fc; + scrollbar-shadow-color:#f4f7fc; + scrollbar-3dlight-color:#f4f7fc; + scrollbar-highlight-color:#f4f7fc; + scrollbar-darkshadow-color:#f4f7fc; +} +::-webkit-scrollbar-button { + height: 0; + width: 0; + display: none +} +::-webkit-scrollbar-track { + background: transparent +} +::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb { + border: 0 +} +::-webkit-scrollbar { + height: 10px; + width: 10px; + background: transparent; + border-radius: 5px +} +::-webkit-scrollbar-thumb { + padding-top: 100px; + -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px -1px 0 rgba(0, 0, 0, .07); + background-color: #797979; + min-height: 28px; + border-radius: 4px; + background-clip: + padding-box +} +::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb { + border: 0 +} +::-webkit-scrollbar-thumb:hover { + -webkit-box-shadow:inset 1px 1px 1px rgba(0, 0, 0, .25); + background-color:rgba(0, 0, 0, .4) +} +::-webkit-scrollbar-thumb:active { + -webkit-box-shadow:inset 1px 1px 3px rgba(0, 0, 0, .35); + background-color:rgba(0, 0, 0, .5) +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..51961ac Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/img/basemaps/TerrainEllipsoid.png b/public/img/basemaps/TerrainEllipsoid.png new file mode 100644 index 0000000..28f29e1 Binary files /dev/null and b/public/img/basemaps/TerrainEllipsoid.png differ diff --git a/public/img/basemaps/TerrainSTK.png b/public/img/basemaps/TerrainSTK.png new file mode 100644 index 0000000..36da8f9 Binary files /dev/null and b/public/img/basemaps/TerrainSTK.png differ diff --git a/public/img/basemaps/arcgis.png b/public/img/basemaps/arcgis.png new file mode 100644 index 0000000..c7aa194 Binary files /dev/null and b/public/img/basemaps/arcgis.png differ diff --git a/public/img/basemaps/bd-c-bluish.png b/public/img/basemaps/bd-c-bluish.png new file mode 100644 index 0000000..3521510 Binary files /dev/null and b/public/img/basemaps/bd-c-bluish.png differ diff --git a/public/img/basemaps/bd-c-dark.png b/public/img/basemaps/bd-c-dark.png new file mode 100644 index 0000000..84a507d Binary files /dev/null and b/public/img/basemaps/bd-c-dark.png differ diff --git a/public/img/basemaps/bd-c-darkgreen.png b/public/img/basemaps/bd-c-darkgreen.png new file mode 100644 index 0000000..0d9ff35 Binary files /dev/null and b/public/img/basemaps/bd-c-darkgreen.png differ diff --git a/public/img/basemaps/bd-c-googlelite.png b/public/img/basemaps/bd-c-googlelite.png new file mode 100644 index 0000000..dd88cb8 Binary files /dev/null and b/public/img/basemaps/bd-c-googlelite.png differ diff --git a/public/img/basemaps/bd-c-grassgreen.png b/public/img/basemaps/bd-c-grassgreen.png new file mode 100644 index 0000000..40d21d1 Binary files /dev/null and b/public/img/basemaps/bd-c-grassgreen.png differ diff --git a/public/img/basemaps/bd-c-grayscale.png b/public/img/basemaps/bd-c-grayscale.png new file mode 100644 index 0000000..bdb8389 Binary files /dev/null and b/public/img/basemaps/bd-c-grayscale.png differ diff --git a/public/img/basemaps/bd-c-hardedge.png b/public/img/basemaps/bd-c-hardedge.png new file mode 100644 index 0000000..86a0ff1 Binary files /dev/null and b/public/img/basemaps/bd-c-hardedge.png differ diff --git a/public/img/basemaps/bd-c-light.png b/public/img/basemaps/bd-c-light.png new file mode 100644 index 0000000..85d2f63 Binary files /dev/null and b/public/img/basemaps/bd-c-light.png differ diff --git a/public/img/basemaps/bd-c-midnight.png b/public/img/basemaps/bd-c-midnight.png new file mode 100644 index 0000000..a834966 Binary files /dev/null and b/public/img/basemaps/bd-c-midnight.png differ diff --git a/public/img/basemaps/bd-c-pink.png b/public/img/basemaps/bd-c-pink.png new file mode 100644 index 0000000..d7dee22 Binary files /dev/null and b/public/img/basemaps/bd-c-pink.png differ diff --git a/public/img/basemaps/bd-c-redalert.png b/public/img/basemaps/bd-c-redalert.png new file mode 100644 index 0000000..97160b6 Binary files /dev/null and b/public/img/basemaps/bd-c-redalert.png differ diff --git a/public/img/basemaps/bd-img.png b/public/img/basemaps/bd-img.png new file mode 100644 index 0000000..226aeb5 Binary files /dev/null and b/public/img/basemaps/bd-img.png differ diff --git a/public/img/basemaps/bd-vec.png b/public/img/basemaps/bd-vec.png new file mode 100644 index 0000000..7d1f3dc Binary files /dev/null and b/public/img/basemaps/bd-vec.png differ diff --git a/public/img/basemaps/bingAerial.png b/public/img/basemaps/bingAerial.png new file mode 100644 index 0000000..29179f3 Binary files /dev/null and b/public/img/basemaps/bingAerial.png differ diff --git a/public/img/basemaps/bingAerialLabels.png b/public/img/basemaps/bingAerialLabels.png new file mode 100644 index 0000000..4532792 Binary files /dev/null and b/public/img/basemaps/bingAerialLabels.png differ diff --git a/public/img/basemaps/bingRoads.png b/public/img/basemaps/bingRoads.png new file mode 100644 index 0000000..74c17f5 Binary files /dev/null and b/public/img/basemaps/bingRoads.png differ diff --git a/public/img/basemaps/bingimage.png b/public/img/basemaps/bingimage.png new file mode 100644 index 0000000..45d4320 Binary files /dev/null and b/public/img/basemaps/bingimage.png differ diff --git a/public/img/basemaps/bingmap.png b/public/img/basemaps/bingmap.png new file mode 100644 index 0000000..3398e03 Binary files /dev/null and b/public/img/basemaps/bingmap.png differ diff --git a/public/img/basemaps/blackMarble.png b/public/img/basemaps/blackMarble.png new file mode 100644 index 0000000..73264c2 Binary files /dev/null and b/public/img/basemaps/blackMarble.png differ diff --git a/public/img/basemaps/esriNationalGeographic.png b/public/img/basemaps/esriNationalGeographic.png new file mode 100644 index 0000000..981f148 Binary files /dev/null and b/public/img/basemaps/esriNationalGeographic.png differ diff --git a/public/img/basemaps/esriWorldImagery.png b/public/img/basemaps/esriWorldImagery.png new file mode 100644 index 0000000..89ede1e Binary files /dev/null and b/public/img/basemaps/esriWorldImagery.png differ diff --git a/public/img/basemaps/esriWorldStreetMap.png b/public/img/basemaps/esriWorldStreetMap.png new file mode 100644 index 0000000..2ecc45a Binary files /dev/null and b/public/img/basemaps/esriWorldStreetMap.png differ diff --git a/public/img/basemaps/gaode_img.png b/public/img/basemaps/gaode_img.png new file mode 100644 index 0000000..d03c5a1 Binary files /dev/null and b/public/img/basemaps/gaode_img.png differ diff --git a/public/img/basemaps/gaode_vec.png b/public/img/basemaps/gaode_vec.png new file mode 100644 index 0000000..acfbc81 Binary files /dev/null and b/public/img/basemaps/gaode_vec.png differ diff --git a/public/img/basemaps/google_img.png b/public/img/basemaps/google_img.png new file mode 100644 index 0000000..e2cf487 Binary files /dev/null and b/public/img/basemaps/google_img.png differ diff --git a/public/img/basemaps/google_ter.png b/public/img/basemaps/google_ter.png new file mode 100644 index 0000000..35855a8 Binary files /dev/null and b/public/img/basemaps/google_ter.png differ diff --git a/public/img/basemaps/google_vec.png b/public/img/basemaps/google_vec.png new file mode 100644 index 0000000..4829a09 Binary files /dev/null and b/public/img/basemaps/google_vec.png differ diff --git a/public/img/basemaps/mapQuestOpenStreetMap.png b/public/img/basemaps/mapQuestOpenStreetMap.png new file mode 100644 index 0000000..eb3592f Binary files /dev/null and b/public/img/basemaps/mapQuestOpenStreetMap.png differ diff --git a/public/img/basemaps/mapboxSatellite.png b/public/img/basemaps/mapboxSatellite.png new file mode 100644 index 0000000..2a42bf3 Binary files /dev/null and b/public/img/basemaps/mapboxSatellite.png differ diff --git a/public/img/basemaps/mapboxStreets.png b/public/img/basemaps/mapboxStreets.png new file mode 100644 index 0000000..8bf0d10 Binary files /dev/null and b/public/img/basemaps/mapboxStreets.png differ diff --git a/public/img/basemaps/mapboxTerrain.png b/public/img/basemaps/mapboxTerrain.png new file mode 100644 index 0000000..dcfa621 Binary files /dev/null and b/public/img/basemaps/mapboxTerrain.png differ diff --git a/public/img/basemaps/naturalEarthII.png b/public/img/basemaps/naturalEarthII.png new file mode 100644 index 0000000..4b23c72 Binary files /dev/null and b/public/img/basemaps/naturalEarthII.png differ diff --git a/public/img/basemaps/offline.png b/public/img/basemaps/offline.png new file mode 100644 index 0000000..1412d64 Binary files /dev/null and b/public/img/basemaps/offline.png differ diff --git a/public/img/basemaps/osm.png b/public/img/basemaps/osm.png new file mode 100644 index 0000000..7275f73 Binary files /dev/null and b/public/img/basemaps/osm.png differ diff --git a/public/img/basemaps/sea.png b/public/img/basemaps/sea.png new file mode 100644 index 0000000..c60f41d Binary files /dev/null and b/public/img/basemaps/sea.png differ diff --git a/public/img/basemaps/stamenToner.png b/public/img/basemaps/stamenToner.png new file mode 100644 index 0000000..231f0d9 Binary files /dev/null and b/public/img/basemaps/stamenToner.png differ diff --git a/public/img/basemaps/stamenWatercolor.png b/public/img/basemaps/stamenWatercolor.png new file mode 100644 index 0000000..fab77de Binary files /dev/null and b/public/img/basemaps/stamenWatercolor.png differ diff --git a/public/img/basemaps/tdt_img.png b/public/img/basemaps/tdt_img.png new file mode 100644 index 0000000..d8c0320 Binary files /dev/null and b/public/img/basemaps/tdt_img.png differ diff --git a/public/img/basemaps/tdt_ter.png b/public/img/basemaps/tdt_ter.png new file mode 100644 index 0000000..d4fef6d Binary files /dev/null and b/public/img/basemaps/tdt_ter.png differ diff --git a/public/img/basemaps/tdt_vec.png b/public/img/basemaps/tdt_vec.png new file mode 100644 index 0000000..9d951d7 Binary files /dev/null and b/public/img/basemaps/tdt_vec.png differ diff --git a/public/img/favicon/app-icon72x72@2x.png b/public/img/favicon/app-icon72x72@2x.png new file mode 100644 index 0000000..d8db203 Binary files /dev/null and b/public/img/favicon/app-icon72x72@2x.png differ diff --git a/public/img/favicon/apple-touch-icon.png b/public/img/favicon/apple-touch-icon.png new file mode 100644 index 0000000..a2fd1b4 Binary files /dev/null and b/public/img/favicon/apple-touch-icon.png differ diff --git a/public/img/favicon/favicon.ico b/public/img/favicon/favicon.ico new file mode 100644 index 0000000..51961ac Binary files /dev/null and b/public/img/favicon/favicon.ico differ diff --git a/public/img/favicon/favicon.png b/public/img/favicon/favicon.png new file mode 100644 index 0000000..cfc2d95 Binary files /dev/null and b/public/img/favicon/favicon.png differ diff --git a/public/img/marker/linePoint1.png b/public/img/marker/linePoint1.png new file mode 100644 index 0000000..90aff53 Binary files /dev/null and b/public/img/marker/linePoint1.png differ diff --git a/public/img/marker/mark1.png b/public/img/marker/mark1.png new file mode 100644 index 0000000..4e899dd Binary files /dev/null and b/public/img/marker/mark1.png differ diff --git a/public/img/marker/mark2.png b/public/img/marker/mark2.png new file mode 100644 index 0000000..f8ddb0a Binary files /dev/null and b/public/img/marker/mark2.png differ diff --git a/public/img/marker/mark3.png b/public/img/marker/mark3.png new file mode 100644 index 0000000..b1a8f04 Binary files /dev/null and b/public/img/marker/mark3.png differ diff --git a/public/img/marker/mark4.png b/public/img/marker/mark4.png new file mode 100644 index 0000000..c9b0e1f Binary files /dev/null and b/public/img/marker/mark4.png differ diff --git a/public/img/marker/symbol1.png b/public/img/marker/symbol1.png new file mode 100644 index 0000000..3016695 Binary files /dev/null and b/public/img/marker/symbol1.png differ diff --git a/public/img/marker/tf.gif b/public/img/marker/tf.gif new file mode 100644 index 0000000..46d688c Binary files /dev/null and b/public/img/marker/tf.gif differ diff --git a/public/img/menuicon/3d.png b/public/img/menuicon/3d.png new file mode 100644 index 0000000..caa65a2 Binary files /dev/null and b/public/img/menuicon/3d.png differ diff --git a/public/img/menuicon/field.png b/public/img/menuicon/field.png new file mode 100644 index 0000000..96e7062 Binary files /dev/null and b/public/img/menuicon/field.png differ diff --git a/public/img/menuicon/monitor.png b/public/img/menuicon/monitor.png new file mode 100644 index 0000000..23b927c Binary files /dev/null and b/public/img/menuicon/monitor.png differ diff --git a/public/img/menuicon/pano.png b/public/img/menuicon/pano.png new file mode 100644 index 0000000..d5b4228 Binary files /dev/null and b/public/img/menuicon/pano.png differ diff --git a/public/img/menuicon/park.png b/public/img/menuicon/park.png new file mode 100644 index 0000000..459b97a Binary files /dev/null and b/public/img/menuicon/park.png differ diff --git a/public/img/menuicon/plane.png b/public/img/menuicon/plane.png new file mode 100644 index 0000000..3246f93 Binary files /dev/null and b/public/img/menuicon/plane.png differ diff --git a/public/img/menuicon/trans.png b/public/img/menuicon/trans.png new file mode 100644 index 0000000..4e7da59 Binary files /dev/null and b/public/img/menuicon/trans.png differ diff --git a/public/img/menuicon/video.png b/public/img/menuicon/video.png new file mode 100644 index 0000000..ab4cc68 Binary files /dev/null and b/public/img/menuicon/video.png differ diff --git a/public/img/textures/LinkPulse.png b/public/img/textures/LinkPulse.png new file mode 100644 index 0000000..02d0928 Binary files /dev/null and b/public/img/textures/LinkPulse.png differ diff --git a/public/img/textures/arrow.png b/public/img/textures/arrow.png new file mode 100644 index 0000000..a30c69a Binary files /dev/null and b/public/img/textures/arrow.png differ diff --git a/public/img/textures/arrow2.png b/public/img/textures/arrow2.png new file mode 100644 index 0000000..d1d1896 Binary files /dev/null and b/public/img/textures/arrow2.png differ diff --git a/public/img/textures/circleScan.png b/public/img/textures/circleScan.png new file mode 100644 index 0000000..f4be91b Binary files /dev/null and b/public/img/textures/circleScan.png differ diff --git a/public/img/textures/circle_bg.png b/public/img/textures/circle_bg.png new file mode 100644 index 0000000..e3fed43 Binary files /dev/null and b/public/img/textures/circle_bg.png differ diff --git a/public/img/textures/excavate_bottom_min.jpg b/public/img/textures/excavate_bottom_min.jpg new file mode 100644 index 0000000..6dc36be Binary files /dev/null and b/public/img/textures/excavate_bottom_min.jpg differ diff --git a/public/img/textures/fence.png b/public/img/textures/fence.png new file mode 100644 index 0000000..a0043b8 Binary files /dev/null and b/public/img/textures/fence.png differ diff --git a/public/img/textures/lineClr.png b/public/img/textures/lineClr.png new file mode 100644 index 0000000..656ee85 Binary files /dev/null and b/public/img/textures/lineClr.png differ diff --git a/public/img/textures/tanhao.png b/public/img/textures/tanhao.png new file mode 100644 index 0000000..b80b81b Binary files /dev/null and b/public/img/textures/tanhao.png differ diff --git a/public/img/tietu/BlackMarble.jpg b/public/img/tietu/BlackMarble.jpg new file mode 100644 index 0000000..f53272f Binary files /dev/null and b/public/img/tietu/BlackMarble.jpg differ diff --git a/public/img/tietu/gugong.jpg b/public/img/tietu/gugong.jpg new file mode 100644 index 0000000..8904c7b Binary files /dev/null and b/public/img/tietu/gugong.jpg differ diff --git a/public/img/tietu/leida.jpg b/public/img/tietu/leida.jpg new file mode 100644 index 0000000..73e4640 Binary files /dev/null and b/public/img/tietu/leida.jpg differ diff --git a/public/img/tietu/world.jpg b/public/img/tietu/world.jpg new file mode 100644 index 0000000..078bb2b Binary files /dev/null and b/public/img/tietu/world.jpg differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..db3db5d --- /dev/null +++ b/public/index.html @@ -0,0 +1,29 @@ + + + + + + + + + + 临沂国家高新区数据资源平台 + + + + + + + +
+ + + diff --git a/public/industry/geojson/camera.json b/public/industry/geojson/camera.json new file mode 100644 index 0000000..e74f7c2 --- /dev/null +++ b/public/industry/geojson/camera.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","layer":{"id":"M-38C69CBE-CFD0-4B5F-B49C-4876CBD6D4F6","name":"未命名"},"features":[{"type":"Feature","properties":{"id":"M-79706E1B-B492-4A6D-B538-04576E921796","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.239338,35.000142,62.8]}},{"type":"Feature","properties":{"id":"M-9996E3D4-26E1-478C-88E2-1416687DF5FC","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.203,35.021398,67.3]}},{"type":"Feature","properties":{"id":"M-384A1D19-3CF3-4447-892C-F6DEA0AA55AA","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.237137,35.038241,65.9]}},{"type":"Feature","properties":{"id":"M-9C1E4E46-216A-447C-A792-1E93F79F8E4F","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.244107,35.019556,64.5]}},{"type":"Feature","properties":{"id":"M-529D1349-1EAF-4D03-8703-32A52D3DF7DD","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.228641,34.982614,61.9]}},{"type":"Feature","properties":{"id":"M-039E127E-9AFF-4BA5-9943-F343F64DE9B3","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.163948,35.013181,93]}},{"type":"Feature","properties":{"id":"M-60ABCDAF-4539-44E2-82D8-9C9D1FD2AF4B","type":"billboard","style":{"image":"img/marker/mark1.png","label":{"text":"可以同时支持文字","font_size":30,"color":"#ffffff","outline":true,"outlineColor":"#000000","pixelOffsetY":-50}}},"geometry":{"type":"Point","coordinates":[118.192639,35.045405,72]}}]} \ No newline at end of file diff --git a/public/industry/geojson/config.json b/public/industry/geojson/config.json new file mode 100644 index 0000000..f4d0291 --- /dev/null +++ b/public/industry/geojson/config.json @@ -0,0 +1,464 @@ +{ + "map3d": { + "scene": { + "center": { "lat": 35.04055, "lng": 118.18439, "alt": 35310, "heading": 359.2, "pitch": -90, "roll": 360 }, + "scene3DOnly":false, + "shadows": false, + "removeDblClick": true, + "sceneMode": 3, + "showSun": true, + "showMoon": true, + "showSkyBox": true, + "showSkyAtmosphere": true, + "fog": true, + "fxaa": true, + "globe": { "depthTestAgainstTerrain": false, "baseColor": "#546a53", "showGroundAtmosphere": true, "enableLighting": false }, + "cameraController": { + "zoomFactor": 3.0, + "minimumZoomDistance": 1, + "maximumZoomDistance": 50000000, + "enableRotate": true, + "enableTranslate": true, + "enableTilt": true, + "enableZoom": true, + "enableCollisionDetection": true + } + }, + "control": { + "homeButton": true, + "baseLayerPicker": false, + "sceneModePicker": true, + "vrButton": false, + "fullscreenButton": false, + "navigationHelpButton": true, + "animation": false, + "timeline": false, + "infoBox": false, + "geocoder": false, + "geocoderConfig": { "key": ["ae29a37307840c7ae4a785ac905927e0"], "citycode": "" }, + "defaultContextMenu": true, + "mouseDownView": true, + "location": { + "fps": true, + "format": "
经度:{x}
纬度:{y}
海拔:{z}米
层级:{level}
俯仰角:{pitch}度
视高:{height}米
" + }, + "navigation": { + "legend": { "left": "0px", "bottom": "-1px" }, + "compass": { "bottom": "240px", "right": "2px" } + } + }, + "terrain": { + "url": "http://data.marsgis.cn/terrain", + "show": true + }, + "basemaps": [ + { "id": 10, "name": "地图底图", "type": "group" }, + { + "pid": 10, + "name": "天地图卫星", + "icon": "img/basemaps/tdt_img.png", + "type": "tdt", + "layer": "img_d", + "key": ["9ae78c51a0a28f06444d541148496e36"], + "show": true + }, + + { "id": 9030, "name": "数据资源", "type": "group" }, + + { + "id":9031, + "pid": 9030, + "type": "geojson", + "name": "僵尸企业", + "url": "/geojson/camera.json", + "minimumLevel": 12, + "symbol": { + "styleOptions": { + "image": "/img/marker/mark1.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + + "flyTo": true + }, + { + "id":9031, + "pid": 9030, + "type": "geojson", + "name": "规上企业", + "url": "/geojson/camera.json", + "minimumLevel": 12, + "symbol": { + "styleOptions": { + "image": "/img/marker/mark1.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + + "flyTo": true + }, + { + "id":9031, + "pid": 9030, + "type": "geojson", + "name": "招商用地", + "url": "/geojson/camera.json", + "minimumLevel": 12, + "symbol": { + "styleOptions": { + "image": "/img/marker/mark1.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + + "flyTo": true + }, + { + "id":9031, + "pid": 9030, + "type": "geojson", + "name": "视频监控", + "url": "/industry/geojson/camera.json", + "minimumLevel": 14, + "symbol": { + "styleOptions": { + "image": "/industry/img/camera.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + + "flyTo": true + }, + { + "id":9031, + "pid": 9030, + "type": "geojson", + "name": "科技园区", + "url": "/geojson/camera.json", + "minimumLevel": 12, + "symbol": { + "styleOptions": { + "image": "/img/marker/mark1.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + + "flyTo": true + }, + + + { "id": 9020, "name": "图层资源", "type": "group" }, + + + { + "pid":9020, + "id": 9024, + "type": "arcgis", + "name": "交通规划面", + "url": "http://arcgis.cn.utools.club/arcgis/rest/services/GXQDK/MapServer", + "layers":"0", + "enablePickFeatures": true, + "showClickFeature": true, + "pickFeatureStyle": { + "showTime": 50000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.1, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "popup": "all", + "tooltip":"all", + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + "show":false + }, + { + "pid":9020, + "id": 9022, + "type": "arcgis", + "name": "城镇使用土地规划", + "url": "http://arcgis.cn.utools.club/arcgis/rest/services/GXQDK/MapServer", + "layers":"0", + "showClickFeature": true, + "pickFeatureStyle": { + "showTime": 50000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.1, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "popup": "all", + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 } + }, + { + "pid":9020, + "id": 9022, + "type": "arcgis", + "name": "土地利用总体规划", + "url": "http://arcgis.cn.utools.club/arcgis/rest/services/GXQDK/MapServer", + "layers":"0", + "showClickFeature": true, + "pickFeatureStyle": { + "showTime": 50000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.1, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "popup": "all", + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 } + }, + { + "pid":9020, + "id": 9021, + "type": "arcgis", + "name": "土地利用现状", + "url": "http://arcgis.cn.utools.club/arcgis/rest/services/GXQDK/MapServer", + "layers":"0", + "showClickFeature": true, + "pickFeatureStyle": { + "showTime": 50000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.1, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + "popup": "all" + }, + + + + + { "id": 9010, "name": "行政界线", "type": "group" }, + { + "pid":9010, + "id": 9014, + "type": "wfs", + "name": "村名称", + "url": "http://geoserver.cn.utools.club/geoserver/gaoxinqu/ows", + "layer":"gaoxinqu:cunjie_4326", + "symbol": { + "styleOptions": { + "fill": false, + "color": "rgb(2,26,79)", + "opacity": 1, + "outline": true, + "outlineColor": "yellow", + "outlineWidth": 1.1, + "outlineOpacity": 0.7, + "clampToGround": true, + "label":{ + "text": "{XZQMC}", + "opacity": 1, + "font_size": 16, + "color": "#000000", + "outline": true, + "outlineColor":"#ffffff" + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + "popup": "{XZQMC}" + }, + + { + "pid":9010, + "id": 9013, + "type": "wfs", + "name": "村边界", + "url": "http://geoserver.cn.utools.club/geoserver/gaoxinqu/ows", + "layer":"gaoxinqu:cunjie_4326", + "show":false, + "symbol": { + "styleOptions": { + "fill": false, + "color": "rgb(2,26,79)", + "opacity": 1, + "outline": true, + "outlineColor": "yellow", + "outlineWidth": 1.1, + "outlineOpacity": 0.7, + "clampToGround": true + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + "popup": "{XZQMC}" + }, + { + "pid":9010, + "id": 9012, + "type": "wfs", + "name": "镇边界", + "url": "http://geoserver.cn.utools.club/geoserver/gaoxinqu/ows", + "layer": "gaoxinqu:zhenjie_4326", + "symbol": { + "styleOptions": {"fill":false, "opacity": 0, "color": "#0000FF", "width": 3, "clampToGround": true,"outline":true,"outlineWidth":2,"outlineColor":"purple", + "label":{ + "text": "{XZQHMC}", + "opacity": 1, + "font_size": 24, + "color": "#ffffff" + } + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 }, + "show":false, + "flyTo":true + }, + + { + "pid":9010, + "id": 9011, + "type": "wfs", + "name": "区边界", + "url": "http://geoserver.cn.utools.club/geoserver/gaoxinqu/ows", + "layer": "gaoxinqu:qxbj", + "show":true, + "symbol": { + "styleOptions": { + "fill": false, + "color": "rgb(2,26,79)", + "opacity": 0, + "outline": true, + "outlineColor": "red", + "outlineWidth": 2, + "outlineOpacity": 0.8, + "clampToGround": true + } + }, + "center": { "lat": 35.040286, "lng": 118.191589, "alt": 33785.9, "heading": 359.2, "pitch": -90, "roll": 360 } + } + ] + } +} diff --git a/public/industry/geojson/gxqbj.json b/public/industry/geojson/gxqbj.json new file mode 100644 index 0000000..5b75c03 --- /dev/null +++ b/public/industry/geojson/gxqbj.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"Name":"高新区"},"geometry":{"type":"Polygon","coordinates":[[[118.1212,35.1154],[118.1212,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.122,35.1151],[118.1221,35.1151],[118.1225,35.1151],[118.1229,35.1151],[118.1233,35.115],[118.1234,35.115],[118.1234,35.115],[118.1234,35.115],[118.1235,35.115],[118.1235,35.115],[118.1235,35.115],[118.1235,35.115],[118.1238,35.115],[118.1241,35.115],[118.1242,35.115],[118.125,35.115],[118.1251,35.1149],[118.1251,35.1149],[118.1255,35.1149],[118.1255,35.1148],[118.1255,35.1148],[118.1255,35.1145],[118.1255,35.1144],[118.1255,35.1144],[118.1255,35.1144],[118.1255,35.1143],[118.1255,35.1139],[118.1255,35.1137],[118.1255,35.1137],[118.1255,35.1136],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1131],[118.1262,35.1131],[118.1268,35.1131],[118.1272,35.1131],[118.1276,35.1131],[118.128,35.1131],[118.1281,35.1131],[118.1282,35.1131],[118.1282,35.1131],[118.1286,35.113],[118.1286,35.113],[118.1293,35.113],[118.1292,35.1121],[118.1292,35.1117],[118.1292,35.1117],[118.1296,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1112],[118.1301,35.1112],[118.13,35.1108],[118.13,35.1108],[118.13,35.1108],[118.13,35.1104],[118.1299,35.1101],[118.1299,35.11],[118.1299,35.1099],[118.1299,35.1098],[118.1304,35.1098],[118.1308,35.1098],[118.131,35.1098],[118.1311,35.1098],[118.1311,35.1097],[118.1309,35.1095],[118.1309,35.1094],[118.1307,35.1091],[118.1305,35.1088],[118.1305,35.1086],[118.1305,35.1085],[118.1305,35.1084],[118.1304,35.1083],[118.1304,35.1081],[118.1304,35.108],[118.1303,35.1078],[118.1303,35.1075],[118.1303,35.1074],[118.1303,35.1074],[118.1304,35.1073],[118.1306,35.1072],[118.1309,35.107],[118.1312,35.1068],[118.1315,35.1066],[118.1316,35.1066],[118.1316,35.1066],[118.1316,35.1066],[118.1318,35.1064],[118.132,35.1064],[118.1321,35.1064],[118.1323,35.1064],[118.1325,35.1064],[118.1332,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1334,35.1066],[118.1334,35.1071],[118.1334,35.1071],[118.1338,35.107],[118.1343,35.107],[118.1347,35.107],[118.1348,35.107],[118.1349,35.1069],[118.1353,35.1069],[118.1353,35.1069],[118.1353,35.1069],[118.1356,35.1069],[118.136,35.1069],[118.1362,35.1068],[118.1362,35.1068],[118.1363,35.1068],[118.137,35.1068],[118.137,35.1068],[118.1372,35.1068],[118.1372,35.1068],[118.1372,35.1068],[118.1373,35.1068],[118.1373,35.1068],[118.1373,35.1068],[118.1373,35.1072],[118.1373,35.1073],[118.1374,35.1077],[118.1379,35.1077],[118.138,35.1077],[118.1381,35.1077],[118.1387,35.1076],[118.1387,35.1076],[118.1387,35.1076],[118.1387,35.1079],[118.1388,35.1083],[118.1388,35.1083],[118.1389,35.1083],[118.1389,35.1083],[118.139,35.1083],[118.1391,35.1083],[118.1391,35.1083],[118.1391,35.1082],[118.1391,35.1082],[118.1391,35.1081],[118.1391,35.108],[118.1391,35.1079],[118.1391,35.1079],[118.1393,35.1079],[118.1394,35.1079],[118.1394,35.1077],[118.1394,35.1077],[118.1394,35.1077],[118.1394,35.1076],[118.1394,35.1076],[118.1396,35.1076],[118.1396,35.1075],[118.1396,35.1075],[118.1396,35.1075],[118.1396,35.1077],[118.1396,35.108],[118.1396,35.1081],[118.1397,35.1084],[118.1397,35.1088],[118.1397,35.1091],[118.1397,35.1093],[118.1399,35.1093],[118.14,35.1092],[118.1401,35.1092],[118.1401,35.1092],[118.1401,35.1092],[118.1401,35.1093],[118.1402,35.1093],[118.1402,35.1093],[118.1402,35.1093],[118.1402,35.1096],[118.1402,35.1099],[118.1402,35.1102],[118.1402,35.1105],[118.1402,35.1105],[118.1403,35.1105],[118.1408,35.1108],[118.1408,35.1108],[118.1408,35.1107],[118.1408,35.1107],[118.1408,35.1106],[118.1408,35.1106],[118.1409,35.1107],[118.1409,35.1107],[118.1411,35.1107],[118.1412,35.1107],[118.1412,35.1107],[118.1413,35.1108],[118.1414,35.1108],[118.1415,35.1108],[118.1415,35.1109],[118.1415,35.1108],[118.1416,35.1107],[118.1416,35.1105],[118.1417,35.1105],[118.1417,35.1104],[118.1418,35.1104],[118.1418,35.1104],[118.142,35.1102],[118.142,35.1101],[118.142,35.1101],[118.142,35.11],[118.142,35.1098],[118.142,35.1098],[118.142,35.1097],[118.142,35.1097],[118.1421,35.1097],[118.1424,35.1097],[118.1425,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1428,35.1096],[118.1429,35.1095],[118.143,35.1095],[118.143,35.1095],[118.143,35.1095],[118.143,35.1094],[118.143,35.1094],[118.143,35.1094],[118.143,35.1094],[118.143,35.1095],[118.143,35.1099],[118.1432,35.1099],[118.1432,35.1099],[118.1432,35.1099],[118.1435,35.1099],[118.1437,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1442,35.11],[118.1443,35.11],[118.1443,35.11],[118.1443,35.11],[118.1444,35.11],[118.1445,35.11],[118.1445,35.11],[118.1446,35.11],[118.1448,35.11],[118.1448,35.11],[118.145,35.11],[118.1454,35.1101],[118.1455,35.1101],[118.1457,35.1101],[118.1457,35.1101],[118.1457,35.1101],[118.1459,35.1101],[118.1459,35.1101],[118.1459,35.11],[118.1459,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.1462,35.11],[118.1464,35.11],[118.1464,35.11],[118.1466,35.11],[118.1466,35.11],[118.1467,35.11],[118.1467,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1471,35.11],[118.1472,35.11],[118.1472,35.11],[118.1473,35.11],[118.1474,35.11],[118.1474,35.11],[118.1475,35.11],[118.1475,35.11],[118.1477,35.11],[118.1477,35.11],[118.1477,35.11],[118.1477,35.11],[118.1478,35.11],[118.148,35.1101],[118.148,35.1101],[118.148,35.1102],[118.1482,35.1102],[118.1482,35.1102],[118.1482,35.1103],[118.1483,35.1103],[118.1483,35.1103],[118.1483,35.1103],[118.1485,35.1103],[118.1486,35.1103],[118.1487,35.1102],[118.1488,35.1102],[118.1489,35.1103],[118.1489,35.1103],[118.1489,35.1103],[118.1489,35.1104],[118.1489,35.1104],[118.1491,35.1104],[118.1493,35.1104],[118.1493,35.1104],[118.1494,35.1104],[118.1494,35.1104],[118.1495,35.1104],[118.1496,35.1104],[118.1496,35.1104],[118.1498,35.1104],[118.1498,35.1104],[118.1499,35.1103],[118.15,35.1103],[118.1501,35.1103],[118.1504,35.1103],[118.1505,35.1103],[118.1506,35.1104],[118.1508,35.1104],[118.1511,35.1104],[118.1512,35.1104],[118.1512,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1107],[118.1513,35.111],[118.1512,35.1113],[118.1513,35.1113],[118.1514,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1517,35.1113],[118.1517,35.1113],[118.1518,35.1113],[118.1519,35.1113],[118.1519,35.1113],[118.1522,35.1113],[118.1523,35.1112],[118.1523,35.1112],[118.1523,35.1111],[118.1523,35.1111],[118.1523,35.111],[118.1523,35.111],[118.1523,35.111],[118.1523,35.111],[118.1527,35.1109],[118.1527,35.1109],[118.1527,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1529,35.1109],[118.1529,35.1109],[118.1529,35.1109],[118.1531,35.1109],[118.1531,35.1109],[118.1532,35.1109],[118.1532,35.1109],[118.1532,35.1109],[118.1533,35.1109],[118.1534,35.1109],[118.1536,35.1109],[118.1537,35.1109],[118.154,35.1109],[118.1542,35.1109],[118.1542,35.1108],[118.1542,35.1108],[118.1543,35.1108],[118.1545,35.1108],[118.1547,35.1108],[118.1547,35.1108],[118.1547,35.1108],[118.1548,35.1108],[118.1549,35.1108],[118.1549,35.1108],[118.1549,35.1108],[118.1551,35.1108],[118.1553,35.1108],[118.1554,35.1108],[118.1556,35.1108],[118.1558,35.1108],[118.1559,35.1108],[118.1559,35.1108],[118.1563,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1565,35.1107],[118.1565,35.1107],[118.1569,35.1106],[118.157,35.1106],[118.157,35.1106],[118.1571,35.1106],[118.1572,35.1106],[118.1573,35.1106],[118.1574,35.1106],[118.1575,35.1105],[118.1575,35.1105],[118.1575,35.1105],[118.1576,35.1105],[118.1576,35.1105],[118.1576,35.1104],[118.1577,35.1104],[118.158,35.1104],[118.1581,35.1104],[118.1582,35.1104],[118.1587,35.1104],[118.1588,35.1104],[118.1588,35.1104],[118.1588,35.1104],[118.1589,35.1104],[118.159,35.1103],[118.159,35.1103],[118.159,35.1103],[118.159,35.1104],[118.159,35.1106],[118.159,35.1107],[118.159,35.1111],[118.159,35.1115],[118.159,35.1118],[118.159,35.1122],[118.159,35.1123],[118.159,35.1123],[118.159,35.1123],[118.159,35.1125],[118.159,35.1129],[118.159,35.1132],[118.159,35.1136],[118.159,35.1138],[118.159,35.1138],[118.159,35.1138],[118.159,35.1138],[118.1591,35.1138],[118.1594,35.1138],[118.1598,35.1137],[118.1598,35.1137],[118.1601,35.1137],[118.1601,35.1137],[118.1601,35.1137],[118.1602,35.1137],[118.1602,35.1137],[118.1603,35.1137],[118.1603,35.1137],[118.1603,35.1136],[118.1603,35.1135],[118.1603,35.1131],[118.1603,35.113],[118.1603,35.1129],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1604,35.1127],[118.1604,35.1127],[118.1604,35.1127],[118.1606,35.1125],[118.1608,35.1123],[118.1608,35.1123],[118.1609,35.1122],[118.161,35.1122],[118.161,35.1122],[118.1612,35.1122],[118.1614,35.1124],[118.1614,35.1124],[118.1617,35.1126],[118.1618,35.1126],[118.162,35.1127],[118.1621,35.1128],[118.1622,35.1128],[118.1622,35.1128],[118.1622,35.1128],[118.1623,35.1128],[118.1623,35.1128],[118.1627,35.1128],[118.1632,35.1128],[118.1632,35.1128],[118.1632,35.1128],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.1127],[118.1632,35.1125],[118.1632,35.1122],[118.1632,35.1122],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.112],[118.1632,35.112],[118.1637,35.112],[118.1638,35.112],[118.1638,35.112],[118.1639,35.112],[118.1639,35.112],[118.164,35.112],[118.164,35.112],[118.164,35.1119],[118.164,35.1118],[118.164,35.1118],[118.164,35.1115],[118.164,35.1114],[118.164,35.1112],[118.164,35.1109],[118.1639,35.1106],[118.1639,35.1103],[118.1639,35.1102],[118.1639,35.11],[118.1639,35.11],[118.1639,35.11],[118.1639,35.11],[118.1641,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1645,35.11],[118.1647,35.1099],[118.1647,35.1099],[118.1647,35.1099],[118.1648,35.1099],[118.1648,35.1099],[118.165,35.11],[118.1652,35.11],[118.1653,35.1099],[118.1655,35.1099],[118.1654,35.1099],[118.1654,35.1097],[118.1656,35.1097],[118.1656,35.1097],[118.1657,35.1097],[118.1657,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1098],[118.1658,35.1099],[118.1658,35.1099],[118.1658,35.11],[118.1659,35.1101],[118.166,35.1101],[118.166,35.1101],[118.166,35.1101],[118.1662,35.1101],[118.1663,35.1101],[118.1664,35.1101],[118.1665,35.1101],[118.1668,35.1101],[118.167,35.1101],[118.167,35.1101],[118.167,35.1101],[118.167,35.11],[118.167,35.1099],[118.167,35.1099],[118.1671,35.1099],[118.1671,35.1099],[118.1671,35.1099],[118.1673,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.11],[118.1673,35.11],[118.1673,35.11],[118.1673,35.1101],[118.1674,35.1103],[118.1674,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1677,35.1106],[118.1677,35.1106],[118.1677,35.1106],[118.1678,35.1106],[118.168,35.1106],[118.1681,35.1105],[118.1682,35.1105],[118.1684,35.1105],[118.1684,35.1105],[118.1685,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1689,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1694,35.1104],[118.1698,35.1104],[118.1698,35.1104],[118.1698,35.1104],[118.1699,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1108],[118.1703,35.111],[118.1703,35.111],[118.1703,35.111],[118.1704,35.1109],[118.1704,35.1109],[118.1705,35.1109],[118.1705,35.1109],[118.1705,35.1109],[118.1706,35.1109],[118.1706,35.1109],[118.1706,35.1109],[118.1707,35.1109],[118.1709,35.1109],[118.1709,35.1109],[118.1709,35.1109],[118.171,35.1109],[118.171,35.1109],[118.1712,35.1109],[118.1712,35.1109],[118.1714,35.1109],[118.1714,35.1109],[118.1715,35.1109],[118.1718,35.1109],[118.1718,35.1109],[118.1719,35.1109],[118.172,35.1109],[118.1721,35.1109],[118.1721,35.1109],[118.1721,35.1109],[118.1722,35.111],[118.1723,35.111],[118.1724,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1726,35.1109],[118.1727,35.111],[118.1728,35.111],[118.1728,35.111],[118.1731,35.1109],[118.1731,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1733,35.1109],[118.1733,35.1109],[118.1733,35.1109],[118.1734,35.1109],[118.1735,35.1109],[118.1735,35.1109],[118.1735,35.111],[118.1736,35.111],[118.1737,35.111],[118.1738,35.111],[118.1738,35.111],[118.1738,35.111],[118.174,35.1111],[118.1741,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1745,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.175,35.111],[118.175,35.111],[118.1751,35.111],[118.1752,35.1109],[118.1757,35.1108],[118.1758,35.1107],[118.1761,35.1106],[118.1764,35.1106],[118.1767,35.1104],[118.1773,35.1103],[118.1777,35.1101],[118.178,35.11],[118.1784,35.1099],[118.1784,35.1099],[118.1787,35.1098],[118.1789,35.1097],[118.179,35.1097],[118.1789,35.1095],[118.1788,35.1091],[118.1788,35.1088],[118.1788,35.1084],[118.1788,35.1081],[118.1787,35.1076],[118.1787,35.1073],[118.1787,35.107],[118.1788,35.1067],[118.1788,35.1067],[118.1789,35.1066],[118.1789,35.1066],[118.1789,35.1066],[118.1789,35.1066],[118.179,35.106],[118.1792,35.1054],[118.1792,35.1054],[118.1793,35.1048],[118.1794,35.1043],[118.1795,35.1042],[118.1795,35.104],[118.1795,35.104],[118.1796,35.1039],[118.1797,35.1037],[118.1797,35.1037],[118.1799,35.1033],[118.18,35.103],[118.18,35.1029],[118.18,35.1027],[118.1802,35.1022],[118.1803,35.1021],[118.1803,35.102],[118.1803,35.102],[118.1804,35.1019],[118.1804,35.1018],[118.1804,35.1017],[118.1805,35.1015],[118.1805,35.1014],[118.1805,35.1014],[118.1805,35.1012],[118.1806,35.1011],[118.1806,35.1011],[118.1806,35.101],[118.1806,35.101],[118.1806,35.1009],[118.1806,35.1008],[118.1806,35.1007],[118.1806,35.1007],[118.1806,35.1007],[118.1806,35.1006],[118.1806,35.1003],[118.1806,35.1001],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1805,35.0998],[118.1805,35.0998],[118.1805,35.0998],[118.1804,35.0997],[118.1804,35.0997],[118.1803,35.0996],[118.1803,35.0996],[118.1803,35.0995],[118.1803,35.0995],[118.1803,35.0995],[118.1802,35.0994],[118.1802,35.0994],[118.1802,35.0994],[118.1802,35.0994],[118.1801,35.0993],[118.1801,35.0992],[118.1801,35.0992],[118.18,35.099],[118.18,35.099],[118.1799,35.099],[118.1799,35.099],[118.1799,35.099],[118.1799,35.0989],[118.1798,35.0988],[118.1798,35.0988],[118.1798,35.0988],[118.1797,35.0988],[118.1797,35.0988],[118.1797,35.0988],[118.1797,35.0987],[118.1796,35.0986],[118.1797,35.0985],[118.1797,35.0985],[118.1798,35.0983],[118.1798,35.098],[118.18,35.0978],[118.18,35.0977],[118.1801,35.0975],[118.1801,35.0974],[118.1801,35.0973],[118.18,35.0971],[118.18,35.097],[118.18,35.097],[118.18,35.0968],[118.1799,35.0967],[118.1799,35.0967],[118.1799,35.0967],[118.1799,35.0966],[118.1799,35.0966],[118.1799,35.0966],[118.1799,35.0965],[118.1799,35.0965],[118.1799,35.0965],[118.1798,35.0964],[118.1798,35.0964],[118.1797,35.0963],[118.1797,35.0961],[118.1801,35.0961],[118.1803,35.0961],[118.1811,35.0961],[118.1811,35.0961],[118.1812,35.0956],[118.1812,35.0956],[118.1812,35.0952],[118.1812,35.0951],[118.1814,35.0951],[118.1816,35.0951],[118.1816,35.0951],[118.1817,35.0951],[118.1817,35.0951],[118.1823,35.0952],[118.1828,35.0952],[118.1828,35.0952],[118.1828,35.0952],[118.1828,35.095],[118.1828,35.0948],[118.1828,35.0947],[118.1829,35.0942],[118.1829,35.0942],[118.1829,35.0941],[118.1829,35.0941],[118.1829,35.0936],[118.1829,35.0936],[118.1829,35.0935],[118.1829,35.0934],[118.1829,35.0934],[118.1829,35.0932],[118.183,35.0931],[118.183,35.093],[118.183,35.0929],[118.183,35.0929],[118.183,35.0929],[118.1835,35.093],[118.1841,35.093],[118.1847,35.093],[118.1848,35.0925],[118.1848,35.092],[118.1849,35.0917],[118.1849,35.0915],[118.1849,35.0915],[118.1849,35.0914],[118.1849,35.0914],[118.1849,35.0914],[118.1849,35.0913],[118.1851,35.0914],[118.1856,35.0914],[118.1862,35.0915],[118.1868,35.0915],[118.1868,35.0915],[118.1868,35.0916],[118.1868,35.0916],[118.1868,35.0916],[118.187,35.0916],[118.187,35.0915],[118.187,35.0915],[118.187,35.0913],[118.187,35.0913],[118.187,35.0912],[118.1871,35.0907],[118.1872,35.0902],[118.1872,35.0897],[118.1872,35.0897],[118.1872,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1877,35.0898],[118.1879,35.0898],[118.1882,35.0898],[118.1889,35.0899],[118.1894,35.0899],[118.1896,35.09],[118.1897,35.09],[118.1898,35.09],[118.1902,35.09],[118.1902,35.09],[118.1903,35.09],[118.1906,35.09],[118.1909,35.0901],[118.1909,35.0901],[118.1909,35.09],[118.191,35.0896],[118.191,35.0892],[118.191,35.0891],[118.191,35.0889],[118.1911,35.0886],[118.1911,35.0883],[118.1911,35.0883],[118.1906,35.0882],[118.1905,35.0882],[118.1905,35.0882],[118.1905,35.0882],[118.1898,35.0881],[118.1895,35.0881],[118.1892,35.0881],[118.1889,35.088],[118.1888,35.088],[118.1886,35.088],[118.1886,35.088],[118.1881,35.088],[118.1878,35.0879],[118.1876,35.0879],[118.1874,35.0879],[118.1874,35.0879],[118.1874,35.0879],[118.1875,35.0875],[118.1875,35.0872],[118.1873,35.0872],[118.1873,35.0872],[118.1873,35.0872],[118.1871,35.0872],[118.1871,35.0872],[118.187,35.0872],[118.1867,35.0872],[118.1865,35.0872],[118.1865,35.0872],[118.1859,35.0872],[118.1858,35.0872],[118.1855,35.0872],[118.1854,35.0872],[118.1853,35.0872],[118.1852,35.0872],[118.1851,35.0872],[118.185,35.0872],[118.1848,35.0873],[118.1848,35.0873],[118.1848,35.0873],[118.1848,35.0873],[118.1847,35.0873],[118.1846,35.0873],[118.1845,35.0873],[118.1845,35.0873],[118.1844,35.0873],[118.1843,35.0873],[118.1843,35.0873],[118.1842,35.0873],[118.1841,35.0872],[118.1841,35.0872],[118.1841,35.0872],[118.1839,35.0872],[118.1839,35.0872],[118.1838,35.0872],[118.1838,35.0872],[118.1838,35.0869],[118.1838,35.0863],[118.1838,35.0862],[118.1839,35.0861],[118.1839,35.086],[118.1839,35.086],[118.1839,35.0858],[118.1839,35.0856],[118.1839,35.0856],[118.1839,35.0856],[118.184,35.0854],[118.184,35.0854],[118.184,35.0854],[118.1843,35.0854],[118.1847,35.0854],[118.1847,35.0854],[118.185,35.0854],[118.1852,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0853],[118.1853,35.0852],[118.1853,35.0852],[118.1854,35.085],[118.1854,35.0847],[118.1854,35.0845],[118.1855,35.0842],[118.1855,35.0839],[118.1856,35.0834],[118.1856,35.0829],[118.1857,35.0824],[118.1857,35.0823],[118.1857,35.0823],[118.1852,35.0823],[118.1847,35.0822],[118.1846,35.0822],[118.1837,35.0821],[118.1837,35.0816],[118.1838,35.081],[118.1839,35.0804],[118.1839,35.0804],[118.1839,35.0804],[118.1839,35.0803],[118.1838,35.0803],[118.1838,35.0803],[118.1838,35.0803],[118.1837,35.0803],[118.1838,35.0802],[118.1838,35.0801],[118.1839,35.0801],[118.184,35.0798],[118.184,35.0798],[118.1841,35.0797],[118.1841,35.0795],[118.1842,35.0795],[118.1842,35.0795],[118.1842,35.0795],[118.1842,35.0794],[118.1842,35.0794],[118.1842,35.0794],[118.1845,35.079],[118.1845,35.079],[118.1845,35.079],[118.1845,35.079],[118.1845,35.0789],[118.1846,35.0788],[118.1846,35.0788],[118.1848,35.0785],[118.1848,35.0784],[118.1848,35.0784],[118.1848,35.0784],[118.1848,35.0784],[118.185,35.0781],[118.185,35.078],[118.1853,35.0776],[118.1853,35.0776],[118.1856,35.0771],[118.1856,35.0771],[118.1856,35.0771],[118.1856,35.077],[118.1856,35.077],[118.1856,35.077],[118.1856,35.077],[118.1856,35.0769],[118.1857,35.0767],[118.1869,35.0768],[118.1869,35.0768],[118.1873,35.0768],[118.1873,35.0767],[118.1872,35.0766],[118.1872,35.0764],[118.1874,35.0764],[118.1883,35.0765],[118.1886,35.0765],[118.1889,35.0765],[118.1889,35.0765],[118.1903,35.0766],[118.1903,35.0766],[118.1903,35.0766],[118.191,35.0766],[118.1914,35.0766],[118.1916,35.0766],[118.1919,35.0766],[118.1919,35.0766],[118.192,35.0757],[118.1921,35.0748],[118.1921,35.0747],[118.1921,35.0746],[118.1924,35.0746],[118.1925,35.0745],[118.1925,35.0745],[118.1929,35.0744],[118.193,35.0744],[118.193,35.0744],[118.193,35.0744],[118.193,35.0744],[118.1935,35.0742],[118.1936,35.0742],[118.1936,35.0742],[118.1936,35.0742],[118.1941,35.0742],[118.1945,35.0742],[118.1949,35.0742],[118.1949,35.0743],[118.1954,35.0744],[118.1954,35.0747],[118.1954,35.0747],[118.1955,35.0747],[118.1955,35.0747],[118.1956,35.0747],[118.1956,35.0748],[118.1956,35.0752],[118.1955,35.0755],[118.1955,35.0757],[118.1955,35.0757],[118.1955,35.0761],[118.1955,35.0762],[118.1956,35.0762],[118.1959,35.0762],[118.1959,35.0762],[118.1959,35.0766],[118.1959,35.0766],[118.1965,35.0766],[118.1967,35.0766],[118.1969,35.0766],[118.1969,35.0766],[118.1971,35.0766],[118.1971,35.0766],[118.1972,35.0766],[118.1973,35.0766],[118.1973,35.0766],[118.1975,35.0766],[118.1975,35.0766],[118.1977,35.0766],[118.1986,35.0767],[118.1987,35.0767],[118.1987,35.0767],[118.1987,35.0765],[118.1987,35.0764],[118.1987,35.0762],[118.1987,35.0762],[118.1987,35.0761],[118.1987,35.0761],[118.1987,35.0755],[118.1987,35.0755],[118.1987,35.075],[118.1987,35.0748],[118.1987,35.0746],[118.1987,35.0744],[118.1987,35.0744],[118.1987,35.0744],[118.1988,35.0744],[118.1988,35.0742],[118.2014,35.0742],[118.2017,35.0742],[118.2018,35.0755],[118.2019,35.0755],[118.2019,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.2021,35.0755],[118.2021,35.0755],[118.2028,35.0754],[118.2036,35.0754],[118.2044,35.0754],[118.205,35.0754],[118.205,35.0754],[118.205,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0748],[118.2051,35.0743],[118.2051,35.0742],[118.2051,35.0742],[118.2051,35.0742],[118.2051,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0743],[118.2053,35.0746],[118.2059,35.0746],[118.2064,35.0746],[118.2064,35.0747],[118.2064,35.0747],[118.2066,35.0747],[118.207,35.0747],[118.2075,35.0746],[118.2076,35.0746],[118.2076,35.0746],[118.2076,35.0746],[118.2076,35.0747],[118.2076,35.0758],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.2079,35.0766],[118.2083,35.0766],[118.2083,35.0764],[118.2086,35.0763],[118.2087,35.0763],[118.2087,35.0763],[118.2088,35.0763],[118.2088,35.0763],[118.2092,35.0763],[118.2092,35.0763],[118.2094,35.0763],[118.2094,35.0763],[118.2095,35.0763],[118.2095,35.0763],[118.2099,35.0762],[118.21,35.0762],[118.2101,35.0762],[118.2101,35.0762],[118.2104,35.0762],[118.2105,35.0762],[118.2105,35.0762],[118.2105,35.0761],[118.2105,35.0761],[118.2106,35.0761],[118.2112,35.0764],[118.2118,35.0767],[118.2118,35.0767],[118.2119,35.0767],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.2121,35.0765],[118.2121,35.0765],[118.2122,35.0765],[118.2126,35.0763],[118.2132,35.0761],[118.2135,35.0759],[118.2135,35.0758],[118.2136,35.0756],[118.2137,35.0756],[118.2138,35.0756],[118.2138,35.0756],[118.2139,35.0756],[118.2139,35.0756],[118.2139,35.0756],[118.2145,35.0756],[118.2147,35.0756],[118.2148,35.0755],[118.2148,35.0755],[118.2153,35.0755],[118.2155,35.0755],[118.2163,35.0754],[118.2166,35.0754],[118.2168,35.0754],[118.2168,35.0754],[118.2168,35.075],[118.2168,35.0746],[118.2168,35.0742],[118.2168,35.0741],[118.2168,35.0741],[118.2169,35.0741],[118.2169,35.0741],[118.2171,35.0741],[118.2172,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2179,35.0741],[118.2182,35.0741],[118.2182,35.0741],[118.2188,35.074],[118.2188,35.074],[118.2189,35.074],[118.2189,35.074],[118.2189,35.074],[118.2189,35.074],[118.2193,35.074],[118.2194,35.074],[118.2202,35.074],[118.2203,35.074],[118.2203,35.074],[118.2207,35.074],[118.2215,35.0739],[118.2216,35.0739],[118.2216,35.0739],[118.2215,35.0725],[118.2215,35.0725],[118.2215,35.0725],[118.2221,35.0725],[118.2226,35.0724],[118.2228,35.0724],[118.2234,35.0724],[118.224,35.0724],[118.224,35.0724],[118.224,35.072],[118.2239,35.0718],[118.2243,35.0718],[118.225,35.0718],[118.2271,35.0718],[118.2271,35.0719],[118.2271,35.0719],[118.2271,35.072],[118.2272,35.0721],[118.2272,35.0724],[118.2272,35.0725],[118.2272,35.0726],[118.2272,35.0729],[118.2272,35.0729],[118.2272,35.0731],[118.2272,35.0734],[118.2273,35.0735],[118.2273,35.0735],[118.2273,35.0735],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0737],[118.2273,35.0737],[118.2273,35.0738],[118.2273,35.0739],[118.2273,35.0739],[118.2273,35.0742],[118.2274,35.0745],[118.2274,35.0747],[118.2274,35.0747],[118.2274,35.0748],[118.2274,35.0748],[118.2274,35.0749],[118.2274,35.0749],[118.2274,35.075],[118.2274,35.0753],[118.2274,35.0755],[118.2274,35.0756],[118.2275,35.0757],[118.2275,35.0758],[118.2274,35.0758],[118.2277,35.0759],[118.2277,35.0759],[118.2277,35.0759],[118.2278,35.0759],[118.2278,35.0759],[118.2278,35.0759],[118.2279,35.0759],[118.2279,35.0759],[118.228,35.0758],[118.2281,35.0758],[118.2282,35.0758],[118.2282,35.0758],[118.2283,35.0758],[118.2283,35.0758],[118.2284,35.0758],[118.2286,35.0758],[118.2286,35.0758],[118.2286,35.0758],[118.2286,35.0759],[118.2287,35.0778],[118.2292,35.0778],[118.2296,35.0777],[118.2296,35.0777],[118.2296,35.0777],[118.23,35.0777],[118.2303,35.0777],[118.2305,35.0777],[118.2307,35.0777],[118.2307,35.0777],[118.231,35.0777],[118.2311,35.0777],[118.2312,35.0777],[118.2314,35.0777],[118.2316,35.0776],[118.2317,35.0776],[118.232,35.0776],[118.2325,35.0776],[118.2325,35.0776],[118.2325,35.0776],[118.233,35.0776],[118.233,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2332,35.0781],[118.2333,35.0789],[118.2334,35.0794],[118.2334,35.0794],[118.2334,35.0794],[118.2338,35.0794],[118.2354,35.0793],[118.2362,35.0793],[118.2363,35.0793],[118.2363,35.0793],[118.2363,35.0793],[118.2369,35.0792],[118.2376,35.0792],[118.2379,35.0792],[118.238,35.0792],[118.238,35.0792],[118.2382,35.0792],[118.2388,35.0792],[118.2395,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0792],[118.2401,35.0792],[118.2402,35.0797],[118.2402,35.0802],[118.2402,35.0805],[118.2403,35.0806],[118.2406,35.0806],[118.2406,35.0806],[118.2426,35.0804],[118.2426,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.2431,35.0804],[118.2431,35.0804],[118.2432,35.0804],[118.2434,35.0804],[118.2437,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2445,35.0804],[118.2447,35.0804],[118.2448,35.0803],[118.2448,35.0801],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0797],[118.2448,35.0796],[118.2448,35.0793],[118.2448,35.0789],[118.2448,35.0788],[118.2448,35.0788],[118.2448,35.0788],[118.2448,35.0784],[118.2447,35.078],[118.2447,35.0779],[118.2447,35.0779],[118.2447,35.0776],[118.2447,35.0776],[118.2447,35.0774],[118.2447,35.0769],[118.2447,35.0769],[118.2447,35.0769],[118.2446,35.0763],[118.2446,35.0758],[118.2446,35.0758],[118.2446,35.0758],[118.2446,35.0757],[118.2446,35.0757],[118.2454,35.0757],[118.2455,35.0757],[118.2456,35.0757],[118.2458,35.0757],[118.2459,35.0757],[118.246,35.0757],[118.2462,35.0757],[118.2463,35.0757],[118.2464,35.0757],[118.2468,35.0756],[118.247,35.0756],[118.2471,35.0756],[118.2471,35.0756],[118.2472,35.0756],[118.2472,35.0756],[118.2472,35.0752],[118.2471,35.0748],[118.2471,35.0747],[118.2471,35.0747],[118.2468,35.0716],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.0709],[118.2467,35.0708],[118.2467,35.0708],[118.2467,35.0707],[118.2467,35.0707],[118.2467,35.0707],[118.2467,35.0701],[118.2466,35.0695],[118.2466,35.069],[118.2466,35.0689],[118.2466,35.0689],[118.2467,35.0689],[118.2467,35.0689],[118.2467,35.0689],[118.2471,35.0689],[118.2471,35.0689],[118.2471,35.0689],[118.2472,35.0689],[118.2472,35.0689],[118.2476,35.0689],[118.2475,35.0685],[118.2475,35.0683],[118.2475,35.0683],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0681],[118.2475,35.0676],[118.2475,35.0676],[118.2475,35.0675],[118.2475,35.0674],[118.2474,35.0671],[118.2474,35.067],[118.2474,35.0669],[118.2479,35.0669],[118.2479,35.0668],[118.2479,35.0668],[118.2479,35.0667],[118.2479,35.0667],[118.2479,35.0667],[118.2479,35.0666],[118.2479,35.0661],[118.2478,35.0657],[118.2478,35.0654],[118.2478,35.0654],[118.2478,35.0653],[118.2478,35.0649],[118.2482,35.0649],[118.2483,35.0649],[118.2485,35.0649],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0648],[118.2488,35.0648],[118.2488,35.0648],[118.2489,35.0648],[118.249,35.0648],[118.249,35.0648],[118.2491,35.0648],[118.2498,35.0648],[118.2499,35.0648],[118.2499,35.0648],[118.25,35.0648],[118.2499,35.0643],[118.2499,35.0638],[118.2499,35.0633],[118.2499,35.0629],[118.2498,35.0627],[118.2499,35.0627],[118.2499,35.0627],[118.2505,35.0627],[118.2509,35.0627],[118.2512,35.0627],[118.2515,35.0627],[118.2518,35.0627],[118.2519,35.0626],[118.2519,35.0626],[118.252,35.0626],[118.2523,35.0626],[118.2525,35.0626],[118.2527,35.0626],[118.253,35.0626],[118.253,35.0626],[118.253,35.0626],[118.2535,35.0626],[118.2536,35.0625],[118.2542,35.0625],[118.2547,35.0625],[118.2553,35.0624],[118.2553,35.062],[118.2553,35.0617],[118.2553,35.0617],[118.2553,35.0617],[118.256,35.0617],[118.2565,35.0617],[118.257,35.0617],[118.2575,35.0616],[118.2576,35.0616],[118.2576,35.0617],[118.2576,35.0617],[118.2576,35.062],[118.2576,35.0623],[118.2576,35.0624],[118.2577,35.0623],[118.2577,35.0623],[118.2578,35.0623],[118.2582,35.0623],[118.2583,35.0623],[118.2588,35.0623],[118.2589,35.0623],[118.2589,35.0623],[118.2591,35.0625],[118.2591,35.0625],[118.2591,35.0626],[118.2592,35.0626],[118.2592,35.0627],[118.2593,35.0627],[118.2594,35.0627],[118.2594,35.0627],[118.2594,35.0627],[118.2596,35.0628],[118.26,35.0628],[118.26,35.0628],[118.2601,35.0627],[118.2604,35.0627],[118.2604,35.0627],[118.2605,35.0627],[118.2606,35.0627],[118.2607,35.0627],[118.2608,35.0628],[118.2608,35.0628],[118.2608,35.0628],[118.2611,35.063],[118.2614,35.0628],[118.2614,35.0628],[118.2614,35.0627],[118.2614,35.0627],[118.2615,35.0627],[118.2615,35.0627],[118.2617,35.0625],[118.2619,35.0623],[118.262,35.0622],[118.262,35.0622],[118.262,35.0621],[118.2619,35.0619],[118.2618,35.0617],[118.2618,35.0616],[118.2618,35.0615],[118.2618,35.0614],[118.2618,35.0614],[118.2618,35.061],[118.2618,35.0608],[118.2618,35.0608],[118.2618,35.0605],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2623,35.0604],[118.2624,35.0604],[118.2624,35.0604],[118.2624,35.0603],[118.2624,35.0603],[118.2625,35.0602],[118.2625,35.0601],[118.2626,35.0601],[118.2627,35.0601],[118.2627,35.0601],[118.2627,35.0598],[118.2628,35.0598],[118.2628,35.0598],[118.2628,35.0598],[118.2629,35.0598],[118.263,35.0598],[118.263,35.0595],[118.263,35.0595],[118.263,35.0594],[118.263,35.0589],[118.263,35.0586],[118.263,35.0585],[118.2631,35.058],[118.2633,35.0581],[118.2638,35.0581],[118.2639,35.0581],[118.264,35.0581],[118.264,35.0581],[118.2645,35.0582],[118.2645,35.0582],[118.2646,35.0582],[118.2647,35.0582],[118.2652,35.0583],[118.2652,35.0583],[118.2653,35.0583],[118.2656,35.0583],[118.2656,35.0581],[118.2656,35.0579],[118.2656,35.0574],[118.2656,35.0571],[118.2656,35.057],[118.2656,35.057],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0568],[118.2656,35.0566],[118.2656,35.0566],[118.2656,35.0566],[118.2656,35.0566],[118.2657,35.0565],[118.2657,35.0559],[118.2657,35.0556],[118.2657,35.0555],[118.2657,35.0555],[118.2657,35.0555],[118.2656,35.0555],[118.2655,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0553],[118.2654,35.0552],[118.2654,35.0551],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0546],[118.2655,35.0546],[118.2655,35.0546],[118.2655,35.0543],[118.2655,35.0541],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0537],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0528],[118.2655,35.0527],[118.2655,35.0522],[118.2655,35.0522],[118.2655,35.0522],[118.2655,35.0521],[118.2656,35.0519],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.0517],[118.2661,35.0517],[118.2667,35.0517],[118.2672,35.0517],[118.2672,35.0517],[118.2673,35.0517],[118.2673,35.0517],[118.268,35.0516],[118.2687,35.0516],[118.269,35.0516],[118.2692,35.0516],[118.2694,35.0516],[118.2696,35.0516],[118.2698,35.0516],[118.2704,35.0516],[118.2705,35.0516],[118.2706,35.0516],[118.2708,35.0516],[118.2709,35.0512],[118.2709,35.0512],[118.2709,35.0511],[118.2709,35.0511],[118.2709,35.051],[118.2709,35.0509],[118.2709,35.0509],[118.271,35.0505],[118.271,35.0504],[118.271,35.0504],[118.271,35.0504],[118.271,35.0503],[118.271,35.0503],[118.271,35.0502],[118.271,35.0499],[118.271,35.0497],[118.271,35.0496],[118.2711,35.0493],[118.2711,35.0491],[118.2711,35.0491],[118.2711,35.0491],[118.2711,35.049],[118.2711,35.049],[118.2711,35.049],[118.2711,35.0489],[118.2711,35.0487],[118.2712,35.0483],[118.2712,35.0482],[118.2712,35.0482],[118.2712,35.0482],[118.2711,35.0482],[118.2711,35.0482],[118.2712,35.0479],[118.2712,35.0479],[118.2712,35.0477],[118.2712,35.0476],[118.2712,35.0473],[118.2712,35.0473],[118.2712,35.0473],[118.2712,35.0473],[118.2709,35.0472],[118.2709,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0471],[118.2708,35.0471],[118.2708,35.047],[118.2708,35.047],[118.2709,35.047],[118.2709,35.0468],[118.271,35.0466],[118.2709,35.0465],[118.2709,35.0465],[118.2709,35.0465],[118.2709,35.0465],[118.2708,35.0464],[118.2707,35.0463],[118.2706,35.0463],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0461],[118.2707,35.0459],[118.2707,35.0459],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0457],[118.2706,35.0457],[118.2706,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2704,35.0457],[118.2704,35.0457],[118.2704,35.0457],[118.2704,35.0456],[118.2704,35.0456],[118.2704,35.0456],[118.2704,35.0452],[118.2704,35.0451],[118.2704,35.045],[118.2704,35.045],[118.2704,35.0449],[118.2704,35.0449],[118.2704,35.0449],[118.2704,35.0447],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0445],[118.2704,35.0445],[118.2704,35.0445],[118.2704,35.0443],[118.2704,35.0443],[118.2704,35.044],[118.2704,35.044],[118.2704,35.044],[118.2704,35.0439],[118.2704,35.0437],[118.2704,35.0436],[118.2704,35.0436],[118.2704,35.0435],[118.2704,35.0435],[118.2704,35.0434],[118.2704,35.0432],[118.2704,35.0432],[118.2704,35.0431],[118.2704,35.0431],[118.2704,35.043],[118.2704,35.0428],[118.2704,35.0427],[118.2704,35.0427],[118.2704,35.0427],[118.2704,35.0426],[118.2704,35.0426],[118.2703,35.0426],[118.2702,35.0426],[118.27,35.0427],[118.2698,35.0428],[118.2697,35.0428],[118.2697,35.0428],[118.2697,35.0428],[118.2697,35.0429],[118.2697,35.0431],[118.2697,35.0432],[118.2697,35.0433],[118.2697,35.0433],[118.2697,35.0435],[118.2697,35.0437],[118.2697,35.0437],[118.2696,35.0437],[118.2696,35.0437],[118.2696,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2692,35.0438],[118.2691,35.0438],[118.269,35.0438],[118.269,35.0438],[118.2689,35.0438],[118.2687,35.0438],[118.2686,35.0438],[118.2686,35.0438],[118.2685,35.0438],[118.2683,35.0438],[118.2683,35.0438],[118.2681,35.0438],[118.2679,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0434],[118.2677,35.0431],[118.2677,35.0429],[118.2677,35.0427],[118.2677,35.0427],[118.2676,35.0424],[118.2676,35.0419],[118.2676,35.0419],[118.2672,35.0419],[118.267,35.0419],[118.2669,35.0419],[118.2668,35.0419],[118.2665,35.0418],[118.2661,35.0418],[118.2657,35.0418],[118.2653,35.0417],[118.2652,35.0417],[118.2652,35.0417],[118.2651,35.0417],[118.2649,35.0417],[118.2647,35.0417],[118.2646,35.0417],[118.2644,35.0417],[118.2642,35.0417],[118.2638,35.0416],[118.2635,35.0416],[118.2635,35.0416],[118.2635,35.0414],[118.2635,35.0414],[118.2635,35.0414],[118.2636,35.0409],[118.2636,35.0405],[118.2636,35.0402],[118.2636,35.0402],[118.2635,35.0402],[118.2635,35.0402],[118.2633,35.0402],[118.2633,35.0402],[118.2632,35.0402],[118.263,35.0401],[118.2627,35.0401],[118.2627,35.0401],[118.2625,35.0401],[118.2622,35.04],[118.262,35.04],[118.2618,35.04],[118.2615,35.04],[118.2613,35.0399],[118.2612,35.0399],[118.2612,35.0399],[118.2608,35.0399],[118.2608,35.0399],[118.2605,35.0398],[118.2601,35.0398],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0389],[118.2602,35.0384],[118.2602,35.0384],[118.2601,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0383],[118.26,35.0383],[118.2596,35.0383],[118.2592,35.0382],[118.2587,35.0381],[118.2587,35.0381],[118.2586,35.0381],[118.2584,35.0381],[118.2584,35.0381],[118.258,35.0381],[118.2577,35.038],[118.2576,35.038],[118.2576,35.038],[118.2576,35.038],[118.2576,35.0377],[118.2576,35.0374],[118.2576,35.0374],[118.2576,35.037],[118.2576,35.0366],[118.2576,35.0362],[118.2576,35.0359],[118.2576,35.0358],[118.2576,35.0358],[118.2577,35.0356],[118.2577,35.0354],[118.2577,35.0354],[118.2577,35.0351],[118.2577,35.0351],[118.2577,35.035],[118.2577,35.035],[118.2573,35.035],[118.2571,35.035],[118.2565,35.0349],[118.2563,35.0349],[118.2559,35.0349],[118.2557,35.0348],[118.2555,35.0348],[118.2551,35.0348],[118.2551,35.0348],[118.2551,35.0347],[118.2551,35.0346],[118.2551,35.0346],[118.2551,35.0345],[118.2551,35.0345],[118.2551,35.0343],[118.2551,35.034],[118.2551,35.0338],[118.2551,35.0335],[118.2551,35.0334],[118.2551,35.0332],[118.2554,35.0332],[118.256,35.0333],[118.2564,35.0333],[118.2565,35.0333],[118.2565,35.0333],[118.2567,35.0333],[118.2567,35.0333],[118.2569,35.0333],[118.2569,35.0329],[118.2569,35.0329],[118.2569,35.0328],[118.2569,35.0327],[118.2569,35.0323],[118.2569,35.0323],[118.2569,35.0321],[118.257,35.0317],[118.257,35.0317],[118.2571,35.0317],[118.2574,35.0317],[118.2574,35.0317],[118.2574,35.0315],[118.2574,35.0308],[118.2574,35.0304],[118.2575,35.03],[118.2575,35.03],[118.2575,35.0298],[118.2577,35.0297],[118.2577,35.029],[118.2577,35.0289],[118.2577,35.0286],[118.2577,35.0285],[118.2582,35.0285],[118.2583,35.0283],[118.2583,35.0283],[118.2583,35.0279],[118.2583,35.0279],[118.2583,35.0277],[118.2583,35.0276],[118.2583,35.0276],[118.2583,35.0275],[118.2582,35.0275],[118.258,35.0275],[118.2579,35.0274],[118.2578,35.0274],[118.2578,35.0274],[118.2578,35.0273],[118.2578,35.0273],[118.2577,35.0272],[118.2577,35.0272],[118.2577,35.0272],[118.2576,35.0271],[118.2572,35.0271],[118.2571,35.0271],[118.2569,35.0271],[118.2568,35.027],[118.2567,35.027],[118.2564,35.0269],[118.2564,35.0269],[118.2562,35.0269],[118.2561,35.0268],[118.256,35.0267],[118.2559,35.0267],[118.2558,35.0266],[118.2558,35.0266],[118.2557,35.0265],[118.2556,35.0265],[118.2555,35.0264],[118.2554,35.0262],[118.2554,35.0261],[118.2553,35.0261],[118.2553,35.026],[118.2553,35.0258],[118.2553,35.0257],[118.2553,35.0256],[118.2553,35.0254],[118.2553,35.0253],[118.2552,35.0251],[118.2552,35.0251],[118.2551,35.025],[118.2552,35.025],[118.2552,35.025],[118.2554,35.025],[118.2554,35.025],[118.2556,35.025],[118.2556,35.0243],[118.2556,35.0242],[118.2555,35.0237],[118.2555,35.0236],[118.2555,35.0228],[118.2555,35.0228],[118.2555,35.0227],[118.2555,35.0224],[118.2555,35.0224],[118.2555,35.0224],[118.2558,35.0224],[118.2564,35.0224],[118.2568,35.0224],[118.2577,35.0224],[118.2577,35.0221],[118.2577,35.0221],[118.2577,35.022],[118.2576,35.0219],[118.2576,35.0218],[118.2576,35.0217],[118.2576,35.0215],[118.2575,35.0208],[118.2575,35.0203],[118.2575,35.0203],[118.2575,35.0202],[118.2579,35.0193],[118.2581,35.0191],[118.2585,35.0184],[118.2586,35.0181],[118.2587,35.0179],[118.2587,35.0178],[118.2588,35.0177],[118.2591,35.0177],[118.2602,35.0176],[118.2603,35.0176],[118.2607,35.0176],[118.261,35.0176],[118.2612,35.0176],[118.2612,35.0177],[118.2611,35.0186],[118.2611,35.0187],[118.261,35.0192],[118.2609,35.0196],[118.2608,35.0202],[118.2608,35.0204],[118.2613,35.0204],[118.2614,35.0204],[118.2617,35.0204],[118.2623,35.0204],[118.2639,35.0205],[118.2645,35.0205],[118.2651,35.0206],[118.2667,35.0206],[118.267,35.0206],[118.2674,35.0206],[118.2682,35.0207],[118.2698,35.0208],[118.2706,35.0208],[118.2706,35.0208],[118.271,35.0208],[118.2711,35.0208],[118.2721,35.0208],[118.2727,35.0208],[118.2728,35.0208],[118.2736,35.0209],[118.2743,35.021],[118.2748,35.021],[118.2749,35.021],[118.275,35.021],[118.2755,35.0211],[118.2764,35.0211],[118.2772,35.0212],[118.2772,35.021],[118.2772,35.0208],[118.2772,35.0205],[118.2772,35.0204],[118.2772,35.02],[118.2772,35.0199],[118.2772,35.0196],[118.2773,35.0193],[118.2773,35.019],[118.2773,35.0188],[118.2773,35.0188],[118.2773,35.0187],[118.2773,35.0186],[118.2773,35.0182],[118.2773,35.0181],[118.2773,35.0178],[118.2773,35.0176],[118.2773,35.0176],[118.2773,35.0175],[118.2773,35.0174],[118.2773,35.0174],[118.2773,35.0173],[118.2773,35.0173],[118.2782,35.0173],[118.2791,35.0173],[118.2791,35.0172],[118.279,35.0161],[118.279,35.0157],[118.279,35.0147],[118.279,35.0145],[118.279,35.0141],[118.2787,35.0141],[118.2787,35.0135],[118.2775,35.0135],[118.2775,35.0123],[118.2775,35.0117],[118.2775,35.0112],[118.2774,35.0111],[118.2775,35.0108],[118.2775,35.0106],[118.2775,35.0105],[118.2775,35.0096],[118.2775,35.0096],[118.2776,35.0095],[118.2776,35.0094],[118.2776,35.0093],[118.2776,35.0083],[118.2776,35.0077],[118.2777,35.0077],[118.2777,35.0071],[118.2777,35.006],[118.2777,35.006],[118.2777,35.0057],[118.2777,35.0053],[118.2778,35.0052],[118.2778,35.0044],[118.2788,35.0044],[118.2796,35.0043],[118.2802,35.0043],[118.2806,35.0043],[118.2805,35.0031],[118.2805,35.003],[118.2804,35.0022],[118.2804,35.002],[118.2803,35.0011],[118.2803,35.0005],[118.2804,35.0005],[118.2807,35.0005],[118.2807,35],[118.2807,34.9989],[118.2807,34.9988],[118.2807,34.9987],[118.2804,34.9987],[118.2801,34.9987],[118.2799,34.9987],[118.2791,34.9987],[118.2782,34.9988],[118.2778,34.9988],[118.2778,34.9988],[118.2778,34.9988],[118.2778,34.9987],[118.2778,34.9986],[118.2778,34.998],[118.2778,34.998],[118.2777,34.9975],[118.2777,34.9974],[118.2777,34.997],[118.2777,34.9969],[118.2768,34.997],[118.276,34.997],[118.2755,34.9971],[118.2754,34.9962],[118.2754,34.9957],[118.2753,34.9952],[118.2753,34.9951],[118.2748,34.9952],[118.2748,34.9952],[118.2747,34.9952],[118.2745,34.9952],[118.2744,34.9952],[118.2744,34.9952],[118.2743,34.9952],[118.2743,34.9952],[118.2739,34.9952],[118.2738,34.9952],[118.2732,34.9952],[118.2732,34.9952],[118.2732,34.9952],[118.2731,34.9948],[118.2731,34.9943],[118.2731,34.9938],[118.2731,34.9938],[118.273,34.9933],[118.273,34.9927],[118.273,34.9922],[118.2729,34.9918],[118.2729,34.9917],[118.2729,34.9916],[118.2729,34.9912],[118.2729,34.991],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2728,34.9907],[118.2728,34.9905],[118.2728,34.9905],[118.2728,34.9902],[118.2728,34.9898],[118.2729,34.9898],[118.2732,34.9897],[118.2732,34.9897],[118.2734,34.9897],[118.2735,34.9897],[118.2735,34.9897],[118.2735,34.9897],[118.2736,34.9897],[118.2737,34.9897],[118.2738,34.9897],[118.2738,34.9897],[118.274,34.9897],[118.2748,34.9897],[118.2751,34.9896],[118.2751,34.9892],[118.2751,34.9889],[118.2751,34.9884],[118.2751,34.9884],[118.275,34.9884],[118.2747,34.9883],[118.2747,34.9883],[118.2744,34.9882],[118.2743,34.9881],[118.274,34.9881],[118.2739,34.9881],[118.2738,34.988],[118.2738,34.988],[118.2738,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2738,34.9878],[118.2738,34.9878],[118.2737,34.9878],[118.2737,34.9878],[118.2737,34.9878],[118.2735,34.9877],[118.2734,34.9876],[118.2734,34.9875],[118.2734,34.9872],[118.2734,34.9871],[118.2733,34.9871],[118.2733,34.9871],[118.273,34.987],[118.273,34.987],[118.273,34.9867],[118.272,34.9865],[118.272,34.9862],[118.272,34.9862],[118.272,34.9862],[118.272,34.9862],[118.272,34.9861],[118.272,34.9861],[118.2715,34.9859],[118.2715,34.9859],[118.2715,34.9859],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9857],[118.2716,34.9855],[118.2716,34.9851],[118.2717,34.9846],[118.2717,34.9844],[118.2717,34.9842],[118.2717,34.9839],[118.2717,34.9838],[118.2716,34.9834],[118.2716,34.9834],[118.2715,34.983],[118.2715,34.983],[118.2723,34.983],[118.273,34.983],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9826],[118.273,34.9825],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2732,34.9823],[118.2733,34.9822],[118.2732,34.9822],[118.273,34.9821],[118.2726,34.9818],[118.2726,34.9814],[118.2728,34.9815],[118.2729,34.9816],[118.273,34.9816],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2733,34.9817],[118.2736,34.9819],[118.2737,34.9809],[118.2737,34.9804],[118.2738,34.98],[118.2738,34.9795],[118.2739,34.9791],[118.2739,34.9791],[118.2739,34.9791],[118.2739,34.9788],[118.2739,34.9787],[118.2739,34.9783],[118.2739,34.978],[118.2739,34.978],[118.2739,34.978],[118.2736,34.9781],[118.2734,34.9782],[118.2733,34.9782],[118.2732,34.9782],[118.273,34.9782],[118.2728,34.978],[118.2728,34.978],[118.2727,34.978],[118.2725,34.9781],[118.2721,34.9784],[118.2719,34.9785],[118.2717,34.9785],[118.2714,34.9784],[118.2708,34.9782],[118.2706,34.9781],[118.2704,34.9781],[118.2703,34.9781],[118.2694,34.9781],[118.269,34.9781],[118.2684,34.9781],[118.2684,34.9781],[118.2684,34.9783],[118.2685,34.9788],[118.2686,34.9791],[118.2686,34.9792],[118.2686,34.9793],[118.2686,34.9801],[118.2683,34.9801],[118.2673,34.9801],[118.2664,34.9801],[118.2662,34.9801],[118.2662,34.9801],[118.266,34.9801],[118.2659,34.9801],[118.2655,34.9801],[118.2654,34.9801],[118.2654,34.9801],[118.2654,34.9801],[118.2653,34.9801],[118.2651,34.9801],[118.2652,34.9808],[118.2642,34.9809],[118.2642,34.9818],[118.2636,34.9818],[118.2636,34.9822],[118.2636,34.9826],[118.2636,34.9827],[118.2637,34.9827],[118.2637,34.9827],[118.2637,34.9828],[118.2637,34.9829],[118.2637,34.9831],[118.2637,34.9834],[118.2637,34.9835],[118.2637,34.9835],[118.2634,34.9835],[118.263,34.9835],[118.2626,34.9836],[118.2618,34.9836],[118.2614,34.9836],[118.261,34.9836],[118.2602,34.9837],[118.2596,34.9837],[118.2595,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.984],[118.2595,34.9845],[118.2595,34.9849],[118.2595,34.9854],[118.2594,34.9854],[118.2593,34.9854],[118.2592,34.9855],[118.2591,34.9855],[118.2589,34.9855],[118.2586,34.9856],[118.2586,34.9856],[118.2586,34.9857],[118.2586,34.9857],[118.2586,34.9859],[118.2586,34.9859],[118.2587,34.9861],[118.2587,34.9861],[118.2587,34.9861],[118.2587,34.9862],[118.2587,34.9863],[118.2587,34.9864],[118.2586,34.9864],[118.2577,34.9865],[118.2578,34.9869],[118.2577,34.9869],[118.2575,34.9869],[118.2576,34.9871],[118.2578,34.9876],[118.2578,34.9878],[118.258,34.9881],[118.2578,34.9882],[118.2577,34.9882],[118.2578,34.9883],[118.2578,34.9883],[118.2578,34.9884],[118.2578,34.9884],[118.2578,34.9884],[118.2572,34.9885],[118.2572,34.9885],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9883],[118.2569,34.988],[118.2568,34.9879],[118.2567,34.9879],[118.2561,34.988],[118.2557,34.988],[118.2556,34.988],[118.2553,34.988],[118.2543,34.9881],[118.2545,34.9885],[118.2549,34.9889],[118.2554,34.9894],[118.2548,34.9895],[118.2543,34.9896],[118.254,34.9896],[118.254,34.9898],[118.2536,34.9898],[118.2528,34.9899],[118.2524,34.9899],[118.252,34.99],[118.252,34.9902],[118.2521,34.9907],[118.2521,34.9908],[118.2521,34.9908],[118.2521,34.9908],[118.2521,34.9909],[118.2522,34.991],[118.2522,34.9911],[118.2522,34.9912],[118.2522,34.9916],[118.2523,34.9919],[118.2523,34.9926],[118.2513,34.9926],[118.251,34.9926],[118.2508,34.9926],[118.2504,34.9926],[118.2501,34.9926],[118.2497,34.9926],[118.2496,34.9926],[118.2496,34.9926],[118.2496,34.9926],[118.2495,34.9927],[118.2495,34.9927],[118.2495,34.9927],[118.2495,34.9928],[118.2495,34.993],[118.2495,34.9932],[118.2496,34.9934],[118.2496,34.9934],[118.2496,34.9935],[118.2495,34.9935],[118.2494,34.9935],[118.2493,34.9935],[118.2491,34.9935],[118.2489,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2487,34.9934],[118.2488,34.9934],[118.2486,34.9867],[118.2452,34.9867],[118.2366,34.9868],[118.2366,34.9867],[118.2364,34.9867],[118.2363,34.9866],[118.2361,34.9866],[118.236,34.9866],[118.2359,34.9866],[118.2358,34.9865],[118.2358,34.9865],[118.2358,34.9865],[118.2358,34.9865],[118.2357,34.9865],[118.2356,34.9864],[118.2354,34.9864],[118.2351,34.9863],[118.2347,34.9862],[118.2345,34.9862],[118.2345,34.9862],[118.2345,34.9862],[118.2344,34.9861],[118.2343,34.9861],[118.2341,34.9861],[118.234,34.9861],[118.2339,34.9861],[118.2338,34.9861],[118.2338,34.9861],[118.2338,34.9861],[118.2338,34.9862],[118.2337,34.9863],[118.2335,34.9864],[118.2334,34.9865],[118.2332,34.9867],[118.2332,34.9867],[118.2332,34.9867],[118.2331,34.9868],[118.233,34.9868],[118.2329,34.9868],[118.2327,34.9867],[118.2327,34.9867],[118.2327,34.9867],[118.2327,34.9867],[118.2326,34.9866],[118.2326,34.9866],[118.2324,34.9865],[118.2322,34.9864],[118.2321,34.9864],[118.232,34.9863],[118.2317,34.9862],[118.2317,34.9862],[118.2317,34.9862],[118.2316,34.9862],[118.2314,34.9862],[118.2315,34.986],[118.2315,34.9859],[118.2315,34.9857],[118.2315,34.9854],[118.2315,34.9854],[118.2315,34.9854],[118.2315,34.9853],[118.2315,34.9853],[118.2315,34.9852],[118.2315,34.9852],[118.2316,34.9851],[118.2316,34.9849],[118.2316,34.9848],[118.2316,34.9847],[118.2317,34.9846],[118.2317,34.9844],[118.2318,34.9842],[118.2318,34.9842],[118.2318,34.9841],[118.2315,34.9841],[118.2314,34.984],[118.2313,34.9839],[118.231,34.9838],[118.231,34.9838],[118.231,34.9838],[118.2306,34.9836],[118.2305,34.9835],[118.2304,34.9836],[118.2304,34.9838],[118.2303,34.984],[118.2302,34.9841],[118.2301,34.9844],[118.2301,34.9846],[118.23,34.9849],[118.23,34.985],[118.23,34.985],[118.23,34.9851],[118.23,34.9851],[118.2299,34.9851],[118.2298,34.9851],[118.2298,34.9851],[118.2298,34.9851],[118.2298,34.9851],[118.2298,34.985],[118.2298,34.9849],[118.2298,34.9848],[118.2298,34.9846],[118.2298,34.9846],[118.2298,34.9845],[118.2298,34.9845],[118.2298,34.9844],[118.2298,34.9843],[118.2299,34.9841],[118.2299,34.9841],[118.2299,34.9841],[118.2299,34.9841],[118.2299,34.9841],[118.2299,34.984],[118.2299,34.984],[118.2299,34.984],[118.2299,34.9839],[118.23,34.9838],[118.23,34.9837],[118.23,34.9837],[118.2301,34.9834],[118.2301,34.9834],[118.2301,34.9834],[118.2302,34.9833],[118.2299,34.9831],[118.2298,34.983],[118.2298,34.983],[118.2298,34.9829],[118.2297,34.9829],[118.2297,34.9829],[118.2298,34.9822],[118.2299,34.982],[118.2299,34.9818],[118.2299,34.9816],[118.2299,34.9816],[118.2299,34.9815],[118.2299,34.9814],[118.2299,34.9813],[118.2299,34.9813],[118.23,34.9811],[118.23,34.9811],[118.23,34.9811],[118.2299,34.9809],[118.2299,34.9809],[118.2299,34.9808],[118.2299,34.9807],[118.2299,34.9807],[118.2298,34.9806],[118.2298,34.9804],[118.2298,34.9804],[118.2298,34.9803],[118.2298,34.9801],[118.2298,34.9801],[118.2298,34.9799],[118.2298,34.9798],[118.2298,34.9797],[118.2298,34.9796],[118.2298,34.9796],[118.2298,34.9795],[118.2298,34.9794],[118.2298,34.9794],[118.2298,34.9793],[118.2298,34.9791],[118.2298,34.9789],[118.2298,34.9789],[118.2298,34.9789],[118.2298,34.9788],[118.2298,34.9787],[118.2298,34.9786],[118.2298,34.9786],[118.2298,34.9785],[118.2298,34.9785],[118.2298,34.9785],[118.2298,34.9784],[118.2298,34.9784],[118.2298,34.9783],[118.2298,34.9783],[118.2298,34.9783],[118.2298,34.9779],[118.2298,34.9778],[118.2298,34.9778],[118.2299,34.9775],[118.2298,34.9773],[118.2299,34.9772],[118.2299,34.9771],[118.2299,34.9771],[118.2299,34.977],[118.2299,34.977],[118.2298,34.9769],[118.2298,34.9768],[118.2298,34.9767],[118.2298,34.9766],[118.2298,34.9765],[118.2298,34.9765],[118.2298,34.9765],[118.2298,34.9764],[118.2298,34.9763],[118.2298,34.9762],[118.2297,34.9762],[118.2294,34.9762],[118.2293,34.9762],[118.2291,34.9763],[118.229,34.9763],[118.2287,34.9763],[118.2285,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2283,34.9763],[118.2283,34.9761],[118.228,34.9749],[118.2279,34.9747],[118.2279,34.9746],[118.2279,34.9746],[118.2279,34.9746],[118.2278,34.9742],[118.2279,34.9742],[118.2286,34.9742],[118.2288,34.9742],[118.229,34.9741],[118.229,34.9741],[118.2293,34.9741],[118.2294,34.9741],[118.2295,34.9741],[118.2296,34.9741],[118.2297,34.9741],[118.23,34.9741],[118.2303,34.9741],[118.2303,34.9741],[118.2305,34.9741],[118.2305,34.974],[118.2308,34.974],[118.2308,34.974],[118.2308,34.974],[118.2309,34.9739],[118.231,34.9739],[118.2312,34.9738],[118.2312,34.9738],[118.2313,34.9737],[118.2315,34.9737],[118.2315,34.9737],[118.2316,34.9736],[118.2318,34.9736],[118.2319,34.9736],[118.2319,34.9736],[118.2319,34.9739],[118.2319,34.9742],[118.2319,34.9743],[118.2319,34.9746],[118.2321,34.9746],[118.2321,34.9745],[118.2321,34.9744],[118.2321,34.9744],[118.2321,34.9742],[118.2321,34.9741],[118.2322,34.9738],[118.2322,34.9736],[118.2323,34.9734],[118.2323,34.9732],[118.2316,34.9731],[118.2317,34.973],[118.2317,34.9725],[118.2318,34.9721],[118.2317,34.972],[118.2315,34.9719],[118.2312,34.9718],[118.2312,34.9718],[118.2312,34.9715],[118.2312,34.9714],[118.2312,34.9711],[118.2312,34.971],[118.2312,34.971],[118.2312,34.971],[118.2312,34.971],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2316,34.9703],[118.2317,34.9703],[118.2317,34.9697],[118.2317,34.9692],[118.2316,34.9685],[118.2316,34.9684],[118.2318,34.9684],[118.2318,34.9684],[118.2318,34.9684],[118.2318,34.9685],[118.232,34.9684],[118.232,34.9684],[118.232,34.9684],[118.2319,34.968],[118.2318,34.9679],[118.2318,34.9678],[118.2316,34.9668],[118.2315,34.9666],[118.2315,34.9666],[118.2315,34.9665],[118.2315,34.9665],[118.2315,34.9665],[118.2314,34.9662],[118.2313,34.9655],[118.2313,34.9655],[118.2313,34.9653],[118.2313,34.9653],[118.2312,34.9652],[118.2315,34.9651],[118.2315,34.9651],[118.232,34.9651],[118.2322,34.9651],[118.2324,34.9651],[118.2325,34.9651],[118.2326,34.965],[118.2327,34.965],[118.2327,34.965],[118.2327,34.965],[118.2327,34.9647],[118.2326,34.9644],[118.2326,34.9641],[118.2316,34.9641],[118.2316,34.9638],[118.2315,34.9636],[118.2315,34.9636],[118.2315,34.9634],[118.2315,34.9633],[118.2315,34.9633],[118.2314,34.9633],[118.2313,34.9628],[118.2312,34.9627],[118.2312,34.9626],[118.2313,34.9627],[118.2313,34.9627],[118.2314,34.9627],[118.2316,34.9627],[118.2319,34.9626],[118.2323,34.9626],[118.2324,34.9626],[118.2324,34.9625],[118.2324,34.9625],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2321,34.9621],[118.232,34.962],[118.232,34.962],[118.2318,34.9617],[118.2317,34.9615],[118.2317,34.9615],[118.2316,34.9614],[118.2316,34.9614],[118.2316,34.9614],[118.2315,34.9614],[118.2315,34.9614],[118.2313,34.9614],[118.2311,34.9615],[118.231,34.9615],[118.231,34.9615],[118.231,34.9615],[118.2307,34.9615],[118.2305,34.9616],[118.2304,34.9616],[118.2303,34.9611],[118.2302,34.9607],[118.2301,34.9603],[118.23,34.9599],[118.23,34.9598],[118.23,34.9598],[118.23,34.9598],[118.23,34.9598],[118.2299,34.9597],[118.2299,34.9596],[118.2299,34.9595],[118.2298,34.9592],[118.2297,34.9588],[118.2297,34.9588],[118.2297,34.9585],[118.2297,34.9585],[118.2297,34.9584],[118.2296,34.9584],[118.2296,34.9583],[118.2296,34.9583],[118.2296,34.9581],[118.2296,34.9581],[118.2296,34.958],[118.2296,34.958],[118.2296,34.958],[118.2296,34.958],[118.2295,34.9576],[118.2294,34.9573],[118.2294,34.9572],[118.2293,34.957],[118.2293,34.957],[118.2292,34.9566],[118.2292,34.9563],[118.2292,34.9563],[118.2291,34.9561],[118.2291,34.9561],[118.2291,34.9561],[118.2259,34.9565],[118.2255,34.9565],[118.2235,34.9568],[118.2235,34.9568],[118.2235,34.9568],[118.2235,34.9567],[118.2233,34.9559],[118.2233,34.9559],[118.2233,34.9557],[118.2233,34.9557],[118.2232,34.9554],[118.2232,34.9553],[118.2231,34.955],[118.2231,34.9549],[118.2229,34.9543],[118.2229,34.9541],[118.2228,34.9539],[118.2227,34.9535],[118.2227,34.9534],[118.2227,34.9533],[118.2227,34.9533],[118.2227,34.9533],[118.2227,34.9533],[118.2226,34.9531],[118.2226,34.9531],[118.2226,34.9531],[118.2226,34.9531],[118.2226,34.9528],[118.2224,34.9523],[118.2224,34.9522],[118.2224,34.9522],[118.2223,34.9518],[118.2222,34.9515],[118.2222,34.9515],[118.2222,34.9512],[118.2222,34.9511],[118.2222,34.9511],[118.2222,34.9511],[118.2221,34.9511],[118.2221,34.951],[118.2221,34.9507],[118.2217,34.949],[118.2217,34.949],[118.2209,34.9491],[118.2201,34.9491],[118.2201,34.9491],[118.22,34.9492],[118.22,34.9492],[118.22,34.949],[118.2198,34.949],[118.2198,34.949],[118.2197,34.949],[118.2197,34.949],[118.2197,34.949],[118.2194,34.9491],[118.2194,34.9491],[118.2192,34.9491],[118.2192,34.9491],[118.2192,34.9491],[118.2181,34.9492],[118.2181,34.9492],[118.2171,34.9494],[118.217,34.9494],[118.2169,34.9494],[118.2169,34.9494],[118.2169,34.9494],[118.2169,34.9494],[118.2169,34.9494],[118.2168,34.9494],[118.2168,34.9494],[118.2167,34.9494],[118.2169,34.9503],[118.2173,34.952],[118.2173,34.952],[118.2173,34.952],[118.2173,34.9521],[118.2173,34.9521],[118.2173,34.9521],[118.2172,34.9521],[118.2172,34.9521],[118.2171,34.9521],[118.2153,34.9524],[118.2148,34.9525],[118.2148,34.9526],[118.2148,34.9526],[118.2148,34.9526],[118.2148,34.9526],[118.2148,34.9526],[118.2149,34.9527],[118.2151,34.9532],[118.2153,34.9538],[118.2153,34.9539],[118.2153,34.9539],[118.2153,34.9539],[118.2153,34.9539],[118.2154,34.9539],[118.2154,34.954],[118.2155,34.9543],[118.2155,34.9544],[118.2156,34.9545],[118.2155,34.9545],[118.2155,34.9545],[118.2154,34.9545],[118.2153,34.9546],[118.2147,34.9547],[118.2136,34.9549],[118.2134,34.955],[118.2133,34.955],[118.2133,34.955],[118.2133,34.9551],[118.2133,34.9551],[118.2134,34.9554],[118.2135,34.9555],[118.2134,34.9555],[118.2134,34.9555],[118.2133,34.9555],[118.2132,34.9555],[118.2129,34.9556],[118.2128,34.9556],[118.2121,34.9557],[118.2118,34.9558],[118.2117,34.9559],[118.2117,34.9558],[118.2116,34.9557],[118.2116,34.9557],[118.2114,34.9557],[118.211,34.9558],[118.2096,34.956],[118.2096,34.956],[118.2095,34.956],[118.2095,34.956],[118.2095,34.956],[118.2095,34.956],[118.2095,34.956],[118.2095,34.956],[118.2094,34.956],[118.2094,34.956],[118.2093,34.9561],[118.2092,34.9561],[118.2092,34.9561],[118.2092,34.9562],[118.2092,34.9563],[118.2092,34.9563],[118.2092,34.9563],[118.2092,34.9563],[118.2092,34.9563],[118.2092,34.9563],[118.2093,34.9564],[118.2094,34.9569],[118.2094,34.957],[118.2095,34.9571],[118.2095,34.9572],[118.2095,34.9572],[118.2095,34.9572],[118.209,34.9572],[118.2089,34.9572],[118.2084,34.9573],[118.2083,34.9573],[118.2083,34.9573],[118.2083,34.9573],[118.2083,34.9574],[118.2084,34.9575],[118.2085,34.9581],[118.2085,34.9581],[118.2085,34.9581],[118.2085,34.9581],[118.2085,34.9582],[118.2086,34.9582],[118.2086,34.9583],[118.2086,34.9583],[118.2086,34.9585],[118.2076,34.9586],[118.2075,34.9586],[118.2071,34.9586],[118.2071,34.9586],[118.2071,34.9586],[118.2071,34.9586],[118.2071,34.9586],[118.2071,34.9586],[118.2066,34.9587],[118.2065,34.9587],[118.2065,34.9587],[118.2065,34.9587],[118.2065,34.9587],[118.2062,34.9587],[118.2061,34.9587],[118.2059,34.9587],[118.2059,34.9587],[118.2058,34.9587],[118.2058,34.9588],[118.2055,34.9588],[118.2055,34.9588],[118.2055,34.9589],[118.2055,34.959],[118.2055,34.9591],[118.2055,34.9591],[118.2055,34.9591],[118.2055,34.9591],[118.2055,34.9592],[118.2055,34.9592],[118.2055,34.9592],[118.2055,34.9592],[118.2055,34.9592],[118.2055,34.9592],[118.2055,34.9592],[118.2054,34.9592],[118.2054,34.9592],[118.2052,34.9592],[118.2052,34.9592],[118.2052,34.9593],[118.2052,34.9594],[118.2053,34.9596],[118.2053,34.9596],[118.2053,34.96],[118.2053,34.96],[118.2054,34.9602],[118.2054,34.9602],[118.2048,34.9603],[118.2049,34.9608],[118.2049,34.9611],[118.2049,34.9611],[118.205,34.962],[118.205,34.962],[118.2047,34.962],[118.2045,34.9621],[118.2043,34.9621],[118.2041,34.9621],[118.204,34.9621],[118.2038,34.9621],[118.2038,34.9621],[118.2037,34.9621],[118.2037,34.9621],[118.2036,34.9621],[118.2036,34.9621],[118.2034,34.9621],[118.2028,34.9622],[118.2025,34.9623],[118.2022,34.9623],[118.202,34.9623],[118.2018,34.9623],[118.2016,34.9624],[118.2015,34.9624],[118.2014,34.9624],[118.2014,34.9624],[118.2007,34.9624],[118.2006,34.9624],[118.2004,34.9624],[118.1998,34.9625],[118.1996,34.9625],[118.1995,34.9625],[118.1994,34.9625],[118.1992,34.9625],[118.199,34.9625],[118.1989,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9622],[118.1971,34.9624],[118.197,34.9615],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9611],[118.1969,34.9609],[118.1969,34.9609],[118.1969,34.9609],[118.1969,34.9607],[118.1969,34.9607],[118.1968,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9607],[118.1967,34.961],[118.1967,34.9612],[118.1967,34.9612],[118.1966,34.9612],[118.1966,34.9612],[118.1966,34.9612],[118.196,34.9613],[118.1956,34.9613],[118.1939,34.9614],[118.1939,34.9614],[118.1939,34.9611],[118.1939,34.9611],[118.1937,34.9602],[118.1937,34.9602],[118.1937,34.9601],[118.1937,34.96],[118.1937,34.9599],[118.1937,34.9599],[118.1937,34.9599],[118.1936,34.9598],[118.1936,34.9597],[118.1936,34.9597],[118.1935,34.9597],[118.193,34.9598],[118.193,34.9598],[118.1929,34.9598],[118.1922,34.9598],[118.192,34.9598],[118.192,34.9599],[118.1919,34.9599],[118.1918,34.9599],[118.1913,34.9599],[118.1906,34.96],[118.1905,34.96],[118.1904,34.96],[118.1904,34.96],[118.1903,34.96],[118.1897,34.96],[118.1897,34.96],[118.1897,34.96],[118.1894,34.96],[118.1891,34.9601],[118.1888,34.9601],[118.1888,34.9601],[118.1887,34.9601],[118.1881,34.9601],[118.188,34.9601],[118.1878,34.9602],[118.1879,34.9601],[118.1878,34.9601],[118.1878,34.9601],[118.1878,34.9601],[118.1877,34.9601],[118.1877,34.9601],[118.1876,34.9601],[118.1875,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1872,34.9602],[118.1871,34.9602],[118.187,34.9602],[118.187,34.9602],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9604],[118.187,34.9604],[118.1871,34.9606],[118.1871,34.9606],[118.1871,34.9606],[118.1871,34.9606],[118.1874,34.9629],[118.1874,34.963],[118.1873,34.963],[118.1857,34.9631],[118.1857,34.9631],[118.1857,34.9631],[118.1857,34.9631],[118.1849,34.9632],[118.1849,34.9632],[118.1843,34.9633],[118.1843,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1842,34.9642],[118.1842,34.9642],[118.1841,34.9642],[118.1839,34.9642],[118.1832,34.9643],[118.1824,34.9644],[118.1824,34.9644],[118.1824,34.9644],[118.1824,34.9644],[118.1823,34.9644],[118.1823,34.9644],[118.1821,34.9645],[118.1819,34.9645],[118.1818,34.9645],[118.1815,34.9645],[118.1815,34.9643],[118.1815,34.9641],[118.1815,34.9641],[118.1815,34.964],[118.1812,34.9641],[118.1812,34.9641],[118.1811,34.9641],[118.1811,34.9639],[118.181,34.9639],[118.1808,34.964],[118.1807,34.964],[118.1798,34.9645],[118.1795,34.9646],[118.1798,34.9645],[118.1809,34.9643],[118.1811,34.9642],[118.1811,34.9642],[118.1811,34.9642],[118.1811,34.9643],[118.1811,34.9643],[118.1811,34.9643],[118.1811,34.9644],[118.1812,34.9646],[118.1812,34.9647],[118.1812,34.9648],[118.1812,34.9651],[118.1812,34.9654],[118.1813,34.9656],[118.1813,34.9658],[118.1813,34.9659],[118.1813,34.9662],[118.1814,34.9665],[118.1814,34.9667],[118.1814,34.9668],[118.1814,34.9669],[118.1814,34.9669],[118.1814,34.9669],[118.1814,34.9674],[118.1814,34.9674],[118.1798,34.9676],[118.1797,34.9676],[118.1788,34.9677],[118.1786,34.9677],[118.1786,34.9677],[118.1784,34.9678],[118.1771,34.9679],[118.1765,34.968],[118.1763,34.968],[118.1756,34.9681],[118.1756,34.9681],[118.1756,34.9681],[118.1756,34.9681],[118.1757,34.9684],[118.1757,34.9687],[118.1757,34.9688],[118.1757,34.9688],[118.1757,34.9688],[118.1757,34.9689],[118.1758,34.969],[118.1758,34.969],[118.1758,34.969],[118.1758,34.969],[118.1758,34.9691],[118.1758,34.9692],[118.1758,34.9692],[118.1758,34.9692],[118.1758,34.9693],[118.1758,34.9694],[118.1758,34.9695],[118.1758,34.9695],[118.1759,34.9698],[118.1759,34.9699],[118.1759,34.97],[118.1759,34.97],[118.1759,34.9701],[118.176,34.9701],[118.176,34.9703],[118.176,34.9703],[118.176,34.9703],[118.176,34.9705],[118.176,34.9705],[118.176,34.9705],[118.1761,34.9709],[118.1761,34.971],[118.1761,34.9711],[118.1761,34.9712],[118.1761,34.9713],[118.1761,34.9713],[118.1761,34.9713],[118.1761,34.9716],[118.1761,34.9716],[118.1762,34.9716],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9721],[118.1762,34.9721],[118.1762,34.9721],[118.176,34.9721],[118.175,34.9722],[118.1751,34.9723],[118.1751,34.9724],[118.1752,34.9724],[118.1752,34.9725],[118.1753,34.9726],[118.1753,34.9726],[118.1753,34.9726],[118.1753,34.9728],[118.1753,34.9728],[118.1753,34.9728],[118.1753,34.9729],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.9729],[118.1752,34.9728],[118.1752,34.9728],[118.1752,34.9728],[118.1751,34.9727],[118.1749,34.9724],[118.1747,34.9721],[118.1747,34.9721],[118.1747,34.9721],[118.1747,34.972],[118.1746,34.9719],[118.1746,34.9719],[118.1745,34.9718],[118.1744,34.9716],[118.1743,34.9715],[118.1742,34.9714],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.174,34.9716],[118.174,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1743,34.9718],[118.1743,34.9719],[118.1744,34.972],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9722],[118.1745,34.9723],[118.1746,34.9724],[118.1748,34.9729],[118.1748,34.9729],[118.1748,34.9729],[118.1748,34.9729],[118.1745,34.9729],[118.1745,34.9729],[118.1745,34.9729],[118.1744,34.9729],[118.1743,34.9729],[118.1742,34.973],[118.1741,34.973],[118.1741,34.9728],[118.1741,34.9727],[118.1741,34.9725],[118.1741,34.9725],[118.1741,34.9724],[118.1741,34.9724],[118.174,34.9724],[118.174,34.9723],[118.174,34.9723],[118.174,34.9723],[118.174,34.9722],[118.1739,34.9722],[118.1739,34.9721],[118.1739,34.9721],[118.1739,34.9721],[118.1739,34.9721],[118.1738,34.9722],[118.1737,34.9722],[118.1736,34.9723],[118.1736,34.9723],[118.1736,34.9724],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9726],[118.1735,34.9726],[118.1735,34.9727],[118.1736,34.9727],[118.1736,34.9728],[118.1736,34.9731],[118.1736,34.9731],[118.1736,34.9731],[118.1736,34.9732],[118.1737,34.9733],[118.1737,34.9734],[118.1737,34.9734],[118.1737,34.9734],[118.1738,34.9734],[118.1738,34.9734],[118.1739,34.9734],[118.174,34.9734],[118.1742,34.9734],[118.1742,34.9734],[118.1742,34.9734],[118.1743,34.9733],[118.1744,34.9733],[118.1744,34.9734],[118.1744,34.9735],[118.1744,34.9735],[118.1744,34.9735],[118.1744,34.974],[118.1744,34.9741],[118.1744,34.9742],[118.1743,34.9744],[118.1742,34.9745],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1743,34.9749],[118.1743,34.975],[118.1743,34.975],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9752],[118.1743,34.9752],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1742,34.9754],[118.1742,34.9754],[118.1742,34.9754],[118.1742,34.9756],[118.1741,34.9759],[118.1741,34.9763],[118.174,34.9767],[118.1736,34.9767],[118.1736,34.977],[118.1736,34.9773],[118.1736,34.9775],[118.1737,34.9777],[118.1738,34.9782],[118.1738,34.9782],[118.1735,34.9783],[118.1735,34.9783],[118.1735,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1735,34.9785],[118.1735,34.9786],[118.1736,34.9787],[118.1737,34.9788],[118.1737,34.9789],[118.1739,34.9792],[118.1739,34.9792],[118.174,34.9792],[118.174,34.9792],[118.174,34.9792],[118.174,34.9793],[118.1741,34.9793],[118.1743,34.9793],[118.1744,34.9793],[118.1745,34.9793],[118.1745,34.9793],[118.1745,34.9793],[118.1745,34.9794],[118.1745,34.9795],[118.1746,34.9797],[118.1746,34.9798],[118.1747,34.98],[118.1747,34.9802],[118.1748,34.9804],[118.1748,34.9804],[118.175,34.9804],[118.175,34.9804],[118.1751,34.9804],[118.1751,34.9805],[118.1752,34.9809],[118.1752,34.981],[118.1752,34.9811],[118.1752,34.9811],[118.1752,34.9812],[118.1752,34.9813],[118.1752,34.9813],[118.175,34.9813],[118.1747,34.9813],[118.1747,34.9813],[118.1746,34.9813],[118.1744,34.9813],[118.1743,34.9813],[118.1743,34.9812],[118.1743,34.9812],[118.1743,34.9812],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9809],[118.1742,34.9806],[118.1742,34.9806],[118.1742,34.9805],[118.1742,34.9805],[118.174,34.9805],[118.1738,34.9805],[118.1738,34.9805],[118.1738,34.9805],[118.1738,34.9806],[118.1738,34.9807],[118.1738,34.9807],[118.1738,34.9809],[118.1738,34.981],[118.1738,34.981],[118.1738,34.9811],[118.1739,34.9811],[118.1739,34.9811],[118.1739,34.9812],[118.1739,34.9812],[118.1739,34.9813],[118.1739,34.9814],[118.1739,34.9817],[118.1739,34.982],[118.1738,34.9822],[118.1738,34.9823],[118.1738,34.9824],[118.1738,34.9824],[118.1738,34.9824],[118.1738,34.9824],[118.174,34.9826],[118.1741,34.9826],[118.1742,34.9827],[118.1742,34.9827],[118.1742,34.9827],[118.1743,34.9828],[118.1744,34.9829],[118.1744,34.9829],[118.1744,34.9829],[118.1744,34.9832],[118.1744,34.9833],[118.1744,34.9833],[118.1744,34.9833],[118.1744,34.9835],[118.1744,34.9836],[118.1743,34.9836],[118.1743,34.9836],[118.1742,34.9836],[118.1741,34.9836],[118.1741,34.9835],[118.1741,34.9834],[118.1741,34.9833],[118.1741,34.9832],[118.1742,34.9831],[118.1739,34.983],[118.1737,34.9828],[118.1734,34.9827],[118.1734,34.9827],[118.1732,34.9826],[118.1732,34.9826],[118.1732,34.9826],[118.1731,34.9825],[118.1728,34.9824],[118.1727,34.9823],[118.1727,34.9822],[118.1727,34.9821],[118.1726,34.9821],[118.1725,34.982],[118.1724,34.9819],[118.1723,34.9818],[118.1722,34.9818],[118.1721,34.9817],[118.1721,34.9817],[118.172,34.9817],[118.1719,34.9817],[118.1718,34.9817],[118.1717,34.9817],[118.1716,34.9817],[118.1715,34.9817],[118.1715,34.9817],[118.1715,34.9819],[118.1715,34.9819],[118.1714,34.9819],[118.1714,34.9819],[118.1713,34.9819],[118.1713,34.982],[118.1713,34.982],[118.1714,34.982],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9822],[118.1715,34.9823],[118.1715,34.9823],[118.1716,34.9824],[118.1716,34.9827],[118.1716,34.9827],[118.1716,34.9827],[118.1717,34.9827],[118.1717,34.9828],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.983],[118.1717,34.9831],[118.1718,34.9831],[118.1717,34.9832],[118.1717,34.9832],[118.1717,34.9833],[118.1716,34.9833],[118.1716,34.9833],[118.1715,34.9832],[118.1715,34.9831],[118.1715,34.983],[118.1715,34.983],[118.1715,34.983],[118.1713,34.983],[118.1713,34.9831],[118.1713,34.9832],[118.1713,34.9832],[118.1713,34.9832],[118.1711,34.9832],[118.1711,34.9832],[118.1711,34.9831],[118.1711,34.983],[118.171,34.9829],[118.171,34.9828],[118.171,34.9827],[118.1709,34.9826],[118.1709,34.9824],[118.1709,34.9824],[118.1705,34.9825],[118.1704,34.9822],[118.1703,34.982],[118.1703,34.982],[118.1703,34.982],[118.1703,34.982],[118.1702,34.982],[118.1701,34.982],[118.17,34.9821],[118.17,34.9821],[118.17,34.9824],[118.17,34.9825],[118.17,34.9826],[118.1699,34.9827],[118.1698,34.9828],[118.1698,34.9829],[118.1698,34.9829],[118.1698,34.9829],[118.1697,34.9829],[118.1699,34.983],[118.1699,34.983],[118.1701,34.9831],[118.1701,34.9831],[118.1701,34.9831],[118.1701,34.9831],[118.1702,34.9831],[118.1702,34.9831],[118.1702,34.9831],[118.1702,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9833],[118.1703,34.9835],[118.1704,34.9837],[118.1704,34.9839],[118.1704,34.984],[118.1704,34.984],[118.1705,34.984],[118.1705,34.984],[118.1705,34.984],[118.1706,34.984],[118.1706,34.984],[118.1707,34.984],[118.1707,34.9839],[118.1707,34.9839],[118.1706,34.9838],[118.1706,34.9837],[118.1706,34.9837],[118.1706,34.9836],[118.1706,34.9835],[118.1706,34.9835],[118.1706,34.9834],[118.1707,34.9835],[118.1708,34.9835],[118.171,34.9836],[118.1711,34.9837],[118.1713,34.9838],[118.1714,34.9839],[118.1715,34.984],[118.1715,34.984],[118.1716,34.984],[118.1716,34.984],[118.1716,34.984],[118.1715,34.9841],[118.1714,34.9842],[118.1713,34.9841],[118.1711,34.984],[118.171,34.9839],[118.1709,34.9839],[118.1709,34.9839],[118.1709,34.9839],[118.1708,34.9839],[118.1708,34.9839],[118.1708,34.984],[118.1709,34.9842],[118.1709,34.9843],[118.1709,34.9844],[118.171,34.9846],[118.171,34.9847],[118.1711,34.9848],[118.1711,34.9849],[118.1711,34.985],[118.1711,34.985],[118.1709,34.985],[118.1709,34.985],[118.1709,34.985],[118.1708,34.985],[118.1708,34.985],[118.1708,34.985],[118.1709,34.9851],[118.1708,34.9851],[118.1708,34.9851],[118.1706,34.9851],[118.1704,34.9852],[118.1704,34.9852],[118.1704,34.9852],[118.1704,34.9853],[118.1704,34.9856],[118.1704,34.9858],[118.1704,34.9859],[118.1705,34.986],[118.1705,34.986],[118.1705,34.986],[118.1705,34.9861],[118.1705,34.9865],[118.1705,34.9865],[118.1705,34.9866],[118.1705,34.987],[118.1706,34.9871],[118.1706,34.9873],[118.1706,34.9873],[118.1706,34.9873],[118.1707,34.9876],[118.1707,34.9876],[118.1706,34.9876],[118.1704,34.9875],[118.1701,34.9875],[118.1698,34.9875],[118.1698,34.9881],[118.1699,34.9887],[118.1699,34.9887],[118.1699,34.9889],[118.1699,34.9889],[118.1697,34.9887],[118.1698,34.9891],[118.1699,34.9897],[118.1699,34.9897],[118.1699,34.9897],[118.1699,34.9897],[118.1699,34.9898],[118.1698,34.9898],[118.1697,34.9898],[118.1694,34.9898],[118.1693,34.9898],[118.1692,34.9899],[118.1691,34.9899],[118.169,34.9899],[118.1688,34.99],[118.1686,34.99],[118.1687,34.9901],[118.1688,34.9903],[118.1688,34.9906],[118.1689,34.9908],[118.1687,34.9908],[118.1685,34.9908],[118.1685,34.991],[118.1686,34.9911],[118.1686,34.9912],[118.1686,34.9914],[118.1686,34.9914],[118.1686,34.9914],[118.1686,34.9914],[118.1686,34.9914],[118.1685,34.9913],[118.1684,34.9913],[118.1682,34.9912],[118.1681,34.9911],[118.1681,34.9911],[118.168,34.991],[118.1679,34.991],[118.1679,34.9909],[118.1679,34.9908],[118.1678,34.9908],[118.1677,34.9907],[118.1677,34.9905],[118.1676,34.9903],[118.1675,34.9902],[118.1675,34.9902],[118.1673,34.9904],[118.1674,34.9907],[118.1675,34.991],[118.1676,34.9912],[118.1677,34.9914],[118.1677,34.9917],[118.1677,34.9917],[118.1677,34.9917],[118.1677,34.9917],[118.1677,34.9917],[118.1674,34.9918],[118.1674,34.9918],[118.1673,34.9918],[118.1672,34.9917],[118.1672,34.9916],[118.1672,34.9915],[118.1671,34.9915],[118.1671,34.9914],[118.167,34.9914],[118.1669,34.9914],[118.1669,34.9914],[118.1669,34.9915],[118.1669,34.9915],[118.1669,34.9915],[118.167,34.9916],[118.1671,34.9918],[118.1673,34.9926],[118.1676,34.9934],[118.1675,34.9934],[118.1675,34.9934],[118.1674,34.9931],[118.1673,34.9929],[118.1672,34.9925],[118.1672,34.9924],[118.1671,34.9924],[118.1671,34.9924],[118.1671,34.9924],[118.1671,34.9925],[118.1672,34.9927],[118.1672,34.9929],[118.1673,34.9932],[118.1674,34.9934],[118.1674,34.9934],[118.1674,34.9934],[118.1674,34.9934],[118.1673,34.9934],[118.1673,34.9934],[118.1672,34.9933],[118.1671,34.9933],[118.167,34.9933],[118.167,34.9933],[118.167,34.9933],[118.167,34.9933],[118.1669,34.9933],[118.1669,34.9933],[118.1669,34.9933],[118.1669,34.9933],[118.1669,34.9933],[118.1669,34.9933],[118.1668,34.9932],[118.1668,34.9932],[118.1668,34.9932],[118.1668,34.9931],[118.1668,34.993],[118.1667,34.993],[118.1667,34.993],[118.1667,34.9929],[118.1667,34.9929],[118.1667,34.9929],[118.1666,34.9929],[118.1665,34.9929],[118.1665,34.9928],[118.1665,34.9928],[118.1664,34.9928],[118.1664,34.9927],[118.1663,34.9926],[118.1663,34.9926],[118.1662,34.9925],[118.1662,34.9925],[118.1661,34.9924],[118.1661,34.9923],[118.1661,34.9923],[118.166,34.9922],[118.1659,34.9922],[118.1659,34.9922],[118.1659,34.9922],[118.1658,34.9921],[118.1658,34.9921],[118.1657,34.9921],[118.1657,34.992],[118.1657,34.992],[118.1656,34.992],[118.1656,34.992],[118.1656,34.992],[118.1656,34.9919],[118.1655,34.9919],[118.1654,34.9918],[118.1654,34.9917],[118.1654,34.9917],[118.1653,34.9917],[118.1653,34.9917],[118.1652,34.9917],[118.1652,34.9917],[118.1649,34.9918],[118.165,34.992],[118.165,34.9921],[118.1651,34.9923],[118.1652,34.9926],[118.1653,34.9928],[118.1654,34.993],[118.1654,34.9931],[118.1654,34.9931],[118.1654,34.9931],[118.1654,34.9932],[118.1653,34.9932],[118.1652,34.9932],[118.1652,34.9932],[118.1652,34.9932],[118.1652,34.9932],[118.1652,34.9934],[118.1653,34.9936],[118.1653,34.9937],[118.1653,34.9937],[118.1652,34.9935],[118.1652,34.9935],[118.1651,34.9934],[118.165,34.9934],[118.1649,34.9934],[118.1648,34.9933],[118.1647,34.9932],[118.1647,34.9932],[118.1647,34.9932],[118.1647,34.9932],[118.1646,34.9932],[118.1645,34.9932],[118.1644,34.9932],[118.1644,34.9932],[118.1643,34.9932],[118.1643,34.9932],[118.1643,34.9932],[118.1642,34.9932],[118.1642,34.9932],[118.1641,34.9932],[118.164,34.9932],[118.1639,34.9933],[118.1638,34.9933],[118.1637,34.9933],[118.1636,34.9933],[118.1636,34.9934],[118.1633,34.9934],[118.1631,34.9935],[118.1631,34.9935],[118.1631,34.9935],[118.1631,34.9935],[118.1631,34.9935],[118.1631,34.9935],[118.163,34.9935],[118.163,34.9935],[118.1628,34.9936],[118.1626,34.9936],[118.1625,34.9936],[118.1624,34.9937],[118.1623,34.9937],[118.1623,34.9937],[118.1622,34.9937],[118.1621,34.9937],[118.1621,34.9937],[118.162,34.9937],[118.1619,34.9937],[118.1617,34.9937],[118.1617,34.9937],[118.1615,34.9937],[118.1615,34.9937],[118.1614,34.9937],[118.1614,34.9937],[118.1614,34.9937],[118.1614,34.9937],[118.1614,34.9937],[118.1614,34.9937],[118.1613,34.9938],[118.1611,34.9938],[118.161,34.9938],[118.161,34.9938],[118.1609,34.9938],[118.1609,34.9938],[118.1608,34.9939],[118.1607,34.9939],[118.1607,34.9939],[118.1607,34.9939],[118.1606,34.9939],[118.1606,34.9939],[118.1606,34.9939],[118.1605,34.9939],[118.1604,34.994],[118.1603,34.994],[118.1602,34.9941],[118.1602,34.9942],[118.1603,34.9943],[118.1603,34.9944],[118.1603,34.9945],[118.1604,34.9945],[118.1604,34.9944],[118.1605,34.9944],[118.1606,34.9944],[118.1608,34.9944],[118.1609,34.9944],[118.1609,34.9944],[118.161,34.9944],[118.161,34.9945],[118.161,34.9946],[118.1609,34.9946],[118.1607,34.9946],[118.1607,34.9946],[118.1606,34.9947],[118.1606,34.9947],[118.1605,34.9947],[118.1604,34.9947],[118.1603,34.9947],[118.1601,34.9948],[118.1598,34.9949],[118.1597,34.9951],[118.1596,34.9951],[118.1595,34.9951],[118.1595,34.9951],[118.1594,34.9952],[118.1592,34.9953],[118.1592,34.9953],[118.1592,34.9954],[118.1592,34.9954],[118.1592,34.9954],[118.1593,34.9955],[118.1593,34.9954],[118.1593,34.9954],[118.1593,34.9954],[118.1594,34.9954],[118.1594,34.9954],[118.1595,34.9953],[118.1596,34.9953],[118.1598,34.9952],[118.1598,34.9952],[118.1599,34.9954],[118.16,34.9955],[118.1601,34.9956],[118.1603,34.9958],[118.1606,34.9961],[118.161,34.9965],[118.1611,34.9965],[118.1611,34.9966],[118.1612,34.9966],[118.161,34.9967],[118.161,34.9967],[118.161,34.9967],[118.1608,34.9968],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1605,34.997],[118.1605,34.997],[118.1605,34.997],[118.1605,34.9969],[118.1605,34.9968],[118.1605,34.9968],[118.1605,34.9968],[118.1604,34.9967],[118.1603,34.9967],[118.1601,34.9967],[118.1599,34.9967],[118.1598,34.9967],[118.1595,34.9967],[118.1593,34.9967],[118.1592,34.9967],[118.1592,34.9968],[118.1592,34.9968],[118.1592,34.9968],[118.1592,34.997],[118.1592,34.9971],[118.1593,34.9972],[118.1593,34.9972],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1592,34.9978],[118.1592,34.9978],[118.1591,34.9978],[118.1589,34.9979],[118.1586,34.9979],[118.1586,34.9979],[118.1584,34.998],[118.1582,34.998],[118.1581,34.9981],[118.1579,34.9981],[118.1578,34.9981],[118.1577,34.9981],[118.1576,34.9981],[118.1576,34.9981],[118.1575,34.9981],[118.1574,34.9981],[118.1573,34.9981],[118.1572,34.9982],[118.1571,34.9982],[118.157,34.9982],[118.157,34.9982],[118.1568,34.9976],[118.1566,34.9972],[118.1566,34.9971],[118.1566,34.997],[118.1565,34.997],[118.1565,34.997],[118.1564,34.997],[118.1564,34.997],[118.1563,34.997],[118.1562,34.997],[118.1561,34.997],[118.1564,34.9979],[118.1565,34.9982],[118.1565,34.9982],[118.1564,34.9982],[118.1564,34.9982],[118.1564,34.9983],[118.1563,34.9983],[118.1562,34.9983],[118.1561,34.9983],[118.156,34.9983],[118.1559,34.9983],[118.1559,34.9983],[118.1557,34.9983],[118.1557,34.9983],[118.1557,34.9984],[118.1556,34.9984],[118.1555,34.9984],[118.1554,34.9983],[118.1554,34.9983],[118.1553,34.9983],[118.1553,34.9982],[118.1551,34.998],[118.155,34.9981],[118.1549,34.9981],[118.1548,34.9982],[118.1547,34.9982],[118.1546,34.9982],[118.1546,34.9982],[118.1546,34.9982],[118.1547,34.9984],[118.1548,34.9986],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1546,34.9986],[118.1546,34.9988],[118.1544,34.9988],[118.1543,34.9988],[118.1541,34.9988],[118.154,34.9988],[118.1539,34.9988],[118.1538,34.9988],[118.1538,34.9988],[118.1537,34.9988],[118.1536,34.9988],[118.1534,34.9988],[118.1533,34.9988],[118.1532,34.9988],[118.1528,34.9988],[118.1526,34.9988],[118.1526,34.9988],[118.1525,34.9987],[118.1525,34.9987],[118.1524,34.9987],[118.1524,34.9987],[118.1523,34.9988],[118.1523,34.9988],[118.1523,34.9989],[118.1523,34.999],[118.1523,34.9991],[118.1522,34.9993],[118.1522,34.9992],[118.1518,34.9992],[118.1517,34.9992],[118.1515,34.9992],[118.1515,34.9992],[118.1515,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1512,34.9991],[118.1511,34.9991],[118.1509,34.9991],[118.1508,34.999],[118.1508,34.999],[118.1508,34.999],[118.1507,34.999],[118.1507,34.999],[118.1506,34.9991],[118.1506,34.9991],[118.1506,34.9991],[118.1507,34.9993],[118.1507,34.9993],[118.1507,34.9993],[118.1507,34.9993],[118.1506,34.9994],[118.1506,34.9994],[118.1506,34.9994],[118.1506,34.9993],[118.1506,34.9993],[118.1505,34.9992],[118.1505,34.9992],[118.1505,34.9992],[118.1505,34.9992],[118.1505,34.9992],[118.1504,34.9991],[118.1504,34.9991],[118.1503,34.9991],[118.1503,34.9991],[118.1503,34.9991],[118.1503,34.9991],[118.1503,34.9993],[118.1503,34.9994],[118.1503,34.9996],[118.1503,34.9997],[118.1502,35],[118.1502,35],[118.1501,35.0003],[118.15,35.0008],[118.1498,35.0007],[118.1497,35.0007],[118.1497,35.0007],[118.1497,35.0007],[118.1497,35.0007],[118.1496,35.0006],[118.1496,35.0006],[118.1495,35.0005],[118.1494,35.0004],[118.1494,35.0003],[118.1493,35.0003],[118.1492,35.0002],[118.1489,35.0001],[118.1487,35],[118.1485,35],[118.1485,35],[118.1484,34.9999],[118.1481,34.9998],[118.1479,34.9997],[118.1479,34.9997],[118.1478,34.9997],[118.1478,34.9997],[118.1477,34.9998],[118.1476,34.9999],[118.1474,35],[118.1471,34.9998],[118.1469,35],[118.1468,35],[118.1468,35],[118.1456,35],[118.1454,35.0001],[118.1452,35.0002],[118.1451,35.0003],[118.1447,35.0005],[118.1445,35.0007],[118.1444,35.0007],[118.1443,35.0008],[118.1443,35.0008],[118.1441,35.0004],[118.1439,35],[118.1439,34.9999],[118.1439,34.9998],[118.1438,34.9995],[118.1437,34.9995],[118.1437,34.9994],[118.1437,34.9994],[118.1437,34.9992],[118.1436,34.9991],[118.1436,34.9991],[118.1437,34.999],[118.1437,34.9989],[118.1437,34.9987],[118.1437,34.9986],[118.1437,34.9986],[118.1437,34.9986],[118.1437,34.9986],[118.1435,34.9987],[118.1433,34.9987],[118.1432,34.9987],[118.1432,34.9987],[118.1431,34.9986],[118.1429,34.9986],[118.1428,34.9985],[118.1427,34.9985],[118.1427,34.9985],[118.1427,34.9985],[118.1426,34.9984],[118.1424,34.9984],[118.1421,34.9984],[118.142,34.9984],[118.1419,34.9984],[118.1419,34.9984],[118.1419,34.9984],[118.1419,34.9983],[118.1419,34.9982],[118.1419,34.9981],[118.1419,34.9981],[118.1419,34.9981],[118.1419,34.9981],[118.1419,34.9981],[118.1419,34.9978],[118.1419,34.9976],[118.1419,34.9976],[118.1419,34.9975],[118.1419,34.9975],[118.1419,34.9975],[118.1418,34.9975],[118.1418,34.9975],[118.1418,34.9975],[118.1418,34.9975],[118.1418,34.9975],[118.1417,34.9975],[118.1416,34.9975],[118.1415,34.9975],[118.1414,34.9975],[118.1413,34.9974],[118.1413,34.9974],[118.1412,34.9974],[118.1412,34.9974],[118.1412,34.9974],[118.1412,34.9974],[118.1411,34.9974],[118.1411,34.9974],[118.1411,34.9974],[118.1411,34.9974],[118.141,34.9974],[118.141,34.9974],[118.141,34.9975],[118.141,34.9976],[118.141,34.9977],[118.141,34.9979],[118.1409,34.9981],[118.1408,34.9981],[118.1407,34.998],[118.1405,34.998],[118.1405,34.998],[118.1405,34.998],[118.1405,34.998],[118.1405,34.998],[118.1404,34.998],[118.1404,34.998],[118.1404,34.998],[118.1404,34.998],[118.1404,34.9979],[118.1402,34.9979],[118.1399,34.9977],[118.1398,34.9979],[118.1396,34.9981],[118.1394,34.9983],[118.1393,34.9984],[118.1394,34.9984],[118.1394,34.9984],[118.1396,34.9985],[118.1396,34.9985],[118.1397,34.9985],[118.1399,34.9986],[118.1401,34.9987],[118.1403,34.9988],[118.1403,34.9988],[118.1404,34.9988],[118.1405,34.9989],[118.1404,34.999],[118.1403,34.9991],[118.1403,34.9991],[118.1403,34.9991],[118.1403,34.9991],[118.1403,34.9991],[118.1402,34.9992],[118.1402,34.9992],[118.1402,34.9992],[118.1402,34.9992],[118.1402,34.9993],[118.1401,34.9993],[118.1401,34.9994],[118.1401,34.9994],[118.1401,34.9994],[118.1402,34.9994],[118.1402,34.9995],[118.1402,34.9996],[118.1403,34.9996],[118.1404,34.9997],[118.1405,34.9998],[118.1403,34.9999],[118.14,34.9999],[118.1398,35],[118.1398,35],[118.1397,35],[118.1396,35],[118.1396,35.0001],[118.1395,35.0001],[118.1395,35.0002],[118.1394,35.0002],[118.1393,35.0002],[118.1393,35.0006],[118.1391,35.0006],[118.1389,35.0006],[118.1389,35.0006],[118.1384,35.0006],[118.1378,35.0007],[118.1378,35.0007],[118.1378,35.0007],[118.1378,35.0007],[118.1376,35.0007],[118.1374,35.0007],[118.137,35.0008],[118.1366,35.0008],[118.1363,35.0008],[118.1362,35.0009],[118.1361,35.0009],[118.136,35.0009],[118.136,35.0009],[118.136,35.0009],[118.1359,35.0009],[118.1359,35.0009],[118.1358,35.0008],[118.1356,35.0007],[118.1355,35.0007],[118.1353,35.0006],[118.135,35.0005],[118.1349,35.0004],[118.1347,35.0003],[118.1347,35.0003],[118.1347,35.0003],[118.1347,35.0003],[118.1346,35.0002],[118.1345,35.0001],[118.1345,35],[118.1344,35],[118.1342,34.9998],[118.134,34.9995],[118.134,34.9996],[118.134,34.9997],[118.134,34.9999],[118.134,35],[118.1341,35],[118.1342,35.0003],[118.1343,35.0004],[118.1343,35.0005],[118.1343,35.0005],[118.1343,35.0005],[118.1343,35.0005],[118.1343,35.0005],[118.1343,35.0005],[118.1343,35.0005],[118.1342,35.0006],[118.134,35.0006],[118.1339,35.0007],[118.1338,35.0007],[118.1337,35.0008],[118.1335,35.0008],[118.1335,35.0008],[118.1335,35.0008],[118.1335,35.0008],[118.1334,35.0008],[118.1333,35.0008],[118.1332,35.0008],[118.133,35.0009],[118.1329,35.0009],[118.1328,35.0009],[118.1327,35.001],[118.1327,35.001],[118.1327,35.001],[118.1325,35.0011],[118.1325,35.0012],[118.1324,35.0012],[118.1323,35.0009],[118.1323,35.0008],[118.1322,35.0007],[118.132,35.0003],[118.1318,35],[118.1318,35],[118.1318,34.9999],[118.1318,34.9999],[118.1318,34.9999],[118.1318,34.9999],[118.1317,34.9999],[118.1317,34.9998],[118.1316,34.9998],[118.1316,34.9998],[118.1315,34.9998],[118.1315,34.9999],[118.1315,34.9999],[118.1315,34.9999],[118.1315,34.9999],[118.1314,34.9999],[118.1314,35],[118.1314,35],[118.1313,35],[118.131,34.9999],[118.1307,34.9999],[118.1306,34.9999],[118.1304,34.9999],[118.1303,34.9998],[118.1302,34.9998],[118.1303,34.9999],[118.1303,35],[118.1303,35],[118.1303,35],[118.1304,35.0002],[118.1304,35.0003],[118.1306,35.0005],[118.1306,35.0006],[118.1307,35.0008],[118.1307,35.0009],[118.1308,35.001],[118.1309,35.0012],[118.1309,35.0012],[118.1312,35.0013],[118.1311,35.0013],[118.1311,35.0014],[118.1309,35.0013],[118.1308,35.0013],[118.1307,35.0013],[118.1305,35.0012],[118.1304,35.0012],[118.1301,35.0012],[118.13,35.0012],[118.13,35.0012],[118.1299,35.0012],[118.1299,35.0012],[118.1299,35.0012],[118.1298,35.0012],[118.1298,35.0012],[118.1298,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1297,35.0012],[118.1296,35.0012],[118.1296,35.0012],[118.1295,35.0012],[118.1295,35.0012],[118.1295,35.0012],[118.1294,35.0012],[118.1292,35.0011],[118.129,35.0011],[118.1289,35.0011],[118.1287,35.0011],[118.1287,35.0011],[118.1285,35.0011],[118.1285,35.0011],[118.1285,35.0011],[118.1285,35.0011],[118.1285,35.0011],[118.1284,35.0012],[118.1284,35.0012],[118.1284,35.0012],[118.1284,35.0012],[118.1284,35.0012],[118.1284,35.0012],[118.1284,35.0012],[118.1282,35.0013],[118.128,35.0013],[118.1279,35.0014],[118.1278,35.0014],[118.1278,35.0014],[118.1277,35.0014],[118.1277,35.0014],[118.1277,35.0013],[118.1276,35.0013],[118.1274,35.0012],[118.1272,35.0011],[118.1271,35.001],[118.127,35.001],[118.127,35.001],[118.1269,35.001],[118.1268,35.001],[118.1267,35.001],[118.1267,35.001],[118.1267,35.001],[118.1266,35.0011],[118.1266,35.0011],[118.1265,35.0011],[118.1265,35.0011],[118.1265,35.0012],[118.1264,35.0012],[118.1264,35.0012],[118.1263,35.0012],[118.1263,35.0012],[118.1262,35.0012],[118.1261,35.0012],[118.126,35.0012],[118.1258,35.0011],[118.1257,35.0011],[118.1256,35.0011],[118.1253,35.0011],[118.1253,35.0011],[118.1253,35.0011],[118.1252,35.001],[118.1251,35.001],[118.1245,35.001],[118.1245,35.001],[118.1245,35.001],[118.1245,35.001],[118.1243,35.001],[118.1239,35.001],[118.1238,35.001],[118.1238,35.001],[118.1238,35.001],[118.1238,35.001],[118.1235,35.001],[118.1235,35.0017],[118.1234,35.0023],[118.1234,35.0024],[118.1233,35.0023],[118.1231,35.0022],[118.1226,35.0022],[118.1224,35.0022],[118.1221,35.0022],[118.1218,35.0022],[118.1217,35.0022],[118.1215,35.0022],[118.1214,35.0022],[118.1213,35.0021],[118.1212,35.0021],[118.1211,35.002],[118.121,35.0019],[118.1208,35.0017],[118.1207,35.0015],[118.1207,35.0015],[118.1207,35.0015],[118.1202,35.0011],[118.1202,35.0011],[118.1201,35.0012],[118.12,35.0013],[118.12,35.0013],[118.12,35.0015],[118.12,35.0016],[118.12,35.0018],[118.1202,35.0024],[118.1202,35.0027],[118.1203,35.0031],[118.1204,35.0034],[118.1205,35.0037],[118.1205,35.004],[118.1206,35.004],[118.1206,35.004],[118.1206,35.0041],[118.1207,35.0042],[118.1208,35.0045],[118.1209,35.0047],[118.121,35.005],[118.1211,35.005],[118.1212,35.005],[118.1212,35.005],[118.1213,35.005],[118.1213,35.0051],[118.1214,35.0052],[118.1215,35.0054],[118.1216,35.0058],[118.1216,35.0058],[118.1217,35.0059],[118.1218,35.0059],[118.1218,35.0059],[118.1218,35.006],[118.1219,35.006],[118.1219,35.006],[118.1221,35.0061],[118.1221,35.0061],[118.1221,35.0061],[118.1223,35.0062],[118.1224,35.0063],[118.1225,35.0063],[118.1225,35.0064],[118.1224,35.0065],[118.1222,35.0067],[118.122,35.007],[118.1218,35.0073],[118.1217,35.0075],[118.1216,35.0076],[118.1215,35.0077],[118.1213,35.008],[118.1213,35.008],[118.1213,35.008],[118.1212,35.0081],[118.1212,35.0081],[118.1212,35.0082],[118.1212,35.0082],[118.1211,35.0085],[118.1211,35.0088],[118.1211,35.0092],[118.1211,35.0092],[118.1212,35.0092],[118.1213,35.0092],[118.1214,35.0092],[118.1214,35.0093],[118.1214,35.0096],[118.1214,35.01],[118.1213,35.01],[118.1213,35.01],[118.1213,35.01],[118.1212,35.01],[118.1212,35.01],[118.1211,35.0101],[118.1211,35.0102],[118.1211,35.0102],[118.1211,35.0103],[118.1212,35.0105],[118.1211,35.0107],[118.121,35.011],[118.1209,35.0112],[118.1209,35.0113],[118.1209,35.0113],[118.1209,35.0113],[118.1208,35.0114],[118.1209,35.0115],[118.1209,35.0115],[118.1209,35.0116],[118.121,35.0118],[118.1212,35.0121],[118.1214,35.0124],[118.1214,35.0124],[118.1215,35.0125],[118.1215,35.0125],[118.1215,35.0125],[118.1215,35.0125],[118.1215,35.0125],[118.1215,35.0125],[118.1215,35.0125],[118.1216,35.0127],[118.1216,35.0127],[118.1217,35.0129],[118.1217,35.0129],[118.1217,35.0129],[118.1217,35.0129],[118.1217,35.0129],[118.1216,35.0129],[118.1216,35.0129],[118.1216,35.013],[118.1216,35.013],[118.1215,35.013],[118.1215,35.013],[118.1214,35.013],[118.1213,35.013],[118.121,35.013],[118.121,35.013],[118.121,35.013],[118.121,35.0134],[118.1209,35.0137],[118.1209,35.0139],[118.1209,35.014],[118.1209,35.014],[118.1209,35.014],[118.121,35.0141],[118.121,35.0141],[118.121,35.0141],[118.1211,35.0141],[118.1213,35.0143],[118.1216,35.0145],[118.1218,35.0148],[118.122,35.0151],[118.122,35.0152],[118.1221,35.0152],[118.1224,35.0154],[118.1226,35.0155],[118.1239,35.0159],[118.1239,35.016],[118.1238,35.0168],[118.1237,35.0174],[118.1237,35.0175],[118.1235,35.0175],[118.1235,35.0177],[118.1235,35.0182],[118.1236,35.019],[118.1237,35.0198],[118.1237,35.0204],[118.1244,35.0204],[118.1245,35.0204],[118.1246,35.0204],[118.1246,35.0204],[118.1246,35.0205],[118.1246,35.0208],[118.1246,35.0208],[118.1247,35.0212],[118.1248,35.0219],[118.1248,35.0221],[118.1248,35.0224],[118.1247,35.0228],[118.1247,35.0228],[118.1247,35.0228],[118.1254,35.0228],[118.1263,35.0228],[118.1267,35.0228],[118.1268,35.0227],[118.1269,35.0227],[118.1272,35.0227],[118.1272,35.0227],[118.1275,35.0228],[118.1271,35.0236],[118.127,35.024],[118.1272,35.024],[118.1272,35.024],[118.1272,35.024],[118.1272,35.0241],[118.1272,35.0241],[118.1271,35.0242],[118.1272,35.0242],[118.1272,35.0242],[118.1272,35.0242],[118.1273,35.0242],[118.1273,35.0242],[118.1274,35.0242],[118.1275,35.0242],[118.1276,35.0242],[118.1278,35.0241],[118.1281,35.0239],[118.128,35.0245],[118.1281,35.0244],[118.1282,35.025],[118.1282,35.025],[118.1283,35.025],[118.1283,35.0239],[118.1283,35.0238],[118.1282,35.0237],[118.1282,35.0237],[118.1282,35.0236],[118.1282,35.0233],[118.1282,35.0229],[118.1284,35.0229],[118.1285,35.0232],[118.1286,35.0231],[118.1287,35.0231],[118.1292,35.0229],[118.1292,35.0229],[118.1292,35.0234],[118.1294,35.0234],[118.1295,35.0233],[118.1295,35.0233],[118.1296,35.0233],[118.1296,35.0233],[118.1297,35.0241],[118.1297,35.0241],[118.1298,35.0241],[118.1306,35.0236],[118.1311,35.0233],[118.1316,35.0241],[118.1321,35.0248],[118.1325,35.0254],[118.1322,35.0258],[118.1321,35.0259],[118.1321,35.0259],[118.1317,35.0263],[118.1316,35.0265],[118.1316,35.0266],[118.1316,35.0267],[118.1316,35.0268],[118.1316,35.0268],[118.1317,35.0269],[118.1318,35.027],[118.1319,35.027],[118.132,35.0271],[118.132,35.0271],[118.132,35.0272],[118.1322,35.0283],[118.1321,35.0285],[118.132,35.0286],[118.132,35.0286],[118.132,35.0286],[118.1318,35.029],[118.1316,35.0293],[118.1316,35.0294],[118.1316,35.0294],[118.1316,35.0296],[118.1316,35.0297],[118.1316,35.0297],[118.1316,35.0299],[118.1316,35.0301],[118.1316,35.0301],[118.1318,35.0304],[118.1318,35.0305],[118.1319,35.0309],[118.132,35.031],[118.132,35.031],[118.132,35.031],[118.132,35.0311],[118.1321,35.0312],[118.1321,35.0312],[118.1321,35.0312],[118.1321,35.0312],[118.132,35.0313],[118.132,35.0313],[118.132,35.0313],[118.1319,35.0313],[118.1319,35.0313],[118.1318,35.0313],[118.1318,35.0313],[118.1317,35.0313],[118.1317,35.0313],[118.1315,35.0314],[118.1315,35.0315],[118.1314,35.0316],[118.1313,35.0318],[118.1313,35.0319],[118.1312,35.0319],[118.1312,35.032],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.131,35.0321],[118.131,35.0322],[118.1309,35.0323],[118.1308,35.0323],[118.1307,35.0323],[118.1305,35.0325],[118.1305,35.0325],[118.1302,35.0326],[118.1302,35.0326],[118.1301,35.0327],[118.1299,35.0327],[118.1298,35.0328],[118.1298,35.0328],[118.1297,35.0328],[118.1296,35.0328],[118.1295,35.0328],[118.1294,35.0328],[118.1293,35.0328],[118.1293,35.0328],[118.1293,35.0328],[118.1291,35.0328],[118.1291,35.0328],[118.1291,35.0328],[118.129,35.0328],[118.129,35.0328],[118.129,35.0328],[118.129,35.0327],[118.1289,35.0327],[118.1289,35.0327],[118.1288,35.0327],[118.1286,35.0326],[118.1285,35.0326],[118.1285,35.0326],[118.1285,35.0326],[118.1284,35.0326],[118.1283,35.0327],[118.1283,35.0327],[118.1283,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.128,35.0326],[118.1277,35.0325],[118.1273,35.0323],[118.1272,35.0322],[118.1271,35.0322],[118.1271,35.0322],[118.1271,35.0322],[118.127,35.0322],[118.1269,35.0322],[118.1269,35.0322],[118.1269,35.0322],[118.1267,35.0322],[118.1264,35.0322],[118.1263,35.0322],[118.1263,35.0322],[118.1263,35.0322],[118.126,35.0322],[118.1257,35.0323],[118.1255,35.0324],[118.1254,35.0324],[118.1253,35.0325],[118.1252,35.0325],[118.1251,35.0325],[118.125,35.0326],[118.1249,35.0326],[118.1247,35.0327],[118.1247,35.0327],[118.1246,35.0327],[118.1246,35.0327],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0329],[118.1245,35.033],[118.1245,35.033],[118.1245,35.033],[118.1244,35.0331],[118.1243,35.0332],[118.1242,35.0333],[118.1242,35.0333],[118.1242,35.0334],[118.1241,35.0335],[118.1241,35.0335],[118.1241,35.0336],[118.1241,35.0336],[118.1241,35.0337],[118.1243,35.0338],[118.1244,35.0339],[118.1244,35.0339],[118.1245,35.0339],[118.1245,35.0339],[118.1247,35.0339],[118.1248,35.0339],[118.1249,35.034],[118.125,35.034],[118.1251,35.0341],[118.1252,35.0341],[118.1252,35.0341],[118.1253,35.0342],[118.1253,35.0342],[118.1253,35.0342],[118.1253,35.0343],[118.1253,35.0343],[118.1253,35.0344],[118.1253,35.0345],[118.1253,35.0346],[118.1254,35.0346],[118.1254,35.0347],[118.1255,35.0347],[118.1255,35.0349],[118.1256,35.0351],[118.1256,35.0353],[118.1256,35.0354],[118.1256,35.0354],[118.1256,35.0355],[118.1256,35.0355],[118.1255,35.0355],[118.1256,35.0356],[118.1256,35.0358],[118.1256,35.036],[118.1257,35.0362],[118.1257,35.0362],[118.1258,35.0363],[118.1258,35.0363],[118.1258,35.0364],[118.1259,35.0366],[118.1259,35.0366],[118.1259,35.0368],[118.1259,35.0369],[118.126,35.0371],[118.1261,35.0374],[118.1261,35.0374],[118.1262,35.0377],[118.1262,35.0378],[118.1263,35.0379],[118.1264,35.0382],[118.1266,35.0385],[118.1269,35.0389],[118.127,35.039],[118.1271,35.0391],[118.1272,35.0393],[118.1274,35.0395],[118.1275,35.0397],[118.1277,35.0398],[118.1277,35.0399],[118.1278,35.0399],[118.1278,35.04],[118.1277,35.04],[118.1277,35.0401],[118.1276,35.0404],[118.1275,35.0406],[118.1275,35.0407],[118.1274,35.0407],[118.1274,35.0408],[118.1274,35.0408],[118.1274,35.0409],[118.1275,35.0409],[118.1275,35.0409],[118.1275,35.041],[118.1276,35.041],[118.1277,35.0411],[118.1278,35.0411],[118.1278,35.0412],[118.1279,35.0412],[118.1279,35.0413],[118.128,35.0415],[118.1281,35.0415],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0417],[118.128,35.0418],[118.128,35.0418],[118.1278,35.042],[118.1277,35.0421],[118.1276,35.0422],[118.1275,35.0422],[118.1275,35.0423],[118.1277,35.0426],[118.1279,35.0429],[118.1281,35.0432],[118.1282,35.0433],[118.1282,35.0433],[118.1285,35.0437],[118.1287,35.044],[118.1283,35.0441],[118.1284,35.0444],[118.1285,35.0445],[118.1285,35.0446],[118.1285,35.0448],[118.1286,35.0448],[118.1286,35.0449],[118.1287,35.0449],[118.1288,35.045],[118.1287,35.045],[118.1286,35.045],[118.1287,35.0453],[118.1288,35.0455],[118.1289,35.0457],[118.129,35.0459],[118.1291,35.046],[118.1291,35.0462],[118.1292,35.0463],[118.1293,35.0464],[118.1293,35.0466],[118.1293,35.0468],[118.1291,35.0469],[118.1291,35.0469],[118.129,35.0467],[118.129,35.0467],[118.1289,35.0468],[118.1286,35.0468],[118.1282,35.0469],[118.1278,35.0469],[118.1279,35.0472],[118.1279,35.0474],[118.128,35.0475],[118.1281,35.0479],[118.1281,35.0479],[118.1281,35.0481],[118.1281,35.0482],[118.1281,35.0482],[118.1281,35.0482],[118.1281,35.0483],[118.1281,35.0483],[118.1282,35.0485],[118.1283,35.049],[118.1283,35.0492],[118.1284,35.0493],[118.1284,35.0494],[118.1284,35.0494],[118.1284,35.0495],[118.1284,35.0496],[118.1284,35.0496],[118.1284,35.0497],[118.1284,35.0498],[118.1284,35.0498],[118.1284,35.0498],[118.1284,35.0501],[118.1285,35.0504],[118.1285,35.0504],[118.1281,35.0503],[118.1279,35.0503],[118.1275,35.0502],[118.1275,35.0502],[118.1275,35.0502],[118.1274,35.0502],[118.1274,35.0502],[118.1274,35.0503],[118.1275,35.0505],[118.1276,35.0506],[118.1276,35.0507],[118.1277,35.0508],[118.1277,35.0508],[118.1277,35.0508],[118.1277,35.0508],[118.1276,35.0508],[118.1271,35.0509],[118.1266,35.0509],[118.1264,35.0509],[118.1263,35.0509],[118.126,35.0509],[118.1256,35.0509],[118.1253,35.0509],[118.125,35.0509],[118.125,35.0509],[118.125,35.0512],[118.125,35.0512],[118.1255,35.0512],[118.126,35.0512],[118.1263,35.0512],[118.1265,35.0512],[118.1267,35.0511],[118.1267,35.0511],[118.1267,35.0512],[118.1268,35.0516],[118.1269,35.0521],[118.1269,35.0521],[118.1269,35.0521],[118.1269,35.0522],[118.1269,35.0522],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0525],[118.1273,35.0525],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0527],[118.1274,35.0527],[118.1274,35.0527],[118.1275,35.0527],[118.1275,35.0527],[118.1275,35.0527],[118.1275,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1271,35.0528],[118.1271,35.0528],[118.1269,35.0528],[118.1269,35.0528],[118.1268,35.0529],[118.1268,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0528],[118.1266,35.0528],[118.1265,35.0528],[118.1264,35.0528],[118.1263,35.0528],[118.126,35.0528],[118.1258,35.0528],[118.1258,35.0528],[118.1258,35.0529],[118.1259,35.0529],[118.1259,35.0531],[118.1259,35.0532],[118.1259,35.0532],[118.1259,35.0532],[118.1259,35.0532],[118.1255,35.0532],[118.1251,35.0533],[118.1251,35.0533],[118.1251,35.0536],[118.1251,35.0537],[118.1251,35.0541],[118.1251,35.0544],[118.1251,35.0545],[118.1253,35.0545],[118.1253,35.0545],[118.1254,35.0548],[118.1254,35.0549],[118.1257,35.0549],[118.126,35.0549],[118.1262,35.0549],[118.1262,35.0549],[118.1263,35.0549],[118.1266,35.0549],[118.127,35.055],[118.1274,35.055],[118.1274,35.055],[118.1273,35.0553],[118.1273,35.0554],[118.1272,35.0556],[118.1272,35.0556],[118.1273,35.0556],[118.1277,35.0559],[118.1281,35.0561],[118.1282,35.0561],[118.1281,35.0562],[118.1281,35.0563],[118.1281,35.0563],[118.1281,35.0563],[118.128,35.0564],[118.128,35.0564],[118.1279,35.0564],[118.1278,35.0565],[118.1278,35.0565],[118.1278,35.0565],[118.1277,35.0565],[118.1277,35.0565],[118.1277,35.0566],[118.1277,35.0568],[118.1277,35.0568],[118.1276,35.057],[118.1275,35.0572],[118.1275,35.0573],[118.1274,35.0574],[118.1274,35.0575],[118.127,35.0579],[118.1268,35.0582],[118.1266,35.0584],[118.1265,35.0585],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0587],[118.1265,35.0588],[118.1265,35.0588],[118.1265,35.0588],[118.1266,35.0589],[118.1266,35.0589],[118.1266,35.0589],[118.1266,35.059],[118.1266,35.059],[118.1265,35.0592],[118.1263,35.0595],[118.1263,35.0596],[118.1262,35.0597],[118.1261,35.0599],[118.1259,35.0602],[118.1259,35.0602],[118.1258,35.0603],[118.1257,35.0606],[118.1256,35.0606],[118.1256,35.0606],[118.1256,35.0607],[118.1252,35.0605],[118.1251,35.0605],[118.125,35.0607],[118.1251,35.0607],[118.1251,35.0608],[118.1254,35.0608],[118.1254,35.0609],[118.1258,35.061],[118.1262,35.0611],[118.1262,35.0612],[118.1262,35.0612],[118.1262,35.0616],[118.1261,35.0619],[118.126,35.0622],[118.1255,35.0625],[118.1254,35.0626],[118.1252,35.0627],[118.1249,35.063],[118.1248,35.063],[118.1248,35.0632],[118.1243,35.063],[118.1238,35.0629],[118.1233,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0629],[118.1232,35.0629],[118.1232,35.063],[118.1232,35.0631],[118.1233,35.0633],[118.1233,35.0633],[118.1233,35.0634],[118.1233,35.0634],[118.1233,35.0634],[118.1233,35.0635],[118.1233,35.0635],[118.1232,35.0635],[118.1232,35.0636],[118.1232,35.0636],[118.1232,35.0636],[118.1231,35.0637],[118.123,35.0638],[118.1229,35.0638],[118.1228,35.0637],[118.1228,35.0637],[118.1227,35.0637],[118.1226,35.0638],[118.1225,35.0638],[118.1224,35.0638],[118.1224,35.0638],[118.1222,35.0639],[118.1222,35.0644],[118.1222,35.0648],[118.1222,35.0652],[118.1221,35.0657],[118.1221,35.0661],[118.1221,35.0661],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1219,35.0662],[118.1219,35.0662],[118.1219,35.0661],[118.1219,35.0659],[118.1219,35.0657],[118.1219,35.0654],[118.1219,35.0653],[118.1219,35.0648],[118.122,35.0644],[118.122,35.064],[118.122,35.064],[118.1219,35.064],[118.1218,35.0641],[118.1218,35.0641],[118.1216,35.0641],[118.1216,35.0642],[118.1216,35.0642],[118.1215,35.0642],[118.1215,35.0642],[118.1215,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1213,35.0642],[118.1213,35.0642],[118.1213,35.0645],[118.1213,35.0647],[118.1213,35.0648],[118.1213,35.0649],[118.1213,35.0649],[118.1213,35.0652],[118.1213,35.0656],[118.1212,35.066],[118.1212,35.066],[118.1212,35.066],[118.1211,35.066],[118.1211,35.066],[118.1209,35.0661],[118.1208,35.0664],[118.1208,35.0666],[118.1208,35.0667],[118.1207,35.0671],[118.1207,35.0677],[118.1206,35.0682],[118.1206,35.0687],[118.1206,35.0687],[118.1209,35.0687],[118.121,35.0687],[118.121,35.0682],[118.1211,35.0678],[118.1211,35.0675],[118.1212,35.0672],[118.1212,35.067],[118.1212,35.067],[118.1212,35.0669],[118.1212,35.0666],[118.1213,35.0661],[118.1213,35.0661],[118.1215,35.0661],[118.1215,35.0661],[118.1215,35.0662],[118.1215,35.0665],[118.1214,35.0669],[118.1214,35.0669],[118.1214,35.067],[118.1214,35.0673],[118.1213,35.0678],[118.1213,35.0682],[118.1212,35.0686],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0688],[118.1212,35.0692],[118.1212,35.0695],[118.1211,35.0696],[118.1211,35.0698],[118.1211,35.07],[118.1211,35.07],[118.121,35.07],[118.121,35.07],[118.121,35.07],[118.121,35.0702],[118.1209,35.0704],[118.1209,35.0704],[118.1209,35.0704],[118.1208,35.0703],[118.1208,35.0703],[118.1203,35.0703],[118.1203,35.0703],[118.1202,35.0703],[118.1202,35.0703],[118.1199,35.0703],[118.1196,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0702],[118.1193,35.0702],[118.1193,35.0702],[118.1192,35.0702],[118.1192,35.0702],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1193,35.0703],[118.1193,35.0704],[118.1193,35.0704],[118.1192,35.0705],[118.119,35.0705],[118.119,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1185,35.0705],[118.1182,35.0705],[118.1178,35.0705],[118.1176,35.0705],[118.1174,35.0705],[118.1174,35.0706],[118.1174,35.0706],[118.1174,35.0706],[118.1172,35.0706],[118.117,35.0706],[118.1168,35.0706],[118.1165,35.0707],[118.1165,35.0707],[118.1164,35.0707],[118.1162,35.0707],[118.1162,35.0707],[118.1162,35.0707],[118.116,35.0707],[118.116,35.0707],[118.116,35.0707],[118.1159,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1157,35.0708],[118.1157,35.0708],[118.1157,35.0708],[118.1154,35.0709],[118.1152,35.0709],[118.1151,35.071],[118.1151,35.071],[118.115,35.071],[118.1149,35.071],[118.1147,35.071],[118.1147,35.0711],[118.1146,35.0711],[118.1146,35.0711],[118.1145,35.0711],[118.1145,35.0711],[118.1145,35.0711],[118.1143,35.0711],[118.1142,35.0711],[118.1142,35.0712],[118.1141,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.1139,35.0712],[118.1138,35.0712],[118.1138,35.0712],[118.1137,35.0713],[118.1136,35.0713],[118.1135,35.0713],[118.1134,35.0713],[118.1133,35.0713],[118.1132,35.0714],[118.1131,35.0714],[118.1129,35.0714],[118.1127,35.0715],[118.1126,35.0715],[118.1126,35.0715],[118.1125,35.0715],[118.1125,35.0715],[118.1125,35.0715],[118.1124,35.0715],[118.1124,35.0715],[118.1122,35.0715],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0718],[118.1121,35.0718],[118.1122,35.072],[118.1122,35.0721],[118.1122,35.0722],[118.1122,35.0723],[118.1122,35.0723],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0725],[118.1123,35.0726],[118.1123,35.0726],[118.1123,35.0726],[118.1122,35.0727],[118.1118,35.0727],[118.1117,35.0728],[118.1117,35.0728],[118.1113,35.0728],[118.111,35.0729],[118.1106,35.073],[118.1106,35.073],[118.1106,35.0732],[118.1106,35.0736],[118.1106,35.0739],[118.1106,35.0739],[118.1106,35.0739],[118.1106,35.0741],[118.1107,35.0744],[118.1107,35.0749],[118.1107,35.0749],[118.1107,35.0752],[118.1107,35.0756],[118.1108,35.076],[118.1108,35.0764],[118.1108,35.0765],[118.1108,35.0766],[118.1108,35.0767],[118.1108,35.0767],[118.1108,35.0769],[118.1108,35.0769],[118.1108,35.077],[118.1108,35.0772],[118.1108,35.0772],[118.1108,35.0772],[118.1108,35.0772],[118.1107,35.0772],[118.1107,35.0772],[118.1106,35.0772],[118.1101,35.0772],[118.1101,35.0772],[118.11,35.077],[118.11,35.077],[118.11,35.0769],[118.11,35.0769],[118.11,35.0767],[118.11,35.0767],[118.1097,35.0767],[118.1094,35.0768],[118.1094,35.0769],[118.109,35.0769],[118.109,35.0769],[118.109,35.0769],[118.109,35.077],[118.109,35.0771],[118.1089,35.0771],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0773],[118.1089,35.0773],[118.1089,35.0774],[118.1089,35.0774],[118.1089,35.0775],[118.1088,35.0775],[118.1088,35.0775],[118.1088,35.0776],[118.1088,35.0776],[118.1088,35.0777],[118.1088,35.0777],[118.1088,35.0778],[118.1089,35.0781],[118.1089,35.0781],[118.1089,35.0784],[118.1089,35.0785],[118.1091,35.0787],[118.109,35.0787],[118.109,35.0787],[118.109,35.0787],[118.1088,35.0787],[118.1087,35.0787],[118.1083,35.0787],[118.1083,35.0787],[118.1079,35.0787],[118.1075,35.0787],[118.107,35.0787],[118.107,35.0787],[118.107,35.0787],[118.107,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0788],[118.1069,35.0788],[118.1069,35.0788],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.079],[118.1069,35.079],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.107,35.0792],[118.107,35.0792],[118.107,35.0792],[118.107,35.0793],[118.1069,35.0793],[118.1069,35.0794],[118.1069,35.0794],[118.1069,35.0795],[118.1068,35.0795],[118.1067,35.0795],[118.1067,35.0795],[118.1067,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1064,35.0795],[118.1064,35.0795],[118.1061,35.0795],[118.106,35.0796],[118.106,35.0796],[118.106,35.0796],[118.106,35.0796],[118.1059,35.0796],[118.1059,35.0796],[118.1057,35.0798],[118.1057,35.0798],[118.1057,35.0799],[118.1057,35.0799],[118.1056,35.08],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0803],[118.1055,35.0803],[118.1055,35.0803],[118.1055,35.0804],[118.1055,35.0805],[118.1055,35.0805],[118.1055,35.0806],[118.1055,35.0806],[118.1055,35.0806],[118.1055,35.0807],[118.1055,35.0807],[118.1056,35.0808],[118.1056,35.0808],[118.1056,35.0809],[118.1056,35.0809],[118.1057,35.0811],[118.1057,35.0812],[118.1057,35.0812],[118.1057,35.0815],[118.1057,35.0817],[118.1057,35.0818],[118.1058,35.0819],[118.1058,35.082],[118.1058,35.082],[118.1058,35.0821],[118.1058,35.0821],[118.1058,35.0821],[118.1058,35.0821],[118.1061,35.0821],[118.1063,35.0821],[118.1064,35.0822],[118.1066,35.0822],[118.1066,35.0822],[118.1066,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1068,35.0822],[118.1067,35.0822],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0824],[118.1067,35.0824],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0825],[118.107,35.0825],[118.107,35.0825],[118.107,35.0824],[118.1071,35.0824],[118.1071,35.0824],[118.1071,35.0825],[118.1071,35.0825],[118.1071,35.0826],[118.1071,35.0826],[118.1071,35.0826],[118.1071,35.0827],[118.107,35.0828],[118.107,35.0828],[118.1069,35.0829],[118.1069,35.0829],[118.1069,35.0829],[118.1069,35.083],[118.1069,35.083],[118.1069,35.0831],[118.1069,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1067,35.0833],[118.1066,35.0835],[118.1066,35.0835],[118.1066,35.0835],[118.1066,35.0836],[118.1067,35.0836],[118.1068,35.0837],[118.1068,35.0837],[118.1069,35.0838],[118.1069,35.0838],[118.107,35.0838],[118.1071,35.0838],[118.1071,35.0838],[118.1071,35.0839],[118.107,35.084],[118.1069,35.0841],[118.1069,35.0842],[118.1069,35.0843],[118.1069,35.0844],[118.1069,35.0844],[118.1069,35.0844],[118.1069,35.0844],[118.1068,35.0845],[118.1068,35.0845],[118.1067,35.0845],[118.1066,35.0845],[118.1066,35.0846],[118.1065,35.0846],[118.1064,35.0846],[118.1064,35.0846],[118.1063,35.0847],[118.1062,35.0848],[118.1061,35.0848],[118.106,35.0849],[118.1059,35.085],[118.1057,35.0851],[118.1057,35.0851],[118.1057,35.0851],[118.1057,35.0852],[118.1056,35.0852],[118.1056,35.0853],[118.1055,35.0853],[118.1054,35.0855],[118.1054,35.0856],[118.1053,35.0857],[118.1052,35.0859],[118.1051,35.086],[118.1051,35.086],[118.1051,35.0861],[118.1053,35.0862],[118.1055,35.0863],[118.1055,35.0863],[118.1058,35.0864],[118.1061,35.0866],[118.1062,35.0866],[118.1062,35.0866],[118.1063,35.0867],[118.1066,35.0868],[118.1066,35.0868],[118.1066,35.0868],[118.107,35.0869],[118.1073,35.087],[118.1077,35.0871],[118.108,35.0871],[118.108,35.0871],[118.1081,35.0872],[118.1082,35.0872],[118.1082,35.0873],[118.1083,35.0874],[118.1083,35.0875],[118.1082,35.0878],[118.1082,35.0878],[118.1081,35.0881],[118.1081,35.0881],[118.1081,35.0883],[118.108,35.0884],[118.1079,35.0887],[118.1079,35.0888],[118.1079,35.0888],[118.108,35.0888],[118.108,35.0889],[118.108,35.089],[118.108,35.0891],[118.108,35.0893],[118.108,35.0894],[118.1079,35.0896],[118.1077,35.09],[118.1074,35.0904],[118.1074,35.0905],[118.1074,35.0906],[118.1074,35.0907],[118.1074,35.0909],[118.1074,35.091],[118.1075,35.0911],[118.1075,35.0911],[118.1075,35.0912],[118.1075,35.0912],[118.1075,35.0913],[118.1075,35.0913],[118.1075,35.0913],[118.1075,35.0914],[118.1075,35.0914],[118.1075,35.0915],[118.1075,35.0916],[118.1074,35.0917],[118.1073,35.092],[118.1072,35.0921],[118.1071,35.0923],[118.1071,35.0923],[118.1071,35.0923],[118.1071,35.0923],[118.107,35.0924],[118.1069,35.0926],[118.1067,35.0929],[118.1065,35.093],[118.1064,35.0931],[118.1064,35.0932],[118.1064,35.0932],[118.1065,35.0933],[118.1065,35.0933],[118.1065,35.0935],[118.1065,35.0939],[118.1065,35.094],[118.1065,35.0941],[118.1065,35.0943],[118.1066,35.0946],[118.1066,35.0947],[118.1066,35.0949],[118.1066,35.095],[118.1066,35.0951],[118.1067,35.0952],[118.1067,35.0953],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.107,35.0957],[118.1071,35.0958],[118.1072,35.0962],[118.1072,35.0964],[118.1073,35.0964],[118.1073,35.0965],[118.1075,35.097],[118.1076,35.0973],[118.1077,35.0974],[118.1078,35.0976],[118.1079,35.0979],[118.1079,35.0979],[118.108,35.0981],[118.1085,35.0978],[118.1089,35.098],[118.1091,35.0982],[118.1091,35.0982],[118.1091,35.0982],[118.1091,35.0982],[118.1092,35.0983],[118.1093,35.0983],[118.1093,35.0983],[118.1093,35.0983],[118.1094,35.0983],[118.1094,35.0983],[118.1094,35.0984],[118.1095,35.0984],[118.1096,35.0985],[118.1096,35.0986],[118.1096,35.0986],[118.1097,35.0986],[118.1097,35.0987],[118.1098,35.0987],[118.1098,35.0988],[118.1098,35.0988],[118.1099,35.0989],[118.11,35.0991],[118.1101,35.0993],[118.1101,35.0995],[118.11,35.0996],[118.1101,35.0998],[118.1101,35.0999],[118.1101,35.1],[118.1101,35.1001],[118.1107,35.1001],[118.1107,35.1001],[118.1107,35.1001],[118.1107,35.1005],[118.1102,35.1006],[118.1102,35.1009],[118.1102,35.1009],[118.1103,35.101],[118.1104,35.1011],[118.1104,35.1011],[118.1104,35.1012],[118.1104,35.1013],[118.1105,35.1013],[118.1105,35.1013],[118.1106,35.1014],[118.1106,35.1014],[118.1106,35.1014],[118.1107,35.1013],[118.1108,35.1013],[118.1108,35.1013],[118.1109,35.1014],[118.1109,35.1014],[118.111,35.1015],[118.111,35.1015],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1112,35.1016],[118.1112,35.1017],[118.1112,35.1017],[118.1112,35.1017],[118.1113,35.1017],[118.1113,35.1018],[118.1113,35.1019],[118.1113,35.102],[118.1113,35.1021],[118.1113,35.1022],[118.1112,35.1022],[118.1112,35.1023],[118.111,35.1024],[118.111,35.1025],[118.111,35.1025],[118.111,35.1026],[118.111,35.1027],[118.1112,35.1028],[118.1113,35.1029],[118.1113,35.103],[118.1113,35.1031],[118.1113,35.1031],[118.1113,35.1032],[118.1113,35.1032],[118.1112,35.1032],[118.1112,35.1032],[118.1112,35.1033],[118.111,35.1034],[118.1109,35.1035],[118.1107,35.1036],[118.1107,35.1036],[118.1107,35.1037],[118.1107,35.1039],[118.1108,35.104],[118.1108,35.104],[118.1107,35.1041],[118.1107,35.1042],[118.1107,35.1042],[118.1106,35.1042],[118.1105,35.1042],[118.1105,35.1041],[118.1105,35.1041],[118.1105,35.1041],[118.1105,35.1041],[118.1104,35.104],[118.1103,35.104],[118.1103,35.1039],[118.1102,35.1039],[118.1102,35.1039],[118.1101,35.104],[118.11,35.1042],[118.1099,35.1043],[118.1098,35.1046],[118.1097,35.1046],[118.1097,35.1047],[118.1096,35.1047],[118.1096,35.1047],[118.1095,35.1047],[118.1095,35.1047],[118.1095,35.1047],[118.1095,35.1046],[118.1096,35.1045],[118.1096,35.1045],[118.1095,35.1045],[118.1094,35.1045],[118.1093,35.1046],[118.1092,35.1047],[118.1092,35.1048],[118.1092,35.1048],[118.1092,35.1049],[118.1092,35.105],[118.1093,35.1052],[118.1094,35.1054],[118.1094,35.1055],[118.1095,35.1059],[118.1095,35.106],[118.1095,35.1061],[118.1095,35.1061],[118.1096,35.1065],[118.1096,35.1065],[118.1096,35.1069],[118.1097,35.1069],[118.1097,35.1068],[118.1102,35.1068],[118.1105,35.1068],[118.1109,35.1068],[118.1113,35.1067],[118.1114,35.1071],[118.1114,35.1075],[118.1115,35.108],[118.1115,35.1082],[118.1115,35.1082],[118.1116,35.1087],[118.1116,35.1088],[118.1116,35.1089],[118.1116,35.109],[118.1116,35.1092],[118.112,35.1092],[118.1123,35.1093],[118.1123,35.1096],[118.1123,35.1098],[118.1123,35.1099],[118.1123,35.1099],[118.1123,35.1099],[118.1124,35.1099],[118.1124,35.1099],[118.1124,35.1101],[118.1124,35.1101],[118.1124,35.1101],[118.1124,35.1102],[118.1124,35.1102],[118.1125,35.1105],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1126,35.1114],[118.1126,35.1119],[118.1126,35.1119],[118.1127,35.1119],[118.1129,35.1118],[118.1132,35.1118],[118.1133,35.1118],[118.1133,35.1118],[118.1136,35.1118],[118.1139,35.1117],[118.1139,35.1117],[118.1139,35.1117],[118.1139,35.1119],[118.1139,35.1122],[118.114,35.1124],[118.114,35.1125],[118.114,35.1125],[118.1143,35.1123],[118.1146,35.1122],[118.1146,35.1122],[118.1147,35.1122],[118.115,35.1121],[118.115,35.112],[118.1151,35.112],[118.1153,35.1119],[118.1156,35.1118],[118.1157,35.1118],[118.1159,35.1117],[118.1158,35.1113],[118.1161,35.1113],[118.1161,35.1113],[118.1162,35.1117],[118.1163,35.1121],[118.1163,35.1121],[118.1163,35.1121],[118.1164,35.1121],[118.1167,35.1121],[118.117,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.1121],[118.1171,35.1121],[118.1171,35.1124],[118.1171,35.1124],[118.1171,35.1124],[118.1174,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1176,35.1129],[118.1176,35.1134],[118.1175,35.1139],[118.1175,35.1139],[118.1178,35.1139],[118.1182,35.1139],[118.1185,35.1139],[118.1186,35.1139],[118.1186,35.1139],[118.1187,35.1135],[118.1187,35.1134],[118.1188,35.1131],[118.1188,35.113],[118.1189,35.1126],[118.1189,35.1126],[118.1193,35.1126],[118.1197,35.1126],[118.1196,35.1128],[118.1195,35.113],[118.1195,35.113],[118.1193,35.1135],[118.1191,35.1139],[118.1191,35.1139],[118.1191,35.1139],[118.1196,35.114],[118.12,35.114],[118.1201,35.114],[118.1201,35.114],[118.1201,35.114],[118.1201,35.1142],[118.1201,35.1146],[118.1201,35.1149],[118.1201,35.115],[118.12,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1154],[118.1201,35.1155],[118.1201,35.1155],[118.1202,35.1154],[118.1203,35.1154],[118.1205,35.1154],[118.1208,35.1154],[118.1208,35.1154],[118.1211,35.1154],[118.1212,35.1154],[118.1212,35.1154],[118.1212,35.1154]]]}} \ No newline at end of file diff --git a/public/industry/geojson/widget.json b/public/industry/geojson/widget.json new file mode 100644 index 0000000..08c04d6 --- /dev/null +++ b/public/industry/geojson/widget.json @@ -0,0 +1,246 @@ +{ + "version": "20210105", + "defaultOptions": { + "style": "dark", + "windowOptions": { + "skin": "layer-mars-dialog animation-scale-up", + "position": { + "top": 150, + "right": 10 + }, + "maxmin": false, + "resize": true + }, + "autoReset": false, + "autoDisable": true, + "disableOther": true + }, + "openAtStart": [ + { + "name": "右上角工具栏", + "uri": "widgets/toolBarRight/widget.js", + "css": { + "top": "10px", + "left": "auto", + "right": "10px" + } + }, + { + "name": "放大缩小按钮", + "uri": "widgets/toolButton/zoom.js" + } + ], + "widgets": [ + { + "name": "模板-iframe弹窗", + "uri": "widgets/_example/widget.js", + "windowOptions": { + "width": 300, + "height": 400, + "position": { + "bottom": 10, + "right": 10 + }, + "maxmin": true, + "resize": true + }, + "autoDisable": false, + "disableOther": false, + "openAtStart": false + }, + { + "name": "模板-div弹窗", + "uri": "widgets/_example_divwin/widget.js" + }, + { + "name": "模板-2个弹窗", + "uri": "widgets/_example_2win/widget.js" + }, + { + "name": "模板-append模板", + "uri": "widgets/_example_append/widget.js" + }, + + { + "name": "地图切换", + "uri": "widgets/manageBasemaps/widget.js", + "group": "forlayer", + "autoDisable": false, + "disableOther": false + }, + { + "name": "图层管理", + "uri": "widgets/manageLayers/widget.js", + "group": "forlayer", + "autoCenter": true, + "windowOptions": { + "position": { + "top": 50, + "bottom": 30, + "right": 10 + } + }, + "css": { + "max-width": "300px" + }, + "autoDisable": false, + "disableOther": false + }, + { + "name": "剖面分析图表", + "uri": "widgets/measureChars/widget.js", + "windowOptions": { + "noTitle": true, + "position": { + "bottom": 30, + "left": 30, + "right": 60 + } + }, + "disableOther": false + }, + { + "name": "视角书签", + "uri": "widgets/bookmark/widget.js", + "windowOptions": { + "position": { + "top": 50, + "bottom": 30, + "right": 10 + } + } + }, + { + "name": "漫游路线设置", + "uri": "widgets/roamLine/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + { + "name": "漫游路线", + "uri": "widgets/roamFly/widget.js", + "windowOptions": { + "position": { + "bottom": 60, + "right": 5 + } + } + }, + { + "name": "路线剖面", + "uri": "widgets/roamChars/widget.js", + "windowOptions": { + "noTitle": true, + "position": { + "top": 10, + "left": 10, + "right": 10 + } + }, + "disableOther": false + }, + { + "name": "卷帘对比", + "uri": "widgets/mapSwipe/widget.js", + "group": "mapCompare", + "autoDisable": false, + "disableOther": false + }, + { + "name": "双屏对比", + "uri": "widgets/mapCompare/widget.js", + "autoDisable": false, + "disableOther": false, + "group": "mapCompare", + "windowOptions": { + "position": { + "top": 160, + "bottom": 40, + "left": 10 + }, + "maxmin": true + } + }, + { + "name": "百度街景", + "uri": "widgets/streetscape/widget.js", + "autoDisable": false, + "disableOther": false, + "group": "mapCompare", + "windowOptions": { + "position": { + "top": 160, + "bottom": 40, + "left": 10 + }, + "maxmin": true + } + }, + { + "name": "标绘", + "uri": "widgets/plot/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + }, + "openAtStart": false + }, + { + "name": "模型库", + "uri": "widgets/plot-model/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + { + "name": "分组名称编辑", + "uri": "widgets/plotGroupName/widget.js", + "windowOptions": { + "position": "t" + }, + "disableOther": false + }, + { + "name": "属性编辑", + "uri": "widgets/plotAttr/widget.js", + "windowOptions": { + "position": { + "top": 60, + "bottom": 30, + "left": 10 + } + }, + "disableOther": false + }, + { + "name": "路线导航", + "uri": "widgets/queryRoute/widget.js", + "windowOptions": { + "position": { + "top": 45, + "bottom": 30, + "right": 5 + } + } + }, + + { + "name": "打印", + "uri": "widgets/print/widget.js", + "autoDisable": false, + "disableOther": false + } + ] +} diff --git a/public/industry/geojson/yqxz.json b/public/industry/geojson/yqxz.json new file mode 100644 index 0000000..71aca6a --- /dev/null +++ b/public/industry/geojson/yqxz.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","id":"yqxz.1","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1569,35.051],[118.1569,35.0511],[118.1569,35.0511],[118.1569,35.0512],[118.1569,35.0513],[118.1569,35.0514],[118.1569,35.0515],[118.1569,35.0516],[118.1569,35.0516],[118.1568,35.0517],[118.1568,35.0518],[118.1568,35.0519],[118.1568,35.052],[118.1568,35.0521],[118.1568,35.0521],[118.1568,35.0522],[118.1568,35.0523],[118.1568,35.0524],[118.1568,35.0525],[118.1568,35.0526],[118.1568,35.0526],[118.1568,35.0527],[118.1568,35.0528],[118.1568,35.0529],[118.1568,35.053],[118.1568,35.0531],[118.1568,35.0531],[118.1568,35.0532],[118.1568,35.0533],[118.1568,35.0534],[118.1568,35.0535],[118.1568,35.0536],[118.1568,35.0537],[118.1568,35.0537],[118.1568,35.0538],[118.1568,35.0539],[118.1568,35.054],[118.1568,35.0541],[118.1568,35.0542],[118.1568,35.0543],[118.1568,35.0544],[118.1568,35.0544],[118.1568,35.0545],[118.1568,35.0546],[118.1569,35.0547],[118.1569,35.0548],[118.1569,35.0549],[118.1569,35.055],[118.1569,35.0551],[118.1569,35.0552],[118.1569,35.0553],[118.1569,35.0554],[118.1569,35.0554],[118.1569,35.0555],[118.1569,35.0556],[118.1569,35.0557],[118.157,35.0558],[118.157,35.0559],[118.157,35.056],[118.157,35.0561],[118.157,35.0562],[118.157,35.0563],[118.157,35.0564],[118.157,35.0565],[118.1571,35.0566],[118.1571,35.0567],[118.1571,35.0568],[118.1571,35.0569],[118.1571,35.0569],[118.1571,35.057],[118.1571,35.057],[118.1571,35.0571],[118.1571,35.0571],[118.1571,35.0572],[118.1571,35.0572],[118.1572,35.0573],[118.1572,35.0573],[118.1572,35.0574],[118.1572,35.0574],[118.1572,35.0575],[118.1572,35.0575],[118.1572,35.0576],[118.1572,35.0577],[118.1572,35.0577],[118.1572,35.0578],[118.1572,35.0578],[118.1573,35.0579],[118.1573,35.0579],[118.1573,35.058],[118.1573,35.058],[118.1573,35.0581],[118.1573,35.0581],[118.1573,35.0582],[118.1573,35.0582],[118.1573,35.0583],[118.1573,35.0583],[118.1573,35.0584],[118.1574,35.0584],[118.1574,35.0585],[118.1574,35.0586],[118.1574,35.0586],[118.1574,35.0587],[118.1574,35.0587],[118.1574,35.0588],[118.1574,35.0588],[118.1574,35.0589],[118.1575,35.0589],[118.1575,35.059],[118.1575,35.059],[118.1575,35.0591],[118.1575,35.0592],[118.1575,35.0592],[118.1575,35.0593],[118.1575,35.0593],[118.1575,35.0594],[118.1576,35.0594],[118.1576,35.0595],[118.1576,35.0596],[118.1576,35.0596],[118.1576,35.0597],[118.1576,35.0597],[118.1576,35.0598],[118.1576,35.0598],[118.1577,35.0599],[118.1577,35.06],[118.1577,35.06],[118.1577,35.0601],[118.1577,35.0601],[118.1577,35.0602],[118.1577,35.0603],[118.1577,35.0603],[118.1578,35.0604],[118.1578,35.0604],[118.1578,35.0605],[118.1578,35.0606],[118.1578,35.0606],[118.1578,35.0607],[118.1578,35.0607],[118.1579,35.0608],[118.1579,35.0609],[118.1579,35.0609],[118.1579,35.061],[118.1579,35.061],[118.1579,35.0611],[118.1579,35.0612],[118.158,35.0612],[118.158,35.0613],[118.158,35.0614],[118.158,35.0614],[118.158,35.0615],[118.158,35.0615],[118.1581,35.0616],[118.1581,35.0617],[118.1581,35.0617],[118.1581,35.0618],[118.1581,35.0619],[118.1581,35.0619],[118.1582,35.062],[118.1582,35.0621],[118.1582,35.0621],[118.1582,35.0622],[118.1582,35.0623],[118.1582,35.0623],[118.1583,35.0624],[118.1583,35.0625],[118.1583,35.0625],[118.1583,35.0626],[118.1583,35.0627],[118.1583,35.0627],[118.1584,35.0628],[118.1584,35.0629],[118.1584,35.0629],[118.1584,35.063],[118.1584,35.0631],[118.1584,35.0631],[118.1585,35.0632],[118.1585,35.0633],[118.1585,35.0633],[118.1585,35.0634],[118.1585,35.0635],[118.1586,35.0635],[118.1586,35.0636],[118.1586,35.0637],[118.1586,35.0638],[118.1586,35.0638],[118.1586,35.0639],[118.1587,35.064],[118.1587,35.064],[118.1587,35.0641],[118.1587,35.0642],[118.1592,35.0711],[118.1844,35.0718],[118.1861,35.0718],[118.187,35.0586],[118.1753,35.0563],[118.1756,35.0536],[118.1759,35.052],[118.1569,35.051]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"智慧物流园","bbox":[118.1568,35.051,118.187,35.0718]}},{"type":"Feature","id":"yqxz.2","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1617,35.0345],[118.1617,35.035],[118.1617,35.0351],[118.1617,35.0352],[118.1617,35.0352],[118.1617,35.0352],[118.1617,35.0353],[118.1617,35.0353],[118.1617,35.0354],[118.1617,35.0354],[118.1617,35.0355],[118.1616,35.0355],[118.1616,35.0356],[118.1616,35.0356],[118.1616,35.0357],[118.1616,35.0357],[118.1616,35.0358],[118.1616,35.0358],[118.1616,35.0359],[118.1616,35.0359],[118.1616,35.036],[118.1616,35.036],[118.1616,35.0361],[118.1616,35.0361],[118.1616,35.0362],[118.1616,35.0362],[118.1616,35.0363],[118.1616,35.0363],[118.1616,35.0364],[118.1616,35.0364],[118.1616,35.0365],[118.1615,35.0365],[118.1615,35.0366],[118.1615,35.0367],[118.1615,35.0367],[118.1615,35.0368],[118.1615,35.0368],[118.1615,35.0369],[118.1615,35.0369],[118.1615,35.037],[118.1615,35.0371],[118.1615,35.0371],[118.1615,35.0372],[118.1615,35.0372],[118.1614,35.0373],[118.1614,35.0374],[118.1614,35.0374],[118.1614,35.0375],[118.1614,35.0375],[118.1614,35.0376],[118.1614,35.0376],[118.1614,35.0377],[118.1614,35.0378],[118.1614,35.0378],[118.1613,35.0379],[118.1613,35.0379],[118.1613,35.038],[118.1613,35.0381],[118.1613,35.0381],[118.1613,35.0382],[118.1613,35.0382],[118.1613,35.0383],[118.1613,35.0384],[118.1613,35.0384],[118.1612,35.0385],[118.1612,35.0385],[118.1612,35.0386],[118.1612,35.0387],[118.1612,35.0387],[118.1612,35.0388],[118.1612,35.0388],[118.1612,35.0389],[118.1612,35.039],[118.1611,35.039],[118.1611,35.0391],[118.1611,35.0391],[118.1611,35.0392],[118.1611,35.0392],[118.1611,35.0393],[118.1611,35.0394],[118.1611,35.0394],[118.1611,35.0395],[118.161,35.0395],[118.161,35.0396],[118.161,35.0396],[118.161,35.0397],[118.161,35.0398],[118.161,35.0398],[118.161,35.0399],[118.161,35.0399],[118.1609,35.04],[118.1609,35.04],[118.1609,35.0401],[118.1609,35.0401],[118.1609,35.0402],[118.1609,35.0402],[118.1609,35.0403],[118.1609,35.0403],[118.1609,35.0404],[118.1608,35.0404],[118.1608,35.0405],[118.1608,35.0405],[118.1608,35.0406],[118.1608,35.0406],[118.1608,35.0407],[118.1608,35.0407],[118.1608,35.0408],[118.1607,35.0408],[118.1607,35.0409],[118.1607,35.0409],[118.1607,35.0409],[118.1607,35.041],[118.1607,35.041],[118.1607,35.0411],[118.1607,35.0411],[118.1606,35.0412],[118.1606,35.0413],[118.1606,35.0413],[118.1606,35.0414],[118.1605,35.0415],[118.1605,35.0415],[118.1605,35.0416],[118.1605,35.0416],[118.1605,35.0417],[118.1605,35.0417],[118.1604,35.0418],[118.1604,35.0418],[118.1604,35.0419],[118.1604,35.0419],[118.1604,35.0419],[118.1604,35.042],[118.1603,35.042],[118.1603,35.0421],[118.1603,35.0421],[118.1603,35.0421],[118.1603,35.0422],[118.1603,35.0422],[118.1602,35.0423],[118.1602,35.0423],[118.1602,35.0423],[118.1602,35.0424],[118.1601,35.0425],[118.1601,35.0426],[118.1601,35.0426],[118.16,35.0427],[118.16,35.0428],[118.16,35.0429],[118.1599,35.043],[118.1599,35.043],[118.1599,35.0431],[118.1598,35.0432],[118.1598,35.0432],[118.1598,35.0433],[118.1597,35.0434],[118.1597,35.0435],[118.1597,35.0435],[118.1596,35.0436],[118.1596,35.0437],[118.1596,35.0437],[118.1595,35.0438],[118.1595,35.0439],[118.1594,35.0439],[118.1594,35.044],[118.1594,35.0441],[118.1593,35.0441],[118.1593,35.0442],[118.1593,35.0443],[118.1592,35.0443],[118.1592,35.0444],[118.1592,35.0445],[118.1591,35.0445],[118.1591,35.0446],[118.1591,35.0447],[118.159,35.0447],[118.159,35.0448],[118.1589,35.0449],[118.1589,35.045],[118.1589,35.0451],[118.1588,35.0451],[118.1588,35.0452],[118.1587,35.0453],[118.1587,35.0453],[118.1587,35.0454],[118.1586,35.0454],[118.1586,35.0455],[118.1586,35.0456],[118.1585,35.0456],[118.1585,35.0457],[118.1585,35.0458],[118.1584,35.0458],[118.1584,35.0459],[118.1584,35.0459],[118.1584,35.046],[118.1583,35.0461],[118.1583,35.0461],[118.1583,35.0462],[118.1582,35.0463],[118.1582,35.0463],[118.1582,35.0464],[118.1581,35.0464],[118.1581,35.0465],[118.1581,35.0466],[118.158,35.0466],[118.158,35.0467],[118.158,35.0468],[118.158,35.0468],[118.1579,35.0469],[118.1579,35.047],[118.1579,35.047],[118.1579,35.0471],[118.1578,35.0471],[118.1578,35.0472],[118.1578,35.0473],[118.1578,35.0473],[118.1577,35.0474],[118.1577,35.0475],[118.1577,35.0475],[118.1577,35.0476],[118.1576,35.0477],[118.1576,35.0477],[118.1576,35.0478],[118.1576,35.0479],[118.1575,35.0479],[118.1575,35.048],[118.1575,35.0481],[118.1575,35.0481],[118.1575,35.0482],[118.1574,35.0483],[118.1574,35.0484],[118.1574,35.0484],[118.1574,35.0485],[118.1574,35.0486],[118.1574,35.0486],[118.1573,35.0487],[118.1573,35.0488],[118.1573,35.0489],[118.1573,35.0489],[118.1573,35.049],[118.1573,35.0491],[118.1573,35.0492],[118.1572,35.0492],[118.1572,35.0493],[118.1572,35.0494],[118.1572,35.0495],[118.1572,35.0495],[118.1572,35.0496],[118.1572,35.0497],[118.1572,35.0498],[118.1572,35.0499],[118.1572,35.0499],[118.1572,35.05],[118.1572,35.0501],[118.1572,35.0502],[118.1572,35.0502],[118.1572,35.0503],[118.1572,35.0503],[118.1572,35.0503],[118.1572,35.0504],[118.1572,35.0504],[118.1572,35.0505],[118.1572,35.0505],[118.1572,35.0506],[118.1572,35.0506],[118.167,35.0512],[118.1756,35.0517],[118.1769,35.0472],[118.1769,35.0472],[118.1769,35.0471],[118.177,35.0471],[118.177,35.047],[118.177,35.047],[118.177,35.0469],[118.177,35.0469],[118.1771,35.0468],[118.1771,35.0468],[118.1771,35.0467],[118.1771,35.0467],[118.1772,35.0466],[118.1772,35.0466],[118.1772,35.0465],[118.1772,35.0465],[118.1773,35.0464],[118.1773,35.0464],[118.1773,35.0463],[118.1773,35.0463],[118.1774,35.0462],[118.1774,35.0462],[118.1774,35.0461],[118.1774,35.0461],[118.1774,35.0461],[118.1775,35.046],[118.1775,35.046],[118.1775,35.0459],[118.1775,35.0459],[118.1776,35.0458],[118.1776,35.0458],[118.1776,35.0457],[118.1776,35.0457],[118.1777,35.0457],[118.1777,35.0456],[118.1777,35.0456],[118.1777,35.0455],[118.1778,35.0455],[118.1778,35.0454],[118.1778,35.0454],[118.1778,35.0454],[118.1778,35.0453],[118.1779,35.0453],[118.1779,35.0452],[118.1779,35.0452],[118.1779,35.0452],[118.178,35.0451],[118.178,35.0451],[118.178,35.045],[118.178,35.045],[118.1781,35.045],[118.1781,35.0449],[118.1781,35.0449],[118.1781,35.0448],[118.1782,35.0448],[118.1782,35.0448],[118.1782,35.0447],[118.1782,35.0447],[118.1783,35.0447],[118.1783,35.0446],[118.1783,35.0446],[118.1783,35.0445],[118.1784,35.0445],[118.1784,35.0445],[118.1784,35.0444],[118.1784,35.0444],[118.1785,35.0444],[118.1785,35.0443],[118.1785,35.0443],[118.1786,35.0443],[118.1786,35.0442],[118.1786,35.0442],[118.1786,35.0442],[118.1787,35.0441],[118.1787,35.0441],[118.1787,35.044],[118.1788,35.0439],[118.1789,35.0439],[118.1789,35.0438],[118.179,35.0437],[118.179,35.0437],[118.1791,35.0436],[118.1792,35.0435],[118.1792,35.0435],[118.1793,35.0434],[118.1794,35.0434],[118.1794,35.0433],[118.1794,35.0433],[118.1795,35.0433],[118.1795,35.0432],[118.1795,35.0432],[118.1796,35.0432],[118.1796,35.0431],[118.1796,35.0431],[118.1797,35.0431],[118.1797,35.043],[118.1797,35.043],[118.1798,35.043],[118.1798,35.043],[118.1798,35.0429],[118.1799,35.0429],[118.1799,35.0429],[118.18,35.0428],[118.18,35.0428],[118.18,35.0428],[118.1801,35.0427],[118.1801,35.0427],[118.1801,35.0427],[118.1802,35.0427],[118.1802,35.0426],[118.1803,35.0426],[118.1803,35.0426],[118.1804,35.0425],[118.1804,35.0425],[118.1804,35.0425],[118.1805,35.0425],[118.1805,35.0424],[118.1806,35.0424],[118.1822,35.041],[118.1788,35.0359],[118.1781,35.036],[118.178,35.036],[118.178,35.0361],[118.1779,35.0361],[118.1778,35.0361],[118.1777,35.0361],[118.1776,35.0361],[118.1776,35.0362],[118.1775,35.0362],[118.1774,35.0362],[118.1773,35.0362],[118.1773,35.0362],[118.1772,35.0363],[118.1771,35.0363],[118.177,35.0363],[118.177,35.0363],[118.1769,35.0363],[118.1768,35.0364],[118.1767,35.0364],[118.1767,35.0364],[118.1766,35.0364],[118.1765,35.0365],[118.1765,35.0365],[118.1764,35.0365],[118.1763,35.0365],[118.1763,35.0365],[118.1762,35.0366],[118.1761,35.0366],[118.1761,35.0366],[118.176,35.0366],[118.1759,35.0367],[118.1759,35.0367],[118.1758,35.0367],[118.1758,35.0367],[118.1757,35.0368],[118.1756,35.0368],[118.1756,35.0368],[118.1755,35.0369],[118.1754,35.0369],[118.1754,35.0369],[118.1753,35.037],[118.1753,35.037],[118.1752,35.037],[118.1751,35.0371],[118.1751,35.0371],[118.175,35.0371],[118.1749,35.0372],[118.1749,35.0372],[118.1748,35.0372],[118.1748,35.0373],[118.1747,35.0373],[118.1746,35.0373],[118.1746,35.0374],[118.1745,35.0374],[118.1745,35.0375],[118.1744,35.0375],[118.1743,35.0375],[118.1743,35.0376],[118.1742,35.0376],[118.1741,35.0377],[118.1741,35.0377],[118.174,35.0378],[118.174,35.0378],[118.1739,35.0379],[118.1738,35.0379],[118.1737,35.0381],[118.1679,35.0354],[118.1666,35.0351],[118.1617,35.0345]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"新材料产业园","bbox":[118.1572,35.0345,118.1822,35.0517]}},{"type":"Feature","id":"yqxz.3","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1948,35.0264],[118.194,35.0249],[118.192,35.0217],[118.192,35.0216],[118.1919,35.0215],[118.1919,35.0214],[118.1918,35.0214],[118.1918,35.0213],[118.1917,35.0212],[118.1917,35.0211],[118.1916,35.0211],[118.1916,35.021],[118.1915,35.0209],[118.1915,35.0208],[118.1914,35.0208],[118.1914,35.0207],[118.1913,35.0206],[118.1913,35.0205],[118.1913,35.0205],[118.1912,35.0204],[118.1912,35.0203],[118.1911,35.0202],[118.1911,35.0202],[118.191,35.0201],[118.191,35.02],[118.1909,35.0199],[118.1909,35.0198],[118.1909,35.0198],[118.1908,35.0197],[118.1908,35.0196],[118.1907,35.0195],[118.1907,35.0195],[118.1907,35.0194],[118.1906,35.0193],[118.1906,35.0192],[118.1905,35.0191],[118.1905,35.0191],[118.1905,35.019],[118.1904,35.0189],[118.1904,35.0188],[118.1904,35.0187],[118.1903,35.0187],[118.1903,35.0186],[118.1903,35.0185],[118.1902,35.0184],[118.1902,35.0183],[118.1902,35.0183],[118.1901,35.0182],[118.1901,35.0181],[118.1901,35.018],[118.19,35.0179],[118.19,35.0179],[118.19,35.0178],[118.1899,35.0177],[118.1899,35.0176],[118.1899,35.0175],[118.1898,35.0175],[118.1898,35.0174],[118.1898,35.0173],[118.1898,35.0172],[118.1897,35.0171],[118.1897,35.017],[118.1897,35.017],[118.1896,35.0169],[118.1896,35.0168],[118.1896,35.0167],[118.1896,35.0166],[118.1895,35.0166],[118.1895,35.0165],[118.1895,35.0164],[118.1895,35.0163],[118.1894,35.0162],[118.1894,35.0161],[118.1894,35.0161],[118.1894,35.016],[118.1894,35.0159],[118.1893,35.0158],[118.1893,35.0157],[118.1893,35.0156],[118.1893,35.0156],[118.1893,35.0155],[118.1892,35.0154],[118.1892,35.0153],[118.1892,35.0152],[118.1892,35.0151],[118.1892,35.0151],[118.1892,35.015],[118.1891,35.0149],[118.1891,35.0148],[118.1891,35.0147],[118.1891,35.0146],[118.1891,35.0146],[118.1891,35.0145],[118.1891,35.0144],[118.189,35.0143],[118.189,35.0142],[118.189,35.0141],[118.189,35.014],[118.189,35.014],[118.189,35.0139],[118.189,35.0138],[118.189,35.0137],[118.189,35.0136],[118.1889,35.0135],[118.1889,35.0135],[118.1889,35.0134],[118.1889,35.0133],[118.1889,35.0132],[118.1889,35.0131],[118.1889,35.013],[118.1889,35.0129],[118.1889,35.0129],[118.1889,35.0128],[118.1889,35.0127],[118.1889,35.0126],[118.1889,35.0125],[118.1889,35.0124],[118.1889,35.0123],[118.1889,35.0123],[118.1889,35.0122],[118.1889,35.0121],[118.1889,35.012],[118.1889,35.0119],[118.1889,35.0118],[118.1889,35.0117],[118.1889,35.0117],[118.1889,35.0116],[118.1889,35.0115],[118.1889,35.0114],[118.1889,35.0113],[118.1889,35.0112],[118.1893,35.0045],[118.1785,35.0056],[118.1589,35.0082],[118.1601,35.0143],[118.1602,35.0144],[118.1602,35.0145],[118.1602,35.0146],[118.1602,35.0146],[118.1602,35.0147],[118.1602,35.0148],[118.1602,35.0149],[118.1603,35.015],[118.1603,35.0151],[118.1603,35.0152],[118.1603,35.0153],[118.1603,35.0153],[118.1603,35.0154],[118.1603,35.0155],[118.1604,35.0156],[118.1604,35.0157],[118.1604,35.0158],[118.1604,35.0159],[118.1604,35.0159],[118.1604,35.016],[118.1604,35.0161],[118.1605,35.0162],[118.1605,35.0163],[118.1605,35.0164],[118.1605,35.0164],[118.1605,35.0165],[118.1605,35.0166],[118.1605,35.0167],[118.1605,35.0168],[118.1606,35.0168],[118.1606,35.0169],[118.1606,35.017],[118.1606,35.0171],[118.1606,35.0172],[118.1606,35.0172],[118.1606,35.0173],[118.1606,35.0174],[118.1607,35.0175],[118.1607,35.0176],[118.1607,35.0176],[118.1607,35.0177],[118.1607,35.0178],[118.1607,35.0179],[118.1607,35.0179],[118.1607,35.018],[118.1607,35.0181],[118.1608,35.0182],[118.1608,35.0183],[118.1608,35.0183],[118.1608,35.0184],[118.1608,35.0185],[118.1608,35.0186],[118.1608,35.0186],[118.1608,35.0187],[118.1608,35.0188],[118.1608,35.0189],[118.1609,35.0189],[118.1609,35.019],[118.1609,35.0191],[118.1609,35.0192],[118.1609,35.0192],[118.1609,35.0193],[118.1609,35.0194],[118.1609,35.0195],[118.1609,35.0195],[118.1609,35.0196],[118.1609,35.0197],[118.161,35.0198],[118.161,35.0198],[118.161,35.0199],[118.161,35.02],[118.161,35.0201],[118.161,35.0201],[118.161,35.0202],[118.161,35.0203],[118.161,35.0204],[118.161,35.0204],[118.161,35.0205],[118.161,35.0206],[118.1611,35.0207],[118.1611,35.0207],[118.1611,35.0208],[118.1611,35.0209],[118.1611,35.021],[118.1611,35.021],[118.1611,35.0211],[118.1611,35.0212],[118.1611,35.0213],[118.1611,35.0213],[118.1611,35.0214],[118.1611,35.0215],[118.1611,35.0216],[118.1611,35.0216],[118.1611,35.0217],[118.1612,35.0218],[118.1612,35.0219],[118.1612,35.0219],[118.1612,35.022],[118.1612,35.0221],[118.1612,35.0222],[118.1612,35.0222],[118.1612,35.0223],[118.1612,35.0224],[118.1612,35.0225],[118.1612,35.0225],[118.1612,35.0226],[118.1612,35.0227],[118.1612,35.0228],[118.1612,35.0229],[118.1612,35.0229],[118.1612,35.023],[118.1613,35.0231],[118.1613,35.0232],[118.1613,35.0232],[118.1613,35.0233],[118.1613,35.0234],[118.1613,35.0235],[118.1613,35.0236],[118.1613,35.0236],[118.1613,35.0237],[118.1613,35.0238],[118.1613,35.0239],[118.1613,35.024],[118.1613,35.024],[118.1613,35.0241],[118.1613,35.0242],[118.1613,35.0243],[118.1613,35.0244],[118.1615,35.0284],[118.1948,35.0264]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"先进制造产业园","bbox":[118.1589,35.0045,118.1948,35.0284]}},{"type":"Feature","id":"yqxz.4","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1615,35.0288],[118.1617,35.0342],[118.1675,35.0349],[118.1735,35.0377],[118.1739,35.0374],[118.174,35.0374],[118.174,35.0373],[118.1741,35.0373],[118.1742,35.0373],[118.1742,35.0372],[118.1743,35.0372],[118.1744,35.0371],[118.1744,35.0371],[118.1745,35.037],[118.1746,35.037],[118.1746,35.037],[118.1747,35.0369],[118.1748,35.0369],[118.1748,35.0369],[118.1749,35.0368],[118.175,35.0368],[118.175,35.0368],[118.1751,35.0367],[118.1752,35.0367],[118.1752,35.0367],[118.1753,35.0366],[118.1754,35.0366],[118.1754,35.0366],[118.1755,35.0365],[118.1756,35.0365],[118.1756,35.0365],[118.1757,35.0364],[118.1758,35.0364],[118.1758,35.0364],[118.1759,35.0363],[118.176,35.0363],[118.1761,35.0363],[118.1761,35.0363],[118.1762,35.0362],[118.1763,35.0362],[118.1763,35.0362],[118.1764,35.0362],[118.1765,35.0361],[118.1766,35.0361],[118.1766,35.0361],[118.1767,35.036],[118.1768,35.036],[118.1768,35.036],[118.1769,35.036],[118.177,35.0359],[118.1771,35.0359],[118.1771,35.0359],[118.1772,35.0359],[118.1773,35.0358],[118.1774,35.0358],[118.1775,35.0358],[118.1775,35.0358],[118.1776,35.0358],[118.1777,35.0357],[118.1778,35.0357],[118.1779,35.0357],[118.1779,35.0357],[118.178,35.0356],[118.1781,35.0356],[118.1782,35.0356],[118.1783,35.0356],[118.1784,35.0355],[118.1784,35.0355],[118.1785,35.0355],[118.1792,35.0354],[118.1826,35.0408],[118.187,35.0398],[118.1871,35.0397],[118.1872,35.0397],[118.1872,35.0397],[118.1873,35.0397],[118.1874,35.0397],[118.1875,35.0396],[118.1875,35.0396],[118.1876,35.0396],[118.1877,35.0396],[118.1878,35.0395],[118.1878,35.0395],[118.1879,35.0395],[118.188,35.0395],[118.1881,35.0395],[118.1881,35.0394],[118.1882,35.0394],[118.1883,35.0394],[118.1884,35.0394],[118.1884,35.0393],[118.1885,35.0393],[118.1886,35.0393],[118.1887,35.0393],[118.1887,35.0392],[118.1888,35.0392],[118.1889,35.0392],[118.1889,35.0391],[118.189,35.0391],[118.1891,35.0391],[118.1892,35.0391],[118.1892,35.039],[118.1893,35.039],[118.1894,35.039],[118.1894,35.0389],[118.1895,35.0389],[118.1896,35.0389],[118.1896,35.0389],[118.1897,35.0388],[118.1898,35.0388],[118.1898,35.0388],[118.1899,35.0387],[118.19,35.0387],[118.19,35.0387],[118.1901,35.0386],[118.1902,35.0386],[118.1902,35.0386],[118.1903,35.0385],[118.1903,35.0385],[118.1904,35.0385],[118.1905,35.0384],[118.1905,35.0384],[118.1906,35.0384],[118.1907,35.0383],[118.1907,35.0383],[118.1908,35.0383],[118.1908,35.0382],[118.1909,35.0382],[118.191,35.0382],[118.191,35.0381],[118.1911,35.0381],[118.1911,35.038],[118.1912,35.038],[118.1913,35.038],[118.1913,35.0379],[118.1914,35.0379],[118.1914,35.0379],[118.1915,35.0378],[118.1915,35.0378],[118.1916,35.0377],[118.1916,35.0377],[118.1917,35.0377],[118.1918,35.0376],[118.1918,35.0376],[118.1919,35.0375],[118.1919,35.0375],[118.192,35.0375],[118.192,35.0374],[118.1921,35.0374],[118.1921,35.0373],[118.1922,35.0373],[118.1922,35.0372],[118.1923,35.0372],[118.1923,35.0372],[118.1924,35.0371],[118.1924,35.0371],[118.1925,35.037],[118.1925,35.037],[118.1926,35.0369],[118.1926,35.0369],[118.1927,35.0369],[118.1927,35.0368],[118.1928,35.0368],[118.1928,35.0367],[118.1929,35.0367],[118.1929,35.0366],[118.193,35.0366],[118.193,35.0365],[118.193,35.0365],[118.1931,35.0364],[118.1931,35.0364],[118.1932,35.0363],[118.1932,35.0363],[118.1933,35.0363],[118.1933,35.0362],[118.1934,35.0362],[118.1934,35.0361],[118.1934,35.0361],[118.1935,35.036],[118.1935,35.036],[118.1936,35.0359],[118.1936,35.0359],[118.1936,35.0358],[118.1937,35.0358],[118.1937,35.0357],[118.1938,35.0357],[118.1938,35.0356],[118.1938,35.0356],[118.1939,35.0355],[118.1939,35.0355],[118.1939,35.0354],[118.194,35.0354],[118.194,35.0353],[118.194,35.0353],[118.1941,35.0352],[118.1941,35.0352],[118.1942,35.0351],[118.1942,35.0351],[118.1942,35.035],[118.1943,35.035],[118.1943,35.0349],[118.1943,35.0349],[118.1943,35.0348],[118.1944,35.0348],[118.1944,35.0347],[118.1944,35.0346],[118.1945,35.0346],[118.1945,35.0345],[118.1945,35.0345],[118.1946,35.0344],[118.1946,35.0344],[118.1946,35.0343],[118.1946,35.0343],[118.1947,35.0342],[118.1947,35.0342],[118.1947,35.0341],[118.1947,35.0341],[118.1948,35.034],[118.1948,35.0339],[118.1948,35.0339],[118.1948,35.0338],[118.1949,35.0338],[118.1949,35.0337],[118.1949,35.0337],[118.1949,35.0336],[118.195,35.0336],[118.195,35.0335],[118.195,35.0334],[118.195,35.0334],[118.1951,35.0333],[118.1951,35.0333],[118.1951,35.0332],[118.1951,35.0332],[118.1951,35.0331],[118.1951,35.033],[118.1952,35.033],[118.1952,35.0329],[118.1952,35.0329],[118.1952,35.0328],[118.1952,35.0328],[118.1953,35.0327],[118.1953,35.0326],[118.1953,35.0326],[118.1953,35.0325],[118.1953,35.0325],[118.1953,35.0324],[118.1953,35.0324],[118.1954,35.0323],[118.1954,35.0322],[118.1954,35.0322],[118.1954,35.0321],[118.1954,35.0321],[118.1954,35.032],[118.1954,35.0319],[118.1954,35.0319],[118.1954,35.0318],[118.1955,35.0318],[118.1955,35.0317],[118.1955,35.0317],[118.1955,35.0316],[118.1955,35.0315],[118.1955,35.0315],[118.1955,35.0314],[118.1955,35.0314],[118.1955,35.0313],[118.1955,35.0312],[118.1955,35.0312],[118.1955,35.0311],[118.1955,35.0311],[118.1955,35.031],[118.1955,35.0309],[118.1955,35.0309],[118.1955,35.0308],[118.1955,35.0308],[118.1955,35.0307],[118.1955,35.0306],[118.1955,35.0306],[118.1955,35.0305],[118.1955,35.0305],[118.1955,35.0304],[118.1955,35.0303],[118.1955,35.0303],[118.1955,35.0302],[118.1955,35.0302],[118.1955,35.0301],[118.1955,35.03],[118.1955,35.03],[118.1955,35.0299],[118.1955,35.0298],[118.1955,35.0298],[118.1955,35.0297],[118.1955,35.0297],[118.1955,35.0296],[118.1955,35.0295],[118.1955,35.0295],[118.1955,35.0294],[118.1955,35.0294],[118.1955,35.0293],[118.1954,35.0292],[118.1954,35.0292],[118.1954,35.0291],[118.1954,35.0291],[118.1954,35.029],[118.1954,35.0289],[118.1954,35.0289],[118.1954,35.0288],[118.1954,35.0287],[118.1953,35.0287],[118.1953,35.0286],[118.1953,35.0286],[118.1953,35.0285],[118.1953,35.0284],[118.1953,35.0284],[118.1953,35.0283],[118.1952,35.0283],[118.1952,35.0282],[118.1952,35.0281],[118.1952,35.0281],[118.1952,35.028],[118.1951,35.028],[118.1951,35.0279],[118.1951,35.0278],[118.1951,35.0278],[118.1951,35.0277],[118.195,35.0276],[118.195,35.0276],[118.195,35.0275],[118.195,35.0275],[118.1948,35.0269],[118.1615,35.0288]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"智能制造产业园","bbox":[118.1615,35.0269,118.1955,35.0408]}},{"type":"Feature","id":"yqxz.5","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1865,35.0718],[118.1991,35.0726],[118.1992,35.0726],[118.1993,35.0726],[118.1994,35.0726],[118.1995,35.0726],[118.1997,35.0726],[118.1998,35.0726],[118.1999,35.0726],[118.2,35.0726],[118.2001,35.0726],[118.2002,35.0726],[118.2003,35.0726],[118.2003,35.0726],[118.2004,35.0726],[118.2005,35.0726],[118.2006,35.0726],[118.2007,35.0726],[118.2008,35.0726],[118.2009,35.0726],[118.201,35.0726],[118.2011,35.0726],[118.2012,35.0726],[118.2013,35.0726],[118.2014,35.0726],[118.2015,35.0726],[118.2016,35.0726],[118.2018,35.0726],[118.2019,35.0726],[118.202,35.0726],[118.2021,35.0726],[118.2022,35.0726],[118.2023,35.0726],[118.2025,35.0726],[118.2026,35.0726],[118.2027,35.0726],[118.2028,35.0726],[118.2029,35.0726],[118.2031,35.0725],[118.2032,35.0725],[118.2033,35.0725],[118.2035,35.0725],[118.2036,35.0725],[118.2037,35.0725],[118.2038,35.0725],[118.204,35.0725],[118.2041,35.0725],[118.2042,35.0725],[118.2044,35.0725],[118.2045,35.0725],[118.2046,35.0725],[118.2048,35.0725],[118.2049,35.0725],[118.205,35.0725],[118.2052,35.0725],[118.2053,35.0725],[118.2054,35.0725],[118.2056,35.0725],[118.2057,35.0725],[118.2058,35.0725],[118.206,35.0724],[118.2061,35.0724],[118.2062,35.0724],[118.2064,35.0724],[118.2065,35.0724],[118.2066,35.0724],[118.2068,35.0724],[118.2069,35.0724],[118.207,35.0724],[118.2071,35.0724],[118.2073,35.0724],[118.2074,35.0724],[118.2075,35.0724],[118.2077,35.0724],[118.2078,35.0724],[118.2079,35.0724],[118.208,35.0724],[118.2082,35.0724],[118.2083,35.0723],[118.2084,35.0723],[118.2085,35.0723],[118.2086,35.0723],[118.2088,35.0723],[118.2089,35.0723],[118.209,35.0723],[118.2091,35.0723],[118.2092,35.0723],[118.2093,35.0723],[118.2094,35.0723],[118.2095,35.0723],[118.2096,35.0723],[118.2097,35.0723],[118.2099,35.0723],[118.21,35.0723],[118.21,35.0723],[118.2101,35.0723],[118.2102,35.0723],[118.2103,35.0722],[118.2104,35.0722],[118.2105,35.0722],[118.2106,35.0722],[118.2107,35.0722],[118.2108,35.0722],[118.2108,35.0722],[118.2109,35.0722],[118.2111,35.0722],[118.2112,35.0722],[118.2113,35.0722],[118.2114,35.0722],[118.2116,35.0722],[118.2116,35.0722],[118.2118,35.0721],[118.2249,35.0709],[118.2245,35.0689],[118.2245,35.0688],[118.2245,35.0687],[118.2244,35.0687],[118.2244,35.0686],[118.2244,35.0685],[118.2244,35.0684],[118.2244,35.0683],[118.2244,35.0682],[118.2244,35.0681],[118.2243,35.068],[118.2243,35.0679],[118.2243,35.0678],[118.2243,35.0677],[118.2243,35.0676],[118.2243,35.0675],[118.2242,35.0674],[118.2242,35.0673],[118.2242,35.0672],[118.2242,35.0671],[118.2242,35.0671],[118.2242,35.067],[118.2242,35.0669],[118.2241,35.0668],[118.2241,35.0667],[118.2241,35.0666],[118.2241,35.0665],[118.2241,35.0663],[118.2241,35.0662],[118.2241,35.0661],[118.224,35.066],[118.224,35.0659],[118.224,35.0658],[118.224,35.0657],[118.224,35.0656],[118.224,35.0655],[118.224,35.0654],[118.2239,35.0653],[118.2239,35.0653],[118.2239,35.0652],[118.2239,35.0651],[118.2239,35.065],[118.2239,35.0649],[118.2238,35.0648],[118.2238,35.0647],[118.2238,35.0646],[118.2238,35.0645],[118.2238,35.0644],[118.2238,35.0643],[118.2238,35.0642],[118.2237,35.0641],[118.2237,35.064],[118.2237,35.0639],[118.2237,35.0638],[118.2237,35.0637],[118.2236,35.0636],[118.2236,35.0635],[118.2236,35.0634],[118.2236,35.0633],[118.2236,35.0632],[118.2236,35.0631],[118.2235,35.063],[118.2235,35.0629],[118.2235,35.0628],[118.2235,35.0627],[118.2235,35.0626],[118.2234,35.0625],[118.2234,35.0624],[118.2234,35.0623],[118.2234,35.0622],[118.2233,35.0621],[118.2233,35.062],[118.2233,35.0619],[118.2233,35.0618],[118.2232,35.0617],[118.2232,35.0616],[118.2232,35.0615],[118.2232,35.0614],[118.2231,35.0613],[118.2231,35.0612],[118.2231,35.0611],[118.2231,35.061],[118.223,35.0609],[118.223,35.0608],[118.223,35.0607],[118.223,35.0606],[118.2229,35.0605],[118.2229,35.0604],[118.2229,35.0603],[118.2228,35.0602],[118.2228,35.0601],[118.2228,35.06],[118.2227,35.0599],[118.2227,35.0598],[118.2227,35.0597],[118.2226,35.0596],[118.2226,35.0595],[118.2226,35.0594],[118.2225,35.0593],[118.2225,35.0592],[118.2224,35.0591],[118.2224,35.0589],[118.2224,35.0588],[118.2223,35.0587],[118.2223,35.0586],[118.2222,35.0585],[118.2222,35.0584],[118.2222,35.0583],[118.2221,35.0582],[118.2221,35.0581],[118.222,35.058],[118.222,35.0579],[118.2219,35.0578],[118.2219,35.0577],[118.2218,35.0576],[118.2218,35.0575],[118.2217,35.0573],[118.2217,35.0572],[118.2216,35.0571],[118.2216,35.057],[118.2215,35.0569],[118.2215,35.0568],[118.2214,35.0567],[118.2214,35.0566],[118.2213,35.0565],[118.2212,35.0564],[118.2212,35.0562],[118.2211,35.0561],[118.2202,35.0537],[118.2202,35.0537],[118.2201,35.0537],[118.22,35.0536],[118.2199,35.0536],[118.2199,35.0536],[118.2198,35.0535],[118.2197,35.0535],[118.2196,35.0535],[118.2196,35.0534],[118.2195,35.0534],[118.2194,35.0534],[118.2193,35.0533],[118.2193,35.0533],[118.2192,35.0533],[118.2191,35.0533],[118.219,35.0532],[118.2189,35.0532],[118.2189,35.0532],[118.2188,35.0531],[118.2187,35.0531],[118.2186,35.0531],[118.2185,35.0531],[118.2185,35.053],[118.2184,35.053],[118.2183,35.053],[118.2182,35.053],[118.2181,35.053],[118.218,35.0529],[118.218,35.0529],[118.2179,35.0529],[118.2178,35.0529],[118.2177,35.0529],[118.2176,35.0529],[118.2175,35.0528],[118.2175,35.0528],[118.2174,35.0528],[118.2173,35.0528],[118.2172,35.0528],[118.2171,35.0528],[118.217,35.0528],[118.217,35.0528],[118.2169,35.0528],[118.2168,35.0528],[118.2167,35.0527],[118.2166,35.0527],[118.2165,35.0527],[118.2164,35.0527],[118.2164,35.0527],[118.2163,35.0527],[118.2162,35.0527],[118.2161,35.0527],[118.216,35.0527],[118.2159,35.0527],[118.2158,35.0527],[118.2158,35.0527],[118.2157,35.0527],[118.2156,35.0527],[118.2155,35.0527],[118.2154,35.0527],[118.2153,35.0527],[118.2152,35.0527],[118.2152,35.0528],[118.2151,35.0528],[118.215,35.0528],[118.2149,35.0528],[118.2145,35.0528],[118.2143,35.0493],[118.2104,35.0493],[118.2103,35.0573],[118.2056,35.0573],[118.203,35.0572],[118.2001,35.0575],[118.1977,35.0583],[118.196,35.0589],[118.1938,35.0591],[118.191,35.059],[118.1876,35.0586],[118.1865,35.0718]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"生物医药产业园","bbox":[118.1865,35.0493,118.2249,35.0726]}},{"type":"Feature","id":"yqxz.6","geometry":{"type":"MultiPolygon","coordinates":[[[[118.229,34.981],[118.229,34.9808],[118.2286,34.9712],[118.2152,34.9713],[118.2158,34.9769],[118.2162,34.9811],[118.2162,34.9815],[118.229,34.981]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"智慧生态村","bbox":[118.2152,34.9712,118.229,34.9815]}},{"type":"Feature","id":"yqxz.7","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2162,34.982],[118.2163,34.9837],[118.2168,34.9868],[118.2312,34.9863],[118.2313,34.9833],[118.2291,34.9834],[118.229,34.9814],[118.2162,34.982]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"创新云谷","bbox":[118.2162,34.9814,118.2313,34.9868]}},{"type":"Feature","id":"yqxz.8","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2168,34.9871],[118.2177,34.9899],[118.2191,34.9914],[118.2204,34.9908],[118.2329,34.9907],[118.2328,34.9903],[118.2326,34.9866],[118.2312,34.9866],[118.2168,34.9871]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"创新云谷","bbox":[118.2168,34.9866,118.2329,34.9914]}},{"type":"Feature","id":"yqxz.9","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2194,34.9919],[118.2219,34.9948],[118.2219,34.9948],[118.222,34.9948],[118.222,34.9949],[118.222,34.9949],[118.222,34.9949],[118.222,34.9949],[118.2221,34.995],[118.2221,34.995],[118.2221,34.995],[118.2221,34.9951],[118.2221,34.9951],[118.2222,34.9951],[118.2222,34.9951],[118.2222,34.9952],[118.2222,34.9952],[118.2222,34.9952],[118.2223,34.9952],[118.2223,34.9953],[118.2223,34.9953],[118.2223,34.9953],[118.2223,34.9953],[118.2223,34.9954],[118.2224,34.9954],[118.2224,34.9954],[118.2224,34.9954],[118.2224,34.9955],[118.2224,34.9955],[118.2225,34.9955],[118.2225,34.9955],[118.2225,34.9956],[118.2225,34.9956],[118.2225,34.9956],[118.2225,34.9956],[118.2226,34.9957],[118.2226,34.9957],[118.2226,34.9957],[118.2226,34.9957],[118.2226,34.9958],[118.2226,34.9958],[118.2227,34.9958],[118.2227,34.9958],[118.2227,34.9958],[118.2227,34.9959],[118.2227,34.9959],[118.2227,34.9959],[118.2228,34.9959],[118.2228,34.996],[118.2228,34.996],[118.2228,34.996],[118.2228,34.996],[118.2228,34.9961],[118.2228,34.9961],[118.2229,34.9961],[118.2229,34.9961],[118.2229,34.9961],[118.2229,34.9962],[118.2229,34.9962],[118.2229,34.9962],[118.2229,34.9962],[118.223,34.9963],[118.223,34.9963],[118.223,34.9963],[118.223,34.9963],[118.223,34.9963],[118.223,34.9964],[118.223,34.9964],[118.2231,34.9964],[118.2231,34.9964],[118.2231,34.9964],[118.2231,34.9965],[118.2231,34.9965],[118.2231,34.9965],[118.2231,34.9965],[118.2231,34.9966],[118.2232,34.9966],[118.2232,34.9966],[118.2232,34.9967],[118.2232,34.9967],[118.2233,34.9968],[118.2233,34.9968],[118.2233,34.9968],[118.2233,34.9969],[118.2233,34.9969],[118.2234,34.9969],[118.2234,34.997],[118.2234,34.997],[118.2234,34.9971],[118.2235,34.9971],[118.2235,34.9971],[118.2235,34.9972],[118.2235,34.9972],[118.2235,34.9972],[118.2235,34.9973],[118.2236,34.9973],[118.2236,34.9974],[118.2236,34.9974],[118.2236,34.9974],[118.2236,34.9975],[118.2236,34.9975],[118.2237,34.9975],[118.2237,34.9976],[118.2237,34.9976],[118.2237,34.9976],[118.2237,34.9977],[118.2237,34.9977],[118.2238,34.9977],[118.2238,34.9978],[118.2238,34.9978],[118.2238,34.9978],[118.2238,34.9979],[118.2238,34.9979],[118.2238,34.9979],[118.2238,34.9979],[118.2239,34.998],[118.2239,34.998],[118.2239,34.998],[118.2239,34.9981],[118.2239,34.9981],[118.2239,34.9981],[118.2239,34.9982],[118.2239,34.9982],[118.224,34.9982],[118.224,34.9982],[118.224,34.9983],[118.224,34.9983],[118.224,34.9983],[118.224,34.9984],[118.224,34.9984],[118.224,34.9984],[118.224,34.9984],[118.224,34.9985],[118.2241,34.9985],[118.2241,34.9985],[118.2241,34.9986],[118.2241,34.9986],[118.2241,34.9986],[118.2241,34.9986],[118.2241,34.9987],[118.2241,34.9987],[118.2241,34.9987],[118.2241,34.9987],[118.2241,34.9988],[118.2241,34.9988],[118.2242,34.9988],[118.2242,34.9988],[118.2242,34.9989],[118.2242,34.9989],[118.2242,34.9989],[118.2242,34.9989],[118.2242,34.999],[118.2242,34.999],[118.2242,34.999],[118.2242,34.999],[118.2242,34.9991],[118.2242,34.9991],[118.2243,34.9991],[118.2243,34.9992],[118.2243,34.9992],[118.2243,34.9992],[118.2243,34.9992],[118.2243,34.9993],[118.2243,34.9993],[118.2243,34.9993],[118.2243,34.9993],[118.225,35.002],[118.2334,35.0009],[118.2329,34.9911],[118.2211,34.9912],[118.2194,34.9919]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"数字科技港","bbox":[118.2194,34.9911,118.2334,35.002]}},{"type":"Feature","id":"yqxz.10","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2259,35.0212],[118.2266,35.027],[118.2267,35.0271],[118.2267,35.0271],[118.2267,35.0272],[118.2267,35.0273],[118.2267,35.0273],[118.2267,35.0274],[118.2267,35.0275],[118.2268,35.0275],[118.2268,35.0276],[118.2268,35.0277],[118.2268,35.0278],[118.2268,35.0278],[118.2268,35.0279],[118.2268,35.0279],[118.2268,35.028],[118.2268,35.028],[118.2268,35.0281],[118.2269,35.0281],[118.2269,35.0281],[118.2269,35.0282],[118.2269,35.0282],[118.2269,35.0283],[118.2269,35.0283],[118.2269,35.0284],[118.2269,35.0284],[118.2269,35.0285],[118.2269,35.0285],[118.2269,35.0286],[118.2269,35.0286],[118.2269,35.0287],[118.227,35.0287],[118.227,35.0288],[118.227,35.0288],[118.227,35.0289],[118.227,35.0289],[118.227,35.029],[118.227,35.029],[118.227,35.0291],[118.227,35.0291],[118.227,35.0292],[118.227,35.0292],[118.227,35.0293],[118.227,35.0293],[118.2271,35.0294],[118.2271,35.0294],[118.2271,35.0295],[118.2271,35.0295],[118.2271,35.0296],[118.2271,35.0298],[118.2271,35.0299],[118.2271,35.0299],[118.2272,35.03],[118.2272,35.03],[118.2272,35.0301],[118.2272,35.0301],[118.2272,35.0302],[118.2272,35.0302],[118.2272,35.0303],[118.2272,35.0304],[118.2272,35.0304],[118.2272,35.0305],[118.2272,35.0305],[118.2272,35.0306],[118.2273,35.0306],[118.2273,35.0307],[118.2273,35.0307],[118.2273,35.0308],[118.2273,35.0308],[118.2273,35.0309],[118.2273,35.0309],[118.2273,35.031],[118.2273,35.031],[118.2273,35.0311],[118.2273,35.0311],[118.2273,35.0312],[118.2274,35.0312],[118.2274,35.0313],[118.2274,35.0313],[118.2274,35.0314],[118.2274,35.0314],[118.2274,35.0315],[118.2274,35.0315],[118.2274,35.0316],[118.2274,35.0316],[118.2274,35.0316],[118.2274,35.0317],[118.2274,35.0317],[118.2274,35.0318],[118.2275,35.0318],[118.2275,35.0319],[118.2275,35.0319],[118.2275,35.032],[118.2275,35.032],[118.2275,35.032],[118.2275,35.0321],[118.2275,35.0321],[118.2275,35.0322],[118.2275,35.0323],[118.2276,35.0324],[118.2276,35.0324],[118.2276,35.0325],[118.2276,35.0326],[118.2276,35.0327],[118.2276,35.0327],[118.2352,35.0323],[118.246,35.0316],[118.2512,35.0314],[118.2501,35.0182],[118.2259,35.0212]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"创智蓝湾","bbox":[118.2259,35.0182,118.2512,35.0327]}},{"type":"Feature","id":"yqxz.11","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2512,35.0379],[118.2512,35.0373],[118.2512,35.0317],[118.2455,35.0319],[118.2277,35.033],[118.2294,35.0432],[118.2346,35.0431],[118.2345,35.0425],[118.2345,35.0424],[118.2345,35.0424],[118.2345,35.0423],[118.2345,35.0422],[118.2345,35.0422],[118.2345,35.0421],[118.2345,35.042],[118.2345,35.042],[118.2345,35.0419],[118.2345,35.0419],[118.2346,35.0418],[118.2346,35.0417],[118.2346,35.0417],[118.2346,35.0416],[118.2346,35.0416],[118.2346,35.0415],[118.2346,35.0414],[118.2346,35.0414],[118.2347,35.0413],[118.2347,35.0413],[118.2347,35.0412],[118.2347,35.0412],[118.2347,35.0411],[118.2348,35.041],[118.2348,35.041],[118.2348,35.0409],[118.2348,35.0409],[118.2349,35.0408],[118.2349,35.0408],[118.2349,35.0407],[118.235,35.0406],[118.235,35.0406],[118.235,35.0405],[118.2351,35.0405],[118.2351,35.0404],[118.2351,35.0404],[118.2352,35.0403],[118.2352,35.0403],[118.2352,35.0402],[118.2353,35.0402],[118.2353,35.0401],[118.2354,35.0401],[118.2354,35.04],[118.2355,35.04],[118.2355,35.0399],[118.2355,35.0399],[118.2356,35.0398],[118.2356,35.0398],[118.2357,35.0397],[118.2357,35.0397],[118.2358,35.0397],[118.2358,35.0396],[118.2359,35.0396],[118.236,35.0395],[118.236,35.0395],[118.2361,35.0394],[118.2361,35.0394],[118.2362,35.0394],[118.2362,35.0393],[118.2363,35.0393],[118.2364,35.0393],[118.2364,35.0392],[118.2365,35.0392],[118.2365,35.0391],[118.2365,35.0391],[118.2398,35.0397],[118.2398,35.0398],[118.2399,35.0398],[118.24,35.0398],[118.2401,35.0398],[118.2402,35.0398],[118.2403,35.0398],[118.2403,35.0398],[118.2404,35.0397],[118.2405,35.0397],[118.2406,35.0397],[118.2406,35.0397],[118.2407,35.0396],[118.2408,35.0396],[118.2408,35.0396],[118.2409,35.0395],[118.241,35.0395],[118.241,35.0394],[118.2411,35.0394],[118.2411,35.0393],[118.2412,35.0393],[118.2412,35.0392],[118.2412,35.0391],[118.2413,35.0391],[118.2413,35.039],[118.2414,35.0389],[118.2414,35.0389],[118.2414,35.0388],[118.2415,35.0388],[118.2415,35.0387],[118.2415,35.0387],[118.2415,35.0386],[118.2415,35.0386],[118.2415,35.0386],[118.2415,35.0385],[118.2416,35.0385],[118.2416,35.0384],[118.2416,35.0384],[118.2416,35.0384],[118.2416,35.0383],[118.2422,35.0359],[118.2448,35.036],[118.2449,35.036],[118.245,35.036],[118.2451,35.036],[118.2452,35.036],[118.2453,35.036],[118.2453,35.0361],[118.2454,35.0361],[118.2455,35.0361],[118.2456,35.0361],[118.2457,35.0361],[118.2457,35.0361],[118.2458,35.0361],[118.2459,35.0362],[118.246,35.0362],[118.246,35.0362],[118.2461,35.0362],[118.2462,35.0362],[118.2463,35.0362],[118.2463,35.0363],[118.2464,35.0363],[118.2465,35.0363],[118.2466,35.0363],[118.2466,35.0363],[118.2467,35.0363],[118.2468,35.0364],[118.2469,35.0364],[118.2469,35.0364],[118.247,35.0364],[118.2471,35.0364],[118.2471,35.0365],[118.2472,35.0365],[118.2473,35.0365],[118.2474,35.0365],[118.2474,35.0366],[118.2475,35.0366],[118.2476,35.0366],[118.2477,35.0366],[118.2477,35.0366],[118.2478,35.0367],[118.2479,35.0367],[118.248,35.0367],[118.2481,35.0367],[118.2481,35.0368],[118.2482,35.0368],[118.2483,35.0368],[118.2484,35.0369],[118.2485,35.0369],[118.2485,35.0369],[118.2486,35.0369],[118.2487,35.037],[118.2488,35.037],[118.2488,35.037],[118.2489,35.037],[118.2493,35.0372],[118.2493,35.0372],[118.2494,35.0372],[118.2494,35.0372],[118.2494,35.0372],[118.2495,35.0372],[118.2495,35.0372],[118.2496,35.0373],[118.2496,35.0373],[118.2497,35.0373],[118.2497,35.0373],[118.2498,35.0373],[118.2498,35.0374],[118.2499,35.0374],[118.2499,35.0374],[118.25,35.0374],[118.2501,35.0374],[118.2512,35.0379]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"电子商务经济圈","bbox":[118.2277,35.0317,118.2512,35.0432]}},{"type":"Feature","id":"yqxz.12","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2433,35.0478],[118.2419,35.0463],[118.2418,35.0463],[118.2418,35.0463],[118.2418,35.0463],[118.2418,35.0463],[118.2418,35.0463],[118.2417,35.0462],[118.2417,35.0462],[118.2417,35.0462],[118.2416,35.0461],[118.2416,35.0461],[118.2416,35.0461],[118.2416,35.046],[118.2415,35.046],[118.2415,35.0459],[118.2415,35.0459],[118.2415,35.0458],[118.2415,35.0458],[118.2415,35.0458],[118.2415,35.0457],[118.2415,35.0457],[118.2415,35.0456],[118.2415,35.0456],[118.2415,35.0455],[118.2415,35.0455],[118.2415,35.0454],[118.2415,35.0454],[118.2415,35.0454],[118.2415,35.0453],[118.2415,35.0453],[118.2416,35.0452],[118.2416,35.0452],[118.2416,35.0451],[118.2416,35.0451],[118.2416,35.0451],[118.2417,35.0451],[118.2417,35.0451],[118.2417,35.045],[118.2417,35.045],[118.2424,35.0443],[118.2424,35.0443],[118.2424,35.0443],[118.2424,35.0442],[118.2424,35.0442],[118.2424,35.0442],[118.2424,35.0442],[118.2425,35.0442],[118.2425,35.0441],[118.2425,35.0441],[118.2425,35.0441],[118.2425,35.0441],[118.2425,35.044],[118.2425,35.044],[118.2425,35.044],[118.2426,35.044],[118.2426,35.0439],[118.2426,35.0439],[118.2426,35.0439],[118.2426,35.0439],[118.2426,35.0438],[118.2426,35.0438],[118.2426,35.0438],[118.2426,35.0438],[118.2426,35.0438],[118.2426,35.0437],[118.2426,35.0437],[118.2426,35.0437],[118.2426,35.0437],[118.2426,35.0436],[118.2427,35.0436],[118.2427,35.0436],[118.2427,35.0436],[118.2427,35.0435],[118.2427,35.0435],[118.2427,35.0435],[118.2427,35.0435],[118.2427,35.0434],[118.2427,35.0434],[118.2427,35.0434],[118.2427,35.0434],[118.2427,35.0433],[118.2427,35.0433],[118.2427,35.0433],[118.2427,35.0433],[118.2427,35.0432],[118.2427,35.0432],[118.2427,35.0432],[118.2427,35.0432],[118.2426,35.0431],[118.2426,35.0431],[118.2426,35.0431],[118.2426,35.0431],[118.2426,35.043],[118.2426,35.043],[118.2426,35.043],[118.2426,35.043],[118.2426,35.0429],[118.2426,35.0429],[118.2426,35.0429],[118.2426,35.0429],[118.2426,35.0428],[118.2426,35.0428],[118.2425,35.0428],[118.2425,35.0428],[118.2423,35.0422],[118.2423,35.0422],[118.2423,35.0422],[118.2422,35.0422],[118.2422,35.0421],[118.2422,35.0421],[118.2422,35.0421],[118.2421,35.042],[118.2421,35.042],[118.2421,35.042],[118.242,35.0419],[118.242,35.0419],[118.242,35.0419],[118.242,35.0419],[118.2419,35.0418],[118.2419,35.0418],[118.2419,35.0418],[118.2418,35.0417],[118.2418,35.0417],[118.2418,35.0417],[118.2417,35.0417],[118.2417,35.0416],[118.2417,35.0416],[118.2416,35.0416],[118.2416,35.0416],[118.2416,35.0416],[118.2415,35.0415],[118.2415,35.0415],[118.2415,35.0415],[118.2414,35.0415],[118.2414,35.0414],[118.2414,35.0414],[118.2413,35.0414],[118.2413,35.0414],[118.2412,35.0414],[118.2412,35.0413],[118.2412,35.0413],[118.2411,35.0413],[118.2411,35.0413],[118.241,35.0413],[118.241,35.0413],[118.241,35.0412],[118.2409,35.0412],[118.2409,35.0412],[118.2408,35.0412],[118.2408,35.0412],[118.2407,35.0412],[118.2407,35.0411],[118.2406,35.0411],[118.2406,35.0411],[118.2406,35.0411],[118.2405,35.0411],[118.2405,35.0411],[118.2404,35.0411],[118.2404,35.041],[118.2403,35.041],[118.2403,35.041],[118.2402,35.041],[118.2402,35.041],[118.2401,35.041],[118.24,35.041],[118.24,35.041],[118.2399,35.041],[118.2399,35.041],[118.2399,35.0409],[118.2399,35.0409],[118.2398,35.0409],[118.2376,35.0408],[118.2376,35.0408],[118.2376,35.0409],[118.2375,35.0409],[118.2375,35.0409],[118.2374,35.0409],[118.2374,35.0409],[118.2374,35.0409],[118.2373,35.0409],[118.2373,35.0409],[118.2373,35.0409],[118.2372,35.041],[118.2371,35.041],[118.2371,35.041],[118.237,35.041],[118.237,35.041],[118.237,35.041],[118.2369,35.041],[118.2369,35.041],[118.2369,35.041],[118.2368,35.041],[118.2368,35.0411],[118.2368,35.0411],[118.2367,35.0411],[118.2367,35.0411],[118.2367,35.0411],[118.2366,35.0411],[118.2366,35.0411],[118.2366,35.0411],[118.2365,35.0411],[118.2365,35.0411],[118.2365,35.0411],[118.2364,35.0411],[118.2364,35.0412],[118.2364,35.0412],[118.2364,35.0412],[118.2363,35.0412],[118.2363,35.0412],[118.2363,35.0412],[118.2362,35.0412],[118.2362,35.0412],[118.2362,35.0412],[118.2362,35.0412],[118.2361,35.0412],[118.2361,35.0412],[118.2361,35.0413],[118.2361,35.0413],[118.236,35.0413],[118.2359,35.0413],[118.2359,35.0413],[118.2359,35.0413],[118.2358,35.0414],[118.2358,35.0414],[118.2357,35.0414],[118.2357,35.0414],[118.2356,35.0414],[118.2356,35.0414],[118.2355,35.0415],[118.2355,35.0415],[118.2355,35.0415],[118.2354,35.0415],[118.2354,35.0415],[118.2353,35.0416],[118.2353,35.0416],[118.2353,35.0416],[118.2352,35.0416],[118.2352,35.0416],[118.2352,35.0417],[118.2351,35.0417],[118.2351,35.0417],[118.2351,35.0417],[118.235,35.0418],[118.235,35.0418],[118.235,35.0418],[118.235,35.0418],[118.2349,35.0419],[118.2349,35.0419],[118.2349,35.0419],[118.2349,35.0419],[118.2348,35.042],[118.2348,35.042],[118.2348,35.042],[118.2348,35.0421],[118.2348,35.0421],[118.2347,35.0421],[118.2347,35.0422],[118.2347,35.0422],[118.2346,35.0433],[118.2293,35.0433],[118.2301,35.049],[118.2434,35.0486],[118.2433,35.0478]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"会展中心","bbox":[118.2293,35.0408,118.2434,35.049]}},{"type":"Feature","id":"yqxz.13","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2441,35.0486],[118.2513,35.0484],[118.2513,35.0481],[118.251,35.0383],[118.2473,35.037],[118.2472,35.037],[118.2472,35.0369],[118.2471,35.0369],[118.2471,35.0369],[118.247,35.0369],[118.247,35.0369],[118.2469,35.0369],[118.2469,35.0369],[118.2468,35.0368],[118.2468,35.0368],[118.2467,35.0368],[118.2466,35.0368],[118.2466,35.0368],[118.2465,35.0368],[118.2465,35.0368],[118.2464,35.0368],[118.2431,35.0364],[118.2437,35.0381],[118.2446,35.0391],[118.2447,35.0391],[118.2447,35.0392],[118.2447,35.0392],[118.2448,35.0392],[118.2448,35.0393],[118.2448,35.0393],[118.2448,35.0394],[118.2449,35.0394],[118.2449,35.0394],[118.2449,35.0395],[118.2449,35.0395],[118.2449,35.0396],[118.2449,35.0396],[118.2449,35.0397],[118.245,35.0397],[118.245,35.0398],[118.245,35.0398],[118.245,35.0398],[118.245,35.0399],[118.245,35.0399],[118.245,35.04],[118.2449,35.04],[118.2449,35.0401],[118.2449,35.0401],[118.2449,35.0401],[118.2449,35.0402],[118.2449,35.0402],[118.2449,35.0403],[118.2448,35.0403],[118.2448,35.0404],[118.2448,35.0404],[118.2448,35.0404],[118.2446,35.0405],[118.2446,35.0405],[118.2446,35.0406],[118.2445,35.0406],[118.2445,35.0406],[118.2445,35.0406],[118.2445,35.0407],[118.2444,35.0407],[118.2444,35.0407],[118.2444,35.0407],[118.2444,35.0408],[118.2443,35.0408],[118.2443,35.0408],[118.2443,35.0409],[118.2443,35.0409],[118.2443,35.0409],[118.2443,35.041],[118.2443,35.041],[118.2443,35.041],[118.2443,35.0411],[118.2442,35.0411],[118.2442,35.0411],[118.2442,35.0412],[118.2442,35.0412],[118.2442,35.0412],[118.2442,35.0413],[118.2443,35.0413],[118.2443,35.0413],[118.2443,35.0414],[118.2443,35.0414],[118.2443,35.0414],[118.2443,35.0415],[118.2443,35.0415],[118.2449,35.0418],[118.2449,35.0418],[118.2449,35.0419],[118.2449,35.0419],[118.245,35.0419],[118.245,35.0419],[118.245,35.0419],[118.245,35.042],[118.2451,35.042],[118.2451,35.042],[118.2451,35.042],[118.2451,35.042],[118.2452,35.0421],[118.2452,35.0421],[118.2452,35.0421],[118.2452,35.0421],[118.2452,35.0421],[118.2453,35.0422],[118.2453,35.0422],[118.2453,35.0422],[118.2453,35.0422],[118.2453,35.0423],[118.2453,35.0423],[118.2453,35.0423],[118.2454,35.0423],[118.2454,35.0424],[118.2454,35.0424],[118.2454,35.0424],[118.2454,35.0424],[118.2454,35.0425],[118.2454,35.0425],[118.2454,35.0425],[118.2454,35.0426],[118.2455,35.0426],[118.2455,35.0426],[118.2455,35.0426],[118.2455,35.0427],[118.2455,35.0427],[118.2455,35.0427],[118.2455,35.0427],[118.2455,35.0428],[118.2455,35.0428],[118.2455,35.0428],[118.2455,35.0428],[118.2455,35.0429],[118.2455,35.0429],[118.2455,35.0429],[118.2455,35.043],[118.2455,35.043],[118.2455,35.043],[118.2455,35.043],[118.2455,35.0431],[118.2455,35.0431],[118.2454,35.0431],[118.2454,35.0432],[118.2454,35.0432],[118.2454,35.0432],[118.2454,35.0432],[118.2454,35.0433],[118.2454,35.0433],[118.2454,35.0433],[118.2454,35.0433],[118.2453,35.0434],[118.2453,35.0434],[118.2453,35.0434],[118.2454,35.0436],[118.2459,35.0441],[118.246,35.0441],[118.246,35.0442],[118.246,35.0442],[118.246,35.0442],[118.2461,35.0443],[118.2461,35.0443],[118.2461,35.0444],[118.2461,35.0444],[118.2461,35.0444],[118.2462,35.0445],[118.2462,35.0445],[118.2462,35.0445],[118.2462,35.0446],[118.2462,35.0446],[118.2462,35.0446],[118.2462,35.0447],[118.2462,35.0447],[118.2463,35.0447],[118.2463,35.0448],[118.2463,35.0448],[118.2463,35.0448],[118.2463,35.0448],[118.2463,35.0449],[118.2463,35.0449],[118.2463,35.0449],[118.2463,35.045],[118.2463,35.045],[118.2463,35.045],[118.2463,35.045],[118.2463,35.0451],[118.2463,35.0451],[118.2462,35.0451],[118.2462,35.0451],[118.2462,35.0452],[118.2462,35.0452],[118.2462,35.0452],[118.2462,35.0452],[118.2462,35.0453],[118.2462,35.0453],[118.2462,35.0453],[118.2461,35.0453],[118.2461,35.0454],[118.2461,35.0454],[118.2461,35.0454],[118.2461,35.0455],[118.246,35.0455],[118.246,35.0455],[118.246,35.0455],[118.246,35.0456],[118.246,35.0456],[118.2459,35.0456],[118.2459,35.0457],[118.2459,35.0457],[118.2459,35.0457],[118.2458,35.0458],[118.2458,35.0458],[118.2458,35.0458],[118.2457,35.0459],[118.2457,35.0459],[118.2457,35.0459],[118.2456,35.046],[118.2456,35.046],[118.2456,35.0461],[118.2455,35.0461],[118.2455,35.0461],[118.244,35.0478],[118.2441,35.0486]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"公共服务","bbox":[118.2431,35.0364,118.2513,35.0486]}},{"type":"Feature","id":"yqxz.14","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2302,35.0495],[118.2328,35.0705],[118.2521,35.0695],[118.2521,35.0662],[118.252,35.0629],[118.2514,35.049],[118.2302,35.0495]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"创智蓝湾","bbox":[118.2302,35.049,118.2521,35.0705]}},{"type":"Feature","id":"yqxz.15","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1907,35.039],[118.1869,35.0404],[118.1834,35.0409],[118.1834,35.0409],[118.1833,35.0409],[118.1833,35.0409],[118.1832,35.0409],[118.1832,35.041],[118.1831,35.041],[118.1831,35.041],[118.183,35.041],[118.183,35.041],[118.1829,35.0411],[118.1829,35.0411],[118.1828,35.0411],[118.1827,35.0411],[118.1827,35.0412],[118.1826,35.0412],[118.1826,35.0412],[118.1825,35.0412],[118.1825,35.0413],[118.1824,35.0413],[118.1824,35.0413],[118.1823,35.0414],[118.1823,35.0414],[118.1822,35.0414],[118.1822,35.0414],[118.1821,35.0415],[118.1821,35.0415],[118.182,35.0415],[118.182,35.0416],[118.182,35.0416],[118.1819,35.0416],[118.1819,35.0416],[118.1818,35.0417],[118.1818,35.0417],[118.1817,35.0417],[118.1817,35.0418],[118.1816,35.0418],[118.1816,35.0418],[118.1815,35.0419],[118.1815,35.0419],[118.1814,35.0419],[118.1814,35.042],[118.1814,35.042],[118.1813,35.042],[118.1813,35.0421],[118.1812,35.0421],[118.1812,35.0421],[118.1811,35.0422],[118.1811,35.0422],[118.181,35.0422],[118.181,35.0423],[118.181,35.0423],[118.1809,35.0423],[118.1809,35.0424],[118.1808,35.0424],[118.1808,35.0424],[118.1808,35.0425],[118.1807,35.0425],[118.1807,35.0426],[118.1806,35.0426],[118.1806,35.0426],[118.1806,35.0427],[118.1805,35.0427],[118.1805,35.0427],[118.1804,35.0428],[118.1804,35.0428],[118.1804,35.0428],[118.1803,35.0429],[118.1803,35.0429],[118.1803,35.0429],[118.1802,35.043],[118.1802,35.043],[118.1802,35.0431],[118.1801,35.0431],[118.1801,35.0431],[118.1801,35.0432],[118.18,35.0432],[118.18,35.0432],[118.18,35.0433],[118.1799,35.0433],[118.1799,35.0433],[118.1799,35.0434],[118.1798,35.0434],[118.1798,35.0435],[118.1798,35.0435],[118.1797,35.0435],[118.1797,35.0436],[118.1797,35.0436],[118.1796,35.0436],[118.1796,35.0437],[118.1796,35.0437],[118.1796,35.0437],[118.1795,35.0438],[118.1795,35.0438],[118.1795,35.0438],[118.1794,35.0439],[118.1794,35.0439],[118.1794,35.044],[118.1793,35.044],[118.1793,35.0441],[118.1792,35.0442],[118.1792,35.0442],[118.1791,35.0443],[118.1791,35.0444],[118.1791,35.0444],[118.179,35.0445],[118.179,35.0445],[118.1789,35.0446],[118.1789,35.0447],[118.1789,35.0447],[118.1788,35.0448],[118.1788,35.0448],[118.1788,35.0449],[118.1776,35.0469],[118.1775,35.0469],[118.1775,35.047],[118.1775,35.047],[118.1775,35.0471],[118.1774,35.0471],[118.1774,35.0471],[118.1774,35.0472],[118.1774,35.0472],[118.1773,35.0473],[118.1773,35.0474],[118.1773,35.0474],[118.1773,35.0475],[118.1772,35.0475],[118.1772,35.0476],[118.1772,35.0476],[118.1772,35.0477],[118.1771,35.0478],[118.1771,35.0478],[118.1771,35.0479],[118.1771,35.0479],[118.1771,35.048],[118.177,35.0481],[118.177,35.0481],[118.177,35.0482],[118.177,35.0483],[118.1769,35.0484],[118.1769,35.0484],[118.1769,35.0485],[118.1769,35.0486],[118.1769,35.0486],[118.1768,35.0487],[118.1768,35.0488],[118.1768,35.0488],[118.1768,35.0489],[118.1768,35.049],[118.1767,35.049],[118.1767,35.0491],[118.1767,35.0492],[118.1767,35.0492],[118.1767,35.0493],[118.1767,35.0494],[118.1766,35.0494],[118.1766,35.0495],[118.1766,35.0496],[118.1766,35.0496],[118.1766,35.0497],[118.1766,35.0498],[118.1766,35.0498],[118.1765,35.0499],[118.1765,35.0499],[118.1765,35.05],[118.1765,35.0501],[118.1765,35.0501],[118.1765,35.0502],[118.1765,35.0502],[118.1765,35.0503],[118.1765,35.0503],[118.1765,35.0503],[118.1764,35.0504],[118.1764,35.0504],[118.1764,35.0505],[118.1764,35.0506],[118.1757,35.0561],[118.1894,35.0586],[118.1932,35.0589],[118.1932,35.0589],[118.1933,35.0589],[118.1934,35.0589],[118.1935,35.0589],[118.1936,35.0589],[118.1937,35.0589],[118.1938,35.0589],[118.1939,35.0589],[118.194,35.0589],[118.194,35.0589],[118.1941,35.0589],[118.1942,35.0589],[118.1943,35.0589],[118.1944,35.0588],[118.1945,35.0588],[118.1946,35.0588],[118.1956,35.0586],[118.1956,35.0586],[118.1957,35.0585],[118.1957,35.0585],[118.1957,35.0584],[118.1957,35.0583],[118.1957,35.0583],[118.1957,35.0582],[118.1957,35.0581],[118.1957,35.0581],[118.1957,35.0581],[118.1957,35.058],[118.1957,35.058],[118.1957,35.0579],[118.1957,35.0579],[118.1957,35.0578],[118.1957,35.0578],[118.1957,35.0577],[118.1957,35.0577],[118.1957,35.0577],[118.1957,35.0576],[118.1957,35.0576],[118.1957,35.0575],[118.1957,35.0575],[118.1957,35.0574],[118.1957,35.0574],[118.1957,35.0573],[118.1957,35.0573],[118.1957,35.0573],[118.1957,35.0572],[118.1958,35.0572],[118.1958,35.0571],[118.1958,35.0571],[118.1958,35.057],[118.1958,35.057],[118.1958,35.057],[118.1958,35.0569],[118.1958,35.0569],[118.1958,35.0568],[118.1958,35.0567],[118.1958,35.0566],[118.1958,35.0566],[118.1958,35.0565],[118.1958,35.0565],[118.1958,35.0564],[118.1958,35.0564],[118.1958,35.0563],[118.197,35.0532],[118.1971,35.0532],[118.1971,35.0531],[118.1971,35.0531],[118.1972,35.053],[118.1972,35.0529],[118.1972,35.0529],[118.1972,35.0528],[118.1973,35.0527],[118.1973,35.0527],[118.1973,35.0526],[118.1973,35.0525],[118.1974,35.0524],[118.1974,35.0523],[118.1974,35.0523],[118.1974,35.0522],[118.1974,35.0522],[118.1974,35.0522],[118.1974,35.0521],[118.1974,35.0521],[118.1974,35.052],[118.1974,35.052],[118.1974,35.0519],[118.1975,35.0519],[118.1975,35.0519],[118.1975,35.0518],[118.1975,35.0518],[118.1975,35.0517],[118.1975,35.0517],[118.1975,35.0517],[118.1975,35.0516],[118.1975,35.0516],[118.1975,35.0515],[118.1975,35.0515],[118.1975,35.0514],[118.1975,35.0514],[118.1975,35.0513],[118.1975,35.0513],[118.1975,35.0513],[118.1975,35.0512],[118.1975,35.0512],[118.1975,35.0511],[118.1975,35.0511],[118.1975,35.051],[118.1975,35.051],[118.1975,35.051],[118.1975,35.0509],[118.1975,35.0509],[118.1975,35.0508],[118.1975,35.0508],[118.1975,35.0507],[118.1975,35.0507],[118.1975,35.0506],[118.1975,35.0506],[118.1975,35.0506],[118.1975,35.0505],[118.1975,35.0505],[118.1975,35.0504],[118.1975,35.0504],[118.1974,35.0503],[118.1974,35.0503],[118.1974,35.0502],[118.1974,35.0502],[118.1974,35.0502],[118.1974,35.0501],[118.1974,35.0501],[118.1974,35.05],[118.1974,35.05],[118.1974,35.0499],[118.1974,35.0499],[118.1974,35.0499],[118.1974,35.0498],[118.1974,35.0498],[118.1973,35.0497],[118.1973,35.0497],[118.1973,35.0497],[118.1973,35.0496],[118.1973,35.0496],[118.1973,35.0495],[118.1973,35.0495],[118.1973,35.0494],[118.1973,35.0494],[118.1973,35.0494],[118.1972,35.0493],[118.1972,35.0493],[118.1972,35.0492],[118.1972,35.0492],[118.1972,35.0491],[118.1972,35.0491],[118.1971,35.049],[118.1971,35.0489],[118.1971,35.0488],[118.197,35.0488],[118.197,35.0487],[118.197,35.0486],[118.197,35.0486],[118.1969,35.0485],[118.1969,35.0484],[118.1969,35.0484],[118.1968,35.0483],[118.1968,35.0483],[118.1959,35.0468],[118.1958,35.0468],[118.1958,35.0467],[118.1957,35.0466],[118.1957,35.0466],[118.1957,35.0466],[118.1956,35.0465],[118.1956,35.0465],[118.1956,35.0464],[118.1955,35.0464],[118.1955,35.0463],[118.1955,35.0463],[118.1954,35.0462],[118.1954,35.0462],[118.1953,35.0461],[118.1953,35.0461],[118.1952,35.046],[118.1952,35.0459],[118.1951,35.0459],[118.195,35.0458],[118.195,35.0458],[118.1949,35.0457],[118.1948,35.0457],[118.1948,35.0456],[118.1947,35.0456],[118.1946,35.0455],[118.1946,35.0455],[118.1945,35.0454],[118.1944,35.0454],[118.1944,35.0454],[118.1944,35.0454],[118.1943,35.0453],[118.1927,35.0439],[118.1927,35.0439],[118.1927,35.0438],[118.1927,35.0438],[118.1926,35.0437],[118.1926,35.0436],[118.1926,35.0436],[118.1925,35.0435],[118.1925,35.0435],[118.1925,35.0434],[118.1925,35.0433],[118.1924,35.0433],[118.1924,35.0432],[118.1924,35.0431],[118.1924,35.0431],[118.1923,35.043],[118.1923,35.0429],[118.1923,35.0429],[118.1922,35.0428],[118.1922,35.0427],[118.1922,35.0427],[118.1922,35.0426],[118.1921,35.0425],[118.1921,35.0425],[118.1921,35.0424],[118.192,35.0423],[118.192,35.0422],[118.192,35.0422],[118.192,35.0421],[118.1919,35.042],[118.1919,35.0419],[118.1919,35.0419],[118.1918,35.0418],[118.1918,35.0418],[118.1918,35.0417],[118.1918,35.0417],[118.1918,35.0416],[118.1918,35.0416],[118.1918,35.0416],[118.1917,35.0415],[118.1916,35.0412],[118.1916,35.0411],[118.1916,35.041],[118.1915,35.041],[118.1915,35.041],[118.1915,35.0409],[118.1915,35.0409],[118.1915,35.0408],[118.1915,35.0408],[118.1914,35.0408],[118.1914,35.0407],[118.1914,35.0407],[118.1914,35.0406],[118.1914,35.0406],[118.1914,35.0405],[118.1913,35.0405],[118.1913,35.0404],[118.1913,35.0404],[118.1913,35.0404],[118.1913,35.0403],[118.1912,35.0403],[118.1912,35.0402],[118.1912,35.0402],[118.1912,35.0401],[118.1912,35.0401],[118.1912,35.04],[118.1911,35.04],[118.1911,35.0399],[118.1911,35.0399],[118.1911,35.0399],[118.1911,35.0398],[118.191,35.0398],[118.191,35.0397],[118.191,35.0397],[118.191,35.0396],[118.191,35.0396],[118.191,35.0395],[118.1909,35.0395],[118.1909,35.0394],[118.1909,35.0394],[118.1909,35.0393],[118.1909,35.0393],[118.1908,35.0392],[118.1908,35.0392],[118.1908,35.0391],[118.1908,35.0391],[118.1907,35.039],[118.1907,35.039],[118.1907,35.039]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"生态科技小镇","bbox":[118.1757,35.039,118.1975,35.0589]}},{"type":"Feature","id":"yqxz.16","geometry":{"type":"MultiPolygon","coordinates":[[[[118.21,35.0334],[118.21,35.033],[118.21,35.033],[118.21,35.033],[118.21,35.0329],[118.21,35.0329],[118.21,35.0329],[118.21,35.0328],[118.21,35.0328],[118.21,35.0327],[118.21,35.0327],[118.21,35.0326],[118.21,35.0326],[118.21,35.0325],[118.21,35.0325],[118.21,35.0325],[118.21,35.0324],[118.21,35.0324],[118.21,35.0324],[118.21,35.0324],[118.21,35.0323],[118.21,35.0323],[118.21,35.0323],[118.21,35.0323],[118.21,35.0322],[118.21,35.0322],[118.21,35.0322],[118.21,35.0322],[118.2099,35.0321],[118.2099,35.0321],[118.2099,35.0321],[118.2099,35.0321],[118.2099,35.032],[118.2099,35.032],[118.2099,35.032],[118.2099,35.032],[118.2099,35.0319],[118.2099,35.0319],[118.2099,35.0319],[118.2099,35.0318],[118.2099,35.0318],[118.2099,35.0318],[118.2099,35.0318],[118.2099,35.0317],[118.2099,35.0317],[118.2099,35.0317],[118.2099,35.0317],[118.2099,35.0316],[118.2099,35.0316],[118.2099,35.0316],[118.2099,35.0315],[118.2098,35.0315],[118.2098,35.0315],[118.2098,35.0315],[118.2098,35.0314],[118.2098,35.0314],[118.2098,35.0314],[118.2098,35.0314],[118.2098,35.0313],[118.2098,35.0313],[118.2098,35.0313],[118.2098,35.0313],[118.2098,35.0312],[118.2098,35.0312],[118.2098,35.0312],[118.2098,35.0311],[118.2098,35.0311],[118.2098,35.0311],[118.2098,35.0311],[118.2097,35.031],[118.2097,35.031],[118.2097,35.031],[118.2097,35.031],[118.2097,35.0309],[118.2097,35.0309],[118.2097,35.0309],[118.2097,35.0309],[118.2097,35.0308],[118.2097,35.0308],[118.2097,35.0308],[118.2097,35.0308],[118.2097,35.0307],[118.2097,35.0307],[118.2097,35.0307],[118.2097,35.0307],[118.2096,35.0306],[118.2096,35.0306],[118.2096,35.0306],[118.2096,35.0306],[118.2096,35.0305],[118.2096,35.0305],[118.2096,35.0305],[118.2096,35.0304],[118.2096,35.0304],[118.2096,35.0303],[118.2095,35.0303],[118.2095,35.0302],[118.2095,35.0302],[118.2095,35.0302],[118.2095,35.0301],[118.2095,35.0301],[118.2095,35.03],[118.2094,35.03],[118.2094,35.03],[118.2081,35.0263],[118.1955,35.027],[118.196,35.0299],[118.196,35.0299],[118.196,35.03],[118.196,35.03],[118.196,35.03],[118.196,35.03],[118.196,35.0301],[118.196,35.0301],[118.196,35.0301],[118.196,35.0302],[118.196,35.0302],[118.196,35.0302],[118.196,35.0302],[118.196,35.0303],[118.196,35.0303],[118.196,35.0303],[118.196,35.0304],[118.196,35.0304],[118.196,35.0304],[118.196,35.0304],[118.1961,35.0305],[118.1961,35.0305],[118.1961,35.0305],[118.1961,35.0306],[118.1961,35.0306],[118.1961,35.0306],[118.1961,35.0306],[118.1961,35.0307],[118.1961,35.0307],[118.1961,35.0307],[118.1961,35.0307],[118.1961,35.0308],[118.1961,35.0308],[118.1961,35.0308],[118.1961,35.0308],[118.1961,35.0309],[118.1961,35.0309],[118.1961,35.0309],[118.1961,35.031],[118.1961,35.031],[118.1961,35.031],[118.1961,35.031],[118.1961,35.0311],[118.1961,35.0311],[118.1961,35.0311],[118.1961,35.0311],[118.1961,35.0312],[118.1961,35.0312],[118.1961,35.0312],[118.1961,35.0312],[118.1961,35.0313],[118.1961,35.0313],[118.1961,35.0313],[118.1961,35.0313],[118.1961,35.0314],[118.1961,35.0314],[118.1961,35.0314],[118.1961,35.0315],[118.1961,35.0315],[118.1961,35.0315],[118.1961,35.0315],[118.1961,35.0316],[118.1961,35.0316],[118.1961,35.0316],[118.1961,35.0316],[118.1961,35.0317],[118.1961,35.0317],[118.1961,35.0317],[118.196,35.0317],[118.196,35.0318],[118.196,35.0318],[118.196,35.0318],[118.196,35.0318],[118.196,35.0319],[118.196,35.0319],[118.196,35.0319],[118.196,35.0319],[118.196,35.032],[118.196,35.032],[118.196,35.032],[118.196,35.032],[118.196,35.0321],[118.196,35.0321],[118.196,35.0321],[118.196,35.0321],[118.196,35.0322],[118.196,35.0322],[118.196,35.0322],[118.196,35.0322],[118.196,35.0323],[118.196,35.0323],[118.1959,35.0323],[118.1959,35.0324],[118.1959,35.0324],[118.1959,35.0324],[118.1959,35.0324],[118.1959,35.0325],[118.1959,35.0325],[118.1959,35.0325],[118.1959,35.0325],[118.1959,35.0326],[118.1959,35.0326],[118.1959,35.0326],[118.1959,35.0326],[118.1959,35.0327],[118.1959,35.0327],[118.1959,35.0327],[118.1958,35.0327],[118.1958,35.0328],[118.1958,35.0328],[118.1958,35.0328],[118.1958,35.0328],[118.1958,35.0329],[118.1958,35.0329],[118.1958,35.0329],[118.1958,35.033],[118.1958,35.033],[118.1958,35.033],[118.1958,35.033],[118.1957,35.0331],[118.1957,35.0331],[118.1957,35.0331],[118.1957,35.0331],[118.1957,35.0332],[118.1957,35.0332],[118.1957,35.0332],[118.1957,35.0333],[118.1957,35.0333],[118.1957,35.0333],[118.21,35.0334]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"西区产城服务中心","bbox":[118.1955,35.0263,118.21,35.0334]}},{"type":"Feature","id":"yqxz.17","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1957,35.0336],[118.1956,35.0337],[118.1956,35.0338],[118.1956,35.0339],[118.1955,35.034],[118.1955,35.034],[118.1954,35.0341],[118.1954,35.0342],[118.1954,35.0343],[118.1953,35.0344],[118.1953,35.0345],[118.1952,35.0346],[118.1952,35.0347],[118.1951,35.0348],[118.1951,35.0349],[118.195,35.0349],[118.195,35.035],[118.1949,35.0351],[118.1949,35.0352],[118.1948,35.0353],[118.1948,35.0354],[118.1947,35.0354],[118.1947,35.0355],[118.1946,35.0356],[118.1945,35.0357],[118.1945,35.0358],[118.1944,35.0359],[118.1943,35.0359],[118.1943,35.036],[118.1942,35.0361],[118.1942,35.0362],[118.1941,35.0363],[118.194,35.0363],[118.1939,35.0364],[118.1939,35.0365],[118.1938,35.0366],[118.1937,35.0366],[118.1937,35.0367],[118.1936,35.0368],[118.1935,35.0369],[118.1934,35.0369],[118.1933,35.037],[118.1933,35.0371],[118.1932,35.0372],[118.1931,35.0372],[118.193,35.0373],[118.1929,35.0374],[118.1928,35.0374],[118.1928,35.0375],[118.1927,35.0376],[118.1926,35.0376],[118.1925,35.0377],[118.1924,35.0378],[118.1923,35.0378],[118.1922,35.0379],[118.1921,35.0379],[118.192,35.038],[118.1919,35.0381],[118.1919,35.0381],[118.1918,35.0381],[118.1918,35.0382],[118.1917,35.0382],[118.1917,35.0382],[118.1917,35.0382],[118.1916,35.0383],[118.1916,35.0383],[118.1915,35.0383],[118.1915,35.0384],[118.1914,35.0384],[118.1914,35.0384],[118.1913,35.0384],[118.1912,35.0385],[118.1911,35.0385],[118.1923,35.0417],[118.1933,35.0438],[118.1934,35.0438],[118.1934,35.0438],[118.1934,35.0439],[118.1935,35.0439],[118.1935,35.044],[118.1936,35.044],[118.1936,35.044],[118.1937,35.0441],[118.1937,35.0441],[118.1937,35.0442],[118.1938,35.0442],[118.1938,35.0442],[118.194,35.0444],[118.1941,35.0444],[118.1941,35.0445],[118.1942,35.0445],[118.1942,35.0446],[118.1943,35.0446],[118.1943,35.0447],[118.1944,35.0447],[118.1944,35.0447],[118.1945,35.0448],[118.1945,35.0448],[118.1945,35.0449],[118.1946,35.0449],[118.1946,35.0449],[118.1947,35.045],[118.1947,35.045],[118.1948,35.0451],[118.1948,35.0451],[118.1949,35.0452],[118.1949,35.0452],[118.195,35.0452],[118.195,35.0453],[118.195,35.0453],[118.1951,35.0454],[118.1951,35.0454],[118.1952,35.0454],[118.1952,35.0455],[118.1952,35.0455],[118.1953,35.0456],[118.1953,35.0456],[118.1954,35.0456],[118.1954,35.0457],[118.1955,35.0458],[118.1956,35.0459],[118.1956,35.0459],[118.1957,35.046],[118.1957,35.0461],[118.1958,35.0461],[118.1958,35.0462],[118.1959,35.0463],[118.1974,35.0483],[118.1974,35.0484],[118.1974,35.0485],[118.1974,35.0485],[118.1975,35.0486],[118.1975,35.0487],[118.1975,35.0488],[118.1976,35.0488],[118.1976,35.0489],[118.1976,35.049],[118.1976,35.049],[118.1977,35.0491],[118.1977,35.0492],[118.1977,35.0493],[118.1977,35.0493],[118.1977,35.0494],[118.1978,35.0495],[118.1978,35.0495],[118.1978,35.0496],[118.1978,35.0497],[118.1978,35.0497],[118.1978,35.0498],[118.1979,35.0499],[118.1979,35.0499],[118.1979,35.05],[118.1979,35.0501],[118.1979,35.0501],[118.1979,35.0502],[118.1979,35.0503],[118.1979,35.0503],[118.1979,35.0504],[118.1979,35.0505],[118.198,35.0505],[118.198,35.0506],[118.198,35.0506],[118.198,35.0507],[118.198,35.0508],[118.198,35.0508],[118.198,35.0509],[118.198,35.051],[118.198,35.051],[118.198,35.0511],[118.198,35.0511],[118.198,35.0512],[118.198,35.0513],[118.198,35.0513],[118.198,35.0514],[118.198,35.0514],[118.198,35.0515],[118.198,35.0516],[118.198,35.0516],[118.1979,35.0517],[118.1979,35.0517],[118.1979,35.0518],[118.1979,35.0519],[118.1979,35.0519],[118.1979,35.052],[118.1979,35.052],[118.1979,35.0521],[118.1979,35.0521],[118.1979,35.0522],[118.1979,35.0523],[118.1978,35.0523],[118.1978,35.0524],[118.1978,35.0524],[118.1978,35.0525],[118.1978,35.0525],[118.1978,35.0526],[118.1978,35.0527],[118.1978,35.0527],[118.1977,35.0528],[118.1977,35.0528],[118.1977,35.0529],[118.1977,35.0529],[118.1977,35.053],[118.1977,35.053],[118.1976,35.0531],[118.1976,35.0531],[118.1976,35.0532],[118.1976,35.0533],[118.1976,35.0533],[118.1975,35.0534],[118.1975,35.0534],[118.1975,35.0535],[118.1975,35.0535],[118.1975,35.0536],[118.1974,35.0536],[118.1974,35.0537],[118.1974,35.0537],[118.1974,35.0538],[118.1974,35.0538],[118.1973,35.0539],[118.1973,35.0539],[118.1973,35.054],[118.1973,35.054],[118.1972,35.0541],[118.1972,35.0541],[118.1972,35.0542],[118.1972,35.0542],[118.1971,35.0543],[118.1971,35.0543],[118.1971,35.0544],[118.1971,35.0545],[118.197,35.0545],[118.197,35.0546],[118.197,35.0546],[118.197,35.0547],[118.1969,35.0547],[118.1969,35.0548],[118.1969,35.0548],[118.1969,35.0549],[118.1968,35.0549],[118.1968,35.055],[118.1968,35.055],[118.1968,35.0551],[118.1967,35.0551],[118.1967,35.0552],[118.1967,35.0552],[118.1967,35.0553],[118.1966,35.0553],[118.1966,35.0554],[118.1966,35.0554],[118.1965,35.0555],[118.1965,35.0555],[118.1965,35.0556],[118.1964,35.0558],[118.1963,35.0563],[118.1963,35.0583],[118.2002,35.0572],[118.2003,35.0572],[118.2003,35.0571],[118.2004,35.0571],[118.2004,35.0571],[118.2005,35.0571],[118.2006,35.0571],[118.2006,35.0571],[118.2007,35.057],[118.2008,35.057],[118.2008,35.057],[118.2009,35.057],[118.201,35.057],[118.201,35.057],[118.2011,35.057],[118.2011,35.057],[118.2012,35.057],[118.2013,35.057],[118.2013,35.0569],[118.2014,35.0569],[118.2015,35.0569],[118.2015,35.0569],[118.2016,35.0569],[118.2017,35.0569],[118.2017,35.0569],[118.2018,35.0569],[118.2019,35.0569],[118.2019,35.0569],[118.202,35.0569],[118.2021,35.0569],[118.2021,35.0569],[118.2022,35.0569],[118.2023,35.0569],[118.21,35.057],[118.21,35.0337],[118.1957,35.0336]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"文化旅游小镇","bbox":[118.1911,35.0336,118.21,35.0583]}},{"type":"Feature","id":"yqxz.18","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2051,35.0029],[118.1903,35.0044],[118.1899,35.0086],[118.1899,35.0087],[118.1898,35.0087],[118.1898,35.0088],[118.1898,35.0089],[118.1898,35.0089],[118.1898,35.009],[118.1898,35.009],[118.1898,35.0091],[118.1898,35.0092],[118.1898,35.0092],[118.1898,35.0093],[118.1898,35.0094],[118.1898,35.0095],[118.1898,35.0095],[118.1898,35.0096],[118.1897,35.0097],[118.1897,35.0098],[118.1897,35.0098],[118.1897,35.0099],[118.1897,35.01],[118.1897,35.0101],[118.1897,35.0101],[118.1897,35.0102],[118.1897,35.0103],[118.1897,35.0104],[118.1897,35.0105],[118.1897,35.0105],[118.1897,35.0106],[118.1897,35.0107],[118.1896,35.0108],[118.1896,35.0109],[118.1896,35.011],[118.1896,35.0111],[118.1896,35.0111],[118.1896,35.0112],[118.1896,35.0113],[118.1896,35.0114],[118.1896,35.0115],[118.1896,35.0116],[118.1896,35.0117],[118.1896,35.0118],[118.1896,35.0119],[118.1896,35.0119],[118.1896,35.012],[118.1896,35.012],[118.1896,35.0121],[118.1896,35.0121],[118.1896,35.0122],[118.1896,35.0122],[118.1896,35.0122],[118.1896,35.0123],[118.1896,35.0123],[118.1896,35.0124],[118.1896,35.0124],[118.1896,35.0125],[118.1896,35.0125],[118.1896,35.0126],[118.1896,35.0126],[118.1896,35.0127],[118.1896,35.0127],[118.1896,35.0128],[118.1896,35.0128],[118.1896,35.0129],[118.1896,35.0129],[118.1896,35.013],[118.1896,35.013],[118.1896,35.0131],[118.1896,35.0131],[118.1896,35.0132],[118.1896,35.0132],[118.1896,35.0133],[118.1896,35.0133],[118.1896,35.0134],[118.1896,35.0134],[118.1896,35.0135],[118.1896,35.0135],[118.1896,35.0136],[118.1896,35.0136],[118.1896,35.0137],[118.1896,35.0137],[118.1896,35.0138],[118.1896,35.0138],[118.1896,35.0138],[118.1896,35.0139],[118.1896,35.0139],[118.1896,35.014],[118.1896,35.014],[118.1896,35.0141],[118.1896,35.0141],[118.1896,35.0142],[118.1896,35.0142],[118.1896,35.0143],[118.1896,35.0143],[118.1896,35.0144],[118.1896,35.0144],[118.1896,35.0145],[118.1896,35.0145],[118.1896,35.0146],[118.1897,35.0146],[118.1897,35.0147],[118.1897,35.0147],[118.1897,35.0148],[118.1897,35.0148],[118.1897,35.0149],[118.1897,35.0149],[118.1897,35.015],[118.1897,35.015],[118.1897,35.0151],[118.1897,35.0151],[118.1897,35.0152],[118.1897,35.0152],[118.1897,35.0153],[118.1897,35.0153],[118.1897,35.0154],[118.1898,35.0154],[118.1898,35.0155],[118.1898,35.0155],[118.1898,35.0156],[118.1898,35.0156],[118.1898,35.0157],[118.1898,35.0157],[118.1898,35.0158],[118.1898,35.0158],[118.1898,35.0159],[118.1898,35.0159],[118.1898,35.016],[118.1899,35.016],[118.1899,35.0161],[118.1899,35.0161],[118.1899,35.0162],[118.1899,35.0162],[118.1899,35.0163],[118.1899,35.0163],[118.1899,35.0164],[118.1899,35.0164],[118.19,35.0165],[118.19,35.0165],[118.19,35.0166],[118.19,35.0166],[118.19,35.0167],[118.19,35.0167],[118.19,35.0168],[118.19,35.0168],[118.1901,35.0169],[118.1901,35.0169],[118.1901,35.017],[118.1901,35.017],[118.1901,35.017],[118.1901,35.0171],[118.1901,35.0171],[118.1902,35.0172],[118.1902,35.0172],[118.1902,35.0173],[118.1902,35.0173],[118.1902,35.0174],[118.1902,35.0174],[118.1903,35.0175],[118.1903,35.0175],[118.1903,35.0176],[118.1903,35.0176],[118.1903,35.0177],[118.1903,35.0177],[118.1904,35.0177],[118.1904,35.0178],[118.1904,35.0178],[118.1904,35.0179],[118.1904,35.0179],[118.1905,35.018],[118.1905,35.018],[118.1905,35.0181],[118.1905,35.0181],[118.1905,35.0181],[118.1906,35.0182],[118.1906,35.0182],[118.1906,35.0183],[118.1906,35.0183],[118.1906,35.0184],[118.1907,35.0184],[118.1907,35.0185],[118.1907,35.0185],[118.1907,35.0185],[118.1907,35.0186],[118.1908,35.0186],[118.1908,35.0187],[118.1908,35.0187],[118.1908,35.0188],[118.1909,35.0188],[118.1909,35.0188],[118.1909,35.0189],[118.1909,35.0189],[118.191,35.019],[118.191,35.019],[118.191,35.0191],[118.1911,35.0192],[118.1912,35.0192],[118.1912,35.0193],[118.1913,35.0194],[118.1913,35.0195],[118.1914,35.0196],[118.1915,35.0196],[118.1915,35.0197],[118.1916,35.0198],[118.1916,35.0199],[118.1916,35.0196],[118.1916,35.0196],[118.1917,35.0197],[118.1917,35.0197],[118.1917,35.0198],[118.1917,35.0198],[118.1918,35.0198],[118.1918,35.0199],[118.1919,35.02],[118.1919,35.0201],[118.192,35.0202],[118.192,35.0202],[118.1921,35.0203],[118.1921,35.0204],[118.1922,35.0205],[118.1922,35.0205],[118.1922,35.0206],[118.1923,35.0207],[118.1923,35.0208],[118.1924,35.0208],[118.1924,35.0209],[118.1925,35.021],[118.1925,35.021],[118.1925,35.0211],[118.1926,35.0212],[118.1926,35.0212],[118.1926,35.0213],[118.1927,35.0214],[118.1927,35.0214],[118.1928,35.0215],[118.1928,35.0216],[118.1928,35.0216],[118.1929,35.0217],[118.1929,35.0217],[118.193,35.0218],[118.193,35.0219],[118.193,35.0219],[118.1931,35.022],[118.1931,35.0221],[118.1931,35.0221],[118.1932,35.0222],[118.1932,35.0223],[118.1932,35.0223],[118.1933,35.0224],[118.1933,35.0225],[118.1934,35.0225],[118.1934,35.0226],[118.1934,35.0227],[118.1935,35.0228],[118.1935,35.0228],[118.1936,35.0229],[118.1936,35.023],[118.1936,35.0231],[118.1937,35.0231],[118.1937,35.0232],[118.1938,35.0233],[118.1938,35.0234],[118.1938,35.0235],[118.1939,35.0235],[118.1939,35.0236],[118.1939,35.0236],[118.1939,35.0237],[118.194,35.0237],[118.194,35.0238],[118.194,35.0238],[118.194,35.0238],[118.1941,35.0239],[118.1941,35.0239],[118.1941,35.024],[118.1941,35.024],[118.1942,35.0241],[118.1942,35.0241],[118.1942,35.0242],[118.1942,35.0242],[118.1943,35.0243],[118.1943,35.0243],[118.1943,35.0244],[118.1951,35.0262],[118.2054,35.0258],[118.2072,35.0257],[118.2072,35.0257],[118.2072,35.0256],[118.2071,35.0256],[118.2071,35.0255],[118.2071,35.0255],[118.207,35.0254],[118.207,35.0254],[118.207,35.0253],[118.2069,35.0253],[118.2069,35.0252],[118.2069,35.0252],[118.2068,35.0251],[118.2068,35.0251],[118.2068,35.025],[118.2067,35.025],[118.2067,35.0249],[118.2067,35.0248],[118.2066,35.0248],[118.2066,35.0247],[118.2066,35.0247],[118.2066,35.0246],[118.2065,35.0246],[118.2065,35.0245],[118.2065,35.0245],[118.2064,35.0244],[118.2064,35.0244],[118.2064,35.0243],[118.2064,35.0243],[118.2063,35.0242],[118.2063,35.0241],[118.2063,35.0241],[118.2063,35.024],[118.2062,35.024],[118.2062,35.0239],[118.2062,35.0239],[118.2062,35.0238],[118.2062,35.0238],[118.2061,35.0237],[118.2061,35.0237],[118.2061,35.0236],[118.2061,35.0235],[118.206,35.0235],[118.206,35.0234],[118.206,35.0234],[118.206,35.0233],[118.206,35.0233],[118.2059,35.0232],[118.2059,35.0232],[118.2059,35.0231],[118.2059,35.023],[118.2059,35.023],[118.2059,35.0229],[118.2058,35.0229],[118.2058,35.0228],[118.2058,35.0228],[118.2058,35.0227],[118.2058,35.0226],[118.2058,35.0226],[118.2057,35.0225],[118.2057,35.0225],[118.2057,35.0224],[118.2057,35.0223],[118.2057,35.0223],[118.2057,35.0222],[118.2057,35.0222],[118.2056,35.0221],[118.2056,35.022],[118.2056,35.022],[118.2056,35.0219],[118.2056,35.0219],[118.2056,35.0218],[118.2056,35.0217],[118.2056,35.0217],[118.2055,35.0216],[118.2055,35.0216],[118.2055,35.0215],[118.2055,35.0214],[118.2055,35.0214],[118.2055,35.0213],[118.2055,35.0212],[118.2055,35.0212],[118.2055,35.0211],[118.2054,35.021],[118.2054,35.021],[118.2054,35.0209],[118.2054,35.0209],[118.2054,35.0208],[118.2054,35.0207],[118.2054,35.0207],[118.2054,35.0206],[118.2054,35.0205],[118.2054,35.0205],[118.2053,35.0204],[118.2053,35.0203],[118.2053,35.0203],[118.2053,35.0202],[118.2053,35.0201],[118.2053,35.02],[118.2053,35.02],[118.2053,35.0199],[118.2053,35.0198],[118.2053,35.0198],[118.2053,35.0197],[118.2053,35.0196],[118.2053,35.0196],[118.2052,35.0195],[118.2052,35.0194],[118.2052,35.0193],[118.2052,35.0193],[118.2052,35.0192],[118.2052,35.0191],[118.2052,35.019],[118.2052,35.019],[118.2052,35.0189],[118.2052,35.0188],[118.2052,35.0187],[118.2052,35.0187],[118.2052,35.0186],[118.2052,35.0185],[118.2051,35.0184],[118.2051,35.0184],[118.2051,35.0183],[118.2051,35.0182],[118.2051,35.0181],[118.2051,35.0181],[118.2051,35.018],[118.2051,35.0179],[118.2051,35.0178],[118.2051,35.014],[118.2051,35.0029]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"Spline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"桂香小镇","bbox":[118.1896,35.0029,118.2072,35.0262]}},{"type":"Feature","id":"yqxz.19","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2426,35.0003],[118.2337,35.0017],[118.2337,35.0062],[118.2426,35.0061],[118.2426,35.0003]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"龙湖软件园","bbox":[118.2337,35.0003,118.2426,35.0062]}},{"type":"Feature","id":"yqxz.20","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2417,34.9944],[118.2418,34.9942],[118.2414,34.9908],[118.2332,34.9911],[118.2333,34.9949],[118.2417,34.9944]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"生态总部园","bbox":[118.2332,34.9908,118.2418,34.9949]}},{"type":"Feature","id":"yqxz.21","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2334,34.9953],[118.2338,35.0009],[118.2338,35.0008],[118.2422,34.9993],[118.2418,34.9946],[118.2334,34.9953]]]]},"geometry_name":"the_geom","properties":{"FID_":0,"Entity":"2DPolyline","Layer":"_U+65E0_U+6807_U+98982_U+00A0_U+56FE_U+50CF","Color":18,"Linetype":"Continuous","Elevation":0,"LineWt":35,"RefName":"商业商务广场","bbox":[118.2334,34.9946,118.2422,35.0009]}}],"totalFeatures":21,"numberMatched":21,"numberReturned":21,"timeStamp":"2021-03-29T12:01:11.021Z","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[118.1568,34.9712,118.2521,35.0726]} \ No newline at end of file diff --git a/public/industry/geojson/村边界.json b/public/industry/geojson/村边界.json new file mode 100644 index 0000000..a8541a3 --- /dev/null +++ b/public/industry/geojson/村边界.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","id":"cunjie_4326.1","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1429,35.0812],[118.1433,35.0812],[118.1433,35.0812],[118.1432,35.0797],[118.143,35.0797],[118.143,35.0796],[118.143,35.079],[118.1429,35.079],[118.1426,35.079],[118.1426,35.0789],[118.1425,35.0788],[118.1425,35.0788],[118.1426,35.0788],[118.1427,35.0788],[118.1431,35.0787],[118.1432,35.0787],[118.1432,35.0787],[118.1433,35.0786],[118.1434,35.0786],[118.1435,35.0786],[118.1436,35.0786],[118.1437,35.0786],[118.1437,35.079],[118.1442,35.0791],[118.1442,35.079],[118.1442,35.0787],[118.1442,35.0787],[118.1442,35.0785],[118.1442,35.0784],[118.1446,35.0784],[118.1447,35.0784],[118.1447,35.0777],[118.1446,35.077],[118.1448,35.077],[118.1454,35.077],[118.1453,35.0753],[118.1449,35.0752],[118.1448,35.075],[118.1447,35.0749],[118.1446,35.0749],[118.1446,35.0743],[118.1447,35.0743],[118.146,35.0743],[118.1463,35.0745],[118.1473,35.0752],[118.1474,35.0745],[118.1474,35.0743],[118.1474,35.0739],[118.1474,35.0739],[118.1474,35.0733],[118.1477,35.0734],[118.1477,35.0728],[118.1476,35.0722],[118.1476,35.0712],[118.1476,35.0711],[118.1476,35.0709],[118.1476,35.0708],[118.1496,35.0708],[118.15,35.0708],[118.1499,35.0705],[118.1499,35.0705],[118.1499,35.0703],[118.1499,35.0702],[118.1499,35.07],[118.1499,35.0698],[118.1499,35.0687],[118.1499,35.0687],[118.15,35.0687],[118.1502,35.0686],[118.1503,35.0686],[118.1506,35.0685],[118.1507,35.0685],[118.1511,35.0684],[118.1511,35.0684],[118.1512,35.0684],[118.1513,35.0684],[118.1514,35.0684],[118.1514,35.0683],[118.1515,35.0683],[118.1516,35.0683],[118.1517,35.0683],[118.152,35.0683],[118.152,35.0683],[118.1521,35.0683],[118.1522,35.0683],[118.1523,35.0683],[118.1525,35.0682],[118.1526,35.0682],[118.1527,35.0681],[118.1528,35.0681],[118.1529,35.0681],[118.153,35.0681],[118.153,35.0681],[118.1531,35.0681],[118.1531,35.0681],[118.1532,35.0681],[118.1533,35.0681],[118.1533,35.0681],[118.1534,35.0681],[118.1534,35.0681],[118.1534,35.0681],[118.1535,35.0681],[118.1536,35.0681],[118.1536,35.068],[118.1537,35.0662],[118.1539,35.0662],[118.1539,35.0661],[118.1547,35.0662],[118.1546,35.0668],[118.1546,35.0671],[118.1546,35.0677],[118.1547,35.0677],[118.1547,35.0677],[118.1549,35.0677],[118.1549,35.0677],[118.155,35.0677],[118.155,35.0676],[118.155,35.0673],[118.155,35.0669],[118.155,35.0665],[118.1551,35.0662],[118.1551,35.0659],[118.1551,35.0654],[118.1552,35.0647],[118.1551,35.0647],[118.155,35.0647],[118.1549,35.0647],[118.1549,35.0647],[118.1548,35.0647],[118.1547,35.0647],[118.1546,35.0647],[118.1546,35.0644],[118.1547,35.0638],[118.1547,35.0635],[118.1547,35.0631],[118.1547,35.0627],[118.1544,35.0628],[118.1543,35.0629],[118.1544,35.0626],[118.1541,35.0625],[118.1541,35.0625],[118.1542,35.0621],[118.1543,35.0618],[118.1541,35.0617],[118.1541,35.0616],[118.1547,35.0611],[118.1545,35.0609],[118.1543,35.0608],[118.1541,35.0608],[118.1541,35.0608],[118.1536,35.0612],[118.1534,35.0615],[118.1533,35.0615],[118.1531,35.0615],[118.1529,35.0615],[118.1527,35.0621],[118.1525,35.062],[118.1524,35.0622],[118.1524,35.0622],[118.1524,35.0619],[118.1523,35.0619],[118.1519,35.0618],[118.152,35.0616],[118.1517,35.0616],[118.1517,35.0615],[118.1505,35.0614],[118.1496,35.0613],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.1501,35.0609],[118.1502,35.0609],[118.1504,35.0608],[118.1506,35.0608],[118.1508,35.0607],[118.1511,35.0606],[118.1512,35.0606],[118.1512,35.0601],[118.1516,35.0601],[118.1517,35.0596],[118.1517,35.0588],[118.1517,35.0585],[118.1515,35.0585],[118.1515,35.0579],[118.1513,35.0579],[118.1514,35.0573],[118.1512,35.0574],[118.1511,35.0574],[118.151,35.0575],[118.1509,35.0575],[118.1506,35.0574],[118.1505,35.0574],[118.1504,35.0574],[118.1501,35.0574],[118.1498,35.0574],[118.1496,35.0574],[118.1495,35.0574],[118.1495,35.0575],[118.1494,35.0579],[118.1474,35.0579],[118.1472,35.0585],[118.1469,35.0596],[118.1468,35.0596],[118.1467,35.0596],[118.1468,35.0591],[118.1469,35.0582],[118.1469,35.0574],[118.1465,35.0574],[118.1465,35.0581],[118.1465,35.0596],[118.1463,35.0595],[118.1461,35.0595],[118.1455,35.0595],[118.1456,35.0593],[118.1455,35.0584],[118.1455,35.0577],[118.1455,35.0575],[118.1455,35.0574],[118.1452,35.0574],[118.1451,35.0574],[118.1449,35.0574],[118.1444,35.0574],[118.1442,35.0575],[118.1438,35.0575],[118.1438,35.0588],[118.1438,35.0589],[118.1438,35.0592],[118.1438,35.0592],[118.143,35.0592],[118.1428,35.0592],[118.1427,35.0576],[118.1425,35.0576],[118.142,35.0576],[118.1415,35.0576],[118.1405,35.0576],[118.1391,35.0577],[118.1384,35.0577],[118.1374,35.0577],[118.1373,35.0577],[118.1367,35.0578],[118.1366,35.0571],[118.1364,35.0571],[118.136,35.0571],[118.1361,35.0578],[118.1363,35.0589],[118.1358,35.059],[118.1357,35.0591],[118.1357,35.0591],[118.1356,35.0591],[118.1355,35.0586],[118.1353,35.0578],[118.1352,35.0567],[118.1352,35.0567],[118.1347,35.0568],[118.1344,35.0569],[118.1346,35.0578],[118.135,35.0592],[118.1344,35.0593],[118.134,35.0579],[118.1338,35.0571],[118.1335,35.0563],[118.1331,35.0552],[118.1327,35.0552],[118.1325,35.0553],[118.1327,35.0558],[118.1323,35.056],[118.1322,35.056],[118.1319,35.0561],[118.1321,35.0565],[118.132,35.0565],[118.1315,35.0565],[118.1315,35.0565],[118.1314,35.0564],[118.1313,35.0562],[118.1311,35.0561],[118.1308,35.0559],[118.1307,35.0559],[118.1305,35.0561],[118.1304,35.0562],[118.1303,35.0562],[118.1301,35.0564],[118.1297,35.0568],[118.1296,35.0568],[118.1293,35.0572],[118.1288,35.057],[118.1286,35.0573],[118.1284,35.0575],[118.1284,35.0575],[118.1284,35.0576],[118.1284,35.0576],[118.1275,35.0572],[118.1275,35.0573],[118.1274,35.0574],[118.1274,35.0575],[118.127,35.0579],[118.1268,35.0582],[118.1266,35.0584],[118.1265,35.0585],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0586],[118.1265,35.0587],[118.1265,35.0588],[118.1265,35.0588],[118.1265,35.0588],[118.1266,35.0589],[118.1266,35.0589],[118.1266,35.0589],[118.1266,35.059],[118.1266,35.059],[118.1265,35.0592],[118.1263,35.0595],[118.1263,35.0596],[118.1262,35.0597],[118.1261,35.0599],[118.1259,35.0602],[118.1259,35.0602],[118.1258,35.0603],[118.1257,35.0606],[118.1256,35.0606],[118.1256,35.0606],[118.1256,35.0607],[118.1252,35.0605],[118.1251,35.0605],[118.125,35.0607],[118.1251,35.0607],[118.1251,35.0608],[118.1254,35.0608],[118.1254,35.0609],[118.1258,35.061],[118.1262,35.0611],[118.1262,35.0612],[118.1262,35.0612],[118.1262,35.0616],[118.1261,35.0619],[118.126,35.0622],[118.1255,35.0625],[118.1254,35.0626],[118.1252,35.0627],[118.1249,35.063],[118.1248,35.063],[118.1248,35.0632],[118.1243,35.063],[118.1238,35.0629],[118.1233,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0628],[118.1232,35.0629],[118.1232,35.0629],[118.1232,35.063],[118.1232,35.0631],[118.1233,35.0633],[118.1233,35.0633],[118.1233,35.0634],[118.1233,35.0634],[118.1233,35.0634],[118.1233,35.0635],[118.1233,35.0635],[118.1232,35.0635],[118.1232,35.0636],[118.1232,35.0636],[118.1232,35.0636],[118.1231,35.0637],[118.123,35.0638],[118.1229,35.0638],[118.1228,35.0637],[118.1228,35.0637],[118.1227,35.0637],[118.1226,35.0638],[118.1225,35.0638],[118.1224,35.0638],[118.1224,35.0638],[118.1222,35.0639],[118.1222,35.0644],[118.1222,35.0648],[118.1222,35.0652],[118.1221,35.0657],[118.1221,35.0661],[118.1221,35.0661],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1221,35.0662],[118.1219,35.0662],[118.1219,35.0662],[118.1219,35.0661],[118.1219,35.0659],[118.1219,35.0657],[118.1219,35.0654],[118.1219,35.0653],[118.1219,35.0648],[118.122,35.0644],[118.122,35.064],[118.122,35.064],[118.1219,35.064],[118.1218,35.0641],[118.1218,35.0641],[118.1216,35.0641],[118.1216,35.0642],[118.1216,35.0642],[118.1215,35.0642],[118.1215,35.0642],[118.1215,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1214,35.0642],[118.1213,35.0642],[118.1213,35.0642],[118.1213,35.0645],[118.1213,35.0647],[118.1213,35.0648],[118.1213,35.0649],[118.1213,35.0649],[118.1213,35.0652],[118.1213,35.0656],[118.1212,35.066],[118.1212,35.066],[118.1212,35.066],[118.1211,35.066],[118.1211,35.066],[118.1209,35.0661],[118.1208,35.0664],[118.1208,35.0666],[118.1208,35.0667],[118.1207,35.0671],[118.1207,35.0677],[118.1206,35.0682],[118.1206,35.0687],[118.1206,35.0687],[118.1209,35.0687],[118.121,35.0687],[118.121,35.0682],[118.1211,35.0678],[118.1211,35.0675],[118.1212,35.0672],[118.1212,35.067],[118.1212,35.067],[118.1212,35.0669],[118.1212,35.0666],[118.1213,35.0661],[118.1213,35.0661],[118.1215,35.0661],[118.1215,35.0661],[118.1215,35.0662],[118.1215,35.0665],[118.1214,35.0669],[118.1214,35.0669],[118.1214,35.067],[118.1214,35.0673],[118.1213,35.0678],[118.1213,35.0682],[118.1212,35.0686],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0687],[118.1212,35.0688],[118.1212,35.0692],[118.1212,35.0695],[118.1211,35.0696],[118.1211,35.0698],[118.1211,35.07],[118.1214,35.07],[118.1214,35.0705],[118.1217,35.0706],[118.1217,35.0703],[118.1225,35.0703],[118.1225,35.0706],[118.1225,35.0706],[118.1227,35.0706],[118.1227,35.0711],[118.1227,35.0712],[118.1227,35.0713],[118.1227,35.0714],[118.1235,35.0714],[118.1235,35.0717],[118.1236,35.072],[118.1236,35.0728],[118.1236,35.0738],[118.1237,35.0752],[118.1237,35.0755],[118.1244,35.0754],[118.1244,35.0757],[118.1245,35.0763],[118.1245,35.0768],[118.1245,35.077],[118.1247,35.077],[118.1251,35.0771],[118.1251,35.0771],[118.1261,35.0771],[118.127,35.0771],[118.1271,35.0771],[118.1271,35.077],[118.1272,35.077],[118.1276,35.077],[118.1276,35.0771],[118.1275,35.0774],[118.1291,35.0775],[118.1292,35.0774],[118.1292,35.0774],[118.1292,35.0774],[118.1293,35.0772],[118.1293,35.0772],[118.1294,35.077],[118.1296,35.0767],[118.1296,35.0768],[118.1297,35.0768],[118.1298,35.0769],[118.13,35.077],[118.1301,35.0771],[118.1302,35.0771],[118.1303,35.0773],[118.1303,35.0774],[118.1303,35.0774],[118.1303,35.0775],[118.1303,35.0775],[118.1303,35.0775],[118.1304,35.0776],[118.1304,35.0776],[118.1305,35.078],[118.1305,35.0784],[118.1312,35.0785],[118.1318,35.0784],[118.1322,35.0783],[118.1327,35.0781],[118.1333,35.0779],[118.1334,35.0779],[118.1336,35.0781],[118.1339,35.0783],[118.1341,35.0784],[118.1342,35.0784],[118.1344,35.0784],[118.1345,35.0785],[118.1346,35.0785],[118.1347,35.0786],[118.1348,35.0787],[118.1351,35.0788],[118.1356,35.0789],[118.1357,35.079],[118.1359,35.0791],[118.1359,35.0793],[118.1359,35.0795],[118.1359,35.0797],[118.1359,35.0801],[118.1359,35.0801],[118.1359,35.0803],[118.1362,35.0803],[118.1365,35.0802],[118.137,35.0802],[118.1374,35.0801],[118.1376,35.0801],[118.1377,35.0801],[118.138,35.0801],[118.1381,35.08],[118.1382,35.08],[118.1382,35.0801],[118.1381,35.0801],[118.1381,35.0803],[118.1381,35.0805],[118.1381,35.0805],[118.1381,35.0806],[118.1381,35.081],[118.138,35.0812],[118.1381,35.0813],[118.1381,35.0813],[118.1387,35.0814],[118.1387,35.0814],[118.1387,35.0814],[118.1387,35.0815],[118.1387,35.0816],[118.1388,35.0817],[118.1388,35.0818],[118.1388,35.0822],[118.1388,35.0823],[118.1388,35.0824],[118.1388,35.0824],[118.1388,35.0825],[118.1388,35.0826],[118.1388,35.0827],[118.1389,35.0827],[118.1389,35.0828],[118.1389,35.0829],[118.139,35.083],[118.1391,35.0833],[118.1397,35.0842],[118.14,35.0841],[118.1402,35.0842],[118.1404,35.0842],[118.1406,35.0842],[118.1408,35.0842],[118.1413,35.0842],[118.142,35.0841],[118.1421,35.0841],[118.1422,35.084],[118.1423,35.084],[118.1425,35.0839],[118.1426,35.0837],[118.1425,35.0834],[118.1425,35.0833],[118.1425,35.0833],[118.1424,35.0832],[118.1424,35.0831],[118.1424,35.083],[118.1423,35.0829],[118.1423,35.0828],[118.1422,35.0827],[118.1422,35.0826],[118.1421,35.0825],[118.1421,35.0824],[118.142,35.0823],[118.1419,35.0821],[118.1417,35.0818],[118.1415,35.0816],[118.1415,35.0816],[118.1414,35.0815],[118.1413,35.0814],[118.1412,35.0812],[118.1412,35.0812],[118.1412,35.0811],[118.1412,35.0811],[118.1413,35.081],[118.1418,35.0809],[118.142,35.081],[118.1421,35.0811],[118.1422,35.0812],[118.1424,35.0812],[118.1426,35.0812],[118.1427,35.0812],[118.1429,35.0812],[118.1429,35.0812]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106013","XZQMC":"武德村","KZMJ":5848346.04,"JSMJ":5848346.03,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1206,35.0552,118.1552,35.0842]}},{"type":"Feature","id":"cunjie_4326.2","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1838,35.0803],[118.1838,35.0803],[118.1838,35.0803],[118.1837,35.0803],[118.1838,35.0802],[118.1838,35.0801],[118.1839,35.0801],[118.184,35.0798],[118.184,35.0798],[118.1841,35.0797],[118.1841,35.0795],[118.1842,35.0795],[118.1842,35.0795],[118.1842,35.0795],[118.1842,35.0794],[118.1842,35.0794],[118.1842,35.0794],[118.1845,35.079],[118.1845,35.079],[118.1845,35.079],[118.1845,35.079],[118.1845,35.0789],[118.1846,35.0788],[118.1846,35.0788],[118.1848,35.0785],[118.1848,35.0784],[118.1848,35.0784],[118.1848,35.0784],[118.1848,35.0784],[118.185,35.0781],[118.185,35.078],[118.1853,35.0776],[118.1853,35.0776],[118.1856,35.0771],[118.1856,35.0771],[118.1856,35.0771],[118.1856,35.077],[118.1856,35.077],[118.1856,35.077],[118.1856,35.077],[118.1856,35.0769],[118.1857,35.0767],[118.1869,35.0768],[118.1869,35.0768],[118.1873,35.0768],[118.1873,35.0767],[118.1872,35.0766],[118.1872,35.0764],[118.1874,35.0764],[118.1883,35.0765],[118.1886,35.0765],[118.1889,35.0765],[118.1889,35.0765],[118.1903,35.0766],[118.1903,35.0766],[118.1903,35.0766],[118.191,35.0766],[118.1914,35.0766],[118.1916,35.0766],[118.1919,35.0766],[118.1919,35.0766],[118.192,35.0757],[118.1921,35.0748],[118.1921,35.0747],[118.1921,35.0746],[118.1924,35.0746],[118.1925,35.0745],[118.1925,35.0745],[118.1929,35.0744],[118.193,35.0744],[118.193,35.0744],[118.193,35.0744],[118.193,35.0744],[118.1935,35.0742],[118.1936,35.0742],[118.1936,35.0742],[118.1936,35.0742],[118.1941,35.0742],[118.1945,35.0742],[118.1949,35.0742],[118.1949,35.0743],[118.1954,35.0744],[118.1954,35.0747],[118.1954,35.0747],[118.1955,35.0747],[118.1955,35.0747],[118.1956,35.0747],[118.1956,35.0748],[118.1956,35.0752],[118.1955,35.0755],[118.1955,35.0757],[118.1955,35.0757],[118.1955,35.0761],[118.1955,35.0762],[118.1956,35.0762],[118.1959,35.0762],[118.1959,35.0762],[118.1959,35.0766],[118.1959,35.0766],[118.1965,35.0766],[118.1967,35.0766],[118.1969,35.0766],[118.1969,35.0766],[118.1971,35.0766],[118.1971,35.0766],[118.1972,35.0766],[118.1973,35.0766],[118.1973,35.0766],[118.1975,35.0766],[118.1975,35.0766],[118.1977,35.0766],[118.1986,35.0767],[118.1987,35.0767],[118.1987,35.0767],[118.1987,35.0765],[118.1987,35.0764],[118.1987,35.0762],[118.1987,35.0762],[118.1987,35.0761],[118.1987,35.0761],[118.1987,35.0755],[118.1987,35.0755],[118.1987,35.075],[118.1987,35.0748],[118.1987,35.0746],[118.1987,35.0744],[118.1987,35.0744],[118.1987,35.0744],[118.1988,35.0744],[118.1988,35.0742],[118.2014,35.0742],[118.2017,35.0742],[118.2018,35.0755],[118.2019,35.0755],[118.2019,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.202,35.0755],[118.2021,35.0755],[118.2021,35.0755],[118.2028,35.0754],[118.2036,35.0754],[118.2044,35.0754],[118.205,35.0754],[118.205,35.0754],[118.205,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0754],[118.2051,35.0748],[118.2051,35.0743],[118.2051,35.0742],[118.2051,35.0742],[118.2051,35.0742],[118.2051,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0739],[118.2054,35.0728],[118.2054,35.0723],[118.2054,35.0722],[118.2045,35.0722],[118.2045,35.072],[118.2045,35.071],[118.2043,35.071],[118.2042,35.071],[118.2029,35.0711],[118.2027,35.0711],[118.2027,35.0711],[118.2027,35.0711],[118.2027,35.0706],[118.2027,35.0702],[118.2027,35.0696],[118.203,35.0696],[118.2031,35.0688],[118.2021,35.0688],[118.2021,35.0683],[118.2021,35.0682],[118.2021,35.0677],[118.202,35.0677],[118.202,35.0677],[118.2016,35.0677],[118.2017,35.0699],[118.2014,35.0699],[118.201,35.0699],[118.2003,35.0699],[118.1992,35.07],[118.1987,35.07],[118.1987,35.0695],[118.1987,35.0689],[118.1987,35.0689],[118.1987,35.0688],[118.1988,35.0687],[118.1988,35.0687],[118.199,35.0687],[118.1996,35.0685],[118.1996,35.068],[118.1991,35.068],[118.199,35.068],[118.1989,35.068],[118.1984,35.068],[118.1984,35.0677],[118.1984,35.0676],[118.1984,35.0673],[118.1984,35.0672],[118.1984,35.067],[118.1981,35.067],[118.1981,35.0665],[118.1981,35.0662],[118.198,35.0661],[118.198,35.0657],[118.198,35.0656],[118.198,35.0655],[118.198,35.065],[118.1977,35.065],[118.1975,35.0651],[118.1974,35.0651],[118.1973,35.0651],[118.1973,35.0651],[118.1961,35.0652],[118.1961,35.0653],[118.1961,35.0657],[118.1961,35.0658],[118.1961,35.066],[118.196,35.0662],[118.196,35.0664],[118.1958,35.0664],[118.1951,35.0663],[118.1944,35.0663],[118.1943,35.0662],[118.1941,35.0661],[118.1938,35.0659],[118.1936,35.0658],[118.1934,35.0655],[118.1933,35.0655],[118.1933,35.0653],[118.1926,35.065],[118.1926,35.0649],[118.192,35.0649],[118.192,35.0651],[118.1913,35.0651],[118.1913,35.0655],[118.1909,35.0655],[118.1909,35.0654],[118.1909,35.0646],[118.1909,35.0647],[118.1909,35.0644],[118.1906,35.0644],[118.1906,35.0648],[118.1901,35.0648],[118.1901,35.0646],[118.1894,35.0642],[118.1885,35.0638],[118.1883,35.0638],[118.1883,35.0638],[118.1882,35.0638],[118.1881,35.0638],[118.1881,35.0638],[118.1881,35.0638],[118.188,35.0638],[118.1878,35.0637],[118.1878,35.0636],[118.1877,35.0636],[118.1876,35.0635],[118.1875,35.0635],[118.1875,35.0635],[118.1874,35.0634],[118.1873,35.0634],[118.1871,35.0634],[118.1871,35.0634],[118.187,35.0633],[118.1869,35.0633],[118.1868,35.0633],[118.1867,35.0633],[118.1867,35.0633],[118.1865,35.0632],[118.1865,35.0632],[118.1863,35.0632],[118.1862,35.0632],[118.1861,35.0632],[118.1859,35.0632],[118.1858,35.0632],[118.1857,35.0632],[118.1854,35.0632],[118.1854,35.0632],[118.1852,35.0632],[118.1844,35.0632],[118.184,35.0632],[118.1839,35.0633],[118.1839,35.0633],[118.1838,35.0633],[118.1836,35.0633],[118.1835,35.0633],[118.1835,35.0633],[118.1834,35.0633],[118.1833,35.0633],[118.1833,35.0633],[118.1832,35.0633],[118.1831,35.0633],[118.183,35.0634],[118.1829,35.0635],[118.1829,35.0636],[118.1829,35.0636],[118.1829,35.0637],[118.1829,35.0639],[118.183,35.0641],[118.183,35.0641],[118.183,35.0641],[118.183,35.0645],[118.1831,35.0646],[118.1832,35.0651],[118.1832,35.0652],[118.183,35.0652],[118.1828,35.0652],[118.1825,35.0653],[118.1821,35.0655],[118.182,35.0655],[118.182,35.065],[118.182,35.065],[118.1818,35.065],[118.1809,35.0649],[118.1805,35.0649],[118.18,35.0648],[118.1799,35.0647],[118.1798,35.0648],[118.1797,35.0648],[118.1797,35.0648],[118.1796,35.0648],[118.1796,35.0647],[118.1795,35.0647],[118.1794,35.0647],[118.1794,35.0646],[118.1793,35.0646],[118.179,35.0646],[118.1783,35.0646],[118.1782,35.0648],[118.1782,35.065],[118.1782,35.0651],[118.1782,35.0654],[118.1781,35.0657],[118.1781,35.0658],[118.1781,35.0658],[118.1781,35.0658],[118.1779,35.0658],[118.1775,35.0658],[118.1776,35.0654],[118.1776,35.0651],[118.1777,35.0645],[118.1765,35.0645],[118.1764,35.0657],[118.1763,35.0657],[118.1763,35.066],[118.1762,35.0663],[118.1761,35.0663],[118.176,35.0664],[118.176,35.0665],[118.176,35.0665],[118.1759,35.0665],[118.1758,35.0665],[118.1757,35.0665],[118.1757,35.0665],[118.1757,35.0666],[118.1757,35.0666],[118.1756,35.0667],[118.1756,35.0667],[118.1756,35.0667],[118.1755,35.0667],[118.1754,35.0669],[118.1753,35.067],[118.1753,35.0681],[118.1751,35.0681],[118.1749,35.0681],[118.1748,35.0681],[118.1744,35.0682],[118.1742,35.0683],[118.1735,35.0684],[118.1734,35.0678],[118.1734,35.0676],[118.1734,35.0675],[118.1738,35.0666],[118.1737,35.0666],[118.1737,35.0664],[118.1736,35.0664],[118.1735,35.0664],[118.1732,35.067],[118.173,35.0669],[118.1728,35.0672],[118.1728,35.0667],[118.1726,35.0667],[118.1725,35.0676],[118.1728,35.0677],[118.1728,35.0682],[118.1728,35.069],[118.1728,35.0698],[118.1729,35.0699],[118.1729,35.0699],[118.173,35.0699],[118.173,35.0698],[118.1733,35.0698],[118.1733,35.0697],[118.1735,35.0697],[118.1734,35.0703],[118.1734,35.0703],[118.1733,35.0706],[118.1732,35.0707],[118.1732,35.0708],[118.173,35.0717],[118.1726,35.0717],[118.1728,35.0711],[118.1729,35.0706],[118.173,35.0702],[118.1727,35.0702],[118.1725,35.0702],[118.1721,35.0702],[118.1718,35.0702],[118.1718,35.0702],[118.1717,35.0707],[118.1716,35.0717],[118.1715,35.0719],[118.1715,35.072],[118.1716,35.072],[118.1714,35.0744],[118.1714,35.0745],[118.1716,35.0745],[118.1716,35.0745],[118.1716,35.0745],[118.1716,35.0747],[118.1717,35.0747],[118.1717,35.0752],[118.1717,35.0754],[118.1716,35.0759],[118.1716,35.0763],[118.1717,35.0763],[118.1717,35.077],[118.1722,35.0771],[118.1722,35.077],[118.1723,35.077],[118.1723,35.077],[118.1723,35.077],[118.1724,35.0771],[118.1724,35.0771],[118.1723,35.0773],[118.1723,35.0774],[118.1723,35.0775],[118.1723,35.0776],[118.1723,35.0776],[118.1723,35.0782],[118.1722,35.0784],[118.1722,35.0785],[118.1722,35.0785],[118.1723,35.0786],[118.1723,35.0786],[118.1723,35.0786],[118.1724,35.0786],[118.1726,35.0786],[118.1726,35.0786],[118.1727,35.0787],[118.1728,35.0787],[118.1729,35.0787],[118.173,35.0787],[118.1731,35.0788],[118.1732,35.0788],[118.1733,35.0789],[118.1734,35.0789],[118.1735,35.079],[118.1736,35.0791],[118.1736,35.0792],[118.1737,35.0792],[118.1738,35.0792],[118.1739,35.0793],[118.1739,35.0793],[118.174,35.0793],[118.174,35.0793],[118.1741,35.0793],[118.1741,35.0793],[118.174,35.0799],[118.1739,35.0803],[118.1739,35.0807],[118.1739,35.0808],[118.1738,35.081],[118.1738,35.0814],[118.1737,35.0816],[118.1738,35.0816],[118.1737,35.0819],[118.1743,35.0819],[118.1743,35.0819],[118.1753,35.082],[118.1753,35.0818],[118.1754,35.0814],[118.1754,35.0811],[118.1755,35.0806],[118.1756,35.08],[118.1756,35.0799],[118.176,35.0799],[118.1762,35.08],[118.1762,35.08],[118.1762,35.08],[118.1763,35.08],[118.1763,35.08],[118.1763,35.08],[118.1763,35.08],[118.1769,35.0801],[118.1769,35.0801],[118.177,35.0801],[118.1772,35.0801],[118.1772,35.0801],[118.1774,35.08],[118.1775,35.08],[118.1776,35.08],[118.1778,35.0799],[118.1779,35.0799],[118.1781,35.0799],[118.1785,35.08],[118.179,35.08],[118.1792,35.08],[118.1799,35.08],[118.1799,35.0801],[118.1805,35.0801],[118.1811,35.0801],[118.1811,35.0801],[118.1811,35.0801],[118.1813,35.0801],[118.1819,35.0802],[118.1829,35.0802],[118.1835,35.0803],[118.1837,35.0803],[118.1838,35.0803]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106001","XZQMC":"马厂湖村","KZMJ":3775068.73,"JSMJ":3775068.73,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1714,35.0632,118.2054,35.082]}},{"type":"Feature","id":"cunjie_4326.3","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2406,35.0806],[118.2426,35.0804],[118.2426,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.243,35.0804],[118.2431,35.0804],[118.2431,35.0804],[118.2432,35.0804],[118.2434,35.0804],[118.2437,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2442,35.0804],[118.2445,35.0804],[118.2447,35.0804],[118.2448,35.0803],[118.2448,35.0801],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0798],[118.2448,35.0797],[118.2448,35.0796],[118.2448,35.0793],[118.2448,35.0789],[118.2448,35.0788],[118.2448,35.0788],[118.2448,35.0788],[118.2448,35.0784],[118.2447,35.078],[118.2447,35.0779],[118.2447,35.0779],[118.2447,35.0776],[118.2447,35.0776],[118.2447,35.0774],[118.2447,35.0769],[118.2447,35.0769],[118.2447,35.0769],[118.2446,35.0763],[118.2446,35.0758],[118.2446,35.0758],[118.2446,35.0758],[118.2446,35.0757],[118.2446,35.0757],[118.2454,35.0757],[118.2455,35.0757],[118.2456,35.0757],[118.2458,35.0757],[118.2459,35.0757],[118.246,35.0757],[118.2462,35.0757],[118.2463,35.0757],[118.2464,35.0757],[118.2468,35.0756],[118.247,35.0756],[118.2471,35.0756],[118.2471,35.0756],[118.2472,35.0756],[118.2472,35.0756],[118.2472,35.0752],[118.2471,35.0748],[118.2471,35.0747],[118.2471,35.0747],[118.2468,35.0716],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.071],[118.2468,35.0709],[118.2467,35.0708],[118.2467,35.0708],[118.2467,35.0707],[118.2467,35.0707],[118.2467,35.0707],[118.2467,35.0701],[118.2466,35.0695],[118.2466,35.069],[118.2466,35.0689],[118.2466,35.0689],[118.2467,35.0689],[118.2467,35.0689],[118.2467,35.0689],[118.2471,35.0689],[118.2471,35.0689],[118.2471,35.0689],[118.2472,35.0689],[118.2472,35.0689],[118.2476,35.0689],[118.2475,35.0685],[118.2475,35.0683],[118.2475,35.0683],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0682],[118.2475,35.0681],[118.2475,35.0676],[118.2475,35.0676],[118.2475,35.0675],[118.2475,35.0674],[118.2474,35.0671],[118.2474,35.067],[118.2474,35.0669],[118.2479,35.0669],[118.2479,35.0668],[118.2479,35.0668],[118.2479,35.0667],[118.2479,35.0667],[118.2479,35.0667],[118.2479,35.0666],[118.2479,35.0661],[118.2478,35.0657],[118.2478,35.0654],[118.2478,35.0654],[118.2478,35.0653],[118.2478,35.0649],[118.2482,35.0649],[118.2483,35.0649],[118.2485,35.0649],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0648],[118.2487,35.0641],[118.2487,35.064],[118.2486,35.0637],[118.2486,35.0634],[118.2486,35.0629],[118.248,35.0629],[118.2479,35.0629],[118.2475,35.0629],[118.2471,35.063],[118.247,35.063],[118.2465,35.063],[118.2462,35.063],[118.2461,35.063],[118.2461,35.063],[118.246,35.063],[118.2453,35.0631],[118.2448,35.0631],[118.2435,35.0631],[118.2428,35.0632],[118.2429,35.0636],[118.2429,35.064],[118.2429,35.0641],[118.2427,35.0641],[118.2425,35.0641],[118.2421,35.0642],[118.2417,35.0642],[118.2412,35.0642],[118.241,35.0642],[118.2397,35.0643],[118.239,35.0644],[118.2387,35.0644],[118.238,35.0645],[118.2377,35.0645],[118.2376,35.0645],[118.2375,35.0645],[118.2374,35.0644],[118.2373,35.0644],[118.2373,35.0644],[118.2373,35.0644],[118.2372,35.0643],[118.2372,35.0643],[118.2371,35.0643],[118.237,35.0643],[118.2369,35.0643],[118.2367,35.0643],[118.2366,35.0643],[118.2365,35.0643],[118.2363,35.0642],[118.2362,35.0642],[118.2361,35.0642],[118.236,35.0642],[118.2358,35.0644],[118.2355,35.0646],[118.2354,35.0648],[118.2353,35.0648],[118.2351,35.0648],[118.2344,35.0648],[118.2343,35.0648],[118.2317,35.0649],[118.2316,35.0649],[118.2317,35.0658],[118.2317,35.0658],[118.2308,35.0658],[118.2304,35.0658],[118.2304,35.0659],[118.2296,35.0659],[118.2295,35.066],[118.2296,35.067],[118.2297,35.0679],[118.2297,35.0679],[118.2289,35.068],[118.228,35.068],[118.2276,35.068],[118.227,35.0681],[118.2268,35.0681],[118.2268,35.0682],[118.2269,35.0686],[118.227,35.07],[118.2267,35.07],[118.2259,35.0701],[118.2255,35.0701],[118.2247,35.0701],[118.2242,35.0702],[118.2242,35.0709],[118.2243,35.0717],[118.2243,35.0718],[118.225,35.0718],[118.2271,35.0718],[118.2271,35.0719],[118.2271,35.0719],[118.2271,35.072],[118.2272,35.0721],[118.2272,35.0724],[118.2272,35.0725],[118.2272,35.0726],[118.2272,35.0729],[118.2272,35.0729],[118.2272,35.0731],[118.2272,35.0734],[118.2273,35.0735],[118.2273,35.0735],[118.2273,35.0735],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0736],[118.2273,35.0737],[118.2273,35.0737],[118.2273,35.0738],[118.2273,35.0739],[118.2273,35.0739],[118.2273,35.0742],[118.2274,35.0745],[118.2274,35.0747],[118.2274,35.0747],[118.2274,35.0748],[118.2274,35.0748],[118.2274,35.0749],[118.2274,35.0749],[118.2274,35.075],[118.2274,35.0753],[118.2274,35.0755],[118.2274,35.0756],[118.2275,35.0757],[118.2275,35.0758],[118.2274,35.0758],[118.2277,35.0759],[118.2277,35.0759],[118.2277,35.0759],[118.2278,35.0759],[118.2278,35.0759],[118.2278,35.0759],[118.2279,35.0759],[118.2279,35.0759],[118.228,35.0758],[118.2281,35.0758],[118.2282,35.0758],[118.2282,35.0758],[118.2283,35.0758],[118.2283,35.0758],[118.2284,35.0758],[118.2286,35.0758],[118.2286,35.0758],[118.2286,35.0758],[118.2286,35.0759],[118.2287,35.0778],[118.2292,35.0778],[118.2296,35.0777],[118.2296,35.0777],[118.2296,35.0777],[118.23,35.0777],[118.2303,35.0777],[118.2305,35.0777],[118.2307,35.0777],[118.2307,35.0777],[118.231,35.0777],[118.2311,35.0777],[118.2312,35.0777],[118.2314,35.0777],[118.2316,35.0776],[118.2317,35.0776],[118.232,35.0776],[118.2325,35.0776],[118.2325,35.0776],[118.2325,35.0776],[118.233,35.0776],[118.233,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2331,35.0776],[118.2332,35.0781],[118.2333,35.0789],[118.2334,35.0794],[118.2334,35.0794],[118.2334,35.0794],[118.2338,35.0794],[118.2354,35.0793],[118.2362,35.0793],[118.2363,35.0793],[118.2363,35.0793],[118.2363,35.0793],[118.2369,35.0792],[118.2376,35.0792],[118.2379,35.0792],[118.238,35.0792],[118.238,35.0792],[118.2382,35.0792],[118.2388,35.0792],[118.2395,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0791],[118.2401,35.0792],[118.2401,35.0792],[118.2402,35.0797],[118.2402,35.0802],[118.2402,35.0805],[118.2403,35.0806],[118.2406,35.0806],[118.2406,35.0806]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106033","XZQMC":"古城村","KZMJ":2858961.9,"JSMJ":2858961.91,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2242,35.0629,118.2487,35.0806]}},{"type":"Feature","id":"cunjie_4326.4","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1723,35.0786],[118.1723,35.0786],[118.1723,35.0786],[118.1722,35.0785],[118.1722,35.0785],[118.1722,35.0784],[118.1723,35.0782],[118.1723,35.0776],[118.1723,35.0776],[118.1723,35.0775],[118.1723,35.0774],[118.1723,35.0773],[118.1724,35.0771],[118.1724,35.0771],[118.1723,35.077],[118.1723,35.077],[118.1723,35.077],[118.1722,35.077],[118.1722,35.0771],[118.1717,35.077],[118.1717,35.0763],[118.1716,35.0763],[118.1716,35.0759],[118.1717,35.0754],[118.1717,35.0752],[118.1717,35.0747],[118.1716,35.0747],[118.1716,35.0745],[118.1716,35.0745],[118.1716,35.0745],[118.1714,35.0745],[118.1714,35.0744],[118.1716,35.072],[118.1715,35.072],[118.1715,35.0719],[118.1716,35.0717],[118.1717,35.0707],[118.1718,35.0702],[118.171,35.0702],[118.1711,35.0693],[118.1712,35.0681],[118.171,35.0681],[118.1708,35.068],[118.1707,35.068],[118.1701,35.068],[118.1698,35.068],[118.1698,35.068],[118.1695,35.0679],[118.1692,35.0679],[118.1686,35.0679],[118.1683,35.0678],[118.1682,35.0678],[118.168,35.0678],[118.1676,35.0678],[118.1675,35.0677],[118.1675,35.0677],[118.1675,35.0677],[118.1675,35.0676],[118.1674,35.0674],[118.167,35.0675],[118.1664,35.0676],[118.1663,35.0676],[118.1663,35.0677],[118.1662,35.0678],[118.1662,35.0678],[118.1659,35.0678],[118.1654,35.0678],[118.1649,35.0677],[118.1644,35.0677],[118.1641,35.0676],[118.1641,35.0676],[118.164,35.0676],[118.164,35.0676],[118.1639,35.0676],[118.1639,35.0676],[118.1638,35.0675],[118.1638,35.0675],[118.1637,35.0675],[118.1636,35.0675],[118.1635,35.0664],[118.1634,35.0664],[118.1633,35.0664],[118.1632,35.0664],[118.1632,35.0664],[118.1631,35.0665],[118.1631,35.0665],[118.1631,35.0665],[118.1629,35.0665],[118.1625,35.0666],[118.1624,35.0667],[118.1623,35.0668],[118.1622,35.0669],[118.1621,35.0669],[118.1618,35.0669],[118.1617,35.0669],[118.1615,35.067],[118.1613,35.067],[118.1613,35.067],[118.1613,35.067],[118.1612,35.0669],[118.1612,35.0669],[118.1611,35.0669],[118.161,35.067],[118.1609,35.067],[118.1608,35.067],[118.1607,35.067],[118.1604,35.067],[118.1605,35.0666],[118.1605,35.0663],[118.1606,35.0655],[118.1606,35.0654],[118.1607,35.0654],[118.1608,35.0647],[118.1608,35.0647],[118.1608,35.0645],[118.1602,35.0645],[118.1602,35.0639],[118.1601,35.0639],[118.1601,35.0639],[118.16,35.064],[118.1599,35.064],[118.1598,35.064],[118.1598,35.064],[118.1597,35.064],[118.1596,35.064],[118.1596,35.064],[118.1595,35.064],[118.1591,35.0639],[118.1591,35.0643],[118.1593,35.0645],[118.1594,35.0646],[118.1594,35.0649],[118.158,35.0649],[118.1575,35.0649],[118.1572,35.0649],[118.1567,35.0649],[118.1565,35.0648],[118.1563,35.0648],[118.1561,35.0648],[118.1558,35.0647],[118.1558,35.0661],[118.1554,35.0661],[118.1554,35.0647],[118.1552,35.0647],[118.1551,35.0654],[118.1551,35.0659],[118.1551,35.0662],[118.155,35.0665],[118.155,35.0669],[118.155,35.0673],[118.155,35.0676],[118.155,35.0677],[118.1549,35.0677],[118.1549,35.0677],[118.1547,35.0677],[118.1547,35.0677],[118.1546,35.0677],[118.1546,35.0671],[118.1546,35.0668],[118.1547,35.0662],[118.1539,35.0661],[118.1539,35.0662],[118.1537,35.0662],[118.1536,35.068],[118.1536,35.0681],[118.1535,35.0681],[118.1534,35.0681],[118.1534,35.0681],[118.1534,35.0681],[118.1533,35.0681],[118.1533,35.0681],[118.1532,35.0681],[118.1531,35.0681],[118.1531,35.0681],[118.153,35.0681],[118.153,35.0681],[118.1529,35.0681],[118.1528,35.0681],[118.1527,35.0681],[118.1526,35.0682],[118.1525,35.0682],[118.1523,35.0683],[118.1522,35.0683],[118.1521,35.0683],[118.152,35.0683],[118.152,35.0683],[118.1517,35.0683],[118.1516,35.0683],[118.1515,35.0683],[118.1514,35.0683],[118.1514,35.0684],[118.1513,35.0684],[118.1512,35.0684],[118.1511,35.0684],[118.1511,35.0684],[118.1507,35.0685],[118.1506,35.0685],[118.1503,35.0686],[118.1502,35.0686],[118.15,35.0687],[118.1499,35.0687],[118.1499,35.0687],[118.1499,35.0698],[118.1499,35.07],[118.1499,35.0702],[118.1499,35.0703],[118.1499,35.0705],[118.1499,35.0705],[118.15,35.0708],[118.1496,35.0708],[118.1476,35.0708],[118.1476,35.0709],[118.1476,35.0711],[118.1483,35.0711],[118.1483,35.0712],[118.1483,35.0718],[118.1484,35.0726],[118.1484,35.0729],[118.1486,35.0729],[118.1486,35.073],[118.1494,35.0731],[118.1495,35.073],[118.1508,35.0729],[118.1508,35.0732],[118.1518,35.0732],[118.1518,35.073],[118.1522,35.073],[118.1522,35.074],[118.1522,35.0743],[118.1522,35.0743],[118.1527,35.0743],[118.1527,35.0743],[118.1527,35.074],[118.1534,35.074],[118.1533,35.073],[118.1541,35.073],[118.1548,35.0731],[118.1548,35.0734],[118.1552,35.0734],[118.1552,35.0734],[118.1554,35.0735],[118.1555,35.0735],[118.1557,35.0735],[118.1557,35.0736],[118.1563,35.0736],[118.1563,35.0737],[118.1564,35.0737],[118.1565,35.0738],[118.1566,35.0739],[118.1568,35.0739],[118.1569,35.074],[118.157,35.0741],[118.157,35.0741],[118.157,35.0741],[118.157,35.0742],[118.1573,35.0744],[118.1577,35.0747],[118.1577,35.0747],[118.1577,35.0747],[118.1578,35.0748],[118.1579,35.0749],[118.1581,35.075],[118.1583,35.0752],[118.1585,35.0753],[118.1588,35.0755],[118.1589,35.0755],[118.159,35.0756],[118.1591,35.0757],[118.1592,35.0757],[118.1594,35.0759],[118.1595,35.0759],[118.1598,35.0761],[118.16,35.0762],[118.1602,35.0762],[118.1603,35.0762],[118.1604,35.0763],[118.1604,35.0763],[118.1604,35.0763],[118.1606,35.0763],[118.161,35.0763],[118.1616,35.0763],[118.1618,35.0763],[118.1624,35.0763],[118.1636,35.0764],[118.1638,35.0764],[118.1642,35.0766],[118.1644,35.0766],[118.1645,35.0766],[118.1646,35.0767],[118.1646,35.0767],[118.1647,35.0767],[118.1647,35.0767],[118.1648,35.0768],[118.1649,35.0768],[118.165,35.0768],[118.165,35.0769],[118.165,35.077],[118.165,35.077],[118.1651,35.0771],[118.1651,35.0771],[118.1651,35.0772],[118.1651,35.0773],[118.1652,35.0774],[118.1652,35.0774],[118.1652,35.0775],[118.1653,35.0775],[118.1655,35.0775],[118.1656,35.0776],[118.1657,35.0776],[118.1659,35.0776],[118.166,35.0776],[118.1662,35.0775],[118.1662,35.0784],[118.1662,35.0789],[118.1663,35.0792],[118.1666,35.0792],[118.1666,35.0799],[118.1682,35.0799],[118.1682,35.0799],[118.1688,35.0799],[118.1693,35.0799],[118.1693,35.0799],[118.1694,35.0799],[118.1695,35.0799],[118.1695,35.0799],[118.17,35.0799],[118.1704,35.0799],[118.1707,35.0799],[118.1718,35.0799],[118.1717,35.0794],[118.1717,35.0789],[118.1717,35.0789],[118.1717,35.0786],[118.1717,35.0786],[118.1721,35.0786],[118.1723,35.0786]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106015","XZQMC":"前桃园村","KZMJ":2073189.89,"JSMJ":2073189.95,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1476,35.0639,118.1724,35.0799]}},{"type":"Feature","id":"cunjie_4326.5","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2139,35.0756],[118.2145,35.0756],[118.2147,35.0756],[118.2148,35.0755],[118.2148,35.0755],[118.2153,35.0755],[118.2155,35.0755],[118.2163,35.0754],[118.2166,35.0754],[118.2168,35.0754],[118.2168,35.0754],[118.2168,35.075],[118.2168,35.0746],[118.2168,35.0742],[118.2168,35.0741],[118.2168,35.0741],[118.2169,35.0741],[118.2169,35.0741],[118.2171,35.0741],[118.2172,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2178,35.0741],[118.2179,35.0741],[118.2182,35.0741],[118.2182,35.0741],[118.2188,35.074],[118.2188,35.074],[118.2189,35.074],[118.2189,35.074],[118.2189,35.074],[118.2189,35.074],[118.2193,35.074],[118.2194,35.074],[118.2202,35.074],[118.2203,35.074],[118.2203,35.074],[118.2207,35.074],[118.2215,35.0739],[118.2216,35.0739],[118.2216,35.0739],[118.2215,35.0725],[118.2215,35.0725],[118.2215,35.0725],[118.2221,35.0725],[118.2226,35.0724],[118.2228,35.0724],[118.2234,35.0724],[118.224,35.0724],[118.224,35.0724],[118.224,35.072],[118.2239,35.0718],[118.2239,35.0717],[118.2239,35.0714],[118.2236,35.0699],[118.2234,35.068],[118.223,35.068],[118.2227,35.0666],[118.2219,35.0667],[118.2219,35.0667],[118.2208,35.0668],[118.2204,35.0668],[118.2202,35.0668],[118.2202,35.0668],[118.2201,35.0662],[118.22,35.0656],[118.218,35.0658],[118.2176,35.0658],[118.217,35.0659],[118.2168,35.0659],[118.2168,35.0659],[118.2154,35.0661],[118.2146,35.0662],[118.2147,35.0664],[118.2147,35.0664],[118.2147,35.0665],[118.2146,35.0665],[118.2145,35.0665],[118.2143,35.0665],[118.2142,35.0665],[118.2141,35.0665],[118.2141,35.0666],[118.2138,35.0666],[118.2137,35.0666],[118.2133,35.0666],[118.213,35.0666],[118.2129,35.0666],[118.2128,35.0666],[118.2126,35.0666],[118.2124,35.0665],[118.2122,35.0665],[118.2121,35.0665],[118.212,35.0664],[118.2118,35.0663],[118.2118,35.0662],[118.2118,35.0662],[118.2117,35.0661],[118.2117,35.066],[118.2114,35.066],[118.2107,35.0659],[118.2105,35.0659],[118.2104,35.0659],[118.2104,35.0659],[118.2103,35.0659],[118.2101,35.0659],[118.2098,35.0659],[118.2097,35.0659],[118.2093,35.0659],[118.2089,35.0658],[118.209,35.0662],[118.209,35.0663],[118.209,35.0664],[118.2089,35.0665],[118.2087,35.0668],[118.2086,35.067],[118.2084,35.0671],[118.2082,35.0672],[118.208,35.0673],[118.2079,35.0674],[118.2078,35.0675],[118.2077,35.0678],[118.2077,35.068],[118.2076,35.0681],[118.2075,35.0683],[118.2074,35.0684],[118.2074,35.0685],[118.2075,35.0686],[118.2076,35.0687],[118.2075,35.0688],[118.2074,35.0688],[118.2073,35.0687],[118.2072,35.0687],[118.207,35.0688],[118.2068,35.0688],[118.2064,35.0689],[118.2053,35.0692],[118.2043,35.0692],[118.2043,35.0692],[118.2038,35.0696],[118.2035,35.0696],[118.2034,35.0696],[118.203,35.0696],[118.2027,35.0696],[118.2027,35.0702],[118.2027,35.0706],[118.2027,35.0711],[118.2027,35.0711],[118.2027,35.0711],[118.2029,35.0711],[118.2042,35.071],[118.2043,35.071],[118.2045,35.071],[118.2045,35.072],[118.2045,35.0722],[118.2054,35.0722],[118.2054,35.0723],[118.2054,35.0728],[118.2053,35.0739],[118.2053,35.0742],[118.2053,35.0742],[118.2053,35.0743],[118.2053,35.0746],[118.2059,35.0746],[118.2064,35.0746],[118.2064,35.0747],[118.2064,35.0747],[118.2066,35.0747],[118.207,35.0747],[118.2075,35.0746],[118.2076,35.0746],[118.2076,35.0746],[118.2076,35.0746],[118.2076,35.0747],[118.2076,35.0758],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.208,35.076],[118.2079,35.0766],[118.2083,35.0766],[118.2083,35.0764],[118.2086,35.0763],[118.2087,35.0763],[118.2087,35.0763],[118.2088,35.0763],[118.2088,35.0763],[118.2092,35.0763],[118.2092,35.0763],[118.2094,35.0763],[118.2094,35.0763],[118.2095,35.0763],[118.2095,35.0763],[118.2099,35.0762],[118.21,35.0762],[118.2101,35.0762],[118.2101,35.0762],[118.2104,35.0762],[118.2105,35.0762],[118.2105,35.0762],[118.2105,35.0761],[118.2105,35.0761],[118.2106,35.0761],[118.2112,35.0764],[118.2118,35.0767],[118.2118,35.0767],[118.2119,35.0767],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.212,35.0766],[118.2121,35.0765],[118.2121,35.0765],[118.2122,35.0765],[118.2126,35.0763],[118.2132,35.0761],[118.2135,35.0759],[118.2135,35.0758],[118.2136,35.0756],[118.2137,35.0756],[118.2138,35.0756],[118.2138,35.0756],[118.2139,35.0756],[118.2139,35.0756],[118.2139,35.0756]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106006","XZQMC":"北桥村","KZMJ":1586660.92,"JSMJ":1586660.94,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2027,35.0656,118.224,35.0767]}},{"type":"Feature","id":"cunjie_4326.6","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2552,35.0359],[118.2552,35.0366],[118.2553,35.0377],[118.2553,35.0379],[118.2554,35.0383],[118.2554,35.0385],[118.2555,35.0391],[118.2555,35.0394],[118.2555,35.0395],[118.2555,35.0395],[118.2555,35.0398],[118.2555,35.0399],[118.2556,35.0405],[118.2556,35.0409],[118.2556,35.0415],[118.2557,35.0417],[118.2557,35.0425],[118.2557,35.0425],[118.2557,35.0425],[118.2557,35.043],[118.2557,35.0431],[118.2558,35.0432],[118.2558,35.0432],[118.2563,35.0432],[118.2567,35.0432],[118.257,35.0432],[118.2573,35.0432],[118.2579,35.0432],[118.2582,35.0432],[118.2583,35.0432],[118.2584,35.0443],[118.2589,35.0443],[118.2589,35.0448],[118.2589,35.0454],[118.2594,35.0454],[118.2599,35.0454],[118.26,35.0454],[118.26,35.0458],[118.26,35.046],[118.26,35.0462],[118.26,35.0472],[118.26,35.0472],[118.26,35.0482],[118.26,35.0488],[118.26,35.0492],[118.26,35.05],[118.26,35.0504],[118.2602,35.0504],[118.2607,35.0503],[118.2625,35.0503],[118.2637,35.0503],[118.2654,35.0502],[118.2657,35.0502],[118.2657,35.0504],[118.2656,35.0509],[118.2656,35.051],[118.2656,35.051],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.0517],[118.2661,35.0517],[118.2667,35.0517],[118.2672,35.0517],[118.2672,35.0517],[118.2673,35.0517],[118.2673,35.0517],[118.268,35.0516],[118.2687,35.0516],[118.269,35.0516],[118.2692,35.0516],[118.2694,35.0516],[118.2696,35.0516],[118.2698,35.0516],[118.2704,35.0516],[118.2705,35.0516],[118.2706,35.0516],[118.2708,35.0516],[118.2709,35.0512],[118.2709,35.0512],[118.2709,35.0511],[118.2709,35.0511],[118.2709,35.051],[118.2709,35.0509],[118.2709,35.0509],[118.271,35.0505],[118.271,35.0504],[118.271,35.0504],[118.271,35.0504],[118.271,35.0503],[118.271,35.0503],[118.271,35.0502],[118.271,35.0499],[118.271,35.0497],[118.271,35.0496],[118.2711,35.0493],[118.2711,35.0491],[118.2711,35.0491],[118.2711,35.0491],[118.2711,35.049],[118.2711,35.049],[118.2711,35.049],[118.2711,35.0489],[118.2711,35.0487],[118.2712,35.0483],[118.2712,35.0482],[118.2712,35.0482],[118.2712,35.0482],[118.2711,35.0482],[118.2711,35.0482],[118.2712,35.0479],[118.2712,35.0479],[118.2712,35.0477],[118.2712,35.0476],[118.2712,35.0473],[118.2712,35.0473],[118.2712,35.0473],[118.2712,35.0473],[118.2709,35.0472],[118.2709,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0472],[118.2708,35.0471],[118.2708,35.0471],[118.2708,35.047],[118.2708,35.047],[118.2709,35.047],[118.2709,35.0468],[118.271,35.0466],[118.2709,35.0465],[118.2709,35.0465],[118.2709,35.0465],[118.2709,35.0465],[118.2708,35.0464],[118.2707,35.0463],[118.2706,35.0463],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0462],[118.2706,35.0461],[118.2707,35.0459],[118.2707,35.0459],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0458],[118.2706,35.0457],[118.2706,35.0457],[118.2706,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2705,35.0457],[118.2704,35.0457],[118.2704,35.0457],[118.2704,35.0457],[118.2704,35.0456],[118.2704,35.0456],[118.2704,35.0456],[118.2704,35.0452],[118.2704,35.0451],[118.2704,35.045],[118.2704,35.045],[118.2704,35.0449],[118.2704,35.0449],[118.2704,35.0449],[118.2704,35.0447],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0446],[118.2704,35.0445],[118.2704,35.0445],[118.2704,35.0445],[118.2704,35.0443],[118.2704,35.0443],[118.2704,35.044],[118.2704,35.044],[118.2704,35.044],[118.2704,35.0439],[118.2704,35.0437],[118.2704,35.0436],[118.2704,35.0436],[118.2704,35.0435],[118.2704,35.0435],[118.2704,35.0434],[118.2704,35.0432],[118.2704,35.0432],[118.2704,35.0431],[118.2704,35.0431],[118.2704,35.043],[118.2704,35.0428],[118.2704,35.0427],[118.2704,35.0427],[118.2704,35.0427],[118.2704,35.0426],[118.2704,35.0426],[118.2703,35.0426],[118.2702,35.0426],[118.27,35.0427],[118.2698,35.0428],[118.2697,35.0428],[118.2697,35.0428],[118.2697,35.0428],[118.2697,35.0429],[118.2697,35.0431],[118.2697,35.0432],[118.2697,35.0433],[118.2697,35.0433],[118.2697,35.0435],[118.2697,35.0437],[118.2697,35.0437],[118.2696,35.0437],[118.2696,35.0437],[118.2696,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2694,35.0437],[118.2692,35.0438],[118.2691,35.0438],[118.269,35.0438],[118.269,35.0438],[118.2689,35.0438],[118.2687,35.0438],[118.2686,35.0438],[118.2686,35.0438],[118.2685,35.0438],[118.2683,35.0438],[118.2683,35.0438],[118.2681,35.0438],[118.2679,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0438],[118.2677,35.0434],[118.2677,35.0431],[118.2677,35.0429],[118.2677,35.0427],[118.2677,35.0427],[118.2676,35.0424],[118.2676,35.0419],[118.2676,35.0419],[118.2672,35.0419],[118.267,35.0419],[118.2669,35.0419],[118.2668,35.0419],[118.2665,35.0418],[118.2661,35.0418],[118.2657,35.0418],[118.2653,35.0417],[118.2652,35.0417],[118.2652,35.0417],[118.2651,35.0417],[118.2649,35.0417],[118.2647,35.0417],[118.2646,35.0417],[118.2644,35.0417],[118.2642,35.0417],[118.2638,35.0416],[118.2635,35.0416],[118.2635,35.0416],[118.2635,35.0414],[118.2635,35.0414],[118.2635,35.0414],[118.2636,35.0409],[118.2636,35.0405],[118.2636,35.0402],[118.2636,35.0402],[118.2635,35.0402],[118.2635,35.0402],[118.2633,35.0402],[118.2633,35.0402],[118.2632,35.0402],[118.263,35.0401],[118.2627,35.0401],[118.2627,35.0401],[118.2625,35.0401],[118.2622,35.04],[118.262,35.04],[118.2618,35.04],[118.2615,35.04],[118.2613,35.0399],[118.2612,35.0399],[118.2612,35.0399],[118.2608,35.0399],[118.2608,35.0399],[118.2605,35.0398],[118.2601,35.0398],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0394],[118.2601,35.0389],[118.2602,35.0384],[118.2602,35.0384],[118.2601,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0384],[118.26,35.0383],[118.26,35.0383],[118.2596,35.0383],[118.2592,35.0382],[118.2587,35.0381],[118.2587,35.0381],[118.2586,35.0381],[118.2584,35.0381],[118.2584,35.0381],[118.258,35.0381],[118.2577,35.038],[118.2576,35.038],[118.2576,35.038],[118.2576,35.038],[118.2576,35.0377],[118.2576,35.0374],[118.2576,35.0374],[118.2576,35.037],[118.2576,35.0366],[118.2576,35.0362],[118.2576,35.0359],[118.2576,35.0358],[118.2576,35.0358],[118.2577,35.0356],[118.2577,35.0354],[118.2577,35.0354],[118.2577,35.0351],[118.2577,35.0351],[118.2577,35.035],[118.2577,35.035],[118.2573,35.035],[118.2571,35.035],[118.2565,35.0349],[118.2563,35.0349],[118.2559,35.0349],[118.2557,35.0348],[118.2555,35.0348],[118.2551,35.0348],[118.2551,35.035],[118.2551,35.0352],[118.2552,35.0355],[118.2552,35.0356],[118.2552,35.0359],[118.2552,35.0359],[118.2552,35.0359]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106031","XZQMC":"道沟村","KZMJ":1349368.9,"JSMJ":1349368.86,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2551,35.0348,118.2712,35.0517]}},{"type":"Feature","id":"cunjie_4326.7","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2545,35.0512],[118.2556,35.0511],[118.2557,35.0501],[118.2576,35.0501],[118.2577,35.0502],[118.2589,35.0502],[118.2589,35.0501],[118.26,35.05],[118.26,35.0492],[118.26,35.0488],[118.26,35.0482],[118.26,35.0472],[118.26,35.0472],[118.26,35.0462],[118.26,35.046],[118.26,35.0458],[118.26,35.0454],[118.2599,35.0454],[118.2594,35.0454],[118.2589,35.0454],[118.2589,35.0448],[118.2589,35.0443],[118.2584,35.0443],[118.2583,35.0432],[118.2582,35.0432],[118.2579,35.0432],[118.2573,35.0432],[118.257,35.0432],[118.2567,35.0432],[118.2563,35.0432],[118.2558,35.0432],[118.2558,35.0432],[118.2557,35.0431],[118.2557,35.043],[118.2557,35.0425],[118.2557,35.0425],[118.2557,35.0425],[118.2557,35.0417],[118.2556,35.0415],[118.2556,35.0409],[118.2556,35.0405],[118.2555,35.0399],[118.2555,35.0398],[118.2555,35.0395],[118.2555,35.0395],[118.2555,35.0394],[118.2555,35.0391],[118.2554,35.0385],[118.2554,35.0383],[118.2553,35.0379],[118.2553,35.0377],[118.2552,35.0366],[118.2552,35.0359],[118.2549,35.0359],[118.2548,35.0359],[118.2546,35.0359],[118.2546,35.0359],[118.2545,35.0359],[118.2545,35.0359],[118.2545,35.0359],[118.2544,35.0359],[118.2544,35.0359],[118.254,35.0359],[118.2537,35.0359],[118.2537,35.0359],[118.2536,35.0359],[118.2536,35.0361],[118.2536,35.0361],[118.2536,35.0361],[118.2536,35.0361],[118.2535,35.0361],[118.253,35.0361],[118.253,35.0361],[118.2525,35.0361],[118.2525,35.0361],[118.2522,35.0361],[118.252,35.0361],[118.252,35.0361],[118.252,35.0361],[118.252,35.0361],[118.2519,35.0361],[118.2519,35.0362],[118.252,35.0363],[118.252,35.0363],[118.252,35.0368],[118.252,35.037],[118.252,35.037],[118.252,35.037],[118.252,35.037],[118.2519,35.037],[118.2517,35.037],[118.2515,35.037],[118.2515,35.037],[118.2515,35.037],[118.2514,35.037],[118.2514,35.037],[118.2513,35.037],[118.2512,35.037],[118.2511,35.037],[118.251,35.037],[118.251,35.037],[118.251,35.037],[118.2509,35.037],[118.2508,35.037],[118.2506,35.037],[118.2506,35.037],[118.2506,35.037],[118.2505,35.037],[118.2503,35.037],[118.2501,35.037],[118.2499,35.037],[118.2497,35.037],[118.2496,35.037],[118.2495,35.037],[118.2492,35.037],[118.2492,35.037],[118.2489,35.037],[118.2489,35.037],[118.2489,35.0369],[118.2489,35.0368],[118.2489,35.0363],[118.2489,35.036],[118.2488,35.0357],[118.2488,35.0357],[118.2488,35.0357],[118.2488,35.0357],[118.2484,35.0357],[118.2484,35.0357],[118.248,35.0357],[118.2475,35.0357],[118.2475,35.0357],[118.2471,35.0357],[118.2467,35.0357],[118.2465,35.0357],[118.2463,35.0357],[118.246,35.0357],[118.246,35.0357],[118.2459,35.0357],[118.2459,35.0357],[118.2459,35.0357],[118.2459,35.0362],[118.2459,35.0365],[118.2459,35.0367],[118.2459,35.0367],[118.2459,35.0368],[118.2458,35.0368],[118.2455,35.0368],[118.2454,35.0368],[118.2454,35.0368],[118.2453,35.0368],[118.2452,35.0368],[118.245,35.0368],[118.2449,35.0368],[118.2449,35.0368],[118.2447,35.0368],[118.2447,35.0368],[118.2447,35.0368],[118.2445,35.0368],[118.2442,35.0367],[118.2442,35.0367],[118.2441,35.0367],[118.2441,35.0367],[118.2441,35.0367],[118.2441,35.0367],[118.2438,35.0367],[118.2434,35.0367],[118.2433,35.0366],[118.2429,35.0366],[118.2429,35.0366],[118.2428,35.0366],[118.2425,35.0366],[118.2421,35.0365],[118.2421,35.0365],[118.2421,35.0365],[118.2421,35.0365],[118.2421,35.0365],[118.2421,35.0365],[118.242,35.0365],[118.242,35.0365],[118.2417,35.0365],[118.2417,35.0364],[118.2417,35.0364],[118.2417,35.0364],[118.2415,35.0364],[118.2415,35.0364],[118.2415,35.0364],[118.2414,35.0364],[118.2414,35.0365],[118.2414,35.0365],[118.2414,35.0365],[118.2414,35.0367],[118.2414,35.0369],[118.2414,35.037],[118.2414,35.037],[118.2414,35.0371],[118.2414,35.0372],[118.2415,35.0372],[118.2415,35.0373],[118.2415,35.0374],[118.2415,35.0375],[118.2415,35.0376],[118.2415,35.0376],[118.2414,35.0376],[118.2414,35.0377],[118.2414,35.0378],[118.2414,35.0379],[118.2414,35.038],[118.2414,35.0381],[118.2414,35.0383],[118.2414,35.0384],[118.2413,35.0384],[118.2413,35.0384],[118.2411,35.0384],[118.2411,35.0384],[118.2409,35.0384],[118.2406,35.0384],[118.2406,35.0384],[118.2404,35.0384],[118.2404,35.0383],[118.2404,35.0383],[118.2403,35.0383],[118.2402,35.0383],[118.2402,35.0383],[118.2399,35.0383],[118.2396,35.0383],[118.2393,35.0383],[118.2393,35.0383],[118.2392,35.0382],[118.2392,35.0387],[118.2392,35.0387],[118.2392,35.0388],[118.2392,35.0391],[118.2392,35.0393],[118.2392,35.0394],[118.2392,35.0395],[118.2392,35.0398],[118.2392,35.0399],[118.2392,35.0403],[118.2392,35.0403],[118.2392,35.0407],[118.2392,35.0407],[118.2391,35.041],[118.2391,35.0412],[118.2391,35.0412],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0421],[118.2391,35.0423],[118.2391,35.0423],[118.2392,35.0424],[118.2392,35.0427],[118.2392,35.0427],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0433],[118.2392,35.0435],[118.2392,35.0435],[118.2392,35.0435],[118.2392,35.0437],[118.2393,35.0441],[118.2393,35.0446],[118.2393,35.0446],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2393,35.0451],[118.2393,35.0451],[118.239,35.0451],[118.2386,35.0451],[118.2383,35.0451],[118.238,35.0452],[118.238,35.0452],[118.2379,35.0452],[118.2376,35.0452],[118.2373,35.0452],[118.2371,35.0452],[118.2367,35.0452],[118.2365,35.0452],[118.2365,35.0452],[118.2363,35.0452],[118.2359,35.0452],[118.2358,35.0453],[118.2358,35.0453],[118.2358,35.0453],[118.2356,35.0453],[118.2356,35.0453],[118.2356,35.0453],[118.2354,35.0453],[118.2354,35.0456],[118.2354,35.0459],[118.2355,35.0464],[118.2355,35.0469],[118.2355,35.0471],[118.2355,35.0471],[118.2355,35.0473],[118.2355,35.0475],[118.2355,35.0478],[118.2355,35.0482],[118.2355,35.0483],[118.2355,35.0487],[118.2355,35.0491],[118.2355,35.0492],[118.2355,35.0492],[118.2355,35.0492],[118.2355,35.0496],[118.2361,35.0495],[118.2366,35.0495],[118.2381,35.0495],[118.2385,35.0495],[118.2397,35.0495],[118.2408,35.0495],[118.2409,35.0495],[118.241,35.0495],[118.2412,35.0495],[118.2415,35.0495],[118.2416,35.0495],[118.2425,35.0495],[118.2425,35.0495],[118.2427,35.0513],[118.2436,35.0513],[118.2437,35.0513],[118.2437,35.0513],[118.2445,35.0513],[118.2446,35.0513],[118.2448,35.0513],[118.2448,35.0513],[118.2449,35.0513],[118.245,35.0519],[118.2451,35.0518],[118.2451,35.0518],[118.2453,35.0518],[118.2467,35.0518],[118.2469,35.0517],[118.2483,35.0517],[118.2485,35.0517],[118.2494,35.0517],[118.2494,35.0512],[118.2513,35.0512],[118.2516,35.0512],[118.2518,35.0512],[118.2531,35.0512],[118.254,35.0512],[118.2545,35.0512]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106030","XZQMC":"杭头村","KZMJ":2813665.27,"JSMJ":2813665.29,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2354,35.0357,118.26,35.0519]}},{"type":"Feature","id":"cunjie_4326.8","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1316,35.1066],[118.1316,35.1065],[118.1316,35.1065],[118.1315,35.1061],[118.1314,35.1055],[118.1314,35.1052],[118.1313,35.1049],[118.1313,35.1043],[118.1313,35.1042],[118.1313,35.1042],[118.1332,35.104],[118.1332,35.1039],[118.133,35.1023],[118.1329,35.1013],[118.1328,35.1011],[118.1328,35.1007],[118.1327,35.1006],[118.1326,35.0993],[118.1325,35.0986],[118.1324,35.0981],[118.1324,35.0981],[118.1323,35.0981],[118.1322,35.0981],[118.1322,35.0979],[118.1322,35.0978],[118.1321,35.0972],[118.1321,35.097],[118.1316,35.097],[118.1313,35.097],[118.1313,35.097],[118.1309,35.0971],[118.1308,35.0971],[118.1308,35.097],[118.1308,35.0965],[118.1307,35.0963],[118.1307,35.0962],[118.1307,35.0962],[118.1307,35.096],[118.1306,35.0955],[118.1306,35.0949],[118.1306,35.0949],[118.1306,35.0948],[118.1305,35.0948],[118.1305,35.0947],[118.13,35.0947],[118.1298,35.0948],[118.1295,35.0947],[118.1293,35.095],[118.1293,35.095],[118.1292,35.095],[118.1292,35.095],[118.1288,35.0951],[118.1285,35.0951],[118.1285,35.0954],[118.1284,35.0955],[118.1284,35.0958],[118.1284,35.0959],[118.1284,35.0959],[118.1283,35.0961],[118.128,35.0961],[118.1279,35.0961],[118.1278,35.0961],[118.1277,35.096],[118.1276,35.096],[118.1275,35.096],[118.1275,35.096],[118.1274,35.096],[118.1274,35.096],[118.1272,35.0959],[118.1271,35.0958],[118.1271,35.0956],[118.1271,35.0953],[118.1264,35.0954],[118.1263,35.0954],[118.1256,35.0955],[118.1254,35.0955],[118.1253,35.0955],[118.1245,35.0956],[118.1246,35.0954],[118.1246,35.0951],[118.1246,35.095],[118.1246,35.0949],[118.1246,35.0949],[118.1245,35.095],[118.1244,35.095],[118.1244,35.095],[118.1244,35.095],[118.1242,35.095],[118.124,35.095],[118.1238,35.095],[118.1237,35.095],[118.1234,35.095],[118.1234,35.0946],[118.1235,35.0938],[118.1235,35.0938],[118.1235,35.0937],[118.1236,35.0933],[118.1236,35.0932],[118.1236,35.0932],[118.1236,35.0931],[118.1236,35.093],[118.1236,35.0929],[118.1236,35.0925],[118.1233,35.0925],[118.123,35.0925],[118.1228,35.0925],[118.122,35.0925],[118.1217,35.0926],[118.1211,35.0926],[118.1211,35.0926],[118.1205,35.0926],[118.1201,35.0926],[118.12,35.0926],[118.1196,35.0926],[118.1195,35.0918],[118.1195,35.0912],[118.1192,35.0912],[118.1192,35.0912],[118.1188,35.0912],[118.1187,35.0912],[118.1185,35.0912],[118.1181,35.0912],[118.1181,35.0912],[118.118,35.0912],[118.1175,35.0912],[118.1172,35.0913],[118.1171,35.0913],[118.1167,35.0913],[118.1164,35.0913],[118.1162,35.0913],[118.1161,35.0913],[118.1157,35.0913],[118.1155,35.0913],[118.1153,35.0913],[118.115,35.0913],[118.115,35.0909],[118.1147,35.0909],[118.1145,35.091],[118.1142,35.0911],[118.1142,35.0908],[118.1142,35.0902],[118.1142,35.09],[118.1141,35.0899],[118.1139,35.0899],[118.1136,35.0899],[118.1135,35.09],[118.1134,35.09],[118.1132,35.09],[118.113,35.09],[118.113,35.0899],[118.1128,35.09],[118.1127,35.09],[118.1126,35.0901],[118.1124,35.0901],[118.1122,35.0902],[118.1122,35.0903],[118.1122,35.0905],[118.1121,35.0906],[118.112,35.0906],[118.112,35.0904],[118.112,35.0903],[118.1118,35.0903],[118.1116,35.0903],[118.1113,35.0904],[118.1112,35.0903],[118.111,35.0903],[118.1106,35.0904],[118.1105,35.0901],[118.1102,35.0898],[118.1101,35.0896],[118.1101,35.0893],[118.1101,35.0892],[118.11,35.0891],[118.1099,35.089],[118.1098,35.0889],[118.1096,35.0889],[118.1096,35.089],[118.1092,35.0889],[118.109,35.0889],[118.1087,35.089],[118.108,35.0889],[118.108,35.0888],[118.108,35.0889],[118.108,35.089],[118.108,35.0891],[118.108,35.0893],[118.108,35.0894],[118.1079,35.0896],[118.1077,35.09],[118.1074,35.0904],[118.1074,35.0905],[118.1074,35.0906],[118.1074,35.0907],[118.1074,35.0909],[118.1074,35.091],[118.1075,35.0911],[118.1075,35.0911],[118.1075,35.0912],[118.1075,35.0912],[118.1075,35.0913],[118.1075,35.0913],[118.1075,35.0913],[118.1075,35.0914],[118.1075,35.0914],[118.1075,35.0915],[118.1075,35.0916],[118.1074,35.0917],[118.1073,35.092],[118.1072,35.0921],[118.1071,35.0923],[118.1071,35.0923],[118.1071,35.0923],[118.1071,35.0923],[118.107,35.0924],[118.1069,35.0926],[118.1067,35.0929],[118.1065,35.093],[118.1064,35.0931],[118.1064,35.0932],[118.1064,35.0932],[118.1065,35.0933],[118.1065,35.0933],[118.1065,35.0935],[118.1065,35.0939],[118.1065,35.094],[118.1065,35.0941],[118.1065,35.0943],[118.1066,35.0946],[118.1066,35.0947],[118.1066,35.0949],[118.1066,35.095],[118.1066,35.0951],[118.1067,35.0952],[118.1067,35.0953],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.1069,35.0955],[118.107,35.0957],[118.1071,35.0958],[118.1072,35.0962],[118.1072,35.0964],[118.1073,35.0964],[118.1073,35.0965],[118.1075,35.097],[118.1076,35.0973],[118.1077,35.0974],[118.1078,35.0976],[118.1079,35.0979],[118.1079,35.0979],[118.108,35.0981],[118.1085,35.0978],[118.1089,35.098],[118.1091,35.0982],[118.1091,35.0982],[118.1091,35.0982],[118.1091,35.0982],[118.1092,35.0983],[118.1093,35.0983],[118.1093,35.0983],[118.1093,35.0983],[118.1094,35.0983],[118.1094,35.0983],[118.1094,35.0984],[118.1095,35.0984],[118.1096,35.0985],[118.1096,35.0986],[118.1096,35.0986],[118.1097,35.0986],[118.1097,35.0987],[118.1098,35.0987],[118.1098,35.0988],[118.1098,35.0988],[118.1099,35.0989],[118.11,35.0991],[118.1101,35.0993],[118.1101,35.0995],[118.11,35.0996],[118.1101,35.0998],[118.1101,35.0999],[118.1101,35.1],[118.1101,35.1001],[118.1107,35.1001],[118.1107,35.1001],[118.1107,35.1001],[118.1107,35.1005],[118.1102,35.1006],[118.1102,35.1009],[118.1102,35.1009],[118.1103,35.101],[118.1104,35.1011],[118.1104,35.1011],[118.1104,35.1012],[118.1104,35.1013],[118.1105,35.1013],[118.1105,35.1013],[118.1106,35.1014],[118.1106,35.1014],[118.1106,35.1014],[118.1107,35.1013],[118.1108,35.1013],[118.1108,35.1013],[118.1109,35.1014],[118.1109,35.1014],[118.111,35.1015],[118.111,35.1015],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1111,35.1016],[118.1112,35.1016],[118.1112,35.1017],[118.1112,35.1017],[118.1112,35.1017],[118.1113,35.1017],[118.1113,35.1018],[118.1113,35.1019],[118.1113,35.102],[118.1113,35.1021],[118.1113,35.1022],[118.1112,35.1022],[118.1112,35.1023],[118.111,35.1024],[118.111,35.1025],[118.111,35.1025],[118.111,35.1026],[118.111,35.1027],[118.1112,35.1028],[118.1113,35.1029],[118.1113,35.103],[118.1113,35.1031],[118.1113,35.1031],[118.1113,35.1032],[118.1113,35.1032],[118.1112,35.1032],[118.1112,35.1032],[118.1112,35.1033],[118.111,35.1034],[118.1109,35.1035],[118.1107,35.1036],[118.1107,35.1036],[118.1107,35.1037],[118.1107,35.1039],[118.1108,35.104],[118.1108,35.104],[118.1107,35.1041],[118.1107,35.1042],[118.1107,35.1042],[118.1106,35.1042],[118.1105,35.1042],[118.1105,35.1041],[118.1105,35.1041],[118.1105,35.1041],[118.1105,35.1041],[118.1104,35.104],[118.1103,35.104],[118.1103,35.1039],[118.1102,35.1039],[118.1102,35.1039],[118.1101,35.104],[118.11,35.1042],[118.1099,35.1043],[118.1098,35.1046],[118.1097,35.1046],[118.1097,35.1047],[118.1096,35.1047],[118.1096,35.1047],[118.1095,35.1047],[118.1095,35.1047],[118.1095,35.1047],[118.1095,35.1046],[118.1096,35.1045],[118.1096,35.1045],[118.1095,35.1045],[118.1094,35.1045],[118.1093,35.1046],[118.1092,35.1047],[118.1092,35.1048],[118.1092,35.1048],[118.1092,35.1049],[118.1092,35.105],[118.1093,35.1052],[118.1094,35.1054],[118.1094,35.1055],[118.1095,35.1059],[118.1095,35.106],[118.1095,35.1061],[118.1095,35.1061],[118.1096,35.1065],[118.1096,35.1065],[118.1096,35.1069],[118.1097,35.1069],[118.1097,35.1068],[118.1102,35.1068],[118.1105,35.1068],[118.1109,35.1068],[118.1113,35.1067],[118.1114,35.1071],[118.1114,35.1075],[118.1115,35.108],[118.1115,35.1082],[118.1115,35.1082],[118.1116,35.1087],[118.1116,35.1088],[118.1116,35.1089],[118.1116,35.109],[118.1116,35.1092],[118.112,35.1092],[118.1123,35.1093],[118.1123,35.1096],[118.1123,35.1098],[118.1123,35.1099],[118.1123,35.1099],[118.1123,35.1099],[118.1124,35.1099],[118.1124,35.1099],[118.1124,35.1101],[118.1124,35.1101],[118.1124,35.1101],[118.1124,35.1102],[118.1124,35.1102],[118.1125,35.1105],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1125,35.1109],[118.1126,35.1114],[118.1126,35.1119],[118.1126,35.1119],[118.1127,35.1119],[118.1129,35.1118],[118.1132,35.1118],[118.1133,35.1118],[118.1133,35.1118],[118.1136,35.1118],[118.1139,35.1117],[118.1139,35.1117],[118.1139,35.1117],[118.1139,35.1119],[118.1139,35.1122],[118.114,35.1124],[118.114,35.1125],[118.114,35.1125],[118.1143,35.1123],[118.1146,35.1122],[118.1146,35.1122],[118.1147,35.1122],[118.115,35.1121],[118.115,35.112],[118.1151,35.112],[118.1153,35.1119],[118.1156,35.1118],[118.1157,35.1118],[118.1159,35.1117],[118.1158,35.1113],[118.1161,35.1113],[118.1161,35.1113],[118.1162,35.1117],[118.1163,35.1121],[118.1163,35.1121],[118.1163,35.1121],[118.1164,35.1121],[118.1167,35.1121],[118.117,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.112],[118.1171,35.1121],[118.1171,35.1121],[118.1171,35.1124],[118.1171,35.1124],[118.1171,35.1124],[118.1174,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1177,35.1124],[118.1176,35.1129],[118.1176,35.1134],[118.1175,35.1139],[118.1175,35.1139],[118.1178,35.1139],[118.1182,35.1139],[118.1185,35.1139],[118.1186,35.1139],[118.1186,35.1139],[118.1187,35.1135],[118.1187,35.1134],[118.1188,35.1131],[118.1188,35.113],[118.1189,35.1126],[118.1189,35.1126],[118.1193,35.1126],[118.1197,35.1126],[118.1196,35.1128],[118.1195,35.113],[118.1195,35.113],[118.1193,35.1135],[118.1191,35.1139],[118.1191,35.1139],[118.1191,35.1139],[118.1196,35.114],[118.12,35.114],[118.1201,35.114],[118.1201,35.114],[118.1201,35.114],[118.1201,35.1142],[118.1201,35.1146],[118.1201,35.1149],[118.1201,35.115],[118.12,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1152],[118.1201,35.1154],[118.1201,35.1155],[118.1201,35.1155],[118.1202,35.1154],[118.1203,35.1154],[118.1205,35.1154],[118.1208,35.1154],[118.1208,35.1154],[118.1211,35.1154],[118.1212,35.1154],[118.1212,35.1154],[118.1212,35.1154],[118.1212,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.1214,35.1151],[118.122,35.1151],[118.1221,35.1151],[118.1225,35.1151],[118.1229,35.1151],[118.1233,35.115],[118.1234,35.115],[118.1234,35.115],[118.1234,35.115],[118.1235,35.115],[118.1235,35.115],[118.1235,35.115],[118.1235,35.115],[118.1238,35.115],[118.1241,35.115],[118.1242,35.115],[118.125,35.115],[118.1251,35.1149],[118.1251,35.1149],[118.1255,35.1149],[118.1255,35.1148],[118.1255,35.1148],[118.1255,35.1145],[118.1255,35.1144],[118.1255,35.1144],[118.1255,35.1144],[118.1255,35.1143],[118.1255,35.1139],[118.1255,35.1137],[118.1255,35.1137],[118.1255,35.1136],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1134],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1133],[118.1255,35.1131],[118.1262,35.1131],[118.1268,35.1131],[118.1272,35.1131],[118.1276,35.1131],[118.128,35.1131],[118.1281,35.1131],[118.1282,35.1131],[118.1282,35.1131],[118.1286,35.113],[118.1286,35.113],[118.1293,35.113],[118.1292,35.1121],[118.1292,35.1117],[118.1292,35.1117],[118.1296,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1117],[118.1301,35.1112],[118.1301,35.1112],[118.13,35.1108],[118.13,35.1108],[118.13,35.1108],[118.13,35.1104],[118.1299,35.1101],[118.1299,35.11],[118.1299,35.1099],[118.1299,35.1098],[118.1304,35.1098],[118.1308,35.1098],[118.131,35.1098],[118.1311,35.1098],[118.1311,35.1097],[118.1309,35.1095],[118.1309,35.1094],[118.1307,35.1091],[118.1305,35.1088],[118.1305,35.1086],[118.1305,35.1085],[118.1305,35.1084],[118.1304,35.1083],[118.1304,35.1081],[118.1304,35.108],[118.1303,35.1078],[118.1303,35.1075],[118.1303,35.1074],[118.1303,35.1074],[118.1304,35.1073],[118.1306,35.1072],[118.1309,35.107],[118.1312,35.1068],[118.1315,35.1066],[118.1316,35.1066],[118.1316,35.1066],[118.1316,35.1066]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106017","XZQMC":"黄庄村","KZMJ":4574525.34,"JSMJ":4574525.42,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1064,35.0888,118.1332,35.1155]}},{"type":"Feature","id":"cunjie_4326.9","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1632,35.1128],[118.1632,35.1128],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.113],[118.1632,35.1127],[118.1632,35.1125],[118.1632,35.1122],[118.1632,35.1122],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.1121],[118.1632,35.112],[118.1632,35.112],[118.1637,35.112],[118.1638,35.112],[118.1638,35.112],[118.1639,35.112],[118.1639,35.112],[118.164,35.112],[118.164,35.112],[118.164,35.1119],[118.164,35.1118],[118.164,35.1118],[118.164,35.1115],[118.164,35.1114],[118.164,35.1112],[118.164,35.1109],[118.1639,35.1106],[118.1639,35.1103],[118.1639,35.1102],[118.1639,35.11],[118.1639,35.11],[118.1639,35.11],[118.1639,35.11],[118.1641,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1643,35.11],[118.1645,35.11],[118.1647,35.1099],[118.1647,35.1099],[118.1647,35.1099],[118.1648,35.1099],[118.1648,35.1099],[118.165,35.11],[118.1652,35.11],[118.1653,35.1099],[118.1655,35.1099],[118.1654,35.1099],[118.1654,35.1097],[118.1656,35.1097],[118.1656,35.1097],[118.1657,35.1097],[118.1657,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1097],[118.1658,35.1098],[118.1658,35.1099],[118.1658,35.1099],[118.1658,35.11],[118.1659,35.1101],[118.166,35.1101],[118.166,35.1101],[118.166,35.1101],[118.1662,35.1101],[118.1663,35.1101],[118.1664,35.1101],[118.1665,35.1101],[118.1668,35.1101],[118.167,35.1101],[118.167,35.1101],[118.167,35.1101],[118.167,35.11],[118.167,35.1099],[118.167,35.1099],[118.1671,35.1099],[118.1671,35.1099],[118.1671,35.1099],[118.1673,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.1099],[118.1674,35.11],[118.1673,35.11],[118.1673,35.11],[118.1673,35.1101],[118.1674,35.1103],[118.1674,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1675,35.1106],[118.1677,35.1106],[118.1677,35.1106],[118.1677,35.1106],[118.1678,35.1106],[118.168,35.1106],[118.1681,35.1105],[118.1682,35.1105],[118.1684,35.1105],[118.1684,35.1105],[118.1685,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1687,35.1105],[118.1689,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1691,35.1105],[118.1694,35.1104],[118.1698,35.1104],[118.1698,35.1104],[118.1698,35.1104],[118.1699,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1701,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1104],[118.1702,35.1108],[118.1703,35.111],[118.1703,35.111],[118.1703,35.111],[118.1704,35.1109],[118.1704,35.1109],[118.1705,35.1109],[118.1705,35.1109],[118.1705,35.1109],[118.1706,35.1109],[118.1706,35.1109],[118.1706,35.1109],[118.1707,35.1109],[118.1709,35.1109],[118.1709,35.1109],[118.1709,35.1109],[118.171,35.1109],[118.171,35.1109],[118.1712,35.1109],[118.1712,35.1109],[118.1714,35.1109],[118.1714,35.1109],[118.1715,35.1109],[118.1718,35.1109],[118.1718,35.1109],[118.1719,35.1109],[118.172,35.1109],[118.1721,35.1109],[118.1721,35.1109],[118.1721,35.1109],[118.1722,35.111],[118.1723,35.111],[118.1724,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1725,35.111],[118.1726,35.1109],[118.1727,35.111],[118.1728,35.111],[118.1728,35.111],[118.1731,35.1109],[118.1731,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1732,35.1109],[118.1733,35.1109],[118.1733,35.1109],[118.1733,35.1109],[118.1734,35.1109],[118.1735,35.1109],[118.1735,35.1109],[118.1735,35.111],[118.1736,35.111],[118.1737,35.111],[118.1738,35.111],[118.1738,35.111],[118.1738,35.111],[118.174,35.1111],[118.1741,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1743,35.1111],[118.1745,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.1748,35.1111],[118.175,35.111],[118.175,35.111],[118.1751,35.111],[118.1752,35.1109],[118.1757,35.1108],[118.1758,35.1107],[118.1761,35.1106],[118.1764,35.1106],[118.1767,35.1104],[118.1773,35.1103],[118.1777,35.1101],[118.178,35.11],[118.1784,35.1099],[118.1784,35.1099],[118.1787,35.1098],[118.1789,35.1097],[118.179,35.1097],[118.1789,35.1095],[118.1788,35.1091],[118.1788,35.1088],[118.1788,35.1084],[118.1788,35.1081],[118.1787,35.1076],[118.1787,35.1073],[118.1787,35.107],[118.1788,35.1067],[118.1788,35.1067],[118.1789,35.1066],[118.1789,35.1066],[118.1789,35.1066],[118.1789,35.1066],[118.179,35.106],[118.1792,35.1054],[118.1792,35.1054],[118.1793,35.1048],[118.1794,35.1043],[118.1795,35.1042],[118.1795,35.104],[118.1795,35.104],[118.1796,35.1039],[118.1797,35.1037],[118.1797,35.1037],[118.1799,35.1033],[118.18,35.103],[118.18,35.1029],[118.18,35.1027],[118.1802,35.1022],[118.1803,35.1021],[118.1803,35.102],[118.1803,35.102],[118.1804,35.1019],[118.1804,35.1018],[118.1804,35.1017],[118.1805,35.1015],[118.1805,35.1014],[118.1805,35.1014],[118.1805,35.1012],[118.1806,35.1011],[118.1806,35.1011],[118.1806,35.101],[118.1806,35.101],[118.1806,35.1009],[118.1806,35.1008],[118.1806,35.1007],[118.1806,35.1007],[118.1806,35.1007],[118.1806,35.1006],[118.1806,35.1003],[118.1806,35.1001],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1806,35.1],[118.1805,35.0998],[118.1805,35.0998],[118.1805,35.0998],[118.1804,35.0997],[118.1804,35.0997],[118.1803,35.0996],[118.1803,35.0996],[118.1803,35.0995],[118.1803,35.0995],[118.1803,35.0995],[118.1802,35.0994],[118.1802,35.0994],[118.1802,35.0994],[118.1802,35.0994],[118.1801,35.0993],[118.1801,35.0992],[118.1801,35.0992],[118.18,35.099],[118.18,35.099],[118.1799,35.099],[118.1799,35.099],[118.1799,35.099],[118.1799,35.0989],[118.1798,35.0988],[118.1795,35.0988],[118.1794,35.0988],[118.1792,35.0989],[118.1791,35.0989],[118.1789,35.0989],[118.1788,35.0989],[118.1787,35.0989],[118.1787,35.0989],[118.1785,35.099],[118.1784,35.099],[118.1783,35.0991],[118.1782,35.0991],[118.1781,35.0991],[118.178,35.0991],[118.1779,35.0991],[118.1779,35.0991],[118.1778,35.0992],[118.1778,35.0992],[118.1777,35.099],[118.1776,35.0981],[118.1776,35.0979],[118.1775,35.0979],[118.1774,35.0979],[118.1773,35.0979],[118.1771,35.0979],[118.177,35.0979],[118.1769,35.0979],[118.1769,35.0979],[118.1768,35.0979],[118.1767,35.0979],[118.1767,35.0979],[118.1766,35.098],[118.1765,35.098],[118.1764,35.098],[118.1764,35.0979],[118.1763,35.0979],[118.1763,35.0978],[118.1762,35.0978],[118.1761,35.0978],[118.1758,35.0978],[118.1757,35.0971],[118.1757,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1754,35.0971],[118.1751,35.0971],[118.1745,35.0972],[118.1737,35.0973],[118.1734,35.0974],[118.1731,35.0974],[118.173,35.0974],[118.173,35.0973],[118.1729,35.0973],[118.1728,35.0966],[118.1727,35.0966],[118.1727,35.0966],[118.1725,35.0966],[118.1721,35.0966],[118.172,35.0966],[118.1718,35.0949],[118.1716,35.0949],[118.1709,35.0949],[118.1708,35.0949],[118.1708,35.0949],[118.1707,35.0951],[118.1707,35.0952],[118.1703,35.0955],[118.1703,35.0955],[118.1702,35.0956],[118.1702,35.0957],[118.1699,35.0958],[118.1697,35.096],[118.1695,35.0961],[118.1694,35.0961],[118.1692,35.0962],[118.1691,35.0962],[118.169,35.0962],[118.169,35.0962],[118.1689,35.0957],[118.1689,35.0955],[118.1688,35.0948],[118.1687,35.0944],[118.1687,35.0941],[118.1686,35.094],[118.1686,35.0939],[118.1686,35.0938],[118.1686,35.0936],[118.1686,35.0936],[118.1684,35.0936],[118.1681,35.0936],[118.168,35.0936],[118.1679,35.0936],[118.1679,35.0936],[118.1679,35.0936],[118.1678,35.0936],[118.1677,35.0936],[118.1675,35.0937],[118.1675,35.0938],[118.1673,35.0938],[118.1671,35.0938],[118.1671,35.0937],[118.1668,35.0938],[118.1665,35.0938],[118.1648,35.094],[118.1648,35.0938],[118.1647,35.0936],[118.1647,35.0936],[118.1647,35.0935],[118.1647,35.0935],[118.1647,35.0934],[118.1647,35.0934],[118.1646,35.0929],[118.1646,35.0929],[118.1646,35.0929],[118.1645,35.0926],[118.1645,35.0926],[118.1645,35.0926],[118.1643,35.0926],[118.1641,35.0926],[118.1639,35.0927],[118.1638,35.0928],[118.1637,35.0929],[118.1636,35.0931],[118.1635,35.0931],[118.1633,35.0931],[118.163,35.093],[118.1629,35.093],[118.1627,35.0931],[118.1625,35.0931],[118.1624,35.0932],[118.1623,35.0933],[118.1621,35.0934],[118.1619,35.0935],[118.1617,35.0936],[118.1615,35.0936],[118.1612,35.0937],[118.1611,35.0939],[118.1608,35.0941],[118.1603,35.0941],[118.1596,35.0941],[118.1593,35.0941],[118.1593,35.094],[118.1592,35.0939],[118.159,35.0939],[118.1589,35.0939],[118.1587,35.0939],[118.1585,35.094],[118.1584,35.0939],[118.1583,35.0939],[118.1582,35.0937],[118.1582,35.0936],[118.1581,35.0933],[118.158,35.0933],[118.1573,35.0935],[118.1568,35.0936],[118.1561,35.0938],[118.1561,35.0939],[118.1561,35.094],[118.1561,35.0941],[118.1562,35.0942],[118.1556,35.0942],[118.1556,35.0943],[118.1556,35.0955],[118.1548,35.0955],[118.1549,35.0957],[118.1549,35.0958],[118.1549,35.0958],[118.155,35.0958],[118.1551,35.0959],[118.1553,35.096],[118.1553,35.0961],[118.1553,35.0962],[118.1552,35.0967],[118.1552,35.097],[118.1554,35.097],[118.1553,35.0972],[118.1553,35.0973],[118.1553,35.0977],[118.1553,35.0979],[118.1553,35.0979],[118.1554,35.0979],[118.1554,35.0979],[118.1555,35.0977],[118.1555,35.0977],[118.1556,35.0976],[118.1556,35.0977],[118.1556,35.0977],[118.1556,35.0983],[118.156,35.0983],[118.1561,35.0983],[118.1565,35.0983],[118.1568,35.0984],[118.157,35.0985],[118.1571,35.0985],[118.1572,35.0986],[118.1572,35.0986],[118.1572,35.0987],[118.1572,35.0987],[118.1573,35.0988],[118.1573,35.0989],[118.1573,35.099],[118.1573,35.099],[118.1573,35.099],[118.1573,35.0991],[118.1573,35.0991],[118.1573,35.0991],[118.1572,35.0991],[118.1572,35.0991],[118.1572,35.0991],[118.1572,35.0991],[118.1577,35.0992],[118.1577,35.0992],[118.1578,35.1001],[118.1578,35.1007],[118.1579,35.1023],[118.1579,35.1024],[118.1581,35.1024],[118.1582,35.1024],[118.1583,35.1023],[118.1584,35.1023],[118.1585,35.1023],[118.1587,35.1022],[118.1587,35.1023],[118.1587,35.1026],[118.1587,35.1029],[118.1581,35.1029],[118.1577,35.1029],[118.157,35.1029],[118.157,35.1029],[118.1571,35.1032],[118.1571,35.1033],[118.1571,35.1034],[118.1571,35.1035],[118.1571,35.1037],[118.1566,35.1037],[118.1566,35.1042],[118.1566,35.1043],[118.1566,35.1046],[118.1566,35.1048],[118.1566,35.1048],[118.1562,35.1048],[118.1557,35.1048],[118.1557,35.1051],[118.156,35.1051],[118.1565,35.105],[118.1569,35.105],[118.1573,35.105],[118.1577,35.105],[118.1577,35.105],[118.1578,35.1053],[118.1578,35.1054],[118.1578,35.1055],[118.1578,35.1059],[118.1578,35.1061],[118.1578,35.1062],[118.1578,35.1062],[118.1577,35.1063],[118.1575,35.1063],[118.1574,35.1063],[118.1573,35.1063],[118.1572,35.1064],[118.1564,35.1064],[118.1559,35.1065],[118.1559,35.1065],[118.1557,35.1065],[118.1558,35.1069],[118.1558,35.1072],[118.1558,35.1075],[118.1559,35.1078],[118.1559,35.1081],[118.156,35.1084],[118.156,35.1086],[118.1561,35.1086],[118.1562,35.109],[118.1562,35.1092],[118.1562,35.1094],[118.1563,35.1097],[118.1564,35.1104],[118.1564,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1564,35.1107],[118.1565,35.1107],[118.1565,35.1107],[118.1569,35.1106],[118.157,35.1106],[118.157,35.1106],[118.1571,35.1106],[118.1572,35.1106],[118.1573,35.1106],[118.1574,35.1106],[118.1575,35.1105],[118.1575,35.1105],[118.1575,35.1105],[118.1576,35.1105],[118.1576,35.1105],[118.1576,35.1104],[118.1577,35.1104],[118.158,35.1104],[118.1581,35.1104],[118.1582,35.1104],[118.1587,35.1104],[118.1588,35.1104],[118.1588,35.1104],[118.1588,35.1104],[118.1589,35.1104],[118.159,35.1103],[118.159,35.1103],[118.159,35.1103],[118.159,35.1104],[118.159,35.1106],[118.159,35.1107],[118.159,35.1111],[118.159,35.1115],[118.159,35.1118],[118.159,35.1122],[118.159,35.1123],[118.159,35.1123],[118.159,35.1123],[118.159,35.1125],[118.159,35.1129],[118.159,35.1132],[118.159,35.1136],[118.159,35.1138],[118.159,35.1138],[118.159,35.1138],[118.159,35.1138],[118.1591,35.1138],[118.1594,35.1138],[118.1598,35.1137],[118.1598,35.1137],[118.1601,35.1137],[118.1601,35.1137],[118.1601,35.1137],[118.1602,35.1137],[118.1602,35.1137],[118.1603,35.1137],[118.1603,35.1137],[118.1603,35.1136],[118.1603,35.1135],[118.1603,35.1131],[118.1603,35.113],[118.1603,35.1129],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1603,35.1128],[118.1604,35.1127],[118.1604,35.1127],[118.1604,35.1127],[118.1606,35.1125],[118.1608,35.1123],[118.1608,35.1123],[118.1609,35.1122],[118.161,35.1122],[118.161,35.1122],[118.1612,35.1122],[118.1614,35.1124],[118.1614,35.1124],[118.1617,35.1126],[118.1618,35.1126],[118.162,35.1127],[118.1621,35.1128],[118.1622,35.1128],[118.1622,35.1128],[118.1622,35.1128],[118.1623,35.1128],[118.1623,35.1128],[118.1627,35.1128],[118.1632,35.1128],[118.1632,35.1128]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106011","XZQMC":"九庄村","KZMJ":3660015.04,"JSMJ":3660015.02,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1548,35.0926,118.1806,35.1138]}},{"type":"Feature","id":"cunjie_4326.10","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1564,35.1107],[118.1564,35.1104],[118.1563,35.1097],[118.1562,35.1094],[118.1562,35.1092],[118.1562,35.109],[118.1561,35.1086],[118.156,35.1086],[118.156,35.1084],[118.1559,35.1081],[118.1559,35.1078],[118.1558,35.1075],[118.1558,35.1072],[118.1558,35.1069],[118.1557,35.1065],[118.1559,35.1065],[118.1559,35.1065],[118.1564,35.1064],[118.1572,35.1064],[118.1573,35.1063],[118.1574,35.1063],[118.1575,35.1063],[118.1577,35.1063],[118.1578,35.1062],[118.1578,35.1062],[118.1578,35.1061],[118.1578,35.1059],[118.1578,35.1055],[118.1578,35.1054],[118.1578,35.1053],[118.1577,35.105],[118.1577,35.105],[118.1573,35.105],[118.1569,35.105],[118.1565,35.105],[118.156,35.1051],[118.1557,35.1051],[118.1557,35.1048],[118.1562,35.1048],[118.1566,35.1048],[118.1566,35.1048],[118.1566,35.1046],[118.1566,35.1043],[118.1566,35.1042],[118.1566,35.1037],[118.1571,35.1037],[118.1571,35.1035],[118.1571,35.1034],[118.1571,35.1033],[118.1571,35.1032],[118.157,35.1029],[118.157,35.1029],[118.1577,35.1029],[118.1581,35.1029],[118.1587,35.1029],[118.1587,35.1026],[118.1587,35.1023],[118.1587,35.1022],[118.1585,35.1023],[118.1584,35.1023],[118.1583,35.1023],[118.1582,35.1024],[118.1581,35.1024],[118.1579,35.1024],[118.1579,35.1023],[118.1578,35.1007],[118.1578,35.1001],[118.1577,35.0992],[118.1577,35.0992],[118.1572,35.0991],[118.1572,35.0991],[118.1572,35.0991],[118.1572,35.0991],[118.1573,35.0991],[118.1573,35.0991],[118.1573,35.0991],[118.1573,35.099],[118.1573,35.099],[118.1573,35.099],[118.1573,35.0989],[118.1573,35.0988],[118.1572,35.0987],[118.1572,35.0987],[118.1572,35.0986],[118.1572,35.0986],[118.1571,35.0985],[118.157,35.0985],[118.1568,35.0984],[118.1565,35.0983],[118.1561,35.0983],[118.156,35.0983],[118.1556,35.0983],[118.1556,35.0977],[118.1556,35.0977],[118.1556,35.0976],[118.1555,35.0977],[118.1555,35.0977],[118.1554,35.0979],[118.1554,35.0979],[118.1553,35.0979],[118.1553,35.0979],[118.1553,35.0977],[118.1553,35.0973],[118.1553,35.0972],[118.1554,35.097],[118.1552,35.097],[118.1552,35.0967],[118.1553,35.0962],[118.1553,35.0961],[118.1551,35.0961],[118.1549,35.0961],[118.1549,35.0963],[118.1548,35.0964],[118.1544,35.0966],[118.1539,35.0969],[118.1535,35.0971],[118.1535,35.0968],[118.153,35.0968],[118.153,35.0964],[118.1524,35.0964],[118.152,35.0964],[118.1514,35.0964],[118.1513,35.0965],[118.1513,35.0967],[118.1513,35.0969],[118.1511,35.0969],[118.1509,35.0969],[118.1507,35.0969],[118.1505,35.0969],[118.1505,35.0972],[118.1501,35.0972],[118.1501,35.097],[118.1499,35.097],[118.1498,35.0971],[118.1496,35.0971],[118.1495,35.0972],[118.1495,35.0973],[118.1493,35.0973],[118.1489,35.0973],[118.1489,35.0971],[118.1486,35.0971],[118.1486,35.0975],[118.1484,35.0975],[118.1484,35.0966],[118.1484,35.0965],[118.1483,35.0957],[118.1481,35.0957],[118.148,35.0955],[118.1476,35.0955],[118.1473,35.0956],[118.1473,35.0958],[118.1473,35.0963],[118.1473,35.0964],[118.1473,35.0966],[118.1473,35.097],[118.1473,35.097],[118.1464,35.0971],[118.1462,35.0971],[118.1457,35.0971],[118.1456,35.0971],[118.1456,35.0976],[118.1456,35.0976],[118.1451,35.0976],[118.1449,35.0976],[118.1445,35.0976],[118.1444,35.0976],[118.1442,35.0976],[118.1439,35.0976],[118.1437,35.0977],[118.1431,35.0977],[118.1419,35.0977],[118.1411,35.0978],[118.141,35.0978],[118.141,35.0985],[118.141,35.0985],[118.1405,35.0986],[118.1403,35.0987],[118.1397,35.0988],[118.1385,35.099],[118.1382,35.0991],[118.1379,35.0991],[118.1374,35.0993],[118.1369,35.0994],[118.1366,35.0995],[118.1364,35.0996],[118.1363,35.0997],[118.1362,35.0998],[118.1362,35.0999],[118.1363,35.1004],[118.1357,35.1005],[118.1349,35.1006],[118.1347,35.1006],[118.1346,35.1007],[118.134,35.1008],[118.1339,35.1008],[118.1334,35.1011],[118.1329,35.1013],[118.1329,35.1013],[118.133,35.1023],[118.1332,35.1039],[118.1332,35.104],[118.1313,35.1042],[118.1313,35.1042],[118.1313,35.1043],[118.1313,35.1049],[118.1314,35.1052],[118.1314,35.1055],[118.1315,35.1061],[118.1316,35.1065],[118.1316,35.1065],[118.1316,35.1066],[118.1318,35.1064],[118.132,35.1064],[118.1321,35.1064],[118.1323,35.1064],[118.1325,35.1064],[118.1332,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1333,35.1063],[118.1334,35.1066],[118.1334,35.1071],[118.1334,35.1071],[118.1338,35.107],[118.1343,35.107],[118.1347,35.107],[118.1348,35.107],[118.1349,35.1069],[118.1353,35.1069],[118.1353,35.1069],[118.1353,35.1069],[118.1356,35.1069],[118.136,35.1069],[118.1362,35.1068],[118.1362,35.1068],[118.1363,35.1068],[118.137,35.1068],[118.137,35.1068],[118.1372,35.1068],[118.1372,35.1068],[118.1372,35.1068],[118.1373,35.1068],[118.1373,35.1068],[118.1373,35.1068],[118.1373,35.1072],[118.1373,35.1073],[118.1374,35.1077],[118.1379,35.1077],[118.138,35.1077],[118.1381,35.1077],[118.1387,35.1076],[118.1387,35.1076],[118.1387,35.1076],[118.1387,35.1079],[118.1388,35.1083],[118.1388,35.1083],[118.1389,35.1083],[118.1389,35.1083],[118.139,35.1083],[118.1391,35.1083],[118.1391,35.1083],[118.1391,35.1082],[118.1391,35.1082],[118.1391,35.1081],[118.1391,35.108],[118.1391,35.1079],[118.1391,35.1079],[118.1393,35.1079],[118.1394,35.1079],[118.1394,35.1077],[118.1394,35.1077],[118.1394,35.1077],[118.1394,35.1076],[118.1394,35.1076],[118.1396,35.1076],[118.1396,35.1075],[118.1396,35.1075],[118.1396,35.1075],[118.1396,35.1077],[118.1396,35.108],[118.1396,35.1081],[118.1397,35.1084],[118.1397,35.1088],[118.1397,35.1091],[118.1397,35.1093],[118.1399,35.1093],[118.14,35.1092],[118.1401,35.1092],[118.1401,35.1092],[118.1401,35.1092],[118.1401,35.1093],[118.1402,35.1093],[118.1402,35.1093],[118.1402,35.1093],[118.1402,35.1096],[118.1402,35.1099],[118.1402,35.1102],[118.1402,35.1105],[118.1402,35.1105],[118.1403,35.1105],[118.1408,35.1108],[118.1408,35.1108],[118.1408,35.1107],[118.1408,35.1107],[118.1408,35.1106],[118.1408,35.1106],[118.1409,35.1107],[118.1409,35.1107],[118.1411,35.1107],[118.1412,35.1107],[118.1412,35.1107],[118.1413,35.1108],[118.1414,35.1108],[118.1415,35.1108],[118.1415,35.1109],[118.1415,35.1108],[118.1416,35.1107],[118.1416,35.1105],[118.1417,35.1105],[118.1417,35.1104],[118.1418,35.1104],[118.1418,35.1104],[118.142,35.1102],[118.142,35.1101],[118.142,35.1101],[118.142,35.11],[118.142,35.1098],[118.142,35.1098],[118.142,35.1097],[118.142,35.1097],[118.1421,35.1097],[118.1424,35.1097],[118.1425,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1426,35.1097],[118.1428,35.1096],[118.1429,35.1095],[118.143,35.1095],[118.143,35.1095],[118.143,35.1095],[118.143,35.1094],[118.143,35.1094],[118.143,35.1094],[118.143,35.1094],[118.143,35.1095],[118.143,35.1099],[118.1432,35.1099],[118.1432,35.1099],[118.1432,35.1099],[118.1435,35.1099],[118.1437,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1441,35.1099],[118.1442,35.11],[118.1443,35.11],[118.1443,35.11],[118.1443,35.11],[118.1444,35.11],[118.1445,35.11],[118.1445,35.11],[118.1446,35.11],[118.1448,35.11],[118.1448,35.11],[118.145,35.11],[118.1454,35.1101],[118.1455,35.1101],[118.1457,35.1101],[118.1457,35.1101],[118.1457,35.1101],[118.1459,35.1101],[118.1459,35.1101],[118.1459,35.11],[118.1459,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.146,35.11],[118.1462,35.11],[118.1464,35.11],[118.1464,35.11],[118.1466,35.11],[118.1466,35.11],[118.1467,35.11],[118.1467,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1468,35.11],[118.1471,35.11],[118.1472,35.11],[118.1472,35.11],[118.1473,35.11],[118.1474,35.11],[118.1474,35.11],[118.1475,35.11],[118.1475,35.11],[118.1477,35.11],[118.1477,35.11],[118.1477,35.11],[118.1477,35.11],[118.1478,35.11],[118.148,35.1101],[118.148,35.1101],[118.148,35.1102],[118.1482,35.1102],[118.1482,35.1102],[118.1482,35.1103],[118.1483,35.1103],[118.1483,35.1103],[118.1483,35.1103],[118.1485,35.1103],[118.1486,35.1103],[118.1487,35.1102],[118.1488,35.1102],[118.1489,35.1103],[118.1489,35.1103],[118.1489,35.1103],[118.1489,35.1104],[118.1489,35.1104],[118.1491,35.1104],[118.1493,35.1104],[118.1493,35.1104],[118.1494,35.1104],[118.1494,35.1104],[118.1495,35.1104],[118.1496,35.1104],[118.1496,35.1104],[118.1498,35.1104],[118.1498,35.1104],[118.1499,35.1103],[118.15,35.1103],[118.1501,35.1103],[118.1504,35.1103],[118.1505,35.1103],[118.1506,35.1104],[118.1508,35.1104],[118.1511,35.1104],[118.1512,35.1104],[118.1512,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1104],[118.1513,35.1107],[118.1513,35.111],[118.1512,35.1113],[118.1513,35.1113],[118.1514,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1516,35.1113],[118.1517,35.1113],[118.1517,35.1113],[118.1518,35.1113],[118.1519,35.1113],[118.1519,35.1113],[118.1522,35.1113],[118.1523,35.1112],[118.1523,35.1112],[118.1523,35.1111],[118.1523,35.1111],[118.1523,35.111],[118.1523,35.111],[118.1523,35.111],[118.1523,35.111],[118.1527,35.1109],[118.1527,35.1109],[118.1527,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1528,35.1109],[118.1529,35.1109],[118.1529,35.1109],[118.1529,35.1109],[118.1531,35.1109],[118.1531,35.1109],[118.1532,35.1109],[118.1532,35.1109],[118.1532,35.1109],[118.1533,35.1109],[118.1534,35.1109],[118.1536,35.1109],[118.1537,35.1109],[118.154,35.1109],[118.1542,35.1109],[118.1542,35.1108],[118.1542,35.1108],[118.1543,35.1108],[118.1545,35.1108],[118.1547,35.1108],[118.1547,35.1108],[118.1547,35.1108],[118.1548,35.1108],[118.1549,35.1108],[118.1549,35.1108],[118.1549,35.1108],[118.1551,35.1108],[118.1553,35.1108],[118.1554,35.1108],[118.1556,35.1108],[118.1558,35.1108],[118.1559,35.1108],[118.1559,35.1108],[118.1563,35.1107],[118.1564,35.1107],[118.1564,35.1107]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106018","XZQMC":"寿衣庄村","KZMJ":2829000.32,"JSMJ":2829000.32,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1313,35.0955,118.1587,35.1113]}},{"type":"Feature","id":"cunjie_4326.11","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1295,35.0947],[118.1296,35.0946],[118.1299,35.094],[118.13,35.0939],[118.1301,35.0937],[118.1303,35.0935],[118.1305,35.0935],[118.1306,35.0935],[118.1307,35.0934],[118.1309,35.093],[118.1312,35.0926],[118.1318,35.0926],[118.132,35.0926],[118.1329,35.0925],[118.1334,35.0925],[118.1334,35.0922],[118.1334,35.0922],[118.1333,35.0914],[118.1333,35.0905],[118.1329,35.0904],[118.1328,35.0903],[118.1329,35.0902],[118.1331,35.0899],[118.1333,35.0896],[118.1335,35.0893],[118.1337,35.0891],[118.1338,35.0889],[118.134,35.0885],[118.134,35.0884],[118.134,35.0882],[118.134,35.0879],[118.1343,35.0876],[118.1344,35.0875],[118.1345,35.0874],[118.1347,35.0872],[118.1347,35.0872],[118.1348,35.087],[118.1349,35.0868],[118.135,35.0867],[118.1351,35.0866],[118.1352,35.0865],[118.1353,35.0863],[118.1353,35.0862],[118.1354,35.0861],[118.1354,35.0861],[118.1354,35.0861],[118.1354,35.0861],[118.1354,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1356,35.0858],[118.1356,35.0858],[118.1357,35.0857],[118.1358,35.0855],[118.136,35.0852],[118.136,35.0852],[118.1365,35.0845],[118.1365,35.0844],[118.1366,35.0843],[118.1366,35.0843],[118.1367,35.0842],[118.1369,35.0838],[118.1372,35.0833],[118.1372,35.0833],[118.1372,35.0832],[118.1372,35.0831],[118.1373,35.083],[118.1374,35.0827],[118.1376,35.0825],[118.1377,35.0824],[118.1378,35.0823],[118.138,35.0828],[118.1381,35.0829],[118.1381,35.0828],[118.1381,35.0826],[118.1381,35.0824],[118.1381,35.0822],[118.1381,35.082],[118.1381,35.0816],[118.1381,35.0816],[118.1381,35.0813],[118.1381,35.0813],[118.138,35.0812],[118.1381,35.081],[118.1381,35.0806],[118.1381,35.0805],[118.1381,35.0805],[118.1381,35.0803],[118.1381,35.0801],[118.1382,35.0801],[118.1382,35.08],[118.1381,35.08],[118.138,35.0801],[118.1377,35.0801],[118.1376,35.0801],[118.1374,35.0801],[118.137,35.0802],[118.1365,35.0802],[118.1362,35.0803],[118.1359,35.0803],[118.1359,35.0801],[118.1359,35.0801],[118.1359,35.0797],[118.1359,35.0795],[118.1359,35.0793],[118.1359,35.0791],[118.1357,35.079],[118.1356,35.0789],[118.1351,35.0788],[118.1348,35.0787],[118.1347,35.0786],[118.1346,35.0785],[118.1345,35.0785],[118.1344,35.0784],[118.1342,35.0784],[118.1341,35.0784],[118.1339,35.0783],[118.1336,35.0781],[118.1334,35.0779],[118.1333,35.0779],[118.1327,35.0781],[118.1322,35.0783],[118.1318,35.0784],[118.1312,35.0785],[118.1305,35.0784],[118.1305,35.078],[118.1304,35.0776],[118.1304,35.0776],[118.1303,35.0775],[118.1303,35.0775],[118.1303,35.0775],[118.1303,35.0774],[118.1303,35.0774],[118.1303,35.0773],[118.1302,35.0771],[118.1301,35.0771],[118.13,35.077],[118.1298,35.0769],[118.1297,35.0768],[118.1296,35.0768],[118.1296,35.0767],[118.1294,35.077],[118.1293,35.0772],[118.1293,35.0772],[118.1292,35.0774],[118.1292,35.0774],[118.1292,35.0774],[118.1291,35.0775],[118.1275,35.0774],[118.1276,35.0771],[118.1276,35.077],[118.1272,35.077],[118.1271,35.077],[118.1271,35.0771],[118.127,35.0771],[118.1261,35.0771],[118.1251,35.0771],[118.1251,35.0771],[118.1247,35.077],[118.1245,35.077],[118.1244,35.077],[118.1243,35.077],[118.1242,35.0771],[118.1242,35.0775],[118.1242,35.0777],[118.1242,35.0786],[118.1242,35.0787],[118.1242,35.0791],[118.1242,35.0799],[118.1238,35.0798],[118.1238,35.0798],[118.1235,35.0797],[118.1236,35.0788],[118.1234,35.0788],[118.1234,35.0787],[118.1234,35.078],[118.1228,35.078],[118.1229,35.078],[118.1229,35.078],[118.1229,35.0779],[118.1228,35.0777],[118.1228,35.0773],[118.1228,35.0772],[118.1228,35.0772],[118.1228,35.077],[118.1228,35.077],[118.1228,35.0769],[118.1228,35.0769],[118.1226,35.077],[118.1221,35.0773],[118.122,35.0774],[118.1218,35.0775],[118.1214,35.0776],[118.1214,35.0777],[118.1214,35.0785],[118.1214,35.0788],[118.1213,35.0788],[118.1212,35.0791],[118.1212,35.0791],[118.1212,35.0796],[118.1211,35.0806],[118.1211,35.0813],[118.1211,35.0815],[118.1204,35.0815],[118.1203,35.0814],[118.1202,35.0814],[118.1201,35.082],[118.12,35.0827],[118.1201,35.0827],[118.1202,35.0827],[118.121,35.0828],[118.121,35.083],[118.1202,35.0829],[118.1201,35.0829],[118.12,35.0829],[118.12,35.0831],[118.1201,35.0831],[118.1202,35.0831],[118.1208,35.0832],[118.1214,35.0832],[118.1218,35.0832],[118.1218,35.0833],[118.1217,35.0834],[118.1217,35.0835],[118.1207,35.0835],[118.1202,35.0835],[118.12,35.0834],[118.12,35.0834],[118.1199,35.0835],[118.1199,35.0836],[118.1199,35.0836],[118.1199,35.0838],[118.1199,35.0845],[118.1198,35.0845],[118.1198,35.0844],[118.1196,35.0844],[118.1186,35.0844],[118.1176,35.0844],[118.1175,35.0844],[118.1176,35.0847],[118.1175,35.0847],[118.1171,35.0847],[118.1159,35.0847],[118.1156,35.0847],[118.1156,35.0853],[118.1156,35.0856],[118.1156,35.0861],[118.116,35.0862],[118.116,35.0865],[118.116,35.0872],[118.1161,35.0876],[118.1161,35.0877],[118.1161,35.0877],[118.1158,35.0877],[118.1158,35.0878],[118.1159,35.0885],[118.1159,35.0891],[118.1159,35.0897],[118.1156,35.0898],[118.1152,35.0898],[118.1151,35.0898],[118.1151,35.0898],[118.1147,35.0899],[118.1147,35.0894],[118.1147,35.0885],[118.1147,35.0878],[118.1147,35.0878],[118.1147,35.0876],[118.1147,35.0874],[118.1145,35.0874],[118.1145,35.0871],[118.1143,35.0871],[118.1142,35.0871],[118.1142,35.0871],[118.1142,35.0871],[118.1142,35.0872],[118.1139,35.0872],[118.1139,35.0872],[118.1138,35.0872],[118.1137,35.0873],[118.1137,35.0873],[118.1134,35.0873],[118.1134,35.0874],[118.1134,35.0877],[118.1134,35.0878],[118.1133,35.0878],[118.1132,35.0877],[118.1131,35.0877],[118.113,35.0877],[118.1128,35.0877],[118.1125,35.0876],[118.1124,35.0876],[118.1122,35.0876],[118.112,35.0876],[118.1115,35.0876],[118.1113,35.0876],[118.1109,35.0876],[118.1104,35.0878],[118.11,35.0879],[118.1089,35.088],[118.1081,35.0881],[118.1081,35.0883],[118.108,35.0884],[118.1079,35.0887],[118.1079,35.0888],[118.1079,35.0888],[118.108,35.0888],[118.108,35.0889],[118.1087,35.089],[118.109,35.0889],[118.1092,35.0889],[118.1096,35.089],[118.1096,35.0889],[118.1098,35.0889],[118.1099,35.089],[118.11,35.0891],[118.1101,35.0892],[118.1101,35.0893],[118.1101,35.0896],[118.1102,35.0898],[118.1105,35.0901],[118.1106,35.0904],[118.111,35.0903],[118.1112,35.0903],[118.1113,35.0904],[118.1116,35.0903],[118.1118,35.0903],[118.112,35.0903],[118.112,35.0904],[118.112,35.0906],[118.1121,35.0906],[118.1122,35.0905],[118.1122,35.0903],[118.1122,35.0902],[118.1124,35.0901],[118.1126,35.0901],[118.1127,35.09],[118.1128,35.09],[118.113,35.0899],[118.113,35.09],[118.1132,35.09],[118.1134,35.09],[118.1135,35.09],[118.1136,35.0899],[118.1139,35.0899],[118.1141,35.0899],[118.1142,35.09],[118.1142,35.0902],[118.1142,35.0908],[118.1142,35.0911],[118.1145,35.091],[118.1147,35.0909],[118.115,35.0909],[118.115,35.0913],[118.1153,35.0913],[118.1155,35.0913],[118.1157,35.0913],[118.1161,35.0913],[118.1162,35.0913],[118.1164,35.0913],[118.1167,35.0913],[118.1171,35.0913],[118.1172,35.0913],[118.1175,35.0912],[118.118,35.0912],[118.1181,35.0912],[118.1181,35.0912],[118.1185,35.0912],[118.1187,35.0912],[118.1188,35.0912],[118.1192,35.0912],[118.1192,35.0912],[118.1195,35.0912],[118.1195,35.0918],[118.1196,35.0926],[118.12,35.0926],[118.1201,35.0926],[118.1205,35.0926],[118.1211,35.0926],[118.1211,35.0926],[118.1217,35.0926],[118.122,35.0925],[118.1228,35.0925],[118.123,35.0925],[118.1233,35.0925],[118.1236,35.0925],[118.1236,35.0929],[118.1236,35.093],[118.1236,35.0931],[118.1236,35.0932],[118.1236,35.0932],[118.1236,35.0933],[118.1235,35.0937],[118.1235,35.0938],[118.1235,35.0938],[118.1234,35.0946],[118.1234,35.095],[118.1237,35.095],[118.1238,35.095],[118.124,35.095],[118.1242,35.095],[118.1244,35.095],[118.1244,35.095],[118.1244,35.095],[118.1245,35.095],[118.1246,35.0949],[118.1246,35.0949],[118.1246,35.095],[118.1246,35.0951],[118.1246,35.0954],[118.1245,35.0956],[118.1253,35.0955],[118.1254,35.0955],[118.1256,35.0955],[118.1263,35.0954],[118.1264,35.0954],[118.1271,35.0953],[118.1271,35.0956],[118.1271,35.0958],[118.1272,35.0959],[118.1274,35.096],[118.1274,35.096],[118.1275,35.096],[118.1275,35.096],[118.1276,35.096],[118.1277,35.096],[118.1278,35.0961],[118.1279,35.0961],[118.128,35.0961],[118.1283,35.0961],[118.1284,35.0959],[118.1284,35.0959],[118.1284,35.0958],[118.1284,35.0955],[118.1285,35.0954],[118.1285,35.0951],[118.1288,35.0951],[118.1292,35.095],[118.1292,35.095],[118.1293,35.095],[118.1293,35.095],[118.1295,35.0947]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106020","XZQMC":"西叠庄村","KZMJ":2898347.11,"JSMJ":2898347.14,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1079,35.0767,118.1382,35.0961]}},{"type":"Feature","id":"cunjie_4326.12","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1666,35.0799],[118.1666,35.0792],[118.1663,35.0792],[118.1662,35.0789],[118.1662,35.0784],[118.1662,35.0775],[118.166,35.0776],[118.1659,35.0776],[118.1657,35.0776],[118.1656,35.0776],[118.1655,35.0775],[118.1653,35.0775],[118.1652,35.0775],[118.1652,35.0774],[118.1652,35.0774],[118.1651,35.0773],[118.1651,35.0772],[118.1651,35.0771],[118.1651,35.0771],[118.165,35.077],[118.165,35.077],[118.165,35.0769],[118.165,35.0768],[118.1649,35.0768],[118.1648,35.0768],[118.1647,35.0767],[118.1647,35.0767],[118.1646,35.0767],[118.1646,35.0767],[118.1645,35.0766],[118.1644,35.0766],[118.1642,35.0766],[118.1638,35.0764],[118.1636,35.0764],[118.1624,35.0763],[118.1618,35.0763],[118.1616,35.0763],[118.161,35.0763],[118.1606,35.0763],[118.1604,35.0763],[118.1604,35.0763],[118.1604,35.0763],[118.1603,35.0762],[118.1602,35.0762],[118.16,35.0762],[118.1598,35.0761],[118.1595,35.0759],[118.1594,35.0759],[118.1592,35.0757],[118.1591,35.0757],[118.159,35.0756],[118.1589,35.0755],[118.1588,35.0755],[118.1585,35.0753],[118.1583,35.0752],[118.1581,35.075],[118.1579,35.0749],[118.1578,35.0748],[118.1577,35.0747],[118.1577,35.0747],[118.1577,35.0747],[118.1573,35.0744],[118.157,35.0742],[118.157,35.0741],[118.157,35.0741],[118.157,35.0741],[118.1569,35.074],[118.1568,35.0739],[118.1566,35.0739],[118.1565,35.0738],[118.1564,35.0737],[118.1563,35.0737],[118.1563,35.0736],[118.1557,35.0736],[118.1557,35.0735],[118.1555,35.0735],[118.1554,35.0735],[118.1552,35.0734],[118.1552,35.0734],[118.1548,35.0734],[118.1548,35.0731],[118.1541,35.073],[118.1533,35.073],[118.1534,35.074],[118.1527,35.074],[118.1527,35.0743],[118.1527,35.0743],[118.1522,35.0743],[118.1522,35.0743],[118.1522,35.074],[118.1522,35.073],[118.1518,35.073],[118.1518,35.0732],[118.1508,35.0732],[118.1508,35.0729],[118.1495,35.073],[118.1494,35.0731],[118.1486,35.073],[118.1486,35.0729],[118.1484,35.0729],[118.1484,35.0726],[118.1483,35.0718],[118.1483,35.0712],[118.1483,35.0711],[118.1476,35.0711],[118.1476,35.0712],[118.1476,35.0722],[118.1477,35.0728],[118.1477,35.0734],[118.1474,35.0733],[118.1474,35.0739],[118.1474,35.0739],[118.1474,35.0743],[118.1474,35.0745],[118.1473,35.0752],[118.1463,35.0745],[118.146,35.0743],[118.1447,35.0743],[118.1446,35.0743],[118.1446,35.0749],[118.1447,35.0749],[118.1448,35.075],[118.1449,35.0752],[118.1453,35.0753],[118.1454,35.077],[118.1448,35.077],[118.1446,35.077],[118.1447,35.0777],[118.1447,35.0784],[118.1446,35.0784],[118.1442,35.0784],[118.1442,35.0785],[118.1442,35.0787],[118.1442,35.0787],[118.1442,35.079],[118.1442,35.0791],[118.1437,35.079],[118.1437,35.0786],[118.1436,35.0786],[118.1435,35.0786],[118.1434,35.0786],[118.1433,35.0786],[118.1432,35.0787],[118.1432,35.0787],[118.1431,35.0787],[118.1427,35.0788],[118.1426,35.0788],[118.1425,35.0788],[118.1425,35.0788],[118.1426,35.0789],[118.1426,35.079],[118.1429,35.079],[118.143,35.079],[118.143,35.0796],[118.143,35.0797],[118.1432,35.0797],[118.1433,35.0812],[118.1433,35.0812],[118.1429,35.0812],[118.143,35.0812],[118.143,35.0813],[118.143,35.0813],[118.1431,35.0814],[118.1431,35.0814],[118.1431,35.0814],[118.1432,35.0814],[118.1432,35.0815],[118.1432,35.0815],[118.1433,35.0815],[118.1433,35.0815],[118.1434,35.0816],[118.1435,35.0817],[118.1436,35.0817],[118.1437,35.0818],[118.1437,35.0818],[118.1438,35.0819],[118.1438,35.0819],[118.1439,35.0819],[118.1439,35.082],[118.1439,35.082],[118.1439,35.0821],[118.1439,35.0822],[118.144,35.0823],[118.144,35.0823],[118.1441,35.0823],[118.1447,35.0823],[118.1448,35.0823],[118.1448,35.0819],[118.145,35.0819],[118.145,35.0819],[118.1452,35.0819],[118.1456,35.0819],[118.1466,35.0818],[118.1467,35.0818],[118.1468,35.0818],[118.1469,35.0818],[118.1479,35.0818],[118.1481,35.0818],[118.1481,35.0818],[118.1482,35.0819],[118.1481,35.0833],[118.1482,35.0834],[118.1482,35.0835],[118.1482,35.0841],[118.1482,35.0845],[118.1482,35.0848],[118.1482,35.0848],[118.1482,35.0852],[118.1483,35.0851],[118.1489,35.085],[118.1492,35.0849],[118.1491,35.0851],[118.1491,35.0854],[118.1499,35.0854],[118.15,35.0848],[118.1505,35.0848],[118.1507,35.0848],[118.1507,35.0851],[118.1507,35.0863],[118.1507,35.0878],[118.1508,35.0878],[118.151,35.0879],[118.1515,35.0885],[118.1516,35.0887],[118.1519,35.0889],[118.152,35.0891],[118.1522,35.0891],[118.1525,35.089],[118.1529,35.0889],[118.1529,35.0889],[118.153,35.0889],[118.1534,35.0888],[118.1534,35.0891],[118.1534,35.0893],[118.1534,35.0894],[118.1534,35.0895],[118.1534,35.0896],[118.1533,35.0897],[118.1535,35.0897],[118.1536,35.0896],[118.1536,35.0896],[118.1536,35.0896],[118.1537,35.0895],[118.1538,35.0895],[118.154,35.0894],[118.1541,35.0893],[118.1543,35.0893],[118.1544,35.0892],[118.1544,35.0892],[118.1545,35.0892],[118.1545,35.0891],[118.1547,35.0891],[118.1548,35.089],[118.1549,35.089],[118.155,35.089],[118.1551,35.089],[118.1552,35.0889],[118.1552,35.0889],[118.1553,35.0889],[118.1554,35.0889],[118.1555,35.0888],[118.1557,35.0888],[118.1558,35.0888],[118.1559,35.0887],[118.156,35.0886],[118.1564,35.0885],[118.1568,35.0894],[118.1572,35.0902],[118.1574,35.0901],[118.1571,35.0896],[118.1569,35.089],[118.1567,35.0885],[118.1567,35.0883],[118.1567,35.0881],[118.157,35.088],[118.1571,35.088],[118.1574,35.088],[118.1575,35.088],[118.158,35.0879],[118.1578,35.0869],[118.1581,35.0868],[118.1583,35.0868],[118.1585,35.0868],[118.1587,35.0867],[118.1587,35.0867],[118.159,35.0867],[118.1592,35.0867],[118.1594,35.0866],[118.1597,35.0866],[118.1599,35.0866],[118.1601,35.0866],[118.1607,35.0866],[118.1612,35.0866],[118.1615,35.0866],[118.1617,35.0865],[118.1622,35.0865],[118.162,35.086],[118.1628,35.086],[118.1625,35.0859],[118.1623,35.0857],[118.1623,35.0857],[118.1623,35.0856],[118.1625,35.0854],[118.1625,35.0853],[118.1625,35.0852],[118.1626,35.0852],[118.1626,35.0848],[118.1625,35.0839],[118.1627,35.084],[118.1628,35.084],[118.1628,35.0848],[118.1631,35.0848],[118.1634,35.0848],[118.1634,35.084],[118.1634,35.0839],[118.1634,35.0833],[118.1635,35.0823],[118.1638,35.0823],[118.1638,35.0824],[118.1641,35.0824],[118.1641,35.0822],[118.1641,35.0815],[118.1641,35.0815],[118.1641,35.0815],[118.1642,35.0815],[118.1642,35.0816],[118.1642,35.0816],[118.1643,35.0816],[118.1643,35.0816],[118.1643,35.0816],[118.1644,35.0808],[118.1645,35.0808],[118.1646,35.0808],[118.1648,35.0809],[118.1648,35.081],[118.1648,35.081],[118.1649,35.081],[118.1648,35.0805],[118.1648,35.0802],[118.1648,35.0801],[118.1649,35.0801],[118.1649,35.08],[118.1652,35.08],[118.1655,35.08],[118.1656,35.08],[118.1657,35.08],[118.1657,35.08],[118.1657,35.0804],[118.1657,35.0807],[118.1658,35.0807],[118.1661,35.0807],[118.1661,35.0805],[118.1661,35.0806],[118.1662,35.0806],[118.1662,35.0808],[118.1664,35.0809],[118.1664,35.081],[118.1665,35.081],[118.1666,35.0811],[118.1666,35.0803],[118.1666,35.0799]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106016","XZQMC":"后桃园村","KZMJ":2427892.87,"JSMJ":2427892.84,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1425,35.0711,118.1666,35.0902]}},{"type":"Feature","id":"cunjie_4326.13","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1245,35.077],[118.1245,35.0768],[118.1245,35.0763],[118.1244,35.0757],[118.1244,35.0754],[118.1237,35.0755],[118.1237,35.0752],[118.1236,35.0738],[118.1236,35.0728],[118.1236,35.072],[118.1235,35.0717],[118.1235,35.0714],[118.1227,35.0714],[118.1227,35.0713],[118.1227,35.0712],[118.1227,35.0711],[118.1227,35.0706],[118.1225,35.0706],[118.1225,35.0706],[118.1225,35.0703],[118.1217,35.0703],[118.1217,35.0706],[118.1214,35.0705],[118.1214,35.07],[118.1211,35.07],[118.1211,35.07],[118.121,35.07],[118.121,35.07],[118.121,35.07],[118.121,35.0702],[118.1209,35.0704],[118.1209,35.0704],[118.1209,35.0704],[118.1208,35.0703],[118.1208,35.0703],[118.1203,35.0703],[118.1203,35.0703],[118.1202,35.0703],[118.1202,35.0703],[118.1199,35.0703],[118.1196,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1194,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0703],[118.1193,35.0702],[118.1193,35.0702],[118.1193,35.0702],[118.1192,35.0702],[118.1192,35.0702],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1192,35.0703],[118.1193,35.0703],[118.1193,35.0704],[118.1193,35.0704],[118.1192,35.0705],[118.119,35.0705],[118.119,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1188,35.0705],[118.1185,35.0705],[118.1182,35.0705],[118.1178,35.0705],[118.1176,35.0705],[118.1174,35.0705],[118.1174,35.0706],[118.1174,35.0706],[118.1174,35.0706],[118.1172,35.0706],[118.117,35.0706],[118.1168,35.0706],[118.1165,35.0707],[118.1165,35.0707],[118.1164,35.0707],[118.1162,35.0707],[118.1162,35.0707],[118.1162,35.0707],[118.116,35.0707],[118.116,35.0707],[118.116,35.0707],[118.1159,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1158,35.0708],[118.1157,35.0708],[118.1157,35.0708],[118.1157,35.0708],[118.1154,35.0709],[118.1152,35.0709],[118.1151,35.071],[118.1151,35.071],[118.115,35.071],[118.1149,35.071],[118.1147,35.071],[118.1147,35.0711],[118.1146,35.0711],[118.1146,35.0711],[118.1145,35.0711],[118.1145,35.0711],[118.1145,35.0711],[118.1143,35.0711],[118.1142,35.0711],[118.1142,35.0712],[118.1141,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.114,35.0712],[118.1139,35.0712],[118.1138,35.0712],[118.1138,35.0712],[118.1137,35.0713],[118.1136,35.0713],[118.1135,35.0713],[118.1134,35.0713],[118.1133,35.0713],[118.1132,35.0714],[118.1131,35.0714],[118.1129,35.0714],[118.1127,35.0715],[118.1126,35.0715],[118.1126,35.0715],[118.1125,35.0715],[118.1125,35.0715],[118.1125,35.0715],[118.1124,35.0715],[118.1124,35.0715],[118.1122,35.0715],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0716],[118.1121,35.0718],[118.1121,35.0718],[118.1122,35.072],[118.1122,35.0721],[118.1122,35.0722],[118.1122,35.0723],[118.1122,35.0723],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0724],[118.1122,35.0725],[118.1123,35.0726],[118.1123,35.0726],[118.1123,35.0726],[118.1122,35.0727],[118.1118,35.0727],[118.1117,35.0728],[118.1117,35.0728],[118.1113,35.0728],[118.111,35.0729],[118.1106,35.073],[118.1106,35.073],[118.1106,35.0732],[118.1106,35.0736],[118.1106,35.0739],[118.1106,35.0739],[118.1106,35.0739],[118.1106,35.0741],[118.1107,35.0744],[118.1107,35.0749],[118.1107,35.0749],[118.1107,35.0752],[118.1107,35.0756],[118.1108,35.076],[118.1108,35.0764],[118.1108,35.0765],[118.1108,35.0766],[118.1108,35.0767],[118.1108,35.0767],[118.1108,35.0769],[118.1108,35.0769],[118.1108,35.077],[118.1108,35.0772],[118.1108,35.0772],[118.1108,35.0772],[118.1108,35.0772],[118.1107,35.0772],[118.1107,35.0772],[118.1106,35.0772],[118.1101,35.0772],[118.1101,35.0772],[118.11,35.077],[118.11,35.077],[118.11,35.0769],[118.11,35.0769],[118.11,35.0767],[118.11,35.0767],[118.1097,35.0767],[118.1094,35.0768],[118.1094,35.0769],[118.109,35.0769],[118.109,35.0769],[118.109,35.0769],[118.109,35.077],[118.109,35.0771],[118.1089,35.0771],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0772],[118.1089,35.0773],[118.1089,35.0773],[118.1089,35.0774],[118.1089,35.0774],[118.1089,35.0775],[118.1088,35.0775],[118.1088,35.0775],[118.1088,35.0776],[118.1088,35.0776],[118.1088,35.0777],[118.1088,35.0777],[118.1088,35.0778],[118.1089,35.0781],[118.1089,35.0781],[118.1089,35.0784],[118.1089,35.0785],[118.1091,35.0787],[118.109,35.0787],[118.109,35.0787],[118.109,35.0787],[118.1088,35.0787],[118.1087,35.0787],[118.1083,35.0787],[118.1083,35.0787],[118.1079,35.0787],[118.1075,35.0787],[118.107,35.0787],[118.107,35.0787],[118.107,35.0787],[118.107,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0787],[118.1069,35.0788],[118.1069,35.0788],[118.1069,35.0788],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.0789],[118.1069,35.079],[118.1069,35.079],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.1069,35.0791],[118.107,35.0792],[118.107,35.0792],[118.107,35.0792],[118.107,35.0793],[118.1069,35.0793],[118.1069,35.0794],[118.1069,35.0794],[118.1069,35.0795],[118.1068,35.0795],[118.1067,35.0795],[118.1067,35.0795],[118.1067,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1066,35.0795],[118.1064,35.0795],[118.1064,35.0795],[118.1061,35.0795],[118.106,35.0796],[118.106,35.0796],[118.106,35.0796],[118.106,35.0796],[118.1059,35.0796],[118.1059,35.0796],[118.1057,35.0798],[118.1057,35.0798],[118.1057,35.0799],[118.1057,35.0799],[118.1056,35.08],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0801],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0802],[118.1055,35.0803],[118.1055,35.0803],[118.1055,35.0803],[118.1055,35.0804],[118.1055,35.0805],[118.1055,35.0805],[118.1055,35.0806],[118.1055,35.0806],[118.1055,35.0806],[118.1055,35.0807],[118.1055,35.0807],[118.1056,35.0808],[118.1056,35.0808],[118.1056,35.0809],[118.1056,35.0809],[118.1057,35.0811],[118.1057,35.0812],[118.1057,35.0812],[118.1057,35.0815],[118.1057,35.0817],[118.1057,35.0818],[118.1058,35.0819],[118.1058,35.082],[118.1058,35.082],[118.1058,35.0821],[118.1058,35.0821],[118.1058,35.0821],[118.1058,35.0821],[118.1061,35.0821],[118.1063,35.0821],[118.1064,35.0822],[118.1066,35.0822],[118.1066,35.0822],[118.1066,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1067,35.0822],[118.1068,35.0822],[118.1067,35.0822],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0823],[118.1067,35.0824],[118.1067,35.0824],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1067,35.0825],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0824],[118.1069,35.0825],[118.107,35.0825],[118.107,35.0825],[118.107,35.0824],[118.1071,35.0824],[118.1071,35.0824],[118.1071,35.0825],[118.1071,35.0825],[118.1071,35.0826],[118.1071,35.0826],[118.1071,35.0826],[118.1071,35.0827],[118.107,35.0828],[118.107,35.0828],[118.1069,35.0829],[118.1069,35.0829],[118.1069,35.0829],[118.1069,35.083],[118.1069,35.083],[118.1069,35.0831],[118.1069,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1068,35.0831],[118.1067,35.0833],[118.1066,35.0835],[118.1066,35.0835],[118.1066,35.0835],[118.1066,35.0836],[118.1067,35.0836],[118.1068,35.0837],[118.1068,35.0837],[118.1069,35.0838],[118.1069,35.0838],[118.107,35.0838],[118.1071,35.0838],[118.1071,35.0838],[118.1071,35.0839],[118.107,35.084],[118.1069,35.0841],[118.1069,35.0842],[118.1069,35.0843],[118.1069,35.0844],[118.1069,35.0844],[118.1069,35.0844],[118.1069,35.0844],[118.1068,35.0845],[118.1068,35.0845],[118.1067,35.0845],[118.1066,35.0845],[118.1066,35.0846],[118.1065,35.0846],[118.1064,35.0846],[118.1064,35.0846],[118.1063,35.0847],[118.1062,35.0848],[118.1061,35.0848],[118.106,35.0849],[118.1059,35.085],[118.1057,35.0851],[118.1057,35.0851],[118.1057,35.0851],[118.1057,35.0852],[118.1056,35.0852],[118.1056,35.0853],[118.1055,35.0853],[118.1054,35.0855],[118.1054,35.0856],[118.1053,35.0857],[118.1052,35.0859],[118.1051,35.086],[118.1051,35.086],[118.1051,35.0861],[118.1053,35.0862],[118.1055,35.0863],[118.1055,35.0863],[118.1058,35.0864],[118.1061,35.0866],[118.1062,35.0866],[118.1062,35.0866],[118.1063,35.0867],[118.1066,35.0868],[118.1066,35.0868],[118.1066,35.0868],[118.107,35.0869],[118.1073,35.087],[118.1077,35.0871],[118.108,35.0871],[118.108,35.0871],[118.1081,35.0872],[118.1082,35.0872],[118.1082,35.0873],[118.1083,35.0874],[118.1083,35.0875],[118.1082,35.0878],[118.1082,35.0878],[118.1081,35.0881],[118.1081,35.0881],[118.1089,35.088],[118.11,35.0879],[118.1104,35.0878],[118.1109,35.0876],[118.1113,35.0876],[118.1115,35.0876],[118.112,35.0876],[118.1122,35.0876],[118.1124,35.0876],[118.1125,35.0876],[118.1128,35.0877],[118.113,35.0877],[118.1131,35.0877],[118.1132,35.0877],[118.1133,35.0878],[118.1134,35.0878],[118.1134,35.0877],[118.1134,35.0874],[118.1134,35.0873],[118.1137,35.0873],[118.1137,35.0873],[118.1138,35.0872],[118.1139,35.0872],[118.1139,35.0872],[118.1142,35.0872],[118.1142,35.0871],[118.1142,35.0871],[118.1142,35.0871],[118.1143,35.0871],[118.1145,35.0871],[118.1145,35.0874],[118.1147,35.0874],[118.1147,35.0876],[118.1147,35.0878],[118.1147,35.0878],[118.1147,35.0885],[118.1147,35.0894],[118.1147,35.0899],[118.1151,35.0898],[118.1151,35.0898],[118.1152,35.0898],[118.1156,35.0898],[118.1159,35.0897],[118.1159,35.0891],[118.1159,35.0885],[118.1158,35.0878],[118.1158,35.0877],[118.1161,35.0877],[118.1161,35.0877],[118.1161,35.0876],[118.116,35.0872],[118.116,35.0865],[118.116,35.0862],[118.1156,35.0861],[118.1156,35.0856],[118.1156,35.0853],[118.1156,35.0847],[118.1159,35.0847],[118.1171,35.0847],[118.1175,35.0847],[118.1176,35.0847],[118.1175,35.0844],[118.1176,35.0844],[118.1186,35.0844],[118.1196,35.0844],[118.1198,35.0844],[118.1198,35.0845],[118.1199,35.0845],[118.1199,35.0838],[118.1199,35.0836],[118.1199,35.0836],[118.1199,35.0835],[118.12,35.0834],[118.12,35.0834],[118.1202,35.0835],[118.1207,35.0835],[118.1217,35.0835],[118.1217,35.0834],[118.1218,35.0833],[118.1218,35.0832],[118.1214,35.0832],[118.1208,35.0832],[118.1202,35.0831],[118.1201,35.0831],[118.12,35.0831],[118.12,35.0829],[118.1201,35.0829],[118.1202,35.0829],[118.121,35.083],[118.121,35.0828],[118.1202,35.0827],[118.1201,35.0827],[118.12,35.0827],[118.1201,35.082],[118.1202,35.0814],[118.1203,35.0814],[118.1204,35.0815],[118.1211,35.0815],[118.1211,35.0813],[118.1211,35.0806],[118.1212,35.0796],[118.1212,35.0791],[118.1212,35.0791],[118.1213,35.0788],[118.1214,35.0788],[118.1214,35.0785],[118.1214,35.0777],[118.1214,35.0776],[118.1218,35.0775],[118.122,35.0774],[118.1221,35.0773],[118.1226,35.077],[118.1228,35.0769],[118.1228,35.0769],[118.1228,35.077],[118.1228,35.077],[118.1228,35.0772],[118.1228,35.0772],[118.1228,35.0773],[118.1228,35.0777],[118.1229,35.0779],[118.1229,35.078],[118.1229,35.078],[118.1228,35.078],[118.1234,35.078],[118.1234,35.0787],[118.1234,35.0788],[118.1236,35.0788],[118.1235,35.0797],[118.1238,35.0798],[118.1238,35.0798],[118.1242,35.0799],[118.1242,35.0791],[118.1242,35.0787],[118.1242,35.0786],[118.1242,35.0777],[118.1242,35.0775],[118.1242,35.0771],[118.1243,35.077],[118.1244,35.077],[118.1245,35.077]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106021","XZQMC":"卢家湖村","KZMJ":2221513.53,"JSMJ":2221513.46,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1051,35.07,118.1245,35.0899]}},{"type":"Feature","id":"cunjie_4326.14","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1553,35.0961],[118.1553,35.096],[118.1551,35.0959],[118.155,35.0958],[118.1549,35.0958],[118.1549,35.0958],[118.1549,35.0957],[118.1548,35.0955],[118.1556,35.0955],[118.1556,35.0943],[118.1556,35.0942],[118.1562,35.0942],[118.1561,35.0941],[118.1561,35.094],[118.1561,35.0939],[118.1561,35.0938],[118.1561,35.0938],[118.156,35.0936],[118.156,35.0933],[118.1558,35.0933],[118.1555,35.0934],[118.1554,35.0934],[118.1553,35.0933],[118.1553,35.0932],[118.1552,35.0932],[118.1552,35.0932],[118.1546,35.093],[118.1549,35.0929],[118.1555,35.0927],[118.1555,35.0924],[118.1554,35.0922],[118.1554,35.0922],[118.1554,35.0921],[118.1554,35.0921],[118.1554,35.092],[118.1553,35.0918],[118.1554,35.0918],[118.1554,35.0917],[118.1555,35.0915],[118.1556,35.0912],[118.1557,35.0912],[118.1557,35.091],[118.1559,35.091],[118.156,35.0909],[118.1561,35.0908],[118.1561,35.0907],[118.156,35.0906],[118.156,35.0906],[118.156,35.0905],[118.1559,35.0904],[118.1559,35.0904],[118.1559,35.0903],[118.1559,35.0902],[118.1559,35.0901],[118.1559,35.0901],[118.1559,35.09],[118.1566,35.0898],[118.1568,35.0903],[118.1572,35.0902],[118.1568,35.0894],[118.1564,35.0885],[118.156,35.0886],[118.1559,35.0887],[118.1558,35.0888],[118.1557,35.0888],[118.1555,35.0888],[118.1554,35.0889],[118.1553,35.0889],[118.1552,35.0889],[118.1552,35.0889],[118.1551,35.089],[118.155,35.089],[118.1549,35.089],[118.1548,35.089],[118.1547,35.0891],[118.1545,35.0891],[118.1545,35.0892],[118.1544,35.0892],[118.1544,35.0892],[118.1543,35.0893],[118.1541,35.0893],[118.154,35.0894],[118.1538,35.0895],[118.1537,35.0895],[118.1536,35.0896],[118.1536,35.0896],[118.1536,35.0896],[118.1535,35.0897],[118.1533,35.0897],[118.1534,35.0896],[118.1534,35.0895],[118.1534,35.0894],[118.1534,35.0893],[118.1534,35.0891],[118.1534,35.0888],[118.153,35.0889],[118.1529,35.0889],[118.1529,35.0889],[118.1525,35.089],[118.1522,35.0891],[118.152,35.0891],[118.1519,35.0889],[118.1516,35.0887],[118.1515,35.0885],[118.151,35.0879],[118.1508,35.0878],[118.1507,35.0878],[118.1507,35.0863],[118.1507,35.0851],[118.1507,35.0848],[118.1505,35.0848],[118.15,35.0848],[118.1499,35.0854],[118.1491,35.0854],[118.1491,35.0851],[118.1492,35.0849],[118.1489,35.085],[118.1483,35.0851],[118.1482,35.0852],[118.1482,35.0848],[118.1482,35.0848],[118.1482,35.0845],[118.1482,35.0841],[118.1482,35.0835],[118.1482,35.0834],[118.1481,35.0833],[118.1482,35.0819],[118.1481,35.0818],[118.1481,35.0818],[118.1479,35.0818],[118.1469,35.0818],[118.1468,35.0818],[118.1467,35.0818],[118.1466,35.0818],[118.1456,35.0819],[118.1452,35.0819],[118.145,35.0819],[118.145,35.0819],[118.1448,35.0819],[118.1448,35.0823],[118.1447,35.0823],[118.1441,35.0823],[118.144,35.0823],[118.144,35.0823],[118.1439,35.0822],[118.1439,35.0821],[118.1439,35.082],[118.1439,35.082],[118.1439,35.0819],[118.1438,35.0819],[118.1438,35.0819],[118.1437,35.0818],[118.1437,35.0818],[118.1436,35.0817],[118.1435,35.0817],[118.1434,35.0816],[118.1433,35.0815],[118.1433,35.0815],[118.1432,35.0815],[118.1432,35.0815],[118.1432,35.0814],[118.1431,35.0814],[118.1431,35.0814],[118.1431,35.0814],[118.143,35.0813],[118.143,35.0813],[118.143,35.0812],[118.1429,35.0812],[118.1429,35.0812],[118.1427,35.0812],[118.1426,35.0812],[118.1424,35.0812],[118.1422,35.0812],[118.1421,35.0811],[118.142,35.081],[118.1418,35.0809],[118.1413,35.081],[118.1412,35.0811],[118.1412,35.0811],[118.1412,35.0812],[118.1412,35.0812],[118.1413,35.0814],[118.1414,35.0815],[118.1415,35.0816],[118.1415,35.0816],[118.1417,35.0818],[118.1419,35.0821],[118.142,35.0823],[118.1421,35.0824],[118.1421,35.0825],[118.1422,35.0826],[118.1422,35.0827],[118.1423,35.0828],[118.1423,35.0829],[118.1424,35.083],[118.1424,35.0831],[118.1424,35.0832],[118.1425,35.0833],[118.1425,35.0833],[118.1425,35.0834],[118.1426,35.0837],[118.1425,35.0839],[118.1423,35.084],[118.1422,35.084],[118.1421,35.0841],[118.142,35.0841],[118.1413,35.0842],[118.1408,35.0842],[118.1406,35.0842],[118.1404,35.0842],[118.1402,35.0842],[118.14,35.0841],[118.1397,35.0842],[118.1391,35.0833],[118.139,35.083],[118.1389,35.0829],[118.1389,35.0828],[118.1389,35.0827],[118.1388,35.0827],[118.1388,35.0826],[118.1388,35.0825],[118.1388,35.0824],[118.1388,35.0824],[118.1388,35.0823],[118.1388,35.0822],[118.1388,35.0818],[118.1388,35.0817],[118.1387,35.0816],[118.1387,35.0815],[118.1387,35.0814],[118.1387,35.0814],[118.1387,35.0814],[118.1381,35.0813],[118.1381,35.0816],[118.1381,35.0816],[118.1381,35.082],[118.1381,35.0822],[118.1381,35.0824],[118.1381,35.0826],[118.1381,35.0828],[118.1381,35.0829],[118.138,35.0828],[118.1378,35.0823],[118.1377,35.0824],[118.1376,35.0825],[118.1374,35.0827],[118.1373,35.083],[118.1372,35.0831],[118.1372,35.0832],[118.1372,35.0833],[118.1372,35.0833],[118.1369,35.0838],[118.1367,35.0842],[118.1366,35.0843],[118.1366,35.0843],[118.1365,35.0844],[118.1365,35.0845],[118.136,35.0852],[118.136,35.0852],[118.1358,35.0855],[118.1357,35.0857],[118.1356,35.0858],[118.1356,35.0858],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1355,35.086],[118.1354,35.086],[118.1354,35.0861],[118.1354,35.0861],[118.1354,35.0861],[118.1354,35.0861],[118.1353,35.0862],[118.1353,35.0863],[118.1352,35.0865],[118.1351,35.0866],[118.135,35.0867],[118.1349,35.0868],[118.1348,35.087],[118.1347,35.0872],[118.1347,35.0872],[118.1345,35.0874],[118.1344,35.0875],[118.1343,35.0876],[118.134,35.0879],[118.134,35.0882],[118.134,35.0884],[118.134,35.0885],[118.1338,35.0889],[118.1337,35.0891],[118.1335,35.0893],[118.1333,35.0896],[118.1331,35.0899],[118.1329,35.0902],[118.1328,35.0903],[118.1329,35.0904],[118.1333,35.0905],[118.1333,35.0914],[118.1334,35.0922],[118.1334,35.0922],[118.1334,35.0925],[118.1329,35.0925],[118.132,35.0926],[118.1318,35.0926],[118.1312,35.0926],[118.1309,35.093],[118.1307,35.0934],[118.1306,35.0935],[118.1305,35.0935],[118.1303,35.0935],[118.1301,35.0937],[118.13,35.0939],[118.1299,35.094],[118.1296,35.0946],[118.1295,35.0947],[118.1298,35.0948],[118.13,35.0947],[118.1305,35.0947],[118.1305,35.0948],[118.1306,35.0948],[118.1306,35.0949],[118.1306,35.0949],[118.1306,35.0955],[118.1307,35.096],[118.1307,35.0962],[118.1307,35.0962],[118.1307,35.0963],[118.1308,35.0965],[118.1308,35.097],[118.1308,35.0971],[118.1309,35.0971],[118.1313,35.097],[118.1313,35.097],[118.1316,35.097],[118.1321,35.097],[118.1321,35.0972],[118.1322,35.0978],[118.1322,35.0979],[118.1322,35.0981],[118.1323,35.0981],[118.1324,35.0981],[118.1324,35.0981],[118.1325,35.0986],[118.1326,35.0993],[118.1327,35.1006],[118.1328,35.1007],[118.1328,35.1011],[118.1329,35.1013],[118.1329,35.1013],[118.1334,35.1011],[118.1339,35.1008],[118.134,35.1008],[118.1346,35.1007],[118.1347,35.1006],[118.1349,35.1006],[118.1357,35.1005],[118.1363,35.1004],[118.1362,35.0999],[118.1362,35.0998],[118.1363,35.0997],[118.1364,35.0996],[118.1366,35.0995],[118.1369,35.0994],[118.1374,35.0993],[118.1379,35.0991],[118.1382,35.0991],[118.1385,35.099],[118.1397,35.0988],[118.1403,35.0987],[118.1405,35.0986],[118.141,35.0985],[118.141,35.0985],[118.141,35.0978],[118.1411,35.0978],[118.1419,35.0977],[118.1431,35.0977],[118.1437,35.0977],[118.1439,35.0976],[118.1442,35.0976],[118.1444,35.0976],[118.1445,35.0976],[118.1449,35.0976],[118.1451,35.0976],[118.1456,35.0976],[118.1456,35.0976],[118.1456,35.0971],[118.1457,35.0971],[118.1462,35.0971],[118.1464,35.0971],[118.1473,35.097],[118.1473,35.097],[118.1473,35.0966],[118.1473,35.0964],[118.1473,35.0963],[118.1473,35.0958],[118.1473,35.0956],[118.1476,35.0955],[118.148,35.0955],[118.1481,35.0957],[118.1483,35.0957],[118.1484,35.0965],[118.1484,35.0966],[118.1484,35.0975],[118.1486,35.0975],[118.1486,35.0971],[118.1489,35.0971],[118.1489,35.0973],[118.1493,35.0973],[118.1495,35.0973],[118.1495,35.0972],[118.1496,35.0971],[118.1498,35.0971],[118.1499,35.097],[118.1501,35.097],[118.1501,35.0972],[118.1505,35.0972],[118.1505,35.0969],[118.1507,35.0969],[118.1509,35.0969],[118.1511,35.0969],[118.1513,35.0969],[118.1513,35.0967],[118.1513,35.0965],[118.1514,35.0964],[118.152,35.0964],[118.1524,35.0964],[118.153,35.0964],[118.153,35.0968],[118.1535,35.0968],[118.1535,35.0971],[118.1539,35.0969],[118.1544,35.0966],[118.1548,35.0964],[118.1549,35.0963],[118.1549,35.0961],[118.1551,35.0961],[118.1553,35.0961]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106019","XZQMC":"东叠庄村","KZMJ":3121302.34,"JSMJ":3121302.45,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1295,35.0809,118.1572,35.1013]}},{"type":"Feature","id":"cunjie_4326.15","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1798,35.0988],[118.1798,35.0988],[118.1798,35.0988],[118.1797,35.0988],[118.1797,35.0988],[118.1797,35.0988],[118.1797,35.0987],[118.1796,35.0986],[118.1797,35.0985],[118.1797,35.0985],[118.1798,35.0983],[118.1798,35.098],[118.18,35.0978],[118.18,35.0977],[118.1801,35.0975],[118.1801,35.0974],[118.1801,35.0973],[118.18,35.0971],[118.18,35.097],[118.18,35.097],[118.18,35.0968],[118.1799,35.0967],[118.1799,35.0967],[118.1799,35.0967],[118.1799,35.0966],[118.1799,35.0966],[118.1799,35.0966],[118.1799,35.0965],[118.1799,35.0965],[118.1799,35.0965],[118.1798,35.0964],[118.1798,35.0964],[118.1797,35.0963],[118.1797,35.0961],[118.1801,35.0961],[118.1803,35.0961],[118.1811,35.0961],[118.1811,35.0961],[118.1812,35.0956],[118.1812,35.0956],[118.1812,35.0952],[118.1812,35.0951],[118.1814,35.0951],[118.1816,35.0951],[118.1816,35.0951],[118.1817,35.0951],[118.1817,35.0951],[118.1823,35.0952],[118.1828,35.0952],[118.1828,35.0952],[118.1828,35.0952],[118.1828,35.095],[118.1828,35.0948],[118.1828,35.0947],[118.1829,35.0942],[118.1829,35.0942],[118.1829,35.0941],[118.1829,35.0941],[118.1829,35.0936],[118.1829,35.0936],[118.1829,35.0935],[118.1829,35.0934],[118.1829,35.0934],[118.1829,35.0932],[118.183,35.0931],[118.183,35.093],[118.183,35.0929],[118.183,35.0929],[118.183,35.0929],[118.1835,35.093],[118.1841,35.093],[118.1847,35.093],[118.1848,35.0925],[118.1848,35.092],[118.1849,35.0917],[118.1849,35.0915],[118.1849,35.0915],[118.1849,35.0914],[118.1849,35.0914],[118.1849,35.0914],[118.1849,35.0913],[118.1851,35.0914],[118.1856,35.0914],[118.1862,35.0915],[118.1868,35.0915],[118.1868,35.0915],[118.1868,35.0916],[118.1868,35.0916],[118.1868,35.0916],[118.187,35.0916],[118.187,35.0915],[118.187,35.0915],[118.187,35.0913],[118.187,35.0913],[118.187,35.0912],[118.1871,35.0907],[118.1872,35.0902],[118.1872,35.0897],[118.1872,35.0897],[118.1872,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1874,35.0897],[118.1877,35.0898],[118.1879,35.0898],[118.1882,35.0898],[118.1889,35.0899],[118.1894,35.0899],[118.1896,35.09],[118.1897,35.09],[118.1898,35.09],[118.1902,35.09],[118.1902,35.09],[118.1903,35.09],[118.1906,35.09],[118.1909,35.0901],[118.1909,35.0901],[118.1909,35.09],[118.191,35.0896],[118.191,35.0892],[118.191,35.0891],[118.191,35.0889],[118.1911,35.0886],[118.1911,35.0883],[118.1911,35.0883],[118.1906,35.0882],[118.1905,35.0882],[118.1905,35.0882],[118.1905,35.0882],[118.1898,35.0881],[118.1895,35.0881],[118.1892,35.0881],[118.1889,35.088],[118.1888,35.088],[118.1886,35.088],[118.1886,35.088],[118.1881,35.088],[118.1878,35.0879],[118.1876,35.0879],[118.1874,35.0879],[118.1874,35.0879],[118.1874,35.0879],[118.1875,35.0875],[118.1875,35.0872],[118.1873,35.0872],[118.1873,35.0872],[118.1873,35.0872],[118.1871,35.0872],[118.1871,35.0872],[118.187,35.0872],[118.1867,35.0872],[118.1865,35.0872],[118.1865,35.0872],[118.1859,35.0872],[118.1858,35.0872],[118.1855,35.0872],[118.1854,35.0872],[118.1853,35.0872],[118.1852,35.0872],[118.1851,35.0872],[118.185,35.0872],[118.1848,35.0873],[118.1848,35.0873],[118.1848,35.0873],[118.1848,35.0873],[118.1847,35.0873],[118.1846,35.0873],[118.1845,35.0873],[118.1845,35.0873],[118.1844,35.0873],[118.1843,35.0873],[118.1843,35.0873],[118.1842,35.0873],[118.1841,35.0872],[118.1841,35.0872],[118.1841,35.0872],[118.1839,35.0872],[118.1839,35.0872],[118.1838,35.0872],[118.1838,35.0872],[118.1838,35.0869],[118.1838,35.0863],[118.1838,35.0862],[118.1839,35.0861],[118.1839,35.086],[118.1839,35.086],[118.1839,35.0858],[118.1839,35.0856],[118.1839,35.0856],[118.1839,35.0856],[118.184,35.0854],[118.184,35.0854],[118.184,35.0854],[118.1843,35.0854],[118.1847,35.0854],[118.1847,35.0854],[118.185,35.0854],[118.1852,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0854],[118.1853,35.0853],[118.1853,35.0852],[118.1853,35.0852],[118.1854,35.085],[118.1854,35.0847],[118.1854,35.0845],[118.1855,35.0842],[118.1855,35.0839],[118.1856,35.0834],[118.1856,35.0829],[118.1857,35.0824],[118.1857,35.0823],[118.1857,35.0823],[118.1852,35.0823],[118.1847,35.0822],[118.1846,35.0822],[118.1837,35.0821],[118.1837,35.0816],[118.1838,35.081],[118.1839,35.0804],[118.1839,35.0804],[118.1839,35.0804],[118.1839,35.0803],[118.1838,35.0803],[118.1837,35.0803],[118.1835,35.0803],[118.1829,35.0802],[118.1819,35.0802],[118.1813,35.0801],[118.1811,35.0801],[118.1811,35.0801],[118.1811,35.0801],[118.1805,35.0801],[118.1799,35.0801],[118.1799,35.08],[118.1792,35.08],[118.179,35.08],[118.1785,35.08],[118.1781,35.0799],[118.1779,35.0799],[118.1778,35.0799],[118.1776,35.08],[118.1775,35.08],[118.1774,35.08],[118.1772,35.0801],[118.1772,35.0801],[118.177,35.0801],[118.1769,35.0801],[118.1769,35.0801],[118.1763,35.08],[118.1763,35.08],[118.1763,35.08],[118.1763,35.08],[118.1762,35.08],[118.1762,35.08],[118.1762,35.08],[118.176,35.0799],[118.1756,35.0799],[118.1756,35.08],[118.1755,35.0806],[118.1754,35.0811],[118.1754,35.0814],[118.1753,35.0818],[118.1753,35.082],[118.1743,35.0819],[118.1743,35.0819],[118.1737,35.0819],[118.1738,35.0816],[118.1737,35.0816],[118.1738,35.0814],[118.1738,35.081],[118.1739,35.0808],[118.1739,35.0807],[118.1739,35.0803],[118.174,35.0799],[118.1741,35.0793],[118.1741,35.0793],[118.174,35.0793],[118.174,35.0793],[118.1739,35.0793],[118.1739,35.0793],[118.1738,35.0792],[118.1737,35.0792],[118.1736,35.0792],[118.1736,35.0791],[118.1735,35.079],[118.1734,35.0789],[118.1733,35.0789],[118.1732,35.0788],[118.1731,35.0788],[118.173,35.0787],[118.1729,35.0787],[118.1728,35.0787],[118.1727,35.0787],[118.1726,35.0786],[118.1726,35.0786],[118.1724,35.0786],[118.1723,35.0786],[118.1721,35.0786],[118.1717,35.0786],[118.1717,35.0786],[118.1717,35.0789],[118.1717,35.0789],[118.1717,35.0794],[118.1718,35.0799],[118.1707,35.0799],[118.1704,35.0799],[118.17,35.0799],[118.1695,35.0799],[118.1695,35.0799],[118.1694,35.0799],[118.1693,35.0799],[118.1693,35.0799],[118.1688,35.0799],[118.1682,35.0799],[118.1682,35.0799],[118.1666,35.0799],[118.1666,35.0803],[118.1666,35.0811],[118.1665,35.081],[118.1664,35.081],[118.1664,35.0809],[118.1662,35.0808],[118.1662,35.0806],[118.1661,35.0806],[118.1661,35.0805],[118.1661,35.0807],[118.1658,35.0807],[118.1657,35.0807],[118.1657,35.0804],[118.1657,35.08],[118.1657,35.08],[118.1656,35.08],[118.1655,35.08],[118.1652,35.08],[118.1649,35.08],[118.1649,35.0801],[118.1648,35.0801],[118.1648,35.0802],[118.1648,35.0805],[118.1649,35.081],[118.1648,35.081],[118.1648,35.081],[118.1648,35.0809],[118.1646,35.0808],[118.1645,35.0808],[118.1644,35.0808],[118.1643,35.0816],[118.1643,35.0816],[118.1643,35.0816],[118.1642,35.0816],[118.1642,35.0816],[118.1642,35.0815],[118.1641,35.0815],[118.1641,35.0815],[118.1641,35.0815],[118.1641,35.0822],[118.1641,35.0824],[118.1638,35.0824],[118.1638,35.0823],[118.1635,35.0823],[118.1634,35.0833],[118.1634,35.0839],[118.1634,35.084],[118.1634,35.0848],[118.1631,35.0848],[118.1628,35.0848],[118.1628,35.084],[118.1627,35.084],[118.1625,35.0839],[118.1626,35.0848],[118.1626,35.0852],[118.1625,35.0852],[118.1625,35.0853],[118.1625,35.0854],[118.1623,35.0856],[118.1623,35.0857],[118.1623,35.0857],[118.1625,35.0859],[118.1628,35.086],[118.162,35.086],[118.1622,35.0865],[118.1617,35.0865],[118.1615,35.0866],[118.1612,35.0866],[118.1607,35.0866],[118.1601,35.0866],[118.1599,35.0866],[118.1597,35.0866],[118.1594,35.0866],[118.1592,35.0867],[118.159,35.0867],[118.1587,35.0867],[118.1587,35.0867],[118.1585,35.0868],[118.1583,35.0868],[118.1581,35.0868],[118.1578,35.0869],[118.158,35.0879],[118.1575,35.088],[118.1574,35.088],[118.1571,35.088],[118.157,35.088],[118.1567,35.0881],[118.1567,35.0883],[118.1567,35.0885],[118.1569,35.089],[118.1571,35.0896],[118.1574,35.0901],[118.1572,35.0902],[118.1568,35.0903],[118.1566,35.0898],[118.1559,35.09],[118.1559,35.0901],[118.1559,35.0901],[118.1559,35.0902],[118.1559,35.0903],[118.1559,35.0904],[118.1559,35.0904],[118.156,35.0905],[118.156,35.0906],[118.156,35.0906],[118.1561,35.0907],[118.1561,35.0908],[118.156,35.0909],[118.1559,35.091],[118.1557,35.091],[118.1557,35.0912],[118.1556,35.0912],[118.1555,35.0915],[118.1554,35.0917],[118.1554,35.0918],[118.1553,35.0918],[118.1554,35.092],[118.1554,35.0921],[118.1554,35.0921],[118.1554,35.0922],[118.1554,35.0922],[118.1555,35.0924],[118.1555,35.0927],[118.1549,35.0929],[118.1546,35.093],[118.1552,35.0932],[118.1552,35.0932],[118.1553,35.0932],[118.1553,35.0933],[118.1554,35.0934],[118.1555,35.0934],[118.1558,35.0933],[118.156,35.0933],[118.156,35.0936],[118.1561,35.0938],[118.1561,35.0938],[118.1568,35.0936],[118.1573,35.0935],[118.158,35.0933],[118.1581,35.0933],[118.1582,35.0936],[118.1582,35.0937],[118.1583,35.0939],[118.1584,35.0939],[118.1585,35.094],[118.1587,35.0939],[118.1589,35.0939],[118.159,35.0939],[118.1592,35.0939],[118.1593,35.094],[118.1593,35.0941],[118.1596,35.0941],[118.1603,35.0941],[118.1608,35.0941],[118.1611,35.0939],[118.1612,35.0937],[118.1615,35.0936],[118.1617,35.0936],[118.1619,35.0935],[118.1621,35.0934],[118.1623,35.0933],[118.1624,35.0932],[118.1625,35.0931],[118.1627,35.0931],[118.1629,35.093],[118.163,35.093],[118.1633,35.0931],[118.1635,35.0931],[118.1636,35.0931],[118.1637,35.0929],[118.1638,35.0928],[118.1639,35.0927],[118.1641,35.0926],[118.1643,35.0926],[118.1645,35.0926],[118.1645,35.0926],[118.1645,35.0926],[118.1646,35.0929],[118.1646,35.0929],[118.1646,35.0929],[118.1647,35.0934],[118.1647,35.0934],[118.1647,35.0935],[118.1647,35.0935],[118.1647,35.0936],[118.1647,35.0936],[118.1648,35.0938],[118.1648,35.094],[118.1665,35.0938],[118.1668,35.0938],[118.1671,35.0937],[118.1671,35.0938],[118.1673,35.0938],[118.1675,35.0938],[118.1675,35.0937],[118.1677,35.0936],[118.1678,35.0936],[118.1679,35.0936],[118.1679,35.0936],[118.1679,35.0936],[118.168,35.0936],[118.1681,35.0936],[118.1684,35.0936],[118.1686,35.0936],[118.1686,35.0936],[118.1686,35.0938],[118.1686,35.0939],[118.1686,35.094],[118.1687,35.0941],[118.1687,35.0944],[118.1688,35.0948],[118.1689,35.0955],[118.1689,35.0957],[118.169,35.0962],[118.169,35.0962],[118.1691,35.0962],[118.1692,35.0962],[118.1694,35.0961],[118.1695,35.0961],[118.1697,35.096],[118.1699,35.0958],[118.1702,35.0957],[118.1702,35.0956],[118.1703,35.0955],[118.1703,35.0955],[118.1707,35.0952],[118.1707,35.0951],[118.1708,35.0949],[118.1708,35.0949],[118.1709,35.0949],[118.1716,35.0949],[118.1718,35.0949],[118.172,35.0966],[118.1721,35.0966],[118.1725,35.0966],[118.1727,35.0966],[118.1727,35.0966],[118.1728,35.0966],[118.1729,35.0973],[118.173,35.0973],[118.173,35.0974],[118.1731,35.0974],[118.1734,35.0974],[118.1737,35.0973],[118.1745,35.0972],[118.1751,35.0971],[118.1754,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1756,35.0971],[118.1757,35.0971],[118.1757,35.0971],[118.1758,35.0978],[118.1761,35.0978],[118.1762,35.0978],[118.1763,35.0978],[118.1763,35.0979],[118.1764,35.0979],[118.1764,35.098],[118.1765,35.098],[118.1766,35.098],[118.1767,35.0979],[118.1767,35.0979],[118.1768,35.0979],[118.1769,35.0979],[118.1769,35.0979],[118.177,35.0979],[118.1771,35.0979],[118.1773,35.0979],[118.1774,35.0979],[118.1775,35.0979],[118.1776,35.0979],[118.1776,35.0981],[118.1777,35.099],[118.1778,35.0992],[118.1778,35.0992],[118.1779,35.0991],[118.1779,35.0991],[118.178,35.0991],[118.1781,35.0991],[118.1782,35.0991],[118.1783,35.0991],[118.1784,35.099],[118.1785,35.099],[118.1787,35.0989],[118.1787,35.0989],[118.1788,35.0989],[118.1789,35.0989],[118.1791,35.0989],[118.1792,35.0989],[118.1794,35.0988],[118.1795,35.0988],[118.1798,35.0988]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106009","XZQMC":"大山前村","KZMJ":4054642.77,"JSMJ":4054642.75,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1546,35.0786,118.1911,35.0992]}},{"type":"Feature","id":"cunjie_4326.16","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2243,35.0718],[118.2243,35.0717],[118.2242,35.0709],[118.2242,35.0702],[118.2247,35.0701],[118.2255,35.0701],[118.2259,35.0701],[118.2267,35.07],[118.227,35.07],[118.2269,35.0686],[118.2268,35.0682],[118.2268,35.0681],[118.227,35.0681],[118.2276,35.068],[118.228,35.068],[118.2289,35.068],[118.2297,35.0679],[118.2297,35.0679],[118.2296,35.067],[118.2295,35.066],[118.2296,35.0659],[118.2304,35.0659],[118.2304,35.0658],[118.2308,35.0658],[118.2317,35.0658],[118.2317,35.0658],[118.2316,35.0649],[118.2317,35.0649],[118.2343,35.0648],[118.2344,35.0648],[118.2351,35.0648],[118.2351,35.0646],[118.2351,35.0639],[118.235,35.0625],[118.235,35.0624],[118.235,35.0622],[118.2349,35.0619],[118.2349,35.0617],[118.2348,35.0615],[118.2347,35.0614],[118.2346,35.0612],[118.2347,35.0611],[118.2345,35.0612],[118.2344,35.0613],[118.2339,35.0613],[118.2338,35.0607],[118.2332,35.0607],[118.2318,35.0608],[118.2312,35.0608],[118.2311,35.0608],[118.2311,35.0608],[118.2299,35.0609],[118.229,35.0609],[118.2289,35.061],[118.2289,35.0603],[118.2287,35.0593],[118.2287,35.0587],[118.2284,35.0571],[118.2284,35.0571],[118.2277,35.0571],[118.2277,35.0593],[118.2277,35.0594],[118.2278,35.0597],[118.2273,35.0597],[118.226,35.0597],[118.2262,35.0611],[118.2259,35.0612],[118.2253,35.0612],[118.2258,35.0625],[118.2254,35.0626],[118.2253,35.0626],[118.2253,35.0627],[118.2252,35.0627],[118.2251,35.0627],[118.2251,35.0627],[118.2246,35.0629],[118.2245,35.0629],[118.2243,35.063],[118.2242,35.063],[118.2242,35.063],[118.2238,35.0631],[118.2238,35.0631],[118.2238,35.0635],[118.2239,35.0639],[118.2239,35.064],[118.224,35.064],[118.224,35.064],[118.2239,35.064],[118.2239,35.0641],[118.2239,35.0642],[118.224,35.0645],[118.224,35.0647],[118.224,35.065],[118.224,35.0651],[118.224,35.0651],[118.224,35.0651],[118.224,35.0652],[118.2238,35.0652],[118.2234,35.0652],[118.2232,35.0653],[118.2234,35.0663],[118.2232,35.0663],[118.2228,35.0663],[118.2229,35.0666],[118.2227,35.0666],[118.223,35.068],[118.2234,35.068],[118.2236,35.0699],[118.2239,35.0714],[118.2239,35.0717],[118.2239,35.0718],[118.2243,35.0718]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106032","XZQMC":"房家村","KZMJ":773819.41,"JSMJ":773819.43,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2227,35.0571,118.2351,35.0718]}},{"type":"Feature","id":"cunjie_4326.17","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2021,35.0677],[118.2022,35.0676],[118.2022,35.0669],[118.2021,35.0665],[118.202,35.0659],[118.2021,35.0657],[118.2021,35.0656],[118.2021,35.0656],[118.2022,35.0652],[118.2022,35.065],[118.2022,35.0647],[118.2023,35.0646],[118.2024,35.0645],[118.2024,35.0645],[118.2024,35.0644],[118.2024,35.0644],[118.2024,35.0643],[118.2024,35.0642],[118.2024,35.0642],[118.2024,35.0642],[118.2024,35.0641],[118.2024,35.0641],[118.2023,35.0639],[118.2024,35.0639],[118.2024,35.0639],[118.2025,35.0639],[118.2027,35.0639],[118.2027,35.0636],[118.2027,35.0635],[118.2027,35.0634],[118.2027,35.0632],[118.2027,35.0631],[118.2027,35.0628],[118.2027,35.0627],[118.2027,35.0626],[118.2026,35.0625],[118.2026,35.0621],[118.2026,35.0618],[118.2026,35.0616],[118.2026,35.0615],[118.2027,35.061],[118.2028,35.0606],[118.2025,35.0606],[118.2023,35.0607],[118.2022,35.0607],[118.202,35.0607],[118.2018,35.0607],[118.2015,35.0608],[118.2014,35.0608],[118.2013,35.0608],[118.2007,35.0609],[118.2007,35.0605],[118.2007,35.0603],[118.2006,35.0603],[118.2005,35.0603],[118.2005,35.0603],[118.2003,35.0604],[118.2002,35.0604],[118.2002,35.0604],[118.2001,35.0604],[118.1999,35.0604],[118.1997,35.0604],[118.1996,35.0604],[118.1993,35.0604],[118.1993,35.0604],[118.1993,35.0603],[118.1993,35.0603],[118.1992,35.0601],[118.1992,35.06],[118.1991,35.0598],[118.199,35.0598],[118.1988,35.0598],[118.1987,35.0593],[118.1987,35.0591],[118.1976,35.059],[118.1976,35.0585],[118.1976,35.0584],[118.1976,35.0581],[118.1976,35.0577],[118.1976,35.0577],[118.1977,35.0573],[118.1977,35.0571],[118.1974,35.057],[118.1972,35.0569],[118.1969,35.0569],[118.1966,35.0566],[118.1961,35.0562],[118.1959,35.056],[118.1958,35.0559],[118.1959,35.0556],[118.1959,35.0551],[118.1958,35.055],[118.1957,35.0548],[118.1956,35.0548],[118.1953,35.0548],[118.1951,35.0548],[118.1949,35.0549],[118.1946,35.0549],[118.1943,35.0549],[118.194,35.0549],[118.1937,35.0549],[118.1932,35.0546],[118.1931,35.0546],[118.1924,35.0543],[118.1924,35.0542],[118.1924,35.054],[118.1919,35.054],[118.1917,35.054],[118.1917,35.0531],[118.1914,35.0531],[118.1915,35.053],[118.1915,35.0528],[118.1916,35.0526],[118.1916,35.0525],[118.1917,35.0523],[118.1918,35.0518],[118.1919,35.0512],[118.1918,35.0512],[118.1917,35.051],[118.1918,35.0506],[118.1913,35.0506],[118.1912,35.0513],[118.1905,35.0513],[118.19,35.0512],[118.1899,35.052],[118.1898,35.0524],[118.1897,35.0524],[118.1896,35.0525],[118.1893,35.0525],[118.1892,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1888,35.0524],[118.1888,35.0524],[118.1886,35.0524],[118.1886,35.0524],[118.1886,35.0527],[118.1886,35.0527],[118.1886,35.0527],[118.1884,35.0527],[118.1881,35.0527],[118.1879,35.0527],[118.1875,35.0527],[118.1875,35.0527],[118.1872,35.0527],[118.1869,35.0526],[118.1869,35.0526],[118.1868,35.0526],[118.1868,35.0526],[118.1868,35.0525],[118.1868,35.0521],[118.1868,35.0518],[118.1867,35.0518],[118.1867,35.0518],[118.1866,35.0518],[118.1866,35.0518],[118.1865,35.0517],[118.1865,35.0517],[118.1865,35.0517],[118.1864,35.0517],[118.1864,35.0517],[118.1861,35.0517],[118.1861,35.0517],[118.1861,35.0517],[118.186,35.0519],[118.186,35.0524],[118.186,35.0526],[118.186,35.0527],[118.186,35.0528],[118.186,35.0535],[118.186,35.0539],[118.1854,35.0538],[118.1853,35.0538],[118.1846,35.0537],[118.1845,35.0537],[118.1841,35.0537],[118.1839,35.0537],[118.1838,35.0537],[118.1838,35.0539],[118.1836,35.0548],[118.1833,35.0548],[118.1831,35.0548],[118.1829,35.0548],[118.1827,35.0548],[118.1827,35.0546],[118.1828,35.0542],[118.1827,35.0542],[118.1824,35.0542],[118.1823,35.0542],[118.182,35.0542],[118.1819,35.0542],[118.1819,35.0543],[118.1819,35.0547],[118.1819,35.0549],[118.1819,35.055],[118.1819,35.0552],[118.1816,35.0552],[118.1816,35.0552],[118.1813,35.0552],[118.1812,35.0552],[118.1811,35.0552],[118.1809,35.0552],[118.1808,35.0553],[118.1804,35.0553],[118.18,35.0553],[118.18,35.0553],[118.1799,35.0553],[118.1795,35.0553],[118.1793,35.0554],[118.1792,35.0554],[118.1791,35.0554],[118.1788,35.0554],[118.1787,35.0554],[118.1784,35.0554],[118.1782,35.0554],[118.1776,35.0554],[118.1774,35.0555],[118.1774,35.0553],[118.1773,35.055],[118.1772,35.0546],[118.1771,35.0546],[118.1771,35.0544],[118.1769,35.0544],[118.1768,35.055],[118.1768,35.0551],[118.1769,35.0556],[118.177,35.0556],[118.1771,35.0556],[118.1771,35.0558],[118.1768,35.0558],[118.1766,35.0558],[118.1764,35.0558],[118.1763,35.0557],[118.1762,35.0557],[118.1755,35.0557],[118.1754,35.0562],[118.1761,35.0562],[118.1761,35.0567],[118.1761,35.0569],[118.1761,35.0574],[118.1761,35.0575],[118.176,35.058],[118.176,35.0584],[118.176,35.0592],[118.176,35.0592],[118.1758,35.0592],[118.1755,35.059],[118.175,35.0585],[118.1747,35.0584],[118.1746,35.0583],[118.1744,35.0583],[118.1744,35.0584],[118.1743,35.0584],[118.1745,35.0585],[118.1748,35.0587],[118.175,35.0589],[118.1752,35.059],[118.1753,35.0591],[118.1754,35.0592],[118.1754,35.0594],[118.1755,35.0595],[118.1758,35.0598],[118.1759,35.0599],[118.1761,35.06],[118.1761,35.06],[118.176,35.0601],[118.176,35.0601],[118.1758,35.0601],[118.1754,35.06],[118.1753,35.06],[118.1749,35.0599],[118.1747,35.0599],[118.1746,35.0599],[118.1737,35.0598],[118.1737,35.06],[118.1731,35.0599],[118.1732,35.061],[118.173,35.061],[118.1728,35.061],[118.1729,35.0625],[118.1727,35.0624],[118.172,35.0624],[118.1719,35.0625],[118.172,35.0631],[118.172,35.0634],[118.172,35.0637],[118.1721,35.0643],[118.1712,35.0643],[118.1712,35.064],[118.1712,35.064],[118.1711,35.0635],[118.1711,35.0631],[118.171,35.0631],[118.1709,35.0631],[118.1708,35.063],[118.1708,35.063],[118.1708,35.063],[118.1708,35.0633],[118.1709,35.0636],[118.1709,35.0638],[118.1709,35.0641],[118.1708,35.0641],[118.1707,35.0642],[118.1707,35.0643],[118.1707,35.0644],[118.1707,35.0645],[118.1708,35.0645],[118.1708,35.0646],[118.1708,35.0647],[118.1709,35.0647],[118.1709,35.0648],[118.171,35.0649],[118.171,35.0649],[118.171,35.0649],[118.171,35.065],[118.171,35.0652],[118.171,35.0652],[118.171,35.0654],[118.1711,35.0655],[118.1711,35.0657],[118.1711,35.0659],[118.1712,35.066],[118.1712,35.066],[118.1711,35.0663],[118.1711,35.0667],[118.171,35.0667],[118.1709,35.0667],[118.1708,35.0667],[118.1708,35.0667],[118.1708,35.0667],[118.1707,35.0667],[118.1707,35.0667],[118.1707,35.0667],[118.1706,35.0667],[118.1705,35.0667],[118.1705,35.0667],[118.1704,35.0667],[118.1704,35.0666],[118.1704,35.0662],[118.1704,35.066],[118.1703,35.0658],[118.1703,35.0658],[118.1701,35.0651],[118.17,35.0651],[118.1698,35.0651],[118.1696,35.0651],[118.1696,35.0651],[118.1695,35.0651],[118.1693,35.0652],[118.1692,35.0652],[118.169,35.0652],[118.1689,35.0652],[118.1688,35.0652],[118.1687,35.0652],[118.1686,35.0652],[118.1684,35.0653],[118.1684,35.0654],[118.1684,35.0655],[118.1684,35.0655],[118.1685,35.0656],[118.1685,35.0656],[118.1686,35.0657],[118.1686,35.0658],[118.1686,35.0659],[118.1686,35.0659],[118.1687,35.0659],[118.1687,35.0659],[118.1687,35.066],[118.1687,35.066],[118.1687,35.0661],[118.1686,35.0661],[118.1686,35.0661],[118.1686,35.0662],[118.1686,35.0662],[118.1686,35.0662],[118.1686,35.0662],[118.1687,35.0663],[118.1687,35.0663],[118.1687,35.0664],[118.1687,35.0665],[118.1688,35.0667],[118.1686,35.0668],[118.1677,35.067],[118.1677,35.0671],[118.1677,35.0672],[118.1676,35.0673],[118.1676,35.0674],[118.1676,35.0674],[118.1675,35.0674],[118.1675,35.0674],[118.1674,35.0674],[118.1674,35.0674],[118.1675,35.0676],[118.1675,35.0677],[118.1675,35.0677],[118.1675,35.0677],[118.1676,35.0678],[118.168,35.0678],[118.1682,35.0678],[118.1683,35.0678],[118.1686,35.0679],[118.1692,35.0679],[118.1695,35.0679],[118.1698,35.068],[118.1698,35.068],[118.1701,35.068],[118.1707,35.068],[118.1708,35.068],[118.171,35.0681],[118.1712,35.0681],[118.1711,35.0693],[118.171,35.0702],[118.1718,35.0702],[118.1718,35.0702],[118.1721,35.0702],[118.1725,35.0702],[118.1727,35.0702],[118.173,35.0702],[118.1729,35.0706],[118.1728,35.0711],[118.1726,35.0717],[118.173,35.0717],[118.1732,35.0708],[118.1732,35.0707],[118.1733,35.0706],[118.1734,35.0703],[118.1734,35.0703],[118.1735,35.0697],[118.1733,35.0697],[118.1733,35.0698],[118.173,35.0698],[118.173,35.0699],[118.1729,35.0699],[118.1729,35.0699],[118.1728,35.0698],[118.1728,35.069],[118.1728,35.0682],[118.1728,35.0677],[118.1725,35.0676],[118.1726,35.0667],[118.1728,35.0667],[118.1728,35.0672],[118.173,35.0669],[118.1732,35.067],[118.1735,35.0664],[118.1736,35.0664],[118.1737,35.0664],[118.1737,35.0666],[118.1738,35.0666],[118.1734,35.0675],[118.1734,35.0676],[118.1734,35.0678],[118.1735,35.0684],[118.1742,35.0683],[118.1744,35.0682],[118.1748,35.0681],[118.1749,35.0681],[118.1751,35.0681],[118.1753,35.0681],[118.1753,35.067],[118.1754,35.0669],[118.1755,35.0667],[118.1756,35.0667],[118.1756,35.0667],[118.1756,35.0667],[118.1757,35.0666],[118.1757,35.0666],[118.1757,35.0665],[118.1757,35.0665],[118.1758,35.0665],[118.1759,35.0665],[118.176,35.0665],[118.176,35.0665],[118.176,35.0664],[118.1761,35.0663],[118.1762,35.0663],[118.1763,35.066],[118.1763,35.0657],[118.1764,35.0657],[118.1765,35.0645],[118.1777,35.0645],[118.1776,35.0651],[118.1776,35.0654],[118.1775,35.0658],[118.1779,35.0658],[118.1781,35.0658],[118.1781,35.0658],[118.1781,35.0658],[118.1781,35.0657],[118.1782,35.0654],[118.1782,35.0651],[118.1782,35.065],[118.1782,35.0648],[118.1783,35.0646],[118.179,35.0646],[118.1793,35.0646],[118.1794,35.0646],[118.1794,35.0647],[118.1795,35.0647],[118.1796,35.0647],[118.1796,35.0648],[118.1797,35.0648],[118.1797,35.0648],[118.1798,35.0648],[118.1799,35.0647],[118.18,35.0648],[118.1805,35.0649],[118.1809,35.0649],[118.1818,35.065],[118.182,35.065],[118.182,35.065],[118.182,35.0655],[118.1821,35.0655],[118.1825,35.0653],[118.1828,35.0652],[118.183,35.0652],[118.1832,35.0652],[118.1832,35.0651],[118.1831,35.0646],[118.183,35.0645],[118.183,35.0641],[118.183,35.0641],[118.183,35.0641],[118.1829,35.0639],[118.1829,35.0637],[118.1829,35.0636],[118.1829,35.0636],[118.1829,35.0635],[118.183,35.0634],[118.1831,35.0633],[118.1832,35.0633],[118.1833,35.0633],[118.1833,35.0633],[118.1834,35.0633],[118.1835,35.0633],[118.1835,35.0633],[118.1836,35.0633],[118.1838,35.0633],[118.1839,35.0633],[118.1839,35.0633],[118.184,35.0632],[118.1844,35.0632],[118.1852,35.0632],[118.1854,35.0632],[118.1854,35.0632],[118.1857,35.0632],[118.1858,35.0632],[118.1859,35.0632],[118.1861,35.0632],[118.1862,35.0632],[118.1863,35.0632],[118.1865,35.0632],[118.1865,35.0632],[118.1867,35.0633],[118.1867,35.0633],[118.1868,35.0633],[118.1869,35.0633],[118.187,35.0633],[118.1871,35.0634],[118.1871,35.0634],[118.1873,35.0634],[118.1874,35.0634],[118.1875,35.0635],[118.1875,35.0635],[118.1876,35.0635],[118.1877,35.0636],[118.1878,35.0636],[118.1878,35.0637],[118.188,35.0638],[118.1881,35.0638],[118.1881,35.0638],[118.1881,35.0638],[118.1882,35.0638],[118.1883,35.0638],[118.1883,35.0638],[118.1885,35.0638],[118.1894,35.0642],[118.1901,35.0646],[118.1901,35.0648],[118.1906,35.0648],[118.1906,35.0644],[118.1909,35.0644],[118.1909,35.0647],[118.1909,35.0646],[118.1909,35.0654],[118.1909,35.0655],[118.1913,35.0655],[118.1913,35.0651],[118.192,35.0651],[118.192,35.0649],[118.1926,35.0649],[118.1926,35.065],[118.1933,35.0653],[118.1933,35.0655],[118.1934,35.0655],[118.1936,35.0658],[118.1938,35.0659],[118.1941,35.0661],[118.1943,35.0662],[118.1944,35.0663],[118.1951,35.0663],[118.1958,35.0664],[118.196,35.0664],[118.196,35.0662],[118.1961,35.066],[118.1961,35.0658],[118.1961,35.0657],[118.1961,35.0653],[118.1961,35.0652],[118.1973,35.0651],[118.1973,35.0651],[118.1974,35.0651],[118.1975,35.0651],[118.1977,35.065],[118.198,35.065],[118.198,35.0655],[118.198,35.0656],[118.198,35.0657],[118.198,35.0661],[118.1981,35.0662],[118.1981,35.0665],[118.1981,35.067],[118.1984,35.067],[118.1984,35.0672],[118.1984,35.0673],[118.1984,35.0676],[118.1984,35.0677],[118.1984,35.068],[118.1989,35.068],[118.199,35.068],[118.1991,35.068],[118.1996,35.068],[118.1996,35.0685],[118.199,35.0687],[118.1988,35.0687],[118.1988,35.0687],[118.1987,35.0688],[118.1987,35.0689],[118.1987,35.0689],[118.1987,35.0695],[118.1987,35.07],[118.1992,35.07],[118.2003,35.0699],[118.201,35.0699],[118.2014,35.0699],[118.2017,35.0699],[118.2016,35.0677],[118.202,35.0677],[118.202,35.0677],[118.2021,35.0677]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106002","XZQMC":"无梁殿村","KZMJ":3156265.91,"JSMJ":3156265.85,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1674,35.0506,118.2028,35.0717]}},{"type":"Feature","id":"cunjie_4326.18","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2227,35.0666],[118.2229,35.0666],[118.2228,35.0663],[118.2232,35.0663],[118.2234,35.0663],[118.2232,35.0653],[118.2234,35.0652],[118.2238,35.0652],[118.224,35.0652],[118.224,35.0651],[118.224,35.0651],[118.224,35.0651],[118.224,35.065],[118.224,35.0647],[118.224,35.0645],[118.2239,35.0642],[118.2239,35.0641],[118.2239,35.064],[118.224,35.064],[118.224,35.064],[118.2239,35.064],[118.2239,35.0639],[118.2238,35.0635],[118.2238,35.0631],[118.2238,35.0631],[118.2242,35.063],[118.2242,35.063],[118.2243,35.063],[118.2245,35.0629],[118.2246,35.0629],[118.2251,35.0627],[118.2251,35.0627],[118.2252,35.0627],[118.2253,35.0627],[118.2253,35.0626],[118.2254,35.0626],[118.2258,35.0625],[118.2253,35.0612],[118.2259,35.0612],[118.2262,35.0611],[118.226,35.0597],[118.226,35.0594],[118.2254,35.0594],[118.2248,35.0595],[118.2242,35.0595],[118.2231,35.0595],[118.2229,35.0595],[118.2226,35.0595],[118.2225,35.0595],[118.2223,35.0595],[118.2219,35.0595],[118.2206,35.0596],[118.2206,35.0596],[118.2205,35.0596],[118.22,35.0596],[118.22,35.0596],[118.22,35.0596],[118.2189,35.0596],[118.2189,35.0596],[118.2189,35.0596],[118.2188,35.0596],[118.218,35.0597],[118.2176,35.0597],[118.2171,35.0597],[118.2169,35.0597],[118.2167,35.0597],[118.2167,35.0594],[118.2167,35.0591],[118.2166,35.0591],[118.2164,35.0591],[118.2164,35.059],[118.2163,35.059],[118.2162,35.0591],[118.2161,35.0591],[118.2161,35.0593],[118.2156,35.0593],[118.2144,35.0594],[118.2143,35.0592],[118.2142,35.0592],[118.2141,35.0592],[118.2141,35.0596],[118.2141,35.0596],[118.2129,35.0597],[118.2119,35.0598],[118.2119,35.0601],[118.2119,35.0605],[118.2119,35.0606],[118.2119,35.0606],[118.212,35.061],[118.212,35.0611],[118.212,35.0612],[118.212,35.0614],[118.212,35.0622],[118.2117,35.0622],[118.2117,35.0617],[118.2117,35.0616],[118.2117,35.0615],[118.2117,35.0614],[118.2117,35.0613],[118.2113,35.0613],[118.2112,35.0607],[118.2112,35.0605],[118.2111,35.0605],[118.2104,35.0605],[118.2104,35.061],[118.2101,35.061],[118.2098,35.061],[118.2097,35.061],[118.2097,35.0613],[118.2097,35.0625],[118.2097,35.0629],[118.2094,35.0629],[118.2093,35.0629],[118.2093,35.0629],[118.2093,35.063],[118.2093,35.063],[118.2093,35.0631],[118.2093,35.0636],[118.2091,35.0635],[118.2092,35.0631],[118.2092,35.0631],[118.2092,35.0629],[118.2088,35.0628],[118.2088,35.063],[118.2088,35.0631],[118.2087,35.0638],[118.2087,35.0638],[118.2086,35.0646],[118.2086,35.0648],[118.2086,35.0649],[118.2084,35.065],[118.2084,35.065],[118.2081,35.0651],[118.2081,35.0652],[118.2078,35.0655],[118.2078,35.0654],[118.2078,35.0652],[118.2078,35.0651],[118.2078,35.0642],[118.2079,35.064],[118.208,35.063],[118.208,35.0629],[118.2079,35.0629],[118.2077,35.0629],[118.2076,35.0629],[118.2076,35.0629],[118.2075,35.0629],[118.2075,35.0627],[118.2075,35.0625],[118.2075,35.0623],[118.2067,35.0623],[118.2063,35.0623],[118.2063,35.0625],[118.2064,35.0631],[118.2069,35.0637],[118.2066,35.0639],[118.2063,35.064],[118.2063,35.064],[118.2061,35.0638],[118.2061,35.0636],[118.2058,35.0632],[118.2055,35.0633],[118.2052,35.0634],[118.2055,35.0635],[118.2057,35.0637],[118.2055,35.0638],[118.2053,35.064],[118.2052,35.0639],[118.2049,35.0635],[118.2048,35.0633],[118.2047,35.0632],[118.2046,35.0631],[118.2046,35.0629],[118.2046,35.0629],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0627],[118.2045,35.0627],[118.2045,35.0627],[118.2044,35.0626],[118.2044,35.0625],[118.2044,35.0623],[118.2043,35.0622],[118.204,35.0624],[118.2038,35.0625],[118.2034,35.0626],[118.2033,35.0626],[118.2033,35.0627],[118.2033,35.0628],[118.2033,35.0628],[118.2033,35.0628],[118.2033,35.0628],[118.2034,35.0629],[118.2034,35.0629],[118.2034,35.0629],[118.2035,35.063],[118.2035,35.0631],[118.2036,35.0631],[118.2037,35.0632],[118.2037,35.0632],[118.2038,35.0634],[118.2038,35.0635],[118.2039,35.0637],[118.2039,35.0637],[118.2038,35.0638],[118.2037,35.0638],[118.2037,35.0638],[118.2037,35.0638],[118.2036,35.0638],[118.2035,35.0638],[118.2035,35.0638],[118.2034,35.0638],[118.2033,35.0638],[118.2033,35.0638],[118.2032,35.0638],[118.2032,35.0638],[118.2032,35.0636],[118.2032,35.0636],[118.2031,35.0636],[118.2031,35.0633],[118.2031,35.0632],[118.203,35.0629],[118.203,35.0626],[118.2027,35.0627],[118.2027,35.0628],[118.2027,35.0631],[118.2027,35.0632],[118.2027,35.0634],[118.2027,35.0635],[118.2027,35.0636],[118.2027,35.0639],[118.2025,35.0639],[118.2024,35.0639],[118.2024,35.0639],[118.2023,35.0639],[118.2024,35.0641],[118.2024,35.0641],[118.2024,35.0642],[118.2024,35.0642],[118.2024,35.0642],[118.2024,35.0643],[118.2024,35.0644],[118.2024,35.0644],[118.2024,35.0645],[118.2024,35.0645],[118.2023,35.0646],[118.2022,35.0647],[118.2022,35.065],[118.2022,35.0652],[118.2021,35.0656],[118.2021,35.0656],[118.2021,35.0657],[118.202,35.0659],[118.2021,35.0665],[118.2022,35.0669],[118.2022,35.0676],[118.2021,35.0677],[118.2021,35.0682],[118.2021,35.0683],[118.2021,35.0688],[118.2031,35.0688],[118.203,35.0696],[118.2034,35.0696],[118.2035,35.0696],[118.2038,35.0696],[118.2043,35.0692],[118.2043,35.0692],[118.2053,35.0692],[118.2064,35.0689],[118.2068,35.0688],[118.207,35.0688],[118.2072,35.0687],[118.2073,35.0687],[118.2074,35.0688],[118.2075,35.0688],[118.2076,35.0687],[118.2075,35.0686],[118.2074,35.0685],[118.2074,35.0684],[118.2075,35.0683],[118.2076,35.0681],[118.2077,35.068],[118.2077,35.0678],[118.2078,35.0675],[118.2079,35.0674],[118.208,35.0673],[118.2082,35.0672],[118.2084,35.0671],[118.2086,35.067],[118.2087,35.0668],[118.2089,35.0665],[118.209,35.0664],[118.209,35.0663],[118.209,35.0662],[118.2089,35.0658],[118.2093,35.0659],[118.2097,35.0659],[118.2098,35.0659],[118.2101,35.0659],[118.2103,35.0659],[118.2104,35.0659],[118.2104,35.0659],[118.2105,35.0659],[118.2107,35.0659],[118.2114,35.066],[118.2117,35.066],[118.2117,35.0661],[118.2118,35.0662],[118.2118,35.0662],[118.2118,35.0663],[118.212,35.0664],[118.2121,35.0665],[118.2122,35.0665],[118.2124,35.0665],[118.2126,35.0666],[118.2128,35.0666],[118.2129,35.0666],[118.213,35.0666],[118.2133,35.0666],[118.2137,35.0666],[118.2138,35.0666],[118.2141,35.0666],[118.2141,35.0665],[118.2142,35.0665],[118.2143,35.0665],[118.2145,35.0665],[118.2146,35.0665],[118.2147,35.0665],[118.2147,35.0664],[118.2147,35.0664],[118.2146,35.0662],[118.2154,35.0661],[118.2168,35.0659],[118.2168,35.0659],[118.217,35.0659],[118.2176,35.0658],[118.218,35.0658],[118.22,35.0656],[118.2201,35.0662],[118.2202,35.0668],[118.2202,35.0668],[118.2204,35.0668],[118.2208,35.0668],[118.2219,35.0667],[118.2219,35.0667],[118.2227,35.0666]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106005","XZQMC":"中桥村","KZMJ":1375012.88,"JSMJ":1375012.85,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.202,35.059,118.2262,35.0696]}},{"type":"Feature","id":"cunjie_4326.19","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1674,35.0674],[118.1674,35.0674],[118.1675,35.0674],[118.1675,35.0674],[118.1676,35.0674],[118.1676,35.0674],[118.1676,35.0673],[118.1677,35.0672],[118.1677,35.0671],[118.1677,35.067],[118.1686,35.0668],[118.1688,35.0667],[118.1687,35.0665],[118.1687,35.0664],[118.1687,35.0663],[118.1687,35.0663],[118.1686,35.0662],[118.1686,35.0662],[118.1686,35.0662],[118.1686,35.0662],[118.1686,35.0661],[118.1686,35.0661],[118.1687,35.0661],[118.1687,35.066],[118.1687,35.066],[118.1687,35.0659],[118.1687,35.0659],[118.1686,35.0659],[118.1686,35.0659],[118.1686,35.0658],[118.1686,35.0657],[118.1685,35.0656],[118.1685,35.0656],[118.1684,35.0655],[118.1684,35.0655],[118.1684,35.0654],[118.1684,35.0653],[118.1686,35.0652],[118.1687,35.0652],[118.1688,35.0652],[118.1689,35.0652],[118.169,35.0652],[118.1692,35.0652],[118.1693,35.0652],[118.1695,35.0651],[118.1696,35.0651],[118.1696,35.0651],[118.1698,35.0651],[118.17,35.0651],[118.1701,35.0651],[118.1703,35.0658],[118.1703,35.0658],[118.1704,35.066],[118.1704,35.0662],[118.1704,35.0666],[118.1704,35.0667],[118.1705,35.0667],[118.1705,35.0667],[118.1706,35.0667],[118.1707,35.0667],[118.1707,35.0667],[118.1707,35.0667],[118.1708,35.0667],[118.1708,35.0667],[118.1708,35.0667],[118.1709,35.0667],[118.171,35.0667],[118.1711,35.0667],[118.1711,35.0663],[118.1712,35.066],[118.1712,35.066],[118.1711,35.0659],[118.1711,35.0657],[118.1711,35.0655],[118.171,35.0654],[118.171,35.0652],[118.171,35.0652],[118.171,35.065],[118.171,35.0649],[118.171,35.0649],[118.171,35.0649],[118.1709,35.0648],[118.1709,35.0647],[118.1708,35.0647],[118.1708,35.0646],[118.1708,35.0645],[118.1707,35.0645],[118.1707,35.0644],[118.1707,35.0643],[118.1707,35.0642],[118.1708,35.0641],[118.1709,35.0641],[118.1709,35.0638],[118.1709,35.0636],[118.1708,35.0633],[118.1708,35.063],[118.1708,35.063],[118.1708,35.063],[118.1709,35.0631],[118.171,35.0631],[118.1711,35.0631],[118.1711,35.0635],[118.1712,35.064],[118.1712,35.064],[118.1712,35.0643],[118.1721,35.0643],[118.172,35.0637],[118.172,35.0634],[118.172,35.0631],[118.1719,35.0625],[118.172,35.0624],[118.1727,35.0624],[118.1729,35.0625],[118.1728,35.061],[118.173,35.061],[118.1732,35.061],[118.1731,35.0599],[118.1737,35.06],[118.1737,35.0598],[118.1746,35.0599],[118.1747,35.0599],[118.1749,35.0599],[118.1753,35.06],[118.1754,35.06],[118.1758,35.0601],[118.176,35.0601],[118.176,35.0601],[118.1761,35.06],[118.1761,35.06],[118.1759,35.0599],[118.1758,35.0598],[118.1755,35.0595],[118.1754,35.0594],[118.1754,35.0592],[118.1753,35.0591],[118.1752,35.059],[118.175,35.0589],[118.1748,35.0587],[118.1745,35.0585],[118.1743,35.0584],[118.1744,35.0584],[118.1744,35.0583],[118.1746,35.0583],[118.1747,35.0584],[118.175,35.0585],[118.1755,35.059],[118.1758,35.0592],[118.176,35.0592],[118.176,35.0592],[118.176,35.0584],[118.176,35.058],[118.1761,35.0575],[118.1761,35.0574],[118.1761,35.0569],[118.1761,35.0567],[118.1761,35.0562],[118.1754,35.0562],[118.1755,35.0557],[118.1762,35.0557],[118.1763,35.0557],[118.1764,35.0558],[118.1766,35.0558],[118.1768,35.0558],[118.1771,35.0558],[118.1771,35.0556],[118.177,35.0556],[118.1769,35.0556],[118.1768,35.0551],[118.1768,35.055],[118.1769,35.0544],[118.1769,35.0537],[118.1766,35.0537],[118.1766,35.0535],[118.1756,35.0534],[118.1754,35.0534],[118.1755,35.0524],[118.1755,35.0523],[118.1755,35.0522],[118.1755,35.0522],[118.1755,35.0522],[118.1755,35.0521],[118.1755,35.052],[118.1756,35.0517],[118.1756,35.0512],[118.1756,35.0508],[118.1756,35.0502],[118.1757,35.05],[118.1744,35.0499],[118.1735,35.0498],[118.1736,35.0489],[118.1737,35.0487],[118.1737,35.0483],[118.1737,35.0481],[118.1736,35.0481],[118.1737,35.0479],[118.1737,35.0478],[118.1738,35.047],[118.1738,35.047],[118.1737,35.047],[118.1736,35.0469],[118.1734,35.0469],[118.1733,35.0468],[118.1732,35.0468],[118.173,35.0468],[118.1729,35.0468],[118.1728,35.0467],[118.1728,35.0467],[118.1727,35.0467],[118.1725,35.0467],[118.1724,35.0467],[118.1716,35.0465],[118.1709,35.0464],[118.1709,35.0456],[118.1711,35.0456],[118.1711,35.0447],[118.1711,35.0444],[118.1712,35.0444],[118.1714,35.0444],[118.1717,35.0444],[118.1719,35.0444],[118.172,35.0444],[118.1721,35.0444],[118.1722,35.0444],[118.1723,35.0444],[118.1728,35.0444],[118.173,35.0444],[118.1731,35.0431],[118.1729,35.043],[118.1729,35.043],[118.1729,35.043],[118.1729,35.043],[118.1727,35.043],[118.1727,35.043],[118.1726,35.043],[118.1725,35.043],[118.1725,35.043],[118.1725,35.043],[118.1724,35.043],[118.1722,35.043],[118.1721,35.0429],[118.1718,35.0429],[118.1714,35.0429],[118.1714,35.0429],[118.1714,35.0428],[118.1711,35.0428],[118.1707,35.0428],[118.1707,35.0428],[118.1707,35.0428],[118.1707,35.0428],[118.1706,35.0428],[118.1706,35.0428],[118.1706,35.0428],[118.1704,35.0427],[118.1704,35.0427],[118.1703,35.0427],[118.1703,35.0427],[118.1703,35.0427],[118.1703,35.0427],[118.1703,35.0427],[118.1699,35.0427],[118.1699,35.0427],[118.1699,35.0427],[118.1699,35.0427],[118.1699,35.0427],[118.1699,35.0427],[118.1695,35.0426],[118.1691,35.0425],[118.1687,35.0425],[118.1684,35.0424],[118.1683,35.0424],[118.1682,35.0424],[118.1679,35.0424],[118.1679,35.0424],[118.1679,35.0424],[118.1679,35.0424],[118.1678,35.0424],[118.1678,35.0424],[118.1678,35.0424],[118.1677,35.0423],[118.1676,35.0423],[118.1675,35.0423],[118.1674,35.0423],[118.1673,35.0423],[118.1673,35.0423],[118.1673,35.0423],[118.1673,35.0423],[118.1672,35.0424],[118.1672,35.0427],[118.167,35.0434],[118.167,35.0435],[118.1669,35.0437],[118.1669,35.0437],[118.1669,35.0438],[118.1668,35.0441],[118.1667,35.0445],[118.1667,35.0446],[118.1666,35.0446],[118.1664,35.0446],[118.1663,35.0446],[118.1662,35.0446],[118.1662,35.0448],[118.1662,35.0453],[118.1662,35.0453],[118.1655,35.0454],[118.1645,35.0454],[118.1631,35.0456],[118.1626,35.0456],[118.1622,35.0456],[118.1613,35.0457],[118.1611,35.0458],[118.1611,35.0457],[118.1606,35.0457],[118.1602,35.0458],[118.16,35.0458],[118.1598,35.0459],[118.1598,35.046],[118.1597,35.0461],[118.1597,35.0461],[118.1596,35.0462],[118.1595,35.0463],[118.1593,35.0464],[118.1591,35.0465],[118.1591,35.0465],[118.1589,35.0466],[118.1589,35.0466],[118.1587,35.0466],[118.1586,35.0466],[118.1586,35.0466],[118.1585,35.0467],[118.1585,35.0467],[118.1584,35.0467],[118.1584,35.0467],[118.1584,35.0467],[118.1583,35.0468],[118.1582,35.0469],[118.1582,35.0469],[118.1581,35.0469],[118.1581,35.0469],[118.158,35.047],[118.158,35.047],[118.158,35.0471],[118.158,35.0471],[118.1579,35.0472],[118.1579,35.0472],[118.1579,35.0473],[118.158,35.0473],[118.158,35.0474],[118.158,35.0474],[118.158,35.0475],[118.158,35.0476],[118.1579,35.0477],[118.1578,35.0477],[118.1578,35.0477],[118.1579,35.0478],[118.1579,35.0479],[118.1578,35.0479],[118.1578,35.048],[118.1579,35.0481],[118.1577,35.0481],[118.1576,35.0481],[118.1576,35.0482],[118.1576,35.0482],[118.1576,35.0483],[118.1576,35.0483],[118.1577,35.0484],[118.1576,35.0485],[118.1576,35.0485],[118.1575,35.0485],[118.1575,35.0485],[118.1574,35.0485],[118.1575,35.0491],[118.1575,35.0495],[118.1574,35.0495],[118.1571,35.0495],[118.1571,35.0495],[118.1569,35.0495],[118.1564,35.0496],[118.1564,35.05],[118.1564,35.05],[118.1563,35.0505],[118.1563,35.0506],[118.1563,35.0508],[118.1563,35.0509],[118.156,35.0508],[118.1545,35.0507],[118.1544,35.0508],[118.1544,35.051],[118.1543,35.0526],[118.1542,35.054],[118.1541,35.0545],[118.1541,35.0545],[118.1541,35.0546],[118.1541,35.0546],[118.1541,35.0548],[118.1541,35.0559],[118.1541,35.0559],[118.1541,35.0563],[118.1541,35.0569],[118.1541,35.057],[118.1538,35.0571],[118.1536,35.0571],[118.1534,35.0571],[118.1533,35.0571],[118.1532,35.0571],[118.153,35.0572],[118.1525,35.0572],[118.1522,35.0572],[118.1521,35.0572],[118.1519,35.0572],[118.1517,35.0573],[118.1517,35.0579],[118.1517,35.0585],[118.1517,35.0588],[118.1517,35.0596],[118.1516,35.0601],[118.1512,35.0601],[118.1512,35.0606],[118.1511,35.0606],[118.1508,35.0607],[118.1506,35.0608],[118.1504,35.0608],[118.1502,35.0609],[118.1501,35.0609],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.15,35.061],[118.1496,35.0613],[118.1505,35.0614],[118.1517,35.0615],[118.1517,35.0616],[118.152,35.0616],[118.1519,35.0618],[118.1523,35.0619],[118.1524,35.0619],[118.1524,35.0622],[118.1524,35.0622],[118.1525,35.062],[118.1527,35.0621],[118.1529,35.0615],[118.1531,35.0615],[118.1533,35.0615],[118.1534,35.0615],[118.1536,35.0612],[118.1541,35.0608],[118.1541,35.0608],[118.1543,35.0608],[118.1545,35.0609],[118.1547,35.0611],[118.1541,35.0616],[118.1541,35.0617],[118.1543,35.0618],[118.1542,35.0621],[118.1541,35.0625],[118.1541,35.0625],[118.1544,35.0626],[118.1543,35.0629],[118.1544,35.0628],[118.1547,35.0627],[118.1547,35.0631],[118.1547,35.0635],[118.1547,35.0638],[118.1546,35.0644],[118.1546,35.0647],[118.1547,35.0647],[118.1548,35.0647],[118.1549,35.0647],[118.1549,35.0647],[118.155,35.0647],[118.1551,35.0647],[118.1552,35.0647],[118.1554,35.0647],[118.1554,35.0661],[118.1558,35.0661],[118.1558,35.0647],[118.1561,35.0648],[118.1563,35.0648],[118.1565,35.0648],[118.1567,35.0649],[118.1572,35.0649],[118.1575,35.0649],[118.158,35.0649],[118.1594,35.0649],[118.1594,35.0646],[118.1593,35.0645],[118.1591,35.0643],[118.1591,35.0639],[118.1595,35.064],[118.1596,35.064],[118.1596,35.064],[118.1597,35.064],[118.1598,35.064],[118.1598,35.064],[118.1599,35.064],[118.16,35.064],[118.1601,35.0639],[118.1601,35.0639],[118.1602,35.0639],[118.1602,35.0645],[118.1608,35.0645],[118.1608,35.0647],[118.1608,35.0647],[118.1607,35.0654],[118.1606,35.0654],[118.1606,35.0655],[118.1605,35.0663],[118.1605,35.0666],[118.1604,35.067],[118.1607,35.067],[118.1608,35.067],[118.1609,35.067],[118.161,35.067],[118.1611,35.0669],[118.1612,35.0669],[118.1612,35.0669],[118.1613,35.067],[118.1613,35.067],[118.1613,35.067],[118.1615,35.067],[118.1617,35.0669],[118.1618,35.0669],[118.1621,35.0669],[118.1622,35.0669],[118.1623,35.0668],[118.1624,35.0667],[118.1625,35.0666],[118.1629,35.0665],[118.1631,35.0665],[118.1631,35.0665],[118.1631,35.0665],[118.1632,35.0664],[118.1632,35.0664],[118.1633,35.0664],[118.1634,35.0664],[118.1635,35.0664],[118.1636,35.0675],[118.1637,35.0675],[118.1638,35.0675],[118.1638,35.0675],[118.1639,35.0676],[118.1639,35.0676],[118.164,35.0676],[118.164,35.0676],[118.1641,35.0676],[118.1641,35.0676],[118.1644,35.0677],[118.1649,35.0677],[118.1654,35.0678],[118.1659,35.0678],[118.1662,35.0678],[118.1662,35.0678],[118.1663,35.0677],[118.1663,35.0676],[118.1664,35.0676],[118.167,35.0675],[118.1674,35.0674]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106003","XZQMC":"黄泥港村","KZMJ":4228330.59,"JSMJ":4228330.55,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1496,35.0423,118.1771,35.0678]}},{"type":"Feature","id":"cunjie_4326.20","geometry":{"type":"MultiPolygon","coordinates":[[[[118.226,35.0594],[118.2262,35.0594],[118.2261,35.059],[118.2258,35.0588],[118.225,35.0584],[118.2243,35.058],[118.2236,35.0577],[118.2229,35.0572],[118.2223,35.0569],[118.2219,35.0567],[118.2219,35.0563],[118.221,35.0563],[118.221,35.0563],[118.2204,35.0563],[118.22,35.0563],[118.22,35.0563],[118.2196,35.0563],[118.2192,35.0563],[118.2192,35.0563],[118.2191,35.0563],[118.2189,35.0563],[118.2184,35.0563],[118.2183,35.0563],[118.2177,35.0563],[118.2171,35.0563],[118.2171,35.0564],[118.2169,35.0564],[118.2166,35.0564],[118.2142,35.0565],[118.2138,35.0565],[118.2138,35.0552],[118.2128,35.0553],[118.2119,35.0554],[118.2119,35.055],[118.2119,35.0549],[118.2119,35.0545],[118.2111,35.0545],[118.2111,35.0549],[118.2111,35.055],[118.2107,35.055],[118.2104,35.055],[118.2102,35.055],[118.2102,35.0552],[118.2102,35.0553],[118.21,35.0553],[118.2099,35.0553],[118.2097,35.0553],[118.2097,35.0553],[118.2097,35.0552],[118.2096,35.0551],[118.2096,35.0548],[118.2095,35.0541],[118.2094,35.0535],[118.2095,35.0535],[118.2095,35.0534],[118.2095,35.0533],[118.2094,35.0515],[118.2085,35.0514],[118.2078,35.0513],[118.2078,35.051],[118.2078,35.0506],[118.2078,35.0506],[118.2079,35.0504],[118.2079,35.0503],[118.2079,35.0503],[118.2079,35.0503],[118.2079,35.0496],[118.207,35.0496],[118.2065,35.0496],[118.2061,35.0496],[118.206,35.0501],[118.206,35.0511],[118.2053,35.0511],[118.2044,35.051],[118.2037,35.0509],[118.2037,35.0512],[118.2038,35.0518],[118.2037,35.0518],[118.2034,35.052],[118.2029,35.0522],[118.2027,35.0523],[118.2025,35.0524],[118.2025,35.0527],[118.2025,35.0528],[118.2025,35.0528],[118.2025,35.0528],[118.2025,35.0529],[118.2024,35.0529],[118.2023,35.0529],[118.2022,35.0529],[118.2022,35.053],[118.2021,35.053],[118.2019,35.0529],[118.2017,35.0529],[118.2008,35.0528],[118.2006,35.053],[118.2005,35.0531],[118.2005,35.0532],[118.2004,35.0532],[118.2004,35.0533],[118.2004,35.0533],[118.2003,35.0533],[118.2002,35.0533],[118.2002,35.0532],[118.2001,35.0532],[118.2001,35.0532],[118.2001,35.0531],[118.2001,35.0531],[118.2,35.0528],[118.1999,35.0526],[118.1997,35.0527],[118.1991,35.0528],[118.1991,35.0528],[118.1988,35.0529],[118.1987,35.0529],[118.1984,35.053],[118.1982,35.0531],[118.1973,35.053],[118.1973,35.0531],[118.1973,35.0535],[118.1973,35.0536],[118.1971,35.0536],[118.1968,35.0536],[118.1968,35.0538],[118.1967,35.0539],[118.1967,35.054],[118.1967,35.0541],[118.1967,35.0541],[118.1967,35.0541],[118.1967,35.0544],[118.1961,35.0548],[118.1959,35.0549],[118.1958,35.055],[118.1959,35.0551],[118.1959,35.0556],[118.1958,35.0559],[118.1959,35.056],[118.1961,35.0562],[118.1966,35.0566],[118.1969,35.0569],[118.1972,35.0569],[118.1974,35.057],[118.1977,35.0571],[118.1977,35.0573],[118.1976,35.0577],[118.1976,35.0577],[118.1976,35.0581],[118.1976,35.0584],[118.1976,35.0585],[118.1976,35.059],[118.1987,35.0591],[118.1987,35.0593],[118.1988,35.0598],[118.199,35.0598],[118.1991,35.0598],[118.1992,35.06],[118.1992,35.0601],[118.1993,35.0603],[118.1993,35.0603],[118.1993,35.0604],[118.1993,35.0604],[118.1996,35.0604],[118.1997,35.0604],[118.1999,35.0604],[118.2001,35.0604],[118.2002,35.0604],[118.2002,35.0604],[118.2003,35.0604],[118.2005,35.0603],[118.2005,35.0603],[118.2006,35.0603],[118.2007,35.0603],[118.2007,35.0605],[118.2007,35.0609],[118.2013,35.0608],[118.2014,35.0608],[118.2015,35.0608],[118.2018,35.0607],[118.202,35.0607],[118.2022,35.0607],[118.2023,35.0607],[118.2025,35.0606],[118.2028,35.0606],[118.2027,35.061],[118.2026,35.0615],[118.2026,35.0616],[118.2026,35.0618],[118.2026,35.0621],[118.2026,35.0625],[118.2027,35.0626],[118.2027,35.0627],[118.203,35.0626],[118.203,35.0629],[118.2031,35.0632],[118.2031,35.0633],[118.2031,35.0636],[118.2032,35.0636],[118.2032,35.0636],[118.2032,35.0638],[118.2032,35.0638],[118.2033,35.0638],[118.2033,35.0638],[118.2034,35.0638],[118.2035,35.0638],[118.2035,35.0638],[118.2036,35.0638],[118.2037,35.0638],[118.2037,35.0638],[118.2037,35.0638],[118.2038,35.0638],[118.2039,35.0637],[118.2039,35.0637],[118.2038,35.0635],[118.2038,35.0634],[118.2037,35.0632],[118.2037,35.0632],[118.2036,35.0631],[118.2035,35.0631],[118.2035,35.063],[118.2034,35.0629],[118.2034,35.0629],[118.2034,35.0629],[118.2033,35.0628],[118.2033,35.0628],[118.2033,35.0628],[118.2033,35.0628],[118.2033,35.0627],[118.2033,35.0626],[118.2034,35.0626],[118.2038,35.0625],[118.204,35.0624],[118.2043,35.0622],[118.2044,35.0623],[118.2044,35.0625],[118.2044,35.0626],[118.2045,35.0627],[118.2045,35.0627],[118.2046,35.0627],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0628],[118.2046,35.0629],[118.2046,35.0629],[118.2046,35.0631],[118.2047,35.0632],[118.2048,35.0633],[118.2049,35.0635],[118.2052,35.0639],[118.2053,35.064],[118.2055,35.0638],[118.2057,35.0637],[118.2055,35.0635],[118.2052,35.0634],[118.2055,35.0633],[118.2058,35.0632],[118.2061,35.0636],[118.2061,35.0638],[118.2063,35.064],[118.2063,35.064],[118.2066,35.0639],[118.2069,35.0637],[118.2064,35.0631],[118.2063,35.0625],[118.2063,35.0623],[118.2067,35.0623],[118.2075,35.0623],[118.2075,35.0625],[118.2075,35.0627],[118.2075,35.0629],[118.2076,35.0629],[118.2076,35.0629],[118.2077,35.0629],[118.2079,35.0629],[118.208,35.0629],[118.208,35.063],[118.2079,35.064],[118.2078,35.0642],[118.2078,35.0651],[118.2078,35.0652],[118.2078,35.0654],[118.2078,35.0655],[118.2081,35.0652],[118.2081,35.0651],[118.2084,35.065],[118.2084,35.065],[118.2086,35.0649],[118.2086,35.0648],[118.2086,35.0646],[118.2087,35.0638],[118.2087,35.0638],[118.2088,35.0631],[118.2088,35.063],[118.2088,35.0628],[118.2092,35.0629],[118.2092,35.0631],[118.2092,35.0631],[118.2091,35.0635],[118.2093,35.0636],[118.2093,35.0631],[118.2093,35.063],[118.2093,35.063],[118.2093,35.0629],[118.2093,35.0629],[118.2094,35.0629],[118.2097,35.0629],[118.2097,35.0625],[118.2097,35.0613],[118.2097,35.061],[118.2098,35.061],[118.2101,35.061],[118.2104,35.061],[118.2104,35.0605],[118.2111,35.0605],[118.2112,35.0605],[118.2112,35.0607],[118.2113,35.0613],[118.2117,35.0613],[118.2117,35.0614],[118.2117,35.0615],[118.2117,35.0616],[118.2117,35.0617],[118.2117,35.0622],[118.212,35.0622],[118.212,35.0614],[118.212,35.0612],[118.212,35.0611],[118.212,35.061],[118.2119,35.0606],[118.2119,35.0606],[118.2119,35.0605],[118.2119,35.0601],[118.2119,35.0598],[118.2129,35.0597],[118.2141,35.0596],[118.2141,35.0596],[118.2141,35.0592],[118.2142,35.0592],[118.2143,35.0592],[118.2144,35.0594],[118.2156,35.0593],[118.2161,35.0593],[118.2161,35.0591],[118.2162,35.0591],[118.2163,35.059],[118.2164,35.059],[118.2164,35.0591],[118.2166,35.0591],[118.2167,35.0591],[118.2167,35.0594],[118.2167,35.0597],[118.2169,35.0597],[118.2171,35.0597],[118.2176,35.0597],[118.218,35.0597],[118.2188,35.0596],[118.2189,35.0596],[118.2189,35.0596],[118.2189,35.0596],[118.22,35.0596],[118.22,35.0596],[118.22,35.0596],[118.2205,35.0596],[118.2206,35.0596],[118.2206,35.0596],[118.2219,35.0595],[118.2223,35.0595],[118.2225,35.0595],[118.2226,35.0595],[118.2229,35.0595],[118.2231,35.0595],[118.2242,35.0595],[118.2248,35.0595],[118.2254,35.0594],[118.226,35.0594]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106007","XZQMC":"西桥村","KZMJ":1838249.03,"JSMJ":1838249.04,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1958,35.0496,118.2262,35.0655]}},{"type":"Feature","id":"cunjie_4326.21","geometry":{"type":"MultiPolygon","coordinates":[[[[118.252,35.0626],[118.2523,35.0626],[118.2525,35.0626],[118.2527,35.0626],[118.253,35.0626],[118.253,35.0626],[118.253,35.0626],[118.2535,35.0626],[118.2536,35.0625],[118.2542,35.0625],[118.2547,35.0625],[118.2553,35.0624],[118.2553,35.062],[118.2553,35.0617],[118.2553,35.0617],[118.2553,35.0617],[118.2553,35.0604],[118.2575,35.0604],[118.2586,35.0604],[118.2585,35.0586],[118.2585,35.0579],[118.2586,35.0572],[118.2583,35.0572],[118.2583,35.057],[118.2583,35.0568],[118.2581,35.0568],[118.2581,35.0567],[118.2582,35.0566],[118.2582,35.0562],[118.2582,35.0561],[118.2581,35.0561],[118.2581,35.0557],[118.2581,35.055],[118.258,35.0547],[118.258,35.0539],[118.258,35.0535],[118.258,35.053],[118.258,35.0529],[118.2578,35.0529],[118.2577,35.0529],[118.2569,35.0529],[118.2569,35.0529],[118.2567,35.0529],[118.2554,35.0529],[118.2555,35.052],[118.2549,35.052],[118.2545,35.052],[118.2545,35.0512],[118.254,35.0512],[118.2531,35.0512],[118.2518,35.0512],[118.2516,35.0512],[118.2513,35.0512],[118.2494,35.0512],[118.2494,35.0517],[118.2485,35.0517],[118.2483,35.0517],[118.2469,35.0517],[118.2467,35.0518],[118.2453,35.0518],[118.2451,35.0518],[118.2451,35.0518],[118.245,35.0519],[118.2453,35.0549],[118.2453,35.055],[118.2454,35.0551],[118.2456,35.0572],[118.2458,35.0593],[118.2458,35.0598],[118.2458,35.0603],[118.2458,35.0604],[118.2459,35.0604],[118.2459,35.0611],[118.2459,35.0613],[118.246,35.0619],[118.246,35.062],[118.246,35.0625],[118.246,35.0628],[118.2461,35.063],[118.2461,35.063],[118.2462,35.063],[118.2465,35.063],[118.247,35.063],[118.2471,35.063],[118.2475,35.0629],[118.2479,35.0629],[118.248,35.0629],[118.2486,35.0629],[118.2486,35.0634],[118.2486,35.0637],[118.2487,35.064],[118.2487,35.0641],[118.2487,35.0648],[118.2487,35.0648],[118.2488,35.0648],[118.2488,35.0648],[118.2489,35.0648],[118.249,35.0648],[118.249,35.0648],[118.2491,35.0648],[118.2498,35.0648],[118.2499,35.0648],[118.2499,35.0648],[118.25,35.0648],[118.2499,35.0643],[118.2499,35.0638],[118.2499,35.0633],[118.2499,35.0629],[118.2498,35.0627],[118.2499,35.0627],[118.2499,35.0627],[118.2505,35.0627],[118.2509,35.0627],[118.2512,35.0627],[118.2515,35.0627],[118.2518,35.0627],[118.2519,35.0626],[118.2519,35.0626],[118.252,35.0626]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106024","XZQMC":"西墩村","KZMJ":1363900.98,"JSMJ":1363900.98,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.245,35.0512,118.2586,35.0648]}},{"type":"Feature","id":"cunjie_4326.22","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2372,35.0643],[118.2372,35.0642],[118.2372,35.0637],[118.2372,35.0637],[118.2372,35.0635],[118.2369,35.0635],[118.2365,35.0635],[118.2364,35.0625],[118.2363,35.0621],[118.2364,35.0621],[118.2367,35.0621],[118.237,35.0621],[118.2372,35.0621],[118.2372,35.0618],[118.2373,35.0617],[118.2374,35.0614],[118.2377,35.0614],[118.2377,35.0614],[118.2379,35.0613],[118.2379,35.0613],[118.2385,35.0613],[118.2385,35.0611],[118.2392,35.0611],[118.2391,35.0604],[118.2402,35.0603],[118.2403,35.062],[118.2413,35.0619],[118.2413,35.0618],[118.2413,35.0615],[118.2413,35.061],[118.2412,35.0607],[118.2412,35.0603],[118.2416,35.0603],[118.2417,35.0603],[118.2418,35.0616],[118.242,35.0616],[118.2421,35.0615],[118.2424,35.0615],[118.2424,35.0617],[118.2427,35.0617],[118.2427,35.0618],[118.2428,35.0618],[118.2434,35.0618],[118.2435,35.0618],[118.2434,35.0613],[118.2434,35.0612],[118.2434,35.0609],[118.2434,35.0604],[118.2433,35.0602],[118.2433,35.0597],[118.2433,35.0593],[118.2433,35.0593],[118.2433,35.0593],[118.2433,35.0592],[118.2432,35.0587],[118.2437,35.0587],[118.2438,35.0587],[118.244,35.0587],[118.2442,35.0587],[118.2444,35.0587],[118.2444,35.0589],[118.2445,35.0593],[118.2445,35.0593],[118.2454,35.0593],[118.2456,35.0593],[118.2458,35.0593],[118.2456,35.0572],[118.2454,35.0551],[118.2453,35.055],[118.2453,35.0549],[118.245,35.0519],[118.2449,35.0513],[118.2448,35.0513],[118.2448,35.0513],[118.2446,35.0513],[118.2445,35.0513],[118.2437,35.0513],[118.2437,35.0513],[118.2436,35.0513],[118.2427,35.0513],[118.2425,35.0495],[118.2425,35.0495],[118.2416,35.0495],[118.2415,35.0495],[118.2412,35.0495],[118.241,35.0495],[118.2409,35.0495],[118.2408,35.0495],[118.2397,35.0495],[118.2385,35.0495],[118.2381,35.0495],[118.2366,35.0495],[118.2367,35.05],[118.2367,35.0513],[118.2365,35.0513],[118.2362,35.0514],[118.2362,35.0514],[118.2362,35.0517],[118.2363,35.0521],[118.2363,35.0524],[118.2363,35.0529],[118.2363,35.0531],[118.2363,35.0532],[118.2363,35.0537],[118.2363,35.0537],[118.2363,35.0542],[118.2364,35.0544],[118.2364,35.0551],[118.2364,35.0552],[118.2364,35.0561],[118.2365,35.057],[118.2364,35.057],[118.2364,35.0573],[118.2363,35.0573],[118.2362,35.0573],[118.2361,35.0573],[118.2359,35.0572],[118.2358,35.0572],[118.2358,35.0574],[118.2358,35.0575],[118.2359,35.0577],[118.2359,35.0583],[118.2365,35.0583],[118.2365,35.0587],[118.2362,35.0588],[118.2362,35.059],[118.236,35.0591],[118.2356,35.0591],[118.2356,35.0596],[118.2352,35.0597],[118.2352,35.06],[118.2349,35.06],[118.2349,35.0606],[118.235,35.061],[118.2348,35.0611],[118.2347,35.0611],[118.2346,35.0612],[118.2347,35.0614],[118.2348,35.0615],[118.2349,35.0617],[118.2349,35.0619],[118.235,35.0622],[118.235,35.0624],[118.235,35.0625],[118.2351,35.0639],[118.2351,35.0646],[118.2351,35.0648],[118.2353,35.0648],[118.2354,35.0648],[118.2355,35.0646],[118.2358,35.0644],[118.236,35.0642],[118.2361,35.0642],[118.2362,35.0642],[118.2363,35.0642],[118.2365,35.0643],[118.2366,35.0643],[118.2367,35.0643],[118.2369,35.0643],[118.237,35.0643],[118.2371,35.0643],[118.2372,35.0643],[118.2372,35.0643]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106025","XZQMC":"大姜家村","KZMJ":1061509.34,"JSMJ":1061509.34,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2346,35.0495,118.2458,35.0648]}},{"type":"Feature","id":"cunjie_4326.23","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2461,35.063],[118.246,35.0628],[118.246,35.0625],[118.246,35.062],[118.246,35.0619],[118.2459,35.0613],[118.2459,35.0611],[118.2459,35.0604],[118.2458,35.0604],[118.2458,35.0603],[118.2458,35.0598],[118.2458,35.0593],[118.2456,35.0593],[118.2454,35.0593],[118.2445,35.0593],[118.2445,35.0593],[118.2444,35.0589],[118.2444,35.0587],[118.2442,35.0587],[118.244,35.0587],[118.2438,35.0587],[118.2437,35.0587],[118.2432,35.0587],[118.2433,35.0592],[118.2433,35.0593],[118.2433,35.0593],[118.2433,35.0593],[118.2433,35.0597],[118.2433,35.0602],[118.2434,35.0604],[118.2434,35.0609],[118.2434,35.0612],[118.2434,35.0613],[118.2435,35.0618],[118.2434,35.0618],[118.2428,35.0618],[118.2427,35.0618],[118.2427,35.0617],[118.2424,35.0617],[118.2424,35.0615],[118.2421,35.0615],[118.242,35.0616],[118.2418,35.0616],[118.2417,35.0603],[118.2416,35.0603],[118.2412,35.0603],[118.2412,35.0607],[118.2413,35.061],[118.2413,35.0615],[118.2413,35.0618],[118.2413,35.0619],[118.2403,35.062],[118.2402,35.0603],[118.2391,35.0604],[118.2392,35.0611],[118.2385,35.0611],[118.2385,35.0613],[118.2379,35.0613],[118.2379,35.0613],[118.2377,35.0614],[118.2377,35.0614],[118.2374,35.0614],[118.2373,35.0617],[118.2372,35.0618],[118.2372,35.0621],[118.237,35.0621],[118.2367,35.0621],[118.2364,35.0621],[118.2363,35.0621],[118.2364,35.0625],[118.2365,35.0635],[118.2369,35.0635],[118.2372,35.0635],[118.2372,35.0637],[118.2372,35.0637],[118.2372,35.0642],[118.2372,35.0643],[118.2373,35.0644],[118.2373,35.0644],[118.2373,35.0644],[118.2374,35.0644],[118.2375,35.0645],[118.2376,35.0645],[118.2377,35.0645],[118.238,35.0645],[118.2387,35.0644],[118.239,35.0644],[118.2397,35.0643],[118.241,35.0642],[118.2412,35.0642],[118.2417,35.0642],[118.2421,35.0642],[118.2425,35.0641],[118.2427,35.0641],[118.2429,35.0641],[118.2429,35.064],[118.2429,35.0636],[118.2428,35.0632],[118.2435,35.0631],[118.2448,35.0631],[118.2453,35.0631],[118.246,35.063],[118.2461,35.063]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106026","XZQMC":"小姜家村","KZMJ":301319.1,"JSMJ":301319.14,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2363,35.0587,118.2461,35.0645]}},{"type":"Feature","id":"cunjie_4326.24","geometry":{"type":"MultiPolygon","coordinates":[[[[118.262,35.0622],[118.262,35.0621],[118.2619,35.0619],[118.2618,35.0617],[118.2618,35.0616],[118.2618,35.0615],[118.2618,35.0614],[118.2618,35.0614],[118.2618,35.061],[118.2618,35.0608],[118.2618,35.0608],[118.2618,35.0605],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2618,35.0604],[118.2623,35.0604],[118.2624,35.0604],[118.2624,35.0604],[118.2624,35.0603],[118.2624,35.0603],[118.2625,35.0602],[118.2625,35.0601],[118.2626,35.0601],[118.2627,35.0601],[118.2627,35.0601],[118.2627,35.0598],[118.2628,35.0598],[118.2628,35.0598],[118.2628,35.0598],[118.2629,35.0598],[118.263,35.0598],[118.263,35.0595],[118.263,35.0595],[118.263,35.0594],[118.263,35.0589],[118.263,35.0586],[118.263,35.0585],[118.2631,35.058],[118.2633,35.0581],[118.2638,35.0581],[118.2639,35.0581],[118.264,35.0581],[118.264,35.0581],[118.2645,35.0582],[118.2645,35.0582],[118.2646,35.0582],[118.2647,35.0582],[118.2652,35.0583],[118.2652,35.0583],[118.2653,35.0583],[118.2656,35.0583],[118.2656,35.0581],[118.2656,35.0579],[118.2656,35.0574],[118.2656,35.0571],[118.2656,35.057],[118.2656,35.057],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0569],[118.2656,35.0568],[118.2656,35.0566],[118.2656,35.0566],[118.2656,35.0566],[118.2656,35.0566],[118.2657,35.0565],[118.2657,35.0559],[118.2657,35.0556],[118.2657,35.0555],[118.2657,35.0555],[118.2657,35.0555],[118.2656,35.0555],[118.2655,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0555],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0554],[118.2654,35.0553],[118.2654,35.0552],[118.2654,35.0551],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0547],[118.2655,35.0546],[118.2655,35.0546],[118.2655,35.0546],[118.2655,35.0543],[118.2655,35.0541],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0539],[118.2655,35.0537],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0533],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0529],[118.2655,35.0528],[118.2655,35.0527],[118.2655,35.0522],[118.2655,35.0522],[118.2655,35.0522],[118.2655,35.0521],[118.2656,35.0519],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.0517],[118.2656,35.051],[118.2656,35.051],[118.2656,35.0509],[118.2657,35.0504],[118.2657,35.0502],[118.2654,35.0502],[118.2637,35.0503],[118.2625,35.0503],[118.2607,35.0503],[118.2602,35.0504],[118.26,35.0504],[118.26,35.05],[118.2589,35.0501],[118.2589,35.0502],[118.2577,35.0502],[118.2576,35.0501],[118.2557,35.0501],[118.2556,35.0511],[118.2545,35.0512],[118.2545,35.052],[118.2549,35.052],[118.2555,35.052],[118.2554,35.0529],[118.2567,35.0529],[118.2569,35.0529],[118.2569,35.0529],[118.2577,35.0529],[118.2578,35.0529],[118.258,35.0529],[118.258,35.053],[118.258,35.0535],[118.258,35.0539],[118.258,35.0547],[118.2581,35.055],[118.2581,35.0557],[118.2581,35.0561],[118.2582,35.0561],[118.2582,35.0562],[118.2582,35.0566],[118.2581,35.0567],[118.2581,35.0568],[118.2583,35.0568],[118.2583,35.057],[118.2583,35.0572],[118.2586,35.0572],[118.2585,35.0579],[118.2585,35.0586],[118.2586,35.0604],[118.2575,35.0604],[118.2553,35.0604],[118.2553,35.0617],[118.256,35.0617],[118.2565,35.0617],[118.257,35.0617],[118.2575,35.0616],[118.2576,35.0616],[118.2576,35.0617],[118.2576,35.0617],[118.2576,35.062],[118.2576,35.0623],[118.2576,35.0624],[118.2577,35.0623],[118.2577,35.0623],[118.2578,35.0623],[118.2582,35.0623],[118.2583,35.0623],[118.2588,35.0623],[118.2589,35.0623],[118.2589,35.0623],[118.2591,35.0625],[118.2591,35.0625],[118.2591,35.0626],[118.2592,35.0626],[118.2592,35.0627],[118.2593,35.0627],[118.2594,35.0627],[118.2594,35.0627],[118.2594,35.0627],[118.2596,35.0628],[118.26,35.0628],[118.26,35.0628],[118.2601,35.0627],[118.2604,35.0627],[118.2604,35.0627],[118.2605,35.0627],[118.2606,35.0627],[118.2607,35.0627],[118.2608,35.0628],[118.2608,35.0628],[118.2608,35.0628],[118.2611,35.063],[118.2614,35.0628],[118.2614,35.0628],[118.2614,35.0627],[118.2614,35.0627],[118.2615,35.0627],[118.2615,35.0627],[118.2617,35.0625],[118.2619,35.0623],[118.262,35.0622],[118.262,35.0622]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106023","XZQMC":"东墩村","KZMJ":899387.38,"JSMJ":899387.36,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2545,35.05,118.2657,35.063]}},{"type":"Feature","id":"cunjie_4326.25","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2347,35.0611],[118.2348,35.0611],[118.235,35.061],[118.2349,35.0606],[118.2349,35.06],[118.2352,35.06],[118.2352,35.0597],[118.2356,35.0596],[118.2356,35.0591],[118.236,35.0591],[118.2362,35.059],[118.2362,35.0588],[118.2365,35.0587],[118.2365,35.0583],[118.2359,35.0583],[118.2359,35.0577],[118.2346,35.0578],[118.2347,35.058],[118.2347,35.0582],[118.2342,35.0583],[118.2342,35.0582],[118.2341,35.058],[118.2341,35.0579],[118.2341,35.0578],[118.234,35.0578],[118.2339,35.0578],[118.2338,35.0578],[118.2337,35.0577],[118.2336,35.0576],[118.2335,35.0575],[118.2335,35.0574],[118.2335,35.0571],[118.2335,35.057],[118.2334,35.0569],[118.2334,35.0568],[118.2333,35.0567],[118.2333,35.0567],[118.2331,35.0567],[118.2331,35.0566],[118.2331,35.0566],[118.2331,35.0565],[118.2331,35.0565],[118.2331,35.0564],[118.2331,35.0563],[118.233,35.0563],[118.233,35.0562],[118.2329,35.0562],[118.2329,35.0561],[118.2327,35.0561],[118.2323,35.0561],[118.2318,35.0562],[118.2318,35.0562],[118.2318,35.0565],[118.2318,35.0565],[118.232,35.0565],[118.2323,35.0565],[118.2324,35.0581],[118.2325,35.0592],[118.2333,35.0592],[118.2334,35.0597],[118.233,35.0597],[118.233,35.0599],[118.2324,35.0599],[118.2317,35.06],[118.2316,35.0593],[118.231,35.0593],[118.231,35.0593],[118.2309,35.0583],[118.2307,35.057],[118.2305,35.0552],[118.2304,35.0552],[118.2299,35.0552],[118.2296,35.0552],[118.2295,35.0552],[118.2295,35.0552],[118.2287,35.0552],[118.2283,35.0552],[118.2282,35.0552],[118.228,35.0541],[118.2279,35.0533],[118.2279,35.0533],[118.2278,35.0524],[118.2277,35.0516],[118.2278,35.0515],[118.2278,35.0515],[118.228,35.0515],[118.2286,35.0515],[118.2286,35.0512],[118.2285,35.0495],[118.2285,35.0495],[118.2285,35.0494],[118.2283,35.0494],[118.2282,35.0494],[118.2282,35.0494],[118.2282,35.0494],[118.2279,35.0495],[118.2278,35.0495],[118.2276,35.0495],[118.2275,35.0495],[118.2274,35.0495],[118.2272,35.0495],[118.2271,35.0495],[118.227,35.0495],[118.227,35.0495],[118.2266,35.0495],[118.2262,35.0496],[118.2258,35.0496],[118.2258,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.225,35.0496],[118.2245,35.0496],[118.224,35.0497],[118.224,35.0497],[118.2239,35.0497],[118.2239,35.0497],[118.2238,35.0499],[118.2238,35.05],[118.2238,35.0503],[118.2238,35.0505],[118.2239,35.0512],[118.2239,35.0514],[118.2239,35.0517],[118.2239,35.052],[118.2247,35.0519],[118.2259,35.0519],[118.2259,35.0527],[118.2259,35.0529],[118.226,35.0534],[118.2259,35.0536],[118.2259,35.0537],[118.226,35.0541],[118.226,35.0541],[118.226,35.0541],[118.226,35.0543],[118.2265,35.0544],[118.2265,35.0553],[118.2265,35.0561],[118.2265,35.0572],[118.2267,35.0572],[118.2267,35.0573],[118.2268,35.0593],[118.2261,35.059],[118.2262,35.0594],[118.226,35.0594],[118.226,35.0597],[118.2273,35.0597],[118.2278,35.0597],[118.2277,35.0594],[118.2277,35.0593],[118.2277,35.0571],[118.2284,35.0571],[118.2284,35.0571],[118.2287,35.0587],[118.2287,35.0593],[118.2289,35.0603],[118.2289,35.061],[118.229,35.0609],[118.2299,35.0609],[118.2311,35.0608],[118.2311,35.0608],[118.2312,35.0608],[118.2318,35.0608],[118.2332,35.0607],[118.2338,35.0607],[118.2339,35.0613],[118.2344,35.0613],[118.2345,35.0612],[118.2347,35.0611]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106027","XZQMC":"城前村","KZMJ":492526.45,"JSMJ":492526.45,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2238,35.0494,118.2365,35.0613]}},{"type":"Feature","id":"cunjie_4326.26","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2327,35.0561],[118.2327,35.056],[118.2327,35.0559],[118.2327,35.0557],[118.2326,35.0556],[118.2326,35.0556],[118.2326,35.0552],[118.2318,35.0552],[118.2317,35.0546],[118.2319,35.0546],[118.2319,35.0543],[118.2319,35.0539],[118.2318,35.0533],[118.2318,35.0519],[118.2318,35.0514],[118.2316,35.0514],[118.2311,35.0515],[118.2311,35.0513],[118.2311,35.0512],[118.2311,35.0511],[118.231,35.0508],[118.231,35.0506],[118.231,35.0504],[118.231,35.0502],[118.231,35.05],[118.2309,35.0494],[118.2306,35.0494],[118.2305,35.0494],[118.23,35.0494],[118.2299,35.0494],[118.2299,35.0494],[118.2299,35.0494],[118.2299,35.0494],[118.2299,35.0494],[118.2298,35.0494],[118.2297,35.0494],[118.2297,35.0494],[118.2297,35.0494],[118.2297,35.0494],[118.2297,35.0494],[118.2296,35.0494],[118.2292,35.0494],[118.2289,35.0494],[118.2287,35.0494],[118.2285,35.0494],[118.2285,35.0495],[118.2285,35.0495],[118.2286,35.0512],[118.2286,35.0515],[118.228,35.0515],[118.2278,35.0515],[118.2278,35.0515],[118.2277,35.0516],[118.2278,35.0524],[118.2279,35.0533],[118.2279,35.0533],[118.228,35.0541],[118.2282,35.0552],[118.2283,35.0552],[118.2287,35.0552],[118.2295,35.0552],[118.2295,35.0552],[118.2296,35.0552],[118.2299,35.0552],[118.2304,35.0552],[118.2305,35.0552],[118.2307,35.057],[118.2309,35.0583],[118.231,35.0593],[118.231,35.0593],[118.2316,35.0593],[118.2317,35.06],[118.2324,35.0599],[118.233,35.0599],[118.233,35.0597],[118.2334,35.0597],[118.2333,35.0592],[118.2325,35.0592],[118.2324,35.0581],[118.2323,35.0565],[118.232,35.0565],[118.2318,35.0565],[118.2318,35.0565],[118.2318,35.0562],[118.2318,35.0562],[118.2323,35.0561],[118.2327,35.0561]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106029","XZQMC":"马宅子村","KZMJ":276644.45,"JSMJ":276644.46,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2277,35.0494,118.2334,35.06]}},{"type":"Feature","id":"cunjie_4326.27","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2239,35.0497],[118.2239,35.0497],[118.2238,35.0493],[118.2238,35.049],[118.2238,35.049],[118.2238,35.049],[118.2237,35.049],[118.2234,35.049],[118.2234,35.049],[118.2234,35.0488],[118.2234,35.0488],[118.2234,35.0487],[118.2234,35.0487],[118.2233,35.0484],[118.2233,35.0484],[118.2233,35.0479],[118.2233,35.0475],[118.2233,35.047],[118.2233,35.047],[118.2229,35.047],[118.2229,35.047],[118.2229,35.047],[118.2229,35.047],[118.2225,35.0471],[118.2222,35.0471],[118.222,35.0471],[118.2216,35.0471],[118.2213,35.0471],[118.2213,35.0471],[118.2213,35.0471],[118.2208,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2206,35.0472],[118.2204,35.0472],[118.2204,35.0472],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.2199,35.0473],[118.2199,35.0473],[118.2198,35.0473],[118.2196,35.0473],[118.2196,35.0473],[118.2196,35.0473],[118.2195,35.0473],[118.2195,35.0473],[118.2195,35.0473],[118.2195,35.0473],[118.2191,35.0473],[118.2191,35.0473],[118.2191,35.0473],[118.2191,35.0473],[118.2191,35.0469],[118.2191,35.0468],[118.2191,35.0468],[118.219,35.0464],[118.219,35.0462],[118.219,35.0462],[118.219,35.046],[118.219,35.0456],[118.219,35.0453],[118.2188,35.0453],[118.2187,35.0453],[118.2187,35.0453],[118.2187,35.0453],[118.2187,35.0453],[118.2186,35.0453],[118.2182,35.0453],[118.2179,35.0453],[118.2174,35.0453],[118.2172,35.0453],[118.2172,35.0453],[118.2172,35.0453],[118.2171,35.0453],[118.2171,35.0453],[118.2171,35.0453],[118.2171,35.0457],[118.2171,35.0459],[118.2171,35.046],[118.2171,35.0462],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2169,35.0463],[118.2166,35.0463],[118.2161,35.0464],[118.2158,35.0464],[118.2156,35.0464],[118.2154,35.0464],[118.2155,35.0462],[118.2155,35.0462],[118.2155,35.0462],[118.2155,35.046],[118.2155,35.046],[118.2155,35.046],[118.2156,35.046],[118.2156,35.0459],[118.2156,35.0459],[118.2156,35.0458],[118.2156,35.0457],[118.2156,35.0457],[118.2156,35.0457],[118.215,35.0457],[118.2145,35.0458],[118.2142,35.0458],[118.2138,35.0458],[118.2138,35.0458],[118.2138,35.0458],[118.2137,35.0458],[118.2137,35.0458],[118.2137,35.0456],[118.2137,35.0455],[118.2137,35.045],[118.2137,35.0448],[118.2137,35.0447],[118.2137,35.0446],[118.2136,35.0446],[118.2136,35.0446],[118.2136,35.0446],[118.2133,35.0446],[118.2128,35.0446],[118.2123,35.0446],[118.2119,35.0446],[118.2114,35.0446],[118.2114,35.0446],[118.2114,35.0447],[118.2114,35.0447],[118.2114,35.0448],[118.2114,35.0448],[118.2114,35.0448],[118.2114,35.045],[118.2114,35.045],[118.2112,35.045],[118.211,35.045],[118.2107,35.045],[118.2107,35.045],[118.2107,35.045],[118.2107,35.045],[118.2106,35.045],[118.2105,35.045],[118.2105,35.045],[118.2105,35.045],[118.2105,35.045],[118.2104,35.045],[118.2103,35.045],[118.2103,35.0447],[118.2103,35.0447],[118.2103,35.0444],[118.2103,35.0441],[118.2103,35.0438],[118.2102,35.0438],[118.2101,35.0438],[118.2101,35.0438],[118.2101,35.0438],[118.2101,35.0438],[118.21,35.0438],[118.21,35.0438],[118.21,35.0438],[118.2099,35.0438],[118.2099,35.0438],[118.2099,35.0437],[118.2099,35.0433],[118.2099,35.0433],[118.2099,35.0432],[118.2098,35.0432],[118.2093,35.0432],[118.2093,35.0432],[118.2089,35.0432],[118.2088,35.0432],[118.2086,35.0432],[118.2086,35.0432],[118.2086,35.0432],[118.2086,35.0429],[118.2086,35.0428],[118.2086,35.0425],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0424],[118.2085,35.0425],[118.2083,35.0425],[118.2083,35.0426],[118.2081,35.0427],[118.2079,35.0428],[118.2079,35.0428],[118.2078,35.0428],[118.2078,35.0428],[118.2077,35.0428],[118.2075,35.0429],[118.2074,35.0429],[118.2074,35.0429],[118.2073,35.0429],[118.2072,35.0429],[118.2072,35.0429],[118.2072,35.0429],[118.2072,35.043],[118.2072,35.0434],[118.2072,35.0437],[118.2071,35.0443],[118.2067,35.0442],[118.2067,35.0442],[118.2067,35.0442],[118.2066,35.0442],[118.2065,35.0443],[118.2064,35.0443],[118.2064,35.0443],[118.2064,35.0443],[118.2064,35.0443],[118.2063,35.0444],[118.2063,35.0444],[118.2061,35.0444],[118.2059,35.0444],[118.2058,35.0444],[118.2056,35.0444],[118.2054,35.0444],[118.205,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0447],[118.2046,35.045],[118.2043,35.0448],[118.2042,35.0448],[118.2041,35.0446],[118.2038,35.0445],[118.2038,35.0447],[118.2038,35.0449],[118.2038,35.0452],[118.2038,35.0452],[118.2038,35.0452],[118.2038,35.0452],[118.2038,35.0453],[118.2038,35.0457],[118.2038,35.0457],[118.2037,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2029,35.0457],[118.2027,35.0457],[118.2027,35.0452],[118.2027,35.0451],[118.2024,35.0451],[118.2021,35.0451],[118.202,35.0451],[118.202,35.0451],[118.2015,35.0451],[118.2015,35.0451],[118.2015,35.0451],[118.2015,35.0451],[118.2015,35.0451],[118.2015,35.0451],[118.2014,35.0452],[118.2014,35.0452],[118.2012,35.0453],[118.2012,35.0453],[118.2012,35.0454],[118.2011,35.0455],[118.201,35.0456],[118.201,35.0456],[118.2009,35.0456],[118.2007,35.0458],[118.2006,35.0459],[118.2005,35.0459],[118.2004,35.0461],[118.2004,35.0461],[118.2003,35.0461],[118.2002,35.0463],[118.1999,35.0466],[118.1999,35.0467],[118.1997,35.0469],[118.1996,35.0471],[118.1995,35.0472],[118.1993,35.0474],[118.1993,35.0475],[118.1993,35.0475],[118.1992,35.0476],[118.1992,35.0476],[118.199,35.0476],[118.1987,35.0476],[118.1983,35.0476],[118.1982,35.0476],[118.1978,35.0476],[118.1976,35.0477],[118.1975,35.0478],[118.1975,35.0478],[118.1975,35.0478],[118.1973,35.0479],[118.197,35.0481],[118.1974,35.0481],[118.1974,35.0482],[118.1974,35.0483],[118.1974,35.0484],[118.1974,35.0486],[118.1975,35.0486],[118.1975,35.0486],[118.1975,35.0486],[118.1978,35.0486],[118.1979,35.0486],[118.1979,35.0486],[118.1979,35.0486],[118.1978,35.0486],[118.1976,35.0487],[118.1976,35.0488],[118.1975,35.0488],[118.1975,35.0488],[118.1973,35.0489],[118.197,35.0491],[118.197,35.0491],[118.197,35.0491],[118.197,35.0491],[118.1969,35.0491],[118.1969,35.0491],[118.1969,35.0491],[118.1967,35.0493],[118.1965,35.0493],[118.1964,35.0494],[118.1962,35.0494],[118.1961,35.0495],[118.1961,35.0495],[118.1959,35.0495],[118.1958,35.0496],[118.1958,35.0496],[118.1958,35.0496],[118.1957,35.0496],[118.1956,35.0496],[118.1953,35.0497],[118.1952,35.0498],[118.195,35.0498],[118.1947,35.0499],[118.1944,35.0499],[118.1944,35.05],[118.1944,35.0502],[118.1944,35.0505],[118.1944,35.0507],[118.1944,35.0507],[118.1944,35.0507],[118.1943,35.0511],[118.1943,35.0513],[118.1943,35.0513],[118.1938,35.0513],[118.1937,35.0513],[118.1937,35.0513],[118.1936,35.0513],[118.1936,35.0513],[118.1936,35.0513],[118.1936,35.0515],[118.1936,35.0515],[118.1935,35.0515],[118.1934,35.0515],[118.1932,35.0514],[118.1929,35.0514],[118.1929,35.0514],[118.1929,35.051],[118.1929,35.0509],[118.1929,35.0507],[118.193,35.0506],[118.193,35.0504],[118.193,35.0504],[118.193,35.0504],[118.193,35.0503],[118.193,35.0503],[118.1926,35.0502],[118.1925,35.0502],[118.1922,35.0502],[118.192,35.0502],[118.1919,35.0502],[118.1918,35.0502],[118.1915,35.0502],[118.1915,35.0502],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.191,35.0503],[118.191,35.0503],[118.1908,35.0503],[118.1907,35.0503],[118.1907,35.0503],[118.1906,35.0503],[118.1905,35.0503],[118.1904,35.0503],[118.1903,35.0503],[118.1903,35.0503],[118.1903,35.0503],[118.1903,35.0505],[118.1903,35.0505],[118.1901,35.0505],[118.1898,35.0505],[118.1896,35.0505],[118.1896,35.0505],[118.1896,35.0505],[118.1896,35.0505],[118.1895,35.0505],[118.1894,35.0505],[118.1894,35.0506],[118.1894,35.0506],[118.1894,35.0507],[118.1894,35.0507],[118.1894,35.0507],[118.1894,35.051],[118.1893,35.0513],[118.1893,35.0513],[118.1893,35.0513],[118.1893,35.0514],[118.1893,35.0516],[118.1893,35.0519],[118.1893,35.0519],[118.1893,35.0519],[118.1892,35.052],[118.1892,35.0524],[118.1892,35.0524],[118.1893,35.0525],[118.1896,35.0525],[118.1897,35.0524],[118.1898,35.0524],[118.1899,35.052],[118.19,35.0512],[118.1905,35.0513],[118.1912,35.0513],[118.1913,35.0506],[118.1918,35.0506],[118.1917,35.051],[118.1918,35.0512],[118.1919,35.0512],[118.1918,35.0518],[118.1917,35.0523],[118.1916,35.0525],[118.1916,35.0526],[118.1915,35.0528],[118.1915,35.053],[118.1914,35.0531],[118.1917,35.0531],[118.1917,35.054],[118.1919,35.054],[118.1924,35.054],[118.1924,35.0542],[118.1924,35.0543],[118.1931,35.0546],[118.1932,35.0546],[118.1937,35.0549],[118.194,35.0549],[118.1943,35.0549],[118.1946,35.0549],[118.1949,35.0549],[118.1951,35.0548],[118.1953,35.0548],[118.1956,35.0548],[118.1957,35.0548],[118.1958,35.055],[118.1959,35.0549],[118.1961,35.0548],[118.1967,35.0544],[118.1967,35.0541],[118.1967,35.0541],[118.1967,35.0541],[118.1967,35.054],[118.1967,35.0539],[118.1968,35.0538],[118.1968,35.0536],[118.1971,35.0536],[118.1973,35.0536],[118.1973,35.0535],[118.1973,35.0531],[118.1973,35.053],[118.1982,35.0531],[118.1984,35.053],[118.1987,35.0529],[118.1988,35.0529],[118.1991,35.0528],[118.1991,35.0528],[118.1997,35.0527],[118.1999,35.0526],[118.2,35.0528],[118.2001,35.0531],[118.2001,35.0531],[118.2001,35.0532],[118.2001,35.0532],[118.2002,35.0532],[118.2002,35.0533],[118.2003,35.0533],[118.2004,35.0533],[118.2004,35.0533],[118.2004,35.0532],[118.2005,35.0532],[118.2005,35.0531],[118.2006,35.053],[118.2008,35.0528],[118.2017,35.0529],[118.2019,35.0529],[118.2021,35.053],[118.2022,35.053],[118.2022,35.0529],[118.2023,35.0529],[118.2024,35.0529],[118.2025,35.0529],[118.2025,35.0528],[118.2025,35.0528],[118.2025,35.0528],[118.2025,35.0527],[118.2025,35.0524],[118.2027,35.0523],[118.2029,35.0522],[118.2034,35.052],[118.2037,35.0518],[118.2038,35.0518],[118.2037,35.0512],[118.2037,35.0509],[118.2044,35.051],[118.2053,35.0511],[118.206,35.0511],[118.206,35.0501],[118.2061,35.0496],[118.2065,35.0496],[118.207,35.0496],[118.2079,35.0496],[118.2079,35.0503],[118.2079,35.0503],[118.2079,35.0503],[118.2079,35.0504],[118.2078,35.0506],[118.2078,35.0506],[118.2078,35.051],[118.2078,35.0513],[118.2085,35.0514],[118.2094,35.0515],[118.2095,35.0533],[118.2095,35.0534],[118.2095,35.0535],[118.2094,35.0535],[118.2095,35.0541],[118.2096,35.0548],[118.2096,35.0551],[118.2097,35.0552],[118.2097,35.0553],[118.2097,35.0553],[118.2099,35.0553],[118.21,35.0553],[118.2102,35.0553],[118.2102,35.0552],[118.2102,35.055],[118.2104,35.055],[118.2107,35.055],[118.2111,35.055],[118.2111,35.0549],[118.2111,35.0545],[118.2119,35.0545],[118.2119,35.0549],[118.2119,35.055],[118.2119,35.0554],[118.2128,35.0553],[118.2138,35.0552],[118.2138,35.0565],[118.2142,35.0565],[118.2166,35.0564],[118.2169,35.0564],[118.2171,35.0564],[118.2171,35.0563],[118.2177,35.0563],[118.2183,35.0563],[118.2184,35.0563],[118.2189,35.0563],[118.2191,35.0563],[118.2192,35.0563],[118.2192,35.0563],[118.2196,35.0563],[118.22,35.0563],[118.22,35.0563],[118.2204,35.0563],[118.221,35.0563],[118.221,35.0563],[118.2219,35.0563],[118.2219,35.0567],[118.2223,35.0569],[118.2229,35.0572],[118.2236,35.0577],[118.2243,35.058],[118.225,35.0584],[118.2258,35.0588],[118.2261,35.059],[118.2268,35.0593],[118.2267,35.0573],[118.2267,35.0572],[118.2265,35.0572],[118.2265,35.0561],[118.2265,35.0553],[118.2265,35.0544],[118.226,35.0543],[118.226,35.0541],[118.226,35.0541],[118.226,35.0541],[118.2259,35.0537],[118.2259,35.0536],[118.226,35.0534],[118.2259,35.0529],[118.2259,35.0527],[118.2259,35.0519],[118.2247,35.0519],[118.2239,35.052],[118.2239,35.0517],[118.2239,35.0514],[118.2239,35.0512],[118.2238,35.0505],[118.2238,35.0503],[118.2238,35.05],[118.2238,35.0499],[118.2239,35.0497]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106008","XZQMC":"南桥村","KZMJ":2733790.96,"JSMJ":2733790.95,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1892,35.0424,118.2268,35.0593]}},{"type":"Feature","id":"cunjie_4326.28","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1517,35.0585],[118.1517,35.0579],[118.1517,35.0573],[118.1519,35.0572],[118.1521,35.0572],[118.1522,35.0572],[118.1525,35.0572],[118.153,35.0572],[118.1532,35.0571],[118.1533,35.0571],[118.1534,35.0571],[118.1536,35.0571],[118.1538,35.0571],[118.1541,35.057],[118.1541,35.0569],[118.1541,35.0563],[118.1541,35.0559],[118.1541,35.0559],[118.1541,35.0548],[118.1541,35.0546],[118.1541,35.0546],[118.1541,35.0545],[118.1541,35.0545],[118.1542,35.054],[118.1543,35.0526],[118.1544,35.051],[118.1544,35.0508],[118.1545,35.0507],[118.156,35.0508],[118.1563,35.0509],[118.1563,35.0508],[118.1563,35.0506],[118.1563,35.0505],[118.1564,35.05],[118.1564,35.05],[118.1564,35.0496],[118.1569,35.0495],[118.1571,35.0495],[118.1571,35.0495],[118.1574,35.0495],[118.1575,35.0495],[118.1575,35.0491],[118.1574,35.0485],[118.1575,35.0485],[118.1575,35.0485],[118.1576,35.0485],[118.1576,35.0485],[118.1577,35.0484],[118.1576,35.0483],[118.1576,35.0483],[118.1576,35.0482],[118.1576,35.0482],[118.1576,35.0481],[118.1577,35.0481],[118.1579,35.0481],[118.1578,35.048],[118.1578,35.0479],[118.1579,35.0479],[118.1579,35.0478],[118.1578,35.0477],[118.1578,35.0477],[118.1579,35.0477],[118.158,35.0476],[118.158,35.0475],[118.158,35.0474],[118.158,35.0474],[118.158,35.0473],[118.1579,35.0473],[118.1579,35.0472],[118.1579,35.0472],[118.158,35.0471],[118.158,35.0471],[118.158,35.047],[118.158,35.047],[118.1581,35.0469],[118.1581,35.0469],[118.1582,35.0469],[118.1582,35.0469],[118.1583,35.0468],[118.1584,35.0467],[118.1584,35.0467],[118.1584,35.0467],[118.1585,35.0467],[118.1585,35.0467],[118.1586,35.0466],[118.1586,35.0466],[118.1587,35.0466],[118.1589,35.0466],[118.1589,35.0466],[118.1591,35.0465],[118.1591,35.0465],[118.1593,35.0464],[118.1595,35.0463],[118.1596,35.0462],[118.1597,35.0461],[118.1597,35.0461],[118.1598,35.046],[118.1598,35.0459],[118.16,35.0458],[118.1602,35.0458],[118.1606,35.0457],[118.1611,35.0457],[118.1611,35.0458],[118.1613,35.0457],[118.1622,35.0456],[118.1626,35.0456],[118.1631,35.0456],[118.1645,35.0454],[118.1655,35.0454],[118.1662,35.0453],[118.1662,35.0453],[118.1662,35.0448],[118.1662,35.0446],[118.1663,35.0446],[118.1664,35.0446],[118.1666,35.0446],[118.1667,35.0446],[118.1667,35.0445],[118.1668,35.0441],[118.1669,35.0438],[118.1669,35.0437],[118.1669,35.0437],[118.167,35.0435],[118.167,35.0434],[118.1672,35.0427],[118.1672,35.0424],[118.1673,35.0423],[118.1673,35.0423],[118.1673,35.0423],[118.1671,35.0423],[118.1671,35.0423],[118.1671,35.0423],[118.1671,35.0423],[118.167,35.0423],[118.1669,35.0423],[118.1668,35.0423],[118.1667,35.0422],[118.1667,35.0422],[118.1667,35.0422],[118.1667,35.0422],[118.1667,35.0422],[118.1668,35.0419],[118.1668,35.0417],[118.1669,35.0413],[118.167,35.041],[118.1669,35.041],[118.1668,35.041],[118.1668,35.041],[118.1668,35.041],[118.1664,35.041],[118.166,35.0409],[118.1656,35.0409],[118.1656,35.0409],[118.1655,35.0409],[118.1655,35.0409],[118.1653,35.0409],[118.1653,35.0409],[118.1652,35.0405],[118.1652,35.0405],[118.1652,35.0405],[118.1652,35.0401],[118.165,35.0401],[118.165,35.0401],[118.165,35.0401],[118.165,35.0401],[118.1647,35.0402],[118.1645,35.0403],[118.1643,35.0403],[118.1643,35.0403],[118.1642,35.0403],[118.1642,35.0403],[118.1642,35.0403],[118.164,35.0399],[118.1639,35.0395],[118.1636,35.0395],[118.1636,35.0395],[118.1635,35.0395],[118.1633,35.0395],[118.1632,35.0395],[118.1632,35.0395],[118.1632,35.0395],[118.1632,35.0395],[118.1633,35.0394],[118.1633,35.0394],[118.1633,35.0393],[118.1633,35.0393],[118.1633,35.0393],[118.1634,35.0392],[118.1633,35.0392],[118.1633,35.0392],[118.1633,35.0391],[118.1633,35.039],[118.1633,35.0389],[118.1632,35.0388],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.163,35.0383],[118.1629,35.0383],[118.1628,35.0383],[118.1628,35.0383],[118.1628,35.0383],[118.1628,35.0383],[118.1629,35.0386],[118.1629,35.0387],[118.163,35.0388],[118.1631,35.0392],[118.1631,35.0392],[118.1627,35.0393],[118.1625,35.0393],[118.1624,35.0394],[118.1623,35.0392],[118.1623,35.0389],[118.1623,35.0389],[118.1623,35.0388],[118.1623,35.0387],[118.1622,35.0385],[118.1622,35.0385],[118.1622,35.0385],[118.1622,35.0384],[118.162,35.0383],[118.1619,35.0383],[118.1617,35.0382],[118.1617,35.0382],[118.1616,35.0382],[118.1616,35.0381],[118.1616,35.0381],[118.1615,35.0381],[118.1615,35.0381],[118.1615,35.0381],[118.1615,35.0381],[118.1615,35.0381],[118.1611,35.038],[118.161,35.038],[118.1609,35.0379],[118.1607,35.0378],[118.1602,35.0377],[118.16,35.0376],[118.16,35.0377],[118.1599,35.0378],[118.1598,35.038],[118.1598,35.038],[118.1598,35.038],[118.1595,35.0378],[118.1592,35.0377],[118.1592,35.0378],[118.1592,35.0378],[118.1591,35.0378],[118.1591,35.0378],[118.1591,35.0379],[118.1589,35.0379],[118.1589,35.0379],[118.1587,35.038],[118.1585,35.0381],[118.1585,35.0381],[118.1584,35.0382],[118.1584,35.0382],[118.1582,35.0382],[118.1581,35.0382],[118.1581,35.0382],[118.1581,35.0382],[118.158,35.0382],[118.158,35.0382],[118.158,35.0382],[118.1579,35.0382],[118.1579,35.0382],[118.1579,35.0382],[118.1579,35.0382],[118.1578,35.0382],[118.1577,35.0381],[118.1576,35.0381],[118.1576,35.0381],[118.1576,35.0381],[118.1576,35.0381],[118.1576,35.0381],[118.1576,35.0382],[118.1575,35.0383],[118.1575,35.0385],[118.1573,35.0385],[118.1573,35.0385],[118.1572,35.0379],[118.1572,35.0379],[118.1572,35.0378],[118.1572,35.0378],[118.1572,35.0378],[118.1572,35.0378],[118.1575,35.0377],[118.1575,35.0377],[118.1575,35.0377],[118.1575,35.0377],[118.1575,35.0377],[118.1576,35.0377],[118.1576,35.0377],[118.1578,35.0377],[118.1578,35.0376],[118.1578,35.0375],[118.1578,35.0375],[118.1578,35.0375],[118.1578,35.0375],[118.1578,35.0374],[118.1578,35.0374],[118.1577,35.0372],[118.1577,35.0372],[118.1577,35.0372],[118.1577,35.0372],[118.1577,35.0371],[118.1577,35.0371],[118.1576,35.037],[118.1575,35.037],[118.1573,35.037],[118.1573,35.0371],[118.1571,35.0371],[118.157,35.0371],[118.157,35.037],[118.1569,35.037],[118.1569,35.037],[118.1569,35.037],[118.1569,35.037],[118.1569,35.0369],[118.1568,35.0369],[118.1568,35.0368],[118.1567,35.0367],[118.1565,35.0365],[118.1565,35.0365],[118.1565,35.0365],[118.156,35.0366],[118.1561,35.0367],[118.1561,35.0368],[118.1561,35.0371],[118.1561,35.0371],[118.1559,35.0371],[118.1558,35.0371],[118.1558,35.0371],[118.1558,35.0371],[118.1557,35.0371],[118.1556,35.0373],[118.1556,35.0373],[118.1556,35.0373],[118.1552,35.0374],[118.155,35.0374],[118.1549,35.0374],[118.1549,35.0373],[118.1549,35.0371],[118.1549,35.037],[118.155,35.0369],[118.155,35.0368],[118.155,35.0368],[118.155,35.0368],[118.155,35.0368],[118.155,35.0368],[118.155,35.0368],[118.155,35.0367],[118.155,35.0367],[118.155,35.0367],[118.155,35.0366],[118.155,35.0366],[118.155,35.0366],[118.155,35.0366],[118.1549,35.0365],[118.1548,35.0364],[118.1548,35.0364],[118.1547,35.0364],[118.1546,35.0363],[118.1546,35.0363],[118.1546,35.0363],[118.1546,35.0363],[118.1545,35.0363],[118.1544,35.0362],[118.1544,35.0362],[118.1543,35.0361],[118.1543,35.0361],[118.1543,35.0361],[118.1543,35.0359],[118.1543,35.0358],[118.1543,35.0358],[118.1543,35.0358],[118.1543,35.0358],[118.1539,35.0358],[118.1539,35.0358],[118.1537,35.0358],[118.1536,35.0358],[118.1535,35.0359],[118.1535,35.0359],[118.1535,35.0359],[118.1534,35.0359],[118.1533,35.0359],[118.1533,35.0359],[118.1532,35.0359],[118.1532,35.0359],[118.1532,35.0359],[118.1528,35.0359],[118.1528,35.0359],[118.1526,35.0359],[118.1523,35.0359],[118.1523,35.0359],[118.1523,35.0359],[118.1522,35.036],[118.1521,35.0361],[118.1521,35.0361],[118.1521,35.0361],[118.1521,35.0361],[118.152,35.0361],[118.152,35.0362],[118.1519,35.0362],[118.1519,35.0362],[118.1519,35.0363],[118.1519,35.0363],[118.1518,35.0363],[118.1518,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1517,35.0363],[118.1518,35.0361],[118.1518,35.036],[118.1518,35.036],[118.1517,35.0358],[118.1517,35.0358],[118.1517,35.0358],[118.1514,35.0358],[118.1513,35.0358],[118.1511,35.0358],[118.151,35.0358],[118.151,35.0358],[118.151,35.0358],[118.151,35.0358],[118.151,35.0358],[118.151,35.0358],[118.151,35.0359],[118.1509,35.0359],[118.1509,35.036],[118.1509,35.036],[118.1508,35.036],[118.1507,35.0361],[118.1507,35.0361],[118.1507,35.0361],[118.1506,35.0361],[118.1505,35.0361],[118.1503,35.0361],[118.1503,35.0361],[118.1504,35.0366],[118.1503,35.0366],[118.1501,35.0366],[118.1501,35.0366],[118.15,35.0365],[118.15,35.0365],[118.1497,35.0365],[118.1497,35.036],[118.1497,35.036],[118.1497,35.036],[118.1497,35.036],[118.1495,35.036],[118.1493,35.0359],[118.1492,35.0359],[118.1492,35.036],[118.1492,35.0365],[118.1492,35.0365],[118.149,35.0366],[118.149,35.0366],[118.1489,35.0366],[118.1488,35.0367],[118.1486,35.0367],[118.1486,35.0367],[118.1486,35.0367],[118.1486,35.0365],[118.1486,35.0362],[118.1485,35.0358],[118.1484,35.0354],[118.1484,35.0354],[118.1484,35.0354],[118.1484,35.0353],[118.1484,35.0353],[118.1484,35.0352],[118.1484,35.0352],[118.1485,35.0352],[118.1485,35.0352],[118.1485,35.0352],[118.1486,35.0351],[118.1486,35.0351],[118.1487,35.0351],[118.1487,35.0351],[118.1489,35.035],[118.1489,35.0349],[118.1489,35.0347],[118.1489,35.0346],[118.1488,35.0344],[118.1488,35.0341],[118.1488,35.0341],[118.1488,35.0341],[118.1486,35.0341],[118.1481,35.0341],[118.1477,35.0342],[118.1473,35.0342],[118.1469,35.0342],[118.1465,35.0343],[118.1465,35.0343],[118.1464,35.0343],[118.1464,35.0344],[118.1463,35.0345],[118.1461,35.0347],[118.1459,35.0348],[118.1457,35.0348],[118.1454,35.035],[118.1453,35.0351],[118.1452,35.0352],[118.1452,35.0352],[118.1452,35.0351],[118.1452,35.035],[118.1452,35.0349],[118.1451,35.0347],[118.1451,35.0347],[118.1451,35.0346],[118.1451,35.0344],[118.1451,35.0344],[118.1451,35.0343],[118.1451,35.0343],[118.1449,35.0344],[118.1448,35.0344],[118.1447,35.0344],[118.1447,35.0345],[118.1448,35.0347],[118.1448,35.0349],[118.1448,35.0349],[118.1446,35.0349],[118.1446,35.035],[118.1446,35.035],[118.1442,35.035],[118.1441,35.035],[118.1441,35.035],[118.1441,35.035],[118.1441,35.035],[118.1442,35.0345],[118.1442,35.0345],[118.1442,35.0345],[118.1441,35.0345],[118.1441,35.0345],[118.1441,35.0345],[118.144,35.0345],[118.1437,35.0345],[118.1433,35.0345],[118.1432,35.0347],[118.1432,35.0347],[118.1429,35.0347],[118.1428,35.0347],[118.1427,35.0347],[118.1427,35.0347],[118.1427,35.0347],[118.1427,35.0347],[118.1426,35.0347],[118.1426,35.0347],[118.1424,35.0347],[118.1423,35.0347],[118.1423,35.0347],[118.1423,35.0342],[118.1423,35.0342],[118.1424,35.0342],[118.1427,35.0342],[118.1427,35.0342],[118.1427,35.0342],[118.1427,35.0341],[118.1428,35.0341],[118.1428,35.0341],[118.1428,35.0341],[118.1428,35.0341],[118.143,35.0341],[118.143,35.0341],[118.143,35.0338],[118.143,35.0335],[118.143,35.0335],[118.143,35.0335],[118.143,35.0334],[118.143,35.0332],[118.143,35.0332],[118.1425,35.0332],[118.1422,35.0332],[118.142,35.0332],[118.142,35.0332],[118.1419,35.033],[118.1419,35.033],[118.1419,35.033],[118.1417,35.033],[118.1417,35.033],[118.1417,35.0332],[118.1417,35.0334],[118.1417,35.0336],[118.1416,35.0339],[118.1416,35.0339],[118.1416,35.0339],[118.1416,35.0339],[118.1415,35.0339],[118.1415,35.0341],[118.1415,35.0341],[118.1415,35.0344],[118.1415,35.0344],[118.1414,35.0344],[118.1414,35.0344],[118.1411,35.0344],[118.1409,35.0344],[118.1408,35.0344],[118.1407,35.0346],[118.1406,35.0346],[118.1405,35.0351],[118.1405,35.0351],[118.1405,35.0352],[118.1405,35.0352],[118.1404,35.0352],[118.1404,35.0352],[118.1404,35.0356],[118.1404,35.0356],[118.1403,35.0356],[118.1401,35.0356],[118.14,35.0356],[118.1398,35.0356],[118.1394,35.0354],[118.1393,35.0354],[118.1394,35.0352],[118.1394,35.0351],[118.1394,35.0351],[118.1394,35.0351],[118.1394,35.035],[118.1394,35.035],[118.1394,35.035],[118.1394,35.035],[118.1394,35.035],[118.1395,35.0348],[118.1395,35.0345],[118.1395,35.0345],[118.1393,35.0345],[118.1392,35.0345],[118.1392,35.0345],[118.1392,35.0345],[118.1392,35.0344],[118.1393,35.0341],[118.1393,35.034],[118.1394,35.034],[118.1394,35.034],[118.1394,35.0339],[118.1394,35.0339],[118.1394,35.0339],[118.1392,35.0339],[118.1392,35.0339],[118.1391,35.0338],[118.1391,35.0338],[118.1391,35.0338],[118.1389,35.0338],[118.1388,35.0338],[118.1386,35.0338],[118.1386,35.0338],[118.1385,35.0338],[118.1384,35.0338],[118.1384,35.0338],[118.1383,35.0338],[118.1382,35.0338],[118.1382,35.0338],[118.1381,35.0338],[118.1381,35.0337],[118.1381,35.0337],[118.1381,35.0337],[118.138,35.0337],[118.138,35.0336],[118.1378,35.0336],[118.1377,35.0336],[118.1376,35.0336],[118.1374,35.0335],[118.1371,35.0334],[118.137,35.0334],[118.1369,35.0334],[118.1368,35.0333],[118.1368,35.0333],[118.1367,35.0333],[118.1367,35.0333],[118.1366,35.0333],[118.1366,35.0332],[118.1366,35.0332],[118.1366,35.0332],[118.1365,35.0332],[118.1365,35.0332],[118.1365,35.0332],[118.1363,35.033],[118.136,35.0329],[118.1357,35.0328],[118.1355,35.0326],[118.1352,35.0325],[118.135,35.0324],[118.135,35.0324],[118.135,35.0324],[118.1349,35.0324],[118.1349,35.0324],[118.1347,35.0325],[118.1346,35.0326],[118.1346,35.0326],[118.1345,35.0326],[118.1345,35.0326],[118.1344,35.0327],[118.1344,35.0327],[118.1342,35.0327],[118.1342,35.0327],[118.134,35.0326],[118.1338,35.0326],[118.1333,35.0325],[118.1332,35.0324],[118.1329,35.0323],[118.1329,35.0323],[118.1329,35.0323],[118.1328,35.0323],[118.1327,35.0322],[118.1327,35.0322],[118.1327,35.0322],[118.1326,35.032],[118.1325,35.0319],[118.1325,35.0317],[118.1324,35.0317],[118.1324,35.0316],[118.1324,35.0316],[118.1323,35.0315],[118.1323,35.0315],[118.1321,35.0313],[118.1321,35.0313],[118.1321,35.0313],[118.1321,35.0313],[118.1321,35.0312],[118.1321,35.0312],[118.1321,35.0312],[118.1321,35.0312],[118.132,35.0313],[118.132,35.0313],[118.132,35.0313],[118.1319,35.0313],[118.1319,35.0313],[118.1318,35.0313],[118.1318,35.0313],[118.1317,35.0313],[118.1317,35.0313],[118.1315,35.0314],[118.1315,35.0315],[118.1314,35.0316],[118.1313,35.0318],[118.1313,35.0319],[118.1312,35.0319],[118.1312,35.032],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.1311,35.0321],[118.131,35.0321],[118.131,35.0322],[118.1309,35.0323],[118.1308,35.0323],[118.1307,35.0323],[118.1305,35.0325],[118.1305,35.0325],[118.1302,35.0326],[118.1302,35.0326],[118.1301,35.0327],[118.1299,35.0327],[118.1298,35.0328],[118.1298,35.0328],[118.1297,35.0328],[118.1296,35.0328],[118.1295,35.0328],[118.1294,35.0328],[118.1293,35.0328],[118.1293,35.0328],[118.1293,35.0328],[118.1291,35.0328],[118.1291,35.0328],[118.1291,35.0328],[118.129,35.0328],[118.129,35.0328],[118.129,35.0328],[118.129,35.0327],[118.1289,35.0327],[118.1289,35.0327],[118.1288,35.0327],[118.1286,35.0326],[118.1285,35.0326],[118.1285,35.0326],[118.1285,35.0326],[118.1284,35.0326],[118.1283,35.0327],[118.1283,35.0327],[118.1283,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.1282,35.0327],[118.128,35.0326],[118.1277,35.0325],[118.1273,35.0323],[118.1272,35.0322],[118.1271,35.0322],[118.1271,35.0322],[118.1271,35.0322],[118.127,35.0322],[118.1269,35.0322],[118.1269,35.0322],[118.1269,35.0322],[118.1267,35.0322],[118.1264,35.0322],[118.1263,35.0322],[118.1263,35.0322],[118.1263,35.0322],[118.126,35.0322],[118.1257,35.0323],[118.1255,35.0324],[118.1254,35.0324],[118.1253,35.0325],[118.1252,35.0325],[118.1251,35.0325],[118.125,35.0326],[118.1249,35.0326],[118.1247,35.0327],[118.1247,35.0327],[118.1246,35.0327],[118.1246,35.0327],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0328],[118.1246,35.0329],[118.1245,35.033],[118.1245,35.033],[118.1245,35.033],[118.1244,35.0331],[118.1243,35.0332],[118.1242,35.0333],[118.1242,35.0333],[118.1242,35.0334],[118.1241,35.0335],[118.1241,35.0335],[118.1241,35.0336],[118.1241,35.0336],[118.1241,35.0337],[118.1243,35.0338],[118.1244,35.0339],[118.1244,35.0339],[118.1245,35.0339],[118.1245,35.0339],[118.1247,35.0339],[118.1248,35.0339],[118.1249,35.034],[118.125,35.034],[118.1251,35.0341],[118.1252,35.0341],[118.1252,35.0341],[118.1253,35.0342],[118.1253,35.0342],[118.1253,35.0342],[118.1253,35.0343],[118.1253,35.0343],[118.1253,35.0344],[118.1253,35.0345],[118.1253,35.0346],[118.1254,35.0346],[118.1254,35.0347],[118.1255,35.0347],[118.1255,35.0349],[118.1256,35.0351],[118.1256,35.0353],[118.1256,35.0354],[118.1256,35.0354],[118.1256,35.0355],[118.1256,35.0355],[118.1255,35.0355],[118.1256,35.0356],[118.1256,35.0358],[118.1256,35.036],[118.1257,35.0362],[118.1257,35.0362],[118.1258,35.0363],[118.1258,35.0363],[118.1258,35.0364],[118.1259,35.0366],[118.1259,35.0366],[118.1259,35.0368],[118.1259,35.0369],[118.126,35.0371],[118.1261,35.0374],[118.1261,35.0374],[118.1262,35.0377],[118.1262,35.0378],[118.1263,35.0379],[118.1264,35.0382],[118.1266,35.0385],[118.1269,35.0389],[118.127,35.039],[118.1271,35.0391],[118.1272,35.0393],[118.1274,35.0395],[118.1275,35.0397],[118.1277,35.0398],[118.1277,35.0399],[118.1278,35.0399],[118.1278,35.04],[118.1277,35.04],[118.1277,35.0401],[118.1276,35.0404],[118.1275,35.0406],[118.1275,35.0407],[118.1274,35.0407],[118.1274,35.0408],[118.1274,35.0408],[118.1274,35.0409],[118.1275,35.0409],[118.1275,35.0409],[118.1275,35.041],[118.1276,35.041],[118.1277,35.0411],[118.1278,35.0411],[118.1278,35.0412],[118.1279,35.0412],[118.1279,35.0413],[118.128,35.0415],[118.1281,35.0415],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0416],[118.1281,35.0417],[118.128,35.0418],[118.128,35.0418],[118.1278,35.042],[118.1277,35.0421],[118.1276,35.0422],[118.1275,35.0422],[118.1275,35.0423],[118.1277,35.0426],[118.1279,35.0429],[118.1281,35.0432],[118.1282,35.0433],[118.1282,35.0433],[118.1285,35.0437],[118.1287,35.044],[118.1283,35.0441],[118.1284,35.0444],[118.1285,35.0445],[118.1285,35.0446],[118.1285,35.0448],[118.1286,35.0448],[118.1286,35.0449],[118.1287,35.0449],[118.1288,35.045],[118.1287,35.045],[118.1286,35.045],[118.1287,35.0453],[118.1288,35.0455],[118.1289,35.0457],[118.129,35.0459],[118.1291,35.046],[118.1291,35.0462],[118.1292,35.0463],[118.1293,35.0464],[118.1293,35.0466],[118.1293,35.0468],[118.1291,35.0469],[118.1291,35.0469],[118.129,35.0467],[118.129,35.0467],[118.1289,35.0468],[118.1286,35.0468],[118.1282,35.0469],[118.1278,35.0469],[118.1279,35.0472],[118.1279,35.0474],[118.128,35.0475],[118.1281,35.0479],[118.1281,35.0479],[118.1281,35.0481],[118.1281,35.0482],[118.1281,35.0482],[118.1281,35.0482],[118.1281,35.0483],[118.1281,35.0483],[118.1282,35.0485],[118.1283,35.049],[118.1283,35.0492],[118.1284,35.0493],[118.1284,35.0494],[118.1284,35.0494],[118.1284,35.0495],[118.1284,35.0496],[118.1284,35.0496],[118.1284,35.0497],[118.1284,35.0498],[118.1284,35.0498],[118.1284,35.0498],[118.1284,35.0501],[118.1285,35.0504],[118.1285,35.0504],[118.1281,35.0503],[118.1279,35.0503],[118.1275,35.0502],[118.1275,35.0502],[118.1275,35.0502],[118.1274,35.0502],[118.1274,35.0502],[118.1274,35.0503],[118.1275,35.0505],[118.1276,35.0506],[118.1276,35.0507],[118.1277,35.0508],[118.1277,35.0508],[118.1277,35.0508],[118.1277,35.0508],[118.1276,35.0508],[118.1271,35.0509],[118.1266,35.0509],[118.1264,35.0509],[118.1263,35.0509],[118.126,35.0509],[118.1256,35.0509],[118.1253,35.0509],[118.125,35.0509],[118.125,35.0509],[118.125,35.0512],[118.125,35.0512],[118.1255,35.0512],[118.126,35.0512],[118.1263,35.0512],[118.1265,35.0512],[118.1267,35.0511],[118.1267,35.0511],[118.1267,35.0512],[118.1268,35.0516],[118.1269,35.0521],[118.1269,35.0521],[118.1269,35.0521],[118.1269,35.0522],[118.1269,35.0522],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.127,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1271,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1272,35.0523],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0524],[118.1273,35.0525],[118.1273,35.0525],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0526],[118.1273,35.0527],[118.1274,35.0527],[118.1274,35.0527],[118.1275,35.0527],[118.1275,35.0527],[118.1275,35.0527],[118.1275,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1276,35.0528],[118.1271,35.0528],[118.1271,35.0528],[118.1269,35.0528],[118.1269,35.0528],[118.1268,35.0529],[118.1268,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0529],[118.1267,35.0528],[118.1266,35.0528],[118.1265,35.0528],[118.1264,35.0528],[118.1263,35.0528],[118.126,35.0528],[118.1258,35.0528],[118.1258,35.0528],[118.1258,35.0529],[118.1259,35.0529],[118.1259,35.0531],[118.1259,35.0532],[118.1259,35.0532],[118.1259,35.0532],[118.1259,35.0532],[118.1255,35.0532],[118.1251,35.0533],[118.1251,35.0533],[118.1251,35.0536],[118.1251,35.0537],[118.1251,35.0541],[118.1251,35.0544],[118.1251,35.0545],[118.1253,35.0545],[118.1253,35.0545],[118.1254,35.0548],[118.1254,35.0549],[118.1257,35.0549],[118.126,35.0549],[118.1262,35.0549],[118.1262,35.0549],[118.1263,35.0549],[118.1266,35.0549],[118.127,35.055],[118.1274,35.055],[118.1274,35.055],[118.1273,35.0553],[118.1273,35.0554],[118.1272,35.0556],[118.1272,35.0556],[118.1273,35.0556],[118.1277,35.0559],[118.1281,35.0561],[118.1282,35.0561],[118.1281,35.0562],[118.1281,35.0563],[118.1281,35.0563],[118.1281,35.0563],[118.128,35.0564],[118.128,35.0564],[118.1279,35.0564],[118.1278,35.0565],[118.1278,35.0565],[118.1278,35.0565],[118.1277,35.0565],[118.1277,35.0565],[118.1277,35.0566],[118.1277,35.0568],[118.1277,35.0568],[118.1276,35.057],[118.1275,35.0572],[118.1284,35.0576],[118.1284,35.0576],[118.1284,35.0575],[118.1284,35.0575],[118.1286,35.0573],[118.1288,35.057],[118.1293,35.0572],[118.1296,35.0568],[118.1297,35.0568],[118.1301,35.0564],[118.1303,35.0562],[118.1304,35.0562],[118.1305,35.0561],[118.1307,35.0559],[118.1308,35.0559],[118.1311,35.0561],[118.1313,35.0562],[118.1314,35.0564],[118.1315,35.0565],[118.1315,35.0565],[118.132,35.0565],[118.1321,35.0565],[118.1319,35.0561],[118.1322,35.056],[118.1323,35.056],[118.1327,35.0558],[118.1325,35.0553],[118.1327,35.0552],[118.1331,35.0552],[118.1335,35.0563],[118.1338,35.0571],[118.134,35.0579],[118.1344,35.0593],[118.135,35.0592],[118.1346,35.0578],[118.1344,35.0569],[118.1347,35.0568],[118.1352,35.0567],[118.1352,35.0567],[118.1353,35.0578],[118.1355,35.0586],[118.1356,35.0591],[118.1357,35.0591],[118.1357,35.0591],[118.1358,35.059],[118.1363,35.0589],[118.1361,35.0578],[118.136,35.0571],[118.1364,35.0571],[118.1366,35.0571],[118.1367,35.0578],[118.1373,35.0577],[118.1374,35.0577],[118.1384,35.0577],[118.1391,35.0577],[118.1405,35.0576],[118.1415,35.0576],[118.142,35.0576],[118.1425,35.0576],[118.1427,35.0576],[118.1428,35.0592],[118.143,35.0592],[118.1438,35.0592],[118.1438,35.0592],[118.1438,35.0589],[118.1438,35.0588],[118.1438,35.0575],[118.1442,35.0575],[118.1444,35.0574],[118.1449,35.0574],[118.1451,35.0574],[118.1452,35.0574],[118.1455,35.0574],[118.1455,35.0575],[118.1455,35.0577],[118.1455,35.0584],[118.1456,35.0593],[118.1455,35.0595],[118.1461,35.0595],[118.1463,35.0595],[118.1465,35.0596],[118.1465,35.0581],[118.1465,35.0574],[118.1469,35.0574],[118.1469,35.0582],[118.1468,35.0591],[118.1467,35.0596],[118.1468,35.0596],[118.1469,35.0596],[118.1472,35.0585],[118.1474,35.0579],[118.1494,35.0579],[118.1495,35.0575],[118.1495,35.0574],[118.1496,35.0574],[118.1498,35.0574],[118.1501,35.0574],[118.1504,35.0574],[118.1505,35.0574],[118.1506,35.0574],[118.1509,35.0575],[118.151,35.0575],[118.1511,35.0574],[118.1512,35.0574],[118.1514,35.0573],[118.1513,35.0579],[118.1515,35.0579],[118.1515,35.0585],[118.1517,35.0585]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106014","XZQMC":"山北头村","KZMJ":7562856.64,"JSMJ":7562856.62,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1241,35.0312,118.1673,35.0596]}},{"type":"Feature","id":"cunjie_4326.29","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2359,35.0577],[118.2358,35.0575],[118.2358,35.0574],[118.2358,35.0572],[118.2359,35.0572],[118.2361,35.0573],[118.2362,35.0573],[118.2363,35.0573],[118.2364,35.0573],[118.2364,35.057],[118.2365,35.057],[118.2364,35.0561],[118.2364,35.0552],[118.2364,35.0551],[118.2364,35.0544],[118.2363,35.0542],[118.2363,35.0537],[118.2363,35.0537],[118.2363,35.0532],[118.2363,35.0531],[118.2363,35.0529],[118.2363,35.0524],[118.2363,35.0521],[118.2362,35.0517],[118.2362,35.0514],[118.2362,35.0514],[118.2365,35.0513],[118.2367,35.0513],[118.2367,35.05],[118.2366,35.0495],[118.2361,35.0495],[118.2355,35.0496],[118.2355,35.0492],[118.2355,35.0492],[118.2354,35.0492],[118.2352,35.0492],[118.2349,35.0493],[118.2346,35.0493],[118.2344,35.0493],[118.2339,35.0493],[118.2336,35.0493],[118.2336,35.0493],[118.2334,35.0493],[118.2329,35.0493],[118.2325,35.0493],[118.2324,35.0493],[118.232,35.0494],[118.2318,35.0494],[118.2318,35.0494],[118.2315,35.0494],[118.2315,35.0494],[118.2312,35.0494],[118.2309,35.0494],[118.231,35.05],[118.231,35.0502],[118.231,35.0504],[118.231,35.0506],[118.231,35.0508],[118.2311,35.0511],[118.2311,35.0512],[118.2311,35.0513],[118.2311,35.0515],[118.2316,35.0514],[118.2318,35.0514],[118.2318,35.0519],[118.2318,35.0533],[118.2319,35.0539],[118.2319,35.0543],[118.2319,35.0546],[118.2317,35.0546],[118.2318,35.0552],[118.2326,35.0552],[118.2326,35.0556],[118.2326,35.0556],[118.2327,35.0557],[118.2327,35.0559],[118.2327,35.056],[118.2327,35.0561],[118.2329,35.0561],[118.2329,35.0562],[118.233,35.0562],[118.233,35.0563],[118.2331,35.0563],[118.2331,35.0564],[118.2331,35.0565],[118.2331,35.0565],[118.2331,35.0566],[118.2331,35.0566],[118.2331,35.0567],[118.2333,35.0567],[118.2333,35.0567],[118.2334,35.0568],[118.2334,35.0569],[118.2335,35.057],[118.2335,35.0571],[118.2335,35.0574],[118.2335,35.0575],[118.2336,35.0576],[118.2337,35.0577],[118.2338,35.0578],[118.2339,35.0578],[118.234,35.0578],[118.2341,35.0578],[118.2341,35.0579],[118.2341,35.058],[118.2342,35.0582],[118.2342,35.0583],[118.2347,35.0582],[118.2347,35.058],[118.2346,35.0578],[118.2359,35.0577]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106028","XZQMC":"前店子村","KZMJ":377286.52,"JSMJ":377286.52,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.2309,35.0492,118.2367,35.0583]}},{"type":"Feature","id":"cunjie_4326.30","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1861,35.0517],[118.1861,35.0517],[118.186,35.0515],[118.1861,35.0512],[118.1861,35.0512],[118.1861,35.0512],[118.186,35.0512],[118.186,35.0512],[118.186,35.0512],[118.186,35.0512],[118.1858,35.0512],[118.1858,35.0512],[118.1857,35.0512],[118.1857,35.0512],[118.1855,35.0512],[118.1851,35.0512],[118.1847,35.0512],[118.1844,35.0512],[118.1844,35.0511],[118.1844,35.051],[118.1843,35.0508],[118.1843,35.0505],[118.1842,35.0504],[118.1842,35.0504],[118.1841,35.05],[118.184,35.0496],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1838,35.0494],[118.1837,35.0494],[118.1835,35.0496],[118.1831,35.0499],[118.183,35.0499],[118.183,35.0499],[118.183,35.0499],[118.1828,35.0501],[118.1828,35.0501],[118.1828,35.0501],[118.1828,35.0502],[118.1823,35.0505],[118.1823,35.0505],[118.1823,35.0505],[118.1823,35.0505],[118.1821,35.0505],[118.1819,35.0505],[118.1819,35.0505],[118.1818,35.0505],[118.1818,35.0505],[118.1818,35.0505],[118.1818,35.0503],[118.1818,35.0501],[118.1818,35.0499],[118.1818,35.0499],[118.1818,35.0497],[118.1818,35.0495],[118.1818,35.0494],[118.1817,35.0492],[118.1817,35.0492],[118.1817,35.0491],[118.1817,35.0489],[118.1817,35.0489],[118.1817,35.0489],[118.1817,35.0488],[118.1817,35.0488],[118.1817,35.0485],[118.1817,35.0485],[118.1817,35.0485],[118.1817,35.0485],[118.1817,35.0484],[118.1817,35.0482],[118.1817,35.0481],[118.1817,35.0477],[118.1817,35.0475],[118.1817,35.0474],[118.1817,35.0472],[118.1817,35.0472],[118.1817,35.0472],[118.1817,35.0472],[118.1817,35.0471],[118.1817,35.0471],[118.1817,35.047],[118.1817,35.0468],[118.1817,35.0464],[118.1817,35.0463],[118.1817,35.0462],[118.1817,35.0462],[118.1817,35.0462],[118.1817,35.0463],[118.1815,35.0463],[118.1815,35.0463],[118.1815,35.0464],[118.1814,35.0464],[118.1813,35.0464],[118.1813,35.0464],[118.1812,35.0464],[118.1811,35.0463],[118.1811,35.0463],[118.181,35.0462],[118.181,35.0462],[118.1809,35.0461],[118.1809,35.0461],[118.1808,35.0461],[118.1807,35.0463],[118.1804,35.0462],[118.1802,35.0462],[118.1802,35.0462],[118.1801,35.0462],[118.18,35.0462],[118.1796,35.0461],[118.1791,35.0461],[118.1791,35.0461],[118.1791,35.0461],[118.1791,35.0461],[118.1786,35.046],[118.1786,35.046],[118.1786,35.0461],[118.1785,35.0462],[118.1785,35.0463],[118.1784,35.0466],[118.1781,35.0465],[118.1781,35.0465],[118.1781,35.0466],[118.1781,35.0466],[118.1781,35.0468],[118.1781,35.0469],[118.1781,35.0469],[118.1776,35.0468],[118.1776,35.0468],[118.177,35.0468],[118.1765,35.0467],[118.176,35.0467],[118.1759,35.0467],[118.1754,35.0467],[118.1754,35.0467],[118.1754,35.0467],[118.1754,35.0467],[118.1754,35.0466],[118.1754,35.0466],[118.1754,35.0465],[118.1754,35.0463],[118.1754,35.0461],[118.1754,35.046],[118.1754,35.046],[118.1755,35.0457],[118.1755,35.0456],[118.1755,35.0456],[118.1755,35.0454],[118.1755,35.0453],[118.1756,35.045],[118.1756,35.0448],[118.1756,35.0448],[118.1756,35.0446],[118.1756,35.0446],[118.1757,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0445],[118.1759,35.0441],[118.1761,35.0436],[118.1761,35.0434],[118.1761,35.0434],[118.1762,35.0433],[118.1762,35.0433],[118.1762,35.0432],[118.1762,35.0432],[118.1762,35.0432],[118.1759,35.0432],[118.1759,35.0432],[118.1758,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1752,35.0432],[118.1751,35.0432],[118.1751,35.0432],[118.1747,35.0432],[118.1742,35.0432],[118.1741,35.0431],[118.1741,35.0431],[118.1738,35.0431],[118.1736,35.0431],[118.1732,35.0431],[118.1731,35.0431],[118.173,35.0444],[118.1728,35.0444],[118.1723,35.0444],[118.1722,35.0444],[118.1721,35.0444],[118.172,35.0444],[118.1719,35.0444],[118.1717,35.0444],[118.1714,35.0444],[118.1712,35.0444],[118.1711,35.0444],[118.1711,35.0447],[118.1711,35.0456],[118.1709,35.0456],[118.1709,35.0464],[118.1716,35.0465],[118.1724,35.0467],[118.1725,35.0467],[118.1727,35.0467],[118.1728,35.0467],[118.1728,35.0467],[118.1729,35.0468],[118.173,35.0468],[118.1732,35.0468],[118.1733,35.0468],[118.1734,35.0469],[118.1736,35.0469],[118.1737,35.047],[118.1738,35.047],[118.1738,35.047],[118.1737,35.0478],[118.1737,35.0479],[118.1736,35.0481],[118.1737,35.0481],[118.1737,35.0483],[118.1737,35.0487],[118.1736,35.0489],[118.1735,35.0498],[118.1744,35.0499],[118.1757,35.05],[118.1756,35.0502],[118.1756,35.0508],[118.1756,35.0512],[118.1756,35.0517],[118.1755,35.052],[118.1755,35.0521],[118.1755,35.0522],[118.1755,35.0522],[118.1755,35.0522],[118.1755,35.0523],[118.1755,35.0524],[118.1754,35.0534],[118.1756,35.0534],[118.1766,35.0535],[118.1766,35.0537],[118.1769,35.0537],[118.1769,35.0544],[118.1771,35.0544],[118.1771,35.0546],[118.1772,35.0546],[118.1773,35.055],[118.1774,35.0553],[118.1774,35.0555],[118.1776,35.0554],[118.1782,35.0554],[118.1784,35.0554],[118.1787,35.0554],[118.1788,35.0554],[118.1791,35.0554],[118.1792,35.0554],[118.1793,35.0554],[118.1795,35.0553],[118.1799,35.0553],[118.18,35.0553],[118.18,35.0553],[118.1804,35.0553],[118.1808,35.0553],[118.1809,35.0552],[118.1811,35.0552],[118.1812,35.0552],[118.1813,35.0552],[118.1816,35.0552],[118.1816,35.0552],[118.1819,35.0552],[118.1819,35.055],[118.1819,35.0549],[118.1819,35.0547],[118.1819,35.0543],[118.1819,35.0542],[118.182,35.0542],[118.1823,35.0542],[118.1824,35.0542],[118.1827,35.0542],[118.1828,35.0542],[118.1827,35.0546],[118.1827,35.0548],[118.1829,35.0548],[118.1831,35.0548],[118.1833,35.0548],[118.1836,35.0548],[118.1838,35.0539],[118.1838,35.0537],[118.1839,35.0537],[118.1841,35.0537],[118.1845,35.0537],[118.1846,35.0537],[118.1853,35.0538],[118.1854,35.0538],[118.186,35.0539],[118.186,35.0535],[118.186,35.0528],[118.186,35.0527],[118.186,35.0526],[118.186,35.0524],[118.186,35.0519],[118.1861,35.0517]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371302106004","XZQMC":"凤凰庄村","KZMJ":889354.92,"JSMJ":889354.88,"QJW":3.71302106E8,"乡镇名":"马厂湖镇","BZ":"","bbox":[118.1709,35.0431,118.1861,35.0555]}},{"type":"Feature","id":"cunjie_4326.31","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2283,34.9846],[118.2284,34.9838],[118.2284,34.9836],[118.2284,34.9836],[118.2288,34.9835],[118.2288,34.9836],[118.2289,34.9836],[118.2292,34.9836],[118.2295,34.9836],[118.2295,34.9835],[118.2296,34.9834],[118.2296,34.9831],[118.2297,34.983],[118.2297,34.9829],[118.2298,34.9829],[118.2297,34.9829],[118.2297,34.9829],[118.2298,34.9822],[118.2299,34.982],[118.2299,34.9818],[118.2299,34.9816],[118.2299,34.9816],[118.2299,34.9815],[118.2299,34.9814],[118.2299,34.9813],[118.2299,34.9813],[118.23,34.9811],[118.23,34.9811],[118.23,34.9811],[118.2299,34.9809],[118.2299,34.9809],[118.2299,34.9808],[118.2299,34.9807],[118.2299,34.9807],[118.2298,34.9806],[118.2298,34.9804],[118.2298,34.9804],[118.2298,34.9803],[118.2298,34.9801],[118.2298,34.9801],[118.2298,34.9799],[118.2298,34.9798],[118.2298,34.9797],[118.2298,34.9796],[118.2298,34.9796],[118.2298,34.9795],[118.2298,34.9794],[118.2298,34.9794],[118.2298,34.9793],[118.2298,34.9791],[118.2298,34.9789],[118.2298,34.9789],[118.2298,34.9789],[118.2298,34.9788],[118.2298,34.9787],[118.2298,34.9786],[118.2298,34.9786],[118.2298,34.9785],[118.2298,34.9785],[118.2298,34.9785],[118.2298,34.9784],[118.2298,34.9784],[118.2298,34.9783],[118.2298,34.9783],[118.2298,34.9783],[118.2298,34.9779],[118.2298,34.9778],[118.2298,34.9778],[118.2299,34.9775],[118.2298,34.9773],[118.2299,34.9772],[118.2299,34.9771],[118.2299,34.9771],[118.2299,34.977],[118.2299,34.977],[118.2298,34.9769],[118.2298,34.9768],[118.2298,34.9767],[118.2298,34.9766],[118.2298,34.9765],[118.2298,34.9765],[118.2298,34.9765],[118.2298,34.9764],[118.2298,34.9763],[118.2298,34.9762],[118.2297,34.9762],[118.2294,34.9762],[118.2293,34.9762],[118.2291,34.9763],[118.229,34.9763],[118.2287,34.9763],[118.2285,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2284,34.9763],[118.2283,34.9763],[118.2283,34.9761],[118.228,34.9749],[118.2279,34.9747],[118.2279,34.9746],[118.2279,34.9746],[118.2279,34.9746],[118.2278,34.9742],[118.2279,34.9742],[118.2286,34.9742],[118.2288,34.9742],[118.229,34.9741],[118.229,34.9741],[118.2293,34.9741],[118.2294,34.9741],[118.2295,34.9741],[118.2296,34.9741],[118.2297,34.9741],[118.23,34.9741],[118.2303,34.9741],[118.2303,34.9741],[118.2305,34.9741],[118.2305,34.974],[118.2308,34.974],[118.2308,34.974],[118.2308,34.974],[118.2309,34.9739],[118.231,34.9739],[118.2312,34.9738],[118.2312,34.9738],[118.2313,34.9737],[118.2315,34.9737],[118.2315,34.9737],[118.2316,34.9736],[118.2318,34.9736],[118.2319,34.9736],[118.2319,34.9736],[118.2319,34.9739],[118.2319,34.9742],[118.2319,34.9743],[118.2319,34.9746],[118.2321,34.9746],[118.2321,34.9745],[118.2321,34.9744],[118.2321,34.9744],[118.2321,34.9742],[118.2321,34.9741],[118.2322,34.9738],[118.2322,34.9736],[118.2323,34.9734],[118.2323,34.9732],[118.2316,34.9731],[118.2317,34.973],[118.2317,34.9725],[118.2318,34.9721],[118.2317,34.972],[118.2315,34.9719],[118.2312,34.9718],[118.2312,34.9718],[118.2312,34.9715],[118.2312,34.9714],[118.2312,34.9711],[118.2312,34.971],[118.2312,34.971],[118.2312,34.971],[118.2312,34.971],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2313,34.9704],[118.2316,34.9703],[118.2317,34.9703],[118.2317,34.9697],[118.2317,34.9692],[118.2316,34.9685],[118.2316,34.9684],[118.2318,34.9684],[118.2318,34.9684],[118.2318,34.9684],[118.2318,34.9685],[118.232,34.9684],[118.232,34.9684],[118.232,34.9684],[118.2319,34.968],[118.2318,34.9679],[118.2318,34.9678],[118.2316,34.9668],[118.2315,34.9666],[118.2315,34.9666],[118.2315,34.9665],[118.2315,34.9665],[118.2315,34.9665],[118.2314,34.9662],[118.2313,34.9655],[118.2313,34.9655],[118.2313,34.9653],[118.2313,34.9653],[118.2312,34.9652],[118.2315,34.9651],[118.2315,34.9651],[118.232,34.9651],[118.2322,34.9651],[118.2324,34.9651],[118.2325,34.9651],[118.2326,34.965],[118.2327,34.965],[118.2327,34.965],[118.2327,34.965],[118.2327,34.9647],[118.2326,34.9644],[118.2326,34.9641],[118.2316,34.9641],[118.2316,34.9638],[118.2315,34.9636],[118.2315,34.9636],[118.2315,34.9634],[118.2315,34.9633],[118.2315,34.9633],[118.2314,34.9633],[118.2313,34.9628],[118.2312,34.9627],[118.2312,34.9626],[118.2313,34.9627],[118.2313,34.9627],[118.2314,34.9627],[118.2316,34.9627],[118.2319,34.9626],[118.2323,34.9626],[118.2324,34.9626],[118.2324,34.9625],[118.2324,34.9625],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2324,34.9624],[118.2321,34.9621],[118.232,34.962],[118.232,34.962],[118.2318,34.9617],[118.2317,34.9615],[118.2317,34.9615],[118.2316,34.9614],[118.2316,34.9614],[118.2316,34.9614],[118.2315,34.9614],[118.2315,34.9614],[118.2313,34.9614],[118.2311,34.9615],[118.231,34.9615],[118.231,34.9615],[118.231,34.9615],[118.2307,34.9615],[118.2305,34.9616],[118.2304,34.9616],[118.2303,34.9611],[118.2302,34.9607],[118.2301,34.9603],[118.23,34.9599],[118.23,34.9598],[118.23,34.9598],[118.23,34.9598],[118.23,34.9598],[118.2299,34.9597],[118.2299,34.9596],[118.2299,34.9595],[118.2298,34.9592],[118.2297,34.9588],[118.2297,34.9588],[118.2297,34.9585],[118.2297,34.9585],[118.2297,34.9584],[118.2296,34.9584],[118.2296,34.9583],[118.2296,34.9583],[118.2296,34.9581],[118.2296,34.9581],[118.2296,34.958],[118.2294,34.958],[118.2291,34.9581],[118.2289,34.9581],[118.2286,34.9581],[118.2283,34.9581],[118.2282,34.9582],[118.2281,34.9582],[118.2278,34.9582],[118.2275,34.9582],[118.227,34.9583],[118.2269,34.9583],[118.2268,34.9583],[118.2264,34.9583],[118.226,34.9584],[118.2256,34.9584],[118.2253,34.9584],[118.2252,34.9584],[118.2248,34.9585],[118.2248,34.9585],[118.2243,34.9585],[118.2241,34.9585],[118.224,34.9585],[118.2244,34.9601],[118.2244,34.9603],[118.2245,34.9604],[118.2251,34.9629],[118.2251,34.9629],[118.2251,34.9629],[118.2251,34.963],[118.2253,34.9634],[118.2254,34.9638],[118.2255,34.9642],[118.2255,34.9643],[118.2256,34.9647],[118.2256,34.9647],[118.2257,34.9653],[118.2258,34.9656],[118.2258,34.9657],[118.2261,34.9657],[118.2264,34.9656],[118.2265,34.9656],[118.2267,34.9656],[118.2271,34.9656],[118.2273,34.9655],[118.2275,34.9665],[118.2276,34.9669],[118.2276,34.9672],[118.2277,34.9674],[118.2278,34.968],[118.2279,34.9682],[118.2279,34.9682],[118.2279,34.9683],[118.2279,34.9683],[118.228,34.9684],[118.228,34.9685],[118.228,34.9687],[118.228,34.9688],[118.228,34.9688],[118.228,34.9688],[118.228,34.9689],[118.228,34.969],[118.228,34.9694],[118.228,34.9702],[118.2281,34.9717],[118.2278,34.9717],[118.2272,34.9717],[118.2271,34.9714],[118.227,34.9708],[118.227,34.9708],[118.2268,34.9701],[118.2267,34.9701],[118.2262,34.9701],[118.2259,34.9701],[118.2258,34.9701],[118.2258,34.9701],[118.2256,34.9701],[118.2249,34.9701],[118.2249,34.9701],[118.2249,34.9704],[118.2249,34.9706],[118.2248,34.9706],[118.224,34.9705],[118.2236,34.9705],[118.2236,34.9709],[118.2233,34.9709],[118.2233,34.9712],[118.2231,34.9712],[118.2226,34.9713],[118.222,34.9712],[118.222,34.9716],[118.222,34.9717],[118.2206,34.9717],[118.22,34.9717],[118.2199,34.9717],[118.2196,34.9717],[118.2194,34.9717],[118.219,34.9717],[118.2187,34.9717],[118.2186,34.9716],[118.2185,34.9716],[118.2185,34.9716],[118.2181,34.9716],[118.2178,34.9716],[118.2178,34.9716],[118.2175,34.9716],[118.2175,34.9716],[118.2175,34.9716],[118.2174,34.9716],[118.2173,34.9716],[118.2172,34.9716],[118.2172,34.9716],[118.2164,34.9717],[118.216,34.9717],[118.2159,34.9718],[118.2158,34.9718],[118.2156,34.9718],[118.2156,34.9718],[118.2153,34.9718],[118.2151,34.9718],[118.215,34.9718],[118.2149,34.971],[118.2148,34.9709],[118.2148,34.9709],[118.2147,34.9709],[118.2147,34.9709],[118.2146,34.9709],[118.2145,34.9709],[118.2143,34.9709],[118.2141,34.9696],[118.2129,34.9698],[118.2124,34.9698],[118.2119,34.9699],[118.2115,34.9699],[118.2104,34.97],[118.2104,34.97],[118.2099,34.9701],[118.2093,34.9701],[118.2089,34.9701],[118.2084,34.9702],[118.2084,34.9702],[118.2083,34.9702],[118.2082,34.9693],[118.2081,34.9688],[118.2081,34.9688],[118.2081,34.9687],[118.2079,34.9674],[118.2078,34.9674],[118.2078,34.9674],[118.2076,34.9674],[118.207,34.9674],[118.207,34.9674],[118.207,34.9674],[118.2065,34.9675],[118.2065,34.9675],[118.2062,34.9675],[118.2058,34.9676],[118.2058,34.9676],[118.2053,34.9664],[118.2053,34.9663],[118.205,34.9655],[118.2048,34.9651],[118.2047,34.9649],[118.2047,34.9649],[118.2046,34.9647],[118.2046,34.9647],[118.2046,34.9647],[118.2044,34.9647],[118.2044,34.964],[118.2044,34.9638],[118.2045,34.9635],[118.2062,34.9634],[118.2063,34.9634],[118.2066,34.9633],[118.2067,34.9633],[118.2072,34.9633],[118.2072,34.9632],[118.2072,34.9627],[118.2071,34.9622],[118.207,34.962],[118.207,34.9618],[118.207,34.9618],[118.2065,34.9619],[118.2065,34.9619],[118.2064,34.9619],[118.2064,34.9619],[118.2064,34.9619],[118.2062,34.9619],[118.2058,34.962],[118.2057,34.962],[118.2057,34.9612],[118.2056,34.9604],[118.2055,34.9602],[118.2055,34.9602],[118.2054,34.9602],[118.2054,34.9602],[118.2054,34.9602],[118.2048,34.9603],[118.2049,34.9608],[118.2049,34.9611],[118.2049,34.9611],[118.205,34.962],[118.205,34.962],[118.2047,34.962],[118.2045,34.9621],[118.2043,34.9621],[118.2041,34.9621],[118.204,34.9621],[118.2038,34.9621],[118.2038,34.9621],[118.2037,34.9621],[118.2037,34.9621],[118.2036,34.9621],[118.2036,34.9621],[118.2034,34.9621],[118.2028,34.9622],[118.2025,34.9623],[118.2022,34.9623],[118.202,34.9623],[118.2018,34.9623],[118.2016,34.9624],[118.2015,34.9624],[118.2014,34.9624],[118.2014,34.9626],[118.2015,34.9633],[118.2015,34.9636],[118.2015,34.9637],[118.2015,34.9638],[118.2014,34.9638],[118.2013,34.9638],[118.2012,34.9638],[118.2011,34.9637],[118.201,34.9637],[118.2011,34.964],[118.2011,34.964],[118.2011,34.9643],[118.2012,34.9646],[118.2013,34.9652],[118.2008,34.9652],[118.2008,34.9653],[118.2008,34.9654],[118.2009,34.9656],[118.2009,34.9659],[118.2009,34.9659],[118.2011,34.9659],[118.2016,34.9658],[118.202,34.9658],[118.2024,34.9673],[118.2022,34.9673],[118.2022,34.9673],[118.2026,34.9682],[118.2025,34.9682],[118.2024,34.9682],[118.2022,34.9681],[118.2021,34.968],[118.202,34.968],[118.2019,34.968],[118.2018,34.968],[118.2018,34.9681],[118.2019,34.9683],[118.2019,34.9685],[118.202,34.9685],[118.202,34.9688],[118.2021,34.969],[118.2021,34.9692],[118.202,34.9692],[118.2019,34.9692],[118.2019,34.9692],[118.2017,34.9691],[118.2013,34.969],[118.201,34.9689],[118.2008,34.9686],[118.2006,34.9684],[118.2002,34.9679],[118.1997,34.9671],[118.1997,34.9671],[118.1996,34.9672],[118.1996,34.9673],[118.1996,34.9675],[118.1996,34.9677],[118.1996,34.9678],[118.1996,34.9679],[118.1996,34.968],[118.1997,34.968],[118.1997,34.9682],[118.1998,34.9683],[118.1998,34.9683],[118.1998,34.9683],[118.1999,34.9685],[118.2,34.9688],[118.2001,34.9691],[118.2001,34.9693],[118.2002,34.9696],[118.2003,34.9698],[118.2003,34.9698],[118.2003,34.9698],[118.2004,34.9699],[118.2006,34.97],[118.2008,34.9702],[118.2009,34.9703],[118.2009,34.9704],[118.201,34.9706],[118.201,34.9708],[118.2011,34.9711],[118.2012,34.9712],[118.2014,34.9712],[118.2014,34.9713],[118.2015,34.9716],[118.2017,34.9721],[118.2018,34.9723],[118.2018,34.9723],[118.2018,34.9725],[118.2018,34.9725],[118.202,34.9725],[118.2022,34.9725],[118.2022,34.9725],[118.2022,34.9725],[118.2025,34.9725],[118.2028,34.9726],[118.203,34.9726],[118.2031,34.9726],[118.2033,34.9726],[118.2035,34.9727],[118.2037,34.9728],[118.2037,34.9728],[118.2038,34.9729],[118.2038,34.9729],[118.2038,34.9729],[118.2045,34.9729],[118.2053,34.9728],[118.2053,34.9729],[118.2053,34.973],[118.2053,34.9732],[118.2053,34.9732],[118.2054,34.9732],[118.2055,34.9732],[118.2055,34.9732],[118.2057,34.9732],[118.2057,34.9732],[118.2063,34.9733],[118.2065,34.9733],[118.2065,34.9733],[118.2071,34.9733],[118.2071,34.9733],[118.2077,34.9733],[118.2077,34.9733],[118.2079,34.9734],[118.208,34.9748],[118.2081,34.9754],[118.2081,34.9758],[118.2087,34.9757],[118.2087,34.9757],[118.2088,34.9763],[118.2089,34.9763],[118.2089,34.9763],[118.209,34.9763],[118.209,34.9768],[118.2091,34.978],[118.2092,34.978],[118.2096,34.978],[118.2097,34.978],[118.2098,34.9782],[118.21,34.9785],[118.21,34.9788],[118.2102,34.9791],[118.2102,34.9793],[118.2102,34.9794],[118.2102,34.9795],[118.2103,34.9796],[118.2103,34.9797],[118.2104,34.9798],[118.2104,34.9798],[118.2105,34.9799],[118.2105,34.98],[118.2106,34.9801],[118.2106,34.9802],[118.2106,34.9803],[118.2107,34.9804],[118.2107,34.9804],[118.2107,34.9804],[118.2108,34.9806],[118.2108,34.9807],[118.2109,34.9809],[118.211,34.981],[118.211,34.9811],[118.211,34.9812],[118.2111,34.9813],[118.2111,34.9814],[118.2111,34.9815],[118.2112,34.9816],[118.2112,34.9817],[118.2112,34.9817],[118.2111,34.9818],[118.2111,34.9818],[118.2113,34.9827],[118.2114,34.9827],[118.2117,34.9829],[118.2118,34.983],[118.2118,34.9832],[118.2119,34.9832],[118.212,34.9833],[118.212,34.9833],[118.212,34.9834],[118.212,34.9834],[118.212,34.9835],[118.2121,34.9835],[118.2121,34.9836],[118.2121,34.9838],[118.2121,34.984],[118.2128,34.9839],[118.2132,34.9839],[118.2132,34.9839],[118.2135,34.984],[118.2135,34.984],[118.2136,34.9841],[118.2141,34.9842],[118.2141,34.9842],[118.2142,34.9842],[118.2142,34.9842],[118.2142,34.9842],[118.2144,34.9843],[118.2145,34.9844],[118.2146,34.9844],[118.2147,34.9844],[118.2149,34.9844],[118.215,34.9844],[118.2154,34.9843],[118.2157,34.9843],[118.216,34.9843],[118.2166,34.9842],[118.2172,34.9842],[118.2178,34.9841],[118.2183,34.984],[118.2187,34.984],[118.2188,34.984],[118.2191,34.9839],[118.2191,34.9839],[118.2193,34.9839],[118.2197,34.9839],[118.22,34.9838],[118.2203,34.9838],[118.2206,34.9838],[118.2206,34.9838],[118.2208,34.9838],[118.2211,34.9837],[118.2213,34.9837],[118.2213,34.9836],[118.2213,34.9836],[118.2213,34.9835],[118.2212,34.9834],[118.2212,34.9834],[118.2212,34.9834],[118.2214,34.9834],[118.2215,34.9834],[118.2215,34.9834],[118.2217,34.9834],[118.2217,34.9835],[118.2217,34.9835],[118.2217,34.9836],[118.2217,34.9838],[118.2217,34.9839],[118.2217,34.9839],[118.2217,34.984],[118.2218,34.9841],[118.2218,34.9841],[118.2221,34.985],[118.2224,34.985],[118.2225,34.9849],[118.2228,34.9849],[118.223,34.9849],[118.2231,34.9849],[118.2233,34.9849],[118.2233,34.9847],[118.2233,34.9846],[118.2233,34.9845],[118.2234,34.9845],[118.2234,34.9845],[118.2238,34.9845],[118.2244,34.9844],[118.2244,34.9844],[118.2247,34.9844],[118.2252,34.9844],[118.2254,34.9843],[118.2254,34.9843],[118.2254,34.9847],[118.226,34.9847],[118.2266,34.9846],[118.2268,34.9846],[118.2283,34.9846]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006029","XZQMC":"后黄土堰村","KZMJ":4045792.62,"JSMJ":4045792.58,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1996,34.958,118.2327,34.985]}},{"type":"Feature","id":"cunjie_4326.32","geometry":{"type":"MultiPolygon","coordinates":[[[[118.263,34.9957],[118.2629,34.9955],[118.2627,34.9952],[118.2625,34.995],[118.2624,34.9949],[118.2624,34.9949],[118.2623,34.9946],[118.2622,34.9942],[118.2621,34.9939],[118.262,34.9936],[118.2619,34.9931],[118.2618,34.9929],[118.2625,34.9928],[118.2625,34.9928],[118.2625,34.9923],[118.2626,34.9923],[118.2632,34.9922],[118.2632,34.9925],[118.2634,34.9924],[118.2634,34.9917],[118.2632,34.9912],[118.2632,34.991],[118.2632,34.9908],[118.2631,34.9907],[118.2631,34.9905],[118.263,34.9902],[118.263,34.99],[118.263,34.9899],[118.263,34.9896],[118.263,34.9893],[118.263,34.9889],[118.2629,34.9887],[118.263,34.9886],[118.2631,34.9886],[118.2631,34.9886],[118.2631,34.9882],[118.263,34.9879],[118.263,34.9875],[118.263,34.9871],[118.263,34.9868],[118.263,34.9864],[118.263,34.9861],[118.263,34.986],[118.263,34.9859],[118.263,34.9858],[118.263,34.9855],[118.2632,34.9855],[118.2637,34.9855],[118.2644,34.9855],[118.2645,34.9855],[118.2645,34.9848],[118.2645,34.9844],[118.2644,34.9839],[118.2644,34.9835],[118.2637,34.9835],[118.2634,34.9835],[118.263,34.9835],[118.2626,34.9836],[118.2618,34.9836],[118.2614,34.9836],[118.261,34.9836],[118.2602,34.9837],[118.2596,34.9837],[118.2595,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.9837],[118.2594,34.984],[118.2595,34.9845],[118.2595,34.9849],[118.2595,34.9854],[118.2594,34.9854],[118.2593,34.9854],[118.2592,34.9855],[118.2591,34.9855],[118.2589,34.9855],[118.2586,34.9856],[118.2586,34.9856],[118.2586,34.9857],[118.2586,34.9857],[118.2586,34.9859],[118.2586,34.9859],[118.2587,34.9861],[118.2587,34.9861],[118.2587,34.9861],[118.2587,34.9862],[118.2587,34.9863],[118.2587,34.9864],[118.2586,34.9864],[118.2577,34.9865],[118.2578,34.9869],[118.2577,34.9869],[118.2575,34.9869],[118.2576,34.9871],[118.2578,34.9876],[118.2578,34.9878],[118.258,34.9881],[118.2578,34.9882],[118.2577,34.9882],[118.2578,34.9883],[118.2578,34.9883],[118.2578,34.9884],[118.2578,34.9884],[118.2578,34.9884],[118.2572,34.9885],[118.2572,34.9885],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9884],[118.2571,34.9883],[118.2569,34.988],[118.2568,34.9879],[118.2567,34.9879],[118.2561,34.988],[118.2557,34.988],[118.2556,34.988],[118.2553,34.988],[118.2543,34.9881],[118.2545,34.9885],[118.2549,34.9889],[118.2554,34.9894],[118.2548,34.9895],[118.2543,34.9896],[118.254,34.9896],[118.254,34.9898],[118.2536,34.9898],[118.2528,34.9899],[118.2524,34.9899],[118.252,34.99],[118.252,34.9902],[118.2521,34.9907],[118.2521,34.9908],[118.2521,34.9908],[118.2521,34.9908],[118.2521,34.9909],[118.2522,34.991],[118.2522,34.9911],[118.2522,34.9912],[118.2522,34.9916],[118.2523,34.9919],[118.2523,34.9926],[118.2513,34.9926],[118.251,34.9926],[118.2508,34.9926],[118.2504,34.9926],[118.2501,34.9926],[118.2497,34.9926],[118.2496,34.9926],[118.2496,34.9926],[118.2496,34.9926],[118.2495,34.9927],[118.2495,34.9927],[118.2495,34.9927],[118.2495,34.9928],[118.2495,34.993],[118.2495,34.9932],[118.2496,34.9934],[118.2496,34.9934],[118.2496,34.9935],[118.2496,34.9936],[118.2496,34.9937],[118.2496,34.9938],[118.2496,34.994],[118.2496,34.9941],[118.2496,34.9942],[118.2496,34.9944],[118.2496,34.9945],[118.2497,34.9946],[118.2496,34.9946],[118.2496,34.9947],[118.2497,34.9948],[118.2497,34.9949],[118.2497,34.995],[118.2497,34.9951],[118.2497,34.9954],[118.2502,34.9954],[118.2505,34.9954],[118.2507,34.9954],[118.2511,34.9954],[118.2513,34.9954],[118.2515,34.9954],[118.2522,34.9954],[118.253,34.9954],[118.253,34.9955],[118.253,34.9962],[118.2534,34.9959],[118.2536,34.9961],[118.2538,34.9959],[118.2545,34.9955],[118.2545,34.9954],[118.2544,34.9953],[118.2543,34.9951],[118.2545,34.9951],[118.2546,34.995],[118.2546,34.995],[118.2549,34.995],[118.255,34.9949],[118.2551,34.9951],[118.2551,34.9951],[118.2554,34.9954],[118.2554,34.9954],[118.2554,34.9955],[118.2557,34.9958],[118.2557,34.9958],[118.2559,34.996],[118.2559,34.996],[118.2561,34.9962],[118.2563,34.9961],[118.2565,34.9961],[118.2571,34.996],[118.2571,34.9962],[118.2572,34.9965],[118.2572,34.9966],[118.2572,34.9969],[118.2573,34.9973],[118.2573,34.9976],[118.2573,34.9977],[118.2569,34.9977],[118.2568,34.9977],[118.2563,34.9977],[118.2562,34.9977],[118.2558,34.9977],[118.2556,34.9977],[118.2554,34.9977],[118.2553,34.9977],[118.2553,34.9977],[118.2553,34.9978],[118.2552,34.998],[118.2552,34.9982],[118.2552,34.9984],[118.2553,34.9988],[118.2554,34.9991],[118.2555,34.9993],[118.2556,34.9995],[118.2557,34.9997],[118.2557,34.9997],[118.2557,34.9997],[118.2558,34.9997],[118.256,34.9998],[118.2563,34.9999],[118.2563,34.9999],[118.2564,34.9999],[118.2568,34.9999],[118.2568,34.9999],[118.2573,34.9999],[118.2573,34.9999],[118.2572,34.9996],[118.2572,34.9996],[118.2572,34.9994],[118.2565,34.9995],[118.2565,34.9993],[118.2574,34.9993],[118.2578,34.9992],[118.258,34.9992],[118.2582,34.9992],[118.2584,34.9992],[118.2585,34.9992],[118.2585,34.9992],[118.2586,34.9991],[118.2587,34.9989],[118.2588,34.9987],[118.2589,34.9986],[118.259,34.9983],[118.2591,34.9981],[118.2592,34.9979],[118.2592,34.9978],[118.2592,34.9978],[118.2593,34.9977],[118.2593,34.9977],[118.2594,34.9976],[118.2595,34.9976],[118.2596,34.9976],[118.2596,34.9975],[118.2596,34.9974],[118.2596,34.9973],[118.2597,34.9973],[118.2597,34.9973],[118.2598,34.9973],[118.2601,34.9972],[118.2602,34.9972],[118.2601,34.9968],[118.2603,34.9968],[118.2605,34.9968],[118.2606,34.9967],[118.2608,34.9966],[118.261,34.9965],[118.2611,34.9963],[118.2613,34.9962],[118.2615,34.996],[118.2618,34.9957],[118.2619,34.9956],[118.2616,34.9953],[118.262,34.9951],[118.2623,34.9954],[118.2626,34.9958],[118.2629,34.9961],[118.2632,34.9965],[118.2633,34.9966],[118.2635,34.9965],[118.2634,34.9962],[118.2633,34.996],[118.2631,34.9957],[118.263,34.9957]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005017","XZQMC":"湖西崖西村","KZMJ":1201924.29,"JSMJ":1201924.3,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2495,34.9835,118.2645,34.9999]}},{"type":"Feature","id":"cunjie_4326.33","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2731,34.9948],[118.2731,34.9943],[118.2731,34.9938],[118.2731,34.9938],[118.273,34.9933],[118.273,34.9927],[118.273,34.9922],[118.2729,34.9918],[118.2729,34.9917],[118.2729,34.9916],[118.2729,34.9912],[118.2729,34.991],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2729,34.9909],[118.2728,34.9907],[118.2728,34.9905],[118.2728,34.9905],[118.2728,34.9902],[118.2728,34.9898],[118.2729,34.9898],[118.2732,34.9897],[118.2732,34.9897],[118.2734,34.9897],[118.2735,34.9897],[118.2735,34.9897],[118.2735,34.9897],[118.2736,34.9897],[118.2737,34.9897],[118.2738,34.9897],[118.2738,34.9897],[118.274,34.9897],[118.2748,34.9897],[118.2751,34.9896],[118.2751,34.9892],[118.2751,34.9889],[118.2751,34.9884],[118.2751,34.9884],[118.275,34.9884],[118.2747,34.9883],[118.2747,34.9883],[118.2744,34.9882],[118.2743,34.9881],[118.274,34.9881],[118.2739,34.9881],[118.2738,34.988],[118.2738,34.988],[118.2738,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2739,34.9879],[118.2738,34.9878],[118.2738,34.9878],[118.2737,34.9878],[118.2737,34.9878],[118.2737,34.9878],[118.2735,34.9877],[118.2734,34.9876],[118.2734,34.9875],[118.2734,34.9872],[118.2734,34.9871],[118.2733,34.9871],[118.2733,34.9871],[118.273,34.987],[118.273,34.987],[118.273,34.9867],[118.272,34.9865],[118.272,34.9862],[118.272,34.9862],[118.272,34.9862],[118.272,34.9862],[118.272,34.9861],[118.272,34.9861],[118.2715,34.9859],[118.2715,34.9859],[118.2715,34.9859],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9858],[118.2715,34.9857],[118.2716,34.9855],[118.2716,34.9851],[118.2717,34.9846],[118.2717,34.9844],[118.2717,34.9842],[118.2717,34.9839],[118.2717,34.9838],[118.2716,34.9834],[118.2716,34.9834],[118.2715,34.983],[118.2715,34.983],[118.2723,34.983],[118.273,34.983],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9827],[118.273,34.9826],[118.273,34.9825],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2731,34.9823],[118.2732,34.9823],[118.2733,34.9822],[118.2732,34.9822],[118.273,34.9821],[118.2726,34.9818],[118.2726,34.9814],[118.2728,34.9815],[118.2729,34.9816],[118.273,34.9816],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2732,34.9817],[118.2733,34.9817],[118.2736,34.9819],[118.2737,34.9809],[118.2737,34.9804],[118.2738,34.98],[118.2738,34.9795],[118.2739,34.9791],[118.2739,34.9791],[118.2739,34.9791],[118.2739,34.9788],[118.2739,34.9787],[118.2739,34.9783],[118.2739,34.978],[118.2739,34.978],[118.2739,34.978],[118.2736,34.9781],[118.2734,34.9782],[118.2733,34.9782],[118.2732,34.9782],[118.273,34.9782],[118.2728,34.978],[118.2728,34.978],[118.2727,34.978],[118.2725,34.9781],[118.2721,34.9784],[118.2719,34.9785],[118.2717,34.9785],[118.2714,34.9784],[118.2708,34.9782],[118.2706,34.9781],[118.2704,34.9781],[118.2703,34.9781],[118.2694,34.9781],[118.269,34.9781],[118.2684,34.9781],[118.2684,34.9781],[118.2684,34.9783],[118.2685,34.9788],[118.2686,34.9791],[118.2686,34.9792],[118.2686,34.9793],[118.2686,34.9801],[118.2683,34.9801],[118.2673,34.9801],[118.2664,34.9801],[118.2662,34.9801],[118.2662,34.9801],[118.266,34.9801],[118.2659,34.9801],[118.2655,34.9801],[118.2654,34.9801],[118.2654,34.9801],[118.2654,34.9801],[118.2653,34.9801],[118.2651,34.9801],[118.2652,34.9808],[118.2642,34.9809],[118.2642,34.9818],[118.2636,34.9818],[118.2636,34.9822],[118.2636,34.9826],[118.2636,34.9827],[118.2637,34.9827],[118.2637,34.9827],[118.2637,34.9828],[118.2637,34.9829],[118.2637,34.9831],[118.2637,34.9834],[118.2637,34.9835],[118.2637,34.9835],[118.2644,34.9835],[118.2644,34.9839],[118.2645,34.9844],[118.2645,34.9848],[118.2645,34.9855],[118.2644,34.9855],[118.2637,34.9855],[118.2632,34.9855],[118.263,34.9855],[118.263,34.9858],[118.263,34.9859],[118.263,34.986],[118.263,34.9861],[118.263,34.9864],[118.263,34.9868],[118.263,34.9871],[118.263,34.9875],[118.263,34.9879],[118.2631,34.9882],[118.2631,34.9886],[118.2631,34.9886],[118.263,34.9886],[118.2629,34.9887],[118.263,34.9889],[118.263,34.9893],[118.263,34.9896],[118.263,34.9899],[118.263,34.99],[118.263,34.9902],[118.2631,34.9905],[118.2631,34.9907],[118.2632,34.9908],[118.2632,34.991],[118.2632,34.9912],[118.2634,34.9917],[118.2634,34.9924],[118.2632,34.9925],[118.2632,34.9922],[118.2626,34.9923],[118.2625,34.9923],[118.2625,34.9928],[118.2625,34.9928],[118.2618,34.9929],[118.2619,34.9931],[118.262,34.9936],[118.2621,34.9939],[118.2622,34.9942],[118.2623,34.9946],[118.2624,34.9949],[118.2624,34.9949],[118.2625,34.995],[118.2627,34.9952],[118.2629,34.9955],[118.263,34.9957],[118.2639,34.9955],[118.2646,34.9954],[118.265,34.9953],[118.265,34.9958],[118.2651,34.9963],[118.2651,34.9965],[118.2651,34.997],[118.2651,34.9971],[118.2657,34.997],[118.266,34.997],[118.2661,34.997],[118.2662,34.9967],[118.2665,34.9967],[118.2672,34.9968],[118.2673,34.9966],[118.2677,34.9966],[118.2678,34.9964],[118.2684,34.9965],[118.2688,34.9965],[118.2689,34.9964],[118.2697,34.9966],[118.27,34.9966],[118.27,34.9967],[118.27,34.9967],[118.2704,34.9967],[118.2703,34.996],[118.2703,34.9955],[118.2703,34.9952],[118.2708,34.9952],[118.2708,34.995],[118.2718,34.9949],[118.2726,34.9948],[118.2731,34.9948]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005018","XZQMC":"湖西崖东村","KZMJ":1655726.1,"JSMJ":1655726.09,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2618,34.978,118.2751,34.9971]}},{"type":"Feature","id":"cunjie_4326.34","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1967,34.9961],[118.1968,34.996],[118.1969,34.9957],[118.197,34.9954],[118.197,34.9954],[118.1973,34.9944],[118.1974,34.9944],[118.1975,34.9945],[118.1976,34.9945],[118.1976,34.9939],[118.1978,34.9927],[118.1977,34.9926],[118.1976,34.9926],[118.1976,34.9926],[118.1976,34.9925],[118.1975,34.9925],[118.1973,34.9925],[118.1972,34.9925],[118.1972,34.9925],[118.1972,34.9925],[118.1971,34.9925],[118.1972,34.9911],[118.1965,34.9911],[118.1965,34.9911],[118.1965,34.9911],[118.1964,34.9912],[118.1963,34.9912],[118.1962,34.9912],[118.1959,34.9911],[118.1952,34.9909],[118.195,34.9908],[118.1948,34.9907],[118.1947,34.9907],[118.1945,34.9907],[118.194,34.9906],[118.1939,34.9905],[118.1939,34.9905],[118.1936,34.9907],[118.1934,34.9909],[118.1933,34.991],[118.1932,34.9911],[118.1932,34.9911],[118.1931,34.991],[118.1929,34.9906],[118.1929,34.9905],[118.1927,34.9904],[118.1926,34.9903],[118.1926,34.9903],[118.1925,34.9902],[118.1925,34.9902],[118.1925,34.9903],[118.1925,34.9905],[118.1925,34.9906],[118.1925,34.9906],[118.1924,34.9907],[118.1924,34.9909],[118.1923,34.9911],[118.1922,34.9912],[118.1921,34.9912],[118.1918,34.9912],[118.1921,34.9906],[118.1921,34.9905],[118.1919,34.9904],[118.1918,34.9905],[118.1917,34.9905],[118.1916,34.9905],[118.1916,34.9903],[118.1916,34.9902],[118.1916,34.99],[118.1916,34.9899],[118.1916,34.9898],[118.1916,34.9897],[118.1915,34.9897],[118.1915,34.9898],[118.1914,34.9899],[118.1914,34.9899],[118.1914,34.99],[118.1913,34.9901],[118.1912,34.9901],[118.1912,34.99],[118.1911,34.9898],[118.191,34.9897],[118.191,34.9895],[118.1907,34.989],[118.1906,34.9888],[118.1906,34.9886],[118.1905,34.9885],[118.1903,34.9885],[118.1903,34.9884],[118.1902,34.9883],[118.1902,34.9883],[118.1902,34.9883],[118.19,34.9883],[118.19,34.9882],[118.1898,34.9872],[118.1898,34.987],[118.1897,34.9864],[118.1896,34.986],[118.1893,34.9861],[118.1891,34.9861],[118.1891,34.9861],[118.1889,34.9861],[118.1888,34.9861],[118.1888,34.9861],[118.1887,34.9861],[118.1886,34.9861],[118.1886,34.9861],[118.1884,34.9861],[118.1884,34.9861],[118.1883,34.9861],[118.1882,34.9861],[118.1882,34.9861],[118.1882,34.9861],[118.1881,34.9862],[118.1878,34.9862],[118.1878,34.9862],[118.1878,34.9863],[118.1877,34.9863],[118.1876,34.9863],[118.1875,34.9864],[118.1875,34.9864],[118.1875,34.9864],[118.1875,34.9864],[118.1874,34.9864],[118.1874,34.9865],[118.1873,34.9865],[118.1871,34.9866],[118.187,34.9867],[118.187,34.9867],[118.1869,34.9867],[118.1869,34.9867],[118.1868,34.9867],[118.1867,34.9868],[118.1867,34.9868],[118.1866,34.9868],[118.1866,34.9868],[118.1865,34.9868],[118.1864,34.9868],[118.1863,34.9869],[118.1863,34.987],[118.1862,34.987],[118.1861,34.987],[118.1861,34.9872],[118.1862,34.9874],[118.1862,34.9877],[118.1862,34.9877],[118.1862,34.988],[118.1863,34.9884],[118.1863,34.9885],[118.1864,34.989],[118.1865,34.989],[118.1866,34.989],[118.1867,34.9891],[118.1867,34.9891],[118.1868,34.9892],[118.1868,34.9893],[118.1868,34.9895],[118.1868,34.9895],[118.1868,34.9896],[118.1868,34.9896],[118.1868,34.9896],[118.1869,34.9896],[118.187,34.9896],[118.1871,34.9896],[118.1871,34.9896],[118.1871,34.9897],[118.1871,34.9897],[118.187,34.9897],[118.187,34.9898],[118.1869,34.9898],[118.1868,34.9898],[118.1868,34.9899],[118.1867,34.9899],[118.1867,34.9899],[118.1867,34.9899],[118.1859,34.9897],[118.1857,34.9897],[118.1857,34.9898],[118.1856,34.99],[118.1856,34.9901],[118.1859,34.9902],[118.186,34.9903],[118.186,34.9903],[118.1861,34.9903],[118.1862,34.9903],[118.1864,34.9904],[118.1865,34.9905],[118.1865,34.9905],[118.1865,34.9907],[118.1864,34.9909],[118.1862,34.9909],[118.1858,34.9909],[118.1858,34.9909],[118.1855,34.9909],[118.1846,34.9909],[118.1842,34.9909],[118.1842,34.9909],[118.1841,34.9909],[118.1841,34.9909],[118.1836,34.9909],[118.1832,34.9909],[118.1835,34.9915],[118.1836,34.9916],[118.1836,34.9916],[118.1838,34.992],[118.1839,34.9921],[118.184,34.9922],[118.184,34.9922],[118.184,34.9922],[118.184,34.9923],[118.184,34.9924],[118.1841,34.9925],[118.1841,34.9926],[118.1843,34.9928],[118.1844,34.993],[118.1844,34.9931],[118.1844,34.9931],[118.1844,34.9932],[118.1845,34.9932],[118.1845,34.9933],[118.1845,34.9933],[118.1845,34.9934],[118.1845,34.9935],[118.1841,34.9935],[118.1841,34.9937],[118.1842,34.9944],[118.184,34.9944],[118.1829,34.9945],[118.1822,34.9945],[118.1822,34.9945],[118.182,34.9945],[118.182,34.9945],[118.1818,34.9945],[118.1817,34.9947],[118.181,34.9947],[118.181,34.9949],[118.1815,34.9949],[118.1817,34.9949],[118.1817,34.995],[118.1817,34.9951],[118.1817,34.9953],[118.1819,34.9953],[118.1819,34.9953],[118.1819,34.9953],[118.182,34.9953],[118.182,34.9953],[118.1821,34.9952],[118.1821,34.9952],[118.1821,34.9952],[118.1822,34.9952],[118.1823,34.9952],[118.1831,34.9951],[118.1842,34.9949],[118.1842,34.9953],[118.1837,34.9953],[118.1833,34.9954],[118.1828,34.9954],[118.1828,34.9955],[118.1828,34.9957],[118.1833,34.9957],[118.1834,34.9957],[118.1837,34.9957],[118.1839,34.9957],[118.1841,34.9956],[118.1844,34.9956],[118.1845,34.9956],[118.1846,34.9954],[118.1847,34.9953],[118.1848,34.9952],[118.1849,34.9951],[118.185,34.9951],[118.1849,34.9951],[118.1849,34.9951],[118.1848,34.995],[118.1848,34.9949],[118.1848,34.9949],[118.1848,34.9948],[118.1847,34.9947],[118.1847,34.9946],[118.1852,34.9945],[118.1851,34.9943],[118.1852,34.9942],[118.1852,34.9942],[118.1852,34.9941],[118.1852,34.9941],[118.1853,34.9941],[118.1853,34.9941],[118.1853,34.9946],[118.1853,34.9948],[118.1854,34.9949],[118.1854,34.9949],[118.1861,34.9946],[118.1861,34.9945],[118.1861,34.9944],[118.1862,34.9942],[118.1862,34.9939],[118.1862,34.9939],[118.1864,34.994],[118.1864,34.9941],[118.1864,34.9944],[118.1865,34.9946],[118.1865,34.9948],[118.1864,34.9949],[118.1863,34.995],[118.1863,34.995],[118.1862,34.9951],[118.1862,34.9951],[118.1863,34.9953],[118.1863,34.9955],[118.1862,34.9955],[118.1862,34.9956],[118.1862,34.9956],[118.1862,34.9957],[118.1863,34.9957],[118.1864,34.9957],[118.1866,34.9957],[118.1867,34.9958],[118.1868,34.9957],[118.1868,34.9957],[118.1868,34.9957],[118.1869,34.9957],[118.1871,34.9959],[118.1874,34.9959],[118.1875,34.9961],[118.1876,34.9962],[118.1877,34.9963],[118.1878,34.9963],[118.1878,34.9964],[118.1878,34.9963],[118.1879,34.9963],[118.188,34.9963],[118.1887,34.9962],[118.1888,34.9962],[118.1888,34.9961],[118.1885,34.9953],[118.1885,34.995],[118.1884,34.9949],[118.1884,34.9948],[118.1884,34.9947],[118.1884,34.9946],[118.1884,34.9945],[118.1884,34.9944],[118.1884,34.9944],[118.1885,34.9944],[118.1885,34.9944],[118.1886,34.9948],[118.1887,34.9949],[118.1888,34.9951],[118.1888,34.9951],[118.1888,34.9951],[118.1888,34.9952],[118.189,34.9953],[118.1892,34.9957],[118.1892,34.9959],[118.1892,34.9963],[118.1892,34.9963],[118.1893,34.9964],[118.1893,34.9967],[118.1894,34.9968],[118.19,34.9967],[118.19,34.9967],[118.1902,34.9967],[118.1903,34.9966],[118.1905,34.9966],[118.1909,34.9966],[118.1913,34.9966],[118.1912,34.9963],[118.1912,34.9963],[118.1912,34.9963],[118.1912,34.9962],[118.1912,34.9961],[118.1912,34.996],[118.1918,34.9961],[118.1929,34.9962],[118.1932,34.9963],[118.1932,34.9961],[118.1933,34.996],[118.1934,34.9958],[118.1934,34.9956],[118.1937,34.9956],[118.1945,34.9957],[118.1946,34.9957],[118.1949,34.9957],[118.1952,34.9958],[118.1952,34.9958],[118.1954,34.9958],[118.1954,34.9958],[118.1955,34.9959],[118.1951,34.997],[118.1954,34.9971],[118.1952,34.9976],[118.1955,34.9976],[118.1962,34.9956],[118.1963,34.9956],[118.1965,34.9958],[118.1965,34.9958],[118.1965,34.9959],[118.1966,34.996],[118.1966,34.996],[118.1967,34.9961],[118.1967,34.9961]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006024","XZQMC":"毕家庄村","KZMJ":890110.67,"JSMJ":890110.68,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.181,34.986,118.1978,34.9976]}},{"type":"Feature","id":"cunjie_4326.35","geometry":{"type":"MultiPolygon","coordinates":[[[[118.208,34.9903],[118.2079,34.9902],[118.2078,34.9902],[118.2077,34.9901],[118.2077,34.9901],[118.2078,34.99],[118.2078,34.9899],[118.208,34.9899],[118.2082,34.9898],[118.2082,34.9898],[118.2082,34.9896],[118.2082,34.9896],[118.2083,34.9895],[118.2083,34.9895],[118.2084,34.9894],[118.2083,34.9893],[118.2083,34.9892],[118.2083,34.9891],[118.2085,34.989],[118.2086,34.989],[118.2086,34.9889],[118.2086,34.9889],[118.2086,34.9887],[118.2087,34.9886],[118.2087,34.9884],[118.2087,34.9881],[118.2087,34.9879],[118.2087,34.9879],[118.2088,34.9879],[118.2088,34.9878],[118.2087,34.9876],[118.2087,34.9876],[118.2087,34.9876],[118.2094,34.9876],[118.2096,34.9877],[118.2097,34.9878],[118.2099,34.9878],[118.2102,34.9878],[118.2103,34.9878],[118.2103,34.9877],[118.2103,34.9874],[118.2103,34.9873],[118.2103,34.9871],[118.2103,34.9869],[118.2113,34.987],[118.2121,34.987],[118.212,34.9869],[118.212,34.9868],[118.212,34.9867],[118.2119,34.9865],[118.2119,34.9864],[118.2119,34.9863],[118.2119,34.9862],[118.2119,34.9862],[118.2119,34.9861],[118.2119,34.986],[118.2119,34.986],[118.2118,34.986],[118.2118,34.9858],[118.2118,34.9857],[118.2118,34.9856],[118.2118,34.9856],[118.2118,34.9855],[118.2122,34.9855],[118.2122,34.9851],[118.2121,34.984],[118.2121,34.9838],[118.2121,34.9836],[118.2121,34.9835],[118.212,34.9835],[118.212,34.9834],[118.212,34.9834],[118.212,34.9833],[118.212,34.9833],[118.2119,34.9832],[118.2118,34.9832],[118.2118,34.983],[118.2117,34.9829],[118.2114,34.9827],[118.2113,34.9827],[118.2111,34.9818],[118.2111,34.9818],[118.2112,34.9817],[118.2112,34.9817],[118.2112,34.9816],[118.2111,34.9815],[118.2111,34.9814],[118.2111,34.9813],[118.211,34.9812],[118.211,34.9811],[118.211,34.981],[118.2109,34.9809],[118.2108,34.9807],[118.2108,34.9806],[118.2107,34.9804],[118.2107,34.9804],[118.2107,34.9804],[118.2106,34.9803],[118.2106,34.9802],[118.2106,34.9801],[118.2105,34.98],[118.2105,34.9799],[118.2104,34.9798],[118.2104,34.9798],[118.2103,34.9797],[118.2103,34.9796],[118.2102,34.9795],[118.2102,34.9794],[118.2102,34.9793],[118.2102,34.9791],[118.21,34.9788],[118.21,34.9785],[118.2098,34.9782],[118.2097,34.978],[118.2096,34.978],[118.2092,34.978],[118.2091,34.978],[118.209,34.9768],[118.209,34.9763],[118.2089,34.9763],[118.2089,34.9763],[118.2088,34.9763],[118.2087,34.9757],[118.2087,34.9757],[118.2081,34.9758],[118.2081,34.9754],[118.208,34.9748],[118.2079,34.9734],[118.2077,34.9733],[118.2077,34.9733],[118.2071,34.9733],[118.2071,34.9733],[118.2065,34.9733],[118.2065,34.9733],[118.2063,34.9733],[118.2057,34.9732],[118.2057,34.9732],[118.2055,34.9732],[118.2055,34.9732],[118.2054,34.9732],[118.2053,34.9732],[118.2053,34.9732],[118.2053,34.973],[118.2053,34.9729],[118.2053,34.9728],[118.2045,34.9729],[118.2038,34.9729],[118.2038,34.9729],[118.2038,34.9729],[118.2037,34.9728],[118.2037,34.9728],[118.2035,34.9727],[118.2033,34.9726],[118.2031,34.9726],[118.203,34.9726],[118.2028,34.9726],[118.2025,34.9725],[118.2022,34.9725],[118.2022,34.9725],[118.2022,34.9725],[118.202,34.9725],[118.2018,34.9725],[118.2018,34.9725],[118.2018,34.9723],[118.2018,34.9723],[118.2017,34.9721],[118.2015,34.9716],[118.2014,34.9713],[118.2014,34.9712],[118.2012,34.9712],[118.2011,34.9711],[118.201,34.9708],[118.201,34.9706],[118.2009,34.9704],[118.2009,34.9703],[118.2008,34.9702],[118.2006,34.97],[118.2004,34.9699],[118.2003,34.9698],[118.2003,34.9698],[118.2003,34.9698],[118.2002,34.9696],[118.2001,34.9693],[118.2001,34.9691],[118.2,34.9688],[118.1999,34.9685],[118.1998,34.9683],[118.1998,34.9683],[118.1998,34.9683],[118.1997,34.9682],[118.1997,34.968],[118.1996,34.968],[118.1996,34.9679],[118.1996,34.9678],[118.1996,34.9677],[118.1996,34.9675],[118.1996,34.9673],[118.1996,34.9672],[118.1997,34.9671],[118.1997,34.9671],[118.2002,34.9679],[118.2006,34.9684],[118.2008,34.9686],[118.201,34.9689],[118.2013,34.969],[118.2017,34.9691],[118.2019,34.9692],[118.2019,34.9692],[118.202,34.9692],[118.2021,34.9692],[118.2021,34.969],[118.202,34.9688],[118.202,34.9685],[118.2019,34.9685],[118.2019,34.9683],[118.2018,34.9681],[118.2018,34.968],[118.2019,34.968],[118.202,34.968],[118.2021,34.968],[118.2022,34.9681],[118.2024,34.9682],[118.2025,34.9682],[118.2026,34.9682],[118.2022,34.9673],[118.2022,34.9673],[118.2024,34.9673],[118.202,34.9658],[118.2016,34.9658],[118.2011,34.9659],[118.2009,34.9659],[118.2009,34.9659],[118.2009,34.9656],[118.2008,34.9654],[118.2008,34.9653],[118.2008,34.9652],[118.2013,34.9652],[118.2012,34.9646],[118.2011,34.9643],[118.2011,34.964],[118.2011,34.964],[118.201,34.9637],[118.2011,34.9637],[118.2012,34.9638],[118.2013,34.9638],[118.2014,34.9638],[118.2015,34.9638],[118.2015,34.9637],[118.2015,34.9636],[118.2015,34.9633],[118.2014,34.9626],[118.2014,34.9624],[118.2014,34.9624],[118.2007,34.9624],[118.2006,34.9624],[118.2004,34.9624],[118.1998,34.9625],[118.1996,34.9625],[118.1995,34.9625],[118.1994,34.9625],[118.1992,34.9625],[118.199,34.9625],[118.1989,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9626],[118.1986,34.9622],[118.1971,34.9624],[118.197,34.9615],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9612],[118.1969,34.9611],[118.1969,34.9609],[118.1969,34.9609],[118.1969,34.9609],[118.1969,34.9607],[118.1969,34.9607],[118.1968,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9606],[118.1966,34.9607],[118.1967,34.961],[118.1967,34.9612],[118.1967,34.9612],[118.1966,34.9612],[118.1966,34.9612],[118.1966,34.9612],[118.1966,34.9614],[118.1966,34.9614],[118.1966,34.9614],[118.1966,34.9617],[118.1966,34.9617],[118.1967,34.9622],[118.1967,34.9622],[118.1965,34.9622],[118.1964,34.9622],[118.1962,34.9623],[118.1946,34.9624],[118.1941,34.9624],[118.1932,34.9625],[118.193,34.9631],[118.193,34.9631],[118.193,34.9632],[118.1929,34.964],[118.1928,34.9643],[118.1927,34.9647],[118.1925,34.965],[118.1923,34.9653],[118.1922,34.9655],[118.1921,34.9656],[118.192,34.9658],[118.192,34.966],[118.192,34.966],[118.1919,34.9661],[118.1919,34.9662],[118.1919,34.9665],[118.1919,34.9667],[118.1919,34.9672],[118.1919,34.9673],[118.192,34.9682],[118.1921,34.9685],[118.1921,34.9687],[118.1922,34.9687],[118.1923,34.9688],[118.1924,34.9693],[118.1925,34.9697],[118.1928,34.9708],[118.1928,34.9709],[118.1929,34.9712],[118.1929,34.9714],[118.193,34.9714],[118.193,34.9715],[118.1931,34.972],[118.1932,34.9722],[118.1932,34.9723],[118.1933,34.9724],[118.1933,34.9724],[118.1934,34.9725],[118.1935,34.9725],[118.1936,34.9726],[118.1937,34.9726],[118.1937,34.9727],[118.1937,34.9727],[118.1937,34.9728],[118.1938,34.9729],[118.1938,34.9731],[118.1938,34.9732],[118.1938,34.9732],[118.1938,34.9732],[118.1939,34.9733],[118.194,34.9736],[118.194,34.9737],[118.194,34.9738],[118.194,34.9738],[118.194,34.9739],[118.1941,34.974],[118.1941,34.9742],[118.1942,34.9745],[118.1942,34.9746],[118.1943,34.975],[118.1943,34.9751],[118.1945,34.9756],[118.1945,34.9757],[118.1945,34.9758],[118.1946,34.9762],[118.1947,34.9765],[118.1943,34.9764],[118.1942,34.9764],[118.1942,34.9765],[118.194,34.9766],[118.194,34.9766],[118.194,34.9766],[118.1939,34.9766],[118.1936,34.9765],[118.1936,34.9766],[118.1937,34.9769],[118.1938,34.9778],[118.1934,34.9778],[118.1931,34.9778],[118.193,34.9778],[118.1929,34.9779],[118.1927,34.9779],[118.1927,34.9781],[118.1928,34.9792],[118.1929,34.9795],[118.1929,34.9796],[118.193,34.9806],[118.1929,34.9806],[118.1927,34.9806],[118.1925,34.9806],[118.1922,34.9805],[118.1919,34.9804],[118.1916,34.9804],[118.1911,34.9803],[118.1911,34.9803],[118.1907,34.9802],[118.1903,34.9801],[118.1903,34.9802],[118.1903,34.9811],[118.1903,34.9815],[118.1903,34.9815],[118.1903,34.9816],[118.1904,34.982],[118.1903,34.9823],[118.1908,34.9823],[118.1908,34.9823],[118.1911,34.9823],[118.1912,34.9825],[118.1912,34.9826],[118.1912,34.9826],[118.1912,34.9829],[118.1912,34.983],[118.1912,34.983],[118.1913,34.9832],[118.1913,34.9834],[118.1913,34.9836],[118.1914,34.9842],[118.1914,34.9841],[118.1915,34.9841],[118.1916,34.9841],[118.1917,34.9846],[118.1917,34.9846],[118.1916,34.9846],[118.1915,34.9846],[118.1916,34.9849],[118.1915,34.9849],[118.1913,34.9849],[118.1911,34.985],[118.1911,34.9847],[118.1903,34.9854],[118.1904,34.9855],[118.1904,34.9855],[118.1904,34.9855],[118.1906,34.9854],[118.1907,34.9858],[118.1908,34.986],[118.1908,34.986],[118.1909,34.986],[118.1909,34.986],[118.1909,34.986],[118.191,34.986],[118.191,34.986],[118.191,34.986],[118.191,34.986],[118.1911,34.986],[118.1911,34.986],[118.1911,34.986],[118.1912,34.986],[118.1913,34.986],[118.1914,34.986],[118.1914,34.9861],[118.1915,34.9861],[118.1915,34.9861],[118.1915,34.9861],[118.1915,34.9862],[118.1914,34.9864],[118.1915,34.9866],[118.1916,34.9874],[118.1916,34.9875],[118.1918,34.9876],[118.192,34.9876],[118.1922,34.9878],[118.1923,34.9879],[118.1924,34.9882],[118.1924,34.9888],[118.1924,34.9892],[118.1924,34.9894],[118.1924,34.9895],[118.1926,34.9895],[118.1928,34.9896],[118.193,34.9896],[118.1933,34.9898],[118.1933,34.99],[118.1934,34.9902],[118.1937,34.9904],[118.1937,34.9904],[118.1938,34.9905],[118.1939,34.9905],[118.1939,34.9905],[118.194,34.9906],[118.1945,34.9907],[118.1947,34.9907],[118.1948,34.9907],[118.195,34.9908],[118.1952,34.9909],[118.1959,34.9911],[118.1962,34.9912],[118.1963,34.9912],[118.1964,34.9912],[118.1965,34.9911],[118.1965,34.9911],[118.1965,34.9911],[118.1972,34.9911],[118.1971,34.9925],[118.1972,34.9925],[118.1972,34.9925],[118.1972,34.9925],[118.1973,34.9925],[118.1975,34.9925],[118.1976,34.9925],[118.1976,34.9926],[118.1976,34.9926],[118.1977,34.9926],[118.1978,34.9927],[118.1976,34.9939],[118.1976,34.9945],[118.1977,34.9945],[118.198,34.9946],[118.198,34.9946],[118.1982,34.9946],[118.1984,34.9947],[118.1985,34.9947],[118.1985,34.9947],[118.1987,34.9947],[118.1988,34.9948],[118.1988,34.9948],[118.1992,34.9948],[118.1993,34.9946],[118.1994,34.9945],[118.1995,34.9941],[118.1996,34.9937],[118.1997,34.9933],[118.1997,34.9933],[118.1997,34.9931],[118.1998,34.9929],[118.1998,34.9926],[118.2001,34.9926],[118.2,34.9934],[118.2001,34.9934],[118.2002,34.9934],[118.2003,34.9927],[118.2003,34.9927],[118.2005,34.9926],[118.2005,34.9926],[118.2005,34.9934],[118.2008,34.9935],[118.2011,34.9925],[118.2012,34.9921],[118.2016,34.9921],[118.2016,34.9919],[118.2017,34.9918],[118.2017,34.9918],[118.2017,34.9918],[118.2017,34.9918],[118.2018,34.9918],[118.2019,34.9924],[118.2019,34.9925],[118.202,34.9926],[118.202,34.9925],[118.2021,34.9925],[118.202,34.9923],[118.2022,34.9921],[118.2022,34.9921],[118.2022,34.9921],[118.2023,34.9916],[118.2026,34.9917],[118.2027,34.9915],[118.2028,34.9912],[118.2029,34.9911],[118.2028,34.9913],[118.2028,34.9916],[118.2028,34.992],[118.2029,34.9921],[118.2038,34.9921],[118.2039,34.9917],[118.2039,34.9915],[118.2039,34.9913],[118.2039,34.9912],[118.2039,34.9911],[118.2039,34.9911],[118.204,34.991],[118.204,34.9909],[118.204,34.9909],[118.204,34.9909],[118.2048,34.9909],[118.2048,34.9909],[118.2048,34.9913],[118.2047,34.9914],[118.2047,34.9914],[118.2046,34.9915],[118.2047,34.9916],[118.2047,34.9919],[118.2049,34.9919],[118.2049,34.9919],[118.2049,34.9924],[118.2058,34.9924],[118.2058,34.9924],[118.2063,34.9924],[118.2064,34.9924],[118.2065,34.9924],[118.2067,34.9924],[118.2066,34.9932],[118.2066,34.9934],[118.2066,34.9935],[118.2072,34.9935],[118.2073,34.9935],[118.2073,34.9935],[118.2073,34.9934],[118.2073,34.9933],[118.2073,34.9932],[118.2073,34.9932],[118.2074,34.993],[118.2074,34.9928],[118.2074,34.9926],[118.2074,34.9925],[118.2074,34.9925],[118.2074,34.9925],[118.2075,34.9919],[118.2075,34.9916],[118.2076,34.9911],[118.2076,34.9911],[118.2076,34.9911],[118.2076,34.9911],[118.2076,34.991],[118.2076,34.991],[118.2076,34.991],[118.2078,34.9904],[118.2079,34.9903],[118.208,34.9903]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006026","XZQMC":"庙山村","KZMJ":4311935.68,"JSMJ":4311935.73,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1903,34.9606,118.2122,34.9948]}},{"type":"Feature","id":"cunjie_4326.36","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2468,34.9937],[118.2468,34.9937],[118.2467,34.9936],[118.2467,34.9933],[118.2467,34.9932],[118.2467,34.993],[118.2467,34.9929],[118.2467,34.9929],[118.2467,34.9929],[118.2467,34.9927],[118.2467,34.9924],[118.2467,34.9923],[118.2467,34.992],[118.2467,34.9919],[118.2466,34.9917],[118.2466,34.9914],[118.2466,34.9914],[118.2466,34.9914],[118.2466,34.9913],[118.2466,34.9912],[118.2466,34.9911],[118.2466,34.991],[118.2466,34.991],[118.2466,34.9908],[118.2466,34.9906],[118.2466,34.9906],[118.2466,34.9904],[118.2465,34.9899],[118.2465,34.9897],[118.2465,34.9895],[118.2465,34.9893],[118.2465,34.9892],[118.2465,34.9888],[118.2465,34.9888],[118.2463,34.9888],[118.2459,34.9888],[118.2459,34.9887],[118.2459,34.9884],[118.2457,34.9884],[118.2453,34.9885],[118.2453,34.9884],[118.2453,34.9881],[118.2454,34.9881],[118.2454,34.988],[118.2456,34.988],[118.2456,34.9877],[118.2455,34.9874],[118.2453,34.9874],[118.2453,34.9872],[118.2452,34.9869],[118.2452,34.9867],[118.2366,34.9868],[118.2366,34.9868],[118.2366,34.9868],[118.2366,34.9868],[118.2365,34.9869],[118.2363,34.9873],[118.2362,34.9874],[118.2362,34.9874],[118.2361,34.9876],[118.236,34.9878],[118.2358,34.9881],[118.2357,34.9883],[118.2356,34.9887],[118.2362,34.9889],[118.2363,34.9889],[118.2365,34.9889],[118.237,34.989],[118.2373,34.9891],[118.2375,34.9891],[118.2375,34.9891],[118.2375,34.9891],[118.2377,34.9891],[118.2383,34.9892],[118.2391,34.9893],[118.2391,34.9894],[118.2391,34.9894],[118.239,34.9895],[118.2389,34.9899],[118.2387,34.9901],[118.2386,34.9903],[118.2386,34.9906],[118.2385,34.9907],[118.2384,34.9911],[118.2384,34.9912],[118.2384,34.9912],[118.2384,34.9913],[118.2384,34.9914],[118.2384,34.9914],[118.2385,34.9914],[118.2384,34.9915],[118.2384,34.9916],[118.2384,34.9916],[118.2383,34.9918],[118.2383,34.9921],[118.2383,34.9921],[118.2383,34.9922],[118.2383,34.9923],[118.2383,34.9923],[118.2383,34.9924],[118.2383,34.9924],[118.2382,34.9928],[118.2382,34.9929],[118.2384,34.9929],[118.2387,34.993],[118.2388,34.993],[118.2389,34.9931],[118.2391,34.9931],[118.2392,34.9932],[118.2393,34.9932],[118.2393,34.9932],[118.2394,34.9932],[118.2396,34.9933],[118.2401,34.9935],[118.2401,34.9935],[118.2403,34.993],[118.2406,34.9931],[118.2407,34.9932],[118.2412,34.9935],[118.2413,34.9935],[118.2421,34.9939],[118.2423,34.994],[118.2424,34.994],[118.2427,34.9942],[118.2429,34.9938],[118.2434,34.9939],[118.2442,34.9942],[118.2446,34.9944],[118.2447,34.9942],[118.2449,34.9938],[118.2451,34.9934],[118.2452,34.9931],[118.2456,34.9937],[118.246,34.9943],[118.2462,34.9945],[118.2463,34.9947],[118.2463,34.9947],[118.2473,34.9947],[118.2476,34.9947],[118.2475,34.9946],[118.2475,34.9945],[118.2473,34.9944],[118.2472,34.9943],[118.247,34.9941],[118.2468,34.994],[118.2468,34.9937]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005020","XZQMC":"朱陈北村","KZMJ":1402536.96,"JSMJ":1402536.96,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2356,34.9867,118.2476,34.9947]}},{"type":"Feature","id":"cunjie_4326.37","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2488,34.9936],[118.2487,34.9934],[118.2488,34.9934],[118.2486,34.9867],[118.2452,34.9867],[118.2452,34.9869],[118.2453,34.9872],[118.2453,34.9874],[118.2455,34.9874],[118.2456,34.9877],[118.2456,34.988],[118.2454,34.988],[118.2454,34.9881],[118.2453,34.9881],[118.2453,34.9884],[118.2453,34.9885],[118.2457,34.9884],[118.2459,34.9884],[118.2459,34.9887],[118.2459,34.9888],[118.2463,34.9888],[118.2465,34.9888],[118.2465,34.9888],[118.2465,34.9892],[118.2465,34.9893],[118.2465,34.9895],[118.2465,34.9897],[118.2465,34.9899],[118.2466,34.9904],[118.2466,34.9906],[118.2466,34.9906],[118.2466,34.9908],[118.2466,34.991],[118.2466,34.991],[118.2466,34.9911],[118.2466,34.9912],[118.2466,34.9913],[118.2466,34.9914],[118.2466,34.9914],[118.2466,34.9914],[118.2466,34.9917],[118.2467,34.9919],[118.2467,34.992],[118.2467,34.9923],[118.2467,34.9924],[118.2467,34.9927],[118.2467,34.9929],[118.2467,34.9929],[118.2467,34.9929],[118.2467,34.993],[118.2467,34.9932],[118.2467,34.9933],[118.2467,34.9936],[118.2468,34.9937],[118.2468,34.9937],[118.2471,34.9937],[118.2472,34.9937],[118.2475,34.9937],[118.2479,34.9936],[118.2481,34.9936],[118.2483,34.9936],[118.2485,34.9936],[118.2485,34.9936],[118.2486,34.9936],[118.2487,34.9936],[118.2488,34.9936]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311001002","XZQMC":"朱陈东村","KZMJ":1991670.98,"JSMJ":1991670.97,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2452,34.9867,118.2488,34.9937]}},{"type":"Feature","id":"cunjie_4326.38","geometry":{"type":"MultiPolygon","coordinates":[[[[118.184,34.9922],[118.1839,34.9921],[118.1838,34.992],[118.1836,34.9916],[118.1836,34.9916],[118.1835,34.9915],[118.1832,34.9909],[118.1836,34.9909],[118.1841,34.9909],[118.1841,34.9909],[118.1842,34.9909],[118.1842,34.9909],[118.1846,34.9909],[118.1855,34.9909],[118.1858,34.9909],[118.1858,34.9909],[118.1862,34.9909],[118.1864,34.9909],[118.1865,34.9907],[118.1865,34.9905],[118.1865,34.9905],[118.1864,34.9904],[118.1862,34.9903],[118.1861,34.9903],[118.186,34.9903],[118.186,34.9903],[118.1859,34.9902],[118.1856,34.9901],[118.1856,34.99],[118.1857,34.9898],[118.1857,34.9897],[118.1859,34.9897],[118.1867,34.9899],[118.1867,34.9899],[118.1867,34.9899],[118.1868,34.9899],[118.1868,34.9898],[118.1869,34.9898],[118.187,34.9898],[118.187,34.9897],[118.1871,34.9897],[118.1871,34.9897],[118.1871,34.9896],[118.1871,34.9896],[118.187,34.9896],[118.1869,34.9896],[118.1868,34.9896],[118.1868,34.9896],[118.1868,34.9896],[118.1868,34.9895],[118.1868,34.9895],[118.1868,34.9893],[118.1868,34.9892],[118.1867,34.9891],[118.1867,34.9891],[118.1866,34.989],[118.1865,34.989],[118.1864,34.989],[118.1863,34.9885],[118.1863,34.9884],[118.1862,34.988],[118.1862,34.9877],[118.1862,34.9877],[118.1862,34.9874],[118.1861,34.9872],[118.1861,34.987],[118.1862,34.987],[118.1863,34.987],[118.1863,34.9869],[118.1864,34.9868],[118.1865,34.9868],[118.1866,34.9868],[118.1866,34.9868],[118.1867,34.9868],[118.1867,34.9868],[118.1868,34.9867],[118.1869,34.9867],[118.1869,34.9867],[118.187,34.9867],[118.187,34.9867],[118.1871,34.9866],[118.1873,34.9865],[118.1874,34.9865],[118.1874,34.9864],[118.1875,34.9864],[118.1875,34.9864],[118.1875,34.9864],[118.1875,34.9864],[118.1876,34.9863],[118.1877,34.9863],[118.1878,34.9863],[118.1878,34.9862],[118.1878,34.9862],[118.1881,34.9862],[118.1882,34.9861],[118.1882,34.9861],[118.1882,34.9861],[118.1883,34.9861],[118.1884,34.9861],[118.1884,34.9861],[118.1886,34.9861],[118.1886,34.9861],[118.1887,34.9861],[118.1888,34.9861],[118.1888,34.9861],[118.1889,34.9861],[118.1891,34.9861],[118.1891,34.9861],[118.1893,34.9861],[118.1896,34.986],[118.1897,34.9864],[118.1898,34.987],[118.1898,34.9872],[118.19,34.9882],[118.19,34.9883],[118.1902,34.9883],[118.1902,34.9883],[118.1902,34.9883],[118.1903,34.9884],[118.1903,34.9885],[118.1905,34.9885],[118.1906,34.9886],[118.1906,34.9888],[118.1907,34.989],[118.191,34.9895],[118.191,34.9897],[118.1911,34.9898],[118.1912,34.99],[118.1912,34.9901],[118.1913,34.9901],[118.1914,34.99],[118.1914,34.9899],[118.1914,34.9899],[118.1915,34.9898],[118.1915,34.9897],[118.1916,34.9897],[118.1916,34.9898],[118.1916,34.9899],[118.1916,34.99],[118.1916,34.9902],[118.1916,34.9903],[118.1916,34.9905],[118.1917,34.9905],[118.1918,34.9905],[118.1919,34.9904],[118.1921,34.9905],[118.1921,34.9906],[118.1918,34.9912],[118.1921,34.9912],[118.1922,34.9912],[118.1923,34.9911],[118.1924,34.9909],[118.1924,34.9907],[118.1925,34.9906],[118.1925,34.9906],[118.1925,34.9905],[118.1925,34.9903],[118.1925,34.9902],[118.1925,34.9902],[118.1926,34.9903],[118.1926,34.9903],[118.1927,34.9904],[118.1929,34.9905],[118.1929,34.9906],[118.1931,34.991],[118.1932,34.9911],[118.1932,34.9911],[118.1933,34.991],[118.1934,34.9909],[118.1936,34.9907],[118.1939,34.9905],[118.1938,34.9905],[118.1937,34.9904],[118.1937,34.9904],[118.1934,34.9902],[118.1933,34.99],[118.1933,34.9898],[118.193,34.9896],[118.1928,34.9896],[118.1926,34.9895],[118.1924,34.9895],[118.1924,34.9894],[118.1924,34.9892],[118.1924,34.9888],[118.1924,34.9882],[118.1923,34.9879],[118.1922,34.9878],[118.192,34.9876],[118.1918,34.9876],[118.1916,34.9875],[118.1916,34.9874],[118.1915,34.9866],[118.1914,34.9864],[118.1915,34.9862],[118.1915,34.9861],[118.1915,34.9861],[118.1915,34.9861],[118.1914,34.9861],[118.1914,34.986],[118.1913,34.986],[118.1912,34.986],[118.1911,34.986],[118.1911,34.986],[118.1911,34.986],[118.191,34.986],[118.191,34.986],[118.191,34.986],[118.191,34.986],[118.1909,34.986],[118.1909,34.986],[118.1909,34.986],[118.1908,34.986],[118.1908,34.986],[118.1907,34.9858],[118.1906,34.9854],[118.1904,34.9855],[118.1904,34.9855],[118.1904,34.9855],[118.1903,34.9854],[118.1911,34.9847],[118.1911,34.985],[118.1913,34.9849],[118.1915,34.9849],[118.1916,34.9849],[118.1915,34.9846],[118.1916,34.9846],[118.1917,34.9846],[118.1917,34.9846],[118.1916,34.9841],[118.1915,34.9841],[118.1914,34.9841],[118.1914,34.9842],[118.1913,34.9836],[118.1913,34.9834],[118.1913,34.9832],[118.1912,34.983],[118.1912,34.983],[118.1912,34.9829],[118.1912,34.9826],[118.1912,34.9826],[118.1912,34.9825],[118.1911,34.9823],[118.1908,34.9823],[118.1908,34.9823],[118.1903,34.9823],[118.1904,34.982],[118.1903,34.9816],[118.1903,34.9815],[118.1903,34.9815],[118.1903,34.9811],[118.1903,34.9802],[118.1903,34.9801],[118.1901,34.9801],[118.1897,34.98],[118.1895,34.9799],[118.1891,34.98],[118.1888,34.98],[118.1886,34.9801],[118.1882,34.9801],[118.1881,34.9801],[118.1878,34.9801],[118.1876,34.9802],[118.1872,34.9802],[118.1871,34.9802],[118.1869,34.9802],[118.1865,34.9802],[118.1863,34.9803],[118.186,34.9803],[118.1858,34.9803],[118.1857,34.9803],[118.1846,34.9804],[118.1845,34.9804],[118.184,34.9804],[118.1838,34.9805],[118.1837,34.9805],[118.1837,34.9806],[118.1837,34.9807],[118.1836,34.9816],[118.1835,34.9816],[118.1834,34.9816],[118.183,34.9816],[118.1828,34.9809],[118.1828,34.9807],[118.1828,34.9807],[118.1827,34.9807],[118.1823,34.9807],[118.1821,34.9807],[118.182,34.9807],[118.1818,34.9807],[118.1818,34.9807],[118.1817,34.9807],[118.1817,34.9807],[118.1817,34.9807],[118.1816,34.9807],[118.1815,34.9807],[118.1813,34.9806],[118.1812,34.9806],[118.1812,34.9806],[118.1812,34.9806],[118.1809,34.9805],[118.1809,34.9805],[118.1809,34.9805],[118.1807,34.9805],[118.1806,34.9805],[118.1805,34.9805],[118.1804,34.9805],[118.1803,34.9805],[118.1803,34.9803],[118.1803,34.9803],[118.1802,34.9802],[118.1802,34.9801],[118.1802,34.9801],[118.1801,34.9801],[118.18,34.98],[118.1799,34.98],[118.1798,34.98],[118.1796,34.98],[118.1793,34.98],[118.1792,34.98],[118.179,34.9801],[118.1789,34.9801],[118.1788,34.9801],[118.1788,34.9801],[118.1786,34.9801],[118.1784,34.9801],[118.1783,34.9801],[118.1782,34.9801],[118.1781,34.9802],[118.178,34.9802],[118.1778,34.9802],[118.1777,34.9802],[118.1775,34.9803],[118.1773,34.9803],[118.1771,34.9803],[118.1769,34.9803],[118.1767,34.9803],[118.1766,34.9803],[118.1765,34.9804],[118.1765,34.9805],[118.1765,34.9805],[118.1765,34.9807],[118.1765,34.9807],[118.1765,34.9807],[118.1765,34.981],[118.1763,34.981],[118.1764,34.9812],[118.1764,34.9813],[118.1764,34.9814],[118.1764,34.9815],[118.1764,34.9815],[118.1764,34.9815],[118.1763,34.9815],[118.1762,34.9815],[118.1761,34.9815],[118.1761,34.9813],[118.1761,34.9811],[118.1756,34.9811],[118.1752,34.9811],[118.1752,34.9812],[118.1752,34.9813],[118.1752,34.9813],[118.175,34.9813],[118.1747,34.9813],[118.1747,34.9813],[118.1746,34.9813],[118.1744,34.9813],[118.1743,34.9813],[118.1743,34.9812],[118.1743,34.9812],[118.1743,34.9812],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9811],[118.1743,34.9809],[118.1742,34.9806],[118.1742,34.9806],[118.1742,34.9805],[118.1742,34.9805],[118.174,34.9805],[118.1738,34.9805],[118.1738,34.9805],[118.1738,34.9805],[118.1738,34.9806],[118.1738,34.9807],[118.1738,34.9807],[118.1738,34.9809],[118.1738,34.981],[118.1738,34.981],[118.1738,34.9811],[118.1739,34.9811],[118.1739,34.9811],[118.1739,34.9812],[118.1739,34.9812],[118.1739,34.9813],[118.1739,34.9814],[118.1739,34.9817],[118.1739,34.982],[118.1738,34.9822],[118.1738,34.9823],[118.1738,34.9824],[118.1738,34.9824],[118.1738,34.9824],[118.1738,34.9824],[118.174,34.9826],[118.1741,34.9826],[118.1742,34.9827],[118.1742,34.9827],[118.1742,34.9827],[118.1743,34.9828],[118.1744,34.9829],[118.1744,34.9829],[118.1744,34.9829],[118.1744,34.9832],[118.1744,34.9833],[118.1744,34.9833],[118.1744,34.9833],[118.1744,34.9835],[118.1744,34.9836],[118.1743,34.9836],[118.1743,34.9836],[118.1742,34.9836],[118.1741,34.9836],[118.1741,34.9835],[118.1741,34.9834],[118.1741,34.9833],[118.1741,34.9832],[118.1742,34.9831],[118.1739,34.983],[118.1737,34.9828],[118.1734,34.9827],[118.1734,34.9827],[118.1732,34.9826],[118.1732,34.9826],[118.1732,34.9826],[118.1731,34.9825],[118.1728,34.9824],[118.1727,34.9823],[118.1727,34.9822],[118.1727,34.9821],[118.1726,34.9821],[118.1725,34.982],[118.1724,34.9819],[118.1723,34.9818],[118.1722,34.9818],[118.1721,34.9817],[118.1721,34.9817],[118.172,34.9817],[118.1719,34.9817],[118.1718,34.9817],[118.1717,34.9817],[118.1716,34.9817],[118.1715,34.9817],[118.1715,34.9817],[118.1715,34.9819],[118.1715,34.9819],[118.1714,34.9819],[118.1714,34.9819],[118.1713,34.9819],[118.1713,34.982],[118.1713,34.982],[118.1714,34.982],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9821],[118.1715,34.9822],[118.1715,34.9823],[118.1715,34.9823],[118.1716,34.9824],[118.1716,34.9827],[118.1716,34.9827],[118.1716,34.9827],[118.1717,34.9827],[118.1717,34.9828],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.9829],[118.1717,34.983],[118.1717,34.9831],[118.1718,34.9831],[118.1717,34.9832],[118.1717,34.9832],[118.1717,34.9833],[118.1716,34.9833],[118.1716,34.9833],[118.1715,34.9832],[118.1715,34.9831],[118.1715,34.983],[118.1715,34.983],[118.1715,34.983],[118.1713,34.983],[118.1713,34.9831],[118.1713,34.9832],[118.1713,34.9832],[118.1713,34.9832],[118.1711,34.9832],[118.1711,34.9832],[118.1711,34.9831],[118.1711,34.983],[118.171,34.9829],[118.171,34.9828],[118.171,34.9827],[118.1709,34.9826],[118.1709,34.9824],[118.1709,34.9824],[118.1705,34.9825],[118.1704,34.9822],[118.1703,34.982],[118.1703,34.982],[118.1703,34.982],[118.1703,34.982],[118.1702,34.982],[118.1701,34.982],[118.17,34.9821],[118.17,34.9821],[118.17,34.9824],[118.17,34.9825],[118.17,34.9826],[118.1699,34.9827],[118.1698,34.9828],[118.1698,34.9829],[118.1698,34.9829],[118.1698,34.9829],[118.1697,34.9829],[118.1699,34.983],[118.1699,34.983],[118.1701,34.9831],[118.1701,34.9831],[118.1701,34.9831],[118.1701,34.9831],[118.1702,34.9831],[118.1702,34.9831],[118.1702,34.9831],[118.1702,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9832],[118.1703,34.9833],[118.1703,34.9835],[118.1704,34.9837],[118.1704,34.9839],[118.1704,34.984],[118.1704,34.984],[118.1705,34.984],[118.1705,34.984],[118.1705,34.984],[118.1706,34.984],[118.1706,34.984],[118.1707,34.984],[118.1707,34.9839],[118.1707,34.9839],[118.1706,34.9838],[118.1706,34.9837],[118.1706,34.9837],[118.1706,34.9836],[118.1706,34.9835],[118.1706,34.9835],[118.1706,34.9834],[118.1707,34.9835],[118.1708,34.9835],[118.171,34.9836],[118.1711,34.9837],[118.1713,34.9838],[118.1714,34.9839],[118.1715,34.984],[118.1715,34.984],[118.1716,34.984],[118.1716,34.984],[118.1716,34.984],[118.1715,34.9841],[118.1714,34.9842],[118.1713,34.9841],[118.1711,34.984],[118.171,34.9839],[118.1709,34.9839],[118.1709,34.9839],[118.1709,34.9839],[118.1708,34.9839],[118.1708,34.9839],[118.1708,34.984],[118.1709,34.9842],[118.1709,34.9843],[118.1709,34.9844],[118.171,34.9846],[118.171,34.9847],[118.1711,34.9848],[118.1711,34.9849],[118.1711,34.985],[118.1711,34.985],[118.1709,34.985],[118.1709,34.985],[118.1709,34.985],[118.1708,34.985],[118.1708,34.985],[118.1708,34.985],[118.1709,34.9851],[118.1708,34.9851],[118.1708,34.9851],[118.1706,34.9851],[118.1704,34.9852],[118.1704,34.9852],[118.1704,34.9852],[118.1704,34.9853],[118.1704,34.9856],[118.1704,34.9858],[118.1704,34.9859],[118.1705,34.986],[118.1705,34.986],[118.1705,34.986],[118.1705,34.9861],[118.1705,34.9865],[118.1705,34.9865],[118.1705,34.9866],[118.1705,34.987],[118.1706,34.9871],[118.1706,34.9873],[118.1706,34.9873],[118.1706,34.9873],[118.1707,34.9876],[118.1709,34.9877],[118.1711,34.9877],[118.1712,34.9878],[118.1713,34.9878],[118.1713,34.9878],[118.1714,34.9879],[118.1716,34.9879],[118.1719,34.9879],[118.172,34.9879],[118.1719,34.9869],[118.1723,34.9868],[118.1724,34.9868],[118.1724,34.9868],[118.1725,34.9872],[118.1725,34.9875],[118.1725,34.9879],[118.1725,34.9879],[118.1723,34.9879],[118.1724,34.9883],[118.1725,34.9887],[118.1725,34.9893],[118.1725,34.9893],[118.1728,34.9893],[118.1727,34.9879],[118.1727,34.9879],[118.1728,34.9879],[118.1729,34.9879],[118.173,34.9879],[118.1731,34.9879],[118.1734,34.9879],[118.1735,34.9879],[118.1735,34.9879],[118.1736,34.9879],[118.1737,34.9879],[118.1737,34.9879],[118.1738,34.9879],[118.1739,34.9879],[118.174,34.9879],[118.1741,34.9879],[118.1741,34.9883],[118.1741,34.9884],[118.1741,34.9886],[118.1741,34.9888],[118.1742,34.9891],[118.1742,34.9892],[118.1742,34.9892],[118.1742,34.9896],[118.1747,34.9894],[118.1748,34.9894],[118.1749,34.9894],[118.1748,34.9892],[118.1748,34.9892],[118.1748,34.9892],[118.1748,34.9892],[118.1748,34.989],[118.1748,34.9889],[118.1749,34.9888],[118.1749,34.9887],[118.1749,34.9887],[118.1749,34.9886],[118.1749,34.9884],[118.1749,34.9883],[118.1751,34.9883],[118.1751,34.9883],[118.1752,34.9883],[118.1752,34.9883],[118.1752,34.9883],[118.1752,34.9882],[118.1752,34.9882],[118.1752,34.9881],[118.1752,34.988],[118.1752,34.9879],[118.1757,34.9879],[118.1765,34.9879],[118.1765,34.9879],[118.1765,34.9879],[118.1766,34.9883],[118.1767,34.9883],[118.1767,34.9883],[118.1767,34.9883],[118.1767,34.9883],[118.1768,34.9883],[118.1768,34.9883],[118.1768,34.9883],[118.1768,34.9883],[118.1769,34.9882],[118.1769,34.988],[118.1769,34.9878],[118.1769,34.9873],[118.1769,34.987],[118.177,34.9871],[118.1772,34.9871],[118.1774,34.9872],[118.1779,34.9876],[118.1781,34.9877],[118.1782,34.9878],[118.1782,34.9878],[118.1782,34.9886],[118.1782,34.9886],[118.1781,34.9886],[118.1781,34.9886],[118.1781,34.9886],[118.178,34.9886],[118.1779,34.9885],[118.1778,34.9885],[118.1776,34.9884],[118.1775,34.9884],[118.1774,34.9884],[118.1774,34.9884],[118.1774,34.9885],[118.1774,34.9885],[118.1773,34.9885],[118.1773,34.9886],[118.1774,34.9886],[118.1774,34.9887],[118.1775,34.9888],[118.1775,34.9888],[118.1776,34.9889],[118.1776,34.9889],[118.1774,34.9889],[118.1772,34.989],[118.177,34.989],[118.177,34.989],[118.177,34.989],[118.1771,34.9893],[118.1771,34.9894],[118.1772,34.9895],[118.1773,34.9897],[118.1773,34.9898],[118.1776,34.9902],[118.1776,34.9902],[118.1778,34.9904],[118.178,34.9907],[118.178,34.9907],[118.1781,34.9909],[118.1782,34.991],[118.1783,34.9911],[118.1783,34.9912],[118.1784,34.9913],[118.1785,34.9913],[118.1787,34.9913],[118.1788,34.9913],[118.1788,34.9913],[118.1789,34.9913],[118.1789,34.9918],[118.1789,34.9918],[118.1789,34.9919],[118.1789,34.9919],[118.1792,34.9919],[118.179,34.993],[118.1792,34.993],[118.1795,34.992],[118.1799,34.992],[118.1797,34.9929],[118.1798,34.9929],[118.1798,34.9929],[118.1798,34.9928],[118.1799,34.9926],[118.18,34.9923],[118.1802,34.9921],[118.1804,34.9917],[118.1804,34.9916],[118.1805,34.9914],[118.1806,34.9914],[118.1806,34.9913],[118.1806,34.9913],[118.1807,34.9912],[118.1807,34.9911],[118.1807,34.9911],[118.1808,34.991],[118.1811,34.991],[118.181,34.9911],[118.181,34.9917],[118.181,34.9924],[118.181,34.9931],[118.1811,34.9931],[118.1811,34.9931],[118.1811,34.9929],[118.1811,34.9929],[118.1811,34.9929],[118.1811,34.9925],[118.1811,34.9925],[118.1811,34.9917],[118.1812,34.991],[118.1817,34.9911],[118.1818,34.9911],[118.182,34.9911],[118.1822,34.9911],[118.1822,34.9911],[118.1824,34.9912],[118.1825,34.9912],[118.1825,34.9912],[118.1824,34.9917],[118.1824,34.9922],[118.1824,34.9923],[118.1825,34.9923],[118.1825,34.9923],[118.1829,34.9924],[118.183,34.9924],[118.1831,34.9923],[118.1831,34.9923],[118.1832,34.9923],[118.1833,34.9922],[118.1834,34.9922],[118.1835,34.9922],[118.1838,34.9922],[118.184,34.9922]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006023","XZQMC":"南石埠子村","KZMJ":1794880.96,"JSMJ":1794880.94,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1697,34.9799,118.1939,34.9931]}},{"type":"Feature","id":"cunjie_4326.39","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1903,34.9801],[118.1907,34.9802],[118.1911,34.9803],[118.1911,34.9803],[118.1916,34.9804],[118.1919,34.9804],[118.1922,34.9805],[118.1925,34.9806],[118.1927,34.9806],[118.1929,34.9806],[118.193,34.9806],[118.1929,34.9796],[118.1929,34.9795],[118.1928,34.9792],[118.1927,34.9781],[118.1927,34.9779],[118.1929,34.9779],[118.193,34.9778],[118.1931,34.9778],[118.1934,34.9778],[118.1938,34.9778],[118.1937,34.9769],[118.1936,34.9766],[118.1936,34.9765],[118.1939,34.9766],[118.194,34.9766],[118.194,34.9766],[118.194,34.9766],[118.1942,34.9765],[118.1942,34.9764],[118.1943,34.9764],[118.1947,34.9765],[118.1946,34.9762],[118.1945,34.9758],[118.1945,34.9757],[118.1945,34.9756],[118.1943,34.9751],[118.1943,34.975],[118.1942,34.9746],[118.1942,34.9745],[118.1941,34.9742],[118.1941,34.974],[118.194,34.9739],[118.194,34.9738],[118.194,34.9738],[118.194,34.9737],[118.194,34.9736],[118.1939,34.9733],[118.1938,34.9732],[118.1938,34.9732],[118.1938,34.9732],[118.1938,34.9731],[118.1938,34.9729],[118.1937,34.9728],[118.1937,34.9727],[118.1937,34.9727],[118.1937,34.9726],[118.1936,34.9726],[118.1935,34.9725],[118.1934,34.9725],[118.1933,34.9724],[118.1933,34.9724],[118.1932,34.9723],[118.1932,34.9722],[118.1931,34.972],[118.193,34.9715],[118.193,34.9714],[118.1929,34.9714],[118.1929,34.9712],[118.1928,34.9709],[118.1928,34.9708],[118.1925,34.9697],[118.1924,34.9693],[118.1923,34.9688],[118.1922,34.9687],[118.1921,34.9687],[118.1921,34.9685],[118.192,34.9682],[118.1919,34.9673],[118.1919,34.9672],[118.1919,34.9667],[118.1919,34.9665],[118.1919,34.9662],[118.1919,34.9661],[118.192,34.966],[118.192,34.966],[118.192,34.9658],[118.1921,34.9656],[118.1922,34.9655],[118.1923,34.9653],[118.1925,34.965],[118.1927,34.9647],[118.1928,34.9643],[118.1929,34.964],[118.193,34.9632],[118.193,34.9631],[118.193,34.9631],[118.1932,34.9625],[118.1941,34.9624],[118.1946,34.9624],[118.1962,34.9623],[118.1964,34.9622],[118.1965,34.9622],[118.1967,34.9622],[118.1967,34.9622],[118.1966,34.9617],[118.1966,34.9617],[118.1966,34.9614],[118.1966,34.9614],[118.1966,34.9614],[118.1966,34.9612],[118.196,34.9613],[118.1956,34.9613],[118.1939,34.9614],[118.1939,34.9614],[118.1939,34.9611],[118.1939,34.9611],[118.1937,34.9602],[118.1937,34.9602],[118.1937,34.9601],[118.1937,34.96],[118.1937,34.9599],[118.1937,34.9599],[118.1937,34.9599],[118.1936,34.9598],[118.1936,34.9597],[118.1936,34.9597],[118.1935,34.9597],[118.193,34.9598],[118.193,34.9598],[118.1929,34.9598],[118.1922,34.9598],[118.192,34.9598],[118.192,34.9599],[118.1919,34.9599],[118.1918,34.9599],[118.1913,34.9599],[118.1906,34.96],[118.1905,34.96],[118.1904,34.96],[118.1904,34.96],[118.1903,34.96],[118.1897,34.96],[118.1897,34.96],[118.1897,34.96],[118.1894,34.96],[118.1891,34.9601],[118.1888,34.9601],[118.1888,34.9601],[118.1887,34.9601],[118.1881,34.9601],[118.188,34.9601],[118.1878,34.9602],[118.1879,34.9601],[118.1878,34.9601],[118.1878,34.9601],[118.1878,34.9601],[118.1877,34.9601],[118.1877,34.9601],[118.1876,34.9601],[118.1875,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1874,34.9602],[118.1872,34.9602],[118.1871,34.9602],[118.187,34.9602],[118.187,34.9602],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9603],[118.187,34.9604],[118.187,34.9604],[118.1871,34.9606],[118.1871,34.9606],[118.1871,34.9606],[118.1871,34.9606],[118.1874,34.9629],[118.1874,34.963],[118.1873,34.963],[118.1857,34.9631],[118.1857,34.9631],[118.1857,34.9631],[118.1857,34.9631],[118.1849,34.9632],[118.1849,34.9632],[118.1843,34.9633],[118.1843,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1841,34.9633],[118.1842,34.9642],[118.1842,34.9642],[118.1841,34.9642],[118.1839,34.9642],[118.1832,34.9643],[118.1824,34.9644],[118.1824,34.9644],[118.1824,34.9644],[118.1824,34.9644],[118.1823,34.9644],[118.1823,34.9644],[118.1821,34.9645],[118.1819,34.9645],[118.1818,34.9645],[118.1815,34.9645],[118.1815,34.9643],[118.1815,34.9641],[118.1815,34.9641],[118.1815,34.964],[118.1812,34.9641],[118.1812,34.9641],[118.1811,34.9641],[118.1811,34.9639],[118.181,34.9639],[118.1808,34.964],[118.1807,34.964],[118.1798,34.9645],[118.1795,34.9646],[118.1798,34.9645],[118.1809,34.9643],[118.1811,34.9642],[118.1811,34.9642],[118.1811,34.9642],[118.1811,34.9643],[118.1811,34.9643],[118.1811,34.9643],[118.1811,34.9644],[118.1812,34.9646],[118.1812,34.9647],[118.1812,34.9648],[118.1812,34.9651],[118.1812,34.9654],[118.1813,34.9656],[118.1813,34.9658],[118.1813,34.9659],[118.1813,34.9662],[118.1814,34.9665],[118.1814,34.9667],[118.1814,34.9668],[118.1814,34.9669],[118.1814,34.9669],[118.1814,34.9669],[118.1814,34.9674],[118.1814,34.9674],[118.1798,34.9676],[118.1797,34.9676],[118.1788,34.9677],[118.1786,34.9677],[118.1786,34.9677],[118.1784,34.9678],[118.1771,34.9679],[118.1765,34.968],[118.1763,34.968],[118.1756,34.9681],[118.1756,34.9681],[118.1756,34.9681],[118.1756,34.9681],[118.1757,34.9684],[118.1757,34.9687],[118.1757,34.9688],[118.1757,34.9688],[118.1757,34.9688],[118.1757,34.9689],[118.1758,34.969],[118.1758,34.969],[118.1758,34.969],[118.1758,34.969],[118.1758,34.9691],[118.1758,34.9692],[118.1758,34.9692],[118.1758,34.9692],[118.1758,34.9693],[118.1758,34.9694],[118.1758,34.9695],[118.1758,34.9695],[118.1759,34.9698],[118.1759,34.9699],[118.1759,34.97],[118.1759,34.97],[118.1759,34.9701],[118.176,34.9701],[118.176,34.9703],[118.176,34.9703],[118.176,34.9703],[118.176,34.9705],[118.176,34.9705],[118.176,34.9705],[118.1761,34.9709],[118.1761,34.971],[118.1761,34.9711],[118.1761,34.9712],[118.1761,34.9713],[118.1761,34.9713],[118.1761,34.9713],[118.1761,34.9716],[118.1761,34.9716],[118.1762,34.9716],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9717],[118.1762,34.9721],[118.1762,34.9721],[118.1762,34.9721],[118.176,34.9721],[118.175,34.9722],[118.1751,34.9723],[118.1751,34.9724],[118.1752,34.9724],[118.1752,34.9725],[118.1753,34.9726],[118.1753,34.9726],[118.1753,34.9726],[118.1753,34.9728],[118.1753,34.9728],[118.1753,34.9728],[118.1753,34.9729],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.973],[118.1753,34.9729],[118.1752,34.9728],[118.1752,34.9728],[118.1752,34.9728],[118.1751,34.9727],[118.1749,34.9724],[118.1747,34.9721],[118.1747,34.9721],[118.1747,34.9721],[118.1747,34.972],[118.1746,34.9719],[118.1746,34.9719],[118.1745,34.9718],[118.1744,34.9716],[118.1743,34.9715],[118.1742,34.9714],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.1741,34.9715],[118.174,34.9716],[118.174,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1741,34.9716],[118.1743,34.9718],[118.1743,34.9719],[118.1744,34.972],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9721],[118.1744,34.9722],[118.1745,34.9723],[118.1746,34.9724],[118.1748,34.9729],[118.1748,34.9729],[118.1748,34.9729],[118.1748,34.9729],[118.1745,34.9729],[118.1745,34.9729],[118.1745,34.9729],[118.1744,34.9729],[118.1743,34.9729],[118.1742,34.973],[118.1741,34.973],[118.1741,34.9728],[118.1741,34.9727],[118.1741,34.9725],[118.1741,34.9725],[118.1741,34.9724],[118.1741,34.9724],[118.174,34.9724],[118.174,34.9723],[118.174,34.9723],[118.174,34.9723],[118.174,34.9722],[118.1739,34.9722],[118.1739,34.9721],[118.1739,34.9721],[118.1739,34.9721],[118.1739,34.9721],[118.1738,34.9722],[118.1737,34.9722],[118.1736,34.9723],[118.1736,34.9723],[118.1736,34.9724],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9725],[118.1735,34.9726],[118.1735,34.9726],[118.1735,34.9727],[118.1736,34.9727],[118.1736,34.9728],[118.1736,34.9731],[118.1736,34.9731],[118.1736,34.9731],[118.1736,34.9732],[118.1737,34.9733],[118.1737,34.9734],[118.1737,34.9734],[118.1737,34.9734],[118.1738,34.9734],[118.1738,34.9734],[118.1739,34.9734],[118.174,34.9734],[118.1742,34.9734],[118.1742,34.9734],[118.1742,34.9734],[118.1743,34.9733],[118.1744,34.9733],[118.1744,34.9734],[118.1744,34.9735],[118.1744,34.9735],[118.1744,34.9735],[118.1744,34.974],[118.1744,34.9741],[118.1744,34.9742],[118.1743,34.9744],[118.1742,34.9745],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1742,34.9746],[118.1743,34.9749],[118.1743,34.975],[118.1743,34.975],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9751],[118.1743,34.9752],[118.1743,34.9752],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1743,34.9753],[118.1742,34.9754],[118.1742,34.9754],[118.1742,34.9754],[118.1742,34.9756],[118.1741,34.9759],[118.1741,34.9763],[118.174,34.9767],[118.1736,34.9767],[118.1736,34.977],[118.1736,34.9773],[118.1736,34.9775],[118.1737,34.9777],[118.1738,34.9782],[118.1738,34.9782],[118.1735,34.9783],[118.1735,34.9783],[118.1735,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1734,34.9783],[118.1735,34.9785],[118.1735,34.9786],[118.1736,34.9787],[118.1737,34.9788],[118.1737,34.9789],[118.1739,34.9792],[118.1739,34.9792],[118.174,34.9792],[118.174,34.9792],[118.174,34.9792],[118.174,34.9793],[118.1741,34.9793],[118.1743,34.9793],[118.1744,34.9793],[118.1745,34.9793],[118.1745,34.9793],[118.1745,34.9793],[118.1745,34.9794],[118.1745,34.9795],[118.1746,34.9797],[118.1746,34.9798],[118.1747,34.98],[118.1747,34.9802],[118.1748,34.9804],[118.1748,34.9804],[118.175,34.9804],[118.175,34.9804],[118.1751,34.9804],[118.1751,34.9805],[118.1752,34.9809],[118.1752,34.981],[118.1752,34.9811],[118.1752,34.9811],[118.1756,34.9811],[118.1761,34.9811],[118.1761,34.9813],[118.1761,34.9815],[118.1762,34.9815],[118.1763,34.9815],[118.1764,34.9815],[118.1764,34.9815],[118.1764,34.9815],[118.1764,34.9814],[118.1764,34.9813],[118.1764,34.9812],[118.1763,34.981],[118.1765,34.981],[118.1765,34.9807],[118.1765,34.9807],[118.1765,34.9807],[118.1765,34.9805],[118.1765,34.9805],[118.1765,34.9804],[118.1766,34.9803],[118.1767,34.9803],[118.1769,34.9803],[118.1771,34.9803],[118.1773,34.9803],[118.1775,34.9803],[118.1777,34.9802],[118.1778,34.9802],[118.178,34.9802],[118.1781,34.9802],[118.1782,34.9801],[118.1783,34.9801],[118.1784,34.9801],[118.1786,34.9801],[118.1788,34.9801],[118.1788,34.9801],[118.1789,34.9801],[118.179,34.9801],[118.1792,34.98],[118.1793,34.98],[118.1796,34.98],[118.1798,34.98],[118.1799,34.98],[118.18,34.98],[118.1801,34.9801],[118.1802,34.9801],[118.1802,34.9801],[118.1802,34.9802],[118.1803,34.9803],[118.1803,34.9803],[118.1803,34.9805],[118.1804,34.9805],[118.1805,34.9805],[118.1806,34.9805],[118.1807,34.9805],[118.1809,34.9805],[118.1809,34.9805],[118.1809,34.9805],[118.1812,34.9806],[118.1812,34.9806],[118.1812,34.9806],[118.1813,34.9806],[118.1815,34.9807],[118.1816,34.9807],[118.1817,34.9807],[118.1817,34.9807],[118.1817,34.9807],[118.1818,34.9807],[118.1818,34.9807],[118.182,34.9807],[118.1821,34.9807],[118.1823,34.9807],[118.1827,34.9807],[118.1828,34.9807],[118.1828,34.9807],[118.1828,34.9809],[118.183,34.9816],[118.1834,34.9816],[118.1835,34.9816],[118.1836,34.9816],[118.1837,34.9807],[118.1837,34.9806],[118.1837,34.9805],[118.1838,34.9805],[118.184,34.9804],[118.1845,34.9804],[118.1846,34.9804],[118.1857,34.9803],[118.1858,34.9803],[118.186,34.9803],[118.1863,34.9803],[118.1865,34.9802],[118.1869,34.9802],[118.1871,34.9802],[118.1872,34.9802],[118.1876,34.9802],[118.1878,34.9801],[118.1881,34.9801],[118.1882,34.9801],[118.1886,34.9801],[118.1888,34.98],[118.1891,34.98],[118.1895,34.9799],[118.1897,34.98],[118.1901,34.9801],[118.1903,34.9801]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006028","XZQMC":"西大官庄村","KZMJ":3101502.54,"JSMJ":3101502.56,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1734,34.9597,118.1967,34.9816]}},{"type":"Feature","id":"cunjie_4326.40","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2072,35.0429],[118.207,35.0429],[118.2069,35.043],[118.2067,35.043],[118.2065,35.043],[118.2063,35.0429],[118.2062,35.0429],[118.2061,35.0429],[118.206,35.0428],[118.206,35.0422],[118.206,35.0417],[118.206,35.0411],[118.206,35.0411],[118.206,35.0411],[118.2059,35.0411],[118.2057,35.0411],[118.2057,35.041],[118.2057,35.041],[118.2054,35.041],[118.2054,35.0409],[118.2055,35.0407],[118.2052,35.0407],[118.2052,35.0403],[118.2052,35.0402],[118.2052,35.0402],[118.2052,35.04],[118.2052,35.04],[118.2052,35.0396],[118.2052,35.0395],[118.2052,35.0395],[118.2052,35.0394],[118.2052,35.0394],[118.2052,35.039],[118.2047,35.039],[118.2046,35.0389],[118.2046,35.0387],[118.2046,35.0384],[118.2046,35.0383],[118.2046,35.038],[118.2046,35.038],[118.2046,35.0378],[118.2046,35.0377],[118.2046,35.0377],[118.2046,35.0375],[118.2046,35.0375],[118.2047,35.0375],[118.2047,35.0375],[118.2051,35.0375],[118.205,35.037],[118.205,35.0362],[118.205,35.0362],[118.2049,35.0362],[118.2048,35.0362],[118.2048,35.0362],[118.2047,35.0362],[118.2046,35.0362],[118.2045,35.0362],[118.2044,35.0363],[118.2043,35.0363],[118.2042,35.0363],[118.2041,35.0363],[118.2041,35.0363],[118.2041,35.0363],[118.2041,35.0362],[118.2041,35.0362],[118.2041,35.0361],[118.204,35.0361],[118.204,35.0361],[118.204,35.036],[118.204,35.036],[118.204,35.036],[118.204,35.036],[118.204,35.0359],[118.204,35.0358],[118.204,35.0358],[118.2039,35.0357],[118.2039,35.0356],[118.2039,35.0356],[118.2039,35.0355],[118.204,35.0353],[118.204,35.0352],[118.204,35.0352],[118.2039,35.0351],[118.2039,35.035],[118.2038,35.035],[118.2038,35.0349],[118.2037,35.0349],[118.2036,35.0349],[118.2035,35.0348],[118.2035,35.0348],[118.2035,35.0348],[118.2035,35.0346],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0343],[118.2035,35.0342],[118.2035,35.0341],[118.2035,35.034],[118.2035,35.0339],[118.2035,35.0338],[118.2032,35.0338],[118.2031,35.0338],[118.2033,35.0337],[118.2039,35.0335],[118.2043,35.0335],[118.2044,35.0334],[118.2044,35.0333],[118.2044,35.033],[118.2039,35.0328],[118.2039,35.0327],[118.2039,35.0326],[118.2039,35.0322],[118.2039,35.0321],[118.2039,35.0321],[118.2039,35.0318],[118.2038,35.0314],[118.2038,35.0312],[118.2037,35.0312],[118.2035,35.0312],[118.2033,35.0312],[118.2032,35.0312],[118.2031,35.0312],[118.2032,35.0319],[118.2032,35.0321],[118.2032,35.0323],[118.2029,35.0323],[118.2029,35.0323],[118.2029,35.0323],[118.2029,35.032],[118.2028,35.0315],[118.2028,35.0314],[118.2028,35.0313],[118.2024,35.0313],[118.2023,35.0308],[118.2022,35.0301],[118.2021,35.0297],[118.2021,35.0297],[118.2021,35.0297],[118.2021,35.0295],[118.202,35.0294],[118.2016,35.0297],[118.2013,35.0298],[118.2013,35.0298],[118.2013,35.0299],[118.2012,35.03],[118.2011,35.0301],[118.201,35.0302],[118.201,35.0302],[118.2009,35.03],[118.2009,35.0296],[118.2009,35.0295],[118.2008,35.0294],[118.2008,35.0292],[118.2008,35.0292],[118.2008,35.0289],[118.2007,35.0285],[118.2007,35.0285],[118.2003,35.0285],[118.1999,35.0285],[118.1998,35.0285],[118.1996,35.0285],[118.1995,35.0285],[118.1992,35.0285],[118.1991,35.0285],[118.199,35.0285],[118.1989,35.0285],[118.1989,35.0285],[118.1988,35.0285],[118.1986,35.0284],[118.1985,35.0284],[118.1985,35.0284],[118.1984,35.0283],[118.1982,35.0282],[118.1981,35.0282],[118.1981,35.0282],[118.1981,35.0281],[118.1981,35.0276],[118.198,35.0273],[118.198,35.0272],[118.198,35.0269],[118.198,35.0269],[118.198,35.0263],[118.198,35.0261],[118.198,35.026],[118.198,35.026],[118.198,35.026],[118.1981,35.026],[118.1981,35.0257],[118.1981,35.0257],[118.1981,35.0256],[118.1982,35.0255],[118.1981,35.0255],[118.1981,35.0254],[118.1981,35.0253],[118.1981,35.0252],[118.1981,35.0251],[118.1981,35.0251],[118.1982,35.0251],[118.1981,35.025],[118.1981,35.0249],[118.1981,35.0249],[118.1981,35.0249],[118.1981,35.0248],[118.1981,35.0248],[118.1981,35.0246],[118.198,35.0244],[118.198,35.0244],[118.198,35.0243],[118.198,35.0241],[118.198,35.024],[118.197,35.0241],[118.196,35.0241],[118.1957,35.0241],[118.195,35.0241],[118.1949,35.0241],[118.1948,35.0241],[118.1948,35.0235],[118.1947,35.0235],[118.1944,35.0235],[118.1942,35.0235],[118.1939,35.0235],[118.1933,35.0236],[118.1927,35.0236],[118.1921,35.0236],[118.1917,35.0236],[118.1914,35.0237],[118.1911,35.0237],[118.1908,35.0237],[118.1903,35.0237],[118.1903,35.0237],[118.1903,35.0238],[118.1896,35.0238],[118.1894,35.0238],[118.1888,35.0238],[118.1885,35.0238],[118.1884,35.0238],[118.1884,35.0242],[118.1885,35.0242],[118.1885,35.0247],[118.1886,35.0253],[118.1886,35.0256],[118.1886,35.0256],[118.1888,35.0256],[118.1894,35.0256],[118.1894,35.0255],[118.1894,35.0256],[118.1894,35.0256],[118.1894,35.0258],[118.1893,35.0263],[118.1893,35.0263],[118.1891,35.0264],[118.1891,35.0265],[118.189,35.0268],[118.1892,35.0268],[118.1894,35.0269],[118.1896,35.0271],[118.1897,35.0272],[118.1896,35.0274],[118.1895,35.0274],[118.1895,35.0274],[118.1894,35.0276],[118.1894,35.0276],[118.1894,35.0277],[118.1895,35.0277],[118.1896,35.0277],[118.1898,35.0283],[118.1891,35.0284],[118.189,35.0284],[118.1888,35.0284],[118.1885,35.0285],[118.1885,35.0288],[118.1888,35.0288],[118.1889,35.0288],[118.189,35.0291],[118.1888,35.0291],[118.1886,35.0292],[118.1885,35.0292],[118.1885,35.0292],[118.1884,35.0293],[118.1884,35.0295],[118.1873,35.0296],[118.1866,35.0296],[118.1865,35.0297],[118.1865,35.0297],[118.1862,35.0299],[118.1859,35.0301],[118.1858,35.0301],[118.1856,35.0303],[118.1853,35.0304],[118.1852,35.0304],[118.185,35.0306],[118.185,35.0312],[118.185,35.0317],[118.1851,35.0318],[118.1853,35.0319],[118.1853,35.032],[118.1854,35.032],[118.1851,35.032],[118.185,35.0319],[118.1848,35.0318],[118.1846,35.0316],[118.1843,35.0313],[118.1842,35.0313],[118.1843,35.0313],[118.1844,35.0312],[118.1844,35.0311],[118.1844,35.0311],[118.1844,35.0311],[118.1844,35.0311],[118.1843,35.0311],[118.1843,35.031],[118.1843,35.031],[118.1843,35.031],[118.1843,35.031],[118.1843,35.0309],[118.1843,35.0309],[118.1843,35.0308],[118.1842,35.0308],[118.1842,35.0308],[118.1842,35.0308],[118.1842,35.0308],[118.1841,35.0308],[118.184,35.0308],[118.1839,35.0308],[118.1838,35.0308],[118.1838,35.0308],[118.1838,35.0308],[118.1838,35.0308],[118.1836,35.0308],[118.1828,35.031],[118.1825,35.031],[118.1819,35.0311],[118.182,35.0312],[118.182,35.0314],[118.1825,35.0314],[118.183,35.0313],[118.1838,35.0313],[118.1841,35.0312],[118.184,35.0316],[118.1826,35.0315],[118.1824,35.0315],[118.1822,35.0315],[118.1822,35.0315],[118.1822,35.0317],[118.1824,35.0317],[118.1827,35.0317],[118.183,35.0317],[118.1833,35.0317],[118.1834,35.0317],[118.1836,35.0317],[118.1836,35.0317],[118.1838,35.0317],[118.1843,35.0317],[118.1843,35.0317],[118.1843,35.0318],[118.1843,35.0318],[118.1843,35.0319],[118.1839,35.0318],[118.1839,35.0318],[118.1837,35.0318],[118.1835,35.0318],[118.1825,35.0318],[118.1825,35.0318],[118.1825,35.0318],[118.1822,35.0318],[118.1822,35.0318],[118.1821,35.0318],[118.1819,35.0318],[118.1817,35.0318],[118.1817,35.032],[118.182,35.032],[118.1822,35.032],[118.1823,35.032],[118.1824,35.032],[118.1825,35.032],[118.1825,35.032],[118.1831,35.032],[118.1836,35.0319],[118.1838,35.0319],[118.184,35.0319],[118.1841,35.0319],[118.1843,35.0319],[118.1843,35.032],[118.1842,35.032],[118.1842,35.032],[118.1827,35.0321],[118.1828,35.0324],[118.1844,35.0324],[118.1844,35.0326],[118.1828,35.0326],[118.1828,35.0327],[118.1826,35.0327],[118.1823,35.0327],[118.1818,35.0328],[118.1817,35.033],[118.1825,35.033],[118.1827,35.033],[118.1828,35.033],[118.184,35.033],[118.1845,35.033],[118.1845,35.0328],[118.185,35.0328],[118.185,35.0331],[118.185,35.0333],[118.1853,35.0332],[118.1854,35.0333],[118.1853,35.0336],[118.1852,35.0337],[118.1851,35.0337],[118.1849,35.0337],[118.1849,35.0336],[118.1848,35.0336],[118.1841,35.0336],[118.1832,35.0336],[118.1832,35.0337],[118.1832,35.0338],[118.1832,35.034],[118.1832,35.0341],[118.1836,35.034],[118.1838,35.034],[118.1839,35.034],[118.1841,35.034],[118.1842,35.0341],[118.1843,35.0341],[118.1844,35.0343],[118.1844,35.0343],[118.1845,35.0345],[118.1844,35.0345],[118.1843,35.0345],[118.1839,35.0345],[118.1836,35.0345],[118.1834,35.0345],[118.1832,35.0345],[118.1832,35.0345],[118.1828,35.0346],[118.1827,35.0346],[118.1827,35.0346],[118.1826,35.0347],[118.1826,35.0348],[118.1825,35.0349],[118.1825,35.0349],[118.1823,35.035],[118.1821,35.035],[118.182,35.035],[118.1819,35.035],[118.1818,35.035],[118.1818,35.035],[118.1815,35.0351],[118.1814,35.0351],[118.1811,35.0352],[118.1807,35.0352],[118.1805,35.0352],[118.1805,35.0352],[118.1803,35.0353],[118.1803,35.0353],[118.1802,35.0353],[118.1799,35.0353],[118.1797,35.0354],[118.1794,35.0354],[118.1792,35.0354],[118.1791,35.0355],[118.179,35.0355],[118.179,35.0356],[118.179,35.0357],[118.179,35.0359],[118.1789,35.0361],[118.1788,35.0363],[118.1786,35.0366],[118.1785,35.0368],[118.1782,35.0368],[118.178,35.0368],[118.1778,35.0371],[118.1776,35.0374],[118.1774,35.0373],[118.1777,35.0368],[118.1777,35.0368],[118.1777,35.0368],[118.1777,35.0367],[118.1778,35.0365],[118.1778,35.0364],[118.178,35.0359],[118.1782,35.0356],[118.178,35.0356],[118.1778,35.0357],[118.1775,35.0357],[118.1774,35.0357],[118.1773,35.0358],[118.1771,35.0358],[118.1769,35.0358],[118.1769,35.0358],[118.1769,35.0359],[118.1768,35.036],[118.1768,35.0361],[118.1772,35.0361],[118.1769,35.0366],[118.1769,35.0367],[118.1763,35.0366],[118.1761,35.0366],[118.1761,35.0366],[118.1761,35.0367],[118.1761,35.0367],[118.1761,35.0368],[118.176,35.0368],[118.176,35.0369],[118.176,35.037],[118.176,35.0372],[118.176,35.0373],[118.176,35.0375],[118.176,35.0376],[118.176,35.0377],[118.176,35.0378],[118.176,35.0379],[118.176,35.038],[118.176,35.038],[118.176,35.0381],[118.1759,35.0382],[118.1762,35.0378],[118.1764,35.0376],[118.1766,35.0376],[118.1765,35.0377],[118.1764,35.0379],[118.1764,35.038],[118.1763,35.0382],[118.1763,35.0382],[118.1762,35.0384],[118.1761,35.0385],[118.176,35.0388],[118.176,35.0389],[118.1761,35.0389],[118.1761,35.0391],[118.176,35.0399],[118.1757,35.0398],[118.1755,35.0398],[118.1755,35.0399],[118.1753,35.0399],[118.1753,35.0397],[118.1753,35.0397],[118.1753,35.0395],[118.1753,35.0394],[118.1752,35.0393],[118.1751,35.0402],[118.1748,35.0402],[118.1748,35.0405],[118.1753,35.0406],[118.1752,35.0409],[118.1749,35.0408],[118.1748,35.0408],[118.1739,35.0407],[118.1739,35.0408],[118.1738,35.0409],[118.1738,35.041],[118.1737,35.041],[118.1737,35.041],[118.1731,35.0413],[118.1728,35.0415],[118.1728,35.0415],[118.1728,35.0417],[118.1727,35.042],[118.1727,35.0426],[118.1727,35.043],[118.1728,35.043],[118.1731,35.0431],[118.1741,35.0431],[118.1741,35.0431],[118.1742,35.0432],[118.1742,35.0432],[118.1752,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1754,35.0432],[118.1762,35.0432],[118.1761,35.0434],[118.1761,35.0434],[118.1761,35.0436],[118.1758,35.0445],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1758,35.0446],[118.1757,35.0446],[118.1756,35.0446],[118.1756,35.0446],[118.1756,35.0446],[118.1755,35.0457],[118.1755,35.0457],[118.1754,35.046],[118.1754,35.0463],[118.1754,35.0467],[118.1754,35.0467],[118.1754,35.0467],[118.1759,35.0467],[118.1759,35.0467],[118.176,35.0467],[118.1762,35.0467],[118.1764,35.0467],[118.1765,35.0467],[118.1771,35.0468],[118.1776,35.0468],[118.1776,35.0468],[118.1776,35.0468],[118.1777,35.0468],[118.1778,35.0468],[118.178,35.0468],[118.1781,35.0469],[118.1781,35.0469],[118.1781,35.0468],[118.1781,35.0465],[118.1781,35.0465],[118.1784,35.0466],[118.1784,35.0466],[118.1784,35.0466],[118.1785,35.0462],[118.1786,35.0461],[118.1786,35.046],[118.1791,35.0461],[118.18,35.0462],[118.1801,35.0462],[118.1802,35.0462],[118.1802,35.0462],[118.1802,35.0462],[118.1807,35.0463],[118.1808,35.0461],[118.1809,35.0461],[118.1809,35.0461],[118.1809,35.0462],[118.181,35.0462],[118.1811,35.0463],[118.1811,35.0463],[118.1812,35.0464],[118.1813,35.0464],[118.1813,35.0464],[118.1814,35.0464],[118.1815,35.0464],[118.1815,35.0463],[118.1817,35.0462],[118.1817,35.0462],[118.1817,35.0462],[118.1817,35.0462],[118.1817,35.0463],[118.1817,35.0468],[118.1817,35.047],[118.1817,35.0471],[118.1817,35.0474],[118.1817,35.0477],[118.1817,35.0477],[118.1817,35.0481],[118.1817,35.0485],[118.1817,35.0485],[118.1817,35.0487],[118.1817,35.0488],[118.1817,35.0491],[118.1817,35.0492],[118.1817,35.0492],[118.1818,35.0494],[118.1818,35.0499],[118.1818,35.0499],[118.1818,35.0499],[118.1818,35.0499],[118.1818,35.0503],[118.1818,35.0504],[118.1818,35.0505],[118.1818,35.0505],[118.1818,35.0505],[118.1818,35.0505],[118.1821,35.0505],[118.1823,35.0505],[118.1823,35.0505],[118.1823,35.0505],[118.1823,35.0505],[118.1825,35.0504],[118.1825,35.0504],[118.1825,35.0504],[118.1828,35.0502],[118.1829,35.05],[118.183,35.05],[118.183,35.0499],[118.1831,35.0499],[118.1835,35.0496],[118.1837,35.0494],[118.1838,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.1839,35.0494],[118.184,35.0496],[118.1841,35.05],[118.1842,35.0504],[118.1842,35.0504],[118.1843,35.0505],[118.1843,35.0508],[118.1844,35.0512],[118.1851,35.0512],[118.1855,35.0512],[118.1857,35.0512],[118.1858,35.0512],[118.1859,35.0512],[118.186,35.0512],[118.186,35.0512],[118.186,35.0512],[118.1861,35.0512],[118.1861,35.0512],[118.1861,35.0512],[118.186,35.0515],[118.1861,35.0517],[118.1861,35.0517],[118.1861,35.0517],[118.1861,35.0517],[118.1862,35.0517],[118.1864,35.0517],[118.1864,35.0517],[118.1864,35.0517],[118.1866,35.0517],[118.1866,35.0517],[118.1867,35.0518],[118.1867,35.0518],[118.1867,35.0518],[118.1867,35.0518],[118.1867,35.0518],[118.1867,35.0518],[118.1868,35.0518],[118.1868,35.0525],[118.1868,35.0526],[118.1868,35.0526],[118.1868,35.0526],[118.1868,35.0526],[118.1868,35.0526],[118.1868,35.0526],[118.1869,35.0526],[118.1869,35.0526],[118.1875,35.0527],[118.1875,35.0527],[118.1875,35.0527],[118.1877,35.0527],[118.1877,35.0527],[118.1882,35.0527],[118.1884,35.0527],[118.1886,35.0527],[118.1886,35.0527],[118.1886,35.0527],[118.1886,35.0527],[118.1886,35.0526],[118.1886,35.0526],[118.1886,35.0526],[118.1886,35.0525],[118.1886,35.0525],[118.1886,35.0525],[118.1886,35.0524],[118.1886,35.0524],[118.1886,35.0524],[118.1887,35.0524],[118.1887,35.0524],[118.1887,35.0524],[118.1888,35.0524],[118.1888,35.0524],[118.1888,35.0524],[118.1888,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1889,35.0524],[118.1892,35.0524],[118.1892,35.0521],[118.1892,35.052],[118.1893,35.0519],[118.1893,35.0519],[118.1893,35.0519],[118.1893,35.0519],[118.1893,35.0516],[118.1893,35.0516],[118.1893,35.0513],[118.1893,35.0512],[118.1893,35.0511],[118.1893,35.0511],[118.1894,35.051],[118.1894,35.051],[118.1894,35.051],[118.1894,35.0508],[118.1894,35.0507],[118.1894,35.0507],[118.1894,35.0506],[118.1894,35.0505],[118.1894,35.0505],[118.1895,35.0505],[118.1895,35.0505],[118.1896,35.0505],[118.1896,35.0505],[118.1897,35.0505],[118.1897,35.0505],[118.1898,35.0505],[118.1898,35.0505],[118.1899,35.0505],[118.1899,35.0505],[118.1903,35.0505],[118.1903,35.0505],[118.1903,35.0505],[118.1903,35.0503],[118.1903,35.0503],[118.1905,35.0503],[118.1905,35.0503],[118.1906,35.0503],[118.1907,35.0503],[118.1907,35.0503],[118.1908,35.0503],[118.191,35.0503],[118.1912,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1914,35.0503],[118.1915,35.0502],[118.1925,35.0502],[118.193,35.0503],[118.193,35.0503],[118.193,35.0504],[118.193,35.0504],[118.1929,35.0511],[118.1929,35.0513],[118.1929,35.0514],[118.1929,35.0514],[118.1931,35.0514],[118.1931,35.0514],[118.1932,35.0514],[118.1932,35.0514],[118.1934,35.0514],[118.1934,35.0515],[118.1934,35.0515],[118.1934,35.0515],[118.1935,35.0515],[118.1935,35.0515],[118.1935,35.0515],[118.1935,35.0515],[118.1935,35.0515],[118.1936,35.0515],[118.1936,35.0513],[118.1936,35.0513],[118.1936,35.0513],[118.1938,35.0513],[118.1943,35.0513],[118.1943,35.0511],[118.1943,35.051],[118.1944,35.0507],[118.1944,35.0507],[118.1944,35.0507],[118.1944,35.0505],[118.1944,35.0505],[118.1944,35.0499],[118.1947,35.0499],[118.1947,35.0498],[118.1953,35.0497],[118.1957,35.0496],[118.1958,35.0496],[118.1959,35.0496],[118.1959,35.0495],[118.196,35.0495],[118.1961,35.0495],[118.1961,35.0495],[118.1962,35.0494],[118.1964,35.0494],[118.1965,35.0493],[118.1967,35.0493],[118.1969,35.0491],[118.197,35.0491],[118.197,35.0491],[118.197,35.0491],[118.197,35.0491],[118.197,35.049],[118.1971,35.049],[118.1972,35.049],[118.1972,35.0489],[118.1973,35.0489],[118.1976,35.0488],[118.1976,35.0487],[118.1976,35.0487],[118.1977,35.0487],[118.1977,35.0487],[118.1979,35.0486],[118.1979,35.0486],[118.1979,35.0486],[118.1978,35.0486],[118.1978,35.0486],[118.1978,35.0486],[118.1978,35.0486],[118.1975,35.0486],[118.1975,35.0486],[118.1975,35.0486],[118.1975,35.0486],[118.1974,35.0486],[118.1974,35.0486],[118.1974,35.0485],[118.1974,35.0484],[118.1974,35.0483],[118.1974,35.0482],[118.1974,35.0481],[118.1974,35.0481],[118.197,35.0481],[118.197,35.0481],[118.1972,35.048],[118.1973,35.0479],[118.1975,35.0478],[118.1975,35.0478],[118.1975,35.0478],[118.1975,35.0477],[118.1976,35.0477],[118.1978,35.0476],[118.1982,35.0476],[118.1983,35.0476],[118.199,35.0476],[118.1991,35.0476],[118.1992,35.0476],[118.1992,35.0476],[118.1992,35.0476],[118.1992,35.0475],[118.1993,35.0475],[118.1993,35.0475],[118.1993,35.0475],[118.1993,35.0475],[118.1993,35.0475],[118.1993,35.0474],[118.1993,35.0474],[118.1994,35.0473],[118.1995,35.0472],[118.1995,35.0472],[118.1998,35.0468],[118.1999,35.0466],[118.2,35.0465],[118.2,35.0465],[118.2004,35.0461],[118.2004,35.0461],[118.2005,35.0459],[118.2006,35.0459],[118.2007,35.0458],[118.2009,35.0456],[118.201,35.0456],[118.2011,35.0455],[118.2011,35.0455],[118.2011,35.0455],[118.2011,35.0455],[118.2011,35.0454],[118.2012,35.0454],[118.2012,35.0453],[118.2015,35.0451],[118.2015,35.0451],[118.2017,35.0451],[118.202,35.0451],[118.202,35.0451],[118.2021,35.0451],[118.2021,35.0451],[118.2021,35.0451],[118.2022,35.0451],[118.2025,35.0451],[118.2026,35.0451],[118.2027,35.0451],[118.2027,35.0452],[118.2027,35.0457],[118.2027,35.0457],[118.2028,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2031,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2035,35.0457],[118.2037,35.0457],[118.2037,35.0457],[118.2038,35.0457],[118.2038,35.0445],[118.2038,35.0445],[118.2038,35.0445],[118.2043,35.0448],[118.2046,35.045],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.2047,35.0444],[118.205,35.0444],[118.205,35.0444],[118.206,35.0444],[118.2063,35.0443],[118.2063,35.0443],[118.2063,35.0443],[118.2063,35.0443],[118.2064,35.0443],[118.2064,35.0443],[118.2064,35.0443],[118.2065,35.0443],[118.2065,35.0443],[118.2065,35.0443],[118.2066,35.0443],[118.2066,35.0443],[118.2066,35.0442],[118.2067,35.0442],[118.2071,35.0443],[118.2072,35.0437],[118.2072,35.0437],[118.2072,35.043],[118.2072,35.043],[118.2072,35.0429],[118.2072,35.0429]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006001","XZQMC":"西石埠村","KZMJ":5702285.3,"JSMJ":5702285.3,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1727,35.0235,118.2072,35.0527]}},{"type":"Feature","id":"cunjie_4326.41","geometry":{"type":"MultiPolygon","coordinates":[[[[118.224,35.0497],[118.224,35.0495],[118.2239,35.0488],[118.2238,35.0481],[118.2237,35.0473],[118.2237,35.047],[118.2236,35.0459],[118.2234,35.045],[118.2234,35.0444],[118.2233,35.0439],[118.2233,35.0438],[118.2232,35.0429],[118.2232,35.0429],[118.2232,35.0428],[118.2228,35.0428],[118.2228,35.0428],[118.2228,35.0428],[118.2228,35.0428],[118.2228,35.0427],[118.2228,35.0424],[118.2227,35.0419],[118.2227,35.0418],[118.2227,35.0416],[118.2227,35.0416],[118.2227,35.0416],[118.2226,35.0411],[118.2226,35.0411],[118.2225,35.0411],[118.2225,35.0407],[118.2225,35.0407],[118.2224,35.0398],[118.2224,35.0396],[118.2223,35.0392],[118.2225,35.0392],[118.2225,35.0391],[118.2224,35.0391],[118.2224,35.0388],[118.2222,35.0388],[118.2222,35.0386],[118.2223,35.0386],[118.2223,35.0385],[118.2222,35.0385],[118.2222,35.0385],[118.2222,35.0383],[118.2222,35.0381],[118.2222,35.038],[118.2222,35.038],[118.2222,35.0379],[118.2221,35.0377],[118.2221,35.0375],[118.2221,35.0374],[118.2221,35.0373],[118.2221,35.0372],[118.222,35.0368],[118.222,35.0366],[118.222,35.0365],[118.222,35.0364],[118.222,35.0364],[118.2219,35.036],[118.2219,35.0358],[118.2218,35.0358],[118.2218,35.0357],[118.2218,35.0354],[118.2218,35.0353],[118.2217,35.0353],[118.2217,35.0351],[118.2217,35.035],[118.2216,35.0348],[118.2216,35.0347],[118.2216,35.0347],[118.2215,35.0343],[118.2215,35.0342],[118.2214,35.0342],[118.2212,35.0342],[118.2212,35.034],[118.2211,35.0338],[118.2211,35.0337],[118.2211,35.0334],[118.2212,35.0334],[118.2212,35.0332],[118.2216,35.0332],[118.2216,35.0332],[118.2216,35.0332],[118.2216,35.0331],[118.2216,35.0331],[118.2216,35.033],[118.2216,35.033],[118.2216,35.0328],[118.2215,35.0326],[118.2214,35.0325],[118.2213,35.0324],[118.2213,35.0324],[118.2213,35.0324],[118.2212,35.0322],[118.2212,35.032],[118.2211,35.0318],[118.2211,35.0317],[118.2211,35.0316],[118.2211,35.0315],[118.221,35.0314],[118.221,35.0312],[118.2209,35.0309],[118.2209,35.0309],[118.2208,35.0306],[118.2207,35.0305],[118.2207,35.0304],[118.2206,35.0303],[118.2205,35.0302],[118.2205,35.0301],[118.2205,35.03],[118.2206,35.0297],[118.2207,35.0295],[118.2205,35.0294],[118.2204,35.0294],[118.2203,35.0294],[118.2202,35.0293],[118.2202,35.0293],[118.2202,35.0293],[118.2201,35.0293],[118.2201,35.0293],[118.22,35.0293],[118.22,35.0292],[118.2197,35.0292],[118.2196,35.0291],[118.2192,35.0291],[118.2189,35.0291],[118.2188,35.0291],[118.2184,35.0292],[118.2179,35.0292],[118.2178,35.0292],[118.2177,35.0292],[118.2176,35.0292],[118.2174,35.0291],[118.2172,35.0291],[118.217,35.0291],[118.2167,35.0291],[118.2164,35.0291],[118.2164,35.0291],[118.2162,35.0291],[118.216,35.0292],[118.2159,35.0292],[118.2156,35.0292],[118.2156,35.0289],[118.2154,35.0281],[118.2152,35.0281],[118.2149,35.0281],[118.2143,35.0282],[118.2137,35.0282],[118.2137,35.0281],[118.2137,35.0279],[118.2137,35.0279],[118.2137,35.0278],[118.2137,35.0278],[118.2136,35.0276],[118.2135,35.0275],[118.2135,35.0274],[118.2134,35.0273],[118.2134,35.0273],[118.2133,35.027],[118.2132,35.0268],[118.2132,35.0268],[118.2132,35.0268],[118.2132,35.0267],[118.2131,35.0265],[118.2126,35.0265],[118.2118,35.0266],[118.2118,35.0269],[118.2117,35.0269],[118.2113,35.0269],[118.2112,35.0269],[118.2108,35.027],[118.2106,35.027],[118.2104,35.027],[118.2105,35.027],[118.2105,35.027],[118.2106,35.0279],[118.2107,35.0281],[118.2107,35.0281],[118.2107,35.0284],[118.2108,35.0284],[118.2108,35.0287],[118.2109,35.0289],[118.2109,35.0289],[118.2109,35.0289],[118.211,35.0295],[118.211,35.0296],[118.2109,35.0296],[118.2106,35.0295],[118.2104,35.0295],[118.21,35.0295],[118.2093,35.0294],[118.209,35.0294],[118.209,35.0294],[118.2087,35.0294],[118.2087,35.0294],[118.2086,35.0294],[118.2085,35.0294],[118.2083,35.0294],[118.2081,35.0293],[118.2079,35.0293],[118.2077,35.0293],[118.2076,35.0293],[118.2076,35.0293],[118.2076,35.0293],[118.2075,35.0293],[118.2074,35.0294],[118.2073,35.0295],[118.2072,35.0296],[118.2071,35.0298],[118.207,35.0301],[118.2068,35.0303],[118.2063,35.0303],[118.2062,35.0303],[118.2061,35.0303],[118.206,35.0304],[118.2059,35.0304],[118.2058,35.0305],[118.2057,35.0307],[118.2056,35.0309],[118.2056,35.031],[118.2056,35.031],[118.2056,35.0313],[118.2056,35.0314],[118.2056,35.0314],[118.2056,35.0316],[118.2052,35.0316],[118.2051,35.0314],[118.2045,35.0314],[118.2042,35.0314],[118.2041,35.0314],[118.2041,35.0314],[118.2041,35.0313],[118.2041,35.0312],[118.2039,35.0312],[118.2038,35.0312],[118.2038,35.0314],[118.2039,35.0318],[118.2039,35.0321],[118.2039,35.0321],[118.2039,35.0322],[118.2039,35.0326],[118.2039,35.0327],[118.2039,35.0328],[118.2044,35.033],[118.2044,35.0333],[118.2044,35.0334],[118.2043,35.0335],[118.2039,35.0335],[118.2033,35.0337],[118.2031,35.0338],[118.2032,35.0338],[118.2035,35.0338],[118.2035,35.0339],[118.2035,35.034],[118.2035,35.0341],[118.2035,35.0342],[118.2035,35.0343],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0345],[118.2035,35.0346],[118.2035,35.0348],[118.2035,35.0348],[118.2035,35.0348],[118.2036,35.0349],[118.2037,35.0349],[118.2038,35.0349],[118.2038,35.035],[118.2039,35.035],[118.2039,35.0351],[118.204,35.0352],[118.204,35.0352],[118.204,35.0353],[118.2039,35.0355],[118.2039,35.0356],[118.2039,35.0356],[118.2039,35.0357],[118.204,35.0358],[118.204,35.0358],[118.204,35.0359],[118.204,35.036],[118.204,35.036],[118.204,35.036],[118.204,35.036],[118.204,35.0361],[118.204,35.0361],[118.2041,35.0361],[118.2041,35.0362],[118.2041,35.0362],[118.2041,35.0363],[118.2041,35.0363],[118.2041,35.0363],[118.2042,35.0363],[118.2043,35.0363],[118.2044,35.0363],[118.2045,35.0362],[118.2046,35.0362],[118.2047,35.0362],[118.2048,35.0362],[118.2048,35.0362],[118.2049,35.0362],[118.205,35.0362],[118.205,35.0362],[118.205,35.037],[118.2051,35.0375],[118.2047,35.0375],[118.2047,35.0375],[118.2046,35.0375],[118.2046,35.0375],[118.2046,35.0377],[118.2046,35.0377],[118.2046,35.0378],[118.2046,35.038],[118.2046,35.038],[118.2046,35.0383],[118.2046,35.0384],[118.2046,35.0387],[118.2046,35.0389],[118.2047,35.039],[118.2052,35.039],[118.2052,35.0394],[118.2052,35.0394],[118.2052,35.0395],[118.2052,35.0395],[118.2052,35.0396],[118.2052,35.04],[118.2052,35.04],[118.2052,35.0402],[118.2052,35.0402],[118.2052,35.0403],[118.2052,35.0407],[118.2055,35.0407],[118.2054,35.0409],[118.2054,35.041],[118.2057,35.041],[118.2057,35.041],[118.2057,35.0411],[118.2059,35.0411],[118.206,35.0411],[118.206,35.0411],[118.206,35.0411],[118.206,35.0417],[118.206,35.0422],[118.206,35.0428],[118.2061,35.0429],[118.2062,35.0429],[118.2063,35.0429],[118.2065,35.043],[118.2067,35.043],[118.2069,35.043],[118.207,35.0429],[118.2072,35.0429],[118.2073,35.0429],[118.2073,35.0429],[118.2073,35.0429],[118.2074,35.0429],[118.2074,35.0429],[118.2075,35.0429],[118.2077,35.0428],[118.2078,35.0428],[118.2079,35.0428],[118.2081,35.0427],[118.2083,35.0425],[118.2083,35.0425],[118.2085,35.0425],[118.2085,35.0425],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0424],[118.2086,35.0428],[118.2086,35.0428],[118.2086,35.0429],[118.2086,35.0429],[118.2086,35.0432],[118.2086,35.0432],[118.2086,35.0432],[118.2086,35.0432],[118.2088,35.0432],[118.2093,35.0432],[118.2093,35.0432],[118.2098,35.0432],[118.2098,35.0432],[118.2099,35.0432],[118.2099,35.0432],[118.2099,35.0433],[118.2099,35.0433],[118.2099,35.0433],[118.2099,35.0433],[118.2099,35.0434],[118.2099,35.0434],[118.2099,35.0434],[118.2099,35.0434],[118.2099,35.0435],[118.2099,35.0435],[118.2099,35.0436],[118.2099,35.0436],[118.2099,35.0436],[118.2099,35.0438],[118.2099,35.0438],[118.2099,35.0438],[118.2101,35.0438],[118.2101,35.0438],[118.2101,35.0438],[118.2102,35.0438],[118.2102,35.0438],[118.2102,35.0438],[118.2103,35.0438],[118.2103,35.0444],[118.2103,35.045],[118.2104,35.045],[118.2105,35.045],[118.2105,35.045],[118.2106,35.045],[118.2107,35.045],[118.2107,35.045],[118.2107,35.045],[118.211,35.045],[118.2112,35.045],[118.2114,35.045],[118.2114,35.0448],[118.2114,35.0448],[118.2114,35.0448],[118.2114,35.0448],[118.2114,35.0446],[118.2123,35.0446],[118.2133,35.0446],[118.2136,35.0446],[118.2136,35.0446],[118.2136,35.0446],[118.2137,35.0446],[118.2137,35.0447],[118.2137,35.0448],[118.2137,35.045],[118.2137,35.0455],[118.2137,35.0455],[118.2137,35.0458],[118.2137,35.0458],[118.2137,35.0458],[118.2138,35.0458],[118.2138,35.0458],[118.2138,35.0458],[118.2138,35.0458],[118.2145,35.0457],[118.2156,35.0457],[118.2156,35.0457],[118.2156,35.0457],[118.2156,35.0457],[118.2156,35.0458],[118.2156,35.0459],[118.2156,35.0459],[118.2155,35.046],[118.2155,35.046],[118.2155,35.0462],[118.2154,35.0464],[118.2161,35.0464],[118.2161,35.0464],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.0463],[118.2171,35.046],[118.2171,35.0453],[118.2171,35.0453],[118.2172,35.0453],[118.2172,35.0453],[118.2174,35.0453],[118.2179,35.0453],[118.2179,35.0453],[118.2179,35.0453],[118.2182,35.0453],[118.2186,35.0453],[118.2186,35.0453],[118.2186,35.0453],[118.2187,35.0453],[118.2187,35.0453],[118.2187,35.0453],[118.2188,35.0453],[118.2188,35.0453],[118.2189,35.0453],[118.2189,35.0453],[118.219,35.0453],[118.219,35.0453],[118.219,35.046],[118.219,35.046],[118.219,35.046],[118.219,35.046],[118.219,35.0462],[118.219,35.0462],[118.219,35.0464],[118.219,35.0464],[118.219,35.0464],[118.2191,35.0473],[118.2191,35.0473],[118.2194,35.0473],[118.2195,35.0473],[118.2195,35.0473],[118.2195,35.0473],[118.2196,35.0473],[118.2198,35.0473],[118.2198,35.0473],[118.2199,35.0473],[118.2199,35.0473],[118.2199,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.22,35.0473],[118.2201,35.0473],[118.2201,35.0473],[118.2202,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2205,35.0472],[118.2206,35.0472],[118.2206,35.0472],[118.2206,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2208,35.0472],[118.2209,35.0472],[118.221,35.0472],[118.2213,35.0471],[118.2214,35.0471],[118.222,35.0471],[118.2221,35.0471],[118.2225,35.0471],[118.2225,35.0471],[118.2233,35.047],[118.2233,35.0477],[118.2234,35.0488],[118.2234,35.0488],[118.2234,35.0489],[118.2234,35.0489],[118.2234,35.049],[118.2238,35.049],[118.2238,35.049],[118.2238,35.049],[118.2238,35.049],[118.2238,35.049],[118.2238,35.049],[118.2238,35.0493],[118.2239,35.0496],[118.2239,35.0496],[118.2239,35.0496],[118.2239,35.0497],[118.2239,35.0497],[118.2239,35.0497],[118.2239,35.0497],[118.2239,35.0497],[118.2239,35.0497],[118.224,35.0497]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006002","XZQMC":"中石埠村","KZMJ":2843685.77,"JSMJ":2843685.77,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2031,35.0265,118.224,35.0497]}},{"type":"Feature","id":"cunjie_4326.42","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2392,35.0382],[118.2389,35.0382],[118.2385,35.0382],[118.238,35.0381],[118.2378,35.0381],[118.2378,35.0381],[118.2376,35.0381],[118.2373,35.0381],[118.2372,35.0381],[118.2372,35.0381],[118.237,35.0381],[118.2368,35.038],[118.2365,35.038],[118.2364,35.038],[118.2362,35.038],[118.2361,35.038],[118.236,35.038],[118.2359,35.0379],[118.2357,35.0379],[118.2357,35.0379],[118.2354,35.0379],[118.2353,35.0379],[118.2353,35.0374],[118.2353,35.0373],[118.2353,35.0366],[118.2353,35.0364],[118.2353,35.0359],[118.2353,35.0354],[118.2353,35.0354],[118.2353,35.0352],[118.2353,35.0349],[118.2353,35.0349],[118.2353,35.0349],[118.2348,35.0349],[118.2345,35.0349],[118.2341,35.0349],[118.2337,35.0349],[118.2333,35.0349],[118.2332,35.0349],[118.2326,35.0349],[118.2321,35.0349],[118.2319,35.0349],[118.2319,35.035],[118.2317,35.035],[118.2314,35.035],[118.2311,35.035],[118.231,35.035],[118.2306,35.035],[118.2305,35.035],[118.2305,35.035],[118.2305,35.0346],[118.2305,35.0346],[118.2305,35.0346],[118.2305,35.0346],[118.2304,35.0342],[118.2304,35.0342],[118.2304,35.0341],[118.2304,35.0339],[118.2304,35.0336],[118.2304,35.0336],[118.2301,35.0336],[118.2298,35.0336],[118.2297,35.0336],[118.2297,35.0336],[118.2297,35.0335],[118.2297,35.0334],[118.2297,35.0333],[118.2297,35.0331],[118.2297,35.0331],[118.2296,35.0329],[118.2295,35.0324],[118.2292,35.0324],[118.229,35.0324],[118.2288,35.0325],[118.2287,35.0325],[118.2282,35.0325],[118.228,35.0325],[118.2279,35.0326],[118.2274,35.0326],[118.2274,35.0326],[118.2273,35.0326],[118.2272,35.0323],[118.2271,35.0318],[118.227,35.0318],[118.227,35.0318],[118.227,35.0318],[118.2264,35.0319],[118.2263,35.0319],[118.2263,35.0319],[118.2262,35.0319],[118.2262,35.0319],[118.2262,35.0319],[118.2259,35.0319],[118.2256,35.0319],[118.2255,35.0319],[118.2251,35.0319],[118.2251,35.0318],[118.2251,35.0317],[118.225,35.031],[118.225,35.0308],[118.225,35.0308],[118.2249,35.0304],[118.2249,35.0303],[118.2249,35.0303],[118.2249,35.0303],[118.2248,35.0303],[118.2248,35.0303],[118.2246,35.0304],[118.2247,35.031],[118.2244,35.031],[118.2244,35.0309],[118.2243,35.0306],[118.224,35.0306],[118.2239,35.0306],[118.2239,35.0306],[118.2239,35.0306],[118.2239,35.0304],[118.2238,35.0304],[118.2237,35.0304],[118.2235,35.0304],[118.2235,35.0304],[118.2235,35.0303],[118.2235,35.0301],[118.2235,35.03],[118.2235,35.0296],[118.2235,35.0296],[118.2235,35.0296],[118.2234,35.0293],[118.2234,35.0289],[118.2234,35.0286],[118.2234,35.0286],[118.2231,35.0287],[118.2231,35.0287],[118.2231,35.0289],[118.2231,35.0289],[118.2231,35.0292],[118.2231,35.0297],[118.223,35.0297],[118.223,35.0297],[118.2229,35.0297],[118.2226,35.0296],[118.2216,35.0297],[118.2216,35.0296],[118.2215,35.0296],[118.2215,35.0288],[118.2215,35.0285],[118.2215,35.0285],[118.2208,35.0285],[118.2208,35.0285],[118.2207,35.0283],[118.2206,35.0281],[118.2206,35.028],[118.2204,35.028],[118.2202,35.0281],[118.2202,35.0281],[118.2202,35.0282],[118.2202,35.0291],[118.2202,35.0292],[118.2202,35.0293],[118.2202,35.0293],[118.2202,35.0293],[118.2203,35.0294],[118.2204,35.0294],[118.2205,35.0294],[118.2207,35.0295],[118.2206,35.0297],[118.2205,35.03],[118.2205,35.0301],[118.2205,35.0302],[118.2206,35.0303],[118.2207,35.0304],[118.2207,35.0305],[118.2208,35.0306],[118.2209,35.0309],[118.2209,35.0309],[118.221,35.0312],[118.221,35.0314],[118.2211,35.0315],[118.2211,35.0316],[118.2211,35.0317],[118.2211,35.0318],[118.2212,35.032],[118.2212,35.0322],[118.2213,35.0324],[118.2213,35.0324],[118.2213,35.0324],[118.2214,35.0325],[118.2215,35.0326],[118.2216,35.0328],[118.2216,35.033],[118.2216,35.033],[118.2216,35.0331],[118.2216,35.0331],[118.2216,35.0332],[118.2216,35.0332],[118.2216,35.0332],[118.2212,35.0332],[118.2212,35.0334],[118.2211,35.0334],[118.2211,35.0337],[118.2211,35.0338],[118.2212,35.034],[118.2212,35.0342],[118.2214,35.0342],[118.2215,35.0342],[118.2215,35.0343],[118.2216,35.0347],[118.2216,35.0347],[118.2216,35.0348],[118.2217,35.035],[118.2217,35.0351],[118.2217,35.0353],[118.2218,35.0353],[118.2218,35.0354],[118.2218,35.0357],[118.2218,35.0358],[118.2219,35.0358],[118.2219,35.036],[118.222,35.0364],[118.222,35.0364],[118.222,35.0365],[118.222,35.0366],[118.222,35.0368],[118.2221,35.0372],[118.2221,35.0373],[118.2221,35.0374],[118.2221,35.0375],[118.2221,35.0377],[118.2222,35.0379],[118.2222,35.038],[118.2222,35.038],[118.2222,35.0381],[118.2222,35.0383],[118.2222,35.0385],[118.2222,35.0385],[118.2223,35.0385],[118.2223,35.0386],[118.2222,35.0386],[118.2222,35.0388],[118.2224,35.0388],[118.2224,35.0391],[118.2225,35.0391],[118.2225,35.0392],[118.2223,35.0392],[118.2224,35.0396],[118.2224,35.0398],[118.2225,35.0407],[118.2225,35.0407],[118.2225,35.0411],[118.2226,35.0411],[118.2226,35.0411],[118.2227,35.0416],[118.2227,35.0416],[118.2227,35.0416],[118.2227,35.0418],[118.2227,35.0419],[118.2228,35.0424],[118.2228,35.0427],[118.2228,35.0428],[118.2228,35.0428],[118.2228,35.0428],[118.2228,35.0428],[118.2232,35.0428],[118.2232,35.0429],[118.2232,35.0429],[118.2233,35.0438],[118.2233,35.0439],[118.2234,35.0444],[118.2234,35.045],[118.2236,35.0459],[118.2237,35.047],[118.2237,35.0473],[118.2238,35.0481],[118.2239,35.0488],[118.224,35.0495],[118.224,35.0497],[118.2241,35.0497],[118.2241,35.0497],[118.2242,35.0496],[118.2242,35.0496],[118.2244,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2255,35.0496],[118.2258,35.0496],[118.227,35.0495],[118.227,35.0495],[118.2271,35.0495],[118.2271,35.0495],[118.2271,35.0495],[118.2272,35.0495],[118.2272,35.0495],[118.2275,35.0495],[118.2283,35.0494],[118.2285,35.0494],[118.2285,35.0494],[118.2285,35.0494],[118.2285,35.0494],[118.2286,35.0494],[118.2286,35.0494],[118.2287,35.0494],[118.2293,35.0494],[118.2297,35.0494],[118.2297,35.0494],[118.2298,35.0494],[118.2299,35.0494],[118.2299,35.0494],[118.23,35.0494],[118.23,35.0494],[118.2309,35.0494],[118.2309,35.0494],[118.2309,35.0494],[118.2314,35.0494],[118.2314,35.0494],[118.2314,35.0494],[118.2315,35.0494],[118.2315,35.0494],[118.2315,35.0494],[118.2329,35.0493],[118.2349,35.0493],[118.2355,35.0492],[118.2355,35.0492],[118.2355,35.0492],[118.2355,35.0492],[118.2355,35.0491],[118.2355,35.0491],[118.2355,35.049],[118.2355,35.0489],[118.2355,35.0478],[118.2355,35.0475],[118.2355,35.0475],[118.2355,35.0474],[118.2355,35.0471],[118.2355,35.0469],[118.2354,35.0459],[118.2354,35.0456],[118.2354,35.0453],[118.2355,35.0453],[118.2355,35.0453],[118.2355,35.0453],[118.2356,35.0453],[118.2367,35.0452],[118.2367,35.0452],[118.238,35.0452],[118.238,35.0452],[118.238,35.0452],[118.2386,35.0451],[118.2386,35.0451],[118.239,35.0451],[118.2391,35.0451],[118.2391,35.0451],[118.2391,35.0451],[118.2393,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2394,35.0451],[118.2393,35.0441],[118.2392,35.0433],[118.2392,35.0433],[118.2392,35.0433],[118.2392,35.0433],[118.2392,35.0433],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0432],[118.2392,35.0426],[118.2392,35.0426],[118.2391,35.0423],[118.2391,35.0423],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0417],[118.2392,35.0416],[118.2392,35.0416],[118.2392,35.0414],[118.2392,35.0414],[118.2392,35.0414],[118.2392,35.0413],[118.2392,35.0413],[118.2391,35.0413],[118.2391,35.0412],[118.2391,35.0412],[118.2391,35.0412],[118.2391,35.0412],[118.2391,35.0412],[118.2392,35.0394],[118.2392,35.0394],[118.2392,35.0393],[118.2392,35.0393],[118.2392,35.0393],[118.2392,35.0393],[118.2392,35.0391],[118.2392,35.0391],[118.2392,35.0391],[118.2392,35.0391],[118.2392,35.0389],[118.2392,35.0389],[118.2392,35.0388],[118.2392,35.0386],[118.2392,35.0384],[118.2392,35.0384],[118.2392,35.0383],[118.2392,35.0382],[118.2392,35.0382]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005023","XZQMC":"东石埠村","KZMJ":2463023.64,"JSMJ":2463023.64,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2202,35.028,118.2394,35.0497]}},{"type":"Feature","id":"cunjie_4326.43","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1736,35.0144],[118.1736,35.0143],[118.1739,35.0143],[118.174,35.0143],[118.1741,35.0143],[118.1742,35.0143],[118.1742,35.0143],[118.1743,35.0143],[118.1744,35.0143],[118.1745,35.0143],[118.1746,35.0143],[118.1746,35.0142],[118.1749,35.0142],[118.1749,35.0142],[118.1749,35.0141],[118.1749,35.0141],[118.1747,35.014],[118.1746,35.014],[118.1744,35.0139],[118.1744,35.0139],[118.1745,35.0138],[118.1745,35.0138],[118.1745,35.0137],[118.1746,35.0135],[118.1743,35.0134],[118.1741,35.0132],[118.1738,35.0132],[118.1738,35.0131],[118.1738,35.0131],[118.1739,35.0131],[118.1741,35.0131],[118.1742,35.0132],[118.1745,35.0133],[118.1746,35.0121],[118.1744,35.0121],[118.1744,35.0116],[118.1744,35.0115],[118.1744,35.0113],[118.1744,35.011],[118.1747,35.0109],[118.175,35.0109],[118.1753,35.0109],[118.1757,35.0108],[118.1758,35.0108],[118.1758,35.0103],[118.1758,35.0102],[118.1758,35.0102],[118.1758,35.01],[118.1758,35.0097],[118.1758,35.0096],[118.1765,35.0096],[118.1766,35.0083],[118.1766,35.0081],[118.1766,35.0081],[118.1767,35.0079],[118.177,35.0079],[118.1773,35.0079],[118.1774,35.0073],[118.1774,35.0072],[118.1775,35.0069],[118.1775,35.0065],[118.1776,35.0062],[118.1776,35.0061],[118.1779,35.0059],[118.1781,35.0057],[118.1782,35.0056],[118.1782,35.0055],[118.1782,35.0054],[118.1782,35.0054],[118.1782,35.0049],[118.1782,35.0047],[118.1783,35.0042],[118.1783,35.0042],[118.1783,35.004],[118.1782,35.0037],[118.1781,35.0036],[118.1781,35.0034],[118.178,35.0032],[118.178,35.003],[118.178,35.0028],[118.178,35.0027],[118.178,35.0026],[118.1779,35.0025],[118.1778,35.0024],[118.1777,35.0024],[118.1776,35.0022],[118.1775,35.0019],[118.1775,35.0018],[118.1776,35.0016],[118.1776,35.0014],[118.1775,35.0014],[118.1766,35.0013],[118.1766,35.0013],[118.1766,35.0013],[118.1766,35.0012],[118.1761,35.0011],[118.1761,35.0011],[118.1759,35.0016],[118.1753,35.0014],[118.1752,35.0019],[118.175,35.0026],[118.175,35.0026],[118.1749,35.0028],[118.1749,35.0028],[118.1748,35.0031],[118.1748,35.0031],[118.1746,35.0031],[118.1739,35.003],[118.1737,35.0029],[118.1735,35.0029],[118.1736,35.0023],[118.1734,35.0022],[118.1734,35.0021],[118.1731,35.0021],[118.1732,35.0003],[118.1722,35.0002],[118.1722,35.0007],[118.1719,35.0007],[118.1718,35.0021],[118.1716,35.0021],[118.1716,35],[118.1715,35],[118.1713,35],[118.1712,35],[118.1711,35.0004],[118.1711,35.0004],[118.171,35.0004],[118.171,35],[118.1709,35],[118.1709,35.0014],[118.1706,35.0014],[118.1706,35],[118.1706,34.9999],[118.1706,34.9999],[118.1706,34.9995],[118.1706,34.9994],[118.1706,34.9994],[118.1706,34.9994],[118.1706,34.9993],[118.1706,34.9993],[118.1704,34.9992],[118.1704,34.9992],[118.1703,34.9992],[118.1703,34.9996],[118.1703,34.9996],[118.1703,34.9997],[118.1703,35],[118.1703,35.0012],[118.1702,35.0013],[118.1702,35.0011],[118.17,35.0011],[118.17,35],[118.17,34.9999],[118.1698,34.9999],[118.1698,35],[118.1698,35.0005],[118.1698,35.0013],[118.1695,35.0014],[118.1691,35.0014],[118.1691,35.0018],[118.1693,35.0025],[118.1693,35.003],[118.1691,35.0029],[118.1691,35.0026],[118.169,35.0021],[118.1689,35.0016],[118.1687,35.0008],[118.1685,35.0008],[118.1687,35.0014],[118.1688,35.0021],[118.169,35.0029],[118.1688,35.0028],[118.1686,35.0028],[118.1686,35.0024],[118.1686,35.002],[118.1683,35.0008],[118.1677,35.0008],[118.1669,35.0008],[118.1669,35.0009],[118.1666,35.0009],[118.1667,35.0015],[118.1668,35.0017],[118.1668,35.002],[118.1668,35.0021],[118.1668,35.0021],[118.1668,35.0021],[118.1667,35.0023],[118.1667,35.0025],[118.1654,35.0023],[118.1655,35.0017],[118.1653,35.0016],[118.1651,35.0015],[118.1647,35.0013],[118.1647,35.0019],[118.1647,35.0023],[118.1647,35.0023],[118.1647,35.0023],[118.1649,35.0024],[118.1651,35.0024],[118.1656,35.0025],[118.1656,35.0027],[118.1654,35.0027],[118.1655,35.0032],[118.1656,35.0041],[118.1657,35.0044],[118.1658,35.0049],[118.1657,35.0049],[118.1656,35.0049],[118.1654,35.0041],[118.1653,35.0033],[118.1653,35.0027],[118.165,35.0026],[118.1652,35.0038],[118.1655,35.0049],[118.1653,35.005],[118.1651,35.005],[118.1648,35.0026],[118.1645,35.0026],[118.1645,35.0025],[118.1644,35.0025],[118.1643,35.0027],[118.1646,35.0043],[118.1647,35.005],[118.1648,35.0056],[118.1639,35.0057],[118.1638,35.0054],[118.1635,35.0055],[118.1635,35.0052],[118.1635,35.0049],[118.1633,35.0049],[118.163,35.0037],[118.1627,35.0038],[118.1626,35.0039],[118.1625,35.004],[118.1625,35.0043],[118.1626,35.0047],[118.1626,35.0047],[118.1626,35.0047],[118.1627,35.0052],[118.1627,35.0054],[118.1629,35.0055],[118.1632,35.0058],[118.1635,35.006],[118.1637,35.0061],[118.1637,35.0061],[118.1639,35.0061],[118.164,35.0061],[118.1643,35.0062],[118.1644,35.0062],[118.1645,35.0068],[118.1645,35.007],[118.1645,35.0071],[118.1644,35.0071],[118.1644,35.0072],[118.1644,35.0073],[118.1644,35.0074],[118.1644,35.0074],[118.1641,35.0075],[118.1639,35.0076],[118.1638,35.0077],[118.1636,35.0078],[118.1636,35.0079],[118.1636,35.0079],[118.1633,35.0081],[118.1629,35.0083],[118.1626,35.0086],[118.162,35.0087],[118.1621,35.0091],[118.1614,35.0093],[118.1616,35.0105],[118.1614,35.0105],[118.1612,35.0093],[118.1607,35.0094],[118.1609,35.0106],[118.1607,35.0106],[118.1607,35.0109],[118.1612,35.0108],[118.1612,35.011],[118.1612,35.0112],[118.1613,35.0113],[118.1616,35.0123],[118.161,35.0124],[118.1607,35.0114],[118.1607,35.0115],[118.1605,35.0116],[118.1608,35.0127],[118.1601,35.0128],[118.16,35.0126],[118.1599,35.0122],[118.1599,35.012],[118.1598,35.012],[118.1598,35.0121],[118.1597,35.0121],[118.1596,35.0122],[118.1595,35.0123],[118.1594,35.0124],[118.1594,35.0124],[118.1592,35.0125],[118.1592,35.0125],[118.1594,35.0133],[118.1592,35.0133],[118.1593,35.0137],[118.1592,35.0138],[118.1593,35.0141],[118.1594,35.0146],[118.1594,35.0147],[118.1594,35.0147],[118.1593,35.0147],[118.1592,35.0147],[118.1592,35.0147],[118.1591,35.0148],[118.1589,35.0148],[118.1588,35.0149],[118.1587,35.0149],[118.1586,35.0149],[118.1585,35.015],[118.1585,35.0151],[118.1584,35.0153],[118.1583,35.0154],[118.1583,35.0155],[118.1587,35.0158],[118.1588,35.0159],[118.1589,35.0159],[118.1591,35.0161],[118.1592,35.0163],[118.1593,35.0166],[118.1594,35.0168],[118.1595,35.0169],[118.1597,35.0169],[118.1598,35.0168],[118.1599,35.0169],[118.1599,35.0169],[118.16,35.0169],[118.1602,35.0169],[118.1602,35.0169],[118.1601,35.0166],[118.1602,35.0165],[118.1603,35.0165],[118.1604,35.0165],[118.1604,35.0162],[118.1605,35.0162],[118.1605,35.0162],[118.1606,35.0162],[118.1607,35.0162],[118.1608,35.0162],[118.1608,35.0161],[118.1613,35.0161],[118.1612,35.0157],[118.162,35.0156],[118.1621,35.0157],[118.1621,35.0157],[118.1623,35.0158],[118.1627,35.0158],[118.1628,35.0159],[118.1632,35.0158],[118.1633,35.0158],[118.1634,35.0158],[118.1634,35.016],[118.1635,35.0161],[118.1635,35.0165],[118.1635,35.0168],[118.1636,35.017],[118.1636,35.0171],[118.1638,35.017],[118.164,35.017],[118.1638,35.0158],[118.1639,35.0157],[118.1642,35.0157],[118.1642,35.0157],[118.1644,35.017],[118.1645,35.017],[118.1646,35.017],[118.1646,35.017],[118.1646,35.0169],[118.1646,35.0167],[118.1646,35.0167],[118.1647,35.0167],[118.1649,35.0167],[118.1651,35.0167],[118.165,35.0156],[118.1651,35.0156],[118.1651,35.0156],[118.1654,35.016],[118.1655,35.0161],[118.1656,35.0161],[118.1656,35.0161],[118.166,35.0163],[118.166,35.0163],[118.1666,35.0161],[118.167,35.016],[118.167,35.0154],[118.167,35.015],[118.1673,35.0148],[118.1674,35.0147],[118.1674,35.0146],[118.1676,35.0145],[118.1677,35.0151],[118.1686,35.0142],[118.1687,35.0142],[118.1687,35.0145],[118.169,35.0146],[118.1704,35.0145],[118.1704,35.0144],[118.1713,35.0144],[118.1718,35.0144],[118.1725,35.0144],[118.1729,35.0144],[118.173,35.0144],[118.1736,35.0144]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006016","XZQMC":"坞南村","KZMJ":1990304.03,"JSMJ":1990304.04,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1583,34.9992,118.1783,35.0171]}},{"type":"Feature","id":"cunjie_4326.44","geometry":{"type":"MultiPolygon","coordinates":[[[[118.261,35.0156],[118.2609,35.0155],[118.2608,35.0153],[118.2608,35.0152],[118.2606,35.0148],[118.2605,35.0146],[118.2604,35.0143],[118.2605,35.0143],[118.2607,35.0142],[118.2612,35.0141],[118.2615,35.014],[118.2623,35.0137],[118.2621,35.0132],[118.2621,35.0131],[118.2619,35.0127],[118.2617,35.0123],[118.2611,35.0124],[118.2608,35.0125],[118.2608,35.0124],[118.2606,35.0121],[118.2605,35.0118],[118.2604,35.0117],[118.2603,35.0114],[118.26,35.0114],[118.2599,35.0111],[118.2598,35.0106],[118.2598,35.0105],[118.2597,35.0101],[118.2595,35.0095],[118.2589,35.0097],[118.2588,35.009],[118.2581,35.0089],[118.257,35.0089],[118.2561,35.0088],[118.2558,35.0088],[118.2551,35.0087],[118.2549,35.0087],[118.2543,35.0087],[118.2542,35.0079],[118.2542,35.0076],[118.2542,35.0071],[118.2541,35.0068],[118.2541,35.0068],[118.2541,35.0065],[118.2541,35.0065],[118.2541,35.0062],[118.254,35.0059],[118.254,35.0052],[118.2536,35.0052],[118.2534,35.0052],[118.2532,35.0052],[118.2532,35.0044],[118.2528,35.0045],[118.2524,35.0046],[118.2521,35.0048],[118.2518,35.0049],[118.2516,35.005],[118.2515,35.005],[118.2514,35.005],[118.2513,35.0051],[118.2512,35.0051],[118.2511,35.0051],[118.2511,35.0051],[118.251,35.0051],[118.2505,35.0052],[118.2502,35.0053],[118.2498,35.0054],[118.2497,35.0054],[118.2495,35.0054],[118.2494,35.0054],[118.2494,35.0054],[118.2493,35.0054],[118.2483,35.0055],[118.2481,35.0055],[118.2475,35.0055],[118.2474,35.0051],[118.2473,35.0051],[118.2472,35.0046],[118.2472,35.0045],[118.2464,35.0045],[118.2464,35.0043],[118.2463,35.0043],[118.2462,35.0041],[118.2462,35.0041],[118.2453,35.0042],[118.2448,35.0042],[118.2447,35.0037],[118.2446,35.0025],[118.2446,35.0023],[118.2445,35.0014],[118.2445,35.0013],[118.2444,35.001],[118.2444,35.0008],[118.2444,35.0005],[118.2444,35.0005],[118.2444,35.0002],[118.2444,35.0002],[118.2443,35],[118.2442,34.999],[118.2442,34.9987],[118.2438,34.9988],[118.243,34.9988],[118.243,34.9986],[118.2425,34.9987],[118.2424,34.9982],[118.2424,34.998],[118.2423,34.9977],[118.2423,34.9974],[118.2423,34.997],[118.2422,34.9968],[118.2422,34.9962],[118.2421,34.9959],[118.2421,34.9956],[118.2421,34.9955],[118.2421,34.9951],[118.242,34.9947],[118.2415,34.9947],[118.2406,34.9947],[118.2407,34.9944],[118.2408,34.9942],[118.241,34.9939],[118.2412,34.9935],[118.2407,34.9932],[118.2406,34.9931],[118.2403,34.993],[118.2401,34.9935],[118.2401,34.9935],[118.2396,34.9933],[118.2396,34.9935],[118.2394,34.9942],[118.2393,34.9944],[118.2393,34.9945],[118.2393,34.9946],[118.2391,34.9945],[118.2388,34.9945],[118.2388,34.9945],[118.2387,34.9944],[118.2386,34.9947],[118.2378,34.9947],[118.2379,34.995],[118.2379,34.9953],[118.2379,34.9953],[118.2379,34.9954],[118.2379,34.9954],[118.238,34.9956],[118.2382,34.9956],[118.2386,34.9957],[118.2388,34.9957],[118.2389,34.9958],[118.239,34.9958],[118.2391,34.9954],[118.2392,34.9952],[118.2392,34.9952],[118.2393,34.9949],[118.2393,34.9948],[118.2393,34.9948],[118.2393,34.995],[118.2394,34.9952],[118.2395,34.9958],[118.2395,34.9959],[118.2396,34.9963],[118.2397,34.9968],[118.2398,34.997],[118.24,34.9978],[118.24,34.9981],[118.24,34.9982],[118.2401,34.9985],[118.2402,34.9987],[118.2402,34.999],[118.2403,34.9992],[118.2403,34.9993],[118.2403,34.9996],[118.2404,34.9996],[118.2404,34.9998],[118.2404,34.9999],[118.2404,35],[118.2405,35.0001],[118.2398,35.0002],[118.2396,35.0003],[118.2394,35.0003],[118.2391,35.0004],[118.2391,35.0004],[118.2391,35.0004],[118.2393,35.0008],[118.2393,35.0008],[118.2393,35.0008],[118.2394,35.0009],[118.2395,35.001],[118.2396,35.0011],[118.2396,35.0011],[118.2396,35.0011],[118.2399,35.0014],[118.2401,35.0017],[118.2402,35.0018],[118.2403,35.0019],[118.2405,35.002],[118.2407,35.0019],[118.2408,35.0019],[118.241,35.0024],[118.241,35.0024],[118.2414,35.0032],[118.2416,35.0037],[118.2417,35.0039],[118.2417,35.004],[118.2418,35.0043],[118.242,35.0047],[118.2421,35.005],[118.2421,35.005],[118.2424,35.005],[118.2425,35.0057],[118.2426,35.0058],[118.2428,35.0058],[118.2431,35.0058],[118.2432,35.0058],[118.2432,35.0064],[118.2432,35.0064],[118.2433,35.0069],[118.2435,35.0068],[118.2435,35.0068],[118.2436,35.007],[118.2437,35.007],[118.2436,35.0072],[118.2436,35.0074],[118.2437,35.0074],[118.244,35.0075],[118.2441,35.0075],[118.2444,35.0076],[118.2447,35.0077],[118.2447,35.0079],[118.2447,35.0079],[118.2447,35.0079],[118.2448,35.0083],[118.2448,35.0085],[118.2449,35.0088],[118.2454,35.0084],[118.2457,35.0082],[118.2457,35.0082],[118.2457,35.0081],[118.2459,35.0082],[118.246,35.0082],[118.2462,35.0083],[118.2462,35.0087],[118.2462,35.0088],[118.2462,35.0088],[118.2465,35.0088],[118.2468,35.0088],[118.2474,35.0088],[118.2477,35.0088],[118.2477,35.0089],[118.2478,35.0099],[118.2478,35.0101],[118.2478,35.0101],[118.2478,35.0102],[118.2478,35.0105],[118.2479,35.0106],[118.248,35.0125],[118.2486,35.0125],[118.2494,35.0125],[118.2499,35.0125],[118.25,35.0125],[118.2503,35.0125],[118.2503,35.0125],[118.2506,35.0125],[118.2513,35.0125],[118.2517,35.0126],[118.2517,35.0129],[118.2519,35.0144],[118.2527,35.0144],[118.2527,35.0144],[118.2528,35.0144],[118.2537,35.0144],[118.2549,35.0144],[118.255,35.0155],[118.2554,35.0155],[118.2554,35.0155],[118.2572,35.0156],[118.2578,35.016],[118.2584,35.0158],[118.2587,35.0157],[118.2599,35.0153],[118.26,35.0156],[118.2601,35.0159],[118.2606,35.0157],[118.261,35.0156]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005015","XZQMC":"后崔家庄村","KZMJ":1497764.43,"JSMJ":1497764.45,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2378,34.993,118.2623,35.016]}},{"type":"Feature","id":"cunjie_4326.45","geometry":{"type":"MultiPolygon","coordinates":[[[[118.238,34.9956],[118.238,34.9959],[118.2373,34.9959],[118.2366,34.996],[118.2363,34.996],[118.2361,34.996],[118.2353,34.9961],[118.2346,34.9961],[118.2347,34.9965],[118.2346,34.9965],[118.2345,34.9965],[118.2345,34.9967],[118.2345,34.9969],[118.2346,34.9972],[118.2346,34.9972],[118.2347,34.9974],[118.2344,34.9974],[118.2343,34.9974],[118.2343,34.9974],[118.2345,34.9976],[118.2348,34.9978],[118.235,34.998],[118.2354,34.9983],[118.2355,34.9984],[118.2356,34.9985],[118.2356,34.9985],[118.2356,34.9985],[118.2354,34.9986],[118.2354,34.9987],[118.235,34.9989],[118.2355,34.9993],[118.2362,35],[118.2363,35.0001],[118.2362,35.0002],[118.2361,35.0002],[118.236,35.0003],[118.2365,35.0005],[118.237,35.0006],[118.2372,35.0007],[118.2373,35.0009],[118.2374,35.0011],[118.2375,35.0013],[118.2376,35.0014],[118.2379,35.0015],[118.2386,35.0018],[118.2389,35.002],[118.2393,35.002],[118.2397,35.002],[118.2399,35.002],[118.2401,35.0021],[118.2403,35.0023],[118.2405,35.0025],[118.2406,35.003],[118.2408,35.0036],[118.2409,35.0039],[118.241,35.004],[118.2412,35.0044],[118.2413,35.0047],[118.2413,35.0048],[118.2413,35.005],[118.2412,35.0051],[118.2409,35.0051],[118.2407,35.0051],[118.2404,35.005],[118.2402,35.005],[118.2397,35.005],[118.2393,35.0052],[118.2388,35.0055],[118.2385,35.0057],[118.2382,35.006],[118.2381,35.0062],[118.2381,35.0062],[118.2381,35.0064],[118.2381,35.0067],[118.2382,35.0069],[118.2384,35.0072],[118.2388,35.0075],[118.239,35.0077],[118.2392,35.0079],[118.2393,35.0082],[118.2395,35.0087],[118.2396,35.0092],[118.2396,35.0094],[118.2398,35.0099],[118.2399,35.0105],[118.2401,35.0105],[118.2401,35.0105],[118.2404,35.0105],[118.2413,35.0105],[118.2422,35.0105],[118.2435,35.0106],[118.2436,35.0117],[118.2437,35.0124],[118.2438,35.0124],[118.2446,35.0124],[118.2456,35.0125],[118.2457,35.0133],[118.2458,35.014],[118.2458,35.0141],[118.247,35.0141],[118.247,35.014],[118.247,35.014],[118.2471,35.014],[118.2496,35.014],[118.25,35.014],[118.2501,35.014],[118.2504,35.014],[118.2504,35.014],[118.2507,35.014],[118.2507,35.0144],[118.2508,35.0144],[118.251,35.0144],[118.2513,35.0144],[118.2519,35.0144],[118.2517,35.0129],[118.2517,35.0126],[118.2513,35.0125],[118.2506,35.0125],[118.2503,35.0125],[118.2503,35.0125],[118.25,35.0125],[118.2499,35.0125],[118.2494,35.0125],[118.2486,35.0125],[118.248,35.0125],[118.2479,35.0106],[118.2478,35.0105],[118.2478,35.0102],[118.2478,35.0101],[118.2478,35.0101],[118.2478,35.0099],[118.2477,35.0089],[118.2477,35.0088],[118.2474,35.0088],[118.2468,35.0088],[118.2465,35.0088],[118.2462,35.0088],[118.2462,35.0088],[118.2462,35.0087],[118.2462,35.0083],[118.246,35.0082],[118.2459,35.0082],[118.2457,35.0081],[118.2457,35.0082],[118.2457,35.0082],[118.2454,35.0084],[118.2449,35.0088],[118.2448,35.0085],[118.2448,35.0083],[118.2447,35.0079],[118.2447,35.0079],[118.2447,35.0079],[118.2447,35.0077],[118.2444,35.0076],[118.2441,35.0075],[118.244,35.0075],[118.2437,35.0074],[118.2436,35.0074],[118.2436,35.0072],[118.2437,35.007],[118.2436,35.007],[118.2435,35.0068],[118.2435,35.0068],[118.2433,35.0069],[118.2432,35.0064],[118.2432,35.0064],[118.2432,35.0058],[118.2431,35.0058],[118.2428,35.0058],[118.2426,35.0058],[118.2425,35.0057],[118.2424,35.005],[118.2421,35.005],[118.2421,35.005],[118.242,35.0047],[118.2418,35.0043],[118.2417,35.004],[118.2417,35.0039],[118.2416,35.0037],[118.2414,35.0032],[118.241,35.0024],[118.241,35.0024],[118.2408,35.0019],[118.2407,35.0019],[118.2405,35.002],[118.2403,35.0019],[118.2402,35.0018],[118.2401,35.0017],[118.2399,35.0014],[118.2396,35.0011],[118.2396,35.0011],[118.2396,35.0011],[118.2395,35.001],[118.2394,35.0009],[118.2393,35.0008],[118.2393,35.0008],[118.2393,35.0008],[118.2391,35.0004],[118.2391,35.0004],[118.2391,35.0004],[118.2394,35.0003],[118.2396,35.0003],[118.2398,35.0002],[118.2405,35.0001],[118.2404,35],[118.2404,34.9999],[118.2404,34.9998],[118.2404,34.9996],[118.2403,34.9996],[118.2403,34.9993],[118.2403,34.9992],[118.2402,34.999],[118.2402,34.9987],[118.2401,34.9985],[118.24,34.9982],[118.24,34.9981],[118.24,34.9978],[118.2398,34.997],[118.2397,34.9968],[118.2396,34.9963],[118.2395,34.9959],[118.2395,34.9958],[118.2394,34.9952],[118.2393,34.995],[118.2393,34.9948],[118.2393,34.9948],[118.2393,34.9949],[118.2392,34.9952],[118.2392,34.9952],[118.2391,34.9954],[118.239,34.9958],[118.2389,34.9958],[118.2388,34.9957],[118.2386,34.9957],[118.2382,34.9956],[118.238,34.9956]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006030","XZQMC":"潘庄村","KZMJ":793477.14,"JSMJ":793477.13,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2343,34.9948,118.2519,35.0144]}},{"type":"Feature","id":"cunjie_4326.46","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2197,35.0027],[118.2192,35.0027],[118.218,35.0026],[118.2172,35.0026],[118.2152,35.0025],[118.2139,35.0025],[118.2139,35.0023],[118.2139,35.0023],[118.2138,35.0022],[118.2138,35.002],[118.2138,35.0019],[118.2137,35.0014],[118.2136,35.0015],[118.2131,35.0016],[118.2131,35.0016],[118.2126,35.0016],[118.2124,35.0016],[118.2123,35.0016],[118.2122,35.0015],[118.2121,35.0015],[118.212,35.0015],[118.2119,35.0015],[118.2118,35.0016],[118.2116,35.0018],[118.2115,35.0021],[118.2115,35.0024],[118.2115,35.0027],[118.2117,35.0034],[118.212,35.0057],[118.2119,35.0057],[118.2118,35.0057],[118.2115,35.0057],[118.2114,35.0057],[118.2115,35.006],[118.2111,35.0061],[118.2103,35.0061],[118.2092,35.0062],[118.2093,35.0062],[118.2093,35.0071],[118.2103,35.0071],[118.2113,35.007],[118.2113,35.007],[118.2115,35.007],[118.212,35.0069],[118.2122,35.007],[118.2124,35.0078],[118.2126,35.0086],[118.2127,35.0096],[118.2129,35.0096],[118.2129,35.0096],[118.2132,35.0096],[118.2132,35.0096],[118.2132,35.0096],[118.214,35.0097],[118.214,35.01],[118.214,35.01],[118.214,35.0101],[118.214,35.0101],[118.214,35.0101],[118.214,35.0102],[118.2141,35.0108],[118.215,35.0109],[118.2149,35.0106],[118.2149,35.0103],[118.2148,35.0099],[118.2148,35.0097],[118.2156,35.0098],[118.2157,35.0098],[118.2157,35.0098],[118.2158,35.0098],[118.2161,35.0098],[118.2163,35.0099],[118.2166,35.0099],[118.2166,35.0103],[118.2166,35.0108],[118.2166,35.0108],[118.2166,35.0109],[118.2166,35.0109],[118.2166,35.0109],[118.2166,35.011],[118.2166,35.011],[118.2164,35.0111],[118.2166,35.0122],[118.2168,35.0132],[118.2168,35.0131],[118.2172,35.013],[118.2171,35.0123],[118.217,35.012],[118.217,35.0117],[118.217,35.0116],[118.217,35.0115],[118.217,35.0113],[118.217,35.0112],[118.217,35.0112],[118.217,35.011],[118.2175,35.011],[118.2179,35.0111],[118.2179,35.0111],[118.218,35.0111],[118.2174,35.012],[118.2176,35.0121],[118.2176,35.0121],[118.2177,35.0119],[118.2177,35.0118],[118.2179,35.0116],[118.2179,35.0115],[118.218,35.0114],[118.2181,35.0112],[118.2181,35.0112],[118.2183,35.0113],[118.2181,35.0117],[118.218,35.0119],[118.2177,35.0122],[118.2177,35.0123],[118.2178,35.0127],[118.218,35.0126],[118.2182,35.0125],[118.2183,35.0124],[118.2186,35.0124],[118.2186,35.0124],[118.2186,35.0122],[118.2186,35.0121],[118.2186,35.012],[118.2185,35.0119],[118.2185,35.0117],[118.2185,35.0117],[118.2185,35.0112],[118.2185,35.0112],[118.2188,35.0112],[118.2188,35.0112],[118.2188,35.0112],[118.2189,35.0112],[118.2189,35.0112],[118.2189,35.011],[118.2189,35.0107],[118.2189,35.0106],[118.2189,35.0105],[118.2189,35.0105],[118.2189,35.0102],[118.2189,35.0102],[118.2189,35.0101],[118.2189,35.01],[118.2189,35.01],[118.2189,35.01],[118.2189,35.0098],[118.2189,35.0098],[118.2189,35.0095],[118.2192,35.0095],[118.2192,35.0089],[118.2192,35.0089],[118.2193,35.0089],[118.2195,35.0088],[118.2195,35.0087],[118.2195,35.0087],[118.22,35.0087],[118.2204,35.0087],[118.221,35.0087],[118.221,35.0082],[118.2212,35.0082],[118.2215,35.0082],[118.2215,35.0082],[118.2215,35.0075],[118.2215,35.0075],[118.2215,35.0073],[118.2212,35.0073],[118.2212,35.0069],[118.2212,35.0064],[118.2208,35.0064],[118.2206,35.0064],[118.2205,35.0064],[118.22,35.0064],[118.22,35.0064],[118.22,35.0063],[118.22,35.0062],[118.22,35.0062],[118.22,35.006],[118.22,35.0055],[118.22,35.0055],[118.2199,35.0054],[118.2199,35.005],[118.2199,35.0049],[118.2199,35.0048],[118.2199,35.0046],[118.2199,35.0046],[118.2199,35.0045],[118.2199,35.0045],[118.2199,35.0044],[118.2199,35.0043],[118.2198,35.0039],[118.2198,35.0034],[118.2197,35.0032],[118.2197,35.0031],[118.2197,35.0031],[118.2197,35.0029],[118.2197,35.0028],[118.2197,35.0027]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006019","XZQMC":"高家庄村","KZMJ":700503.65,"JSMJ":700503.67,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2092,35.0014,118.2215,35.0132]}},{"type":"Feature","id":"cunjie_4326.47","geometry":{"type":"MultiPolygon","coordinates":[[[[118.1695,35.0014],[118.1695,35.0012],[118.1695,35],[118.1695,35],[118.1688,35],[118.1688,35],[118.1688,35.0003],[118.1671,35.0004],[118.1671,35.0004],[118.1671,35.0004],[118.167,35.0002],[118.167,35],[118.1669,34.9998],[118.1669,34.9994],[118.1665,34.9994],[118.1664,34.9992],[118.1664,34.9991],[118.1662,34.9991],[118.1661,34.9987],[118.1661,34.9984],[118.166,34.9981],[118.1658,34.9981],[118.1655,34.9981],[118.1654,34.9981],[118.1654,34.9981],[118.1655,34.9986],[118.1657,34.9991],[118.1657,34.9995],[118.1655,34.9995],[118.1652,34.9995],[118.1649,34.9996],[118.1649,34.9994],[118.1648,34.9993],[118.1648,34.9993],[118.1652,34.9992],[118.1652,34.9992],[118.1652,34.9989],[118.1651,34.9986],[118.165,34.9984],[118.1648,34.9985],[118.1646,34.9982],[118.1646,34.9981],[118.1646,34.9979],[118.1646,34.9978],[118.1645,34.9977],[118.1645,34.9976],[118.1645,34.9976],[118.1644,34.9975],[118.1643,34.9974],[118.164,34.9973],[118.1637,34.9971],[118.1636,34.997],[118.1633,34.997],[118.1633,34.9969],[118.1632,34.9969],[118.1632,34.9969],[118.1631,34.9969],[118.1631,34.9969],[118.1631,34.9969],[118.163,34.9968],[118.1629,34.9968],[118.1627,34.9966],[118.1625,34.9965],[118.1624,34.9965],[118.1623,34.9964],[118.1623,34.9964],[118.1623,34.9963],[118.1623,34.9962],[118.1623,34.9962],[118.1623,34.9962],[118.1623,34.9962],[118.1622,34.9961],[118.1622,34.9959],[118.1622,34.9958],[118.1622,34.9958],[118.1622,34.9958],[118.1619,34.9959],[118.1618,34.996],[118.1617,34.9959],[118.1616,34.9958],[118.1615,34.9957],[118.1615,34.9957],[118.1615,34.9957],[118.1615,34.9956],[118.1613,34.9955],[118.1612,34.9954],[118.1612,34.9954],[118.161,34.9952],[118.1609,34.9951],[118.1607,34.9949],[118.1606,34.9948],[118.1606,34.9948],[118.1606,34.9947],[118.1605,34.9947],[118.1604,34.9947],[118.1603,34.9947],[118.1601,34.9948],[118.1598,34.9949],[118.1597,34.9951],[118.1596,34.9951],[118.1595,34.9951],[118.1595,34.9951],[118.1594,34.9952],[118.1592,34.9953],[118.1592,34.9953],[118.1592,34.9954],[118.1592,34.9954],[118.1592,34.9954],[118.1593,34.9955],[118.1593,34.9954],[118.1593,34.9954],[118.1593,34.9954],[118.1594,34.9954],[118.1594,34.9954],[118.1595,34.9953],[118.1596,34.9953],[118.1598,34.9952],[118.1598,34.9952],[118.1599,34.9954],[118.16,34.9955],[118.1601,34.9956],[118.1603,34.9958],[118.1606,34.9961],[118.161,34.9965],[118.1611,34.9965],[118.1611,34.9966],[118.1612,34.9966],[118.161,34.9967],[118.161,34.9967],[118.161,34.9967],[118.1608,34.9968],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1607,34.9969],[118.1605,34.997],[118.1605,34.997],[118.1605,34.997],[118.1605,34.9969],[118.1605,34.9968],[118.1605,34.9968],[118.1605,34.9968],[118.1604,34.9967],[118.1603,34.9967],[118.1601,34.9967],[118.1599,34.9967],[118.1598,34.9967],[118.1595,34.9967],[118.1593,34.9967],[118.1592,34.9967],[118.1592,34.9968],[118.1592,34.9968],[118.1592,34.9968],[118.1592,34.997],[118.1592,34.9971],[118.1593,34.9972],[118.1593,34.9972],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1593,34.9977],[118.1592,34.9978],[118.1592,34.9978],[118.1591,34.9978],[118.1589,34.9979],[118.1586,34.9979],[118.1586,34.9979],[118.1584,34.998],[118.1582,34.998],[118.1581,34.9981],[118.1579,34.9981],[118.1578,34.9981],[118.1577,34.9981],[118.1576,34.9981],[118.1576,34.9981],[118.1575,34.9981],[118.1574,34.9981],[118.1573,34.9981],[118.1572,34.9982],[118.1571,34.9982],[118.157,34.9982],[118.157,34.9982],[118.1568,34.9976],[118.1566,34.9972],[118.1566,34.9971],[118.1566,34.997],[118.1565,34.997],[118.1565,34.997],[118.1564,34.997],[118.1564,34.997],[118.1563,34.997],[118.1562,34.997],[118.1561,34.997],[118.1564,34.9979],[118.1565,34.9982],[118.1565,34.9982],[118.1564,34.9982],[118.1564,34.9982],[118.1564,34.9983],[118.1563,34.9983],[118.1562,34.9983],[118.1561,34.9983],[118.156,34.9983],[118.1559,34.9983],[118.1559,34.9983],[118.1557,34.9983],[118.1557,34.9983],[118.1557,34.9984],[118.1556,34.9984],[118.1555,34.9984],[118.1554,34.9983],[118.1554,34.9983],[118.1553,34.9983],[118.1553,34.9982],[118.1551,34.998],[118.155,34.9981],[118.1549,34.9981],[118.1548,34.9982],[118.1547,34.9982],[118.1546,34.9982],[118.1546,34.9982],[118.1546,34.9982],[118.1547,34.9984],[118.1548,34.9986],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1549,34.9987],[118.1546,34.9986],[118.1546,34.9988],[118.1544,34.9988],[118.1543,34.9988],[118.1541,34.9988],[118.154,34.9988],[118.1539,34.9988],[118.1538,34.9988],[118.1538,34.9988],[118.1537,34.9988],[118.1536,34.9988],[118.1534,34.9988],[118.1533,34.9988],[118.1532,34.9988],[118.1528,34.9988],[118.1526,34.9988],[118.1526,34.9988],[118.1525,34.9987],[118.1525,34.9987],[118.1524,34.9987],[118.1524,34.9987],[118.1523,34.9988],[118.1523,34.9988],[118.1523,34.9989],[118.1523,34.999],[118.1523,34.9991],[118.1522,34.9993],[118.1522,34.9992],[118.1518,34.9992],[118.1517,34.9992],[118.1515,34.9992],[118.1515,34.9992],[118.1515,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1514,34.9991],[118.1512,34.9991],[118.1511,34.9991],[118.1509,34.9991],[118.1508,34.999],[118.1508,34.999],[118.1508,34.999],[118.1507,34.999],[118.1507,34.999],[118.1506,34.9991],[118.1506,34.9991],[118.1506,34.9991],[118.1507,34.9993],[118.1507,34.9993],[118.1507,34.9993],[118.1507,34.9993],[118.1506,34.9994],[118.1506,34.9994],[118.1506,34.9994],[118.1506,34.9993],[118.1506,34.9993],[118.1505,34.9992],[118.1505,34.9992],[118.1505,34.9993],[118.1505,34.9994],[118.1505,34.9996],[118.1506,35],[118.1506,35.0003],[118.1506,35.0005],[118.1506,35.0008],[118.1502,35.0008],[118.1502,35.0008],[118.15,35.0008],[118.1499,35.0012],[118.1497,35.0019],[118.1497,35.002],[118.1496,35.0026],[118.1496,35.0026],[118.1496,35.0027],[118.1496,35.0031],[118.1495,35.0032],[118.1495,35.0036],[118.1495,35.0039],[118.1494,35.004],[118.1492,35.0041],[118.1492,35.0042],[118.1492,35.0042],[118.1494,35.0044],[118.1496,35.0045],[118.1499,35.0046],[118.15,35.0046],[118.1501,35.0045],[118.1502,35.0044],[118.1503,35.0043],[118.1503,35.0043],[118.1502,35.0042],[118.1502,35.0042],[118.1501,35.0041],[118.1501,35.0041],[118.1501,35.004],[118.1501,35.0039],[118.1501,35.0036],[118.1499,35.0036],[118.15,35.0032],[118.15,35.003],[118.1503,35.003],[118.1504,35.0026],[118.1504,35.0025],[118.1505,35.0024],[118.1505,35.0024],[118.1506,35.0024],[118.1508,35.0025],[118.1509,35.0026],[118.151,35.0026],[118.1511,35.0027],[118.1511,35.0026],[118.1511,35.003],[118.1511,35.0032],[118.1512,35.0034],[118.1512,35.0034],[118.1512,35.0035],[118.1512,35.0038],[118.1512,35.004],[118.1512,35.004],[118.1511,35.004],[118.1509,35.004],[118.1506,35.0041],[118.1506,35.0043],[118.1507,35.0043],[118.1507,35.0045],[118.1509,35.0045],[118.1511,35.0045],[118.1511,35.0045],[118.1511,35.0045],[118.1511,35.0046],[118.1511,35.0048],[118.1511,35.005],[118.1511,35.0051],[118.1511,35.0052],[118.1511,35.0052],[118.1509,35.0053],[118.1509,35.0055],[118.1509,35.0056],[118.1508,35.0056],[118.1508,35.0056],[118.1508,35.0057],[118.1508,35.0057],[118.1511,35.0057],[118.1511,35.0058],[118.1511,35.0059],[118.1512,35.0059],[118.1512,35.0059],[118.1512,35.0059],[118.1512,35.006],[118.1512,35.006],[118.1513,35.006],[118.1516,35.006],[118.1516,35.0064],[118.1517,35.0064],[118.1517,35.0064],[118.1518,35.0064],[118.152,35.0064],[118.152,35.0064],[118.152,35.0066],[118.152,35.0069],[118.152,35.0069],[118.152,35.0069],[118.1521,35.0071],[118.1521,35.0073],[118.1521,35.0075],[118.1522,35.0077],[118.1522,35.008],[118.1522,35.0084],[118.1523,35.0084],[118.1524,35.0084],[118.1525,35.0084],[118.1525,35.0082],[118.1527,35.0081],[118.1527,35.0084],[118.1527,35.0084],[118.1527,35.0085],[118.1527,35.0086],[118.1527,35.0086],[118.1528,35.009],[118.1527,35.0091],[118.1525,35.0091],[118.1525,35.0092],[118.1525,35.0094],[118.1525,35.0098],[118.1525,35.01],[118.1525,35.0101],[118.1525,35.0105],[118.1525,35.0106],[118.1525,35.0106],[118.1526,35.0106],[118.1526,35.0106],[118.1528,35.0106],[118.1532,35.0105],[118.1533,35.0105],[118.1542,35.0103],[118.1548,35.0102],[118.1548,35.0103],[118.1547,35.0104],[118.1547,35.0104],[118.1545,35.0104],[118.1545,35.0104],[118.1546,35.0108],[118.1547,35.011],[118.1547,35.011],[118.1548,35.011],[118.1549,35.011],[118.155,35.011],[118.1549,35.0108],[118.1548,35.0104],[118.1551,35.0103],[118.1558,35.0101],[118.1558,35.0101],[118.1559,35.0101],[118.1568,35.0098],[118.1568,35.0098],[118.1569,35.0101],[118.157,35.0103],[118.157,35.0105],[118.157,35.0105],[118.157,35.0106],[118.157,35.0108],[118.1571,35.011],[118.1571,35.0112],[118.1571,35.0113],[118.1574,35.0113],[118.1575,35.0113],[118.1576,35.0113],[118.1575,35.0107],[118.1576,35.0106],[118.1577,35.0108],[118.1581,35.0107],[118.1582,35.0114],[118.1585,35.0114],[118.1585,35.0114],[118.1586,35.0114],[118.1588,35.0114],[118.1589,35.0119],[118.159,35.0126],[118.1592,35.0125],[118.1592,35.0125],[118.1594,35.0124],[118.1594,35.0124],[118.1595,35.0123],[118.1596,35.0122],[118.1597,35.0121],[118.1598,35.0121],[118.1598,35.012],[118.1599,35.012],[118.1599,35.0122],[118.16,35.0126],[118.1601,35.0128],[118.1608,35.0127],[118.1605,35.0116],[118.1607,35.0115],[118.1607,35.0114],[118.161,35.0124],[118.1616,35.0123],[118.1613,35.0113],[118.1612,35.0112],[118.1612,35.011],[118.1612,35.0108],[118.1607,35.0109],[118.1607,35.0106],[118.1609,35.0106],[118.1607,35.0094],[118.1612,35.0093],[118.1614,35.0105],[118.1616,35.0105],[118.1614,35.0093],[118.1621,35.0091],[118.162,35.0087],[118.1626,35.0086],[118.1629,35.0083],[118.1633,35.0081],[118.1636,35.0079],[118.1636,35.0079],[118.1636,35.0078],[118.1638,35.0077],[118.1639,35.0076],[118.1641,35.0075],[118.1644,35.0074],[118.1644,35.0074],[118.1644,35.0073],[118.1644,35.0072],[118.1644,35.0071],[118.1645,35.0071],[118.1645,35.007],[118.1645,35.0068],[118.1644,35.0062],[118.1643,35.0062],[118.164,35.0061],[118.1639,35.0061],[118.1637,35.0061],[118.1637,35.0061],[118.1635,35.006],[118.1632,35.0058],[118.1629,35.0055],[118.1627,35.0054],[118.1627,35.0052],[118.1626,35.0047],[118.1626,35.0047],[118.1626,35.0047],[118.1625,35.0043],[118.1625,35.004],[118.1626,35.0039],[118.1627,35.0038],[118.163,35.0037],[118.1633,35.0049],[118.1635,35.0049],[118.1635,35.0052],[118.1635,35.0055],[118.1638,35.0054],[118.1639,35.0057],[118.1648,35.0056],[118.1647,35.005],[118.1646,35.0043],[118.1643,35.0027],[118.1644,35.0025],[118.1645,35.0025],[118.1645,35.0026],[118.1648,35.0026],[118.1651,35.005],[118.1653,35.005],[118.1655,35.0049],[118.1652,35.0038],[118.165,35.0026],[118.1653,35.0027],[118.1653,35.0033],[118.1654,35.0041],[118.1656,35.0049],[118.1657,35.0049],[118.1658,35.0049],[118.1657,35.0044],[118.1656,35.0041],[118.1655,35.0032],[118.1654,35.0027],[118.1656,35.0027],[118.1656,35.0025],[118.1651,35.0024],[118.1649,35.0024],[118.1647,35.0023],[118.1647,35.0023],[118.1647,35.0023],[118.1647,35.0019],[118.1647,35.0013],[118.1651,35.0015],[118.1653,35.0016],[118.1655,35.0017],[118.1654,35.0023],[118.1667,35.0025],[118.1667,35.0023],[118.1668,35.0021],[118.1668,35.0021],[118.1668,35.0021],[118.1668,35.002],[118.1668,35.0017],[118.1667,35.0015],[118.1666,35.0009],[118.1669,35.0009],[118.1669,35.0008],[118.1677,35.0008],[118.1683,35.0008],[118.1686,35.002],[118.1686,35.0024],[118.1686,35.0028],[118.1688,35.0028],[118.169,35.0029],[118.1688,35.0021],[118.1687,35.0014],[118.1685,35.0008],[118.1687,35.0008],[118.1689,35.0016],[118.169,35.0021],[118.1691,35.0026],[118.1691,35.0029],[118.1693,35.003],[118.1693,35.0025],[118.1691,35.0018],[118.1691,35.0014],[118.1695,35.0014]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006015","XZQMC":"土山洼村","KZMJ":1815623.17,"JSMJ":1815623.19,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1492,34.9947,118.1695,35.0128]}},{"type":"Feature","id":"cunjie_4326.48","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2631,35.0078],[118.2627,35.0077],[118.2624,35.007],[118.2622,35.0065],[118.2621,35.0063],[118.262,35.0061],[118.2619,35.0061],[118.262,35.0063],[118.2621,35.0065],[118.2625,35.0075],[118.2626,35.0077],[118.2623,35.0077],[118.2618,35.0065],[118.2617,35.0063],[118.2617,35.0063],[118.2615,35.0059],[118.2616,35.0059],[118.2616,35.0057],[118.2614,35.0054],[118.2613,35.0053],[118.2607,35.0054],[118.2602,35.0055],[118.2601,35.0055],[118.26,35.0056],[118.2595,35.0057],[118.2587,35.0059],[118.2585,35.0059],[118.2583,35.0057],[118.2587,35.0057],[118.2593,35.0055],[118.2593,35.0054],[118.259,35.0054],[118.2588,35.0055],[118.2587,35.0055],[118.2581,35.0056],[118.258,35.0056],[118.258,35.0055],[118.2579,35.0054],[118.2579,35.0054],[118.258,35.0054],[118.258,35.0054],[118.2581,35.0054],[118.2583,35.0054],[118.2583,35.0054],[118.2583,35.0054],[118.2585,35.0054],[118.2587,35.0053],[118.2588,35.0053],[118.2591,35.0053],[118.2592,35.0053],[118.2592,35.0052],[118.2591,35.0051],[118.2591,35.0051],[118.259,35.0048],[118.2588,35.0038],[118.2587,35.0035],[118.2586,35.0032],[118.2572,35.0035],[118.2562,35.0037],[118.256,35.0038],[118.2559,35.0034],[118.2559,35.0034],[118.2558,35.0034],[118.2564,35.0032],[118.2565,35.0032],[118.257,35.0031],[118.2577,35.003],[118.2585,35.0028],[118.2584,35.0026],[118.2584,35.0025],[118.2579,35.0026],[118.2574,35.0027],[118.2565,35.0029],[118.2564,35.0029],[118.2557,35.0031],[118.2557,35.0031],[118.2555,35.0027],[118.2555,35.0026],[118.2555,35.0026],[118.2549,35.0024],[118.2548,35.0024],[118.2548,35.0022],[118.2554,35.002],[118.2555,35.002],[118.2561,35.0018],[118.2563,35.0018],[118.2571,35.0016],[118.2575,35.0015],[118.2573,35.0011],[118.2571,35.0011],[118.257,35.001],[118.257,35.0006],[118.2569,35.0002],[118.2568,35],[118.2568,34.9999],[118.2568,34.9999],[118.2568,34.9999],[118.2564,34.9999],[118.2563,34.9999],[118.2563,34.9999],[118.256,34.9998],[118.2558,34.9997],[118.2557,34.9997],[118.2557,34.9997],[118.2557,34.9997],[118.2556,34.9995],[118.2555,34.9993],[118.2554,34.9991],[118.2553,34.9988],[118.2552,34.9984],[118.2552,34.9982],[118.2552,34.998],[118.2553,34.9978],[118.2553,34.9977],[118.2553,34.9977],[118.2554,34.9977],[118.2556,34.9977],[118.2558,34.9977],[118.2562,34.9977],[118.2563,34.9977],[118.2568,34.9977],[118.2569,34.9977],[118.2573,34.9977],[118.2573,34.9976],[118.2573,34.9973],[118.2572,34.9969],[118.2572,34.9966],[118.2572,34.9965],[118.2571,34.9962],[118.2571,34.996],[118.2565,34.9961],[118.2563,34.9961],[118.2561,34.9962],[118.2559,34.996],[118.2559,34.996],[118.2557,34.9958],[118.2557,34.9958],[118.2554,34.9955],[118.2554,34.9954],[118.2554,34.9954],[118.2551,34.9951],[118.2551,34.9951],[118.255,34.9949],[118.2549,34.995],[118.2546,34.995],[118.2546,34.995],[118.2545,34.9951],[118.2543,34.9951],[118.2544,34.9953],[118.2545,34.9954],[118.2545,34.9955],[118.2538,34.9959],[118.2536,34.9961],[118.2534,34.9959],[118.253,34.9962],[118.253,34.9955],[118.253,34.9954],[118.2522,34.9954],[118.2515,34.9954],[118.2513,34.9954],[118.2511,34.9954],[118.2507,34.9954],[118.2505,34.9954],[118.2502,34.9954],[118.2497,34.9954],[118.2497,34.9951],[118.2497,34.995],[118.2497,34.9949],[118.2497,34.9948],[118.2496,34.9947],[118.2496,34.9946],[118.2497,34.9946],[118.2496,34.9945],[118.2496,34.9944],[118.2496,34.9942],[118.2496,34.9941],[118.2496,34.994],[118.2496,34.9938],[118.2496,34.9937],[118.2496,34.9936],[118.2496,34.9935],[118.2495,34.9935],[118.2494,34.9935],[118.2493,34.9935],[118.2491,34.9935],[118.2489,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2488,34.9936],[118.2487,34.9936],[118.2486,34.9936],[118.2485,34.9936],[118.2485,34.9936],[118.2483,34.9936],[118.2481,34.9936],[118.2479,34.9936],[118.2475,34.9937],[118.2472,34.9937],[118.2471,34.9937],[118.2468,34.9937],[118.2468,34.994],[118.247,34.9941],[118.2472,34.9943],[118.2473,34.9944],[118.2475,34.9945],[118.2475,34.9946],[118.2476,34.9947],[118.2473,34.9947],[118.2463,34.9947],[118.2463,34.9947],[118.2462,34.9945],[118.246,34.9943],[118.2456,34.9937],[118.2452,34.9931],[118.2451,34.9934],[118.2449,34.9938],[118.2447,34.9942],[118.2446,34.9944],[118.2442,34.9942],[118.2434,34.9939],[118.2429,34.9938],[118.2427,34.9942],[118.2424,34.994],[118.2423,34.994],[118.2421,34.9939],[118.2413,34.9935],[118.2412,34.9935],[118.241,34.9939],[118.2408,34.9942],[118.2407,34.9944],[118.2406,34.9947],[118.2415,34.9947],[118.242,34.9947],[118.2421,34.9951],[118.2421,34.9955],[118.2421,34.9956],[118.2421,34.9959],[118.2422,34.9962],[118.2422,34.9968],[118.2423,34.997],[118.2423,34.9974],[118.2423,34.9977],[118.2424,34.998],[118.2424,34.9982],[118.2425,34.9987],[118.243,34.9986],[118.243,34.9988],[118.2438,34.9988],[118.2442,34.9987],[118.2442,34.999],[118.2443,35],[118.2444,35.0002],[118.2444,35.0002],[118.2444,35.0005],[118.2444,35.0005],[118.2444,35.0008],[118.2444,35.001],[118.2445,35.0013],[118.2445,35.0014],[118.2446,35.0023],[118.2446,35.0025],[118.2447,35.0037],[118.2448,35.0042],[118.2453,35.0042],[118.2462,35.0041],[118.2462,35.0041],[118.2463,35.0043],[118.2464,35.0043],[118.2464,35.0045],[118.2472,35.0045],[118.2472,35.0046],[118.2473,35.0051],[118.2474,35.0051],[118.2475,35.0055],[118.2481,35.0055],[118.2483,35.0055],[118.2493,35.0054],[118.2494,35.0054],[118.2494,35.0054],[118.2495,35.0054],[118.2497,35.0054],[118.2498,35.0054],[118.2502,35.0053],[118.2505,35.0052],[118.251,35.0051],[118.2511,35.0051],[118.2511,35.0051],[118.2512,35.0051],[118.2513,35.0051],[118.2514,35.005],[118.2515,35.005],[118.2516,35.005],[118.2518,35.0049],[118.2521,35.0048],[118.2524,35.0046],[118.2528,35.0045],[118.2532,35.0044],[118.2532,35.0052],[118.2534,35.0052],[118.2536,35.0052],[118.254,35.0052],[118.254,35.0059],[118.2541,35.0062],[118.2541,35.0065],[118.2541,35.0065],[118.2541,35.0068],[118.2541,35.0068],[118.2542,35.0071],[118.2542,35.0076],[118.2542,35.0079],[118.2543,35.0087],[118.2549,35.0087],[118.2551,35.0087],[118.2558,35.0088],[118.2561,35.0088],[118.257,35.0089],[118.2581,35.0089],[118.2588,35.009],[118.2589,35.0097],[118.2595,35.0095],[118.2597,35.0101],[118.2598,35.0105],[118.2598,35.0106],[118.2601,35.0105],[118.2604,35.0105],[118.2606,35.0104],[118.261,35.0103],[118.261,35.0103],[118.2612,35.0103],[118.263,35.0098],[118.2633,35.0098],[118.2635,35.0097],[118.2633,35.0087],[118.2632,35.0084],[118.2631,35.0078]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005014","XZQMC":"前崔家庄村","KZMJ":1730687.53,"JSMJ":1730687.53,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2406,34.9931,118.2635,35.0106]}},{"type":"Feature","id":"cunjie_4326.49","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2778,35.0044],[118.2788,35.0044],[118.2796,35.0043],[118.2802,35.0043],[118.2806,35.0043],[118.2805,35.0031],[118.2805,35.003],[118.2804,35.0022],[118.2804,35.002],[118.2803,35.0011],[118.2803,35.0005],[118.2804,35.0005],[118.2807,35.0005],[118.2807,35],[118.2807,34.9989],[118.2807,34.9988],[118.2807,34.9987],[118.2804,34.9987],[118.2801,34.9987],[118.2799,34.9987],[118.2791,34.9987],[118.2782,34.9988],[118.2778,34.9988],[118.2778,34.9988],[118.2778,34.9988],[118.2778,34.9987],[118.2778,34.9986],[118.2778,34.998],[118.2778,34.998],[118.2777,34.9975],[118.2777,34.9974],[118.2777,34.997],[118.2777,34.9969],[118.2768,34.997],[118.276,34.997],[118.2755,34.9971],[118.2754,34.9962],[118.2754,34.9957],[118.2753,34.9952],[118.2753,34.9951],[118.2748,34.9952],[118.2748,34.9952],[118.2747,34.9952],[118.2745,34.9952],[118.2744,34.9952],[118.2744,34.9952],[118.2743,34.9952],[118.2743,34.9952],[118.2739,34.9952],[118.2738,34.9952],[118.2732,34.9952],[118.2732,34.9952],[118.2732,34.9952],[118.2731,34.9948],[118.2726,34.9948],[118.2718,34.9949],[118.2708,34.995],[118.2708,34.9952],[118.2703,34.9952],[118.2703,34.9955],[118.2703,34.996],[118.2704,34.9967],[118.27,34.9967],[118.27,34.9967],[118.27,34.9966],[118.2697,34.9966],[118.2689,34.9964],[118.2688,34.9965],[118.2684,34.9965],[118.2678,34.9964],[118.2677,34.9966],[118.2673,34.9966],[118.2672,34.9968],[118.2665,34.9967],[118.2662,34.9967],[118.2661,34.997],[118.266,34.997],[118.2657,34.997],[118.2651,34.9971],[118.2651,34.997],[118.2651,34.9965],[118.2651,34.9963],[118.265,34.9958],[118.265,34.9953],[118.2646,34.9954],[118.2639,34.9955],[118.263,34.9957],[118.2631,34.9957],[118.2633,34.996],[118.2634,34.9962],[118.2635,34.9965],[118.2633,34.9966],[118.2632,34.9965],[118.2629,34.9961],[118.2626,34.9958],[118.2623,34.9954],[118.262,34.9951],[118.2616,34.9953],[118.2619,34.9956],[118.2618,34.9957],[118.2615,34.996],[118.2613,34.9962],[118.2611,34.9963],[118.261,34.9965],[118.2608,34.9966],[118.2606,34.9967],[118.2605,34.9968],[118.2603,34.9968],[118.2601,34.9968],[118.2602,34.9972],[118.2601,34.9972],[118.2598,34.9973],[118.2597,34.9973],[118.2597,34.9973],[118.2596,34.9973],[118.2596,34.9974],[118.2596,34.9975],[118.2596,34.9976],[118.2595,34.9976],[118.2594,34.9976],[118.2593,34.9977],[118.2593,34.9977],[118.2592,34.9978],[118.2592,34.9978],[118.2592,34.9979],[118.2591,34.9981],[118.259,34.9983],[118.2589,34.9986],[118.2588,34.9987],[118.2587,34.9989],[118.2586,34.9991],[118.2585,34.9992],[118.2585,34.9992],[118.2584,34.9992],[118.2582,34.9992],[118.258,34.9992],[118.2578,34.9992],[118.2574,34.9993],[118.2565,34.9993],[118.2565,34.9995],[118.2572,34.9994],[118.2572,34.9996],[118.2572,34.9996],[118.2573,34.9999],[118.2573,34.9999],[118.2568,34.9999],[118.2568,34.9999],[118.2568,35],[118.2569,35.0002],[118.257,35.0006],[118.257,35.001],[118.2571,35.0011],[118.2573,35.0011],[118.2575,35.0015],[118.2571,35.0016],[118.2563,35.0018],[118.2561,35.0018],[118.2555,35.002],[118.2554,35.002],[118.2548,35.0022],[118.2548,35.0024],[118.2549,35.0024],[118.2555,35.0026],[118.2555,35.0026],[118.2555,35.0027],[118.2557,35.0031],[118.2557,35.0031],[118.2564,35.0029],[118.2565,35.0029],[118.2574,35.0027],[118.2579,35.0026],[118.2584,35.0025],[118.2584,35.0026],[118.2585,35.0028],[118.2577,35.003],[118.257,35.0031],[118.2565,35.0032],[118.2564,35.0032],[118.2558,35.0034],[118.2559,35.0034],[118.2559,35.0034],[118.256,35.0038],[118.2562,35.0037],[118.2572,35.0035],[118.2586,35.0032],[118.2587,35.0035],[118.2588,35.0038],[118.259,35.0048],[118.2591,35.0051],[118.2591,35.0051],[118.2592,35.0052],[118.2592,35.0053],[118.2591,35.0053],[118.2588,35.0053],[118.2587,35.0053],[118.2585,35.0054],[118.2583,35.0054],[118.2583,35.0054],[118.2583,35.0054],[118.2581,35.0054],[118.258,35.0054],[118.258,35.0054],[118.2579,35.0054],[118.2579,35.0054],[118.258,35.0055],[118.258,35.0056],[118.2581,35.0056],[118.2587,35.0055],[118.2588,35.0055],[118.259,35.0054],[118.2593,35.0054],[118.2593,35.0055],[118.2587,35.0057],[118.2583,35.0057],[118.2585,35.0059],[118.2587,35.0059],[118.2595,35.0057],[118.26,35.0056],[118.2601,35.0055],[118.2602,35.0055],[118.2607,35.0054],[118.2613,35.0053],[118.2614,35.0054],[118.2616,35.0057],[118.2616,35.0059],[118.2615,35.0059],[118.2617,35.0063],[118.2617,35.0063],[118.2618,35.0065],[118.2623,35.0077],[118.2626,35.0077],[118.2625,35.0075],[118.2621,35.0065],[118.262,35.0063],[118.2619,35.0061],[118.262,35.0061],[118.2621,35.0063],[118.2622,35.0065],[118.2624,35.007],[118.2627,35.0077],[118.2631,35.0078],[118.263,35.0077],[118.2633,35.0076],[118.2636,35.0075],[118.2638,35.0075],[118.2641,35.0075],[118.2641,35.0075],[118.2642,35.0079],[118.266,35.0074],[118.2662,35.0074],[118.2665,35.0073],[118.2672,35.0072],[118.2673,35.0072],[118.2675,35.0072],[118.2695,35.0072],[118.2695,35.0066],[118.2695,35.0062],[118.2695,35.0059],[118.2695,35.0057],[118.2695,35.0048],[118.2713,35.0047],[118.2713,35.0047],[118.2713,35.0047],[118.2738,35.0046],[118.2744,35.0045],[118.2746,35.0045],[118.2751,35.0045],[118.2755,35.0045],[118.2761,35.0045],[118.2761,35.0045],[118.2762,35.0045],[118.2773,35.0044],[118.2773,35.0044],[118.2778,35.0044]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311005016","XZQMC":"湖西崖北村","KZMJ":2126087.75,"JSMJ":2126087.76,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.2548,34.9948,118.2807,35.0079]}},{"type":"Feature","id":"cunjie_4326.50","geometry":{"type":"MultiPolygon","coordinates":[[[[118.2093,35.0071],[118.2093,35.0062],[118.2092,35.0062],[118.2103,35.0061],[118.2111,35.0061],[118.2115,35.006],[118.2114,35.0057],[118.2115,35.0057],[118.2118,35.0057],[118.2119,35.0057],[118.212,35.0057],[118.2117,35.0034],[118.2115,35.0027],[118.2115,35.0024],[118.2115,35.0021],[118.2116,35.0018],[118.2118,35.0016],[118.2119,35.0015],[118.212,35.0015],[118.2122,35.0014],[118.213,35.0012],[118.2131,35.0011],[118.2134,35.001],[118.2135,35.0008],[118.2135,35.0003],[118.2136,35],[118.2135,34.9987],[118.2135,34.9979],[118.2135,34.9965],[118.2133,34.9965],[118.2131,34.9965],[118.2129,34.9966],[118.2127,34.9966],[118.2124,34.9966],[118.2124,34.9963],[118.2123,34.9958],[118.2123,34.9952],[118.2122,34.9947],[118.2121,34.9945],[118.2121,34.9943],[118.2121,34.9943],[118.212,34.9938],[118.212,34.9937],[118.2108,34.9937],[118.2106,34.9923],[118.2103,34.9922],[118.2097,34.9922],[118.2097,34.9921],[118.2097,34.992],[118.2096,34.9918],[118.2096,34.9916],[118.2096,34.9915],[118.2096,34.9914],[118.2096,34.9912],[118.2095,34.9912],[118.2095,34.9911],[118.2095,34.9909],[118.2095,34.9909],[118.2095,34.9908],[118.2095,34.9908],[118.2095,34.9907],[118.2095,34.9906],[118.2094,34.9906],[118.2094,34.9904],[118.2094,34.9902],[118.2094,34.9902],[118.2094,34.9902],[118.2089,34.9902],[118.2085,34.9902],[118.2084,34.9902],[118.2083,34.9902],[118.208,34.9903],[118.2079,34.9903],[118.2078,34.9904],[118.2076,34.991],[118.2076,34.991],[118.2076,34.991],[118.2076,34.9911],[118.2076,34.9911],[118.2076,34.9911],[118.2076,34.9911],[118.2075,34.9916],[118.2075,34.9919],[118.2074,34.9925],[118.2074,34.9925],[118.2074,34.9925],[118.2074,34.9926],[118.2074,34.9928],[118.2074,34.993],[118.2073,34.9932],[118.2073,34.9932],[118.2073,34.9933],[118.2073,34.9934],[118.2073,34.9935],[118.2073,34.9935],[118.2072,34.9935],[118.2066,34.9935],[118.2066,34.9934],[118.2066,34.9932],[118.2067,34.9924],[118.2065,34.9924],[118.2064,34.9924],[118.2063,34.9924],[118.2058,34.9924],[118.2058,34.9924],[118.2049,34.9924],[118.2049,34.9919],[118.2049,34.9919],[118.2047,34.9919],[118.2047,34.9916],[118.2046,34.9915],[118.2047,34.9914],[118.2047,34.9914],[118.2048,34.9913],[118.2048,34.9909],[118.2048,34.9909],[118.204,34.9909],[118.204,34.9909],[118.204,34.9909],[118.204,34.991],[118.2039,34.9911],[118.2039,34.9911],[118.2039,34.9912],[118.2039,34.9913],[118.2039,34.9915],[118.2039,34.9917],[118.2038,34.9921],[118.2029,34.9921],[118.2028,34.992],[118.2028,34.9916],[118.2028,34.9913],[118.2029,34.9911],[118.2028,34.9912],[118.2027,34.9915],[118.2026,34.9917],[118.2023,34.9916],[118.2022,34.9921],[118.2022,34.9921],[118.2022,34.9921],[118.202,34.9923],[118.2021,34.9925],[118.202,34.9925],[118.202,34.9926],[118.2019,34.9925],[118.2019,34.9924],[118.2018,34.9918],[118.2017,34.9918],[118.2017,34.9918],[118.2017,34.9918],[118.2017,34.9918],[118.2016,34.9919],[118.2016,34.9921],[118.2012,34.9921],[118.2011,34.9925],[118.2008,34.9935],[118.2005,34.9934],[118.2005,34.9926],[118.2005,34.9926],[118.2003,34.9927],[118.2003,34.9927],[118.2002,34.9934],[118.2001,34.9934],[118.2,34.9934],[118.2001,34.9926],[118.1998,34.9926],[118.1998,34.9929],[118.1997,34.9931],[118.1997,34.9933],[118.1997,34.9933],[118.1996,34.9937],[118.1995,34.9941],[118.1994,34.9945],[118.1993,34.9946],[118.1992,34.9948],[118.1988,34.9948],[118.1988,34.9948],[118.1987,34.9947],[118.1985,34.9947],[118.1985,34.9947],[118.1984,34.9947],[118.1982,34.9946],[118.198,34.9946],[118.198,34.9946],[118.1977,34.9945],[118.1976,34.9945],[118.1975,34.9945],[118.1974,34.9944],[118.1973,34.9944],[118.197,34.9954],[118.197,34.9954],[118.1969,34.9957],[118.1968,34.996],[118.1967,34.9961],[118.1968,34.9961],[118.1969,34.9962],[118.197,34.9963],[118.197,34.9963],[118.1971,34.9963],[118.1973,34.9964],[118.1975,34.9964],[118.1978,34.9965],[118.1978,34.9965],[118.1976,34.997],[118.1975,34.9973],[118.1977,34.9974],[118.1977,34.9974],[118.1976,34.9976],[118.1975,34.9977],[118.1973,34.998],[118.1972,34.9981],[118.1971,34.9982],[118.197,34.9983],[118.197,34.9984],[118.1968,34.9987],[118.1968,34.9987],[118.1968,34.9988],[118.1967,34.9988],[118.1967,34.9989],[118.1967,34.9989],[118.1969,34.999],[118.197,34.999],[118.197,34.999],[118.197,34.9989],[118.197,34.9988],[118.1979,34.9976],[118.1979,34.9976],[118.198,34.9976],[118.1981,34.9976],[118.1981,34.9978],[118.1981,34.9978],[118.1982,34.9978],[118.1983,34.9978],[118.1984,34.9978],[118.1984,34.9978],[118.1984,34.9978],[118.1985,34.9979],[118.1984,34.9982],[118.1984,34.9983],[118.1987,34.9984],[118.1987,34.9984],[118.1987,34.9986],[118.1987,34.9986],[118.1988,34.9986],[118.1992,34.9986],[118.1992,34.9986],[118.1992,34.9985],[118.1992,34.9983],[118.1993,34.9981],[118.1993,34.998],[118.1997,34.9979],[118.1997,34.9979],[118.2,34.998],[118.2003,34.998],[118.2003,34.9984],[118.2003,34.9984],[118.2002,34.9986],[118.2002,34.9988],[118.2002,34.9988],[118.2002,34.999],[118.2001,34.9997],[118.2008,34.9997],[118.2009,34.9997],[118.2012,34.9997],[118.2019,34.9997],[118.202,34.9997],[118.2021,34.9998],[118.2023,34.9998],[118.2023,34.9998],[118.2023,34.9998],[118.2021,35],[118.202,35.0001],[118.2026,35.0002],[118.2026,35.0003],[118.2026,35.0004],[118.2025,35.0008],[118.2025,35.0008],[118.2023,35.0016],[118.2024,35.0017],[118.2025,35.0017],[118.2028,35.0017],[118.2029,35.0017],[118.203,35.0017],[118.2031,35.0017],[118.2031,35.0018],[118.2031,35.0019],[118.2031,35.002],[118.2031,35.002],[118.2031,35.0023],[118.2031,35.0023],[118.2031,35.0025],[118.2031,35.0025],[118.2031,35.0026],[118.2031,35.003],[118.2032,35.0033],[118.2032,35.0035],[118.2032,35.0041],[118.2033,35.0044],[118.2033,35.0046],[118.2033,35.0048],[118.2033,35.0049],[118.2035,35.0069],[118.2035,35.0071],[118.2044,35.0071],[118.2045,35.0079],[118.2053,35.0079],[118.2058,35.0079],[118.2058,35.0079],[118.2058,35.0079],[118.2062,35.0079],[118.2062,35.0079],[118.2065,35.0078],[118.2068,35.0078],[118.2072,35.0078],[118.2073,35.0078],[118.2077,35.0078],[118.2077,35.0078],[118.2083,35.0078],[118.2083,35.0078],[118.2089,35.0078],[118.2089,35.0078],[118.2094,35.0077],[118.2094,35.0076],[118.2093,35.0074],[118.2093,35.0071]]]]},"geometry_name":"the_geom","properties":{"XZQDM":"371311006025","XZQMC":"西陆庄村","KZMJ":1772213.13,"JSMJ":1772213.12,"QJW":3.71311006E8,"乡镇名":"罗西街道","BZ":"","bbox":[118.1967,34.9902,118.2136,35.0079]}}],"totalFeatures":71,"numberMatched":71,"numberReturned":50,"timeStamp":"2021-04-06T06:46:54.009Z","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[118.1051,34.949,118.2807,35.1155]} \ No newline at end of file diff --git a/public/industry/img/360.png b/public/industry/img/360.png new file mode 100644 index 0000000..5bae4b7 Binary files /dev/null and b/public/industry/img/360.png differ diff --git a/public/industry/img/camera.png b/public/industry/img/camera.png new file mode 100644 index 0000000..84c9892 Binary files /dev/null and b/public/industry/img/camera.png differ diff --git a/public/industry/img/check-box.png b/public/industry/img/check-box.png new file mode 100644 index 0000000..9d8f1de Binary files /dev/null and b/public/industry/img/check-box.png differ diff --git a/public/industry/img/checkbox.png b/public/industry/img/checkbox.png new file mode 100644 index 0000000..9400b03 Binary files /dev/null and b/public/industry/img/checkbox.png differ diff --git a/public/industry/img/close-a.png b/public/industry/img/close-a.png new file mode 100644 index 0000000..360fee8 Binary files /dev/null and b/public/industry/img/close-a.png differ diff --git a/public/industry/img/close.png b/public/industry/img/close.png new file mode 100644 index 0000000..824db96 Binary files /dev/null and b/public/industry/img/close.png differ diff --git a/public/industry/img/layer-cate.png b/public/industry/img/layer-cate.png new file mode 100644 index 0000000..b136a43 Binary files /dev/null and b/public/industry/img/layer-cate.png differ diff --git a/public/industry/img/logo.png b/public/industry/img/logo.png new file mode 100644 index 0000000..ed71011 Binary files /dev/null and b/public/industry/img/logo.png differ diff --git a/public/industry/img/menu-btn.png b/public/industry/img/menu-btn.png new file mode 100644 index 0000000..fd0e676 Binary files /dev/null and b/public/industry/img/menu-btn.png differ diff --git a/public/industry/img/position.png b/public/industry/img/position.png new file mode 100644 index 0000000..bec7068 Binary files /dev/null and b/public/industry/img/position.png differ diff --git a/public/industry/img/search.png b/public/industry/img/search.png new file mode 100644 index 0000000..e61861e Binary files /dev/null and b/public/industry/img/search.png differ diff --git a/public/industry/img/search1.png b/public/industry/img/search1.png new file mode 100644 index 0000000..7788837 Binary files /dev/null and b/public/industry/img/search1.png differ diff --git a/public/industry/img/title-bg.png b/public/industry/img/title-bg.png new file mode 100644 index 0000000..fddb488 Binary files /dev/null and b/public/industry/img/title-bg.png differ diff --git a/public/industry/img/user.png b/public/industry/img/user.png new file mode 100644 index 0000000..3292ee9 Binary files /dev/null and b/public/industry/img/user.png differ diff --git a/public/industry/img/weather.png b/public/industry/img/weather.png new file mode 100644 index 0000000..457ab26 Binary files /dev/null and b/public/industry/img/weather.png differ diff --git a/public/industry/img/保存.png b/public/industry/img/保存.png new file mode 100644 index 0000000..ab74c04 Binary files /dev/null and b/public/industry/img/保存.png differ diff --git a/public/industry/img/打印.png b/public/industry/img/打印.png new file mode 100644 index 0000000..fc725b5 Binary files /dev/null and b/public/industry/img/打印.png differ diff --git a/public/industry/img/清空.png b/public/industry/img/清空.png new file mode 100644 index 0000000..ba8cf62 Binary files /dev/null and b/public/industry/img/清空.png differ diff --git a/public/industry/img/点.png b/public/industry/img/点.png new file mode 100644 index 0000000..c102bdf Binary files /dev/null and b/public/industry/img/点.png differ diff --git a/public/industry/img/监控 (1).png b/public/industry/img/监控 (1).png new file mode 100644 index 0000000..0a5d050 Binary files /dev/null and b/public/industry/img/监控 (1).png differ diff --git a/public/industry/img/监控.png b/public/industry/img/监控.png new file mode 100644 index 0000000..81a0761 Binary files /dev/null and b/public/industry/img/监控.png differ diff --git a/public/industry/img/线.png b/public/industry/img/线.png new file mode 100644 index 0000000..6f630ef Binary files /dev/null and b/public/industry/img/线.png differ diff --git a/public/industry/img/距离.png b/public/industry/img/距离.png new file mode 100644 index 0000000..f3b8cae Binary files /dev/null and b/public/industry/img/距离.png differ diff --git a/public/industry/img/面.png b/public/industry/img/面.png new file mode 100644 index 0000000..6608575 Binary files /dev/null and b/public/industry/img/面.png differ diff --git a/public/industry/img/面积.png b/public/industry/img/面积.png new file mode 100644 index 0000000..3128976 Binary files /dev/null and b/public/industry/img/面积.png differ diff --git a/public/layer/layer.js b/public/layer/layer.js new file mode 100644 index 0000000..c2f009b --- /dev/null +++ b/public/layer/layer.js @@ -0,0 +1,2 @@ +/*! layer-v3.1.1 Web弹层组件 MIT License http://layer.layui.com/ By 贤心 */ + ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
'+(f?r.title[0]:r.title)+"
":"";return r.zIndex=s,t([r.shade?'
':"",'
'+(e&&2!=r.type?"":u)+'
'+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
'+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
'+e+"
"}():"")+(r.resize?'':"")+"
"],u,i('
')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
    '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
  • '+(t[0].content||"no content")+"
  • ";i'+(t[i].content||"no content")+"";return a}()+"
",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||
'+(u.length>1?'':"")+'
'+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); \ No newline at end of file diff --git a/public/layer/mobile/layer.js b/public/layer/mobile/layer.js new file mode 100644 index 0000000..09b5494 --- /dev/null +++ b/public/layer/mobile/layer.js @@ -0,0 +1,2 @@ +/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */ + ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'

'+(e?n.title[0]:n.title)+"

":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),'
'+e+"
"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='

'+(n.content||"")+"

"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"
':"")+'
"+l+'
'+n.content+"
"+c+"
",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} \ No newline at end of file diff --git a/public/layer/theme/default/icon-ext.png b/public/layer/theme/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/public/layer/theme/default/icon-ext.png differ diff --git a/public/layer/theme/default/icon.png b/public/layer/theme/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/public/layer/theme/default/icon.png differ diff --git a/public/layer/theme/default/layer.css b/public/layer/theme/default/layer.css new file mode 100644 index 0000000..820b4a9 --- /dev/null +++ b/public/layer/theme/default/layer.css @@ -0,0 +1 @@ +.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/public/layer/theme/default/loading-0.gif b/public/layer/theme/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/public/layer/theme/default/loading-0.gif differ diff --git a/public/layer/theme/default/loading-1.gif b/public/layer/theme/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/public/layer/theme/default/loading-1.gif differ diff --git a/public/layer/theme/default/loading-2.gif b/public/layer/theme/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/public/layer/theme/default/loading-2.gif differ diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json new file mode 100644 index 0000000..0dbf157 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":0,"numberOfSamples":1000,"samples":[-0.002403025022753476,-2.5083047211757836e-5,-1.721638967214743e-8,-0.002402558217007106,-2.5020003017226545e-5,-1.7146589882925253e-8,-0.002402152743739069,-2.4908815008776256e-5,-1.7018183343380784e-8,-0.0024018177616850914,-2.4779340864272868e-5,-1.686693112266686e-8,-0.0024015512294922256,-2.4661265859267777e-5,-1.672851429567895e-8,-0.0024013415089134365,-2.4580601237402673e-5,-1.6634308307010567e-8,-0.0024011692853140917,-2.4557354638250633e-5,-1.660856911234815e-8,-0.0024010094083213077,-2.460379520847823e-5,-1.666634004388421e-8,-0.002400832781870665,-2.472274606391698e-5,-1.681138635859172e-8,-0.0024006088674261195,-2.490565851910724e-5,-1.7033840158805374e-8,-0.0024003096414815053,-2.513083477542098e-5,-1.7307985763326293e-8,-0.002399915678730765,-2.5363106308028472e-5,-1.759177707540246e-8,-0.0023994239684226163,-2.5557205638682287e-5,-1.7830822072448312e-8,-0.0023988549431304905,-2.566700881355288e-5,-1.7969488578482e-8,-0.0023982538707374547,-2.5660422954022525e-5,-1.7968844164137065e-8,-0.002397681821948537,-2.553480284678542e-5,-1.7825226886235993e-8,-0.0023971964165357008,-2.53237668313255e-5,-1.7578462540315414e-8,-0.002396830441918346,-2.50885777844268e-5,-1.7301586465142487e-8,-0.0023965800106651434,-2.4896546614298096e-5,-1.7075078798371497e-8,-0.0023964084361551537,-2.4797687943490375e-5,-1.695902560230991e-8,-0.002396262002993096,-2.481096708533641e-5,-1.6976666372280337e-8,-0.0023960882393536166,-2.4923817586803518e-5,-1.7113670694608337e-8,-0.002395849219877066,-2.5101106375207836e-5,-1.732863106912266e-8,-0.002395527525579831,-2.5297461255455714e-5,-1.756761197379987e-8,-0.0023951260596151974,-2.546854998291281e-5,-1.7777564319951067e-8,-0.0023946640036132836,-2.5579325396643004e-5,-1.7916241394922998e-8,-0.0023941708783994835,-2.5608875350224024e-5,-1.7958135357141878e-8,-0.0023936800199459637,-2.5552141704174967e-5,-1.7896681829365477e-8,-0.00239322243029576,-2.5418865388500117e-5,-1.774311016303839e-8,-0.0023928218677541743,-2.5230314934074022e-5,-1.7522587181791123e-8,-0.0023924917832175113,-2.5014690159013176e-5,-1.7268730448048223e-8,-0.0023922342643846748,-2.480218762163173e-5,-1.7017686942652696e-8,-0.0023920407464684762,-2.4620565317509125e-5,-1.6802798466007283e-8,-0.0023918939307276768,-2.4491771693316273e-5,-1.6650542584010726e-8,-0.0023917702332855676,-2.442975015807349e-5,-1.6577888357278284e-8,-0.002391642329452238,-2.443909807420655e-5,-1.6590679729922046e-8,-0.002391481763245852,-2.4514179502452957e-5,-1.6682551340715887e-8,-0.0023912619080620466,-2.4638499724969643e-5,-1.6834129065335303e-8,-0.002390961805205984,-2.478455800610903e-5,-1.701276797456279e-8,-0.00239057134744484,-2.4915132198915024e-5,-1.717399678816932e-8,-0.0023900974268101054,-2.4987729973603072e-5,-1.7266795508165544e-8,-0.0023895689055318833,-2.496391501976109e-5,-1.7244787681999786e-8,-0.002389036165074365,-2.4823284691699932e-5,-1.7083063873624844e-8,-0.002388560578292379,-2.4577378315217863e-5,-1.6794918110509053e-8,-0.0023881937570601162,-2.4274142413621198e-5,-1.643724545979219e-8,-0.0023879553394346147,-2.3985163329236852e-5,-1.6095335313882396e-8,-0.002387823242597225,-2.3778727505381422e-5,-1.5850778179207802e-8,-0.002387743703083488,-2.3693514905278695e-5,-1.575012576846581e-8,-0.002387654469699301,-2.3727803248252375e-5,-1.57919573836453e-8,-0.0023875068224310926,-2.384701163322787e-5,-1.5935693828749185e-8,-0.0023872766838733636,-2.4000872036063545e-5,-1.6121849968027748e-8,-0.0023869645383715133,-2.4139837531397063e-5,-1.6291451853276617e-8,-0.0023865890688437295,-2.4225578577636494e-5,-1.6398545934918142e-8,-0.002386179207668243,-2.4235415814278647e-5,-1.641560182566368e-8,-0.0023857671367677994,-2.4162608465253676e-5,-1.633403013000638e-8,-0.00238538293231372,-2.4014446579879058e-5,-1.6162059832962554e-8,-0.002385050648932289,-2.3809267842749758e-5,-1.5921265822080736e-8,-0.0023847856192039767,-2.357281279621325e-5,-1.564223465313254e-8,-0.002384592973846085,-2.333418942320294e-5,-1.5359717819261274e-8,-0.0023844674152753756,-2.3121781930974167e-5,-1.5107704928910368e-8,-0.0023843942234786524,-2.2959461734624766e-5,-1.491486592392592e-8,-0.002384351361188566,-2.2863520256191973e-5,-1.4800873864748202e-8,-0.0023843123252193354,-2.28406536006252e-5,-1.4773996666932113e-8,-0.0023842493365599203,-2.2887020091128393e-5,-1.4829969279080835e-8,-0.0023841366567967904,-2.2988230871289267e-5,-1.4951960812478233e-8,-0.0023839539952364617,-2.312021069380629e-5,-1.5111546301631272e-8,-0.00238369008534005,-2.3251022890859802e-5,-1.527079819049034e-8,-0.0023833464925758774,-2.3344139544444378e-5,-1.5386101234343148e-8,-0.002382941139623567,-2.336411463944466e-5,-1.5414884137776942e-8,-0.002382509826925251,-2.328539769468119e-5,-1.532618136616557e-8,-0.0023821027927208825,-2.3103440347943915e-5,-1.5114003628255345e-8,-0.002381773349088804,-2.284408291453904e-5,-1.4808671898883374e-8,-0.0023815590512039917,-2.2563826220574735e-5,-1.4477243667166011e-8,-0.002381463086871345,-2.233471929550198e-5,-1.4205559558666824e-8,-0.0023814485095478804,-2.221697578834785e-5,-1.4065641166745777e-8,-0.002381452228381859,-2.2233998994991225e-5,-1.4085907881538568e-8,-0.002381411455037569,-2.2365307161191684e-5,-1.424262147988882e-8,-0.0023812864408547367,-2.2559894107652725e-5,-1.447559680357265e-8,-0.002381068549780454,-2.2758766135733266e-5,-1.4714854003566721e-8,-0.0023807747559344136,-2.291337561706086e-5,-1.4902487127724783e-8,-0.002380436370789755,-2.2994297064707167e-5,-1.5003052078078702e-8,-0.0023800885646524635,-2.299177707261808e-5,-1.5004382649226507e-8,-0.00237976327801646,-2.291211671228343e-5,-1.4913466509235396e-8,-0.0023794853741548514,-2.277298527889861e-5,-1.4750994633350504e-8,-0.0023792708581126575,-2.2599122259547465e-5,-1.4546281765613793e-8,-0.0023791261518308006,-2.241861685502684e-5,-1.4332799297124966e-8,-0.002379048025038435,-2.2259517123002332e-5,-1.4144070736454437e-8,-0.002379024159088545,-2.214660348294054e-5,-1.4009774292460906e-8,-0.0023790344674725033,-2.209831973031592e-5,-1.395206580492697e-8,-0.0023790533562057336,-2.2124111902023713e-5,-1.3982415286808531e-8,-0.002379052917494198,-2.222265873839312e-5,-1.4099513692685225e-8,-0.0023790067355613062,-2.238139064397462e-5,-1.428869841454831e-8,-0.002378893869389061,-2.257747476862916e-5,-1.4523091866730754e-8,-0.002378702581053121,-2.2780337278386994e-5,-1.476653436627111e-8,-0.002378433361551305,-2.2955662245878917e-5,-1.4978254730954575e-8,-0.002378100828725866,-2.3070719458652143e-5,-1.511914018072533e-8,-0.0023777339193535064,-2.310095367991105e-5,-1.515956714522654e-8,-0.0023773732909614727,-2.303748192499462e-5,-1.5088399696609955e-8,-0.0023770645160716658,-2.2893966475516838e-5,-1.492131520640025e-8,-0.002376846389675512,-2.2709585344523315e-5,-1.4704506770614907e-8,-0.0023767362857042957,-2.2543662682762967e-5,-1.4508420483594385e-8,-0.0023767187552697256,-2.2459283627088534e-5,-1.4408307234147157e-8,-0.0023767459611238515,-2.2499820209175073e-5,-1.445625065299755e-8,-0.0023767538670920077,-2.2670163085399482e-5,-1.4658709621930782e-8,-0.0023766872411040843,-2.2934727415897178e-5,-1.4973964372283597e-8,-0.0023765193201164465,-2.323369224805631e-5,-1.5331258141108677e-8,-0.0023762563410213845,-2.350669143427009e-5,-1.5658866089500266e-8,-0.002375928430938125,-2.371079089789632e-5,-1.5905466616878e-8,-0.0023755754730009244,-2.382701217823089e-5,-1.6047996748580552e-8,-0.0023752354105984904,-2.3857755177899014e-5,-1.6088754695381856e-8,-0.002374937643938984,-2.3820288416794153e-5,-1.6047823960984603e-8,-0.002374700710601401,-2.3740166302795695e-5,-1.5955340321399732e-8,-0.0023745323579410426,-2.364615831678585e-5,-1.584546360315411e-8,-0.002374430478790293,-2.356666639934087e-5,-1.575205426032653e-8,-0.002374384221762089,-2.352701024171114e-5,-1.57053729084508e-8,-0.0023743752258978223,-2.3547031862098734e-5,-1.572919102890182e-8,-0.0023743792463522813,-2.3638741087943782e-5,-1.5837991897107692e-8,-0.002374368580960303,-2.380412406762251e-5,-1.60343866710735e-8,-0.002374315566041234,-2.403369636554169e-5,-1.6307405665562255e-8,-0.0023741969508027684,-2.4306554286211768E-05,-1.663253558578559e-8,-0.0023739984897390765,-2.4592488041431972e-5,-1.6974166769903272e-8,-0.0023737187937815855,-2.485635257581502e-5,-1.729069822860392e-8,-0.0023733713634909127,-2.506433547134887e-5,-1.75419012861819e-8,-0.002372983923689407,-2.5191127286277645e-5,-1.769739737193478e-8,-0.002372594652471399,-2.5226659292504724e-5,-1.774469317666995e-8,-0.0023722453489884105,-2.518097690876975e-5,-1.7695084665231785e-8,-0.0023719720500917853,-2.508558541252764e-5,-1.758542950683843e-8,-0.0023717945137316262,-2.4989429346639012e-5,-1.7473550411127092e-8,-0.002371707467356645,-2.494832237534192e-5,-1.7425795584798645e-8,-0.002371677894372136,-2.5008867215187453e-5,-1.7497939205762146e-8,-0.0023716521953735695,-2.519167607485704e-5,-1.7715125311405072e-8,-0.002371573067713854,-2.548183725590846e-5,-1.8060341886620035e-8,-0.0023713996123746663,-2.5833052724984733e-5,-1.8479137373701417e-8,-0.002371120733790304,-2.6184543627960917e-5,-1.8899572452170946e-8,-0.002370755545988175,-2.6481976563885553e-5,-1.925703522704526e-8,-0.0023703426289241364,-2.6692240399045317e-5,-1.951183288718046e-8,-0.002369925545652223,-2.6807480392539526e-5,-1.9654094044252732e-8,-0.0023695414256623836,-2.6840554567015164e-5,-1.969852847864199e-8,-0.0023692152111846727,-2.681698378371743e-5,-1.9675010651785046e-8,-0.0023689586030738027,-2.676742403134865e-5,-1.961971546979294e-8,-0.002368771517557994,-2.672230169153053e-5,-1.9568738474777108e-8,-0.0023686442754798733,-2.6708491821190418e-5,-1.9554090992955217e-8,-0.0023685596467347297,-2.6747237733667733e-5,-1.960116950419851e-8,-0.0023684946354959537,-2.68525198499682e-5,-1.97267938434712e-8,-0.002368422377939945,-2.7029396546161804e-5,-1.9937245693158044e-8,-0.002368314731930507,-2.7272358283705946e-5,-2.0226327583010683e-8,-0.002368145999280894,-2.7564325967266348e-5,-2.0574158419038293e-8,-0.0023678977178564387,-2.7877297359742607e-5,-2.0947880438817348e-8,-0.002367563716932125,-2.8175607003251493e-5,-2.13054362009557e-8,-0.0023671538835179904,-2.842219417818171e-5,-2.1602912348808545e-8,-0.0023666947656918185,-2.8587099112517685e-5,-2.1804557557978034e-8,-0.002366225711058261,-2.865603679897383e-5,-2.1892948933762033e-8,-0.0023657906850576426,-2.8636207775475263e-5,-2.1875955583981355e-8,-0.0023654275601418958,-2.855700316341736e-5,-2.178772414823076e-8,-0.0023651577407058874,-2.8464659629023123e-5,-2.168254086275059e-8,-0.002364979157822262,-2.8411626526095733e-5,-2.162241058543541e-8,-0.0023648650418965824,-2.8442979454826838e-5,-2.166103733977592e-8,-0.0023647696710966484,-2.858341235909699e-5,-2.182833892955203e-8,-0.0023646404647817425,-2.8828964162584613e-5,-2.2120438590644107e-8,-0.002364433315624853,-2.9147094222646294e-5,-2.2499504905555506e-8,-0.0023641258489594833,-2.9486173871872614e-5,-2.2904806040155516e-8,-0.0023637232753826293,-2.979130710829397e-5,-2.3271375506734424e-8,-0.0023632546433513643,-3.0020135017275484e-5,-2.3548762139194928e-8,-0.002362761919778162,-3.0152532930312014e-5,-2.371261331000258e-8,-0.002362287259213515,-3.019176737033716e-5,-2.3766181246292998e-8,-0.002361863354709199,-3.015895406508579e-5,-2.3733906423839642e-8,-0.0023615089325091636,-3.0084812691876054e-5,-2.3651770841389847e-8,-0.00236122863993826,-3.0002168291456246e-5,-2.355846990290136e-8,-0.002361015342081342,-2.9940748794497447e-5,-2.3489231721847384e-8,-0.002360853090462664,-2.99242064708113e-5,-2.347223119682423e-8,-0.0023607198261957722,-2.9968579872684983e-5,-2.352671480071416e-8,-0.0023605896206938806,-3.008134175253829e-5,-2.3661849584525067e-8,-0.002360434817332799,-3.0260449420114613e-5,-2.3875596082544623e-8,-0.002360228724551759,-3.049336232044938e-5,-2.4153533560309604e-8,-0.002359949398259028,-3.0756647438100245e-5,-2.4468344706144205e-8,-0.0023595845450922696,-3.1017291850921676e-5,-2.4781284325725616e-8,-0.0023591366902662777,-3.1236974924948935e-5,-2.5047141991886597e-8,-0.0023586265980894577,-3.1379935910133564e-5,-2.5223485405296768e-8,-0.0023580922330621156,-3.1423318194842274e-5,-2.5282880705071384e-8,-0.002357581446433621,-3.136654245445751e-5,-2.5224014627911062e-8,-0.0023571393504713037,-3.123511772789739e-5,-2.507629936540768e-8,-0.0023567945569627356,-3.107585378526121e-5,-2.4894381030997065e-8,-0.002356549808293787,-3.094425143746427e-5,-2.474345004782824e-8,-0.0023563808398743354,-3.088856588907149e-5,-2.468058353057825e-8,-0.002356243673347264,-3.093631165990455e-5,-2.473883210055294e-8,-0.0023560873309623623,-3.108742146766624e-5,-2.491898425872327e-8,-0.002355867681615853,-3.131543790559243e-5,-2.5190695953120915e-8,-0.0023555585115042363,-3.157564626292947e-5,-2.5501820575724358e-8,-0.0023551570793018816,-3.1817414987353845e-5,-2.5792819079502532e-8,-0.0023546830395721335,-3.199708556138092e-5,-2.601196397786125e-8,-0.0023541715928763573,-3.2087761735616844e-5,-2.612699814404651e-8,-0.0023536634728575476,-3.208356074308803e-5,-2.6130313106072467e-8,-0.002353195112875602,-3.199796079202877e-5,-2.6037164980856268e-8,-0.0023527917127598285,-3.185788963483199e-5,-2.5878832104811108e-8,-0.0023524643421163408,-3.1696231806253835e-5,-2.569384848742031e-8,-0.002352210558042157,-3.15451429795799e-5,-2.5520122001298037e-8,-0.002352017095867703,-3.1431404225224024e-5,-2.5389404645823923e-8,-0.0023518632011028735,-3.137387309610943e-5,-2.532421829510982e-8,-0.0023517237164243985,-3.138241693585632e-5,-2.5336544634470662e-8,-0.0023515716747720653,-3.1457557889187125e-5,-2.542738407693742e-8,-0.002351380666688492,-3.159026777706401e-5,-2.5586503563180176e-8,-0.002351127544409854,-3.1761819323126654e-5,-2.5792232842799336e-8,-0.002350795997438297,-3.194420346482523e-5,-2.601189004377488e-8,-0.00235038109753939,-3.210218902073709e-5,-2.620411988036901e-8,-0.0023498939766626002,-3.2198362784118887e-5,-2.6324761207664516e-8,-0.002349364441336059,-3.2201906185988056e-5,-2.6337171516754927e-8,-0.002348838300113838,-3.2099820884316304e-5,-2.622549250364978e-8,-0.002348367104865175,-3.1906193387378433E-05,-2.6005638953133388e-8,-0.002347991928908947,-3.16632964565759e-5,-2.572670334096174e-8,-0.0023477278385863123,-3.1430895046698076e-5,-2.5458524871709287e-8,-0.0023475573302447783,-3.1266834683295797e-5,-2.526903432937616e-8,-0.0023474365947856223,-3.1207840834265524e-5,-2.5201788974958383e-8,-0.0023473111312674834,-3.125926073193481e-5,-2.5263855985966862e-8,-0.0023471329217680113,-3.139668630853095e-5,-2.5427484190962568e-8,-0.0023468725828316842,-3.157629805487812e-5,-2.564195034641037e-8,-0.00234652400711633,-3.174838223286182e-5,-2.5849203831761563e-8,-0.0023461023891960834,-3.1869477830964374e-5,-2.5998061315297644e-8,-0.0023456379459007243,-3.191071358278629e-5,-2.6054089874945166e-8,-0.002345167714297938,-3.1861618822297345e-5,-2.6004274687434745e-8,-0.0023447273964050676,-3.1729710102991125e-5,-2.5856743363241975e-8,-0.0023443447623778383,-3.15367263237694e-5,-2.5636504725218675e-8,-0.002344035611415732,-3.1312828941514695e-5,-2.5378716588854288e-8,-0.0023438025868741026,-3.1090321324122036e-5,-2.5121307043493483e-8,-0.002343636419494298,-3.0898215687290654e-5,-2.4898533605619872e-8,-0.0023435187346924568,-3.075840762917019e-5,-2.473640851696107e-8,-0.002343425470101371,-3.06836209512552e-5,-2.4650217468068794e-8,-0.002343330156203922,-3.067678824239108e-5,-2.46437581014699e-8,-0.0023432067557343844,-3.0731268964403044e-5,-2.4709591242115973e-8,-0.002343032205144756,-3.083142896996042e-5,-2.482971769728214e-8,-0.0023427890317182145,-3.09534849684997e-5,-2.4976536733214626e-8,-0.002342468429998982,-3.1066960867543575e-5,-2.5114480866863458e-8,-0.0023420738829506476,-3.113759753821509e-5,-2.520334251191813e-8,-0.0023416245655075696,-3.113286617338482e-5,-2.5204692814982757e-8,-0.002341156456037676,-3.1030702451985074e-5,-2.5092155875587517e-8,-0.0023407180452088712,-3.083007768640861e-5,-2.4863906224778936e-8,-0.0023403583393829482,-3.055874873840108e-5,-2.4551880478986413e-8,-0.002340109110049135,-3.027131810595971e-5,-2.421961909495806e-8,-0.0023399695530012623,-3.0033690127916367e-5,-2.394416454197952e-8,-0.0023399035996637175,-2.9898874983898596e-5,-2.378781857784365e-8,-0.0023398534173924984,-2.9886919236503446e-5,-2.3774659522504135e-8,-0.002339761711113448,-2.9979953784273124e-5,-2.388461211409085e-8,-0.0023395905205925225,-3.0132912884441697e-5,-2.4065731184666787e-8,-0.002339328969507674,-3.0291463113513845e-5,-2.4254908440399182e-8,-0.0023389905263682936,-3.0407909014329455e-5,-2.439632805788379e-8,-0.002338604647812188,-3.0450610353352113e-5,-2.4452510933726005e-8,-0.002338207386718835,-3.0406942615971795e-5,-2.4407957962391716e-8,-0.002337833512955816,-3.0281802581374335e-5,-2.4267646192649814e-8,-0.002337510916804099,-3.009374007485284e-5,-2.405271127085375e-8,-0.00233725717872705,-2.9870050109659613e-5,-2.379481298482102e-8,-0.0023370780896862574,-2.96415499392353e-5,-2.3530020163429226e-8,-0.0023369679571642664,-2.943765111817507e-5,-2.3292964938693384e-8,-0.002336911380731853,-2.928228272071026e-5,-2.311196745938867e-8,-0.0023368860519105425,-2.9191004014698512e-5,-2.3005572673000774e-8,-0.0023368660995786595,-2.9169474421886248e-5,-2.2980719814710166e-8,-0.002336825467155114,-2.921325593941368e-5,-2.3032512896595408e-8,-0.0023367409423963475,-2.9308629309781252e-5,-2.3145193486284356e-8,-0.002336594789812839,-2.94340434461076e-5,-2.329383537317645e-8,-0.002336377141683103,-2.9562078747041886e-5,-2.3446595994696407e-8,-0.0023360882937399465,-2.9662099579462933e-5,-2.3567732219797592e-8,-0.0023357408585416017,-2.9704065354320472e-5,-2.36219691020052e-8,-0.0023353611169372288,-2.9664178807460198e-5,-2.3581074777115405e-8,-0.002334987901996926,-2.953256184083392e-5,-2.3432902238347995e-8,-0.002334666656879615,-2.9321444023828176e-5,-2.3191111499019182e-8,-0.002334437144125591,-2.906967526378198e-5,-2.2900614292587276e-8,-0.0023343170286952335,-2.8837540628692366e-5,-2.263164135915559e-8,-0.002334289377364724,-2.868863915936848e-5,-2.245863079739621e-8,-0.0023343042731189534,-2.8664576401788524e-5,-2.243065985991554e-8,-0.002334297427240077,-2.8766728884431434e-5,-2.2550060161150142e-8,-0.00233421602436304,-2.8956937999179782e-5,-2.277304822604038e-8,-0.0023340366493231914,-2.9175695277364925e-5,-2.3030723691705274e-8,-0.0023337675567428337,-2.9365148437702835e-5,-2.325572494540632e-8,-0.002333439019167699,-2.948499872544599e-5,-2.3400714149062195e-8,-0.002333090235900311,-2.9517803647735512e-5,-2.3444668908795366e-8,-0.002332758701346869,-2.9466638538369463e-5,-2.3390385484474364e-8,-0.0023324738052357035,-2.934937562502968e-5,-2.3258055105401835e-8,-0.0023322540424882687,-2.919255582833955e-5,-2.3078281732160556e-8,-0.0023321064600515273,-2.902614663617285e-5,-2.2885999487207492e-8,-0.002332027286009202,-2.8879263050207602e-5,-2.271540058262342e-8,-0.0023320033619865835,-2.877662704188809e-5,-2.259567613496163e-8,-0.002332014289946477,-2.873576097567269e-5,-2.2547631244607782e-8,-0.002332035177135321,-2.8765014379972653e-5,-2.2581326280258576e-8,-0.0023320398449503863,-2.8862571973660708e-5,-2.2694919143851268e-8,-0.0023320042471653172,-2.9016654866027363e-5,-2.287492871831799e-8,-0.0023319096779583115,-2.9206946607571382e-5,-2.3097917898279694e-8,-0.002331745434296553,-2.940702053860624e-5,-2.333330260051453e-8,-0.0023315107913132412,-2.9587554741398894e-5,-2.354703004535643e-8,-0.002331216183994399,-2.9720241445388588e-5,-2.370604059396504e-8,-0.0023308833968589734,-2.9782371874826208e-5,-2.378354402409868e-8,-0.0023305442821816677,-2.976211745161164e-5,-2.376519028712881e-8,-0.002330237019842478,-2.9664138028036154e-5,-2.3655730605611676e-8,-0.002329998741183291,-2.9513937315933643e-5,-2.3484296706424633e-8,-0.0023298543227104943,-2.935776247905231e-5,-2.3304483190610554e-8,-0.0023298039688696283,-2.9254146272590037e-5,-2.3184600111912306e-8,-0.0023298161627486316,-2.9255771124284795e-5,-2.3186513526067538e-8,-0.002329833717182933,-2.9387407680729007e-5,-2.3339799540173714e-8,-0.00232979429485865,-2.963251445919433e-5,-2.3625939095795707e-8,-0.0023296555485235837,-2.993876684354111e-5,-2.3984573422930422e-8,-0.002329410031430962,-3.0240089226068864e-5,-2.433902191722381e-8,-0.002329082684861528,-3.048133910260082e-5,-2.4624941076546366e-8,-0.002328716252266335,-3.063272313348873e-5,-2.4807118980201846e-8,-0.0023283552432151315,-3.0691090518933916e-5,-2.4881121231374615e-8,-0.002328035235814446,-3.067316204035687e-5,-2.486564617259907e-8,-0.002327778453652459,-3.060672619689269e-5,-2.4792504271784795e-8,-0.0023275936390781573,-3.052324005011218e-5,-2.4698123022970693e-8,-0.002327477917828302,-3.0452785078251434e-5,-2.461765146651857e-8,-0.002327419112590265,-3.0420884134364205E-05,-2.458113394257909e-8,-0.0023273980040969685,-3.0446326357327403e-5,-2.4610839446448034e-8,-0.002327390669521878,-3.0539531096370326e-5,-2.4719266183936192e-8,-0.0023273711094918687,-3.070139397965835e-5,-2.4907774784639605e-8,-0.002327314298389271,-3.0922803788878494e-5,-2.5166047977091938e-8,-0.002327199604182002,-3.118523180180453e-5,-2.5472802828543438e-8,-0.0023270141555905726,-3.146275582275373e-5,-2.579813850369303e-8,-0.002326755507257778,-3.1725524753218145e-5,-2.6107509797618743e-8,-0.002326433025242352,-3.194433915074523e-5,-2.636696380227279e-8,-0.00232606757107646,-3.2095816875852493E-05,-2.6549064620552972e-8,-0.0023256892347763903,-3.216744119251998e-5,-2.663874128588696e-8,-0.0023253330548705857,-3.216173673953351e-5,-2.6638224765391106e-8,-0.002325032753407156,-3.209873777588853e-5,-2.6570101510359574e-8,-0.0023248127299698297,-3.201549252585091e-5,-2.6476970450584947e-8,-0.002324679419257254,-3.1960909325668365e-5,-2.641563798078472e-8,-0.002324614738368727,-3.198471760129885e-5,-2.6444333423830437e-8,-0.0023245759518624605,-3.2121629871326e-5,-2.6604171937243653e-8,-0.002324505785473568,-3.237602913514e-5,-2.6901108196581215e-8,-0.0023243518127423596,-3.271591879496891e-5,-2.7298653087985366e-8,-0.00232408675837698,-3.308237216229446e-5,-2.772870037338478e-8,-0.0023237183421038277,-3.341134600686158e-5,-2.8116827565107905e-8,-0.0023232834120907914,-3.365603424276712e-5,-2.8408283829963784e-8,-0.0023228315250686865,-3.379852594585868e-5,-2.8581601521190148e-8,-0.0023224081917482394,-3.384823308876176e-5,-2.8646918820079517e-8,-0.0023220447513682056,-3.3832392487888304e-5,-2.8635163154902712e-8,-0.0023217556857669294,-3.378539642682306e-5,-2.8585851446400122e-8,-0.0023215406467797794,-3.374081042009061e-5,-2.8537897313167375e-8,-0.002321388188291431,-3.3726795999537757e-5,-2.8524238705810844e-8,-0.002321279357326137,-3.376398701175925e-5,-2.8569237172436706e-8,-0.002321190580067218,-3.3864561252015965e-5,-2.8687469509032147e-8,-0.0023210960815719848,-3.403170234189584e-5,-2.8883032294239802e-8,-0.0023209703112198727,-3.425921865422195e-5,-2.9149091545929388e-8,-0.0023207907692627456,-3.453153525414017e-5,-2.9467892708359517e-8,-0.002320541348280485,-3.4824632907782434e-5,-2.9811852888919886e-8,-0.002320215787982576,-3.510859047522046e-5,-3.014647119465895e-8,-0.002319820326628823,-3.5352020534393274e-5,-3.0435397604764066e-8,-0.002319374429235887,-3.5528027890910064e-5,-3.064726176518535e-8,-0.0023189086929537852,-3.562058707993201e-5,-3.0763027321289934e-8,-0.0023184596969337903,-3.562967431567573e-5,-3.078198150000386e-8,-0.0023180625159862473,-3.557348082881343e-5,-3.072444153370548e-8,-0.0023177424037032486,-3.548664144440317e-5,-3.062992075551395e-8,-0.0023175074984734543,-3.5414226963611394e-5,-3.0550393228261676e-8,-0.0023173444808164832,-3.5402047537825155e-5,-3.053919267474974e-8,-0.002317219043515323,-3.548478675955916e-5,-3.063722510387765e-8,-0.0023170825452282313,-3.567474791693208e-5,-3.085971138660794e-8,-0.0023168847150472982,-3.595522696647335e-5,-3.118819869005432e-8,-0.0023165894160324624,-3.628263070896687e-5,-3.157275232013399e-8,-0.0023161874027681608,-3.659879209134966e-5,-3.194610912976707e-8,-0.002315699674318987,-3.6849589557777495e-5,-3.224527727736699e-8,-0.002315169322935829,-3.7001624225642415e-5,-3.2430960432418255e-8,-0.002314646199700832,-3.704960690848625e-5,-3.249625130896201e-8,-0.0023141720768090047,-3.701289220350198e-5,-3.246278529929417e-8,-0.0023137719944856,-3.692533958583261e-5,-3.2369181497699095e-8,-0.002313452787336121,-3.682436937453514e-5,-3.225850415814049e-8,-0.002313206349815514,-3.674303927821273e-5,-3.216911319350878e-8,-0.002313014513893187,-3.6705975238209506e-5,-3.21298653443614e-8,-0.002312853494672486,-3.6728114464930174e-5,-3.215852030546475e-8,-0.0023126972338266515,-3.681481612065799e-5,-3.226175333094992e-8,-0.0023125198655322456,-3.696232465768661e-5,-3.24356389814037e-8,-0.002312297893017724,-3.7158178604489365e-5,-3.266612338087536e-8,-0.0023120126639769563,-3.7381726521067834e-5,-3.292962936131338e-8,-0.002311653424383115,-3.760539504033395e-5,-3.319450237088803e-8,-0.0023112206387045776,-3.7797568417562995e-5,-3.3424282093674193e-8,-0.002310728536788081,-3.7927679776685745e-5,-3.3583518129125895e-8,-0.0023102052694704335,-3.7973269632081315e-5,-3.3645883688399196e-8,-0.002309689114953737,-3.792741024238655e-5,-3.3602769741033175e-8,-0.002309220367796046,-3.780365018678395e-5,-3.34690861984953e-8,-0.0023088306454635615,-3.763560952953059e-5,-3.328295822689161e-8,-0.0023085331437765486,-3.7470095324169245e-5,-3.30979876994702e-8,-0.0023083175552887736,-3.7355299923970754e-5,-3.296981668241202e-8,-0.0023081517291295645,-3.732774019023125e-5,-3.2941121239366296e-8,-0.0023079897002703125,-3.740204716129852e-5,-3.302971182509186e-8,-0.0023077837234663535,-3.7566599907923365e-5,-3.322321468544985e-8,-0.0023074969972720206,-3.778618699150824e-5,-3.348181192736664e-8,-0.002307113642460123,-3.801111136025596e-5,-3.374850764245679e-8,-0.002306642967714749,-3.819047303514916e-5,-3.3964389987148476e-8,-0.0023061164179579287,-3.8285780849737995e-5,-3.40844388236443e-8,-0.0023055780533455137,-3.828042081343265e-5,-3.408864550347391e-8,-0.0023050720265702773,-3.818189606197478e-5,-3.3984813393723e-8,-0.0023046316398957264,-3.801683262139339e-5,-3.3802987367837267e-8,-0.00230427334288954,-3.7821682524135505e-5,-3.358486019035794e-8,-0.0023039963644423222,-3.7633111972824855e-5,-3.337272686138091e-8,-0.002303786336992908,-3.748100255910153e-5,-3.320135317605305e-8,-0.0023036204437704402,-3.738497046118624e-5,-3.3093833427999516e-8,-0.002303472191629436,-3.735370107695463e-5,-3.306068870435814e-8,-0.002303315004370737,-3.738581151208172e-5,-3.310077586295026e-8,-0.0023031247168510474,-3.7471158388023855e-5,-3.32027746012847e-8,-0.002302881512812013,-3.759204402485969e-5,-3.334659244660564e-8,-0.002302571933303701,-3.772437161974421e-5,-3.3504698526810776e-8,-0.0023021913377570913,-3.7839318120416736e-5,-3.364401288936653e-8,-0.0023017466592312736,-3.790639624397905e-5,-3.3729365113627754e-8,-0.002301258499438132,-3.789868982799408e-5,-3.3729469251606456e-8,-0.0023007607416336475,-3.780025860121621e-5,-3.362545368835861e-8,-0.0023002955727393715,-3.761398422436507e-5,-3.341996763976326e-8,-0.002299903135206751,-3.7366095073082776e-5,-3.314251715734096e-8,-0.002299608241321281,-3.7103131944292765e-5,-3.284613208267745e-8,-0.002299409859179875,-3.687991824381861e-5,-3.259369265324991e-8,-0.002299279285932504,-3.674229260682073e-5,-3.243819215569253e-8,-0.002299168823546775,-3.6712133551511284e-5,-3.240551750739637e-8,-0.002299027108588892,-3.678121604662647e-5,-3.248721326687466e-8,-0.0022988143521173038,-3.6915489318077446e-5,-3.2645093229978927e-8,-0.0022985121434507642,-3.706652291671608e-5,-3.282408232012828e-8,-0.0022981259731840605,-3.718510344513982e-5,-3.296765596479805e-8,-0.002297681444338649,-3.723291069296564e-5,-3.3031266622567177e-8,-0.0022972163826716816,-3.7189964304819385e-5,-3.299108395567988e-8,-0.002296771289655474,-3.705699893642229e-5,-3.284699771750507e-8,-0.0022963804162048507,-3.685301926143306e-5,-3.2620069474865724e-8,-0.0022960653412444033,-3.66092080660818e-5,-3.234570517089325e-8,-0.0022958321994601843,-3.6361104881873565e-5,-3.206471491834107e-8,-0.002295672602594345,-3.6141216362085723e-5,-3.181475278986125e-8,-0.002295567237924504,-3.5973699239903435e-5,-3.1624065630400416e-8,-0.0022954906243840873,-3.5871742882865936e-5,-3.150833328403298e-8,-0.002295415668514197,-3.583734289021038e-5,-3.1470303577740756e-8,-0.002295317231199662,-3.5862619387422194e-5,-3.15012747362056e-8,-0.002295174587684972,-3.593175025312556e-5,-3.158334026307848e-8,-0.0022949731503511582,-3.6022919077861825e-5,-3.169165951737354e-8,-0.0022947059593891967,-3.6110200777476796e-5,-3.1796616976641045e-8,-0.0022943752972072132,-3.616576445549112e-5,-3.186629056886203e-8,-0.002293994395917849,-3.616308491839482e-5,-3.1870055583428156e-8,-0.0022935884913046806,-3.608188698839053e-5,-3.1784218012190775e-8,-0.002293193570220022,-3.591490428985524e-5,-3.159981966187581e-8,-0.002292850700555697,-3.567488665407547e-5,-3.1330816136700846e-8,-0.0022925949121289655,-3.539799888834784e-5,-3.101814903088958e-8,-0.002292441079759657,-3.5138654460845667e-5,-3.072396888884776e-8,-0.0022923737482313526,-3.495377210004042e-5,-3.051367324612897e-8,-0.0022923487357085484,-3.4881645478195986e-5,-3.043169702193616e-8,-0.0022923082878944408,-3.492651926994169e-5,-3.048374540670587e-8,-0.0022922023645509603,-3.5057777584302726e-5,-3.063565736187704e-8,-0.002292004823110608,-3.522321745129158e-5,-3.0828335408719365e-8,-0.002291718031987991,-3.536782916311345e-5,-3.099901295008251e-8,-0.0022913672330241424,-3.544908418763723e-5,-3.109866179650461e-8,-0.002290990059070643,-3.544468044302114e-5,-3.1100956371175926e-8,-0.0022906260283061795,-3.535334262818601e-5,-3.1003445892457103e-8,-0.0022903084934227853,-3.5191150650947184e-5,-3.082366001102285e-8,-0.002290059645962504,-3.4985740590012e-5,-3.059271116004469e-8,-0.002289888308889336,-3.476990829758171e-5,-3.034806608016834e-8,-0.002289790112933232,-3.457553303386381e-5,-3.0126527996035566e-8,-0.0022897496397346197,-3.442855427528838e-5,-2.995832382862933e-8,-0.002289743927638933,-3.434557978525591e-5,-2.986303752963534e-8,-0.002289746588173612,-3.433235628935457e-5,-2.984772570762622e-8,-0.002289731806192985,-3.438399705495003e-5,-2.9907130752155833e-8,-0.0022896776371395563,-3.448658144544781e-5,-3.0025539997263514e-8,-0.002289568333240068,-3.4619516180843974e-5,-3.0179546880832127e-8,-0.002289395830989697,-3.47581192864351e-5,-3.034104020878307e-8,-0.0022891606980330746,-3.487624615385044e-5,-3.048017863245395e-8,-0.0022888727561433233,-3.494909690242651e-5,-3.0568516096956604e-8,-0.0022885513883073552,-3.4956571873741554e-5,-3.058275352336701e-8,-0.002288225022291335,-3.4887629910986334e-5,-3.050971134872694e-8,-0.0022879285346280604,-3.474558680788467e-5,-3.0352495822772635e-8,-0.002287697014005668,-3.4552914595581084e-5,-3.013619110840197e-8,-0.002287555258528512,-3.4352264826514714e-5,-2.990924381258495e-8,-0.002287505296293813,-3.419939650252042e-5,-2.9735499630763315e-8,-0.0022875185392014596,-3.414608973943245e-5,-2.9674650423240414e-8,-0.002287540654767576,-3.421841512072958e-5,-2.975725826269698e-8,-0.0022875109191809696,-3.44028369555647e-5,-2.9968681291149824e-8,-0.0022873866431173677,-3.4650463730046105e-5,-3.025373403994287e-8,-0.002287158332342123,-3.489747604808045e-5,-3.05398504214709e-8,-0.0022868484445149025,-3.5088852879194874e-5,-3.076405861695239e-8,-0.0022864982748903593,-3.519317267669936e-5,-3.0889870385194194e-8,-0.002286152562989151,-3.520525313625685e-5,-3.091044534452543e-8,-0.002285848351995372,-3.514064936767193e-5,-3.084259232463975e-8,-0.0022856095545583004,-3.5027359972136336e-5,-3.071759518882632e-8,-0.0022854458582351883,-3.4898128170332654e-5,-3.057260162184731e-8,-0.00228535406658743,-3.4784542000901826e-5,-3.0443888195242704e-8,-0.0022853205545476122,-3.471284955278595e-5,-3.0361936066289834e-8,-0.0022853242782383083,-3.4701131164836125e-5,-3.034799776992067e-8,-0.0022853401172956323,-3.475768108400181e-5,-3.0412079618106474e-8,-0.0022853423369857883,-3.488055943683937e-5,-3.055234935450222e-8,-0.0022853079331452636,-3.505829657473036e-5,-3.075595068991225e-8,-0.002285219540357508,-3.5271714452898415e-5,-3.1001145596984345e-8,-0.0022850675526555806,-3.5496617417606936e-5,-3.12604400979373e-8,-0.0022848513167228906,-3.5706935033342264e-5,-3.150417106161792e-8,-0.0022845794630886704,-3.587803665272236e-5,-3.170422273669897e-8,-0.0022842694256383967,-3.599011192601114e-5,-3.183778648177624e-8,-0.00228394612191299,-3.6031573527607656e-5,-3.1891182357691236e-8,-0.002283639559272516,-3.6002497987339216e-5,-3.1863829412209876e-8,-0.0022833807000028155,-3.591781523569677e-5,-3.17720571397393e-8,-0.002283194835117489,-3.580895633737797e-5,-3.1651234007313374e-8,-0.0022830926687873554,-3.572151453512309e-5,-3.155331255203707e-8,-0.0022830615120185546,-3.57062013456485e-5,-3.1536574359696766e-8,-0.002283061910144253,-3.5802515052971905e-5,-3.1646865496677e-8,-0.0022830358716624693,-3.602024681505544e-5,-3.1896238479571526e-8,-0.002282927452508825,-3.6329876875859376e-5,-3.2251745516056244e-8,-0.0022827062816265977,-3.667107036558002e-5,-3.264498114105585e-8,-0.0022823796709535715,-3.697658131461953e-5,-3.299928501542816e-8,-0.0022819864232603475,-3.719735460090399e-5,-3.325834215160285e-8,-0.0022815785791103415,-3.731532145924846e-5,-3.340080377913226e-8,-0.0022812032084957965,-3.734128205682896e-5,-3.3438034270071183e-8,-0.002280891871937716,-3.7304369843453694e-5,-3.3402379181189025e-8,-0.00228065814223643,-3.724061603780327e-5,-3.333439792808469e-8,-0.0022805000038872204,-3.718451764462349e-5,-3.327337443004344e-8,-0.0022804039844390635,-3.7164175330215406e-5,-3.325171023981485e-8,-0.002280349211641098,-3.7198996010101034e-5,-3.3292116454290506e-8,-0.0022803108906574855,-3.729879835377055e-5,-3.3406389414515064e-8,-0.002280263357184188,-3.746369139111816e-5,-3.359514042205903e-8,-0.0022801829142725643,-3.76845561343038e-5,-3.3848312986735143e-8,-0.0022800505440541212,-3.794419075362827e-5,-3.4146529008746734e-8,-0.002279854394613768,-3.821932509749697e-5,-3.446344080378021e-8,-0.002279591667380771,-3.8483592197162534e-5,-3.4769134737453335e-8,-0.0022792694769532365,-3.8711202674219674e-5,-3.503427192200282e-8,-0.002278904453787725,-3.888090559245803e-5,-3.523451107453436e-8,-0.002278520994022731,-3.897981593858639e-5,-3.5354790439935546e-8,-0.0022781481387727765,-3.900661067575245e-5,-3.539296714173588e-8,-0.002277815196272408,-3.897358681368924e-5,-3.536228182941742e-8,-0.0022775462453310945,-3.8907078916294634e-5,-3.5292063500544346e-8,-0.0022773537578315915,-3.88453723888866e-5,-3.5225611058902015e-8,-0.0022772323066882973,-3.88328268780596e-5,-3.5213664861948535e-8,-0.002277154719218136,-3.89093864059176e-5,-3.5302432695555914e-8,-0.0022770743013513575,-3.909671606337604e-5,-3.551757119061668e-8,-0.0022769361938568297,-3.93858582620144e-5,-3.584980135264396e-8,-0.0022766965332619883,-3.9734321357865546e-5,-3.625133407898208e-8,-0.002276341115211891,-4.007817531691193e-5,-3.664954907985626e-8,-0.0022758922917568173,-4.035551223226274e-5,-3.697373201351628e-8,-0.0022753992488523085,-4.0528709716748785e-5,-3.7180470529775404e-8,-0.0022749180581077707,-4.059371095721217e-5,-3.726429156698758e-8,-0.0022744933359550488,-4.057442247318822e-5,-3.7251455930854735e-8,-0.0022741491150162865,-4.0509294110553696e-5,-3.718495011122612e-8,-0.0022738888817427747,-4.043836498717976e-5,-3.7109976390399145e-8,-0.0022737006122365193,-4.0394935220934196e-5,-3.706454561541384e-8,-0.0022735628534328385,-4.0401953921682715e-5,-3.7075254422409025e-8,-0.0022734497848497666,-4.047142453162688e-5,-3.7156399239620105e-8,-0.0022733348583905645,-4.060512607912676e-5,-3.731060746631049e-8,-0.0022731934580261463,-4.0795705115488924e-5,-3.752998308750005e-8,-0.00227300512552994,-4.102789765037355e-5,-3.7797496246937914e-8,-0.0022727556876095496,-4.128004247365327e-5,-3.808875005360056e-8,-0.002272439315133133,-4.152626986166031e-5,-3.837450044928072e-8,-0.0022720601389120266,-4.173970137526162e-5,-3.862427282168575e-8,-0.0022716327599983676,-4.1896595491755895e-5,-3.8811002059216745e-8,-0.0022711810539608945,-4.1980908267824755e-5,-3.8916135263443654e-8,-0.00227073496835204,-4.1988409487146426e-5,-3.8934279948754235e-8,-0.002270325441507122,-4.192927899551331e-5,-3.8876227340469446e-8,-0.002269978122215947,-4.1828177158028644e-5,-3.8769219119330844e-8,-0.00226970702629286,-4.172123601459589e-5,-3.865378498185866e-8,-0.0022695094556672577,-4.1649926366732944e-5,-3.857700174244831e-8,-0.002269363629343624,-4.165219466353312e-5,-3.858250738357373e-8,-0.0022692306298698933,-4.175204263636338e-5,-3.869853604806306e-8,-0.0022690619905320303,-4.195007217268219e-5,-3.892687238355782e-8,-0.0022688127656313537,-4.22189359377569e-5,-3.923733305382498e-8,-0.0022684568851602466,-4.2507766167857475e-5,-3.9572560430991624e-8,-0.002267998326091102,-4.275672312180571e-5,-3.986449700076138e-8,-0.0022674714734245843,-4.291695195769548e-5,-4.005713795935709e-8,-0.0022669291597497737,-4.296662160132691e-5,-4.012487438155247e-8,-0.0022664242564903914,-4.2915295188340505e-5,-4.007760659904807e-8,-0.0022659940652150863,-4.279611123618072e-5,-3.995206908990567e-8,-0.002265653503930502,-4.265191244855833e-5,-3.979631362883339e-8,-0.0022653969340296893,-4.252261313043785e-5,-3.965552378432056e-8,-0.0022652046236925952,-4.243769493960012e-5,-3.95634861733223e-8,-0.002265049794477369,-4.241380155046763e-5,-3.9539697044729416e-8,-0.0022649041082798216,-4.245547864330964e-5,-3.9589986428501323e-8,-0.00226474124918325,-4.255711975844435e-5,-3.970856627954339e-8,-0.0022645391613217362,-4.270500455743162e-5,-3.988028806109427e-8,-0.0022642816799547678,-4.287910780361013e-5,-4.008272167427198e-8,-0.002263960087918555,-4.3054900809357125e-5,-4.028824466566982e-8,-0.002263574719130994,-4.320567695985923e-5,-4.0466687322319195e-8,-0.0022631362204558894,-4.330590165289405e-5,-4.058908270551296e-8,-0.0022626656639188536,-4.3335670173572484e-5,-4.063264302083518e-8,-0.0022621925719040524,-4.328569846595285e-5,-4.0586363627982455e-8,-0.0022617502460647106,-4.316153538197371e-5,-4.045582192050501e-8,-0.0022613686905826485,-4.298517863381172e-5,-4.02651379123331e-8,-0.002261066659628733,-4.279254577136207e-5,-4.0054328367112326e-8,-0.002260845254738966,-4.2626492298289355e-5,-3.9871642378719045e-8,-0.002260685452234943,-4.252671070386968e-5,-3.976228848354713e-8,-0.0022605509404802003,-4.251909481418603e-5,-3.9756384567982686e-8,-0.002260396131472639,-4.260760900980759e-5,-3.985954021720435e-8,-0.002260177694963087,-4.277131989594658e-5,-4.004914789052283e-8,-0.002259866766101412,-4.2968166060102e-5,-4.027830918497738e-8,-0.002259458210637815,-4.3145372744970057e-5,-4.048742944540769e-8,-0.0022589733613924707,-4.3254145791464096e-5,-4.062085419440258e-8,-0.002258454294531585,-4.326392054614321e-5,-4.064315339359069e-8,-0.0022579511436190353,-4.3170655978861896e-5,-4.0548734377790825e-8,-0.0022575073922757242,-4.2995916330466316e-5,-4.036104128218041e-8,-0.0022571489718927946,-4.2777865460527206e-5,-4.012258232791228e-8,-0.0022568805697357453,-4.255884861731508e-5,-3.988102778980891e-8,-0.0022566887016491335,-4.2374725671374876e-5,-3.967716426716014e-8,-0.002256548444902981,-4.2248875604791526e-5,-3.953799287615894e-8,-0.002256430457477919,-4.2190877177150564e-5,-3.9475031093020603e-8,-0.0022563063262742698,-4.219814048656945e-5,-3.9485967035225393e-8,-0.0022561518892659908,-4.225864272457631e-5,-3.9557654446514965e-8,-0.0022559490620141626,-4.235363463796422e-5,-3.9669178707093105e-8,-0.0022556869196150115,-4.245992921932744e-5,-3.9794503964805914e-8,-0.002255362650026142,-4.2551960746738174e-5,-3.990484416493067e-8,-0.00225498259128279,-4.260418776905965e-5,-3.9971363026047316e-8,-0.0022545629951551973,-4.259443556510106e-5,-3.996888136177645e-8,-0.002254129647814144,-4.2508371758274345e-5,-3.988086135327218e-8,-0.0022537151993712646,-4.234455193159232e-5,-3.970509132900266e-8,-0.00225335330209883,-4.2118407480589275e-5,-3.9458268320626675e-8,-0.0022530698916637996,-4.186263655252896e-5,-3.917660732834667e-8,-0.0022528740190121094,-4.162180095563857e-5,-3.8909958155369906e-8,-0.002252752217450626,-4.1441201489894646e-5,-3.870944411348118e-8,-0.0022526698614514173,-4.1353325375690816e-5,-3.861225482382609e-8,-0.0022525801000990234,-4.136713774543938e-5,-3.862947201208333e-8,-0.0022524373733573866,-4.146464933767827e-5,-3.8741929345072135e-8,-0.002252210525373519,-4.1605994325611274e-5,-3.89055852814104e-8,-0.0022518911377591767,-4.1740803405337114e-5,-3.906405012373955e-8,-0.0022514949999607,-4.182182996698903e-5,-3.9163825942864726e-8,-0.0022510569958787445,-4.181681135790668e-5,-3.916776403591502e-8,-0.002250621342141275,-4.171557236139564e-5,-3.906331946104076e-8,-0.0022502301294550285,-4.15308425955026e-5,-3.886378396708598e-8,-0.002249913449319389,-4.129306958437996e-5,-3.860271679338941e-8,-0.002249683726453224,-4.104130530740587e-5,-3.832383998911728e-8,-0.002249535283975047,-4.0813295369522146e-5,-3.8069884935159855e-8,-0.0022494483048860476,-4.0637702512655366e-5,-3.787370255806774e-8,-0.002249395075586441,-4.053008747505458e-5,-3.775352485809548e-8,-0.002249346228387429,-4.049258564563083e-5,-3.771239510768213e-8,-0.0022492755010270257,-4.0516052192387256e-5,-3.774046242612261e-8,-0.0022491626277783426,-4.058321264511812e-5,-3.7818520580070174e-8,-0.0022489947436900195,-4.0671780343274614e-5,-3.7921589641568395e-8,-0.002248766957445944,-4.075711343877572e-5,-3.8021986797907276e-8,-0.0022484826632076446,-4.081452585563666e-5,-3.8091951714669235e-8,-0.002248153838048646,-4.0821728247974105e-5,-3.8106341905870566e-8,-0.002247801079960905,-4.076195151424849e-5,-3.804605949402225e-8,-0.002247452593148405,-4.0628012018448585e-5,-3.790257146744856e-8,-0.0022471409301629466,-4.042682459236734e-5,-3.768302732502345e-8,-0.00224689646765886,-4.018263561138499e-5,-3.7414039313886286e-8,-0.0022467379334867687,-3.993603737751534e-5,-3.71407722402369e-8,-0.0022466629330224067,-3.973603731085064e-5,-3.6918205817805125e-8,-0.0022466437937668942,-3.962548372148706e-5,-3.679484541297912e-8,-0.0022466332626418345,-3.962510713746668e-5,-3.679475135912498e-8,-0.0022465795112438054,-3.972433968955547e-5,-3.690704831574807e-8,-0.002246443844399572,-3.988431149987231e-5,-3.7089012125681974e-8,-0.0022462127331009103,-4.005144641550452e-5,-3.728104124941213e-8,-0.002245899726127667,-4.017461828870116e-5,-3.742571513024981e-8,-0.0022455385610210964,-4.021870065905526e-5,-3.7482979092119534e-8,-0.002245171991501091,-4.017101257208119e-5,-3.743755699529912e-8,-0.0022448406857828573,-4.0040872064166135e-5,-3.729877117661851e-8,-0.002244574842630709,-3.985434389103751e-5,-3.709499167218068e-8,-0.00224438953153147,-3.964658315948225e-5,-3.6865281132306804e-8,-0.002244283739282433,-3.9453769098646514e-5,-3.6650395806950313e-8,-0.0022442425786291715,-3.9306138580895836e-5,-3.648483998275852e-8,-0.0022442417262513318,-3.9223235736532204e-5,-3.639130046745756e-8,-0.002244252825270072,-3.921193238763609e-5,-3.637818766334322e-8,-0.002244248580715095,-3.926701981343953e-5,-3.6440147045714485e-8,-0.002244206665010873,-3.9373614587264704e-5,-3.656072898333406e-8,-0.0022441120851505714,-3.9510449394149734e-5,-3.671615220159067e-8,-0.002243958158082218,-3.9653224799783987e-5,-3.687916687487293e-8,-0.002243746569982561,-3.977754481038861e-5,-3.702240992509356e-8,-0.0022434870012997396,-3.986143852984975e-5,-3.7121211995940224e-8,-0.002243196539261886,-3.9887788360821346e-5,-3.715623183345602e-8,-0.002242898748955786,-3.984704324325663e-5,-3.711640914072695e-8,-0.0022426218280860106,-3.974042123909537e-5,-3.7002547544910815e-8,-0.0022423948446182447,-3.9583186860967147e-5,-3.683110598566761e-8,-0.002242241179018976,-3.940641160112801e-5,-3.663638469156625e-8,-0.00224216956598242,-3.925442123747653e-5,-3.646787712775838e-8,-0.002242165743912653,-3.917522022806908e-5,-3.63796461283401e-8,-0.0022421904430927637,-3.92042809462743e-5,-3.641210968875951e-8,-0.0022421888363345576,-3.934800163595166e-5,-3.657333079382851e-8,-0.0022421101287026773,-3.957707112540881e-5,-3.683135600408295e-8,-0.0022419276065207064,-3.983591431005777e-5,-3.712457446970693e-8,-0.0022416477393448642,-4.0063753426798325e-5,-3.73851192566621e-8,-0.0022413045475564155,-4.0215340963561835e-5,-3.7561970560884604e-8,-0.0022409449338205603,-4.0271819274777205e-5,-3.7633148529958066e-8,-0.0022406136872176463,-4.0240309319839884e-5,-3.7605480019251675e-8,-0.002240343470877864,-4.0146522531138636e-5,-3.750668536605433e-8,-0.002240150677565745,-4.002533269708593e-5,-3.7375157741474976e-8,-0.002240035711440105,-3.991240818250783e-5,-3.725076167766338e-8,-0.002239985804253139,-3.9838071993125945e-5,-3.7167903625866e-8,-0.0022399789880449567,-3.9823368021104823e-5,-3.715090319780558e-8,-0.0022399885175577506,-3.9878050065343086e-5,-3.721146830451135e-8,-0.002239987272940578,-4.000036042511323e-5,-3.734824122526935e-8,-0.0022399516443405575,-4.017838712946535e-5,-3.7548239619326853e-8,-0.002239864499431365,-4.0392596449678075e-5,-3.778973496167977e-8,-0.0022397169957782525,-4.061908331716644e-5,-3.804599535317224e-8,-0.002239509163109704,-4.083302738834809e-5,-3.828923970936112e-8,-0.00223924945058436,-4.101186342286681e-5,-3.8494196874711744e-8,-0.002238953599371396,-4.113797301515876e-5,-3.8641048926455915e-8,-0.0022386430618668383,-4.120100796303263e-5,-3.871793082545036e-8,-0.002238342944066297,-4.1200001151770064e-5,-3.872324181388282e-8,-0.0022380791839847307,-4.114530686782865e-5,-3.866788607866194e-8,-0.002237874380510262,-4.1060002066053976e-5,-3.857703907310176e-8,-0.00223774180926945,-4.097948394853225e-5,-3.848995354296783e-8,-0.00223767825635013,-4.094712480839855e-5,-3.845528558322179e-8,-0.002237658399419641,-4.1004061797862145e-5,-3.851967858482813e-8,-0.0022376356888406273,-4.11738325963669e-5,-3.8710382858211906e-8,-0.0022375542283195344,-4.144791944811161e-5,-3.9018797372337954e-8,-0.002237369976256706,-4.178239537910177e-5,-3.939648342269923e-8,-0.0022370705865857117,-4.211192540677199e-5,-3.97707040733493e-8,-0.002236681021205403,-4.237528136520402e-5,-4.0072894403993155e-8,-0.0022362515136581293,-4.2537390808246587e-5,-4.026326754963274e-8,-0.0022358368811051695,-4.2596592517748946e-5,-4.033897314519272e-8,-0.002235479455892738,-4.257760540665977e-5,-4.032647668471118e-8,-0.0022352014732815342,-4.251839568376904e-5,-4.026725325138652e-8,-0.0022350055128588357,-4.245824814262653e-5,-4.0204769494537755e-8,-0.002234879072292001,-4.2429981973685345e-5,-4.017588031994506e-8,-0.002234800143287794,-4.245617891594765e-5,-4.020647152992803e-8,-0.0022347421748675988,-4.254810062132713e-5,-4.030997076660549e-8,-0.002234678089860464,-4.2706022024608e-5,-4.04874490318804e-8,-0.002234583596800719,-4.292040013149177e-5,-4.072877100486095e-8,-0.0022344399196055193,-4.3173776366831664e-5,-4.101470592062815e-8,-0.002234235865992565,-4.344333894544913e-5,-4.13198704377615e-8,-0.002233969089473579,-4.370403283753067e-5,-4.1616299339581775e-8,-0.0022336463289874286,-4.393200590097062e-5,-4.1877337327494744e-8,-0.002233282501130823,-4.410796757286399e-5,-4.2081351239347404e-8,-0.0022328987863395795,-4.422003807868895e-5,-4.2214822045642e-8,-0.0022325199496675764,-4.426587777665794e-5,-4.227465236873269e-8,-0.0022321710530385326,-4.4253972215963034e-5,-4.226962591744968e-8,-0.0022318736432929433,-4.420392191805795e-5,-4.2220888713159193e-8,-0.0022316414113256896,-4.414545555348796e-5,-4.216110347774086e-8,-0.0022314754270215662,-4.4115440270257426e-5,-4.213136166132721e-8,-0.002231359823442391,-4.415175418461966e-5,-4.217445054382591e-8,-0.0022312601532689185,-4.4283382554984865e-5,-4.232367827957026e-8,-0.002231127767120565,-4.4518168017474204e-5,-4.258888372588604e-8,-0.0022309127621388284,-4.483326721123653e-5,-4.2945429863533486e-8,-0.0022305832777618443,-4.5176107345948044e-5,-4.33350641470657e-8,-0.0022301417812274774,-4.548042189951665e-5,-4.3683804639003184e-8,-0.00222962696006888,-4.5691654474732635e-5,-4.3930355472978606e-8,-0.0022290982784922498,-4.578732224176004e-5,-4.404886114752745e-8,-0.0022286126995498105,-4.578096414425489e-5,-4.405337631430236e-8,-0.002228207126679372,-4.571064953482692e-5,-4.39852734699268e-8,-0.002227893056699919,-4.562206961243283e-5,-4.38947320909112e-8,-0.002227660846567752,-4.555526540573994e-5,-4.382620421038141e-8,-0.002227487702103169,-4.55379758899719e-5,-4.381102028222137e-8,-0.0022273451775774154,-4.558426004228901e-5,-4.386564409422788e-8,-0.0022272045720067527,-4.569590592468164e-5,-4.39929402649985e-8,-0.002227040330898362,-4.586469098944103e-5,-4.418444952301841e-8,-0.0022268322499077128,-4.607464729273845e-5,-4.4422813065954085e-8,-0.0022265671012077232,-4.6304319138032545e-5,-4.46843227290974e-8,-0.002226239866699384,-4.65292374402582e-5,-4.4941773047288794e-8,-0.002225854484890745,-4.6724799757426735e-5,-4.51677431041688e-8,-0.0022254237956320375,-4.6869601410910074e-5,-4.5338309138385286e-8,-0.002224968272659459,-4.694890763075256e-5,-4.543684582222292e-8,-0.002224513374267207,-4.695764552052053e-5,-4.545727907051517e-8,-0.0022240857042466885,-4.690227807341315e-5,-4.5406156340506795e-8,-0.0022237084214524207,-4.680103654287797e-5,-4.530300679993751e-8,-0.002223396530534961,-4.668216756519775e-5,-4.517860947561035e-8,-0.002223152787249789,-4.658014304122351e-5,-4.507104168252101e-8,-0.002222964935742375,-4.652995213290346e-5,-4.501951893274435e-8,-0.002222805166025817,-4.655966574712351e-5,-4.505611999008108e-8,-0.0022226330833182246,-4.6682000764129616e-5,-4.519616588800026e-8,-0.002222403496610867,-4.6886909508180545e-5,-4.542958762812166e-8,-0.002222079087811143,-4.7138819175493126e-5,-4.571749442657403e-8,-0.0022216449448798823,-4.738267384694757e-5,-4.59987335824701e-8,-0.002221118171827722,-4.7560111136303446e-5,-4.620795613858712e-8,-0.002220545312392466,-4.763048075773373e-5,-4.629917145710085e-8,-0.002219986393474025,-4.758588464850228e-5,-4.626262271116031e-8,-0.002219493466999461,-4.745169161788492e-5,-4.612549476134362e-8,-0.0022190950899372997,-4.727349057060608e-5,-4.5937616176018814e-8,-0.0022187928437108866,-4.709946526084481e-5,-4.575211981967887e-8,-0.0022185676608473866,-4.6967148258508964e-5,-4.561086581454774e-8,-0.0022183897340214403,-4.6897877865561347e-5,-4.5538205382200175e-8,-0.002218227112864587,-4.689730372738356e-5,-4.55412865670691e-8,-0.0022180511931498754,-4.6958726789225835e-5,-4.5613476972552826e-8,-0.002217839478448058,-4.706684563405332e-5,-4.573834204511953e-8,-0.002217576767892167,-4.720088385532349e-5,-4.5893088802846886e-8,-0.0022172557391592737,-4.7337099909682e-5,-4.605143273264397e-8,-0.0022168773700565656,-4.74510906017821e-5,-4.6186255635813826e-8,-0.0022164511799183666,-4.752034046529439e-5,-4.627248139736567e-8,-0.002215994899699834,-4.7527295848164124e-5,-4.629045712510837e-8,-0.002215532947978386,-4.746279506796771e-5,-4.622968509992351e-8,-0.0022150932151455763,-4.732912349998839e-5,-4.60921625117704e-8,-0.0022147021652644183,-4.714160221841957e-5,-4.589418230010463e-8,-0.002214378969883185,-4.692762570971198e-5,-4.566542228593394e-8,-0.0022141300645164186,-4.672255695780222e-5,-4.544463178449744e-8,-0.0022139458137362612,-4.6562850713633075e-5,-4.52722393117001e-8,-0.00221380060967952,-4.64777591528412e-5,-4.518126383051442e-8,-0.0022136569173281237,-4.648149783906708e-5,-4.518852648490155e-8,-0.0022134729343128413,-4.65678409922886e-5,-4.5288350736913463e-8,-0.002213212730213477,-4.670898079689068e-5,-4.545089717714251e-8,-0.002212856797894262,-4.686004182357243e-5,-4.562684735817594e-8,-0.0022124099074522273,-4.6969555866714336e-5,-4.575890861717408e-8,-0.0022119026018825377,-4.699407898397332e-5,-4.579813949784263e-8,-0.0022113839010346006,-4.691226389953383e-5,-4.5719800103478644e-8,-0.0022109065487812933,-4.673212611187127e-5,-4.553166994833471e-8,-0.0022105106421530336,-4.6487513953655795e-5,-4.52703652159344e-8,-0.002210212924897253,-4.622545023671105e-5,-4.498750033432147e-8,-0.0022100056515220326,-4.599082657138239e-5,-4.4732842639896e-8,-0.0022098634270506174,-4.58151562763414e-5,-4.454182124988341e-8,-0.002209753114187779,-4.5712337116466916e-5,-4.4430643000829475e-8,-0.0022096423610802776,-4.568024895658921e-5,-4.439779129857697e-8,-0.0022095048224221024,-4.570516696428774e-5,-4.4428692789315846e-8,-0.0022093223580628898,-4.576643434562114e-5,-4.45008081941231e-8,-0.0022090854104389146,-4.5840198863217866e-5,-4.458782308690369e-8,-0.002208792684048753,-4.590211841998753e-5,-4.4662757683266604e-8,-0.002208450773065764,-4.592949249699432e-5,-4.470041059236587e-8,-0.0022080738356743857,-4.590342965342051e-5,-4.467976024450722e-8,-0.0022076829208446235,-4.581149511652582e-5,-4.45868263584567e-8,-0.0022073042325302127,-4.565081152181556e-5,-4.441802397944935e-8,-0.002206965605216999,-4.5430915166275075e-5,-4.418331181075295e-8,-0.0022066909305378285,-4.51749843519472e-5,-4.390764665471133e-8,-0.0022064933389565914,-4.49177448738443e-5,-4.3628860219709356e-8,-0.0022063692939843756,-4.469903269899099e-5,-4.339076928750656e-8,-0.002206296459441618,-4.455384182826084e-5,-4.323234070924075e-8,-0.002206237344690818,-4.450182876565845e-5,-4.317610450389361e-8,-0.002206148437110928,-4.454022855258338e-5,-4.322014158498983e-8,-0.0022059920678573607,-4.464314996140854e-5,-4.333696738013364e-8,-0.002205747078655037,-4.47677698551155e-5,-4.3480006469238615e-8,-0.0022054149560458707,-4.4865453971987394e-5,-4.359562672668298e-8,-0.0022050197778874484,-4.4894469310904836e-5,-4.363714563703815e-8,-0.002204602080350687,-4.483081733338681e-5,-4.357698088947024e-8,-0.0022042082496701748,-4.4674256976108435e-5,-4.34136267011671e-8,-0.002203878355963061,-4.444767502332483e-5,-4.317130450908105e-8,-0.002203636131830214,-4.418988337579432e-5,-4.289227455216706e-8,-0.0022034842767954172,-4.3944313012475434e-5,-4.2624468807672645e-8,-0.0022034062225738905,-4.374765150444576e-5,-4.240888990786396e-8,-0.0022033728732570334,-4.362214656382595e-5,-4.22709113039624e-8,-0.0022033511472193176,-4.357325021474196e-5,-4.2217405326860426e-8,-0.002203311259278957,-4.359184072021775e-5,-4.2238963148967383e-8,-0.002203231161403219,-4.365884984553331e-5,-4.2314893940482235e-8,-0.0022030981896355236,-4.37501815219e-5,-4.241868804084055e-8,-0.0022029088590102435,-4.3840715442687394e-5,-4.252255845087228e-8,-0.002202667855443351,-4.390713159132299e-5,-4.2600676139939876e-8,-0.0022023869397814195,-4.392991328620103e-5,-4.263141972686281e-8,-0.002202083971331653,-4.389514078579005e-5,-4.259929970541784e-8,-0.0022017817509400405,-4.3796571313615305e-5,-4.2497155377534966e-8,-0.002201506019114991,-4.363807773550661e-5,-4.232878802184368e-8,-0.002201281829056389,-4.3435865519477696e-5,-4.211145676298463e-8,-0.0022011278651603286,-4.321905966755535e-5,-4.187668985882363e-8,-0.002201049428771376,-4.3026635343832115e-5,-4.166711799444936e-8,-0.0022010326564595945,-4.2899212226683795e-5,-4.1527605488542144e-8,-0.0022010438605880736,-4.2866701401245325e-5,-4.149168981230639e-8,-0.002201036815050561,-4.2936311524374124e-5,-4.156826007306663e-8,-0.0022009668005209242,-4.3087189621691026e-5,-4.1735408849570453e-8,-0.002200805687849186,-4.3275540935940235e-5,-4.194576010041846e-8,-0.0022005511147673534,-4.344845205145683e-5,-4.214141087930924e-8,-0.0022002261579351164,-4.356010243054483e-5,-4.2271627325288035e-8,-0.0021998709471877614,-4.3583870411128616e-5,-4.230621553318354e-8,-0.0021995306329296136,-4.351713167905666e-5,-4.2241049980976345e-8,-0.002199244012936336,-4.337907539302264e-5,-4.209604395428574e-8,-0.0021990354974688524,-4.3203716761038325e-5,-4.190782352683438e-8,-0.0021989114882803953,-4.303068697336216e-5,-4.1719808660383815e-8,-0.0021988611198272934,-4.2896143039547516e-5,-4.157220587465444e-8,-0.002198860529686386,-4.28256834219112e-5,-4.149400848221767e-8,-0.0021988792290551736,-4.283052362484336e-5,-4.149848437908441e-8,-0.0021988868020958604,-4.290728558961128e-5,-4.158266825085552e-8,-0.002198858332636107,-4.30407374421635e-5,-4.1730227888167276e-8,-0.0021987776559889718,-4.320815607531913e-5,-4.191627227789234e-8,-0.0021986383828306827,-4.338394252488224e-5,-4.211255171468341e-8,-0.0021984432617016725,-4.354352417484422e-5,-4.229189520363366e-8,-0.0021982026851288055,-4.366616419637895e-5,-4.243138177200893e-8,-0.002197932987833362,-4.373685585806035e-5,-4.2514400830429825e-8,-0.0021976547873646343,-4.374776948947891e-5,-4.2532145447490745e-8,-0.0021973912163822202,-4.3699666494011446e-5,-4.248507449934088e-8,-0.002197165565964018,-4.360339553726757e-5,-4.238455982416569e-8,-0.0021969976661542537,-4.348102472191013e-5,-4.2254266098886135e-8,-0.0021968986060033643,-4.3365344851824027e-5,-4.212983081364773e-8,-0.002196864488916266,-4.329582521635688e-5,-4.205462845468875e-8,-0.00219687177106506,-4.330950164594914e-5,-4.206983298743024e-8,-0.0021968783763478264,-4.342774012978813e-5,-4.219976819299261e-8,-0.002196833942465688,-4.364410781791684e-5,-4.2438344229764724e-8,-0.0021966974953614438,-4.392134829558463e-5,-4.274547229078794e-8,-0.0021964542822063117,-4.420215324008212e-5,-4.305868573313644e-8,-0.002196122004749595,-4.4429633911088055e-5,-4.3315482134634745e-8,-0.002195743141195934,-4.456667055575025e-5,-4.3474511881865136e-8,-0.0021953688213683063,-4.460502832877005e-5,-4.352567029416044e-8,-0.0021950430896256865,-4.456276883725236e-5,-4.34875261233581e-8,-0.00219479325103675,-4.447456387533459e-5,-4.339707996174946e-8,-0.0021946271302473947,-4.4380500039176534e-5,-4.329781770575668e-8,-0.0021945353071144784,-4.43168589575551e-5,-4.322972528487527e-8,-0.0021944959560133495,-4.4310062852754164e-5,-4.322252177775724e-8,-0.002194480563537203,-4.4373660852183527e-5,-4.32920524953864e-8,-0.0021944595227321863,-4.450786864707432e-5,-4.343945466521452e-8,-0.0021944069506842096,-4.4701191951449525e-5,-4.36527150890374e-8,-0.0021943042180325003,-4.49335617950116e-5,-4.391005375463803e-8,-0.002194141906377647,-4.518027077748843e-5,-4.4184332052663467e-8,-0.0021939201779301136,-4.5416019876788224e-5,-4.444764386522221e-8,-0.002193647790767406,-4.561847347713716e-5,-4.4675332295713537e-8,-0.0021933402416158846,-4.5770915859345256e-5,-4.484892453692752e-8,-0.00219301755709073,-4.586399243241319e-5,-4.495797173896476e-8,-0.0021927019881854267,-4.589680376520009e-5,-4.50011490514789e-8,-0.002192415581968075,-4.587758677189852e-5,-4.498696354861374e-8,-0.002192177416627541,-4.582404354917942e-5,-4.493420418458068e-8,-0.0021920001056428633,-4.576302032079154e-5,-4.487180284605771e-8,-0.0021918853630141493,-4.5728554041258204e-5,-4.483694086387648e-8,-0.0021918193971149852,-4.575678790110061e-5,-4.486962210563871e-8,-0.0021917704552939657,-4.5876737000029106e-5,-4.500249145208053e-8,-0.0021916921793231213,-4.609805171784536e-5,-4.524715951212536e-8,-0.002191535722030832,-4.640085504307758e-5,-4.558273256144663e-8,-0.002191268622527711,-4.673572239421093e-5,-4.5955562378608346e-8,-0.0021908911531643392,-4.703860588774864e-5,-4.6295536372601254e-8,-0.0021904389342049485,-4.725525462149562e-5,-4.654284579454351e-8,-0.0021899688757674282,-4.7361335435271427e-5,-4.667003748796585e-8,-0.002189537217572945,-4.736738240175443e-5,-4.66875152635767e-8,-0.002189182178099598,-4.730905371796731e-5,-4.6633131046491385e-8,-0.0021889175315774733,-4.723144495265606e-5,-4.655539679656418e-8,-0.0021887354256682617,-4.717574835041439e-5,-4.6499184056199204e-8,-0.0021886135162408732,-4.717157179860376e-5,-4.649736314449432e-8,-0.0021885224957076004,-4.723435333698451e-5,-4.656775348526145e-8,-0.002188432196672109,-4.736596568910569e-5,-4.671343301511786e-8,-0.0021883159915355365,-4.755688007918747e-5,-4.69247944722332e-8,-0.002188153797184117,-4.7789060056815985e-5,-4.7182558125506696e-8,-0.0021879339216937933,-4.8039252490120275e-5,-4.7461392605544466e-8,-0.0021876538472704776,-4.828243590852618e-5,-4.773381750934838e-8,-0.002187319992989988,-4.849521912185547e-5,-4.7974061450627616e-8,-0.0021869464613131022,-4.865894024085986e-5,-4.816152081756237e-8,-0.0021865528992877276,-4.87620998684626e-5,-4.828339410490294e-8,-0.0021861618199906937,-4.8801891534619e-5,-4.833627312095251e-8,-0.0021857956854069802,-4.878486309271509e-5,-4.832680892763946e-8,-0.0021854738600616984,-4.8726762987137e-5,-4.8271587194920043e-8,-0.0021852094900030724,-4.86515128943926e-5,-4.8196176656966384e-8,-0.002185006334014698,-4.858914285791343e-5,-4.8133122371377696e-8,-0.0021848556724831675,-4.8572182159752406e-5,-4.8118210423692764e-8,-0.0021847340908449993,-4.862969584851901e-5,-4.818398533821574e-8,-0.0021846040333787834,-4.8778729210677626e-5,-4.835019658202303e-8,-0.0021844197065521583,-4.901477659668526e-5,-4.861300583671992e-8,-0.002184139908137586,-4.9305740268685153e-5,-4.89380239589084e-8,-0.002183745208710712,-4.959578164277363e-5,-4.926436436193073e-8,-0.0021832508778272947,-4.9822400093252296e-5,-4.9523381452495355e-8,-0.0021827054179990426,-4.9940812964766306e-5,-4.9665452368679164e-8,-0.002182172657790118,-4.9941786271621964e-5,-4.967953305482646e-8,-0.0021817074157041024,-4.985220421423567e-5,-4.959386599256073e-8,-0.002181338673865619,-4.9720142395811015e-5,-4.945991919619401e-8,-0.0021810666706533364,-4.9595568980319e-5,-4.933166537295909e-8,-0.0021808703783844,-4.951657478515571e-5,-4.92507832762818e-8,-0.0021807181941960203,-4.950399504420421e-5,-4.924073730655143e-8,-0.0021805769182982548,-4.956218364039945e-5,-4.9307324380953e-8,-0.0021804174795038798,-4.968259370492711e-5,-4.9442212976376634e-8,-0.0021802179110294567,-4.9847836933814006e-5,-4.9627109424267564e-8,-0.002179964670767143,-5.003531159657192e-5,-4.983764252872737e-8,-0.0021796530724134083,-5.0220385609024966e-5,-5.004692161411961e-8,-0.002179287108625143,-5.0379309817940806e-5,-5.0228863268068284e-8,-0.0021788786984716967,-5.049197671212808e-5,-5.0361312329529946e-8,-0.0021784462256297563,-5.054452595703909e-5,-5.04289060225776e-8,-0.0021780122025803136,-5.053151803276535e-5,-5.042538797210063e-8,-0.002177600157916581,-5.045722929573454e-5,-5.035495070136917e-8,-0.0021772310966522526,-5.0335776567875636e-5,-5.023237210708531e-8,-0.002176919902460922,-5.0189932859938544e-5,-5.0081843179902245e-8,-0.00217667207082299,-5.004853269807545e-5,-4.993436120974221e-8,-0.0021764812441906808,-4.994249777622941e-5,-4.982363597059191e-8,-0.0021763280507105863,-4.98996114264398e-5,-4.978052270196503e-8,-0.0021761809437515654,-4.9938185981473035e-5,-4.982603516805561e-8,-0.002176000149806595,-5.006025793450334e-5,-4.9963621703133264e-8,-0.002175745817326205,-5.024622884164902e-5,-5.0172910484799115e-8,-0.002175390157594791,-5.0454365055776456e-5,-5.0408841281164365e-8,-0.002174930337153652,-5.06288459355e-5,-5.061036106903455e-8,-0.002174395353711165,-5.071699644838109e-5,-5.0719362989473973e-8,-0.0021738401034926535,-5.0689679713245726e-5,-5.0703131233504954e-8,-0.0021733265233010663,-5.055363671187018e-5,-5.056794205359903e-8,-0.0021729011128648096,-5.034775070284775e-5,-5.035513085813307e-8,-0.0021725811078602674,-5.012585939427826e-5,-5.012259516349527e-8,-0.0021723547388293137,-4.993700515060601e-5,-4.992354472562844e-8,-0.0021721915116131806,-4.9812811310871116e-5,-4.979285902848771e-8,-0.0021720546749986677,-4.976445626435847e-5,-4.9743630077680485e-8,-0.002171910550591354,-4.978612573658363e-5,-4.977057674929707e-8,-0.0021717334408312126,-4.986073223887547e-5,-4.985593590639394e-8,-0.0021715072056702122,-4.9965197761627746e-5,-4.997503848354697e-8,-0.002171225123681876,-5.007442062639999e-5,-5.010064735726323e-8,-0.0021708891541935235,-5.0164162613396194e-5,-5.020624123144993e-8,-0.002170509011565236,-5.021337352113505e-5,-5.026869269970753e-8,-0.0021701010201165194,-5.020633834079381e-5,-5.027067408474085e-8,-0.002169686481978018,-5.013479660142251e-5,-5.02029350445516e-8,-0.0021692892001323122,-4.999980622314807e-5,-5.006625128102955e-8,-0.002168932022375522,-4.9812758371010945e-5,-4.9872480658075486e-8,-0.002168632724515974,-4.95948957641629e-5,-4.96440934171442e-8,-0.0021683999304833723,-4.9374905475583854e-5,-4.94117279890712e-8,-0.0021682299884622017,-4.9184517024424835e-5,-4.9209644023520306e-8,-0.0021681057683319905,-4.905256550499114e-5,-4.906946354132325e-8,-0.0021679981084059274,-4.899850303697785e-5,-4.901315398366616e-8,-0.0021678702118165865,-4.902660625417457e-5,-4.904654790153962e-8,-0.002167684855459021,-4.912228342329066e-5,-4.915496722137846e-8,-0.002167413675346147,-4.9252117611135175e-5,-4.930287422769272e-8,-0.0021670467328493287,-4.9369236645834006e-5,-4.9439453319941026e-8,-0.0021665991445428225,-4.942457392269512e-5,-4.951084310411176e-8,-0.0021661107109958544,-4.9382031214902844e-5,-4.9476821013151695e-8,-0.0021656359860024264,-4.923205966050717e-5,-4.932584479686643e-8,-0.0021652269664645565,-4.8996524294130615e-5,-4.908058662160895e-8,-0.0021649159058167063,-4.872105249104496e-5,-4.878982557957179e-8,-0.002164706655984438,-4.8458301673946887e-5,-4.8510450968611894e-8,-0.0021645777385677746,-4.825084661063017e-5,-4.8288973195301046e-8,-0.0021644934054848965,-4.812122783466715e-5,-4.81506379139743e-8,-0.0021644159176900527,-4.8071024900689184e-5,-4.809815557247862e-8,-0.0021643141929952214,-4.808594061576428e-5,-4.81168922637752e-8,-0.002164167674411756,-4.814266053659258e-5,-4.818208341414474e-8,-0.0021639667146355628,-4.8214709519840826e-5,-4.8265144796799985e-8,-0.0021637113015193915,-4.8276471408607926e-5,-4.833815104674628e-8,-0.0021634093935051597,-4.8305717497990586e-5,-4.8376751136334334e-8,-0.0021630753860666465,-4.8285336142651836e-5,-4.836216222000512e-8,-0.0021627286667312874,-4.8204863846761885e-5,-4.828283802361071e-8,-0.002162391861482956,-4.8062097732630306e-5,-4.813613888210156e-8,-0.0021620882679398825,-4.786457221389886e-5,-4.792984469758117e-8,-0.0021618381966684985,-4.763020148052184e-5,-4.768283959318655e-8,-0.0021616544721947527,-4.738615688544101e-5,-4.74240049864915e-8,-0.0021615380479013072,-4.716519867376527e-5,-4.718845234479752e-8,-0.002161475302072799,-4.699937039553237e-5,-4.701091284755469e-8,-0.0021614386393250546,-4.6912154688658707e-5,-4.691736184216948e-8,-0.002161391201800069,-4.6911292679655636e-5,-4.691717630397373e-8,-0.002161295075484384,-4.698475296081406e-5,-4.6998506562417824e-8,-0.002161121034202,-4.710162372082691e-5,-4.712886694957854e-8,-0.002160857131367918,-4.7218339997966116e-5,-4.726153824963162e-8,-0.0021605135166616594,-4.728911357216719e-5,-4.734669635449493e-8,-0.002160121614640899,-4.727811102218645e-5,-4.7344670899897986e-8,-0.002159727070259186,-4.71700332472349e-5,-4.72376676723403e-8,-0.002159377681774251,-4.697546153405605e-5,-4.703590761080976e-8,-0.0021591097858532486,-4.672829423936533e-5,-4.677517141941328e-8,-0.002158938074167603,-4.6475408602648845e-5,-4.650582202815821e-8,-0.002158852916009944,-4.626235480050213e-5,-4.627738514230599e-8,-0.002158825801635166,-4.612087538018337e-5,-4.612493766194266e-8,-0.002158819709787541,-4.606270599802699e-5,-4.606214934513943e-8,-0.002158799607308813,-4.608051665422589e-5,-4.6081993496327766e-8,-0.0021587395273344563,-4.615361327504223e-5,-4.616267371658823e-8,-0.002158625286072611,-4.625494118904886e-5,-4.627511694149892e-8,-0.002158453953359905,-4.635691120285143e-5,-4.638936013416345e-8,-0.002158231790057722,-4.643523375110354e-5,-4.647887273854775e-8,-0.002157971911670394,-4.647108233605865e-5,-4.652305041561149e-8,-0.0021576922476335206,-4.6452294121769896e-5,-4.650856384345036e-8,-0.0021574138014324212,-4.637428430326153e-5,-4.6430286990051256e-8,-0.0021571587957101316,-4.624105015071745e-5,-4.629227406134107e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json new file mode 100644 index 0000000..b4be241 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":1000,"numberOfSamples":1000,"samples":[-0.002156948117797158,-4.6066106188504274e-5,-4.610870837852341e-8,-0.0021567976844821175,-4.587262928957953e-5,-4.590411215695837e-8,-0.002156713908245568,-4.569170874283684e-5,-4.5711626484184725e-8,-0.0021566893595621928,-4.555761003533914e-5,-4.5568113732113295e-8,-0.002156700743371349,-4.549983445555494e-5,-4.5505741530892555e-8,-0.0021567115663395065,-4.5533671389188886e-5,-4.5541790676334716e-8,-0.0021566804178876843,-4.5652915406612466e-5,-4.5670622833809834e-8,-0.002156572912636481,-4.582870678241587e-5,-4.58621255953264e-8,-0.0021563728566239655,-4.601620142754535e-5,-4.6068577295811786e-8,-0.0021560880133587525,-4.616711622705171e-5,-4.623794070121091e-8,-0.002155748222189647,-4.62434863816923e-5,-4.6328641438483505e-8,-0.002155396920669294,-4.622782396424562e-5,-4.632067580425877e-8,-0.00215507933393081,-4.612686483113469e-5,-4.621997607570151e-8,-0.0021548310204559523,-4.596856314722607e-5,-4.605556460572259e-8,-0.0021546697448800787,-4.579380803487395e-5,-4.5870948767990285e-8,-0.0021545925009090403,-4.564545026639773e-5,-4.571243253541094e-8,-0.00215457808447119,-4.555777214888923e-5,-4.561767662258407e-8,-0.002154594019620961,-4.554927142265337e-5,-4.560764640929833e-8,-0.002154605368940617,-4.562040509803385e-5,-4.568383677005805e-8,-0.002154582628502511,-4.575613804937631e-5,-4.583074108471704e-8,-0.0021545067042819666,-4.593156748733217e-5,-4.602179515117175e-8,-0.0021543704349080905,-4.6118291920214145e-5,-4.6226298143065905e-8,-0.002154177429419203,-4.628970757896518e-5,-4.64152905393417e-8,-0.0021539395320203554,-4.642448039496704e-5,-4.656547403677698e-8,-0.0021536740325304696,-4.6508347419083976e-5,-4.6661248300741016e-8,-0.002153401212638439,-4.6534852085000904e-5,-4.669548060691322e-8,-0.0021531422886805827,-4.650565883599465e-5,-4.666974436961425e-8,-0.0021529174221249937,-4.6430830311047396e-5,-4.6594529114611347e-8,-0.002152743281384537,-4.632899782380846e-5,-4.648943285318694e-8,-0.0021526297364554913,-4.622682327908873e-5,-4.6382720029024235e-8,-0.0021525757781952213,-4.615665217809799e-5,-4.6309007987320986e-8,-0.0021525657635618595,-4.615111791560906e-5,-4.630363581540198e-8,-0.0021525683606683156,-4.623433111379003e-5,-4.639321479077921e-8,-0.0021525411131787307,-4.641162808298889e-5,-4.658444896551646e-8,-0.00215244181360915,-4.6662730585749126e-5,-4.685650807739798e-8,-0.002152243559761613,-4.69438336830974e-5,-4.716299443903288e-8,-0.0021519463173773905,-4.720028130623982e-5,-4.744536946490242e-8,-0.0021515783140552483,-4.738487646555355e-5,-4.7652539659263205e-8,-0.0021511863195340735,-4.7473012892754915e-5,-4.775714558013054e-8,-0.002150820158632104,-4.74681988823182e-5,-4.7761682951372046e-8,-0.0021505186509381763,-4.739759003524929e-5,-4.769404722497823e-8,-0.002150301454146949,-4.7301602034095665e-5,-4.75967746928141e-8,-0.002150167504080223,-4.722237577724007e-5,-4.751493736774092e-8,-0.0021500984653760494,-4.7194327180898005e-5,-4.7486029043007825e-8,-0.002150065007643072,-4.7238211715320985e-5,-4.753336591146179e-8,-0.002150034011848315,-4.735890504159874e-5,-4.7663329284699034e-8,-0.0021499752813515308,-4.754650144645341e-5,-4.7866189097583804e-8,-0.0021498666614940885,-4.777999559892799e-5,-4.811985529955003e-8,-0.002149696844734374,-4.8032435641353954e-5,-4.8395408706038154e-8,-0.0021494657462589853,-4.8276239272205825e-5,-4.866295866283441e-8,-0.0021491829316347584,-4.848761715432387e-5,-4.8896590036391526e-8,-0.002148864888882999,-4.864954755615883e-5,-4.9077698538029214e-8,-0.002148531969661492,-4.875324012053347e-5,-4.9196590948451486e-8,-0.00214820559302335,-4.879845385417849e-5,-4.925275811633043e-8,-0.0021479058723801398,-4.8793211725869386e-5,-4.9254476683867235e-8,-0.0021476494691693242,-4.875326148772683e-5,-4.921820529983365e-8,-0.0021474473356039884,-4.8701280224926454e-5,-4.916782927985692e-8,-0.002147302025734625,-4.8665427348109735e-5,-4.913330991550414e-8,-0.0021472046146883317,-4.867636961659977e-5,-4.914769826441347e-8,-0.0021471322071707254,-4.8761685544412094e-5,-4.924121019381598e-8,-0.0021470482597085038,-4.893732048233069e-5,-4.943192954490526e-8,-0.002146908584499707,-4.91979967179343e-5,-4.97152190263401E-08,-0.002146674363316176,-4.9511646656850674e-5,-5.0057427768996096e-8,-0.002146328667920062,-4.982422622000098e-5,-5.0400872447169334e-8,-0.0021458875359486144,-5.007688042712524e-5,-5.0682229364308553e-8,-0.002145397011314185,-5.0228379818507437e-5,-5.0856638807463407e-8,-0.0021449161791735768,-5.0270217445764416e-5,-5.091394422090286e-8,-0.002144495917953705,-5.0226434247242504e-5,-5.087865414824122e-8,-0.002144164522903363,-5.01408709895491e-5,-5.079660476566392e-8,-0.002143924532470479,-5.0060878640441164e-5,-5.0717902245852795e-8,-0.002143757959315198,-5.002483607513269e-5,-5.068379162791456e-8,-0.002143634896737234,-5.005585115815337e-5,-5.071984838493151e-8,-0.002143521842854634,-5.0160650756850324e-5,-5.083446444779818e-8,-0.002143388120717485,-5.0331651201626866e-5,-5.102064773664288e-8,-0.002143210184954386,-5.055054311417113e-5,-5.125954074459971e-8,-0.002142974117514982,-5.079251129394976e-5,-5.152482507010141e-8,-0.0021426765074378826,-5.103064468172294e-5,-5.178753018681961e-8,-0.0021423238391256607,-5.124006797853224e-5,-5.202065134245872e-8,-0.002141930651324379,-5.140134181465216e-5,-5.220297342970296e-8,-0.0021415168281439588,-5.150282446702924e-5,-5.2321688446799315e-8,-0.0021411044645297406,-5.154180999406271e-5,-5.237359158139016e-8,-0.0021407148054202576,-5.152449499997826e-5,-5.236496558245039e-8,-0.0021403655678020684,-5.146510002939213e-5,-5.231059043138093e-8,-0.002140068652238457,-5.138444270295482e-5,-5.2232268635753575e-8,-0.002139828133292629,-5.1308028225241545e-5,-5.2156950212399334e-8,-0.002139638422673149,-5.126350568803761e-5,-5.2114230564000163e-8,-0.00213948268691379,-5.1277018333799685e-5,-5.213259191254482e-8,-0.002139332290822501,-5.1367795817320406e-5,-5.223357239670482e-8,-0.0021391489883805194,-5.154098912009453e-5,-5.242383088390882e-8,-0.002138891970010422,-5.1780522562900146e-5,-5.268710604455327e-8,-0.0021385305995390066,-5.20462253084977e-5,-5.2980835455315765e-8,-0.002138059594008942,-5.2280784568316565e-5,-5.324353111816718e-8,-0.002137508049281609,-5.242840674319948e-5,-5.341489927661907e-8,-0.0021369333564798328,-5.245794992558174e-5,-5.3460757754233854e-8,-0.0021364000567887635,-5.237659280739311e-5,-5.338772944526506e-8,-0.0021359554177806913,-5.222499524366457e-5,-5.323816602452792e-8,-0.0021356157132549174,-5.205829004263862e-5,-5.307010206523827e-8,-0.002135367798385966,-5.1925718630202697e-5,-5.293584770307225e-8,-0.0021351802309842655,-5.185853393324863e-5,-5.2869237987871783e-8,-0.002135015709675917,-5.186747116928778e-5,-5.288277568269625e-8,-0.0021348401734937695,-5.194616985504687e-5,-5.2970891829753475e-8,-0.002134627758060293,-5.2076667370690687e-5,-5.311539888620349e-8,-0.002134362664862016,-5.22346501846903e-5,-5.329085053332862e-8,-0.0021340393185033547,-5.2393733389077045e-5,-5.3469096840437146e-8,-0.002133661644592146,-5.252894430972528e-5,-5.362316413179043e-8,-0.0021332416919183183,-5.2619642849676823e-5,-5.373058405670703e-8,-0.002132797639105352,-5.265187989316952e-5,-5.377605953151373e-8,-0.00213235123299873,-5.262008658853691e-5,-5.3753301407695094e-8,-0.0021319247547086106,-5.252787431710746e-5,-5.366582385721862e-8,-0.002131537812166341,-5.2387711692295135e-5,-5.3526527141880856e-8,-0.002131204386649835,-5.221948578729788e-5,-5.335616249926751e-8,-0.002130930436840616,-5.204813499564776e-5,-5.3180922715721016e-8,-0.0021307122475242276,-5.190051666082856e-5,-5.3029303636494595e-8,-0.002130535691096194,-5.1801663288743484e-5,-5.2928303953712826e-8,-0.002130376577415983,-5.1770519389418736e-5,-5.289893815879023e-8,-0.0021302025383327134,-5.1815158911048855e-5,-5.2950976313991277e-8,-0.002129977378036466,-5.192792796725971e-5,-5.3077407334747964E-08,-0.0021296688087945386,-5.208214555192072e-5,-5.325050928388623e-8,-0.0021292592998348823,-5.2233329336141494e-5,-5.342289782969275e-8,-0.002128757014872047,-5.2328224363975537e-5,-5.353718707965699e-8,-0.0021282003685288873,-5.232211388239153e-5,-5.354471701182651e-8,-0.0021276495587692528,-5.219820202071707e-5,-5.342650421322242e-8,-0.002127165444777017,-5.1977374748586926e-5,-5.32037987462269e-8,-0.002126786408919701,-5.1710339300552144e-5,-5.292980367635397e-8,-0.0021265166937946525,-5.145633618560855e-5,-5.2667177244896215e-8,-0.00212633105580082,-5.126167160748416e-5,-5.246538067689548e-8,-0.002126189328271234,-5.114869660600918e-5,-5.234897812409529e-8,-0.0021260510373621883,-5.111638783278097e-5,-5.231801132895357e-8,-0.002125884513579751,-5.114733030685652e-5,-5.235503053809026e-8,-0.0021256702248682435,-5.121572331910457e-5,-5.243327665430199e-8,-0.002125400455812279,-5.1293642979333694e-5,-5.252321996716058e-8,-0.0021250775059338096,-5.1355096043385815e-5,-5.259696904862907e-8,-0.0021247116610059085,-5.1378537621995244e-5,-5.2631164024147827e-8,-0.0021243192352671083,-5.134861185069034e-5,-5.2609026267915535e-8,-0.002123920533294502,-5.125749504161394e-5,-5.252187717870801e-8,-0.002123537513917045,-5.1105899487825944e-5,-5.237017732952232e-8,-0.0021231909824004935,-5.0903510148269925e-5,-5.21639052525058e-8,-0.002122897386272381,-5.066840160744641e-5,-5.192188374186477e-8,-0.0021226656718111524,-5.042508933637542e-5,-5.166975788992617e-8,-0.002122494839571998,-5.0201204525872756e-5,-5.143662126873064e-8,-0.0021223728064571974,-5.002307532138799e-5,-5.125052539179263e-8,-0.002122277063662247,-4.9910792187481684e-5,-5.1133373559448276e-8,-0.002122177350465051,-4.9873571668336e-5,-5.1095958839310544e-8,-0.002122040271899325,-4.990621895883855e-5,-5.113395766297128e-8,-0.002121835670220407,-4.998749569171908e-5,-5.122580454826739e-8,-0.002121544289358671,-5.008151805352115e-5,-5.133380683137773e-8,-0.0021211653940700756,-5.0143498952941705e-5,-5.141007127166793e-8,-0.0021207216447338448,-5.0130441492102875e-5,-5.1407976149345016e-8,-0.002120257496141451,-5.001520456175847e-5,-5.1297441102601807e-8,-0.002119828397979043,-4.9798850489622e-5,-5.107840402680578e-8,-0.0021194826754195456,-4.9513892869127156e-5,-5.078451782729881e-8,-0.002119244086201465,-4.921409445932999e-5,-5.0472444375840066e-8,-0.0021191046402436534,-4.8954748273117716e-5,-5.0200988226733736e-8,-0.002119031138708923,-4.8773978554723135e-5,-5.001124485406591e-8,-0.002118980101862301,-4.8684026206295004e-5,-4.991720030835334e-8,-0.00211891220827597,-4.867379334879302e-5,-4.990812813538284e-8,-0.0021188006530865576,-4.8717674424215837e-5,-4.9957631878584515e-8,-0.0021186330805224884,-4.878489183979079e-5,-5.003335885442783e-8,-0.002118409606923484,-4.8846210672363946e-5,-5.010414572430475e-8,-0.0021181395569648243,-4.887764161794287e-5,-5.0144131459874775e-8,-0.002117838428140765,-4.8862089859800686e-5,-5.013472762586503e-8,-0.0021175254797301053,-4.87900395563563e-5,-5.006548391793509e-8,-0.0021172217039225403,-4.865995177280172e-5,-4.9934517707598465e-8,-0.0021169477453683006,-4.8478584561881674e-5,-4.9748766630150475e-8,-0.002116721392799632,-4.8261007717598124e-5,-4.952391111144196e-8,-0.00211655455107997,-4.802973321358578e-5,-4.928344153787555e-8,-0.002116450096966629,-4.781233066898358e-5,-4.9056238260434893e-8,-0.0021163995074253497,-4.763723300556185e-5,-4.88723175000772e-8,-0.00211638238176434,-4.752806896211847e-5,-4.8757005535652654e-8,-0.0021163687749273766,-4.749765415455074e-5,-4.872463016284184e-8,-0.0021163245129189124,-4.75433801208055e-5,-4.8773504423959966e-8,-0.0021162186131261293,-4.7645689733550204e-5,-4.888400543678275e-8,-0.0021160311239636605,-4.7770598620135224e-5,-4.902087037517744e-8,-0.0021157594156345004,-4.787624496808221e-5,-4.913984622203423e-8,-0.0021154210653734945,-4.792249771712643e-5,-4.919779498322852e-8,-0.0021150518661444766,-4.788171611098116e-5,-4.916427157162084e-8,-0.0021146983037815758,-4.774784549571525e-5,-4.903151581702451e-8,-0.0021144054214774677,-4.754043449876239e-5,-4.881909664190108e-8,-0.002114203335655032,-4.730071511555959e-5,-4.857004998709531e-8,-0.0021140976257717674,-4.7079605315396366e-5,-4.8338297363515245e-8,-0.002114068243449401,-4.6921741162987395e-5,-4.817168920274723e-8,-0.0021140776517754515,-4.685238849929127e-5,-4.8097948508555413e-8,-0.002114084019446718,-4.6872596236596724e-5,-4.81192411375788e-8,-0.002114053227237637,-4.6963141965845496e-5,-4.821604606694751e-8,-0.002113965448400426,-4.7093502898033734e-5,-4.8356449951288814e-8,-0.0021138158726727416,-4.7231060835115885e-5,-4.8505867927921634e-8,-0.0021136117434029157,-4.73475915439524e-5,-4.863405741638106e-8,-0.002113368243224607,-4.742253450655109e-5,-4.8718797175518944e-8,-0.0021131048107557887,-4.7443958322278066e-5,-4.874708212682086e-8,-0.002112842390293642,-4.740840058984932e-5,-4.87150037508711e-8,-0.002112601402461571,-4.732044050097083e-5,-4.8627229494421786e-8,-0.002112399898104981,-4.71923458598116e-5,-4.84965171325286e-8,-0.0021122513870208202,-4.7043586695278016e-5,-4.834314259144425e-8,-0.002112162155506463,-4.689959768605062e-5,-4.8193650389836864e-8,-0.0021121284044120486,-4.678902511400128e-5,-4.807810872069021e-8,-0.002112134192586928,-4.6738909755118304e-5,-4.802520783954363e-8,-0.002112151736011111,-4.676805674809973e-5,-4.8055358790222776e-8,-0.0021121455008559073,-4.68802207502431e-5,-4.8173435647070684e-8,-0.002112080244306887,-4.705993268071947e-5,-4.8364140938563196e-8,-0.0021119310664213338,-4.727368018370931e-5,-4.8592931302070324e-8,-0.002111691895111901,-4.747730114612249e-5,-4.881352739322071e-8,-0.0021113788749667064,-4.7627699607907756e-5,-4.898012188224292e-8,-0.00211102704677318,-4.7694954771803144e-5,-4.9060201272908396e-8,-0.002110681352249585,-4.767075494556609e-5,-4.90436883734857e-8,-0.002110384874318121,-4.7570663804349934e-5,-4.894570849816082e-8,-0.0021101677401916797,-4.7429813825341904e-5,-4.8802430880724736e-8,-0.002110039696581039,-4.729335730533683e-5,-4.866125590022362e-8,-0.0021099884072854364,-4.7204358850854926e-5,-4.8568084600913465e-8,-0.002109983945387274,-4.7192708949043166e-5,-4.855543459993911e-8,-0.0021099879117350232,-4.726846620998511e-5,-4.863507382826351e-8,-0.0021099639576379094,-4.7421428985429237e-5,-4.879720662545984e-8,-0.0021098861854816123,-4.7626298326830003e-5,-4.901567331796005e-8,-0.002109743186109511,-4.7850789510772105e-5,-4.9256450069474826e-8,-0.002109537586825893,-4.8063526347891254e-5,-4.948609768053289e-8,-0.002109282655958739,-4.8239580975826655e-5,-4.967782243823404e-8,-0.0021089979409871034,-4.8363148343395243e-5,-4.981449771751667e-8,-0.002108705341277884,-4.8427999229028034e-5,-4.988923858233261e-8,-0.002108426170116319,-4.843672757019664e-5,-4.990457813568429e-8,-0.0021081790939703336,-4.8399655340769195e-5,-4.987120855545762e-8,-0.002107978462340765,-4.8333815691984267e-5,-4.98068240380907e-8,-0.0021078325085235445,-4.8261883157006745e-5,-4.973500790876879e-8,-0.002107741182028866,-4.8210487087105704e-5,-4.968358842430621e-8,-0.0021076938773007476,-4.820714020935879e-5,-4.9681591379790985e-8,-0.0021076680383246907,-4.827513281127266e-5,-4.975399170959863e-8,-0.002107630376401887,-4.842654419791798e-5,-4.991432609044488e-8,-0.0021075425159545343,-4.865523284848443e-5,-5.015711147352186e-8,-0.0021073713272879244,-4.893349928726431e-5,-5.045403692151433e-8,-0.002107101054149504,-4.921621165090497e-5,-5.075804312180078e-8,-0.00210674158544731,-4.9453141274911964e-5,-5.1016160495136004e-8,-0.0021063277292051657,-4.960526660686225e-5,-5.1186657637328415e-8,-0.0021059088236712936,-4.965767137535703e-5,-5.1252729209342855e-8,-0.002105533355710234,-4.962333434846008e-5,-5.122672710022117e-8,-0.002105235298687669,-4.953725574759237e-5,-5.114433301511661e-8,-0.0021050267301768173,-4.9444765358431426e-5,-5.105262008384059e-8,-0.0021048975954977385,-4.938895653500951e-5,-5.099704564916817e-8,-0.0021048209457205044,-4.940083264676395e-5,-5.1011036159970786e-8,-0.0021047611320736954,-4.9493878141675046e-5,-5.110997819652719e-8,-0.0021046825545899023,-4.9663315734863536e-5,-5.1290024568352304e-8,-0.002104557033149279,-4.98893453161492e-5,-5.1531150434198844e-8,-0.0021043684802190066,-5.0143026698940785e-5,-5.1803180748147716e-8,-0.002104114312419352,-5.0393089164750924e-5,-5.2073008844431506e-8,-0.0021038039107087792,-5.0611974369170696e-5,-5.2311154609061635e-8,-0.002103455142864527,-5.077997300985246e-5,-5.249634587215205e-8,-0.0021030901973043527,-5.088713159052434e-5,-5.261767665298347e-8,-0.002102731754757487,-5.093327497583167e-5,-5.2674658453290784e-8,-0.002102400038249737,-5.0926853473763044e-5,-5.267593710089334e-8,-0.002102110741705476,-5.088333895282607e-5,-5.2637516149960456e-8,-0.002101873489403106,-5.08235740242651e-5,-5.2580999673824274e-8,-0.0021016904381226816,-5.07720385838116e-5,-5.2531862498246874e-8,-0.0021015548084289933,-5.0754644122074386e-5,-5.2517309070279127e-8,-0.002101449525764805,-5.079541727592946e-5,-5.256294807274047e-8,-0.002101346863688587,-5.091147619245311e-5,-5.268753767417356e-8,-0.0021012107625705593,-5.110647842638639e-5,-5.2895930277749896e-8,-0.0021010036231113496,-5.1364431323432054e-5,-5.317225671965255e-8,-0.0021006978474307205,-5.164780092740599e-5,-5.347763770609452e-8,-0.0021002887607210427,-5.1904283966139336e-5,-5.3757151991875933e-8,-0.0020998017811831972,-5.2082983385010847e-5,-5.3956856249473105e-8,-0.002099287305051419,-5.2153786677272464e-5,-5.404424493360183e-8,-0.002098803714303415,-5.211938886395136e-5,-5.402099729340937e-8,-0.0020983970909576486,-5.201310176200273e-5,-5.392087032373497e-8,-0.0020980879471518285,-5.1884788106360025e-5,-5.379525398388802e-8,-0.0020978694594535633,-5.178355560077695e-5,-5.3695353664609535e-8,-0.0020977146033212875,-5.1744897802943776e-5,-5.3658858151211176e-8,-0.0020975867206337855,-5.17850538647107e-5,-5.370387698001164e-8,-0.002097449252174256,-5.1901448471996434e-5,-5.382901325735156e-8,-0.0020972727165282454,-5.2076755488728516e-5,-5.4017187239652266e-8,-0.002097038679265766,-5.228448053746355e-5,-5.424119501315798e-8,-0.002096741115512614,-5.2494770950254756e-5,-5.446974146690214e-8,-0.0020963856479537316,-5.267968073580639e-5,-5.467310941300608e-8,-0.0020959871806476727,-5.281730553664611e-5,-5.482773870037851e-8,-0.002095566547851664,-5.2894425618154075e-5,-5.49192091763326e-8,-0.0020951467983804607,-5.2907580747666326e-5,-5.494346629557186e-8,-0.0020947496865052926,-5.2862703551995284e-5,-5.490641407062349e-8,-0.00209439283463895,-5.277366064911636e-5,-5.482230500560337e-8,-0.002094087719578533,-5.266022168051224e-5,-5.471156076175677e-8,-0.0020938383034884785,-5.2545818362760925e-5,-5.459846822588298e-8,-0.00209364009071615,-5.245512424241938e-5,-5.4508786421523974e-8,-0.002093479524987209,-5.241128303972207e-5,-5.4467015989831044e-8,-0.002093333866675805,-5.243244496307399e-5,-5.449285675295966e-8,-0.002093172238328941,-5.25272454837531e-5,-5.459637339444828e-8,-0.002092959192295158,-5.2689536740216397e-5,-5.47721861308031e-8,-0.002092662162437497,-5.289419192472436e-5,-5.4994709404817255e-8,-0.002092262731012093,-5.3097515495686634e-5,-5.5218327291160634e-8,-0.0020917682925749906,-5.3246152076680836e-5,-5.5386719323868286e-8,-0.0020912168729252238,-5.32948950916572e-5,-5.5451705931345774e-8,-0.00209066831104737,-5.322638039161152e-5,-5.539407826225248e-8,-0.002090182976448214,-5.306061034027742e-5,-5.523368866112795e-8,-0.0020897991792229852,-5.2847036022818596e-5,-5.502129784760488e-8,-0.0020895220312050072,-5.264403046194828e-5,-5.481735951820511e-8,-0.002089327651578887,-5.2498344531242285e-5,-5.4670817165440435e-8,-0.002089176601984936,-5.243402752975581e-5,-5.46075905285881e-8,-0.002089027832962104,-5.2451886161662154e-5,-5.462976227025945e-8,-0.002088848145979607,-5.253524957931374e-5,-5.4721159636310425e-8,-0.002088616519163286,-5.265749417095675e-5,-5.485481113266398e-8,-0.0020883247601802828,-5.278870213189013e-5,-5.499971074275159e-8,-0.0020879761659435914,-5.290068935685728e-5,-5.512613172786507e-8,-0.002087583221816599,-5.297058683962383e-5,-5.520959628157752e-8,-0.002087164777385674,-5.29832296796577e-5,-5.5233626895864976e-8,-0.002086742950109644,-5.2932455223265686e-5,-5.519126877302781e-8,-0.002086339956581604,-5.282138748957507e-5,-5.508542075950947e-8,-0.0020859750527439137,-5.266171847400609e-5,-5.492801945295256e-8,-0.0020856618891764334,-5.247200185689632e-5,-5.4738177469182e-8,-0.0020854066000901466,-5.227520696881749e-5,-5.453962120190033e-8,-0.0020852067040709943,-5.209587655834655e-5,-5.4357819901512334e-8,-0.002085050761531667,-5.19570440334916e-5,-5.421693100956444e-8,-0.0020849188250382576,-5.187695475340274e-5,-5.4136513752244604e-8,-0.0020847838283227895,-5.1865633386018315e-5,-5.4127943797766366e-8,-0.002084614302700284,-5.192134366393279e-5,-5.4190517439071605e-8,-0.002084379177216386,-5.202743147570318e-5,-5.4307801867957737e-8,-0.0020840552632532838,-5.2151132764179095e-5,-5.444603412637725e-8,-0.0020836367229090016,-5.2246983387897786e-5,-5.4557508305702125e-8,-0.0020831432642481086,-5.226727446908682e-5,-5.45915998704627e-8,-0.00208262110484632,-5.217892051956154e-5,-5.451267651801983e-8,-0.0020821314693878165,-5.1979995231158984e-5,-5.4317639028435655e-8,-0.002081728580818981,-5.170500269403149e-5,-5.404156653193917e-8,-0.0020814384597434145,-5.1412711832119855e-5,-5.374512512192592e-8,-0.0020812512548079114,-5.1162601970100065e-5,-5.349017232141276e-8,-0.0020811301739922143,-5.0993981576040526e-5,-5.331814200443522e-8,-0.0020810288964036128,-5.091778800135395e-5,-5.324144113486929e-8,-0.0020809068797548306,-5.0920708246115815e-5,-5.324742058440525e-8,-0.002080737412895719,-5.0975044648063965e-5,-5.330822538299496e-8,-0.0020805090765344805,-5.104836915559959e-5,-5.339054776415609e-8,-0.0020802235105041346,-5.111032019083676e-5,-5.3462654102947513e-8,-0.0020798920087048986,-5.113645247824958e-5,-5.349856905196274e-8,-0.0020795322310856322,-5.111013067736273e-5,-5.3480319452971573e-8,-0.002079165270330489,-5.102337145825212e-5,-5.339903379738613e-8,-0.002078812929807196,-5.0877027322918444e-5,-5.325522084868336e-8,-0.0020784951021789507,-5.0680399754512935e-5,-5.3058323468374344e-8,-0.0020782272019827155,-5.0450194248135284e-5,-5.2825530483115977E-08,-0.002078017796904138,-5.020860124030872e-5,-5.257971627504764e-8,-0.002077866846658982,-4.998045829403398e-5,-5.234652763334412e-8,-0.002077764949227266,-4.9789769777337244e-5,-5.215090293742938e-8,-0.002077693796213007,-4.96559598259346e-5,-5.201333928555749e-8,-0.002077627945643406,-4.959024266445353e-5,-5.1946199184189877e-8,-0.0020775379573369774,-4.959258117963107e-5,-5.1950458272378425e-8,-0.002077394847759163,-4.964972754567608e-5,-5.20133946027985e-8,-0.0020771757956997636,-4.973494898228385e-5,-5.2107934240242226e-8,-0.0020768707597667575,-4.981047198397003e-5,-5.21948928946358e-8,-0.002076488719453658,-4.9833950263944744e-5,-5.222962698296795e-8,-0.0020760607752435137,-4.976947981592237e-5,-5.217368787144459e-8,-0.0020756363255762,-4.960119521007246e-5,-5.2009327355383566e-8,-0.0020752699804712604,-4.934370262592132e-5,-5.175068444401802e-8,-0.002075002258206543,-4.904167747827994e-5,-5.144355599514386e-8,-0.002074843505137487,-4.875527236421879e-5,-5.115030112001243e-8,-0.002074770885112081,-4.85375576824606e-5,-5.092642497342114e-8,-0.0020747400769557814,-4.841647775431193e-5,-5.080178737543361e-8,-0.00207470360549399,-4.839002227744564e-5,-5.077538800998163e-8,-0.0020746254988324455,-4.843356303392952e-5,-5.082265162308837e-8,-0.002074487411936633,-4.8512066229528486e-5,-5.090778965666528e-8,-0.002074287589063454,-4.8590652566310444e-5,-5.099462507142112e-8,-0.0020740364229402913,-4.864094211986411e-5,-5.105327235216716e-8,-0.0020737516117730406,-4.864364377231825e-5,-5.1063071939584795e-8,-0.0020734542779023923,-4.858893563414716e-5,-5.101324060777878e-8,-0.0020731661303226793,-4.847596434842968e-5,-5.090249495797251e-8,-0.0020729072209830705,-4.831209437291138e-5,-5.073826475982897e-8,-0.002072693884949742,-4.81119863715466e-5,-5.053563043378728e-8,-0.0020725366574624164,-4.789627336170478e-5,-5.031584456326077e-8,-0.002072438244777095,-4.76894406001386e-5,-5.0104114550785046e-8,-0.0020723920062757552,-4.751664405123388e-5,-4.992640119935618e-8,-0.002072381620741844,-4.7399626029792626e-5,-4.980535122260885e-8,-0.002072382493146707,-4.735231857382114e-5,-4.975587690759763e-8,-0.002072365126038206,-4.737703392101369e-5,-4.9781211913094104e-8,-0.0020723002115636837,-4.746229500170882e-5,-4.987048608611002e-8,-0.002072164686144449,-4.758318793891755e-5,-4.9998772052492005e-8,-0.0020719476479477516,-4.7704672733856255e-5,-5.0130175273880784e-8,-0.0020716548762382742,-4.778785681354576e-5,-5.0224127220180263E-08,-0.002071310506859259,-4.779875995902617e-5,-5.0244500497020163e-8,-0.0020709542977483263,-4.7718213318121765e-5,-5.017014103512715e-8,-0.002070633392768585,-4.755018007788747e-5,-5.0003890279004845e-8,-0.0020703892518739446,-4.7324560969728754e-5,-4.9775852540256276e-8,-0.002070243556064142,-4.709095642120351e-5,-4.953713265926498e-8,-0.002070189582318923,-4.690347790577672e-5,-4.93441179578025e-8,-0.002070194443298303,-4.6802416516879245e-5,-4.9239360290252976e-8,-0.002070211781957937,-4.680166452708117e-5,-4.923831183218621e-8,-0.0020701982102484394,-4.688757653287808e-5,-4.9327848095478144e-8,-0.0020701254502533,-4.702784331254064e-5,-4.947517696147768e-8,-0.002069984310820259,-4.718405080239909e-5,-4.9640685225447364e-8,-0.002069781881963152,-4.732196406548829e-5,-4.978861540585559e-8,-0.002069535727065262,-4.741708010271714e-5,-4.989300757237092e-8,-0.0020692682062174064,-4.7456088345065395e-5,-4.993946266170168e-8,-0.0020690022999483347,-4.743604483466135e-5,-4.9924473337753236e-8,-0.0020687589325963695,-4.736278778201662e-5,-4.9853830021207306e-8,-0.0020685552095647745,-4.724938104372905e-5,-4.9740931313843226e-8,-0.0020684029471759965,-4.7114721697835956e-5,-4.9605222607596616e-8,-0.002068307113632894,-4.698198596032385e-5,-4.9470525465095644e-8,-0.002068264210735056,-4.6876359384872586e-5,-4.936274057243991e-8,-0.0020682611085878133,-4.682161851644506e-5,-4.930645763105391e-8,-0.002068275207205279,-4.683559588593652e-5,-4.932042167102954e-8,-0.002068276840995726,-4.692525626768796e-5,-4.941250393336782e-8,-0.0020682343681795467,-4.708286526062035e-5,-4.9575641749325084e-8,-0.002068121336074826,-4.728509807584928e-5,-4.9786665145860586e-8,-0.002067923897843404,-4.7496385865671217e-5,-5.0009436305109905e-8,-0.0020676460373650566,-4.7676378285878495e-5,-5.0202301586995866e-8,-0.0020673105644500745,-4.77898332491647e-5,-5.032822287464823e-8,-0.002066955050994269,-4.781625324925658e-5,-5.036486940750825e-8,-0.0020666233471462645,-4.7756464778773514e-5,-5.0311739548860085e-8,-0.002066354580310086,-4.763398187934115e-5,-5.0191974764700023E-08,-0.0020661724200392493,-4.7490128745401975e-5,-5.004766473653001e-8,-0.0020660778693884388,-4.737345115377653e-5,-4.9929071504630356e-8,-0.002066048524221078,-4.732603099287772e-5,-4.9880421809209325e-8,-0.0020660453797246812,-4.737129330364156e-5,-4.992704483799921e-8,-0.0020660250285791494,-4.7508085193365105e-5,-5.006889477610717e-8,-0.0020659523841825966,-4.7713206060515434e-5,-5.028283650859611e-8,-0.0020658090029066624,-4.795053885650078e-5,-5.053188956294247e-8,-0.002065594771846483,-4.818222569886375e-5,-5.0776768516938594e-8,-0.002065324117375244,-4.837752105633615e-5,-5.0985184294608874e-8,-0.002065019767433622,-4.851728875182688e-5,-5.1136723525022014e-8,-0.0020647068446275245,-4.8594594783670716e-5,-5.1223668798557995e-8,-0.0020644086381638085,-4.861304972472082e-5,-5.124938607964203e-8,-0.002064144097864555,-4.8584434676873395e-5,-5.122584536957933e-8,-0.002063926468637026,-4.852647936788248e-5,-5.1171225339119544e-8,-0.0020637623786124806,-4.846100605905334e-5,-5.11079143446867e-8,-0.0020636508879348973,-4.841213269692522e-5,-5.106066445180714e-8,-0.002063582435238546,-4.8403934845334516e-5,-5.1054290024565175e-8,-0.002063538168965467,-4.8457018960260466e-5,-5.1110281108115146e-8,-0.002063490642966396,-4.858388401565267e-5,-5.12421042751145e-8,-0.002063407082221286,-4.8783799285689586e-5,-5.144985988199522e-8,-0.0020632559577338995,-4.9039126710606216e-5,-5.1716281192541857e-8,-0.0020630160427410785,-4.931581340272001e-5,-5.200696102828744e-8,-0.002062684941410063,-4.95699691789468e-5,-5.2276889335559116e-8,-0.0020622829172062315,-4.9759696099219955e-5,-5.2482526161209284e-8,-0.0020618491854511264,-4.9858113731482825e-5,-5.259526114699326e-8,-0.0020614313126430684,-4.98622055714111e-5,-5.261072103110058e-8,-0.0020610717124268244,-4.979388598943105e-5,-5.255018976438976e-8,-0.00206079622917913,-4.9693307260769264e-5,-5.2454091838812215e-8,-0.002060608259750969,-4.960738794563041e-5,-5.2370482519734586e-8,-0.0020604893759882652,-4.957747244117635e-5,-5.234243575739418e-8,-0.0020604054583355405,-4.962944279368117e-5,-5.239769021503708e-8,-0.00206031622426224,-4.976850689463904e-5,-5.254290844467591e-8,-0.0020601854537221713,-4.997959938080869e-5,-5.276367005121703e-8,-0.002059989171420568,-5.0232827495872717e-5,-5.3029781808228276e-8,-0.0020597197607184654,-5.049196909900188e-5,-5.330394627200139e-8,-0.002059385412596773,-5.0723251719086136e-5,-5.35509256812709e-8,-0.002059005920337264,-5.0901931837912855e-5,-5.374455696877302e-8,-0.0020586068325025636,-5.1015438910330984e-5,-5.387122879648511e-8,-0.0020582139353274493,-5.106332394108202e-5,-5.3929977985066915e-8,-0.0020578492211639973,-5.105516573900859e-5,-5.3930358175955645e-8,-0.002057528552028513,-5.100771436745336e-5,-5.388943054436595e-8,-0.0020572605931187234,-5.094215881551009e-5,-5.382886471043966e-8,-0.0020570463828137086,-5.088182315066045e-5,-5.3772543032440546e-8,-0.0020568790450358394,-5.0850080664488783e-5,-5.3744486331419684e-8,-0.0020567435004348058,-5.086799254343324e-5,-5.376655829843546e-8,-0.0020566165172875277,-5.0951144908211624e-5,-5.38553140117008e-8,-0.002056468009873697,-5.1105440079060466e-5,-5.40176449522486e-8,-0.002056264887091375,-5.13224346701609e-5,-5.4245796040435814e-8,-0.0020559784072281106,-5.157623756835036e-5,-5.451389058844007e-8,-0.0020555942713637253,-5.1825209665744814e-5,-5.4779432398487804e-8,-0.0020551217432332926,-5.202108670480498e-5,-5.4992587084446835e-8,-0.002054595971680873,-5.212442299521637e-5,-5.511211091620739e-8,-0.002054069540827032,-5.212000715115373e-5,-5.51213256728815e-8,-0.0020535954582683582,-5.202381128623128e-5,-5.503543356010499e-8,-0.002053209667556904,-5.187728707364314e-5,-5.48959111155173e-8,-0.002052921320923942,-5.1732422490422854e-5,-5.4755490408141264e-8,-0.0020527136286440546,-5.163540619096735e-5,-5.466165472016251e-8,-0.002052552370246584,-5.16152962902263e-5,-5.464504010682952e-8,-0.002052397089200715,-5.167979779085585e-5,-5.471483931427527e-8,-0.0020522111175157827,-5.1817015362214554e-5,-5.4860156203498216e-8,-0.002051968552414977,-5.200091488002448e-5,-5.505518884494557e-8,-0.002051657757119859,-5.219838699551085e-5,-5.5266251947721564e-8,-0.0020512816489339715,-5.237636228823249e-5,-5.5459107581815276e-8,-0.0020508553095427784,-5.2507832957142995e-5,-5.5605365688318714e-8,-0.0020504017421625635,-5.2575890404729004e-5,-5.568690921630114e-8,-0.002049946887543557,-5.257533993074332e-5,-5.5697769382127575e-8,-0.002049514984834118,-5.251207506856239e-5,-5.5643570315387093e-8,-0.0020491250330573053,-5.240083953067565e-5,-5.553919797775131e-8,-0.0020487886736325817,-5.226219084775036e-5,-5.540559549606092e-8,-0.002048509350314085,-5.211942672300324e-5,-5.526655233827838e-8,-0.0020482822912756475,-5.1995876311308334e-5,-5.514595440180733e-8,-0.0020480948969156336,-5.191250486751777e-5,-5.506543751527602e-8,-0.0020479273660762303,-5.188554270222557e-5,-5.5042078174011434e-8,-0.002047753716271682,-5.19237834715236e-5,-5.5085654827554707e-8,-0.002047543853386551,-5.202532476066097e-5,-5.5195172880639046e-8,-0.0020472677925593256,-5.2174216124140644e-5,-5.535514660858792e-8,-0.002046902870774027,-5.2338771760351975e-5,-5.553355877045675e-8,-0.0020464432837271392,-5.247451873274851e-5,-5.568470840459575e-8,-0.0020459084093877532,-5.253449204712567e-5,-5.575981860047395e-8,-0.002045343640214381,-5.2486027294355265e-5,-5.5724461720487053e-8,-0.002044808785656605,-5.2326853813685626e-5,-5.557525555895152e-8,-0.002044356731611969,-5.208986005362827e-5,-5.534487592771635e-8,-0.002044013525552351,-5.183141847200364e-5,-5.5090255370018856e-8,-0.002043771226817781,-5.160953417781544e-5,-5.48704621303244e-8,-0.0020435956589243583,-5.1464429347744986e-5,-5.472704260792385e-8,-0.0020434418674889353,-5.1410036594933055e-5,-5.4675282541850294e-8,-0.0020432684427998627,-5.14362548539681e-5,-5.470618039648655e-8,-0.0020430462096218717,-5.1516940304592496e-5,-5.4794150517663037e-8,-0.0020427612302023604,-5.161886518563504e-5,-5.490581755587025e-8,-0.002042413976632722,-5.170911019925943e-5,-5.50074620408479e-8,-0.0020420165420526716,-5.1760253982835196e-5,-5.5070471238764245e-8,-0.0020415890123641396,-5.1753638794210315e-5,-5.507496856439569e-8,-0.002041155494939975,-5.168102371657047e-5,-5.501178570621877e-8,-0.0020407401651533347,-5.154474405169965e-5,-5.488278817879703e-8,-0.0020403637204026146,-5.135653343018677e-5,-5.4699684377973364e-8,-0.002040040576882192,-5.113526412477106e-5,-5.448162890443747e-8,-0.002039777091455139,-5.09039490226065e-5,-5.425206240270826e-8,-0.0020395709362431877,-5.068649756636404e-5,-5.4035371776647424e-8,-0.002039411459954195,-5.050467571637247e-5,-5.385385724355181e-8,-0.002039280756574348,-5.037542727193322e-5,-5.372512326084712e-8,-0.0020391552857087123,-5.030852534711591e-5,-5.365977061904039e-8,-0.0020390080427771986,-5.030447590753775e-5,-5.365921376204627e-8,-0.002038811568452725,-5.0352607930303213e-5,-5.3713516384989046e-8,-0.0020385424324039243,-5.042973944197244e-5,-5.379970190700536e-8,-0.0020381875739485158,-5.050077044952324e-5,-5.388206675784495e-8,-0.0020377516616928775,-5.052330199125621e-5,-5.391680200972993e-8,-0.0020372625651711995,-5.045802416725423e-5,-5.386277190055731e-8,-0.0020367698775526524,-5.028392416035833e-5,-5.3697376840582164e-8,-0.0020363321435952564,-5.001196000452072e-5,-5.34308014077663e-8,-0.0020359951521852593,-4.968703486004547e-5,-5.310816086035136e-8,-0.0020357726478473404,-4.937288418461528e-5,-5.279414480895378e-8,-0.0020356419556401216,-4.9126855995544544e-5,-5.2547399322285394e-8,-0.002035556684070434,-4.897959533240644e-5,-5.2399885499866514e-8,-0.0020354668174017705,-4.892970414356411e-5,-5.2351307750795756e-8,-0.0020353344578759418,-4.8951698867931034e-5,-5.237686688565701e-8,-0.0020351402813209166,-4.900893595997211e-5,-5.2440021527677685e-8,-0.0020348825479860966,-4.906468718670452e-5,-5.250353037457378e-8,-0.0020345726105927375,-4.908894182699448e-5,-5.253641005057569e-8,-0.002034229863541913,-4.906144649731033e-5,-5.251727392128725e-8,-0.002033877432711455,-4.897243922319491e-5,-5.2435389666249733e-8,-0.002033538711092817,-4.882223756648143e-5,-5.2290488844127926e-8,-0.002033234470164266,-4.8620156756388854e-5,-5.2091736421230884e-8,-0.0020329804185158853,-4.838285072517303e-5,-5.185597492180308e-8,-0.0020327852353072594,-4.813206614562613e-5,-5.160531630998899e-8,-0.002032649254192641,-4.789178910703803e-5,-5.136415864036497e-8,-0.00203256409568354,-4.7684964149517676e-5,-5.115586867184493e-8,-0.002032513412831578,-4.7530207576543425e-5,-5.099954932398015e-8,-0.0020324746777436327,-4.743890663944881e-5,-5.0907215491822745e-8,-0.002032421864725609,-4.741298395352246e-5,-5.088156196373777e-8,-0.002032328861343699,-4.744359026821503e-5,-5.091451930689139e-8,-0.002032173443614939,-4.7510913626487626e-5,-5.098678990055797e-8,-0.002031941783002499,-4.75853718193778e-5,-5.106873150905396e-8,-0.0020316332829377146,-4.763092567556373e-5,-5.112349305662727e-8,-0.002031264678451989,-4.7611506845454626e-5,-5.111354889776993e-8,-0.0020308711459007655,-4.7500835256465015e-5,-5.101094070015697e-8,-0.002030501384939176,-4.7293891553481265e-5,-5.0809346057054425e-8,-0.0020302046550841244,-4.7015069114082157e-5,-5.053271389164446e-8,-0.002030012417735536,-4.6715860633814e-5,-5.023306514824246e-8,-0.0020299237206302333,-4.645858056483108e-5,-4.997393446583235e-8,-0.002029904534219609,-4.629246101907128e-5,-4.980599835191041e-8,-0.0020299027081861383,-4.6235733219535855e-5,-4.974874457112798e-8,-0.0020298691085456756,-4.6273355836021885e-5,-4.9787942532947575e-8,-0.002029772836986357,-4.6368492929145236e-5,-4.9886997870461254e-8,-0.0020296053518841788,-4.6478270704142267e-5,-5.0002696473796485e-8,-0.0020293762284797076,-4.6565779984025805e-5,-5.009732090515303e-8,-0.0020291058975264805,-4.660586503998099e-5,-5.0144678766039385e-8,-0.0020288190745721122,-4.658611551409667e-5,-5.013139050785385e-8,-0.0020285401833065263,-4.650544482721242e-5,-5.0055709880198454e-8,-0.0020282905163081324,-4.637198758862261e-5,-4.9925521941264115e-8,-0.0020280863812595215,-4.6201017541421475e-5,-4.975620376898143e-8,-0.002027937697407739,-4.6012910954525015e-5,-4.95684364968778e-8,-0.0020278468548150497,-4.5830932166805734e-5,-4.938584335030445e-8,-0.0020278079352926354,-4.5678563130217145e-5,-4.923225233991149e-8,-0.0020278066732735607,-4.5576287146234076e-5,-4.9128512005390405e-8,-0.0020278216052989797,-4.553814792964579e-5,-4.908913495339701e-8,-0.0020278266184087235,-4.5568694544187735e-5,-4.91192941943901e-8,-0.0020277947861438816,-4.566099727855335e-5,-4.921277950752152e-8,-0.0020277030598136164,-4.579640243999685e-5,-4.9351559556919325e-8,-0.0020275370670149273,-4.5946459644631754e-5,-4.950743825762933e-8,-0.0020272951641109476,-4.6077038467505365e-5,-4.964594133297112e-8,-0.0020269909380996286,-4.615441491887575e-5,-4.9732349917762104e-8,-0.002026653192492816,-4.615293081887066e-5,-4.973956903588067e-8,-0.002026322209052732,-4.606314805429271e-5,-4.965671815932576e-8,-0.0020260414134917063,-4.5898197313257225e-5,-4.949598467985722e-8,-0.002025845064816443,-4.569487890022771e-5,-4.929407616837752e-8,-0.0020257453978966516,-4.550622741121225e-5,-4.9104815330766504e-8,-0.0020257254701901042,-4.538541867435896e-5,-4.898274157296879e-8,-0.0020257433889951937,-4.536680350718691e-5,-4.89636608578841e-8,-0.0020257476215753702,-4.5453789008186565e-5,-4.905208248604179e-8,-0.002025695654193513,-4.562012774480506e-5,-4.922225373647776e-8,-0.0020255663701208917,-4.582262170758979e-5,-4.943082479997011e-8,-0.0020253618227586557,-4.6016984020625265e-5,-4.963283638283841e-8,-0.00202510099803616,-4.6169328034816214e-5,-4.979343944742674e-8,-0.002024811017417274,-4.626077683867761e-5,-4.989278000082901e-8,-0.002024519795827304,-4.6286832571634604e-5,-4.992561400738215e-8,-0.0020242514862415977,-4.625433913083903e-5,-4.989840752411386e-8,-0.002024024252686185,-4.617810969109077e-5,-4.982595556164917e-8,-0.0020238493406938953,-4.607808430854788e-5,-4.972841725462505e-8,-0.0020237306112493255,-4.597702408116703e-5,-4.96288581956967e-8,-0.002023664162763472,-4.589834984431947e-5,-4.955099750636145e-8,-0.0020236381094273855,-4.586365827157764e-5,-4.951673189348936e-8,-0.0020236329502209293,-4.5889656355000434e-5,-4.954314934249165e-8,-0.002023623153744319,-4.5984715081919234e-5,-4.963915423232379e-8,-0.0020235804546441657,-4.6145777376813115e-5,-4.980235686787022e-8,-0.002023478863220688,-4.635676148666589e-5,-5.0017332271608656e-8,-0.0020233006158513526,-4.658965624449702e-5,-5.025648223081647e-8,-0.002023041531229927,-4.6808945440860525e-5,-5.048423155390615e-8,-0.0020227139642913913,-4.6978896318268104e-5,-5.066420578545552e-8,-0.002022346013528821,-4.7072161309276584e-5,-5.0767917079637096e-8,-0.002021976583923614,-4.7077557162162256e-5,-5.0782829172766134e-8,-0.002021646938817805,-4.700482993717928e-5,-5.071753209060727e-8,-0.0020213903373314294,-4.688457071627136e-5,-5.060204845365824e-8,-0.00202122225761361,-4.676225438165741e-5,-5.048208770780828e-8,-0.002021134399579563,-4.668682793085823e-5,-5.040757499631068e-8,-0.0020210955157597492,-4.66964938733245e-5,-5.041810897949245e-8,-0.002021060207166187,-4.680660727557303e-5,-5.053039604591645e-8,-0.0020209831787395298,-4.700501284627893e-5,-5.073317426465869e-8,-0.0020208331782008877,-4.7257207541469374e-5,-5.0992163914768974e-8,-0.002020600749527367,-4.751873684499668e-5,-5.126249359928724e-8,-0.002020297495132843,-4.7748817668834114e-5,-5.150253416122725e-8,-0.002019949045350994,-4.791973032907616e-5,-5.168357842505219e-8,-0.002019586148214338,-4.801998291591459e-5,-5.1793273968425187e-8,-0.0020192374342056386,-4.8052601996660434e-5,-5.183409256541799e-8,-0.002018925159106304,-4.8031175323490096e-5,-5.181942050354247e-8,-0.0020186634942643855,-4.797571811880198e-5,-5.1769350061628944e-8,-0.002018458307559683,-4.7909321720409155e-5,-5.17071934570522e-8,-0.0020183074793059634,-4.7855657746552463e-5,-5.1656878184229704e-8,-0.0020182012242393878,-4.783688725574289e-5,-5.164083264519561e-8,-0.0020181224346406887,-4.7871384574551e-5,-5.167777089044754e-8,-0.002018047515893418,-4.797092449356852e-5,-5.177995991815182e-8,-0.0020179484270965854,-4.813745696818201e-5,-5.1950004632217014e-8,-0.0020177966111187182,-4.836022705575067e-5,-5.217785319666721e-8,-0.0020175689778127058,-4.861471743161788e-5,-5.243952149084699e-8,-0.0020172549083493363,-4.886518940475764e-5,-5.2699404555608824e-8,-0.0020168618491771245,-4.9071739379400246e-5,-5.291720278700551e-8,-0.0020164165457899337,-4.920074189090056e-5,-5.305839885690176e-8,-0.0020159601254947663,-4.923537724905972e-5,-5.310497994930823e-8,-0.0020155377782343923,-4.9182101111894395e-5,-5.3062208619770655e-8,-0.0020151863264922898,-4.9070186505180795e-5,-5.2958496549887175e-8,-0.0020149239683831454,-4.894424255995497e-5,-5.28381974040878e-8,-0.002014745466484543,-4.8852234007670655e-5,-5.2749744360003565e-8,-0.002014623980385843,-4.8832737442584404e-5,-5.2732795661562925E-08,-0.0020145187675945538,-4.8905033515197663e-5,-5.2807996323674024e-8,-0.002014386463354211,-4.9064737170752646e-5,-5.297217537397421e-8,-0.0020141926071653754,-4.928613889269881e-5,-5.3200321420099145e-8,-0.002013919923050992,-4.953032530867741e-5,-5.3453543629696204e-8,-0.002013571006866503,-4.975617191211685e-5,-5.369014468097558e-8,-0.0020131652167542056,-4.993046123284049e-5,-5.3875992139383384e-8,-0.002012731692604997,-5.0034158097124634e-5,-5.399109718532883e-8,-0.0020123014742402913,-5.0063845602625036e-5,-5.403129483295887e-8,-0.00201190121087524,-5.002933955111049e-5,-5.4005977959494064e-8,-0.002011549521326985,-4.994945558883987e-5,-5.393385164637899e-8,-0.002011255743455944,-4.984764678639762e-5,-5.383846809376056e-8,-0.0020110201985696686,-4.974843179222414e-5,-5.374453985485008e-8,-0.002010835083772604,-4.9674777295965575e-5,-5.367526613695328e-8,-0.0020106854277154628,-4.964606496865315e-5,-5.365032901804489e-8,-0.0020105500400673802,-4.9676073962541255e-5,-5.3683953076972764e-8,-0.0020104028617102853,-4.9770593190928885e-5,-5.3782559234610896e-8,-0.0020102154280196164,-4.992472116898015e-5,-5.39419945769669e-8,-0.002009961203093299,-5.01205774324166e-5,-5.4145045648848874e-8,-0.0020096220475094026,-5.032702956215601e-5,-5.436091558231032e-8,-0.0020091956873586328,-5.0503577918817376e-5,-5.454893403638213e-8,-0.0020087010935627442,-5.060963041617747e-5,-5.466782814365228e-8,-0.0020081776870822868,-5.06175125618987e-5,-5.468889528583259e-8,-0.0020076760813480246,-5.052404157729019e-5,-5.4607820427235687e-8,-0.0020072426309083852,-5.03543523152836e-5,-5.444874990717472e-8,-0.0020069043511348767,-5.015493124700536e-5,-5.42575575233768e-8,-0.0020066610667815107,-4.997871174697851e-5,-5.40871357697118e-8,-0.0020064875013838,-4.98690470565664e-5,-5.3981449732444325e-8,-0.0020063429428621477,-4.9848723760962696e-5,-5.396442162152271e-8,-0.0020061836818402717,-4.991653940438004e-5,-5.40361687618578e-8,-0.0020059740082301832,-5.005060728795719e-5,-5.4175883241144576e-8,-0.0020056933781890086,-5.021595398427699e-5,-5.434910207886136e-8,-0.0020053390005447076,-5.037374382076034e-5,-5.4516829286568113e-8,-0.0020049242019915922,-5.048986269802197e-5,-5.464425732666e-8,-0.0020044736538592134,-5.054119841472836e-5,-5.470733410760349e-8,-0.0020040170112563204,-5.0518666909647305e-5,-5.469609132681992e-8,-0.002003582651521957,-5.0426916644760484e-5,-5.461455429534083e-8,-0.002003192848389794,-5.028151267800684e-5,-5.4477987905210974e-8,-0.0020028610069787686,-5.010484787898947e-5,-5.430874706071043e-8,-0.0020025908720933084,-4.992194480586509e-5,-5.413196542421391e-8,-0.0020023771463984017,-4.9756918400443195e-5,-5.3971933421660555e-8,-0.002002206808863418,-4.963034306888264e-5,-5.384945799572805e-8,-0.0020020606277349035,-4.955729195151486e-5,-5.3779965287491494e-8,-0.002001914752160842,-4.9545629165052306e-5,-5.377186303277142e-8,-0.0020017426370449094,-4.959424701946217e-5,-5.382477021649585e-8,-0.0020015178700865826,-4.9691252782268014e-5,-5.392756337052816e-8,-0.002001218597218113,-4.981272984636775e-5,-5.4056892268100934e-8,-0.0020008337756181305,-4.9923598500677135e-5,-5.417780009747694e-8,-0.002000370096206164,-4.998267559890689e-5,-5.4248682766537245e-8,-0.0019998563334538166,-4.995319905600739e-5,-5.423191853970226e-8,-0.0019993405058199324,-4.981692900508882e-5,-5.4108211202206056e-8,-0.0019988771595501596,-4.958544642961348e-5,-5.388813032255459e-8,-0.001998508235516319,-4.930060305686856e-5,-5.361273486836377e-8,-0.0019982470792282445,-4.902112276864653e-5,-5.3340329163181614e-8,-0.001998074636703137,-4.880149849864028e-5,-5.31255233957502e-8,-0.0019979490776461596,-4.867431780069525e-5,-5.300163018068865e-8,-0.001997822100817167,-4.864355803151583e-5,-5.2973805172126e-8,-0.0019976535169998273,-4.8688691267618395e-5,-5.3022777123200866e-8,-0.001997419552504148,-4.8774601604832057e-5,-5.311433704727912e-8,-0.001997114744774493,-4.8862226688571974e-5,-5.320970261330998e-8,-0.0019967494607951706,-4.891701856579829e-5,-5.3273961127601174e-8,-0.0019963452028423133,-4.8914377496388965e-5,-5.328171644965104e-8,-0.0019959291743273603,-4.884227819040176e-5,-5.3220032150562435e-8,-0.0019955289872912786,-4.870151669163586e-5,-5.3088954045228216e-8,-0.001995168161878916,-4.850401085939419e-5,-5.289994962557313e-8,-0.0019948628903654394,-4.8269744288963775e-5,-5.267284224427861e-8,-0.0019946202670904343,-4.8023026531601735e-5,-5.2431967802807096e-8,-0.0019944379707342885,-4.7788675113880514e-5,-5.220224766362233e-8,-0.0019943051797844005,-4.7588659781935926e-5,-5.200579146376313e-8,-0.0019942042706509,-4.743954711749449e-5,-5.1859386167826104e-8,-0.001994112859914415,-4.735069680607469e-5,-5.1772781475901097e-8,-0.001994006037341234,-4.732295848864623e-5,-5.1747440313270875e-8,-0.001993858894812306,-4.7347710668200726e-5,-5.177551950964653e-8,-0.0019936496579878314,-4.740627635058635e-5,-5.18390919640976e-8,-0.001993363861819001,-4.7470190253398286e-5,-5.1910146838977426e-8,-0.0019929996205191062,-4.7503541595903896e-5,-5.195272017060764e-8,-0.0019925728195238626,-4.746902878186876e-5,-5.1928915188607375e-8,-0.001992119310680294,-4.7338527946317814e-5,-5.1809644671995214e-8,-0.001991689987214206,-4.710613654808492e-5,-5.1587956392584026e-8,-0.0019913363447532006,-4.6797293437381455e-5,-5.128838764343941e-8,-0.0019910904742861894,-4.6465669201456026e-5,-5.096398901617266e-8,-0.001990950368197197,-4.617513909028325e-5,-5.067840830528089e-8,-0.0019908806466250022,-4.5975167125504204e-5,-5.048140368418561e-8,-0.0019908285309041696,-4.5883747649525306e-5,-5.039181646697579e-8,-0.0019907446103717484,-4.588605349155747e-5,-5.039601315964357e-8,-0.0019905972795608703,-4.59456274268961e-5,-5.045866854053545e-8,-0.0019903769307380295,-4.601920467643337e-5,-5.053718566759492e-8,-0.001990092573971516,-4.60683822052351e-5,-5.059317403618827e-8,-0.0019897653271612717,-4.6066023946311286e-5,-5.059894157366422e-8,-0.0019894219047486518,-4.5998288524238066e-5,-5.0539804388693425e-8,-0.001989089388356069,-4.5864029542767294e-5,-5.041380553085208e-8,-0.001988791342582684,-4.5672889943786124e-5,-5.023002279694939e-8,-0.0019885450270769787,-4.544267119758317e-5,-5.000598811628438e-8,-0.001988359611822744,-4.519623780012269e-5,-4.9764511439258186e-8,-0.001988235373861473,-4.4958196634044265e-5,-4.9530237154278555e-8,-0.001988163874878257,-4.475155292368226e-5,-4.932622435749737e-8,-0.0019881291494703197,-4.4594624487372946e-5,-4.917088069716583e-8,-0.0019881097672433527,-4.449860634103792e-5,-4.907562319610449e-8,-0.0019880814361664893,-4.446599676205845e-5,-4.9043404078743095e-8,-0.001988019896370336,-4.448984902371915e-5,-4.90679788963876e-8,-0.0019879040251158317,-4.455382789815783e-5,-4.9133842968146527e-8,-0.001987719144006088,-4.463316087772778e-5,-4.921694042093964e-8,-0.001987460558236463,-4.46967620556441e-5,-4.9286514917244204e-8,-0.0019871370966062707,-4.471122399257981e-5,-4.9308929889939364e-8,-0.0019867735413332,-4.464753053386993e-5,-4.925440944020967e-8,-0.0019864096922321078,-4.449046879624519e-5,-4.910667619111871e-8,-0.001986093293887148,-4.424847454638656e-5,-4.887310764941467e-8,-0.0019858657165408035,-4.395851101024967e-5,-4.858986252843164e-8,-0.0019857444502105696,-4.36793761172567e-5,-4.831531748591886e-8,-0.0019857123157436644,-4.3471892985409506e-5,-4.811032585031551e-8,-0.001985722442942424,-4.3374678707536145e-5,-4.801403302963816e-8,-0.001985717837909519,-4.3389861516746215e-5,-4.802953349265059e-8,-0.0019856536347009303,-4.348657983914437e-5,-4.812711300883761e-8,-0.001985509793314366,-4.3617293200771854e-5,-4.826016677840372e-8,-0.001985291041141802,-4.373551017512467e-5,-4.8382599589213666e-8,-0.001985018982825112,-4.380710889702349e-5,-4.8460059289153266e-8,-0.00198472269519155,-4.381413163467009e-5,-4.8473904889146595e-8,-0.0019844313817317153,-4.3753602107519224e-5,-4.8420335013601454e-8,-0.0019841698777690116,-4.3634265418978614e-5,-4.830740886578302e-8,-0.00198395631013117,-4.347308097731399e-5,-4.815167459106861e-8,-0.00198380093609794,-4.32920529085931e-5,-4.7974972464015794e-8,-0.0019837056325942176,-4.311530044265703e-5,-4.7801388949448075e-8,-0.0019836639326078916,-4.2966205027643966e-5,-4.765430103584804e-8,-0.0019836616788419274,-4.2864560277764126e-5,-4.755351001687462e-8,-0.0019836784835310212,-4.2823816969524074e-5,-4.75125667742844e-8,-0.0019836901334029686,-4.284880913635948e-5,-4.753661876885519e-8,-0.0019836717844280323,-4.293443985340406e-5,-4.7621167559884083e-8,-0.001983601577361672,-4.306561983656408e-5,-4.775195443764006e-8,-0.00198346427639853,-4.321860830029743e-5,-4.79061064744248e-8,-0.001983254503428399,-4.3363817575379086e-5,-4.805466061004061e-8,-0.001982979128261479,-4.3470011868281195e-5,-4.8166508580713625e-8,-0.0019826583317162807,-4.350982227820718e-5,-4.8213806615591725e-8,-0.0019823245270563744,-4.346642997860529e-5,-4.817876549475533e-8,-0.0019820179079688013,-4.334055689306835e-5,-4.806092503305833e-8,-0.0019817776241884424,-4.315546627647395e-5,-4.788249609663614e-8,-0.001981629243341138,-4.295622121243347e-5,-4.768788218876515e-8,-0.00198157253207564,-4.279964969343516e-5,-4.753376447678903e-8,-0.0019815768110193243,-4.273555993575656e-5,-4.747031671641675e-8,-0.0019815896914275643,-4.2786939561310826e-5,-4.752132323658576e-8,-0.001981556964728314,-4.294065163758243e-5,-4.767470277125102e-8,-0.001981442898715948,-4.315455768342111e-5,-4.788935301045354e-8,-0.001981239994932547,-4.337586664281439e-5,-4.811318043326988e-8,-0.001980965615592369,-4.3559380683812036e-5,-4.830112897720887e-8,-0.001980651104271411,-4.3677669740602314e-5,-4.842535724700544e-8,-0.001980330622165264,-4.37224614567855e-5,-4.8476842035870866e-8,-0.001980033601616317,-4.370082309922366e-5,-4.846185712372692e-8,-0.001979781186553916,-4.362987461869388e-5,-4.8396913373778846e-8,-0.0019795853426471683,-4.35321462310607e-5,-4.8304189751421825e-8,-0.001979449164923876,-4.343211096476673e-5,-4.8208004801788516e-8,-0.001979367516891493,-4.335355049589747e-5,-4.81320762404166e-8,-0.0019793277939190233,-4.331724667908914e-5,-4.8097157631997425e-8,-0.0019793109779484602,-4.333865671006025e-5,-4.811875302716466e-8,-0.00197929334115372,-4.342552864224307e-5,-4.8204839307820454e-8,-0.0019792491585166726,-4.3575840607934675e-5,-4.835390191602501e-8,-0.0019791544719827683,-4.377676979296662e-5,-4.855390559455163e-8,-0.0019789914659854206,-4.400538864917376e-5,-4.878285284376596e-8,-0.001978752618067997,-4.423151487384888e-5,-4.9011380729146134e-8,-0.001978443571552841,-4.442266642057841e-5,-4.920743293376487e-8,-0.0019780837559768326,-4.455044155192306e-5,-4.93424419569069e-8,-0.001977704189216635,-4.459716325964112e-5,-4.9397956177720134e-8,-0.0019773423735596264,-4.4561466986321577e-5,-4.937141684655841e-8,-0.001977034607825835,-4.446140319979623e-5,-4.927959934097138e-8,-0.0019768066566202684,-4.433345001834858e-5,-4.915798984075471e-8,-0.0019766648048065616,-4.422600808807836e-5,-4.905454320636164e-8,-0.001976590642014865,-4.418718038152136e-5,-4.901754862575995e-8,-0.0019765433922679146,-4.424941926591262e-5,-4.908018505043689e-8,-0.0019764714799322142,-4.441704193678446e-5,-4.924782281001948e-8,-0.0019763299672662825,-4.466351711965738e-5,-4.949503779025665e-8,-0.0019760958592488333,-4.494111748014449e-5,-4.9774988214425593e-8,-0.001975773776278894,-4.519821653836421e-5,-5.003649186587927e-8,-0.001975390495162118,-4.539533451112828e-5,-5.0239976118785304e-8,-0.0019749831859174212,-4.551335871876182e-5,-5.0365773681986254e-8,-0.0019745879207018306,-4.555320514137526e-5,-5.041400386812903e-8,-0.0019742323786003236,-4.553037719774458e-5,-5.039938833552872e-8,-0.0019739331147513276,-4.5468406296927464e-5,-5.03448680797245e-8,-0.001973695819172792,-4.539349471122782e-5,-5.0276287499947574e-8,-0.0019735168135767726,-4.533089935511781e-5,-5.0218721062822205e-8,-0.0019733846944876474,-4.5302611923024283e-5,-5.019408501320979e-8,-0.0019732817668098417,-4.532562487218592e-5,-5.021939519624579e-8,-0.0019731854504376916,-4.5410207074392044e-5,-5.0305107394665245e-8,-0.0019730701622044603,-4.5557997564901036e-5,-5.045329830787116e-8,-0.001972910223039121,-4.576026673732602e-5,-5.0655959638034884e-8,-0.001972684031500541,-4.5997198476817514E-05,-5.0894198826261366e-8,-0.001972379090884328,-4.623929153514652e-5,-5.113944114811148e-8,-0.001971996635686588,-4.6451727228890164e-5,-5.135753400078218e-8,-0.0019715539766186102,-4.660160044857538e-5,-5.1515737334611745e-8,-0.0019710828542270687,-4.6666477609024985e-5,-5.159115485388241e-8,-0.001970623298040414,-4.664162896085638e-5,-5.1578016403124346e-8,-0.001970214212090245,-4.65432620191606e-5,-5.1491151948029e-8,-0.001969883242927487,-4.6406229230851866e-5,-5.1364075446337285e-8,-0.001969638857557791,-4.627639846031354e-5,-5.124174919757445e-8,-0.001969467008160238,-4.6199420166105754e-5,-5.116961866658035e-8,-0.0019693336914688433,-4.6208627966382286e-5,-5.1181552597747694e-8,-0.001969193371546135,-4.631535486871011e-5,-5.128996338486575e-8,-0.0019690015104308046,-4.650497733936632e-5,-5.148150977961362e-8,-0.001968727504736385,-4.6740821064600386e-5,-5.172064567922468e-8,-0.001968363316252578,-4.697522012612561e-5,-5.196041523031695e-8,-0.00196792440570595,-4.71636765838571e-5,-5.2156492160433425e-8,-0.001967443051877653,-4.727655930735045e-5,-5.227890703313716e-8,-0.0019669575953292872,-4.730437768201357e-5,-5.2317472555509746e-8,-0.0019665022928231123,-4.7256201646844035e-5,-5.228042290007389e-8,-0.0019661009362071376,-4.715377406937989e-5,-5.218873377314962e-8,-0.0019657647779907092,-4.702464970878444e-5,-5.206938544394163e-8,-0.001965493477560509,-4.689660585321579e-5,-5.194979398067257e-8,-0.001965277377825799,-4.6794002474408414e-5,-5.185413345399812e-8,-0.001965099914950498,-4.67357278760477e-5,-5.1801254050097615e-8,-0.0019649396611614903,-4.673397854378611e-5,-5.180348656861776e-8,-0.0019647721014879383,-4.6793187059781656e-5,-5.186563289514447e-8,-0.0019645716558417217,-4.690878647692816e-5,-5.1983771468773974e-8,-0.0019643145874512157,-4.706604455706395e-5,-5.214404907793817e-8,-0.001963983213520618,-4.7239795327600476e-5,-5.232226406608289e-8,-0.0019635711534783046,-4.7396399391850306e-5,-5.248560550378622e-8,-0.0019630881783210172,-4.749923158841316e-5,-5.2597912011238834e-8,-0.0019625620385825687,-4.7517783547080394e-5,-5.262860028092075e-8,-0.001962034600536159,-4.743810866143697e-5,-5.2563034466538445e-8,-0.001961551663459193,-4.7270187530390955e-5,-5.2409958425237556e-8,-0.0019611493437624405,-4.7047867070956564e-5,-5.2201684891901307e-8,-0.0019608425118726406,-4.682012526184868e-5,-5.198578136085175e-8,-0.001960620223510975,-4.663679110534357e-5,-5.1811253235307756e-8,-0.00196044964691645,-4.65343886842311e-5,-5.1714684022350806e-8,-0.001960286244385532,-4.652696232149927e-5,-5.171103424799668e-8,-0.0019600861987816276,-4.660393314075276e-5,-5.1791161198884274e-8,-0.001959817384072231,-4.673447845393499e-5,-5.192571546679343e-8,-0.0019594663672666632,-4.687647620848606e-5,-5.207366237327364e-8,-0.0019590402013480103,-4.69873681531962e-5,-5.219291849091948e-8,-0.0019585630459199917,-4.7034093216261266e-5,-5.2250281015410575e-8,-0.0019580689434451474,-4.699963912862847e-5,-5.222813797470916e-8,-0.001957593098636109,-4.6884855780413277E-05,-5.212650982795257e-8,-0.0019571642607120374,-4.6705755925512453e-5,-5.196056523166988e-8,-0.001956800031936092,-4.648795164335014e-5,-5.175520387715332e-8,-0.0019565055327110657,-4.626040613743492e-5,-5.1538868280151164e-8,-0.001956274664949442,-4.605019885705157e-5,-5.133830575689433e-8,-0.0019560927255029953,-4.587904903303501e-5,-5.117507505063576e-8,-0.001955939273522816,-4.5761480824035993e-5,-5.106372503209461e-8,-0.00195579066288265,-4.570401845100373e-5,-5.101104052329391e-8,-0.001955622211363207,-4.570476038673568e-5,-5.101566680936453e-8,-0.001955410378080181,-4.575298140689403e-5,-5.1067700552761083e-8,-0.0019551355106216866,-4.5828851541139104e-5,-5.114829612455283e-8,-0.0019547856381423576,-4.590392133545704e-5,-5.122995115968192e-8,-0.001954361197611504,-4.594364275569868e-5,-5.127880370114713e-8,-0.001953879361532978,-4.591336545457481e-5,-5.126044894606853e-8,-0.001953375159198017,-4.5788157126795125e-5,-5.114965466945004e-8,-0.0019528960573228693,-4.556404200060815e-5,-5.094156483201756e-8,-0.0019524888638265663,-4.52650121756844e-5,-5.0658773399677315e-8,-0.0019521829510683111,-4.493969555783338e-5,-5.03482415102804e-8,-0.001951978224705543,-4.4646436883604996e-5,-5.006686001308755e-8,-0.0019518449631389671,-4.4433199757164185e-5,-4.9861909053352045e-8,-0.0019517355290165363,-4.43223575013476e-5,-4.9756164208185047e-8,-0.0019516011374687279,-4.430667685873654e-5,-4.9743737900243164e-8,-0.0019514058087092413,-4.4355660121435736e-5,-4.979589561049797e-8,-0.0019511334488388776,-4.442707829644108e-5,-4.987196748279403e-8,-0.0019507882121724506,-4.4478635729643045e-5,-4.993057447552316e-8,-0.0019503903208332868,-4.447687118184344e-5,-4.9938400968221414e-8,-0.0019499696523796678,-4.440237013879302e-5,-4.9875550740711113e-8,-0.0019495587983859016,-4.425144642123595e-5,-4.973750799595954e-8,-0.0019491867583722598,-4.403481674939329e-5,-4.953408613857425e-8,-0.001948874170726926,-4.3773966244990976e-5,-4.928597425302703e-8,-0.0019486306854478142,-4.3496186610003896e-5,-4.901984567298104e-8,-0.0019484545808215287,-4.322941742227304e-5,-4.876319520040075e-8,-0.0019483342448092852,-4.299784164805793e-5,-4.853991498678627e-8,-0.0019482508367361243,-4.281882578092175e-5,-4.8367249272998265E-08,-0.0019481813406516451,-4.2701332047739913e-5,-4.8254265238426306e-8,-0.001948101431884755,-4.2645465612550796e-5,-4.820147285858156e-8,-0.0019479880023605153,-4.2642663695294445e-5,-4.820104258643957e-8,-0.0019478215084132696,-4.267621983914629e-5,-4.823725928348993e-8,-0.0019475884766814169,-4.2722120831818105e-5,-4.8287176766687065e-8,-0.001947284537476418,-4.2750605376743135e-5,-4.832193112023108e-8,-0.0019469179020162252,-4.272943149953421e-5,-4.830978464674593e-8,-0.001946512130701754,-4.2629987351193034e-5,-4.8222103668448865e-8,-0.0019461057920909896,-4.243645483759409e-5,-4.804249139879382e-8,-0.0019457459924259364,-4.2155871844775294e-5,-4.777688442978733e-8,-0.001945474433914433,-4.182357814670306e-5,-4.745909633402526e-8,-0.0019453099923769398,-4.149726260691403e-5,-4.7145127891331156e-8,-0.0019452376149965635,-4.123797713130104e-5,-4.689469161507122e-8,-0.0019452123501192205,-4.108646923628689e-5,-4.67481344270079e-8,-0.0019451775408544185,-4.104846697515171e-5,-4.671199913017461e-8,-0.001945086305653114,-4.10964890190002e-5,-4.67605464329462e-8,-0.00194491498170104,-4.118420798055841e-5,-4.6849415350206084e-8,-0.0019446649566739968,-4.1263439193324884e-5,-4.693190382853436e-8,-0.0019443564891179575,-4.129638690638195e-5,-4.6970831215838533e-8,-0.001944019871009889,-4.126124977537125e-5,-4.694416268183079e-8,-0.0019436874568431314,-4.115267744009283e-5,-4.6845757576426216e-8,-0.0019433878283089455,-4.097933082895468e-5,-4.668329117893592e-8,-0.0019431420227587768,-4.076018683375537e-5,-4.64748293924473e-8,-0.001942961425049852,-4.052037587530838e-5,-4.624478413720799e-8,-0.001942847090506267,-4.028693694379081e-5,-4.6019666043409794e-8,-0.001942790358890472,-4.008483999357206e-5,-4.5824064376144906e-8,-0.0019427745871054582,-3.9933607897037706e-5,-4.5677259981585586e-8,-0.0019427777616891982,-3.984486508728241e-5,-4.559083113158273e-8,-0.0019427755865315058,-3.982107608163827e-5,-4.556748866183424e-8,-0.0019427445679542873,-3.985544668643988e-5,-4.5601049016244416e-8,-0.0019426648249855798,-3.9932722126588916e-5,-4.5677213148583996e-8,-0.0019425225723483325,-4.003067731752825e-5,-4.577491057145826e-8,-0.00194231231186212,-4.0122223590998573e-5,-4.586815250812175e-8,-0.001942038840723702,-4.017825071467646e-5,-4.592859500544757e-8,-0.0019417189403766162,-4.017172995117602e-5,-4.592943591477745e-8,-0.0019413817963929902,-4.0083668653272205e-5,-4.5851299075569445e-8,-0.0019410663758636533,-3.9910612776753746e-5,-4.5689797651230024e-8,-0.0019408138567119492,-3.9671609827259084e-5,-4.546263553447091e-8,-0.0019406546006421536,-3.941021451110704e-5,-4.52117972507066e-8,-0.001940593319235403,-3.918608994782784e-5,-4.499543804327817e-8,-0.0019406012767298,-3.905498590278002e-5,-4.486832358067523e-8,-0.001940623920404477,-3.904542284858823e-5,-4.4859006867683975e-8,-0.0019406025544464632,-3.914639483061919e-5,-4.495769578301747e-8,-0.001940497520876102,-3.931411884703988e-5,-4.512260307194805e-8,-0.001940299698239888,-3.949212761192832e-5,-4.5299254342045724e-8,-0.0019400271696272137,-3.9631546521015266e-5,-4.5440050246729585e-8,-0.0019397134945464904,-3.970249901148748e-5,-4.55153769119164e-8,-0.0019393955892964717,-3.969592038203203e-5,-4.551557626730208e-8,-0.0019391053846128947,-3.961966037424788e-5,-4.544745102453445e-8,-0.0019388656601532564,-3.9492805816283906e-5,-4.532898685003671e-8,-0.0019386887618311728,-3.9340423201373115e-5,-4.518433473733331e-8,-0.0019385768153243493,-3.9189313030825355e-5,-4.5039624737876385e-8,-0.0019385226755074644,-3.9064588188579694e-5,-4.491950007652083e-8,-0.0019385113945777103,-3.89868350713039e-5,-4.4844233237342264e-8,-0.0019385222021650083,-3.8969763524809525e-5,-4.48273957066787e-8,-0.0019385310528990875,-3.9018436577778017e-5,-4.4874176736247263E-08,-0.001938513684450707,-3.912838732750907e-5,-4.498060099930697e-8,-0.0019384488723173468,-3.928589530112374e-5,-4.51338353807561e-8,-0.001938321483040145,-3.946943857740446e-5,-4.531354277085539e-8,-0.0019381250107120861,-3.965222629013153e-5,-4.5494184057548586e-8,-0.0019378633026130548,-3.9805684583894356e-5,-4.5648196322549064e-8,-0.0019375512317700392,-3.990367219926965e-5,-4.574992768613837e-8,-0.0019372141057675222,-3.9927275177831916e-5,-4.5780279834495175e-8,-0.0019368852732491004,-3.987006414845319e-5,-4.573198875575406e-8,-0.0019366009982821448,-3.9743041431457964e-5,-4.561474398462704e-8,-0.001936392008214114,-3.9577268369624826e-5,-4.545806912288991e-8,-0.0019362725887905185,-3.9421116423997146e-5,-4.530885190760244e-8,-0.0019362308367980837,-3.93293215936308e-5,-4.522070434461868e-8,-0.0019362265448863605,-3.934447117414749e-5,-4.5235796012735197e-8,-0.0019362021567699314,-3.947831204143984e-5,-4.5366449130396565e-8,-0.0019361044622756712,-3.9704499044345756e-5,-4.558787687093552e-8,-0.0019359055467726995,-3.9969038024905696e-5,-4.5848165191453386e-8,-0.001935610918476163,-4.0212436952495197e-5,-4.608967212085328e-8,-0.0019352522767100955,-4.0390248298052926e-5,-4.626892936144965e-8,-0.001934872343550989,-4.04826572347339e-5,-4.636602580928481e-8,-0.0019345110162189247,-4.0492973987788945e-5,-4.6383349171738214e-8,-0.0019341974042064007,-4.0440353373262014e-5,-4.633877244453355e-8,-0.00193394745527741,-4.035183976460438e-5,-4.6258113992407355e-8,-0.0019337648831009675,-4.025623586702828e-5,-4.6169223646382756e-8,-0.001933643297940725,-4.018010690860001e-5,-4.6098017218746215e-8,-0.0019335684391845415,-4.014524819687492e-5,-4.606588963420782e-8,-0.0019335202829593439,-4.016691288990378e-5,-4.608791074426844e-8,-0.001933475196842574,-4.025240778009302e-5,-4.617145854048994e-8,-0.0019334084174011334,-4.039999941699849e-5,-4.6315210257224784e-8,-0.0019332970460884604,-4.0598441631085976e-5,-4.6508730328468455e-8,-0.0019331234337040622,-4.0827636234276635e-5,-4.67330881859333e-8,-0.0019328784570221483,-4.1060782189105156e-5,-4.69628242270068e-8,-0.001932564016748744,-4.126806268614148e-5,-4.716934132885776e-8,-0.0019321940512386387,-4.14215942181376e-5,-4.732552837106896e-8,-0.001931793485630655,-4.1500945427768556e-5,-4.741103326315836e-8,-0.0019313948975945483,-4.149824340283206e-5,-4.741729676503009e-8,-0.0019310330346188518,-4.142188515293687e-5,-4.7351395895912765e-8,-0.0019307375352558293,-4.1297801414388954e-5,-4.723760067108958e-8,-0.0019305246932332914,-4.116693684145903e-5,-4.711522060800814e-8,-0.0019303901558369954,-4.107771840039374e-5,-4.7031429532281454e-8,-0.001930305702440573,-4.1073507327231025e-5,-4.70290097302363e-8,-0.001930223661133537,-4.117772149833033e-5,-4.71316652941459e-8,-0.0019300904151773313,-4.1382707713134946e-5,-4.733292449466249e-8,-0.0019298652063116251,-4.1649473063614e-5,-4.7595646288971316e-8,-0.0019295353407003367,-4.192078311450537e-5,-4.786461098057043e-8,-0.0019291195029987889,-4.214178037375372e-5,-4.8086494979264673e-8,-0.0019286581510240075,-4.227740391874418e-5,-4.822680388860586e-8,-0.0019281977027044515,-4.23190945630982e-5,-4.827648982478889e-8,-0.001927776949794641,-4.228093381957044e-5,-4.8248402386580654e-8,-0.0019274200721663662,-4.219051722902683e-5,-4.8168652620736966e-8,-0.001927135772707496,-4.20798850584923e-5,-4.8067954346620734e-8,-0.0019269198332215003,-4.197912027142969e-5,-4.797542280744417e-8,-0.0019267586318278405,-4.1912777277154615e-5,-4.7915023022203665e-8,-0.0019266323173630316,-4.189820026513446e-5,-4.7903834928403336e-8,-0.0019265173637764677,-4.194471819140883e-5,-4.795122144177823e-8,-0.0019263888011234276,-4.205308385953557e-5,-4.805829680961167e-8,-0.0019262225974915343,-4.221501646557592e-5,-4.821751718558146e-8,-0.0019259985568891125,-4.2413183674726635e-5,-4.8412658231367925e-8,-0.0019257037357562376,-4.262227688328076e-5,-4.861977364178274e-8,-0.0019253358507307667,-4.281183412618318e-5,-4.88097763412886e-8,-0.0019249056464002532,-4.295109158693287e-5,-4.895296804974039e-8,-0.00192443696510101,-4.3015405547280085e-5,-4.9025146674251664e-8,-0.001923963576351099,-4.299286159649854e-5,-4.901401418858055e-8,-0.0019235227456985294,-4.288907110417211e-5,-4.892397352513479e-8,-0.0019231466972611288,-4.2728295806226845e-5,-4.8777489495455956e-8,-0.0019228540148536525,-4.2549887097491935e-5,-4.861195243355361e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json new file mode 100644 index 0000000..771149a --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":10000,"numberOfSamples":1000,"samples":[1.9197471616856318e-4,7.996600532056201e-6,-1.2597360486632112e-8,1.923979354906972e-4,8.059544161443208e-6,-1.2601754449986743e-8,1.9274745963100852e-4,8.18217092448731e-6,-1.2612185701149497e-8,1.9301410614298842e-4,8.328459694631899e-6,-1.2625220207854334e-8,1.9320200661086356e-4,8.46367290461882e-6,-1.263746635903232e-8,1.933256574311564e-4,8.557979990756902e-6,-1.264596926377846e-8,1.9340729897750835e-4,8.588749871695277e-6,-1.2648467217789009e-8,1.9347454382165973e-4,8.54234886551231e-6,-1.2643575641672086e-8,1.9355780445299317e-4,8.41580428718647e-6,-1.2630935191527253e-8,1.9368703586457032e-4,8.218144650907273e-6,-1.2611321617725655e-8,1.9388759494511673e-4,7.970728457914735e-6,-1.2586673932584885e-8,1.9417557384287807e-4,7.70570255454025e-6,-1.2559972916060515e-8,1.9455353413614596e-4,7.461994170668981e-6,-1.2534909842557773e-8,1.950079268750979e-4,7.278838435440244e-6,-1.2515320800328438e-8,1.9550946566497787e-4,7.1877009230743185e-6,-1.250443183656935e-8,1.9601716991058025e-4,7.204296880679899e-6,-1.2504049076168112e-8,1.964858622143666e-4,7.322751895738212e-6,-1.2513893072518937e-8,1.9687601817327312e-4,7.513719443070609e-6,-1.2531293180978063e-8,1.9716418145619786e-4,7.727807131336245e-6,-1.255143733487227e-8,1.9735148270881055e-4,7.904972006017888e-6,-1.256828984627858e-8,1.9746717430474582e-4,7.989189307001313e-6,-1.2576107854737417e-8,1.9756414464783983e-4,7.945391162788686e-6,-1.2571208909452543e-8,1.9770522673983343e-4,7.772936988045046e-6,-1.255336219063038e-8,1.9794335851555265e-4,7.508737590816236e-6,-1.2526112219574885e-8,1.9830340643788719e-4,7.216310774252375e-6,-1.2495704511570225e-8,1.9877444051722307e-4,6.9643475770128966e-6,-1.2468991956480241e-8,1.9931605492441463e-4,6.804754497374457e-6,-1.2451273955690413e-8,1.99874367496323e-4,6.7599548302468994e-6,-1.2444993679265321e-8,2.0039900027274713e-4,6.82270849799812e-6,-1.2449629419202722e-8,2.0085428305204736e-4,6.964723431631095e-6,-1.2462470630692901e-8,2.012230129828281e-4,7.147810040913146e-6,-1.2479705950981818e-8,2.015048844233702e-4,7.3331078822919305e-6,-1.2497376827881843e-8,2.0171260728942556e-4,7.4869143007848404e-6,-1.2512018298014086e-8,2.0186784837753266e-4,7.583663846056725e-6,-1.2521002574264202e-8,2.0199788115223623e-4,7.6072954724533325e-6,-1.252268798054521e-8,2.0213287762151582e-4,7.552075776678594e-6,-1.25164799413586e-8,2.023032713093168e-4,7.423389313956485e-6,-1.250287524528341e-8,2.025365492604393e-4,7.238354929979809e-6,-1.2483501654253962e-8,2.0285312487000682e-4,7.025543178481034e-6,-1.2461102098633864e-8,2.032615548180566e-4,6.822697696785637e-6,-1.2439358398961576e-8,2.037542292355152e-4,6.671464949679808e-6,-1.2422433892723618e-8,2.043054648544205e-4,6.609017340781519e-6,-1.241418367286807e-8,2.0487402079284614e-4,6.658061470286973e-6,-1.2417141084804209e-8,2.0541091916908847e-4,6.8183286453880834e-6,-1.2431576848491557e-8,2.0587131297464264e-4,7.063148440915905e-6,-1.2455025250029365e-8,2.0622704282800456e-4,7.343452105811302e-6,-1.2482583077772363e-8,2.064756840198449e-4,7.598950788494315e-6,-1.2508013979414962e-8,2.0664282168786132e-4,7.773572333271332e-6,-1.2525372054527937e-8,2.0677643799377142e-4,7.830732911241555e-6,-1.2530654293509096e-8,2.069346139971509e-4,7.763969732585166e-6,-1.252297208136234e-8,2.0716968071363143e-4,7.599507240572051e-6,-1.2504868071919612e-8,2.075133831394106e-4,7.389324388835024e-6,-1.2481637303243253e-8,2.079680047158014e-4,7.196295440443784e-6,-1.2459822238997104e-8,2.0850678511286473e-4,7.076223630712314e-6,-1.2445361216516968e-8,2.09083353603553e-4,7.063208010991012e-6,-1.2442027977015235e-8,2.0964607359171694e-4,7.163288146015455e-6,-1.245068068918884e-8,2.1015153998119444e-4,7.357300167494584e-6,-1.2469466055778998e-8,2.105729208467013e-4,7.6098914082299795e-6,-1.2494715588623496e-8,2.1090206952705673e-4,7.880059152858419e-6,-1.2522068534104855e-8,2.1114705135521922e-4,8.129688725332927e-6,-1.2547426277362978e-8,2.11327623932954e-4,8.328785948689606e-6,-1.2567558359396523e-8,2.1147063027153733e-4,8.45781981905388e-6,-1.2580371063842255e-8,2.116062170779773e-4,8.508318739735103e-6,-1.2584953522756101e-8,2.1176489219544155e-4,8.482821664273282e-6,-1.2581533889456395e-8,2.1197487908306462e-4,8.394780190546323e-6,-1.2571439050506965e-8,2.1225908578335732e-4,8.268336110121104e-6,-1.2557075378613995e-8,2.1263125815806694e-4,8.137282943263268e-6,-1.2541867403695375e-8,2.1309149641396343e-4,8.042041677157666e-6,-1.2530015745409708e-8,2.1362232923984473e-4,8.023413973770414e-6,-1.2525906367685887e-8,2.141877185477536e-4,8.112834049185048e-6,-1.2533095524318957e-8,2.1473774581068903e-4,8.3210914871919e-6,-1.2553050116063849e-8,2.1522011129794914e-4,8.630080126066386e-6,-1.2584142235542132e-8,2.1559591766686086e-4,8.992908412392393e-6,-1.2621531987775295e-8,2.1585357677476676e-4,9.344915051726786e-6,-1.2658284937238318e-8,2.1601416666211921e-4,9.622593263837225e-6,-1.2687427039128446e-8,2.1612534488552648e-4,9.78287653756447e-6,-1.2704087855205246e-8,2.1624652249650514e-4,9.81514982519467e-6,-1.2706860844017089e-8,2.1643148366610137e-4,9.742398905621779e-6,-1.2697982257149455e-8,2.1671439125053968e-4,9.612686075077394e-6,-1.2682472194826136e-8,2.1710262618754617e-4,9.484942883597433e-6,-1.2666663487275253e-8,2.1757724992220657e-4,9.413689438536168e-6,-1.2656583095773519e-8,2.180998881122663e-4,9.436636301726828e-6,-1.2656579120301334e-8,2.1862349866680082e-4,9.567821662343242e-6,-1.2668481926430359e-8,2.1910382506955763e-4,9.797254291937394e-6,-1.2691451235088495e-8,2.1950852180187367e-4,1.0096209406878957e-5,-1.2722473686840802e-8,2.1982203208259762e-4,1.0425814221374339e-5,-1.2757289563240955e-8,2.2004593990235762e-4,1.0746017377170483e-5,-1.279141904043139e-8,2.2019594725035345e-4,1.1022697089033848e-5,-1.2821004358988786e-8,2.2029723714439854e-4,1.1231954282858246e-5,-1.284332207805951e-8,2.2037976133546005e-4,1.1361792925413278e-5,-1.285697045584737e-8,2.204743050715671e-4,1.1412058566647195e-5,-1.2861837839761607e-8,2.2060942735678435e-4,1.139360836886871e-5,-1.2858986747465736e-8,2.2080886496210573e-4,1.1327297175898568e-5,-1.2850546480647196e-8,2.2108883199633075e-4,1.1242779422350658e-5,-1.2839626876663463e-8,2.2145479727229533e-4,1.117656313941561e-5,-1.2830179748791994e-8,2.218978524119614e-4,1.1168241380550244e-5,-1.2826654765479383e-8,2.223918274118358e-4,1.125368271022084e-5,-1.2833271066266854e-8,2.2289360923823234e-4,1.1454892795233024e-5,-1.2852838922138324e-8,2.2334970247736352e-4,1.1768728623398749e-5,-1.288537714386462e-8,2.2371036423718345e-4,1.2159917386077626e-5,-1.2927189221052759e-8,2.2394786325905398e-4,1.2565129918165497e-5,-1.2971236046903973e-8,2.2407012789687003e-4,1.2910776320851335e-5,-1.3009149058543156e-8,2.2412080512659326e-4,1.3138423398335554e-5,-1.3034156281509835e-8,2.2416403518024246e-4,1.3225258584550226e-5,-1.3043432270151873e-8,2.242617193073924e-4,1.31895428771349e-5,-1.303873108036752e-8,2.244545122747121e-4,1.3080514119203897e-5,-1.302529805681681e-8,2.247533541484739e-4,1.2960154137190002e-5,-1.3009918312410972e-8,2.2514149681588606e-4,1.288542370013457e-5,-1.2999015386017868e-8,2.2558304221404233e-4,1.2896057941767493e-5,-1.2997297157850649e-8,2.2603369392279116e-4,1.3009117176953077e-5,-1.3007061790201875e-8,2.264507770082446e-4,1.3219243737167519e-5,-1.3028087674737915e-8,2.2680097981678127e-4,1.3502917845584759e-5,-1.3057987443448877e-8,2.2706512925085745e-4,1.3825112165154655e-5,-1.3092899943215674e-8,2.2723980182644377e-4,1.4146844760246526e-5,-1.312835960370297e-8,2.2733606659061404e-4,1.4432176615984899e-5,-1.316015072754668e-8,2.2737613010144923e-4,1.4653552288310205e-5,-1.3184975709050629e-8,2.2738889061095103e-4,1.4794967275872633e-5,-1.3200846957566375e-8,2.2740539458427508e-4,1.485298630857986e-5,-1.3207200828708261e-8,2.2745491914188558e-4,1.48361020505556e-5,-1.3204810600297655e-8,2.2756189301271438e-4,1.4763163136429955e-5,-1.3195611648549548e-8,2.2774342945347363e-4,1.4661392768367974e-5,-1.318251654013457e-8,2.2800711646406744e-4,1.4564073938727435e-5,-1.3169225227622847e-8,2.2834878588194946e-4,1.4507553748530596e-5,-1.3159958692847593e-8,2.287503519544513e-4,1.4526782542924386e-5,-1.3158983635572145e-8,2.2917872878590236e-4,1.4648464790645952e-5,-1.3169782666393387e-8,2.2958798770619958e-4,1.4881779191418465e-5,-1.3193861131791164e-8,2.2992738155013117e-4,1.5208892056563145e-5,-1.3229487616666131e-8,2.3015629354228862e-4,1.5580637661667213e-5,-1.3271075564489491e-8,2.3026234150305317e-4,1.5924292688085457e-5,-1.331008459441756e-8,2.3027280889853033e-4,1.6165999528322054e-5,-1.3337725131374554e-8,2.3024916735463958e-4,1.6259694822258185e-5,-1.3348408049319169e-8,2.3026415545918469e-4,1.6206222473384533e-5,-1.334196191813377e-8,2.303737207873722e-4,1.6050930760160185e-5,-1.3323325049974134e-8,2.3059936656605264e-4,1.586282236461781e-5,-1.3300188674521488e-8,2.309273397309413e-4,1.5709080036263402e-5,-1.328019137069129e-8,2.3131987266427655e-4,1.5637160807724585e-5,-1.3268952807786755e-8,2.3172978464227394e-4,1.5668110115491378e-5,-1.3269276372437528e-8,2.3211253167230013e-4,1.579838872190477e-5,-1.3281222326984168e-8,2.3243381968418038e-4,1.6005968044664794e-5,-1.3302645758738719e-8,2.326732628860945e-4,1.6257565449448583e-5,-1.3329918467555854e-8,2.3282524674238283e-4,1.651551762610959e-5,-1.3358697686405669e-8,2.3289788056306504e-4,1.674381866600482e-5,-1.3384673664069943e-8,2.3291052997145164e-4,1.6913063406322665e-5,-1.3404220672953126e-8,2.3289032072172143e-4,1.700401500413197e-5,-1.3414875180816028e-8,2.3286803858424185e-4,1.7009620439693355e-5,-1.3415595856352999e-8,2.328739025738482e-4,1.6935397883075238e-5,-1.3406804390503862e-8,2.3293373693946084e-4,1.6798289595216762e-5,-1.3390246403408823e-8,2.3306590757557672e-4,1.6624355851294292e-5,-1.3368746419574027e-8,2.3327907598190837e-4,1.6445739810291813e-5,-1.334591547674048e-8,2.3357067709120252e-4,1.6297106752196225e-5,-1.3325815392409889e-8,2.3392604926032666e-4,1.621152078481189e-5,-1.3312532903507163e-8,2.3431832644508823e-4,1.6215461539974096e-5,-1.3309583151627188e-8,2.3470981296471905e-4,1.6322593851986297e-5,-1.3319074542987742e-8,2.350563586266793e-4,1.6526652827706943e-5,-1.3340700335972787e-8,2.3531635632917516e-4,1.6795606538324656e-5,-1.3370882993466678e-8,2.3546449597391608e-4,1.7071515543042718e-5,-1.3402687449686616e-8,2.3550651143611578e-4,1.7281479296035646e-5,-1.3427194538859864e-8,2.354860662292638e-4,1.736119067195648e-5,-1.3436455207389577e-8,2.354745423562714e-4,1.7282664410910297e-5,-1.3426879119078932e-8,2.3554413988636483e-4,1.7069422488256228e-5,-1.340100684306105e-8,2.3573843359821594e-4,1.678735137254538e-5,-1.3366380140959267e-8,2.3605794175604995e-4,1.6516440745440828e-5,-1.333226482032832e-8,2.364666128436858e-4,1.6321330128306323e-5,-1.3306309980540544e-8,2.369106704107837e-4,1.6235316784717564e-5,-1.329272307712745e-8,2.373372411284009e-4,1.6259841608278305e-5,-1.3292124623119489e-8,2.3770594596677692e-4,1.6372931299750227e-5,-1.3302373390412671e-8,2.37993246071328e-4,1.6539681380754335e-5,-1.3319651568231e-8,2.3819211939730327e-4,1.6721074059761234e-5,-1.3339438365960858e-8,2.3830961030271236e-4,1.6880231173799742e-5,-1.335727306140373e-8,2.3836375681855868e-4,1.6986636247061285e-5,-1.3369334013755532e-8,2.3838035533166568e-4,1.701905501777484e-5,-1.33728675782703e-8,2.383895323005555e-4,1.6967478698558967e-5,-1.3366467989198284e-8,2.38422070556946e-4,1.6834089647268072e-5,-1.3350197399653409e-8,2.3850556570700744e-4,1.6633066038275236e-5,-1.3325545739040455e-8,2.3866072662191243e-4,1.6388979589520194e-5,-1.32952356240298e-8,2.3889832942241776e-4,1.613376763873816e-5,-1.3262897145540119e-8,2.3921726251748584e-4,1.5902571416136462e-5,-1.3232645062727092e-8,2.3960391772207974e-4,1.5728837101970084e-5,-1.3208572512056224e-8,2.4003306897066437e-4,1.5639090729009958e-5,-1.3194159292205045e-8,2.4047031694471747e-4,1.5647770280759835e-5,-1.3191601366742145e-8,2.408763192909911e-4,1.5752441997243236e-5,-1.320109658813078e-8,2.4121332685415593e-4,1.593012198481269e-5,-1.3220221033409507e-8,2.414543324312317e-4,1.6136500786482835e-5,-1.3243695130072412e-8,2.4159379503856346e-4,1.631092961927605e-5,-1.3263965868818756e-8,2.416563493402631e-4,1.6389819439386743e-5,-1.327294423034196e-8,2.416971351728686e-4,1.6327839253466488e-5,-1.3264745691624821e-8,2.4178793488179986e-4,1.611933231700696e-5,-1.323839068662466e-8,2.4199092390150611e-4,1.580664719687679e-5,-1.3198809867441091e-8,2.4233282522947923e-4,1.546635588883893e-5,-1.315515486800695e-8,2.42795161206397e-4,1.5179028049018296e-5,-1.3117189496490207e-8,2.4332560646111933e-4,1.5000197877739287e-5,-1.3091844309906427e-8,2.4386095630435782e-4,1.494730909943296e-5,-1.3081612462610715e-8,2.443476230301867e-4,1.5004081626133282e-5,-1.3084945993000656e-8,2.447521154769013e-4,1.513382584235183e-5,-1.3097713318885834e-8,2.4506227529865664e-4,1.529290726155764e-5,-1.3114741963102495e-8,2.4528352222681816e-4,1.5440210476210758e-5,-1.3130971246521739e-8,2.454337577216843e-4,1.554235342838633e-5,-1.3142157207141877e-8,2.4553879145722154e-4,1.5576059836117717e-5,-1.3145250706278301e-8,2.456286535961741e-4,1.5529165859651303e-5,-1.313858102750454e-8,2.4573440156436537e-4,1.5401067537156352e-5,-1.312192399297445e-8,2.4588495016140917e-4,1.5202739157127264e-5,-1.3096479904399723e-8,2.4610367254958987e-4,1.4956012999883382e-5,-1.3064759078539774e-8,2.4640490122437197e-4,1.4691580503364029e-5,-1.3030343464314749e-8,2.467909300514352e-4,1.444531172938255e-5,-1.299749108332309e-8,2.472503716788958e-4,1.4252978327617077e-5,-1.2970574858005676e-8,2.4775861981413225e-4,1.4143991993889015e-5,-1.2953383025503955e-8,2.482808292580495e-4,1.4135196216785739e-5,-1.2948356913590524e-8,2.4877732410946555e-4,1.4225995061342692e-5,-1.295589775406787e-8,2.492108317402965e-4,1.439598151292376e-5,-1.297390984283666e-8,2.495546496005041e-4,1.4605934664835293e-5,-1.2997753852338253e-8,2.4980058126312243e-4,1.4802976706468473e-5,-1.3020791083393111e-8,2.499648122532091e-4,1.4930522578149964e-5,-1.3035648974352602e-8,2.500889719183307e-4,1.4942625206491755e-5,-1.3036141981384923e-8,2.502332948927713e-4,1.4819937637970325e-5,-1.301942657528763e-8,2.5046053996871437e-4,1.458121681939785e-5,-1.2987549154608683e-8,2.508142835955966e-4,1.4282610184457833e-5,-1.294739872783118e-8,2.513011655620707e-4,1.4000896174505066e-5,-1.2908626141535389e-8,2.5188749805877945e-4,1.3806467779425598e-5,-1.288027326783674e-8,2.5251290861910285e-4,1.3739666020847875e-5,-1.286777210466249e-8,2.531129543478528e-4,1.3801980509944972e-5,-1.2871727408598455e-8,2.5363851477171943e-4,1.3963248403024858e-5,-1.288867324663838e-8,2.5406475771490327e-4,1.4177059797621997e-5,-1.2912910633960826e-8,2.543902585935145e-4,1.4395467555977205e-5,-1.2938351134914312e-8,2.5463093937902145e-4,1.457846819591566e-5,-1.295977796036463e-8,2.54813136638039e-4,1.4698160028561238e-5,-1.2973461632588474e-8,2.54967981581639e-4,1.4739503755468211e-5,-1.2977324579518188e-8,2.551274405562864e-4,1.4699654562096109e-5,-1.2970877284779953e-8,2.5532142348084824e-4,1.4587027197628657e-5,-1.2955077061468487e-8,2.5557518672666003e-4,1.4420380583572636e-5,-1.2932175481281603e-8,2.5590650103593743e-4,1.4227567224019883e-5,-1.2905548350362233e-8,2.5632253366152845e-4,1.4043212860365394e-5,-1.287943866108471e-8,2.568170361656435e-4,1.3904585536052271e-5,-1.285851192094646e-8,2.5736901125437294e-4,1.384542362248093e-5,-1.2847155402873307e-8,2.5794421239109947e-4,1.388843946076878e-5,-1.2848556465930347e-8,2.5850035030317047e-4,1.403829277109537e-5,-1.2863749847957166e-8,2.589956924459188e-4,1.4277505943607658e-5,-1.2890953907157057e-8,2.5939924357184515e-4,1.4567459494134127e-5,-1.2925525776831505e-8,2.596996993209261e-4,1.4855178454192225e-5,-1.2960705554380696e-8,2.5991041763439313e-4,1.5084813281586183e-5,-1.2989066766874659e-8,2.6006856585053105e-4,1.5211326349834672e-5,-1.3004361087109885e-8,2.602278725687631e-4,1.5213126500508729e-5,-1.3003294012197764e-8,2.6044583194747623e-4,1.5100107540589441e-5,-1.2986715711409487e-8,2.607678954750293e-4,1.4913817381501574e-5,-1.2959760458590743e-8,2.6121309337834975e-4,1.471789554231206e-5,-1.2930675613196354e-8,2.617666739936158e-4,1.4580147819581488e-5,-1.2908507750034461e-8,2.623838952785086e-4,1.4551998820653167e-5,-1.2900372867353652e-8,2.6300436611455946e-4,1.465364176688067e-5,-1.2909389577639032e-8,2.6357084573760297e-4,1.4871017273617807e-5,-1.293411963262422e-8,2.640443869669923e-4,1.5164543154651873e-5,-1.2969586613798102e-8,2.64410737769705e-4,1.548385098723045e-5,-1.3009177614068972e-8,2.6467821443590807e-4,1.5781554620764703e-5,-1.304650817055167e-8,2.648707916531887e-4,1.602193715049497e-5,-1.3076659266674922e-8,2.650204220774552e-4,1.6184189121099728e-5,-1.309668323525758e-8,0.00026516090400317593,1.626199634794566e-5,-1.3105583832666333e-8,2.653238016446657e-4,1.626157432670227e-5,-1.3104045518856175e-8,2.6553584872296177e-4,1.619953400725645e-5,-1.3094120073806924e-8,2.6581694404772865e-4,1.6101034287601604e-5,-1.3078966785871532e-8,2.6617803512994057e-4,1.599792643257314e-5,-1.3062635061321467e-8,2.666186743112128e-4,1.5926127147520803e-5,-1.3049789195619948e-8,2.671247177812508e-4,1.5921303481340893e-5,-1.3045222202262528e-8,2.6766743265218185e-4,1.6012313493671894e-5,-1.3053032308258361e-8,2.682058449019524e-4,1.6212993883764293e-5,-1.3075494404843321e-8,2.6869381754198406e-4,1.6514662380160417e-5,-1.3111934310112453e-8,2.690915392547794e-4,1.688312459406304e-5,-1.3158158531168263e-8,2.693782808806831e-4,1.726356887424719e-5,-1.3206971608799833e-8,2.695612194819721e-4,1.7593764377538284e-5,-1.3249899145305468e-8,2.696757969225932e-4,1.7821710710339604e-5,-1.3279603194733367e-8,2.697766262792751e-4,1.7921174890309415e-5,-1.3292069257397106e-8,2.699221571586634e-4,1.7899381168918985e-5,-1.3287759748585721e-8,2.701585140051222e-4,1.7794662659770487e-5,-1.3271427248333769e-8,2.7050743193193414e-4,1.7665574219650932e-5,-1.3250774476406711e-8,2.70961263500747e-4,1.7575149467220522e-5,-1.3234415117476824e-8,2.714859046544607e-4,1.7574737909080554e-5,-1.3229680863399421e-8,2.7203052331977687e-4,1.769170100835547e-5,-1.324083414757745e-8,2.7254117585821244e-4,1.7924189075479015e-5,-1.3268167506586092e-8,2.729741997691505e-4,1.8244128847031433e-5,-1.3308232751599827e-8,2.733054105239225e-4,1.860683481743521e-5,-1.335506308671976e-8,2.7353289682521516e-4,1.896345349760831e-5,-1.3401893664246537E-08,2.73673842637392e-4,1.9271996265799993e-5,-1.3442759869942829e-8,2.737578282615282e-4,1.9504213337008058e-5,-1.3473535503050086e-8,2.738194967147241e-4,1.9647848480923535e-5,-1.3492301040760689e-8,2.7389256852830313e-4,1.9705491001702175e-5,-1.3499197079042159e-8,2.740058704701865e-4,1.9691777654711647e-5,-1.3496023246278775e-8,2.741810262902575e-4,1.9630334079578346e-5,-1.3485807494797274e-8,2.744310131178127e-4,1.9551058078948304e-5,-1.347245824705066e-8,2.747588655876082e-4,1.948759434125028e-5,-1.3460484076347776e-8,2.7515620852405575e-4,1.9474357175009086e-5,-1.3454669802832967e-8,2.7560192124283077e-4,1.954221941430565e-5,-1.3459536895858992e-8,2.760620815654129e-4,1.9712188518429024e-5,-1.3478446229307413e-8,2.764931140341487e-4,1.998747860898367e-5,-1.3512381587099931e-8,2.768499825458415e-4,2.0346447047745347e-5,-1.3558791588758346e-8,2.7709934818909317e-4,2.0740975236487897e-5,-1.3611211001438215e-8,2.7723376707050325e-4,2.1104902391710272e-5,-1.3660381144345922e-8,2.7727951721184677e-4,2.1372977512600064e-5,-1.3696942301516698e-8,2.7729156569639065e-4,2.150364337470411e-5,-1.371469511192883e-8,2.7733590146886866e-4,2.1494482605572527e-5,-1.3712813986364758e-8,2.7746730910535865e-4,2.1382407878183956e-5,-1.3695935779833347e-8,2.777129170467314e-4,2.1229571564400812e-5,-1.3672319050985458e-8,2.7806720281447627e-4,2.1102980963536406e-5,-1.3651166775522754e-8,2.7849753778370835e-4,2.105639774177976e-5,-1.3640203101975407e-8,2.7895571606205595e-4,2.1119312740397868e-5,-1.36440855384151e-8,2.7939082054513723e-4,2.129380639205303e-5,-1.3663777942921247e-8,2.797602560487331e-4,2.155785003144518e-5,-1.3696778046641539e-8,2.8003725820557e-4,2.1872858482824725e-5,-1.3738005196123418e-8,2.802142004107094e-4,2.219328394309847e-5,-1.3781099702460829e-8,2.8030175709160225e-4,2.2476143948988695e-5,-1.381982555271776e-8,2.8032472939190016e-4,2.268859947612066e-5,-1.3849251125167231e-8,2.803159812312574e-4,2.2812371570131774e-5,-1.386647093141835e-8,2.803101183459111e-4,2.2844791364820303e-5,-1.387080182051307e-8,2.8033821087907477e-4,2.2797146171930603e-5,-1.3863552789390385e-8,2.8042420340903043e-4,2.2691458727297488e-5,-1.3847561307081722e-8,2.8058292600206835e-4,2.2556824850266946e-5,-1.3826691726476474e-8,2.8081916298474405e-4,2.2425953925453616e-5,-1.3805403994071266e-8,2.8112721903985157e-4,2.2331951025042324e-5,-1.3788383591687185e-8,2.8149066344888076e-4,2.2304951530066296e-5,-1.3780134438421739e-8,2.8188238547674434e-4,2.2367947560152177e-5,-1.3784386060479597e-8,2.822658721965546e-4,2.2531246589409013e-5,-1.380320444288144e-8,2.8259936195518845e-4,2.278597036190299e-5,-1.38358812243578e-8,2.828444569445365e-4,2.3098866508920356e-5,-1.3877999412904191e-8,2.82979105364523e-4,2.341279564136978e-5,-1.3921401485040897e-8,2.8301103748081484e-4,2.3657751771110462e-5,-1.3955814384309308e-8,2.8298340770177647e-4,2.37731328817469e-5,-1.3972176264270338e-8,2.8296484207766603e-4,2.3733029889624773e-5,-1.3966353021702428e-8,2.830249037760498e-4,2.3559828091315065e-5,-1.3941085550751729e-8,2.832073180871705e-4,2.331632681640619e-5,-1.3904875495648811e-8,2.8351576155621184e-4,2.308077284889224e-5,-1.3868553787955135e-8,2.8391769853862014e-4,2.2919547763551398e-5,-1.384157822144315e-8,2.8436019434869387e-4,2.287017449835268e-5,-1.3829694080640847e-8,2.847876469600927e-4,2.2937814065198065e-5,-1.3834319348602738e-8,2.8515485284144533e-4,2.3101223801610495e-5,-1.3853146215244e-8,2.85433793371567e-4,2.332264590269975e-5,-1.3881308460203237e-8,2.856153143340677e-4,2.3557815709961442e-5,-1.3912679492992264e-8,2.857074693224336e-4,2.3764383273789843e-5,-1.3941085356826256e-8,2.8573186713930584e-4,2.390828726211465e-5,-1.3961325891680267e-8,2.857188696819171e-4,2.39679560926046e-5,-1.3969911360196299e-8,2.8570231452007376e-4,2.3936257400670855e-5,-1.3965439487283113e-8,2.857144182944666e-4,2.382028199606721e-5,-1.394860030825303e-8,2.8578147687363805e-4,2.3639260037550102e-5,-1.3921869960500952e-8,2.8592084201393037e-4,2.342114432945347e-5,-1.3889012634409748e-8,2.8613931356911184e-4,2.3198585473751224e-5,-1.3854531958188717e-8,2.864327166543551e-4,2.3004883616430312e-5,-1.3823159470958645e-8,2.867863494363946e-4,2.2870125806672398e-5,-1.3799380523453057e-8,2.8717609388622425e-4,2.2817452101605205e-5,-1.378693317459741e-8,2.8757018441867614e-4,2.2859200077940465e-5,-1.378819562942302e-8,2.8793216925267906e-4,2.2992674449651844e-5,-1.3803413833910311e-8,2.8822619040308e-4,2.3196048522297792e-5,-1.3829891060439484e-8,2.8842548394305867e-4,2.3426397377221117e-5,-1.386152544402009e-8,2.885234854253173e-4,2.362330839766609e-5,-1.3889296541301406e-8,2.885438986592403e-4,2.3721722641275258e-5,-1.3903263102308176e-8,2.885424114376653e-4,2.3674183477913317e-5,-1.3896003696172715e-8,2.885929118709168e-4,2.3474313471584593e-5,-1.3866152311867126e-8,2.8875979009874574e-4,2.316637368653028e-5,-1.3819777847051538e-8,2.890704395776163e-4,2.283074746827438e-5,-1.3768264842029872e-8,2.895049885128943e-4,2.2551813469805068e-5,-1.3723757443181604e-8,2.900082669629545e-4,2.2387357101861408e-5,-1.3694865214262721e-8,2.9051374253208817e-4,2.235489612947439e-5,-1.36846867449533e-8,2.909649021340734e-4,2.2436103025525936e-5,-1.3691271872221072e-8,2.9132650488845045e-4,2.2590621258034392e-5,-1.3709370985045623e-8,2.9158637691061105e-4,2.2770429252790272e-5,-1.3732329579321405e-8,2.917517969683068e-4,2.2930448877807925e-5,-1.3753577653967498e-8,2.9184401188628566e-4,2.303489006955536e-5,-1.3767628184703838e-8,2.918927671925494e-4,2.3060445344766418e-5,-1.3770682898745772e-8,2.919314014291164e-4,2.299749274559909e-5,-1.3760937852867262e-8,2.9199247847638013e-4,2.2849926468667013e-5,-1.3738629102849638e-8,2.921039092862608e-4,2.2633834466347406e-5,-1.370584503210565e-8,2.92285666948327e-4,2.2375057960451114e-5,-1.3666144851793793e-8,2.925473850976914e-4,2.2105676829510934e-5,-1.3624037426111123e-8,2.9288716836903646e-4,2.185972836237773e-5,-1.3584395520403735e-8,2.93291734444017e-4,2.1668667070356885e-5,-1.355186975838904e-8,2.937378250344291e-4,2.1556973898122735e-5,-1.3530315087571015e-8,2.941947974500097e-4,2.1538210800188506e-5,-1.3522214675142932e-8,2.9462828965697827e-4,2.161178421989162e-5,-1.3528102494893166e-8,2.950049836659742e-4,2.176062612107966e-5,-1.3546028771640402e-8,2.9529877895283186e-4,2.1950341406551685e-5,-1.3571220417731373e-8,2.95498425036084e-4,2.2131299035723218e-5,-1.3596256341667975e-8,2.956153580837951e-4,2.22458472466366e-5,-1.361215968484941e-8,2.9568840667843486e-4,2.224225736534045e-5,-1.3610641296881544e-8,2.957800686939963e-4,2.2093977823393965e-5,-1.3587181550703598e-8,2.9595999348482825e-4,2.181678085271199e-5,-1.3543713834794471e-8,2.9627849161117025e-4,2.1471574018712877e-5,-1.3489060449153417e-8,2.9674319322068856e-4,2.1145294614123724e-5,-1.343609251827474e-8,2.9731425733706953e-4,2.09172161107864e-5,-1.3396774613550436e-8,2.9792187015270356e-4,2.082994835974585e-5,-1.3377886272534408e-8,2.984942122206886e-4,2.0880413673918396e-5,-1.3379586077781747e-8,2.989796522647844e-4,2.1030612573302552e-5,-1.3396809617098212e-8,2.993552928593664e-4,2.1226817991504233e-5,-1.3421929704689853e-8,2.9962420917402626e-4,2.141632957853267e-5,-1.3447160232838052e-8,2.998076048709863e-4,2.155742331817498e-5,-1.3466074608348756e-8,2.999366508951447e-4,2.162322261659597e-5,-1.3474303011588651e-8,3.0004605342871587e-4,2.160194083120627e-5,-1.3469704117491014e-8,3.001694758979349e-4,2.1495566477339442e-5,-1.3452259987949643e-8,3.003361714790454e-4,2.131801033581268e-5,-1.34238210598226e-8,3.00568250260884e-4,2.109291783629834e-5,-1.3387751649168571e-8,3.0087835205456256e-4,2.0850953582104578e-5,-1.3348491679679161e-8,3.012678716217725e-4,2.062624812724149e-5,-1.3311032550608233e-8,3.0172620046434173e-4,2.045193589878053e-5,-1.3280308792564854e-8,3.0223147737772435e-4,2.0355180263715515e-5,-1.3260534503027968e-8,3.027530905670879e-4,2.03523675046193e-5,-1.3254528922034592e-8,3.0325589739471393e-4,2.0445234386801097e-5,-1.326309141038214e-8,3.0370584098537583e-4,2.061873537337817e-5,-1.3284535301274032e-8,3.0407635475241393e-4,2.084132023298335e-5,-1.3314523112149486e-8,3.043548220950259e-4,2.106807932262644e-5,-1.334635951759101e-8,3.0454817712909907e-4,2.1247259597402573e-5,-1.337190847136496e-8,3.0468606841306306e-4,2.1330590886984806e-5,-1.338324729373875e-8,3.048190993710789e-4,2.1286814653441683e-5,-1.337492842426596e-8,3.0500947292813136e-4,2.1115405047104646e-5,-1.3346293728374482e-8,3.0531334240780847e-4,2.0854333144826318e-5,-1.330280661991811e-8,3.0575933228971686e-4,2.057446009779354e-5,-1.3255246543245369e-8,3.063336126043048e-4,2.035786012500672e-5,-1.3216390908366007e-8,3.0698195437051866e-4,2.0267933422058764e-5,-1.3196404367399528e-8,3.076297906607286e-4,2.0326989761099988e-5,-1.3199302777510673e-8,3.0820929098613465e-4,2.051301152374637e-5,-1.3222284594361782e-8,3.086790667643346e-4,2.0774250916837253e-5,-1.3257795354211066e-8,3.0902959140693113e-4,2.1050411845724763e-5,-1.3296685507824527e-8,3.0927719251130383e-4,2.1289582840270976e-5,-1.3330825505471842e-8,3.0945357058928e-4,2.145674944124067e-5,-1.33545105445674e-8,3.095961699201846e-4,2.153531284308726e-5,-1.3364818313685573e-8,3.0974146708267824e-4,2.152488868920895e-5,-1.3361368767381744e-8,3.0992097203242546e-4,2.1438017800151246e-5,-1.3345858365688848e-8,3.1015887202686857e-4,2.1297039816659653e-5,-1.3321563576426557e-8,3.1047036154725256e-4,2.1131275414374563e-5,-1.3292871575557973e-8,3.1086020309551777e-4,2.0974113615666323e-5,-1.3264820449894448e-8,0.00031132159469673937,2.0859458460963544e-5,-1.3242589706398116e-8,3.118358892299663e-4,2.08172018406579e-5,-1.3230876462418405e-8,3.123739556176808e-4,2.0867961619606607e-5,-1.3233145002595053e-8,3.1289980273878425e-4,2.1017999708571363e-5,-1.3250835029635484e-8,3.133765322075633e-4,2.1255710514705023e-5,-1.3282711917019378e-8,3.1377389441996034e-4,2.1551170659549085e-5,-1.332461455740315e-8,3.1407592571305155e-4,2.1859774047728385e-5,-1.3369828669154369e-8,3.1428671803730246e-4,2.212997996013805e-5,-1.3410177045357869e-8,3.14432506824964e-4,2.2314131680739853e-5,-1.3437721540724634e-8,3.1455876362506394e-4,2.2380463429616143e-5,-1.3446783871977407e-8,3.1472170043465105e-4,2.2323641852085563e-5,-1.3435813847370838e-8,3.1497476110345693e-4,2.217044112756572e-5,-1.3408494160108003e-8,3.153526234579617e-4,2.1976994096751363e-5,-1.337345682081832e-8,3.1585774444304715e-4,2.1815602165497123e-5,-1.3342262745022897e-8,3.1645594131746787e-4,2.1753230588716412e-5,-1.332596859353312e-8,3.170852855440563e-4,2.1829339986754936e-5,-1.3331486306519194e-8,3.1767609064744373e-4,2.204329336795916e-5,-1.335938578246327e-8,3.1817307131503856e-4,2.2357437282565592e-5,-1.3404182809004631e-8,3.185496252597622e-4,2.2713150253212193e-5,-1.3456770258106373e-8,3.188097318692035e-4,2.305068096859074e-5,-1.350756753269062e-8,3.1898017607109944e-4,2.3324049974074164e-5,-1.3548973772346303e-8,3.1909924742474843e-4,2.3507561072834535e-5,-1.3576520061523686e-8,3.192068961684871e-4,2.359541331330978e-5,-1.3588911123510958e-8,3.1933831976116504e-4,2.3597783076813762e-5,-1.358746123971623e-8,3.1952065880791903e-4,2.3536160980096142e-5,-1.3575362908229614e-8,3.19771579080949e-4,2.3439311888661372e-5,-1.3557025218592592e-8,3.200985885643759e-4,2.3340011786561243e-5,-1.3537543756519094e-8,3.2049846336595103e-4,2.3272031254568778e-5,-1.3522245412330314e-8,3.2095680118528186e-4,2.3266656684082567e-5,-1.3516194501257755e-8,3.214482960990994e-4,2.3348264536126095e-5,-1.3523546070473995e-8,3.219387035953197e-4,2.352905494166589e-5,-1.3546710031825095e-8,3.2238945173181284e-4,2.3803973484541637e-5,-1.3585453917150966e-8,3.2276517284783867e-4,2.414782235178386e-5,-1.3636274656717374e-8,3.2304300787259485e-4,2.4516917684648338e-5,-1.369247871891746e-8,3.2322093588827404e-4,2.4856694790520883e-5,-1.374527463790208e-8,3.2332167991338466e-4,2.5114409674883268e-5,-1.3785796286515207e-8,3.233897052011945e-4,2.525357146846435e-5,-1.3807516666649438e-8,3.2348120921461983e-4,2.5265406266578555e-5,-1.3808261001094046e-8,3.2364963922767976e-4,2.5173284625345988e-5,-1.3791120413398418e-8,3.2393091613960477e-4,2.5028248522414485e-5,-1.3763924450587002e-8,3.243327110819311e-4,2.489645279708152e-5,-1.3737355303383892e-8,3.2483114194985555e-4,2.4841661933600615e-5,-1.3722151158493351e-8,3.253764637315329e-4,2.4907661106982096e-5,-1.3726145974744325e-8,3.2590667505080653e-4,2.5106163518978407e-5,-1.3752074004335538e-8,3.263648743232834e-4,2.5414592771149465e-5,-1.3796943801410434e-8,3.267142644419916e-4,2.5784562274762126e-5,-1.3853232512079237e-8,3.2694560655390203e-4,2.6157379978950974e-5,-1.3911368702242648e-8,3.2707552207375036e-4,2.64802029079398e-5,-1.3962446344578679e-8,3.2713809920406574e-4,2.6717260951139974e-5,-1.4000191368277358e-8,3.2717430412455535e-4,2.685395991046812e-5,-1.4021757723105099e-8,3.272230250199076e-4,2.6895095773412356e-5,-1.4027518182301305e-8,3.273154328546555e-4,2.6859988741622723e-5,-1.4020303863838187e-8,3.27472427946398e-4,2.6777052624059808e-5,-1.4004517409235265e-8,3.2770404819257206e-4,2.667917357422416e-5,-1.3985374637999391e-8,3.2800968800751206e-4,2.6600135622202087e-5,-1.396833964272351e-8,3.283784197698704e-4,2.65715822213231e-5,-1.3958675851617953e-8,3.2878934377281676e-4,2.661975357857392e-5,-1.3960963251046796e-8,3.2921252136175277e-4,2.6761429111553565e-5,-1.397844020247438e-8,3.2961152402647006e-4,2.699907821559547e-5,-1.4012129808211943e-8,3.29948753915105e-4,2.7316263206531952e-5,-1.4059921868231094e-8,3.3019401009220286e-4,2.7675690266479282e-5,-1.4116060189696021e-8,3.303348983515174e-4,2.8023052525526852e-5,-1.417164175112956e-8,3.303851664433875e-4,2.8298564869411255e-5,-1.4216501609523993e-8,3.303858174704456e-4,2.845434313568276e-5,-1.4242167403395092e-8,3.303959416014983e-4,2.847131185450436e-5,-1.424477933710207e-8,3.304753311960585e-4,2.8367701265917583e-5,-1.4226626167552076e-8,3.3066574499633107e-4,2.8194592527739406e-5,-1.4195561924860455e-8,3.3097847333721307e-4,2.8020371048836455e-5,-1.4162617817120332e-8,3.3139229136450047e-4,2.7910733393913838e-5,-1.4138840614943994e-8,3.318610576038761e-4,2.7911418740544573e-5,-1.4132437583694847e-8,3.32327158660616e-4,2.8038257552148033e-5,-1.4146944421067845e-8,3.3273630146328536e-4,2.8275956095937735e-5,-1.4180721826563061e-8,3.3304982043797914e-4,2.8584590280257757e-5,-1.4227750741366778e-8,3.332518772704476e-4,2.8911198090895583e-5,-1.4279413650778645e-8,3.3335044303321585e-4,2.9203016014443303e-5,-1.4326720121414798e-8,3.3337264600420897e-4,2.9418844303718548e-5,-1.4362340255230543e-8,3.333565716870711e-4,2.953593528593423e-5,-1.438192328577023e-8,3.333423100299153e-4,2.955156240787833e-5,-1.4384490907506754e-8,3.333646227280616e-4,2.9480245799448394e-5,-1.4372041376989542e-8,3.3344841055820307e-4,2.9348582447400512e-5,-1.434870041016347e-8,3.3360692534264394e-4,2.9189588504290738e-5,-1.4319770705147037e-8,3.338418939605668e-4,2.903780052882538e-5,-1.429092220642219e-8,3.341445478842576e-4,2.8925502238673784e-5,-1.4267598983776846e-8,3.3449686902692956e-4,2.8879716510260736e-5,-1.4254567192028621e-8,3.34872893630502e-4,2.8919305085978387e-5,-1.4255452413328958e-8,3.3524046998712566e-4,2.905162633610626e-5,-1.4272125495191893e-8,3.3556438983591447e-4,2.926868042533546e-5,-1.4303906971243346e-8,3.358120415655983e-4,2.9543700862908523e-5,-1.4346787820191492e-8,3.359620973953016e-4,2.9830621885824582e-5,-1.4393165436296007e-8,3.3601476557872876e-4,3.0069847654572008e-5,-1.4432765793470925e-8,3.3599911919222826e-4,3.020259394749606e-5,-1.4455159337401374e-8,3.3597110300592314e-4,3.019141034190686e-5,-1.4453385307179457e-8,3.35998526488256e-4,3.00380349093956e-5,-1.4427081304578546e-8,3.3613729850181856e-4,2.9787423935761663e-5,-1.4383225010504009e-8,3.3641053011372276e-4,2.9513350056419022e-5,-1.4333808242876725e-8,3.368014006431015e-4,2.9292449987817804e-5,-1.4291641185111276e-8,3.3726185452744576e-4,2.9179980574871958e-5,-1.4266408426820145e-8,3.377303740186198e-4,2.9197037823386694e-5,-1.4262469364142498e-8,3.3814986945613203e-4,2.9330730888683372e-5,-1.427863436126763e-8,3.3848010158714516e-4,2.9543115154846164e-5,-1.4309336642064932e-8,3.38703273259897e-4,2.9783603206552747e-5,-1.4346471770152776e-8,3.388238715787891e-4,3.0001002317025725e-5,-1.4381352417660723e-8,3.388645512106792e-4,3.015313826145052e-5,-1.4406430035573901e-8,3.388596992978482e-4,3.0213214891368453e-5,-1.441656210821404e-8,3.388480896868653e-4,3.0172579589435465e-5,-1.4409671063513486e-8,3.3886595201610624e-4,3.0040010984943417e-5,-1.4386745775937594e-8,3.389415616773652e-4,2.983826465857231e-5,-1.435129353309962e-8,3.3909197448769624e-4,2.9599024245251944e-5,-1.4308467177209232e-8,3.393219732788287e-4,2.935743690567301e-5,-1.4264115645959442e-8,3.396247872186201e-4,2.9147198599977515e-5,-1.4223960274082391e-8,3.3998384944594585e-4,2.8996680396776103e-5,-1.419298232822601e-8,3.4037497978542483e-4,2.8925994092867653e-5,-1.4174970094013113e-8,3.4076876816749476e-4,2.8944576739562157e-5,-1.4172101451461987e-8,3.4113333363185183e-4,2.9048903134653624e-5,-1.4184452613283302e-8,3.4143806830900614e-4,2.9220259014859665e-5,-1.4209426481068721e-8,3.416592313159679e-4,2.942335957385573e-5,-1.4241300071719586e-8,3.4178768959361645e-4,2.9607879560626548e-5,-1.4271351102299056e-8,3.418373350901813e-4,2.971582378240197e-5,-1.4289150939638257e-8,3.4184996084014505e-4,2.9696727082961728e-5,-1.4285356690807156e-8,3.418902633601011e-4,2.952827110856552e-5,-1.425546855762454e-8,3.420270707706498e-4,2.9232745927517535e-5,-1.4202771104298555e-8,3.4230607491550166e-4,2.8876464783064984e-5,-1.4138250014917669e-8,3.4272891522547444e-4,2.8547270391760742e-5,-1.4076783978948293e-8,3.432521860159393e-4,2.8320914566404532e-5,-1.4031512125887654e-8,3.4380643577638096e-4,2.8235399587572567e-5,-1.4009518407800017e-8,3.4432227839255926e-4,2.8284922903914585e-5,-1.4010681330376893e-8,3.4474989405392577e-4,2.8430706232186193e-5,-1.4029244458375631e-8,3.450667007921132e-4,2.8618389049455682e-5,-1.405649452639386e-8,3.4527564357985356e-4,2.879355388007985e-5,-1.4083250375345564e-8,3.453987654829163e-4,2.8912049121438285e-5,-1.4101646097180218e-8,3.45469585268103e-4,2.894525815503267e-5,-1.4106194425210915e-8,3.4552604642457406e-4,2.8881730901118583e-5,-1.4094281874326899e-8,3.4560455047242703e-4,2.8726431535401165e-5,-1.4066215283106948e-8,3.457351529958053e-4,2.84982490045257e-5,-1.4024875511406945e-8,3.459380666037131e-4,2.8226171437823553e-5,-1.397505116091795e-8,3.462216637718113e-4,2.794459723979762e-5,-1.3922581182171141e-8,3.4658209986642525e-4,2.7688322235778394e-5,-1.3873458405560078e-8,3.4700449561030034e-4,2.748781270498401e-5,-1.3833031101689292e-8,3.474653304988083e-4,2.7365322208472776e-5,-1.3805386540778746e-8,3.479355692431911e-4,2.7332084280176915e-5,-1.3792904236856692e-8,3.483841987506852e-4,2.738651159118678e-5,-1.3795909548384521e-8,3.48782076015223e-4,2.7513276120753096e-5,-1.3812375954175199e-8,3.4910623716508923e-4,2.768327317176719e-5,-1.3837706596348546e-8,3.493450066374296e-4,2.785497909947437e-5,-1.3864767635512509e-8,3.4950380428156456e-4,2.7978582520697178e-5,-1.388452258098352e-8,3.496101796449104e-4,2.800470747307293e-5,-1.3887648902006153e-8,3.4971470295323565e-4,2.7898579782032046e-5,-1.3867255990212172e-8,3.498829672228969e-4,2.7657103890016168e-5,-1.3822133605209417e-8,3.5017591926531956e-4,2.7320571946380355e-5,-1.375894735333673e-8,3.5062370726759935e-4,2.6967510508779796e-5,-1.3691352108885298e-8,3.512076836751679e-4,2.668829415482261e-5,-1.3635359280006073e-8,3.518645594543916e-4,2.6549168451208284e-5,-1.3603044848274974e-8,3.525120860381075e-4,2.6567976763254272e-5,-1.359825241655584e-8,3.530801471377777e-4,2.671440633051558e-5,-1.3616465703002289e-8,3.5353016455276417e-4,2.692942938290615e-5,-1.3647971513994665e-8,3.538577002956241e-4,2.7148881753446637e-5,-1.3681795510084634e-8,3.540840771794443e-4,2.7320151877578618e-5,-1.3708567939664234e-8,3.542449634789241e-4,2.740961864282937e-5,-1.372191839944505e-8,3.543805993034693e-4,2.7403434203548572e-5,-1.3718799059739425e-8,3.545289983413223e-4,2.730498627401825e-5,-1.3699233288566783e-8,3.547216624954893e-4,2.7131303055044464e-5,-1.366581028187246e-8,3.5498087228620824e-4,2.690928730173587e-5,-1.3623050830270064e-8,3.5531797095255416e-4,2.6671814970846222e-5,-1.3576675347345746e-8,3.557325408326314e-4,2.6453572621222732e-5,-1.3532810617513158e-8,3.562126332903402e-4,2.628664184351773e-5,-1.3497191162436568e-8,3.5673629776197384e-4,2.619610347960688e-5,-1.3474416118620455e-8,3.5727449108908464e-4,2.6196233744873596e-5,-1.3467331827186608e-8,3.577951171362706e-4,2.628789151186731e-5,-1.3476583429700484e-8,3.582677504977914e-4,2.6457485603445368e-5,-1.3500355686777276e-8,3.5866856083210973e-4,2.667773719840518e-5,-1.3534335889835297e-8,3.58984983565573e-4,2.691031135287597e-5,-1.3571967951946276e-8,3.592197788921785e-4,2.7110381522096033e-5,-1.3605104433755066e-8,3.5939395836391525e-4,2.723347733466807e-5,-1.3625211838772243e-8,3.5954731475294516e-4,2.7245005640118063e-5,-1.3625233122092842e-8,3.5973439287282456e-4,2.7131819567977223e-5,-1.3601941703224978e-8,3.600135954575884e-4,2.6912915110491107e-5,-1.355814290805302e-8,3.60429073295564e-4,2.664325075241653e-5,-1.3503526756102676e-8,3.60990418920039e-4,2.64034696792908e-5,-1.3452835801158697e-8,3.6166146352094975e-4,2.6273775898966717e-5,-1.3421074493356377e-8,3.623688032765512e-4,2.630225709809558e-5,-1.3417659611230746e-8,3.6302889191182174e-4,2.6485921915614753e-5,-1.3442821004948017e-8,3.635787000997205e-4,2.6775836053406942e-5,-1.3488337737398986e-8,3.6399313254539714e-4,2.7100845265447172e-5,-1.3541675775041822e-8,3.6428387361378935e-4,2.739386253867796e-5,-1.3590675845310196e-8,3.644865074909421e-4,2.7608376878739416e-5,-1.3626575377250361e-8,3.6464576613601913e-4,2.7723005292816395e-5,-1.364495582745406e-8,3.6480461555127395e-4,2.77383404850266e-5,-1.3645341642181487e-8,3.6499818740537e-4,2.76710053685678e-5,-1.3630271402829668e-8,3.6525122259954397e-4,2.754788664050142e-5,-1.360432815008887e-8,3.6557730310316335e-4,2.7401492817728636e-5,-1.357329062063108e-8,3.659787553882458e-4,2.72661665993695e-5,-1.3543394730429565e-8,3.6644689750384423e-4,2.7174555417879994e-5,-1.352065178127914e-8,3.669628241382334e-4,2.7153908983776746e-5,-1.3510179030065285e-8,3.674992016602788e-4,2.7222166045638933e-5,-1.3515526234079713e-8,3.68023539090487e-4,2.73843521332642e-5,-1.3538046023492725e-8,3.685030041719975e-4,2.7630228716345682e-5,-1.357642629855776e-8,3.689102801263324e-4,2.793415315314418e-5,-1.362653567100988e-8,3.692294796808659e-4,2.825781083626839e-5,-1.368173224189925e-8,3.694608523244996e-4,2.8555916027981706e-5,-1.3733727733496358e-8,3.6962307871807993e-4,2.8784249160797294e-5,-1.3773978177336275e-8,3.697522993353289e-4,2.8908903102290343e-5,-1.3795451641862713e-8,3.6989731803456434e-4,2.8915385836666257e-5,-1.3794521381371401e-8,3.701106527110447e-4,2.8815745762559872e-5,-1.3772576532502819e-8,3.704358354453675e-4,2.8651045702873957e-5,-1.3736749819577554e-8,3.7089307273516974e-4,2.8486040803253674e-5,-1.369908367506479e-8,3.714679608227572e-4,2.8394043726751596e-5,-1.3673710854101186e-8,3.7210991213757036e-4,2.843405066778115e-5,-1.3672440108961631e-8,3.7274498490128303e-4,2.8628554579815174e-5,-1.3700371291720451e-8,3.733002400374539e-4,2.8953884905579092e-5,-1.375383654447321e-8,3.737283127161456e-4,2.934966667201483e-5,-1.3821992572909582e-8,3.74019840199307e-4,2.9742318752869464e-5,-1.3891158565206442e-8,3.741996113300426e-4,3.0069483883304552e-5,-1.3949424588473654e-8,3.743121974552402e-4,3.0294519375517385e-5,-1.3989456769194334e-8,3.7440629029591007e-4,3.0408720943630665e-5,-1.4009040575435913e-8,3.745237271452724e-4,3.042555417326966e-5,-1.4010137999684472e-8,3.7469432233555345e-4,3.0372415163084517e-5,-1.399745265579277e-8,3.7493481407911624e-4,3.0283392801809747e-5,-1.3977121315336288e-8,3.7524974009757705e-4,3.0194074963467853e-5,-1.3955729687359219e-8,3.7563276072333213e-4,3.013796030115297e-5,-1.3939607838651707e-8,3.7606789752317216e-4,3.014358067755694e-5,-1.3934276197156442e-8,3.765308715945007e-4,3.0231593508346177e-5,-1.394391327502817e-8,3.769911447976581e-4,3.0411553226949515e-5,-1.3970762499094855e-8,3.774153866080384e-4,3.067874957136116e-5,-1.4014505540693484e-8,3.7777276900158004e-4,3.101223988098575e-5,-1.4071785355970582e-8,3.780416881621932e-4,3.137561973052833e-5,-1.4136185048005719e-8,3.782164562994042e-4,3.1721813892388676e-5,-1.4198962795870701e-8,3.7831168136817563e-4,3.2002044707192615e-5,-1.4250643304019193e-8,3.7836207867593326e-4,3.2177378338159576e-5,-1.4283213281041604e-8,3.784166470845473e-4,3.222972568760059e-5,-1.4292338201740607e-8,3.7852801727424653e-4,3.216882097511682e-5,-1.4278915068388991e-8,3.7873941235653586e-4,3.2032643792585974e-5,-1.4249424676350356e-8,3.7907250187723524e-4,3.1880386191779476e-5,-1.4214835935159804e-8,3.79519524138801e-4,3.1778859253417956e-5,-1.4188143257430748e-8,3.800425591675725e-4,3.1785057707013906e-5,-1.4180988668013144e-8,3.8058155833472476e-4,3.192941802742809e-5,-1.420023019579586e-8,3.810702007095623e-4,3.220552703223705e-5,-1.424564138430845e-8,3.814550608339061e-4,3.257118968284767e-5,-1.4309824655516338e-8,3.8171088610531375e-4,3.2961679962287354e-5,-1.4380610992098202e-8,3.818457030615165e-4,3.3310117296884816e-5,-1.444499449135639e-8,3.8189440825249304e-4,3.356630414228731e-5,-1.4492871054400158e-8,3.8190518456659355e-4,3.3706990005561714e-5,-1.4519156100786139e-8,3.8192545511999565e-4,3.3735939536645784e-5,-1.4523932873023375e-8,0.00038199221663132935,3.36770574780388e-5,-1.4511243699103591e-8,3.8212794959808886e-4,3.356532850735636e-5,-1.44874232515469e-8,3.8234068283503006e-4,3.3438964212912564e-5,-1.445961632653455e-8,3.826260695837975e-4,3.333397058547786e-5,-1.4434725361888601e-8,3.8296985541619517e-4,3.328078604508245e-5,-1.4418750654133305e-8,3.8335002714571484e-4,3.3302014460873146e-5,-1.441635218389012e-8,3.837387391287661e-4,3.341034772114456e-5,-1.4430449062814374e-8,3.841046361875188e-4,3.3606223967194986e-5,-1.4461732780659432e-8,3.844163948873668e-4,3.3875453388444264e-5,-1.4508108409027856e-8,3.846481026697538e-4,3.4187920503036706e-5,-1.4564283527851176e-8,3.8478626988731516e-4,3.449926174844078e-5,-1.4621926226168586e-8,3.8483677916458626e-4,3.475742957885683e-5,-1.4670832194101453e-8,3.8482854708888275e-4,3.491455839733871e-5,-1.4701226812136726e-8,3.8481043392111564e-4,3.4941584971485933e-5,-1.4706695752866484e-8,3.8484010168733006e-4,3.484013825587449e-5,-1.468664371357169e-8,3.8496755452253895e-4,3.464574228765504e-5,-1.4647105606473425e-8,3.852194666708856e-4,3.4419635873436564e-5,-1.4599384135326243e-8,3.8559051584685747e-4,3.4231768838361375e-5,-1.4556966089518085e-8,3.8604470174984556e-4,3.4141257634779535e-5,-1.4531832281699271e-8,3.8652549596401316e-4,3.4180796113487486e-5,-1.4531324827219252e-8,3.8697101818921484e-4,3.434917801281351e-5,-1.4556386882613265e-8,3.8732970092140794e-4,3.461318978913546e-5,-1.4601550234372074e-8,3.875723463890504e-4,3.491766325493246e-5,-1.4656605918405712e-8,3.8769763284319733e-4,3.5200524303996284e-5,-1.4709446876581307e-8,3.8772997811639925e-4,3.540841369879993e-5,-1.474921260370285e-8,3.877109937265693e-4,3.550840337825738e-5,-1.476877406003373e-8,3.8768778169230556e-4,3.5492866851361164e-5,-1.476588786722735e-8,3.877020190388187e-4,3.5377264492801586e-5,-1.4742916279944912e-8,3.8778272420060984e-4,3.519311331097323e-5,-1.4705540490345767e-8,3.8794354267678884e-4,3.497940485725285e-5,-1.4661111679795208e-8,3.88183621815305e-4,3.4775082366194856e-5,-1.4617171125102894e-8,3.8849040862005046e-4,3.4613774624727124e-5,-1.4580401934381552e-8,3.888429039948693e-4,3.452069902788002e-5,-1.4556015515333534e-8,3.8921458948142855e-4,3.45109299576898e-5,-1.4547412738969088e-8,3.8957597873680495e-4,3.4588150401447517e-5,-1.455591709815627e-8,3.8989728274007056e-4,3.474336635341969e-5,-1.4580440622513306e-8,3.9015195396758514e-4,3.495368121352255e-5,-1.4617090694513199e-8,3.9032177735499337e-4,3.5182101792084835e-5,-1.4658947568485471e-8,3.9040340540185385e-4,3.5380277120652675e-5,-1.4696467881042956e-8,3.904146306630224e-4,3.549631641986946e-5,-1.4719008759851094e-8,3.903967427080332e-4,3.548836893154207e-5,-1.4717615696219794e-8,3.9040860609677376e-4,3.534095270614115e-5,-1.468840935651692e-8,3.905107938530057e-4,3.507658782265891e-5,-1.4635025503981219e-8,3.9074435561294203e-4,3.4754301960084933e-5,-1.4568447883446436e-8,3.911142837911334e-4,3.445237060488615e-5,-1.4503769375063293e-8,3.915867065914306e-4,3.4242280516138355e-5,-1.4455241755727162e-8,3.9210098851033884e-4,3.416630020580259e-5,-1.4431921054112957e-8,3.9258978921974933e-4,3.42277415173893e-5,-1.4435583191215956e-8,3.92997891960016e-4,3.43949587943332e-5,-1.446115512515839e-8,3.9329397995157005e-4,3.4614214184008465e-5,-1.4498870429778417e-8,3.934741228294369e-4,3.482529654460197e-5,-1.4537116508416524e-8,3.935585439745504e-4,3.497539271070658e-5,-1.456516089516988e-8,3.935841244453831e-4,3.502882428209544e-5,-1.4575248316469991e-8,3.935950084123615e-4,3.497180118274077e-5,-1.4563798423281858e-8,3.9363335905265697e-4,3.4812268755863353e-5,-1.453161028551469e-8,3.9373196934599825e-4,3.457567997812712e-5,-1.4483168817569692e-8,3.9390985158140024e-4,3.4298244121273065e-5,-1.442534785326174e-8,3.941710735045695e-4,3.401951202215226e-5,-1.4365908871774454e-8,3.945062887672119e-4,3.377587091359689e-5,-1.431215883946541e-8,3.948959058166358e-4,3.3595868201667825e-5,-1.4269990715109863e-8,3.9531378332501087e-4,3.34975018387911e-5,-1.4243345355196083e-8,3.95730734118531e-4,3.348697905005418e-5,-1.4233969882786683e-8,3.9611767962868447e-4,3.3558268125866676e-5,-1.424129255710753e-8,3.964487102877791e-4,3.3693000306870486e-5,-1.4262290516375536e-8,3.9670457560232427e-4,3.386072530925677e-5,-1.429136009013897e-8,3.96877142245794e-4,3.402026478479182e-5,-1.4320404114221407e-8,3.96974675963087e-4,3.412377428846557e-5,-1.433955280018419e-8,3.970263033690597e-4,3.412534347773198e-5,-1.4338948576893425e-8,3.970821930901893e-4,3.3994646882125137E-05,-1.4311677516442803e-8,3.972051269460485e-4,3.373258641401384e-5,-1.4257126814339408e-8,3.9745171697619185e-4,3.3380857036472385e-5,-1.4183048350455968e-8,3.9784887548471545e-4,3.3015677815108926e-5,-1.4104376616313594e-8,3.983784208606685e-4,3.272315572911758e-5,-1.4038376360391643e-8,3.989810077392129e-4,3.2567028222608205e-5,-1.3998275239165507e-8,3.995784033932848e-4,3.256650678484111e-5,-1.3988808427858587e-8,4.001011450991133e-4,3.269479846358877e-5,-1.4005705396679457e-8,4.0050766556828905e-4,3.2894820685850835e-5,-1.4038489709830286e-8,4.0078956955466436e-4,3.310064022337845e-5,-1.407446327281956e-8,4.0096621978551547e-4,3.325505206119748e-5,-1.4102093289319672e-8,4.010745404447036e-4,3.3319672146671645e-5,-1.4113112716440347e-8,4.0115849496576356e-4,3.3278246778498246e-5,-1.4103416685224999e-8,4.0126036221118603e-4,3.3135359116825646e-5,-1.4073080729645138e-8,4.014143685471576e-4,3.291243375807629e-5,-1.4025773677232568e-8,4.0164265136440953e-4,3.264223661405534e-5,-1.3967743564302586e-8,4.019534608500238e-4,3.236272447032621e-5,-1.390655605379301e-8,4.023414451750576e-4,3.211102729665613e-5,-1.3849797898036786e-8,4.0278971307670453e-4,3.191824538468825e-5,-1.3803953237611915e-8,4.032731686233601e-4,3.18056089510052e-5,-1.3773602883065726e-8,4.037624347508987e-4,3.178228329803735e-5,-1.376099772735688e-8,4.0422776760387706e-4,3.184466222614487e-5,-1.3765925422093045e-8,4.0464271102872616e-4,3.1976751617668895e-5,-1.3785736315062855e-8,4.049875078121135e-4,3.2151373504918296e-5,-1.3815449042655647e-8,4.0525242347578963e-4,3.2332175019236376e-5,-1.3847964962952615e-8,4.0544119121250843e-4,3.2476862419152035e-5,-1.3874561986942388e-8,4.05574305140568e-4,3.254270756363941e-5,-1.3885979640020726e-8,4.0569066632959827e-4,3.249544686392352e-5,-1.3874369128060043e-8,4.0584474135106326e-4,3.232141920233108e-5,-1.3836033795223245e-8,4.060959597117366e-4,3.203981711665866e-5,-1.3774198864523915e-8,4.0648944202457856e-4,3.170776499799547e-5,-1.3700205970255192e-8,4.070339380710125e-4,3.14094387988266e-5,-1.3631320248747382e-8,4.076901544592694e-4,3.122757281338524e-5,-1.3584880382566213e-8,4.083808447150242e-4,3.1209812559531696e-5,-1.357136683146307e-8,4.090200221087287e-4,3.1349995147856346e-5,-1.3590446140588086e-8,4.0954443123187515e-4,3.1595103343674464e-5,-1.3632168430282483e-8,4.099303837683666e-4,3.187049880203468e-5,-1.3681872256090355e-8,4.101918277261662e-4,3.210671035463291e-5,-1.3725481876963942e-8,4.103671176469619e-4,3.225608889167277e-5,-1.3752883934071199e-8,4.1050398879131114e-4,3.2297665182539014e-5,-1.3759059927073484e-8,4.106480562172606e-4,3.223425978678608e-5,-1.3743742869076615e-8,4.108359107796797e-4,3.208637535174844e-5,-1.371041895829871e-8,4.1109180515318115e-4,3.188566709771694e-5,-1.366514943234374e-8,4.1142658815250326e-4,3.166901056491771e-5,-1.3615380156688916e-8,4.118380537063425e-4,3.147326545835003e-5,-1.3568790580043022e-8,4.123123872285276e-4,3.1330693322293186e-5,-1.3532246924646132e-8,4.1282660990819755e-4,3.12650855735152e-5,-1.3510937230181173e-8,4.1335194038861985e-4,3.12888232285669e-5,-1.3507759179538763e-8,0.00041385782791872523,3.14012402587035e-5,-1.3523006860697865e-8,4.143162097043059e-4,3.158851800056764e-5,-1.3554343762603742e-8,4.147055736697891e-4,3.182504325345812e-5,-1.3596998591413753e-8,4.150145461827425e-4,3.207610038134238e-5,-1.3644157727172217e-8,4.1524476893370035e-4,3.230183268389632e-5,-1.368759809958973e-8,4.1541284364256985e-4,3.2462481911037404e-5,-1.3718658948585584e-8,4.1555091775811174e-4,3.252513293742975e-5,-1.3729683805619488e-8,4.1570478512098117e-4,3.247211793603926e-5,-1.3715984522395111e-8,4.159276624200048e-4,3.2310116826504505e-5,-1.3678055124053507e-8,4.1626805702971783e-4,3.2076790804311726e-5,-1.3623245822332607e-8,4.167524617387805e-4,3.1839355536118996e-5,-1.3565610929515464e-8,4.173687071937988e-4,3.1679433606488e-5,-1.352271054257597e-8,4.180608672886187e-4,3.166480571656874e-5,-1.3509541984888306e-8,4.187443288713044e-4,3.182021371545731e-5,-1.353221487846181e-8,4.193369682737023e-4,3.211533218369021e-5,-1.3585218588590153e-8,4.1978931227977685e-4,3.247863499575709e-5,-1.3654153761093438e-8,4.2009704087509506e-4,3.282777137229304e-5,-1.3721983897773367e-8,4.202929904690921e-4,3.309778073197644e-5,-1.377490014751364e-8,4.2042859167406205e-4,3.325494568929429e-5,-1.3805267082687721e-8,4.2055631802961126e-4,3.329635406528146e-5,-1.3811685967344244e-8,4.207187075410816e-4,3.324181570289828e-5,-1.3797529601781316e-8,4.209438553744661e-4,3.312430221578908e-5,-1.376914696052265e-8,4.212450114021482e-4,3.29820290127452e-5,-1.3734307231289387e-8,4.2162200611876914e-4,3.285276439909095e-5,-1.3700985550654417e-8,4.220632466273461e-4,3.276974175556986e-5,-1.3676406563612262e-8,4.225479806825113e-4,3.275847057478871e-5,-1.3666274054639809e-8,4.2304896717371235e-4,3.283409778896946e-5,-1.367416405793029e-8,4.23535782825238e-4,3.299935006506142e-5,-1.3701088573561653e-8,4.2397886988324306e-4,3.3243478824476034e-5,-1.374527589841765e-8,4.2435406637511227e-4,3.354279531934157e-5,-1.3802236076034794e-8,4.246470102477941e-4,3.3863147891369016e-5,-1.3865160722445153e-8,4.248566904943515e-4,3.4164346787876715e-5,-1.392568757735148e-8,4.249974307882397e-4,3.4406249583597606e-5,-1.3975043403899051e-8,4.2509869023787635e-4,3.455590008719841e-5,-1.4005525482322397e-8,4.252022353167417e-4,3.4594902384809774e-5,-1.4012200930378964e-8,4.2535628227180944e-4,3.452606191561703e-5,-1.3994602436161527e-8,4.2560627053101944e-4,3.437774195887487e-5,-1.3957997791203556e-8,4.259826655671023e-4,3.42033544248866e-5,-1.3913552496987838e-8,4.2648812302165757e-4,3.407288572264099e-5,-1.3876612700332113e-8,4.2708920644435e-4,3.405490071168592e-5,-1.3862734860228985e-8,4.2771960286236156e-4,3.419246160656786e-5,-1.388224482934693e-8,4.2829858276369735e-4,3.4483331127508464e-5,-1.39356667397566e-8,4.287591800201008e-4,3.487711132752329e-5,-1.401286696741407e-8,4.2907189221625086e-4,3.529375343362766e-5,-1.4096933853643936e-8,4.2925111181198606e-4,3.5653822332007866e-5,-1.4170691079982273e-8,4.293431436633978e-4,3.590386737424457e-5,-1.422220020649449e-8,4.294057069943159e-4,3.602629900089709e-5,-1.4246968028465437e-8,4.2949028887441184e-4,3.603476243390713e-5,-1.4247107509361492e-8,4.296326637699373e-4,3.596258975350247e-5,-1.422906114426545e-8,4.298507830160587e-4,3.585122067538412e-5,-1.4201284229219959e-8,4.30146821619837e-4,3.574178595192985e-5,-1.4172502101488057e-8,4.305105528179752e-4,3.567004669500458e-5,-1.4150577469349977e-8,4.309225690144668e-4,3.566353502127585e-5,-1.4141794633184363e-8,4.3135708115020477e-4,3.5739694174433475e-5,-1.4150368611616155e-8,4.3178466029482305e-4,3.5904363120716595e-5,-1.4178070671429282e-8,4.321754230960808e-4,3.615055457113382e-5,-1.4223940930016515e-8,4.3250300470527235e-4,3.645801938170371e-5,-1.4284152898436964e-8,4.327492141671965e-4,3.6794455062480333e-5,-1.4352180111878265e-8,4.329086361301494e-4,3.711914037777242e-5,-1.441944170755436e-8,4.329919362284678e-4,3.738922622588004e-5,-1.4476525706585657e-8,4.3302648954548616e-4,3.756805202918171e-5,-1.4514923144055002e-8,4.330533235187689e-4,3.763391300210855e-5,-1.4528989528198715e-8,4.331202330514279e-4,3.7587099620632155e-5,-1.4517675625248134e-8,4.33271953934643e-4,3.7453099149815584e-5,-1.4485529520827118e-8,4.335391170749413e-4,3.728040086638992e-5,-1.4442540122095772e-8,4.3392835970523195e-4,3.713209968463934e-5,-1.4402528788363379e-8,4.344165500758634e-4,3.707165347756771e-5,-1.4380064897967802e-8,4.3495230062594813e-4,3.714511840207765e-5,-1.438637838413005e-8,4.3546692736868404e-4,3.7364868229131036e-5,-1.4425430174624792e-8,4.3589372030768185e-4,3.7701867510223756e-5,-1.4491842764582526e-8,4.361893091351183e-4,3.8092289800798756e-5,-1.4572120153155367e-8,4.3634757852403625e-4,3.8457985039809324e-5,-1.464910812938325e-8,4.363991796352178e-4,3.8732147174392066e-5,-1.4707727290935779e-8,4.3639763452364114e-4,3.887826414780291e-5,-1.4739264857224268e-8,4.364001722647106e-4,3.889525252824335e-5,-1.474263969373984e-8,4.364523016838084e-4,3.881021476354108e-5,-1.4722977299200551e-8,4.365804771433114e-4,3.866556340462599e-5,-1.468896039574687e-8,4.367919722871205e-4,3.8506926413442914e-5,-1.4650297668231218e-8,4.370786669043261e-4,3.837491837753309e-5,-1.4615939698352876e-8,4.3742177567648004e-4,3.8300841711920557e-5,-1.4593067497875068e-8,4.377959505900983e-4,3.830495380523125e-5,-1.4586611379527836e-8,4.3817246361271725e-4,3.839583492266989e-5,-1.4599028669935255e-8,4.385219262133009e-4,3.856996202628723e-5,-1.4630154871815322e-8,4.388172474094774e-4,3.881133934777927e-5,-1.4677068982739351e-8,4.3903736753377824e-4,3.909172438758446e-5,-1.4734059655137036e-8,4.39171785700476e-4,3.9372492362129876e-5,-1.4792916472356046e-8,4.392250878709724e-4,3.9609287825052854e-5,-1.48438349018792e-8,4.392197841418492e-4,3.9760010138741e-5,-1.4877110525214467e-8,4.391952872335693e-4,3.9795215836805176e-5,-1.488546114998337e-8,4.392015028478242e-4,3.9708130526000964e-5,-1.4866368508482124e-8,4.392874740657098e-4,3.9520303226885334e-5,-1.4823547388579492e-8,4.3948798661524503e-4,3.927964654825381e-5,-1.4766788554084115e-8,4.3981252877586845e-4,3.905019462021475e-5,-1.4709963203151688e-8,4.4024057367895406e-4,3.889606668889953e-5,-1.4667637174980205e-8,4.407251019923313e-4,3.886426054421898e-5,-1.465121537204819e-8,4.4120371732378895e-4,3.897130268161372e-5,-1.4665702138134793e-8,4.4161456567829924e-4,3.919776198075389e-5,-1.4708062006301217e-8,4.41912806692747e-4,3.949272215218089e-5,-1.4767828043097781e-8,4.4208268554817335e-4,3.978761101197567e-5,-1.4829982902345276e-8,4.421409699762284e-4,4.001548958358082e-5,-1.4879284623686034e-8,4.421303237867017e-4,4.012928886396741e-5,-1.4904509091663218e-8,4.4210531633417574e-4,4.011254468451751e-5,-1.4901064005645254e-8,4.421168168722615e-4,3.997960143327207e-5,-1.487124044964496e-8,4.422004451507053e-4,3.9767094807069e-5,-1.4822485598136494e-8,4.4237183113721076e-4,3.9521669753076244e-5,-1.4764783122292205e-8,4.426279491665109e-4,3.928881642907068e-5,-1.4708204056709783e-8,4.429518454747351e-4,3.91054375635812e-5,-1.4661205248835662e-8,4.433181067887932e-4,3.899632725145631e-5,-1.4629752573422735e-8,4.436975223791884e-4,3.8973357147412855e-5,-1.4617048273316101e-8,4.4406056405082626e-4,3.903590468819179e-5,-1.4623561502714967e-8,4.4438008650014344e-4,3.91715076460056e-5,-1.4647122090138582e-8,4.446339768961001e-4,3.935646602380224e-5,-1.4682981479505956e-8,4.448083963396037e-4,3.955684978592832e-5,-1.4723927049201846e-8,4.4490177030358924e-4,3.973098128986008e-5,-1.4760714274992125e-8,4.4492878725670593e-4,3.9834759260079374e-5,-1.4783179135015065e-8,4.4492247041699046e-4,3.983068781073579e-5,-1.4782276848273152e-8,4.4493150521741963e-4,3.9699639584905065e-5,-1.4752832416571488e-8,4.4501065268293756e-4,3.945150399211428e-5,-1.4696101798232349e-8,4.452051621230111e-4,3.912878232058367e-5,-1.4620773630123115e-8,4.4553450758414917e-4,3.879851843897706e-5,-1.4541367888067542e-8,4.459831270119789e-4,3.853341144760553e-5,-1.4474199279655483e-8,4.4650334228181737e-4,3.83892962100095e-5,-1.4432428557074345e-8,4.470294963479162e-4,3.838843851633301e-5,-1.4422210720894016e-8,4.474971022466872e-4,3.8514644123259556e-5,-1.4441268698217063e-8,4.4785977033990704e-4,3.872025545847296e-5,-1.4480033042680275e-8,4.480991934681107e-4,3.8940889744311725e-5,-1.4524608121518424e-8,4.48226794522255e-4,3.911257774162124e-5,-1.4560498684405491e-8,4.482780588321118e-4,3.918669829382871e-5,-1.457607889926847e-8,4.4830195410043057e-4,3.913954024565277e-5,-1.4565007306195704e-8,4.483485381147606e-4,3.8974954360315984e-5,-1.4527125710483059e-8,4.484579671969714e-4,3.872030337677846e-5,-1.4467791545713628e-8,4.4865345969394e-4,3.841765061935548e-5,-1.4396030200337683e-8,4.489392960449042e-4,3.811327623924533e-5,-1.4322193270630174e-8,4.4930320331229367e-4,3.7848511485026534e-5,-1.4255821744391228e-8,4.497213338957374e-4,3.765366154702086e-5,-1.4204163537672068e-8,4.5016388935185643e-4,3.7545304813913294e-5,-1.4171463776027224e-8,4.5060002058532647e-4,3.752619081927828e-5,-1.415888242467012e-8,4.5100150770761724e-4,3.758652962581753e-5,-1.4164756572674547e-8,4.5134546376081325e-4,3.7705677615177184e-5,-1.4184941935731645e-8,4.5161665818218725e-4,3.785383751499737e-5,-1.4213111016563784e-8,4.518100423627256e-4,3.7994051971822126e-5,-1.4241074681839239e-8,4.5193371514478737e-4,3.8085369823532785e-5,-1.4259379743515523e-8,4.5201173652522936e-4,3.808847352382779e-5,-1.4258553184670598e-8,4.5208492668352473e-4,3.797471001575803e-5,-1.4231251193107125e-8,4.522066971808626e-4,3.77376787180318e-5,-1.4175095272905575e-8,4.5243135935849304e-4,3.7403252871591634e-5,-1.4095172040726785e-8,4.5279582657719995e-4,3.7030874343293475e-5,-1.4004497095542028e-8,4.5330172975054594e-4,3.6700112219684904e-5,-1.3921072538958264e-8,4.539088056613535e-4,3.648437266876659e-5,-1.3861984223206524e-8,4.545461169138244e-4,3.642372882885231e-5,-1.3837216692123784e-8,4.5513658700048617e-4,3.651138922317251e-5,-1.3846408129259836e-8,4.556220323441288e-4,3.66997016694241e-5,-1.3879890283223254e-8,4.559775185965056e-4,3.691969978430192e-5,-1.3922769386842146e-8,4.562122242740801e-4,3.710309854736905e-5,-1.3959682858114987e-8,4.5636084388552884e-4,3.7198647914217366e-5,-1.397848887776796e-8,4.564712492187718e-4,3.7180239677984124e-5,-1.3972296643507357e-8,4.5659257815677795e-4,3.7047788247771294e-5,-1.393998633269255e-8,4.5676585962010804e-4,3.682314037864092e-5,-1.3885605024489333e-8,4.57017899354544e-4,3.65430985371316e-5,-1.3816998895031419e-8,4.573585513254664e-4,3.625115082842816e-5,-1.3743986972765052e-8,4.5778120823241134e-4,3.5989329685002914e-5,-1.367641965358165e-8,4.582659310878471e-4,3.579152347703973e-5,-1.3622494409608255e-8,4.587842300484169e-4,3.567911872805785e-5,-1.3587614246913989e-8,4.5930436312677383e-4,3.565921697959824e-5,-1.357389940117045e-8,4.5979615512869434e-4,3.572510183973148e-5,-1.358027877351196e-8,4.6023475988321376e-4,3.585820060660067e-5,-1.360294284347647e-8,4.6060335832733674e-4,3.6030722091809204e-5,-1.3635911870639802e-8,4.60895139188042e-4,3.6208528902177354e-5,-1.3671590860836431e-8,4.6111494690815154e-4,3.635429757026502e-5,-1.3701352069797334e-8,4.612807925415506e-4,3.6431488839050474e-5,-1.3716346193401218e-8,4.614247987373746e-4,3.6410027954227026e-5,-1.3708835750741679e-8,4.6159205914533125e-4,3.62743262879114e-5,-1.3674231350069227e-8,4.6183498055835207e-4,3.6032773953528615e-5,-1.3613573886357206e-8,4.6220096368370197e-4,3.572504366766511e-5,-1.3535497406452498e-8,4.627142460022724e-4,3.5420516607509466e-5,-1.345601089443765e-8,4.633589570077975e-4,3.520158587923049e-5,-1.339462640412944e-8,4.640754895656249e-4,3.5133781640715624e-5,-1.336732887285183e-8,4.6477797333421513e-4,3.523710146370312e-5,-1.337976511947418e-8,4.653863109243403e-4,3.5476761963375476e-5,-1.3424888861955243e-8,4.658546211216421e-4,3.577942568893229e-5,-1.3486488367131025e-8,4.661813358342299e-4,3.6063351831523195e-5,-1.3545965988268696e-8,4.664004611033069e-4,3.626473218857858e-5,-1.3588320959816941e-8,4.665639958352068e-4,3.6350407228647365e-5,-1.360513303776225e-8,4.6672541684679767e-4,3.631790496298228e-5,-1.3594788762173888e-8,4.6692865416770923e-4,3.618845377576418e-5,-1.3561187150119446e-8,4.672026368560225e-4,3.5997925297469526e-5,-1.3511940939945172e-8,4.6755982834898976e-4,3.5788386314177225e-5,-1.3456575605413407e-8,4.67997179408685e-4,3.5601078032541834e-5,-1.3404875559273569e-8,4.684985923176623e-4,3.5470812389852354e-5,-1.3365423942936016e-8,4.6903849108559164e-4,3.542180047068913e-5,-1.3344439413006975e-8,4.695861596821659e-4,3.546508508953634e-5,-1.3345040436527447e-8,4.7011041192164126e-4,3.559772500847251e-5,-1.3367006714160734e-8,4.705840542170844e-4,3.580375537789526e-5,-1.3407016011675667e-8,4.7098759753275935e-4,3.6056678871433476e-5,-1.3459233547938723e-8,4.7131190949890184e-4,3.632298007574168e-5,-1.3516078049011552e-8,4.71559790690804e-4,3.6566204934469644e-5,-1.3569053058169974e-8,4.717465735754899e-4,3.6751383530202755E-05,-1.3609647477316639e-8,4.718998124130554e-4,3.684981905601746e-5,-1.3630405599256602e-8,4.7205781579265745e-4,3.684452081682734e-5,-1.3626310087204059e-8,4.7226605766033966e-4,3.673637051258554e-5,-1.3596506069195115e-8,4.725699924678846e-4,3.654994787786842e-5,-1.3546025765795578e-8,4.730033180778431e-4,3.6336041112372295e-5,-1.3486667699711668e-8,4.7357300089362716e-4,3.616604739808837e-5,-1.3435763281303896e-8,4.74246972161772e-4,3.611397064008277e-5,-1.3411769997669891e-8,4.7495468950762464e-4,3.6228226616847743e-5,-1.342728801093758e-8,4.756075265498231e-4,3.6506596772157785e-5,-1.3482806498111208e-8,4.761324789643435e-4,3.68921215314555e-5,-1.3565521966204982e-8,4.76500027685036e-4,3.729587464380291e-5,-1.3654665288008376e-8,4.7672987690625123e-4,3.763293743393644e-5,-1.3730017018062513e-8,4.768749775046739e-4,3.7850136442992455e-5,-1.3778472109271951e-8,4.7699763159739244e-4,3.7934345672070496e-5,-1.379606231317544e-8,4.7715085690734735e-4,3.790502947009683e-5,-1.3786386207802384e-8,4.7736947329048336e-4,3.780076670277705e-5,-1.3757715344810296e-8,4.7766881383462853e-4,3.7666865402247315e-5,-1.3720316041747617e-8,4.780473761409701e-4,3.7546640888132714e-5,-1.368447808114495e-8,4.7849069816615584e-4,3.747611264933771e-5,-1.3659170952435136e-8,4.789752246660876e-4,3.748091718942398e-5,-1.3651117518452754e-8,4.7947201707088224e-4,3.757448492495361e-5,-1.3664168314897276e-8,4.799505077512641e-4,3.775714321569889e-5,-1.3698971973992664e-8,4.803824002412184e-4,3.801622409426613e-5,-1.3752971782310215e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json new file mode 100644 index 0000000..765f637 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":11000,"numberOfSamples":1000,"samples":[4.807455898115237e-4,3.832746570992544e-5,-1.3820749559112586e-8,4.810276804026849e-4,3.8657939483712816e-5,-1.3894708855793208e-8,4.8122851144731977e-4,3.897037866353488e-5,-1.3966029941865335e-8,4.8136122169643126e-4,3.922846753666153e-5,-1.4025813189547578e-8,4.8145158055841605e-4,3.94025277918899e-5,-1.406634943105251e-8,4.815355041583503e-4,3.9474978459853574e-5,-1.408245537787128e-8,4.8165478219839815e-4,3.9445013590506954e-5,-1.4072791780691197e-8,4.8185089652025466e-4,3.933196966399209e-5,-1.4041008026015441e-8,4.8215671196515623e-4,3.9176311765079673e-5,-1.3996340784096513e-8,4.825864763543066e-4,3.9036228711670225e-5,-1.3953028790341758e-8,4.8312623641597524e-4,3.897747212754661e-5,-1.3927849119148707e-8,4.837291888970253e-4,3.9055456474574426e-5,-1.3935510387344442e-8,4.843221611312391e-4,3.929313827217236e-5,-1.3982860442730526e-8,4.848265247112546e-4,3.966499254457847e-5,-1.4064616609993489e-8,4.8518733416020557e-4,4.009980545620315e-5,-1.4163881241573302e-8,4.853950931909375e-4,4.050581912340954e-5,-1.425830655995102e-8,4.854866151667581e-4,4.080574058134305e-5,-1.4328715323638037e-8,4.85525688196407e-4,4.096178493042818e-5,-1.4365239392562207e-8,4.855772001398806e-4,4.0979862819758134e-5,-1.4368394366073396e-8,4.856885804979649e-4,4.089713112766541e-5,-1.4346234987150922e-8,4.8588326125485515e-4,4.076435074414623e-5,-1.4310345248447114e-8,4.8616296080937287e-4,4.063161994000118e-5,-1.4272594843316575e-8,4.865136173432042e-4,4.054008405187016e-5,-1.4243172616081504e-8,4.8691142789272524e-4,4.051847158520118e-5,-1.4229620182921136e-8,4.8732762934217247e-4,4.0582299326150006e-5,-1.4236433463507242e-8,4.8773212709177916e-4,4.07341134689005e-5,-1.4264941962397524e-8,4.880965967034294e-4,4.096407600183585e-5,-1.4313353517338398e-8,4.88397573177068e-4,4.1250927252936434e-5,-1.4376959666340294e-8,4.886197129387349e-4,4.1563798332032156e-5,-1.4448564853229553e-8,4.887589435265532e-4,4.1865488207741994e-5,-1.451924254306548e-8,4.888247307700336e-4,4.211748974787741e-5,-1.4579476522027053e-8,4.888405100767859e-4,4.228641181812268e-5,-1.462064263346648e-8,4.888415356313333e-4,4.235083017747227e-5,-1.463666315611464e-8,4.888699069788087e-4,4.2307124574301165e-5,-1.462554429370797e-8,4.889672434197426e-4,4.2172729191325406e-5,-1.459042628142175e-8,4.89166100944331e-4,4.198561886052198e-5,-1.4539802909504917e-8,4.894815424795779e-4,4.179941029790374e-5,-1.4486638095790344e-8,4.899045597653066e-4,4.16738571918689e-5,-1.4446179472955758e-8,4.903995543457572e-4,4.1661226263416274e-5,-1.4432491631334258e-8,4.909084078410756e-4,4.179064877681403e-5,-1.4454232713012669e-8,4.913629055658968e-4,4.205495921373214e-5,-1.4510927067288458e-8,4.917043498415898e-4,4.2406630471518614e-5,-1.4591584452824552e-8,4.919041260653661e-4,4.2768455240018365e-5,-1.4677226547185713e-8,4.91975143734432e-4,4.30581023135401e-5,-1.4747087713819914e-8,4.919667281492841e-4,4.321634341236769e-5,-1.4785795141156964e-8,4.919450134806429e-4,4.322488299346272e-5,-1.4787918091785175e-8,4.919696544610528e-4,4.310619995991277e-5,-1.4758043194016052e-8,4.920780610928328e-4,4.2909134196637064e-5,-1.4707389424281414e-8,4.922813225790399e-4,4.269033595193827e-5,-1.464944226297227e-8,4.925688425220637e-4,4.249988199139718e-5,-1.4596537842685818e-8,4.92916302217559e-4,4.2373819969799324e-5,-1.4557994767186664e-8,4.932930424762773e-4,4.233227598512297e-5,-1.4539483417289066e-8,4.936673798735039e-4,4.2380499169877454e-5,-1.4543082916464466e-8,4.940100632622315e-4,4.251078828128216e-5,-1.4567604259159937e-8,4.942967406427109e-4,4.27043504794895e-5,-1.4608973846901326e-8,4.945102476677884e-4,4.2933063498730834e-5,-1.4660638792530654e-8,4.946431248320447e-4,4.316170803770033e-5,-1.4714088579726986e-8,4.947001929114915e-4,4.335150966562856e-5,-1.4759675319273507e-8,4.947003518474758e-4,4.3465620460088586e-5,-1.4787908056141978e-8,4.946762700491294e-4,4.3476391218321277e-5,-1.4791230435817252e-8,4.946706632709735e-4,4.337312853241991e-5,-1.4766006598097854e-8,4.947286919062398e-4,4.316792790944356e-5,-1.4714140745679074e-8,4.948875598480194e-4,4.289680338026428e-5,-1.46436248866499e-8,4.951660198459949e-4,4.261431606960693e-5,-1.4567507684274658e-8,4.955572023782361e-4,4.238205390573295e-5,-1.4501266960766878e-8,4.960275056948562e-4,4.225356593077395e-5,-1.4459112508157139e-8,4.965226079965434e-4,4.225970770296015e-5,-1.445012992875491e-8,4.969797348841862e-4,4.239855798309805e-5,-1.4475344797421208e-8,4.973435745501257e-4,4.263333074298414e-5,-1.452672530286383e-8,4.975817616767804e-4,4.290011641573763e-5,-1.4588789841322534e-8,4.976949342797306e-4,4.31246291984686e-5,-1.4642736998874316e-8,4.977169933512843e-4,4.32435191844831e-5,-1.4671952404593025e-8,4.977043744489744e-4,4.3222752491909916e-5,-1.4666876259907704e-8,4.977180995272924e-4,4.30657402384419e-5,-1.4627283126456636e-8,4.978060190996614e-4,4.280844975449757e-5,-1.4561258969220208e-8,4.979920722311104e-4,4.2505071693506214e-5,-1.4481783123106343e-8,4.982749931993637e-4,4.221149461163865e-5,-1.4402704387878677e-8,4.986341351162414e-4,4.1972812399652274e-5,-1.4335614319282961e-8,4.99038023174974e-4,4.181724732728816e-5,-1.4288203371298527e-8,4.994521132236064e-4,4.1755451375511826e-5,-1.4263899128169458e-8,4.998442497099592e-4,4.1782774302784495e-5,-1.4262268021020732e-8,5.001879318353291e-4,4.1882399162322495e-5,-1.4279703860248156e-8,5.004642516735846e-4,4.202823461485221e-5,-1.4310113798395751e-8,5.006634317541689e-4,4.218742398465999e-5,-1.4345522650409268e-8,5.007865154243883e-4,4.232301933686223e-5,-1.4376697915433863e-8,5.008471450808845e-4,4.239771827120947e-5,-1.4394026271468186e-8,5.008726192415792e-4,4.237947661390274e-5,-1.4388889379628621e-8,5.009027064025104e-4,4.224906691188224e-5,-1.4355605708386248e-8,5.009844664141034e-4,4.200814399437556e-5,-1.4293595372097094e-8,5.011622958425812e-4,4.168457799010023e-5,-1.4208933086185455e-8,5.014648490094809e-4,4.133098997158663e-5,-1.4114222164068199e-8,5.018933871908035e-4,4.1014046129932506e-5,-1.4026120755346876e-8,5.024172779489319e-4,4.079629120466331e-5,-1.3960894019653134e-8,5.029800978344093e-4,4.0716851663191706e-5,-1.3929502673170868e-8,5.035149205751237e-4,4.0778803174321974e-5,-1.3934148788121047e-8,5.039631026052139e-4,4.0948067350335475e-5,-1.3967574412809247e-8,5.042898951464934e-4,4.116358529728348e-5,-1.4015214047407058e-8,5.044923433820881e-4,4.1354546447450864e-5,-1.405930760929713e-8,5.045980853346142e-4,4.145904379395495e-5,-1.4083628433054094e-8,5.046562864241187e-4,4.143903113694813e-5,-1.4077491031220824e-8,5.047237703547672e-4,4.128796116298141e-5,-1.4038013428869964e-8,5.048504577142612e-4,4.1029648300892024e-5,-1.3970152894372228e-8,5.050682042868694e-4,4.070946922079784e-5,-1.3884718542673423e-8,5.053857892959258e-4,4.038129871002777e-5,-1.3795175637434057e-8,5.057904773855169e-4,4.0094587167200846e-5,-1.3714342555419928e-8,5.062542972907671e-4,3.988514116215506e-5,-1.3651908298048012e-8,5.067420758582822e-4,3.9771018930213065e-5,-1.36131932106548e-8,5.072186700798977e-4,3.9752847710952766e-5,-1.3599056334601855e-8,5.076541049257842e-4,3.981679039448647e-5,-1.3606552572220539e-8,5.080265636895346e-4,3.993839829792082e-5,-1.3629887915207912e-8,5.083239056768367e-4,4.008625429723009e-5,-1.366134539027628e-8,5.085445405312649e-4,4.02251540015048e-5,-1.3692068130210929e-8,5.086982215653529e-4,4.031923748367069e-5,-1.3712790472901225e-8,5.088067942896942e-4,4.033585746282454e-5,-1.3714758380114217e-8,5.089042016332715e-4,4.0250984480183826e-5,-1.369110873241738e-8,5.090342370463796e-4,4.005630209267127e-5,-1.36387919547938e-8,5.09244162874289e-4,3.976656292219734e-5,-1.3560660497017656e-8,5.095732393487734e-4,3.942360984383623e-5,-1.3466737784983145e-8,5.100381218559963e-4,3.9092145563312785e-5,-1.3373334502326575e-8,5.106211663506831e-4,3.884421714299498e-5,-1.3299185546533904e-8,5.112695708256073e-4,3.873558642398053e-5,-1.325938777322804e-8,5.119093049859852e-4,3.878426446529394e-5,-1.3259745614206067e-8,5.124690770718819e-4,3.896273593345075e-5,-1.3294485083970076e-8,5.129030399538616e-4,3.920805997219822e-5,-1.3348486880023718e-8,5.13202292093832e-4,3.944384781038976e-5,-1.3402621757432825e-8,5.133926118135372e-4,3.9603311868793384e-5,-1.3439524368879208e-8,5.135225876503645e-4,3.964513077729718e-5,-1.344773648237942e-8,5.136484244188965e-4,3.955939833262208e-5,-1.3423498173910979e-8,5.138202846515992e-4,3.936503101320661e-5,-1.337045078206997e-8,5.140727251366115e-4,3.9101620258126494e-5,-1.3297891578819023e-8,5.144200439889327e-4,3.8818723273896924e-5,-1.3218230049065295e-8,5.148563248939854e-4,3.8565076244178615e-5,-1.31442269252279e-8,5.153592942705727e-4,3.8379720577811564e-5,-1.3086552229207539e-8,5.158965586590853e-4,3.8286402743178446e-5,-1.3052102047767048e-8,5.164325300028227e-4,3.829166482457637e-5,-1.3043289492522785e-8,5.169345624266961e-4,3.838611140678518e-5,-1.3058250794240458e-8,5.173773998025525e-4,3.854777091398222e-5,-1.3091694599441699e-8,5.177457469094699e-4,3.8746318140652295E-05,-1.3136024508001314e-8,5.180353753683765e-4,3.894721737733719e-5,-1.3182422098429487e-8,5.182533801875123e-4,3.9115464526579055e-5,-1.322176802538456e-8,5.184180207872244e-4,3.9219155018714586e-5,-1.3245479826195314e-8,5.185582174206982e-4,3.923339887816621e-5,-1.3246473160946539e-8,5.187121920390923e-4,3.9145162676454723e-5,-1.3220474590964729e-8,0.00051892397371530155,3.895909776742693e-5,-1.316773040159988e-8,5.192361363727685e-4,3.8702959631497384e-5,-1.3094695644609137e-8,5.19678041196177e-4,3.8429183553321686e-5,-1.3014701920521112e-8,5.20251698135249e-4,3.820781513346968e-5,-1.2946243125940887e-8,5.209217831712024e-4,3.810779889170091e-5,-1.2908049988956758e-8,5.216188239536118e-4,3.817071047034634e-5,-1.2912046211167408e-8,5.222596846655533e-4,3.8389929217076366e-5,-1.295764933741635e-8,5.227776981227885e-4,3.870942493105218e-5,-1.3031193682067312e-8,5.231462221446176e-4,3.90449333361414e-5,-1.3111251595486714e-8,5.233834624169179e-4,3.9315346546736246e-5,-1.3176687479802485e-8,5.235394281321812e-4,3.946752696132619e-5,-1.3213083897284422e-8,5.236754233317036e-4,3.9485713744511626e-5,-1.3215295714260378e-8,5.238462568216775e-4,3.9387314888452363e-5,-1.3186630329662888e-8,5.240896667697123e-4,3.921173128856953e-5,-1.3136310014778118e-8,5.244226644038686e-4,3.900801174331826e-5,-1.3076572242619164e-8,5.248426426550115e-4,3.882439799199982e-5,-1.3020069826079723e-8,5.253311937372029e-4,3.870065090327242e-5,-1.2977767650741354e-8,5.258593061790778e-4,3.8663123547147846e-5,-1.2957402470289928e-8,5.263931056407179e-4,3.8722437005912813e-5,-1.2962597830659435e-8,5.268994400545242e-4,3.887355383309786e-5,-1.2992693609541672e-8,5.273506944811689e-4,3.909786013135494e-5,-1.304323238147115e-8,5.277283618928682e-4,3.9366737045691754e-5,-1.310693161469982e-8,5.280251104455353e-4,3.964596224958332e-5,-1.3174889451303355e-8,5.282454335082373e-4,3.990022972843365e-5,-1.3237768428264953e-8,5.284052231946588e-4,4.009736888639202e-5,-1.3286836033079106e-8,5.285305494829884e-4,4.021225325537939e-5,-1.3314912562979519e-8,5.286557060394544e-4,4.0230579521206196e-5,-1.3317363974876683e-8,5.288202403339737e-4,4.015271335318547e-5,-1.3293259523465599e-8,5.290641459351538e-4,3.999743645858218e-5,-1.3246644881952389e-8,5.29420183065172e-4,3.980429049478516e-5,-1.3187490243689071e-8,5.299032094367221e-4,3.963165594186321e-5,-1.313141009986588e-8,5.304988417193463e-4,3.9546878333224285e-5,-1.3097054263167734e-8,5.311574317731786e-4,3.96065921173356e-5,-1.3100650126240523e-8,5.318014578119245e-4,3.98319165292681e-5,-1.3149038022273758e-8,5.32349611324718e-4,4.019180005671327e-5,-1.3234910936428494e-8,5.327485204893838e-4,4.0608738174731215e-5,-1.3338177317094923e-8,5.32993774836213e-4,4.098800442554419e-5,-1.3433731281722263e-8,5.331274981533502e-4,4.125409164773492e-5,-1.3501160283562443e-8,5.332164335123858e-4,4.137379163363762e-5,-1.353087213849061e-8,5.333259193608972e-4,4.13576666322837e-5,-1.3524569124303872e-8,5.335024650995162e-4,4.124644008992089e-5,-1.3491904463169542e-8,5.337679129261047e-4,4.109355822924989e-5,-1.3446225415098136e-8,5.341216559001369e-4,4.0951180469202836e-5,-1.340113134321436e-8,5.345463734211426e-4,4.0861572281668134e-5,-1.3368231159593744e-8,5.350143019353962e-4,4.0852955656746325e-5,-1.3355852072504397e-8,5.354928423825327e-4,4.093817556745151e-5,-1.3368381791204466e-8,5.359493976739728e-4,4.111506478866112e-5,-1.3406093750610092e-8,5.363555591240247e-4,4.136805710751307e-5,-1.3465430533373401e-8,5.366906062535734e-4,4.167087291184944e-5,-1.353970510439085e-8,5.369441549435876e-4,4.199017748541348e-5,-1.3620131233801054e-8,5.371176836764395e-4,4.229004758300979e-5,-1.3697055796399448e-8,5.372246939412618e-4,4.2536815840649555e-5,-1.376122922588961e-8,5.372894831724115e-4,4.2703741062777625e-5,-1.3804984921125316e-8,5.373446669618185e-4,4.277512234113474e-5,-1.3823300988072162e-8,0.00053742757544824975,4.27496117961429e-5,-1.3814764582700658e-8,5.375755603610683e-4,4.264248462223457e-5,-1.3782413644499372e-8,5.378200593904353e-4,4.2486472593883745e-5,-1.373430126808111e-8,5.381792508290428e-4,4.233015478549633e-5,-1.368338167500512e-8,5.386499283189473e-4,4.223204705859813e-5,-1.3646059069466792e-8,5.392010226639216e-4,4.224848840771485e-5,-1.3638780125339982e-8,5.397734225659609e-4,4.2415447202705524e-5,-1.3672723821927818e-8,5.402914650870005e-4,4.272937436938092e-5,-1.3748141826012162e-8,5.406870951769552e-4,4.3138228021123006e-5,-1.3851605137995859e-8,5.409276624223462e-4,4.355360016244392e-5,-1.3959259082476329e-8,5.410308634400444e-4,4.388299832113226e-5,-1.404572807505199e-8,5.410560312127462e-4,4.406544519190341e-5,-1.409387560046213e-8,5.410774246421454e-4,4.4090008179269903e-5,-1.4099829500317099e-8,5.411566007764416e-4,4.399025355105983e-5,-1.4071552354515442e-8,5.413273035270495e-4,4.3823916588713976e-5,-1.4023612135435341e-8,5.415945168970027e-4,4.365179453199496e-5,-1.3971835246327046e-8,5.41941678191083e-4,4.3523829968479546e-5,-1.3929763987744986e-8,5.423397870270695e-4,4.3473105445618066e-5,-1.3906988846966135e-8,5.427550475932729e-4,4.3515132910834864e-5,-1.3908697960636151e-8,5.431542404764803e-4,4.364960885200329e-5,-1.393582992804166e-8,5.435083954292767e-4,4.386290135691708e-5,-1.3985503452994463e-8,5.437955680521673e-4,4.413075019834189e-5,-1.4051648813651171e-8,5.440031193610353e-4,4.442130458093591e-5,-1.4125847171957948e-8,5.441294904295869e-4,4.4698775986850106e-5,-1.4198377383350764e-8,5.441851609821107e-4,4.4927902109817414e-5,-1.4259451932272639e-8,5.44192274379237e-4,4.5079042801761985e-5,-1.4300570677415424e-8,5.441825131835359e-4,4.513324877772769e-5,-1.4315854380231034e-8,5.441931678314615e-4,4.508643514283918e-5,-1.4303200161377657e-8,5.442616930190452e-4,4.495182030705989e-5,-1.4265097005812744e-8,5.444193252662113e-4,4.475992062198913e-5,-1.420891194830896e-8,5.446845113517835e-4,4.455563870804244e-5,-1.4146439051286658e-8,5.450570012046475e-4,4.439214140356481e-5,-1.4092482439868092e-8,5.455138259491807e-4,4.432123995689494e-5,-1.4062247519459378e-8,5.460091567979519e-4,4.4380529159655735e-5,-1.4067548181360422e-8,5.464806332929459e-4,4.457933352573298e-5,-1.411246534473196e-8,5.468639351101996e-4,4.488842557502628e-5,-1.41900303462031e-8,5.471137114483806e-4,4.5240836901430264e-5,-1.4282186009332701e-8,5.472228700801882e-4,4.5549104705021665e-5,-1.436459415403402e-8,5.472286408053625e-4,4.573542557700775e-5,-1.4415174862346914e-8,5.471991045330296e-4,4.576046398285103e-5,-1.4422216878027767e-8,5.47206448294467e-4,4.56349055279638e-5,-1.4387623676551349e-8,5.473019740297997e-4,4.5409058585348715e-5,-1.4324164571538933e-8,5.475045890269017e-4,4.5149831126079944e-5,-1.4249406835206891e-8,5.47803705825606e-4,4.4918876045973197e-5,-1.4180002072172085e-8,5.481698176479473e-4,4.4759851057189094e-5,-1.412830013525889e-8,5.48565692247331e-4,4.469494792163449e-5,-1.410125538583461e-8,5.489546078069922e-4,4.4727065395722936e-5,-1.4100722236229494e-8,5.493051789854964e-4,4.484400912140682e-5,-1.4124308082445898e-8,5.495938405083384e-4,4.5022613923846395e-5,-1.4166321890606745e-8,5.498062624304646e-4,4.523222436300298e-5,-1.4218687392005276e-8,5.499384595504489e-4,4.54378852388539e-5,-1.4271863647322725e-8,5.49997724894559e-4,4.560386201037831e-5,-1.4315865288538859e-8,5.500030030438457e-4,4.5697985530979016e-5,-1.434147018981161e-8,5.499839508065228e-4,4.5696843463098964e-5,-1.4341625669559141e-8,5.499779032270899e-4,4.559110119398946e-5,-1.4312908167490931e-8,5.500244181110129e-4,4.5389582007094315e-5,-1.4256724128095877e-8,5.50157883005538e-4,4.512048381923619e-5,-1.417984329569152e-8,5.503995686945172e-4,4.482844257285975e-5,-1.4093882581779136e-8,5.507511242321261e-4,4.456714389146746e-5,-1.4013561269086788e-8,5.511914791808575e-4,4.438847474538031e-5,-1.3953862718354635e-8,5.516785262955729e-4,4.43302010252111e-5,-1.3926532510634918e-8,5.521561635635225e-4,4.4404755979930705e-5,-1.3936611787065186e-8,5.525663239678071e-4,4.459220322119048e-5,-1.3979975801327925e-8,5.528642063231052e-4,4.484065587117192e-5,-1.4043007349154969e-8,5.530328973052125e-4,4.507661529127626e-5,-1.4105288308440919e-8,5.530916519570143e-4,4.522480506594574e-5,-1.4145236907282978e-8,5.530923528858961e-4,4.523202408225343e-5,-1.4147030087645297e-8,5.531031506537776e-4,4.5085084291692684e-5,-1.4105860437065999e-8,5.531855430718504e-4,4.4813819040833696e-5,-1.4028958709191986e-8,5.533755526889687e-4,4.447784879142051e-5,-1.3932084645392354e-8,5.536768815553462e-4,4.41448232435347e-5,-1.3833668292310375e-8,5.540662856310166e-4,4.387093911013423e-5,-1.3749517436350942e-8,5.545054107827476e-4,4.369036706870036e-5,-1.3689826206305373e-8,5.549526056740539e-4,4.3613801028485625e-5,-1.3658542876311258e-8,5.553711420623051e-4,4.363257224331595e-5,-1.3654223719707622e-8,5.55733434845886e-4,4.3724503286497815e-5,-1.3671440617076656e-8,5.560225166865299e-4,4.385919757848827e-5,-1.3702164569045507e-8,5.56232263778228e-4,4.400211587684637e-5,-1.3736921152732457e-8,5.563673733728169e-4,4.4117846392702796e-5,-1.376575922796316e-8,5.564433941300915e-4,4.4173372568585065e-5,-1.3779194966470485e-8,5.564864419333089e-4,4.414206095567587e-5,-1.3769317275568825e-8,5.565317072407061e-4,4.4008603643539826E-05,-1.373115531210439e-8,5.566196665612034e-4,4.377426004116058e-5,-1.3664180386757936e-8,5.567893255742785e-4,4.3460653879901505e-5,-1.3573495648336821e-8,5.5706903259323e-4,4.3109638309396154e-5,-1.3470018373719109e-8,5.574671621600434e-4,4.277713905643178e-5,-1.3369019224232388e-8,5.579663031544923e-4,4.25209069743737e-5,-1.3286905991693288e-8,5.585242506155931e-4,4.2385091814629774e-5,-1.323695369887385e-8,5.590827837639093e-4,4.238670958930531e-5,-1.322532616995296e-8,5.595820943030839e-4,4.2508928121728134e-5,-1.324879527303495e-8,5.599765436803205e-4,4.270375260425213e-5,-1.3295025360336303e-8,5.602470647653046e-4,4.290357624198227e-5,-1.3345467218010926e-8,5.604066433327727e-4,4.3038521618008536e-5,-1.3380135565607916e-8,5.604971361354452e-4,4.305496671614097e-5,-1.3382982052173816e-8,5.605778644400599e-4,4.293002467591174e-5,-1.3346289025681776e-8,5.607089623263255e-4,4.267729978794635e-5,-1.3272636519098559e-8,5.609347399582315e-4,4.234165410834814e-5,-1.3173718674744843e-8,5.61272824224999e-4,4.1984822487049506e-5,-1.3066489427049024e-8,5.617125088503604e-4,4.1667542738988164e-5,-1.2968201743518012e-8,5.622215885905281e-4,4.1434866394617e-5,-1.289219032748799e-8,5.627575830200749e-4,4.130882130901546e-5,-1.2845587660872705e-8,5.632786025023382e-4,4.1288594336048484e-5,-1.2829102735199409e-8,5.637508743402848e-4,4.135555763250854e-5,-1.2838217765699319e-8,5.641523616550949e-4,4.147987966628914e-5,-1.2864954028178306e-8,5.644734987008431e-4,4.1626480056051095e-5,-1.2899567931198906e-8,5.647164882240774e-4,4.1759528984558676e-5,-1.2931887162585448e-8,5.648942535231952e-4,4.184578296212132e-5,-1.2952297818560158e-8,5.650294889116143e-4,4.1857547900959665e-5,-1.2952577895423737e-8,5.651535715361088e-4,4.177605896823371e-5,-1.2926828568155383e-8,5.653044894483615e-4,4.159567182824132e-5,-1.287267633441649e-8,5.655225692094629e-4,4.132839759346974e-5,-1.279266224815386e-8,5.658430328778544e-4,4.100697766475647e-5,-1.2695307297663935e-8,5.662857653330005e-4,4.068344030322492e-5,-1.2594934042639526e-8,5.668451659124272e-4,4.042019197207262e-5,-1.2509327194232984e-8,5.674853336557398e-4,4.027347907363591e-5,-1.2455107328985577e-8,5.681455713211361e-4,4.027408208489247e-5,-1.244214622307206e-8,5.68756746685192e-4,4.0414004798879e-5,-1.2469513131187434e-8,5.692626340933667e-4,4.0646580039138516e-5,-1.2525133623159566e-8,5.696369955166504e-4,4.090066807453131e-5,-1.2589478046435055e-8,5.698896665275624e-4,4.110245921092196e-5,-1.2641551835441664e-8,5.700608716068607e-4,4.1195953729986446e-5,-1.2664715990718236e-8,5.702077505850598e-4,4.1155798139361454e-5,-1.2650540717421748e-8,5.703884759901265e-4,4.099042424392756e-5,-1.2600051493450478e-8,5.706483903579017e-4,4.073662588412746e-5,-1.2522583891047876e-8,5.710109691405875e-4,4.0448332338844876e-5,-1.243290518949643e-8,5.714748841309391e-4,4.0182934684654553E-05,-1.2347452802728689e-8,5.720170435890389e-4,3.9988544477136714e-5,-1.2280615128135358e-8,5.726001321744273e-4,3.9895057969472874e-5,-1.2241921421025485e-8,5.731821206679281e-4,3.991064069654339e-5,-1.2234717623019245e-8,5.737250198595423e-4,4.002343402058786e-5,-1.2256397133360156e-8,5.742009861844149e-4,4.0206784374766535e-5,-1.2299779958393722e-8,5.745952088943357e-4,4.042579305071043e-5,-1.2355009254206567e-8,5.749061274942017e-4,4.064339540438695e-5,-1.2411383146639144e-8,5.751440773201222e-4,4.0825069665894794e-5,-1.2458778726029885e-8,5.753293799587323e-4,4.094221059405223e-5,-1.2488629625521792e-8,5.754904006567578e-4,4.097477176506438e-5,-1.2494646793562146e-8,5.756615125629631e-4,4.0913864151746437e-5,-1.2473547362790684e-8,5.758803459554417e-4,4.076472695839921e-5,-1.24259847650868e-8,5.761832436211499e-4,4.0549772255380785e-5,-1.2357617600292305e-8,5.765979379808243e-4,4.0310124351701156e-5,-1.2279811549458918e-8,5.771336876089873e-4,4.010269549721812e-5,-1.2209012413795871e-8,5.777716895829274e-4,3.9989598090760646e-5,-1.2163757626176808e-8,5.784616465902294e-4,4.001937776225071e-5,-1.2159125570823381e-8,5.791308482835355e-4,4.020580099469462e-5,-1.2200322952745242e-8,5.797065295022585e-4,4.0515899636114696e-5,-1.2278907274980914e-8,5.80142457888133e-4,4.087731150446172e-5,-1.2374661952472232e-8,5.804354401798264e-4,4.120363917341638e-5,-1.2462792256088949e-8,5.806232139856671e-4,4.142456024104346e-5,-1.2522577976320966e-8,5.807671988462954e-4,4.1505812543823224e-5,-1.2543184545504214e-8,5.809309310098887e-4,4.145299058481706e-5,-1.2524943479233836e-8,5.811633911987712e-4,4.130273058000135e-5,-1.2477155055317291e-8,5.814906054594975e-4,4.110843349549538e-5,-1.241437134424403e-8,5.819145513730104e-4,4.092617541810449e-5,-1.2352610977888855e-8,5.824169208822125e-4,4.0803658015597504e-5,-1.2306198503680667e-8,5.829655041898003e-4,4.077300848955851e-5,-1.2285457641107754e-8,5.835216304790936e-4,4.08473506951388e-5,-1.2295353076190144e-8,5.840475044047213e-4,4.1020878040647856e-5,-1.2335168157344423e-8,5.845123946407954e-4,4.1271912795883656e-5,-1.2399194688289209e-8,5.848968676341912e-4,4.1568009920163966e-5,-1.247819580484653e-8,5.851947152164219e-4,4.1871931312817365e-5,-1.2561243079423654e-8,5.854127287371877e-4,4.214737362730478e-5,-1.2637501168654626e-8,5.855689082537816e-4,4.236363657066199e-5,-1.2697641820982583e-8,5.856898580934266e-4,4.2498978178316354e-5,-1.2734800220127118e-8,5.85807889067023e-4,4.254292268264029e-5,-1.2745207957826337e-8,5.859579513795578e-4,4.249795347224145e-5,-1.272871639020561e-8,5.861741086786202e-4,4.2380895742717424e-5,-1.2689360718495551e-8,5.8648484953241e-4,4.2223796026970555e-5,-1.2635890084310931e-8,5.869065735812319e-4,4.2073073991807874e-5,-1.2581801894459312e-8,5.874356319421588e-4,4.19846475120227e-5,-1.2544061137121026e-8,5.880413756125081e-4,4.201259995003142e-5,-1.2539678227518325e-8,5.886653049404993e-4,4.219108683589354e-5,-1.2580052638216501e-8,5.8923238679551e-4,4.2514839582835756e-5,-1.266480189970253e-8,5.896756386652956e-4,4.2930283800824865e-5,-1.2778839288959433e-8,5.89964101552167e-4,4.334851356362142e-5,-1.2896139522771572e-8,5.901171113360668e-4,4.367814905014522e-5,-1.298951948589008e-8,5.901947880698806e-4,4.38602737483596e-5,-1.3040992057450742e-8,5.902714285460607e-4,4.3885736496831144e-5,-1.3046861211874255e-8,5.904086373518427e-4,4.3789236335983746e-5,-1.3016096632518927e-8,5.90640488345573e-4,4.362965960038413e-5,-1.2964884842237333e-8,5.90971946441086e-4,4.34695603945582e-5,-1.2911008855333938e-8,5.913852195337234e-4,4.336092270372908e-5,-1.2869904121306538e-8,5.918485774305888e-4,4.333812126088688e-5,-1.285252461742886e-8,5.923245446952727e-4,4.3416150897318016e-5,-1.2864501648532461e-8,5.927764593066211e-4,4.359190961413261e-5,-1.2906114467297666e-8,5.931734732856898e-4,4.384714236114294e-5,-1.2972841846778543e-8,5.934942150203255e-4,4.4152466088083324e-5,-1.3056421398296158e-8,5.937291030815587e-4,4.447215885443439e-5,-1.3146311817982143e-8,5.938811933955622e-4,4.47693426906656e-5,-1.3231356330999967e-8,5.93965485886057e-4,4.5011077674093984e-5,-1.3301399351245954e-8,5.94006799600864e-4,4.5172770496475155e-5,-1.334862131885749e-8,5.940365840398179e-4,4.5241413682133494e-5,-1.336846818500244e-8,5.940891110207756e-4,4.521750624615486e-5,-1.3360212923084611e-8,5.941973595900601e-4,4.511571456359875e-5,-1.3327250246980502e-8,5.943887128092454e-4,4.4964352725929755e-5,-1.3277177720368145e-8,5.946803298205737e-4,4.480359021479988e-5,-1.3221572693952441E-08,5.950740552025116e-4,4.4681698944798734e-5,-1.3175121289205661e-8,5.955515209880322e-4,4.4648007751150914e-5,-1.3153551831570361e-8,5.960715426732222e-4,4.474149532569575e-5,-1.3169977028198143e-8,5.965733804112413e-4,4.4975795704802126e-5,-1.3229934760324216e-8,5.969897334847129e-4,4.5325368620618036e-5,-1.3326761651752678e-8,5.972695820723137e-4,4.572244176421522e-5,-1.3440440521292401e-8,5.974020923934746e-4,4.607385900358259e-5,-1.3542760448690568e-8,5.974260041454101e-4,4.6295468638069834e-5,-1.3607887991505155e-8,5.974149745012774e-4,4.63461491160932e-5,-1.3622690856111841e-8,5.974464645346873e-4,4.62408255489987e-5,-1.3590608456208522e-8,5.975733330563519e-4,4.603711609863486e-5,-1.3527729382284185e-8,5.978120949073726e-4,4.5808229996933905e-5,-1.3455010772294891e-8,5.981476506938362e-4,4.561887790575258e-5,-1.3391473757723922e-8,5.985457456463102e-4,4.551241536514983e-5,-1.3350535217826406e-8,5.989652880636257e-4,4.550820785410715e-5,-1.3339057205444769e-8,5.993671400674556e-4,4.560473672048171e-5,-1.3357888193002322e-8,5.997192571010954e-4,4.578464443118222e-5,-1.340296607210915e-8,5.999993638835912e-4,4.601975491101805e-5,-1.3466562670281527e-8,6.001963194062474e-4,4.627562551405624e-5,-1.353859250547407e-8,6.003106951839153e-4,4.651585668922163e-5,-1.3607999789540018e-8,6.003545828554706e-4,4.670640694476506e-5,-1.3664190858733449e-8,6.003504102879558e-4,4.681993271445912e-5,-1.3698426655564152e-8,6.003285040062579e-4,4.6839792267256964e-5,-1.3705039077842174e-8,6.003233654665366e-4,4.6763054815347505e-5,-1.3682318721009288e-8,6.00368980029104e-4,4.6601915443853456e-5,-1.3632979669015082e-8,6.004936892972919e-4,4.638313791509782e-5,-1.3564152706925421e-8,6.007152397239569e-4,4.6145339984406526e-5,-1.348684271745055e-8,6.010365913857648e-4,4.5934168128419516e-5,-1.3414767746104295e-8,6.014429942225124e-4,4.5795480210201754e-5,-1.3362464203894209e-8,6.019011057532637e-4,4.576653383496385e-5,-1.334252963495435e-8,6.023615895275835e-4,4.586559553492988e-5,-1.3362105344807452e-8,6.027669935205449e-4,4.608188309838632e-5,-1.3419300705541302e-8,6.030658883371729e-4,4.6370003546858796e-5,-1.350105745458068e-8,6.032312519987232e-4,4.66548633865428e-5,-1.3584497719127712e-8,6.032758091670896e-4,4.685133527899667e-5,-1.3643100300052348e-8,6.032535495762095e-4,4.6894725810143705e-5,-1.365628640799527e-8,6.03241729155245e-4,4.6767362660908595e-5,-1.3617683021674188e-8,6.033108166392385e-4,4.65049510596044e-5,-1.3537085025814027e-8,6.034993182490741e-4,4.617895985207165e-5,-1.3435213551070888e-8,6.038060843341433e-4,4.5867317225684895e-5,-1.3335114749071355e-8,6.041994185155103e-4,4.563018257654167e-5,-1.3255104395874068e-8,6.046332663829588e-4,4.549926714185694e-5,-1.3205572436516151e-8,6.05061438746373e-4,4.5478931464839044e-5,-1.3189054107180226e-8,6.054462336936745e-4,4.555306960662015e-5,-1.3201909329785792e-8,6.05762009514742e-4,4.5692876070382345e-5,-1.3236331295070042e-8,6.059957599659084e-4,4.586321651672058e-5,-1.3282117826334546e-8,6.061465022300673e-4,4.6027351570760987e-5,-1.332813231699191e-8,6.062243702543427e-4,4.615066462844048e-5,-1.3363565264245378e-8,6.062495021200464e-4,4.620409516581872e-5,-1.3379104609315037e-8,6.062503718534889e-4,4.616766157689615e-5,-1.3368067825864579e-8,6.062610395188557e-4,4.6033924576426214e-5,-1.3327457601791911e-8,6.063169469718518e-4,4.581063544655485e-5,-1.3258772884036288e-8,6.064494044595206e-4,4.55215188896636e-5,-1.3168331958415403e-8,6.066795318747286e-4,4.52042881604833e-5,-1.3066866709055663e-8,6.070128998625647e-4,4.490545427349359e-5,-1.2968213330564991e-8,6.074363111856063e-4,4.467226793872749e-5,-1.2887087372606102e-8,6.079179098524724e-4,4.4543009907630994e-5,-1.2836174421477544e-8,6.084112436310817e-4,4.453736700212919e-5,-1.282297992625794e-8,6.08863370461571e-4,4.464886329443632e-5,-1.2847073663286673e-8,6.092264758703546e-4,4.4841679024146196e-5,-1.289860746681526e-8,6.094712937410751e-4,4.505445305432866e-5,-1.2959127922180999e-8,6.095987972448405e-4,4.521292039621171e-5,-1.3005410854173592e-8,6.096448764943399e-4,4.5250510079934645e-5,-1.3016030794821033e-8,6.096730138384927e-4,4.513114561506076e-5,-1.2978711001202054e-8,6.097545631549566e-4,4.486402580498518e-5,-1.2895124516848801e-8,6.099439852908066e-4,4.450134061490781e-5,-1.2780348513948726e-8,6.102610819546051e-4,4.4118743907326676e-5,-1.265702267633818e-8,6.106884949894511e-4,4.378880296374916e-5,-1.2547376438516559e-8,6.111831302385094e-4,4.356052924504412e-5,-1.2467023709897674e-8,6.116930853079845e-4,4.3451843285146805e-5,-1.2422507196552202e-8,6.121718091847651e-4,4.3453283807383274e-5,-1.2412110270198072e-8,6.125859229567852e-4,4.3537061943772174e-5,-1.242828767855344e-8,6.129174051327997e-4,4.3666315988779066e-5,-1.2460290569013057e-8,6.131625421240779e-4,4.380214478201701e-5,-1.249629588729844e-8,6.133297797994605e-4,4.390824915390768e-5,-1.2524935334363993e-8,6.134376059320164e-4,4.395405443660182e-5,-1.2536392208869133e-8,6.135126429920539e-4,4.391729178049016e-5,-1.2523285610369912e-8,6.135875232541355e-4,4.37866565556534e-5,-1.248151062142838e-8,6.136978474050366e-4,4.3564553195397556e-5,-1.2411078877572878e-8,6.138776204707606e-4,4.3269171658970975e-5,-1.2316794930864575e-8,6.141531157431434e-4,4.293451537346142e-5,-1.2208394276352459e-8,6.145360882992824e-4,4.260690395661579e-5,-1.2099680577646451e-8,6.150183068876578e-4,4.233718420343913e-5,-1.2006354865178858e-8,6.155698862543469e-4,4.216944569007125e-5,-1.194266561911202e-8,6.161432780116315e-4,4.212893829735594e-5,-1.191760894514987e-8,6.166829962369822e-4,4.221304211145604e-5,-1.1931838226690434e-8,6.171390028809723e-4,4.2388733189199025e-5,-1.1976435073662864e-8,6.174801786565707e-4,4.2598204728411776e-5,-1.2034228597516467e-8,6.177039713164523e-4,4.2771969148489644e-5,-1.2083631887323418e-8,6.178390324477566e-4,4.284658717591776e-5,-1.2104190944765916e-8,6.179391490155112e-4,4.2782467541547576e-5,-1.2082381407395732e-8,6.180690499519215e-4,4.257622589977647e-5,-1.2015807665370394e-8,6.182856981106309e-4,4.2262641290182364e-5,-1.1914142478848567e-8,6.186214061728539e-4,4.1904306638940616e-5,-1.1796159869780265e-8,6.190753692770967e-4,4.1572254817565175e-5,-1.168386155567887e-8,6.196167242703293e-4,4.1325277041778395e-5,-1.1596058210408694e-8,6.201967488488639e-4,4.119594759437842e-5,-1.1543865254199268e-8,6.20764019662867e-4,4.118716574602068e-5,-1.1529328261415304e-8,6.21276549030351e-4,4.127757978552318e-5,-1.154678533548196e-8,6.217080946567695e-4,4.143120927489927e-5,-1.1585638643255654e-8,6.220491812385284e-4,4.1606888823869886e-5,-1.1633240123016763e-8,6.223049974865838e-4,4.176527688606243e-5,-1.1677161479087305e-8,6.224922388533137e-4,4.1873203335198556e-5,-1.1706688765447071e-8,6.226360955927154e-4,4.1906205539858945e-5,-1.1713717885084007e-8,6.227676718629662e-4,4.185030251602371e-5,-1.1693341505436549E-08,6.229214415278793e-4,4.1703735041523074e-5,-1.1644381723185078e-8,6.231319853664534e-4,4.147878640125714e-5,-1.1569970337746821e-8,6.234292802965761e-4,4.120299476324085e-5,-1.1478018587251494e-8,6.238323413543623e-4,4.0918246606836314e-5,-1.1381111507640178e-8,6.243421835840833e-4,4.067585345858345e-5,-1.1295177991775304e-8,6.249366570621865e-4,4.052646987191822e-5,-1.1236482520549367e-8,6.255707246045346e-4,4.0506051125566727e-5,-1.1217220872998886e-8,6.261847863392266e-4,4.062225481812146e-5,-1.124105993740093e-8,6.267202336075681e-4,4.08475845493812e-5,-1.1300642714626034e-8,6.271371716095217e-4,4.112393555640522e-5,-1.1378640363826194e-8,6.274272002337375e-4,4.137818217173511e-5,-1.1452374173663731e-8,6.276160661029025e-4,4.1543172110683946e-5,-1.1500321761911784e-8,6.277555903893943e-4,4.157642470580568e-5,-1.1508102924530854e-8,6.27908422691926e-4,4.147064598947023e-5,-1.1472061584588963e-8,6.281309101857208e-4,4.125382444025051e-5,-1.1399670417759892e-8,6.284589806615875e-4,4.0979990293322234e-5,-1.1307001676311571e-8,6.289004951050204e-4,4.071397673517665e-5,-1.1214196847662963e-8,6.294355537344494e-4,4.051475934856745e-5,-1.1140281814471427e-8,6.300239373611482e-4,4.0422039237037176e-5,-1.1098767800734435e-8,6.306167817204206e-4,4.044943019418976e-5,-1.1095165829009265e-8,6.311685570877783e-4,4.058515042629986e-5,-1.1126836428171848e-8,6.316459742628735e-4,4.079850842401508e-5,-1.1184776656645354e-8,6.320322305868174e-4,4.104897677346346e-5,-1.1256406714476454e-8,6.323269912046183e-4,4.129481071708473e-5,-1.1328374881368757e-8,6.325436800244089e-4,4.149944694038418e-5,-1.138873428162963e-8,6.327057717418874e-4,4.16353572641571e-5,-1.142829124798009e-8,6.3284320211077e-4,4.168599958414399e-5,-1.144127484924841e-8,6.329892507073682e-4,4.1646813714983565e-5,-1.1425641935138297e-8,6.331776221375067e-4,4.1525972124440285e-5,-1.1383308731724334e-8,6.334390698103364e-4,4.134505386970275e-5,-1.1320431548573354e-8,6.337968406765966e-4,4.1139068109295805e-5,-1.1247577530122925e-8,6.342606793062239e-4,4.0954382499360176e-5,-1.1179279984573037e-8,6.34820349377044e-4,4.084256691331992e-5,-1.1132243894526839e-8,6.354414692002509e-4,4.084884439949683e-5,-1.1121682761778917e-8,6.360679001502076e-4,4.0996568100376256e-5,-1.1156195968997953e-8,6.366339468110234e-4,4.1273455162251384e-5,-1.1233067444498262e-8,6.370847593082296e-4,4.162814226045832e-5,-1.1336844237008164e-8,6.37396720814852e-4,4.1982708229566924e-5,-1.1443112874876232e-8,6.375870858518857e-4,4.225789061658065e-5,-1.1526456467575253e-8,6.377074182492132e-4,4.239935949578947e-5,-1.1568844891267493e-8,6.378247532323368e-4,4.239301187350808e-5,-1.1564617122042744e-8,6.380001550354765e-4,4.226467189936685e-5,-1.1520634437041544e-8,6.382730696351323e-4,4.20678159364482e-5,-1.145275407366425e-8,6.386547983664781e-4,4.186642207611976e-5,-1.1380759726833166e-8,6.391301491825187e-4,4.1718969727590826e-5,-1.1323481608403951e-8,6.396645134501095e-4,4.16669354931265E-05,-1.1295058824572489e-8,6.402135211432802e-4,4.1728883630486846e-5,-1.130272523179324e-8,6.407329313863037e-4,4.189994975384543e-5,-1.1346210158588048e-8,6.411869273337647e-4,4.215579668992807e-5,-1.141864418294653e-8,6.415535317098374e-4,4.245951292741821e-5,-1.1508603446175233e-8,6.418266451670236e-4,4.276953906141313e-5,-1.160268944345754e-8,6.420150711981394e-4,4.3046889911181794e-5,-1.168800792468656e-8,6.42139481568027e-4,4.326056338850396e-5,-1.1754073581974093e-8,6.422284650134046e-4,4.3390762964130205e-5,-1.1793939423120785e-8,6.423145863944254e-4,4.343025232088572e-5,-1.1804643333497793e-8,6.424308611712833e-4,4.3384560725109035e-5,-1.1787259369334247e-8,6.426075271147033e-4,4.327164998942055e-5,-1.1746830998873365e-8,6.428686772623222e-4,4.312121499188235e-5,-1.1692290186969063e-8,6.43228211111064e-4,4.297319789412587e-5,-1.163620160738782e-8,6.436849034127897e-4,4.2874338512484316e-5,-1.1593853762600689e-8,6.442175178239869e-4,4.287106863696716e-5,-1.1581024865378009e-8,6.447826241944376e-4,4.299769946587701e-5,-1.1610003778983072e-8,6.453192106631316e-4,4.326148989808878e-5,-1.1684410461728622e-8,6.457633643151136e-4,4.363072674477005e-5,-1.179495428359945e-8,6.460709780358178e-4,4.403539258500074e-5,-1.1919425251124777e-8,6.46238269440531e-4,4.438654427814625e-5,-1.202896701159812e-8,6.463067360377512e-4,4.460863357575101e-5,-1.2098638955452586e-8,6.463473522053487e-4,4.466782983677177e-5,-1.2116629130642991e-8,6.464328198700985e-4,4.458091988511223e-5,-1.2087172530117929e-8,6.466134080396352e-4,4.440296244483021e-5,-1.2026767218001455e-8,6.469062893985017e-4,4.420432212394621e-5,-1.1957162905655501e-8,6.472980673486538e-4,4.4049415375376975e-5,-1.1898899064049858e-8,6.477545569824074e-4,4.398348465637827e-5,-1.1867178141227173e-8,6.482321283936542e-4,4.402769158632383e-5,-1.1870077472484313e-8,6.486874451684293e-4,4.4180110616365914e-5,-1.190843181001741e-8,6.490845942283705e-4,4.442004791255551e-5,-1.1976767655848106e-8,6.493996674170178e-4,4.471399475420608e-5,-1.2064930829832403e-8,6.496230132730473e-4,4.502224997790057e-5,-1.2160170877601224e-8,6.497593165315699e-4,4.530541463222377e-5,-1.2249376594925378e-8,6.498257985589669e-4,4.5530023897967826e-5,-1.2321106524374785e-8,6.498490150835266e-4,4.5672787320462324e-5,-1.2367125184429808e-8,6.49860849248668e-4,4.5723111388483726e-5,-1.2383285624306336e-8,6.498943459428724e-4,4.56838734642481e-5,-1.2369777794004631e-8,6.499798483583396e-4,4.5570805788698724e-5,-1.2330940194194202e-8,6.50141540921297e-4,4.5410946737608354e-5,-1.2274858062634918e-8,6.50394252361549e-4,4.524034632505981e-5,-1.2212820673742356e-8,6.507402898474811e-4,4.510081644081227e-5,-1.2158498221920027e-8,6.511662941424877e-4,4.503501619399875e-5,-1.2126476181320007e-8,6.516409652377725e-4,4.507883196177047e-5,-1.2129687005367259e-8,6.521158333795178e-4,4.525065636203942e-5,-1.2175577965498676e-8,6.525322031476455e-4,4.553941364164363e-5,-1.2261726884082065e-8,6.528365381010586e-4,4.5896913451435045e-5,-1.2372957541494924e-8,6.53001864278318e-4,4.6243075736359524e-5,-1.2482966177543175e-8,6.530450153429226e-4,4.6489294263523875e-5,-1.2562182212005331e-8,6.530262302326049e-4,4.657300931178719e-5,-1.2589338662501737e-8,6.530266241761063e-4,4.6484341852986244e-5,-1.2560253186849565e-8,6.531153745404709e-4,4.626789168937222e-5,-1.248839206681805e-8,6.533259500794602e-4,4.600025166059354e-5,-1.2397689341809364e-8,6.536518626923442e-4,4.5759473698595974e-5,-1.2312978138197302e-8,6.540578644141293e-4,4.56028117197643e-5,-1.2253084886290816e-8,6.544960449519266e-4,4.555825704891566e-5,-1.222809841334969e-8,6.549192256583115e-4,4.562646405711048e-5,-1.2239671643138295e-8,6.552892641813089e-4,4.578752220519903e-5,-1.2282737836356728e-8,6.555809511761707e-4,4.6008638879196065e-5,-1.23475952409882e-8,6.557831063329746e-4,4.625097547136351e-5,-1.2421941128098137e-8,6.558981448308248e-4,4.647540239116749e-5,-1.2492798538365653e-8,6.559406151232579e-4,4.664739366488725e-5,-1.2548313680324879e-8,6.55934795368779e-4,4.674108669115587e-5,-1.2579299722569738e-8,6.559114262674878e-4,4.674234926529412e-5,-1.258037528172128e-8,6.559037475636952e-4,4.6650576798607184e-5,-1.2550589153337167e-8,6.559431799480559e-4,4.647890047352641e-5,-1.2493483386171588e-8,6.560551490320222e-4,4.625272895401807e-5,-1.241665830734056e-8,6.562554736211841e-4,4.6006843480568736e-5,-1.2330965549949725e-8,6.565475621712678e-4,4.5781298533340715e-5,-1.224938677601268e-8,6.569205673771478e-4,4.561626701972796e-5,-1.2185538559539806e-8,6.573487109405446e-4,4.554580590585966e-5,-1.2151659149246088e-8,6.577924153502072e-4,4.5590415220543125e-5,-1.215594635662814e-8,6.58202593113294e-4,4.574881097857109e-5,-1.2199412084801173e-8,6.585297262397721e-4,4.59909687918636e-5,-1.2273096298199133e-8,6.587382425042407e-4,4.62568085760598e-5,-1.2357324481940705e-8,6.588231495329708e-4,4.646624084061321e-5,-1.2425073606254522e-8,6.588204978599106e-4,4.65431768960108e-5,-1.2450244405357208e-8,6.588012287440477e-4,4.644637290291428e-5,-1.2418191579088436e-8,6.588458419334591e-4,4.61899779128904e-5,-1.2332619928155143e-8,6.590119357198074e-4,4.5838877755827045e-5,-1.2214031205022718e-8,6.593137391720427e-4,4.548068499544168e-5,-1.2090617955505468e-8,6.597236153319567e-4,4.519227164557173e-5,-1.1987544773090963e-8,6.601895628610029e-4,4.5018724180246425e-5,-1.1920237507966108e-8,6.606554423138694e-4,4.49697296954195e-5,-1.189308702067798e-8,6.610749674083071e-4,4.502738150794323e-5,-1.1901620274760557e-8,6.614178803084616e-4,4.515738862713096e-5,-1.1935726383931564e-8,6.616706357616994e-4,4.531887849385159e-5,-1.1982572911828448e-8,6.61834447382716e-4,4.547133072107415e-5,-1.2028824379413137e-8,6.6192264137107e-4,4.5579126378920714e-5,-1.2062283892577649e-8,6.619580115031964e-4,4.561475770029697e-5,-1.2073180904243843e-8,6.619700433900955e-4,4.556135838574398e-5,-1.2055197467963607e-8,6.61991699576438e-4,4.5414661343623503e-5,-1.200620365179172e-8,6.620555712945934e-4,4.51840896179602e-5,-1.1928622796913211e-8,6.621894741458482e-4,4.489240920507422e-5,-1.182931385336294e-8,6.624119923538018e-4,4.457342997377879e-5,-1.1718880084197724e-8,6.627287685916333e-4,4.4267655432898346e-5,-1.1610397059841187e-8,6.631303288208212e-4,4.401622188040044e-5,-1.1517614629584648e-8,6.635920520441031e-4,4.3853814799379214e-5,-1.1452739383809711e-8,6.640766309640293e-4,4.3801500136949246e-5,-1.1423990223408127e-8,6.645391547065707e-4,4.3860465762502585e-5,-1.1433213609765761e-8,6.649348907757294e-4,4.400781803244625e-5,-1.1474022268078109e-8,6.652295738743438e-4,4.4196208170768975e-5,-1.1531237312247409e-8,6.654109062286146e-4,4.435975285734818e-5,-1.1582666541464982e-8,6.654978651706966e-4,4.442827675775156e-5,-1.1603994416442983e-8,6.655421492594667e-4,4.434891282437948e-5,-1.1576365369570233e-8,6.656163939754637e-4,4.410816482066763e-5,-1.1494114352982963e-8,6.657897957674164e-4,4.3742356818358154e-5,-1.136844192019311e-8,6.661014873919342e-4,4.332714263267976e-5,-1.1223980436229123e-8,6.66546435586102e-4,4.294919512763321e-5,-1.1089453851181167e-8,6.670813088959861e-4,4.267547632709114e-5,-1.0987569771282318e-8,6.676444956798761e-4,4.2535713727573955e-5,-1.0929181332560628e-8,6.681774843805674e-4,4.252258156620681e-5,-1.0913107238000703e-8,6.686384044883153e-4,4.260325002735994e-5,-1.0929587800350869e-8,6.690062161390295e-4,4.2733346818073974e-5,-1.0964592948012124e-8,6.692787368457985e-4,4.286787118068754e-5,-1.1003310653399214e-8,6.694682707915127e-4,4.296777011126571e-5,-1.1032406940396475e-8,6.695972389198812e-4,4.300322240539698e-5,-1.1041321064106932e-8,6.696946149272839e-4,4.295523829967347e-5,-1.1023008875669534e-8,6.697929196037282e-4,4.2816698354687566e-5,-1.0974419442589062e-8,6.699251733474295e-4,4.2593196764431914e-5,-1.0896807753560433e-8,6.701212865700194e-4,4.230341044442153e-5,-1.0795842637994127e-8,6.704037174690174e-4,4.1978221761531796e-5,-1.0681328919295532e-8,6.707828559139265e-4,4.1657672615155404e-5,-1.0566288547495148e-8,6.712532690016723e-4,4.138524242901553e-5,-1.0465216530512158e-8,6.717922865944109e-4,4.119981360746378e-5,-1.0391550497627238e-8,6.723621835534646e-4,4.112674104581725e-5,-1.0354712996658229e-8,6.729163674503193e-4,4.117028254115718e-5,-1.0357404924622589e-8,6.734087601805087e-4,4.1309743555585105e-5,-1.0393953428156289e-8,6.738045432664134e-4,4.150094656252346e-5,-1.0450378613876328e-8,6.740899326696811e-4,4.168357203370962e-5,-1.0506544084907395e-8,6.742784623792691e-4,4.1793849405908306e-5,-1.0540362360195925e-8,6.744112537778521e-4,4.178074134045985e-5,-1.053345924363471e-8,6.745493044657425e-4,4.1621948675312874e-5,-1.0476951591107518e-8,6.747577135709221e-4,4.1334207987166106e-5,-1.0375304924468307e-8,6.750854372839487e-4,4.097200972504231e-5,-1.0246168788815136e-8,6.755482329271165e-4,4.0612262569480024e-5,-1.0115334350837037e-8,6.761231653952755e-4,4.032957409188221e-5,-1.0008413784011982e-8,6.767578521833027e-4,4.017301604488647e-5,-9.94290139609733e-9,6.773894310269758e-4,4.015465619698559e-5,-9.924065754328441e-9,6.779636072244319e-4,4.025271194279116e-5,-9.945684323589636e-9,6.784462992592076e-4,4.042426218751692e-5,-9.994032077050076e-9,6.788262531519046e-4,4.0619750895181834e-5,-1.0052621713449427e-8,6.791114670866537e-4,4.0793953317949755e-5,-1.0105937498144301e-8,6.793233103813246e-4,4.091197852871128e-5,-1.0141630257049476e-8,6.794909850969935e-4,4.0951453051865014e-5,-1.01514585939184e-8,6.7964728168145e-4,4.090274064307937e-5,-1.0131510062344522e-8,6.798254076015645e-4,4.076859742149239e-5,-1.0082138915684628e-8,6.800561699820016e-4,4.0563850495158245e-5,-1.0007849266961698e-8,6.8036477449427e-4,4.031492566409186e-5,-9.917132870207206e-9,6.807668440871827e-4,4.0058407100975396e-5,-9.822042726828585e-9,6.812639721347429e-4,3.98374389784475e-5,-9.737104678895134e-9,6.818400995093161e-4,3.9695020030860256e-5,-9.677186556046806e-9,6.824608377364019e-4,3.966437272967973e-5,-9.65429089058683e-9,6.830778514977682e-4,3.975846050622824e-5,-9.673896804332269e-9,6.8363893699842e-4,3.996251016407234e-5,-9.732153955509115e-9,6.841017372567231e-4,4.023361206932423e-5,-9.815394137449953e-9,6.844466228191916e-4,4.05092582535884e-5,-9.902727164968086e-9,6.846838738110617e-4,4.072297495515305e-5,-9.971213593928136e-9,6.848523051199315e-4,4.082220466885166e-5,-1.000201594026922e-8,6.850095982123903e-4,4.07828469698932e-5,-9.98560223372568e-9,6.852171873960667e-4,4.0616222783899834e-5,-9.924483469796086e-9,6.855238737488718e-4,4.036653532224773e-5,-9.832728989987601e-9,6.859526224257744e-4,4.00993290741107e-5,-9.732322816114245e-9,6.86494446675017e-4,3.988386503340198e-5,-9.647264291981038e-9,6.871115650576727e-4,3.977452661168896e-5,-9.597109977300679e-9,6.877489646437295e-4,3.979728759741124e-5,-9.592045225736865e-9,6.883501673843535e-4,3.994563772478752e-5,-9.631095222420986e-9,6.888714062386018e-4,4.018638516815171e-5,-9.70376889018204e-9,6.89289773006254e-4,4.047168422173579e-5,-9.79400284884246e-9,6.896042371432542e-4,4.075196513064055e-5,-9.884614283434994e-9,6.898314601928995e-4,4.0985699460782386e-5,-9.960814485912439e-9,6.899994707481199e-4,4.114457896454388e-5,-1.0012195088317796e-8,6.901416346331935e-4,4.1214864630885974e-5,-1.0033353714839723e-8,6.902920197616812e-4,4.119656099349532e-5,-1.0023683572674945e-8,6.904821165138293e-4,4.1101881144250444e-5,-9.986848350330236e-9,6.907382638650003e-4,4.09537582206849e-5,-9.930264533573738e-9,6.910790024415842e-4,4.0784383529647454e-5,-9.864646068425661e-9,6.915118287645734e-4,4.06330723894299e-5,-9.803388502339166e-9,6.92029478921974e-4,4.054225759251511e-5,-9.761330963984282e-9,6.926069404711696e-4,4.055042383207215e-5,-9.752392841996608e-9,6.93201577440324e-4,4.068187369966381e-5,-9.785963135087253e-9,6.937591702126083e-4,4.0935603885594335e-5,-9.86281521804032e-9,6.942270330740719e-4,4.1278405821690475e-5,-9.972398042232453e-9,6.945712632534799e-4,4.164815702606528e-5,-1.0093706764041374e-8,6.947908016139201e-4,4.196965425274466e-5,-1.0200641875276863e-8,6.949204861200494e-4,4.217816671559534e-5,-1.027018519806173e-8,6.950204845917e-4,4.2240436893643125e-5,-1.0289782773011855e-8,6.951568783835051e-4,4.2163991349505506e-5,-1.0260761389728324e-8,6.953820071952732e-4,4.1992296890793167e-5,-1.0196951522017627e-8,6.957214881833488e-4,4.1789873918597023e-5,-1.0119904592446122e-8,6.961704254910497e-4,4.162399139921554e-5,-1.0052855248199617e-8,6.966977464138914e-4,4.154851515582117e-5,-1.0015196278929336e-8,6.972559483814732e-4,4.159322790104321e-5,-1.0018554243928807e-8,6.977931798100247e-4,4.1759927789965654e-5,-1.006500579411969e-8,6.982647541256812e-4,4.202510292476047e-5,-1.0147554437825793e-8,6.986416504509654e-4,4.23477429452799e-5,-1.0252547579380231e-8,6.989144432942709e-4,4.267979568978907e-5,-1.0363254734980224e-8,6.990924889111561e-4,4.297633660441667e-5,-1.046354978955787e-8,6.991995765864698e-4,4.3203125469473766e-5,-1.0540778184890215e-8,6.992679525856361e-4,4.334055988722916e-5,-1.0587341630078698e-8,6.993324737511327e-4,4.338433788379723e-5,-1.0601042222300012e-8,6.994259422448656e-4,4.33439373540044e-5,-1.0584573537885036e-8,6.995758178822197e-4,4.324016014019141e-5,-1.0544655239898046e-8,6.998018846283525e-4,4.310255497934784e-5,-1.049116419505745e-8,7.001142366953494e-4,4.296687167505949e-5,-1.0436353487376878e-8,7.00511078834245e-4,4.28720812612912e-5,-1.0393964239501379e-8,7.009763426032131e-4,4.285598693783195e-5,-1.0377799290857615e-8,7.014781075470884e-4,4.294835757893481e-5,-1.0399281482030315e-8,7.01969994354906e-4,4.316142500987284e-5,-1.0463892261942207e-8,7.023982919714376e-4,4.3479848296496525E-05,-1.0567290124078954e-8,7.027162843902773e-4,4.385542505735799e-5,-1.0693127635927223e-8,7.029027821209852e-4,4.42135354664673e-5,-1.0815191406563102e-8,7.029758681401383e-4,4.44744496722845e-5,-1.0904987723913586e-8,7.029914590549362e-4,4.458263269534113e-5,-1.0942205658178163e-8,7.030240973959722e-4,4.4528749813272105e-5,-1.0922540209312683e-8,7.031394395161471e-4,4.435182467687107e-5,-1.0858532246731884e-8,7.033730001998939e-4,4.412187581728143e-5,-1.0773708033050758e-8,7.037236525719877e-4,4.391449186565976e-5,-1.0694038600834027e-8,7.041603691418619e-4,4.378961991431415e-5,-1.0640801646843702e-8,7.046353875274154e-4,4.378031259963003e-5,-1.0626632482199593e-8,7.050976569019387e-4,4.3890906265389334e-5,-1.0654550090175343e-8,7.055033512381783e-4,4.4101463726791514e-5,-1.0719012226212606e-8,7.058225832089542e-4,4.4375368649487437e-5,-1.0808140470310517e-8,7.060425584939559e-4,4.4667972118194066e-5,-1.0906544945457309e-8,7.061676354241381e-4,4.4934992978476056e-5,-1.0998328320161188e-8,7.062167941862384e-4,4.513963638656883e-5,-1.1069817830506132e-8,7.062192461146077e-4,4.525758094198104e-5,-1.1111586225981603e-8,7.062091365135665e-4,4.527941172781372e-5,-1.1119497270185845e-8,7.062203187254132e-4,4.521057587191405e-5,-1.1094762027694266e-8,7.062819845440831e-4,4.5069391812404094e-5,-1.1043233702560278e-8,7.06415505665796e-4,4.488393907460559e-5,-1.0974313413837001e-8,7.066323612634319e-4,4.4688540962570335e-5,-1.089978106738531e-8,7.069327966070445e-4,4.452012245181196e-5,-1.0832652650027417e-8,7.073048809528734e-4,4.4414291049901125e-5,-1.0785940512482935e-8,7.077239303819673e-4,4.4400593182769026e-5,-1.0771010723654536e-8,7.081530282662858e-4,4.449628480384157e-5,-1.0795218004047385e-8,7.08546309372772e-4,4.4698728013663695e-5,-1.0858860998889045e-8,7.088570074624559e-4,4.497837061391854e-5,-1.0952277710884579e-8,7.090511764918637e-4,4.527680031930541e-5,-1.1054882078469456e-8,7.091242875412201e-4,4.551603875633128e-5,-1.1138494306429178e-8,7.091120498076681e-4,4.562208888687946e-5,-1.117598713005094e-8,7.090846177539748e-4,4.5555482629709526e-5,-1.1152408119707443e-8,7.091216217038918e-4,4.533143658656323e-5,-1.1072207380177586e-8,7.092802036001695e-4,4.501504148607371e-5,-1.0957523637321026e-8,7.095747795025035e-4,4.469379194735881e-5,-1.0838617797559788e-8,7.099779924341384e-4,4.4444886939645104e-5,-1.0742641317809363e-8,7.104372322708001e-4,4.431417690490606e-5,-1.0686428868332595e-8,7.108944427121056e-4,4.43116119214771e-5,-1.067478403156329e-8,7.113007184917924e-4,4.441806234799192e-5,-1.0702470480375884e-8,7.11623679367533e-4,4.459632083759559e-5,-1.0757592826290675e-8,7.118492538786992e-4,4.480161570626685e-5,-1.0824953711808661e-8,7.11980233791131e-4,4.4989876558258635e-5,-1.0888886188899312e-8,7.120332870788396e-4,4.512373743613871e-5,-1.093553525218388e-8,7.120351830951165e-4,4.517671189813642e-5,-1.0954618391336977e-8,7.12018506314901e-4,4.513573773315998e-5,-1.094058962873492e-8,7.12017114163592e-4,4.500208629716573e-5,-1.0893112309757543e-8,7.120616914124563e-4,4.47905968840482e-5,-1.0816818974571956e-8,7.121758530794824e-4,4.452730583824109e-5,-1.0720449941183935e-8,7.12373225808455e-4,4.424582850797638e-5,-1.0615582948149321e-8,7.126557056969058e-4,4.3983020894276823E-05,-1.0515185840291802e-8,7.130128748690027e-4,4.377430370445033e-5,-1.0432097453514521e-8,7.134225026408814e-4,4.364884043657226e-5,-1.0377410518766734e-8,7.138521296875519e-4,4.3624612316220915e-5,-1.0358662531311387e-8,7.142621087199356e-4,4.370335181858926e-5,-1.0377769717223068e-8,7.146110340123279e-4,4.386580901383108e-5,-1.0428929632440784e-8,7.148644843579355e-4,4.406916289330847e-5,-1.0497305281474699e-8,7.150068229220568e-4,4.424991700273873e-5,-1.0559887164612516e-8,7.150530524366479e-4,4.4336178298709344e-5,-1.0590042672540263e-8,7.15053734810595e-4,4.42704276374271e-5,-1.056605287956476e-8,7.150846291680763e-4,4.403576931514396e-5,-1.0480847359923442e-8,7.152198511851885e-4,4.3670120179829765e-5,-1.0347183403858284e-8,7.155008744882165e-4,4.325529287265698e-5,-1.019372183871818e-8,7.159202063701489e-4,4.288442453165478e-5,-1.0053486378649688e-8,7.164288382090401e-4,4.262714020159595e-5,-9.95164253828637e-9,7.169595712173114e-4,4.2511112636761016e-5,-9.899008498589871e-9,7.174506599694499e-4,4.2524020942925516e-5,-9.892540841677029e-9,7.178598144621892e-4,4.2627404619268514e-5,-9.91983987587705e-9,7.181678446769699e-4,4.27721963699476e-5,-9.964266310840572e-9,7.183759126586623e-4,4.291045343841636e-5,-1.0008908875743132e-8,7.18500405594647e-4,4.300234497131943e-5,-1.0039122755238085e-8,7.185677828556197e-4,4.30196320106107e-5,-1.0044007543963475e-8,7.186101042079086e-4,4.294717412168661e-5,-1.001723346601736e-8,7.186610533817944e-4,4.278335317154585e-5,-9.957406051808767e-9,7.18752168284341e-4,4.253964376045135e-5,-9.867997924772748e-9,7.189091853091514e-4,4.2239192867652126e-5,-9.756827287293615e-9,7.191486680453425e-4,4.191412441845834e-5,-9.635062646698978e-9,7.194753833185204e-4,4.1601472907260915e-5,-9.515794554155215e-9,7.198809710473828e-4,4.1338056243998875e-5,-9.412302783608438e-9,7.203442861506658e-4,4.115483206636226e-5,-9.33615368049298e-9,7.208335901116579e-4,4.107136650050428e-5,-9.295250483512817e-9,7.21310582686931e-4,4.109113767836152e-5,-9.292009746461441e-9,7.217361374829578e-4,4.1198376722348027e-5,-9.321908690989147e-9,7.220776248483091e-4,4.135721706930838e-5,-9.372781644989014e-9,7.223174798075731e-4,4.151444248885548e-5,-9.42550576306746e-9,7.224616572947125e-4,4.160760778234224e-5,-9.456878589667109e-9,7.225448756233372e-4,4.157965702183735e-5,-9.445137808270311e-9,7.226279081272899e-4,4.139838628719147e-5,-9.377400707335786e-9,7.22782831518834e-4,4.107397411941798e-5,-9.256348015631858e-9,7.230679109607896e-4,4.066348908937088e-5,-9.10200491377539e-9,7.235030324353299e-4,4.025454393631868e-5,-8.94585670514005e-9,7.240604349135902e-4,3.993307278447048e-5,-8.819235976789946e-9,7.246770474161983e-4,3.9752475639384204e-5,-8.74220271896425e-9,7.25280167562206e-4,3.972032945361145e-5,-8.71863631377646e-9,7.258112499168408e-4,3.980545137139982e-5,-8.738490452126625e-9,7.262379795707331e-4,3.995588791311808e-5,-8.783922245220665e-9,7.265545698200255e-4,4.011659749582939e-5,-8.83541706972929e-9,7.267755339873465e-4,4.024105833074878e-5,-8.875936197311278e-9,7.269279845271264e-4,4.029652987094112e-5,-8.892976574019021e-9,7.270451450548466e-4,4.026516750216042e-5,-8.879235354411228e-9,7.271616327638609e-4,4.014326976173892e-5,-8.832575722188413e-9,7.273099551577129e-4,3.993996905439593e-5,-8.755682817923396e-9,7.275175140387404e-4,3.9675705000669275e-5,-8.65552457776656e-9,7.278037036096325e-4,3.938023732409923e-5,-8.542589315450922e-9,7.281770882665271e-4,3.9089662899162196e-5,-8.429786504232964e-9,7.286331360591269e-4,3.884197223268564e-5,-8.330888585721539e-9,7.291533677555678e-4,3.867120217350354e-5,-8.258515599405508e-9,7.297067738756757e-4,3.860090558086704e-5,-8.221844583454592e-9,7.302539666578742e-4,3.8638182704821905e-5,-8.224400957513714e-9,7.307538962269374e-4,3.876983049784128e-5,-8.262452625865695e-9,7.311722092434422e-4,3.896204742743471e-5,-8.324571705863522e-9,7.314897527645678e-4,3.9164524285314036e-5,-8.3927927962959e-9,7.317094414493923e-4,3.931904431090589e-5,-8.445566122962981e-9,7.318594845103638e-4,3.937201425400375e-5,-8.462392890762826e-9,7.319908066651358e-4,3.928917259530832e-5,-8.42948659848983e-9,7.321669790530052e-4,3.906885058053107e-5,-8.345010771919948e-9,7.324469928605998e-4,3.8748281868431985e-5,-8.22172192559327e-9,7.328651675913713e-4,3.839739804730499e-5,-8.084889760603431e-9,7.334166535442571e-4,3.809868218835139e-5,-7.964969302770367e-9,7.340570593855317e-4,3.791967584824037e-5,-7.88746795733556e-9,7.347180158889726e-4,3.789093829132095e-5,-7.864694610367329e-9,7.35330978895752e-4,3.799999059049531e-5,-7.893257941684946e-9,7.358473549973659e-4,3.820188625552753e-5,-7.95762224232136e-9,7.36247320859895e-4,3.8438037090302746e-5,-8.036768609057542e-9,7.365375874964547e-4,3.865343008418449e-5,-8.110432460280896e-9,7.367432165561168e-4,3.880698844533339e-5,-8.163005946748622e-9,7.368986354207467e-4,3.8875061863166875e-5,-8.185035831936871e-9,7.370405983510341e-4,3.885061218849014e-5,-8.173156102939069e-9,7.372035548293182e-4,3.8740714185469477e-5,-8.129326522098361e-9,7.374166923744471e-4,3.8563901864775714e-5,-8.05990590565618e-9,7.377017025310008e-4,3.834777065479802e-5,-7.974743340507008e-9,7.38070622142274e-4,3.8126512150255426e-5,-7.886238130470689e-9,7.385236155784789e-4,3.7937678633434624e-5,-7.80816935910351e-9,7.390471872462534e-4,3.7817479218706066e-5,-7.754041850862354e-9,7.39613896733862e-4,3.779443638936219e-5,-7.734832514708064e-9,7.401848806728716e-4,3.788221163124379e-5,-7.75635096994411e-9,7.407160397257579e-4,3.807351780711525e-5,-7.816863716772319e-9,7.411675017627108e-4,3.83377342940748e-5,-7.905958120875292e-9,7.415142919555773e-4,3.8624442718095306e-5,-8.005552813609206e-9,7.417549191637427e-4,3.887335159084064e-5,-8.093346705012602e-9,7.419146387750976e-4,3.902868594401002e-5,-8.14809060536792e-9,7.420415466924796e-4,3.9054260051663074e-5,-8.155305505607456e-9,7.421957712450767e-4,3.894484020912841e-5,-8.111780096870276e-9,7.424340938914088e-4,3.873006125504485e-5,-8.02737573183699e-9,7.42793899355561e-4,3.846880194086285e-5,-7.923264854219435e-9,7.432812620141698e-4,3.823437454532318e-5,-7.82664187542525e-9,7.438677441412036e-4,3.809405520022208e-5,-7.763143694430137e-9,7.444981839003461e-4,3.808955287654943e-5,-7.749409650064826e-9,7.451073361538792e-4,3.822586805072566e-5,-7.788599612458683e-9,7.456389114710405e-4,3.847282903416642e-5,-7.870587084328902e-9,7.460595325375159e-4,3.8777620572790256e-5,-7.97634017132848e-9,7.463633344203971e-4,3.90818258416466e-5,-8.084164382373755e-9,7.465679154850866e-4,3.9335967587656355e-5,-8.175197120055171e-9,7.467056704916095e-4,3.950769387356267e-5,-8.236653653676395e-9,7.468147802209882e-4,3.958364471163843e-5,-8.262748556136644e-9,7.469323302937862e-4,3.956728801685668e-5,-8.25406326448367e-9,7.470900224543724e-4,3.947522924674709e-5,-8.21625230612436E-09,7.473117786206921e-4,3.9333574246693434e-5,-8.15868872939971e-9,7.476122444451707e-4,3.917483364161524e-5,-8.093285230637837e-9,7.479954258414936e-4,3.9035053263447094e-5,-8.033430521419e-9,7.484532171378763e-4,3.8950407831258895e-5,-7.992775209673987e-9,7.489642810589979e-4,3.895244597740534e-5,-7.983527194781351e-9,7.494944525688141e-4,3.906165830601274e-5,-8.014060469529422e-9,7.500002746529996e-4,3.9280174203610924e-5,-8.086078232861302e-9,7.504369055959056e-4,3.9586013083436254e-5,-8.192238951203957e-9,7.507699029120727e-4,3.993257848288867e-5,-8.31570446363603e-9,7.509875768828624e-4,4.025651618290501e-5,-8.432888245201967e-9,7.511084739632404e-4,4.049377684511111e-5,-8.519412651981377e-9,7.511792950330379e-4,4.059903216808652e-5,-8.557453460506901e-9,7.51262580818493e-4,4.056073182061699e-5,-8.541545996409175e-9,7.514184424281146e-4,4.040549547796316e-5,-8.480474453332119e-9,7.516871944073718e-4,4.019036204144835e-5,-8.394680466844668e-9,7.520786833722089e-4,3.998634873333417e-5,-8.31041577663291e-9,7.525708694622507e-4,3.985920059382761e-5,-8.252707967838128e-9,7.531170338310043e-4,3.985300180192867e-5,-8.239147244363815e-9,7.536588526186752e-4,3.998070036708499e-5,-8.276008258796359e-9,7.541413990265233e-4,4.022342678605548e-5,-8.357544078241255e-9,7.54525863865062e-4,4.05380201242533e-5,-8.468421354961952e-9,7.547967008719969e-4,4.0869815523018587e-5,-8.588335122366214e-9,7.549619635945633e-4,4.116635887970118e-5,-8.697206288555848e-9,7.550480101612701e-4,4.1388047065979665e-5,-8.779387588935774e-9,7.550913554910073e-4,4.151357045899603e-5,-8.825967420826681e-9,7.551305842522161e-4,4.154031612162445e-5,-8.835132581061215e-9,7.552001895864037e-4,4.148139165922518e-5,-8.811164119887681e-9,7.55326828426084e-4,4.1361260126847735e-5,-8.762820923675844e-9,7.555274925687125e-4,4.12114438663705e-5,-8.70170647458801e-9,7.558087203055979e-4,4.1066871518413693e-5,-8.640891785799208e-9,7.561661037027524e-4,4.09626519740274e-5,-8.593743073534889e-9,7.565837873294337e-4,4.0930595848213674e-5,-8.572674913245856e-9,7.570343023719693e-4,4.0994708019895345e-5,-8.58746909968765e-9,7.574798432523166e-4,4.116526167701248e-5,-8.642942450707564e-9,7.578766597453443e-4,4.143219506580418e-5,-8.736227826676889e-9,7.581839700006578e-4,4.1760430647830195e-5,-8.85472089607003e-9,7.583769007372872e-4,4.209143613341075e-5,-8.97646260497755e-9,7.584593350854895e-4,4.235492678888832e-5,-9.074535079715516e-9,7.584693326984003e-4,4.249010700473473e-5,-9.125223368184249e-9,7.58470988460264e-4,4.246860282595259e-5,-9.116849569321388e-9,7.585337351705025e-4,4.230716762507732e-5,-9.054700673282172e-9,7.587083994551931e-4,4.206260627237825e-5,-8.959261900385463e-9,7.590114511903744e-4,4.181169099700161e-5,-8.858889905876627e-9,7.594231618304254e-4,4.162653730197789e-5,-8.780808674797843e-9,7.598974502542237e-4,4.155567159126383e-5,-8.744091746991325e-9,7.603770701441117e-4,4.161547883315085e-5,-8.756261200644959e-9,7.608083072352005e-4,4.1791395294714015e-5,-8.813314074637931e-9,7.611518311466191e-4,4.204568142158321e-5,-8.902175671211233e-9,7.613885521055572e-4,4.232834360337178e-5,-9.004492689727314e-9,7.615206177534766e-4,4.258845489577387e-5,-9.100837967244961e-9,7.61568322961355e-4,4.2783817580922045e-5,-9.174529986143186e-9,7.615641863347267e-4,4.288746563387388e-5,-9.214382010099968e-9,7.615458421224065e-4,4.289030424473849e-5,-9.215981555878051e-9,7.615493776879412e-4,4.280020160465099e-5,-9.181526671744856e-9,7.616042486398303e-4,4.26385797343642e-5,-9.118594656166542e-9,7.61730210455046e-4,4.2435795379432153e-5,-9.03837554219817e-9,7.61936050598561e-4,4.222646210520275e-5,-8.953874020503188e-9,7.622194897874063e-4,4.204535712200338e-5,-8.87837427683221e-9,7.625676250645121e-4,4.1923882039288665e-5,-8.824153587401546e-9,7.629576171601758e-4,4.188660389994002e-5,-8.801211913123232e-9,0.00076335781686778445,4.194730410322629e-5,-8.815719768604965e-9,7.637301806589586e-4,4.210424149540176e-5,-8.868024377405146e-9,7.640353866362429e-4,4.233530176320579e-5,-8.950502771608857e-9,7.642418368971225e-4,4.259542541961727e-5,-9.046295943306457e-9,7.643379706413167e-4,4.282042794217269e-5,-9.130652554192153e-9,7.643436783033333e-4,4.29411494887276e-5,-9.176459932444947e-9,7.643128225427903e-4,4.290719105443412e-5,-9.163573390875584e-9,7.643198908851147e-4,4.27107298651634e-5,-9.088104238947882e-9,7.644329712891078e-4,4.23954390951903e-5,-8.965872528852865e-9,7.646866633436667e-4,4.204199444422708e-5,-8.826934866527333e-9,7.650704200976676e-4,4.17372669333947e-5,-8.704057045239502e-9,7.655369936842672e-4,4.154471093131832e-5,-8.621706108552556e-9,7.660227565342318e-4,4.1489461027239444e-5,-8.590446292021975e-9,7.664679096395077e-4,4.155968867214678e-5,-8.60719762281304e-9,7.668295552510263e-4,4.1717667344140696e-5,-8.65897698447111e-9,7.670867797953163e-4,4.191334217832278e-5,-8.727615499482921e-9,7.672399375245228e-4,4.209611415617943e-5,-8.794011363368658e-9,7.673067113076542e-4,4.2223374435902354e-5,-8.841422117427617e-9,7.673167461421355e-4,4.226589688328241e-5,-8.857772846673981e-9,7.673057770691697e-4,4.221051342646373e-5,-8.837001052988211e-9,7.673098402283448e-4,4.206030802892788e-5,-8.779391079594279e-9,7.673601781277127e-4,4.18326361185597e-5,-8.690943756311483e-9,7.674793660680467e-4,4.1555511526051535e-5,-8.58199870451685e-9,7.676789770593695e-4,4.126301892957958e-5,-8.465429763661297e-9,7.679588364412986e-4,4.0990480338567314e-5,-8.354768907767848e-9,7.683075907368027e-4,4.077001331558171e-5,-8.262536838002104e-9,7.687041577968274e-4,4.062672035544098e-5,-8.198843955832656e-9,7.691197778494181e-4,4.057536670843389e-5,-8.170131786714939e-9,7.69520695114969e-4,4.061730481647757e-5,-8.17788778750396e-9,7.698719236009533e-4,4.073758088267318e-5,-8.217289031700045e-9,7.701429410375053e-4,4.090284202188645e-5,-8.276083307954193e-9,7.703158959245221e-4,4.106194157234824e-5,-8.334583011415699e-9]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json new file mode 100644 index 0000000..ed067a1 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":12000,"numberOfSamples":1000,"samples":[7.703954280162467e-4,4.1152337826266915e-5,-8.368108119871265e-9,7.704163319665058e-4,4.111507788730868e-5,-8.352989399151336e-9,7.704421464154993e-4,4.091720944904923e-5,-8.275542352848811e-9,7.705485092428724e-4,4.05724562623383e-5,-8.140252864992262e-9,7.707939985966856e-4,4.014524130054576e-5,-7.971353086916377e-9,7.71193504222048e-4,3.972957759547678e-5,-7.80469566907836e-9,7.717115053607008e-4,3.9412072212316335e-5,-7.673655282248528e-9,7.722792203821364e-4,3.924081276169691e-5,-7.597334312683116e-9,7.728228927422465e-4,3.921592014800571e-5,-7.576902082499595e-9,7.732865636479628e-4,3.930044006202883e-5,-7.599469965429773e-9,7.736417360467977e-4,3.9439508716162856e-5,-7.645015059481085e-9,7.738862021781628e-4,3.9577299627356655e-5,-7.692550022805146e-9,7.740375781067476e-4,3.9667776867413035e-5,-7.724156675043192e-9,7.741257583521852e-4,3.9679734947780095e-5,-7.727075835179889e-9,7.741863193020013e-4,3.959810915098842e-5,-7.69451274251175e-9,7.742552430288779e-4,3.9423328672554246e-5,-7.625696494804441e-9,7.743646142276804e-4,3.9169548057952974e-5,-7.525395913350832e-9,7.745390796275454e-4,3.886191912277735e-5,-7.4029175785362335e-9,7.747931611691499e-4,3.853296073940333e-5,-7.2706518736087654e-9,7.751296404933389e-4,3.821816871539602e-5,-7.14230656603222e-9,7.75539277044951e-4,3.795118644851318e-5,-7.03102083378519e-9,7.760019965895818e-4,3.7759097444815016e-5,-6.947589780698099e-9,7.764894114568546e-4,3.7658393030000226e-5,-6.898960011119357e-9,7.769683935525284e-4,3.765194567776308e-5,-6.887041206138857e-9,7.77405468600329e-4,3.7727187339015794e-5,-6.907852463658269e-9,7.777719367210197e-4,3.7855696317654865e-5,-6.951096001721251e-9,7.780497715515111e-4,3.799465132874708e-5,-7.000433114460731e-9,7.782381033839588e-4,3.809125972066116e-5,-7.035036448543083e-9,7.783590131789634e-4,3.809174285674149e-5,-7.033143881376136e-9,7.784595953194529e-4,3.795570392998253e-5,-6.97793131163529e-9,7.786057068107846e-4,3.767368510457848e-5,-6.864708360881282e-9,7.78863996118783e-4,3.728037531656348e-5,-6.706310810691064e-9,7.792756265371022e-4,3.685219468959701e-5,-6.532225465482031e-9,7.798348397283327e-4,3.648330405006227e-5,-6.379231745544197e-9,7.804875774404013e-4,3.624915992465997e-5,-6.277220111165846e-9,7.811532791147602e-4,3.6178446406365796e-5,-6.238248751260801e-9,7.817563618614648e-4,3.624887846641678e-5,-6.254752293779451e-9,7.822492066349364e-4,3.6404572752001926e-5,-6.305999039127454e-9,7.826184621073835e-4,3.658034238992342e-5,-6.367226110433409e-9,7.828786448897808e-4,3.672020080806501e-5,-6.416659701095429e-9,7.830611528872669e-4,3.678622737434062e-5,-6.439002339589363e-9,7.83204269111392e-4,3.6760045223355876e-5,-6.4262288080890655e-9,7.83346116265409e-4,3.6640538094929564e-5,-6.376990645821899e-9,7.835202865150684e-4,3.644047816686522e-5,-6.2955425776532835e-9,7.837530585274323e-4,3.618322636043522e-5,-6.190565289506217e-9,7.840613538345039e-4,3.5899528490766174e-5,-6.073894295370791e-9,7.844511692520874e-4,3.56240404001225e-5,-5.959079652820332e-9,7.849166362486965e-4,3.5391266889247926e-5,-5.859734881539029e-9,7.854401461991078e-4,3.5230870470624936e-5,-5.787703349498604e-9,7.85994077008628e-4,3.516280326863614e-5,-5.751203618221222e-9,7.865443681490566e-4,3.519312942196211e-5,-5.753224515569559e-9,7.870557121649313e-4,3.531147041257569e-5,-5.790462278713693e-9,7.874977374834473e-4,3.549084781661851e-5,-5.8530751899271e-9,7.878512977067683e-4,3.5690381696580056e-5,-5.925483082828172e-9,7.88113902130303e-4,3.586089281430252e-5,-5.9883395159535995e-9,7.883033069918536e-4,3.595324388575569e-5,-6.021732124830117e-9,7.884579960410935e-4,3.5929083510116866e-5,-6.009544248256601e-9,7.886327975757129e-4,3.577280030598468e-5,-5.9444715378693474e-9,7.888879780100181e-4,3.550164046195876e-5,-5.832367391647236e-9,7.8927192870103e-4,3.51687389345516e-5,-5.693704861085736e-9,7.898018205719634e-4,3.4853326117873307e-5,-5.559814012217819e-9,7.904515896948133e-4,3.4636846056963114e-5,-5.463410169207496e-9,7.911567365586743e-4,3.457328365667514e-5,-5.426733674861982e-9,7.91836723351535e-4,3.4669207955395765e-5,-5.453450884163303e-9,7.924237202788972e-4,3.488486649734166e-5,-5.5288267094573905e-9,7.928824548961669e-4,3.515389152880303e-5,-5.627269436403621e-9,7.932136820118008e-4,3.540839736028799e-5,-5.722097489506235e-9,7.934449059141124e-4,3.5597063748403574e-5,-5.792673659357338e-9,7.936168882573704e-4,3.569210775996662e-5,-5.827295173952732e-9,7.937723217445624e-4,3.568791359332356e-5,-5.822884193637893e-9,7.93948800831336e-4,3.559595323883983e-5,-5.783216738249511e-9,7.941754088277288e-4,3.543933477989003e-5,-5.716920600537979e-9,7.944713320113322e-4,3.524834071649752e-5,-5.635744464363097e-9,7.948452117223364e-4,3.505690102972568e-5,-5.5531067119024055e-9,7.952946621025866e-4,3.489936168856889e-5,-5.482741290558481e-9,7.958060134527227e-4,3.4806877971801684e-5,-5.437234302862502e-9,7.963548356244236e-4,3.4803064153757236e-5,-5.4263155715433935e-9,7.969080873912969e-4,3.4899187129560714e-5,-5.454979598662578e-9,7.974285582348853e-4,3.50899868901018e-5,-5.521799771482021e-9,7.978815595783528e-4,3.53517139310461e-5,-5.618028402827992e-9,7.982428279621153e-4,3.5643920541599894e-5,-5.728107579266846e-9,7.985056927078104e-4,3.591576113045357e-5,-5.8319638327390805e-9,7.986852279968585e-4,3.6116131940588234e-5,-5.908914090462572e-9,7.988176580367524e-4,3.620557989303193e-5,-5.942429308719043e-9,7.989544079791842e-4,3.616720864975489e-5,-5.924668401918435e-9,7.991513656849079e-4,3.601375362426653e-5,-5.859607617947738e-9,7.994550428476274e-4,3.5788266373648105e-5,-5.763648882378041e-9,7.99888593020665e-4,3.5556588356057684e-5,-5.662870662485801e-9,8.004419741134302e-4,3.539153188530321e-5,-5.586797190304597e-9,8.010710698253013e-4,3.5351857597047766e-5,-5.559879219657929e-9,8.017086298947224e-4,3.546304659868737e-5,-5.5935163200738305e-9,8.022846671415112e-4,3.5708577068191366e-5,-5.6822096378184195e-9,8.027481145977655e-4,3.603666410112383e-5,-5.805964874906324e-9,8.03080122412991e-4,3.637928126071499e-5,-5.9377647708489825e-9,8.032943410005627e-4,3.66738652272459e-5,-6.0522761139605395e-9,8.034269249007324e-4,3.687843167960255e-5,-6.132033879229968e-9,8.035230519879982e-4,3.697653334579644e-5,-6.1696217748146e-9,8.036257380118303e-4,3.6974206946549126e-5,-6.166656508896828e-9,8.037692352128727e-4,3.689330257374978e-5,-6.131278442552063e-9,8.039764427338145e-4,3.6764723596644845e-5,-6.075520263494496e-9,8.042586457584074e-4,3.662315128777011e-5,-6.013183162784273e-9,8.046160819092535e-4,3.6503272989771094e-5,-5.9582713714511854e-9,8.050385231957502e-4,3.643678976682334e-5,-5.9237473528870625e-9,8.055057955743184e-4,3.644934285412461e-5,-5.920288595123292e-9,8.05988792090945e-4,3.655676717208342e-5,-5.95478706400642e-9,8.064519656770659e-4,3.676075426661275e-5,-6.028574833606665e-9,8.068582848986766e-4,3.7045013088594046e-5,-6.1357749440002495e-9,8.071769237677392e-4,3.737399900933667e-5,-6.26261951082692e-9,8.073924491758243e-4,3.769659412573422e-5,-6.388754892200863e-9,8.075124666197616e-4,3.7955997865778476e-5,-6.491115253060035e-9,8.075698393218493e-4,3.8104352666225344e-5,-6.549812033282912e-9,8.07616918266904e-4,3.811755258854625e-5,-6.5542030392740885e-9,8.077125028108634e-4,3.8004458985452114e-5,-6.506795533466793e-9,8.079056000982033e-4,3.780654452780539e-5,-6.4233624926436094e-9,8.082214227720043e-4,3.758774308343327e-5,-6.3291414262697445e-9,8.086539871520523e-4,3.741775103981728e-5,-6.252328710187585e-9,8.091672759069606e-4,3.7353752588214316e-5,-6.216752306565877e-9,8.097045052884347e-4,3.742558962134468e-5,-6.235686559437506e-9,8.10203012993122e-4,3.7628423384850995e-5,-6.308502277607127e-9,8.106106251449948e-4,3.792510731679957e-5,-6.421212634856097e-9,8.108985322821864e-4,3.8257644162653106e-5,-6.550833196339432e-9,8.11066628774171e-4,3.856383400569566e-5,-6.6720638631456955e-9,8.111401568994287e-4,3.8793232686939005e-5,-6.763879623403471e-9,8.111600098107639e-4,3.89173073971411e-5,-6.813868422693099e-9,8.111711107269196e-4,3.893182181341246e-5,-6.8194280235812216e-9,8.112128636990658e-4,3.8852913529948424e-5,-6.786357912765378e-9,8.1131356935384e-4,3.8710088334482416e-5,-6.726121364291298e-9,8.114885730374386e-4,3.853908980505929e-5,-6.652976845483148e-9,8.117408037071133e-4,3.837625006855202e-5,-6.5816575047402725e-9,8.120622864326276e-4,3.825456404102906e-5,-6.5257403552766695e-9,8.124357145823514e-4,3.82008938099246e-5,-6.496493824519633e-9,8.128358550233297e-4,3.823344877076438e-5,-6.50185004606853e-9,8.132312194083829e-4,3.8358874558908814e-5,-6.54518991660995e-9,8.135869354214777e-4,3.856887726212377e-5,-6.623869747140799e-9,8.138698868858205e-4,3.8837323813125146e-5,-6.727869263055802e-9,8.140566018155787e-4,3.91199837876055e-5,-6.83950023112515e-9,8.141427039935174e-4,3.935979230186433e-5,-6.9354371500791985e-9,8.14150262656473e-4,3.949946847388898e-5,-6.9918722744796985e-9,8.141277285832854e-4,3.949960053306327e-5,-6.991994835378283e-9,8.141388942367572e-4,3.935526219250151e-5,-6.93289197521611e-9,8.142430879224422e-4,3.910207785679162e-5,-6.8281493368907015e-9,8.144749296276758e-4,3.880686864520632e-5,-6.704223833237992e-9,8.1483306083408e-4,3.854646680042599e-5,-6.592073096421126e-9,8.152821053230805e-4,3.838435896231063e-5,-6.5178631025860026e-9,8.157651947313659e-4,3.835428291873892e-5,-6.49629781434836e-9,8.162207450781731e-4,3.845478693315215e-5,-6.528135674230928e-9,8.16597684699937e-4,3.865376270796675e-5,-6.60159629155916e-9,8.168657158061926e-4,3.889947743847334e-5,-6.69644446442954e-9,8.170194049574676e-4,3.913422953807289e-5,-6.7893400986806185e-9,8.17076394641524e-4,3.930728020730456e-5,-6.85914255437804e-9,8.170710316645813e-4,3.938449175604022e-5,-6.891061862959034e-9,8.170454569870298e-4,3.935306732398158e-5,-6.878882809994513e-9,8.170405722878981e-4,3.9221105681444305e-5,-6.825033584806315e-9,8.1708896023377e-4,3.901310215359767e-5,-6.7388979016364186e-9,8.172108407223391e-4,3.87633764776707e-5,-6.634171213681119e-9,8.174130175522054e-4,3.850938229687362e-5,-6.526094414707984e-9,8.176899834395489e-4,3.8286205079792516e-5,-6.4291520891420515e-9,8.180260959470649e-4,3.812267075009407e-5,-6.3554492104173685e-9,8.183979894619872e-4,3.803873780290355e-5,-6.313637763487015e-9,8.187769116206049e-4,3.804351923521837e-5,-6.308093725118056e-9,8.191312129866966e-4,3.813337134793312e-5,-6.338063937256885e-9,8.194296942684052e-4,3.8289922698924704e-5,-6.396704673018225e-9,8.196467238419641e-4,3.847879781237149e-5,-6.470354270719354e-9,8.197695294206804e-4,3.8650968100779566e-5,-6.538921130269099e-9,8.19806513649201e-4,3.874943540462814e-5,-6.5785960033068025e-9,8.197929489727498e-4,3.8723134804595094e-5,-6.5676898771434025e-9,8.197883002079536e-4,3.854613941350416e-5,-6.4947236728071645e-9,8.198609759695765e-4,3.823403064971981e-5,-6.365297279203114e-9,8.200636944477346e-4,3.784594464219167e-5,-6.203000857389413e-9,0.000820411436661712,3.746667085519243e-5,-6.042172936215794e-9,8.208749674671344e-4,3.7176223092774686e-5,-5.915617415305801e-9,8.213932248000017e-4,3.7022992160726405e-5,-5.843759010230899e-9,8.218961027605576e-4,3.701275044446644e-5,-5.830076453078521e-9,8.223254904904929e-4,3.711435819021485e-5,-5.863118056849916e-9,8.226473843906112e-4,3.727482958449793e-5,-5.922239824745653e-9,8.228545590175748e-4,3.7435687186837764e-5,-5.983966399587255e-9,8.229627474394682e-4,3.7545885310616436e-5,-6.027176921838554e-9,8.230036090129152e-4,3.756990148797665e-5,-6.036554527428151e-9,8.230167806825249e-4,3.749138311092206e-5,-6.004372061981051e-9,8.230423185742567e-4,3.731317666393389e-5,-5.930818699795622e-9,8.231143493501816e-4,3.705449505134662e-5,-5.823063768625377e-9,8.23256553209646e-4,3.674606808012696e-5,-5.693352353058202e-9,8.234798189428454e-4,3.642429612693932e-5,-5.556571384393087e-9,8.237820413355269e-4,3.6125418828181186e-5,-5.427765212931279e-9,8.241496751844597e-4,3.588054059534543e-5,-5.320016584338888e-9,8.245603883153199e-4,3.571199342395666e-5,-5.242923452023574e-9,8.249861688108776e-4,3.563099782478505e-5,-5.201638270344065e-9,8.253965549120751e-4,3.563626588694151e-5,-5.1962726434097535e-9,8.257620082869455e-4,3.571323197160154e-5,-5.221486300041849e-9,8.260577695440884e-4,3.583385451251235e-5,-5.266230045559657e-9,8.262687299902825e-4,3.595753207818218e-5,-5.313924512584801e-9,8.263954241197148e-4,3.6034603798458864e-5,-5.343784865943491e-9,8.264598903887887e-4,3.601442540484084e-5,-5.334201311502159e-9,8.265081515702821e-4,3.585914554288692e-5,-5.268642284511385e-9,8.26604385596247e-4,3.556101693181241e-5,-5.143074426032549e-9,8.268132192939278e-4,3.515537353926115e-5,-4.971501142912185e-9,8.271738744510702e-4,3.471782861774951e-5,-4.7848532086355065e-9,8.276795586094963e-4,3.4340322196190036e-5,-4.621118053741745e-9,8.282766891716653e-4,3.4095760039524445e-5,-4.5108069909192165e-9,8.288861464980373e-4,3.401140563924369e-5,-4.465996728964361e-9,8.29433355059079e-4,3.406500941237964e-5,-4.4785874372255114e-9,8.298704729894737e-4,3.420103631857123e-5,-4.526688711410476e-9,8.301833096396713e-4,3.4353709967328716e-5,-4.583790454622501e-9,8.303862100769367e-4,3.446546478614344e-5,-4.626173157513306e-9,8.305118250621173e-4,3.449687603771798e-5,-4.6370194576684565e-9,8.306008664699762e-4,3.442941009341466e-5,-4.607762309491803e-9,8.306940322478887e-4,3.426386875947961e-5,-4.537752547464339e-9,8.308263261536525e-4,3.401682527001027e-5,-4.4330652748613145e-9,8.310232819304966e-4,3.371620106257414e-5,-4.304822699303797e-9,8.312987280593526e-4,3.339641097448233e-5,-4.167187973746248e-9,8.31653979219806e-4,3.309335744578138e-5,-4.0351952674026125e-9,8.32078417238307e-4,3.283958122742209e-5,-3.9226242940869606e-9,8.325514069439921e-4,3.26599656110982e-5,-3.8401496329485945e-9,8.330453353948687e-4,3.256846904668967e-5,-3.793977723288974e-9,8.335293651888821e-4,3.2566169333962955e-5,-3.785049055168084e-9,8.33973516225973e-4,3.264061001145597e-5,-3.808740687729704e-9,8.343528580041156e-4,3.2766396288388346e-5,-3.855005633134729e-9,8.346517248312861e-4,3.290709657118518e-5,-3.9089874063833434e-9,8.348679389439184e-4,3.301872928211123e-5,-3.95230090306051e-9,8.350167359300278e-4,3.305558632640454e-5,-3.965393684369818e-9,8.351331058149185e-4,3.297932755397413e-5,-3.9314416005053e-9,8.352699660831031e-4,3.277126367429032e-5,-3.8417220291605366e-9,8.354889117471341e-4,3.244507340953231e-5,-3.7012047953805833e-9,8.358419691208809e-4,3.205326833172769e-5,-3.531440109697599e-9,8.36348763283404e-4,3.167867290599403e-5,-3.3670502139274996e-9,8.369813197061595e-4,3.140782451156133e-5,-3.244586908337016e-9,8.376693061030729e-4,3.129669563122999e-5,-3.1881493598681102e-9,8.383263658012633e-4,3.134863920078477e-5,-3.200051972071662e-9,8.388826052155265e-4,3.151766556410064e-5,-3.2619908468242225e-9,8.393050072888866e-4,3.173205489277276e-5,-3.344664087646371e-9,8.395988757541516e-4,3.192172100776251e-5,-3.419003963066664e-9,8.397963286098811e-4,3.203621272799185e-5,-3.46362815353071e-9,8.399416326313247e-4,3.205061679819683e-5,-3.4674080518768483e-9,8.400794992423449e-4,3.1963263817541386e-5,-3.4287495907215916e-9,8.402479103687121e-4,3.179002909330446e-5,-3.3534888117140308e-9,8.404745687451004e-4,3.155830071326884e-5,-3.2525737289196144e-9,8.407754646399417e-4,3.130173895136262e-5,-3.1399368209433314e-9,8.41154541388092e-4,3.1055764720891035e-5,-3.0305415711644196e-9,8.416041280544131e-4,3.085345156272672e-5,-2.9385364426828023e-9,8.421061656017975e-4,3.072164283076384e-5,-2.8755213785209154e-9,8.426344113814458e-4,3.067736638925079e-5,-2.8490015368691745e-9,8.431577953645121e-4,3.072498523450466e-5,-2.8612024549307127e-9,8.436447971117692e-4,3.085470440573325e-5,-2.9084547718786858e-9,8.440683720702881e-4,3.1042869672780824e-5,-2.981273689818602e-9,8.444108321936859e-4,3.125426055813509e-5,-3.065198477158535e-9,8.446680629527056e-4,3.144642492558669e-5,-3.142451937358192e-9,8.448524507159502e-4,3.15759057443261e-5,-3.194437005461156e-9,8.449938340091091e-4,3.160610588444374e-5,-3.2050494314965393e-9,8.451374660071655e-4,3.151638576719877e-5,-3.1646699302547115e-9,8.453375715697237e-4,3.1311130994121866e-5,-3.0742611477808833e-9,8.456453986738488e-4,3.1025780835067146e-5,-2.94819557957702e-9,8.46092653379528e-4,3.0725045293271956e-5,-2.81368862948315e-9,8.466753220872281e-4,3.0488818598972834e-5,-2.704879810332908e-9,8.473471109643087e-4,3.038640446510119e-5,-2.6518278127619258e-9,8.480305696476147e-4,3.0449024854662588e-5,-2.668679548466348e-9,8.486441257401572e-4,3.065628903781551e-5,-2.7477040330430985e-9,8.491313375173792e-4,3.094576582096809e-5,-2.8631317709746885e-9,8.494766164139384e-4,3.123946697058364e-5,-2.9822273668107125e-9,8.497020423260754e-4,3.1471127846907625e-5,-3.0767866876898872e-9,8.498521170161459e-4,3.16017891014394e-5,-3.129775126187276e-9,8.499770409409726e-4,3.1621830699592834e-5,-3.1363362066964675e-9,8.501209480543094e-4,3.1544720456021056e-5,-3.1013685836141294e-9,8.503161532077362e-4,3.1398399640952655e-5,-3.036097487468567e-9,8.505816546173871e-4,3.1217759899263695e-5,-2.9550165687006546e-9,8.509236995527479e-4,3.103916188717301e-5,-2.8735662703891047e-9,8.513369862483362e-4,3.0896507607776705e-5,-2.8063743424389867e-9,8.518060495699486e-4,3.081805794501351e-5,-2.7657886014572145e-9,8.523069735798167e-4,3.082345930368575e-5,-2.7605358876292335e-9,8.528098318936862e-4,3.0920864735206294e-5,-2.79447672381635e-9,8.532822991542584e-4,3.110457416848017e-5,-2.8656065993726486e-9,8.536945524033567e-4,3.1354085988535145e-5,-2.965633018689591e-9,8.540249574865114e-4,3.163548969538209e-5,-3.080489694586202e-9,8.542654720972812e-4,3.190574453586719e-5,-3.192028596537508e-9,8.544254041595665e-4,3.211974836915866e-5,-3.28090202256463e-9,8.545322236510779e-4,3.2239278828225266e-5,-3.3303148632010992e-9,8.546285733291039e-4,3.224218246448245e-5,-3.330007151957699e-9,8.547652672831671e-4,3.2129878781118014e-5,-3.279649312494011e-9,8.549907364400541e-4,3.193111420486313e-5,-3.1907193571916717e-9,8.553382926807156e-4,3.1699773222277685e-5,-3.0858345714949625e-9,8.558140144434115e-4,3.150496484434305e-5,-2.9946769942906606e-9,8.563897321781071e-4,3.1413455736156216e-5,-2.9464704670555277e-9,8.570061787799461e-4,3.1468304822318046e-5,-2.960646903904852e-9,8.575886586831152e-4,3.167199701229673e-5,-3.039317862345337e-9,8.580709942206223e-4,3.198346246211776e-5,-3.1656988018487623e-9,8.584171135061124e-4,3.233248147476386e-5,-3.310099393214403e-9,8.586297960336273e-4,3.264478971416768e-5,-3.440645754903185e-9,8.587438963877701e-4,3.286515489171303e-5,-3.5332321749884526e-9,8.58810255130539e-4,3.2968897888927814e-5,-3.5765784450704622e-9,8.588794391843271e-4,3.2960802961293873e-5,-3.5719305847910328e-9,8.589911009932855e-4,3.2866533850223576e-5,-3.529577019202463e-9,8.591697919005255e-4,3.272249454060714e-5,-3.4646650245504987e-9,8.594251730433313e-4,3.256765883619841e-5,-3.393767811079765e-9,8.597541389353542e-4,3.2438210292960187e-5,-3.3325521813766835e-9,8.601432315592983e-4,3.236427582707883e-5,-3.2942803106507433e-9,8.605707893509768e-4,3.236765846754327e-5,-3.2887387933129255e-9,8.610090272757816e-4,3.245976837958149e-5,-3.3212886990489386e-9,8.614266330715411e-4,3.2639496241471747e-5,-3.3919234343927197e-9,8.617925265638105e-4,3.289145361493536e-5,-3.4944824234170423e-9,8.620810773671341e-4,3.318566240946574e-5,-3.616455097562243e-9,8.62278291344594e-4,3.3480062508905175e-5,-3.7399625948591e-9,8.623874686730959e-4,3.372681857367478e-5,-3.844371487446432e-9,8.624320722870976e-4,3.38822001208865e-5,-3.910489310686052e-9,8.624536695365803e-4,3.391801974913249e-5,-3.925509323340507e-9,8.625041693741896e-4,3.3831145103447495e-5,-3.887217720697746e-9,8.626336863724894e-4,3.364749744285424e-5,-3.805912914971897e-9,8.628771728569449e-4,3.34184061309152e-5,-3.703085242205503e-9,8.632436901356097e-4,3.3209472451514874e-5,-3.606852247536402e-9,8.637117164869609e-4,3.30843353744748e-5,-3.5450791305814132e-9,8.64232526978409e-4,3.30874054017447e-5,-3.537852982664476e-9,8.647417259564168e-4,3.32305264787094e-5,-3.591449619924816e-9,8.651764977358669e-4,3.348834402295054e-5,-3.695963620118213e-9,8.654934113410493e-4,3.380514974584113e-5,-3.827962144226022e-9,8.65680227216288e-4,3.411174050293928e-5,-3.957644664897803e-9,8.657570330287688e-4,3.4346041766830635e-5,-4.057808965225653e-9,8.657669387277931e-4,3.446932313815453e-5,-4.11101586076775e-9,8.657613435022625e-4,3.4472588411529344e-5,-4.112539581686109e-9,8.657862135868558e-4,3.4373094380466114e-5,-4.069050533975013e-9,8.658735763707832e-4,3.4205060581144676e-5,-3.99475967321788e-9,8.660388852455758e-4,3.400943296480929e-5,-3.907091687927469e-9,8.66282466493992e-4,3.3825844969993364e-5,-3.823219696797409e-9,8.665927137849105e-4,3.3687619719216236e-5,-3.7578388388344435e-9,8.669494024009601e-4,3.361913423273398e-5,-3.7219299984715987e-9,8.673264891657124e-4,3.363439881774626e-5,-3.7220625465320145e-9,8.676945418145927e-4,3.373592694579208e-5,-3.7598487309122184e-9,8.680234235964354e-4,3.391351714465576e-5,-3.831368929963179e-9,8.682859972296471e-4,3.4143297256214016e-5,-3.926691202132316e-9,8.684632880644983e-4,3.4388163647136244e-5,-4.029972466578756e-9,8.685506814790997e-4,3.460127638371885e-5,-4.120889818604067e-9,8.685633840062911e-4,3.4734023180121915e-5,-4.178058611548191e-9,8.685380720783138e-4,3.4748252417980764e-5,-4.184372534042753e-9,8.685276349437916e-4,3.462966914812959e-5,-4.132901756292709e-9,8.685883291320915e-4,3.439669502663824e-5,-4.030854924441111e-9,8.687628382465881e-4,3.409933619952682e-5,-3.8992420211352555e-9,8.690658895057307e-4,3.3806647123293056e-5,-3.767634596223998e-9,8.694785799556857e-4,3.358696397155016e-5,-3.66578227162126e-9,8.69953568550893e-4,3.348840676249508e-5,-3.6152232829612797e-9,8.704286241585501e-4,3.352635120659295e-5,-3.623705146793659e-9,8.708434233092473e-4,3.36810197345908e-5,-3.6838087593563796e-9,8.711544860856722e-4,3.390464015558857e-5,-3.775680273187482e-9,8.713445725476498e-4,3.4135193673201416e-5,-3.872743220397276e-9,8.714246913321904e-4,3.4312587501143965e-5,-3.948669842514471e-9,8.714288385999942e-4,3.4392832306213484e-5,-3.983673438771948e-9,8.714035709437477e-4,3.4356588349835174e-5,-3.968454991877816e-9,8.713959401397892e-4,3.4210390500048455e-5,-3.904979500162979e-9,8.714434314935408e-4,3.398142071965159e-5,-3.80439632081465e-9,8.715682144280527e-4,3.370866502664886e-5,-3.6833035835006632e-9,8.717760142029626e-4,3.343373250814609e-5,-3.5597712152619653e-9,8.720583485322628e-4,3.3193644320049306e-5,-3.450143545804329e-9,8.723963305223968e-4,3.301640385510928e-5,-3.367013852901416e-9,8.727645877754009e-4,3.2918942751948914e-5,-3.318240190622122e-9,8.731346053164378e-4,3.290646426016532e-5,-3.3065975355143806e-9,8.734775263631105e-4,3.297227361968222e-5,-3.329661479803068e-9,8.737669246598247e-4,3.3097659941762863e-5,-3.3797021541565744e-9,8.739822501713752e-4,3.325204966262417e-5,-3.443668277316694e-9,8.741134429392175e-4,3.339441456133996e-5,-3.5037068763647772e-9,8.741663973729802e-4,3.347758868121113e-5,-3.538992779628764e-9,8.741674829281171e-4,3.3457101736264556e-5,-3.529614543781381e-9,8.741636709228396e-4,3.33044797175946e-5,-3.4624919926690294e-9,8.742144615830622e-4,3.302135267114131e-5,-3.337668517116169e-9,8.743747932608298e-4,3.264687423555464e-5,-3.1716545924770886e-9,8.746743840366114e-4,3.2251051243278426e-5,-2.9946081022665746e-9,8.751039489192597e-4,3.1913364921373566e-5,-2.841130150424048e-9,8.75616678903275e-4,3.169573821909346e-5,-2.738595983860198e-9,8.761445007935473e-4,3.162302292091491e-5,-2.698649906049282e-9,8.766203447195945e-4,3.167892308982781e-5,-2.715236885002451e-9,8.769963987697803e-4,3.18159383463042e-5,-2.7686104110067445e-9,8.772531062745815e-4,3.197221978649029e-5,-2.8323654947714774e-9,8.773990475854998e-4,3.2088299096119665e-5,-2.880564943726866e-9,8.774645762292172e-4,3.211954673233677e-5,-2.893205151464858e-9,8.774924155916585e-4,3.204298846969703e-5,-2.8593905607603026e-9,8.775277330636137e-4,3.185874387139908e-5,-2.778242446816188e-9,8.776094585559394e-4,3.158700840416259e-5,-2.657838435817586e-9,8.777641128132043e-4,3.126183960920271e-5,-2.5126548703569532e-9,8.78002877757191e-4,3.092341017264447e-5,-2.360210638245288e-9,8.78321864386743e-4,3.061051760107952e-5,-2.217716237311034e-9,8.787048132667152e-4,3.0354696413936292e-5,-2.0993733631963004e-9,8.791271129207127e-4,3.0176554948077197e-5,-2.0146576508170057e-9,8.795600526842855e-4,3.0084265265720063e-5,-1.9675904842138486e-9,8.799746005764623e-4,3.0073592700195904e-5,-1.9567272155798592e-9,8.803445685727407e-4,3.0128701933306585e-5,-1.9754931411414064e-9,8.806494724082241e-4,3.0223295863434567e-5,-2.012635250546257e-9,8.808775707256542e-4,3.0322170015652122e-5,-2.052817626545346e-9,8.810294629751855e-4,3.0383874541022066e-5,-2.077700737209661e-9,8.811219817814094e-4,3.0365784932921254e-5,-2.068140259899549e-9,8.811907881742122e-4,3.0232911390513986e-5,-2.0081342888122047e-9,8.812885190182023e-4,2.997035224275941e-5,-1.8904615726488688e-9,8.814748050867232e-4,2.9595882363843328e-5,-1.7223897108962145e-9,8.817972325406356e-4,2.9164896341324755e-5,-1.5279575596742727e-9,8.822694105023639e-4,2.8759323793384683e-5,-1.343146342028477e-9,8.828590048460752e-4,2.846005103322195e-5,-1.203784176843767e-9,8.834961316970444e-4,2.8315408404152892e-5,-1.1317019817736651e-9,8.840994293836644e-4,2.83238474756633e-5,-1.1270381711241277e-9,8.846048503517724e-4,2.8439563876848128e-5,-1.1705107836514342e-9,8.849825261434277e-4,2.859423427913567e-5,-1.2327153363012424e-9,8.852377405673897e-4,2.872082247503333e-5,-1.2843809606697235e-9,8.854014350719654e-4,2.876976020388615e-5,-1.303411303612948e-9,8.855175691600622e-4,2.8715569658327886e-5,-1.277894686911527e-9,8.856319414654461e-4,2.8556383656666185e-5,-1.2061264571813115e-9,8.857841196699158e-4,2.8309570284204513e-5,-1.0949624616496077e-9,8.86002414496257e-4,2.800577749822175e-5,-9.574157297751806e-10,8.863013254260068e-4,2.7682541703841347e-5,-8.099261480403505e-10,8.866810883604368e-4,2.737801278175877e-5,-6.695408320630273e-10,8.871291034948231e-4,2.712535762590261e-5,-5.513048593649785e-10,8.876228817584209e-4,2.6948399119048687e-5,-4.661876242949888e-10,8.881339924077757e-4,2.6858865286951922e-5,-4.197713685400893e-10,8.886323956855838e-4,2.6855412138336997e-5,-4.1179225649502044e-10,8.890905424093482e-4,2.6924258581403914e-5,-4.3643441475982406e-10,8.89486876270744e-4,2.704096977561104e-5,-4.831197421077393e-10,8.898087302066524e-4,2.7172978043164845e-5,-5.375765842824722e-10,8.900547902185537e-4,2.7282747178927522e-5,-5.831513974124379e-10,8.902372653753913e-4,2.733186854749421e-5,-6.02542926548089e-10,8.903834851144673e-4,2.7286782595027556e-5,-5.803341451115104e-10,8.905356820182493e-4,2.712678713758405e-5,-5.066546828876249e-10,8.907466490935431e-4,2.6853822167289743e-5,-3.817222697006188e-10,8.910687379135351e-4,2.650095008026581e-5,-2.1981389275727818e-10,8.915358613141435e-4,2.613316302797963e-5,-4.974968918210426e-11,8.921441557986117e-4,2.583341569558239e-5,9.130127597938247e-11,8.928435576312597e-4,2.5673648601187617e-5,1.7077634639135572e-10,8.935508750856743e-4,2.5683679634147847e-5,1.7468326592194504e-10,8.941811428365587e-4,2.5837610180360195e-5,1.1381510218411522e-10,8.946793739990621e-4,2.6067113585673513e-5,1.8006901262402275e-11,8.950349091826171e-4,2.6291644820413183e-5,-7.717084794839584e-11,8.952750213494531e-4,2.6446389435700407e-5,-1.427663814093566e-10,8.954475970296075e-4,2.64960814946439e-5,-1.625988001066087e-10,8.956041887442954e-4,2.6435196735103513e-5,-1.334689640026147e-10,8.957887712051753e-4,2.6280905283114967e-5,-6.224871917615731e-11,8.960323226691599e-4,2.6064317323041538e-5,3.777765165941726e-11,8.963513575114935e-4,2.5822815459411318e-5,1.5017549800954496e-10,8.96748509792149e-4,2.5594124919428984e-5,2.5799083696445723e-10,8.972140957359525e-4,2.5411712108030967e-5,3.459131555119787e-10,8.97728398380985e-4,2.5301088813513795e-5,4.0208667445015245e-10,8.982646818886401e-4,2.5276973108559064e-5,4.19511702332487e-10,8.987928885022273e-4,2.5341491278246515e-5,3.969097854818967e-10,8.992838386101128e-4,2.548373838032777e-5,3.389148700251626e-10,8.997135067687896e-4,2.5680959581705512e-5,2.5551799630259e-10,9.000668011166033e-4,2.590128913974731e-5,1.6084571383571664e-10,9.003404075887244e-4,2.610773225553987e-5,7.143433854803536e-11,9.005444531271067e-4,2.626306035931546e-5,4.124552392039377e-12,9.00702826310028e-4,2.6335350498633444e-5,-2.636373164642357e-11,9.008518990331428e-4,2.6304027478397698e-5,-1.0173572691243059e-11,9.010369750715351e-4,2.616622985452215e-5,5.4685092455799334e-11,9.013053376731691e-4,2.5942528849006335e-5,1.5954350428825642e-10,9.016950534266347e-4,2.5679451672258137e-5,2.8372503804596007e-10,9.022205066966907e-4,2.544470577148632e-5,3.9657633063202955e-10,9.028595081446744e-4,2.5311299328910574e-5,4.6464848630157026e-10,9.035509621163673e-4,2.5331826054565013e-5,4.634519661365919e-10,9.042106403831823e-4,2.5513725417149697e-5,3.8884970955208253e-10,9.047617243836385e-4,2.5811755065389144e-5,2.60664002639359e-10,9.051639505218222e-4,2.614554976562279e-5,1.1486292999309726e-10,9.054243849394402e-4,2.6432431256007105e-5,-1.1230224109221291e-11,9.055864786501333e-4,2.6615750824420068e-5,-9.174245642919217e-11,9.057083348203511e-4,2.6675961252054152e-5,-1.1728835587695205e-10,9.05843511575355e-4,2.6625694545636095e-5,-9.286576972832296e-11,9.06030514980889e-4,2.649764658641052e-5,-3.258481232105302e-11,9.06290090659766e-4,2.6332711316700743e-5,4.5492394804177083e-11,9.066269079166894e-4,2.617147979221003e-5,1.230902666428942e-10,9.07032727485054e-4,2.6049140781842117e-5,1.8405636274430814e-10,9.074895537591257e-4,2.5992565692749985e-5,2.1580884693763228e-10,9.079725233622418e-4,2.601842289978903e-5,2.1034058494702972e-10,9.08452843161885e-4,2.6131794189518346e-5,1.649501949413581e-10,9.089011187176733e-4,2.632531969086917e-5,8.266582317282753e-11,9.092912509323934e-4,2.657930002330282e-5,-2.7811191372744197e-11,9.096046947811349e-4,2.686337600497953e-5,-1.5287896453951608e-10,9.098343835696975e-4,2.7140160235303376e-5,-2.756580777618742e-10,9.099874027396871e-4,2.737067976970732e-5,-3.7839683569915226e-10,9.100856080701482e-4,2.7521019033657425e-5,-4.4541806075215186e-10,9.101636727790192e-4,2.756915427471307e-5,-4.662024595936307e-10,9.102644580498961e-4,2.751076592587584e-5,-4.3810314345020306E-10,9.104319511252228e-4,2.736291054800073e-5,-3.681879685719245e-10,9.107022221916946e-4,2.7164432891512126e-5,-2.736553609265788e-10,9.110933354507029e-4,2.6971680885033756e-5,-1.800824904443576e-10,9.11596330532063e-4,2.6848117080263942e-5,-1.167738231171905e-10,9.121710507471927e-4,2.6847793958635906e-5,-1.0913815308381964e-10,9.12751534970597e-4,2.6996070209376236e-5,-1.6964949395235283e-10,9.132634636288651e-4,2.72756008370633e-5,-2.9115810444199527e-10,9.136492992958313e-4,2.762733566158342e-5,-4.471383736182009e-10,9.138892892803114e-4,2.797002314543524e-5,-6.005507786510418e-10,9.140064810409892e-4,2.8229735821653137e-5,-7.173953360843062e-10,9.140537060586121e-4,2.8363778381520954e-5,-7.777099880424133e-10,9.14091744347561e-4,2.8368259804342512e-5,-7.790964097262822e-10,9.141707165736832e-4,2.8270290432506036e-5,-7.332676996715194e-10,9.143209375298112e-4,2.811333903517838e-5,-6.595294780294835e-10,9.145523676781168e-4,2.7943782175206335e-5,-5.787922436801097e-10,9.148586524660526e-4,2.780218073489562e-5,-5.09645207598181e-10,9.15222213264884e-4,2.771907523928594e-5,-4.663750532641056e-10,9.156186000215372e-4,2.771356286516508e-5,-4.581833019385022e-10,9.160198239972885e-4,2.7793018214471577e-5,-4.889247071998724e-10,9.163971548837643e-4,2.795307226790254e-5,-5.570122799444724e-10,9.167240149473723e-4,2.8177711329907586e-5,-6.554310086134877e-10,9.169794235753807e-4,2.8439962674449603e-5,-7.720472188029496e-10,9.171519825482253e-4,2.870402885777489e-5,-8.905750008556582e-10,9.172436935254598e-4,2.8929649817970348e-5,-9.925419838939779e-10,9.172722940063046e-4,2.9078832692983632e-5,-1.0603291660817625e-9,9.172706400546866e-4,2.912409780548574e-5,-1.080924584550345e-9,9.17282157849279e-4,2.9056323329246427e-5,-1.0495469582952546e-9,9.17352548715972e-4,2.8889652042343435e-5,-9.719977617501207e-10,9.175193386587934e-4,2.8661331040972106e-5,-8.647637143988589e-10,9.178017998224793e-4,2.842566755332037e-5,-7.524533284368034e-10,9.181939299909826e-4,2.824278153652306e-5,-6.627971222401617e-10,9.186627846165465e-4,2.8164133229208014e-5,-6.200278774014088e-10,9.19153691738718e-4,2.8217986087638425e-5,-6.380459293784765e-10,9.196025451004935e-4,2.8398984740483134E-05,-7.153326477966576e-10,9.199531003263491e-4,2.8666337663424036e-5,-8.338087002295918e-10,9.201741950295597e-4,2.8953522843619235e-5,-9.631226655409933e-10,9.202698561839225e-4,2.918802920852016e-5,-1.0697405631849333e-9,9.202770539297086e-4,2.9313951870328424e-5,-1.1274657767908662e-9,9.20251788073042e-4,2.9307694253609973e-5,-1.1248038587933661e-9,9.202503631241845e-4,2.918064509705824e-5,-1.0663142394564279e-9,9.203142811661418e-4,2.897003743896867e-5,-9.68530131895985e-10,9.204634699590332e-4,2.8724513202568727e-5,-8.534492296718607e-10,9.206973132387841e-4,2.849110787091789e-5,-7.426352211365498e-10,9.209999773637789e-4,2.8307067355278376e-5,-6.534492842105844e-10,9.213465790289916e-4,2.8196472237938423e-5,-5.974035621587512e-10,9.21708293335506e-4,2.8169942280115928e-5,-5.798940312517992e-10,9.220560080914304e-4,2.8225631349565033e-5,-6.005462214024394e-10,9.223629986190541e-4,2.8350410654034294e-5,-6.536955210792199e-10,9.226073866112044e-4,2.8520935298446312e-5,-7.28851240962084e-10,9.227750120124014e-4,2.8705005688838147e-5,-8.113094184352923e-10,9.228628541636617e-4,2.886416079327547e-5,-8.833278120249603e-10,9.228823589672353e-4,2.895853283479903e-5,-9.263428574000358e-10,9.228611534120579e-4,2.8954410829763517e-5,-9.244525203760215e-10,9.22841094274703e-4,2.8833597004887607e-5,-8.687589669821464e-10,9.228711087655056e-4,2.860178543460586e-5,-7.612984631604381e-10,9.229952903879357e-4,2.8291928119182712e-5,-6.167002132570091e-10,9.232395355675018e-4,2.7959342967609063e-5,-4.600776629160696e-10,9.236018170315074e-4,2.766851040299726e-5,-3.211006337196332e-10,9.240504121843283e-4,2.7475443382623978e-5,-2.2596816610665073e-10,9.24531262399518e-4,2.741170749626898e-5,-1.8999789985040983e-10,9.249820629694834e-4,2.747542499218661e-5,-2.1326498107148244e-10,9.25348579660942e-4,2.7631811895541113e-5,-2.805432543382063e-10,9.255984900902482e-4,2.7822723222327646e-5,-3.6544697746303546e-10,9.257290496695094e-4,2.798233184373522e-5,-4.3755816439126784e-10,9.25766534088789e-4,2.80545120609564e-5,-4.705154590635174e-10,9.257576987930197e-4,2.800685278340508e-5,-4.4865598588417815e-10,9.257561138535627e-4,2.7837106293070436e-5,-3.701910247767966e-10,9.258080615404461e-4,2.757056376533481e-5,-2.4616627976356377e-10,9.259425348434525e-4,2.7250326470559132e-5,-9.609656809923689e-11,9.261676807511085e-4,2.6924824434891593e-5,5.773311606893498e-11,9.264731188036599e-4,2.663697142690499e-5,1.9528968966108854e-10,9.268356351407438e-4,2.6417432659609167e-5,3.019901995562894e-10,9.272255509647921e-4,2.6282152592361178e-5,3.6997091936557287e-10,9.276120574189009e-4,2.6232846291373425e-5,3.9797540595297546e-10,9.279670116931762e-4,2.6258881085469936e-5,3.9055441141759986e-10,9.282675227858236e-4,2.633942937784366e-5,3.570959163618194e-10,9.284980234511821e-4,2.644547284239765e-5,3.109050504872678e-10,9.286524796636579e-4,2.654193492234242e-5,2.6822927772623276e-10,9.287369625751979e-4,2.6590780100069592e-5,2.468431766251289e-10,9.287720369209947e-4,2.6556135305642376e-5,2.636822102111064e-10,9.287934339306461e-4,2.6412028824363202e-5,3.312264037819188e-10,9.288486997992517e-4,2.6151880961107663e-5,4.530300718778846e-10,9.289878720362526e-4,2.5796515725207018e-5,6.199146734068698e-10,9.292487589067231e-4,2.5395465656098757e-5,8.092647167352129e-10,9.29641666352082e-4,2.5017209649756432e-5,9.894516360464816e-10,9.301413876496481e-4,2.472917795980915e-5,1.1290141747255939e-9,9.306922559167429e-4,2.4575229989538544e-5,1.2070780979559616e-9,9.312251819721861e-4,2.4561109000296633e-5,1.2202059312944135e-9,9.316789667520669e-4,2.465414560968802e-5,1.1827604254879246e-9,9.320169043861123e-4,2.479571175444768e-5,1.1213819953507269e-9,9.322336847376593e-4,2.4919677271373376e-5,1.0666004249723868e-9,9.323526991819391e-4,2.496981318218703e-5,1.044792681412822e-9,9.324168167771345e-4,2.4911728305382368e-5,1.072537792680831e-9,9.324763341556606e-4,2.473779692662344e-5,1.1541348440936524e-9,9.32577287240139e-4,2.446550131433796e-5,1.2821529509168165e-9,9.327524775390439e-4,2.4130741138395573e-5,1.440358563370683e-9,9.330166395630526e-4,2.3778318046824064e-5,1.608044416470438e-9,9.333661039477023e-4,2.345210977652227e-5,1.7646106799430005e-9,9.337821762564567e-4,2.3187164366326925e-5,1.8933448565731633e-9,9.342366534787011e-4,2.3004991867956138e-5,1.983756984261391e-9,9.346977645863617e-4,2.2912152275451638e-5,2.0323646948176415e-9,9.351352665974508e-4,2.2901360219547865e-5,2.0422501912195693e-9,9.355241516458479e-4,2.2953966611580642e-5,2.021915505548688e-9,9.358471024062418e-4,2.3042848220487e-5,1.983917263664366e-9,9.360962029673838e-4,2.313526295966051e-5,1.9435240421953627e-9,9.362744148421519e-4,2.319579877368126e-5,1.9173555450183216e-9,9.363970340869479e-4,2.3190008396632788e-5,1.921714213936969e-9,9.364926985739199e-4,2.3089580081948874e-5,1.970175219873316e-9,9.366025595028989e-4,2.287954350737153e-5,2.070174683549589e-9,9.367754583789063e-4,2.256662486320555e-5,2.219009962619075e-9,9.370572543760401e-4,2.2185503816041416e-5,2.40080151825208e-9,9.374749898088448e-4,2.179746684581724e-5,2.5870254829646286e-9,9.380215496738124e-4,2.1476617739059208e-5,2.7428988022427817e-9,9.386504920238448e-4,2.1285143976963856e-5,2.8389345262250392e-9,9.392879545260637e-4,2.124847926412409e-5,2.8626284858923288e-9,9.398581363504856e-4,2.1344635824425707e-5,2.8236063659948714e-9,9.403092110193681e-4,2.1513973951784947e-5,2.749245885993131e-9,9.406269138130842e-4,2.1682634723939766e-5,2.67386501863676e-9,9.408323763286779e-4,2.178648157968665e-5,2.6275885831474924e-9,9.409696504997068e-4,2.1786146578814432e-5,2.6292808737827737e-9,9.410906514838015e-4,2.1671298131321062e-5,2.6844268786052037e-9,9.41242649635597e-4,2.145702236312698e-5,2.786633456564728e-9,9.414601509848395e-4,2.1176178630965497e-5,2.9210047073092557e-9,9.417610200086401e-4,2.0870608445111807e-5,3.0681179766648086e-9,9.421460370053103e-4,2.0582809873944577e-5,3.207899651127782e-9,9.426010936837508e-4,2.0348968697412414e-5,3.3229824926066307e-9,9.431012540259686e-4,2.0193985304551373e-5,3.401195641488044e-9,9.436158120570794e-4,2.012884842892798e-5,3.436951038320817e-9,9.441134784478598e-4,2.015031500623975e-5,3.4314859276191417e-9,9.44566950904901e-4,2.0242534645964484e-5,3.3921135298370826e-9,9.449563631171996e-4,2.0379982085524475e-5,3.330805785534591e-9,9.45271517348029e-4,2.0530961708450033e-5,3.2625023737391606e-9,9.455131621575188e-4,2.0661233197895548e-5,3.203395247216593e-9,9.456936234191719e-4,2.0737740900431553e-5,3.1692023079153e-9,9.458369007988554e-4,2.073272466669384e-5,3.1732674706314038e-9,9.459779040524844e-4,2.0628653770206123e-5,3.224233945190357e-9,9.461597634391267e-4,2.0424167988906754e-5,3.3231751090821356e-9,9.46427574458297e-4,2.014003684687474e-5,3.4606600272122213e-9,9.468173676227388e-4,1.98221812789624e-5,3.615192303367057e-9,9.473413942934375e-4,1.9537012097558103e-5,3.755318583394564e-9,9.479753457182548e-4,1.9355058402098106e-5,3.847349600926752e-9,9.486571399076209e-4,1.9325058394134616e-5,3.867688552958027e-9,9.493040520760504e-4,1.9450539767815956e-5,3.814066075128484e-9,9.498430651538646e-4,1.9684623094334385e-5,3.7081770948540923e-9,9.502378728614017e-4,1.994861501821484e-5,3.5870008241428506e-9,9.504975307118342e-4,2.01632840220824e-5,3.4880374073031084e-9,9.506654032765242e-4,2.0274709481559317e-5,3.437068799563959e-9,9.507989420812344e-4,2.0264365859063468e-5,3.4433449550727618e-9,9.509516863480496e-4,2.0145143002205663e-5,3.5013586813003237e-9,9.511626032896819e-4,1.9950604861647016e-5,3.595755007819909e-9,9.514523625841899e-4,1.972359867900281e-5,3.7065483148110366e-9,9.518240846294337e-4,1.9507126203245064e-5,3.813351896094841e-9,9.522662841079077e-4,1.933798514493866e-5,3.898421280054506e-9,9.527567177104721e-4,1.9242649321887765e-5,3.94873970416592e-9,9.532666534200279e-4,1.9234898009828817e-5,3.9573083496472175e-9,9.537653046836214e-4,1.931500888982162e-5,3.923656171525834e-9,9.542241491314553e-4,1.9470419469034043e-5,3.853573929853045e-9,9.546208269205008e-4,1.967778168597357e-5,3.758113485784791e-9,9.549422337944906e-4,1.990624356532854e-5,3.6519733720235854e-9,9.551864658672643e-4,2.012153016907811e-5,3.5515235649189295e-9,9.553635348866212e-4,2.029033148993112e-5,3.4727284456947125e-9,9.554949463176509e-4,2.0384734278047446e-5,3.429079651875691e-9,9.55612166139684e-4,2.03866030610309e-5,3.4295402733541126e-9,9.557537872596488e-4,2.029183687422643e-5,3.4764900665650733e-9,9.559608378031081e-4,2.0114246891201803e-5,3.563775485379721e-9,9.562694312086343e-4,1.988802000189864e-5,3.6753836672060575e-9,9.567005353306505e-4,1.9666425812314765e-5,3.785918859393363e-9,9.572485741343938e-4,1.951354653734905e-5,3.864486310112931e-9,9.57873847869679e-4,1.9487015195238054e-5,3.8829949935352816e-9,9.58506375185627e-4,1.961495423927636e-5,3.827353654574862e-9,9.590658554599388e-4,1.9878214338844435e-5,3.706183686441474e-9,9.59491778185771e-4,2.021167822462048e-5,3.5503480856677113e-9,9.597671996149698e-4,2.0528378965229346e-5,3.4014299519401243e-9,9.599217284447296e-4,2.0753552855409916e-5,3.295380207449077e-9,9.600140258223889e-4,2.084893939258985e-5,3.2508500223577976e-9,9.601071466008167e-4,2.081721898662703e-5,3.2670417811981256e-9,9.602500853369318e-4,2.0691028420511654e-5,3.3288768573415605e-9,9.604701387776805e-4,2.051709319339869e-5,3.4144264007709955e-9,9.60773545484276e-4,2.034297332174702e-5,3.501100421052396e-9,9.611500679665309e-4,2.0208786324005668e-5,3.569552864573399e-9,9.615783591656324e-4,2.014318881895291e-5,3.6056735200335207e-9,9.620307130834803e-4,2.0161937110386437e-5,3.6014269400379457e-9,9.62477113531018e-4,2.0267731706648574e-5,3.5550823882264824e-9,9.628889049217328e-4,2.0450864920827385e-5,3.4710012484743916e-9,9.632422415170349e-4,2.069066577730867e-5,3.3589647822421636e-9,9.635212754316284e-4,2.0957906935666852e-5,3.2329849290971195e-9,9.637208099389389e-4,2.1218360815741975e-5,3.1095519476630494e-9,9.638478893925641e-4,2.143740445538196e-5,3.0054061149790872e-9,9.639218361763492e-4,2.158517204251695e-5,2.9350831633136274e-9,9.639725275225862e-4,2.164161332623286e-5,2.9085171189180765e-9,9.64036920303166e-4,2.1600821946777073e-5,2.928960887667208e-9,9.641539462469475e-4,2.1473982466179215e-5,2.991503500896854e-9,9.643579665181983e-4,2.129029021121154e-5,3.0824929931979146e-9,9.646710825382556e-4,2.1095019009386883e-5,3.180304929063653e-9,9.650951414487477e-4,2.0943493593642626e-5,3.2581268817857795e-9,9.656055505064805e-4,2.08898021785074e-5,3.2893920797482204e-9,9.661506527532753e-4,2.0970707862049013e-5,3.2556740154475738e-9,9.666609700686485e-4,2.1188936127107843e-5,3.154989219151684e-9,9.670695157136533e-4,2.1504456001118907e-5,3.0062342252277902e-9,9.673367523603838e-4,2.1842686062608042e-5,2.8453160317467475e-9,9.674669505838162e-4,2.2120216315934066e-5,2.7126670331229932e-9,9.675052672091475e-4,2.227588153984791e-5,2.6381300324599617e-9,9.67517310975436e-4,2.2290098639572074e-5,2.631571812351488e-9,9.675641549386202e-4,2.2184188610723864e-5,2.683192639935835e-9,9.676856175598294e-4,2.20050732406217e-5,2.770831293998539e-9,9.678958345343047e-4,2.1806797104405777e-5,2.8687326779884426e-9,9.681874796128061e-4,2.1636899335670483e-5,2.953998363007588e-9,9.685391645791842e-4,2.152957275673156e-5,3.00987037631748e-9,9.689223645110006e-4,2.150393434528262e-5,3.0266647100820593e-9,9.693065461435913e-4,2.1564905127593073e-5,3.0015027830697376e-9,9.696627464705727e-4,2.170489096403e-5,2.9376390040777005e-9,9.699663713453124e-4,2.190558400417185e-5,2.843664610904784e-9,9.701997585934131e-4,2.213998368625858e-5,2.732536103734538e-9,9.703546573483743e-4,2.2375052452482884e-5,2.6202568912921775e-9,9.704343769114892e-4,2.2575473791547756e-5,2.524023751178972e-9,9.70454924970594e-4,2.2708679506424222e-5,2.4597828841057676e-9,9.704442684490575e-4,2.2750680548228815e-5,2.4394191096140195e-9,9.70439123002729e-4,2.269163919856002e-5,2.4680675742140396e-9,9.704792630519241e-4,2.2539791907013454e-5,2.542185695856593e-9,9.706000419416595e-4,2.2322356320565065e-5,2.6490241837254375e-9,9.708244225247657e-4,2.208254490993235e-5,2.7679330778128663e-9,9.711561348596273e-4,2.1872563135784633e-5,2.8736116004682885e-9,9.715756674472968e-4,2.1743144202396543e-5,2.9411105609226534e-9,9.720408542324096e-4,2.1730926538918943e-5,2.952015717458691e-9,9.724936339510598e-4,2.1846219921065344e-5,2.9005828036571425e-9,9.728734724452532e-4,2.206526684943893e-5,2.797753482524233e-9,9.73135268736305e-4,2.2331915022099625e-5,2.670534930423955e-9,9.732656869873846e-4,2.2571721047228047e-5,2.5551777813643346e-9,9.732896097496811e-4,2.2715649390846857e-5,2.4855509251822116e-9,9.732616414073596e-4,2.272350320648063e-5,2.481624710067114e-9,9.732459633450723e-4,2.2595527734851322e-5,2.5437609524692543e-9,9.732948670608518e-4,2.2367393624596813e-5,2.6551037957679194e-9,9.73435775314028e-4,2.2093662920085047e-5,2.7895237218060307e-9,9.736697513088091e-4,2.18295826774539e-5,2.9203430820786453e-9,9.739779823635234e-4,2.1618463822268142e-5,3.0263986928152343e-9,9.743307630656896e-4,2.14864286442583e-5,3.094632000552376e-9,9.746951934172733e-4,2.1442559653592196e-5,3.120143478228777e-9,9.75040337470858e-4,2.1481561948537084e-5,3.105047155900916e-9,9.753402753088035e-4,2.1586872020260996e-5,3.0570669881734935e-9,9.755760407850127e-4,2.1733399542332765e-5,2.9882432258541283e-9,9.757372606998641e-4,2.1890007987213578e-5,2.913710103700545e-9,9.758238522467932e-4,2.2022308074060718e-5,2.8502981225779335e-9,9.758475695193567e-4,2.2096463822383953e-5,2.814649675643213e-9,9.75832592759985e-4,2.208441265972937e-5,2.8206647589847394e-9,9.758139779570534e-4,2.1970120824932505e-5,2.8764536267483205e-9,9.758329513980938e-4,2.1755459239150598e-5,2.9814657729990575e-9,9.759289405456378e-4,2.146343405290607e-5,3.1248755506446147e-9,9.761297562449015e-4,2.1136469459250627e-5,3.2863308207215907e-9,9.764427844228285e-4,2.0828722875066234e-5,3.4395760619971846e-9,9.768504235625822e-4,2.05936578116549e-5,3.558401665094199e-9,9.773119310828517e-4,2.047011212383905e-5,3.623414500991834e-9,9.777718670258082e-4,2.0470907088346007e-5,3.627703453703138e-9,9.781733258317801e-4,2.057752945621449e-5,3.5796494003707138e-9,9.784727031122457e-4,2.0742968740602736e-5,3.501766797457081e-9,9.786520083386822e-4,2.090280873294008e-5,3.4254174178099575e-9,9.787247391817811e-4,2.099234249163606e-5,3.3824366972435045e-9,9.787325073239532e-4,2.0964978181006943e-5,3.3960258792809006e-9,9.787325574450096e-4,2.080554329966027e-5,3.474116418782361e-9,9.78780386798012e-4,2.053316629811452e-5,3.607853339306525e-9,9.78914283306498e-4,2.0192836373745813e-5,3.7756288344559166e-9,9.79147450149718e-4,1.9840040928541138e-5,3.9505044744465266e-9,9.794691393037586e-4,1.9525344833017023e-5,4.107694790089413e-9,9.798520178516646e-4,1.928413468832371e-5,4.229601723499455e-9,9.802613780058582e-4,1.9132999458968806e-5,4.30768523320254e-9,9.806628425931363e-4,1.9071152761889917e-5,4.341903576740723e-9,9.810273134182267e-4,1.9084239326578834e-5,4.338962357581536e-9,9.81333537072951e-4,1.9148443642578993e-5,4.310353550740631e-9,9.81569296115634e-4,1.9233976343823555e-5,4.2706388260183405e-9,9.817321483998952e-4,1.9307966381521585e-5,4.235993167701627e-9,9.81830219636952e-4,1.933733918927407e-5,4.222757802688705e-9,9.818829501630556e-4,1.9292467400002797e-5,4.245632427234919e-9,9.819209964844942e-4,1.9152168044642423e-5,4.315222825428222e-9,9.8198392831691e-4,1.890983975966044e-5,4.435029642934434e-9,9.821143377150008e-4,1.857919889488635e-5,4.59861659028588e-9,9.823480141006478e-4,1.819663416702158e-5,4.788408783691395e-9,9.827021678395676e-4,1.781681352429813e-5,4.977767747591471e-9,9.8316630954625e-4,1.750019208422675e-5,5.1370239028109335e-9,9.837010460599907e-4,1.729533464359589e-5,5.242087342349132e-9,9.842471758127079e-4,1.722284340206006e-5,5.282365711457081e-9,9.847423799112572e-4,1.7267922501442923e-5,5.2645551112541595e-9,9.851390392167326e-4,1.7384650541422545e-5,5.210737350473865e-9,9.85416712413494e-4,1.7509721680699187e-5,5.151788515618179e-9,9.855858656559924e-4,1.7580163367743918e-5,5.118732221992248e-9,9.856830005405348e-4,1.754937325800318e-5,5.134813103943706e-9,9.857596419803308e-4,1.7397498039928058e-5,5.210281577132254e-9,9.858686370143312e-4,1.7134242430752782e-5,5.340872784086539e-9,9.860514093620037e-4,1.6794137806137563e-5,5.509998145968244e-9,9.863293550422345e-4,1.6426136917274978e-5,5.693759305662125e-9,9.867012674118518e-4,1.6080882897378395e-5,5.867166202605813e-9,9.871466831850105e-4,1.5799461394281728e-5,6.009706321470195e-9,9.876331363464859e-4,1.560644168178504e-5,6.108876220456722e-9,9.881244546795737e-4,1.5508013115131364e-5,6.16123561320287e-9,9.885877203164924e-4,1.5494168132305846e-5,6.1714423956312695e-9,9.889977731607897e-4,1.554301218967708e-5,6.150173958810571e-9,9.89339357154404e-4,1.5625438489487203e-5,6.11180328305642e-9,9.896077069428486e-4,1.5709163928471263e-5,6.072354236231378e-9,9.898084641090051e-4,1.5761986455145772e-5,6.047846128949401e-9,9.89957481892549e-4,1.575472773264608e-5,6.052821432389052e-9,9.900805416390554e-4,1.5664564164811243e-5,6.098708901861965e-9,9.902123484409752e-4,1.5479331179479615e-5,6.191709401312268e-9,9.903935258545628e-4,1.5202748222706768e-5,6.33020714370356e-9,9.906641160678208e-4,1.4859172652645127e-5,6.502381741232603e-9,9.910530106883304e-4,1.4494749524882107e-5,6.685572808518867e-9,9.915653761885476e-4,1.4170939529055735e-5,6.8494023081549725e-9,9.92173804543939e-4,1.3948485846748767e-5,6.963646567409606e-9,9.92820439606734e-4,1.3865800846189006e-5,7.008937764536123e-9,9.934330686488335e-4,1.3922023616282452e-5,6.98524850756154e-9,9.939493480964887e-4,1.4075052891534514e-5,6.91302227434678e-9,9.943372374337234e-4,1.4256527274009431e-5,6.825888020437902e-9,9.946022722861765e-4,1.4395571285888233e-5,6.75895614654633e-9,9.947808856143072e-4,1.4439740434982362e-5,6.738430832136037e-9,9.949257957257986e-4,1.4366093115323758e-5,6.776065172871318e-9,9.950905167510095e-4,1.418186073054903e-5,6.868729017701459e-9,9.953173989064848e-4,1.391790875148587e-5,7.001518418367263e-9,9.95630713119781e-4,1.3618756991412558e-5,7.152573416875709e-9,9.960345799292754e-4,1.3332040182830323e-5,7.29822948174995e-9,9.965148922381106e-4,1.3099245727471433e-5,7.4176277467670906e-9,9.970441941477112e-4,1.294893783688122e-5,7.496180701557594e-9,9.975882397394037e-4,1.2893264734091967e-5,7.527452492986098e-9,9.98112746713271e-4,1.2927881166143136e-5,7.513323955728468e-9,9.985890416039868e-4,1.3034634044303174e-5,7.462717843178684e-9,9.98997826875862e-4,1.3185900947308538e-5,7.389423516943071e-9,9.993309205324102e-4,1.3349405125668461e-5,7.3096360810763596e-9,9.99591375901445e-4,1.3492586365441474e-5,7.2397137309556e-9,9.99792668555754e-4,1.3586170648049899e-5,7.19436794380859e-9,9.999574846180697e-4,1.3607159236305784e-5,7.185183536470915e-9,0.0010001162353076604,1.3541721843540724e-5,7.219205045654568e-9,0.0010003049165363592,1.3388426048463978e-5,7.297338394204071e-9,0.0010005613623854227,1.3161776667357265e-5,7.4125560623676355e-9,0.0010009186855654698,1.2894930291567578e-5,7.548472365832492e-9,0.001001395431805748,1.2638913929780974e-5,7.679645009834532e-9,0.0010019842716833783,1.2454704246940159e-5,7.775465670467849e-9,0.0010026447567112351,1.2396089240531763e-5,7.80872345265965e-9,0.0010033080233894881,1.2487217081785896e-5,7.766920829338294e-9,0.0010038972478855197,1.2706548445498057e-5,7.660458605367358e-9,0.0010043565504526115,1.2989946449421098e-5,7.521224770364038e-9,0.001004672231437384,1.3254551939388285e-5,7.390681026669133e-9,0.0010048741581043606,1.3430195374539308e-5,7.304097230213788e-9,0.001005019125368549,1.3480998017901777e-5,7.27969563649755e-9,0.001005168386359312,1.340941335065461e-5,7.316596454133312e-9,0.0010053704906546521,1.3246930061867809e-5,7.3994046186029145e-9,0.0010056532197300141,1.3040000118914438e-5,7.505138119129774e-9,0.0010060229091539998,1.2837303701281687e-5,7.609490773330097e-9,0.0010064679702872599,1.2680694358525935e-5,7.691325334965295e-9,0.00100696410900686,1.2599802055308625e-5,7.73543576837147e-9,0.0010074799303969257,1.2609453088105831e-5,7.733972018905462e-9,0.0010079824262810555,1.270927137545503e-5,7.68678360040066e-9,0.001008441983199197,1.2885166585695294e-5,7.600766502657164e-9,0.0010088364680810365,1.3112382500046945e-5,7.488348827427479e-9,0.0010091540147537904,1.3359627618872047e-5,7.365366043977686e-9,0.0010093942793346546,1.3593707411098743e-5,7.248659658443538e-9,0.0010095681767792678,1.3783993741249416e-5,7.15377885761242e-9,0.0010096964280629517,1.3906222158150544e-5,7.093063507146875e-9,0.0010098073351207102,1.3945501108580383e-5,7.074156161434548e-9,0.001009933998475673,1.3898670498425644e-5,7.098839141011301e-9,0.0010101108925560731,1.3776156395851466e-5,7.162087545997906e-9,0.0010103693537762879,1.3603229200616472e-5,7.2513716092129284e-9,0.001010731370310706,1.3419833637562037e-5,7.3466457393835305e-9,0.0010112016762827962,1.3277108498864683e-5,7.422018074019115e-9,0.0010117598625822178,1.3228209751310446e-5,7.450356500270065e-9,0.0010123568768607588,1.3312347000828476e-5,7.411421404428368e-9,0.0010129222480500654,1.3535582819181508e-5,7.301724939909382e-9,0.001013385331984101,1.3858804132080293e-5,7.140781390672817e-9,0.001013703707706818,1.4205000113155494e-5,6.967497490960027e-9,0.0010138822454817784,1.448749274687313e-5,6.825833236491937e-9,0.0010139696115598694,1.464433393257325e-5,6.747309515966404e-9,0.001014034960781267,1.4658559233696529e-5,6.740744459985028e-9,0.0010141406929217946,1.4555765436898252e-5,6.793498539548968e-9,0.0010143254890754552,1.4386576477060897e-5,6.880297884166936e-9,0.0010146008251386124,1.420706593101242e-5,6.973012537470857e-9,0.0010149561275081414,1.4065065181815716e-5,7.047465907773897e-9,0.00101536675460542,1.3993570240248546e-5,7.0867457546242325e-9,0.0010158013574818438,1.4009210516690739e-5,7.0820601273590445e-9,0.0010162275161801665,1.4113340727320419e-5,7.032323770553171e-9,0.0010166159146742558,1.429419134817385e-5,6.943198192930504e-9,0.0010169435907143895,1.4529570251940101e-5,6.825790427443894e-9,0.001017196458485237,1.4790107827825064e-5,6.695003258799705e-9,0.0010173710222833715,1.5043063994411697e-5,6.5675509780237646e-9,0.0010174750556951806,1.5256600380969255e-5,6.459732390817189e-9,0.001017526963278131,1.5404159828331004e-5,6.385177403566588e-9,0.0010175537373666459,1.5468376233596634e-5,6.352868110860509e-9,0.001017587717364337,1.544402654131814e-5,6.365661713647204e-9,0.0010176624605994554,1.5339717534360233e-5,6.419435210938414e-9,0.0010178080063839555,1.5178075945731396e-5,6.502944076621323e-9,0.0010180457452669584,1.4994254410299033e-5,6.598491835633543e-9,0.001018383064035031,1.4832381264038678e-5,6.6836353960864175e-9,0.0010188083316972948,1.47391332796154e-5,6.734397667122887e-9,0.0010192878609278002,1.475363974145172e-5,6.730438678602947e-9,0.0010197678046505864,1.4894272655654495e-5,6.661915015952189e-9,0.00102018443463024,1.5145950174105276e-5,6.5361350999692345e-9,0.0010204836747962334,1.5455522234757765e-5,6.380048705078234e-9,0.0010206437243931602,1.5743334912936524e-5,6.2343512371156256e-9,0.0010206877187796243,1.5931055263172206e-5,6.139179160224897e-9,0.0010206758978202743,1.5972669549953236e-5,6.118206896081988e-9,0.0010206802785743953,1.587040614601252e-5,6.170538509004209e-9,0.0010207572457502255,1.5667653115910527e-5,6.274358304487625e-9,0.0010209325449119094,1.5426977239675342e-5,6.398084889086976e-9,0.0010212017498908892,1.520786821074164e-5,6.511580983868921e-9,0.0010215398590799887,1.5053291656116975e-5,6.5929010127443566e-9,0.001021912431934167,1.498569502034724e-5,6.630329259183798e-9,0.0010222841435015692,1.5008880327172054e-5,6.621529648464819e-9,0.0010226239917599095,1.5112068113238198e-5,6.571614831742929e-9,0.0010229080944826484,1.527401144689631e-5,6.491159177179544e-9,0.0010231212780165244,1.5466570242856973e-5,6.394419794620523e-9,0.001023258140679252,1.565799311163615e-5,6.29764201481796e-9,0.001023323723746117,1.581631986787821e-5,6.217269214912676e-9,0.0010233335657502231,1.5913194832607108e-5,6.1679458224003706e-9,0.001023312652942418,1.592801691867029e-5,6.160375068918902e-9,0.0010232928007281963,1.5851837316847298e-5,6.199331981376249e-9,0.0010233083950897286,1.5690131829775294e-5,6.282255337576482e-9,0.0010233908943278179,1.5463603240336597e-5,6.398818557630599e-9,0.0010235628682748299,1.5206365333078503e-5,6.531796793225194e-9,0.001023832615986048,1.4961295414609502e-5,6.659351030318273e-9,0.0010241904386357422,1.4772889164037382e-5,6.75860252344733e-9,0.001024607567166903,1.4678269177210256e-5,6.810218842264442e-9,0.001025038835875019,1.4697338813962965e-5,6.803536849223181e-9,0.0010254302198467145,1.4824014543455562e-5,6.7412161836967475e-9,0.001025731571596928,1.5021882123837198e-5,6.641636326261475e-9,0.0010259126052034333,1.522848767407803e-5,6.536783150416774e-9,0.0010259765363499528,1.5370953906319304e-5,6.464197088487894e-9,0.0010259633245588596,1.5390062552732196e-5,6.454503675266422e-9,0.0010259374918061134,1.5262568774086813e-5,6.519889575291671e-9,0.0010259645518792863,1.5009405517106155e-5,6.649894303135918e-9,0.0010260881771412683,1.4685110812366908e-5,6.816835676346961e-9,0.0010263193576777233,1.4355638624471758e-5,6.98711790063453e-9,0.0010266398889383535,1.4077159844329356e-5,7.1319926882616635e-9,0.001027014226018415,1.388425288732607e-5,7.2335633845970444e-9,0.0010274020414492461,1.3788133610311604e-5,7.285745723386852e-9,0.0010277670997235588,1.378095198171993e-5,7.292187151879546e-9,0.0010280818168414282,1.384189253769118e-5,7.263261955630348e-9,0.0010283288268859772,1.3942614549109414e-5,7.213352520340318e-9,0.0010285011445110084,1.405139140764495e-5,7.158731665697266e-9,0.0010286019408435882,1.413632711989153e-5,7.115870597147311e-9,0.0010286442540053864,1.4168322568558104e-5,7.09986088584424e-9,0.0010286504037499457,1.4124365397943462e-5,7.12268504128625e-9,0.0010286504791455998,1.3991292700524017e-5,7.191271681234185e-9,0.0010286791648484964,1.3769478993510954e-5,7.3056080066068604e-9,0.0010287705469715204,1.3475266008978337e-5,7.457494460578409e-9,0.001028951327632887,1.3140689311306862e-5,7.630660550566689e-9,0.0010292338285229816,1.280935564220711e-5,7.802822009644976e-9,0.0010296108825569928,1.2528353458002378e-5,7.949760843038067e-9,0.0010300546940236487,1.233759347627838e-5,8.050755726164393e-9,0.0010305208273311641,1.2259178009605778e-5,8.094075186049836e-9,0.0010309570900584187,1.2289732755782155e-5,8.08103476461809e-9,0.0010313157392175553,1.239822992254162e-5,8.027273387668908e-9,0.0010315663465513536,1.2530919495367793e-5,7.960336714121893e-9,0.0010317058209335492,1.2623500762804774e-5,7.913435014428099e-9,0.001031761762409121,1.2618455216019864e-5,7.916445804350526e-9,0.0010317863213620134,1.2482715648861428e-5,7.986708154305847e-9,0.0010318409415092163,1.2218875567850196e-5,8.123174915224233e-9,0.0010319770490094284,1.1864341225077265e-5,8.306813126168584e-9,0.00103222073763433,1.1478137897328902e-5,8.507363432120657e-9,0.001032567744181653,1.1121486498340977e-5,8.693293502779717e-9,0.001032989301697024,1.084087419509298e-5,8.840491614529463e-9,0.0010334441429188832,1.065944919603051e-5,8.936740074754993e-9,0.0010338905402688494,1.0577173083741774e-5,8.981736505163395e-9,0.0010342945423151325,1.0576383955421915e-5,8.98433665789792e-9,0.00103463375858786,1.0628837350001691e-5,8.958991422832772e-9,0.0010348979793146607,1.0701777354861157e-5,8.922621233770985e-9,0.0010350882727302663,1.0762337371071754e-5,8.89230185881902e-9,0.0010352157191526022,1.0780632780980312e-5,8.883608858628518e-9,0.0010353002554859072,1.0732303407048932e-5,8.90925860516677e-9,0.0010353694431257166,1.0601227344865006e-5,8.977690201699487e-9,0.0010354564618759658,1.0382697470573208e-5,9.09143350297743e-9,0.0010355964502504992,1.008658752883728e-5,9.245490273873833e-9,0.00103582062126145,9.739174784541215e-6,9.426394426544935e-9,0.001036148531357024,9.381685552026843e-6,9.612933762557046e-9,0.001036580411402926,9.063860868442835e-6,9.779418101910907e-9,0.0010370928511063498,8.832500434599207e-6,9.901545674027221e-9,0.0010376410685493903,8.717740287966906e-6,9.963490318062588e-9,0.001038168776362179,8.722090107823838e-6,9.963639543713632e-9,0.001038623174432724,8.817117820241822e-6,9.916433090139891e-9,0.0010389699638132367,8.949806345046257e-6,9.849185263172341e-9,0.0010392031310252545,9.056681538401306e-6,9.794814136056429e-9,0.0010393464417650642,9.081041880969784e-6,9.7828832107339e-9,0.0010394465445357972,8.98803121924295e-6,9.831716602058708e-9,0.0010395599652596504,8.773379181090786e-6,9.943793307826468e-9,0.0010397377850124105,8.463527638538071e-6,1.010562028455275e-8,0.0010400124740567555,8.107264085356009e-6,1.0292016552047566e-8,0.0010403907983126954,7.761647465210934e-6,1.047336668482392e-8,0.0010408546068110553,7.476975351250501e-6,1.0623406725890964e-8,0.0010413683448417354,7.285608742141655e-6,1.0725068130866081e-8,0.0010418898199738098,7.197436696745734e-6,1.077292879202111e-8,0.0010423802623030689,7.201792582882333e-6,1.0772323696065717e-8,0.0010428110604212102,7.273401012350935e-6,1.0736320365516424e-8,0.0010431666141344895,7.3794054706384364e-6,1.0682066369385867e-8,0.0010434442537033133,7.485424438284342e-6,1.062758834085327e-8,0.001043652630466233,7.559908129853109e-6,1.0589456096467488e-8,0.0010438096899647942,7.577040457584126e-6,1.0581220954317427e-8,0.0010439407598399314,7.518874452397437e-6,1.0612288493742078e-8,0.0010440766580099585,7.3774053804267025e-6,1.0686856280073861e-8,0.0010442511917944904,7.1569232978676465e-6,1.0802719477653824e-8,0.0010444971593526165,6.876269078840813e-6,1.0950114569202205e-8,0.001044840195797599,6.569674575005575e-6,1.1111270660756568e-8,0.0010452907905748228,6.284047442282688e-6,1.1261780001466925e-8,0.0010458366657182785,6.070632446913745e-6,1.1374885918198315e-8,0.0010464397212440041,5.970991705073476e-6,1.1428761032437083e-8,0.0010470419129418023,6.0012650636924906e-6,1.1414752486565529e-8,0.0010475808873286244,6.142246342171787e-6,1.134266195270011e-8,0.0010480101442759484,6.342031857499272e-6,1.1239472124113928e-8,0.0010483145665516262,6.531775462877667e-6,1.1141164514740623e-8,0.0010485141839921832,6.647674109549178e-6,1.1081204358546142e-8,0.0010486555927916323,6.649554437643226e-6,1.1080769771562399e-8,0.0010487962274780228,6.52970014858732e-6,1.1144090607712959e-8,0.001048988161110087,6.311113549640392e-6,1.1259318747852037e-8,0.001049266135585487,6.038217412853158e-6,1.140334069973273e-8,0.0010496417708631659,5.764112342343603e-6,1.1548386965958874e-8,0.001050103884713581,5.538005408647266e-6,1.1668579695155248e-8,0.0010506236688532541,5.395419538643018e-6,1.1745084312143063e-8,0.001051162793625547,5.352737678222033e-6,1.176905039772956e-8,0.0010516822059403249,5.4065291012566944e-6,1.1742069546748452e-8,0.0010521495626468031,5.5369304279269275e-6,1.1674479004989727e-8,0.0010525439851890206,5.7134564555245825e-6,1.1582329111142928e-8,0.0010528578438257308,5.9014015084172195e-6,1.1483979856274418e-8,0.0010530961263485919,6.067417747217445e-6,1.139710095373138e-8,0.0010532743691075914,6.1835874192326255e-6,1.133647354846759e-8,0.0010534160834845703,6.230045791333779e-6,1.1312589735762775e-8,0.001053550198721015,6.1966823130205854e-6,1.1330774854534354e-8,0.0010537085154161126,6.0844906794547615e-6,1.1390513063025623e-8,0.0010539227224054864,5.906847205676181e-6,1.1484802633572627e-8,0.00105422025687308,5.690435278638442e-6,1.1599668036115498e-8,0.0010546184278993171,5.4746708261865515e-6,1.1714426246353476e-8,0.001055117156275193,5.307635025766357e-6,1.1803769941651274e-8,0.001055692545616445,5.236529243510756e-6,1.184274644058134e-8,0.001056295705931545,5.292689648675187e-6,1.1814655608677331e-8,0.0010568617072468647,5.4757403210461624e-6,1.1719477956429268e-8,0.0010573293783666506,5.74604326804144e-6,1.157796966652239e-8,0.0010576645165347547,6.033560344798371e-6,1.1427058221344922e-8,0.0010578737870635731,6.261973517443829e-6,1.1307094518131505e-8,0.0010580009637449824,6.3760497725166996e-6,1.1247346419441141e-8,0.001058108517330219,6.358165356812837e-6,1.1257242872632262e-8,0.0010582556001528874,6.228289144348805e-6,1.1326384333356857e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json new file mode 100644 index 0000000..d7e3be9 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":13000,"numberOfSamples":1000,"samples":[0.0010584823083198346,6.031818825503171e-6,1.14309469118811e-8,0.0010588036033781425,5.823520864538709e-6,1.1542103150393909e-8,0.0010592110744742987,5.6537248748726675e-6,1.1633248752700286e-8,0.0010596790894540058,5.559275280564943e-6,1.1684765345343194e-8,0.0010601724727019367,5.559236240846307e-6,1.1686339583847125e-8,0.0010606540091394276,5.654379293057021e-6,1.163732802349451e-8,0.0010610908819856466,5.829497270171977e-6,1.1545624012790231e-8,0.0010614594503400023,6.057715047147503e-6,1.1425423187205381e-8,0.001061747989835144,6.305862037083749e-6,1.1294367431781857e-8,0.0010619573719630783,6.539955951254238e-6,1.1170587469196216e-8,0.0010620999645025674,6.73003410085884e-6,1.107008326599654e-8,0.0010621972572704668,6.85379996171742e-6,1.1004756707165859e-8,0.0010622768540195135,6.898913123430779e-6,1.098119849532928e-8,0.0010623693266318172,6.864185869807982e-6,1.1000078885400938e-8,0.0010625050436689565,6.760079817880366e-6,1.1055907410923635e-8,0.001062710756522555,6.608668374463369e-6,1.1137052470541557e-8,0.0010630055440594903,6.442842455479279e-6,1.122613014857253e-8,0.0010633958133875673,6.303928192637586e-6,1.1301216346173524e-8,0.0010638698300656857,6.236227673998108e-6,1.1338700200742188e-8,0.0010643938207032379,6.277096687541316e-6,1.1318549017049607e-8,0.0010649135018336272,6.443029009602109e-6,1.1231761017071778e-8,0.0010653652534506645,6.716334917457601e-6,1.1087554932954997e-8,0.0010656971998236583,7.041447402084115e-6,1.0915428186536279e-8,0.0010658919742331224,7.338860744797124e-6,1.0757744815379704e-8,0.0010659770288683225,7.534292063466726e-6,1.0654138240953239e-8,0.001066013886508743,7.587831708115414e-6,1.0625935223163422e-8,0.0010660723258305996,7.506181686783977e-6,1.0669662265910576e-8,0.0010662052115061964,7.3335686443663195e-6,1.0761922260944352e-8,0.0010664358470525873,7.130863915281745e-6,1.0870481691937031e-8,0.0010667588393153595,6.955633515934309e-6,1.0964801902708683e-8,0.0010671485918925085,6.8498410434954626e-6,1.1022511941646397e-8,0.0010675694409390784,6.835426550329633e-6,1.1031759374762615e-8,0.0010679841615469535,6.915158645441867e-6,1.0990824083116765e-8,0.0010683599657830244,7.076052103195604e-6,1.0906394119921115e-8,0.0010686723933572796,7.293685466136946e-6,1.0791343615514796e-8,0.00106890765095213,7.536822311352906e-6,1.0662299642942404e-8,0.0010690635977016276,7.77211139688823e-6,1.0537115853861746e-8,0.001069149428980129,7.968577301214409e-6,1.0432429890255657e-8,0.0010691841550370862,8.101601929648258e-6,1.036149374624633e-8,0.0010691940071483454,8.156061538266819e-6,1.0332478423133815e-8,0.001069209055658057,8.128266563717782e-6,1.03474435063982e-8,0.0010692594713290538,8.026593480405271e-6,1.0402013164716527e-8,0.0010693717459872535,7.870945267100574e-6,1.0485664177770738e-8,0.0010695649713014753,7.691125951702836e-6,1.05825672334285e-8,0.0010698471837835711,7.524020444771572e-6,1.0673046459330192e-8,0.0010702118794917663,7.409199319244088e-6,1.073588364535248e-8,0.0010706353190277158,7.382260325524803e-6,1.0751866255570777e-8,0.0010710762838212979,7.465490347225327e-6,1.0708824642405977e-8,0.0010714809682874885,7.6570210693528492E-06,1.0607528738465052e-8,0.0010717954666795326,7.92266264450533e-6,1.0466162353522634e-8,0.0010719849482146093,8.197549025520211e-6,1.031948512559187e-8,0.0010720518335533688,8.403355641842077e-6,1.0209555077841326e-8,0.0010720405373210041,8.477632103826806e-6,1.0169920153450947e-8,0.001072021738228369,8.400092320472587e-6,1.021150931330851e-8,0.0010720635198379748,8.199374023477202e-6,1.0319075409549964e-8,0.0010722065788787624,7.937147885028722e-6,1.0459750886515433e-8,0.00107245583521534,7.681893768449438e-6,1.0597036740148054e-8,0.0010727875503866039,7.487659268153709e-6,1.0702071381753594e-8,0.0010731630002383215,7.384581405590331e-6,1.075864496894142e-8,0.0010735409195010803,7.379180450137632e-6,1.0763066178824929e-8,0.001073885642552888,7.459556157906894e-6,1.0721462765445143e-8,0.0010741711464074789,7.60167164073378e-6,1.064650717664984e-8,0.0010743824677307964,7.774854624539591e-6,1.05545292946971e-8,0.0010745158753886549,7.946253107214568e-6,1.0463140800736486e-8,0.0010745783975093434,8.084663970024577e-6,1.0389154063601514e-8,0.0010745867148931046,8.164015707520659e-6,1.0346669113505363e-8,0.0010745652935797434,8.166515928713906e-6,1.0345347414447921e-8,0.0010745436064007652,8.085247843115634e-6,1.0389003625916266e-8,0.001074552414002862,7.925732239563838e-6,1.04747713355022e-8,0.0010746194263179607,7.705947602888145e-6,1.0593098065321354e-8,0.0010747649179418883,7.45457851834404e-6,1.0728675241616273e-8,0.0010749978735612412,7.207509835919612e-6,1.0862287758949862e-8,0.0010753131883688583,7.0027414856204215e-6,1.0973502950806292e-8,0.0010756904320888402,6.874033979996817e-6,1.1044059873554255e-8,0.0010760947834755237,6.8436529769841505e-6,1.1061787085804026e-8,0.001076481049891446,6.914886396186059e-6,1.1024693263841812e-8,0.0010768018290682909,7.066051634150347e-6,1.0944283327208556e-8,0.0010770200321076698,7.249261634913781e-6,1.0846289489249666e-8,0.001077123420982185,7.39804993243476e-6,1.076656197635394e-8,0.0010771348797026668,7.44585714263904e-6,1.0741042838621376e-8,0.0010771101367558554,7.350779981649652e-6,1.0792371226593277e-8,0.0010771194563272597,7.114340819791003e-6,1.091978472227473e-8,0.0010772207158111727,6.781925749825741e-6,1.1098942285178267e-8,0.001077438751988009,6.423598569950669e-6,1.1292263291924475e-8,0.0010777614606054466,6.107174429654953e-6,1.1463350840217734e-8,0.001078150988925822,5.878278442603043e-6,1.1587643347827043e-8,0.0010785602961386523,5.753858224937523e-6,1.1655892460490189e-8,0.0010789465240847547,5.72623912615062e-6,1.167203738632892e-8,0.0010792781883616845,5.7715171050260465e-6,1.1648769383961856e-8,0.0010795372547668179,5.857715055435001e-6,1.1603202812664468e-8,0.001079718408317149,5.950842140755552e-6,1.1553633958985417e-8,0.0010798274054571314,6.018931123532262e-6,1.1517348515355086e-8,0.0010798793764046966,6.034916081994106e-6,1.150903056702829e-8,0.0010798970957694128,5.979082561969348e-6,1.1539400992860876e-8,0.0010799088782759599,5.841386795654391e-6,1.1613943229511664e-8,0.001079945671266815,5.6234999239785664e-6,1.1731800417280663e-8,0.0010800370563297977,5.339960624404898e-6,1.1885168170973472e-8,0.0010802063626677298,5.017558699714286e-6,1.2059638070394361e-8,0.001080465709873069,4.692281975823613e-6,1.2235836282107038e-8,0.0010808121845919524,4.403722523375394e-6,1.239241282362964e-8,0.0010812263927673289,4.1875776377249006e-6,1.2510056790341688e-8,0.0010816742755761358,4.067606126441703e-6,1.2575830541311822e-8,0.0010821124162932766,4.048764490048608e-6,1.2586910279254428e-8,0.001082496394029135,4.1132067224480435e-6,1.2552812557360103e-8,0.0010827911400719823,4.220728194789922e-6,1.2495218049522599e-8,0.0010829814407256138,4.315035608807498e-6,1.2444602628550136e-8,0.0010830795939978,4.336331558319785e-6,1.2433397469308228e-8,0.0010831263014689158,4.238515418925506e-6,1.2486625405764085e-8,0.0010831815716910997,4.005888907583e-6,1.2612831618416838e-8,0.0010833062871192334,3.6615290203470267e-6,1.2799568273597161e-8,0.0010835411795810717,3.261162454656364e-6,1.3016729071965934e-8,0.0010838933778462134,2.8737930394674124e-6,1.3227010267237029e-8,0.001084337034999438,2.5585169726812227e-6,1.3398407369065678e-8,0.0010848260137734957,2.3486087687672093e-6,1.351281176227918e-8,0.0010853104715353803,2.2479370425633493e-6,1.3567994079646327e-8,0.0010857496852788604,2.2371567972056594e-6,1.3574322546551323e-8,0.0010861181451779231,2.2837281191620208e-6,1.3549388239562281e-8,0.0010864060912470594,2.3509882779473265e-6,1.351309848109019e-8,0.001086617167375567,2.4043382300803017e-6,1.348429676688557e-8,0.0010867653789912383,2.414780175748046e-6,1.3478800918996513e-8,0.0010868723951977914,2.36090336349784e-6,1.3508287044674754e-8,0.0010869652859729975,2.230320299619587e-6,1.357949036950374e-8,0.0010870742527047388,2.0210940838380106e-6,1.3693435401754393e-8,0.0010872297036982135,1.7431263470573831e-6,1.3844706627164613e-8,0.0010874581583647045,1.4188304041524766e-6,1.4021110351396713e-8,0.0010877770309646244,1.0819285734700634e-6,1.420434005833336e-8,0.0010881892473587201,7.732394508393998e-7,1.4372250040797893e-8,0.0010886795450963712,5.330813350595426e-7,1.4502949312721697e-8,0.001089214649730255,3.9140243490344096e-7,1.458013766244398e-8,0.0010897487258969283,3.584072521389756e-7,1.459820749252219e-8,0.0010902335819651038,4.191729634013468e-7,1.4565214418600275e-8,0.0010906310187498445,5.348153076480196e-7,1.4502295396028616e-8,0.0010909236281021046,6.506177348026824e-7,1.443926695100913e-8,0.001091120685014961,7.092800663955221e-7,1.4407391615029013e-8,0.001091257136747916,6.658869235087142e-7,1.4431183604022623e-8,0.0010913854479859381,5.005821622148568e-7,1.4521478794650966e-8,0.0010915618860652314,2.251478759511052e-7,1.467185398741576e-8,0.0010918307189155313,-1.1924299742407577e-7,1.4859864732950039e-8,0.0010922113493534546,-4.734372432057817e-7,1.5053255310459487e-8,0.0010926932935980337,-7.775556028587294e-7,1.5219334684945516e-8,0.0010932410472572044,-9.877102401363634e-7,1.533407805988485e-8,0.0010938063797259453,-1.0859165470122615e-6,1.5387566050399254e-8,0.001094342455259391,-1.080589230442882e-6,1.5384321095468852e-8,0.00109481445675083,-9.995980021090122e-7,1.5339569592932147e-8,0.0010952043212414967,-8.803420527904827e-7,1.5273828324478645e-8,0.0010955103354372215,-7.608506842509845e-7,1.520800473466209e-8,0.0010957438947718288,-6.738297010954895e-7,1.516008890171015e-8,0.0010959255739260278,-6.435882030741187e-7,1.514342886133524e-8,0.0010960816844447629,-6.848008439732961e-7,1.516603611113632e-8,0.001096241543978873,-8.02004725041787e-7,1.5230321629549556e-8,0.0010964350536024304,-9.891361497491146e-7,1.5332873831182345e-8,0.0010966898752015986,-1.2290044827439803e-6,1.5464206803068726e-8,0.0010970275583669783,-1.4932930260580311e-6,1.5608784981685757e-8,0.0010974584822657629,-1.7443109645131954e-6,1.574598051452959e-8,0.0010979764965260918,-1.9399561880694465e-6,1.5852762521604583e-8,0.0010985554895813923,-2.0426623918831098e-6,1.590856103716042e-8,0.0010991510076969397,-2.031063016383569e-6,1.590164521848076e-8,0.0010997091337757634,-1.9102678540224635e-6,1.5834788151340182e-8,0.0011001814643931509,-1.7151290714917107e-6,1.5727115299126148e-8,0.0011005408546707206,-1.5028952094650604e-6,1.5610105905041306e-8,0.001100790948640354,-1.3368393448549428e-6,1.5518581808694086e-8,0.001100965184316589,-1.2672952194125447e-6,1.5480237846173764e-8,0.0011011161176956588,-1.3175209969869768e-6,1.5507843040213407e-8,0.0011012998469212088,-1.4787697248972343e-6,1.5596542078759433e-8,0.001101561065014156,-1.7146998910046917e-6,1.5726308035865734e-8,0.0011019226990827457,-1.9724071175410574e-6,1.586801490545639e-8,0.001102382007116548,-2.196363356079692e-6,1.5991084228148263e-8,0.0011029132667145561,-2.3416096021800094e-6,1.6070722292919825e-8,0.0011034757514399483,-2.38310916619068e-6,1.6093077245681256e-8,0.0011040244786115357,-2.31927776315323e-6,1.6057225467888683e-8,0.0011045205794044041,-2.1694385072843676e-6,1.597381802522786e-8,0.0011049385690624493,-1.966838354498544e-6,1.5861252045493124e-8,0.0011052692443645087,-1.750001842086337e-6,1.5740883086523665e-8,0.0011055186380034719,-1.5550353774155559e-6,1.5632734001830676e-8,0.0011057045369247066,-1.4103695910270938e-6,1.5552549745965977e-8,0.0011058522277989002,-1.3341378137981495e-6,1.551032955262108e-8,0.0011059906217503908,-1.3335025490994153e-6,1.5509962936515426e-8,0.001106149150194748,-1.404950501845874e-6,1.5549420079728942e-8,0.0011063551807779252,-1.5348143523852197e-6,1.5621073311654e-8,0.0011066313631327655,-1.6998081049754247e-6,1.5712016164878937e-8,0.0011069922927926747,-1.8679853774396568e-6,1.580459705808824e-8,0.0011074402507398938,-2.0011637405826746e-6,1.5877740607269027e-8,0.0011079607077455421,-2.060248709035317e-6,1.5909858156164228e-8,0.001108519738968454,-2.0144254988523965e-6,1.588390462537339e-8,0.0011090667951459137,-1.8531436940924132e-6,1.5794016241904865e-8,0.0011095457522609323,-1.5962893152773853E-06,1.5651187561937485e-8,0.0011099131036531966,-1.295286315591519e-6,1.548393416264128e-8,0.0011101558729649911,-1.0201697065466408e-6,1.5331133204623056e-8,0.0011102988958696094,-8.358929741676526e-7,1.5228836499800212e-8,0.001110396160826366,-7.792957175517323e-7,1.519745019538023e-8,0.00111051078357651,-8.4832733122868e-7,1.5235767590110828e-8,0.0011106942753399312,-1.0069042485667557e-6,1.5323711725274e-8,0.00111097368196469,-1.1999692577389667e-6,1.5430718007157876e-8,0.0011113487938456635,-1.370515245006706e-6,1.5525164027079777e-8,0.0011117968919402519,-1.472886234678616e-6,1.5581716379428368e-8,0.00111228126468647,-1.4803580618799743e-6,1.5585522069862342e-8,0.0011127605283525728,-1.38735025143936e-6,1.553345118973782e-8,0.0011131969606502966,-1.207467615593322e-6,1.5433042494833323e-8,0.0011135628384484684,-9.68609089136904e-7,1.5299812786382335e-8,0.0011138441430138264,-7.063766770539463e-7,1.515359787677788e-8,0.0011140413969519087,-4.5716749529745555e-7,1.5014692696968984e-8,0.0011141679771116317,-2.5224292949749117e-7,1.4900524553462284e-8,0.0011142467106409985,-1.1360505719006956e-7,1.4823340179212186e-8,0.0011143057375622243,-5.1947099677121166e-8,1.478906414284595e-8,0.0011143745275428235,-6.641623982905153e-8,1.479718055412551e-8,0.0011144805411490116,-1.4554045014367347e-7,1.4841267716474989e-8,0.0011146465039405943,-2.6868186327244643e-7,1.4909818722617364e-8,0.0011148879464543517,-4.077487512787168e-7,1.4987193531681402e-8,0.0011152106069133069,-5.293572049765862e-7,1.5054810350341645e-8,0.001115607505557431,-5.981354506604627e-7,1.5092967998964315e-8,0.0011160562278251995,-5.82238372920153e-7,1.508390498897239e-8,0.0011165181858738054,-4.617774614729789e-7,1.5016501585294573e-8,0.0011169427756374372,-2.3916486858598275e-7,1.489207589936706e-8,0.001117279123695704,5.281074662320559e-8,1.4728931150574154e-8,0.0011174945353303808,3.5238253651923323e-7,1.4561593636104278e-8,0.0011175918891919794,5.85237341776037e-7,1.4431602483043102e-8,0.001117613973298778,6.922600246158575e-7,1.4371955080154304e-8,0.0011176285284481737,6.540692000960255e-7,1.4393394122909386e-8,0.0011177012518909313,4.973859584028976e-7,1.4480914676359373e-8,0.0011178724639969737,2.807665191832271e-7,1.4601797634793543e-8,0.0011181484319527568,7.064887876481905e-8,1.4718987525011862e-8,0.0011185068668504749,-7.890745011779789e-8,1.4802357637019236e-8,0.0011189091709123736,-1.3646153918415363e-7,1.4834384089423755e-8,0.0011193126105248509,-9.43931094899234e-8,1.48108065335213e-8,0.0011196792366973227,3.5164048593491474e-8,1.473837430297344e-8,0.0011199811858316087,2.26369559642981e-7,1.4631494218090753e-8,0.0011202031869314724,4.4589422366034254e-7,1.4508776239873582e-8,0.00112034310520379,6.586854121746841e-7,1.4389816343386903e-8,0.0011204109385747102,8.330417415667043e-7,1.4292352649188305e-8,0.0011204265234972595,9.446967691452359e-7,1.4229970169917528e-8,0.0011204162785695454,9.796302768584618e-7,1.4210520366177409e-8,0.0011204093914756884,9.354136766252925e-7,1.423536740670385e-8,0.0011204339509095645,8.210357617533893e-7,1.4299488573279187e-8,0.0011205135047749502,6.554492436680685e-7,1.4392288214421408e-8,0.0011206642577800594,4.652528434009131e-7,1.4498888367884619e-8,0.001120892869175372,2.817729973787914e-7,1.4601751044198787e-8,0.0011211947550755549,1.3757495990860276e-7,1.4682621069015419e-8,0.0011215528883894927,6.21872975976025e-8,1.4724918735586556e-8,0.001121937523487324,7.657802320904832e-8,1.471684663627745e-8,0.0011223081121608392,1.862337483495964e-7,1.4655293964103262e-8,0.0011226193191337492,3.7406125879550593e-7,1.4549846746055096e-8,0.001122832579558784,5.965725646991329e-7,1.4424943518651694e-8,0.001122931860338344,7.888398809784377e-7,1.4317073347269448e-8,0.0011229368584202211,8.823540066354003e-7,1.42646972284513e-8,0.0011229030163360236,8.31978931560535e-7,1.4293081372632381e-8,0.0011229027871189272,6.377983868581165e-7,1.4402074372500076e-8,0.0011229961745440554,3.466313844851877e-7,1.4565346045514696e-8,0.0011232080312209413,3.131213495657076e-8,1.4742059226319447e-8,0.0011235241667242122,-2.384517151272013e-7,1.4893183747109764e-8,0.0011239038866639104,-4.1705069829968125e-7,1.4993199888376666e-8,0.0011242978045176068,-4.891837396590307e-7,1.5033552385496457e-8,0.0011246618087164136,-4.650533911979487e-7,1.501996092483476e-8,0.0011249644073865193,-3.712956185955165e-7,1.4967350495564534e-8,0.0011251887847238463,-2.4226609099827207e-7,1.489497804254355e-8,0.0011253319323496448,-1.1342860023329529e-7,1.4822732804632492e-8,0.001125402634959825,-1.6748392335343594e-8,1.476855463336166e-8,0.0011254190551908455,2.2583818610430424e-8,1.4746592428163293e-8,0.001125406006350285,-1.147849811646348e-8,1.4765866874794957e-8,0.0011253918703925659,-1.2428284425453638e-7,1.4829389975213278e-8,0.001125405153669,-3.098575433825358e-7,1.4933811618400424e-8,0.001125470825285484,-5.515007109536961e-7,1.5069747750744837e-8,0.0011256068473051415,-8.237402109522106e-7,1.522287862447306e-8,0.0011258213742378021,-1.0955210324600928e-6,1.5375735433027346e-8,0.001126110953640497,-1.33434576076099e-6,1.551002392607651e-8,0.0011264599688784321,-1.5110754595557068e-6,1.5609325258051984e-8,0.0011268415324472347,-1.6050367155868619e-6,1.5661979950811296e-8,0.0011272200850014037,-1.6091063327225863e-6,1.5663968705012574e-8,0.0011275562307977297,-1.5342861631028003e-6,1.5621508044081852e-8,0.0011278144681279808,-1.4124327608801717e-6,1.5552595027563792e-8,0.001127973697196369,-1.2945868803236955e-6,1.548604925928786e-8,0.0011280382587597413,-1.2418556395565706e-6,1.5456333428887506e-8,0.0011280441049613882,-1.3076713541081708e-6,1.5493515389976944e-8,0.0011280530903307478,-1.5159246352740396e-6,1.5610950547436537e-8,0.001128132778175655,-1.8463668689740967e-6,1.579711977668449e-8,0.0011283296134604944,-2.238778351585612e-6,1.601804452302929e-8,0.0011286507402838491,-2.6162893563312223e-6,1.6230430827785135e-8,0.001129064849116733,-2.914505922934018e-6,1.639803217786027e-8,0.0011295188883964043,-3.1003495271215335e-6,1.650223555792818e-8,0.0011299585096496848,-3.1743954370268017e-6,1.6543390761059785e-8,0.0011303422387863712,-3.1616614223987634e-6,1.6535639899295777e-8,0.0011306468543703053,-3.099226465392222e-6,1.649993957729718e-8,0.0011308665355909385,-3.026115926253836e-6,1.6458343678529448e-8,0.0011310092877528594,-2.97696670198988e-6,1.643041637428008e-8,0.0011310930107738839,-2.9787150579821667e-6,1.643135725219101e-8,0.0011311420979546502,-3.048971357365785e-6,1.6471083224590702e-8,0.0011311844863316548,-3.1951543584245246e-6,1.655374177555831e-8,0.0011312487969415517,-3.4140426711787296e-6,1.667746050617603e-8,0.001131361247585663,-3.6918347099299193e-6,1.683438659836271e-8,0.0011315422288500833,-4.005155407124281e-6,1.701126248263884e-8,0.0011318028686057846,-4.323516118603748e-6,1.719082210152812e-8,0.001132142305142021,-4.613386976593811e-6,1.7354095519871995e-8,0.001132546459390808,-4.843583003603475e-6,1.7483454475893005e-8,0.0011329889427781129,-4.991272754047409e-6,1.7566013688537354e-8,0.0011334344413259357,-5.047541910774497e-6,1.7596784618951905e-8,0.001133844458183822,-5.021292733474158e-6,1.7580889129752105e-8,0.0011341848700335095,-4.94040959890774e-6,1.753421475919338e-8,0.0011344344119443499,-4.8491916969188745e-6,1.748193700907113e-8,0.0011345925814498685,-4.801059066100088e-6,1.745434825021528e-8,0.001134684387300292,-4.846227082445247e-6,1.7479841111046328e-8,0.0011347584805635495,-5.0160858158737145e-6,1.7576061597522453e-8,0.0011348759327808268,-5.309263400214288e-6,1.7742064468409605e-8,0.0011350908173706725,-5.6869034120381485e-6,1.7955706489080888e-8,0.0011354299176144932,-6.082800701089851e-6,1.8179418623203863e-8,0.0011358822190113598,-6.426124898603051e-6,1.8373054177066374e-8,0.0011364043809356825,-6.665757949870108e-6,1.8507648393622844e-8,0.0011369384853650538,-6.7840861137196476e-6,1.8573247563186413e-8,0.0011374316455507916,-6.795823634017219e-6,1.8578280026159067e-8,0.001137848673807987,-6.736604005607285e-6,1.85430965640259e-8,0.001138175543947817,-6.649378408098194e-6,1.8492219634553844e-8,0.0011384164599360274,-6.574091986083006e-6,1.8448433493018965e-8,0.0011385884812031334,-6.5420367269707E-06,1.8429543600599157e-8,0.0011387163515221173,-6.573764105960214e-6,1.844718403120001e-8,0.0011388284833158092,-6.678850501571657e-6,1.8506697577031452e-8,0.0011389539421612653,-6.856289459219892e-6,1.8607380918886297e-8,0.0011391198567281403,-7.094990988364993e-6,1.8742791852569966e-8,0.0011393486909906535,-7.374470404067843e-6,1.8901162544082247e-8,0.001139655105173082,-7.666288253826918e-6,1.9066235687773136e-8,0.0011400426757558419,-7.936983461486883e-6,1.921894205864218e-8,0.0011405013577337874,-8.152936837249098e-6,1.9340168556050783e-8,0.0011410069453844265,-8.286904307477137e-6,1.941447163411268e-8,0.001141523687978373,-8.325052062458535e-6,1.943407977800105e-8,0.0011420104921204704,-8.272482966705914e-6,1.940204081740356e-8,0.0011424298885641681,-8.155032071176124e-6,1.9333238629293002e-8,0.0011427577026877223,-8.01590505046847e-6,1.9252449665323856e-8,0.0011429907616206283,-7.907174957399983e-6,1.9189445751876634e-8,0.0011431501649271265,-7.877608061907913e-6,1.917200273740673e-8,0.0011432784491987938,-7.9594886944176e-6,1.9218374972079383e-8,0.0011434302434748492,-8.157983701078854e-6,1.9331275036921774e-8,0.0011436578055424847,-8.446881947193677e-6,1.949552477305666e-8,0.00114399515501405,-8.773659928063834e-6,1.9681008281834052e-8,0.001144446522983574,-9.073972603149053e-6,1.9850948567032337e-8,0.0011449845240813815,-9.291172843971188e-6,1.997301868872744e-8,0.0011455595354737658,-9.393027652032006e-6,2.0028869806567677e-8,0.0011461161009334714,-9.378716130867975e-6,2.001814630971795e-8,0.0011466089029168024,-9.274461172054308e-6,1.9956008806800238e-8,0.0011470122988015584,-9.121833292035425e-6,1.9866427698242803e-8,0.00114732188508422,-8.96496066277439e-6,1.977481168122164e-8,0.001147550426654242,-8.84115873090527e-6,1.970259092640148e-8,0.0011477216937115396,-8.776250220560751e-6,1.966451506584681e-8,0.0011478647584178116,-8.783503033521037e-6,1.966805944170667e-8,0.0011480097210303582,-8.864451422748417e-6,1.971393023358895e-8,0.0011481847339456337,-9.010282799110149e-6,1.9796897029095008e-8,0.0011484137013095736,-9.203162855983934e-6,1.9906583070119853e-8,0.0011487139621447924,-9.417536219790016e-6,2.0028232082651543e-8,0.0011490935669522466,-9.622008265590576e-6,2.0143797216780358e-8,0.0011495483701545808,-9.782674812070154e-6,2.0233850339937727e-8,0.0011500598968202766,-9.868530899457088e-6,2.0280675342107168e-8,0.001150595576793416,-9.858788234789456e-6,2.027245503525575e-8,0.0011511130407411538,-9.750551556433113e-6,2.0207673116114426e-8,0.0011515690958261268,-9.563815939238883e-6,2.0097983923800655e-8,0.0011519316806153635,-9.340392670730376e-6,1.9967584121287674e-8,0.001152190749497022,-9.135185026245966e-6,1.9848156573524196e-8,0.0011523634382926925,-9.001659265593388e-6,1.9770455193964563e-8,0.0011524907957058544,-8.976351650421527e-6,1.975535707782608e-8,0.0011526268209164589,-9.067935946616826e-6,1.9807599727437817e-8,0.0011528235054923113,-9.25449432683755e-6,1.9914294904382524e-8,0.0011531166414686328,-9.489552149459594e-6,2.0048491573720485e-8,0.0011535164504243166,-9.71476019621844e-6,2.0176519619224113e-8,0.0011540055000518578,-9.875454353321969e-6,2.0266935867828633e-8,0.0011545443526542588,-9.934597905884134e-6,2.029851857027083e-8,0.0011550830429836547,-9.881012223473731e-6,2.026498429883669e-8,0.0011555744937682764,-9.729706251418504e-6,2.0175168201088018e-8,0.0011559854772124829,-9.51504938883692e-6,2.0049071556327196e-8,0.0011563021464909625,-9.280042396553756e-6,1.991163982225793e-8,0.0011565296752859802,-9.065727818539686e-6,1.9786613888511836e-8,0.001156687736425848,-8.903688987058367e-6,1.9692182364519e-8,0.0011568044046975123,-8.8125619957311e-6,1.9638981965480233e-8,0.0011569105458751,-8.797789715304598e-6,1.9629991386652268e-8,0.0011570356151798416,-8.853178776230065e-6,1.9661469660227554e-8,0.0011572048275839113,-8.963029002850191e-6,1.9724213131765286e-8,0.0011574371573823965,-9.104180604326605e-6,1.9804750235027096e-8,0.0011577435098976399,-9.247950130788989e-6,1.9886461799431398e-8,0.0011581246406424353,-9.362476184699034e-6,1.9950934601369646e-8,0.001158568958664678,-9.41631267388031e-6,1.9980033554842147e-8,0.001159051135572797,-9.383982662467644e-6,1.9959107105592105e-8,0.0011595332400694842,-9.253407196201551e-6,1.988127948054991e-8,0.0011599704116754437,-9.033473617199929e-6,1.9751830591591057e-8,0.001160321905079089,-8.757962164306107e-6,1.9590469326886845e-8,0.0011605651381540996,-8.481352968156326e-6,1.9428884611557018e-8,0.0011607066977102414,-8.264780100526713e-6,1.9302555692561575e-8,0.0011607835786356816,-8.156211653841857e-6,1.9239208531028127e-8,0.001160852303938451,-8.173672131833849e-6,1.9249082973678126e-8,0.0011609704050213417,-8.299502401002055e-6,1.9321670102197103e-8,0.0011611786600939425,-8.487524842860316e-6,1.942996472795716e-8,0.00116149085756971,-8.678548440956826e-6,1.9539526753642373e-8,0.0011618930476837161,-8.817263786054158e-6,1.961829467481908e-8,0.0011623502480845786,-8.865197369246996e-6,1.9644073624203352e-8,0.0011628170462849206,-8.807345064885849e-6,1.9608343243756524e-8,0.001163248772606246,-8.652436380407108e-6,1.9516370694754277e-8,0.0011636107636861521,-8.42810745764086e-6,1.9384372461534673e-8,0.0011638841503945102,-8.17290291549061e-6,1.9234838808357553e-8,0.0011640675332915647,-7.927309243105636e-6,1.9091306227406572e-8,0.001164174910574985,-7.725934562782125e-6,1.897381570422459e-8,0.0011642310911780206,-7.592301438636944e-6,1.8895911963434465e-8,0.001164266183153776,-7.536686249750781e-6,1.8863426101585725e-8,0.0011643105098843333,-7.556534996681924e-6,1.8874751833990127e-8,0.0011643907219274397,-7.638508383357229e-6,1.892205030520054e-8,0.0011645272144765674,-7.761166811425134e-6,1.8992807601442906e-8,0.0011647324707863098,-7.897651936164617e-6,1.9071379900299287e-8,0.0011650098094900412,-8.018265814666975e-6,1.914048233352255e-8,0.0011653521888236509,-8.093307790327415e-6,1.9182839583695098e-8,0.001165741133615056,-8.096798948189496e-6,1.9183362843101123e-8,0.0011661465394286383,-8.01169930545659e-6,1.913219846759754e-8,0.0011665289267256526,-7.836536321099879e-6,1.9028592765835697e-8,0.0011668460658409007,-7.591725078170206e-6,1.8884569456476698e-8,0.0011670647742319771,-7.321672629410377e-6,1.872613603007408e-8,0.0011671752536712213,-7.087778965397692e-6,1.8589162929747138e-8,0.0011672007945532352,-6.950506281680236e-6,1.8508875117680157e-8,0.0011671946165852476,-6.946270276537636e-6,1.8506350208028936e-8,0.0011672219724961402,-7.071417197234697e-6,1.8579216055933185e-8,0.0011673358746302342,-7.283275108892446e-6,1.8702356985605753e-8,0.0011675594159570796,-7.517413113909867e-6,1.8838061377010595e-8,0.0011678822015231747,-7.710561368063675e-6,1.8949420655493054e-8,0.0011682689261397071,-7.818135372925264e-6,1.9010538692202126e-8,0.0011686730493583339,-7.821696462300443e-6,1.90108499425854e-8,0.0011690494583318888,-7.727720962976632e-6,1.8954353489254236e-8,0.0011693632444199163,-7.56134032774171e-6,1.885590552632025e-8,0.00116959424227111,-7.358324729191973e-6,1.8736493783482777e-8,0.0011697381322427927,-7.157289319737172e-6,1.861866602390422e-8,0.001169805015940991,-6.993028321525914e-6,1.852264983791331e-8,0.0011698161546601542,-6.891491872816817e-6,1.8463458014440653e-8,0.0011697995747586565,-6.866806023143072e-6,1.8449195474681566e-8,0.001169785345145261,-6.9204124414224666e-6,1.8480593608555368e-8,0.0011698012390084927,-7.0420511084665356e-6,1.8551596753815423e-8,0.0011698692959780039,-7.212115770190638e-6,1.865072612237821e-8,0.001170003535115469,-7.40476340602822e-6,1.876287162320732e-8,0.0011702087001298016,-7.591191261412983e-6,1.887118665962335e-8,0.001170479701385697,-7.742851069545861e-6,1.895896527939579e-8,0.0011708015200401624,-7.834746251544546e-6,1.9011588216858993e-8,0.0011711496211634048,-7.849130822009977e-6,1.9018713426567524e-8,0.0011714913924403504,-7.779910197998646e-6,1.8976869060788222e-8,0.0011717897544849946,-7.637523831636095e-6,1.889230519205385e-8,0.001172010309956273,-7.452738502943907e-6,1.8783182601489195e-8,0.0011721323598993924,-7.275994332800178e-6,1.867913794942048e-8,0.0011721611281580594,-7.168155593634209e-6,1.861581265298405e-8,0.0011721343191450696,-7.1813051484193844e-6,1.862357539268324e-8,0.0011721149049607846,-7.335813716215587e-6,1.87141217167984e-8,0.001172168800567516,-7.607145133330706e-6,1.8872833135365767e-8,0.0011723380208572738,-7.933227173421569e-6,1.9063184028057393e-8,0.0011726252496139771,-8.239481077610759e-6,1.924143891636807e-8,0.0011729975280554965,-8.466260519538257e-6,1.9372719916227837e-8,0.0011734031858778484,-8.584501548552111e-6,1.944016181411194e-8,0.001173790302185874,-8.596454295920204e-6,1.944531693494591e-8,0.0011741190787508823,-8.527161410478187e-6,1.9403109104349883e-8,0.0011743669348481497,-8.413502697600549e-6,1.933534155711618e-8,0.0011745284115409797,-8.294793736602777e-6,1.9265131227668844e-8,0.0011746124079364151,-8.206190261184355e-6,1.9213032276832187e-8,0.0011746385065752375,-8.174556373859033e-6,1.9194649111671876e-8,0.0011746330915234392,-8.216052103381338e-6,1.9219279634408336e-8,0.0011746253880197785,-8.335082109550146e-6,1.9289350289034145e-8,0.0011746435809791025,-8.524542340119898e-6,1.9400586230916127e-8,0.0011747112692470335,-8.767280557710057e-6,1.954286430798587e-8,0.0011748445359639791,-9.03865596643075e-6,1.9701692857538592e-8,0.0011750499632298852,-9.309966660718363e-6,1.9860201817912727e-8,0.001175323799399941,-9.552298843262974e-6,2.0001396821218872e-8,0.00117565222379474,-9.740381416028808e-6,2.0110439466007515e-8,0.0011760125740055314,-9.856258828588306e-6,2.0176834214821782e-8,0.001176375524771259,-9.89270749701017e-6,2.0196458357561633e-8,0.0011767084198622795,-9.856295447680713e-6,2.0173355725141192e-8,0.0011769802534832457,-9.769680052766479e-6,2.0121046365166935e-8,0.001177168799588408,-9.671871258832764e-6,2.0062613323586582e-8,0.0011772694476469777,-9.6141384720008e-6,2.002822704058926e-8,0.0011773031276615976,-9.649130357389883e-6,2.004871269724044e-8,0.001177317927990144,-9.813195811093411e-6,2.0145182911243707e-8,0.0011773784774201084,-1.0107742086366462e-5,2.031816622647421e-8,0.0011775429199502576,-1.0491244705205072e-5,2.054301185498362e-8,0.001177837880102486,-1.0891186429975976e-5,2.077695811502661e-8,0.0011782469508336748,-1.1232228758863288e-5,2.0975685618500445e-8,0.0011787199252995327,-1.1464270048217633e-5,2.1109807093236463e-8,0.001179195117857407,-1.1575096317836384e-5,2.1172327792887724e-8,0.0011796204060343677,-1.1585333083324484e-5,2.117567378298927e-8,0.001179964253721622,-1.153426084540048e-5,2.1143276835969646e-8,0.001180216947487361,-1.1465789942356163e-5,2.1101215758474892e-8,0.0011803864077251783,-1.1418915216628996e-5,2.107252293342305e-8,0.0011804924552570766,-1.1422849945557147e-5,2.1074313204903283e-8,0.0011805616351961057,-1.149534972563153e-5,2.111684828473406e-8,0.0011806231296561194,-1.164260838042896e-5,2.1203547272920038e-8,0.001180705405349917,-1.185983590457733e-5,2.133138289587363e-8,0.0011808332022572984,-1.2132380829244001e-5,2.1491566451183692e-8,0.0011810247593277404,-1.2437538534793616e-5,2.1670609888946692e-8,0.00118128939658047,-1.2747235945817167e-5,2.1851893747692842e-8,0.0011816258296817952,-1.3031688632184382e-5,2.2017816721285344e-8,0.0011820217409164156,-1.3263766786722557e-5,2.215238102483769e-8,0.0011824549343442512,-1.3423476824073942e-5,2.224386173036045e-8,0.0011828960923008392,-1.3501908143475178e-5,2.228715845248425e-8,0.0011833129578829248,-1.3504032616951642e-5,2.2285447254115404e-8,0.0011836756314048944,-1.3449812928952117e-5,2.2250794275112108e-8,0.001183962592413837,-1.3373153848677134e-5,2.2203458812617827e-8,0.0011841669322909438,-1.3318065327970467e-5,2.2169537514422055e-8,0.0011843016926503368,-1.3331175884827947e-5,2.2176482373441217e-8,0.0011844020642103072,-1.3450260247773386e-5,2.2246332098472546e-8,0.001184521202676278,-1.3690428025695983e-5,2.2387640451217336e-8,0.0011847171293863903,-1.4032994909381187e-5,2.2589027933433944e-8,0.001185032463777717,-1.4424743371322873e-5,2.281883562996951e-8,0.0011854755677246913,-1.4792794984495582e-5,2.3033918419938312e-8,0.0011860147396502052,-1.507088024578483e-5,2.319513060443558e-8,0.0011865905179456926,-1.5223319477673633e-5,2.328150001628114e-8,0.0011871389466646689,-1.5253718038456167e-5,2.3295410581307743e-8,0.0011876123061146714,-1.519648813755946e-5,2.3257586969311357e-8,0.0011879885113928858,-1.5099845661934605e-5,2.3196940123018956e-8,0.0011882695341677578,-1.501035144178206e-5,2.31412842396481e-8,0.0011884742356245803,-1.4963788315746421e-5,2.3111852364620775e-8,0.001188630530564791,-1.4982034546106686e-5,2.3121452402727265e-8,0.0011887692807419578,-1.507353292827563e-5,2.3174817880824452e-8,0.0011889202463939105,-1.5235106883747588e-5,2.3269772227890994e-8,0.0011891093972103773,-1.5453904219857056e-5,2.3398442893928934e-8,0.001189356787492648,-1.5709243646093957e-5,2.3548380493865156e-8,0.001189674562434833,-1.597465760311393e-5,2.3703767108688843e-8,0.0011900650705906138,-1.622059546320253e-5,2.3847010207390837e-8,0.0011905194959919482,-1.641817450904896e-5,2.396096721453941e-8,0.0011910177895063875,-1.6543919681829082e-5,2.403177226492937e-8,0.0011915306556030559,-1.6584788766736868e-5,2.4051839818261955e-8,0.001192023898945927,-1.6542298384545826e-5,2.4022324070467803e-8,0.001192464757553144,-1.643440146715635e-5,2.3954211093486313e-8,0.001192829119799411,-1.629404609753833e-5,2.3867395750016865e-8,0.001193108027212104,-1.6164104458207515e-5,2.3787569044241983e-8,0.0011933118430555575,-1.608921071912973e-5,2.3741272731391792e-8,0.0011934707320330146,-1.6105658509481013e-5,2.374985781205688e-8,0.0011936303976635173,-1.623111932778949e-5,2.3823425330801796e-8,0.0011938425904213918,-1.6456797947603263e-5,2.3956291913805633e-8,0.0011941512693824246,-1.6745405678767475e-5,2.4125926378533872e-8,0.0011945777513011316,-1.703806116613979e-5,2.4297131106293858e-8,0.0011951108176325653,-1.7270552184130284e-5,2.4431706269672658e-8,0.0011957078826386161,-1.7394145331375484e-5,2.4500786304503858e-8,0.001196308651953773,-1.7391670563142902e-5,2.4494397478295562e-8,0.0011968553574094527,-1.7280885870127336e-5,2.442346637634852e-8,0.0011973097438809756,-1.7104486121415902e-5,2.4313830319614202e-8,0.0011976600271846305,-1.6913544964189015e-5,2.4196263777647027e-8,0.0011979178287977973,-1.6752823815132273e-5,2.4097605696463648e-8,0.0011981097707620147,-1.6652578579863055e-5,2.4035827004151324e-8,0.0011982686801686477,-1.6626751066110573e-5,2.401899572758425e-8,0.0011984270612510747,-1.6674980003615707e-5,2.4046572026728495e-8,0.0011986131998672476,-1.6785856209140574e-5,2.411144126081378e-8,0.00119884907936858,-1.6939967517406705e-5,2.4201781684558578e-8,0.0011991490988296598,-1.7112385016964997e-5,2.430255743190104e-8,0.0011995189044720176,-1.727490968716899e-5,2.4396846663078468e-8,0.0011999541434850292,-1.73987053704685e-5,2.446740213138539e-8,0.0012004395264967585,-1.7457927525291007e-5,2.4498820966803372E-08,0.0012009491082435547,-1.743451264755266e-5,2.4480422287605266e-8,0.001201448900782843,-1.7323465817622007e-5,2.4409425154034857e-8,0.0012019025457898729,-1.713703206787251e-5,2.429344400128628e-8,0.0012022796375072394,-1.6905527800039264e-5,2.415095110327444e-8,0.001202564674709609,-1.66730256383639e-5,2.4008615527302114e-8,0.0012027634568679232,-1.6487847620334767e-5,2.3895505198766226e-8,0.001202904030611828,-1.6390163394670685e-5,2.3835574955575874e-8,0.0012030311028923925,-1.6400516224166192e-5,2.384078723594285e-8,0.0012031951747230444,-1.6513004713512284e-5,2.390712060734509e-8,0.001203439368777117,-1.6695385826531313e-5,2.4014786720648956e-8,0.0012037875416534632,-1.6896357132806125e-5,2.413273573212916e-8,0.0012042369997383238,-1.7058417430140396e-5,2.422642990299439e-8,0.001204758270153749,-1.7133153462624448e-5,2.42669920335499e-8,0.0012053027296240449,-1.7094557087145528e-5,2.4239131779032624e-8,0.001205816243419089,-1.694576087819249e-5,2.414512189749825e-8,0.001206254208107606,-1.671652593603102e-5,2.4003224447649546e-8,0.0012065924774887938,-1.6452686017868706e-5,2.3841274764580573e-8,0.0012068306855210508,-1.6202252980745935e-5,2.3688257288772364e-8,0.0012069882451567506,-1.6003642610002783e-5,2.3567193058502826e-8,0.0012070962548821874,-1.5879317737007825e-5,2.3491350212189728e-8,0.0012071891126864752,-1.5834987172204415e-5,2.3463848234982794e-8,0.0012072982435586271,-1.5862395994595704e-5,2.3479429419473134E-08,0.0012074484919681056,-1.5943390285158226e-5,2.3526960795175952e-8,0.0012076565349967772,-1.6053727644420263e-5,2.3591735054261115e-8,0.0012079303224518817,-1.6166109640853678e-5,2.3657270713232458e-8,0.0012082687433021958,-1.625265566416613e-5,2.370677465035961e-8,0.0012086611896754904,-1.6287448494366172e-5,2.372466631141001e-8,0.0012090872917999832,-1.6249836702848495e-5,2.3698580523446967e-8,0.0012095176855486077,-1.6128815528154758e-5,2.3622028928013453e-8,0.0012099170613362122,-1.592798579392285e-5,2.349739986274672e-8,0.0012102505659388227,-1.566936060894537e-5,2.3338237567455915e-8,0.0012104933479661164,-1.5393153749585413e-5,2.316906420901978e-8,0.0012106406191476266,-1.5150881099106516e-5,2.302113572545944e-8,0.001210713427762985,-1.4991745019339821e-5,2.2924136337323242e-8,0.0012107557250189674,-1.4946543294335746e-5,2.2896419733099684e-8,0.0012108221716802248,-1.5016161651831003e-5,2.293810304377412e-8,0.0012109612315525406,-1.5170264902251345e-5,2.3030401775421017e-8,0.0012112005956738774,-1.535671009607627e-5,2.3141465559964834e-8,0.0012115402123723076,-1.551722648703216e-5,2.3235958218962858e-8,0.0012119541203185218,-1.5603217342101987e-5,2.32846361790215e-8,0.0012123989690091418,-1.558704649773601e-5,2.32711262155396e-8,0.0012128258188160085,-1.546672637976945e-5,2.3194667025593706e-8,0.0012131919055231588,-1.526397476343263e-5,2.306882035076686e-8,0.001213469672752588,-1.5016981076206275e-5,2.2916988632259907e-8,0.0012136512717100716,-1.4770193242323362e-5,2.2766165374691033e-8,0.0012137479589100495,-1.4563974629347552e-5,2.2640665341646183e-8,0.0012137852603573004,-1.4426773355970368e-5,2.255743926778347e-8,0.0012137959093788662,-1.4371343522844578e-5,2.2523883713028728e-8,0.0012138128365966673,-1.439499826481813e-5,2.2538091856692798e-8,0.0012138638400819995,-1.4482668698853964e-5,2.2590762305896745e-8,0.0012139685086682349,-1.4611158244269921e-5,2.2667775734842887e-8,0.0012141370773553156,-1.4753294457875256e-5,2.2752669276880412e-8,0.0012143704447298367,-1.4881339284913565e-5,2.2828655628043122e-8,0.0012146606157735983,-1.4969696583580246e-5,2.2880242761076628e-8,0.0012149911979015464,-1.499739616837105e-5,2.2894754107216863e-8,0.001215338074413792,-1.495094088433912e-5,2.286409075695815e-8,0.0012156709220629822,-1.4827860365214653e-5,2.278691472150337e-8,0.0012159566967008494,-1.4640607873998432e-5,2.2671006872583375e-8,0.0012161661678526474,-1.4419214392042551e-5,2.253482998176492e-8,0.0012162834218881762,-1.4209794962010202e-5,2.2406545421342624e-8,0.001216315642396274,-1.4065845309811994e-5,2.2318651755283653e-8,0.0012162975273846636,-1.4032046896515793e-5,2.229810801795348e-8,0.001216284646636957,-1.412603160851158e-5,2.2355282871068613e-8,0.0012163354726003424,-1.4328040488737538e-5,2.2477767363016963e-8,0.0012164899159747096,-1.4585949126754397e-5,2.263355123417095e-8,0.001216755574130199,-1.4833892797710722e-5,2.278243853374842e-8,0.0012171078245810246,-1.5014490026863692e-5,2.2889603737556964e-8,0.001217501208749591,-1.5094377647005056e-5,2.2935034657986378e-8,0.0012178847630020077,-1.5068934395509631e-5,2.2916347417685273e-8,0.0012182150285436164,-1.4958137548021152e-5,2.2846155074825506e-8,0.0012184640069405344,-1.4797783644600629e-5,2.2746590779909395e-8,0.0012186220505673322,-1.4629683731770791e-5,2.2643235920746163e-8,0.001218696822913379,-1.449297270290909e-5,2.2559801522444672e-8,0.0012187095811834294,-1.4417539138099393e-5,2.2514186857630122e-8,0.0012186898663968694,-1.4420061297596525e-5,2.2516180023635898e-8,0.0012186696633395672,-1.4502833252156467e-5,2.2566860603567102e-8,0.0012186780735641304,-1.4655108434294776e-5,2.2659490899290508e-8,0.0012187372918174148,-1.4856253456001961e-5,2.2781443114298367e-8,0.001218860273629298,-1.5079824490775369e-5,2.2916635639418696e-8,0.0012190500435946263,-1.5297700051893458e-5,2.3047988343221898e-8,0.001219300200263371,-1.548365519236493e-5,2.3159560794279936e-8,0.0012195960618367548,-1.5616237415079354e-5,2.3238309613797606e-8,0.0012199161265676276,-1.568118550987916e-5,2.3275603178996437e-8,0.0012202338545077081,-1.567373100870673e-5,2.326866879195279e-8,0.0012205201561264112,-1.560100091808706e-5,2.3222067337371707e-8,0.001220747382989795,-1.5484226141098953e-5,2.3148995007320677e-8,0.0012208955835540899,-1.535941411892994e-5,2.3071605072069785e-8,0.0012209607427107806,-1.5274050539459638e-5,2.3018902382756045e-8,0.001220962475274646,-1.5277280997782236e-5,2.3020705792687032e-8,0.0012209458731045407,-1.5403436960660497e-5,2.309762894932575e-8,0.0012209717976255354,-1.565448470536381e-5,2.3250476497938733e-8,0.0012210955463632595,-1.5992317511104423e-5,2.345566341649283e-8,0.0012213435678971353,-1.634934524496698e-5,2.367175263118225e-8,0.0012217022640911984,-1.6653999885394203e-5,2.3855040758167472e-8,0.0012221254162641652,-1.685673242853055e-5,2.397543609100118e-8,0.0012225539172616843,-1.694295513018085e-5,2.4024369111537456e-8,0.0012229355612905532,-1.6930207344080828e-5,2.4013018459709848e-8,0.0012232368258948774,-1.6856088422204816e-5,2.3964815471614588e-8,0.001223445818883135,-1.6764870074623695e-5,2.3907108196114857e-8,0.0012235694616662836,-1.66972195773145e-5,2.3864781052871904e-8,0.0012236282176459417,-1.668400111843338e-5,2.3856473140188308e-8,0.0012236504409797394,-1.6743379709783217e-5,2.3892909894168513e-8,0.0012236671763620997,-1.6880175503808295e-5,2.3976645895061022e-8,0.001223707624433692,-1.708683221483701e-5,2.4102766441136323e-8,0.0012237954317209335,-1.734565340062886e-5,2.426029685357651e-8,0.0012239459921608604,-1.7631973134540477e-5,2.4434117926847972e-8,0.0012241649213519893,-1.791791608308859e-5,2.4607207076905056e-8,0.0012244478183697678,-1.817632574317451e-5,2.476299133590999e-8,0.0012247812244358886,-1.838435464330882e-5,2.4887533086232756e-8,0.0012251444556581857,-1.8526399189167512e-5,2.4971356499031972e-8,0.001225512030680893,-1.8596356874691012e-5,2.5010875116620252e-8,0.0012258566090267735,-1.8599249204608337e-5,2.500940666446154e-8,0.0012261525206215848,-1.8552184327634754e-5,2.4977727871947743e-8,0.0012263801754533244,-1.8484389126531722e-5,2.4934001023126065e-8,0.001226531589440995,-1.8435353897332787e-5,2.4902521731442044e-8,0.0012266163824655456,-1.844942436845583e-5,2.4910327037782435e-8,0.0012266658987470957,-1.8565429063659797e-5,2.498085133256966e-8,0.0012267312754294553,-1.880207278591228e-5,2.5125090674904964e-8,0.0012268713258371598,-1.914430998630717e-5,2.533341535608457e-8,0.001227131022819862,-1.954022969406463e-5,2.557377342250434e-8,0.0012275202373195173,-1.991570456003484e-5,2.5800673545950185e-8,0.0012280066605481112,-2.0202550073462475e-5,2.5972399157529153e-8,0.0012285289260753722,-2.036442274620531e-5,2.6066887113834473e-8,0.0012290215337736447,-2.0405843598096857e-5,2.608730247250189e-8,0.0012294364792536673,-2.0362831684957532e-5,2.605626237353159e-8,0.0012297525480403702,-2.0285001528169813e-5,2.600470001447718e-8,0.001229973287643303,-2.0219675206655426e-5,2.596192790923771e-8,0.00123011945294299,-2.0202577079814657e-5,2.5949829286862887e-8,0.0012302208090147813,-2.0254570927893388e-5,2.598089556577197e-8,0.001230309575850642,-2.0382079862008366e-5,2.6058620701201978e-8,0.0012304158345859968,-2.0579100696291248e-5,2.6178889594627654e-8,0.0012305643517482184,-2.0829746668818747e-5,2.6331638580619262e-8,0.0012307723235892732,-2.1111062515209374e-5,2.6502607204116547e-8,0.0012310478548748765,-2.1396114777007075e-5,2.6675202086625746e-8,0.0012313891899758615,-2.1657391046044656e-5,2.6832534064826254e-8,0.0012317848985939483,-2.187044513583133e-5,2.6959629716658373e-8,0.001232215249623264,-2.2017430944470345e-5,2.7045614719736176e-8,0.0012326547447966258,-2.209001773221379e-5,2.7085542859440893e-8,0.0012330755592392312,-2.2091326924775106e-5,2.70816135899996e-8,0.0012334516279752959,-2.203663011034868e-5,2.7043580150642033e-8,0.001233763101802164,-2.1952544155669515e-5,2.6988170698065287e-8,0.001234000846053606,-2.1874499915341305e-5,2.6937404354593894e-8,0.0012341705639102628,-2.184212653370876e-5,2.691563704449534e-8,0.0012342956223987628,-2.1891979650956894e-5,2.6945050302677308e-8,0.001234416688585595,-2.2047557895417835e-5,2.7039585964648845e-8,0.0012345855888722889,-2.23083766412273e-5,2.719839449139654e-8,0.0012348517249173988,-2.2642708147870215e-5,2.7401545144008608e-8,0.0012352433616983397,-2.2990593392258627e-5,2.7611962377998624e-8,0.0012357521897338616,-2.328103233247334e-5,2.778596961972363e-8,0.0012363319390749912,-2.3458241076732956e-5,2.7889391237730747e-8,0.001236914832205126,-2.3503051358274284e-5,2.7910738893106944e-8,0.0012374372602634584,-2.34370143285074e-5,2.7863779646029196e-8,0.0012378600978094599,-2.3308844078715344e-5,2.7779123129400366e-8,0.001238175025995959,-2.3173834169043024e-5,2.7691345091404345e-8,0.0012383987375117022,-2.3077516654817154e-5,2.7628715793488518e-8,0.0012385621901050622,-2.304804267920002e-5,2.7608434146434345e-8,0.001238700730871274,-2.3095701387628564e-5,2.7636418998067664e-8,0.0012388473917175444,-2.321606101218933e-5,2.7709418024290113e-8,0.0012390291726658905,-2.339397590953754e-5,2.781763697063455e-8,0.001239265187271221,-2.3607198404592336e-5,2.7947049692492793e-8,0.0012395656932513142,-2.3829477290720274e-5,2.808131142382676e-8,0.001239931567574002,-2.4033454791804963e-5,2.8203502070202986e-8,0.001240354197034772,-2.419368952870141e-5,2.8297948187087624e-8,0.0012408160639877112,-2.4289979933212816e-5,2.835226322126063e-8,0.0012412924936616241,-2.431076507997636e-5,2.835947104322042e-8,0.001241754847581157,-2.4255949556786933e-5,2.8319783468064274e-8,0.0012421750027906508,-2.413837942889537e-5,2.8241514856497743e-8,0.0012425305735050856,-2.398330917104594e-5,2.8140695039591662e-8,0.001242810041407821,-2.3825431793646963e-5,2.803911624686781e-8,0.0012430167548026835,-2.3703494765039817e-5,2.796086702784852e-8,0.0012431707595330977,-2.3653019187846447e-5,2.792773776976358e-8,0.0012433075282853305,-2.3697965910599013e-5,2.7954078812129726e-8,0.0012434727173970845,-2.3842679769997022e-5,2.8041949740427052e-8,0.001243712463212426,-2.4066405760676784e-5,2.8177927469785303e-8,0.0012440601035040232,-2.432362427984792e-5,2.8333484399655164e-8,0.0012445228361571915,-2.4553159928907133e-5,2.84706844897476e-8,0.001245074558848186,-2.469598742631698e-5,2.8553156726817562e-8,0.0012456608862963842,-2.4715959349908565e-5,2.8558858281151512e-8,0.001246216708050109,-2.4613291013679496e-5,2.8488399775580813e-8,0.001246688489499405,-2.4423038202625592e-5,2.8364074640010765e-8,0.0012470500759516796,-2.4199802086790886e-5,2.8220269933140577e-8,0.0012473056186578205,-2.3997923243581362e-5,2.8091007067191165e-8,0.0012474816718979766,-2.3856832628854112e-5,2.8000725693752732e-8,0.0012476152297567857,-2.3795467178827526e-5,2.796083255759579e-8,0.0012477434727424471,-2.3813936544781482e-5,2.797087896365848e-8,0.0012478974825907967,-2.3898538079999737e-5,2.802185450423327e-8,0.0012480994715242364,-2.4027063105389873e-5,2.8099607177080368e-8,0.0012483620860405254,-2.4173063448967265e-5,2.8187527217003586e-8,0.0012486885425988454,-2.4309038643380227e-5,2.8268487756534477e-8,0.0012490729604937483,-2.4409048929309893e-5,2.832640747738927e-8,0.0012495008229754566,-2.4451320673572244e-5,2.8347832218140762e-8,0.0012499499393055541,-2.442119484453209e-5,2.8323772418069707e-8,0.0012503925365264328,-2.4314275664468087e-5,2.8251695604431464e-8,0.0012507990005257714,-2.4139030867608762e-5,2.8137171704645568e-8,0.001251143262636996,-2.391768914256767e-5,2.7994415164953935e-8,0.0012514090363835088,-2.368426701735876e-5,2.7844976389814205e-8,0.0012515953110546903,-2.3479107716070564e-5,2.771421375274228e-8,0.0012517191350728285,-2.3340474530020665e-5,2.7625933544735366e-8,0.0012518141482856812,-2.3295030625602135e-5,2.7596407518891168e-8,0.00125192444142756,-2.334975383124914e-5,2.7629401271552236e-8,0.0012520946514939732,-2.348776438369355e-5,2.7713746828686006e-8,0.0012523583631477433,-2.3669877510084097e-5,2.7824516476769492e-8,0.0012527277286170939,-2.38425421336231e-5,2.7928118057615044e-8,0.0012531876409788102,-2.3951178423680048e-5,2.7990642199443437e-8,0.0012536974445180235,-2.395580939174183e-5,2.7987543221912417e-8,0.0012542012794675764,-2.3843814405731823e-5,2.7911488512020674e-8,0.0012546444912580575,-2.3634230998913443e-5,2.7774939914552914e-8,0.0012549898708866338,-2.337098949679818e-5,2.760582318235473e-8,0.0012552269467497428,-2.31078977299701e-5,2.7438033142794907e-8,0.0012553712247767674,-2.2892283909759187e-5,2.730112602560997e-8,0.001255455539610628,-2.2753872111695107e-5,2.7213370434487382e-8,0.0012555187275849952,-2.2701515499694785e-5,2.7179817449245153e-8,0.0012555962675502516,-2.2726235663317327e-5,2.719436714414756e-8,0.0012557148843836085,-2.280713457832666e-5,2.724360162183075e-8,0.001255890687072248,-2.2917285638186973e-5,2.7310518757386415e-8,0.001256129398595488,-2.3028282424195017e-5,2.7377340966423323e-8,0.0012564273842037858,-2.3113398094334926e-5,2.742741470506988e-8,0.001256772748129926,-2.3149894992070267e-5,2.7446594516070987e-8,0.0012571463545275083,-2.3121157899020574e-5,2.7424565261140528e-8,0.0012575231640768645,-2.3019131476612913e-5,2.7356401669610725e-8,0.001257874612111306,-2.284700440575688e-5,2.7244296214391676e-8,0.0012581727000068063,-2.2621361371800596e-5,2.7098925268443296e-8,0.0012583959412701018,-2.2372382207858894e-5,2.6939533510837228e-8,0.0012585362273141267,-2.2140433227805133e-5,2.6791698499354605e-8,0.0012586042852673735,-2.196814660205169e-5,2.6682241581275458e-8,0.0012586306549829782,-2.1889126806689826e-5,2.6632055608261722e-8,0.0012586601311620252,-2.1916855981065547e-5,2.664914718129419e-8,0.0012587403517282045,-2.2038399148444123e-5,2.672480002912566e-8,0.0012589081308858302,-2.2216070066749486e-5,2.6834805998698666e-8,0.001259178401966701,-2.2397001174915816e-5,2.6945651229235044e-8,0.0012595395662738137,-2.2527436600423014e-5,2.7023591961309044e-8,0.0012599565073977735,-2.2567114697326255e-5,2.704368259177285e-8,0.0012603800277351954,-2.249955563699239e-5,2.6996141762203254e-8,0.0012607598300570521,-2.2335587057110256e-5,2.6888416016816608e-8,0.0012610573544834757,-2.2109330675960614e-5,2.674249136516303e-8,0.0012612547690560867,-2.186800615213288e-5,2.6588343449294578e-8,0.0012613575758832708,-2.1658922356915117e-5,2.6455686208838244e-8,0.001261390591051946,-2.151793017938794e-5,2.6366737636690552e-8,0.00126138947197204,-2.146269522919313e-5,2.6332111564846554e-8,0.001261391218294045,-2.1491868003257122e-5,2.635046486548411e-8,0.0012614266428808319,-2.15888902989852e-5,2.641103229929555e-8,0.0012615162216082754,-2.1727952954471072e-5,2.6497431575663864e-8,0.0012616690635331466,-2.187983048108349e-5,2.6591299115901463e-8,0.0012618838439774989,-2.2016383972793845e-5,2.6675035116793972e-8,0.0012621505235054361,-2.2113585277586392e-5,2.6733624171416905e-8,0.0012624521180612978,-2.2153524616584108e-5,2.6755867859438524e-8,0.00126276632102878,-2.2126043067001626e-5,2.6735440962205498e-8,0.0012630672801498218,-2.2030481309721585e-5,2.6672051476437688e-8,0.0012633282001385453,-2.1877576094169603e-5,2.6572675677080794e-8,0.0012635254927225803,-2.1690821374928485e-5,2.6452399559931268e-8,0.0012636447200479173,-2.150581193844573e-5,2.6333924961939377e-8,0.0012636873694712005,-2.1365630790647973e-5,2.62445471842398e-8,0.001263675689203714,-2.1311092535360135e-5,2.6209908895091034e-8,0.001263651583389443,-2.1367352542053175e-5,2.624553285893486e-8,0.0012636669236140193,-2.1532112858698217e-5,2.6349454998586358e-8,0.0012637672086514252,-2.1772261625864342e-5,2.6500247615930587e-8,0.0012639754671761418,-2.2032532614826404e-5,2.666264158225693e-8,0.001264284192241647,-2.2253087100624153e-5,2.679874434506354e-8,0.0012646586664950854,-2.238799657886381e-5,2.687976398338216e-8,0.001265048952007261,-2.2417146448438736e-5,2.68935001124463e-8,0.0012654046375396352,-2.2348637976309602e-5,2.6845743928639548e-8,0.001265687166465729,-2.2213199967963506e-5,2.6756558234120423e-8,0.0012658770847539854,-2.205411237295862e-5,2.6653709859809845e-8,0.0012659757694239995,-2.1916095275190147e-5,2.6565519875628988e-8,0.0012660024992930466,-2.1835733466883678e-5,2.6514812194613012e-8,0.0012659883363219941,-2.183504682483079e-5,2.6514975770749016e-8,0.001265968564043513,-2.1918984668542527e-5,2.656857289282304e-8,0.0012659755016867593,-2.2076758125450218e-5,2.666835322071545e-8,0.0012660331867845541,-2.2286013655878877e-5,2.6799978389807436e-8,0.0012661546447266811,-2.2518299270481508e-5,2.6945459630868268e-8,0.0012663416011667139,-2.2744366594706175e-5,2.708642168120064e-8,0.0012665859156780787,-2.2938374403736194e-5,2.720666230998871e-8,0.0012668718340026004,-2.308069895407578e-5,2.729387607334129e-8,0.0012671783608418628,-2.315961813842999e-5,2.7340731279403066e-8,0.0012674815022603028,-2.3172399530941718e-5,2.734561490457562e-8,0.0012677565540440863,-2.3126206424985553e-5,2.7313258391016998e-8,0.0012679809078356128,-2.3038880813856224e-5,2.7255232108115096e-8,0.0012681379667225815,-2.293909764723427e-5,2.718996925380211e-8,0.001268222410981478,-2.2864607647463806e-5,2.714153350665855e-8,0.0012682458991817589,-2.285674137919671e-5,2.7136033101520892e-8,0.0012682404442877298,-2.294997743206441e-5,2.7194986348181077e-8,0.0012682552261359058,-2.3158135615329883e-5,2.732665258099185e-8,0.0012683438357439264,-2.3463184370203866e-5,2.751908579692521e-8,0.0012685445912806244,-2.381508922712379e-5,2.774017528295886e-8,0.0012688635218484556,-2.4146813037913072e-5,2.794723304902699e-8,0.0012692705636366676,-2.439852622614259e-5,2.8102383947438925e-8,0.0012697114811386142,-2.453808374801821e-5,2.818558432617654e-8,0.0012701278926337827,-2.456798692026666e-5,2.8199025785485304E-08,0.0012704747097447653,-2.451874191640579e-5,2.8162796580241977e-8,0.0012707290511519327,-2.4435369716645258e-5,2.8106093111468987e-8,0.00127089082105009,-2.4363968771578763e-5,2.8058468845464867e-8,0.0012709780445711418,-2.4341966719446985e-5,2.804354865594735e-8,0.0012710200656264432,-2.439279816146933e-5,2.8075722588673664e-8,0.001271050641705294,-2.4524258495752033e-5,2.8159296031538897e-8,0.0012711018882705825,-2.4729497552478398e-5,2.8289339641440367e-8,0.0012711994916664129,-2.4989923105568873e-5,2.8453680377103202e-8,0.0012713595362361608,-2.5279401250563086e-5,2.863560229913506e-8,0.0012715871496310693,-2.5568988582094783e-5,2.8816787886148046e-8,0.0012718768697763392,-2.5831442116825033e-5,2.898007870930307e-8,0.0012722144010838205,-2.6044933071783422e-5,2.911175618979125e-8,0.0012725792455093397,-2.619559555621507e-5,2.9203144635270495e-8,0.001272947626786604,-2.627888618297095e-5,2.9251514544716158e-8,0.0012732953571026233,-2.630006763486035e-5,2.9260441855358742e-8,0.0012736006475878774,-2.6274127894061375e-5,2.9239767557704245e-8,0.0012738470763975945,-2.6225193166156763e-5,2.9205161411702542e-8,0.0012740270157430664,-2.6185124088254545e-5,2.9177104177386633e-8,0.0012741455908807501,-2.6190414429344983e-5,2.9178785414269988e-8,0.001274224316427514,-2.62760887589678e-5,2.9232165679184445e-8,0.0012743020615554482,-2.646586880061536e-5,2.935178899471236e-8,0.001274429803943883,-2.6760187731966526e-5,2.9537333686976303e-8,0.0012746566213436674,-2.712756647179489e-5,2.976831346906732e-8,0.0012750096385508432,-2.7507546288788524e-5,3.0006033761210905e-8,0.0012754781610912526,-2.7829406560484464e-5,3.020548189174035e-8,0.001276013858158292,-2.8039650417442057e-5,3.033279425528792e-8,0.0012765492750488386,-2.812244159011328e-5,3.0378310890776146e-8,0.001277023642649741,-2.810137217333263e-5,3.035772861075833e-8,0.0012774012466509133,-2.802473521408781e-5,3.0302589247883327e-8,0.0012776758745853178,-2.7945890596938154e-5,3.024749497268067e-8,0.0012778647758220772,-2.79085430819153e-5,3.022048134829472e-8,0.001277998800793535,-2.793980262467159e-5,3.0238533240266736e-8,0.0012781132813501053,-2.804931557698271e-5,3.0307171318946226e-8,0.0012782413834105137,-2.8231718287190717e-5,3.042226138414893e-8,0.0012784098972853835,-2.8470294804898002e-5,3.0572571320992245e-8,0.0012786367518833218,-2.8740849073584766e-5,3.074235593251752e-8,0.0012789297433653374,-2.9015619036969142e-5,3.091384476109464e-8,0.0012792863683563302,-2.9267159831319898e-5,3.10696300382083e-8,0.0012796947422641365,-2.9471974501639326e-5,3.119488465856777e-8,0.0012801355484260517,-2.9613619515355336e-5,3.127929159311357e-8,0.0012805848824221722,-2.9684936207415627e-5,3.131847898599492e-8,0.001281017638662968,-2.968910490383866e-5,3.131473845451968e-8,0.0012814109964758992,-2.963950002011583e-5,3.1276957457645865e-8,0.0012817477332364437,-2.9558493616968298e-5,3.1219814796159154e-8,0.0012820192456920046,-2.9475284638605605e-5,3.116227933862801e-8,0.001282228197848576,-2.9422701983244574e-5,3.1125420021043346e-8,0.001282390606699797,-2.943268070189973e-5,3.112941115271035e-8,0.0012825366317504978,-2.9529907636028162e-5,3.118948519163852e-8,0.0012827084194776662,-2.9723676059624966e-5,3.131088059813362e-8,0.0012829528288665348,-2.9999700516418604e-5,3.1483844908667825e-8,0.0012833079130263225,-3.0316201547194518e-5,3.168132285335997e-8,0.0012837859765342673,-3.061020073146328e-5,3.1863018658290956e-8,0.0012843618450062628,-3.081684226297564e-5,3.198765635324121e-8,0.0012849765874220782,-3.089521995994752e-5,3.20294184946202e-8,0.0012855586318208988,-3.084588285428632e-5,3.1989175468429604e-8,0.0012860510837547415,-3.0708540178211655e-5,3.189304549666774e-8,0.001286429391721135,-3.054259065273131e-5,3.1779790208841204e-8,0.0012867022080911398,-3.0404062537684042e-5,3.1685762437681995e-8,0.001286900377279203,-3.0330777585708804e-5,3.163518182633183e-8,0.001287063300987379,-3.0338387143386424e-5,3.163759774986754e-8,0.001287228565364857,-3.042354922701865e-5,3.1690131287687944e-8,0.0012874261434639106,-3.056970632894269e-5,3.1781451277475414e-8,0.0012876761011276928,-3.075264889043229e-5,3.189554315979008e-8,0.001287988197340863,-3.094489886686548e-5,3.201458498978887e-8,0.0012883622633117567,-3.111913753711612e-5,3.2121090216733314e-8,0.0012887890246263095,-3.125116421789353e-5,3.219969606469643e-8,0.0012892514436496775,-3.1322610080414284e-5,3.223881626240157e-8,0.0012897267572810904,-3.132337450102907e-5,3.223217751474067e-8,0.0012901893827250341,-3.125348366035541e-5,3.2180042784654345e-8,0.0012906146194111945,-3.1123848609875844e-5,3.208974051574626e-8,0.0012909826969805158,-3.0955505293186115e-5,3.197517438868874e-8,0.0012912825565626971,-3.0777215881050795e-5,3.185520292845642e-8,0.0012915147687625943,-3.0621540642874033e-5,3.175097395022615e-8,0.001291693035842951,-3.0519716537336427E-05,3.168249183610786e-8,0.0012918438362249742,-3.0495841413462402e-5,3.1664819795655e-8,0.0012920037928547566,-3.056087693364674e-5,3.1704304670211076e-8,0.0012922141715474165,-3.0707282053063105e-5,3.17953364867465e-8,0.001292512034520009,-3.090599709338316e-5,3.1918661500173786e-8,0.0012929187002381516,-3.110850773894603e-5,3.2042880122178096e-8,0.0012934285950733568,-3.1256693423193994e-5,3.213078673276235e-8,0.0012940044453168913,-3.1300498297250774e-5,3.215061328521406e-8,0.001294584877820033,-3.12176444133966e-5,3.20885883560331e-8,0.001295104589766634,-3.102462475607171e-5,3.195596529494129e-8,0.0012955179603695564,-3.077085167751126e-5,3.178521309227125e-8,0.0012958131840410975,-3.0518540566581096e-5,3.1616916955709714e-8,0.0012960105999187787,-3.032026641965267e-5,3.148511085415194e-8,0.0012961495978159076,-3.0205433323736027e-5,3.140845109678617e-8,0.0012962734470908504,-3.0178565979806494e-5,3.1389212768773746e-8,0.0012964186126221632,-3.022527856628844e-5,3.141738252834504e-8,0.0012966099467786687,-3.032037295760454e-5,3.1476126820308665e-8,0.0012968600751613467,-3.043465498738407e-5,3.154631955101938e-8,0.0012971707339509185,-3.0539529403013107e-5,3.160949484610287e-8,0.0012975345391934867,-3.0609886172662965e-5,3.164960498486348e-8,0.0012979366525891216,-3.062613758462698e-5,3.1654217987039235e-8,0.0012983564533401342,-3.057599296156603e-5,3.1615600298714555e-8,0.0012987695840761062,-3.0456167864014533e-5,3.1531828857941956e-8,0.0012991507884455799,-3.027379091331488e-5,3.140775068646107e-8,0.0012994777236449333,-3.004683999448522e-5,3.125530194558217e-8,0.0012997353921117309,-2.9802813505353085e-5,3.1092622133109445e-8,0.0012999202861004046,-2.9575139003558806e-5,3.09416264273142e-8,0.0013000430270444395,-2.93974130243819e-5,3.0824133092212875e-8,0.001300128331498118,-2.9296350396882437e-5,3.075718715872455e-8,0.0013002116679433546,-2.928500804947685e-5,3.074866956412388e-8,0.0013003328193243616,-2.935801434543197e-5,3.0794343521651624e-8,0.001300527308605543,-2.9490231267340253e-5,3.0877225135393917e-8,0.0013008171756119307,-2.9639869058835446e-5,3.0969838317194383e-8,0.0013012031591031939,-2.9756515314625574e-5,3.10395465251122e-8,0.0013016609455879465,-2.9793446563434323e-5,3.105650235031395e-8,0.0013021442562541905,-2.972172931898944e-5,3.100263591424007e-8,0.0013025961177511457,-2.9541337275106654e-5,3.087867894617946e-8,0.0013029660006317406,-2.9283509335878423e-5,3.0705543544897195e-8,0.0013032261586196996,-2.9001308736517474e-5,3.051808034793436e-8,0.0013033793833759004,-2.875164122635431e-5,3.035331118242153e-8,0.0013034547749617115,-2.8577237008618275e-5,3.023868954419752e-8,0.0013034950005774671,-2.8496554952853205e-5,3.018561791167246e-8,0.0013035422626375217,-2.8503927091162528e-5,3.018972942257647e-8,0.0013036286487182313,-2.8576659673191224e-5,3.023572044825167e-8,0.0013037723920898197,-2.8683998777921855e-5,3.0303320007544866e-8,0.0013039784710675347,-2.8794434907111588e-5,3.037204952208462e-8,0.0013042411712836108,-2.8880283437659195e-5,3.042410362765577e-8,0.0013045469059940415,-2.8920083977942182e-5,3.044577741719525e-8,0.0013048765892900785,-2.8899827777303695e-5,3.042817208710491e-8,0.0013052076096280716,-2.8813836177220682e-5,3.0367751697282956e-8,0.0013055158699504063,-2.8665686201342626e-5,3.026699500311816e-8,0.0013057784723598796,-2.8469027833693583e-5,3.0134989400730604e-8,0.0013059774012722158,-2.824758312302742e-5,2.998744624708401e-8,0.0013061039917527009,-2.803329661145913e-5,2.984543622349855e-8,0.0013061631500154798,-2.786174715368294e-5,2.973227959525612e-8,0.0013061755169066931,-2.7764752904717206e-5,2.966860348764004e-8,0.0013061756394885842,-2.7761595595907e-5,2.9666567318660748e-8,0.0013062052931786697,-2.785175086959786e-5,2.972518749832201e-8,0.001306303142538855,-2.801230059159129e-5,2.9828826603746476e-8,0.0013064938194895942,-2.820182285028999e-5,2.9949955265754234e-8,0.001306780086361943,-2.8370168467178228e-5,3.005571106771042e-8,0.0013071407644421912,-2.8471378373462444e-5,3.0116392578181026e-8,0.0013075352201250116,-2.8475996159682643e-5,3.011342304590286e-8,0.001307913334487316,-2.8379292346448963e-5,3.0044539506056616e-8,0.0013082284553436203,-2.820295608258615e-5,2.992467194139616e-8,0.001308449795111905,-2.798934380814309e-5,2.9781980996995586e-8,0.0013085703641908598,-2.7789555942438875e-5,2.9649940584985727e-8,0.0013086075992558702,-2.7649081856834136e-5,2.9557946510256037e-8,0.0013085965713823258,-2.7596068441511594e-5,2.9523765739778143e-8,0.001308578775603071,-2.763613069992761e-5,2.9550353019012925e-8,0.0013085910545795772,-2.7754483402330733e-5,2.9627464816654964e-8,0.0013086582864577261,-2.7923038311927625e-5,2.973644409629548e-8,0.00130879097813508,-2.810881146934206e-5,2.985573633256056e-8,0.0013089866559391336,-2.8280794299983097e-5,2.9965288371083946e-8,0.0013092330853364449,-2.841421177594859e-5,3.004918959647898e-8,0.0013095117218239086,-2.849249915857971e-5,3.00968495932514e-8,0.0013098006051115334,-2.8507901829533638e-5,3.010335322333937e-8,0.0013100766331532816,-2.8461574612671678e-5,3.006956699423517e-8,0.00131031764281404,-2.8363692896845595e-5,3.0002285569679514e-8,0.0013105049028917662,-2.823351948220192e-5,2.991431821194102e-8,0.0013106264457913824,-2.809877946612421e-5,2.9824048280105456e-8,0.001310681133427025,-2.7993271777071674e-5,2.9753766780009736e-8,0.0013106824426351005,-2.795161269268233e-5,2.972610709291234e-8,0.0013106598420135267,-2.8000824017845768e-5,2.975846481850516e-8,0.001310655166280242,-2.8150479328616627e-5,2.9856575254154354e-8,0.0013107127876955784,-2.8385509043680695e-5,3.000993471753322e-8,0.0013108657814568222,-2.866643869990418e-5,3.0192141079751784e-8,0.0013111236756196114,-2.8939129152693387e-5,3.036744088323199e-8,0.0013114677764056418,-2.915104009753794e-5,3.0501486920959236e-8,0.001311856492484787,-2.9267251923133067e-5,3.0571854184595145e-8,0.001312238049311916,-2.9279859822208612e-5,3.057411525864111e-8,0.0013125651169096678,-2.9208198159179714e-5,3.0521802359526976e-8,0.0013128064021552001,-2.909142250826646e-5,3.044129361786551e-8,0.0013129525886068233,-2.897698933927629e-5,3.0364030849243177e-8,0.001313016206816826,-2.890865807546817e-5,3.031854722956662e-8,0.001313026461668143,-2.8916887043806896e-5,3.0324238748257375e-8,0.0013130209243820167,-2.901349026915853e-5,3.0388075426164644e-8,0.0013130364508609068,-2.91912467162573e-5,3.050460897562148e-8,0.0013131016267059507,-2.9427863667728573e-5,3.0658773423636455e-8,0.00131323234339437,-2.9692576163541312e-5,3.0830280966021656e-8,0.0013134309224520154,-2.9953194080713292e-5,3.099817761610996e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json new file mode 100644 index 0000000..e8e2db5 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":14000,"numberOfSamples":1000,"samples":[0.0013136880538731968,-3.0181825300251084e-5,3.1144455018197914e-8,0.0013139862307697747,-3.0358458604268804e-5,3.125626468859012e-8,0.0013143034381558063,-3.0472498704118995e-5,3.1326857923882795e-8,0.001314616342296335,-3.0522889122674205e-5,3.135568412117831e-8,0.0013149028238326915,-3.051757614543907e-5,3.134810730752583e-8,0.0013151441476950397,-3.0472812693602606e-5,3.1315005489895234e-8,0.001315327245423572,-3.041233669157899e-5,3.127221966442859e-8,0.0013154474985632677,-3.0365940022199845e-5,3.1239522569258994e-8,0.0013155119761371786,-3.0366482616605727e-5,3.123852579233063e-8,0.0013155421786821661,-3.044428590458291e-5,3.1288903751562086e-8,0.0013155741637083083,-3.061859253490029e-5,3.140279579367739e-8,0.0013156532826805987,-3.08878545724263e-5,3.15785553459714e-8,0.0013158221093964287,-3.122350814634265e-5,3.179684474210843e-8,0.0013161043666861684,-3.1573152017452694e-5,3.202287220092828e-8,0.001316492562279381,-3.187552478285449e-5,3.221630534507893e-8,0.0013169475071545026,-3.2081986318948946e-5,3.234541530079332e-8,0.0013174114482328236,-3.217362581767834e-5,3.2398333198900105e-8,0.0013178279759007432,-3.216549962188907e-5,3.238578137269618e-8,0.0013181587209702065,-3.209786877058771e-5,3.233512178519737e-8,0.0013183908584672483,-3.202101456924127e-5,3.2280078366949867e-8,0.0013185355723118594,-3.198087692229784e-5,3.22510415181099e-8,0.0013186210256550192,-3.200948903377424e-5,3.226871171627078e-8,0.001318683516304464,-3.212087078817048e-5,3.2341550899422565e-8,0.0013187592325329092,-3.2311333689063695e-5,3.246626921888799e-8,0.0013188777975085585,-3.256278527721231e-5,3.263027897225073e-8,0.0013190580943835157,-3.28478210560236e-5,3.281520552707126e-8,0.001319306537685271,-3.3135522599053245e-5,3.30007052286256e-8,0.0013196176305973269,-3.339691167788335e-5,3.3167938459672674e-8,0.0013199762931723731,-3.360923943949643e-5,3.330224076991175e-8,0.001320361240591444,-3.3758679883073964e-5,3.339478932604852e-8,0.0013207486407314094,-3.3841371491741154e-5,3.3443266039948134e-8,0.0013211154170834028,-3.3863122696377714e-5,3.345170814905867e-8,0.0013214419486963593,-3.3838325595684376e-5,3.342984862739796e-8,0.0013217143059939618,-3.3788485178276064e-5,3.3392152957732015e-8,0.0013219262892678202,-3.374042925569602e-5,3.3356565064026065e-8,0.0013220814837101608,-3.37239298755937e-5,3.334280561542386e-8,0.0013221952658236343,-3.3768093745891034e-5,3.336987271475884e-8,0.0013222959339579021,-3.389572813238187e-5,3.345230413051685e-8,0.0013224231012386285,-3.411559264521433e-5,3.359518483099222e-8,0.001322620987373266,-3.44143314836092e-5,3.378904291433436e-8,0.0013229254974994617,-3.47525377055976e-5,3.4007455453146385e-8,0.0013233481259613213,-3.507078420316715e-5,3.421110391244622e-8,0.0013238651644779758,-3.5307915680853196e-5,3.435980179531848e-8,0.0013244214578083684,-3.5424988893193025e-5,3.4428250117923195e-8,0.0013249498096669955,-3.5421322382391885e-5,3.441665080515855e-8,0.0013253957656545127,-3.533284530570563e-5,3.4349593606930406e-8,0.0013257341054285624,-3.521518782185486e-5,3.4264687362774436e-8,0.0013259708733802966,-3.5122901891955616e-5,3.4198504380576074e-8,0.0013261345823387194,-3.509485421874728e-5,3.4176685340857736e-8,0.0013262639590043055,-3.514877227589115e-5,3.421034115508173e-8,0.0013263974759466818,-3.5282692478288204e-5,3.42972534612874e-8,0.0013265664975942637,-3.547980948220061e-5,3.4425417060696266e-8,0.00132679174008558,-3.5714173837029465e-5,3.457707337361339e-8,0.0013270820868991236,-3.595606011854193e-5,3.473236215303623e-8,0.0013274350277215283,-3.617667618018595e-5,3.487237396855363e-8,0.0013278383205704806,-3.6352045676457e-5,3.4981566469251094e-8,0.0013282725585155749,-3.6465885830951754e-5,3.504952018493835e-8,0.0013287143399232126,-3.651136884131447e-5,3.507202780552796e-8,0.001329139723468503,-3.649166207236073e-5,3.5051459488144146e-8,0.0013295275370495275,-3.6419245769639135e-5,3.499636143139478e-8,0.0013298621741601225,-3.631427873602864e-5,3.492040029054349e-8,0.0013301357987788196,-3.620233676919433e-5,3.484081953074903e-8,0.0013303500182077856,-3.6111625895291846e-5,3.4776475543805855e-8,0.0013305170072328,-3.606960581815073e-5,3.4745462642883064e-8,0.0013306599051258836,-3.609882203418703e-5,3.4762278550856455e-8,0.0013308118536023116,-3.621166286686944e-5,3.483441417239421e-8,0.0013310123518564367,-3.64043217054422e-5,3.495855682409469e-8,0.0013312994223816388,-3.6651762152887505e-5,3.511751481890027e-8,0.0013316973518746693,-3.6907391838432765e-5,3.528018149292224e-8,0.0013322032136629622,-3.711186898684884e-5,3.540737536800615e-8,0.0013327798493111566,-3.721219549322923e-5,3.546437127639159e-8,0.0013333634934342639,-3.718420813249119e-5,3.543571757580381e-8,0.001333886255019829,-3.70450465515009e-5,3.53335093009964e-8,0.0013343019613464686,-3.6846215847581066e-5,3.5192757078025216e-8,0.001334600413137058,-3.6651362298198277e-5,3.505642654975122e-8,0.0013348042208097524,-3.6512872822752915e-5,3.495958564720737e-8,0.0013349544109773996,-3.6458841744971036e-5,3.49205708479965e-8,0.0013350949386154267,-3.649215529746224e-5,3.49404840851344e-8,0.0013352621732775469,-3.659679818886342e-5,3.500770195061645e-8,0.001335480179315456,-3.6746003522191745e-5,3.510363508802379e-8,0.0013357600358690303,-3.6909212409168185e-5,3.520756323936493e-8,0.0013361011544938224,-3.705705068984642e-5,3.52999605336332e-8,0.00133649332519081,-3.7164741980348925e-5,3.536463540591373e-8,0.0013369190829818159,-3.7214510810799346e-5,3.539015342857483e-8,0.0013373563443612583,-3.719721204638616e-5,3.537079341232845e-8,0.0013377813051418917,-3.711323131523201e-5,3.530711046883947e-8,0.0013381715937814552,-3.697254005026054e-5,3.520601101140213e-8,0.0013385094912165925,-3.6793660324817705e-5,3.5080116340020854e-8,0.0013387847813319696,-3.660147627572446e-5,3.494630461274569e-8,0.0013389968351418553,-3.642410292771776e-5,3.482354178926302e-8,0.0013391557003256266,-3.628905404552198e-5,3.473019081800264e-8,0.0013392819820180002,-3.621893946658274e-5,3.468102678374732e-8,0.0013394052631200586,-3.622700347066692e-5,3.468425016446891e-8,0.0013395607383982387,-3.631286700900988e-5,3.473878515860904e-8,0.0013397835600754613,-3.645915330073845e-5,3.483228424044899e-8,0.0013401005623555385,-3.663056453013473e-5,3.494077405219707e-8,0.0013405202232471124,-3.6777887727110934e-5,3.5031461893425745e-8,0.0013410241084409612,-3.684910446392256e-5,3.5070089714356354e-8,0.0013415655317836142,-3.68068037108336e-5,3.503236888286036e-8,0.0013420805713068025,-3.664539114072159e-5,3.491530557749418e-8,0.0013425100358751974,-3.6397470548011556e-5,3.47413920987351e-8,0.00134282186684753,-3.6122771266874264e-5,3.455114282299104e-8,0.0013430210440999052,-3.5884585735838275e-5,3.438718523558038e-8,0.0013431424937006674,-3.5727401868071906e-5,3.427912167202074e-8,0.00134323392387406,-3.5666709476200635e-5,3.423668442759081e-8,0.0013433393957544833,-3.569188452387105e-5,3.425186840423222e-8,0.0013434898472930886,-3.577592172660759e-5,3.430576805004325e-8,0.0013437006458960645,-3.588557734935549e-5,3.4375631883152696e-8,0.0013439733632099559,-3.598872432152733e-5,3.443987682266083e-8,0.0013442990272794215,-3.6058572131738544e-5,3.448082578605249e-8,0.0013446613049089872,-3.6075754726357985e-5,3.44859220020242e-8,0.001345039248616876,-3.6029368037547205e-5,3.444825503332818e-8,0.0013454098213895693,-3.591751673460431e-5,3.436684759254604e-8,0.0013457504724702282,-3.57474829484819e-5,3.424678910825797e-8,0.0013460419605556845,-3.5535332633184876e-5,3.409904369034362e-8,0.0013462713941414768,-3.530453678562293e-5,3.3939575913952353e-8,0.0013464350440412546,-3.5083247688415916e-5,3.3787496601098456e-8,0.001346540218956281,-3.490026072080504e-5,3.366224387151234e-8,0.0013466055506973335,-3.478008498355249e-5,3.358013732940204e-8,0.001346659241019408,-3.4737853074248655e-5,3.355088149022233e-8,0.0013467351263881956,-3.477505002897689e-5,3.3574748237485566e-8,0.0013468668157807983,-3.487707274585662e-5,3.36411293630354e-8,0.0013470805087412794,-3.501350818296307e-5,3.3728992049500143e-8,0.0013473874871725111,-3.5141989537112516e-5,3.3809694862078156e-8,0.0013477779846166242,-3.5216299066590065e-5,3.385250575241212e-8,0.0013482190793279586,-3.5198369687471605e-5,3.3832555330064887e-8,0.001348659613978359,-3.507162618165665e-5,3.3739577083562544e-8,0.001349043468490627,-3.485031268644354e-5,3.358395470384573e-8,0.001349327999366581,-3.4578485620740276e-5,3.3395893343763146e-8,0.0013494994616960665,-3.431622032059404e-5,3.321604676365601e-8,0.001349576900362316,-3.411840812110945e-5,3.3081186820720924e-8,0.0013496024923671088,-3.4016892922365775e-5,3.3012189592066463e-8,0.0013496246279193777,-3.401415154718749e-5,3.300992090644571e-8,0.0013496829179363164,-3.408870967312186e-5,3.305913434321514e-8,0.0013498005419856707,-3.420638364611618e-5,3.313629142245499e-8,0.001349983766265312,-3.433103577998142e-5,3.3216931742549514e-8,0.001350225503188383,-3.443167213616684e-5,3.328041116125517e-8,0.001350509870791549,-3.44857855079198e-5,3.3311987997451824e-8,0.001350816111848709,-3.44802776149318e-5,3.330325655153641e-8,0.0013511215354534733,-3.44113203272646e-5,3.325193674476666e-8,0.0013514038266242718,-3.428394324938091e-5,3.3161588903372553e-8,0.0013516432294084326,-3.41115562702498e-5,3.3041366067246576e-8,0.0013518249947347244,-3.391515061958602e-5,3.29055587983786e-8,0.0013519421489563276,-3.372159161237384e-5,3.277246672853169e-8,0.0013519981162253448,-3.35604192219653e-5,3.2662172488743894e-8,0.0013520082488663807,-3.345899609113347e-5,3.259313778399188e-8,0.0013519991491952143,-3.343655294053388e-5,3.257806735071459e-8,0.0013520049886915973,-3.349849264305731e-5,3.262004101630264e-8,0.0013520609158930905,-3.36328575909331e-5,3.2710241377374956e-8,0.0013521948074782938,-3.3810651240403614e-5,3.2828394204526694e-8,0.0013524194680195325,-3.399070247049815e-5,3.2946301667474426e-8,0.0013527275548078518,-3.412846985252045e-5,3.3033954284171145e-8,0.0013530910516223313,-3.41870260521444e-5,3.306696170857802e-8,0.0013534662186818406,-3.414758958099839e-5,3.303351712767489e-8,0.0013538036921596796,-3.401650121264336e-5,3.293885919569297e-8,0.0013540617630267778,-3.3825695437600704e-5,3.280532715743045e-8,0.0013542189655621978,-3.3625013396523797e-5,3.2666968653528377e-8,0.0013542809896239987,-3.3467679762926974e-5,3.255963827369867e-8,0.0013542783419837156,-3.3394020433318414e-5,3.251003853738814e-8,0.0013542554119995557,-3.342020697923614e-5,3.252828382153754e-8,0.0013542560140103023,-3.3536391035527796e-5,3.2606892142050424e-8,0.0013543116989025482,-3.371353007933651e-5,3.2725642792952345e-8,0.0013544365308802784,-3.391431273365121e-5,3.285910327271554e-8,0.0013546280975285543,-3.410316353858851e-5,3.2983383466057345e-8,0.0013548720539619643,-3.4252552907384106e-5,3.308026489902493e-8,0.001355147353668992,-3.43454908576762e-5,3.313870075252464e-8,0.0013554305468037433,-3.437553330264171e-5,3.315467676927687e-8,0.0013556988011802253,-3.434572357619407e-5,3.313045281129339e-8,0.0013559320038673691,-3.426735815892247e-5,3.30737806614842e-8,0.0013561145343338845,-3.415887769336406e-5,3.299724375590522e-8,0.0013562372346350193,-3.40446430953795e-5,3.291748056072256e-8,0.001356299729968249,-3.395293821719811e-5,3.285379960496967e-8,0.0013563126464800305,-3.39124616274109e-5,3.2825694374099335e-8,0.0013562986345168043,-3.394695718115785e-5,3.284908231937111e-8,0.0013562906901488832,-3.406854808973949e-5,3.2931730931658255e-8,0.0013563265580224901,-3.4271700357362895e-5,3.3069227097465745e-8,0.0013564394803830895,-3.453081024388408e-5,3.3243512234392763e-8,0.001356647830444362,-3.480395690125668e-5,3.342564568063368e-8,0.0013569477158602284,-3.504296952579012e-5,3.358281757335669e-8,0.0013573120584085639,-3.52068525793514e-5,3.368754392194241e-8,0.001357697050412798,-3.5273779767518736e-5,3.3725762172275216e-8,0.0013580538346326509,-3.524742322405932e-5,3.3700952947215904e-8,0.0013583414729187431,-3.515577457801083e-5,3.3633068996217375e-8,0.0013585373183607017,-3.504326814963739e-5,3.3552899090837633e-8,0.0013586421139425234,-3.4958781479045985e-5,3.3493719387707e-8,0.001358678685937704,-3.494290707046618e-5,3.3482624669021657e-8,0.001358684778336174,-3.501803608967189e-5,3.353396129882613e-8,0.001358702322909947,-3.518405715028354e-5,3.36466993389363e-8,0.0013587666406036992,-3.542061521536396e-5,3.380626499920978e-8,0.0013588989123856205,-3.5694495803273485e-5,3.398974496696862e-8,0.001359103663247866,-3.5969025766868755e-5,3.417229612867719e-8,0.0013593708567535968,-3.621226756590788e-5,3.4332592451649465e-8,0.0013596806793210175,-3.640207539916034e-5,3.4456072169122394e-8,0.0013600088338772479,-3.6527817297702786e-5,3.4535941490019846e-8,0.0013603309085686056,-3.6589745925869715e-5,3.4572666368770736e-8,0.0013606253906847028,-3.659727205627579e-5,3.4572817000381455e-8,0.0013608755966453268,-3.656705235731982e-5,3.45478428901892e-8,0.0013610710755603856,-3.652125748003627e-5,3.4512957394544435e-8,0.0013612090115036409,-3.648585481662091e-5,3.448596151433922e-8,0.0013612958461505,-3.648833256815448e-5,3.448560847301663e-8,0.0013613487825353768,-3.655412453139295e-5,3.452905427534737e-8,0.0013613960977975756,-3.6701245140876124e-5,3.4628141465119906e-8,0.0013614745650237811,-3.693358561190437e-5,3.4784884782548805e-8,0.0013616224205170902,-3.7235042204870165e-5,3.4987633233731027e-8,0.001361868091522445,-3.756832421090297e-5,3.521045772248526e-8,0.001362218255945228,-3.788197415238886e-5,3.541808383563176e-8,0.0013626514699812326,-3.812539193249165e-5,3.557619486093644e-8,0.001363122322234058,-3.8266165560665596e-5,3.566324383611881e-8,0.0013635754647547845,-3.830134386399334e-5,3.5678079037798024e-8,0.0013639630780626708,-3.825738313571894e-5,3.563975015298319e-8,0.001364258080357862,-3.817994201829989e-5,3.5580274568062977e-8,0.0013644589434662312,-3.811922202797349e-5,3.5534332460088205e-8,0.0013645865742663128,-3.81166924124298e-5,3.5530027944857735e-8,0.0013646762446455044,-3.819653354824757e-5,3.558310331044814e-8,0.001364767819829093,-3.8362605590993256e-5,3.569514079478911e-8,0.0013648967631197295,-3.8600238344742254e-5,3.585514627803409e-8,0.0013650874946786213,-3.888148752071901e-5,3.60434300221522e-8,0.0013653499642588421,-3.917227000116867e-5,3.62365942886353e-8,0.00136567964200512,-3.943967176457917e-5,3.6412451385441956e-8,0.0013660603709506384,-3.965784039600382e-5,3.65538578644758e-8,0.0013664688889499187,-3.981147629204727e-5,3.665089579529965e-8,0.0013668796761675812,-3.989679821734419e-5,3.6701401260529234e-8,0.0013672690955396569,-3.992052333462929e-5,3.6710241547116054e-8,0.0013676183253096337,-3.9897716306200194e-5,3.668789735721834e-8,0.0013679151464472477,-3.984932666566189e-5,3.664884493646582e-8,0.0013681550099158162,-3.979985343784534e-5,3.660997364210455e-8,0.0013683418187992174,-3.977508572660584e-5,3.658897704031485e-8,0.0013684886345164064,-3.9799531863791056e-5,3.6602481816290366e-8,0.0013686181140462686,-3.989297417404592e-5,3.6663608773571173e-8,0.0013687618136698219,-4.006569078124706e-5,3.677873040014451e-8,0.0013689567976789784,-4.031268759372785e-5,3.6943686509812775e-8,0.0013692379960220952,-4.0608958982055686e-5,3.714077674900414e-8,0.0013696263976024602,-4.0909688045915914e-5,3.733908018595111e-8,0.001370116858706226,-4.115943735403728e-5,3.7500783826076915e-8,0.0013706730192843547,-4.131030892561659e-5,3.759353716751259e-8,0.0013712357655380756,-4.1341651354543865e-5,3.760387092264407e-8,0.001371743681640421,-4.1269733274189294e-5,3.754378869036469e-8,0.0013721549303818486,-4.114093707006044e-5,3.744600118910848e-8,0.0013724590038156602,-4.1013018078885606e-5,3.7350822712677154e-8,0.0013726746583584263,-4.0935524588789915e-5,3.7292433498253575e-8,0.0013728388253621247,-4.093780361015353e-5,3.7290504667023286e-8,0.0013729936653109317,-4.102619609853645e-5,3.7348411588796894e-8,0.001373176359782013,-4.118762655376452e-5,3.745605098886693e-8,0.0013734130133102524,-4.139607981819826e-5,3.759467361926248e-8,0.0013737161837680623,-4.161950138762874e-5,3.7741869452387925e-8,0.0013740850229568907,-4.182594710895547e-5,3.787581954548767e-8,0.0013745072421834012,-4.198858396882682e-5,3.797857502949695e-8,0.0013749623837124778,-4.208926335925624e-5,3.803827857381001e-8,0.0013754258276343432,-4.2120407717748035e-5,3.8050265155743136e-8,0.001375872892622539,-4.2085198307853355e-5,3.801710263943968e-8,0.001376282469925798,-4.199628974034897e-5,3.7947728565110885e-8,0.0013766397572874227,-4.187345120748918e-5,3.7855899666402347e-8,0.0013769379150291574,-4.1740698791756187e-5,3.775826686919178e-8,0.0013771788132807986,-4.162339046388268e-5,3.76723488673647e-8,0.0013773731537905993,-4.154540420571933e-5,3.7614493141915814e-8,0.0013775401104706387,-4.1526264618012495e-5,3.759779228022895e-8,0.0013777064032593797,-4.157796597586423e-5,3.762987031680914e-8,0.001377904267471179,-4.170125910920436e-5,3.771044184184231e-8,0.0013781672206391812,-4.188175848661827e-5,3.78288749397831e-8,0.00137852256618738,-4.2087548328483725e-5,3.7962807628071696e-8,0.0013789809169083302,-4.2271422389212076e-5,3.807982991820045e-8,0.0013795260580142504,-4.238109909941585e-5,3.8144447194615674e-8,0.0013801120459359865,-4.237742637005507e-5,3.813041208095439e-8,0.0013806741263976,-4.225334424947585e-5,3.8033625865393774e-8,0.0013811520519300435,-4.2041187655938626e-5,3.787713159675286e-8,0.0013815136370865081,-4.180098864064637e-5,3.7703002181980215e-8,0.0013817644462791729,-4.159593522969593e-5,3.755522195444356e-8,0.0013819398040921613,-4.146995772891535e-5,3.7463973571636786e-8,0.0013820873195676013,-4.143814444971667e-5,3.74389528223684e-8,0.0013822508297504756,-4.1489856674521627e-5,3.747173694159376e-8,0.0013824612018183504,-4.159808318168086e-5,3.7542636676095634e-8,0.001382733677333939,-4.172918004101423e-5,3.76277743218216e-8,0.0013830692173663335,-4.185025959459586e-5,3.7704340994960595e-8,0.0013834575067367659,-4.193387127219509e-5,3.7753754368892116e-8,0.00138388030970731,-4.196070426809343e-5,3.776329962305264e-8,0.0013843148322871465,-4.1921028124019695e-5,3.7726878625517075e-8,0.0013847370777409624,-4.181512286564115e-5,3.7645150528966244e-8,0.0013851250900450299,-4.165273271465304e-5,3.752512539985943e-8,0.0013854619058602147,-4.145156074913463e-5,3.737919056711855e-8,0.0013857379458243554,-4.123483834305219e-5,3.722351350041851e-8,0.0013859525067954938,-4.1028195536964666e-5,3.707590164867331e-8,0.001386114186987945,-4.08562465832129e-5,3.6953376917189425e-8,0.0013862402914967716,-4.0739217947163935e-5,3.6869727504020365e-8,0.0013863552819137583,-4.068981038566365e-5,3.683325080139284e-8,0.0013864882812566375,-4.071045407698197e-5,3.684488191793497e-8,0.0013866695093654466,-4.0791084850707254e-5,3.689683217641563e-8,0.0013869252570760705,-4.0907845082072896e-5,3.6971967000828836e-8,0.0013872711358115565,-4.102392437415202e-5,3.7044638632372434e-8,0.0013877044103900269,-4.10944872644231e-5,3.708418444800822e-8,0.0013881982022425643,-4.107730918647336e-5,3.70621554354846e-8,0.0013887024507251455,-4.094823201885367e-5,3.696274535980045e-8,0.0013891560996636264,-4.071545369969397e-5,3.6792453536201996e-8,0.0013895088976246747,-4.042264374578624e-5,3.658214577314118e-8,0.0013897421255975183,-4.013475017712353e-5,3.637717862062872e-8,0.0013898751358086116,-3.99123909946508e-5,3.621955119697095e-8,0.0013899539157585976,-3.97898760399196e-5,3.613256495667892e-8,0.0013900305358917047,-3.976825529054825e-5,3.611605869920365e-8,0.0013901459897183817,-3.982280938552323e-5,3.615187595826213e-8,0.001390322583927315,-3.9916483926864295e-5,3.621354110721034e-8,0.0013905644815372748,-4.00116379826972e-5,3.627465691377648e-8,0.001390862196549241,-4.007719389834769e-5,3.6313891042696686e-8,0.0013911977272878053,-4.009168854677753e-5,3.631692015857626e-8,0.001391548803289706,-4.004388985804637e-5,3.627660019245447e-8,0.0013918921108757572,-3.9932383942914886e-5,3.619246897144912e-8,0.001392205925877442,-3.976474847087717e-5,3.607009012040189e-8,0.001392472481833256,-3.9556371616133894e-5,3.592027726302581e-8,0.0013926801795685095,-3.932876436594814e-5,3.5758025153182566e-8,0.0013928255206943443,-3.910712261197275e-5,3.5600891948591315e-8,0.0013929143574365078,-3.891704325009154e-5,3.546670424830646e-8,0.0013929619662561058,-3.878067864465175e-5,3.5370785800753655e-8,0.0013929916634681091,-3.8712865216251155e-5,3.5323145245009847e-8,0.0013930319212074739,-3.871783709874851e-5,3.532613964822986e-8,0.0013931121650108214,-3.878718027241075e-5,3.537313617747967e-8,0.0013932576761824852,-3.889956926863257e-5,3.544855030305457e-8,0.0013934841205019005,-3.902264562679513e-5,3.5529430896809445e-8,0.0013937923389470475,-3.911747336501126e-5,3.558876680690813e-8,0.0013941645951322254,-3.9146037401005566e-5,3.560072677257016e-8,0.0013945643433518572,-3.908149684330105e-5,3.554760976148454e-8,0.0013949419740809537,-3.8919080012482775e-5,3.54271205202408e-8,0.0013952477277678645,-3.868301987054237e-5,3.525691407233159e-8,0.001395448996586115,-3.842366805801884e-5,3.507242835859129e-8,0.0013955441184541493,-3.8202198743737096e-5,3.491619511363628e-8,0.001395563841894682,-3.806835542580855e-5,3.482237329132881e-8,0.0013955584098649994,-3.804297850225461e-5,3.4804676331452736e-8,0.0013955778157443777,-3.8114400232592614e-5,3.4854056156277526e-8,0.0013956561830292,-3.8248114880291454e-5,3.4945709067619815e-8,0.0013958061096767589,-3.840169374270801e-5,3.504970300817749e-8,0.001396021525706078,-3.853707477095065e-5,3.513962678304474e-8,0.0013962843041433993,-3.8627076516026636e-5,3.5197026880596114e-8,0.0013965707576988314,-3.865699570879773e-5,3.521229439063478e-8,0.0013968563725718281,-3.8623536025609064e-5,3.5183688298750485e-8,0.0013971187911648243,-3.8532907044979155e-5,3.511587978476073e-8,0.001397339741657006,-3.8398963032655006e-5,3.501866053362015e-8,0.0013975065707011172,-3.824149273866268e-5,3.490584928664414e-8,0.0013976137214529206,-3.808437691328442e-5,3.47941124837482e-8,0.0013976641337538325,-3.795316224892923e-5,3.470130668547223e-8,0.0013976701313359334,-3.787171824233571e-5,3.4644083108582145e-8,0.0013976530803277948,-3.785809777299285e-5,3.4634877223998395e-8,0.0013976411745630901,-3.792027581554576e-5,3.467883721971932e-8,0.0013976651171231898,-3.8052873706371765e-5,3.477154552196402e-8,0.001397752138213877,-3.8236151892252456e-5,3.489846164729002e-8,0.0013979195447783234,-3.8438219455829296e-5,3.5036710195449224e-8,0.0013981694399458889,-3.862056128580171e-5,3.515918741519236e-8,0.001398486147697437,-3.874608834560939e-5,3.524031957876636e-8,0.0013988374531938928,-3.878827062153085e-5,3.526239348503685e-8,0.001399180229735303,-3.873936055813441e-5,3.5221074317918304e-8,0.0013994701906148062,-3.861521125226919e-5,3.5128449985403174e-8,0.0013996740998213511,-3.845410205611195e-5,3.501191367250836e-8,0.0013997808979702491,-3.830798334251088e-5,3.490787420794603e-8,0.0013998068841861602,-3.822734029112152e-5,3.485117466616385e-8,0.0013997912690781416,-3.824484084870901e-5,3.486381492238321e-8,0.001399782875381604,-3.836511152067367e-5,3.494805808686753e-8,0.0013998239209614296,-3.856545057793629e-5,3.508720829151086e-8,0.0013999383452429608,-3.880618248898522e-5,3.5253069111989446e-8,0.001400128687982977,-3.9044513556967366e-5,3.5415721677933286e-8,0.0014003803140351105,-3.924559928935504e-5,3.555119946742358e-8,0.0014006688652410718,-3.938796884383357e-5,3.564509648433299e-8,0.0014009672459019793,-3.946401158692379e-5,3.569268613464028e-8,0.0014012504631784645,-3.9477773714654874e-5,3.5697219627372335e-8,0.0014014983378744935,-3.9442025791079544e-5,3.566783351875651e-8,0.0014016968485090753,-3.937562123845998e-5,3.561776933093947e-8,0.0014018389311078144,-3.930135009856592e-5,3.556297869454529e-8,0.0014019252611881805,-3.924395351028988e-5,3.552079791655267e-8,0.0014019650674987158,-3.922771502573723e-5,3.550823547292913e-8,0.0014019765254487317,-3.927316184126799e-5,3.5539561321083074e-8,0.0014019859072127623,-3.939286678870541e-5,3.562326047613582e-8,0.0014020245683540645,-3.9587049026522654e-5,3.57589225433063e-8,0.0014021232793080098,-3.984050350448809e-5,3.5935183683834784e-8,0.0014023045619820167,-4.0122876368864325e-5,3.613011664758931e-8,0.001402575188517273,-4.0393711578013267e-5,3.631499515737404e-8,0.0014029218430838034,-4.0611873294491905e-5,3.6461068646827724e-8,0.0014033123169753285,-4.074679499372091e-5,3.654749216388009e-8,0.0014037026283073234,-4.078780138232347e-5,3.6567752091281347e-8,0.0014040481592061073,-4.074819558912667e-5,3.653228462529379e-8,0.0014043154629272954,-4.0662606574106574e-5,3.646629348386904e-8,0.0014044912857379814,-4.057825582912705e-5,3.640333363998543e-8,0.001404586199481951,-4.054249152292174e-5,3.6376420565956945E-08,0.0014046315916832204,-4.059001163717845e-5,3.640913312668297e-8,0.0014046706036646942,-4.073363552405963e-5,3.650939734711049e-8,0.0014047457709805932,-4.096173679938644e-5,3.6668033280187714e-8,0.0014048875975041877,-4.1243138982900314e-5,3.686248986601918e-8,0.0014051079231287907,-4.153727189609017e-5,3.706412048229687e-8,0.0014053996891925462,-4.180543919169627e-5,3.724605723962737e-8,0.0014057418851642401,-4.201928520354164e-5,3.7388982979293707e-8,0.0014061067325829505,-4.216459310863377e-5,3.748357386154352e-8,0.0014064662792454632,-4.2240904034702006e-5,3.75300453375767e-8,0.001406796935332708,-4.225873123662221e-5,3.753610982343233e-8,0.0014070818711074016,-4.223609237701761e-5,3.7514565091294765e-8,0.0014073119283782146,-4.219538055815336e-5,3.748118402098386e-8,0.0014074858454996213,-4.216086923191445e-5,3.7453036902211475e-8,0.0014076103837110468,-4.215657537536124e-5,3.744699428145286e-8,0.001407700482867457,-4.2203893189522455e-5,3.7477990165415446e-8,0.0014077790394113716,-4.231848459825597e-5,3.755673767593618e-8,0.0014078754676845311,-4.250633958081457e-5,3.768691664581742e-8,0.0014080219967517041,-4.275967059593405e-5,3.7862358742113034e-8,0.0014082470158322466,-4.305438268393406e-5,3.8065444478173206e-8,0.0014085662107764442,-4.3351709842482535e-5,3.826846229183665e-8,0.0014089744868300872,-4.360598119993927e-5,3.843922404533621e-8,0.0014094431536157055,-4.377765422595991e-5,3.8550288702544655e-8,0.0014099256069116926,-4.384699363489847e-5,3.8588547143931624e-8,0.001410370621965012,-4.3822017616625005e-5,3.8560684416864574e-8,0.0014107379906385569,-4.373660777036701e-5,3.8491618344667396e-8,0.001411009964557524,-4.363969764258664e-5,3.841657689536917e-8,0.0014111946000197385,-4.3580512043394426e-5,3.8370420063415034e-8,0.0014113211867777273,-4.359545857298468e-5,3.837829828573306e-8,0.0014114306461733982,-4.3700232323209964e-5,3.8450239351540594e-8,0.001411564408632792,-4.388818610139138e-5,3.858035161105931e-8,0.0014117547305501578,-4.4134232812283986e-5,3.874997182226532e-8,0.0014120184750084578,-4.440248212920195e-5,3.8933324817321076e-8,0.0014123552829552618,-4.4655279826922307e-5,3.910396017989396e-8,0.0014127498958597165,-4.4861304314633954e-5,3.924032595412258e-8,0.0014131773611926266,-4.500092974261656e-5,3.932930729967511e-8,0.0014136092759243295,-4.5068124233728125e-5,3.9367328715653395e-8,0.001414019350464863,-4.50693223258045e-5,3.9359414083827914e-8,0.001414387280570928,-4.5020436860496765e-5,3.931705416718012e-8,0.0014147007530842784,-4.4943253683445574e-5,3.925572649703533e-8,0.0014149560140847756,-4.486209219785531e-5,3.919262101512192e-8,0.0014151576551419522,-4.4801074437002196e-5,3.914474595500056e-8,0.001415318136201093,-4.478183557739158e-5,3.912726793698288e-8,0.0014154572003696824,-4.482122856836196e-5,3.9151802563573214e-8,0.0014156009001108517,-4.492859041749618e-5,3.9224425325897754e-8,0.0014157795097893533,-4.5102449376290346e-5,3.93433918158505e-8,0.0014160233109937125,-4.532727500167816e-5,3.94970098303655e-8,0.0014163555567608258,-4.557201265798743e-5,3.96628298780135e-8,0.0014167833913719533,-4.579313198730899e-5,3.980996986060289e-8,0.0014172901012929602,-4.594441145983626e-5,3.990606550755613e-8,0.0014178341748209257,-4.599235373069634e-5,3.9928088314464635e-8,0.0014183591944381855,-4.593096157451421e-5,3.987268351609923e-8,0.0014188124373602864,-4.5787093578951006e-5,3.975984439233655e-8,0.001419163393834719,-4.561185313227637e-5,3.9626636645945325e-8,0.0014194126920989531,-4.5462152420401115e-5,3.951386849890556e-8,0.0014195882504336435,-4.5382171232237414e-5,3.945270542300551e-8,0.0014197329253106763,-4.539256577330823e-5,3.9456983564371725e-8,0.0014198906236090039,-4.548923231726588e-5,3.952257759491028e-8,0.001420095771986858,-4.5648857684138e-5,3.963175850856077e-8,0.0014203677362581296,-4.5837385340540104e-5,3.975959325884974e-8,0.0014207096597213865,-4.601850510949015e-5,3.988016811818957e-8,0.0014211104809135435,-4.616063637726872e-5,3.9971495331700885e-8,0.0014215489510336552,-4.624177480943514e-5,4.001871904464167e-8,0.0014219986351035052,-4.6251956591088596e-5,4.0015574979438314e-8,0.0014224329376801295,-4.619339291718908e-5,3.996426457805398e-8,0.001422829353219783,-4.607871301987465e-5,3.9874120697775513e-8,0.0014231724530763103,-4.592798447099774e-5,3.9759530620922137e-8,0.0014234554326269762,-4.57652124151591e-5,3.9637548056577846e-8,0.0014236803642659415,-4.561496504861187e-5,3.952556952558051e-8,0.0014238575838519927,-4.5499512314608026e-5,3.943929979142778e-8,0.0014240046262760098,-4.543644346492547e-5,3.9390987574810174e-8,0.0014241448474782898,-4.543650107068099e-5,3.938780661528568e-8,0.0014243055769598875,-4.55014025622324e-5,3.943030334635427e-8,0.0014245153230789524,-4.562160361393435e-5,3.951093333991738e-8,0.0014247992679477627,-4.5774516750711624e-5,3.9613026810845106e-8,0.0014251725776000539,-4.592471607435623e-5,3.97111673534239e-8,0.0014256324150758487,-4.6028499832087334e-5,3.9774539919194244e-8,0.0014261519278773282,-4.604466942670059e-5,3.97745103455597e-8,0.0014266816106519023,-4.595018557846401e-5,3.9695557904295956e-8,0.0014271621257017225,-4.575388705227969e-5,3.9544859389287236e-8,0.0014275457311608392,-4.549845458283125e-5,3.935358890200528e-8,0.001427815306107102,-4.524605002091276e-5,3.916657774531871e-8,0.0014279894860666584,-4.505443172790813e-5,3.9025101307670685e-8,0.001428111845943068,-4.4957151971777735e-5,3.895259664595886e-8,0.0014282324457039898,-4.4956997998443266e-5,3.8950037799349965e-8,0.0014283921152246375,-4.5031813061035744e-5,3.9000405529012745e-8,0.001428614503799861,-4.514594302658012e-5,3.907728510090153e-8,0.0014289052039444517,-4.526123102336767e-5,3.915303573565249e-8,0.0014292549887714064,-4.5344780633131716e-5,3.9204408290150735e-8,0.0014296445351593818,-4.537328317671618e-5,3.921546485399938e-8,0.0014300491927835234,-4.533479827914965e-5,3.917854634066426e-8,0.0014304433224275918,-4.522881772940035e-5,3.909403114722347e-8,0.001430804033341362,-4.5065037434135e-5,3.896929881664266e-8,0.001431114134170649,-4.486114602985143e-5,3.8817147411994384e-8,0.001431364173594574,-4.463995090524377e-5,3.8653843304944497e-8,0.001431553477665542,-4.4426110315797016e-5,3.8496905092415785e-8,0.0014316900992935974,-4.4242818950062476e-5,3.8362786478080485e-8,0.0014317897941557708,-4.410886020323244e-5,3.8264727869013804e-8,0.0014318743099349634,-4.403620954390451e-5,3.8210949087253464e-8,0.0014319691565770345,-4.402814004867514e-5,3.8203232744223565e-8,0.0014321008288139233,-4.407781633250867e-5,3.823596615193787e-8,0.0014322933132242908,-4.4167493057523215e-5,3.829575167824442e-8,0.0014325635783059797,-4.426874231918825e-5,3.8361828243839776e-8,0.0014329159984174987,-4.4344806916418694e-5,3.8407962919808685e-8,0.0014333367610415697,-4.435666435111393e-5,3.840682171688473e-8,0.0014337910720800594,-4.4273697098380086e-5,3.833742616530986e-8,0.0014342273731959762,-4.408716016137151e-5,3.819450047412489e-8,0.0014345914434781843,-4.382020957560829e-5,3.79954130449742e-8,0.0014348470970175808,-4.352582193219588e-5,3.7778581483576264e-8,0.0014349925697684392,-4.326902649537983e-5,3.759070188014273e-8,0.0014350613489107376,-4.3101343714786775e-5,3.746837044387351e-8,0.0014351064354383872,-4.304237393549526e-5,3.74248666578265e-8,0.0014351786308693037,-4.3077895175319485e-5,3.744893988723652e-8,0.001435311120145527,-4.3171511316731736e-5,3.751349253798805e-8,0.001435514983638263,-4.3280124103506245e-5,3.7587031889058094e-8,0.0014357827442222175,-4.33657644870084e-5,3.764234602726513e-8,0.0014360950176135047,-4.340168328161423e-5,3.766080981694061e-8,0.0014364268982985113,-4.3373918763642415e-5,3.7633249662091946e-8,0.0014367527843651797,-4.328039694830718e-5,3.755898187846603e-8,0.0014370497401466067,-4.312909776010434e-5,3.7444270646673757e-8,0.0014372999251545048,-4.29358844997081e-5,3.730070931627148e-8,0.0014374923724849156,-4.2722063680720855e-5,3.71435536648068e-8,0.0014376241618117747,-4.251167408721932e-5,3.6989920136254e-8,0.0014377009262072043,-4.2328490779715396e-5,3.6856738666764285e-8,0.0014377364788064743,-4.2192837572660376e-5,3.675846863045126e-8,0.0014377513692969844,-4.2118585485798534e-5,3.6704856042820815e-8,0.001437770451447845,-4.2110786884528316e-5,3.669912913273134e-8,0.0014378196981251372,-4.21642244916051e-5,3.6736925449717485e-8,0.0014379224790505686,-4.226308798281828e-5,3.680616377621557e-8,0.0014380955334853483,-4.238200534606743e-5,3.6888012155040675e-8,0.0014383449114242503,-4.2488670304332985e-5,3.6959034935254815e-8,0.0014386623333420816,-4.254848883471872e-5,3.69946922542799e-8,0.001439023053413255,-4.253172746547254e-5,3.6974437223496824e-8,0.00143938722951177,-4.242284653717159e-5,3.688818009449981e-8,0.001439707137154768,-4.222971419566938e-5,3.674257304428873e-8,0.0014399409659193428,-4.198781671588203e-5,3.656376280190634e-8,0.001440069459918548,-4.1753765044836575e-5,3.6392606119182155e-8,0.001440106597622063,-4.158679104094984e-5,3.6271381464065536e-8,0.0014400959148385573,-4.1525832600832144e-5,3.622739349459521e-8,0.0014400927711180566,-4.15752438414865e-5,3.626283531393904e-8,0.0014401429180055368,-4.170699406909172e-5,3.635659541946491e-8,0.0014402691460889587,-4.1875615871244114e-5,3.6475292110604114e-8,0.0014404700687453444,-4.20353985030447e-5,3.658586574851633e-8,0.0014407270427852904,-4.215187194132588e-5,3.666388371140973e-8,0.001441013130719309,-4.220595818615349e-5,3.6696359973947585e-8,0.0014413003263376396,-4.219308157288958e-5,3.6680826446642095e-8,0.001441564033217401,-4.212012924590863e-5,3.662287749152233e-8,0.0014417853809006085,-4.2002181831792545e-5,3.653368462176073e-8,0.0014419523959797523,-4.185969337729201e-5,3.642799751790315e-8,0.0014420606999227586,-4.171600435622608e-5,3.632248964966348e-8,0.0014421139198980406,-4.159487387718513e-5,3.623411674528073e-8,0.0014421237028206181,-4.151777055500738e-5,3.6178218018737015e-8,0.0014421089934266833,-4.150085444996026e-5,3.6166287820635e-8,0.0014420941576250958,-4.155198804294638e-5,3.620370937664565e-8,0.0014421057972856064,-4.166845338362705e-5,3.628802792965738e-8,0.0014421685219863218,-4.183607922736202e-5,3.6408352528175015e-8,0.0014423002757643633,-4.203032172674412e-5,3.65463031098458e-8,0.0014425080608542666,-4.22195472333642e-5,3.667862994977846e-8,0.001442784991572208,-4.237031728117714e-5,3.6781252110025435e-8,0.0014431095090614871,-4.245409762385614e-5,3.6834180674033206e-8,0.0014434474962299161,-4.245454297942441e-5,3.682664986919906e-8,0.0014437579597159325,-4.237398291446551e-5,3.676149381934002e-8,0.0014440024218877274,-4.2236870836770005e-5,3.665727124065034e-8,0.0014441566692500326,-4.208735480065546e-5,3.654623465415403e-8,0.0014442210777839057,-4.197894413823149e-5,3.646678154580181e-8,0.0014442238639085503,-4.1957657259825583e-5,3.6451395741224957e-8,0.001444213177633174,-4.204514955028633e-5,3.6514704020701185e-8,0.0014442400148779796,-4.2230738483301597e-5,3.664799820937176e-8,0.001444340327612597,-4.2477002171248194e-5,3.6823531208232587E-08,0.0014445252831045401,-4.273521305190709e-5,3.700583739358809e-8,0.001444782633063003,-4.296167146369278e-5,3.716358146341754e-8,0.0014450854085491184,-4.312785702347721e-5,3.727679374827056e-8,0.001445401951167018,-4.322288651739154e-5,3.733842340885731e-8,0.001445703365975638,-4.3250813436262515e-5,3.735212787958807e-8,0.0014459674945798882,-4.32260760357198e-5,3.73288004390637e-8,0.001446180300220262,-4.316923443732345e-5,3.728344873718978e-8,0.0014463359582635035,-4.310370309668452e-5,3.723292189167686e-8,0.0014464365687389773,-4.305328850624032e-5,3.719426687269874e-8,0.0014464918465855834,-4.304002473972689e-5,3.718325365119318e-8,0.0014465186728166825,-4.308181819575483e-5,3.721266618215463e-8,0.0014465400355141305,-4.3189687170519945e-5,3.7290221487352145e-8,0.0014465827531187007,-4.336489798552785e-5,3.741640893771544e-8,0.0014466736056468219,-4.3596841039752464e-5,3.758294229173246e-8,0.0014468340922974643,-4.386279199894946e-5,3.77726972029659e-8,0.0014470748301542683,-4.413057535440872e-5,3.7961848327240886e-8,0.0014473912922101449,-4.4364408720834884e-5,3.812432810558878e-8,0.0014477626657607462,-4.453297875666711e-5,3.8237820661230854e-8,0.001448154854433801,-4.461771816489685e-5,3.828974037644961e-8,0.0014485274030723117,-4.461890202134063e-5,3.8281447589952853e-8,0.0014488429638407447,-4.455758179245559e-5,3.822931479912126e-8,0.001449077126957026,-4.447225398864734e-5,3.816195570741389e-8,0.001449226023125882,-4.441032020245069e-5,3.8113794316332475e-8,0.0014493090755652274,-4.441579020404974e-5,3.8116125833806295e-8,0.001449364947092221,-4.451633994090186e-5,3.818794133287042e-8,0.0014494407057380814,-4.471426477041007e-5,3.832972073058778e-8,0.0014495774144823556,-4.498555350055323e-5,3.8523117853081915e-8,0.0014497978450341655,-4.5288121537755064e-5,3.873716648698755e-8,0.001450101396289851,-4.557563857325436e-5,3.89383696430426e-8,0.0014504674700356046,-4.581077178440381e-5,3.9100206897818924e-8,0.001450864329811925,-4.59729347684755e-5,3.920855010190983e-8,0.001451258767715561,-4.605934108050844e-5,3.92621859121156e-8,0.001451623153623208,-4.608136827590191e-5,3.926997648012008e-8,0.0014519388956488832,-4.605924560935e-5,3.9246910208725725e-8,0.0014521971379447417,-4.6017229535460886e-5,3.9210629613232204e-8,0.0014523980389310705,-4.5980057149587095e-5,3.917896492879653e-8,0.0014525496603379358,-4.597051953376308e-5,3.9168276920308264e-8,0.0014526669574361673,-4.600759430739576e-5,3.9192135619664394e-8,0.0014527708281076104,-4.610453020282936e-5,3.9259884840940946e-8,0.0014528867245701964,-4.626654176388048e-5,3.9374895639106777e-8,0.0014530421048613528,-4.648831416903428e-5,3.9532731387203335e-8,0.0014532621468013511,-4.6752190201937326e-5,3.971990995005398e-8,0.0014535637916342824,-4.7028515568426274e-5,3.9914326393312656e-8,0.0014539493947660874,-4.727971460801391e-5,4.008841173852169e-8,0.0014544025921314587,-4.7468597955633217e-5,4.021531201044032e-8,0.0014548892922685616,-4.7569142347220584e-5,4.027675511472258e-8,0.0014553650558184153,-4.7575810436338764e-5,4.026972977663235e-8,0.0014557870851216873,-4.750717265528638e-5,4.020889782847651e-8,0.0014561265502366723,-4.7401772022354576e-5,4.012327246018735e-8,0.0014563767220609832,-4.730757137609055e-5,4.004821937536077e-8,0.00145655435776092,-4.726880621379515e-5,4.001569186801683e-8,0.001456694463586125,-4.73144514864003e-5,4.004587627083997e-8,0.0014568404770532691,-4.7451327393656046e-5,4.0142460997834714e-8,0.0014570327641523222,-4.7663290283813975e-5,4.029246947753112e-8,0.001457298519145466,-4.7916441311999795e-5,4.047043105356473e-8,0.0014576457793189451,-4.816871716330359e-5,4.064555627563837e-8,0.0014580630692166065,-4.8380870254886153e-5,4.07896946312839e-8,0.0014585242916217804,-4.85254475628263e-5,4.0883660976549706e-8,0.0014589966823086494,-4.859135992178545e-5,4.092028278391199e-8,0.0014594488895383127,-4.8583561201735886e-5,4.0903922552317477e-8,0.0014598568660654338,-4.851917902858856e-5,4.084752107398645e-8,0.001460206718017994,-4.8422238333548e-5,4.0768741953613706e-8,0.0014604949812930131,-4.831876578154884e-5,4.068648768877478e-8,0.0014607274013576004,-4.823314160900414e-5,4.0618350180221016e-8,0.0014609172150457537,-4.8185712318530414e-5,4.057893429465176e-8,0.001461083502746424,-4.8191179258434105E-05,4.0578670798416085e-8,0.001461249671904525,-4.82571706133708e-5,4.0622715345642995e-8,0.001461441693727446,-4.838261929000545e-5,4.07097296081658e-8,0.0014616854233344243,-4.8556014057686534e-5,4.083066061163576e-8,0.0014620023267894015,-4.8754249269082786e-5,4.0968058990523775e-8,0.0014624034953483796,-4.894358809285292e-5,4.109698020827211e-8,0.0014628831941533296,-4.908464338861261e-5,4.118875936509696e-8,0.0014634150433660768,-4.914226299762998e-5,4.121824393937142e-8,0.0014639548020531532,-4.9098224861191336e-5,4.117296927439143e-8,0.001464451637979818,-4.8961091183785824e-5,4.106020733296679e-8,0.0014648646915946838,-4.8766820370606e-5,4.090722801199529e-8,0.0014651772883869003,-4.8568009313809076e-5,4.075319349404685e-8,0.0014654017214941388,-4.8416426777365386e-5,4.063612262558724e-8,0.0014655731149098806,-4.834715390556542e-5,4.05811408271586e-8,0.0014657366598345033,-4.8370472978448067e-5,4.0594648027202523e-8,0.0014659342958094506,-4.847253437725393e-5,4.066516335293664e-8,0.0014661950114605521,-4.862215666828612e-5,4.076876008564538e-8,0.0014665301910791108,-4.8780249807602064e-5,4.0876316291687736e-8,0.0014669336173157724,-4.8909088442915184e-5,4.096041061837196e-8,0.0014673849869394323,-4.89797010783182e-5,4.10005813588427e-8,0.0014678556191269404,-4.8976435201010984e-5,4.0986359543432826e-8,0.0014683149714162325,-4.889830880085964e-5,4.091793502517985e-8,0.0014687365529222206,-4.875735290426732e-5,4.080472681276175e-8,0.0014691021142846357,-4.857481423921316e-5,4.0662543710692137e-8,0.0014694036337962362,-4.8376450354823765e-5,4.0510213167388694e-8,0.0014696432745798936,-4.8188046898087444e-5,4.0366429937764576e-8,0.0014698319277800106,-4.803190530328035e-5,4.0247286006004545e-8,0.0014699871102827962,-4.7924526915939426e-5,4.0164595796703556e-8,0.0014701307848855516,-4.787522027490336e-5,4.012482396092963e-8,0.0014702872622128149,-4.788517195205734e-5,4.012834089633514e-8,0.0014704809975428358,-4.794666693736669e-5,4.0168855709075365e-8,0.0014707338344027386,-4.804244009905834e-5,4.0233062784634995e-8,0.0014710611213139102,-4.814566107532364e-5,4.030084085232558e-8,0.0014714665413726273,-4.822181569590968e-5,4.034683134470572e-8,0.001471936732554558,-4.823419676772928e-5,4.0344537351810816e-8,0.0014724385787785134,-4.815393883152968e-5,4.02735824939934e-8,0.0014729232921461939,-4.7972708991935915e-5,4.012881131104992e-8,0.001473339733380658,-4.771194684085152e-5,3.99268721108642e-8,0.0014736534482333627,-4.7420811459529796e-5,3.97045678271898e-8,0.0014738614631978186,-4.716016424666695e-5,3.9506949528936975e-8,0.0014739933492919856,-4.697982067329245e-5,3.937043540172194e-8,0.0014740979744279096,-4.690167112469379e-5,3.931032980142313e-8,0.0014742246024554207,-4.691644256644111e-5,3.9318604552850936e-8,0.0014744082651071803,-4.69922299640802e-5,3.9370563974310175e-8,0.0014746637140043946,-4.708756851895923e-5,3.943489870131204e-8,0.0014749866046875014,-4.7162958123676244e-5,3.948243157993727e-8,0.001475358543065385,-4.71883294842356e-5,3.949159654624633e-8,0.001475753210166725,-4.714652817698946e-5,3.945074236392933e-8,0.001476142078096254,-4.7033888847950614e-5,3.9358189832320374e-8,0.0014764992123982724,-4.685887934392134e-5,3.9220928510260014e-8,0.0014768049713061416,-4.663938791887539e-5,3.905248086942313e-8,0.001477048391317066,-4.639911917690382e-5,3.8870289051615004e-8,0.0014772281442441146,-4.61636413222774e-5,3.86929540003015e-8,0.0014773521218631534,-4.595660324837137e-5,3.8537604231317574e-8,0.0014774358574483667,-4.579659133441228e-5,3.841765492707048e-8,0.0014775001956065402,-4.569496823083304e-5,3.8341186816552856e-8,0.0014775686820781154,-4.565470129067433e-5,3.830999686167372e-8,0.0014776649243166784,-4.566994456347111e-5,3.8319233095593914e-8,0.0014778099359220231,-4.5726192560117234e-5,3.83575570353092e-8,0.0014780193244124584,-4.580097117160524e-5,3.840782891730723e-8,0.0014783000450939625,-4.5865328797617776e-5,3.8448445201550915e-8,0.0014786467079729625,-4.588696439857752e-5,3.845582251437362e-8,0.0014790384080720245,-4.583611242343526e-5,3.840873944588172e-8,0.0014794383527260398,-4.56945594107753e-5,3.82947864626867e-8,0.001479799398450005,-4.5465999161076066e-5,3.811769435150879e-8,0.0014800774121277783,-4.518250806512075e-5,3.790185132520664e-8,0.0014802492942168032,-4.489995809258601e-5,3.768879845012064e-8,0.0014803258879004637,-4.467961171000656e-5,3.7523621216932424e-8,0.0014803496588216847,-4.456364916372832e-5,3.7436882425543227E-08,0.0014803767789849922,-4.455914717389837e-5,3.743285124826617e-8,0.00148045471663273,-4.463944669785187e-5,3.749072374826842e-8,0.0014806079903739232,-4.4759080332929866e-5,3.757599995374444e-8,0.0014808363575325631,-4.4871298219932226e-5,3.7653765328709984e-8,0.0014811213748755097,-4.49400791113898e-5,3.7697698950566665e-8,0.0014814353063795221,-4.494494148911797e-5,3.769349125262831e-8,0.0014817486607833878,-4.488064489949951e-5,3.7638296039217246e-8,0.0014820352591590176,-4.475444899156155e-5,3.75383511170801e-8,0.001482275222988769,-4.458271568201399e-5,3.740624045556785e-8,0.0014824566343186552,-4.438752806725547e-5,3.7258364186440963e-8,0.0014825762933425046,-4.41933973514123e-5,3.711263205430016e-8,0.0014826396781233982,-4.402407385189993e-5,3.698628868785702e-8,0.0014826601038704105,-4.3899537486014864e-5,3.689381745950238e-8,0.0014826570290835308,-4.3833355408042506e-5,3.684500249109746e-8,0.0014826535665252642,-4.383076384824262e-5,3.684342893133268e-8,0.0014826734964349505,-4.388776027353641e-5,3.688571137475423e-8,0.0014827381250709867,-4.3991250197185465e-5,3.696157870415823e-8,0.0014828632277558774,-4.4120225732295084e-5,3.7054853705114773e-8,0.0014830562790585913,-4.424796254416029e-5,3.7145299091021524e-8,0.001483314114902658,-4.4345226853738956e-5,3.721123064884487e-8,0.0014836212427355765,-4.438471351759688e-5,3.723292906691934e-8,0.0014839495880320053,-4.434704884177869e-5,3.719700534277648e-8,0.0014842612053440878,-4.4227969750309367e-5,3.7101437221589655e-8,0.001484515578411819,-4.4044706083483356e-5,3.6959930289161086e-8,0.0014846818321571568,-4.383767436946015e-5,3.6802887599284104e-8,0.001484752665298912,-4.366282494601175e-5,3.6671649941767425e-8,0.0014847523079773632,-4.357345179251354e-5,3.6605110282143873e-8,0.0014847306685902028,-4.3598461730291396e-5,3.662379044416523e-8,0.0014847439416985908,-4.372996532663204e-5,3.672084767057359e-8,0.001484832455576805,-4.392834159757466e-5,3.6866053246575335e-8,0.0014850084524969315,-4.414052139172515e-5,3.701958292803764e-8,0.0014852579225742377,-4.4319394962506785e-5,3.7146574635816525e-8,0.00148555111690797,-4.443521318072178e-5,3.7225576915926685e-8,0.0014858540251273446,-4.447773434048518e-5,3.724992857383376e-8,0.0014861364543161625,-4.445270363925244e-5,3.722482225495067e-8,0.0014863760913723298,-4.437656318307988e-5,3.716309655277369e-8,0.0014865597532513933,-4.427164451826376e-5,3.708154822513582e-8,0.0014866832683675857,-4.4162460074345484e-5,3.699824191460888e-8,0.0014867508559287582,-4.407282323694022e-5,3.693054466535894e-8,0.0014867742340000237,-4.402339782503651e-5,3.68934712540527e-8,0.0014867713714220555,-4.402943420367354e-5,3.689807422058526e-8,0.0014867646564762282,-4.409867285281513e-5,3.6949844467746125e-8,0.0014867782740302412,-4.422973621937711e-5,3.7047415402730984e-8,0.0014868348754921309,-4.441152508594255e-5,3.718204520461165e-8,0.0014869519465962582,-4.462400182095811e-5,3.733824048865543e-8,0.0014871384186216602,-4.484053098879151e-5,3.749566462993671e-8,0.0014873921480441546,-4.5031733174503954e-5,3.7632239067973675e-8,0.0014876988747097991,-4.517047600970056e-5,3.772804673560034e-8,0.0014880330851069787,-4.5237407062414714e-5,3.776948065811721e-8,0.0014883611336936045,-4.522638867386191e-5,3.7753106366925946e-8,0.0014886470419661934,-4.5148829423299135e-5,3.768853679617695e-8,0.0014888610099375744,-4.503511107630251e-5,3.75991142701746e-8,0.0014889893734640611,-4.493078727593386e-5,3.7518833390943256e-8,0.0014890426802024238,-4.4885939658503095e-5,3.74844077895564e-8,0.0014890568559620368,-4.493900359979849e-5,3.752344755667185e-8,0.0014890836459080803,-4.5101175184416406e-5,3.7643181361237684e-8,0.001489172305795643,-4.535029512050693e-5,3.7826206234394064e-8,0.0014893513815948645,-4.5639131365739326e-5,3.803685162170241e-8,0.0014896203853677792,-4.591379586939746e-5,3.8234980089391865e-8,0.0014899543663838013,-4.613185728141613e-5,3.8389462478218916e-8,0.0014903162297077394,-4.6271946349084726e-5,3.848520377485263e-8,0.0014906691385107214,-4.6333741604474694e-5,3.852289537208366e-8,0.0014909844428688587,-4.6332267253878814e-5,3.851449641139075e-8,0.0014912446994979787,-4.629096295265064e-5,3.8477884251820716e-8,0.001491443475023993,-4.623604922293549e-5,3.843262815520471e-8,0.0014915838036451312,-4.61927449105687e-5,3.8397284898482245e-8,0.0014916764513131834,-4.618284796155863e-5,3.838776175182558e-8,0.0014917383357409837,-4.622298504810592e-5,3.8416126988273096e-8,0.0014917909428913139,-4.632303584535767e-5,3.848944739748476e-8,0.0014918583550758398,-4.648458412369112e-5,3.860856466449232e-8,0.0014919645095770773,-4.669969166698596e-5,3.8767106301308565e-8,0.001492129594339425,-4.695065290037247e-5,3.895130296913219e-8,0.0014923659795207224,-4.721144655663761e-5,3.914118664687933e-8,0.0014926745732702724,-4.745133715731877e-5,3.931347861780057e-8,0.0014930428020581202,-4.764050267803905e-5,3.944599080200351e-8,0.0014934453287540244,-4.77567381989998e-5,3.952272977792478e-8,0.0014938479976421455,-4.7791615726440825e-5,3.9538419803086526e-8,0.0014942145959709434,-4.775437268653611e-5,3.950114664854367e-8,0.0014945152548361581,-4.7672147717775885e-5,3.943216537025932e-8,0.0014947347496844735,-4.758571958330954e-5,3.936237614997539e-8,0.0014948784839529095,-4.754071729882442e-5,3.9325587712150906e-8,0.001494973688060228,-4.7575580700830986e-5,3.934960606065222e-8,0.001495063893699758,-4.7709339668887554e-5,3.9447410821275483e-8,0.0014951967819727924,-4.793386974666786e-5,3.961177012530231e-8,0.0014954089548056488,-4.82150113356529e-5,3.9816407071216556e-8,0.001495713972368483,-4.8503439552528306e-5,4.0024278257678855e-8,0.0014960992299929698,-4.875088216767253e-5,4.0199671339311314e-8,0.0014965325627533485,-4.892426755697233e-5,4.031863181757441e-8,0.0014969742965597005,-4.9012244353112056e-5,4.037361715514292e-8,0.0014973887060458133,-4.90234527916337e-5,4.037196030438772e-8,0.0014977509975768778,-4.897987925534544e-5,4.033069659995429e-8,0.0014980493699429142,-4.8909370842569586e-5,4.0270872530960104e-8,0.0014982838272042372,-4.8839785143966184e-5,4.0213214367086265e-8,0.0014984636893112296,-4.879533379597899e-5,4.017552829673121e-8,0.0014986050564438516,-4.879459745805125e-5,4.0171351190536136e-8,0.0014987286878216618,-4.884940264365551e-5,4.020917276631506e-8,0.0014988581486848397,-4.8963892845157507e-5,4.029171690125393e-8,0.0014990177337836207,-4.9133541633318104e-5,4.0415144161886566e-8,0.0014992296650089489,-4.934439725353427e-5,4.056846910653133e-8,0.0014995103608385159,-4.957328780427341e-5,4.073379081419653e-8,0.0014998661313054954,-4.978992849651283e-5,4.0888033317214166E-08,0.001500289438846751,-4.996169395570395e-5,4.100670227701081e-8,0.0015007575640223773,-5.00609271009138e-5,4.1069476582698656e-8,0.0015012354183340914,-5.0073132062903215e-5,4.106633523245191e-8,0.001501682931435136,-5.000313393611321e-5,4.10020124318666e-8,0.0015020653958463235,-4.9876318236111225e-5,4.089664152349184e-8,0.001502363510762478,-4.973362668651773e-5,4.078166708635209e-8,0.0015025796036362987,-4.9621359434477365e-5,4.06919240015438e-8,0.001502737788613337,-4.957881774687852e-5,4.0656280257301776e-8,0.0015028778851812186,-4.9627518948032364e-5,4.0689710099869005e-8,0.001503044775055048,-4.9765138003926926e-5,4.078912007859041e-8,0.001503276131990282,-4.9966042084288354e-5,4.093418214974257e-8,0.0015035921340975534,-5.0188522911167886e-5,4.109307745813918e-8,0.0015039904959644906,-5.038664086853307e-5,4.12314822617478e-8,0.0015044484479765602,-5.052272450607022e-5,4.1321828260849926e-8,0.0015049305867960681,-5.057627006151882e-5,4.1349724488542334e-8,0.0015053992671028003,-5.0546698588028124e-5,4.1315734395285215e-8,0.001505823682333701,-5.0450202162379264e-5,4.123276774522326e-8,0.0015061851264551991,-5.03131376162049e-5,4.1120991139124105e-8,0.00150647810650972,-5.0164985415371416e-5,4.100254562995308e-8,0.0015067085911635734,-5.003289045076868e-5,4.0897557578942296e-8,0.0015068910568689683,-4.9938339881018866e-5,4.0821788084939146e-8,0.0015070455081733843,-4.989557017837055e-5,4.078553560863914e-8,0.0015071949768719031,-4.991095762554463e-5,4.079319265895584e-8,0.0015073634330199596,-4.998270255847455e-5,4.0842964940455486e-8,0.001507573648758257,-5.0100484272582855e-5,4.092657881678172e-8,0.001507844474226869,-5.024531275080717e-5,4.1029213145852093E-08,0.0015081872475477102,-5.039029477878423e-5,4.113020982278904e-8,0.001508601639381369,-5.0503348351200574e-5,4.1205288990591655e-8,0.0015090721800536042,-5.0552825964399286e-5,4.123090271547341e-8,0.0015095677542445187,-5.051598845732162e-5,4.119061726808571e-8,0.0015100464398749296,-5.0388137396494456e-5,4.1081869583940654e-8,0.0015104661524490966,-5.0188150732697904e-5,4.091992886992478e-8,0.0015107980562968522,-4.995626598255443e-5,4.073597315450068e-8,0.0015110369884425087,-4.974323096834382e-5,4.056865503257804e-8,0.0015112037636235288,-4.9594689096187027e-5,4.0452143784550536e-8,0.0015113382538688342,-4.9537390122333774e-5,4.040571885063075e-8,0.001511486651518908,-4.9572491390367476e-5,4.0428949376900265e-8,0.0015116882343063284,-4.9677288522526345e-5,4.0503412055625985e-8,0.001511965832908493,-4.981328246977489e-5,4.0599203239587485e-8,0.0015123218678560742,-4.993712667865752e-5,4.0683458185044255e-8,0.0015127398774388951,-5.001120491259384e-5,4.072833176366586e-8,0.0015131902459503254,-5.0011430442294444e-5,4.0716651632460574e-8,0.0015136381639806527,-4.9930908725903795e-5,4.064433406034829e-8,0.0015140516272895985,-4.977923819466192e-5,4.051953249837382e-8,0.0015144075622012096,-4.9578319631606846e-5,4.035928102066704e-8,0.0015146949683276282,-4.9356355695184494e-5,4.0184938821169755e-8,0.0015149150502128804,-4.9141887980333486e-5,4.0017799643976816e-8,0.0015150791746275875,-4.895917584109024e-5,3.9875772118617474e-8,0.0015152057997848073,-4.8825388632539786e-5,3.977139653273003e-8,0.0015153173317295856,-4.874940504486354e-5,3.971098695425316e-8,0.0015154374095433952,-4.8731643689852686e-5,3.9694467703771245e-8,0.0015155886318726306,-4.876432642304724e-5,3.971551230211538e-8,0.0015157903988936615,-4.8831866635134174e-5,3.976183295261236e-8,0.0015160564336704537,-4.891150797550089e-5,3.9815759747989534e-8,0.001516391691608481,-4.8974788479225625e-5,3.985552106330658e-8,0.0015167888924818176,-4.899079602098747e-5,3.985786664037715e-8,0.0015172258993118245,-4.893217400965164e-5,3.9802659015735863e-8,0.0015176663030841539,-4.878381729040918e-5,3.967934665594565e-8,0.0015180658418397924,-4.855185669703154e-5,3.9493549812086156e-8,0.0015183852145058741,-4.8267882631723335e-5,3.927002879151628e-8,0.001518605245428821,-4.7983227159816685E-05,3.904816418536927e-8,0.0015187364109845078,-4.7752853667001454e-5,3.8869607112691156e-8,0.0015188162107197098,-4.76157007253304e-5,3.876330623471329e-8,0.0015188951081814535,-4.7581646967552716e-5,3.87356971621642e-8,0.0015190187423242043,-4.763095682004308e-5,3.877055536279872e-8,0.0015192148843438057,-4.7724206359166875e-5,3.883693164021174e-8,0.0015194889111096335,-4.7816122036906335e-5,3.890001525702813e-8,0.0015198265573875282,-4.78675190041975e-5,3.893034461914193e-8,0.0015202006147450764,-4.785267690604367e-5,3.8909281403952436e-8,0.0015205786058022936,-4.776206764521024e-5,3.883074987792664e-8,0.001520929655959892,-4.7601511265561416e-5,3.8700210594517606e-8,0.0015212297485279174,-4.73889457227636e-5,3.853192522081979e-8,0.001521464985636384,-4.714978616986874e-5,3.834534142739313e-8,0.001521632714070136,-4.691181862109943e-5,3.8161308626593714e-8,0.0015217407259916819,-4.6700544473304215e-5,3.7998737945680615e-8,0.001521805050737679,-4.653561112622005e-5,3.7872078917049705e-8,0.0015218469609350476,-4.6428620942574455e-5,3.77897496515343e-8,0.0015218898209953303,-4.638232433864213e-5,3.7753505077697286e-8,0.0015219562588472324,-4.63908829784902e-5,3.775855431522331e-8,0.0015220657852472567,-4.644073196168358e-5,3.779415592915643e-8,0.0015222326849345393,-4.6511768353575117e-5,3.78445580321092e-8,0.0015224639302797234,-4.6578917633677744e-5,3.789033821231449e-8,0.0015227569400496383,-4.6614434070743716e-5,3.791035015751786e-8,0.0015230973823843132,-4.659163295010869e-5,3.788469386599491e-8,0.0015234580899453059,-4.6490764418833046e-5,3.779915028577375e-8,0.0015238011301948635,-4.630679101973296e-5,3.765088713532935e-8,0.0015240852672769784,-4.6056717425461094e-5,3.7453737167092474e-8,0.001524279176362041,-4.578158370729293e-5,3.723946842777562e-8,0.0015243761207970313,-4.5537893273890615e-5,3.7051147789336374e-8,0.0015244012465784203,-4.537833811089991e-5,3.692846975976653e-8,0.0015244043069810233,-4.5330485030194646e-5,3.689159982476225e-8,0.001524440051851727,-4.5386093677926136e-5,3.693319329946158e-8,0.0015245475921702796,-4.550706901455292e-5,3.70231970685862e-8,0.001524739631177373,-4.564256280847005e-5,3.712221109997426e-8,0.0015250039821238194,-4.574645320979391e-5,3.719506196713576e-8,0.001525312469978232,-4.57880724817201e-5,3.7219009823727845e-8,0.0015256311465300198,-4.575529177708597e-5,3.71858758629502e-8,0.0015259283156329572,-4.5652460184988825e-5,3.710009588757813e-8,0.001526179490549331,-4.549604863952453e-5,3.697504333756095e-8,0.0015263698298762106,-4.5309863016883735e-5,3.682918922629797e-8,0.0015264948690534665,-4.5120549024834013e-5,3.668269874859717e-8,0.0015265600057452486,-4.495356643058214e-5,3.65545436819091e-8,0.0015265789603062382,-4.4829825029204026e-5,3.646015826369734e-8,0.0015265714591917814,-4.476317621887072e-5,3.640967597256171e-8,0.001526560393019653,-4.47588814097071e-5,3.6406785222506725e-8,0.0015265687425595057,-4.481319012855167e-5,3.6448328955322366e-8,0.001526616673386339,-4.491402171639455e-5,3.6524727155707175e-8,0.001526719088838322,-4.5042478706087005e-5,3.662110821247449e-8,0.001526883671120863,-4.517492388060347e-5,3.671899335520608e-8,0.001527109357997393,-4.528556689050531e-5,3.679846629243785e-8,0.0015273852648541443,-4.5349660451110904e-5,3.684080865883039e-8,0.0015276902649918051,-4.5347572784252786e-5,3.683168213824624e-8,0.0015279940023550515,-4.5269982630066084e-5,3.676496818810432e-8,0.001528260741500139,-4.5123660491407865e-5,3.664687940483986e-8,0.0015284573649040436,-4.493568923535388e-5,3.649883068748661e-8,0.0015285651819203082,-4.475224028990135e-5,3.6356268024786054e-8,0.001528591522529057,-4.462799322930828e-5,3.6260564495138095e-8,0.0015285733068809862,-4.4606708170989893e-5,3.6244339332635135e-8,0.0015285663015500417,-4.4701580903939586e-5,3.631667920617675e-8,0.001528623057978843,-4.4888075568297965e-5,3.645788182105769e-8,0.0015287721301055885,-4.511488889181742e-5,3.662804240559266e-8,0.0015290104785997134,-4.532567197125326e-5,3.678385405657058e-8,0.0015293104382067145,-4.547810886081325e-5,3.689331286542308e-8,0.0015296334898081117,-4.555238252513215e-5,3.6942127930790746e-8,0.0015299425822774475,-4.5549875508693376e-5,3.6932458321921016e-8,0.0015302094618059117,-4.5487012585997464e-5,3.687784149123152e-8,0.0015304173593234294,-4.538838777224406e-5,3.6797650641900755e-8,0.0015305608012845585,-4.5281191160702335e-5,3.6712741731269536e-8,0.0015306441945146152,-4.5191250244956506e-5,3.664253537729438e-8,0.0015306800306723414,-4.514019365633332e-5,3.660306514411148e-8,0.0015306868440561443,-4.5143317412885504e-5,3.660554118454364e-8,0.0015306868688130097,-4.5208046874071456e-5,3.665525950628058e-8,0.001530703372269813,-4.533304361844633e-5,3.675088279926432e-8,0.0015307577071024677,-4.550816475509205e-5,3.6884311766138235e-8,0.0015308663545292767,-4.5715530714938635e-5,3.7041438425744794e-8,0.001531038403461839,-4.5931705831679506e-5,3.7203859056823594e-8,0.0015312738096312358,-4.613076201647923e-5,3.7351380006003594e-8,0.001531562647587085,-4.628797631784266e-5,3.7465058196804165e-8,0.001531885540287841,-4.638388948223532e-5,3.753045447184219e-8,0.0015322154350115606,-4.6408424099129384e-5,3.75407624833672e-8,0.0015325210181051422,-4.636473481435046e-5,3.749952617090675e-8,0.0015327722562987192,-4.62720299113284e-5,3.742243109933671e-8,0.0015329482178092664,-4.616568661040811e-5,3.7337038635539955e-8,0.0015330459667584296,-4.60922941785365e-5,3.7278814888025735e-8,0.001533087023241133,-4.609795126881395e-5,3.728225619249699e-8,0.001533115983708838,-4.621153374983078e-5,3.736837190134323e-8,0.0015331876400693626,-4.643018459294151e-5,3.753391652633899e-8,0.0015333461088477486,-4.6716886718747485e-5,3.7749779963297116e-8,0.001533607077938741,-4.701413330082583e-5,3.797158062251958e-8,0.0015339536898771556,-4.7266463413301e-5,3.8156979046495933e-8,0.0015343469210881689,-4.7438804933053115e-5,3.827972461061156e-8,0.0015347420400233514,-4.7522609577066365e-5,3.833423468532848e-8,0.0015351018922789568,-4.75311913550837e-5,3.833175719045527e-8,0.0015354032268769953,-4.7490536847499134e-5,3.8293014468682244e-8,0.0015356372503282487,-4.7430749661384474e-5,3.8241437080403724e-8,0.0015358072060457936,-4.738020854009638e-5,3.819867181103716e-8,0.0015359252275494756,-4.736231090740194e-5,3.818223813016995e-8,0.0015360095332831896,-4.739380510817324e-5,3.820445815928393e-8,0.0015360820478136717,-4.748383499571379e-5,3.82718722773441e-8,0.001536166141831675,-4.763330834665019e-5,3.838478548063725e-8,0.001536284194639195,-4.783458629340891e-5,3.8536969464764897e-8,0.0015364548174580863,-4.8071792138992605e-5,3.871582755825761e-8,0.001536689888308331,-4.832221693893701e-5,3.890347256035087e-8,0.001536991949021952,-4.8559125680806725e-5,3.907898810591917e-8,0.0015373526882001662,-4.875585201501901e-5,3.9221757056841037E-08,0.0015377531409755225,-4.889068042494506e-5,3.931538272353313e-8,0.0015381659828674545,-4.895167436888976e-5,3.9351451406966635e-8,0.0015385598715198048,-4.894040830492917e-5,3.9332267184161023e-8,0.0015389053503828088,-4.887366805568127e-5,3.927184980018389e-8,0.0015391815674583567,-4.878238533919379e-5,3.919473310592367e-8,0.0015393827610044833,-4.870713902780217e-5,3.913220935194622e-8,0.001539522826925547,-4.868983638924286e-5,3.911586463438951e-8,0.001539635551012186,-4.8762258491063296e-5,3.916897922140672e-8,0.0015397681169518995,-4.893424373568861e-5,3.929783969200081e-8,0.0015399675307219867,-4.9186670824232385e-5,3.9486747633733346e-8,0.0015402639575685848,-4.94746582698892e-5,3.970072063670472e-8,0.001540658896768355,-4.974203898215638e-5,3.989665648604e-8,0.0015411250260262703,-4.9940960584229624e-5,4.0038309783718896e-8,0.0015416177088270302,-5.0046684404287795e-5,4.010752915400204e-8,0.0015420911707916128,-5.006124568783706e-5,4.010688682435594e-8,0.0015425111740769344,-5.000709715400226e-5,4.00545534176231e-8,0.0015428603593231258,-4.9916572907574924e-5,3.9975967592465016e-8,0.001543137348004615,-4.9822560505639655e-5,3.9896549730067413e-8,0.0015433527728847896,-4.9752685894152456e-5,3.983728353617607e-8,0.0015435248853113634,-4.972672630231794e-5,3.981289716560943e-8,0.0015436759860362377,-4.975595477250484e-5,3.9831537088095255e-8,0.0015438297952060482,-4.984325147671539e-5,3.989494979643839e-8,0.0015440093369692496,-4.998334813656624e-5,3.999866380557658e-8,0.0015442348151259754,-5.016309804535865e-5,4.013214246585282e-8,0.0015445211154071746,-5.0362121259628284e-5,4.027925529887606e-8,0.0015448749611662643,-5.055446980018576e-5,4.0419618992163206e-8,0.0015452923005028491,-5.071189862384606e-5,4.053125674762409e-8,0.0015457569800726891,-5.0808855828295383E-05,4.059460327889975e-8,0.0015462418900000286,-5.082850879931722e-5,4.059724221672877e-8,0.0015467132993301472,-5.076823346637892e-5,4.0538094268894254e-8,0.0015471380038922773,-5.064252614673594e-5,4.042945683138028e-8,0.0015474916360774626,-5.048174585710053e-5,4.0295709244955134e-8,0.0015477657624747324,-5.0326348408581844e-5,4.016852598729084e-8,0.0015479715584376128,-5.02176988612463e-5,4.00795759607021e-8,0.001548138675163666,-5.018759931395581e-5,4.0052468864238434e-8,0.001548309019173918,-5.0249167170106635e-5,4.0095999848332944e-8,0.001548526363415651,-5.039173011559901e-5,4.020064552392213e-8,0.001548824072026234,-5.0581979693915296e-5,4.033985817256759e-8,0.0015492146318262102,-5.0772290610955474e-5,4.047669746431854e-8,0.0015496851936439822,-5.091443598787875e-5,4.057438892398452e-8,0.001550201601146154,-5.0973893683465014e-5,4.0607169310144533e-8,0.001550719547427848,-5.093895551994056e-5,4.0567056747315524e-8,0.0015511979549022272,-5.082132789363123e-5,4.0464060310906736e-8,0.001551609085796503,-5.064930767517722e-5,4.032070429909841e-8,0.001551942485882253,-5.045777032215602e-5,4.0164179972009266e-8,0.001552203365741154,-5.027932903282667e-5,4.0019527762343134e-8,0.0015524080338778475,-5.0138911795649996e-5,3.990557662144009e-8,0.0015525789206599471,-5.005169954767954e-5,3.983352487266917e-8,0.0015527405622942454,-5.0023207216840704e-5,3.980713258549693e-8,0.001552916795278977,-5.005024771803662e-5,3.982350168918181e-8,0.0015531287739189376,-5.012197934084325e-5,3.987384769919168e-8,0.0015533932025365111,-5.022080731770897e-5,3.99441559610026e-8,0.0015537202826231122,-5.03234457482546e-5,4.0016025565273536e-8,0.0015541112665716941,-5.0402810390084915e-5,4.0068239562396716e-8,0.0015545561079804125,-5.0431489448755314e-5,4.007959506236113e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json new file mode 100644 index 0000000..c6ac961 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":15000,"numberOfSamples":1000,"samples":[0.001555032396790159,-5.038717964716439e-5,4.003321453737454e-8,0.001555507240340409,-5.025945257220019e-5,3.992178064606655e-8,0.0015559433318249748,-5.005568561411016e-5,3.975199831316558e-8,0.0015563086828940746,-4.9802949292686764e-5,3.9545822083813816e-8,0.001556587031841404,-4.9543375923704664e-5,3.9336583092513e-8,0.0015567845028372617,-4.93232976794034e-5,3.9160317297773175e-8,0.0015569291408115862,-4.9179757456819175e-5,3.904518941710335e-8,0.0015570631279621951,-4.912957061070448e-5,3.90031151041951e-8,0.0015572306984882043,-4.916483994647903e-5,3.902661169621281e-8,0.0015574660511056152,-4.9255840502179806e-5,3.9091477245714126e-8,0.0015577847760354089,-4.9359606772293576e-5,3.9163823082464017e-8,0.001558180685115808,-4.943135773630568e-5,3.920908834205859e-8,0.0015586283968716341,-4.943566203060656e-5,3.920059314584998e-8,0.0015590906701226305,-4.9354497209498185e-5,3.9125494924869697e-8,0.001559528261058972,-4.919020584318819e-5,3.8986728207848124e-8,0.0015599093591160292,-4.896289913685733e-5,3.880070214408021e-8,0.0015602159244718476,-4.870367300374791e-5,3.8591890031225615e-8,0.001560445583043622,-4.844627081761637e-5,3.838637217885279e-8,0.0015606095190522666,-4.821988699048854e-5,3.8206389463064e-8,0.001560728059333107,-4.80447105719932e-5,3.8067072967328046e-8,0.0015608258215469178,-4.7930366808124216e-5,3.797538689472998e-8,0.0015609276655558022,-4.787644642721989e-5,3.793059714039383e-8,0.0015610558505919753,-4.7874043041353836e-5,3.792543115973339e-8,0.0015612281647851558,-4.7907464781617856e-5,3.794734148986789e-8,0.0015614564996265033,-4.795579391508165e-5,3.797969902153523e-8,0.0015617453775785114,-4.7994480662788104e-5,3.8003106795686565e-8,0.001562090231917282,-4.799751763502489e-5,3.7997236526191586e-8,0.0015624757732016965,-4.7940913074933274e-5,3.7943666553683704e-8,0.0015628755385377238,-4.780797264952134e-5,3.783002608138753e-8,0.0015632543909054244,-4.759591895225801e-5,3.765503864336205e-8,0.0015635755508337965,-4.7321569326116703e-5,3.743272490582087e-8,0.0015638118247210714,-4.702212301492192e-5,3.719276938020053e-8,0.0015639572183669657,-4.674759666086147e-5,3.697442350326965e-8,0.0015640325431972783,-4.654548661616456e-5,3.681443353406246e-8,0.0015640803149591668,-4.644389332460276e-5,3.673389012822279e-8,0.0015641503210691414,-4.644165242496307e-5,3.673070606589074e-8,0.0015642829369577056,-4.651013021168292e-5,3.678135043023996e-8,0.0015644977495392904,-4.660446073429612e-5,3.685000664095114e-8,0.001564790749643378,-4.6677917336542896e-5,3.6900071652951433e-8,0.001565138707406003,-4.66938238368795e-5,3.690350083708066e-8,0.0015655073435626183,-4.663241657433939e-5,3.6845954665167155e-8,0.0015658602190323327,-4.649255514773499e-5,3.672776169544263e-8,0.0015661663607259592,-4.628936931980565e-5,3.656170224679889e-8,0.0015664055799049252,-4.6049225283354464e-5,3.636883604376693e-8,0.001566571002171141,-4.580336936715299e-5,3.6173502381504967e-8,0.0015666687673390187,-4.558160277952096e-5,3.599852488215996e-8,0.0015667154033415197,-4.5407215387777025e-5,3.586148463513818e-8,0.0015667338355941623,-4.529393320932333e-5,3.577253994149994e-8,0.0015667490993197454,-4.524500274399756e-5,3.573380667359368e-8,0.0015667846174289822,-4.5254024907903564e-5,3.57399848967389e-8,0.001566859497029681,-4.5306834496840176e-5,3.5779734964378544e-8,0.0015669868024443458,-4.5383715412729446e-5,3.583733887760147e-8,0.001567172455798627,-4.546158479647085e-5,3.5894430294282084e-8,0.0015674144103284765,-4.551618411695069e-5,3.593183701499408e-8,0.001567701899164982,-4.5524599621765035e-5,3.593172347162997e-8,0.0015680149455750063,-4.5468646452923546e-5,3.588034316011282e-8,0.001568325023881159,-4.533952995396979e-5,3.577163595791014e-8,0.001568598375261144,-4.514331996072684e-5,3.561129614715066e-8,0.0015688033307539359,-4.490516831986402e-5,3.5419775786897466e-8,0.0015689213635770478,-4.4668520678280764e-5,3.5231422956829793e-8,0.0015689580930293371,-4.448560774152507e-5,3.508694038347068e-8,0.001568947072838441,-4.439966029933874e-5,3.501951652065551e-8,0.0015689406813127415,-4.442653532989222e-5,3.5040594280255434e-8,0.0015689905208410501,-4.454694343553021e-5,3.5134005465375e-8,0.0015691279470960945,-4.471462114836585e-5,3.526264408522862e-8,0.001569355167197491,-4.4874982251366504e-5,3.5383351783517066e-8,0.0015696491590304815,-4.498328840192346e-5,3.5461324901144965e-8,0.0015699730086184231,-4.5014843868502684e-5,3.547806086334234e-8,0.0015702878466824224,-4.496644962533722e-5,3.5432227789964445e-8,0.0015705615045717492,-4.48522455988792e-5,3.5336015448358164e-8,0.0015707731361774711,-4.469737825179658e-5,3.520983386424041e-8,0.0015709146371371892,-4.453167337270511e-5,3.507720338549927e-8,0.0015709899450492496,-4.4384204168804375e-5,3.4960569188722246e-8,0.0015710129446352492,-4.427899769327988e-5,3.487815813513884e-8,0.0015710044338982897,-4.4232035758685976e-5,3.484187409746818e-8,0.0015709885901114629,-4.424966839076787e-5,3.48562113954969e-8,0.0015709893763831153,-4.4328433769242266e-5,3.491813422291662e-8,0.0015710273252120134,-4.4456174728882454e-5,3.501786728147512e-8,0.001571117095259444,-4.4614146603934006e-5,3.514044529398255e-8,0.0015712659471281585,-4.4779625550250765e-5,3.526772890807883e-8,0.0015714729990209998,-4.492865339998087e-5,3.5380643711257126e-8,0.0015717290886569444,-4.503882672267935e-5,3.5461540303863484e-8,0.0015720171486412,-4.509218250304847e-5,3.549662088853352e-8,0.0015723131710548195,-4.507838065681111e-5,3.547847663955526e-8,0.0015725883317389549,-4.499835421555663e-5,3.540880348366659e-8,0.001572813307826608,-4.486786800809496e-5,3.5300892636416496e-8,0.0015729655070056204,-4.47191603474519e-5,3.518058646081875e-8,0.0015730384980441499,-4.459776227937817e-5,3.5083578249073555e-8,0.0015730502214990328,-4.4551776967474605e-5,3.504702004926623e-8,0.0015730436787471955,-4.461436338745037e-5,3.5095992048822466e-8,0.0015730749295945277,-4.478695231412046e-5,3.5230609633398364e-8,0.00157319126570817,-4.5034672737442647e-5,3.542266299781257e-8,0.0015734115792861226,-4.529940702276995e-5,3.562602881073632e-8,0.0015737208148722149,-4.552319788898638e-5,3.5795178558746185e-8,0.0015740799139331147,-4.5667994072365434e-5,3.590075376760617e-8,0.0015744426094396393,-4.572297761098429e-5,3.593523410445762e-8,0.0015747694654922382,-4.570060260613509e-5,3.5909545233455296e-8,0.0015750350883362262,-4.56275210357777e-5,3.584556214181634e-8,0.0015752294134122743,-4.5535604842148e-5,3.576877953266378e-8,0.0015753556604648073,-4.545534529408837e-5,3.5703062165524755e-8,0.0015754271119554817,-4.541175214597163e-5,3.566756900441209e-8,0.0015754637850900197,-4.5422021566715475e-5,3.567516845886349e-8,0.0015754892419881964,-4.549435685857388e-5,3.5731726192643936e-8,0.0015755275323007985,-4.562767745693644e-5,3.5835969133508226e-8,0.0015756002822981585,-4.581213815904196e-5,3.597985887669808e-8,0.0015757240290649212,-4.603051129355547e-5,3.6149580268519345e-8,0.0015759080778055216,-4.626046736804536e-5,3.632726928230143e-8,0.0015761532032229398,-4.6477532670966515e-5,3.6493374497356665e-8,0.0015764513190264005,-4.66583682351069e-5,3.662937540080888e-8,0.0015767861221216862,-4.6784116146357104e-5,3.67205887315865e-8,0.0015771347357232419,-4.6843579857850895e-5,3.6758772560147956e-8,0.0015774703483009739,-4.683599304438294e-5,3.67442426941251e-8,0.0015777659552356682,-4.677317302149219e-5,3.66873186351272e-8,0.0015779995237324785,-4.668049190430199e-5,3.660873387655922e-8,0.0015781605555831091,-4.659528839149842e-5,3.6538079166891776e-8,0.0015782567852510353,-4.656091594072024e-5,3.650901070819981e-8,0.0015783179633283798,-4.6615418475760236e-5,3.655049543919046e-8,0.0015783922903835324,-4.677665068892878e-5,3.667544840847755e-8,0.0015785325756434202,-4.703036852583066e-5,3.687171431896692e-8,0.0015787756427616659,-4.733035159097787e-5,3.7102367094230025e-8,0.0015791259181678027,-4.761430923312568e-5,3.731827295238525e-8,0.0015795538411506713,-4.7828037828527396e-5,3.747709330858676e-8,0.0015800096969891477,-4.7943878769038486E-05,3.7557792145692596e-8,0.0015804431624417705,-4.796481847401571e-5,3.756375094216574e-8,0.0015808178057632656,-4.791635491291735e-5,3.7516101368887467e-8,0.0015811164141571583,-4.783405291768669e-5,3.744360223405161e-8,0.0015813392677104443,-4.775314048922322e-5,3.737423693485045e-8,0.0015814993203580124,-4.7702326404354844e-5,3.733035174588052e-8,0.0015816171643790661,-4.7701193814970105e-5,3.7326791516613286e-8,0.0015817169630395575,-4.775965776778595e-5,3.737071389079256e-8,0.001581823347515752,-4.787832470052812e-5,3.7462041637598934e-8,0.0015819588828547596,-4.8049258257063996e-5,3.7594106726625155e-8,0.0015821417963573898,-4.8257082895207296e-5,3.775446258471748e-8,0.0015823838479101892,-4.848060164321304e-5,3.792608585212836e-8,0.001582688504544025,-4.869520808633535e-5,3.8089269531459865e-8,0.0015830498625370153,-4.887615170356731e-5,3.822428825087552e-8,0.0015834527637300596,-4.9002351733972964e-5,3.8314560752223585e-8,0.0015838743628422021,-4.906026034512833e-5,3.834982706901485e-8,0.001584287221216587,-4.904715037019271e-5,3.832875105474419e-8,0.001584663741938823,-4.897310145628491e-5,3.826032241557493e-8,0.001584981463061841,-4.8861079857009655e-5,3.8163607031293117e-8,0.0015852285820703014,-4.874466991235223e-5,3.8065608345197424e-8,0.0015854088600154176,-4.8662962215500585e-5,3.7997004979177486e-8,0.0015855444217866606,-4.86522846509656e-5,3.798563784368472e-8,0.001585674261819128,-4.8735533803462465e-5,3.804836085608511e-8,0.001585846375312292,-4.891189807186035e-5,3.818334234181005e-8,0.00158610348310477,-4.9151982596995845e-5,3.836657757562266e-8,0.001586466654834368,-4.9403489989380824e-5,3.8556531405909456e-8,0.0015869251102463237,-4.960807810621859e-5,3.870740581132169e-8,0.0015874391429179613,-4.9722343633764594e-5,3.8785587350351096e-8,0.0015879553631793688,-4.973190214442801e-5,3.878064452942808e-8,0.001588425577199708,-4.9652024693980827e-5,3.870567071163837e-8,0.00158881977381429,-4.951725979120483e-5,3.8588846273972866e-8,0.0015891295065786543,-4.936775952074638e-5,3.84623889278333e-8,0.001589364066660281,-4.9238715531157035e-5,3.8354092314337146e-8,0.001589543909685928,-4.9154994199223596e-5,3.8283168581558065e-8,0.0015896945618050432,-4.9129902713118106e-5,3.825948659678869e-8,0.0015898422153512498,-4.916611627099987e-5,3.8284520145138256e-8,0.001590010859028341,-4.925727610695112e-5,3.8352726691160195e-8,0.0015902202966968217,-4.938958761833569e-5,3.845280876708773e-8,0.0015904844846205953,-4.954336749390981e-5,3.8568874325898195e-8,0.0015908099083882816,-4.969485381752708e-5,3.868182932013065e-8,0.0015911941068452644,-4.98187279964764e-5,3.8771413773902485e-8,0.0015916248545581027,-4.989160905264646e-5,3.881908380631811e-8,0.0015920807276100831,-4.9896318601345885e-5,3.881152013111638e-8,0.0015925336582621405,-4.982618528736371e-5,3.874409592893164e-8,0.0015929536328127007,-4.9688213379708714e-5,3.862330576383604e-8,0.0015933149629505758,-4.950379940089145e-5,3.846710078351864e-8,0.001593602808933612,-4.930610263244153e-5,3.830248200720968e-8,0.0015938182399501703,-4.913404445176729e-5,3.8160453318297506e-8,0.0015939802243672306,-4.902380951458289e-5,3.806916042959481e-8,0.0015941233988982489,-4.899946750049259e-5,3.8046581250505863e-8,0.0015942911880484664,-4.906498251129774e-5,3.80945375169188e-8,0.0015945249563040758,-4.920032285756388e-5,3.8196040630227036e-8,0.0015948515164234465,-4.9364207196608636e-5,3.8317796980507725e-8,0.001595273159867582,-4.950449066879408e-5,3.841854809931519e-8,0.0015957650230228916,-4.9573895929635576e-5,3.846143646287539e-8,0.0015962822947114133,-4.954513058246872e-5,3.842577890144347e-8,0.0015967748230214939,-4.941856956430488e-5,3.8312929742037596e-8,0.001597202494943064,-4.921934317902047e-5,3.814375061431865e-8,0.0015975448239908775,-4.898645979137916e-5,3.794978155712491e-8,0.0015978022649466863,-4.876005227964857e-5,3.7762998553756675e-8,0.0015979913135114392,-4.85719625681952e-5,3.76083609760703e-8,0.0015981373497028673,-4.84414879329937e-5,3.750059586381275e-8,0.0015982682896983585,-4.837523496803743e-5,3.744429677813117e-8,0.0015984102235238262,-4.8369073369492696e-5,3.743563223650375e-8,0.0015985848577516198,-4.8410619737028296e-5,3.746436079232389e-8,0.0015988080578801715,-4.848147621960483e-5,3.751556089859576e-8,0.0015990887787054714,-4.8559129023742496e-5,3.7571077107145096e-8,0.0015994279675657184,-4.861890144868653e-5,3.761106919377434e-8,0.0015998175105410416,-4.8636534469734454e-5,3.761614354464905e-8,0.0016002397772522405,-4.859177185400766e-5,3.757032802152641e-8,0.0016006686543139628,-4.84728413566226e-5,3.74647259539885e-8,0.0016010729910405593,-4.828097347843213e-5,3.7301095421887124e-8,0.0016014227983081818,-4.8033231546302496e-5,3.709395135898375e-8,0.0016016972164009232,-4.776158920159305e-5,3.686957478771082e-8,0.001601891799677878,-4.750708267512769e-5,3.6661070725469196e-8,0.0016020220967839574,-4.730984733590426e-5,3.65002268054441e-8,0.0016021214376728508,-4.7197895387483466e-5,3.640855159267248e-8,0.0016022329539292035,-4.7178441191331395e-5,3.6390568883612766e-8,0.001602398098868516,-4.723486700987873e-5,3.64317778525816e-8,0.0016026451775172069,-4.7330459524417435e-5,3.6502037536061675e-8,0.0016029812826023223,-4.741790311922242e-5,3.6563402100527594e-8,0.0016033900211863004,-4.7451924030049034e-5,3.658023478305435e-8,0.0016038359142873748,-4.7401493578198037e-5,3.65287527576269e-8,0.0016042743565764664,-4.725778830099e-5,3.6403069368047857e-8,0.0016046639296792753,-4.703526837810497e-5,3.621574128865795e-8,0.0016049768310006606,-4.676579911472799e-5,3.599284252644777e-8,0.0016052041001474093,-4.6488499312397777e-5,3.576575444073776e-8,0.0016053547788864799,-4.623936983449527e-5,3.556292473478258e-8,0.0016054506685802667,-4.604404725371659e-5,3.540424269592429e-8,0.00160551955904301,-4.591491456251917e-5,3.529894528530359e-8,0.0016055893304846428,-4.585176544402924e-5,3.5246319584402404e-8,0.0016056839738281931,-4.584435487657563e-5,3.523780378361235e-8,0.0016058214226180075,-4.58754099005351e-5,3.525934967930275e-8,0.0016060125662822487,-4.5923316964371105e-5,3.5293484731850514e-8,0.0016062607469574757,-4.5964330399595076e-5,3.5321033008763995e-8,0.0016065612721366269,-4.597465556251913e-5,3.5322825752794e-8,0.001606900939181552,-4.5932990607520925e-5,3.528185027009399e-8,0.0016072580949436541,-4.582396800827508e-5,3.518611857277115e-8,0.0016076041773001588,-4.564246758849356e-5,3.503214741997083e-8,0.001607907835484071,-4.539791130326102e-5,3.482829369055841e-8,0.001608142149154005,-4.511646354493401e-5,3.4596304332457856e-8,0.0016082937279128775,-4.483839603063741e-5,3.4368956580540236e-8,0.001608370164011681,-4.460905850485839e-5,3.418262319337986e-8,0.0016084013367679887,-4.4465215778220584e-5,3.4066244784300986e-8,0.0016084321421592992,-4.442209614898366e-5,3.4031040378216796e-8,0.0016085087032214472,-4.4467328910789975e-5,3.406590890538271e-8,0.001608663854204168,-4.4564751128790306e-5,3.414084287148784e-8,0.0016089078261996121,-4.466603533873435e-5,3.4216585652257157e-8,0.0016092268749752002,-4.472491235101269e-5,3.425621097733665e-8,0.0016095888815234746,-4.470896660568734e-5,3.4234524970492415e-8,0.00160995294459917,-4.46061700180591e-5,3.414304169545714e-8,0.0016102797685153603,-4.442554150736995e-5,3.39901449867369e-8,0.001610540291413511,-4.41928249660299e-5,3.379729090404697e-8,0.001610720877149768,-4.3942959524330366e-5,3.3592785051752095e-8,0.0016108243718107255,-4.3711535533740247e-5,3.340493987008991e-8,0.0016108673896750982,-4.352740556905542e-5,3.325631883018611e-8,0.0016108751528596623,-4.340803798367828e-5,3.31602500419108e-8,0.0016108756639389974,-4.3358117340029234e-5,3.31199083561361e-8,0.00161089471982018,-4.33708154841172e-5,3.312942713946964e-8,0.0016109525410755215,-4.34306101333567e-5,3.317612870807587e-8,0.0016110620470242626,-4.351655218140907e-5,3.3243045504261954e-8,0.001611228317562383,-4.360524372648092e-5,3.331122931252226e-8,0.0016114486396584151,-4.367330914275547e-5,3.336174083792286e-8,0.0016117127150576606,-4.3699607289291936e-5,3.33775293772246e-8,0.0016120029665654158,-4.366764384768521e-5,3.3345510827283086e-8,0.0016122953248352881,-4.35685848202546e-5,3.3259070099345036e-8,0.0016125613483437497,-4.340490324202378e-5,3.312093756709973e-8,0.0016127727551766623,-4.319382193216696e-5,3.294576076085041e-8,0.0016129088996316033,-4.296843215561775e-5,3.276074107332174e-8,0.0016129659137071207,-4.277350269527232e-5,3.260204841704383e-8,0.0016129634518711477,-4.2654123502679954e-5,3.250560511019986e-8,0.0016129434192342419,-4.263951160928507e-5,3.249413087936494e-8,0.0016129578689934336,-4.272950726670111e-5,3.25664702196115e-8,0.001613050232896208,-4.2892278302879625e-5,3.2696007974918103e-8,0.0016132395138366183,-4.307566567224347e-5,3.2840080832235315e-8,0.0016135153781361821,-4.3225967007183096e-5,3.295532521363271e-8,0.0016138447598283675,-4.330446141592195e-5,3.3011068605873004e-8,0.0016141845061787268,-4.329558915141256e-5,3.299579503566333e-8,0.0016144937858859182,-4.320654916003372e-5,3.29165093334752e-8,0.0016147426836319956,-4.3061418898431364e-5,3.2793617549553344e-8,0.0016149162538619413,-4.28932148940195e-5,3.2654235700933185e-8,0.0016150148382885333,-4.273622151749938e-5,3.252591778532962e-8,0.0016150517857130536,-4.261972946654225e-5,3.243173477682972e-8,0.001615049514803641,-4.256367933918242e-5,3.238701919898679e-8,0.0016150347633862986,-4.2576490174574447e-5,3.239787068664833e-8,0.0016150339039934956,-4.265505690214593e-5,3.24613058418649e-8,0.0016150690590622733,-4.278649690659109e-5,3.2566675877575025e-8,0.0016151554483356746,-4.2951022505443604e-5,3.269788817933618e-8,0.0016153001048231429,-4.312527285417708e-5,3.283598386574173e-8,0.0016155017602802555,-4.328548587995333e-5,3.2961656880308e-8,0.0016157514557302796,-4.3410193344149555e-5,3.305749480030836e-8,0.0016160335151886938,-4.348253336100209e-5,3.310998203842222e-8,0.0016163267962227231,-4.3492450229067064e-5,3.311139396130571e-8,0.001616606420595729,-4.343902077762299e-5,3.306167660919614e-8,0.001616846570836147,-4.3332918110579625e-5,3.297027424956425e-8,0.0016170251774682734,-4.319829401359851e-5,3.285736904569684e-8,0.0016171308087405997,-4.307222907662207e-5,3.2753160720529384e-8,0.0016171704476762414,-4.299915965162309e-5,3.2693234113441636e-8,0.0016171742841552047,-4.301865193973153e-5,3.2708769773927315e-8,0.0016171918923307148,-4.314894035091985e-5,3.281350053431754e-8,0.0016172768691222427,-4.337450691395369e-5,3.299396166424684e-8,0.0016174652144145727,-4.364756211844907e-5,3.321089173978478e-8,0.0016177597932134746,-4.390561146011057e-5,3.341354613711286e-8,0.0016181304852361284,-4.4095543629212986e-5,3.3559243265705895e-8,0.0016185284692897027,-4.4190547319258514e-5,3.362705585213057e-8,0.0016189045522376445,-4.4193243891010715e-5,3.362020601659291e-8,0.0016192223969067512,-4.412817824935237e-5,3.355967969498163e-8,0.0016194638193470891,-4.403063195720452e-5,3.34748138358053e-8,0.0016196280163832983,-4.393679585500097e-5,3.339511192107193e-8,0.0016197277267549035,-4.3877154423368346e-5,3.334489133236136e-8,0.0016197845593948158,-4.387287847418416e-5,3.334056960624522e-8,0.0016198245204375643,-4.3934319125600074e-5,3.3389732573910446e-8,0.0016198739737394417,-4.4060948688515964e-5,3.3491313790702704e-8,0.001619956137050907,-4.424248547766236e-5,3.3636593203828094e-8,0.0016200882954145463,-4.4460987523551896e-5,3.381084517949932e-8,0.0016202798937417601,-4.469366279624242e-5,3.399550450501883e-8,0.0016205316675254457,-4.4916122131234496e-5,3.417072218106146e-8,0.0016208358841783572,-4.51056635939364e-5,3.431804144775011e-8,0.0016211775123474187,-4.524417861154815e-5,3.442285758382958e-8,0.0016215360341788234,-4.532053562216261e-5,3.447647579529873e-8,0.0016218877589150979,-4.5332465127465866e-5,3.4477688314315185e-8,0.0016222086413283134,-4.528794941479019e-5,3.4433800071019065e-8,0.0016224777898770169,-4.520602795248432e-5,3.436102856785716e-8,0.0016226820080681198,-4.511649275684907e-5,3.428394416218811e-8,0.0016228212897336288,-4.505716598228851e-5,3.423303906504118e-8,0.0016229139005976808,-4.50670885186496e-5,3.423920259833186e-8,0.0016229978830992289,-4.51749217202737e-5,3.432456868826437e-8,0.0016231246866747196,-4.538503437297744e-5,3.449162408965321e-8,0.0016233428870291516,-4.566853319778398e-5,3.4716252957965794e-8,0.0016236772248806965,-4.596812991238768e-5,3.495178509204106e-8,0.0016241152647686152,-4.621869465816446e-5,3.514559949367053e-8,0.0016246116056889723,-4.637312377459764e-5,3.526003661180751e-8,0.0016251072872445914,-4.6418152194176277e-5,3.5285198490338464e-8,0.0016255516901675028,-4.637296697358738e-5,3.523771443245092e-8,0.0016259155653828902,-4.627592173555477e-5,3.5149685697300395e-8,0.0016261928281600965,-4.616943668607092e-5,3.5056106184870745e-8,0.0016263953747431522,-4.608946050777786e-5,3.4986134383754507e-8,0.00162654592076792,-4.606055522365073e-5,3.4959174040392114e-8,0.0016266717530924076,-4.6094961601108544e-5,3.498436583192719e-8,0.0016268002162611959,-4.619362578856872e-5,3.506170277704274e-8,0.0016269555762756986,-4.6347898809298577e-5,3.5183591772346576e-8,0.0016271567027249208,-4.654151467710764e-5,3.533649211716943e-8,0.0016274153179251607,-4.675286847043376e-5,3.550269075582101e-8,0.0016277348011426761,-4.695766887346226e-5,3.566236234788382e-8,0.0016281097039318963,-4.7132008983412574e-5,3.5796030279421156e-8,0.0016285262644494334,-4.7255678611228e-5,3.5887315314142226e-8,0.001628964073625187,-4.731526564371127e-5,3.5925567937765023E-08,0.0016293987695045343,-4.7306594472402196e-5,3.5907931482636357e-8,0.0016298055166128098,-4.723617482978707e-5,3.5840485560798704e-8,0.0016301629750232944,-4.7121376003895105e-5,3.573820180050115e-8,0.0016304574112304933,-4.698912835410786e-5,3.562359354313474e-8,0.001630686636381212,-4.687296006046646e-5,3.552402309108488e-8,0.001630863266571223,-4.6807921698255846e-5,3.546744809793738e-8,0.001631016074302961,-4.6822961021669483e-5,3.5476346222796364e-8,0.0016311873490471736,-4.6931285427303824e-5,3.556023149782128e-8,0.0016314241196807519,-4.712134705140385e-5,3.570874980570606e-8,0.0016317631244090534,-4.7353656267366736e-5,3.5889370924150126e-8,0.0016322143049490748,-4.756904084464057e-5,3.605411987293246e-8,0.0016327523237028758,-4.770869469055887e-5,3.615570802256036e-8,0.001633323721960312,-4.7737093003807625e-5,3.616600609540491e-8,0.0016338673630050457,-4.7654512699828896e-5,3.608614967055138e-8,0.0016343363161102794,-4.7492623882838964e-5,3.59428498486487e-8,0.0016347097760828822,-4.729839554612501e-5,3.577507367476015e-8,0.0016349924051370127,-4.7117130386448616e-5,3.5619987353530545e-8,0.0016352061343948639,-4.6981902350859326e-5,3.550426387925348e-8,0.0016353807083681227,-4.691028273741784e-5,3.544154910868567e-8,0.0016355464804455415,-4.690570628738172e-5,3.543383998937961e-8,0.001635730112170018,-4.696057989449839e-5,3.5474262687520425e-8,0.0016359523601496132,-4.705941012943231e-5,3.5549738432914185e-8,0.0016362269041772656,-4.718145036852111e-5,3.56431208201011e-8,0.0016365595879771274,-4.730304536267612e-5,3.5735016865504467e-8,0.0016369478987237219,-4.7400035126582016e-5,3.58056778292684e-8,0.0016373808483354118,-4.7450543227840547e-5,3.583728050603426e-8,0.0016378397017732427,-4.7438197284311285e-5,3.581663456998011e-8,0.0016383000265438497,-4.7355354305080354e-5,3.573790790644766e-8,0.001638735210162438,-4.720557229499285e-5,3.5604668453241686e-8,0.0016391211394910926,-4.700451726643738e-5,3.5430520082254106e-8,0.001639441306452008,-4.6778640180967995e-5,3.5237790208829276e-8,0.0016396912690668532,-4.6561377647454084e-5,3.5054142350092676e-8,0.0016398813658379573,-4.63872399230719e-5,3.490753406266736e-8,0.0016400368292994823,-4.628458200577974e-5,3.4820292858860436e-8,0.0016401946504560447,-4.6268117996810935e-5,3.480322538106792e-8,0.0016403967479677747,-4.6332728578918845e-5,3.485095674241419e-8,0.001640679685853359,-4.645083249127904e-5,3.494018708827335e-8,0.0016410627568417529,-4.657595311703952e-5,3.5032828146860476e-8,0.0016415385136823188,-4.665404102506928e-5,3.5085209016852697e-8,0.0016420712361589218,-4.6640593747802424e-5,3.506183028304087e-8,0.0016426066758982037,-4.651680204060536e-5,3.49483030632206e-8,0.0016430902029990438,-4.6296213477060036e-5,3.4756616314912035e-8,0.0016434846325752775,-4.601807762842053e-5,3.451956176891535e-8,0.0016437792010674768,-4.573164001443794e-5,3.4277753576294015e-8,0.0016439873944463735,-4.5480182565328244e-5,3.406648234300473e-8,0.0016441377649539473,-4.5291435015766347e-5,3.390791520498886e-8,0.0016442637177816871,-4.517553440841134e-5,3.38096166616314e-8,0.0016443960339398652,-4.512789702654878e-5,3.376713660815342e-8,0.0016445588953631549,-4.5133752929414504e-5,3.3767884966551584e-8,0.0016447684565497988,-4.517231429766106e-5,3.3794572068923304e-8,0.001645032669366525,-4.521994135279829e-5,3.382772789479797e-8,0.0016453514524502528,-4.5252519765481794e-5,3.3847558228796395e-8,0.0016457168505185967,-4.524759349498278e-5,3.38356608525806e-8,0.001646113327512554,-4.51867851078022e-5,3.3777059144320585e-8,0.0016465187233436285,-4.5058731090684236e-5,3.366270182651552e-8,0.0016469065595708819,-4.4862213010709696e-5,3.349209230451183e-8,0.0016472501485759548,-4.460855757214049e-5,3.327522050357837e-8,0.0016475282892311342,-4.43219688174928e-5,3.303267631530774e-8,0.001647731361928809,-4.40365769207798e-5,3.279298525555044e-8,0.0016478658173717641,-4.378990661504161e-5,3.2587010223876336e-8,0.001647955012278325,-4.361395560197095e-5,3.244050743190803e-8,0.0016480353368982224,-4.352634140384957e-5,3.236693816783387e-8,0.0016481481573200063,-4.352430208745986e-5,3.236282743263174e-8,0.0016483294908475749,-4.358362185466893e-5,3.240727442369534e-8,0.001648600066709863,-4.366323577305269e-5,3.2466074614676396e-8,0.0016489585077819739,-4.371486073861877e-5,3.249977289857885e-8,0.0016493799815096145,-4.369565905864213e-5,3.247396466644824e-8,0.0016498216574363398,-4.35805854427313e-5,3.236916312326058e-8,0.0016502342591044501,-4.337016148742985e-5,3.2186868815840264e-8,0.0016505762173780565,-4.309020706568123e-5,3.194909432152713e-8,0.0016508250968513124,-4.278317246005813e-5,3.1691092721698956e-8,0.0016509819009967624,-4.24946924788503e-5,3.1450271221881416e-8,0.0016510674183862332,-4.226105950962592e-5,3.125597438215787e-8,0.0016511135338679924,-4.210202576888828e-5,3.112374663814163e-8,0.0016511538874274358,-4.201993406387043e-5,3.105483497910188e-8,0.0016512170388640625,-4.200324771532353e-5,3.1039256218679945e-8,0.0016513230147448136,-4.2031673250908966e-5,3.106005739207479e-8,0.0016514824899899535,-4.2080862105879425e-5,3.109711887696447e-8,0.0016516973653265966,-4.212590433392133e-5,3.1129923067476226e-8,0.001651961729402234,-4.214373526750093e-5,3.113947244255304e-8,0.001652262709403183,-4.2115034434587586e-5,3.11098777670916e-8,0.001652581282236162,-4.20262355409554e-5,3.103010807540562e-8,0.001652893563089459,-4.1871968498026697e-5,3.089609413234407e-8,0.0016531733119630543,-4.165773999853627e-5,3.071294747399099e-8,0.001653396304072018,-4.1401950749318465e-5,3.0496512296258735e-8,0.0016535465337220673,-4.113559677284715e-5,3.027291157231968e-8,0.00165362283822673,-4.08978653952933e-5,3.007468972951524e-8,0.001653643051829214,-4.072709688518788e-5,2.993320892854408e-8,0.0016536425379715574,-4.064915069866908e-5,2.986905479463843e-8,0.0016536658656256423,-4.0667642322225216e-5,2.988415848613424e-8,0.0016537538623654171,-4.076077998128367e-5,2.995949305378407e-8,0.0016539310239152949,-4.088682206365838e-5,3.0059909699632935e-8,0.0016541982039326847,-4.099610396545309e-5,3.0144299811144e-8,0.0016545328263749025,-4.1044953793367646e-5,3.0177129842224954e-8,0.0016548957129889686,-4.100692229408898e-5,3.013755445295461e-8,0.0016552417765755723,-4.0878540058739154e-5,3.0023865014476645e-8,0.0016555313813681053,-4.0678744800547455e-5,2.985267628556814e-8,0.0016557394578348126,-4.0442706059349526e-5,2.965356616713717e-8,0.0016558602205119905,-4.0212091256584694e-5,2.9460936650144332e-8,0.0016559066064064827,-4.002467175107929e-5,2.9305507808049016e-8,0.0016559051411805651,-3.990618815504244e-5,2.9207810627581598e-8,0.0016558883208421219,-3.986641734804314e-5,2.9175190181454984e-8,0.0016558871094012825,-3.989970995789232e-5,2.920244204328383e-8,0.0016559255239323612,-3.9988717521732396e-5,2.9274958922300416e-8,0.0016560179934640134,-4.010939295998521e-5,2.9372803922459204e-8,0.0016561690600313398,-4.023567907279301e-5,2.947446435780696e-8,0.0016563744709726966,-4.0343077329543915e-5,2.9559704687070583e-8,0.0016566227473716701,-4.04110569171678e-5,2.9611550177314757e-8,0.0016568967011817656,-4.0424765170366424e-5,2.9617783814663727e-8,0.0016571748725286567,-4.03766005139679e-5,2.9572361572399208e-8,0.001657433277921752,-4.026798280415287e-5,2.9476932544257488e-8,0.0016576481341211992,-4.011122108290574e-5,2.9342315929308953e-8,0.0016578002161897344,-3.993068140079735e-5,2.918927620055278e-8,0.0016578808882250792,-3.97616016784514e-5,2.904730413787855e-8,0.0016578983842147038,-3.964455859766971e-5,2.894986463588264e-8,0.0016578810457861806,-3.961480375790006e-5,2.8925550308629004e-8,0.0016578735047228827,-3.968893422226867e-5,2.8987194852995764e-8,0.0016579242628156493,-3.985510074322592e-5,2.9124022121367424e-8,0.0016580686098759247,-4.007348282468502e-5,2.9302307407495906e-8,0.001658315212483153,-4.028875236110224e-5,2.9475907260284677e-8,0.0016586433615687947,-4.044883713349159e-5,2.9601907087753384e-8,0.0016590113970561915,-4.0520869931719907e-5,2.9653810852602028e-8,0.0016593709065407672,-4.049825768358674e-5,2.9627222749183985e-8,0.0016596801558158162,-4.039855087642855e-5,2.953777937619335e-8,0.0016599128451770951,-4.025546688761349e-5,2.9414208659192474e-8,0.001660061372670357,-4.010894002692455e-5,2.928985879812469e-8,0.0016601355508499426,-3.999598249842553e-5,2.9195098085642385e-8,0.0016601582578794414,-3.994386969418339e-5,2.9151836997324146e-8,0.0016601594601349523,-3.9966285990856224e-5,2.9170608546724392E-08,0.0016601699239930832,-4.006254573710791e-5,2.9250175101477995e-8,0.0016602158041532625,-4.021951416375853e-5,2.9379253301896273e-8,0.0016603149537395255,-4.041536412718664e-5,2.9539614735345927e-8,0.00166047527124585,-4.062408817363606e-5,2.970971399095024e-8,0.0016606948895783432,-4.081978853524619e-5,2.986812443718438e-8,0.0016609636296508186,-4.098007900947471e-5,2.9996308350286483e-8,0.0016612650174455234,-4.108841983012459e-5,3.0080601450579956e-8,0.0016615783991599132,-4.113565076063209e-5,3.01135932639863e-8,0.00166188105966781,-4.11211016170598e-5,3.009513534055636e-8,0.001662150531071203,-4.105352714493535e-5,3.0033097660775586e-8,0.0016623675379770072,-4.095183539624763e-5,2.994381510048298e-8,0.0016625201033940193,-4.0844962473662907e-5,2.98517361833591e-8,0.0016626087554811723,-4.0769446539057265e-5,2.9787188477707118e-8,0.0016626514160071732,-4.0762994359918156e-5,2.9780965991072815e-8,0.0016626848298044925,-4.0853432310140516e-5,2.9855291758414986e-8,0.0016627585180696237,-4.104557297078488e-5,3.001319945286181e-8,0.0016629196343020275,-4.1312810810254054e-5,3.023184378109478e-8,0.0016631936622173485,-4.1601319751516236e-5,3.046615302114082e-8,0.0016635717482644979,-4.1848343784879263e-5,3.0664058183648755e-8,0.0016640132555107746,-4.200576477773202e-5,3.0786057280139574e-8,0.0016644620386205267,-4.205590491481198e-5,3.0818301607812385e-8,0.001664866364125141,-4.201279974388258e-5,3.0773509768777413e-8,0.001665192705554029,-4.1912072651471524e-5,3.068227045198648e-8,0.0016654301308830564,-4.1797159168452974e-5,3.0581274453788686e-8,0.0016655875286445104,-4.170783384293948e-5,3.050359333944092e-8,0.001665687465604892,-4.167319984191924e-5,3.0472896827926416e-8,0.0016657594905155892,-4.170874776273719e-5,3.050124412626773e-8,0.0016658342301060726,-4.181625386895793e-5,3.058929521132896e-8,0.0016659386770511526,-4.1985505643195065e-5,3.0727965256502515e-8,0.0016660927790692734,-4.2197234556937535e-5,3.0900934221248055e-8,0.001666307394327278,-4.242676039351328e-5,3.108761361993264e-8,0.0016665836116936171,-4.2647885737481854e-5,3.1266263776837525e-8,0.0016669133750296294,-4.2836615240290816e-5,3.141699700450582e-8,0.0016672812040082632,-4.29742538784887e-5,3.1524353127941986e-8,0.001667666583854231,-4.3049585079543835e-5,3.157918783389978e-8,0.0016680466219054927,-4.306016694156729e-5,3.1579840829446867e-8,0.0016683988209936053,-4.3012919060955386e-5,3.153264421759085e-8,0.0016687039684606657,-4.2924075892586436e-5,3.145177637443578e-8,0.001668949248977301,-4.281847186208641e-5,3.135844372913255e-8,0.001669131786259909,-4.272775819299064e-5,3.127914542178871e-8,0.0016692623804481766,-4.268653070428464e-5,3.1242302733313314e-8,0.0016693680627836978,-4.272526972232355e-5,3.1272440060728026e-8,0.0016694908319522278,-4.286013130087455e-5,3.138195636848311e-8,0.0016696795079151228,-4.3082236687797025e-5,3.156257050561017e-8,0.0016699738397906113,-4.335263606913009e-5,3.178138863954782e-8,0.0016703860640257925,-4.3610062290433165e-5,3.1987399692878435e-8,0.0016708909850968417,-4.3792311883293744e-5,3.212916881254575e-8,0.0016714333005318656,-4.3861116917503015e-5,3.217546090751692e-8,0.0016719492822700806,-4.3815726814167675e-5,3.2126524444803504e-8,0.0016723897475633752,-4.368843070089595e-5,3.201025739742718e-8,0.0016727324810957033,-4.352796787840965e-5,3.1868119479992646e-8,0.0016729818078562674,-4.338203342372647e-5,3.174024705968066e-8,0.001673160510358554,-4.3286058936851166e-5,3.165596355869807e-8,0.0016733001997954202,-4.325918304672302e-5,3.1630534790235667e-8,0.0016734335563792723,-4.3305040518058526e-5,3.166611119385737e-8,0.0016735892269826305,-4.3414715646800075e-5,3.1754482304429493e-8,0.0016737888324904195,-4.357023755789901e-5,3.188016234879414e-8,0.0016740453537005702,-4.3748057320064645e-5,3.202330368510447e-8,0.0016743624861162748,-4.392241829557162e-5,3.216241408654458e-8,0.0016747348092937828,-4.406860454410632e-5,3.227695616684352e-8,0.0016751487805059524,-4.416603666815915e-5,3.234987839857888e-8,0.001675584637718124,-4.420100590072595e-5,3.236992864406305e-8,0.0016760191120139118,-4.4168658691226686e-5,3.23333885762874e-8,0.0016764286255676625,-4.407397693962139e-5,3.224493873197347e-8,0.0016767926831136699,-4.393169599546051e-5,3.211753662941352e-8,0.001677097237930815,-4.3765093105344423e-5,3.197123217472216e-8,0.00167733777658621,-4.360358105039846e-5,3.183091478114156e-8,0.001677521869398556,-4.347902774846859e-5,3.172303510741116e-8,0.0016776707408900074,-4.342049118287758e-5,3.167116295241453e-8,0.0016778187422698135,-4.3447130391136005e-5,3.1690241873688606e-8,0.0016780089503785252,-4.3560098509420256e-5,3.178016652122048e-8,0.0016782833720448765,-4.373614563117936e-5,3.192080369790514e-8,0.0016786683666438333,-4.3927655024510755e-5,3.207221484054373e-8,0.001679160369115784,-4.407367191046424e-5,3.2183808817329206e-8,0.0016797209875307913,-4.412114009758808e-5,3.221188471697183e-8,0.0016802880403294148,-4.404672142738793e-5,3.213771971384632e-8,0.001680798773740542,-4.386597338792192e-5,3.197519004817064e-8,0.0016812121713359505,-4.362439078443936e-5,3.176318558267004e-8,0.0016815186777889915,-4.337739128303645e-5,3.1548644038694827e-8,0.0016817358173011794,-4.317163234212843e-5,3.137068706839119e-8,0.0016818964774662018,-4.303518866881324e-5,3.125235326029229e-8,0.0016820373053456571,-4.2976515779093504e-5,3.1199916976096325e-8,0.0016821908517579908,-4.298835334932385e-5,3.120645643391533e-8,0.001682381643870257,-4.305295001771544e-5,3.125647495228362e-8,0.0016826248641123465,-4.314669659029766e-5,3.1329875743603594e-8,0.0016829262935964223,-4.3243765750394774e-5,3.1404959032322505e-8,0.0016832827993444842,-4.3319058823132525e-5,3.1460773886099394e-8,0.0016836831808576592,-4.335081474193989e-5,3.147921387142313e-8,0.0016841094761317773,-4.332309858073908e-5,3.144709006843145e-8,0.0016845389965708768,-4.322812581928537e-5,3.1358136502702837e-8,0.0016849472827916928,-4.30680097516396e-5,3.121454317459761e-8,0.001685311817324549,-4.28553785051464e-5,3.102747616737498e-8,0.0016856160259362443,-4.2612465496661675e-5,3.081620600067579e-8,0.0016858529647612876,-4.2368472572295754e-5,3.060568908899294e-8,0.0016860279929869306,-4.2155252212118004e-5,3.042272064814904e-8,0.0016861597397253318,-4.2001707138160697e-5,3.029110352696416e-8,0.001686278802546357,-4.192753075558542e-5,3.0226450956112963e-8,0.0016864236511896307,-4.1937096150845514e-5,3.023131644925384e-8,0.0016866333005143353,-4.20148809990313e-5,3.029172471873377e-8,0.0016869370383114897,-4.212468985170035e-5,3.0376837396555156e-8,0.0016873432300061099,-4.221528826700933e-5,3.0443795692792346e-8,0.0016878316433975797,-4.223370069387507e-5,3.044875659726567e-8,0.0016883549945588567,-4.214339067565662e-5,3.0361907947096335e-8,0.0016888524992501178,-4.193939125212146e-5,3.017996755366323e-8,0.0016892708942925403,-4.165129888299081e-5,2.992858118803242e-8,0.0016895823148465297,-4.1331399559831654e-5,2.9652240492607542e-8,0.0016897900659125485,-4.103474076847829e-5,2.9397395175287495e-8,0.0016899216625505006,-4.080203475990938e-5,2.919799465346154e-8,0.0016900157054978312,-4.0652031392961096e-5,2.906915313908238e-8,0.0016901099208097574,-4.058288462987776e-5,2.900853004866035e-8,0.0016902339270298944,-4.057817378667731e-5,2.900165126974593e-8,0.0016904065626526063,-4.061354355146046e-5,2.9027644312851774e-8,0.0016906360051758417,-4.0661950119559325e-5,2.9063648467584324e-8,0.0016909209995482196,-4.069723028481099e-5,2.9087710885649258e-8,0.0016912522654108416,-4.069653884596306e-5,2.9080721860103752e-8,0.0016916138646757722,-4.064230977992161e-5,2.9028017183053914e-8,0.0016919847467131485,-4.052416230559773e-5,2.8921020015667242e-8,0.0016923408945919195,-4.034078146507427e-5,2.8758904768726176e-8,0.0016926584456100585,-4.0101338254094135e-5,2.854984370404633e-8,0.0016929177886920088,-3.98256830559316e-5,2.8311126828899853e-8,0.001693108077881154,-3.954252987433632e-5,2.8067479641023334e-8,0.0016932310746483276,-3.928519728252996e-5,2.7847258747180767e-8,0.0016933029691601435,-3.908519792267514e-5,2.767686433700739e-8,0.0016933530634665743,-3.896487647791898e-5,2.7574483226122663e-8,0.0016934189419301243,-3.893091195901987e-5,2.7544749748504323e-8,0.0016935386906464923,-3.897054727601237e-5,2.7575867805514548e-8,0.001693741560057379,-3.905203356829756e-5,2.7640332995878002e-8,0.0016940391412425884,-3.9130122676386634e-5,2.7699808677760945e-8,0.0016944196388182435,-3.9156405028759944e-5,2.7713881316001143e-8,0.0016948479443695268,-3.909270277009998e-5,2.7651188701418565e-8,0.0016952732925359264,-3.892369137957591e-5,2.749979593321849e-8,0.0016956435737868081,-3.8663481150373246e-5,2.7272496371780773e-8,0.001695921508217519,-3.835205250275875e-5,2.7003629854952092e-8,0.0016960956761315402,-3.804202367397545e-5,2.67378143191e-8,0.0016961815319577094,-3.778160361537539e-5,2.6515529524935576e-8,0.001696213032473906,-3.7601416121365983e-5,2.6362069074866936e-8,0.0016962301457196613,-3.750973613700963e-5,2.628370233701135e-8,0.0016962680770975457,-3.749551816840239e-5,2.627045669394839e-8,0.0016963512376621233,-3.753538910232288e-5,2.63021853253086e-8,0.0016964917453452192,-3.7600818583413475e-5,2.635465438290942e-8,0.001696690651419292,-3.766350660714986e-5,2.6404007688425848e-8,0.001696940137771745,-3.769874102950349e-5,2.642947829630893e-8,0.0016972256658882062,-3.7687335396604675e-5,2.6414948818137022e-8,0.0016975277902204365,-3.761694740849289e-5,2.635007890531258e-8,0.001697823895555182,-3.7483365373189244e-5,2.6231474474216885e-8,0.0016980904064073249,-3.729186542931282e-5,2.6063916854335785e-8,0.0016983059629982868,-3.705818431813839e-5,2.5861193564983613e-8,0.00169845567523588,-3.6808209557159376e-5,2.5645733638452276e-8,0.0016985358748413822,-3.6575286342219624e-5,2.544614117888997e-8,0.0016985578725676185,-3.6394393189292205e-5,2.5292069524213555e-8,0.0016985486004877865,-3.629367901585675e-5,2.5206946956193076e-8,0.001698546470920179,-3.628561471787852e-5,2.5200532434859682e-8,0.0016985925376170278,-3.6361141746669543e-5,2.5264171502710526e-8,0.0016987192823167937,-3.648970911878939e-5,2.537113473313952e-8,0.0016989407603901555,-3.66260131869023e-5,2.548261022146134e-8,0.0016992475797464068,-3.672165020583402e-5,2.5557724392811732e-8,0.0016996084606618878,-3.673811638230782e-5,2.5564517650592807e-8,0.001699977956475142,-3.6657310285023185e-5,2.5488638588697726e-8,0.0017003082070326627,-3.648654916289649e-5,2.5337305501061796e-8,0.001700561508238771,-3.625653060246809e-5,2.5137301531646965e-8,0.0017007199892369825,-3.601259358681587e-5,2.492738326789755e-8,0.0017007892677775634,-3.580192599678626e-5,2.474739066190967e-8,0.0017007949978842718,-3.566104751616369e-5,2.462773297309177e-8,0.0017007740285271689,-3.560774970729352e-5,2.4582760104628268e-8,0.001700763881614479,-3.5639540723169225e-5,2.4609678123756305e-8,0.0017007942876682992,-3.5737747088271245e-5,2.4692199666377635e-8,0.0017008827935677405,-3.5874468764077714e-5,2.48064931342209e-8,0.0017010342865269056,-3.601946403066804e-5,2.4926953335125145e-8,0.0017012429683338664,-3.614526778038245e-5,2.503041713192252e-8,0.0017014952046849267,-3.623023427960677e-5,2.5098644185563178e-8,0.001701772238022168,-3.626002631665762e-5,2.5119562344499273e-8,0.0017020524196195597,-3.6228338899696296e-5,2.5087946189913077e-8,0.0017023131682198593,-3.613749747676565e-5,2.500601481098576e-8,0.0017025331952084945,-3.599911636755302e-5,2.488403054979358e-8,0.001702695545569224,-3.583443484893609e-5,2.4740519688495516e-8,0.001702791658995604,-3.567341761960704e-5,2.4601345097724025e-8,0.001702825905263925,-3.5551336305842663e-5,2.449660803475595e-8,0.0017028188818827854,-3.550180632355494e-5,2.4454604213756933e-8,0.001702806735149731,-3.5546798682885895e-5,2.4493348244526906e-8,0.0017028341827005904,-3.5686793861779424e-5,2.4612368548798255e-8,0.0017029417119942861,-3.589622192692521e-5,2.4789084250634145e-8,0.001703151464359933,-3.612826882154989e-5,2.4983140816697334e-8,0.0017034584180842351,-3.632857896050061e-5,2.514822835935455e-8,0.0017038313132765339,-3.645226816286234e-5,2.5246595649292e-8,0.0017042226379164888,-3.647699395454146e-5,2.5260079820686068e-8,0.0017045828447247262,-3.640761249596701e-5,2.5193854756660187e-8,0.0017048733046878682,-3.627237682470769e-5,2.5072903100127402e-8,0.0017050744960167964,-3.611354589471979e-5,2.4933747465570844e-8,0.0017051883610562926,-3.597597816658294e-5,2.4814589910546375e-8,0.0017052354342512147,-3.5896752180398834e-5,2.4746512664333185e-8,0.0017052482576193312,-3.589793749996182e-5,2.4747526264296278e-8,0.001705263072666433,-3.598363726072869e-5,2.482032549880074e-8,0.0017053119227668128,-3.614137236019604e-5,2.4953695706256513e-8,0.0017054169711461474,-3.6346798808851755e-5,2.5126630491637535e-8,0.001705587948875609,-3.656997064057401e-5,2.5313627491764613e-8,0.0017058225445119196,-3.678132058142517e-5,2.548965965479151e-8,0.0017061087821257628,-3.69561651974611e-5,2.563388881603951e-8,0.0017064282269366776,-3.70773600928232e-5,2.5731871018470053e-8,0.0017067591018042412,-3.713639521195745e-5,2.5776518819360373e-8,0.0017070789070781516,-3.71335783856623e-5,2.576833424327725e-8,0.001707366647808429,-3.7077896034809675e-5,2.5715344204894712e-8,0.0017076050669122245,-3.6986775316050295e-5,2.563286430776859e-8,0.0017077833482693745,-3.6885519284883346e-5,2.5542879446377526e-8,0.0017079005422884115,-3.6805662765103294e-5,2.547244983570222e-8,0.0017079692563718653,-3.678101653653675e-5,2.545019000338502e-8,0.0017080179220300188,-3.684031594380135e-5,2.549999137370553e-8,0.0017080887479602191,-3.699691368462634e-5,2.5632392147724558e-8,0.001708228641281455,-3.723898589582162e-5,2.583648649016691e-8,0.0017084735851781347,-3.752657719115359e-5,2.607763848747086e-8,0.0017088326289339622,-3.7800822890985845e-5,2.6305464895935834e-8,0.0017092809717665692,-3.800389880699946e-5,2.6470864658603684e-8,0.001709767617820864,-3.810010719756817e-5,2.6543979991628234e-8,0.0017102337850382358,-3.8086965178193554e-5,2.6523588534275293e-8,0.0017106319934249428,-3.799214504651016e-5,2.6434316445958196e-8,0.0017109375331463164,-3.786074079930412e-5,2.6315481437475767e-8,0.0017111503518974585,-3.774050858751181e-5,2.6208213356204093e-8,0.0017112901426587356,-3.767043065840216e-5,2.6145574168089167e-8,0.001711388473927356,-3.767435097338324e-5,2.6147233879245078e-8,0.0017114807478860903,-3.7759148181293965e-5,2.6218181852708225e-8,0.0017115993915441882,-3.791616629237784e-5,2.6350243451075947e-8,0.0017117688340202747,-3.812478479964005e-5,2.6525321161408846e-8,0.0017120025462314225,-3.8357269218783055e-5,2.671957407701288e-8,0.0017123022368902155,-3.858401705662783e-5,2.690781030939024e-8,0.0017126589667248331,-3.8778319536625255e-5,2.706742096037333e-8,0.0017130556713426438,-3.892000575518932e-5,2.718139609955358e-8,0.0017134704463890348,-3.8997637220543705e-5,2.72401837338603e-8,0.0017138799079658143,-3.900926090925543e-5,2.7242381927571813e-8,0.0017142621560916798,-3.896209930041389e-5,2.719452965369347e-8,0.0017145992769997747,-3.887164408049795e-5,2.7110327165076998e-8,0.0017148795732618073,-3.876038090260755e-5,2.7009443934541433e-8,0.0017150997739135154,-3.8656079592503165e-5,2.691587804537622e-8,0.0017152674011576832,-3.858919935674702e-5,2.6855564023675893e-8,0.001715402930080424,-3.858850645778573e-5,2.68525620088811e-8,0.0017155403030105689,-3.867411814540851e-5,2.6923223505940072e-8,0.001715723354598753,-3.884849496986257e-5,2.706875788258036e-8,0.0017159957908326042,-3.9088518326831626e-5,2.7268754434345864e-8,0.0017163851403779347,-3.9344697300168935e-5,2.748066663980295e-8,0.001716886993958065,-3.955318428218216e-5,2.7650053898035193e-8,0.0017174602847125158,-3.965909042471542e-5,2.773040269966326e-8,0.001718040134972025,-3.963938085916244e-5,2.770265841257851e-8,0.0017185625897166842,-3.9511228867599055e-5,2.758236823583223e-8,0.0017189868062355465,-3.932167724591736e-5,2.7410713552494807e-8,0.001719303790073166,-3.912724285345024e-5,2.7236765021706585e-8,0.0017195315916373054,-3.897569321704473e-5,2.710159348901865e-8,0.0017197039490144403,-3.889639604552238e-5,2.7029929542711243e-8,0.001719859026622647,-3.889874932274322e-5,2.7028998797406246e-8,0.0017200313178398767,-3.897534491821806e-5,2.7091549749431207e-8,0.0017202469671751624,-3.910684938799904e-5,2.7200319928931065e-8,0.001720521602018453,-3.926695176135516e-5,2.7332412797781222e-8,0.001720859794259045,-3.942689817955544e-5,2.7463158757262513e-8,0.001721255728863236,-3.955955466122989e-5,2.756947544016638e-8,0.0017216948873827532,-3.9642868900642176e-5,2.7632707506931933e-8,0.001722156569161592,-3.966254350579579e-5,2.764085344336467e-8,0.0017226170439005363,-3.9613697538888915e-5,2.7590003469533287e-8,0.001723052976870324,-3.9501301872358064e-5,2.7484764624405265e-8,0.0017234446600947672,-3.933941901930363e-5,2.733763268972299e-8,0.001723778754377761,-3.914951517199835e-5,2.7167486552635708e-8,0.0017240504576373702,-3.8958063040786535e-5,2.6997386666773607e-8,0.0017242650711087881,-3.8793531002493264e-5,2.6851810256787167e-8,0.0017244389431611393,-3.868270733259092e-5,2.675337383241879e-8,0.0017245995113033862,-3.864602832841346e-5,2.671885005626151e-8,0.0017247834536315045,-3.8691681327300336e-5,2.6754311849929e-8,0.0017250313802367769,-3.880929377612953e-5,2.6850034141866425e-8,0.001725377842565471,-3.896581169015178e-5,2.697723630726428e-8,0.0017258375470063556,-3.910800396460535e-5,2.7090318371162557e-8,0.0017263930836693708,-3.917572346874251e-5,2.7138107085967308e-8,0.0017269933872087041,-3.912436180795919e-5,2.7082925689746156e-8,0.0017275689865215494,-3.8945638522437385e-5,2.691835379492017e-8,0.0017280585048235183,-3.86727214245852e-5,2.6673635556659343e-8,0.001728431073422244,-3.836534884152783e-5,2.6400818438587404e-8,0.0017286923868734853,-3.808504387510162e-5,2.61532106623058e-8,0.0017288748816655678,-3.787530232705404e-5,2.5968120288942417e-8,0.0017290217154868146,-3.7754199534558863E-05,2.5860493154658515e-8,0.0017291734675064128,-3.771726995413944e-5,2.582562501534354e-8,0.0017293607820238672,-3.7744848247661723E-05,2.584579636728525e-8,0.001729602000315515,-3.780948874960963e-5,2.5896883802857644e-8,0.001729903599395464,-3.788165973355425e-5,2.595331727889163e-8,0.0017302617181777903,-3.7933690493989186e-5,2.5991389794231897e-8,0.0017306640141175572,-3.794259510943676e-5,2.5991547940454676e-8,0.001731091755867424,-3.789224556048095e-5,2.594015958103042e-8,0.001731522255539111,-3.7775051882364856e-5,2.5830937167328825e-8,0.0017319317604426708,-3.7593037290670407e-5,2.5665905426726304e-8,0.0017322987686243735,-3.735795299004614e-5,2.545555029736884e-8,0.0017326074067128012,-3.709011144855787e-5,2.5217806685687195e-8,0.0017328503457029842,-3.6815919057722917e-5,2.4975834819967113e-8,0.001733030801250284,-3.6564297546596944e-5,2.4754770932095832e-8,0.001733163245050693,-3.636230112525841e-5,2.4577788776660804e-8,0.0017332725692263016,-3.6230386059595666e-5,2.446195888578073e-8,0.001733391561335409,-3.6177777041230204e-5,2.4414354594100277e-8,0.0017335564073636222,-3.619837183913728e-5,2.4428778625296542e-8,0.001733799814146551,-3.626816379255833e-5,2.4483858210644657e-8,0.0017341419144584454,-3.634606741287226e-5,2.454398795466479e-8,0.0017345806750870597,-3.638048933612316e-5,2.4565021790145197e-8,0.0017350858869240476,-3.632295309658755e-5,2.4505843202086038e-8,0.0017356024788424108,-3.614624025006184e-5,2.4343764994910206e-8,0.0017360663216553012,-3.585874629062718e-5,2.408675934782713e-8,0.0017364275421104804,-3.550486845228883e-5,2.377374351553505e-8,0.001736668888599713,-3.514850340937432e-5,2.34602712311622e-8,0.001736808661045457,-3.4848567953173e-5,2.3197265336036242e-8,0.001736888544939611,-3.464037865199596e-5,2.301485336433552e-8,0.0017369558513605297,-3.4530440416808935e-5,2.29179595201377e-8,0.001737049707092597,-3.4502354376221574e-5,2.289165624475731e-8,0.0017371947516276504,-3.4526982344086895e-5,2.2910199010581445e-8,0.0017374008073448293,-3.4571512886728264e-5,2.2944984052831473e-8,0.001737665467048844,-3.460545560147143e-5,2.2969695297045837e-8,0.001737977290689824,-3.460390307791772e-5,2.296299541437974e-8,0.0017383186141002541,-3.454918032334136e-5,2.290982677063709e-8,0.0017386679295325906,-3.4431804356590167e-5,2.2802188582601254e-8,0.0017390021734525031,-3.42511906097866e-5,2.2639776047910924e-8,0.0017392992945751758,-3.40160914722638e-5,2.243042545250072e-8,0.0017395413117880889,-3.374434814309473e-5,2.2189933916874547e-8,0.0017397176600680104,-3.346135952529788e-5,2.1940688488459516e-8,0.0017398281621878566,-3.319689225605055e-5,2.170877243418754e-8,0.0017398847366847004,-3.2980307378858836e-5,2.1519663391740078e-8,0.00173991100205662,-3.283480466826047e-5,2.1393128136041958e-8,0.0017399392899709579,-3.27718231350248e-5,2.1338379242105724e-8,0.00174000521831946,-3.278698042141254e-5,2.1350723083240454e-8,0.001740140572588363,-3.285870325852261e-5,2.1410652793135758e-8,0.0017403655886877377,-3.295034303669861e-5,2.1485963701877946e-8,0.0017406820927880144,-3.301629939579607e-5,2.153721791335664e-8,0.0017410695269251995,-3.301209684177935e-5,2.152643905078453e-8,0.001741486310794703,-3.290702867540473e-5,2.1427864745405244e-8,0.0017418784545159788,-3.269589869418132e-5,2.1237862433750336e-8,0.0017421948525763043,-3.2404476839655194e-5,2.097945465702013e-8,0.001742404370709457,-3.208389090653782e-5,2.069734831489266e-8,0.001742506671572139,-3.179415040864402e-5,2.0443603476147352e-8,0.0017425307722198473,-3.158389373995162e-5,2.0260073766504838e-8,0.0017425223974869423,-3.147622681133658e-5,2.0166207874633754e-8,0.0017425275508909542,-3.146622368211866e-5,2.0157058325399752e-8,0.0017425801811898768,-3.152827253738807e-5,2.020986020759265e-8,0.0017426972860252556,-3.162719052466486e-5,2.02938080720638e-8,0.001742880085460341,-3.172780363660379e-5,2.0378372619537326e-8,0.001743118076178938,-3.180084546028723e-5,2.0438317988914532e-8,0.0017433934077427334,-3.1825558838409014e-5,2.045583270732787e-8,0.0017436844082488409,-3.179033969714021e-5,2.0421013873564265e-8,0.001743968178512343,-3.169263001235832e-5,2.0331783624667846e-8,0.0017442227209409098,-3.153871728518193e-5,2.0193782525411485e-8,0.0017444291701622036,-3.134350069999404e-5,2.002022746940685e-8,0.0017445744879534223,-3.112978763186553e-5,1.9831294365844262e-8,0.0017446545474839863,-3.092639446856581e-5,1.9652370870985962e-8,0.0017446769299296102,-3.0764373350770444e-5,1.9510621046903156e-8,0.0017446621867443558,-3.067120727891532e-5,1.9429795770389297e-8,0.001744642159515886,-3.066382603124781e-5,1.9424111620866493e-8,0.0017446545782597647,-3.074243219545489e-5,1.9492972810802038e-8,0.0017447345609175441,-3.088764647827402e-5,1.961870511808151e-8,0.0017449051754598907,-3.106281392238331e-5,1.9768826171514667e-8,0.0017451700230479688,-3.122163105108318e-5,1.9902887093021913e-8,0.001745510408947374,-3.1319374667683715e-5,1.9982307573413395e-8,0.001745888357283682,-3.1324766347923475e-5,1.998060209584599e-8,0.0017462551360621196,-3.122919694479231e-5,1.989118907219179e-8,0.0017465634988662125,-3.105046157655002e-5,1.9730384470556232e-8,0.001746780545164631,-3.0829192817083005e-5,1.9534083265630877e-8,0.0017468971763283654,-3.06181089004315e-5,1.9348284579479396e-8,0.0017469304559974707,-3.0466979567041213e-5,1.921600927524104e-8,0.001746917542182514,-3.0408580265584186e-5,1.916519343229281e-8,0.001746903536584843,-3.0450937289348743e-5,1.9202135362128732e-8,0.0017469283478326418,-3.057824727716383e-5,1.931250208156185e-8,0.0017470175401144699,-3.075870969388561e-5,1.9468283092315117e-8,0.0017471793662891689,-3.095489208974001e-5,1.9636835355944387e-8,0.00174740696584924,-3.1132521919019314e-5,1.978845734405289e-8,0.0017476831047323403,-3.126577909856488e-5,1.9900875698021727e-8,0.0017479851225330183,-3.1339285687671686e-5,1.9960887050540934e-8,0.0017482888771933986,-3.134799753916344e-5,1.9964247391127438e-8,0.001748571500534339,-3.1296247023240655e-5,1.9914888607216414e-8,0.0017488134063673208,-3.1196725784627565e-5,1.9824099003596076e-8,0.0017490001909731922,-3.106955308858083e-5,1.970973106837139e-8,0.0017491248720657058,-3.0941022082626086e-5,1.9595042768266226e-8,0.0017491904664698418,-3.084128927975832e-5,1.9506546090950694e-8,0.0017492122725144203,-3.080019758367981e-5,1.9470218613974216e-8,0.0017492184473760612,-3.084086291599031e-5,1.950583763271849e-8,0.0017492470171063378,-3.097194995726486e-5,1.9620297100766168e-8,0.0017493381646387358,-3.1181363894115793e-5,1.980227981843363e-8,0.0017495228601829887,-3.143510381205071e-5,2.0021485851797534e-8,0.0017498116793050868,-3.168386290175472e-5,2.023458425088819e-8,0.0017501889553554505,-3.18764773563137e-5,2.039704390946832e-8,0.001750615655745262,-3.197543249573554e-5,2.0476649055390935e-8,0.0017510402683068693,-3.1968199999134966e-5,2.0463276536587624e-8,0.0017514133531797574,-3.187031880307763e-5,2.037138563020928e-8,0.0017517005273633118,-3.1719998107685436e-5,2.0235063634656074e-8,0.001751890219662361,-3.156694813316782e-5,2.009806183335921e-8,0.0017519948081852045,-3.1459214757831945e-5,2.0002203745109712e-8,0.0017520456413406555,-3.14316280501743e-5,1.99773642676767e-8,0.001752083843670919,-3.149863525213701e-5,2.0035412948970665e-8,0.0017521497040240116,-3.1652918673865666e-5,2.0169255510395947e-8,0.0017522736069611874,-3.186951297035694e-5,2.0356620338662876e-8,0.0017524707370152176,-3.211356229077129e-5,2.056690037038114e-8,0.0017527403103441905,-3.234896981308914e-5,2.076865466262888e-8,0.0017530684808992239,-3.254545176213017e-5,2.0935651692450514e-8,0.0017534331318351181,-3.2682714956734884e-5,2.1050408448247448e-8,0.0017538088119477358,-3.275180452227584e-5,2.110531752462392e-8,0.0017541707526388716,-3.275447431229004e-5,2.1102114748483773e-8,0.0017544976901405082,-3.270162706579011e-5,2.105056824283674e-8,0.0017547738024637697,-3.2611589026689284e-5,2.096699993899653e-8,0.0017549902985381242,-3.250844445279376e-5,2.0872790992964694e-8,0.001755147084288628,-3.242014951493518e-5,2.0792620166438958e-8,0.001755254570490484,-3.2375793594230804e-5,2.0751927960372814e-8,0.001755335063281145,-3.2401220502996406e-5,2.0772996896363735e-8,0.0017554223357314845,-3.251259859283147e-5,2.0869356621329078e-8,0.0017555573977173214,-3.2708863724273736e-5,2.1039332104000612e-8,0.0017557790984082053,-3.29660727723672e-5,2.126132814313656e-8,0.0017561108323753565,-3.3238262436040336e-5,2.1494763264115556e-8,0.0017565485849542516,-3.346811995275699e-5,2.1689479904005575e-8,0.0017570576145160576,-3.360552772869162e-5,2.1801953478252693e-8,0.001757581785070488,-3.362585143779291e-5,2.1811245999041253e-8,0.0017580620722044517,-3.353851148587489e-5,2.1726427797049774e-8,0.001758455202278241,-3.3382035778471196e-5,2.158208310470156e-8,0.0017587444079113072,-3.320959575010596e-5,2.1425399176948597e-8,0.0017589399770165945,-3.307263661221911e-5,2.130160656072588e-8,0.0017590722808459125,-3.3008502295315075e-5,2.1243072677899854e-8,0.001759181556547813,-3.3034286998855964e-5,2.1264051244620618e-8,0.0017593078653479616,-3.314644102862432e-5,2.1360602034657684e-8,0.0017594831921096522,-3.332452486865661e-5,2.1514143545573805e-8,0.0017597265437465275,-3.353738875474003e-5,2.1697021326259336e-8,0.001760042245970357,-3.3750244753001815e-5,2.1878713640531822e-8,0.001760421146334321,-3.393124357669487e-5,2.2031497920959415e-8,0.0017608439638752132,-3.405644801825657e-5,2.2134681640893213e-8,0.0017612857471203435,-3.411264048046515e-5,2.2176972713998292e-8,0.0017617204091223166,-3.409797973084421e-5,2.2157031793999206e-8,0.0017621245438929386,-3.402096746414191e-5,2.208259287114386e-8,0.0017624801775086999,-3.3898450706873454e-5,2.1968740632231774e-8,0.0017627765982876126,-3.3753300304850276e-5,2.183585863215288e-8,0.001763011621842634,-3.3612016549370004e-5,2.1707446371806972e-8,0.0017631925713161728,-3.350214912888116e-5,2.1607729651469524e-8,0.0017633370417948848,-3.344913871513708e-5,2.1558783250075647e-8,0.0017634730174059953,-3.347197967528787e-5,2.1576714714329268e-8,0.0017636371116576798,-3.357742597786236e-5,2.1666704084487572e-8,0.0017638691979690627,-3.3753723774377576e-5,2.181772916999189e-8,0.0017642023031790117,-3.396680513750332e-5,2.1999445627985694e-8,0.0017646491667109299,-3.4163476660183754e-5,2.2165086343053056e-8,0.0017651911849654452,-3.428501454789286e-5,2.226334653764835e-8,0.001765778160698935,-3.428858702670496e-5,2.2257091907866984e-8,0.0017663432093342334,-3.416606996623403e-5,2.213983656780172e-8,0.0017668269543614896,-3.3948415208319496e-5,2.193955489711035e-8,0.001767197842766506,-3.369259112538415e-5,2.17070724834961e-8,0.0017674586193811824,-3.34596154530708e-5,2.1496498412280247e-8,0.001767639060592299,-3.329574652596208e-5,2.1348468166328244e-8,0.0017677821871205088,-3.3223440312985864e-5,2.1282180173486558e-8,0.0017679311822968995,-3.324154570836546e-5,2.129578103953367e-8,0.001768120512436396,-3.333086353608994e-5,2.1371561635770116e-8,0.0017683715270797181,-3.346142626072527e-5,2.148260408851196e-8,0.0017686914318105862,-3.3599409128902524e-5,2.1598953117881766e-8,0.0017690744739801523,-3.371291615094851e-5,2.1692652330809286e-8,0.0017695045695388376,-3.3776430454713476e-5,2.1741529840179073e-8,0.0017699588242402324,-3.3773791444695706e-5,2.1731694812881347e-8,0.0017704114732510778,-3.369964876976124e-5,2.1658752122008647e-8,0.0017708378094016797,-3.355943690940463e-5,2.152778106353521e-8,0.0017712176390383754,-3.336799684118138e-5,2.1352151053456795e-8,0.0017715378651225137,-3.314720089247531e-5,2.1151437607701027e-8,0.0017717941126926234,-3.2923077927578334e-5,2.0948840418387312e-8,0.0017719915599731899,-3.272273093629134e-5,2.0768364307715262e-8,0.0017721450953806894,-3.257108279253322e-5,2.063183815712094e-8,0.001772278789586462,-3.248736044869667e-5,2.0555760321616602e-8,0.0017724243969323124,-3.2481099228891417e-5,2.0547838756955484e-8,0.0017726180377305497,-3.2547672204280884e-5,2.06032360891902e-8,0.001772893902096436,-3.26643881516983e-5,2.070137445010743e-8,0.0017732745145420026,-3.278970120097843e-5,2.0805422495871913e-8,0.0017737592672930375,-3.286910117515717e-5,2.0867510935645095e-8,0.0017743165104114895,-3.285007607212869e-5,2.0841794381781585e-8,0.0017748868641271837,-3.27030730663727e-5,2.0702786663879134e-8,0.0017754014530360297,-3.2437768348831866e-5,2.0459662686927267e-8,0.0017758080743716612,-3.2102608481630945e-5,2.015584789108212e-8,0.0017760903595036206,-3.17656634260758e-5,1.985200104905266e-8,0.0017762693117928238,-3.1488255206219554e-5,1.9602496536206447e-8,0.0017763894591366236,-3.13062590108772e-5,1.9438747273234566e-8,0.001776500414190258,-3.12255836885439e-5,1.9365283650061506e-8,0.0017766430268873303,-3.1228419406428315e-5,1.9365541425495753e-8,0.0017768429247380117,-3.128342719222774e-5,1.9411160162745227e-8,0.0017771097947912773,-3.1355028823638904e-5,1.9470365609482324e-8,0.0017774396800211817,-3.141000926638304e-5,1.9513809181670135e-8,0.0017778182926467716,-3.142162035464175e-5,1.951808140830944e-8,0.0017782244717445747,-3.137198226709649e-5,1.946769186203101e-8,0.0017786336024299082,-3.12533185341731e-5,1.9356066032986675e-8,0.0017790209705546684,-3.1068226775794e-5,1.9185763398043137e-8,0.0017793650121143564,-3.08290205222032e-5,1.8967926769402895e-8,0.001779650296646995,-3.055604937514018e-5,1.8720829744334336e-8,0.0017798698743530228,-3.0274995636721267e-5,1.846747256260845e-8,0.001780026632235612,-3.001344158238894e-5,1.8232467517967285e-8,0.0017801335374979842,-2.9797089846618077e-5,1.8038579085288705e-8,0.0017802127450977066,-2.964590951538579e-5,1.7903218620709243e-8,0.0017802935187865058,-2.9570467972433672e-5,1.783518762572123e-8,0.0017804088777299578,-2.9568714404354944e-5,1.7831942719272197e-8,0.0017805907080136712,-2.9623577448738986e-5,1.7877681205500904e-8,0.0017808630276179797,-2.97023326731302e-5,1.7943009994474517e-8,0.0017812337934054229,-2.97595557883807e-5,1.7987695659313328e-8,0.0017816872967592035,-2.9745687070046982e-5,1.7968220015004007e-8,0.0017821813976015835,-2.962172070135213e-5,1.7850629717166458e-8,0.0017826548299887984,-2.9376324177287026e-5,1.762553130680372e-8,0.0017830461959892749,-2.903634032102028e-5,1.731731488754778e-8,0.0017833176117902473,-2.866124927995671e-5,1.6979208783705445e-8,0.001783469533852475,-2.832122375637814e-5,1.6673724822837606e-8,0.0017835376035968266,-2.80706105762117e-5,1.6448993998207882e-8,0.0017835749164607615,-2.793168172891396e-5,1.6324306949224888e-8,0.0017836317390693452,-2.7894493168831586e-5,1.6290136262871556e-8,0.0017837425116183111,-2.7927737072698468e-5,1.6318029727125984e-8,0.0017839222251040216,-2.7991952248573566e-5,1.6372552649405453e-8,0.0017841690180765415,-2.804960543379875e-5,1.6420305148628225e-8,0.0017844690921453375,-2.8070762770376914e-5,1.6434881896134044e-8,0.001784801494145308,-2.803540319002629e-5,1.6398785045025665e-8,0.0017851419554334824,-2.7933929717305372e-5,1.6303760303012625e-8,0.0017854659718042635,-2.7766907604290468e-5,1.6150522430904983e-8,0.0017857515136427459,-2.7544366750350456e-5,1.5948164497142894e-8,0.0017859816002243757,-2.7284609584283965e-5,1.571315251966609e-8,0.0017861467536977667,-2.7012260273114013e-5,1.5467614316026404e-8,0.0017862470230057806,-2.6755286369400636e-5,1.5236648496569402e-8,0.0017862930134701384,-2.654104265296623e-5,1.504470406978934e-8,0.001786305424195102,-2.6391773125555355e-5,1.491146539228525e-8,0.0017863128449208082,-2.6320220335777346e-5,1.4847885035371189e-8,0.0017863478278571186,-2.632612309632168e-5,1.4853112441925018e-8,0.0017864415524204687,-2.639440009895842e-5,1.491303463720827e-8,0.0017866176433893105,-2.649564870787032e-5,1.500094022968379e-8,0.0017868858723667914,-2.6589505322540724e-5,1.5080702406757717e-8,0.0017872368982414784,-2.66314436018206e-5,1.5112903973863852e-8,0.0017876399981771522,-2.6583121415397484e-5,1.5063969741293373e-8,0.0017880463839678022,-2.6424855833963814e-5,1.4917086903880453e-8,0.0017884001103203367,-2.61662566626825e-5,1.4681479769128718e-8,0.0017886554421320897,-2.5848825556468653e-5,1.439459563665528e-8,0.0017887942451537537,-2.5535601758596886e-5,1.4112816495281188e-8,0.0017888338091817063,-2.5289736988679483e-5,1.3892330893168733e-8,0.0017888195185604239,-2.515213106178181e-5,1.3769205429052592e-8,0.0017888063464290775,-2.5129846263159923e-5,1.3749151498984439e-8,0.0017888398156686227,-2.5199537269306553e-5,1.3810764966794239e-8,0.0017889451574657782,-2.5320670226036306e-5,1.391749936516575e-8,0.0017891262814678304,-2.544988601042015e-5,1.4030567902762325e-8,0.0017893708634015488,-2.5550922719877188e-5,1.4117760285831568e-8,0.0017896570726811836,-2.5599109255723216e-5,1.4157333008626661e-8,0.0017899592671993573,-2.5582042811262578e-5,1.4138489270469296e-8,0.0017902519438446774,-2.5498478260559e-5,1.4060321791036643e-8,0.0017905123629933307,-2.535677868794753e-5,1.3930440496755607e-8,0.0017907225488373376,-2.51734072821892e-5,1.3763682625522863e-8,0.0017908711693659085,-2.4971322438834654e-5,1.3580725771725944e-8,0.0017909554371954345,-2.4777821665357153e-5,1.3406151734326352e-8,0.0017909827283962571,-2.462135499749847e-5,1.3265522508586063e-8,0.001790971202300491,-2.4527148765017287e-5,1.3181360162542386e-8,0.0017909485628708425,-2.4512064252896147e-5,1.316846906372442e-8,0.0017909483769799933,-2.457975629539259e-5,1.3229610662378395e-8,0.0017910040460442844,-2.4717652977466054e-5,1.3352913035006776e-8,0.001791141441592685,-2.4897216452611835e-5,1.3512291120867038e-8,0.0017913719494893788,-2.5078198784446382e-5,1.367144672572904e-8,0.0017916878464235458,-2.5216509648907783e-5,1.3791025050547342e-8,0.0017920615866127356,-2.5274345945545365e-5,1.3837668829362787e-8,0.0017924499408709217,-2.5230505604992228e-5,1.3793113821811035e-8,0.001792803043549295,-2.508822447015411e-5,1.3660997294053245e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json new file mode 100644 index 0000000..bf89351 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":16000,"numberOfSamples":1000,"samples":[0.0017930770944964171,-2.487756201187732e-5,1.3468791504217692e-8,0.0017932476264231187,-2.464987080068864e-5,1.3262714904077391e-8,0.0017933184724985877,-2.446409956071231e-5,1.3095425337680572e-8,0.0017933216314600794,-2.436869143477916e-5,1.3009865564682467e-8,0.0017933067138776958,-2.438639601001157e-5,1.3025800857085489e-8,0.0017933242278720884,-2.450889654783832e-5,1.3135191695059903e-8,0.0017934104016406212,-2.470298517826634e-5,1.330788790362845e-8,0.0017935796118112995,-2.4923857068963115e-5,1.35036193070344e-8,0.0017938254296263332,-2.512860398380717e-5,1.3684062401894767e-8,0.001794127049257825,-2.5285096932882215e-5,1.3820701756483629e-8,0.0017944568919538132,-2.537530987356056e-5,1.389769075082024e-8,0.0017947867111250417,-2.5394724503292413e-5,1.3911234845185292e-8,0.0017950914943699093,-2.5349982163249467e-5,1.3867468677974076e-8,0.0017953516485814604,-2.5256290869559507e-5,1.3780165902829643e-8,0.0017955543110713956,-2.513520274015715e-5,1.3668792904120013e-8,0.0017956944918898108,-2.501264398241291e-5,1.3556752559378335e-8,0.0017957763330320648,-2.4916631576514276e-5,1.3469287614057573e-8,0.0017958142078399008,-2.487403171878831e-5,1.343048298157746e-8,0.0017958328475770424,-2.4906014603702265e-5,1.3459107884232579e-8,0.001795865353512456,-2.5022541802827092e-5,1.3563657130380593e-8,0.001795948122041468,-2.521726303763574e-5,1.3737855679584164e-8,0.0017961127345561176,-2.546517299188524e-5,1.395871521848886e-8,0.0017963766324439365,-2.572537619201675e-5,1.4189187885469435e-8,0.0017967359302593923,-2.5949711291697144e-5,1.4386024761031048e-8,0.0017971637506210216,-2.6095329969824996e-5,1.451109103127541e-8,0.0017976155937020869,-2.6137143168968956e-5,1.4542469045381444e-8,0.0017980404371389018,-2.607573723966647e-5,1.4481422712615806e-8,0.001798394095120732,-2.5938065908348892e-5,1.4352832525648934e-8,0.0017986508156540284,-2.5770774714917362e-5,1.4199014670934582e-8,0.0017988099091846071,-2.5628118914854457e-5,1.4068743101640252e-8,0.0017988956039585806,-2.555773604555096e-5,1.4004458068040699e-8,0.0017989500158965364,-2.558822796060149e-5,1.4031230788508505e-8,0.0017990211621026053,-2.5722340085414784e-5,1.415084222610123e-8,0.0017991498357205768,-2.593791853046823e-5,1.4342850551324464e-8,0.0017993597382745207,-2.6195968610161597e-5,1.4571956673982097e-8,0.0017996538157950808,-2.645239065855816e-5,1.4798559267271849e-8,0.0018000169294873425,-2.666894130169837e-5,1.498852497549383e-8,0.0018004224996779246,-2.6820193009237008e-5,1.5119328433877708e-8,0.0018008399579285909,-2.6895709367472842e-5,1.5181911626012463e-8,0.0018012407279650508,-2.6898643187987404e-5,1.5179375808053418e-8,0.0018016019580566775,-2.6842624017871885e-5,1.512418529733506e-8,0.0018019083507358257,-2.6748422125539742e-5,1.503519386765796e-8,0.0018021529000758112,-2.664111066735776e-5,1.4935106313335826e-8,0.0018023373010458653,-2.654770620791294e-5,1.4848328300519829e-8,0.0018024724205052492,-2.6494772143160663e-5,1.4798742963175621e-8,0.0018025786668415908,-2.6505317999914305e-5,1.4806850211476605e-8,0.0018026854955645365,-2.659451656531552e-5,1.4885891179718516e-8,0.0018028287921071594,-2.6764406036804033e-5,1.5037147763755564e-8,0.0018030448604636129,-2.6999007434058543e-5,1.5245693907824705e-8,0.0018033608554715635,-2.726276700041339e-5,1.5479157196478573e-8,0.0018037839756043577,-2.750560873314212e-5,1.5692371417557645e-8,0.0018042943907072807,-2.767567790489397e-5,1.583886014992919e-8,0.0018048471164087917,-2.7736268154231167e-5,1.5886025345858665e-8,0.0018053841995643509,-2.7679480289528892e-5,1.582737530167465e-8,0.0018058526507647669,-2.752969711011927e-5,1.5685558185452904e-8,0.001806220217685462,-2.73353380759272e-5,1.550478294473961e-8,0.0018064829196074033,-2.715336860705409e-5,1.533667607943918e-8,0.001806663117932587,-2.7033305913710596e-5,1.5225741546222746e-8,0.001806800801895628,-2.7005730814722615e-5,1.5199028506319084e-8,0.0018069420013151019,-2.7077300335566203e-5,1.5261811538653193e-8,0.0018071276684187964,-2.7232000211422743e-5,1.5398964117004876e-8,0.0018073853085648632,-2.7437165696606414e-5,1.5580585890886757e-8,0.0018077246572371043,-2.7652248535832284e-5,1.576998693661435e-8,0.0018081377800550024,-2.7838089562507862e-5,1.5932006675260243e-8,0.0018086029626342595,-2.7964541054522235e-5,1.603977518121356e-8,0.0018090908374324907,-2.8014926126988497e-5,1.607861859878816e-8,0.00180957084697334,-2.7986978508900445e-5,1.6046829753568754e-8,0.0018100165314672806,-2.7890983536707856e-5,1.5953965389800106e-8,0.0018104089137041853,-2.774636589803873e-5,1.5817776136232783e-8,0.0018107380434183873,-2.7577939639375955e-5,1.5660833269492737e-8,0.0018110032945058872,-2.7412588632335316e-5,1.5507519669488106e-8,0.0018112130984671998,-2.727650820984009e-5,1.5381492498527788e-8,0.0018113845185778008,-2.719266881496396e-5,1.5303331370154355e-8,0.0018115426463610783,-2.7177984586301253e-5,1.5287947407869493e-8,0.0018117192686648675,-2.7239724617485946e-5,1.5341380468993828e-8,0.001811949680932402,-2.7371212382235838e-5,1.545703888127489e-8,0.0018122663836599232,-2.754807176709037e-5,1.561247872864076e-8,0.0018126893601793177,-2.772785807579092e-5,1.57692019263019e-8,0.001813215168157243,-2.7856683016959833e-5,1.5878661656300398e-8,0.001813810503341971,-2.788443523714781e-5,1.589593222254393e-8,0.0018144169960900853,-2.7784424994027194e-5,1.5797369795099836e-8,0.0018149690546354657,-2.7567238609616395e-5,1.5593102180247856e-8,0.0018154173615913274,-2.7279217321055754e-5,1.532562475157829e-8,0.001815745477353155,-2.698524284095293e-5,1.5054105867581623e-8,0.001815971625884253,-2.674564379645672e-5,1.4833294082824518e-8,0.0018161376350310534,-2.6598869981665784e-5,1.4697715161200344e-8,0.0018162930699050063,-2.6555272801256695e-5,1.46561098570472e-8,0.0018164816791041126,-2.6600309925083196e-5,1.4694563048089877e-8,0.001816733162707175,-2.6702680190249542e-5,1.4784125685246063e-8,0.0018170600913158257,-2.682355433898887e-5,1.4889335877885533e-8,0.0018174585911996668,-2.6924764974141972e-5,1.4975656178105195e-8,0.0018179114635388195,-2.697514492077015e-5,1.5015123550887387e-8,0.0018183927840198378,-2.69547379106428e-5,1.499003182489609e-8,0.0018188731580403156,-2.6856711418009936e-5,1.4894556739454665e-8,0.001819324793629755,-2.6687029559253713e-5,1.473440683021408e-8,0.0018197256785068433,-2.6462277654925132e-5,1.4524849413287513e-8,0.001820062373922574,-2.6206258898886165e-5,1.428764312060864e-8,0.001820331254382838,-2.5946127881015275e-5,1.4047536963377575e-8,0.001820538445168254,-2.5708755861324498e-5,1.3828946837314153e-8,0.0018206989383891886,-2.5517624437804906e-5,1.365308557110985e-8,0.0018208352337955717,-2.5390152599451144e-5,1.3535489407026761e-8,0.0018209755912363625,-2.5335207243642732e-5,1.34837573147026e-8,0.001821151632775928,-2.5350517985874814e-5,1.3495281869197622e-8,0.0018213945362785741,-2.5420047270152325e-5,1.3555011738893574e-8,0.0018217289276931587,-2.551235675360919e-5,1.363413439824075e-8,0.001822164406689718,-2.5582239942904856e-5,1.3691653129699898e-8,0.001822686655285152,-2.557849948022469e-5,1.3681411343723724e-8,0.0018232531039378613,-2.5459295222371094e-5,1.3565889406493894e-8,0.0018237998026180275,-2.5211254782313133e-5,1.3333435451442727e-8,0.0018242618025331551,-2.48617013791813e-5,1.300934477782622e-8,0.0018245988973076108,-2.4473013353101097e-5,1.2650735273151976e-8,0.0018248114805428112,-2.4119027032174727e-5,1.2325005783849212e-8,0.0018249369229238492,-2.3856916289854328e-5,1.2084104532181132e-8,0.0018250308362240503,-2.371030618670482e-5,1.1949100841989596e-8,0.001825146047330891,-2.366910915234589e-5,1.1910159201163204e-8,0.0018253190675345766,-2.3700474694523012e-5,1.1936747643950821e-8,0.0018255659145471929,-2.3762271034004848e-5,1.1990121606287427e-8,0.0018258842445968248,-2.3813805840709907e-5,1.2033166516185259e-8,0.001826258169929863,-2.382242826521537e-5,1.2036355717542334e-8,0.0018266634773100754,-2.3766769983762126e-5,1.1980573637170289e-8,0.001827072388230482,-2.363782080690576e-5,1.1857967699394822e-8,0.0018274577516185762,-2.343858881848419e-5,1.1671564450583e-8,0.0018277966526101797,-2.318264021823313e-5,1.1433927158541618e-8,0.0018280733241575382,-2.2891668446499556e-5,1.1164967072672481e-8,0.0018282811577905753,-2.259224023359341e-5,1.0889004337993399e-8,0.001828423551827078,-2.231201801919025e-5,1.0631321018346868e-8,0.0018285135003267157,-2.207596922814408e-5,1.0414665395833809e-8,0.0018285721071275558,-2.1903000912757984e-5,1.0256127104231967e-8,0.0018286262706814032,-2.1803209435120533e-5,1.0164594038831645e-8,0.001828705702435555,-2.177583438325039e-5,1.0138909579633824e-8,0.001828839337656277,-2.1807956588344662e-5,1.0166784524005633e-8,0.0018290509329571627,-2.1874064192536067e-5,1.0224554437432966e-8,0.0018293535538177238,-2.1937215282132975e-5,1.027838557907086e-8,0.0018297433561300666,-2.1953289747187514e-5,1.0288214837085777e-8,0.0018301945153309169,-2.1879869760203124e-5,1.0215787794044302e-8,0.001830658946308421,-2.168992779500395e-5,1.0036992338479185e-8,0.0018310753618979378,-2.138679258668782e-5,9.755367998113473e-9,0.0018313889838965569,-2.1011704357252705e-5,9.40893730399691e-9,0.0018315746329431721,-2.063467135717398e-5,9.061841978804914e-9,0.0018316490783180249,-2.0328796754628263e-5,8.780851241439044e-9,0.0018316632653398112,-2.0141677331726018e-5,8.60917634137112e-9,0.001831679395233614,-2.0080681978185537e-5,8.55305072202464e-9,0.0018317476612021335,-2.0117816834583795e-5,8.586332987307337e-9,0.0018318940208144653,-2.0206428881992914e-5,8.665969743081962e-9,0.0018321201082134187,-2.0298263194615822e-5,8.747708166164193e-9,0.001832409908402203,-2.0354458317239478e-5,8.796142458866711e-9,0.00183273774398109,-2.035003732644327e-5,8.788718700893353e-9,0.001833074770107819,-2.027416826766039e-5,8.715846695855356e-9,0.001833393452426999,-2.0128529716534936e-5,8.579316424344743e-9,0.0018336705866361742,-1.992511730302927e-5,8.390268759309309e-9,0.0018338894912187423,-1.968387735533606e-5,8.167058601271752e-9,0.0018340416791292305,-1.943010095958344e-5,7.932910852662894e-9,0.0018341280134618974,-1.9191384559990707e-5,7.713154507289564e-9,0.0018341590816821458,-1.8994066898046752e-5,7.53193522572574e-9,0.0018341544149850127,-1.885940649167221e-5,7.40865932392435e-9,0.0018341403815578727,-1.8800038802715472e-5,7.3546966523347715e-9,0.0018341468535115438,-1.8817250628981883e-5,7.370872897137305e-9,0.0018342029234141627,-1.889956862277312e-5,7.446231414582977e-9,0.0018343321227258867,-1.9023083174690816e-5,7.558447698209529e-9,0.0018345476553118807,-1.9153707945490168e-5,7.676042116963366e-9,0.0018348481083950683,-1.9251549921866032e-5,7.762491329140837e-9,0.0018352144196331546,-1.9277769509678416e-5,7.782530133022137e-9,0.0018356096596253435,-1.920398976117508e-5,7.710681424220857e-9,0.0018359837763515755,-1.9022957466042443e-5,7.540865396769042e-9,0.0018362849741516284,-1.8756908829736255e-5,7.293910761478627e-9,0.0018364766833233455,-1.8457870012827724e-5,7.017737181329629e-9,0.0018365538571077135,-1.8194914639068882e-5,6.775647214996834e-9,0.001836548563460727,-1.803024372589666e-5,6.624410847690285e-9,0.0018365187675594202,-1.7995409567851337e-5,6.592525088216024e-9,0.0018365252877235454,-1.8081331449302935e-5,6.671177914624835e-9,0.0018366101542084223,-1.8246672589318575e-5,6.822077045534804e-9,0.0018367869375824912,-1.8436994200718304e-5,6.995122222991016e-9,0.001837043888830328,-1.8602938875977135e-5,7.145101322978344e-9,0.0018373537387537482,-1.8710583772040503e-5,7.241122599512904e-9,0.0018376837337121634,-1.8743874840279134e-5,7.2687428712580284e-9,0.0018380027530075403,-1.8702372696090056e-5,7.227808403795434e-9,0.0018382852635966235,-1.8597450955179613e-5,7.128926096284541e-9,0.001838513176276471,-1.8448670412689796e-5,6.990149973877557e-9,0.0018386767249291653,-1.8280754164638692e-5,6.8342449477846595e-9,0.0018387750038904136,-1.812090639012062e-5,6.686252226411574e-9,0.0018388162973281307,-1.799601728606697e-5,6.570911706461216e-9,0.0018388179260978472,-1.7929389648419776e-5,6.509607695224068e-9,0.0018388050594228275,-1.7937016075237906e-5,6.516893378261047e-9,0.0018388079846011016,-1.8023966004633595e-5,6.597145459559734e-9,0.001838857713922728,-1.818180313357647e-5,6.742223335637884e-9,0.0018389803552352245,-1.838806035919854e-5,6.9310780933096055e-9,0.0018391912530982262,-1.860858891245793e-5,7.132034188312767e-9,0.0018394902971468079,-1.88029481324306e-5,7.3078518212857724e-9,0.0018398597310770378,-1.8932177661136858e-5,7.422918615431776e-9,0.0018402654168871984,-1.896772954162206e-5,7.451423914551764e-9,0.0018406621235211068,-1.8899934385024923e-5,7.385028293072869e-9,0.0018410028729857332,-1.8743806537061265e-5,7.238049462551088e-9,0.0018412512510457238,-1.8539475868505472e-5,7.047719368366382e-9,0.0018413937282192889,-1.834483799071887e-5,6.86733900839635e-9,0.0018414470718991932,-1.8220140618210308e-5,6.752093172557913e-9,0.0018414557581306575,-1.8208514775956216e-5,6.741217444212319e-9,0.0018414780209857879,-1.8320709364073575e-5,6.844095149750602e-9,0.001841565803992494,-1.8532077021471085e-5,7.037638298125493e-9,0.0018417482230087799,-1.8793447944416692e-5,7.276395121919292e-9,0.001842025845932932,-1.9049480082961622e-5,7.509453930519011e-9,0.001842376034057044,-1.925507263145096e-5,7.69549565376883e-9,0.0018427639401787223,-1.9383990375315344e-5,7.810647629678605e-9,0.0018431531413094465,-1.942958955901095e-5,7.849070713791684e-9,0.0018435127392187048,-1.940088549418417e-5,7.8192866216250315E-09,0.001843820730492911,-1.9317320377072763e-5,7.739348166296656e-9,0.0018440648885501498,-1.9204160908646343e-5,7.632620118984367e-9,0.001844242531542363,-1.9089035068363377e-5,7.524612793811735e-9,0.0018443600647661403,-1.8999259868333292e-5,7.440521812341918e-9,0.001844432549312981,-1.8959307662865297e-5,7.402863667254894e-9,0.0018444829953387927,-1.8987874349045107e-5,7.428729689176291e-9,0.0018445407209490732,-1.9094430440071465e-5,7.52658268876082e-9,0.0018446380463958871,-1.9275761849198014e-5,7.693093256534828e-9,0.001844804951317121,-1.9513700180089063e-5,7.911127592194227e-9,0.0018450622049142106,-1.9775670897407012e-5,8.15036239379623e-9,0.0018454146537959305,-2.0019361155694627e-5,8.37168352380671e-9,0.0018458471645658634,-2.020149491512519e-5,8.53532123115057e-9,0.001846325472916595,-2.0288852030465627e-5,8.610991677718667e-9,0.001846802738334875,-2.0268255874207588e-5,8.587035433849896e-9,0.0018472305526570348,-2.0152106866842266e-5,8.475412368243551e-9,0.0018475714841345342,-1.99772538420524e-5,8.31053358635742e-9,0.0018478096100095864,-1.9796940495792812e-5,8.141712154172403e-9,0.0018479558587613187,-1.9667497884298463e-5,8.020816057287474e-9,0.0018480460497650023,-1.9633092096664974e-5,7.988216118779569e-9,0.0018481313475885142,-1.97130435184807e-5,8.061204673026506e-9,0.0018482635125553158,-1.989628715353263e-5,8.229056332405201e-9,0.0018484798977238869,-2.014547254945726e-5,8.45695909902495e-9,0.0018487937859131421,-2.0409270039150275e-5,8.697434490355547e-9,0.0018491933464550954,-2.0637777460108637e-5,8.904531720257321e-9,0.001849648388562267,-2.0794981895125802e-5,9.04525543618406e-9,0.0018501208603383453,-2.0864590650255843e-5,9.104868950596546e-9,0.0018505745805460858,-2.0849287684095834e-5,9.086145203825255e-9,0.0018509815951685388,-2.0766006244656177e-5,9.004964655845875e-9,0.0018513249009249032,-2.0640121265863943e-5,8.88493947825769e-9,0.0018515986248674762,-2.0500399014916906e-5,8.75275158592604e-9,0.0018518069924697927,-2.037529947986055e-5,8.634737803338043e-9,0.0018519630574627775,-2.029034519449881e-5,8.55444480376467e-9,0.0018520875544509319,-2.0265862670398454e-5,8.530515515536571e-9,0.0018522076118006106,-2.0314479503742223e-5,8.574357895458459e-9,0.001852354640478269,-2.043817792207266e-5,8.68743961998716e-9,0.0018525605725263623,-2.0625343158510295e-5,8.85862825193293e-9,0.0018528519045839407,-2.0849110173348045e-5,9.06276525797922e-9,0.0018532420360760945,-2.1069073571299936e-5,9.262339779435322e-9,0.001853724130935122,-2.123818424609054e-5,9.413907129041965e-9,0.0018542681745039775,-2.13146965067963e-5,9.479118156772436e-9,0.001854825500677946,-2.1275855803305648e-5,9.437327265942164e-9,0.0018553411001434338,-2.1127603421251835e-5,9.294511094167757e-9,0.001855769808091963,-2.0905197786356253e-5,9.083769325899609e-9,0.001856089934500493,-2.066366542445483e-5,8.856377940750694e-9,0.001856309055157489,-2.0461827016597087e-5,8.66688007773098e-9,0.0018564605291198604,-2.0346009610590452e-5,8.557941716365146e-9,0.0018565929794966702,-2.0338609963516525e-5,8.549815123998282e-9,0.0018567566935258077,-2.0434095465034442e-5,8.636794189047838e-9,0.0018569909246059376,-2.0602544164462002e-5,8.790679141975657e-9,0.001857315247217037,-2.079894845221756e-5,8.96952007306406e-9,0.0018577267622189627,-2.097526582003082e-5,9.12880609280628e-9,0.001858203223977554,-2.109175679528336e-5,9.231914666619509e-9,0.0018587104540100233,-2.1124682017155018e-5,9.257156442445109e-9,0.0018592113115679834,-2.106890188932159e-5,9.200104828967708e-9,0.0018596735056705283,-2.0935816127821806e-5,9.07163153057935e-9,0.0018600745996205108,-2.0748452915729757e-5,8.89332379757743e-9,0.0018604039664238258,-2.0535775690622106e-5,8.692194187757801e-9,0.0018606624467996109,-2.032768021272182e-5,8.496037214902576e-9,0.0018608607937328295,-2.0151290741381685e-5,8.329989644194028e-9,0.0018610177895546044,-2.0028404875289557e-5,8.214148845006132e-9,0.0018611584243115355,-1.9973516875703052e-5,8.161728802068476e-9,0.0018613119834204608,-1.999186368250376e-5,8.17725592983337e-9,0.0018615094730483387,-2.0077264157555704e-5,8.254611200906061e-9,0.0018617795921467622,-2.021010824142319e-5,8.375250055651793e-9,0.0018621426777235635,-2.0356759570897997e-5,8.507743574528015e-9,0.0018626030974959807,-2.0472527218197918e-5,8.610594760757943e-9,0.001863142529370494,-2.0510266452106173e-5,8.640213095127023e-9,0.001863718542838287,-2.0434462278556232e-5,8.563932655985352e-9,0.0018642726717816077,-2.0236362154722935e-5,8.374014217097276e-9,0.0018647478436570396,-1.9942109211313427e-5,8.095175761587323e-9,0.001865108368948935,-1.960728289796133e-5,7.779474788722417e-9,0.0018653524017467537,-1.9298711898535704e-5,7.4892916930745e-9,0.0018655107551995035,-1.9072315354648044e-5,7.27659510756275e-9,0.0018656340820196373,-1.895724351204022e-5,7.168151304633016e-9,0.0018657758320747826,-1.895135064135561e-5,7.161416176012306e-9,0.0018659780113648356,-1.9026593337249196e-5,7.229749985625541e-9,0.0018662631207856332,-1.9139791481250695e-5,7.332602529333776e-9,0.0018666323647777408,-1.9244376015289706e-5,7.426524029334083e-9,0.0018670686302071045,-1.93003096381889e-5,7.474374412439072e-9,0.0018675424105708905,-1.9280847880737214e-5,7.451532270409492e-9,0.0018680189994260549,-1.9175704489265866e-5,7.348747503653877e-9,0.0018684654564785955,-1.8990736169104185e-5,7.171778438188237e-9,0.0018688561260398076,-1.8744836865035615e-5,6.938463114669843e-9,0.0018691760026911882,-1.8465188498455326e-5,6.674284503730649e-9,0.001869421833270251,-1.818207784859466e-5,6.407542925266269e-9,0.0018696013388690184,-1.7924257543533537e-5,6.165035437391302e-9,0.0018697312745747144,-1.77154221714517e-5,5.968767927016784e-9,0.0018698350512996898,-1.7571817919185243e-5,5.8337191006715384e-9,0.0018699402886244905,-1.750060390009367e-5,5.76630978226681e-9,0.0018700762544792589,-1.7498573862310598e-5,5.763229760950721e-9,0.0018702708423503566,-1.7551071627329354e-5,5.8104800416812336e-9,0.0018705465025051088,-1.763137263486119e-5,5.882878383752786e-9,0.0018709146903029294,-1.770161615547732e-5,5.945007935726127e-9,0.0018713693790612124,-1.771717503436893e-5,5.955326079857078e-9,0.001871882005628167,-1.7636224585071255e-5,5.875056690709975e-9,0.0018724021730790383,-1.7434179833481032e-5,5.681589270232072e-9,0.0018728684333721528,-1.7118167658035483e-5,5.3819353393236815e-9,0.0018732287172204356,-1.6732355540166632e-5,5.017686966724454e-9,0.0018734616898216,-1.6346704189132433e-5,4.654472798669768e-9,0.0018735862278335242,-1.6031827206181716e-5,4.358367558462995e-9,0.0018736526901350647,-1.583326478782647e-5,4.1717537065880975e-9,0.0018737219046122688,-1.5758804508346698e-5,4.10148922345258e-9,0.0018738443004110933,-1.578241850439683e-5,4.12273758898688e-9,0.0018740479774201498,-1.5858384906640113e-5,4.192354118637595e-9,0.0018743368377812267,-1.5936813363410486e-5,4.2635170100055776e-9,0.0018746952507608576,-1.5975245333576563e-5,4.296582563572818e-9,0.001875095253598817,-1.594505681652756e-5,4.265000879239349e-9,0.0018755037392833745,-1.5833619336192383e-5,4.157239354603041e-9,0.0018758885761289046,-1.5643635440476038e-5,3.976084601740173e-9,0.001876223379869671,-1.539063040568846e-5,3.736258860742264e-9,0.0018764908158095375,-1.5099215718405392e-5,3.460921341786339e-9,0.0018766843555797306,-1.4798700313825205e-5,3.1775739251165955e-9,0.001876808514204054,-1.4518593640800304e-5,2.913862771528727e-9,0.001876877684600156,-1.428449594527703e-5,2.6937304046643276e-9,0.0018769138794313335,-1.4114849713635936e-5,2.534362112040424e-9,0.001876943877891384,-1.4018784813808756e-5,2.444153315210054e-9,0.0018769961556297737,-1.3994930354196748e-5,2.4215928014478305e-9,0.0018770976892354386,-1.4030988542626093e-5,2.454884423634573e-9,0.0018772705481379275,-1.4104015382463982e-5,2.5222631987773908e-9,0.001877528051302119,-1.4181603792678899e-5,2.5931789806121115e-9,0.0018778703569376982,-1.4224713941675174e-5,2.6310160704288327e-9,0.0018782801543122864,-1.4193451439422243e-5,2.598529820729149e-9,0.0018787205590664604,-1.405678212300852e-5,2.4669139600598395e-9,0.0018791386692319275,-1.3805285464980217e-5,2.2276810492311913e-9,0.0018794780123360833,-1.3462303276611882e-5,1.9030504386180313e-9,0.0018796988460152687,-1.3085081939944344e-5,1.5469771882351445e-9,0.001879797376121251,-1.2749246711917046e-5,1.2305366805810725e-9,0.001879810814909188,-1.2520431987685998e-5,1.0152379061173355e-9,0.0018798025069450173,-1.2428480565797385e-5,9.28792039154265e-10,0.0018798356637794984,-1.2459405930458762e-5,9.576569245815327e-10,0.0018799514652937973,-1.2567147881760806e-5,1.058227207885944e-9,0.0018801611228964044,-1.2694459694026742e-5,1.1765668337490139e-9,0.0018804504286041776,-1.2790844470236134e-5,1.2652815802583089e-9,0.0018807898296935043,-1.2822211239622132e-5,1.2925348480468322e-9,0.001881144296639176,-1.2773137375766395e-5,1.244082520275377e-9,0.001881480541304962,-1.2644829708590756e-5,1.1212779543347608e-9,0.0018817714830373492,-1.2451442593087324e-5,9.37573033027889e-10,0.0018819987877392661,-1.2216113471832141e-5,7.147943106851535e-10,0.0018821541835679256,-1.1967040551517974e-5,4.79481554800589e-10,0.001882239823342938,-1.1733614321682521e-5,2.592733145950963e-10,0.0018822677333682823,-1.1542659347071796e-5,7.937878641490489e-11,0.001882258290813125,-1.1414929386642006e-5,-4.073055482831923e-11,0.00188223769665013,-1.1362192719985607e-5,-9.008293919875422e-11,0.001882234648515446,-1.1385337979164145e-5,-6.800108198389007e-11,0.0018822765976668182,-1.147373068275585e-5,1.529829570741141e-11,0.0018823859220090569,-1.1605863972995146e-5,1.3934936610352848e-10,0.0018825762769299201,-1.1751333204930212e-5,2.7535196640362164e-10,0.001882849356696919,-1.1874174668779581e-5,3.8937810798312383e-10,0.0018831923326353601,-1.1937760844475924e-5,4.470257514000792e-10,0.0018835766745060477,-1.1911660763090492e-5,4.198775427362523e-10,0.0018839599006157666,-1.1780441166968134e-5,2.937343558620432e-10,0.0018842923200876947,-1.1552816367157377e-5,7.714292268036392e-11,0.0018845300065070212,-1.1267101431234662e-5,-1.935563353070176e-10,0.001884651848842402,-1.0986979616266467e-5,-4.582805070815646e-10,0.0018846729512961321,-1.0783668473551395e-5,-6.500369715974631e-10,0.001884644026311698,-1.0709107993313308e-5,-7.201687612284614e-10,0.0018846329849430254,-1.0774324376780514e-5,-6.586566194780138e-10,0.0018846977991100334,-1.0946622650667459e-5,-4.966346506891892e-10,0.0018848664449174443,-1.1166459365350037e-5,-2.9038739613313543e-10,0.0018851332005309256,-1.1371807843700045e-5,-9.836030862044166e-11,0.00188546833284025,-1.1516483567944784e-5,3.6072174092010136e-11,0.0018858320534413794,-1.1577196587717038e-5,9.118298144119174e-11,0.0018861858170151932,-1.1551897946543376e-5,6.526251494340663e-11,0.0018864988368209698,-1.1454250824736898e-5,-2.8641386320276168e-11,0.0018867506997908348,-1.130771157982184e-5,-1.683171289939276e-10,0.0018869317981828468,-1.114067253953726e-5,-3.269535468848281e-10,0.00188704288267068,-1.0982683580718171e-5,-4.766790893169354e-10,0.00188709425157458,-1.0861262431198378e-5,-5.915582605683498e-10,0.0018871045582005074,-1.0798915164720963e-5,-6.504092600231872e-10,0.0018870989904794264,-1.0810255077489202e-5,-6.395398827368157e-10,0.0018871065171513206,-1.089946266139451e-5,-5.551558313967678e-10,0.0018871561148395357,-1.1058676341069262e-5,-4.048719775294948e-10,0.0018872723151573511,-1.1267948529405112e-5,-2.077232698081918e-10,0.0018874707273317042,-1.1497174238386989e-5,7.702962172308863e-12,0.0018877543345839755,-1.1710094620244999e-5,2.0709679356946207e-10,0.0018881113731507087,-1.1870079468074387e-5,3.5592247332806187e-10,0.0018885154354453212,-1.1947025394181564e-5,4.2594198011051527e-10,0.0018889282709940963,-1.1924554434572256e-5,4.0198452420754266e-10,0.0018893057509901104,-1.180642796887354e-5,2.8793937793174093e-10,0.0018896072155190882,-1.1620319815144137e-5,1.102325230061882e-10,0.0018898073174633363,-1.141620503858083e-5,-8.378045830706647e-11,0.0018899072882816023,-1.1256680872880053e-5,-2.350144500265779e-10,0.00188994004525897,-1.1199004466727915e-5,-2.8962303888349816e-10,0.0018899634124805416,-1.1274091765243815e-5,-2.187662588737686e-10,0.0018900409279768637,-1.1472911999612212e-5,-3.133758064503063e-11,0.0018902183761997377,-1.1749297526970216e-5,2.2880621691449785e-10,0.0018905085190595347,-1.2038537620544541e-5,5.004579398597872e-10,0.0018908911977333046,-1.2281010673800587e-5,7.273646082903298e-10,0.0018913257026649535,-1.2438746635557551e-5,8.738262880584713e-10,0.001891766418942364,-1.2500025159169855e-5,9.289921702418269e-10,0.0018921745217345054,-1.2474898759061678e-5,9.025856295473614e-10,0.0018925235949496604,-1.2387224374957897e-5,8.173373978207359e-10,0.0018928006012498605,-1.2267242724669224e-5,7.019521780489794e-10,0.001893004532648849,-1.2146219309942353e-5,5.860420989860535e-10,0.0018931444568213974,-1.2052958305120446e-5,4.968374482519974e-10,0.0018932376922635935,-1.201136506885249e-5,4.5688395279176046e-10,0.0018933080932005942,-1.203830971069964e-5,4.820179060546816e-10,0.0018933840198379344,-1.2141431704543413e-5,5.792878687063079e-10,0.0018934954432214392,-1.2317048491958935e-5,7.449904944807481e-10,0.0018936698433884116,-1.2548874791752978e-5,9.63493451044306e-10,0.0018939271289290503,-1.2808571057900438e-5,1.207801973263226e-9,0.0018942745270844783,-1.3059009801183272e-5,1.4426931836520661e-9,0.0018947029628015445,-1.3260512884313262e-5,1.6306445395104082e-9,0.0018951865409454112,-1.3379240786205856e-5,1.739776196090901e-9,0.0018956861193035659,-1.339582085200682e-5,1.7520006276159735e-9,0.001896156784362993,-1.3311821218936873e-5,1.6691149414387627e-9,0.0018965578833635218,-1.315201628144059e-5,1.5148888736049156e-9,0.0018968634955145083,-1.2961201862073039e-5,1.3319718714925833e-9,0.0018970707895216053,-1.27953186054354e-5,1.1734090967998433e-9,0.0018972035254706415,-1.270792499395131e-5,1.0897877058615488e-9,0.0018973082905004745,-1.2734836504746565e-5,1.1147159041982071e-9,0.0018974426469162598,-1.2881765897702211e-5,1.2532161191392723e-9,0.0018976577334179135,-1.3120638566367633e-5,1.4783604413576136e-9,0.0018979817061840188,-1.3397830754750496e-5,1.7391592222003208e-9,0.001898411458923872,-1.3651830597880485e-5,1.9773042111285594e-9,0.0018989162166529016,-1.3832467412215963e-5,2.1453543532283e-9,0.0018994501504002229,-1.3913394698958246e-5,2.218528300226893e-9,0.0018999670934915821,-1.3894285229865015e-5,2.1967560935101533e-9,0.0019004313205916007,-1.3794987368719163e-5,2.0991062793393773e-9,0.0019008222473536457,-1.3646563923406225e-5,1.9552477096692173e-9,0.0019011342862434643,-1.3483210869567092e-5,1.7977502645593472e-9,0.0019013742670453792,-1.3336710126712298e-5,1.656805182705815e-9,0.0019015583445810035,-1.3233251710861967e-5,1.557210441490532e-9,0.0019017093215130678,-1.3191683234416556e-5,1.516718948288368e-9,0.0019018544551819409,-1.322222486221346e-5,1.5448335845441187e-9,0.0019020232614363063,-1.332508798252e-5,1.641518474045382e-9,0.0019022446122891282,-1.3489036976123344e-5,1.7958687511443292e-9,0.0019025425844261994,-1.369058867045455e-5,1.985394636394811e-9,0.0019029310998461496,-1.3895103526272778e-5,2.177098013812628e-9,0.0019034084130146504,-1.4061158291373949e-5,2.3316432829741173e-9,0.0019039536403952983,-1.4148798826174367e-5,2.411188360481643e-9,0.00190452798036301,-1.4130390523376207e-5,2.3896713112052716e-9,0.0019050821403015848,-1.4000599135125858e-5,2.262277159589695e-9,0.0019055688083909521,-1.3781106731241096e-5,2.0499028297317794e-9,0.0019059562148011579,-1.3517137805515713e-5,1.795813482384683e-9,0.0019062378216281627,-1.3266226807941069e-5,1.55488479026225e-9,0.0019064346707243743,-1.3082876840158903e-5,1.3789321851604236e-9,0.0019065897975290977,-1.300402884385789e-5,1.3028645792247607e-9,0.0019067566525288243,-1.3039478647258866e-5,1.335631681489911e-9,0.0019069848668208623,-1.3169664466781716e-5,1.458241594737562e-9,0.0019073072088376596,-1.3351363244590194e-5,1.6292950121476715e-9,0.0019077314104704636,-1.35297729754093e-5,1.7965331398129217e-9,0.0019082393455308658,-1.3653389545506359e-5,1.910981408664566e-9,0.0019087936495511212,-1.368692249063571e-5,1.9391998920108105e-9,0.0019093490888763,-1.36182247050182e-5,1.8698433679372743e-9,0.0019098643504093444,-1.3457815665676977e-5,1.7131785903247102e-9,0.0019103104535418381,-1.3232664882104302e-5,1.49513174647234e-9,0.001910674199703993,-1.2977653683504635e-5,1.2491153226176072e-9,0.001910957383345947,-1.2727836569487273e-5,1.0086216538112337e-9,0.0019111736376836673,-1.2513095263658599e-5,8.021151208985223e-10,0.0019113446910483782,-1.2355262008813369e-5,6.502990133921028e-10,0.0019114970699477254,-1.2266914435896981e-5,5.649887739956633e-10,0.001911659458251913,-1.2250863989869682e-5,5.48651037755953e-10,0.0019118603142655674,-1.2299688915426472e-5,5.939871771107086e-10,0.0019121250704395051,-1.2395224103850199e-5,6.83479516283135e-10,0.001912472298250459,-1.2508553962420433e-5,7.894175597020551e-10,0.0019129086995072113,-1.2601732458062466e-5,8.755614362231623e-10,0.0019134238587510172,-1.2632856875682743e-5,9.019823758839568e-10,0.0019139872139001782,-1.2565475255362356e-5,8.340185275907759e-10,0.0019145507149744756,-1.2380996991705414e-5,6.541016494998854e-10,0.0019150594943169597,-1.208942059331609e-5,3.720012705806915e-10,0.0019154687355826697,-1.1731803189978585e-5,2.7186751351475117e-11,0.0019157599073696201,-1.1370438510631843e-5,-3.2059589419623007e-10,0.0019159480871280882,-1.1069433649940181e-5,-6.099776897920081e-10,0.0019160765242110884,-1.0874351161307604e-5,-7.975067244527357e-10,0.001916201638240862,-1.0799731954230843e-5,-8.695695269755934e-10,0.0019163757206690922,-1.0828066294132719e-5,-8.432736692445251e-10,0.001916633663319116,-1.0918083407511515e-5,-7.583931686950212e-10,0.0019169865545414935,-1.1017681518618213e-5,-6.649208970516302e-10,0.0019174220148160516,-1.1077138327480256e-5,-6.104228457140029e-10,0.001917909652400136,-1.1059628873658679e-5,-6.300141180862712e-10,0.0019184095373273615,-1.0947442807596206e-5,-7.404583107456317e-10,0.0019188815145464583,-1.074336196537258e-5,-9.388858115135974e-10,0.0019192932808213034,-1.0467594123611643e-5,-1.20575358697917e-9,0.0019196256213150462,-1.0151606595075532e-5,-1.5107725145640873e-9,0.0019198741582867806,-9.830831037267878e-6,-1.8199155582087304e-9,0.001920048034328906,-9.53810189496491e-6,-2.101716952530784e-9,0.00192016664884815,-9.298985720095432e-6,-2.3317451423285186e-9,0.0019202557299710247,-9.129284586844093e-6,-2.4949779817672822e-9,0.0019203436982262987,-9.03425635494825e-6,-2.5865276762768656e-9,0.0019204586561453517,-9.008766308266697e-6,-2.6114761398253937e-9,0.0019206257964393613,-9.037767379553837e-6,-2.584400459288261e-9,0.0019208647556760669,-9.096934635335611e-6,-2.528749375572851e-9,0.0019211863918376449,-9.153791617985142e-6,-2.475744453410305e-9,0.0019215887893763244,-9.170318069016814e-6,-2.4618619106144695e-9,0.0019220532680969222,-9.108486698013456e-6,-2.5235177511399977e-9,0.0019225426370994027,-8.93968667282501e-6,-2.6880381102716844e-9,0.0019230051437690364,-8.656881355420935e-6,-2.9620064184294193e-9,0.0019233868768198299,-8.284641843373393e-6,-3.321635583237772e-9,0.0019236508865696793,-7.87924983238811e-6,-3.7126811593957043e-9,0.0019237944180940756,-7.513626152701059e-6,-4.064969808739745e-9,0.0019238530642237287,-7.251346875133989e-6,-4.317442787274023e-9,0.0019238875264319904,-7.123184534446885e-6,-4.440727658128514e-9,0.0019239602849499028,-7.118772335068044e-6,-4.445080751689829e-9,0.0019241150340064711,-7.195410187776e-6,-4.3718032484889515e-9,0.0019243672115235493,-7.296057858543114e-6,-4.275859784550209e-9,0.0019247056490780219,-7.366796576870663e-6,-4.209081160263236e-9,0.001925100638222425,-7.368390575798459e-6,-4.2090899838722325e-9,0.0019255136991263675,-7.28124033598263e-6,-4.29459094897082e-9,0.0019259062934330908,-7.105313322498182e-6,-4.465474633111174e-9,0.001926246455241092,-6.8569503429279765e-6,-4.705904064104801e-9,0.001926513155176582,-6.563908504672785e-6,-4.989086595641599e-9,0.0019266984060524598,-6.259565315487143e-6,-5.28285207654197e-9,0.0019268072181901595,-5.977125716265304e-6,-5.555231795710813e-9,0.0019268557194206991,-5.744607949504135e-6,-5.779286983994542e-9,0.001926867956789526,-5.581192829623622e-6,-5.93661711990306e-9,0.0019268720688889452,-5.495252817643273e-6,-6.019245563941074e-9,0.0019268965365545243,-5.483964670467983e-6,-6.029980211505466e-9,0.0019269669147046517,-5.534047865259946e-6,-5.981698489668393e-9,0.0019271030607710645,-5.623188311924287e-6,-5.895977467639949e-9,0.0019273166863302753,-5.7219540024492885e-6,-5.8012471529754476e-9,0.001927608964943563,-5.7963044626612365e-6,-5.730359732741071e-9,0.001927968073137577,-5.811296023443038e-6,-5.716996716285913e-9,0.001928367327868175,-5.736968151573158e-6,-5.789976737812062e-9,0.0019287657529438592,-5.556881102280313e-6,-5.965023129181158e-9,0.0019291137044280984,-5.2780252562612125e-6,-6.235225744033611e-9,0.0019293656129909568,-4.9378508432014095e-6,-6.564293224012181e-9,0.0019294981647026979,-4.601333003765205e-6,-6.88943201632588e-9,0.001929525485728095,-4.342876353937429e-6,-7.138863176862139e-9,0.0019294994801223031,-4.217696588858802e-6,-7.25946537969358e-9,0.0019294908116161604,-4.238299439230228e-6,-7.239417461315074e-9,0.001929560314582812,-4.371015270438031e-6,-7.111424613284696e-9,0.0019297377118852202,-4.55344246107046e-6,-6.935795233464066e-9,0.001930017314096714,-4.719917590952116e-6,-6.775858205910853e-9,0.001930367658027968,-4.821014209853837e-6,-6.679201920416775e-9,0.0019307459008136353,-4.8316120263198285e-6,-6.669947990797228e-9,0.0019311099639047478,-4.749855588336907e-6,-6.749791325681373e-9,0.001931426078730715,-4.591648798416053e-6,-6.903320619292728e-9,0.0019316723240502833,-4.384152509840636e-6,-7.104284083463843e-9,0.00193183957714851,-4.159855661523347e-6,-7.321298468100921e-9,0.0019319309590358179,-3.951522849872863e-6,-7.522721099309414e-9,0.001931960272729608,-3.7879464393165173e-6,-7.680755766459321e-9,0.0019319496225054618,-3.690498897752296e-6,-7.774788967531755e-9,0.0019319263202685097,-3.6706055523742944e-6,-7.793831867149322e-9,0.001931919267959071,-3.7283927164905087e-6,-7.737819257871908e-9,0.0019319552108667095,-3.852716726614077e-6,-7.617573393096083e-9,0.0019320552988749142,-4.02248969024826e-6,-7.453520879166667e-9,0.0019322322171346693,-4.209066647074804e-6,-7.27339092546293e-9,0.0019324880384187753,-4.379522397329557e-6,-7.109051304871561e-9,0.0019328128907126745,-4.5006846976982455e-6,-6.9926006585541975e-9,0.001933184500922892,-4.543960637217014e-6,-6.951680008281516e-9,0.0019335690805746674,-4.491239132575197e-6,-7.0037418708715674e-9,0.0019339247854987158,-4.3417098714221724e-6,-7.149447726110859e-9,0.0019342092422925217,-4.118009382523817e-6,-7.366743932940767e-9,0.0019343916827004838,-3.868204312684253e-6,-7.608992772716862e-9,0.001934467361572726,-3.658733712507117e-6,-7.811866984567964e-9,0.001934467204138646,-3.5553083996379697e-6,-7.911879053399946e-9,0.0019344532495840499,-3.5966460829545584e-6,-7.871776332288663e-9,0.0019344968195731504,-3.7753114217998696e-6,-7.698978894623498e-9,0.0019346495112623097,-4.03947689724567e-6,-7.443761240396356e-9,0.0019349242390860283,-4.315579736048795e-6,-7.177294842177374e-9,0.0019352959799658958,-4.537209508290387e-6,-6.9637480873944295e-9,0.0019357174371195988,-4.664295527601881e-6,-6.8417869033334726e-9,0.0019361376429321514,-4.687227031264865e-6,-6.820621053087697e-9,0.0019365149604292852,-4.620518272556331e-6,-6.886137513437268e-9,0.001936822735002006,-4.4930784615761195e-6,-7.01030959332819e-9,0.0019370497573068866,-4.3395817761451026e-6,-7.159541983283873e-9,0.0019371982714750445,-4.194332245529059e-6,-7.300606086896117e-9,0.0019372813098119841,-4.0872389658178436e-6,-7.404541171072901e-9,0.0019373200047168263,-4.041081596253815e-6,-7.449311969194115e-9,0.0019373408698219712,-4.06951090543502e-6,-7.421751862826817e-9,0.0019373728401152071,-4.175601163817662e-6,-7.318959872347354e-9,0.0019374438984557292,-4.351140097040351e-6,-7.14897163907601e-9,0.0019375773878386295,-4.577090029110529e-6,-6.930294004143148e-9,0.0019377884492321462,-4.8255307456941e-6,-6.690013847281935e-9,0.0019380811458521296,-5.063086450380342e-6,-6.460482833914179e-9,0.0019384468078961414,-5.2556340897116115e-6,-6.274765644942493e-9,0.001938864070694948,-5.373859826780817e-6,-6.161257575262624e-9,0.0019393008815218134,-5.39900090253849e-6,-6.138107237175963e-9,0.0019397185968336869,-5.328108998262378e-6,-6.208094891699568e-9,0.0019400783924782288,-5.178029968915432e-6,-6.3547673684562564e-9,0.001940350064460665,-4.986568248040517e-6,-6.541330751226949e-9,0.0019405222410656135,-4.808507589956162e-6,-6.714561951692604e-9,0.0019406110279473565,-4.704360703335738e-6,-6.815780527851394e-9,0.0019406619186682263,-4.722099909779016e-6,-6.798592282970913e-9,0.0019407397828170951,-4.877341093394415e-6,-6.6480630164182626e-9,0.0019409070239167167,-5.142645237546104e-6,-6.3909979796592525e-9,0.0019411991246476956,-5.455021750594156e-6,-6.08859132515089e-9,0.0019416113591816284,-5.739907638638507e-6,-5.813170806092759e-9,0.0019421039399188788,-5.938379623146413e-6,-5.621848443746926e-9,0.001942620441220814,-6.023358180511173e-6,-5.540825654139379e-9,0.0019431076064300335,-6.000155352616885e-6,-5.564854280690739e-9,0.0019435278468381142,-5.896618797745685e-6,-5.66679479290207e-9,0.0019438629592743444,-5.750852545969404e-6,-5.809548326748877e-9,0.0019441120808416875,-5.601534475667561e-6,-5.955480832384088e-9,0.001944287443752201,-5.482065741624393e-6,-6.072125549617999e-9,0.0019444101506376872,-5.417660736467644e-6,-6.135020234542866e-9,0.001944506708268009,-5.424015514502002e-6,-6.12900103028505e-9,0.0019446061453395735,-5.5065945921930115e-6,-6.048882321230036e-9,0.0019447372317435117,-5.660164219490716e-6,-5.899883466024544e-9,0.0019449253683826993,-5.8687316263243564E-06,-5.6976552684035205e-9,0.001945189030333371,-6.106463427556881e-6,-5.467362321854533e-9,0.001945536161431122,-6.340235377640483e-6,-5.241200084831334e-9,0.0019459613750219223,-6.534129514976202e-6,-5.0540407206024526E-09,0.0019464450016517627,-6.655627092463941e-6,-4.9374385215283745e-9,0.0019469548828858596,-6.682567740270542e-6,-4.912878296775678e-9,0.001947451269570495,-6.60932933283276e-6,-4.985758640608991e-9,0.0019478943525422965,-6.450513493834239e-6,-5.14178782748562e-9,0.0019482532181079584,-6.2407756398245034e-6,-5.347142200685174e-9,0.0019485145355209999,-6.029956846976695e-6,-5.553227818359947e-9,0.001948688832848761,-5.8732962326046545e-6,-5.706255960069141e-9,0.0019488117889920867,-5.817657136586249e-6,-5.76069054929591e-9,0.001948938125527602,-5.886667676818439e-6,-5.69370500652984e-9,0.0019491274075020232,-6.0699856033129015e-6,-5.515569915679763e-9,0.0019494249289553265,-6.3227915401508744E-06,-5.270071903094241e-9,0.001949845257742566,-6.578590377092514e-6,-5.022021831291358e-9,0.0019503668701211755,-6.771379833246088e-6,-4.8356927104913765e-9,0.001950941025999169,-6.857006618888046e-6,-4.754047856449597e-9,0.0019515098360051739,-6.823912357418047e-6,-4.788264987953578e-9,0.0019520240658229982,-6.690500284410137e-6,-4.920280238133386e-9,0.0019524536244067533,-6.49382548244997e-6,-5.113816259747165e-9,0.0019527895094792508,-6.276752315075202e-6,-5.326941081183438e-9,0.0019530401509459683,-6.078332438438705e-6,-5.521497393189113e-9,0.001953225817980965,-5.928567237035448e-6,-5.668236483345585e-9,0.0019533734478342783,-5.84651286102268e-6,-5.74866469745462e-9,0.0019535127069048035,-5.840135760566559e-6,-5.755159455452236e-9,0.0019536730713173847,-5.906707798229399e-6,-5.690546687804252e-9,0.0019538812761171337,-6.033223898987462e-6,-5.567654612994196e-9,0.0019541585144023286,-6.197000707763707e-6,-5.408699430107965e-9,0.0019545171385095907,-6.367107479822374e-6,-5.243879262195881e-9,0.0019549572076320533,-6.5074833444539475e-6,-5.108346058501838e-9,0.0019554639201165612,-6.582363249082454e-6,-5.03694129358835e-9,0.001956007498430186,-6.563809875728904e-6,-5.0568720809815e-9,0.001956546986261798,-6.4398326830353245e-6,-5.179789317621606e-9,0.001957038319601614,-6.220390777973844e-6,-5.3959025305882386e-9,0.001957445211377807,-5.938406346561329e-6,-5.6729623501463044E-09,0.0019577497434098727,-5.6441961139281294e-6,-5.961701088875459e-9,0.00195795905198493,-5.3940117834603315e-6,-6.207071934832427e-9,0.001958105475933685,-5.235595818058769e-6,-6.362420055449834e-9,0.0019582395183540724,-5.194843437985116e-6,-6.402542072145623e-9,0.001958417079498149,-5.267559275761301e-6,-6.331712684108876e-9,0.0019586841391798864,-5.419208397437096e-6,-6.183867152169376e-9,0.0019590632992368684,-5.5936274617679324e-6,-6.0140407497047866e-9,0.0019595468572287758,-5.728796846682779e-6,-5.882943397267424e-9,0.001960099404208329,-5.774659859002328e-6,-5.8395474337831e-9,0.0019606692273000065,-5.706491547132605e-6,-5.908007246472056e-9,0.001961203875844111,-5.5290734820936245e-6,-6.083550911233866e-9,0.001961663710892444,-5.271294504247528e-6,-6.33775249294814e-9,0.0019620291042840325,-4.974990706173587e-6,-6.62948408349352e-9,0.0019623006544432146,-4.683271223898374e-6,-6.916401377222745e-9,0.001962494734377491,-4.432015613971804e-6,-7.163317469825513e-9,0.00196263744876942,-4.24555166449937e-6,-7.3464495352867865e-9,0.001962759151531451,-4.135625053205161e-6,-7.454405906541533e-9,0.0019628903475563684,-4.102163162853727e-6,-7.487397138171459e-9,0.001963058825873597,-4.134581772027361e-6,-7.45591629508366e-9,0.0019632873735704035,-4.2130275752858015e-6,-7.37949782948698e-9,0.001963591384460584,-4.309670509689841e-6,-7.285447272084761e-9,0.001963976034392938,-4.390698571258319e-6,-7.2069014925367394E-09,0.00196443330876546,-4.419933657794488e-6,-7.1793089036528066e-9,0.0019649399761413515,-4.364865771727716e-6,-7.23453490273262e-9,0.001965458415821613,-4.2050069352158806e-6,-7.392670556572303e-9,0.0019659423021510165,-3.940624693125234e-6,-7.653438357820787e-9,0.001966347619651084,-3.5979703831828426e-6,-7.991020087185636e-9,0.001966646410720784,-3.2268073690315724e-6,-8.35646294373238e-9,0.001966837804951861,-2.88866026076316e-6,-8.6892469084276e-9,0.0019669507350560987,-2.638942552458159e-6,-8.93489923720782e-9,0.001967036219204756,-2.509897091168396e-6,-9.061792188439865e-9,0.0019671521102095036,-2.5011703515333097e-6,-9.070385947269845e-9,0.001967346338386762,-2.5810055380569523e-6,-8.992002968155938e-9,0.0019676443316525953,-2.696486676324743e-6,-8.878723391163976e-9,0.0019680437540308916,-2.788602202893239e-6,-8.788584213578214e-9,0.00196851699192739,-2.8074134547524235e-6,-8.77069512204032e-9,0.0019690198105688102,-2.723406029950918e-6,-8.854087293070188e-9,0.001969503286514971,-2.5325606025790628e-6,-9.042705655591e-9,0.0019699255438227234,-2.2545503651888572e-6,-9.317149614451272e-9,0.0019702602048416143,-1.9254253998824907e-6,-9.64186138287465e-9,0.0019704998243126686,-1.587626778063647e-6,-9.974977396460062e-9,0.001970654436207738,-1.2805361083925496e-6,-1.0277671836369529E-08,0.001970746848452303,-1.0338220010957484e-6,-1.0520734387427998e-8,0.001970806813276138,-8.642671882979529e-7,-1.0687691080751363e-8,0.0019708657346138646,-7.754852094272468e-7,-1.0775054263680461e-8,0.001970952685885467,-7.59358064857489e-7,-1.0790873734095068e-8,0.001971091690133412,-7.980785287859418e-7,-1.075270881326718e-8,0.0019712997330186763,-8.661819417994633e-7,-1.0685635082892515e-8,0.001971584912381313,-9.325958251431366e-7,-1.0620251655417039e-8,0.001971944386893563,-9.632389319096306e-7,-1.0590148555848218e-8,0.0019723623172643737,-9.250101036695197e-7,-1.0627989281767547e-8,0.001972808830631805,-7.919702181976068e-7,-1.0759406320346234e-8,0.0019732419679683944,-5.536462457545765e-7,-1.0994779047683153e-8,0.001973614823661226,-2.2335933302557065e-7,-1.1320973812675675e-8,0.0019738884737286657,1.5799990717252462e-7,-1.1697589927724113e-8,0.0019740473224203847,5.280347963458416e-7,-1.2062959771330483e-8,0.00197410928803649,8.20358883314744e-7,-1.2351497457826083e-8,0.001974123317235958,9.877098265902934e-7,-1.251656570489879e-8,0.001974153255924493,1.0192999814429548e-6,-1.2547588496020676e-8,0.0019742556717545824,9.434428611000109e-7,-1.2472576911245205e-8,0.0019744623865517686,8.154180584666158e-7,-1.2346103517772794e-8,0.001974774135226251,6.982018680757243e-7,-1.2230299564424663e-8,0.001975164866836536,6.44800593857355e-7,-1.2177471453811616e-8,0.001975592187135106,6.871905621175031e-7,-1.221921769330186e-8,0.001976009248334955,8.327104581488337e-7,-1.2362852376014084e-8,0.0019763749925609457,1.0663971388143509e-6,-1.259366276420492e-8,0.001976661273607453,1.3571121056137057e-6,-1.2880913658228117e-8,0.0019768563928079714,1.6655158949823804e-6,-1.3185711559255818e-8,0.001976965150873674,1.9522178827619e-6,-1.3469078659361015e-8,0.0019770060231024044,2.1846215565256827e-6,-1.3698753468466588e-8,0.001977006519814771,2.3414551764659016e-6,-1.3853691582153881E-08,0.0019769979445145433,2.4146980122888094e-6,-1.3925966248255384e-8,0.0019770105929741008,2.409217344158514e-6,-1.3920387497226856e-8,0.0019770700502998715,2.340825972519958e-6,-1.3852563760087515e-8,0.0019771946962903715,2.233613597212906e-6,-1.3746268263541514e-8,0.001977394083641216,2.117137695108602e-6,-1.3630691930216664e-8,0.00197766776849491,2.02355937158754e-6,-1.353764934893884e-8,0.0019780043391657534,1.9844130263776497e-6,-1.3498405475263642e-8,0.001978380746958981,2.0264143260061553e-6,-1.353951384539365e-8,0.001978762774876461,2.1656876800633962e-6,-1.3677055583687163e-8,0.00197910834678161,2.4005955486988004e-6,-1.3909478074330424e-8,0.0019793755690996236,2.7052325640155345e-6,-1.4211108687579435e-8,0.0019795358980323765,3.0280329593492748e-6,-1.4530782563116931e-8,0.0019795888602322726,3.3008762468395384e-6,-1.4800926854883546e-8,0.001979569909580966,3.4602522751505376e-6,-1.4958607317158036e-8,0.0019795428292347273,3.4729664075210322e-6,-1.4971007396679774e-8,0.0019795766858330343,3.3517185374406653e-6,-1.485078131230214e-8,0.001979719097725177,3.150012236996182e-6,-1.4650917551003886e-8,0.0019799807430923235,2.939717703579574e-6,-1.4442508997057445e-8,0.001980337179051505,2.785210747885825e-6,-1.4289220607364234e-8,0.001980742604001265,2.726455749296866e-6,-1.423061560237119e-8,0.0019811460867675897,2.7744247605888214e-6,-1.4277633511904348e-8,0.001981503955526798,2.915383589334282e-6,-1.4416788031389436e-8,0.0019817866606374806,3.119072655949307e-6,-1.4618203584318185e-8,0.0019819810541467733,3.3472878569643014e-6,-1.4844069697144964e-8,0.0019820896686203603,3.5612914305410776e-6,-1.5055977587760283e-8,0.00198212818028609,3.7276910519524167e-6,-1.522077511487346e-8,0.0019821217200457113,3.822702343827983e-6,-1.531483119915164e-8,0.001982100526968717,3.8346574475360094e-6,-1.5326546430867445e-8,0.001982095446197697,3.7647342774013897e-6,-1.525707214555077e-8,0.0019821337647565624,3.626027788928867e-6,-1.511936833404366e-8,0.00198223586051072,3.441229396883561e-6,-1.4935887639064302e-8,0.00198241295750562,3.2394074768603723e-6,-1.4735395171384388e-8,0.001982665941468611,3.0524134698759988e-6,-1.4549442314482317e-8,0.0019829850278711707,2.9111670054398966e-6,-1.4408723058841443e-8,0.0019833501452222605,2.841809897117393e-6,-1.4339272286988301e-8,0.0019837320752173157,2.8615334931783054e-6,-1.4358293854803897e-8,0.001984094861776407,2.9738376767734945e-6,-1.4469388182609625e-8,0.001984400625925791,3.163606036205151e-6,-1.465759406565055e-8,0.001984617903763515,3.39387177161666e-6,-1.4886148324894974e-8,0.001984733239124418,3.6078493427449448e-6,-1.5098540495896356e-8,0.001984762586708769,3.740319866084089e-6,-1.522990885918146e-8,0.001984755051949164,3.739151728899739e-6,-1.5228487094580237e-8,0.0019847812506757346,3.589373742862749e-6,-1.507949371776934e-8,0.0019849070018280613,3.324884794977739e-6,-1.481665653780441e-8,0.0019851657075547475,3.017077739740492e-6,-1.4510837813089766e-8,0.001985546337819205,2.7455641756043497e-6,-1.4240999293311826e-8,0.0019860027126962026,2.5689052542741243e-6,-1.4065234505030063e-8,0.001986474911058454,2.5102785475177926e-6,-1.4006586884914449e-8,0.001986909190146146,2.5597820777408202e-6,-1.4055310223533645e-8,0.001987269141598994,2.685729541695863e-6,-1.4180024373601416e-8,0.001987538415975901,2.8470244196991636e-6,-1.4339955147058143e-8,0.0019877184535379826,3.0026745725009918e-6,-1.4494369758932575e-8,0.001987824315689395,3.1178169485181043e-6,-1.4608579499453113e-8,0.0019878803285720108,3.1671431670578377e-6,-1.4657380747630862e-8,0.001987916017903525,3.1367378731829e-6,-1.4626916752757822e-8,0.00198796225735607,3.0248075252962984e-6,-1.4515412078652403e-8,0.001988047562103157,2.8413753222055076e-6,-1.4332850735856531e-8,0.0019881946131477435,2.60687216740141e-6,-1.4099542829987458e-8,0.001988417298411971,2.349527873938127e-6,-1.3843513258288562e-8,0.0019887187102340417,2.1016769841030624e-6,-1.3596844711551368e-8,0.001989090425727029,1.895388778983732e-6,-1.3391377619170956e-8,0.001989513160461744,1.7578895979745178e-6,-1.3254203612054567e-8,0.001989958770446367,1.7071788559904026e-6,-1.3203316404532476e-8,0.001990393534070427,1.7481911434179824e-6,-1.3243755974189393e-8,0.0019907827350952195,1.8697874359525122e-6,-1.336454230925692e-8,0.00199109681028482,2.0431157285996407e-6,-1.3536978415285554e-8,0.001991319151058384,2.222726763531207e-6,-1.371574429721612e-8,0.0019914544946981836,2.3526243150694117e-6,-1.3844968523515149e-8,0.0019915347809361574,2.379086977407752e-6,-1.3871077631016254e-8,0.001991617224389839,2.269346242030513e-6,-1.376144811926663e-8,0.0019917698902892863,2.0294384279911193e-6,-1.3522157951942242e-8,0.0019920466456429435,1.7095202837346074e-6,-1.3203206351826863e-8,0.001992463423863107,1.3885001624897012e-6,-1.288317749571206e-8,0.0019929908638321907,1.143480512993817e-6,-1.2638853847306288e-8,0.0019935682104733686,1.0214708448982725e-6,-1.2517091776224162e-8,0.0019941285130815195,1.0283869976145581e-6,-1.2523846927649901e-8,0.0019946200002937324,1.1365035316745898e-6,-1.2631538348227922e-8,0.001995015574720192,1.300685938679259e-6,-1.2795181679410482e-8,0.0019953118522825736,1.4734595686959486e-6,-1.2967407715671091e-8,0.0019955231121392253,1.6145721408287418e-6,-1.3108023269665573e-8,0.001995674485554681,1.6953207844439172e-6,-1.3188361405392658e-8,0.001995796372307964,1.6996250991069645e-6,-1.3192379686625797e-8,0.0019959203169879858,1.6236696505985474e-6,-1.3116312565503816e-8,0.0019960757921594096,1.475055708754886e-6,-1.2967807444551166e-8,0.0019962873383381975,1.271613814117125e-6,-1.2764702800757431e-8,0.001996571813660661,1.039617664310189e-6,-1.253321173415832e-8,0.001996935876688311,8.10987734279826e-7,-1.2305124592895642e-8,0.0019973742307001037,6.19237649378676e-7,-1.2113796509748371e-8,0.0019978693382533895,4.943937406260044e-7,-1.198913399233764e-8,0.0019983931254425164,4.575767847518032e-7,-1.1952232495962723e-8,0.0019989108215040154,5.162092500765573e-7,-1.2010593106379118e-8,0.0019993866344011147,6.609218430927506e-7,-1.215498240158599e-8,0.001999790531775251,8.650472468204294e-7,-1.2358850045151053e-8,0.0020001051872744658,1.0872195388065961e-6,-1.258086799786539e-8,0.0020003320300538583,1.2774384887276872e-6,-1.2770987731393865e-8,0.0020004948833237455,1.386820963278251e-6,-1.2880238021882123e-8,0.0020006389899060112,1.380409164658492e-6,-1.2873596607745973e-8,0.0020008230599442827,1.250445294729628e-6,-1.2743295658742569e-8,0.0020011035292148414,1.0248522465183068e-6,-1.2517287786395435e-8,0.0020015145004623476,7.642707366236366e-7,-1.2256256246504428e-8,0.002002052224806011,5.444286659134359e-7,-1.203598958625036e-8,0.0020026739455431216,4.2948544136936147e-7,-1.1920745495741174e-8,0.002003313579512777,4.496948714502562e-7,-1.1940890619262743e-8,0.0020039058326337656,5.94885512572639e-7,-1.208630936784008e-8,0.0020044058510690797,8.245709877731227e-7,-1.2316460457905977e-8,0.002004796841439746,1.0859096843776425e-6,-1.2578353220820108e-8,0.0020050868112686674,1.3296101468781744e-6,-1.2822521486441082e-8,0.0020053001577274294,1.5190539612688328e-6,-1.3012215262669332e-8,0.002005469139021302,1.6331027930982382e-6,-1.3126245137314179e-8,0.0020056275325741548,1.6652065850658668e-6,-1.3158091335992063e-8,0.0020058066106900104,1.6211993428942383e-6,-1.3113673482230696e-8,0.0020060325903481888,1.5170686408574125e-6,-1.3009079439298547e-8,0.002006324650222416,1.3769637497429265e-6,-1.2868534813545612e-8,0.0020066929754689877,1.2310800018681066e-6,-1.2722269046986007e-8,0.002007136798951896,1.1127780991151567e-6,-1.2603647647411476e-8,0.0020076429784578894,1.054378781853201e-6,-1.254500526328362e-8,0.002008186099861188,1.081598763449451e-6,-1.2572118807769247e-8,0.0020087311297168646,1.2074288608481698e-6,-1.2698088673752461e-8,0.002009239103287181,1.4270773152031296e-6,-1.2918234760844035e-8,0.0020096752789058284,1.716007875070945e-6,-1.3208055118895744e-8,0.0020100179652990918,2.0326550064858777e-6,-1.352587734554098e-8,0.0020102654993804938,2.3260539621831587e-6,-1.3820486693134687e-8,0.0020104390771972405,2.547030253336762e-6,-1.4042386690680413e-8,0.002010580106295075,2.6604804750482006e-6,-1.4156191902665433e-8,0.0020107419502173964,2.6557832329077294e-6,-1.4151139319925016e-8,0.0020109771879805558,2.5523069324261464e-6,-1.4046647718123685e-8,0.0020113229426591533,2.397375789826293e-6,-1.3890280276741745e-8,0.0020117884211216064,2.2554114694326285e-6,-1.3746841070905745e-8,0.0020123497341117697,2.1898980519676447e-6,-1.3680257875013628e-8,0.002012955651515441,2.2438213886840194e-6,-1.3733900181722728e-8,0.0020135433728180985,2.4266447610087438e-6,-1.39174182558369e-8,0.0020140579317852875,2.71366437476233e-6,-1.4206014604787913e-8,0.0020144668228012324,3.057204948402956e-6,-1.4551671002974376e-8,0.0020147647475891694,3.403199418756304e-6,-1.4899863316082618e-8,0.0020149692079483423,3.7055522989431925e-6,-1.520408419186706e-8,0.00201511150064555,3.9340846123691215e-6,-1.5433892567141782e-8,0.0020152277251075717,4.076173637410506e-6,-1.5576577887703656e-8,0.002015352239871468,4.134536644454852e-6,-1.563490853663456e-8,0.0020155138461719147,4.123692670047893e-6,-1.5623536213635403e-8,0.002015733840614426,4.0666243269108735e-6,-1.55656072328393e-8,0.0020160248674950276,3.992054942875605e-6,-1.549001455038565e-8,0.002016389829459018,3.93198510839712e-6,-1.542893704410032e-8,0.0020168206820040395,3.918765993757011e-6,-1.541493242521958e-8,0.0020172975756185623,3.980985777701276e-6,-1.5476833726911856E-08,0.0020177894153615887,4.137875398081949e-6,-1.5634127210906082e-8,0.002018257233673766,4.392939175307108e-6,-1.589050240627824e-8,0.0020186613266694954,4.728908346737077e-6,-1.6228694079735292e-8,0.0020189715206215524,5.107091194937329e-6,-1.660975065177038e-8,0.0020191776486713324,5.473615092617835e-6,-1.6979292753435012e-8,0.002019295779758033,5.772429950864491e-6,-1.7280651483171656e-8,0.002019366518176988,5.961349214838775e-6,-1.7471108259171236e-8,0.0020194449006417144,6.025194125173232e-6,-1.7535205282025255e-8,0.0020195851788385455,5.980999551576999e-6,-1.7490022440756466e-8,0.0020198257279237858,5.873603143711555e-6,-1.7380744515888384e-8,0.0020201787279912464,5.763467291729197e-6,-1.7268403150332105e-8,0.002020627231636164,5.710627551405569e-6,-1.7213706810198902e-8,0.002021130054639501,5.7592346508056935e-6,-1.7261429057047976e-8,0.002021632985760314,5.926817997082376e-6,-1.7429501306651574e-8,0.0020220830928120654,6.20118699778434e-6,-1.7705783145695567e-8,0.0020224418380563767,6.54565640069781e-6,-1.8053264624984565e-8,0.002022693062944097,6.910491614078083e-6,-1.842162169656846e-8,0.0020228439203432147,7.246330768272015e-6,-1.876083414523109e-8,0.00202291967499455,7.515105216752511e-6,-1.9032294027402762e-8,0.002022955371584404,7.695808702277565e-6,-1.9214681031198905e-8,0.0020229876289183193,7.785067752112486e-6,-1.9304540519772036e-8,0.002023048591573068,7.794246700981407e-6,-1.931333154928886e-8,0.0020231624980154585,7.745203409912733e-6,-1.926311028183914e-8,0.0020233442466032186,7.666212202219833e-6,-1.918240528759956e-8,0.0020235989734061375,7.588624354679677e-6,-1.9102866270263047e-8,0.002023921859131006,7.544034825291021e-6,-1.9056442936228402e-8,0.0020242978850773183,7.561308638331777e-6,-1.907241483206435e-8,0.0020247018586647472,7.662755338235264e-6,-1.9173526603769192e-8,0.0020250996748987574,7.859045107714878e-6,-1.9370801266084847e-8,0.0020254522736660083,8.143408211325172e-6,-1.9657586738974178e-8,0.0020257235021321623,8.487284167289417e-6,-2.0005064388235096e-8,0.0020258914008579325,8.841089839559924e-6,-2.0362983469746076e-8,0.0020259593522022504,9.143502782538063e-6,-2.0669092452411597e-8,0.002025960886878649,9.339097586877438e-6,-2.0867079499950275e-8,0.0020259529258870486,9.398254944606137e-6,-2.0926796085751366e-8,0.0020259980842913805,9.329515946722925e-6,-2.085676872498728e-8,0.0020261436498098338,9.177436067364245e-6,-2.0702003689784143e-8,0.002026406976788043,9.007145260904893e-6,-2.0528373390696197e-8,0.0020267726311981303,8.883574211806648e-6,-2.0401649057662443e-8,0.002027200045442295,8.85396367750792e-6,-2.0369837232274553e-8,0.00202763668051562,8.938366466169523e-6,-2.0453528387901555e-8,0.002028031669042613,9.128606584898225e-6,-2.0644735364591285e-8,0.0020283466335991557,9.39376249959402e-6,-2.0912327645621907e-8,0.00202856210099846,9.689503075361093e-6,-2.121142268331872e-8,0.002028679138809268,9.968698912730516e-6,-2.1494151041399055e-8,0.0020287166795685033,1.0191047732068404e-5,-2.1719481725996414e-8,0.0020287057358542504,1.0329897581158466e-5,-2.186021727137697e-8,0.0020286822638829623,1.0375287950705e-5,-2.1906123600102078e-8,0.0020286804677956084,1.0333353870444897e-5,-2.186332802988044e-8,0.0020287278066525257,1.022312602899354e-5,-2.175105158087606e-8,0.0020288421647846723,1.0072112218170743e-5,-2.1597111262225863e-8,0.0020290308875681577,9.911875842701016e-6,-2.143344844153332e-8,0.0020292909665944156,9.774243576700235e-6,-2.129232494824514e-8,0.0020296097239808366,9.688113323346603e-6,-2.1203133387480477e-8,0.0020299656877050217,9.67644684934271e-6,-2.11893658424898e-8,0.0020303297882378582,9.752905982662366e-6,-2.1265165055571597e-8,0.0020306676073327287,9.917766980710009e-6,-2.1431087980682735e-8,0.002030943934628873,1.0153584998504719e-5,-2.1669593622508353e-8,0.0020311306708723493,1.0422590466425067e-5,-2.1942323425636325e-8,0.002031217579951732,1.0669289798588603e-5,-2.219275019954811e-8,0.002031222335730858,1.0831796516238949e-5,-2.235778014634001e-8,0.002031193048301995,1.0861890930176747e-5,-2.2388241959551486e-8,0.00203119703859634,1.0746492481003186e-5,-2.2270735146629827e-8,0.002031297195154339,1.0517768776177442e-5,-2.2037844471414716e-8,0.0020315273094421984,1.0243291108028e-5,-2.1758092239078608e-8,0.0020318802493412753,1.0000530434740792e-5,-2.1510081000851584e-8,0.002032314137298937,9.850022664826762e-6,-2.1355340836590286e-8,0.002032770207259545,9.81982278786599e-6,-2.132258299426645e-8,0.0020331917199350323,9.904280503784482e-6,-2.14063888568104e-8,0.002033536949342053,1.0072489993620747e-5,-2.157566092331201e-8,0.0020337847861032054,1.0280151984724976e-5,-2.178555756437125e-8,0.002033934644404204,1.0480633734434917e-5,-2.1988684509594312e-8,0.002034002956023895,1.0633476288885205e-5,-2.2143773497299168e-8,0.0020340179562521273,1.0710065550269308e-5,-2.222152752762457e-8,0.002034013813275749,1.0696609639052564e-5,-2.2207730651406188e-8,0.002034024860105363,1.0594604521297306e-5,-2.2103765848150748e-8,0.002034080587443095,1.0419122419825089e-5,-2.19248717814829e-8,0.0020342019278727854,1.0195455518673118e-5,-2.169670062200928e-8,0.0020343991620295483,9.954802844166271e-6,-2.145091239995425e-8,0.0020346714321390342,9.729785129053017e-6,-2.122063084652677e-8,0.0020350074824118905,9.550386709694598e-6,-2.103636451097717e-8,0.002035387185509016,9.440493583899565e-6,-2.0922533216016104e-8,0.0020357836037984364,9.414912608424384e-6,-2.089444107511516e-8,0.0020361655489376162,9.476655420791237e-6,-2.0955452598258494e-8,0.002036501001353076,9.614310232276557e-6,-2.1094206564680248e-8,0.002036762210872142,9.79994037620005e-6,-2.1282363869390327e-8,0.0020369330481708123,9.989184837192771e-6,-2.1474658477092256e-8,0.002037017771296381,1.012628359366276e-5,-2.1614061269663444e-8,0.002037047915437464,1.015658110540848e-5,-2.164463677168314e-8,0.0020370813026867737,1.0046056108125668e-5,-2.153154985964805e-8,0.0020371875508600258,9.800650799576031e-6,-2.1280773292665346e-8,0.002037421936656467,9.472336381754918e-6,-2.094520101904596e-8,0.0020378005857027153,9.143072453333508e-6,-2.0608270685343048e-8,0.0020382928899801513,8.892876275813154e-6,-2.035149508235166e-8,0.0020388358398022157,8.770499811406708e-6,-2.0224669132370346e-8,0.002039359770557812,8.781941663669052e-6,-2.0234157130035133e-8,0.0020398103504522254,8.897729739466089e-6,-2.0350211586612295e-8,0.0020401588643933475,9.069382952218172e-6,-2.0523629149456965e-8,0.0020404019625274035,9.245293559122839e-6,-2.0701866584475123e-8,0.002040555827693921,9.381504609670853e-6,-2.0840025781472896e-8,0.0020406489259659406,9.447228151930216e-6,-2.0906536788607898e-8,0.0020407154331214734,9.426696770852405e-6,-2.088512838607746e-8,0.00204078985578392,9.318873354513713e-6,-2.077459998128169e-8,0.00204090271395194,9.135845367544504e-6,-2.0587206452044835e-8,0.0020410771407216085,8.900239108317796e-6,-2.034599700431967e-8,0.002041326419699712,8.641807325844239e-6,-2.0081292128129632e-8,0.0020416526435947345,8.393337339943669e-6,-1.982648942593215e-8,0.002042046703171445,8.186237577472187e-6,-1.9613586261310882e-8,0.0020424895896427346,8.046339142518472e-6,-1.9468954219893878e-8,0.0020429547843234747,7.990305000968632e-6,-1.940972395069631e-8,0.0020434115251253306,8.022843551834938e-6,-1.9440936885743926e-8,0.002043828782565443,8.134892448156656e-6,-1.9553616311880043e-8,0.0020441798602190554,8.302917025788585e-6,-1.972393223071845e-8,0.0020444477519546617,8.4896969525292e-6,-1.9913901817449882e-8,0.0020446311903293338,8.647706547103258e-6,-2.0074815114312748e-8,0.0020447501973034107,8.726723226422148e-6,-2.0155077328217368e-8,0.002044848244940901,8.686627904246379e-6,-2.011341515541943e-8,0.0020449867383772256,8.513737749746249e-6,-1.9935671842505055e-8,0.002045228541166259,8.234144633017872e-6,-1.964846070320371e-8,0.0020456134638839763,7.913572361465218e-6,-1.931898185881672e-8,0.0020461377861319533,7.63729312921591e-6,-1.9034476270744172e-8,0.0020467521585061633,7.477202828544634e-6,-1.8868592712503943e-8,0.002047381272856939,7.464688941483806e-6,-1.8853644549237028e-8,0.0020479532062943314,7.58431837206364e-6,-1.8974080315531745e-8,0.0020484215587382487,7.78774400789283e-6,-1.918060677428675e-8,0.0020487722662357426,8.015405362121847e-6,-1.941233147259879e-8,0.002049018198077936,8.214197838192044e-6,-1.9614843383185996e-8,0.0020491889216315115,8.346735295295853e-6,-1.9749735808637718e-8,0.0020493210512069144,8.393632060507522e-6,-1.979700451228811e-8,0.0020494512449664246,8.351957607960816e-6,-1.9753525015406534e-8,0.0020496117250101715,8.23232744734854e-6,-1.963010652990153e-8,0.002049827426776408,8.055769435622714e-6,-1.944827439536342e-8,0.002050114053526486,7.850558869214728e-6,-1.9236989441846953e-8,0.0020504767490431433,7.648847136675355e-6,-1.9029157282885984e-8,0.0020509094756088818,7.482854532348159e-6,-1.8857725613841873e-8,0.002051395453334524,7.380623768682452e-6,-1.8751377321085998e-8,0.0020519090052662243,7.361760387571575e-6,-1.8730230620980626e-8,0.0020524188593675297,7.433818308990292e-6,-1.8802173480598776e-8,0.0020528926844391848,7.589950602549962e-6,-1.8960428834936324e-8,0.0020533024421489844,7.808390524123514e-6,-1.9182928498524213e-8,0.0020536299340462158,8.054192913403938e-6,-1.9433978306497595e-8,0.0020538718361486044,8.283434195619361e-6,-1.9668482974938482e-8,0.0020540434289632683,8.45004521906672e-6,-1.9838956797592828e-8,0.0020541797514216247,8.515402796906978e-6,-1.99054534057615e-8,0.0020543322054149753,8.459930706160225e-6,-1.984759651675978e-8,0.0020545585952090927,8.293944827313858e-6,-1.9675807879402267e-8,0.0020549063810787,8.062431097372e-6,-1.9436246264897823e-8,0.0020553934153247633,7.837497117823304e-6,-1.920304947832446e-8,0.002055995700465939,7.696451661454231e-6,-1.9055809090821722e-8,0.002056651811353018,7.693154521324639e-6,-1.9050112336143213e-8,0.0020572846695030584,7.837818600247798e-6,-1.919671296351236e-8,0.002057829365555983,8.096658859821898e-6,-1.946106441052887e-8,0.002058252145844519,8.409493816274429e-6,-1.978134730901258e-8,0.0020585536030746266,8.712990432294358e-6,-2.0092375696100318e-8,0.002058759808669095,8.957877739096902e-6,-2.0343349339844396e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json new file mode 100644 index 0000000..4dcccb3 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":17000,"numberOfSamples":1000,"samples":[0.0020589095356776037,9.116105504093818e-6,-2.0505272164235435e-8,0.002059043510293161,9.180255067418492e-6,-2.0570390059257767e-8,0.0020591976431414568,9.159302745262173e-6,-2.054785882824188e-8,0.002059399625909375,9.073759899582225e-6,-2.045874721325323e-8,0.0020596674746746844,8.95148439515232e-6,-2.033170765436402e-8,0.00206000888513569,8.824207938457376e-6,-2.019937465729761e-8,0.002060420904195782,8.724308617167852e-6,-2.0095032184184587e-8,0.0020608899779143205,8.68132520947309e-6,-2.0049049012491025e-8,0.0020613928365786132,8.717972919315283e-6,-2.008482719556681e-8,0.0020618988348358,8.845955809078727e-6,-2.021453482958727e-8,0.002062374125258358,9.062441716260134e-6,-2.0435474508193457e-8,0.0020627874895708226,9.348364762479418e-6,-2.072826871336509e-8,0.0020631169945883126,9.669654112154566e-6,-2.1058015950605946e-8,0.0020633560604633263,9.98198746864013e-6,-2.137908652587735e-8,0.002063517288428266,1.023877017749716e-5,-2.164330411583651e-8,0.002063632645942536,1.0401139220424818e-5,-2.1810299545772995e-8,0.0020637491502467223,1.0448183572471843e-5,-2.185815206205818e-8,0.0020639198525462597,1.0385066085844465e-5,-2.1791885352537092e-8,0.002064190922547863,1.0246206042140799e-5,-2.1646843352671344e-8,0.002064587291919049,1.0090636415679369e-5,-2.1483949591921145e-8,0.0020651014652658243,9.988078798241432e-6,-2.13753442005915e-8,0.002065691367589172,9.998026570269695e-6,-2.1382754626188622e-8,0.002066291012197917,1.0149230388591655e-5,-2.153622147579785e-8,0.002066831501387849,1.0429452683376921e-5,-2.182338975756979e-8,0.002067263169333099,1.0791237145000513e-5,-2.2195367611649683e-8,0.002067568557615017,1.1170401662074308e-5,-2.2585814103541868e-8,0.0020677618994642912,1.1507219742502304e-5,-2.2932879418767003e-8,0.0020678786593962845,1.1760992660056131e-5,-2.319433420100162e-8,0.00206796228678175,1.1914801500387303e-5,-2.3352529680849556e-8,0.0020680536670884195,1.1972789302221374e-5,-2.3411612372762594e-8,0.002068185083895209,1.1954165594086708e-5,-2.339133460421787e-8,0.0020683778972125345,1.1887104070253944e-5,-2.3320744180844544e-8,0.002068642307553408,1.180390121082168e-5,-2.3233173740066774e-8,0.002068977856263579,1.1737393814191125e-5,-2.3162537647244684e-8,0.002069373999389383,1.1717978706675388e-5,-2.3140267827765654e-8,0.0020698107873335274,1.1770514429890422e-5,-2.3192140613020073e-8,0.0020702602014525747,1.1910715973072524e-5,-2.3334573248691355e-8,0.002070688939508567,1.2141252692424613e-5,-2.3570578997251697e-8,0.0020710632916822844,1.2448527390387745e-5,-2.3886375187523575e-8,0.002071356066541742,1.2801803268012288e-5,-2.4250382510760558e-8,0.0020715543319876706,1.3156451701310057e-5,-2.4616491549786515e-8,0.00207166551766087,1.3462116971780244e-5,-2.493246716960177e-8,0.002071719050649512,1.3674624989544023e-5,-2.5152297788431047e-8,0.0020717617377544535,1.3768431742533288e-5,-2.524915847137308e-8,0.0020718472574079074,1.374550081599251e-5,-2.5224700784713937e-8,0.0020720223622184525,1.363727582508806e-5,-2.5111195478472052e-8,0.0020723137031515636,1.3498471162329926e-5,-2.496519243244624e-8,0.002072719191338335,1.339381780152275e-5,-2.485385332221292e-8,0.002073206795757431,1.338096643139214e-5,-2.483723759380846e-8,0.0020737219362692,1.3494245133198445e-5,-2.4951381108780162e-8,0.00207420211020392,1.373455339359368e-5,-2.5197661804572466e-8,0.0020745944143773383,1.4069430089365293e-5,-2.554271199173207e-8,0.002074869746023746,1.4443723774723879e-5,-2.5929405831806994e-8,0.0020750285128816304,1.479667972622433e-5,-2.6294607590510123e-8,0.0020750966176363173,1.5078544268788864e-5,-2.6586483364644268e-8,0.0020751148669499956,1.5260889492796408e-5,-2.677529701011583e-8,0.0020751270004247535,1.5338783722705668e-5,-2.6855711891848633e-8,0.0020751704833224575,1.5326746513909972e-5,-2.684261106263222e-8,0.0020752715762822763,1.5251984116094389e-5,-2.6764080409271047e-8,0.002075444009124103,1.5147762629496005e-5,-2.6654533703698157e-8,0.002075689729548116,1.504827746606285e-5,-2.6549398220846943e-8,0.002076000366210549,1.4985082629739757e-5,-2.6481430881895264e-8,0.002076358657231711,1.498441301720375e-5,-2.6477967033587838e-8,0.0020767397992757677,1.5064587977735741e-5,-2.6558240543651232e-8,0.002077113259954405,1.5233004156103975e-5,-2.6730240753699176e-8,0.0020774459186594374,1.548284453443912e-5,-2.6987226620384064e-8,0.002077707337417931,1.5790500049088474e-5,-2.7304945193864276e-8,0.002077877261826839,1.6115682164498162e-5,-2.764165309505029e-8,0.0020779538822941765,1.6406603632449e-5,-2.7943458192743133e-8,0.0020779594398716464,1.6611353072832964e-5,-2.8156170195329946e-8,0.0020779390055978278,1.6693382219093287e-5,-2.824146792653341e-8,0.0020779502913158923,1.6645409426593984e-5,-2.8191416586278918e-8,0.002078046844161103,1.6494938438233428e-5,-2.803425405045996e-8,0.0020782610782756087,1.6297779276038386e-5,-2.782772424649056e-8,0.0020785941150732565,1.612175588363035e-5,-2.7642241561896423e-8,0.0020790159587568842,1.6027141518751153e-5,-2.754063775278662e-8,0.0020794748756735038,1.6050743503202965e-5,-2.756160492638588e-8,0.0020799118940896845,1.619791239208086e-5,-2.7711253577368164e-8,0.0020802757626315633,1.6443513592555717e-5,-2.7963924844698012e-8,0.0020805345246273253,1.674043522617959e-5,-2.8270877063799093e-8,0.002080681226938013,1.7032634096537527e-5,-2.857380300224129e-8,0.002080732951995497,1.7268943244941685e-5,-2.881925151534997e-8,0.002080724194408864,1.7413982316484317e-5,-2.8970092565580946e-8,0.0020806971435383278,1.745367834708195e-5,-2.901136620869484e-8,0.0020806920260737966,1.7394912621893336e-5,-2.8949975367327408e-8,0.002080739988704213,1.72607815502705e-5,-2.8809768850635676e-8,0.002080859515267317,1.70838985357426e-5,-2.8624560861473263e-8,0.0020810559636607064,1.6899885539921436e-5,-2.8431349761988563e-8,0.0020813230557203376,1.6742274751481572e-5,-2.8265022453786016e-8,0.0020816451171855417,1.6639033795220282e-5,-2.8154767386943654e-8,0.0020819993189068113,1.6610203007369465e-5,-2.812164312243963e-8,0.0020823577851628115,1.6665911699555345e-5,-2.817650914736122e-8,0.0020826899633292987,1.680426930790959e-5,-2.8317770861029884e-8,0.002082966018551884,1.7009150846059025e-5,-2.852896394235378e-8,0.002083162073066397,1.7248756752608075e-5,-2.8777135556946513e-8,0.0020832674579102563,1.7476932878513038e-5,-2.9014151463292816e-8,0.0020832924694833593,1.7639846001218737e-5,-2.9183675584427234e-8,0.0020832727739094805,1.7689422424584678e-5,-2.9235274256026354e-8,0.0020832653064138955,1.7601030960855478e-5,-2.9142946193151746e-8,0.0020833330245630757,1.7387646058308056e-5,-2.8919920603682593e-8,0.002083522753935488,1.7100955802243916e-5,-2.8619808329920083e-8,0.0020838468179513333,1.6815710705222776e-5,-2.8320330725747508e-8,0.002084278439419095,1.6604039049236554e-5,-2.8096659219011013e-8,0.0020847625566020353,1.6512511531122853e-5,-2.799759622144117e-8,0.002085235023267062,1.6551414097566436e-5,-2.8034351982823543e-8,0.0020856408987005555,1.6697366798988196e-5,-2.8183104552679034e-8,0.0020859461245631033,1.690450794263447e-5,-2.8396456266918066e-8,0.0020861415082864985,1.7118421130651345e-5,-2.8617819915088376e-8,0.0020862405867537945,1.7288696492304295e-5,-2.8794501922373435e-8,0.0020862736330299575,1.737809826474195e-5,-2.8887350772104285e-8,0.002086279804006059,1.7367702998098975e-5,-2.8876251011356654e-8,0.0020862990421835854,1.7258011428210435e-5,-2.8761400589556528e-8,0.002086365115922038,1.7066487746353264e-5,-2.8560802190087286e-8,0.0020865008408489875,1.682256943694604e-5,-2.8305053907286174e-8,0.002086715919263949,1.656156014476701e-5,-2.8030941270095572e-8,0.0020870071990390262,1.6318714925791584e-5,-2.7775237638634485e-8,0.0020873606761909773,1.612444436636325e-5,-2.7569706696292268e-8,0.0020877543487093165,1.6001012803300085e-5,-2.7437694306513178e-8,0.0020881612220372825,1.596050578626689e-5,-2.7392040420271822e-8,0.002088552230288847,1.6003549082607828e-5,-2.7433729548710437e-8,0.0020888992435952967,1.611837191802468e-5,-2.7550832366391624e-8,0.0020891786471092483,1.6280160651193357e-5,-2.7717702617435652e-8,0.0020893761169842166,1.6451350603092855e-5,-2.7895164399045403e-8,0.002089492678959948,1.6584503687808136e-5,-2.803347849401429e-8,0.0020895506186168747,1.6629975070205594e-5,-2.8080421596796448e-8,0.0020895956639829702,1.654957839540818e-5,-2.799570583593579e-8,0.002089690395538273,1.6333804471878623e-5,-2.7769090685971695e-8,0.002089896033722322,1.6014373257708863e-5,-2.7433529126734662e-8,0.0020902475806469254,1.5661140369289124e-5,-2.7061908434893643e-8,0.002090735796633609,1.5359270098771867e-5,-2.67432120407e-8,0.00209130859780546,1.5176778132377433e-5,-2.6548672939580005e-8,0.002091891842946931,1.5140754055244766e-5,-2.6506954770801897e-8,0.0020924165245282877,1.5233761825979138e-5,-2.660030176659009e-8,0.002092838108888907,1.5407435049015967e-5,-2.6778581186473033e-8,0.0020931426145603437,1.5602073463539797e-5,-2.697961713028947e-8,0.002093342524197185,1.576303163752042e-5,-2.7146256028244872e-8,0.0020934681224012187,1.5850536534203465e-5,-2.7236664035016808e-8,0.002093558330924372,1.584356238962605e-5,-2.7228488040135843e-8,0.002093652929189025,1.5739702587511593e-5,-2.711885649216876e-8,0.002093786585558144,1.5552692842214613e-5,-2.6921891528832596e-8,0.002093984610700063,1.530847635566744e-5,-2.6664625730728237e-8,0.002094260408522702,1.5040327883243397e-5,-2.6381866829385993e-8,0.0020946146605398033,1.4783590396206654e-5,-2.6110629573656682e-8,0.0020950361908124754,1.4570612940870071e-5,-2.5884801421741135e-8,0.002095504287982403,1.4426464136665532e-5,-2.573066979561237e-8,0.0020959920098880948,1.436589162782448e-5,-2.566378974830331e-8,0.0020964698904481064,1.4391654082877689e-5,-2.568727581986414e-8,0.002096909672107035,1.4494027260271335e-5,-2.5791262682142066e-8,0.002097287955238897,1.4651254484391914e-5,-2.595327902709219e-8,0.0020975898588619776,1.483086589384205e-5,-2.6139490483611765e-8,0.0020978129239909112,1.4992194433574303e-5,-2.6307227096703933e-8,0.002097971126731232,1.5091109530391926e-5,-2.6409931481351222e-8,0.002098097703998993,1.5088284225384236e-5,-2.6405927211233465e-8,0.002098243998954342,1.4961356647547054e-5,-2.6271336291410024e-8,0.002098470643735973,1.4718558663920096e-5,-2.601451060716538e-8,0.002098829142769062,1.4406847413029446e-5,-2.568461021728266e-8,0.002099338584112944,1.4104891981013634e-5,-2.5364227738068856e-8,0.002099970577078888,1.389718581053549e-5,-2.51422113367583e-8,0.0021006554024350413,1.3839945599057747e-5,-2.5077873022135188e-8,0.0021013089162565824,1.3939075366767634e-5,-2.5177804466452004e-8,0.0021018642410454017,1.4152966541286029e-5,-2.5398697748388907e-8,0.002102290544234685,1.4414719463911722e-5,-2.5670555129297722e-8,0.002102593458372229,1.4657717276490355e-5,-2.5923475251490083e-8,0.002102803823419274,1.4832523419603329e-5,-2.610539494337901e-8,0.002102963997051854,1.4912874042482475e-5,-2.6188440763515092e-8,0.00210311701985688,1.489429901720448e-5,-2.6167581509441245e-8,0.00210329981316489,1.4789514144286761e-5,-2.605589711490424e-8,0.0021035395604685125,1.4623216960515582e-5,-2.5879181897882027e-8,0.002103852012857229,1.4427256816148642e-5,-2.5670874573032203e-8,0.0021042409306866908,1.4236166858646234e-5,-2.546731313778813e-8,0.002104698454320543,1.4082882456060734e-5,-2.53031751996881e-8,0.0021052064752133293,1.3994654154339699e-5,-2.5207158431920774e-8,0.0021057391315831625,1.3989407920046565e-5,-2.519818244598461e-8,0.002106266387320575,1.4073050130678136e-5,-2.5282607415599342e-8,0.002106758334830071,1.423820083636465e-5,-2.5452924691916057e-8,0.0021071897012097697,1.4464569256647e-5,-2.568810271807864e-8,0.0021075440763852053,1.4720984983073159e-5,-2.5955605114652786e-8,0.002107817455023985,1.4968991587208612e-5,-2.6215033812032676e-8,0.0021080207898770947,1.5167881763610569e-5,-2.6423345985019315e-8,0.0021081811782254606,1.52812712911579e-5,-2.6541802838830476e-8,0.002108340721814446,1.5285367127017497e-5,-2.6544815228638046e-8,0.002108551393130802,1.5178224387244792e-5,-2.6429882679400344e-8,0.0021088642657054028,1.4987405902763008e-5,-2.6225817522741596e-8,0.0021093131823441873,1.477109413125047e-5,-2.5993980396136906e-8,0.0021098973634679687,1.4606796678395606e-5,-2.5816350529623914e-8,0.0021105729078048107,1.4566334520348138e-5,-2.5769076832392603e-8,0.0021112628777701157,1.4686483996552583e-5,-2.589140375989459e-8,0.002111884963727069,1.49524858304974e-5,-2.616814292368397e-8,0.0021123820416213326,1.530564027223351e-5,-2.653758083888853e-8,0.002112738443062604,1.566943862865359e-5,-2.6919021383359056e-8,0.0021129763380782042,1.597734406587063e-5,-2.7242128079128386e-8,0.002113139906608551,1.6188913189144726e-5,-2.7463982116337144e-8,0.0021132785147635735,1.6292255587917617e-5,-2.7571731956963736e-8,0.002113435244892276,1.6298231436790853e-5,-2.7576542617677282e-8,0.002113641467647694,1.623231108640538e-5,-2.750507948119659e-8,0.0021139155020888497,1.612742596429646e-5,-2.739200662875825e-8,0.002114263195353226,1.601868102419684e-5,-2.7274398004963558e-8,0.002114679097938746,1.5939462619916927e-5,-2.7187584649230205e-8,0.002115147857818045,1.591820498712063e-5,-2.7161697731839154e-8,0.0021156460082405507,1.5975354031712748e-5,-2.7218453269601503e-8,0.0021161445333496127,1.6120489838517026e-5,-2.736813658476198e-8,0.002116612541248858,1.6350066999505276e-5,-2.7607239032229045e-8,0.002117021983644663,1.6646569377117553e-5,-2.791754490148783e-8,0.002117352837098394,1.697979911393296e-5,-2.826741083990463e-8,0.0021175978015787107,1.731065634053247e-5,-2.8615637817191073e-8,0.00211776543378165,1.759725263509948e-5,-2.8917829165943654e-8,0.002117880769420787,1.7802584133189674e-5,-2.9134478291953385e-8,0.002117982886203447,1.7902584529889876e-5,-2.9239569317390042e-8,0.002118119198387002,1.7893289828263934e-5,-2.922832774864068e-8,0.002118336487991736,1.7795584944785858e-5,-2.9122440610658274e-8,0.0021186692843823997,1.7655389538035962e-5,-2.8970402749374115e-8,0.0021191276345471233,1.7536852324466382e-5,-2.8840362727093884e-8,0.0021196884143433207,1.7507199823531867e-5,-2.880401634238384e-8,0.002120295925762307,1.7615411346021366e-5,-2.8913861014445143e-8,0.0021208758106100725,1.787247903713528e-5,-2.9182079529307654e-8,0.002121359406182991,1.8244267405424016e-5,-2.9572807067690778e-8,0.0021217074721560777,1.8663209769622012e-5,-3.0014474124992184e-8,0.0021219209004431955,1.905356541542978e-5,-3.042663828206199e-8,0.0021220343298265485,1.9356536768551152e-5,-3.0746705244532125e-8,0.002122099166839674,1.954377814105041e-5,-3.094431491310143e-8,0.002122166330543905,1.9617217855782224e-5,-3.102119259421685e-8,0.0021222752180405586,1.9600531064406503e-5,-3.100215517299388e-8,0.002122449658514504,1.952878967527067e-5,-3.092419165467688e-8,0.0021226984612435964,1.9440127761138346e-5,-3.082765962692926e-8,0.002123017846957808,1.9370314072744265e-5,-3.075052790344494e-8,0.0021233940681903195,1.934948928989278e-5,-3.0724888774326296e-8,0.0021238056794888474,1.9399952935627528e-5,-3.077458440678296e-8,0.002124225682580438,1.9534193054597844e-5,-3.091310551719368e-8,0.002124624113565031,1.9752886458047202e-5,-3.1141464105636413e-8,0.002124971655833702,2.0043233580223036e-5,-3.144639940286134e-8,0.00212524450155675,2.037859705176521e-5,-3.179992728445566e-8,0.002125429949440885,2.0720660307119964e-5,-3.216153381034379e-8,0.0021255313735390655,2.1024952911718785e-5,-3.2483951488909524e-8,0.0021255706390746042,2.1249553405534983e-5,-3.272236244662322e-8,0.0021255862274255134,2.136531580176944e-5,-3.284530096658392e-8,0.002125626472329969,2.136477599867833e-5,-3.2844230643420137e-8,0.0021257389764561077,2.1266765123494018e-5,-3.273861136499655e-8,0.0021259586471253046,2.1114766388613177e-5,-3.2574325849611996e-8,0.0021262973922635143,2.0968604798671925e-5,-3.241497651320302e-8,0.0021267384416393392,2.0890666115759917e-5,-3.2327268627746654e-8,0.0021272376715695132,2.0929425811587144e-5,-3.236339970670092e-8,0.002127733046172089,2.110460424404699e-5,-3.2545061768599696e-8,0.00212816092546539,2.1399236109442378e-5,-3.2854762929754035e-8,0.0021284746737500223,2.176302809822261e-5,-3.3239236614057686e-8,0.002128658496133636,2.212740460159936e-5,-3.362543623506609e-8,0.0021287304336883744,2.2426834845535454e-5,-3.3943333219980947e-8,0.0021287335646911943,2.2617434207905126e-5,-3.414584047635682e-8,0.0021287204228760234,2.2685679731977404e-5,-3.421817395035784e-8,0.0021287380406940413,2.264602236182866e-5,-3.417535947240264e-8,0.002128818715188701,2.2531501692113913e-5,-3.4052283410800604e-8,0.002128977344015476,2.2382911676892006e-5,-3.3892197642410027e-8,0.002129213263803856,2.2240213464310166e-5,-3.373760006185234e-8,0.0021295139322477768,2.2137245808817076e-5,-3.362460002842891e-8,0.0021298586205894944,2.2099046795842652e-5,-3.358004972356987e-8,0.0021302214146577676,2.2140545104573738e-5,-3.362013028869592e-8,0.0021305737006618716,2.2265607580957118e-5,-3.374931398457121e-8,0.0021308867762918587,2.2466010723704024e-5,-3.39592257518173e-8,0.002131135293920836,2.2720594046935103e-5,-3.4227667717305434e-8,0.0021313019334212695,2.2995565753170124e-5,-3.451884933521096e-8,0.0021313829342262734,2.3247460182788705e-5,-3.4786456209133385e-8,0.0021313929103826883,2.3430080081429465e-5,-3.4981018338903236e-8,0.0021313662623369065,2.35053775592328e-5,-3.506154647311194e-8,0.002131352534668617,2.3455775394926864e-5,-3.500875472352498e-8,0.0021314050619435174,2.3293157757724045e-5,-3.483475480248656e-8,0.0021315656878382726,2.305959461858975e-5,-3.458394904972025e-8,0.002131851148769884,2.2817817875395575e-5,-3.432300884872676e-8,0.002132246675708553,2.2634145895239077e-5,-3.412278123476084e-8,0.0021327093056224787,2.255991732479814e-5,-3.4038512859965103e-8,0.0021331794386085386,2.261762912569421e-5,-3.4094941293936804e-8,0.002133596614516856,2.2795606804280943e-5,-3.4280365800889207e-8,0.0021339148569076657,2.3052078776754165e-5,-3.455073970041519e-8,0.0021341135296762083,2.3327034579694484e-5,-3.484217778475803e-8,0.0021342009716787884,2.355832491670355e-5,-3.508814955727273e-8,0.0021342101969445745,2.3697300658380293e-5,-3.523629751598651e-8,0.0021341884075972216,2.3719450332254015e-5,-3.525994944230765e-8,0.002134184081791398,2.3627331849970435e-5,-3.5161372712859956e-8,0.002134235900463689,2.3446066878692636e-5,-3.4967036409302774e-8,0.0021343663946126897,2.321429430328426e-5,-3.471798296710547e-8,0.0021345807976598918,2.2974350116389325e-5,-3.4459344612988514e-8,0.0021348696549837566,2.2764450779378168e-5,-3.4231980765256686e-8,0.0021352131046345666,2.2613905870942357e-5,-3.4067347153649095e-8,0.0021355851791665065,2.25409643711599e-5,-3.398518306415485e-8,0.002135957353588875,2.255223300982052e-5,-3.3992879723749303e-8,0.0021363013822437923,2.264265540717151e-5,-3.408542886166249e-8,0.0021365919676518924,2.279553658100697e-5,-3.4245382178955386e-8,0.0021368099415358917,2.298274820199354e-5,-3.444296877039347e-8,0.0021369464146205742,2.3165964903851673e-5,-3.463731317033913e-8,0.0021370076236995232,2.3300428516159704e-5,-3.4780406073762714e-8,0.0021370188901841084,2.334275576213467e-5,-3.482548254690987e-8,0.002137024662802771,2.3262920180390915e-5,-3.473993474880969e-8,0.0021370813223880038,2.3057492795026685e-5,-3.451958523389752e-8,0.002137241889275746,2.2757801904735166e-5,-3.41974981982623e-8,0.0021375370262618257,2.2426116340509338e-5,-3.3839966919214845e-8,0.002137961316631726,2.213800200907653e-5,-3.3527737842564464e-8,0.0021384728126343628,2.1957459800264673e-5,-3.332951347872889e-8,0.002139006670366777,2.191643370582827e-5,-3.3280036206354196e-8,0.0021394959229136664,2.2007302232413204e-5,-3.3371904617377737e-8,0.0021398901271324055,2.2189143712365275e-5,-3.3562023526722955e-8,0.002140166006414651,2.2402515162981413e-5,-3.378718549615929e-8,0.002140329077781706,2.2586184572995143e-5,-3.398186921720036e-8,0.0021404083035632985,2.2691063196128188e-5,-3.409319354061641e-8,0.002140446731689183,2.2688976940126358e-5,-3.409045739764433e-8,0.002140490895281052,2.2575699890952926e-5,-3.396857223236857e-8,0.0021405812375513067,2.2368761539972847e-5,-3.374586429282327e-8,0.002140745261299301,2.21013187905107e-5,-3.345758704823717e-8,0.002140994332456639,2.181402372302832e-5,-3.314720913566537e-8,0.002141324077070165,2.15469856889004e-5,-3.285775427864785e-8,0.002141717448243737,2.1333424920190157e-5,-3.262494699138589e-8,0.0021421491254591573,2.1195757227350775e-5,-3.247299004550511e-8,0.0021425900057506363,2.1143998775028036e-5,-3.2412859574264454e-8,0.002143011062769476,2.117578153748411e-5,-3.2442332125159627e-8,0.0021433864887417924,2.1277166088685482e-5,-3.254683206575627e-8,0.0021436964440635616,2.142377656843826e-5,-3.270056832632809e-8,0.0021439298869587705,2.1582271289495213e-5,-3.2867992137633203e-8,0.0021440878674806683,2.1712763255525305e-5,-3.3006289361086e-8,0.002144187054590783,2.1773439803346106e-5,-3.3070310510598916e-8,0.002144262009093983,2.172867744059509e-5,-3.302135431596869e-8,0.002144363336494184,2.156066898233932e-5,-3.2839788635029706e-8,0.0021445484486645283,2.128161554298987e-5,-3.253826914107641e-8,0.0021448640499980975,2.093968006406232e-5,-3.216820242252745e-8,0.0021453256085358927,2.0610778355504582e-5,-3.181096877059883e-8,0.002145905198301666,2.0374493068902587e-5,-3.155211428654284e-8,0.00214653761622983,2.028404497865664e-5,-3.144915450204835e-8,0.002147143609271417,2.0346789600608755e-5,-3.151058660106004e-8,0.0021476575414585346,2.0525272704293914e-5,-3.1696854344447995e-8,0.002148045581613403,2.0755200980876327e-5,-3.193942834876001e-8,0.0021483090662633483,2.0968393190590092e-5,-3.2165288983192186e-8,0.002148476685362016,2.111059951237463e-5,-3.231601401750927e-8,0.002148592188673189,2.115054857145032e-5,-3.235756967674147e-8,0.0021487026050471423,2.108140192452833e-5,-3.2282037014221544e-8,0.002148849218208448,2.091738286919093e-5,-3.2104180012498956e-8,0.0021490617141141114,2.0687943158359667e-5,-3.185531826563116e-8,0.0021493552248900965,2.043093865495207e-5,-3.1576037272193084e-8,0.0021497299103959574,2.018578295980443e-5,-3.1308781112487576e-8,0.0021501726730506327,1.99873898678633e-5,-3.109124846202539e-8,0.0021506604730088547,1.986152543363258e-5,-3.0951322070678607e-8,0.0021511645783630928,1.9821951349432184e-5,-3.0903980935864254e-8,0.0021516549924586936,1.986945352369192e-5,-3.0950285248140185e-8,0.0021521044365688485,1.9992440843010033e-5,-3.107804747030246e-8,0.0021524916686676407,2.016856874486101e-5,-3.126355090492214e-8,0.0021528042317079527,2.0367018571783807e-5,-3.147390414350625e-8,0.002153040804545645,2.0551375958833374e-5,-3.167000555671362e-8,0.002153213305985311,2.0683403675124328e-5,-3.181050955508008e-8,0.002153348503797179,2.0728467991859314e-5,-3.185767901736995e-8,0.002153487865791758,2.06633838486928e-5,-3.178596101433709e-8,0.002153683336498533,2.0486260716953912e-5,-3.159278162166714e-8,0.0021539866168050876,2.022543685029994e-5,-3.130833435668043e-8,0.0021544317139913717,1.9941401323367558e-5,-3.099772567279643e-8,0.0021550161923323133,1.9714632358069782e-5,-3.074786370682314e-8,0.002155692720036186,1.961840203113644e-5,-3.0638105864892124e-8,0.0021563809762338523,1.9688010875520684e-5,-3.070702518398803e-8,0.0021569972223773057,1.990511081944595e-5,-3.0935392402114285e-8,0.002157485124027573,2.0207307545267066e-5,-3.125638734645144e-8,0.002157830955696959,2.0515501898373752e-5,-3.1584963952577884e-8,0.0021580591073866546,2.0761657983135865e-5,-3.1847730058857165e-8,0.0021582161445200332,2.0904745124936695e-5,-3.200013957830926e-8,0.0021583539825240404,2.0933500471754782e-5,-3.20295538061186e-8,0.0021585179343003775,2.0861021855106574e-5,-3.194956386357729e-8,0.0021587404344839763,2.071653038410741e-5,-3.179127525102121e-8,0.0021590389475030915,2.0537441620192218e-5,-3.159486520542445e-8,0.0021594163239126024,2.0362778417702688e-5,-3.140248197378161e-8,0.002159862527034524,2.02278948399552e-5,-3.12524698579826e-8,0.002160357285130327,2.0160345669093216e-5,-3.117480508185589e-8,0.002160873478204498,2.017687657565958e-5,-3.1187780101922056e-8,0.002161381090914999,2.028164028054539e-5,-3.1296077539601465e-8,0.0021618514304895253,2.0465857833124282e-5,-3.1490443368311834e-8,0.0021622611359319007,2.0709012451658273e-5,-3.174899334089471e-8,0.002162595566211041,2.0981352258249935e-5,-3.203986438715612e-8,0.0021628513653473066,2.1247405686018214e-5,-3.232489338007879e-8,0.0021630380775924086,2.1470340095996585e-5,-3.256419591015205e-8,0.0021631786722644116,2.1617083222566323e-5,-3.272164177108625e-8,0.00216330868415945,2.1664275769114177e-5,-3.277135694153426e-8,0.0021634731281762807,2.1605065487863532e-5,-3.2705257492733154e-8,0.0021637197852005,2.1455812436603205e-5,-3.254053477237097e-8,0.0021640877997709013,2.1259948537739125e-5,-3.232400898296171e-8,0.002164592603377122,2.108438739205041e-5,-3.212829934769005e-8,0.0021652124263154904,2.1004045458292953e-5,-3.2034996857797784e-8,0.002165885927123784,2.107545579977581e-5,-3.21059404679378e-8,0.002166528501769656,2.1310646054636276e-5,-3.235474767326647e-8,0.0021670632549307834,2.1668132745757332e-5,-3.273691349900394e-8,0.0021674499574846086,2.2069275229952522e-5,-3.3167461209084994e-8,0.002167695398646148,2.2430414143251984e-5,-3.355576152777364e-8,0.0021678424617177497,2.2691454458900874e-5,-3.383651203996052e-8,0.002167948850623929,2.2828166985303557e-5,-3.398307877885336e-8,0.0021680682294110717,2.2848871903014454e-5,-3.400396925492826e-8,0.002168239621410091,2.2783477264658934e-5,-3.393109259567893e-8,0.0021684843405062296,2.2671975588932204e-5,-3.380744770218485e-8,0.0021688073255370847,2.2555681481195456e-5,-3.367771500329707e-8,0.0021692001470083005,2.247154601714925e-5,-3.358207900819488e-8,0.0021696442585630864,2.2448607182279223e-5,-3.355228837104354e-8,0.0021701141864079454,2.250565226458912e-5,-3.360901884393857e-8,0.0021705808201399487,2.2649663627314837e-5,-3.376013066261044e-8,0.002171014994842116,2.2875029470842755e-5,-3.399981066861581e-8,0.0021713914000250586,2.3163823595123173e-5,-3.430889349840126e-8,0.002171692521788873,2.348758011808522e-5,-3.4656770876542255e-8,0.0021719120261017694,2.381072758144914e-5,-3.500503838425244e-8,0.002172056961163761,2.4095477309522668e-5,-3.531268029929626e-8,0.002172148267756013,2.430773141450824e-5,-3.5542386815216575e-8,0.0021722192183669113,2.4423369339532766e-5,-3.5667380799741086e-8,0.0021723115797911727,2.443412716691192e-5,-3.567793407850738e-8,0.002172469370856416,2.435222243916228e-5,-3.558662383347489e-8,0.002172730141133899,2.4212483806263987e-5,-3.5430893243344456e-8,0.0021731143123856107,2.406994280862633e-5,-3.527059410845282e-8,0.0021736147553494305,2.399049051461565e-5,-3.517783640369402e-8,0.0021741911382967354,2.4033616638707532e-5,-3.5218066388396594e-8,0.0021747750128882433,2.4230582571380168e-5,-3.542607458320517e-8,0.0021752887669595176,2.4567528571206925e-5,-3.5787372573666643e-8,0.002175673052155437,2.49852415759974e-5,-3.623781078312394e-8,0.002175908854725856,2.5399662837313294e-5,-3.668591393596756e-8,0.0021760215228088064,2.5733306593570758e-5,-3.704716213606398e-8,0.002176065901163682,2.5940343519971294e-5,-3.727134201842648e-8,0.0021761034783204496,2.6014370722419524e-5,-3.735101978943853e-8,0.0021761840080405325,2.598057227504093e-5,-3.731306905929495e-8,0.0021763370696546024,2.5881272618678495e-5,-3.7203079961238056e-8,0.002176571964578955,2.5762734966788867e-5,-3.7071131130532555e-8,0.002176881812643163,2.5666444320064544e-5,-3.6962369095902545e-8,0.002177248530362033,2.562462645803108e-5,-3.6912097310867254e-8,0.0021776471185262275,2.56583990067598e-5,-3.694366624460091e-8,0.0021780490847102727,2.577707907708006e-5,-3.706762059466764e-8,0.002178425470464016,2.5977906113517757e-5,-3.7281338682605485e-8,0.002178749995054507,2.6246122306122735e-5,-3.7569099018844795e-8,0.00217900258816672,2.6555835903572176e-5,-3.7903003824289374e-8,0.0021791731432856958,2.687235363923373e-5,-3.8245472427078433e-8,0.002179264774642755,2.715651610226576e-5,-3.8553882093067663e-8,0.0021792954993946666,2.737100012726711e-5,-3.878734993897014e-8,0.0021792972905228126,2.7487801409019163e-5,-3.891485525836279e-8,0.0021793118845096627,2.7495392292255558e-5,-3.8923106738733907e-8,0.0021793835257311045,2.740366279969572e-5,-3.8822101383632065e-8,0.0021795497062576503,2.7244969924330507e-5,-3.864650695887784e-8,0.0021798315902990814,2.70702521421955e-5,-3.845164962605757e-8,0.0021802262299320907,2.693987847972113e-5,-3.8303651911103566e-8,0.0021807030536763806,2.6909868400577606e-5,-3.826434729027413e-8,0.002181207209043901,2.7015773686396604e-5,-3.837346895969279e-8,0.002181671386070132,2.7258810728352984e-5,-3.8633200520179275e-8,0.0021820347882051537,2.7600628586197033e-5,-3.9002200115334744e-8,0.002182263235355336,2.7971926183414146e-5,-3.940491263576584e-8,0.0021823611556105044,2.829417321789066e-5,-3.9755366604696456e-8,0.0021823687183090976,2.8505597620353956e-5,-3.9985695960752894e-8,0.002182345504518596,2.8579166128070304e-5,-4.006587420492795e-8,0.00218234968005574,2.852535965389795e-5,-4.000679786407413e-8,0.0021824224556048176,2.838187447749541e-5,-3.984911376569704e-8,0.0021825822079256305,2.8198197432587352e-5,-3.964648840870845e-8,0.002182826606343748,2.802230424969246e-5,-3.9451180587015695e-8,0.0021831385394179867,2.7892584515013404e-5,-3.930524420287103e-8,0.002183492363313434,2.7834558372804433e-5,-3.9236882225582924e-8,0.00218385884397354,2.7860496490932013e-5,-3.9259933128383583e-8,0.0021842086588251997,2.7970168372585447e-5,-3.937460019364952e-8,0.0021845150758582356,2.815172900254157e-5,-3.956836422313752e-8,0.0021847565668936496,2.838260505830918e-5,-3.9816914283289737e-8,0.002184919839335821,2.8630898322059892e-5,-4.0085638458821643e-8,0.002185003215576358,2.885819450463714e-5,-4.033263381846127e-8,0.00218501956630861,2.9024619642616696e-5,-4.0514173513386934e-8,0.002184997331671042,2.9096343678574037e-5,-4.0592881414629923e-8,0.0021849779434766005,2.9054458176741742e-5,-4.054747138967016e-8,0.0021850086809995705,2.890265974050007e-5,-4.0381253019101765e-8,0.0021851317555203866,2.867039550492026e-5,-4.012573894978999e-8,0.002185372477190764,2.8408972654841787e-5,-3.983659301605007e-8,0.002185730455124099,2.8180528313815657e-5,-3.958174677758403e-8,0.0021861771693066417,2.804251014407566e-5,-3.942450075684918e-8,0.002186661265337064,2.803206489062113e-5,-3.940634962351665e-8,0.0021871205644257144,2.8154906091556042e-5,-3.953453886956924e-8,0.0021874978725242504,2.8382145494403323e-5,-3.977826745766282e-8,0.002187756423815575,2.865671184733779e-5,-4.0075466582978284e-8,0.0021878902551987,2.8908425992492547e-5,-4.0349239996036213E-08,0.0021879255831569328,2.907366219308399e-5,-4.052949755270081e-8,0.002187912085216684,2.9112986253584563e-5,-4.057244739063578e-8,0.0021879072199879612,2.9020292931549317e-5,-4.0470759660277784E-08,0.0021879598630596396,2.8820635503511565e-5,-4.025130399634947e-8,0.0021880992812219192,2.855917509608077e-5,-3.996313733776403e-8,0.002188332056726784,2.8287020621832985e-5,-3.9662060963515264e-8,0.0021886456060208528,2.804939262502735e-5,-3.9397673106991304e-8,0.0021890148819920466,2.7878715380127772e-5,-3.9205757381181164e-8,0.002189409156221178,2.7792378102702624e-5,-3.9105747978824426e-8,0.0021897972687176166,2.7793455583849522e-5,-3.9101439536603146e-8,0.0021901511374968234,2.7872602070577086e-5,-3.9183008468822456e-8,0.0021904481235000325,2.80099950384596e-5,-3.932910624744156e-8,0.002190673074057688,2.8177065500827853e-5,-3.950871255388833e-8,0.0021908206554662854,2.8338483116444323e-5,-3.9683248872783535e-8,0.002190898034144987,2.8455330491275332e-5,-3.980999342254779e-8,0.002190927155960091,2.8490498477234655e-5,-3.9847964078533655e-8,0.0021909449561215767,2.841676049523602e-5,-3.9766800450551744e-8,0.002190999293289918,2.8226395593368268e-5,-3.955740530076425e-8,0.0021911391604951622,2.7938931175521973e-5,-3.924055987672371e-8,0.0021914004248092763,2.7602074739011113e-5,-3.886808440988153e-8,0.00219179202133541,2.7282286475806473e-5,-3.851264350198292e-8,0.002192289357213238,2.704625873866707e-5,-3.82475557684289e-8,0.0021928392696263337,2.6940105864173445e-5,-3.812399760810237e-8,0.0021933752027235077,2.697500409955819e-5,-3.815512007691709e-8,0.002193836370061701,2.712470614302269e-5,-3.8313049345572726e-8,0.0021941837606845793,2.7334592335765326e-5,-3.8538514178115646e-8,0.0021944084668189573,2.753776194502866e-5,-3.875830475133487e-8,0.002194531286417225,2.7672583796492192e-5,-3.890450991618433e-8,0.002194595052600508,2.769704623340426e-5,-3.893040017878978e-8,0.0021946525033668582,2.759686253141467e-5,-3.881953924029014e-8,0.002194753120305771,2.7386090076476726e-5,-3.858667842959779e-8,0.0021949323250686314,2.7100914061041817e-5,-3.82710888669168e-8,0.0021952055424206626,2.678902702000713e-5,-3.792497063521771e-8,0.0021955679291575467,2.6498107213706706e-5,-3.760078207771899e-8,0.0021959986568907772,2.626660204683497e-5,-3.73410335002723e-8,0.0021964674766541165,2.6118501228737073e-5,-3.7172439057852775e-8,0.0021969413113013753,2.60620374695922e-5,-3.7104408935529385e-8,0.0021973894608135576,2.6091132908844254e-5,-3.7130604436828466e-8,0.00219778705276762,2.6188108161646412e-5,-3.7231911539965425e-8,0.0021981171577645352,2.6326541689641457e-5,-3.7379570709525906e-8,0.0021983722862443157,2.647389410124768e-5,-3.753800898406534e-8,0.0021985558494707763,2.6594192238440678e-5,-3.766770585522208e-8,0.0021986837479933113,2.6651537795907375e-5,-3.772898009889921e-8,0.0021987855132714115,2.6615420265459276e-5,-3.76878288712398e-8,0.0021989034252902504,2.646839864760911e-5,-3.752446513210713e-8,0.002199087291365176,2.621516384114665e-5,-3.7243437839789706e-8,0.002199383129417582,2.588937576288623e-5,-3.688130790905145e-8,0.0021998169911259277,2.555241378810931e-5,-3.650538638656394e-8,0.0022003802001003703,2.5279351320183844e-5,-3.619836871761591e-8,0.0022010254563611044,2.513422877506996e-5,-3.603114654032077e-8,0.002201679461595271,2.5145548720641303e-5,-3.603578324988553e-8,0.0022022676262901954,2.5295397762231912e-5,-3.619337702747384e-8,0.0022027384098715387,2.552770043771887e-5,-3.6442911016991864e-8,0.0022030761947726936,2.5769490088737933e-5,-3.6704451465803936e-8,0.0022032999837505608,2.5953710056367697e-5,-3.690413133727294e-8,0.002203452495899009,2.6035101872089713e-5,-3.699166081129466e-8,0.00220358608653898,2.5996726968420892e-5,-3.6947657521712005e-8,0.0022037500668679825,2.584868135819004e-5,-3.678246540474378e-8,0.0022039815599960576,2.562183741456571e-5,-3.6529498934363496e-8,0.0022043004146107474,2.5359154396673204e-5,-3.6235824598435174e-8,0.0022047079845341367,2.510642092784503e-5,-3.595198121736966e-8,0.002205189271399241,2.490392157422305e-5,-3.5722695471243174e-8,0.0022057175485827437,2.4780291065975067e-5,-3.557995202152093e-8,0.002206260229099632,2.4749273402388118E-05,-3.553929040719807e-8,0.0022067847011294868,2.4809362891213233e-5,-3.559935513770356e-8,0.002207263133432532,2.494571788740346e-5,-3.574402276444476e-8,0.0022076757646234684,2.5133391696059046e-5,-3.594599847110066e-8,0.0022080127950028375,2.534094893318031e-5,-3.61707958606488e-8,0.0022082753512539274,2.5533983406702185e-5,-3.6380543421501094e-8,0.0022084759594946783,2.5678586499651885e-5,-3.653770547250637e-8,0.0022086387115195184,2.5745202620986414e-5,-3.6609273231779453e-8,0.002208798772150077,2.5713550443386234e-5,-3.6572240060008746e-8,0.002208999993716592,2.557900040024047e-5,-3.6420802882875486e-8,0.0022092887458073814,2.5359488384672675e-5,-3.6174216899908184e-8,0.0022097025167608603,2.5099812062111692e-5,-3.588172643050776e-8,0.0022102543881308777,2.4867936743048755e-5,-3.56185625830845e-8,0.0022109195242995543,2.4738476511340537e-5,-3.5467648422950415e-8,0.002211634051687777,2.4765337819048855e-5,-3.5489237515539794e-8,0.002212313150289902,2.495636083716276e-5,-3.5692713187243686e-8,0.0022128823429647753,2.526671790565515e-5,-3.602912278257172e-8,0.0022133046472050132,2.5616981016093155e-5,-3.641102991172894e-8,0.0022135888531115686,2.5924578071327065e-5,-3.6747220225829005e-8,0.0022137783155401383,2.6130440340332528e-5,-3.69721280559337e-8,0.0022139309577410685,2.6210438172246873e-5,-3.705850643683236e-8,0.0022141014474845195,2.6172901848814536e-5,-3.7014821330468624e-8,0.0022143303324376486,2.604895373490618e-5,-3.687478915277662e-8,0.002214639802017609,2.5881451700368056e-5,-3.668537821684993e-8,0.0022150338963010646,2.5715502764954452e-5,-3.649643735626844e-8,0.0022155011447347337,2.5591302194405776e-5,-3.6352737563078843e-8,0.0022160184567097205,2.553907975187675e-5,-3.628822151576024e-8,0.0022165557263009628,2.5575938852458807e-5,-3.63223191891732e-8,0.0022170807551756427,2.5704576800506107e-5,-3.6458407892383054e-8,0.002217564030701961,2.591385422119361e-5,-3.668441906146322e-8,0.0022179828448299827,2.6181049859668053e-5,-3.697537858622144e-8,0.0022183242804138395,2.6475407977684876e-5,-3.729737331333177e-8,0.002218586851652362,2.6762362021212276e-5,-3.7612202106384365e-8,0.002218780907528584,2.7007899392426868e-5,-3.7882116402540654e-8,0.00221892800983572,2.718282261799535e-5,-3.807443917791746e-8,0.0022190594291572868,2.7266897794539164e-5,-3.816614008581418e-8,0.002219213643884262,2.7253074171586324e-5,-3.814862701576736e-8,0.0022194321448706397,2.7151812912431053e-5,-3.8032782192625904e-8,0.0022197524438374,2.699457943246866e-5,-3.785310248538782e-8,0.0022201977516507457,2.6834004944931882e-5,-3.7668058896544666e-8,0.0022207647596439554,2.6736960739406968e-5,-3.755241769514929e-8,0.002221414588087056,2.6767401671111417e-5,-3.757801963905858e-8,0.0022220754445295104,2.696116773143545e-5,-3.778551747050506e-8,0.002222662982074354,2.7304481080951647e-5,-3.81602371398771e-8,0.002223112492580615,2.7732335963690483e-5,-3.8630272100101265e-8,0.0022234048892087036,2.815262001038408e-5,-3.9093316095525206e-8,0.002223570353579146,2.8482812379548647e-5,-3.9457507211628694e-8,0.0022236698422765312,2.8677471002609632e-5,-3.9671972494411865e-8,0.002223768955546225,2.8734606819302868e-5,-3.973390147896533e-8,0.002223918561912486,2.8685068606721128e-5,-3.9676852435000445e-8,0.002224146947177898,2.857614254949019e-5,-3.955275079853739e-8,0.002224460584546953,2.8457539680318737e-5,-3.9416539001133896e-8,0.0022248488878112726,2.8372409677147155e-5,-3.931628151961653e-8,0.0022252897394614136,2.8352697862785916e-5,-3.9287926512737694e-8,0.002225754439448891,2.8417200189247082e-5,-3.9352956850409215e-8,0.0022262119752000306,2.8571064147124517e-5,-3.9517646409515605e-8,0.0022266329015272588,2.8806246946617162e-5,-3.977346217838114e-8,0.002226992971723243,2.9102919767945163e-5,-4.009861614536306e-8,0.002227276408541931,2.9431986686848863e-5,-4.046090776146395e-8,0.002227478443459657,2.975881765135786e-5,-4.082189498635584e-8,0.0022276066367046955,3.00479536480172e-5,-4.114208286135804e-8,0.0022276806541805206,3.0268246647568305e-5,-4.1386550741833944e-8,0.0022277304168021564,3.0397850263698415e-5,-4.153044218187168e-8,0.0022277927064168696,3.0428497299104088e-5,-4.1563769098494404e-8,0.0022279064138012593,3.036858246513481e-5,-4.149502940286735e-8,0.002228106506621653,3.0244655302837534e-5,-4.13531517818982e-8,0.0022284166785792644,3.0100550888706932e-5,-4.1186794221321944e-8,0.0022288411897262855,2.9992625796661267e-5,-4.10591614928939e-8,0.0022293578310589434,2.997937361758266e-5,-4.1036340003927136e-8,0.002229915827113162,3.0105006870106393e-5,-4.116870189588894e-8,0.0022304437011137785,3.0380336855881893e-5,-4.146920822621145e-8,0.0022308696821551816,3.0770008843180174e-5,-4.189889481023213e-8,0.0022311489278408515,3.119747911794132e-5,-4.237238494059883e-8,0.002231282975267909,3.157105128869589e-5,-4.278709882978031e-8,0.0022313182697664352,3.181892335039289e-5,-4.3062523712161575e-8,0.0022313244787628863,3.1913280890993805e-5,-4.316712531818715e-8,0.0022313668866389517,3.187208721013959e-5,-4.312031825412391e-8,0.0022314877691962513,3.174329917730292e-5,-4.297493790279011e-8,0.0022317016189136243,3.1584440533183345e-5,-4.2794660080913634e-8,0.0022320000376087473,3.1447193001066374e-5,-4.263700565313382e-8,0.0022323599775302527,3.1369544649942365e-5,-4.2544629399779314e-8,0.0022327512669868426,3.13736485445689e-5,-4.254281430583861e-8,0.0022331420789577098,3.146660704082846e-5,-4.264014632464142e-8,0.002233502662649728,3.164221547907365e-5,-4.283028278424188e-8,0.0022338081602597494,3.188287847991798e-5,-4.309400116155361e-8,0.0022340411058888376,3.216172283638613e-5,-4.340155202858812e-8,0.002234193788318541,3.244531827001491e-5,-4.371572186288535e-8,0.002234270215537642,3.269748772071455e-5,-4.399608728756532e-8,0.0022342870174345488,3.288434625146084e-5,-4.4204595810092806e-8,0.0022342725300309807,3.298010211189754e-5,-4.431198509478476e-8,0.00223426358719864,3.297265366270278e-5,-4.430402838113176e-8,0.002234300042169446,3.28677210223566e-5,-4.4186255163092324e-8,0.0022344176501358816,3.269023712664952e-5,-4.398572890389884e-8,0.0022346404530500393,3.248215526411121e-5,-4.374887676761402e-8,0.0022349739993351363,3.229642695778004e-5,-4.3534981383312984e-8,0.002235400846601725,3.218729338221004e-5,-4.3405375317758714e-8,0.0022358801294424515,3.2197598996961654e-5,-4.3409074494626946e-8,0.0022363531613351687,3.234518444318427e-5,-4.356719715545998e-8,0.0022367562584270713,3.26124404623423e-5,-4.386088239969612e-8,0.002237039364916164,3.2944799036726895e-5,-4.4229360674700297e-8,0.002237184585255663,3.3263008754100455e-5,-4.458371191536925e-8,0.0022372152097443723,3.348808466964168e-5,-4.4835003790813605e-8,0.002237188268790842,3.356890037152168e-5,-4.492538522979582e-8,0.002237172973766367,3.3498373396684425e-5,-4.4846285550617134e-8,0.002237226446062347,3.331063740330506e-5,-4.463527151098567e-8,0.0022373785866876966,3.306356285861056e-5,-4.435657408777556e-8,0.0022376301801785795,3.281796598936418e-5,-4.407798109343235e-8,0.002237960293002327,3.262266212632057e-5,-4.385422435645071e-8,0.0022383364907900727,3.250798890852662e-5,-4.371970523753345e-8,0.002238723456645966,3.2485676809755455e-5,-4.3688197681211816e-8,0.0022390886143439774,3.255173487689696e-5,-4.3755889161178954e-8,0.002239405282078471,3.2689939993701276e-5,-4.390514695537152e-8,0.002239654500276259,3.2874917872497975e-5,-4.410791058122196e-8,0.002239826466603891,3.3074841894149056e-5,-4.43287154816248e-8,0.0022399219825763365,3.325431872964785e-5,-4.452793608909369e-8,0.00223995372724577,3.337818442270938e-5,-4.466602508507044e-8,0.002239946609945796,3.341665474095889e-5,-4.4709250539583116e-8,0.0022399361149010558,3.335152643078121e-5,-4.463662869840457e-8,0.0022399637177205746,3.318214901741799e-5,-4.4446666383878356e-8,0.0022400692719222156,3.292908438196356e-5,-4.4161604326662625e-8,0.0022402815961347503,3.263324461259011e-5,-4.382667142532589e-8,0.0022406097829435986,3.234928937051243e-5,-4.35029200728048e-8,0.0022410381982317313,3.2133989991873885e-5,-4.325433505758617e-8,0.002241527366860039,3.2032192958380706e-5,-4.31320710589e-8,0.002242021338402319,3.206407169227447e-5,-4.315991919307524e-8,0.002242460373611949,3.22173758634287e-5,-4.3325235858678146e-8,0.0022427962572554097,3.244758975145919e-5,-4.3578759913273076e-8,0.002243006285647738,3.268735329396462e-5,-4.384500203668317e-8,0.002243101254106713,3.2863977904254935e-5,-4.4041959824776854e-8,0.002243123492551911,3.292048609982193e-5,-4.410494856355586e-8,0.0022431341784470964,3.283271918257909e-5,-4.400603585822717e-8,0.002243194132145136,3.261533508896748e-5,-4.376093452019552e-8,0.0022433459529788004,3.2314277942817154e-5,-4.342065606321087e-8,0.0022436045440565053,3.198999227156275e-5,-4.305276261895022e-8,0.002243958133515982,3.169947891807182e-5,-4.2721289735892826e-8,0.002244376640907042,3.148388477407264e-5,-4.2472798095789184e-8,0.0022448221512804886,3.136378685678507e-5,-4.233096289601714e-8,0.0022452575632132565,3.134045113321896e-5,-4.2297823602288997e-8,0.002245652005153063,3.139999666608745e-5,-4.2358322241039085e-8,0.002245983472810847,3.151802159817808e-5,-4.248543069195238e-8,0.0022462398578507008,3.166353197668659e-5,-4.2644554056704593e-8,0.002246419446397792,3.180211929402931e-5,-4.2797108244559135e-8,0.0022465314514837314,3.1898991863196846e-5,-4.290391686790522e-8,0.0022465964763423293,3.192267915682146e-5,-4.292934587877446e-8,0.0022466461542808808,3.185001140863545e-5,-4.2846882077462555e-8,0.0022467207138888905,3.1672240851810194e-5,-4.264604611928958e-8,0.0022468631990779767,3.140089843834509e-5,-4.2339079016408486e-8,0.0022471100388813652,3.1070610463486265e-5,-4.196427300171984e-8,0.002247479746499827,3.073566784992554e-5,-4.158230565870342e-8,0.0022479638331529823,3.045874199951375e-5,-4.1263714808448154e-8,0.002248524763253154,3.02937857422682e-5,-4.1069733388505545e-8,0.002249103611883865,3.0268960024283786e-5,-4.1032988729356464e-8,0.0022496357222364597,3.0376558929030593e-5,-4.114590430823665e-8,0.002250068824548509,3.0574158665270486e-5,-4.1361647414439126e-8,0.0022503772247836114,3.07964029825346e-5,-4.160710741763205e-8,0.002250567802057482,3.097301904580212e-5,-4.1803061544443096e-8,0.002250676749711126,3.1047324392743566e-5,-4.188509138902905e-8,0.0022507586723131802,3.099010340839463e-5,-4.1819420951854353e-8,0.002250871480347393,3.080538471041008e-5,-4.1609680129912226e-8,0.0022510615188335178,3.052699532297764e-5,-4.1293253390966694e-8,0.002251353179262093,3.0207520227351978e-5,-4.092900157619033e-8,0.0022517456031207373,2.990365199999711e-5,-4.058081653528731e-8,0.002252216441744965,2.966277801546249e-5,-4.0302454700107246e-8,0.0022527301904458124,2.9514465763670236e-5,-4.012779775956819e-8,0.0022532475943158755,2.9467955847632948e-5,-4.0067851081194045e-8,0.0022537333307623537,2.9514413442723212e-5,-4.0113146302274113E-08,0.0022541607881451917,2.9631644844628163e-5,-4.023900335211374e-8,0.002254514189838657,2.9789237110179563e-5,-4.041133614434692e-8,0.0022547890266936274,2.9952985275678716e-5,-4.059167064094272e-8,0.0022549917913854377,3.0088440765969818e-5,-4.074114160771088e-8,0.0022551396035145384,3.016407696389352e-5,-4.08240201186456e-8,0.0022552597216511264,3.015481429148342e-5,-4.081164539487939e-8,0.0022553882919875423,3.0046508802163843e-5,-4.0687495180085486e-8,0.002255567099077569,2.9841357504034444e-5,-4.045337540522603e-8,0.0022558369388607233,2.9562838755949134e-5,-4.0135156504026914e-8,0.0022562271875581842,2.9257130726269753e-5,-3.978455631529007e-8,0.0022567436326642507,2.898714903281843e-5,-3.947255364662877e-8,0.0022573598823487835,2.8817209579511943e-5,-3.927213390100102e-8,0.002258018966071855,2.8791605493017066e-5,-3.923404737454537e-8,0.002258648117312685,2.891633036493332e-5,-3.936599702943412e-8,0.0022591820275492096,2.9154153382066135e-5,-3.962682189325287e-8,0.0022595839247476135,2.9436595028559185e-5,-3.993977198480979e-8,0.00225985505008105,2.9686790215993037e-5,-4.021816649643196e-8,0.002260030241699472,2.9842461088519565e-5,-4.039130403089442e-8,0.002260164133587199,2.9870701143892955e-5,-4.042125712911031e-8,0.0022603147060398874,2.9772008334002676e-5,-4.0307640364203134e-8,0.002260529356679789,2.957539212424842e-5,-4.008236218492744e-8,0.0022608360709949985,2.9328088618681445e-5,-3.9798262676794195e-8,0.002261240279369694,2.9083351681059975e-5,-3.951545849385412e-8,0.0022617268003365322,2.888909043567816e-5,-3.9288472509905356e-8,0.0022622655482008036,2.8779388123142624e-5,-3.915647214350556e-8,0.002262819189102602,2.8770098261314698e-5,-3.913805732001187e-8,0.002263350798057785,2.88586129564398e-5,-3.92308125522209e-8,0.0022638299762149723,2.9026875547142857e-5,-3.9414639258724473e-8,0.00226423666135669,2.9246199189130553e-5,-3.9657234352431613e-8,0.0022645626786873415,2.9482478245198007e-5,-3.992005306099529e-8,0.0022648116674165116,2.9700822468235492e-5,-4.016358408751382e-8,0.0022649981596772123,2.9869345096513426e-5,-4.0351602493104255e-8,0.00226514630501003,2.9962411033835785e-5,-4.04547762743576e-8,0.002265288298830657,2.9963862391270176e-5,-4.045428268554886e-8,0.0022654620702153745,2.9870664852001304e-5,-4.034600056798178e-8,0.002265707212446325,2.969691295175194e-5,-4.0145217890832345e-8,0.002266057956294179,2.947691133511338e-5,-3.9890345763315734e-8,0.0022665329039003286,2.926444328548644e-5,-3.964227072360827e-8,0.0022671236887107245,2.9124484378898093e-5,-3.9475022511818455E-08,0.002267788240646869,2.9115420126813518e-5,-3.945552451759843e-8,0.0022684561262601086,2.9265821438624493e-5,-3.9617054061131354e-8,0.0022690490903026677,2.955733641213853e-5,-3.993960157280089e-8,0.002269509515122626,2.992626254599793e-5,-4.035147042985752e-8,0.00226982162214845,3.0286068029203308e-5,-4.0754733553186254e-8,0.0022700138757717004,3.055897303667495e-5,-4.1061025649979134e-8,0.0022701436737226793,3.069989577380529e-5,-4.1218699906638504e-8,0.00227027517647685,3.070387520696665e-5,-4.122131101616223e-8,0.002270461042897145,3.059919619723711e-5,-4.1100011651257346e-8,0.002270732689133939,3.0433729733369717e-5,-4.090835113136894e-8,0.002271098337780852,3.026097227227714e-5,-4.070670005595391e-8,0.002271546105525531,3.012906258930677e-5,-4.0549886052690306e-8,0.002272049606456396,3.007354356655947e-5,-4.0478868217575704e-8,0.0022725744638758933,3.011354728086309e-5,-4.051615436512521e-8,0.0022730847790649704,3.0250954443169037e-5,-4.066458322488583e-8,0.002273548838725809,3.047206367789406e-5,-4.0909059104787467e-8,0.0022739434936463994,3.075113090835044e-5,-4.1220551846418976e-8,0.0022742568636345524,3.105504186902545e-5,-4.156147942044127e-8,0.0022744892839467825,3.134835492335001e-5,-4.189151521878511e-8,0.0022746527416301044,3.159798737144839e-5,-4.217292294439811e-8,0.0022747692873981264,3.177714018497166e-5,-4.237495585906838e-8,0.0022748688113758886,3.186850606857967e-5,-4.247743480535395e-8,0.002274986290774487,3.186699225575003e-5,-4.2473855910760004e-8,0.0022751583117732004,3.178213127539921e-5,-4.237427673206388e-8,0.0022754182619907173,3.1640017291713195e-5,-4.2207768491395545e-8,0.0022757894556965316,3.1483670873694755e-5,-4.202308555544977e-8,0.0022762763149492913,3.1369490725813464e-5,-4.188476186116999e-8,0.002276855832823401,3.135697026894548e-5,-4.186133900931318e-8,0.0022774744421386866,3.1490633861351893e-5,-4.200454099581501e-8,0.0022780569340058936,3.177865036092299e-5,-4.232457983909165e-8,0.0022785298502353986,3.217986098398422e-5,-4.277512950721424e-8,0.002278850878859694,3.261186828087253e-5,-4.326249088421801e-8,0.002279027127460274,3.29810254809563e-5,-4.3679853601427606e-8,0.0022791101135152944,3.3218485070021266e-5,-4.3948435338700015e-8,0.0022791716138773816,3.33017751806445e-5,-4.404203618293163e-8,0.0022792763622203156,3.325354630218967e-5,-4.3985619723857855e-8,0.0022794650184009696,3.312474867222378e-5,-4.3836336864797965e-8,0.0022797502493714416,3.297479872131966e-5,-4.3661248003750406e-8,0.00228012142820996,3.285672340462785e-5,-4.35206528604119e-8,0.0022805525144040995,3.2809069538178984e-5,-4.3458910771532503e-8,0.002281009749824412,3.28530678199272e-5,-4.350102367560977e-8,0.002281457946481573,3.299290573495884e-5,-4.3652647942342574e-8,0.0022818653863613037,3.3217663060474e-5,-4.390203862093646e-8,0.0022822076095379298,3.350430854908523e-5,-4.4223341324998374e-8,0.0022824701581385626,3.38215008984268e-5,-4.458094556850484e-8,0.0022826501909389498,3.413398695711384e-5,-4.493459121134231e-8,0.0022827568168762593,3.44073498830337e-5,-4.524485208989148e-8,0.0022828100447377627,3.4612658901913384e-5,-4.547843105508966e-8,0.0022828384740465075,3.4730475087631895e-5,-4.561266796396316e-8,0.002282876011570533,3.475388096679199e-5,-4.5638964500433376e-8,0.002282957848421652,3.469040464851831e-5,-4.5565062411767125e-8,0.0022831158204580496,3.456271833872463e-5,-4.541606069616092e-8,0.0022833731202049406,3.440786048574832e-5,-4.5233819572801423e-8,0.0022837383081319583,3.427425554837967e-5,-4.507378989735375e-8,0.0022841992424606486,3.42151255976047e-5,-4.4997528462908375e-8,0.0022847190630679586,3.427694413898361e-5,-4.505929978605274e-8,0.0022852381039333777,3.448341082476899e-5,-4.528736898920922e-8,0.002285686017006873,3.4819631970934466e-5,-4.566551541864208e-8,0.0022860045965692596,3.522625967483624e-5,-4.6126130449042295e-8,0.0022861729555042707,3.5613274931110104e-5,-4.65660689031637e-8,0.002286219685653516,3.5892392446296056e-5,-4.688394305335418e-8,0.002286211691889868,3.601177133491025e-5,-4.7019944247694604e-8,0.002286225505956513,3.5972626779050686e-5,-4.697479161031815e-8,0.0022863188543598124,3.58205873724714e-5,-4.6799832485411654e-8,0.00228651668635773,3.562198060753e-5,-4.6570120297171264e-8,0.002286812966928041,3.5440632292562546e-5,-4.635820450409294e-8,0.002287180868527256,3.532389707738892e-5,-4.6218365864022434e-8,0.002287583967878681,3.5298098790532246e-5,-4.618136168410986e-8,0.0022879848284268977,3.536980504236021e-5,-4.6255633734096165e-8,0.0022883504197809537,3.552946613083765e-5,-4.643115703668337e-8,0.002288655274879669,3.575541538610793e-5,-4.668378554344655e-8,0.0022888834463104927,3.60176745468646e-5,-4.697952823998258e-8,0.002289029789277668,3.6281738912671874e-5,-4.727893103740416e-8,0.002289100595889158,3.65126058036671e-5,-4.754178038619249e-8,0.0022891133320047745,3.667916372430841e-5,-4.773217946936401e-8,0.0022890950961498148,3.675871799412574e-5,-4.782371311654076e-8,0.0022890795607725576,3.674100774676719e-5,-4.7804003549630296e-8,0.002289102527511509,3.663093644990813e-5,-4.767785241181172e-8,0.002289196541348638,3.644938070154096e-5,-4.746830614559982e-8,0.0022893851939173337,3.6231636872978196e-5,-4.7215134114218746e-8,0.002289677840039512,3.602331407239086e-5,-4.6970406519053876e-8,0.0022900654708520327,3.58736629553553e-5,-4.679101983320465e-8,0.002290518708418688,3.582634915501503e-5,-4.6728061346799346e-8,0.0022909894789891827,3.590809695929047e-5,-4.681348212371508e-8,0.002291418352774001,3.611712058525191e-5,-4.704638370723802e-8,0.002291748752111823,3.641569025232455e-5,-4.7384109668672996e-8,0.0022919460643483626,3.6733133288591057e-5,-4.774556420547209e-8,0.0022920143328060607,3.6983858880081674e-5,-4.803206329891999e-8,0.002291999814615806,3.7096977477987554e-5,-4.8161604641847836e-8,0.002291975474626928,3.704374634491269e-5,-4.8100515063701843e-8,0.0022920128248449328,3.6846970662485426e-5,-4.787422973248501e-8,0.0022921567275596033,3.656759825553701e-5,-4.7551933742153225e-8,0.0022924155206640656,3.627866505605262e-5,-4.721685937218435e-8,0.0022927669894349093,3.6041857596996885e-5,-4.6939648387720506e-8,0.002293172035520522,3.589533984270876e-5,-4.676448884083824e-8,0.002293587774220062,3.585234950794764e-5,-4.670737294106673e-8,0.00229397625599273,3.5905780732209896e-5,-4.676107434656356e-8,0.0022943087935883965,3.603438248915831e-5,-4.690198432790658e-8,0.0022945674627496593,3.6208248273547327e-5,-4.709625363021303e-8,0.0022947453752612396,3.639309951270794e-5,-4.730469355160464e-8,0.002294846618012875,3.655385217382977e-5,-4.748694572871607e-8,0.0022948859966711527,3.6658142221179055e-5,-4.760561192507473e-8,0.0022948882229804706,3.66802485027254e-5,-4.7630789899419904e-8,0.002294885915277481,3.660536515102313e-5,-4.754496057001509e-8,0.0022949158390162044,3.64335141641052e-5,-4.7347464493291285e-8,0.002295013303258485,3.6181877526743895e-5,-4.705723761896796e-8,0.0022952053707549756,3.5884255428738196e-5,-4.6712359540665154e-8,0.0022955042500871392,3.558678939109289e-5,-4.6365392836542746e-8,0.002295902637857623,3.534001900618766e-5,-4.607449202272132e-8,0.002296372603345501,3.518847407688666e-5,-4.5891531629784525e-8,0.002296868936882388,3.515979486113663e-5,-4.584945571699113e-8,0.002297337100875107,3.525571375908133e-5,-4.595154991513938e-8,0.0022977251112613487,3.54474663309797e-5,-4.6165727461002804e-8,0.002297997511006086,3.567828648084553e-5,-4.642708208073091e-8,0.0022981479038201797,3.587486868504097e-5,-4.665101902295781e-8,0.0022982048890346418,3.59670990491837e-5,-4.6756152857442506e-8,0.0022982264993906746,3.591076706084595e-5,-4.66907281238414e-8,0.00229828244392896,3.570370688981107e-5,-4.645139989864305e-8,0.0022984305793150974,3.538654013029307e-5,-4.6084187811529834e-8,0.002298698613153666,3.502687277549902e-5,-4.5666380520174655e-8,0.0022990791902976694,3.4695334694455384e-5,-4.5279093849930466e-8,0.0022995381727997865,3.4445276278051516e-5,-4.49839970221804e-8,0.002300029218953335,3.430321854904224e-5,-4.4812265883725474e-8,0.0023005071520190556,3.426970567379333e-5,-4.4765358220823394e-8,0.0023009363058259054,3.432593949783263e-5,-4.4822399265362546e-8,0.0023012938617268945,3.444159290053393e-5,-4.494899788620879e-8,0.002301570006953491,3.458126436569647e-5,-4.51046246777301e-8,0.002301766800108603,3.470904311234521e-5,-4.524791553057968e-8,0.002301896888738061,3.479179416047871e-5,-4.534053254240823e-8,0.002301982375857608,3.480208071788327e-5,-4.535057802732492e-8,0.0023020534602801847,3.472142304601621e-5,-4.525634915545079e-8,0.0023021460538406057,3.454404162586172e-5,-4.505063369302154e-8,0.002302297520970304,3.4280415377693827e-5,-4.474483116108385e-8,0.00230254017354546,3.395911142067943e-5,-4.4371164167657605e-8,0.0023028932564570586,3.3624877587848964e-5,-4.398066536436923e-8,0.0023033555964254958,3.333152309155398e-5,-4.3635188638132984e-8,0.0023039020503271127,3.312995217770553e-5,-4.339376844190064e-8,0.002304486385520222,3.305425894193706e-5,-4.329658172175806e-8,0.002305051035348368,3.3110519998397165e-5,-4.335181227808648e-8,0.0023055413708626526,3.3272560571329226e-5,-4.353040435431237e-8,0.0023059202737308734,3.348666573581906e-5,-4.3771124818958763e-8,0.0023061786570983014,3.368428524135492e-5,-4.3994995923487775e-8,0.0023063388048928817,3.379947725797813e-5,-4.412542796611055e-8,0.0023064492323863275,3.378653186463361e-5,-4.410875759920423e-8,0.0023065718780325255,3.363277880294064e-5,-4.392931753536871e-8,0.0023067648430645355,3.336223440573916e-5,-4.361391666217241e-8,0.0023070660644278905,3.302816568314063e-5,-4.322345795297547e-8,0.002307483727852774,3.269679339994018e-5,-4.2834243518091083e-8,0.0023079967124393116,3.242829025455311e-5,-4.2516054578377455e-8,0.002308563857239961,3.2262195589673835e-5,-4.2315205384790976e-8,0.0023091372052619127,3.221149782256434e-5,-4.224750159055635e-8,0.002309673844341424,3.2265073740245427e-5,-4.2300823774791806e-8,0.0023101432068525158,3.239501720334835e-5,-4.244342832539441e-8,0.0023105295861446016,3.256496006872504e-5,-4.2633513685632894e-8,0.0023108314009869526,3.2736917316135974e-5,-4.282717939490637e-8,0.002311059046577513,3.287596311964373e-5,-4.298390962236588e-8,0.0023112325956021447,3.2953249680788354e-5,-4.30701110947523e-8,0.00231137979665109,3.294831861010061e-5,-4.306178209267358e-8,0.0023115340997543143,3.285151044406728e-5,-4.2947275355292e-8,0.0023117319317365243,3.2666777386046935e-5,-4.2730561942988145e-8,0.0023120082445560355,3.241439708027806e-5,-4.243445694518821e-8,0.0023123897136956896,3.213200948149292e-5,-4.210197938273945e-8,0.002312886188388601,3.1871514418046985e-5,-4.179294978549619e-8,0.0023134830361791667,3.168968477884489e-5,-4.157326718028376e-8,0.0023141388246951094,3.163282940214068e-5,-4.149718047268907e-8,0.002314792329840861,3.172005820484998e-5,-4.158778555622238e-8,0.002315378896673669,3.193290371843414e-5,-4.182474929661659e-8,0.0023158505127047306,3.2217740072628357e-5,-4.214680612835947e-8,0.0023161909435828218,3.2501262856054346e-5,-4.2469442360932653e-8,0.002316419671183998,3.271254277366566e-5,-4.27103290681903e-8,0.0023165841921237427,3.2802780436011716e-5,-4.2812247472897776e-8,0.0023167450214273137,3.2756541656388914e-5,-4.275628838705075e-8,0.0023169591271539453,3.259272819167442e-5,-4.256326379538918e-8,0.0023172663812004936,3.2356898186037265e-5,-4.228512778642178e-8,0.0023176817453812227,3.2108186977599e-5,-4.199006993769168e-8,0.002318194185054491,3.1904582986137214e-5,-4.174553762547756e-8,0.00231877176791076,3.1790160014621046e-5,-4.1603324561922454e-8,0.002319371007020906,3.1787119353049104e-5,-4.159008391244041e-8,0.0023199475183516252,3.189400454355314e-5,-4.17049622110272e-8,0.0023204650305293554,3.20894591354611e-5,-4.1923747329153166e-8,0.002320900868517307,3.2339315150879754e-5,-4.220702939293869e-8,0.0023212476092142357,3.260440417190498e-5,-4.2509329097549e-8,0.0023215118356965506,3.284715719192341e-5,-4.278686762213579e-8,0.0023217113982006393,3.3036182323788574e-5,-4.300295310375987e-8,0.002321872364162279,3.314903836216729e-5,-4.313120169100703e-8,0.0023220262092654128,3.3173971066507745e-5,-4.315751282036905e-8,0.002322207158400309,3.311135649858902e-5,-4.3081732272613976e-8,0.0023224491028571363,3.297521373884765e-5,-4.291948491394481e-8,0.002322781228382118,3.279447518776715e-5,-4.270382165655561e-8,0.0023232216822924234,3.261266466520483e-5,-4.248505510679363e-8,0.002323769722566849,3.2483621858754785e-5,-4.2325943183644296e-8,0.002324398904211897,3.2460944922610885e-5,-4.228942774440365e-8,0.002325056179267136,3.258120401470381e-5,-4.241896142727533e-8,0.002325671964702718,3.2846122159074696e-5,-4.271751943685757e-8,0.00232618144268266,3.321386581244003e-5,-4.3137207029593565e-8,0.0023265488268709705,3.36082031220369e-5,-4.3589753742231386e-8,0.0023267814240886583,3.394420957442691e-5,-4.397636855767629e-8,0.0023269254239565483,3.415782391829717e-5,-4.422212158225807e-8,0.002327046906947544,3.422452814123435e-5,-4.429770088385412e-8,0.002327209206277997,3.4160981089080925e-5,-4.422143906155781e-8,0.002327456336525311,3.401357864203633e-5,-4.4046282714445835E-08,0.002327805923589105,3.384194337626255e-5,-4.384093488623098e-8,0.002328250166554385,3.37036441574621e-5,-4.3672328614357636e-8,0.002328761740259225,3.364315089403521e-5,-4.3592791245387643e-8,0.002329301915681379,3.36856352720997e-5,-4.3632602011700155e-8,0.002329829055291661,3.383516729126079e-5,-4.379753708045467e-8,0.0023303062390849644,3.407663050535043e-5,-4.407078165874924e-8,0.0023307070359199853,3.438049828740393e-5,-4.441833484198168e-8,0.0023310187619350036,3.470925636680583e-5,-4.4796515547741785e-8,0.0023312431048083324,3.502410718649536e-5,-4.515990686671555e-8,0.002331394528886721,3.5290797443504604e-5,-4.5468276438613356e-8,0.002331497260081565,3.5483844383961805e-5,-4.569154976787356e-8,0.002331581733856791,3.558904226640621e-5,-4.581270005257149e-8,0.0023316810811048884,3.560465423137779e-5,-4.582909582100883e-8,0.002331827771099224,3.5541816076164474e-5,-4.575300867708182e-8,0.0023320501595354027,3.542447396167401e-5,-4.561169901534009e-8,0.0023323683909373285,3.528871876135906e-5,-4.5446880835164095e-8,0.0023327891822946096,3.51805346933835e-5,-4.531231018055253e-8,0.002333299958278486,3.515015003696038e-5,-4.52672578511267e-8,0.0023338645432176663,3.5241270465413334e-5,-4.5363790266725256e-8,0.002334424562220092,3.5475412457926315e-5,-4.562814505895616e-8,0.0023349112408662287,3.583613212030472e-5,-4.6041947983230845e-8,0.002335268146958933,3.626338247097496e-5,-4.6535418255023436e-8,0.0023354760591965088,3.666773954728629e-5,-4.700402689339779e-8,0.0023355644528050535,3.696270836812873e-5,-4.7346394509497067e-8,0.002335600051392683,3.7098371862978543e-5,-4.75036656435806e-8,0.002335658860810056,3.707695140177438e-5,-4.747763880896117e-8,0.0023357987401432536,3.694435600604198e-5,-4.732093922172631e-8,0.002336045463982361,3.6767616798790464e-5,-4.711093689128459e-8,0.002336393449628172,3.661235323283033e-5,-4.6923808409687194e-8,0.00233681482692482,3.6528212315890726e-5,-4.68177625437056e-8,0.002337270388702322,3.6542959451067806e-5,-4.682607312286444e-8,0.0023377189367930666,3.66625719363429e-5,-4.6956871248297825e-8,0.002338124071548144,3.687450363014641e-5,-4.7196561629315964e-8,0.002338458716826444,3.71523445299233e-5,-4.75149713046986e-8,0.0023387078440758034,3.7461115310449495e-5,-4.787144263559505e-8,0.002338869585723431,3.7762817841687184e-5,-4.822140859107426e-8,0.0023389547817296704,3.802184043837775e-5,-4.852287616148231e-8,0.0023389850485431105,3.820974950563554e-5,-4.87421532200505e-8,0.002338989627065774,3.830895059743735e-5,-4.885815585004515e-8,0.0023390014899789605,3.8314840733578865e-5,-4.8864887051675046e-8,0.002339053227796983,3.823643256374001e-5,-4.8772155817743224e-8,0.0023391730470084114,3.809565596331883e-5,-4.860485990028719e-8,0.002339381007965399,3.7925524692509784e-5,-4.840106376674009e-8,0.0023396854228536312,3.776719520424567e-5,-4.82088209371393e-8,0.0023400793116841023,3.76654727255943e-5,-4.808107898018889e-8,0.002340537481346002,3.766178500501879e-5,-4.8067398459253976e-8,0.0023410160318337752,3.778395059438169e-5,-4.820166978989883e-8,0.0023414571514578423,3.8033753723512084e-5,-4.8487112668261064e-8,0.002341802014567862,3.837655741982126e-5,-4.888372230559299e-8,0.0023420114228051465,3.874102641968516e-5,-4.930783648964436e-8,0.0023420863661792065,3.9036695298684036e-5,-4.965293287954776e-8,0.0023420745217566197,3.918717458210972e-5,-4.982885057806455e-8,0.0023420538209714603,3.91622722916344e-5,-4.9799546790811774e-8,0.0023421004046062298,3.8988852688015025e-5,-4.959573407663678e-8,0.0023422602630217295,3.8734768578304047e-5,-4.9296049457022376e-8,0.0023425391360975905,3.847893082192605e-5,-4.899224673303789e-8,0.0023429102765989336,3.828568044273994e-5,-4.8759531463412606e-8,0.0023433299940436355,3.819251167163617e-5,-4.8642341136861975e-8,0.0023437518655280796,3.8209551159922836e-5,-4.865357708177263e-8,0.0023441359775748295,3.8325147109487965e-5,-4.87807783260245e-8,0.002344453495623456,3.8512988018584136e-5,-4.8994075741131246e-8,0.002344688236531956,3.873852777500904e-5,-4.9253489797137967e-8,0.0023448367420634006,3.896429832747165e-5,-4.951513690495988e-8,0.002344907563344286,3.915445172418351e-5,-4.973668851539436e-8,0.002344919846223446,3.927885131661452e-5,-4.9882338277690744e-8,0.0023449010717055798,3.9316757036171124e-5,-4.992722780668246e-8,0.0023448838074805536,3.925979958184939e-5,-4.986094461349622e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json new file mode 100644 index 0000000..f46c700 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":18000,"numberOfSamples":1000,"samples":[0.002344901558802442,3.911368303105064e-5,-4.968948981883951e-8,0.002344984132234963,3.8898163040661456e-5,-4.9435280092255396e-8,0.002345153076453194,3.8645137911801235e-5,-4.913505665071581e-8,0.0023454177649364274,3.8394882701718704e-5,-4.883571430956027e-8,0.0023457726182683734,3.8190636084535106e-5,-4.858818570335279e-8,0.0023461958479369647,3.8071833815956895e-5,-4.8439580759263195E-08,0.0023466502566154754,3.806617270836784e-5,-4.8423700396250246e-8,0.0023470871667342188,3.818099295284342e-5,-4.855052067391149e-8,0.0023474547964515697,3.8395736841710905e-5,-4.8796864492445077e-8,0.002347711548848421,3.865908630266998e-5,-4.9102715263344044e-8,0.0023478420825502667,3.889571950044163e-5,-4.937914952780937e-8,0.00234786961391877,3.902607152063935e-5,-4.9531851099022974e-8,0.0023478548636246925,3.899526350333567e-5,-4.949545923878963e-8,0.002347876570857601,3.8797420616696476e-5,-4.926230021920203e-8,0.0023480009856264934,3.8479554435582394e-5,-4.888691218568922e-8,0.002348257394842648,3.81212678497871e-5,-4.8462214576854004e-8,0.0023486326479069406,3.7803093228172886e-5,-4.8082513592352674e-8,0.0023490835964367573,3.75814623825538e-5,-4.781433129307214e-8,0.002349556312825578,3.747939916176964e-5,-4.768549705089819e-8,0.002350001794120482,3.7490379203984336e-5,-4.768944037993623e-8,0.002350384381521822,3.758800212452211e-5,-4.779618621991062e-8,0.0023506841057128985,3.773572437125139e-5,-4.796348785816809e-8,0.0023508956980960788,3.7894232799687954e-5,-4.814536983155262e-8,0.00235102648099269,3.802641740658273e-5,-4.829803528414698e-8,0.002351094173287532,3.810084978765315e-5,-4.838411531070628e-8,0.0023511246964647747,3.8094608924835005e-5,-4.837614007717066e-8,0.0023511496348331447,3.799585924542727e-5,-4.825963731338258e-8,0.0023512029179003826,3.780605403700456e-5,-4.803571540037979e-8,0.002351316493203054,3.754110540847055e-5,-4.772242618165293e-8,0.002351515254331023,3.723065606146325e-5,-4.7353971759481864e-8,0.0023518120205759476,3.6914840723378074e-5,-4.697706960436158e-8,0.0023522036900594134,3.663842066327486e-5,-4.664428486396447e-8,0.0023526697415857454,3.6442835626573675e-5,-4.6404850464569947E-08,0.0023531739492806607,3.635743472275251e-5,-4.629433098034591e-8,0.0023536695969230293,3.639153741844735e-5,-4.632502065598751e-8,0.002354107963028887,3.65290387843179e-5,-4.64791633358682e-8,0.0023544493334192655,3.672744771866113e-5,-4.670739713326941e-8,0.0023546748244885193,3.692340046714689e-5,-4.693502893752279e-8,0.0023547957604870243,3.704596407123413e-5,-4.707779081016492e-8,0.002354855915443392,3.703656572046711e-5,-4.70656375977696e-8,0.0023549223160394474,3.68699978500431e-5,-4.6867843166706427e-8,0.002355064610704272,3.656683381659626e-5,-4.65078344897485e-8,0.002355330456332751,3.6188645949168455e-5,-4.605762360942627e-8,0.0023557290800031,3.581614088997792e-5,-4.561209830788785e-8,0.0023562313149006323,3.552104851024793e-5,-4.525598622392911e-8,0.002356784170343763,3.534573263514571e-5,-4.503985226093692e-8,0.00235733028458666,3.529761527789713e-5,-4.49733843052568e-8,0.002357823000083982,3.535587514723036e-5,-4.503300722505471e-8,0.0023582334607192713,3.548324139112816e-5,-4.517550230472812e-8,0.0023585511399880337,3.5636946080439145e-5,-4.535076312918837e-8,0.002358780962041987,3.577633956909642e-5,-4.551078335076926e-8,0.0023589395842511522,3.5867314155800855e-5,-4.561499749370089e-8,0.002359052080351249,3.588475773629073e-5,-4.563332272362631e-8,0.002359149147828655,3.58142084645814e-5,-4.554820350082022e-8,0.0023592643626533377,3.565335730415486e-5,-4.5356402142557453E-08,0.002359430841246486,3.541339537933329e-5,-4.507057121932486e-8,0.0023596768567981123,3.511952535451973e-5,-4.471987460114685e-8,0.0023600205188522927,3.480948168500788e-5,-4.4348345490610194e-8,0.0023604644698905536,3.452896471445555e-5,-4.400967986329848e-8,0.002360992350010294,3.432364769813786e-5,-4.375798612579386e-8,0.002361569042366369,3.422878850205881e-5,-4.363559641492016e-8,0.0023621460051594665,3.4259012492440044e-5,-4.3660883375380844e-8,0.0023626713616961515,3.440164922381125e-5,-4.3820080092443e-8,0.002363102567048767,3.4616447316981465e-5,-4.4066547053651594e-8,0.002363418276529288,3.484277697645849e-5,-4.432896661511161e-8,0.002363625904080295,3.501331834422755e-5,-4.452741922922826e-8,0.002363762140673494,3.50713100177352e-5,-4.459391491625094e-8,0.0023638851680286292,3.498694287747205e-5,-4.449207573009896e-8,0.0023640594734086117,3.4767688893707976e-5,-4.422967279774819e-8,0.002364337052724743,3.44579776897352e-5,-4.385849503168624e-8,0.0023647414089119547,3.412668761857231e-5,-4.345970698104098e-8,0.002365260922020612,3.3846152104623893e-5,-4.3119075143364176e-8,0.0023658544426327192,3.367093165302294e-5,-4.290180278936738e-8,0.0023664660490979486,3.362478090509265e-5,-4.2836928949552116e-8,0.002367041894211088,3.3699477499923e-5,-4.29156715149733e-8,0.0023675425813141815,3.3863070665591675e-5,-4.3100929149056666e-8,0.002367948361133545,3.407186155979982e-5,-4.334131276515742e-8,0.0023682583104001854,3.4281125480317074e-5,-4.358383945165417e-8,0.002368486347050624,3.4452289918945094e-5,-4.378254145392837e-8,0.002368656569458454,3.455667745010834e-5,-4.3903037676489125e-8,0.002368799213631667,3.457704329979657e-5,-4.39244496666408e-8,0.0023689474323752143,3.450818698611703e-5,-4.384015205758009e-8,0.0023691344170632556,3.4357416482385305e-5,-4.3658308045106786e-8,0.002369390127550806,3.4144946605107745e-5,-4.340234799568976e-8,0.002369737050180081,3.390358038895181e-5,-4.311066755298774e-8,0.0023701849761484078,3.367640314542406e-5,-4.283404275674573e-8,0.002370725808074802,3.351105695568608e-5,-4.262900855450118e-8,0.0023713306372070224,3.344998149691437e-5,-4.254638292238252e-8,0.0023719519724518553,3.351806525291478e-5,-4.261657041710548e-8,0.0023725329401571575,3.371175366291013e-5,-4.283642668257849e-8,0.0023730222295828053,3.3995002702351264e-5,-4.316414308379054e-8,0.002373389973065274,3.430578520129685e-5,-4.3526671192005085e-8,0.0023736381505010734,3.4572328983584834e-5,-4.38388242013889e-8,0.0023738010098588143,3.473355012811767e-5,-4.402752760022938e-8,0.00237393531167498,3.4756315512409036e-5,-4.40524591922618e-8,0.0023741041518875864,3.4643979531241987e-5,-4.391644020525929e-8,0.0023743597715574142,3.443428581685144e-5,-4.366325823519776e-8,0.002374730275263065,3.418808569592938e-5,-4.336456918047751e-8,0.0023752135991477064,3.397259983293269e-5,-4.3100208376556956e-8,0.002375779941817866,3.384415723124978e-5,-4.293768908589405e-8,0.0023763813960745914,3.383531261076801e-5,-4.2916694132470866e-8,0.0023769653178674142,3.394966546843266e-5,-4.304258701004152e-8,0.0023774870203995034,3.416488144273135e-5,-4.3289677344681276e-8,0.002377918235263097,3.444154087954113e-5,-4.3611544323386645e-8,0.0023782499725694506,3.473394751413563e-5,-4.3953871457543554e-8,0.002378490676997382,3.499948400810439e-5,-4.4265690042450136e-8,0.002378661785361829,3.520478219905836e-5,-4.45068771402646e-8,0.0023787927125148967,3.5328684667322306e-5,-4.465179236135274e-8,0.0023789164661922424,3.5362982250262976e-5,-4.4690190041228925e-8,0.002379066168330197,3.531210837114164e-5,-4.462683919511151e-8,0.0023792721073279486,3.519257964256899e-5,-4.448085699607398e-8,0.0023795586569317585,3.50323249823028e-5,-4.4284979324380445e-8,0.0023799404698155602,3.486935159153574e-5,-4.408411931944888e-8,0.00238041786411957,3.4748539855140206e-5,-4.39317205628605e-8,0.0023809723866902452,3.471506365948844e-5,-4.38820214882267e-8,0.0023815649852208134,3.48036933953732e-5,-4.397726798401748e-8,0.0023821401857936045,3.502563195655052e-5,-4.423182507960411e-8,0.0023826385643343764,3.535804096673262e-5,-4.461940477123716e-8,0.002383015549616911,3.574351081297848e-5,-4.507218244911266e-8,0.0023832590121007622,3.610394768843331e-5,-4.549722500288198e-8,0.0023833960729126107,3.6365403192313095e-5,-4.5806082879119395e-8,0.0023834844707587666,3.6482794911242564e-5,-4.594430660481812e-8,0.0023835926131679144,3.6453070353420245e-5,-4.5907232417809996e-8,0.0023837780068744117,3.6312527567923084e-5,-4.573698815443366e-8,0.002384072504190872,3.612228458903607e-5,-4.550549834835012e-8,0.002384477540262076,3.594951747525463e-5,-4.529245938741677e-8,0.0023849679834993427,3.5850894327466484e-5,-4.516576690664186e-8,0.0023855013057676516,3.586164050491832e-5,-4.5168379713013465e-8,0.0023860287687607305,3.599113018920311e-5,-4.5312724744731254e-8,0.002386506003294634,3.6224400739596276e-5,-4.558208417162952e-8,0.0023869010817420566,3.65281921996621e-5,-4.5937482125035984e-8,0.0023871989250919125,3.685955147899608e-5,-4.632784241705567e-8,0.002387401820865755,3.7174763898084735e-5,-4.6700739768763154e-8,0.002387526785819297,3.7436733765039484e-5,-4.701140163670798e-8,0.0023876010849905364,3.761979915266924e-5,-4.7228628272774645e-8,0.00238765727041805,3.771186667545958e-5,-4.733742080218521e-8,0.002387728725155376,3.7714449644070145e-5,-4.7339022820513065e-8,0.0023878460686218663,3.764152424039279e-5,-4.724953688088123e-8,0.002388034216505095,3.751792399775393e-5,-4.709805432518741e-8,0.0023883096269505005,3.7377464417580596e-5,-4.692455759226862e-8,0.002388677274146209,3.726041803036959e-5,-4.677709598428318e-8,0.0023891272588487315,3.720938268477899e-5,-4.6706986835451093e-8,0.0023896319399229,3.7262272101778856e-5,-4.6760418636059854e-8,0.0023901458647094826,3.7441849520893325e-5,-4.696572132812101e-8,0.002390611746871633,3.774354152197786e-5,-4.731844757029362e-8,0.0023909747687158945,3.81269601588696e-5,-4.777091840959034e-8,0.002391202906290385,3.8519192870702565e-5,-4.823603735908806e-8,0.0023913040660786186,3.883476948556154e-5,-4.8611270833999345e-8,0.002391328128732739,3.9006667440986484e-5,-4.881589018117696e-8,0.00239134943562406,3.90124026913742e-5,-4.882222941094568e-8,0.002391438487576229,3.8880411452464615e-5,-4.866331475848319e-8,0.0023916383708005662,3.867507853522781e-5,-4.841510309828039e-8,0.00239195590432241,3.847153998643774e-5,-4.816669872463936e-8,0.0023923668018147257,3.833341819751815e-5,-4.799408876442468e-8,0.002392828007801345,3.830015839190798e-5,-4.794511807386538e-8,0.0023932907590552147,3.8383856123547755e-5,-4.8035481865629606e-8,0.00239371096036409,3.857245714578611e-5,-4.82521178047072e-8,0.0023940559931876475,3.883616405890264e-5,-4.856042818085454e-8,0.0023943082930363074,3.9134985874419545e-5,-4.891304887908877e-8,0.0023944662220829185,3.9426309839536574e-5,-4.925889576057055e-8,0.0023945426540706474,3.967167832740828e-5,-4.955145041930234e-8,0.0023945617795173573,3.984206233309221e-5,-4.975530429415886e-8,0.002394554803373748,3.992121054124771e-5,-4.985033218746083e-8,0.00239455526447015,3.990695202747839e-5,-4.983330111917577e-8,0.002394594661569528,3.9810623353083994e-5,-4.971716322616409e-8,0.0023946988252229935,3.965513390937551e-5,-4.952874150407233e-8,0.0023948850777624304,3.9472259325648355e-5,-4.9305586614794425e-8,0.00239515997526318,3.9299439114975593e-5,-4.909233045733194e-8,0.0023955174021503037,3.9175945382072434e-5,-4.893628682300761e-8,0.002395937007932476,3.9137890421156826e-5,-4.8881533371822775e-8,0.002396383695909191,3.921131979781866e-5,-4.896047917113908e-8,0.0023968099593563576,3.9403258047878505e-5,-4.918277327372618e-8,0.002397163497613983,3.969252739918278e-5,-4.952387416863947e-8,0.0023974015854493413,4.002518309701328e-5,-4.99193026544001e-8,0.002397509675261247,4.0321678158350774e-5,-5.027326909845036e-8,0.0023975151824612907,4.049998955523513e-5,-5.048669925554299e-8,0.0023974844671535013,4.050819106081807e-5,-5.049657166197553e-8,0.002397499090668801,4.034853438152713e-5,-5.0304833087084466e-8,0.0023976229322382613,4.007667775600651e-5,-4.997738881179162e-8,0.002397879519985696,3.977656534145411e-5,-4.96140773901125E-08,0.0023982502957491016,3.9527801939768744e-5,-4.93098968993077e-8,0.002398689129527083,3.938302665345923e-5,-4.912820157919039e-8,0.002399141121851689,3.936112368628708e-5,-4.9092584839070415e-8,0.002399557122870482,3.945190021821551e-5,-4.919217196871091e-8,0.002399901681190261,3.9625470595205126e-5,-4.939240127952472e-8,0.0024001557140803276,3.9841782493496445e-5,-4.9646053324931454e-8,0.00240031603823306,4.0058414074826275e-5,-4.990243651972935e-8,0.0024003933848322214,4.02365269468108e-5,-5.0114610330648764e-8,0.0024004095942288745,4.034539638022784e-5,-5.0245052214989265e-8,0.0024003941453741816,4.0365693589607254e-5,-5.0269831914895396e-8,0.0024003801497172756,4.0291449589680024e-5,-5.018110199371788e-8,0.0024004000531943383,4.013054961443052e-5,-4.9987707246810776e-8,0.0024004814327914467,3.990360304898532e-5,-4.9713797552627094e-8,0.0024006433784475078,3.96412645683471e-5,-4.9395635374628664e-8,0.002400893829350257,3.938038444905259e-5,-4.907710595026679e-8,0.0024012280072063545,3.9159384872200925e-5,-4.88043653842751e-8,0.002401627983789423,3.901309599496099e-5,-4.861979177381442e-8,0.0024020634684160267,3.896712290496793e-5,-4.8555194568685595e-8,0.0024024942344411503,3.903172416614497e-5,-4.862420076639316e-8,0.0024028751869229125,3.919562945854613e-5,-4.881439962151439e-8,0.0024031652429550516,3.942160059336088e-5,-4.908159561584208e-8,0.0024033401183291706,3.964740296327271e-5,-4.9350792145343485e-8,0.002403406122558092,3.9796826052265784e-5,-4.952959530944614e-8,0.0024034075771528214,3.9802695108078196e-5,-4.953626629721684e-8,0.002403418663533099,3.963531471377749e-5,-4.933424264248788e-8,0.002403517483513351,3.9320414167136537e-5,-4.895377104664041e-8,0.00240375400559779,3.893213949475224e-5,-4.848339885001966e-8,0.0024041310350306584,3.856275056172833e-5,-4.803360539427687e-8,0.002404608522803643,3.8287467657906244e-5,-4.7694797328705657e-8,0.002405124618903588,3.814364277978108e-5,-4.7512463896821273e-8,0.002405618526611032,3.812961405164927e-5,-4.748570334517685e-8,0.0024060450436589023,3.821594093326314e-5,-4.7580367143404314e-8,0.002406379515424713,3.8359386346411104e-5,-4.774544974096198e-8,0.0024066165603803674,3.851416440298249e-5,-4.7926337409967924e-8,0.002406766193043988,3.863916072047892e-5,-4.8073452764022304e-8,0.0024068496190933135,3.870200493814187e-5,-4.814731567974312e-8,0.0024068954751543747,3.8681384728337856e-5,-4.812157280049673e-8,0.0024069363302526986,3.8568469741027326e-5,-4.7984907944708237e-8,0.002407005092363638,3.8367620010703626e-5,-4.774197343294295e-8,0.0024071311642991904,3.8096143001373596e-5,-4.741307791637707e-8,0.00240733648448139,3.7782662926820594e-5,-4.703219316231057e-8,0.0024076319591230843,3.746376601902139e-5,-4.664296180742872e-8,0.0024080150100535243,3.717901842199488e-5,-4.629284851707181e-8,0.0024084688627471237,3.6964873105139e-5,-4.6025986316963574e-8,0.002408963950387803,3.684822663195842e-5,-4.587550926484438e-8,0.002409461535231225,3.6840528070730786e-5,-4.585634918576009e-8,0.0024099194289861434,3.6933325176103526e-5,-4.595954827428758e-8,0.002410299639091284,3.709615129870326e-5,-4.6149286023116704e-8,0.0024105775736920194,3.727809719448076e-5,-4.636443290545415e-8,0.0024107515290991625,3.7414947503234764e-5,-4.652707276927955e-8,0.0024108494422053167,3.744332346904537e-5,-4.6559778833502254e-8,0.0024109280582808607,3.732068196771385e-5,-4.641012552830863e-8,0.0024110599588631028,3.704486401008396e-5,-4.6074593882075726e-8,0.0024113092457543352,3.666207745630117e-5,-4.560832165779338e-8,0.0024117058579894443,3.625440453889971e-5,-4.511002792620606e-8,0.00241223320394758,3.590984658345839e-5,-4.468591059086578e-8,0.0024128367433007784,3.569068786073452e-5,-4.4411566261216975e-8,0.002413447167854588,3.561679042361314e-5,-4.431182379727306e-8,0.002414003943390364,3.566857531655897e-5,-4.4364131508880796e-8,0.002414468917828636,3.5802128924618506e-5,-4.45164528407243e-8,0.0024148287689588913,3.596582802687616e-5,-4.4707042649597976e-8,0.0024150906323866994,3.6112294226174406e-5,-4.487876186163635e-8,0.0024152756199526553,3.620466985756144e-5,-4.4986732147043753e-8,0.002415412983422486,3.621886433437632e-5,-4.5001246595991545e-8,0.002415535705571361,3.614384708305006e-5,-4.490832914512481e-8,0.0024156771163272757,3.59813440871689e-5,-4.470949129805716e-8,0.0024158678193869285,3.5745351613970705e-5,-4.442116416614326e-8,0.002416132416351302,3.546120330008051e-5,-4.4073537242749924e-8,0.0024164859220694446,3.516352548830468e-5,-4.370808294460031e-8,0.00241693034169506,3.4892359785693274e-5,-4.337295078484064e-8,0.0024174524408001833,3.468719086143528e-5,-4.3115900098566585e-8,0.002418023930833043,3.457944258321774e-5,-4.2975364635792224e-8,0.002418604957254082,3.4584872568489474e-5,-4.297126534219297e-8,0.002419150952416655,3.469789771516463e-5,-4.30979643194712e-8,0.0024196218300455495,3.48898251884466e-5,-4.3321783064122653e-8,0.0024199916518604678,3.51121471359681e-5,-4.3584618304832864e-8,0.002420256595170644,3.5304987746849386e-5,-4.381393076419317e-8,0.002420439070447764,3.54098460734516e-5,-4.393818240200917e-8,0.002420585972638163,3.5384692412318615e-5,-4.39053621156832e-8,0.0024207596255476035,3.521796937688811e-5,-4.3700303187940916e-8,0.00242102169533141,3.493649672842064e-5,-4.335458114598203e-8,0.0024214136673983418,3.460203389622349e-5,-4.294254391313394e-8,0.0024219412696859064,3.4294397281599166e-5,-4.2560928350924536e-8,0.002422570997871016,3.40859042454751e-5,-4.2297873198728576e-8,0.002423241774708797,3.401825188013031e-5,-4.220478688725671e-8,0.002423886226246646,3.4092534703597756e-5,-4.2284029344064495e-8,0.002424450990286084,3.4275193790697986e-5,-4.2495842308161056e-8,0.002424907897269756,3.4513860089160096e-5,-4.277731373829174e-8,0.002425254646420478,3.475404717614502e-5,-4.306250514379759e-8,0.0024255087764721997,3.495073098604035e-5,-4.329653600382793e-8,0.0024256997145779124,3.5073628211510956e-5,-4.344214009667556e-8,0.0024258619447215263,3.510795400575972e-5,-4.3480765687463235e-8,0.002426030203565686,3.505305808974759e-5,-4.341105272837135e-8,0.0024262362674914877,3.4920608081784176e-5,-4.3246676601309794e-8,0.0024265064422872465,3.473295174654087e-5,-4.3014350394663596e-8,0.0024268589868617334,3.4521461493677566e-5,-4.275180769052857e-8,0.002427301138503399,3.432410975088323e-5,-4.250490759677728e-8,0.0024278260913050916,3.418129571204661e-5,-4.2322676945393295e-8,0.002428411097108386,3.4129280643721544e-5,-4.2249456747169526e-8,0.002429018449007624,3.4191654643649516e-5,-4.231457750259257e-8,0.002429600921945329,3.4370848029145066e-5,-4.2521942446609057e-8,0.002430111852543173,3.464306742421111e-5,-4.284362752322127e-8,0.0024305177078212167,3.4960014332554184e-5,-4.322166147588011e-8,0.0024308089963019476,3.525864256604065e-5,-4.3579634420191055e-8,0.0024310052103568625,3.54768490791095e-5,-4.3841674275576033e-8,0.0024311514832499894,3.5570331945046896e-5,-4.3953026184890535e-8,0.0024313076209347257,3.552531869349453e-5,-4.389576556823521e-8,0.0024315325810961527,3.5363327353876604e-5,-4.369491031447773e-8,0.0024318686265469066,3.513647254223246e-5,-4.341303915546696e-8,0.0024323294873825944,3.491423748049786e-5,-4.3134445579347336e-8,0.002432896167264619,3.476495141289254e-5,-4.294268271529085e-8,0.0024335222309093078,3.4737272570903575e-5,-4.2897907650809233e-8,0.0024341473034816276,3.484777220801906e-5,-4.3021473228785095e-8,0.0024347141143896403,3.5078911481254485e-5,-4.3293103813853885e-8,0.0024351828565165653,3.5387420696509406e-5,-4.3660807647483854e-8,0.0024355382696882246,3.571869639847352e-5,-4.4058284519528546e-8,0.0024357886769330174,3.602113490945862e-5,-4.442243365076725e-8,0.0024359595899447976,3.6255981177570735e-5,-4.470551282002724e-8,0.002436085616257832,3.64014787157889e-5,-4.4880378715262854e-8,0.002436203431207954,3.645261201880796e-5,-4.49403083766768e-8,0.002436346881699283,3.641860110716656e-5,-4.489600455109322e-8,0.0024365439720128446,3.631989439005647e-5,-4.477193408814986e-8,0.002436814886263786,3.618547757967348e-5,-4.460305079373914e-8,0.0024371701965660787,3.605043991849035e-5,-4.443187709405474e-8,0.0024376087810835056,3.5953118153448417e-5,-4.430512313890507e-8,0.002438115638816738,3.593080766479197e-5,-4.42685612060324e-8,0.0024386606910261066,3.601319060175138e-5,-4.43590417894124e-8,0.0024392005329820178,3.621366124796751e-5,-4.459380937231256e-8,0.0024396852406738875,3.652073535771226e-5,-4.495979153559817e-8,0.002440070792536112,3.689393707336404e-5,-4.540830813754903e-8,0.0024403341938348043,3.7269028978704966e-5,-4.586125501539923e-8,0.0024404847869948067,3.757420212930339e-5,-4.6230801286461525e-8,0.0024405649339235085,3.775253295873212e-5,-4.6446847061845124e-8,0.0024406379971211724,3.778108573313487e-5,-4.6480442904616754e-8,0.0024407684360130493,3.7678040163525975e-5,-4.635265130274541e-8,0.002441002576816896,3.749564568269083e-5,-4.6126207922268527e-8,0.0024413569455008703,3.730344562480743e-5,-4.58853778897302e-8,0.0024418164775716804,3.716885726843634e-5,-4.571251766869334e-8,0.002442341086211704,3.7141004685513786e-5,-4.566838003723965e-8,0.002442877339190302,3.72411338432493e-5,-4.5780171769525656e-8,0.002443371731515466,3.746064251142103e-5,-4.603872319654958e-8,0.002443782406429579,3.7766052234272806e-5,-4.640413953378797e-8,0.002444086872764397,3.810893879139721e-5,-4.681768347059421e-8,0.002444284388309687,3.843785498667255e-5,-4.721633349478445e-8,0.002444393232414692,3.8709012326829734e-5,-4.7546011694557105e-8,0.002444444549161754,3.889334328329184e-5,-4.7770454539860257e-8,0.002444475074792687,3.8979187827749855e-5,-4.787468720267451e-8,0.0024445206944451194,3.8971331473534686e-5,-4.7863936944109584e-8,0.0024446118314487707,3.8887888173957045e-5,-4.775982946018779e-8,0.0024447706911564257,3.8756507830295623e-5,-4.7595742185117445e-8,0.002445009754862674,3.861079858955392e-5,-4.741246632391835e-8,0.002445330792627307,3.848709249206566e-5,-4.7254353116952106e-8,0.0024457239072774276,3.84210898084392e-5,-4.7165331531864033e-8,0.002446166646694304,3.844355610942536e-5,-4.71836986496915e-8,0.002446624062616858,3.857428817952799e-5,-4.733464480752854e-8,0.0024470514934107203,3.88144481598043e-5,-4.762062321108293e-8,0.002447402125327943,3.913928762815128e-5,-4.801212199106996e-8,0.0024476400881559847,3.9495739935443694e-5,-4.8444475535150416e-8,0.0024477561339314394,3.981049166716775e-5,-4.8827712071902615e-8,0.002447778077693695,4.001077266348328e-5,-4.9072160123498955e-8,0.0024477670483197492,4.005148747549024e-5,-4.9121840338880554e-8,0.0024477974812433497,3.993465087268592e-5,-4.897832831402965e-8,0.002447929926440992,3.9709268450711776e-5,-4.870064967828901e-8,0.0024481909223161946,3.9451954414470326e-5,-4.838174394154787e-8,0.0024485684783898502,3.923993501418732e-5,-4.811575988446022e-8,0.0024490213965491316,3.9129377699806304e-5,-4.797180052202577e-8,0.0024494948154261892,3.91451644029732e-5,-4.798138431887394e-8,0.002449935069477873,3.928119976470324e-5,-4.8138482471436045e-8,0.002450300397506881,3.9507323269912974e-5,-4.840749035993413e-8,0.0024505668157711494,3.9779044908857327e-5,-4.8734735279841313E-08,0.0024507297637555462,4.004759573096723e-5,-4.906061161920809e-8,0.002450802394303154,4.02688488745371e-5,-4.9330599704006644e-8,0.0024508113644507706,4.0410128173367605e-5,-4.95038655686505e-8,0.002450791125069385,4.0454212555310635e-5,-4.955844487476108e-8,0.0024507778465312773,4.040035570468197e-5,-4.949267054201453e-8,0.0024508040198822152,4.026270069107783e-5,-4.932327950223557e-8,0.0024508944505534447,4.006688255862525e-5,-4.908122347286046e-8,0.0024510638634689867,3.984580917053899e-5,-4.880648823794057e-8,0.00245131584498336,3.963541528939374e-5,-4.854295462312273e-8,0.002451642653661857,3.9470681141633724e-5,-4.833364518839405e-8,0.002452025536044154,3.938176083843848e-5,-4.8216083300638214e-8,0.002452435488543121,3.938977033584164e-5,-4.8217107227132724e-8,0.002452835048062748,3.950174696583605e-5,-4.8346481745672895e-8,0.0024531824507044967,3.970500384005907e-5,-4.858962496972789e-8,0.0024534396241559695,3.9962702831889606e-5,-4.890182990265696e-8,0.0024535843268946146,4.021443150526203e-5,-4.920880941676828e-8,0.002453623652929858,4.0386636134526066e-5,-4.9419622792017125e-8,0.002453601452891794,4.041499005959166e-5,-4.945444695873122e-8,0.0024535904575645672,4.0272043808040254e-5,-4.9278768855135644e-8,0.002453667088416081,3.9984366591700615e-5,-4.892445528448971e-8,0.0024538804961186404,3.9625472135700606e-5,-4.8481018851177726e-8,0.002454234041076148,3.9286627001372286e-5,-4.8059919577965076e-8,0.002454688758937021,3.90430339964667e-5,-4.7753378723272426e-8,0.002455182859858328,3.893307901809375e-5,-4.760913419343073e-8,0.0024556538362148746,3.895585698194267e-5,-4.762729962876685e-8,0.0024560537286482022,3.908100050787737e-5,-4.777201985779246e-8,0.00245635559786168,3.92623565237223e-5,-4.7987768345426784e-8,0.002456553543520675,3.945013089553443e-5,-4.821391608652092e-8,0.002456659304914327,3.9599666210168044e-5,-4.839543997652059e-8,0.002456697551274787,3.9677063676223765e-5,-4.849000855734107e-8,0.002456700822614684,3.966238759049165e-5,-4.847222180997126e-8,0.0024567044573505052,3.9550907364328136e-5,-4.833540821334541e-8,0.0024567417680072287,3.935256550822404e-5,-4.8091109193474636e-8,0.0024568398052084747,3.9089819952275556e-5,-4.776643242859904e-8,0.002457016102034005,3.879409971555748e-5,-4.739964644423014e-8,0.0024572767266246858,3.850135084065896e-5,-4.7034702557923994e-8,0.002457615714144817,3.8247292949526414e-5,-4.671548886753261e-8,0.002458015719767934,3.806281830374309e-5,-4.648030512056859e-8,0.0024584497093368225,3.7969709899505705e-5,-4.6356668032574766e-8,0.0024588835950892117,3.797672416493626e-5,-4.6356402548602995e-8,0.002459280019112911,3.8076035091713856e-5,-4.647098884390965e-8,0.0024596039507214372,3.8240450757803655e-5,-4.666776031810568e-8,0.0024598307142160007,3.842294852242427e-5,-4.68890281670926e-8,0.002459955918353923,3.8561282527527495e-5,-4.7057687283657186e-8,0.0024600044256263562,3.85906258738798e-5,-4.7093002809037085e-8,0.0024600323640595525,3.846469351560399e-5,-4.693699010582562e-8,0.002460115198327215,3.817888591278212e-5,-4.658318142014719e-8,0.0024603211513315733,3.778139333481038e-5,-4.609033001301854e-8,0.0024606816896058582,3.7360118141523624e-5,-4.5566248750844804e-8,0.0024611773581020993,3.700873869629158e-5,-4.5126111329188663e-8,0.0024617480565587665,3.679136890764092e-5,-4.484915535672109e-8,0.0024623194040428297,3.6725241793431914e-5,-4.4757458521259293e-8,0.002462828313114861,3.6785610286324895e-5,-4.4821776764596e-8,0.0024632368323780508,3.692313753770688e-5,-4.49825480110503e-8,0.002463533911415987,3.7081973038857536e-5,-4.517174974987359e-8,0.002463730207416001,3.72123954530806e-5,-4.5328262829285335e-8,0.0024638508339381053,3.727738907944816e-5,-4.540602228952397e-8,0.0024639287406243806,3.725496815222289e-5,-4.537712390347134e-8,0.002463999440178538,3.7138246844026674e-5,-4.523220853693909e-8,0.002464096769834068,3.693441043162565e-5,-4.4979410248424785e-8,0.002464249278477507,3.6662920271676045e-5,-4.464221452771284e-8,0.0024644771058909905,3.6352892349154964e-5,-4.4256185173269244e-8,0.0024647894963774355,3.60394813223482e-5,-4.3864446992286476e-8,0.00246518333004217,3.575928664507124e-5,-4.3512032388348086e-8,0.00246564308966862,3.5545192829730305e-5,-4.323961698689231e-8,0.002466142462746481,3.54212599682058e-5,-4.30773347216381e-8,0.0024666475561435836,3.539825611996659e-5,-4.303928925890125e-8,0.002467121549800276,3.5470424064565755e-5,-4.311941218583528e-8,0.002467530510301026,3.5614038369783264e-5,-4.328936880925462e-8,0.0024678501018424014,3.578830836147025e-5,-4.3499317664747304e-8,0.00246807277205011,3.5939557401127685e-5,-4.368284640476247e-8,0.0024682141340358534,3.6009986170699735e-5,-4.3767824546787344e-8,0.002468315806348312,3.595167953042106e-5,-4.369398422338407e-8,0.002468440719277613,3.574403825458124e-5,-4.343483114258189e-8,0.0024686576285004418,3.5408406295791984e-5,-4.301598790135291e-8,0.002469016756628685,3.5009868675168896e-5,-4.251749277816247e-8,0.002469527016305481,3.4639085816369505e-5,-4.2051331770138575e-8,0.0024701491272457075,3.437918303108398e-5,-4.172053655964463e-8,0.0024708107727132163,3.4275108324639473e-5,-4.1581346163947136e-8,0.0024714349391305145,3.432221330845508e-5,-4.162900742123513e-8,0.0024719649634269477,3.447673339527891e-5,-4.181047415170179e-8,0.0024723756773897968,3.4677347990773343e-5,-4.2050733510056084e-8,0.0024726711706196352,3.486498141779451e-5,-4.227704642717137e-8,0.002472875776800631,3.499457801076819e-5,-4.243345755026598e-8,0.002473024311147267,3.5039164456257024e-5,-4.248596282344877e-8,0.002473154485424879,3.49892258455584e-5,-4.24219893311207e-8,0.0024733018836487117,3.485023256564978e-5,-4.224757508831041e-8,0.0024734966693373177,3.4639859686924084e-5,-4.198405931463602e-8,0.002473761122223743,3.4385249288497285e-5,-4.166470061647262e-8,0.0024741075410927692,3.412005527399114e-5,-4.1330957835760266e-8,0.0024745365035125336,3.388081280598191e-5,-4.1027956557272016e-8,0.0024750358991933777,3.3702298329276224e-5,-4.0798783384882296e-8,0.002475581446443766,3.361205682415149e-5,-4.0677810154140694e-8,0.0024761393094790735,3.362488283309667e-5,-4.068393655070341e-8,0.00247667099923248,3.3738415010136826e-5,-4.081509111115514e-8,0.0024771401592741794,3.393112591255991e-5,-4.104553604679316e-8,0.0024775202300596727,3.4163782098038836e-5,-4.132736396042357e-8,0.0024778015552186553,3.4384841805604154e-5,-4.15968981141725e-8,0.002477996355230064,3.453957481857277e-5,-4.178587242689799e-8,0.002478139925461257,3.4582095835946386e-5,-4.183646089222978e-8,0.0024782863608294597,3.448855008036613e-5,-4.171792894077942e-8,0.002478497599215119,3.426810101996982e-5,-4.1440616533293496e-8,0.002478826423475806,3.3966768621773196e-5,-4.106097101147728e-8,0.002479297655651806,3.365920201414745e-5,-4.067146491268234e-8,0.0024798956470742607,3.3427359889743966e-5,-4.0374142208359564e-8,0.002480566263107198,3.333281657692773e-5,-4.0246164098665086e-8,0.0024812348815230548,3.339569240715765e-5,-4.031349099874403e-8,0.002481832069138389,3.359098154088289e-5,-4.054608293176884e-8,0.0024823140828337882,3.3862509899205475e-5,-4.087496962472572e-8,0.0024826701499891905,3.4144843169478624e-5,-4.121926049669797e-8,0.0024829174589391183,3.438196398751778e-5,-4.150927531351717e-8,0.002483090231395934,3.453716218275256e-5,-4.169890994247633e-8,0.0024832289273681676,3.459479555529096e-5,-4.1768010969739914e-8,0.0024833725099405357,3.455739202683464e-5,-4.171898971311369e-8,0.002483553953461178,3.444130953944551e-5,-4.1571586234288615e-8,0.002483797896582137,3.42726872143246e-5,-4.135789466565913e-8,0.002484119250717028,3.408404982664835e-5,-4.111811949072816e-8,0.0024845220544084173,3.3911157045767064e-5,-4.08966177191401e-8,0.0024849984608592214,3.378942234513219e-5,-4.073744810316272e-8,0.002485528319030998,3.37493393541924e-5,-4.0678740705520224e-8,0.0024860802611576817,3.381090099062003e-5,-4.07458217081001e-8,0.002486615292822404,3.3977887022200906e-5,-4.094410565553709e-8,0.0024870933615432594,3.4233776242617746e-5,-4.1253884823212716e-8,0.0024874822433588704,3.454145160287273e-5,-4.162972775740252e-8,0.0024877666980437367,3.4848325612800404e-5,-4.200659476353093e-8,0.002487954948091704,3.5096872718110185e-5,-4.2312767159825944e-8,0.0024880797904155523,3.523845842873798e-5,-4.248704298833028e-8,0.002488193043039279,3.5246843277377304e-5,-4.249570636640487e-8,0.0024883539592743067,3.512738494103619e-5,-4.234426909230887e-8,0.0024886140602875923,3.49187025600563e-5,-4.207987071532803e-8,0.002489002194927896,3.468515900952789e-5,-4.178219564842183e-8,0.0024895143834379584,3.450085337149065e-5,-4.1543686661381805e-8,0.002490112692358687,3.4428839747837344e-5,-4.144362746866002e-8,0.002490735095733774,3.4502254176917696e-5,-4.152441444489307e-8,0.002491313820334456,3.47148501990305e-5,-4.177943206499539e-8,0.0024917952057646542,3.5025110867509906e-5,-4.21578484386859e-8,0.002492153108185882,3.537166319265242e-5,-4.2583614770799746e-8,0.0024923915653697563,3.569250545655623e-5,-4.297938359576452e-8,0.0024925381077774505,3.594019773552308e-5,-4.328553882965522e-8,0.0024926327298874706,3.608907519420701e-5,-4.346936640882342e-8,0.0024927174854313663,3.6135139860801745e-5,-4.352511605516019e-8,0.0024928293045150462,3.6091731116077385e-5,-4.3468759712982866e-8,0.0024929962078651933,3.598404077227055e-5,-4.3331234070503576e-8,0.002493235828937878,3.584424198247867e-5,-4.315237723752643e-8,0.002493554988497319,3.5707654226319e-5,-4.297612739315671e-8,0.002493949475402431,3.560950550536974e-5,-4.284648196073154e-8,0.002494403814902926,3.558150409860973e-5,-4.2803251027824265e-8,0.0024948914829334063,3.5647523756435825e-5,-4.287670742727347e-8,0.0024953765911673344,3.581825773142045e-5,-4.308089582356996e-8,0.0024958182908375675,3.608573040867354e-5,-4.340666705533066e-8,0.0024961786512342457,3.641986140806195e-5,-4.381718846972339e-8,0.0024964332001036105,3.677013333856981e-5,-4.424981283072611e-8,0.002496580985875428,3.707466125980302e-5,-4.4627260595163124e-8,0.00249664942189288,3.7275972463325826e-5,-4.487730097257107e-8,0.002496690103679088,3.733875515066651e-5,-4.4954995613220536e-8,0.0024967655193018647,3.726250067358835e-5,-4.485864320894178e-8,0.002496931013734003,3.7083456871196986e-5,-4.46324458229267e-8,0.0024972186148263043,3.686490845186074e-5,-4.435466169172905e-8,0.002497628180291189,3.6679510733870065e-5,-4.411582351619956e-8,0.002498128079111284,3.658972340409257e-5,-4.3994441199673844e-8,0.0024986644042137227,3.663208106121771e-5,-4.4037246854020054e-8,0.0024991755753180833,3.680926861936187e-5,-4.4248953740883185e-8,0.002499608064555356,3.709163133072151e-5,-4.459370765840227e-8,0.0024999288144117358,3.742710477725366e-5,-4.500715060851872e-8,0.0025001310412585205,3.775603780312682e-5,-4.5414811573711545e-8,0.0025002324917523817,3.8025992028683344e-5,-4.57506862741052e-8,0.002500267909808244,3.82021913744237e-5,-4.5970516699009e-8,0.0025002791334092648,3.827161818741498e-5,-4.6057156152074936e-8,0.002500306150636883,3.824142696912959e-5,-4.601877616789812e-8,0.002500381023813219,3.813396254515294e-5,-4.588273798227383e-8,0.002500524917925695,3.7980819109320463e-5,-4.5688184530668866e-8,0.002500747387946369,3.781755623906785e-5,-4.547941847511398e-8,0.0025010467943652028,3.7679593748579237e-5,-4.530076608806616e-8,0.002501411000812327,3.759894473403009e-5,-4.5192519652786e-8,0.002501818061535664,3.76010451065458e-5,-4.518700349120371e-8,0.002502237249305373,3.7700983349453346e-5,-4.530383549196263e-8,0.002502631391630373,3.789891117462528e-5,-4.5544060670952407e-8,0.0025029618245448393,3.817544639615828e-5,-4.588418136956523e-8,0.0025031968555852867,3.8489391629367015e-5,-4.6273070203581374e-8,0.002503322900130418,3.878132383082006e-5,-4.6636329847159344e-8,0.0025033544659702643,3.898595666221756e-5,-4.689179674409995e-8,0.0025033366866835474,3.9052160624291637e-5,-4.6974744631872444e-8,0.002503335424761968,3.8963286204251026e-5,-4.686346369928086e-8,0.002503416415545243,3.874697513072474e-5,-4.659163332249408e-8,0.002503622458507168,3.846773122092755e-5,-4.623914977805023e-8,0.0025039595976610314,3.820530008492874e-5,-4.590530882256746e-8,0.002504397631776516,3.802946606966512e-5,-4.5677537488936655e-8,0.002504882299547712,3.798169372682445e-5,-4.560852435839345e-8,0.002505352221421315,3.806826004220745e-5,-4.570743517294879e-8,0.00250575432324309,3.8263797822131395e-5,-4.59439244261933e-8,0.0025060542893460607,3.852145546614233e-5,-4.6260390338084265e-8,0.002506241100184328,3.878568465963214e-5,-4.658768272125083e-8,0.0025063261680084966,3.900454144029845e-5,-4.686046599932783e-8,0.0025063382859264074,3.913932359754488e-5,-4.702948014495108e-8,0.0025063160483484925,3.917014569025023e-5,-4.706882713849625e-8,0.002506299694580531,3.9097007570934184e-5,-4.697758835500036e-8,0.0025063241642786917,3.893705066219002e-5,-4.677655197485161e-8,0.002506414458106024,3.8719469291395064e-5,-4.650187612960767e-8,0.002506583529031959,3.847966713294664e-5,-4.6197729527279165e-8,0.0025068322231723375,3.825390939784268e-5,-4.5909552105830005e-8,0.00250715042643049,3.8075081039815325e-5,-4.5678747389959236e-8,0.002507518671035578,3.79694315028609e-5,-4.553864588391083e-8,0.002507909881434134,3.7953757863868274e-5,-4.551099211154035e-8,0.0025082914429322,3.8032479762118567e-5,-4.560219705504129e-8,0.0025086283062298424,3.819441369790588e-5,-4.5799089344806656e-8,0.002508888222288745,3.8409920504514224e-5,-4.6065065644875405e-8,0.002509049867274366,3.863051042059274e-5,-4.633938175836797e-8,0.002509113004638694,3.879425510226927e-5,-4.654391267553016e-8,0.0025091068429147767,3.883993594289078e-5,-4.6601084959132783e-8,0.0025090898042000585,3.872875934821506e-5,-4.6461387254399373e-8,0.002509134996273683,3.846495952331999e-5,-4.6129379088556667e-8,0.002509303823785431,3.810176136963081e-5,-4.567118163005868e-8,0.0025096206611317003,3.77249340788089e-5,-4.519386918014874e-8,0.0025100635025889603,3.742094334698776e-5,-4.480570179737146e-8,0.0025105750725739227,3.7247279761174246e-5,-4.4579149479260436e-8,0.0025110856597778002,3.721891833235642e-5,-4.4533963341258614e-8,0.0025115347336513087,3.7312355209207396e-5,-4.464198908935113e-8,0.0025118837717088426,3.7479672497395944e-5,-4.4844363555259744e-8,0.0025121197805155586,3.766434463552293e-5,-4.507092241835546e-8,0.0025122524606316582,3.781403239390384e-5,-4.5256039989766344e-8,0.002512308218517646,3.788897265948401e-5,-4.534921710684068e-8,0.002512323198993744,3.7866377431753216e-5,-4.532087455967344e-8,0.0025123364352792246,3.774164049515155e-5,-4.5164209733579505e-8,0.002512383722153255,3.752690440451212e-5,-4.4893662222274306e-8,0.0025124927690744884,3.724752495244522e-5,-4.454058376296237e-8,0.0025126800686300593,3.6937187041074546e-5,-4.4147073781900625e-8,0.002512949640805612,3.663249847498581e-5,-4.3759102263850506e-8,0.0025132935154346414,3.636784559588725e-5,-4.3419995601533096e-8,0.0025136935134270817,3.6171127440481755e-5,-4.3165098457630535e-8,0.002514123766723244,3.606055777639336e-5,-4.301781026749884e-8,0.002514553618955688,3.604231707921164e-5,-4.298663815376317e-8,0.0025149508839445193,3.610876316223164e-5,-4.306282715704458e-8,0.0025152857940081257,3.6237122105096005e-5,-4.321846926867821e-8,0.0025155362609611655,3.6389174493579715e-5,-4.3405830751730746e-8,0.002515694790395706,3.651350376824656e-5,-4.356001367114698e-8,0.002515776049335391,3.6552764092910476e-5,-4.360815615449484e-8,0.0025158217306482694,3.64579617376964e-5,-4.348766977365181e-8,0.002515896936537497,3.620833883698536e-5,-4.317158041654697e-8,0.002516073071847446,3.5828669318152446e-5,-4.269046581534293e-8,0.002516399987719169,3.539060604592482e-5,-4.213413246847748e-8,0.0025168814606322987,3.499021840014745e-5,-4.162331415721513e-8,0.0025174707936113064,3.4710531005774946e-5,-4.126263149227772e-8,0.002518090589616577,3.459078644678115e-5,-4.1102057661954364e-8,0.002518663524727177,3.4618912918017596e-5,-4.112741399925282e-8,0.0025191361740298083,3.474582741761788e-5,-4.1278096176040484e-8,0.0025194875406559848,3.490802432070915e-5,-4.147510457868247e-8,0.002519725292742549,3.504638962014763e-5,-4.16444050552658e-8,0.0025198766141857846,3.5116951628882e-5,-4.173036446018124e-8,0.002519978706172601,3.509468993429849e-5,-4.1700694202266914e-8,0.002520071130482626,3.497310385097045e-5,-4.154621540106111e-8,0.002520190252699242,3.4761794687652565e-5,-4.1278135639874127e-8,0.0025203652372844786,3.448316626617987e-5,-4.092409555262571e-8,0.002520615191656812,3.416849468288395e-5,-4.05232510677893e-8,0.002520947440465501,3.385345763496335e-5,-4.0120551152513905e-8,0.002521357059662189,3.3573332103171066e-5,-3.976057689732734e-8,0.0025218278023055253,3.335822588172072e-5,-3.9481488035551096e-8,0.0025223344083919984,3.3228896480038676e-5,-3.930979257938309e-8,0.0025228460215779803,3.319367073788616e-5,-3.925652251261835e-8,0.0025233303087924958,3.324669892834196e-5,-3.9315015622613785e-8,0.0025237579626117535,3.336760095667987e-5,-3.946031753109398e-8,0.0025241074151963775,3.352256518500154e-5,-3.9650309128366536e-8,0.0025243697315655363,3.366716014331096e-5,-3.982900185191263e-8,0.002524553460207322,3.375163915239177e-5,-3.9933128485974816e-8,0.002524688300114605,3.37298851909107e-5,-3.9903559505638475e-8,0.002524824998114826,3.357240651657453e-5,-3.970202211903166e-8,0.0025250277665400896,3.328120777325597e-5,-3.933021967054159e-8,0.002525356611076024,3.289990453199541e-5,-3.8842803606554595e-8,0.0025258428381231134,3.250914558990305e-5,-3.834160036262284e-8,0.0025264698957574395,3.220189906693548e-5,-3.794432342774024e-8,0.0025271741566565867,3.2047197639093385e-5,-3.773873488953271e-8,0.002527868930050737,3.206296769477658e-5,-3.7748283537389005e-8,0.002528477957775852,3.2214078628227146e-5,-3.792951338789108e-8,0.0025289589671146006,3.243333093220877e-5,-3.8198347470684486e-8,0.002529308244893737,3.2649160481611736e-5,-3.8464834618929027e-8,0.002529551044230285,3.280554245702909e-5,-3.8658136766423037e-8,0.0025297276422903844,3.286996887218826e-5,-3.873662679239773e-8,0.0025298816375502052,3.283279972249427e-5,-3.8687266747971134e-8,0.002530052440279624,3.2702708511500886e-5,-3.852013964263886e-8,0.0025302712732322313,3.250144171865661e-5,-3.8262077101730963E-08,0.002530559210242333,3.22591991158146e-5,-3.7950935413685944e-8,0.002530926148178654,3.2010602838034795e-5,-3.7630466201304596e-8,0.002531370351391248,3.1790798148834993e-5,-3.7345270529438355e-8,0.0025318786907376338,3.1631370951251876e-5,-3.713553615551818e-8,0.0025324279262051433,3.155608559611767e-5,-3.703162366365894e-8,0.0025329874164920214,3.1576901848478516e-5,-3.704907123537745e-8,0.0025335233363896095,3.1691081346079224e-5,-3.71849683887019e-8,0.002534004013295205,3.1880164541897305e-5,-3.741660475396124e-8,0.0025344056658638974,3.211134266810114e-5,-3.770302889521404e-8,0.0025347176716889862,3.234141683476799e-5,-3.798981805268735e-8,0.0025349464931195965,3.25231453918205e-5,-3.821692596727692e-8,0.002535117468766687,3.261356425395861e-5,-3.832919965284332e-8,0.002535273522037362,3.25837585549067e-5,-3.828894828785741e-8,0.0025354694854592633,3.242890013057747e-5,-3.808899818124254e-8,0.0025357608919522735,3.217582413424165e-5,-3.776263794934066e-8,0.002536187666940124,3.1883621764644e-5,-3.738458087106923e-8,0.0025367568259437178,3.1632385404099197e-5,-3.7056717765237276e-8,0.0025374327525164407,3.1499190159307474e-5,-3.687752844703763e-8,0.0025381439662942977,3.152925181564535e-5,-3.690529396896161e-8,0.00253880714969785,3.1717495544648184e-5,-3.7134493175846014e-8,0.002539357012067217,3.201212311537006e-5,-3.7500132915228656e-8,0.002539765928854451,3.233760649167408e-5,-3.79067823651572e-8,0.0025400453147970577,3.2622583246552875e-5,-3.82638918563021e-8,0.0025402331112333227,3.281872156862578e-5,-3.850972952935261e-8,0.002540377487382661,3.290621872055572e-5,-3.8618458257282727e-8,0.002540524155092487,3.288979390474908e-5,-3.8595246105451726e-8,0.0025407093934606078,3.279105867884921e-5,-3.846681028316092e-8,0.002540957537634892,3.2641231271875194e-5,-3.827233474111451e-8,0.002541280815381751,3.247562338960235e-5,-3.805651702208651e-8,0.0025416799467947535,3.232966235413645e-5,-3.786445609457888e-8,0.002542144857740274,3.223562798311164e-5,-3.7737407372711096e-8,0.002542655579590631,3.221938662051105e-5,-3.7708565661377785e-8,0.0025431838362320446,3.229680174430522e-5,-3.779849423590047e-8,0.0025436960054889923,3.247013233511464e-5,-3.8010564296692125e-8,0.00254415790798978,3.272542643389036e-5,-3.8327620226833e-8,0.002544541182956549,3.303226997284184e-5,-3.871155421654684e-8,0.0025448301444755037,3.334704611861932e-5,-3.9107270584671315e-8,0.0025450273211040327,3.3620069672829226e-5,-3.9451574837501164e-8,0.002545155729501141,3.380568399136757e-5,-3.968592063249876e-8,0.002545256556630443,3.387319471601984e-5,-3.977037692107729e-8,0.0025453820443540687,3.3816009067509984e-5,-3.969547432241733e-8,0.002545584452323269,3.365650342624907e-5,-3.948871602576002e-8,0.0025459029162299583,3.344455147949948e-5,-3.9213016496428415e-8,0.0025463510522096334,3.324840420752361e-5,-3.895529090102889e-8,0.002546909232956193,3.3138246514345544e-5,-3.8805530645937213e-8,0.002547525817875957,3.31656565561402e-5,-3.883045961997576e-8,0.002548129745697608,3.334578366524815e-5,-3.9050513834874766e-8,0.002548651901131051,3.3650693689135876e-5,-3.9431034299941284e-8,0.00254904685669721,3.4018656743914485e-5,-3.989388291545174e-8,0.002549305056062235,3.4375770534290136e-5,-4.034493649891447e-8,0.002549450755241978,3.465939649203068e-5,-4.070401123079711e-8,0.0025495291586907494,3.4833241697630345e-5,-4.092420182378461e-8,0.002549590687379239,3.4890489219274215e-5,-4.099602575860678e-8,0.0025496789205144556,3.4848031855415884e-5,-4.0940251920067316e-8,0.0025498244612649898,3.473730209237217e-5,-4.079637327911076e-8,0.0025500436032672657,3.459585033605535e-5,-4.061196445682029e-8,0.002550339547154352,3.4461308211710806e-5,-4.0434988555481746e-8,0.0025507043433619027,3.4367523260307965e-5,-4.030880973480197e-8,0.0025511206731693597,3.4341897944161364e-5,-4.0268729945377805e-8,0.002551563424104876,3.4402972367080165e-5,-4.03388608138628e-8,0.002552001606617659,3.4557690980306746e-5,-4.0528610973922175e-8,0.002552401461273141,3.479848664498499e-5,-4.082892216673805e-8,0.0025527314827823774,3.510120673609544e-5,-4.120952912256527e-8,0.002552969364218686,3.542565410114826e-5,-4.161951137566323e-8,0.0025531095580215266,3.572058968524942e-5,-4.19935413975739e-8,0.002553168729760865,3.59339104478195e-5,-4.226480110017664e-8,0.0025531858573809097,3.602631744383978e-5,-4.238244913932361e-8,0.0025532150611217693,3.598419299693054e-5,-4.232817322961466e-8,0.002553312233386756,3.582648549097322e-5,-4.212517282076237e-8,0.0025535195183206613,3.560220174300033e-5,-4.1835212060668614e-8,0.002553852830502855,3.537869695525301e-5,-4.15439349344679e-8,0.0025542964378125308,3.5224255096316406e-5,-4.133880357556166e-8,0.002554806195557747,3.519005643611671e-5,-4.1286055750094206e-8,0.002555320571266334,3.5296537354939525e-5,-4.141303722830442e-8,0.0025557766128750385,3.552799805828805e-5,-4.170091750744843e-8,0.002556126465171574,3.583732608559857e-5,-4.209034923582469e-8,0.002556349360987087,3.615973932622834e-5,-4.249882289419115e-8,0.0025564551410904254,3.6431100822784126e-5,-4.284408179364047e-8,0.0025564785276809823,3.6604393384032696e-5,-4.306534222497807e-8,0.002556467160589559,3.6658984478097046e-5,-4.3135357610844236e-8,0.002556468510402671,3.660096821231846e-5,-4.306106582894111e-8,0.0025565200544311623,3.645675748916501e-5,-4.28755593884766e-8,0.0025566445046864778,3.626394236750845e-5,-4.262649174123844e-8,0.0025568493925952245,3.606285126280341e-5,-4.236530656389189e-8,0.002557129168848333,3.589047078361781e-5,-4.213942711868888e-8,0.0025574680949682657,3.5776750212926264e-5,-4.1987475893609535e-8,0.0025578429268030643,3.574244515459497e-5,-4.193647233080398e-8,0.002558225197975276,3.579750560221392e-5,-4.1999734310573656e-8,0.0025585835602312756,3.593934241195524e-5,-4.217460204810126e-8,0.002558887016647417,3.61509584570488e-5,-4.2439939751589254e-8,0.0025591098618594843,3.639984373749989e-5,-4.2754572922321514e-8,0.002559238497448476,3.663948624180955e-5,-4.305908526809104e-8,0.002559278835866122,3.6815737799850185e-5,-4.3283910146574906e-8,0.002559261046831353,3.68791601038681e-5,-4.336518833602966e-8,0.0025592372774527606,3.680125222475687e-5,-4.3265665007869605e-8,0.0025592697003744484,3.658826729490232e-5,-4.299250430234186e-8,0.0025594113266689754,3.6284623802832374e-5,-4.260177686092147e-8,0.0025596874257284618,3.596177093402923e-5,-4.218437109225698e-8,0.0025600863540812774,3.569620677368294e-5,-4.183807532178788e-8,0.002560563687246403,3.554623400075656e-5,-4.1637989758230514e-8,0.002561056690233244,3.553661609585996e-5,-4.161684553067492e-8,0.0025615023865055877,3.565507989845713e-5,-4.176023644906828e-8,0.002561853048804872,3.585927599621287e-5,-4.20151041647804e-8,0.0025620856129585094,3.6090108860365954e-5,-4.230643641429664e-8,0.0025622040446008454,3.628699041834416e-5,-4.255663518033421e-8,0.0025622353918832905,3.6401300490328786e-5,-4.270283147309331e-8,0.0025622213473997326,3.6405401558346106e-5,-4.2708678956345274e-8,0.0025622078408738705,3.6295813489391095e-5,-4.256872173084837e-8,0.0025622353848293975,3.609068615788058e-5,-4.230540259760305e-8,0.00256233232102081,3.582322550250386e-5,-4.1960772840867707e-8,0.002562511863801732,3.553353735483984e-5,-4.158605612885912e-8,0.0025627725248878294,3.526111693837438e-5,-4.123196242121757e-8,0.00256310070883618,3.503928727808233e-5,-4.0941482037820396e-8,0.0025634741471409566,3.4891828381175004e-5,-4.074551346356165e-8,0.002563865248603042,3.483125361276283e-5,-4.066063228427299e-8,0.002564244075042713,3.4857926898380974e-5,-4.068793102758481e-8,0.002564581202623444,3.495942454822687e-5,-4.0812119542659516e-8,0.00256485109943431,3.5110048036088305e-5,-4.100075191629571e-8,0.0025650367242128005,3.527118210779312e-5,-4.120451556732618e-8,0.002565135498337338,3.539413055019303e-5,-4.136076151439963e-8,0.0025651654120114266,3.5427525351978796e-5,-4.1403038721833427e-8,0.0025651680412939974,3.533045146974794e-5,-4.127809559426407e-8,0.0025652038004362098,3.508913423679075e-5,-4.096749224333056e-8,0.0025653363340437958,3.472992631684516e-5,-4.050439181559414e-8,0.0025656093621240807,3.431861032240273e-5,-3.997271395936973e-8,0.0025660270415399614,3.394124366569468e-5,-3.9482630402027894e-8,0.0025665499166005316,3.367374522340637e-5,-3.913169321930131e-8,0.0025671094737676993,3.3555941288687166e-5,-3.8971649823626466e-8,0.0025676326398133926,3.358238507761676e-5,-3.899658257921173e-8,0.00256806353887396,3.3710715096302974e-5,-3.915332696323073e-8,0.0025683748955028416,3.387946611070678e-5,-3.936392740831083e-8,0.0025685688159335627,3.402630843529469e-5,-3.954873741392243e-8,0.0025686706264498697,3.410151913115822e-5,-3.96436201055269e-8,0.002568719735740128,3.4075375284090386e-5,-3.9609586863852165e-8,0.0025687602388208127,3.3940249039981586e-5,-3.9435794394587893e-8,0.002568832735617296,3.370870760914346e-5,-3.913743671001868e-8,0.0025689681542897694,3.340879250968684e-5,-3.874991257803349e-8,0.0025691840551694215,3.307763210742136e-5,-3.832068947589197e-8,0.002569483538443005,3.275462578485857e-5,-3.790047634512565e-8,0.00256985645494049,3.2475309573827486e-5,-3.753521316052912e-8,0.0025702822795653883,3.226668899010827e-5,-3.725997236190257e-8,0.002570733820216625,3.214437650152126e-5,-3.70952464417701e-8,0.002571181033117111,3.211133565934368e-5,-3.70453424363933e-8,0.0025715946013054125,3.215772517602418e-5,-3.7098167201791944e-8,0.002571949318347555,3.226144137496881e-5,-3.722583343084536e-8,0.002572227570996682,3.2389277195387017e-5,-3.738598474604562e-8,0.0025724233208959243,3.249913626791757e-5,-3.752447594345222e-8,0.002572546572517723,3.2544481248383096e-5,-3.7581027423136185e-8,0.002572627105263867,3.248253008845186e-5,-3.7499865346558056e-8,0.0025727146254667485,3.2286766565557764e-5,-3.7246045798024494e-8,0.0025728713746888203,3.196144702345607e-5,-3.6824362906102526e-8,0.0025731546573224077,3.1551122395760685e-5,-3.6291732875808416e-8,0.0025735930611439093,3.113531128318894e-5,-3.5750349486020505e-8,0.0025741686669498156,3.080383281342957e-5,-3.5315932671875985e-8,0.002574818793527538,3.0622158898999846e-5,-3.5073179334983326e-8,0.002575459250901792,3.0606384083367444e-5,-3.5043561582390667e-8,0.0025760157713347175,3.072183306088944e-5,-3.518340880366333e-8,0.0025764462366678763,3.0902486165110045e-5,-3.5408643786040035e-8,0.0025767458975593516,3.107681621716422e-5,-3.562773879707096e-8,0.0025769394739584782,3.118739906047621e-5,-3.5766760816977004e-8,0.0025770682803444704,3.12001551469743e-5,-3.5781267605868635e-8,0.0025771782767451306,3.110525759781823e-5,-3.565767914468704e-8,0.0025773113662062915,3.091339865537416e-5,-3.540879179965687e-8,0.0025774999609862632,3.065026064735654e-5,-3.5066958787603745e-8,0.0025777640357551542,3.035060945700293e-5,-3.4676643389330934e-8,0.002578110043284982,3.0052507451921462e-5,-3.428694627394564e-8,0.002578531397055513,2.9791926281541815e-5,-3.3944523195161236e-8,0.0025790103290381297,2.9598057935518227e-5,-3.368738209113566e-8,0.0025795209096909134,2.948965519446499e-5,-3.354007538112134e-8,0.002580032896739608,2.94727630782897e-5,-3.351077440578792e-8,0.0025805159234916397,2.954000878094914e-5,-3.3590389005577315e-8,0.002580943592558336,2.9671294779383406e-5,-3.375345201478358e-8,0.0025812972568394475,2.983567962877638e-5,-3.3960441519085414e-8,0.002581569412426488,2.9994385199715056e-5,-3.416148972868799e-8,0.002581766674986788,3.0105076417356167e-5,-3.430175679860849e-8,0.0025819120683374308,3.0127919994288804e-5,-3.4329229444587715e-8,0.002582045519993052,3.0034048227300084e-5,-3.420579656011638e-8,0.0025822203949664234,2.9816100977510195e-5,-3.392112802616561e-8,0.002582493526172687,2.9498181435378302e-5,-3.3505790908997055e-8,0.0025829078467866826,2.913934269067586e-5,-3.3035889417979293e-8,0.002583471922975573,2.8823154006253027e-5,-3.261957918279001e-8,0.0025841475821974037,2.8630944686295138e-5,-3.236241863773583e-8,0.0025848575009842015,2.860875020177161e-5,-3.23245690882075e-8,0.0025855132051104206,2.8747336224273945e-5,-3.249487409873808e-8,0.0025860483870083825,2.898840096044825e-5,-3.279872884323055e-8,0.0025864386289602428,2.925160284354101e-5,-3.31328354281292e-8,0.0025867003344974215,2.9464434140691195e-5,-3.340364643567008e-8,0.0025868758817611977,2.9580498213838604e-5,-3.355089908895895e-8,0.0025870163518221215,2.958356532888121e-5,-3.3552916689574256e-8,0.00258716874146591,2.948254760991543e-5,-3.342033057128494e-8,0.0025873690254704456,2.930331685653275e-5,-3.31857940505852e-8,0.0025876396104315717,2.908092911135896e-5,-3.289416461028243e-8,0.0025879892061104566,2.88534249664018e-5,-3.259456856612757e-8,0.0025884138089266786,2.8656989162023898e-5,-3.2334059412977954e-8,0.002588898359017111,2.8521979692271508e-5,-3.215231454490244e-8,0.002589419062272378,2.8469586189780088e-5,-3.2077164254932806e-8,0.002589946473323683,2.8509159090307877e-5,-3.212107523599057e-8,0.002590449393316276,2.8636563050092073e-5,-3.227904091415366e-8,0.002590899361197364,2.8834057391279875e-5,-3.2528461699677137e-8,0.00259127520629838,2.9071975778584452e-5,-3.2831291645010475e-8,0.0025915670649930126,2.9312176621478835e-5,-3.313838678718475e-8,0.0025917793326626975,2.951309804139549e-5,-3.33958896106978e-8,0.0025919320721802777,2.96361235160836e-5,-3.355336698452127e-8,0.002592060388232209,2.9652876016196784e-5,-3.357329612354791e-8,0.0025922110409532205,2.9552949250428954e-5,-3.344128213388367e-8,0.0025924352611730508,2.9350891816452204e-5,-3.3175402893513874e-8,0.0025927770732672843,2.908978789339379e-5,-3.2831114881942346e-8,0.0025932582302109035,2.8837351096213648e-5,-3.2496316807290324e-8,0.0025938644424488276,2.8670845449783314e-5,-3.2271752176790486e-8,0.00259454130569729,2.8651787572331885e-5,-3.223802204062918e-8,0.0025952073153012044,2.880006435961552e-5,-3.242178048536644e-8,0.0025957820237779284,2.9082752023308125e-5,-3.2781025144444316e-8,0.002596215451355888,2.942669394122801e-5,-3.3221292787055197e-8,0.0025965024447693404,2.9748129367640864e-5,-3.3634051131772567e-8,0.0025966765282158253,2.998185229157122e-5,-3.3934507817174133e-8,0.002596791242167228,3.009622528063916e-5,-3.408109516064842e-8,0.0025969011572768027,3.0092558261656323e-5,-3.4074756512656124e-8,0.002597049688176753,2.9995632087270322e-5,-3.3946851949197073e-8,0.0025972643186138377,2.9842572236855614e-5,-3.3744958806311066e-8,0.002597556681278304,2.9673938276303314e-5,-3.3521470462183287e-8,0.002597924726275709,2.9527819877394803e-5,-3.332595043754231e-8,0.0025983552864050196,2.9436122490796813e-5,-3.320019805897644e-8,0.002598826556628034,2.9421965307062316e-5,-3.3174709416024415e-8,0.0025993106853013,2.949756098639174e-5,-3.32658027069346e-8,0.002599776848353735,2.9662467082486734e-5,-3.347330412600232e-8,0.0026001951252648077,2.99025861685836e-5,-3.377926073172787e-8,0.0026005411717937273,3.019067108816419e-5,-3.414860105393843e-8,0.002600801115884702,3.048904747005782e-5,-3.453261736501532e-8,0.0026009756449572323,3.075479964565841e-5,-3.487558988314453e-8,0.0026010821201373643,3.094704699047445e-5,-3.512412559281178e-8,0.0026011537374556978,3.103526998712179e-5,-3.523794137373505e-8,0.0026012352359606815,3.100711111394474e-5,-3.52001023446636e-8,0.0026013752640351045,3.08739211784446e-5,-3.5024463414013454e-8,0.0026016160874248713,3.0672358090410115e-5,-3.475804093991398e-8,0.0026019820559800674,3.0460335902351476e-5,-3.447598865451195e-8,0.0026024694362678106,3.0306029731080202e-5,-3.4267389520307465e-8,0.0026030416290290835,3.0270338541856285e-5,-3.421233572704718e-8,0.0026036342474958208,3.0386657894908002e-5,-3.435533680675956e-8,0.0026041720030882468,3.064594194570206e-5,-3.4685549028801975e-8,0.0026045930310347977,3.09961293659131e-5,-3.513578419828963e-8,0.0026048698621258057,3.1359222083486464e-5,-3.560466452625087e-8,0.002605016277847952,3.165875436058266e-5,-3.5992435719287957e-8,0.0026050775582436726,3.1843809880593544e-5,-3.623231983185307e-8,0.0026051114117463955,3.1899280024474e-5,-3.630395313793583e-8,0.0026051700508598736,3.184180085895025e-5,-3.622821835659225e-8,0.0026052897100294578,3.1707923332180516e-5,-3.605202198717156e-8,0.0026054879335475844,3.154166996092474e-5,-3.5832271992857454e-8,0.0026057657097087847,3.138536625159791e-5,-3.5624031184444675e-8,0.0026061113393798714,3.1274330301516524e-5,-3.5473569113068227e-8,0.0026065041725679677,3.123426843754492e-5,-3.5414846395313414e-8,0.0026069176827509784,3.127995084377525e-5,-3.54676479866181e-8,0.0026073221793504135,3.141424395457776e-5,-3.563622226078849e-8,0.002607687760832499,3.162725534231478e-5,-3.590812143263662e-8,0.002607988052610515,3.189600175406857e-5,-3.6253749808592313e-8,0.0026082048747776295,3.218555030603266e-5,-3.662781876104157e-8,0.0026083332526672066,3.2452725750126513e-5,-3.697411627683993e-8,0.0026083853531278017,3.265297934002162e-5,-3.72343878712858e-8,0.0026083914259650088,3.2749867670578894e-5,-3.736065308576354e-8,0.002608396133617845,3.272507890931113e-5,-3.732831038939484e-8,0.0026084499787289036,3.258582024132688e-5,-3.714589715717855e-8,0.0026085974212649975,3.236651424287259e-5,-3.6857515677651e-8,0.0026088647679620098,3.2123260707560836e-5,-3.65358635683691e-8,0.002609251366434725,3.1921661831404596e-5,-3.6266559361749115e-8,0.0026097270315835943,3.182058662536569e-5,-3.612701970627575e-8,0.002610237284691165,3.185588171012813e-5,-3.6165054551592994e-8,0.002610716126815699,3.202876234196642e-5,-3.6383392719986345e-8,0.0026111037028992033,3.23033372673764e-5,-3.6736088564341154e-8,0.0026113636304113436,3.261570097552551e-5,-3.714014721843922e-8,0.002611493434829786,3.2892780986458314e-5,-3.750008482171149e-8,0.002611523495367077,3.307418573417459e-5,-3.7736560791061143E-08,0.002611505142783382,3.312826382278772e-5,-3.780750968567028e-8,0.002611493763715752,3.3056708359165294e-5,-3.771431792722278e-8,0.0026115341933477952,3.2888214172239555e-5,-3.749370515848177e-8,0.0026116528511147953,3.266635873779777e-5,-3.7202054725746606e-8,0.0026118568135878677,3.2437504850753895e-5,-3.6899719726700316e-8,0.0026121372770168093,3.22421675305727e-5,-3.663975855845446e-8,0.0026124744813415092,3.2110441667230555e-5,-3.646188211570326e-8,0.002612842227916604,3.206036322123708e-5,-3.639018811094762e-8,0.00261321139785924,3.2097696128144984e-5,-3.64327692480781e-8,0.00261355274464152,3.2216066114155835e-5,-3.658181139714531e-8,0.0026138396427348816,3.2397063044748426e-5,-3.681367790345908e-8,0.0026140514872013475,3.261067171343822e-5,-3.708942654441659e-8,0.0026141780311365196,3.2817050683532635e-5,-3.7357080590710184e-8,0.002614224114800926,3.297101014117252e-5,-3.7557436147006555e-8,0.002614213119889088,3.303013696291152e-5,-3.7634673802280204e-8,0.002614186549965068,3.296599359632987e-5,-3.755103806085695e-8,0.0026141973753741167,3.277534783937561e-5,-3.7301599143301795e-8,0.002614297046902401,3.248635183237581e-5,-3.69224435741917e-8,0.0026145197475576695,3.215508644569542e-5,-3.648630993783964e-8,0.002614870090159904,3.185171140863245e-5,-3.608467312200419e-8,0.0026153197674543857,3.164059402548646e-5,-3.5801927989370486e-8,0.0026158147703580206,3.156177686629293e-5,-3.569118447274441e-8,0.0026162903077401106,3.1620210993565046e-5,-3.5760006489734524e-8,0.0026166880991987354,3.1785560398102544e-5,-3.5969814749259693e-8,0.002616970841721617,3.200160523740788e-5,-3.624783231824479e-8,0.002617130261397801,3.220181753315225e-5,-3.65072435138508e-8,0.0026171871606737534,3.232655585316976e-5,-3.6669675925902054e-8,0.00261718397046602,3.233719347395405e-5,-3.6683842036219965e-8,0.0026171724016019787,3.222347506708292e-5,-3.6535405177033614e-8,0.0026172002283405987,3.200264024737339e-5,-3.624607593524087e-8,0.0026173011810684,3.171173130676567e-5,-3.586373455846947e-8,0.0026174902392406083,3.139662825485608e-5,-3.544818102047367e-8,0.0026177642440258567,3.110164755113335e-5,-3.5057518398642445e-8,0.0026181060091383474,3.086218416322592e-5,-3.4738433135395185e-8,0.0026184896650506663,3.070099873181416e-5,-3.452121062024481e-8,0.0026188855768160607,3.062736487635263e-5,-3.441851050195791e-8,0.0026192641644238587,3.063776642104189e-5,-3.44262138034998e-8,0.0026195987827379364,3.071705603650061e-5,-3.452490184616867e-8,0.0026198682621240295,3.083960982102611e-5,-3.4681327174304134e-8,0.0026200597799300902,3.0970713580179304e-5,-3.485016751422272e-8,0.0026201724252346513,3.106906901777973e-5,-3.497724556731821e-8,0.002620221032692184,3.1091763777759243e-5,-3.500601824118333e-8,0.0026202386178564006,3.10028288611161e-5,-3.4888839501679675e-8,0.0026202745150329704,3.0784947027866455e-5,-3.4602410900141006e-8,0.0026203852922867623,3.0450819216758257e-5,-3.416279062923851e-8,0.002620618265425924,3.0047622079189514e-5,-3.363132109745287e-8,0.002620992870319827,2.9648323815135033e-5,-3.31033303947174e-8,0.0026214894619416536,2.932979763141325e-5,-3.267956343422445e-8,0.0026220531242507274,2.9146566799369495e-5,-3.2431878766493014e-8,0.002622611657445149,2.9112958080091928e-5,-3.237984681690709e-8,0.0026230987533740094,2.9201352737337322e-5,-3.248826516711856e-8,0.0026234720422993033,2.935474709537481e-5,-3.268331002587069e-8,0.002623720696604966,2.950580934218716e-5,-3.28772184813543e-8,0.002623863141320352,2.9594733190630928e-5,-3.2991532941629956e-8,0.002623938403472255,2.9581523567624585e-5,-3.2973239176112444e-8,0.0026239948751797743,2.945153944445875e-5,-3.280223748832211e-8,0.002624079352158989,2.9214975075539966e-5,-3.249095709508292e-8,0.0026242282334253994,2.8901697565596798e-5,-3.207786296841002e-8,0.0026244620668671175,2.855315053807396e-5,-3.161700102240202e-8,0.0026247839524003213,2.821331655109691e-5,-3.116615430893701e-8,0.0026251814438661785,2.7920728883389294e-5,-3.077624804492969e-8,0.002625630821426735,2.770290261143587e-5,-3.048387523980967e-8,0.0026261023194173497,2.7573621615054672e-5,-3.030759911853844e-8,0.0026265650867071107,2.753272069170523e-5,-3.024760371638935e-8,0.0026269911754542366,2.7567495629662442e-5,-3.0287542037181364e-8,0.0026273585031503107,2.7654808956776647e-5,-3.0397305793839284e-8,0.0026276531846827346,2.776337289842733e-5,-3.0535989704684127e-8,0.0026278717322375995,2.785627661607388e-5,-3.0655133830369624e-8,0.0026280234298139303,2.7894361322732897e-5,-3.0703083939648824e-8,0.0026281325803872136,2.7841478039741167e-5,-3.063189326845691e-8,0.0026282392000712505,2.7672557297109677e-5,-3.040802070948686e-8,0.0026283955437060506,2.7384085700415085e-5,-3.002625965469175e-8,0.00262865565196701,2.700371371201096e-5,-2.9522515841626875e-8,0.002629057605315128,2.6592301817640855e-5,-2.897657699704715e-8,0.0026296042239974493,2.623136467768682e-5,-2.8495630917078668e-8,0.0026302538309996223,2.599585843503772e-5,-2.8178505464655922e-8,0.002630930614107705,2.5924188462011436e-5,-2.807623809106079e-8,0.0026315519205043305,2.6002942441934412e-5,-2.8171931342658712e-8,0.002632057542513618,2.6175113742488016e-5,-2.8391396121084223e-8,0.0026324258329257447,2.6364726212698507e-5,-2.8635308308118833e-8,0.002632672462723894,2.6502714775448774e-5,-2.881304110057633e-8,0.0026328380412312087,2.6543357889184606e-5,-2.8864178132588297e-8,0.0026329731241864014,2.6469411774491017e-5,-2.8765333495100423e-8,0.0026331258609140727,2.6289281768524357e-5,-2.852665947748336e-8,0.0026333338989213834,2.6030282261764095e-5,-2.8183285436663457e-8,0.002633620171689503,2.573080090149753e-5,-2.7785262712895203e-8,0.002633991642655656,2.5432731091922993e-5,-2.7387706234444074e-8,0.0026344403222787766,2.517473880061446e-5,-2.7041855038120544e-8,0.002634946113457011,2.498684705051351e-5,-2.6787753182580472e-8,0.0026354809501950237,2.4886802821856877e-5,-2.6649271729928865e-8,0.0026360135612485953,2.487845151655501e-5,-2.66318567861711e-8,0.0026365141657436557,2.4952076373098923e-5,-2.672296922722169e-8,0.002636958487571637,2.508635806998142e-5,-2.6894714182866534e-8,0.002637330770592852,2.5251345857424093e-5,-2.7107782135658014e-8,0.0026376258574601534,2.541191401004594e-5,-2.731596108184508e-8,0.002637850566159729,2.5531539580490765e-5,-2.747102088376633e-8,0.002638024527826738,2.557660264320669e-5,-2.7528304916922454e-8,0.0026381802741849004,2.552172015255805e-5,-2.7453780860784707e-8,0.0026383615500640014,2.535654692073106e-5,-2.7233147342018143e-8,0.0026386179885873363,2.5093413410281484e-5,-2.6882116638732477e-8,0.002638994289794082,2.4773009859853065e-5,-2.6454097522886618e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json new file mode 100644 index 0000000..270577e --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":19000,"numberOfSamples":1000,"samples":[0.00263951402096563,2.446275040491078e-5,-2.6038117688221015e-8,0.0026401631724560673,2.4241976200195275e-5,-2.5739261712150362e-8,0.002640884349598046,2.417407411008679e-5,-2.5641764129475454e-8,0.0026415912918163185,2.4277459627606698e-5,-2.577057311285661e-8,0.0026422007751247287,2.4514250198517228e-5,-2.6076268743377622e-8,0.002642664329828072,2.4806135401016956e-5,-2.6455914313675208e-8,0.002642981408758501,2.5067420523334124e-5,-2.6796599674782414e-8,0.0026431902581784475,2.523476738670862e-5,-2.701462116287926e-8,0.0026433473077564114,2.5280434293348607e-5,-2.707291191164421e-8,0.0026435080278592402,2.5209814035850336e-5,-2.6977864625794997e-8,0.0026437153058168224,2.5051197769627946e-5,-2.6766036632474325e-8,0.002643995008250455,2.4844553414124373e-5,-2.6489610125027892e-8,0.002644356096346505,2.4632482174508258e-5,-2.6204648569688263e-8,0.002644792866933108,2.4453878979516923e-5,-2.5962750928942762e-8,0.002645287958825506,2.433962413644026e-5,-2.580522022561437e-8,0.0026458157625529125,2.4309628109960647e-5,-2.5758941317575327e-8,0.00264634623063722,2.4371028134717308e-5,-2.5833817493889664e-8,0.0026468490048528843,2.4517626043978552e-5,-2.6021955503015233e-8,0.002647297629221693,2.473075415894809e-5,-2.629884122598041e-8,0.002647673419069512,2.498168300232041e-5,-2.6626587976528904e-8,0.0026479684516871804,2.5235364563765828e-5,-2.6958906132239313e-8,0.0026481873145099825,2.54550480044092e-5,-2.724714977923732e-8,0.0026483474854581976,2.5607329200806667e-5,-2.744689859121178e-8,0.002648478321749667,2.5667306663201197e-5,-2.7524725198145248e-8,0.002648618565417001,2.562364143904652e-5,-2.746495256788262e-8,0.002648811933829168,2.548331398325493e-5,-2.7276137128600436e-8,0.002649099993304903,2.5275225022656478e-5,-2.6996080239347117e-8,0.0026495118344468096,2.5050470037239995e-5,-2.6692385337925312e-8,0.0026500516782408433,2.4875937156110125e-5,-2.6454031394300517e-8,0.0026506887377273874,2.481830242231187e-5,-2.637005584696817e-8,0.0026513571570154788,2.4919878684211346e-5,-2.649732055333089e-8,0.0026519727576500727,2.5176293414199947e-5,-2.6830682803784936e-8,0.00265246347865712,2.553137242424813e-5,-2.7296067819030845e-8,0.0026527977885291948,2.5897092428559638e-5,-2.777691417282513e-8,0.0026529937872264786,2.6188736914085377e-5,-2.8160834927125474e-8,0.0026531053400488365,2.6354405340763377e-5,-2.8378742435525895e-8,0.002653197143730883,2.6384803835271885e-5,-2.8417798104530085e-8,0.0026533237489522734,2.630496073324375e-5,-2.8310488620170042e-8,0.002653519415667135,2.61584941720321e-5,-2.8113966146280626e-8,0.0026537972075638358,2.5993391727317396e-5,-2.7891437296909137e-8,0.0026541528220946162,2.5852711656499893e-5,-2.7699980495729533e-8,0.002654569583467504,2.576980469437125e-5,-2.758418502662082e-8,0.002655022888269817,2.5766321279371505e-5,-2.7573341150534074e-8,0.0026554838903719694,2.5851487346184455e-5,-2.7680269328933923e-8,0.0026559228543872925,2.6021962722230312e-5,-2.7900982114737346e-8,0.0026563125592436493,2.6262270927647677e-5,-2.8215210320601784e-8,0.0026566318822620954,2.6546159408893735e-5,-2.8588246183577963e-8,0.0026568693325829773,2.683937297731775e-5,-2.8974675169938895e-8,0.00265702588046726,2.7104047119859548e-5,-2.9324209301872344e-8,0.0026571162804157502,2.730439944298196e-5,-2.9589182861804454e-8,0.002657168287578267,2.741298625135473e-5,-2.973278593466467e-8,0.002657219506910407,2.7416528074622072e-5,-2.9736788701860016e-8,0.002657312004454739,2.7320200846281446e-5,-2.9607346163960382e-8,0.0026574851280428084,2.714945498836805e-5,-2.9377627673142143e-8,0.0026577671410715864,2.6948550466389847e-5,-2.9106116594645743e-8,0.0026581666337407396,2.677480114515534e-5,-2.8869130261933987e-8,0.002658665644369953,2.668759153112913e-5,-2.874622335182529e-8,0.0026592177642860556,2.673249924766369e-5,-2.8798893801029236e-8,0.0026597551845333914,2.6923863313585407e-5,-2.9047096880029876e-8,0.0026602066278280773,2.7233239467283458e-5,-2.945360447347533e-8,0.0026605218701161496,2.759279450344971e-5,-2.992839322576825e-8,0.002660691339317348,2.791687831695263e-5,-3.0357403494703774e-8,0.0026607489650131524,2.813307297178182e-5,-3.064397603742436e-8,0.002660756316410744,2.820629128228656e-5,-3.0740975280116455e-8,0.00266077813131762,2.814444053347429e-5,-3.0658329382785926e-8,0.0026608626181401033,2.7987094517445165e-5,-3.044802835863527e-8,0.002661033282093157,2.7787369099427664e-5,-3.018018911351549e-8,0.002661290670229049,2.759646253123286e-5,-2.992268275086257e-8,0.002661618847227499,2.745466279524221e-5,-2.9729256636510297e-8,0.002661992324996788,2.7388048564438633e-5,-2.9635075082451442e-8,0.0026623814914065623,2.740846380825369e-5,-2.9656508743774662e-8,0.0026627564064791672,2.751469021981976e-5,-2.9792508338229933e-8,0.002663089657287003,2.769378081550649e-5,-3.002626101217006e-8,0.0026633589993581537,2.7922422231694105e-5,-3.032697532756177e-8,0.0026635502049094915,2.816877186333765e-5,-3.065235507227498e-8,0.002663660058606214,2.8395509491539593e-5,-3.095269273591784e-8,0.0026636988226479592,2.8564683516255168e-5,-3.1177317725720975e-8,0.0026636910185861354,2.8644267020628355e-5,-3.128328931824663e-8,0.002663673368164203,2.8615444636392442e-5,-3.124507257083623e-8,0.0026636892999802016,2.847882357726595e-5,-3.106284172552677e-8,0.0026637804953454328,2.8257367087954442e-5,-3.076651119240239e-8,0.0026639771539304236,2.7994347029093748e-5,-3.041320967031577e-8,0.002664289390944928,2.7745919962196963e-5,-3.0077603120369135e-8,0.0026647021583839263,2.7569343911087362e-5,-2.983632036881539e-8,0.002665175574611234,2.7508966541401323e-5,-2.9749234062979572e-8,0.002665651753105894,2.758308150002246e-5,-2.9841711448467954e-8,0.0026660679387967637,2.777557445101302e-5,-3.009314804079612e-8,0.002666373652606828,2.8036422130212083e-5,-3.043735504000154e-8,0.0026665467921051737,2.8293485634668975e-5,-3.0778184924067085e-8,0.002666601852555459,2.8473726055012245e-5,-3.1017907545195027e-8,0.0026665852853927806,2.8526301970881325e-5,-3.1088172804032435e-8,0.002666559122253182,2.843738526897907e-5,-3.0969895282801916e-8,0.0026665805053176046,2.823043592843639e-5,-3.069370740064932e-8,0.0026666863526158286,2.795380188020402e-5,-3.032352927191644e-8,0.002666888030781808,2.7663438827002143e-5,-2.993366290807507e-8,0.0026671748130789254,2.7408493516036183e-5,-2.958966680282094e-8,0.0026675216046985984,2.722333376093842e-5,-2.933771824724552e-8,0.0026678967932506742,2.7125467417972392e-5,-2.920171724683057e-8,0.002668268174343812,2.7116928055334394e-5,-2.918496557666993e-8,0.0026686067536675503,2.718687142750966e-5,-2.9273488870256556e-8,0.002668889153521843,2.7314125916714938e-5,-2.9439367095546293e-8,0.0026690995240611494,2.7469415229723713e-5,-2.9643692403226327e-8,0.002669231588881734,2.761768401200625e-5,-2.983969287822529e-8,0.0026692909045567758,2.772137604439484e-5,-2.9977123836592665e-8,0.002669296689582548,2.7745483589062654e-5,-3.0009007656812204e-8,0.0026692818814056923,2.76645400450632e-5,-2.9900964988722216e-8,0.002669289786419154,2.7470487600255673e-5,-2.9641735210395685e-8,0.0026693663135547675,2.7178855682651955e-5,-2.9251483856010147e-8,0.002669548600717101,2.6829814064937723e-5,-2.8783321052296953e-8,0.002669853232704221,2.6481571864986507e-5,-2.8314646721668814e-8,0.0026702686612265127,2.6196540227162797e-5,-2.792883344868289e-8,0.0026707555410017745,2.6024208042934442e-5,-2.769243626155642e-8,0.0026712556999075863,2.5986573478360687e-5,-2.7635653186376986e-8,0.002671707089748267,2.6071129511972674e-5,-2.7742712797765785e-8,0.0026720600901569886,2.6233603318288687e-5,-2.795522462078366e-8,0.002672290443135009,2.640954156364561e-5,-2.818742186699068e-8,0.0026724052428170825,2.653145786869803e-5,-2.8349002218997386e-8,0.002672440220313686,2.6546752821712073e-5,-2.8369163632258638e-8,0.0026724489957256573,2.6431102842522592e-5,-2.8214673922745004e-8,0.002672487698917711,2.6193125149463324e-5,-2.789629736013679e-8,0.0026726001820109838,2.586916578069951e-5,-2.746199942230688e-8,0.002672808644915501,2.551090053887501e-5,-2.6980507296689357e-8,0.0026731118372536797,2.5170934360175597e-5,-2.6522128760281473e-8,0.0026734896589889912,2.4891330726868854e-5,-2.6143393330707435e-8,0.0026739109227287,2.4697549447807037e-5,-2.5878832880513e-8,0.0026743410670043246,2.4597486622909633e-5,-2.5739543146492245e-8,0.002674747998989801,2.458373190904632e-5,-2.5716071958711425e-8,0.0026751057440529678,2.463704675194214e-5,-2.57830039780471e-8,0.0026753964831346907,2.47297865751725e-5,-2.5903529531835557e-8,0.00267561183646005,2.4828867315808e-5,-2.6033429491443315e-8,0.0026757540793394046,2.489859900654912e-5,-2.6124877326598502e-8,0.00267583747024861,2.4904174485618595e-5,-2.6131104709850983e-8,0.0026758891320712635,2.4816671777239062e-5,-2.6013096260213478e-8,0.0026759481268225807,2.4619877273035702e-5,-2.5748745104085175e-8,0.002676060878740094,2.4317891637757816e-5,-2.534308690420903e-8,0.002676271641860672,2.3940547910458253e-5,-2.4835628594163594e-8,0.0026766089922976954,2.3542240639262514e-5,-2.429887410844018e-8,0.002677072911743146,2.3190810939116947e-5,-2.3823549830955104e-8,0.002677629384711697,2.2947801471423495e-5,-2.349226195279842e-8,0.0026782174373540597,2.284747447523584e-5,-2.3351420427147178e-8,0.002678767190753552,2.2884450527373708e-5,-2.3394574904936935e-8,0.002679221246387928,2.3015772470718473e-5,-2.3564955982734086e-8,0.0026795504594499405,2.31755695605357e-5,-2.3774871289120044e-8,0.002679759170591716,2.3295137206169125e-5,-2.393243272963582e-8,0.0026798803135628544,2.3320917185443094e-5,-2.3965602905995443e-8,0.0026799640145154023,2.322577558520088e-5,-2.3837397612610006e-8,0.0026800639314745046,2.3012215146842673e-5,-2.3550384713622862E-08,0.0026802248899573116,2.2708392050599457e-5,-2.3141585163499967e-8,0.0026804742934984,2.235906805897442e-5,-2.2670554977751216e-8,0.0026808185968568944,2.2014267511493717e-5,-2.220428842578894e-8,0.0026812448336239396,2.171854636264718e-5,-2.180280461715125e-8,0.0026817259374465234,2.150323880680172e-5,-2.1508611094251824e-8,0.00268222781652349,2.1382809836528223e-5,-2.1341628366433782e-8,0.0026827161726339327,2.1355034347562173e-5,-2.1299284836488415e-8,0.0026831617535715744,2.140378470911418e-5,-2.1360196730420277e-8,0.0026835436457758872,2.1502965966267144e-5,-2.1489465414133864e-8,0.0026838509543692596,2.16204854567272e-5,-2.1644050147128995e-8,0.002684083542702058,2.1721810919128004e-5,-2.1777567204648777e-8,0.0026842524063363047,2.1773296218550722e-5,-2.184473901283113e-8,0.0026843798793523676,2.174584592951199e-5,-2.1806283785570994e-8,0.002684499254751002,2.1619604754520625e-5,-2.1635208600026604e-8,0.002684652615539522,2.1389936125771377e-5,-2.132488556836351e-8,0.0026848851553524585,2.1073684595338914e-5,-2.0897551736655894e-8,0.002685234761333537,2.071276203290809e-5,-2.040922349572789e-8,0.0026857179492677428,2.0370460882582813e-5,-1.9944823185549678e-8,0.002686317392056504,2.0116807827503108e-5,-1.9598553255649772e-8,0.002686979523907763,2.0004912349695077e-5,-1.9442129284992614e-8,0.0026876280837219843,2.0048512671163523e-5,-1.949455243073783e-8,0.0026881899249303247,2.0214024293583018e-5,-1.9711294931862544e-8,0.002688620249435145,2.043285656095454e-5,-2.000069039920413e-8,0.002688914623014258,2.0626936406510176e-5,-2.0258093448061607e-8,0.002689104448499188,2.073370425998305e-5,-2.0399378529749706e-8,0.0026892419298627126,2.0720641518941455e-5,-2.038044359813892e-8,0.00268938312888527,2.0587598019377475e-5,-2.0200427284762034e-8,0.002689574768650333,2.0360579482662567e-5,-1.989355990805515e-8,0.0026898465947728313,2.0081670543145843e-5,-1.9515867700560127e-8,0.0026902088053080623,1.9798500950558975e-5,-1.913120086648592e-8,0.002690653320029833,1.9555086732382298e-5,-1.8798959747669437e-8,0.0026911577108349486,1.9384918317815483e-5,-1.856468027518342e-8,0.0026916907283687213,1.9306783846534458e-5,-1.8454204375709315e-8,0.0026922183440946422,1.932346249716126e-5,-1.8471725008849565e-8,0.0026927093194704355,1.9422959535281348e-5,-1.8601349303398246e-8,0.002693139577075912,1.9581620030571056e-5,-1.8811304655394267e-8,0.0026934949979082095,1.9768275469618075e-5,-1.905959980051295e-8,0.0026937727037630865,1.9948579211282313e-5,-1.9299928293298172e-8,0.002693981227014739,2.008903816565814e-5,-1.9487102008012012e-8,0.0026941399761876384,2.0160743594175506e-5,-1.958202828436642e-8,0.002694278150304583,2.014308771745926e-5,-1.9556669135148625e-8,0.002694432839134833,2.0027814972522264e-5,-1.939951202924289e-8,0.0026946454407021474,1.9823465164879817e-5,-1.912164795226923e-8,0.002694955118743798,1.9559228013221924e-5,-1.876210188452582e-8,0.0026953885604227568,1.9285588555638527e-5,-1.8388822887488567e-8,0.002695947389646158,1.906784792733087e-5,-1.8090003030037158e-8,0.002696598361371597,1.8969529356223275e-5,-1.7951673808881418e-8,0.0026972747172651123,1.9028183067974308e-5,-1.8024976958726027e-8,0.002697894448259002,1.923482567582152e-5,-1.82982964892157e-8,0.0026983903263144058,1.953167385178543e-5,-1.8694084270395405e-8,0.0026987355972708806,1.9833273175935162e-5,-1.9097304148343785e-8,0.002698950451980689,2.005962260427181e-5,-1.9400090848296767e-8,0.0026990880859063043,2.016241265792062e-5,-1.9537100067242948e-8,0.0026992117922432905,2.013345355569334e-5,-1.949684506615443e-8,0.002699375647089422,1.999759245364751e-5,-1.9312213181089278e-8,0.002699614261285006,1.9798830819145078e-5,-1.9041939056218857e-8,0.0026999406340535597,1.9586801508834097e-5,-1.8752604336031518e-8,0.0027003488738597202,1.9406767550178475e-5,-1.850529554434705e-8,0.002700818970481651,1.9293437948365567e-5,-1.8347238284879605e-8,0.0027013220497049467,1.9267719508964687e-5,-1.8307237617048195e-8,0.002701825549465035,1.9335593552310834e-5,-1.839393020569358e-8,0.0027022980757690288,1.9488723621636194e-5,-1.8596431789749385e-8,0.002702713662607276,1.970654001153539e-5,-1.8887103092774177e-8,0.002703055157533248,1.9959543955443707e-5,-1.9226073522447195e-8,0.002703316448267429,2.0213520540267606e-5,-1.9567030088327615e-8,0.0027035033133196956,2.0434152409261692e-5,-1.986350378693203e-8,0.0027036329373279133,2.059147843487134e-5,-2.0074871352699753e-8,0.002703732317100221,2.0663912104588616e-5,-2.017172044859481e-8,0.002703835708462897,2.064176391337209e-5,-2.0140576017720335e-8,0.002703981045779454,2.0530222225002636e-5,-1.9987983238696774e-8,0.002704204955540068,2.0351562676141675e-5,-1.9743638549377247e-8,0.0027045358067139627,2.014570325430151e-5,-1.9461313750205066e-8,0.002704984805772576,1.996714707688034e-5,-1.92148397591981e-8,0.0027055368649279493,1.987574577050617e-5,-1.9085611169575944e-8,0.002706145685078051,1.9919963553539275e-5,-1.913981275734757e-8,0.0027067395839023285,2.0115935619329194e-5,-1.9399872245807953e-8,0.002707241964949466,2.0432627984345386e-5,-1.9824189275903496e-8,0.002707600561978769,2.079591363745013e-5,-2.031258854203578e-8,0.0027078094546453073,2.1114943868623784e-5,-2.0742078873478338e-8,0.0027079095029694275,2.1317626509160715e-5,-2.101494646065448e-8,0.002707967740739984,2.1374638784031844e-5,-2.1091231796414332e-8,0.0027080501916891273,2.1301291919555723e-5,-2.0991196408044287e-8,0.002708202805321296,2.1142645928582355e-5,-2.0775234408464792e-8,0.0027084452776870867,2.0954316120813476E-05,-2.0518098346501502e-8,0.002708774162575712,2.078764131629634e-5,-2.028905117718749e-8,0.002709169810830763,2.0681479161499233e-5,-2.014086685744763e-8,0.0027096034430987557,2.065925821172407e-5,-2.0105765910602988e-8,0.0027100428652535534,2.0729021182110605e-5,-2.0195268624788187e-8,0.0027104568599029245,2.088478077558925e-5,-2.0401806622108805e-8,0.0027108187654351296,2.1108546115977512e-5,-2.0701327617105837e-8,0.002711109496587725,2.1372986326076458e-5,-2.10568899223502e-8,0.002711319970232938,2.1644827851250796e-5,-2.142334211249965e-8,0.002711452708090201,2.1889050652350722e-5,-2.1753098561200446e-8,0.002711522206080725,2.207368852602839e-5,-2.2002679141313222e-8,0.002711553726110139,2.2174663760722812e-5,-2.2139227350930035e-8,0.0027115804817427185,2.2179989492678676E-05,-2.214615199321869e-8,0.0027116394229722046,2.2092790600064617e-5,-2.2027220749220564e-8,0.002711765902353902,2.1932661136871404e-5,-2.1808497541801675e-8,0.0027119875265561675,2.17349102139576e-5,-2.153749682666738e-8,0.0027123175594141167,2.154714321577371e-5,-2.1278725972971384e-8,0.002712748677090166,2.1422310197924048e-5,-2.1104340382649643e-8,0.0027132489457220156,2.1407462817094904e-5,-2.107881988743877e-8,0.002713763222707799,2.1528939153101463e-5,-2.12386510801654e-8,0.002714223539826301,2.17779711508261e-5,-2.1572526893751845e-8,0.0027145692235508168,2.210462782438041e-5,-2.201294395593925e-8,0.0027147705289971287,2.242831272043591e-5,-2.245045363896241e-8,0.002714842961370987,2.26651374401677e-5,-2.2770961975807826e-8,0.0027148417371246187,2.2759728481484883e-5,-2.2899019449501894e-8,0.0027148384646546696,2.270361220246182e-5,-2.2822761360270927e-8,0.002714894133814566,2.253147752919397e-5,-2.2588785865962968e-8,0.002715042481976411,2.230178058034443e-5,-2.227589996373742e-8,0.0027152877602880654,2.2075146022270574e-5,-2.196600255000497e-8,0.0027156119658795414,2.189977200438472e-5,-2.1724460810982776e-8,0.0027159847379479274,2.180547085498409e-5,-2.1592064109398672e-8,0.0027163717326484887,2.18037059038195e-5,-2.158495102003217e-8,0.0027167402462662167,2.189035707386248e-5,-2.169814943921391e-8,0.0027170626329077376,2.204902136902486e-5,-2.1909862774099005e-8,0.002717318577686348,2.225407880034124e-5,-2.2185536220454567e-8,0.002717496917322223,2.247368848952755e-5,-2.2481941172479003e-8,0.0027175971570509785,2.2673148098990517e-5,-2.2751819980273843e-8,0.002717630437619656,2.2818986025088118e-5,-2.2949521472554347e-8,0.002717619374232879,2.2883830547347417e-5,-2.3037639752791775e-8,0.0027175960863589687,2.2851508344780233e-5,-2.29939131948583e-8,0.002717598071460584,2.27213176952526e-5,-2.281699857396905e-8,0.0027176621709201596,2.2510260056520727e-5,-2.2529529271382513e-8,0.0027178174751903974,2.22521853070832e-5,-2.2177067543554316e-8,0.0027180784671276526,2.1993333213934358e-5,-2.1822217623532972e-8,0.0027184398641318065,2.178448760758116e-5,-2.153411268172913e-8,0.0027188745594770346,2.1670561409178468e-5,-2.137429317301222e-8,0.0027193360025531545,2.1679009178246315e-5,-2.1380826619141587e-8,0.002719766138446254,2.1809462677510583e-5,-2.1553961002315126e-8,0.00272010902935972,2.2028302823201387e-5,-2.184847600516649e-8,0.0027203278821346134,2.2272524858974438e-5,-2.2178797892063562e-8,0.0027204196799707763,2.24654419229855e-5,-2.2440404566424472e-8,0.002720419476537429,2.2541182151501676e-5,-2.2543308403420168e-8,0.002720389514355453,2.246792006086709e-5,-2.2443785172222848e-8,0.0027203968580779593,2.2257868624423312e-5,-2.2157995797522724e-8,0.0027204907531003454,2.1959156500183422e-5,-2.17509487518943e-8,0.0027206903780250197,2.1635680043467534e-5,-2.1309184877300774e-8,0.0027209858546815508,2.1346417556349277e-5,-2.0912787442917073e-8,0.002721347808163526,2.1132433058736414e-5,-2.06177932502233e-8,0.002721738732659261,2.101302770424033e-5,-2.045091160605777e-8,0.002722121842089695,2.0988064107378192e-5,-2.0412526919188236e-8,0.0027224663072612032,2.104272221321373e-5,-2.0482980964473065e-8,0.0027227497312666536,2.1152219247249398e-5,-2.0628864697851955e-8,0.0027229592187699085,2.1285646420264224e-5,-2.0808205423364215e-8,0.002723092024279769,2.140915534170127e-5,-2.0974851448080727e-8,0.002723156140984944,2.14891410191427e-5,-2.108288393508341e-8,0.002723170606461795,2.149605797679514e-5,-2.1091870780846034e-8,0.0027231647986974373,2.140913982897247e-5,-2.0973305086363463e-8,0.002723175747615389,2.122154123906254e-5,-2.0717585989345948e-8,0.0027232427667478894,2.094452464224403e-5,-2.0339705819586754e-8,0.0027233996145755853,2.0608713479640643e-5,-1.9880992713257535e-8,0.002723665721382843,2.026060892275378e-5,-1.9404470170278227e-8,0.0027240391567136266,1.9953854594028393e-5,-1.898310231028625e-8,0.002724494146855511,1.9736789731948312e-5,-1.8682948875842208e-8,0.002724984781134481,1.9639562245665583e-5,-1.8545605329381536e-8,0.002725454640230336,1.9664591180140306e-5,-1.8575060281540082e-8,0.0027258502841296267,1.978346436416098e-5,-1.8733227690675876e-8,0.0027261353236396123,1.9941877016394326e-5,-1.894645849238284e-8,0.002726301248658682,2.007230249813052e-5,-1.912271463933041e-8,0.0027263713289722514,2.011187104949174e-5,-1.9175991154117115e-8,0.002726395138448426,2.002057957804487e-5,-1.905127428909273e-8,0.002726434196991114,1.9793401183908815e-5,-1.8741182852925098e-8,0.0027265433420372793,1.946100805656228e-5,-1.828705235095383e-8,0.0027267551469351914,1.9078518607560066e-5,-1.7763682989189432e-8,0.002727073366580046,1.870747687105405e-5,-1.7254861286109985e-8,0.0027274765293817524,1.8398952985918913e-5,-1.683037011094019e-8,0.002727927993060576,1.818353027833995e-5,-1.6532295654523488e-8,0.0027283871266923043,1.8069347217504134e-5,-1.637222675764901e-8,0.0027288178204516824,1.804577514014172e-5,-1.633611041703065e-8,0.0027291931918580247,1.8089300870504294e-5,-1.6392157254153952e-8,0.0027294972768002954,1.816913014448269e-5,-1.649844892067187e-8,0.0027297251046408027,1.8251552466542002e-5,-1.660892918346911e-8,0.0027298822811575333,1.830324285422369e-5,-1.6677976929709144e-8,0.0027299846109979653,1.8294199006395545e-5,-1.6664471571957215e-8,0.0027300576392803658,1.8201084382144078e-5,-1.6536379482566312e-8,0.002730135367558795,1.801142871411346e-5,-1.6276481194654895e-8,0.0027302569950561194,1.772835840690819e-5,-1.5888815400112085e-8,0.002730460675000141,1.7374367034465673e-5,-1.540383280991605e-8,0.002730774317388617,1.6991538671805468e-5,-1.487874681986958e-8,0.002731205492992096,1.663554986253649e-5,-1.4389430286252634e-8,0.0027317346225685167,1.6362736100393333e-5,-1.401285392592605e-8,0.0027323159732417688,1.6213321694122396e-5,-1.3804237823242727e-8,0.0027328882043883593,1.6197272773221976e-5,-1.377768292956184e-8,0.002733391477933123,1.628923403372551e-5,-1.3899104903846669e-8,0.0027337846859482747,1.6435087027299024e-5,-1.4095004537599963e-8,0.002734056500043612,1.656745755001094e-5,-1.4273511480543449e-8,0.0027342271115420556,1.6624323330041047e-5,-1.4349761230979106e-8,0.002734341218625606,1.6564849873113524e-5,-1.4267579057934553e-8,0.0027344551943848145,1.6378505391622318e-5,-1.4012046808109738e-8,0.002734622289801755,1.608581588143182e-5,-1.3610682506044439e-8,0.0027348797656559553,1.5731229116967588e-5,-1.312384293400565e-8,0.0027352411979116873,1.5370487927067927e-5,-1.262758861964929e-8,0.0027356956705479342,1.5056407177672457e-5,-1.2194285616455754e-8,0.002736213318040265,1.4827270079832405e-5,-1.1876677483532097e-8,0.0027367546090290257,1.4700733657187753e-5,-1.169940036745348e-8,0.002737279962922846,1.4673731384326293e-5,-1.16586767454608e-8,0.0027377570640155654,1.4726736350655366e-5,-1.1728029197099415e-8,0.0027381648557289963,1.482989457646782e-5,-1.1866648191392354e-8,0.0027384946423735903,1.4948942426058718e-5,-1.2027544616739114e-8,0.002738749434445084,1.504985821963847e-5,-1.216399804528127e-8,0.0027389426406392242,1.5102225647928979e-5,-1.2234218749741384e-8,0.0027390967313658887,1.508190848938774e-5,-1.2205022203274869e-8,0.0027392418828776502,1.497377683520103e-5,-1.2055543818857391e-8,0.0027394140032673863,1.4774979914795335e-5,-1.1781703210623261e-8,0.0027396510558396095,1.449859754939216e-5,-1.1401214646296961e-8,0.0027399865631337478,1.4176337452192784e-5,-1.0957324233453986e-8,0.0027404401157403325,1.3857589419184968e-5,-1.0517579850249122e-8,0.002741006988407936,1.3601649709835046e-5,-1.016324470539438e-8,0.002741651946643131,1.3461932237357087e-5,-9.967701894510386e-9,0.0027423134297618586,1.3466164991872435e-5,-9.969292325791265e-9,0.0027429204127412043,1.3602045380436758e-5,-1.0151559338201335e-8,0.0027434161980657615,1.381781057785335e-5,-1.0443902181835858e-8,0.0027437775903663983,1.403930043979941e-5,-1.0744867582233018e-8,0.00274402026056172,1.4195086586668818e-5,-1.0956551973741348e-8,0.002744189707180539,1.4237647948831023e-5,-1.101361813162918e-8,0.0027443444308235623,1.4153214739371446e-5,-1.0896808965594635e-8,0.0027445391212823013,1.3960083614703103e-5,-1.063071839494125e-8,0.0027448126229584063,1.369940353501182e-5,-1.0271311517205686e-8,0.0027451820491002014,1.342296064314159e-5,-9.889353385649206e-9,0.0027456424369939375,1.3181296837245952e-5,-9.554228595057486e-9,0.0027461706266553357,1.301415215625418e-5,-9.320814951324564e-9,0.0027467319065318033,1.2944348784452829e-5,-9.220945708603037e-9,0.0027472878430236675,1.297566686114043e-5,-9.26028974478475e-9,0.0027478036209455806,1.3094521161716708e-5,-9.420488426281658e-9,0.0027482535395967965,1.3274409109423844e-5,-9.665206228210173e-9,0.002748624017387072,1.3481665911821765e-5,-9.94808846615289e-9,0.002748914201993835,1.3681151040180056e-5,-1.0220678594459335e-8,0.002749134840466332,1.3840922486020028e-5,-1.0438925666362003e-8,0.0027493062755827883,1.3935617636275572e-5,-1.0567851392877573e-8,0.0027494561978375956,1.3948871850020234e-5,-1.0584841736813426e-8,0.002749617298368145,1.3875330877006017e-5,-1.0482372438320108e-8,0.002749824478571436,1.3722661790345272e-5,-1.0270772986168708e-8,0.002750110830763187,1.3513482353169196e-5,-9.98093410823438e-9,0.00275050148863685,1.3286167853943228e-5,-9.665504146217214e-9,0.0027510052007713166,1.3092282740735443e-5,-9.395433012835077e-9,0.0027516054627253683,1.2987797311630384e-5,-9.247916863310523e-9,0.0027522560077975567,1.3016795714357577e-5,-9.283940992366734e-9,0.002752887270832192,1.3191513005764179e-5,-9.520705716744854e-9,0.0027534268750110877,1.3479307947422266e-5,-9.913575792228905e-9,0.002753827252818105,1.380820104122874e-5,-1.0363635022831688e-8,0.002754085066367869,1.4092408000508905e-5,-1.0752843979321471e-8,0.002754240423604777,1.4264671631161601e-5,-1.0988570669126968e-8,0.0027543577158397454,1.4297504261183262e-5,-1.1032801675695634e-8,0.0027545010082918016,1.4205075789953122e-5,-1.0904699986993847e-8,0.0027547161998007054,1.4030591799180186e-5,-1.0663283329901377e-8,0.0027550240194078655,1.3829185117178249e-5,-1.0384043206256625e-8,0.002755421453020713,1.3653474454465471e-5,-1.0139258403077382e-8,0.0027558875196220835,1.3544259564344984e-5,-9.985280220478687e-9,0.0027563903321073395,1.3525955479519786e-5,-9.956181654857124e-9,0.0027568938904163395,1.3605460183974092e-5,-1.0062009063794016e-8,0.002757364073561223,1.3773418082126131e-5,-1.029030898978133e-8,0.0027577735523741467,1.4007312606634619e-5,-1.0610254942756665e-8,0.002758105281049702,1.4275878871466236e-5,-1.0978721485269755e-8,0.0027583543129910426,1.4544196144378514e-5,-1.1347397176404875e-8,0.002758527884760369,1.4778781498711986e-5,-1.1669921998794136e-8,0.0027586439565762334,1.495202207329257e-5,-1.1908062139585563e-8,0.0027587286752269713,1.5045486741457556e-5,-1.2036263263573345e-8,0.002758813283168323,1.5052079543374385e-5,-1.2044567346228864e-8,0.0027589307562035483,1.497726783006875e-5,-1.1940277717807085e-8,0.0027591121400170103,1.4839587044545021e-5,-1.1748696271030066e-8,0.002759382258301141,1.4670374331164395e-5,-1.1512860934478634e-8,0.0027597543590631487,1.4512060743916354e-5,-1.1291303651724086e-8,0.002760223851724849,1.4413504572653444e-5,-1.1151667518328181e-8,0.002760762772812467,1.4420577561528979e-5,-1.1157671499436408e-8,0.002761318710750578,1.4561512390203414e-5,-1.1348746558323507e-8,0.00276182335825203,1.483046758444795e-5,-1.171717072812087e-8,0.002762213232767044,1.5178600777388183e-5,-1.2195628938203373e-8,0.0027624561618459875,1.5523579998102924e-5,-1.2670370954457433e-8,0.002762568055471419,1.577896645887847e-5,-1.3021911778698365e-8,0.002762607053442844,1.588892345218556e-5,-1.3173036202525945e-8,0.0027626477535367317,1.5847494556313896e-5,-1.3115353264673006e-8,0.002762752148698717,1.5693341116187472e-5,-1.290193227055894e-8,0.002762952717258098,1.5488291251018845e-5,-1.2617722370350503e-8,0.0027632510418019677,1.5294686690858635e-5,-1.2348462136331391e-8,0.0027636259344087917,1.5160707656321381e-5,-1.2160612203495138e-8,0.002764043924793039,1.511465428428553e-5,-1.2093523880228672e-8,0.002764468105360931,1.5165219435121325e-5,-1.2159711904489318e-8,0.0027648642771565795,1.5304554776486206e-5,-1.2348881160795975e-8,0.00276520491193756,1.551214917612753e-5,-1.2633083740317827e-8,0.0027654717421526196,1.5758859205074683e-5,-1.2972187445271782e-8,0.0027656573615933593,1.601108180866163e-5,-1.331966747011974e-8,0.0027657658412326984,1.623508143758839e-5,-1.3628693916074076e-8,0.0027658122315612965,1.6401336192405455e-5,-1.385824500072823e-8,0.0027658208032614435,1.64885423505343e-5,-1.397868551819702e-8,0.0027658220656359834,1.6486733828388484e-5,-1.397605157394892e-8,0.002765848891824904,1.639909794692674e-5,-1.3854513826157042e-8,0.0027659321674139512,1.6242317878778517e-5,-1.3636849548780435e-8,0.002766096303503263,1.6045369593808686e-5,-1.3362857387789591e-8,0.0027663548615603564,1.5846730676314847e-5,-1.308562701077851e-8,0.0027667064826740096,1.5689835021215877e-5,-1.2865361853446855e-8,0.002767131628491153,1.5616253392744474e-5,-1.2759959238257351e-8,0.002767591541465577,1.565613932350352e-5,-1.2811680422273687e-8,0.0027680318643640033,1.581672526418174e-5,-1.3031031172521404e-8,0.0027683935757452003,1.607229328191158e-5,-1.3382687188492964e-8,0.0027686315906423767,1.6362317419807093e-5,-1.3782849249591848e-8,0.0027687352106116232,1.660487394222258e-5,-1.4117902190796029e-8,0.002768738239820442,1.6725105080637398e-5,-1.4283993588661351e-8,0.0027687087079556953,1.6685822510540136e-5,-1.422947633870195e-8,0.0027687213527381837,1.650176304721841e-5,-1.3974559220475729e-8,0.0027688289978741332,1.622925799770131e-5,-1.3596908755438644e-8,0.002769048363398059,1.594031700512789e-5,-1.3195832869032236e-8,0.00276936337344147,1.569769408859385e-5,-1.2857958409166736e-8,0.002769738192543268,1.5541237964123733e-5,-1.2638499739393606e-8,0.002770130857577132,1.5485700596560033e-5,-1.2558236264973412e-8,0.0027705028435936804,1.5525121557837643e-5,-1.2609441752677153e-8,0.002770824104016123,1.5639139817898094e-5,-1.2764417778794309e-8,0.0027710750382562957,1.579871667179225e-5,-1.298325399628226e-8,0.002771246995946245,1.5970684935818387e-5,-1.322007185623983e-8,0.0027713422068845884,1.6121524757386047e-5,-1.3428307331702114e-8,0.0027713733059165882,1.622087961293736e-5,-1.3565689517813172e-8,0.0027713622519797507,1.6245092710609566e-5,-1.3599228831309594e-8,0.002771338258376431,1.6180665568763176e-5,-1.3510033682923686e-8,0.0027713344138243505,1.6027070557930125e-5,-1.3297175460530656e-8,0.0027713830768532144,1.579813080854103e-5,-1.2979564370243544e-8,0.0027715105782646693,1.5521323628688927e-5,-1.2595002061998987e-8,0.002771732045267941,1.5234636665673235e-5,-1.2195915802458485e-8,0.002772047301432447,1.4981007805899022e-5,-1.1841777298032802e-8,0.002772438752589332,1.4800880562158318e-5,-1.1588867502371844e-8,0.0027728720133379584,1.4723695349422957e-5,-1.1478455258934069e-8,0.0027733000270757664,1.475936384689405e-5,-1.1524829287417343e-8,0.0027736714038943994,1.4891518683271445e-5,-1.1705728640433002e-8,0.002773942949580787,1.5075513691583893e-5,-1.1959405556781578e-8,0.002774094298536084,1.5244784160866828e-5,-1.2193420369479077e-8,0.00277413935771806,1.5327642621168224e-5,-1.2308056164262575e-8,0.002774127095241945,1.5271382737278492e-5,-1.222991079233378e-8,0.002774127125267959,1.5063483024427677e-5,-1.1941373736095969e-8,0.002774204509579759,1.4737530909312808e-5,-1.1488800019336111e-8,0.0027743965548067697,1.43593324733346e-5,-1.0963210259393599e-8,0.0027747034985702353,1.4001351538615448e-5,-1.0464911437262635e-8,0.0027750951364715324,1.3719672259939094e-5,-1.007167416389651e-8,0.002775526051367617,1.3542754928601997e-5,-9.823200461899074e-9,0.0027759503581378433,1.3472044653032601e-5,-9.721903248961207e-9,0.0027763311030684443,1.3489110782461308e-5,-9.742655844025204e-9,0.0027766441055164853,1.356402503429683e-5,-9.84425800476849e-9,0.002776878237542247,1.3662175145885656e-5,-9.978801364369811e-9,0.00277703421910064,1.3749001999510627e-5,-1.0098250340897997e-8,0.002777123145672282,1.3793304300500613e-5,-1.0159108468992627e-8,0.002777165069365021,1.3769948799978488e-5,-1.012627712891473e-8,0.002777187380425079,1.366257139239754e-5,-9.976865115490197e-9,0.002777222427192686,1.3466379006569386e-5,-9.704079704233e-9,0.002777303795784524,1.3190508945819256e-5,-9.32046418862628e-9,0.0027774610887294536,1.285887005615791e-5,-8.859037531642524e-9,0.00277771379236086,1.250829794191475e-5,-8.370757335750319e-9,0.0027780656045215007,1.2183280121571277e-5,-7.917278908180143e-9,0.00277850108054271,1.1927476784055753e-5,-7.559280656595044e-9,0.002778986285044394,1.1773582658743977e-5,-7.3424319327927995e-9,0.0027794741941447932,1.1734065609188585e-5,-7.284473669250357e-9,0.0027799142794985264,1.1795451333347614e-5,-7.367127372081157e-9,0.00278026452821218,1.1918270864807826e-5,-7.535846169209884e-9,0.0027805032458643373,1.204384768123753e-5,-7.709138116829781e-9,0.0027806373209791524,1.2107676158375936e-5,-7.797171506191644e-9,0.002780703452468078,1.2057033090757864e-5,-7.726358310931846e-9,0.002780759925646668,1.186787561236933e-5,-7.46295792291357e-9,0.002780869728653987,1.155427127221588e-5,-7.026249491461181e-9,0.002781080498337681,1.1164946271353642e-5,-6.483757041896363e-9,0.002781409786732128,1.0767143875816982e-5,-5.928845847483083e-9,0.0027818421004138097,1.04248448157659e-5,-5.450501229246064e-9,0.0027823377629871307,1.0181105245430409e-5,-5.10879819574084e-9,0.002782847735319512,1.0050699713777196e-5,-4.924616944992279e-9,0.002783327243787241,1.0022856728953502e-5,-4.883325460734916e-9,0.0027837440651562097,1.0069594711575953e-5,-4.94624874966697e-9,0.0027840812269027786,1.015483206039899e-5,-5.063271670053514e-9,0.0027843360787357524,1.024152532104462e-5,-5.1827770304128115e-9,0.002784517883012557,1.0296305457586499e-5,-5.258162067166841e-9,0.0027846452783812006,1.0292292461840592e-5,-5.251838399917288e-9,0.002784744078074569,1.0211053940810853e-5,-5.138017383006263e-9,0.0027848451722726508,1.004447040455388e-5,-4.905319130341186e-9,0.002784981869337182,9.796760182050914e-6,-4.559563393831464e-9,0.0027851859388087303,9.486172936094592e-6,-4.1260871182282976e-9,0.0027854820195520776,9.145128566965864e-6,-3.649923337373014e-9,0.0027858809685050146,8.817212839408479e-6,-3.1916519447886542e-9,0.002786374004344479,8.549858663854469e-6,-2.8172810988601715e-9,0.002786930516713693,8.38311526590999e-6,-2.5826759770245543e-9,0.0027875021251903167,8.337323332657525e-6,-2.5164033042951878e-9,0.002788033442730153,8.404341144331321e-6,-2.6074358965324996e-9,0.0027884768663511967,8.546587963184419e-6,-2.8036922561923524e-9,0.002788806444515096,8.705359435428541e-6,-3.023511191011914e-9,0.002789025898946628,8.816155454370437e-6,-3.1769693624562517e-9,0.00278916808580964,8.826174280013064e-6,-3.1902919454504053e-9,0.0027892861494492062,8.708654066453408e-6,-3.0259083522581603e-9,0.002789439024007953,8.46996585135858e-6,-2.6924102085292982e-9,0.0027896754169786063,8.14743898998842e-6,-2.2415918566646356e-9,0.002790020989298804,7.798481749683577e-6,-1.7533598997337004e-9,0.0027904727105389194,7.484380983397801e-6,-1.3132102122914294e-9,0.0027910019465777094,7.254182931369871e-6,-9.89761674395551e-10,0.0027915644996498075,7.133899378245067e-6,-8.196308089392246e-10,0.002792113334641582,7.123723332179867e-6,-8.034153427098901e-10,0.0027926094573086616,7.202432983697204e-6,-9.117101623954198e-10,0.002793028233302452,7.335726174669705e-6,-1.0966748720526548e-9,0.0027933609484635524,7.4849003149403414e-6,-1.3041707157630382e-9,0.002793613109513304,7.61360949860106e-6,-1.4832721372423023e-9,0.002793801331699417,7.692125726622039e-6,-1.5923023708007069e-9,0.0027939501157332436,7.699650544928369e-6,-1.602113739190793e-9,0.0027940890449749374,7.62559574208575e-6,-1.4978805430814948e-9,0.0027942502546082484,7.47061613566804e-6,-1.2805101597583769e-9,0.002794465545354246,7.247708832349798e-6,-9.681400023267961e-10,0.0027947623730721393,6.982972729165114e-6,-5.97180208495864e-10,0.002795158293619206,6.714815163187818e-6,-2.2122179168722028e-10,0.0027956544044971682,6.489842552957791e-6,9.465788350054435e-11,0.0027962298905296608,6.353985618709735e-6,2.862426270105938e-10,0.0027968413003591638,6.339329590931643e-6,3.085594249353236e-10,0.002797430023565606,6.450574770211097e-6,1.5483829055035215e-10,0.0027979381407812233,6.657939065789282e-6,-1.33481326751483e-10,0.0027983274370340884,6.9023050870562255e-6,-4.73865860969561e-10,0.0027985929487883057,7.112534229482264e-6,-7.668664513252449e-10,0.0027987644712778367,7.227889781129287e-6,-9.274873085756629e-10,0.002798895846497114,7.215922522318092e-6,-9.102130577481535e-10,0.0027990476214502418,7.07954168609196e-6,-7.189055791823305e-10,0.002799270159329704,6.8528184660678055e-6,-4.0097058487487015e-10,0.0027995921098042825,6.589150394962895e-6,-3.089155205840986e-11,0.0028000160559371254,6.346543838175632e-6,3.10246237176008e-10,0.0028005208861621384,6.174077528739478e-6,5.536306075559972e-10,0.002801069138807742,6.102332622183427e-6,6.561508599671992e-10,0.002801616887775129,6.139228531226112e-6,6.063570042587458e-10,0.0028021235424224794,6.271340195284573e-6,4.227738196672006e-10,0.0028025593261495505,6.469448209654452e-6,1.462323628969768e-10,0.002802909202716053,6.696171451931554e-6,-1.7081556781815749e-10,0.0028031732715659992,6.913472533175175e-6,-4.748902722777455e-10,0.002803364595060627,7.088522312131387e-6,-7.198047146353163e-10,0.002803505761944061,7.197381055746142e-6,-8.718919784335805e-10,0.002803625279954858,7.226791581760613e-6,-9.125259098952547e-10,0.0028037543398572442,7.1748236665111314e-6,-8.389867042693141e-10,0.0028039239008144736,7.051055423278122e-6,-6.646711695244907e-10,0.0028041616337651505,6.8765748079719594e-6,-4.190817695600791e-10,0.0028044880974484863,6.6835013555270844e-6,-1.471822583423747e-10,0.0028049117634366405,6.5130028002482435e-6,9.333211200818222e-11,0.002805423407949294,6.410183518830969e-6,2.391581525590211e-10,0.0028059919682429956,6.414458134729057e-6,2.348761811647254e-10,0.0028065656354558507,6.545964496883274e-6,5.204916047160679e-11,0.0028070820322286597,6.792467980851788e-6,-2.923256812302114e-10,0.0028074875111325586,7.1049452709561795e-6,-7.295484999982558e-10,0.002807758398439204,7.408801568743201e-6,-1.1549479735996095e-9,0.002807912309953183,7.629016879277494e-6,-1.4632184010996237e-9,0.0028080018600268285,7.717209899264664e-6,-1.5864308892715257e-9,0.00280809416469148,7.666574793887121e-6,-1.5149558263742769e-9,0.0028082476851966315,7.509156810078956e-6,-1.293585924107478e-9,0.0028084967768828226,7.300588647517751e-6,-1.0001414868267381e-9,0.002808847262739549,7.101610708252468e-6,-7.196587372359342e-10,0.0028092805508106752,6.9632211202788204e-6,-5.236849754708002e-10,0.0028097620700029556,6.9179843415002716e-6,-4.5813084509820613e-10,0.0028102506436204987,6.977109497128568e-6,-5.3909443895529e-10,0.002810706875116468,7.1318269763759485e-6,-7.546337294862254e-10,0.002811099653827845,7.357649721019065e-6,-1.0705937383009498e-9,0.0028114103186717213,7.620360090645017e-6,-1.4389400470211245e-9,0.0028116342841793644,7.882562522965005e-6,-1.8069960493090511e-9,0.002811780336556491,8.109700436176797e-6,-2.1259981185286337e-9,0.0028118681577567702,8.274759500587497e-6,-2.3578054290919355e-9,0.002811924804212133,8.361260065829955e-6,-2.479149299892737e-9,0.002811980892546883,8.36454527445245e-6,-2.4834224476780367e-9,0.0028120670235339054,8.291786877210306e-6,-2.380638941437992e-9,0.002812210545938763,8.161235186498023e-6,-2.196355734372293e-9,0.0028124324269317093,8.000947582996757e-6,-1.9699141477060387e-9,0.0028127438794841287,7.846806856187975e-6,-1.7517213264542863e-9,0.002813142552806622,7.739137129470781e-6,-1.5985536553676695e-9,0.002813608808015108,7.716755992795095e-6,-1.5652027889490953e-9,0.002814103934259319,7.807540942446503e-6,-1.6911479779159391e-9,0.0028145735374341036,8.016337002635303e-6,-1.9834359406417603e-9,0.0028149593679730016,8.31455967856922e-6,-2.4019489267911616e-9,0.0028152192752681693,8.639495206008205e-6,-2.858393347499628e-9,0.002815347491924279,8.910155826623826e-6,-3.238690313459153e-9,0.0028153820992645705,9.056877288906372e-6,-3.444739279219633e-9,0.0028153917225959865,9.049565373279847e-6,-3.434183721829044e-9,0.0028154478006963196,8.907688181128402e-6,-3.234368005566589e-9,0.0028155987912163055,8.687766600877536e-6,-2.924641731063571e-9,0.002815858796138938,8.458997654451106e-6,-2.6021037702235526e-9,0.0028162112125574854,8.281283974367032e-6,-2.3508457347741356e-9,0.002816620244870729,8.193045999255578e-6,-2.2249439851131193e-9,0.002817043196425516,8.208464494140208e-6,-2.2446042949535775e-9,0.0028174399451113383,8.320583317078408e-6,-2.4004250119473305e-9,0.0028177788955663485,8.506869283546043e-6,-2.661052702041974e-9,0.0028180401266746525,8.735196722855205e-6,-2.9814634943747566e-9,0.002818216618208338,8.969546300902432e-6,-3.3109360361838935e-9,0.0028183139820533165,9.175233421802618e-6,-3.600466281728827e-9,0.0028183488727125663,9.323413400084446e-6,-3.809217986798757e-9,0.0028183463049050498,9.39458305470024e-6,-3.90954465122841e-9,0.0028183361606477814,9.380837778898787e-6,-3.890194719106599e-9,0.002818349263122649,9.286671155840795e-6,-3.757406772881838e-9,0.002818413492033781,9.128333531433483e-6,-3.53396419516556e-9,0.0028185502773691137,8.932029054209705e-6,-3.2566550844126667e-9,0.0028187715560268277,8.731181934898563e-6,-2.972477812164968e-9,0.0028190771735186674,8.562773878565448e-6,-2.7335615331514525e-9,0.002819452811212173,8.462515809163019e-6,-2.5904087552382515e-9,0.0028198689659859892,8.458399189389392e-6,-2.5827732791303527e-9,0.0028202823760493027,8.562461789260582e-6,-2.7279409911836136e-9,0.0028206420530898016,8.76203294867925e-6,-3.0082465413739715e-9,0.0028209016970371353,9.01428419331315e-6,-3.3633026041725225e-9,0.0028210372630595158,9.250300643214355e-6,-3.695772409602383e-9,0.0028210625026776777,9.393515552182452e-6,-3.897503770163006e-9,0.0028210309762700552,9.388841811821506e-6,-3.890735771174717e-9,0.0028210180397079793,9.227581680220804e-6,-3.6632088806019304e-9,0.002821090430482207,8.951597895319539e-6,-3.273910330543877e-9,0.002821281364602508,8.633748034245999e-6,-2.8253997402826636e-9,0.0028215841712364,8.34816387734706e-6,-2.4219756103304343e-9,0.0028219629940235817,8.147536600047868e-6,-2.1378075495426764e-9,0.0028223698510740254,8.054819543764938e-6,-2.0053439921519466e-9,0.002822758897752516,8.06627654451556e-6,-2.0195926662397562e-9,0.0028230947143213737,8.159510301354147e-6,-2.149322407764077e-9,0.0028233554406812823,8.301852148391436e-6,-2.348744115947894e-9,0.00282353282593384,8.45708600749022e-6,-2.5668892800147934e-9,0.002823630975521782,8.590367413029983e-6,-2.754534233626674e-9,0.002823664602469181,8.671985233133684e-6,-2.869577271902303e-9,0.0028236568220320374,8.680413957217215e-6,-2.881448031847007e-9,0.002823636368151626,8.604700974308771e-6,-2.77454826352887e-9,0.00282363417253053,8.446003171394267e-6,-2.55042869198829e-9,0.0028236793809163405,8.217892940976991e-6,-2.2281801649158934e-9,0.0028237951897224314,7.945063459574405e-6,-1.8425677017566835e-9,0.0028239951055245996,7.660380146708828e-6,-1.4398777251617586e-9,0.0028242801645024245,7.40050743300998e-6,-1.0718072754261351e-9,0.0028246375107151937,7.200455492493439e-6,-7.878393942073073e-10,0.002825040666646605,7.087470503711195e-6,-6.266431600801484e-10,0.002825451877475943,7.074723084324243e-6,-6.071044899922806e-10,0.00282582713879414,7.155466286875476e-6,-7.199525343266866e-10,0.0028261246005233435,7.299190176080726e-6,-9.222045847808211e-10,0.00282631625064073,7.452589468357933e-6,-1.138486076576167e-9,0.002826400528199012,7.5487591099507736e-6,-1.2740885116638722e-9,0.002826410104662908,7.52604944408374e-6,-1.2417419852670848e-9,0.0028264072933222306,7.3519489307029926e-6,-9.95445629992879e-10,0.002826464019776748,7.0400481913062265e-6,-5.543990372405558e-10,0.0028266339859106117,6.6478080126638315e-6,2.5428477574195166e-13,0.002826932486316038,6.254009951919073e-6,5.573195548555597e-10,0.002827334926475173,5.928910433440534e-6,1.017639188279871e-9,0.0028277917797869642,5.7135131054699254E-06,1.3232757200131534e-9,0.002828248468891538,5.614983691413445e-6,1.4639603114758254e-9,0.0028286601533812237,5.614073569452187e-6,1.4666632447107474e-9,0.0028289983913868215,5.676607424183315e-6,1.379463686399024e-9,0.002829251626940915,5.763552361016194e-6,1.257411163440545e-9,0.0028294226533315623,5.8378051497912814e-6,1.1529709034080448e-9,0.002829525391442807,5.868127420486881e-6,1.1104318965864509e-9,0.002829581983388046,5.831461400637911e-6,1.162556397104102e-9,0.0028296201636700017,5.714584370675174e-6,1.3281613329217984e-9,0.0028296704970861516,5.515438234757098e-6,1.610201352537694e-9,0.0028297631021037386,5.243980536622576e-6,1.9945855887171813e-9,0.0028299236827314406,4.922012339098648e-6,2.4504737826893106e-9,0.0028301691569658544,4.581263003820374e-6,2.933023335426697e-9,0.0028305037217332307,4.259296600010102e-6,3.3891673170969797e-9,0.002830916459461489,3.993408191619676e-6,3.766190530193445e-9,0.0028313814792820546,3.8133369601973606e-6,4.021977064794002e-9,0.0028318611572783646,3.7341893056990802e-6,4.135010647324168e-9,0.0028323123871055148,3.7511839643312496e-6,4.1118687449955575e-9,0.002832695135207755,3.837639289960757e-6,3.990171251095755e-9,0.0028329821184355144,3.947374265896908e-6,3.835263147375323e-9,0.0028331678013638183,4.02244680576321e-6,3.7292680413861366e-9,0.002833273994081028,4.0063226672806816e-6,3.752376733977591e-9,0.0028333486086335536,3.8605677828823e-6,3.959124752584863e-9,0.0028334548656437477,3.5800588386143807e-6,4.356815088093346e-9,0.0028336519146150165,3.199196575199989e-6,4.896744085319297e-9,0.002833973775156948,2.7832242943678695e-6,5.486528461109836e-9,0.002834417043797699,2.4062456980927005e-6,6.021220646396547e-9,0.002834944056387233,2.1262318186002894e-6,6.418661302859258e-9,0.0028354988875670265,1.969203084860813e-6,6.641874660667108e-9,0.0028360266300474844,1.927913656213458e-6,6.70098348403756e-9,0.0028364871221820765,1.971420933258333e-6,6.639725869469694e-9,0.0028368601012207684,2.0580493155069e-6,6.517137481949485e-9,0.002837143798391918,2.146084523307919e-6,6.392404569592256e-9,0.0028373505649315713,2.200262702481213e-6,6.315634711039505e-9,0.0028375022225614853,2.194747581939334e-6,6.323580516384682e-9,0.002837626278744532,2.1141632193792574e-6,6.438118184879123e-9,0.002837752983195648,1.9539503821470446e-6,6.665710573780227e-9,0.002837912672316925,1.720635357079953e-6,6.997035491702147e-9,0.0028381327625960472,1.4319563558805509e-6,7.406851308263388e-9,0.0028384339774149996,1.1162175023410766e-6,7.85496469067567e-9,0.0028388259645027686,8.098741102245192e-7,8.289678744088075e-9,0.0028393032769971362,5.525056854996284e-7,8.654901931555912e-9,0.002839843390194472,3.791424868007549e-7,8.900980702450035e-9,0.0028404085467517684,3.1124743347196077e-7,8.997452128487504e-9,0.002840952357445899,3.4901622113740223e-7,8.943973785765355e-9,0.002841430295633725,4.68119085106208e-7,8.775000509935415e-9,0.0028418113735728568,6.229385663401742e-7,8.555251582211405e-9,0.0028420874546643236,7.562180083845292e-7,8.366042862071104e-9,0.002842277186103206,8.12928826496597e-7,8.28557717186452e-9,0.0028424229792514757,7.548341939316745e-7,8.368220742089385e-9,0.0028425812098529235,5.718152359385369e-7,8.628388634888865e-9,0.002842807562695609,2.864119988032696e-7,9.034090564959052e-9,0.0028431411958904427,-5.075784686922267e-8,9.513435790152513e-9,0.002843592795816794,-3.745954342178899e-7,9.973922781259542e-9,0.00284414136383234,-6.243541079214667e-7,1.0329162879331443e-8,0.0028447415293055118,-7.608178796241404e-7,1.0523290713005752e-8,0.0028453383289325533,-7.7516339165713e-7,1.0543619193061516e-8,0.0028458829874018483,-6.870431643594794e-7,1.0418002465363624e-8,0.002846343745861855,-5.347045473568402e-7,1.0200845400060194e-8,0.002846709393672464,-3.626758819940621e-7,9.955588339874181e-9,0.0028469868913886353,-2.1168976993434465e-7,9.740321417669294e-9,0.0028471961486281772,-1.1277953739782726e-7,9.5993194186896e-9,0.002847364587199702,-8.507667609072321e-8,9.559858106078426e-9,0.0028475227795878447,-1.357926730672906e-7,9.63217247842041e-9,0.0028477012760148397,-2.6098770439544055e-7,9.810568108142715e-9,0.0028479280799226956,-4.4634904759132186e-7,1.0074568307647262e-8,0.002848226026012085,-6.678989044547163e-7,1.038996413878128e-8,0.002848609485491815,-8.932110104100397e-7,1.0710570698878495e-8,0.0028490803883028048,-1.08421348997412e-6,1.0982211998329638e-8,0.0028496244808374053,-1.2027066912850638e-6,1.1150545368581883e-8,0.0028502098087099434,-1.2189535497820264e-6,1.117325646547346e-8,0.0028507899812964224,-1.1218694346857707e-6,1.1034558640475975e-8,0.0028513137786630493,-9.269848437980516e-7,1.0756559639854864e-8,0.0028517396184371633,-6.772541783626091e-7,1.040045521595228e-8,0.002852049745857075,-4.3383629160081065e-7,1.0053410747715433e-8,0.002852257667938162,-2.588555502582333e-7,9.80397507841194e-9,0.0028524050176591494,-1.966808876808624e-7,9.715373390453078e-9,0.002852549088431962,-2.610733914805113e-7,9.807193562515353e-9,0.002852746181827145,-4.3236107396414083e-7,1.0051389365553414e-8,0.002853036583500799,-6.643300296990387e-7,1.0382115635541902e-8,0.0028534351813685878,-8.975086395893872e-7,1.0714629219647167e-8,0.002853929365115319,-1.0745790729053187e-6,1.096719853065988e-8,0.0028544839144717562,-1.1539281212368752e-6,1.1080391616891132e-8,0.002855051068247713,-1.1181731669905117e-6,1.1029268499031812e-8,0.002855582768565016,-9.75875355579879e-7,1.0825912624788529e-8,0.0028560415652221956,-7.566392276976092e-7,1.051252610395587e-8,0.0028564073406055135,-5.018534207721013e-7,1.0148247915315251e-8,0.002856678785926064,-2.5444286344771827e-7,9.794490668368394e-9,0.002856870524742683,-5.058886026101649e-8,9.503046426891806e-9,0.002857007914873242,8.512852095070961e-8,9.30908662963937e-9,0.0028571215454132087,1.412895044493818e-7,9.22891211852966e-9,0.002857242681589101,1.1896856287060092e-7,9.260923881079643e-9,0.0028573999738171854,3.009713316077348e-8,9.38800232202608e-9,0.0028576170512156747,-1.0428600410014353e-7,9.580041432918065e-9,0.002857910332403342,-2.5568229132032263e-7,9.796312889070212e-9,0.002858286478980994,-3.900984786692505e-7,9.988259642955946e-9,0.002858739364701392,-4.712582429285285e-7,1.0104059717794627e-8,0.00285924729195101,-4.661759280679692e-7,1.0096572400747676e-8,0.002859772355326098,-3.5361998523694726e-7,9.935435750221926e-9,0.0028602647405304277,-1.3415193562808552e-7,9.621442048735044e-9,0.0028606740590430527,1.6248167838119398e-7,9.197139078236257e-9,0.0028609662384943444,4.78853899398024e-7,8.74468806781909e-9,0.002861139063409164,7.44255750862787e-7,8.365236229068475e-9,0.002861226934688806,8.984655386532225e-7,8.144871394043985e-9,0.002861290126468282,9.137233591571715e-7,8.123196247026203e-9,0.0028613933351704225,8.035260371148903e-7,8.280824203979028e-9,0.002861584483698411,6.150660520729815e-7,8.55027050948895e-9,0.0028618827041504077,4.113854839993796e-7,8.841474477305177e-9,0.0028622775767180642,2.524378755512151e-7,9.068802254899132e-9,0.0028627363987564036,1.8135003911035153e-7,9.17060221962431e-9,0.0028632149243848224,2.1781405590917407e-7,9.118624569170666e-9,0.002863668101326738,3.577669060595684e-7,8.918529212376947e-9,0.0028640588395250108,5.775725882547501e-7,8.603998240368662e-9,0.002864363874395403,8.409557603452859e-7,8.226895323903023e-9,0.002864576317683268,1.1070964706719793e-6,7.845700967819764e-9,0.0028647049562361203,1.3383042800297684e-6,7.514484405755572e-9,0.0028647709664122996,1.505912805444349e-6,7.274393180785887e-9,0.0028648031644739605,1.5936658590036488e-6,7.148753085068565e-9,0.0028648329825001757,1.5985844872876452e-6,7.141820831205116e-9,0.0028648901078107145,1.5298597346848266e-6,7.240401923975936e-9,0.0028649992237887115,1.40662889791498e-6,7.417073022953166e-9,0.002865177723667968,1.255395999935133e-6,7.63388684017037e-9,0.002865433962330402,1.1074017364182093e-6,7.84611558047985e-9,0.0028657656359532793,9.9575507730559e-7,8.006322067477023e-9,0.002866158158739561,9.517297115380463e-7,8.069644697438206e-9,0.0028665835690910722,9.99411061201828e-7,8.001485323787432e-9,0.0028670015032235038,1.1483302317519537e-6,7.788115041184415e-9,0.002867364559705957,1.3852827350377053e-6,7.448455109494122e-9,0.0028676299233594852,1.6691386030128764e-6,7.041536345565719e-9,0.0028677759678411305,1.9347439744128324e-6,6.660862146080923e-9,0.0028678167309223023,2.1103546939003207e-6,6.409323306547407e-9,0.0028678034788689843,2.144698261273195e-6,6.3603400593137696e-9,0.0028678078376921227,2.029720577821034e-6,6.525302617003996e-9,0.0028678938191672595,1.8044434865642015e-6,6.8481776203151215e-9,0.002868094666236441,1.5376263800915127e-6,7.230454856236507e-9,0.002868405913933894,1.3009574329347206e-6,7.569539411050057e-9,0.0028687938676968555,1.1474463535309566e-6,7.789602788927635e-9,0.002869210861589051,1.1019524188615657e-6,7.855057338570128e-9,0.002869609334325944,1.1622461307956396e-6,7.769013139741857e-9,0.002869951231852881,1.3057241037395412e-6,7.563711223382599e-9,0.002870212677215331,1.4976923875705954e-6,7.288744102079043e-9,0.002870385194690064,1.699062535904297e-6,7.000097817318875e-9,0.002870474725317542,1.8727935944983242e-6,6.75093165594071e-9,0.002870499135165648,1.988954290042755e-6,6.584275013804583e-9,0.00287048464138741,2.0282382639665136e-6,6.527917653518532e-9,0.0028704616140799583,1.9837809533528225e-6,6.5917562221991524E-09,0.0028704602549171655,1.8612665906276216e-6,6.767640226165102e-9,0.002870506668811975,1.6774673462495774e-6,7.031500508441279e-9,0.0028706197689758587,1.457604560662817e-6,7.34716419913411e-9,0.0028708091655566463,1.2320673332684813e-6,7.671058717135242e-9,0.0028710739127016565,1.0328358362055718e-6,7.957305852913069e-9,0.0028714019528153388,8.896734068155328e-7,8.163146833604354e-9,0.0028717702214416355,8.259448522978371e-7,8.254940922690583e-9,0.0028721457505871515,8.537612288983449e-7,8.215181934479207e-9,0.0028724887943640687,9.684630238408015e-7,8.050494120702066e-9,0.0028727594429303256,1.1436800035455436e-6,7.798780069504199e-9,0.0028729285817180555,1.3300651297795598e-6,7.531028042365649e-9,0.0028729915695690435,1.462263368762386e-6,7.341218977444032e-9,0.002872978448805743,1.4772429274966988e-6,7.3198920236120235e-9,0.002872951252863827,1.339998687991839e-6,7.517195289934864e-9,0.0028729836176172785,1.0630678713911078e-6,7.914951705548082e-9,0.0028731308183241877,7.051695488262558e-7,8.42876029911416e-9,0.0028734078884947605,3.473260311513201e-7,8.942348496380804e-9,0.0028737882087745852,6.114666054513867e-8,9.353047158655345e-9,0.002874219668384876,-1.1272126322969022e-7,9.602619303010073e-9,0.0028746456433421104,-1.6888577001482716e-7,9.683354937474298e-9,0.002875020314855133,-1.291094150016922e-7,9.626438926383505e-9,0.00287531548780091,-3.018828501717634e-8,9.484597230108128e-9,0.0028755210579180877,8.668647485398011e-8,9.31689120875924e-9,0.0028756422882183752,1.8328829012502568e-7,9.178200849892443e-9,0.002875696134402279,2.288312141503027e-7,9.112800066087184e-9,0.002875707547399061,2.025805089596482e-7,9.150562494597015e-9,0.002875705846174958,9.52630333672185e-8,9.304873938120105e-9,0.0028757210926035038,-9.052120703341189e-8,9.57200496741452e-9,0.0028757804866157105,-3.4091383411167794e-7,9.932003851136088e-9,0.002875904942563708,-6.325855214179894e-7,1.035130470799866e-8,0.0028761062305016523,-9.357358663929467e-7,1.0787070613173603e-8,0.002876385114451254,-1.2180331505464313e-6,1.1192851470911072e-8,0.002876730724811969,-1.4490859095561661e-6,1.1524975361779462e-8,0.002877121258656621,-1.6050876840491572e-6,1.174919121731711e-8,0.002877526072604426,-1.6732673197605107e-6,1.1847070930135468e-8,0.0028779092664162932,-1.6557908710847165e-6,1.1821668584018685e-8,0.0028782350578963945,-1.5726563757144414e-6,1.1701746720225946e-8,0.002878475324870978,-1.4624372605699738e-6,1.1542873713258664e-8,0.0028786189483200725,-1.3787231489666856e-6,1.1422265207849368e-8,0.002878680701003052,-1.3798468481290254e-6,1.1423915368175761e-8,0.002878704787159146,-1.5113471987390404e-6,1.1613291349036044e-8,0.002878756903957089,-1.785757177929549e-6,1.2008265758302951e-8,0.002878902862502164,-2.1705939820080316e-6,1.2561939708202041e-8,0.0028791817969540797,-2.5954920375929927e-6,1.3173007501556022e-8,0.002879589402551466,-2.9784185508799e-6,1.3723483959784089e-8,0.0028800817252932734,-3.2567032182663314e-6,1.4123284543802338e-8,0.0028805956227206074,-3.4055518723271702e-6,1.4336808076009957e-8,0.00288107208392016,-3.4376003397330977e-6,1.4382284035630344e-8,0.0028814710783001875,-3.3898579305011365e-6,1.43129954824349e-8,0.0028817755563885373,-3.3082580675083343e-6,1.4195060433588716e-8,0.002881988308033612,-3.2361154678533363e-6,1.4090836012607044e-8,0.0028821262129773463,-3.207791533507497e-6,1.4049812193983022e-8,0.0028822147082530657,-3.246215519180097e-6,1.4105033781258338e-8,0.0028822834027905776,-3.36241780936278e-6,1.4272395487930903e-8,0.002882362616150177,-3.5558741422002764e-6,1.4551103140709693e-8,0.0028824803465096684,-3.815258525621979e-6,1.4924750790070064e-8,0.002882659335415783,-4.119686711663455e-6,1.5363142882474208e-8,0.0028829141547347752,-4.440809412356523e-6,1.5825359058537653e-8,0.0028832486380844327,-4.746136382797398e-6,1.626457640078978e-8,0.0028836543274357697,-5.003595714935634e-6,1.6634632356475022e-8,0.0028841105948802857,-5.186858658952929e-6,1.6897660746955784e-8,0.0028845868380229104,-5.280659678729527e-6,1.703172244416492e-8,0.0028850468268388713,-5.285119178421869e-6,1.703703042675255e-8,0.0028854548808014517,-5.2180136555174015e-6,1.693924927655556e-8,0.00288578318588404,-5.1141539701945615e-6,1.678862920440044e-8,0.0028860192930803964,-5.021207939658294e-6,1.6653980349342108e-8,0.0028861723562649236,-4.991365507388845e-6,1.6610608238690897e-8,0.0028862757956466495,-5.06888921218822e-6,1.6722303008240677e-8,0.0028863833910300974,-5.2754810860775145e-6,1.7020219754766915e-8,0.002886556622110814,-5.598336802918629e-6,1.7485702072118628e-8,0.0028868448006271175,-5.988001271290007e-6,1.804727106737048e-8,0.0028872654738177545,-6.371171534302883e-6,1.8599132347397268e-8,0.002887795844354059,-6.675623117016277e-6,1.903710691825924e-8,0.0028883812762736244,-6.855447025490349e-6,1.9295003604406827e-8,0.0028889563468819752,-6.903610854021034e-6,1.9362747686658358e-8,0.0028894665800328696,-6.847559620219423e-6,1.9280059028761153e-8,0.0028898810668172878,-6.734011844686922e-6,1.911450684067196e-8,0.0028901940052642504,-6.612662324206851e-6,1.893795127279494e-8,0.0028904191547270935,-6.524988204859821e-6,1.881034874825922e-8,0.002890582222841485,-6.4992181867616665e-6,1.8772471855239283e-8,0.0028907142743236822,-6.549601240706169e-6,1.8844849350322546e-8,0.0028908470537224477,-6.677663335062472e-6,1.9029580088897277e-8,0.0028910098168515577,-6.87394958687946e-6,1.9312855656179486e-8,0.0028912269035187145,-7.1197167658875545e-6,1.966742957177217e-8,0.0028915154465618195,-7.388703555439692e-6,2.0055217248474415e-8,0.002891882983346302,-7.649501334948221e-6,2.0430764834169687e-8,0.002892325261621495,-7.869140909601243e-6,2.0746451553512368e-8,0.002892825069667161,-8.018140622490618e-6,2.095977025193972e-8,0.0028933531569161294,-8.0765493987099e-6,2.1042023401707183e-8,0.0028938720607829473,-8.039749741569616e-6,2.0986676926427616e-8,0.002894342905333149,-7.92219781746215e-6,2.081475472290096e-8,0.0028947341280570267,-7.757261613370963e-6,2.0574609101836252e-8,0.0028950300744023127,-7.592178937176516e-6,2.033462657209387e-8,0.0028952370056188714,-7.47855706718128e-6,2.0169463592427875e-8,0.0028953844081573035,-7.460137255342665e-6,2.0142316838205095e-8,0.00289552034348127,-7.560525475110968e-6,2.0287169809216575e-8,0.0028957008077851775,-7.774273461944861e-6,2.0595931401456922e-8,0.0028959747760086865,-8.06484752748952e-6,2.1015565228355683e-8,0.0028963687909720668,-8.37202856618837e-6,2.1458840848969644e-8,0.002896876822197008,-8.628384556733143e-6,2.1828161536226112e-8,0.002897460687328443,-8.779917072525279e-6,2.2045408873836965e-8,0.0028980621551318326,-8.802502597728348e-6,2.207573173944743e-8,0.002898621746734977,-8.706920074860234e-6,2.1934852495291796e-8,0.0028990957821008693,-8.531279911183452e-6,2.1678125082780306e-8,0.002899465167343782,-8.326114196731398e-6,2.137891611386844e-8,0.0028997348041497496,-8.13959047569529e-6,2.110712912790612e-8,0.002899926963249216,-8.007836040779991e-6,2.091513975889782e-8,0.002900073067994656,-7.951291908204955e-6,2.0832502054918495e-8,0.002900206831484279,-7.975306429587075e-6,2.0866828269500727e-8,0.002900359629928538,-8.072622529241776e-6,2.1007425546019428e-8,0.0029005576921144888,-8.226159990315293e-6,2.1229360644075667e-8,0.0029008202589749987,-8.411462892954981e-6,2.1497037476612273e-8,0.0029011579526491515,-8.59892006014462e-6,2.176744153154923e-8,0.0029015709907129882,-8.756361710375036e-6,2.1993920303424827e-8,0.002902047505571332,-8.85279154909494e-6,2.2131593765595492e-8,0.0029025628872768883,-8.863671727157463e-6,2.2145000075912374e-8,0.0029030815052825793,-8.777345014016352e-6,2.2017385091665053e-8,0.0029035620496829224,-8.600986341434939e-6,2.175931513310784e-8,0.002903966637114285,-8.363362576374002e-6,2.141266869690318e-8,0.0029042717781266334,-8.111634884846253e-6,2.1045980547935134e-8,0.002904477372654277,-7.901280532790563e-6,2.073978444425112e-8,0.002904609628244343,-7.781372369153714e-6,2.0565217145761693e-8,0.002904715791276944,-7.780057503835996e-6,2.056294239996993e-8,0.0029048518634546975,-7.895457374774159e-6,2.0729997122619613e-8,0.0029050672122561154,-8.095212921731798e-6,2.1019213111936452e-8,0.0029053908949938285,-8.324795261790677e-6,2.1351336711916632e-8,0.002905823673533291,-8.52201545814966e-6,2.1636089845854755e-8,0.0029063379482547036,-8.63355664871243e-6,2.1796127132877224e-8,0.00290688567731947,-8.628754999473182e-6,2.178700899956975e-8,0.002907411886688896,-8.506448804640417e-6,2.1607149038605026e-8,0.002907869313118284,-8.29292031099503e-6,2.1294847433827952e-8,0.002908229337953015,-8.032291094367549e-6,2.0914343210019756e-8,0.002908486197412823,-7.773494661513888e-6,2.0536855496935417e-8,0.0029086544808403334,-7.5585686559262325e-6,2.0223523711567358e-8,0.0029087623904295403,-7.415402414785589e-6,2.001484051067057e-8,0.002908843981353781,-7.35553482324306e-6,1.9927459583560743e-8,0.002908932726752054,-7.375649943051864e-6,1.9956406208574644e-8,0.0029090572536835126,-7.460809532075294e-6,2.0079817615799907e-8,0.002909238952715364,-7.5879228762615555e-6,2.0264014865399943e-8,0.0029094906884145105,-7.728775534689363e-6,2.0467914700593435e-8,0.0029098158523242937,-7.852662044244406e-6,2.064685157630933e-8,0.002910207338650096,-7.929175550194102e-6,2.0756624253538985e-8,0.0029106466203267355,-7.931911576665453e-6,2.0758877958416994e-8,0.002911103814377557,-7.843588459108618e-6,2.062855490190973e-8,0.0029115402023730556,-7.66224497593975e-6,2.0362916420013977e-8,0.002911914696322001,-7.406730952055019e-6,1.998953139422466e-8,0.0029121945161994208,-7.118129171687856e-6,1.9568325801371748e-8,0.0029123675377467186,-6.853478439441242e-6,1.918239985768633e-8,0.002912450734123804,-6.670885447814342e-6,1.8916298524169225e-8,0.002912488859188778,-6.610394269086291e-6,1.88281387438807e-8,0.0029125417695362995,-6.679120462312963e-6,1.8928018749465943e-8,0.0029126652147423104,-6.848070988212437e-6,1.9173497757355166e-8,0.0029128935517388484,-7.061935206702308e-6,1.9483944368025575e-8,0.002913231037578079,-7.256695642236208e-6,1.9766193972595816e-8,0.0029136533209005457,-7.377571585707302e-6,1.9940619511564884e-8,0.0029141165252539614,-7.391701575272796e-6,1.9959524190801965e-8,0.0029145697689046887,-7.293322714917477e-6,1.981463990082668e-8,0.0029149673788549375,-7.1018310443380406e-6,1.953430007430907e-8,0.002915278149714961,-6.8545563898393026e-6,1.9172935518929185e-8,0.002915490151865234,-6.596725101954491e-6,1.8796465187354656e-8,0.0029156107375936115,-6.371248850546456e-6,1.846741356078346e-8,0.002915662539790091,-6.210673245514143e-6,1.8233164243708407e-8,0.0029156771594396804,-6.1327104522359935e-6,1.8119444504375368e-8,0.002915688499493966,-6.139498762978267e-6,1.812926086634637e-8,0.0029157272510905927,-6.219687203803143e-6,1.824596696099231e-8,0.0029158172217261446,-6.3520114728173305e-6,1.843850247261238e-8,0.002915973412501954,-6.5091582694995025e-6,1.8667034188020637e-8,0.0029162012640837876,-6.6612268782975755e-6,1.888798608393158e-8,0.0029164964235661433,-6.778735787311186e-6,1.9058396783844645e-8,0.002916844658644618,-6.835584702079287e-6,1.91402221340199e-8,0.0029172220097263466,-6.812552966048134e-6,1.910544630322981e-8,0.002917595884444303,-6.7017614420562816e-6,1.8942618913472558e-8,0.002917928412307093,-6.511815863831633e-6,1.8664385893287575e-8,0.00291818347875855,-6.2719153866716e-6,1.8313480562819844e-8,0.002918337682433519,-6.031490122748525e-6,1.7962147335797165e-8,0.002918392453911434,-5.8514246809711895e-6,1.7699255420367632e-8,0.0029183808220965175,-5.785913109725185e-6,1.760375851831056e-8,0.002918361694896576,-5.860827931022856e-6,1.7713146738291097e-8,0.0029184005478205227,-6.060277614749884e-6,1.8003943123245615e-8,0.0029185450818061424,-6.330635628385983e-6,1.8397723097046376e-8,0.002918808813042895,-6.6005652769916755e-6,1.8790403319492904e-8,0.002919169951357401,-6.805733183674234e-6,1.908827114831872e-8,0.0029195829508730235,-6.906435273516535e-6,1.92336174657321e-8,0.002919994648581057,-6.893430674434389e-6,1.9213166424777753e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json new file mode 100644 index 0000000..7805bb3 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":2000,"numberOfSamples":1000,"samples":[-0.0019226433452019043,-4.2400202047522655e-5,-4.847209139509104e-8,-0.0019224915279308452,-4.232138293995991e-5,-4.839917575682174e-8,-0.0019223575599970867,-4.2339533342532786e-5,-4.841941987929699e-8,-0.0019221925201880694,-4.2455757141232014e-5,-4.853500256368106e-8,-0.0019219535221161883,-4.264378690983704e-5,-4.87214377132331e-8,-0.0019216173050324704,-4.285653639574512e-5,-4.893368444013015e-8,-0.0019211878632388768,-4.304035090341533e-5,-4.911986351109583e-8,-0.0019206944269591652,-4.3151566455827686e-5,-4.923733483565604e-8,-0.001920180782153211,-4.316840557061996e-5,-4.9264336921476375e-8,-0.0019196912154135558,-4.3093903838697776e-5,-4.920299044056076e-8,-0.001919259170950511,-4.2950548434361e-5,-4.9074301884897993e-8,-0.0019189019210674083,-4.277089886837732e-5,-4.8909249976046343e-8,-0.0019186208521778832,-4.258868047478004e-5,-4.8740241599705884e-8,-0.001918404926768647,-4.243272605567538e-5,-4.859521792579728e-8,-0.0019182349450095773,-4.2323928794774185e-5,-4.849461482060666e-8,-0.0019180872700253946,-4.2274266862589164E-05,-4.8450338629402915e-8,-0.001917936666180632,-4.228680533004299e-5,-4.846574052979398e-8,-0.00191775854316843,-4.2355896173164964e-5,-4.8535824807684226e-8,-0.0019175311877270766,-4.246735024004276e-5,-4.864742159638906e-8,-0.0019172384671460499,-4.25989290061144e-5,-4.877961167038227e-8,-0.0019168730864799963,-4.2721876682799584e-5,-4.890508625070886e-8,-0.0019164398837302117,-4.280432151427329e-5,-4.8993279677066866e-8,-0.0019159579014177714,-4.281706315274191e-5,-4.901583883335078e-8,-0.0019154594243000278,-4.27412144250086e-5,-4.8953968414289994e-8,-0.001914984557283099,-4.2575562469439085e-5,-4.880561552483321e-8,-0.0019145716125768752,-4.234039279521026e-5,-4.858934382627422e-8,-0.0019142459086730812,-4.207501807745824e-5,-4.834220694952108e-8,-0.0019140111182697102,-4.1828569489815494e-5,-4.811113500434928e-8,-0.0019138468399848853,-4.1646650455964184e-5,-4.794024685992306e-8,-0.0019137136475314569,-4.155842585264431e-5,-4.785840090516636e-8,-0.0019135639168575628,-4.156847538008292e-5,-4.787112479174571e-8,-0.001913354878178476,-4.165575436672902e-5,-4.795925785880041e-8,-0.001913060039736298,-4.1779660100407035e-5,-4.808445425303678e-8,-0.0019126758326174886,-4.189128905126362e-5,-4.8199834042895305e-8,-0.0019122216639617473,-4.194655693717889e-5,-4.8262624541360104e-8,-0.0019117335388331718,-4.191721880810053e-5,-4.8244930247959284e-8,-0.0019112535774869718,-4.17965282482666e-5,-4.8139407883790543e-8,-0.0019108191058004997,-4.159831661316574e-5,-4.795859671838348e-8,-0.001910454761111615,-4.13507805095086e-5,-4.7729094163578805e-8,-0.0019101693588310655,-4.108797784158734e-5,-4.74834365018481e-8,-0.0019099571113809235,-4.084210928294797e-5,-4.725264424568893e-8,-0.0019098014051956349,-4.06383521782112e-5,-4.706116300989979e-8,-0.001909679232807439,-4.049244367589526e-5,-4.6924445600308274e-8,-0.0019095650792493577,-4.041027304587661e-5,-4.684851156054176e-8,-0.0019094338706790138,-4.038850509596943e-5,-4.6830551880131895e-8,-0.0019092631960406178,-4.041545998091156e-5,-4.685979719885473e-8,-0.0019090353342274217,-4.0471961726856714e-5,-4.691831881589462e-8,-0.0019087395911655302,-4.053242839868951e-5,-4.698199191766588e-8,-0.0019083750969175394,-4.0566889485238066e-5,-4.7022295836454817e-8,-0.0019079535950202848,-4.05448090409642e-5,-4.7009857068801336e-8,-0.0019075008929219535,-4.0441352326518995e-5,-4.692041592595363e-8,-0.0019070548602137859,-4.024557340002766e-5,-4.674274417153859e-8,-0.0019066581194424014,-3.996789525520936e-5,-4.648596905336088e-8,-0.0019063458229643833,-3.964246667720178e-5,-4.618202616974119e-8,-0.001906132593687367,-3.932066250072738e-5,-4.5879631296205274e-8,-0.001906005112413036,-3.9056140911694693e-5,-4.563013841888741e-8,-0.0019059250849624966,-3.888725831245831e-5,-4.547077730150599e-8,-0.0019058418160187416,-3.882488208844757e-5,-4.541289156609024e-8,-0.0019057084893034362,-3.885058262649113e-5,-4.5439933455113804e-8,-0.0019054953071705263,-3.892448678948119e-5,-4.551462448108332e-8,-0.0019051956015066044,-3.899818092129441e-5,-4.559102248754266e-8,-0.001904824751066378,-3.902764552633575e-5,-4.562680789434229e-8,-0.0019044139453100216,-3.898286178877979e-5,-4.5592592314242095e-8,-0.0019040014133682513,-3.8852641286461894e-5,-4.547679044559279e-8,-0.0019036234930003598,-3.864464423892581e-5,-4.5285911009026024e-8,-0.0019033074182967,-3.838144973804248e-5,-4.504099501526467e-8,-0.0019030670807785748,-3.809414814477403e-5,-4.477156044224583e-8,-0.0019029021776647626,-3.7815292683842436e-5,-4.4508817510060506e-8,-0.001902800227035411,-3.757290803529455e-5,-4.427982585191298e-8,-0.0019027403062597105,-3.738655521525043e-5,-4.410361508352597e-8,-0.0019026972766109718,-3.726562021454014e-5,-4.3989482282936625e-8,-0.0019026455605967178,-3.720939282853564e-5,-4.393706825168861e-8,-0.001902562049494492,-3.720819681311018e-5,-4.393747898583925e-8,-0.0019024282429587474,-3.7244887169539354e-5,-4.397474157144386e-8,-0.0019022320167928473,-3.7296417780327447e-5,-4.402726172840666e-8,-0.0019019694121183246,-3.733563521997301e-5,-4.406942025345132e-8,-0.0019016466101295054,-3.7333817380047615e-5,-4.4073850286943826e-8,-0.001901281721675244,-3.72647279533573e-5,-4.401521158739995e-8,-0.0019009051492186858,-3.7110772537172744e-5,-4.387608872624823e-8,-0.0019005564761927897,-3.687070357499274e-5,-4.365449081610721e-8,-0.0019002760006965934,-3.656614621766662e-5,-4.3370288285066725e-8,-0.0019000913323042824,-3.624205466668279e-5,-4.306583828633659e-8,-0.0019000039601944792,-3.5956706816941076e-5,-4.279656932567122e-8,-0.0018999840816792122,-3.576226105855051e-5,-4.261250079410351e-8,-0.0018999792883793371,-3.568461104514584e-5,-4.253901137884262e-8,-0.001899933981398471,-3.5713853399087564e-5,-4.2567602344540055e-8,-0.0018998090711157681,-3.581022732657273e-5,-4.266128735242672e-8,-0.0018995924498515157,-3.5920529128532807E-05,-4.27699363285063e-8,-0.0018992979805863262,-3.599552540735251e-5,-4.284667515898346e-8,-0.001898956996465333,-3.60016505232314e-5,-4.2859033641491364e-8,-0.0018986077115788766,-3.5925404995038095e-5,-4.2793327231141533e-8,-0.0018982861274868695,-3.5772115322624845e-5,-4.2653762704726326e-8,-0.0018980197803509253,-3.556151123416992e-5,-4.245848237196928e-8,-0.0018978243192027849,-3.532201505409536e-5,-4.2234258129154944e-8,-0.0018977025183165013,-3.5084842908056075e-5,-4.201085903922587e-8,-0.001897645338891351,-3.487865622253372e-5,-4.181584089370757e-8,-0.001897634548299051,-3.472539749417785e-5,-4.1670438822720854e-8,-0.0018976462592206278,-3.4637684651986404E-05,-4.158699002545304e-8,-0.0018976547528813345,-3.461783260192269e-5,-4.156798431104482e-8,-0.0018976360025567379,-3.465835456450116e-5,-4.160658512785339e-8,-0.0018975704668702292,-3.474353699435762e-5,-4.168818028849286e-8,-0.0018974450856599756,-3.485154582856132e-5,-4.179238643199875e-8,-0.0018972547032642363,-3.4956750270050015e-5,-4.189517808310863e-8,-0.0018970031462578617,-3.5032293373468896e-5,-4.1971187462921197e-8,-0.001896704041121835,-3.5053177068163955e-5,-4.199649895495414e-8,-0.0018963811064912409,-3.500033872352196e-5,-4.195247884233675e-8,-0.0018960669388229457,-3.486606242620335e-5,-4.183101890714069e-8,-0.0018957986732221059,-3.466005594878666e-5,-4.1640536726904226e-8,-0.0018956091571617987,-3.441367338006517e-5,-4.141024300465335e-8,-0.0018955143084655717,-3.417789714991304e-5,-4.11883959487616e-8,-0.0018955015199407235,-3.401103934461799e-5,-4.103064766105313e-8,-0.0018955276091062383,-3.395751831846302e-5,-4.097979506922786e-8,-0.0018955320612609062,-3.4027724788744977e-5,-4.104650552871127e-8,-0.001895460925824634,-3.419213691026499e-5,-4.120354608540807e-8,-0.0018952876637236959,-3.439431347479264e-5,-4.139792350116541e-8,-0.0018950194973305701,-3.4574094187676726e-5,-4.157273141268476e-8,-0.00189468901820827,-3.468727701743215e-5,-4.168573954249668e-8,-0.0018943393648524587,-3.471417304124221e-5,-4.171758103848185e-8,-0.001894011175966523,-3.4658126432902484e-5,-4.1670568510380554e-8,-0.0018937347654549707,-3.4538913747532676e-5,-4.156270803527193e-8,-0.0018935271586108895,-3.438520384909261e-5,-4.1420753571334326e-8,-0.0018933922404869188,-3.4228171385826936e-5,-4.127420869753851e-8,-0.0018933224519850319,-3.409667569558539e-5,-4.115067186901395e-8,-0.001893301244193991,-3.40137190510597e-5,-4.10723266568858e-8,-0.0018933060255165923,-3.399399788202456e-5,-4.105348708812609e-8,-0.0018933114133081418,-3.404253904550354e-5,-4.109924608197351e-8,-0.0018932925837213562,-3.415443233452324e-5,-4.120524021833533e-8,-0.0018932284621856921,-3.431570348176952e-5,-4.135853030487643e-8,-0.001893104383091029,-3.4505267334039883e-5,-4.1539480078514925e-8,-0.00189291393259836,-3.469764551964496e-5,-4.172428673891212e-8,-0.0018926599383916741,-3.486610463956082e-5,-4.188783776156979e-8,-0.0018923546511316431,-3.498605241766292e-5,-4.2006785198344876e-8,-0.001892019101621626,-3.5038631408074926e-5,-4.206286015466167e-8,-0.0018916814855736094,-3.5014534367428806e-5,-4.204652314564249e-8,-0.001891374040852943,-3.491799599962725e-5,-4.196092987201902e-8,-0.0018911275262606326,-3.477018738663742e-5,-4.182542386637248e-8,-0.0018909628356181614,-3.460994197225293e-5,-4.167647877700423e-8,-0.0018908809794151223,-3.448870510773402e-5,-4.1563025636714426e-8,-0.001890855680381783,-3.4457266426274074e-5,-4.1533801407386716e-8,-0.0018908353879217353,-3.454621539121781e-5,-4.1618610494880996e-8,-0.0018907590601062614,-3.474930510512576e-5,-4.1812322746267864e-8,-0.0018905806559135173,-3.502183484605819e-5,-4.2073175486873276e-8,-0.0018902883688857062,-3.529801938551741e-5,-4.233914044230188e-8,-0.0018899068551920142,-3.551742428610809e-5,-4.255290749642152e-8,-0.001889483249018912,-3.564481602849056e-5,-4.268065997382881e-8,-0.0018890679245541686,-3.567523527632135e-5,-4.2716955210695495e-8,-0.00188870032072965,-3.562727788606181e-5,-4.267856906938492e-8,-0.0018884030745074487,-3.5532202829357725e-5,-4.2594437460528625e-8,-0.0018881823723488097,-3.54243921208098e-5,-4.2496795451858114e-8,-0.0018880312102406572,-3.533504994855418e-5,-4.2415230301185514e-8,-0.0018879332139387782,-3.5288747014991394e-5,-4.237330143238159e-8,-0.0018878660597741292,-3.5301680267534746e-5,-4.23867434249854e-8,-0.001887804493950075,-3.5380813257388804e-5,-4.246254511061698e-8,-0.0018877231921547025,-3.552361030820859e-5,-4.259866804167272e-8,-0.0018875996014664324,-3.5718391160070784e-5,-4.278440830777563e-8,-0.0018874167566322304,-3.594551788242534e-5,-4.300154835611885e-8,-0.0018871657927251448,-3.617965687985636e-5,-4.322647911791066e-8,-0.0018868476636197298,-3.639308212496223e-5,-4.3433238917490384e-8,-0.0018864736576865142,-3.655967876258171e-5,-4.359717299143751e-8,-0.0018860644895497603,-3.66591992046944e-5,-4.369885112248462e-8,-0.0018856478855353213,-3.668124668546799e-5,-4.37278181581545e-8,-0.0018852547440176993,-3.6628421846668554e-5,-4.3685686879638724e-8,-0.0018849140165977931,-3.651813115392309e-5,-4.358808695279573e-8,-0.0018846464338938206,-3.638236555382138e-5,-4.346473580791103e-8,-0.0018844576056432885,-3.6264235942699986e-5,-4.3356365793623564e-8,-0.0018843321784880178,-3.6209913884206997e-5,-4.3307130103906174e-8,-0.0018842322632395324,-3.625576306513159e-5,-4.335226126403655e-8,-0.0018841040436168481,-3.641349949400654e-5,-4.350374571050373e-8,-0.0018838940566287233,-3.6660400894427665e-5,-4.374080127460915e-8,-0.001883570085252579,-3.694276386559895e-5,-4.401301964778491e-8,-0.001883135475562002,-3.7194520085842316e-5,-4.425796870583932e-8,-0.001882627578444282,-3.73621475032825e-5,-4.442477583414205e-8,-0.0018821014403124572,-3.742201299485457e-5,-4.4490542846202025e-8,-0.001881609313986513,-3.7382507458315104e-5,-4.4462439215216833e-8,-0.0018811865907120172,-3.7274116019286886e-5,-4.436849914685254e-8,-0.001880847632416261,-3.713591350573811e-5,-4.424508395808057e-8,-0.00188058871037337,-3.7004918805228556e-5,-4.4126962304448526e-8,-0.0018803936614843618,-3.691021781204701e-5,-4.4041748300567786e-8,-0.0018802392951189633,-3.6870851790922326e-5,-4.400778710220607e-8,-0.0018800994849178696,-3.68957089255605e-5,-4.40339130327419e-8,-0.0018799481169941405,-3.698411204251374e-5,-4.411991825255021e-8,-0.0018797614670353787,-3.7126553405316096e-5,-4.425722892864331e-8,-0.0018795204776576248,-3.730559347706619e-5,-4.442976975442706e-8,-0.0018792131464299988,-3.749729428555327e-5,-4.46153152223929e-8,-0.0018788368365865878,-3.7673694011914794e-5,-4.4787772369335294e-8,-0.0018783998781203336,-3.780658890837698e-5,-4.492065092723705e-8,-0.0018779216417479986,-3.787236867220032e-5,-4.4991520603290696e-8,-0.0018774304478634798,-3.785712894848209e-5,-4.4986782858554793e-8,-0.001876959132956837,-3.776087580238688e-5,-4.490568783170876e-8,-0.001876538772816988,-3.759950843431477e-5,-4.476237298058196e-8,-0.0018761917084975216,-3.740363503756282e-5,-4.458499652618009e-8,-0.0018759253154816227,-3.721393836510612e-5,-4.441161416080866e-8,-0.0018757279816746558,-3.7073377257336396e-5,-4.4282962063134714e-8,-0.0018755687920489152,-3.701708377818567e-5,-4.4232881827984826e-8,-0.0018754023218197238,-3.706175871807319e-5,-4.427809041286009e-8,-0.0018751791516401983,-3.71976903316632e-5,-4.4410338519050925e-8,-0.0018748606150037481,-3.738752598197328e-5,-4.4594994984169714e-8,-0.0018744330348925565,-3.7574982787928245E-05,-4.47791613026569e-8,-0.0018739145177022712,-3.770239276914684e-5,-4.490826020461936e-8,-0.0018733495373167643,-3.773009490362128e-5,-4.4944415378813574e-8,-0.0018727931908080317,-3.764831441568e-5,-4.487773977743384e-8,-0.0018722931442570632,-3.7476441825173546e-5,-4.472576455407728e-8,-0.0018718776143170825,-3.72522449686114e-5,-4.452343076403651e-8,-0.0018715526178116695,-3.701813258333055e-5,-4.431030817274317e-8,-0.0018713062231411261,-3.681055615655657e-5,-4.4120686585272034e-8,-0.001871115468151383,-3.665468354723957e-5,-4.397851191896047e-8,-0.001870952694577932,-3.6563328602725056e-5,-4.389625440586987e-8,-0.0018707900517583916,-3.653811265418476e-5,-4.3875885637797216e-8,-0.0018706023334060244,-3.6571255822349916e-5,-4.391050608580251e-8,-0.0018703688700737859,-3.664722159578986e-5,-4.398588937722728e-8,-0.0018700751930006965,-3.6744157938658e-5,-4.408184554328447e-8,-0.0018697148769254426,-3.683557666976917e-5,-4.4173775089313205e-8,-0.0018692914772034106,-3.6892936200826666e-5,-4.423502611041501e-8,-0.0018688199023591616,-3.688965083963331e-5,-4.424057092448585e-8,-0.0018683261082645549,-3.680648604854699e-5,-4.4172010900809014e-8,-0.0018678439684996118,-3.663736658049673e-5,-4.4023038613393244e-8,-0.0018674088734324848,-3.639364723333976e-5,-4.3803546879327065e-8,-0.0018670490319146785,-3.610454803253589e-5,-4.354021989210011e-8,-0.001866776960604691,-3.581233195531623e-5,-4.327223113044107e-8,-0.0018665842545617494,-3.556274227869284e-5,-4.304246095848443e-8,-0.0018664419014308188,-3.539322985208859e-5,-4.2886518844144926e-8,-0.001866306540510951,-3.532250177755452e-5,-4.282282625286369e-8,-0.0018661311596336301,-3.5344543323723834e-5,-4.284673828172474e-8,-0.0018658774885188531,-3.542898898557433e-5,-4.293057236042494e-8,-0.0018655268253949977,-3.55281941668765e-5,-4.303001094315354e-8,-0.0018650860333417425,-3.55896847358241e-5,-4.309572055327366e-8,-0.0018645862558132557,-3.557072469934887e-5,-4.3087114771064386e-8,-0.001864074064290464,-3.54502290003869e-5,-4.298370377047688e-8,-0.0018635978679334747,-3.523359331224885e-5,-4.278980205390345e-8,-0.0018631947076426666,-3.494883476042089e-5,-4.2531058883068645e-8,-0.0018628822307316867,-3.4636347734627516E-05,-4.224496475448857e-8,-0.0018626577466252,-3.433705755884229e-5,-4.196979779298566e-8,-0.0018625028468491243,-3.408334448344101e-5,-4.173608792809358e-8,-0.0018623903292806535,-3.389462368841906e-5,-4.1562378749819724e-8,-0.001862290600784725,-3.377697613200107e-5,-4.145477037782527e-8,-0.0018621762300559555,-3.3725088096835355e-5,-4.14086669723388e-8,-0.0018620246347852986,-3.372488473601601e-5,-4.141123207304418e-8,-0.0018618195632346566,-3.375593156589706e-5,-4.1443656121148575e-8,-0.0018615521548540242,-3.3793432453618705e-5,-4.148302730689643e-8,-0.001861222100187459,-3.3810221048498295E-05,-4.15041470998425e-8,-0.0018608389284970092,-3.377941053241642e-5,-4.148192086511341e-8,-0.0018604228570434176,-3.367833230390359e-5,-4.139496124109246e-8,-0.0018600040268228783,-3.3493942425028966e-5,-4.123062094176194e-8,-0.001859618642548962,-3.322877352067173e-5,-4.0990619843655576e-8,-0.0018593011806838898,-3.290498445207031e-5,-4.0694967467908326e-8,-0.001859073836432133,-3.256319848003421e-5,-4.038105550600808e-8,-0.0018589370096645738,-3.225400787141628e-5,-4.0095898376829484e-8,-0.0018588658572420299,-3.202355089014602e-5,-3.988278237900221e-8,-0.001858815953690681,-3.1898535195761845e-5,-3.9767279252543205e-8,-0.0018587365322608792,-3.187731481624273e-5,-3.974875641256137e-8,-0.001858585847420525,-3.193072891426777e-5,-3.9800881931187754e-8,-0.0018583427276889898,-3.201157846011818e-5,-3.988018363222736e-8,-0.001858011024484624,-3.206838339685549e-5,-3.993871620605644e-8,-0.0018576168661056972,-3.2058722129593e-5,-3.993651170976707e-8,-0.001857200628294303,-3.1958785793748546e-5,-3.98506487342928e-8,-0.0018568063178679155,-3.1767390735336565e-5,-3.9679225404044e-8,-0.0018564711830394505,-3.150417991339459e-5,-3.943989843936122e-8,-0.0018562180244630548,-3.120309508365586e-5,-3.916393604405171e-8,-0.001856051832860989,-3.0903287984785486e-5,-3.888777991719524e-8,-0.0018559610387409902,-3.0640165715613776e-5,-3.864464037772421e-8,-0.0018559222165318323,-3.043888182499085e-5,-3.845831450517588e-8,-0.0018559062367179708,-3.031135180046263e-5,-3.8340287099323454e-8,-0.0018558839785556914,-3.025648674119293e-5,-3.828987583339211e-8,-0.0018558305005729916,-3.0262498510445098e-5,-3.829637141557298e-8,-0.0018557274688207667,-3.030998413607464e-5,-3.8341946180221575e-8,-0.0018555642923261315,-3.0374874455143256e-5,-3.8404431294548646e-8,-0.0018553386335638984,-3.043096245585696e-5,-3.8459652833342595e-8,-0.0018550567897867762,-3.0452262426219995e-5,-3.8483550463237314e-8,-0.0018547340635318174,-3.041572528206477e-5,-3.8454603062521525e-8,-0.0018543947164707576,-3.03048875961989e-5,-3.835716288178646e-8,-0.0018540704590361671,-3.0114692323656852e-5,-3.81859702743685e-8,-0.0018537960249984855,-2.985666954648834e-5,-3.79511015108531e-8,-0.0018536008786521339,-2.9562027461414482e-5,-3.768102528692731e-8,-0.0018534981424192035,-2.927893614320846e-5,-3.742024332911934e-8,-0.0018534751696137296,-2.9061233360087007e-5,-3.72188887172703e-8,-0.0018534923481789171,-2.8950357584252507e-5,-3.711593484750272e-8,-0.0018534940550578869,-2.8958436077817732e-5,-3.7123378482837e-8,-0.0018534282008300274,-2.9062277323979435e-5,-3.722046668883958e-8,-0.0018532645332598092,-2.921211788923309e-5,-3.736159207290112e-8,-0.0018530028720135114,-2.934986972526837e-5,-3.7493050320642694e-8,-0.0018526694542170326,-2.942727873570747e-5,-3.756982425163037e-8,-0.0018523058642196187,-2.9417150023504876e-5,-3.7566073539067835e-8,-0.0018519564866905035,-2.9316192868627697e-5,-3.7477965536880444e-8,-0.0018516584089416203,-2.9141557732680905e-5,-3.7320700414486564e-8,-0.001851435208412855,-2.8923992161479002e-5,-3.712235494419344e-8,-0.001851294541339165,-2.869997092993335e-5,-3.691666372244825e-8,-0.0018512288972952473,-2.850431556199019e-5,-3.673612972502268e-8,-0.0018512187605911334,-2.8364293030248146e-5,-3.6606422818222735e-8,-0.0018512372743969517,-2.8295880091963878e-5,-3.6542771387623024e-8,-0.001851255373367241,-2.830245486957463e-5,-3.654865101402205e-8,-0.0018512464347500161,-2.837567990696616e-5,-3.661658029509977e-8,-0.0018511897654824728,-2.849797616767571e-5,-3.6730452314410044e-8,-0.0018510726455833026,-2.864577894127868e-5,-3.6868605111867225e-8,-0.0018508911239511774,-2.879283048085962e-5,-3.700688885749968e-8,-0.0018506500169525825,-2.891316386992196e-5,-3.712138235946777e-8,-0.0018503624659893852,-2.8983841434482034e-5,-3.719083313132091e-8,-0.001850049192722774,-2.8987717253845237e-5,-3.719912582085492e-8,-0.00184973724683297,-2.8916604783197052e-5,-3.7138199915807674e-8,-0.0018494574590516221,-2.877500685094965e-5,-3.7011601488886906e-8,-0.001849239457271444,-2.8583618727700412e-5,-3.6837917133073514e-8,-0.001849103637120204,-2.8380420558935783e-5,-3.665199142573758e-8,-0.0018490512556514666,-2.8216113176951286e-5,-3.650082802289004e-8,-0.0018490568923369543,-2.814133170477168e-5,-3.643173901900574e-8,-0.001849070044366471,-2.8187498919253204e-5,-3.6474479853762786e-8,-0.0018490301023305032,-2.835027238269989e-5,-3.662573037762882e-8,-0.0018488899067574623,-2.8587217166636767e-5,-3.6846766146306595e-8,-0.0018486348257891318,-2.883361606393152e-5,-3.707797543919425e-8,-0.0018482863056600417,-2.902755950667316e-5,-3.726201459105288e-8,-0.0018478899852914469,-2.9130064005063796e-5,-3.736241363816512e-8,-0.0018474976562760789,-2.91321131307372e-5,-3.737016828147584e-8,-0.0018471524750899352,-2.905016180405401e-5,-3.729976063286029e-8,-0.0018468812786227445,-2.8916268553225196e-5,-3.718025357565311e-8,-0.0018466931172711491,-2.876806315238052e-5,-3.7046173746412294e-8,-0.0018465815057894385,-2.8640983775258864e-5,-3.6930365429741035e-8,-0.00184652829693714,-2.8563136245366806e-5,-3.685914654239289e-8,-0.0018465080445311866,-2.8552306292304803e-5,-3.6849396405970724e-8,-0.0018464923711327586,-2.8614698711177184e-5,-3.69072585309602e-8,-0.0018464540475209713,-2.874515858709884e-5,-3.702828145510411e-8,-0.001846370522506678,-2.8928669467886978e-5,-3.7198811661589566e-8,-0.001846226627091265,-2.9142919199792575e-5,-3.739840984195331e-8,-0.0018460161773210895,-2.936159596526058e-5,-3.7602928735736206e-8,-0.0018457424092981416,-2.9557907441157696e-5,-3.7787745528739335e-8,-0.0018454174436069045,-2.9707932709951874e-5,-3.793078679950588e-8,-0.001845060979936064,-2.9793682517744152e-5,-3.8015266553066575e-8,-0.0018446983139210466,-2.9805837685586976e-5,-3.803216933965162e-8,-0.001844357663506958,-2.974619611849742e-5,-3.7982560537325245e-8,-0.0018440664544479193,-2.9629797711193566e-5,-3.7879707314877856e-8,-0.001843845950446449,-2.948601531108566e-5,-3.775030341662861e-8,-0.0018437041818345754,-2.9356851092842417e-5,-3.763307774716062e-8,-0.0018436286704259478,-2.929018395984869e-5,-3.7572610524337075e-8,-0.0018435826591715672,-2.9326650546160026e-5,-3.7607099199983846e-8,-0.001843510243611047,-2.9482479522100277e-5,-3.7752270839027916e-8,-0.0018433534878047207,-2.9736569576451163e-5,-3.798922207122916e-8,-0.001843076228620517,-3.003258999787417e-5,-3.826624809927366e-8,-0.0018426810050820315,-3.0299279226205748e-5,-3.851758748645876e-8,-0.0018422077376924746,-3.0478508169391107e-5,-3.8689353289091895e-8,-0.0018417156239789582,-3.054470317700498e-5,-3.875746335719129e-8,-0.0018412606553196052,-3.050710730095082e-5,-3.872977574482587e-8,-0.001840880483325183,-3.0398882257686496e-5,-3.8636192256924036e-8,-0.001840590004125507,-3.026250677128237e-5,-3.851540126764517e-8,-0.0018403844397698059,-3.013820957242196e-5,-3.840435285169504e-8,-0.001840245361005513,-3.0057347763451893e-5,-3.8332152701456324e-8,-0.0018401466765782936,-3.0039751280580974e-5,-3.831749547487945e-8,-0.0018400595016326148,-3.0093363332831677e-5,-3.836817784862127e-8,-0.0018399559497764423,-3.0215015910877106e-5,-3.848169905675189e-8,-0.001839812170196447,-3.039186553279613e-5,-3.864654273812751e-8,-0.0018396108283989022,-3.060338054950594e-5,-3.884402378562721e-8,-0.0018393430417674114,-3.082394307346604e-5,-3.905071575977295e-8,-0.001839009544828154,-3.1026114366856945e-5,-3.924146216346563e-8,-0.0018386207708631277,-3.1184328723264915e-5,-3.939273712194119e-8,-0.0018381957305413437,-3.127857148136643e-5,-3.948596451419425e-8,-0.0018377597459139795,-3.1297656724416976e-5,-3.95104860508152e-8,-0.001837341137178437,-3.1241751125251476e-5,-3.946590292406994e-8,-0.0018369670512292443,-3.112376810976386e-5,-3.9363472022820164e-8,-0.0018366586561733092,-3.096932899220622e-5,-3.922626209101001e-8,-0.0018364258708403016,-3.0814812173559905e-5,-3.9087559514838445e-8,-0.0018362621920370473,-3.070252357614279e-5,-3.8986539372919337e-8,-0.0018361412688580824,-3.067203929167175e-5,-3.896025500527251e-8,-0.0018360180816703487,-3.0748042684471684e-5,-3.903223795898209e-8,-0.0018358378502917804,-3.092774827382751e-5,-3.920064225747588e-8,-0.0018355532968053283,-3.1174550168373766e-5,-3.9432189756387474e-8,-0.0018351446756584952,-3.142525945238052e-5,-3.966879216514516e-8,-0.001834631257077125,-3.161182618802566e-5,-3.9847630332795574e-8,-0.001834065391188641,-3.168747068911088e-5,-3.992527940095902e-8,-0.0018335116541834382,-3.164236364109196e-5,-3.989214970654177e-8,-0.0018330236496004874,-3.1501495858562004e-5,-3.977056585296882e-8,-0.0018326302885483708,-3.130976247069251e-5,-3.960119517536447e-8,-0.0018323344622033428,-3.111494455177007e-5,-3.94275962437217e-8,-0.0018321196002908996,-3.095597209536023e-5,-3.928554181120305e-8,-0.0018319582888422555,-3.085789845493625e-5,-3.919836392406287e-8,-0.0018318194757880513,-3.083157342368737e-5,-3.9176511626126014e-8,-0.0018316733480543946,-3.0875483927058214e-5,-3.9219089175635253e-8,-0.0018314943794796696,-3.097812687524317e-5,-3.931593991989682e-8,-0.0018312633560748676,-3.1120334429811935e-5,-3.9449760179892773e-8,-0.001830968913688379,-3.1277592120351454e-5,-3.9598246635518696e-8,-0.0018306087634235733,-3.14226374107931e-5,-3.9736499110668715e-8,-0.0018301904168349817,-3.152864766531905e-5,-3.9839932121797345e-8,-0.0018297309265778968,-3.1573033171681355e-5,-3.988771007373838e-8,-0.0018292551760944991,-3.154139489645285e-5,-3.986633134180522e-8,-0.0018287925523648566,-3.1430926466745534e-5,-3.977274223006469e-8,-0.0018283721888019805,-3.125244172846257e-5,-3.961626454205167e-8,-0.0018280173510476312,-3.1030241019074e-5,-3.941861928815817e-8,-0.0018277399014371466,-3.079933897322065e-5,-3.921157228495376e-8,-0.0018275359237807758,-3.060002936908609e-5,-3.9032106768399976e-8,-0.0018273836315456557,-3.0470075984707517e-5,-3.891530628053033e-8,-0.0018272448509398856,-3.0435259419920423e-5,-3.8885571590877783e-8,-0.0018270713806662069,-3.0500042234658058e-5,-3.8947817158765014e-8,-0.0018268166773114957,-3.064158208297821e-5,-3.908171343754616e-8,-0.0018264509824322654,-3.081128525962225e-5,-3.924294928095106e-8,-0.0018259745066705093,-3.0946791653507584e-5,-3.937422858396294e-8,-0.001825421200068397,-3.0992294321174295e-5,-3.942401662190722e-8,-0.001824848707194268,-3.091859675203208e-5,-3.936503312287334e-8,-0.0018243181665254498,-3.0732388589482095e-5,-3.920280801715213e-8,-0.0018238741939498265,-3.047033281073113e-5,-3.897033103345112e-8,-0.0018235344222076416,-3.0182968256406758e-5,-3.871343791162342e-8,-0.0018232907112232296,-2.9917962061241705e-5,-3.8475612220985564e-8,-0.0018231175915879915,-2.9709470223528575e-5,-3.8288287874661005e-8,-0.0018229820547856707,-2.9574767415543407e-5,-3.8167680241916334e-8,-0.0018228511227224586,-2.951575072500136e-5,-3.811601209651671e-8,-0.0018226963993247997,-2.9522399260808083e-5,-3.812455102291935e-8,-0.001822496346012939,-2.9576313361484465e-5,-3.817679071516764e-8,-0.00182223736569908,-2.9653667368211555e-5,-3.82511596794088e-8,-0.001821914484007764,-2.9727713244422272e-5,-3.8323339418991535e-8,-0.0018215319226575477,-2.9771325860086927e-5,-3.836859871537784e-8,-0.0018211033649289739,-2.9760077349048065e-5,-3.8364575828414726e-8,-0.0018206513209798074,-2.967600860452736e-5,-3.82946771372016e-8,-0.001820204868578569,-2.95117106918752e-5,-3.815177651088395e-8,-0.001819795308698592,-2.9273717903851084e-5,-3.7941337848129227e-8,-0.0018194499553985499,-2.8983792765006212e-5,-3.768268339819807e-8,-0.001819185216669178,-2.867678407238349e-5,-3.74071910297524e-8,-0.0018190008974349288,-2.83945853396037e-5,-3.715294339073842e-8,-0.001818877777254797,-2.8177048843502435e-5,-3.69565401325332e-8,-0.001818779842287521,-2.8051892787703585e-5,-3.684386725138177e-8,-0.0018186613648890997,-2.8026242318695985e-5,-3.682221547238342e-8,-0.0018184777104345217,-2.8082404782524753e-5,-3.687617397457534e-8,-0.0018181975534309522,-2.8179856821560048e-5,-3.6969212144048666e-8,-0.001817813196202531,-2.8264185854983048e-5,-3.705172966271644e-8,-0.001817345167041442,-2.8281685470529075e-5,-3.707441588866618e-8,-0.0018168381018592475,-2.8195553966210703e-5,-3.7003162870434875e-8,-0.0018163479603249767,-2.799754849487948e-5,-3.6829836985857307e-8,-0.0018159250008670967,-2.770979157575244e-5,-3.657403648862273e-8,-0.0018155995956956029,-2.7375894624095573e-5,-3.6275093682421794e-8,-0.0018153764219808644,-2.704596699485922e-5,-3.5978494998850386e-8,-0.0018152377869368145,-2.6762455524996808e-5,-3.572301447864534e-8,-0.001815152477201721,-2.6551760020655958e-5,-3.553302574177351e-8,-0.0018150853173970892,-2.6422470662984083e-5,-3.541677798998169e-8,-0.0018150042988686545,-2.6368080187245047e-5,-3.5368740905128105e-8,-0.001814884542944513,-2.637140326946383e-5,-3.5373559468304656e-8,-0.0018147098501943748,-2.640883213452553e-5,-3.540992975432918e-8,-0.001814472968339351,-2.6453705314678775e-5,-3.5453704890593495e-8,-0.0018141754822484056,-2.6478914642215583e-5,-3.548029701796509e-8,-0.0018138277280354835,-2.645933668573588e-5,-3.54668779570484e-8,-0.0018134485433922909,-2.63746995002284e-5,-3.539493771542412e-8,-0.0018130641999637516,-2.6213143484268603e-5,-3.525347116797519e-8,-0.0018127056529817164,-2.5975139443379584e-5,-3.504252776569707e-8,-0.0018124034131899443,-2.5676611824827752e-5,-3.477610412804476e-8,-0.0018121801872194175,-2.534931109205454e-5,-3.448259855575883e-8,-0.0018120429840718477,-2.503646524431114e-5,-3.420100849172037e-8,-0.0018119778375527472,-2.4783230392470123e-5,-3.3972382770939356e-8,-0.001811950347330866,-2.462408751833058e-5,-3.3828419190625865e-8,-0.0018119132838824324,-2.4571574822020067e-5,-3.3781151941416513e-8,-0.0018118193692635378,-2.461097139426063e-5,-3.381793208892705e-8,-0.0018116348830005524,-2.470333459138878e-5,-3.390395510139745e-8,-0.0018113494195414132,-2.479592830408992e-5,-3.399155855798691e-8,-0.0018109788397635016,-2.483652227449304e-5,-3.403315775348767e-8,-0.0018105608775236578,-2.4787225178468724e-5,-3.399388280325552e-8,-0.001810144903993606,-2.4634019749026035e-5,-3.386038668968676e-8,-0.0018097788424705386,-2.438943653685379e-5,-3.364343809426621e-8,-0.0018094970976968308,-2.408776623021186e-5,-3.3373712923926915e-8,-0.0018093131065530167,-2.3774611485516244e-5,-3.3092397700764274e-8,-0.0018092184234519324,-2.3494490111001275e-5,-3.283995827133673e-8,-0.0018091877331322158,-2.3280593294754563e-5,-3.2646790853564697e-8,-0.0018091871161683125,-2.314939866682767e-5,-3.252822506211939e-8,-0.0018091823293289193,-2.31004611501778e-5,-3.248421726376951e-8,-0.0018091448540584615,-2.311978262620908e-5,-3.250233499343941e-8,-0.0018090550794540737,-2.3184591180723153e-5,-3.2562086291900066e-8,-0.0018089031861997175,-2.3267897328885993e-5,-3.2639095018153503e-8,-0.0018086887334329814,-2.3342085624690892e-5,-3.2708403157821664e-8,-0.0018084198247745962,-2.338158487023955e-5,-3.2746898333729124e-8,-0.0018081122968712463,-2.3365150542970265e-5,-3.273533916353727e-8,-0.001807788822855228,-2.3278370617031e-5,-3.2660558495518114e-8,-0.0018074773359588981,-2.3116713555088714e-5,-3.251818044986732e-8,-0.0018072078836895496,-2.2888860456224638e-5,-3.231565942478291e-8,-0.0018070071067168634,-2.2619145607374683e-5,-3.2074584949186564e-8,-0.0018068904090166695,-2.2346867579039005e-5,-3.18301977417072e-8,-0.001806853807850492,-2.2119984734449717e-5,-3.162581546841964e-8,-0.0018068696241016469,-2.198255341150245e-5,-3.150153125112428e-8,-0.0018068904530553504,-2.195926967130759e-5,-3.1480191546692454e-8,-0.0018068624614854115,-2.2044177423088666e-5,-3.155704270849953e-8,-0.0018067433270976935,-2.2200245280886165e-5,-3.1699156433731375e-8,-0.0018065165630427827,-2.2371032429944445e-5,-3.1855811466588946e-8,-0.0018061958896326482,-2.2498959032548624e-5,-3.197492592167717e-8,-0.0018058190557784669,-2.2542034459431462e-5,-3.201819263383411e-8,-0.0018054353226003737,-2.2483393859611878e-5,-3.196979945333175e-8,-0.001805091981515879,-2.2332389766442987e-5,-3.183757466667896e-8,-0.0018048237525921153,-2.211905907663405e-5,-3.1648156894879373e-8,-0.0018046468284378982,-2.1884874969180767e-5,-3.1438765962970895e-8,-0.0018045577965828564,-2.167257080863706e-5,-3.124804952076372e-8,-0.0018045367469031802,-2.1517256483314775e-5,-3.1108003719807276e-8,-0.0018045532547471112,-2.1440415901790588e-5,-3.103843208390343e-8,-0.0018045734964459543,-2.1447606975861767e-5,-3.1044738831155513e-8,-0.0018045667264467702,-2.1529672691860464e-5,-3.111893588046535e-8,-0.0018045098804961046,-2.1666384245823865e-5,-3.1242914374253404e-8,-0.0018043898839023068,-2.183112130503548e-5,-3.1392708760228225e-8,-0.001804203954475141,-2.1995397908962797e-5,-3.1542638797071024e-8,-0.0018039586205425583,-2.2132522471774145e-5,-3.166864148494045e-8,-0.0018036682150897336,-2.222029327998615e-5,-3.1750683255942955e-8,-0.0018033532774611,-2.2243105107731316e-5,-3.1774601732825967e-8,-0.0018030388535303287,-2.2193945397383773e-5,-3.173385130063672e-8,-0.0018027522942073136,-2.2076575061598045e-5,-3.1631467135425805e-8,-0.0018025198123736337,-2.1907738260673892e-5,-3.148213395270582e-8,-0.0018023610503111382,-2.171835234695091e-5,-3.131339673265721e-8,-0.0018022817446064101,-2.155153029171974e-5,-3.1164020013668663e-8,-0.0018022664981731129,-2.145492195250491e-5,-3.107715875834362e-8,-0.0018022761116299893,-2.1466616576633423e-5,-3.1087611729159285e-8,-0.001802254637597213,-2.1598488185100718e-5,-3.1206666940015674e-8,-0.0018021472428660756,-2.182595909351053e-5,-3.1412695010306495e-8,-0.0018019218634438376,-2.2092822584774562e-5,-3.1655360838329714e-8,-0.0018015825756897933,-2.2331161258804622e-5,-3.187351846210822e-8,-0.0018011669858702807,-2.2485932648024347e-5,-3.2017362632812046e-8,-0.0018007305205330378,-2.2531424552391003e-5,-3.20632837968358e-8,-0.0018003274466781097,-2.247396849454174e-5,-3.201639378115172e-8,-0.001799997044701253,-2.2344006761817026e-5,-3.190352915618942e-8,-0.0017997576968600084,-2.2183994777753875e-5,-3.1762527108728355e-8,-0.0017996074214415598,-2.2037129804367622e-5,-3.163218737463046e-8,-0.0017995281388526994,-2.1939134700851098e-5,-3.1544874466880096e-8,-0.001799491474118722,-2.191336925847295e-5,-3.1522014871558e-8,-0.0017994648236848451,-2.196879034163294e-5,-3.157211653547259e-8,-0.0017994169612412726,-2.210030852102367e-5,-3.1690969385098476e-8,-0.0017993225970557186,-2.2291116208268445e-5,-3.1863685374065217e-8,-0.0017991654559053219,-2.2516364846537557e-5,-3.2068017711543623e-8,-0.0017989396964144166,-2.2747470340719118e-5,-3.2278281986817246e-8,-0.001798649733945888,-2.2956364822787877e-5,-3.246922246142647e-8,-0.0017983088087218547,-2.3119105042172602e-5,-3.2619262744900355e-8,-0.0017979368481374199,-2.3218557224021916e-5,-3.271288686018867e-8,-0.001797558043108042,-2.3246284945411038e-5,-3.274229168261259e-8,-0.0017971982454755217,-2.3203905608775542e-5,-3.2708591798824984e-8,-0.0017968820442133351,-2.3104089519329166e-5,-3.2622768771998037e-8,-0.0017966291126735867,-2.297111342990777e-5,-3.250628913382254e-8,-0.0017964493540700971,-2.2840186859440642e-5,-3.239064633254201e-8,-0.001796337092370337,-2.2753871040159905e-5,-3.231424590201427e-8,-0.001796266176874397,-2.2753701692947285e-5,-3.2314867821004395e-8,-0.0017961898758915664,-2.2866622884127602e-5,-3.241733430757836e-8,-0.0017960501969663332,-2.3089920943539757e-5,-3.261975895170297e-8,-0.0017957976108034395,-2.3383568322421448e-5,-3.288650179068292e-8,-0.0017954135250510931,-2.3679171476829465e-5,-3.315617804332179e-8,-0.0017949215447578652,-2.390518557869303e-5,-3.336437672142568e-8,-0.0017943787200954949,-2.401500851776904e-5,-3.3468942402757484e-8,-0.0017938521133034476,-2.400161061140643e-5,-3.346310636110839e-8,-0.0017933953283730748,-2.3893135268437862e-5,-3.3371567284018426e-8,-0.0017930360672664986,-2.3736813868647664e-5,-3.323619106299432e-8,-0.0017927757839283627,-2.3582117106361543e-5,-3.310107169625848e-8,-0.0017925963117210405,-2.3469363688785598e-5,-3.300241303329868e-8,-0.0017924682328384592,-2.342451096539411e-5,-3.296382113706184e-8,-0.0017923581550719071,-2.345828625550179e-5,-3.299539036168371e-8,-0.001792234150133278,-2.356759742598324e-5,-3.309481410911366e-8,-0.0017920696405059335,-2.3737980155055785e-5,-3.324947345493431e-8,-0.0017918461088012336,-2.3946656287756952e-5,-3.343914759620848e-8,-0.0017915547494891267,-2.416604836192296e-5,-3.363918826601897e-8,-0.0017911970460121622,-2.4367571375549456e-5,-3.382396166819764e-8,-0.0017907841940512808,-2.4525457139788785e-5,-3.3970302096064133e-8,-0.0017903353488858134,-2.4620205356925683e-5,-3.4060599419872674e-8,-0.001789874928831574,-2.464121873006898e-5,-3.408513361013069e-8,-0.0017894293545302076,-2.458842006514815e-5,-3.404350871950484e-8,-0.001789023505241213,-2.4472837169482275e-5,-3.394520600674971e-8,-0.0017886770648342907,-2.431614883409421e-5,-3.3809267595780996e-8,-0.0017884008200234735,-2.4149141187628658e-5,-3.366304609271047e-8,-0.001788192903348495,-2.4008712245158947e-5,-3.353964297579916e-8,-0.0017880354372265181,-2.393253545893989e-5,-3.347316905691076e-8,-0.0017878931539800256,-2.3950554353910987e-5,-3.34910405981934e-8,-0.0017877167144701928,-2.4073806065351983e-5,-3.360377068735919e-8,-0.001787453569690734,-2.428392045087678e-5,-3.379534491041236e-8,-0.0017870663495322726,-2.4530220442592966e-5,-3.402051298850108e-8,-0.0017865519910194932,-2.4741563720019448e-5,-3.4215448424805376e-8,-0.0017859491906381667,-2.4852189071213217e-5,-3.4321023197333045e-8,-0.001785325958533287,-2.482869995671932e-5,-3.4307016493753474e-8,-0.0017847528767015353,-2.4681669420333632e-5,-3.418245486606978e-8,-0.0017842781208460322,-2.4456188730650273e-5,-3.3987154219619505e-8,-0.0017839168488831807,-2.4210443635923462e-5,-3.3772695142451446e-8,-0.0017836554356915608,-2.3996010205156732e-5,-3.358499104157047e-8,-0.0017834629055072672,-2.384722325415727e-5,-3.345487005540549e-8,-0.0017833022278605421,-2.377911957973221e-5,-3.33961693481918e-8,-0.0017831382257718895,-2.3790191594592873e-5,-3.340803787799357e-8,-0.0017829420119458068,-2.386664304225821e-5,-3.347858835271957e-8,-0.0017826931337199766,-2.3986439556649512e-5,-3.35884337520014e-8,-0.001782380554182279,-2.4122805007119548e-5,-3.37138034186474e-8,-0.0017820030107513522,-2.424741808773985e-5,-3.382943346932811e-8,-0.0017815688268330704,-2.4333593880854584e-5,-3.391144581214018e-8,-0.0017810949919451016,-2.435957061890063e-5,-3.3940296734933424e-8,-0.0017806052023764001,-2.4311695591746605e-5,-3.3903609380761455e-8,-0.001780126733231539,-2.4186960953258744e-5,-3.3798419210927013e-8,-0.001779686389109376,-2.3994309151659606e-5,-3.363234575116789e-8,-0.0017793060255654567,-2.3754312161234117e-5,-3.3423362014270186e-8,-0.0017789982504817423,-2.3497003448101446e-5,-3.319796437690346e-8,-0.0017787629677499328,-2.325789658218794e-5,-3.2987743056121986e-8,-0.0017785853328477087,-2.307245026259536e-5,-3.2824528494159e-8,-0.001778435693719291,-2.29692203202828e-5,-3.2734270343295896e-8,-0.0017782724447692514,-2.2962114363640616e-5,-3.2729999425653523e-8,-0.0017780489744251891,-2.304310446279494e-5,-3.2805121499466924e-8,-0.0017777252482119056,-2.3178271529330762e-5,-3.292970232577239e-8,-0.0017772823647096638,-2.331129259651724e-5,-3.305351428606098e-8,-0.0017767346083272459,-2.3377529158287416e-5,-3.311868318348257e-8,-0.001776130764697321,-2.3326480780226323e-5,-3.3079844371637935e-8,-0.0017755397912121303,-2.3142506066602418e-5,-3.292267378791187e-8,-0.001775025923089456,-2.285130228165791e-5,-3.2669641431352325e-8,-0.001774626618706956,-2.2507845107702927e-5,-3.2369284423643596e-8,-0.0017743445685003865,-2.217390512592298e-5,-3.207630409849978e-8,-0.0017741544806826274,-2.1898231682136928e-5,-3.1834061464338805e-8,-0.0017740169436090173,-2.1707118952548065e-5,-3.166620956255327e-8,-0.001773891219541728,-2.1604779152879516e-5,-3.157692307526984e-8,-0.0017737432310165142,-2.157882930216389e-5,-3.155562491937049e-8,-0.0017735489504333692,-2.1606679331330368e-5,-3.1582552828697624e-8,-0.0017732949817235678,-2.1660754250425577e-5,-3.163336707176071e-8,-0.0017729779982578978,-2.1712249139899234e-5,-3.1682516270717386e-8,-0.0017726039251191308,-2.1733947237802756e-5,-3.170578892729579e-8,-0.0017721870422029683,-2.170274238348413e-5,-3.168258293259854e-8,-0.001771748742021881,-2.160228540957275e-5,-3.1598253034946674e-8,-0.001771315436498432,-2.142574791419228e-5,-3.144654198656495e-8,-0.0017709151725227585,-2.1178148251122183e-5,-3.123163082063926e-8,-0.0017705729667818262,-2.0877318554922502e-5,-3.096901728522543e-8,-0.00177030549185305,-2.055260685325797e-5,-3.0684433448224743e-8,-0.0017701162882080364,-2.0240789383713746e-5,-3.041032430169265e-8,-0.0017699929466398218,-1.99794218315807e-5,-3.018005089313501e-8,-0.0017699074633654773,-1.9798779288104986e-5,-3.002078373264498e-8,-0.0017698202590316055,-1.971411094245867e-5,-2.994657558110185e-8,-0.0017696875886955075,-1.9720002942223983e-5,-2.9953206911113435e-8,-0.0017694714315701055,-1.9788544043428927e-5,-3.0016365819494506e-8,-0.001769150179508032,-1.9872824099373976e-5,-3.009460999645151e-8,-0.0017687273917546744,-1.9916635597634004e-5,-3.013794933369788e-8,-0.0017682349328222557,-1.986951675134688e-5,-3.0101278511672435e-8,-0.00176772710105645,-1.970328034493384e-5,-2.995916376833186e-8,-0.0017672653670454336,-1.942323674398719e-5,-2.9715881402750377e-8,-0.0017668987135009146,-1.906762066737871e-5,-2.9404951820690843e-8,-0.0017666484557888058,-1.8694185914153163e-5,-2.9077305426574343e-8,-0.0017665045683398996,-1.836037649987278e-5,-2.8783779540595175e-8,-0.0017664336822339468,-1.810670803004512e-5,-2.85604298531802e-8,-0.0017663927590512497,-1.7949525459591675e-5,-2.8422063980110166e-8,-0.0017663414629926905,-1.7882936783559632e-5,-2.8363836548011972e-8,-0.001766249541876796,-1.7885707909765793e-5,-2.8367242121714928e-8,-0.001766099266242993,-1.7928819727490756e-5,-2.8406756909275128e-8,-0.0017658847993394775,-1.798137782732972e-5,-2.8455090069843767e-8,-0.001765610393070421,-1.8014480188581894e-5,-2.8486659197502897e-8,-0.0017652885448722823,-1.800366604960887e-5,-2.8479796999216368e-8,-0.0017649384258213695,-1.7930802219111313e-5,-2.8418420896184835e-8,-0.0017645842871166185,-1.778602853787445e-5,-2.829372109660203e-8,-0.0017642532352409623,-1.7569903288050705e-5,-2.81060198076404e-8,-0.001763971759473834,-1.7295278259522374e-5,-2.786641950500421e-8,-0.0017637607807011494,-1.698782162266873e-5,-2.7597305393828584e-8,-0.0017636298282722234,-1.668378910785923e-5,-2.7330463361969477e-8,-0.0017635720325075124,-1.6424062245120354e-5,-2.7101919283812356e-8,-0.0017635623160880396,-1.624485381333525e-5,-2.6943804573923697e-8,-0.0017635607308321933,-1.6167370096356146e-5,-2.6875224575923194e-8,-0.0017635211289864948,-1.6190012162179073e-5,-2.68952735608918e-8,-0.0017634030561349838,-1.6286391210993562e-5,-2.6981120973846906e-8,-0.0017631832067511017,-1.6410496829813158e-5,-2.7092420717209323e-8,-0.001762862804611093,-1.650784066444652e-5,-2.7181070789573557e-8,-0.001762468592752757,-1.6529538541808296e-5,-2.720366625840219e-8,-0.001762046894151369,-1.6445530812446836e-5,-2.713326263374019e-8,-0.0017616519554521687,-1.6253198861825676e-5,-2.696709599279156e-8,-0.0017613315225252794,-1.5978453405918325e-5,-2.672764292807032e-8,-0.0017611140058775958,-1.5668350101802668e-5,-2.645617877953825e-8,-0.0017610016624053787,-1.5377341425857762e-5,-2.6200694380823762e-8,-0.001760972152477191,-1.5152050261090025e-5,-2.6002466768736517e-8,-0.0017609872896826445,-1.5020078162915458e-5,-2.5886132235295784e-8,-0.0017610048499390252,-1.4986153105280482e-5,-2.585618781524479e-8,-0.0017609887967856529,-1.5035267740803247e-5,-2.5899659894477047e-8,-0.0017609151979063953,-1.5139768158020223e-5,-2.5992305073980463e-8,-0.001760773716567572,-1.5266958060346903e-5,-2.610532992986437e-8,-0.0017605661687073292,-1.5385079455718696e-5,-2.6210718388494383e-8,-0.0017603038826338377,-1.5467116653328303e-5,-2.6284636330568005e-8,-0.0017600050563999715,-1.5492918931559058e-5,-2.630931543163531e-8,-0.00175969254649456,-1.5450515709074643e-5,-2.6274181953792665e-8,-0.0017593918639489119,-1.5337330423786408e-5,-2.617687582404043e-8,-0.0017591287810466108,-1.516152233340109e-5,-2.6024399594225813e-8,-0.0017589258943309788,-1.4943092225619993e-5,-2.5834108333616962e-8,-0.0017587977883399433,-1.4713698844311321e-5,-2.563361964748376e-8,-0.001758745306123578,-1.4513557060983797e-5,-2.5458186180871662e-8,-0.0017587508567577885,-1.4384033445413648e-5,-2.534426611652559e-8,-0.0017587779139626098,-1.4356303112866524e-5,-2.5319563744401592e-8,-0.0017587774818432792,-1.4439371548397277e-5,-2.5392423095802513e-8,-0.0017587014180465244,-1.461308765223457e-5,-2.5545545630735418e-8,-0.0017585182143315644,-1.4831017637906244e-5,-2.573837988454579e-8,-0.001758224300036135,-1.5033522952700285e-5,-2.5918544356983626e-8,-0.0017578456814572269,-1.5165890121277228e-5,-2.6037769834404815e-8,-0.0017574296827317477,-1.5194062164951215e-5,-2.6065783871821737e-8,-0.0017570309130902051,-1.5112670663097581e-5,-2.5997452534758276e-8,-0.001756696813994369,-1.4944139321311835e-5,-2.5852086776316284e-8,-0.0017564568402563836,-1.473071652369088e-5,-2.566653582995585e-8,-0.0017563173354597894,-1.4522642160396031e-5,-2.548486082353178e-8,-0.0017562624354948073,-1.4365851015030895e-5,-2.5347546705261553e-8,-0.0017562599735600776,-1.4292151664489295e-5,-2.5282821848690496e-8,-0.001756270345717931,-1.4313890299943314e-5,-2.5301868529854778e-8,-0.0017562557588578422,-1.4423796145213121e-5,-2.5398581829437754e-8,-0.0017561874812613571,-1.4599191257972496e-5,-2.5553204717269587e-8,-0.0017560497205785389,-1.4808590783445874e-5,-2.573812424229174e-8,-0.0017558401001670073,-1.501849889141526e-5,-2.5923886858305346e-8,-0.0017555677036126833,-1.5198851791683837e-5,-2.6084035700955837e-8,-0.0017552499882569114,-1.5326523211685818e-5,-2.6198219746351277e-8,-0.0017549096171388453,-1.5387143092883683e-5,-2.625378099409158e-8,-0.0017545716844747704,-1.5375917958639373e-5,-2.624643446693762e-8,-0.0017542612485054693,-1.5298085448759974e-5,-2.618062930004095e-8,-0.0017540007404882867,-1.5169273450952789e-5,-2.6069861979063126e-8,-0.0017538066861335557,-1.5015531634949477e-5,-2.593675647987724e-8,-0.0017536853789179659,-1.4872118319182157e-5,-2.5812093138283254e-8,-0.0017536279768385933,-1.4779491480665109e-5,-2.5731383005018647e-8,-0.001753606952723239,-1.477510058162383e-5,-2.5727704626657337e-8,-0.0017535772625469973,-1.4881293853944655e-5,-2.5821044107833472e-8,-0.0017534854838303832,-1.5093084239007569e-5,-2.600743669074431e-8,-0.001753286710863749,-1.5372854528035302e-5,-2.6254185280220255e-8,-0.0017529628465813953,-1.5658309245887e-5,-2.650676375421154e-8,-0.0017525321779777868,-1.5882916451512282e-5,-2.6706754294287406e-8,-0.0017520438774256833,-1.599931632431093e-5,-2.6812413521358316e-8,-0.0017515603547515798,-1.599389242849295e-5,-2.6811474485739375e-8,-0.0017511370747768787,-1.58870721613282e-5,-2.6721446136561115e-8,-0.0017508085426400448,-1.5722498178991464e-5,-2.6580205900138525e-8,-0.001750583522276346,-1.5552126055896935e-5,-2.6433054088095324e-8,-0.0017504477988545496,-1.5423007708300132e-5,-2.6321212129111954e-8,-0.001750371174214469,-1.5368439711583733e-5,-2.62740633198849e-8,-0.001750315851837096,-1.5403810993203438e-5,-2.630543047416448e-8,-0.0017502443819633047,-1.552642617773328e-5,-2.641330452405617e-8,-0.0017501260881107377,-1.5718366270618406e-5,-2.6582255837826362e-8,-0.001749941315168841,-1.595138996435713e-5,-2.6787687878177625e-8,-0.0017496832210316077,-1.6192740022060927e-5,-2.7000937830024997e-8,-0.0017493572693855985,-1.6410744434680557e-5,-2.719422519070173e-8,-0.001748978948913387,-1.6579358203906588e-5,-2.7344668887639668e-8,-0.0017485704968312657,-1.6681163415333903e-5,-2.74369274282324e-8,-0.0017481574240992264,-1.670883282721197e-5,-2.7464466784574147e-8,-0.0017477653066889829,-1.666547427544194e-5,-2.742983935525184e-8,-0.0017474168841164288,-1.6564305460559376e-5,-2.7344394725503e-8,-0.001747129279233854,-1.6427879931202274e-5,-2.722763656186771e-8,-0.0017469110243550452,-1.6286771476204226e-5,-2.7106146180372478e-8,-0.0017467586534195868,-1.6177063093025705e-5,-2.7011472007132247e-8,-0.0017466533463252492,-1.6135412490742596e-5,-2.6975864478472212e-8,-0.0017465594178202246,-1.6190686058868135e-5,-2.7024931986323628e-8,-0.0017464276261986936,-1.6352739951425828e-5,-2.7167717614836124e-8,-0.0017462061719448097,-1.6602042086509395e-5,-2.7387475511613235e-8,-0.0017458589390846183,-1.688727509586495e-5,-2.7639480984314817e-8,-0.001745383793112345,-1.7137548063945405e-5,-2.7861723308800773e-8,-0.001744819115139456,-1.7287659579105718e-5,-2.7997065592867195e-8,-0.0017442316274042247,-1.7303833560797986e-5,-2.8015768007836517e-8,-0.0017436912573285538,-1.7194973975304273e-5,-2.7925287860788828e-8,-0.001743247452036388,-1.7004614184730193e-5,-2.7763247275154654e-8,-0.0017429180130239536,-1.6791404372740664e-5,-2.758049651565357e-8,-0.0017426913839497045,-1.6609904370917028e-5,-2.7424492345162885e-8,-0.001742536475141356,-1.649859690995107e-5,-2.7328913073261393e-8,-0.0017424137905466815,-1.6475754777084468e-5,-2.731001280582881e-8,-0.0017422844622990985,-1.6540670952381766e-5,-2.7367575703814308e-8,-0.001742116355369948,-1.6677544114767887e-5,-2.7488179361086792e-8,-0.0017418876343611228,-1.686031928037145e-5,-2.764933739189588e-8,-0.0017415883616594284,-1.70577248174131e-5,-2.782387438953023e-8,-0.0017412205022093819,-1.7238115114124338e-5,-2.7984175560639326e-8,-0.0017407965855088022,-1.737379930727008e-5,-2.8106002984605667e-8,-0.0017403372333003285,-1.744456666693547e-5,-2.81716008451723e-8,-0.0017398678463401798,-1.7440083829039737e-5,-2.817179627356715e-8,-0.0017394149398974874,-1.7360942313155324e-5,-2.8106908907450188e-8,-0.0017390025998627163,-1.7218462503755394e-5,-2.7986581351569095e-8,-0.0017386492629266872,-1.7033516940844868e-5,-2.78287765345854e-8,-0.0017383648667583472,-1.6834511621145167e-5,-2.7658071698212013e-8,-0.0017381483860776027,-1.6654526309760896e-5,-2.750323777098479e-8,-0.0017379857880764208,-1.6527352718845074e-5,-2.7393844848311547e-8,-0.0017378488996451671,-1.6481799532138352e-5,-2.735530264547702e-8,-0.0017376966372265247,-1.653390656976417e-5,-2.7402002468754002e-8,-0.0017374807521994074,-1.6678137811977933e-5,-2.752950967892001e-8,-0.0017371577619254865,-1.6881003467352378e-5,-2.7708880462880502e-8,-0.0017367058418978965,-1.7082956805723142e-5,-2.7888277038928824e-8,-0.0017361397871615877,-1.7213636041267133e-5,-2.8006313607759834e-8,-0.0017355130919502622,-1.7217983517437767e-5,-2.8014887489228886e-8,-0.0017349010873700975,-1.7080148864802256e-5,-2.789998107144859e-8,-0.0017343723348015217,-1.6829898005292252e-5,-2.7687166142917287e-8,-0.0017339647832955254,-1.6527764114669422e-5,-2.742869117101087e-8,-0.0017336786370508808,-1.6239846977128967e-5,-2.718170516827529e-8,-0.0017334849605685624,-1.6017009429821272e-5,-2.6990333500378085e-8,-0.0017333407869161536,-1.588567181395312e-5,-2.6877727087182345e-8,-0.0017332024740586718,-1.5848606242811324e-5,-2.6846667644146168e-8,-0.0017330340615586818,-1.5890746362680283e-5,-2.68844715727071e-8,-0.0017328110493750382,-1.598598400945783e-5,-2.696877596915934e-8,-0.00173252127473545,-1.6103053832416733e-5,-2.7072598915931684e-8,-0.0017321643150833425,-1.6210210138051937e-5,-2.716841036510506e-8,-0.0017317501140170313,-1.6278998147010685e-5,-2.723144593688566e-8,-0.0017312970188940173,-1.6287366080985484e-5,-2.7242447571344237e-8,-0.0017308292084595779,-1.6222185622260528e-5,-2.7189872388028625e-8,-0.001730373452436675,-1.6081006942388617e-5,-2.7071418830950497e-8,-0.0017299553582569695,-1.5872667604661172e-5,-2.6894553273205772e-8,-0.0017295955423252537,-1.5616500957420817e-5,-2.6675832877706237e-8,-0.0017293061873740823,-1.5340170469505593e-5,-2.6439061947713e-8,-0.0017290883470865532,-1.507625010199129e-5,-2.6212382075122478e-8,-0.0017289303472872032,-1.485771739629063e-5,-2.6024423253133448e-8,-0.0017288076171489378,-1.4712600788592941e-5,-2.5899692716363257e-8,-0.0017286843786890062,-1.4657982104751628e-5,-2.5853345982890227e-8,-0.0017285179920752429,-1.469378801204321e-5,-2.5885710544355952e-8,-0.0017282669016267444,-1.4797809692912494e-5,-2.597784298491023e-8,-0.0017279022709099565,-1.4924826606494031e-5,-2.6090678957383975e-8,-0.0017274210330882648,-1.5013539408658058e-5,-2.6171041964052904e-8,-0.0017268544886931924,-1.500339980186787e-5,-2.6166307322124555e-8,-0.0017262646488298942,-1.4857541654773406e-5,-2.6044338623451537e-8,-0.0017257250829835684,-1.4580494467278208e-5,-2.5808814537283378e-8,-0.0017252937794389228,-1.4218526667931194e-5,-2.5499476937908507e-8,-0.0017249930231404602,-1.3840794807331261e-5,-2.517585149150039e-8,-0.0017248067699141875,-1.351270711306445e-5,-2.4894335555473773e-8,-0.0017246934534974646,-1.3276295708485894e-5,-2.4691333401292228e-8,-0.0017246038274408126,-1.314433765536367e-5,-2.4578159853052325e-8,-0.0017244948196652298,-1.3105269854769773e-5,-2.454517288778279e-8,-0.0017243364526524838,-1.3132362073222714e-5,-2.456957312402072e-8,-0.0017241132667976712,-1.3192342565411862e-5,-2.4622786661510245e-8,-0.0017238228661482834,-1.325163183139236e-5,-2.4675851118792835e-8,-0.0017234735662261548,-1.3280343921097598e-5,-2.470291409721152e-8,-0.0017230820075737141,-1.3254924222723466e-5,-2.4683557620105018e-8,-0.0017226707950760843,-1.3160121817767504e-5,-2.4604525475472103e-8,-0.001722265910630456,-1.2990581890931382e-5,-2.4461095384133306e-8,-0.001721893605087852,-1.275194862461917e-5,-2.4258014835579526e-8,-0.0017215766694778005,-1.2461004044485085e-5,-2.400961012256891e-8,-0.0017213304202050618,-1.2144266502687791e-5,-2.373858904526001e-8,-0.0017211591144521662,-1.1834740035222872e-5,-2.3473278345894057e-8,-0.0017210536379387664,-1.15669121811399e-5,-2.3243368159746304e-8,-0.0017209912434660293,-1.137053703664978e-5,-2.3074600444917153e-8,-0.00172093786428734,-1.126418106526938e-5,-2.2983213066028008e-8,-0.0017208531150557185,-1.1249725559581083e-5,-2.2971150222902847e-8,-0.0017206977257007766,-1.1309037278010377e-5,-2.3023095245395752e-8,-0.0017204427559582552,-1.1404176889886242e-5,-2.3106548502949438e-8,-0.0017200791234227555,-1.1482681882738014e-5,-2.3176327687590162e-8,-0.0017196246541953794,-1.148889330573019e-5,-2.3184350335903796e-8,-0.001719124641958263,-1.1380227657635337e-5,-2.3093722950941158e-8,-0.0017186423638384035,-1.114361781624759e-5,-2.289295661201278e-8,-0.0017182400231541156,-1.0804036814357762e-5,-2.2603315828948557e-8,-0.0017179572397719124,-1.0418304686722344e-5,-2.2273489276189473e-8,-0.0017177979779009823,-1.0055136813138216e-5,-2.1962468500676522e-8,-0.0017177326568771723,-9.771363476111051e-6,-2.171915971274942e-8,-0.0017177126940655086,-9.59618259083335e-6,-2.1568855933039855e-8,-0.0017176882158911563,-9.528664202440341e-6,-2.151102115154199e-8,-0.0017176207842986657,-9.54532916023194e-6,-2.152570092195504e-8,-0.001717488539588401,-9.61114215968148e-6,-2.1582903167043163e-8,-0.0017172856020235222,-9.688935408136953e-6,-2.1650695633700068e-8,-0.0017170188075453885,-9.745503388018222e-6,-2.1700489974222203e-8,-0.001716704030343493,-9.75481187740589e-6,-2.1709853665659155e-8,-0.001716363051667733,-9.699527683861308e-6,-2.1663854398151375e-8,-0.0017160209740540878,-9.571902058244573e-6,-2.155581284513286e-8,-0.0017157037275235207,-9.374493289871258e-6,-2.1387892099804606e-8,-0.0017154351582843574,-9.12063251889091e-6,-2.1171465309349033e-8,-0.0017152334371241793,-8.834059379219236e-6,-2.0926792740536966e-8,-0.0017151070380174468,-8.54691461997685e-6,-2.0681324010697784e-8,-0.0017150511747853247,-8.295434661355793e-6,-2.0466057621787945e-8,-0.0017150460711992154,-8.113332137404114e-6,-2.030992124260642e-8,-0.0017150584488687581,-8.023886119027629e-6,-2.0233017236108107e-8,-0.0017150469068009022,-8.032794681682757e-6,-2.0240470470753276E-08,-0.0017149705846409252,-8.124212126971078e-6,-2.031895666669989e-8,-0.0017147992299687779,-8.261786867259084e-6,-2.043750161115691e-8,-0.0017145220766764634,-8.39524066367176e-6,-2.0553060054856926e-8,-0.001714152932724592,-8.471588872493842e-6,-2.062012893709478e-8,-0.0017137294505731322,-8.448766698921679e-6,-2.0602470471424994e-8,-0.0017133056268037235,-8.30827935977141e-6,-2.0484010951138584e-8,-0.0017129382965746429,-8.062726137621993e-6,-2.0275329834940626e-8,-0.0017126708829768335,-7.754388283059394e-6,-2.0012476947012425e-8,-0.0017125200757254853,-7.443621313326269e-6,-1.9747060849152198e-8,-0.0017124712795059404,-7.190431363037621e-6,-1.9530504080148718e-8,-0.001712485108463056,-7.0366396458408515e-6,-1.9398773754969298e-8,-0.0017125116285125956,-6.995979960543143e-6,-1.9363850589301513e-8,-0.0017125055152946264,-7.054904126090996e-6,-1.941433171688431e-8,-0.0017124362267456486,-7.181290036679982e-6,-1.9522819783303132e-8,-0.0017122912356786113,-7.33559115667751e-6,-1.9655458212988638e-8,-0.0017120739679193392,-7.480041670713854e-6,-1.9779851901213196e-8,-0.0017117993662422982,-7.584250733816216e-6,-1.9869913460128613e-8,-0.0017114893374762983,-7.627641340691138e-6,-1.9907989660052855e-8,-0.0017111690927208221,-7.6000125055850025e-6,-1.9885345225042433e-8,-0.0017108644073861132,-7.501412760528949e-6,-1.9802025000362843e-8,-0.0017105992780522003,-7.341978719606794e-6,-1.966667578346078e-8,-0.0017103933189507282,-7.1417111820099305e-6,-1.949632951528594e-8,-0.0017102585004460788,-6.929573781906971e-6,-1.9315642219774395e-8,-0.0017101954017993111,-6.7409497837180035e-6,-1.9154764556717096e-8,-0.0017101899463117245,-6.612514274616833e-6,-1.904501927146042e-8,-0.0017102124219094009,-6.574302226505446e-6,-1.9012164611844463e-8,-0.0017102208546907933,-6.640381461484933e-6,-1.906841604034119e-8,-0.0017101696872487946,-6.801430426475136e-6,-1.920604126355059e-8,-0.0017100221870999638,-7.023203351349197e-6,-1.939596217498844e-8,-0.0017097624173563275,-7.2532026779098715e-6,-1.959339512897098e-8,-0.0017094018542985613,-7.4343348959541015e-6,-1.9749511339903364e-8,-0.0017089776595243197,-7.520980981562084e-6,-1.982519953065219e-8,-0.0017085430785728673,-7.491875094526717e-6,-1.98021064005799e-8,-0.0017081533169143335,-7.355782261528479e-6,-1.968751486928549e-8,-0.0017078512816734047,-7.148736530329722e-6,-1.9512013140907094e-8,-0.0017076570788535014,-6.924050653939927e-6,-1.9321004792382517e-8,-0.0017075639301940206,-6.73805286028801e-6,-1.9162573935492407e-8,-0.0017075414744693901,-6.635623404704152e-6,-1.9075152574921577e-8,-0.0017075452538536885,-6.6397481673598866e-6,-1.907856769945405e-8,-0.0017075291279762277,-6.74799680854229e-6,-1.917095975773456e-8,-0.001707456464753147,-6.936270654025548e-6,-1.9331909124735297e-8,-0.001707306873839935,-7.167486224038338e-6,-1.9529815014463757e-8,-0.0017070774940020905,-7.40150152130711e-6,-1.9730384470556232e-8,-0.001706780055599116,-7.603160648750164e-6,-1.9903542367193303e-8,-0.0017064359548183703,-7.747073464223104e-6,-2.0027552034501053e-8,-0.0017060712869391593,-7.819370843360752e-6,-2.009053088308096e-8,-0.0017057128647851082,-7.81750689300007e-6,-2.0090272816758505e-8,-0.0017053853475831233,-7.749258787440385e-6,-2.0033369653230264e-8,-0.0017051090246987348,-7.63165252439743e-6,-1.9934273203516424e-8,-0.0017048976130836205,-7.48990374053086e-6,-1.9814391821666054e-8,-0.0017047556071532683,-7.355870167993619e-6,-1.9700800557958514e-8,-0.0017046752314598494,-7.265069438578037e-6,-1.962374814999241e-8,-0.001704633907873945,-7.251176602605976e-6,-1.9612010035070857e-8,-0.0017045942123405239,-7.337574074837141e-6,-1.968569133958673e-8,-0.0017045088636094908,-7.527447475358424e-6,-1.984773628854404e-8,-0.0017043321125059295,-7.796609969145614e-6,-2.0077728553648004e-8,-0.0017040352892301902,-8.094628881719389e-6,-2.033278529821439e-8,-0.0017036199174814714,-8.357321757473915e-6,-2.0558199710134475e-8,-0.0017031207453830734,-8.527279641554265e-6,-2.07049674527795e-8,-0.0017025957211632837,-8.573251713438601e-6,-2.0746330786424403e-8,-0.0017021073995130097,-8.499347348814524e-6,-2.0685612575558143e-8,-0.0017017044497118188,-8.341162243397592e-6,-2.0552915628861326e-8,-0.0017014101770728533,-8.152663137236833e-6,-2.0393996128262026e-8,-0.001701220123087332,-7.99029114266652e-6,-2.0256802195303342e-8,-0.0017011069963663247,-7.899440803721392e-6,-2.0180015465234488e-8,-0.0017010298088642021,-7.905934485141747e-6,-2.0185786978182623e-8,-0.0017009442845075707,-8.013087611659719e-6,-2.0277176829621546e-8,-0.001700812271449088,-8.203778005991368e-6,-2.043983579510598e-8,-0.001700608518360257,-8.446292559298515e-6,-2.0646923134808663e-8,-0.0017003238336688721,-8.702227743979316e-6,-2.086581340902206e-8,-0.0016999645473487364,-8.934420936028888e-6,-2.106486263485468e-8,-0.00169954913513485,-9.113190354238928e-6,-2.1218747636263865e-8,-0.0016991033874861217,-9.22001102864717e-6,-2.1311618593498575e-8,-0.0016986554807616981,-9.248647435155238e-6,-2.13380740034121e-8,-0.0016982318855080062,-9.204399731118582e-6,-2.1302519561850147e-8,-0.0016978543995590132,-9.10238542444722e-6,-2.121770451114759e-8,-0.0016975380294125626,-8.965565187764711e-6,-2.1103046899748445e-8,-0.0016972892355614753,-8.822716746064468e-6,-2.0982928734896224e-8,-0.001697104147393287,-8.706075816679848e-6,-2.0884721675880377e-8,-0.0016969666972081788,-8.647926619789557e-6,-2.0835920379221263e-8,-0.00169684740011825,-8.675181170249637e-6,-2.0859546028640884e-8,-0.0016967045804855362,-8.801519162920972e-6,-2.0967436610679105e-8,-0.0016964905065300056,-9.01844333619171e-6,-2.1152579343920042e-8,-0.0016961639731149969,-9.289415793960601e-6,-2.138406153842879e-8,-0.001695707106127775,-9.553311743058151e-6,-2.160998864081665e-8,-0.0016951385176591758,-9.741104001052941e-6,-2.1771702413548394e-8,-0.0016945128063564176,-9.801298769835388e-6,-2.1825425829586347e-8,-0.001693902985101117,-9.720976758235634e-6,-2.176009941619977e-8,-0.0016933741666031645,-9.529958261736527e-6,-2.1600847624303437e-8,-0.0016929627649807358,-9.286767509844959e-6,-2.1397063223247418e-8,-0.0016926700984223038,-9.056285660978077e-6,-2.1203544267075215e-8,-0.0016924690855679811,-8.890755742029625e-6,-2.1064502321326876e-8,-0.0016923170302585921,-8.819805710338477e-6,-2.1005150945671767e-8,-0.0016921682214408472,-8.8489478525651e-6,-2.1030391509463162e-8,-0.0016919833229793798,-8.963433333096914e-6,-2.1127991678712995e-8,-0.0016917350451069605,-9.1345146397534e-6,-2.1273812337831973e-8,-0.0016914106590955637,-9.326304850307346e-6,-2.1437577987506275e-8,-0.0016910119930584138,-9.50234733555081e-6,-2.158843896357954e-8,-0.0016905533915853798,-9.631291450467526e-6,-2.1699798048136526e-8,-0.0016900581754099764,-9.69110899668149e-6,-2.1752905508392625e-8,-0.0016895542586885487,-9.671493446052107e-6,-2.1738910779710982e-8,-0.0016890696305639124,-9.574362283327237e-6,-2.1659302094648493e-8,-0.0016886283866275086,-9.412685663855614e-6,-2.1524925607916213e-8,-0.001688247743667381,-9.208192002297713e-6,-2.1354054577412935e-8,-0.0016879360364431592,-8.98854909081757e-6,-2.1170017704178606e-8,-0.0016876914563649197,-8.784322466768402e-6,-2.0998642806816554e-8,-0.0016875013089274406,-8.625690463057586e-6,-2.086549585606093e-8,-0.0016873417279686287,-8.53858560005698e-6,-2.0792626469016813e-8,-0.001687178325547085,-8.539692110101775e-6,-2.079432297753112e-8,-0.0016869691166023061,-8.630151987089456e-6,-2.0871746461888742e-8,-0.0016866715029369072,-8.789267347131455e-6,-2.100754636158876e-8,-0.001686254318023176,-8.97163165767185e-6,-2.1163398058176738e-8,-0.0016857129301765929,-9.112940780203801e-6,-2.1284938230037018e-8,-0.0016850801573558933,-9.148161471228022e-6,-2.1317184884815498e-8,-0.001684422796496244,-9.037763226930734e-6,-2.122672379094548e-8,-0.0016838198027999708,-8.787797426035769e-6,-2.1018591580797273e-8,-0.0016833318949512636,-8.44940531154977e-6,-2.0735764854021037e-8,-0.0016829803888256231,-8.096954946202853e-6,-2.0440726785689123e-8,-0.0016827459755191082,-7.799047296914452e-6,-2.0191141842253217e-8,-0.001682583454796451,-7.598483392665845e-6,-2.0023083749209106e-8,-0.0016824406087873034,-7.507046345778621e-6,-1.9946647297024858e-8,-0.00168227233893414,-7.511005682637191e-6,-1.995050767444206e-8,-0.0016820477635596358,-7.580629314178077e-6,-2.0009840918065495e-8,-0.0016817519149339769,-7.679226904576688e-6,-2.0093885939198342e-8,-0.0016813844563981313,-7.770076038468931e-6,-2.017176810577966e-8,-0.00168095711875254,-7.821310599237092e-6,-2.02166337334569e-8,-0.0016804905773571324,-7.809332280904686e-6,-2.020854689581189e-8,-0.001680010953275545,-7.72105576611143e-6,-2.013639837823021e-8,-0.001679546036692029,-7.555014866778501e-6,-1.999884849506686e-8,-0.0016791214090587767,-7.3212178391739496e-6,-1.9804212819061585e-8,-0.0016787568208649483,-7.0396326381076e-6,-1.956919439356282e-8,-0.0016784633058374865,-6.737431280764423e-6,-1.9316573595337173e-8,-0.0016782413530992905,-6.445394475960026e-6,-1.907219462969039e-8,-0.001678080222805157,-6.193862700986028e-6,-1.8861571689255484e-8,-0.0016779584103784654,-6.008506027515523e-6,-1.8706342929766363e-8,-0.001677845249146384,-5.906093833141004e-6,-1.8620715185890165e-8,-0.0016777038192801804,-5.890290612856807e-6,-1.8607914310898255e-8,-0.0016774958004093384,-5.947719194763358e-6,-1.8656841222782147e-8,-0.0016771890493794792,-6.04551842846217e-6,-1.873997969081269e-8,-0.001676767832841618,-6.132885965309012e-6,-1.8814675758844495e-8,-0.0016762435242489034,-6.149771262434435e-6,-1.8830466334363702e-8,-0.0016756602448421592,-6.044400624246342e-6,-1.8743841862040513e-8,-0.001675087945535953,-5.795520152856072e-6,-1.8536922752685177e-8,-0.001674600133436057,-5.427392994706577e-6,-1.8229981102522346e-8,-0.0016742451149479186,-5.004926323171685e-6,-1.7877295972549893e-8,-0.0016740276746855878,-4.608399079730942e-6,-1.7546004506771972e-8,-0.0016739119980301556,-4.302510944871832e-6,-1.729026756861099e-8,-0.0016738412334485694,-4.117301795986611e-6,-1.7135338860309113e-8,-0.0016737597260480786,-4.047201977927108e-6,-1.7076725758927597e-8,-0.0016736272940627243,-4.062129813392705e-6,-1.708939796436854e-8,-0.0016734236526182423,-4.121225593287399e-6,-1.7139232302019368e-8,-0.0016731464204356393,-4.183527382690121e-6,-1.719194905092986e-8,-0.001672806667024793,-4.214324596648135e-6,-1.721846074771176e-8,-0.0016724243936852225,-4.1882372375009135e-6,-1.7197481453770475e-8,-0.0016720247121886067,-4.090499672781078e-6,-1.71166177315317e-8,-0.001671634560924054,-3.9173958791691575e-6,-1.697273167292582e-8,-0.0016712796064216253,-3.676148262014399e-6,-1.677183719774153e-8,-0.0016709811132979546,-3.3841381804794744e-6,-1.6528438089025636e-8,-0.001670752839878428,-3.067097445950772e-6,-1.626401154436992e-8,-0.0016705983902454557,-2.755995668689129e-6,-1.6004410253319553e-8,-0.0016705096420609104,-2.4827410471397807e-6,-1.5776279333381472e-8,-0.0016704667555038147,-2.2751486697532836e-6,-1.5602864533974782e-8,-0.001670440054529566,-2.151829226592785e-6,-1.5499751063543376e-8,-0.001670393800312215,-2.117817669325008e-6,-1.5471212409242127e-8,-0.001670291584102462,-2.1617204405963794e-6,-1.5507814775575798e-8,-0.0016701029794063543,-2.2550054075283997e-6,-1.5585801952800447e-8,-0.0016698110099757678,-2.354258371242796e-6,-1.5668961170856538e-8,-0.0016694193436379667,-2.4075797922360825e-6,-1.5713962061550806e-8,-0.0016689568880535386,-2.3659216383981152e-6,-1.5679837674904023e-8,-0.001668476255894404,-2.198389705642687e-6,-1.5540770761251108e-8,-0.0016680427111036224,-1.9070635849955495e-6,-1.5298448763090533e-8,-0.0016677138985701416,-1.5331708742942751e-6,-1.49871845626283e-8,-0.001667517861434114,-1.147223731015582e-6,-1.4665690841976024e-8,-0.0016674416245268775,-8.243545513833562e-7,-1.4396566986045408e-8,-0.0016674379465091208,-6.170824570407865e-7,-1.4223645290633774e-8,-0.0016674458929825874,-5.401446955353702e-7,-1.415932767755485e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json new file mode 100644 index 0000000..ddc7d4d --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":20000,"numberOfSamples":1000,"samples":[0.002920358133904192,-6.784113942412794e-6,1.9052440314477163e-8,0.0029206413912713745,-6.613636446664559e-6,1.880279195741177e-8,0.0029208307139081857,-6.4248857259363685e-6,1.8526799455172666e-8,0.002920930147853429,-6.259580496894272e-6,1.8285299846459358e-8,0.002920958301557765,-6.151401288497133e-6,1.8127384394993633e-8,0.002920943527534336,-6.121517965926748e-6,1.8083876197142136e-8,0.002920918375602291,-6.176714362040785e-6,1.816459054828576e-8,0.0029209142523147777,-6.309966452545619e-6,1.8359183512205728e-8,0.0029209570493570875,-6.502919273456435e-6,1.864078390277559e-8,0.0029210641805222245,-6.729529878146821e-6,1.8971329337261025e-8,0.0029212431239192664,-6.960111764971586e-6,1.9307474224319167e-8,0.0029214911994797127,-7.165144308668532e-6,1.960613535377138e-8,0.002921796120285953,-7.318617634903727e-6,1.982935162046132e-8,0.002922137007124233,-7.4010933087209115e-6,1.994874542519259e-8,0.0029224858842140738,-7.402792330024526e-6,1.9950053694911065e-8,0.0029228100891597296,-7.3269133160290385e-6,1.9838013786501703e-8,0.0029230765056806078,-7.192875581754198e-6,1.9641124744988003e-8,0.002923258593947595,-7.038021661925838e-6,1.941411030247615e-8,0.0029233461420444737,-6.914897975233613e-6,1.9233867338703342e-8,0.0029233550561071457,-6.88082642372724e-6,1.9184132872670825e-8,0.002923331035256764,-6.979157664713172e-6,1.9328047777690732e-8,0.002923340142385916,-7.2183869507838524e-6,1.9677702094935728e-8,0.002923445583922481,-7.561828631160178e-6,2.0179192009197127e-8,0.002923681317946548,-7.937980661899995e-6,2.072789220706034e-8,0.0029240384097172193,-8.268180631197756e-6,2.1208898937220332e-8,0.0029244717828463846,-8.495446917109097e-6,2.1539128515592525e-8,0.0029249206337382287,-8.5993447870362e-6,2.168897594018406e-8,0.0029253292642615033,-8.593866031641322e-6,2.1679150221309016e-8,0.002925659785723746,-8.515407336314436e-6,2.1563040883823154e-8,0.0029258958667452545,-8.409144036535884e-6,2.140676187245665e-8,0.0029260405842169023,-8.318330424117874e-6,2.1273515340970926e-8,0.0029261116369550147,-8.277597083016847e-6,2.1213831819462888e-8,0.0029261360482877165,-8.309529221173803e-6,2.1260608728115165e-8,0.0029261452014683505,-8.42340926017503e-6,2.142729184107828e-8,0.002926170313882796,-8.615486024606374e-6,2.1708269585437497e-8,0.00292623844165663,-8.870566448345604e-6,2.2081201504360447e-8,0.00292636924853009,-9.164729529600066e-6,2.2511001728707966e-8,0.0029265727710682966,-9.46889441648262e-6,2.295507952203869e-8,0.0029268483980316373,-9.752900430721535e-6,2.336931848773817e-8,0.0029271851539575938,-9.989600330613871e-6,2.371405611551756e-8,0.0029275631112714875,-1.0158516530347245e-5,2.3959412562508196e-8,0.002927955664309901,-1.0248883948905652e-5,2.408973052847181e-8,0.002928332543885939,-1.0262052169211477e-5,2.4107097524156514e-8,0.002928663659626732,-1.0213176614852856e-5,2.4033835922844377e-8,0.002928924086482032,-1.0131859571605514e-5,2.391343414198871e-8,0.002929100469893201,-1.006068720901442e-5,2.380835533385682e-8,0.00292919825272032,-1.0049779074946679e-5,2.3791978424671676e-8,0.0029292472514429032,-1.0145544621233506e-5,2.3932078427797663e-8,0.0029293008561212352,-1.0374107175155202e-5,2.4266580620660107e-8,0.0029294238469290295,-1.0725024417737487e-5,2.4779841229322424e-8,0.002929669111734987,-1.114611883277768e-5,2.539521780426727e-8,0.0029300535325597157,-1.1558053316444333e-5,2.599647534430263e-8,0.0029305485124082784,-1.1884615009568598e-5,2.647210161222967e-8,0.0029310923955805034,-1.2081611605397568e-5,2.675757842754958e-8,0.002931616304399638,-1.2148069338781219e-5,2.6851763811636517e-8,0.002932067285150511,-1.2117575796211164e-5,2.6804177118692685e-8,0.002932418917621506,-1.2040100109443465e-5,2.6688285414068273e-8,0.002932670230039864,-1.1965464765100921e-5,2.657720810322275e-8,0.0029328387680504554,-1.1933289258766363e-5,2.6528961772784398e-8,0.00293295270881014,-1.196897681852962e-5,2.658062017342903e-8,0.002933044376699607,-1.2083490982675024e-5,2.67480469420976e-8,0.0029331455921541476,-1.2274805413081184e-5,2.7028061070784242e-8,0.002933284292138651,-1.2529877406152909e-5,2.7401345594697467e-8,0.00293348183921598,-1.2826952297089921e-5,2.7835835906596038e-8,0.0029337508490475143,-1.3138354603080276e-5,2.829083170402535e-8,0.002934093645838865,-1.3433894030281315e-5,2.872201713802254e-8,0.0029345016544849406,-1.3684880135773215e-5,2.908736254701938e-8,0.0029349561406361926,-1.386840837531521e-5,2.935340201831078e-8,0.002935430486740117,-1.3971275110489517e-5,2.95009506018706e-8,0.002935893835760189,-1.3992889279387817e-5,2.9529348563241594e-8,0.002936315747796631,-1.3946693107954746e-5,2.9458526641335536e-8,0.0029366714399644074,-1.3859725730502529e-5,2.9328347332084718e-8,0.0029369471463227275,-1.3770076163005065e-5,2.919483182596872e-8,0.0029371450608840764,-1.3721886782902614e-5,2.912277265954847e-8,0.002937286864066753,-1.3757394229001907e-5,2.917400350300773e-8,0.0029374138979444495,-1.3905986529102212e-5,2.9391340967481903e-8,0.002937581299334286,-1.4172039349156543e-5,2.9780814874648412e-8,0.002937844163109093,-1.45262281968288e-5,3.029905020497397e-8,0.0029382377175291947,-1.4907319198974039e-5,3.085599616240686e-8,0.0029387598782889463,-1.5239082205155629e-5,3.13397558100923e-8,0.0029393676298225253,-1.5457827043506526e-5,3.165695446938089e-8,0.002939992216838139,-1.5536378976067384e-5,3.1767915909756623e-8,0.0029405653190518453,-1.5490797301223943e-5,3.169654522724492e-8,0.002941041254771594,-1.536815347138079e-5,3.151235350452084e-8,0.00294140542344543,-1.5225670745632641e-5,3.129971116966001e-8,0.0029416699353257774,-1.511314588614597e-5,3.113191036723647e-8,0.002941863403875871,-1.5063955018859357e-5,3.105791466104839e-8,0.002942020994539501,-1.5093505935668198e-5,3.110013611490886e-8,0.002942177366646585,-1.520170158147927e-5,3.125814014183412e-8,0.0029423625508156873,-1.537654151057894e-5,3.1514004634474597e-8,0.002942599690849947,-1.559743059921687e-5,3.183721614696178e-8,0.00294290359336924,-1.5838011990550073e-5,3.2188849522134435e-8,0.00294327957060671,-1.606891948600009e-5,3.252562907878252e-8,0.002943722566359027,-1.626091105834113e-5,3.2804552667574874e-8,0.0029442169460562008,-1.6388674978272435e-5,3.2988495583917805e-8,0.002944737613991192,-1.643514977217652e-5,3.3052553288382284e-8,0.002945253028492552,-1.6395599116742716e-5,3.299000825108424e-8,0.0029457301748656087,-1.6280316984019043e-5,3.2816276383530096e-8,0.0029461409054937337,-1.6114844458962526e-5,3.2569189442586106e-8,0.002946468467779173,-1.59369584836108e-5,3.230452078197805e-8,0.0029467127007430827,-1.5790452065963385e-5,3.20867790313752e-8,0.002946892484190752,-1.571653783339316e-5,3.19765091292342e-8,0.0029470444074099875,-1.574421226294738e-5,3.201610119609517e-8,0.00294721700040216,-1.5881334913556607e-5,3.2216717921521556e-8,0.002947460426363542,-1.6108825234197094e-5,3.2549869520431156e-8,0.002947812788728661,-1.6380947123874963e-5,3.294795449427606e-8,0.002948286406491707,-1.663423983095662e-5,3.3317466246604255e-8,0.0029488597757889802,-1.6805051579412595e-5,3.356478318315856e-8,0.0029494809972528905,-1.6850594771345913e-5,3.362711592054566e-8,0.0029500837834087173,-1.6764027436157334e-5,3.3494691584581735e-8,0.002950609547099543,-1.65754022846451e-5,3.321214488618771e-8,0.0029510248489415226,-1.6338277873894157e-5,3.285874310463184e-8,0.002951326908519711,-1.6110067758768604e-5,3.251932528889389e-8,0.002951537740617979,-1.5935923031543694e-5,3.226045946019777e-8,0.002951692897861342,-1.5841154803625142e-5,3.2119268917177497e-8,0.0029518308167177263,-1.5831373922113136e-5,3.210371527010424e-8,0.002951985680243071,-1.5896753371837802e-5,3.219898309769699e-8,0.0029521838394617654,-1.6017149276703177e-5,3.237510141211502e-8,0.0029524425171660266,-1.6166416508957604e-5,3.259333287301716e-8,0.002952769476479237,-1.631566760743691e-5,3.281097659429368e-8,0.0029531628666808734,-1.6435949662826805e-5,3.298530817637135e-8,0.002953611072809355,-1.6501010877409013e-5,3.307765926789581e-8,0.0029540929521073237,-1.6490693620487103e-5,3.305842467294873e-8,0.002954579264429746,-1.639499922671663e-5,3.291305556929234e-8,0.00295503617946976,-1.6218085914775832e-5,3.264794315872196e-8,0.0029554312636725514,-1.598068794654785e-5,3.2293958485677294e-8,0.002955741283648492,-1.5719093070127868e-5,3.1904895652031e-8,0.002955959806034109,-1.547937573783238e-5,3.154889715991773e-8,0.0029561017019983917,-1.5307268455907255e-5,3.129343797151466e-8,0.002956202124345455,-1.5236171399037398e-5,3.118759456372629e-8,0.002956309344895545,-1.5277053681785616e-5,3.124717312307237e-8,0.002956473061121083,-1.5413664099591182e-5,3.144774573045378e-8,0.002956731321048645,-1.56048785559379e-5,3.1728248939181924e-8,0.00295709965139376,-1.5793981380019647e-5,3.20047831722283e-8,0.002957565526219128,-1.592284518104132e-5,3.2191570296512827e-8,0.002958090281759539,-1.5947524626471783e-5,3.2223937815342005e-8,0.0029586188407144266,-1.5850738642942996e-5,3.2076690446522256e-8,0.002959094945026436,-1.5646720190761735e-5,3.177121976954928e-8,0.002959476848073268,-1.5376083073574004e-5,3.136786811924238e-8,0.0029597476091094625,-1.5092533249955837e-5,3.094622473963542e-8,0.0029599165389014807,-1.4847001851064014e-5,3.058161120537158e-8,0.0029600126576895124,-1.4675368085643121e-5,3.032691574396036e-8,0.0029600742944759875,-1.4593152680899354e-5,3.020479859533819e-8,0.0029601393336397405,-1.4596748310243467e-5,3.020960605628144e-8,0.002960238698290419,-1.4668406120361078e-5,3.031483113270092e-8,0.002960393348094185,-1.4782054688900286e-5,3.048176038556993e-8,0.0029606137208240614,-1.4908213038661743e-5,3.0666732803764704e-8,0.002960900307724539,-1.5017561814104221e-5,3.082638893027108e-8,0.002961244434757364,-1.50835587775595e-5,3.092151102287129e-8,0.0029616289196745093,-1.508481954343969e-5,3.092053838966425e-8,0.0029620288994349014,-1.5007922270276185e-5,3.080373072655211e-8,0.002962413625758523,-1.485083932757977e-5,3.056826258788275e-8,0.0029627502369207145,-1.4626387490437281e-5,3.023332794121676e-8,0.002963010182597418,-1.4364071234967201e-5,2.9842834228472035E-08,0.002963177767764606,-1.4107920694885702e-5,2.9462135061082662e-8,0.002963258245024794,-1.390835698351417e-5,2.9165907356940043e-8,0.002963281197327158,-1.3808595017261191e-5,2.9017964910745684e-8,0.0029632955592347656,-1.3829869002871433e-5,2.9049396981577167e-8,0.0029633562901483323,-1.396211303207011e-5,2.9244867118890364e-8,0.002963507429295757,-1.4165122782118485e-5,2.9544476640865564e-8,0.0029637685076608447,-1.4380196230406393e-5,2.986111941278739e-8,0.0029641293995320965,-1.4547336536681909e-5,3.010599812437667e-8,0.0029645544477331213,-1.462147944059388e-5,3.021262159737794e-8,0.002964993199433165,-1.4582947790407866e-5,3.015220993420224e-8,0.002965393786237881,-1.4440252912374524e-5,2.993775541428279e-8,0.002965715263846332,-1.4225700000439636e-5,2.9617431791449873e-8,0.002965936105661564,-1.3985740295725363e-5,2.926023813664994e-8,0.0029660572013795127,-1.3768956215185547e-5,2.893816297894991e-8,0.0029660991821764673,-1.361495218959358e-5,2.8709729777681658e-8,0.0029660954822132313,-1.3546940317984253e-5,2.8609061319606824e-8,0.0029660836753954115,-1.3569374678669404e-5,2.86424548981107e-8,0.002966097715672726,-1.3670152439685494e-5,2.8791723939980673e-8,0.002966162758787371,-1.382559151959131e-5,2.9021622975413763e-8,0.002966292909415142,-1.4006141463460001e-5,2.9288313696922994e-8,0.0029664912327432187,-1.4181368889154244e-5,2.9546719679842586e-8,0.00296675098439865,-1.432364071392131e-5,2.975594063607446e-8,0.0029670571768570203,-1.441068763053631e-5,2.988302426452729e-8,0.0029673880824924595,-1.4427641005829092e-5,2.990599124607975e-8,0.0029677168251591012,-1.4369146872198044e-5,2.9817001755657374e-8,0.002968013691011178,-1.4241810907193253e-5,2.962601250879183e-8,0.0029682500709710805,-1.4066513065220714e-5,2.93642059457502e-8,0.002968404731954602,-1.387910107568484e-5,2.9084963591962518e-8,0.002968471978193223,-1.3727039399383037e-5,2.88588007731629e-8,0.002968469059433979,-1.3659767445614165e-5,2.875897632722551e-8,0.0029684378958154877,-1.3713145157645224e-5,2.8838395498620046e-8,0.00296843646941631,-1.3893353069001035e-5,2.9105800690051132e-8,0.0029685202671800416,-1.4169383669450605e-5,2.9514779524273305e-8,0.0029687215722676882,-1.4480741544933563e-5,2.997532983204709e-8,0.0029690374925616814,-1.4758063993347154e-5,3.038452227517716e-8,0.002969432550313911,-1.494625005415047e-5,3.0660807023103234e-8,0.0029698527534371528,-1.501941615613648e-5,3.076614564288683e-8,0.002970242975131316,-1.4983590593674082e-5,3.070991787329774e-8,0.002970560707010411,-1.486978332026129e-5,3.053852833456252e-8,0.002970783380041674,-1.4722598896256202e-5,3.031840881526067e-8,0.0029709096528671933,-1.4588664344004444e-5,3.01187930361603e-8,0.0029709563531596737,-1.4507263299708571e-5,2.999782950169233e-8,0.0029709528196634203,-1.450412607323851e-5,2.9993430059943106e-8,0.0029709340930672533,-1.4588613765477793e-5,3.011917526326649e-8,0.0029709342235076834,-1.4754157039491757e-5,3.036503994043903e-8,0.0029709808089967682,-1.4981337496558506e-5,3.070201327711546e-8,0.0029710914938153535,-1.524256500555707e-5,3.1089054340748793e-8,0.0029712726180356206,-1.5507206205397086e-5,3.1480689014010646e-8,0.0029715197167699482,-1.5746211713835314e-5,3.1833846061620287e-8,0.002971819217195222,-1.5935676545529305e-5,3.211310994113541e-8,0.0029721506391493777,-1.6059298169857467e-5,3.2294356226821274e-8,0.002972488915422919,-1.6110085669579795e-5,3.236730284468479e-8,0.0029728068475521232,-1.609171171330991e-5,3.233754856855953e-8,0.0029730780491342918,-1.6019684593364873e-5,3.2228331099957483e-8,0.002973280996517472,-1.5922014544477006e-5,3.2081488017266414e-8,0.002973404663571169,-1.5838170077771026e-5,3.195582334149546e-8,0.0029734552005521004,-1.581431674792034e-5,3.1919928221359786e-8,0.002973461188362297,-1.589302000644207e-5,3.2036819078499595e-8,0.0029734728689441363,-1.609792381140514e-5,3.234121094806937e-8,0.0029735507610109523,-1.6418860094304986e-5,3.281753040259766e-8,0.002973744280704623,-1.6807320664665265e-5,3.3393348896120576e-8,0.0029740698756861514,-1.7189700640362698e-5,3.395915574472174e-8,0.002974502213153519,-1.7494403406110863e-5,3.4408643234550394e-8,0.002974984560957685,-1.767802825408724e-5,3.4677597890506306e-8,0.0029754513730213712,-1.773672456282881e-5,3.476073805538473e-8,0.002975849730807777,-1.7700253301847003e-5,3.470280180238341e-8,0.0029761508530331345,-1.7616516953682456e-5,3.4575409590022556e-8,0.0029763511916333146,-1.7535807952942615e-5,3.445351817065031e-8,0.0029764671850589274,-1.7499734982786542e-5,3.439891544803893e-8,0.002976527814731713,-1.753553605886131e-5,3.445182277720747e-8,0.0029765674333753333,-1.7654482487030005e-5,3.462863214504655e-8,0.0029766197783471023,-1.785285028144174e-5,3.4923452338110174e-8,0.002976713303471049,-1.8114495901758313e-5,3.531200044507124e-8,0.00297686786306883,-1.841450460826479e-5,3.575704849602197e-8,0.002977092820345906,-1.8723439945705067e-5,3.6214741069552453E-08,0.0029773865940886136,-1.9011730919729806e-5,3.6641106825301627e-8,0.00297773758195352,-1.9253744086145604e-5,3.6998098021908325e-8,0.002978126225410339,-1.9431077092030192e-5,3.725847234837322e-8,0.002978527778364898,-1.953481608938666e-5,3.740914085341509e-8,0.0029789154040244796,-1.9566826718393777e-5,3.7453087807647996e-8,0.002979263474936315,-1.9540223734977267e-5,3.741007038668588e-8,0.002979551126528603,-1.9479037319080024e-5,3.731610210216535e-8,0.002979766242014358,-1.9416859969519788e-5,3.722137847792964e-8,0.0029799099497124348,-1.9393715173435276e-5,3.7185523694292244e-8,0.002980000915971834,-1.94498533312271e-5,3.7268276541520824e-8,0.0029800772524500073,-1.9615566721707554e-5,3.7514326950814606e-8,0.002980192469529219,-1.9898167604817833e-5,3.7934040287157073e-8,0.0029804022602219083,-2.0271164712515565e-5,3.8487521814506124e-8,0.0029807434701728474,-2.067424132501533e-5,3.9084720785291444e-8,0.0029812147089178787,-2.1030261025836366e-5,3.961077233026522e-8,0.0029817719928732045,-2.127449949752043e-5,3.99694784583061e-8,0.0029823449666828935,-2.1379992430783766e-5,4.0121037663042906e-8,0.0029828645165091085,-2.136410513008704e-5,4.009182899623436e-8,0.0029832854451143304,-2.127531976246566e-5,3.995464665032265e-8,0.002983594498668351,-2.1171712511966522e-5,3.97964527218785e-8,0.0029838054954291746,-2.1103248487216302e-5,3.9691834147374094e-8,0.002983948836829765,-2.110276132606735e-5,3.968953147631429e-8,0.002984061290257191,-2.1184288397485705e-5,3.981006008442894e-8,0.002984178513731084,-2.1345484561751207E-05,4.004945855912969e-8,0.00298433040769511,-2.157146104983014e-5,4.0385128619668554e-8,0.002984538433971821,-2.183875045296736e-5,4.078179890719198e-8,0.002984814157245484,-2.2119128743535838e-5,4.1197228817699106e-8,0.0029851587068223267,-2.2383338100873876e-5,4.158774803164346e-8,0.0029855631058775885,-2.260472386163859e-5,4.191366897386889e-8,0.002986009558291577,-2.2762699849510053e-5,4.214444460091879e-8,0.002986473810408079,-2.2845709776562213e-5,4.226307152736928e-8,0.0029869284555065143,-2.285321248440732e-5,4.226903134195116e-8,0.0029873468009023675,-2.279640960153469e-5,4.217934987696174e-8,0.0029877069362470323,-2.2697618488155953e-5,4.202762496290873e-8,0.002987995706883981,-2.2588196005956238e-5,4.186087368514205e-8,0.0029882122724941918,-2.250493424394035e-5,4.173407992678916e-8,0.002988370845250907,-2.2484777608857293e-5,4.170223881865493e-8,0.0029885017936435655,-2.255756728162393e-5,4.180950622118746e-8,0.002988649508545319,-2.2737002269993502e-5,4.20757789848222e-8,0.002988864944534272,-2.3011660125789477e-5,4.248345478531366e-8,0.0029891917531914853,-2.3340375925996207e-5,4.2970713042447454e-8,0.0029896486141179545,-2.3657833305475466e-5,4.3439950290240724e-8,0.002990215930999584,-2.3893473135528555e-5,4.378597223794274e-8,0.0029908371871804683,-2.399812996226874e-5,4.393568517521914e-8,0.0029914382467285117,-2.396417191820179e-5,4.3878147729951906e-8,0.0029919551613743003,-2.38265851199188e-5,4.3666186218943454e-8,0.0029923547556799392,-2.364535922564181e-5,4.33899815622375e-8,0.0029926388924618567,-2.34815530183942e-5,4.314111317342226e-8,0.0029928352743501543,-2.3379858232251807e-5,4.298635560434982e-8,0.002992983643000855,-2.3362211966869825e-5,4.2958145653724355e-8,0.002993124239325345,-2.3429729514789833e-5,4.305762336091702e-8,0.0029932908205783236,-2.3568260581625195e-5,4.3263117748307686e-8,0.0029935075467194595,-2.3754218892099406e-5,4.353897939933425e-8,0.002993788115402275,-2.3959322132927218e-5,4.3842700238288005e-8,0.002994135865131543,-2.415427368613513e-5,4.413039745178603e-8,0.002994544317604473,-2.431187474329782e-5,4.436143642962751e-8,0.0029949981369148688,-2.4409940834154676e-5,4.4502773677267694e-8,0.002995474733920963,-2.4434159363146072e-5,4.453322269139798e-8,0.002995946867852737,-2.438065412063379e-5,4.444727962470359e-8,0.0029963863997792425,-2.4257633800533217e-5,4.425756592263305e-8,0.0029967688850502656,-2.4085455016201706e-5,4.399488097416399e-8,0.002997078338300538,-2.3894673268282683e-5,4.370522458009922e-8,0.002997311349129843,-2.3721945852451404e-5,4.344359182276227e-8,0.002997479656226587,-2.360404297666528e-5,4.32649398235654e-8,0.0029976103593761477,-2.357065305448074e-5,4.3213385803306306e-8,0.002997743110787153,-2.3636926496027646e-5,4.3311086910764544e-8,0.002997923748088096,-2.379704664473801e-5,4.354874311053949e-8,0.0029981942175954005,-2.4020889171051923e-5,4.388077348084879e-8,0.0029985799058661606,-2.4256592745038067e-5,4.422930981774514e-8,0.0029990778745615423,-2.444143335305884e-5,4.450051619084297e-8,0.002999651934402648,-2.4520419116148653e-5,4.461236561595702e-8,0.003000240119555401,-2.4466536425871935e-5,4.452486712152954e-8,0.0030007744382348467,-2.4292342453891288e-5,4.4257372821343864e-8,0.0030012043836071256,-2.4045254021272564e-5,4.388146492212079e-8,0.003001512146798215,-2.3788596603881732E-05,4.3492440534199405e-8,0.003001713011004348,-2.3579216292932016e-5,4.3175608587979206e-8,0.0030018440201570076,-2.345253767991309e-5,4.298382851303703e-8,0.0030019492490419297,-2.3418849803166555e-5,4.293202980731309e-8,0.0030020683571267115,-2.3467794115789163e-5,4.300412504387121e-8,0.003002230577040951,-2.3575924418412295e-5,4.3164515275253525e-8,0.0030024530481396073,-2.371369072928725e-5,4.336864156691746e-8,0.0030027414546316424,-2.3850507219765965e-5,4.357057053753451e-8,0.0030030914014577796,-2.395813305179184e-5,4.3728004665977624e-8,0.003003489836964812,-2.4013129247926298e-5,4.3805913400348664e-8,0.003003916505986112,-2.3999045197511412e-5,4.3779791639210484e-8,0.0030043458018004154,-2.3908648392456543e-5,4.3639009503235175e-8,0.003004749546491452,-2.3746015567883387e-5,4.338995688522113e-8,0.0030051010544452283,-2.3527756377723387e-5,4.305786620408989e-8,0.003005380278727441,-2.3282359290256304e-5,4.268578367873625e-8,0.0030055791218540325,-2.3046814799346892e-5,4.232942511550203e-8,0.003005705403471987,-2.2860300990568903e-5,4.2047613637055405e-8,0.0030057838269298923,-2.2755768795899834e-5,4.188959157506121e-8,0.0030058528292368726,-2.275134395340437e-5,4.188212374752424e-8,0.003005957307061821,-2.2843946110056914e-5,4.2020014794074985E-08,0.003006138413427418,-2.300724171618979e-5,4.226319699714995e-8,0.0030064225790959894,-2.319527741556905e-5,4.254234844837243e-8,0.003006812562702178,-2.335201743558618e-5,4.277330694714285e-8,0.0030072836012702583,-2.3425444976355578e-5,4.2878234687331705e-8,0.003007787264335132,-2.3382901257872224e-5,4.280856410095554e-8,0.003008263689228249,-2.3222450315454287e-5,4.2561953877304193e-8,0.0030086592071474436,-2.2974830200955383e-5,4.218511547518296e-8,0.0030089426676550976,-2.26937486182808e-5,4.17591305405803e-8,0.00300911333844383,-2.2438134195979213e-5,4.137267939823414e-8,0.003009197487585295,-2.225432969879038e-5,4.1095226879594374e-8,0.003009236757661162,-2.216547948200621e-5,4.0961121500672567e-8,0.003009274709149118,-2.217043771176245e-5,4.09681037873079e-8,0.0030093468102407217,-2.224960297551781e-5,4.108625065125137e-8,0.003009475717436156,-2.2373205783984607e-5,4.1270546851323725e-8,0.003009670815179887,-2.250862585044295e-5,4.147189797251425e-8,0.0030099299700386954,-2.2625428795493783e-5,4.164463699013084e-8,0.00301024187402901,-2.269838136100306e-5,4.1750971465696804e-8,0.003010588197802463,-2.2709282253166442e-5,4.17636812926794e-8,0.0030109454772800953,-2.2648401738654642e-5,4.1668279995880246e-8,0.0030112871514783373,-2.2515993789587058e-5,4.1465320020488957e-8,0.003011586410402015,-2.2323777967550487e-5,4.1172650945728414e-8,0.003011820354517727,-2.2095615453953176e-5,4.082642765490463e-8,0.0030119753682766987,-2.1866121724890676e-5,4.0478962804724885e-8,0.0030120526329220835,-2.167596603147096e-5,4.019155827324615e-8,0.003012071619005174,-2.1563470526289128e-5,4.002177521312465e-8,0.0030120689879420764,-2.1553983387326334e-5,4.0007412510859045e-8,0.0030120914835277484,-2.1650539471334874e-5,4.015251477306536e-8,0.003012183981443884,-2.1829957093484467e-5,4.0421644155871945e-8,0.003012376436940448,-2.2046872823385574e-5,4.074612539538994e-8,0.003012674385510726,-2.2245060636632923e-5,4.104120937557746e-8,0.003013056385483303,-2.237249037808146e-5,4.122877520759659e-8,0.003013479206572159,-2.2395363336080645e-5,4.125840285038834e-8,0.00301388907552939,-2.2307009988112173e-5,4.112064949092303e-8,0.003014235716569667,-2.21292539477236e-5,4.0848957479960844e-8,0.0030144852458368573,-2.1905904722336058e-5,4.0509715506145036e-8,0.003014628140393211,-2.1690273931464643e-5,4.0183354013727575e-8,0.0030146798861370155,-2.1530670765035162e-5,3.9942465173289727e-8,0.003014674513909391,-2.1458647516230403e-5,3.9834154839566405e-8,0.0030146539150070514,-2.1483480978725524e-5,3.9871866653527925e-8,0.003014657045850174,-2.159355446238517e-5,4.003762590554032e-8,0.0030147123189946208,-2.1762610361229233e-5,4.029158028075859e-8,0.0030148344079461886,-2.1957660138997936e-5,4.0583952504102195e-8,0.003015024723893025,-2.214588593896058e-5,4.0865392615269084e-8,0.0030152739036193445,-2.22993320272481e-5,4.109395623141755e-8,0.0030155648211872598,-2.239750335835605e-5,4.123893927793968e-8,0.0030158753159103555,-2.242862410171888e-5,4.1282740545661414e-8,0.0030161804959735242,-2.239035571976067e-5,4.122196425411615e-8,0.0030164549748184135,-2.2290484655788065e-5,4.106850249505057e-8,0.0030166756785176938,-2.2147566876471484e-5,4.085053467582822e-8,0.0030168257902463656,-2.1990840651876128e-5,4.0612367627877493e-8,0.0030168998356597245,-2.185809576971141e-5,4.041113557692705e-8,0.003016908801918456,-2.1790004412026398e-5,4.030814374624823e-8,0.0030168827390098687,-2.1820318277313286e-5,4.035402021045058e-8,0.0030168675107474373,-2.19637983748077e-5,4.057054444845606e-8,0.003016913871536386,-2.220687703617631e-5,4.09366942603126e-8,0.003017061280745224,-2.2507121073764624e-5,4.138801109760418e-8,0.0030173232653145413,-2.28042122748035e-5,4.1833304318833444e-8,0.0030176816547766365,-2.3038752114974032e-5,4.218308051823787e-8,0.003018092461901088,-2.317060860472061e-5,4.2377204037070425e-8,0.0030185000617629827,-2.3189358211647577e-5,4.240056434796237e-8,0.0030188531890023565,-2.3114278349446322e-5,4.2282916648184983e-8,0.0030191172695145925,-2.298608274263823e-5,4.2086230161827244e-8,0.003019280521670172,-2.2854616393563075e-5,4.188596434454325e-8,0.00301935377876645,-2.27664496809722e-5,4.1752283274555145e-8,0.0030193653932179577,-2.2755137035095014e-5,4.173540981919782e-8,0.0030193531828910203,-2.2835689436507088e-5,4.185743087774839e-8,0.003019355569264338,-2.3003756094996915e-5,4.211123646364793e-8,0.003019403958407845,-2.323899690414335e-5,4.246574371735947e-8,0.003019517875462904,-2.3511172447957385e-5,4.2875145551518413e-8,0.003019703373553423,-2.3786991097561844e-5,4.328922423781491e-8,0.003019954219332213,-2.4036029761377636e-5,4.3662218358333147e-8,0.003020254766068992,-2.423482031971884e-5,4.395891153209101e-8,0.003020583367897793,-2.4369010761043288e-5,4.415784033020523e-8,0.0030209155492026242,-2.4434102956819604e-5,4.425239523927991e-8,0.0030212267021837735,-2.443546844269732e-5,4.4250868318591255e-8,0.0030214945520319145,-2.438812313993975e-5,4.417614262844354e-8,0.0030217018620748537,-2.4316298536123176e-5,4.406504030121207e-8,0.0030218398456035413,-2.4252307744576375e-5,4.396654725060574e-8,0.003021912331535931,-2.4233602777596313e-5,4.39372627104561e-8,0.0030219396761021347,-2.429662036167427e-5,4.4032012805518794e-8,0.0030219599100410016,-2.4466782499552282e-5,4.4288740896769435e-8,0.00302202361177359,-2.4746531459929342e-5,4.47105455738881e-8,0.003022180395983599,-2.5107010582484676e-5,4.525329764117915e-8,0.003022460057180725,-2.5490814286278737e-5,4.5829951905006934e-8,0.003022857627761485,-2.5828964736561783e-5,4.633626256410645e-8,0.003023332267934383,-2.6065721301283244e-5,4.668826880948124e-8,0.003023821927221237,-2.6178133626157623e-5,4.685181828073514e-8,0.0030242654527104103,-2.618060722133502e-5,4.6849397702988095e-8,0.00302462064736006,-2.6115003315723564e-5,4.674500325784846e-8,0.003024872054652819,-2.6034210741007566e-5,4.661907867346306e-8,0.003025029247398639,-2.5987096868666402e-5,4.654559337911846e-8,0.003025119674183166,-2.600869221520683e-5,4.657718713531259e-8,0.0030251798618585422,-2.6115962524536738e-5,4.6738915646380234e-8,0.003025247304514287,-2.6307892425086884e-5,4.702858653637406e-8,0.0030253540345252404,-2.6568373656992416e-5,4.742130825887169e-8,0.003025522180290973,-2.6870812112854194e-5,4.7876552038498893e-8,0.0030257616742353777,-2.718362842899639e-5,4.834647617031556e-8,0.0030260701248843638,-2.7475754898200334e-5,4.878418797216237e-8,0.003026434531440565,-2.7721296131052857e-5,4.915072369570908e-8,0.003026834267375794,-2.790282528074767e-5,4.941997646359749e-8,0.003027244652317317,-2.801310467185596e-5,4.958126578195143e-8,0.00302764045789911,-2.8055375984440208e-5,4.963976761859313e-8,0.0030279989828120874,-2.8042678247256376e-5,4.961548465878466e-8,0.003028302732030385,-2.7996614735003015e-5,4.9541371336797554e-8,0.0030285419382640503,-2.7945668380696642e-5,4.946074008271887e-8,0.0030287171664962805,-2.7922799028450726e-5,4.9423540183523226e-8,0.003028841979820805,-2.796162115926255e-5,4.948048077466765e-8,0.0030289448272879803,-2.8090202994150213e-5,4.967360897101288e-8,0.00302906808799766,-2.832216698757468e-5,5.002291747065914e-8,0.003029261393516597,-2.8646859820436187e-5,5.051165188848918e-8,0.0030295674732655794,-2.9023648863821986e-5,5.107788139765754e-8,0.0030300035036457318,-2.9387468552092513e-5,5.1622994265168756e-8,0.003030547654439084,-2.966892547984612e-5,5.204210187529804e-8,0.0030311419708281494,-2.9821700123341288e-5,5.226546402242462e-8,0.003031713429022907,-2.9841451121119933e-5,5.228710697781398e-8,0.0030322015269454838,-2.9764614366811912e-5,5.216297581619774e-8,0.003032576700297681,-2.964992539693665e-5,5.1982771928407634e-8,0.0030328427049061664,-2.95558177823456e-5,5.18354400080819e-8,0.0030330273738204275,-2.952483864326578e-5,5.178537523848844e-8,0.0030331699517057442,-2.9577898541893805e-5,5.1863748181959154e-8,0.0030333104138618784,-2.9715604944099784e-5,5.207074030425486e-8,0.003033482465717576,-2.9922976396352082e-5,5.238294189196952e-8,0.0030337098242709487,-3.017493755703473e-5,5.276185486031358e-8,0.0030340047066781646,-3.0441434203506502e-5,5.316170038656006e-8,0.0030343677318868385,-3.069201162682167e-5,5.353632168723621e-8,0.0030347889661070187,-3.089987345211356e-5,5.384526338775909e-8,0.0030352499978571756,-3.104524236184448e-5,5.405880170678398e-8,0.0030357268634388502,-3.111778908424594e-5,5.416158516454266e-8,0.0030361935715449567,-3.1117887001919675e-5,5.415451590233293e-8,0.003036625814699871,-3.105651407747209e-5,5.4054586154864e-8,0.003037004388893214,-3.095390233892545e-5,5.3892806738359834e-8,0.003037318044491069,-3.083722670992275e-5,5.3710656905416486e-8,0.0030375656938618433,-3.073753439132445e-5,5.355535566628204e-8,0.0030377579336559293,-3.068595891553895e-5,5.347403607373892e-8,0.0030379177300265737,-3.0709070813912385e-5,5.350663829087113e-8,0.00303807966723912,-3.0823076928323533e-5,5.367713979638666e-8,0.0030382864205653216,-3.102708512509555e-5,5.3983480616954495e-8,0.003038580787609243,-3.1297162733261364e-5,5.438876948576837e-8,0.0030389926926067358,-3.158502205672186e-5,5.481947606929273e-8,0.003039524072818,-3.1826340398447944e-5,5.517809779127173e-8,0.0030401396754807146,-3.196074975273588e-5,5.5373393880473416e-8,0.0030407732402690456,-3.1956872342941396e-5,5.5358273365942866e-8,0.0030413506216760183,-3.1827784431995975e-5,5.515324561172027e-8,0.0030418182463314066,-3.1625541651179424e-5,5.4838080988230775e-8,0.003042160215499455,-3.141800758364335e-5,5.4516451859117366e-8,0.003042396527409552,-3.126315753054347e-5,5.4276642795710085e-8,0.003042568426483442,-3.119410063882663e-5,5.416865946881467e-8,0.0030427219468042673,-3.121729790939866e-5,5.4201628447496637e-8,0.0030428965072263536,-3.131876817788899e-5,5.435349924198628e-8,0.0030431195875498325,-3.1472417249374476e-5,5.4583966139684054e-8,0.003043405671120528,-3.164719823662061e-5,5.48454888443154e-8,0.003043757278206,-3.181220441401584e-5,5.509103044165085e-8,0.0030441666670632966,-3.194016210578213e-5,5.527928024881129e-8,0.0030446177728978936,-3.2010055857858906e-5,5.537854846801234e-8,0.0030450884814295937,-3.200922767702134e-5,5.5369895852801475e-8,0.003045553386619406,-3.193493319092446e-5,5.524947681257876e-8,0.003045987115545042,-3.179510076572901e-5,5.502968803317016e-8,0.0030463680745412454,-3.1607871380829794e-5,5.473845618856727e-8,0.0030466821164058687,-3.139963516825679e-5,5.441621391559135e-8,0.0030469255028017037,-3.120163298944072e-5,5.4110664553357935e-8,0.003047106649642553,-3.1045429760949075e-5,5.3869815322197836e-8,0.003047246264489913,-3.0957724333207185e-5,5.373401644060654e-8,0.0030473756148905722,-3.0955076276420677e-5,5.372793333790556e-8,0.0030475327337165107,-3.10391075449408e-5,5.385333611732599e-8,0.0030477562593878016,-3.119291882112134e-5,5.408383161903094e-8,0.0030480767420623433,-3.138019112187306e-5,5.436371344206401e-8,0.003048506271394186,-3.154923496407961e-5,5.461427067933738e-8,0.003049029398017934,-3.164403612417949e-5,5.4750595244403097E-08,0.003049600741217892,-3.162181473782961e-5,5.470817249590223e-8,0.0030501546590933595,-3.147129459702184e-5,5.447053534930495e-8,0.0030506267199089275,-3.122124129326912e-5,5.408216609011085e-8,0.003050977543809847,-3.0931489493301834e-5,5.363475132421305e-8,0.0030512056349143645,-3.066970206362606e-5,5.323164358366911e-8,0.0030513427951945633,-3.048709541508865e-5,5.2950735410073135e-8,0.0030514375272195533,-3.0405493613713788e-5,5.2824725934812176e-8,0.0030515374213706445,-3.0418359774685625e-5,5.284287745599565e-8,0.003051677995809869,-3.050014466075965e-5,5.296553808075435e-8,0.0030518790092155215,-3.061696562449272e-5,5.314062781446654e-8,0.003052145625853913,-3.073469977610028e-5,5.3316031028704927e-8,0.0030524714707749288,-3.082377392153637e-5,5.344682144560079e-8,0.0030528417493476028,-3.086160174564249e-5,5.34988474804598e-8,0.0030532358836312897,-3.0833881042707114e-5,5.345060667689741e-8,0.003053629879526026,-3.0735485986035706e-5,5.3294565854492434e-8,0.0030539988364117142,-3.0571146292916206e-5,5.30382059792326e-8,0.0030543199507090837,-3.0355674406952507e-5,5.270438907050841e-8,0.0030545760956502454,-3.0113150877368533e-5,5.233010961195881e-8,0.00305475954547292,-2.9874438142143042e-5,5.1962653663563995e-8,0.003054874940487383,-2.967277780668974e-5,5.165280031939516e-8,0.0030549404324154324,-2.9537825570307475e-5,5.144563962738253e-8,0.0030549861390338404,-2.9489134143288323e-5,5.137059250576423e-8,0.0030550495976808005,-2.953061394193003e-5,5.143300630399881e-8,0.003055168710759939,-2.9647526534915528e-5,5.160970828560753e-8,0.0030553733364540553,-2.9807121158297693e-5,5.1850176986509324e-8,0.0030556770688369554,-2.9963521348213533e-5,5.208418350889287e-8,0.0030560711382057876,-3.0066914121891328e-5,5.223590149011024e-8,0.003056522783852153,-3.007606385331831e-5,5.224295582005858e-8,0.0030569803906741184,-2.9971466768568165e-5,5.207634125974998e-8,0.0030573862107332603,-2.9764480348069197e-5,5.1754164969916074e-8,0.0030576939719519337,-2.9497043921062268e-5,5.134105271121149e-8,0.0030578844960596806,-2.9229485363525857e-5,5.092940536552576e-8,0.0030579714726823846,-2.9020378842860718e-5,5.060856308901679e-8,0.00305799430929109,-2.890783769790072e-5,5.0436246780448754e-8,0.0030580024833647516,-2.8900743931462217e-5,5.042530128741445e-8,0.0030580398139917744,-2.8981793723107103e-5,5.0548579370877406e-8,0.0030581349144192635,-2.9117796452997896e-5,5.075489270553819e-8,0.0030582989710085853,-2.927092112731661e-5,5.0986296117823764e-8,0.00305852838098303,-2.9406906130383003e-5,5.1190589621726315e-8,0.00305880913029923,-2.9499417804318987e-5,5.132784410791377e-8,0.0030591209014314944,-2.9531615236497716e-5,5.1372652866946216e-8,0.003059440241717404,-2.949633831159525e-5,5.131434068941656e-8,0.00305974298908132,-2.9395907947313022e-5,5.1156659354477445e-8,0.0030600065090859636,-2.9241933794825013e-5,5.091753916282965e-8,0.00306021229511157,-2.9054948323373344e-5,5.062856693783168e-8,0.003060349177847135,-2.8863199511689882e-5,5.033312632870034e-8,0.003060416814008068,-2.8699745555567035e-5,5.008188395273282e-8,0.0030604284223485962,-2.8597283966096064e-5,4.992478512143156e-8,0.0030604111977471983,-2.858098323762389e-5,4.990002248696701e-8,0.0030604029204521956,-2.8660871126497475e-5,5.002240613766968e-8,0.0030604443802250266,-2.8826475438747818e-5,5.027527520898142e-8,0.0030605691021830185,-2.9046441406551585e-5,5.061009175503469e-8,0.00306079346737266,-2.927436144349517e-5,5.0955543464884993e-8,0.0030611106463299936,-2.945974872572592e-5,5.123445153963956e-8,0.003061490627398194,-2.9561147187201426e-5,5.1383839021491824e-8,0.0030618866932196325,-2.9557585511589545e-5,5.137235223398255e-8,0.0030622468460100747,-2.9455021239405097e-5,5.1209933881528055e-8,0.0030625273270125427,-2.9285654512983767e-5,5.0946554534423536e-8,0.0030627045011972953,-2.909970499319971e-5,5.065943900038011e-8,0.003062781223049597,-2.8951506243513924e-5,5.043168206571564e-8,0.0030627851170516554,-2.8884214842026012e-5,5.032886811317642e-8,0.003062759221135395,-2.8918582214671775e-5,5.038203695084455e-8,0.0030627487734678108,-2.9049687038960627e-5,5.0582911500186546e-8,0.0030627893702877065,-2.9251814457828465e-5,5.0891584468485985e-8,0.0030629003148716434,-2.9488179827505706e-5,5.1251525998749074e-8,0.0030630839037973016,-2.972103318011528e-5,5.160504457192073e-8,0.0030633288315558426,-2.9918997653759335e-5,5.190441062046527e-8,0.003063615124797014,-3.0060785653816723e-5,5.211739828811116e-8,0.003063918729338474,-3.013609360645597e-5,5.222854366679751e-8,0.003064214995878956,-3.014497667576545e-5,5.223815136496016e-8,0.0030644811540353513,-3.0096760320048008e-5,5.2160662139867385e-8,0.003064698316991432,-3.0009023509637796e-5,5.202315302953461e-8,0.0030648536429064674,-2.990656924730143e-5,5.1863784882354814e-8,0.0030649429933266646,-2.9819741475536308e-5,5.1729180727117875e-8,0.0030649738454125133,-2.9781167475517766e-5,5.166933721709507e-8,0.0030649674206902153,-2.98201748061254e-5,5.172897531156119e-8,0.0030649581828044383,-2.9955006804012056e-5,5.19355879701887e-8,0.0030649887015580467,-3.0184701153387606e-5,5.2287079973691934e-8,0.0030650993228122743,-3.048438554024296e-5,5.274472973817438e-8,0.0030653151426291397,-3.080799959377198e-5,5.3237545317571995e-8,0.0030656356436287177,-3.109971429626911e-5,5.36798936350581e-8,0.003066032397083313,-3.131062399609393e-5,5.3997123564829124e-8,0.0030664566457068772,-3.141392264624986e-5,5.414878191396371e-8,0.003066853673243906,-3.141241782904111e-5,5.414000445922996e-8,0.003067178107954643,-3.1336255718859404e-5,5.401782535141934e-8,0.003067405017322031,-3.123297452844401e-5,5.385569119674471e-8,0.0030675342967685115,-3.115406523908855e-5,5.3732673458228506e-8,0.0030675883450696387,-3.1142126616185284e-5,5.3713731593782084e-8,0.003067604598905477,-3.122165258980363e-5,5.3835712946092174e-8,0.0030676253853558076,-3.139518885501176e-5,5.41016984091395e-8,0.0030676878955794595,-3.164514859820826e-5,5.448403678006608e-8,0.0030678167760080873,-3.1940102956282886e-5,5.4934156079083943e-8,0.00306802082106185,-3.22432379520567e-5,5.539556794925043e-8,0.0030682938008947383,-3.252038055262967e-5,5.581610023286302e-8,0.003068618188348601,-3.2745712319185725e-5,5.6156527333722295e-8,0.0030689700372110436,-3.290455445210272e-5,5.63947158589191e-8,0.0030693235621584002,-3.299368835276426e-5,5.652604281911584e-8,0.0030696546829265168,-3.302018003318915e-5,5.656158441311524e-8,0.003069943501781531,-3.299964329710182e-5,5.652548727111865e-8,0.0030701761356594238,-3.295448884467991e-5,5.6452316329964884e-8,0.0030703464351241215,-3.2912168983386934e-5,5.6384348797087725e-8,0.0030704579205523843,-3.290292724600728e-5,5.6368046064395786e-8,0.0030705257705411666,-3.2956240209135014e-5,5.6448491101539555e-8,0.003070577902929506,-3.3095212754677564e-5,5.666072725949836e-8,0.003070653303256023,-3.332901887976236e-5,5.7018206275630994e-8,0.0030707954675129484,-3.3645317050531466e-5,5.750131258839977e-8,0.003071040281409215,-3.4006866132882734e-5,5.805237688321617e-8,0.003071401442066699,-3.435724590922433e-5,5.858460257890024e-8,0.003071860664240823,-3.463707718078335e-5,5.900700173455468e-8,0.003072369948294953,-3.4805077484133635e-5,5.9256687131385314e-8,0.0030728668933984586,-3.4853323968064e-5,5.932224867940723e-8,0.00307329574470014,-3.4808729472292477e-5,5.9245906426521214e-8,0.0030736238628414326,-3.472127382584356e-5,5.910521892617646e-8,0.0030738476136962186,-3.4646440956723325e-5,5.898583976281836e-8,0.0030739883560582247,-3.462984017376718e-5,5.895772090868357e-8,0.0030740829181741033,-3.46981445897087e-5,5.906122528438606e-8,0.0030741729261370603,-3.485661305223858e-5,5.930354340403719e-8,0.0030742957031104122,-3.509154811261891e-5,5.966276668283171e-8,0.0030744779277463736,-3.537572740023708e-5,6.00964697542749e-8,0.0030747323559975367,-3.5675189893930766e-5,6.055223916889516e-8,0.003075057487670119,-3.5956061174078274e-5,6.097812908001633e-8,0.0030754397046584866,-3.619027550379833e-5,6.133134047523962e-8,0.0030758570531433604,-3.6359408441814945e-5,6.158398173260262e-8,0.0030762836935755364,-3.645637499575067e-5,6.17255797130405e-8,0.0030766941332692503,-3.6485215974385064e-5,6.176270393282051e-8,0.00307706662715048,-3.645952970605651e-5,6.17165520944473e-8,0.0030773855806581914,-3.64002479832436e-5,6.161954383422073e-8,0.0030776432027652626,-3.63332416409525e-5,6.151163570192726e-8,0.003077840759611733,-3.628682113866609e-5,6.143643256726638e-8,0.003077989627912044,-3.628885788142236e-5,6.143667890109774e-8,0.0030781120193623807,-3.6363006241524466e-5,6.154837667649236e-8,0.0030782405956229293,-3.652349964920907e-5,6.179278977302228e-8,0.0030784153961581056,-3.6768720995789186e-5,6.216668724687254e-8,0.003078676287039924,-3.707542807113103e-5,6.263368664319519e-8,0.0030790504999446576,-3.739763323181358e-5,6.312273725650803e-8,0.0030795385416962856,-3.767491089624212e-5,6.354097060212617e-8,0.0030801063485889927,-3.7851372011602716E-05,6.380282181650783e-8,0.003080691860843348,-3.789839797156401e-5,6.3864909335135015E-08,0.0030812263089583505,-3.782804205247127e-5,6.374660437345014e-8,0.0030816595018051856,-3.768799022595951e-5,6.352218567186832e-8,0.003081975175275685,-3.754141745986299e-5,6.328960513196501e-8,0.0030821904003572086,-3.7444257862379394e-5,6.313520651894206e-8,0.003082343638281676,-3.743069219176931e-5,6.311124043335557e-8,0.0030824800552818033,-3.7509564541134194e-5,6.323047245576145e-8,0.0030826400072475326,-3.7668452785068254e-5,6.347276711043042e-8,0.003082852413765722,-3.788093848520992e-5,6.379661295313797e-8,0.003083132266538477,-3.811403698482697e-5,6.415076333549884e-8,0.0030834808667202927,-3.833449478651092e-5,6.448396137955909e-8,0.0030838877341181153,-3.8513714836371074e-5,6.475242681002939e-8,0.0030843336004778847,-3.8631288755844996e-5,6.49251538042667e-8,0.003084794042322366,-3.867707285475078e-5,6.49869875714132e-8,0.0030852433321181686,-3.865183435490819e-5,6.49395475346079e-8,0.0030856581339217173,-3.856655888053119e-5,6.48001336398034e-8,0.0030860206460516367,-3.844058492853828e-5,6.459884806542256e-8,0.0030863208771382037,-3.8298947069799535e-5,6.437449277747022e-8,0.0030865580404335806,-3.816935596666206e-5,6.416988298112212e-8,0.0030867412223701774,-3.807898089265322e-5,6.402682842646071e-8,0.0030868893766480983,-3.8050984731237867e-5,6.398072676630348e-8,0.0030870304944824955,-3.810068561233592e-5,6.405462439468387e-8,0.003087199430753806,-3.823122572618231e-5,6.425261522376926e-8,0.0030874333446925814,-3.842914766591009e-5,6.455320872359164e-8,0.0030877636895722525,-3.866159342862816e-5,6.490525234810125e-8,0.0030882049718960573,-3.887836166676586e-5,6.523127311346362e-8,0.003088743561312213,-3.9022341755227606e-5,6.544356507347711e-8,0.003089333590640843,-3.904860755320145e-5,6.547348840413299e-8,0.0030899071036917716,-3.894510170953161e-5,6.530322358465656e-8,0.0030903979050176593,-3.8742004346281896e-5,6.498015271661827e-8,0.003090767228006569,-3.8501181533249536e-5,6.460049051721142e-8,0.0030910160608724553,-3.8290854101103754e-5,6.426997931057188e-8,0.0030911786470456865,-3.816087723268984e-5,6.406549047523721e-8,0.003091304636594572,-3.81308943961482e-5,6.401668515462453e-8,0.0030914415331645385,-3.819243835001492e-5,6.410948319588161e-8,0.003091624053373996,-3.831851468248846e-5,6.430123035197483e-8,0.0030918706623143453,-3.8474104361764894e-5,6.453722136219927e-8,0.0030921846709144477,-3.8624255014770126e-5,6.476330985906157e-8,0.0030925572633731823,-3.8739191826344275e-5,6.493373044917373e-8,0.0030929709124494467,-3.879722444333691e-5,6.501542077873879e-8,0.003093402731555433,-3.8786312162609277e-5,6.499027635350036e-8,0.0030938277663450082,-3.870467412242986e-5,6.485599547202599e-8,0.0030942222139669767,-3.856054410640383e-5,6.462566902485165e-8,0.003094566519648795,-3.8371053174280506e-5,6.432606100579885e-8,0.0030948481721392368,-3.816012347433993e-5,6.399436069664364e-8,0.003095063804553022,-3.795541247827492e-5,6.36734419165358e-8,0.003095220250846101,-3.778464042825393e-5,6.34061366452044e-8,0.003095334440344874,-3.76716671513097e-5,6.322910755980504e-8,0.00309543208101415,-3.76325912073004e-5,6.316677889485286e-8,0.0030955450293822886,-3.767217508425234e-5,6.32258396731875e-8,0.003095707183071852,-3.778095740397159e-5,6.339090801722296e-8,0.00309594862334514,-3.793365750566644e-5,6.36222778804018e-8,0.003096287931628474,-3.80901905074783e-5,6.385770713701393e-8,0.0030967236941520254,-3.8201303672671125e-5,6.402124536059043e-8,0.003097228280907147,-3.822036947682624e-5,6.404140759803494e-8,0.0030977490184312755,-3.8120022723220564e-5,6.387670810024808e-8,0.0030982210755350135,-3.7907147081520453e-5,6.353864073301886e-8,0.0030985900761617553,-3.762610731223205e-5,6.309655120907573e-8,0.0030988336384995293,-3.734434007536094e-5,6.265523738702239e-8,0.003098968816215725,-3.7126254709522466e-5,6.231441792645098e-8,0.003099041425769494,-3.7010331236075636e-5,6.213318613669418e-8,0.0030991055833493103,-3.7000963291756114e-5,6.211747094970239e-8,0.0030992057850765756,-3.707503307238412e-5,6.223050579274813e-8,0.0030993681475792695,-3.719515769679686e-5,6.241367766141261e-8,0.0030996000182369945,-3.7321886461173106e-5,6.260562024590069e-8,0.0030998940056717068,-3.742152940130405e-5,6.275433238229519e-8,0.003100233021590866,-3.7469791909199243e-5,6.282264287237035e-8,0.0031005946146256498,-3.74527865541713e-5,6.278957087078115e-8,0.0031009543309571943,-3.7366892039579344e-5,6.264995951136436e-8,0.003101288498980592,-3.721816385706405e-5,6.241351573364313e-8,0.0031015767979117176,-3.702139137135275e-5,6.210337620395833e-8,0.0031018047687390517,-3.679862687950359e-5,6.175387343947005e-8,0.0031019661991720264,-3.657686241831285e-5,6.140695022313485e-8,0.0031020649564957345,-3.638462538015085e-5,6.110684934249384e-8,0.0031021156285978737,-3.624768225270253e-5,6.089338495755532e-8,0.003102142484188417,-3.6184428286903e-5,6.079473351831937e-8,0.0031021765631752685,-3.620172937410701e-5,6.082097958568538e-8,0.0031022510076930674,-3.629208197157182e-5,6.095979473559371e-8,0.0031023950750430954,-3.643289906673445e-5,6.117550104443778e-8,0.0031026275545373554,-3.658852828809345e-5,6.141241349154455e-8,0.0031029505897565103,-3.6715498961018746e-5,6.160314515690131e-8,0.0031033454561945222,-3.677128760644678e-5,6.168223979401771e-8,0.0031037725875075316,-3.672594194239396e-5,6.160407633853862e-8,0.0031041783170027994,-3.6573890333345214e-5,6.13609507617016e-8,0.0031045091130757767,-3.634081561194844e-5,6.099349544356457e-8,0.0031047297909969312,-3.607980110758601e-5,6.058452494813771e-8,0.0031048374201034855,-3.585494963702326e-5,6.023352619407363e-8,0.003104862516995215,-3.5718644691785436e-5,6.002135737673514e-8,0.003104856093193385,-3.569405931092349e-5,5.998319444364333e-8,0.0031048700872880267,-3.577137790618058e-5,6.010288490586609e-8,0.003104941604094109,-3.5916960865466545e-5,6.032745899023271e-8,0.00310508658575867,-3.608784938858073e-5,6.058987181278256e-8,0.003105301813939656,-3.6244129061960325e-5,6.082825896614451e-8,0.0031055709169320175,-3.6355939860998774e-5,6.099670423139435e-8,0.003105870647986892,-3.6405690275413666e-5,6.106846533436347e-8,0.0031061756914431407,-3.638750956805874e-5,6.103492926911871e-8,0.0031064618740461935,-3.630572623697611e-5,6.090315332297189e-8,0.0031067083897661323,-3.617327510332381e-5,6.069340518034317e-8,0.0031068996748370463,-3.6010179052804656e-5,6.043687697777326e-8,0.0031070273067826453,-3.5841809895788134e-5,6.017304374810048e-8,0.003107091924907097,-3.569640763286369e-5,5.994580924865879e-8,0.003107104690948129,-3.5601421586642455e-5,5.979775912534584e-8,0.0031070874280543044,-3.557871974140187e-5,5.976263364692894e-8,0.0031070705639987084,-3.563939705212548e-5,5.985721638430891e-8,0.00310708845076731,-3.577953751271076e-5,6.007479140748683e-8,0.0031071724854550274,-3.597857902840596e-5,6.0382741421625e-8,0.003107343449944664,-3.620155104969642e-5,6.072622362437715e-8,0.0031076051132779385,-3.640540195274204e-5,6.10381901744192e-8,0.0031079410880545904,-3.6548419234103456e-5,6.125412657583635e-8,0.0031083163328670636,-3.6600797795219e-5,6.132843658673388e-8,0.003108683776045806,-3.655377779638129e-5,6.12484672972554e-8,0.0031089953478281146,-3.642449473760269e-5,6.104178540723422e-8,0.0031092151923365167,-3.6254006005909544e-5,6.077284786520125e-8,0.003109331132111241,-3.6097367552710236e-5,6.052739707346827e-8,0.00310935954808475,-3.6007610042852635e-5,6.038750927329051e-8,0.0031093404361101393,-3.601917120844064e-5,6.04059490162074e-8,0.0031093239113226005,-3.6137917913298556e-5,6.059089030936383e-8,0.003109354124427072,-3.6341991680345246e-5,6.090751315544337e-8,0.0031094576079410963,-3.6591899919457295e-5,6.12939239128099e-8,0.003109639723574992,-3.684400498898479e-5,6.168222747975021e-8,0.003109888172433052,-3.706155993675539e-5,6.201562972733295e-8,0.003110179865335902,-3.7220522609188814e-5,6.225730522644977e-8,0.0031104876813696455,-3.731061864999249e-5,6.239184703464731e-8,0.00311078539719096,-3.733367074941028e-5,6.242252235980394e-8,0.0031110506840359895,-3.730106234421321e-5,6.236728729470829e-8,0.003111266829818254,-3.723134017143124e-5,6.225510727514509e-8,0.0031114239398752712,-3.7148181411718e-5,6.212287206499815e-8,0.0031115201531575613,-3.7078419428024274e-5,6.201236188919679e-8,0.003111562975299694,-3.7049500972479054e-5,6.196625586571644e-8,0.003111570240611829,-3.7085775629295866e-5,6.20222732746493e-8,0.0031115696907623807,-3.720350361712773e-5,6.220533256957703e-8,0.003111595961660061,-3.740535774526301e-5,6.251900193071125e-8,0.0031116842348012787,-3.7676298720104116e-5,6.293919212979045e-8,0.0031118612256879658,-3.798340020650173e-5,6.341407163920447e-8,0.003112136139777003,-3.828150901245256e-5,6.387306782824209e-8,0.003112495379209596,-3.852427301854293e-5,6.424415997620797e-8,0.003112903926884855,-3.867726198381603e-5,6.447432367142958e-8,0.0031133136874417224,-3.872848224078679e-5,6.454579824951314e-8,0.0031136761793375063,-3.8692456923064395E-05,6.448222652228261e-8,0.0031139554371912236,-3.860656882561176e-5,6.434267804320025e-8,0.0031141372703484766,-3.8521032659985596e-5,6.420576709598722e-8,0.0031142324513703736,-3.848555621137015e-5,6.414873497201981e-8,0.003114273122112332,-3.85363882869955e-5,6.422732768153216e-8,0.0031143034616922818,-3.868736365238427e-5,6.446208120483557e-8,0.0031143674207793413,-3.892758353008189e-5,6.483503018920008e-8,0.003114497459059395,-3.9226240381586666e-5,6.529750515880651e-8,0.0031147078121036174,-3.954245370409532e-5,6.578559894383833e-8,0.00311499378960663,-3.983627974908429e-5,6.623730004445356e-8,0.0031153360888836355,-4.007726426013293e-5,6.660567612073376e-8,0.0031157075151952004,-4.024868825724295e-5,6.686529743458914e-8,0.00311607947574405,-4.034776414925683e-5,6.701237492469503e-8,0.0031164267230209515,-4.038331710088937e-5,6.706105409678788e-8,0.0031167301083817336,-4.037260325837689e-5,6.703845169512361e-8,0.003116977890976981,-4.033831580823609e-5,6.698004129434217e-8,0.0031171663505323325,-4.030610095786534e-5,6.692583316158584e-8,0.0031173002857739405,-4.030233658179883e-5,6.691691302618574e-8,0.0031173935830516013,-4.035158745219613e-5,6.699141672014888e-8,0.003117469472534857,-4.047311163717984e-5,6.71790093138832e-8,0.0031175594775110223,-4.067616621474953e-5,6.749354678239481e-8,0.0031176996760878236,-4.095478103045957e-5,6.792501578391407e-8,0.003117923245200117,-4.1284097202451735e-5,6.843400804444655e-8,0.003118249965451604,-4.162156390749211e-5,6.895378532468487e-8,0.0031186762577232225,-4.1915651713568604e-5,6.940399276282996e-8,0.0031191714040973333,-4.212116830683181e-5,6.971456663709166e-8,0.0031196840741649716,-4.2215346438736336e-5,6.985077033810668e-8,0.003120157847027817,-4.220674667049533e-5,6.98269624957057e-8,0.0031205489414833265,-4.2132362620646234e-5,6.97018734876997e-8,0.0031208383916512266,-4.20448327662397e-5,6.955836204462521e-8,0.003121034785095203,-4.199616018547974e-5,6.947774286240719e-8,0.003121168632125931,-4.202421267565137e-5,6.951862361251391e-8,0.0031212820770698153,-4.214528318978495e-5,6.970544612819716e-8,0.0031214177248149594,-4.235306877230772e-5,7.002722768273191e-8,0.0031216092731973467,-4.2622792035729374e-5,7.044435725304227e-8,0.0031218754919343627,-4.2918580516760454e-5,7.090035608149642e-8,0.0031222181803268524,-4.320209457310386e-5,7.133539946884241e-8,0.003122623947005099,-4.344044848734895e-5,7.169857291254788e-8,0.00312306884485219,-4.361179467816571e-5,7.195639886437939e-8,0.003123524289638139,-4.370774340490241e-5,7.209642624241596e-8,0.0031239626656890764,-4.373282262997294e-5,7.21262580887302e-8,0.0031243615440335547,-4.3701909396077086e-5,7.206948965492392e-8,0.0031247061538028763,-4.3636780471882876e-5,7.196033443639855e-8,0.0031249903765416783,-4.356272900897019e-5,7.183837800351165e-8,0.0031252168682957006,-4.3505688790359626e-5,7.174410685588453e-8,0.0031253968441908885,-4.348975073626395e-5,7.17150048965672e-8,0.0031255497310814042,-4.35346390742139e-5,7.178155313739291e-8,0.00312570246406995,-4.3652662272077505e-5,7.196242839516862e-8,0.0031258876523310264,-4.384487979547073e-5,7.225856364534224e-8,0.003126139361453899,-4.409699636109416e-5,7.26468964950289e-8,0.003126485461480311,-4.437689592985936e-5,7.307674195249288e-8,0.003126937079372063,-4.4637120813428204e-5,7.347383911846252e-8,0.003127478854765807,-4.482535361453673e-5,7.375675854161458e-8,0.0031280666690904416,-4.490213927602775e-5,7.386449999496449e-8,0.0031286382404406153,-4.4858518891369295e-5,7.37839353542856e-8,0.0031291344460409416,-4.472272685316552e-5,7.356017852034121e-8,0.0031295207052957296,-4.455029894921475e-5,7.328095575302624e-8,0.0031297969026368396,-4.440289276125083e-5,7.304320913549977e-8,0.0031299925059136854,-4.4327735522592144e-5,7.292069128837017e-8,0.0031301525953489643,-4.4346566926362245e-5,7.294663172919162e-8,0.003130323040755186,-4.44552245163689e-5,7.311334170083266e-8,0.0031305398839340287,-4.463002091424208e-5,7.338260528006618e-8,0.00313082404631057,-4.483652215332876e-5,7.369977824422968e-8,0.0031311803606072124,-4.503787355813529e-5,7.400698484506922e-8,0.0031315994383132096,-4.5201450522542784e-5,7.425347439859536e-8,0.0031320612381614877,-4.530356848674249e-5,7.440279963037097e-8,0.0031325396046175753,-4.533218545978504e-5,7.443682235158883e-8,0.003133007088926917,-4.528754210138793e-5,7.435654510846008e-8,0.003133439334571156,-4.51809403698077e-5,7.41801159799911e-8,0.003133818472273233,-4.503213230381495e-5,7.393873233871031e-8,0.003134135205289634,-4.486591093923118e-5,7.367133504974223e-8,0.0031343895555660316,-4.470855447784281e-5,7.34190699593144e-8,0.003134590575431148,-4.4584622562577654e-5,7.322027017012072e-8,0.0031347554245567386,-4.451420562905288e-5,7.310611312884732e-8,0.0031349080100163845,-4.451044644791041e-5,7.309669605942408e-8,0.0031350771198854635,-4.457710742852157e-5,7.319723119373661e-8,0.0031352936217133444,-4.47060605212665e-5,7.339422020383135e-8,0.0031355858958112227,-4.487510826442938e-5,7.365224958348347e-8,0.003135972822388433,-4.5047645339306655e-5,7.391369496033267e-8,0.0031364549294214225,-4.517674188187485e-5,7.410524949995039e-8,0.003137006880828943,-4.521608014150156e-5,7.415499865583744e-8,0.0031375773084138556,-4.513707215275879e-5,7.401903658596108e-8,0.003138101428611319,-4.494515854131807e-5,7.370680978793502e-8,0.0031385245037932065,-4.468383466731007e-5,7.328731665396651e-8,0.0031388241332245405,-4.441996388809048e-5,7.286597138629206e-8,0.003139017499846824,-4.421722026618582e-5,7.254276438257211e-8,0.003139150157383647,-4.411342074013215e-5,7.237653893372397e-8,0.0031392756212672386,-4.411288523762928e-5,7.237306272266767e-8,0.003139437968769991,-4.4192948719133804e-5,7.249557334607343e-8,0.0031396632755686426,-4.431658177299298e-5,7.268500837724008e-8,0.0031399588406845693,-4.444412071309936e-5,7.287870894461722e-8,0.0031403166737552367,-4.454122642373622e-5,7.302295817715162e-8,0.0031407183126958165,-4.4583109623867075e-5,7.307944575839242e-8,0.0031411394477191415,-4.4556196731207386e-5,7.302762227868937e-8,0.0031415539994911366,-4.445830099035177e-5,7.28647417048713e-8,0.003141937728993228,-4.429775179132686e-5,7.260437295376374e-8,0.0031422713373744243,-4.4091609934731785e-5,7.227358181570472e-8,0.0031425429027575314,-4.386309308749254e-5,7.190893225978437e-8,0.0031427494576673834,-4.363836426557965e-5,7.155149576181157e-8,0.0031428974772572276,-4.3442976873453624e-5,7.124128957024562e-8,0.003143002214192302,-4.329843267004607e-5,7.101185038058907e-8,0.003143086052266109,-4.321920239699395e-5,7.088551186228275e-8,0.0031431760678829164,-4.3210361139567735e-5,7.086966698763124e-8,0.0031433008971223707,-4.3265945431617366e-5,7.09542336198036e-8,0.003143486895319873,-4.336813785078726e-5,7.111052058211447e-8,0.0031437533847702066,-4.348759147027911e-5,7.12919612296051e-8,0.0031441069213620117,-4.358585463469756e-5,7.143813366953108e-8,0.003144535476545944,-4.362139298757207e-5,7.148429942205696e-8,0.003145005091611609,-4.3560203673701036e-5,7.137795505629189e-8,0.003145463126681861,-4.3389675112285365e-5,7.11003324650128e-8,0.003145851574927433,-4.3129979926205826e-5,7.068402441148508e-8,0.0031461283507413433,-4.2833959953962696e-5,7.021264040871186e-8,0.003146286100171612,-4.257032356693477e-5,6.979432110562806e-8,0.0031463558591178996,-4.239669820392884e-5,6.951932082306872e-8,0.003146392327049763,-4.233819904869464e-5,6.942631862677053e-8,0.0031464507043553205,-4.2383168839997224e-5,6.94958958380317e-8,0.0031465688651928546,-4.249459392815535e-5,6.966883115670779e-8,0.0031467612849682977,-4.262689345829094e-5,6.987285185595196e-8,0.0031470222789782287,-4.273918499304871e-5,7.004366315740973e-8,0.0031473330289561153,-4.2802158807808166e-5,7.013567759431403e-8,0.003147668417268007,-4.279983806022786e-5,7.01245308551207e-8,0.0031480021049310764,-4.272860133319068e-5,7.00052672228628e-8,0.0031483099313495784,-4.259528124034335e-5,6.978916831189976e-8,0.0031485723125253334,-4.241509647530167e-5,6.950045735299453e-8,0.0031487761173877083,-4.2209454417396814e-5,6.917289890407978e-8,0.0031489161538580373,-4.2003459881328945e-5,6.884596295593158e-8,0.003148996162170557,-4.1822953882087386e-5,6.856021556609623e-8,0.003149028978654053,-4.169106752864223e-5,6.835188836388549e-8,0.003149035482429731,-4.162464544196019e-5,6.824720046102467e-8,0.003149042199251593,-4.163112014627014e-5,6.825739085675065e-8,0.00314907771956232,-4.170639233813112e-5,6.837538674971382e-8,0.0031491682653819867,-4.18342132313785e-5,6.857492364962827e-8,0.0031493329122884942,-4.198742613049102e-5,6.881267918772647e-8,0.003149579039836493,-4.213120402571019e-5,6.903358555963276e-8,0.0031498986271138838,-4.2228420130555436e-5,6.91794432100356e-8,0.0031502664228729867,-4.2247298350746497e-5,6.920097199180307e-8,0.003150641701734798,-4.217078712182122e-5,6.907238815589541e-8,0.0031509754961388586,-4.200545381164349e-5,6.880509810771359e-8,0.0031512238608324395,-4.1785638196682574e-5,6.845392811745735e-8,0.0031513640821730364,-4.1567794289340616e-5,6.810802378555436e-8,0.003151406157010707,-4.141327484247085e-5,6.786370323995615e-8,0.0031513912510576945,-4.136560918026271e-5,6.778876311671728e-8,0.003151375804577231,-4.1434395174820625e-5,6.789730029476199e-8,0.0031514098642566202,-4.159482257943738e-5,6.81492342574456e-8,0.0031515215625475173,-4.18012216288661e-5,6.847194098192803e-8,0.0031517136174996478,-4.200494130433833e-5,6.878861599395965e-8,0.0031519692707481077,-4.216756787951769e-5,6.903911030241721e-8,0.003152261517243071,-4.2266490087485424e-5,6.918851693440988e-8,0.0031525610670786637,-4.229461685062819e-5,6.922644943555905e-8,0.0031528414655990046,-4.22573706176436e-5,6.9162068457332e-8,0.003153081775375267,-4.216923255662013e-5,6.901853417953314e-8,0.0031532678798198805,-4.205077312180638e-5,6.882835975902144e-8,0.0031533932546355388,-4.192616457967239e-5,6.862959482793142e-8,0.0031534595708972847,-4.1820803001536924e-5,6.84621653927876e-8,0.0031534770784778826,-4.175861379115542e-5,6.836364650161207e-8,0.0031534643622982412,-4.17588032667655e-5,6.836409543908077e-8,0.0031534468701465957,-4.183228856251606e-5,6.848035579602831e-8,0.003153453782052926,-4.197854007215975e-5,6.871105220452271e-8,0.003153513263736754,-4.218384148552481e-5,6.903390427614672e-8,0.0031536467429532566,-4.242196322172231e-5,6.940693592124387e-8,0.003153863430347162,-4.265783483101526e-5,6.977446531891138e-8,0.003154156585993926,-4.285397543340932e-5,7.007742427316526e-8,0.00315450279718283,-4.2978622186424466e-5,7.026625449926472e-8,0.0031548650041122103,-4.301400854080456e-5,7.031388230440871e-8,0.00315519943918034,-4.296289169347691e-5,7.022577473855363e-8,0.003155465859320983,-4.285109888117147e-5,7.00436294628589e-8,0.0031556391659936065,-4.272394847220358e-5,6.983943122484468e-8,0.0031557188612724523,-4.263555517927237e-5,6.969842457165365e-8,0.0031557317728420436,-4.263280101975123e-5,6.969387032889604e-8,0.0031557249027450757,-4.2739520543408744e-5,6.98623192302485e-8,0.0031557498994496218,-4.294833096833603e-5,7.019104128047928e-8,0.00315584589866597,-4.322452786249621e-5,7.062447804376743e-8,0.0031560287243041687,-4.3519737897634517e-5,7.108598411323216e-8,0.003156290210848438,-4.378791545601902e-5,7.150311106554863e-8,0.0031566054069980037,-4.3996660675542415e-5,7.182534984786604e-8,0.0031569423808284628,-4.4131253208340974e-5,7.203026754938302e-8,0.003157270337523358,-4.4192994871844845e-5,7.212064457656072e-8,0.003157564470837877,-4.419496903596624e-5,7.211761487890475e-8,0.003157808015852627,-4.415761251223253e-5,7.205364259861087e-8,0.0031579926823708912,-4.4105138784809375e-5,7.196695049477917e-8,0.0031581184957774153,-4.406285452731199e-5,7.189738913692536e-8,0.003158193599416625,-4.4054911516432865e-5,7.188294750699247e-8,0.003158234031798483,-4.4101897275740684e-5,7.195593087373301e-8,0.003158263018098467,-4.421788006294162e-5,7.213822712040806e-8,0.003158309054218505,-4.440704337455989e-5,7.243594276621938e-8,0.0031584021289597524,-4.466069514352587e-5,7.283470938809992e-8,0.0031585679463628875,-4.495603322513259e-5,7.329786169090022e-8,0.003158821045759386,-4.5258255933040026e-5,7.37699600181512e-8,0.003159158924190263,-4.5526890236963015e-5,7.418696615489833e-8,0.0031595597943583466,-4.572549126524957e-5,7.44916678688917e-8,0.003159985788919604,-4.5832004494916494e-5,7.465002833083531e-8,0.003160391467505701,-4.5846244908167024e-5,7.466284408960723e-8,0.003160735390904223,-4.5791651761595475e-5,7.456824370500927e-8,0.003160991329864051,-4.5710340506587154e-5,7.443354724124745e-8,0.0031611557652805296,-4.56525958579643e-5,7.433840211999739e-8,0.0031612493653574466,-4.566356507695597e-5,7.43536688058528e-8,0.0031613116320375638,-4.577082683019708e-5,7.452191859422641e-8,0.00316138983687732,-4.5976704493927694e-5,7.484561016922063e-8,0.0031615255351170207,-4.625816721714404e-5,7.52873081576349e-8,0.00316174330606514,-4.6574539940815696e-5,7.578215147025375e-8,0.0031620456464795553,-4.687999059605023e-5,7.625769376845123e-8,0.003162415165519021,-4.713588347181678e-5,7.665335200741533e-8,0.003162822036835446,-4.731880660958561e-5,7.693289460631574e-8,0.0031632329785881486,-4.7422738256966696e-5,7.708762391075058e-8,0.0031636185498555743,-4.7456548574135615e-5,7.713222429686289e-8,0.003163957394531511,-4.743930170684533e-5,7.709723112409955e-8,0.003164237749092535,-4.7395460395258866e-5,7.702145770310557e-8,0.0031644572629982944,-4.735103026805132e-5,7.694598016390119e-8,0.0031646221440750945,-4.733077694987257e-5,7.690981863864776e-8,0.003164746262745098,-4.735610332844896e-5,7.694660644621445e-8,0.003164850315648308,-4.744295341822404e-5,7.708123668442743e-8,0.003164960615211108,-4.7599282087552986e-5,7.732580598792541e-8,0.00316510674443353,-4.7822150507262595e-5,7.767502077308712e-8,0.0031653173075884386,-4.809522158373371e-5,7.810233831505504e-8,0.003165613500816317,-4.8388234367153477e-5,7.855932068502407e-8,0.003166001527547761,-4.8660505245747866e-5,7.898136490858256e-8,0.0031664667240323473,-4.886967395690606e-5,7.930165483686465e-8,0.0031669732473650035,-4.898427913808119e-5,7.947106008168446e-8,0.0031674717018881997,-4.899555012818512e-5,7.94766938590658e-8,0.0031679131839261526,-4.892263568963575e-5,7.934999749978144e-8,0.0031682643359964833,-4.8808002238974886e-5,7.91591853553536e-8,0.0031685171259444567,-4.8704610129976645e-5,7.898863798646383e-8,0.003168689888016564,-4.866027347872532e-5,7.891391738685978e-8,0.0031688203554882553,-4.870497925930795e-5,7.898168134647224e-8,0.0031689541483683986,-4.884458925824059e-5,7.919995944645049e-8,0.003169132666912061,-4.90615415154104e-5,7.953967154409288e-8,0.0031693835370994743,-4.932123743816433e-5,7.994513150365482e-8,0.0031697155633991425,-4.958174182690445e-5,8.034963065946353e-8,0.0031701188096189092,-4.9803993111668386e-5,8.069160780662406e-8,0.0031705690690595756,-4.995993501816825e-5,8.092735112553882e-8,0.0031710349046023332,-5.003685841512912e-5,8.103761860361142e-8,0.003171484997353245,-5.003758483585365e-5,8.10276899103105e-8,0.0031718939250299756,-4.997743721292307e-5,8.092241368604767e-8,0.0031722454763997874,-4.98796363572316e-5,8.075886678430627e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json new file mode 100644 index 0000000..841a3de --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":21000,"numberOfSamples":1000,"samples":[0.0031725336341924394,-4.9770637985046546e-5,8.057900832626396e-8,0.0031727619720193665,-4.967631255249218e-5,8.042370582661394e-8,0.0031729423213677447,-4.961918610821703e-5,8.032842301827844e-8,0.003173093301004051,-4.9616439750269165e-5,8.032005503717977e-8,0.0031732388512125246,-4.9678142521825614e-5,8.04140915834666e-8,0.003173406461172115,-4.980531114277095e-5,8.061152056197695e-8,0.003173624434517486,-4.998780080363393e-5,8.089554409980637e-8,0.0031739174410596086,-5.02027153676187e-5,8.122921958837977e-8,0.0031743000569504428,-5.0414905317985565e-5,8.155645946622467e-8,0.0031747693572844707,-5.058170552271261e-5,8.1809696462639e-8,0.003175299754099858,-5.066328166614758e-5,8.192630588543693e-8,0.003175844728509721,-5.06368615606572e-5,8.187106223913913e-8,0.003176348378152092,-5.0508762136083794e-5,8.16550486069026e-8,0.0031767639923363524,-5.0316402748498936e-5,8.133866443459827e-8,0.0031770709661550177,-5.011689791600365e-5,8.101329428919594e-8,0.0031772811274633317,-4.9967147620633346e-5,8.076944687326912e-8,0.003177432030673561,-4.9905479367471625e-5,8.066745206192551e-8,0.003177572270523811,-4.994259580574966e-5,8.072317955227706e-8,0.003177746439699948,-5.0063033684474547e-5,8.091070950808379e-8,0.0031779848344744835,-5.0233470557248106e-5,8.117598151931799e-8,0.0031782992076989803,-5.0413262606724425e-5,8.145387798184555e-8,0.003178683508504494,-5.056397454491497e-5,8.168346678500409e-8,0.0031791178624765563,-5.0656360805938936e-5,8.181895509495128e-8,0.003179574229733301,-5.067436252240991e-5,8.183576329438713e-8,0.003180022490647086,-5.0616168724939576e-5,8.173192449420742e-8,0.0031804358927458322,-5.049270511433461e-5,8.152548156884965e-8,0.0031807950553075313,-5.0324297904340744e-5,8.124910490024964e-8,0.0031810901697997096,-5.013646650496189e-5,8.094342997127281e-8,0.003181321456190578,-4.995570801310683e-5,8.065043893174666e-8,0.0031814982527144423,-4.9805917795511555e-5,8.040785329190629e-8,0.0031816373210504898,-4.970574993088201e-5,8.024497887522197e-8,0.0031817608717426495,-4.9666782981278536e-5,8.017978161620004e-8,0.0031818944706078238,-4.969213348437762e-5,8.021665586604609e-8,0.003182064656150664,-4.977526990474911e-5,8.034455083019423e-8,0.0031822958582123618,-4.9899054210053294e-5,8.053555151866265e-8,0.0031826060765792474,-5.00355420814562e-5,8.074475516704612e-8,0.0031830011463665404,-5.014786026254351e-5,8.091345990457809e-8,0.0031834686693217383,-5.0195995982255704e-5,8.097846711663703e-8,0.0031839746468371897,-5.01475748419181e-5,8.088913626890179e-8,0.0031844673261262986,-4.999173257679851e-5,8.062922765445895e-8,0.003184891172592454,-4.974957666882377e-5,8.023331134917238e-8,0.0031852075073160895,-4.9472597723993216e-5,7.978406694492346e-8,0.0031854111053174357,-4.922574084934537e-5,7.938518959159813e-8,0.0031855320833315435,-4.9062718900561163e-5,7.912193983519057e-8,0.003185621952271365,-4.9007423813544054e-5,7.903149987919705e-8,0.003185733140730741,-4.905026352546958e-5,7.909733195325303e-8,0.003185903073154297,-4.915750209942922e-5,7.926446313102022e-8,0.0031861477150601954,-4.9285511618747645e-5,7.946261622724468e-8,0.0031864630412842053,-4.9393086955828754e-5,7.962606325736776e-8,0.0031868305582437354,-4.944910682330027e-5,7.970578335261417e-8,0.0031872237417380285,-4.9435815064372105e-5,7.967442526435043e-8,0.003187613799646374,-4.934910556784959e-5,7.952642648280632e-8,0.0031879743406409483,-4.919701658863508e-5,7.927535204629794e-8,0.0031882849181979036,-4.899707191619981e-5,7.894954072044581e-8,0.0031885333705692622,-4.8772886247731465e-5,7.85867133852273e-8,0.0031887169235430774,-4.8550472591157195e-5,7.82281831475899e-8,0.0031888421191353347,-4.8354611885566905e-5,7.791317453714298e-8,0.0031889236591736768,-4.820561826479776e-5,7.767373204135999e-8,0.003188982392912168,-4.811685191685343e-5,7.753076281390647e-8,0.0031890428229633568,-4.80931088914721e-5,7.749144001256398e-8,0.003189130371339149,-4.8129751866914776e-5,7.754779717892457e-8,0.0031892684093893045,-4.821248076042052e-5,7.767640704932689e-8,0.003189474936144377,-4.8317827589117846e-5,7.78393091488724e-8,0.003189758740824415,-4.841472688601514e-5,7.798671830001753e-8,0.0031901151496382964,-4.846801130205281e-5,7.806277470675716e-8,0.0031905224205677797,-4.844497532884705e-5,7.801604196463123e-8,0.003190941284990858,-4.8325353983456495e-5,7.781525298490396e-8,0.0031913210506145494,-4.811258839800113e-5,7.746697340533311e-8,0.0031916141519961177,-4.784055752540146e-5,7.702604990677442e-8,0.003191795418319783,-4.7568255887754585e-5,7.658695371946121e-8,0.0031918755740832448,-4.73600221174305e-5,7.625217949764229e-8,0.003191898603829455,-4.725988960279658e-5,7.609132297246147e-8,0.0031919229650166662,-4.7275184045738147e-5,7.611500607230232e-8,0.003191998333085281,-4.737827479416436e-5,7.62779363395227e-8,0.0031921508881996145,-4.752216804202383e-5,7.65041794434679e-8,0.003192381393929433,-4.765854984268982e-5,7.671628736820805e-8,0.0031926718219546014,-4.7750056416319196e-5,7.685497758163076e-8,0.003192994371773742,-4.7775167613736925e-5,7.688676322707986e-8,0.0031933191121518447,-4.7727892633397725e-5,7.680310882032987e-8,0.0031936191057208192,-4.761498877639121e-5,7.661565929511285e-8,0.0031938734231599622,-4.74525826505499e-5,7.635065824624502e-8,0.0031940688710230926,-4.7262880918771545e-5,7.60436847923047e-8,0.0031942008964133926,-4.707097737875328e-5,7.573466367930087e-8,0.0031942737606263116,-4.6901719035824056e-5,7.546299629687368e-8,0.003194299972841271,-4.6776661718682426e-5,7.526278957837741e-8,0.003194298887206334,-4.6711226468842323e-5,7.51583342891208e-8,0.003194294386829285,-4.671240074914931e-5,7.516039741374076e-8,0.0031943118407074603,-4.6777394668392805e-5,7.526403312546946e-8,0.0031943746893159835,-4.6893437644436546e-5,7.544826377873212e-8,0.0031945009495270385,-4.7038759907479775e-5,7.567773903852656e-8,0.0031946998830175675,-4.7184820903478814e-5,7.590646855791671e-8,0.0031949691011137634,-4.729986237129749e-5,7.608369607755573e-8,0.0031952925157211496,-4.735397448743149e-5,7.616211706606225e-8,0.003195640046002511,-4.7325873413935426e-5,7.610866131565764e-8,0.0031959707011487326,-4.721084275969199e-5,7.591694218179518e-8,0.0031962407678702612,-4.7027544120006907e-5,7.561778712416466e-8,0.0031964172220154555,-4.68193172139658e-5,7.528100427078354e-8,0.003196492459990767,-4.664522204584982e-5,7.500092425591764e-8,0.003196492024360513,-4.6560407478603466e-5,7.486507180241458e-8,0.0031964677331033607,-4.6593856889802264e-5,7.491877034751068e-8,0.003196477403032644,-4.673659702635629e-5,7.514654134177191e-8,0.0031965625176653793,-4.694773588519694e-5,7.548204705047288e-8,0.0031967362693748544,-4.717322873987367e-5,7.583837429474331e-8,0.003196985533609338,-4.73651776342118e-5,7.613905990916508e-8,0.0031972812138878572,-4.74929888958597e-5,7.633588427653374e-8,0.003197589462630078,-4.7545490933105095e-5,7.64119965822908e-8,0.0031978796496195555,-4.752757942989125e-5,7.637620017022061e-8,0.00319812848863574,-4.745512493931714e-5,7.625453549820702e-8,0.00319832144886984,-4.73503257355979e-5,7.608275219379998e-8,0.003198452856742482,-4.723812082730018e-5,7.590064580016247e-8,0.0031985255501511783,-4.7143356527051194e-5,7.57476813144896e-8,0.0031985502819583764,-4.708825806567633e-5,7.565908112945316e-8,0.003198544736531598,-4.708995351933302e-5,7.566191375034777e-8,0.0031985318797554075,-4.7158036203798245e-5,7.577116598009077e-8,0.0031985373474858482,-4.729251335254058e-5,7.598640463765804e-8,0.003198585869566576,-4.7482775567525455e-5,7.629010685976644e-8,0.003198697155597323,-4.77081476564717e-5,7.664860219081877e-8,0.0031988819238857836,-4.794029858008897e-5,7.701607636820799e-8,0.003199138852327985,-4.8147471043280815e-5,7.734153154992998e-8,0.003199453210956632,-4.830010600773658e-5,7.757794512375888e-8,0.003199797758983186,-4.8377126251611665e-5,7.769236057072432e-8,0.0032001363178023106,-4.8371976704389703e-5,7.767540881795748e-8,0.0032004303140051693,-4.829716076321788e-5,7.754825940028813e-8,0.0032006480922657813,-4.818534649742223e-5,7.736402060215561e-8,0.0032007754503471137,-4.8084736666072045e-5,7.720004750070717e-8,0.0032008237523528764,-4.804734673697885e-5,7.713910918442968e-8,0.0032008304786310298,-4.811209016681051e-5,7.724247975155619e-8,0.0032008488052868407,-4.828932206014769e-5,7.75255161602495e-8,0.0032009288771208118,-4.8555592301733185e-5,7.794960329169746e-8,0.0032010998408043487,-4.886272668875077e-5,7.843695977208304e-8,0.003201361960637265,-4.915635461273817e-5,7.89004476629134e-8,0.0032016912406135044,-4.939361188750261e-5,7.927192014721211e-8,0.0032020513707647475,-4.955240233850549e-5,7.951689650027676e-8,0.003202405716929175,-4.963141986809062e-5,7.963431614369855e-8,0.003202725094131901,-4.964474472975755e-5,7.96475824883057e-8,0.0032029909049170156,-4.961523348656123e-5,7.959378125967193e-8,0.0032031952157390927,-4.9569099471490336e-5,7.951497736532009e-8,0.003203339535741044,-4.9532218017991734e-5,7.945241230521701e-8,0.003203433394698867,-4.9527674213515084e-5,7.944273135170713e-8,0.003203493051170196,-4.9573859322178696e-5,7.951503476725994e-8,0.0032035401504446515,-4.968261143955701e-5,7.968790885396807e-8,0.003203599881864006,-4.9857248372708116e-5,7.996622623173358e-8,0.0032036981474841027,-5.009083623491609e-5,8.033833401588e-8,0.003203857560932273,-5.036549668524096e-5,8.077497791863144e-8,0.003204092697562571,-5.0653692877754714e-5,8.123148677107812e-8,0.003204405679190628,-5.092213317310819e-5,8.165420910353239e-8,0.0032047836194003913,-5.1138171334250516e-5,8.199093925766638e-8,0.0032051993388942314,-5.1277508026645685e-5,8.220333981594443e-8,0.0032056159214573134,-5.1331152612609345e-5,8.227803147217174e-8,0.003205994476325643,-5.130950962968257e-5,8.223291039616594e-8,0.0032063034747539243,-5.124205747668012e-5,8.211628608958799e-8,0.0032065274675029567,-5.117202959915313e-5,8.199800522314307e-8,0.0032066727907678195,-5.114661833837934e-5,8.195353656090792e-8,0.003206768020942503,-5.120449980278048e-5,8.204400434520673e-8,0.003206857735831905,-5.1363916576045276e-5,8.229736031489842e-8,0.0032069901253816147,-5.161569359479557e-5,8.269759795845019e-8,0.0032072020803685336,-5.192501441612641e-5,8.318797642795423e-8,0.0032075077397297554,-5.2242393867866604e-5,8.368882847285539e-8,0.0032078955532431,-5.251946367429561e-5,8.412289258504691e-8,0.0032083345384939406,-5.272262269658563e-5,8.443706503733802e-8,0.0032087857334492185,-5.2839458337762004e-5,8.461246000974382e-8,0.0032092132683576424,-5.287735806351859e-5,8.466190722367029e-8,0.003209591378752329,-5.285732676741347e-5,8.461980304623928e-8,0.0032099067777057117,-5.28068081968459e-5,8.45304822826286e-8,0.0032101578456377655,-5.275393921740916e-5,8.443903221733049e-8,0.0032103524731652163,-5.272386017376191e-5,8.438550073902889e-8,0.003210505786562472,-5.273660287213019e-5,8.440164096217491e-8,0.0032106382225371155,-5.280577247081059e-5,8.450886182259405e-8,0.0032107738321281018,-5.293736316606222e-5,8.471631689347386e-8,0.0032109383060951215,-5.312841217033488e-5,8.501870672494748e-8,0.0032111560978738906,-5.3365752533195204e-5,8.53942849508674e-8,0.0032114462795934918,-5.362571089155793e-5,8.580446840164302e-8,0.003211817437324192,-5.3875979778961625e-5,8.619700739786424e-8,0.003212262941595191,-5.408075100149098e-5,8.651439387397291e-8,0.0032127589082548043,-5.42090965214644e-5,8.670741201761251e-8,0.003213267160170133,-5.4244595572723914e-5,8.675057308886833e-8,0.0032137438024166646,-5.419248668805494e-5,8.665344939450431e-8,0.003214151231767454,-5.4080711291759844e-5,8.646208359285265e-8,0.0032144693035585834,-5.395352361443707e-5,8.624839037585663e-8,0.003214701461565474,-5.385958237500533e-5,8.609072790016972e-8,0.003214873783886847,-5.383864063516811e-5,8.605238679805011e-8,0.0032150276171485034,-5.391105610832501e-5,8.616487457733809e-8,0.003215208326315366,-5.4072889410851724e-5,8.642041535988369e-8,0.0032154533705997484,-5.429755486548332e-5,8.677506471248515e-8,0.0032157828754069747,-5.4543390211428154e-5,8.716123185097693e-8,0.0032161952720170784,-5.47649828140714e-5,8.750601063943785e-8,0.0032166691643119804,-5.492483570390711e-5,8.7749822276115e-8,0.003217170484883344,-5.500177601999277e-5,8.785966932376333e-8,0.0032176621369899984,-5.499386164298536e-5,8.783350388091249e-8,0.0032181127441866936,-5.491583634520034e-5,8.76958803060696e-8,0.003218502126948113,-5.479314994168618e-5,8.748819344576886e-8,0.0032188229483265337,-5.465521433334049e-5,8.72578166749344e-8,0.0032190794757014783,-5.452988429357098e-5,8.704931644272088e-8,0.0032192849457666393,-5.443991014971355e-5,8.689888287838887e-8,0.003219458734952503,-5.440110974291796e-5,8.683149639470852e-8,0.003219623918717538,-5.442154904813298e-5,8.685964506488469e-8,0.0032198052118412182,-5.45010330062948e-5,8.698248405259667e-8,0.0032200268668433098,-5.463053766414709e-5,8.718490554543236e-8,0.0032203099278025797,-5.479171920972871e-5,8.743680309860852e-8,0.0032206683696555803,-5.4957218224956276e-5,8.769370344416006e-8,0.003221104252445989,-5.509302127948437e-5,8.790074530833945e-8,0.0032216031987040658,-5.516423932315975e-5,8.800209652952139e-8,0.003222132914621037,-5.514457142603367e-5,8.795617458979574e-8,0.003222647901010924,-5.502711200558859e-5,8.775290593353369e-8,0.0032231013851103294,-5.483131338436564e-5,8.74247239172623e-8,0.003223460966712298,-5.4600702849415643e-5,8.704264763661174e-8,0.003223720696988658,-5.43901749473945e-5,8.66955543476372e-8,0.0032239032022557705,-5.4248004296358326e-5,8.646099319840247e-8,0.003224051050262102,-5.4200944786757004e-5,8.638114273675721e-8,0.003224212268778945,-5.424827912428962e-5,8.645345453958669e-8,0.0032244265358801734,-5.4365234327404105e-5,8.663660081008881e-8,0.003224716276502034,-5.451231450454134e-5,8.686597920410975e-8,0.003225083737911467,-5.4646403659949004e-5,8.707189019189658e-8,0.0032255131188312245,-5.473059972318432e-5,8.719538813836393e-8,0.0032259761006378034,-5.4741087113638165e-5,8.719911679190398e-8,0.0032264390598020325,-5.467034723233956e-5,8.707212789604444e-8,0.003226870334335864,-5.452668660564738e-5,8.682879510984012e-8,0.0032272460710804887,-5.4330699940323715e-5,8.65029138253738e-8,0.0032275536298945894,-5.4109915442819836e-5,8.613902532997006e-8,0.003227792304669776,-5.389313593906661e-5,8.5783374691673e-8,0.0032279718677233277,-5.370570458175747e-5,8.547642058179856e-8,0.003228109845550558,-5.356634066004432e-5,8.524786544988952e-8,0.003228228456413095,-5.348557339633553e-5,8.511420042723426e-8,0.0032283518197443535,-5.346531342893715e-5,8.507801310989298e-8,0.0032285035568127823,-5.349896832429377e-5,8.512814037196994e-8,0.003228704536722173,-5.357174984312455e-5,8.524016481482288e-8,0.0032289703539402797,-5.366119984972382e-5,8.537735462686527e-8,0.00322930813206437,-5.373842092470895e-5,8.549282323459017e-8,0.003229712689921856,-5.377103839587337e-5,8.553448506801853e-8,0.0032301631836865975,-5.3729107718665944e-5,8.545465152637074e-8,0.0032306227277087924,-5.359428799950994e-5,8.522472059019744e-8,0.0032310441986026,-5.337012969281068e-5,8.48515280839209e-8,0.0032313836582013745,-5.30879790841398e-5,8.438660592029636e-8,0.0032316176061930268,-5.280197806460897e-5,8.391790250084734e-8,0.0032317548261706127,-5.2571609399665335e-5,8.354146004605948e-8,0.0032318343808087915,-5.243934120871027e-5,8.332524114371036e-8,0.00323190997001867,-5.24157284474321e-5,8.328513968311465e-8,0.003232029903870015,-5.247922773889295e-5,8.33849749888785e-8,0.0032322230037252673,-5.2587959715898925e-5,8.355594128527012e-8,0.0032324945300250224,-5.269508974157829e-5,8.372185756843382e-8,0.0032328299476484103,-5.2761097382812485e-5,8.381914925073835e-8,0.0032332022647684135,-5.2760565068347416e-5,8.380767128683809e-8,0.0032335796804347913,-5.268412304439345e-5,8.367349551296979e-8,0.003233931955256522,-5.2537170491451925e-5,8.342645104170425e-8,0.00323423510297691,-5.2336755010051395e-5,8.309480474079313e-8,0.003234474406802793,-5.210743061617814e-5,8.271847665355266e-8,0.0032346457437325534,-5.187668488346703e-5,8.234172294838152e-8,0.003234755280902423,-5.167055575138879e-5,8.200621219761825e-8,0.003234817807050895,-5.150997501251897e-5,8.174527616602243e-8,0.00323485410132211,-5.140821394599531e-5,8.157988013641992e-8,0.0032348878601373273,-5.1369622605597356e-5,8.15166024002056e-8,0.003234942697918216,-5.138953284328997e-5,8.154743911983669e-8,0.00323503947037617,-5.1454958354580704e-5,8.16508993774942e-8,0.0032351938886941546,-5.154582187779148e-5,8.179401797604287e-8,0.0032354142832091816,-5.16366609641141e-5,8.193524012891515e-8,0.003235699333554656,-5.1699018157927345e-5,8.202847891428973e-8,0.0032360358332845078,-5.170513116825102e-5,8.202923924758582e-8,0.003236397395298634,-5.163367599192616e-5,8.190391001440081e-8,0.0032367460274376706,-5.147751296830587e-5,8.164208997353886e-8,0.003237038911014802,-5.125146075858404e-5,8.126881868503913e-8,0.0032372413519731985,-5.099546813545693e-5,8.084938120768122e-8,0.0032373424767896393,-5.076735769152771e-5,8.04773994266105e-8,0.003237364737593232,-5.0623575968753e-5,8.024369261604461e-8,0.0032373583817348877,-5.0595930934664296e-5,8.01987556722749e-8,0.0032373814263608053,-5.067835383782129e-5,8.033154293976049e-8,0.0032374767927001143,-5.0831888417986464e-5,8.05778502518239e-8,0.0032376595358681605,-5.100299476696643e-5,8.08503013355666e-8,0.0032379179830066707,-5.1142929781694154e-5,8.106998345596535e-8,0.0032382234578475634,-5.121949714913483e-5,8.118548183125027e-8,0.0032385413765336594,-5.1220034229706235e-5,8.117745244402647e-8,0.0032388396301233986,-5.1148784000511076e-5,8.105395968506553e-8,0.00323909343633175,-5.1022080757357263e-5,8.084232217504016e-8,0.003239287476598087,-5.086344596635564e-5,8.058099601387515e-8,0.003239416418574005,-5.06993062299847e-5,8.031267394281034e-8,0.0032394844711164405,-5.055531403368913e-5,8.007849327535253e-8,0.0032395041778899027,-5.0453203864372276e-5,7.991313554603084e-8,0.003239494528968082,-5.0408228290502986e-5,7.98408045445796e-8,0.0032394784475627734,-5.0427301336513986e-5,7.987225828658261e-8,0.003239479791896909,-5.050810067219918e-5,8.000332058699083e-8,0.0032395202194974377,-5.063931236648878e-5,8.021522493846629e-8,0.003239616293252338,-5.080193546123921e-5,8.047671952390412e-8,0.003239777049036872,-5.097147176821398e-5,8.074769163503124e-8,0.003240002171167665,-5.112088531384368e-5,8.098412232278307e-8,0.0032402808961741075,-5.122423243494423e-5,8.114415044682696e-8,0.0032405918090109447,-5.126100829262938e-5,8.119521335082708e-8,0.003240904131438615,-5.122133435508816e-5,8.112236888320618e-8,0.003241181684719136,-5.111146117220087e-5,8.093692711688671e-8,0.003241390622446391,-5.095766931217798e-5,8.068237971757372e-8,0.0032415106650658305,-5.080520775946731e-5,8.04323546602781e-8,0.003241546514068598,-5.070868740467566e-5,8.027494782684523e-8,0.0032415324844812794,-5.071373081832885e-5,8.028313812372978e-8,0.003241523709398545,-5.083705921425271e-5,8.048281634683229e-8,0.0032415751240446157,-5.1057319994444045e-5,8.083823631077988e-8,0.003241719537245258,-5.132391935969942e-5,8.126660197144499e-8,0.0032419576140943988,-5.157842278878715e-5,8.167296421774885e-8,0.0032422632301883753,-5.177516910115313e-5,8.198373070848606e-8,0.0032425973491017465,-5.189151237656024e-5,8.216316480911329e-8,0.003242921385633165,-5.192728220314501e-5,8.221219939811576e-8,0.003243205429064354,-5.1898436692860174e-5,8.215775773060924e-8,0.0032434313058024543,-5.182970678799692e-5,8.204054311489319e-8,0.0032435923938506023,-5.1748673330064326e-5,8.190536290404036e-8,0.0032436920809447035,-5.1681708633171465e-5,8.179466859600291e-8,0.0032437419250657485,-5.165123951677518e-5,8.17443236041018e-8,0.0032437597611700603,-5.167373948957442e-5,8.178051974505204e-8,0.0032437676397874047,-5.1758154968282606e-5,8.191729901686929e-8,0.003243789408658554,-5.190473825027876e-5,8.215464440259327e-8,0.0032438478099100776,-5.2104555505873134e-5,8.247762756783664e-8,0.0032439612563935362,-5.234009583257239e-5,8.28573715553115e-8,0.0032441407595725984,-5.258721229750601e-5,8.325425050664329e-8,0.0032443875424479525,-5.281834024054875e-5,8.36232428780749e-8,0.0032446918276209393,-5.300675228469284e-5,8.392100559929466e-8,0.0032450332255609038,-5.3131371114476176e-5,8.411381289746435e-8,0.00324538295404514,-5.318148371486626e-5,8.418520437848297e-8,0.003245707983573782,-5.316071079859441e-5,8.414223757206918e-8,0.0032459772192329835,-5.3089364431137183e-5,8.401896535485175e-8,0.0032461694781570896,-5.300370532228837e-5,8.387484551908885e-8,0.003246281847351533,-5.2950284714670026e-5,8.37853066862844e-8,0.0032463352544695014,-5.297443793121066e-5,8.382308719834454e-8,0.0032463728424833803,-5.310479309421307e-5,8.403337508404443e-8,0.003246448216996769,-5.333992759564566e-5,8.441256609303461e-8,0.0032466062921121183,-5.364552457477591e-5,8.49040114435253e-8,0.0032468659901151594,-5.396605828032138e-5,8.541718992475005e-8,0.003247214553528512,-5.424562065011762e-5,8.586156956307863e-8,0.003247615679936334,-5.444642162568678e-5,8.617657458590432e-8,0.003248024912597425,-5.455655514944839e-5,8.634399975468773e-8,0.003248403432332568,-5.458687626580262e-5,8.638262859372707e-8,0.0032487255353343303,-5.4562352771310106e-5,8.633386467620277e-8,0.00324898008935198,-5.451326661190067e-5,8.624724859115626e-8,0.0032491685238771285,-5.4468896133598934e-5,8.617020704301661e-8,0.0032493017385686698,-5.44538837415368e-5,8.614231992982142e-8,0.0032493972235823195,-5.448639212370825e-5,8.619253072529561e-8,0.0032494766715691,-5.4577106999117414e-5,8.633766110669544e-8,0.003249563821635595,-5.4728537878472483e-5,8.658130339795376e-8,0.0032496821379050258,-5.4934496846960336e-5,8.691293350608795e-8,0.0032498520196944476,-5.5180047124981716e-5,8.730779131766455e-8,0.0032500875683692987,-5.544249647615775e-5,8.772852392629017e-8,0.0032503934051933206,-5.569395062737085e-5,8.812944569042736e-8,0.0032507623946056432,-5.5905572624570456e-5,8.846361811302392e-8,0.0032511752416808635,-5.60531534073218e-5,8.869203900002466e-8,0.0032516027189509527,-5.6122949655416366e-5,8.879316740083876e-8,0.003252010653866079,-5.6116271961945236e-5,8.87702629117698e-8,0.0032523669850277413,-5.605136928982403e-5,8.865417136694602e-8,0.0032526495630223616,-5.596163996267052e-5,8.850004846746351e-8,0.003252852996146235,-5.588978132512746e-5,8.837752315420322e-8,0.0032529925562878982,-5.58782471815996e-5,8.83550511189378e-8,0.003253103082055259,-5.595758026448335e-5,8.848108953757554e-8,0.0032532314776745693,-5.613576384150119e-5,8.876716640678854e-8,0.0032534234568621025,-5.6393001850667115e-5,8.917985280515563e-8,0.0032537084871765787,-5.668575826548498e-5,8.964767779069584e-8,0.0032540894242032077,-5.696017640428366e-5,9.008307761306017e-8,0.00325454214619616,-5.716962075359378e-5,9.041084937999461e-8,0.0032550252674333844,-5.728830620990315e-5,9.059011621990187e-8,0.003255494511827089,-5.731556283163272e-5,9.06209904156305e-8,0.003255914883576044,-5.7271048375594106e-5,9.0536487245569e-8,0.003256266746644497,-5.71854418674298e-5,9.03871423788393e-8,0.003256546050101389,-5.709145577327869e-5,9.022629331978918e-8,0.003256761198809244,-5.701770488175832e-5,9.010018411835402e-8,0.0032569290319573213,-5.6985589687069876e-5,9.004308407198988e-8,0.0032570712782715805,-5.700820517414628e-5,9.007569729439265e-8,0.003257211829634789,-5.709019855395602e-5,9.02050273070369e-8,0.003257374555642879,-5.722785472994945e-5,9.042451477474267e-8,0.0032575811280771455,-5.740918789972536e-5,9.07141464433097e-8,0.0032578484112563417,-5.761434937787547e-5,9.104111671626653e-8,0.003258185352705804,-5.781702102123823e-5,9.136217618930464e-8,0.0032585898547709312,-5.7987501554828986e-5,9.162880083070914e-8,0.003259046711760422,-5.8097856157750106e-5,9.179571951463989e-8,0.0032595281106661137,-5.812865707175766e-5,9.183195308320635e-8,0.003259997899742414,-5.807559874358659e-5,9.173151942039728e-8,0.003260419534272522,-5.7953377600878414e-5,9.151954278320197e-8,0.003260765818064894,-5.7794560130481856e-5,9.125009531413922e-8,0.0032610273094332534,-5.7642803315349266e-5,9.099481763997835e-8,0.0032612163205118245,-5.754195090058938e-5,9.082492438170712e-8,0.0032613648222029144,-5.752416949150301e-5,9.07918667306029e-8,0.0032615165714595593,-5.7600716096652344e-5,9.09125486368035e-8,0.003261715522120589,-5.7758163232549566e-5,9.116362370356967e-8,0.003261993680028687,-5.796146329096944e-5,9.148694570509478e-8,0.0032623620293660872,-5.8163394938097374e-5,9.180524978805767e-8,0.003262807665272582,-5.8317766793719975e-5,9.20437012761951e-8,0.0032632983134054426,-5.839199548958222e-5,9.215020451540345e-8,0.0032637924706452283,-5.8374669624859956e-5,9.210741718701442e-8,0.0032642511156409566,-5.827592207902026e-5,9.193302480930112e-8,0.0032646467560847373,-5.8121634092867766e-5,9.167002565308534e-8,0.003264967464613854,-5.794476140729533e-5,9.137245205768258e-8,0.0032652161360441057,-5.777729029325265e-5,9.109227604970783e-8,0.0032654068966987506,-5.764485386744147e-5,9.087078295628466e-8,0.003265560763456718,-5.756421591411039e-5,9.073466938213295e-8,0.0032657018358711034,-5.754278131830879e-5,9.069539608026732e-8,0.0032658544101094944,-5.757911789189286e-5,9.075008999633211e-8,0.0032660408074434333,-5.766372839766714e-5,9.088277448331733e-8,0.003266279396647697,-5.777976701135738e-5,9.106550153542938e-8,0.003266582301739539,-5.790395532285883e-5,9.12598753635655e-8,0.0032669526451217174,-5.80083795326496e-5,9.142009964322477e-8,0.003267381767555401,-5.8063972041273024e-5,9.149881185930952e-8,0.0032678476163183977,-5.804619770493952e-5,9.145646309337639e-8,0.003268316164476314,-5.79424713012002e-5,9.12733988533491e-8,0.0032687475221006164,-5.7759070899220414e-5,9.096097972973574e-8,0.003269106529960257,-5.7523825509117984e-5,9.056570793575683e-8,0.0032693746058921917,-5.7281393394498796e-5,9.01612217244734e-8,0.0032695575700859222,-5.7081169177186004e-5,8.982829299441299e-8,0.003269685200835826,-5.696205583363011e-5,8.962983858648573e-8,0.003269802214385346,-5.69404396125155e-5,8.959138558936853e-8,0.0032699545344188102,-5.700604476264368e-5,8.969464615227079e-8,0.0032701763009091883,-5.7126338282034846e-5,8.988518777066455e-8,0.003270481677542585,-5.725676162404585e-5,9.008956185060092e-8,0.0032708629470038705,-5.735286992395743e-5,9.023531943545998e-8,0.00327129431081459,-5.73809369580062e-5,9.026823726629858e-8,0.003271739599354458,-5.7324683909892404e-5,9.0162995318363e-8,0.0032721614993477402,-5.7187059246788255e-5,8.992569167509696e-8,0.0032725298445275717,-5.698731841848309e-5,8.958873870059514e-8,0.0032728270521627735,-5.675482647236528e-5,8.920055536744774e-8,0.003273049851570274,-5.652171851946322e-5,8.881356947561132e-8,0.0032732076970815966,-5.6316492523811355e-5,8.847388481842329e-8,0.003273319145670565,-5.615979289425225e-5,8.821459453534936e-8,0.0032734076545255755,-5.6062581528121386e-5,8.80529729256984e-8,0.003273497839452653,-5.602614665502433e-5,8.799058220459504e-8,0.003273612612866018,-5.604313201827532e-5,8.801494830994981e-8,0.0032737710867281598,-5.609888691693807e-5,8.81017115844299e-8,0.0032739868282610452,-5.617282175496241e-5,8.821681580619211e-8,0.0032742660365082388,-5.6239927611709573e-5,8.831905491514963e-8,0.003274605453936708,-5.627300819139812e-5,8.836386764965425e-8,0.0032749903608651097,-5.624637481283029e-5,8.830953041101465e-8,0.0032753938061936853,-5.614154823740327e-5,8.812653176627841e-8,0.0032757789936782864,-5.595449360495289e-5,8.78092919463083e-8,0.003276106647287594,-5.5701960526054305e-5,8.738628367074491e-8,0.0032763471421135533,-5.5422576587764e-5,8.692152997987455e-8,0.003276493258995722,-5.516877259292599e-5,8.650115186701256e-8,0.0032765664014518425,-5.499014654352684e-5,8.6206007430559e-8,0.003276610999942624,-5.491529491512299e-5,8.608196484440229e-8,0.00327667876464851,-5.494164014254628e-5,8.612345199946136e-8,0.0032768108494707626,-5.5038149965003114e-5,8.627829358674474e-8,0.0032770262708863127,-5.5157998227194705e-5,8.646888984364038e-8,0.0032773198064892668,-5.525387498988542e-5,8.661760852501955e-8,0.003277667339223204,-5.528988528837087e-5,8.666631731922832e-8,0.0032780346135977243,-5.5247658906088445e-5,8.658614562003795e-8,0.0032783860663120725,-5.512713483912658e-5,8.637835326428021e-8,0.0032786918994025917,-5.494363190933129e-5,8.606912261480339e-8,0.0032789327276445193,-5.472280951801439e-5,8.570104945011115e-8,0.003279101674465376,-5.449476059083265e-5,8.532342409842275e-8,0.0032792040453030104,-5.4288301754132294e-5,8.498301212375031e-8,0.0032792550494914192,-5.4126402494692005e-5,8.471678473867611e-8,0.00327927635003745,-5.402331015253779e-5,8.454741469132955e-8,0.003279292261048445,-5.398344931011103e-5,8.448159405887646e-8,0.0032793262697919023,-5.4001841681931624e-5,8.451073771217038e-8,0.0032793983038223334,-5.406554644950239e-5,8.461328637466328e-8,0.003279522775013503,-5.4155543035676e-5,8.475773055077884e-8,0.0032797071337421773,-5.4248736184423704e-5,8.490590178054932e-8,0.0032799506498463736,-5.432014534373688e-5,8.501666483516674e-8,0.003280243299674806,-5.434560660615751e-5,8.505051210231342e-8,0.003280565004985942,-5.430549748269372e-5,8.497579494488648e-8,0.003280886168989561,-5.4189871664097075e-5,8.47771184438119e-8,0.003281171139090372,-5.4004474659509736e-5,8.446499011144445e-8,0.003281386101154559,-5.377533480404946e-5,8.408301336304262e-8,0.0032815110470657827,-5.354778435894943e-5,8.370597725390225e-8,0.003281551525320081,-5.3376005048922325e-5,8.342256462979238e-8,0.0032815423544261006,-5.3303997698127796e-5,8.330417977081286e-8,0.0032815375199139597,-5.334662167257096e-5,8.337402779899631e-8,0.003281589425999078,-5.3482477388724635e-5,8.359571772677401e-8,0.003281729077837722,-5.366347603158219e-5,8.388931201996357e-8,0.0032819577992785165,-5.383448660629819e-5,8.416390530143764e-8,0.003282252028816867,-5.3951461208844274e-5,8.434755805679241e-8,0.003282575064733863,-5.399087527054447e-5,8.440270284958065e-8,0.0032828888308288045,-5.395041499415586e-5,8.432692167156779e-8,0.0032831620823933123,-5.384442525035143e-5,8.414501783308623e-8,0.003283374577592845,-5.369758720472906e-5,8.389827797025655e-8,0.0032835182149421297,-5.3538900495709054e-5,8.363445972132653e-8,0.003283596317507677,-5.3396677990892325e-5,8.339967143688218e-8,0.0032836217594359217,-5.3294597136367996e-5,8.323212142857587e-8,0.0032836142689651616,-5.3248868881598726e-5,8.31577096068053e-8,0.0032835972456282487,-5.326663219322064e-5,8.318754756177193e-8,0.003283594445314077,-5.33455619881586e-5,8.331735797629278e-8,0.003283626858166137,-5.34746355750414e-5,8.35286872417797e-8,0.0032837101355881193,-5.363590835227975e-5,8.379175121758466e-8,0.0032838527983820075,-5.3806929427041975e-5,8.406937560267436e-8,0.003284055181100754,-5.396343946274494e-5,8.432148778286718e-8,0.0032843089773761463,-5.40822511951771e-5,8.450998775388706e-8,0.003284597358913076,-5.414438100313206e-5,8.460404446842303e-8,0.003284895834787221,-5.413857912979374e-5,8.458595257932233e-8,0.003285174445296768,-5.406532947278778e-5,8.445757818292492e-8,0.0032854023338345904,-5.3940697089698616e-5,8.424636958756322e-8,0.0032855554831677934,-5.379806390910282e-5,8.400782714837921e-8,0.003285626815766494,-5.3684562539693467e-5,8.38193737194727e-8,0.0032856347701112503,-5.3649414340871245e-5,8.376117760633833e-8,0.0032856235616832005,-5.3725485877918647e-5,8.38860837426238e-8,0.003285650142636974,-5.391249164401037e-5,8.419236027689752e-8,0.0032857616382241683,-5.4173556173630084e-5,8.461836300416228e-8,0.003285976011289329,-5.444965808100916e-5,8.50665090145353e-8,0.003286277545198635,-5.468347961861177e-5,8.544264341871019e-8,0.0032866275363075573,-5.483838580460321e-5,8.568728752895917e-8,0.0032869809330381304,-5.490461627338049e-5,8.578565026164803e-8,0.0032872996339806037,-5.489474335285152e-5,8.575977711296552e-8,0.003287559053510933,-5.48347345844862e-5,8.565341922089876e-8,0.0032877491677817746,-5.475543920672599e-5,8.551775502054806e-8,0.0032878725457978937,-5.4686451467669074e-5,8.540127833973602e-8,0.0032879413934742783,-5.465235422268597e-5,8.534381381044643e-8,0.003287974597188788,-5.4670536130827427e-5,8.53731992403231e-8,0.003287994886136215,-5.474993658443841e-5,8.550343585455102e-8,0.003288026004617243,-5.489052942074253e-5,8.573393033814724e-8,0.0032880898877680324,-5.508355309891816e-5,8.604985500404462e-8,0.003288203921857211,-5.5312587539400495e-5,8.642385409484243e-8,0.0032883785505384453,-5.5555608027442216E-05,8.681938148259401e-8,0.0032886156357365445,-5.578790705412445e-5,8.719554080619211e-8,0.0032889078436774757,-5.5985521987479445e-5,8.751283667062376e-8,0.003289239125545009,-5.612881998939157e-5,8.77392146012537e-8,0.003289586318797038,-5.620594849831879e-5,8.78558281449679e-8,0.0032899218910641607,-5.621585137160659e-5,8.786195042061433e-8,0.0032902179191576634,-5.617054021271309e-5,8.77784760736655e-8,0.0032904515278464005,-5.609599525829377e-5,8.764903319639631e-8,0.003290611690989794,-5.603034994237022e-5,8.753663675600585e-8,0.0032907060886177963,-5.601757230920074e-5,8.751312401969255e-8,0.0032907648315062244,-5.60957001758165e-5,8.763993271030684e-8,0.00329083651219213,-5.628175714456582e-5,8.794367269940098e-8,0.003290973902945432,-5.656023599277606e-5,8.839762192953688e-8,0.003291213321631433,-5.6884077700507716e-5,8.892363541663668e-8,0.003291558763057707,-5.7191191598862794e-5,8.941943124269481e-8,0.0032919809643103797,-5.742839856654776e-5,8.979798297636507e-8,0.0032924313677109907,-5.756902600419823e-5,9.001640079964623e-8,0.0032928611324823196,-5.7616237434723784e-5,9.008120657162066e-8,0.003293234884122227,-5.759476981903807e-5,9.003437623650073e-8,0.003293535602904595,-5.753893290328132e-5,8.993321103832823e-8,0.003293762927268325,-5.7482792094576774e-5,8.983397854989548e-8,0.003293928650397064,-5.745439610101603e-5,8.978246898705095e-8,0.003294052074754002,-5.7473344437337244e-5,8.981023130920463e-8,0.003294156313027807,-5.755021904012821e-5,8.993390698836747e-8,0.0032942654733313977,-5.768674160814335e-5,9.01556607176256e-8,0.0032944022662521263,-5.787621616364838e-5,9.046394738638393e-8,0.003294585697181951,-5.810428412374258e-5,9.083470767938509e-8,0.003294828730883638,-5.835025192829971e-5,9.123350329312376e-8,0.0032951361110117538,-5.858935210068161e-5,9.161924961334033e-8,0.003295502862145243,-5.879608733804884e-5,9.194981099819587e-8,0.0032959140922813155,-5.894836427269165e-5,9.218894166181916e-8,0.003296346501630117,-5.903178845858687e-5,9.2313465377073e-8,0.0032967716942378903,-5.904330752969372e-5,9.231927451156279e-8,0.003297161013652729,-5.8993325195830865e-5,9.222465017716898e-8,0.0032974912528637187,-5.8905595820280855e-5,9.206977518622295e-8,0.0032977504065195102,-5.881449638135142e-5,9.191186754025751e-8,0.003297942473857903,-5.875940209359208e-5,9.181563871498607e-8,0.0032980898714052753,-5.877616173854993e-5,9.183921908280787e-8,0.0032982314957932714,-5.88866346272826e-5,9.201718962789459e-8,0.0032984146833885644,-5.908904162486795e-5,9.23451566292984e-8,0.0032986812779857745,-5.935379884542151e-5,9.277334751463147e-8,0.003299051997951586,-5.962945134656554e-5,9.321663709787946e-8,0.003299516827886728,-5.985901363351853e-5,9.358146928311346e-8,0.0033000378122319263,-5.999998453310655e-5,9.379868554416737e-8,0.003300563468977945,-6.003775679601342e-5,9.384541959529023e-8,0.003301046759699778,-5.9986342425414024e-5,9.374604054768167e-8,0.0033014576765286454,-5.987863396959832e-5,9.355579500500295e-8,0.003301786809054379,-5.975339670750789e-5,9.33390980278829e-8,0.0033020419823445663,-5.964508164161518e-5,9.315264867329e-8,0.0033022421362587082,-5.9578548895871055e-5,9.303685979764736e-8,0.003302411561432909,-5.9567748630520254e-5,9.301394192772079e-8,0.0033025757102160976,-5.961647141519134e-5,9.308938092423752e-8,0.003302758454813665,-5.971971311326604e-5,9.32543085753427e-8,0.003302980149123383,-5.986499809573707e-5,9.348767984635991e-8,0.0033032558966772426,-6.003362496588928e-5,9.375826851834662e-8,0.003303593705146403,-6.0202192353766145e-5,9.402715772445558e-8,0.0033039926166897105,-6.034495084095433e-5,9.425167222522078e-8,0.003304441386900897,-6.043737478577002e-5,9.439138689843304e-8,0.003304918618617791,-6.046082993353868e-5,9.441594479608006e-8,0.0033053952081656575,-6.040751190609572e-5,9.431324511412548e-8,0.0033058394190006372,-6.028418972979809e-5,9.409552551950787e-8,0.0033062239072710452,-6.011307792870043e-5,9.380056022170947e-8,0.0033065329819612454,-5.99287475949815e-5,9.348622559924204e-8,0.003306767914704313,-5.977122717532698e-5,9.321879190076651e-8,0.003306948486177933,-5.9676703637333575e-5,9.305741226162379e-8,0.0033071098761496675,-5.966803032891732e-5,9.303855751819586e-8,0.003307295078633383,-5.974750722150152e-5,9.316446634613662e-8,0.003307544114132092,-5.9894223093106617E-05,9.339925812123948e-8,0.0033078824817017226,-6.006764076265878e-5,9.367527554290179e-8,0.003308312428674662,-6.021771715946743e-5,9.390997219756039e-8,0.003308810868846452,-6.02993136284251e-5,9.402960860305769e-8,0.003309335890088662,-6.028585030600706e-5,9.39915224159716e-8,0.003309839846317023,-6.017646168426142e-5,9.379561381316522e-8,0.003310283495942255,-5.999380790271972e-5,9.348042402784567e-8,0.0033106453888089448,-5.977450811021991e-5,9.310709708273535e-8,0.0033109239015205183,-5.955734946844783e-5,9.273979011758474e-8,0.003311133299984977,-5.937407692846487e-5,9.243051520461885e-8,0.0033112972340637236,-5.924481776115903e-5,9.221178385233012e-8,0.0033114426199441147,-5.917750316763905e-5,9.209590179549796e-8,0.0033115952609545363,-5.9169497804775444e-5,9.207784107991695e-8,0.003311777204723194,-5.920987375766593e-5,9.213904652853273e-8,0.0033120052080999,-5.92814938356559e-5,9.225082851606375e-8,0.003312289594904694,-5.936274846059623e-5,9.237717028262174e-8,0.003312633024578902,-5.942929679557276e-5,9.247760893901174e-8,0.003313029137070735,-5.945642637260442e-5,9.251122688928723e-8,0.0033134615879803833,-5.942257807852542e-5,9.244260873645003e-8,0.0033139044987459776,-5.931413137224047e-5,9.22498336783901e-8,0.0033143255654085853,-5.913063940039792e-5,9.193309185903323e-8,0.003314692523404364,-5.888852657791199e-5,9.152061902109267e-8,0.003314982071759978,-5.862063074863608e-5,9.106765658072329e-8,0.0033151883441194956,-5.836990960235362e-5,9.064573525743296e-8,0.003315327061036844,-5.817820907612507e-5,9.032387007253822e-8,0.003315432756404787,-5.807381239007963e-5,9.014792415786519e-8,0.003315549502730872,-5.80625870862475e-5,9.012617527068651e-8,0.0033157184572218204,-5.8126053541180765e-5,9.022654455023874e-8,0.003315966551858763,-5.8226689676969886e-5,9.038585941639497e-8,0.0033162996332138915,-5.831825523870404e-5,9.052728727571216e-8,0.0033167015288640424,-5.835787971070538e-5,9.058041563143791e-8,0.0033171388754599613,-5.8316694902620264e-5,9.049864230177064e-8,0.003317570199537387,-5.818631498100734e-5,9.026951683504713e-8,0.0033179566224040904,-5.7979533462259516e-5,8.99154851350754e-8,0.0033182710352989515,-5.772533753434543e-5,8.94853309482593e-8,0.003318503156852944,-5.746022504077495e-5,8.903967082003617e-8,0.003318659520612165,-5.721893166409305e-5,8.863565691424088e-8,0.0033187593907932924,-5.7027409664830245e-5,8.831554830627552e-8,0.0033188288152567313,-5.6899447070337116e-5,8.810136402150192e-8,0.0033188949683195744,-5.683663868685322e-5,8.799503967854189e-8,0.0033189820031886176,-5.683044444173091e-5,8.79819251290983e-8,0.0033191086079180677,-5.686498657172212e-5,8.80353851458633e-8,0.0033192868090701146,-5.6919687627007744e-5,8.812108202417043e-8,0.0033195213608058194,-5.6971468212093134e-5,8.820056393045532e-8,0.003319809205334997,-5.6996756676009524e-5,8.823463939940167e-8,0.0033201388682853913,-5.6973850769248384e-5,8.818741927408212e-8,0.0033204901645404743,-5.688617916715095e-5,8.803185327819643e-8,0.0033208351653437364,-5.672667481568836e-5,8.775700668157399e-8,0.0033211417606726764,-5.650258196722333e-5,8.737589343481958e-8,0.0033213807589085697,-5.623860290952227e-5,8.693042466255639e-8,0.003321535704580842,-5.5975194089382036e-5,8.64882803546673e-8,0.003321611779853912,-5.575964063734652e-5,8.612788421461543e-8,0.0033216383488875716,-5.563121550563371e-5,8.591372038897917e-8,0.00332166160133251,-5.560648771923718e-5,8.587208299016034e-8,0.003321729332346463,-5.567246407025703e-5,8.597999999454416e-8,0.0033218749696411454,-5.5791288194139026e-5,8.617344710132884e-8,0.003322108078793622,-5.591357362818337e-5,8.636987047930183e-8,0.003322414074917141,-5.599359775464645e-5,8.649361999558831e-8,0.0033227610657908736,-5.600062818328033e-5,8.649468343439781e-8,0.0033231098129842453,-5.592409172339057e-5,8.635693899550423e-8,0.003323423401229845,-5.577304858807897e-5,8.60968278743868e-8,0.0033236746106560327,-5.5571625019046895e-5,8.57553706414179e-8,0.0033238501378285963,-5.535223551652658e-5,8.538670353148495e-8,0.003323951512978097,-5.5148243821503265e-5,8.504591708672522e-8,0.0033239930515267515,-5.4987516475655016e-5,8.477855814651931e-8,0.003323997693098464,-5.4888022929405465e-5,8.461360179444422e-8,0.0033239919654675055,-5.485601986581888e-5,8.456067453943338e-8,0.0033240012834951657,-5.4886614374086276e-5,8.461111130656435e-8,0.00332404640453801,-5.496599005265156e-5,8.474164448132102e-8,0.003324141328817078,-5.507438956499113e-5,8.491926542726227e-8,0.003324292421254159,-5.5189074106772154e-5,8.510604823670503e-8,0.0033244982624229583,-5.528690636714247e-5,8.526342573891019e-8,0.0033247498139609742,-5.534665974060568e-5,8.5356116539381e-8,0.003325030738318475,-5.535139742517621e-5,8.535622814349039e-8,0.003325318078773487,-5.529132808874682e-5,8.524810407518335e-8,0.0033255840434287193,-5.516732559483926e-5,8.503412127897562e-8,0.003325800025884042,-5.4994500283684165e-5,8.474038755337137e-8,0.003325943636647162,-5.4803921202816106e-5,8.441925947919739e-8,0.003326007954119694,-5.463949661780294e-5,8.414386557641033e-8,0.0033260093929748016,-5.454751850488496e-5,8.39906316797749e-8,0.0033259881913321188,-5.4560143825206843e-5,8.401195873056964e-8,0.0033259972865628765,-5.4680122236649234e-5,8.421112518435034e-8,0.003326082679984568,-5.4876669269890736e-5,8.453576539427439e-8,0.0033262656698723574,-5.509660108184346e-5,8.489670021080734e-8,0.0033265367421952,-5.528454025680654e-5,8.520177547374201e-8,0.0033268625692368203,-5.540089651290604e-5,8.53858406600953e-8,0.0033271997836301316,-5.5430263445104554e-5,8.542454745717457e-8,0.00332750801243725,-5.538020410605459e-5,8.533193941439912e-8,0.0033277582273325535,-5.527451512296222e-5,8.514878834424156e-8,0.0033279360985943923,-5.514504454421498e-5,8.492865234127454e-8,0.0033280417206101223,-5.502443713341801e-5,8.47257264967664e-8,0.0033280872119350394,-5.494062573953781e-5,8.458583816329359e-8,0.0033280931856418602,-5.4913121909954754e-5,8.454056432249686e-8,0.003328084687829209,-5.49510529651956e-5,8.460424445406648e-8,0.003328087119786794,-5.505287514330795e-5,8.477367296994299e-8,0.003328122619004344,-5.520754438276987e-5,8.503008040542494e-8,0.0033282072794208633,-5.539681605654844e-5,8.534289014342119e-8,0.0033283494784650124,-5.559823205385741e-5,8.567459021016955e-8,0.0033285493241682613,-5.5788247308437714e-5,8.5985886311372e-8,0.0033287989546007955,-5.594511202878772e-5,8.624053969095568e-8,0.0033290834152926,-5.605145404558202e-5,8.640978601385084e-8,0.0033293820025522038,-5.609665354800625e-5,8.647641681844645e-8,0.00332967012765513,-5.607914249037254e-5,8.64386360154981e-8,0.003329922108265471,-5.600868372770514e-5,8.63137014691309e-8,0.003330115618151409,-5.590807269377462e-5,8.614043768918587e-8,0.0033302381328333365,-5.58126677029861e-5,8.597808953775239e-8,0.0033302943335076583,-5.5765475825965935e-5,8.589791861426393e-8,0.0033303112431023363,-5.580611329656748e-5,8.596488539474054e-8,0.003330335893358347,-5.595512706192685e-5,8.621187561535514e-8,0.0033304217950196257,-5.620076748901601e-5,8.661809726569148e-8,0.0033306077541668403,-5.649824615334275e-5,8.710815973363818e-8,0.003330900673735715,-5.678551821777345e-5,8.757850948338549e-8,0.0033312733708816735,-5.7007580014031255e-5,8.793794593475561e-8,0.003331677827847687,-5.713506396332166e-5,8.81385544183494e-8,0.0033320641462310304,-5.7168762976044525e-5,8.818303689777447e-8,0.003332394888741356,-5.713232454494835e-5,8.81121521924967e-8,0.003332650948899174,-5.706056072566515e-5,8.79848172366316e-8,0.0033328307387244707,-5.69892054818512e-5,8.786079588531413e-8,0.003332946103134148,-5.6948270940260595e-5,8.7789662082767e-8,0.003333017524013881,-5.695869565914077e-5,8.780546633003202e-8,0.003333069785980845,-5.7031151550971855e-5,8.79250644837299e-8,0.003333128293176569,-5.7166122827538784e-5,8.814848616597651e-8,0.003333215942814037,-5.735486447701515e-5,8.846062555209589e-8,0.003333350526081416,-5.758107712399529e-5,8.883400189972032e-8,0.003333542711568079,-5.782323256543382e-5,8.923255045240708e-8,0.0033337948024626724,-5.805748921759443e-5,8.961641831353482e-8,0.0033341004955474854,-5.826092281925177e-5,8.994735848331943e-8,0.0033344456574180216,-5.8414663420069585e-5,9.019404254409442e-8,0.0033348099763535065,-5.850667539814434e-5,9.033680470762473e-8,0.0033351693972139954,-5.8534013007029704e-5,9.037145788055351e-8,0.0033354992652454255,-5.850435337312846e-5,9.031176994724097e-8,0.003335778150817505,-5.8436628216984924e-5,9.019026948162117e-8,0.0033359924676545083,-5.836033415719681e-5,9.005674088553579e-8,0.003336141696475799,-5.831247259530645e-5,8.99728131408324e-8,0.003336242937122228,-5.833081796090152e-5,9.000064726389226e-8,0.003336332072852576,-5.844314497737879e-5,9.018519988192054e-8,0.003336457993721301,-5.8654611621949015e-5,9.053364701309959e-8,0.003336668034416213,-5.8939341334053395e-5,9.100181248328803e-8,0.0033369886308538366,-5.9243988034202145e-5,9.15003563787348e-8,0.0033374117211466396,-5.950577741976175e-5,9.192485569877443e-8,0.0033378966406314506,-5.9676814334938345e-5,9.219623025373824e-8,0.003338387060585492,-5.974061238822445e-5,9.228818050131115e-8,0.003338832161640395,-5.9712769824558396e-5,9.222809662066525e-8,0.003339200660884803,-5.9629238348668325e-5,9.207713490030904e-8,0.0033394839946629365,-5.9531508527586526e-5,9.19051435138701e-8,0.00333969194933606,-5.9455615021928336e-5,9.177216062406416e-8,0.0033398456958361393,-5.9426735296063406e-5,9.171952556625893e-8,0.0033399714625476887,-5.94580076063395e-5,9.176821138029921e-8,0.0033400959454044452,-5.9551503177061825e-5,9.19207583444299e-8,0.003340243216604815,-5.969991931487511e-5,9.21642828744451e-8,0.003340432528612182,-5.988845372977386e-5,9.247363390315894e-8,0.00334067661964073,-6.009682747560091e-5,9.281470236403697e-8,0.003340980391006287,-6.0301603901974886e-5,9.314821825194654e-8,0.0033413400860247433,-6.047899922745841e-5,9.34344253905957e-8,0.0033417433406987395,-6.0608161718892285e-5,9.363861218700703e-8,0.0033421704338331562,-6.0674530868574566e-5,9.373681434940468e-8,0.003342596793867571,-6.067274472862805e-5,9.372073186756808e-8,0.003342996619504433,-6.060857747387037e-5,9.360092417739725e-8,0.0033433472973181913,-6.049938316515723e-5,9.340736779360886e-8,0.003343634076313921,-6.037265637678459e-5,9.318674843140178e-8,0.003343854352958671,-6.026253039672385e-5,9.29962869527095e-8,0.0033440207974379525,-6.02040503597778e-5,9.289398103642671e-8,0.00334416209570793,-6.0225227664861864e-5,9.292540486542561e-8,0.0033443195738953684,-6.033783862182839e-5,9.310869759814082e-8,0.0033445382535737425,-6.052967926745262e-5,9.342213643036966e-8,0.0033448528768625176,-6.076271261213488e-5,9.380146725962548e-8,0.0033452733341006566,-6.098129519580642e-5,9.415379750598335e-8,0.0033457773304763423,-6.11302103754188e-5,9.43875995339562e-8,0.003346316441695281,-6.117498982465232e-5,9.444642575943193e-8,0.0033468338086486238,-6.111354333006799e-5,9.432810795018451e-8,0.0033472838692474196,-6.097324927755117e-5,9.4079645301939e-8,0.0033476441985163447,-6.0797240704200516e-5,9.377398884436344e-8,0.0033479163084475117,-6.062888070521747e-5,9.348385258171712e-8,0.003348119017326552,-6.050124738963157e-5,9.326410433273226e-8,0.0033482798563691583,-6.043317112036643e-5,9.314535120928058e-8,0.0033484280459571253,-6.0429873261064216e-5,9.313533471622201e-8,0.0033485900303240564,-6.0485597297215256e-5,9.322360188274091e-8,0.0033487870427821647,-6.058650061285441e-5,9.338645264051759e-8,0.003349033779148276,-6.071317745669125e-5,9.359112405668456e-8,0.003349337512154647,-6.084287930407258e-5,9.379941019517652e-8,0.0033496973868342426,-6.0951778738148076e-5,9.39713912066027e-8,0.0033501040189214903,-6.1017654657638296e-5,9.406994902831682e-8,0.003350539852327468,-6.102313701204754e-5,9.406628005534092e-8,0.0033509808424563464,-6.0959184102096446e-5,9.394579478956938e-8,0.0033513997985662727,-6.0828035243102085e-5,9.371305998195274e-8,0.003351771242630648,-6.064464806465786e-5,9.339407682046672e-8,0.0033520770502697586,-6.043567280060645e-5,9.303431185934628e-8,0.0033523115992083793,-6.023549059632611e-5,9.269175686275925e-8,0.0033524849538567095,-6.0079656147178764e-5,9.242570667708549e-8,0.003352622868607595,-5.999683644913714e-5,9.228321247007672e-8,0.0033527629108964156,-6.0000858451751614e-5,9.228598308330152e-8,0.0033529466888537886,-6.0084899028015664e-5,9.242109352946563e-8,0.003353209163212818,-6.0220101719581925e-5,9.263915942649568e-8,0.003353567452423346,-6.036056292024498e-5,9.286301996208644e-8,0.003354013074553909,-6.045506176241125e-5,9.300742375322236e-8,0.003354511938151932,-6.0462793179074204e-5,9.300515855826013e-8,0.003355013937094379,-6.036701837740332e-5,9.282957547814603e-8,0.0033554690078815767,-6.018006277425595e-5,9.250263119120252e-8,0.0033558424476254254,-5.9937221757790955e-5,9.208440293612802e-8,0.0033561228412348943,-5.9683282240027307e-5,9.165030735952862e-8,0.003356320744440452,-5.9458664926667036e-5,9.126781835699132e-8,0.003356461215846782,-5.929059997108527e-5,9.09818074709203e-8,0.0033565749791113304,-5.919060979973586e-5,9.081060603989335e-8,0.0033566915189816907,-5.915640839670276e-5,9.07494897969949e-8,0.0033568350305881473,-5.91755770416691e-5,9.077702401431161e-8,0.003357022613830941,-5.9229226963443656e-5,9.086121990946202e-8,0.003357263701159578,-5.929496452229679e-5,9.096440629587108e-8,0.003357559911226247,-5.934921839576949e-5,9.104702421945221e-8,0.0033579049385909485,-5.9369383956175455e-5,9.1071192375381e-8,0.0033582845835001054,-5.9336313704812116e-5,9.100494733703145e-8,0.00335867744667257,-5.923739982099832e-5,9.082751861971475e-8,0.003359057001605932,-5.906997363720898e-5,9.053508695821385e-8,0.003359395616398978,-5.884413276926084e-5,9.014546329210125e-8,0.003359670484111321,-5.858354614172143e-5,8.96992412648217e-8,0.003359870306372325,-5.83227294745991e-5,8.925494292974744e-8,0.003360000476205311,-5.8100244081356475e-5,8.887733886137964e-8,0.0033600842939887445,-5.794905158876692e-5,8.862112733910623e-8,0.0033601588394004405,-5.7886876867381644e-5,8.851484939281549e-8,0.0033602660797591934,-5.790993390908707e-5,8.85506789176601e-8,0.003360441674025316,-5.799244505104898e-5,8.868407215376571e-8,0.003360704848971143,-5.809247460735285e-5,8.884397868653839e-8,0.003361052408555661,-5.8162610399993446e-5,8.895098477449679e-8,0.0033614587985430038,-5.816263041067814e-5,8.893850581578914e-8,0.003361882595100984,-5.807055435201572e-5,8.877103313526498e-8,0.0033622778382321966,-5.788851232418176e-5,8.845357733079992e-8,0.003362606646946412,-5.764123357960088e-5,8.802875740347297e-8,0.003362848722009863,-5.736772166360094e-5,8.756257923304475e-8,0.003363004624307182,-5.710951428610873e-5,8.712465566458204e-8,0.0033630925651310676,-5.690004657624532e-5,8.677046271557997e-8,0.0033631411170110623,-5.6758424875231495e-5,8.653114040510852e-8,0.003363181256001812,-5.668835779717318e-5,8.641199419472419e-8,0.0033632402740149748,-5.6680785627308535e-5,8.639713164955336e-8,0.0033633383786634027,-5.67180183840242e-5,8.64564805526587e-8,0.0033634874868962595,-5.6777755378881375e-5,8.65524655651299e-8,0.0033636912810481303,-5.683628445550697e-5,8.66452477529796e-8,0.003363945718484768,-5.687086249094485e-5,8.669663650025481e-8,0.0033642395389277832,-5.686171426360383e-5,8.667346696354637e-8,0.0033645548029027344,-5.6794222114151424e-5,8.655138743646585e-8,0.0033648679728196743,-5.6661634264931834e-5,8.631952160889124e-8,0.003365152316192434,-5.646808727765676e-5,8.598556119531746e-8,0.0033653823440695273,-5.6231009443925796e-5,8.557966538825618e-8,0.003365540348867742,-5.598115619209057e-5,8.515425825459867e-8,0.0033656236291926926,-5.5758262063050816e-5,8.477643543829795e-8,0.003365649237974656,-5.5601580627967396e-5,8.451187493962213e-8,0.003365652653538818,-5.5537505781072915e-5,8.440402629396734e-8,0.0033656789459104476,-5.5569291146105796e-5,8.445703766415184e-8,0.003365769023611574,-5.5674099565599833e-5,8.463116901817921e-8,0.003365946605285959,-5.580935658495085e-5,8.485389455646114e-8,0.003366211262409989,-5.592573091926771e-5,8.504204720695987e-8,0.0033665395943343838,-5.598132333980049e-5,8.512577176624952e-8,0.003366892961472996,-5.59521898282755e-5,8.506604596898847e-8,0.003367228357217615,-5.583677491599288e-5,8.486175343471328e-8,0.0033675090217883843,-5.565418314517531e-5,8.454632832083293e-8,0.0033677122812087027,-5.543770395775392e-5,8.417651191158752e-8,0.0033678331653782018,-5.522579913828783e-5,8.381704806824443e-8,0.0033678834944036373,-5.50530389308712e-5,8.352552276592036e-8,0.0033678872697589877,-5.494321345418341e-5,8.334103225252462e-8,0.003367874119813055,-5.490600237086945e-5,8.327889130742978e-8,0.0033678728417263332,-5.493731937946403e-5,8.333146207894089e-8,0.003367906582298691,-5.50223028120182e-5,8.347329601819736e-8,0.003367990240931756,-5.5139459330814e-5,8.36680693328067e-8,0.003368129820921837,-5.5264706650024884e-5,8.387526013174893e-8,0.0033683230141878383,-5.53746278372721e-5,8.405550425907457e-8,0.0033685602874602904,-5.544884667401181e-5,8.417455801548991e-8,0.0033688260245799536,-5.5471875403664845e-5,8.420648096017351e-8,0.0033690996964164,-5.54349217648513e-5,8.41368044105891e-8,0.0033693574390171246,-5.533796983745346e-5,8.396611154911362e-8,0.003369574738556079,-5.51920190230235e-5,8.371373979967595e-8,0.0033697309471166486,-5.502062543221554e-5,8.342014676700197e-8,0.0033698157191195807,-5.4858963662490004e-5,8.314502135403152e-8,0.00336983588693757,-5.4748211466438515e-5,8.295758836096101e-8,0.003369819180796456,-5.472435396786891e-5,8.291770942984493e-8,0.0033698103447281362,-5.4804144817696605e-5,8.305241791698605e-8,0.0033698580327925177,-5.497509215486744e-5,8.333937840761425e-8,0.00336999704671909,-5.519660736781785e-5,8.370918090270701e-8,0.003370235023755808,-5.541355414664154e-5,8.406846696487325e-8,0.0033705505910493,-5.557548077177791e-5,8.43325066766928e-8,0.0033709027002781183,-5.565191209448797e-5,8.445094442884492e-8,0.0033712449573918956,-5.563811944371171e-5,8.441726573141519e-8,0.0033715383281370122,-5.5551947479558465e-5,8.426301455023264e-8,0.0033717588003342688,-5.5425603682988634e-5,8.404350744757277e-8,0.0033718997534319347,-5.529628730757146e-5,8.382176259040501e-8,0.0033719703516509663,-5.519808521396885e-5,8.365483265879684e-8,0.0033719915125817105,-5.515616301581334e-5,8.358424368986457e-8,0.003371990670460589,-5.5183508520810655e-5,8.363084262341449e-8,0.003371996312094328,-5.5280222125438397e-5,8.37938999603007e-8,0.0033720332014755966,-5.543506986883743e-5,8.405389123547616e-8,0.0033721189855487107,-5.56286157858378e-5,8.437778720791833e-8,0.003372262458821144,-5.5837078683713314e-5,8.472545698884107e-8,0.0033724633940253805,-5.603614789623234e-5,8.505597653427594e-8,0.003372713546608454,-5.620417709122976e-5,8.533294234846123e-8,0.0033729982668022603,-5.632452546423462e-5,8.552844070193068e-8,0.00337329829570848,-5.6387235045065904e-5,8.562597120345452e-8,0.003373591662554191,-5.639037939243083e-5,8.56228158420924e-8,0.0033738558827816345,-5.634128823507716e-5,8.553209949381927e-8,0.0033740709065428706,-5.625757728164715e-5,8.538435984518772e-8,0.0033742233614416587,-5.6167318041165296e-5,8.522753464272809e-8,0.0033743120850930324,-5.6106839883563096e-5,8.512295286558207e-8,0.0033743535182657845,-5.6114284681771475e-5,8.51343302306435e-8,0.003374383584560917,-5.621816091412462e-5,8.530860378052354e-8,0.003374451653711905,-5.642363033026548e-5,8.565316246357324e-8,0.003374604874548048,-5.670392651341919e-5,8.612176775673318e-8,0.003374868363272367,-5.700515151316815e-5,8.662290807184912e-8,0.0033752327666612806,-5.726543902108981e-5,8.705223569982031e-8,0.003375657734454065,-5.743861941957818e-5,8.733251492462779e-8,0.00337608883276525,-5.7508964679654286e-5,8.743842547911098e-8,0.0033764770314720334,-5.749109053497066e-5,8.739613430904317e-8,0.003376791288154108,-5.741928432963936e-5,8.726484516431357e-8,0.003377021873463669,-5.733428391425587e-5,8.711405749206888e-8,0.003377177244553692,-5.727289468373037e-5,8.700584615729924e-8,0.0033772782065038614,-5.7261975296652276e-5,8.698482352101486e-8,0.003377351897211726,-5.731608876134401e-5,8.707450164078988e-8,0.0033774266600864046,-5.743750053577925e-5,8.727765185706965e-8,0.0033775279397840904,-5.761758344607225e-5,8.757892428997106e-8,0.0033776751676794963,-5.783921764291742e-5,8.794897670651642e-8,0.0033778797227997696,-5.807988352583364e-5,8.834963725304223e-8,0.0033781440270615184,-5.831509017006301e-5,8.873957895692964e-8,0.0033784617768650477,-5.8521803894550365e-5,8.908001953560924e-8,0.003378819238634322,-5.868149381761238e-5,8.933984781642511e-8,0.003379197323670683,-5.8782439093002966e-5,8.949957584080041e-8,0.003379574066231394,-5.882122050843463e-5,8.955393397490966e-8,0.003379927308581292,-5.880351542948081e-5,8.951323372093641e-8,0.0033802375736910525,-5.8744255904977356e-5,8.940353066295135e-8,0.003380491220639322,-5.86670851430349e-5,8.92654614473728e-8,0.003380684061250688,-5.8602724717853605e-5,8.915117457299559e-8,0.003380825238790617,-5.8585283278155506e-5,8.911787039413452e-8,0.0033809400725077258,-5.8645366370736766e-5,8.921617853680288e-8,0.0033810692089788217,-5.8799874204040243e-5,8.947323513780382e-8,0.003381260821250198,-5.904106722336901e-5,8.987469296042821e-8,0.0033815547925915685,-5.933123263112307e-5,9.0356110182332e-8,0.003381964109575867,-5.961028832185029e-5,9.081592148861166e-8,0.0033824647851254143,-5.981713959083937e-5,9.1151422106769e-8,0.003383003169851391,-5.9914358833980524e-5,9.130033548932249e-8,0.0033835175357943767,-5.9901254032734106e-5,9.126278647579509e-8,0.0033839605590798446,-5.980890433849116e-5,9.10926902260356e-8,0.00338431099616989,-5.968366488858203e-5,9.086948355865654e-8,0.0033845727837585357,-5.9570442762593056e-5,9.066948346775116e-8,0.0033847670858004075,-5.950243521857609e-5,9.05484296124944e-8,0.0033849232362922243,-5.9497727807565615e-5,9.053594275132374e-8,0.0033850716583332255,-5.956024397003957e-5,9.063751388399143e-8,0.0033852393421935963,-5.9682490187505253e-5,9.083949487511646e-8,0.0033854472176725985,-5.984859127500225e-5,9.111441080009529e-8,0.0033857086133339863,-6.003720459463659e-5,9.142588647628522e-8,0.0033860284271986017,-6.022439650227471e-5,9.173340583043047e-8,0.003386402955846923,-6.038656005091193e-5,9.199713865518988e-8,0.003386820462731965,-6.0503374088305864e-5,9.218289744117541e-8,0.003387262658810295,-6.05606230682693e-5,9.226693315388558e-8,0.0033877071395750856,-6.0552452997181255e-5,9.223981379163578e-8,0.0033881305330445235,-6.048266726105932e-5,9.210864890465263e-8,0.0033885120041810286,-6.036487174837796e-5,9.189727295160823e-8,0.003388836782278121,-6.022136221100909e-5,9.164417689053099e-8,0.003389099364723984,-6.008071140194549e-5,9.139814912203612e-8,0.003389306087909998,-5.9974056769629564e-5,9.121173103792565e-8,0.0033894766507592314,-5.992991778520634e-5,9.113234376727132e-8,0.0033896436217253243,-5.9967392439029444e-5,9.119094033650632e-8,0.003389848331184142,-6.00884494472235e-5,9.138938243016609e-8,0.003390131696696725,-6.027176738671097e-5,9.169052134537972e-8,0.003390520408645742,-6.0472489173007385e-5,9.20181223124543e-8,0.003391013048776062,-6.0632291852483944e-5,9.227391611926006e-8,0.003391574685345615,-6.069936708195099e-5,9.237117323434914e-8,0.0033921465752053356,-6.0649508463182645e-5,9.227013011226155e-8,0.003392668019375996,-6.049561955058757e-5,9.199390213601754e-8,0.003393098109249708,-6.027985582758634e-5,9.161498325294656e-8,0.003393425788317697,-6.005472021645174e-5,9.12229510324662e-8,0.00339366621882231,-5.986502345047448e-5,9.089367784604274e-8,0.003393849764889761,-5.973824800765525e-5,9.067301795341194e-8,0.0033940108887349028,-5.9683418753718195e-5,9.057517474706375e-8,0.0033941806177451347,-5.969475502631139e-5,9.058927390461232e-8,0.0033943828082887316,-5.9756555264083074e-5,9.068792616803152e-8,0.0033946329021984417,-5.984744069403636e-5,9.083450585144963e-8,0.003394937808251754,-5.994358255246006e-5,9.098854172687638e-8,0.003395296161910116,-6.002127117598997e-5,9.110993548500498e-8,0.003395698804414143,-6.0059267214638514e-5,9.116285658288206e-8,0.0033961296425301405,-6.004122350292775e-5,9.111984405853812e-8,0.0033965672449549665,-5.995817702591761e-5,9.096608893871411e-8,0.0033969875056327195,-5.9810681332088226e-5,9.070310529653611e-8,0.0033973673472186662,-5.960989551896998e-5,9.035055940505286e-8,0.0033976890073721226,-5.937702862808381e-5,8.994519524467432e-8,0.00339794414966279,-5.914078600227383e-5,8.953626954603158e-8,0.00339813686265762,-5.893285864413488e-5,8.91776383701858e-8,0.0033982846760873316,-5.8782022201718587e-5,8.891757350029357e-8,0.0033984170426695744,-5.8707756459061303e-5,8.878796990728907e-8,0.0033985710041651773,-5.8714419523522015e-5,8.879474808736464e-8,0.003398783964213327,-5.8787308590801815e-5,8.891163690828701e-8,0.003399084097724401,-5.889244323337396e-5,8.908026373626042e-8,0.003399480270250761,-5.898203293481756e-5,8.921967011645284e-8,0.0033999551699554283,-5.900646431000797e-5,8.924656326463904e-8,0.003400466358786225,-5.893049216975236e-5,8.91024588459512e-8,0.003400957801068039,-5.8747104648884236e-5,8.877683281588798e-8,0.003401378527359106,-5.848118000125292e-5,8.831304298309702e-8,0.0034016995373273343,-5.817987411373497e-5,8.779181892187154e-8,0.0034019205448226966,-5.789489120259509e-5,8.730103063936285e-8,0.0034020649231812825,-5.7666180030203005e-5,8.690798801868969e-8,0.003402168049287801,-5.751375176227864e-5,8.664571506488682e-8,0.003402265858276145,-5.743804869788241e-5,8.651389470980682e-8,0.00340238747932283,-5.742519852330234e-5,8.64881096032888e-8,0.0034025522455255973,-5.7453234933997976e-5,8.653057385184077e-8,0.0034027695489980392,-5.7497130460310654e-5,8.659865614011625e-8,0.003403039886903058,-5.753221388492227e-5,8.665054230622828e-8,0.0034033560870460524,-5.753644074444263e-5,8.664895352331391e-8,0.0034037044047870047,-5.7492186034072585e-5,8.656414307834132e-8,0.003404065680014834,-5.738807359108861e-5,8.637705347880114e-8,0.0034044170305128105,-5.722099116240365e-5,8.60828262613509e-8,0.003404734597935735,-5.6997926909140374e-5,8.569395943787588e-8,0.003404997558905359,-5.6736793275923886e-5,8.524163215191012e-8,0.0034051929890715296,-5.646520876211743e-5,8.477344074418974e-8,0.003405320408160798,-5.621648018227168e-5,8.434631513995815e-8,0.003405394300451476,-5.6022900264124296e-5,8.40149123124777e-8,0.0034054430646795236,-5.590772696450894e-5,8.381791884209707e-8,0.0034055038606741876,-5.587815564824331e-5,8.376626228374444e-8,0.0034056142384550816,-5.59216390476811e-5,8.383721738396868e-8,0.003405802567121793,-5.600706841995555e-5,8.397686437719106e-8,0.003406079762115114,-5.609104831024885e-5,8.411111539414267e-8,0.0034064347003346877,-5.6128202268790945e-5,8.416335082003054e-8,0.0034068351738956544,-5.6083285215666045e-5,8.407483916197228e-8,0.003407235151776666,-5.594181500695267e-5,8.382243623901492e-8,0.0034075871596243503,-5.5715353849958e-5,8.342714398589868e-8,0.0034078560389337632,-5.543856994368361e-5,8.294878555047174e-8,0.0034080288015259303,-5.5158405656903775e-5,8.246741739171249e-8,0.003408116556022004,-5.491960304745137e-5,8.20587213493105e-8,0.0034081483496585887,-5.475262430635319e-5,8.17736335484883e-8,0.0034081606287834965,-5.466819510979342e-5,8.162935251217643e-8,0.003408187213574958,-5.465879991060622e-5,8.161218884734959e-8,0.0034082529479952245,-5.470438823302094e-5,8.168747464274309e-8,0.0034083714747449156,-5.477893708194855e-5,8.181075694408507e-8,0.0034085458513296286,-5.4855751000708015e-5,8.193669718795236e-8,0.003408770414545297,-5.4910925975911326e-5,8.202480039048432e-8,0.003409032781106392,-5.4925363401297566e-5,8.204274072682829e-8,0.0034093155318804143,-5.488606600123461e-5,8.196858076576507e-8,0.0034095977133735593,-5.478735913882586e-5,8.179294852554372e-8,0.0034098566636729913,-5.463228818846857e-5,8.1521508229844755E-08,0.003410070752139286,-5.443391476149148e-5,8.117715796819658e-8,0.0034102233957102024,-5.4215684339399623e-5,8.0800505879973e-8,0.003410308068531649,-5.400958289018258e-5,8.044648266424068e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json new file mode 100644 index 0000000..5a65685 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":22000,"numberOfSamples":1000,"samples":[0.003410332914201753,-5.3850894022675106e-5,8.017517098961131e-8,0.003410322528879365,-5.376958194615e-5,8.003701237438996e-8,0.0034103145652221627,-5.3780481135696216e-5,8.005617875605212e-8,0.0034103506775372276,-5.3876274061593275e-5,8.021888857849169e-8,0.003410464307410866,-5.402707135418975e-5,8.047308167596654e-8,0.003410669971601388,-5.4187778507499705e-5,8.074133887896081e-8,0.003410958362427396,-5.431078402439631e-5,8.094271511350002e-8,0.0034112988966924413,-5.435925986441926e-5,8.101538020005893e-8,0.0034116483046836123,-5.431671386401488e-5,8.093263501288651e-8,0.0034119621492173344,-5.41904204198061e-5,8.070834304160092e-8,0.0034122059256284677,-5.400841636122217e-5,8.039138838903804e-8,0.0034123629141804617,-5.38113276447821e-5,8.005145827068325e-8,0.003412436926427523,-5.3641509849942013e-5,7.976047048128742e-8,0.0034124495366027988,-5.3532666321671336e-5,7.957504010808949e-8,0.0034124330661485227,-5.350283981451321e-5,7.952484351765614e-8,0.0034124218722404974,-5.3552370565715433e-5,7.960947036368768e-8,0.0034124447457084236,-5.3666539079328896e-5,7.980316491937519e-8,0.0034125202858526367,-5.382106091332426e-5,8.00642647210325e-8,0.0034126555868305777,-5.398815305369993e-5,8.034545908014444e-8,0.0034128473776592204,-5.414152490629849e-5,8.06021342297411e-8,0.0034130843642180496,-5.425966542015235e-5,8.079783644736344e-8,0.0034133497512128354,-5.4327618445658844e-5,8.090725685897239e-8,0.003413623435855102,-5.4337869912637006e-5,8.091781018622006e-8,0.003413883907454681,-5.429097539492461e-5,8.083081580105819e-8,0.0034141102665403125,-5.419622361028624e-5,8.066268207707981e-8,0.0034142849136512055,-5.407215162017978e-5,8.044570051432896e-8,0.00341439730488426,-5.394617096384391e-5,8.022718223765307e-8,0.003414448551881033,-5.385201336379878e-5,8.006482802604857e-8,0.0034144554442633347,-5.382365677022172e-5,8.001619006311863e-8,0.003414451133210198,-5.388562472720168e-5,8.012215438343905e-8,0.0034144795115925615,-5.4042269894100845e-5,8.038890648236031e-8,0.003414582717752921,-5.427144088560471e-5,8.077748959286917e-8,0.0034147858366957128,-5.452785635760065e-5,8.120990068433355e-8,0.003415086335408109,-5.475685197042185e-5,8.159276299340531e-8,0.0034154541675420077,-5.491264135361651e-5,8.184854560101504e-8,0.003415842328369328,-5.497241133679643e-5,8.19395012048398e-8,0.0034162020648540446,-5.494079694397467e-5,8.187500799224558e-8,0.0034164960597480513,-5.484509224563486e-5,8.170297816008171e-8,0.003416705855690934,-5.472520370648011e-5,8.14923147861858e-8,0.0034168331491478627,-5.462263220717812e-5,8.131389578844407e-8,0.003416896425673255,-5.457135459703978e-5,8.122506662590603e-8,0.003416924864737033,-5.459196701501527e-5,8.125992201462119e-8,0.0034169512624180483,-5.468942093895768e-5,8.142580537893595e-8,0.0034170054267853647,-5.485407812356393e-5,8.17054100824689e-8,0.0034171092005408077,-5.506533196508355e-5,8.206310391954363e-8,0.0034172737893538854,-5.529662285957986e-5,8.24534661992994e-8,0.0034174994368857004,-5.552057481406241e-5,8.282992315001632e-8,0.0034177769459542693,-5.5713266654435735e-5,8.315188937008223e-8,0.0034180902481047706,-5.58571185539423e-5,8.338960767448971e-8,0.0034184192209990544,-5.594239734507513e-5,8.352672714006698e-8,0.0034187422744122974,-5.5967759795049916e-5,8.356130894842189e-8,0.0034190386613258106,-5.5940313585960716e-5,8.350600300356605e-8,0.0034192907451060053,-5.5875438829459745e-5,8.338772029482915e-8,0.0034194865853197334,-5.5796286755981725e-5,8.324661178228372e-8,0.0034196231618546383,-5.573239332743332e-5,8.313343416160889e-8,0.0034197100026956712,-5.571629566234729e-5,8.310353167794132e-8,0.0034197718373557965,-5.5777017730924494e-5,8.320565011677361e-8,0.0034198476546487924,-5.593045265235306e-5,8.346570742357244e-8,0.0034199832418701356,-5.6169307155583144e-5,8.387000547866622e-8,0.0034202166393619616,-5.64584557493018e-5,8.435767926960611e-8,0.0034205614639800535,-5.67418663020452e-5,8.483274082655738e-8,0.003420997727034218,-5.696140593963007e-5,8.51962311929662e-8,0.0034214773558268368,-5.707879301142648e-5,8.538365211417604e-8,0.0034219421419332224,-5.708851047552745e-5,8.538688805157197e-8,0.0034223438059788605,-5.701585691614104e-5,8.525060072019697e-8,0.0034226564954146083,-5.690413699843295e-5,8.504993386503595e-8,0.003422878920363075,-5.679944106094893e-5,8.486413227000239e-8,0.0034230291674335464,-5.6739176541925223e-5,8.475681081074442e-8,0.003423136660697731,-5.6746178962097036e-5,8.476606168603778e-8,0.0034232343831674863,-5.682746769406769e-5,8.490269488349289e-8,0.0034233527024106186,-5.697594757338996e-5,8.515352124084064e-8,0.003423515048462373,-5.717372366496969e-5,8.548725451920484e-8,0.003423735360724929,-5.739623453008071e-5,8.586162778920173e-8,0.0034240171921175824,-5.761661689063496e-5,8.623076555625632e-8,0.003424354282394761,-5.7809781532945634e-5,8.655200921001188e-8,0.003424732337212298,-5.795580012171021e-5,8.679159414405439e-8,0.0034251316600929604,-5.804228112995662e-5,8.692867283680107e-8,0.0034255301389273553,-5.8065571370678764e-5,8.695739993818016e-8,0.0034259061435299876,-5.8030942708281336e-5,8.68873016976559e-8,0.003426241192945239,-5.7952061490074354e-5,8.674237096252997e-8,0.003426522442310002,-5.784987818084441e-5,8.655906513984539e-8,0.0034267450710929025,-5.775090698206635e-5,8.638314938058331e-8,0.0034269146613510586,-5.768461436478088e-5,8.626498016672915e-8,0.0034270492888037753,-5.7679206341423455e-5,8.625215296635437e-8,0.0034271801115048016,-5.775513150463932e-5,8.637847340111039e-8,0.003427348318837799,-5.791673040416302e-5,8.66500111928406e-8,0.003427596290732135,-5.814466196255829e-5,8.703260278195282e-8,0.0034279529627239238,-5.8394327194921334e-5,8.744949479355945e-8,0.003428418470586544,-5.860576263431353e-5,8.77983298726461e-8,0.00342895785967562,-5.872474275422114e-5,8.79870966366347e-8,0.0034295111225311516,-5.872520138069127e-5,8.797231646130829e-8,0.0034300159367414112,-5.8619276575255356e-5,8.777608739665868e-8,0.003430429936364875,-5.8449346719175054e-5,8.747221956219683e-8,0.0034307409539403753,-5.8269005362368705e-5,8.715330218992734e-8,0.0034309636874953423,-5.812488879415304e-5,8.689927969838687e-8,0.0034311290547955646,-5.804651663753494e-5,8.676002574361577e-8,0.0034312730856115364,-5.804431513186724e-5,8.675224016919222e-8,0.003431428842749821,-5.811258599710215e-5,8.686495556850346e-8,0.003431621833748501,-5.823424073945281e-5,8.706799112634763e-8,0.0034318679871170456,-5.838549788451625e-5,8.732014432177786e-8,0.0034321731793053077,-5.854001187955921e-5,8.757621999925782e-8,0.0034325337535511193,-5.8672442465983527E-05,8.779300375802679e-8,0.0034329377969641297,-5.876149483775846e-5,8.79343338304245e-8,0.0034333670820067457,-5.8792422402358875e-5,8.7975316488367e-8,0.0034337996533433854,-5.875886549720411e-5,8.790547650809066e-8,0.0034342129023982814,-5.8663743295375374e-5,8.773032040338553e-8,0.0034345867528595554,-5.8519040728693963E-05,8.747098149349937e-8,0.00343490662495616,-5.834457618854895e-5,8.716204139286165e-8,0.003435165997133961,-5.816584043444344e-5,8.684766473704805e-8,0.003435368377604481,-5.8010940498476064e-5,8.657614158669101e-8,0.003435528469312809,-5.79066894188021e-5,8.639300030976978e-8,0.0034356721817477088,-5.787374966119817e-5,8.633265875065238e-8,0.0034358346431882215,-5.7920805816179714e-5,8.640865043476558e-8,0.00343605489737805,-5.8038637339463834e-5,8.660388209222903e-8,0.0034363663675272185,-5.8196543664505935e-5,8.686495377469283e-8,0.003436784132872785,-5.834498191690136e-5,8.710692888866458e-8,0.003437293776835478,-5.8427735873480615e-5,8.72341254787051e-8,0.0034378497110881335,-5.8402092841660325e-5,8.717442687949159e-8,0.0034383882973978448,-5.8257765502926945e-5,8.691145603639477e-8,0.003438851408713721,-5.802240303565348e-5,8.649384664598423e-8,0.0034392073380863355,-5.774932951993929e-5,8.601401185593557e-8,0.0034394577744100104,-5.749559608304214e-5,8.557022184800596e-8,0.003439630233895451,-5.7303386349150334e-5,8.523451882013677e-8,0.0034397639148655676,-5.71921018810065e-5,8.503923334835471e-8,0.003439897152082377,-5.716002300749245e-5,8.498019404726612e-8,0.0034400599773055985,-5.719061355114749e-5,8.502796230293353e-8,0.0034402713672934656,-5.725932344600479e-5,8.513976877355545e-8,0.0034405393098027363,-5.7338962376120295e-5,8.52687687250456e-8,0.0034408620305790096,-5.7403458295962594e-5,8.5370360365332e-8,0.0034412295639111826,-5.74305399376233e-5,8.540661686558558e-8,0.0034416255077720182,-5.7403819017073256e-5,8.534975049941572e-8,0.0034420290593737894,-5.7314494475115625e-5,8.518502074925517e-8,0.0034424175204084556,-5.7162649725107814e-5,8.491300299198063e-8,0.0034427693744096327,-5.695780291358059e-5,8.45505703435799e-8,0.003443067694390436,-5.671827027498391e-5,8.412977141244271e-8,0.0034433033585062117,-5.6469137408961e-5,8.369422260683416e-8,0.003443477522363603,-5.6238888006486065e-5,8.329312068593308e-8,0.0034436028265143223,-5.6054927768332085e-5,8.297335687745774e-8,0.0034437028776761053,-5.593849466785818e-5,8.277067663956046e-8,0.0034438096971042514,-5.589961405993521e-5,8.270110737924363e-8,0.0034439589152577502,-5.593284157050621e-5,8.275395289466784e-8,0.0034441825909026142,-5.601493075148707e-5,8.288821797121621e-8,0.0034445001635288017,-5.610621465702858e-5,8.303535737202917e-8,0.0034449095226591654,-5.615762951966539e-5,8.311147869532069e-8,0.0034453821233687756,-5.612393855092263e-5,8.303989847633601e-8,0.003445866927768903,-5.598013860657117e-5,8.277898571579688e-8,0.003446305117155568,-5.573359851034611e-5,8.234268399454156e-8,0.003446650688170405,-5.54237541297035e-5,8.179975395214818e-8,0.003446886420895123,-5.5107576665760024e-5,8.124862318937609e-8,0.0034470267259821934,-5.483846667724602e-5,8.078097385183255e-8,0.00344710766051307,-5.464993566767857e-5,8.04536936374894e-8,0.003447171789706657,-5.455038535028025e-5,8.028012646114274e-8,0.0034472558389312216,-5.452741901483898e-5,8.02378602589795e-8,0.003447384454009153,-5.455622510521429e-5,8.028347230580017e-8,0.003447569166450617,-5.460748845901849e-5,8.036626359875367e-8,0.003447810144196527,-5.465292154467429e-5,8.043768722291936e-8,0.0034480987268725206,-5.466849659176279e-5,8.045671557812648e-8,0.003448419783191651,-5.46362499989435e-5,8.039277888315682e-8,0.003448753772593059,-5.45454637568273e-5,8.022774113086465e-8,0.0034490787902391605,-5.439364106836301e-5,7.995762374625734e-8,0.003449372967644381,-5.41872734508112e-5,7.959400330433788e-8,0.0034496174799257423,-5.394199608711304e-5,7.916430464845655e-8,0.003449800033082265,-5.368150494101013e-5,7.870985989025718e-8,0.0034499182123150364,-5.343472982432336e-5,7.828086678372597e-8,0.003449981722370573,-5.323117506956941e-5,7.792815673433031e-8,0.0034500124919465153,-5.30949612652312e-5,7.769278778854012e-8,0.0034500419488425822,-5.303878495366926e-5,7.759565134357626e-8,0.003450105483013042,-5.305939695552917e-5,7.762989261880157e-8,0.0034502349108771345,-5.3136052000312036E-05,7.775860628781301e-8,0.00345045036327994,-5.3232896856317525e-5,7.791934553656435e-8,0.0034507534559009615,-5.330563477313901e-5,7.803586216602371e-8,0.0034511239123253042,-5.331189940292976e-5,7.80359816725961e-8,0.0034515217741313154,-5.3223411868618484e-5,7.787229296285301e-8,0.0034518963778732035,-5.303630985682997e-5,7.753954870439826e-8,0.003452200772443476,-5.277494601652743e-5,7.708083438603485e-8,0.0034524067233620208,-5.24857622131667e-5,7.657676351766069e-8,0.003452513539318852,-5.222238745671445e-5,7.611970105647155e-8,0.003452546358006263,-5.202834487641089e-5,7.578401494859984e-8,0.003452545316805372,-5.1925238857953614e-5,7.56059228122419e-8,0.0034525517079226162,-5.1910531969244896e-5,7.55799748568084e-8,0.0034525973425899702,-5.1963341595560646e-5,7.566935879164173e-8,0.003452699860306806,-5.2053492925631584e-5,7.582168477769657e-8,0.003452863075258511,-5.2149607426261665e-5,7.598291155508565e-8,0.0034530799060755258,-5.222439818684115e-5,7.61063070119408e-8,0.003453335818338361,-5.2257343532068194e-5,7.615685892232103e-8,0.003453611766785339,-5.223571891965294e-5,7.61129377116946e-8,0.0034538864899658996,-5.215494408708145e-5,7.596690383151867e-8,0.003454138506384482,-5.201882998128307e-5,7.572562427973521e-8,0.003454348337076918,-5.183978826068164e-5,7.541091271463072e-8,0.0034545013314538756,-5.1638552963418784e-5,7.505903324803353e-8,0.003454591043269122,-5.144265642680074e-5,7.47179322561575e-8,0.0034546224963198295,-5.128290588661151e-5,7.444094709790633e-8,0.003454614029832736,-5.118756231866206e-5,7.427657654620211e-8,0.0034545960964780477,-5.117499667449252e-5,7.425575471974446e-8,0.0034546059759224725,-5.124696696840789e-5,7.438038383349255e-8,0.003454678971542103,-5.13853618139435e-5,7.46180167622108e-8,0.003454838496800186,-5.155451806553497e-5,7.490622976898416e-8,0.003455088410098183,-5.170923490366474e-5,7.516676020545438e-8,0.0034554104312331923,-5.18063784397559e-5,7.53256558047392e-8,0.0034557677626890567,-5.181660232781692e-5,7.533338722547459e-8,0.003456114043853787,-5.173270086815992e-5,7.517894604581043e-8,0.0034564052677747885,-5.157212308820495e-5,7.48937718027089e-8,0.003456611436614271,-5.1372648185342906e-5,7.454392055414663e-8,0.0034567244663298784,-5.118206849108857e-5,7.421205085109125e-8,0.0034567595924578005,-5.104487112438851e-5,7.397444303572169e-8,0.0034567496932292933,-5.0990411029647274e-5,7.388079046187029e-8,0.0034567348219838017,-5.1026634462844345E-05,7.394368941315555e-8,0.0034567511208470503,-5.1140910162072285e-5,7.41404001886787e-8,0.003456822969488365,-5.130640701071599e-5,7.442407063670418e-8,0.0034569600809666373,-5.149059048477161e-5,7.473844540174441e-8,0.003457158836079232,-5.166263101478568e-5,7.503054191154755e-8,0.0034574058624226842,-5.179814342816616e-5,7.525864485773623e-8,0.0034576819982162126,-5.188131487414444e-5,7.53958236160267e-8,0.003457965624434055,-5.190529764163641e-5,7.543055726802653e-8,0.003458235153642075,-5.187182989119657e-5,7.536613158997809e-8,0.003458470988800748,-5.179074706531707e-5,7.52198852644471e-8,0.0034586575036994354,-5.1679536585510255e-5,7.502247538759579e-8,0.0034587855033521653,-5.156254212189298e-5,7.481641900418598e-8,0.0034588552057932243,-5.1469030724573484e-5,7.465256143383775e-8,0.0034588791061978532,-5.142920657003421e-5,7.458297859873786e-8,0.003458883218149259,-5.1467660711166246e-5,7.464955268013278e-8,0.0034589045776179444,-5.159510836468649e-5,7.48697763858947e-8,0.0034589835250980615,-5.180135000044591e-5,7.522485150187091e-8,0.0034591517840109193,-5.205370320062124e-5,7.56573232920082e-8,0.0034594206555359705,-5.2303828254811026e-5,7.608317761780516e-8,0.0034597750906966754,-5.250174966429808e-5,7.641623908985145e-8,0.0034601771049745287,-5.2611539439694236e-5,7.659526793472266e-8,0.003460577222136936,-5.262200185778321e-5,7.660223703442587e-8,0.003460928903507887,-5.254861496345348e-5,7.646534203758294e-8,0.003461200559315436,-5.2427345790902366e-5,7.624789704143432e-8,0.0034613819623500147,-5.230371513415596e-5,7.602909490634815e-8,0.00346148446467581,-5.2220931733726785e-5,7.58833715008536e-8,0.003461536103359664,-5.2210117968981436e-5,7.586364467457609e-8,0.003461573517811942,-5.2284544913011865e-5,7.599167543503633e-8,0.0034616329485504336,-5.243864613206289e-5,7.625673698865155e-8,0.003461742549106104,-5.265142211148723e-5,7.662177846795173e-8,0.003461917703165235,-5.2892782274308036e-5,7.703449448843473e-8,0.0034621599737674246,-5.313072477304534e-5,7.74396760194996e-8,0.0034624591084389793,-5.33374098966768e-5,7.778955053911857e-8,0.003462796779292467,-5.349304510582412e-5,7.805033191515012e-8,0.003463150686187144,-5.3587487694671127e-5,7.820488911072816e-8,0.0034634980867577683,-5.362014291759816e-5,7.825256020973388e-8,0.0034638184347490337,-5.35989854743125e-5,7.820751398896041e-8,0.0034640953366142095,-5.353936163065365e-5,7.809672470592285e-8,0.0034643182806015373,-5.3462782486652334e-5,7.795785220255605e-8,0.0034644845501561154,-5.339545627403919e-5,7.783656035226323e-8,0.0034646014413177184,-5.336592005983549e-5,7.778221516267927e-8,0.0034646882637985664,-5.3400881599815127e-5,7.78405393635882e-8,0.003464776653159077,-5.351867683920702e-5,7.804231285445772e-8,0.003464906957150965,-5.372111733504216e-5,7.838949782169935e-8,0.0034651189235659127,-5.398689725856593e-5,7.884418711991946e-8,0.0034654377510551313,-5.427171287388532e-5,7.932912268318844e-8,0.003465861181889111,-5.45189747063227e-5,7.974637922620187e-8,0.0034663557995089868,-5.4679006723517416e-5,8.001057810235294e-8,0.003466866832075317,-5.4727667638690595e-5,8.008101605182355e-8,0.003467337213583027,-5.467430917764118e-5,7.997525515932372e-8,0.0034677259185634294,-5.45558137956383e-5,7.975848386026634e-8,0.0034680175758430914,-5.4421850197762574e-5,7.951758779610465e-8,0.003468221945391668,-5.431943863471243e-5,7.93341221303494e-8,0.003468366749984431,-5.4282189894998705e-5,7.926564782173139e-8,0.003468488253575451,-5.432554626942201e-5,7.933775100923389e-8,0.003468622577673265,-5.4446940976185534e-5,7.954473091422483e-8,0.00346879910386759,-5.4629139136083834e-5,7.985575566520995e-8,0.003469036315266957,-5.484531500646757e-5,8.022385234336574e-8,0.0034693400970225562,-5.506482644748267e-5,8.05959068464886e-8,0.003469704347103154,-5.525874833196587e-5,8.09221138287859e-8,0.003470113426848338,-5.54043045866477e-5,8.116348069551332e-8,0.003470545719066106,-5.548767615842907e-5,8.129655797854296e-8,0.0034709775149081618,-5.550506450046016e-5,8.131522490515083e-8,0.0034713865350294564,-5.546223505877917e-5,8.122990831469518e-8,0.00347175466700389,-5.537307165347207e-5,8.10651077332558e-8,0.003472069935483391,-5.5257707024367603e-5,8.085614780070984e-8,0.0034723279767847086,-5.514048489525153e-5,8.064555763367976e-8,0.0034725332728849033,-5.504767565387728e-5,8.047894670947377e-8,0.0034727002510506733,-5.5004592720721175e-5,8.039983781883514e-8,0.003472853897452726,-5.5031486682279284e-5,8.044249502323219e-8,0.0034730286883273595,-5.513778809238864e-5,8.062209526950794e-8,0.003473263973229728,-5.531544130156531e-5,8.092351809161323e-8,0.0034735943076693245,-5.553413717659481e-5,8.129347436960563e-8,0.003474035665897499,-5.574326882078972e-5,8.16441259001113e-8,0.0034745731955609315,-5.5884742086398796e-5,8.18752580591423e-8,0.0034751596486798657,-5.5914583892773785e-5,8.19115493205368e-8,0.003475729749079442,-5.5822556153648676e-5,8.173640984494093e-8,0.0034762246796353497,-5.563705319293436e-5,8.140033666182622e-8,0.003476612701492186,-5.541203574155975e-5,8.099801039245487e-8,0.003476895422108325,-5.52051656998577e-5,8.063001150121857e-8,0.0034771002354880218,-5.50597528893753e-5,8.037124816213464e-8,0.003477266808137206,-5.499678333889154e-5,8.025718895626209e-8,0.003477434878777277,-5.501575513956466e-5,8.028567476587208e-8,0.0034776364077081026,-5.510010155564282e-5,8.042677847876208e-8,0.0034778919129647623,-5.522370891534653e-5,8.063443431098723e-8,0.003478209655577147,-5.53567664624354e-5,8.085668027157581e-8,0.003478586484780268,-5.547053781197861e-5,8.104383769654996e-8,0.003479009745324267,-5.5541137233202974e-5,8.115488223399064e-8,0.0034794599661624203,-5.55522999409954e-5,8.116209039532e-8,0.00347991406310937,-5.5497055559913984e-5,8.105385714697197e-8,0.00348034877409459,-5.5378226962704636e-5,8.083554656447708e-8,0.003480743967899695,-5.5207701396177e-5,8.052824678244802e-8,0.003481085399356866,-5.500462615502403e-5,8.016563989201027e-8,0.003481366669257658,-5.4792906661938594e-5,7.978960191727658e-8,0.0034815903954937507,-5.459831114198394e-5,7.944505128213398e-8,0.003481768645435652,-5.444530524158718e-5,7.917429462220676e-8,0.003481922641158277,-5.435363020679066e-5,7.901097650404148e-8,0.003482081557943241,-5.43344611388244e-5,7.897344901624152e-8,0.0034822796949849086,-5.438607219406785e-5,7.90574880741661e-8,0.0034825508886991334,-5.4489814677525574e-5,7.922969966297901e-8,0.003482919510198329,-5.460863179618924e-5,7.942530879637457e-8,0.00348338922468968,-5.4691530175031036e-5,7.955606784582527e-8,0.0034839341482262006,-5.468684887826709e-5,7.953314250976801e-8,0.003484500044929782,-5.456236411226566e-5,7.930171563250027e-8,0.003485020395764967,-5.432242661163013e-5,7.887051211495277e-8,0.003485441830665722,-5.4009666442778456e-5,7.831463037203127e-8,0.003485744308334187,-5.3687830051453043e-5,7.774555423085291e-8,0.003485944356059249,-5.341619454208322e-5,7.726643890430705e-8,0.0034860824605426953,-5.323068031905013e-5,7.69391413336341e-8,0.003486205192699337,-5.313887848336849e-5,7.677573716104043e-8,0.003486351616487765,-5.312585818689202e-5,7.674902644824243e-8,0.003486546989851855,-5.3163832246076e-5,7.680975614919294e-8,0.003486802071512451,-5.322081037736187e-5,7.690188262653895e-8,0.003487115234474545,-5.326655085161755e-5,7.697289095930539e-8,0.003487475361305784,-5.3276107450321254e-5,7.697977967690026e-8,0.00348786468748232,-5.323188756023941e-5,7.689243976502786e-8,0.003488261541112851,-5.3124867656400085e-5,7.669564695902987e-8,0.0034886431118577687,-5.2955187271283527e-5,7.639006967152842e-8,0.0034889883345022694,-5.273207584356439e-5,7.599217164183895e-8,0.00348928082718179,-5.247287143335613e-5,7.553253065060545e-8,0.0034895115406157772,-5.220092938007728e-5,7.505217138911657e-8,0.0034896806403166163,-5.194253721386278e-5,7.45970984578306e-8,0.003489798281891112,-5.17231700616895e-5,7.421163449310192e-8,0.003489884081885023,-5.156346255637453e-5,7.393127924950925e-8,0.0034899651917605482,-5.1475349070217194e-5,7.37759579390884e-8,0.0034900730046242873,-5.145880727187514e-5,7.374448490150087e-8,0.0034902384487222934,-5.149957504391051e-5,7.38108940008001e-8,0.003490485713360978,-5.1568581097192085e-5,7.392383226896056e-8,0.0034908247516596694,-5.162452953725788e-5,7.401135645851316e-8,0.0034912442178913756,-5.162129070334261e-5,7.399384833356589e-8,0.0034917082870866084,-5.152067046187914e-5,7.380600775763368e-8,0.003492161919526589,-5.1307906470345714e-5,7.342344472404727e-8,0.0034925468003312904,-5.100251708159784e-5,7.28812436475048e-8,0.0034928230231711763,-5.065567102917774e-5,7.22692085054129e-8,0.00349298480607223,-5.0332008284307815e-5,7.170010948102879e-8,0.003493060486880091,-5.008509810197167e-5,7.126687367301145e-8,0.0034930978108644877,-4.994040408769448e-5,7.10129659368693e-8,0.003493144812116986,-4.989292212429899e-5,7.092852991350264e-8,0.003493236329890927,-4.991616821749949e-5,7.09664233386691e-8,0.003493389382240401,-4.997451260323819e-5,7.106400377600212e-8,0.0034936049670886314,-5.003303046878982e-5,7.116036558566628e-8,0.0034938724850190725,-5.006315699024087e-5,7.120605641471014e-8,0.003494174181710002,-5.004500801825621e-5,7.116689888635155e-8,0.003494488647240114,-4.9967898958017656e-5,7.10247226686362e-8,0.003494793491455296,-4.983017838931351e-5,7.077701977191036e-8,0.0034950676495118685,-4.963883343406836e-5,7.043629688622425e-8,0.0034952936893218015,-4.940884123717768e-5,7.00290073852739e-8,0.0034954602703394025,-4.91619116469257e-5,6.959337044053813e-8,0.003495564525333123,-4.8924164351532744e-5,6.917524860206665e-8,0.0034956137545527114,-4.872255946766232e-5,6.882178267966077e-8,0.003495625715726868,-4.858035828766625e-5,6.857332667336269e-8,0.003495626962793271,-4.8512296531638016e-5,6.845495049254806e-8,0.003495649053141319,-4.852049680516395e-5,6.846936904534974e-8,0.00349572299679345,-4.859225484338337e-5,6.859329915473242e-8,0.0034958728136478237,-4.870052145709375e-5,6.877863372874697e-8,0.003496109274904872,-4.8807474643686194e-5,6.895900381066696e-8,0.0034964250870034323,-4.887130098211752e-5,6.906179269833887e-8,0.0034967931639454048,-4.885581409325789e-5,6.902485348345956e-8,0.0034971698712657363,-4.874139651093061e-5,6.881530246607359e-8,0.0034975044920154213,-4.853405294472491e-5,6.84449092255104e-8,0.0034977539089692195,-4.82679369446728e-5,6.797415829244196e-8,0.0034978977356623906,-4.799750824878962e-5,6.749837862946622e-8,0.003497946438249529,-4.778016802970108e-5,6.71174247409688e-8,0.003497937170337883,-4.765667743097292e-5,6.690162413586374e-8,0.0034979190953097782,-4.763908471093491e-5,6.687094352623798e-8,0.003497936251514583,-4.771117288133363e-5,6.699607854306233e-8,0.0034980160892215074,-4.783863709240464e-5,6.72164958349271e-8,0.0034981665960245093,-4.798196106874302e-5,6.746304065721289e-8,0.0034983797653029723,-4.810632101892896e-5,6.7675162011292e-8,0.003498637465113023,-4.818668505636025e-5,6.780961989824135e-8,0.003498916867361659,-4.820909523255125e-5,6.784251930616007e-8,0.0034991943722301896,-4.816994545602405e-5,6.77679407084832e-8,0.003499448182358842,-4.8074658565751284e-5,6.759564195017042e-8,0.003499660159392372,-4.793641707463699e-5,6.734892080114882e-8,0.003499817561197899,-4.777495464323169e-5,6.70625616249293e-8,0.0034999149556601225,-4.761498368904733e-5,6.678005875369204e-8,0.0034999561644388504,-4.7483672003196496e-5,6.654908362581237e-8,0.003499955598723389,-4.7406752130685654e-5,6.64145242188782e-8,0.003499937981419274,-4.7403373506660164e-5,6.64093764187308e-8,0.0034999354725625304,-4.748062569635709e-5,6.654518620862992e-8,0.0034999818663642855,-4.762947778629249e-5,6.680512211808298e-8,0.003500104737353191,-4.782411608126126e-5,6.714310459443665e-8,0.0035003176166506283,-4.802589279357225e-5,6.749101949715656e-8,0.0035006147541124916,-4.819155958831892e-5,6.777333062458293e-8,0.0035009704717046735,-4.8283900302600454e-5,6.79257035406021e-8,0.0035013438418472647,-4.828195062171539e-5,6.791269545624289e-8,0.0035016879794580935,-4.818789700989003e-5,6.77394776851162e-8,0.00350196195728518,-4.8028314713332036e-5,6.7453611515929e-8,0.0035021422800556846,-4.784851634702435e-5,6.713486096804716e-8,0.0035022301857497284,-4.770064526201016e-5,6.687425034339409e-8,0.0035022515726871335,-4.762872570098612e-5,6.674801281177754e-8,0.003502248809025409,-4.76559744371242e-5,6.6795665439382e-8,0.0035022673478896467,-4.777938593190681e-5,6.701087743219682e-8,0.003502342631637575,-4.7973344665574994e-5,6.734808187955503e-8,0.0035024922414820824,-4.819969702053791e-5,6.774024524213613e-8,0.003502715017307082,-4.841926028605082e-5,6.811897897486228e-8,0.0035029954034810603,-4.8600480484494276e-5,6.842952899629088e-8,0.003503309784163736,-4.872362633221379e-5,6.863790981889476e-8,0.0035036322351094896,-4.878127146575032e-5,6.873159448741184e-8,0.0035039386022962613,-4.877672372667128e-5,6.871671928860393e-8,0.003504208970165578,-4.87218399559206e-5,6.861430714964363e-8,0.003504429141433504,-4.863501729753385e-5,6.845682584882933e-8,0.00350459182981821,-4.853945290340068e-5,6.828516088744188e-8,0.0035046979735865453,-4.846124060565817e-5,6.814520400131455e-8,0.00350475808642424,-4.842667362547513e-5,6.808297903800876e-8,0.00350479302443529,-4.845822639406622e-5,6.813746753851686e-8,0.003504833027239744,-4.8569169986268695e-5,6.833115419174137e-8,0.003504913702238319,-4.8757838383985466e-5,6.866012446657687e-8,0.0035050683853181447,-4.900391199350466e-5,6.908782646579392e-8,0.0035053182256271995,-4.926964452673352e-5,6.954751938057267e-8,0.003505663509814919,-4.950767016413277e-5,6.995616209346973e-8,0.003506080502214955,-4.967398233611283e-5,7.023720489982495e-8,0.0035065262851390663,-4.974153435641874e-5,7.034430756266863e-8,0.003506950416802348,-4.970896615211756e-5,7.027638385694825e-8,0.003507309058355678,-4.960110682063593e-5,7.0078148342398e-8,0.003507576569966767,-4.9461571981689524e-5,6.982680430100155e-8,0.003507751260505524,-4.9340525835212706e-5,6.961036660223815e-8,0.0035078543380118467,-4.928155435713404e-5,6.950463542881697e-8,0.003507923017411245,-4.931120710474176e-5,6.955507505634865e-8,0.003508000088817847,-4.943373386134086e-5,6.976794205386932e-8,0.0035081230318595195,-4.9631997266688886e-5,7.011223942234489e-8,0.003508315707408989,-4.987372010955851e-5,7.053089174394624e-8,0.003508584634184765,-5.012067906449034e-5,7.095689951327328e-8,0.003508920154172877,-5.033779131119303e-5,7.13291488630146e-8,0.0035093011174319503,-5.0499608977751295e-5,7.16036029544808e-8,0.0035097008909079027,-5.059322819724562e-5,7.175822123658268e-8,0.003510092795370233,-5.0618099620991336e-5,7.179252228933486e-8,0.0035104540074803628,-5.058396686418179e-5,7.172395576915468e-8,0.0035107678630634256,-5.050815563358695e-5,7.15831936559844e-8,0.0035110250474179707,-5.041300190160958e-5,7.140965978633763e-8,0.003511224303772449,-5.0323602655051194e-5,7.124755864747469e-8,0.003511373081760116,-5.026556563032649e-5,7.114182180173342e-8,0.0035114881227789486,-5.026219499321855e-5,7.113303314780363e-8,0.003511595434404246,-5.0330578468163386e-5,7.125049337013055e-8,0.003511728512620591,-5.047647794780582e-5,7.15033405278639e-8,0.0035119233836461974,-5.0689046876978714e-5,7.187153222950117e-8,0.003512209769178392,-5.093800093324406e-5,7.230120436607415e-8,0.003512599955153083,-5.1176799888461815e-5,7.271049692322936e-8,0.003513080034794742,-5.135392592457402e-5,7.300940477436388e-8,0.003513609502076132,-5.14298349934786e-5,7.312941724983363e-8,0.0035141320281950124,-5.139216413429823e-5,7.305001548325024e-8,0.0035145936629104664,-5.1261041454466944e-5,7.28077595651944e-8,0.003514959887450534,-5.108168091747994e-5,7.248300624823855e-8,0.0035152241266274524,-5.090867675710344e-5,7.217204520177112e-8,0.0035154059396990682,-5.078968882418096e-5,7.195828527441259e-8,0.0035155420813633245,-5.075426745699315e-5,7.189270617613542e-8,0.0035156751083582306,-5.0809654038145116e-5,7.198679130075311e-8,0.003515843117254807,-5.094257374417173e-5,7.221607476825528e-8,0.0035160725094786714,-5.112494538587068e-5,7.253048594280297e-8,0.0035163744088703465,-5.132142690619098e-5,7.286773029032713e-8,0.0035167446049327736,-5.1497064920155425e-5,7.316666417595633e-8,0.003517166385541075,-5.1623642515698906e-5,7.337826896105822e-8,0.0035176151934762446,-5.168374224689177e-5,7.347259275945112e-8,0.0035180638474490854,-5.167220679053694e-5,7.344117159692746e-8,0.003518487230567752,-5.159533656149261e-5,7.329555446259182e-8,0.0035188657466365884,-5.146856119474064e-5,7.306321274190783e-8,0.0035191873567905307,-5.13134535075297e-5,7.278232032475649e-8,0.0035194484899109596,-5.1154771029381724e-5,7.249655785721567e-8,0.0035196543025420254,-5.101775638284942e-5,7.225031546170417e-8,0.0035198186084428556,-5.0925530397301455e-5,7.208400788541844e-8,0.0035199635105888586,-5.089622436322815e-5,7.202894163244655e-8,0.003520118343208592,-5.093945103045378e-5,7.210112224469392e-8,0.0035203169511922577,-5.105206016209678e-5,7.229397007328736e-8,0.003520592065648051,-5.1214188069510806e-5,7.2571689142489e-8,0.00352096625240208,-5.138810927673326e-5,7.286756429012272e-8,0.0035214411001403445,-5.1523353653888815e-5,7.309310451119305e-8,0.0035219896591436894,-5.15702050538723e-5,7.316168179423694e-8,0.0035225589618442157,-5.149859927706176e-5,7.302152157725176e-8,0.003523085668432638,-5.1313067895405906e-5,7.268175566529078e-8,0.003523518917940908,-5.105359802726036e-5,7.221375246224139e-8,0.003523838095962248,-5.0780520742168284e-5,7.17243210762634e-8,0.0035240564761216146,-5.0552185506667285e-5,7.13161973079306e-8,0.003524211505779421,-5.040730619616483e-5,7.105688273569124e-8,0.003524349502340482,-5.035813602950126e-5,7.096680808680643e-8,0.0035245122820342207,-5.039321453053906e-5,7.102455458373297e-8,0.003524729076631242,-5.0485092313253465e-5,7.1180850127246e-8,0.003525013583176288,-5.059899047337806e-5,7.137404304621766e-8,0.003525364590777378,-5.070022815478351e-5,7.154318300099117e-8,0.0035257686958330417,-5.075977742115368e-5,7.163764186847562e-8,0.003526204144558562,-5.075793251795897e-5,7.16233638631601e-8,0.003526645154897335,-5.06861406598159e-5,7.148591957241648e-8,0.003527066167471657,-5.0547118838004726e-5,7.123062042100954e-8,0.0035274455836368955,-5.03535175473795e-5,7.088014482938875e-8,0.003527768623758874,-5.012545639882056e-5,7.047021401502236e-8,0.0035280290362206864,-4.988738877980477e-5,7.004408058198917e-8,0.0035282296839363246,-4.966483945398808e-5,6.964675729891865e-8,0.003528382291270085,-4.9481325891113706e-5,6.931952735975422e-8,0.003528506567199636,-4.935546278755109e-5,6.909476075587484e-8,0.003528628724271695,-4.929815291741338e-5,6.899092748257108e-8,0.0035287791842859104,-4.9309749713025403e-5,6.900767973450815e-8,0.0035289888641371506,-4.9377284113068966e-5,6.912119895490268e-8,0.003529283256307753,-4.947268367777429e-5,6.92813827041382e-8,0.0035296742313782816,-4.955407009659888e-5,6.941439827038625e-8,0.003530151349516904,-4.957278427309963e-5,6.943511266213218e-8,0.0035306772094212354,-4.948747198735312e-5,6.92717079077621e-8,0.003531192964839601,-4.928195652942658e-5,6.889685346018671e-8,0.0035316365215482056,-4.89774365236009e-5,6.834895029601523e-8,0.003531966575744259,-4.862874958980648e-5,6.772540073203424e-8,0.0035321786442322665,-4.830377164926679e-5,6.714615431489767e-8,0.003532303511122255,-4.805750770984733e-5,6.670788672264682e-8,0.0035323910644271955,-4.7915439884981005e-5,6.645464473265158e-8,0.003532490905278016,-4.787198094158151e-5,6.637538089556046e-8,0.0035326391070453276,-4.7899603242805185e-5,6.6420465804465665E-08,0.003532853457600977,-4.79609329089279e-5,6.652335567882734e-8,0.003533134764875135,-4.801870810507902e-5,6.661826425948239e-8,0.0035334709225311187,-4.80420607780708e-5,6.6651124930788e-8,0.0035338414892082007,-4.800969554135657e-5,6.658497123133597e-8,0.003534221883309781,-4.791109649069916e-5,6.640185991590025e-8,0.0035345870911481937,-4.774650430734176e-5,6.610271983901248e-8,0.003534914922415681,-4.7525956167852065e-5,6.570564041722356e-8,0.003535188784668761,-4.726751897573049e-5,6.524278234784632e-8,0.003535399869757837,-4.699475689773158e-5,6.475593288560843e-8,0.003535548488616758,-4.673352273796198e-5,6.429082959559262e-8,0.0035356443027719678,-4.6508419457597334e-5,6.389085743601263e-8,0.003535705452163371,-4.633936348530399e-5,6.359090277517784e-8,0.0035357567090917945,-4.623851257366044e-5,6.341187165168234e-8,0.003535826730715225,-4.6207747236638295e-5,6.335626221346214e-8,0.0035359444328626815,-4.62369186224868e-5,6.340521229944e-8,0.0035361343987252193,-4.6303140463713727e-5,6.351750974087675e-8,0.0035364112077063,-4.637182901460024e-5,6.363172583245652e-8,0.0035367731674912405,-4.640084478194753e-5,6.367372155706706e-8,0.003537197303637594,-4.634911429135081e-5,6.357183762261232e-8,0.0035376391122535576,-4.618966433176537e-5,6.327964211385549e-8,0.003538041119459337,-4.592349949638268e-5,6.280007246840904e-8,0.0035383510638224264,-4.558644822183458e-5,6.219724757422401e-8,0.0035385429814836127,-4.524104977366377e-5,6.158200500178063e-8,0.0035386287865788782,-4.495389988038994e-5,6.107183348045023e-8,0.003538652157842681,-4.477026159769317e-5,6.074602879654554e-8,0.0035386688439036844,-4.47004078804151e-5,6.062170724859673e-8,0.003538726003163398,-4.4722809906257866e-5,6.065974926915645e-8,0.0035388505435425223,-4.4797903515981296e-5,6.078947944701308e-8,0.003539047874416657,-4.488281287540454e-5,6.093489620785433e-8,0.0035393068814284787,-4.4941391084842396e-5,6.103238884542969e-8,0.003539606554146499,-4.494882794965666e-5,6.103867464873075e-8,0.003539921676724328,-4.4892499760318906e-5,6.093205597538492e-8,0.003540226919719803,-4.477102781459113e-5,6.07105950251088e-8,0.0035404997394379314,-4.4592754938286915e-5,6.03893845810904e-8,0.0035407226338242614,-4.437398906963968e-5,5.999749164758063e-8,0.003540885022134315,-4.413694086471505e-5,5.957436958624628e-8,0.0035409847601478635,-4.3907158055120185e-5,5.91653320895687e-8,0.003541029039603609,-4.371029443432704e-5,5.881578782502931e-8,0.003541034222876167,-4.3568356911767184e-5,5.856451374224705e-8,0.0035410242820919035,-4.34959360356527e-5,5.843690932693798e-8,0.0035410278165807162,-4.349704460319828e-5,5.8439391136652944e-8,0.003541073866467474,-4.35631774348635e-5,5.8556051173999174e-8,0.003541186954993939,-4.367314619920436e-5,5.874856491748497e-8,0.0035413819586960823,-4.379504612211161e-5,5.895993621631804e-8,0.003541659481115643,-4.389056974908652e-5,5.9122364071120686e-8,0.0035420026717852874,-4.392188556736655e-5,5.9169501196338025e-8,0.0035423770266627625,-4.386091460591744e-5,5.9052739202674654e-8,0.003542735137307152,-4.369954534362978e-5,5.8758966934382756e-8,0.003543027709928473,-4.345726115647605e-5,5.8323693696870554e-8,0.003543219432923343,-4.318096116450492e-5,5.783045574779396e-8,0.0035433037039722254,-4.293306375151269e-5,5.7389662664115485e-8,0.003543307510625984,-4.2770211481893025e-5,5.710096925546551e-8,0.003543281657416864,-4.2722564889928e-5,5.7016803661170176e-8,0.0035432808969128654,-4.2784998811324036e-5,5.7127048886294805e-8,0.003543345083182791,-4.29237431526913e-5,5.7371094348610354e-8,0.0035434901225729534,-4.309218173774192e-5,5.766603094543882e-8,0.0035437096200434323,-4.324625449648452e-5,5.793397699501254e-8,0.003543982437111229,-4.335377416740421e-5,5.811844457672117e-8,0.003544280963361055,-4.339731616568985e-5,5.81892230593214e-8,0.003544577345674607,-4.337307492070495e-5,5.814014309175838e-8,0.0035448472547188253,-4.328818788598209e-5,5.798423922921832e-8,0.003545071945356522,-4.315800457900615e-5,5.774893393946444e-8,0.0035452395202854154,-4.300371531604833e-5,5.7471914844255585e-8,0.0035453459408502194,-4.285012265748278e-5,5.719723861116069e-8,0.0035453958923160433,-4.2723120313231096e-5,5.697084279090594e-8,0.0035454032149012556,-4.264651128545993e-5,5.683482254338785e-8,0.0035453903011499546,-4.2638151061864956e-5,5.682050114724788e-8,0.003545385835098054,-4.270593783651835e-5,5.6941284815840156e-8,0.0035454206037119564,-4.2844639289619016e-5,5.718710304786205e-8,0.003545521737679013,-4.3034763683612925e-5,5.7522579910149e-8,0.0035457064554863466,-4.3244478586494526e-5,5.7890672855239426e-8,0.0035459768841103315,-4.343484771283477e-5,5.822218243869248e-8,0.0035463175130871715,-4.35676865911608e-5,5.8449803092231185e-8,0.003546696374372438,-4.361459001005239e-5,5.852408386886376e-8,0.003547070408275864,-4.3565227278255075e-5,5.842791123349795e-8,0.0035473947092906958,-4.343266116837182e-5,5.8185596798430805e-8,0.003547634245769986,-4.3253317404532224e-5,5.786248016398101e-8,0.003547775128552845,-4.307980993012999e-5,5.755198880500784e-8,0.0035478310759871168,-4.296686019185961e-5,5.7350653828112885e-8,0.003547840931561206,-4.295416001320256e-5,5.732790326738767e-8,0.003547856465191098,-4.305323561587963e-5,5.7503072995357236e-8,0.0035479251065484753,-4.3244764513410865e-5,5.7840967381065036e-8,0.0035480755467052556,-4.3487437490787506e-5,5.82678059755974e-8,0.003548312159234838,-4.3733132149183526e-5,5.869821561074207e-8,0.003548618609759482,-4.394085957403888e-5,5.9059893258797215e-8,0.0035489665155445534,-4.4084657379925696e-5,5.930742385274079e-8,0.0035493243155301293,-4.4155064485646884e-5,5.94246850590516e-8,0.0035496635912923074,-4.415657349882108e-5,5.942017343141657e-8,0.003549962454933137,-4.4103723515838815e-5,5.932002348157367e-8,0.0035502068853032385,-4.401745537774121e-5,5.91615814739689e-8,0.0035503910919313167,-4.392223541541534e-5,5.898836758135166e-8,0.0035505176599334156,-4.3843716170544275e-5,5.884594653272736e-8,0.0035505977261718136,-4.3806355923926305e-5,5.877765373835154e-8,0.0035506509029348764,-4.38304481117814e-5,5.881923373523053e-8,0.0035507042417583052,-4.392838644885185e-5,5.8992150582505356e-8,0.003550789375607358,-4.4100629561268414e-5,5.9296460179193444e-8,0.0035509372747178996,-4.4332623510118206e-5,5.970549942120029e-8,0.0035511709877155606,-4.459455929913146e-5,6.016568287046157e-8,0.0035514981633926815,-4.4845618151110135e-5,6.060425933750863e-8,0.0035519062473257645,-4.504285818124529e-5,6.094521953949166e-8,0.003552363010141798,-4.515265199572119e-5,6.112959670344877e-8,0.0035528232538145662,-4.516091931665212e-5,6.113348597576136e-8,0.0035532400588138987,-4.5078419810363994e-5,6.097717700290937e-8,0.0035535771481694945,-4.4939099071296303e-5,6.07218955472018e-8,0.0035538186514130496,-4.479186991256323e-5,6.045492489427308e-8,0.0035539735035672354,-4.4688098423139305e-5,6.02672442098929e-8,0.0035540731748337205,-4.466810631879039e-5,6.022963420680442e-8,0.0035541630731403067,-4.475043551216551e-5,6.037388305148787e-8,0.003554289865126375,-4.4927280773815736e-5,6.068503341769779e-8,0.0035544886846951913,-4.516779476639947e-5,6.110755581298996e-8,0.0035547745839082123,-4.542805241964009e-5,6.156319330980759e-8,0.0035551408759050616,-4.5663759910920776e-5,6.197350799964669e-8,0.003555563963135248,-4.5841008864221135e-5,6.227883337795943e-8,0.0035560116876657694,-4.5941979139417047e-5,6.24482093400329e-8,0.0035564516280192447,-4.596527201117455e-5,6.24798008660841e-8,0.003556857010155012,-4.592266312849646e-5,6.239502440655055e-8,0.003557209714814007,-4.5834565631833704e-5,6.223046308066282e-8,0.003557501080364987,-4.572581403912075e-5,6.203040815733011e-8,0.0035577315537230697,-4.562240269450946e-5,6.184110140786349e-8,0.003557910036471095,-4.554903608560832e-5,6.170637764909142e-8,0.0035580533024840793,-4.552692161730423e-5,6.166368747736406e-8,0.0035581853049642667,-4.557119728743023e-5,6.173946177102266e-8,0.0035583356940717664,-4.568768485662425e-5,6.194333838364082e-8,0.0035585365708927026,-4.586927857225371e-5,6.226185510588425e-8,0.0035588166627198116,-4.609326999183041e-5,6.265390851272246e-8,0.003559193137323904,-4.632193829336071e-5,6.30520372167614e-8,0.003559663281878733,-4.650876999059089e-5,6.337362542760012e-8,0.003560200245713937,-4.661063021140253e-5,6.354254648899662e-8,0.0035607569317794813,-4.6602396654738655e-5,6.351506594055439e-8,0.003561278648384015,-4.6487494514614917e-5,6.32983887923139e-8,0.0035617199935504846,-4.6298558243764545e-5,6.29516014692535e-8,0.003562058627582537,-4.608741314362649e-5,6.256758166751812e-8,0.0035623004672044175,-4.5909078533960046e-5,6.224430829280521e-8,0.003562475581175662,-4.5806486601264316e-5,6.205760310203278e-8,0.0035626279001984354,-4.580067735294027e-5,6.204384806523509e-8,0.003562802954124633,-4.5888015756848204e-5,6.219537779330008e-8,0.003563037055132452,-4.6043654273636875e-5,6.246701201447148e-8,0.003563350070700666,-4.622932203076322e-5,6.27901620525839e-8,0.0035637427913076075,-4.6403085941301916e-5,6.309025042503193e-8,0.003564198880158738,-4.6528682381631946e-5,6.330320173165173e-8,0.0035646903766327347,-4.658232632749611e-5,6.338736538669235e-8,0.0035651848849890845,-4.6555732749513495e-5,6.332870370697999e-8,0.0035656523705938485,-4.645535269046844e-5,6.313929883122431e-8,0.0035660700713561725,-4.6298937321714985e-5,6.285117367268997e-8,0.003566425004528302,-4.611096934697695e-5,6.250815533966789e-8,0.0035667143995241142,-4.591827694533483e-5,6.215809174271331e-8,0.0035669448573334944,-4.574655007561588e-5,6.184666832943819e-8,0.0035671310343054594,-4.561778706202556e-5,6.161284724828767e-8,0.0035672942787601126,-4.554824175451044e-5,6.148516952915002e-8,0.0035674611803288114,-4.5546361387194964e-5,6.147805454901015e-8,0.003567661543033928,-4.5610385548273515e-5,6.158757512312564e-8,0.003567924912442449,-4.5725767445714075e-5,6.178702994408387e-8,0.0035682748142848095,-4.5863544983274e-5,6.202428486357496e-8,0.0035687207877180566,-4.598192357438832e-5,6.222480065079293e-8,0.0035692503506583244,-4.603366023380281e-5,6.230484445613422e-8,0.0035698255742100237,-4.597995195287227e-5,6.219611092854864e-8,0.0035703895352063105,-4.580682740172019e-5,6.187471998839677e-8,0.003570883632004423,-4.553525834522834e-5,6.137904502638934e-8,0.003571268864222055,-4.521699225352601e-5,6.080211684283172e-8,0.0035715396695708015,-4.4916408899932836e-5,6.025908338968015e-8,0.003571723198393817,-4.468799023289393e-5,5.984686372144387e-8,0.003571866379697392,-4.456067955242553e-5,5.961625196141818e-8,0.0035720191409290983,-4.453406964456066e-5,5.956536150564443e-8,0.0035722211083410766,-4.458410992868764e-5,5.965019352482582e-8,0.003572494625911943,-4.4673173061435514e-5,5.980293252365561e-8,0.0035728434568544545,-4.476028636567257e-5,5.995034390494367e-8,0.0035732552997467812,-4.480936493091201e-5,6.002839604720158e-8,0.003573706429317807,-4.479480285769821e-5,5.99920413721776e-8,0.0035741673042217212,-4.4704415364411226e-5,5.982025244393188e-8,0.0035746082437256763,-4.45398457623661e-5,5.951659167339322e-8,0.003575004335958261,-4.43147481520429e-5,5.9105889956792483e-8,0.003575338940318722,-4.405137481478573e-5,5.862814161090186e-8,0.0035756054724064797,-4.3776367002100296e-5,5.81310100746709e-8,0.0035758075061845546,-4.3516565870462726e-5,5.766237414128631e-8,0.0035759576042431298,-4.32955011747464e-5,5.726406668644314e-8,0.003576075473322457,-4.313078064462699e-5,5.696719548910158e-8,0.0035761858511276887,-4.3032185858342236e-5,5.678871564724287e-8,0.0035763162079560256,-4.300017921430965e-5,5.672876610846801e-8,0.0035764940524594456,-4.3024605140873026e-5,5.6768438605918676e-8,0.0035767432881861085,-4.30836704446525e-5,5.686814868430869e-8,0.0035770790275487753,-4.314407216803266e-5,5.6968106744896594e-8,0.0035775010573515023,-4.3164050813275044e-5,5.699394484154996e-8,0.003577987803146952,-4.310136895375068e-5,5.6870952361826546e-8,0.0035784948165471183,-4.292678335936257e-5,5.65479221696561e-8,0.003578962840272767,-4.2639405852658924e-5,5.602429479005061e-8,0.003579336851006414,-4.227498438897039e-5,5.536473452635238e-8,0.003579588685688661,-4.18979968512765e-5,5.468488805835137e-8,0.0035797296080622783,-4.1578011198993515e-5,5.4109049105691114e-8,0.0035798042114301037,-4.1363105981440804e-5,5.372259413331688e-8,0.0035798702564199783,-4.126542984896543e-5,5.354626012529212e-8,0.0035799774382410184,-4.126391236459329e-5,5.354128307652321e-8,0.003580154993927935,-4.1317791469285e-5,5.363395239974795e-8,0.003580409608935486,-4.1381581597515776e-5,5.374262013811699e-8,0.003580729783643385,-4.1415934670145685e-5,5.3797139133405634e-8,0.003581092408746188,-4.139336320909661e-5,5.3748926352074026e-8,0.003581469034566333,-4.130007224972205e-5,5.357400193982709e-8,0.0035818310034735766,-4.1135487314135264e-5,5.3271956810880735e-8,0.0035821534692491988,-4.0910476824976e-5,5.286268340386592e-8,0.003582418418358619,-4.06446935945381e-5,5.238161243589318e-8,0.0035826166797022483,-4.0363280171443215e-5,5.187384845082181e-8,0.00358274884529989,-4.009317462540421e-5,5.1387588037206476e-8,0.003582824995614943,-3.985933882274082e-5,5.096737917280055e-8,0.0035828632611508504,-3.9681384105172434e-5,5.064806914993073e-8,0.0035828875139954875,-3.957098298811167e-5,5.045014818249678e-8,0.003582924529544475,-3.953016479695639e-5,5.0376688098463605e-8,0.00358300081862799,-3.955047708564117e-5,5.0411877426842314e-8,0.0035831392261010796,-3.961300640930363e-5,5.052117648958689e-8,0.003583355214352302,-3.968931328155379e-5,5.065319072165797e-8,0.0035836526718863154,-3.974377438611344e-5,5.074407946967609e-8,0.003584019676710392,-3.973841845099247e-5,5.072633320424865e-8,0.0035844258489106545,-3.9641235948389545e-5,5.0543575221023724e-8,0.003584824176308066,-3.943762986883524e-5,5.0170788891649215e-8,0.0035851605988330357,-3.914173842671066e-5,4.963424297277142e-8,0.0035853918960880448,-3.880043670747472e-5,4.9018405921792256e-8,0.003585505322328108,-3.848249328671764e-5,4.844644654517097e-8,0.003585527515563994,-3.8253569503164206e-5,4.803549689485371e-8,0.0035855144146158527,-3.8149888897543195e-5,4.784960245800021e-8,0.0035855273906091824,-3.8166487904675314e-5,4.787887836846632e-8,0.0035856104495281117,-3.8265157169492204e-5,4.805402080142565e-8,0.0035857798816200707,-3.8393560363288984e-5,4.828082047147677e-8,0.0035860268763078557,-3.8503227747035004e-5,4.847250586230702e-8,0.003586326680961035,-3.855986372475001e-5,4.8568113786697065e-8,0.003586648121636525,-3.8546152355993225e-5,4.853728942981486e-8,0.0035869605978639182,-3.846010828728895e-5,4.837710529272839e-8,0.003587238303345829,-3.8311783073421156e-5,4.810602981932446e-8,0.0035874625495865785,-3.811982896336047e-5,4.775775329407981e-8,0.00358762304655042,-3.790829412712801e-5,4.7375493462969575e-8,0.003587718543212155,-3.7703539314087314e-5,4.700651815697953e-8,0.0035877568854504843,-3.753109690746856e-5,4.669652828927809e-8,0.0035877543189045003,-3.741240911193318e-5,4.648378792509094e-8,0.0035877337821993926,-3.736170012036886e-5,4.639348279578213e-8,0.003587722146397466,-3.738348798138e-5,4.643324183247487e-8,0.003587746637258956,-3.747117499085622e-5,4.659063494568057e-8,0.0035878308010265218,-3.760702188597041e-5,4.683321176191194e-8,0.0035879904688035855,-3.776372946249842e-5,4.7111485215557924e-8,0.0035882302134709367,-3.790765307608103e-5,4.736488113389693e-8,0.0035885407027646038,-3.800358818517712e-5,4.753047496748133e-8,0.0035888975265631912,-3.802122612155703e-5,4.755460390198331e-8,0.003589262683625903,-3.7943134492679234e-5,4.740703403510289e-8,0.003589590313060849,-3.777295305645327e-5,4.709535929441549e-8,0.0035898376636516174,-3.754070148435225e-5,4.6674180657203245e-8,0.003589979939820703,-3.730052104784748e-5,4.6240824276023414e-8,0.003590023371945228,-3.711708048632642e-5,4.5910925049693536e-8,0.0035900077501635065,-3.7042871910765236e-5,4.577784781514526e-8,0.0035899933020088546,-3.709707415007798e-5,4.587502096050476e-8,0.003590037208575344,-3.725873614994456e-5,4.6163979998570615e-8,0.0035901730111987757,-3.747812082032692e-5,4.655494611376622e-8,0.0035904033060219416,-3.769784537258867e-5,4.6944876133643913e-8,0.003590705852666982,-3.787137405914086e-5,4.725061888805473e-8,0.0035910458330059257,-3.7972004750569304e-5,4.7424881917477886e-8,0.0035913870901548824,-3.799305368319623e-5,4.7456342834723396e-8,0.003591699210907479,-3.794340612840332e-5,4.736148608065085e-8,0.0035919606768198722,-3.7842095199116786e-5,4.7174801397497153e-8,0.0035921596171359957,-3.7713708795726786e-5,4.6940568127754947e-8,0.003592293558379161,-3.758490512066759e-5,4.6706667488679346e-8,0.0035923688823323,-3.7481625279828046e-5,4.651961895285797e-8,0.0035924001126666325,-3.742650014676788e-5,4.641991343171655e-8,0.003592408782381076,-3.743612894819133e-5,4.643708427178588e-8,0.0035924214411165024,-3.751830128528744e-5,4.6584688608919025e-8,0.0035924664696293106,-3.7669705308534085e-5,4.685621045027915e-8,0.003592569774155505,-3.7874901547291835e-5,4.7223301285490726e-8,0.003592749902450613,-3.810728859606727e-5,4.763765035237718e-8,0.0035930135281971444,-3.833251364146036e-5,4.8037268016193544e-8,0.003593352477999401,-3.85142094254474e-5,4.835692293551611e-8,0.003593743318325711,-3.862124028617287e-5,4.8541211620976406e-8,0.0035941500803349773,-3.8635219635304036e-5,4.855799005285224e-8,0.0035945303054739485,-3.8556856029829644e-5,4.8409563859566875e-8,0.0035948441441678958,-3.84093266238022e-5,4.8138450958546775e-8,0.0035950652932258955,-3.823653707192244e-5,4.7823971958565097E-08,0.003595191000352243,-3.809453371200407e-5,4.7566669363102354e-8,0.003595246796889517,-3.803631027123147e-5,4.7461060314247433E-08,0.0035952816700368603,-3.809404780623166e-5,4.756396298769029e-8,0.0035953529476908017,-3.826654280703843e-5,4.7872228760978966e-8,0.0035955064360887307,-3.851914359448242e-5,4.832290540180464e-8,0.0035957614102684605,-3.8797097685212365e-5,4.8817364790469434e-8,0.0035961074408753227,-3.904519065318432e-5,4.925659081088645e-8,0.0035965125426542463,-3.922380619036841e-5,4.9569925989950274e-8,0.0035969362675940465,-3.9315732962972006e-5,4.972712682605005e-8,0.003597341109482439,-3.932441886961113e-5,4.9735041797245097e-8,0.0035976991308152764,-3.9267828750470704e-5,4.962644042986901e-8,0.0035979941492756103,-3.917176770050048e-5,4.944797265987095e-8,0.0035982212646163817,-3.906461231436291e-5,4.925073309806581e-8,0.0035983853864858173,-3.8973731332623625e-5,4.9083882869826816e-8,0.003598499705108412,-3.8923037020490345e-5,4.899027237780294e-8,0.003598584313547959,-3.893093107139329e-5,4.900272753215885e-8,0.003598664665047769,-3.900814200916675e-5,4.914012707459969e-8,0.003598769295912446,-3.91554181102269e-5,4.940325446403414e-8,0.003598926296552057,-3.936159589408526e-5,4.9771395938974046e-8,0.0035991584178781378,-3.9603052569638225e-5,5.020149262688757e-8,0.0035994774570306106,-3.9845742495034574e-5,5.063196470603437e-8,0.003599879456446016,-4.0050595060088164e-5,5.099254875986903e-8,0.0036003427551529487,-4.018188155414745e-5,5.121939647495595e-8,0.0036008305267239238,-4.021666105614067e-5,5.127201267350899e-8,0.003601298082359539,-4.015241628723848e-5,5.114683795044416e-8,0.0036017034785005065,-4.001010080325409e-5,5.0882498429844205e-8,0.0036020186446318633,-3.983102151691306e-5,5.055393791953197e-8,0.00360223784043595,-3.966773922720605e-5,5.025583994965174e-8,0.0036023807275160397,-3.957088011118183e-5,5.0078834765566855e-8,0.0036024884440489483,-3.957514576006304e-5,5.008445593779248e-8,0.003602612836630004,-3.9688759093846825e-5,5.028643421396089e-8,0.003602801507346342,-3.9890448396384285e-5,5.064559582445518e-8,0.0036030837132397233,-4.013591224250133e-5,5.1081729897139555e-8,0.0036034625787910108,-4.037175117016467e-5,5.149873123423126e-8,0.0036039164745840613,-4.0551277524241955e-5,5.181297742668326e-8,0.0036044080529050305,-4.0646004294966926e-5,5.197384946590186e-8,0.00360489619893693,-4.064945869958866e-5,5.197041780922286e-8,0.0036053460251226866,-4.0574082061552914e-5,5.182570742191499e-8,0.0036057344318386826,-4.044453999591332e-5,5.158455566701788e-8,0.0036060514579108944,-4.029075668722807e-5,5.130104481965624e-8,0.003606299011004411,-4.01424970484346e-5,5.1028778692332877e-8,0.0036064885833287518,-4.0025849226308426e-5,5.081459498933569e-8,0.003606638973317254,-3.9961099891688534e-5,5.069476213733481e-8,0.003606774332411993,-3.9961203232245695e-5,5.069221405358963e-8,0.0036069222452277806,-4.003023028212907e-5,5.081374865009258e-8,0.0036071112182922568,-4.016168303508934e-5,5.1047028727656355e-8,0.003607366963232316,-4.033714988858951e-5,5.135826999643147e-8,0.0036077072303672525,-4.0526398781894345e-5,5.169257162187404e-8,0.0036081358410376746,-4.069044856608033e-5,5.19795998409735e-8,0.00360863791472181,-4.0788768684664725e-5,5.214662964419998e-8,0.0036091792602710175,-4.079000858969095e-5,5.2137837160242114e-8,0.003609712280943959,-4.068309768113012e-5,5.1934170132578293e-8,0.0036101880918484254,-4.04838562463079e-5,5.1565076095717744e-8,0.0036105710604826644,-4.0233135214053623e-5,5.11049366675387e-8,0.0036108500263461432,-3.998610781681087e-5,5.065355467128838e-8,0.003611041677968052,-3.9796540409886596e-5,5.0307660035659015e-8,0.0036111851665100313,-3.970186618515915e-5,5.0134017422303575e-8,0.0036113304864999287,-3.971382372907988e-5,5.0152753919674675e-8,0.0036115247250119607,-3.98167918000583e-5,5.033467938084641e-8,0.0036118001491949494,-3.997345877334354e-5,5.061180843179813e-8,0.003612167114637999,-4.013564216404726e-5,5.089703004119631e-8,0.0036126132814578962,-4.025692196720492e-5,5.110687626163271e-8,0.0036131087640671185,-4.0303479742982214e-5,5.118093281193777e-8,0.0036136150876857724,-4.026034802700086e-5,5.109292725088119e-8,0.003614094856008835,-4.0132016043704154e-5,5.085165351686192e-8,0.0036145193074628326,-3.993836208888382e-5,5.0493512681573206e-8,0.003614872292763547,-3.9708210576448246e-5,5.0070825982924494e-8,0.003615150815762236,-3.947285164647236e-5,4.9640137095099506e-8,0.0036153632808230353,-3.926096931140428e-5,4.9253097195019005e-8,0.0036155267616432177,-3.909538048400595e-5,4.89506275147321e-8,0.0036156642392711075,-3.8991230807476714e-5,4.8759693003331155e-8,0.0036158021749105296,-3.895495080175904e-5,4.86914245950835e-8,0.0036159682275933073,-3.8983383111791493e-5,4.873955389149923e-8,0.003616188577386115,-3.9062911493915725e-5,4.887889729439448e-8,0.0036164842465590077,-3.9168981167351876e-5,4.906461395007111e-8,0.003616866127419069,-3.926707099410478e-5,4.9234122993500053E-08,0.003617329348913702,-3.931673398289274e-5,4.9314522167269587e-8,0.003617849150796829,-3.928001916208648e-5,4.923780665633049e-8,0.003618381798653043,-3.913360777112033e-5,4.896267227430695e-8,0.0036188735440883186,-3.888055553865431e-5,4.849554188132768e-8,0.003619276853702225,-3.855491658006466e-5,4.789873129478229e-8,0.0036195676184713646,-3.821416389457841e-5,4.7276580612196774e-8,0.0036197545025373444,-3.792090095161403e-5,4.6742254073388355e-8,0.0036198753513412853,-3.772222272857822e-5,4.6380371688515686e-8,0.0036199830801991757,-3.763623905030227e-5,4.6222755173165736e-8,0.00362012849213772,-3.7650144684676776e-5,4.624521707582522e-8,0.003620346940104583,-3.77278873639625e-5,4.6381754134727366e-8,0.0036206519317770578,-3.7822429509832206e-5,4.654694600928876e-8,0.0036210353347296935,-3.788800232657244e-5,4.6658156643896576e-8,0.0036214722356083732,-3.7889552847069945e-5,4.665250017723497e-8,0.0036219282737146377,-3.7808250334028e-5,4.6496606350338104e-8,0.003622367558528604,-3.764294604213074e-5,4.618907856043481e-8,0.003622759613618764,-3.740807222574171e-5,4.5756568470016735e-8,0.003623084197594277,-3.7129000539556704e-5,4.524531717165578e-8,0.0036233334897944123,-3.6836271033352585e-5,4.471070197478162e-8,0.003623511822352105,-3.656004150987419e-5,4.42072171491852e-8,0.003623633625770037,-3.632568696345636e-5,4.378055463898182e-8,0.0036237204746564565,-3.615095303416537e-5,4.3462496938331666e-8,0.0036237980238943072,-3.604451542869379e-5,4.326833725239851e-8,0.0036238932087061873,-3.600542881626248e-5,4.3195891834918523e-8,0.0036240316260941043,-3.6022998605292114e-5,4.322528366433578e-8,0.003624234754252283,-3.6076927455552074E-05,4.331926852948421e-8,0.0036245165668879796,-3.613800749232242e-5,4.34246123367742e-8,0.003624879311897084,-3.617023187311202e-5,4.3476066000601294e-8,0.0036253090835464646,-3.6135726391495956e-5,4.3405390637871034e-8,0.0036257732585274127,-3.6003592967351125e-5,4.315733397260209e-8,0.0036262232058954036,-3.576186980901324e-5,4.271111422394686e-8,0.003626605331546473,-3.542823247726426e-5,4.209956869519151e-8,0.003626879436036661,-3.50518579454549e-5,4.1412337399755736e-8,0.0036270365079126123,-3.470071004044956e-5,4.0772704917605835e-8,0.0036271047904969573,-3.443736111457935e-5,4.029373159298715e-8,0.0036271389316380864,-3.429581521273013e-5,4.003629528591115e-8,0.0036271983746661196,-3.427189565117347e-5,3.999186380888534e-8,0.0036273272627723543,-3.433001504928174e-5,4.009507060595036e-8,0.0036275443605000503,-3.441929039714666e-5,4.02532013146905e-8,0.003627843559349204,-3.448978456372097e-5,4.037574941419381e-8,0.0036282007307444626,-3.450355291645972e-5,4.039436204166938e-8,0.0036285824334346233,-3.443962968437811e-5,4.027168052144104e-8,0.003628953774846586,-3.4294406238919776e-5,4.000181674287031e-8,0.003629284453436167,-3.4079224683629005e-5,3.960585055025596e-8,0.00362955288864694,-3.381643465683662e-5,3.912462715686188e-8,0.0036297485036715003,-3.353465476085004e-5,3.8610171191587416e-8,0.0036298722480067286,-3.3263883330298314e-5,3.811684927278125e-8,0.003629935574821214,-3.303104643643447e-5,3.769332757952957e-8,0.003629958188257625,-3.285642390889165e-5,3.737611903004188e-8,0.003629964993502037,-3.275128511796277e-5,3.7185320702803963e-8,0.0036299828010852926,-3.271683137367501e-5,3.712271268820873e-8,0.003630037189355566,-3.274419552984249e-5,3.7171770693712e-8,0.003630149597490292,-3.281517977483511e-5,3.729903127915843e-8,0.0036303345419651353,-3.290362286671258e-5,3.7456641443449155e-8,0.0036305967997701106,-3.297753462876925e-5,3.758635247116539e-8,0.003630928513207681,-3.300252642506156e-5,3.762587782766384e-8,0.0036313068265694214,-3.294744940956532e-5,3.7519188323039196e-8,0.00363169380297549,-3.2792780456482834e-5,3.7231652891866554e-8,0.0036320412779389313,-3.254062980327011e-5,3.676798183842747e-8,0.0036323028298620714,-3.222229600651305e-5,3.618566999286661e-8,0.00363245144150968,-3.1896535693968474e-5,3.559165692670533e-8,0.003632494924818845,-3.163343128727202e-5,3.5112974053962996e-8,0.003632477752238004,-3.148784739433187e-5,3.4848610971418145e-8,0.0036324645616411712,-3.147677766139223e-5,3.4828549478256566e-8,0.003632513929295136,-3.1574620316264846e-5,3.5005434477029905e-8,0.0036326579319382944,-3.1727711619258e-5,3.528122902984301e-8,0.0036328967617592235,-3.187682011716218e-5,3.554823526809591e-8,0.0036332061434049393,-3.197502524181992e-5,3.572156454636925e-8,0.0036335495974229026,-3.1995847248725226e-5,3.575374279393732e-8,0.003633889293870905,-3.19333227910892e-5,3.563461873953822e-8,0.003634193172744235,-3.17978842240923e-5,3.538369154094479e-8,0.003634438615965457,-3.161109030916799e-5,3.504045625380042e-8,0.003634613855985011,-3.1400671454106465e-5,3.465541572534082e-8,0.003634718071699902,-3.11961575856113e-5,3.428219175465637e-8,0.003634760562279025,-3.102500639946222e-5,3.3970535921702535e-8,0.0036347591134491177,-3.0909251987672765e-5,3.376025962304962e-8,0.003634737607805422,-3.086278268132625e-5,3.367629517795057e-8,0.0036347229490649663,-3.088948453492992e-5,3.372533325761154e-8,0.003634741563228235,-3.0982560065987805e-5,3.389460784514429e-8,0.003634815901229414,-3.112512713113596e-5,3.4153020033679004e-8,0.0036349612766972193,-3.129198170965659e-5,3.4454394956192596e-8,0.003635183245992869,-3.145240784677646e-5,3.4742669582784826e-8,0.0036354757079425717,-3.1573956992053166e-5,3.495886526255861e-8,0.0036358199160614058,-3.1627212256825974e-5,3.504983415027823e-8,0.0036361849045063073,-3.159171660721317e-5,3.4979039620345153e-8,0.003636530479561921,-3.1462895172653124e-5,3.473901011215707e-8,0.0036368142578559253,-3.1258495477149596e-5,3.436280051338025e-8,0.003637003387374721,-3.102115681331883e-5,3.3928392231956515e-8,0.003637088755021439,-3.081237158304347e-5,3.35475459720963e-8,0.003637094946225761,-3.069500019812094e-5,3.333402234292594e-8,0.0036370770559699434,-3.0708848592774254e-5,3.335935424561485e-8,0.0036371013292986853,-3.085231309250355e-5,3.361973574732224e-8,0.0036372186076369544,-3.108268917674487e-5,3.4036836713625407e-8,0.0036374461301725914,-3.133543760619602e-5,3.449300493597974e-8,0.0036377666800752285,-3.154966294649507e-5,3.4877648547478624e-8,0.003638141297749838,-3.1685759118405125e-5,3.511925103365506e-8,0.0036385252843173046,-3.173024090401332e-5,3.5193980505349496e-8,0.0036388799750885084,-3.1691380373824776e-5,3.5117541386689996e-8,0.003639178463924923,-3.1591479016366276e-5,3.493096321710203e-8,0.003639406831918024,-3.145964120367891e-5,3.4687408289269027e-8,0.0036395631103395176,-3.132641488984484e-5,3.444246310972407e-8,0.003639655535314708,-3.122008096808154e-5,3.4247456211883176e-8,0.0036397006665107633,-3.1163893875378406e-5,3.414448139816457e-8,0.003639721329488939,-3.1173806420359784e-5,3.416226804857164e-8,0.0036397441644748767,-3.125655767899938e-5,3.431270209771732e-8,0.003639796568166988,-3.140832386339877e-5,3.458839076722247e-8,0.0036399030331303018,-3.161441580614675e-5,3.49621599593727e-8,0.0036400812861970703,-3.1850493516183555e-5,3.538933414193512e-8,0.0036403388783366928,-3.2085469069802425e-5,3.581309683606768e-8,0.003640670899708472,-3.228595888933305e-5,3.617266898678714e-8,0.003641059410890908,-3.242184074945234e-5,3.6413480741849684e-8,0.003641474976614793,-3.2472192397990765e-5,3.6497992784001544e-8,0.0036418804736073327,-3.243081777099901e-5,3.6415684316993066e-8,0.0036422373048892133,-3.231046066567557e-5,3.619054998193656e-8,0.003642513965287651,-3.2144261682321465e-5,3.588351146600024e-8,0.0036426959856221573,-3.198235682061668e-5,3.5586005065773693e-8,0.0036427944977556605,-3.1881697208743154e-5,3.5401356745524745e-8,0.0036428486849075714,-3.188933045907144e-5,3.5414444145402196e-8,0.0036429173685921887,-3.202403752604784e-5,3.565852233264122e-8,0.0036430596414088368,-3.226577445343364e-5,3.609629779052436e-8,0.0036433124954249867,-3.2561078847616284e-5,3.66299793816928e-8,0.0036436776177795477,-3.284337212027593e-5,3.713830880496045e-8,0.0036441242313400286,-3.3057030277970586e-5,3.7520345040000954e-8,0.0036446041810241324,-3.317277180321848e-5,3.772337507096917e-8,0.0036450692490085615,-3.3189738563198884e-5,3.7746545722749065e-8,0.003645482899676809,-3.3128175256394194e-5,3.7627357042686266e-8,0.0036458246434632187,-3.301933774306142e-5,3.7423151774873677e-8,0.003646089234413236,-3.289707990184836e-5,3.71957515176344e-8,0.003646283665094115,-3.279244336538491e-5,3.7001641525103554e-8,0.0036464239349174375,-3.273067656021924e-5,3.6886607019548715e-8,0.0036465323149864697,-3.272957018214073e-5,3.6882747854165715e-8,0.0036466349961541663,-3.279825429446103e-5,3.700630533575309e-8,0.0036467596710251142,-3.2936106766617314e-5,3.725568811188398e-8,0.0036469325807821826,-3.313193807407561e-5,3.7610026698915855e-8,0.0036471748124150484,-3.3364069240662704e-5,3.802938859382088e-8,0.003647498169133209,-3.360210126412473e-5,3.845809149088258e-8,0.0036479015316435363,-3.38109253939106e-5,3.883209072712449e-8,0.003648368986541947,-3.395689666898082e-5,3.909027582893097e-8,0.003648870921029724,-3.401521748118757e-5,3.9187927000580045e-8,0.0036493686380024244,-3.397675991479839e-5,3.91090927084104e-8,0.0036498219897588453,-3.385230235314705e-5,3.887418894134722e-8,0.0036501985693956885,-3.367263505175776e-5,3.854000701640252e-8,0.0036504824684245895,-3.348382883038354e-5,3.819088250354824e-8,0.003650680396759058,-3.333785800459016e-5,3.792145205144569e-8,0.003650822939161007,-3.3279840876376515e-5,3.781338373671198e-8,0.003650959134371577,-3.3334613467666114e-5,3.791106516073476e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json new file mode 100644 index 0000000..3f54533 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":23000,"numberOfSamples":1000,"samples":[0.003651144035305788,-3.3496975736922465e-5,3.820410327566936e-8,0.0036514219143992843,-3.3730554777606135e-5,3.862552436820353e-8,0.0036518112676496577,-3.397791609056264e-5,3.907035721036122e-8,0.00365229870095008,-3.417907449598782e-5,3.9429383363913e-8,0.00365284489977173,-3.4290356787269744e-5,3.962343833009104e-8,0.0036533992613388363,-3.429527055965991e-5,3.962310443890886e-8,0.003653915601993734,-3.4204210437811016e-5,3.9448034728001705e-8,0.0036543625588809866,-3.404606217387052e-5,3.915149562803171e-8,0.003654726821743164,-3.385745548023324e-5,3.880065521411588e-8,0.003655011114586897,-3.367402646076845e-5,3.846060844958942e-8,0.003655229952491537,-3.352516388562213e-5,3.818482941081412e-8,0.0036554053665251193,-3.343165583497147e-5,3.8010946814686524e-8,0.0036555634966590643,-3.3404964167691095e-5,3.7959478606448984e-8,0.0036557319972541605,-3.3447035834001456e-5,3.803352192134055e-8,0.0036559377077366316,-3.355009646938942e-5,3.821840523078073e-8,0.003656203941986329,-3.3696494348695236e-5,3.848145228658821e-8,0.0036565469978612378,-3.3859223781751256e-5,3.877301569526761e-8,0.0036569720596978405,-3.4004124438745524e-5,3.9030579556823116e-8,0.003657469498455847,-3.40947073072433e-5,3.918763315500793e-8,0.003658013393850613,-3.409978236972752e-5,3.918760770228968e-8,0.0036585642841328063,-3.400250012732713e-5,3.9000338042948336e-8,0.003659077039174998,-3.380774452480385e-5,3.8635466490843415e-8,0.0036595124517896076,-3.354428513728769e-5,3.8146233975437406e-8,0.0036598488695074555,-3.325957393919969e-5,3.761980345160911e-8,0.0036600895177045143,-3.30080589998171e-5,3.7155744789631976e-8,0.0036602626699706706,-3.2836659874036776e-5,3.6839414480127626e-8,0.0036604145345912036,-3.277203283919482e-5,3.671875744486885e-8,0.003660597076071134,-3.281332359526204e-5,3.679128814107534e-8,0.0036608541980586175,-3.293230507705976e-5,3.700462952878297e-8,0.003661210012998719,-3.308093000187256e-5,3.7270537712529526e-8,0.003661662575751951,-3.320440094368456e-5,3.74888633727299e-8,0.003662185161327315,-3.325597408349231e-5,3.7574542846225874e-8,0.003662734729255613,-3.320874898829924e-5,3.747900861351535e-8,0.0036632644530644296,-3.3060666580031256e-5,3.719917570818271e-8,0.003663735688217234,-3.283177311008349e-5,3.677230797634811e-8,0.003664125550367317,-3.255600900274537e-5,3.6260899113540797e-8,0.0036644288159946347,-3.227144312843095e-5,3.573475239964142e-8,0.003664655379067319,-3.20122786606644e-5,3.525635740926294e-8,0.0036648256060508692,-3.180406776074698e-5,3.487218993328028e-8,0.0036649655917790954,-3.166186058055134e-5,3.460940215582945e-8,0.003665103342555086,-3.15901849968733e-5,3.4475849367541365e-8,0.003665265988254904,-3.158372346364206e-5,3.4461364201339914e-8,0.003665477540567749,-3.162801003528849e-5,3.4539055157405407e-8,0.0036657565338192736,-3.17000936026722e-5,3.466655892539428e-8,0.0036661130590637785,-3.176968248208968e-5,3.478820502904388e-8,0.003666545202793297,-3.180174937323968e-5,3.483986629008923e-8,0.003667035788941662,-3.1761745550580205e-5,3.475855435760227e-8,0.0036675514497473767,-3.162389916152661e-5,3.449759311569503e-8,0.003668046654744528,-3.138114071038292e-5,3.404470126419763e-8,0.0036684741721542814,-3.105261032794423e-5,3.343560777759723e-8,0.003668799974560434,-3.068345735179965e-5,3.2753539214570226e-8,0.0036690165364966303,-3.0334013759936222e-5,3.2109244036842246e-8,0.0036691474276989216,-3.0061206934846583e-5,3.160683200695938e-8,0.0036692401145173264,-2.9900241087574385e-5,3.131020806459519e-8,0.0036693503292834495,-2.9854613982101406e-5,3.122493185911916e-8,0.003669525187357138,-2.989751080207272e-5,3.1301037813817e-8,0.0036697912282753556,-2.9982013376298203e-5,3.1452001909760237e-8,0.003670149929656101,-3.0055069990531985e-5,3.15804774867729e-8,0.00367058012275416,-3.007069224005011e-5,3.160245845426072e-8,0.003671045233915078,-2.9999480736268876e-5,3.14646043020311e-8,0.00367150289146305,-2.9833136999524488e-5,3.1152343179196404e-8,0.0036719145236925356,-2.9583830819543413e-5,3.068856987855197e-8,0.0036722528819754623,-2.9279274289988172e-5,3.012451965536157e-8,0.0036725060723375516,-2.8955216659429878e-5,2.9525956515840337e-8,0.003672677754130943,-2.864755268356975e-5,2.895869275364607e-8,0.003672784291843022,-2.838594682136872e-5,2.8476927435519246e-8,0.0036728502871910297,-2.8189969093245898e-5,2.8116221838894727e-8,0.0036729039195573616,-2.8067750927584617e-5,2.7891105878276732e-8,0.0036729730472076353,-2.8016458620949784e-5,2.7795998669456532e-8,0.0036730823256591566,-2.8023639314141942e-5,2.7807699502206006e-8,0.0036732510393670506,-2.806876922500443e-5,2.7888233842029837e-8,0.0036734911388206174,-2.8124848250507907e-5,2.7987802985082756e-8,0.003673805048096844,-2.8160365318995213e-5,2.8048454388623762e-8,0.0036741831643614118,-2.8142417714421486e-5,2.800989211450284e-8,0.0036746017845311393,-2.8042014596425726e-5,2.781926303572099e-8,0.003675023305396148,-2.7842042600133794e-5,2.7445742165138232e-8,0.003675401277467576,-2.7546573380207877e-5,2.6897486202051013e-8,0.0036756920590245525,-2.718737099853137e-5,2.623340000871415e-8,0.0036758711240840844,-2.682142732552505e-5,2.555844943167183e-8,0.0036759465937811365,-2.6515692647237495e-5,2.499551903112205e-8,0.0036759605227197774,-2.6323182982489206e-5,2.464151777744949e-8,0.0036759744983032644,-2.6262593443452535e-5,2.4530039671133795e-8,0.0036760466285700347,-2.6312844659637143e-5,2.462156779143457e-8,0.0036762123044454384,-2.6424126112870143e-5,2.4824015221802194e-8,0.003676476786014314,-2.6537239075107872e-5,2.5028430559382807e-8,0.0036768192350094923,-2.6601221243758545e-5,2.5141395201407517e-8,0.0036772028513650874,-2.658386925131194e-5,2.5104237965815816e-8,0.0036775858883604795,-2.6474864491415744e-5,2.4898599976612817e-8,0.0036779306440379686,-2.6283647779182486e-5,2.4542371246482394e-8,0.003678209538973982,-2.603439997978615e-5,2.408037372138913e-8,0.003678408358108114,-2.5759783494692988e-5,2.357282896906436e-8,0.003678526948850447,-2.5494493653466036e-5,2.308351403533256e-8,0.0036785777355817883,-2.5269467883076505e-5,2.2669143006386352e-8,0.003678582593628918,-2.5107461818455048e-5,2.2371273529194018e-8,0.003678568782474355,-2.5020417507422695e-5,2.2211520779320994e-8,0.0036785647042003374,-2.500871973525351e-5,2.21902445854814e-8,0.0036785961805071692,-2.5062054156622615e-5,2.228816628316454e-8,0.003678683593958781,-2.5161266743696174e-5,2.24697994986493e-8,0.003678839813725382,-2.528068865976697e-5,2.268772363615898e-8,0.0036790686589521994,-2.5390721102639514e-5,2.28873548323344e-8,0.0036793636633603534,-2.5460766843175067e-5,2.301239734670839e-8,0.0036797070625050198,-2.5462938404665122e-5,2.3011746096490555e-8,0.0036800695540226,-2.5377224112577794e-5,2.2849032250097418e-8,0.0036804123072578534,-2.5198284596178738e-5,2.251506689142407e-8,0.003680693157902537,-2.4942526484895308E-05,2.2040681988927512e-8,0.003680878158399637,-2.4651854910035483e-5,2.150341156448466e-8,0.0036809565821238504,-2.4388619881055524e-5,2.101802531841774e-8,0.003680952179938686,-2.4218042502926116e-5,2.0704157135192892e-8,0.003680920788736872,-2.418258152607271e-5,2.063924897056901e-8,0.0036809307429876595,-2.428216159309294e-5,2.082238656290625e-8,0.0036810354111426534,-2.4473729304710523e-5,2.1173726237950885e-8,0.003681253971997315,-2.4690578711906134e-5,2.1570233191745147e-8,0.0036815697161010955,-2.4868511669727512e-5,2.1893875946001677e-8,0.00368194233743989,-2.4964629040890916e-5,2.2066135288962184e-8,0.003682324212490332,-2.496342898745231e-5,2.2059068741709067e-8,0.0036826731166814996,-2.4873277705717296e-5,2.1888636709994033e-8,0.0036829591588462465,-2.4718729832185195e-5,2.1600441398920033e-8,0.003683167023967205,-2.4532594782350245e-5,2.1255080252265367e-8,0.0036832954099022645,-2.4349370543578626e-5,2.0916081024659693e-8,0.0036833550335923348,-2.4200218198591833e-5,2.0640692551785886e-8,0.0036833658565634006,-2.410924176009306e-5,2.047307011231562e-8,0.00368335380237866,-2.4090944865297163e-5,2.0439619325797367e-8,0.0036833471475006176,-2.4148859135246296e-5,2.054650508300012e-8,0.003683372810946003,-2.4275435196936255e-5,2.07794955328708e-8,0.003683452919780664,-2.445325289733475e-5,2.110623168930102e-8,0.003683602046501696,-2.465734339942249e-5,2.1480525304410102e-8,0.003683825298735307,-2.4858264023953814e-5,2.184802813428788e-8,0.0036841172991974114,-2.5025683730293013e-5,2.2152849985111426e-8,0.0036844620856947494,-2.5132324086251992e-5,2.234486049199623e-8,0.003684833943600737,-2.5158192450841574e-5,2.2387540094785343e-8,0.0036851994497372497,-2.5095227283073492e-5,2.226654684123872e-8,0.003685521611166236,-2.495214102688181e-5,2.199854944989616e-8,0.0036857671361551635,-2.4758044853092278e-5,2.1637716007903936e-8,0.0036859169029455434,-2.4561976529873085E-05,2.127462522493109e-8,0.0036859772914223593,-2.44246555966739e-5,2.102094321803886e-8,0.0036859863765741317,-2.4400569866343113e-5,2.0976459090247287e-8,0.0036860072100742725,-2.451503865503077e-5,2.1187033549314085e-8,0.0036861059724534228,-2.4748908547852973e-5,2.1616674172997784e-8,0.003686324629094954,-2.504318975211854e-5,2.2156284356747038e-8,0.003686664486266351,-2.5323155005089623e-5,2.2668137696737203e-8,0.0036870898114569946,-2.5527244493044108e-5,2.303909962374833e-8,0.003687546149128421,-2.5624766795011134e-5,2.3213143420424893e-8,0.00368798044731879,-2.5617338941137874e-5,2.3193859568407812e-8,0.0036883539373483384,-2.5529670793774248e-5,2.3027315403045705e-8,0.0036886463867155743,-2.5397760191839542e-5,2.2780188658898496e-8,0.003688854693802478,-2.5259351496340612e-5,2.2522155643143783e-8,0.0036889891708466456,-2.5147850491353615e-5,2.231471497123031e-8,0.0036890695533378795,-2.5088946206269493e-5,2.2205016955307542e-8,0.0036891214131626097,-2.5098827308126288e-5,2.222261384963983e-8,0.0036891729137179556,-2.518329063537529e-5,2.2377841591020216e-8,0.0036892516769625227,-2.5337494371236543e-5,2.2661397865423784e-8,0.0036893816097385863,-2.554645169281843e-5,2.3045303929869593e-8,0.0036895797925711486,-2.578657672893664e-5,2.3485809567516533e-8,0.0036898538468566012,-2.6028463573269312e-5,2.392855402626147e-8,0.003690200266554174,-2.624073990187162e-5,2.431568410168666e-8,0.0036906040827712275,-2.6394652975592825e-5,2.4594312535909952e-8,0.0036910401320671615,-2.646892578198544e-5,2.4725481010514338e-8,0.0036914760290490357,-2.6454258869800837e-5,2.469246723504824e-8,0.0036918767628710283,-2.6356872170899155e-5,2.450728188668473e-8,0.003692210885339878,-2.6200462392483775e-5,2.4214168577148188e-8,0.0036924581686777775,-2.602543095805307e-5,2.388800430693621e-8,0.003692617733382483,-2.5883626505455566e-5,2.362443103435925e-8,0.0036927139953002153,-2.58271594885082e-5,2.3519158494680385e-8,0.0036927961075991973,-2.5891978747853797e-5,2.3637775773338626e-8,0.0036929267649546634,-2.6081277797364088e-5,2.398538810384016e-8,0.0036931609455419815,-2.6358161739026842e-5,2.4493348826303326e-8,0.0036935234174346435,-2.665549718890737e-5,2.5037572254635175e-8,0.003693998101314756,-2.6900775812927172e-5,2.5484402286752192e-8,0.0036945360219985063,-2.7042710855034788e-5,2.5739608547857825e-8,0.0036950760446270714,-2.7065371302568437e-5,2.57743737612283e-8,0.003695565661023816,-2.6985691375977797e-5,2.5620578062499176e-8,0.00369597274607554,-2.684069713273219e-5,2.5347080120574853e-8,0.003696287324292012,-2.667345195030066e-5,2.5033662232297028e-8,0.0036965173262114045,-2.6523010525635966e-5,2.4752456189175374e-8,0.0036966825886261623,-2.6419227346433036e-5,2.455840471365584e-8,0.003696809522700842,-2.6380986372349695e-5,2.4486064306819182e-8,0.0036969270936339123,-2.6416117172469423e-5,2.454950799475654e-8,0.0036970637745599656,-2.6521893503182198e-5,2.4743286277766767e-8,0.0036972449046433265,-2.6685737210574117e-5,2.504376987032764e-8,0.0036974900334030988,-2.6886274245188e-5,2.541115595707101e-8,0.003697810176347896,-2.7095219934198905e-5,2.5793006605434385e-8,0.0036982053804941253,-2.728057365079077e-5,2.613018555159297e-8,0.003698663356525077,-2.7411217452902692e-5,2.6365357275177697e-8,0.0036991599725369096,-2.7462484334453646e-5,2.6453253365305067e-8,0.0036996621606698965,-2.7421763096580724e-5,2.6370997112730044e-8,0.00370013328491362,-2.729281033021235e-5,2.6126029195423446e-8,0.0037005403211717563,-2.7097411250876837e-5,2.5759105766375958e-8,0.0037008616198824073,-2.6873458549975153e-5,2.534063229254157e-8,0.0037010937154705065,-2.6669054268328128e-5,2.4959623377691335e-8,0.0037012553893138378,-2.6532771677849146e-5,2.470560529795536e-8,0.003701386925754609,-2.6501162935385394e-5,2.464554459140342e-8,0.0037015427319560873,-2.65862451416973e-5,2.4800881221936585e-8,0.0037017770840136652,-2.6767600671031702e-5,2.5133175185444305e-8,0.003702126226889177,-2.6994365678892358e-5,2.5547991564237983e-8,0.003702594034496086,-2.7199503702774686e-5,2.5921361512321817e-8,0.003703149146929241,-2.7322124217394617e-5,2.6140992193989e-8,0.0037037362260185593,-2.732763109091641e-5,2.6143421934714618e-8,0.003704295665546802,-2.721607872496196e-5,2.5929372282700263e-8,0.0037047816795343263,-2.7016566312550213e-5,2.5553267597604028e-8,0.003705171555362991,-2.6773370862474705e-5,2.509745527697299e-8,0.003705465407158616,-2.6531809403462105e-5,2.4645955131628586e-8,0.0037056802842188206,-2.6328749558537203e-5,2.4266888380384873e-8,0.003705842962671197,-2.6188473724591307e-5,2.4004889346311846e-8,0.0037059839388316924,-2.6122241314280676e-5,2.3880388417301026e-8,0.0037061332623507665,-2.6129556128220352e-5,2.3892034999399584e-8,0.003706317770909461,-2.6199800840217618e-5,2.4019772205175913e-8,0.0037065589557418377,-2.6313745875571078e-5,2.4227665838511646e-8,0.003706870840343872,-2.644512355745995e-5,2.4466855843329514e-8,0.003707257688373799,-2.6562856852741105e-5,2.4679720562225874e-8,0.003707711915905993,-2.6634592082949376e-5,2.4806441695489335e-8,0.003708213120455237,-2.663186058357122e-5,2.479455939697902e-8,0.0037087294412449907,-2.6536451255494063e-5,2.4610743259413702e-8,0.003709222214515911,-2.6346543661015368e-5,2.4252099963225886e-8,0.0037096538724641567,-2.6080329046030495e-5,2.3752812169666824e-8,0.003709997524539029,-2.577492734907529e-5,2.3182040780489726e-8,0.0037102454227998637,-2.5479672505274922e-5,2.263137359655951e-8,0.0037104132986381126,-2.524481178501241e-5,2.219379012489409e-8,0.0037105385684950997,-2.5108446768208215e-5,2.1939440481081604e-8,0.003710672201591465,-2.5085405601484373e-5,2.1895121723236657e-8,0.0037108659074224157,-2.5161493732589e-5,2.2033822651041703e-8,0.0037111577917986476,-2.5295461489293446e-5,2.2278586025456243e-8,0.0037115606470070174,-2.542917933201141e-5,2.2521498478199035e-8,0.0037120571654388006,-2.5503837048517596e-5,2.2653719725711947e-8,0.003712604656330799,-2.5477070966070233e-5,2.259714366597435e-8,0.0037131481138471807,-2.5334611035146297e-5,2.232587717598007e-8,0.0037136365417578987,-2.509202414715311e-5,2.1869364929837613e-8,0.0037140360486028587,-2.4786787143587042e-5,2.1297584304020552e-8,0.0037143354755474435,-2.4465255139622436e-5,2.069678054959071e-8,0.003714544467024974,-2.4170306202152613e-5,2.0146497047207724e-8,0.003714687020580643,-2.393338515246342e-5,1.9704838425664365e-8,0.0037147941125955726,-2.3771532108372094e-5,1.9403042636394202e-8,0.0037148976705766875,-2.3687944947412868e-5,1.924662719845783e-8,0.0037150265340877417,-2.367419895466894e-5,1.9219583030809972e-8,0.003715204015883382,-2.37127525260934e-5,1.928905809182854e-8,0.0037154462776015544,-2.377915294824585e-5,1.9409457545578542e-8,0.0037157608120527794,-2.384409788521174e-5,1.9526274662557453e-8,0.0037161447586631148,-2.387597552240848e-5,1.9580823667812967e-8,0.003716583383528966,-2.384460787773986e-5,1.9517213785745727e-8,0.0037170496879362957,-2.372665990986959e-5,1.929240272445178e-8,0.003717506623292282,-2.3512366057301022e-5,1.8888665065491976e-8,0.003717913280569818,-2.3211764390501293e-5,1.832510925529357e-8,0.0037182350231976446,-2.2857213753819283e-5,1.766226069432184e-8,0.0037184549931704456,-2.2499015996168416e-5,1.69938183046161e-8,0.0037185822522199053,-2.2193400184984013e-5,1.642422937600723e-8,0.0037186520125712316,-2.1986125984029035e-5,1.6038180871423233e-8,0.0037187166025020217,-2.1897980951190913e-5,1.5873715102312037e-8,0.0037188302313518797,-2.1918094714878887e-5,1.5909975868926e-8,0.0037190333250862505,-2.200738683831528e-5,1.6073822676410523e-8,0.003719341736464505,-2.211021106517147e-5,1.6261616807192078e-8,0.003719743573072058,-2.216979978548509e-5,1.636795341593824e-8,0.0037202036700935363,-2.214280148765948e-5,1.631260873446929e-8,0.0037206737661205037,-2.2009147434640982e-5,1.6058763393847896e-8,0.0037211051970497504,-2.1775071201819367e-5,1.5618506174731158e-8,0.003721460458739193,-2.1469112666244478e-5,1.5045318183279198e-8,0.0037217205729197273,-2.113297412457324e-5,1.4417004888548999e-8,0.0037218868002361744,-2.081050254733132e-5,1.3815164650950308e-8,0.0037219772900882707,-2.0538209327698315e-5,1.3307554545741322e-8,0.003722020789722907,-2.033950176989565e-5,1.2937408851043707e-8,0.00372204987109083,-2.022296133826621e-5,1.2720322617019088e-8,0.0037220953992123298,-2.018363795951063e-5,1.2646747001885697e-8,0.0037221828649194387,-2.0205878245740093e-5,1.26873047206367e-8,0.0037223303313133104,-2.02664502220618e-5,1.2798609312135926e-8,0.003722547317866394,-2.0337344535813425e-5,1.292845264550573e-8,0.0037228339677174557,-2.0388317730423293e-5,1.3020518278734751e-8,0.003723180190839855,-2.0389705420379754e-5,1.3019629712220013e-8,0.0037235650128087322,-2.0316187736311858e-5,1.2878799919059847e-8,0.003723957027956693,-2.0152005616268402e-5,1.256897561523051e-8,0.003724317479797812,-1.9897320189773163e-5,1.2090860847159705e-8,0.0037246074892309214,-1.9573777293026863e-5,1.1485194896322013e-8,0.0037247994563825186,-1.922551672634567e-5,1.0834500081040653e-8,0.003724889413287953,-1.8911635022200557e-5,1.024891375539621e-8,0.003724903860006442,-1.8689419208005423e-5,9.834890386340725e-9,0.0037248950039658825,-1.8593936835862856e-5,9.657227552497414e-9,0.0037249241617011717,-1.8624070004157957e-5,9.713213497022367e-9,0.0037250406734058938,-1.874272347827841e-5,9.933231932671707e-9,0.003725266442256563,-1.889068343187049e-5,1.0206743013046786e-8,0.003725591957814072,-1.900639132302381e-5,1.0419161121580107e-8,0.0037259828367480837,-1.9042941445738243e-5,1.0483445088589561e-8,0.0037263919105630754,-1.8977532859680972e-5,1.0357575288150131e-8,0.0037267718541946424,-1.8812970780198845e-5,1.004722544629047e-8,0.0037270852122032435,-1.857321752592454e-5,9.597390829866145e-9,0.0037273105106150057,-1.829556589372417e-5,9.077766944676528e-9,0.0037274442822466383,-1.8021665816886436e-5,8.566019197106112e-9,0.003727499446205275,-1.7789180452793088e-5,8.132238797880786e-9,0.0037275009651962054,-1.762549477405663e-5,7.827238632585327e-9,0.003727480107433613,-1.7544324987777415e-5,7.676278027300595e-9,0.003727468693735596,-1.7545252223564655e-5,7.678260381961283e-9,0.0037274943796830745,-1.7615546114334517e-5,7.809198521585769e-9,0.0037275775048591624,-1.773333185341448e-5,8.028155894012631e-9,0.003727729461688348,-1.7871140037744037e-5,8.283855986333845e-9,0.0037279521045785026,-1.7999224672154963e-5,8.520831022886832e-9,0.0037282376812551145,-1.80885880022614e-5,8.685033780576021e-9,0.0037285690243083164,-1.8114038809190196e-5,8.729555432946514e-9,0.003728920113641478,-1.8057767593507887e-5,8.621345067804234e-9,0.0037292576952676747,-1.7913835381609194e-5,8.349624258909386e-9,0.0037295452618239825,-1.769325645659619e-5,7.935342096310923e-9,0.003729750685610381,-1.742782377238727e-5,7.438195143004906e-9,0.0037298573864923707,-1.7169070621178025e-5,6.954523489002591e-9,0.0037298756982351187,-1.6978346810287705e-5,6.598664526266755e-9,0.003729847357057938,-1.690734999300974e-5,6.466620041821976e-9,0.0037298361456615196,-1.6976011363689884e-5,6.594939654273422e-9,0.0037299052651525726,-1.716065001020904e-5,6.938856540972064e-9,0.003730092529452638,-1.7401587629302746e-5,7.386701385086378e-9,0.0037303974273488636,-1.7626624987369516e-5,7.803782958842304e-9,0.0037307856005640463,-1.7776600142330956e-5,8.080023637204767e-9,0.0037312048557727917,-1.782075236454326e-5,8.158500185359126e-9,0.0037316025984929033,-1.7758874434021704e-5,8.039315141398938e-9,0.003731938096263313,-1.7614499874872118e-5,7.76676690099454e-9,0.0037321881752387263,-1.7424800949631686e-5,7.410439462798648e-9,0.003732347832913049,-1.7230987288991442e-5,7.047285654047261e-9,0.003732427807332729,-1.7070752855394434e-5,6.747564430999931e-9,0.0037324505819447216,-1.6972951318685194e-5,6.564937105062063e-9,0.0037324456392299724,-1.695435236964585e-5,6.530439072511247e-9,0.003732444524964121,-1.701842445824136e-5,6.650238763256346e-9,0.0037324762624747466,-1.7155994000405556e-5,6.906918712508451e-9,0.003732563584080442,-1.734745000939961e-5,7.263649467205659e-9,0.003732720347862681,-1.7566052220995436e-5,7.670403442963853e-9,0.003732950305259306,-1.7781762662003478e-5,8.071102483695934e-9,0.003733247046701793,-1.796503766997897e-5,8.410658713739836e-9,0.003733594793483443,-1.8090329320746774e-5,8.641476568061361e-9,0.003733969829689655,-1.8139333953936072e-5,8.729522514097567e-9,0.0037343425695851745,-1.8104141430392796e-5,8.660245887318678e-9,0.003734680606263795,-1.7990430125363365e-5,8.444572497323546e-9,0.003734953553838489,-1.782034694147802e-5,8.124239420623847e-9,0.003735140403146867,-1.7633507226156773e-5,7.77352976095781e-9,0.003735238848109435,-1.748329459267977e-5,7.4921953391734e-9,0.003735273477531778,-1.742550583944127e-5,7.384151459049214e-9,0.0037352966592492363,-1.749922907883764e-5,7.52182191537506e-9,0.0037353759026406193,-1.7706708770883272e-5,7.908742842178216e-9,0.003735568740471046,-1.8005201420696946e-5,8.464598259716825e-9,0.003735897522340255,-1.8320262806021934e-5,9.050180658370451e-9,0.0037363400742964556,-1.8575326378219387e-5,9.522633384422312e-9,0.0037368415776035976,-1.8720037863678725e-5,9.788290822532997e-9,0.0037373380712256233,-1.874245668787921e-5,9.825363797506921e-9,0.0037377771555825133,-1.8663787364666786e-5,9.673974471483982e-9,0.0037381282616453346,-1.852433494079792e-5,9.409797508911304e-9,0.0037383834002827367,-1.8369540890756483e-5,9.117901324121186e-9,0.003738552757404369,-1.824019873721411e-5,8.874473223547163e-9,0.003738658809558917,-1.8167100505264942e-5,8.736870253285727e-9,0.003738730844138739,-1.8168783218842287e-5,8.739462794445459e-9,0.0037388003329487827,-1.8251037280980622e-5,8.892751862877826e-9,0.00373889698628947,-1.8407514500518183e-5,9.18453775255549e-9,0.0037390453516148825,-1.8621272393550024e-5,9.582855243041857e-9,0.0037392620029640536,-1.886722395403692e-5,1.0040612490717398e-8,0.0037395535311001136,-1.9115464924135617e-5,1.0501851379362463e-8,0.0037399156645016815,-1.9335279841595094e-5,1.0909231443508442e-8,0.003740333727271666,-1.949936503986908e-5,1.1211879486748627e-8,0.0037407843754003085,-1.9587781487259298e-5,1.1372730485053469e-8,0.00374123843967038,-1.9591286559904284e-5,1.1374739407503882e-8,0.003741664694071747,-1.951376722599113e-5,1.1225445494692067e-8,0.003742034426709988,-1.9373566096839915e-5,1.0959456056172562e-8,0.0037423268826330203,-1.9203348136011737e-5,1.0638143074060602e-8,0.0037425355319994974,-1.9047512251718933e-5,1.0344682395521544e-8,0.003742674153842459,-1.8955552707843683e-5,1.0171510875620036e-8,0.003742780075672932,-1.897020365172007e-5,1.0198117014107015e-8,0.003742910352084255,-1.91115247419747e-5,1.0461391980825988e-8,0.003743127236642866,-1.936274082819314e-5,1.0929372494595087e-8,0.0037434748877366456,-1.966787992300605e-5,1.1497025901544866e-8,0.0037439582292228346,-1.994830716850865e-5,1.2017239417133448e-8,0.0037445380916303205,-2.0132874757777342e-5,1.235715857869903e-8,0.003745147304945264,-2.018475709919423e-5,1.24483095139559e-8,0.003745717536123864,-2.0110039024257403e-5,1.2302602979977455e-8,0.0037462009957385913,-1.994718213155144e-5,1.1992528512288664e-8,0.003746578533952196,-1.9748112336383324e-5,1.1615631205305184e-8,0.0037468562058775336,-1.9561943110626034e-5,1.1263957057301948e-8,0.0037470568320752493,-1.942580720910747e-5,1.1006894832462288e-8,0.003747211591296955,-1.936188801722068e-5,1.0885690830408487e-8,0.0037473537091404366,-1.937798694893093e-5,1.0914592901045096e-8,0.00374751426169476,-1.9469411529319156e-5,1.1084443738119213e-8,0.003747719306811906,-1.9621107982094123e-5,1.1366715498674678e-8,0.003747987653823677,-1.98098865025236e-5,1.171772196127629e-8,0.0037483289877986337,-2.00069900657524e-5,1.2083476553019989e-8,0.0037487424409848157,-2.018133651430223e-5,1.2405790481457967e-8,0.003749216049729212,-2.0303576953806943e-5,1.262985740223278e-8,0.0037497276616432853,-2.0350656359240593e-5,1.2712744009555985e-8,0.0037502476097356495,-2.0310161881186038e-5,1.263147987969798e-8,0.0037507430698388022,-2.01836052339569e-5,1.238917732256602e-8,0.003751183640813286,-1.9987806416820744e-5,1.201762072309364e-8,0.003751547358372743,-1.975377558398845e-5,1.1575159589463945e-8,0.0037518262278624856,-1.9522888966651756e-5,1.1139487350292194e-8,0.003752030366449994,-1.9340357022812065e-5,1.0795307888503861e-8,0.003752189575101569,-1.9246075080711368e-5,1.0617115929008991e-8,0.00375235065514588,-1.926362082860626e-5,1.0648597353873207e-8,0.00375256874733072,-1.9389760757096198e-5,1.0883103913087454e-8,0.0037528923589819,-1.95889336244771e-5,1.1253515334163685e-8,0.003753345377221318,-1.9798233653190108e-5,1.1641722277737352e-8,0.003753914085684261,-1.9945444226348306e-5,1.1912441558529761e-8,0.0037545482183929373,-1.997468342657704e-5,1.1961217063101045e-8,0.003755178268860511,-1.9866841003214947e-5,1.1752664664935419e-8,0.003755740498054235,-1.9643572837075e-5,1.132790926630942e-8,0.003756196287862252,-1.9354386897528227e-5,1.078027677361611e-8,0.0037565380292510645,-1.9056473937833167e-5,1.02173374524946e-8,0.003756783287516352,-1.879808625982981e-5,9.729641408606765e-9,0.003756964059188642,-1.8610299848009276e-5,9.375278483928095e-9,0.0037571168822495586,-1.850601029274588e-5,9.178087064121487e-9,0.0037572761536310796,-1.8482743679660896e-5,9.133032553034088e-9,0.003757470458105261,-1.8526444575679007e-5,9.213386299761704e-9,0.003757720726876309,-1.8614862202039136e-5,9.377117285257808e-9,0.0037580391353763576,-1.8720347719301517e-5,9.572164083264661e-9,0.0037584281701537876,-1.88124868526117e-5,9.741392613497707e-9,0.003758879845331222,-1.886115999095588e-5,9.828343171502811e-9,0.003759375547369298,-1.884045521805883e-5,9.784556157303305e-9,0.0037598873171901443,-1.8733336140393533e-5,9.578297218737537e-9,0.0037603812993048536,-1.8536245409891986e-5,9.20316322759362e-9,0.003760823522734917,-1.826223272290799e-5,8.683933253519903e-9,0.0037611872682305502,-1.794102306496649e-5,8.07668074991078e-9,0.003761460322951104,-1.761495849043393e-5,7.461118830695648e-9,0.003761649939215854,-1.7330967802997768e-5,6.925453527388214e-9,0.003761783669047966,-1.7130080930370736e-5,6.546618226195867e-9,0.0037619052215471355,-1.7036850169632218e-5,6.370380696093653e-9,0.0037620655927134623,-1.7051287457088965e-5,6.396265383341771e-9,0.0037623107889809214,-1.7145824206739997e-5,6.571987750426438e-9,0.0037626686506996173,-1.7269316797664524e-5,6.8011328521040325e-9,0.0037631385620556235,-1.7358826009662052e-5,6.965369983083214e-9,0.003763688525936491,-1.735727517214488e-5,6.957620478797519e-9,0.0037642627046168722,-1.7231514285195872e-5,6.7159383377332736e-9,0.003764798192409383,-1.6983144070799588e-5,6.243784790204022e-9,0.003765244475384821,-1.6646684177942917e-5,5.606514320308481e-9,0.003765577041731878,-1.6276113749033035e-5,4.905976489211403e-9,0.0037658001496303955,-1.5926872483978327e-5,4.246574565661419e-9,0.003765940043113608,-1.5641428521669665e-5,3.7080826046676444e-9,0.0037660339883212393,-1.5442580188857785e-5,3.3330932819261697e-9,0.0037661202972565054,-1.533378212849883e-5,3.1277370664346276e-9,0.0037662317987403426,-1.530331931720143e-5,3.0696368494463564e-9,0.00376639269783391,-1.5329353706236113e-5,3.117459743615627e-9,0.0037666175999535394,-1.5384239766858776e-5,3.2190461479142756e-9,0.003766911424015544,-1.5437798596845338e-5,3.3175546155956647e-9,0.0037672694199051165,-1.5460010735471215e-5,3.3565118674225895e-9,0.003767677144880793,-1.5423844881946676e-5,3.285127707090549e-9,0.0037681108405431198,-1.5308808573030386e-5,3.0649759961602738e-9,0.00376853909328297,-1.5105335091860154e-5,2.678249819012819e-9,0.0037689267978603287,-1.4819271966290807e-5,2.1362017496681052e-9,0.0037692419464796334,-1.4474679157593949e-5,1.4843891964449467e-9,0.003769464408607395,-1.4112525842013234e-5,8.001758661740843e-10,0.0037695940570376656,-1.3783562552421724e-5,1.7924187200268179e-10,0.003769654513644912,-1.3535943066435279e-5,-2.877953882684514e-10,0.003769689655352273,-1.3401132828683478e-5,-5.419454827697908e-10,0.0037697528877103145,-1.3383352936094304e-5,-5.756719343471206e-10,0.0037698924838657317,-1.3456848768446041e-5,-4.379133873754168e-10,0.0037701379529232566,-1.3572133855236433e-5,-2.2219011005250034e-10,0.0037704917152187136,-1.36690613658659e-5,-4.190341608565942e-11,0.003770928286669406,-1.3692704936665648e-5,-4.184426881656405e-13,0.003771400984222682,-1.360764722503169e-5,-1.6419689144365008e-10,0.0037718542846100875,-1.3406801484918508e-5,-5.462400593197952e-10,0.0037722383742051645,-1.3112239502991186e-5,-1.1045888736203505e-9,0.0037725215280944423,-1.2767820548965187e-5,-1.756277314541145e-9,0.003772696517123917,-1.2426225277517897e-5,-2.4018373226817705e-9,0.003772779492258509,-1.2135018031827889e-5,-2.9516198186066968e-9,0.0037728027992608884,-1.1926333275018554e-5,-3.345233937647147e-9,0.003772805248437262,-1.1812618336310583e-5,-3.559509949169215e-9,0.0037728234022769208,-1.1787985186950563e-5,-3.605855082757096e-9,0.003772885871274732,-1.1832888997680663e-5,-3.5213519611769673e-9,0.0037730107830056705,-1.1919671821302818e-5,-3.3582733409701644e-9,0.0037732054834411486,-1.201738319949041e-5,-3.1750111515168823e-9,0.0037734672788120238,-1.2095393134790393e-5,-3.029308059715573e-9,0.0037737843623683997,-1.2126141515841897e-5,-2.9731078275435696e-9,0.0037741366633792803,-1.2087713479066177e-5,-3.0477005332985616e-9,0.0037744969434948855,-1.1966854684521575e-5,-3.2780044851181107e-9,0.0037748329505799573,-1.1762652811277419e-5,-3.665584516120736e-9,0.0037751117090649177,-1.1490296257088035e-5,-4.1815534879312055e-9,0.003775306671071242,-1.1183066734645489e-5,-4.762857357367671e-9,0.0037754069823609203,-1.0889694911885241e-5,-5.3173572358538974e-9,0.0037754256798606545,-1.0664706834353456e-5,-5.742147928915882e-9,0.003775401726689244,-1.0552455653838138e-5,-5.953742048116789e-9,0.003775391866454253,-1.0570337492320954e-5,-5.9196954740658214E-09,0.0037754533346908404,-1.069965404964022e-5,-5.6757115830877735e-9,0.0037756245234761812,-1.0889973474384802e-5,-5.3172574611983255e-9,0.0037759125769722722,-1.1075505491388981e-5,-4.9685789284492975e-9,0.0037762927653174714,-1.119569145297422e-5,-4.743856103245313e-9,0.0037767180710236953,-1.1211551456236634e-5,-4.716422581730153e-9,0.0037771336262513635,-1.1113289439129748e-5,-4.904484620551893e-9,0.0037774906920141566,-1.0919093669290008e-5,-5.273435637376515e-9,0.0037777568305629415,-1.0667562119560446e-5,-5.750186818487831e-9,0.0037779208867569462,-1.0406866195721732e-5,-6.243650787702565e-9,0.003777992767016646,-1.018352746019933e-5,-6.665958168127169e-9,0.0037779989182269913,-1.0033140590648544e-5,-6.949989656900959e-9,0.0037779751011073896,-9.97469904417571e-6,-7.060078675057539e-9,0.0037779584786724603,-1.0009194292538516e-5,-6.994608417451776e-9,0.0037779809048557934,-1.0121958368840203e-5,-6.781516708789922e-9,0.0037780645720082466,-1.0287344353781977e-5,-6.469394097223917e-9,0.003778220234630747,-1.047413085648688e-5,-6.1172540917545026e-9,0.003778447456985994,-1.0650388607779883e-5,-5.785368244403539e-9,0.003778735979536752,-1.078723859059365e-5,-5.528224279977244e-9,0.0037790674522738318,-1.086163687447547e-5,-5.3893085312301e-9,0.0037794172242492487,-1.0858682366088469e-5,-5.396741791551607e-9,0.003779756331525049,-1.0773944571270184e-5,-5.55883105247937e-9,0.0037800542820276006,-1.0616049404699768e-5,-5.859127603922072e-9,0.0037802835715694304,-1.0409041615552987e-5,-6.251958361016585e-9,0.0037804265587483227,-1.019284428731572e-5,-6.661632999833887e-9,0.0037804839392265306,-1.0019107510829138e-5,-6.990419724209726e-9,0.003780481632655872,-9.940027335123063e-6,-7.139785874260027e-9,0.003780470551458204,-9.990760852975178e-6,-7.043636122099973e-9,0.0037805145003715693,-1.0171924492472818e-5,-6.701260118724001e-9,0.0037806679024364473,-1.0443026877787217e-5,-6.189548974586507e-9,0.003780953749669685,-1.0734040814978671e-5,-5.640990002948598e-9,0.003781354446672115,-1.0970848138577473e-5,-5.195569712053512e-9,0.0037818202123343133,-1.1100878236964057e-5,-4.952398320323635e-9,0.0037822885451625726,-1.1106690075405191e-5,-4.9441331682067115e-9,0.0037827037918562686,-1.1004732221553931e-5,-5.139393429677356e-9,0.003783029580921028,-1.083450210581651e-5,-5.463297256101165e-9,0.0037832528926456414,-1.0645014240624529e-5,-5.8230619263333884E-09,0.003783382008619057,-1.0483107839539345e-5,-6.130107278142606e-9,0.0037834411521074293,-1.0385293670330903e-5,-6.315462602182711e-9,0.003783463866855065,-1.0373167422302901e-5,-6.338434431871988e-9,0.003783486346677699,-1.0451924135314523e-5,-6.1894075059543604e-9,0.0037835415059761126,-1.0611498941792025e-5,-5.887657773983901e-9,0.0037836543994592214,-1.0829747870240204e-5,-5.475280541301254e-9,0.0037838393893894684,-1.1076912436351042e-5,-5.00868499477498e-9,0.0037840991940355684,-1.1320547095963303e-5,-4.549244861849569e-9,0.0037844256115939245,-1.1530111692398709e-5,-4.154636535393267e-9,0.003784801380528869,-1.168067724546158e-5,-3.871892905681978e-9,0.0037852026131201958,-1.1755664641185652e-5,-3.732277813199833e-9,0.0037856015155439153,-1.1748839795853997e-5,-3.747515652641209e-9,0.003785969367532291,-1.166580442859177e-5,-3.906921033511718e-9,0.00378628001510182,-1.1525110745466617e-5,-4.175235589964458e-9,0.003786514449205436,-1.1358637205725354e-5,-4.491921267897067e-9,0.0037866667919770496,-1.1209875032777431e-5,-4.774493370527981e-9,0.0037867507548969247,-1.1128029735137191e-5,-4.929817589830909e-9,0.0037868036489551913,-1.1156279232741838e-5,-4.8764159931144795e-9,0.0037868831215570773,-1.1315159538627571e-5,-4.575860551166065e-9,0.0037870524179700496,-1.1587432273622035e-5,-4.061235434398263e-9,0.0037873563096598654,-1.1915434657407038e-5,-3.441960618087722e-9,0.0037877994416602927,-1.2218268853877623e-5,-2.871179678081107e-9,0.00378834159065941,-1.2422814649923206e-5,-2.4871089224278254e-9,0.0037889140278449785,-1.249102829822317e-5,-2.361451809750297e-9,0.0037894464319104034,-1.2428832387716597e-5,-2.4826372919214795e-9,0.003789888854569995,-1.2276000741283246e-5,-2.775033513542293e-9,0.003790220598166225,-1.2087372015433666e-5,-3.13458685349092e-9,0.003790447689810322,-1.1915907774812648e-5,-3.4609407828149515e-9,0.0037905948035725874,-1.1802236082212254e-5,-3.6772233896817644e-9,0.003790696401172688,-1.1770385986698964e-5,-3.73808626895047e-9,0.003790789335206898,-1.1827575732369238e-5,-3.6300747743801807e-9,0.003790907337032187,-1.1966138926110403e-5,-3.3679632150517645e-9,0.0037910770946163676,-1.2166553303929558e-5,-2.9889909055131355e-9,0.0037913156361942314,-1.2401135693384962e-5,-2.545809144827838e-9,0.0037916289168516333,-1.263815898674036e-5,-2.0986190900712304e-9,0.0037920116463947694,-1.2846175399722612e-5,-1.7069510131467538e-9,0.0037924484233062025,-1.299819527970367e-5,-1.4217770124520617e-9,0.0037929160329965078,-1.3075228465631499e-5,-1.2788768709480869e-9,0.0037933865555892653,-1.3068858631174979e-5,-1.294030013439374e-9,0.0037938309814365434,-1.2982776331081918e-5,-1.4601266957738199e-9,0.0037942231481280977,-1.283322743822306e-5,-1.7462770627408988e-9,0.003794543866539171,-1.2648304256008901e-5,-2.0991058430070644e-9,0.003794785242433129,-1.2465858940810928e-5,-2.4467144889246194e-9,0.0037949550625008244,-1.232927438422763e-5,-2.7067816859225326e-9,0.003795080187817642,-1.2279927284374798e-5,-2.8009626097236014e-9,0.0037952065161867134,-1.2345871523227187e-5,-2.6763892980301933e-9,0.0037953921373555235,-1.2528542983790664e-5,-2.3307936469979733e-9,0.0037956913857025054,-1.2793157015980988e-5,-1.8305356927816436e-9,0.003796132776286854,-1.3071563213552118e-5,-1.3050406169510527e-9,0.0037967017325761278,-1.328280143626571e-5,-9.077926254452141e-10,0.0037973411548898497,-1.3364516232244082e-5,-7.568234874396928e-10,0.0037979727650269374,-1.3297561018064426e-5,-8.881042448926196e-10,0.003798527090663047,-1.3109356495992466e-5,-1.2492122368724608e-9,0.003798964917021712,-1.28570520619648e-5,-1.7313517826797332e-9,0.0037992820034057637,-1.2603783737617608e-5,-2.2145093402545987e-9,0.003799500926082306,-1.240063635168012e-5,-2.6017407417391375e-9,0.0037996585584883936,-1.2278587025970907e-5,-2.8344302677579545e-9,0.0037997952173949366,-1.2248205620853774e-5,-2.892780987975255e-9,0.0037999474748775944,-1.2303191954665917e-5,-2.789037696090718e-9,0.003800144171209063,-1.2424890429828608e-5,-2.5588855394347242e-9,0.0038004044225855666,-1.2586549203308632e-5,-2.2533402981175947e-9,0.003800736709459013,-1.2757180681021012e-5,-1.9313801867040904e-9,0.0038011386726849684,-1.2905234943333781e-5,-1.6529274004774604e-9,0.0038015976307220777,-1.300228941643676e-5,-1.4718298071475957e-9,0.0038020920655212837,-1.3026745702081325e-5,-1.4288825387251392e-9,0.0038025942999659027,-1.2967137471847075e-5,-1.5456250913598982e-9,0.0038030742779153713,-1.2824453504739554e-5,-1.8199956009474816e-9,0.0038035040835843223,-1.2613005619355985e-5,-2.224696148359336e-9,0.003803862725819495,-1.2359515273662385e-5,-2.7088896073266286e-9,0.0038041406058219682,-1.210021971862752e-5,-3.203654961905564e-9,0.003804343039903815,-1.187601536262798e-5,-3.6312222314006306e-9,0.0038044921992625045,-1.172572264151848e-5,-3.9178384073525195e-9,0.00380462650870891,-1.1677577510893996e-5,-4.010014190249887e-9,0.0038047960105914956,-1.1739750231113836e-5,-3.892553967922982e-9,0.0038050522524015824,-1.1892359741202971e-5,-3.603641811340095e-9,0.0038054328722651374,-1.2085474055587181e-5,-3.238495369877979e-9,0.003805944893983198,-1.224821847258572e-5,-2.931950879082715e-9,0.003806555314129275,-1.2310374852742212e-5,-2.8173999266934114e-9,0.003807197680863527,-1.2229146407934576e-5,-2.9759540232212596e-9,0.0038077950074467274,-1.2006673466743497e-5,-3.4031768325958983e-9,0.003808287639007238,-1.1687444632760447e-5,-4.014049779331443e-9,0.003808650970431554,-1.1338022030420527e-5,-4.681632012604156e-9,0.003808896131037573,-1.1022265614456972e-5,-5.284306129734353e-9,0.0038090582406506883,-1.0784417102233183e-5,-5.738002868905132e-9,0.0038091815513970188,-1.0643809594594406e-5,-6.006202185145872e-9,0.003809307974440942,-1.0597903969188504e-5,-6.094047127429888e-9,0.0038094707196667066,-1.062865600428072e-5,-6.036147477861492e-9,0.0038096919065528753,-1.070881560223071e-5,-5.8845641294033734e-9,0.003809982306819115,-1.0806887438420577e-5,-5.699365884995947e-9,0.003810341878982876,-1.0890883083801036e-5,-5.541482188826337e-9,0.003810760558410313,-1.0931470433055232e-5,-5.466698369518253e-9,0.003811219360612792,-1.0905036479831683e-5,-5.5198308461602985e-9,0.003811692191355198,-1.0796853778255012e-5,-5.728734249431048e-9,0.0038121488378866334,-1.0604042188757008e-5,-6.098714331775193e-9,0.0038125593293713445,-1.0337543772812268e-5,-6.608803289335694e-9,0.003812899313522184,-1.0022178567600895e-5,-7.211652084835195e-9,0.003813155569947561,-9.694053505107579e-6,-7.838435889364233e-9,0.003813330410478557,-9.395101236701062e-6,-8.409236512806301e-9,0.0038134436413059824,-9.165292526420089e-6,-8.847896464769259e-9,0.0038135310890633975,-9.033789295919845e-6,-9.098924795496566e-9,0.0038136392405932478,-9.010703935907942e-6,-9.143237881021444e-9,0.0038138161247166904,-9.081404582108e-6,-9.008993457535895e-9,0.003814099382214336,-9.205645720023213e-6,-8.773169562587337e-9,0.0038145038512597245,-9.323767143029389e-6,-8.549656250554983e-9,0.003815012795942145,-9.370894020933878e-6,-8.462137200027408e-9,0.0038155779477628124,-9.29673571143693E-06,-8.606350895718982e-9,0.0038161315938342274,-9.08397255339519e-6,-9.015063906599803e-9,0.0038166080185463146,-8.755923206484596e-6,-9.64348405426532e-9,0.003816965037754244,-8.368207760136484e-6,-1.0385219024877421e-8,0.003817195248806939,-7.988222530295059e-6,-1.1111520776134655e-8,0.0038173229340541176,-7.673167559394442e-6,-1.1713278449963451e-8,0.0038173910001939285,-7.456361956860252e-6,-1.212711923818663e-8,0.0038174460930694254,-7.344703089557365e-6,-1.234016488954878e-8,0.0038175278039535875,-7.323953104584782e-6,-1.2379836417372083e-8,0.00381766349450458,-7.3667834734719346E-06,-1.2298441630227018e-8,0.003817867345920316,-7.44006181186134e-6,-1.2159268639340678e-8,0.003818141527292887,-7.510114938000029e-6,-1.2026573341010378e-8,0.003818477933177015,-7.546220680736763e-6,-1.1958946292781465e-8,0.003818859819405176,-7.523169308927341e-6,-1.2004439996582582e-8,0.0038192634063506886,-7.4236603910782554e-6,-1.2196000644852678e-8,0.0038196599709800997,-7.2408663983656445e-6,-1.254657877456703e-8,0.003820019070571289,-6.980898470168708e-6,-1.3044426574530458e-8,0.0038203132898458427,-6.664287919255013e-6,-1.3650268900585339e-8,0.0038205242460868597,-6.325154432293589e-6,-1.4298887743684189e-8,0.0038206486164603457,-6.006817141678243e-6,-1.4907506500728048e-8,0.0038207020750147184,-5.75354803338733e-6,-1.5391558345619086e-8,0.0038207189146382747,-5.599839594091006e-6,-1.568521212544733e-8,0.0038207461938191602,-5.560151445206347e-6,-1.5760970711142652e-8,0.00382083315281559,-5.622636517693993e-6,-1.5641635859755003e-8,0.003821018492077559,-5.749455228146534e-6,-1.5399662200224305e-8,0.0038213190875863523,-5.884391306755396e-6,-1.5142562499287096e-8,0.0038217235693960125,-5.966361142703782e-6,-1.4987076158289204e-8,0.0038221931563597426,-5.9456270845393625e-6,-1.502819170366169e-8,0.0038226704818977797,-5.798272337779563e-6,-1.531149257821805e-8,0.0038230947974088572,-5.5340664292121286e-6,-1.581812655956149e-8,0.0038234191450172406,-5.194116998158923e-6,-1.6469310260958883e-8,0.003823623312951976,-4.838285790666961e-6,-1.7150435861376128e-8,0.0038237175482825378,-4.526986941152714e-6,-1.7745939341755873e-8,0.0038237362016777052,-4.3046651521168036e-6,-1.8170927741837015e-8,0.003823725137708133,-4.1908453164058315e-6,-1.8388262055022257e-8,0.003823728754133948,-4.180212251173304e-6,-1.8408322336149633e-8,0.0038237809830387044,-4.2490079943162265e-6,-1.8276693046141356e-8,0.0038239015028385787,-4.363551982793333e-6,-1.8057833412152605e-8,0.003824095946593768,-4.487740674388706e-6,-1.7820751134813358e-8,0.003824358126063857,-4.588281903972761e-6,-1.7629039709488436e-8,0.0038246727136478013,-4.637862217435199e-6,-1.753487003336477e-8,0.003825017627068585,-4.61711276381841e-6,-1.7575256806811815e-8,0.003825366118825118,-4.516259894351772e-6,-1.7768895996776932e-8,0.0038256891088083935,-4.336919177129825e-6,-1.8112701958105336e-8,0.0038259584950023394,-4.093846046758095e-6,-1.8578421203903003e-8,0.00382615197722384,-3.815735474025295e-6,-1.9111084395452904e-8,0.0038262592364493595,-3.543489200549398e-6,-1.963234108463913e-8,0.0038262880282502877,-3.3242349858685718e-6,-2.005195595532296e-8,0.0038262672917729517,-3.200584377536259e-6,-2.0288421016364784e-8,0.0038262439982333636,-3.197318624244381e-6,-2.029444817156697e-8,0.003826272400189211,-3.3105522427901474e-6,-2.0077656752741834e-8,0.0038263982363601133,-3.505059768382942e-6,-1.9705603558615896e-8,0.003826643866615569,-3.7224637285441357e-6,-1.929005491723827e-8,0.003827000550067141,-3.897808129259171e-6,-1.8955276671465806e-8,0.0038274307773840765,-3.9781801362031975e-6,-1.8802446818552187e-8,0.0038278791501668245,-3.936838386802747e-6,-1.8882656721060616e-8,0.003828287511464482,-3.7789936758587133e-6,-1.91858484343628e-8,0.003828609599833306,-3.538639788532877e-6,-1.9646859993872794e-8,0.0038288214789188135,-3.2682591437941436e-6,-2.01651251887211e-8,0.0038289254924217973,-3.0247269062595245e-6,-2.0631684713590868e-8,0.0038289472814131997,-2.855414110560565e-6,-2.0955834728401942e-8,0.0038289273259179074,-2.788188187669053e-6,-2.108429624581785e-8,0.0038289100096469695,-2.827593307999e-6,-2.100851341943847e-8,0.0038289336504991763,-2.957270847791984e-6,-2.0759969177050435e-8,0.0038290239989857604,-3.1466075062872564e-6,-2.0397397678011425e-8,0.0038291919363631554,-3.358735621529485e-6,-1.9991428033826533e-8,0.0038294345412146105,-3.5575484015966483e-6,-1.9611153660184545e-8,0.0038297379974115684,-3.7126062375014595e-6,-1.931477643950267e-8,0.0038300809546290265,-3.8019422327944494e-6,-1.9144289526878937e-8,0.003830437556664625,-3.813471476213471e-6,-1.9122815383613343e-8,0.0038307800423785735,-3.7458453013279217e-6,-1.925296167705247e-8,0.0038310813355700818,-3.6092600087004904e-6,-1.951522260747604e-8,0.003831318289772106,-3.4261620143933223e-6,-1.9866570427390518e-8,0.0038314761727888578,-3.2310651372663914e-6,-2.024078705408704e-8,0.003831554328173983,-3.067891478985199e-6,-2.0553606536838275e-8,0.00383157155253598,-2.9829338185445362e-6,-2.071629056719002e-8,0.0038315679388297268,-3.0127134004410304e-6,-2.0658964500687748e-8,0.0038315991481782685,-3.1692879484097765e-6,-2.0358751628086406e-8,0.0038317214021556132,-3.429727904878386e-6,-1.9859827008455862e-8,0.0038319713636641617,-3.7377031114383478e-6,-1.9270251199510938e-8,0.003832350581616624,-4.0199454376947184e-6,-1.8730381252591345e-8,0.003832823444733821,-4.211063811726861e-6,-1.8365375552540856e-8,0.0038333298168283644,-4.2746105018214276e-6,-1.82449115700899e-8,0.0038338051698647065,-4.211439514210527e-6,-1.8367216874901712e-8,0.003834198761806769,-4.0546278942909735e-6,-1.8668806860764246e-8,0.003834484151940069,-3.856273197654131e-6,-1.9049773936193798e-8,0.0038346613147808603,-3.6724518049993973e-6,-1.940260611015573e-8,0.0038347524550533677,-3.550605899014387e-6,-1.9636361789940677e-8,0.0038347942577808274,-3.52127028068912e-6,-1.969253972068335e-8,0.0038348288874075678,-3.5944825007219915e-6,-1.9551978029488838e-8,0.0038348954913967792,-3.7604912766397788e-6,-1.9233502467926943e-8,0.0038350235792819626,-3.9939514459539405e-6,-1.8785861778853742e-8,0.0038352291926199416,-4.260277158951203e-6,-1.8275496622939114e-8,0.003835514073341714,-4.522523088560736e-6,-1.7773291753942183e-8,0.0038358673369616493,-4.7473979554075516E-06,-1.7343025332758908e-8,0.0038362687210526454,-4.9095732722181525e-6,-1.7033139263666595e-8,0.00383669236799276,-4.99408908331157e-6,-1.6872194841765404e-8,0.003837110381916312,-4.997253315309627e-6,-1.6867206012024054e-8,0.0038374959397268127,-4.926686817006647e-6,-1.7003556999435392e-8,0.003837826168240292,-4.800973729438346e-6,-1.724561889505605e-8,0.0038380852198412027,-4.64897087800454e-6,-1.7538006826362915e-8,0.0038382680055769084,-4.508244405378731e-6,-1.780856000998818e-8,0.0038383845372422826,-4.4213473667315845e-6,-1.7975542156029803e-8,0.0038384635487548452,-4.428331072852901e-6,-1.7962111992879813e-8,0.003838552412999034,-4.554891468079644e-6,-1.7719129920892407e-8,0.003838709449637709,-4.79857611780019e-6,-1.7251579776228027e-8,0.003838986727658379,-5.120008018211622e-6,-1.6635275122453434e-8,0.0038394080255532118,-5.448208410521412e-6,-1.6006525398447498e-8,0.0038399539523913803,-5.703228860578149e-6,-1.5518689679738132e-8,0.003840565607656355,-5.826728491288216e-6,-1.5283563189269852e-8,0.0038411666084649057,-5.803303992373885e-6,-1.5330502316579828e-8,0.003841690669226006,-5.6615015185918996e-6,-1.5604511736937722e-8,0.0038421002535852433,-5.457713918832178e-6,-1.5997183329700725e-8,0.0038423907809453407,-5.254822630049416e-6,-1.6387728287251544e-8,0.003842584084612968,-5.1054363205735894e-6,-1.6675159725889587e-8,0.0038427176193724898,-5.043044755021766e-6,-1.6795248365588627e-8,0.003842834018332966,-5.07989312250766e-6,-1.6724578044920652e-8,0.003842972942410085,-5.209054269116863e-6,-1.6476567824802356e-8,0.0038431654789848045,-5.4086399567047076e-6,-1.60933997922233e-8,0.00384343077449617,-5.647036470412883e-6,-1.563595510392797e-8,0.00384377466746861,-5.888566057774086e-6,-1.5172890552403953e-8,0.003844190175581018,-6.098988812967744e-6,-1.477000694122479e-8,0.0038446595948861905,-6.250255466342545e-6,-1.4481091439427506e-8,0.003845157818995818,-6.324023724179862e-6,-1.4341201409106802e-8,0.0038456562996112983,-6.313615647304992e-6,-1.4362989566193652e-8,0.003846127011783707,-6.224437602563978e-6,-1.4535971378501742e-8,0.003846546039512686,-6.073206328661482e-6,-1.4828020425045514e-8,0.0038468967151338742,-5.886318244836747e-6,-1.518844046641186e-8,0.0038471724104394123,-5.6974965543184785e-6,-1.5552409101517088e-8,0.0038473791476006172,-5.544524492413738e-6,-1.5847232591313744e-8,0.0038475379016441485,-5.464345014145458e-6,-1.6001824499551356e-8,0.0038476855030219305,-5.485613097100651e-6,-1.596112434254084e-8,0.003847871879727775,-5.6186931393504005e-6,-1.5705383768277254e-8,0.0038481508803807564,-5.845389848453475e-6,-1.526986177286528e-8,0.003848563503714657,-6.114171536753636e-6,-1.4753886498476955e-8,0.0038491178160156275,-6.348715588209728e-6,-1.4304328128888127e-8,0.0038497770085141143,-6.472740813382431e-6,-1.4067840281603289e-8,0.0038504673064347367,-6.441502007513236e-6,-1.4130328256331074e-8,0.0038511053849232322,-6.261082594443713e-6,-1.4479857491646347e-8,0.003851629844832358,-5.983091492067725e-6,-1.5016874116127136e-8,0.003852018859395578,-5.680152288202065e-6,-1.5601434430578248e-8,0.0038522882875718684,-5.418923444947771e-6,-1.6105201466218447e-8,0.0038524776393092323,-5.243503092060938e-6,-1.644339124890214e-8,0.0038526343526436983,-5.171293042120779e-6,-1.658266798991624e-8,0.0038528022610099396,-5.196803821713961e-6,-1.6533754071038998e-8,0.003853015203081441,-5.2983925912731155e-6,-1.6338444310091512e-8,0.003853294442269686,-5.444945618229092e-6,-1.6056762373860484e-8,0.0038536482567425854,-5.601504835855946e-6,-1.5756133822008962e-8,0.0038540726814287585,-5.7339517789242305e-6,-1.550233250246981e-8,0.0038545530770026947,-5.813032433141409e-6,-1.535167747524828e-8,0.003855066511348219,-5.817774971569551e-6,-1.5344433001374196e-8,0.0038555849763886965,-5.738119863076067e-6,-1.5499788248752717e-8,0.0038560793166990247,-5.576384824864866e-6,-1.5813120373490353e-8,0.0038565234608473496,-5.347216994734051e-6,-1.6256150387493468e-8,0.0038568984147355433,-5.075979025649893e-6,-1.678004601450871e-8,0.00385719557764678,-4.795731754718215e-6,-1.7321162029551486e-8,0.0038574190570229696,-4.543041028615571e-6,-1.780903983008837e-8,0.003857586762326891,-4.352859428110214e-6,-1.817625138390654e-8,0.003857730049101876,-4.252572787910336e-6,-1.8369938134093778e-8,0.0038578912513364937,-4.255213948707043e-6,-1.8364992404288677e-8,0.003858117874957074,-4.3525404651654585e-6,-1.8177456727680517e-8,0.003858452354547486,-4.510210597999658e-6,-1.7873784612501723e-8,0.003858917791777117,-4.669051428707108e-6,-1.756829129472984e-8,0.003859503672194377,-4.756979406824098e-6,-1.7400082133742694e-8,0.003860160107605068,-4.712384004790362e-6,-1.7487936966225806e-8,0.0038608091664962376,-4.510570068775836e-6,-1.7879323414882926e-8,0.003861372398538454,-4.177424357879907e-6,-1.8524047943606895e-8,0.003861800506333025,-3.7795425476321384e-6,-1.9293349565570984e-8,0.0038620880164654562,-3.396288792625095e-6,-2.0033913711143205e-8,0.003862267166860147,-3.0911799396654256e-6,-2.062317555474824e-8,0.0038623893494130436,-2.8966628210158406e-6,-2.099867596807234e-8,0.003862506563495998,-2.8140990119499413e-6,-2.115798768293966e-8,0.0038626598321244918,-2.822389550608056e-6,-2.114198102596278e-8,0.003862874873005275,-2.8882527356427605e-6,-2.1014973901108832e-8,0.003863162336153394,-2.9744902195046028e-6,-2.0848814677809523e-8,0.0038635199304515298,-3.045533830271848e-6,-2.0712205478631623e-8,0.0038639348992436243,-3.0710234770790767e-6,-2.066378398501029e-8,0.0038643864355204357,-3.028367117469868e-6,-2.0747147455070232e-8,0.00386484822728367,-2.904831494192115e-6,-2.0986801911394604e-8,0.0038652914752601592,-2.699236644680084e-6,-2.1384920240420773e-8,0.003865688624510196,-2.4228755743300013e-6,-2.191962018272638e-8,0.00386601767419727,-2.0990064949875313e-6,-2.2545976090700474e-8,0.003866266452299767,-1.760409030734062e-6,-2.3200715561079226e-8,0.0038664359843247702,-1.4449098341719433e-6,-2.3810796904036255e-8,0.0038665420780329414,-1.1892409375748905e-6,-2.4305217895457498e-8,0.003866614450261009,-1.0220808697119544e-6,-2.4628464023641513e-8,0.0038666931331427633,-9.574329517630934e-7,-2.4753373068809092e-8,0.00386682224894407,-9.894664267422647e-7,-2.469119648990868e-8,0.0038670414158975728,-1.0900193002419434e-6,-2.449647640784153e-8,0.0038673755149895308,-1.2103925169421118e-6,-2.4263553007702945e-8,0.0038678247276590877,-1.2892296045959293e-6,-2.4111252377403624e-8,0.003868358444959499,-1.267252656795297e-6,-2.4154311249935473e-8,0.0038689178723244452,-1.106609395965305e-6,-2.446591385034712e-8,0.0038694306364283385,-8.077989637281885e-7,-2.504494355576824e-8,0.0038698345342124824,-4.141703486132289e-7,-2.5807311711834674e-8,0.003870099809101716,1.7314109784301966e-9,-2.661245619101961e-8,0.0038702378083155316,3.6458720020279093e-7,-2.7314567339474627e-8,0.0038702920854368386,6.214663267685033e-7,-2.7811317375819918e-8,0.0038703190910244194,7.53858335647063e-7,-2.8067074676155508e-8,0.00387036974897286,7.748010931081934e-7,-2.8107228302703305e-8,0.0038704788581488724,7.175311052953002e-7,-2.7996153658333026e-8,0.0038706626331334653,6.232083040671878e-7,-2.781347285744613e-8,0.0038709211656908133,5.318687125353667e-7,-2.7636609917695287e-8,0.003871242513436442,4.772284502188831e-7,-2.753078648423058e-8,0.003871606525933271,4.841804967947889e-7,-2.754418615260003e-8,0.0038719879135084533,5.675785755217659e-7,-2.7705577960566147e-8,0.003872358880346966,7.314004543716178e-7,-2.8022675148351287e-8,0.0038726919022138077,9.680249185641712e-7,-2.8480732932027746e-8,0.003872963138652044,1.2579586782204766e-6,-2.9042030043767234e-8,0.00387315657601737,1.5708285211382788e-6,-2.9647789466682646e-8,0.0038732683373289547,1.86855923238929e-6,-3.0224309921934445e-8,0.0038733099271485473,2.1112153111972303e-6,-3.069424612561177e-8,0.003873308852725411,2.2650543922665764e-6,-3.0992188082449424e-8,0.0038733053736022243,2.3111642765606837e-6,-3.108140596859698e-8,0.003873345192169577,2.2521788410355123e-6,-3.0966904370240415e-8,0.0038734693367986866,2.1146262125177263e-6,-3.0700024716839653e-8,0.003873703593536369,1.9454980220390796e-6,-3.037183659191588e-8,0.0038740502205765353,1.8030645268901052e-6,-3.009534652539585e-8,0.003874484463380578,1.7433559304306285e-6,-2.997927136727451e-8,0.003874957745425761,1.805067475563303e-6,-3.009872427079351e-8,0.0038754081819814224,1.9969121911983876e-6,-3.0470633717663e-8,0.0038757768904046563,2.2921729176794824e-6,-3.104314330933098e-8,0.0038760255596562514,2.6342273406501153e-6,-3.1706344087442033e-8,0.003876148467003275,2.953007064522305e-6,-3.232426651598912e-8,0.003876173208269964,3.1867247516892045e-6,-3.2777089184574225e-8,0.0038761496228379723,3.299682974732298e-6,-3.2995681880150156e-8,0.0038761325461103228,3.2890272755367357e-6,-3.297463097922817e-8,0.003876166403606068,3.179714693762658e-6,-3.276239593634084e-8,0.003876276896591104,3.0126859225590633e-6,-3.243833774524097e-8,0.0038764701624275557,2.8325579269208208e-6,-3.208888404389721e-8,0.0038767365992111737,2.6787515873070964e-6,-3.1790385133102694e-8,0.003877056148306675,2.580816495240054e-6,-3.160009687833867e-8,0.003877403029010765,2.556826343211539e-6,-3.1553084495681475e-8,0.0038777493008821016,2.613289973686861e-6,-3.166203618942354e-8,0.0038780675614554605,2.745446505360736e-6,-3.191780672517262e-8,0.003878333476381656,2.937524412643369e-6,-3.2289889347489e-8,0.0038785287779384415,3.1632353044676755e-6,-3.2727348319001116e-8,0.0038786449743421613,3.38733667833281e-6,-3.3161835770498974e-8,0.0038786873128192818,3.569409484611795e-6,-3.351491898098499e-8,0.003878677591593657,3.6707118908738144e-6,-3.371139093728882e-8,0.003878653651155005,3.663736005572876e-6,-3.369782934114989e-8,0.003878663611183559,3.5420997935283253e-6,-3.346179770353897e-8,0.003878754731082063,3.3267106762652564e-6,-3.304380167421774e-8,0.003878959662882301,3.0642480397399228e-6,-3.2534349810315585e-8,0.0038792851193151815,2.8166766000497898e-6,-3.2053637071171815e-8,0.003879707781335941,2.644580007151263e-6,-3.171924924585675e-8,0.003880179414535661,2.590044261113597e-6,-3.161296170025512e-8,0.003880639462395093,2.664856929841553e-6,-3.175779169109812e-8,0.003881030963909623,2.847441295081661e-6,-3.211196330829822e-8,0.003881315132026455,3.088989773401876e-6,-3.258074793403881e-8,0.003881480673019954,3.3267950065992406e-6,-3.304234350010906e-8,0.0038815453906210946,3.500934082932849e-6,-3.33803219040278e-8,0.0038815497710628015,3.5694288741531944e-6,-3.3513127109619604e-8,0.003881544796778198,3.5173837589184617e-6,-3.341184114435914e-8,0.003881578212321525,3.3577257039687044e-6,-3.310159999772678e-8,0.0038816837406748395,3.1243817248589497e-6,-3.264830861127478e-8,0.0038818760151617553,2.8614164265762064e-6,-3.213752525507882e-8,0.0038821512694009203,2.612341272483004e-6,-3.165370238768937e-8,0.0038824917692874394,2.4124461107722537e-6,-3.1265314802538124e-8,0.003882871480346175,2.2849072067360234e-6,-3.1017329356398934e-8,0.0038832611824149987,2.2398928027330586e-6,-3.0929494207351274e-8,0.0038836323245214632,2.275318774487282e-6,-3.099781618751069e-8,0.0038839597921307414,2.378108423025778e-6,-3.119699030134757e-8,0.0038842242152507703,2.5254286212354412e-6,-3.148275781095068e-8,0.0038844144663355965,2.686059250390416e-6,-3.179451894543604e-8,0.0038845306688387576,2.822639547206788e-6,-3.2059675183163195e-8,0.003884587357003466,2.8959475224504465e-6,-3.220196455639171e-8,0.0038846153737523,2.8722310269464106e-6,-3.21557550736718e-8,0.003884660056959134,2.7333387608771316e-6,-3.18857668919105e-8,0.0038847732762158013,2.4869046599035173e-6,-3.1406851357082614e-8,0.0038849991252745794,2.1712642698410145e-6,-3.0793495921892944e-8,0.0038853574442500984,1.8496451423368823e-6,-3.016850650976043e-8,0.0038858330515733975,1.5925789224385644e-6,-2.9668865383990577e-8,0.003886377556622482,1.4547566015723252e-6,-2.940082528056271e-8,0.0038869241473787107,1.4569552475180457e-6,-2.9404819127186324e-8,0.0038874085176017156,1.5809669809562609e-6,-2.9645564220367717e-8,0.003887786800305342,1.7780034980890623e-6,-3.002832302171855e-8,0.0038880447159318995,1.9850173646662214e-6,-3.0430573951043864e-8,0.0038881971924163384,2.1420596256770285e-6,-3.073574438290413e-8,0.003888280961175994,2.205781072292864e-6,-3.085948449380518e-8,0.0038883435694981065,2.1568374784550173e-6,-3.076410840731744e-8,0.0038884319296096136,2.0009593416802778e-6,-3.0460718017368735e-8,0.00388858281744708,1.7646673454508626e-6,-3.000089846925649e-8,0.003888816937092785,1.487387634284406e-6,-2.9461380448588014e-8,0.003889137213009564,1.2122368285186793e-6,-2.8926083312790018e-8,0.0038895308769200843,9.77741933194379e-7,-2.8469964105098837e-8,0.0038899740437511265,8.120453633245923e-7,-2.81477220260484e-8,0.003890437171818333,7.300902557734322e-7,-2.7988343358411724e-8,0.0038908900772970704,7.333723847624609e-7,-2.7994672649499975e-8,0.0038913058202770783,8.11313345377628e-7,-2.8146131740211625e-8,0.003891663485624368,9.432958331578632e-7,-2.8402680159512044e-8,0.0038919502946732623,1.1008399990349611e-6,-2.8708996787877187e-8,0.0038921635340459903,1.2499486900889057e-6,-2.8998973546822423e-8,0.0038923125934744473,1.3541502616078596e-6,-2.9201603267134142e-8,0.0038924208408559866,1.379197734291158e-6,-2.9250157793629576e-8,0.0038925260361622285,1.3003034856014153e-6,-2.909634192665132e-8,0.0038926769630940033,1.1115916402400212e-6,-2.8728743103664676e-8,0.0038929238963934187,8.34996763450161e-7,-2.819013439953649e-8,0.003893302729372596,5.229491681716229e-7,-2.7582633768285374e-8,0.0038938176635446077,2.486270920040773e-7,-2.704868519022275e-8,0.0038944323474479204,8.290889866841129e-8,-2.6726217478885122e-8,0.0038950779585628413,6.71542862886964e-8,-2.6695708784190685e-8,0.0038956768103849595,1.9679611586948285e-7,-2.694825472718397e-8,0.003896169311776245,4.2495370109331924e-7,-2.73925766726845e-8,0.003896530677936019,6.822594553111313e-7,-2.7893606935094835e-8,0.0038967721729981984,9.007324311420936e-7,-2.8318972956552194e-8,0.003896930972109137,1.0312737312306008e-6,-2.8573056292209646e-8,0.0038970560356940956,1.0512333616440805e-6,-2.8611714898809007e-8,0.0038971954492596143,9.637576168076825e-7,-2.84410251401411e-8,0.0038973875128366286,7.922909732076531e-7,-2.8106623400673385e-8,0.003897655773663217,5.73039745366953e-7,-2.7679078820458593e-8,0.0038980074203048315,3.470975623162463e-7,-2.723855936562174e-8,0.003898434383602654,1.532557749678879e-7,-2.686076811069166e-8,0.003898916483642837,2.2273778031217942e-8,-2.6605698033749048e-8,0.003899425869944706,-2.6879705272445377e-8,-2.651026260606674e-8,0.003899931946443452,1.135752503116599e-8,-2.658517606455315e-8,0.003900405988380751,1.2952483923987927e-7,-2.6815784333920333e-8,0.0039008248607193337,3.0902597073996624e-7,-2.7165815642283763e-8,0.0039011736945926885,5.228355224148576e-7,-2.7582659172522265e-8,0.003901447733469793,7.385703341824681e-7,-2.800327930437387e-8,0.0039016535931530446,9.218576909926763e-7,-2.8360689234556944e-8,0.003901810063641041,1.0402342282423203e-6,-2.8591513682344532e-8,0.0039019482346590566,1.068114437545263e-6,-2.8645727584383664e-8,0.0039021099156309434,9.933162871447647e-7,-2.8499486010026745e-8,0.0039023425147539973,8.245733393134014e-7,-2.816985246159411e-8,0.0039026886667243655,5.973876226969504e-7,-2.7726207946250197e-8,0.0039031709184319144,3.732053312467776e-7,-2.728856993304565e-8,0.003903776436955178,2.2643689124575264e-7,-2.7002203145251322e-8,0.0039044517336320776,2.1908852626009318e-7,-2.6988107235954432e-8,0.0039051160269753435,3.7343990320735743e-7,-2.728970832405026e-8,0.0039056904602020087,6.597257455398579e-7,-2.7848816986833218e-8,0.0039061274952976715,1.008182754458275e-6,-2.8529159419230002e-8,0.003906424029832539,1.337864454440272e-6,-2.917267690733211e-8,0.0039066143239121455,1.584673185538172e-6,-2.9654276855512307e-8,0.003906751629333246,1.7160417124478927e-6,-2.991045051383723e-8,0.003906889981347287,1.7312807173328777e-6,-2.993987957694521e-8,0.003907072257425082,1.6535639424178371e-6,-2.978777180552823e-8,0.003907324953080964,1.5196860399174986e-6,-2.9525923596991393e-8,0.003907657617907691,1.3710174126904936e-6,-2.9235136326534077e-8,0.003908064791635279,1.246627938272527e-6,-2.8991808582392042e-8,0.003908529121213566,1.178355331974727e-6,-2.8858246582644022e-8,0.0039090251008069895,1.1874723538953122e-6,-2.8876064406570793e-8,0.0039095231741027164,1.2828026766380307e-6,-2.9062457134925734e-8,0.003909993971965604,1.4602429723720258e-6,-2.940930205385144e-8,0.003910412376088683,1.7037257014122688e-6,-2.9885126077279e-8,0.003910760972899444,1.9875614267849495e-6,-3.043974711070414e-8,0.003911032543742426,2.279815827653438e-6,-3.1010855542352346e-8,0.003911231493909528,2.5463069029857515e-6,-3.153173238001942e-8,0.003911374222650876,2.7549910335127733e-6,-3.193972170951845e-8,0.003911488384327841,2.880624085469085e-6,-3.218531726661661e-8,0.003911610864352182,2.909667982481857e-6,-3.224183476086153e-8,0.003911783886839922,2.84536194505679e-6,-3.211546429333361e-8,0.003912048236733935,2.7121190655270843e-6,-3.1853969077637996e-8,0.003912432956737331,2.5569177610852085e-6,-3.1549408250500364e-8,0.003912942711842446,2.4439948046497946e-6,-3.13276712957956e-8,0.003913547494005578,2.439525781374463e-6,-3.1318405148871284e-8,0.003914182801008766,2.587612510786791e-6,-3.160796365905382e-8,0.00391476670682019,2.8876813198392386e-6,-3.219515496038958e-8,0.003915229878465214,3.288612511808708e-6,-3.297977441605243e-8,0.00391554262842195,3.707168304776008e-6,-3.3798756641249064e-8,0.003915722816780819,4.061134667377567e-6,-3.449114586943816e-8,0.0039158221519932715,4.297554871760769e-6,-3.495337435976911e-8,0.003915902612886247,4.403020028690837e-6,-3.5159304982510026e-8,0.003916016771863963,4.3972762305046315e-6,-3.51476057496457e-8,0.003916198069716032,4.319425094326008e-6,-3.499472431255641e-8,0.003916459596845121,4.214738888555488e-6,-3.4789167335719515e-8,0.003916797401300606,4.125457418511884e-6,-3.46135897824814e-8,0.003917195121291198,4.085545626385126e-6,-3.453456558879286e-8,0.003917628376812855,4.118078743411213e-6,-3.459741276197698e-8,0.00391806864547818,4.234057023541767e-6,-3.4823781820516536e-8,0.0039184868549933145,4.432100524385358e-6,-3.521100643460954e-8,0.003918856894454718,4.698942282664103e-6,-3.5733089149345645e-8,0.003919159062997544,5.010909292212568e-6,-3.634366398414867e-8,0.003919383180819294,5.336673361384431e-6,-3.698142096457321e-8,0.003919530829987342,5.641296545403175e-6,-3.757799607711368e-8,0.0039196162213828035,5.891218249778886e-6,-3.8067651883344666e-8,0.0039196653747344806,6.059652716046391e-6,-3.8397777275256785E-08,0.003919713456096689,6.131770978781817e-6,-3.853905013964011e-8,0.003919800276775679,6.108967573413839e-6,-3.849390802272054e-8,0.003919964045053333,6.011521522845613e-6,-3.830191792649171e-8,0.003920233494230299,5.878730153642338e-6,-3.804014811232711e-8,0.003920618992780859,5.764983763374026e-6,-3.781547454419313e-8,0.00392110459247313,5.730010496430183e-6,-3.7745352062984805e-8,0.0039216448866342514,5.822802882578071e-6,-3.792614771435408e-8,0.00392217165582521,6.062441369382195e-6,-3.839540769990899e-8,0.003922612784897084,6.424343781374744e-6,-3.910483982583697e-8,0.003922918279510956,6.842549813656679e-6,-3.9924854655693004e-8,0.0039230801956615,7.231684285990491e-6,-4.068779460101494e-8,0.003923134148926395,7.5187772284920845e-6,-4.125047503163074e-8,0.003923141833425455,7.667435752105012e-6,-4.1541586012182924e-8,0.003923166269325025,7.683166138878378e-6,-4.1571999586433136e-8,0.003923253198934327,7.602234341381125e-6,-4.1412808153840096e-8,0.00392342418128479,7.474463541507354e-6,-4.1161593315289665e-8,0.003923678875818511,7.348774715809465e-6,-4.091417238620076e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json new file mode 100644 index 0000000..509a7d1 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":24000,"numberOfSamples":1000,"samples":[0.003924001349468574,7.264665173102422e-6,-4.0747989552475184e-8,0.003924366586169156,7.248790607297544e-6,-4.0715438046854016e-8,0.0039247455983737215,7.31449699975775e-6,-4.084288354023843e-8,0.003925109134008881,7.462510402409807e-6,-4.1131928535769936e-8,0.003925430619334403,7.681943579661476e-6,-4.156132990390201e-8,0.003925688916221978,7.9515663056217e-6,-4.208949033990723e-8,0.003925871139610513,8.241724001493012e-6,-4.26582543580377e-8,0.003925975343160025,8.517452558510482e-6,-4.319903585164052e-8,0.003926012408625573,8.743124708146312e-6,-4.364190844664137e-8,0.0039260062351111815,8.888393011087458e-6,-4.392721436513869e-8,0.0039259914819518545,8.934553769547599e-6,-4.401802379763859e-8,0.003926008601681654,8.87995541059872e-6,-4.391078722925618e-8,0.003926096603853184,8.742886424791559e-6,-4.364111335220435e-8,0.003926284700461693,8.560700555841224e-6,-4.328218871863738e-8,0.003926584419799495,8.38460458304358e-6,-4.293463839580567e-8,0.003926983982520055,8.27018419490559e-6,-4.270791978660203e-8,0.003927446933578442,8.26450952654458e-6,-4.269489056436631e-8,0.003927917035426422,8.392007583137403e-6,-4.294388907717355e-8,0.003928330548152765,8.643213090672838e-6,-4.343648270886796e-8,0.003928634404239271,8.97202431142347e-6,-4.4082022548759444e-8,0.003928804571353034,9.306016764539644e-6,-4.473798796749362e-8,0.003928855847415065,9.568840746130847e-6,-4.525415343428905e-8,0.0039288366735898165,9.705875342600683e-6,-4.552310678124801e-8,0.003928810708523999,9.70075387287824e-6,-4.5512697637589113e-8,0.003928834802404048,9.575566014901797e-6,-4.526632710582171e-8,0.003928943827175889,9.377534807333275e-6,-4.487669985208786e-8,0.003929146690245219,9.161289638700064e-6,-4.445102369531869e-8,0.003929431010766044,8.97479258527682e-6,-4.408344678591044e-8,0.003929771249439363,8.851942834798086e-6,-4.3840594450064106e-8,0.003930136299987928,8.810775413828423e-6,-4.375803213461219e-8,0.0039304949376361325,8.854733935909684e-6,-4.3842713182813283e-8,0.003930819251349883,8.97490756364095e-6,-4.4077307493303816e-8,0.003931086911330102,9.152169769274805e-6,-4.442436000944777e-8,0.0039312831240633185,9.359120650070548e-6,-4.4830096409770687e-8,0.003931402736278697,9.562353565431697e-6,-4.522888479978551e-8,0.0039314523679986994,9.725809891954073e-6,-4.554983213541918e-8,0.003931451821677968,9.81581544058732e-6,-4.572667330703574e-8,0.0039314335373014,9.807739373223678e-6,-4.5710846370490446e-8,0.003931438847422937,9.693139686684408e-6,-4.5485541526462294e-8,0.003931510540598468,9.485126741041124e-6,-4.507628154878644e-8,0.0039316827752822045,9.21922505098598e-6,-4.455269004539336e-8,0.003931971055312627,8.947933809120098e-6,-4.401789076476449e-8,0.0039323657307728825,8.729358784614993e-6,-4.358622919525109e-8,0.003932831731699162,8.612643855888081e-6,-4.335462841531593e-8,0.003933315344617792,8.62429738570606e-6,-4.337560654570439e-8,0.003933756715300976,8.759463349484685e-6,-4.363994931455601e-8,0.003934105106059232,8.981053856326873e-6,-4.407485811762412e-8,0.003934332913929343,9.227877438043526e-6,-4.4559891225405716e-8,0.0039344440871193175,9.430525068002884e-6,-4.4958286576969273e-8,0.003934473402796723,9.530858688927084e-6,-4.5155432327327116e-8,0.003934475863914978,9.498545685117723e-6,-4.509149078422063e-8,0.003934509718222492,9.33827824991407e-6,-4.47756142603218e-8,0.003934619792227327,9.085158588882537e-6,-4.427682786107174e-8,0.003934827415641757,8.791280140237335e-6,-4.369760258181166e-8,0.00393512933343696,8.510038014808986e-6,-4.31429928445453e-8,0.0039355035636141015,8.284081649552148e-6,-4.269695029529051e-8,0.003935918018543304,8.139406686077033e-6,-4.241070000822375e-8,0.003936338353846052,8.084775818140693e-6,-4.2301584302013366e-8,0.003936733445406277,8.114176353890525e-6,-4.235787766689351e-8,0.0039370785461212525,8.210197709692123e-6,-4.254541828860122e-8,0.003937356971767464,8.347130480599071e-6,-4.281369430236631e-8,0.003937561263758311,8.493567783692922e-6,-4.310094762045791e-8,0.003937694438031615,8.615002843389891e-6,-4.333926631812809e-8,0.003937771330134241,8.67725650150846e-6,-4.346131796842194e-8,0.003937819322870859,8.651508326884634e-6,-4.3410256470381495e-8,0.003937877058427044,8.521099894445721e-6,-4.3153137231452934e-8,0.003937989463885939,8.288931327634417e-6,-4.269550841092151e-8,0.003938198228981029,7.982475866423666e-6,-4.209131265757179e-8,0.003938529202136906,7.652421272823026e-6,-4.144024574779018e-8,0.003938981172624146,7.362348631112524e-6,-4.086748201679056e-8,0.003939521858698951,7.171057158621901e-6,-4.048891544782165e-8,0.003940094615197016,7.113880374154503e-6,-4.0374365707466556e-8,0.0039406342007793785,7.190918645244552e-6,-4.052432522098116e-8,0.003941085456845227,7.366953288287352e-6,-4.086966435709471e-8,0.003941417979926735,7.582297213206803e-6,-4.1292902967637985e-8,0.003941632550878733,7.769811582108233e-6,-4.1661704613367465e-8,0.0039417586573959,7.872367731094012e-6,-4.186332403044912e-8,0.00394184498935138,7.856147459827803e-6,-4.183089280710224e-8,0.003941946090056001,7.716963831159671e-6,-4.155595404739903e-8,0.003942108844751583,7.478721284531861e-6,-4.1085488184775086e-8,0.003942362280649743,7.1851264448118275e-6,-4.0505610055412035e-8,0.003942713056297738,6.887545188092401e-6,-3.9917635489093076e-8,0.003943147094181412,6.63285056822077e-6,-3.9414089140640513e-8,0.00394363576055283,6.45458746493619e-6,-3.906122521138246e-8,0.003944143851940386,6.3689698481875325e-6,-3.889108334065558e-8,0.003944636869159611,6.375238897636767e-6,-3.89021835862169e-8,0.003945086178514301,6.458758785510235e-6,-3.906566285644976e-8,0.003945471885644119,6.595087712929455e-6,-3.9333345409787816e-8,0.003945784062145488,6.75381682031183e-6,-3.96453240801719e-8,0.0039460231949269235,6.9018086924852714e-6,-3.993631138475404e-8,0.003946200484182494,7.0061699834473986e-6,-4.0141443325436696e-8,0.003946338123548155,7.037663514739489e-6,-4.020297398706976e-8,0.003946469030517169,6.975321308310946e-6,-4.007939202239149e-8,0.0039466347171631935,6.8125615268396335e-6,-3.9757548945000605e-8,0.003946879526314831,6.563781000662389e-6,-3.926572917290399e-8,0.003947240113576192,6.26832771088985e-6,-3.8681519815076635e-8,0.00394773162032693,5.987155767768718e-6,-3.8125213666258697e-8,0.00394833606959585,5.788678511154436e-6,-3.7731893344309e-8,0.0039490010315956,5.726070108611301e-6,-3.760663760887806e-8,0.003949653254363835,5.815841448021564e-6,-3.778221021701663e-8,0.003950222933085804,6.029784395114221e-6,-3.8203094717768544e-8,0.003950666763769117,6.305251283013329e-6,-3.874572335149639e-8,0.003950978997636163,6.567633107643007e-6,-3.926282625402561e-8,0.003951187946508848,6.753390037519353e-6,-3.9628897768472654e-8,0.003951342970045106,6.82499234587586e-6,-3.9769697357740485e-8,0.00395149899125544,6.775528812781524e-6,-3.9671369919487616e-8,0.003951703461040263,6.625121099539185e-6,-3.9373432374454456e-8,0.003951987858015527,6.412572497682793e-6,-3.8952382552237284e-8,0.003952363959429004,6.185216687773946e-6,-3.8501729618800614e-8,0.003952824318389738,5.9890392604355895e-6,-3.811248119847719e-8,0.003953346084383744,5.8605580191022866e-6,-3.7857015174201214e-8,0.003953896995412957,5.821583390244034e-6,-3.777860582122305e-8,0.003954442092751837,5.877359468380301e-6,-3.7887672658214384e-8,0.003954949781935346,6.017769412892624e-6,-3.816417373000497e-8,0.003955396289717578,6.220694202785564e-6,-3.856432318594815e-8,0.003955768174884203,6.456367672750993e-6,-3.902927598979735e-8,0.003956063179994125,6.691705169501888e-6,-3.949369249275251e-8,0.003956290051901221,6.894111093467348e-6,-3.989319559509603e-8,0.003956467854520423,7.034854759428582e-6,-4.017095218887658e-8,0.0039566249669400816,7.092436622888951e-6,-4.0284290088954386e-8,0.003956797478346305,7.056481487425291e-6,-4.021245059161304e-8,0.003957025994777186,6.932388600346256e-6,-3.996590300588929e-8,0.003957349414623954,6.7458410699163445e-6,-3.959537173887109e-8,0.003957794778545756,6.544498614818847e-6,-3.9195220973930975e-8,0.003958364489074411,6.392651543668574e-6,-3.889283923884582e-8,0.003959026190955713,6.355295837039837e-6,-3.881705762450065e-8,0.003959713978117959,6.473712946892012e-6,-3.904975388942963e-8,0.003960346658841707,6.743821961530491e-6,-3.958294960032686e-8,0.003960857575990237,7.112323350996538e-6,-4.031115186969541e-8,0.0039612197932018854,7.496174919039376e-6,-4.10699402100219e-8,0.003961452306299503,7.814588012843276e-6,-4.169936348567501e-8,0.003961606574536528,8.01530911676443e-6,-4.209596468724888e-8,0.003961744529834369,8.08439052342442e-6,-4.223205431160473e-8,0.003961919898203691,8.041055608842375e-6,-4.2145503385516964e-8,0.003962167934107929,7.92540646416268e-6,-4.1915471608097986e-8,0.003962502766954194,7.785608877629877e-6,-4.1637175222764884e-8,0.003962919504652272,7.667738377555936e-6,-4.140189174962666e-8,0.00396339860412415,7.6088866362392024e-6,-4.128330394764023e-8,0.003963911081389532,7.633028280277278e-6,-4.132919427751386e-8,0.003964423927548092,7.749152914604407e-6,-4.1557593105492124e-8,0.003964905318504584,7.951432583245587e-6,-4.1957026443146924e-8,0.003965329172806784,8.221199670866641e-6,-4.249046155503989e-8,0.0039656786145144665,8.530378408627668e-6,-4.310220299700377e-8,0.003965947990889918,8.845841392371245e-6,-4.37266017606286e-8,0.003966143368775138,9.134007815143316e-6,-4.429715430491004e-8,0.003966281763390242,9.365126081644348e-6,-4.475489492347632e-8,0.003966389432433808,9.517028569907252e-6,-4.50557398961551e-8,0.0039664994413490615,9.578380169243303e-6,-4.517691762130738e-8,0.003966648478154706,9.551562333274848e-6,-4.512279719134597e-8,0.003966872442131501,9.455213790585541e-6,-4.493010285476397e-8,0.003967200009096507,9.325645135291122e-6,-4.4670856835179115e-8,0.003967643942139405,9.215087087823338e-6,-4.4448923046119814e-8,0.0039681916280942,9.183905742556441e-6,-4.438445858297688e-8,0.003968799131557344,9.284666046934797e-6,-4.4582129386551373e-8,0.003969395714603861,9.540259293398974e-6,-4.508756258136944e-8,0.0039699037202130414,9.926237027984614e-6,-4.585222439096121e-8,0.003970268552470416,1.0371684773005795e-5,-4.673521137896835e-8,0.003970482142169558,1.078412203468818e-5,-4.755282003004367e-8,0.0039705843561092195,1.10860283048514e-5,-4.815115477383973e-8,0.003970642360386332,1.1241376583518066e-5,-4.845874452293147e-8,0.003970722821708415,1.125981504453911e-5,-4.8494689966727235e-8,0.0039708723071808566,1.11829441885822e-5,-4.834134805360363e-8,0.003971110919069601,1.1065211622363857e-5,-4.810650188240576e-8,0.003971435431608885,1.0958632735931508e-5,-4.7893216781566505e-8,0.003971826265812919,1.0903990546723049e-5,-4.778250186894762e-8,0.003972254586729742,1.0927283245886881e-5,-4.782624238951511e-8,0.003972688105211575,1.1039249843146977e-5,-4.8046116883982526e-8,0.0039730955939297884,1.1236386675066273e-5,-4.843545087392066e-8,0.00397345054557075,1.1502799362280447e-5,-4.8962807876693554e-8,0.003973734208169738,1.1812792318729848e-5,-4.9577158828296015e-8,0.003973937950405579,1.2134265111817801e-5,-5.021471558067026e-8,0.003974064679006379,1.2432918992578263e-5,-5.080734411592102e-8,0.003974128944467808,1.2676973960732623e-5,-5.129190491821449e-8,0.003974155556457899,1.2841827542246017e-5,-5.1619414061577866e-8,0.0039741767870729505,1.2914097734147498e-5,-5.1763003268766806e-8,0.003974228381508199,1.2894585117898373e-5,-5.1723840310494984e-8,0.0039743446740342315,1.2799778794775203e-5,-5.1534278839920305e-8,0.003974553031218095,1.2661651645222267e-5,-5.1257656952560386e-8,0.00397486770830553,1.252526192551265e-5,-5.0983665712715536e-8,0.003975283624309093,1.244306855380536e-5,-5.081702986908633e-8,0.003975771762776541,1.2464764616558008e-5,-5.085712444532777e-8,0.003976279358595454,1.2622668128129355e-5,-5.1168686224427466e-8,0.003976738806949802,1.2915806066879637e-5,-5.174997205879499e-8,0.00397708712480231,1.3300494013523065e-5,-5.251398213335525e-8,0.003977290708495544,1.3697307875515348e-5,-5.3302462984544026e-8,0.003977362035950759,1.4017395454687275e-5,-5.393846232144907e-8,0.003977355858695399,1.4196719691249908e-5,-5.429455632185751e-8,0.003977345605575303,1.4218583669657343e-5,-5.433755885903962e-8,0.003977394646971235,1.4112859234273654e-5,-5.412679978292305e-8,0.003977538120767945,1.3937040535825622e-5,-5.377637606636613e-8,0.003977780313015663,1.3753373811437281e-5,-5.3409789340420174E-08,0.0039781024005110955,1.361276026355333e-5,-5.312812805725196e-8,0.003978473023124186,1.3547849219766439e-5,-5.299644136530384e-8,0.003978857094370713,1.3572654477401475e-5,-5.304293291262342e-8,0.00397922161367756,1.3685187261991948e-5,-5.326404503945597e-8,0.0039795391090315735,1.387078103509612e-5,-5.363091484811033e-8,0.003979789799970764,1.4105237357237993e-5,-5.4095556401576257e-8,0.0039799632178153825,1.4357845076354077e-5,-5.45968922420498e-8,0.003980059500806607,1.4594673222991368e-5,-5.506737604277994e-8,0.003980090142970023,1.4782539911570218e-5,-5.5440930753357645e-8,0.003980077642195864,1.4893710156689642e-5,-5.566226817310781e-8,0.003980053468419345,1.4910803096605801e-5,-5.56965853216742e-8,0.0039800541106269635,1.4830983623911673e-5,-5.553787293347947e-8,0.0039801154418540406,1.466838142817004e-5,-5.5213797919344863e-8,0.003980266139921954,1.4453775388946017e-5,-5.478524269653043e-8,0.003980521287767714,1.4231023369268172e-5,-5.4339391697161045e-8,0.003980877353979621,1.4050315119139707e-5,-5.397640762167942e-8,0.003981309717837675,1.395868469966156e-5,-5.3790488944141864e-8,0.003981774090037387,1.3988628469092594e-5,-5.3846999457069773e-8,0.003982213281677193,1.4146764402475845e-5,-5.415961657859051e-8,0.003982570011449755,1.4406143821260008e-5,-5.467482526558627e-8,0.003982804131697453,1.47071498764841e-5,-5.527369286809923e-8,0.003982908778352366,1.4970992193698437e-5,-5.579891732093303e-8,0.003982916824397885,1.5124448073961797e-5,-5.6104337480320424e-8,0.003982891263406429,1.5126160410236833e-5,-5.610742482232311e-8,0.00398290215454356,1.4980743595872157e-5,-5.581730514030468e-8,0.0039830019202654705,1.4733222541316497e-5,-5.532354528930037e-8,0.003983211326857249,1.4448727937037265e-5,-5.4755680309660146e-8,0.003983520104257227,1.4189885389384998e-5,-5.423828496751849e-8,0.003983897259054235,1.4001826693159665e-5,-5.386125283385029e-8,0.003984303459136277,1.3907216352427944e-5,-5.366993275012876e-8,0.003984700579759181,1.3908279420985249e-5,-5.3669095525382856e-8,0.003985057207973846,1.399170223752423e-5,-5.3832563887307894e-8,0.00398535107067196,1.4133635001783242e-5,-5.411306762933109e-8,0.003985569881970607,1.4303771905497005e-5,-5.445033306625039e-8,0.0039857117052029475,1.4468652878353123e-5,-5.4777689929636526e-8,0.003985785248092382,1.4594817843348775e-5,-5.502840613731594e-8,0.003985809897015252,1.4652472383143383e-5,-5.514301337657362e-8,0.003985814826438397,1.4619974837042523e-5,-5.5078226609295487e-8,0.0039858363205629195,1.4488750116827408e-5,-5.481669944437828e-8,0.003985912714645442,1.426742833517886e-5,-5.4375274115178266e-8,0.003986077146685968,1.3983468945714063e-5,-5.380829619913038e-8,0.003986349418788184,1.3680607655818763e-5,-5.320267121504874e-8,0.003986729243878734,1.3411429492368585e-5,-5.266321054783875e-8,0.003987193368925278,1.3226052188088213e-5,-5.229014065094215e-8,0.0039876982347206835,1.3159498917999302e-5,-5.2153854337675876E-08,0.00398818833657533,1.3221106579292605e-5,-5.227358445765773e-8,0.003988608901007278,1.338916970518754e-5,-5.260647556617648e-8,0.003988920183252699,1.3613194193081244e-5,-5.3051916801022585e-8,0.003989109646982799,1.3824650626505712e-5,-5.347299765131535e-8,0.003989197746223967,1.3954767944424933e-5,-5.373215558025435e-8,0.003989233827788415,1.3954763566654355e-5,-5.373171638754063e-8,0.003989281800794039,1.3811236850979288e-5,-5.3444699852450874e-8,0.003989400134260441,1.3549823535973889e-5,-5.292209959911019e-8,0.003989624365284392,1.3225093106393183e-5,-5.227268643727621e-8,0.003989959279866753,1.290162083662521e-5,-5.1625249279043706e-8,0.0039903824814073756,1.2635093520500604e-5,-5.109093995112096e-8,0.00399085532254792,1.2460509228031144e-5,-5.0739748289693165e-8,0.003991335096141489,1.2389290014694273e-5,-5.0594703090057124e-8,0.003991784193685639,1.2412788238110021e-5,-5.063879306432595e-8,0.0039921750376531425,1.2508400657934924e-5,-5.082710027342623e-8,0.0039924916979013365,1.264552801312763e-5,-5.109866380876292e-8,0.003992729733420645,1.2790244411010073e-5,-5.138580639540977e-8,0.003992895505481774,1.2908774182592685e-5,-5.162109554086806e-8,0.003993005539841018,1.2970483448082949e-5,-5.1743325651077926e-8,0.003993085805853583,1.2951169554634605e-5,-5.170407528089941e-8,0.0039931702182065525,1.2837098930575677e-5,-5.1475750096119304e-8,0.003993297356816803,1.2629535465925717e-5,-5.106062222453551e-8,0.003993504537036869,1.2348458326471559e-5,-5.04982889205154e-8,0.00399381928261621,1.2033164964636035e-5,-4.9866956012253766e-8,0.003994250001187529,1.1737322154317254e-5,-4.9273662215669775e-8,0.0039947794474397376,1.1517572315967707e-5,-4.883161802180583e-8,0.003995364932969854,1.1417909076784898e-5,-4.8629022529340004e-8,0.0039959471867255245,1.145512467560501e-5,-4.8699907040692296e-8,0.003996465923696541,1.1611411554188564e-5,-4.9009176717670445e-8,0.003996876828671035,1.1837637422183225e-5,-4.9458966925161574e-8,0.003997163971009506,1.2066380201857806e-5,-4.991458667779847e-8,0.003997343759283495,1.2230228260355551e-5,-5.024110820721207e-8,0.003997459714537061,1.227962356731739e-5,-5.033913205513782e-8,0.0039975700174394516,1.2195246540345806e-5,-5.016966528746188e-8,0.0039977315793668896,1.199171433994848e-5,-4.9761614483588085e-8,0.003997985303974457,1.1711837911922054e-5,-4.920037428897476e-8,0.003998346858193554,1.1413566865496914e-5,-4.8601769213070115e-8,0.0039988053495900785,1.1154143067304714e-5,-4.808037527313077e-8,0.0039993293627035445,1.0976671983429418e-5,-4.7722620398013583e-8,0.003999877225762814,1.0902767894712806e-5,-4.7571985490559816e-8,0.004000407493370264,1.0931979187466173e-5,-4.762776490445662e-8,0.00400088668699902,1.1046120607170104e-5,-4.785368769200271e-8,0.0040012933178902805,1.1215681826101956e-5,-4.8190753288722657e-8,0.004001618824597613,1.140602944436198e-5,-4.856968419517292e-8,0.004001866716617343,1.1582292382143262e-5,-4.8920729394387654e-8,0.004002051089467816,1.1712900988527266e-5,-4.9180732644461024e-8,0.004002195134543225,1.1772393926335084e-5,-4.9298705411811596e-8,0.0040023296147842545,1.1744241358596293e-5,-4.9241438831947997e-8,0.004002490702025333,1.1624164492064202e-5,-4.9000150214148706e-8,0.004002716177242634,1.1423787492992013e-5,-4.859784391910101e-8,0.0040030390227214704,1.1173356864132723e-5,-4.8094833920023865e-8,0.004003478361347815,1.0920997712239193e-5,-4.7587334303852796e-8,0.004004029802038545,1.0725563863908767e-5,-4.719320099784125e-8,0.004004659792221574,1.0641953511935584e-5,-4.7022548424382676e-8,0.004005309358395405,1.0702231547952575e-5,-4.713991105371558e-8,0.004005909305357476,1.0900742430031743e-5,-4.7534332339053704e-8,0.004006402231050277,1.1192022790909333e-5,-4.8115061170983004e-8,0.004006761493609258,1.1504328555145381e-5,-4.8738556290387605e-8,0.004006998416788491,1.1762810600434922e-5,-4.925487801263246e-8,0.0040071557972175655,1.1911802199676452e-5,-4.955234189469917e-8,0.004007292492485376,1.1928068755813912e-5,-4.9584090451901684e-8,0.004007466154921649,1.182270536529946e-5,-4.9371962164986925e-8,0.004007719484345561,1.1633960677447274e-5,-4.8992235679285965e-8,0.004008072516982853,1.1415035698476774e-5,-4.855132546462214e-8,0.004008521247009628,1.1220739757355388e-5,-4.81591306861145e-8,0.004009041556486812,1.1095986552782165e-5,-4.790595409748483e-8,0.004009596684482728,1.1068126254001404e-5,-4.784699794194256e-8,0.004010146061004549,1.1144061978931795e-5,-4.799641499742937e-8,0.0040106533603855915,1.1311869844993711e-5,-4.833044905420133e-8,0.004011092236707525,1.1545566812726804e-5,-4.8796997573800546e-8,0.004011449171177877,1.1811239466230054e-5,-4.9327987188523245e-8,0.004011723764818403,1.2072971677857698e-5,-4.985134835693644e-8,0.00401192736389657,1.2297623888833959e-5,-5.0300619813788786e-8,0.004012080963416897,1.2458294160137046e-5,-5.06218316152855e-8,0.004012212952149902,1.2536886563441079e-5,-5.077857415701251e-8,0.004012356748830488,1.2526361690877996e-5,-5.075648134300845e-8,0.004012547921684051,1.2433048238960548e-5,-5.0567928963629637e-8,0.0040128199805693305,1.2278886932150372e-5,-5.025666471468604e-8,0.004013197985529161,1.2102470950470938e-5,-4.990002190519058e-8,0.00401369000353784,1.1956510006150005e-5,-4.960388878819715e-8,0.004014278532066863,1.1898883530667995e-5,-4.948472066423443e-8,0.0040149167491389135,1.197622246061075e-5,-4.963648586630433e-8,0.004015535619726837,1.2203997061740317e-5,-5.0090569001978953e-8,0.004016064005360639,1.2553240036393509e-5,-5.0789018255737813e-8,0.0040164548830214815,1.2954750430225737e-5,-5.1592962190804215e-8,0.004016703733644348,1.3322431746732769e-5,-5.232951731508461e-8,0.004016848431434354,1.3584310465564186e-5,-5.2854110685949694e-8,0.004016951977140229,1.3704978067918915e-5,-5.309550581731473e-8,0.00401707918422125,1.3690726517722423e-5,-5.3066050186417026e-8,0.004017278464444657,1.3580022117076173e-5,-5.284257367174307e-8,0.004017573349390648,1.3427603643939568e-5,-5.253461517336548e-8,0.004017962524787026,1.3289293461804937e-5,-5.2254123260796106e-8,0.004018424992325505,1.3210932934703492e-5,-5.2093339215260626e-8,0.0040189273729024705,1.3221997414880813e-5,-5.211190437947683e-8,0.0040194315062708425,1.3333214209773679e-5,-5.2331872879317006e-8,0.004019901334926071,1.3537385768781908e-5,-5.273915282943784e-8,0.00402030839443015,1.3812681913253474e-5,-5.3290015781132485e-8,0.004020635440219238,1.4127527132908653e-5,-5.392095666905157e-8,0.004020878035146411,1.4446146519830484e-5,-5.455996088115213e-8,0.004021044226821732,1.473392798977689e-5,-5.513737746601209e-8,0.00402115275112109,1.496191131793451e-5,-5.559493860655362e-8,0.004021230393628464,1.5110074592057919e-5,-5.589227823087387e-8,0.004021308993990323,1.5169566143298608e-5,-5.601133518705951e-8,0.004021422225284333,1.5144214158221058e-5,-5.595940175161358e-8,0.0040216019835709,1.505150937068162e-5,-5.57712373201424e-8,0.004021873939755527,1.4922916833095616e-5,-5.550989215428107e-8,0.0040222517467002885,1.4802621499919506e-5,-5.5264327043482085e-8,0.004022730175355548,1.4742845077977562e-5,-5.513999395696767e-8,0.00402327924617558,1.4793651408929851e-5,-5.5238179247849234e-8,0.004023843665981839,1.498685836194858e-5,-5.562340967782772e-8,0.004024352851506316,1.5318263529964064e-5,-5.62874975195311e-8,0.004024743118745088,1.573836892528872e-5,-5.7130821512435726e-8,0.004024984194842726,1.6162535861771282e-5,-5.7982877436069443E-08,0.004025094377176705,1.6501026274800637e-5,-5.866291758713605e-8,0.004025133037057492,1.6693810177365013e-5,-5.9050065212816505e-8,0.0040251747474465615,1.6730082192383597e-5,-5.912247029379822e-8,0.004025281332087344,1.6644195416193686e-5,-5.894897656672424e-8,0.004025485746450353,1.6495866969054968e-5,-5.864930998217878e-8,0.004025790429201538,1.634835179138792e-5,-5.8350370181822665e-8,0.0040261746462862255,1.6253223052331517e-5,-5.815584387978385e-8,0.0040266044641294775,1.624327250382378e-5,-5.813200951807451e-8,0.004027041638836209,1.633135361213576e-5,-5.8305293951082345e-8,0.00402745025711566,1.6512469372403883e-5,-5.866622925242898e-8,0.00402780134494779,1.6767326438795646e-5,-5.917637987828972e-8,0.004028075926393701,1.7066612366788847e-5,-5.977686171643531e-8,0.004028266748303052,1.7375686093179322e-5,-6.039784671300595e-8,0.004028378700267617,1.7659404592882538e-5,-6.096841423803015e-8,0.004028427921096438,1.7886793273255926e-5,-6.142604364033798e-8,0.00402843964084909,1.8035151508268353e-5,-6.172486403108444e-8,0.004028445012514573,1.809312331270539e-5,-6.184175008856881e-8,0.0040284773268235005,1.8062494703952662e-5,-6.177988665082503e-8,0.004028567910222432,1.7958723498241694e-5,-6.156990468255793e-8,0.004028741861400401,1.781021131030546e-5,-6.12686094634135e-8,0.0040290136622913525,1.765619786846825e-5,-6.095496322789188e-8,0.0040293826809504,1.754280016104753e-5,-6.07222216328837e-8,0.004029829124215082,1.751619084809753e-5,-6.066410876225836e-8,0.004030312256108125,1.7612020509539247e-5,-6.085324393616324e-8,0.004030774031389632,1.7841815454699297e-5,-6.131341293797681e-8,0.00403115142107213,1.8180564860966387e-5,-6.199433879515745e-8,0.0040313974300052735,1.8563852856182064e-5,-6.27659191383855e-8,0.004031503203472192,1.8902856758312773e-5,-6.344869780801121e-8,0.004031507215610012,1.9116091643266002e-5,-6.387812802255732e-8,0.004031481930153734,1.916242569246173e-5,-6.397118926916185e-8,0.004031503768949901,1.9055383830683572e-5,-6.375504333127174e-8,0.004031624504421274,1.885153534554923e-5,-6.334344369125224e-8,0.00403185885677837,1.8623798019755862e-5,-6.288296518438462e-8,0.004032189274944319,1.8436620157024645e-5,-6.250321630029159e-8,0.004032579178971542,1.83324637336343e-5,-6.228981683190497e-8,0.004032986090714059,1.8329161981569122e-5,-6.227911243671427e-8,0.0040333708125981456,1.8423493871162983e-5,-6.246522183995398e-8,0.004033702484811329,1.8596808258675e-5,-6.281112340841897e-8,0.0040339608469825575,1.882045266602357e-5,-6.325939983367222e-8,0.004034137070431829,1.906045203237547e-5,-6.374161530130195e-8,0.004034233855241526,1.928170635220029e-5,-6.41868612531973e-8,0.004034264876079334,1.9452018078757834e-5,-6.453000617107153e-8,0.004034253391531761,1.9546047063260236e-5,-6.47197441623075e-8,0.004034229755724816,1.9548977882390267e-5,-6.472596597020264e-8,0.004034227730682795,1.9459320969577683e-5,-6.454533452522716e-8,0.004034279865723162,1.9290186380915923e-5,-6.420383235003002e-8,0.004034412486171448,1.9068594732676885e-5,-6.375547510633614e-8,0.00403464093034948,1.8832637893526655e-5,-6.327679436677401e-8,0.004034965687074627,1.8626536313167505e-5,-6.285707244922939e-8,0.004035370034247165,1.8493819644007736e-5,-6.258465123000945e-8,0.004035819874790727,1.846886648562048e-5,-6.252971679787746e-8,0.004036266904185114,1.856732169763407e-5,-6.272465029492704e-8,0.0040366565598250765,1.8777113738250836e-5,-6.31455681508602e-8,0.0040369414612311345,1.9053783781087113e-5,-6.370271942688705e-8,0.004037098344333292,1.932539834606959e-5,-6.42504851948613e-8,0.004037141902942749,1.951083270094533e-5,-6.462457097034529e-8,0.004037125865169994,1.954813798447868e-5,-6.46995458547251e-8,0.004037125861820998,1.9419995141300983e-5,-6.444028053955575e-8,0.00403721048480607,1.9160768124473176e-5,-6.391602935018678e-8,0.004037416430514758,1.88403649270376e-5,-6.326771012194285e-8,0.0040377405727112705,1.853563684839144e-5,-6.265022145619625e-8,0.004038149143064464,1.8305856043064805e-5,-6.218312567891382e-8,0.004038594479970898,1.8181596820678142e-5,-6.192833669694351e-8,0.004039029805036155,1.8165835433560526e-5,-6.189230839848963e-8,0.004039418015136255,1.8241197474729e-5,-6.204049708155263e-8,0.0040397350446880215,1.837815198734788e-5,-6.231370568667206e-8,0.004039969999138671,1.8541650006683282e-5,-6.264136381327966e-8,0.004040124041563737,1.8695860404660215e-5,-6.295108921511804e-8,0.004040209074777056,1.8807706049100226e-5,-6.317591860236914e-8,0.004040246363654397,1.88500021655281e-5,-6.32607471793734e-8,0.004040264737547788,1.8804636954320954e-5,-6.316879237455187e-8,0.004040297831687618,1.866571824947087e-5,-6.288791561688243e-8,0.004040379958326903,1.844201983765977e-5,-6.243550964565625e-8,0.004040540705219954,1.8157672301950075e-5,-6.185990253089828e-8,0.004040799030115895,1.7850119174229367e-5,-6.123634554926798e-8,0.0040411581509778,1.7564868093298403e-5,-6.065660011340943e-8,0.004041602732207329,1.734741098407994e-5,-6.021277355052825e-8,0.0040420995762303815,1.7233639004230466e-5,-5.997796689164541e-8,0.004042602323436688,1.724067110935005e-5,-5.998756494201581e-8,0.00404305992163886,1.736012884995211e-5,-6.022533875758978e-8,0.004043427966196684,1.7555910433464828e-5,-6.061865961283453e-8,0.0040436810936756275,1.7768500926616962e-5,-6.104709566844615e-8,0.004043823230883101,1.7927149455153616e-5,-6.1367140862782e-8,0.004043891164479845,1.7968977540453174e-5,-6.145110341710769e-8,0.004043947176700689,1.7860007267002482e-5,-6.122984744605595e-8,0.0040440603521150744,1.760913353792817e-5,-6.072111082777755e-8,0.004044282997667049,1.726658843338252e-5,-6.002633777071843e-8,0.004044633306112802,1.6905912165610116e-5,-5.929416783466505e-8,0.0040450925842591984,1.6598297213721576e-5,-5.866858772554347e-8,0.004045616463144047,1.6391968202125593e-5,-5.824729428445154e-8,0.004046152091763345,1.630410509649094e-5,-5.80653572847142e-8,0.004046652760383014,1.6324348036651065e-5,-5.8102214711525505e-8,0.004047085929565268,1.6424100266681775e-5,-5.830035937199191e-8,0.004047435228495953,1.6566189179488793e-5,-5.8584786032397173e-8,0.004047698959744002,1.671216642566975e-5,-5.8877737365682856e-8,0.004047887444712365,1.6826943646276348e-5,-5.9108127517374904e-8,0.00404802049508203,1.6881670483517197e-5,-5.9217433706880595e-8,0.004048125273323472,1.6855947238255258e-5,-5.9164217502915826e-8,0.004048234127401434,1.674008799311883e-5,-5.8928701076803824e-8,0.004048381670060571,1.6537530470193916e-5,-5.851761039418674e-8,0.004048600436416601,1.6266746291805815e-5,-5.796802584768781e-8,0.004048914984056892,1.5961326425245878e-5,-5.734760338043135e-8,0.004049335282066074,1.566668088020222e-5,-5.674801447212363e-8,0.0040498513719114376,1.5432414454828066e-5,-5.626965875165331e-8,0.004050431921230339,1.5301075079280176e-5,-5.5998974280483204e-8,0.004051028668995067,1.5296083993458358e-5,-5.598395649797168e-8,0.004051586738790464,1.5412983005455173e-5,-5.62162478465142e-8,0.004052058328986434,1.5617600591062285e-5,-5.6627167195976384e-8,0.004052415758160085,1.5852514347711364e-5,-5.7100596870077054e-8,0.004052659913064241,1.6050494133565283e-5,-5.7500160816537554e-8,0.0040528214440387015,1.6151570852562244e-5,-5.7703907353645075e-8,0.004052953861013157,1.611931020329749e-5,-5.763746552942237e-8,0.004053119682835466,1.595162622613579e-5,-5.729612717276807e-8,0.004053373025435257,1.5682212292362576e-5,-5.6747852350428666e-8,0.004053744027610918,1.537106055446932e-5,-5.611410681536437e-8,0.004054230846152612,1.5086637935810276e-5,-5.553375453822118e-8,0.004054802304411898,1.488624806595296e-5,-5.5123232299645195e-8,0.0040554095026198176,1.4802029857689209e-5,-5.494808734565473e-8,0.004056000829014219,1.4836834906018199e-5,-5.501449222707493e-8,0.0040565344012080526,1.496913360261363e-5,-5.527907211829798e-8,0.004056984713435475,1.5162646600086324e-5,-5.5668377746635783e-8,0.004057343673139978,1.537616244421555e-5,-5.609881419197702e-8,0.004057618154709957,1.5570907870645105e-5,-5.6491651348612124e-8,0.004057826336088842,1.571498161585009e-5,-5.678207302107251e-8,0.004057994236563965,1.5785663812756403e-5,-5.692387796847087e-8,0.004058152876449292,1.5770755436499932e-5,-5.6892175274642595e-8,0.004058335730497766,1.56698047725992e-5,-5.6685842838322767e-8,0.004058575736492297,1.5495479753201927e-5,-5.6330312045967666e-8,0.004058901067412491,1.5274593050186677e-5,-5.587969998232432e-8,0.0040593292989023755,1.504744016568601e-5,-5.541556302293769e-8,0.004059860688647646,1.4863522530534258e-5,-5.5038323485976716e-8,0.004060472924789321,1.4772178278052189e-5,-5.484831991380623e-8,0.004061121016256655,1.4808824187926628e-5,-5.491786333355384e-8,0.004061745398388068,1.4980995070619321e-5,-5.526278213620586e-8,0.0040622878335508355,1.5260905424743596e-5,-5.58271445794069e-8,0.00406270977840194,1.5589957864201896e-5,-5.6492254117461846e-8,0.004063005280007226,1.5895053516072876e-5,-5.71096919262533e-8,0.004063202722944347,1.611033761314179e-5,-5.7545486920249105e-8,0.004063355322523949,1.6195737978189514e-5,-5.7717829505718655e-8,0.004063524982892078,1.614629397440836e-5,-5.761611433490631e-8,0.0040637654881181635,1.5990874718776372e-5,-5.729846921069878e-8,0.0040641096822484745,1.5782374878243806e-5,-5.687200018963553e-8,0.004064563196214051,1.558309622417832e-5,-5.646323142518138e-8,0.004065105372946402,1.5449401160722053e-5,-5.6186965778914343e-8,0.004065696400389077,1.5419375479983378e-5,-5.612111731815594e-8,0.004066288252635861,1.5506240841777267e-5,-5.6293121212787874e-8,0.004066836155862962,1.5698542971993716e-5,-5.668010909236039e-8,0.004067307459695976,1.5966009975132922e-5,-5.7220705532581126e-8,0.00406768613309999,1.6268363193234948e-5,-5.783296271933897e-8,0.004067972917711898,1.6564106468153707e-5,-5.8432340733695405e-8,0.004068182486831887,1.681727652571284e-5,-5.894554234053274e-8,0.00406833933892352,1.7001503611134662e-5,-5.931880776278692e-8,0.004068473756113949,1.7101841750667816e-5,-5.952159722920657e-8,0.004068618388467829,1.7115337876791556e-5,-5.9547687041123166e-8,0.004068805319711415,1.7051183194416186e-5,-5.941546370891142e-8,0.004069063045413328,1.693080237181354e-5,-5.9168176976249445e-8,0.004069412642286213,1.6787584460103433e-5,-5.887352588619779e-8,0.004069862675046376,1.6665125654505054e-5,-5.862021049541122e-8,0.0040704033862420915,1.6612132979317868e-5,-5.8507611354420696e-8,0.004071002433343476,1.6672362317351996e-5,-5.8625252169843815e-8,0.004071606146962371,1.6870078458229394e-5,-5.90230533337598e-8,0.004072150180031084,1.7195707718266797e-5,-5.968194828764344e-8,0.004072579327330133,1.7600304654934825e-5,-6.050250155157372e-8,0.004072869038903364,1.800622384140864e-5,-6.132663264350784e-8,0.004073036765467772,1.8332569931295446e-5,-6.1989505493645e-8,0.004073135737926338,1.852349328887892e-5,-6.237718185712606e-8,0.004073234663677566,1.85650892687075e-5,-6.246099877342193e-8,0.004073394556097025,1.848476914851136e-5,-6.229627231999442e-8,0.004073652726352091,1.833737723399551e-5,-6.199414171839608e-8,0.004074017372470005,1.818678426452505e-5,-6.168431508746106e-8,0.0040744707750797445,1.808984214398682e-5,-6.148259812586677e-8,0.004074977337424825,1.8085790232343694e-5,-6.14693541796517e-8,0.004075493263269258,1.8191439776279438e-5,-6.167952512829171e-8,0.004075975798354961,1.840124607827241e-5,-6.210249277646861e-8,0.004076390776901895,1.8691144047334405e-5,-6.268964660170682e-8,0.004076717622217568,1.902494399145827e-5,-6.336732629192284e-8,0.004076951353972912,1.9361837440099986e-5,-6.405219775676581e-8,0.004077101746210127,1.96635091438295e-5,-6.46659095300111e-8,0.0040771903314508785,1.989970237527024e-5,-6.514655672234517e-8,0.004077246262806788,2.005165635670929e-5,-6.545569860243698e-8,0.004077302032084395,2.0113486301099913e-5,-6.558109876386352e-8,0.0040773896466789,2.0092092019349717e-5,-6.553647593087778e-8,0.004077537342209875,2.0006253451383885e-5,-6.535969647604283e-8,0.004077766555167821,1.988527789663943e-5,-6.511016738314298e-8,0.004078088689458051,1.976710784085783e-5,-6.486516989220184e-8,0.004078501328342447,1.96951136887764e-5,-6.471343334262049e-8,0.004078984379126887,1.971216651307541e-5,-6.474300004433253e-8,0.004079498090171917,1.985082590723176e-5,-6.502100525056876e-8,0.004079986278779378,2.0120252289371937e-5,-6.55667052274478e-8,0.004080388235941525,2.0494122797303468e-5,-6.632662153528476e-8,0.004080659282108669,2.0908086133771597e-5,-6.716933519624624e-8,0.0040807921628955995,2.1274886377819846e-5,-6.791652262392293e-8,0.004080825530396653,2.151542116556529e-5,-6.840653341073122e-8,0.00408083076942298,2.1590301346052778e-5,-6.855881484240877e-8,0.00408088328291802,2.1513241158620907e-5,-6.84010788689678e-8,0.004081035155949392,2.134019848115492e-5,-6.804703209129059e-8,0.004081302546732209,2.1144355238359504e-5,-6.764545015636383e-8,0.004081668918553097,2.0992072249557375e-5,-6.733141248227607e-8,0.00408209685499066,2.092848134334002e-5,-6.719713964870882e-8,0.004082540990125184,2.09731231952271e-5,-6.72830951751148e-8,0.004082958197133572,2.112218615191573e-5,-6.758231956110174e-8,0.00408331422869279,2.1353847294547875e-5,-6.805099975797541e-8,0.0040835874057665485,2.1634567155020024e-5,-6.862106700376206e-8,0.004083770116681637,2.1925434668298697e-5,-6.921309213990532e-8,0.004083868551366543,2.218816882099307e-5,-6.974866033503243e-8,0.0040839008942840345,2.239039499761978e-5,-7.016132947403248e-8,0.004083894232067077,2.250978778831476e-5,-7.0405207142333e-8,0.004083880571241067,2.25366960163881e-5,-7.046030306590217e-8,0.00408389252947929,2.2475031488631666e-5,-7.033426314434203e-8,0.004083959249418965,2.2341562177163083e-5,-7.00608865512821e-8,0.004084102836943754,2.2163971654346905e-5,-6.969625158825354e-8,0.004084335399848269,2.1977972812721735e-5,-6.931302372966625e-8,0.004084656614019778,2.1823582213426522e-5,-6.899305140282665e-8,0.004085051725131036,2.1740298666453316e-5,-6.881758196303943e-8,0.00408549043013785,2.1760499615591525e-5,-6.88536205880247e-8,0.004085928134416261,2.1900671848150498e-5,-6.913569532030017e-8,0.0040863118371121795,2.215161693360532e-5,-6.964550832191338e-8,0.004086592559838579,2.2471365259167905e-5,-7.029728262333709e-8,0.004086743511323791,2.278742626781085e-5,-7.094245749548945e-8,0.004086777069432108,2.3014650869490377e-5,-7.140649996468963e-8,0.004086748324489586,2.3086554162397423e-5,-7.155319319147187e-8,0.004086737210606845,2.298478523801362e-5,-7.134486880118048e-8,0.0040868162246094596,2.274751838270059e-5,-7.085933294161156e-8,0.004087022774633262,2.245098166859568e-5,-7.025197183973786e-8,0.004087351063401967,2.21773293531232e-5,-6.969023534135919e-8,0.004087762942117613,2.1988078250473938e-5,-6.929965848306815e-8,0.004088206426731321,2.1912888693068682e-5,-6.914113536613453e-8,0.0040886315320029145,2.1951514131721826e-5,-6.921484527465759e-8,0.004088999563181579,2.2082048330308014e-5,-6.947683655171173e-8,0.004089286694209541,2.227007195705091e-5,-6.985740065000953e-8,0.0040894840997412005,2.2476260228544262e-5,-7.027641992708612e-8,0.004089596524746182,2.2662126678655353e-5,-7.065510425729817e-8,0.004089640201779963,2.2794420332461283e-5,-7.092513321189004e-8,0.0040896402838893646,2.284862699133553e-5,-7.103599943485881e-8,0.004089627705490863,2.2811697616913437e-5,-7.096068474456991e-8,0.004089635411507748,2.2683801109797253e-5,-7.069921973276663e-8,0.004089694115390104,2.2478677051700234e-5,-7.027932793650815e-8,0.004089828036207196,2.2222286505042233e-5,-6.975365444924291e-8,0.004090051161470819,2.1949786269337134e-5,-6.919369964114232e-8,0.004090364511991667,2.170103932630054e-5,-6.86808528694382e-8,0.004090754790796106,2.151498959955255e-5,-6.829506592183514e-8,0.004091194666195651,2.142330844766789e-5,-6.810185855541579e-8,0.004091644993372157,2.1443624281504225e-5,-6.813824314344391e-8,0.0040920596967446154,2.1572833523424404e-5,-6.83986719144852e-8,0.004092394222561333,2.1782031162445324e-5,-6.88243378416857e-8,0.00409261763274889,2.2016102025325163e-5,-6.93022303226837e-8,0.0040927261558925485,2.2201941671687712e-5,-6.968213454108016e-8,0.004092752390399775,2.226781056753669e-5,-6.98165868041908e-8,0.004092761828782771,2.217010941896625e-5,-6.961594162020133e-8,0.004092832347522563,2.191489742469643e-5,-6.90924145000651e-8,0.004093023916310563,2.1559197363135236e-5,-6.836256507621499e-8,0.004093355382863215,2.1188443825140062e-5,-6.760103065423595e-8,0.004093801442773309,2.0883140487863215e-5,-6.697239893387999e-8,0.004094308353665391,2.0693642127327703e-5,-6.657980636574702e-8,0.004094815962852751,2.0632674505226746e-5,-6.644971858931919e-8,0.0040952745320277885,2.068224872375703e-5,-6.654596569206641e-8,0.0040956524926629954,2.0806194730034872e-5,-6.67951505187713e-8,0.004095937126088291,2.0961685991746184e-5,-6.711000602505771e-8,0.004096131713874594,2.1107263596701378e-5,-6.740571701477901e-8,0.004096251810518326,2.1207630473032185e-5,-6.760979080112129e-8,0.004096321810660583,2.123646163530461e-5,-6.766796655208107e-8,0.004096371868974252,2.117828020698269e-5,-6.754820351325027e-8,0.004096434786498749,2.102987222746858e-5,-6.724363080817744e-8,0.0040965424713340064,2.0801158863912584e-5,-6.677428971329367e-8,0.004096721827951759,2.0514974467630822e-5,-6.618661611930796e-8,0.004096990403276643,2.0205057223031076e-5,-6.554934138305202e-8,0.004097352573177603,1.9911884762201487e-5,-6.494509874821933e-8,0.0040977972420050135,1.9676507214749987e-5,-6.445798705026133e-8,0.00409829795293573,1.953307645034436e-5,-6.415839226662203e-8,0.00409881595753222,1.950131413892924e-5,-6.408749767114518e-8,0.0040993062317397294,1.958041987144307e-5,-6.424454113672405e-8,0.004099725949858662,1.9745840788228674e-5,-6.457984351456717e-8,0.004100044534043069,1.9950335607570126e-5,-6.499672432697775e-8,0.004100253632198516,2.013084019847643e-5,-6.536554032319219e-8,0.004100374104936217,2.0221969791798727e-5,-6.555157283498206e-8,0.004100455954183344,2.017477740412432e-5,-6.545379905395303e-8,0.0041005675891791,1.9975516702515512e-5,-6.504358355699308e-8,0.004100774805833544,1.965545542492212e-5,-6.438482789008002e-8,0.004101116885460426,1.928372582152993e-5,-6.361922074229146e-8,0.004101591870619371,1.894360567216253e-5,-6.291755062884213e-8,0.004102159238000308,1.8703470116557066e-5,-6.242018269746027e-8,0.00410275747591571,1.859703517591237e-5,-6.219659152435074e-8,0.0041033257619690735,1.8620141853715126e-5,-6.223872071816769e-8,0.004103819526959297,1.874065523208672e-5,-6.248114525442182e-8,0.004104216341986781,1.8912959818053868e-5,-6.283064370406833e-8,0.004104514378076207,1.909031638156852e-5,-6.319144791179558e-8,0.004104727475774354,1.9232607115184218e-5,-6.348113509152911e-8,0.004104879851426564,1.931006277488053e-5,-6.363836365897142e-8,0.004105001750774871,1.9304641429037065e-5,-6.362581755356893e-8,0.004105126061105588,1.9210481227772614e-5,-6.343120965738759e-8,0.004105285298052878,1.903412670485694e-5,-6.306774716776545e-8,0.004105508333763851,1.879451414608241e-5,-6.257405625726658e-8,0.004105816518487927,1.8522105372562953e-5,-6.201237977882163e-8,0.004106219408261088,1.8256224455901378e-5,-6.146316659960243e-8,0.004106711031782206,1.8039834534071813e-5,-6.101448588822051e-8,0.00410726820104739,1.7911758794004197e-5,-6.074620274769431e-8,0.00410785241819564,1.7897526858302653e-5,-6.071123337928272e-8,0.004108416180285091,1.8001212401072268e-5,-6.091866896065255e-8,0.0041089130241994485,1.820113748087769e-5,-6.132469615222139e-8,0.004109309104207408,1.8451646262672002e-5,-6.183595690444914e-8,0.0041095931983087045,1.869153552715818e-5,-6.232669811154938e-8,0.004109782084836411,1.8857869433917337e-5,-6.266717936609684e-8,0.004109919049387194,1.890226775739589e-5,-6.275732940350907e-8,0.004110064678761718,1.8805497319272342e-5,-6.255697025959145e-8,0.004110281124285083,1.858555641793577e-5,-6.210261238000375e-8,0.004110613703963449,1.829511610327427e-5,-6.150227952510236e-8,0.004111076186029953,1.8007169267841526e-5,-6.090602884987728e-8,0.004111646199815092,1.779292050803584e-5,-6.046048759796877e-8,0.0041122733354077975,1.770055011084275e-5,-6.026514317284309e-8,0.0041128962379817155,1.774357289428051e-5,-6.034829633072815e-8,0.004113460777981091,1.790224628658376e-5,-6.06698069713779e-8,0.004113932211375858,1.8134726118468195e-5,-6.114390913053563e-8,0.004114298813701848,1.8391239948785017e-5,-6.166830949707429e-8,0.004114568894174971,1.862570592744579e-5,-6.214811466500701e-8,0.004114764817887481,1.8802594772439982e-5,-6.251002429640857e-8,0.004114916941016438,1.8899611324047082e-5,-6.270792853777051e-8,0.004115058788903396,1.8907892822336005e-5,-6.272336282371548e-8,0.004115223529956793,1.883126597625609e-5,-6.256398245923092e-8,0.00411544112890223,1.8685396522870248e-5,-6.226179188618023e-8,0.004115735426728429,1.8496880076378558e-5,-6.187126850283822e-8,0.004116120670135077,1.830166124887891e-5,-6.146615285795259e-8,0.0041165976094830435,1.8141735245261587e-5,-6.113275473128614e-8,0.0041171501459813615,1.8059102673713814e-5,-6.095761535265301e-8,0.0041177444298378775,1.808677278934742e-5,-6.100903876410642e-8,0.0041183326482072515,1.8238377845822922e-5,-6.131565461947553e-8,0.004118862644895194,1.8500025366803055e-5,-6.184947666116739e-8,0.004119291845670744,1.882888305936909e-5,-6.252277761117837e-8,0.004119600995524518,1.916129270179671e-5,-6.320463576506777e-8,0.004119802051454148,1.9429176950619105e-5,-6.375467477591138e-8,0.004119936452241972,1.9579389208801835e-5,-6.406297574667329e-8,0.004120063979010977,1.958911524116044e-5,-6.408192449547398e-8,0.004120246088908799,1.9472222424355246e-5,-6.383944294513096e-8,0.00412052913259154,1.927501773422856e-5,-6.343041897475507e-8,0.004120932292519319,1.906320686341203e-5,-6.299000026420115e-8,0.0041214433902594435,1.890409343719484e-5,-6.265701578056743e-8,0.004122023468462977,1.884920647966687e-5,-6.253815085908088e-8,0.004122618451191795,1.8922390072082127e-5,-6.268323571647604e-8,0.004123173897075194,1.911656377839061e-5,-6.307832429936484e-8,0.0041236480036418895,1.939920158835302e-5,-6.365677983994343e-8,0.004124019202185466,1.9723461236942205e-5,-6.432213367561228e-8,0.004124287288244285,2.0040448516884058e-5,-6.49734234542431e-8,0.004124469567213898,2.0308896945277934e-5,-6.552527867409888e-8,0.004124594685466592,2.050066336393985e-5,-6.591937018917111e-8,0.004124696486907284,2.0602417835979338e-5,-6.61279466825767e-8,0.004124809121272801,2.0614914334906605e-5,-6.615231627858997e-8,0.00412496354787499,2.055127128513555e-5,-6.601926590271963e-8,0.004125184918062037,2.0435134717556e-5,-6.57772755655983e-8,0.004125490124622406,2.029885113054249e-5,-6.549281651963915e-8,0.004125884999648892,2.0181120072676474e-5,-6.524562199853932e-8,0.004126361187835996,2.012312227810521e-5,-6.512079755335909e-8,0.004126893637683346,2.016202160381174e-5,-6.519543374690128e-8,0.0041274407643772945,2.0321520249793008e-5,-6.551902559572129e-8,0.0041279499280898095,2.0601210358685798e-5,-6.609131944530118e-8,0.00412836969991199,2.0969274287628928e-5,-6.684706034379096e-8,0.004128666706476001,2.1364544730577544e-5,-6.766013860494177e-8,0.0041288402130868545,2.1711284432474734e-5,-6.837410979895914e-8,0.0041289260941142205,2.1943052421982018e-5,-6.88515335136089e-8,0.0041289863790102055,2.2025323150899638e-5,-6.902071138081227e-8,0.004129088666642758,2.1966206179071726e-5,-6.889782614187511e-8,0.0041292849632450085,2.1811418243791324e-5,-6.857662713945957e-8,0.0041295982485091585,2.1627811881081866e-5,-6.819461136355642e-8,0.004130019713586947,2.1483464269815928e-5,-6.789215710034456e-8,0.004130514847826705,2.1431037977969292e-5,-6.777831067919666e-8,0.004131034556120914,2.1497848193685356e-5,-6.79102050168444e-8,0.0041315275855180284,2.1683260008845836e-5,-6.828741599827955e-8,0.0041319514162801475,2.196236627165169e-5,-6.885922779761631e-8,0.0041322797208666745,2.2294052841138688e-5,-6.95410620986726e-8,0.004132505435793167,2.2631076927335552e-5,-7.023526137874012e-8,0.004132639559466678,2.2929656701609897e-5,-7.085103297987233e-8,0.0041327068073958445,2.3156619956378226e-5,-7.131941152567361e-8,0.004132739789933165,2.329325563893979e-5,-7.160135080100659e-8,0.0041327732697304005,2.3336073204430915e-5,-7.168931655885992e-8,0.004132839498526474,2.3295362222597494e-5,-7.160425905283545e-8,0.00413296489491445,2.319267720853539e-5,-7.139037898864675e-8,0.004133167727447015,2.3058081690060263e-5,-7.110948143247038e-8,0.004133456251584568,2.2927368246838634e-5,-7.083536734083875e-8,0.004133826864680379,2.2838893766911416e-5,-7.064744138921729e-8,0.004134262246139552,2.2829234263837425e-5,-7.062178621276581e-8,0.004134730285875639,2.2926717969593375e-5,-7.081769093706275e-8,0.004135185707911027,2.31425991815179e-5,-7.125916402041035e-8,0.0041355769071945506,2.346164589422353e-5,-7.191520269449173e-8,0.004135859441965122,2.383687117408675e-5,-7.268874415754124e-8,0.00413601369908566,2.4195039750171892e-5,-7.342810252300716e-8,0.004136058529573073,2.4456681249135846e-5,-7.396855759155849e-8,0.004136050487278654,2.456513384479195e-5,-7.419258398190955e-8,0.004136065019007573,2.4509860369459744e-5,-7.407805053129414e-8,0.004136168231272512,2.4330162569653813e-5,-7.370577611668552e-8,0.004136394459822497,2.409789030051738e-5,-7.322376999160329e-8,0.0041367395368764786,2.389056192725738e-5,-7.279186780905995e-8,0.0041371686481556655,2.3768649735412706e-5,-7.253505860848046e-8,0.004137631091783037,2.3763952092816136e-5,-7.251957894397494e-8,0.0041380747660009765,2.3878490225956004e-5,-7.275049880309497e-8,0.004138456791204421,2.4090059448810835e-5,-7.318286374029693e-8,0.004138749601503419,2.4360668956780575e-5,-7.37387885346733e-8,0.004138943194899096,2.4645468588374668e-5,-7.4325712073413e-8,0.004139044422775969,2.49009409295305e-5,-7.485336553975188e-8,0.0041390740178470385,2.509158954761269e-5,-7.52478055388981e-8,0.004139062078858488,2.519450532721772e-5,-7.546109277291754e-8,0.004139042857680081,2.5201537323836e-5,-7.547591881161818e-8,0.004139049681730755,2.5119185084212284e-5,-7.530538123596477e-8,0.004139110696144454,2.4966623708413148e-5,-7.498882514872912e-8,0.004139245793706889,2.4772544989273615e-5,-7.458527889421062e-8,0.004139464664095014,2.4571523457755883e-5,-7.416602259172535e-8,0.0041397656452513715,2.4400247311316832e-5,-7.380696250121588e-8,0.004140135103394312,2.4293510720908743e-5,-7.358048043260725e-8,0.004140547313718007,2.427954414351527e-5,-7.354575599206736e-8,0.004140965413628404,2.4374141223041407e-5,-7.373639326420042e-8,0.004141344873455721,2.457362346913388e-5,-7.414551482757032e-8,0.004141641326420783,2.48483642172095e-5,-7.471205791422762e-8,0.0041418235765014145,2.5141002654557318e-5,-7.53169965475809e-8,0.004141889215372904,2.537511100337642e-5,-7.58014858398564e-8,0.004141874921065243,2.5477517766043897e-5,-7.601342829768719e-8,0.004141851043315424,2.5408217951499304e-5,-7.58696248028512e-8,0.004141897199717203,2.5181416417097176e-5,-7.539927233814727e-8,0.004142070032062376,2.4862233791190885e-5,-7.473692425033855e-8,0.004142382136416294,2.4539521848464896e-5,-7.406615519129582e-8,0.004142802962387187,2.4291862821753357e-5,-7.354938496791458e-8,0.004143276515293847,2.4165133492908547e-5,-7.328171206236878e-8,0.004143742610608551,2.416776805253065e-5,-7.328119646301892e-8,0.004144152149564842,2.427840550811608e-5,-7.350451056510971e-8,0.004144474270556827,2.4457891470911152e-5,-7.387144252687797e-8,0.004144697408744952,2.4660435604785124e-5,-7.428767698568889e-8,0.004144827026181618,2.484202674459949e-5,-7.466207837487929e-8,0.004144881994566124,2.4966196964502726e-5,-7.491871231531306e-8,0.0041448905048311665,2.500781452275799e-5,-7.500493400442998e-8,0.004144885711446158,2.4955282841337656e-5,-7.489617429690564e-8,0.004144901261135358,2.481120187725696e-5,-7.459741678649363e-8,0.004144966982912023,2.4591489692204364e-5,-7.41413441693972e-8,0.004145105121592094,2.4322991873659133e-5,-7.358329870301691e-8,0.004145327544473218,2.403980237268326e-5,-7.299364256044502e-8,0.004145634190738719,2.377879003345024e-5,-7.24485997969921e-8,0.0041460127758167105,2.3574818073592004e-5,-7.202053283003591e-8,0.00414643966336036,2.3455929817344242e-5,-7.17680808924154e-8,0.004146881876040019,2.343860803994068e-5,-7.172625974921142e-8,0.0041473004753961136,2.3523144481116746e-5,-7.189658153429537e-8,0.004147656007247302,2.3689506623327728e-5,-7.223811648289735e-8,0.004147916808771172,2.3895221603221915e-5,-7.266284458651311e-8,0.0041480699650081705,2.4078275121643128e-5,-7.304167053080141e-8,0.004148132195104441,2.4168654642653938e-5,-7.322864004199276e-8,0.004148154320381181,2.4109831376965727e-5,-7.310586674653458e-8,0.004148211444887462,2.388423375298592e-5,-7.263656875158706e-8,0.004148377033934869,2.3528252738308904e-5,-7.189610084153054e-8,0.004148691963497075,2.3123109596003326e-5,-7.105280147716092e-8,0.0041491473031022115,2.27629923552026e-5,-7.030185625864194e-8,0.004149691355374006,2.251899382813585e-5,-6.979067613092937e-8,0.004150253959921051,2.2418989460666156e-5,-6.957735617198645e-8,0.0041507716459602394,2.2449203170718728e-5,-6.963393426794152e-8,0.0041512023452277315,2.2568972898863263e-5,-6.987681903782312e-8,0.004151528686471275,2.2727414027209948e-5,-7.020106669410957e-8,0.004151754402958528,2.287579296648152e-5,-7.050582576156142e-8,0.004151898371708361,2.2974592076086222e-5,-7.070894000466604e-8,0.004151988885126911,2.2996670531363484e-5,-7.075363347500511e-8,0.004152058955955876,2.2928322974470473e-5,-7.061092750138042e-8,0.004152142382845093,2.2769356506527704e-5,-7.02799821925708e-8,0.0041522701226427315,2.253246200945357e-5,-6.978684571499767e-8,0.004152466791086021,2.2241707192617996e-5,-6.91812637823709e-8,0.004152747431065876,2.192983419561754e-5,-6.853098876725601e-8,0.004153115009949348,2.163416853510276e-5,-6.791329347391853e-8,0.004153559267504416,2.1391372281000134e-5,-6.740420502635174e-8,0.004154057371060857,2.1231670864169294e-5,-6.706668724391143e-8,0.004154576533781043,2.1173336928637963e-5,-6.693925978559595e-8,0.004155078480972005,2.121824985076246e-5,-6.702665399660066e-8,0.00415552544495053,2.1349266802329204e-5,-6.729405133405011e-8,0.004155887326128362,2.153005321203464e-5,-6.76663910045802e-8,0.004156149549489265,2.1708297200182368e-5,-6.803485371706521e-8,0.004156320429207047,2.18236504091612e-5,-6.827342868724723e-8,0.004156435436193511,2.1821325191162423e-5,-6.826745995209362e-8,0.004156554325266331,2.1670061717922965e-5,-6.795132318021076e-8,0.004156747395736589,2.137880483492358e-5,-6.734326680703699e-8,0.004157071827894007,2.100211751024774e-5,-6.655662407843876e-8,0.004157547507220719,2.0626045399976664e-5,-6.577030263586701e-8,0.004158146618620178,2.033725265562143e-5,-6.516458127082557e-8,0.0041588047435924405,2.0191197783449442e-5,-6.485500848833399e-8,0.00415944679960301,2.0196654226797564e-5,-6.486025586921148e-8,0.004160012347865569,2.0321627878139327e-5,-6.51143438105989e-8,0.004160468885463152,2.0512010737360385e-5,-6.550526134746365e-8,0.004160812154099564,2.071068901280456e-5,-6.591452917912113e-8,0.004161059067630895,2.087014425419266e-5,-6.624331294613351e-8,0.004161239040043181,2.095792204410952e-5,-6.642382604808944e-8,0.004161386829742425,2.095738077188751e-5,-6.642102047979822e-8,0.0041615375835493676,2.0866361049708102e-5,-6.622998144256762e-8,0.004161723445766619,2.069540030448162e-5,-6.587231810027344e-8,0.004161970833005958,2.0465957657424777e-5,-6.53924752623177e-8,0.004162297807662163,2.0208374532718804e-5,-6.485342857751e-8,0.004162711465524075,1.9958972538912966e-5,-6.433060157681065e-8,0.004163205788963567,1.9755721872438256e-5,-6.390289279020207e-8,0.004163760874885751,1.9632401292486634e-5,-6.364064398012052e-8,0.0041643445126078645,1.9611945515193513e-5,-6.359191191485507e-8,0.004164916661599382,1.9700370056451175e-5,-6.376982675484982e-8,0.004165436593260296,1.9883038081479463e-5,-6.414465536185601e-8,0.004165871533002719,2.0124840290481865e-5,-6.464389273479223e-8,0.004166204973161034,2.03750141868381e-5,-6.516203187808346e-8,0.0041664427071129,2.0576291719662896e-5,-6.557950750839939e-8,0.004166614831251215,2.067725739446178e-5,-6.578854573835485e-8,0.004166772201513261,2.064596860090837e-5,-6.572180046924913e-8,0.004166976394844767,2.0481684872547044e-5,-6.537706967734264e-8,0.004167283762105637,2.0220289969068403e-5,-6.482876722062341e-8,0.0041677270966903575,1.9928853053708316e-5,-6.42166276496646e-8,0.004168301889621721,1.9687639520167372e-5,-6.370817178698891e-8,0.004168964945397345,1.9564346141463034e-5,-6.344493463573707e-8,0.0041696482095524585,1.9591663234778752e-5,-6.349560115607152e-8,0.004170281928490304,1.975909669494271e-5,-6.383883261318782e-8,0.004170815776114936,2.002177562328637e-5,-6.438149484450375e-8,0.004171229165072177,2.0319307693815556e-5,-6.499787658365365e-8,0.004171529641595815,2.0594371506068787e-5,-6.556842529790701e-8,0.004171744205095692,2.08044574697309e-5,-6.600426377969002e-8,0.004171909319060356,2.0925909999591906e-5,-6.625570255367975e-8,0.004172063035543002,2.095283945319605e-5,-6.631007474738575e-8,0.004172240006446445,2.0893942567726186e-5,-6.618518936112582e-8,0.004172468631381149,2.0769185793469826e-5,-6.592244924085984e-8,0.00417276921141435,2.0606998287037323e-5,-6.558098507505531e-8,0.004173152263607924,2.044171213681954e-5,-6.523229587640529e-8,0.004173616699217774,2.0310521591751063e-5,-6.49539193513707e-8,0.004174148228173609,2.0249146804649307e-5,-6.482044670278411e-8,0.0041747190205534725,2.0285797724636808e-5,-6.489100076513135e-8,0.004175290038969232,2.043401685070224e-5,-6.519431780277011e-8,0.004175817138082009,2.0686286120805764e-5,-6.571531492271147e-8,0.004176260742955059,2.1011275247548487e-5,-6.638915896100802e-8,0.004176596947866172,2.135738903704526e-5,-6.710846106930013e-8,0.004176826283818876,2.1663316572518304e-5,-6.774516430718877e-8,0.004176976440504031,2.187329985370935e-5,-6.818241888125293e-8,0.004177097171342621,2.1952541600749897e-5,-6.834687461472092e-8,0.004177248393652027,2.1897850265493772e-5,-6.823110493770005e-8,0.004177484698447774,2.1740143881249863e-5,-6.789904756326871e-8,0.004177840456289382,2.153777152476557e-5,-6.74722389787032e-8,0.004178319648003268,2.1361956093379974e-5,-6.709951969906079e-8,0.004178893720907776,2.1277850737766288e-5,-6.69174602353876e-8,0.004179508920172153,2.1326593435868438e-5,-6.701273548062968e-8,0.00418010143870764,2.1514398644594126e-5,-6.739909921106913e-8,0.004180615325979776,2.181278040040501e-5,-6.801760816720763e-8,0.004181016588925626,2.2169477458321236e-5,-6.875930338309788e-8,0.004181298828271539,2.2524986894682156e-5,-6.949975199756988e-8,0.004181480040607371,2.282791399696808e-5,-7.013122390191389e-8,0.0041815939531634075,2.304443453220907e-5,-7.058260201965475e-8,0.004181680312312281,2.3160968578745368e-5,-7.082508197011263e-8,0.0041817771738139765,2.31820016723154e-5,-7.086767934850143e-8,0.004181916138040746,2.3125777208913207e-5,-7.074824050457918e-8,0.004182119981389813,2.301988109644779e-5,-7.052420786013162e-8,0.004182401587912403,2.2897560902910874e-5,-7.026493333350233e-8,0.004182763226082177,2.279464572132352e-5,-7.004528039888718e-8,0.004183195714757309,2.27463722411251e-5,-6.993905040066949e-8,0.0041836776903782045,2.2783245722880823e-5,-7.001037080800247e-8,0.004184175936522711,2.2925337371297516e-5,-7.030174363642383e-8,0.004184648351533992,2.3175376573468616e-5,-7.081948145094982e-8,0.00418505106926234,2.351265779926658e-5,-7.152078397866612e-8,0.00418534981740814,2.3891456557676195e-5,-7.231026107348822e-8,0.004185532699444083,2.4247798955379997e-5,-7.305402455302344e-8,0.0041856186975773695,2.4515523630203316e-5,-7.361333203789702e-8,0.004185656116733408,2.4647127383329684e-5,-7.388829334143641e-8,0.004185709463990267,2.4630561585255983e-5,-7.385309068068146e-8,0.004185839553237669,2.4494045601495442e-5,-7.356612233607162e-8,0.004186085175026919,2.4297013898756418e-5,-7.315119149276783e-8,0.004186453058714402,2.4111865678345753e-5,-7.275951997366621e-8,0.00418691819641979,2.4003918546233812e-5,-7.252797509274851e-8,0.004187432570247736,2.4015686123816057e-5,-7.254618294928173e-8,0.004187938527366445,2.4158751006996613e-5,-7.283932258420115e-8,0.00418838289655064,2.4413937365967342e-5,-7.336815666881627e-8,0.004188728513422404,2.4738606360928003e-5,-7.404399556996649e-8,0.00418896077263449,2.5078536869024493e-5,-7.475342352649681e-8,0.004189088187108331,2.5380979408035573e-5,-7.538568393181177e-8,0.004189137637378765,2.560542386655624e-5,-7.585541248978948e-8,0.004189146482758514,2.5729746333905715e-5,-7.611571356090715e-8,0.004189154226481784,2.5751295531856018e-5,-7.616056328669566e-8,0.004189195811872894,2.5684118435083626e-5,-7.601902615037475e-8,0.004189297432699497,2.55542284301067e-5,-7.574531169066045e-8,0.004189474640743976,2.539461358412779e-5,-7.54082984053367e-8,0.004189731923761839,2.5240920754474522e-5,-7.508253449426259e-8,0.004190062893369365,2.5127892543049684e-5,-7.484086743090381e-8,0.004190450577587119,2.508605327542561e-5,-7.474758404267058e-8,0.004190867863493793,2.5137902888573805e-5,-7.48504270355493e-8,0.004191278851066964,2.5293029167128904e-5,-7.517021445445091e-8,0.004191642553303303,2.55423836176811e-5,-7.568861108228818e-8,0.004191920429727899,2.585359199989586e-5,-7.633807975528864e-8,0.004192087961726734,2.6171043691637975e-5,-7.700197953776512e-8,0.0041921473996541884,2.6425138639552714e-5,-7.753404214212685e-8,0.004192134962329874,2.655208648022618e-5,-7.780007245043969e-8,0.004192114992464122,2.6518357750800253e-5,-7.772933711625707e-8,0.004192159595389882,2.6337159580545134e-5,-7.734907825665287e-8,0.0041923223662205,2.6066037508450072e-5,-7.677941655751047e-8,0.004192619875803577,2.578592305862587e-5,-7.618950486964727e-8,0.0041930293080447165,2.557321200031067e-5,-7.57392457018824e-8,0.004193500258489232,2.5478197525003033e-5,-7.553431849801728e-8,0.004193972401104941,2.5516253407646417e-5,-7.560771560475328e-8,0.004194391412284077,2.5670481527066318e-5,-7.592504671513956e-8,0.004194719476384159,2.5901118869691845e-5,-7.640387556528128e-8,0.004194939943894964,2.6157253045760205e-5,-7.693795310378307e-8,0.004195057196908215,2.6387965736528168e-5,-7.742045708403442e-8,0.004195093049339342,2.655137914482246e-5,-7.776307074307687e-8,0.0041950809049979216,2.662075619193178e-5,-7.790902792572845e-8,0.0041950589164355375,2.6587196549228087e-5,-7.783901651533447e-8,0.004195063418449753,2.6459035460426867e-5,-7.75700484300396e-8,0.004195123687424457,2.6258649342688074e-5,-7.714875237095379e-8,0.004195258624765763,2.6017731648806405e-5,-7.664139315682479e-8,0.0041954753979068695,2.5772178721423704e-5,-7.612311259338277e-8,0.004195769575099257,2.5557431308106203e-5,-7.566822001278618e-8,0.004196126138573454,2.540453466231477e-5,-7.534204817948078e-8,0.004196520954855405,2.53367037714102e-5,-7.51938225051339e-8,0.004196922622790946,2.5365966871741377e-5,-7.524954946219042e-8,0.004197295156724912,2.5489504985313087e-5,-7.550410520029874e-8,0.004197602564194241,2.5685951525308174e-5,-7.591317047680027e-8,0.004197816369561635,2.5913292788382522e-5,-7.638861304882352e-8,0.004197925960352721,2.6111518336327034e-5,-7.68040568734833e-8,0.004197949030411529,2.6213720596972247e-5,-7.701841069760118e-8,0.004197935777056729,2.6166841984154432e-5,-7.691972134593537e-8,0.004197959246279704,2.5955973534895593e-5,-7.647632694596954e-8,0.004198090449018128,2.561816100677808e-5,-7.576574198158926e-8,0.0041983690577137925,2.523320397695459e-5,-7.495518310321368e-8,0.00419878704502883,2.4893403872054307e-5,-7.423809664192561e-8,0.004199294657828197,2.466944744060831e-5,-7.37627848726335e-8,0.004199822567905109,2.4590529631573546e-5,-7.35909004360926e-8,0.004200305861270729,2.4644214422214637e-5,-7.369713717322046e-8,0.0042006995521685,2.478930388189759e-5,-7.399597656866322e-8,0.0042009837510207735,2.497203494463084e-5,-7.437531825774549e-8,0.004201161612568837,2.5139530804678885e-5,-7.472443695283559e-8,0.0042012538478359,2.524867550071118e-5,-7.495254886807737e-8,0.004201292331705662,2.527094607106964e-5,-7.49991216701699e-8,0.00420131393742547,2.5194311755950153e-5,-7.483814941996342e-8,0.004201354951284227,2.502295376661067e-5,-7.447781373617757e-8,0.0042014462866753815,2.4775206437341213e-5,-7.395626000164893e-8,0.004201609778427287,2.448005996210069e-5,-7.333420007618452e-8,0.004201855844869758,2.4172631007671907e-5,-7.268529378705414e-8,0.004202182698645817,2.3889171851144942e-5,-7.208562808425933e-8,0.004202577017310062,2.3662279170995062e-5,-7.160372968477706e-8,0.004203015758641201,2.351672818202007e-5,-7.129194406720078e-8,0.004203468829726377,2.3466037764782944e-5,-7.11792747736706e-8,0.004203902457944527,2.3509754658052647e-5,-7.126556074908164e-8,0.004204283346550584,2.3631449505063676e-5,-7.151698648158335e-8,0.004204584061959764,2.3797752657327603e-5,-7.186374646115213e-8,0.0042047900364866496,2.3959694992948275e-5,-7.22027000677904e-8,0.0042049075001769935,2.4058568751254713e-5,-7.240978381987185e-8,0.004204969667533672,2.4038460412971196e-5,-7.23666645880367e-8,0.004205036113172845,2.386531479855544e-5,-7.200115046387884e-8,0.004205179685910332,2.3546624248548318e-5,-7.132872503889457e-8,0.0042054607744250174,2.313929579412769e-5,-7.046897812798647e-8,0.00420589989798239,2.27347232082449e-5,-6.961404483515537e-8,0.004206466015888612,2.242427014344388e-5,-6.895601774624227e-8,0.004207089445384607,2.2264274521212205e-5,-6.861351443079364e-8,0.004207690765000283,2.2260358548173973e-5,-6.859880736537034e-8,0.004208207794816714,2.2375384589948536e-5,-6.883449347627073e-8,0.004208608832725967,2.2550256047354552e-5,-6.919700655526116e-8,0.004208892174623421,2.2724239908018644e-5,-6.955907850228315e-8,0.0042090782601795,2.284808125073127e-5,-6.981713891001085e-8,0.004209200296160906,2.2889691428958756e-5,-6.990328564693268e-8,0.004209296350094005,2.283492007234416e-5,-6.97870980120373e-8,0.004209403565906254,2.268592751806816e-5,-6.947247890090181e-8,0.004209554005893156,2.2458595057271006e-5,-6.899240475833879e-8,0.004209771538720962,2.2179411033598958e-5,-6.840241608206303e-8,0.00421006954601963,2.1881833085248087e-5,-6.777287276654248e-8,0.0042104495193963105,2.1602047665670182e-5,-6.717991814560981e-8,0.0042109008189892645,2.137421177667367e-5,-6.669544160393412e-8,0.004211401868604031,2.1225620883696596e-5,-6.637699983388579e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json new file mode 100644 index 0000000..ea90103 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":25000,"numberOfSamples":1000,"samples":[0.0042119228229227776,2.117242668988509e-5,-6.625892772821196e-8,0.00421242951621424,2.1216421815835606e-5,-6.634559593072919e-8,0.004212888396602669,2.1343324948057996e-5,-6.660764965178544e-8,0.004213272077688695,2.1522955697259163e-5,-6.698208934125665e-8,0.004213565153061029,2.171164617537871e-5,-6.737707330135306e-8,0.004213769823711238,2.1857483451438128e-5,-6.768286051317844e-8,0.004213910198871436,2.190927122349849e-5,-6.779084064030356e-8,0.004214032922657624,2.1829493537962127e-5,-6.762116816618272e-8,0.004214200852587069,2.160938196621095e-5,-6.71548148810529e-8,0.004214477322022827,2.1280462370500936e-5,-6.645802296286292e-8,0.004214903100503305,2.091373094832423e-5,-6.568048925307495e-8,0.004215475880773675,2.0600151223130995e-5,-6.501412598684065e-8,0.004216145898744334,2.0417442948628495e-5,-6.462301093688222e-8,0.004216833579580056,2.0400376819345232e-5,-6.458079850055622e-8,0.004217459970123071,2.053157579362677e-5,-6.485132807375522e-8,0.004217972502130171,2.0755398012646987e-5,-6.531780445307867e-8,0.004218354775674382,2.100283844312381e-5,-6.583514699901046e-8,0.004218621473875984,2.1213061032032433e-5,-6.627523661803764e-8,0.004218806437975746,2.1344829856945014e-5,-6.655094448616457e-8,0.0042189509605779895,2.1378863630848206e-5,-6.662115374902181e-8,0.004219095409105211,2.1315105530184897e-5,-6.648517553484988e-8,0.004219274283414654,2.1168357298914947e-5,-6.617374421911176e-8,0.0042195135261831026,2.0964046864058137e-5,-6.574021509881736e-8,0.0042198289277669875,2.0734467344645254e-5,-6.52526270229363e-8,0.004220225061155502,2.0515161357874974e-5,-6.478598265567233e-8,0.004220694716869642,2.0341013243499278e-5,-6.441392136515793e-8,0.004221219187507694,2.024179213121955e-5,-6.419932023758131e-8,0.004221769966808666,2.0237378693578086e-5,-6.418431147260425e-8,0.0042223122778394,2.033346797221274e-5,-6.438129961003437e-8,0.004222810379006872,2.051879431947242e-5,-6.47670814186124e-8,0.0042232340746766765,2.0764877854194254e-5,-6.528213506219293e-8,0.004223565395287756,2.1029006330211313e-5,-6.583665389689409e-8,0.004223804128873946,2.1260585340412296e-5,-6.632374566900979e-8,0.004223970876957566,2.1410361180324564e-5,-6.663887945834917e-8,0.004224106369310762,2.14415465441151e-5,-6.670356203916723e-8,0.0042242657983087495,2.134115638552841e-5,-6.648957977625455e-8,0.004224507399419219,2.112855412696634e-5,-6.603731852191216e-8,0.004224876159364572,2.085686994094544e-5,-6.545888489491197e-8,0.004225386732174476,2.0603067839644234e-5,-6.491709513429656e-8,0.004226013160943935,2.0446027498544085e-5,-6.457905743766462e-8,0.004226693128151923,2.043932475634994e-5,-6.45585312505897e-8,0.004227347974683707,2.059163946791718e-5,-6.487440472016235e-8,0.004227909703767054,2.086563813515611e-5,-6.544822544194953e-8,0.004228341362829596,2.1195202646072075e-5,-6.614053530613902e-8,0.004228642402086946,2.1510125092377255e-5,-6.680302045077538e-8,0.004228840647210552,2.1755805619472572e-5,-6.732012834688552e-8,0.004228978598476052,2.190213346099413e-5,-6.762786101905045e-8,0.0042291010496863166,2.194302357527711e-5,-6.771287814009528e-8,0.0042292470592518745,2.1891133200885374e-5,-6.760145956889963e-8,0.004229446049571827,2.1771621167792976e-5,-6.73464393792848e-8,0.004229716468222322,2.1616855272094037e-5,-6.701607817399818e-8,0.004230065522044785,2.146232151279719e-5,-6.668539495546459e-8,0.004230489183412082,2.134317016838142e-5,-6.642880367863476e-8,0.004230972374903851,2.12906866823376e-5,-6.631261090471438e-8,0.004231489771832401,2.132821216102119e-5,-6.638640134078987e-8,0.00423200798906628,2.1466603019303647e-5,-6.667347585959588e-8,0.004232489876042049,2.1700112891328544e-5,-6.716214332465655e-8,0.004232901078212662,2.2004253231900497e-5,-6.780110661848243e-8,0.0042332180115707534,2.233735468493118e-5,-6.850259405413669e-8,0.004233435294041164,2.264690582136456e-5,-6.915558955274176e-8,0.004233570081750011,2.288024682846949e-5,-6.964836523197342e-8,0.004233661175459219,2.299740945877807e-5,-6.989570010663392e-8,0.00423376212210765,2.298272324126421e-5,-6.986362270031153e-8,0.004233929261141872,2.2851697779811398e-5,-6.958422181245012e-8,0.004234207211841524,2.2650495622957343e-5,-6.915475814576002e-8,0.004234615425259081,2.2446809897144912e-5,-6.871849564593151e-8,0.004235140014210337,2.231313047848069e-5,-6.842929415254376e-8,0.004235734703969059,2.230620625541042e-5,-6.840801170460767e-8,0.004236332511029088,2.2449320169543877e-5,-6.870475534746973e-8,0.004236865352914913,2.2724777630289437e-5,-6.928273029224622e-8,0.004237284245080581,2.3080599212484498e-5,-7.003223837757029e-8,0.004237571736415137,2.3448608166368112E-05,-7.080893495957507e-8,0.004237742342841121,2.3765484141766943e-5,-7.147847424023432e-8,0.004237833085799702,2.3988137660734125e-5,-7.194917126202141e-8,0.004237890189882673,2.4099447950975766e-5,-7.218425790080511e-8,0.004237957595590428,2.4105773514283147e-5,-7.219670738284095e-8,0.004238069919582637,2.4030269658422523e-5,-7.203516533111505e-8,0.004238249618365501,2.39056679238968e-5,-7.176871236223504e-8,0.004238506777009503,2.376842054507791e-5,-7.14744782604305e-8,0.004238839960336995,2.3654485763485328e-5,-7.122870298290076e-8,0.004239237195182148,2.359612316887198e-5,-7.109993006965748e-8,0.00423967689584437,2.3618836515735366e-5,-7.114251881836275e-8,0.00424012919339875,2.3737839999153642e-5,-7.138914208350213e-8,0.004240558555859129,2.3954028829091893e-5,-7.184219988672258e-8,0.004240928632216016,2.425035359666654e-5,-7.246603747851151e-8,0.004241209686151803,2.4590515496345863e-5,-7.31840475098621e-8,0.004241387602314709,2.4922420371615704e-5,-7.388587732093796e-8,0.00424147157146284,2.5187961743731242e-5,-7.44481247159738e-8,0.004241496426214619,2.5338027012562994e-5,-7.476619148263978e-8,0.004241516665120159,2.53481927416961e-5,-7.478765248745461e-8,0.004241592614544567,2.5228750538790737e-5,-7.453362965654456e-8,0.004241773093309497,2.5024267468472517e-5,-7.409800415341168e-8,0.004242080828456248,2.480219962828495e-5,-7.362345063271682e-8,0.004242505642303187,2.463448176734963e-5,-7.326256531566072e-8,0.004243007230734643,2.4578174120876555e-5,-7.313688342900408e-8,0.004243526169055569,2.4660842178798045e-5,-7.330574786416262e-8,0.004243999680967984,2.4874463362710607e-5,-7.375310120416703e-8,0.0042443776570801894,2.5179193207145155e-5,-7.439515440950807e-8,0.004244634361830328,2.551555261019759e-5,-7.510602778954726e-8,0.0042447725833558445,2.5820973313206575e-5,-7.575282082432305e-8,0.004244819645713096,2.6045265557054406e-5,-7.622855268466984e-8,0.004244817657500771,2.6160427534331055e-5,-7.647316726976563e-8,0.004244812063322777,2.6162998914343238e-5,-7.647870316326475e-8,0.004244842201737484,2.6070232563465724e-5,-7.628128320228887e-8,0.004244935733735506,2.5913058455968382e-5,-7.594622609168704e-8,0.004245106822619801,2.572872050475992e-5,-7.555241538069889e-8,0.004245356804103788,2.5554802441117856e-5,-7.517960510152853e-8,0.004245675934005867,2.5425040582432493e-5,-7.48995353162313e-8,0.004246045266184226,2.53664067068817e-5,-7.47697603900719e-8,0.004246438382144604,2.5396616745149382e-5,-7.482836234073875e-8,0.004246823330043397,2.552139706651534e-5,-7.508808847131201e-8,0.004247165619004974,2.5731389115804212e-5,-7.55296442638736e-8,0.004247433275937945,2.5999499171301278e-5,-7.609589214748047e-8,0.0042476044631466715,2.6280705900143398e-5,-7.669131102787287e-8,0.004247676613223559,2.6517177808645175e-5,-7.719284879324458e-8,0.004247673609435171,2.6650746595202952e-5,-7.747651982304646e-8,0.004247645708001549,2.66412350943042e-5,-7.74564776254694e-8,0.004247658309913079,2.6483856580341366e-5,-7.712204781528955e-8,0.004247771456591539,2.6216061034290582e-5,-7.655226898516179e-8,0.004248018640476505,2.590800755606473e-5,-7.589568494417051e-8,0.004248395212570714,2.563994069145496e-5,-7.532244221725396e-8,0.004248861259489376,2.5477021622606432e-5,-7.497104067998361e-8,0.00424935590167607,2.5452038700586148e-5,-7.491170753332291e-8,0.004249815624233812,2.5560514080836893e-5,-7.513587325912593e-8,0.0042501900081495896,2.5766672608186727e-5,-7.556853344785969e-8,0.004250451383611506,2.6015861961209102e-5,-7.609427999654669e-8,0.0042505977356969114,2.6248914551540066e-5,-7.658758795271883e-8,0.0042506498090625795,2.6415031884901112e-5,-7.694017883491166e-8,0.004250644097952955,2.648096828203765e-5,-7.708071584908982e-8,0.0042506237812728765,2.6435303290169302e-5,-7.698415129034421e-8,0.004250629816343292,2.6287691938557887e-5,-7.667036324682085e-8,0.0042506940711203485,2.6064200669597658e-5,-7.619435383064163e-8,0.00425083548128867,2.5800616341765846e-5,-7.563201480582007e-8,0.004251059186062351,2.5535598231431913e-5,-7.506549954746807e-8,0.004251357853991461,2.5304981396812947e-5,-7.457106386619228e-8,0.004251714123475805,2.5137752884505912e-5,-7.421052674232194e-8,0.004252103288002902,2.5053445751813735e-5,-7.402578044122805e-8,0.0042524958808914486,2.5060282096586535e-5,-7.403485203242214e-8,0.004252860347046862,2.5153483119387155e-5,-7.422821487858902e-8,0.004253166420302202,2.5313592833064807e-5,-7.4565027741937e-8,0.004253390056795452,2.5505445065978426e-5,-7.497072826604751e-8,0.004253520373611728,2.567954717105097e-5,-7.533987563241299e-8,0.004253567583483577,2.5778553226866115e-5,-7.555000192971296e-8,0.004253568477479618,2.57508981459835e-5,-7.549083696491824e-8,0.004253583802551681,2.5570092233629636e-5,-7.51055603806773e-8,0.004253683035294351,2.5251865633977112e-5,-7.44273175308893e-8,0.0042539191944363595,2.4857202588394434e-5,-7.35855734003273e-8,0.004254305764216735,2.447438286380503e-5,-7.276784994537231e-8,0.004254809815918776,2.4186839495990022e-5,-7.215147164839955e-8,0.004255365549942023,2.40441206534225e-5,-7.184200794898621e-8,0.004255899200387112,2.4050089820884473e-5,-7.184826829956902e-8,0.0042563516080044266,2.416972185021108e-5,-7.209662433728606e-8,0.004256690396141003,2.434605252160264e-5,-7.246675786316027e-8,0.0042569115892744334,2.4517943449023026e-5,-7.282912443145628e-8,0.0042570344588616455,2.463347637775471e-5,-7.30732558512375e-8,0.0042570934805204125,2.465775417313392e-5,-7.312438614433928e-8,0.004257129932313604,2.4575925834567138e-5,-7.295011734563332e-8,0.0042571843494951115,2.4392667825468296e-5,-7.255962537821784e-8,0.00425729039774817,2.4129023933815476e-5,-7.199717208281165e-8,0.004257470606229811,2.3817370327804808e-5,-7.133146006679518e-8,0.004257734255741909,2.349544247400287e-5,-7.064283667735547e-8,0.004258077393204028,2.3200390137071024e-5,-7.001050679824002e-8,0.004258484618862725,2.2963666553012255e-5,-6.950158216921607e-8,0.004258932027056634,2.2807293789006354e-5,-6.916316297269846e-8,0.0042593906153518026,2.2741586385370254e-5,-6.901757022449099e-8,0.0042598297434363165,2.276399055898611e-5,-6.905989169541386e-8,0.004260220606168873,2.2858651267932304e-5,-6.925694232532747e-8,0.004260539991874552,2.2996585299082128e-5,-6.954740578872719e-8,0.004260774793749827,2.3136869567961894e-5,-6.984415171021355e-8,0.004260927452055153,2.3230106921002925e-5,-7.004155848425731e-8,0.004261021309681241,2.3226075701983406e-5,-7.003196358517582e-8,0.004261102938290243,2.308688722779646e-5,-6.9733984200722e-8,0.004261236712509181,2.2804045770392858e-5,-6.912910597515336e-8,0.004261487734137989,2.2412204909363093e-5,-6.829103484152083e-8,0.004261895857940792,2.1987951130290533e-5,-6.738297115674651e-8,0.004262453748847359,2.1626559517556065e-5,-6.660796308383029e-8,0.004263104835077354,2.14049565306401e-5,-6.613002381831203e-8,0.004263765230072934,2.1352073118542486e-5,-6.601108302348439e-8,0.004264356348996169,2.14434400684497e-5,-6.619951822339648e-8,0.00426482929740014,2.1618744627758198e-5,-6.656745990661841e-8,0.004265171943391067,2.1807560186110623e-5,-6.696539410340849e-8,0.004265402331610535,2.194966411597293e-5,-6.726522140368924e-8,0.004265556764276095,2.2005321336605362e-5,-6.738204521109695e-8,0.004265678484351986,2.1957407300082035e-5,-6.727876331639272e-8,0.004265809259589074,2.1808924150594526e-5,-6.696101507231523e-8,0.004265983904005325,2.1578682448027443e-5,-6.646826954849454e-8,0.004266226920993157,2.1296504146896058e-5,-6.586379168206377e-8,0.004266550629286272,2.0998265292050864e-5,-6.522408289024045e-8,0.004266954602654954,2.072086530767614e-5,-6.46280184319503e-8,0.0042674264408546,2.0497353315112702e-5,-6.414629674705478e-8,0.004267943861511287,2.0352576012947905e-5,-6.383209365453901e-8,0.004268477960877023,2.0299833661802612e-5,-6.371398436365584e-8,0.004268997253092252,2.0338959047789847e-5,-6.379193925228933e-8,0.004269472004022922,2.0455923406950072e-5,-6.403649435074647e-8,0.004269878504480831,2.0623872099556896e-5,-6.439082513227808e-8,0.004270203091943123,2.0805512560485156e-5,-6.477560803074754e-8,0.004270445852852126,2.0956944805511876e-5,-6.509700275244613e-8,0.004270623800199121,2.10334314266037e-5,-6.525895403540025e-8,0.004270772558072353,2.0997890319405713e-5,-6.518152289098647e-8,0.00427094441011345,2.083220432249813e-5,-6.482534637528951e-8,0.004271199798210908,2.05492416329248e-5,-6.421755267416815e-8,0.00427159041645784,2.0199863007888447e-5,-6.346677840095314e-8,0.004272137010630017,1.986641311092636e-5,-6.274914812415897e-8,0.004272812866192905,1.9637907019181664e-5,-6.225512618287865e-8,0.004273546661830289,1.957484111226967e-5,-6.211428300886088e-8,0.004274248084309201,1.9683554754882735e-5,-6.234052528862284e-8,0.004274842584556,1.9916585609271047e-5,-6.283284863669002e-8,0.004275294989396107,2.0196932839426866e-5,-6.34271221447608e-8,0.004275612111248886,2.044876157713103e-5,-6.396157774097112e-8,0.004275829854443942,2.0618302854561106e-5,-6.432132893338302e-8,0.004275996344867708,2.068048102350494e-5,-6.445246254988373e-8,0.004276158761153353,2.0635703336763096e-5,-6.435525871581819e-8,0.00427635575964747,2.050278681984088e-5,-6.406929194779216e-8,0.004276614264766545,2.03118344130943e-5,-6.365844604760266e-8,0.004276948681532183,2.0098462742130343e-5,-6.319870838452115e-8,0.00427736112987467,1.9899240304877655e-5,-6.276838480380487e-8,0.004277842211255956,1.974773290141609e-5,-6.243949971073313e-8,0.004278372391904025,1.967077619426468e-5,-6.226968673760751e-8,0.004278924276628769,1.9684968915617704e-5,-6.229464867897638e-8,0.00427946603046503,1.9793798937027695e-5,-6.252207128612635e-8,0.004279965907331355,1.9986115124125946e-5,-6.292842834492383e-8,0.004280397398965965,2.0236567080278434e-5,-6.345990398536185e-8,0.004280744247696593,2.0508303055502708e-5,-6.403801521126411e-8,0.004281004505802116,2.075787626038736e-5,-6.45698971255669e-8,0.004281192901995228,2.0941958152062637e-5,-6.496252518206134e-8,0.004281340930710332,2.1025255578912166e-5,-6.513969573609285e-8,0.004281494037741554,2.0988991621400003e-5,-6.506040387677097e-8,0.004281705020143845,2.083884172795236e-5,-6.473613988226346e-8,0.004282022932066112,2.0609966237029076e-5,-6.424190093837948e-8,0.004282478182800925,2.0365345667199266e-5,-6.371269223823294e-8,0.004283067616495902,2.018344302717714e-5,-6.331700549222439e-8,0.004283747241477742,2.0134651144824004e-5,-6.320619458649664e-8,0.0042844407554519515,2.0253973496551404e-5,-6.345578723847007e-8,0.004285064598384449,2.0524555265033713e-5,-6.403009214368057e-8,0.004285558228008341,2.0883667246896797e-5,-6.479498002189184e-8,0.004285903068305841,2.1248575485531713e-5,-6.557331881327865e-8,0.004286121591209917,2.1546759971092086e-5,-6.620971443688664e-8,0.004286261550244254,2.173512138139228e-5,-6.661161891835543e-8,0.004286377010822107,2.1803562222643158e-5,-6.675698118613891e-8,0.004286514639174886,2.1767962224157696e-5,-6.667927461907289e-8,0.004286707249844844,2.1659831340824737e-5,-6.644549978914754e-8,0.004286972651294204,2.1517288514130502e-5,-6.613702981233638e-8,0.004287315036407035,2.137879459328305e-5,-6.583625969488997e-8,0.004287726996196279,2.1279125575024203e-5,-6.561792724729806e-8,0.00428819142343141,2.1246497524740444e-5,-6.554282703858169e-8,0.004288683412819257,2.1300005175710134e-5,-6.56522121072733e-8,0.004289172646002349,2.144705325197606e-5,-6.596225331674356e-8,0.004289626831671317,2.1681083267848825e-5,-6.64591918001667e-8,0.004290016489747565,2.1980505883871905e-5,-6.709706780234995e-8,0.0042903207017423875,2.2309974166205005e-5,-6.780039689973465e-8,0.004290532704681695,2.2624802256956494e-5,-6.847351420232322e-8,0.004290663720481053,2.2878545281189634e-5,-6.901668815447957e-8,0.004290743428588021,2.3032647343331645e-5,-6.934675430215987e-8,0.004290816160740989,2.3066060527652307e-5,-6.941783186631997e-8,0.004290932973482719,2.298241860165485e-5,-6.923692897416443e-8,0.004291140720082246,2.281268438762679e-5,-6.886989001401675e-8,0.004291469988513568,2.261171092999127e-5,-6.843422945885471e-8,0.0042919245712092595,2.244789438370406e-5,-6.807700264279899e-8,0.004292475971297328,2.238658804783379e-5,-6.793912075922681e-8,0.004293066649609138,2.2470558774809148e-5,-6.811318501504072e-8,0.004293623937526895,2.2703998892035536e-5,-6.860890598586648e-8,0.0042940818493636184,2.304812006375384e-5,-6.934344898792616e-8,0.004294402362672422,2.3432831436448893e-5,-7.016645002765099e-8,0.004294586104386337,2.378055743966283e-5,-7.091121590795328e-8,0.004294667795317409,2.4030920659155234e-5,-7.144780929009046e-8,0.004294700566059802,2.4155324165777983e-5,-7.171440891510901e-8,0.004294738209100082,2.4157840931771394e-5,-7.171925710040148e-8,0.0042948226573763385,2.4066452881318333e-5,-7.152192906009953e-8,0.004294978812281802,2.3921337639631674e-5,-7.120830502904449e-8,0.004295214901080934,2.3765000948817973e-5,-7.08694876550506e-8,0.004295525436407369,2.363587044291823e-5,-7.058807624485363e-8,0.004295894601684546,2.3564786623837452E-05,-7.04305813207749e-8,0.004296299122201778,2.357308522950433e-5,-7.044321503200956e-8,0.004296710657229467,2.367115187319423e-5,-7.064870539544668e-8,0.004297098295590391,2.38568917503796e-5,-7.104295898373251e-8,0.004297431906932636,2.4114275885103977e-5,-7.159190498213205e-8,0.004297686870625992,2.4412901902798002e-5,-7.223050607165677e-8,0.004297849991681794,2.4710049162891303e-5,-7.286710575334312e-8,0.00429792530231652,2.4956591162591826e-5,-7.339606327152146e-8,0.004297937372396556,2.5107015043400802e-5,-7.371925088269417e-8,0.004297929510021779,2.5131737805527713e-5,-7.377254984435431e-8,0.004297955548234345,2.5027789983162344e-5,-7.354890403274291e-8,0.004298066575615005,2.4823310836198834e-5,-7.310812995376074e-8,0.004298296552607654,2.4573070322224938e-5,-7.256747872959403e-8,0.004298651648983001,2.434559188780995e-5,-7.207413756368472e-8,0.004299106911661393,2.4205518413300738e-5,-7.176741926718479e-8,0.004299611453430702,2.4196312655059432e-5,-7.174150839999789e-8,0.0043001009376553104,2.4328171010078167e-5,-7.201924724959771e-8,0.004300514215980978,2.45747458074727e-5,-7.254478183774332e-8,0.00430080955408668,2.4880164403869278e-5,-7.319841098782959e-8,0.00430097535914321,2.5174795560467062e-5,-7.383040760602065e-8,0.004301031639911904,2.5394822709818133e-5,-7.430318462394381e-8,0.004301021854896047,2.549876742515806e-5,-7.452698087324046e-8,0.004300998826632299,2.5475424898201563e-5,-7.447707677090092e-8,0.0043010105133326326,2.5341837209243172e-5,-7.418955573869462e-8,0.00430109035070397,2.513426620792213e-5,-7.374198268112992e-8,0.004301253742716078,2.48970164755011e-5,-7.32294267491531e-8,0.004301499427306543,2.467299592201586e-5,-7.274417707510015e-8,0.0043018132999952385,2.4497627550464064e-5,-7.236262240548909e-8,0.004302172657874503,2.4395814589290057e-5,-7.213867310051331e-8,0.004302549817683467,2.4380785913499932e-5,-7.210122313442096e-8,0.0043029149958991805,2.44536492446394e-5,-7.225313252007961e-8,0.004303238964457443,2.460296377691644e-5,-7.2570238773880585E-08,0.00430349625434463,2.4804348391217722e-5,-7.300042578258291e-8,0.0043036695281246816,2.50209511462533e-5,-7.34645445614565e-8,0.0043037550770795956,2.5206324498041653e-5,-7.386254745634518e-8,0.004303768148276709,2.5311391686062272e-5,-7.408849797523384e-8,0.004303745290754547,2.5296058710614142e-5,-7.405564302472968e-8,0.0043037402219377715,2.5143263129179642e-5,-7.372674513257676e-8,0.004303811401843918,2.486984655474745e-5,-7.31375476237472e-8,0.004304003924871586,2.452738717704159e-5,-7.239861410051003e-8,0.004304332998053507,2.4189634346796077e-5,-7.166837537127397e-8,0.004304777053220583,2.3930305794275484e-5,-7.110548942813876e-8,0.0043052839373079,2.380055815885997e-5,-7.082046368346776e-8,0.004305786979287081,2.381512406074437e-5,-7.084577599968396e-8,0.004306223908680077,2.3950918898359302e-5,-7.113265222969439e-8,0.0043065521824008435,2.4156359154944985e-5,-7.157081214482665e-8,0.00430675720105395,2.4366745878058644e-5,-7.202132826384251e-8,0.00430685272341944,2.452074994873828e-5,-7.235202054839195e-8,0.0043068746876313785,2.457397362237289e-5,-7.246674040986775e-8,0.004306870807432403,2.450692094765032e-5,-7.232274420159353e-8,0.0043068889333198876,2.4326274108967804e-5,-7.193368553734489e-8,0.004306967157178836,2.4060115372153373e-5,-7.135951482856131e-8,0.004307127792060001,2.3749312473508598e-5,-7.068800846487233e-8,0.004307375847549257,2.3437998378882705e-5,-7.001424126954424e-8,0.0043077011487614265,2.316559033074148e-5,-6.942331161839482e-8,0.004308082476774727,2.296156998550824e-5,-6.897901648309085e-8,0.004308492160407662,2.2843008936849732e-5,-6.871848008341235e-8,0.00430890014225028,2.2814028032551207e-5,-6.865098180169714e-8,0.004309277281921247,2.2866200020617407e-5,-6.875880227967708e-8,0.004309598220494261,2.2979234337591817e-5,-6.899862356038913e-8,0.004309844408536244,2.3121853538730567e-5,-6.930329429478826e-8,0.0043100078615668095,2.3253479651415424e-5,-6.95853524949172e-8,0.004310095640386761,2.3328083445441076e-5,-6.974529757037752e-8,0.0043101338257101485,2.3301787131791224e-5,-6.968807200575135e-8,0.004310168187241177,2.3144787924465443e-5,-6.934892854607553e-8,0.004310257826444425,2.285531683637069e-5,-6.872365125157918e-8,0.004310459684221365,2.2469228310805165e-5,-6.788925321183882e-8,0.0043108073193948325,2.2056750050369026e-5,-6.699692997284909e-8,0.004311294032439131,2.170255209789584e-5,-6.622910378436072e-8,0.004311871307369093,2.1476062378587954e-5,-6.573553756794064e-8,0.004312465198993063,2.1407057452158824e-5,-6.558081946270183e-8,0.004313001977162613,2.147859710794636e-5,-6.572910476913147e-8,0.00431343005920553,2.1637960989153616e-5,-6.606750631843108e-8,0.004313730316577628,2.181691089414023e-5,-6.644950764688654e-8,0.004313914738250244,2.1951418489715036e-5,-6.673726332891451e-8,0.004314017860593639,2.1995240270097538e-5,-6.6830778021755e-8,0.00431408563427076,2.1926188546349096e-5,-6.668152880876458e-8,0.004314164844430976,2.1746350005664837e-5,-6.62931915957548e-8,0.00431429466372932,2.1478088191753095e-5,-6.571331506627689e-8,0.004314501024681896,2.1157447735519515e-5,-6.501929657323107e-8,0.004314794068269408,2.0826407239506826e-5,-6.430170217264929e-8,0.004315168523400873,2.0525388218328684e-5,-6.364798919827755e-8,0.00431560642180513,2.0287173353931803e-5,-6.31292183912412e-8,0.0043160812455876356,2.0132909454777427e-5,-6.279132138753954e-8,0.004316562520177888,2.007033177327738e-5,-6.265126152698634e-8,0.00431702006617794,2.00938082788825e-5,-6.269717769742918e-8,0.004317427588706235,2.018551638500187e-5,-6.28909388180351e-8,0.004317765712734754,2.0317234227004703e-5,-6.317193328846631e-8,0.004318024775138963,2.0452628316515763e-5,-6.34618604024906e-8,0.00431820770093002,2.0550394730606987e-5,-6.367139110618334e-8,0.004318332893899484,2.0569188001987255e-5,-6.371081436092053e-8,0.004318436011644906,2.04754635624101e-5,-6.350712260775898e-8,0.0043185681789404615,2.0254385622796044e-5,-6.302778494565895e-8,0.004318787523787666,1.9921423273137004e-5,-6.230594134708772e-8,0.004319142414166795,1.9528518015015e-5,-6.145372829533996e-8,0.004319650180655444,1.9156534321257355e-5,-6.064588141621515e-8,0.004320282432594846,1.8890460254098007e-5,-6.006610839445816e-8,0.00432096924731175,1.8786257539194468e-5,-5.983551079099197e-8,0.004321623889974825,1.8848028753740572e-5,-5.996331107102821e-8,0.004322174856199251,1.9029232241916958e-5,-6.03494594472305e-8,0.004322587553187694,1.9254995930678356e-5,-6.083272565155132e-8,0.004322867520357473,1.9450265918529555e-5,-6.125132934634046e-8,0.004323049667978551,1.956007946768571e-5,-6.148655784160723e-8,0.004323182862961931,1.9557648041747735e-5,-6.148015369528662e-8,0.004323316556168647,1.9443050480583164e-5,-6.123159791433297e-8,0.004323491840940722,1.9237131005163212e-5,-6.0785188942898e-8,0.004323736659978244,1.8974013586600857e-5,-6.021415798447603e-8,0.00432406401637427,1.8693883726101143e-5,-5.960523413418266e-8,0.004324472264424686,1.8436553474490432e-5,-5.904470094336049e-8,0.004324946983099295,1.8236033860153257e-5,-5.860648003866715e-8,0.004325464084859797,1.811635649105119e-5,-5.8342897748555724e-8,0.004325993794135984,1.8088868183602328e-5,-5.8278740560323874e-8,0.004326505053826906,1.8151193617222837e-5,-5.84090469392405e-8,0.004326969827564337,1.8287871460248693e-5,-5.870057233852731e-8,0.004327366867667058,1.8472348280178974e-5,-5.909613070587311e-8,0.004327684784604043,1.8669955227489085e-5,-5.952094345795759e-8,0.004327924409123366,1.8841706401499647e-5,-5.989069354469142e-8,0.004328100446453682,1.8948978694444737e-5,-6.012153384588638e-8,0.004328242207755195,1.8959396499784854e-5,-6.014285604854431e-8,0.00432839251061342,1.8854306712077532e-5,-5.991366270790545e-8,0.004328602976287375,1.8637363771232864e-5,-5.9441399495521534e-8,0.004328923808193235,1.834172061702968e-5,-5.879768517306489e-8,0.0043293877420519525,1.803074398317214e-5,-5.8119858923673065e-8,0.004329992303019424,1.7786082973530267e-5,-5.7585025996974733e-8,0.0043306904239555155,1.768141014178147e-5,-5.735306902442807e-8,0.004331400140317573,1.7751344357086818e-5,-5.749928204325917e-8,0.00433203358321681,1.797402614272783e-5,-5.79766211094402e-8,0.004332530332663138,1.828016466901793e-5,-5.8635303908857e-8,0.004332875915402321,1.858298602165903e-5,-5.928765562337491e-8,0.00433309804217549,1.8810034258350935e-5,-5.977689798049865e-8,0.004333248483983109,1.8921204984793378e-5,-6.001607106531904e-8,0.00433338344031064,1.891050947589809e-5,-5.999178553599807e-8,0.004333550076056095,1.879802272931174e-5,-5.974688447449809e-8,0.00433378028617974,1.8619161178224815e-5,-5.935746777534596e-8,0.004334089547866698,1.841532739235039e-5,-5.891288378805079e-8,0.004334478361386218,1.8227051919153682e-5,-5.8500987248132956e-8,0.004334934676237755,1.8089192813388756e-5,-5.819765687811798e-8,0.004335436753461419,1.8027479513569926e-5,-5.805910095808496e-8,0.0043359564346629785,1.805604332199269e-5,-5.8116315662884676e-8,0.004336462854060841,1.8175905259323786e-5,-5.837173979925861e-8,0.0043369265589401195,1.8374650843245116e-5,-5.8798606028170783e-8,0.0043373237749320314,1.8627644789034814e-5,-5.9343665372251605e-8,0.004337640287689868,1.8900903887741546e-5,-5.993342885257249e-8,0.004337874393414731,1.915541028175581e-5,-6.0483416036833585E-08,0.004338038508031595,1.935252810257927e-5,-6.090974291052553e-8,0.004338159117798005,1.9460134108828392e-5,-6.114232980148806e-8,0.004338274774933433,1.9459013263327866e-5,-6.113884811203717e-8,0.004338431681466829,1.9348999136279857e-5,-6.089826911602292e-8,0.004338676165081497,1.9153806772625883e-5,-6.047161761109011e-8,0.004339043688685932,1.8922294391678095e-5,-5.996487910391701e-8,0.004339545635601907,1.872276095381814e-5,-5.952661815361361e-8,0.004340158161930944,1.8627380820978457e-5,-5.9314042383671195e-8,0.004340820587457169,1.8688023122385006e-5,-5.944030774359304e-8,0.0043414499059315215,1.8912570225124942e-5,-5.992294543545765e-8,0.004341969354982378,1.9256317958197064e-5,-6.066513104038634e-8,0.00434233727438235,1.963727956575248e-5,-6.148895689362684e-8,0.004342559700425284,1.9968375421524345e-5,-6.22053917653275e-8,0.004342681194553419,2.0187890581981525e-5,-6.268039485374884e-8,0.004342762928135588,2.0273446998614515e-5,-6.286515201466919e-8,0.004342861762115175,2.0238340874590014e-5,-6.278807051788223e-8,0.0043430181177510525,2.0118621313219873e-5,-6.25268278416331e-8,0.004343252686041884,1.9959504096147545e-5,-6.217910056180777e-8,0.004343568466291725,1.9805367104343365e-5,-6.184105171446118e-8,0.004343954731686096,1.9693836953182042e-5,-6.159455561595036e-8,0.004344390973704534,1.9652723436851773e-5,-6.150043408182522e-8,0.004344850331140559,1.969838524407601e-5,-6.159471002910778e-8,0.004345302792489047,1.9834740731576415e-5,-6.188629404236862e-8,0.004345718569954192,2.0052786388798823e-5,-6.235588467085406e-8,0.004346071890108299,2.0330942481172956e-5,-6.295676357140448e-8,0.004346345120939216,2.0636843362656404e-5,-6.361874562488397e-8,0.004346532649407227,2.0931092520010435e-5,-6.425633112670948e-8,0.004346643556812209,2.1172987348254808e-5,-6.478105282775598e-8,0.004346702139067369,2.1327622981692872e-5,-6.511679997367014e-8,0.004346745608778673,2.137326837845882e-5,-6.521581332631904e-8,0.004346818808370958,2.130755124320618e-5,-6.507223672428581e-8,0.004346966320702236,2.1150975510158874e-5,-6.472999399619078e-8,0.004347222824520035,2.0946473775532036e-5,-6.428207114555517e-8,0.004347603087958219,2.0753784072168932e-5,-6.385844812624413e-8,0.004348093942432825,2.0637814013072452e-5,-6.36007815326696e-8,0.004348651739160019,2.0651659508830847e-5,-6.36252925003523e-8,0.0043492091234758985,2.0818025289423062e-5,-6.398208836552688e-8,0.004349692649033529,2.1116545144798856e-5,-6.462735152225057e-8,0.004350046851532632,2.148558579412229e-5,-6.542717677117046e-8,0.004350254077818288,2.1841590704683874e-5,-6.619972247540033e-8,0.004350339218690546,2.2108334127427978e-5,-6.677897296497183e-8,0.0043503570289232605,2.2241363549602545e-5,-6.706795464383658e-8,0.004350370300956235,2.2236598604831392e-5,-6.705740408002692e-8,0.004350430646805905,2.2122994339245096e-5,-6.680980212150948e-8,0.004350568672542956,2.1947338186704e-5,-6.642641374111236e-8,0.004350793241612556,2.1759652050497017e-5,-6.601571687264844e-8,0.0043510958731244245,2.1603418432720286e-5,-6.567227801223937e-8,0.004351456464205779,2.1510811396030194e-5,-6.546638399293138e-8,0.004351848247956533,2.1501213936502228e-5,-6.544069492800358e-8,0.004352241536665431,2.1581184167779784e-5,-6.560999904068952e-8,0.00435260671995346,2.174478040527643e-5,-6.596178678053824e-8,0.004352917203110646,2.1974004373243897e-5,-6.645716600620018e-8,0.004353152776554337,2.2239771173006768e-5,-6.70329889115276e-8,0.0043533034557195595,2.250423557099356e-5,-6.760694213289382e-8,0.004353373159793762,2.2725320394767957e-5,-6.808739588456914e-8,0.004353381934028024,2.2863721397970617e-5,-6.838860655220757e-8,0.004353365144473504,2.2891593869259356e-5,-6.844958399294913e-8,0.004353368520464555,2.2800891768739177e-5,-6.825225963723115e-8,0.004353439178980252,2.2608536352457108e-5,-6.783284315230564e-8,0.004353614398994551,2.235592337679717e-5,-6.728093363331758e-8,0.004353911091254241,2.210179351953395e-5,-6.672420060605343e-8,0.004354319093981324,2.1909457854221882e-5,-6.63007028625976e-8,0.00435480070535855,2.183105798865961e-5,-6.612459579585697e-8,0.004355297564439238,2.1892701313526038e-5,-6.62535720399581e-8,0.004355744274261172,2.208486894760374e-5,-6.666768156040473e-8,0.004356085988373349,2.2362140804206785e-5,-6.72684784304803e-8,0.004356294790867451,2.265429960519879e-5,-6.790310472655907e-8,0.004356378446729466,2.2886711643210605e-5,-6.840875002736263e-8,0.004356377083974059,2.300287959510685e-5,-6.866191818023424e-8,0.004356348835649946,2.2979906602058662e-5,-6.861222380829316e-8,0.004356351070803769,2.283100298627068e-5,-6.828791603511024e-8,0.0043564253033482265,2.2596103437619816e-5,-6.777550831067574e-8,0.004356590438485916,2.232692894571213e-5,-6.71873398673657e-8,0.004356843977258533,2.207328036231141e-5,-6.663181407464889e-8,0.00435716773989199,2.1874255200302816e-5,-6.619429149558181e-8,0.0043575345277402245,2.17545974438534e-5,-6.592907552880914e-8,0.00435791364940389,2.1724473774609717e-5,-6.585880479157714e-8,0.004358274835255978,2.1780736857639492e-5,-6.597708420358102e-8,0.00435859102021611,2.190842428008057e-5,-6.625166759485598e-8,0.004358840788105637,2.2082124326210005e-5,-6.66273960160543e-8,0.004359011140673432,2.2267590761594875e-5,-6.702970759557112e-8,0.004359100770459174,2.2424521416654e-5,-6.737069654700543e-8,0.0043591232349589806,2.2511572931629804e-5,-6.756005138998922e-8,0.004359108521787183,2.2494178942973776e-5,-6.752211476792377e-8,0.004359100878157092,2.235434252364082e-5,-6.721725820444066e-8,0.004359151203790916,2.209952344550378e-5,-6.666129656422452e-8,0.004359304391648528,2.1766202486049173e-5,-6.59333189575158e-8,0.004359585156155929,2.141440124607869e-5,-6.516384241477555e-8,0.004359988028082468,2.1112991988769316e-5,-6.450292098818624e-8,0.004360476321122433,2.0920264451710092e-5,-6.407788779132097e-8,0.004360991139310915,2.0866833130000284e-5,-6.395608344448584e-8,0.0043614672632936585,2.094691373648151e-5,-6.412567446990825e-8,0.00436185047259702,2.1120373710730043e-5,-6.449986452881506e-8,0.004362111124733698,2.1324180464702604e-5,-6.4941620161576e-8,0.004362250570187353,2.1489435250093217e-5,-6.53007002748905e-8,0.004362299121386524,2.155913544719217e-5,-6.54524253343876e-8,0.004362306490900004,2.1501808725852057e-5,-6.532755100187959e-8,0.004362327761153033,2.131732881203479e-5,-6.492513324816661e-8,0.0043624093738372635,2.103373524474476e-5,-6.430576510522246e-8,0.0043625793884881775,2.0697054625575986e-5,-6.356950528095524e-8,0.004362844207020741,2.0358383999011046e-5,-6.282776240788013e-8,0.004363191208127825,2.006260880711081e-5,-6.217865603614356e-8,0.004363594835992581,1.984133466131531e-5,-6.169150041406605e-8,0.004364023394089613,1.971031936272081e-5,-6.140108548051583e-8,0.004364444713893855,1.9670147056786693e-5,-6.130906149278202e-8,0.004364830116595006,1.9708457183723877e-5,-6.13887614197793e-8,0.004365157008842049,1.9802456355045293e-5,-6.159066614971228e-8,0.0043654108447642925,1.9921222630134676e-5,-6.184741174273681e-8,0.004365587133171469,2.002805687530203e-5,-6.207888714985402e-8,0.004365693773882021,2.0083687956816993e-5,-6.219920719112305e-8,0.004365753261816067,2.0051413982690625e-5,-6.21279557727769e-8,0.004365803266929434,1.990492580654581e-5,-6.18073352015643e-8,0.004365893211815998,1.963812772857377e-5,-6.122369196067238e-8,0.00436607468587738,1.9273718051626967e-5,-6.042630561545666e-8,0.004366386030933518,1.8864892817626648e-5,-5.953112197574838e-8,0.004366836077417156,1.8485075349996475e-5,-5.869834534688314e-8,0.004367395636384049,1.8206114824510273e-5,-5.808489610024617e-8,0.0043680034475078715,1.807342018736887e-5,-5.779018629925774e-8,0.004368585429190273,1.8090183319349116e-5,-5.7821670584522674e-8,0.004369078205338029,1.8218018646954217e-5,-5.8096130493753056e-8,0.004369446485515545,1.8391914972714372e-5,-5.8472137246485704e-8,0.00436968898915749,1.854111673960781e-5,-5.879546235081837e-8,0.004369833869388169,1.8607666783746486e-5,-5.893945230499611e-8,0.004369927829734204,1.8558083076927652e-5,-5.883053071818364e-8,0.0043700232722843815,1.8387261432697222e-5,-5.845686139765173e-8,0.004370166642890487,1.8115771799109823e-5,-5.78626810222891e-8,0.004370389908592708,1.778250420799372e-5,-5.7132479090411445e-8,0.004370706190176643,1.7434832951346612e-5,-5.63696521066772e-8,0.004371109765100231,1.7118586178875612e-5,-5.5674571774707e-8,0.00437157972214823,1.6869939219546253e-5,-5.5126719806860253e-8,0.004372085769119738,1.671054970042191e-5,-5.477386649502183e-8,0.004372594495239376,1.6646123535862942e-5,-5.462880762363998e-8,0.004373074761423813,1.6667710334556395e-5,-5.467217352867607e-8,0.004373501568673639,1.675457816700928e-5,-5.485876153998176e-8,0.004373858478157565,1.687756120804058e-5,-5.5124896858937915e-8,0.004374139111879542,1.7002287531392034e-5,-5.5395470307775045e-8,0.0043743482958161295,1.7092346989803696e-5,-5.559079621301812e-8,0.004374503133939031,1.7112951246571128e-5,-5.5634563689226273e-8,0.004374633720251839,1.7035925052044434e-5,-5.546478116239983e-8,0.00437478225005965,1.6846665517467146e-5,-5.504911354774486e-8,0.0043749983953135655,1.6552475631203626e-5,-5.440324873724291e-8,0.004375328872488854,1.618927976830758e-5,-5.360566541222857e-8,0.0043758013925030695,1.5821068508656155e-5,-5.2796405543630164e-8,0.004376408267399701,1.552634116046679e-5,-5.214735730105396e-8,0.004377099954417064,1.5371900421595234E-05,-5.180488666204743e-8,0.004377797060914417,1.5385036173928835e-5,-5.182897065432117e-8,0.004378418187720637,1.5540645773084347e-5,-5.2165003016123936e-8,0.004378909008357041,1.5771884933839974e-5,-5.266706122898232e-8,0.0043792572209281865,1.599719360222389e-5,-5.315697219265368e-8,0.004379488986244382,1.6147744983164754e-5,-5.34842622002332e-8,0.004379653735493992,1.6183696763184442e-5,-5.356159676976171e-8,0.004379807029548539,1.6097454183882332e-5,-5.337188796430934e-8,0.004379997377027852,1.5908215829117925e-5,-5.2956489809098333e-8,0.004380258535441446,1.5652790384862128e-5,-5.239536296392365e-8,0.004380606499311609,1.5376010872551103e-5,-5.178635373794103e-8,0.00438103981704955,1.5122274389860483e-5,-5.122678455064238e-8,0.0043815422062817,1.4928716380928159e-5,-5.079841505994918e-8,0.0043820867949589636,1.4820349015323273e-5,-5.055656434916802e-8,0.004382641303252554,1.4807475268811135e-5,-5.052422039228374e-8,0.004383173380248949,1.4885420145896664e-5,-5.0691348370280644e-8,0.004383655356796422,1.5036302184118528e-5,-5.1018815625741976e-8,0.004384067847834171,1.5232293344004387e-5,-5.144564428159387e-8,0.0043844019828522774,1.543961315370945e-5,-5.1897827868784535e-8,0.004384660446837142,1.5622634657119858e-5,-5.229728990740927e-8,0.0043848576711448175,1.5747902572815793e-5,-5.257058563354719e-8,0.0043850193932531934,1.5788236658408824e-5,-5.2657827564574646e-8,0.0043851814481957125,1.572732220635757e-5,-5.252279948825495e-8,0.004385386970873339,1.5565072314536914e-5,-5.216487783723147e-8,0.004385680534183977,1.532309143986357e-5,-5.163119876709418e-8,0.004386097920633204,1.5047759637200314e-5,-5.102352030618483e-8,0.004386652021040343,1.4806503360449029e-5,-5.0490006751438264e-8,0.004387319473877426,1.4672634763753373e-5,-5.019184730718326e-8,0.004388037475553013,1.4699180145777687e-5,-5.024571194944651e-8,0.004388719358254085,1.4892581471994294e-5,-5.066597535539156e-8,0.004389286252243407,1.5203884862031068e-5,-5.1345376667470573e-8,0.00438969797548042,1.5546829342512437e-5,-5.209476228885879e-8,0.004389964650890107,1.583302129175502e-5,-5.272030351592314e-8,0.004390134913807563,1.6002864742013964e-5,-5.309129370757188e-8,0.004390272271287374,1.6037840528340582e-5,-5.3166940446750974e-8,0.004390434097429688,1.595511112825302e-5,-5.298445643173724e-8,0.004390660057645578,1.579392903294117e-5,-5.262936255347156e-8,0.004390969109008046,1.5602006407262715e-5,-5.220585215637865e-8,0.0043913615412258964,1.542537772061049e-5,-5.1814795817357e-8,0.004391823037389939,1.5302039558842245e-5,-5.153985439117854e-8,0.004392329121287766,1.5258332624760626e-5,-5.143939304550827e-8,0.004392849551497714,1.5307073316800725e-5,-5.1542117695367437e-8,0.004393352682154456,1.54470359086033e-5,-5.18457185429351e-8,0.00439380971458905,1.566375392426153e-5,-5.23185628529972e-8,0.004394198597306122,1.5931683059558592e-5,-5.2904527284831545e-8,0.004394507186734965,1.621768345692803e-5,-5.353077333402549e-8,0.004394735227108045,1.6485492657756142e-5,-5.411762647781867e-8,0.004394894902223298,1.6700626893534787e-5,-5.45892803278868e-8,0.004395009971871057,1.6835218512750443e-5,-5.48843068576531e-8,0.004395113603586854,1.687246367982367e-5,-5.496537371682426e-8,0.004395244949411491,1.6810475067017456e-5,-5.482779901120044e-8,0.0043954442427448425,1.6665347947444088e-5,-5.450649984627839e-8,0.004395745883391455,1.6472740140844224e-5,-5.407968384406357e-8,0.0043961693024316155,1.6286178870649144e-5,-5.366522773031633e-8,0.0043967088244268844,1.616943709032258e-5,-5.340384348847231e-8,0.00439732633496883,1.6180870696195093e-5,-5.342443633742838e-8,0.004397953375547895,1.635135413255929e-5,-5.379535836427356e-8,0.0043985084347460835,1.6664842817597192e-5,-5.448152340898046e-8,0.004398926535594353,1.7055762545965226e-5,-5.533868602056141e-8,0.004399186184162931,1.7430878674003617e-5,-5.616169045398201e-8,0.004399316502889809,1.7706012639717648e-5,-5.676535310620799e-8,0.004399380619391071,1.7836085828877507e-5,-5.7050496127308454e-8,0.0043994479138703985,1.782330059445976e-5,-5.70217692683362e-8,0.004399571685962228,1.7705329205192075e-5,-5.676158687960766e-8,0.004399779842592975,1.7535919356775476e-5,-5.6387604272475e-8,0.004400076250313624,1.736849329520766e-5,-5.601691660456328e-8,0.0044004470021380936,1.7246443601718784e-5,-5.574493496590799e-8,0.0044008672958289925,1.7199144884804796e-5,-5.5636639903815625e-8,0.004401307044890794,1.724130099925887e-5,-5.572497188992369e-8,0.00440173510197177,1.737368836590099e-5,-5.6012208288017816e-8,0.004402122691783258,1.7584415933249197e-5,-5.6472543144591716e-8,0.004402446537357039,1.785064042267672e-5,-5.705582151470724e-8,0.004402691816659508,1.8141037663291022e-5,-5.7693066337959046e-8,0.004402854735432183,1.841939830699297e-5,-5.8304506128850546e-8,0.0044029441466111215,1.86494319283523e-5,-5.88101859483882e-8,0.004402981550175842,1.8800342453498846e-5,-5.914217622460607e-8,0.004402999067764595,1.8852377164001726e-5,-5.925669183407802e-8,0.004403035359985339,1.8801411674438728e-5,-5.914416507577008e-8,0.0044031298139103415,1.866162281600663e-5,-5.883524829467042e-8,0.004403315601073636,1.8465518632622366e-5,-5.8401102927705954e-8,0.004403612303337892,1.8260820798133723e-5,-5.794674902359043e-8,0.00440401903455858,1.810360352195355e-5,-5.7596036212635465e-8,0.004404509752154576,1.8047165882872968e-5,-5.746702598309528e-8,0.004405033516436402,1.812725114889848e-5,-5.763917890945277e-8,0.004405522902615492,1.834684093381671e-5,-5.8119578846809494e-8,0.0044059119457882465,1.866727755270758e-5,-5.8823215461512124e-8,0.004406159440016461,1.9013925428711905e-5,-5.958550245976834e-8,0.004406266628248096,1.9299284542711648e-5,-6.021339687547807e-8,0.004406277737108989,1.945484969608813e-5,-6.055575571644973e-8,0.004406261496645234,1.9454837423611572e-5,-6.055559500071444e-8,0.004406284449775708,1.9319660877416878e-5,-6.025761062267969e-8,0.00440639062788073,1.910099176720538e-5,-5.977521664665257e-8,0.004406594829344743,1.886022453602534e-5,-5.924323335780905e-8,0.004406887078573716,1.8651292088100253e-5,-5.878025539400848e-8,0.004407241761031286,1.8511880264080445e-5,-5.846944211875105e-8,0.0044076263524043535,1.8461551898719056e-5,-5.835435137480919e-8,0.0044080076754981525,1.8503530268696664e-5,-5.8442683603324096e-8,0.00440835579500999,1.862755742929406e-5,-5.871235534719573e-8,0.004408646532290339,1.881262321625275e-5,-5.911736690258402e-8,0.004408863496128932,1.9029458207028737e-5,-5.959328119831901e-8,0.004409000066919958,1.924325840921723e-5,-6.006330961355848e-8,0.004409061253908856,1.9417302526743488e-5,-6.044637646552229e-8,0.004409064800155661,1.9517894893698925e-5,-6.066804549783033e-8,0.00440904055014602,1.9520391771617026e-5,-6.067376479634501e-8,0.004409027212339246,1.9415263477098266e-5,-6.044217579738232e-8,0.004409066265143777,1.9212538136596372e-5,-5.99949182565613e-8,0.004409193715141178,1.8942795303234154e-5,-5.939893403493536e-8,0.0044094314113227616,1.865344497733075e-5,-5.875845298339941e-8,0.004409780143242562,1.8400286623901103e-5,-5.8196555817766816e-8,0.004410216569539457,1.8235638567657733e-5,-5.782905216370578e-8,0.004410695422717016,1.8195238170461436e-5,-5.773546974239403e-8,0.004411157650944433,1.8286844900537162e-5,-5.7933659296607315e-8,0.004411543971861461,1.8484117436023682e-5,-5.836601541020027e-8,0.004411811395675748,1.8729348317482946e-5,-5.890535923731313e-8,0.004411947793992804,1.89470109132833e-5,-5.938486561457419e-8,0.0044119780011767805,1.906592214848751e-5,-5.964712702981143e-8,0.004411956808968038,1.9042277832868503e-5,-5.9595124411453214e-8,0.004411950401682743,1.8873156757466962e-5,-5.92220569871064e-8,0.004412014554899769,1.8594182067809693e-5,-5.8606156280090905e-8,0.004412179536671111,1.8263848967560027e-5,-5.7876134214088945e-8,0.0044124466739733125,1.7943581917926447e-5,-5.716729690606632e-8,0.004412794575472388,1.7682304086576782e-5,-5.6587619247160394e-8,0.004413189368832398,1.7509204078874898e-5,-5.6201810628385806e-8,0.004413594086340192,1.743345530047553e-5,-5.603059765879325e-8,0.004413975065031127,1.7447630029714103e-5,-5.605809066694707e-8,0.004414305472350097,1.7532025516451413e-5,-5.6241179923360305e-8,0.004414567041261399,1.7658503065552773e-5,-5.651793566777759e-8,0.004414751115520992,1.779363418722658e-5,-5.681456751260478e-8,0.004414859663338807,1.7901658854669397e-5,-5.7052019121006296e-8,0.0044149062993784445,1.794805755027884e-5,-5.7153915757579485e-8,0.004414916691840586,1.7904389601374315e-5,-5.7057269944060924e-8,0.004414927200000021,1.77543682378513e-5,-5.672588204884182e-8,0.0044149804922138025,1.750003314877578e-5,-5.616395099473292e-8,0.00441511759337999,1.7165714561544804e-5,-5.542484487782527e-8,0.004415367428776234,1.679696126662312e-5,-5.460881274387819e-8,0.0044157368984729635,1.64525946058128e-5,-5.3845568238601775e-8,0.0044162055472075626,1.6190716787134946e-5,-5.3263516737987664e-8,0.004416727899593218,1.6052589799655223e-5,-5.295419024084609e-8,0.0044172437234548155,1.6049869174066154e-5,-5.294395078197559e-8,0.004417693384688244,1.615974344870538e-5,-5.3183040430361466e-8,0.004418033663467096,1.6329784446188893e-5,-5.355607037861073e-8,0.004418249405605174,1.6491255741248804e-5,-5.391129234465096e-8,0.004418357633513688,1.657727659886784e-5,-5.41007360539825e-8,0.004418402673640693,1.6540796109409133e-5,-5.4020027084270734e-8,0.004418443391223361,1.636694373579072e-5,-5.3635805163711675e-8,0.004418536429934856,1.6075637077552477e-5,-5.2991599870440183e-8,0.004418721153570862,1.5713686813819345e-5,-5.219048380509432e-8,0.004419011327149181,1.5339827180016276e-5,-5.136208116526004e-8,0.004419395436149071,1.5008693642004086e-5,-5.062720950800594e-8,0.004419843763828487,1.475917925423041e-5,-5.0072119853676645e-8,0.004420318190940414,1.4609543041482485e-5,-4.973758066953034e-8,0.004420781006999231,1.455837640529271e-5,-4.9620879180614367e-8,0.004421200875707693,1.4588855571197866e-5,-4.9685116993361385e-8,0.004421555921818236,1.4673832615992423e-5,-4.9870423302738325e-8,0.004421834861138942,1.4780363310829798e-5,-5.0103979045361175e-8,0.004422037237442245,1.4873349197413976e-5,-5.030810679146616e-8,0.0044221735003303324,1.4918708687383351e-5,-5.0407314602882546e-8,0.004422265076734925,1.488684665139391e-5,-5.0335987892971714e-8,0.004422343894139628,1.4757129675741033e-5,-5.004829930915722e-8,0.004422450182798508,1.4523472760162985e-5,-4.953057889944237e-8,0.004422627129488367,1.4199935359410018e-5,-4.8813710361903955e-8,0.004422911606825086,1.382367526534905e-5,-4.7979688149729203e-8,0.004423322237828266,1.3451651182103001e-5,-4.715436315562399e-8,0.00442384901396835,1.3148639319550321e-5,-4.6480995689175956e-8,0.004424450465700748,1.2968277830758903e-5,-4.6078384882655163e-8,0.004425062411682258,1.2934115116972632e-5,-4.599895383332543e-8,0.004425616532075163,1.3029713949506274e-5,-4.620678002907812e-8,0.00442606125460747,1.3203026493029452e-5,-4.658713648167632e-8,0.004426376247492937,1.3382921571667098e-5,-4.698291956016331e-8,0.0044265757656095205,1.3500398155340669e-5,-4.7241493967355725e-8,0.0044267015746751685,1.3506656906523134e-5,-4.7254652877251136e-8,0.004426809564985756,1.3383317501207797e-5,-4.698127400556689e-8,0.004426954798878417,1.3143641854113754e-5,-4.645015416988944e-8,0.004427178862902963,1.282611238434304e-5,-4.574598280569655e-8,0.004427502065621027,1.248309395401886e-5,-4.498442593684408e-8,0.004427921557662274,1.2167909243147152e-5,-4.4283605507852286e-8,0.0044284149290582065,1.1923590626574095e-5,-4.373914849628887e-8,0.004428947492553156,1.1775726251332769e-5,-4.340818287378602e-8,0.0044294807498054785,1.1730276245194692e-5,-4.330431159108967e-8,0.00442997978210213,1.1775616157272551e-5,-4.3402016286169154e-8,0.004430418284203898,1.1887104697408922e-5,-4.3646763807176316e-8,0.004430781078167451,1.2032394059880673e-5,-4.396683813881441e-8,0.004431064723837474,1.2176260557030221e-5,-4.428411771350637e-8,0.0044312770935376515,1.228454666456542e-5,-4.452283720664672e-8,0.004431436570445023,1.2327479539015128e-5,-4.4616919616307796e-8,0.004431571073044788,1.2282959424570596e-5,-4.451723465126646e-8,0.004431716519505703,1.2140402085948442e-5,-4.420012359781004e-8,0.004431913708413011,1.190525144918933e-5,-4.367745401611296e-8,0.004432202271488714,1.1603137979985335e-5,-4.3005902031456583e-8,0.00443261096494701,1.128105558813796e-5,-4.228959825337529e-8,0.004433145658560025,1.1001798769206879e-5,-4.166779716993523e-8,0.004433779801368679,1.082900401217352e-5,-4.12817006687968e-8,0.004434454646972603,1.0805123199301839e-5,-4.122560821070611e-8,0.004435094025680583,1.093179184586048e-5,-4.1503363883340675e-8,0.004435629850168535,1.1164738583475233e-5,-4.20170322203088e-8,0.004436026030782993,1.1428372850655338e-5,-4.259921088755147e-8,0.004436288544140871,1.1642827137621819e-5,-4.30729574358741e-8,0.00443645852333741,1.1749408550127374e-5,-4.33081550485094e-8,0.004436594888881352,1.1724150687214207e-5,-4.3251474414460785e-8,0.004436755874140951,1.1577909422798677e-5,-4.292656969019233e-8,0.00443698556045168,1.134743368171151e-5,-4.241440383930332e-8,0.004437307141160754,1.1082923092713402e-5,-4.1825890935872864e-8,0.004437722000943753,1.0835997728485317e-5,-4.1275427325207346e-8,0.004438212894918262,1.0650076781292515e-5,-4.0859608303239765e-8,0.004438749638289341,1.055393982394728e-5,-4.0642808497137944e-8,0.004439295959152751,1.0558721353467244e-5,-4.065026502851615e-8,0.004439816265453436,1.065819146280534e-5,-4.0868482817672476e-8,0.004440281272009354,1.0831676496297347e-5,-4.1251640135869176e-8,0.004440671831938921,1.1048643543678123e-5,-4.173183848769729e-8,0.004440980777783971,1.1273898329578631e-5,-4.2230779881881195e-8,0.00444121303269828,1.1472474912977608e-5,-4.267071508775094e-8,0.004441384565236301,1.1613723431763203e-5,-4.298351149337096e-8,0.004441520716355006,1.1674659260946504e-5,-4.311801611635916e-8,0.004441654103827259,1.1642927188475744e-5,-4.304658575328331e-8,0.004441821893723169,1.151970903380154e-5,-4.277157863485106e-8,0.004442061733825511,1.1322569755221519e-5,-4.2331789891194374e-8,0.004442405367359218,1.1087324544257746e-5,-4.1806717475930976e-8,0.004442869542993695,1.0866655575333044e-5,-4.1313536007648224e-8,0.004443445735403163,1.0722317764963522e-5,-4.0989728756109695e-8,0.004444093284368835,1.0708865030730829e-5,-4.0956817567218523e-8,0.0044447430760904995,1.085167507562386e-5,-4.127142029165161e-8,0.004445316435740319,1.1129602124610225e-5,-4.1886642259513546e-8,0.004445754128237322,1.1475626607160576e-5,-4.2653546623268654e-8,0.004446040101964218,1.180003031512926e-5,-4.3372752883896014e-8,0.004446205530673317,1.2024629257590159e-5,-4.387057130415036e-8,0.004446312162708855,1.2108771182796773e-5,-4.405669777283164e-8,0.004446427135514646,1.2055740045207085e-5,-4.3938284164400834e-8,0.004446602819718554,1.1902415131929761e-5,-4.3596893302424874e-8,0.004446867462772274,1.1702280581489064e-5,-4.3150880569211476e-8,0.00444722502652385,1.1510013581017392e-5,-4.272141346034424e-8,0.004447660112373166,1.1371009258943887e-5,-4.240940734950581e-8,0.004448144592351008,1.1315808141326373e-5,-4.228315760058449e-8,0.00444864413440166,1.1358103698667109e-5,-4.237371725707588e-8,0.004449124029971733,1.1495141539025288e-5,-4.2675501313854964e-8,0.004449554153193063,1.1709878328814522e-5,-4.315087896932633e-8,0.004449912835517964,1.1974488478859295e-5,-4.373794004970734e-8,0.004450189440411732,1.2254789064169708e-5,-4.4360459045246395e-8,0.004450385488268202,1.2515133469631053e-5,-4.493894052335691e-8,0.004450514285615522,1.2723218588808307e-5,-4.540139076746559e-8,0.004450599251519201,1.285424788009527e-5,-4.569253626675187e-8,0.0044506713012207,1.2894201090678989e-5,-4.578100104332719e-8,0.004450765540459394,1.2842246866083047e-5,-4.5664633203186566e-8,0.004450917284953617,1.2712332911019386e-5,-4.537412450667041e-8,0.004451157155322636,1.2533780867555994e-5,-4.497450577626395e-8,0.004451504873237557,1.2350163721766086e-5,-4.45628020467471e-8,0.004451961919675364,1.2214876307893983e-5,-4.425820466465791e-8,0.004452504731610211,1.218142064773772e-5,-4.418032467973815e-8,0.004453082319776596,1.2287689702351628e-5,-4.441399178406356e-8,0.0044536237576869794,1.2537566429059222e-5,-4.496809227303929e-8,0.004454058600129623,1.2889221277017663e-5,-4.5749448011482285e-8,0.004454344557171657,1.3261764007055407e-5,-4.657774011379726e-8,0.004454487209756872,1.356321056345686e-5,-4.724799032523849e-8,0.004454537817108847,1.3726577222573843e-5,-4.761103975360433e-8,0.004454569953530231,1.3733042945322505e-5,-4.762500825386583e-8,0.0044546503114754445,1.3611019367534598e-5,-4.7353008192290663e-8,0.004454819540444871,1.3417353161617989e-5,-4.692121901981639e-8,0.004455088006355839,1.3214963151419203e-5,-4.6469264458608674e-8,0.0044554417320164475,1.3056798315819873e-5,-4.6114776888332594e-8,0.00445585181070049,1.2978205618864193e-5,-4.5936593073707565e-8,0.004456283063848414,1.2995515360089378e-5,-4.597157388372203e-8,0.004456700455403941,1.3107894323916252e-5,-4.621850553884396e-8,0.0044570734879752745,1.3300386432833933e-5,-4.664459015113946e-8,0.004457379329847273,1.354733210799182e-5,-4.719288460843296e-8,0.004457605083715164,1.381611653844664e-5,-4.779065425340231e-8,0.004457749208594007,1.4071308351959136e-5,-4.835873390854053e-8,0.004457821935847933,1.4279162754995978e-5,-4.882171487818592e-8,0.004457844413589892,1.4412244841220207e-5,-4.9118304592704225e-8,0.004457846392811299,1.4453606997495086e-5,-4.9210578647334747e-8,0.004457862579541846,1.4399892313824196e-5,-4.909080557286075e-8,0.004457928006711199,1.4262935015950712e-5,-4.878499921089497e-8,0.0044580728160356475,1.406956442522464e-5,-4.835259699152093e-8,0.004458316817654614,1.385936585539174e-5,-4.7881662798881046e-8,0.004458664213340158,1.3680097018682372e-5,-4.7478820736234354e-8,0.004459099197509258,1.3580228791160693e-5,-4.725262339870064e-8,0.004459584026033035,1.3598195514992196e-5,-4.728940689142557e-8,0.004460062199621417,1.3749252092781208e-5,-4.762371409222547e-8,0.0044604695823886415,1.4013664681784223e-5,-4.8211740969940616e-8,0.004460753777901616,1.4333327715772738e-5,-4.8923755358978294e-8,0.004460895857321044,1.4624178301927179e-5,-4.957195585635171e-8,0.00446092230560696,1.4804495669279922e-5,-4.997383459421404e-8,0.004460896977374359,1.4826692738442146e-5,-5.002318300311229e-8,0.004460895349738283,1.4694329378561483e-5,-4.972790533985917e-8,0.004460976016780967,1.4455254987504552e-5,-4.919452719357374e-8,0.0044611646111219405,1.4178234027314433e-5,-4.857603680579923e-8,0.004461454185855782,1.3928460573193122e-5,-4.801746458935442e-8,0.0044618157539403095,1.3752419469232318e-5,-4.7622364855750946e-8,0.0044622107137216325,1.3673354803297678e-5,-4.7442825841443116e-8,0.00446260043945746,1.369354382664959e-5,-4.7484455725649896e-8,0.004462952022908023,1.3799219006272274e-5,-4.7717131725367e-8,0.004463241121058138,1.3965553328710682e-5,-4.8085882901992276e-8,0.004463453324834858,1.4160873361938923e-5,-4.852016867099879e-8,0.0044635849469705675,1.435036495631774e-5,-4.894218569650978e-8,0.004463643417515637,1.4499782775240661e-5,-4.9275285274911396e-8,0.004463647051016639,1.4579493829923948e-5,-4.945312739285398e-8,0.004463623708041326,1.456882906403381e-5,-4.9429429021382195e-8,0.004463607842406662,1.4460176219189537e-5,-4.918704040982184e-8,0.0044636357910401445,1.4261818394534823e-5,-4.874420470914212e-8,0.0044637397511841466,1.3998495202235436e-5,-4.815581116683994e-8,0.004463941391235043,1.3708962880863763e-5,-4.7508063679370155e-8,0.004464246337336341,1.3440376771153735e-5,-4.6906117413019404e-8,0.0044646407956383674,1.3240001878015215e-5,-4.645569825673976e-8,0.004465091381001237,1.3145269848031426e-5,-4.624087973870854e-8,0.004465549066273715,1.3173598219246631e-5,-4.6301165592733985e-8,0.004465957939694511,1.3314136875100861e-5,-4.661280004540448e-8,0.004466268576327031,1.352468763662037e-5,-4.708169932958065e-8,0.00446645372428031,1.3737541360524216e-5,-4.7556478385599956e-8,0.004466520878302181,1.3876287526487771e-5,-4.786615773013864e-8,0.004466514326078782,1.3880445157377903e-5,-4.7875375783545784e-8,0.004466502142877897,1.3727918531229615e-5,-4.753461483998569e-8,0.004466552086217613,1.344312403337607e-5,-4.689826847344771e-8,0.0044667082651349286,1.3085819784721498e-5,-4.609959388131855e-8,0.004466980019477852,1.2727550786706039e-5,-4.529813388914731e-8,0.004467345755137234,1.2428783962732317e-5,-4.4628795806165725e-8,0.004467765779943532,1.2225982089979055e-5,-4.4173112494455235e-8,0.004468196005854024,1.2129693991677846e-5,-4.395498255353792e-8,0.004468597642816224,1.2129490543834448e-5,-4.395156917433471e-8,0.00446894206410521,1.2201011417455164e-5,-4.410885737385981e-8,0.00446921225500677,1.2312244640502023e-5,-4.43555394468987e-8,0.004469402654481283,1.2428213420078234e-5,-4.46134499502362e-8,0.0044695185950805304,1.2514503621319245e-5,-4.48055188286882e-8,0.004469575723049835,1.2540430548831996e-5,-4.486296672886854e-8,0.004469599148903078,1.2482479511679878e-5,-4.473308223481721e-8,0.004469621667375493,1.2328204497541601e-5,-4.4387945702341005e-8,0.004469680258111596,1.2080054076724377e-5,-4.38329250854799e-8,0.004469810440791369,1.1757832861630705e-5,-4.3112118745779403e-8,0.004470038938882233,1.139812552580378e-5,-4.2307071423256166e-8,0.004470376233823944,1.1049363336854192e-5,-4.1525836645826615e-8,0.004470811437085582,1.0762470256707936e-5,-4.088220096014905e-8,0.004471311827050345,1.057885493987764e-5,-4.046892914926202e-8,0.004471828174441778,1.0518954079644614e-5,-4.0332120643179816e-8,0.00447230517930829,1.057478045414597e-5,-4.045439322306815e-8,0.004472694773246646,1.0709058764895794e-5,-4.075274930775221e-8,0.004472969079340785,1.0862056909000877e-5,-4.1093716830421817e-8,0.004473129460972397,1.096542999972803e-5,-4.1324306385980915e-8,0.004473208349376754,1.0960344314636686e-5,-4.131265117419883e-8,0.004473261801176122,1.0814980769902441e-5,-4.098727821687716e-8,0.004473353611162491,1.0535090952922028e-5,-4.036078520359405e-8,0.004473535890618031,1.0162456216834655e-5,-3.952640941680167e-8,0.004473833792415958,9.760956408521302e-6,-3.862688960352953e-8,0.004474240602953426,9.396173414810474e-6,-3.7808898628385294e-8,0.004474724001444978,9.11738920258227e-6,-3.718281945206038e-8,0.004475238859403357,8.948272943174389e-6,-3.6801887768029544e-8,0.0044757402350894555,8.887048525787006e-6,-3.6662466891908055e-8,0.004476192324498001,8.912754115928486e-6,-3.6717928510436886e-8,0.004476572466872101,8.99328366656885e-6,-3.689655835364853e-8,0.004476871540255352,9.092325994737656e-6,-3.711706737226179e-8,0.0044770926280973825,9.174281950373387e-6,-3.7299643889725875e-8,0.004477249315061717,9.207572991317009e-6,-3.737343689531388e-8,0.0044773641629216165,9.167232096321902e-6,-3.7282422144220036e-8,0.004477467204936426,9.037578898248145e-6,-3.699141801660316e-8,0.004477593756950581,8.815347168589488e-6,-3.649307148880597e-8,0.00447778058690321,8.512872182307729e-6,-3.5814955514758316e-8,0.004478059745215661,8.159958224253264e-6,-3.502372164908136e-8,0.004478450365817333,7.802247766408065e-6,-3.4221459193305144e-8,0.004478950468601355,7.494062159631074e-6,-3.3529720730520204e-8,0.004479532465119492,7.285542176108168e-6,-3.3060801908352687e-8,0.004480146136971822,7.2072554470058906e-6,-3.288331103792207e-8,0.004480730224220354,7.258279349781589e-6,-3.2995444030558204e-8,0.004481229449583244,7.4035582392112385e-6,-3.331896233314279e-8,0.004481610689525678,7.582522644393277e-6,-3.371838931973838e-8,0.004481872292063173,7.725939025928392e-6,-3.403868938062639e-8,0.00448204374844317,7.774910697168804e-6,-3.414782399457034e-8,0.004482176671298304,7.696059172490782e-6,-3.397078855811176e-8,0.004482330435030019,7.4890430319435334e-6,-3.350650916046562e-8,0.004482556672721601,7.1850969128227755e-6,-3.282465246101726e-8,0.0044828866992572885,6.837522641746615e-6,-3.2044432737991846e-8,0.0044833250857910616,6.507056498926579e-6,-3.130192899832561e-8,0.004483850858172803,6.24650987263678e-6,-3.071570165203201e-8,0.004484425307959444,6.08924159396039e-6,-3.036088489326645e-8,0.004485003194359061,6.044356934728174e-6,-3.025827024763154e-8,0.004485543401858622,6.098712850233066e-6,-3.0378643182073185e-8,0.004486016219005494,6.2234233182378906e-6,-3.0657287324259747e-8,0.0044864064166258944,6.3817652026060565e-6,-3.1011736157922704e-8,0.004486712974298434,6.536100940869929e-6,-3.135738930785751e-8,0.004486946987567679,6.652794334948827e-6,-3.16186317416998e-8,0.0044871290855611435,6.705289352964788e-6,-3.173578594963119e-8,0.004487287039748156,6.676139966458214e-6,-3.1669660514816774e-8,0.004487453549021817,6.558809591876483e-6,-3.1405558068106883e-8,0.004487663626245549,6.359694715241642e-6,-3.095779699979666e-8,0.004487950667436226,6.100153211559874e-6,-3.0374268126452117e-8,0.004488340386805238,5.817319379742182e-6,-2.973828357636435e-8,0.004488842722498734,5.561454687988725e-6,-2.9162651978515495e-8,0.004489443758855133,5.387386078451001e-6,-2.87704753805209e-8,0.00449010207955269,5.339481305214199e-6,-2.866142686948672e-8,0.004490754688042762,5.434077367358827e-6,-2.887228736862537e-8,0.004491334130057058,5.647948607453723e-6,-2.9351019643881805e-8,0.004491791249757919,5.921297869142392e-6,-2.99634549511861e-8,0.004492112629279643,6.17644552752166e-6,-3.0535254824106297e-8,0.00449232388491216,6.343735825162951e-6,-3.0910079891972617e-8,0.004492478423788278,6.3824291151391336e-6,-3.0996454297399085e-8,0.0044926387333911215,6.288994539844147e-6,-3.078631234061721e-8,0.004492858636300761,6.092913739653983e-6,-3.0345562453837724e-8,0.004493171588724417,5.844789364045817e-6,-2.9787493231587065e-8,0.00449358619792652,5.60206433789655e-6,-2.9240893731404095e-8,0.004494087869175982,5.4161245069199806e-6,-2.882123891207294e-8,0.004494644740160421,5.322864554289205e-6,-2.8609503663609465e-8,0.004495216006784931,5.337654872160231e-6,-2.864069875751362e-8,0.004495760772876803,5.45491845871229e-6,-2.8902689986086383e-8,0.00449624562807949,5.6517357057193595e-6,-2.9344127629553888e-8,0.004496649625176552,5.894052353282223e-6,-2.988837234120634e-8,0.004496966197981279,6.14368973988668e-6,-3.044936038422412e-8,0.004497202413708704,6.364618307242032e-6,-3.094585642668188e-8,0.004497376491928267,6.527582409948589e-6,-3.131194447327545e-8,0.004497514640436966,6.6129278100694005e-6,-3.150337999113445e-8,0.004497647925917268,6.612117621637158e-6,-3.150093270015358e-8,0.004497809336845073,6.528610724443239e-6,-3.131231070153016e-8,0.004498030707089667,6.3785361876222695e-6,-3.09736925859592e-8,0.004498338829174895,6.191080665260008e-6,-3.055066942661581e-8,0.004498750077775436,6.0076683654676744e-6,-3.013646953689903e-8,0.004499263612814337,5.8780642609847445e-6,-2.9843203850422515e-8,0.004499854940636369,5.851244450515609e-6,-2.9781269629881294E-08,0.004500473936466841,5.960397636023314e-6,-3.002551100540538e-8,0.004501052719345036,6.205775394502228e-6,-3.057655086561226e-8,0.00450152565398311,6.544818406940442e-6,-3.133855594471292e-8,0.004501855052718436,6.89991925988118e-6,-3.213677936923044e-8,0.004502048299394567,7.184984577129539e-6,-3.277745584916125e-8,0.00450215485481849,7.337928245096862e-6,-3.312096524996092e-8,0.004502244939964075,7.34104622514252e-6,-3.31275673941889e-8,0.0045023832883471036,7.220589179745083e-6,-3.285626158580508e-8,0.0045026110823796145,7.030850470500054e-6,-3.2428926008768215e-8,0.0045029404092560505,6.834169236371335e-6,-3.198546698313869e-8,0.004503358106314494,6.685082210089396e-6,-3.1648403907449894e-8,0.004503833931529304,6.621199922123047e-6,-3.150250475699595e-8,0.004504329393182454,6.659916022098113e-6,-3.158735035096041e-8,0.004504805490228415,6.79906815339101e-6,-3.18986098972113e-8,0.0045052288712172945,7.020052500014815e-6,-3.239479081077634e-8,0.004505576291020284,7.292536290791366e-6,-3.300768877577651e-8,0.004505837190189702,7.580099251624076e-6,-3.3655110613896705e-8,0.0045060143045280365,7.846042790020471e-6,-3.42541110553583e-8,0.004506122446663604,8.058625318459529e-6,-3.473295260761845e-8,0.0045061858442556986,8.195104654863028e-6,-3.504028264202122e-8,0.004506234642510104,8.244233774000591e-6,-3.515070923594395e-8,0.004506301185498216,8.20730170658394e-6,-3.506705303538336e-8,0.004506416396345633,8.098093426558627e-6,-3.482021907021817e-8,0.004506606235169193,7.94206498498607e-6,-3.446740371929097e-8,0.004506887964378976,7.774744655900673e-6,-3.4088620681013444e-8,0.004507265898608951,7.63883680811971e-6,-3.378026681707891e-8,0.004507726866888514,7.578827637892328e-6,-3.364294154809401e-8,0.0045082369085281135,7.631796357853752e-6,-3.376059550196789e-8,0.0045087423408103665,7.81442404265071e-6,-3.4171064362557586e-8,0.004509179270358261,8.109527450340536e-6,-3.48355963905556e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json new file mode 100644 index 0000000..d989a12 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":26000,"numberOfSamples":1000,"samples":[0.004509493310776733,8.460255546355793e-6,-3.5625800851343465e-8,0.004509663584584268,8.78152154032578e-6,-3.634960149730122e-8,0.004509716789810693,8.989819707723907e-6,-3.681866430913203e-8,0.004509719059465651,9.037418772725032e-6,-3.692552117143939e-8,0.004509748243703133,8.930185223519827e-6,-3.668355434778159e-8,0.004509863647122957,8.719470842231082e-6,-3.620846132642241e-8,0.004510089653785742,8.476972036399517e-6,-3.5661533171045015e-8,0.004510416800722429,8.269299770251092e-6,-3.51925282944491e-8,0.004510813094911667,8.1427235238956e-6,-3.4905561743649874e-8,0.004511237012805131,8.118815983827459e-6,-3.4849442039030304e-8,0.004511647598100416,8.19695215375018e-6,-3.5023237901990346e-8,0.004512010754110658,8.359585736620415e-6,-3.538793530902102e-8,0.004512302608721269,8.577895407180773e-6,-3.5878908014654e-8,0.004512511101780664,8.817020399356672e-6,-3.6417590410461715e-8,0.004512636407156604,9.040913865577355e-6,-3.692247406897225e-8,0.004512690307657771,9.216869444768706e-6,-3.7319489010541575e-8,0.004512694498577715,9.319590010896785e-6,-3.755134208751638e-8,0.004512677812454461,9.33448051439994e-6,-3.758499305360356e-8,0.004512672525088187,9.259714461186162e-6,-3.74162487552752e-8,0.004512710155956202,9.106773676260358e-6,-3.7070886445067697e-8,0.004512817232229619,8.899452134994748e-6,-3.660239062283695e-8,0.004513011361703757,8.671416905011533e-6,-3.6086549932726506e-8,0.0045132978459024205,8.462410007400726e-6,-3.561303803422552e-8,0.00451366700674806,8.313087368408677e-6,-3.5273853268424084e-8,0.004514092641922462,8.258223307030978e-6,-3.5147920393724736e-8,0.004514532771288454,8.318077690988317e-6,-3.5281410931936163e-8,0.004514934630932754,8.4888481118899e-6,-3.566597134940736e-8,0.004515245854344678,8.735374126556136e-6,-3.622214330179837e-8,0.0045154316998782295,8.991891199064452e-6,-3.6801147360575755e-8,0.004515492902915043,9.176856590224277e-6,-3.7218586920753816e-8,0.004515473030595792,9.22132948769478e-6,-3.731873347690093e-8,0.004515445973338222,9.09843419372188e-6,-3.704104339955742e-8,0.00451548682469044,8.835578371895206e-6,-3.644751863773576e-8,0.00451564268107663,8.500985857177386e-6,-3.5692080359945736e-8,0.0045159197183348996,8.174205711565663e-6,-3.495399269113799e-8,0.004516289609363855,7.91891452501725e-6,-3.437668106843999e-8,0.004516706111846334,7.769533914623208e-6,-3.403776290168179e-8,0.004517121078763411,7.73134067417984e-6,-3.3949388348932536e-8,0.0045174946878258695,7.787734155315276e-6,-3.4074540770568025e-8,0.004517799867137044,7.908923469211388e-6,-3.434642142253354e-8,0.004518023021591153,8.059160327422076e-6,-3.468456742654183e-8,0.004518163140214663,8.202005982025426e-6,-3.50066650311153e-8,0.004518230411948181,8.30424890030949e-6,-3.523747823122548e-8,0.004518244570725208,8.33915192550796e-6,-3.531634932075353e-8,0.004518232782286238,8.28935594403696e-6,-3.5203891163581475e-8,0.004518226774465987,8.149365170645358e-6,-3.488762043767852e-8,0.004518259006711036,7.927116613346235e-6,-3.438542274392408e-8,0.004518358060544222,7.643963370228097e-6,-3.3745425584923236e-8,0.004518543856405558,7.332621283429884e-6,-3.3041356370972954e-8,0.004518823498710852,7.0329632269025115e-6,-3.236314547040654e-8,0.004519188579967757,6.785903929501321e-6,-3.180325247605029e-8,0.004519614661144808,6.626048418181081e-6,-3.14401232958339e-8,0.0045200634304379044,6.5740276672578925e-6,-3.132079397132222e-8,0.004520487966458727,6.62956304606739e-6,-3.144502131997278e-8,0.00452084147546764,6.766843341505083e-6,-3.175463526314589e-8,0.004521089187148414,6.934764185105069e-6,-3.2134004538126606e-8,0.004521221269959029,7.065025688552307e-6,-3.2428442843453624e-8,0.004521261859102045,7.089574850293132e-6,-3.248384715700535e-8,0.0045212674299407694,6.964089990219654e-6,-3.2199939344201606e-8,0.004521310513078177,6.687544084459722e-6,-3.1574464342686096e-8,0.004521453447203763,6.305670157088708e-6,-3.071085821791362e-8,0.0045217253573987225,5.893958647960642e-6,-2.9779688167653515e-8,0.004522114733755025,5.529133856038296e-6,-2.8954214723599135e-8,0.004522579377927455,5.264744210794258e-6,-2.8355366465152043e-8,0.004523065009217748,5.120982847527676e-6,-2.802885167464862e-8,0.004523521972907846,5.088150002782038e-6,-2.7952986672350293e-8,0.004523914736487703,5.136932989628306e-6,-2.8061821235107004e-8,0.004524224518460753,5.229079919518181e-6,-2.8269112293518485e-8,0.004524447866784532,5.325356167857952e-6,-2.8486202260608446e-8,0.004524593830297251,5.390497834119252e-6,-2.8633216627973057e-8,0.004524681160259874,5.396171432205578e-6,-2.864585654482284e-8,0.004524735849207278,5.323027317101781e-6,-2.8480176026552257e-8,0.0045247886943237964,5.16249823096028e-6,-2.8116730602371682e-8,0.004524872353940403,4.918444281738836e-6,-2.7564280225240977e-8,0.0045250174349796965,4.608134848323794e-6,-2.68619228883987e-8,0.004525247591606092,4.261615509273891e-6,-2.6077583364155316e-8,0.004525574321292053,3.918549452938378e-6,-2.530086898948843e-8,0.00452599277311532,3.622150479587777e-6,-2.462943302074595e-8,0.0045264801545203655,3.4107258886289212e-6,-2.4149954956603862e-8,0.004526998018263306,3.308450392319929e-6,-2.3917312554474847e-8,0.004527498775693957,3.317760005942039e-6,-2.3937301228621522e-8,0.00452793558120547,3.415707219466181e-6,-2.415823276235786e-8,0.00452827373820132,3.555942963102195e-6,-2.4475281614218993e-8,0.004528501076735233,3.677053577969154e-6,-2.4749321189987848e-8,0.004528634255226658,3.7166708540264696e-6,-2.4838951555615288e-8,0.00452871788049019,3.6288209284880697e-6,-2.4639908971730102e-8,0.004528814461392247,3.399578871249497e-6,-2.4120586107355082e-8,0.004528986348915549,3.0544546974012395e-6,-2.3338735228699577e-8,0.004529275447593868,2.652362755159554e-6,-2.2427751850493508e-8,0.0045296894826229355,2.266809562799965e-6,-2.1554061940523532e-8,0.004530201357681512,1.962172998408435e-6,-2.0863453384503786e-8,0.004530761107800889,1.7757792179593227e-6,-2.044053421769499e-8,0.004531313427122603,1.7122786235617054e-6,-2.0295983770420518e-8,0.0045318125655776954,1.749367675975404e-6,-2.037944352447753e-8,0.004532230187937357,1.8490802478591477e-6,-2.0605011670815894e-8,0.00453255650096998,1.968861091375431e-6,-2.08762767548505e-8,0.004532797413529103,2.069429992863889e-6,-2.1104137100273155e-8,0.004532970455627508,2.1191957801873115e-6,-2.121685754164669e-8,0.004533101006844266,2.0963386322046738e-6,-2.1164869031366592e-8,0.004533219236241922,1.9898190337828303e-6,-2.09231193072752e-8,0.004533357423629913,1.8001513809640854e-6,-2.0492836790277707e-8,0.004533546992225019,1.540165048997408e-6,-1.9903207651827864e-8,0.004533814625910253,1.2352637227640804e-6,-1.9211889086172134e-8,0.0045341773121543635,9.220902568912064e-7,-1.8501932634248034e-8,0.004534637007950439,6.443360771918933e-7,-1.7872295458798828e-8,0.004535176664792075,4.4499167138597644e-7,-1.7420339103780497e-8,0.004535760035304328,3.557925328380303e-7,-1.7217978115692215e-8,0.004536337215533742,3.866412902473646e-7,-1.728772350881937e-8,0.004536855876733859,5.191842687487436e-7,-1.7588072274695526e-8,0.004537275385870752,7.081369882607212e-7,-1.8016430469229954e-8,0.004537579125593926,8.912435030713721e-7,-1.8431639886474907e-8,0.004537780530744449,1.005317578228007e-6,-1.8690357071296403e-8,0.004537920538034231,1.0034699039837472e-6,-1.868616129977461e-8,0.0045380570398233745,8.682810605385142e-7,-1.837946472292758e-8,0.004538249294644987,6.169983072998986e-7,-1.780931248930263e-8,0.004538541670781989,2.970358272201004e-7,-1.708319176747392e-8,0.004538951579800054,-2.7231731686069303e-8,-1.634711520277816e-8,0.004539465565272268,-2.9245638234442717e-7,-1.5744867236873657e-8,0.004540044817016876,-4.530987714794202e-7,-1.537993968878856e-8,0.004540637691521912,-4.913904592554641e-7,-1.5292863661002783e-8,0.0045411941681401885,-4.179588426089708e-7,-1.545968048557915e-8,0.0045416771529875445,-2.646725790176748e-7,-1.580808820140591e-8,0.004542067915028178,-7.389589463817978e-8,-1.624181308946475e-8,0.004542365941693601,1.1161571806108388e-7,-1.6663601282918254e-8,0.004542585366851695,2.557719936323004e-7,-1.6991327574329404e-8,0.004542750301596352,3.328556897280507e-7,-1.7166487509062615e-8,0.004542890539772055,3.288339048433999e-7,-1.7157205799619142e-8,0.004543038110357333,2.4148307307612337e-7,-1.6958505979006495e-8,0.00454322442352209,8.020747945813414e-8,-1.659185787564851e-8,0.004543477357567356,-1.341554185295706e-7,-1.6104693284517906e-8,0.0045438176089469635,-3.6995599015852086e-7,-1.5568968349127696e-8,0.004544254057927853,-5.868612278189073e-7,-1.507632289085078e-8,0.004544778812882803,-7.409000787411416e-7,-1.4726631776247386e-8,0.0045453638821404034,-7.933529756111925e-7,-1.4607830316871693e-8,0.004545962512626217,-7.226259496806341e-7,-1.4768947865738407e-8,0.004546517831531095,-5.353354038386974e-7,-1.5194914668309396e-8,0.004546978401910495,-2.705801777601392e-7,-1.5796839796783648e-8,0.004547315606031961,7.426064280520287e-9,-1.6428760347708144e-8,0.00454753489003374,2.2771495362971647e-7,-1.6929398929145512e-8,0.004547674975302893,3.348200634734904e-7,-1.7172762210130373e-8,0.004547795269270398,3.0546407671952013e-7,-1.7106022758788838e-8,0.004547957342816333,1.5361082419481356e-7,-1.6760923023671023e-8,0.004548207818776337,-7.620926519655014e-8,-1.623857269178295e-8,0.004548567688113334,-3.2310178950335675e-7,-1.5677235728358874e-8,0.004549029689400049,-5.261904517049809e-7,-1.5215224434557068e-8,0.004549562879332015,-6.387181991297879e-7,-1.4958938590346338e-8,0.004550122119909111,-6.369676213818445e-7,-1.4962560924246113e-8,0.004550659547407562,-5.227487180281773e-7,-1.522226203843342e-8,0.00455113503524916,-3.198295674394947e-7,-1.568415057741117e-8,0.004551523306381531,-6.614611648123595e-8,-1.6261898726347644e-8,0.004551816641272785,1.9551328796095916e-7,-1.685796274830549e-8,0.004552023601182218,4.2580724108011224e-7,-1.7382583753550408e-8,0.004552165189758773,5.945892816202448e-7,-1.7766991018379748e-8,0.004552270093790798,6.837932410099917e-7,-1.7970026091410244e-8,0.004552370226282839,6.880617875256065e-7,-1.797954851084639e-8,0.004552497089156715,6.141061808103928e-7,-1.781091130786019e-8,0.004552678823971549,4.796156243032983e-7,-1.7504429067141582e-8,0.004552937441607541,3.1202357072442164e-7,-1.7122570952647516e-8,0.004553285657210565,1.4683488458868566e-7,-1.6746191281231358e-8,0.004553723072438308,2.461230159602889e-8,-1.6467701649164962e-8,0.004554232297584862,-1.4673606685835707e-8,-1.6378198838017022e-8,0.004554776931368462,5.916408340345163e-8,-1.654648595704409e-8,0.004555304544316013,2.5471410996338887e-7,-1.699210890005788e-8,0.004555757580182239,5.487508779098537e-7,-1.766206390844868e-8,0.00455609163018589,8.847980560550384e-7,-1.8427567403072217e-8,0.004556294266149341,1.1862585904106192e-6,-1.9114066338961307e-8,0.00455639356224145,1.3819276275300728e-6,-1.955944643880223e-8,0.004556449423840962,1.4320994076717743e-6,-1.967347844662727e-8,0.00455653146260646,1.3415196289400694e-6,-1.9467164239301853e-8,0.004556695250636879,1.1538974614742377e-6,-1.9040064669564954e-8,0.00455696762660136,9.337292242152009e-7,-1.8538868697838413e-8,0.004557344253094815,7.457228920368247e-7,-1.8110674855141883e-8,0.004557796262614695,6.393184058846508e-7,-1.7867944352973605e-8,0.004558280964655819,6.408021303045762e-7,-1.7870661006435703e-8,0.004558752717751708,7.521507776956689e-7,-1.812364701480733e-8,0.004559171865542613,9.545520907436515e-7,-1.8584396920373626e-8,0.004559510918417762,1.214685417394258e-6,-1.9177186559210626e-8,0.0045597577345257365,1.492268065989241e-6,-1.9810175736451022e-8,0.004559915758252532,1.747525782261627e-6,-2.0392490975707653e-8,0.004560001790681829,1.947399946982737e-6,-2.084852456530275e-8,0.004560042130719432,2.069755428846989e-6,-2.112766147211479e-8,0.004560068031127442,2.105379942421046e-6,-2.1208875035905857e-8,0.004560111313149676,2.0580137470542224e-6,-2.110073390215724e-8,0.004560200668904181,1.943025512553438e-6,-2.083829693588606e-8,0.004560358702285993,1.785412603296129e-6,-2.0478523102675264e-8,0.004560599413535639,1.6174458646150957e-6,-2.009495393525646e-8,0.004560925771429382,1.4758038902445344e-6,-1.977126696599221e-8,0.004561327227637577,1.3976103681723366e-6,-1.9592281027131787e-8,0.004561777687863393,1.414475222692563e-6,-1.963031184849548e-8,0.004562235579990404,1.5439760444566057e-6,-1.9925614673578647e-8,0.004562648675447503,1.7796412722016043e-6,-2.046341689014831e-8,0.004562966076598825,2.0834817290894464e-6,-2.1156859279096877e-8,0.004563156563769151,2.3880171788488707e-6,-2.1851733662215338e-8,0.004563226026995868,2.6134961406077906e-6,-2.236596297709388e-8,0.004563222002259049,2.697182257226839e-6,-2.255654425324677e-8,0.004563218140920344,2.6200473503104345e-6,-2.2380369070183947e-8,0.004563285177328307,2.4142697533356353e-6,-2.1911080480621846e-8,0.00456346510562536,2.1474700508499156e-6,-2.1302898831592876e-8,0.0045637614855055355,1.8952029862123072e-6,-2.0727876983910757e-8,0.004564146109374209,1.717390042126911e-6,-2.0322347502066937e-8,0.004564573586655692,1.6467160412382832e-6,-2.0160696512706902e-8,0.004564995621143562,1.6879982482464885e-6,-2.025403919365333e-8,0.004565371098880404,1.823849272809698e-6,-2.0563061761098215e-8,0.004565671575998424,2.0224636955771143e-6,-2.1015577494141815e-8,0.004565883304822525,2.2451570701558744e-6,-2.1523520714831093e-8,0.004566007062175339,2.4528861969496664e-6,-2.1997743592595424e-8,0.004566056469157245,2.6116666971517507e-6,-2.23604574329312e-8,0.004566055109573586,2.6967378051573467e-6,-2.2554903643749895e-8,0.004566032787591015,2.6952576374760298e-6,-2.2551638035756678e-8,0.004566021340058094,2.6074130943391173e-6,-2.2351082445335482e-8,0.004566050456020915,2.445916611802514e-6,-2.198229461679592e-8,0.004566143978834918,2.234071638222029e-6,-2.1498460356284963e-8,0.004566316991076654,2.002834908710053e-6,-2.0970174692905903e-8,0.004566573698773829,1.7872369419549948e-6,-2.047735188978444e-8,0.004566906025496633,1.6222415688750605e-6,-2.009987915744285e-8,0.004567292941820179,1.5378947751270364e-6,-1.9906572258774763e-8,0.0045677009482845456,1.5534732761251689e-6,-1.9941722705096247e-8,0.004568086845586504,1.6706423254153708e-6,-2.0209304708076832e-8,0.004568404479915657,1.8669001932336232e-6,-2.065787129431821e-8,0.004568616641222311,2.0927296815380814e-6,-2.1174057753546027e-8,0.004568710628782926,2.277737563029436e-6,-2.159677431671749e-8,0.004568710906383361,2.3496980887248315e-6,-2.1760931647364762e-8,0.004568678450507578,2.2627328227331568e-6,-2.1561913449607736e-8,0.004568690934995052,2.0202730399911163e-6,-2.100789416692359e-8,0.004568811461316786,1.6765736725135978e-6,-2.0223021008261412e-8,0.004569064102334118,1.3138502582226867e-6,-1.939501198865483e-8,0.00456942983638702,1.0095623883627573e-6,-1.870048308376553e-8,0.0045698609228537225,8.126805895776015e-7,-1.8250956905805127e-8,0.004570301299600792,7.370286449055343e-7,-1.8077863586350383e-8,0.004570702395164331,7.675146472653699e-7,-1.8146849034032396e-8,0.004571031105591736,8.712119800734532e-7,-1.838299920858834e-8,0.004571271553897738,1.0077872223193491e-6,-1.8694474593890068e-8,0.004571423431715869,1.1371794672960694e-6,-1.898988427190855e-8,0.00457149912894306,1.224623094486609e-6,-1.9189713805360918e-8,0.004571520661368493,1.2439529482437433e-6,-1.9233970167685107e-8,0.004571516461258664,1.1798659800376192e-6,-1.90875063062554e-8,0.004571517887299565,1.0292685411183112e-6,-1.874320617434184e-8,0.00457155544903053,8.015811947188519e-7,-1.822266996676711e-8,0.004571654890494846,5.177527012148897e-7,-1.757386049492885e-8,0.0045718335249696285,2.0776980474633583e-7,-1.686531683855287e-8,0.004572097388308316,-9.323396016944465e-8,-1.6177255542095043e-8,0.004572439665645757,-3.4987692521596087e-7,-1.5590463436344316e-8,0.004572840644505964,-5.31972816140779e-7,-1.5173961796713732e-8,0.004573269348815289,-6.200415053200593e-7,-1.4972436045635267e-8,0.004573687024026574,-6.10406095595246e-7,-1.4994491965318193e-8,0.004574052809641157,-5.192579563073559e-7,-1.520320779417572e-8,0.00457433198222599,-3.843987328357727e-7,-1.5512049283710714e-8,0.004574506433080039,-2.6231970700412053e-7,-1.57915871799184e-8,0.004574585098804139,-2.1787955603130257e-7,-1.5893271807468845e-8,0.0045746091849351205,-3.056827632750247e-7,-1.569220003592137e-8,0.004574645498676162,-5.476968892825376e-7,-1.513834525051923e-8,0.004574765267068838,-9.184797312588896e-7,-1.4290196294897466e-8,0.00457501606601899,-1.3499749934384158e-6,-1.3303575679860455e-8,0.004575402559457306,-1.7569182650377685e-6,-1.2373436343486388e-8,0.00457588755670308,-2.0690376161348062e-6,-1.1660288023729968e-8,0.004576410675222101,-2.2521266223356963e-6,-1.1242149216779647e-8,0.004576911396180024,-2.3103385627944873e-6,-1.1109414454615705e-8,0.004577344958268909,-2.275047092560445e-6,-1.119036156480763e-8,0.004577688009744958,-2.190125367673378e-6,-1.1384764724171442e-8,0.00457793703023403,-2.1001362793857524e-6,-1.1590799048558753e-8,0.004578103680851678,-2.0432033769984585e-6,-1.1721260373927869e-8,0.004578209903486739,-2.0476287663152695e-6,-1.1711299731405369e-8,0.00457828387494594,-2.1305649056463137e-6,-1.1521549135013692e-8,0.004578356691217041,-2.2974938653969773e-6,-1.113942510021554e-8,0.004578459254883159,-2.5420904405371936e-6,-1.0579494532798996e-8,0.004578618975408969,-2.8466169571197294e-6,-9.882523233547e-9,0.004578856169100808,-3.183321162571054e-6,-9.112167432714705e-9,0.004579180478803452,-3.5174083811508843e-6,-8.34808453913955e-9,0.004579588120477424,-3.8118316727193404e-6,-7.674971745318212e-9,0.004580060934558044,-4.03352156185739e-6,-7.168392305513895e-9,0.0045805679854873955,-4.1600968235078126e-6,-6.87951141941344e-9,0.0045810699651512255,-4.185692981165825e-6,-6.821782230335321e-9,0.00458152603375295,-4.124467505914989e-6,-6.962856854404446e-9,0.004581902189684743,-4.010657797913334e-6,-7.224349646031663e-9,0.004582179915574498,-3.894438306832133e-6,-7.491268811747432e-9,0.004582363424246814,-3.833098119282915e-6,-7.632267271587255e-9,0.004582483126184382,-3.8777855317296025e-6,-7.53011848341852e-9,0.004582592398102796,-4.057840675385612e-6,-7.117693448106915e-9,0.004582755475052093,-4.367487092300224e-6,-6.408428922268497e-9,0.004583027684494128,-4.761913130848646e-6,-5.505193981758026e-9,0.004583434904318093,-5.1682652158940795e-6,-4.575001218916299e-9,0.004583962740856525,-5.509717091332434e-6,-3.793847647778333e-9,0.004584562235224711,-5.731726984261732e-6,-3.286608037184449e-9,0.0045851690079899594,-5.8173444046123675e-6,-3.092013230972495e-9,0.004585724984926677,-5.785936446522613e-6,-3.1655856948169594e-9,0.004586192672434863,-5.680003803249362e-6,-3.4098510201368928e-9,0.004586558909587067,-5.549240041603622e-6,-3.710862720240599e-9,0.004586831090544941,-5.438473165345392e-6,-3.965824489806852e-9,0.004587030516411275,-5.381337431846182e-6,-4.097587491428378e-9,0.004587186126494469,-5.398361853965937e-6,-4.059053627389166e-9,0.0045873298103882906,-5.49731379182367e-6,-3.8324359563939324e-9,0.004587493095288864,-5.6741958005571095e-6,-3.427014054705955e-9,0.0045877044693880785,-5.914235263036652e-6,-2.876857912876998e-9,0.004587986651218072,-6.192958116809043e-6,-2.238299632400325e-9,0.004588353448843592,-6.477950803344133e-6,-1.5858038797377467e-9,0.004588806428404769,-6.73216177730537e-6,-1.0043412823020856e-9,0.00458933233628059,-6.919340188748711e-6,-5.769299288868636e-10,0.004589902743292579,-7.011376771941958e-6,-3.6786881572565e-10,0.004590477310455618,-6.996130497857601e-6,-4.0485922692968167e-10,0.004591011167147137,-6.883260760486553e-6,-6.656513658249578e-10,0.0045914652682251846,-6.705371049354524e-6,-1.075393733113511e-9,0.004591817010039603,-6.512924106794449e-6,-1.5182606557942965e-9,0.004592067796621043,-6.363468442006583e-6,-1.8621675068497396e-9,0.004592244944227824,-6.307637731525589e-6,-1.9909320328163395e-9,0.004592396800370081,-6.375463343972728e-6,-1.835720290287429e-9,0.004592581636072272,-6.566741952320174e-6,-1.397147556305703e-9,0.004592852503308843,-6.848670800862258e-6,-7.506592754098574e-10,0.0045932418347822595,-7.16265852740837e-6,-3.085310633349787e-11,0.004593750787773998,-7.439775464126724e-6,6.039907256439864e-10,0.004594348004365676,-7.620693551409611e-6,1.0176568839792315e-9,0.004594979307958952,-7.67285027729872e-6,1.1353900564086016e-9,0.004595584733360852,-7.597882344516838e-6,9.60993606260401e-10,0.004596115629330661,-7.427042036220201e-6,5.663444100107817e-10,0.004596545284004681,-7.208277314545172e-6,6.172570217697634e-11,0.004596870828408168,-6.9916428475073475e-6,-4.377209163440163e-10,0.004597108555701069,-6.818392915343977e-6,-8.371051908542961e-10,0.004597286586221487,-6.715617670183615e-6,-1.0741512526115635e-9,0.004597438018468549,-6.6953943241077795e-6,-1.1211643140079087e-9,0.004597595917342151,-6.7563461785649045e-6,-9.814428534041288e-10,0.0045977900559172604,-6.8858632210796456e-6,-6.841521467843064e-10,0.004598044659033155,-7.062128212677125e-6,-2.796287018101613e-10,0.004598376318128057,-7.255916920005681e-6,1.6480339335871812e-10,0.004598791545151504,-7.4327601793754e-6,5.698408862789437e-10,0.004599284036273952,-7.55641510487658e-6,8.521963256757693e-10,0.004599832545317101,-7.59449169585154e-6,9.37519703522967e-10,0.004600401089893143,-7.526267837569374e-6,7.783330705853753e-10,0.0046009435048163455,-7.351117380604259e-6,3.7337668699399923e-10,0.004601413323426574,-7.094082392306315e-6,-2.1959916877791475e-10,0.004601777276461345,-6.804398311453375e-6,-8.872456883447427e-10,0.004602027574734469,-6.544807205465784e-6,-1.4852269544859042e-9,0.004602187108824936,-6.373998484428838e-6,-1.878640796994688e-9,0.004602304305622246,-6.328662725555859e-6,-1.983290254130587e-9,0.004602439234285484,-6.4122851305789306e-6,-1.7913894121004542e-9,0.004602646341656962,-6.59454075292182e-6,-1.372856112257814e-9,0.004602959791749618,-6.820555679744346e-6,-8.539567811146143e-10,0.004603385401025903,-7.026168406663905e-6,-3.8223413598513426e-10,0.004603900535041509,-7.154432726648315e-6,-8.862971018962839e-11,0.004604461221360877,-7.16909923779504e-6,-5.6530923583887666e-11,0.004605014161836207,-7.061911347469658e-6,-3.0496913721986693e-10,0.004605510173710997,-6.852198505821913e-6,-7.894778705239851e-10,0.004605915231864156,-6.579480498016876e-6,-1.4190378636351609e-9,0.004606216233404941,-6.291994615044852e-6,-2.0824711583876744e-9,0.00460642071017142,-6.035108556079831e-6,-2.675171494544614e-9,0.00460655193149057,-5.842863718623184e-6,-3.1186589302558516e-9,0.004606641995139615,-5.733972110264688e-6,-3.369853455113043e-9,0.004606725264452894,-5.711711571864843e-6,-3.4213163304000836e-9,0.0046068334424430035,-5.7661813773756325e-6,-3.2960088168680032e-9,0.004606992447073734,-5.877366283212291e-6,-3.0401786490361465e-9,0.004607220525040382,-6.01804827384349e-6,-2.7166204947669695e-9,0.004607526828035787,-6.156368380259616e-6,-2.3987754818787228e-9,0.004607909878637184,-6.2584771004198995e-6,-2.1646433927517645e-9,0.004608355861891447,-6.292108699703443e-6,-2.0885544550141327e-9,0.004608837460403657,-6.231941022115572e-6,-2.2288041686048496e-9,0.004609314869247811,-6.066944432541149e-6,-2.610692390028512e-9,0.004609741181179981,-5.808287594175388e-6,-3.208296374163034e-9,0.004610073532643847,-5.494016982094601e-6,-3.9337217762102935e-9,0.004610288280096579,-5.185259144008995e-6,-4.645941435360547e-9,0.004610393895995997,-4.950873931477467e-6,-5.186269288801948e-9,0.004610433184336685,-4.844246198175972e-6,-5.431895389162019e-9,0.004610470758879338,-4.8829096485003395e-6,-5.342766223918112e-9,0.0046105707030473,-5.0419564476459976e-6,-4.976589310976798e-9,0.004610775446429694,-5.26417400954597e-6,-4.465310329754646e-9,0.004611094963682681,-5.480348310975678e-6,-3.968302033161426e-9,0.00461150823724263,-5.62972692844612e-6,-3.625329611994953e-9,0.004611973094222571,-5.673786679284628e-6,-3.524987578971608e-9,0.0046124390559712505,-5.60146915226002e-6,-3.692726761576285e-9,0.004612859222188488,-5.427288532920816e-6,-4.095184948750271e-9,0.004613199097686521,-5.184761096077944e-6,-4.655216115005645e-9,0.00461344157660515,-4.917463952163088e-6,-5.272388730713527e-9,0.004613587996069912,-4.669665926120923e-6,-5.844552407820035e-9,0.004613655691602776,-4.478251084401866e-6,-6.28652082530562e-9,0.004613673077859672,-4.367267921755222e-6,-6.542744128551488e-9,0.00461367367651798,-4.345651474038695e-6,-6.592631310893555e-9,0.0046136904516331,-4.407814373872608e-6,-6.449178045460803e-9,0.004613751389181142,-4.536239263420983e-6,-6.152919507168062e-9,0.004613876649815567,-4.704994955452618e-6,-5.763751856803909e-9,0.004614077028175075,-4.883303608630905e-6,-5.352690069082215e-9,0.004614353162834188,-5.038827337005442e-6,-4.994329710158694e-9,0.004614695036423012,-5.140875843306533e-6,-4.759499974144619e-9,0.004615081647533657,-5.164078436357073e-6,-4.706796509128987e-9,0.004615481345908867,-5.093156815280933e-6,-4.871507157630509e-9,0.004615854140456318,-4.928932317867542e-6,-5.251665030544923e-9,0.004616157793161933,-4.694284295014727e-6,-5.794263848231378e-9,0.004616358878782183,-4.436656622864292e-6,-6.389541647842568e-9,0.004616447225878722,-4.222062557520083e-6,-6.884973524270293e-9,0.004616447316459371,-4.117217975337249e-6,-7.126660174101772e-9,0.0046164171712829195,-4.163817419832329e-6,-7.018720722844495e-9,0.004616430002982171,-4.358091358751388e-6,-6.5703061256921416e-9,0.004616545920780777,-4.64955458388336e-6,-5.898225015384205e-9,0.004616789519416018,-4.961068379082266e-6,-5.180477898492885e-9,0.004617144952363664,-5.21797868115541e-6,-4.5890532040936815e-9,0.004617567428571435,-5.370589400078979e-6,-4.238257150629672e-9,0.004618001377383055,-5.4024523567296e-6,-4.165786813726474e-9,0.00461839617858386,-5.326689531338634e-6,-4.341319230810882e-9,0.004618715659086564,-5.176427103811998e-6,-4.688546619249612e-9,0.004618941704013463,-4.994299138923035e-6,-5.1092602716603065e-9,0.0046190738457956015,-4.823500218588578e-6,-5.503860695653606e-9,0.004619126539673815,-4.701021915286869e-6,-5.786919842108562e-9,0.00461912513350184,-4.6530002781485684e-6,-5.897985711351209e-9,0.004619101113456684,-4.692128922859444e-6,-5.8076723886911916e-9,0.004619087174435325,-4.817110070681227e-6,-5.5190059356818914e-9,0.004619112672785507,-5.013950645613634e-6,-5.064416509080086e-9,0.004619199956383798,-5.258745206492392e-6,-4.499227652478228e-9,0.004619361925076508,-5.521396310506229e-6,-3.892989039720409e-9,0.004619600861690062,-5.769630238686212e-6,-3.3201995651143257e-9,0.0046199082837785595,-5.972903127371703e-6,-2.851352592334347e-9,0.004620265553426885,-6.106140175320044e-6,-2.5443702178223045e-9,0.004620645157437597,-6.15344235394916e-6,-2.4360418005486742e-9,0.004621012910332626,-6.111969284666793e-6,-2.5329705998129033e-9,0.004621331889116244,-5.995896088586415e-6,-2.8023280874564467e-9,0.004621569196957076,-5.839257062531263e-6,-3.16525563366286e-9,0.004621705946598681,-5.6949592448301445e-6,-3.499245426945735e-9,0.0046217486369424686,-5.626269776579186e-6,-3.6579976183436843e-9,0.004621736346891752,-5.688589628394338e-6,-3.5136773121236357e-9,0.004621735560203208,-5.9056093086997374e-6,-3.011976455429588e-9,0.004621818663207311,-6.252544277839716e-6,-2.2106262735571202e-9,0.004622034186749106,-6.660327133482274e-6,-1.269447535738715e-9,0.004622386277920894,-7.0421296244785226e-6,-3.8895869566759596e-10,0.004622835921998608,-7.326987257096725e-6,2.672247922603419e-10,0.004623320597655784,-7.481387241366695e-6,6.22078154458821e-10,0.004623778166074979,-7.511256501722334e-6,6.895832720469361e-10,0.0046241631750252934,-7.4503005879202574e-6,5.476957123973267e-10,0.0046244526906444455,-7.344777280885875e-6,3.031921981158643e-10,0.004624644751104253,-7.241142852555951e-6,6.324918068849496e-11,0.0046247535293354415,-7.178329664083658e-6,-8.227089394819571e-11,0.004624803929537004,-7.1838293799132266e-6,-6.982495105222414e-11,0.004624826696230001,-7.272134715425384e-6,1.3414464882997706e-10,0.004624854095060916,-7.444583539571314e-6,5.327371256362688e-10,0.004624916026302616,-7.690267618702546e-6,1.1006291093985203e-9,0.004625036574007785,-7.98793405485864e-6,1.7885067099525766e-9,0.004625231133799637,-8.30888821439031e-6,2.5298802519654072e-9,0.004625504428824734,-8.620815020618825e-6,3.2500039740028935e-9,0.004625849747329165,-8.892151827359156e-6,3.875986187591585e-9,0.0046262495157665465,-9.09652545200698e-6,4.346970267559263e-9,0.004626677147753625,-9.216883627944467e-6,4.623605244888573e-9,0.004627100098948487,-9.249002221467704e-6,4.6961442314090165e-9,0.004627484100502901,-9.204044867914665e-6,4.590434874603475e-9,0.004627798689161824,-9.109776567161958e-6,4.3708109803278244e-9,0.004628024187515499,-9.0095003276215e-6,4.1376398888795614e-9,0.004628159602392367,-8.956974239448121e-6,4.015455545081188e-9,0.004628229255540625,-9.005485803645908e-6,4.127521100134283e-9,0.004628283803510658,-9.1910726190435e-6,4.556926589182645e-9,0.004628390435834369,-9.514454774165462e-6,5.304877259037512e-9,0.004628610918423801,-9.931843970056032e-6,6.269651296939101e-9,0.004628975503068454,-1.03648245865506e-5,7.2696549997176675e-9,0.004629467998225569,-1.0728850454589621e-5,8.10939549229837e-9,0.004630032512152586,-1.0965482676576773e-5,8.65397700401509e-9,0.004630597398772655,-1.1060056137677217e-5,8.86984853736169e-9,0.004631101082919748,-1.1038122203419039e-5,8.816457412620772e-9,0.004631507147841215,-1.0948389067229884e-5,8.606690701628071e-9,0.004631806481354592,-1.0844288661248472e-5,8.364204739480547e-9,0.004632011465302068,-1.0771358781577292e-5,8.194291991699351e-9,0.004632147892557216,-1.0761401585255883e-5,8.170455351365712e-9,0.004632247893263616,-1.0831308542105932e-5,8.331728476942694e-9,0.00463234477781505,-1.0984114505098195e-5,8.685073680741978e-9,0.004632469369290628,-1.1210771926742844e-5,9.209415190899736e-9,0.004632647141513031,-1.1492171204089592e-5,9.860291714348777e-9,0.004632895765556187,-1.1801489544677315e-5,1.0575356211698413e-8,0.004633222987185644,-1.2107161747595294e-5,1.1281365019742708e-8,0.004633625109689717,-1.2376748980879223e-5,1.1903214390625413e-8,0.004634086659004174,-1.2581610090192167e-5,1.2374746891829162e-8,0.004634581752502566,-1.2701806877036646e-5,1.2650024924146413e-8,0.004635077356706937,-1.273044813037253e-5,1.2713298103112125e-8,0.004635538281190807,-1.2676599340062202e-5,1.2585709492729057e-8,0.004635933426539173,-1.2565907068775515e-5,1.2326775887080312e-8,0.0046362425090470906,-1.2438342120984666e-5,1.202920592778017e-8,0.004636462294497865,-1.234271921279755e-5,1.1806193185873564e-8,0.004636611028747824,-1.232775517799123e-5,1.1770617073140064e-8,0.004636729067608224,-1.2429993538057063e-5,1.2006973681361427e-8,0.004636873204322435,-1.2660614669240317e-5,1.2540806146547426e-8,0.004637103047741207,-1.2995764214321633e-5,1.3316407776853431e-8,0.004637461294852211,-1.3376967540621544e-5,1.4197950262497705e-8,0.00463795534065098,-1.3726217412767458e-5,1.5004554273269622e-8,0.004638550845381015,-1.3972478316380603e-5,1.5571711376454045e-8,0.004639183148953752,-1.4077211752893863e-5,1.5810383357853653e-8,0.0046397812865391925,-1.4045280259926954e-5,1.5732214181573113e-8,0.0046402914283477465,-1.3917086868911308e-5,1.5431235497281092e-8,0.004640688992994678,-1.3749519789539588e-5,1.50396004361683e-8,0.004640977811977925,-1.3597154104758875e-5,1.4683939035007512e-8,0.0046411816590931215,-1.3500634643284917e-5,1.4458435271925997e-8,0.004641334337283517,-1.3482814716284878e-5,1.4415936504639937e-8,0.004641471841569615,-1.3549864644392499e-5,1.45705737914381e-8,0.004641627345314647,-1.36943373473814e-5,1.4904873429144573e-8,0.004641828265389255,-1.3898382253809021e-5,1.5377192152694978e-8,0.004642094369945667,-1.4136568493739574e-5,1.592827642183505e-8,0.004642436229981527,-1.4378530825307724e-5,1.648746362443435e-8,0.004642853793025203,-1.4591962398589605e-5,1.6979710468902657e-8,0.00464333536372152,-1.4746476784586312e-5,1.7334602810121096e-8,0.004643857739129038,-1.481845010519349e-5,1.749756817785199e-8,0.00464438837763796,-1.479624509342569e-5,1.7441917675913e-8,0.0046448901141322415,-1.4684572553892183e-5,1.7178880316379137e-8,0.00464532817306209,-1.4506395760338885e-5,1.676197448758261e-8,0.0046456782783954416,-1.4300948688484878e-5,1.628240091514535e-8,0.004645933875498211,-1.4117326680498562e-5,1.5854168093428857e-8,0.004646110289799332,-1.4004423473821114e-5,1.5590715394014384e-8,0.004646244116896511,-1.399911276381716e-5,1.5577449679665026e-8,0.004646387005593405,-1.41153100211975e-5,1.5846355805771457e-8,0.004646594141764705,-1.4337032558028205e-5,1.6359950354097322e-8,0.004646909305258094,-1.4618613247030586e-5,1.701188561366317e-8,0.0046473503812339495,-1.4894178333601433e-5,1.7649042879564176e-8,0.004647900916773948,-1.5095625610264924e-5,1.811329983033688e-8,0.004648512809389593,-1.5173842404411922e-5,1.829077431406508e-8,0.004649120903019922,-1.5114403601433032e-5,1.8148248545685655e-8,0.004649663817187577,-1.4940331193331636e-5,1.7739550224659373e-8,0.004650101646361556,-1.4701189768492982e-5,1.7180166575556488e-8,0.004650423559198932,-1.4455016176381626e-5,1.6605176919502795e-8,0.004650644665764515,-1.4251827770794912e-5,1.613086614501808e-8,0.004650796624019296,-1.4124141025250696e-5,1.583268895658235e-8,0.004650917415804542,-1.4084914955533756e-5,1.5740543813909623e-8,0.004651043598431591,-1.4130241265291127e-5,1.5845089278510927e-8,0.0046512057278376125,-1.4243729279101672e-5,1.6107974164142077e-8,0.0046514261340793615,-1.4400690454054686e-5,1.6471579916206996e-8,0.00465171789456136,-1.4571531090473221e-5,1.6866922638427443e-8,0.004652084137226091,-1.4724599130893931e-5,1.7220302263998086e-8,0.00465251732741125,-1.4829134893015994e-5,1.746020024223448e-8,0.004652998819609395,-1.4859005735948932e-5,1.7525983107701823e-8,0.004653499526234626,-1.4797478165342453e-5,1.7378984205893643e-8,0.004653982822792938,-1.4642447874902636e-5,1.701461884775316e-8,0.004654410522758944,-1.4410540357957179e-5,1.6471859896107837e-8,0.004654751676673082,-1.4137726039344877e-5,1.5834608479389963e-8,0.0046549921899199246,-1.3874312315314267e-5,1.5219993013443092e-8,0.004655141733859297,-1.3673984905797297e-5,1.4752835810267254e-8,0.004655234441725839,-1.3579420898515158e-5,1.4532174851046341e-8,0.00465532189043984,-1.3609191262358246e-5,1.460084197006534e-8,0.00465545992364021,-1.3750758727023153e-5,1.4929278998332993e-8,0.004655693328327301,-1.3962304090208998e-5,1.5419907146882814e-8,0.004656043110456753,-1.4183068768481111e-5,1.5931259431933548e-8,0.0046565001678516875,-1.434927671056179e-5,1.631501554350779e-8,0.004657027305155954,-1.4411158052329369e-5,1.6455548921583325e-8,0.004657569281103155,-1.434612452943196e-5,1.630052615942731e-8,0.004658068049326739,-1.41639120076071e-5,1.5872851697627348e-8,0.0046584782426453645,-1.3901969676808915e-5,1.525993191601153e-8,0.0046587776708922075,-1.3613082255371558e-5,1.458484088844579e-8,0.004658969832612916,-1.3350233172794423e-5,1.397103491590227e-8,0.004659079003760188,-1.3154157206487545e-5,1.3513330900768914e-8,0.004659141208384155,-1.3046837117797856e-5,1.3262761688597618e-8,0.004659194957403009,-1.3031068730407019e-5,1.3225604937819598e-8,0.004659274330167408,-1.3094026415269862e-5,1.3371747416260096e-8,0.0046594050651191455,-1.3212282800757067e-5,1.3646426315830232e-8,0.004659602999671059,-1.3356523513515203e-5,1.3981232874721674e-8,0.004659873789227049,-1.3495310852038219E-05,1.430287645128278e-8,0.004660213024776066,-1.359808005239616e-5,1.4540151248134795e-8,0.00466060633304002,-1.3637992835869933e-5,1.4630579714044076e-8,0.00466102965981684,-1.3595349253137439e-5,1.4528372069494455e-8,0.004661450563042212,-1.3461902340691184e-5,1.421449651710166e-8,0.004661831730217652,-1.3245578696188559e-5,1.3707678548966238e-8,0.004662137755511344,-1.2973872164911173e-5,1.307227092715899e-8,0.004662344999202101,-1.2693012432152884e-5,1.2416231574338447e-8,0.0046624519407560735,-1.2460082818593682E-05,1.1872648439435237e-8,0.004662485004202495,-1.2327880026386206e-5,1.1564379854227212e-8,0.004662494901102442,-1.2327021407297365e-5,1.1562375295099926e-8,0.004662542595555069,-1.24533420275431e-5,1.185644126351985e-8,0.0046626799506357805,-1.2667322066857839e-5,1.2354101779958266e-8,0.004662933402383711,-1.2906251170550697e-5,1.2909087247827492e-8,0.004663297073919368,-1.3103506845817271e-5,1.3366273288023952e-8,0.004663736575308624,-1.3207064274389993e-5,1.360471420722314e-8,0.00466420034455511,-1.3191474217760806e-5,1.3565421464328888e-8,0.004664633821846689,-1.3061257113502004e-5,1.3259181775894936e-8,0.0046649923454657955,-1.284657142486857e-5,1.2756441236261749e-8,0.0046652500093320995,-1.2593575575264028e-5,1.2164869400910327e-8,0.004665403125135055,-1.2352518526780268e-5,1.160163133759852e-8,0.004665468293837048,-1.2166612359423423e-5,1.1167452954822372e-8,0.004665476372929213,-1.2064179756235221e-5,1.092829431744967e-8,0.004665464527011558,-1.205536188602705e-5,1.090765701107904e-8,0.00466546866248559,-1.2133139463074206e-5,1.1088976843000324e-8,0.004665517840456056,-1.2277264814901737e-5,1.1424838647350068e-8,0.00466563119751025,-1.245936221956031e-5,1.1848924275875613e-8,0.004665817006354218,-1.2647802841822536e-5,1.2287410809984839e-8,0.004666073053110041,-1.281166414378168e-5,1.2668190698852117e-8,0.004666387542373383,-1.292381306206243e-5,1.2928022906658796e-8,0.004666740117300406,-1.2963606556451226e-5,1.3018805625924864e-8,0.004667103089208761,-1.2919782368290056e-5,1.2914336858847914e-8,0.004667443516313451,-1.2793855787151033e-5,1.261828935995056e-8,0.004667727216102982,-1.2603634007130076e-5,1.2172443742013038e-8,0.004667925717887047,-1.2385223968453717e-5,1.1661335221281164e-8,0.004668025982969037,-1.2190587373047782e-5,1.1206425769168459e-8,0.004668040124918859,-1.2077562615726495e-5,1.0942668267392677e-8,0.004668009332740903,-1.2092131257680859e-5,1.0977046211594681e-8,0.004667995963365245,-1.2248776168792324e-5,1.1342816317376177e-8,0.004668063394253834,-1.2519839245074089e-5,1.1974895693262607e-8,0.004668252213447853,-1.2842352538933383e-5,1.272604191553377e-8,0.004668565476656956,-1.3140346753934688e-5,1.3419026252516424e-8,0.004668970137839872,-1.3350798188378615e-5,1.390712963685913e-8,0.00466941145688206,-1.3440881943664238e-5,1.4114239617360718e-8,0.004669831352637258,-1.3411820715628956e-5,1.4043647933471819e-8,0.004670183125758375,-1.3292231840828618e-5,1.3762398499525709e-8,0.004670439551567326,-1.3126587614643615e-5,1.3374333363953765e-8,0.0046705947835942166,-1.2963357965618242e-5,1.2992486691062576e-8,0.004670661871582767,-1.2845325839862214e-5,1.2716578643366719e-8,0.004670667699865216,-1.2802931475699457e-5,1.2617538625965364e-8,0.004670646681376949,-1.2850763728081769e-5,1.2729307862896565e-8,0.00467063427678483,-1.2987111806417097e-5,1.304775137827414e-8,0.004670661343090428,-1.3196164916613432e-5,1.353577457443399e-8,0.004670750064167247,-1.3452020070287972e-5,1.4132715042564545e-8,0.004670911777831962,-1.3723508501828329e-5,1.4765677409608379e-8,0.004671146597861861,-1.397894625705489e-5,1.5360669460035923e-8,0.004671444375319671,-1.4190158848444865e-5,1.5851986140975655e-8,0.004671786392194452,-1.4335593144657587e-5,1.6189419371909977e-8,0.004672147385320302,-1.440277455442945e-5,1.634395024210514e-8,0.004672497882915822,-1.439047323877524e-5,1.63128171558708e-8,0.004672807221955093,-1.4310754474099981e-5,1.6124358297051074e-8,0.004673047967062916,-1.4190585450886653e-5,1.5841798023873977e-8,0.004673202402940901,-1.4071681804180103e-5,1.556283414706472e-8,0.004673270739720579,-1.4006175424222032e-5,1.5409373309145138e-8,0.004673278417874302,-1.4045585886180635e-5,1.5501616287218707e-8,0.0046732771097705355,-1.4223112429589761e-5,1.5916656213600744e-8,0.0046733335426375954,-1.4535231411889031e-5,1.6645637433110732e-8,0.0046735060396706435,-1.4934337773744007e-5,1.7576826633511244e-8,0.004673819189801707,-1.5341741234222534e-5,1.852618723245616e-8,0.004674252268579398,-1.5677278964770178e-5,1.9306615085994873e-8,0.004674748944885229,-1.5888924620635015e-5,1.9797027686382072e-8,0.004675240882951573,-1.5966460031890974e-5,1.997414641383107e-8,0.004675670613593522,-1.593625842060622e-5,1.9900119679567408e-8,0.0046760041793818975,-1.5845643844857367e-5,1.9685820881802324e-8,0.00467623309851158,-1.5746690960885734e-5,1.945294625392006e-8,0.004676369818220206,-1.568457041001168e-5,1.930686205008403e-8,0.004676440772138309,-1.5691203227189234e-5,1.932191376955323e-8,0.004676479528732202,-1.5782987495501686e-5,1.9536206216259085e-8,0.004676520954653062,-1.5961033347667108e-5,1.995215400474037e-8,0.004676596422060922,-1.6212951573783454e-5,2.0540610281932875e-8,0.004676730027189161,-1.6515837372076925e-5,2.1247813816331533e-8,0.004676935979999788,-1.6840152095742693e-5,2.2004505046599017e-8,0.004677217318990602,-1.7154102391278926e-5,2.2736247570911134e-8,0.00467756602649892,-1.7428077777037665e-5,2.3373860561672378e-8,0.004677964479425937,-1.763863379374355e-5,2.3862716425329537e-8,0.0046783879238457065,-1.7771596392012232e-5,2.4169923607945506e-8,0.004678807583239352,-1.782417897198473e-5,2.4289203675387195e-8,0.004679194192743565,-1.780618647288843e-5,2.4243687912563586e-8,0.004679521978008149,-1.7740311713799754e-5,2.4086639550366526e-8,0.0046797732769125674,-1.7661270247751158e-5,2.3899445231071237e-8,0.004679943926326737,-1.7612934963310745e-5,2.378485408762777e-8,0.00468004874105327,-1.76419904879494e-5,2.38520116422879e-8,0.0046801248137174605,-1.7786845602176726e-5,2.4190427202702886e-8,0.004680228593309382,-1.806263404032576e-5,2.4834927068767032e-8,0.004680422650323219,-1.844760764224442e-5,2.5734020536887993e-8,0.0046807527992763975,-1.8880759513499523e-5,2.674458018490809e-8,0.0046812254701966765,-1.9278549072575866e-5,2.7671099756894892e-8,0.004681800427430815,-1.9566523632612258e-5,2.8339657629219468e-8,0.004682406079741662,-1.9708395147643984e-5,2.8665861411746463e-8,0.004682968366748158,-1.9715465849410977e-5,2.867679352392317e-8,0.004683435608529261,-1.9634266355882566e-5,2.8481924313167707e-8,0.0046837883337889595,-1.952439154406978e-5,2.822106187628867e-8,0.004684035487230924,-1.9439673756009193e-5,2.8020203083391307e-8,0.004684204485088165,-1.941806770279495e-5,2.7967929163297136e-8,0.00468433116167156,-1.9479029937500837e-5,2.8109428435669545e-8,0.004684452186456466,-1.9625176187452407e-5,2.845049597540157e-8,0.004684600168465979,-1.984553498761316e-5,2.896517248241957e-8,0.0046848006032723915,-2.0118998764571928e-5,2.9603786467988204e-8,0.0046850698397548065,-2.041773635670475e-5,3.0300926191513015e-8,0.004685413783371999,-2.0710763850050337e-5,3.098384943257845e-8,0.00468582740770953,-2.096777642395736e-5,3.1581541361914726e-8,0.004686295292293071,-2.1163165376747107e-5,3.203417446835051e-8,0.004686793459251504,-2.127986172954694e-5,3.230208207219933e-8,0.004687292561605285,-2.1312386356273433e-5,3.2372809600881676e-8,0.0046877621105637915,-2.126854613740853e-5,3.2264991110637834e-8,0.004688175258111988,-2.1169442043346494e-5,3.202831932504239e-8,0.004688513640797768,-2.104761290672734e-5,3.173919627450822e-8,0.004688771804655766,-2.0943260277204035e-5,3.149188772523059e-8,0.004688960704666771,-2.089847309766487e-5,3.138494951118754e-8,0.004689109427812848,-2.0949239557927876e-5,3.150244410680444e-8,0.0046892635417487075,-2.111546408427255e-5,3.189053130139887e-8,0.004689477922148566,-2.139077308886334e-5,3.253367882818093e-8,0.004689802698454854,-2.1736387602686895e-5,3.3340499356742825e-8,0.004690264446209853,-2.2085256460148676e-5,3.415361339714332e-8,0.004690850572478942,-2.2360461861946586e-5,3.4792836260214054e-8,0.004691507905376526,-2.2503277074614084e-5,3.512087981369812e-8,0.0046921603699025816,-2.2496547289027997e-5,3.5098078105129547e-8,0.004692737515622717,-2.2369205648309436e-5,3.4792895698371355e-8,0.0046931977430484575,-2.218033828194287e-5,3.434443116540985e-8,0.004693535450245421,-2.19946049648199e-5,3.390460552743203e-8,0.004693773572452373,-2.1862829343110403e-5,3.359254933534034e-8,0.0046939501630360635,-2.181362607661693e-5,3.3475032195887265e-8,0.004694106408800557,-2.1853986931876104e-5,3.356800326714713e-8,0.004694278929507639,-2.1974145041739544e-5,3.384814078091561e-8,0.004694495986966662,-2.2153135943492177e-5,3.4265942399950725e-8,0.00469477605708682,-2.236343686777121e-5,3.475658838964401e-8,0.004695127385027143,-2.25745849279392e-5,3.5248415385464474e-8,0.004695547882976639,-2.2756322352379375e-5,3.567032900021728e-8,0.004696025355911659,-2.2881787560675736e-5,3.595935203368904e-8,0.004696538399017729,-2.2930998865573962e-5,3.6068830865346576e-8,0.0046970585118214685,-2.2894428695522926e-5,3.597678695177047e-8,0.0046975538398428066,-2.277591695522771e-5,3.569266368776685e-8,0.004697994417085737,-2.2593897361128732e-5,3.52601055038316e-8,0.004698358163045725,-2.238005741037552e-5,3.475374675121492e-8,0.0046986364344812365,-2.2175013783692378e-5,3.4269031535764016e-8,0.0046988377483364,-2.2021316841364653e-5,3.3905777612987485e-8,0.004698988505350433,-2.1954843872662592E-05,3.3747957039559153e-8,0.00469913001615439,-2.199603289469974e-5,3.384312019587815e-8,0.004699311555481439,-2.2142626039551497e-5,3.418542095617081e-8,0.004699579681160445,-2.2366028659942287e-5,3.470720003209844e-8,0.004699965159038889,-2.261379023439517e-5,3.528496641002932e-8,0.0047004707613474824,-2.2820209470544427e-5,3.576439822294622e-8,0.004701065275270101,-2.29245915141501e-5,3.600321104272019e-8,0.0047016890656927665,-2.2891951736126434e-5,3.591970431021748e-8,0.004702272011748362,-2.2726666777386748e-5,3.5524736397453896e-8,0.004702756920507253,-2.2470877734699576e-5,3.491788013206634e-8,0.004703116987165939,-2.2187808782063738e-5,3.4248104068405246e-8,0.004703359534640568,-2.193925935774467e-5,3.3660754039070295e-8,0.004703517130520162,-2.176842696306175e-5,3.325714330433221e-8,0.004703633418269326,-2.1693450292192006e-5,3.3079469125848756e-8,0.004703750784664788,-2.1710014565138826e-5,3.311710181821752e-8,0.004703902999268972,-2.1798210735348334e-5,3.332284229703271e-8,0.00470411241473192,-2.1929606093883388e-5,3.362958798550564e-8,0.004704389870876045,-2.207267688476105e-5,3.396308166894864e-8,0.0047047356012256255,-2.2196523423997598e-5,3.425061394883235e-8,0.004705140226676658,-2.2273583221930157e-5,3.4427402906015455e-8,0.004705585684179088,-2.2282131344618075e-5,3.444250019797068e-8,0.004706046484988976,-2.2209080754436687e-5,3.426539393023329e-8,0.004706492021561705,-2.205305499960459e-5,3.389321201807501e-8,0.004706890608130669,-2.182697129221664e-5,3.3356730967267744e-8,0.00470721539646339,-2.1558758464267093e-5,3.2721977504560417e-8,0.004707451321018943,-2.12887104727388e-5,3.208392178194558e-8,0.004707601124258925,-2.1062650368795808e-5,3.1550339335174934e-8,0.004707687923092548,-2.092164673284272e-5,3.1217597646232705e-8,0.004707752373939844,-2.0890881213821516e-5,3.1144495257733445e-8,0.004707844271649323,-2.097124597532204e-5,3.1332583670419434e-8,0.004708010475613604,-2.113670162270532e-5,3.172008981581706e-8,0.004708282385389394,-2.1338748014371744e-5,3.219257613945702e-8,0.0047086664359290925,-2.15173693706775e-5,3.2608780636782456e-8,0.0047091404880734164,-2.161606952423453e-5,3.283599569519555e-8,0.004709657840613588,-2.159728736032355e-5,3.278626927707014e-8,0.0047101587972046815,-2.14536381865304e-5,3.244275536750323e-8,0.004710587092019814,-2.1210639927389882e-5,3.1866026733256766e-8,0.004710905784652387,-2.0918934500008726e-5,3.11756702803512e-8,0.004711106530119068,-2.0638435018091832e-5,3.051288304831013e-8,0.004711208865517889,-2.0420804081158147e-5,2.999917704131898e-8,0.004711250995690448,-2.029710843358638e-5,2.9707348003223693e-8,0.004711277151420492,-2.0274053881011356e-5,2.9652724627549498e-8,0.00471132674977426,-2.033766978305856e-5,2.9801983439850805e-8,0.00471142806619857,-2.046071242907155e-5,3.009067825446045e-8,0.004711596296366146,-2.061020016312087e-5,3.044100612335261e-8,0.004711834389857875,-2.0753171954947886e-5,3.077533281366249e-8,0.004712134965726818,-2.086041685204148e-5,3.1024925417154556e-8,0.004712482251510385,-2.090882235568343e-5,3.1135456149055995e-8,0.004712853737906606,-2.0883211847782863e-5,3.107133595210802e-8,0.004713221881139335,-2.0778334625325025e-5,3.082042383122008e-8,0.004713556597760101,-2.0601134262572815e-5,3.0399376917884984e-8,0.004713829354068818,-2.037263915355485e-5,2.9858068237885336e-8,0.004714019207495355,-2.0127999853239356e-5,2.9279591365504785e-8,0.004714120040236812,-1.9912737159773322e-5,2.8771311538676714e-8,0.00471414655809,-1.9773869991005393e-5,2.8443873226592142e-8,0.004714135386249772,-1.9746861801332327e-5,2.83804276963628e-8,0.004714138370032906,-1.984258160661189e-5,2.8606000254505665e-8,0.004714208596707071,-2.004036454826956e-5,2.9071316232283385e-8,0.004714383927031075,-2.029154199139544e-5,2.966130936884501e-8,0.00471467478824134,-2.0532945180363846e-5,3.022705867006223e-8,0.004715061013315357,-2.070513244011117e-5,3.0628741349271914e-8,0.00471549819391272,-2.076855953990602e-5,3.0773644450018024e-8,0.004715930398805945,-2.0712828599232458e-5,3.06378229761092e-8,0.00471630479798327,-2.0557372487725065e-5,3.02675794944921e-8,0.00471658419168978,-2.0344538606421003e-5,2.9763064924636998e-8,0.004716754587575241,-2.012762846230072e-5,2.9250034311585e-8,0.004716826391143379,-1.9957347775696705e-5,2.8847903519089865e-8,0.004716829482927148,-1.9870328926400146e-5,2.8642734974974278e-8,0.004716804183631088,-1.9882591570309303e-5,2.8671899620700577e-8,0.004716791192796836,-1.9989005281011388e-5,2.8922902741116466e-8,0.004716823437325514,-2.016770532199581e-5,2.934387756265717e-8,0.004716921469150951,-2.0387043502867066e-5,2.986002387931219e-8,0.0047170924226144694,-2.0612596164450385e-5,3.0390138793191444e-8,0.004717331446500595,-2.081266616228881e-5,3.085955828244744e-8,0.00471762425529221,-2.0961852660023846e-5,3.120852397033979e-8,0.004717949786709429,-2.104309008518074e-5,3.139695112234478e-8,0.004718282560551554,-2.104890203008696e-5,3.1407378398035346e-8,0.00471859492533725,-2.0982516486430054e-5,3.1247623321056654e-8,0.004718859796079545,-2.0859052414961204e-5,3.0953605446153896e-8,0.004719054624823485,-2.0706285041295662e-5,3.059112867970817e-8,0.004719167008269947,-2.0563643657749342e-5,3.025342322589191e-8,0.0047192012609654915,-2.0477478018717793e-5,3.00498426889888e-8,0.00471918345441392,-2.0491050133859172e-5,3.0082155472353386e-8,0.004719160711673773,-2.0630138351970563e-5,3.041060704503147e-8,0.004719191097019601,-2.0889406258420564e-5,3.1021931692673706e-8,0.004719325043469325,-2.1227769789697886e-5,3.181866698159706e-8,0.0047195859260143365,-2.1578468896618452e-5,3.264310559084911e-8,0.004719960156972756,-2.187111814865657e-5,3.3329373513019146e-8,0.004720402230039262,-2.2055137896671795e-5,3.375863627291979e-8,0.004720851199728154,-2.211368644516015e-5,3.3891818178741824e-8,0.004721249742534635,-2.2064084478755165e-5,3.3770422384395773e-8,0.004721558271420089,-2.194802371751545e-5,3.349326327499581e-8,0.004721761248337392,-2.181765833721016e-5,3.318355542341268e-8,0.004721866556401599,-2.1722520963282726e-5,3.295805030285286e-8,0.004721900238871268,-2.169987115382176e-5,3.29043510790176e-8,0.004721898892204645,-2.176929055241197e-5,3.306826983285239e-8,0.004721901529417458,-2.193141803818353e-5,3.345092527192641e-8,0.004721942348745987,-2.2170269412426117e-5,3.401426136456454e-8,0.004722045516212493,-2.2458138717909424e-5,3.4692640398515564e-8,0.004722222546618573,-2.2761699487966296e-5,3.540726851507083e-8,0.0047224722135377,-2.3047940802877143e-5,3.6080226653327896e-8,0.004722782394577666,-2.3288951948910685e-5,3.6645758612571877e-8,0.004723132980101565,-2.3465103100195668e-5,3.7057739558551584e-8,0.004723499026608934,-2.3566743782828097e-5,3.729363200615465e-8,0.004723853726366984,-2.3594919509001365e-5,3.7356145869933e-8,0.004724171226410891,-2.356158846622636e-5,3.727375668144662e-8,0.00472442964344223,-2.3489522051841577e-5,3.710048713221879e-8,0.004724614776565834,-2.3411574874169688e-5,3.691415587823861e-8,0.004724724794459883,-2.3368277341243487e-5,3.6810591870453345e-8,0.0047247752100325596,-2.340213360934399e-5,3.6890033197833116e-8,0.004724801818033701,-2.354741153860014e-5,3.723294414462482e-8,0.00472485768521177,-2.3816423663497148e-5,3.786770260091306e-8,0.004725000635390749,-2.418751526032683e-5,3.8742466858000376e-8,0.004725272431033011,-2.4603620051597823e-5,3.972202334985268e-8,0.0047256788219663705,-2.4987702204493527e-5,4.062439541897351e-8,0.004726183285667441,-2.5270759185625143e-5,4.128696584233639e-8,0.004726720126803429,-2.541754230471784e-5,4.162712542300643e-8,0.004727219448344189,-2.5435941739691993e-5,4.166429361538732e-8,0.004727629770664268,-2.536784151980682e-5,4.149811650246318e-8,0.00472792886355938,-2.5270329894455154e-5,4.126387077300937e-8,0.00472812265068321,-2.5197835046972124e-5,4.109015364379114e-8,0.0047282373150355555,-2.5190669974525258e-5,4.1071880240448236e-8,0.004728309665470908,-2.5270343003186838e-5,4.125937504726307e-8,0.004728378624615121,-2.543968430350618e-5,4.165883422548709e-8,0.004728478767596398,-2.5685707126707573e-5,4.223916565564198e-8,0.004728635885651726,-2.5983880913205705e-5,4.294209090323031e-8,0.004728864409439411,-2.6303109090072288e-5,4.369389967187808e-8,0.00472916659618418,-2.6610845597161917e-5,4.44175634064523e-8,0.004729533321857145,-2.687781278328495e-5,4.5043926732075706e-8,0.00472994622235607,-2.708187235910797e-5,4.55208730022123e-8,0.004730380793270376,-2.721067737099242e-5,4.5819553184842186e-8,0.004730809906752847,-2.7262961196945158e-5,4.593735403726144e-8,0.004731207297948036,-2.724866569169805e-5,4.589813042879811e-8,0.004731550882303068,-2.7188193463415645e-5,4.5750407942570875e-8,0.004731825972564864,-2.7110878798737e-5,4.5563763450471336e-8,0.004732028530653421,-2.7052515132200603e-5,4.54229491228676e-8,0.004732168446389242,-2.7051350258781955e-5,4.541834024160813e-8,0.004732272116670077,-2.714157631827611e-5,4.563044734216501e-8,0.004732382358303023,-2.734381236381859e-5,4.610740117539504e-8,0.004732552676207028,-2.765400554259749e-5,4.6838853150868065e-8,0.004732833512182073,-2.803550331529912e-5,4.773748847006038e-8,0.004733252285295634,-2.842190019560124e-5,4.864598097253564e-8,0.004733796293531172,-2.8735835655547945e-5,4.9381511830951945e-8,0.004734411109839088,-2.891853713979851e-5,4.980557132802008e-8,0.004735019503554785,-2.895397730306729e-5,4.9880998252676156e-8,0.004735551138537044,-2.887270533546891e-5,4.9680920882470014e-8,0.00473596575267552,-2.873482839748109e-5,4.9348284107208375e-8,0.004736259519104328,-2.8605104853960317e-5,4.903667122874668e-8,0.004736457060975534,-2.8533821667809858e-5,4.886493863585071e-8,0.0047365979415711565,-2.85485921602435e-5,4.88979128990018e-8,0.004736724583238949,-2.8654807118183317e-5,4.914769787656253e-8,0.0047368742116397,-2.8840382877356432e-5,4.958511728727826e-8,0.004737074552126241,-2.9081541619000465e-5,5.015347478913712e-8,0.004737342012367782,-2.934812648323624e-5,5.078111482310837e-8,0.004737681309886265,-2.960821833601568e-5,5.139231870366264e-8,0.004738086098954303,-2.9832193363411564e-5,5.191692419486976e-8,0.004738540469209245,-2.9996259595434974e-5,5.229874245767923e-8,0.0047390212881655396,-3.0085394338945098e-5,5.2502529913061444e-8,0.004739501377336211,-3.0095423581682325e-5,5.251886124976056e-8,0.004739953305782397,-3.0033870472254683e-5,5.236603682676017e-8,0.004740353348319325,-2.9919407976351642e-5,5.208868447062693e-8,0.004740685200385828,-2.9779991128983356e-5,5.175327771239827e-8,0.004740943182403257,-2.9649741613378564e-5,5.1440738209547884e-8,0.004741134674185391,-2.9564621576085497e-5,5.1236171222247815e-8,0.004741281429687509,-2.955689735080932e-5,5.121571324845782e-8,0.004741419089674041,-2.9648317114137292e-5,5.1430346955513816e-8,0.004741593583568248,-2.984236535396184e-5,5.18876132323745e-8,0.0047418528064249385,-3.0117417530783683e-5,5.2535574522677666e-8,0.004742232999460031,-3.0424697664623252e-5,5.325821214909581e-8,0.004742742611363063,-3.069609207813721e-5,5.3894094209571386e-8,0.004743351393757184,-3.086414788615748e-5,5.4283751424790724e-8,0.004743994368040548,-3.088836563852584e-5,5.433186801908802e-8,0.004744593460110826,-3.0773559410401626e-5,5.4050676811265004e-8,0.004745086788273111,-3.0567784478253706e-5,5.3554919237006306e-8,0.004745448989905369,-3.034083898991905e-5,5.301067418598428e-8,0.0047456930853903715,-3.015732469647893e-5,5.257126350003612e-8,0.004745857698513026,-3.00585998089884e-5,5.233439298931279e-8,0.004745990240669041,-3.0058200221043662e-5,5.233146185427817e-8,0.004746133999600095,-3.01466801907586e-5,5.2539325380684306e-8,0.004746321325199566,-3.0299826522431672e-5,5.289999214373297e-8,0.004746571565708012,-3.048628868783824e-5,5.333878061980279e-8,0.004746891547053987,-3.067323831866283e-5,5.377769034777425e-8,0.004747276976592629,-3.083031101807034e-5,5.414468688672485e-8,0.0047477141402886116,-3.09325591886319E-05,5.4380693556431183e-8,0.004748181886555148,-3.096289364885244e-5,5.444541244979396e-8,0.004748654088097438,-3.09141513535335e-5,5.432224087989675e-8,0.004749102826477359,-3.079058892868887e-5,5.4021765189798875e-8,0.0047495023578297945,-3.060826542501298e-5,5.358256772490767e-8,0.004749833466407175,-3.0393770407297746e-5,5.306810148158317e-8,0.0047500874842839194,-3.018108231591561e-5,5.2559163277776153e-8,0.004750269208928283,-3.000667785776047e-5,5.214226026089898e-8,0.004750398005292498,-2.990333609399654e-5,5.1894905169507964e-8,0.004750506508683392,-2.9893424852776115e-5,5.186969825178604e-8,0.004750636541043871,-2.9982645840082855e-5,5.2079533030619567e-8,0.0047508320083346,-3.0155421919572188e-5,5.248676449937229e-8,0.004751128908639331,-3.037369192805859e-5,5.300052553271625e-8,0.0047515437134295745,-3.058146946640733e-5,5.348771766126394e-8,0.004752063484848125,-3.071700733657849e-5,5.380196084787112e-8,0.0047526432287152715,-3.073156493559227e-5,5.382809002665862e-8,0.004753215530274019,-3.060859876345908e-5,5.352758456900073e-8,0.004753711939495655,-3.0373149193153703e-5,5.2960713748294996e-8,0.004754087100048578,-3.0083973403278307e-5,5.226769683183297e-8,0.00475433293603724,-2.98112136590755e-5,5.1615475629158006e-8,0.004754476264544549,-2.9611822552670604e-5,5.113920082596975e-8,0.004754563953700199,-2.9514823359041654e-5,5.0907249040929476e-8,0.0047546455613278705,-2.9520016886330627e-5,5.0918372072733805e-8,0.004754761071596459,-2.9605722627759065e-5,5.112036823852704e-8,0.004754935662167024,-2.9739033755819657e-5,5.143462572713782e-8,0.0047551796096890735,-2.988434036747737e-5,5.1776389895648226e-8,0.004755490589258526,-3.0008869624587908e-5,5.206783588245407e-8,0.004755856442393838,-3.008584029224015e-5,5.224546763974042e-8,0.004756257668350731,-3.0096339668500227e-5,5.2264540791731686e-8,0.004756669706745484,-3.0030731792701057e-5,5.210242554479061e-8,0.004757065414585785,-2.9889908539192638e-5,5.176159886049536e-8,0.004757418195542284,-2.968619040159789e-5,5.1271759843174285e-8,0.00475770601363651,-2.9443203318333868e-5,5.0689459342253564e-8,0.004757915965546911,-2.9193873541743718e-5,5.009323271378707e-8,0.004758048438176281,-2.8975983699953833e-5,4.957295059706262e-8,0.0047581194741599594,-2.882542250153593e-5,4.921372935448555e-8,0.004758160019778779,-2.876818870394926e-5,4.9076934374705044e-8,0.004758211358591651,-2.8813062505827567e-5,4.9182827912228046e-8,0.004758317093348088,-2.894711954955259e-5,4.950002836532726e-8,0.004758513086696229,-2.913579719092093e-5,4.994582695633771e-8,0.004758817511140333,-2.932837760191171e-5,5.03993731608605e-8,0.004759223605850981,-2.9468701036464705e-5,5.072723219425754e-8,0.004759697867909933,-2.9509504216527897e-5,5.0817464553032814e-8,0.004760185864983653,-2.942696235017769e-5,5.061410130962157e-8,0.0047606259543624555,-2.9230317643366145e-5,5.0139889000795495e-8,0.004760967607467908,-2.896139174117637e-5,4.9494965504536796e-8,0.004761187350905263,-2.8682116608214554e-5,4.882704196243258e-8,0.004761294966547717,-2.8454389880011927e-5,4.828336259201367e-8,0.004761327275387122,-2.8321230768383856e-5,4.796585845162461e-8,0.004761333553681048,-2.829714704173953e-5,4.790836114893017e-8,0.0047613601652829966,-2.8369688621673795e-5,4.808053312846534e-8,0.004761440321646852,-2.8508399895063426e-5,4.8409387338905586e-8,0.004761590551451071,-2.8675522491192136e-5,4.880485640357133e-8,0.004761812082991868,-2.883449707617644e-5,4.917998782520274e-8,0.004762094385548418,-2.8955069947828657e-5,4.946298307321452e-8,0.004762418882065095,-2.9015693696433737e-5,4.960280392062293e-8,0.0047627620311700624,-2.9004461174501594e-5,4.95713500331758e-8,0.004763097828331392,-2.8919547543918302e-5,4.936452599578333e-8,0.004763400221147088,-2.8769621484632385e-5,4.90032528762637e-8,0.004763646058855578,-2.8574085268911304e-5,4.8534040160042696e-8,0.004763818946533213,-2.8362398774863e-5,4.802731915464349e-8,0.004763913739565946,-2.8171404920085826e-5,4.757097276326134e-8,0.004763940543520972,-2.8039773963918373e-5,4.725700354486537e-8,0.004763926283878361,-2.7999613583819032e-5,4.7161505527736824e-8,0.004763911790083301,-2.806694015820014e-5,4.732201788368541e-8,0.004763943561668426,-2.8234348316907707e-5,4.772020956502153e-8,0.004764061768513518,-2.846950262937871e-5,4.827848357257109e-8,0.004764288248044224,-2.8721294087771193e-5,4.8874818169044365e-8,0.004764618840848933,-2.893247019251986e-5,4.93729414401414e-8,0.004765022978940383,-2.905493603698263e-5,4.965875709174304e-8,0.004765450868508584,-2.9062967578863874e-5,4.967170122917772e-8,0.004765846191254104,-2.8960399760946087e-5,4.942169071629253e-8,0.00476616076776282,-2.8779715550303997e-5,4.8986766544630736e-8,0.004766367084636814,-2.8573141543301774e-5,4.849172329484978e-8,0.004766464911858467,-2.839814847115955e-5,4.807347695622499e-8,0.00476647980983421,-2.8301831799976193e-5,4.784386143983262e-8,0.004766454199070231,-2.830937480805551e-5,4.7862255367856655e-8,0.004766434603844106,-2.8420157629011527e-5,4.8126495550133353e-8,0.004766459867818386,-2.861169104607286e-5,4.8582435764613466e-8,0.004766553900979995,-2.8848469249434867e-5,4.9145161379864336e-8,0.004766723895020026,-2.9091731049801776e-5,4.9722271610959204e-8,0.004766962652236033,-2.9307102792118214e-5,5.023203099217928e-8,0.004767252783211253,-2.946903329270971e-5,5.061383669831442e-8,0.004767570966247876,-2.956252059197733e-5,5.083224211036534e-8,0.00476789143265435,-2.9583263200849124e-5,5.0877272768619633e-8,0.004768188657904238,-2.9537233992896767e-5,5.076341708753041e-8,0.004768439713838026,-2.9440208044921784e-5,5.0528530531352904e-8,0.004768626910754468,-2.9317193423369705e-5,5.0232483468787865e-8,0.004768741178477299,-2.9201099070795987e-5,4.9953931538163455e-8,0.004768786027644776,-2.9129513499080413e-5,4.978252629146496e-8,0.004768780936853772,-2.9138496012208616e-5,4.980400285879896e-8,0.0047687618966803106,-2.9253256552848995e-5,5.007792821246455e-8,0.004768776430770757,-2.94777909524039e-5,5.0613091054872876e-8,0.004768871988096792,-2.9788111750287958e-5,5.13515752527904e-8,0.004769080444607102,-3.013432954967566e-5,5.2173957718739495e-8,0.004769405284770623,-3.0453486715106665e-5,5.293006343952431e-8,0.004769818220406904,-3.0688999004594416e-5,5.3485350267577706e-8,0.00477026743433048,-3.080834002271513e-5,5.376298803352503e-8,0.004770693577738604,-3.081168201237658e-5,5.3764285152528835e-8,0.004771046589895863,-3.072935915638893e-5,5.3562407814568835e-8,0.004771297631526678,-3.0610999818195513e-5,5.3276237909610404e-8,0.004771443711692161,-3.051122681918304e-5,5.303613422492912e-8,0.004771505396973143,-3.047631542556714e-5,5.295212013490912e-8,0.004771519499267242,-3.0534710642808274e-5,5.3091406911566415e-8,0.004771529205577235,-3.0692816320908944e-5,5.346855026149306e-8,0.00477157418650815,-3.0936189653487376e-5,5.404847750248202e-8,0.004771682921045021,-3.123511651048176e-5,5.4759893534474465e-8,0.004771868687189363,-3.1552574400663744e-5,5.551430977654335e-8,0.004772129449714966,-3.1852223337845775e-5,5.622508871487745e-8,0.004772450721118148,-3.210457768014518e-5,5.682212037646142e-8,0.0047728099065585915,-3.2290564110685556e-5,5.726024480323222e-8,0.004773180754965365,-3.240266257319448e-5,5.752190311025016e-8,0.004773537085899212,-3.244442374528547e-5,5.761592957241243e-8,0.004773855633711976,-3.242925814099788e-5,5.757463774878549e-8,0.004774118342142201,-3.237905496994603e-5,5.7450525834272396e-8,0.004774314614586185,-3.23226647010406e-5,5.731264700502641e-8,0.004774443914942631,-3.2293765111534964e-5,5.724146147285952e-8,0.004774518652136438,-3.232717786829844e-5,5.731994509929363e-8,0.0047745663374796085,-3.245259117379958e-5,5.761852250142311e-8,0.004774628801644312,-3.268548015279706e-5,5.817341730913397e-8,0.004774755642402249,-3.301726301171104e-5,5.896332753649877e-8,0.004774990554962329,-3.340982109567715e-5,5.989660608993938e-8,0.004775353818295921,-3.3800784181514464e-5,6.082409330155231e-8,0.004775829687604098,-3.412186477507274e-5,6.158296115132251e-8,0.004776367868533359,-3.4323594773016025e-5,6.205572173406188e-8,0.004776900497853547,-3.439347655809735e-5,6.22134491263007e-8,0.004777365818310518,-3.435798439395554e-5,6.21203712505869e-8,0.004777726423271264,-3.426947678704886e-5,6.190234646575702e-8,0.004777975587727213,-3.418704078505039e-5,6.170085067616404e-8,0.004778133031878161,-3.416016772550692e-5,6.163388088984261e-8,0.004778235183303571,-3.42193194337018e-5,6.177353927618648e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json new file mode 100644 index 0000000..2cb2765 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":27000,"numberOfSamples":426,"samples":[0.004778324486778677,-3.437325503603603e-5,6.213990841775234e-8,0.0047784403655323285,-3.4611193149972956e-5,6.270647293317436e-8,0.004778612794687001,-3.490776213298559e-5,6.34120907874662e-8,0.004778858592736182,-3.52292773450405e-5,6.41760174740733e-8,0.004779180332297561,-3.554033000747647e-5,6.491361305699471e-8,0.0047795676373042825,-3.580972313910667e-5,6.555048782196374e-8,0.004780000304382801,-3.601491695515349e-5,6.603309632804475e-8,0.00478045244087296,-3.61445559073166e-5,6.63347373647879e-8,0.004780896788498023,-3.619907152539314e-5,6.64569282050896e-8,0.004781308537182374,-3.6189716300693844e-5,6.642701476463283e-8,0.004781668287402928,-3.613665338138569e-5,6.62935418736394e-8,0.004781964263597514,-3.606664631235279e-5,6.612070094818705e-8,0.004782194088007322,-3.6010502207012165e-5,6.598220199376154e-8,0.004782366358377176,-3.600003307813221e-5,6.595397202033107e-8,0.004782501973157172,-3.6063967015481664e-5,6.610431957871602e-8,0.004782634428155468,-3.622211612037997e-5,6.647996630880908e-8,0.004782807312744113,-3.647777437681964e-5,6.708796154697767e-8,0.004783066725500625,-3.681018070253991e-5,6.787788985789277e-8,0.004783447527929692,-3.717158351927006e-5,6.873512189479286e-8,0.004783956543699519,-3.749495769285591e-5,6.949941757309266e-8,0.004784561694818515,-3.7714824470447004e-5,7.001467512930746e-8,0.00478519734376055,-3.779386901530488e-5,7.019245393058328e-8,0.004785787298279908,-3.773988586048272e-5,7.005238005891471e-8,0.004786273540716633,-3.760159745695435e-5,6.971198893123057e-8,0.004786634261718939,-3.7446681679021194e-5,6.93338948131939e-8,0.004786883955125812,-3.7336538281738074e-5,6.90651418882107e-8,0.004787060855944783,-3.731025026111713e-5,6.89987545085644e-8,0.004787211498019626,-3.738052485901743e-5,6.916423518663561e-8,0.004787378723491085,-3.753768633517913e-5,6.953747098677388e-8,0.004787594743852002,-3.775688736390837e-5,7.005827277528313e-8,0.004787878341866488,-3.8005421267547694e-5,7.064797754466723e-8,0.004788234677867704,-3.824887091042978e-5,7.122411974828502e-8,0.004788656578890198,-3.845602832364749e-5,7.171211724931977e-8,0.004789126866304347,-3.8602762874008655e-5,7.205447458736902e-8,0.004789621527438917,-3.867476505188969e-5,7.221733392634786e-8,0.004790113453092092,-3.866900598852055e-5,7.219394452663505e-8,0.004790576389242894,-3.859380569021363e-5,7.200475975629059e-8,0.004790988658217021,-3.846749668906106e-5,7.169414035802423e-8,0.004791336185455692,-3.831592746623132e-5,7.132428928460062e-8,0.004791614602286293,-3.8169236193829984e-5,7.096748066882624e-8,0.004791830442019499,-3.8058199395276177E-05,7.069730505809583e-8,0.00479200147328233,-3.8010251494226334e-5,7.057912997799612e-8,0.00479215608282581,-3.8045112493544786e-5,7.065962097547686e-8,0.004792331243570715,-3.816988109148568e-5,7.095502401154791e-8,0.00479256801539422,-3.837391090721481e-5,7.143902873254914e-8,0.004792903356231363,-3.8625101009650084e-5,7.203412021826269e-8,0.00479335809982377,-3.887092912081732e-5,7.261428947824125e-8,0.004793923998139211,-3.904832069801235e-5,7.302876037880577e-8,0.004794557121329183,-3.910366330394545e-5,7.314982344552248e-8,0.004795186187943556,-3.901641098772414e-5,7.292918982979318e-8,0.004795737032643518,-3.881216157437762e-5,7.242916797983955e-8,0.004796161501972789,-3.855411099464743e-5,7.180203477009054e-8,0.004796453566145229,-3.831658356890081e-5,7.122636889591443e-8,0.004796644767523727,-3.815714860499036e-5,7.084000022037542e-8,0.004796785949434881,-3.8101951194646106e-5,7.070485098911682e-8,0.004796928139441377,-3.8146598603855446e-5,7.080934608157665e-8,0.004797110480654036,-3.8265789851055167e-5,7.109188904690533e-8,0.004797355877127002,-3.8424311612934556e-5,7.146748579270787e-8,0.004797671612426517,-3.8585616852327366e-5,7.184835086333892e-8,0.004798052093481322,-3.8717282547673696e-5,7.215687639979793e-8,0.004798481982683185,-3.879416904832568e-5,7.233306811500727e-8,0.0047989392109531745,-3.880032466659669e-5,7.233903786826962e-8,0.004799398014519919,-3.873014716490181e-5,7.216177815700216e-8,0.004799832156249859,-3.858883316916818e-5,7.181423253686315e-8,0.004800218353251468,-3.839193072968296e-5,7.133417138730679e-8,0.004800539728226463,-3.816370201797726e-5,7.07801739212383e-8,0.004800788798428815,-3.7934150450836535e-5,7.022440790334248e-8,0.004800969422381577,-3.773493298607536e-5,6.97427737273164e-8,0.004801097307136082,-3.7594608437565975e-5,6.940350057998089e-8,0.004801198860837516,-3.753375575082618e-5,6.925545753494772e-8,0.004801308307002621,-3.7560557353341817e-5,6.931760143740602e-8,0.004801463061629263,-3.766739513003747e-5,6.957089748412672e-8,0.0048016973159992595,-3.7829085241195104e-5,6.995424232825527e-8,0.004802033897188718,-3.800393663211438e-5,7.036721161540528e-8,0.004802475381486049,-3.8139426649914707e-5,7.068384881196978e-8,0.004802997237534293,-3.8183940325160886e-5,7.078086051437349e-8,0.0048035477616877155,-3.810365748834886e-5,7.057799420498539e-8,0.004804059432364746,-3.789890582121566e-5,7.007704800926735e-8,0.004804471058177286,-3.76100617891968e-5,6.93758159734603e-8,0.004804751226949466,-3.730566920695092e-5,6.863938578566553e-8,0.0048049094711126545,-3.705654492532993e-5,6.803781398940207e-8,0.004804988697932718,-3.691017647857788e-5,6.768458911635844e-8,0.004805045208603211,-3.687881976068849e-5,6.760819207952647e-8,0.004805128912216125,-3.6943695478478026e-5,6.776250536534154e-8,0.004805272128763522,-3.706800766501402e-5,6.805842303113509e-8,0.0048054875443432725,-3.72102043926267e-5,6.839587172762585e-8,0.004805771578807736,-3.733305531184578e-5,6.868556225257375e-8,0.004806109373196501,-3.740819210339049e-5,6.885971585954908e-8,0.004806479267214914,-3.741763766075652e-5,6.887556737614801e-8,0.00480685624919262,-3.7353970688048305e-5,6.871568343569287e-8,0.00480721474503835,-3.722005965565962e-5,6.838732853486281e-8,0.004807531254878627,-3.70285788369557e-5,6.792132402469517e-8,0.004807787168840347,-3.680107359176237e-5,6.736978068548045e-8,0.0048079717908961535,-3.656606685754552e-5,6.680147748275388e-8,0.004808085124176199,-3.635572067784862e-5,6.629375291303479e-8,0.0048081395655390005,-3.6201003683608846e-5,6.59208353445968e-8,0.004808159619935799,-3.61259119702826e-5,6.573995300854134e-8,0.004808179052187587,-3.614182096799145e-5,6.577781399967254e-8,0.0048082354644977225,-3.624339663861216e-5,6.602088125342372e-8,0.004808363016906486,-3.640739698014146e-5,6.641263422122376e-8,0.004808584568140996,-3.659514206004428e-5,6.685967165663355e-8,0.004808904762436531,-3.6758854267688404e-5,6.724710168628325e-8,0.00480930579650223,-3.685155258136531e-5,6.746239580653564e-8,0.0048097478566896616,-3.683927126708737e-5,6.742470100953433e-8,0.004810176029910032,-3.6712847565078014e-5,6.711298772615927e-8,0.0048105340254307105,-3.649482817530326e-5,6.658239512536003e-8,0.004810781727205723,-3.62365842449442e-5,6.595705126594526e-8,0.004810909644980501,-3.6003671889103674e-5,6.539470778083783e-8,0.004810942478516832,-3.5853999525254e-5,6.503419712779448e-8,0.004810929054258762,-3.581891665158464e-5,6.495006857326439e-8,0.0048109239580987374,-3.589619723046781e-5,6.513597488805307e-8,0.0048109704482596355,-3.605632765339819e-5,6.552011162684835e-8,0.004811091479469972,-3.625616637154878e-5,6.599830095926331e-8,0.0048112894999106535,-3.645235261818129e-5,6.646628961790225e-8,0.004811551496979631,-3.661003899809157e-5,6.684062633294758e-8,0.004811855326073649,-3.6706519877171644e-5,6.706718834733222e-8,0.004812175008010524,-3.673147922115121e-5,6.71216166824625e-8,0.00481248442724685,-3.668578285980148e-5,6.70063528600365e-8,0.004812759857408077,-3.6580011791983614e-5,6.67471364140862e-8,0.004812982021847438,-3.643312892218514e-5,6.638984182107787e-8,0.004813138260380984,-3.627105788419161e-5,6.599705939990736e-8,0.004813224984539436,-3.612453739463318e-5,6.56428706687843e-8,0.004813250027706149,-3.6025539008764395e-5,6.540413556464342e-8,0.004813233901618618,-3.600194055235022e-5,6.53476083256435e-8,0.004813208641342787,-3.6070981482546236e-5,6.55141956879046e-8,0.004813213185891162,-3.623309956685937e-5,6.590422431888505e-8,0.0048132853329533815,-3.6468577247922494e-5,6.646953796652841e-8,0.00481345196089862,-3.6739232782648675e-5,6.711775543238068e-8,0.004813720524850067,-3.699585543676539e-5,6.773031548224511e-8,0.004814074915372328,-3.718990777229592e-5,6.819070851646075e-8,0.004814477519636433,-3.7286327454266165e-5,6.841524919716474e-8,0.004814877412507499,-3.727371265226798e-5,6.837744468682739e-8,0.004815222824200392,-3.71687674239285e-5,6.811846623591315e-8,0.004815474776181273,-3.70132472069625e-5,6.773954080785747e-8,0.0048156180606356,-3.686348225678969e-5,6.737652512252384e-8,0.004815665783668138,-3.677486127562191e-5,6.716247159200004e-8,0.004815655222405848,-3.678604759224073e-5,6.718971555136587e-8,0.004815636005506843,-3.690868613654817e-5,6.74853269118757e-8,0.004815655154643246,-3.712641741469069e-5,6.800902880734398e-8,0.0048157448657402905,-3.740272786418989e-5,6.86723392503097e-8,0.004815916982414414,-3.769330697538445e-5,6.936842915828944e-8,0.004816164398472773,-3.79575991566434e-5,6.999989097850887e-8,0.004816466732888395,-3.8166161444911164e-5,7.049630552378684e-8,0.004816796998892661,-3.830332545250297e-5,7.082047667647441e-8,0.004817127128752034,-3.8366574426466915e-5,7.096680517792435e-8,0.004817431716377734,-3.8364425072400815e-5,7.095614538559232e-8,0.00481769031494261,-3.831406952629976e-5,7.0830151666776e-8,0.004817889007363463,-3.823930287395324e-5,7.064632660863894e-8,0.004818021924002364,-3.81685964240486e-5,7.047337979987863e-8,0.004818092995005395,-3.8132677946559405e-5,7.038533637487357e-8,0.004818117609598462,-3.8160829347254704e-5,7.045252292139183e-8,0.0048181231757472446,-3.8275439457385075e-5,7.072838433001155e-8,0.004818147032808319,-3.848524220234855e-5,7.123323584537503e-8,0.004818230263552585,-3.877913888410908e-5,7.193954194116859e-8,0.004818407376247594,-3.9123929426344404e-5,7.276667979907158e-8,0.004818694517905241,-3.946919365675648e-5,7.359290131063591e-8,0.004819081226702352,-3.975987623674142e-5,7.428575222689352e-8,0.004819530473516512,-3.99528372131395e-5,7.474192447320143e-8,0.004819988207444505,-4.003071053802827e-5,7.492052207630327e-8,0.0048203989246250615,-4.000728896884301e-5,7.485582965376748e-8,0.004820721175466344,-3.99227597487728e-5,7.464556945092878e-8,0.004820937782280773,-3.9831445677784674e-5,7.442110541926777e-8,0.004821058434419171,-3.978679151255124e-5,7.431111753324506e-8,0.004821115078288102,-3.982808284365596e-5,7.44096350669423e-8,0.0048211522270188,-3.9972043873461636e-5,7.475600152324611e-8,0.004821215190839854,-4.021085655268812e-5,7.533039650683856e-8,0.004821339447086454,-4.051642323333889e-5,7.606436621672032e-8,0.004821543793180569,-4.084903826994292e-5,7.686186217830935e-8,0.004821828560137223,-4.11675330397259e-5,7.762370019061549e-8,0.00482217843219588,-4.143791773110746e-5,7.826830249781045e-8,0.004822568060222116,-4.163862375087511e-5,7.874420409142698e-8,0.004822968276370532,-4.176204785493435e-5,7.903364411314588e-8,0.0048233512962861805,-4.1813332547424874e-5,7.914952587908982e-8,0.004823694268337095,-4.180773689787612e-5,7.912902718095061e-8,0.004823981341733217,-4.176770959006623e-5,7.902653839294732e-8,0.004824204843306262,-4.172022434438517e-5,7.890725119874452e-8,0.004824366170721857,-4.169434217802275e-5,7.884127164436675e-8,0.0048244767088938545,-4.1718500655906905e-5,7.889702962949885e-8,0.004824558542278362,-4.1816828861910714e-5,7.9132317175072e-8,0.004824644046356498,-4.2004005130913916e-5,7.958186192139638e-8,0.004824772810595939,-4.227902970506275e-5,8.02424031086156e-8,0.004824984330163837,-4.261986981161869e-5,8.105999852427741e-8,0.0048253063789773926,-4.2982701249766916e-5,8.192845535537351e-8,0.004825742302472369,-4.330968240475467e-5,8.2708249557431e-8,0.004826263889668254,-4.354578668059347e-5,8.326714000557609e-8,0.004826816164327769,-4.365883275531775e-5,8.352838122738419e-8,0.004827334389224904,-4.3652515189787744e-5,8.350199407923697e-8,0.0048277656748831246,-4.356505406150206e-5,8.328128245698638e-8,0.00482808475136242,-4.3454640222978786e-5,8.300742298950006e-8,0.0048282979694060126,-4.337986978855226e-5,8.282198985286413e-8,0.004828436715004647,-4.3383781338829196e-5,8.28283556019412e-8,0.004828545452468338,-4.3485739353153795e-5,8.307227830943268e-8,0.004828669442671055,-4.368097256269977e-5,8.354112596095182e-8,0.004828845131978453,-4.394543747541324e-5,8.417594361299053e-8,0.004829094332003,-4.42434357404026e-5,8.489003053203357e-8,0.004829422222056958,-4.453594609792681e-5,8.558908046994333e-8,0.004829818689134246,-4.4788154520325726e-5,8.618928271603903e-8,0.004830262162433468,-4.497503014521456e-5,8.663067376891177e-8,0.004830724791376845,-4.508429236527066e-5,8.688419593273334e-8,0.004831177763389958,-4.5116784857431304e-5,8.695250414418422e-8,0.0048315958105310045,-4.50848066644472e-5,8.686584714086303e-8,0.004831960372320328,-4.50092207251216e-5,8.667501419792826e-8,0.004832261385448886,-4.4916181410082026e-5,8.644339426785272e-8,0.004832498085672877,-4.4834021165063305e-5,8.623945104183476e-8,0.004832679280731162,-4.479034989518507e-5,8.612971656792317e-8,0.004832823322580668,-4.480906858922817e-5,8.61715560370843e-8,0.004832957631610085,-4.490685000713927e-5,8.640463908636807e-8,0.0048331170643941285,-4.508874878499018e-5,8.684036295819687e-8,0.004833339822081472,-4.5343323574385394e-5,8.745021561454051e-8,0.004833659599911437,-4.5639123415037367e-5,8.815754137046817e-8,0.004834094074838598,-4.592604139982e-5,8.884105976880853e-8,0.004834633097564738,-4.6145321609871045e-5,8.935914049205118e-8,0.004835233759482804,-4.624855257649796e-5,8.959560230484134e-8,0.004835829415303181,-4.621862951064732e-5,8.951018080070509e-8,0.004836352230776127,-4.6080232054244594e-5,8.916366565204528e-8,0.0048367583349983355,-4.589150422661235e-5,8.869757625100208e-8,0.004837041591904654,-4.572106996194247e-5,8.827831621545146e-8,0.004837230223456968,-4.562385027524527e-5,8.803847379686291e-8,0.004837371762779652,-4.562714338453696e-5,8.804318221037112e-8,0.004837516153686477,-4.572936473719342e-5,8.828738354028514e-8,0.004837703559825233,-4.590705729913291e-5,8.871321255880796e-8,0.00483795842100459,-4.6124666861455577e-5,8.923395641208231e-8,0.0048382884248457615,-4.634354743735913e-5,8.975592732878355e-8,0.004838686449812278,-4.652885932931713e-5,9.019505444720963e-8,0.004839134059291325,-4.6654302346770156e-5,9.048817401084265e-8,0.00483960577414928,-4.670490119196287e-5,9.059963781515475e-8,0.004840073592346507,-4.6677962776577816e-5,9.052354945919353e-8,0.004840511260350432,-4.6582397345525144e-5,9.028205993460479e-8,0.004840897899231785,-4.643670396318439e-5,8.992042145949509e-8,0.004841220660300779,-4.626596989787898e-5,8.949965282921296e-8,0.004841476202205037,-4.6098371678003375e-5,8.908802385796573e-8,0.004841671077489782,-4.596168029442229e-5,8.875259106524241e-8,0.004841821307091204,-4.587997080031785e-5,8.855125453694367e-8,0.004841951292609372,-4.587045888723051e-5,8.852512147964674e-8,0.004842091964053706,-4.5940344193465115e-5,8.869088863412212e-8,0.004842277739297711,-4.6083631809650075e-5,8.903322182845005e-8,0.004842541493972926,-4.627838807084122e-5,8.949828371537751e-8,0.004842906839177331,-4.648600438823033e-5,8.999219477976895e-8,0.004843378264295116,-4.665522221668618e-5,9.039097681872455e-8,0.004843932381435793,-4.6733606371812626e-5,9.056834871587784e-8,0.004844516593310677,-4.6686017948423326e-5,9.044026966797496e-8,0.004845061297440305,-4.651301745333522e-5,9.000924058638993e-8,0.004845504427784852,-4.6256995746914114e-5,8.93789350952813e-8,0.004845816313409309,-4.598827316210438e-5,8.872033893206934e-8,0.004846009719910427,-4.5777184591241536e-5,8.820391758061302e-8,0.004846129972474116,-4.566860671556084e-5,8.793778061329034e-8,0.0048462338316596935,-4.567181248329228e-5,8.794324136066889e-8,0.004846370227429732,-4.576600567215227e-5,8.816863162886767e-8,0.0048465699861102345,-4.591338738919411e-5,8.852141023091782e-8,0.004846844129874208,-4.6071908146491065e-5,8.889930925992923e-8,0.004847187112262369,-4.6204138643279386e-5,8.921179902089594e-8,0.004847581703514996,-4.6282067896565305e-5,8.939150694429025e-8,0.004848003735402131,-4.6289076937789076e-5,8.939877769506586e-8,0.004848426256645651,-4.6220321509909585e-5,8.922246700657916e-8,0.004848823209408606,-4.608209856359733e-5,8.887836627853265e-8,0.004849172664527739,-4.58903562975773e-5,8.840557932192903e-8,0.0048494595475039315,-4.5668426291373705e-5,8.786099087737668e-8,0.0048496777143903665,-4.544400174802944e-5,8.731188333905859e-8,0.004849831083297237,-4.524549703219852e-5,8.682706510070045e-8,0.0048499335706496585,-4.5098191704872816e-5,8.646751496052212e-8,0.004850007839811998,-4.502058698290767e-5,8.627758023189437e-8,0.004850082971399407,-4.502123491055191e-5,8.627733894012528e-8,0.00485019108473835,-4.509627653317102e-5,8.645669590689583e-8,0.004850362866722029,-4.522799803925022e-5,8.677198648497969e-8,0.004850621906510939,-4.5384910987798636e-5,8.71463393443206e-8,0.004850977946640694,-4.552441540774088e-5,8.747633199424684e-8,0.00485142013660625,-4.5599608404899196e-5,8.764862963748815e-8,0.0048519131380055204,-4.557121093968653e-5,8.756886324253519e-8,0.004852400538216197,-4.5422915883702246e-5,8.719862480298039e-8,0.004852819081156075,-4.517383633579113e-5,8.658536065820687e-8,0.004853121273694221,-4.4878623615075926e-5,8.586240756352643e-8,0.004853295526580276,-4.461012521329985e-5,8.52067471895604e-8,0.004853370910340709,-4.443133874108983e-5,8.477085726904584e-8,0.004853402989489355,-4.437253239360528e-5,8.462723494908248e-8,0.004853450340338429,-4.442557395851914e-5,8.475489986913897e-8,0.004853555566747505,-4.4554520782041413e-5,8.506551757055743e-8,0.004853737798332979,-4.471246662007726e-5,8.54446544743408e-8,0.00485399486389547,-4.485554721718429e-5,8.57858896141624e-8,0.004854309864890948,-4.495075979662197e-5,8.600964247263456e-8,0.00485465803028982,-4.497849770452831e-5,8.6069040778254e-8,0.00485501203358417,-4.493206747983682e-5,8.594850455856457e-8,0.00485534568228858,-4.481608527441229e-5,8.565974574854902e-8,0.004855636618776108,-4.464461889212684e-5,8.523726941055656e-8,0.004855868536584048,-4.4439150233652795e-5,8.473347207406128e-8,0.0048560330722339125,-4.422617519806977e-5,8.421282174134603e-8,0.004856131296365982,-4.4034205116743515e-5,8.374453608584602e-8,0.004856174444895931,-4.389004599187381e-5,8.339349699528367e-8,0.004856183359155293,-4.381463425405478e-5,8.321012126246628e-8,0.004856186304500604,-4.381908244061987e-5,8.322079181766202e-8,0.0048562152009108475,-4.3901681750652377e-5,8.342065742125228e-8,0.004856300584346492,-4.4046572784289005e-5,8.37705159905011e-8,0.004856465867596215,-4.422466583704176e-5,8.419918887759595e-8,0.004856721671702306,-4.439714167069116e-5,8.46121777512187e-8,0.004857061176355107,-4.452169624559631e-5,8.490696041970339e-8,0.004857457829840346,-4.456149265628484e-5,8.499476400738042e-8,0.00485786732258919,-4.4495941699599566e-5,8.482662558070934e-8,0.0048582357611451545,-4.433064375541632e-5,8.44172762033907e-8,0.004858514335168011,-4.4101716857274364e-5,8.385533918607352e-8,0.004858676764439197,-4.386931833014717e-5,8.32873433067394e-8,0.004858731337204977,-4.369916734671689e-5,8.287271910808891e-8,0.004858719353578516,-4.363884359422422e-5,8.272626402178683e-8,0.004858699079100403,-4.370113971203409e-5,8.287790899006382e-8,0.004858723862983524,-4.3863152455982114e-5,8.32708541147057e-8,0.004858826040038608,-4.4079389942548624e-5,8.379377681762571e-8,0.00485901243298159,-4.429951477497208e-5,8.432416681478761e-8,0.004859269289883763,-4.448198863401187e-5,8.476146671893096e-8,0.004859570954995191,-4.460045524794661e-5,8.504236029963514e-8,0.004859887795941977,-4.464428204949593e-5,8.514179476144743e-8,0.004860191622124641,-4.461614115330714e-5,8.506688634502332e-8,0.004860458789785439,-4.452889224023546e-5,8.48492775788132e-8,0.004860671945597038,-4.440278682495274e-5,8.453839235720549e-8,0.004860821241729715,-4.426305156165498e-5,8.419563819915824e-8,0.004860905419245433,-4.4137473414217795e-5,8.388856225560573e-8,0.004860932724572903,-4.405349915154474e-5,8.368376120026044e-8,0.004860921196088654,-4.403452027360999e-5,8.363778704610134e-8,0.004860897562807879,-4.4095524083173727e-5,8.378654746993848e-8,0.004860894101884112,-4.4238943389541296e-5,8.413526183041853e-8,0.0048609433408634845,-4.4451997534014956e-5,8.465211854456047e-8,0.004861071294856948,-4.470688491827875e-5,8.526891053304732e-8,0.004861290736213975,-4.4964675805282034e-5,8.589067031036176e-8,0.004861596402411748,-4.518269904195639e-5,8.641375721967553e-8,0.00486196380325942,-4.5324110154403064e-5,8.674916232953769e-8,0.0048623525742310615,-4.536760086172835e-5,8.684603658726279e-8,0.004862714420798966,-4.531482706925229e-5,8.670954354944289e-8,0.004863004623796651,-4.519303097661249e-5,8.640693812132527e-8,0.004863194723425296,-4.505076964306804e-5,8.605688184505726e-8,0.0048632825102846704,-4.494612337857568e-5,8.58005774809639e-8,0.004863294732214557,-4.492967036023607e-5,8.576036145889535e-8,0.004863279646140609,-4.50281209417457e-5,8.600009804265731e-8,0.004863291238192513,-4.5235972657266385e-5,8.650521261792416e-8,0.004863371875000471,-4.5519265521149334e-5,8.719217023603693e-8,0.004863541092600532,-4.5828989880735264e-5,8.794132978880563e-8,0.0048637941431590335,-4.611699389480268e-5,8.863570335939151e-8,0.004864108348633099,-4.6347665140982225e-5,8.918925654220265e-8,0.00486445241548828,-4.650270904600831e-5,8.95582979767788e-8,0.0048647945683711405,-4.658026758675538e-5,8.973908538631549e-8,0.004865107760312099,-4.659122884457311e-5,8.975868058567857e-8,0.004865372216069882,-4.655509521210519e-5,8.966485595145175e-8,0.004865576369720018,-4.649651590121914e-5,8.95177115085765e-8,0.004865717179949249,-4.644257685804242e-5,8.938315205316097e-8,0.004865800395588709,-4.642041241650156e-5,8.932709842864613e-8,0.004865840829426269,-4.6454505120622764e-5,8.940887781848442e-8,0.004865862139653059,-4.656317873149144e-5,8.967262906616372e-8,0.00486589520436499,-4.675433988431925e-5,9.013692766243163e-8,0.00486597415698355,-4.7021367342236717e-5,9.07848659725663e-8,0.004866129742279287,-4.7340909048838094e-5,9.15588685419079e-8,0.004866380968437412,-4.7674714425056845e-5,9.236536298478788e-8,0.004866727661902241,-4.797676853483728e-5,9.309231162293983e-8,0.004867147324684734,-4.8204752728047944e-5,9.363717379329655e-8,0.004867598631309231,-4.833237436364809e-5,9.393686151571851e-8,0.00486803127888161,-4.835807099496604e-5,9.398874966956663e-8,0.004868399226752945,-4.8306738611208255e-5,9.385460419655338e-8,0.0048686730911499205,-4.8223736532853264e-5,9.364566598366033e-8,0.004868847969216985,-4.816304071077976e-5,9.349354754634237e-8,0.0048689445715649204,-4.817300077705271e-5,9.351546946352385e-8,0.004869003383995121,-4.8283613222312364e-5,9.378341924616291e-8,0.004869073380924081,-4.849890638879081e-5,9.43059380023238e-8,0.0048691985524858695,-4.8796843985408144e-5,9.50282614209952e-8,0.004869406558763143,-4.9136789945777165e-5,9.585077822881535e-8,0.0048697031730176215,-4.947169627205198e-5,9.665881714263925e-8,0.004870073718317038,-4.9760441298475204e-5,9.735263346838005e-8,0.004870489786100687,-4.9976304469416066e-5,9.786787764373727e-8,0.004870917867218918,-5.010990840288102e-5,9.818254906626896e-8,0.004871326805083185,-5.016747905294032e-5,9.831256717497081e-8,0.004871692531052498,-5.016661596207553e-5,9.830134495028733e-8,0.004872000142688164,-5.0131652452055496e-5,9.820844897666668e-8,0.004872244237261572,-5.008976155652556e-5,9.810014547881626e-8,0.004872428488982316,-5.0068019068499616e-5,9.804229692860984e-8,0.004872565118915182,-5.0091037618228904e-5,9.809461966944169e-8,0.0048726744092658725,-5.017854275436142e-5,9.830475483883204e-8,0.004872783856378547,-5.034234927557437e-5,9.870086948139556e-8,0.00487292606572329,-5.058265619676878e-5,9.928265588588883e-8,0.0048731343054660824,-5.0884445663438285e-5,1.0001269113882292e-7,0.004873435129492483,-5.1215919899950034e-5,1.0081284930929764e-7,0.0048738390660209,-5.153170034332811e-5,1.015723136253397e-7,0.004874332805219763,-5.178266204412348e-5,1.0217165527867006e-7,0.004874877889632444,-5.1930947916088274e-5,1.0251939608479708e-7,0.004875419222669628,-5.196437324983978e-5,1.0258697726965176e-7,0.004875901546822159,-5.190279042143044e-5,1.0242405238386324e-7,0.004876286929160504,-5.179247995187442e-5,1.0214451691172397e-7,0.004876565554442809,-5.1691121210262656e-5,1.0188954108256096e-7,0.004876756238178176,-5.165032541885692e-5,1.0178476106510073e-7,0.004876898311797196,-5.170234825273362e-5,1.0190790776405611e-7,0.004877039291090606,-5.185415619525043e-5,1.0227463542533915e-7,0.004877222603926023,-5.20886997024062e-5,1.0284205932149231e-7,0.004877478233490123,-5.237148471881915e-5,1.0352515418660084e-7,0.004877817707882309,-5.2659998699574115e-5,1.0421992098956346e-7,0.004878233764547773,-5.291357147653802e-5,1.0482740644614637e-7,0.004878704103850562,-5.310151400306657e-5,1.0527339067231532e-7,0.0048791978095219886,-5.3207947753445196e-5,1.0551996632875121e-7,0.004879682486508378,-5.323275948828798e-5,1.055676880907866e-7,0.0048801303140343175,-5.318929968967715e-5,1.0544982140066945e-7,0.004880521970866183,-5.3100190207577814e-5,1.0522202640813102e-7,0.004880848294653186,-5.299267897057388e-5,1.0495098947741473e-7,0.0048811102117961675,-5.289457264711433e-5,1.0470451475918726e-7,0.004881317747189281,-5.2831136722353006e-5,1.045440020638691e-7,0.004881488756100408,-5.282274765893747e-5,1.0451875219165502e-7,0.004881647595748994,-5.2882791831743e-5,1.0466084584560046e-7,0.004881823499265498,-5.301535663747745e-5,1.0497951455693293e-7,0.004882047968987757,-5.321257874700818e-5,1.0545473459947656e-7,0.004882350207115018,-5.34522364381064e-5,1.0603152097503244e-7,0.004882749931583773,-5.3697319596594616e-5,1.0661911602920183e-7,0.004883248411975124,-5.390029444311228e-5,1.0710159048430002e-7,0.004883821223283848,-5.40142565780382e-5,1.0736509452548331e-7,0.004884418535029374,-5.400964585550486e-5,1.07338516263783e-7,0.004884977331862179,-5.388945231346987e-5,1.0703038492932809e-7,0.004885442982784979,-5.369291520334631e-5,1.0653767571805211e-7,0.0048857896031786405,-5.348285896525935e-5,1.060146273029446e-7,0.004886027899428079,-5.33225701704739e-5,1.0561598542362421e-7,0.004886197488183362,-5.3254761974328e-5,1.0544546399226637e-7,0.004886350220054461,-5.329186339414478e-5,1.0553216327134056e-7,0.00488653376420074,-5.341832436145469e-5,1.058366269418165e-7,0.004886780973520583,-5.3599972431194304e-5,1.0627419538425782e-7,0.004887105836022719,-5.379505921217329e-5,1.0674231474866518e-7,0.00488750437159898,-5.3963749688183614e-5,1.071437647657893e-7,0.004887958428542934,-5.4074868096297026e-5,1.074029666188478e-7,0.004888440866556042,-5.410987220354813e-5,1.0747544257958971e-7,0.004888921197063378,-5.406429862465683e-5,1.0735113586693954e-7,0.004889370931079509,-5.3946902121682926e-5,1.0705217492870693e-7,0.004889767913025726,-5.377692855867965e-5,1.0662613496775146e-7,0.004890099148351,-5.3580229669963764e-5,1.0613649899040003e-7,0.0048903619623596834,-5.3384985707783635e-5,1.0565218481282615e-7,0.004890563646224889,-5.321774155887791e-5,1.0523787065252472e-7,0.004890720050330306,-5.310023848256073e-5,1.0494629332969267e-7,0.00489085365033552,-5.304708763981897e-5,1.0481260896297154e-7,0.004890991351657461,-5.306401912048959e-5,1.0485014474108545e-7]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json new file mode 100644 index 0000000..9767b1b --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":3000,"numberOfSamples":1000,"samples":[-0.0016674126654346861,-5.729007527752374e-7,-1.4186514962201376e-8,-0.0016673064653587321,-6.734015165127343e-7,-1.4270276706700349e-8,-0.0016671184978181936,-7.942288639572809e-7,-1.4371055120518062e-8,-0.0016668581653082658,-8.937549802808163e-7,-1.4454094104781238e-8,-0.0016665462863460693,-9.416288807763305e-7,-1.4494058993362982e-8,-0.0016662092022260732,-9.201664606449159e-7,-1.4476216298494372e-8,-0.0016658745541862263,-8.237755484396502e-7,-1.4395945891238539e-8,-0.0016655683268689287,-6.578186550518726e-7,-1.4257765362438796e-8,-0.0016653124526036561,-4.3741842925891825e-7,-1.4074304544820363e-8,-0.0016651224530400707,-1.8607276082775895e-7,-1.3865132894139859e-8,-0.0016650049642489826,6.643303169026634e-8,-1.3655018765663274e-8,-0.0016649554928538104,2.8739437967418395e-7,-1.347113935991257e-8,-0.0016649572160637774,4.4604795424859426e-7,-1.3339056817593825e-8,-0.0016649817855313575,5.194876808583452e-7,-1.3277813795917761e-8,-0.0016649928181043465,4.985157505581373e-7,-1.329507262967021e-8,-0.00166495207648607,3.9179414860133283e-7,-1.3383654246342673e-8,-0.0016648274069321705,2.26664827416035e-7,-1.352084347660865e-8,-0.001664600739494372,4.5708357821865315e-8,-1.367124421905444e-8,-0.001664274219706894,-1.0088239670451744e-7,-1.3793127784445051e-8,-0.0016638726869829803,-1.6616023108150796e-7,-1.3847473701249546e-8,-0.0016634410124484337,-1.1869904209770958e-7,-1.3808176255662588e-8,-0.0016630354517974334,4.659577780072841e-8,-1.3671009811639623e-8,-0.001662709627560605,3.030262655914423e-7,-1.3458136463059741e-8,-0.0016624982880314673,5.958730436677693e-7,-1.3214963229037875e-8,-0.001662404794976831,8.568537842964569e-7,-1.2998163907749735e-8,-0.0016623988702162175,1.0254972177202318e-6,-1.2857973826241794e-8,-0.0016624271346917532,1.0685455003698803e-6,-1.2822084766277138e-8,-0.0016624319248438782,9.883600460942418e-7,-1.2888614390257493e-8,-0.001662369242835807,8.174787260993229e-7,-1.3030565315055226e-8,-0.0016622183938909184,6.041843871353809e-7,-1.3207794337616674e-8,-0.0016619818565370786,3.9717316279278375e-7,-1.3379782718210806e-8,-0.0016616789185444716,2.3502260822879676e-7,-1.3514435597222689e-8,-0.0016613377123989804,1.417265131744283e-7,-1.3591822041815075e-8,-0.0016609886089808544,1.2662367606576446e-7,-1.360423147824086e-8,-0.0016606598282278315,1.863922842656112e-7,-1.3554490273298172e-8,-0.0016603748199426104,3.0744517886406376e-7,-1.3453938412913645e-8,-0.0016601505255394024,4.680421085231016e-7,-1.3320649411749458e-8,-0.0016599957713533597,6.402384067973255e-7,-1.3177803860265977e-8,-0.0016599094977454972,7.922656339357963e-7,-1.3051723165875262e-8,-0.0016598791098382528,8.920717595398815e-7,-1.296895475612751e-8,-0.0016598798337515695,9.124839151887528e-7,-1.2952012505708826e-8,-0.001659876379622952,8.376861160842476e-7,-1.3014014454721298e-8,-0.0016598280484381447,6.695105801256583e-7,-1.3153456420237919e-8,-0.0016596973256014155,4.309782162426044e-7,-1.3351256087288848e-8,-0.001659460185844518,1.644717783767708e-7,-1.3572258355341262e-8,-0.0016591147270322442,-7.656124715275952e-8,-1.3772130406953462e-8,-0.0016586845140589572,-2.408327142852044e-7,-1.3908356700286018e-8,-0.0016582146152118225,-2.934361433791715e-7,-1.3952042824758485e-8,-0.0016577609941446497,-2.2641155822799227e-7,-1.3896646268225657e-8,-0.0016573762399432718,-6.21980795145008e-8,-1.3760786009222337e-8,-0.0016570956693766155,1.5125835864904947e-7,-1.3584155440668849e-8,-0.0016569277304044742,3.526938844470182e-7,-1.3417439166449944e-8,-0.0016568517179810498,4.838995413033776e-7,-1.3308801583491872e-8,-0.0016568239567060939,5.055051370474298e-7,-1.329085416886814e-8,-0.0016567907846579653,4.069873023778711e-7,-1.3372361772156796e-8,-0.0016567038867919353,2.0748592272561992e-7,-1.3537525963856996e-8,-0.001656532487673912,-5.231661404744325e-8,-1.375267653077842e-8,-0.0016562685745488837,-3.2332365832738283e-7,-1.3977143471321514e-8,-0.0016559247754694372,-5.607837026808751e-7,-1.4173848477561865e-8,-0.0016555275418913935,-7.327632792039998e-7,-1.4316343411791168e-8,-0.0016551092006448183,-8.233258722118555e-7,-1.4391445802169112e-8,-0.0016547013993568505,-8.316848376668471e-7,-1.439852456672699e-8,-0.0016543308264849162,-7.693391900307951e-7,-1.4347111821174578e-8,-0.0016540168884855639,-6.568154472154755e-7,-1.4254194224863743e-8,-0.00165377050241833,-5.208100635030763e-7,-1.4141844859881727e-8,-0.001653593196269087,-3.917048152325665e-7,-1.4035172614624135e-8,-0.001653476129350162,-3.0088888763530243e-7,-1.3960118899539777e-8,-0.0016533992421155022,-2.7714172882948965e-7,-1.3940479436687606e-8,-0.0016533313967630901,-3.4151069511884616e-7,-1.3993675666328718e-8,-0.001653232946576946,-5.008677652271779e-7,-1.4125420729844042e-8,-0.001653062183142646,-7.418000865678651e-7,-1.4324648124704472e-8,-0.0016527858361718897,-1.0281008249946432e-6,-1.456142157572885e-8,-0.0016523911376223348,-1.305464686483764e-6,-1.4790826634502255e-8,-0.0016518942603108112,-1.5146795210217696e-6,-1.4963914427081036e-8,-0.001651339688429203,-1.609920243457309e-6,-1.5042853245080335e-8,-0.0016507887609035258,-1.5746267527137686e-6,-1.501402985970417e-8,-0.0016503014049699613,-1.4275884845194972e-6,-1.4893009020259092e-8,-0.0016499186673924447,-1.2167625516751627e-6,-1.4719368976416159e-8,-0.0016496525262988243,-1.0042695210536724e-6,-1.4544312694847968e-8,-0.0016494852722868205,-8.488903215522008e-7,-1.4416272286595473e-8,-0.0016493768933366411,-7.916520763817829e-7,-1.4369068693422452e-8,-0.0016492770441696662,-8.477319335831267e-7,-1.441525088113211e-8,-0.0016491379089976894,-1.005586142802875e-6,-1.454535921366001e-8,-0.0016489247906258263,-1.2324077723442385e-6,-1.4732398295614608e-8,-0.0016486222435663186,-1.483745124523919e-6,-1.4939753931208416e-8,-0.0016482349077829455,-1.714387062746813e-6,-1.5130169934377415e-8,-0.0016477837047942081,-1.8876251196414704e-6,-1.5273388453025773e-8,-0.0016472992687706423,-1.9809318567924716e-6,-1.53508288088995e-8,-0.0016468148667739665,-1.987610693939075e-6,-1.5356941194346824e-8,-0.0016463605427636564,-1.915263460295526e-6,-1.529794271457019e-8,-0.0016459592556230336,-1.7824940981911972e-6,-1.5189110139549575e-8,-0.0016456248820582223,-1.6151699815473968e-6,-1.5051713360546717e-8,-0.0016453614347904178,-1.4430148462818047e-6,-1.4910218742385646e-8,-0.0016451628120618224,-1.2966201405178637e-6,-1.4789829372760213e-8,-0.0016450127057533186,-1.2044728826030512e-6,-1.4714032583746818e-8,-0.0016448847709624051,-1.1893868953393184e-6,-1.4701653351213367e-8,-0.0016447437874436506,-1.2638103881750775e-6,-1.4762980827432679e-8,-0.0016445491773054968,-1.4241708565546202e-6,-1.48951005064794e-8,-0.0016442623193067107,-1.645902905672155e-6,-1.5077791633897704e-8,-0.0016438578535539828,-1.8825890625995552e-6,-1.5272828105373147e-8,-0.0016433361724119703,-2.073293524915233e-6,-1.5430051194420875e-8,-0.0016427306855190664,-2.1595591992381907e-6,-1.5501400836018825e-8,-0.0016421028587470339,-2.107131410238427e-6,-1.545878784662949e-8,-0.0016415236596336047,-1.921503495197351e-6,-1.5306805835881395e-8,-0.0016410491716874508,-1.6475995048951014e-6,-1.508237666232406e-8,-0.0016407026930217476,-1.3532595827599134e-6,-1.4841150585489634e-8,-0.0016404710798181709,-1.1058220927750292e-6,-1.4638324030823384e-8,-0.0016403140434198668,-9.529880693486804e-7,-1.4513000663883932e-8,-0.0016401794241349037,-9.138189075949228e-7,-1.4480834585139251e-8,-0.001640017698453548,-9.79444485492997e-7,-1.4534599598191043e-8,-0.0016397921504842823,-1.1199629554508742e-6,-1.46498259445195e-8,-0.001639483962540219,-1.2938873374757163e-6,-1.4792536911725107e-8,-0.0016390929025693608,-1.4576102121358978e-6,-1.492701055511908e-8,-0.0016386346780947172,-1.5734220969873702e-6,-1.5022352898574618e-8,-0.0016381360741017184,-1.615194314249089e-6,-1.50571474431728e-8,-0.0016376290513289884,-1.5712506992188948e-6,-1.502179647791281e-8,-0.0016371449438908516,-1.4444928408342774e-6,-1.4918620999811586e-8,-0.0016367096648583616,-1.25031555175269e-6,-1.4760165902237422e-8,-0.0016363404739891797,-1.0131188796195411e-6,-1.4566365366279228e-8,-0.0016360443826047542,-7.623240043753878e-7,-1.4361298196704363e-8,-0.0016358178081207191,-5.285826195157557e-7,-1.4170084868955413e-8,-0.0016356469788772767,-3.4036970890659786e-7,-1.4016082203265821e-8,-0.001635508814606122,-2.207663722595964e-7,-1.3918227118982464e-8,-0.0016353723164385856,-1.840892669518823e-7,-1.3888261221685396e-8,-0.0016352009622329746,-2.3204470491520787e-7,-1.3927578205263703e-8,-0.0016349571713373055,-3.4963943026521634e-7,-1.4023883873503605e-8,-0.0016346099310555375,-5.023932688054426e-7,-1.4148931817790818e-8,-0.0016341454885156152,-6.3792299560969e-7,-1.4259849140121573e-8,-0.0016335782650784292,-6.955174267981529e-7,-1.4307009536395608e-8,-0.0016329555381133835,-6.248455078933967e-7,-1.4249353069369657e-8,-0.001632348566823429,-4.0811994916454653e-7,-1.4072462495238987e-8,-0.0016318292392897165,-7.307325909948915e-8,-1.3799065103672127e-8,-0.0016314426223732346,3.1411804635436726e-7,-1.348317422928833e-8,-0.0016311911484804568,6.740899862647185e-7,-1.3189486706427881e-8,-0.0016310385568320672,9.431757478148973e-7,-1.2969887537649966e-8,-0.0016309281956906096,1.0909595365989285e-6,-1.284917620325891e-8,-0.0016308035869936743,1.1218851358131656e-6,-1.2823744428951683e-8,-0.001630622539391083,1.0659851233981184e-6,-1.286910999649688e-8,-0.0016303628898681499,9.662126791094569e-7,-1.2950244535657924e-8,-0.0016300220532569065,8.673019924964457e-7,-1.303067628890683e-8,-0.0016296132995635643,8.078877149326865e-7,-1.3078931636879651e-8,-0.001629160810966706,8.157006448712503e-7,-1.3072446478192921e-8,-0.0016286945140845575,9.051596921306019e-7,-1.2999506114425888e-8,-0.001628245126395128,1.0769022975441644e-6,-1.285960415768863e-8,-0.0016278397306271277,1.3189544201936767e-6,-1.266248230864526e-8,-0.001627498165347806,1.6092434451098838e-6,-1.2426094284497363e-8,-0.0016272305284777825,1.919140067868813e-6,-1.2173739988352222e-8,-0.0016270360259148394,2.2175661941671596e-6,-1.1930728972988056e-8,-0.0016269031154630333,2.475096567993343e-6,-1.1721030329836182e-8,-0.0016268106690123906,2.6677037698851066e-6,-1.1564201830643506e-8,-0.0016267299509751117,2.7800877693262435e-6,-1.1472661493037969e-8,-0.0016266273869119789,2.808609891480967e-6,-1.1449301618478332e-8,-0.0016264683188791577,2.7638226285538478e-6,-1.148545475645509e-8,-0.001626222281076474,2.6722456015579204e-6,-1.1559486532781036e-8,-0.0016258702666007566,2.576093825543154e-6,-1.1637054006801947e-8,-0.001625413368763386,2.528652681956703e-6,-1.1674892793466553e-8,-0.0016248800163113045,2.5829769218688514e-6,-1.163000825805575e-8,-0.0016243264182511817,2.7739410660516134e-6,-1.147422855629942e-8,-0.001623824448257784,3.0994362029174313e-6,-1.1209399713251122e-8,-0.0016234371005962335,3.5125193005639037e-6,-1.0873674286989874e-8,-0.0016231924460283597,3.934280626806754e-6,-1.0531046713794774e-8,-0.0016230722116879442,4.2839261521980505e-6,-1.0247004462157263e-8,-0.0016230223920017024,4.509022315061528e-6,-1.0064052989792204e-8,-0.001622977701628644,4.599308318664541e-6,-9.990503166746648e-9,-0.0016228844735368534,4.580979504172208e-6,-1.0005062897292258e-8,-0.0016227124043607017,4.500425340947215e-6,-1.007001881606373e-8,-0.0016224552660553113,4.4079367639713336E-06,-1.0144494972609784e-8,-0.001622125516269599,4.346659224530802e-6,-1.0193467505461069e-8,-0.001621747326018003,4.347159211571133e-6,-1.0192193851439426e-8,-0.001621350394160166,4.425844840376646e-6,-1.0127472727933714e-8,-0.0016209651093993971,4.585398795260131e-6,-9.99724721593909e-9,-0.001620618755614523,4.816205832030953e-6,-9.809405621898151e-9,-0.0016203324293711152,5.0984795936064065e-6,-9.580037457445881e-9,-0.0016201185778446112,5.4050620808012625e-6,-9.331168050521922e-9,-0.0016199792751218015,5.7049341968223675e-6,-9.087925536625024e-9,-0.0016199055449921847,5.967355112173079e-6,-8.875191668941198e-9,-0.0016198780222882233,6.166231880713312e-6,-8.714053321567563e-9,-0.0016198689897785872,6.284171358720325e-6,-8.618507598772804e-9,-0.0016198456428020592,6.315766071306402e-6,-8.59280112903386e-9,-0.001619774385405621,6.26973000154361e-6,-8.629727496350617e-9,-0.0016196259296935819,6.169525357590731e-6,-8.710169915500509e-9,-0.0016193810015156772,6.052090182629365e-6,-8.804188184311565e-9,-0.0016190363271137104,5.963922429773775e-6,-8.87422587160706e-9,-0.0016186098081281857,5.953407381087274e-6,-8.88131796854117e-9,-0.0016181424573248472,6.058817784323751e-6,-8.794748910421731e-9,-0.0016176935536342239,6.293589642068541e-6,-8.60386918296675e-9,-0.001617326219104022,6.634329004002173e-6,-8.327694536227654e-9,-0.0016170853930605306,7.020289243504353e-6,-8.015286175478002e-9,-0.0016169778930223832,7.370415677596483e-6,-7.732028934152944e-9,-0.0016169675000937544,7.6131522800298654E-06,-7.535643904942126e-9,-0.0016169901136538418,7.713155380487486e-6,-7.454642010804234e-9,-0.0016169800837689205,7.679978347262525e-6,-7.481256003272846e-9,-0.0016168922572558102,7.556948303108508e-6,-7.580374851378752e-9,-0.0016167104555515727,7.400752728903742e-6,-7.706059646917471e-9,-0.0016164437683271215,7.26360821746386e-6,-7.816027752541982e-9,-0.0016161173530747812,7.183346466944154e-6,-7.879724076888564e-9,-0.0016157633104902577,7.180632707092512e-6,-7.880570755501255e-9,-0.0016154140207041772,7.260286490250837e-6,-7.814851788477083e-9,-0.001615098001463881,7.414069548772224e-6,-7.689396067402687e-9,-0.001614837378113596,7.623584166153096e-6,-7.519187049980965e-9,-0.0016146461104334338,7.863038966555796e-6,-7.325110558075486e-9,-0.0016145285922477045,8.102151822196889e-6,-7.13161729702838e-9,-0.0016144786655525626,8.30954750461279e-6,-6.963995681741373e-9,-0.0016144794389958994,8.456851025280304e-6,-6.8450772368244266e-9,-0.0016145044863076245,8.523247037034214e-6,-6.791555454796449e-9,-0.0016145208238440725,8.499790759989043e-6,-6.810504300559879e-9,-0.0016144936330299336,8.392510891781708e-6,-6.896885929710203e-9,-0.001614392228170857,8.223343280763281e-6,-7.032834909617165e-9,-0.0016141963521061268,8.028183732838383e-6,-7.189288356946133e-9,-0.0016139016436967962,7.851860839942969e-6,-7.330101133146092e-9,-0.0016135231106711163,7.740313336524296e-6,-7.4183830864822594e-9,-0.0016130954016894184,7.730606125699386e-6,-7.424519615650904e-9,-0.0016126685428214326,7.840105042654435e-6,-7.334806831697677e-9,-0.0016122981087462733,8.057474208610399e-6,-7.1585873366644e-9,-0.0016120303080747725,8.339676729142519e-6,-6.930579850289531e-9,-0.001611885615787256,8.619402313112867e-6,-6.704899178695777e-9,-0.0016118481928508355,8.824139607217275e-6,-6.539785116730204e-9,-0.001611868604140801,8.90107812285037e-6,-6.477642765675682e-9,-0.001611881154272387,8.835912981377337e-6,-6.529915716142489e-9,-0.0016118277460059921,8.655388821984905e-6,-6.674986610903632e-9,-0.001611675919713035,8.41338736769802e-6,-6.869352972909047e-9,-0.0016114237381993468,8.169993921702883e-6,-7.06452679210035e-9,-0.001611093177231819,7.974354515474472e-6,-7.220908293079042e-9,-0.0016107187721478148,7.856385780125358e-6,-7.3144902295771e-9,-0.0016103373933631776,7.826230747315016e-6,-7.33726541883732e-9,-0.0016099815773490676,7.877830737849756e-6,-7.294288237410739e-9,-0.0016096761674665666,7.993507370107692e-6,-7.199928950656389e-9,-0.0016094369744081014,8.147984768505116e-6,-7.074608444117655e-9,-0.0016092702451640983,8.311598200694667e-6,-6.942216930039938e-9,-0.00160917228355665,8.453152537768642e-6,-6.827830668858108e-9,-0.001609129179254943,8.543077992903146e-6,-6.755189047281374e-9,-0.0016091171262881026,8.557333011262786e-6,-6.743558851885236e-9,-0.0016091041391435737,8.481979668330493e-6,-6.804049103358642e-9,-0.0016090539129368906,8.317618601666572e-6,-6.9360391917084e-9,-0.0016089320065604345,8.082194724983374e-6,-7.1249350615802805e-9,-0.0016087135318696238,7.810443188597418e-6,-7.342654995567478e-9,-0.0016083904469439763,7.548814847622212e-6,-7.551773316743061e-9,-0.0016079759933311404,7.346151109873746e-6,-7.71307892483668e-9,-0.0016075042761180575,7.242056143792723e-6,-7.794939036152872e-9,-0.00160702430711951,7.255973870729432e-6,-7.782022387653911e-9,-0.0016065893832426634,7.380066935880531e-6,-7.680904798184895e-9,-0.0016062439692449664,7.578337494266571e-6,-7.520654677956422e-9,-0.0016060111996290365,7.793284040925081e-6,-7.347429731587253e-9,-0.001605884722251656,7.959699219668078e-6,-7.2134347447406345e-9,-0.0016058284903456366,8.02276170190471e-6,-7.162490523129645e-9,-0.001605786300256652,7.954794950983538e-6,-7.216659725347376e-9,-0.0016056989183379042,7.763856680531235e-6,-7.3693711382787e-9,-0.0016055223349501092,7.489910937153623e-6,-7.5884774454684e-9,-0.0016052394922760655,7.190282869697641e-6,-7.827929734487749e-9,-0.0016048613732839356,6.9214213509586415e-6,-8.042440056461898e-9,-0.0016044191014809085,6.724717813606781e-6,-8.19887721405118e-9,-0.0016039523942876091,6.620315668122966e-6,-8.281210552001504e-9,-0.0016034994404368291,6.608103489245576e-6,-8.289661775609236e-9,-0.00160309058100955,6.672612775449543e-6,-8.236730302719379e-9,-0.0016027456251598608,6.788717605477168e-6,-8.142605180973005e-9,-0.0016024734564696638,6.92643298585074e-6,-8.031328805630021e-9,-0.001602272562723833,7.054461000471735e-6,-7.927975303945096e-9,-0.0016021316395473646,7.1429733909865235e-6,-7.85643420942448e-9,-0.001602030096147785,7.166416618010949e-6,-7.837159326460504e-9,-0.0016019389325304322,7.106967943498292e-6,-7.884384590805072e-9,-0.001601822909317285,6.958748005321464e-6,-8.002733282683978e-9,-0.001601645025670833,6.732028706082511e-6,-8.183846196126166e-9,-0.0016013737843991493,6.455595568760507e-6,-8.404514185145453e-9,-0.0016009923060795966,6.174736476004758e-6,-8.628343547216521e-9,-0.0016005063926833,5.943025935706647e-6,-8.81240660038963e-9,-0.001599947436018963,5.80863970378304e-6,-8.918249717289788e-9,-0.0015993671346443959,5.799343297164342e-6,-8.923895711975885e-9,-0.001598824450917896,5.912206177088279e-6,-8.831981049727163e-9,-0.0015983691261643967,6.112691262219383e-6,-8.670353040535608e-9,-0.001598027750726865,6.34370842368762e-6,-8.484735141405814e-9,-0.001597796970333321,6.541210365541908e-6,-8.32624668865039e-9,-0.0015976453400901444,6.6511270032490696e-6,-8.237927113772566e-9,-0.0015975225826418882,6.642865882163979e-6,-8.244027233433758e-9,-0.0015973733172837778,6.5160674645092064e-6,-8.344671256899067e-9,-0.0015971514460371861,6.299134854850162e-6,-8.517063826659138e-9,-0.0015968312197721644,6.040236787256278e-6,-8.722695998097968e-9,-0.0015964119337554,5.793741677183589e-6,-8.918192024461737e-9,-0.0015959153524303371,5.606512708157547e-6,-9.066246268690955e-9,-0.0015953776009036073,5.508240931702783e-6,-9.143302312759663e-9,-0.0015948390145066778,5.5079279870896205e-6,-9.142302190616902e-9,-0.0015943353730508711,5.595937570596819e-6,-9.07100224242127E-09,-0.0015938924112206762,5.749295724445448e-6,-8.947734194601513e-9,-0.0015935237022038366,5.937745603497693e-6,-8.796600268425784e-9,-0.0015932308952599915,6.128923308494835e-6,-8.643381449495809e-9,-0.0015930050349990598,6.292138592490837e-6,-8.512542405787741e-9,-0.0015928280496299403,6.401112560124816e-6,-8.425039499555748e-9,-0.001592674118163697,6.436402325511549e-6,-8.396358552439093e-9,-0.001592511242825915,6.388162226916735e-6,-8.434284847973138e-9,-0.0015923038548076277,6.259479463662382e-6,-8.536238644079333e-9,-0.0015920175360308354,6.069704190545227e-6,-8.686647143544019e-9,-0.0015916265581974022,5.855945053772369e-6,-8.855809836079169e-9,-0.0015911234432686942,5.66982094337028e-6,-9.002557749844637e-9,-0.0015905271902137126,5.566980643098267e-6,-9.082660120678599e-9,-0.0015898846649755427,5.5901058549402035e-6,-9.062364074658102e-9,-0.0015892607401442954,5.751420421663427e-6,-8.932240034166934e-9,-0.0015887185141690312,6.0241142294602755e-6,-8.713870498328418e-9,-0.0015882979764191441,6.3490168297115175e-6,-8.454426383873467e-9,-0.0015880035039804617,6.654182728757788e-6,-8.211064945180594e-9,-0.0015878052699886624,6.877775058584288e-6,-8.032786882775957e-9,-0.0015876517590710897,6.984489838970192e-6,-7.947450754328946e-9,-0.0015874863779336544,6.971221701182685e-6,-7.957325293941682e-9,-0.0015872619917445506,6.863185748489404e-6,-8.042215733171648e-9,-0.0015869502414554443,6.704200258300083e-6,-8.167230467721707e-9,-0.0015865450265327885,6.544861833301743e-6,-8.292209810873044e-9,-0.001586060881771174,6.431419708027262e-6,-8.380562643969391e-9,-0.0015855275390838218,6.397223103243651e-6,-8.4060105625722e-9,-0.001584982293378186,6.457920516330214e-6,-8.356321717507075e-9,-0.0015844620349776742,6.61081898948137e-6,-8.233749425801078e-9,-0.0015839966677754043,6.837813403661317e-6,-8.052680242552925e-9,-0.0015836049744388627,7.110512974486875e-6,-7.83558877254055e-9,-0.00158329313272495,7.39599782801762e-6,-7.60852007937778e-9,-0.0015830553572955281,7.661943418484884e-6,-7.397063210929995e-9,-0.0015828757453601038,7.88048537908479e-6,-7.223288825216026e-9,-0.0015827305073950087,8.030921094971425e-6,-7.103576255489422e-9,-0.0015825902239223386,8.10175707948008e-6,-7.046953362750228e-9,-0.0015824222470464458,8.09261347207407e-6,-7.0535751904136625e-9,-0.0015821938020142208,8.016239439311893e-6,-7.1131587433406575e-9,-0.001581876678930113,7.90023529461386e-6,-7.203688583790658e-9,-0.0015814541506088944,7.786937005316729e-6,-7.291589958387156e-9,-0.001580929437716428,7.72886735500687e-6,-7.33539011103742e-9,-0.001580332627237802,7.777305469592599e-6,-7.294769075619663e-9,-0.0015797203731629178,7.964409090283794e-6,-7.144630568893987e-9,-0.0015791630814620142,8.285391603077017e-6,-6.889058321940481e-9,-0.001578720878001717,8.692298812053108e-6,-6.566101724486824e-9,-0.001578419502984907,9.10747486170557e-6,-6.2370916464480965e-9,-0.0015782405062512823,9.452091527792786e-6,-5.9641611304561455e-9,-0.0015781312909732138,9.674079549613374e-6,-5.7882606428250385e-9,-0.001578027360075597,9.761402781761969e-6,-5.718703551331627e-9,-0.0015778737449317608,9.738155742011253e-6,-5.736256424581671e-9,-0.0015776373992268053,9.650582774239132e-6,-5.804222309092312e-9,-0.0015773098917586672,9.551555633876995e-6,-5.88077278945436e-9,-0.0015769037319662415,9.488450878456881e-6,-5.928572703455147e-9,-0.001576445875891479,9.49569390768316e-6,-5.920653078048749e-9,-0.001575970674530697,9.591327497139855e-6,-5.84304192231517e-9,-0.0015755133171369835,9.77658865659438e-6,-5.694997471322311e-9,-0.0015751042615903047,1.003778163139329e-5,-5.487458624638412e-9,-0.001574765041689377,1.0349895109118027e-5,-5.240176643150512e-9,-0.0015745057554236149,1.0681318357532525e-5,-4.978030419643896e-9,-0.001574324361526077,1.0998934195309128e-5,-4.727059345412328e-9,-0.0015742076584801335,1.1272847997949395e-5,-4.510760254880358e-9,-0.0015741334933916324,1.148015300643822e-5,-4.347106597166391e-9,-0.0015740736145208995,1.1607546540740536e-5,-4.2464524410951475e-9,-0.0015739967905234456,1.165297766004052e-5,-4.210215818202505e-9,-0.0015738721019847755,1.1626573124438477e-5,-4.230176567081147e-9,-0.0015736725816667494,1.1550994953670337e-5,-4.288272760115865e-9,-0.0015733796828682138,1.1460984868635478e-5,-4.357060355334619e-9,-0.0015729888863822469,1.1400977627530216e-5,-4.401668546947189e-9,-0.001572515654131937,1.1418948321355508e-5,-4.38465144129614e-9,-0.0015719991378984194,1.155499016771094e-5,-4.27489553861985e-9,-0.0015714991590845522,1.1825387317786e-5,-4.059992614526739e-9,-0.0015710820407434478,1.2207971645261938e-5,-3.757587705347629e-9,-0.00157079647604091,1.2639630181296142e-5,-3.4172617851035963e-9,-0.0015706506457699233,1.3034205729014649e-5,-3.106531606911105e-9,-0.0015706061696304065,1.3315507185698884e-5,-2.885049906609442e-9,-0.0015705947849098492,1.3446774868260129e-5,-2.7815199812259615e-9,-0.0015705471798354855,1.3439686701807493e-5,-2.7865797392088607e-9,-0.0015704165589056223,1.3341690442592115e-5,-2.8627232184856177e-9,-0.0015701872847721412,1.3213818456770147e-5,-2.9617956699222407e-9,-0.0015698706765883304,1.3111683729022345e-5,-3.0400379076245207e-9,-0.0015694951802119525,1.3074916344619818e-5,-3.0664473087197053e-9,-0.0015690965559719964,1.3124045477720016e-5,-3.02518922812497E-09,-0.0015687104237655423,1.3261776187223445e-5,-2.914483963298332e-9,-0.0015683672849147719,1.3476135614623932e-5,-2.744017121960997e-9,-0.001568089331561201,1.3744221248213585e-5,-2.531925583923272e-9,-0.001567888481635352,1.4036199389495978e-5,-2.301652902586154e-9,-0.0015677654444036897,1.431949385617295e-5,-2.0787019259425203e-9,-0.001567709854690696,1.4563082634763757e-5,-1.8873090716874538e-9,-0.0015677016010537767,1.474164561397543e-5,-1.7472081474154697e-9,-0.0015677133377832947,1.4839081201440235e-5,-1.6708576042155112e-9,-0.0015677139033290711,1.4850945784761677e-5,-1.6615071481920558e-9,-0.001567672273456403,1.4785614343760266e-5,-1.712298071717079e-9,-0.001567561728035762,1.4664077909571058e-5,-1.8064872373507266e-9,-0.001567363964362006,1.4518342278869283e-5,-1.9188087740274477e-9,-0.0015670730416101715,1.4388371092908044e-5,-2.017975036911366e-9,-0.001566699009351379,1.4317124795163991e-5,-2.0706086887569183e-9,-0.001566270342050259,1.434288706438812e-5,-2.0471994116831762e-9,-0.0015658331609196012,1.4488670512990482e-5,-1.9302484376469083e-9,-0.0015654445000836176,1.4750408147840926e-5,-1.72331580198987e-9,-0.0015651576376926135,1.5088818242514955e-5,-1.4572399696723894e-9,-0.0015650016611725502,1.543273520838367e-5,-1.1875289074112136e-9,-0.0015649646525930018,1.5699315031914638e-5,-9.786981777112633e-10,-0.0015649932080395524,1.5825615668091956e-5,-8.797288461446118e-10,-0.0015650127561441629,1.5794360168681763e-5,-9.039460652179229e-10,-0.0015649578766231919,1.5637909598140213e-5,-1.0258340424130335e-9,-0.0015647946888691952,1.5419919015121727e-5,-1.1953572908828253e-9,-0.001564525408102832,1.5208671664966406e-5,-1.3589165068917122e-9,-0.0015641786040441487,1.5056893076463547e-5,-1.4752664574075088e-9,-0.00156379486909857,1.4993534545273575e-5,-1.521981552315444e-9,-0.0015634150399108117,1.5024788854757072e-5,-1.4945831313107964e-9,-0.0015630731490801214,1.5139317110787819e-5,-1.4023153307767539e-9,-0.0015627932503844573,1.5314097884522007e-5,-1.2634546568637839e-9,-0.0015625884467632353,1.5519419283943223e-5,-1.1013546330723007e-9,-0.001562460875346721,1.5722949233932406e-5,-9.412785609553453e-10,-0.0015624021479970563,1.5893311969822037e-5,-8.076525173200512e-10,-0.0015623942663999986,1.600355815982286e-5,-7.213957276926135e-10,-0.0015624113087739449,1.603464562664121e-5,-6.972120092446669e-10,-0.0015624222244725121,1.5978599480086515e-5,-7.411073308205331e-10,-0.0015623947894483653,1.5840685366149302e-5,-8.486840929629714e-10,-0.0015623003825704094,1.563995164582476e-5,-1.0047498832725248e-9,-0.00156211896716867,1.5407677934949402e-5,-1.1846143530044873e-9,-0.0015618434715127026,1.5183522199556461e-5,-1.3572122413585078e-9,-0.001561482731818114,1.5009579708722523e-5,-1.4898312300154014e-9,-0.0015610623229379093,1.492287455651844e-5,-1.553978673492256e-9,-0.0015606225925568506,1.4946887881331915e-5,-1.5318866836714567e-9,-0.001560212971251659,1.5083203136375069e-5,-1.422837639342225e-9,-0.0015598818401117295,1.530556706953706e-5,-1.2475983890907835e-9,-0.0015596626235708532,1.5560011265301256e-5,-1.0482226412439358e-9,-0.001559559627593272,1.577486934926789e-5,-8.802955933378288e-10,-0.0015595405570984476,1.5881538273988095e-5,-7.9692043926817e-10,-0.0015595430360532403,1.5839771966023374e-5,-8.291538101517867e-10,-0.0015594959955338393,1.5654660779172335e-5,-9.72801001056983e-10,-0.0015593463001946208,1.5374391353418983e-5,-1.190114515735307e-9,-0.0015590762116928854,1.5069709060576866e-5,-1.4258030022227316e-9,-0.001558703847788798,1.4807611900845037e-5,-1.6276153266680996e-9,-0.0015582703547364113,1.4632787290015397e-5,-1.7608768873779355e-9,-0.00155782354477752,1.4561962806159921e-5,-1.812864234105201e-9,-0.0015574055106049006,1.4587994709651823e-5,-1.7895075593158592e-9,-0.0015570463687551211,1.4687835068240819e-5,-1.7090593224017948e-9,-0.0015567627265973315,1.4830172836249719e-5,-1.5960694700656643e-9,-0.0015565585721585488,1.4981143223910987e-5,-1.4769346528028385e-9,-0.0015564268779924705,1.5108248878273527e-5,-1.3768878228299211e-9,-0.001556351184307716,1.5183283689987646e-5,-1.3177718726983572e-9,-0.0015563071846080817,1.518499355836712e-5,-1.3159931882651027e-9,-0.001556264759061091,1.5101840586844419e-5,-1.3803631127402186e-9,-0.0015561910289953722,1.493467497760959e-5,-1.5099983155967233e-9,-0.001556054769142461,1.4698525876528096e-5,-1.692928407678446e-9,-0.0015558319325716652,1.4422419435365395e-5,-1.9062865699394374e-9,-0.00155551134062967,1.4146276673803998e-5,-2.118820791349384e-9,-0.0015550990200105716,1.3914554215767493e-5,-2.2959501362179986e-9,-0.0015546195256492723,1.376733680242155e-5,-2.406755127218841e-9,-0.001554113115567492,1.3730683214261952e-5,-2.4314473667369036e-9,-0.001553628664032215,1.3808584379673326e-5,-2.367474165297039e-9,-0.0015532132442453931,1.3978822784027847e-5,-2.232532482775318e-9,-0.0015529002123789554,1.4194626461009348e-5,-2.063117347756414e-9,-0.0015526985302697924,1.439325938164884e-5,-1.907804521574992e-9,-0.0015525869004329388,1.4511149461068737e-5,-1.8155962076796212e-9,-0.0015525163561113226,1.4502518791870292e-5,-1.821618126894051e-9,-0.0015524229966605255,1.4355340596169604e-5,-1.934861536785402e-9,-0.0015522480046320417,1.4097085782131253e-5,-2.1337720574238567e-9,-0.0015519570630758844,1.3785964147240603e-5,-2.373056019133126e-9,-0.0015515502090884452,1.3490805690072358e-5,-2.5993134735632945e-9,-0.0015510581583219735,1.3269136012428824e-5,-2.7680732374480753e-9,-0.0015505287216183647,1.3153018247135854e-5,-2.8547493909096727e-9,-0.0015500111337097319,1.3146302784594268e-5,-2.8566824400189927e-9,-0.0015495446374244918,1.3230505435768768e-5,-2.788469542937826e-9,-0.001549153320614908,1.3373991814169866e-5,-2.6747740927702085e-9,-0.0015488458317407083,1.3540368315253085e-5,-2.543818936185515e-9,-0.0015486175736199625,1.3694424215569561e-5,-2.422826603784886e-9,-0.0015484534953238353,1.3805782453544893e-5,-2.335244042665086e-9,-0.0015483305799586244,1.3851194736815257e-5,-2.2989915178837034e-9,-0.0015482199989999771,1.3816427644258473e-5,-2.3249912029369815e-9,-0.001548089463216438,1.369826171317471e-5,-2.41558809311908e-9,-0.0015479064843226234,1.3506495043573231e-5,-2.5629790637511724e-9,-0.0015476430650823826,1.3265142070830212e-5,-2.748308110889761e-9,-0.0015472817047777522,1.3011433188873347e-5,-2.9425170054115522e-9,-0.0015468215378123499,1.2791153939947237e-5,-3.1100615838046316e-9,-0.0015462823008519895,1.264978126784404e-5,-3.2158634430605283e-9,-0.0015457034820694632,1.2620793299373853e-5,-3.23437207800151e-9,-0.0015451371557708795,1.271461979911524e-5,-3.1580199349164043e-9,-0.0015446354809309358,1.2912598720449401e-5,-3.001718234269623e-9,-0.0015442364302565255,1.3169086681883902e-5,-2.801040276875315e-9,-0.0015439524938185769,1.342193894043896e-5,-2.604019123633512e-9,-0.0015437662068975597,1.3608488064402962e-5,-2.4588197532468753e-9,-0.0015436340713854192,1.3682357584886e-5,-2.4008622169249547e-9,-0.001543497962354699,1.3626252232787606e-5,-2.4430807619033354e-9,-0.00154330101649021,1.3456844397511336e-5,-2.572263294225788e-9,-0.0015430034083978895,1.3219882326718478e-5,-2.7529027871083723e-9,-0.0015425929181858147,1.2976711436722279e-5,-2.937645646025132e-9,-0.0015420866882192013,1.278670592403656e-5,-3.080856310691857e-9,-0.00154152398796979,1.2691851204048305e-5,-3.1504613502583297e-9,-0.001540953480044075,1.2708519035282108e-5,-3.1341863973903237e-9,-0.0015404202334010281,1.2827867903263539e-5,-3.039126457904035e-9,-0.0015399566733843208,1.302256759212801e-5,-2.886485245993735e-9,-0.0015395788942260255,1.325586308652444e-5,-2.7045866919813093e-9,-0.0015392872954454852,1.3489692472678766e-5,-2.5226746116671805e-9,-0.0015390695180788213,1.3690362719305401e-5,-2.3666060094382767e-9,-0.0015389039426561332,1.3831829101966165e-5,-2.2563601055744896e-9,-0.0015387628159656927,1.3897428531583792e-5,-2.20469239650718e-9,-0.0015386148936828994,1.388103058929039e-5,-2.2162086122068876e-9,-0.0015384280799308537,1.3788188762037226e-5,-2.28644706084773e-9,-0.0015381727896268602,1.3637252599749298e-5,-2.4010335015984904e-9,-0.00153782662638598,1.3459685165893791e-5,-2.5355047694054314e-9,-0.0015373803606947806,1.3298103454663454e-5,-2.6569224773298658e-9,-0.0015368439449366434,1.3200271754010526e-5,-2.7285944715443808e-9,-0.0015362497069414172,1.3208268582747388e-5,-2.7184455758695063e-9,-0.0015356491281297727,1.3344727868614513e-5,-2.609535624585385e-9,-0.0015351012857119798,1.3601376685119754e-5,-2.4087144532296773e-9,-0.001534655333305587,1.3936432395579682e-5,-2.1484399499017215e-9,-0.0015343338675460306,1.4284442308400234e-5,-1.8790986065537597e-9,-0.001534124900712501,1.4575769360907748e-5,-1.6540268609434805e-9,-0.001533986063403117,1.4757650849527079e-5,-1.5134089313619608e-9,-0.0015338585577077514,1.4808523097929115e-5,-1.4733758294952858e-9,-0.001533684646016743,1.4741520547899112e-5,-1.5234227094639102e-9,-0.001533422629589494,1.4597945041350879e-5,-1.6315309243635806e-9,-0.0015330556633583313,1.4434363097761433e-5,-1.7541719141681908e-9,-0.0015325932941699795,1.43077142414427e-5,-1.8477863331828831e-9,-0.0015320665277323265,1.426230754346835e-5,-1.878725396982042e-9,-0.0015315185461519663,1.4321473573738102e-5,-1.8295328556822685e-9,-0.001530993934766879,1.4485180350014558e-5,-1.7006180859558923e-9,-0.001530529287402824,1.4733246178698408e-5,-1.5076755247691595e-9,-0.0015301472235543963,1.5032273750256648e-5,-1.2763383865137975e-9,-0.001529854434526647,1.5343751423442615e-5,-1.0360201232972493e-9,-0.0015296430494533845,1.5631173065596047e-5,-8.145421075795626e-10,-0.0015294939224596445,1.5865044960165455e-5,-6.343581941131169e-10,-0.0015293804665335667,1.6025681201232713e-5,-5.104211518947967e-10,-0.0015292721800424954,1.6104406698012555e-5,-4.492264661427397e-10,-0.0015291376898846022,1.610398838942385e-5,-4.484456737093128e-10,-0.0015289476443276155,1.6038826092304203e-5,-4.967851368558057e-10,-0.0015286780300962212,1.5934920116292352e-5,-5.7407767303816e-10,-0.0015283144581671828,1.5828995706173513e-5,-6.520649957069123e-10,-0.001527857433495814,1.5765420962771622e-5,-6.968641554284709e-10,-0.0015273273599870595,1.578919190086431e-5,-6.74377333345776e-10,-0.001526766307082904,1.5934197950098757e-5,-5.592021348606761e-10,-0.0015262325434225242,1.6208917896855537e-5,-3.454009983392546e-10,-0.0015257856016340661,1.6585900155219326e-5,-5.434009904032178e-11,-0.001525465322369261,1.7003376453317625e-5,2.6667254099619e-10,-0.0015252747715500247,1.738282006332563e-5,5.577945753003107e-10,-0.0015251774516648478,1.765614484759572e-5,7.673293029466002e-10,-0.0015251111941016761,1.778888314628154e-5,8.693422948032573e-10,-0.0015250108675460873,1.7788373699605145e-5,8.698678813149482e-10,-0.0015248284104435656,1.769597096092772e-5,8.008933904221264e-10,-0.001524543138352943,1.7570342537972436e-5,7.074837082249667e-10,-0.001524161958697962,1.747014596631279e-5,6.344307222398109e-10,-0.00152371290844506,1.7441141511317046e-5,6.163780060845438e-10,-0.001523235851785127,1.7509215448337496e-5,6.72585413499027e-10,-0.0015227730669315363,1.7678694633934106e-5,8.058200670495614e-10,-0.0015223612736943114,1.7934688640477055e-5,1.0043203383510617e-9,-0.0015220259505717274,1.82482101335355e-5,1.2458005545171251e-9,-0.0015217783771147274,1.858278154644696e-5,1.502482588468059e-9,-0.0015216153779278,1.8901176203271382e-5,1.7461563926156706e-9,-0.001521521286606779,1.9171184850908933e-5,1.9524855806838318e-9,-0.0015214713531420381,1.936973086375099e-5,2.1040967574472464e-9,-0.0015214357043695024,1.9485117407839795e-5,2.1923000740043392e-9,-0.001521383137404215,1.9517692447771478e-5,2.217627952739704e-9,-0.0015212844821984616,1.9479511468266107e-5,2.1895835175049778e-9,-0.0015211156742934025,1.939342867657197e-5,2.1258913140746853e-9,-0.0015208608563400331,1.9291673965034527e-5,2.0512979780619082e-9,-0.001520515854495682,1.9213505125941906e-5,1.995657851135691e-9,-0.0015200919884612346,1.9200901897949216e-5,1.9905876211772794e-9,-0.0015196190517206686,1.9290978781291798e-5,2.0637415938522103e-9,-0.001519144803733725,1.9504713196396947e-5,2.2304122471037216e-9,-0.001518727462232059,1.9834280591372538e-5,2.484141135478913e-9,-0.0015184192950395239,2.0235367514319987e-5,2.7910634415758664e-9,-0.0015182452262433325,2.0633099952696904e-5,3.0944338572009063e-9,-0.0015181877354138221,2.094520859440517e-5,3.3320858875781925e-9,-0.0015181899043198905,2.1113683302729238e-5,3.4603240998125803e-9,-0.0015181776587180065,2.1127106051478163e-5,3.4708520228233463e-9,-0.0015180885131474918,2.1021030404410242e-5,3.391091106264991e-9,-0.0015178909438639508,2.0859213783789e-5,3.2698730446144373e-9,-0.0015175877233646422,2.0709171992738493e-5,3.1587082248994756e-9,-0.0015172073558787026,2.0623842481949752e-5,3.0977101310951086e-9,-0.0015167914191089214,2.063317965218757e-5,3.109204821067375e-9,-0.0015163832619076432,2.0743705953134367e-5,3.1975368071754336e-9,-0.0015160200669873704,2.0942485608743105e-5,3.3523023756736195e-9,-0.0015157281682930876,2.1202788343014117e-5,3.5528268410564887e-9,-0.0015155208240000008,2.1490072546112796e-5,3.7727761422749006e-9,-0.0015153978329193042,2.1767775800983042e-5,3.984512020996164e-9,-0.0015153466823297202,2.2002561279956053e-5,4.162975427671088e-9,-0.0015153449752000046,2.2168662578104594e-5,4.2888951154383054e-9,-0.0015153638372301824,2.225102728825126e-5,4.351136659371982e-9,-0.001515371889179471,2.2246993016359994e-5,4.3479874066622305e-9,-0.0015153392563930425,2.216641597337143e-5,4.287271959233951e-9,-0.001515241213541778,2.2030490914074532e-5,4.1854284582402095e-9,-0.0015150613338686283,2.1869574703626888e-5,4.065761994294679e-9,-0.0015147941551076818,2.1720147110229897e-5,3.956004055400928e-9,-0.0015144474064621842,2.1620798118500058e-5,3.885163322724043e-9,-0.0015140436280418352,2.160676344805545e-5,3.879380610579873e-9,-0.0015136202312386242,2.1702388771875214e-5,3.956357484574458e-9,-0.001513226034844196,2.191177437422689e-5,4.1185205826258535e-9,-0.0015129120080209172,2.221001677650227e-5,4.346649078495528e-9,-0.001512715541928629,2.254041791686142e-5,4.597890678761155e-9,-0.001512642323751254,2.282451516198137e-5,4.8132638236435735e-9,-0.001512656112032841,2.2987226657755368e-5,4.936448725917021e-9,-0.0015126871339836351,2.2987814401065566e-5,4.937036368579893e-9,-0.0015126589666124984,2.283832816494508e-5,4.824488181507253e-9,-0.0015125191642603442,2.2596939508072832e-5,4.643164810446097e-9,-0.001512255771697461,2.234135481963672e-5,4.452159952580022e-9,-0.0015118937115124553,2.2139907404171068e-5,4.303255975411923e-9,-0.00151147883232571,2.203443093930126e-5,4.227845582902372e-9,-0.001511060993239207,2.2037202305538674e-5,4.234671953457867e-9,-0.0015106824975225093,2.213657085421608e-5,4.314282868663287e-9,-0.0015103725536317254,2.2305348342064856e-5,4.4455958177446396e-9,-0.001510145935250769,2.2508543748264166e-5,4.601885979825811e-9,-0.0015100037941396729,2.27093975733727e-5,4.75536669510632e-9,-0.0015099353530227085,2.2873996336669858e-5,4.880600371514767e-9,-0.0015099200916151164,2.2974973370313923e-5,4.957188134048892e-9,-0.0015099304637137257,2.2994496007904244e-5,4.971952359005194e-9,-0.0015099352286913673,2.2926461766264454e-5,4.920579998432417e-9,-0.0015099033645110472,2.277759522000927e-5,4.808472749402745e-9,-0.0015098082535331882,2.256704567886276e-5,4.650450638927179e-9,-0.0015096316019525189,2.2324318804894625e-5,4.469136915658275e-9,-0.0015093665766133704,2.208567924099814e-5,4.2921241199986e-9,-0.0015090197629728298,2.1889299652124044e-5,4.148176635499323e-9,-0.0015086116448405531,2.1769507934527783e-5,4.062815296740895e-9,-0.0015081753500045245,2.1750466832938717e-5,4.05360291565382e-9,-0.0015077531763032308,2.183960388547096e-5,4.125383508132904e-9,-0.0015073900399322092,2.202167990402843e-5,4.2660809956394935e-9,-0.0015071232263286609,2.225573764208077e-5,4.44462415416496e-9,-0.0015069693776782423,2.2478572667533146e-5,4.6136193435732875e-9,-0.0015069127900212765,2.261830809440704e-5,4.719430802140069e-9,-0.0015069025568193628,2.2617773461514468e-5,4.719545121206075e-9,-0.0015068654430890603,2.2459193836491986e-5,4.601005606662283e-9,-0.001506732732291867,2.2175454413684737e-5,4.388897633440769e-9,-0.0015064676102254564,2.1838262916960467e-5,4.1374773793336535e-9,-0.0015060770908259737,2.152899176668202e-5,3.9081543995164606e-9,-0.0015056034531821725,2.130964096087466e-5,3.747499605308365e-9,-0.0015051039831142801,2.120817745888039e-5,3.67616765940978e-9,-0.0015046318558587788,2.121994692951462e-5,3.6900798243215312e-9,-0.0015042251268647423,2.1317953608248667e-5,3.768369282876351e-9,-0.0015039036630436163,2.1464388035088392e-5,3.88222893943776e-9,-0.0015036707819547192,2.1619516091843104e-5,4.001665844105285e-9,-0.0015035165886605325,2.1747302655433718e-5,4.099689013291884e-9,-0.00150342132600212,2.1818716266063703e-5,4.154695925069204e-9,-0.001503358325448771,2.1813879500024203e-5,4.1519986156729824e-9,-0.0015032968462424501,2.1723736492507323e-5,4.08503905892022e-9,-0.0015032052341075262,2.155133538091197e-5,3.956368101994074e-9,-0.0015030546872407823,2.1312355770057032e-5,3.778071180337243e-9,-0.0015028235326783174,2.103420332333634e-5,3.5710789610787957e-9,-0.0015025013887804367,2.075307806093682e-5,3.362886440108658e-9,-0.0015020922453497882,2.0508886287330707e-5,3.183598559287639e-9,-0.0015016154742786625,2.0338452391119222e-5,3.0607104114683997e-9,-0.0015011040515861569,2.0268076034948164e-5,3.0134867470089806e-9,-0.001500599804274013,2.030688168146457e-5,3.04807733049152e-9,-0.0015001460726057133,2.044239395900025e-5,3.154424023362247e-9,-0.00149977856352969,2.0639604039527855e-5,3.305819021705255e-9,-0.0014995156172464786,2.0844817059723325e-5,3.461959279396227e-9,-0.0014993500137638414,2.0995399978085027e-5,3.576249789876038e-9,-0.0014992456432738306,2.1035335583678028e-5,3.60729449457631e-9,-0.0014991428844553212,2.0933644184201608e-5,3.532476786791916e-9,-0.0014989745730104767,2.0698804268457708e-5,3.3586078624101303e-9,-0.0014986888360896111,2.0380406021878866e-5,3.1231135922833585e-9,-0.0014982686733544998,2.0053717417477414e-5,2.88245886837212e-9,-0.001497737525690711,1.979300837962255e-5,2.692135997911263e-9,-0.001497148017881539,1.9647196210900128e-5,2.588415637713842e-9,-0.0014965613991866607,1.9629093705834248e-5,2.5803785904338805e-9,-0.0014960289411646245,1.971968706434261e-5,2.653283174951249e-9,-0.0014955820412908304,1.9880736800477454e-5,2.778157555940626e-9,-0.0014952309905867504,2.006787897714019e-5,2.9216817011335566e-9,-0.0014949687552116315,2.0239968863611068e-5,3.053154202397362e-9,-0.001494776174475137,2.0364131096063462e-5,3.1481831138080597e-9,-0.0014946265704327824,2.0417849223123522e-5,3.1901577490234746e-9,-0.0014944892845262566,2.038968095963877e-5,3.170735822070018e-9,-0.001494332545660484,2.0279629489477603e-5,3.090127645122555e-9,-0.0014941263545837618,2.009946410020862e-5,2.957370145196969e-9,-0.0014938459444002585,1.9872625600314708e-5,2.7902699955053625e-9,-0.0014934759328347927,1.9632856641228426e-5,2.614335134584265e-9,-0.0014930145655336932,1.9420569813598002e-5,2.4599538294097267e-9,-0.001492476702076429,1.9276431553751654e-5,2.3574741074222654e-9,-0.001491893815555032,1.923270705234934e-5,2.3306640563010123e-9,-0.0014913096645020614,1.930428755097455e-5,2.3900526656468323e-9,-0.0014907716135890666,1.9482318555866433e-5,2.5283426168944e-9,-0.0014903193643921373,1.973316438958572e-5,2.7198781518158167e-9,-0.0014899741448074898,2.0003956799043533e-5,2.9249937542774248e-9,-0.0014897315523588778,2.023395845028581e-5,3.098573729705269e-9,-0.0014895604078392077,2.036929696434408e-5,3.200967785115278e-9,-0.0014894086578894246,2.0377579597678796e-5,3.2087039570247428e-9,-0.0014892158047863976,2.0258385868426954e-5,3.122098731804692e-9,-0.001488929416536435,2.00457625312811e-5,2.9669485121319134e-9,-0.0014885210657221955,1.9800292408669174e-5,2.7885218058526498e-9,-0.0014879957071757151,1.9591794282292342e-5,2.6386436925550972e-9,-0.0014873899746012964,1.9478359809753334e-5,2.5601312681883347e-9,-0.0014867596618360918,1.949011570768919e-5,2.5748323704033555e-9,-0.0014861620498762876,1.96239922223134e-5,2.6799132147527057e-9,-0.0014856407320978139,1.9849868774778618e-5,2.8525944425785092e-9,-0.0014852179082245765,2.0123138972227992e-5,3.0595746869390322e-9,-0.001484894404555705,2.0397436089605455e-5,3.266468246613373e-9,-0.0014846544662120268,2.063358248057847e-5,3.444366312054756e-9,-0.0014844719149976677,2.080401172999627e-5,3.573026893968126e-9,-0.0014843155256631664,2.089389600951698e-5,3.6416569247405195e-9,-0.0014841529717873015,2.0900677734307805e-5,3.6485643076621275e-9,-0.0014839536957402732,2.083324538196875e-5,3.6005774495059056e-9,-0.0014836914694317035,2.0711220588510544e-5,3.5125354304605184e-9,-0.0014833473561297718,2.0564086382282243e-5,3.406608295349423e-9,-0.0014829133688975399,2.0429297886048457e-5,3.3108019367196984e-9,-0.0014823963710327067,2.0348185310062236e-5,3.25579730356668E-09,-0.0014818207428450856,2.0358734524199104e-5,3.269510016130022e-9,-0.0014812274772494347,2.048563738802864e-5,3.369725367338494e-9,-0.0014806675693328044,2.0730221397913308e-5,3.556767697544755e-9,-0.0014801896123771137,2.106481501301274e-5,3.809538836492915e-9,-0.0014798249253679303,2.143590416769047e-5,4.088059593597637e-9,-0.0014795761455542354,2.177709692752412e-5,4.3431788306475135e-9,-0.0014794146511569793,2.202796158292254e-5,4.530508461441201e-9,-0.0014792883061481331,2.21516328538685e-5,4.623353141774396e-9,-0.0014791364524373138,2.2144870224967428e-5,4.620002061129199e-9,-0.001478906684187595,2.203791530288745e-5,4.543444647931511e-9,-0.0014785683235115793,2.1885258092804413e-5,4.434360357647662e-9,-0.0014781193401062422,2.1750689691606835e-5,4.339933827235743e-9,-0.0014775854795386373,2.169092982823376e-5,4.3017291032046366e-9,-0.001477012299802205,2.1742145708306606e-5,4.345842348530162e-9,-0.0014764526498468376,2.191281179061359e-5,4.477843345187745e-9,-0.0014759534363243591,2.2184454181331846e-5,4.683549499194312e-9,-0.0014755455960484022,2.2519217855883682e-5,4.93475027814799e-9,-0.0014752396898019221,2.2870962823821085e-5,5.1974073013490225e-9,-0.0014750271342094889,2.3195958122338928e-5,5.439457561441334e-9,-0.0014748851544931095,2.3460421517391652e-5,5.636259530417908e-9,-0.0014747829673421675,2.3644120169039524e-5,5.773169265596725e-9,-0.001474687320693333,2.374080291527646e-5,5.845840169919798e-9,-0.0014745666070528286,2.3756880234768512e-5,5.859274017653767e-9,-0.0014743937130802754,2.370958754850038e-5,5.826487086509059e-9,-0.0014741482569230124,2.3625217663658505e-5,5.767179828898929e-9,-0.001473818894785108,2.353730629244631e-5,5.7063097259063755e-9,-0.0014734060778071696,2.3484074946004946e-5,5.672082995091509e-9,-0.001472924981874492,2.3504008874457454e-5,5.692603170476783e-9,-0.0014724072644037177,2.3628534088270373e-5,5.790480507708103e-9,-0.0014718991918354172,2.387197597384268e-5,5.975569281186334e-9,-0.0014714535304005726,2.422153315886059e-5,6.2378093646216116e-9,-0.0014711147480171334,2.463284924493281e-5,6.5441791770475725e-9,-0.0014709018005976526,2.5037149761910478e-5,6.844044438239558e-9,-0.0014707971735682401,2.5361087416693702e-5,7.08371765685339e-9,-0.0014707499231823534,2.5551998946229314e-5,7.224937628064112e-9,-0.0014706928556039132,2.559617122586235e-5,7.2582251778159335e-9,-0.0014705654035565266,2.5521412187611647e-5,7.204692681405604e-9,-0.0014703314954858874,2.5384704814681434e-5,7.106814374546921e-9,-0.001469986538679709,2.5252782134341083e-5,7.013936096625625e-9,-0.0014695540981764408,2.5183955143550453e-5,6.968766442288963e-9,-0.0014690762900327096,2.5215950258180403e-5,6.998456432120111e-9,-0.0014686020708823385,2.5360870206104967e-5,7.1110940673169154e-9,-0.001468176386598783,2.5606318665205407e-5,7.296811789583651e-9,-0.001467831922902369,2.592100301791191e-5,7.532134484148677e-9,-0.0014675843884544473,2.6263002803544234e-5,7.786145194716698e-9,-0.0014674316308986469,2.6588795756606222e-5,8.027060457500164e-9,-0.0014673561469447757,2.6861167542429433e-5,8.22790296065784e-9,-0.001467329858105644,2.7054651629686617e-5,8.370365121482301e-9,-0.0014673197245071011,2.7158013293985568e-5,8.446566196624374e-9,-0.0014672929285562525,2.717410966689769e-5,8.458950180331899e-9,-0.0014672208834997042,2.7118011201820044e-5,8.4189307986924e-9,-0.0014670820001531884,2.7014370775278294e-5,8.34495143072538e-9,-0.0014668636033767842,2.6894642929169563e-5,8.260369284515231e-9,-0.0014665634811135814,2.6794222102966245e-5,8.19123024785904e-9,-0.0014661914098972825,2.674909228562432e-5,8.163696466874626e-9,-0.001465770520724381,2.679114846664634e-5,8.200590836488431e-9,-0.001465337400999473,2.6941364730020337e-5,8.316505230393117e-9,-0.0014649388274165344,2.720105595585084e-5,8.511638713086152e-9,-0.0014646228477321868,2.7543744071366404e-5,8.766111014759959e-9,-0.0014644237187200332,2.791300341092992e-5,9.03854416039646e-9,-0.001464344966501293,2.8232690622237343e-5,9.273507511061049e-9,-0.00146435037296069,2.8431059296295023e-5,9.418980704214775e-9,-0.0014643722903750673,2.8469546292426055e-5,9.447272055057291e-9,-0.0014643365365555757,2.835968319109381e-5,9.367378735882624e-9,-0.0014641906956874835,2.8157374663821298e-5,9.220801767421116e-9,-0.0014639203699168175,2.793907130398366e-5,9.063972153156974e-9,-0.001463547743641747,2.777469392086682e-5,8.94819704622287e-9,-0.0014631181589848093,2.770971394278009e-5,8.906400483072525e-9,-0.0014626840013922983,2.7759615661242276e-5,8.949152904876544e-9,-0.0014622919778576426,2.7913376841285792e-5,9.067487925009645e-9,-0.0014619755187329977,2.8141209895819113e-5,9.238874894232356e-9,-0.0014617515941158011,2.840319839203045e-5,9.43374255358404e-9,-0.0014616206414562979,2.8657228590944903e-5,9.621316724398479e-9,-0.0014615686117483452,2.88656511750599e-5,9.77438646312151e-9,-0.0014615705063021332,2.9000359578134314e-5,9.872855466969257e-9,-0.0014615948598680729,2.9046009835060456e-5,9.905967029354836e-9,-0.001461608579480747,2.900124632155569e-5,9.873148682283592e-9,-0.0014615815016667387,2.8877991973552452e-5,9.783504838835818e-9,-0.001461490094774729,2.86991569091944e-5,9.65415693656674e-9,-0.0014613200429391873,2.8495379357004293e-5,9.507823393054517e-9,-0.0014610677949529376,2.8301325099769305e-5,9.370010304543687e-9,-0.0014607412749224225,2.8151769243240655e-5,9.266016170060544e-9,-0.001460359934266054,2.807741831222614e-5,9.217802419101563e-9,-0.001459954104262802,2.810012125881796e-5,9.240548810429125e-9,-0.0014595629027557774,2.8227079611997363e-5,9.338632920695437e-9,-0.001459229207373408,2.8444570378339046e-5,9.501348366973721e-9,-0.0014589903312328463,2.8713478214577256e-5,9.699906185659169e-9,-0.0014588646330113623,2.8970928160528702e-5,9.888704607981145e-9,-0.0014588380390138703,2.9143000527045176e-5,1.0014441084658272e-8,-0.0014588592510678298,2.916941323267889e-5,1.0033827086917958e-8,-0.0014588523821274818,2.9030953044343186e-5,9.933409035109415e-9,-0.0014587456644553276,2.8762477106263568e-5,9.739062259576716e-9,-0.001458501091057045,2.844024437257861e-5,9.506799999855063e-9,-0.001458127143420008,2.8150315430128008e-5,9.299622484807696e-9,-0.001457669435461303,2.7957472722960843e-5,9.164649386359438e-9,-0.0014571891196582215,2.788982620398424e-5,9.12181556433836e-9,-0.001456742655817562,2.7940470402478702e-5,9.1652351867303225E-09,-0.0014563700347164715,2.807848674258035e-5,9.271524962474886e-9,-0.0014560912588836175,2.826144010513699e-5,9.409190716108027e-9,-0.0014559078903742333,2.8445360201978687e-5,9.546033498517481e-9,-0.0014558067229891146,2.859145029300421e-5,9.65399985693406e-9,-0.0014557639343839687,2.867025540336573e-5,9.712068997365372e-9,-0.0014557492065120391,2.8664138594720785e-5,9.707890097359682e-9,-0.0014557298001960863,2.8568493551007577e-5,9.638560286519974e-9,-0.0014556745936851589,2.839177608483774e-5,9.510625422205857e-9,-0.0014555579370875656,2.815423714782051e-5,9.339183329667601e-9,-0.0014553629537277198,2.788526924195518e-5,9.14595894628804e-9,-0.0014550838573302906,2.7619586166606147e-5,8.95646433151999e-9,-0.0014547270310782067,2.7392671032165182e-5,8.796565507284847e-9,-0.0014543107698863327,2.7235881381529104e-5,8.688803061502544e-9,-0.0014538636547068316,2.7171559156514596e-5,8.648806078255112e-9,-0.0014534215710303232,2.7208440099601352e-5,8.68207399305285e-9,-0.001453023162629078,2.7337595874378007e-5,8.781285876904159e-9,-0.0014527031545351094,2.7529636906441165e-5,8.924571639210088e-9,-0.0014524833008458392,2.7735059993107925e-5,9.075970709988018e-9,-0.0014523621957538728,2.7890571544417234e-5,9.19001842577633e-9,-0.0014523077282724134,2.793379091660291e-5,9.22219677030714e-9,-0.0014522585937687897,2.7825223830983982e-5,9.144582317840528e-9,-0.0014521403795198652,2.7569149189017554e-5,8.960821255109384e-9,-0.001451893505617349,2.7219493141957345e-5,8.71038541518176e-9,-0.0014514989868257015,2.6862149989671336e-5,8.455773632611902e-9,-0.0014509858377754307,2.6581283086955036e-5,8.257991564297597e-9,-0.0014504161415827162,2.642918854125528e-5,8.154588223766253e-9,-0.0014498591074915373,2.6414918608475404e-5,8.151437565096828e-9,-0.0014493694267968629,2.6511849721997745e-5,8.228438049517682e-9,-0.001448977429522189,2.667403387196817e-5,8.351639483937653e-9,-0.0014486894408670674,2.6851542282472955e-5,8.484552463610772e-9,-0.0014484932417684118,2.700055872143433e-5,8.595494996252945e-9,-0.0014483645278005612,2.7088384874182358e-5,8.661115546099852e-9,-0.0014482724252906584,2.709519725146361e-5,8.667505390416874e-9,-0.0014481837922433506,2.7014246607076915e-5,8.610209915657879e-9,-0.0014480667630384213,2.6851367625677863e-5,8.493819386236972e-9,-0.0014478939985973695,2.6623968239600285e-5,8.331252341426477e-9,-0.0014476458307236476,2.635924813759418e-5,8.142498231074953e-9,-0.00144731311061095,2.6091231865376743e-5,7.952456649511876e-9,-0.0014468992107673786,2.5856444834127285e-5,7.787722099695875e-9,-0.0014464205463444633,2.5688537660867144e-5,7.672567457310853e-9,-0.0014459051593164764,2.5612502082256553e-5,7.624669465502379e-9,-0.0014453891705153014,2.5639343311066898e-5,7.651283894303304e-9,-0.0014449112632642608,2.5762226244715e-5,7.746636370364774e-9,-0.0014445057152640856,2.595501245227754e-5,7.891145026699935e-9,-0.0014441946694093064,2.6173960497131583e-5,8.052917461887092e-9,-0.0014439806475695987,2.636349963132186e-5,8.192048807278225e-9,-0.0014438411873451745,2.646690890427581e-5,8.268250609640819e-9,-0.0014437286296687954,2.6441511003512633e-5,8.251567637578792e-9,-0.001443578444853297,2.6275165731848128e-5,8.1339948899965e-9,-0.0014433273202660133,2.5997083928831833e-5,7.937096006765073e-9,-0.001442936409115405,2.567444219779277e-5,7.709508223593939e-9,-0.0014424086701659907,2.5391506100637698e-5,7.511889392046065e-9,-0.0014417892862947695,2.5219227646515815e-5,7.3950023164529674e-9,-0.001441147821285167,2.5191187270965408e-5,7.382424698161206e-9,-0.0014405525671188652,2.5297654232244746e-5,7.46642211059057e-9,-0.0014400506984845914,2.549697136888099e-5,7.616367322101587e-9,-0.0014396609875323325,2.573422047511667e-5,7.792362299919142e-9,-0.0014393770763216152,2.595731091946943e-5,7.956884889193762e-9,-0.0014391755390315833,2.6126299063856226e-5,8.081435414644157e-9,-0.0014390240648945822,2.621661961154909e-5,8.14872862017226e-9,-0.0014388876944924675,2.6218749094750767e-5,8.152319004850451e-9,-0.0014387330155882449,2.6136521805769236e-5,8.095315097039274e-9,-0.0014385310964584244,2.5985249879172986e-5,7.98902323659588e-9,-0.0014382599562942464,2.578984727441783e-5,7.851630723953415e-9,-0.001437907000473791,2.558258430097201e-5,7.706602007982529e-9,-0.0014374713475980292,2.539984818095332e-5,7.580298299298504e-9,-0.0014369654370357835,2.5277430919184726E-05,7.498481675769508e-9,-0.0014364149450387434,2.524445155724815e-5,7.481837634246073e-9,-0.0014358560907401488,2.531680732424275e-5,7.541239382042651e-9,-0.0014353299421923447,2.549174348391302e-5,7.67395063074306e-9,-0.0014348742608147498,2.5745447771436074e-5,7.862124322155557e-9,-0.0014345144552345818,2.6035180886781052e-5,8.074600559849243e-9,-0.0014342558619612528,2.6306381027453562e-5,8.272200047331242e-9,-0.001434079589311781,2.6503932782313694e-5,8.415841468953633e-9,-0.0014339437223416472,2.658569469617018e-5,8.476099349229682e-9,-0.0014337909162949274,2.653533090809111e-5,8.442148816768944e-9,-0.0014335620776601706,2.6370518693983798e-5,8.32738512813637e-9,-0.0014332136074441035,2.614232716045764e-5,8.16878953155742e-9,-0.0014327328436069065,2.592319956427502e-5,8.01823403658462e-9,-0.0014321447131647473,2.5785451237951414e-5,7.927095900408931e-9,-0.0014315049081303302,2.5778022969174607e-5,7.92972291182139e-9,-0.001430881462440153,2.591187567232032e-5,8.0331743458699e-9,-0.0014303331772278684,2.616035797685171e-5,8.217711692267238e-9,-0.0014298944934438224,2.6472481447071226e-5,8.446469961108673e-9,-0.0014295714210435305,2.6790920056085873e-5,8.67839265732808e-9,-0.0014293466416022695,2.706669905365202e-5,8.878682424407924e-9,-0.0014291886521796292,2.726698482237647e-5,9.024249768378522e-9,-0.0014290605250002484,2.7376714200605378e-5,9.104750656058354e-9,-0.0014289262535661926,2.7396668664601868e-5,9.121125674470142e-9,-0.0014287546376585928,2.734037378186705e-5,9.083361209742851e-9,-0.0014285215854872378,2.7231132652078738e-5,9.008387004102195e-9,-0.0014282118094740023,2.7099446056366132e-5,8.91824477219024e-9,-0.0014278205169719102,2.6980369162120895e-5,8.838165817857077e-9,-0.0014273551041353886,2.6910052790540644e-5,8.794014126806641e-9,-0.001426836217410468,2.692081607168585e-5,8.808668492982802e-9,-0.0014262969989791532,2.703467650249471e-5,8.897360695655925e-9,-0.0014257791653392638,2.7256366225002294e-5,9.062761040100194e-9,-0.0014253252294257476,2.7568169951920956e-5,9.291482753990074e-9,-0.0014249678412150235,2.7929586139618507e-5,9.554082763102208e-9,-0.001424719247272349,2.8283922152095817e-5,9.8099633515569e-9,-0.0014245649540888968,2.857138997614607e-5,1.0016784431585915e-8,-0.001424464819701088,2.874523105273305e-5,1.0141889729331605e-8,-0.0014243621807249333,2.8785614912595313e-5,1.0172034668321106e-8,-0.001424198594399113,2.8706550061364885e-5,1.0118076747905602e-8,-0.0014239298298215845,2.855338333973738e-5,1.0012952173362216e-8,-0.0014235384273948743,2.8391359153604704e-5,9.903332600293055e-9,-0.001423039068963574,2.8288237213866135e-5,9.837163726172813e-9,-0.0014224748046457894,2.8295862255426144e-5,9.850620457112531e-9,-0.0014219048911750486,2.8436423102220665e-5,9.95855573897215e-9,-0.0014213881167722824,2.8698019217145672e-5,1.0151643259449534e-8,-0.001420967450066756,2.9040746996965335e-5,1.0400951762124473e-8,-0.0014206611416994707,2.941022918094345e-5,1.066766982712532e-8,-0.001420462210050991,2.9752840746124096e-5,1.0913884054961945e-8,-0.0014203445464611544,3.0027360180390388e-5,1.111072374244291e-8,-0.0014202718523974758,3.0210625033603962e-5,1.1242230035220288e-8,-0.0014202059478694213,3.0297793467362173e-5,1.130543514634517e-8,-0.0014201126851082163,3.0299379741317255e-5,1.1308212546961511e-8,-0.001419965354967399,3.023722740125861e-5,1.126641797154726e-8,-0.0014197463754245395,3.0140745523510838e-5,1.1201222166966375e-8,-0.0014194482287997765,3.004374201377961e-5,1.1136832656018542e-8,-0.0014190743137684472,2.9981438465230445e-5,1.1098298258684281e-8,-0.001418639809555389,2.9986901963587264e-5,1.1108885328964141e-8,-0.001418171968272546,3.008617815680982e-5,1.1186579824169502e-8,-0.0014177085861886171,3.0291942135319834e-5,1.133964646008498e-8,-0.001417293059956346,3.05967206924271e-5,1.1562003200599675e-8,-0.0014169650708668305,3.0968510049347896e-5,1.1830355814926381e-8,-0.0014167481369272308,3.135278601208798e-5,1.210581797947972e-8,-0.0014166384270926171,3.168371673086619e-5,1.2341922339142801e-8,-0.001416601011852032,3.1903068064781095e-5,1.2497950944243014e-8,-0.001416577597530908,3.197990561297152e-5,1.2552765821321245e-8,-0.001416504023895075,3.192205189348772e-5,1.2512782170450044e-8,-0.0014163303334027324,3.177388113563488e-5,1.241023118085146e-8,-0.0014160352058320256,3.160197306166359e-5,1.2292773285630224e-8,-0.00141563020412267,3.147525183817631e-5,1.2209223647116733e-8,-0.001415154182806351,3.144686499940079e-5,1.219665427065755e-8,-0.0014146612944608804,3.1542588220823e-5,1.2272337128455885e-8,-0.0014142068212377667,3.17574992652059e-5,1.2431711044918489e-8,-0.0014138345495532411,3.206030619328251e-5,1.2651790954942593e-8,-0.0014135683760217552,3.240316711893786e-5,1.2898338055852669e-8,-0.0014134095167311366,3.273394154711765e-5,1.3134557510283644e-8,-0.0014133391618895421,3.300757270905415e-5,1.3329020931988017e-8,-0.0014133249690354472,3.31939594183018e-5,1.34610409333419e-8,-0.0014133289896605121,3.328119077205221e-5,1.3522794560786908e-8,-0.001413314822460721,3.3274656159752014e-5,1.3518607273504532e-8,-0.0014132527079583823,3.3193518643689525e-5,1.3462443644765452e-8,-0.0014131223461608018,3.3066195373724894e-5,1.3374722960227905e-8,-0.001412913992766144,3.292604615376844e-5,1.3279258055873786e-8,-0.0014126286522506636,3.2807704536436217e-5,1.3200599557144906e-8,-0.0014122779793304208,3.274378481004234e-5,1.3161617579820244e-8,-0.0014118840527596287,3.276134215889836e-5,1.318093997452497e-8,-0.0014114785988180107,3.287744387268909e-5,1.3269863918137662e-8,-0.0014111005438624472,3.309364278437632e-5,1.3428626290622916e-8,-0.0014107903444190032,3.339035361538781e-5,1.3642698341029341e-8,-0.0014105801213301545,3.372401496582465e-5,1.388102605623399e-8,-0.0014104809172316352,3.403140528598448e-5,1.4099169038639324e-8,-0.0014104721889999377,3.4244418459823575e-5,1.4249623837810556e-8,-0.0014105012730983308,3.431313016865975e-5,1.4297897851110098e-8,-0.0014104976530675871,3.4227232153276674e-5,1.4237483279052317e-8,-0.0014103978203613941,3.4023102917727105e-5,1.409478258989675e-8,-0.0014101683041605874,3.37710788967813e-5,1.3920030577394821e-8,-0.0014098152448564095,3.3549879175073367e-5,1.3769043937615413e-8,-0.0014093780596700428,3.342166325020871e-5,1.3685419104499984e-8,-0.0014089135400348065,3.341756238018929e-5,1.3690309226175862e-8,-0.0014084788334548454,3.3535493238112093e-5,1.37811189010826e-8,-0.0014081186845767038,3.374669781848928e-5,1.3936497322555077e-8,-0.0014078585339577186,3.400633332696204e-5,1.4124144409347155e-8,-0.0014077028508541673,3.42645878758073e-5,1.4308805334751806e-8,-0.0014076373664685578,3.4476340111075574e-5,1.4459025629545484e-8,-0.0014076339312917433,3.4608360343685586e-5,1.4552028310657353e-8,-0.0014076568208633863,3.464345854701809e-5,1.457641017245677e-8,-0.001407669277186434,3.458141606859998e-5,1.4532638817739162e-8,-0.0014076391876356137,3.443714237304597e-5,1.4431695615751243e-8,-0.0014075431589499628,3.42369134134312e-5,1.4292440206539112e-8,-0.0014073687088618709,3.401369363319955e-5,1.4138337135936162e-8,-0.0014071148025871514,3.380247774740365e-5,1.3994150056515684e-8,-0.0014067912957618034,3.363619137526845e-5,1.3882976655598566e-8,-0.001406417785833611,3.3542132876375727e-5,1.3823657520053249e-8,-0.0014060220696082155,3.3538605100390865e-5,1.3828389059174037e-8,-0.0014056380007306819,3.363132267047934e-5,1.3900311168766636e-8,-0.0014053019647113963,3.3809476163547754e-5,1.403098639393186e-8,-0.0014050467952829435,3.404235090138576e-5,1.4198316878603361e-8,-0.0014048925106380783,3.427900969237467e-5,1.4366522015636952e-8,-0.0014048352740607154,3.4454830578689884e-5,1.4490717899879615e-8,-0.0014048394576729162,3.450785686877302e-5,1.452817586539771e-8,-0.0014048405652307403,3.4402642110255266e-5,1.4454790297227312e-8,-0.001404764049178016,3.415061768516878e-5,1.4279243287251102e-8,-0.0014045544794032856,3.381223147440442e-5,1.4044512501709342e-8,-0.001404199019517501,3.34753415760048e-5,1.3812662721467575e-8,-0.0014037308928993113,3.322120032523223e-5,1.3640780805957817e-8,-0.0014032126628860826,3.309751484531842e-5,1.3561886833224022e-8,-0.0014027118105852483,3.311012467826726e-5,1.3579138976547671e-8,-0.0014022815504324637,3.3230920394382554e-5,1.3671690150678322e-8,-0.0014019518800177807,3.341272421638346e-5,1.3805518700988216e-8,-0.0014017290980962978,3.360354473780993e-5,1.3943711301648619e-8,-0.0014016000243125806,3.375694744860536e-5,1.4053807349603574e-8,-0.001401537920759662,3.383830386691697e-5,1.4112051071441454e-8,-0.001401508516602354,3.38278961316903e-5,1.4105333153706423e-8,-0.0014014756088146735,3.372177220527613e-5,1.4031568509718768e-8,-0.0014014060660440912,3.353076489929489e-5,1.3898885331730495e-8,-0.0014012739860668733,3.327793091957308e-5,1.3723815329935129e-8,-0.0014010636973225197,3.2994742987017955e-5,1.3528667448275764e-8,-0.0014007713279077503,3.271646976821572e-5,1.3338315101143095e-8,-0.0014004048383781237,3.247734073521475e-5,1.3176767910392181e-8,-0.001399982720160362,3.230609707347399e-5,1.3063963984102755e-8,-0.0013995317115542282,3.222223618554686e-5,1.3013065431940527e-8,-0.0013990837824146862,3.223298100013896e-5,1.3028362806501945e-8,-0.0013986724408224693,3.2330914871978444e-5,1.310378977963939e-8,-0.0013983280897938944,3.249234472603756e-5,1.3222059543851011e-8,-0.0013980719157413676,3.26771022098923e-5,1.3354806377875613e-8,-0.001397908301055983,3.2831582187595467E-05,1.3464847011626819e-8,-0.001397817347062273,3.289747667782527e-5,1.3512189019105797e-8,-0.001397751512132713,3.28277047548693e-5,1.3464871106866769e-8,-0.0013976423203658295,3.260691801970788e-5,1.3312974762696126e-8,-0.0013974208313565252,3.2266892279175194e-5,1.3079220779759064e-8,-0.0013970462170215551,3.188350281420138e-5,1.2816866134850941e-8,-0.001396526429072313,3.15504266134185e-5,1.2591347003175733e-8,-0.0013959162362914407,3.134208482490942e-5,1.2454319312828303e-8,-0.0013952934212709952,3.12876940613365e-5,1.2425488800691024e-8,-0.0013947290248052181,3.1368994960239776e-5,1.2491155941132685e-8,-0.0013942677926455445,3.153656609401135e-5,1.2615901943459306e-8,-0.001393923604268954,3.173094679442987e-5,1.2757639356311874e-8,-0.0013936850245932673,3.189863660685751e-5,1.287894027262053e-8,-0.0013935243292366379,3.20005016684368e-5,1.295286703830315e-8,-0.0013934059148908537,3.2014351751696166e-5,1.2964583482053157e-8,-0.0013932926868055352,3.193431439306784e-5,1.29106853876459e-8,-0.0013931506171936453,3.176890244780789e-5,1.279767711238989e-8,-0.0013929521622677431,3.153852371658084e-5,1.2640170940633758e-8,-0.0013926789463034916,3.1272453315631026e-5,1.2458806214965603e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json new file mode 100644 index 0000000..fb9e3f3 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":4000,"numberOfSamples":1000,"samples":[-0.0013923237156324762,3.10051313115372e-5,1.227772476593132e-8,-0.0013918913030339685,3.0771749723490945e-5,1.2121506307793586e-8,-0.0013913982265213998,3.060338976954708e-5,1.2011722091998317e-8,-0.0013908707040811456,3.052231698115309e-5,1.1963565646016446e-8,-0.001390341194667023,3.053811122326968e-5,1.198311590315129e-8,-0.0013898437960375297,3.064516965374932e-5,1.206567850949141e-8,-0.0013894089283486013,3.0821985171837794e-5,1.219550046257788e-8,-0.0013890577325521491,3.103246124664618e-5,1.234697235237071e-8,-0.001388796542557306,3.12295787680487e-5,1.2487412403812631e-8,-0.0013886120720738905,3.136210718279558e-5,1.2581786671309725e-8,-0.0013884688947041909,3.1385084006792996e-5,1.2599819994917749e-8,-0.0013883119458332274,3.127360474065753e-5,1.2525244839418013e-8,-0.0013880771300425396,3.103666131759266e-5,1.2365079707027838e-8,-0.0013877108551321243,3.072388276790292e-5,1.2154123117817592e-8,-0.0013871929430152989,3.0416606360292832e-5,1.1948741207200948e-8,-0.001386550391714903,3.0201205713724095e-5,1.1808429582903155e-8,-0.0013858506737383077,3.01357997768827e-5,1.1772803776767341e-8,-0.0013851759104291312,3.0229273883448915e-5,1.1847175892297428e-8,-0.001384592881220668,3.0443874540562336e-5,1.2004550146250928e-8,-0.0013841349373795028,3.0716035009628255e-5,1.2200281016361826e-8,-0.0013838008265632472,3.098058540822912e-5,1.2389009867920565e-8,-0.0013835645353088798,3.118712181259742e-5,1.2536034707260684e-8,-0.0013833877106148682,3.130621279611001e-5,1.2621499602221395e-8,-0.0013832296076505604,3.132862793970199e-5,1.2639667607070031e-8,-0.0013830533398082588,3.12615629520694e-5,1.2596119024238894e-8,-0.0013828292717648978,3.1124447793189026e-5,1.2504739208443173e-8,-0.001382536894290198,3.094526718665489e-5,1.238515875044467e-8,-0.001382166093661862,3.0757242436986546e-5,1.2260502826500002e-8,-0.0013817180828804721,3.059536687843876e-5,1.2155030689028627e-8,-0.0013812057662645032,3.0492356610198686e-5,1.2091316281131741e-8,-0.001380652965115511,3.0473944416237442e-5,1.2086924984252354e-8,-0.0013800918794172976,3.055405387965315e-5,1.2151015510603047e-8,-0.0013795585330693598,3.073089776278415e-5,1.2281664264941277e-8,-0.0013790865545975047,3.098519781713838e-5,1.2464780864846123e-8,-0.0013787002512115332,3.128152698517288e-5,1.2675280274755086e-8,-0.0013784083744284533,3.1573186320784075e-5,1.2880703491497357e-8,-0.0013782000273174174,3.181021399913377e-5,1.3046891803617532e-8,-0.0013780438976636682,3.19495350745652e-5,1.3144947940134445E-08,-0.0013778917807731484,3.1965865743675875e-5,1.3158522917130986e-8,-0.0013776871187557247,3.186125601721507e-5,1.3090054814128084e-8,-0.0013773784345414448,3.167005542915762e-5,1.2963872114938864e-8,-0.0013769355296510653,3.145540027821075e-5,1.2823586040322064e-8,-0.0013763632310821636,3.129451925350386e-5,1.2721957602677264e-8,-0.0013757051938257864,3.12548297658547e-5,1.2704580862237566e-8,-0.0013750325167593762,3.136980980661643e-5,1.2793513871866098e-8,-0.0013744200205683455,3.162705495398507e-5,1.297932656913296e-8,-0.001373921486003332,3.197529339541822e-5,1.3226141868971426e-8,-0.0013735559011152846,3.2345581764334165e-5,1.348632479099502e-8,-0.001373308834962327,3.267443076739067e-5,1.371638565723486e-8,-0.0013731440063741707,3.2918760928589506e-5,1.3887174851188765e-8,-0.0013730169969555664,3.306017025212218e-5,1.3986670884338575e-8,-0.001372885707505598,3.310177282032628e-5,1.4017645484980559e-8,-0.0013727161916267327,3.3062157152929236e-5,1.3993385650784678e-8,-0.0013724849650755444,3.2969528124314865e-5,1.3933613214447525e-8,-0.0013721795043743403,3.2857132549704686e-5,1.3861350571725312e-8,-0.001371798199420233,3.275975393211377e-5,1.3800541749182052e-8,-0.001371350267391638,3.2710546394120883e-5,1.3773879566233536e-8,-0.0013708554660210265,3.273748651144435e-5,1.3800332746004124e-8,-0.0013703429392595617,3.285908614832062e-5,1.3892159705457934e-8,-0.0013698482842253537,3.3079732505826116e-5,1.4051723281032588e-8,-0.0013694081789119867,3.33859216188847e-5,1.4269017354682299e-8,-0.0013690527752354515,3.3745292715916165e-5,1.4521206280880815e-8,-0.0013687973523058758,3.411026251376824e-5,1.4775341685527618e-8,-0.001368635864809167,3.442685430142285e-5,1.4994571911094206e-8,-0.001368539190809793,3.464725058126877e-5,1.5146764379461272e-8,-0.0013684596653155585,3.474271507765218e-5,1.5213225547749854e-8,-0.001368341412275528,3.471292842213015e-5,1.519483961915156e-8,-0.0013681340963783179,3.458864103148684e-5,1.5113572919781048e-8,-0.001367806641243441,3.442624486265195e-5,1.50084742827696e-8,-0.0013673571913396174,3.429481060775766e-5,1.492663952720893e-8,-0.0013668159712882611,3.425816744323766e-5,1.4910976651613327e-8,-0.0013662389537410337,3.4356679623137404e-5,1.4987969233571176e-8,-0.0013656929127156684,3.45948313307106e-5,1.5159539607809455e-8,-0.0013652362239514341,3.493996318255312e-5,1.540252269790559e-8,-0.0013649025854399397,3.533339206451559e-5,1.5676457844807535e-8,-0.001364694017006319,3.5709311516460834e-5,1.5936510012581336e-8,-0.0013645848390629765,3.6013317990182196e-5,1.6146000719145376e-8,-0.001364533006244744,3.6213785847992433e-5,1.6284003030435945e-8,-0.0013644928514191061,3.630413358810897e-5,1.6346724249025713e-8,-0.0013644247321696538,3.629841553527456e-5,1.6344369702902035e-8,-0.0013643001276189908,3.622421100892573e-5,1.6296216699097295e-8,-0.0013641030557909385,3.611585301733881e-5,1.6225972675099123e-8,-0.001363829489218644,3.6009284510185593e-5,1.6158272516967093e-8,-0.0013634861732545276,3.59384398039273e-5,1.6116209694143087e-8,-0.0013630895393642458,3.593237657339973e-5,1.6119355456194334e-8,-0.0013626646638417342,3.601230966247092e-5,1.618170797397962e-8,-0.001362243629102119,3.61880268938273e-5,1.6309266089582144e-8,-0.0013618622841067652,3.64538655276576e-5,1.6497393820657673e-8,-0.0013615544772974737,3.6785502430891855e-5,1.6728827194428735e-8,-0.0013613437161679772,3.713991173468955e-5,1.697386187057922e-8,-0.001361234021080087,3.746108911824493e-5,1.719439828116546e-8,-0.0013612037638524796,3.7692536866159856e-5,1.7352457140518053e-8,-0.001361206847971344,3.779396838960132e-5,1.742144636974678e-8,-0.0013611832374142226,3.7756031020244054e-5,1.7396011201743785e-8,-0.001361076191644119,3.7606086154550635e-5,1.7295762883204998e-8,-0.0013608496577971183,3.7401677631123275e-5,1.716059227166306e-8,-0.0013604990488915285,3.721408821670011e-5,1.7039232838343093e-8,-0.0013600520125571307,3.710835900255645e-5,1.697551683056106e-8,-0.0013595600099726545,3.712640498271043e-5,1.699695432191236e-8,-0.0013590841935409244,3.727760024130748e-5,1.71086275657347e-8,-0.001358679890204125,3.7538440708709115e-5,1.7293378278633092e-8,-0.00135838372132039,3.7860514706880266e-5,1.7517577456580113e-8,-0.0013582064390924846,3.818407848658802e-5,1.7740504047095585e-8,-0.0013581329272131877,3.845318903981301e-5,1.7924558906917483e-8,-0.0013581286541984837,3.862806850028087e-5,1.804345582610699e-8,-0.0013581498661130592,3.869159882723496e-5,1.8086397228283904e-8,-0.0013581539476281528,3.8649261142348775e-5,1.8057850041261867e-8,-0.0013581071226586598,3.8524189345567815e-5,1.7974088393725628e-8,-0.0013579883897526658,3.835008509330396e-5,1.7858356144320932e-8,-0.00135779018044884,3.8164384929534315e-5,1.7736239335068338e-8,-0.001357517027048097,3.800295694389865e-5,1.7632074255281237e-8,-0.0013571835099064594,3.789645286761099e-5,1.7566453802397066e-8,-0.0013568122323385436,3.786770844912354e-5,1.7554432313878906e-8,-0.0013564319146861178,3.792940545542113e-5,1.760394100218013e-8,-0.0013560751230173448,3.808144637277682e-5,1.771409396726125e-8,-0.001355774723096159,3.830809315615486e-5,1.7873437098055103e-8,-0.0013555581129589143,3.85759738967685e-5,1.805883775217439e-8,-0.0013554390847187276,3.883530834118127e-5,1.8236503204011578e-8,-0.001355409076240439,3.9027250633763036e-5,1.836699003058032e-8,-0.0013554321238842734,3.909874292882928e-5,1.8415131641263553e-8,-0.0013554490528045462,3.90218298649933e-5,1.836291168093209e-8,-0.0013553934777036426,3.88088274293409e-5,1.8219570358978306e-8,-0.0013552148739573212,3.8513364752411945e-5,1.8022193158569097e-8,-0.0013548976458011926,3.821394753241361e-5,1.7824422483376295e-8,-0.0013544662886432806,3.7987376502045904e-5,1.767824374087245e-8,-0.001353975167144596,3.788495877740173e-5,1.7617747380746665e-8,-0.0013534897169433626,3.792082265498023e-5,1.765132964873523e-8,-0.0013530679623867672,3.807359000944715e-5,1.776318309780284e-8,-0.0013527479846985185,3.82970266342332e-5,1.7920945154219862e-8,-0.0013525427737545379,3.8534126622979775e-5,1.8085549434599747e-8,-0.0013524413684721215,3.8730475725509086e-5,1.8220348872787433e-8,-0.0013524143580498815,3.8844550459139665e-5,1.829793515757917e-8,-0.0013524218120327396,3.885388259987187e-5,1.830403299861606e-8,-0.0013524218425320289,3.8756778190668846e-5,1.8238389323156565e-8,-0.0013523781464381873,3.857000249417001e-5,1.8113029207340084e-8,-0.0013522652859119853,3.832360437107422e-5,1.7948697828581297e-8,-0.0013520711816035556,3.805446144349454e-5,1.7770522740602527e-8,-0.0013517970474576544,3.7800026057570636e-5,1.760383303417335e-8,-0.0013514555502732262,3.759328234789039e-5,1.7470765883749638e-8,-0.0013510681406707162,3.745922197053802e-5,1.7387859156658665e-8,-0.0013506622145259056,3.741251692416933e-5,1.7364450412879974e-8,-0.0013502682953014952,3.7455843878886433e-5,1.7401577299135237e-8,-0.0013499170098815133,3.757843888576176e-5,1.749114206947162e-8,-0.0013496352319221148,3.775487577483726e-5,1.7615323797154796e-8,-0.001349440649488639,3.794495617766193e-5,1.7746750386563e-8,-0.0013493347424008647,3.809671819615431e-5,1.7850659872577422e-8,-0.001349295890582923,3.8155046902679206e-5,1.7890635669466993e-8,-0.0013492766959825838,3.807708327935155e-5,1.783874654599152e-8,-0.0013492110735612106,3.785133903622449e-5,1.768815260529381e-8,-0.001349033855976422,3.751108479626499e-5,1.7461969909133265e-8,-0.0013487069795288752,3.71303580506857e-5,1.7210535401503925e-8,-0.0013482379377772538,3.67993136705882e-5,1.6994726215196717e-8,-0.001347678208637462,3.659042766946213e-5,1.6863046213677397e-8,-0.0013471024913643088,3.6534216931232214e-5,1.6835204236635903e-8,-0.0013465817610538201,3.661531138061667e-5,1.6899639174625656e-8,-0.0013461637307948591,3.67855921967629e-5,1.702274689456107e-8,-0.0013458659040266978,3.698362593147122e-5,1.716236688366139e-8,-0.0013456786096961092,3.715150481672573e-5,1.7279353443021854e-8,-0.0013455729607305563,3.7245547989349e-5,1.7344764650321256e-8,-0.0013455098437546319,3.724113849988471e-5,1.7342896275356996e-8,-0.0013454479816408654,3.713333537401668e-5,1.7271384802952297e-8,-0.0013453504339775678,3.693472237791048e-5,1.7139497446621565e-8,-0.0013451893773290563,3.66714125531848e-5,1.69653115025737e-8,-0.001344949053305138,3.6377906041960216e-5,1.677225728879621e-8,-0.0013446268270830342,3.6091487557028635e-5,1.658542561013439e-8,-0.0013442324429496473,3.584683872566402e-5,1.642801203779135e-8,-0.0013437858000863968,3.567151610583387e-5,1.6318286339007397e-8,-0.0013433138090793446,3.5582718952246464e-5,1.6267381969080993e-8,-0.0013428468552322856,3.5585336135370534e-5,1.6277959343087233e-8,-0.0013424151246411572,3.567102736278635e-5,1.6343650045473796e-8,-0.0013420448217986622,3.581815905326798e-5,1.6449191850671144e-8,-0.0013417540843769415,3.5992621037087415e-5,1.6571231526067074e-8,-0.0013415482762467888,3.6150103914661236e-5,1.6680073457991738e-8,-0.0013414149103668283,3.624123041516313e-5,1.6743183400191018e-8,-0.0013413198868642417,3.622112481074397e-5,1.6731446982117347e-8,-0.00134120845189209,3.606369069563323e-5,1.662842184473864e-8,-0.0013410151654745213,3.577732086480887e-5,1.644054815603201e-8,-0.0013406846000409867,3.5413460407537786e-5,1.6202722853245097e-8,-0.0013401964609990825,3.505743910760731e-5,1.597215167212452e-8,-0.001339580425708274,3.479926151774641e-5,1.5808809507200667e-8,-0.0013389081886428587,3.4697739505285814e-5,1.5751417893888703e-8,-0.0013382653066040724,3.475913717423584e-5,1.5803205836748927e-8,-0.0013377198411129057,3.494136132320177e-5,1.593492656261746e-8,-0.0013373043650111932,3.517656334298736e-5,1.610030358752367e-8,-0.001337015439682562,3.5396327466275055e-5,1.6253166407767607e-8,-0.0013368239990238354,3.5548502293726705e-5,1.6358821610884963e-8,-0.0013366882809558854,3.560374914900627e-5,1.639832805964985e-8,-0.001336564467218173,3.55549452941308e-5,1.636783817572624e-8,-0.001336413776905145,3.541320348266067e-5,1.627564290331889e-8,-0.0013362066349266496,3.520293709170862e-5,1.6138666700184393e-8,-0.0013359249232274644,3.4956909941254224e-5,1.5979096337218204e-8,-0.001335562924155841,3.4711420854670354e-5,1.582122151313896e-8,-0.0013351271377057652,3.4501629448674695e-5,1.568840971408109e-8,-0.0013346349529169633,3.435711455278746e-5,1.5600199028356044e-8,-0.0013341121333342526,3.429797828590833e-5,1.5569686455152157e-8,-0.0013335892705868344,3.433199575848479e-5,1.5601580165570786e-8,-0.0013330975858291425,3.4453164621146024e-5,1.5691228226897585e-8,-0.0013326644706178011,3.464175000353744e-5,1.5824749599259128e-8,-0.0013323090899715643,3.4865868704546576e-5,1.5980301002253026e-8,-0.001332038338966892,3.508467362609938e-5,1.6130447896255385e-8,-0.0013318434113794785,3.525330077002587e-5,1.6245627748951825e-8,-0.0013316975322695253,3.5330051294305984e-5,1.629891139049964e-8,-0.001331556286785722,3.528619312938393e-5,1.6272293810409786e-8,-0.0013313628892067757,3.5117465072944155e-5,1.6163989779264318e-8,-0.0013310606240185723,3.485372509921916e-5,1.5994525193249938e-8,-0.001330612092239529,3.4560074860567006e-5,1.5807325007709106e-8,-0.0013300188819388664,3.432251695865668e-5,1.5659203035008636e-8,-0.0013293294672254824,3.4218415257834896e-5,1.5600856484188996e-8,-0.0013286258106659328,3.4284781738908746e-5,1.565595284409048e-8,-0.0013279927272366466,3.45034557497139e-5,1.5811466092247673e-8,-0.001327487245815521,3.481218305757908e-5,1.6025241776050835e-8,-0.0013271243297834456,3.5132573390047304e-5,1.6244759544611692e-8,-0.0013268819281744182,3.539726971412401e-5,1.6425301589944376e-8,-0.0013267165573191055,3.556482846968116e-5,1.6539830337867083e-8,-0.0013265791200544272,3.5621827657685704e-5,1.65802341767557e-8,-0.0013264257556151145,3.5577571686315266e-5,1.6553560503722946e-8,-0.0013262233226004878,3.5456646993180176e-5,1.6476832678516347e-8,-0.0013259512363842734,3.529220284957108e-5,1.637245418374682e-8,-0.001325601512184336,3.512067149730725e-5,1.626470172512635e-8,-0.0013251780734556981,3.497753493359976e-5,1.6177001160356565e-8,-0.0013246955832461917,3.4893601735033355e-5,1.6129548566876927e-8,-0.0013241776457557696,3.48914999010468e-5,1.6137021291032074e-8,-0.001323654076904617,3.4982458503977466e-5,1.6206426975212878e-8,-0.001323157041794967,3.5163901163299414e-5,1.633548781930137e-8,-0.0013227162371304468,3.5418581049974166e-5,1.651211397605036e-8,-0.001322353687199993,3.571581068946272e-5,1.6715367990939248e-8,-0.0013220789387146789,3.601504810064792e-5,1.6918061706656873e-8,-0.0013218855424575772,3.627176280866538e-5,1.7090842854582353e-8,-0.0013217496703317407,3.644508967537851e-5,1.720733490398808e-8,-0.0013216315923340778,3.65064979819164e-5,1.7249749168249524e-8,-0.0013214807524120568,3.644842841848515e-5,1.7214291107647377e-8,-0.0013212451222116156,3.6291038759722376e-5,1.711523751546295e-8,-0.0013208846495029996,3.60839095678969e-5,1.6985751198887913e-8,-0.0013203863550454039,3.5898854230369885e-5,1.6873006904681262e-8,-0.0013197752519399667,3.581166273538234e-5,1.682623169287687e-8,-0.0013191132255276836,3.587626651540886e-5,1.6879911863534467e-8,-0.0013184815790603076,3.610241659999537e-5,1.7039381967031404e-8,-0.0013179528033887597,3.645020189165614e-5,1.7277474450637978e-8,-0.0013175658344386403,3.684610326885073e-5,1.7545256584706124e-8,-0.0013173174371027003,3.721139594219093e-5,1.7790800848516823e-8,-0.0013171711591591722,3.7487162393554715e-5,1.797564920289059e-8,-0.0013170751083556422,3.764583818573417e-5,1.8082333520008842e-8,-0.0013169783809209286,3.768958704883004e-5,1.8113134460390254e-8,-0.001316841058972772,3.764169488899078e-5,1.8084193168326844e-8,-0.001316637900558923,3.7536910324560003e-5,1.8018963620713753e-8,-0.0013163581227781179,3.74137736701684e-5,1.7943079177386814e-8,-0.0013160036253867771,3.730942928907114e-5,1.7880963442603383e-8,-0.0013155869869080489,3.725613444561233e-5,1.7853614375631473e-8,-0.0013151295414577234,3.7278505354125304e-5,1.787686235519351e-8,-0.0013146592408699255,3.7390914042800114e-5,1.7959684433815758e-8,-0.0013142077768859126,3.759497729467439e-5,1.8102557862085905e-8,-0.0013138065061219567,3.787768395385184e-5,1.829626511989185e-8,-0.0013134811566555547,3.821118959139425e-5,1.852186865762894e-8,-0.0013132460042088404,3.855535190871637e-5,1.8752556581883928e-8,-0.0013130988888896927,3.886358760935178e-5,1.895768052314085e-8,-0.0013130187880983333,3.9091668685304416e-5,1.9108648012779857e-8,-0.0013129673945528086,3.920788927157972e-5,1.9185567048502283e-8,-0.001312895240496861,3.920217618512819e-5,1.918302681873874e-8,-0.001312751730863596,3.9091588709663886e-5,1.911338071545348e-8,-0.0013124973851131767,3.892009752658912e-5,1.9006243630838438e-8,-0.0013121156803837925,3.875132474201483e-5,1.8903462645629538e-8,-0.0013116210944716046,3.865427657691962e-5,1.884969011796569e-8,-0.0013110596023093825,3.868436788208665e-5,1.8880112079492577e-8,-0.0013104989534392041,3.8865074759319735e-5,1.9008779400316116e-8,-0.0013100096397849926,3.917783531577995e-5,1.9222392671536106e-8,-0.001309642829716195,3.9566441267412706e-5,1.9483464693369486e-8,-0.0013094148936341004,3.995569860122959e-5,1.974262974906959e-8,-0.0013093055437344233,4.027611457180882e-5,1.9954738594955732e-8,-0.001309269039156997,4.048329051082387e-5,2.0091415425642147e-8,-0.0013092512762208149,4.0565121305456764e-5,2.0145608286767512e-8,-0.001309204630257768,4.053753924890765e-5,2.012862157893427e-8,-0.0013090962818779034,4.043433842048082e-5,2.0063277178960123e-8,-0.0013089102465701447,4.029664197237238e-5,1.997689758602726e-8,-0.0013086455823332675,4.0164989376255385e-5,1.9896096938048397e-8,-0.0013083132488531785,4.0074480065967925e-5,1.984365052124649e-8,-0.0013079330725531747,4.005204604799757e-5,1.9836785608003348e-8,-0.0013075312073712847,4.011466197911539e-5,1.9886069633644747e-8,-0.001307137746835643,4.026767679567208e-5,1.9994358344677895e-8,-0.0013067837953618638,4.0503094151805196e-5,2.01557240211866e-8,-0.001306497350497541,4.079836018355392e-5,2.0354765247593485e-8,-0.0013062978171497592,4.111688713507512e-5,2.0567103458832157e-8,-0.0013061898867567608,4.141184316071489e-5,2.076202115095573e-8,-0.0013061586859034154,4.163420723263055e-5,2.0907824211338083e-8,-0.001306168888940125,4.174442656977121e-5,2.097944515467198e-8,-0.0013061699709006594,4.1724685296821706e-5,2.0966324787464215e-8,-0.0013061076049721034,4.1587191985985025e-5,2.0877595932876798e-8,-0.0013059383156452651,4.137443165518275e-5,2.0741958445759947e-8,-0.0013056425938951044,4.115010375057371e-5,2.060146632532868e-8,-0.0013052319085176942,4.098302152604378e-5,2.0500810520890916e-8,-0.001304747148248314,4.092874780265062e-5,2.0475326047336553e-8,-0.0013042487662768554,4.101434730128175e-5,2.0541288681716853e-8,-0.0013038012226081626,4.1230688242288156e-5,2.0691321547541416e-8,-0.0013034559571685768,4.153480564579156e-5,2.0896370294196396e-8,-0.0013032379646765557,4.186207205593781e-5,2.111390047210881e-8,-0.0013031404096450596,4.214456168589532e-5,2.1299885763046148e-8,-0.0013031290193728036,4.232935992827865e-5,2.1420571741681682e-8,-0.0013031540596875038,4.23905340975399e-5,2.1460031357444974e-8,-0.0013031647722243158,4.233156537247573e-5,2.1421513055924925e-8,-0.0013031210288061141,4.217942322107834e-5,2.132339132411696e-8,-0.0013029993698451085,4.19743987627646e-5,2.1192421768565933e-8,-0.0013027936105723457,4.175999540557228e-5,2.1057114924379603e-8,-0.0013025120277159838,4.157542941681899e-5,2.094288448231488e-8,-0.0013021733414850117,4.145125605159004e-5,2.0869268627645957e-8,-0.001301802931785606,4.1407329810052036e-5,2.08486684580033e-8,-0.0013014297605223135,4.1451908374797514e-5,2.0885812894513818e-8,-0.001301083724057496,4.158098532303902e-5,2.097737756976615e-8,-0.0013007927456693646,4.177756479690925e-5,2.1111607157953057e-8,-0.0013005788777021498,4.201134797256275e-5,2.126826146359011e-8,-0.0013004531008736547,4.224008178027535e-5,2.1419659516259312e-8,-0.0013004095063849311,4.241435176037529e-5,2.1533904163364884e-8,-0.001300421059288809,4.248719684661846e-5,2.1581120022324038e-8,-0.0013004404355749176,4.2427837091928494e-5,2.154224223145945e-8,-0.0013004089398097013,4.223528221728633e-5,2.1417667998620045e-8,-0.001300273032166463,4.194483810430357e-5,2.1231287584532605e-8,-0.0013000028044365167,4.162178844603964e-5,2.1026176296912758e-8,-0.0012996038559836165,4.13426408192214e-5,2.0852193780685487e-8,-0.0012991166051237216,4.117141562699113e-5,2.075042537733095e-8,-0.0012986036072820868,4.11409724530234e-5,2.0741091404972655e-8,-0.00129813093698426,4.1245817779201306e-5,2.0819172199719124e-8,-0.0012977508063343123,4.144686388868798e-5,2.095795336418839e-8,-0.001297490230837804,4.168441992169005e-5,2.1117875653405696e-8,-0.0012973474395914163,4.1894427134593377e-5,2.1257279803455193e-8,-0.001297295439153459,4.2023506126082147e-5,2.1342116234441085e-8,-0.001297290782074011,4.2039616230905444e-5,2.135260920238544e-8,-0.0012972848326498105,4.193654440887813e-5,2.1285844007437435e-8,-0.0012972345579685953,4.173200901824314e-5,2.1154255926592056e-8,-0.0012971103085002236,4.146082617494708e-5,2.0981029477300475e-8,-0.0012968992859630204,4.116578087591e-5,2.0794135694006106e-8,-0.0012966049398672192,4.0888917956883526e-5,2.062073980233298e-8,-0.0012962436295018886,4.066503581169255e-5,2.048307865442981e-8,-0.0012958401889284622,4.051793533458231e-5,2.039611146731544e-8,-0.0012954236654983476,4.045897416475759e-5,2.036662737785466e-8,-0.001295023782419015,4.0486965044612695e-5,2.039320583348045e-8,-0.0012946679941183582,4.058855472756083e-5,2.04665171281949e-8,-0.001294378612670228,4.0738730472340536e-5,2.056977240662803e-8,-0.0012941693814056939,4.0901748941956324e-5,2.0679500965812705e-8,-0.0012940411451917645,4.1033526442706687e-5,2.0767257575044023e-8,-0.0012939771911233996,4.108715604463087e-5,2.0803239961642293e-8,-0.0012939403977219072,4.102298074380838e-5,2.0762689854466084e-8,-0.0012938758566673656,4.082263405184535e-5,2.0634736809638925e-8,-0.0012937224662835883,4.050242606522025e-5,2.04308134609819e-8,-0.0012934330065076513,4.0117530900919203e-5,2.0187204767311665e-8,-0.00129299496709262,3.974958987689844e-5,1.995693470396842e-8,-0.0012924399284722028,3.947942732467301e-5,1.97920270271869e-8,-0.0012918341252307118,3.935776650460108e-5,1.9724509449887175e-8,-0.0012912547182092019,3.938930857514804e-5,1.97562193674393e-8,-0.001290764690673244,3.9536318616132313E-05,1.9861433777957795e-8,-0.0012903973760540492,3.973598386964465e-5,1.999850762256767e-8,-0.001290153512484858,3.992107605315687e-5,2.0123564778314824e-8,-0.0012900074223779303,4.003630507822636e-5,2.0201177921784495e-8,-0.0012899173653183767,4.0047651738485965e-5,2.0210256251888748e-8,-0.001289836338458807,3.9945200597234635e-5,2.0145554957262593e-8,-0.0012897212998023743,3.9741174964429464E-05,2.0016045030261284e-8,-0.0012895399514628268,3.946480109359224e-5,1.984132894245313e-8,-0.001289274703109967,3.915530609271689e-5,1.9647018285539673e-8,-0.0012889236983102278,3.885435148165427e-5,1.9459904493796818e-8,-0.0012884992067051736,3.8599204907948656e-5,1.9303690980758627e-8,-0.0012880241094008248,3.841760919532316e-5,1.919581678542283e-8,-0.0012875274288492854,3.832480054634275e-5,1.9145604099175267e-8,-0.0012870398381923532,3.8322598965528926e-5,1.9153682307136752e-8,-0.001286589752637628,3.840001624621069e-5,1.921238243257403e-8,-0.001286200095515784,3.853470660398659e-5,1.9306731004946026e-8,-0.0012858854886256378,3.86948874374072e-5,1.9415831342562718e-8,-0.001285649499877651,3.8841815281819475e-5,1.9514646939711093e-8,-0.0012854817125208561,3.893347048250045e-5,1.9576511347082232e-8,-0.0012853550995704204,3.893063802338816e-5,1.957702413451274e-8,-0.0012852255062502298,3.880636244566652e-5,1.9499927026725242e-8,-0.0012850362965845573,3.855807120421911e-5,1.9344575221523857e-8,-0.0012847311762881526,3.821819412132976e-5,1.9132471126811794e-8,-0.0012842747415224602,3.785512960173213e-5,1.8907745295762985e-8,-0.0012836727720354248,3.755682902569352e-5,1.8726620068053298e-8,-0.0012829784848701268,3.739895052372073e-5,1.863702330001396e-8,-0.0012822761530718633,3.7413406126274804e-5,1.86584821716486e-8,-0.0012816490975353263,3.7576622715437714e-5,1.8774747376732938e-8,-0.0012811506382189232,3.782352818577273e-5,1.8943030423325083e-8,-0.001280792436308164,3.8075703038799706e-5,1.9112370169816575e-8,-0.0012805506354879592,3.8266803390174146e-5,1.924016463208864e-8,-0.001280380738437669,3.835616719714332e-5,1.9300925603521577e-8,-0.0012802324630361284,3.833113206068958e-5,1.9287565495948508e-8,-0.0012800605197691444,3.820264194508425e-5,1.920823586964087e-8,-0.0012798308757682997,3.799830026151315e-5,1.9081529959526996e-8,-0.001279523586304221,3.775524645033635e-5,1.8931707405877297e-8,-0.0012791333774328948,3.751366233471992e-5,1.8784512978711527e-8,-0.0012786686262423056,3.731102412992637e-5,1.866362274807214e-8,-0.001278148993439162,3.717726455085912e-5,1.858772206348688e-8,-0.001277601942460214,3.7131143654458575e-5,1.8568311190285357e-8,-0.001277058498171101,3.717813474632904e-5,1.860839408251708e-8,-0.0012765487555219646,3.7310038774287194e-5,1.8702216632045073e-8,-0.0012760977084929888,3.750624505138479e-5,1.8836075192321827e-8,-0.0012757217769639956,3.773626898786361e-5,1.8990020553034313e-8,-0.0012754261510291623,3.796321117292025e-5,1.9140234836138346e-8,-0.0012752029370164196,3.814797161205375e-5,1.92619071682081e-8,-0.0012750300928311285,3.825433491231409e-5,1.9332571089335484e-8,-0.0012748715426223701,3.825537269909844e-5,1.933609650898041e-8,-0.0012746797344262949,3.814138317428424e-5,1.926746861138821e-8,-0.0012744025805871105,3.7928235466975745e-5,1.9137729803848053e-8,-0.0012739963106319753,3.76626292022581e-5,1.897701998328715e-8,-0.0012734431088101711,3.741827327675125e-5,1.8832033009774208e-8,-0.0012727667106644165,3.7277449564075795e-5,1.875439150470419e-8,-0.0012720341118107905,3.730026444876515e-5,1.8781318347441222e-8,-0.0012713356167803904,3.749648014380484e-5,1.8917966913490027e-8,-0.0012707503868975216,3.7818967997163176e-5,1.913345694695096e-8,-0.0012703173742792029,3.818460780063819e-5,1.937431495323869e-8,-0.0012700276843224567,3.850870965846999e-5,1.958648929745315e-8,-0.0012698377681131297,3.873234768920965e-5,1.9732821725893906e-8,-0.0012696906468235986,3.883226562099348e-5,1.9799315570624595e-8,-0.0012695333572401244,3.881646913695297e-5,1.9792123553590806e-8,-0.0012693264687479164,3.8713735516634753e-5,1.9730552119127156e-8,-0.0012690470332673868,3.856312435152506e-5,1.9640099461015192e-8,-0.0012686878191508922,3.840594630060172e-5,1.9547213377593627E-08,-0.0012682550883168057,3.8280251328920796e-5,1.9475836828836382e-8,-0.0012677659821863632,3.8216972883763434e-5,1.9445125675948716e-8,-0.0012672456478990807,3.823702573972687e-5,1.9467782522189376e-8,-0.0012667239315270157,3.834915450270301e-5,1.954879813655444e-8,-0.0012662315252516165,3.8548712365379255e-5,1.9684700622829385e-8,-0.0012657956741872701,3.881779556352557e-5,1.9863631777743846E-08,-0.0012654358895180374,3.9127111421915734e-5,2.0066562567351532e-8,-0.0012651603219259492,3.943960149495701e-5,2.0269701099621573e-8,-0.0012649633922718845,3.97155188282893e-5,2.044787773900412e-8,-0.0012648251191054683,3.991847051986315e-5,2.0578512385264233e-8,-0.0012647124020133814,4.002181530954318e-5,2.0645672703362345e-8,-0.0012645824423290432,4.0014854271467307e-5,2.0643806946391964e-8,-0.001264388687972703,3.99081829052254e-5,2.0580779083148893e-8,-0.001264089784429187,3.973682895821391e-5,2.0479457047750557e-8,-0.0012636612589438738,3.955863316563664e-5,2.0376410433125773e-8,-0.001263107692385635,3.944474943991824e-5,2.031587286383709e-8,-0.0012624700916807313,3.9460627398303827e-5,2.0337965483915675e-8,-0.0012618210646095807,3.9641206055020366e-5,2.0463436185732815e-8,-0.0012612438544760331,3.997186027742948e-5,2.0682014530823786e-8,-0.0012608019231333165,4.03889145758586e-5,2.095293879084057e-8,-0.001260515403514942,4.080331509500292e-5,2.1219900523197546e-8,-0.0012603580066779792,4.1134769690694334e-5,2.143251915066937e-8,-0.0012602736669382706,4.133709908764442e-5,2.156229199212994e-8,-0.0012602001674625438,4.140455790552599e-5,2.1606510199617428e-8,-0.0012600871138250655,4.13627425982667e-5,2.1582334626039323e-8,-0.0012599037723692542,4.125395520943257e-5,2.1517286350261602e-8,-0.001259639059405887,4.112448324373034e-5,2.1440993984703374e-8,-0.0012592978126801822,4.1016374406620794e-5,2.1379934028673295e-8,-0.0012588963729254486,4.096310517242658e-5,2.1354792900167895e-8,-0.0012584587728795547,4.0987516848376617e-5,2.13793433801656e-8,-0.0012580135545439072,4.110070043061135e-5,2.145990419081642e-8,-0.001257590729174874,4.130124851631068e-5,2.1594960240885516e-8,-0.0012572184068382751,4.1574933436424366e-5,2.1774990856265992e-8,-0.0012569188758809874,4.1895365866185666e-5,2.198290829395347e-8,-0.0012567044061644376,4.2226400284913416e-5,2.2195638913385633e-8,-0.0012565736154616957,4.252676325544257e-5,2.2387154231576545e-8,-0.0012565095347204847,4.275674007069808e-5,2.2532803702984725e-8,-0.001256480413149145,4.2886024148070224e-5,2.261430451888185e-8,-0.0012564438185601924,4.290116127527485e-5,2.262433259898739e-8,-0.0012563537977570908,4.2810748157597085e-5,2.256953566001536e-8,-0.0012561701266762151,4.264685474788228e-5,2.2471059965738813e-8,-0.001255868216795208,4.246161786198218e-5,2.2362052663867524e-8,-0.00125544775922725,4.2318356345838705e-5,2.2281882031267264e-8,-0.0012549374800614776,4.22774052795677e-5,2.226731056823057e-8,-0.0012543928884045982,4.237873413357958e-5,2.2341924508824796e-8,-0.0012538846382849707,4.262624486160383e-5,2.2506767656905367e-8,-0.0012534783871114205,4.2981135163356555e-5,2.2736596297391955e-8,-0.0012532126561929605,4.3370682260662835e-5,2.2985558206766268e-8,-0.0012530852538086268,4.3711798272939364e-5,2.3201876301994538e-8,-0.0012530559769681426,4.393918260812166e-5,2.3345305957001018e-8,-0.0012530638749481211,4.4024288239515566e-5,2.3398863033464984e-8,-0.0012530490271740113,4.3977672971138264e-5,2.3370162208987406e-8,-0.0012529684380834512,4.383778762251783e-5,2.3284209882351702e-8,-0.0012528018888721966,4.365500575092296e-5,2.317318439808869e-8,-0.001252549834499636,4.34782797526141e-5,2.3067930135885604e-8,-0.0012522276998212633,4.334721846604825e-5,2.2992993745712078e-8,-0.0012518599576908918,4.3288848879161106e-5,2.2964722563118695e-8,-0.0012514754687159037,4.331706400168195e-5,2.299109201556656e-8,-0.0012511041057524219,4.343305080609753e-5,2.3072114029472213e-8,-0.0012507740089569535,4.362583037811218e-5,2.3200256491004583e-8,-0.001250508740600051,4.387284960062057e-5,2.336086149484763e-8,-0.0012503238892904954,4.414121645053139e-5,2.353297738143989e-8,-0.0012502232383400124,4.439057639247119e-5,2.3691245534858623e-8,-0.0012501953913701654,4.4578519987771495e-5,2.380937649691334e-8,-0.0012502124466062187,4.466862199857083e-5,2.386522426953918e-8,-0.0012502324655709908,4.463985453790723e-5,2.38466230351851e-8,-0.0012502066668911443,4.449465916127025e-5,2.3756267679178933e-8,-0.0012500904907569506,4.4262301368479445e-5,2.3613540810084584e-8,-0.0012498556988007213,4.3995081325114545e-5,2.3451824758728542e-8,-0.0012494996714732477,4.375734202677175e-5,2.3311357072906797e-8,-0.0012490486343557058,4.360978994232384e-5,2.3229326501100328e-8,-0.0012485532799728183,4.359328030608507e-5,2.3229896399582473e-8,-0.001248077323762565,4.3716595091107244e-5,2.331696995481848e-8,-0.0012476814413027032,4.395208150458591e-5,2.3471965518926978e-8,-0.0012474066926813987,4.424143994728845e-5,2.3657815110514976e-8,-0.001247262641945451,4.4511219507711075e-5,2.3828756487483382e-8,-0.0012472248755787513,4.469382181566311e-5,2.3943301525145774e-8,-0.0012472435198697964,4.474664503382738e-5,2.3975912178036033e-8,-0.001247259506344416,4.466205719091103e-5,2.3922954185837815e-8,-0.0012472217473297215,4.446513739596869e-5,2.3801066644975018e-8,-0.0012470987187946957,4.420202198632878e-5,2.3639715221988536e-8,-0.0012468817729012385,4.392519162060175e-5,2.3471897838937096e-8,-0.0012465817445801888,4.368137901444268e-5,2.3326586331146017e-8,-0.0012462224178688196,4.3504603084736476e-5,2.3224476425034505e-8,-0.0012458339394664786,4.3413868956406416e-5,2.317671064191687e-8,-0.0012454477067935401,4.341371210977519e-5,2.318536732956266e-8,-0.001245092875503066,4.349582099726864e-5,2.3244572533892913e-8,-0.001244793861427751,4.364070138997217e-5,2.334159650208275e-8,-0.0012445680145702208,4.381919330597018e-5,2.3457855646996076e-8,-0.0012444228840729505,4.399437802864513e-5,2.35701808197754e-8,-0.0012443530695937283,4.4124913953168016e-5,2.3652983748257247e-8,-0.0012443375127046577,4.4170905959475854e-5,2.36819578137255e-8,-0.001244339050323051,4.410267397222573e-5,2.3639490947179656e-8,-0.0012443085409083597,4.391102098493597e-5,2.352090842966235e-8,-0.0012441949428326805,4.361529559426061e-5,2.3339274923289387e-8,-0.0012439599109511782,4.3264248999509696e-5,2.3125688607710063e-8,-0.0012435919172900148,4.292632418466513e-5,2.2923014333021052e-8,-0.0012431132807987672,4.2670863701421686e-5,2.2774032688701237e-8,-0.0012425758812366372,4.2547004754978845e-5,2.2708303443627026e-8,-0.001242046681417017,4.256875652229016e-5,2.273310098467663e-8,-0.0012415887940260054,4.2711639999148036e-5,2.2831736522023835e-8,-0.0012412448848635037,4.292095325018456e-5,2.2969151481539737e-8,-0.0012410276081992223,4.312771971755229e-5,2.310214052847942e-8,-0.0012409187405165644,4.3266945611404475e-5,2.3190749585606232e-8,-0.001240876179833917,4.329319757536537e-5,2.3207763152117412e-8,-0.0012408462077011405,4.3189822733976015e-5,2.314410023143346e-8,-0.001240777320283415,4.297005585476495e-5,2.3009154427995445e-8,-0.0012406317702474867,4.267059575677806e-5,2.2826536022629307e-8,-0.0012403919863629748,4.234042689642282e-5,2.26269926746929e-8,-0.0012400610415698615,4.2028799199970334e-5,2.2440951581700866e-8,-0.0012396584394359302,4.1775753442481906e-5,2.229275950494211e-8,-0.001239213642370792,4.160681735016447e-5,2.2197568374873713e-8,-0.001238759622997134,4.153164993599383e-5,2.21606545642313e-8,-0.0012383277669794706,4.154532626799311e-5,2.217831390256571e-8,-0.0012379443945620973,4.163077699858882e-5,2.223941511624005e-8,-0.0012376284470835346,4.17613701854737e-5,2.2327028899360917e-8,-0.0012373896362990083,4.190335157601163e-5,2.2420000164546246e-8,-0.001237226498897373,4.201852746249583e-5,2.2494706995441768e-8,-0.0012371242703294284,4.2068080603654364e-5,2.2527507113518604e-8,-0.0012370533291036505,4.201858038815096e-5,2.249845761104157e-8,-0.001236970018387961,4.18506164139745e-5,2.239652980094868e-8,-0.0012368223070618539,4.1568658962976625e-5,2.2225481522563593e-8,-0.0012365619116138991,4.120801712255095e-5,2.2007914498811416e-8,-0.0012361611416612153,4.083280694899721e-5,2.1783828379414836e-8,-0.001235627714205694,4.052073423663693e-5,2.1601104914924004e-8,-0.0012350082702082678,4.0337708897671565e-5,2.149979267276202e-8,-0.0012343757042772982,4.031356310619789e-5,2.1497194944095898e-8,-0.0012338050721628741,4.043155020851939e-5,2.1581628688838263e-8,-0.001233349834870539,4.063630930677973e-5,2.1717708568439122e-8,-0.0012330286624901638,4.0854394434720134e-5,2.1859385815913868e-8,-0.001232825543872876,4.1016780529853954e-5,2.1964061307544442e-8,-0.0012326994687433222,4.1075328421856106e-5,2.20027389188401e-8,-0.001232597984556413,4.1010377237678075e-5,2.196447509602127e-8,-0.0012324701701386766,4.083038763729262e-5,2.1855784862297425e-8,-0.0012322765508626758,4.0566046838917725e-5,2.1696628675659008e-8,-0.0012319949600370919,4.026131873137667e-5,2.151464212796346e-8,-0.0012316222127142264,3.996359807215556e-5,2.1339009160521587e-8,-0.0012311720726316338,3.971485937041825e-5,2.1195127901571155e-8,-0.001230670573013148,3.954524762662862e-5,2.1100877649413684e-8,-0.0012301501032358588,3.946977464651513e-5,2.1064790494578928e-8,-0.0012296436170803153,3.9487963552311815e-5,2.108595595697376e-8,-0.0012291799191749856,3.958568949318732e-5,2.1155185653788322e-8,-0.0012287803742935324,3.973818698101526e-5,2.1256853700710867e-8,-0.001228456809047748,3.991337515449703e-5,2.1370956879184295e-8,-0.0012282101383242943,4.007518264093764e-5,2.1475236423481508e-8,-0.0012280293349605576,4.0187061533075706e-5,2.1547450730279715e-8,-0.0012278906587169442,4.0216265386799466e-5,2.1568075140606426e-8,-0.001227757733952711,4.0139660658889306e-5,2.152381649965794e-8,-0.001227584040852701,3.995131561109933e-5,2.141206714008766e-8,-0.0012273199557392438,3.9670437193476325e-5,2.1245481814044025e-8,-0.0012269256617048919,3.934568255249432e-5,2.1054357934419238e-8,-0.001226387988600605,3.9049849819512705e-5,2.088324803621528e-8,-0.0012257337792927004,3.886073981427376e-5,2.077925099285005e-8,-0.001225029176986983,3.8832259555441034e-5,2.0774438780732722e-8,-0.0012243597146831978,3.897014608672804e-5,2.087118383561181e-8,-0.001223799174185458,3.922790438935534e-5,2.1039910874573118e-8,-0.0012233842237546633,3.952612757691313e-5,2.123118242844517e-8,-0.001223107335217403,3.9782946538246464e-5,2.139456934167179e-8,-0.0012229273220081428,3.993907780657064e-5,2.1494114292522025e-8,-0.001222787747765819,3.996887325239496e-5,2.1515041468992588e-8,-0.0012226337779387417,3.987869845089384e-5,2.1462498186417195e-8,-0.0012224231672501788,3.9698352797038394e-5,2.135591073507243e-8,-0.001222131287192134,3.94706075535104e-5,2.1222223071618265e-8,-0.0012217517999359017,3.924165377627985e-5,2.1089871554669243e-8,-0.0012212945943425393,3.905340977839935e-5,2.0984126176207197e-8,-0.0012207820344604945,3.8937868022761935e-5,2.0923847255017387e-8,-0.0012202442110411317,3.891356765329418e-5,2.0919587003276005e-8,-0.0012197138193019857,3.898419985757117e-5,2.0972925719657997e-8,-0.0012192212575737466,3.913919956043711e-5,2.1076902982625034e-8,-0.0012187904880345962,3.9356035455342134e-5,2.1217396945348294e-8,-0.001218436045934365,3.960367962125383e-5,2.1375213106972125e-8,-0.00121816125440768,3.9846620466140236e-5,2.1528562534707792e-8,-0.0012179574526165029,4.004903399140244e-5,2.165570613461297e-8,-0.0012178040605647724,4.0179078031285165e-5,2.1737684879836926e-8,-0.001217669467291421,4.021348370120589e-5,2.1761144819940345e-8,-0.0012175131332450237,4.014272182328031e-5,2.1721351070588032e-8,-0.001217289990042325,3.997662689165655e-5,2.162532349147562e-8,-0.0012169585457825218,3.9749007528304005e-5,2.1494297600574853e-8,-0.0012164931847068905,3.9517836703297245e-5,2.136358703249228e-8,-0.0012158983378917096,3.9356329110915773e-5,2.1277115324960004e-8,-0.0012152176438466392,3.9332104759699913E-05,2.127493647531436e-8,-0.001214528479586985,3.947928991470707e-5,2.1376600643727462e-8,-0.0012139177363669367,3.9778311663362115e-5,2.1569180758206194e-8,-0.0012134484162272517,4.015900048914238e-5,2.180933946924029e-8,-0.0012131363021741985,4.052837642935356e-5,2.2040280902569133e-8,-0.0012129497831343294,4.080665261167639e-5,2.2213672818770073e-8,-0.0012128291159121656,4.095125233841926e-5,2.230428148992462e-8,-0.001212710628911282,4.096082546243361e-5,2.2312340353820234e-8,-0.0012125440419645064,4.0864936103992574e-5,2.2257017392004202e-8,-0.0012122998065612566,4.070927702557695e-5,2.2167052698862267e-8,-0.001211969092054254,4.054291261138361e-5,2.207270204179144e-8,-0.0012115601294701622,4.04096307802744e-5,2.2000393390250897e-8,-0.0012110935055385707,4.034290695442932e-5,2.1969806882960636e-8,-0.001210597514896922,4.0363263803066746e-5,2.1992540281281542e-8,-0.001210103734529621,4.047720018381726e-5,2.2071717239761007e-8,-0.0012096427900898502,4.0677387217859966e-5,2.22022573473533e-8,-0.0012092403935229314,4.094407090176532e-5,2.237175494917936e-8,-0.0012089138646246408,4.124773087837309e-5,2.2562054742508997e-8,-0.001208669509931094,4.155294488543246e-5,2.2751575294808985e-8,-0.0012085012343950414,4.1823087158483395e-5,2.2918206290301382e-8,-0.0012083905541689021,4.20253509279023e-5,2.304245225579731e-8,-0.0012083080279941285,4.213570362400274e-5,2.3110503419034456e-8,-0.0012082161114372763,4.2143459888724324e-5,2.3116949841108062e-8,-0.0012080735324706796,4.2055159230597596e-5,2.3066900585552403e-8,-0.001207841533426535,4.189723091537656e-5,2.297724001603263e-8,-0.0012074923383279116,4.171613868549196e-5,2.2876363669851336e-8,-0.001207019283053891,4.157362669411139e-5,2.2801120538061767e-8,-0.0012064459189305014,4.1534493783767346e-5,2.2789521758592166e-8,-0.0012058286024298984,4.164656524482071e-5,2.2869009240234377e-8,-0.0012052460554162017,4.19184087749905e-5,2.3043477200400544e-8,-0.0012047743940046401,4.2307229374438395e-5,2.3286316882609802e-8,-0.0012044572585227797,4.272895499439604e-5,2.3546579750409415e-8,-0.001204288381331058,4.308962693418823e-5,2.376779519103741e-8,-0.0012042176630236775,4.332107815521141e-5,2.390938507508682e-8,-0.0012041753802073372,4.340093341660907e-5,2.3958706867713977e-8,-0.00120409843142815,4.335014281596996e-5,2.3929491995290315e-8,-0.0012039461046134032,4.3216266495513626e-5,2.3851510393422998e-8,-0.0012037033879847602,4.305483536435831e-5,2.3758982441867673e-8,-0.001203376539335363,4.291599030590616e-5,2.368228317218689e-8,-0.00120298613557427,4.283755592078561e-5,2.364376268900528e-8,-0.00120256066507784,4.2842730196850536e-5,2.365655954004364e-8,-0.0012021315896690958,4.29401323049733e-5,2.3724918753893763e-8,-0.0012017295357681474,4.3124764351869256e-5,2.384500705422323e-8,-0.0012013810188355309,4.3379445958178134e-5,2.400589014719376e-8,-0.0012011053959982453,4.367684303151363e-5,2.4190760318183176e-8,-0.0012009120711434845,4.3982426851927915e-5,2.4378686124360526e-8,-0.001200798320179096,4.4258666524398955e-5,2.4547135559008024e-8,-0.0012007483813156155,4.447035815567847e-5,2.4675237441635286e-8,-0.0012007344048218429,4.45904789956841e-5,2.4747373111654414e-8,-0.0012007195396916456,4.4605667043112055E-05,2.475647427648304e-8,-0.0012006630679124704,4.4520319606676825e-5,2.4706349244549025e-8,-0.0012005271433299393,4.435834252862902e-5,2.4612444809990292e-8,-0.0012002844344340745,4.416178423355356e-5,2.450065938028214e-8,-0.0011999257549066937,4.39856842762662e-5,2.4403951995426074e-8,-0.0011994662184232547,4.3888471317910234e-5,2.435650342589999e-8,-0.001198947460842372,4.3917923813857226e-5,2.43855173915342e-8,-0.001198432684587654,4.409482178445086e-5,2.4501884310528832e-8,-0.0011979921332492878,4.43998509534339e-5,2.469284335350204e-8,-0.00119768078598594,4.4772044938470945e-5,2.492136091235081e-8,-0.0011975168459692923,4.512476493318901e-5,2.5135693210741254e-8,-0.00119747326559844,4.53756385533257e-5,2.528710231716238e-8,-0.0011974888649364393,4.547604253094459e-5,2.5347319618533324e-8,-0.0011974930862349044,4.542451975687877e-5,2.5316491092253453e-8,-0.0011974302262546881,4.525952548655604e-5,2.5218719541367353e-8,-0.0011972721728209824,4.5039793706352555e-5,2.509006550443868e-8,-0.0011970183063790395,4.48245155389913e-5,2.4966396418741908e-8,-0.001196687932279745,4.4660550904328974e-5,2.487559033145641e-8,-0.0011963111623788396,4.457738285834904e-5,2.4834604037411308e-8,-0.0011959215436754737,4.45871920184613e-5,2.4849769736576936e-8,-0.0011955511692190652,4.468712727908596e-5,2.4918432734679642e-8,-0.0011952275920148667,4.486193679281758e-5,2.5030717037665653e-8,-0.001194971551310585,4.508639373150898e-5,2.5171047327290172e-8,-0.001194794863314542,4.5327777567539424e-5,2.5319623085596163e-8,-0.001194698341899172,4.554901617532855e-5,2.5454274898017947e-8,-0.0011946701458042791,4.5713081220382614e-5,2.555310251854561e-8,-0.0011946854231435274,4.5788787339589856e-5,2.5597980508971714e-8,-0.0011947082714650892,4.575734391539159e-5,2.5578493326096783e-8,-0.0011946966519119835,4.561819225984636e-5,2.5495358009355167e-8,-0.0011946100335258174,4.539218001394653e-5,2.536213072497259e-8,-0.0011944184455051122,4.512031317912244e-5,2.5204163446924352e-8,-0.0011941107653257608,4.485734384224478e-5,2.5054453515492776e-8,-0.0011936999083235803,4.466088478508766e-5,2.4946937452023213e-8,-0.0011932230592092813,4.457796164782929e-5,2.4908499047797812e-8,-0.001192735881163747,4.463180004644925e-5,2.4951402925395812e-8,-0.0011923007264965835,4.481237616870531e-5,2.506816181625162e-8,-0.001191970530689217,4.507461064861558e-5,2.523093820360962e-8,-0.0011917724140860335,4.5347229185161454e-5,2.5397066980609755e-8,-0.0011916972032087528,4.5552150560644986e-5,2.552053976524705e-8,-0.0011917008223672682,4.5628853227269786e-5,2.55662585680403e-8,-0.001191718836140086,4.55536438037028e-5,2.5521241678494558e-8,-0.0011916882079971906,4.534483429463704e-5,2.5397506076360736e-8,-0.0011915661764232738,4.50523352358896e-5,2.52256885925892e-8,-0.0011913387387294007,4.47385355732246e-5,2.504346293478613e-8,-0.0011910180546011024,4.446011631860293e-5,2.4884567965759092e-8,-0.0011906333941084394,4.425692301702829e-5,2.4772196056940904e-8,-0.0011902211184680275,4.414860982271032e-5,2.4717178867113547e-8,-0.0011898169790774708,4.4136455261757274e-5,2.4719329452121577e-8,-0.0011894514485054754,4.420725000515381e-5,2.4769977404092045e-8,-0.0011891472970888017,4.43372203473938e-5,2.4854416724191735e-8,-0.0011889182539292847,4.449528806773453e-5,2.4953861754942293e-8,-0.0011887678749798924,4.464592966057503e-5,2.504712463555681e-8,-0.0011886883030289687,4.4752380198887884e-5,2.5112510632544797e-8,-0.0011886592771498138,4.478098874931083e-5,2.5130424449580425e-8,-0.0011886483992062577,4.4707117457076194e-5,2.5086889829383304e-8,-0.0011886140329250244,4.4522010180780784e-5,2.4977592415005244e-8,-0.0011885119078034235,4.4238713784012066e-5,2.4811273251672534e-8,-0.0011883051844906306,4.3894051675223444e-5,2.461069041472246e-8,-0.0011879756183442926,4.354386275480496e-5,2.4409531085824178e-8,-0.0011875317045031677,4.3250911754683235e-5,2.4244998266980886e-8,-0.001187009814984017,4.306830808202916e-5,2.4147865942933328e-8,-0.0011864667588603476,4.302388062774488e-5,2.4133330210664937e-8,-0.0011859656180111609,4.3111034611001064e-5,2.4195943412766552e-8,-0.0011855592107146609,4.328925296709795e-5,2.4310387221332328e-8,-0.0011852761111206852,4.349413359054941e-5,2.443782423047731e-8,-0.0011851131455521931,4.3654131747047644e-5,2.4535986395746288e-8,-0.0011850365116463047,4.370946428713365e-5,2.4570271546609728e-8,-0.0011849914632903148,4.362784368851426e-5,2.4522773768495008e-8,-0.001184917896100419,4.341215487751708e-5,2.43964861556252e-8,-0.0011847668283073867,4.3097519747167916e-5,2.4213256739576758e-8,-0.001184512183165127,4.273915270154866e-5,2.400637699709233e-8,-0.001184154359433377,4.239606712181469e-5,2.381082880477647e-8,-0.001183715829325232,4.211673537541401e-5,2.3654834718410355e-8,-0.001183232091457753,4.193072848064575e-5,2.355508585492585e-8,-0.001182742076052658,4.184692919527811e-5,2.351593181722576e-8,-0.001182280783554334,4.185637277082278e-5,2.3531280291149167e-8,-0.0011818749650736491,4.193705913158789e-5,2.3587563717348847e-8,-0.0011815412371566454,4.20587459208501e-5,2.3666591547139997e-8,-0.001181285518418681,4.218688550045602e-5,2.374784651401943e-8,-0.0011811028444095974,4.2285853886151184e-5,2.381037385561812e-8,-0.001180977123076948,4.232217251513254e-5,2.3834703066651765e-8,-0.0011808810539391222,4.2268560697046846e-5,2.3805269882627502e-8,-0.0011807771612472478,4.2109361969074505e-5,2.3713602572318883e-8,-0.0011806214602274067,4.1846957049957275e-5,2.356200196449372e-8,-0.0011803711677501327,4.150714518977967e-5,2.3366529209186637e-8,-0.0011799963986054275,4.113978509884284e-5,2.3157162420999488e-8,-0.0011794927933482826,4.08108363408142e-5,2.2972909369344754e-8,-0.0011788890049142986,4.058504354233647e-5,2.2851491515976213e-8,-0.0011782430294203484,4.050438512482597e-5,2.2816671906510717e-8,-0.0011776263052778516,4.0571991173592686e-5,2.2868981508891815e-8,-0.0011771016155169122,4.074982996867079e-5,2.2984703383283737e-8,-0.0011767044632477951,4.097122380197114e-5,2.3123630234264177e-8,-0.0011764349839248737,4.1161829736862925e-5,2.3241707139593455e-8,-0.0011762614801303043,4.1260299791107996e-5,2.330328303434297e-8,-0.0011761320404088328,4.1232336783918625e-5,2.328924297558214e-8,-0.0011759893133244327,4.1075838938516295e-5,2.3199711124094704e-8,-0.0011757842580515552,4.081779203779472e-5,2.3051819147004552e-8,-0.001175486057786376,4.050513963720658e-5,2.2873984543674025e-8,-0.0011750866908770193,4.0192525827399625e-5,2.2698514425147638e-8,-0.0011745998913217442,3.9930000443378806e-5,2.2554401861589946e-8,-0.0011740555181366963,3.975350915748105e-5,2.2461942074838184e-8,-0.0011734914447389271,3.967996159531561e-5,2.2430123462058758e-8,-0.001172945410878914,3.970705295686038e-5,2.245677720924922e-8,-0.0011724486794790487,3.981662159239835e-5,2.2530685939862905e-8,-0.0011720222605774908,3.997974255206267e-5,2.263458529327139e-8,-0.0011716754580197422,4.0161947727554296e-5,2.274816904236688e-8,-0.0011714059108263474,4.032766224367516e-5,2.285064391621753e-8,-0.0011712002787532773,4.044378850159482e-5,2.2922839703133115e-8,-0.001171035100466492,4.048293650443117e-5,2.2949153547451752e-8,-0.0011708778846540614,4.042697766162125e-5,2.2919658210313572e-8,-0.0011706891457959967,4.0271429475899425e-5,2.2832600750891778e-8,-0.001170426728995793,4.0030416719605716e-5,2.269711830719015e-8,-0.0011700538042031948,3.9740414742010276e-5,2.253517245414926e-8,-0.0011695506069301434,3.945916078722506e-5,2.2380689483545792e-8,-0.0011689268944945577,3.9255517922141815e-5,2.227353935744273e-8,-0.001168228173677312,3.918909798715985e-5,2.224769728531718e-8,-0.0011675279781217165,3.9285907063139966e-5,2.2317220439852915e-8,-0.0011669049542857158,3.952322670802093e-5,2.24676871654407e-8,-0.0011664145207980038,3.9834885125080155e-5,2.265953681114611e-8,-0.001166070295452867,4.013563731944959e-5,2.2842517129925196e-8,-0.0011658440641923867,4.035108613749354e-5,2.2973299450432576e-8,-0.0011656808972777184,4.043846993678506e-5,2.302764914878378e-8,-0.0011655191438936243,4.039246802510346e-5,2.300366653105076e-8,-0.0011653067613803536,4.023909875147127e-5,2.291788321046429e-8,-0.001165010689103841,4.002390781978695e-5,2.2797942341975254e-8,-0.0011646197556137458,3.979940906101893e-5,2.2674938420648966e-8,-0.0011641429633779334,3.961443280877213e-5,2.2577103601577477e-8,-0.0011636049134929856,3.950632417993853e-5,2.252541402741315e-8,-0.0011630396411959254,3.9496218494349576e-5,2.253115281543781e-8,-0.001162483900516477,3.95874667786907e-5,2.2595320378682432e-8,-0.0011619709327954436,3.976699600781008e-5,2.2709638135691125e-8,-0.0011615255979191684,4.000893838449559e-5,2.2858712233979922e-8,-0.0011611613858706039,4.0279582776409567e-5,2.3022849008527116e-8,-0.001160879376169587,4.054263299169933e-5,2.3181024514051384e-8,-0.0011606687592218374,4.076394687408465e-5,2.3313608208272293e-8,-0.0011605083240079387,4.09154288041749e-5,2.3404666156265128e-8,-0.00116036847554564,4.097823517679709e-5,2.34438834621506e-8,-0.0011602136824594566,4.0945659648512586e-5,2.3428227761797474e-8,-0.0011600057215318002,4.0826012397539306e-5,2.3363471925632195e-8,-0.0011597086232655231,4.0645264473458956e-5,2.326545539839303e-8,-0.0011592962457193116,4.0447999006798314e-5,2.3160337368834338e-8,-0.00115876229853727,4.0293821820255384e-5,2.3082332980724006e-8,-0.0011581301558147067,4.0245920350732926e-5,2.3067127381392428e-8,-0.0011574563121098651,4.035081622828792e-5,2.3140425634618856e-8,-0.0011568199270357543,4.061526212816023e-5,2.3304961265381497e-8,-0.0011562968471505665,4.099409631845051e-5,2.353376588241085e-8,-0.0011559290458727804,4.140161770840252e-5,2.3776854904296303e-8,-0.0011557078806939019,4.1744238983237644e-5,2.3980097768470524e-8,-0.0011555814912751524,4.195588110422897e-5,2.4105697188319998E-08,-0.001155479481195814,4.201658493401853e-5,2.4142985129680127e-8,-0.00115533863075793,4.194919447273282e-5,2.4106395513946268e-8,-0.0011551182129401877,4.1802901903976074e-5,2.4025610864818883e-8,-0.0011548035981328402,4.163510488935334e-5,2.3934641492285587e-8,-0.0011544024679921467,4.149790402491649e-5,2.3863731188845464e-8,-0.0011539381598193543,4.143037373269924e-5,2.3834886083816383e-8,-0.0011534428504190312,4.145529592249755e-5,2.3860242372633465e-8,-0.0011529515734318722,4.157867605802834e-5,2.3942156152824156e-8,-0.001152497126030711,4.17910018793201e-5,2.407424330087287e-8,-0.00115210581430915,4.2069853360416185e-5,2.4243037050196697e-8,-0.001151794185245135,4.238365328686831e-5,2.4430139497299415e-8,-0.0011515669930675036,4.269628302794372e-5,2.461478437537122e-8,-0.0011514166348674099,4.2972125399724006e-5,2.4776661433350763e-8,-0.0011513241096236361,4.318091082678523e-5,2.4898702175336794e-8,-0.0011512612721551612,4.330181717597658e-5,2.496949457208967e-8,-0.001151194039557355,4.332656629776271e-5,2.4985098203453446e-8,-0.0011510862887999457,4.326145348232724e-5,2.4950132422663092e-8,-0.0011509043845628019,4.312830423117919e-5,2.4878096818187747e-8,-0.0011506225888506414,4.296414251839801e-5,2.4790856099194497e-8,-0.0011502295873348479,4.281860836006933e-5,2.4716871495239724e-8,-0.0011497354598191344,4.27473669523015e-5,2.4687324428481763e-8,-0.0011491767132249047,4.27998987093043e-5,2.4729297172923822e-8,-0.0011486149745644995,4.300208635109734e-5,2.4856210146960896e-8,-0.0011481242788471762,4.333890754543513e-5,2.505836780419132e-8,-0.0011477663805973333,4.37484335258334e-5,2.529978271595454e-8,-0.0011475638693054652,4.413754488074797e-5,2.552713565537854e-8,-0.0011474880690233208,4.441675095791563e-5,2.5689536506059154e-8,-0.0011474716437174161,4.4535329714636256e-5,2.5758576446798924e-8,-0.0011474381423005444,4.4496153607781065e-5,2.573686319342581e-8,-0.0011473298248947472,4.434525522139947e-5,2.5651963688180006e-8,-0.0011471206519927625,4.4148021131686344e-5,2.5542431090685233e-8,-0.0011468143867924144,4.396712744434881e-5,2.5444745012451112e-8,-0.001146435178096694,4.384958556407789e-5,2.538566338712817e-8,-0.0011460173053052653,4.382244135856911e-5,2.537984964690841e-8,-0.0011455972066733823,4.389369052636168e-5,2.543072424927479e-8,-0.001145208205189756,4.4055310810386594e-5,2.553258147049571e-8,-0.0011448771116926027,4.4286732802865605e-5,2.5672846892049696e-8,-0.001144621838537778,4.455834866317327e-5,2.5834176207532318e-8,-0.0011444496596464482,4.483524010238264e-5,2.5996533958276677e-8,-0.0011443561757723407,4.508136367107901e-5,2.6139484084071172e-8,-0.001144325302176957,4.526422796836885e-5,2.624479996609313e-8,-0.0011443306796744088,4.5359678801102835e-5,2.629920696942144e-8,-0.001144338684074093,4.535607232962796e-5,2.6296805202445227e-8,-0.0011443128443530714,4.525711697688811e-5,2.6240674007741413e-8,-0.0011442192204715602,4.5082805045375516e-5,2.6143256225398415e-8,-0.0011440321422607781,4.4868033997148654e-5,2.6025290536327584e-8,-0.0011437397009143968,4.465876200865301e-5,2.5913293776335838e-8,-0.0011433483936894827,4.450556201387472e-5,2.5835666573269417e-8,-0.0011428859132346458,4.4454301330230345e-5,2.5817407374967364e-8,-0.0011424002463549068,4.4534205124580296e-5,2.587362598157788e-8,-0.0011419527122034946,4.474530750720313e-5,2.600289980431649e-8,-0.0011416033368196802,4.505002810376823e-5,2.618294554588382e-8,-0.001141390428908636,4.5375931822066494e-5,2.6372385764556846e-8,-0.0011413123883100827,4.5634818511907473e-5,2.6521473534591453e-8,-0.001141323589395823,4.5754058078499044e-5,2.6589641295518906e-8,-0.0011413505127724332,4.570482861131677e-5,2.65614039044391e-8,-0.0011413207093381398,4.5510745451041515e-5,2.6451239643199213e-8,-0.001141188094617734,4.523323032317512e-5,2.6295158823665544e-8,-0.0011409425267060696,4.494512245552072e-5,2.613539055975473e-8,-0.0011406039242835295,4.470782444666231e-5,2.6007055239340012e-8,-0.001140209199720666,4.455976514490526e-5,2.5931497221064563e-8,-0.0011397998215520568,4.451513360626569e-5,2.591575701768682e-8,-0.001139413450043509,4.456814837601221e-5,2.595536246540539e-8,-0.0011390795966643849,4.469876670368622e-5,2.60379203690528e-8,-0.0011388178217883774,4.487777100093782e-5,2.614620234117578e-8,-0.001138637029323737,4.507087406977781e-5,2.6260499784491232e-8,-0.0011385351171898522,4.524231213375679e-5,2.636058011508952e-8,-0.001138498908997064,4.5358536475447353e-5,2.6427687830903223e-8,-0.001138504742717813,4.539239795883406e-5,2.6446876610957435e-8,-0.0011385203577618363,4.5327686077719404e-5,2.6409596426616204e-8,-0.001138508626476679,4.5163215308385346e-5,2.6316020938140107e-8,-0.001138433164520453,4.491524922861346e-5,2.617635271007851e-8,-0.0011382651611644248,4.461705208805853e-5,2.60103768433134e-8,-0.0011379901212315725,4.431475914112068e-5,2.5844832363761734e-8,-0.0011376128472153897,4.405962607495448e-5,2.5708742448517676e-8,-0.0011371591432191399,4.38977377850055e-5,2.5627459120037902e-8,-0.0011366732292220137,4.385892899825392e-5,2.561652405049774e-8,-0.0011362103950232623,4.394710877414942e-5,2.5676581411835278e-8,-0.0011358251542952108,4.413475261191414e-5,2.5790765942044402e-8,-0.0011355565320898134,4.436471443508226e-5,2.5926126309661128e-8,-0.0011354142388612493,4.456177182242592e-5,2.6040272006294392e-8,-0.0011353715564004837,4.4653360616528623e-5,2.6092925147649926e-8,-0.0011353705510015804,4.459362909579968e-5,2.605922322764486e-8,-0.0011353404038372476,4.4380227560943225e-5,2.5938971302698022e-8,-0.0011352217466509087,4.405454262243014e-5,2.5756616732937143e-8,-0.0011349852948189293,4.368490247039827e-5,2.5551578991552723e-8,-0.0011346366674042077,4.334216194977203e-5,2.5364227495662016e-8,-0.001134208126523297,4.307971922662928e-5,2.5224447033233243e-8,-0.0011337443916172296,4.292448780803408e-5,2.5146609857361533e-8,-0.0011332897864486306,4.287791196077834e-5,2.5130427988720302e-8,-0.0011328801743606684,4.292232941936807e-5,2.5164886702881576e-8,-0.0011325395437544183,4.302832693352377e-5,2.5232645329543546e-8,-0.0011322795036267984,4.316082969546979e-5,2.5313558114926845e-8,-0.0011320999644248192,4.328354167402069e-5,2.538712994851353e-8,-0.0011319900022255828,4.336233306022805e-5,2.5434328063291953e-8,-0.0011319286947636842,4.336840808418778e-5,2.5439298179225213e-8,-0.0011318863330729578,4.328188187579225e-5,2.5391365668682646e-8,-0.001131826798984989,4.309582777844892e-5,2.5287327028303578e-8,-0.0011317119237820342,4.282000536402383e-5,2.513352362103692e-8,-0.0011315081184450266,4.248267021715128e-5,2.4946745756693704e-8,-0.0011311944679122136,4.212855215251888e-5,2.47528810798855e-8,-0.001130770145740669,4.181171313272162e-5,2.458263730132284e-8,-0.0011302581872849279,4.158375073838242e-5,2.446470685820663e-8,-0.0011297031604086858,4.1480108144529596e-5,2.4418045723061402e-8,-0.001129162188693781,4.15087736209508e-5,2.4445738038119535e-8,-0.001128691235841923,4.164541695493883e-5,2.453267453652789e-8,-0.0011283303644603515,4.1837167858544846e-5,2.464812593336712e-8,-0.0011280922029762194,4.201470996660632e-5,2.4752841228200912e-8,-0.0011279572033331556,4.2109977185660934e-5,2.480903447905591e-8,-0.0011278777807429035,4.2074869072542864e-5,2.4790706388729773e-8,-0.0011277911058960631,4.189530837193729e-5,2.4691226160505966e-8,-0.0011276372138476932,4.15954194176583e-5,2.4525357679971217e-8,-0.0011273763094417542,4.1229584247699144e-5,2.4324526909304625e-8,-0.0011269987883137111,4.0865150594873515e-5,2.4126913313744505e-8,-0.0011265246487921932,4.056282496645149e-5,2.396636013648397e-8,-0.0011259939870450367,4.0362229990203176e-5,2.3864352719984643e-8,-0.0011254538280006646,4.027651035222083e-5,2.3827236887481313e-8,-0.0011249466443459084,4.029509964658356e-5,2.3848081936514294e-8,-0.0011245033782163948,4.0390924133027086e-5,2.3910968573532058e-8,-0.0011241409403492657,4.052829514471608e-5,2.3995517170635476e-8,-0.00112386263638038,4.066934213518109e-5,2.4080458369857855e-8,-0.001123659844043524,4.077852227744454e-5,2.4146059818045725e-8,-0.0011235138537491161,4.082575535334954e-5,2.417579891950277e-8,-0.0011233975399612892,4.078906093563617e-5,2.4157813543967808e-8,-0.0011232772130354719,4.065741806846923e-5,2.4086515680471002e-8,-0.0011231154772805123,4.043402590037051e-5,2.3964410167377178e-8,-0.0011228760409062776,4.0139252991621545e-5,2.380366568263808e-8,-0.0011225309508780508,3.9811507466245704e-5,2.362643573893063e-8,-0.0011220694021852218,3.9503593998477884e-5,2.3462607402847364e-8,-0.0011215052868612503,3.927276808058977e-5,2.334405693151438e-8,-0.0011208791815421717,3.916532907922445e-5,2.32959719470691e-8,-0.0011202512996662164,3.9200465609938846e-5,2.332793726446843e-8,-0.001119685750452599,3.936055511280073e-5,2.3428801926640012e-8,-0.0011192313624241938,3.959351310628623e-5,2.3568365483427852e-8,-0.0011189067970222813,3.982728786145331e-5,2.370580293829856e-8,-0.0011186957125675833,3.9990849821071303e-5,2.380156013682102e-8,-0.0011185529359586416,4.003380335406222e-5,2.382827657042045e-8,-0.0011184183604654927,3.9938559297950844e-5,2.3777363910180102e-8,-0.0011182335261142832,3.972257873820071e-5,2.365991178424167e-8,-0.0011179561348970367,3.943138742499119e-5,2.3502406776038373e-8,-0.0011175690250342211,3.9125231705559594e-5,2.333898219278873e-8,-0.0011170818909624026,3.8863484851492184e-5,2.3202592856615218e-8,-0.0011165261146400343,3.869113689297805e-5,2.3117576365828163e-8,-0.0011159450191786187,3.863070018781825e-5,2.309541688994295e-8,-0.001115382950846316,3.8680782729081375e-5,2.3134291481037248e-8,-0.0011148763323054643,3.88202433349568e-5,2.3221657136516122e-8,-0.0011144484116093652,3.9015366788503146e-5,2.333836405534532e-8,-0.0011141077300649053,3.922741200952648e-5,2.3462821981382622e-8,-0.0011138492060015412,3.941880989590515e-5,2.357433208540127e-8,-0.0011136564631223104,3.955748183796071e-5,2.3655382121537695e-8,-0.001113504398766395,3.961966181875024e-5,2.3693174947865333e-8,-0.0011133616119702572,3.9591985478981636e-5,2.3680806672121074e-8,-0.0011131929173312004,3.9473502927766754e-5,2.3618399758240768e-8,-0.001112962646214551,3.927781992830418e-5,2.3514237054040706e-8,-0.0011126396430199091,3.903476453581059e-5,2.338553477815076e-8,-0.0011122044622860591,3.878987372235069e-5,2.325794563447264e-8,-0.0011116579050496058,3.859916050478475e-5,2.3162471082326266e-8,-0.0011110277638066819,3.8517161490373446e-5,2.3128770665243614e-8,-0.0011103686318442126,3.857932217863279e-5,2.317550345585091e-8,-0.0011097504345893342,3.878498007287958e-5,2.3301147042226735e-8,-0.0011092368658773112,3.909083067031221e-5,2.348067606937274e-8,-0.001108862561025627,3.9421677057301995e-5,2.3671766690779e-8,-0.0011086207894536008,3.969541345367182e-5,2.3828789988108746e-8,-0.001108467784835197,3.9850203582443234e-5,2.3917930158623212e-8,-0.0011083400223898265,3.986149013467848e-5,2.3926558339224554e-8,-0.0011081749835332257,3.9744019406875444e-5,2.3864144977322292e-8,-0.0011079272311021648,3.954206227866765e-5,2.3756473773474773e-8,-0.0011075764036130426,3.9314276041815806e-5,2.3636846724881514e-8,-0.0011071276513506274,3.911872082508301e-5,2.353751460723729e-8,-0.001106606712234522,3.9001210256697606e-5,2.3483218868648787e-8,-0.0011060519911277476,3.8988244203939216e-5,2.3487531140898155e-8,-0.001105505670300844,3.908468395961993e-5,2.3551953376769463e-8,-0.001105005565791467,3.927568764132802e-5,2.3667339954019526e-8,-0.0011045790708096976,3.9531788880221474e-5,2.3816896490402398e-8,-0.0011042398847317478,3.9815546406795756e-5,2.397985579796228e-8,-0.0011039874767033147,4.008822786866677e-5,2.413504494817365e-8,-0.0011038086569949937,4.031539899273079e-5,2.4263827315283715e-8,-0.0011036803427045844,4.047087645509333e-5,2.4352204679952328e-8,-0.0011035726966564098,4.053916604625667e-5,2.4392162684179795e-8,-0.0011034522434320714,4.051692930416066e-5,2.438250815301555e-8,-0.0011032850399023103,4.041397991610771e-5,2.4329393420554233e-8,-0.0011030403485004744,4.0253960514007384e-5,2.424655679752155e-8,-0.001102695483905325,4.0074227905403326e-5,2.415503580398189e-8,-0.001102242193580227,3.992352368685253e-5,2.4081660659305638e-8,-0.0011016936673696796,3.985525563697915e-5,2.4055253488353385e-8,-0.0011010891641663526,3.991473667135059e-5,2.409971221190807e-8,-0.0011004912378463276,4.012168328025906e-5,2.422468321626409e-8,-0.0010999711538006204,4.045477360482803e-5,2.4417430252093232e-8,-0.0010995842055226655,4.084938248726866e-5,2.4641830821643385e-8,-0.0010993460929871167,4.121581701041971e-5,2.484844677700392e-8,-0.0010992250658169746,4.1472215284716905e-5,2.4992557013455944e-8,-0.0010991556460179283,4.1574464276116506e-5,2.505058969589844e-8,-0.0010990652089385281,4.1527398961356164e-5,2.5026265284520233e-8,-0.001098898156768374,4.1375312448001e-5,2.4945200752454744e-8,-0.0010986280334354423,4.118167475058328e-5,2.484337320183111e-8,-0.0010982574815838655,4.100937470290851e-5,2.4755843824772127e-8,-0.0010978110406426043,4.090738485072404e-5,2.4709226856153248e-8,-0.0010973257121964122,4.0904499228446404e-5,2.471836767874099e-8,-0.0010968421791160742,4.10083665738254e-5,2.4786177550209052e-8,-0.0010963977347210852,4.120779805968306e-5,2.4905329142025246e-8,-0.0010960210677344888,4.147702335351955e-5,2.506090255556026e-8,-0.0010957289251758702,4.178110279291195e-5,2.5233456325869303e-8,-0.001095524697387541,4.2081778366454555e-5,2.540215364575196e-8,-0.0010953988246681838,4.2343079153780506e-5,2.5547670181248777e-8,-0.0010953307583887954,4.253610901231246e-5,2.5654681311269465e-8,-0.0010952920447938042,4.264254236325311e-5,2.571372890267199e-8,-0.0010952499739452775,4.2656633559821643e-5,2.5722338660353446e-8,-0.0010951713587064734,4.2585944785351156e-5,2.5685421940828945e-8,-0.0010950263137780906,4.245110365085979e-5,2.5615053368196092e-8,-0.001094792159453469,4.2284683294743016e-5,2.5529653777638224e-8,-0.0010944577225138132,4.212890345796607e-5,2.5452477208888395e-8,-0.0010940280855575993,4.2031223829935575e-5,2.5409021613321293e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json new file mode 100644 index 0000000..3a71254 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":5000,"numberOfSamples":1000,"samples":[-0.001093528836966317,4.203642676149489e-5,2.5422725793163846e-8,-0.0010930072646208094,4.217440867148639e-5,2.5508574660559997e-8,-0.0010925265640548522,4.2445448281040656e-5,2.566549440168746e-8,-0.0010921498584701538,4.280927315836898e-5,2.5870776828536737e-8,-0.0010919163003251823,4.318794211770871e-5,2.6081780444674054e-8,-0.001091820523294629,4.348883154959585e-5,2.624831762871915e-8,-0.00109181029138295,4.364045659227296e-5,2.6331989440280285e-8,-0.0010918072934319603,4.362110831307491e-5,2.6321766949888615e-8,-0.0010917391971531742,4.346321105608486e-5,2.6236404835428295e-8,-0.0010915640090047574,4.323393624900339e-5,2.611370862534541e-8,-0.0010912766199280236,4.3007345034387695e-5,2.599493426705449e-8,-0.0010909009016498547,4.284299979150903e-5,2.5912727223068096e-8,-0.001090476431342811,4.277625215835485e-5,2.5885719367964947e-8,-0.0010900465218413144,4.2817753215300766e-5,2.5918503099339365e-8,-0.0010896499951765957,4.2957752709860237e-5,2.6004412180594708e-8,-0.0010893164869373976,4.3171842376795946e-5,2.612906955898042e-8,-0.0010890641035068592,4.34265580743787e-5,2.6273675178051805e-8,-0.0010888984776027527,4.3684563677071033e-5,2.6417842719480934e-8,-0.0010888129019089097,4.3909513777838174e-5,2.65421057988998e-8,-0.0010887895341848287,4.407054827337014e-5,2.663018859077577e-8,-0.0010888016920848876,4.4146217427231046e-5,2.667102788931276e-8,-0.001088817192482838,4.4127450376416946e-5,2.6660363442769395e-8,-0.0010888024752733671,4.401909753500576e-5,2.6601590837686793e-8,-0.0010887270459753056,4.383981898364833e-5,2.65056658451493e-8,-0.0010885677996571497,4.362036647066958e-5,2.639002532249307e-8,-0.0010883129235325867,4.3400346577718806e-5,2.627658759927833e-8,-0.0010879651578661836,4.322346930498476e-5,2.6188934255361087e-8,-0.001087544097987234,4.313109216854214e-5,2.6148709458164907e-8,-0.001087086674855694,4.315374123594729e-5,2.617116796712862e-8,-0.001086644066498112,4.330094126455337e-5,2.6260046435218025e-8,-0.0010862728381159504,4.3551620609182124e-5,2.640284239026193e-8,-0.00108601928226965,4.38502022017017e-5,2.656903579292576e-8,-0.0010859001135970722,4.411523709589743e-5,2.6714781887700585e-8,-0.0010858889754997796,4.426383145393484e-5,2.6795876138844725e-8,-0.0010859203351680025,4.424423453619814e-5,2.6785128110422738e-8,-0.001085913618912209,4.4058578601592776e-5,2.668460538734044e-8,-0.001085805393800295,4.376072785978275e-5,2.6524487039470494e-8,-0.0010855708545136362,4.343117507166159e-5,2.6349304657863846e-8,-0.0010852250584937636,4.314592290426317e-5,2.620071963961655e-8,-0.0010848090868554553,4.295570916633156e-5,2.6105975798650347e-8,-0.001084372654611788,4.2880291469861494e-5,2.6074830737518084e-8,-0.0010839610398885847,4.291308032542563e-5,2.6102403255115617e-8,-0.0010836081790852113,4.302959653013973e-5,2.6174200961517643e-8,-0.0010833344520610171,4.3195574161869046e-5,2.6270850944433867e-8,-0.001083146945167361,4.3373198164366636e-5,2.637160337223827e-8,-0.0010830405767407777,4.352569954505452e-5,2.645674242392391e-8,-0.0010829995124754573,4.3621083270509026e-5,2.6509425138913995e-8,-0.001082998991414148,4.363548696163819e-5,2.6517334874121295e-8,-0.0010830078695757855,4.3556232067080865e-5,2.6474252100274967e-8,-0.0010829921546684827,4.338421730365343e-5,2.638134536379059e-8,-0.0010829195457739626,4.313495597945831e-5,2.6247737743075178e-8,-0.0010827645199852117,4.2837568459182473e-5,2.6089894868217516e-8,-0.0010825131481838203,4.2531405839397756e-5,2.5929625306960433e-8,-0.0010821667257754604,4.2260415291339646e-5,2.5790800121408916e-8,-0.001081743391863589,4.2065789758412284e-5,2.5695202717475755e-8,-0.0010812771260442285,4.197779093233889e-5,2.5658116797976546e-8,-0.00108081368235774,4.2007788209395396e-5,2.5684279138019833e-8,-0.0010804030553122393,4.214188129809646e-5,2.5764875776401685e-8,-0.0010800884167244415,4.2338329128859495e-5,2.5876603076949472e-8,-0.001079892778156456,4.2531881372048156e-5,2.598424858567189e-8,-0.001079807154698478,4.264767562282009e-5,2.6048107274120274e-8,-0.0010797867060579334,4.262394191909685e-5,2.6035904077434437e-8,-0.001079760973783162,4.243610779021697e-5,2.593546226975552e-8,-0.0010796577282035234,4.210950720238184e-5,2.5761387251077892e-8,-0.00107942993302375,4.171117273294466e-5,2.555057096694696e-8,-0.001079071274203828,4.132383281774707e-5,2.5348037433669575e-8,-0.001078613065447523,4.101676275871758e-5,2.5191031444188244e-8,-0.0010781076445001167,4.082789625905243e-5,2.509930154443339e-8,-0.0010776094725232313,4.076147500814069e-5,2.507401361434535e-8,-0.0010771620659250866,4.079616385676292e-5,2.5102488709573008e-8,-0.001076792527426751,4.089624684549766e-5,2.5164595184415124e-8,-0.001076511483357941,4.102115014348993e-5,2.523807558214155e-8,-0.001076315486299618,4.1131846253385905e-5,2.530198861820359e-8,-0.00107618985214185,4.1194730844247526e-5,2.533864785318205e-8,-0.0010761111699562399,4.118418519494565e-5,2.5334821170315685e-8,-0.0010760496321073894,4.1084740905426734e-5,2.5282775112651636e-8,-0.0010759717151872302,4.089317638698599e-5,2.5181368331821842e-8,-0.0010758437806077928,4.062025720268964e-5,2.5037000465379675e-8,-0.001075636874965737,4.029124488214523e-5,2.4863872287821255e-8,-0.001075332344175619,3.994403311673042e-5,2.4682887122784044e-8,-0.0010749270772761371,3.962409533524119e-5,2.4518755050929554e-8,-0.0010744366625150808,3.937631781230898e-5,2.439541151761965e-8,-0.0010738948032005251,3.92350369958662e-5,2.433057466908826e-8,-0.0010733481764564313,3.9214698025557454e-5,2.433083409288902e-8,-0.0010728472503692334,3.930384295442124e-5,2.4388737863373705e-8,-0.0010724347731497891,3.94645175457536e-5,2.44828950313044e-8,-0.0010721343835682733,3.9638151634969455e-5,2.458148402653822e-8,-0.001071942205574794,3.9757775235519326e-5,2.4648932372444277e-8,-0.001071824440490328,3.976485588304506e-5,2.4654800605721794e-8,-0.0010717234455627444,3.962693202706781e-5,2.4582909766611626e-8,-0.0010715727554048086,3.935008138551149e-5,2.4437676459267312e-8,-0.0010713175244551965,3.8979848282591754e-5,2.4244352737564492e-8,-0.0010709326265880106,3.858785169979547e-5,2.4041693976913273e-8,-0.0010704300073954966,3.8248525783302696e-5,2.386941805332488e-8,-0.0010698520086136918,3.801636200014798e-5,2.375603419291011e-8,-0.0010692550526086402,3.791333074165718e-5,2.371227592816189e-8,-0.0010686922574283954,3.792939556885814e-5,2.3731673323543086e-8,-0.0010682017404291997,3.80320722103819e-5,2.379598347049132e-8,-0.0010678024504110503,3.8178531959137147e-5,2.3881867002065674e-8,-0.001067495548138812,3.832556322890049e-5,2.3966240581430207e-8,-0.001067268273277274,3.843582509864842e-5,2.4029501058277472e-8,-0.0010670980487706369,3.848102746680633e-5,2.4057051807740725e-8,-0.0010669558863532884,3.844342728250387e-5,2.4039967070581163e-8,-0.001066809160826231,3.8316803241082525e-5,2.3975457859135465e-8,-0.0010666243579828204,3.810746586828673e-5,2.386741669396789e-8,-0.0010663705574710293,3.7835149903862285e-5,2.3726898442079206e-8,-0.0010660241691441985,3.753288897009294e-5,2.3571997852970833e-8,-0.0010655747063436035,3.724442359481839e-5,2.3426335194630528e-8,-0.0010650302250668731,3.701779702157739e-5,2.331547794071486e-8,-0.0010644199291991467,3.68949742785659e-5,2.3261297539301097e-8,-0.001063791223981958,3.6899545236002384e-5,2.327544760228617e-8,-0.0010632000453968727,3.7026820203446666e-5,2.335429289972638e-8,-0.0010626963599818942,3.7241111127013385e-5,2.3477789197827204e-8,-0.0010623095681190381,3.748268981872828e-5,2.3613519575245354e-8,-0.0010620391726174265,3.768289862153553e-5,2.3724946388273585e-8,-0.0010618540779868658,3.7782581455481364e-5,2.3781234371721873e-8,-0.0010617006609737272,3.7748061352030124e-5,2.3765573920194672e-8,-0.0010615170480434892,3.758012724746697e-5,2.367965267011593e-8,-0.0010612495768359004,3.731371428715724e-5,2.3543130785882002e-8,-0.0010608669746345562,3.700835235428079e-5,2.3388256328231037e-8,-0.001060368182069979,3.6731912216637085e-5,2.325105313533104e-8,-0.0010597813426304625,3.654245594481344e-5,2.316169727120985e-8,-0.0010591544075762823,3.647402066316346e-5,2.313718174627855e-8,-0.0010585410167500333,3.653074230958909e-5,2.317853751683003e-8,-0.001057986920975386,3.669012758790272e-5,2.327290785733631e-8,-0.0010575211579176061,3.691257472653399e-5,2.339881300069309e-8,-0.001057153350837812,3.715260399430297e-5,2.3532138314401993e-8,-0.0010568758374386459,3.736812754225494e-5,2.365093104713143e-8,-0.0010566681914793606,3.752620921432137e-5,2.3738273286109503e-8,-0.0010565020401735535,3.760563844652094e-5,2.378349597906288e-8,-0.0010563451015339039,3.759754719033252e-5,2.3782437194464704e-8,-0.0010561643423562313,3.750528822528541e-5,2.3737377447389552e-8,-0.001055928777775758,3.734426906295574e-5,2.365696343832137e-8,-0.0010556126783150875,3.714173971895337e-5,2.3556054900511646e-8,-0.0010551998123746519,3.693577609363618e-5,2.3455071168099988e-8,-0.0010546886977346502,3.677200754758798e-5,2.3378106802298378e-8,-0.001054097575413405,3.66964742503015e-5,2.33490503669857e-8,-0.001053466266416154,3.674410830929957e-5,2.338552532428398e-8,-0.0010528513171096396,3.6925144473778674e-5,2.3491902560416617e-8,-0.0010523125721679219,3.721530665965493e-5,2.365441113669717e-8,-0.0010518941136466624,3.7556866487537555e-5,2.384196911473466e-8,-0.001051607652331739,3.787365765176419e-5,2.4014260649323585e-8,-0.0010514271013640408,3.809514403546298e-5,2.4134458275138142e-8,-0.001051297410707953,3.8178799703989044e-5,2.4180962088243847e-8,-0.001051153003686843,3.812136015142763e-5,2.415318391268279e-8,-0.00105093733776516,3.795628189484318e-5,2.4069945427589834e-8,-0.001050616809646753,3.7741095264425834e-5,2.396246019827039e-8,-0.0010501863481547247,3.754067586859115e-5,2.3865199592522806e-8,-0.0010496673073456411,3.7411575394765774e-5,2.380750812194908e-8,-0.0010490998191358019,3.739064048823195e-5,2.380774834712807e-8,-0.0010485322021737509,3.748944550858809e-5,2.38707245777141e-8,-0.0010480100257824426,3.769477583367159e-5,2.398835336975793e-8,-0.0010475672083879396,3.797425178348991e-5,2.4142928600404912e-8,-0.0010472208647171518,3.8285082197056416e-5,2.4311824887822292e-8,-0.0010469704046910332,3.858335909600687e-5,2.4472287017073512e-8,-0.0010468001087383734,3.883168894481607e-5,2.4605240478689e-8,-0.0010466836675630368,3.900401645641016e-5,2.469763622155349e-8,-0.0010465891449321784,3.9087623690885925e-5,2.4743396088065535e-8,-0.00104648333056439,3.908308679776768e-5,2.4743374271449885e-8,-0.0010463351903678341,3.900321589613522e-5,2.4704818833201865e-8,-0.0010461187174899236,3.887169112109677e-5,2.4640634398441143e-8,-0.0010458157657489216,3.872153411276594e-5,2.456847676636226e-8,-0.0010454194198092652,3.8592904649491364e-5,2.4509434847279802e-8,-0.0010449379598351336,3.85290470767447e-5,2.4485769249212857e-8,-0.0010443983417922637,3.8568960460999586e-5,2.4517067123617403e-8,-0.0010438466104127784,3.8736263817727636e-5,2.4614598497805885e-8,-0.0010433416549984493,3.902636136480175e-5,2.477493404220497e-8,-0.0010429399987465788,3.9398027050649106e-5,2.4975871277955936e-8,-0.0010426746362297934,3.9777843434769186e-5,2.5178904654138547e-8,-0.0010425380922074639,4.0081503788804406e-5,2.5340291710930592e-8,-0.0010424814444555638,4.0244644241275436e-5,2.5427023133151833e-8,-0.0010424322947735387,4.024690202392131e-5,2.5429321392407133e-8,-0.0010423219582340482,4.01162830340403e-5,2.5362869290134385e-8,-0.0010421073140257824,3.9914219183457514e-5,2.526080398688154e-8,-0.0010417790504298643,3.9712303792083824e-5,2.5161204349048078e-8,-0.001041357514815806,3.957206053756882e-5,2.509620077309175e-8,-0.0010408820867983744,3.953305791576254e-5,2.5085701841939114e-8,-0.0010403994183290342,3.960922925354849e-5,2.5135719972456448e-8,-0.001039953473752625,3.979097235888994e-5,2.5239903766051643e-8,-0.0010395783534878653,4.005056096735985e-5,2.538278306056733e-8,-0.0010392939602767437,4.034918264408066e-5,2.5543680164653243e-8,-0.001039104389012981,4.0644480901831106e-5,2.5700644896490313e-8,-0.0010389988421567525,4.089757785496551e-5,2.5833941072896978e-8,-0.0010389545970551956,4.107865514075927e-5,2.5928726316951552e-8,-0.0010389412824983889,4.11705030871186e-5,2.5976731161695342e-8,-0.001038925600905446,4.116986580467381e-5,2.5976894786312716e-8,-0.0010388757116827172,4.108687415422475e-5,2.5935077860987764e-8,-0.0010387648487817887,4.094320887370908e-5,2.586310945168862e-8,-0.0010385741873378635,4.0769583233729096e-5,2.5777407288912374e-8,-0.0010382952268426782,4.0602784133407614e-5,2.569728649515853e-8,-0.0010379320091739295,4.04820837611387e-5,2.564292327050562e-8,-0.0010375031926033312,4.0444330838904017e-5,2.56327270085341e-8,-0.0010370431136598767,4.0516825192555824e-5,2.5679750881275533e-8,-0.0010365998252919112,4.07078727032145e-5,2.5787103029239512e-8,-0.0010362274507746704,4.0997023108730364e-5,2.59432896351184e-8,-0.0010359711779905647,4.133023718538513e-5,2.6120005918730713e-8,-0.0010358476721283505,4.1627586877103866e-5,2.6276137158887212e-8,-0.0010358308191826967,4.180745449119192e-5,2.6370052259346927e-8,-0.0010358552027499252,4.18193769451226e-5,2.6376375102413223e-8,-0.0010358403135057738,4.166678727036104e-5,2.6297719124715485e-8,-0.0010357228189093813,4.140456572009227e-5,2.6163449539399887e-8,-0.0010354780401623975,4.111391003936417e-5,2.6016503918615263e-8,-0.0010351214402610947,4.0871490524131414e-5,2.5897043112633257e-8,-0.0010346952781462417,4.0728626709958974e-5,2.5831362930703574e-8,-0.0010342513894169626,4.070496768499591e-5,2.582864079884688e-8,-0.0010338376130666347,4.0792468598692156e-5,2.588333975697396e-8,-0.001033489928572441,4.09637112677769e-5,2.5979990127741127e-8,-0.0010332292836012598,4.118057987218832e-5,2.6098059615421084e-8,-0.0010330613284611158,4.140165888760393e-5,2.6215931638488723e-8,-0.0010329777530100068,4.158819846524718e-5,2.631390656871405e-8,-0.0010329586810779521,4.170886241656704e-5,2.6376437158564403e-8,-0.001032975936317296,4.1743274993385874e-5,2.6393736765147437e-8,-0.0010329969885598913,4.168421213030391e-5,2.636277559384442e-8,-0.0010329892783965391,4.153821954893292e-5,2.62875676595281e-8,-0.0010329244588995863,4.132454750884092e-5,2.6178635261370543e-8,-0.001032782060381272,4.10726094101633e-5,2.6051674387741775e-8,-0.0010325522769319654,4.0818357819433007e-5,2.5925576579428118e-8,-0.0010322377709549141,4.0599882712942876e-5,2.5819988038191913e-8,-0.0010318544785740738,4.045240035953763e-5,2.575258468299546e-8,-0.001031431325710975,4.0402610592020545e-5,2.5736166079833738e-8,-0.0010310082903914864,4.04622844238969e-5,2.577556155474702e-8,-0.0010306315696239265,4.062155526853457e-5,2.586455506912295e-8,-0.0010303445107737654,4.084394736602622e-5,2.5983723580936618e-8,-0.00103017415051348,4.106712011714914e-5,2.6101034286724267e-8,-0.00103011645990442,4.121429379152592e-5,2.617762452180817e-8,-0.0010301283373702107,4.1218183604357294e-5,2.617978519094077e-8,-0.0010301360479824519,4.1049891214193474e-5,2.6093535091742128e-8,-0.0010300617418679534,4.073592787552085e-5,2.5933314593629573e-8,-0.0010298552834028627,4.0349707833675383e-5,2.5737635695545288e-8,-0.0010295123624857808,3.9981058901976845e-5,2.555325702866578e-8,-0.0010290699371210256,3.970266737753418e-5,2.541762182017323e-8,-0.0010285862799355606,3.95510226577242e-5,2.5348871652570656e-8,-0.001028119665030133,3.952567217658717e-5,2.5345604153804084e-8,-0.0010277146398166707,3.9599592103778894e-5,2.5392608827923747e-8,-0.0010273969445857086,3.9732019239784237e-5,2.54679029136312e-8,-0.0010271741439923543,3.987889635605635e-5,2.554837330653049e-8,-0.0010270387420002831,3.999979218338487e-5,2.5613362144150908e-8,-0.0010269717730998133,4.006209216467498e-5,2.564665439659544e-8,-0.0010269462335600545,4.004361181148552e-5,2.563758062373979e-8,-0.001026930475247916,3.993429582593155e-5,2.5581696150718296e-8,-0.0010268917955752411,3.9737131056284514e-5,2.54811632465487e-8,-0.0010268003254188763,3.946803547779058e-5,2.5344696049297998e-8,-0.001026633045285693,3.9154302349015926e-5,2.51867793373167e-8,-0.001026377413673644,3.883136780108241e-5,2.502596843310329e-8,-0.0010260339595217747,3.8538067531633994e-5,2.4882331374804033e-8,-0.00102561729797183,3.8310807330376756e-5,2.477430480252826e-8,-0.0010251551932449294,3.8177261675103885e-5,2.471538175976041e-8,-0.001024685487708184,3.8150384280356484e-5,2.4711128828705612e-8,-0.0010242508292970316,3.822352571453758e-5,2.475696413222644e-8,-0.0010238910923221203,3.836763523516221e-5,2.4837113045173785e-8,-0.0010236336767047106,3.853222377882937e-5,2.492543131105467e-8,-0.0010234830537858264,3.865239008611646e-5,2.49891058187856e-8,-0.0010234129983969168,3.8663590948988006e-5,2.4996031285257513e-8,-0.0010233670245726736,3.852273512816904e-5,2.492524814844594e-8,-0.001023271959887443,3.822833359285693e-5,2.4776942964655382e-8,-0.0010230632432314934,3.782769524653137e-5,2.4575998844550145e-8,-0.0010227107525744934,3.740279961889332e-5,2.436473371991324e-8,-0.0010222302402959167,3.703969137491942e-5,2.418716232193019e-8,-0.0010216740030515826,3.6798124988745376e-5,2.4073362152007457e-8,-0.001021108290579188,3.669683896443461e-5,2.4031974626159863e-8,-0.0010205912572348655,3.6717350983459955e-5,2.4052398420585333e-8,-0.0010201604372997207,3.681830406381751e-5,2.411249122180296e-8,-0.0010198303307530497,3.6950727918991715e-5,2.418666800590093e-8,-0.0010195960756659162,3.706898533184759e-5,2.4251597017513103e-8,-0.001019439056359185,3.713670445797552e-5,2.4289132019925126e-8,-0.001019332059571601,3.7129221763336125e-5,2.428734485125245e-8,-0.0010192433493335681,3.70343141516297e-5,2.4240686043212892e-8,-0.0010191400194511332,3.685229866278754e-5,2.4149908608415946e-8,-0.0010189911883879065,3.659580376531763e-5,2.402192783224623e-8,-0.0010187714343872375,3.628895436908966e-5,2.3869435845986977e-8,-0.0010184645132939021,3.596533710163379e-5,2.3709873676371996e-8,-0.001018066855839815,3.566412672527142e-5,2.3563393719128077e-8,-0.0010175898667280023,3.542425031334137e-5,2.3449761052332165e-8,-0.0010170599390659412,3.5277162817117435e-5,2.3384558945173422e-8,-0.001016515394012989,3.523949770501541e-5,2.3375440811865953e-8,-0.0010160002224420199,3.530738001007149e-5,2.3419397704779323e-8,-0.0010155553831384591,3.545419198619564e-5,2.3501928264935122e-8,-0.001015209142874551,3.563302488615149e-5,2.3598624983890202e-8,-0.0010149684067089226,3.5784346527384886e-5,2.3679292211144022e-8,-0.0010148133891465872,3.584860072421633e-5,2.3714344288769612e-8,-0.0010146982630651578,3.5782055660811007E-05,2.3682629377636572e-8,-0.0010145599654888093,3.557207326886522e-5,2.3578848270284908e-8,-0.0010143351722388912,3.5245823371830506e-5,2.3417678410022003e-8,-0.0010139811800521554,3.486632047924191e-5,2.3231576085062046e-8,-0.001013492050599654,3.4513974439642034e-5,2.3061330561170134e-8,-0.0010129013184621315,3.4259974954934804e-5,2.2942555475658693e-8,-0.0010122691652813616,3.4143842428325755e-5,2.289440024171102e-8,-0.001011660964001645,3.416527319904436e-5,2.291564249859294e-8,-0.0010111280235503381,3.429134318278579e-5,2.2988645742694414e-8,-0.0010106976785511353,3.447205752042876e-5,2.3087503664077148e-8,-0.0010103730798261847,3.465571175252602e-5,2.3185940039964153e-8,-0.0010101387428839818,3.479919616418346e-5,2.3262469964226124e-8,-0.0010099675794849883,3.487271276682596e-5,2.3302608900919384e-8,-0.0010098269209837737,3.4860699206272e-5,2.3299134968487392e-8,-0.0010096829020666328,3.476102080226269e-5,2.3251535621906485e-8,-0.0010095036482449427,3.4583741581220033e-5,2.316533851284319e-8,-0.00100926202814437,3.434990375649573e-5,2.3051517011118484e-8,-0.0010089385902406682,3.409004467856952e-5,2.2925769286763956e-8,-0.0010085248696185096,3.384168830235557e-5,2.2807227493595864e-8,-0.0010080265806791115,3.3644931550302674e-5,2.2716140262856692e-8,-0.0010074654828322916,3.353571640167953e-5,2.26703687608163e-8,-0.0010068782778092742,3.353743271134205e-5,2.268110345686206e-8,-0.0010063112194841138,3.36528689313314e-5,2.274888894220196e-8,-0.0010058104572475534,3.3859569732431347e-5,2.286150383963712e-8,-0.0010054101212326877,3.411145176628525e-5,2.2995062591133473e-8,-0.0010051217418514823,3.434769733360527e-5,2.3118734876600543e-8,-0.0010049287823506632,3.450726125747007e-5,2.3202145373587556e-8,-0.0010047886815621875,3.454511779650876e-5,2.3223469127649264e-8,-0.001004642523791172,3.444551550645358e-5,2.317587375654054e-8,-0.0010044301777682276,3.4228082912857005e-5,2.307029016040388e-8,-0.0010041070053985303,3.394428660482434e-5,2.293333606477324e-8,-0.0010036572007801948,3.366424530591849e-5,2.280046957873214e-8,-0.0010030989670374397,3.3457142010512746e-5,2.2706067870780697e-8,-0.001002478977520436,3.3371580578821594e-5,2.2673661179006083e-8,-0.0010018578283530568,3.342312200493025e-5,2.2709939398912565e-8,-0.0010012922882052613,3.359334378293894e-5,2.2804621910948108e-8,-0.0010008212275209021,3.3839363188058443e-5,2.2935524319804295e-8,-0.0010004594328713067,3.410840614322706e-5,2.3076001992787873e-8,-0.0010001992187818722,3.4351274842747164e-5,2.320166356575127e-8,-0.0010000167281470184,3.453101661995363e-5,2.3294552412610813e-8,-9.998793317252265e-4,3.462633409658824e-5,2.3344654270450874e-8,-9.997518470452732e-4,3.4631318428131296e-5,2.3349607127017085e-8,-9.996009199043014e-4,3.455348552109253e-5,2.3313647478180466e-8,-9.9939795849614e-4,3.44114906802232e-5,2.3246470434010358e-8,-9.99121407187035e-4,3.4233040893128126e-5,2.3162210737379513e-8,-9.987590833800812e-4,3.405276743515656e-5,2.3078368950141786e-8,-9.983108679056524e-4,3.390926822320403e-5,2.3014265042933495e-8,-9.97791306534957e-4,3.384032770146051e-5,2.2988554306834156e-8,-9.972307991430098e-4,3.3875718713881964e-5,2.3015580148524872e-8,-9.966733564831009e-4,3.4028221102158114e-5,2.310094837163757e-8,-9.961691020362934e-4,3.428546408696686e-5,2.3237638825588425e-8,-9.957615865134595e-4,3.46069401339788e-5,2.3404762682669036e-8,-9.954733186501152e-4,3.493021100327155e-5,2.357086532821176e-8,-9.952956330342465e-4,3.5186762200118035e-5,2.370192787102682e-8,-9.95188477807128e-4,3.532262383638006e-5,2.377162507367407e-8,-9.950913872963697e-4,3.5315508210565336e-5,2.376975873492727e-8,-9.94941500795456e-4,3.518154860532421e-5,2.3705430116577784e-8,-9.946916452042978e-4,3.496972133573339e-5,2.3603993034892922e-8,-9.943224955306555e-4,3.4747072949003844e-5,2.3499389344168517e-8,-9.938459958236127e-4,3.458033160070616e-5,2.3424766870853507e-8,-9.933002965673123e-4,3.451936283405707e-5,2.3404222600228282e-8,-9.92738532106868e-4,3.4586492210376424e-5,2.34477123751599e-8,-9.922149570488884e-4,3.47737697346077e-5,2.35500702634693e-8,-9.917723365169562e-4,3.504802300243e-5,2.369389615669735e-8,-9.91433801696836e-4,3.536137626092322e-5,2.385500900287136e-8,-9.912006576782077e-4,3.566352992413874e-5,2.4008564476421496e-8,-9.910555099664157e-4,3.591217265700787e-5,2.4134077453991628e-8,-9.909685467225334e-4,3.607935109184319e-5,2.4218367354514807e-8,-9.90904493799253e-4,3.615353059249766e-5,2.4256393376223053e-8,-9.90828480212809e-4,3.613845925610944e-5,2.4250587005171246e-8,-9.90710154736621e-4,3.605041340979941e-5,2.420946428455628e-8,-9.905262925749175e-4,3.5915102415850375e-5,2.4146106990416895e-8,-9.902625674466235e-4,3.576480559520487e-5,2.407673810359449e-8,-9.899151595612757e-4,3.563558997580312e-5,2.4019285840091026e-8,-9.894925239248037e-4,3.556393259086711e-5,2.399161892926978e-8,-9.890169789091286e-4,3.558183032668142e-5,2.400906596769323e-8,-9.885248529442735e-4,3.570977187754583e-5,2.4080982598891237e-8,-9.880631022206629e-4,3.594816942793109e-5,2.4206693186517794e-8,-9.876803749587692e-4,3.6270078383065484e-5,2.4372152484305683e-8,-9.874125517596248e-4,3.662032117452578e-5,2.4549731590826265e-8,-9.872671120179847e-4,3.6926008414473374e-5,2.470348797116585e-8,-9.872146960178598e-4,3.7118461255131244e-5,2.4799926090503432e-8,-9.871951531337715e-4,3.715829143129886e-5,2.482028574407889e-8,-9.871375620403313e-4,3.705077677427379e-5,2.476806781996489e-8,-9.869847448893906e-4,3.684329236067619e-5,2.466765451933042e-8,-9.867105450566658e-4,3.660725536650436e-5,2.4555140657066402e-8,-9.86323904247596e-4,3.641469724773145e-5,2.4466432455541804e-8,-9.858615016007492e-4,3.631928880259697e-5,2.442766534764061e-8,-9.85374633250025e-4,3.634645237112784e-5,2.4450388419430107e-8,-9.849156337300748e-4,3.649235218034662e-5,2.453139904021426e-8,-9.845270231932197e-4,3.672923823051199e-5,2.465582036281864e-8,-9.842346708626541e-4,3.7014300862134964e-5,2.4801822245291615e-8,-9.840451716688692e-4,3.729969081586018e-5,2.4945700886248175e-8,-9.839470708571595e-4,3.754181375466232e-5,2.5066377411016933e-8,-9.839150653915634e-4,3.770836043790428e-5,2.514864253568232e-8,-9.83915845150665e-4,3.778218739727299e-5,2.5184832131647895e-8,-9.839141440703577e-4,3.776204586365129e-5,2.5175023720621267e-8,-9.838778946578378e-4,3.7660825559131726e-5,2.5126110722890017e-8,-9.837819111355383e-4,3.750231363693385e-5,2.5050212268447694e-8,-9.83610120160167e-4,3.731747931219535e-5,2.4962853060990782e-8,-9.833567922937184e-4,3.714089212336408e-5,2.4881163070795294e-8,-9.830272886633775e-4,3.700727412351498e-5,2.4822096717103307e-8,-9.826385911278707e-4,3.69477424015823e-5,2.4800505830703303e-8,-9.82219396284537e-4,3.698509836147771e-5,2.4826830050034716e-8,-9.818087670899545e-4,3.712771767756578e-5,2.4904243886600084e-8,-9.814515702841564e-4,3.7362648046258683e-5,2.5025539421476875e-8,-9.811889802018954e-4,3.7650571338024e-5,2.5170939795615703e-8,-9.810442154511204e-4,3.792755371116602e-5,2.5309102919604293e-8,-9.810080333830023e-4,3.811864493199592e-5,2.5403711739960307e-8,-9.81033207624282e-4,3.8163102204115404e-5,2.5425633123846726e-8,-9.810462359989666e-4,3.804100654306584e-5,2.5365828059548833e-8,-9.809743731534347e-4,3.778505688611488e-5,2.524112956896296e-8,-9.807739041156364e-4,3.746843502401319e-5,2.508825210734586e-8,-9.804438663459916e-4,3.717577379911337e-5,2.4949313572355698e-8,-9.800204118408863e-4,3.697428727925494e-5,2.485733884169189e-8,-9.795593431768212e-4,3.6897909348930136e-5,2.4828320900585492e-8,-9.791176972697106e-4,3.694613487266822e-5,2.4860822858248447e-8,-9.78740821256568e-4,3.709208601691692e-5,2.4940346749398108e-8,-9.784561041063255e-4,3.7293678129001164e-5,2.5045249521682385e-8,-9.782718489133458e-4,3.7504071244625615e-5,2.5152145120602866e-8,-9.781792758595254e-4,3.7679941882763186e-5,2.5239992535436655e-8,-9.781562333794412e-4,3.778745647138105e-5,2.5292850462091087e-8,-9.781718882523143e-4,3.780606999115621e-5,2.530147602469855e-8,-9.781918620216884e-4,3.773013883351006e-5,2.5263886480747403e-8,-9.781832167389938e-4,3.7568458080856365e-5,2.518501010675023e-8,-9.78118742072559e-4,3.7342042791065954e-5,2.507558218052921e-8,-9.779801236071979e-4,3.708061130398327e-5,2.4950452157285786e-8,-9.777597868775496e-4,3.681839353569755e-5,2.4826535622686178e-8,-9.774615375963498e-4,3.6589861622145944e-5,2.47206704952449e-8,-9.771002958644923e-4,3.642562803302159e-5,2.464752335844287e-8,-9.767011177636903e-4,3.6348412775412787e-5,2.461757103592887e-8,-9.762974059618317e-4,3.636884684333104e-5,2.463512177599872e-8,-9.759277035517238e-4,3.648101405343806e-5,2.4696356361916733e-8,-9.75629951246629e-4,3.665840901177218e-5,2.4787660934629145e-8,-9.754322748465593e-4,3.685252659570957e-5,2.4885193908702775e-8,-9.75340987613693e-4,3.699788916582287e-5,2.495739454375517e-8,-9.753299684090048e-4,3.702722840929396e-5,2.4972198717358794e-8,-9.753395265608093e-4,3.689599167738356e-5,2.490869287630752e-8,-9.752920720559031e-4,3.6606102877796636e-5,2.4768523544825133e-8,-9.751219280535475e-4,3.62127126348543e-5,2.457919604533296e-8,-9.748035378869218e-4,3.580501071706199e-5,2.4384716721739845e-8,-9.743604317943561e-4,3.5470563709328834E-05,2.4228018734390125e-8,-9.738510761405169e-4,3.526450154078282e-5,2.4135686744524703e-8,-9.733435765106256e-4,3.519840608946445e-5,2.411249078547065e-8,-9.728943634004211e-4,3.5247780682422384e-5,2.4145284649450995e-8,-9.725377477092212e-4,3.536768335651393e-5,2.4211049479849402e-8,-9.722848444423038e-4,3.550754893515966e-5,2.428448154165182e-8,-9.72127563371285e-4,3.562150854076412e-5,2.4343174928178926e-8,-9.720441769973178e-4,3.567417242302132e-5,2.437035998268252e-8,-9.720046367152485e-4,3.56432887461309e-5,2.4355963585866076e-8,-9.719752390974952e-4,3.552063301357858e-5,2.4296779131561367e-8,-9.719228596586245e-4,3.531171554305102e-5,2.4196141313711178e-8,-9.718188423673552e-4,3.503437202507118e-5,2.406317927089353e-8,-9.716423998941957e-4,3.471621408885309e-5,2.3911605715671775e-8,-9.713832408989576e-4,3.439096166140005e-5,2.3757978780585042e-8,-9.710430366130846e-4,3.409389102193965e-5,2.361948593481193e-8,-9.70635446133547e-4,3.3856923351839665e-5,2.3511491505683215e-8,-9.701846919981149e-4,3.370390574741038e-5,2.3445165212560717e-8,-9.697228228770885e-4,3.364647614797688e-5,2.342546325722505e-8,-9.692857745624962e-4,3.368081166293388e-5,2.3449670440655165e-8,-9.689081926968012e-4,3.378557365972413e-5,2.3506650641077334e-8,-9.686168099705691e-4,3.392170644199995e-5,2.357703705485365e-8,-9.684224658620934e-4,3.4035563171401795e-5,2.3634937383161203e-8,-9.68312113340623e-4,3.406746818840269e-5,2.3652061632635778e-8,-9.682443258694862e-4,3.396706662113197e-5,2.3604922859051918e-8,-9.681538286062369e-4,3.371329935534211e-5,2.348419799835916e-8,-9.679692761326831e-4,3.333058404686902e-5,2.330235800983941e-8,-9.676407409410866e-4,3.2888734991917684e-5,2.3093584924486144e-8,-9.671629996624705e-4,3.2480309923178234e-5,2.2902797651000153e-8,-9.665791080763037e-4,3.2184835146996645e-5,2.276825671546724e-8,-9.659613244934983e-4,3.204046428493923e-5,2.270778086296016e-8,-9.653822640887052e-4,3.203767611505963e-5,2.2715798323767404e-8,-9.648929276683705e-4,3.213287335072607e-5,2.2770213229558723e-8,-9.645149837962753e-4,3.226903530996189e-5,2.2842729866168465e-8,-9.642442355567376e-4,3.239247708087407e-5,2.2907171397624284e-8,-9.640587530216115e-4,3.24620993246358e-5,2.2943963859402317e-8,-9.639270001539048e-4,3.245248074250296e-5,2.2941464499432092e-8,-9.638140578411377e-4,3.235353569481727e-5,2.2895550510650823e-8,-9.6368595444148e-4,3.2168912493880215e-5,2.28086319018673e-8,-9.635128997527551e-4,3.191410788621952e-5,2.2688634455621677e-8,-9.632720633656184e-4,3.161432337084309e-5,2.2547969983926774e-8,-9.629500908473864e-4,3.1301728190777524e-5,2.2402276055104036e-8,-9.625451789726969e-4,3.101176374193039e-5,2.226867575507521e-8,-9.620681774777247e-4,3.077836455776551e-5,2.216345368450055e-8,-9.615420329416084e-4,3.0628500411465295e-5,2.209935540113096e-8,-9.609991467969121e-4,3.057690888665009e-5,2.2082994490797295e-8,-9.604766797714861e-4,3.062205911343596e-5,2.2112942498469528e-8,-9.600102747775835e-4,3.074434601472043e-5,2.2179018433807102e-8,-9.596270214263777e-4,3.090724439259373e-5,2.2263089974248304e-8,-9.593386562986945e-4,3.1061771792007744e-5,2.2341454918293274e-8,-9.591361349101454e-4,3.1154428547892235e-5,2.2388764734143828e-8,-9.589871735461636e-4,3.113854434292479e-5,2.2383389507898628e-8,-9.588390052667267e-4,3.0987899671081076e-5,2.23137088373979e-8,-9.586285812047179e-4,3.0709291166627064e-5,2.2183841699676357e-8,-9.583004549904042e-4,3.034807980718291e-5,2.20160808943815e-8,-9.578277490469907e-4,2.9980170319710332e-5,2.1846942684937246e-8,-9.572262091683876e-4,2.968886340238766e-5,2.1716059377740093e-8,-9.565515092747311e-4,2.953507814969651e-5,2.1651963566920276e-8,-9.558790138711099e-4,2.9536365304518656e-5,2.166217296734255e-8,-9.552767930981623e-4,2.9665583334704913e-5,2.173278583758932e-8,-9.547860467171304e-4,2.9867061406297094e-5,2.1836474927304304e-8,-9.544158266696612e-4,3.0078540975903094e-5,2.1943173400982044e-8,-9.541492278461368e-4,3.024805141205629e-5,2.20281932369835e-8,-9.539540335951516e-4,3.034185193150517e-5,2.2075920768301698e-8,-9.537924048895253e-4,3.0345247140230987e-5,2.208000983233228e-8,-9.536275311546465e-4,3.025982229495277e-5,2.204185499562896e-8,-9.534275077413425e-4,3.0099841725022342e-5,2.1968736705240954e-8,-9.531675967845711e-4,2.9889041402266785e-5,2.187225621318765e-8,-9.528318988517542e-4,2.9657867759765324e-5,2.1767059789256722e-8,-9.524149404686213e-4,2.9440645440285744e-5,2.1669541941369942e-8,-9.519231274636026e-4,2.9272003957849185e-5,2.1596154336982085e-8,-9.513754532627277e-4,2.9182105324352853e-5,2.156109047838405e-8,-9.508024505321581e-4,2.9190878090889825e-5,2.1573483188737836e-8,-9.502424663511357e-4,2.9302351813132366e-5,2.1634700321363326e-8,-9.49735030418587e-4,2.9500882232911995e-5,2.1736638845838566e-8,-9.493122042363756e-4,2.975120128025421e-5,2.1861931766478845e-8,-9.489899450602254e-4,3.0003488125871785e-5,2.19865714491652e-8,-9.487620601966599e-4,3.020311750055373e-5,2.2084695992892515e-8,-9.485988957950232e-4,3.030316317880326e-5,2.2134553407674564e-8,-9.484518091654521e-4,3.0276810472256283e-5,2.2124270364054122e-8,-9.482632222856166e-4,3.0126538386465414e-5,2.205597301242971e-8,-9.479807554179524e-4,2.9887047408005317e-5,2.194689841841948e-8,-9.475724436270446e-4,2.961960692398054e-5,2.1826477535904775e-8,-9.470384606933393e-4,2.9397309036501518e-5,2.1729216202936675e-8,-9.464140919087501e-4,2.9284117233135745e-5,2.168479093152599e-8,-9.457607135250013e-4,2.931474722874649e-5,2.1708699518209903e-8,-9.451468703045619e-4,2.948415363474355e-5,2.179756824154432e-8,-9.446272642077682e-4,2.975166154093429e-5,2.19313942223417e-8,-9.442287741878977e-4,3.005706659105484e-5,2.2081348790756766e-8,-9.439480612138644e-4,3.0340177706433605e-5,2.2219059244211306e-8,-9.437587330039747e-4,3.05555047742844e-5,2.232346391891961e-8,-9.436224123828684e-4,3.0678595514250895e-5,2.2383640253534496e-8,-9.434987028230832e-4,3.0705355294702186e-5,2.2398300631400305e-8,-9.433518093842979e-4,3.0647746413302585e-5,2.2373619930447855e-8,-9.431539596951896e-4,3.052879162175852e-5,2.2320812424416252e-8,-9.42886827941632e-4,3.0378337056025078e-5,2.2254139731918605e-8,-9.425421763466582e-4,3.0229750427711546e-5,2.2189391361884014e-8,-9.421224563862095e-4,3.011700715597695e-5,2.2142531937943215e-8,-9.416414774327706e-4,3.0071346469157127e-5,2.212810620989906e-8,-9.411245660268458e-4,3.0116816661240038e-5,2.215710354642401e-8,-9.406070615964384e-4,3.026467552618603e-5,2.2234316233793085e-8,-9.40129838692488e-4,3.050774422637882e-5,2.2355753528190237e-8,-9.397312194328286e-4,3.0817081031483444e-5,2.2507225708871276e-8,-9.394363651629871e-4,3.1143952690525606e-5,2.266544635054926e-8,-9.39247469629382e-4,3.14289902634384e-5,2.2802467253505157e-8,-9.391392811567771e-4,3.161734154321736e-5,2.28928419535772e-8,-9.390631834203985e-4,3.1675072753920046e-5,2.292128485717643e-8,-9.389595011470184e-4,3.160054917881444e-5,2.2887892684632222e-8,-9.38774017044829e-4,3.142629938669554e-5,2.2808821851867562E-08,-9.384731170441491e-4,3.121073248180759e-5,2.2712144428496986e-8,-9.380529653295315e-4,3.102263562512172e-5,2.2630329259409035e-8,-9.37540421932073e-4,3.0923179639618185e-5,2.2591680785415607e-8,-9.369857583175107e-4,3.095034383443137e-5,2.261312414301245e-8,-9.364492385837592e-4,3.1109898640259824e-5,2.269626110812058e-8,-9.359853619300495e-4,3.137546064701527e-5,2.2827755619925506e-8,-9.356295240548179e-4,3.16974681512932e-5,2.2983821119346855e-8,-9.353911527823038e-4,3.2017802198202046e-5,2.313717510433112e-8,-9.35254811672147e-4,3.228479107023496e-5,2.326399499414142e-8,-9.351875597689146e-4,3.2463820357644084e-5,2.3348709349042408e-8,-9.351488611202442e-4,3.2541398176328435e-5,2.338570291153537e-8,-9.350994833205346e-4,3.25234996917194e-5,2.3378386345866902e-8,-9.350074661012362e-4,3.2430678404906835e-5,2.333682380228043e-8,-9.348510276335349e-4,3.229243028857118e-5,2.3275080016553152e-8,-9.346193314669444e-4,3.214231620297721e-5,2.3208959235950077e-8,-9.34312262797197e-4,3.2014221186669155e-5,2.3154273367792384e-8,-9.339400414025882e-4,3.193933185076618e-5,2.3125418905859264e-8,-9.33522913696338e-4,3.194305448645945e-5,2.3133910756853474e-8,-9.330904862493931e-4,3.204115275895757e-5,2.3186578394138074e-8,-9.326796244283101e-4,3.223492294630654e-5,2.3283386135426127e-8,-9.323295184334296e-4,3.250635238251842e-5,2.3415326287966734e-8,-9.320730236673442e-4,3.281574833663746e-5,2.356349553000111e-8,-9.319252711366798e-4,3.310543782936856e-5,2.3700943505328696e-8,-9.318736216132645e-4,3.331219177128394e-5,2.3798471243414568e-8,-9.318752640651988e-4,3.338676318697942e-5,2.3833655432768257e-8,-9.31866963948998e-4,3.331301147491189e-5,2.3799668733206908e-8,-9.317849968972861e-4,3.311655040946259e-5,2.3709231637614105e-8,-9.315865645433877e-4,3.2857438239323513e-5,2.3591073380549135e-8,-9.312628626536916e-4,3.2610345594110236e-5,2.3480457903216238e-8,-9.308393005661033e-4,3.24417200448329e-5,2.3408301483171562e-8,-9.303651936824847e-4,3.239281090859414e-5,2.339318150193606e-8,-9.298986864069065e-4,3.24725338782039e-5,2.343818307136948e-8,-9.29492219127464e-4,3.265959531263871e-5,2.3532245846076462e-8,-9.291818021359038e-4,3.2911055999915944e-5,2.3654527540462002e-8,-9.289814804693926e-4,3.317408157338681e-5,2.3780107907133812e-8,-9.28883102878134e-4,3.339795710135585e-5,2.3885603751994195e-8,-9.288606081706539e-4,3.3543937048918637e-5,2.3953598676844333e-8,-9.288772589118661e-4,3.3591181371482934e-5,2.3975172255395918e-8,-9.288937419745458e-4,3.353814016920971e-5,2.395033272948154e-8,-9.288751893623011e-4,3.340004673214571e-5,2.3886721538417358e-8,-9.287959268978146e-4,3.320403594462646e-5,2.3797303763589087e-8,-9.286417064222096e-4,3.298355112980294e-5,2.369778683496962e-8,-9.284099392258089e-4,3.277328729013441e-5,2.3604298515993387e-8,-9.281087947963245e-4,3.260518664063019e-5,2.3531530406527254e-8,-9.277558922978596e-4,3.25053020042501e-5,2.3491259018736307e-8,-9.27376881127838e-4,3.2490978444289704E-05,2.349102519309791e-8,-9.270036743482587e-4,3.2567791005183e-5,2.3532761106056747e-8,-9.266715169341242e-4,3.2726055504754945e-5,2.361130945511728e-8,-9.264137151151058e-4,3.293770276831043e-5,2.3713172494102367e-8,-9.262532777753961e-4,3.315574465668824e-5,2.3816439311101114e-8,-9.261924253535585e-4,3.331972423030237e-5,2.389335984974595e-8,-9.262040127993932e-4,3.336992217268715e-5,2.3916815814377182e-8,-9.262317722939682e-4,3.326872605091641e-5,2.3870037451283865e-8,-9.26204733848964e-4,3.3020183443077696e-5,2.3755545743126395e-8,-9.260627882338456e-4,3.267485106444268e-5,2.3597373291928313e-8,-9.257806549268176e-4,3.2313603001887904e-5,2.343349628055146e-8,-9.253766285983505e-4,3.201794497161325e-5,2.3301884783205278e-8,-9.249026226141552e-4,3.1842977355389055e-5,2.3227766419155888e-8,-9.244236141866019e-4,3.1804942562237756e-5,2.321783898637054e-8,-9.239978305283136e-4,3.188429203691447e-5,2.3261932645223352e-8,-9.236643245273065e-4,3.203781785436325e-5,2.3339012154274225e-8,-9.234386977616611e-4,3.221281488408803e-5,2.3424069805742805e-8,-9.233147289125141e-4,3.235906739356297e-5,2.3493825767808208e-8,-9.232692914346888e-4,3.243722377144107e-5,2.3530540271546322e-8,-9.232686902572398e-4,3.242362191865267e-5,2.3524031114582375e-8,-9.232753070314963e-4,3.231198064538372e-5,2.347219924760264e-8,-9.232537561991422e-4,3.211234823824068e-5,2.3380345332508162e-8,-9.231758558037119e-4,3.1847866001873865e-5,2.3259584838009844e-8,-9.230239270817444e-4,3.155012781518374e-5,2.3124710835478002e-8,-9.227922362546493e-4,3.1253999746506684e-5,2.299185234886264e-8,-9.224867387452752e-4,3.0992724464646724e-5,2.2876250708263638e-8,-9.221236055597706e-4,3.079385597163362e-5,2.27903811393233e-8,-9.217270560533948e-4,3.067609570471294e-5,2.2742468990955336e-8,-9.213267796337176e-4,3.064680318714811e-5,2.2735346156833847e-8,-9.20954912564315e-4,3.0699934328855683e-5,2.2765581416612138e-8,-9.206421478418023e-4,3.08143607477365e-5,2.2822873109824424e-8,-9.204122660196305e-4,3.095320827010874e-5,2.2889943688910157e-8,-9.202747886912586e-4,3.106597764009101e-5,2.2943650815208422e-8,-9.20216936947342e-4,3.1095988189358365e-5,2.2958395502173376e-8,-9.201985234595585e-4,3.099497926622176e-5,2.2912665548665453e-8,-9.201557642877907e-4,3.074296687634402e-5,2.2797948208220792e-8,-9.200186966514138e-4,3.0364621739963786e-5,2.2626137511840795e-8,-9.197385636888824e-4,2.9929213138156976e-5,2.242949417390068e-8,-9.193108394574188e-4,2.9527970187913423e-5,2.225019669376877e-8,-9.187785340875029e-4,2.9238845703639758e-5,2.2123997801802605e-8,-9.182134225021054e-4,2.9098989670442113e-5,2.2067447146301895e-8,-9.176879830111815e-4,2.9098589555165532e-5,2.2075132170368005e-8,-9.17253784391652e-4,2.9193712335522423e-5,2.212586268610836e-8,-9.169332050515159e-4,2.932621852597383e-5,2.2192168520093514e-8,-9.167219505579218e-4,2.944065181810668e-5,2.224829932694638e-8,-9.165966656263807e-4,2.949439756587482e-5,2.2274934020959177e-8,-9.165233093736817e-4,2.9461840863147958e-5,2.226094758259148e-8,-9.164642868928159e-4,2.9334685108527463e-5,2.220331133229603e-8,-9.163839913645998e-4,2.9120232422900573e-5,2.2106066579955823e-8,-9.162530317647461e-4,2.883851348103519e-5,2.1978863978225656e-8,-9.160513185398048e-4,2.8518597058158136e-5,2.1835244906513958e-8,-9.15769988624412e-4,2.8194298243653313e-5,2.1690730238489156e-8,-9.154120664548803e-4,2.7899535170271005e-5,2.1560765750180442e-8,-9.149917488095805e-4,2.7663738874698725e-5,2.1458654195702416e-8,-9.145323801553542e-4,2.7507851429598272e-5,2.1393709233720136e-8,-9.140634112563936e-4,2.744128142921948e-5,2.136983448703116e-8,-9.136166435043148e-4,2.745994641856036e-5,2.1384644526880326e-8,-9.13221944692427e-4,2.754549808736449e-5,2.1429208794373388e-8,-9.129024910120398e-4,2.7665888640565562e-5,2.148847949703196e-8,-9.126694819496386e-4,2.7777706431344518e-5,2.154253176218981e-8,-9.125166098566058e-4,2.7831321553144563e-5,2.156899691685832e-8,-9.124157000485842e-4,2.7780165658292776e-5,2.1547232079309533e-8,-9.123165267733067e-4,2.759442992476146e-5,2.1464373542698462e-8,-9.121548623777333e-4,2.7276427140508372e-5,2.1322119221499095e-8,-9.118711019526034e-4,2.6870144591949852e-5,2.114094313683426e-8,-9.114350063079968e-4,2.6455006129514234e-5,2.0957209029743784e-8,-9.108634742462995e-4,2.6120092101343845e-5,2.081139801841706e-8,-9.102178200814272e-4,2.5929424367736944e-5,2.0732255869559906e-8,-9.095797117160946e-4,2.5898353086471822e-5,2.0726067368364644e-8,-9.090202329768966e-4,2.5993933266429337e-5,2.077699539719869e-8,-9.085793014011967e-4,2.615479802733407e-5,2.0856387709915296e-8,-9.082619863653898e-4,2.6315579246745158e-5,2.09341239475786e-8,-9.080467696016204e-4,2.6424152758084614e-5,2.098656643738969e-8,-9.078974977973308e-4,2.6448875948786817e-5,2.0999792057647626e-8,-9.077736775849799e-4,2.6378608518081082e-5,2.0969414117202983e-8,-9.076374388060467e-4,2.621931034153885e-5,2.089880711320176e-8,-9.074576563940846e-4,2.598981028468818e-5,2.0797007293920687e-8,-9.072123555606045e-4,2.5717763310892864e-5,2.067680801973962e-8,-9.068901702931364e-4,2.543581375595846e-5,2.055305287961445e-8,-9.064910919600087e-4,2.51777245706118e-5,2.044096225969404e-8,-9.060264239903059e-4,2.497429600456872e-5,2.0354350101638346e-8,-9.055176396903595e-4,2.4849147035049042e-5,2.0303725663131417e-8,-9.049938331462582e-4,2.48148520431951e-5,2.0294513960783498e-8,-9.044877759473634e-4,2.487013629166907e-5,2.0325761996341625e-8,-9.040309431041147e-4,2.4998716181532725e-5,2.0389648367651206e-8,-9.036480496186143e-4,2.5170219741609872e-5,2.0472012539751645e-8,-9.033517513971097e-4,2.534346091236584e-5,2.0553994872596846e-8,-9.031382345469437e-4,2.5472113323665762e-5,2.0614734900078757e-8,-9.029845516590252e-4,2.5512741628428336e-5,2.0635033273204925e-8,-9.028490149929373e-4,2.5434954827073677e-5,2.0601836238167363e-8,-9.026764902106563e-4,2.5232408447057923e-5,2.0513003051675774e-8,-9.02410173775587e-4,2.4931333305205534e-5,2.03809375747986e-8,-9.020092509206674e-4,2.459113424824214e-5,2.0232703367730958e-8,-9.014671775780341e-4,2.4291763948560345e-5,2.0104263036672917e-8,-9.008206650653747e-4,2.4108119510329703e-5,2.0028949316011377e-8,-9.001407652157997e-4,2.40815816794724e-5,2.002473027343289e-8,-8.995076036470077e-4,2.4204454860463047e-5,2.0087372224985797e-8,-8.989819618378563e-4,2.442640209534498e-5,2.0193550978397385e-8,-8.985886426926948e-4,2.4677367529835956e-5,2.0311351442965695e-8,-8.983168875609791e-4,2.489249041554455e-5,2.0411570672683616e-8,-8.981321994515865e-4,2.5027742305275945e-5,2.0474734817052442e-8,-8.979905680705888e-4,2.506411353886881e-5,2.0492861273368607e-8,-8.978493659111419e-4,2.50042478933684e-5,2.0467761838839778e-8,-8.976735626310779e-4,2.486629512223054e-5,2.040810250953443e-8,-8.974383807300419e-4,2.46779904367794e-5,2.0326637181998767e-8,-8.971300793370073e-4,2.447195277178342e-5,2.0238087853917463e-8,-8.967460299014721e-4,2.4281946492655756e-5,2.0157529321890946e-8,-8.962944874862408e-4,2.41394984040332e-5,2.009894778188007e-8,-8.957939342688571e-4,2.4070383811391924e-5,2.0073707412014148e-8,-8.952715333108823e-4,2.4090842783267837e-5,2.0088849549234874e-8,-8.94760107898572e-4,2.420397021695154e-5,2.014545178891125e-8,-8.942933680114259e-4,2.4397265038716906e-5,2.0237535845060154e-8,-8.938997498069575e-4,2.4642474151023778e-5,2.0352064205131918e-8,-8.935958998883974e-4,2.4898610660257977E-05,2.047041270308535e-8,-8.933813137979958e-4,2.5118392150347438e-5,2.057138082449648e-8,-8.932357382837027e-4,2.525738915614616e-5,2.0635360425476936e-8,-8.931205738507962e-4,2.5284299096435977e-5,2.0648906749984923e-8,-8.929848689198422e-4,2.5190265415252555e-5,2.0608774843090036e-8,-8.927757350545704e-4,2.4994824362930195e-5,2.052437537467493e-8,-8.924519189134882e-4,2.4745797708676503e-5,2.0417514294488545e-8,-8.919975931406865e-4,2.4510848006438183e-5,2.031846414448125e-8,-8.914314961573257e-4,2.436039906856739e-5,2.0258291785338553e-8,-8.908058509117407e-4,2.4345690900774747e-5,2.0259156353576073e-8,-8.901923458736179e-4,2.4480408023514104e-5,2.032632704668696e-8,-8.896591855754514e-4,2.473538117757218e-5,2.0446077286436584e-8,-8.892494467896753e-4,2.505003874490458e-5,2.0590986107984132e-8,-8.889707658958967e-4,2.5354671159387962e-5,2.0729934824061592e-8,-8.887992171195747e-4,2.5592069573353648e-5,2.0837712880844427e-8,-8.886922966930062e-4,2.572983863637043e-5,2.0900398514110002e-8,-8.886031916452067e-4,2.576187327548421e-5,2.0915874009217856e-8,-8.884910916697882e-4,2.5702806387382103e-5,2.0891201501616617e-8,-8.883263469942507e-4,2.5580247122862124e-5,2.0839048300129043e-8,-8.880918126579759e-4,2.5427917810549098e-5,2.0774582188619598e-8,-8.877822930623571e-4,2.528066113611859e-5,2.071327182632323e-8,-8.874034503409459e-4,2.51709375729389e-5,2.0669390176493168e-8,-8.869707261418254e-4,2.5125989723721748e-5,2.0654810035291582e-8,-8.865081500699982e-4,2.5164954314173364e-5,2.067774642510077e-8,-8.86046435520712e-4,2.5295625909005256e-5,2.074132329135633e-8,-8.856195799846079e-4,2.5511276908268373e-5,2.0842176511925037e-8,-8.852594627043434e-4,2.578871501824554e-5,2.0969645761179816e-8,-8.849887434082308e-4,2.6089236359805585e-5,2.1106290594163275e-8,-8.848135668142814e-4,2.6363915683878577e-5,2.12303363316089e-8,-8.847186517320325e-4,2.6563437790964064e-5,2.132009779085571e-8,-8.846674515235134e-4,2.6650601378864086e-5,2.1359523275735847e-8,-8.846087189309281e-4,2.66117823350549e-5,2.1343206192558952e-8,-8.844884826177575e-4,2.6463259603390726e-5,2.1279054822091283e-8,-8.84264302201615e-4,2.6249677950410016e-5,2.1187425909026206e-8,-8.839176546726403e-4,2.6034332006823362e-5,2.109662263366006e-8,-8.83460649868888e-4,2.588342561020468e-5,2.1035784916221402e-8,-8.82934630955511e-4,2.584833167410523e-5,2.102703848956324e-8,-8.824002202963414e-4,2.595091364572211e-5,2.1079174189276926e-8,-8.81920975885244e-4,2.61768927835987e-5,2.1185003004173495e-8,-8.815456299885851e-4,2.648030419312936e-5,2.132360042425762e-8,-8.812952960849518e-4,2.6797977084991984e-5,2.146685384949102e-8,-8.811602994497689e-4,2.7068443874576867e-5,2.1587808754275467e-8,-8.811068251980501e-4,2.7247856141716944e-5,2.1667584069800153e-8,-8.81089260979772e-4,2.7317788146902162e-5,2.169866440830599e-8,-8.810626671495409e-4,2.7284359038585255e-5,2.168436095027221e-8,-8.809914703339173e-4,2.7171697969967655e-5,2.1635803660338795e-8,-8.80853375306616e-4,2.7013728986054004e-5,2.1568241334736312e-8,-8.806396376131523e-4,2.6847076911299085e-5,2.14978976330453e-8,-8.803534902028214e-4,2.670608170906783e-5,2.1439805851815076e-8,-8.800081064751453e-4,2.661959400830792e-5,2.140644761622855e-8,-8.796247407013677e-4,2.6608697363742646e-5,2.1406789555317838e-8,-8.792309875330124e-4,2.668453948521081e-5,2.1445354689839482e-8,-8.788585456571649e-4,2.684586308158884e-5,2.152116684744657e-8,-8.78539601693883e-4,2.7076554888474195e-5,2.162673250547703e-8,-8.783011687268403e-4,2.7344451028370228e-5,2.1747606543339466e-8,-8.781575952511767e-4,2.760340690883203e-5,2.1863392752506867e-8,-8.781030584565838e-4,2.780060405021578e-5,2.1951002414711444e-8,-8.781075985026394e-4,2.7889387640801088e-5,2.1990279643567898e-8,-8.781205807905475e-4,2.7844561840664714e-5,2.197066505165757e-8,-8.780829418086908e-4,2.767387999018061e-5,2.1896173090185512e-8,-8.779448870805086e-4,2.74194206923248e-5,2.178590013371832e-8,-8.776820355245091e-4,2.7146767973214645e-5,2.166911671129024e-8,-8.773032995196551e-4,2.692589193920319e-5,2.157667830482182e-8,-8.768478522267831e-4,2.6811226903755186e-5,2.153215088316852e-8,-8.763733034865937e-4,2.6827771709541934e-5,2.1545755773169187e-8,-8.759398672705631e-4,2.6966612293309254e-5,2.1612637371882027e-8,-8.75595423955086e-4,2.718972268856917e-5,2.171528609991872e-8,-8.753651397527334e-4,2.744156484383133e-5,2.182888124213572e-8,-8.75247681912975e-4,2.766380317219204e-5,2.1927841507686533e-8,-8.752182834583848e-4,2.7809084316441637e-5,2.1991802394858896e-8,-8.752370705991506e-4,2.78503969031841e-5,2.2009553750829985e-8,-8.752596751637627e-4,2.7784140827711733e-5,2.1980196488628183e-8,-8.752468743315799e-4,2.7627256123099378e-5,2.1911727125109708e-8,-8.751709906385506e-4,2.741056684869909e-5,2.181802519722558e-8,-8.750184292407893e-4,2.717106230583093e-5,2.1715442258405405e-8,-8.747891179445456e-4,2.6945211256019782e-5,2.161989799005169e-8,-8.744942264117304e-4,2.6764246324536103e-5,2.1544865267399724e-8,-8.741534012510591e-4,2.6651298588158375e-5,2.1500162537119337e-8,-8.73792188217311e-4,2.6619664630001775e-5,2.1491228293641114e-8,-8.734396730616577e-4,2.6671435073366737e-5,2.1518551762450664e-8,-8.731258580016011e-4,2.679606382670435e-5,2.1577100432093963e-8,-8.7287798682881e-4,2.696908317973565e-5,2.165584590639723e-8,-8.727151324958717e-4,2.7152056798777518e-5,2.1737843898724333e-8,-8.726411876491597e-4,2.7295776371153268e-5,2.180169400597056e-8,-8.72638123277193e-4,2.7348884643569248e-5,2.1825288578833227e-8,-8.726635290724197e-4,2.7272385770363037e-5,2.1792059497611342e-8,-8.726572026318421e-4,2.7056308642078688e-5,2.16981558387545e-8,-8.725583379939474e-4,2.673014546177635e-5,2.1556946339519295e-8,-8.723277672615219e-4,2.6358529275551267e-5,2.1397083391496553e-8,-8.719640776249092e-4,2.6020955368897574e-5,2.1253534423843147e-8,-8.715045501738401e-4,2.5784651947306544e-5,2.1155571953329428e-8,-8.71011034255676e-4,2.5683903518439307e-5,2.1117663450457478e-8,-8.705491307552995e-4,2.5713812934991007e-5,2.113685431521052e-8,-8.701702166525884e-4,2.5837496324388218e-5,2.119617587482424e-8,-8.699014006819977e-4,2.6000426627921144e-5,2.1271201276789622e-8,-8.697436570127698e-4,2.6145631661998167e-5,2.1336868320268546e-8,-8.696759171271625e-4,2.6225891752515828E-05,2.137282593288771e-8,-8.696624900426764e-4,2.621144415050257e-5,2.136666972028361e-8,-8.696616766384265e-4,2.609309797451578e-5,2.1315093592520665e-8,-8.696339802855976e-4,2.58812240139253e-5,2.1223246173929514e-8,-8.695486258957221e-4,2.560145694153938e-5,2.1102720086846007e-8,-8.693875014404906e-4,2.5288439658636282e-5,2.096877998090809e-8,-8.691463110554454e-4,2.4979158898865863e-5,2.083749001199522e-8,-8.688333814216199e-4,2.4707133641329762e-5,2.0723252879501703e-8,-8.684669509396333e-4,2.449818770419122e-5,2.0637035505226535e-8,-8.680718625220174e-4,2.4367943926356345e-5,2.0585317375536392e-8,-8.676763190924599e-4,2.432063005736646e-5,2.0569587886541e-8,-8.673088635246923e-4,2.4348592526606557e-5,2.0586157121313442e-8,-8.669953180759233e-4,2.4432155464044134e-5,2.0626149014017224e-8,-8.667551694766482e-4,2.4539935083866278e-5,2.0675728630559995e-8,-8.665969051568935e-4,2.4630410220170644e-5,2.0716875446414914e-8,-8.665124727648299e-4,2.4656354944466406e-5,2.0729342915038327e-8,-8.664725697134575e-4,2.4573949994687252e-5,2.0694555012387574e-8,-8.664264664054185e-4,2.43569138231536e-5,2.0601608133330403e-8,-8.663110139622543e-4,2.401199304406164e-5,2.0453867175701917e-8,-8.660704693962533e-4,2.3586965902470763e-5,2.0272378725582345e-8,-8.656806366986982e-4,2.316147155005631e-5,2.0091868871878088e-8,-8.651633988921566e-4,2.281978312873848e-5,1.9948869925345905e-8,-8.645805810525198e-4,2.2618527290404762e-5,1.9867633866200034e-8,-8.640097643843145e-4,2.256770525095591e-5,1.9851904328723277e-8,-8.635166675543678e-4,2.2633614094821955e-5,1.9886336038762515e-8,-8.63137948012429e-4,2.2757311910044172e-5,1.9944743482180508e-8,-8.628781813717942e-4,2.2875933655872637e-5,1.9999555353413913e-8,-8.62716501594731e-4,2.2938215554097242e-5,2.0028639520069148e-8,-8.626167844185233e-4,2.291219190087368e-5,2.0018587878018706e-8,-8.625373867297079e-4,2.2786717609544522e-5,1.9965210231098124e-8,-8.624388179572647e-4,2.256927580919071e-5,1.987237287145151e-8,-8.62289189850553e-4,2.2281913356921493e-5,1.975006320331657e-8,-8.620677332013985e-4,2.195621272300181e-5,1.9612130462789248e-8,-8.617664966194991e-4,2.16277997444501e-5,1.9473928068892485e-8,-8.613902656342819e-4,2.1330954467429593e-5,1.935006757875441e-8,-8.609548908336364e-4,2.109389378252815e-5,1.9252475069560743e-8,-8.60484364617139e-4,2.0935189055747062e-5,1.9188905233103563e-8,-8.600071436128826e-4,2.086164348674763e-5,1.91620410767755e-8,-8.595522857630777e-4,2.086763182325774e-5,1.916920143547591e-8,-8.591457649603986e-4,2.0935595960451394e-5,1.9202563113239573e-8,-8.588070106868445e-4,2.103741778004402e-5,1.9249802291736785e-8,-8.585455278490724e-4,2.1136657572340328e-5,1.9295144248855717e-8,-8.583574459539792e-4,2.119206027325631e-5,1.9320951414396224e-8,-8.582223041875423e-4,2.1163256231024873e-5,1.9310193204886934e-8,-8.581015046639913e-4,2.1019633830437e-5,1.9250187621650533e-8,-8.579412331421961e-4,2.0752106826417253e-5,1.913751847356446e-8,-8.576831677947019e-4,2.0384459053393114e-5,1.898276909784322e-8,-8.572838524692297e-4,1.997686961930766e-5,1.8811952221028124e-8,-8.567366035007616e-4,1.9613260947646273e-5,1.8661045623987466e-8,-8.560824766647061e-4,1.9371935268362093e-5,1.8563376708157653e-8,-8.553990379155328e-4,1.9293084341216936e-5,1.8535706064271064e-8,-8.547703530167884e-4,1.936321412352537e-5,1.8571651992880513e-8,-8.542559556665059e-4,1.952555465174852e-5,1.864632532315067e-8,-8.538756727449201e-4,1.970687106733324e-5,1.8727989569739696e-8,-8.536133022643489e-4,1.9843141688829028e-5,1.8789169711081318e-8,-8.534305325201742e-4,1.989357508587466e-5,1.8812667709058706e-8,-8.532814843157356e-4,1.984307509264013e-5,1.879252452479186e-8,-8.531232008002682e-4,1.969807749884717e-5,1.8732068113313398e-8,-8.529215833508998e-4,1.9480194465247334e-5,1.864101205609392e-8,-8.526540395091069e-4,1.9220106769211913e-5,1.8532719999846374e-8,-8.523103008730304e-4,1.8952387630912345e-5,1.8421969114052342e-8,-8.518922166171214e-4,1.8711017815063302e-5,1.83230973754797e-8,-8.514126718644334e-4,1.8525339647629737e-5,1.8248378472723516e-8,-8.508935758492765e-4,1.8416482805648164e-5,1.820658103690855e-8,-8.503628746581636e-4,1.839451037204468e-5,1.8201787199229734e-8,-8.498506739728784e-4,1.8456726342008194e-5,1.823266217066025e-8,-8.493848597949864e-4,1.858755364818312e-5,1.8292382925859e-8,-8.489867877928165e-4,1.8760075533750793e-5,1.8369304773500778e-8,-8.486675197616957e-4,1.8939094885436825e-5,1.8448317961918758e-8,-8.484249414374999e-4,1.908551666785093e-5,1.8512794690847823e-8,-8.482420318448436e-4,1.9161892414962764e-5,1.854700959220887e-8,-8.480866947760388e-4,1.9139120485201888e-5,1.853898427741999e-8,-8.47914089849887e-4,1.9004229019293404e-5,1.8483705191242097e-8,-8.476729841454053e-4,1.8768219337488148e-5,1.8386304668266145e-8,-8.473174336537129e-4,1.847105600233066e-5,1.8264025543393118e-8,-8.46823043761053e-4,1.8178888378359918e-5,1.814493877116609e-8,-8.462024594710862e-4,1.7968779622830955e-5,1.8061442704564362e-8,-8.455100213327113e-4,1.790201857047041e-5,1.8039011781499097e-8,-8.44827387250912e-4,1.7997506299222376e-5,1.8085063263440332e-8,-8.442336473553949e-4,1.82219741246474e-5,1.8184995677384506e-8,-8.437761660142642e-4,1.8504766407932626e-5,1.8308588065556925e-8,-8.434584576481965e-4,1.8767662195956877e-5,1.842267679658266e-8,-8.4324815382798e-4,1.895151458304113e-5,1.8502419193258396e-8,-8.430953104809079e-4,1.9028223922689918e-5,1.853631028756183e-8,-8.429494942284543e-4,1.8998849917980934e-5,1.852528741826402e-8,-8.427701821877676e-4,1.8884905878580218e-5,1.8478909462789927E-08,-8.425307640973115e-4,1.8718917804788393e-5,1.8411232187863652e-8,-8.4221863676526e-4,1.853706175763964e-5,1.8337626368837928e-8,-8.418337179676496e-4,1.837420046907955e-5,1.827269721178165e-8,-8.413866423383756e-4,1.8260484347668602e-5,1.822893007494307e-8,-8.408968704231464e-4,1.8218648925198794e-5,1.821564458019552e-8,-8.403904546985228e-4,1.8261602613572497e-5,1.8238040596675744e-8,-8.398971047784783e-4,1.8390365569227584e-5,1.8296347683661744e-8,-8.394462933471349e-4,1.859286581010708e-5,1.8385307406524103e-8,-8.390625554693548e-4,1.8844349042141637e-5,1.849434016111365e-8,-8.387606740926772e-4,1.9109956838288736e-5,1.86086555425353e-8,-8.38541735765671e-4,1.934955354341349e-5,1.871133966197072e-8,-8.383910411803681e-4,1.9524369896896514e-5,1.8786212347626552e-8,-8.382786396254357e-4,1.9604517498810704e-5,1.882101552190826e-8,-8.381628606157513e-4,1.957613104080785e-5,1.8810378176449664e-8,-8.379968680478822e-4,1.9446885164135782e-5,1.8758024552986323e-8,-8.377380159940519e-4,1.924845999124919e-5,1.8677651607636933e-8,-8.373591718549969e-4,1.9034058927322546e-5,1.8591733411884385e-8,-8.368597531357094e-4,1.886904423475679e-5,1.8527502435010273e-8,-8.362722099438048e-4,1.881422597460021e-5,1.8509963766801086e-8,-8.356585036787218e-4,1.890516421021724e-5,1.8553367099453363e-8,-8.350935969910999e-4,1.913599743885326e-5,1.865465529485676e-8,-8.346403242080155e-4,1.945802313397077e-5,1.8793064946602195e-8,-8.34327545916489e-4,1.979670869488179e-5,1.893732043323308e-8,-8.341432058884843e-4,2.0079064624085877e-5,1.905704488089487e-8,-8.340443957116498e-4,2.0256813697895776e-5,1.9132370964305275e-8,-8.339762461212966e-4,2.0315496394862994e-5,1.915767659009268e-8,-8.338890176634837e-4,2.0269954024688864e-5,1.9139616310843984e-8,-8.337477088005211e-4,2.015310994528189e-5,1.9092327487425826e-8,-8.335344195487556e-4,2.0004740360878148e-5,1.9032641784256222e-8,-8.332464619472108e-4,1.9863456916696745e-5,1.897669433393755e-8,-8.328930721117551e-4,1.9762094713418337e-5,1.8938027533986976e-8,-8.32492297882966e-4,1.9725314418621403e-5,1.8926665101186917e-8,-8.32068415293489e-4,1.97681582273195e-5,1.8948588036477114e-8,-8.316495311428089e-4,1.9894810847537727e-5,1.900526818571205e-8,-8.312647852018803e-4,2.0097427747145573e-5,1.909320121864192e-8,-8.309406311115315e-4,2.0355522535096095e-5,1.9203660731413604e-8,-8.306961138447342e-4,2.0636898921431595e-5,1.9323105247655924e-8,-8.305378232200559e-4,2.0901137965268803e-5,1.9434664802670044e-8,-8.304559556956476e-4,2.1106081507306507e-5,1.9520878928693548e-8,-8.304232734093543e-4,2.121667553013109e-5,1.9567400873830927e-8,-8.303983658234531e-4,2.121422167099143e-5,1.9566836162855173e-8,-8.303333870477527e-4,2.1103220227911646e-5,1.952153119702011e-8,-8.301848490250651e-4,2.0913258553630374e-5,1.9444248405592745e-8,-8.299248979192241e-4,2.069466744819484e-5,1.935621254368111e-8,-8.295501421522738e-4,2.0508232040964325e-5,1.928269583340997e-8,-8.290853574454966e-4,2.0410715377186484e-5,1.9246942812164235e-8,-8.285801055587781e-4,2.0439332177392955e-5,1.9263794111536346e-8,-8.2809766077195e-4,2.059951905236773e-5,1.9334808940806114e-8,-8.276980402284858e-4,2.086083916102179e-5,1.944680759157122e-8,-8.274201421640853e-4,2.1164367562493242e-5,1.957510063623294e-8,-8.272700826664273e-4,2.1440488239337026e-5,1.9690891838981256e-8,-8.272211164209307e-4,2.163042771909038e-5,1.9770119508971764e-8,-8.272248984694739e-4,2.1702369405362463e-5,1.980002378644996e-8,-8.27228099796603e-4,2.1656229173428763e-5,1.9781034701150995e-8,-8.271868289199328e-4,2.151765544352276e-5,1.9724204114230814e-8,-8.270743741962598e-4,2.1326531390819485e-5,1.9646358599563786e-8,-8.26882219952542e-4,2.1125677324855516e-5,1.9565355735798533e-8,-8.266169368517766e-4,2.095292185174144e-5,1.94967870339568e-8,-8.262957480189584e-4,2.0836914464318622e-5,1.9452286083130493e-8,-8.25942474644233e-4,2.0795532754586838e-5,1.9438941053262905e-8,-8.255843718992038e-4,2.083550384946244e-5,1.9459206265133282e-8,-8.252495647333255e-4,2.095228065573517e-5,1.9510899184512012e-8,-8.249644062349847e-4,2.112985311313308e-5,1.958715392852858e-8,-8.247500865889223e-4,2.1340896571258705e-5,1.96765117319045e-8,-8.24618243855376e-4,2.1548299489712724e-5,1.9763583444848516e-8,-8.245661579256653e-4,2.1709369314150928e-5,1.983081139445514e-8,-8.245731982415894e-4,2.1783542272099323e-5,1.9861656355918796e-8,-8.246010337711906e-4,2.174293624505869e-5,1.9844932417100713e-8,-8.24599762693081e-4,2.1582829143363222e-5,1.9779092489063103e-8,-8.245199320168276e-4,2.1327443144663598e-5,1.9674559193285197e-8,-8.243271463267552e-4,2.1027056964939968e-5,1.9552443886955017e-8,-8.240137478913354e-4,2.0745880537874062E-05,1.9439417625111437e-8,-8.236027048837928e-4,2.054443207807126e-5,1.9360323569771445e-8,-8.231420981185931e-4,2.046260583006955e-5,1.9331166390175837e-8,-8.226923062309316e-4,2.050897293837082e-5,1.9354816716611825e-8,-8.223101620532402e-4,2.065914064149752e-5,1.9420558033546697e-8,-8.220346412416486e-4,2.0863033376546166e-5,1.9507310836051278e-8,-8.218778118280972e-4,2.1058697312165184e-5,1.958944171580837e-8,-8.218233231961076e-4,2.1188662210092975e-5,1.964349015093813e-8,-8.218326197553458e-4,2.1214125651217814e-5,1.9653903415513317e-8,-8.21856605729153e-4,2.112285109501725e-5,1.9616154125454246e-8,-8.218486723198633e-4,2.092896166987658e-5,1.9536534435121197e-8,-8.21774900682099e-4,2.0665900016862456e-5,1.9429164058162805e-8,-8.216189955439171e-4,2.0376078120981753e-5,1.9311669317101807e-8,-8.213819939742871e-4,2.010103213726683e-5,1.9201115798957357e-8,-8.210785719648872e-4,1.987447711399243e-5,1.911118281263017e-8,-8.20732153301422e-4,1.9718757169934105e-5,1.905076891931154e-8,-8.203703758138432e-4,1.964388881521585e-5,1.9023668998090353e-8,-8.200215277640999e-4,1.9647991667492965e-5,1.9028805308153496e-8,-8.197118007420141e-4,1.971813517172542e-5,1.906061049159396e-8,-8.194627667111748e-4,1.983118207998987e-5,1.910940136475893e-8,-8.192884188063901e-4,1.99548908795387e-5,1.9161861647232118e-8,-8.191914615513263e-4,2.005020377589606e-5,1.920200887423933e-8,-8.191593400069361e-4,2.0076033762683125e-5,1.92131658914827e-8,-8.191616964490206e-4,1.999753215727303e-5,1.918132541360626e-8,-8.191520734989105e-4,1.9797250015148836e-5,1.909967483876304e-8,-8.190765586708921e-4,1.948575838000759e-5,1.8972896885336155e-8,-8.188893026085382e-4,1.9105659284594878e-5,1.881876618035338e-8,-8.185698549347501e-4,1.8723588649551148e-5,1.8664805935860888e-8,-8.181336800547649e-4,1.8410527065246534e-5,1.8540121068539456e-8,-8.176292682317155e-4,1.8218322499468568e-5,1.8465698823274743e-8,-8.171225750854558e-4,1.816336880244077e-5,1.844774602721915e-8,-8.166763753560664e-4,1.8224017124166648e-5,1.8476781130729858e-8,-8.163333375780404e-4,1.8350561857245017e-5,1.853193523194076e-8,-8.16107745214289e-4,1.8481632209535812e-5,1.8587831243527868e-8,-8.159860616604793e-4,1.8560533642340127e-5,1.8621333711184525e-8,-8.159338548044192e-4,1.8547406867931718e-5,1.8616474714546974e-8,-8.159059685028022e-4,1.8425544094309115e-5,1.856691337547998e-8,-8.158571772717478e-4,1.8201877478809365e-5,1.8475986230218312e-8,-8.157511568267292e-4,1.790263037304738e-5,1.8354797984609146e-8,-8.155662647845826e-4,1.756578402681822e-5,1.8219061692464088e-8,-8.152974777324008e-4,1.7232463817564305e-5,1.80855624276064e-8,-8.149548380423059e-4,1.6939285910434784e-5,1.79690735294896e-8,-8.14559552341495e-4,1.6713010048744217e-5,1.7880250136234366e-8,-8.141391520903434e-4,1.6567887899189816e-5,1.7824625038532265e-8,-8.13722894907782e-4,1.65052911686815e-5,1.7802510165505718e-8,-8.133380240113629e-4,1.6514764792978118e-5,1.7809448528021547e-8,-8.130068823177181e-4,1.6575692411162992e-5,1.7836899066496914e-8,-8.127444898746023e-4,1.6659173301351172e-5,1.787301036505299e-8,-8.12556110967037e-4,1.6730231029844328e-5,1.79035428156178e-8,-8.1243455505061e-4,1.6751012160459823e-5,1.7913194389418595e-8,-8.123576337801389e-4,1.6686038010803166e-5,1.7887740556088877e-8,-8.122873281432063e-4,1.6510317217035855e-5,1.7817300812807638e-8,-8.12173296759821e-4,1.6219656866485414e-5,1.7700472205744483e-8,-8.119633169768517e-4,1.5839706948872637e-5,1.754794502201198e-8,-8.116204935794114e-4,1.5427302108426434e-5,1.7382995748216617e-8,-8.111412381260521e-4,1.5058049525129414e-5,1.723638629723847e-8,-8.105632272728717e-4,1.4801145884299286e-5,1.713607209252042e-8,-8.099554919138893e-4,1.4692744717581516e-5,1.7096374287795603e-8,-8.093939263332287e-4,1.4722847634811913e-5,1.7112747706322244e-8,-8.089353936498745e-4,1.484233801753127e-5,1.7164799969601408e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json new file mode 100644 index 0000000..36daa45 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":6000,"numberOfSamples":1000,"samples":[-8.086030009769924e-4,1.4983810405869992e-5,1.7224897231104907e-8,-8.083859978917138e-4,1.5083891420443416e-5,1.7267300877946733e-8,-8.082495498012613e-4,1.5098334698112563e-5,1.727428602498279e-8,-8.08147627922185e-4,1.5007880436382382e-5,1.72384405012867e-8,-8.080344588306433e-4,1.4817024022017442e-5,1.716203842239244e-8,-8.078727223656254e-4,1.4548770451198794e-5,1.705477562558989e-8,-8.076383715174149e-4,1.4237727414253643e-5,1.6930867623711068e-8,-8.07322519250199e-4,1.3922902257012772e-5,1.6806096847405343e-8,-8.069308512481781e-4,1.3641062334595963e-5,1.6695163186853533e-8,-8.064810674365431e-4,1.3421371907981373e-5,1.6609600165603765e-8,-8.059989962711845e-4,1.3281793410593358e-5,1.65564122262766e-8,-8.055140919096513e-4,1.3227437282497666e-5,1.6537470119423336e-8,-8.050550211507427e-4,1.3250758311506548e-5,1.654960752689265e-8,-8.046459011976815e-4,1.3333167640947059e-5,1.658525704041747e-8,-8.04303377210941e-4,1.3447472960351647e-5,1.6633415280209964e-8,-8.040343930544604e-4,1.3560785131852206e-5,1.6680814883554258e-8,-8.038344371049681e-4,1.3637887698738715e-5,1.6713305884428016e-8,-8.036861808400415e-4,1.3645376246194308e-5,1.6717552173535383e-8,-8.035588881624019e-4,1.355715046434086e-5,1.668324932697258e-8,-8.034098545481887e-4,1.3361633179672876e-5,1.660599824235996e-8,-8.031899161995416e-4,1.3069806636622722e-5,1.6490473396248044e-8,-8.028548171317579e-4,1.2720836118968e-5,1.635260915989386e-8,-8.023817298130074e-4,1.2379672673151174e-5,1.6218567533971117e-8,-8.017848916609258e-4,1.21214866090865e-5,1.6118432225501397e-8,-8.011195394685814e-4,1.2004672862047483e-5,1.6075358566152277e-8,-8.004664161243661e-4,1.2045064498369676e-5,1.6095295025865495e-8,-7.999018683719954e-4,1.2207888551202842e-5,1.6163899894807838e-8,-7.994702224832471e-4,1.242340488168506e-5,1.625294935668257e-8,-7.991732540075557e-4,1.2615665237930678e-5,1.6331930886767175e-8,-7.989782632286061e-4,1.2727385321542004e-5,1.6378010390939176e-8,-7.988353176257354e-4,1.2731278778766297e-5,1.6380533700705246e-8,-7.98693545654588e-4,1.262891363153558e-5,1.6340492793338305e-8,-7.985117563218257e-4,1.2443008649451221e-5,1.6267331548458157e-8,-7.982633092416262e-4,1.2208291416633506e-5,1.617517573988445e-8,-7.97937024226046e-4,1.1963551111059878e-5,1.6079587401967125e-8,-7.975359220318068e-4,1.1745517867734186e-5,1.5995123017000115e-8,-7.970748169146011e-4,1.1584298423249006e-5,1.5933578635139873e-8,-7.96577147084504e-4,1.1500116000004205e-5,1.59027823489698e-8,-7.960712612774264e-4,1.1501312858278244e-5,1.5905873133149612e-8,-7.955863788122124e-4,1.1583659586297626e-5,1.5941057128577827e-8,-7.951485028139105e-4,1.1731083070377464e-5,1.6001886167851592e-8,-7.947767272267163e-4,1.191780985300591e-5,1.607808021319529e-8,-7.944803671342594e-4,1.2111620389700717e-5,1.615680382240154e-8,-7.942570988685387e-4,1.2277833661532118e-5,1.622426162217438e-8,-7.940921495251726e-4,1.2383811890041994e-5,1.6267523534675877e-8,-7.939586304605242e-4,1.2403888228974189e-5,1.627651653757225e-8,-7.938193280601158e-4,1.2324675476991541e-5,1.6246136706354253e-8,-7.936307142675456e-4,1.2150538325271284e-5,1.6178380649204796e-8,-7.933502814410618e-4,1.1908091876990174e-5,1.608405253597014e-8,-7.929477558193591e-4,1.164701184564693e-5,1.5982993948326116e-8,-7.924185834346178e-4,1.1433225812865484e-5,1.5901308272972388e-8,-7.91794201526995e-4,1.1331683271163489e-5,1.5864503448445484e-8,-7.911404620961953e-4,1.1381697803054312e-5,1.5887775959579784e-8,-7.905387505296019e-4,1.1576581858174432e-5,1.5968081661271605e-8,-7.900557579253249e-4,1.1862063556780149e-5,1.6083659449037498e-8,-7.897185238722374e-4,1.2157584885353175e-5,1.6202533533502623e-8,-7.895090488599649e-4,1.238821600505574e-5,1.629512295943271e-8,-7.893784662655317e-4,1.2508703453700893e-5,1.6343711956180873e-8,-7.892687928634058e-4,1.2510154891614356e-5,1.6345059350363414e-8,-7.891303130012338e-4,1.2412762325594466e-5,1.630746636423513e-8,-7.889301607306106e-4,1.22532563576661e-5,1.6245726990312346e-8,-7.886537075923972e-4,1.207350096757021e-5,1.6176528951831164e-8,-7.883021088407754e-4,1.1912612868365128e-5,1.611529698390703e-8,-7.878886554381245e-4,1.1802366938175958e-5,1.6074404646753326e-8,-7.874351827903575e-4,1.1764678405500699e-5,1.606225725212218e-8,-7.869686785579548e-4,1.1810193745663737e-5,1.6082821884922013e-8,-7.865178808041266e-4,1.1937644143326378e-5,1.613543027797478e-8,-7.861097334099989e-4,1.2134002375285157e-5,1.621485643068633e-8,-7.857657050956631e-4,1.2375715139896458e-5,1.631178566628287e-8,-7.854982761710509e-4,1.2631342722271491e-5,1.6413830995212057e-8,-7.853082129742637e-4,1.2865627763957707e-5,1.650712800670973e-8,-7.851832404152557e-4,1.3044611801087987e-5,1.6578365268496393e-8,-7.850984979333072e-4,1.3141234772513003e-5,1.661701655440917e-8,-7.850189859904393e-4,1.314074642924285e-5,1.6617484545055545e-8,-7.849040783473408e-4,1.3045167089176555e-5,1.658083277620777e-8,-7.847140887854131e-4,1.2875989940709468e-5,1.6515781106734278e-8,-7.84418739673568e-4,1.2674020385660439e-5,1.643854403323704e-8,-7.840067264380274e-4,1.2494690124657561e-5,1.637089555624342e-8,-7.834940629310338e-4,1.2397202649814611e-5,1.633586078646625e-8,-7.829269123445694e-4,1.242762480633356e-5,1.6351121218225165e-8,-7.823738580167101e-4,1.2600199243328678e-5,1.6421819173272966e-8,-7.819059640317111e-4,1.2886068491034284e-5,1.6536310251172648e-8,-7.815711190078477e-4,1.3218908359013295e-5,1.6668481029581357e-8,-7.813760467322517e-4,1.3518369457025356e-5,1.678692018769316e-8,-7.812866097556989e-4,1.3719738169680302e-5,1.6866455278038853e-8,-7.81245043675736e-4,1.3793772038801468e-5,1.689586528796916e-8,-7.811924892995569e-4,1.3748855436262393e-5,1.6878708749903426e-8,-7.810853126995724e-4,1.3619700644445478e-5,1.6828864667497608e-8,-7.809012145161698e-4,1.3452099763330615e-5,1.6764485192192976e-8,-7.806376216935296e-4,1.3290653946538645e-5,1.6703112676782687e-8,-7.803066615377375e-4,1.31716120529323e-5,1.6658847878700447e-8,-7.799298430182615e-4,1.311988593603372e-5,1.6641219568441624e-8,-7.795337437080761e-4,1.3148379669826384e-5,1.665500141543589e-8,-7.791466519745774e-4,1.3258192670318894e-5,1.6700371540229692e-8,-7.787956166079658e-4,1.3439123013885566e-5,1.6773161126941902e-8,-7.785034521569552e-4,1.3670540636302536e-5,1.6865211246133127e-8,-7.782855194761558e-4,1.3923070098588027e-5,1.6965022456657025e-8,-7.781465158733033e-4,1.4161671472159447e-5,1.705894395665733e-8,-7.780780274644127e-4,1.4350439747166847e-5,1.713304166764391e-8,-7.780578724819625e-4,1.4458808126371696e-5,1.717552433911576e-8,-7.780520945693767e-4,1.4468165316748068e-5,1.7179332308174036e-8,-7.780199264883032e-4,1.4377381074197417e-5,1.7144283672725583e-8,-7.779212697790456e-4,1.42055818063788e-5,1.707811591367681e-8,-7.777254715128031e-4,1.399092160934568e-5,1.6995928407681764e-8,-7.774196852037493e-4,1.37848241088391e-5,1.691784077706239e-8,-7.770148281025337e-4,1.3641905255902624e-5,1.68649932739021e-8,-7.7654695118254e-4,1.3606723344494496e-5,1.6854386908037733e-8,-7.760719733956719e-4,1.3699981752654324e-5,1.6893614104122298e-8,-7.756528920660803e-4,1.3908611710779359e-5,1.6977171984468366e-8,-7.753414973715193e-4,1.4185135339496087e-5,1.708636928482128e-8,-7.751607783545031e-4,1.4459758828692502e-5,1.7194078255654558e-8,-7.750965022472446e-4,1.4662655192892729e-5,1.7273331572288793e-8,-7.751031768498831e-4,1.4747011345581016e-5,1.730618293517172e-8,-7.751215862559233e-4,1.4701900854900151e-5,1.7288656969080978e-8,-7.750986283316115e-4,1.45502732264208e-5,1.7229950783472687e-8,-7.750005720993924e-4,1.4336090541435382e-5,1.714739884303355e-8,-7.748166257563864e-4,1.4108830030091316e-5,1.7060381671628664e-8,-7.74555246270904e-4,1.3911680743308552e-5,1.6985680755460048e-8,-7.742375216046733e-4,1.3775437312394145e-5,1.6935101840957774e-8,-7.738908672395347e-4,1.3716934985120997e-5,1.691492118059338e-8,-7.735443296708602e-4,1.373987657547806e-5,1.6926288994825302e-8,-7.732253688257358e-4,1.3836379992091725e-5,1.6965903557041073e-8,-7.729574201870145e-4,1.398850143961783e-5,1.702664562074045e-8,-7.727575479089458e-4,1.41697546103367e-5,1.7098179346093112e-8,-7.726338127068317e-4,1.4347167415583573e-5,1.7167741915981117e-8,-7.72582526013079e-4,1.4484672906976143e-5,1.7221441721592798e-8,-7.725862452751478e-4,1.4548420666369706e-5,1.724630156120042e-8,-7.726138958417847e-4,1.4513823225779425e-5,1.723297684502607e-8,-7.726244080267737e-4,1.4372974279860863e-5,1.717861929269323e-8,-7.725743889406402e-4,1.4139927504773041e-5,1.708890500581759e-8,-7.724286327675101e-4,1.3851021527237483e-5,1.6978122122320604e-8,-7.721705055599232e-4,1.3558663671444288e-5,1.6866694872960056e-8,-7.718085762849863e-4,1.3319387181004731e-5,1.6776479385700888e-8,-7.713767987397502e-4,1.3179295367351444e-5,1.6725086614472134e-8,-7.709275714331829e-4,1.3161122848693512e-5,1.6720920077215314e-8,-7.705191844169844e-4,1.3256827859980563e-5,1.6760442718757147e-8,-7.702008063045723e-4,1.3428227793557443e-5,1.6828582942267516e-8,-7.699990644679152e-4,1.361618554202354e-5,1.6902388068197547e-8,-7.699104039245936e-4,1.3756467861176603e-5,1.6957151603506948e-8,-7.699023224946573e-4,1.3797806695198463e-5,1.697331252819716e-8,-7.69923693570122e-4,1.3715970518988264e-5,1.6941802014512077e-8,-7.699204730517889e-4,1.3518607018056203e-5,1.686585566047806e-8,-7.698506029324883e-4,1.3239647040700348e-5,1.675881321149357e-8,-7.696928309426752e-4,1.292679553392078e-5,1.663924458294889e-8,-7.694477547487295e-4,1.2627916951666916e-5,1.6525649634657365e-8,-7.691330174202381e-4,1.2380977939982187e-5,1.6432564147368763e-8,-7.687761526504343e-4,1.2209237379755138e-5,1.6368739832210366e-8,-7.684079653894965e-4,1.2120781661778011e-5,1.633703602331063e-8,-7.680577369530784e-4,1.2110432408898472e-5,1.6335228492463344e-8,-7.677501944254693e-4,1.21623329271923e-5,1.6357054465017322e-8,-7.675035516029946e-4,1.2252353588631538e-5,1.6393155437041988e-8,-7.673278510063229e-4,1.2350244031443248e-5,1.6431898304259127e-8,-7.672231013092557e-4,1.2422047112441263e-5,1.6460286860244704e-8,-7.671772688900853e-4,1.243363156115782e-5,1.6465302548663993e-8,-7.671649640707796e-4,1.2356108383738767e-5,1.6435971563363704e-8,-7.671484101972802e-4,1.2173134658280302e-5,1.6366160768870968e-8,-7.670825263514741e-4,1.188858814480631e-5,1.6257519307403445e-8,-7.669249561884815e-4,1.153125860759139e-5,1.6121270567197454e-8,-7.666492306156377e-4,1.115245465159126e-5,1.5977261511360678e-8,-7.662560978121537e-4,1.0814456656206232e-5,1.5849466079461248e-8,-7.657770512027595e-4,1.05724402594284e-5,1.5758977593618244e-8,-7.65267023298901e-4,1.0456872508954073e-5,1.571723833544501e-8,-7.647885985095952e-4,1.0463873633946137e-5,1.5722417018223885e-8,-7.643941100002343e-4,1.0557097979145212e-5,1.5760262592280024e-8,-7.641121194876584e-4,1.0679365871370066e-5,1.580868049828012e-8,-7.639418824019487e-4,1.0769014504534602e-5,1.5844044262621295e-8,-7.63856040874777e-4,1.0775642632836637e-5,1.5847200884499e-8,-7.638095816807227e-4,1.067134664327151e-5,1.5807708446849496e-8,-7.637520719001363e-4,1.0455341968064698e-5,1.5725533933861105e-8,-7.636398633410946e-4,1.015159717703648e-5,1.5610082730947348e-8,-7.634452271731003e-4,9.80080001717917e-6,1.547706895850993e-8,-7.63160419406769e-4,9.449412193445568e-6,1.5344290126782374e-8,-7.627963935193374e-4,9.13916163473737e-6,1.522760366709052e-8,-7.623775983584871e-4,8.899634906261868e-6,1.5138131787055436e-8,-7.619351862275943e-4,8.745021320744058e-6,1.5081084100568852e-8,-7.615007251523846e-4,8.674467790722235e-6,1.5055961298020598E-08,-7.611015754607918e-4,8.674636046522299e-6,1.5057573206547553e-8,-7.607580727699104e-4,8.723012138457471e-6,1.507730793528806e-8,-7.604819845856674e-4,8.79104729455283e-6,1.5104310215033872e-8,-7.602755220059144e-4,8.84693302571431e-6,1.512651308174354e-8,-7.60130395955743e-4,8.858401879917029e-6,1.5131688225382546e-8,-7.600268787531797e-4,8.796280560370882e-6,1.5108794499177295e-8,-7.599335469922736e-4,8.639531259323042e-6,1.5049899963453894e-8,-0.000759809210702789,8.381910431287344e-6,1.495271925500096e-8,-7.596089689111743e-4,8.038852722231386e-6,1.4823230368913413e-8,-7.592954714676379e-4,7.651012523481406e-6,1.4677004696445236e-8,-7.588534536653339e-4,7.279557888325591e-6,1.4537373653592984e-8,-7.583012167940397e-4,6.990438849818558e-6,1.4429384557414762e-8,-7.576907836367265e-4,6.831496399448591e-6,1.4371061617021388e-8,-7.570930731261787e-4,6.813281142864784e-6,1.4366159181078007e-8,-7.56573893838745e-4,6.904553518906711e-6,1.440256548875904e-8,-7.561728030269616e-4,7.044803405478948e-6,1.445716559337654e-8,-7.55894167206311e-4,7.166043359666975e-6,1.450415417168199e-8,-7.55711412564325e-4,7.212993883249746e-6,1.4522671727194704e-8,-7.555791656848098e-4,7.1549930276133835e-6,1.4501273602714309e-8,-7.554470640511585e-4,6.988776194001312e-6,1.443893097512812e-8,-7.552712370159999e-4,6.734529749762169e-6,1.4343479112262025e-8,-7.550218631592772e-4,6.428246653777687e-6,1.422866437274883e-8,-7.546866678361489e-4,6.112788824185316e-6,1.4110719482184918e-8,-7.542707923333388e-4,5.8292867079302145e-6,1.400510243390426e-8,-7.537936783321645e-4,5.610111184424559e-6,1.392387568318107e-8,-7.532839358400108e-4,5.474383321977379e-6,1.3874075234006555e-8,-7.527734587962739e-4,5.42640635004478e-6,1.3857186797906472e-8,-7.522919859404003e-4,5.45669894844625e-6,1.386957766596827e-8,-7.518629339501932e-4,5.544851652733658e-6,1.3903575419281547e-8,-7.515008253699221e-4,5.66324214311497e-6,1.3948838400251825e-8,-7.51210094786353e-4,5.780767390543559e-6,1.3993723032625362e-8,-7.509847483529711e-4,5.866229168685598e-6,1.4026532943938554e-8,-7.508084438557491e-4,5.891537175053618e-6,1.4036723339664531e-8,-7.506548991499108e-4,5.835186884660035e-6,1.4016225902040902e-8,-7.504890649576297e-4,5.6865153995048614e-6,1.3961069522205696e-8,-7.502702069824309e-4,5.450810519333698e-6,1.3873309470797243e-8,-7.499584705215199e-4,5.154093641144201e-6,1.376281194863296e-8,-7.495258303846799e-4,4.844492327076601e-6,1.3647730610076522e-8,-7.489697010459084e-4,4.585680212391129e-6,1.3551982235163058e-8,-7.483229773845283e-4,4.439424944083938e-6,1.3498642646116442e-8,-7.47651384167147e-4,4.441135789993236e-6,1.3500781498633393e-8,-7.47033630108719e-4,4.5810783550153105e-6,1.3554518828823992e-8,-7.465319640685318e-4,4.8048662841334895e-6,1.3639340521473976e-8,-7.461696806020518e-4,5.035072310667735e-6,1.3726250888424918e-8,-7.45927649234082e-4,5.200984456189078e-6,1.3788876550238137e-8,-7.457581262680648e-4,5.260058265685222e-6,1.3811432021938078e-8,-7.456046602651826e-4,5.203880705388684e-6,1.3790914319102578e-8,-7.454181631269655e-4,5.052110434397819e-6,1.373481274651468e-8,-7.451656280700271e-4,4.841472760620587e-6,1.3656958068869079e-8,-7.448325507537849e-4,4.61494382342504e-6,1.357343640410499e-8,-7.444214445461733e-4,4.413322175715639e-6,1.3499417669267064e-8,-7.439484346229335e-4,4.2694368736615086e-6,1.3447009746671435e-8,-7.434389857049532e-4,4.204518303627032e-6,1.3423957631836567e-8,-7.429232000552066e-4,4.22642353337615e-6,1.3433047936838739e-8,-7.424310713391792e-4,4.3296407656193255e-6,1.3472159698785832e-8,-7.419881612882491e-4,4.496920195240808e-6,1.3534885426142835e-8,-7.416121363128246e-4,4.702242436589464e-6,1.3611614172495427e-8,-7.413105280088105e-4,4.9146848337064315e-6,1.369092983616905e-8,-7.410798564648585e-4,5.102579289552534e-6,1.3761123342581654e-8,-7.409059284613239e-4,5.2374620959614515e-6,1.3811649751762265e-8,-7.40765021747722e-4,5.2976581500819286e-6,1.3834473325427858e-8,-7.406258251361314e-4,5.271569720175211e-6,1.3825313013330133e-8,-7.404522940607082e-4,5.16079816624066e-6,1.3784817350730312e-8,-7.402080188256512e-4,4.982998369865964e-6,1.3719616164717567e-8,-7.398629579022926e-4,4.773502162654375e-6,1.3642888630399176e-8,-7.394027814983437e-4,4.583451075155526e-6,1.3573616754794363e-8,-7.388391120671625e-4,4.471358391383276e-6,1.3533406453527241e-8,-7.382156353710173e-4,4.486293417993243e-6,1.3540246689754017e-8,-7.376025584177996e-4,4.646263952038066e-6,1.360057244394542e-8,-7.370753966750942e-4,4.923220958661702e-6,1.3703844593894654e-8,-7.366853493943496e-4,5.247831278658755e-6,1.3824412277992002e-8,-7.364384127765779e-4,5.535851078356583e-6,1.3931243008841947e-8,-7.362964904189415e-4,5.721421847439438e-6,1.400013251189647e-8,-7.361977969831083e-4,5.777834083495166e-6,1.4021317172913075e-8,-7.360817614101209e-4,5.717840477241389e-6,1.3999596259483795e-8,-7.359055977095308e-4,5.580085272187351e-6,1.3949330970951832e-8,-7.356494891230436e-4,5.412741838724204e-6,1.3888375540751401e-8,-7.353140711726487e-4,5.2611317114854454e-6,1.3833462198014537e-8,-7.349148352444343e-4,5.160747629068616e-6,1.3797605620566516e-8,-7.34476381499244e-4,5.134402307300587e-6,1.378907362699951e-8,-7.340275945238301e-4,5.1916865952263e-6,1.3811240956866352e-8,-7.335976379390709e-4,5.3295409738639065e-6,1.386285790594125e-8,-7.332124264851362e-4,5.533583318487555e-6,1.393857552488052e-8,-7.328914883847182e-4,5.780224195792896e-6,1.4029729175094004e-8,-7.326453464977734e-4,6.039657534633526e-6,1.412541622107681e-8,-7.324737353478441e-4,6.279722160979335e-6,1.4213885118568412e-8,-7.323650721376349e-4,6.470322863277057e-6,1.4284138014656952e-8,-7.322974036581984e-4,6.587844288483066e-6,1.4327549734585913e-8,-7.322407659586676e-4,6.619032470350085e-6,1.4339305787613665e-8,-7.321607813179032e-4,6.563928060747684e-6,1.4319492082724502e-8,-7.320233046863541e-4,6.4374966021072834e-6,1.4273690279829042e-8,-7.317999978283977e-4,6.269641412024475e-6,1.4212954276300681e-8,-7.314747508146167e-4,6.103003158628865e-6,1.415295567438129e-8,-7.310503956340962e-4,5.987372946262786e-6,1.4111888222525968e-8,-7.30553886574779e-4,5.969501086118192e-6,1.4106716472582734e-8,-7.300364338939657e-4,6.078516230287104e-6,1.4147877299553037e-8,-7.295642924788504e-4,6.3107236580662384e-6,1.4233817360402606e-8,-7.29198788762624e-4,6.622175486804494e-6,1.4348383535941494e-8,-7.289720333664855e-4,6.9380135239147e-6,1.4464270004578152e-8,-7.288720132220635e-4,7.178968146684719e-6,1.4552629285696456e-8,-7.288478475491566e-4,7.292033122646066e-6,1.4594189017363577e-8,-7.288324425920637e-4,7.267653302542506e-6,1.4585519239748402e-8,-7.287681356467766e-4,7.1358561174840265e-6,1.4537665753835853e-8,-7.286220514824529e-4,6.9483598487620115e-6,1.4469630977301123e-8,-7.28388085845522e-4,6.7592678922152605e-6,1.4401275496516345e-8,-7.280804913481166e-4,6.612273121504457e-6,1.4348581630811597e-8,-7.277252407959589e-4,6.5354231757555416e-6,1.4321716844225746e-8,-7.273527660572583e-4,6.540950211029966e-6,1.4324997142073501e-8,-7.269930114233965e-4,6.6273182842564705e-6,1.4357691570767854e-8,-7.26672240266485e-4,6.781718300136292e-6,1.4414990002890305e-8,-7.264107154812758e-4,6.982473886382033e-6,1.4488915944389668e-8,-7.262207318281119e-4,7.201524453767113e-6,1.4569238469116222e-8,-7.261048945983162e-4,7.407366857871365e-6,1.464452799757507e-8,-7.260549073749619e-4,7.568797659062485e-6,1.4703494431167381e-8,-7.26051465526772e-4,7.659436861891897e-6,1.4736614332348274e-8,-7.260658689683676e-4,7.662469338693832e-6,1.4737849783051846e-8,-7.260636091525101e-4,7.574690894230019e-6,1.4706123818166879e-8,-7.260097162467727e-4,7.408843381596091e-6,1.4646170303919831e-8,-7.258751869359084e-4,7.193327753172565e-6,1.4568414770672015e-8,-7.256434329193616e-4,6.968816351578809e-6,1.4487705994885722e-8,-7.253155606930208e-4,6.781829885047062e-6,1.4420936000282275e-8,-7.249132562182546e-4,6.6756763505280914e-6,1.4383719471977372e-8,-7.244778292372096e-4,6.679612946037396e-6,1.438647617104953e-8,-7.240638597492315e-4,6.798235959896041e-6,1.443065370266917e-8,-7.237266826504071e-4,7.004766318589259e-6,1.4506391489857573e-8,-7.235054613225411e-4,7.243025516191428e-6,1.4593301323513466e-8,-7.2340765660686e-4,7.441405783647142e-6,1.4665511557876749e-8,-7.234034010785615e-4,7.53631382926181e-6,1.4700082991218885e-8,-7.234351925205399e-4,7.495034347391305e-6,1.468523799630331e-8,-7.234393429224217e-4,7.325932982914151e-6,1.462407472647779e-8,-7.233679091640017e-4,7.071240070168453e-6,1.4531993918580552e-8,-7.2320061796834e-4,6.7884821942071435e-6,1.4429962503804012e-8,-7.229442000740695e-4,6.531515408382787e-6,1.4337580335722595e-8,-7.226237824510028e-4,6.338676971745417e-6,1.4268730878278133e-8,-7.222726609371696e-4,6.229186086844068e-6,1.4230270463511608e-8,-7.219243370456767e-4,6.204979076589403e-6,1.4222735101428858e-8,-7.216077209136364e-4,6.254637305234233e-6,1.424182454315981e-8,-7.213447052154808e-4,6.357313551246988e-6,1.427987548429127e-8,-7.211489353260135e-4,6.485977719230195e-6,1.432706196354135e-8,-7.210249390732579e-4,6.610178726644471e-6,1.4372391800318248e-8,-7.209673047686168e-4,6.69888928465445e-6,1.440471413451235e-8,-7.209601280974389e-4,6.7240278150433335e-6,1.4413965009805703e-8,-7.20977427897608e-4,6.664882671759e-6,1.4392744472576701e-8,-7.209854343714221e-4,6.51295128433434e-6,1.4338056762127022e-8,-7.209473640933031e-4,6.27595967171071e-6,1.4252764848687728e-8,-7.20830498270342e-4,5.979351536502665e-6,1.4146129546232638e-8,-7.206142541252474e-4,5.663667819126294e-6,1.4032848951131945e-8,-7.202969652261338e-4,5.377288241995543e-6,1.3930404038766788e-8,-7.198989165010806e-4,5.1656853148451214e-6,1.3855144520274798e-8,-7.194600346572165e-4,5.059761967389392e-6,1.381807600558674e-8,-7.190320840484526e-4,5.066413372274996e-6,1.3821501796020195e-8,-7.186667008859963e-4,5.164217116728777e-6,1.3857550892980985e-8,-7.184018625214499e-4,5.306290101127747e-6,1.3909277458429183e-8,-7.182503872805278e-4,5.430848543585556e-6,1.3954476928807232e-8,-7.181945402363831e-4,5.477745639924967e-6,1.3971593615188382e-8,-7.181899363308149e-4,5.406401461740874e-6,1.3946114620028615e-8,-7.181787956068019e-4,5.208432912413644e-6,1.3875092760960466e-8,-7.181080232052682e-4,4.909307597908525e-6,1.3767756999698908e-8,-7.179446434546303e-4,4.558250395919083e-6,1.3641890350548404e-8,-7.176825410055812e-4,4.2115104900122955e-6,1.3517783575060329e-8,-7.173394303115774e-4,3.9166207270580965e-6,1.3412530864261023e-8,-7.169476918402883e-4,3.7030604472824477e-6,1.3336657086835069e-8,-7.165441754546074e-4,3.5802790936875876e-6,1.3293434686648582e-8,-7.161624370313028e-4,3.540740334466443e-6,1.3280030267105057e-8,-7.158283342384227e-4,3.5648889198243974e-6,1.3289336702046267e-8,-7.155582446948228e-4,3.6259309695520506e-6,1.3311712356351884e-8,-7.153587035969551e-4,3.6936410852722728e-6,1.3336343509346127e-8,-7.152264834437153e-4,3.7373251672731826e-6,1.3352284086218272e-8,-7.151486443905965e-4,3.7285507918335262e-6,1.3349406474614047e-8,-7.151027106872547e-4,3.6443643170977546e-6,1.3319531867733131e-8,-7.150577088567976e-4,3.471371309569102e-6,1.3257885044742072e-8,-7.149771233861474e-4,3.2102934517910352e-6,1.3164734543938834e-8,-7.148246566289133e-4,2.879607352494538e-6,1.304671174381637e-8,-7.145727155168279e-4,2.5159715205526265e-6,1.2916970172838227e-8,-7.14211741474117e-4,2.1691340011926946e-6,1.2793345447593278e-8,-7.13756704294834e-4,1.8907340958244058e-6,1.2694309938959155e-8,-7.13246867286023e-4,1.7195895090076379e-6,1.263368292154631e-8,-7.127372110269032e-4,1.6687917986243744e-6,1.2616035558109819e-8,-7.122837106314069e-4,1.7200599947476228e-6,1.2634736954970411e-8,-7.11927625851379e-4,1.8279231828251246e-6,1.2673513419775649e-8,-7.116842639270483e-4,1.9322272870562014e-6,1.2710931582090524e-8,-7.115395372739504e-4,1.9745795969288553e-6,1.2726232447310445e-8,-7.114547557725002e-4,1.9136654302389338e-6,1.270474472926178e-8,-7.113777961538001e-4,1.735292690655213e-6,1.2641441637291946e-8,-7.112572859060644e-4,1.4546876493828617e-6,1.2541763992937194e-8,-7.110556761496227e-4,1.1107338000528394e-6,1.2419577806846834e-8,-7.107574398631749e-4,7.542984399074633e-7,1.2293006190122626e-8,-7.103703854584871e-4,4.3467766591549663e-7,1.2179579666103922e-8,-7.099206413352514e-4,1.8848792044254664e-7,1.209227121863942e-8,-7.094440058956009e-4,3.38112439872334e-8,1.2037433652280913e-8,-7.089770272256449e-4,-3.005946575574514e-8,1.2014751159396523e-8,-7.085502677011695e-4,-1.8942666134325098e-8,1.2018584823579895e-8,-7.081845728037587e-4,4.1504324056836106e-8,1.2039859175127503e-8,-7.078898530136206e-4,1.2085396250360532e-7,1.2067846450829226e-8,-7.07665357590904e-4,1.8796389173417595e-7,1.2091574008084617e-8,-7.075005062641622e-4,2.1404627281451953e-7,1.2100880394544461e-8,-7.073757642706145e-4,1.7527949313218791e-7,1.2087321949694448e-8,-7.072636271028598e-4,5.563556618695607e-8,1.2045175593473184e-8,-7.07130371455471e-4,-1.496666377152965e-7,1.1972682276401499e-8,-7.069396260706627e-4,-4.3038263800395507e-7,1.1873415802529695e-8,-7.06658736467273e-4,-7.585342773530107e-7,1.1757266370952408e-8,-7.062679103912365e-4,-1.0893111587869973e-6,1.164011958067034e-8,-7.057699493448573e-4,-1.3683565279279107e-6,1.1541242460665835e-8,-7.051958014848092e-4,-1.546143275736306e-6,1.1478149826314971e-8,-7.046006461074884e-4,-1.5955509000684547e-6,1.1460378253613378e-8,-7.040489785775769e-4,-1.5244730508863847e-6,1.1485082661954835e-8,-7.035938487042454e-4,-1.3758182686775965e-6,1.1537113738876136e-8,-7.032597812034259e-4,-1.2137575651664247e-6,1.1593901613711014e-8,-7.030369079407669e-4,-1.1027795845962554e-6,1.1632801609042198e-8,-7.028872532957906e-4,-1.0889580682558247e-6,1.1637630789638363e-8,-7.027584678100196e-4,-1.1897271998792792e-6,1.1602238033439061e-8,-7.025988796732991e-4,-1.3932883666335377e-6,1.1530725736851102e-8,-7.02369467900341e-4,-1.6652872066721532e-6,1.1435125811886794e-8,-7.020507465969052e-4,-1.959328698109832e-6,1.1331711320640786e-8,-7.016442939978633e-4,-2.2282184952551496e-6,1.1237034626369414e-8,-7.011697035243303e-4,-2.4335618600813347e-6,1.1164544945400339e-8,-7.006583801112918e-4,-2.5521150452073807e-6,1.1122365961218336e-8,-7.001460060304543e-4,-2.5781375982917395e-6,1.1112496075816941e-8,-6.996655112290227e-4,-2.5220161431554106e-6,1.1131319063948755e-8,-6.992418776281199e-4,-2.4062965783673872e-6,1.1171004748331547e-8,-6.988893060139256e-4,-2.260591788360715e-6,1.1221277939326513e-8,-6.986105278643894e-4,-2.1166353920163535e-6,1.1271116834225942e-8,-6.983975667488254e-4,-2.0042272969958953e-6,1.1310137596645092e-8,-6.982331775114807e-4,-1.948167868728002e-6,1.1329646935505253e-8,-6.980924984224593e-4,-1.9658036073505293e-6,1.1323502940205919e-8,-6.979449169280985e-4,-2.064692866216944e-6,1.128895545665963e-8,-6.977566158534427e-4,-2.240091878769088e-6,1.1227562045779688e-8,-6.974946560896657e-4,-2.4725062008836e-6,1.1146078731656455e-8,-6.971334322778307e-4,-2.7265579611108132e-6,1.1056870056968845e-8,-6.966634001809645e-4,-2.9535495920723803e-6,1.0976992639682918e-8,-6.960998225694706e-4,-3.1003923112501523e-6,1.0925024976391107e-8,-6.954864809875409e-4,-3.125514095301827e-6,1.0915470365326537e-8,-6.94888405730523e-4,-3.0171655312078273e-6,1.0952385872816837e-8,-6.943721615170897e-4,-2.8040956720319907e-6,1.1025740558355747e-8,-6.939812476892919e-4,-2.5493950355256136e-6,1.111363121856989e-8,-6.937199582600355e-4,-2.328052856844355e-6,1.119007794880418e-8,-6.935545525919977e-4,-2.199995786806156e-6,1.123431816683279e-8,-6.93429179173718e-4,-2.1924546956316556e-6,1.1236874298485071e-8,-6.932862200777068e-4,-2.2974342328778687e-6,1.1200440938200634e-8,-6.930818299262455e-4,-2.4806963116481874e-6,1.1136809772812793e-8,-6.927932877982263e-4,-2.69515791678022e-6,1.1062250907052743e-8,-6.924193527516066e-4,-2.8932872464684024e-6,1.0993214408490107e-8,-6.919763333906085e-4,-3.036081365862266e-6,1.0943205101581768e-8,-6.91492215226939e-4,-3.098326934476717e-6,1.0920952638432522e-8,-6.910002904512773e-4,-3.070683044984637e-6,1.0929697707612377e-8,-6.905331356871504e-4,-2.959140124946023e-6,1.0967394783237994e-8,-6.90117596465121e-4,-2.7823877442401985e-6,1.1027633804261848e-8,-6.897712626577218e-4,-2.567793687719598e-6,1.1101026790081565e-8,-6.895006358475275e-4,-2.3467550008997916e-6,1.1176795508382824e-8,-6.89300944615274e-4,-2.150115599113473e-6,1.1244329229978124e-8,-6.891573100006782e-4,-2.00424231133623e-6,1.1294520632905088e-8,-6.890467540316551e-4,-1.9280356409594636e-6,1.1320793607430406e-8,-6.889406381638624e-4,-1.930734024848246e-6,1.1319874885504703e-8,-6.888074504279619e-4,-2.0102414136189414e-6,1.1292397488351405e-8,-6.886161724085662e-4,-2.1518695593095066e-6,1.1243363432643985e-8,-6.883407101463712e-4,-2.327739840236361e-6,1.1182368829498123e-8,-6.879658514959947e-4,-2.497813089077346e-6,1.1123245267791766e-8,-6.874944007746656e-4,-2.6143891697839814e-6,1.108247815801189e-8,-6.869533275424424e-4,-2.6320148015926607e-6,1.1075749525894508e-8,-6.863944546199724e-4,-2.522826202578732e-6,1.1112635168862053e-8,-6.858844538666012e-4,-2.2926275030821306e-6,1.1191109583836215e-8,-6.854832279089802e-4,-1.9877298379677976e-6,1.1295269233710088e-8,-6.852191743942243e-4,-1.6834486218362717e-6,1.1399318636952878e-8,-6.850762207670568e-4,-1.4561494259965552e-6,1.1477115718733162e-8,-6.850017506227822e-4,-1.353885669014518e-6,1.1512169978020316e-8,-6.849299395502611e-4,-1.382232489232581e-6,1.1502489363880025e-8,-6.848057305429362e-4,-1.5099055715152289e-6,1.1458706325152704e-8,-6.845983153559325e-4,-1.6859188037799119e-6,1.1398245647313847e-8,-6.843027428170722e-4,-1.8571846721204412e-6,1.1339299333489303e-8,-6.839342878524915e-4,-1.9804742909492373e-6,1.1296704524613013e-8,-6.83520537940993e-4,-2.0280142608472192e-6,1.1280001238857747e-8,-6.830941226507634e-4,-1.9884992920636643e-6,1.1293074773063915e-8,-6.826870433621648e-4,-1.8656132505174621e-6,1.13346680053564e-8,-6.823264387413217e-4,-1.6753696630438363e-6,1.1399305110651174e-8,-6.82031487121087e-4,-1.4427423697938251e-6,1.1478456664893744e-8,-6.818114056550049e-4,-1.1978017957364357e-6,1.1561864398442774e-8,-6.816645845240956e-4,-9.716026242010502e-7,1.1638940368353777e-8,-6.81578901101889e-4,-7.920793248862827e-7,1.1700156773758746e-8,-6.815332503350359e-4,-6.803319074311323e-7,1.173830361103633e-8,-6.815001275355418e-4,-6.477490111422285e-7,1.1749467706559448e-8,-6.814489184104265e-4,-6.941843501332436e-7,1.1733661035226025e-8,-6.813496403718091e-4,-8.071935459534741e-7,1.1695093476635976e-8,-6.81177053403738e-4,-9.623862476189849e-7,1.164206416834527e-8,-6.809151476327394e-4,-1.1251098518570805e-6,1.158639073471916e-8,-6.80561933977751e-4,-1.254012468855875e-6,1.154218474453644e-8,-6.801338767888566e-4,-1.307464024167702e-6,1.1523643336190613e-8,-6.79668066854345e-4,-1.2535982747354408e-6,1.1541612761355467e-8,-6.792188902309273e-4,-1.0830088825351644e-6,1.1599275967291585e-8,-6.78845970446115e-4,-8.196398734036575e-7,1.1688487599342648e-8,-6.785938804680131e-4,-5.21865523976247e-7,1.1789443842818592e-8,-6.784716853381285e-4,-2.670917135713526e-7,1.1875898145539714e-8,-6.784454801674145e-4,-1.229862560247459e-7,1.1924869708763637e-8,-6.78451422731065e-4,-1.2039502744957288e-7,1.1925808501975738e-8,-6.784224136183189e-4,-2.4413852327126643e-7,1.188376744728601e-8,-6.783122474568518e-4,-4.450160638167141e-7,1.1815400961230667e-8,-6.781056774875232e-4,-6.622121589485789e-7,1.1741382274874111e-8,-6.778146379208505e-4,-8.426921141446391e-7,1.1679787181502826e-8,-6.774678679897052e-4,-9.513665380458594e-7,1.1642596348323024e-8,-6.771004646386013e-4,-9.730261227384026e-7,1.163500954750871e-8,-6.767463032638174e-4,-9.096388229470013e-7,1.165635793010542e-8,-6.764335621130428e-4,-7.761178639860844e-7,1.170155308564171e-8,-6.761823408651586e-4,-5.962181208590508e-7,1.1762500661860506e-8,-6.76003339470729e-4,-3.9886548663780184e-7,1.1829366116277767e-8,-6.758971746004418e-4,-2.1465214616865e-7,1.189177429067364e-8,-6.75854349008327e-4,-7.229850977163453e-8,1.1940006997847552e-8,-6.758560464209218e-4,4.947983413017979e-9,1.1966210837941946e-8,-6.75876029123182e-4,2.7488136745964224e-9,1.196554475242547e-8,-6.758837935815457e-4,-8.161918553295126e-8,1.1937085753012027e-8,-6.758487615666738e-4,-2.3790708629766936e-7,1.1884286585775744e-8,-6.757450114730958e-4,-4.432901815565406e-7,1.1814847546413683e-8,-6.75555981832124e-4,-6.647221873892998e-7,1.1739927591423942e-8,-6.752785440219556e-4,-8.632714013106472e-7,1.1672680443195546e-8,-6.749257989924772e-4,-1.0003070529774613e-6,1.1626159710092367e-8,-6.745277736728225e-4,-1.04533785405786e-6,1.1610666373841045e-8,-6.74128768082691e-4,-9.849061499935828e-7,1.1630749295767326e-8,-6.737798662443241e-4,-8.306924641557072e-7,1.1682486866486084e-8,-6.735259935027122e-4,-6.231378273326227e-7,1.1752281613645974e-8,-6.733897881249691e-4,-4.257941722485988e-7,1.1818755484053001e-8,-6.733589931298577e-4,-3.0779861157673254e-7,1.185861347121806e-8,-6.733862647382449e-4,-3.189045445843042e-7,1.1855019353474524e-8,-6.734052719418553e-4,-4.6933352922082787e-7,1.1804407956455615e-8,-6.73356095178138e-4,-7.26669545411652e-7,1.1717608951207223e-8,-6.732058920007578e-4,-1.03135768079192e-6,1.1614681309859787e-8,-6.729549688437168e-4,-1.3203085634674708e-6,1.1516948301661333e-8,-6.726292231984343e-4,-1.5456410863813466e-6,1.1440629950089799e-8,-6.722669138054278e-4,-1.6825813512472906e-6,1.1394139323916218e-8,-6.719069745690607e-4,-1.728292691642922e-6,1.1378462534167964e-8,-6.715817867987357e-4,-1.6963310651301452e-6,1.1389032635968985e-8,-6.713140269531039e-4,-1.6104898771342205e-6,1.1417818254359392e-8,-6.711159576172181e-4,-1.4997911391117643e-6,1.1455027849828653e-8,-6.7098967808978e-4,-1.3947627025395655e-6,1.1490377166722129e-8,-6.709276170943395e-4,-1.3244157649111584e-6,1.1514110299334853e-8,-6.709132260466664e-4,-1.3133527174552276e-6,1.1517964713543777e-8,-6.709221924822578e-4,-1.3787160274900425e-6,1.1496180968261428e-8,-6.709246793383498e-4,-1.5271024239717297e-6,1.144652479963841e-8,-6.708890101922466e-4,-1.7521057789037506e-6,1.1371108056069637e-8,-6.707867329827515e-4,-2.03349427394575e-6,1.1276673671676083e-8,-6.705983390374779e-4,-2.3389296906621046e-6,1.1174033427878806e-8,-6.703183942720542e-4,-2.6286525837106187e-6,1.1076507144233978e-8,-6.699586275639561e-4,-2.862764821608109e-6,1.0997482902064068e-8,-6.695477636789244e-4,-3.009877260332382e-6,1.0947514998244096e-8,-6.691275106414471e-4,-3.0553669347500317e-6,1.093155672567259e-8,-6.687448110835039e-4,-3.0073333148598256e-6,1.0946969098039167e-8,-6.684411914721439e-4,-2.8982694801256994e-6,1.09829603567278e-8,-6.682410506419115e-4,-2.7805932569171573e-6,1.1022061743662119e-8,-6.681420923177971e-4,-2.7151112480580224e-6,1.1043947687668447e-8,-6.681122430425281e-4,-2.7538322953627776e-6,1.103115103055556e-8,-6.680967532338296e-4,-2.922229780866871e-6,1.0975005824736362e-8,-6.680351768836946e-4,-3.208938989025025e-6,1.0879155445024393e-8,-6.678818198079746e-4,-3.569206800689314e-6,1.07584697087957e-8,-6.676199799142348e-4,-3.941264216912157e-6,1.0633592515886972e-8,-6.672637124200508e-4,-4.26723863883779e-6,1.0523919613312888e-8,-6.668484745365341e-4,-4.508722102625259e-6,1.0442353880863865e-8,-6.664173881818245e-4,-4.652194081672177e-6,1.0393476953270497e-8,-6.660096559372878e-4,-4.705856726945458e-6,1.0374609216835914e-8,-6.6565400917304e-4,-4.692450116383464e-6,1.0378215067070535e-8,-6.65366691378365e-4,-4.641992506869934e-6,1.0394325668100645e-8,-6.651520724436302e-4,-4.586289293999795e-6,1.0412367136578511e-8,-6.650041770194664e-4,-4.555288303349263e-6,1.0422370733593156e-8,-6.649082145975189e-4,-4.574557922642622e-6,1.0415807035090087e-8,-6.648419516531094e-4,-4.663098319825658e-6,1.0386306849815094e-8,-6.647772977923628e-4,-4.830967209773467e-6,1.0330446811403125e-8,-6.64682793482468e-4,-5.0767082913095886e-6,1.0248610310513204e-8,-6.645276535009935e-4,-5.385272368662441e-6,1.014569716509483e-8,-6.642874935506787e-4,-5.727739295789978e-6,1.0031241672519338e-8,-6.639508926581502e-4,-6.064303841982294e-6,9.918438764338643e-9,-6.635248175263377e-4,-6.351327713612035e-6,9.821803180388749e-9,-6.630363208422775e-4,-6.551644593751551e-6,9.753736842483382e-9,-6.625286011154107e-4,-6.6453412099685115e-6,9.720943269391243e-9,-6.620515220562129e-4,-6.637210765563028e-6,9.721958663164957e-9,-6.616490030515382e-4,-6.557815458928014e-6,9.746799934408593e-9,-6.613470434299081e-4,-6.457206611119339e-6,9.779019488102298e-9,-6.611460182660693e-4,-6.3927400851426745e-6,9.799687434697574e-9,-6.610196289517972e-4,-6.414181155194645e-6,9.79227361540468e-9,-6.609211623926225e-4,-6.550090663171576e-6,9.747151909141079e-9,-6.607958578615187e-4,-6.799453044112043e-6,9.664428684028409e-9,-6.605961968829965e-4,-7.131600161094896e-6,9.554052462247139e-9,-6.602952658559864e-4,-7.495192731900008e-6,9.432897717263338e-9,-6.59893337291204e-4,-7.833471097170003e-6,9.319721647992294e-9,-6.594154199307799e-4,-8.10003951822256e-6,9.229912967892944e-9,-6.589015974741606e-4,-8.26940720505979e-6,9.171982193286219e-9,-6.583948475325114e-4,-8.339570999084169e-6,9.146702941363071e-9,-6.579310057521284e-4,-8.32782653290947e-6,9.1484953460235e-9,-6.575332522116057e-4,-8.26326332931551e-6,9.167892353553748e-9,-6.572109057110091e-4,-8.179301464685762e-6,9.193979644439203e-9,-6.569608894446945e-4,-8.108097437895046e-6,9.21621770862212e-9,-6.56770170806039e-4,-8.077049399664383e-6,9.225578151807406e-9,-6.566181353193237e-4,-8.106736580969876e-6,9.2152178288862e-9,-6.56478602741209e-4,-8.209430423295186e-6,9.18097422655523e-9,-6.563217982510564e-4,-8.387533414582957e-6,9.121895607077113e-9,-6.561169927829369e-4,-8.631800308226666e-6,9.04085550962115e-9,-6.558365936151278e-4,-8.91992576094595e-6,8.945052981019506e-9,-6.55462020900297e-4,-9.216878126763627e-6,8.845932484547084e-9,-6.549905970801155e-4,-9.47883318251498e-6,8.757896962005024e-9,-6.544410174747893e-4,-9.66200422791736e-6,8.695387849400742e-9,-6.538536905887626e-4,-9.73541782277881e-6,8.668667779698704e-9,-6.532830284212719e-4,-9.693338183562016e-6,8.679746644976681e-9,-6.527824423394355e-4,-9.561069012846983e-6,8.72050444633388e-9,-6.523874598641779e-4,-9.389804754378765e-6,8.77438033627454e-9,-6.521043283306284e-4,-9.24162630277522e-6,8.821227300503736e-9,-6.519088365606864e-4,-9.170835057503315e-6,8.843328210896267e-9,-6.517549256998489e-4,-9.20896440435165e-6,8.83024338053133e-9,-6.515887679402991e-4,-9.35797527614904e-6,8.781065819974303e-9,-6.513631828401716e-4,-9.592194273994584e-6,8.703882366870197e-9,-6.510485784423071e-4,-9.866901365965093e-6,8.613066195460134e-9,-6.506383852720353e-4,-1.0130449155765347e-5,8.525370284901691e-9,-6.501484713535216e-4,-1.0336665778532513e-5,8.455876704000505e-9,-6.496113485493177e-4,-1.0454609877589606e-5,8.414782975243667e-9,-6.490671674646127e-4,-1.0473577830441985e-5,8.405737418544261e-9,-6.485542315122563e-4,-1.0402716045749107e-5,8.42594207718587e-9,-6.48101570190052e-4,-1.0266290315339773e-5,8.467673384414735e-9,-6.477249772667448e-4,-1.0096801161149698e-5,8.520499798179897e-9,-6.474264817325805e-4,-9.928189624151298e-6,8.573469231980985e-9,-6.471962142913522e-4,-9.790591753984345e-6,8.616798727509629e-9,-6.470153398393853e-4,-9.707072173579713e-6,8.642931881769316e-9,-6.4685902944632e-4,-9.691946903899617e-6,8.647090904414083e-9,-6.466990567131604e-4,-9.749935634588221e-6,8.627569008879582e-9,-6.465061945891082e-4,-9.875497327061216e-6,8.585973740369635e-9,-6.462529770962636e-4,-1.005213254042066e-5,8.527489357020453e-9,-6.459175297868126e-4,-1.0252057697941712e-5,8.46101921967877e-9,-6.454888874271263e-4,-1.0437434177263124e-5,8.398808897746156e-9,-6.449732096697071e-4,-1.0564966265109888e-5,8.354946495019238e-9,-6.4439852831923e-4,-1.0595381812212404e-5,8.34225639995346e-9,-6.438138844513587e-4,-1.0507072144502154e-5,8.367854756241516e-9,-6.432790367365826e-4,-1.0308974899831868e-5,8.428993979308454e-9,-6.428454586197086e-4,-1.0044472629606271e-5,8.511840347096126e-9,-6.425364546618369e-4,-9.780404242463435e-6,8.595019151624936e-9,-6.423374992473061e-4,-9.584105091257316e-6,8.656940621566346e-9,-6.422025862017104e-4,-9.499924509528801e-6,8.683268961814048e-9,-6.420723318815535e-4,-9.536788226021915e-6,8.6709032555823e-9,-6.418937058551346e-4,-9.670339340684684e-6,8.62736165406817e-9,-6.416333150807353e-4,-9.854985606826542e-6,8.567021549391805e-9,-6.412819489618678e-4,-1.0038675384978085e-5,8.506456394204669e-9,-6.40852233208935e-4,-1.0175358821881159e-5,8.460459308358457e-9,-6.403723843214741e-4,-1.0233119886925515e-5,8.439407583253215e-9,-6.398785177155639e-4,-1.0197922583846564e-5,8.44800812947473e-9,-6.394070755339369e-4,-1.0073651943128085e-5,8.485229457435074e-9,-6.389883923031362e-4,-9.879211991447938e-6,8.545190825663756e-9,-6.386421940044092e-4,-9.643564938301254e-6,8.61872891621823e-9,-6.383754932638375e-4,-9.399866438278023e-6,8.695270282083074e-9,-6.381828126059341e-4,-9.179868626602678e-6,8.764629424150486e-9,-6.380482197594612e-4,-9.009455497870036e-6,8.818449463555083e-9,-6.379484020972791e-4,-8.905757191846968e-6,8.851137444227476e-9,-6.378559844764216e-4,-8.875794396678722e-6,8.860308373744816e-9,-6.37742611576723e-4,-8.916182840260416e-6,8.846890961194638e-9,-6.375817826161573e-4,-9.013389503892508e-6,8.815063136955268e-9,-6.373517365413405e-4,-9.144324590548281e-6,8.772088767448038e-9,-6.37038822435467e-4,-9.277480646007872e-6,8.727983133697308e-9,-6.366416476230471e-4,-9.375433709051482e-6,8.69473010267958e-9,-6.361755073060954e-4,-9.400076070259292e-6,8.68460137525384e-9,-6.356751215483993e-4,-9.321725715954837e-6,8.70721463674457e-9,-6.351921226563311e-4,-9.131431137281154e-6,8.765577089452952e-9,-6.34783668220924e-4,-8.851983055038034e-6,8.852573074499977e-9,-6.34492590110691e-4,-8.53933103808297e-6,8.950528563696693e-9,-6.343273922649219e-4,-8.26772377613986e-6,9.035920785086607e-9,-6.342551582389573e-4,-8.102013804904856e-6,9.088118007656425e-9,-6.342142013915741e-4,-8.071933386762328e-6,9.097504097485443e-9,-6.341394360266019e-4,-8.163387841999844e-6,9.06827899549311e-9,-6.339853162802021e-4,-8.329403778276332e-6,9.01508325066568e-9,-6.337359214736137e-4,-8.510810762680521e-6,8.956528860220945e-9,-6.334023030696212e-4,-8.65473815155575e-6,8.909374863487501e-9,-6.330132471509208e-4,-8.725202991217194e-6,8.885158614041552e-9,-6.326051717095914e-4,-8.706169178413972e-6,8.889176992237429e-9,-6.32214019748295e-4,-8.599843727994052e-6,8.920959050065301e-9,-6.318697327111989e-4,-8.422780448879686e-6,8.975440229886825e-9,-6.315928418750007e-4,-8.20125617049522e-6,9.044392176943476e-9,-6.313926873838825e-4,-7.966459175451952e-6,9.117945199759327e-9,-6.31267082506243e-4,-7.749777386235528e-6,9.186104282521891e-9,-6.312033160743475e-4,-7.5785372180136775e-6,9.240130028371382e-9,-6.311803126735913e-4,-7.472534294452365e-6,9.273661681811642e-9,-6.311716770969148e-4,-7.441681249593242e-6,9.283469414099118e-9,-6.311491861629334e-4,-7.484987837433047e-6,9.269772409499044e-9,-6.310862639818491e-4,-7.590780571477355e-6,9.236162458649285e-9,-6.309612058273856e-4,-7.737892241529536e-6,9.189230845951367e-9,-6.307601275839634e-4,-7.897660405035442e-6,9.137956611667645e-9,-6.304796987183105e-4,-8.036756534142556e-6,9.09284140190737e-9,-6.301296693209371e-4,-8.121168651637492e-6,9.064674114885852e-9,-6.297347052073675e-4,-8.122014010732786e-6,9.062695008476826e-9,-6.293340333682221e-4,-8.02357893613418e-6,9.092032490280441e-9,-6.289764922907992e-4,-7.832498886235678e-6,9.150771158405365e-9,-6.287088356458074e-4,-7.584313389584958e-6,9.227855564074418e-9,-6.285582300395714e-4,-7.340955663643736e-6,9.303857526237659e-9,-6.285162181702288e-4,-7.173981894358338e-6,9.35622506385365e-9,-6.28535844534191e-4,-7.137050918742098e-6,9.367918818323381e-9,-6.285482266619833e-4,-7.242236086511384e-6,9.334891322630107e-9,-6.284908233474023e-4,-7.4556587282647425e-6,9.267547066221383e-9,-6.28330425274692e-4,-7.714648020679488e-6,9.185435045716488e-9,-6.28069302206002e-4,-7.95377724697567e-6,9.109102634548203e-9,-6.277362671666278e-4,-8.124785819023314e-6,9.053825972438715e-9,-6.273721375619873e-4,-8.204270724462586e-6,9.02715680817319e-9,-6.27017398081553e-4,-8.191793049541557e-6,9.029461806338658e-9,-6.267047725449272e-4,-8.103665827061228e-6,9.055810702686439e-9,-6.26456043916988e-4,-7.966249400547607e-6,9.098033223137005e-9,-6.26281416479543e-4,-7.810389877515416e-6,9.146451274581206e-9,-6.261800463441795e-4,-7.667092566462788e-6,9.191260130576387e-9,-6.261411718711373e-4,-7.564004290537873e-6,9.223675064183579e-9,-6.261457836463466e-4,-7.522438367703082e-6,9.23690378724907e-9,-6.261689058554466e-4,-7.554911651594159e-6,9.226935824039986e-9,-6.26182575765119e-4,-7.663394769762143e-6,9.193084339014298e-9,-6.261594321595429e-4,-7.83867655737204e-6,9.138166390547462e-9,-6.26076519398364e-4,-8.061135092227624e-6,9.068247870454783e-9,-6.259188201018052e-4,-8.302926480673475e-6,8.991964522431026e-9,-6.256821123187454e-4,-8.531474630101965e-6,8.919455933728389e-9,-6.253747887567023e-4,-8.714062415411706e-6,8.860964423618094e-9,-6.250183114255093e-4,-8.823240323023451e-6,8.825167866103795e-9,-6.246458882436894e-4,-8.842823215536685e-6,8.817300503612222e-9,-6.242985755887415e-4,-8.774026346559433e-6,8.837199099376945e-9,-6.240177934968095e-4,-8.640273119230142e-6,8.87774343727035e-9,-6.238340168367981e-4,-8.487734929015043e-6,8.924628410892147e-9,-6.237537835039231e-4,-8.37786762163323e-6,8.958649435262117e-9,-6.237508622334895e-4,-8.370050553809897e-6,8.961109428361436e-9,-6.237694285501078e-4,-8.498608243715725e-6,8.921029687418638e-9,-6.237425116459058e-4,-8.75592709653261e-6,8.840509552635665e-9,-6.236182223750581e-4,-9.0935440897417e-6,8.734482255018053e-9,-6.233789176946422e-4,-9.44210315649724e-6,8.62453087546554e-9,-6.230431618178639e-4,-9.738006393072087e-6,8.530559779025655e-9,-6.226528415322329e-4,-9.942072412796151e-6,8.464944949980187e-9,-6.222558156538971e-4,-1.0044216892862036e-5,8.431044644216811e-9,-6.218928123420268e-4,-1.0057759649626142e-5,8.424931676993069e-9,-6.215911924046659e-4,-1.0010051523072495e-5,8.438260126232764e-9,-6.213639804945358e-4,-9.934048776771606e-6,8.460847692598394e-9,-6.212115296909202e-4,-9.862436775050359e-6,8.482499035264433e-9,-6.211238864357817e-4,-9.823973462843352e-6,8.494171700339035e-9,-6.210830596535341e-4,-9.841115150435778e-6,8.488757155704299e-9,-6.210651942122257e-4,-9.928215073960674e-6,8.461672312188594e-9,-6.210429443543682e-4,-1.0090001829574346e-5,8.411340895070526e-9,-6.209883936927952e-4,-1.032045635967511e-5,8.339532086435201e-9,-6.208766895726924e-4,-1.0602611237518307e-5,8.251410557946112e-9,-6.206901011511374e-4,-1.0909904384581257e-5,8.155117882712867e-9,-6.204217801816662e-4,-1.1209428967393452e-5,8.060785794006027e-9,-6.200783346355796e-4,-1.1467000570356854e-5,7.978999665257574e-9,-6.196803527606607e-4,-1.1653487857353938e-5,7.918867885019981e-9,-6.192602675084233e-4,-1.1751341629004252e-5,7.886009589301413e-9,-6.18857430993645e-4,-1.1760013081941588e-5,7.880853644284182e-9,-6.185107199373036e-4,-1.1698990162283051e-5,7.897639687734814e-9,-6.182494033759342e-4,-1.1607106693188978e-5,7.924550386176266e-9,-6.180837782626559e-4,-1.1536704553317361e-5,7.945441153139379e-9,-6.17998354061986e-4,-1.1541930108901036e-5,7.943422534415343e-9,-6.179514865732182e-4,-1.1662608663681637e-5,7.905878369024749e-9,-6.178847530264709e-4,-1.1908666705688085e-5,7.829382187794986e-9,-6.177413716940561e-4,-1.225291771545529e-5,7.722050838337925e-9,-6.174866683392963e-4,-1.2638281908291842e-5,7.601388082277714e-9,-6.171202061499132e-4,-1.2997807711744528e-5,7.488094639614473e-9,-6.166733164451345e-4,-1.3277552122048224e-5,7.398956214429256e-9,-6.161948260617495e-4,-1.3451111439177265e-5,7.342324255674225e-9,-6.157338992816079e-4,-1.3521276834735159e-5,7.317585667968248e-9,-6.153277910312762e-4,-1.351221220619276e-5,7.3175400954822244e-9,-6.149969832299286e-4,-1.345864223227892e-5,7.331678474457581e-9,-6.147459001310118e-4,-1.3396792379450818e-5,7.3489284361196675e-9,-6.14566195981989e-4,-1.335865891362545e-5,7.3594093806847335e-9,-6.144404163975216e-4,-1.3369061432935648e-5,7.3553652588823905e-9,-6.143451013492217e-4,-1.3444276092296466e-5,7.331624223806665e-9,-6.142533201726146e-4,-1.3591271145411236e-5,7.285864502738724e-9,-6.141370824533147e-4,-1.3807054893883965e-5,7.2188286363125555e-9,-6.139701752177742e-4,-1.4078197634895255e-5,7.134475176715785e-9,-6.137317622253945e-4,-1.4381127354302392e-5,7.03989660873347e-9,-6.13410548401449e-4,-1.4684067691371548e-5,6.944744457685035e-9,-6.130086364730966e-4,-1.4951295234998012e-5,6.8599511266353936e-9,-6.125436581487522e-4,-1.5149749237378634e-5,6.795727421966501e-9,-6.120476639627279e-4,-1.5256983677622905e-5,6.759136642679807e-9,-6.115619176413706e-4,-1.5268340231572266e-5,6.751886205597447e-9,-6.111281095430912e-4,-1.520077746265615e-5,6.769114447606619e-9,-6.107779587857513e-4,-1.5091461683002552e-5,6.799746818271109e-9,-6.10524015294988e-4,-1.4990666324170982e-5,6.828571027830531e-9,-6.103544553284269e-4,-1.4950126437351983e-5,6.839718154874809e-9,-6.10233932630094e-4,-1.5009403395997819e-5,6.820816675408024e-9,-6.101112797303565e-4,-1.5183860384006196e-5,6.7667449207401965e-9,-6.099330136988942e-4,-1.5458296216177136e-5,6.6817180549403645e-9,-6.096591780398321e-4,-1.5789545255279567e-5,6.578625916310926e-9,-6.092759401267423e-4,-1.611861496564348e-5,6.475384794437283e-9,-6.087995316766636e-4,-1.638857118742033e-5,6.389456320634693e-9,-6.082696917744599e-4,-1.656102986792536e-5,6.332762451172584e-9,-6.07735931357823e-4,-1.6624724248411486e-5,6.309028251969762e-9,-6.07243028636269e-4,-1.659408062376702e-5,6.314176973263146e-9,-6.068212130456064e-4,-1.6500688633924005e-5,6.3388763395423195e-9,-6.064828882107512e-4,-1.6382732655089433e-5,6.3716957047222936e-9,-6.062244250029457e-4,-1.6276375396916556e-5,6.401688363734559e-9,-6.060303124501623e-4,-1.6210566121514825e-5,6.41997117246288e-9,-6.058775295989655e-4,-1.6204774019256874e-5,6.420448907864246e-9,-6.057391575612956e-4,-1.6268443228459086e-5,6.400024095330046e-9,-6.055871563899351e-4,-1.640110876257458e-5,6.358597590462493e-9,-6.053947651586242e-4,-1.6592563064539658e-5,6.299040120511544e-9,-6.051391799853258e-4,-1.6823062293831563e-5,6.2271479239230684e-9,-6.04804958969757e-4,-1.7064185629920318e-5,6.15140407656365e-9,-6.043880305658054e-4,-1.7281339145854306e-5,6.082244629251485e-9,-6.038993664978827e-4,-1.743882255386278e-5,6.03054138334135e-9,-6.033664982363028e-4,-1.7507647128342022e-5,6.005236775662678e-9,-6.028306776843586e-4,-1.747471621344875e-5,6.0105545030052955e-9,-6.02338498179153e-4,-1.7350074414647643e-5,6.043785475000533e-9,-6.019293636463869e-4,-1.7168208077473955e-5,6.094852354472843e-9,-6.016229799273229e-4,-1.6981102965108023e-5,6.148328418570691e-9,-6.014120043088848e-4,-1.6844415703121967e-5,6.1875079574704055e-9,-6.012631542790681e-4,-1.6801491798937394e-5,6.199152357907398e-9,-6.011264926259588e-4,-1.687094638850435e-5,6.177250027198649e-9,-6.009494858060641e-4,-1.7041783355707502e-5,6.124605564008008e-9,-6.006912495843881e-4,-1.7277030403387907e-5,6.051910031149934e-9,-6.003329547922971e-4,-1.7524265175610315e-5,5.974701125327572e-9,-5.998817609412311e-4,-1.7729749635034893e-5,5.909152133979997e-9,-5.993674834698096e-4,-1.7852060415235455e-5,5.8679359897686786e-9,-5.98833377167506e-4,-1.7871308208750187e-5,5.857377281089162e-9,-5.983242961249349e-4,-1.7791603804934904e-5,5.876628602108236e-9,-5.978761089750183e-4,-1.763692721889734e-5,5.9188348328191164e-9,-5.97509246371083e-4,-1.744281060909608e-5,5.973566370425565e-9,-5.972272340443155e-4,-1.724717783696112e-5,6.029530158965291e-9,-5.970191412732754e-4,-1.708303930127975e-5,6.076760853223087e-9,-5.968639601907031e-4,-1.6974182393121108e-5,6.107949062772968e-9,-5.967351618909186e-4,-1.6933562355692315e-5,6.1189757620988596e-9,-5.966044914543551e-4,-1.6963408114122988e-5,6.108924653343465e-9,-5.964448552706594e-4,-1.7056054741231575e-5,6.079858424794432e-9,-5.962326779452772e-4,-1.719488339402509e-5,6.036551327657856e-9,-5.959503269411983e-4,-1.7355296242159556e-5,5.9862122504836265e-9,-5.955890709894159e-4,-1.7506243438176608e-5,5.9380510048463094e-9,-5.951525234145372e-4,-1.7613258416163484e-5,5.902393637339857e-9,-5.946596553230791e-4,-1.764400034962936e-5,5.889033529766786e-9,-5.941454005656148e-4,-1.757658081028564e-5,5.9047300999132285e-9,-5.936562505153676e-4,-1.740909145309199e-5,5.9503386560754e-9,-5.932393300043767e-4,-1.7166185049999746e-5,6.018820818675055e-9,-5.929270253618056e-4,-1.6897363809678338e-5,6.095715953083003e-9,-5.927235829331455e-4,-1.6664334583585255e-5,6.162832492505709e-9,-5.926012168281408e-4,-1.6521086061127168e-5,6.204080876826821e-9,-5.925088318791681e-4,-1.6495650783895652e-5,6.2108462578212325e-9,-5.923893296595289e-4,-1.6581983910685432e-5,6.18445634623603e-9,-5.921973240230338e-4,-1.6744373968298434e-5,6.135018198325406e-9,-5.919105305805832e-4,-1.6930486544110382e-5,6.077709827522491e-9,-5.915325837551485e-4,-1.708674963487434e-5,6.028320742756395e-9,-5.910887401414671e-4,-1.7171114333858196e-5,5.999481940305171e-9,-5.906173977802621e-4,-1.7160751663905477e-5,5.998318193545036e-9,-5.901602907269286e-4,-1.7054266849847147e-5,6.025679671747184e-9,-5.897536026274595e-4,-1.6869186278252847e-5,6.076768658723353e-9,-5.894215706944987e-4,-1.6636088071657184e-5,6.142787676934763e-9,-5.891734417193177e-4,-1.639112845867565e-5,6.21311247089221e-9,-5.890037891503861e-4,-1.616881901687457e-5,6.277444531418832e-9,-5.888953870874903e-4,-1.599649526801642e-5,6.32750261058349e-9,-5.888234156540204e-4,-1.5891120266408232e-5,6.358035497480615e-9,-5.887598278097893e-4,-1.585830828911002e-5,6.36716114540014e-9,-5.886770911880141e-4,-1.5892951435849457e-5,6.356201350362242e-9,-5.88551067772663e-4,-1.598065881617845e-5,6.329251478975357e-9,-5.883632730491481e-4,-1.609944079656462e-5,6.292675486505938e-9,-5.881029486085081e-4,-1.622153632414498e-5,6.254574948934901e-9,-5.877692932525501e-4,-1.6315735016464423e-5,6.224131558643309e-9,-5.873738337045345e-4,-1.6350916709415508e-5,6.2105932820424296e-9,-5.869421485315761e-4,-1.630165097021894e-5,6.221632150191717e-9,-5.865131121598357e-4,-1.6156063475258574e-5,6.261002414793579e-9,-5.861331744440621e-4,-1.592434760802166e-5,6.325989749491587e-9,-5.858441940187316e-4,-1.5643598634390996e-5,6.405942312898085e-9,-5.856671951075539e-4,-1.5373106219251778e-5,6.483607719282582e-9,-5.855897763285556e-4,-1.517729276675414e-5,6.540086767802591e-9,-5.855664407766135e-4,-1.5101743305100796e-5,6.561819413722951e-9,-5.855345304499817e-4,-1.5154956209859986e-5,6.545946710766161e-9,-5.854378007236991e-4,-1.5306366023333386e-5,6.500984799091855e-9,-5.852448952227367e-4,-1.550045098503084e-5,6.442830961710452e-9,-5.849551516575722e-4,-1.567734639813534e-5,6.388848412759949e-9,-5.845930082893017e-4,-1.5789777542943528e-5,6.352965558410412e-9,-5.841969678310368e-4,-1.5811729052473348e-5,6.343113417189745e-9,-5.838084552194186e-4,-1.5739511632880423e-5,6.360814546463471e-9,-5.834633032295308e-4,-1.5588003820527e-5,6.402145833924053e-9,-5.831864760835484e-4,-1.538472081382847e-5,6.4593502606737386e-9,-5.829896181558738e-4,-1.5163375096637597e-5,6.5226561160815544e-9,-5.828708999533577e-4,-1.4957769589611858e-5,6.582074977801076e-9,-5.828167555766546e-4,-1.479662672105976e-5,6.628984531476504e-9,-5.828049993600993e-4,-1.46998740108272e-5,6.657304486326205e-9,-5.828086784632086e-4,-1.4676619073704028e-5,6.664156600488167e-9,-5.828000486403008e-4,-1.472477456925716e-5,6.649997471487258e-9,-5.827541399829672e-4,-1.4832100153552331e-5,6.618295601842242e-9,-5.826515746817173e-4,-1.4978198357449995e-5,6.574915976578972e-9,-5.824806499688132e-4,-1.5136975222470618e-5,6.5273858129103555e-9,-0.00058223891266244855,-1.5279382997478107e-5,6.484113573877451e-9,-5.819343932522649e-4,-1.537659130322262e-5,6.453510098108357e-9,-5.815864337643335e-4,-1.540395190071223e-5,6.442875322162274e-9,-5.812255138914551e-4,-1.5346207013270155e-5,6.456887019322757e-9,-5.808906783087563e-4,-1.5203879326331496e-5,6.495696015125998e-9,-5.806227398257667e-4,-1.4999252917115385e-5,6.553106536171523e-9,-5.804523980144355e-4,-1.4778150938693694E-05,6.6159779015583296e-9,-5.803857787226134e-4,-1.460244790593015e-5,6.666344613112382e-9,-5.803949019080188e-4,-1.453107430828226e-5,6.68691651811743e-9,-5.804222577193308e-4,-1.4595598468279076e-5,6.6681996557004115e-9,-5.804015691477434e-4,-1.4784365571006996e-5,6.613182223466211e-9,-5.802844416075218e-4,-1.504659664064087e-5,6.536251455252701e-9,-5.800572407115345e-4,-1.5314205201811868e-5,6.456956105272316e-9,-5.79740462121484e-4,-1.5527257460748158e-5,6.392682319350163e-9,-5.793754455308698e-4,-1.564997575685766e-5,6.354031421288331e-9,-5.79008526869674e-4,-1.5673984575231003E-05,6.3438332685434564e-9,-5.786793595545836e-4,-1.561305703577987e-5,6.358555023821292e-9,-5.78414926698478e-4,-1.5494822966848187e-5,6.390561211013941e-9,-5.782279782895778e-4,-1.535291284406682e-5,6.430282529202295e-9,-5.781179986625985e-4,-1.5220866757312826e-5,6.467953037038186e-9,-5.780733038593612e-4,-1.5127728821522725e-5,6.494942808591026e-9,-5.780737214613339e-4,-1.5094878202343984e-5,6.5047765753731806e-9,-5.780937304323509e-4,-1.5133945325895573e-5,6.493829724860568e-9,-5.781059012122124e-4,-1.5245845768728994e-5,6.461654192249107e-9,-5.780844231366714e-4,-1.5420967008494582E-05,6.410916404303534e-9,-5.780084375089962e-4,-1.5640566187065733e-5,6.346952753693187e-9,-5.778647777628711e-4,-1.5879285361295647e-5,6.277008199105833e-9,-5.776498175490725e-4,-1.6108436934896513e-5,6.209288793870668e-9,-5.773703656839252e-4,-1.6299721111280603e-5,6.151931069035016e-9,-5.770436111533959e-4,-1.6429208290678547e-5,6.111913238799296e-9,-5.766960225533119e-4,-1.6481506020845262e-5,6.093889659946264e-9,-5.763608734161528e-4,-1.6454038016908552e-5,6.098936037071565e-9,-5.760736744361726e-4,-1.6361021724264736e-5,6.123317511020036e-9,-5.758647102549619e-4,-1.6235696451862072e-5,6.157725998483951e-9,-5.757488547335339e-4,-1.612803540234014e-5,6.1878352067051535e-9,-5.757153315080947e-4,-1.609480237938911e-5,6.197125012537102e-9,-5.757234435926061e-4,-1.6181340271018654e-5,6.17217305833007e-9,-5.757111211388329e-4,-1.6400971995423106e-5,6.108703432860775e-9,-5.756170143529824e-4,-1.6724228696811727e-5,6.014819069588441e-9,-5.754058752564376e-4,-1.7087730422599016e-5,5.908527015219574e-9,-5.750819117894468e-4,-1.7419566737748216e-5,5.810457691770534e-9,-5.746829127406637e-4,-1.7665934924859706e-5,5.736209930949652e-9,-5.742617293776332e-4,-1.7804887133825812e-5,5.692403621165638e-9,-5.738676244788915e-4,-1.7844643668928444e-5,5.677123312045796e-9,-5.735352118200017e-4,-1.781324586487339e-5,5.682774688163753e-9,-5.732813705044003e-4,-1.774712544477777e-5,5.699224028512855e-9,-5.731070706253558e-4,-1.7682465513048927e-5,5.716183635261324e-9,-5.730010810481334e-4,-1.7650014543434743e-5,5.7246996299768535e-9,-5.729437243720952e-4,-1.7672436560521165e-5,5.717992329661441e-9,-5.729101327422091e-4,-1.77629912703616e-5,5.691943387538161e-9,-5.728732254490138e-4,-1.7924881686606425e-5,5.645364913125561e-9,-5.728066872098459e-4,-1.8151183111504288e-5,5.580046983978404e-9,-5.726880446715707e-4,-1.8425518479711568e-5,5.500544376149344e-9,-5.725017360320156e-4,-1.8723776519021976e-5,5.4136497171616706e-9,-5.722417478110209e-4,-1.901709758465021e-5,5.327525281669176e-9,-5.719132058612187e-4,-1.9275973453983113e-5,5.250556794951275e-9,-5.715324599224961e-4,-1.9474966424702655e-5,5.190061549896955e-9,-5.711254487065863e-4,-1.9597425970417595e-5,5.150993130292952e-9,-5.707243215314012e-4,-1.963951786184574e-5,5.134796911166756e-9,-5.703624645452386e-4,-1.961289496480425e-5,5.138582384870229e-9,-5.700681701023597e-4,-1.9545349551733103e-5,5.154808129149603e-9,-5.698573617980196e-4,-1.947850234148492e-5,5.171796776237571e-9,-5.697265168248463e-4,-1.946126166119291e-5,5.175504776714801e-9,-5.696483046445741e-4,-1.9538307489946467e-5,5.152814866181088e-9,-5.695737447050487e-4,-1.9735023712205888e-5,5.095954657144991e-9,-5.694440581573207e-4,-2.0044122435153433e-5,5.006492424902162e-9,-5.692107976121244e-4,-2.0422259733411498e-5,4.896447185420986e-9,-5.688556702159739e-4,-2.080239735784011e-5,4.784807248298537e-9,-5.683984430252771e-4,-2.1118146298752406e-5,4.69055903235853e-9,-5.678877874524411e-4,-2.1327200844530532e-5,4.6259837892894646e-9,-5.673813072802742e-4,-2.1421699487486857e-5,4.593705379214873e-9,-5.669266461901139e-4,-2.1423333992840117e-5,4.588040913127525e-9,-5.665515251973581e-4,-2.1370168449335505e-5,4.598631280140418e-9,-5.66262954244887e-4,-2.1303510202976556e-5,4.614029495947506e-9,-5.660516519242294e-4,-2.1259150169743164e-5,4.624106881604416e-9,-5.658977760906469e-4,-2.1263246516499423e-5,4.621241923637268e-9,-5.657758344743934e-4,-2.1331262909287216e-5,4.600715978969188e-9,-5.656582879656547e-4,-2.146824690958318e-5,4.560744399958647e-9,-5.655182799852074e-4,-2.166944979816653e-5,4.502372881234427e-9,-5.653320939464026e-4,-2.19210611198664e-5,4.429288721729575e-9,-5.650817267772786e-4,-2.2201302733604196e-5,4.347494108741701e-9,-5.647576281566446e-4,-2.248238891148829e-5,4.2647329227178e-9,-5.64361175875774e-4,-2.273385814627313e-5,4.1895539317782425e-9,-5.639060211063388e-4,-2.2927360460003696e-5,4.129994037758887e-9,-5.634173669126164e-4,-2.3042324624474837e-5,4.092025805841426e-9,-5.629285951340259e-4,-2.3071330028784256e-5,4.078067292741761e-9,-5.624753358397186e-4,-2.3023652525244365e-5,4.085953126634584e-9,-5.620879235594856e-4,-2.2925599059856908e-5,4.1087412604200885e-9,-5.617838311213657e-4,-2.2816948292584702e-5,4.13556726191145e-9,-5.615618506350042e-4,-2.274366245931516e-5,4.1535543827756625e-9,-5.613996862607292e-4,-2.2747751693369897e-5,4.150602400752755e-9,-5.61256426475516e-4,-2.2855979724977274e-5,4.1186293748158945e-9,-5.61080812039059e-4,-2.307016575944345e-5,4.056477812301431e-9,-5.608247544560862e-4,-2.3362823347901296e-5,3.971353014138016e-9,-5.6045888275338e-4,-2.3681771753724775e-5,3.877666551810311e-9,-5.599840255643514e-4,-2.3964648029816697e-5,3.7929726560466655e-9,-5.594323224548366e-4,-2.4158896301923775e-5,3.732284697554104e-9,-5.588562140180068e-4,-2.4238382403495358e-5,3.7033386543166194e-9,-5.583104935056323e-4,-2.4208922097151482e-5,3.7049913841555217e-9,-5.578362118896362e-4,-2.4101634993633252e-5,3.729013562684922e-9,-5.574526700823866e-4,-2.395959922159319e-5,3.763717738012945e-9,-5.571580150477938e-4,-2.3824918225424018e-5,3.7974724057465164e-9,-5.56934945270612e-4,-2.3730431642789787e-5,3.820986693463586e-9,-5.567575402096818e-4,-2.369650431855389e-5,3.828264474037562e-9,-5.565968561839238e-4,-2.3731175634325677e-5,3.81667238499676e-9,-5.564247258473144e-4,-2.383170766272784e-5,3.786608603817477e-9,-5.562162343773809e-4,-2.3986308687498875e-5,3.741076017959136e-9,-5.559516320965893e-4,-2.41756410521933e-5,3.6852669334650524e-9,-5.556182989939095e-4,-2.4374329729557413e-5,3.626126257835752e-9,-5.552129829469255e-4,-2.455308708972398e-5,3.5717509128408136e-9,-5.547439478003086e-4,-2.4682169708976556e-5,3.5304410056635687e-9,-5.542320441001034e-4,-2.4736519034990855e-5,3.509299202176376e-9,-5.537093394875636e-4,-2.470209240070845e-5,3.5124945121858324e-9,-5.532141884717492e-4,-2.4581739735308707e-5,3.539625413001244e-9,-5.527827987017785e-4,-2.4398065123244182e-5,3.584874043486559e-9,-5.524392207026548e-4,-2.419093064879187e-5,3.6375935558350362E-09,-5.521871673866484e-4,-2.400904254983496e-5,3.6845003460724823e-9,-5.52006996859421e-4,-2.3897600320895216e-5,3.7129769442225496e-9,-5.518594417411545e-4,-2.3885806156130697e-5,3.714505319352247e-9,-5.516952472542898e-4,-2.3978206075858976e-5,3.6871706513466653e-9,-5.514680023266997e-4,-2.415252676916681e-5,3.636467576060659e-9,-5.511466570996784e-4,-2.436472997812125e-5,3.5741160763841065e-9,-5.507243054631822e-4,-2.456016575596165e-5,3.5151030037156743e-9,-5.502204943898792e-4,-2.4688078368491355e-5,3.4736716022299434e-9,-5.49675845316952e-4,-2.4715297420699776e-5,3.4594450841273604e-9,-5.491403496431156e-4,-2.4634524609268043e-5,3.475010754579904e-9,-5.486594079579832e-4,-2.4464309834586896e-5,3.5158016687115214e-9,-5.482626949453814e-4,-2.424130364105868e-5,3.572121989232335e-9,-5.479593003710058e-4,-2.400859263852101e-5,3.6322781071167195e-9,-5.477393924139225e-4,-2.380483572567349e-5,3.685543859039702e-9,-5.475800136344878e-4,-2.365734300350956e-5,3.7241138416981567e-9,-5.47451900115605e-4,-2.3579686113701558e-5,3.743864278401933e-9,-5.473251545092862e-4,-2.3572576485177517e-5,3.744220422532077e-9,-5.471730460260657e-4,-2.3626248739021626e-5,3.727569108803425e-9,-5.469742478632765e-4,-2.3723043848052887e-5,3.6985616396725427e-9,-5.467142469598954e-4,-2.3839630731377964e-5,3.6634824609621807e-9,-5.463866264206015e-4,-2.3948973655604125e-5,3.6296880385067596e-9,-5.4599456793534e-4,-2.4022629138410048e-5,3.604980769764583e-9,-5.455523444943196e-4,-2.4034135649642785e-5,3.5967054365603564e-9,-5.450858818683846e-4,-2.396401744104895e-5,3.6104037986387385e-9,-5.446308564687652e-4,-2.380610222496027e-5,3.648086038965713e-9,-5.442267710418497e-4,-2.3573376044700058e-5,3.7065940327411654e-9,-5.43906780201333e-4,-2.3300037015731352e-5,3.776970362392915e-9,-5.436858585814063e-4,-2.303631065445945e-5,3.8457757017923984e-9,-5.43552613478327e-4,-2.28353475000358e-5,3.898554409891338e-9,-5.434699258623914e-4,-2.2736277504907688e-5,3.924381501274142e-9,-5.433855832143338e-4,-2.275078970747129e-5,3.919540539705527e-9,-5.43248646299094e-4,-2.285936214945721e-5,3.888688548443496e-9,-5.430245801652687e-4,-2.3018194797770242e-5,3.8431759853901846e-9,-5.427037893107168e-4,-2.3172944399802506e-5,3.7974973736510936e-9,-5.423020260258028e-4,-2.3273629234107787e-5,3.765329016282113e-9,-5.418542195221602e-4,-2.328631805513169e-5,3.756319626683319e-9,-5.414045400541133e-4,-2.3199382210688513e-5,3.774257587440266e-9,-5.409955890221134e-4,-2.302384304625818e-5,3.8167930066406206e-9,-5.406592269132189e-4,-2.2788582348018324e-5,3.876564618794517e-9,-5.404109156371855e-4,-2.253214165155441e-5,3.943315026925249e-9,-5.402484736817223e-4,-2.2293496058127136e-5,4.00637464546443e-9,-5.401548723226671e-4,-2.210423231623976e-5,4.056855142789439e-9]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json new file mode 100644 index 0000000..f56819c --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":7000,"numberOfSamples":1000,"samples":[-5.401035826582183e-4,-2.1983771746004456e-5,4.089071108861903e-9,-5.400645679375473e-4,-2.1937995914044596e-5,4.1010390739496695e-9,-5.400093979365809e-4,-2.1960549237341188e-5,4.094200825458988e-9,-5.399147607226752e-4,-2.203560775605646e-5,4.072680770337793e-9,-5.397644338651072e-4,-2.2140989396072942e-5,4.0424039620270295e-9,-5.395502643031555e-4,-2.2250959079911428e-5,4.010291455194114e-9,-5.392727708698771e-4,-2.233868896010399e-5,3.983582390762636e-9,-5.389417235021638e-4,-2.2378792834005243e-5,3.969178139964558e-9,-5.385766058145648e-4,-2.235055698671764e-5,3.972815745495291e-9,-5.382062428829531e-4,-2.2242365349685453e-5,3.9978965146973945e-9,-5.378662132655593e-4,-2.205712418011711e-5,4.043993326717811e-9,-5.375924932704364e-4,-2.181705877637256e-5,4.105479870305896e-9,-5.374109340395555e-4,-2.1564488189815053e-5,4.171221914461289e-9,-5.373252109046606e-4,-2.13546121672999e-5,4.226432351021938e-9,-5.373095626709229e-4,-2.123923851906108e-5,4.256999417283581e-9,-5.373130817418842e-4,-2.1246850964482913e-5,4.25485673473855e-9,-5.372765380678705e-4,-2.136960735856047e-5,4.221561718856039e-9,-5.371540300970259e-4,-2.156549994879516e-5,4.167859343731849e-9,-5.36928145915775e-4,-2.177449463181616e-5,4.109507993256763e-9,-5.36612298142394e-4,-2.193926959851254e-5,4.061836554881471e-9,-5.362421974391817e-4,-2.202084762893932e-5,4.035594559950374e-9,-5.358628658080441e-4,-2.200502185841941e-5,4.035163172736923e-9,-5.355167351147426e-4,-2.1900830823744038e-5,4.058798324504693e-9,-5.35235449411885e-4,-2.173439788390032e-5,4.100071676730384e-9,-5.350357193602122e-4,-2.15410881740401e-5,4.14980207032798e-9,-5.349185757880749e-4,-2.135782693181579e-5,4.198050291539687e-9,-5.348712290073628e-4,-2.121657442592248e-5,4.2359280087428855e-9,-5.348708000481933e-4,-2.1139615342117445e-5,4.257004944159546e-9,-5.348890826615417e-4,-2.113709309176623e-5,4.258128208977309e-9,-5.348974104172614e-4,-2.1206799246401138e-5,4.239584522007182e-9,-5.348708384321045e-4,-2.1335822917691524e-5,4.204678615706449e-9,-5.347911231697716e-4,-2.1503424398811796e-5,4.158913513206647e-9,-5.346483663470459e-4,-2.1684383203511062e-5,4.109023325019758e-9,-5.344415971986584e-4,-2.185222293312799e-5,4.062070768370815e-9,-5.341787121227865e-4,-2.198213649495927e-5,4.024683100836483e-9,-5.338760303296781e-4,-2.2053786749643512e-5,4.002365575691231e-9,-5.335574557412858e-4,-2.2054309116071213e-5,3.998758028608726e-9,-5.332528017860458e-4,-2.198181627770456e-5,4.014702338546216e-9,-5.32994271803446e-4,-2.1849184863030615e-5,4.047158626760407e-9,-5.328099775273082e-4,-2.1686695872980368E-05,4.088373074123842e-9,-5.327143982259301e-4,-2.1540670747909262e-5,4.1261167888255816e-9,-5.326982547305342e-4,-2.146472539588816e-5,4.145954976805639e-9,-5.327237676269208e-4,-2.150269819024173e-5,4.135827219007261e-9,-5.32732172820136e-4,-2.166880035547954e-5,4.091442962833996e-9,-5.32664363807273e-4,-2.193675634261866e-5,4.019307535221708e-9,-5.324850262715923e-4,-2.2247356034033065e-5,3.93482109123221e-9,-5.321959712692641e-4,-2.253169043764306e-5,3.856170494966331e-9,-5.318318024819819e-4,-2.2736299986202895e-5,3.797697407775919e-9,-5.314434001136979e-4,-2.283727543038531e-5,3.7661716224598815e-9,-5.310801862783224e-4,-2.2840328090950416e-5,3.760701663621395e-9,-5.307784695622606e-4,-2.277209911293882e-5,3.774865010501329e-9,-5.305570300482153e-4,-2.2669296597542187e-5,3.799377675031908e-9,-5.304177923198672e-4,-2.2569563199808032e-5,3.824373068544768e-9,-5.303490345079164e-4,-2.2505211219014473e-5,3.841055895162692e-9,-5.303294436667859e-4,-2.2499458669989806e-5,3.842819986704146e-9,-5.303323047521583e-4,-2.2564506861846283e-5,3.825934653411622e-9,-5.303295770130921e-4,-2.2701095439328812e-5,3.78981094362531e-9,-5.302956400451363e-4,-2.2899349303107257e-5,3.736840685640963e-9,-5.30210473665667e-4,-2.314073527658426e-5,3.6718507329490764e-9,-5.300620142371433e-4,-2.340093393614476e-5,3.601265981895817e-9,-5.298474349228372e-4,-2.3653284469214588e-5,3.532132956929273e-9,-5.29573308984056e-4,-2.3872320401723e-5,3.4711768964710575e-9,-5.292548431176042e-4,-2.403707365259649e-5,3.4239812057610383e-9,-5.289143407918906e-4,-2.4134058857944783e-5,3.3942741989696835e-9,-5.285789266630395e-4,-2.4159906281443744e-5,3.3832709646259577e-9,-5.282773952237134e-4,-2.4123609199085298e-5,3.389033411558258e-9,-5.280357364388392e-4,-2.404808982327215e-5,3.4059246595776906e-9,-5.278708810726782e-4,-2.3969949940549298e-5,3.4245089739342943e-9,-5.277831391864141e-4,-2.3935357712190903e-5,3.4325187746853774e-9,-5.277497546540487e-4,-2.3990053843999665e-5,3.417490568679712e-9,-5.277243373408124e-4,-2.416362760309801e-5,3.371043381811958e-9,-5.276472969010053e-4,-2.4453303594010498e-5,3.2933522318209953e-9,-5.274672038760931e-4,-2.4817592116745615e-5,3.1949762152372857e-9,-5.271634422555336e-4,-2.5188059386224728e-5,3.0937979755767632e-9,-5.267559068389037e-4,-2.549567899523349e-5,3.008057415556971e-9,-5.262952781608044e-4,-2.569664316277229e-5,2.9495561606916857e-9,-5.258412694183832e-4,-2.5783493066863733e-5,2.9207489680924703e-9,-5.254425066389419e-4,-2.5779503885456728e-5,2.9161612247094987e-9,-5.251263833011977e-4,-2.5724489785007588e-5,2.925940256027055e-9,-5.248986095698239e-4,-2.566102959629115e-5,2.9392604634341714e-9,-5.247480432907525e-4,-2.5625368004893986e-5,2.946595015690205e-9,-5.246528338231885e-4,-2.5643091786020372e-5,2.940887498147975e-9,-5.245858121778989e-4,-2.572797628618578e-5,2.918009092055048e-9,-5.245186697908287e-4,-2.5882406676612352e-5,2.8768303754599108e-9,-5.244252403009383e-4,-2.6098529986454154e-5,2.8190430572214277e-9,-5.242842104460674e-4,-2.6359918036558112e-5,2.748752781998075e-9,-5.240813809095547e-4,-2.664376012583758e-5,2.6718566779627634e-9,-5.23811405473642e-4,-2.6923697743507696e-5,2.5952305181850944e-9,-5.234786998958045e-4,-2.7173303690041893e-5,2.5257824612885647e-9,-5.230971720563157e-4,-2.7369871435687406e-5,2.4694878843742183e-9,-5.226886747385083e-4,-2.749801736194075e-5,2.4305157487672832e-9,-5.222802740203602e-4,-2.7552679878417226e-5,2.410501767346455e-9,-5.219004721067165e-4,-2.7541114744677728e-5,2.4080150610133087e-9,-5.215746064004773e-4,-2.748348611429587e-5,2.4182963593044943e-9,-5.213196916609409e-4,-2.741169261001642e-5,2.433387542607336e-9,-5.211390633776294e-4,-2.7365830864708946e-5,2.442883976030173e-9,-5.210177939670833e-4,-2.7387386588784694e-5,2.4356382416405185e-9,-5.2092103264559e-4,-2.7508753633437043e-5,2.4025749182162106e-9,-5.207983793056417e-4,-2.7740648686792387e-5,2.3401865242185253e-9,-5.205966266482828e-4,-2.806223642295004e-5,2.253350576167634e-9,-5.202789824851698e-4,-2.8421269302758358e-5,2.1554312055901617e-9,-5.198423209709797e-4,-2.8748981292602243e-5,2.064380772209385e-9,-5.193213569961983e-4,-2.8985277857182498e-5,1.996093068377223e-9,-5.187754286828383e-4,-2.9100856801229018e-5,1.95860814721846e-9,-5.182654734879904e-4,-2.910408008464851e-5,1.950328402209735e-9,-5.17834468885133e-4,-2.903146570281326e-5,1.9624204795998646e-9,-5.174994717055985e-4,-2.8930642345991606e-5,1.9830589980046977e-9,-5.172543344144145e-4,-2.8845521813800735e-5,2.0010793286060667e-9,-5.170775031307184e-4,-2.8808046397317225e-5,2.0080420772500573e-9,-5.169400421587481e-4,-2.883586587420426e-5,1.998918998843043e-9,-5.168116638617822e-4,-2.8933416322078027e-5,1.9719933681402133e-9,-5.166645952694134e-4,-2.9094191480639365e-5,1.928446821526537e-9,-5.16476024252827e-4,-2.930309443473024e-5,1.8718459878098334e-9,-5.162298604848831e-4,-2.9538674218475745e-5,1.8075644448687839e-9,-5.15918183163581e-4,-2.9775463189840496e-5,1.7421226458261029e-9,-5.155423951219354e-4,-2.9986754143992856e-5,1.682415416929058e-9,-5.151137407302886e-4,-3.0148054298078004e-5,1.6348102041026057e-9,-5.14652612618079e-4,-3.024103796625174e-5,1.6041685250154395e-9,-5.141862173715009e-4,-3.025736743569097e-5,1.5929194416540232e-9,-5.137445594032925e-4,-3.0201544061071227e-5,1.6003442662174793e-9,-5.133551073665073e-4,-3.0091913298744713e-5,1.6222546448333353e-9,-5.130369284461957e-4,-2.9959105712960137e-5,1.651244127376648e-9,-5.127954099507898e-4,-2.9841663506552026e-5,1.6776263789056898e-9,-5.126187743607301e-4,-2.977911818282605e-5,1.6910763709352394e-9,-5.124775920139699e-4,-2.980317215645477e-5,1.6828919402962205e-9,-5.123285291058596e-4,-2.992827896807966e-5,1.6485704768880652e-9,-5.121232184702717e-4,-3.0144080674584436e-5,1.5900146804836555e-9,-5.118216874803194e-4,-3.041333535976552e-5,1.5163090868023582e-9,-5.114069216089788e-4,-3.06788578426189e-5,1.4420450362417905e-9,-5.108941341159282e-4,-3.087997193374652e-5,1.383045829244638e-9,-5.103283884814538e-4,-3.097314754523197e-5,1.350950290890561e-9,-5.097696659935665e-4,-3.0946985077149386e-5,1.3492802047218747e-9,-5.092722871601308e-4,-3.0823751756630565e-5,1.3729826486285837e-9,-5.088689790088103e-4,-3.064783528784369e-5,1.4112787115572115e-9,-5.085657929059659e-4,-3.046880866802487e-5,1.4518356546063253e-9,-5.08346811352875e-4,-3.032757248561428e-5,1.4841879987672864e-9,-5.081833205273989e-4,-3.024951848205968e-5,1.5014927928567059e-9,-5.080425577921641e-4,-3.024389232124672e-5,1.5008319918093534e-9,-5.078937898414977e-4,-3.0306504584070308e-5,1.4827093655212703e-9,-5.077117106050379e-4,-3.042331137863873e-5,1.4502784815439696e-9,-5.074781087294359e-4,-3.0573627604291196e-5,1.4085697181512755e-9,-5.071827632231985e-4,-3.0732762305829554e-5,1.363783212066794e-9,-5.068241386956512e-4,-3.087440447664662e-5,1.322616276444108e-9,-5.064099743494193e-4,-3.097328317084115e-5,1.2915471371343079e-9,-5.059573813360568e-4,-3.100850766576199e-5,1.2759963019804067e-9,-5.054917280931815e-4,-3.09675266499804e-5,1.2793674539120017e-9,-5.050436028710859e-4,-3.085000943630236e-5,1.3021016279347987e-9,-5.046435847782699e-4,-3.067039629349787e-5,1.3410151010863194e-9,-5.043154041700915e-4,-3.0457621016956392e-5,1.3892739397176436e-9,-5.040690924503929e-4,-3.025093383015183e-5,1.4372920683562972e-9,-5.038963498673596e-4,-3.0091976510982597e-5,1.4745708467378526e-9,-5.037701041335682e-4,-3.001474285367648e-5,1.4921523724764496e-9,-5.036491510419384e-4,-3.0036038672483e-5,1.4850891219563646e-9,-5.034873278369172e-4,-3.0149240525066758e-5,1.4542250103523055e-9,-5.032453132593057e-4,-3.032361586041559e-5,1.4066373962624775e-9,-5.029021178492986e-4,-3.0510322165871625e-5,1.3543382658568904e-9,-5.024627404979756e-4,-3.06545113386691e-5,1.3112907864465489e-9,-5.01958677253733e-4,-3.0710749963624354e-5,1.2894420761309303e-9,-5.014397693770699e-4,-3.065674386674007e-5,1.2951067361437504e-9,-5.009594637119274e-4,-3.0499774007028698e-5,1.327181960804589e-9,-5.005591265624038e-4,-3.027289359707675e-5,1.3779593095465411e-9,-5.002577464773517e-4,-3.002286754188913e-5,1.4360302437884732e-9,-5.000502980916162e-4,-2.9795642680252517e-5,1.4898545010720947e-9,-4.999135018056022e-4,-2.96252177016554e-5,1.530564984614016e-9,-4.998148703059288e-4,-2.9528734833433275e-5,1.5533180663703762e-9,-4.997210391324866e-4,-2.9507108813167577e-5,1.557313949211449e-9,-4.996033580441727e-4,-2.95486805281199e-5,1.5450349761472517e-9,-4.994407134467235e-4,-2.963354086042027e-5,1.5212284427432084e-9,-4.99220513807549e-4,-2.9737275227078863e-5,1.4919412361183264e-9,-4.989388300780407e-4,-2.9833867578447486e-5,1.4637165471569636e-9,-4.986003615032496e-4,-2.989808300652266e-5,1.442933990607473e-9,-4.982184149831263e-4,-2.9907927865987277e-5,1.4351810441446417e-9,-4.978145252172193e-4,-2.9847712851288548e-5,1.4445248582206659e-9,-4.974169169914042e-4,-2.971176155615385e-5,1.4726359068551763e-9,-4.970569165391165e-4,-2.9508056286774713e-5,1.517893845763169e-9,-4.967628303390822e-4,-2.926026998042455e-5,1.574829976621728e-9,-4.96551978398408e-4,-2.900608455871382e-5,1.634431128285346e-9,-4.96423302209712e-4,-2.879027553840682e-5,1.6857146709917446e-9,-4.963541060645736e-4,-2.865323310167557e-5,1.7184681499924557e-9,-4.963036761354488e-4,-2.861842652841363e-5,1.7263462753477494e-9,-4.962236841992082e-4,-2.8683800491744274e-5,1.7091218148852898e-9,-4.960720233794146e-4,-2.8820919804120417e-5,1.673117417745899e-9,-4.958250916601518e-4,-2.898244031513813e-5,1.6295915726764063e-9,-4.954843911405692e-4,-2.911516518981793e-5,1.591663143962164e-9,-4.950757567029083e-4,-2.9174289607850693e-5,1.5708062654753593e-9,-4.946419883627445e-4,-2.9134683182893188e-5,1.5739443674704452e-9,-4.942313197632331e-4,-2.899634780038582e-5,1.601897900139963e-9,-4.938850760519116e-4,-2.8782878175581034e-5,1.6495407345080696e-9,-4.936280480341194e-4,-2.8533738897703263e-5,1.707525662802973e-9,-4.934641902772148e-4,-2.8293088750190768e-5,1.7649546067683797e-9,-4.933783032088761e-4,-2.80988640410467e-5,1.8121051613246878e-9,-4.933422254005704e-4,-2.7975289802310766e-5,1.8424210940995162e-9,-4.933227875226166e-4,-2.793022331205908e-5,1.853363241919422e-9,-4.932888738289174e-4,-2.7956735636432285e-5,1.8461872237371115e-9,-4.932160962554518e-4,-2.8037116641906087e-5,1.8250326211687373e-9,-4.930889594766327e-4,-2.8147435486230603e-5,1.7957702854856959e-9,-4.929012427190119e-4,-2.8261502965497104e-5,1.7649326447086253e-9,-4.926554961798312e-4,-2.835390391705434e-5,1.7388763334173934e-9,-4.923623095573031e-4,-2.8402349479687208e-5,1.7231683216680764e-9,-4.920395867133475e-4,-2.8389889647024718e-5,1.722073563894763e-9,-4.917115540492151e-4,-2.8307497965287012e-5,1.7379836944677346e-9,-4.914067695061618e-4,-2.815714883271202e-5,1.7707008124423624e-9,-4.911541935152892e-4,-2.7954758530073625e-5,1.8166878141640076e-9,-4.9097673506944e-4,-2.773135265619518e-5,1.868683014872907e-9,-4.908829819257416e-4,-2.753002578310636e-5,1.9163130986412e-9,-4.908600342594571e-4,-2.7396792960745575e-5,1.9482274136412787e-9,-4.908721173909682e-4,-2.736633164669827e-5,1.9555585722015448e-9,-4.908685218729858e-4,-2.7447945016454782e-5,1.935427847646306e-9,-4.907995565142859e-4,-2.7619289411182313e-5,1.8926347984558103e-9,-4.906336832509187e-4,-2.7832348344015255e-5,1.8383867655335314e-9,-4.903676923646972e-4,-2.802925951189207e-5,1.7865984348223615e-9,-4.900260027571856e-4,-2.81603898676814e-5,1.7495716625922467e-9,-4.89651135545775e-4,-2.8197278587712897e-5,1.7348223698973235e-9,-4.892906052692192e-4,-2.8137212384925217e-5,1.7438257478064728e-9,-4.889850187707911e-4,-2.800028120231637e-5,1.7725003438639047e-9,-4.887600631930353e-4,-2.782169608840279e-5,1.8128296668897378e-9,-4.886231415493295e-4,-2.764229676123075e-5,1.8550063239660704e-9,-4.885642484701803e-4,-2.7499550273375093e-5,1.8896080581632753e-9,-4.88560103003217e-4,-2.7420633789239168e-5,1.9094190965771907e-9,-4.885802098906471e-4,-2.741859369588705e-5,1.9105887095828677e-9,-4.885932963466409e-4,-2.749186494528233e-5,1.892958847920264e-9,-4.885727070221833e-4,-2.7626586385723848e-5,1.8596151082628022e-9,-4.884999125827284e-4,-2.780056601507957e-5,1.815912403162441e-9,-4.883659918181414e-4,-2.7987688626019622e-5,1.7683031663824352e-9,-4.881714965792303e-4,-2.8161857991136438e-5,1.7232621331153711e-9,-4.879253817230721e-4,-2.8300053385778088e-5,1.6864793191295907e-9,-4.876435954604153e-4,-2.838460913858599e-5,1.6623231380987314e-9,-4.87347570898538e-4,-2.8405127125376862e-5,1.6534487206287574e-9,-4.870624676766653e-4,-2.8360400428380635e-5,1.660397458157364e-9,-4.8681464921107224e-4,-2.8260451760282097e-5,1.6810999234867354e-9,-4.8662762504571956e-4,-2.8128194590838857e-5,1.710378936760407e-9,-4.865159493111669e-4,-2.7999259061439134e-5,1.7398402884595435e-9,-4.864778001628795e-4,-2.7917688216241995e-5,1.758782346831438e-9,-4.864891773662556e-4,-2.7925623648319725e-5,1.7566564873211407e-9,-4.8650469881442816e-4,-2.8048055389582203e-5,1.7268436941845679e-9,-4.8646900022718986e-4,-2.8278862045047066e-5,1.6701987909042514e-9,-4.863366661408441e-4,-2.8577505119019685e-5,1.596014686119699e-9,-4.8609095859314307e-4,-2.888149066944309e-5,1.5191180487893385e-9,-4.8575031131327785e-4,-2.9129303897496962e-5,1.4543917377772392e-9,-4.853594628443761e-4,-2.928127077721007e-5,1.4117786999065398e-9,-4.8497195747729835e-4,-2.932864068445588e-5,1.394071849831376e-9,-4.846337505125269e-4,-2.92901557766113e-5,1.397598481510503e-9,-4.8437354423659196e-4,-2.9201624636557654e-5,1.4144787727407432e-9,-4.842002284292061e-4,-2.9104393029698005e-5,1.4351477859261177e-9,-4.841052181270292e-4,-2.903609161431683e-5,1.4504558263885193e-9,-4.84067228217977e-4,-2.9024670479161186e-5,1.4531643834621424e-9,-4.840577748119623e-4,-2.90853939257728e-5,1.438879930124667e-9,-4.8404655015113853e-4,-2.9220176531956694e-5,1.4064663055144139e-9,-4.840061936266715e-4,-2.9418854952069273e-5,1.3579222509944927e-9,-4.839159970403585e-4,-2.9661986241126522e-5,1.2977592972372048e-9,-4.8376421255598803e-4,-2.99245694584744e-5,1.2320364517035848e-9,-4.8354887698368103e-4,-3.0180063885511402e-5,1.1672683012708056e-9,-4.832772700501507e-4,-3.0404142004948953e-5,1.1094257627540442e-9,-4.829643557323166e-4,-3.0577722626730395e-5,1.06319106972272e-9,-4.826306810340864e-4,-3.068915192762852e-5,1.0314937573263063e-9,-4.823000236618913e-4,-3.073572511170575e-5,1.0152261736262526e-9,-4.819967854440488e-4,-3.07247596187981e-5,1.0130129991719876e-9,-4.8174290438235536e-4,-3.067424662353938e-5,1.0209817846856487e-9,-4.8155387647187757e-4,-3.061273027346073e-5,1.032629336411569e-9,-4.814336608023644e-4,-3.057734555154527e-5,1.0391143981355627e-9,-4.813692597631775e-4,-3.060832201910778e-5,1.0304832601707698e-9,-4.813275459614071e-4,-3.073869463472397e-5,9.981998565152625e-10,-4.812585659790297e-4,-3.09804507134622e-5,9.386721541243323e-10,-4.811087866201458e-4,-3.1312961751180574e-5,8.56262021686922e-10,-4.8084200197442165e-4,-3.168291882514008e-5,7.634346976835111e-10,-4.804573453938174e-4,-3.202098523525012e-5,6.767668830172286e-10,-4.799919742448245e-4,-3.226863232885468e-5,6.104833504614054e-10,-4.7950561722214457e-4,-3.239963129412474e-5,5.713324640502453e-10,-4.7905711130771735e-4,-3.2424683834516966e-5,5.57489239643948e-10,-4.7868648919253005e-4,-3.2380572165611614e-5,5.61014998658449e-10,-4.78408756745913e-4,-3.231372536823076e-5,5.715060758294507e-10,-0.00047821695541208484,-3.226672810540936e-5,5.790543339561175e-10,-4.780892929635116e-4,-3.2270696159169436e-5,5.759797425532569e-10,-4.7799654019284706e-4,-3.2342694027153804e-5,5.575709307492149e-10,-4.7790798337904856e-4,-3.2486240286347094e-5,5.222191413059654e-10,-4.7779572256916394e-4,-3.269322339193252e-5,4.712137846897875e-10,-4.776377532430203e-4,-3.294643314889626e-5,4.0828191455557877e-10,-4.7742011900052996e-4,-3.322255415686779e-5,3.3887550315425643e-10,-4.7713813362436103e-4,-3.3495522236272236e-5,2.692723543611399e-10,-4.767966058786844e-4,-3.374005506219493e-5,2.0561845121165476e-10,-4.764089810761079e-4,-3.3935100660724256e-5,1.5304719488686107e-10,-4.759953978571277e-4,-3.4066794130658526e-5,1.150012473363178e-10,-4.75579914293648e-4,-3.4130529894258694e-5,9.281539758685568e-11,-4.7518726401693057e-4,-3.4132012358599385e-5,8.552166664277137e-11,-4.7483937947707337e-4,-3.4087283256587925e-5,8.9808001360197e-11,-4.745518134530909e-4,-3.402168289331611e-5,1.0012352749726892e-10,-4.743301302744044e-4,-3.396758918434555e-5,1.0901384685598315e-10,-4.7416643965561046e-4,-3.3960444197777966e-5,1.0790405985855532e-10,-4.740368979791793e-4,-3.4032281179469596e-5,8.86169595898152e-11,-4.739021227586955e-4,-3.420250408423377e-5,4.5725881072999446e-11,-4.7371326042227083e-4,-3.446757033559661e-5,-2.0710561717845824e-11,-4.734254927457585e-4,-3.479429725681101e-5,-1.0330249928567228e-10,-4.7301639236006836e-4,-3.5123672220509924e-5,-1.881476569178234e-10,-4.725000431178112e-4,-3.5388839961071916e-5,-2.591876480176443e-10,-4.7192604541348076e-4,-3.554105374407855e-5,-3.044707002743182e-10,-4.7136099969806975e-4,-3.556883779945993e-5,-3.206993534357789e-10,-4.7086294225468346e-4,-3.549888047725581e-5,-3.1342792392102554e-10,-4.7046352272326177e-4,-3.538050951555742e-5,-2.935213287305637e-10,-4.7016473226171217e-4,-3.5265590743997314e-5,-2.726806915020762e-10,-4.699464136836216e-4,-3.5194260656001715e-5,-2.6030955535709985e-10,-4.697770469616606e-4,-3.518932915329649e-5,-2.622205939252974e-10,-4.696228012465099e-4,-3.5256920462369833e-5,-2.8060094716625834e-10,-4.6945333703288087e-4,-3.538992906669341e-5,-3.145484253008059e-10,-4.69244867902677e-4,-3.5571919634512485e-5,-3.607624652693146e-10,-4.6898164086817774e-4,-3.5780529452895425e-5,-4.1425452821863957e-10,-4.686566863176195e-4,-3.5990449974228233e-5,-4.690962154934373e-10,-4.6827208786035787e-4,-3.617631589754077e-5,-5.192139267408718e-10,-4.678386863652773e-4,-3.631568320727738e-5,-5.591870571551936e-10,-4.6737497335989225e-4,-3.6392083291211825e-5,-5.849904896303589e-10,-4.6690488301707415e-4,-3.639782201853782e-5,-5.94602599597509e-10,-4.6645445102384944e-4,-3.633592139146378e-5,-5.883906819014525e-10,-4.660476945176547e-4,-3.6220661871468307e-5,-5.692228942796334e-10,-4.657022695838701e-4,-3.6076407131886816e-5,-5.422815071321678e-10,-4.6542554666657507e-4,-3.5934607127357874e-5,-5.145430862929582e-10,-4.6521176990474016e-4,-3.582914597600692e-5,-4.93889587145379e-10,-4.650408921003716e-4,-3.579037660247443e-5,-4.878228226654467e-10,-4.6487973809540686e-4,-3.583822677071e-5,-5.017887049330647e-10,-4.646864289969452e-4,-3.5975183793548686e-5,-5.37296846788472e-10,-4.64418929535433e-4,-3.618107017587765e-5,-5.903807450996709e-10,-4.640473748557744e-4,-3.641280549063968e-5,-6.513004445318026e-10,-4.6356706963375163e-4,-3.6612571972860786e-5,-7.064066461510136e-10,-4.6300573393137634e-4,-3.672503075757567e-5,-7.42296675743031e-10,-4.624182914159778e-4,-3.671797163766815e-5,-7.508047679955584e-10,-4.6186855565977626e-4,-3.659550128472903e-5,-7.321670756526646e-10,-4.614064225580401e-4,-3.6395389241618036e-5,-6.944563282812404e-10,-4.610528332327597e-4,-3.6172385710832e-5,-6.498299076742612e-10,-4.607987283925611e-4,-3.597801715887471e-5,-6.100320374056605e-10,-4.6061468507508637e-4,-3.5846959612404006e-5,-5.833503649471653e-10,-4.6046349004600013e-4,-3.579313229929127e-5,-5.736387227312834e-10,-4.6030994274539054e-4,-3.5812705095171745e-5,-5.807834219497946e-10,-4.601262422144594e-4,-3.588972134772124e-5,-6.017486078129592e-10,-4.5989390505752053e-4,-3.600142119002202e-5,-6.316505581854882e-10,-4.596038614192552e-4,-3.61222398339944e-5,-6.646706362294414e-10,-4.592559568531993e-4,-3.6226694452753686e-5,-6.948193567656552e-10,-4.5885834703375316e-4,-3.629175808199892e-5,-7.166060109300918e-10,-4.584267277797475e-4,-3.629920933167143e-5,-7.25651034334448e-10,-4.5798303120869814e-4,-3.623817319516776e-5,-7.192617233124736e-10,-4.575530806030977e-4,-3.610762730040304e-5,-6.969458465337379e-10,-4.571628892970559e-4,-3.591815255208761e-5,-6.607620683323364e-10,-4.56833823604343e-4,-3.569198142091502e-5,-6.153534493322551e-10,-4.5657747279228704e-4,-3.54605678450924e-5,-5.675121322431022e-10,-4.5639155317605325e-4,-3.525945503013983e-5,-5.251872676244543e-10,-4.562582877399368e-4,-3.5121101489857186e-5,-4.960025021303906e-10,-4.561462404911574e-4,-3.5067166813251846e-5,-4.855281510313871e-10,-4.560157354184803e-4,-3.510209657136758e-5,-4.956760285975314e-10,-4.558271844438492e-4,-3.520973052125918e-5,-5.23642942124648e-10,-4.555509722539143e-4,-3.5354377231198915e-5,-5.618485388203806e-10,-4.551767900011865e-4,-3.5487271728465515e-5,-5.99216862288837e-10,-4.547194931700101e-4,-3.555821241925147e-5,-6.238372524193589e-10,-4.5421824807652514e-4,-3.553016757808225e-5,-6.264728450339745e-10,-4.537270827198009e-4,-3.539206308847836e-5,-6.037125880351339e-10,-4.532987076358123e-4,-3.5163679660655164e-5,-5.592847955933052e-10,-4.5296792741134556e-4,-3.488912728160238e-5,-5.027086388929701e-10,-4.527422313081323e-4,-3.462138798450755e-5,-4.458766460131134e-10,-4.5260323410913533e-4,-3.4405453702598874e-5,-3.9926413768010085e-10,-4.5251644486876176e-4,-3.426740951649623e-5,-3.6938487658784766e-10,-4.5244332300902997e-4,-3.421213627964388e-5,-3.5808595438001316e-10,-4.523505626185003e-4,-3.4227480505678286e-5,-3.632636675315268e-10,-4.5221482312207624e-4,-3.4290899461766846e-5,-3.8020116677613763e-10,-4.5202375557595886e-4,-3.437554371425792e-5,-4.029081427514244e-10,-4.5177505774483904e-4,-3.445460262322402e-5,-4.251869797649234e-10,-4.514749547370295e-4,-3.4504079311446706e-5,-4.4139362238526164e-10,-4.5113679020358777e-4,-3.450468018923218e-5,-4.469651496899405e-10,-4.507797731939009e-4,-3.444350711070474e-5,-4.388225099902334e-10,-4.504274678763231e-4,-3.431595710739258e-5,-4.1574789980056126e-10,-4.501053968208255e-4,-3.412772239306382e-5,-3.7876689398194317e-10,-4.49837245052929e-4,-3.3896171321560205e-5,-3.3143923698792594e-10,-4.4963967883302245e-4,-3.364990241377015e-5,-2.7982500286964254e-10,-4.495167350280108e-4,-3.342519780636138e-5,-2.3182893325347959e-10,-4.494557916595384e-4,-3.32588698365336e-5,-1.9575098987866422e-10,-4.494275238613324e-4,-3.317868246084438e-5,-1.7822526619476317e-10,-4.493912544321645e-4,-3.319433112785999e-5,-1.8215182067943742e-10,-4.4930491559363935e-4,-3.329257874488547e-5,-2.0541584757431906e-10,-4.491366544886963e-4,-3.343893518934762e-5,-2.409915239755049e-10,-4.4887423428689434e-4,-3.358582747083409e-5,-2.785249749837473e-10,-4.4852918924545023e-4,-3.3684857564196356e-5,-3.069592004180854e-10,-4.481345025764483e-4,-3.3699547562141865E-05,-3.174400965017838e-10,-4.477364173205387e-4,-3.36150453685436e-5,-3.056899582009406e-10,-4.473824653024104e-4,-3.3442075559446554e-5,-2.731645840371916e-10,-4.471089794236686e-4,-3.3213746559910004e-5,-2.2659609678642381e-10,-4.4693193476726584e-4,-3.2975892326254515e-5,-1.7600234698550785e-10,-4.4684415933761597e-4,-3.2774072581832724e-5,-1.318180279743324e-10,-4.468195596048631e-4,-3.264180812728822e-5,-1.0215906621877542e-10,-4.468221350963377e-4,-3.259390394722096e-5,-9.111564082088563e-11,-4.468159270102211e-4,-3.262613831507543e-5,-9.843768488394674e-11,-4.4677253154619184e-4,-3.271981887431175e-5,-1.2037327381122013e-10,-4.466747593938944e-4,-3.2848326037323585e-5,-1.5107991793165482e-10,-4.465169535590928e-4,-3.298315215165685e-5,-1.8405170853296948e-10,-4.4630337571044507e-4,-3.309824656748056e-5,-2.1323351666357844e-10,-4.4604597579605345e-4,-3.317263929462189e-5,-2.337308573244723e-10,-4.45762317539977e-4,-3.3191928530204014e-5,-2.421841171496663e-10,-4.454738218877487e-4,-3.314935956184844e-5,-2.369644191333686e-10,-4.4520398080873634e-4,-3.304699535971351e-5,-2.1835135532547503e-10,-4.449759188950929e-4,-3.289697404544757e-5,-1.887628854791514e-10,-4.448087241116615e-4,-3.2722220146874976e-5,-1.529489231537002e-10,-4.4471242614531716e-4,-3.2555363695373645e-5,-1.1787226547448037e-10,-4.446825403539786e-4,-3.2434324371631275e-5,-9.188130706746193e-11,-4.4469655992664646e-4,-3.2393735943472714e-5,-8.291075104452407e-11,-4.4471563063769776e-4,-3.245364245052461e-5,-9.596818943647909e-11,-4.446933654754844e-4,-3.2609831845342675e-5,-1.3086158754423952e-10,-4.445900359888028e-4,-3.2831347836709934e-5,-1.814400172328324e-10,-4.4438642125605143e-4,-3.306811219248421e-5,-2.370680722983898e-10,-4.4409080264432883e-4,-3.326622792760892e-5,-2.858581212801058e-10,-4.437360837083105e-4,-3.33843518504114e-5,-3.1823887552277983e-10,-4.433690949210459e-4,-3.340463330407339e-5,-3.294487374573945e-10,-4.430370755530498e-4,-3.3335321031998855e-5,-3.203184353265311e-10,-4.427759960089928e-4,-3.320596713714179e-5,-2.9650278742528307e-10,-4.4260339341241914e-4,-3.305809413124731e-5,-2.666935334285821e-10,-4.425164934095727e-4,-3.293443729480453e-5,-2.403889490512539e-10,-4.424951037855245e-4,-3.286939195932481e-5,-2.2573681301802528e-10,-4.4250792553513906e-4,-3.2882577323854434e-5,-2.2789539745179735e-10,-4.425203905633074e-4,-3.297653466831185e-5,-2.4823497974085815e-10,-4.425019734590562e-4,-3.313848660280707e-5,-2.8448803781729026e-10,-4.424313311491289e-4,-3.334499881923905e-5,-3.3168004394333305e-10,-4.422985572981347e-4,-3.3567784931305844e-5,-3.834657566606249e-10,-4.4210484891880924e-4,-3.377905354369237e-5,-4.3346022827032136e-10,-4.4186050614891556e-4,-3.3955460677570604e-5,-4.762630706971752e-10,-0.00044158229376506733,-3.408047587119074e-5,-5.080560853142402e-10,-4.4129088951131405e-4,-3.4145537682724034e-5,-5.268328707022444e-10,-4.4100864451780675e-4,-3.415060214756904e-5,-5.324321778308508e-10,-4.4075744431709034e-4,-3.4104538515809105e-5,-5.265509515466792e-10,-4.405562048159596e-4,-3.402543308853396e-5,-5.128193797311413e-10,-4.4041749799388676e-4,-3.394031824044413e-5,-4.968520411437988e-10,-4.4034317371603764e-4,-3.388321666420194e-5,-4.859836819661576e-10,-4.4031985380117906e-4,-3.389003663385937e-5,-4.882781596747447e-10,-4.4031667309458187e-4,-3.398947734201114e-5,-5.105417250572887e-10,-4.40288726603928e-4,-3.419139460117802e-5,-5.556392875995702e-10,-4.4018852720764694e-4,-3.447763007612022e-5,-6.202734840122589e-10,-4.3998312776834925e-4,-3.4802253044518366e-5,-6.948530997978604e-10,-4.396688525708522e-4,-3.510470657110431e-5,-7.662719727894685e-10,-4.3927463938373874e-4,-3.533108692677226e-5,-8.225278615720626e-10,-4.388514849831018e-4,-3.545261924397217e-5,-8.567545923869293e-10,-4.384542114569926e-4,-3.5472467064472854e-5,-8.687704570663886e-10,-4.381250309194333e-4,-3.542007387575285e-5,-8.640367362840351e-10,-4.3788477725332484e-4,-3.533865244353876e-5,-8.512299465652137e-10,-4.377321566231613e-4,-3.52722511840646e-5,-8.396926899517458e-10,-4.3764830456916964e-4,-3.525614476523123e-5,-8.374333127536711e-10,-4.376036478383992e-4,-3.531151963905395e-5,-8.498330044244647e-10,-4.3756499698159503e-4,-3.544392307484552e-5,-8.790159276265403e-10,-4.3750174764789934e-4,-3.56445680225368e-5,-9.238259471745557e-10,-4.3739057794072914e-4,-3.5893675770702265e-5,-9.803621067461992e-10,-4.372182577922428e-4,-3.6165025749781834e-5,-1.042950971201023e-9,-4.369824734841252e-4,-3.6430802734025703e-5,-1.1053246753441703e-9,-4.36690901264442e-4,-3.6665949804834746e-5,-1.1617407465670032e-9,-4.3635900542241446e-4,-3.685147801086402e-5,-1.2078249534317108e-9,-4.360071976804138e-4,-3.697647114841903e-5,-1.2410262063482944e-9,-4.356579555231565e-4,-3.7038915732516285e-5,-1.260728985867218e-9,-4.353331667358742e-4,-3.704575670653252e-5,-1.2681800873321904e-9,-4.350516275750907e-4,-3.701249208677096e-5,-1.2663789075441324e-9,-4.348264748497907e-4,-3.696235632581322e-5,-1.2599873663792249e-9,-4.3466228069439307e-4,-3.692480626009468e-5,-1.2551736513394884e-9,-4.3455177288540366e-4,-3.6932510170417106e-5,-1.25912798564809e-9,-4.3447301468774706e-4,-3.701572674939781e-5,-1.278902275184977e-9,-4.3438916026796164e-4,-3.71935894381788e-5,-1.3194060826546412e-9,-4.3425376802956616e-4,-3.74638561498117e-5,-1.3809346111075104e-9,-4.340236163024067e-4,-3.779593543622154e-5,-1.4574024307369292e-9,-4.3367640876553675e-4,-3.8134118564692025e-5,-1.5369256916288049e-9,-4.332244241737091e-4,-3.8414502041651824e-5,-1.6055222702572017e-9,-4.3271386018431076e-4,-3.858948430017033e-5,-1.652481129483999e-9,-4.3220787923143326e-4,-3.864607462666557e-5,-1.6743270763616353e-9,-4.317629656468537e-4,-3.860761863456337e-5,-1.6752156913577408e-9,-4.3141176547786695e-4,-3.8520414864384305e-5,-1.6642240440609935e-9,-4.3115868222643985e-4,-3.8435327419660585e-5,-1.651702421749401e-9,-4.3098557996193025e-4,-3.8393580822086956e-5,-1.6464759363415677e-9,-4.3086147835504085e-4,-3.841992287116871e-5,-1.65440671246263e-9,-4.307516674336233e-4,-3.8521823132790755e-5,-1.6780078303099869e-9,-4.306243804306794e-4,-3.8692067403099935e-5,-1.716664885505569e-9,-4.3045497513185133e-4,-3.891267180424769e-5,-1.7671843133691706e-9,-4.302282105989142e-4,-3.9159095494623204e-5,-1.824566327370246e-9,-4.299390751286171e-4,-3.940438880534627e-5,-1.8829431790449586e-9,-4.295924025130069e-4,-3.9623034498814555e-5,-1.936562263178734e-9,-4.292014630930585e-4,-3.9794261037469396e-5,-1.9806593157273097e-9,-4.287856876623859e-4,-3.9904630596068394e-5,-2.0120950226613972e-9,-4.28367754503315e-4,-3.994964610903417e-5,-2.0296763544745215e-9,-4.279704452993792e-4,-3.9934237516808346e-5,-2.0341813886434956e-9,-4.276136265667553e-4,-3.987227137249826e-5,-2.0282039753249915e-9,-4.273114688402678e-4,-3.978527077197651e-5,-2.0159259234067885e-9,-4.2706992488113834e-4,-3.9700366198973295e-5,-2.002829069662559e-9,-4.268845197863682e-4,-3.964737840173896e-5,-1.9952647642030475e-9,-4.267386265969893e-4,-3.965471131576109e-5,-1.999700373052887e-9,-4.266029510717304e-4,-3.9743544324180614e-5,-2.0214358793739664e-9,-4.26437834568534e-4,-3.992039295746758e-5,-2.0627867533072652e-9,-4.2620038657907274e-4,-4.016980373449743e-5,-2.1212012265236316e-9,-4.2585728334790284e-4,-4.0451299582123726e-5,-2.1883606719571155e-9,-4.25400265363133e-4,-4.070596598753596e-5,-2.25155109322746e-9,-4.248561337280175e-4,-4.0874859811857436e-5,-2.2977411834001216e-9,-4.242820619720334e-4,-4.092274432793028e-5,-2.3187965446079723e-9,-4.237451316903482e-4,-4.085341822572131e-5,-2.3147791360394584e-9,-4.2329694415442286e-4,-4.070654441064251e-5,-2.2932869092235596e-9,-4.229578411734412e-4,-4.0538947222353454e-5,-2.2656447239000503e-9,-4.2271688421275413e-4,-4.040304127911455e-5,-2.2426165588610284e-9,-4.225427433080427e-4,-4.0333144803596924e-5,-2.231704275563879e-9,-4.223968689264773e-4,-4.0342043136537935e-5,-2.2363639652971267e-9,-4.222434398179648e-4,-4.042433106460874e-5,-2.256430112670042e-9,-4.220548334090586e-4,-4.056222883882198e-5,-2.2890006714688703e-9,-4.218136677594013e-4,-4.073117018433807e-5,-2.3293788637137593e-9,-4.21512946299068e-4,-4.0904258616967875e-5,-2.3719643641673716e-9,-4.2115531676598317e-4,-4.105575217512033e-5,-2.4111025484600863e-9,-4.207517952197999e-4,-4.1163907229954436e-5,-2.441863734119646e-9,-4.203200113401336e-4,-4.121333480514526e-5,-2.460678044086568e-9,-4.198819221794372e-4,-4.119688223171917e-5,-2.4657691210332674e-9,-4.194609188969578e-4,-4.111682572964086e-5,-2.4573520283086842e-9,-4.1907848888926417e-4,-4.0985005162454883e-5,-2.4375869987131062e-9,-4.1875086145044143e-4,-4.082171835588424e-5,-2.4103369791762464e-9,-4.1848604840921634e-4,-4.065342570658751e-5,-2.3807851127628465e-9,-4.182816061708275e-4,-4.050935427302264e-5,-2.3549026071762925e-9,-4.1812347686722286e-4,-4.041715861848515e-5,-2.3387103150409148e-9,-4.1798629068454416e-4,-4.039789505126642e-5,-2.337275945283984e-9,-4.178356307985684e-4,-4.046059638808345e-5,-2.353438615303446e-9,-4.1763304542852736e-4,-4.0597133531294696e-5,-2.3864309135234715e-9,-4.17344485054109e-4,-4.07791348421971e-5,-2.4308988000567276e-9,-4.1695157842682465e-4,-4.095991780817399e-5,-2.477108670627579e-9,-4.16462448119742e-4,-4.108433698392642e-5,-2.5130503328766345e-9,-4.15915771968092e-4,-4.1106404871525956e-5,-2.528346010590168e-9,-4.153721159190534e-4,-4.100833523430551e-5,-2.5184530965389194e-9,-4.1489323356661917e-4,-4.0810007275967356e-5,-2.4867440031700544e-9,-4.1451934265011636e-4,-4.056149998336314e-5,-2.443004015897615e-9,-4.14257057163492e-4,-4.032253315069391e-5,-2.399280027476654e-9,-4.140829643037679e-4,-4.014115402159914e-5,-2.365624213252662e-9,-4.139573594589503e-4,-4.004203540654317e-5,-2.347719850083814e-9,-4.1383883902764264e-4,-4.0026135838993726e-5,-2.346648557292666e-9,-4.1369395521428763e-4,-4.007714518494776e-5,-2.359918634965156e-9,-4.1350116283010187e-4,-4.0169438678037385e-5,-2.3828275358386247e-9,-4.132509204849382e-4,-4.02745458009851e-5,-2.409672202656709e-9,-4.12944098431814e-4,-4.036544899383293e-5,-2.434693727626981e-9,-4.1259003312596384e-4,-4.0419283786942026e-5,-2.4528076757501718e-9,-4.1220463180241106e-4,-4.041920894315126e-5,-2.460165886913844e-9,-4.118084241146482e-4,-4.035589750016881e-5,-2.4545551866637317e-9,-4.114243079808707e-4,-4.0228769440772255e-5,-2.4356339267987566e-9,-4.1107472547243434e-4,-4.004674770704506e-5,-2.4050065497151834e-9,-4.107782411517076e-4,-3.982801465533893e-5,-2.3661110631512318e-9,-4.1054594259781567e-4,-3.959827057314572e-5,-2.3238887851075064e-9,-4.10378395758591e-4,-3.938732383127705e-5,-2.2842171118400988e-9,-4.1026395191599125e-4,-3.922422342717951e-5,-2.2530908614786637e-9,-4.101791123460307e-4,-3.9131562701737556e-5,-2.23557803383868e-9,-4.100913745510124e-4,-3.911997116984464e-5,-2.2346619299068557e-9,-4.099645570075549e-4,-3.9183950507037974e-5,-2.250178149363926e-9,-4.097661972198411e-4,-3.930021397784681e-5,-2.278150153434694e-9,-4.0947612025577423e-4,-3.9429780090729804e-5,-2.310922006873919e-9,-4.090943862753506e-4,-3.952493336780649e-5,-2.338459230035468e-9,-4.086456517799025e-4,-3.954111611657848e-5,-2.3508883014153373e-9,-4.081763984351799e-4,-3.945141594102922e-5,-2.34172318966217e-9,-4.0774310491620253e-4,-3.9258165010706924e-5,-2.3105104000586573e-9,-4.0739410414728915e-4,-3.899487440782558e-5,-2.2634068239480487e-9,-4.071530517716821e-4,-3.8715380711305496e-5,-2.2110648360130516e-9,-4.07012517735472e-4,-3.8474663908117465e-5,-2.1647814676881445e-9,-4.0694031503661626e-4,-3.83111097332982e-5,-2.132885090794267e-9,-4.0689355328915437e-4,-3.823811500140989e-5,-2.118905391336737e-9,-4.0683245131795863e-4,-3.824611552137267e-5,-2.121744169365106e-9,-4.0672875066320724e-4,-3.83106584547127e-5,-2.137053712749919e-9,-4.065681541205749e-4,-3.8401284561318635e-5,-2.1588842425524963e-9,-4.063489170280104e-4,-3.848820200325258e-5,-2.181051087605659e-9,-4.0607899542711783e-4,-3.854620981262006e-5,-2.198080022710527e-9,-4.0577321760118843e-4,-3.855665233157998e-5,-2.2057933114142437e-9,-4.054509336224549e-4,-3.850839314776131e-5,-2.2016348705458945e-9,-4.051339790749997e-4,-3.839848304650612e-5,-2.1848218714545927e-9,-4.0484452728607707e-4,-3.8232763492249975e-5,-2.1563917184551757e-9,-4.046024009615301e-4,-3.8026166396044666e-5,-2.1191704389762e-9,-4.0442170184689123e-4,-3.780206287518215e-5,-2.0776109012345515e-9,-4.043071522932379e-4,-3.7589916539575194e-5,-2.037394588277785e-9,-4.0425112417486777e-4,-3.7420805564781884e-5,-2.0046841607319565e-9,-4.0423270413599097e-4,-3.732108474951415e-5,-1.9850017433876396e-9,-4.042199941499895e-4,-3.7305461211264305e-5,-1.9818909364028005e-9,-4.041759729458141e-4,-3.7371576180890595e-5,-1.995722476799383e-9,-4.040669367934563e-4,-3.749819781395151e-5,-2.023080949156707e-9,-4.038714430168704e-4,-3.764824543910441e-5,-2.0570719150784504e-9,-4.0358723837979936e-4,-3.777652245214125e-5,-2.088652532821821e-9,-4.0323392522940814e-4,-3.784066890271968e-5,-2.108786263221883e-9,-4.028499668827034e-4,-3.7812733764463005e-5,-2.110917795052249e-9,-4.024839213955273e-4,-3.768809159565209e-5,-2.0930452841422504e-9,-4.0218154105103323e-4,-3.748838143603014e-5,-2.0586134771402745e-9,-4.0197245691300375e-4,-3.7256296497542606e-5,-2.0156987881971886e-9,-4.0186148165965595e-4,-3.7042976733979594e-5,-1.974586200188155e-9,-4.018283808339541e-4,-3.6892494178303976e-5,-1.944623987475064e-9,-4.0183608868270894e-4,-3.6829760565161567e-5,-1.9316327261505804e-9,-4.0184323029191903e-4,-3.685629057238657e-5,-1.9367984159228025e-9,-4.0181540972463755e-4,-3.6953941902521246e-5,-1.9571606390107712e-9,-4.0173160962337696e-4,-3.7093205760581396e-5,-1.9871078224997477e-9,-4.015852743493223e-4,-3.724183204408453e-5,-2.0200937211791826e-9,-4.013819118193629e-4,-3.737112093517171e-5,-2.0500268935527753e-9,-4.0113546642722405e-4,-3.745934046666174e-5,-2.072145790532876e-9,-4.008649162475529e-4,-3.749303145455463e-5,-2.0834320591036338e-9,-4.005915876567197e-4,-3.746722429672266e-5,-2.0827005722215756e-9,-4.00337051736825e-4,-3.7385338843855984e-5,-2.0705219071079996e-9,-4.0012112723467486e-4,-3.725911600757237e-5,-2.0491068141487655e-9,-3.9995945006566694e-4,-3.710838880148392e-5,-2.02219878218256e-9,-3.9986036290861937e-4,-3.696000071532959e-5,-1.9948926212214277e-9,-3.9982147601925637e-4,-3.684496081292581e-5,-1.9731958999948373e-9,-3.998270224104261e-4,-3.6793151712941985e-5,-1.9631309255681626e-9,-3.9984782850540707e-4,-3.6825820017548094e-5,-1.9693326621769157e-9,-3.9984567314217234e-4,-3.6947721487253395e-5,-1.9934475370821446e-9,-3.997823060669654e-4,-3.714229558595796e-5,-2.0329994613703186e-9,-3.996308094008664e-4,-3.7373115060623765e-5,-2.0814266273117242e-9,-3.99384988712439e-4,-3.759249203934011e-5,-2.1295566994293455e-9,-3.9906271036433164e-4,-3.775472405457742e-5,-2.1681019565900638e-9,-3.987016202917927e-4,-3.7829193936713294e-5,-2.190272534708571e-9,-3.9834887836798216e-4,-3.780875269054671e-5,-2.193608295241445e-9,-3.980485538263064e-4,-3.7711034648837475e-5,-2.1805271009791155e-9,-3.978305141809676e-4,-3.75729460791574e-5,-2.157555028882998e-9,-3.9770366530245046e-4,-3.744037328616604e-5,-2.1335311050243456e-9,-3.9765504299890545e-4,-3.735613027207092e-5,-2.1172878104897155e-9,-3.976546923721489e-4,-3.7349520461290274e-5,-2.1154458093897077e-9,-3.976645841027215e-4,-3.7430385886824955e-5,-2.1309453027747796e-9,-3.9764857481630915e-4,-3.7588969553787584e-5,-2.16269710822895e-9,-3.975803240688057e-4,-3.78008285196242e-5,-2.206328545718188e-9,-3.9744725472712117e-4,-3.8034406317778884e-5,-2.2556260006985536e-9,-3.972504331599879e-4,-3.825848207709496e-5,-2.304116143937135e-9,-3.970016678082849e-4,-3.8447576129588216e-5,-2.346328968114079e-9,-3.967195597523896e-4,-3.85847761019194e-5,-2.378535140950185e-9,-3.9642580202908984e-4,-3.8662499543895226e-5,-2.3989805580658325e-9,-3.9614227617272086e-4,-3.8682093918056946e-5,-2.407778956750608e-9,-3.9588887819566896e-4,-3.865305185717903e-5,-2.406662527805749e-9,-3.9568165300506234e-4,-3.8592229765188354e-5,-2.3987512411946675e-9,-3.9553072846361295e-4,-3.852295871827556e-5,-2.3883867003944353e-9,-3.9543774790634314e-4,-3.847345808670505e-5,-2.3809297326839213e-9,-3.9539305003282924e-4,-3.847364136251777e-5,-2.382287114028292e-9,-3.9537371824626544e-4,-3.854948972135635e-5,-2.397910865159832e-9,-3.9534454501332527e-4,-3.8715107497318946e-5,-2.4312142198376576e-9,-3.952641095528031e-4,-3.896460770802551e-5,-2.4818178598376683e-9,-3.9509636929992376e-4,-3.9268210077471814e-5,-2.5445577437541576e-9,-3.9482433024793544e-4,-3.957704143478872e-5,-2.6102337078048142e-9,-3.944590437311957e-4,-3.983728465279895e-5,-2.66827632892777e-9,-3.9403811672779804e-4,-4.000826568398732e-5,-2.7102607573795425e-9,-3.936136334447647e-4,-4.007582516475161e-5,-2.732568246881595e-9,-3.932354489171214e-4,-4.005509986930359e-5,-2.7370829288428234e-9,-3.9293735005261444e-4,-3.9983124149450465e-5,-2.730028550413103e-9,-3.927304162113228e-4,-3.990616554842289e-5,-2.7198283129693987e-9,-3.926037104670152e-4,-3.986712394333029e-5,-2.7148744382944538e-9,-3.925300340245018e-4,-3.989630581245046e-5,-2.721726552456415e-9,-3.924740322961887e-4,-4.000673567964125e-5,-2.7439566656949624e-9,-3.9240044960224226e-4,-4.0193797020507027e-5,-2.781711773518208e-9,-3.9228100027058804e-4,-4.043835453992976e-5,-2.8319939335662753e-9,-3.920988397429943e-4,-4.071220949346134e-5,-2.8895632795737313e-9,-3.918501286346216e-4,-4.098447018044798e-5,-2.9482215655903276e-9,-3.915428759247042e-4,-4.1227354423628e-5,-3.002126932202798e-9,-3.911938860598323e-4,-4.142035578932055e-5,-3.0468184632871506e-9,-3.908248865257149e-4,-4.1552391217979064e-5,-3.079773043002786e-9,-3.904587877773441e-4,-4.162213920665322e-5,-3.100490246668063e-9,-3.901166540589265e-4,-4.163716629526032e-5,-3.1102498369570066e-9,-3.898154596295406e-4,-4.1612528206521545e-5,-3.1117545046976984e-9,-3.895663343014008e-4,-4.15692477287104e-5,-3.108816873159751e-9,-3.893729274795302e-4,-4.1532643167673676e-5,-3.106122424164249e-9,-3.8922964958095066e-4,-4.1530120920376783e-5,-3.108959796232942e-9,-3.8911993547672825e-4,-4.158773400879558e-5,-3.1226873440949273e-9,-3.890154780111431e-4,-4.172477613316137e-5,-3.1516937951170783e-9,-3.8887832398421657e-4,-4.1946490302301866e-5,-3.1978260954989524e-9,-3.8866798799491536e-4,-4.2236923527193535e-5,-3.2587392014650204e-9,-3.883541075724722e-4,-4.255643026767475e-5,-3.3271796700881e-9,-3.879309179981178e-4,-4.2848970224092304e-5,-3.3923178303223024e-9,-3.874252936797595e-4,-4.3060086306725585e-5,-3.4432808142227515e-9,-3.8689085406422015e-4,-4.315822428367038e-5,-3.473343383367832e-9,-3.863889877673784e-4,-4.3147231358598694e-5,-3.4823712443678767e-9,-3.859670303418556e-4,-4.306282988945449e-5,-3.476235200012914e-9,-3.856450179732965e-4,-4.29567332020061e-5,-3.4640108169692097e-9,-3.8541502948697586e-4,-4.287851646215824e-5,-3.4548315486565543e-9,-3.852493149355605e-4,-4.2863147399264384e-5,-3.4556957290431317e-9,-3.851111325842977e-4,-4.2926194690833945e-5,-3.4704676625369628e-9,-3.849641750666217e-4,-4.306488479653104e-5,-3.4997555963823663e-9,-3.8477904449105344e-4,-4.326230537360815e-5,-3.541315667419064e-9,-3.845368505256895e-4,-4.349269606106779e-5,-3.5907716079917845e-9,-3.842305470775176e-4,-4.372677264988809e-5,-3.6425556238611925e-9,-3.838644713396162e-4,-4.393662457551494e-5,-3.690971057311515e-9,-3.834524001017426e-4,-4.4099766813166904e-5,-3.731195660582228e-9,-3.8301455462920074e-4,-4.4201952462350065e-5,-3.760022682061001e-9,-3.8257407697839317e-4,-4.42385677285092e-5,-3.776219192075404e-9,-3.821534971407641e-4,-4.42146190699868e-5,-3.78049345493217e-9,-3.8177167811354886e-4,-4.414353188785048e-5,-3.775176115440497e-9,-3.814415037458072e-4,-4.404520966037506e-5,-3.763795599090132e-9,-3.811682438952999e-4,-4.3943745048884684e-5,-3.750686091708826e-9,-3.8094841874788385e-4,-4.3864881721126706e-5,-3.740645067077998e-9,-3.807690606418496e-4,-4.383310219135978e-5,-3.738542478624394e-9,-3.8060747113549404e-4,-4.3868015094879415e-5,-3.7487069852998005e-9,-3.8043212896826716e-4,-4.397964230952124e-5,-3.77392849591353e-9,-3.8020614214202126e-4,-4.416283549922484e-5,-3.814126337469046e-9,-3.7989477348660916e-4,-4.43925934432593e-5,-3.8651369785543476e-9,-3.7947723172862823e-4,-4.462397219530305e-5,-3.918497560033356e-9,-3.789593875598948e-4,-4.4800964639163135e-5,-3.96317158934382e-9,-3.783796554624242e-4,-4.487522211492297e-5,-3.989310173516736e-9,-3.7780028171270733e-4,-4.482731494297352e-5,-3.992457390009027e-9,-3.772848187336151e-4,-4.4677289049787794e-5,-3.975587279866091e-9,-3.768738589342568e-4,-4.4476302813578715e-5,-3.947557776892742e-9,-3.765731596693725e-4,-4.4284647088400656e-5,-3.919157973229763e-9,-3.763583684669076e-4,-4.415011216339383e-5,-3.8993178944763496e-9,-3.7618935482083637e-4,-4.409689236608701e-5,-3.893153730927883e-9,-3.760245905568384e-4,-4.412564418670974e-5,-3.901816527226052e-9,-3.758305281239963e-4,-4.4219737409461237e-5,-3.923290331122069e-9,-3.755856622553639e-4,-4.435289044370741e-5,-3.953443754350989e-9,-3.752809867131644e-4,-4.449563849145108e-5,-3.987032034029203e-9,-3.749186681115099e-4,-4.462002058569582e-5,-4.018598786101294e-9,-3.745100126286204e-4,-4.4702883418774216e-5,-4.043293546650498e-9,-3.740730272909859e-4,-4.472824114947566e-5,-4.057558558959361e-9,-3.736296275242296e-4,-4.4688796131403827e-5,-4.059581153155581e-9,-3.732025909944763e-4,-4.4586579231906474e-5,-4.049448013925343e-9,-3.7281240901532864e-4,-4.4432606619089756e-5,-4.029008414573869e-9,-3.724743361521061e-4,-4.4245446122239154e-5,-4.001513612609417e-9,-3.7219604683176886e-4,-4.404881315412431e-5,-3.971147889469539e-9,-3.719761559946201e-4,-4.386851506422404e-5,-3.942550572712875e-9,-3.718036869016746e-4,-4.3729011292962504e-5,-3.920339561133363e-9,-3.716585476438696e-4,-4.364979112255484e-5,-3.908574248164302e-9,-3.715130942800803e-4,-4.364173138022532e-5,-3.910078188684471e-9,-3.713350457921283e-4,-4.370352841575415e-5,-3.925586069346227e-9,-3.7109238380513845e-4,-4.3818651024463044e-5,-3.9528488394828995e-9,-3.707607845405598e-4,-4.395425389302266e-5,-3.986112633364346e-9,-3.7033298488081413e-4,-4.406449097933762e-5,-4.01659369367896e-9,-3.698271408886742e-4,-4.4100617660546984e-5,-4.034478858226037e-9,-3.6928850300559833e-4,-4.402761136944001e-5,-4.032309510928544e-9,-3.6877886950402043e-4,-4.3841161627626426e-5,-4.008397336623387e-9,-3.68354844176475e-4,-4.3574127073054776e-5,-3.9681227490621515e-9,-3.680456442399449e-4,-4.328536888044946e-5,-3.921896540270247e-9,-3.678438514995482e-4,-4.303605390842075e-5,-3.88088052714649e-9,-3.6771344272492777e-4,-4.286765668321312e-5,-3.853066475373028e-9,-3.6760744211130974e-4,-4.279271827029995e-5,-3.841571155142976e-9,-3.6748400287878505e-4,-4.279868404809011e-5,-3.845110101089603e-9,-3.6731503805980255e-4,-4.2858040425471004e-5,-3.859505188909107e-9,-3.670878782353395e-4,-4.293828963274571e-5,-3.879232548481663e-9,-3.668030259099282e-4,-4.300887457302174e-5,-3.8986149146387406e-9,-3.664707239972699e-4,-4.304497730933188e-5,-3.912649349560868e-9,-3.6610775839668016e-4,-4.302929792015812e-5,-3.917575783781463e-9,-3.657347454762509e-4,-4.295287241734541e-5,-3.911245377621743e-9,-3.653736412651876e-4,-4.2815417391808795e-5,-3.893281236926014e-9,-3.650452228879931e-4,-4.2625259277326516e-5,-3.865029786249455e-9,-3.6476641984123815e-4,-4.239866016669585e-5,-3.8293301914713776e-9,-3.645476115673927e-4,-4.215819173345968e-5,-3.790137077788593e-9,-3.643903517009124e-4,-4.192994909126311e-5,-3.752032661708107e-9,-3.642861036996599e-4,-4.173977362622034e-5,-3.71966635491313e-9,-3.642164327955368e-4,-4.160892942215545e-5,-3.697132215015159e-9,-3.641549093482707e-4,-4.1549858066543754e-5,-3.6872863278909777e-9,-3.6407072313266787e-4,-4.1562773802817286e-5,-3.6910546876715064e-9,-3.639337297548633e-4,-4.1633785245227165e-5,-3.706842402789998e-9,-3.637205402382895e-4,-4.17351263688552e-5,-3.730239026226662e-9,-3.634210733541716e-4,-4.182826882524199e-5,-3.7543125950062615e-9,-3.6304426985984744e-4,-4.187077889867399e-5,-3.770791848359487e-9,-3.626205679360432e-4,-4.1827023967553126e-5,-3.772195287003563e-9,-3.621980590998262e-4,-4.168082324199709e-5,-3.754465893092228e-9,-3.6183040236259707e-4,-4.144515737090433e-5,-3.719051514202747e-9,-3.615588707716338e-4,-4.1162290906568653e-5,-3.6731031521314867e-9,-3.61396538504054e-4,-4.089083947416614e-5,-3.627175685529882e-9,-3.6132387086853867e-4,-4.0684523717909506e-5,-3.5913642442355727e-9,-3.612984871112935e-4,-4.057381858184938e-5,-3.57191628278744e-9,-3.6127263538453984e-4,-4.0559572504084276e-5,-3.5699106570700582e-9,-3.6120844626298833e-4,-4.061897653845609e-5,-3.5820719173724824e-9,-3.610852118619653e-4,-4.0717434213808e-5,-3.6026558942381903e-9,-3.608991626924136e-4,-4.0819528038116416e-5,-3.625305177385425e-9,-3.6065929725962267e-4,-4.0895889554540754e-5,-3.644354040211268e-9,-3.6038248887045136e-4,-4.092611299111932e-5,-3.6555594903413846e-9,-3.6008948797461456e-4,-4.089924983103489e-5,-3.6564197922185135e-9,-3.598020583044798e-4,-4.0813324951301555e-5,-3.6462285238279096e-9,-3.5954081132138837e-4,-4.06746448702424e-5,-3.625955167087689e-9,-3.593232203764928e-4,-4.049706401005377e-5,-3.5980159849031315e-9,-3.591614767911618e-4,-4.030096233320472e-5,-3.5659792059672047e-9,-3.5906017581369425e-4,-4.011143008152642e-5,-3.5342021902016163e-9,-3.590142746293756e-4,-3.9955202075565014e-5,-3.5073577657903728e-9,-3.5900813493897933e-4,-3.9856294031816824e-5,-3.4898049410216977e-9,-3.590165228657977e-4,-3.9830885148132995e-5,-3.484809323888809e-9,-3.5900811619758537e-4,-3.988259608517585e-5,-3.4937187933879266e-9,-3.589513508368191e-4,-3.9999692692636196e-5,-3.515316951993148e-9,-3.588215300116031e-4,-4.015553409221791e-5,-3.5456245459726613e-9,-3.586074994236263e-4,-4.031277515563591e-5,-3.578347724118303e-9,-3.5831611404968134e-4,-4.0430887172238557e-5,-3.6060328154525907e-9,-3.5797300106842354e-4,-4.0475752013014714e-5,-3.621798180660383e-9,-3.5761860209188446e-4,-4.0429328523306393E-05,-3.6212892232579545e-9,-3.572993273213688e-4,-4.029669010026284e-5,-3.604282007806e-9,-3.5705516107877836e-4,-4.01074134564653e-5,-3.575261109336151e-9,-3.56907171864305e-4,-3.990910227757714e-5,-3.542466178765705e-9,-3.5685000952815797e-4,-3.975360446642084e-5,-3.51546370509442e-9,-3.568535768631939e-4,-3.968060851260814e-5,-3.502095452651505e-9,-3.568738387353768e-4,-3.9705767185260144e-5,-3.506123139270059e-9,-3.568676969066613e-4,-3.981847075560239e-5,-3.526548679024781e-9,-3.568050583051709e-4,-3.9988930782059254e-5,-3.558632436406407e-9,-3.56673931076042e-4,-4.017965642244248e-5,-3.595815124716367e-9,-3.564788653472729e-4,-4.035578451744323e-5,-3.631596410599711e-9,-3.562358193015023e-4,-4.049130472750036e-5,-3.6608170038248088e-9,-3.5596655047241536e-4,-4.057119598922274e-5,-3.6802591959901357e-9,-3.556941971200325e-4,-4.059099060777297e-5,-3.688733399766354e-9,-3.554403466676326e-4,-4.055530827745248e-5,-3.6868596918516015e-9,-3.552231502274103e-4,-4.047630480756108e-5,-3.6767210257453985e-9,-3.550558309426621e-4,-4.0372330118324426e-5,-3.6615103358701634e-9,-3.549450842029947e-4,-4.0266541812810685e-5,-3.6452166207126978e-9,-3.5488926874896996e-4,-4.018488717008979e-5,-3.6323023478007748e-9,-3.5487679855453013e-4,-4.0152863925988295e-5,-3.6272565039705226e-9,-3.5488564634128154e-4,-4.019082120417089e-5,-3.6339063053833576e-9,-3.548851821818268e-4,-4.030831790087331e-5,-3.6544836887830023e-9,-3.548412788564619e-4,-4.049915486044093e-5,-3.6886696467672877e-9,-3.547243771613122e-4,-4.073952000048624e-5,-3.733057102710848e-9,-3.5451840841679887e-4,-4.0991294984085655e-5,-3.781467494098887e-9,-3.5422725173712733e-4,-4.121070540757682e-5,-3.826258266543762e-9,-3.538757710829669e-4,-4.136004087638724e-5,-3.8603033376723175e-9,-3.53504443877645e-4,-4.1418554823238366e-5,-3.879000807542093e-9,-3.5315908496719346e-4,-4.1388813578662445e-5,-3.881636157749867e-9,-3.528788443462086e-4,-4.1296476166252965e-5,-3.871679975513234e-9,-3.5268596813342254e-4,-4.118364620333568e-5,-3.855939529728651e-9,-3.525801622010045e-4,-4.109766926615156e-5,-3.84277572321506e-9,-3.5253922633776333e-4,-4.107846753507557e-5,-3.839853266345332e-9,-3.5252589900936437e-4,-4.1148172477191464e-5,-3.852089139473279e-9,-3.5249873593641004e-4,-4.130635182893659e-5,-3.880468677924388e-9,-3.524232758040045e-4,-4.153215835850133e-5,-3.922098707575269e-9,-3.5227977421103506e-4,-4.179200475176239e-5,-3.971370515911904e-9,-3.5206553777650213e-4,-4.2049383308559924e-5,-4.02168889154195e-9,-3.517923456022032e-4,-4.22732706596802e-5,-4.067108127961648e-9,-3.5148116482799436e-4,-4.2443054420599876e-5,-4.103423630040207e-9,-3.5115656427665365e-4,-4.254990072284108e-5,-4.128602719456839e-9,-3.508422977149487e-4,-4.259571927212223e-5,-4.1426852963775e-9,-3.505584283820493e-4,-4.2591075740938084e-5,-4.1473814440995675e-9,-3.503196597354921e-4,-4.2553010117369735e-5,-4.145588069811775e-9,-3.5013425081355416e-4,-4.250315194947812e-5,-4.140977734111264e-9,-3.5000296732766683e-4,-4.246594915992028e-5,-4.1376949637137355e-9,-3.4991789475969336e-4,-4.2466442610266224e-5,-4.140069290235601e-9,-3.4986146693382345e-4,-4.252696515740907e-5,-4.152177172551735e-9,-3.498066307483597e-4,-4.266243723623054e-5,-4.177099698568324e-9,-3.497195305195477e-4,-4.287472041112924e-5,-4.215884841538455e-9,-3.495659175480646e-4,-4.31478811621325e-5,-4.266536865943841e-9,-3.4932096349046604e-4,-4.3447520413318964e-5,-4.323660910585198e-9,-3.4897946134101256e-4,-4.372699512012349e-5,-4.379354851830018e-9,-3.4856132871286715e-4,-4.394038767390347e-5,-4.425380590164783e-9,-3.481082489458901e-4,-4.4057719624662955e-5,-4.455829749739181e-9,-3.4767160295073125e-4,-4.407548988414973e-5,-4.469069235668393e-9,-3.4729671592580966e-4,-4.401761276765464e-5,-4.468122927844235e-9,-3.470101043459885e-4,-4.392694681445468e-5,-4.459514042827404e-9,-3.4681399513372885e-4,-4.3851866775344917e-5,-4.4512484058967996e-9,-3.466884675872167e-4,-4.383320048423082e-5,-4.450711814114548e-9,-3.465989335162038e-4,-4.3895141685846634e-5,-4.463003731704032e-9,-3.4650592936654275e-4,-4.404155435899953e-5,-4.4899789588464385e-9,-3.4637451628011674e-4,-4.425746261242522e-5,-4.53010146035591e-9,-3.46181278482088e-4,-4.451449326164072e-5,-4.579071229769213e-9,-3.459177599712526e-4,-4.477844122387709e-5,-4.631023039653653e-9,-3.4559013570456575e-4,-4.501691233562397e-5,-4.679952084717743e-9,-3.452158716119919e-4,-4.520525913805162e-5,-4.720973867124305e-9,-3.4481879495999203e-4,-4.532981541959789e-5,-4.7511223937350465e-9,-3.4442408015957925e-4,-4.538843813449534e-5,-4.769589480143558e-9,-3.440542089166945e-4,-4.5389084894805184e-5,-4.7774936884748956e-9,-3.437263070319252e-4,-4.534740102436488e-5,-4.77738576894948e-9,-3.4345067735983324e-4,-4.5284143124787143e-5,-4.772713716467364e-9,-3.4323003778487113e-4,-4.5222842054429787e-5,-4.76739691027074e-9,-3.4305901194424496e-4,-4.518761784714889e-5,-4.765524511352927e-9,-3.429236989818069e-4,-4.52007347246193e-5,-4.771068404277782e-9,-3.428015696217947e-4,-4.5279382227483e-5,-4.787430575127021e-9,-3.426625060919474e-4,-4.543136538951815e-5,-4.8166784633623644E-09,-3.424723163020663e-4,-4.565015092623224e-5,-4.858517932523486e-9,-3.4219991287895055e-4,-4.591113849483137e-5,-4.9093917591879784e-9,-3.418278103507178e-4,-4.6172490727433865e-5,-4.962406765475092e-9,-3.413624942079579e-4,-4.6383736833411844e-5,-5.008742784565768e-9,-3.408383536332906e-4,-4.650185695871724e-5,-5.040476506469633e-9,-3.4030994982600497e-4,-4.650853684917004e-5,-5.053640312983224e-9,-3.398339484712107e-4,-4.641889431496161e-5,-5.0498114969366615e-9,-3.394494690556336e-4,-4.627597601679743e-5,-5.03533340901495e-9,-3.3916682212753793e-4,-4.6134299214963423e-5,-5.018789578479401e-9,-3.389684970747851e-4,-4.60416761329767e-5,-5.0082068715226695e-9,-3.388189563580666e-4,-4.602714616208865e-5,-5.009119290870518e-9,-3.386770001401216e-4,-4.609734320211425e-5,-5.023773996416256e-9,-3.385060967047203e-4,-4.623938128036451e-5,-5.051224680335727e-9,-3.382808819877009e-4,-4.642712042057251e-5,-5.0879722483668916e-9,-3.3798991630609986e-4,-4.662831095629719e-5,-5.128915587919849e-9,-3.3763548039858775e-4,-4.6811176467318076e-5,-5.16845422831316e-9,-3.3723121913479214e-4,-4.694969103565298e-5,-5.201576989894772e-9,-3.367983998553216e-4,-4.7027084779648636e-5,-5.224733145745607e-9,-3.3636159656376993e-4,-4.703738149569362e-5,-5.236319126134027e-9,-3.359445418555763e-4,-4.698513068870385e-5,-5.236724866703748e-9,-3.3556670577894265e-4,-4.688372871358966e-5,-5.228009274195705e-9,-3.3524095168534554e-4,-4.675286146676685e-5,-5.213367901026198e-9,-3.3497229454820115e-4,-4.661567260074138e-5,-5.196589566113095e-9,-3.3475746495397114e-4,-4.6496053972731513e-5,-5.181629379466889e-9,-3.3458496403935856e-4,-4.6416067332450106e-5,-5.172290074158099e-9,-3.3443550989848553e-4,-4.639329367171046e-5,-5.171902756508261e-9,-3.3428303229029717e-4,-4.64378573046309e-5,-5.182859497219969e-9,-3.3409679136510515e-4,-4.654895942300463e-5,-5.205901867299847e-9,-3.3384565314112754e-4,-4.671137333713532e-5,-5.2392644177281354e-9,-3.3350538321036714e-4,-4.689360879171389e-5,-5.278078891925973e-9,-3.330683964243518e-4,-4.705068211910057e-5,-5.314688239576653e-9,-3.3255256023083976e-4,-4.713428191609814e-5,-5.340419822664278e-9,-3.320027438393118e-4,-4.71097541805525e-5,-5.3486420687704235e-9,-3.314797357602177e-4,-4.6972927801329136e-5,-5.337761831657595e-9,-3.3103860655846234e-4,-4.67558263411006e-5,-5.312260680512601e-9,-3.307076685003807e-4,-4.651535747158061e-5,-5.28090259224886e-9,-3.30480214378984e-4,-4.6310845214460665e-5,-5.2532057684234896e-9,-3.303220348953695e-4,-4.618357322333606e-5,-5.236272390095169e-9,-3.301874844254908e-4,-4.61477186883596e-5,-5.233313814606197e-9,-3.3003452239918076e-4,-4.619282888887948e-5,-5.243799607308075e-9,-3.2983367667361197e-4,-4.6292393090905275e-5,-5.264447531098321e-9,-3.2957087722242947e-4,-4.6413211027825386e-5,-5.2904004316313725e-9,-3.2924630863698787e-4,-4.652281087401979e-5,-5.316302669134748e-9,-3.288714144932077e-4,-4.659436358753661e-5,-5.337217434375077e-9,-3.284653025069503e-4,-4.6609576179093505e-5,-5.349376028202255e-9,-3.2805103471112654e-4,-4.656006986482792e-5,-5.35069069746132e-9,-3.2765205016821133e-4,-4.6447489372098676E-05,-5.340948027169847e-9,-3.2728894386480116e-4,-4.628254233746377e-5,-5.321669265696422e-9,-3.2697676918230653e-4,-4.608314579988514e-5,-5.295709141439522e-9,-3.2672307735294367e-4,-4.5871826451843845e-5,-5.266715731905392e-9,-3.265269163253492e-4,-4.567268490866273e-5,-5.238595811180517e-9,-3.263787833299249e-4,-4.5508326939279494e-5,-5.2150856928611045e-9,-3.262613612892449e-4,-4.5396953226487785e-5,-5.199410066665686e-9,-3.26150973687626e-4,-4.5349627530952965e-5,-5.193932690177878e-9,-3.2601983786595027e-4,-4.5367769831319596e-5,-5.1997081785981995e-9,-3.2583937029624085e-4,-4.544098475670977e-5,-5.215918457321146e-9,-3.2558503734766617e-4,-4.554569690961154e-5,-5.2393381578890325e-9,-3.252430307869566e-4,-4.5645933134909383e-5,-5.264196058241929e-9,-3.248178384294444e-4,-4.56983335628188e-5,-5.282923877448141e-9,-3.2433764411315686e-4,-4.566298738150629e-5,-5.288101154267343e-9,-3.238524934028116e-4,-4.55187894312056e-5,-5.275271384380036e-9,-3.2342122598822694e-4,-4.527677794176033e-5,-5.245365700942163e-9,-3.230898582700321e-4,-4.498163827286755e-5,-5.205044425823437e-9,-3.228725935037573e-4,-4.469651453348592e-5,-5.164266989512154e-9,-3.2274750094473347e-4,-4.4478159074842894e-5,-5.13235180184745e-9,-3.226689152698676e-4,-4.435700005748701e-5,-5.114830829337623e-9,-3.225871774071815e-4,-4.433186738587753e-5,-5.112508862693316e-9,-3.2246425807672813e-4,-4.437776497525427e-5,-5.1224162241922625e-9,-3.2228031504722966e-4,-4.445858657848031e-5,-5.139485592758135e-9,-3.2203286741891803e-4,-4.4538062588412724E-05,-5.1580709737048375e-9,-3.217324318411406e-4,-4.4586481028774453E-05,-5.173027330322962e-9,-3.213975733128406e-4,-4.458364652752997e-5,-5.180397855754135e-9,-3.210507152123642e-4,-4.451955192695055e-5,-5.177821168001773e-9,-3.20714821071863e-4,-4.43939735421001e-5,-5.164703758157465e-9,-3.2041064399458284e-4,-4.421548906702248e-5,-5.1421458139077516e-9,-3.2015437220027257e-4,-4.400000934734236e-5,-5.112638550353013e-9,-3.199556359923085e-4,-4.3768795235697604e-5,-5.079609309330488e-9,-3.1981598750983545e-4,-4.354585021416585e-5,-5.046904699548832e-9,-3.197281840014739e-4,-4.3354726543107915e-5,-5.018289250760496e-9,-3.196765829420705e-4,-4.321510531744181e-5,-4.997015044656991e-9,-3.1963870183165634e-4,-4.313959806056474e-5,-4.985452141399794e-9,-3.195878597550035e-4,-4.313112514042971e-5,-4.984725308729074e-9,-3.1949679113388595e-4,-4.318123126172128e-5,-4.994338339842217e-9,-3.1934206103072054e-4,-4.326970683766678e-5,-5.0118522340722995e-9,-3.191090769027233e-4,-4.336592775766331e-5,-5.032784985900198e-9,-3.1879727330728615e-4,-4.3432619842126424e-5,-5.0510003085641095e-9,-3.184242585414621e-4,-4.3432905625344e-5,-5.059844813029959e-9,-3.180265341602522e-4,-4.3340679734383175e-5,-5.054050804727019e-9,-3.1765375634226675e-4,-4.315212077889462e-5,-5.031931810784182e-9,-3.173550483018549e-4,-4.289299386726835e-5,-4.996837554368338e-9,-3.1716080997909414e-4,-4.261505262909454e-5,-4.9567039021442e-9,-3.170692069796597e-4,-4.237923706416617e-5,-4.921374850462595e-9,-3.170465026363197e-4,-4.223264659485568e-5,-4.898891858407981e-9,-3.170418960140496e-4,-4.21921256965402e-5,-4.892790866082162e-9,-3.1700761388347835e-4,-4.224278875220216e-5,-4.901672313350512e-9,-3.169131831034806e-4,-4.234911923149743e-5,-4.920678900423363e-9,-3.16749371627084e-4,-4.246978287171236e-5,-4.943593716023741e-9,-3.165243898644444e-4,-4.2568904032282556e-5,-4.964541739482594e-9,-3.1625720934575716e-4,-4.262161789567898e-5,-4.9789925323940574e-9,-3.159714090148497e-4,-4.2615163483100204e-5,-4.984192983307216e-9,-3.1569080936814757e-4,-4.254769010175503e-5,-4.979239205595006e-9,-3.154366980394452e-4,-4.242640923152246e-5,-4.964927408765917e-9,-3.1522594108550356e-4,-4.226576420878259e-5,-4.9434488536958256e-9,-3.150694594909588e-4,-4.2085617046374826e-5,-4.9179780034059015e-9,-3.1497088780468846e-4,-4.190919872197873e-5,-4.892216555795521e-9,-3.1492551795328115e-4,-4.1760510317359374e-5,-4.869937621819285e-9,-3.1491993926755705e-4,-4.166103135750512e-5,-4.85453930904946e-9,-3.1493292291119807e-4,-4.162602317937051e-5,-4.8486082924002386e-9,-3.149378852148921e-4,-4.166109759027768e-5,-4.853496717228234e-9,-3.149068763252208e-4,-4.1759869297922245e-5,-4.8689420569251265e-9,-3.1481563886056355e-4,-4.1903492821241635e-5,-4.892817724760096e-9,-3.146489018901334e-4,-4.206263788736928e-5,-4.921152563389806e-9,-3.1440486675449474e-4,-4.220199291018188e-5,-4.948556753677259e-9,-3.1409782736031844e-4,-4.2286972882281444e-5,-4.969141215356648e-9,-3.1375783301927705e-4,-4.229193221838251e-5,-4.9779020409811375e-9,-3.1342629281164673e-4,-4.2208473219180394e-5,-4.972322659694826e-9,-3.131469410284784e-4,-4.205134100763301e-5,-4.953675901336095e-9,-3.129532228356514e-4,-4.185850783786602e-5,-4.927339367737182e-9,-3.128559402293983e-4,-4.168268583803075e-5,-4.901590331357037e-9,-3.128372712174129e-4,-4.157504774094596e-5,-4.884996661975068e-9,-3.1285591758021213e-4,-4.1567376446027606e-5,-4.883435028626847e-9,-3.1286216261514294e-4,-4.166161325502891e-5,-4.898203035129861e-9,-3.128152510161355e-4,-4.1832011412133305e-5,-4.926093299613993e-9,-3.1269456478840265e-4,-4.2037319835952676e-5,-4.96108661782143e-9,-3.1250114325379443e-4,-4.2235381879465134e-5,-4.996540702951394e-9,-3.1225205877241923e-4,-4.239361488219513e-5,-5.026892948270938e-9,-3.119724750885652e-4,-4.249330688871886e-5,-5.048533140222312e-9,-3.116889276893549e-4,-4.252921835778996e-5,-5.059987008882629e-9,-3.1142503078342897e-4,-4.25069961860904e-5,-5.0616921955618265e-9,-3.111992283429283e-4,-4.244023805497469e-5,-5.055583300773006e-9,-3.1102368764590496e-4,-4.234797844643438e-5,-5.044617784933671e-9,-3.1090358734081304e-4,-4.22526006575234e-5,-5.032321067688745e-9,-3.108364399804756e-4,-4.217778740604939e-5,-5.022387283844178e-9,-3.108115257297438e-4,-4.214600986581236e-5,-5.018313830814128e-9,-3.1080993296466673e-4,-4.2175257475328325e-5,-5.023008475613783e-9,-3.1080593916080375e-4,-4.227521362395652e-5,-5.038322479284464e-9,-3.1077034837130563e-4,-4.244369565068855e-5,-5.06453984568056e-9,-3.1067585579162317e-4,-4.266468404943358e-5,-5.099969884051941e-9,-3.105035849258535e-4,-4.290936505875487e-5,-5.140877929168914e-9,-3.1024899896644803e-4,-4.314094465863473e-5,-5.181956628701638e-9,-3.0992505626402714e-4,-4.332264950955875e-5,-5.217361941575282e-9,-3.095610883380589e-4,-4.342700451466909e-5,-5.2421145403966415e-9,-3.091971222357173e-4,-4.3443817524911114e-5,-5.253502474396329e-9,-3.088746927985775e-4,-4.338445254519018e-5,-5.252067765269822e-9,-3.086262289687441e-4,-4.328075377912741e-5,-5.241813665026146e-9,-3.084657459880443e-4,-4.317815751980895e-5,-5.229427402694319e-9,-3.083838136062314e-4,-4.312402180818095e-5,-5.222569664693657e-9,-3.083492587428513e-4,-4.315408297432371e-5,-5.227650075739371e-9,-3.083181203766566e-4,-4.328165458806027e-5,-5.247856867561176e-9,-3.082471429138195e-4,-4.349411061585933e-5,-5.2822613795529054e-9,-3.081064848257633e-4,-4.375827146070421e-5,-5.3263709887758225e-9,-3.0788661043989416e-4,-4.403198008161343e-5,-5.373792020884821e-9,-3.0759759139367557e-4,-4.4276497491867025e-5,-5.418190385136207e-9,-3.072628362842785e-4,-4.4465056129220834e-5,-5.454790327401472e-9,-3.0691106900856074e-4,-4.458588788817899e-5,-5.481074258715986e-9,-3.0656967318466223e-4,-4.4640878311394534e-5,-5.496772186340735e-9,-3.0626062010192915e-4,-4.464213768265969e-5,-5.5034243148592386e-9,-3.0599865177202766e-4,-4.460833959835805e-5,-5.503787246380918e-9,-3.057908013060658e-4,-4.4561687503291136e-5,-5.501265100167681e-9,-3.0563641143263365e-4,-4.4525580714277986e-5,-5.4994619326435316e-9,-3.0552715792361276e-4,-4.4522582031122806e-5,-5.501861033144501e-9,-3.0544706109613843e-4,-4.457210286773981e-5,-5.511548919490009e-9,-0.00030537297561927964,-4.4687381552856436e-5,-5.5308628299553145e-9]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json new file mode 100644 index 0000000..2eec942 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":8000,"numberOfSamples":1000,"samples":[-3.0527640252829807e-4,-4.487182696660493e-5,-5.56088448082571e-9,-3.051274863200565e-4,-4.511556230951057e-5,-5.6008437940501195e-9,-3.049014822200931e-4,-4.5393887171247894e-5,-5.647698563779582e-9,-3.045865825423837e-4,-4.566978863347711e-5,-5.696284894052496e-9,-3.041902526794886e-4,-4.590165294193654e-5,-5.7403050551512475e-9,-3.0374053440293064e-4,-4.605480630272924e-5,-5.774008768966934e-9,-3.032803042778928e-4,-4.6112832816305496e-5,-5.793973590280497e-9,-3.028557483245855e-4,-4.608383761616052e-5,-5.800251345674449e-9,-3.025032355259023e-4,-4.599882516164128e-5,-5.796427523208801e-9,-3.022393949447573e-4,-4.5902896545994185e-5,-5.788631331365615e-9,-3.020574267495867e-4,-4.5842714571687194e-5,-5.7838921806700334e-9,-3.019300694661608e-4,-4.585434504667538e-5,-5.7883384069394884e-9,-3.0181769376023336e-4,-4.595468543172006e-5,-5.805682519418446e-9,-3.0167899235319e-4,-4.613834629665025e-5,-5.83635658405951e-9,-3.014813398322303e-4,-4.638044052124705e-5,-5.877534282545917e-9,-3.0120806044062887e-4,-4.664417952898078e-5,-5.924029708374941e-9,-3.008608032921932e-4,-4.689076983299546e-5,-5.969769115749644e-9,-3.004568895018775e-4,-4.70885065576558e-5,-6.009334760264992e-9,-3.000232042040917e-4,-4.7218579979817117e-5,-6.039104695872155e-9,-2.995891071912802e-4,-4.72766796425179e-5,-6.057736521969508e-9,-2.9918053358217385e-4,-4.7271135672653113e-5,-6.066024169441235e-9,-2.9881634126882297e-4,-4.721922325858296e-5,-6.066350982343671e-9,-2.9850682571005375e-4,-4.714317647578276e-5,-6.0620073426491385e-9,-2.982536857147729e-4,-4.706682514849363e-5,-6.056588919504954e-9,-2.9805063249734796e-4,-4.7013055973122464e-5,-6.053577596287479e-9,-2.978841024009395e-4,-4.700177778028711e-5,-6.0560846647952315e-9,-2.97733963612634e-4,-4.7047861809806975e-5,-6.066639640409404e-9,-2.975745746966664e-4,-4.715862391952254e-5,-6.086875521052076e-9,-2.9737697702912646e-4,-4.733079302488828e-5,-6.117026762619431e-9,-2.9711318240313096e-4,-4.754766231303244e-5,-6.1553289826818086e-9,-2.967630328757633e-4,-4.777820603997843e-5,-6.1976547684464505e-9,-2.963225516133362e-4,-4.7980702799556336e-5,-6.237878353608434e-9,-2.9581034269964766e-4,-4.8112531767448336e-5,-6.26929277722192e-9,-2.952671701271256e-4,-4.8144449769795835e-5,-6.286810452998715e-9,-2.9474584957997816e-4,-4.807330163392616e-5,-6.28897999422168e-9,-2.942942146728656e-4,-4.7925741507049555e-5,-6.278697823265868e-9,-2.939390776646052e-4,-4.774982986598883e-5,-6.2621933111198565e-9,-2.9367888471910724e-4,-4.759858957460034e-5,-6.246887112949443e-9,-2.9348722961036977e-4,-4.751366495959348e-5,-6.239195834786848e-9,-2.933236015115482e-4,-4.7515401306169104e-5,-6.243051945843658e-9,-2.9314581436119905e-4,-4.760093779409941e-5,-6.2593279168203955e-9,-2.9292007500896937e-4,-4.774844549298213e-5,-6.286013467788338e-9,-2.926269983387905e-4,-4.792463505513392e-5,-6.318926256564662e-9,-2.9226350769051096e-4,-4.80930810595307e-5,-6.352759512595941e-9,-2.918412941194005e-4,-4.822168516898902e-5,-6.382264012712696e-9,-2.9138274761924426e-4,-4.8288192173938596e-5,-6.4033284884177525e-9,-2.9091546827443674e-4,-4.828307144331461e-5,-6.4137142155758484e-9,-2.904666459630382e-4,-4.820960531850297e-5,-6.413290100567614e-9,-2.9005845372039675e-4,-4.808169188193544e-5,-6.403779607548024e-9,-2.897051121066428e-4,-4.7920298339887756e-5,-6.388175539851937e-9,-2.894117280467004e-4,-4.77495594070045e-5,-6.3700487926475646e-9,-2.891745460224369e-4,-4.7593309240161246e-5,-6.352958916462981e-9,-2.889819981834109e-4,-4.7472392700331755e-5,-6.340071065896678e-9,-2.8881605249833365e-4,-4.740260960082055e-5,-6.333942633116508e-9,-2.886536932128631e-4,-4.739292957383811e-5,-6.336355114475078e-9,-2.884687014832789e-4,-4.7443667570689896e-5,-6.348050662755428e-9,-2.8823427250380447e-4,-4.754452904089668e-5,-6.368308311532382e-9,-2.879272735231633e-4,-4.767303651414079e-5,-6.394467888137689e-9,-2.875345818250315e-4,-4.7794856179294424e-5,-6.4217381728864196e-9,-2.8706055734247936e-4,-4.786832012302628e-5,-6.443756519509059e-9,-2.865324198422822e-4,-4.785486234755549e-5,-6.4542037210419195e-9,-2.859983895327293e-4,-4.773390713864742e-5,-6.449179015088165e-9,-2.8551497623516194e-4,-4.7515537099475336e-5,-6.429222290163076e-9,-2.8512656698742036e-4,-4.724172825041583e-5,-6.399602792241161e-9,-2.8484791237568235e-4,-4.697228518879425e-5,-6.368414825098121e-9,-2.846599731981497e-4,-4.676227057336778e-5,-6.343524830079535e-9,-2.845204990113826e-4,-4.664360730421715e-5,-6.330077698450703e-9,-2.8438137789211793e-4,-4.661903031892221e-5,-6.32954910609419e-9,-2.842033332610527e-4,-4.666740117899054e-5,-6.340163616828402e-9,-2.8396352830062366e-4,-4.6754274987887116e-5,-6.357961127061933e-9,-2.836566692220362e-4,-4.684229725179311e-5,-6.377959739889069e-9,-2.8329216427076527e-4,-4.689886773239183e-5,-6.395189096969708e-9,-2.828896488527907e-4,-4.6900720390375284e-5,-6.405540596281919e-9,-2.824742018907562e-4,-4.6836037546351875e-5,-6.4064023526000905e-9,-2.8207178859335354e-4,-4.670471097933904e-5,-6.397002591025266e-9,-2.817052464373959e-4,-4.6517083949337426e-5,-6.378389721142845e-9,-2.8139115347079264e-4,-4.629149712487325e-5,-6.3530658178796655e-9,-2.811378256204399e-4,-4.605106192105769e-5,-6.324396845660935e-9,-2.8094456582733565e-4,-4.582011369839805e-5,-6.295969795469077e-9,-2.8080213121061873e-4,-4.562084808863251e-5,-6.271061910825657e-9,-2.806941282722342e-4,-4.547056083835451e-5,-6.252305778500468e-9,-2.805989529923734e-4,-4.537959014034061e-5,-6.241511789741509e-9,-2.80492067241958e-4,-4.5349843601162954e-5,-6.239532828776588e-9,-2.803485913613245e-4,-4.5373805665704785e-5,-6.246068068716576e-9,-2.8014639891832464e-4,-4.543399639996473e-5,-6.259380228216586e-9,-2.7987013346108646e-4,-4.550321157816095e-5,-6.276047783203556e-9,-2.795162996405821e-4,-4.5546626057891795e-5,-6.291045688354151e-9,-2.790984739623287e-4,-4.5527321372703615e-5,-6.298505516465384e-9,-2.7865004000894166e-4,-4.541620148794469e-5,-6.2933199008508685e-9,-2.7822043288384707e-4,-4.520484869900707e-5,-6.273276588202333e-9,-2.7786184532760936e-4,-4.4915535087074116e-5,-6.240723143326448e-9,-2.776091852793529e-4,-4.459975553570474e-5,-6.202458787212566e-9,-2.774638632702066e-4,-4.432123225548417e-5,-6.167368360824802e-9,-2.7739275622409024e-4,-4.41307893297388e-5,-6.142942429461774e-9,-2.7734363791847937e-4,-4.404793703195258e-5,-6.132712569902154e-9,-2.772666481119829e-4,-4.405873879426259e-5,-6.135803693451539e-9,-2.7712954630060494e-4,-4.41272344392883e-5,-6.148198003690473e-9,-2.769220926915838e-4,-4.421078330515423e-5,-6.164515668643785e-9,-2.7665243775120893e-4,-4.4271847046803456e-5,-6.179465722684056e-9,-2.7634044414996943e-4,-4.42840858576599e-5,-6.188763867311319e-9,-2.760112787880964e-4,-4.4233969441495255e-5,-6.1896325079837635e-9,-2.7569053678467995e-4,-4.4119908832911274e-5,-6.1810143630256235e-9,-2.7540081443001705e-4,-4.395037973603709e-5,-6.1635500652351195e-9,-2.7515925763830574e-4,-4.374163186724933e-5,-6.13931893200916e-9,-2.7497583229343773e-4,-4.351509382685275e-5,-6.1113765985356755e-9,-2.7485228599034487e-4,-4.3294504323835476e-5,-6.083191373407955e-9,-2.747818899337699e-4,-4.3102814240736015e-5,-6.0580978536060394e-9,-2.7475014030275356e-4,-4.2959058861573174e-5,-6.038863549547172e-9,-2.747364727847155e-4,-4.287561578709453e-5,-6.027414092691353e-9,-2.7471679197166814e-4,-4.2856211898555225e-5,-6.024680664675889e-9,-2.74666552518033e-4,-4.2894856634732136e-5,-6.0304870842090665e-9,-2.745641634544586e-4,-4.297583426922976e-5,-6.043429961128174e-9,-2.7439449831047824e-4,-4.307484329777695e-5,-6.060781782144661e-9,-2.7415239183585174e-4,-4.316139154284506e-5,-6.078538519547611e-9,-2.738458939963984e-4,-4.320289628151456e-5,-6.0918223659286445e-9,-2.7349833665268886e-4,-4.317111271140737e-5,-6.095829254040278e-9,-2.731473286401864e-4,-4.305077016877184e-5,-6.087300751131777e-9,-2.728384066406977e-4,-4.284850797286421e-5,-6.0661306830069746e-9,-2.726122464122091e-4,-4.2597682445614436e-5,-6.036317211131248e-9,-2.724883882208636e-4,-4.2353186226421395e-5,-6.005346149629137e-9,-2.724538993112942e-4,-4.21739660621937e-5,-5.981721324392774e-9,-2.7246601864680027e-4,-4.209994110375406e-5,-5.971667694606237e-9,-2.724694960632973e-4,-4.2136627145050584e-5,-5.976871636177898e-9,-2.724184831524113e-4,-4.225643997788255e-5,-5.9944559253544774e-9,-2.7229051896981396e-4,-4.241362759713718e-5,-6.018773549341146e-9,-2.720878961454436e-4,-4.2562043557314734e-5,-6.043635716054438e-9,-2.718303929497391e-4,-4.266714123706157e-5,-6.063913242192316e-9,-2.715458512132313e-4,-4.271024379125761e-5,-6.076285881259704e-9,-2.712626659453091e-4,-4.268748746246162e-5,-6.07938776767281e-9,-2.710052329722968e-4,-4.260653559518088e-5,-6.073631332430156e-9,-2.707916949070718e-4,-4.248307887576607e-5,-6.060863861100873e-9,-2.7063291676093104e-4,-4.233782096456377e-5,-6.043919283576518e-9,-2.70531999054325e-4,-4.2193858972839276e-5,-6.026112658845783e-9,-2.7048412159524855e-4,-4.207417276834723e-5,-6.010749252660998e-9,-2.704768085276078e-4,-4.199898085891688e-5,-6.0007083249929064e-9,-2.7049091718653486e-4,-4.198292846456885e-5,-5.998122765150181e-9,-2.705026716692996e-4,-4.203245930769175e-5,-6.0041500657964715e-9,-2.704867786001442e-4,-4.2143960157053555e-5,-6.018813110137525e-9,-2.7042033326989443e-4,-4.2303217237346e-5,-6.0408918160634616e-9,-2.702869966792254e-4,-4.248659500899885e-5,-6.067897441023674e-9,-2.7008072908028737e-4,-4.26641123975258e-5,-6.096212887106141e-9,-2.698083301299173e-4,-4.2804202514864496e-5,-6.121495193355481e-9,-2.6949017078992116e-4,-4.287971029548579e-5,-6.139410707238995e-9,-2.6915846953213103e-4,-4.287457712691834e-5,-6.146692366322419e-9,-2.688523188530164e-4,-4.2790136468926805e-5,-6.142330933965789e-9,-2.6860905054935876e-4,-4.2648942394378234e-5,-6.128480097984698e-9,-2.684529386021688e-4,-4.249325511328419e-5,-6.110525799006696e-9,-2.683846561272461e-4,-4.237577162193681e-5,-6.0958916495610374e-9,-2.6837713845480256e-4,-4.2343242447415576e-5,-6.091676533973367e-9,-2.6838259865424467e-4,-4.241897119821026e-5,-6.1020278393601044e-9,-2.6834954243159544e-4,-4.259356052706968e-5,-6.126618946744287e-9,-2.682414538672124e-4,-4.282968580925502e-5,-6.161071746178656e-9,-2.680473788683876e-4,-4.307777590451198e-5,-6.198928228542621e-9,-2.6778068952418554e-4,-4.329323584064263e-5,-6.233932842908828e-9,-2.6746984498891765e-4,-4.3447294758245534e-5,-6.261585257801009e-9,-2.6714767994234935e-4,-4.3529579126087075e-5,-6.279696539448954e-9,-2.6684354540698494e-4,-4.3545106782298875e-5,-6.288235271926127e-9,-2.6657927046700944e-4,-4.3509317188260445e-5,-6.288838671033637e-9,-2.6636794026195363e-4,-4.3443465401146905e-5,-6.284232359286678e-9,-2.662140688653375e-4,-4.33711394559145e-5,-6.277670357631493e-9,-2.661141777281877e-4,-4.331570058397092e-5,-6.272450417208355e-9,-2.660574130223562e-4,-4.329813146063895e-5,-6.271533343649169e-9,-2.6602631028516745e-4,-4.3334832510506525e-5,-6.277259574999488e-9,-2.6599810856047266e-4,-4.3435186752350394e-5,-6.291119283070944e-9,-2.6594709819864e-4,-4.35991710667151e-5,-6.313534449691571e-9,-2.6584826187483416e-4,-4.3815728146144786e-5,-6.3436577175095264e-9,-2.6568197080015167e-4,-4.406282185693006e-5,-6.379260979809167e-9,-2.654388737832523e-4,-4.4309976961368614e-5,-6.416844899921613e-9,-2.651235904796523e-4,-4.452352360454744e-5,-6.45208973946681e-9,-2.6475574490715504e-4,-4.467379291793127e-5,-6.480660100582804e-9,-2.643674413816663e-4,-4.474263772198858e-5,-6.499235785255884e-9,-2.639972203386808e-4,-4.472932230357101e-5,-6.506524425656316e-9,-2.636814333534693e-4,-4.4652981742684745e-5,-6.50394943475184e-9,-2.6344474410546685e-4,-4.455031096217054e-5,-6.4957052750673075e-9,-2.6329215242018296e-4,-4.446797824163044e-5,-6.487971527226249e-9,-2.6320539661309406e-4,-4.445066132419316e-5,-6.487318143828218e-9,-2.63146231141766e-4,-4.452761326611089e-5,-6.498693327228091e-9,-2.630670795117471e-4,-4.4702593314460794e-5,-6.523735117410233e-9,-2.629259962418986e-4,-4.495205403355389e-5,-6.560195481816707e-9,-2.626998326199566e-4,-4.523322969000845e-5,-6.6028055138425835e-9,-2.6238984542081514e-4,-4.5498615964264204e-5,-6.645151128486782e-9,-2.620181139265042e-4,-4.57101034480172e-5,-6.681643636040315e-9,-2.6161796896905014e-4,-4.584720776675456e-5,-6.7088001834994565e-9,-2.6122365300701173e-4,-4.590801043953323e-5,-6.725594759670876e-9,-2.608629732320002e-4,-4.590508421570969e-5,-6.733110680725014e-9,-2.605538971319134e-4,-4.585973386898697e-5,-6.733869753505527e-9,-2.6030410219870376e-4,-4.5796853823059685e-5,-6.731122265893311e-9,-2.601120119629486e-4,-4.574121346938611e-5,-6.728248726724007e-9,-2.5996821459528486e-4,-4.571499884470834e-5,-6.728333811525041e-9,-2.5985675252670267e-4,-4.573601546615178e-5,-6.733900781581118e-9,-2.597563470776258e-4,-4.581593891770877e-5,-6.7467347208660815e-9,-2.596420276961034e-4,-4.5958327928148174e-5,-6.76770494879153e-9,-2.594877524327709e-4,-4.6156630892450285e-5,-6.796534200413236e-9,-2.5927042693107434e-4,-4.6392942692009576e-5,-6.8315565589601714e-9,-2.589751849875842e-4,-4.663871238482509e-5,-6.86962752289666e-9,-2.586008062635789e-4,-4.685864046342157e-5,-6.906416881867135e-9,-2.5816311466290005e-4,-4.7018104873896896e-5,-6.937219567577798e-9,-2.5769402554871504e-4,-4.70926588010539e-5,-6.9581636155644655e-9,-2.5723517884218273e-4,-4.707644773329669e-5,-6.967428938305518e-9,-2.568273908815006e-4,-4.6986025040791123e-5,-6.966001210496018e-9,-2.564992393431867e-4,-4.685748280218821e-5,-6.957630999254399e-9,-2.5625871902160277e-4,-4.6737400412949545e-5,-6.947966529409689e-9,-2.5609074998136574e-4,-4.667043573132832e-5,-6.943105351110571e-9,-2.5596122517727485e-4,-4.6687347367702306e-5,-6.947967062704738e-9,-2.5582634783583117e-4,-4.6796866950713174e-5,-6.964938644351132e-9,-2.5564461158371896e-4,-4.698373076282578e-5,-6.993209196686726e-9,-2.553879109156633e-4,-4.7213518226825917E-05,-7.029044733220987e-9,-2.5504832832596024e-4,-4.744277599023395e-5,-7.066933407213379e-9,-2.5463858429774843e-4,-4.7630969964505535e-5,-7.1011838454172516e-9,-2.541865650862485e-4,-4.775023325017012e-5,-7.127396703046114e-9,-2.537265402404863e-4,-4.7790107831489385e-5,-7.143345909601783e-9,-2.532904918374822e-4,-4.775683549761495e-5,-7.1491178104008635e-9,-2.529021042786563e-4,-4.766889086299671e-5,-7.146663004807935e-9,-2.525741732148423e-4,-4.7551249353078e-5,-7.139062192878236e-9,-2.5230871169483677e-4,-4.743029000875771e-5,-7.129782907503167e-9,-2.5209851175530824e-4,-4.733012368995658e-5,-7.12209759254885e-9,-2.519291245187472e-4,-4.7270279788107355e-5,-7.1187265860613594e-9,-2.517806968882801e-4,-4.726422556842384e-5,-7.12166746585097e-9,-2.5162963986732293e-4,-4.731809415808857e-5,-7.132097650423624e-9,-2.514505510713131e-4,-4.742927313984141e-5,-7.1502341423829864e-9,-2.512190030433243e-4,-4.758501628393123e-5,-7.175103678264232e-9,-2.5091568236328035e-4,-4.7761815907209246e-5,-7.204305121348925e-9,-2.5053181294401e-4,-4.7926849500478765e-5,-7.233991717484305e-9,-2.500746237911642e-4,-4.804301276238442e-5,-7.259360514494356e-9,-2.495701519604955e-4,-4.8078046570921506e-5,-7.275783141609628e-9,-2.490601882212913e-4,-4.8015746621047336e-5,-7.280321967292176e-9,-2.4859206990471175e-4,-4.786450499113676e-5,-7.272987851368456e-9,-2.4820404096295365e-4,-4.7657974491023386e-5,-7.2570490683069305e-9,-2.479123719305355e-4,-4.744593983612639e-5,-7.238137844085153e-9,-2.477062542180496e-4,-4.7278801363755583e-5,-7.2225323219480234e-9,-2.475523859045091e-4,-4.719243023421515e-5,-7.2153509223338515e-9,-2.4740634073176207e-4,-4.7199163254914456e-5,-7.21928276128765e-9,-2.472256149075255e-4,-4.728689651818537e-5,-7.234113502680999e-9,-2.469800996566623e-4,-4.742481447800407e-5,-7.2570090226968695e-9,-2.4665781472638505e-4,-4.757279635380423e-5,-7.283374548153914e-9,-2.462655369996502e-4,-4.769151536169288e-5,-7.308038135183422e-9,-2.458251322065457e-4,-4.775085456159175e-5,-7.326465854721028e-9,-2.4536711100036463e-4,-4.77350886691006e-5,-7.3357152755733405e-9,-2.4492329122390537e-4,-4.764420066221715e-5,-7.334911212083219e-9,-2.4452039783219196e-4,-4.749169496663902e-5,-7.3251748443696005e-9,-2.441758732145271e-4,-4.7300134577938174e-5,-7.309112821670338e-9,-2.4389627170717684e-4,-4.7095968591426874e-5,-7.2900891206745445e-9,-2.4367780651202367e-4,-4.6904922721911e-5,-7.2715143086660904e-9,-2.4350820404063506e-4,-4.674862028056588e-5,-7.2563236900772534e-9,-2.4336901910568495e-4,-4.6642494199979074e-5,-7.246701350541432e-9,-2.4323787902715116e-4,-4.6594604978692496e-5,-7.243991435989502e-9,-2.4309057272598025e-4,-4.6604855006113405e-5,-7.248666445835073e-9,-2.4290326713360635e-4,-4.666429753503088e-5,-7.260234391154556e-9,-2.4265533867043101e-4,-4.67546250155109e-5,-7.2770527231963495e-9,-2.4233328045250883e-4,-4.684845105661854e-5,-7.29615811529741e-9,-2.4193563237893614e-4,-4.6911622727816726e-5,-7.313363425619466e-9,-2.4147769061437337e-4,-4.690904210391057e-5,-7.323911274472526e-9,-2.409931846698145e-4,-4.68145030450435e-5,-7.3237831866979765e-9,-2.405293638181594e-4,-4.6622304985804496e-5,-7.311327256640174e-9,-2.4013397134164407e-4,-4.6354911420302454e-5,-7.288398575368516e-9,-2.3983792521253927e-4,-4.606009583001144e-5,-7.260171753226957e-9,-2.396424964711392e-4,-4.579591722183568e-5,-7.233460507133913e-9,-2.3951876787466002e-4,-4.561007369104896e-5,-7.21434469153871e-9,-2.394196251219914e-4,-4.552433842374012e-5,-7.206304347525716e-9,-2.3929702425245816e-4,-4.553082614515197e-5,-7.209572961363757e-9,-2.3911604156302504e-4,-4.559902693265397e-5,-7.221607636814043e-9,-2.3886148969033618e-4,-4.56878141259867e-5,-7.238141334743658e-9,-2.385376124584638e-4,-4.57569458542221e-5,-7.25434375948497e-9,-2.381635151221613e-4,-4.5775227331894453e-5,-7.265844606590987e-9,-2.3776689984276165e-4,-4.57248113055291e-5,-7.26951760352044e-9,-2.3737775512568452e-4,-4.560224089873021e-5,-7.26396202658587e-9,-2.3702288262502963e-4,-4.541701560695537e-5,-7.249620171308552e-9,-2.3672182048234104e-4,-4.518837706556744e-5,-7.228512886555455e-9,-2.3648451210419064e-4,-4.494110071809932e-5,-7.203679129923876e-9,-2.3631073766417756e-4,-4.470112417759971e-5,-7.1784915077864556e-9,-2.3619104748406788e-4,-4.449166637344944e-5,-7.156032804897266e-9,-2.361087730659606e-4,-4.433028327220373e-5,-7.138674148007875e-9,-2.3604256281260482e-4,-4.422705852302139e-5,-7.1278965459513375e-9,-2.3596896071219697e-4,-4.41837594790764e-5,-7.124282211477298e-9,-2.358648734407393e-4,-4.419359846967748e-5,-7.127541904743606e-9,-2.3571005457793368e-4,-4.424139308519803e-5,-7.136477505700135e-9,-2.3548986076137152e-4,-4.4304182265018096e-5,-7.148875985336727e-9,-2.3519855436410849e-4,-4.435271161882365e-5,-7.16145714276836e-9,-2.348430390860336e-4,-4.4354724701945077e-5,-7.170110582162483e-9,-2.3444587375598763e-4,-4.428117792866847e-5,-7.170657306550671e-9,-2.3404509111068765e-4,-4.411557127942225e-5,-7.1601656476032516e-9,-2.3368771973065835e-4,-4.386412570504797e-5,-7.138447255205115e-9,-2.334157329157928e-4,-4.356117057573164e-5,-7.108920211252188e-9,-2.3324859251575434e-4,-4.326304457334257e-5,-7.077986722810363e-9,-2.3317225159038513e-4,-4.3029164658112595e-5,-7.0528241170588876e-9,-2.3314325821755143e-4,-4.289880884221161e-5,-7.038651316312173e-9,-2.3310674475310233e-4,-4.287707539508815e-5,-7.037006731343113e-9,-2.330173793949718e-4,-4.2937138101060195e-5,-7.045793591462278e-9,-2.3285221519255721e-4,-4.303448249497462e-5,-7.060613085178226e-9,-2.3261221161084732e-4,-4.312326355963217e-5,-7.076380098752534e-9,-2.3231616237874106e-4,-4.3167782922615494e-5,-7.0885642907420745e-9,-2.3199226213489643e-4,-4.3147504709399666e-5,-7.093925360427784e-9,-2.3167066135599025e-4,-4.305722178644823e-5,-7.090854405127532e-9,-2.3137815592412457e-4,-4.290464072813479e-5,-7.079431225173229e-9,-2.3113482317374794e-4,-4.2706990561187926e-5,-7.061239222047379e-9,-2.3095210624270325e-4,-4.248733394858226e-5,-7.0389514644621475e-9,-2.3083209319112942e-4,-4.22708356697799e-5,-7.0157556508521975e-9,-2.3076787058155768e-4,-4.208124244565444e-5,-6.994754152444318e-9,-2.3074481404720975e-4,-4.193779429781794e-5,-6.978475418029599e-9,-2.3074269629111773e-4,-4.185278131262165e-5,-6.9685812919441475e-9,-2.3073838954341724e-4,-4.183002690679065e-5,-6.9657828504140465e-9,-2.307087773182823e-4,-4.1864416184094224e-5,-6.969890191920407e-9,-2.3063358371772487e-4,-4.19423194920427e-5,-6.979881232260712e-9,-2.304980447362638e-4,-4.204276810737836e-5,-6.993919691136392e-9,-2.3029541532778425e-4,-4.2139396145542684e-5,-7.00935383163725e-9,-2.3002929420596648e-4,-4.220331442258605e-5,-7.022821179996584e-9,-2.297155277725766e-4,-4.220735882242904e-5,-7.0306406913778314e-9,-2.2938274641947577e-4,-4.2132214476566026e-5,-7.029632424365228e-9,-2.2906972807424893e-4,-4.197407643695822e-5,-7.018296801761733e-9,-2.2881761972917472e-4,-4.175160042946605e-5,-6.997961873684011e-9,-2.286567093282979e-4,-4.15075256296687e-5,-6.9732029722847966e-9,-2.2859182172845228e-4,-4.129977684881916e-5,-6.9508561159118375e-9,-2.2859518852719337e-4,-4.118158264999498e-5,-6.937623078004585e-9,-2.2861445669427582e-4,-4.1179317366699686e-5,-6.937368890191579e-9,-2.2859373178187907e-4,-4.128165726085842e-5,-6.949709434593278e-9,-2.2849535207625107e-4,-4.144683429672747e-5,-6.970641653126126e-9,-2.283102601143957e-4,-4.162180946726997e-5,-6.994513297007544e-9,-2.280546314648973e-4,-4.1760936140705576e-5,-7.015996457807604e-9,-2.2775905137933017e-4,-4.1836162324814815e-5,-7.0312662464705675e-9,-2.2745750303615093e-4,-4.183854159207291e-5,-7.038384862713035e-9,-2.2717978153226345e-4,-4.1774688473891304e-5,-7.037214328561364e-9,-2.269476550317656e-4,-4.166168283592476e-5,-7.029107904443636e-9,-2.2677360769187676e-4,-4.152239765949198e-5,-7.016489998134974e-9,-2.2666086428735168e-4,-4.13817553708349e-5,-7.002360297324509e-9,-2.2660400530891817e-4,-4.126365474609324e-5,-6.989766583218536e-9,-2.2659004542151717e-4,-4.1188304668478054e-5,-6.981333927974789e-9,-2.266000219235072e-4,-4.116989011754661e-5,-6.978931288333946e-9,-2.266111881676761e-4,-4.12146495166316e-5,-6.9835033237536505e-9,-2.2659985001449061e-4,-4.131967774449151e-5,-6.9950455254666655e-9,-2.2654460748588225e-4,-4.147283960401956e-5,-7.012666563520272e-9,-2.264295628693442e-4,-4.165394006870694e-5,-7.034672741319516e-9,-2.2624709886908756e-4,-4.183709352380845e-5,-7.058654437906543e-9,-2.259998866238783e-4,-4.1994173550205136e-5,-7.081632424729571e-9,-2.2570180047419192e-4,-4.20991362790095e-5,-7.100361989265034e-9,-2.2537742095192945e-4,-4.213298776272619e-5,-7.111886301353217e-9,-2.2505959382885995e-4,-4.208912506154797e-5,-7.114348718520941e-9,-2.2478421898691062e-4,-4.197821401236689e-5,-7.107904138739319e-9,-2.2458174592226204e-4,-4.1830607186345735e-5,-7.0953504217620375e-9,-2.244663606137209e-4,-4.169327376221295e-5,-7.081979987657558e-9,-2.2442665203386655e-4,-4.1618683723854355e-5,-7.074284006802257e-9,-2.2442408061700852e-4,-4.1646821969372816e-5,-7.077692877238242e-9,-2.2440397415766895e-4,-4.178786877968106e-5,-7.0943342038050634e-9,-2.2431615173148974e-4,-4.201628734466668e-5,-7.122132208245681e-9,-2.2413418489370047e-4,-4.2281316841771065e-5,-7.155838491573877e-9,-2.238625036955378e-4,-4.252762716447894e-5,-7.189267752364687e-9,-2.2352958981585374e-4,-4.271389191467571e-5,-7.217364886846549e-9,-2.231742512295794e-4,-4.2821232086966055e-5,-7.2372470959088515e-9,-2.2283320562756947e-4,-4.285179730744506e-5,-7.2482661351785805e-9,-2.2253387205703278e-4,-4.282232746248896e-5,-7.2515555960049095e-9,-2.2229206566917885e-4,-4.275713751688142e-5,-7.2494356512215224e-9,-2.2211260756237194e-4,-4.2682685880708425e-5,-7.244838453971768e-9,-2.2199099538278396e-4,-4.262399641811782e-5,-7.240796077498677e-9,-2.2191514949620428e-4,-4.260230497054901e-5,-7.240011891369483e-9,-2.2186707232957353e-4,-4.26332616889838e-5,-7.244543832697758e-9,-2.2182464125580366e-4,-4.2725338241283515e-5,-7.255615619695993e-9,-2.217638453501513e-4,-4.287842690194515e-5,-7.273534478793906e-9,-2.2166170729793913e-4,-4.308298693357485e-5,-7.2976765517466445e-9,-2.2149980429336165e-4,-4.332033803452491e-5,-7.326522432477613e-9,-2.2126785688274673e-4,-4.3564584276414805e-5,-7.357751075488498e-9,-2.20966584781167e-4,-4.3786290015324124e-5,-7.388436436288333e-9,-2.2060898292754956e-4,-4.395759483340187e-5,-7.415404439706891e-9,-2.202193504707468e-4,-4.405796910551689e-5,-7.435775583366592e-9,-2.1982983813928416e-4,-4.407947682940211e-5,-7.4476444040565705e-9,-2.1947474914701923e-4,-4.403040203489803e-5,-7.450766846569757e-9,-2.1918316392070605e-4,-4.393615767618415e-5,-7.447040423172644e-9,-2.1897091886597989e-4,-4.3836355658260945e-5,-7.440501159279104e-9,-2.188338255077648e-4,-4.3777167322247025e-5,-7.4366017543605706e-9,-2.187450180632313e-4,-4.379926707359548e-5,-7.440747299185002e-9,-2.1865951766138927e-4,-4.3924079338995526e-5,-7.456451577868975e-9,-2.1852701523895825e-4,-4.414394644131482e-5,-7.48388495394003e-9,-2.1830915181893224e-4,-4.442241000664643e-5,-7.51964660486929e-9,-2.1799327092026865e-4,-4.47064341649404e-5,-7.558021886353412e-9,-2.1759542948186208e-4,-4.4945093539923776e-5,-7.593080121112747e-9,-2.1715190572061313e-4,-4.510525927973701e-5,-7.62051102463403e-9,-2.1670511352975532e-4,-4.5177775919498044e-5,-7.63846614779529e-9,-2.1629130702600425e-4,-4.5174263035486545e-5,-7.647414111500688e-9,-2.1593400226015044e-4,-4.511913434864514e-5,-7.649461867526958e-9,-2.1564283671687278e-4,-4.504151932089862e-5,-7.647573809127245e-9,-2.1541555700511315e-4,-4.496945565191675e-5,-7.644907915657562e-9,-2.152409460728591e-4,-4.4926547873120016E-05,-7.644326527091175e-9,-2.1510150205944102e-4,-4.493027145003056e-5,-7.648080390942638e-9,-2.1497560662559327e-4,-4.499101379307958e-5,-7.65764086825275e-9,-2.1483945926710325e-4,-4.511125926355644e-5,-7.673632641449619e-9,-2.1466926637521481e-4,-4.528477274004901e-5,-7.695803268049495e-9,-2.144441173207301e-4,-4.549613641988964e-5,-7.722992976764426e-9,-2.1414962209211983e-4,-4.572138551931352e-5,-7.753133503949428e-9,-2.137817825713578e-4,-4.5930557875204e-5,-7.783365806364265e-9,-2.1334992695909555e-4,-4.609259275443571e-5,-7.810385927253544e-9,-2.1287718132165904e-4,-4.6182138061975344e-5,-7.831058043246478e-9,-2.123972901802133e-4,-4.618667111745394e-5,-7.843194529569795e-9,-2.1194776550871445e-4,-4.611156504767954e-5,-7.846275859882824e-9,-2.1156084382754122e-4,-4.598097245517623e-5,-7.841849026160612e-9,-2.1125475027746477e-4,-4.5833615902049135e-5,-7.833415837621815e-9,-2.1102786191385352e-4,-4.57141563789811e-5,-7.825754714870187e-9,-2.1085766176323766e-4,-4.5662121102797614e-5,-7.823773717687805e-9,-2.1070526783781765e-4,-4.570112440445812e-5,-7.831148800367581e-9,-2.1052503260910168e-4,-4.5831388471697066e-5,-7.84914193292144e-9,-2.1027715631769618e-4,-4.602835716858338e-5,-7.876058836978009e-9,-2.0993957436240816e-4,-4.6248926026246374e-5,-7.90766713758257e-9,-2.095146194759454e-4,-4.644402823389973e-5,-7.938509723459188e-9,-2.0902749841148404e-4,-4.6573103373786205e-5,-7.963593692431587e-9,-2.085173003005473e-4,-4.6614726939852604e-5,-7.979751223426029e-9,-2.080247685004384e-4,-4.656971988276465e-5,-7.986202202748241e-9,-2.0758195037667867e-4,-4.645702153575651e-5,-7.984303236040702e-9,-2.0720680107128868e-4,-4.630568678322192e-5,-7.976805592462343e-9,-2.069027746736158e-4,-4.6146864470554793E-05,-7.967006829227965e-9,-2.0666149949068237e-4,-4.6008053738656595e-5,-7.958051544835984e-9,-2.0646643337144435e-4,-4.591001322147901e-5,-7.952478950941206e-9,-2.0629619473845173e-4,-4.586558575032321e-5,-7.952010523962518e-9,-2.0612715730170046e-4,-4.587946155808738e-5,-7.957511462395227e-9,-2.0593551752786214e-4,-4.594814009737746e-5,-7.969025447952002e-9,-2.0569936999224403e-4,-4.6059814191126656e-5,-7.985789917193825e-9,-2.054013396767555e-4,-4.619444426954505e-5,-8.006201300389058e-9,-2.0503200586908336e-4,-4.632476440606799e-5,-8.027795774410303e-9,-2.0459370977526643e-4,-4.6419232557928356e-5,-8.04739911864323e-9,-2.0410341514187733e-4,-4.644771828424737e-5,-8.061606874456355e-9,-2.0359249297940358e-4,-4.6389591386022976e-5,-8.06761967917358e-9,-2.0310152417526018e-4,-4.6241943470151586e-5,-8.064208675557398e-9,-2.026701314330422e-4,-4.602412220191169e-5,-8.05238930586289e-9,-2.0232482212882342e-4,-4.5775201703916056e-5,-8.035415203185357e-9,-2.0206981769589567e-4,-4.5543952383211005e-5,-8.017995799141722e-9,-2.0188503857131567e-4,-4.5374719563007136e-5,-8.005002937932091e-9,-2.0173208974531864e-4,-4.5294685661682146e-5,-8.000132839061242e-9,-2.0156558865288865e-4,-4.530694102432007e-5,-8.004940251523124e-9,-2.0134563404935994e-4,-4.5390862347908655e-5,-8.018476540387911e-9,-2.010477628284383e-4,-4.5508700213428396e-5,-8.037583629336856e-9,-2.0066816008643582e-4,-4.56159424839469e-5,-8.05775420557668e-9,-2.002233040454102e-4,-4.5672547498502866e-5,-8.074324603901956e-9,-1.9974456130923202e-4,-4.5652156194690424e-5,-8.083656540042794e-9,-1.992695170896543e-4,-4.554701856445397e-5,-8.083957366931921e-9,-1.9883270591920156e-4,-4.5367698049175715e-5,-8.075522287619769e-9,-1.9845841745310465e-4,-4.513832170771045e-5,-8.060398815725766e-9,-1.981572124953109e-4,-4.488951139782889e-5,-8.041672208553757e-9,-1.9792619199168255e-4,-4.46514605035761e-5,-8.022654713173082e-9,-1.97751818665741e-4,-4.444885607769098e-5,-8.006221420156825e-9,-1.9761372928278598e-4,-4.429815409582809e-5,-7.994418534127477e-9,-1.9748834183331958e-4,-4.4206787770554826e-5,-7.988349103172298e-9,-1.9735172150645567e-4,-4.417347840913245e-5,-7.988243219864344e-9,-1.9718177685405577e-4,-4.4188897515318655e-5,-7.993577576316224e-9,-1.969602185929472e-4,-4.423633228093872e-5,-8.003137811219496e-9,-1.96674791367231e-4,-4.429249144944042e-5,-8.01500158984719e-9,-1.9632209229852586e-4,-4.43290434847933e-5,-8.026530943997656e-9,-1.9591072087203853e-4,-4.4315855466975366e-5,-8.03455558004738e-9,-1.9546352222861362e-4,-4.422685189198833e-5,-8.035926730100295e-9,-1.9501665604001342e-4,-4.404835137258371e-5,-8.028456381532183e-9,-1.9461311284592976e-4,-4.3787482447394696e-5,-8.011956426634773e-9,-1.9429036612252486e-4,-4.3475903590539156e-5,-7.988819905738023e-9,-1.9406609579109184e-4,-4.31641133352837e-5,-7.963631507898714e-9,-1.939293801808378e-4,-4.290607476846081e-5,-7.941776010191559e-9,-1.9384326424020214e-4,-4.274050836180446e-5,-7.927647618378034e-9,-1.9375801371840964e-4,-4.267820492195053e-5,-7.923311832665135e-9,-1.9362806935360174e-4,-4.270088509049269e-5,-7.928124868965717e-9,-1.934249241067107e-4,-4.277008015595093e-5,-7.93923136862352e-9,-1.931422172148227e-4,-4.284026359050476e-5,-7.952533831849908e-9,-1.9279378906395382e-4,-4.287086605432226e-5,-7.963753390058145e-9,-1.9240746774724533e-4,-4.283438753175265e-5,-7.96935681810304e-9,-1.9201729184363728e-4,-4.272004332166115e-5,-7.967224995384466e-9,-1.9165604145344355e-4,-4.253352928312996e-5,-7.956980058119363e-9,-1.9134921912310286e-4,-4.229384282667856e-5,-7.939923003820991e-9,-1.9111121492372828e-4,-4.202818834980984e-5,-7.91860535841166e-9,-1.9094402083634387e-4,-4.176615800307559e-5,-7.896162848299419e-9,-1.9083831639714896e-4,-4.1534410208336746e-5,-7.87561120850624e-9,-1.9077625422079947e-4,-4.1352743879738196e-5,-7.859295143438076e-9,-1.9073505303328413e-4,-4.123196142628293e-5,-7.848605195695082e-9,-1.9069054410135802e-4,-4.1173414159399545e-5,-7.843964753064974e-9,-1.906201224278099e-4,-4.116971136664543e-5,-7.844982280018888e-9,-1.905050256123524e-4,-4.1205978856558556e-5,-7.850625899117948e-9,-1.9033218543530693e-4,-4.126132493487268e-5,-7.859318656901609e-9,-1.9009597946679268e-4,-4.131052250053904e-5,-7.868951080561997e-9,-1.8980014139863044e-4,-4.1326260782891054e-5,-7.876912836277283e-9,-1.8945967012305145e-4,-4.128269700216912e-5,-7.880323549005257e-9,-1.8910169760086778e-4,-4.116102678475968e-5,-7.876614821307504e-9,-0.00018876338867391296,-4.0956863108143176e-5,-7.864445949430287e-9,-1.884847853602136e-4,-4.0687258733253435e-5,-7.844654109638144e-9,-1.8829616966925856e-4,-4.039278804799636e-5,-7.820672655457958e-9,-1.88203845813791e-4,-4.012954778719805e-5,-7.797856014628003e-9,-1.8818277508791647e-4,-3.995054240701812e-5,-7.781684520999545e-9,-1.881832875362198e-4,-3.988448188439229e-5,-7.77566376533795e-9,-1.8815018874959586e-4,-3.992443525486756e-5,-7.780096416824334e-9,-1.880434791354815e-4,-4.003285000490112e-5,-7.792321866458137e-9,-1.8784973035415947e-4,-4.015822215563545e-5,-7.808013539986401e-9,-1.8758115050261835e-4,-4.025292234742e-5,-7.822655543413694e-9,-1.872668184883031e-4,-4.02846843903453e-5,-7.832609350063291e-9,-1.869421745375567e-4,-4.024036343886389e-5,-7.835668960723405e-9,-1.866405011096358e-4,-4.012421563344865e-5,-7.831233109466725e-9,-1.8638746606769327e-4,-3.9953517066443375e-5,-7.820209997762073e-9,-1.8619833336478678e-4,-3.9753447846682424E-05,-7.804705559277455e-9,-1.8607713456172942e-4,-3.955211791223761e-5,-7.787528077260694e-9,-1.8601733956143633e-4,-3.937609305312275e-5,-7.771594675631029e-9,-1.8600372362801028e-4,-3.924671808006975e-5,-7.759377516311174e-9,-1.860151033940145e-4,-3.9177490549839045e-5,-7.752521038826082e-9,-1.86027579535179e-4,-3.917265795237302e-5,-7.751697825195558e-9,-1.8601784500762417e-4,-3.922712275877602e-5,-7.756683939980297e-9,-1.859660991240961e-4,-3.932748873083235e-5,-7.76655338904938e-9,-1.858583415306685e-4,-3.945386020008228e-5,-7.779863803220138e-9,-1.856880765199331e-4,-3.9582104032858643e-5,-7.794764745634513e-9,-1.8545751111847034e-4,-3.968648336286518e-5,-7.80905273811186e-9,-1.8517832726768282e-4,-3.974272194646584e-5,-7.820277095975539e-9,-1.8487191715710737e-4,-3.973182286832981e-5,-7.826043324454552e-9,-1.84568326062585e-4,-3.964498003485806e-5,-7.824607063924266e-9,-1.8430252736954805e-4,-3.948909619720772e-5,-7.81567723225054e-9,-1.841068015813026e-4,-3.9290916557531185e-5,-7.801120265142914e-9,-1.8399941650295114e-4,-3.9096168023688346e-5,-7.785080204503404e-9,-1.8397315757144196e-4,-3.8959732030985414e-5,-7.773061430941858e-9,-1.8399121969710352e-4,-3.892667494260442e-5,-7.769999153806498e-9,-1.8399720413110593e-4,-3.9012062532908605e-5,-7.778165646339316e-9,-1.8393709799280938e-4,-3.919247414624714e-5,-7.796192327999907e-9,-1.837809253347292e-4,-3.94159913142451e-5,-7.81983562463752e-9,-1.835314504140859e-4,-3.9624174692404916e-5,-7.843866044999501e-9,-1.832175926465497e-4,-3.9772376929694886e-5,-7.863852973816922e-9,-0.00018288007799367867,-3.983939802399363e-5,-7.877101234873762e-9,-1.825581525567214e-4,-3.9826609012344015e-5,-7.88278698428171e-9,-1.8228153953364634e-4,-3.975151493070294e-5,-7.881673076367993e-9,-1.8206747389102235e-4,-3.96403257759107e-5,-7.87567869457065e-9,-1.8192093438847728e-4,-3.952183195728649e-5,-7.867403264403688e-9,-1.818363144226791e-4,-3.94230088792691e-5,-7.859627774104685e-9,-1.8179960057993597e-4,-3.9365938879669173e-5,-7.854836651382487e-9,-1.817908037429815e-4,-3.9365650403408574e-5,-7.85483970570868e-9,-1.817866154295425e-4,-3.9428705477013426e-5,-7.860566324909944e-9,-1.81763290141203e-4,-3.955254076382139e-5,-7.872043997922005e-9,-1.8169966125836646e-4,-3.9725745338659054e-5,-7.888521312020506e-9,-1.8157997375724025e-4,-3.992943179925509e-5,-7.908654800013727e-9,-1.8139615201193202e-4,-4.01395859443014e-5,-7.930677800847704e-9,-1.8114926843234067e-4,-4.0330149429537525e-5,-7.952524911278175e-9,-1.808500494869329e-4,-4.047662276442048e-5,-7.971962158343955e-9,-1.8051827933978514e-4,-4.055992560857808e-5,-7.986810256067089e-9,-1.8018101316444614e-4,-4.0570277674346596e-5,-7.995336625795394e-9,-1.7986930754112723e-4,-4.0510916503467394e-5,-7.996822725172099e-9,-1.796128754203871e-4,-4.0400967753350356e-5,-7.992167447243349e-9,-1.7943243126465743e-4,-4.027577035424067e-5,-7.984224841668468e-9,-1.793308527151646e-4,-4.0182267013651894e-5,-7.97751603843064e-9,-1.7928650189256697e-4,-4.016762654034507e-5,-7.977085620844553e-9,-1.7925412028238575e-4,-4.026237728195528e-5,-7.986681974367066e-9,-1.791774416147169e-4,-4.046502137035069e-5,-8.007050548514257e-9,-1.79010578141659e-4,-4.07384889308924e-5,-8.03541534862946e-9,-1.7873692411944845e-4,-4.102346717380981e-5,-8.066621496285543e-9,-1.783741420058078e-4,-4.1261830836882335e-5,-8.095249938080533e-9,-1.7796361074475225e-4,-4.1416463164230464e-5,-8.117421582789139e-9,-1.7755290410782594e-4,-4.1478368578888085e-5,-8.131520449449486e-9,-1.7718135033389617e-4,-4.146198733197798e-5,-8.13797055610707e-9,-1.768730990346715e-4,-4.139529321745453e-5,-8.138602365296292e-9,-1.766365818208645e-4,-4.131042648440153e-5,-8.135996394797593e-9,-1.7646729539195152e-4,-4.123728457209718e-5,-8.132931548149722e-9,-1.7635140912427015e-4,-4.119998363428822e-5,-8.131940782911007e-9,-1.7626901592075078e-4,-4.1215139264067615e-5,-8.13497319552361e-9,-1.7619688175239353e-4,-4.129104627639256e-5,-8.143187102834443e-9,-1.7611095329391106e-4,-4.142731358893801e-5,-8.156888519239014e-9,-1.7598889716912629e-4,-4.1614887437690714e-5,-8.17558928584182e-9,-1.7581281192462515e-4,-4.183670829192403e-5,-8.198133122013413e-9,-1.7557194116890116e-4,-4.206939570725801e-5,-8.222846596370708e-9,-1.7526489185315834e-4,-4.2286145337228534e-5,-8.247693685378518e-9,-1.749007892130791e-4,-4.246067239676419e-5,-8.27045287578726e-9,-1.7449889291473196e-4,-4.257177890837406e-5,-8.288966601271894e-9,-1.7408636134491067e-4,-4.260785569445014e-5,-8.301502622549816e-9,-1.7369417612683185e-4,-4.257044116629862e-5,-8.307207425135431e-9,-1.733515749373912e-4,-4.247603925671317e-5,-8.306560538240727e-9,-1.7307951561946385e-4,-4.235546258407321e-5,-8.301660768772593e-9,-1.7288404300892215e-4,-4.224980670333177e-5,-8.296116391034056e-9,-1.7275126742316764e-4,-4.220232082429011e-5,-8.29435675977847e-9,-1.7264662508130276e-4,-4.2246603872407674e-5,-8.300377709365537e-9,-1.7252121501086634e-4,-4.239390927424923e-5,-8.316260399484159e-9,-1.723259194563172e-4,-4.262512746453453e-5,-8.341125038747223e-9,-1.7202921853819408e-4,-4.289359303196469e-5,-8.371205255110296e-9,-1.7163005621497463e-4,-4.314027956941037e-5,-8.401196120311941e-9,-1.7115808212438073e-4,-4.3314891182245837e-5,-8.426208336859534e-9,-1.706611339045414e-4,-4.3391899781138715e-5,-8.4432830383759e-9,-1.701876762651756e-4,-4.3374419715413495e-5,-8.4518562411058e-9,-1.6977323193821857e-4,-4.328714577136297e-5,-8.4533209117178e-9,-1.6943492968409378e-4,-4.316484300779904e-5,-8.450215049832509e-9,-1.691728141266524e-4,-4.304229490465962e-5,-8.445454567334958e-9,-1.689743734967421e-4,-4.294814563749508e-5,-8.441762371783732e-9,-1.6881942342299218e-4,-4.2902261156559144e-5,-8.441296223429344e-9,-1.6868404487941965e-4,-4.291519214458628e-5,-8.445444774098598e-9,-1.6854347563705814e-4,-4.2988495594045744e-5,-8.454766529152133e-9,-1.6837439851704656e-4,-4.3115257163194266e-5,-8.469036389597806e-9,-1.681571293442517e-4,-4.3280710287122344e-5,-8.487346444855007e-9,-1.6787800682957013e-4,-4.3463272785180736e-5,-8.508217625345404e-9,-1.675319055511752e-4,-4.363653952219832e-5,-8.529718093993882e-9,-1.6712433065999726e-4,-4.3772654109465174e-5,-8.549625270960761e-9,-1.6667221550076703e-4,-4.3847053130506195e-5,-8.565688893545171e-9,-1.6620251090174813e-4,-4.384394863589244e-5,-8.576022891083493e-9,-1.6574805161057994e-4,-4.3761243185843136e-5,-8.57958137502147e-9,-1.653410166729793e-4,-4.361321227414499e-5,-8.57659196538238e-9,-1.6500526069332353e-4,-4.3429595920686075e-5,-8.568780938240553e-9,-1.6474941938175833e-4,-4.325061380526027e-5,-8.559242374508827e-9,-1.6456278474184848e-4,-4.311845658282386e-5,-8.551872091484495e-9,-1.6441558827007797e-4,-4.306679435913246e-5,-8.55041163875152e-9,-1.6426459590353389e-4,-4.31107428021797e-5,-8.55731514316368e-9,-1.6406370565747632e-4,-4.324040567689213e-5,-8.572814975918328e-9,-1.6377738091422734e-4,-4.3421136814201817e-5,-8.594619277300757e-9,-1.6339259528422065e-4,-4.360218549923664e-5,-8.618509053213847e-9,-1.6292403742707357e-4,-4.3731933663244515e-5,-8.639692356752142e-9,-1.6240945516230828e-4,-4.3773994492029846e-5,-8.654343911008955e-9,-1.618968607756375e-4,-4.371721460881521e-5,-8.660647603934844e-9,-1.614295836691662e-4,-4.357579691594396e-5,-8.658990171403235e-9,-1.6103554540079272e-4,-4.338116258064244e-5,-8.65143750147207e-9,-1.6072371734170566e-4,-4.317072694826411e-5,-8.640899300411265e-9,-1.60486597377181e-4,-4.2978486922922624e-5,-8.630346264051817e-9,-1.6030553083480994e-4,-4.28295955015562e-5,-8.622255741822829e-9,-1.6015613527411944e-4,-4.2738546072660895e-5,-8.618310231123223e-9,-1.6001252941236853e-4,-4.270953342717434e-5,-8.619310983523769e-9,-1.5985023392522713e-4,-4.27376696865566e-5,-8.62524258194941e-9,-1.5964820616548375e-4,-4.281026269130828e-5,-8.635407427994393e-9,-1.5939063606626693e-4,-4.290797545834162e-5,-8.648555381100611e-9,-1.5906893911632526e-4,-4.300622619989431e-5,-8.662980381924239e-9,-1.586839320425307e-4,-4.307745905419132e-5,-8.6766176574788e-9,-1.5824763893893554e-4,-4.309485149551601e-5,-8.687224944489166e-9,-1.577836553301402e-4,-4.303761508032331e-5,-8.692728743322592e-9,-1.5732473003351639e-4,-4.2897150815443866e-5,-8.691735505534104e-9,-1.5690673041701025e-4,-4.2682099455994495e-5,-8.684069583127032e-9,-1.5655967783061677e-4,-4.241963218334136e-5,-8.671100768675983e-9,-1.5629842252569848e-4,-4.215106331379977e-5,-8.65564776892293e-9,-1.5611654367897435e-4,-4.1922027222526855e-5,-8.641393519477788e-9,-1.5598634365727104e-4,-4.1769990723229766e-5,-8.631943434242865e-9,-1.558655337576891e-4,-4.171332468953909e-5,-8.62980875112357e-9,-1.55708599326998e-4,-4.1745676230751626e-5,-8.635639653747643e-9,-1.5547926756793228e-4,-4.183738871643539e-5,-8.64796410233513e-9,-1.5516040876164026e-4,-4.194344529267842e-5,-8.663544317198107e-9,-1.5475857077794318e-4,-4.2015642345345564e-5,-8.678275332417251e-9,-1.5430178219828054e-4,-4.2015487508945786e-5,-8.688346657903147e-9,-1.538312653883322e-4,-4.1923888974596855e-5,-8.691272266061803e-9,-1.5338985144061818e-4,-4.174464729428951e-5,-8.686443715723425e-9,-1.5301108912570144e-4,-4.150107912857046e-5,-8.675074640975934e-9,-1.5271247020407983e-4,-4.1227745509928506e-5,-8.659650972450587e-9,-1.5249412865362623e-4,-4.096082102643691e-5,-8.643154944543995e-9,-1.5234202142190386e-4,-4.0730361657362306e-5,-8.628341074666747e-9,-1.522332666590427e-4,-4.0556036818412694e-5,-8.617240877586801e-9,-1.5214146355814283e-4,-4.044607832465574e-5,-8.610948820189256e-9,-1.5204082770238207e-4,-4.0398276306418136e-5,-8.609649713449356e-9,-1.5190894966737008e-4,-4.040182404940597e-5,-8.612791693953891e-9,-1.5172855998777816e-4,-4.04392073340307e-5,-8.619289651721801e-9,-1.5148890221367985e-4,-4.048788673301634e-5,-8.627671304566296e-9,-1.511871960678653e-4,-4.052207249406931e-5,-8.636154913727928e-9,-1.5083025434630082e-4,-4.051521495503619e-5,-8.642725787473477e-9,-1.5043574158394175e-4,-4.044383852156764e-5,-8.645327734018624e-9,-1.500319353466808e-4,-4.029297377626192e-5,-8.642261093560134e-9,-1.496544166579292e-4,-4.006242686937451e-5,-8.632759521112276e-9,-1.4933857066749907e-4,-3.9771500609913104e-5,-8.61753525645397e-9,-1.4910878327908136e-4,-3.9458613965874134e-5,-8.598961074703302e-9,-1.4896817540041468e-4,-3.9173255620837376e-5,-8.580634729706417e-9,-1.4889434793359147e-4,-3.896143953895252e-5,-8.566369717397555e-9,-1.488446779231985e-4,-3.885027635490195e-5,-8.558992598500318e-9,-1.4876971971684565e-4,-3.883878985692342e-5,-8.559461170923111e-9,-1.4862882605840358e-4,-3.889897430693147e-5,-8.566637964807312e-9,-1.484015496846831e-4,-3.8985699273179814e-5,-8.577719545041904e-9,-1.4809146958670756e-4,-3.9050500471712874e-5,-8.589075917670951e-9,-1.4772283139077166e-4,-3.90541832810773e-5,-8.597200861671296e-9,-1.4733252302452735e-4,-3.8975093804996464e-5,-8.599531021666814e-9,-1.46960319709348e-4,-3.8811988524448995e-5,-8.594969943036304e-9,-1.4663989849332713e-4,-3.8581911562734315e-5,-8.58402541962936e-9,-1.4639243737691714e-4,-3.831439622032589e-5,-8.568556760394407e-9,-1.4622381432699978e-4,-3.8043832331238845e-5,-8.551221326080342e-9,-1.4612546696149864e-4,-3.780203085357788e-5,-8.534793996272362e-9,-1.4607800835754142e-4,-3.761267871861787e-5,-8.521560570514165e-9,-1.46056126596556e-4,-3.748848840769632e-5,-8.512936995642796e-9,-1.4603336462438332e-4,-3.743087337648366e-5,-8.509368863912567e-9,-1.4598588657925202e-4,-3.743138625583485e-5,-8.510465027645555e-9,-1.4589496353338089e-4,-3.747399290628529e-5,-8.515247763091069e-9,-1.4574843347403674e-4,-3.753744263121957e-5,-8.522385868843517e-9,-1.4554162934537264e-4,-3.759745129656199e-5,-8.530332304446479e-9,-1.4527818133022795e-4,-3.7628889350479104e-5,-8.537375532161534e-9,-1.4497079464529807e-4,-3.76084521534279e-5,-8.541699439939246e-9,-1.446416124057033e-4,-3.751836753687077e-5,-8.541581339326527e-9,-1.4432111704455668e-4,-3.7351398285757994e-5,-8.535812444372269e-9,-1.4404404714688575e-4,-3.711638518574359e-5,-8.524282605408122e-9,-1.438412079624837e-4,-3.684187866182322e-5,-8.508477097627533e-9,-1.4372811461076546e-4,-3.657397293866363e-5,-8.491503673689153e-9,-1.436949746655447e-4,-3.636532952138359e-5,-8.477371791217123e-9,-1.437049148338037e-4,-3.625715011489158e-5,-8.469647157873269e-9,-1.4370460041685984e-4,-3.626225419817731e-5,-8.470096677118393e-9,-1.436435657655829e-4,-3.6359182629031623e-5,-8.478059693349249e-9,-1.4349217679652826e-4,-3.650097828056397e-5,-8.49083875172551e-9,-1.4324944734727836e-4,-3.663301747612782e-5,-8.50476357027434e-9,-1.4293924274250757e-4,-3.6710244446883646e-5,-8.516318183217591e-9,-1.42599606440927e-4,-3.670734481993864e-5,-8.522934387042323e-9,-1.4227107692698355e-4,-3.66208983276144e-5,-8.523380609554418e-9,-1.4198762087161575e-4,-3.646586091026803e-5,-8.517827359725516e-9,-1.4177127123896665e-4,-3.626931158012475e-5,-8.507668428407443e-9,-1.4163010445375599e-4,-3.606360234221836e-5,-8.495144285064709e-9,-1.4155881398565556e-4,-3.588006957388633e-5,-8.482821921176052e-9,-1.4154122929864088e-4,-3.574396664003745e-5,-8.473039059830415e-9,-1.4155410250967632e-4,-3.5671120527783085e-5,-8.467454781925923e-9,-1.4157137341078065e-4,-3.5666522461359366e-5,-8.46681890030178e-9,-1.4156819516112225e-4,-3.572468450852716e-5,-8.4709875707388e-9,-1.4152418460917606e-4,-3.58313730753767e-5,-8.47912807725831e-9,-1.4142558873947818e-4,-3.59661705458511e-5,-8.489992557926502e-9,-1.412664184643966e-4,-3.6105261696455e-5,-8.502137383045136e-9,-1.4104888166358994e-4,-3.6224110895191465e-5,-8.514032189748423e-9,-1.4078340386514088e-4,-3.630008132933925e-5,-8.524097794432883e-9,-1.4048831120426743e-4,-3.6315244359799485e-5,-8.530777751256682e-9,-1.4018893987105985e-4,-3.6259700669489686e-5,-8.532761075544734e-9,-1.399154045802046e-4,-3.613554770648095e-5,-8.529406358796928e-9,-1.396978493880879e-4,-3.5960758369385744e-5,-8.5212719609298e-9,-1.395584274220083e-4,-3.5770777754258144e-5,-8.510484614118273e-9,-1.395010799090941e-4,-3.5614419533547606e-5,-8.500584815712752e-9,-1.3950347955379841e-4,-3.554134224026499e-5,-8.495600252331792e-9,-1.395181326667312e-4,-3.5583057711782186e-5,-8.49852886633527e-9,-1.3948692048425989e-4,-3.573661667274257e-5,-8.509976577861838e-9,-1.3936409233349114e-4,-3.596248146847602e-5,-8.52783178092342e-9,-1.3913464178440764e-4,-3.6200002121230084e-5,-8.548219699136488e-9,-1.3881747770678196e-4,-3.6391341144876804e-5,-8.567072309384218e-9,-1.384540237025143e-4,-3.650005380239695e-5,-8.581375137160207e-9,-1.380914704582618e-4,-3.6517145395985524e-5,-8.589669620504838e-9,-1.3776939627770373e-4,-3.645667302158028e-5,-8.591982763540148e-9,-1.375129529417687e-4,-3.634680402050186e-5,-8.589508759325445e-9,-1.373315794560991e-4,-3.622095854655851e-5,-8.584220023840957e-9,-1.3722091216789167e-4,-3.61110737959683e-5,-8.578448656336925e-9,-1.3716598999432205e-4,-3.6043161150447865e-5,-8.574449379800085e-9,-1.37144819913883e-4,-3.6034601772228566e-5,-8.573995788120039e-9,-1.3713202193536196e-4,-3.60927847497726e-5,-8.578098184526851e-9,-1.3710237308793484e-4,-3.621495858814332e-5,-8.586914569799196e-9,-1.3703402980724396e-4,-3.6389181641333254e-5,-8.5998516774355e-9,-1.36911205202354e-4,-3.65962542961265e-5,-8.615789199981454e-9,-1.3672602214730465e-4,-3.68124573584491e-5,-8.633327431858329e-9,-1.36479349089764e-4,-3.701271677512592e-5,-8.650970819822634e-9,-1.3618068653054776e-4,-3.717379627140313e-5,-8.667222550115315e-9,-1.358472662707308e-4,-3.7277344343605105e-5,-8.680647089426607e-9,-1.3550242612119607e-4,-3.731274903926245e-5,-8.68999424871703e-9,-1.3517320152061808e-4,-3.727978006702851e-5,-8.694459140313209e-9,-1.3488680793789882e-4,-3.719092897384664e-5,-8.694073713436727e-9,-1.3466544021457864e-4,-3.707279073129639e-5,-8.69010051987593e-9,-1.3451925275556113e-4,-3.696481485133304e-5,-8.685177236944263e-9,-1.344388658671642e-4,-3.69131046298267e-5,-8.682934876706395e-9,-1.3439108416693466e-4,-3.695778715724225e-5,-8.68695839392729e-9,-1.3432331140892352e-4,-3.7116200157038535e-5,-8.699334814541392e-9,-1.3417981211901297e-4,-3.737010340084863e-5,-8.71951455375979e-9,-1.339246580951755e-4,-3.7667420214442775e-5,-8.744316749020727e-9,-1.3355816900488716e-4,-3.7941435370631326e-5,-8.769244026211392e-9,-1.3311593340372153e-4,-3.813725721253883e-5,-8.79029609068621e-9,-1.3265197371800877e-4,-3.8229929052285945e-5,-8.80518898519348e-9,-1.3221793913426716e-4,-3.822643977336777e-5,-8.813555366407018e-9,-1.318492290963614e-4,-3.8155740932226004e-5,-8.816480101901048e-9,-1.3156091565529496e-4,-3.8055615871408505e-5,-8.815891247203971e-9,-1.3135036452187486e-4,-3.796239043644523e-5,-8.814051427765528e-9,-1.31202438800492e-4,-3.7905049072083586e-5,-8.813160873514698e-9,-1.3109463784149872e-4,-3.79028210263575e-5,-8.81503385420893e-9,-1.3100122611687848e-4,-3.796469387651649e-5,-8.820852830416448e-9,-1.3089648863076503e-4,-3.80897908046812e-5,-8.83104051118581e-9,-1.3075748536931842e-4,-3.826825886682798e-5,-8.84527997381368e-9,-1.3056648321026467e-4,-3.848267424904795e-5,-8.862659526172724e-9,-1.3031305885508222e-4,-3.871009371470224e-5,-8.881878607082005e-9,-1.2999564462678402e-4,-3.8924886973358905e-5,-8.90144922639146e-9,-1.296221126551315e-4,-3.9102224081252054e-5,-8.919852317394064e-9,-1.292091137554164e-4,-3.9221787764163894e-5,-8.935653170963314e-9,-1.287801342980387e-4,-3.9271231345139034e-5,-8.947626178113364e-9,-1.2836237102655372e-4,-3.924893370147562e-5,-8.954946573809908e-9,-1.2798264289840097e-4,-3.916561004732102e-5,-8.957459750970044e-9,-1.2766262594780724e-4,-3.9044431207776e-5,-8.955969094344736e-9,-1.2741366297480022e-4,-3.891923161696911e-5,-8.952404162384802e-9,-1.2723168997357461e-4,-3.883000967390067e-5,-8.949679509496966e-9,-1.27093748029005e-4,-3.881487829910734e-5,-8.951097831921052e-9,-1.2695870357679422e-4,-3.8898685950468335e-5,-8.959323326278861e-9,-1.267751555869125e-4,-3.908106724078372e-5,-8.975233990146882e-9,-1.2649729890266872e-4,-3.933002315131596e-5,-8.997238422616873e-9,-1.2610380646318407e-4,-3.958793924368254e-5,-9.021623338742478e-9,-1.2560933231630603e-4,-3.979117636916569e-5,-9.043949542052622e-9,-1.250601064281325e-4,-3.989428803618717e-5,-9.060747657363913e-9,-1.2451535807132656e-4,-3.988519479442612e-5,-9.070550347589108e-9,-1.2402584828578883e-4,-3.978414776435241e-5,-9.073886011159246e-9,-1.236205981940215e-4,-3.963065544738354e-5,-9.07260038223968e-9,-1.2330492479386814e-4,-3.946804731107443e-5,-9.06907791995821e-9,-1.2306592379153069e-4,-3.9332584341514184e-5,-9.065663183276685e-9,-1.228800828847495e-4,-3.9248605036294036e-5,-9.064298093394783e-9,-1.2271974809462355e-4,-3.9227959023930204e-5,-9.066308761174449e-9,-1.2255751932836511e-4,-3.9271422800291845e-5,-9.07230522767062e-9,-1.2236902385258616e-4,-3.937056825807537e-5,-9.082190481665708e-9,-1.2213485314795255e-4,-3.950953825587356e-5,-9.0952670217167e-9,-1.2184219766310128e-4,-3.966680598205627e-5,-9.110401741288104e-9,-1.2148636162885278e-4,-3.981726696521993e-5,-9.12619905571748e-9,-1.2107197250418744e-4,-3.9935062083796264e-5,-9.141156188037495e-9,-1.2061333772280514e-4,-3.9997258003077964e-5,-9.153805898123638e-9,-1.2013331124746263e-4,-3.998800386203117e-5,-9.162873756252375e-9,-1.1966030668005657e-4,-3.990236796499482e-5,-9.167476141008514e-9,-1.1922355711720542e-4,-3.9748848224879454e-5,-9.16735668291749e-9,-1.1884727409519039e-4,-3.9549573910041856e-5,-9.163106709226148e-9,-1.1854484500946807e-4,-3.9337626281964046e-5,-9.156273357353645e-9,-1.1831435745928925e-4,-3.9151554868869843e-5,-9.149247534449742e-9,-1.1813661119487769e-4,-3.9027669333984225e-5,-9.144851147026704e-9,-1.1797667960421902e-4,-3.899110483450793e-5,-9.145628060950681e-9,-1.1778991790734548e-4,-3.904737063700308e-5,-9.15299150810211e-9,-1.175325624741728e-4,-3.9177091689939015e-5,-9.166537396277783e-9,-1.1717523308225653e-4,-3.933731131848976e-5,-9.183898816605155e-9,-1.1671489921126038e-4,-3.947171279421601e-5,-9.20137620436505e-9,-1.1617906373001206e-4,-3.952820645458404e-5,-9.215188158288917e-9,-1.1561807446250038e-4,-3.947694802803824e-5,-9.222771080593783e-9,-1.1508795403832579e-4,-3.931977427169145e-5,-9.223487247363517e-9,-1.1463218392673738e-4,-3.9086539305895255e-5,-9.21849929028679e-9,-1.142709592978943e-4,-3.8821745934336895e-5,-9.210076040428456e-9,-1.1400074179654687e-4,-3.856946273893001e-5,-9.20078618611514e-9,-1.1380094799943816e-4,-3.836294492571193e-5,-9.192886631995141e-9,-1.1364261812623197e-4,-3.822069459714716e-5,-9.1879765359956e-9,-1.1349551541127026e-4,-3.814719957123449e-5,-9.186871306246775e-9,-1.1333258761490281e-4,-3.8135736535814055e-5,-9.189633338269424e-9,-1.1313230069867286e-4,-3.817141008984336e-5,-9.195706259883106e-9,-1.1287982382393343e-4,-3.823369291997683e-5,-9.204097657482591e-9,-1.1256786310513337e-4,-3.829851605574717e-5,-9.213553802888529e-9,-1.1219751803139118e-4,-3.8340376762559447e-5,-9.22269414066259e-9,-1.1177904223869293e-4,-3.833503671167999e-5,-9.230116686601745e-9,-1.1133191698447232e-4,-3.826315103578705e-5,-9.234523255112086e-9,-1.1088335748373442e-4,-3.811461096830071e-5,-9.234910233392347e-9,-1.1046449079987319e-4,-3.789262697562118e-5,-9.230826308386785e-9,-1.1010413601670693e-4,-3.7615910350771354e-5,-9.222627139411862e-9,-1.0982130517158393e-4,-3.731722308065027e-5,-9.21160402770721e-9,-1.0961868889767661e-4,-3.703748088216355e-5,-9.199872312326249e-9,-1.0947969429209346e-4,-3.681630820680492e-5,-9.189976537874282e-9,-1.0937067838856088e-4,-3.668157414423921e-5,-9.184272074658242e-9,-1.0924829447019257e-4,-3.664109554625678e-5,-9.18424056176897e-9,-1.0907020550257687e-4,-3.667913877536005e-5,-9.189954915184103e-9,-1.0880642515705916e-4,-3.6759033088402764e-5,-9.199907267392656e-9,-1.0844824947981108e-4,-3.683171835853091e-5,-9.211326762762983e-9,-1.0801195079731945e-4,-3.684853152381634e-5,-9.220949393187014e-9,-1.0753533107081977e-4,-3.6774884340293415e-5,-9.225997564122934e-9,-1.0706735543311275e-4,-3.6600269285523224e-5,-9.22499909034669e-9,-1.0665405844386353e-4,-3.634060345263345e-5,-9.218128116932532e-9,-1.0632599695639417e-4,-3.6031911809698865e-5,-9.206981038369621e-9,-1.0609189824736788e-4,-3.5718319405997615e-5,-9.19395506438557e-9,-1.0593992002165717e-4,-3.543962353913638e-5,-9.181522987160879e-9,-1.0584432970216088e-4,-3.5222894444418944e-5,-9.171654265312317e-9,-1.0577377509585269e-4,-3.5079615353876484e-5,-9.165501882736301e-9,-1.0569811427307857e-4,-3.500714701067259e-5,-9.163352800650679e-9,-1.0559264518508524e-4,-3.499226206662488e-5,-9.164771801813917e-9,-1.0544004786505433e-4,-3.5014920510423576e-5,-9.16883982493074e-9,-1.0523095671395252e-4,-3.5051391464275926e-5,-9.174389778026609e-9,-1.0496405295401565e-4,-3.507665669286638e-5,-9.180172150801203e-9,-1.0464618835727268e-4,-3.506655725701059e-5,-9.184939032839345e-9,-1.0429252092118758e-4,-3.500030193581135e-5,-9.187495988674884e-9,-1.039261276946598e-4,-3.48637823947789e-5,-9.186800523449334e-9,-1.0357615793353864e-4,-3.46536541858101e-5,-9.182170455832e-9,-1.0327350441689744e-4,-3.4381246691956354e-5,-9.173580720955574e-9,-1.0304364939716516e-4,-3.4074253186413085e-5,-9.161923230549191e-9,-1.0289802766204464e-4,-3.3773697803369534e-5,-9.149039646343281e-9,-1.0282725778280255e-4,-3.3524929232600696e-5,-9.137394421723031e-9,-1.0280029662432293e-4,-3.336441855594974e-5,-9.129418606410994e-9,-1.0277162008556858e-4,-3.3307298589755e-5,-9.126750143428798e-9,-1.0269452672034878e-4,-3.334132380659976e-5,-9.129679824022376e-9,-1.0253530901109662e-4,-3.3430128766657056e-5,-9.137028969170211e-9,-1.0228281327026914e-4,-3.352418168582912e-5,-9.146483951023313e-9,-1.0195058478501845e-4,-3.357486167811767e-5,-9.155243273725392e-9,-1.0157200536431759e-4,-3.354696552794696e-5,-9.160762004820197e-9,-1.0119077576295845e-4,-3.3426523116505044e-5,-9.161389983981338e-9,-1.0084972538708518e-4,-3.322258471680729e-5,-9.1567428994038e-9,-1.0058085340582454e-4,-3.296319855077416e-5,-9.1477233287177e-9,-1.0039895151362752e-4,-3.268715204906611e-5,-9.13620386476633e-9,-1.0030009479870362e-4,-3.243403248359135e-5,-9.124482475916777e-9,-1.0026481761500761e-4,-3.2235448634192776e-5,-9.114685797381227e-9,-1.002643617789796e-4,-3.210959204158094e-5,-9.108299298278605e-9,-1.0026767382911762e-4,-3.205986487873324e-5,-9.105941746310106e-9,-1.0024717983614368e-4,-3.207681406252085e-5,-9.107401083971613e-9,-1.0018239318013028e-4,-3.214184576455504e-5,-9.111860642617299e-9,-1.0006142614792553e-4,-3.223125875718116e-5,-9.118191582072067e-9,-9.988108258667136e-5,-3.2319691729833556e-5,-9.1251948611398e-9,-9.964632646321523e-5,-3.238278403756544e-5,-9.131729422340635e-9,-9.936964829441685e-5,-3.239938756272473e-5,-9.136742201877834e-9,-9.907040628933112e-5,-3.2353857807257145e-5,-9.139278262243717e-9,-9.877374852922494e-5,-3.22388541842853e-5,-9.138569270716463e-9,-9.850827687016545e-5,-3.2058685656720396e-5,-9.13425646517205e-9,-9.830143939364078e-5,-3.1832365719454527e-5,-9.126703455871307e-9,-9.817223068137955e-5,-3.159432274657247e-5,-9.117234559865558e-9,-9.812252419680496e-5,-3.138997708142053e-5,-9.108071823699427e-9,-9.813089016549055e-5,-3.126452109365012e-5,-9.10182146027846e-9,-9.815412222958905e-5,-3.124710157480261e-5,-9.100604093125194e-9,-9.813914491830552e-5,-3.1337456387429606e-5,-9.105211374499513e-9,-9.804153498796248e-5,-3.150322611607172e-5,-9.11475449547984e-9,-9.784154686536156e-5,-3.1690737195221436e-5,-9.127000792101932e-9,-9.754967528636868e-5,-3.1843765894223964e-5,-9.139172281973027e-9,-9.720055366819144e-5,-3.192085559051927e-5,-9.148776150107598e-9,-9.684015327249356e-5,-3.1904655488520306e-5,-9.154172659673398e-9,-9.651257696551535e-5,-3.180236177111936e-5,-9.154822358487452e-9,-9.62504127431069e-5,-3.163996841124646e-5,-9.151274976782774e-9,-9.60698168291565e-5,-3.145374077091899e-5,-9.144961054288212e-9,-9.596984265486474e-5,-3.128151423757891e-5,-9.137828523893096e-9,-9.593497386265119e-5,-3.115537334164327e-5,-9.131885483864583e-9,-9.593976606922285e-5,-3.109656681303233e-5,-9.128751308860314e-9,-9.595447136657913e-5,-3.111310201829616e-5,-9.129337933414458e-9,-9.595049936624177e-5,-3.119999178987712e-5,-9.133745810921736e-9,-9.590477548725535e-5,-3.134160856925637e-5,-9.141380171958168e-9,-9.580246226255177e-5,-3.151529116825042e-5,-9.151211708597388e-9,-9.563797539391283e-5,-3.16952830703858e-5,-9.162060481302314e-9,-9.541467373049275e-5,-3.185625961327806e-5,-9.172796825714589e-9,-9.514380915860319e-5,-3.197615493895167e-5,-9.182419310694514e-9,-9.48431552537596e-5,-3.2038443093745316e-5,-9.190051974883061e-9,-9.453543133902659e-5,-3.2034182987011704e-5,-9.194952520053085e-9,-9.424633486772374e-5,-3.1964113362905855e-5,-9.19662086089252e-9,-9.400158823504068e-5,-3.18408340759899e-5,-9.195038235111904e-9,-9.382220633420554e-5,-3.169033305608827e-5,-9.19095818861579e-9,-9.371778135278529e-5,-3.155104568024974e-5,-9.186065400464665e-9,-9.367914980804929e-5,-3.1468046822899884e-5,-9.182785199579648e-9,-9.367412170350315e-5,-3.1480918711509026e-5,-9.183626205872267e-9,-9.365156347345576e-5,-3.160755715402989e-5,-9.19020294586336e-9,-9.355668865963729e-5,-3.183175941432533e-5,-9.202419571888166e-9,-9.335267713728581e-5,-3.210430056471749e-5,-9.218371347956345e-9,-9.303667906521569e-5,-3.236020861117679e-5,-9.235103819495216e-9,-9.264032211325917e-5,-3.2543385860012626e-5,-9.249755228307922e-9,-9.221548591093086e-5,-3.262483810785695e-5,-9.26041652356236e-9,-9.181507378196565e-5,-3.260698117914955e-5,-9.266413523353581e-9,-9.147845491400025e-5,-3.251632942914815e-5,-9.268166415699002e-9,-9.122520847559706e-5,-3.239154168921172e-5,-9.266889513425695e-9,-9.105564635912965e-5,-3.227244723700269e-5,-9.2642646836748e-9,-9.095498913811478e-5,-3.219240887699171e-5,-9.262101784399266e-9,-9.08987318910297e-5,-3.217406213098664e-5,-9.261994204243429e-9,-9.085793054099272e-5,-3.222762121230062e-5,-9.265019829464496e-9,-9.080392835417925e-5,-3.2351052738033134e-5,-9.271567916967034e-9,-9.071228168806134e-5,-3.253168391369461e-5,-9.28134185774094e-9,-9.056569168800201e-5,-3.2748874236925676e-5,-9.293522462109239e-9,-9.035578936575062e-5,-3.297739074658915e-5,-9.307015941925984e-9,-9.008365802729651e-5,-3.319108369388331e-5,-9.32068773621464e-9,-8.975916266917992e-5,-3.336636099032471e-5,-9.33350717957054e-9,-8.939940883763627e-5,-3.348509546284864e-5,-9.344592008056796e-9,-8.902663953210632e-5,-3.353691102753202e-5,-9.353211946825554e-9,-8.866569313938621e-5,-3.352090126483869e-5,-9.35883336145802e-9,-8.834103551839693e-5,-3.3446806313605515e-5,-9.361261938630803e-9,-8.807317448099914e-5,-3.333560303798455e-5,-9.360872293875294e-9,-8.787408489854848e-5,-3.321895898344246e-5,-9.35881896249169e-9,-8.774178162211213e-5,-3.313618048205553e-5,-9.357051719661311e-9,-8.765551941425548e-5,-3.312704407820512e-5,-9.357971217288903e-9,-8.75747733839315e-5,-3.3219976944643985e-5,-9.363691049098633e-9,-8.74461410016907e-5,-3.341812218722618e-5,-9.375114762347986e-9,-8.7220065678816e-5,-3.3690479945789706e-5,-9.391311854138805e-9,-8.687212463896635e-5,-3.397702246395055e-5,-9.409699673510456e-9,-8.641654285989432e-5,-3.420979174434094e-5,-9.427069578077248e-9,-8.590181922728967e-5,-3.433967242416912e-5,-9.440848661633535e-9,-8.539061620032401e-5,-3.435314501297649e-5,-9.44984340985916e-9,-8.493672097339013e-5,-3.4271269582614564e-5,-9.454233252297501e-9,-8.45709727893319e-5,-3.413584988272384e-5,-9.45513539359531e-9,-8.429907159057472e-5,-3.399315338192215e-5,-9.454135610822126e-9,-8.410710066635141e-5,-3.388222278476255e-5,-9.452932691116559e-9,-8.39694300761685e-5,-3.382927951155617e-5,-9.453065287658341e-9,-8.385576288840835e-5,-3.384661045247159e-5,-9.455682021020762e-9,-8.373632656338405e-5,-3.39337961074905e-5,-9.461372860972362e-9,-8.358545827544782e-5,-3.407987563331084e-5,-9.470111676055729e-9,-8.338408132706894e-5,-3.426590539557689e-5,-9.481331913003121e-9,-8.312136430352067e-5,-3.446778153328366e-5,-9.494105686910258e-9,-8.279564587432089e-5,-3.465932720987703e-5,-9.507355644814983e-9,-8.241450667287213e-5,-3.481564090403858e-5,-9.520030613693909e-9,-8.19937854235765e-5,-3.491646452503521e-5,-9.531207314372736e-9,-8.155553782746594e-5,-3.494912799250977e-5,-9.540129776878508e-9,-8.112514759519504e-5,-3.491073158250606e-5,-9.546243568285508e-9,-8.072780222779476e-5,-3.480934834136822e-5,-9.549283156140592e-9,-8.038456389393579e-5,-3.466401475530754e-5,-9.549426224657887e-9,-8.010831362600719e-5,-3.450333338545574e-5,-9.54746360191402e-9,-7.989980971585162e-5,-3.4362440274271346e-5,-9.544875278633311e-9,-7.974437782718713e-5,-3.427773727254322e-5,-9.543676237437192e-9,-7.961061805952735e-5,-3.427884237468908e-5,-9.545950110564333e-9,-7.945341861300056e-5,-3.437837958684637e-5,-9.553132576768602e-9,-7.922353858236074e-5,-3.456254513569184e-5,-9.56529984876067e-9,-7.888371631202135e-5,-3.478810345141471e-5,-9.580865713138687e-9,-7.842594949679023e-5,-3.499174125974583e-5,-9.597013547859506e-9,-7.787972052612896e-5,-3.5111823238104886e-5,-9.61077091176288e-9,-7.730339317992335e-5,-3.5112654366270275e-5,-9.620133730535203e-9,-7.676190727235558e-5,-3.4997103078953485e-5,-9.624598331243174e-9,-7.630368913524509e-5,-3.480106932702219e-5,-9.62496228087358e-9,-7.594864786183333e-5,-3.457584341541249e-5,-9.622755990773589e-9,-7.568955618661085e-5,-3.4369955647098174e-5,-9.619710536672963e-9,-7.550120699012476e-5,-3.4218070735318946e-5,-9.617407235355379e-9,-7.53506844299028e-5,-3.4137703834965904e-5,-9.617061902570326e-9,-7.520512620818642e-5,-3.4130887726558557e-5,-9.619389347609227e-9,-7.503635353608889e-5,-3.4187713250424024e-5,-9.624544759331411e-9,-7.482323554456231e-5,-3.4289930549698735e-5,-9.63216195796353e-9,-7.455284746952063e-5,-3.441408243113663e-5,-9.641484197830746e-9,-7.422104933606681e-5,-3.4534311144901265e-5,-9.651545196785234e-9,-7.383266982034839e-5,-3.4625139821498456e-5,-9.661340808730684e-9,-7.340115252227199e-5,-3.466447763315732e-5,-9.669951148188559e-9,-7.29472860281118e-5,-3.4636811794840895e-5,-9.676610258024069e-9,-7.249670181575391e-5,-3.453612755069931e-5,-9.680751536488109e-9,-7.207617225320659e-5,-3.436789907206864e-5,-9.682071150846721e-9,-7.170907254595313e-5,-3.414954611457939e-5,-9.680633872207702e-9,-7.141062395474628e-5,-3.39088790257861e-5,-9.676997430229804e-9,-7.118375946617258e-5,-3.3680346460547944e-5,-9.672282908069223e-9,-7.101650731517465e-5,-3.349931488623629e-5,-9.668098481187566e-9,-7.088172523947388e-5,-3.33948756399492e-5,-9.666247026220778e-9,-7.074007291564022e-5,-3.3381977619494795e-5,-9.668224096412342e-9,-7.054706001923604e-5,-3.345448175111133e-5,-9.674640120668145e-9,-7.026421186175586e-5,-3.358188659485631e-5,-9.68481262676929e-9,-6.987236648803186e-5,-3.371310919852034e-5,-9.69679586348801e-9,-6.938216497629712e-5,-3.3789366876241454e-5,-9.707962916374584e-9,-6.883511643281062e-5,-3.376368965928737e-5,-9.715940864866819e-9,-6.829161852117123e-5,-3.3618736578177726e-5,-9.719434092883315e-9,-6.781005922500603e-5,-3.337302815858778e-5,-9.718519685799377e-9,-6.742756648217968e-5,-3.307197650765509e-5,-9.714369050431293e-9,-6.715167109481134e-5,-3.276964162612763e-5,-9.70868572509175e-9,-6.696431540140377e-5,-3.251149483555875e-5,-9.703181489926008e-9,-6.683272014943683e-5,-3.23249804831107e-5,-9.699229967536756e-9,-6.672046595425307e-5,-3.221830593712131e-5,-9.69768646622021e-9,-6.659514882482948e-5,-3.218413792480631e-5,-9.69883261424372e-9,-6.643222102070501e-5,-3.2204715407059465e-5,-9.702422223220024e-9,-6.621623206383647e-5,-3.225639014403438e-5,-9.707811412099236e-9,-6.594084229704343e-5,-3.231307689206832e-5,-9.714134303646899e-9,-6.560847130759857e-5,-3.234892257240772e-5,-9.720473000120565e-9,-6.522984548096849e-5,-3.2340745725612146e-5,-9.725978398839142e-9,-6.482324202400488e-5,-3.227068092840828e-5,-9.72993539962299e-9,-6.441292964570893e-5,-3.212909927557402e-5,-9.731798587080863e-9,-6.402628163536215e-5,-3.1917364877182857e-5,-9.731239839313383e-9,-6.368937200887575e-5,-3.164953586182567e-5,-9.728232443086724e-9,-6.342148728367543e-5,-3.135192586641782e-5,-9.723155862069091e-9,-6.3229704409613e-5,-3.105968506127635e-5,-9.716864968224381e-9,-6.310518395759158e-5,-3.081035792541784e-5,-9.710646408580894e-9,-6.302274843342547e-5,-3.0635492967811876e-5,-9.706009068758345e-9,-6.294459210654977e-5,-3.055226083848084e-5,-9.704313675315504e-9,-6.282790628516361e-5,-3.0557342633427204e-5,-9.706329094269245e-9,-6.263513206345579e-5,-3.062513212686725e-5,-9.711875217337033e-9]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json new file mode 100644 index 0000000..76c3a68 --- /dev/null +++ b/public/lib/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":9000,"numberOfSamples":1000,"samples":[-6.23446137633139e-5,-3.071164556992463e-5,-9.719731332151204e-9,-6.19586809157847e-5,-3.076438157665265e-5,-9.727914890125598e-9,-6.150587794551883e-5,-3.073654937098242e-5,-9.734280833128142e-9,-6.1034943329782044e-5,-3.060168191808949e-5,-9.737216476929997e-9,-6.0601038606681665e-5,-3.036287029042388e-5,-9.736134809126074e-9,-6.024888746053323e-5,-3.0051869736974383e-5,-9.731565682588457e-9,-5.999994090928063e-5,-2.971789522758825e-5,-9.724862066857019e-9,-5.9848834314815545e-5,-2.9411354882677176e-5,-9.71770907732456e-9,-5.976923198886019e-5,-2.916989718887004e-5,-9.711648469978378e-9,-5.972462316432335e-5,-2.9011586735457638e-5,-9.707751149758674e-9,-5.967870819510338e-5,-2.8935387308633597e-5,-9.70647628370283e-9,-5.9602228253192676e-5,-2.89259970676844e-5,-9.707695687073557e-9,-5.947591112549622e-5,-2.8959747148304846e-5,-9.710838540242717e-9,-5.929077173354268e-5,-2.9009608654381066e-5,-9.715094525623705e-9,-5.904719567985657e-5,-2.9048773862964067e-5,-9.71960852884578e-9,-5.8753773367436014e-5,-2.9053136374370507e-5,-9.72361187781754e-9,-5.842624685184096e-5,-2.9003338061866847e-5,-9.726475623750488e-9,-5.8086360356536405e-5,-2.8886966009567993e-5,-9.727714468149827e-9,-5.776002754298137e-5,-2.870105742876016e-5,-9.726995392498005e-9,-5.74741651198525e-5,-2.845449366073143e-5,-9.72419549652686e-9,-5.725183467800746e-5,-2.8169256139263426e-5,-9.71951151762819e-9,-5.7106100541113594e-5,-2.7879041181757347e-5,-9.713564114276547e-9,-5.7034227249689176e-5,-2.7623923778951554e-5,-9.707405962417725e-9,-5.7014849044397024e-5,-2.744114170465607e-5,-9.702361282140308e-9,-5.701050918052841e-5,-2.735425399096375e-5,-9.699698830847758e-9,-5.697609718243167e-5,-2.7364576162975244e-5,-9.700232368303819e-9,-5.6871038817050416e-5,-2.7448633497066595e-5,-9.704002376450864e-9,-5.667116781282969e-5,-2.7563221973356075e-5,-9.710182005555758e-9,-5.637617678776307e-5,-2.765667320675218e-5,-9.717264987992663e-9,-5.601027591624169e-5,-2.7682736375781414e-5,-9.723480590272698e-9,-5.561600483675091e-5,-2.7612936285683867e-5,-9.727297528384073e-9,-5.524303937361784e-5,-2.7443956618506687e-5,-9.727850312943274e-9,-5.493513840003189e-5,-2.7197955922928915e-5,-9.725154651913568e-9,-5.471906725691787e-5,-2.6915691607899557e-5,-9.72005407261872e-9,-5.4598911019501836e-5,-2.6644703453075705e-5,-9.713934027115233e-9,-5.455730383150816e-5,-2.64266189741069e-5,-9.708311206523093e-9,-5.4562420129529145e-5,-2.6287768574123053e-5,-9.704433569738843e-9,-5.457752704343605e-5,-2.623553492658023e-5,-9.703008653848694e-9,-5.456957532646678e-5,-2.6260220049275858e-5,-9.704121931504624e-9,-5.451464446828428e-5,-2.6340246599419492e-5,-9.707335422027123e-9,-5.439995050230707e-5,-2.6448131932234545e-5,-9.711898924726039e-9,-5.422339633670513e-5,-2.6555532499365036e-5,-9.716981565914689e-9,-5.399194066121386e-5,-2.663678226094542e-5,-9.721842938139277e-9,-5.37197431734721e-5,-2.667116151947731e-5,-9.725902670942154e-9,-5.342650643560834e-5,-2.6644534881516494e-5,-9.728727486336505e-9,-5.313587618209729e-5,-2.655097739679037e-5,-9.729995225631237e-9,-5.287334596399925e-5,-2.639462790136861e-5,-9.72950469114869e-9,-5.266297173036476e-5,-2.619143036945524e-5,-9.727266597271218e-9,-5.252243553464907e-5,-2.596971389861331e-5,-9.723645863256587e-9,-5.245681707745194e-5,-2.5767877042401753e-5,-9.719459836489783e-9,-5.245295661436816e-5,-2.562748717562385e-5,-9.715914975816248e-9,-5.247784135201871e-5,-2.558182145120203e-5,-9.714321344765071e-9,-5.248433005910525e-5,-2.5643167778965002e-5,-9.71565414605581e-9,-5.242443255043768e-5,-2.5794981125069657e-5,-9.720157774265109e-9,-5.2265507859568556e-5,-2.599424952537427e-5,-9.727205074415084e-9,-5.200192042456586e-5,-2.6184413784918434e-5,-9.735490249337039e-9,-5.165673914621095e-5,-2.6313264574752945e-5,-9.743443035999223e-9,-5.127351919687404e-5,-2.6348054742647138e-5,-9.749667801257827e-9,-5.0902725125982576e-5,-2.6282713166082426e-5,-9.75326720347049e-9,-5.0588284184408174e-5,-2.6136491038281e-5,-9.754009356253531e-9,-5.0357993370069754e-5,-2.5946393683606597e-5,-9.752342082004198e-9,-5.0219232993974796e-5,-2.5756667981670227e-5,-9.749262933352734e-9,-5.015982106504244e-5,-2.5608303159542794e-5,-9.746061951023208e-9,-5.0152906269271166e-5,-2.5530759317958693e-5,-9.743991748123502e-9,-5.016424167598713e-5,-2.5537314473559887e-5,-9.743957229389409e-9,-5.015987799753719e-5,-2.5624510658344092e-5,-9.746324283706057e-9,-5.011244865581866e-5,-2.5775123374663638e-5,-9.750904754883811e-9,-5.000492623338741e-5,-2.596321755352963e-5,-9.757101352467545e-9,-4.9831698223674514e-5,-2.6159651038122543e-5,-9.764134932390347e-9,-4.959756293540752e-5,-2.6336794409959954e-5,-9.77125471218565e-9,-4.9315586018946434e-5,-2.6471880876366733e-5,-9.777857341227311e-9,-4.900467765247903e-5,-2.6549048296052148e-5,-9.78350042703132e-9,-4.868733505302663e-5,-2.6560573645593127e-5,-9.787854781108205e-9,-4.8387507995782974e-5,-2.6507830841147043e-5,-9.790671063781774e-9,-4.812820015775109e-5,-2.640221991296037e-5,-9.791823659827242e-9,-4.792822925558667e-5,-2.626586053182433e-5,-9.791440657019166e-9,-4.7797688235235664e-5,-2.6131146731513124e-5,-9.790058210807481e-9,-4.7732434736905576e-5,-2.603750245204811e-5,-9.788680030956192e-9,-4.770949127982192e-5,-2.602362103765612e-5,-9.788622629016349e-9,-4.768699088683465e-5,-2.6115132800391774e-5,-9.791115783371455e-9,-4.7612514838547504e-5,-2.6311416798164514e-5,-9.796791594098938e-9,-4.744004786748611e-5,-2.6579162837951064e-5,-9.805340798551625e-9,-4.714894275327642e-5,-2.68596183979786e-5,-9.81558384504337e-9,-4.675409408145582e-5,-2.7088789244523173e-5,-9.82593563524379e-9,-4.63007016373858e-5,-2.7220538865820394e-5,-9.834966162719081e-9,-4.584698755933853e-5,-2.7240537539346205e-5,-9.841756608580806e-9,-4.544489497457328e-5,-2.716612358051693e-5,-9.845989371386469e-9,-4.512720869220526e-5,-2.7035870592725035e-5,-9.847894204339548e-9,-4.490350340869352e-5,-2.6895966227287968e-5,-9.848150476851382e-9,-4.4762813526265216e-5,-2.6788619054627426e-5,-9.847749002642056e-9,-4.467974944751262e-5,-2.6744535726717833e-5,-9.847788854326644e-9,-4.4621551529998665e-5,-2.67793858092927e-5,-9.849227199555758e-9,-4.4554711427458415e-5,-2.6893402551401513e-5,-9.852654250504786e-9,-4.445048423814215e-5,-2.7073346152810357e-5,-9.858177344922723e-9,-4.428881976659844e-5,-2.7296183901073322e-5,-9.865455416384905e-9,-4.406041691263042e-5,-2.753370714423536e-5,-9.873857188997167e-9,-4.376691930956634e-5,-2.7757247847319554e-5,-9.882664459772306e-9,-4.3419538053046194e-5,-2.7941805347373132e-5,-9.891234414250543e-9,-4.303660454191013e-5,-2.8069095603610774e-5,-9.899069051818642e-9,-4.264069174434751e-5,-2.8129368229640377e-5,-9.90579879900749e-9,-4.2255769073996823e-5,-2.8122238695490774e-5,-9.911139409555858e-9,-4.1904486407320275e-5,-2.8056896725693683e-5,-9.914892497705433e-9,-4.160543814119917e-5,-2.7951878164291356e-5,-9.9170275201943e-9,-4.137010911506443e-5,-2.783431847991674e-5,-9.917825281106567e-9,-4.119921521788755e-5,-2.7738086497587085e-5,-9.917998408072091e-9,-4.107878264055179e-5,-2.769954625238172e-5,-9.91867215364473e-9,-4.097763615938715e-5,-2.7749689768273665e-5,-9.921139370467895e-9,-4.0849404904229084e-5,-2.7902797854934692e-5,-9.926407792259145e-9,-4.0642441010064514e-5,-2.8145057541786642e-5,-9.934713814169385e-9,-4.031787237599612e-5,-2.8430538779043658e-5,-9.945298702787681e-9,-3.9868810330146976e-5,-2.8691908882654146e-5,-9.9566665170196e-9,-3.932833565054289e-5,-2.8864961803409028e-5,-9.967212572062042e-9,-3.875854394725441e-5,-2.891437192128338e-5,-9.975808367109482e-9,-3.822616913640833e-5,-2.8845330760606945e-5,-9.98201180056612e-9,-3.777943806979286e-5,-2.869613572190929e-5,-9.98594693625295e-9,-3.743725664498184e-5,-2.8519754654329504e-5,-9.98810862349428e-9,-3.719134397363045e-5,-2.8366020937962917e-5,-9.989234069973608e-9,-3.701525587842487e-5,-2.8270836040562245e-5,-9.99020103086058e-9,-3.6874340673262915e-5,-2.8252557552493445E-05,-9.991881928374356e-9,-3.6733633947777075e-5,-2.831302992680173e-5,-9.994958846882884e-9,-3.656313374093195e-5,-2.844073037686516e-5,-9.999766501751608e-9,-3.634100881655143e-5,-2.8614561011922926e-5,-1.000623541918002e-8,-3.605533964519792e-5,-2.8807801587885512e-5,-1.0013957531492734e-8,-3.570465334841229e-5,-2.8992079074828512e-5,-1.0022338457116705e-8,-3.529734816247884e-5,-2.914116709250595e-5,-1.0030762046344616e-8,-3.485006993645185e-5,-2.92343805861204e-5,-1.0038702615702036e-8,-3.4385142229079815e-5,-2.9259238226273796e-5,-1.0045757091094494e-8,-3.3927359255493513e-5,-2.9213049460563632e-5,-1.0051621058011619e-8,-3.350058407226353e-5,-2.9103332940466208e-5,-1.0056066702504657e-8,-3.3124457063630464e-5,-2.8947189972084985e-5,-1.0058976990550987e-8,-3.2811366323358286e-5,-2.8769735723801098e-5,-1.0060445345746964e-8,-3.256375787328263e-5,-2.8601623226662544e-5,-1.0060897143616392e-8,-3.2371816097269846e-5,-2.8475488693954947e-5,-1.0061145174295647e-8,-3.221189052935458e-5,-2.842075314931494e-5,-1.0062287880142022e-8,-3.204694100578321e-5,-2.8456309260332803e-5,-1.0065415316236122e-8,-3.183109485034811e-5,-2.8581804503757855e-5,-1.007118993199182e-8,-3.152026648812525e-5,-2.877048997646703e-5,-1.0079484318373714e-8,-3.108835216793204e-5,-2.8969238348406404e-5,-1.0089312218910324e-8,-3.0542974461299724e-5,-2.911131486583659e-5,-1.0099182540644034e-8,-2.992994780628945e-5,-2.9140766616140142e-5,-1.0107715115987456e-8,-2.9319253695152042e-5,-2.9036541761832005e-5,-1.0114124886146775e-8,-2.877809393386789e-5,-2.8820960229194144e-5,-1.0118307228329601e-8,-2.8346852894650365e-5,-2.8547443251060635e-5,-1.0120625267983092e-8,-2.803055359693186e-5,-2.8277133796314353e-5,-1.0121677071264258e-8,-2.7805852942645365e-5,-2.8058810315545394e-5,-1.0122171969069935e-8,-2.7634885870697304e-5,-2.7919586021142028e-5,-1.0122851241518537e-8,-2.7477784344898564e-5,-2.7865136011979794e-5,-1.0124374041290903e-8,-2.73005681768325e-5,-2.788470342701019e-5,-1.0127178785398857e-8,-2.707876938176712e-5,-2.7957027015369363e-5,-1.0131386580299943e-8,-2.6798428484780897e-5,-2.8055381987984983e-5,-1.0136799525049531e-8,-2.6455880523470634e-5,-2.8151496961065997e-5,-1.0142993650083491e-8,-2.6056989964450905e-5,-2.8218751221123247e-5,-1.0149458252670142e-8,-2.5615936366383297e-5,-2.82350089513246e-5,-1.0155717100330529e-8,-2.5153423477268736e-5,-2.8185218808561722e-5,-1.0161389371918144e-8,-2.469410784372093e-5,-2.80636100261117e-5,-1.0166188348621973e-8,-2.426321414819864e-5,-2.787501653366006e-5,-1.0169893731105325e-8,-2.3882668480529245e-5,-2.763487038497263e-5,-1.01723489245492e-8,-2.3567286234310905e-5,-2.7367666919278267e-5,-1.017351616196784e-8,-2.332156842397692e-5,-2.7103905438103306e-5,-1.017357593949472e-8,-2.3137641969046203e-5,-2.6875705732266855e-5,-1.0173013410180529e-8,-2.299476051584912e-5,-2.6711500845227497E-05,-1.017261329344951e-8,-2.2860705750699917e-5,-2.663018704620786e-5,-1.0173308322342749e-8,-2.2695665047880168e-5,-2.663518611623227e-5,-1.017589092482202e-8,-2.2459337873909423e-5,-2.6709603552242226e-5,-1.0180685150351775e-8,-2.212140867809451e-5,-2.6814846177850375e-5,-1.0187337375833014e-8,-2.1673671732367735e-5,-2.6895869468464378e-5,-1.0194873028803975e-8,-2.1139047774474032e-5,-2.68952440266726e-5,-1.0202044877588625e-8,-2.0570501852735378e-5,-2.6773653165214853e-5,-1.0207808391111026e-8,-2.0035779945461135e-5,-2.6527596262472074e-5,-1.0211650200164242e-8,-1.95929968856085e-5,-2.6192859779762135e-5,-1.0213616507492086e-8,-1.9270119523824262e-5,-2.5830075681245798e-5,-1.021413380368983e-8,-1.905933904298975e-5,-2.5500927912146165e-5,-1.021381348729072e-8,-1.892657043021345e-5,-2.5248592103061754e-5,-1.0213321886218076e-8,-1.8827443033921196e-5,-2.5090146839981592e-5,-1.0213277816654462e-8,-1.8720869387209668e-5,-2.5019585350191788e-5,-1.0214142627298827e-8,-1.8576464284264876e-5,-2.5015668692887527e-5,-1.0216127260583814e-8,-1.8376611843414558e-5,-2.504980617624261e-5,-1.0219166169699748e-8,-1.8115567499788158e-5,-2.5091878000311348e-5,-1.022297593256864e-8,-1.77975879404375e-5,-2.511396168920078e-5,-1.0227169183059294e-8,-1.743505293856026e-5,-2.5092754555130803e-5,-1.0231368833090536e-8,-1.7046707371919865e-5,-2.5011456803880348e-5,-1.0235274298180084e-8,-1.6655740859370975e-5,-2.4861532084328557e-5,-1.023866489114029e-8,-1.6287282974612118e-5,-2.464432330060455e-5,-1.0241365206381334e-8,-1.596501252310151e-5,-2.4372025169081737e-5,-1.024321801882643e-8,-1.570702113141324e-5,-2.406725812436014e-5,-1.0244103967347291e-8,-1.552160951313559e-5,-2.376063009939192e-5,-1.0244017040254267e-8,-1.5404061827608693e-5,-2.3486101581026236e-5,-1.0243161489551215e-8,-1.5335535519959935e-5,-2.327460877469775e-5,-1.0242006517918706e-8,-1.5284891552236783e-5,-2.314712391361825e-5,-1.0241237021644048e-8,-1.5213603604440276e-5,-2.3108728191468194e-5,-1.0241580512137116e-8,-1.5083201808082548e-5,-2.3145172717351075e-5,-1.0243555303704379e-8,-1.4864218209902013e-5,-2.32231622645874e-5,-1.0247243960115732e-8,-1.4545036900022462e-5,-2.3295366098052616e-5,-1.0252208937023976e-8,-1.4138251105215157e-5,-2.3310524416851092e-5,-1.0257614027791928e-8,-1.368146422366092e-5,-2.322748601135849e-5,-1.0262512342819018e-8,-1.322989051622768e-5,-2.3029486169829173e-5,-1.0266164007946504e-8,-1.2840855736179594e-5,-2.2732545405069593e-5,-1.0268236392507776e-8,-1.2555169579427251e-5,-2.238231187733215e-5,-1.0268825150242116e-8,-1.2383914527037539e-5,-2.2038912589209548e-5,-1.0268347802691693e-8,-1.2307249887307113e-5,-2.1756613087809175e-5,-1.0267393640885903e-8,-1.2284812012886326e-5,-2.156813016555327e-5,-1.0266572608916944e-8,-1.2270971936084373e-5,-2.1479552451146128e-5,-1.0266376938115249e-8,-1.2227457536302338e-5,-2.1474911265539056e-5,-1.0267077590847187e-8,-1.2129749205895953e-5,-2.1525263563921737e-5,-1.0268689111523196e-8,-1.1967892292312714e-5,-2.1597450054922837e-5,-1.0271017429226725e-8,-1.174422548889918e-5,-2.166023896731968e-5,-1.0273764819876203e-8,-1.1470257655664928e-5,-2.1687790859828148e-5,-1.0276640831595281e-8,-1.1163872918540682e-5,-2.16613873970703e-5,-1.0279429528370393e-8,-1.0847087574647729e-5,-2.1570437594962387e-5,-1.0281991235380007e-8,-1.0544002989509588e-5,-2.141339145539365e-5,-1.0284216045362617e-8,-1.0278390240021108e-5,-2.1198652865103365e-5,-1.0285974464584003e-8,-1.0070447996162899e-5,-2.0945037086426453e-5,-1.028711043152021e-8,-9.932690801530476e-6,-2.068088652200719e-5,-1.028749799157689e-8,-9.86563644678306e-6,-2.0440844298465255e-5,-1.0287141168707594e-8,-9.854764583517574e-6,-2.0259766952748523e-5,-1.028626273479879e-8,-9.870619619233569e-6,-2.01644508838674e-5,-1.0285319481300823e-8,-9.8733786193769e-6,-2.0165339281957866e-5,-1.0284908068411034e-8,-9.821625784056985e-6,-2.0251252759600633e-5,-1.0285579389915266e-8,-9.683168074476673e-6,-2.0389683901633625e-5,-1.0287635145367275e-8,-9.444561568473699e-6,-2.053338593781372e-5,-1.0290997813059452e-8,-9.116224347150207e-6,-2.063177957102368e-5,-1.0295216467786993e-8,-8.731339354531077e-6,-2.0644132770129046e-5,-1.0299605534523448e-8,-8.338457137712565e-6,-2.055092931652111e-5,-1.030345694288755e-8,-7.98933323349338e-6,-2.0360097137701205e-5,-1.0306242488373733e-8,-7.72506620945875e-6,-2.0105711184980106e-5,-1.0307743277604975e-8,-7.564775484823967e-6,-1.983876173135379e-5,-1.0308080804889762e-8,-7.500921681843046e-6,-1.9612526930376168e-5,-1.0307656350511951e-8,-7.503139782780013e-6,-1.946768074753192e-5,-1.0307019062928134e-8,-7.528820005869814e-6,-1.9422601531502887e-5,-1.0306699910081859e-8,-7.535794278292598e-6,-1.947177763761887e-5,-1.0307063665786794e-8,-7.492269894596984e-6,-1.959128917115925e-5,-1.0308233957531626e-8,-7.381486721375345e-6,-1.974765598713154e-5,-1.0310113143840973e-8,-7.201498312177095e-6,-1.990624677978869e-5,-1.031247670749912e-8,-6.962107167616799e-6,-2.0037161470478344e-5,-1.031508699283958e-8,-6.680993863389137e-6,-2.011834907841151e-5,-1.0317770097194946e-8,-6.380273436048308e-6,-2.0136768138740442e-5,-1.032042648831648e-8,-6.0838277247680745e-6,-2.0088636779103125e-5,-1.0322983928965702e-8,-5.815108860030673e-6,-1.9979521669310532e-5,-1.0325335032912242e-8,-5.594817165694961e-6,-1.9824453315227466e-5,-1.0327309582072665e-8,-5.437930590768389e-6,-1.9647685779100526e-5,-1.0328712972235372e-8,-5.349939383493514e-6,-1.948122710398913e-5,-1.0329423078834094e-8,-5.3228826376455855e-6,-1.936095973346019e-5,-1.0329498903693821e-8,-5.332864110333339e-6,-1.9319532507723174e-5,-1.0329235310495402e-8,-5.341522628441661e-6,-1.9376734531154476e-5,-1.0329117209882681e-8,-5.303353476159965e-6,-1.953039383977173e-5,-1.0329676054612896e-8,-5.17823507516099e-6,-1.9752454282041895e-5,-1.0331308373795825e-8,-4.945019491343102e-6,-1.9993909540435985e-5,-1.0334140752283602e-8,-4.610138350751177e-6,-2.019829297048899e-5,-1.0337995748268947e-8,-4.206914461260477e-6,-2.0318725218684748e-5,-1.0342450652703292e-8,-3.7858145479968068e-6,-2.033162353691172e-5,-1.0346947057188743e-8,-3.3999204340748854e-6,-2.0242322080569558e-5,-1.0350921705190584e-8,-3.090978422107698e-6,-2.0081863583639396e-5,-1.035394277316305e-8,-2.879939472361453e-6,-1.9897267305424163e-5,-1.0355827001534681e-8,-2.7637461044958318e-6,-1.9738805558921248e-5,-1.035669501194934e-8,-2.7182918430026305e-6,-1.9647845328083208e-5,-1.0356930437472887e-8,-2.706078182001334e-6,-1.964815539595743e-5,-1.0357046501868146e-8,-2.6861280184476436e-6,-1.9742416449230415e-5,-1.035751449251452e-8,-2.623356484294166e-6,-1.9914165200530054e-5,-1.0358627867133187e-8,-2.495051690997066e-6,-2.0133848461016657e-5,-1.0360457505484327e-8,-2.2933525948354025e-6,-2.0366613404506264e-5,-1.0362901596694904e-8,-2.024101506874866e-6,-2.057945330065126e-5,-1.036578541391425e-8,-1.703438490176005e-6,-2.0746243231691587e-5,-1.0368950180661795e-8,-1.353670649395772e-6,-2.085034603832491e-5,-1.0372285844231933e-8,-9.995092065925437e-7,-2.0885306200609506e-5,-1.0375703780683756e-8,-6.650892091385618e-7,-2.085449651147433e-5,-1.0379079635308058e-8,-3.715968940342627e-7,-2.0770428531116953e-5,-1.0382217349452199e-8,-1.3503446063713592e-7,-2.065397945826239e-5,-1.0384871607393536e-8,3.635039213145238e-8,-2.053328258334241e-5,-1.0386834569506982e-8,1.451554926153161e-7,-2.0441523455916053e-5,-1.038805057918194e-8,2.0789280435282035e-7,-2.041250688557186e-5,-1.0388697272151172e-8,2.56355366977416e-7,-2.047315309918241e-5,-1.0389176849844525e-8,3.3464806040304173e-7,-2.0633626967615144e-5,-1.039000389350313e-8,4.896682666698106e-7,-2.0878520990299207e-5,-1.0391635630909641e-8,7.558554175414243e-7,-2.1164864508976094e-5,-1.0394332164603972e-8,1.1400137473200676e-6,-2.143168146622313e-5,-1.039811235383832e-8,1.6149011662753742e-6,-2.161972150492724e-5,-1.040278944838272e-8,2.1267889603254867e-6,-2.169252145724684e-5,-1.0408016370122865e-8,2.613791080986166e-6,-2.1648099623553002e-5,-1.0413314414030032e-8,3.0255611796536674e-6,-2.1516600834236966e-5,-1.0418136661790554e-8,3.335896657502066e-6,-2.1347475609993867e-5,-1.0422008383847894e-8,3.5455028334495375e-6,-2.1193595706788387e-5,-1.0424695027343131e-8,3.6771057866818085e-6,-2.1098205117584193e-5,-1.0426297045670991e-8,3.766730983759074e-6,-2.1087212163472165e-5,-1.0427207186394536e-8,3.8543118584060025e-6,-2.116678673670468e-5,-1.0427955059979016e-8,3.97556153049034e-6,-2.1325112935168602e-5,-1.0429021553114722e-8,4.156112148298531e-6,-2.1536968915716497e-5,-1.043071137120023e-8,4.4083884967787636e-6,-2.1769858276116903e-5,-1.0433124870667529e-8,4.731238299426264e-6,-2.199039967092715e-5,-1.0436213182297564e-8,5.111871251593329e-6,-2.216982148981789e-5,-1.0439862617282118e-8,5.5293180610449155e-6,-2.228781360239789e-5,-1.0443951826756803e-8,5.958483105439134e-6,-2.2334471279948907e-5,-1.0448355486385057e-8,6.3739591557127685e-6,-2.2310548005592115e-5,-1.0452908274701619e-8,6.753167656295747e-6,-2.2226596306971968e-5,-1.0457371227043073e-8,7.0788641774440105e-6,-2.2101555638768476e-5,-1.0461442256004719e-8,7.341270437022586e-6,-2.19610250197676e-5,-1.0464828194753588e-8,7.540107011405848e-6,-2.18351220744106e-5,-1.0467357564690674e-8,7.686656069240698e-6,-2.1755428418429816e-5,-1.0469080980364281e-8,7.805377469636384e-6,-2.175014455624397e-5,-1.047029980195859e-8,7.933563002743403e-6,-2.1836872868918745e-5,-1.0471493607166954e-8,8.116719413656968e-6,-2.2013889674084526e-5,-1.0473170238320335e-8,8.397782946960609e-6,-2.2253242470900754e-5,-1.0475713376965965e-8,8.801167458084262e-6,-2.2501424654771112e-5,-1.0479313312473675e-8,9.31809147430383e-6,-2.2692544610459407e-5,-1.0483994091602052e-8,9.903277804372193e-6,-2.2771894060168208e-5,-1.0489651043077342e-8,1.0488693236733184e-5,-2.2718401944810526e-5,-1.0496011071352977e-8,1.1008517592282977e-5,-2.2552507598399298e-5,-1.0502567400688094e-8,1.14214527653244e-5,-2.2325484053898436e-5,-1.0508639692043991e-8,1.1719729539192924e-5,-2.2098427892878435e-5,-1.051360321451119e-8,1.192434757606461e-5,-2.192293983959106e-5,-1.0517149141774825e-8,1.2073148493867486e-5,-2.1830348879371115e-5,-1.0519399549919799e-8,1.2208507379845121e-5,-2.1829582167914723e-5,-1.0520823108331641e-8,1.2368142087573956e-5,-2.1910517424363665e-5,-1.0522026852220468e-8,1.2579647860001937e-5,-2.204963465047748e-5,-1.0523548294514526e-8,1.2858046046948135e-5,-2.2216044306126058e-5,-1.052573427092128e-8,1.3205504635807662e-5,-2.2377097194277054e-5,-1.0528728383253077e-8,1.3612660353343853e-5,-2.2503232700248113e-5,-1.0532528837699294e-8,1.4061128311368573e-5,-2.257179941745656e-5,-1.053705767622001e-8,1.4526835423976653e-5,-2.2569659248670465e-5,-1.0542194374134102e-8,1.4983796312142356e-5,-2.2494425657141477e-5,-1.0547763574333112e-8,1.5407831934948618e-5,-2.2354282969079747e-5,-1.0553504640982075e-8,1.5779770461427512e-5,-2.2166624359187616e-5,-1.0559067684047334e-8,1.608797482690634e-5,-2.195590135189993e-5,-1.0564065337397685e-8,1.6330245854374478e-5,-2.1750905552668204e-5,-1.0568177866410433e-8,1.6515130621988764e-5,-2.1581513602797013e-5,-1.0571271898841906e-8,1.6662595891771928e-5,-2.1474755707688038e-5,-1.0573475716392125e-8,1.680367989659793e-5,-2.144982680559584e-5,-1.0575164031555221e-8,1.6977991855744892e-5,-2.15119081550659e-5,-1.0576851619497795e-8,1.7227451460833117e-5,-2.164590037929872e-5,-1.0579043607594197e-8,1.758528349482335e-5,-2.1813063305720084e-5,-1.0582122319913347e-8,1.8061786594786307e-5,-2.1955189701945334e-5,-1.058632473338257e-8,1.8632948981106676e-5,-2.200995658499017e-5,-1.0591773118012249e-8,1.9241195983456193e-5,-2.193466323120593e-5,-1.0598445172373046e-8,1.981317133003406e-5,-2.1726452282952587e-5,-1.0606040069575834e-8,2.0287448616256157e-5,-2.1425281858291863e-5,-1.061388459734303e-8,2.0636332778655594e-5,-2.109672690297479e-5,-1.0621077002227759e-8,2.087033260256244e-5,-2.0805852875933422e-5,-1.0626847060734854e-8,2.1026869693195923e-5,-2.0597119217422514e-5,-1.0630882019558624e-8,2.115329294074093e-5,-2.0487273010198692e-5,-1.0633405474768798e-8,2.129300028400665e-5,-2.0468775249628576e-5,-1.0635008899056331e-8,2.1477766769687902e-5,-2.0517857674518222e-5,-1.0636384654839218e-8,2.172530639983127e-5,-2.0602735888928814e-5,-1.0638109815842078e-8,2.203989369531137e-5,-2.0690072956350867e-5,-1.0640550610319622e-8,2.2414327228279076e-5,-2.0749586688981025e-5,-1.0643876480653403e-8,2.2832428864176618e-5,-2.075731437602081e-5,-1.0648123545462657e-8,2.327186373709147e-5,-2.06979052512023e-5,-1.065324691100052e-8,2.370725263408254e-5,-2.056607264478361e-5,-1.065912813728469e-8,2.4113571523498897e-5,-2.0367140342581537e-5,-1.0665546197757955e-8,2.4469666599175597e-5,-2.011644324456059e-5,-1.067215081453571e-8,2.4761457155718238e-5,-1.9837455761494462e-5,-1.0678483547801098e-8,2.4984396740016067e-5,-1.9558825643028435e-5,-1.0684064625935296e-8,2.5144939672969598e-5,-1.9310587473940774e-5,-1.0688525639022025e-8,2.5260818881569855e-5,-1.9119802585786575e-5,-1.06917361236997e-8,2.535994562171527e-5,-1.9005914717674657e-5,-1.069386581323808e-8,2.5477696466233576e-5,-1.897609088271257e-5,-1.0695349149176802e-8,2.5652094341733997e-5,-1.902096367210599e-5,-1.0696767956414568e-8,2.5916298087693046e-5,-1.9111975005796678e-5,-1.0698709732170148e-8,2.628859728374691e-5,-1.9202643001807574e-5,-1.0701666562329869e-8,2.6762094197675117e-5,-1.9236556751696734e-5,-1.0705996336353121e-8,2.729911355674748e-5,-1.9163344524585584e-5,-1.0711891767678148e-8,2.783684602254258e-5,-1.895885387153898e-5,-1.0719277613221644e-8,2.8306670586864564e-5,-1.8639334239086277e-5,-1.072766183557865e-8,2.8659855505782475e-5,-1.8258763113995928e-5,-1.073612159190717e-8,2.8885279659063856e-5,-1.7888184927921706e-5,-1.0743575505291491e-8,2.9009231738796605e-5,-1.7588764782654586e-5,-1.0749225136080199e-8,2.908000233439939e-5,-1.7393518711195572e-5,-1.0752864147570606e-8,2.914855079008243e-5,-1.7304111401313012e-5,-1.0754868997586099e-8,2.9254770735155143e-5,-1.7298721919266967e-5,-1.0755947029287413e-8,2.9421960148790195e-5,-1.73433769434448e-5,-1.0756840443938963e-8,2.9657262395368594e-5,-1.7401543433202763e-5,-1.075813349050785e-8,2.9954830790562838e-5,-1.7440335048629465e-5,-1.0760197584755174e-8,3.0299471035757358e-5,-1.7433879737981824e-5,-1.0763229561035464e-8,3.066988743140981e-5,-1.7365039408173015e-5,-1.0767308977273792e-8,3.104156445903691e-5,-1.7226340848682806e-5,-1.0772421289059723e-8,3.138958150404849e-5,-1.7020431608455362e-5,-1.0778433463519163e-8,3.169160978062888e-5,-1.67599800034654e-5,-1.0785050830896731e-8,3.193113385062856e-5,-1.6466649719056538e-5,-1.0791801522036606e-8,3.2100549457274216e-5,-1.6168735086317945e-5,-1.0798090040294278e-8,3.2203473041458363e-5,-1.5897357896149383e-5,-1.080332573716205e-8,3.225558795119785e-5,-1.568153341658853e-5,-1.0807089151843031e-8,3.2283527758016355e-5,-1.5542734995758057e-5,-1.0809272801144117e-8,3.232156973954858e-5,-1.548986537631878e-5,-1.0810136690642487e-8,3.24062788787755e-5,-1.551564386066977e-5,-1.0810253821627843E-08,3.256954672694955e-5,-1.5595319915829232e-5,-1.0810370807169095e-8,3.2830743045217534e-5,-1.5688646392023816e-5,-1.0811243374832355e-8,3.318930936264058e-5,-1.5746136030541182e-5,-1.0813499406816032e-8,3.362016828548337e-5,-1.572010074949781e-5,-1.0817540474292183e-8,3.4075238666891787e-5,-1.5579179787124913e-5,-1.0823450353064908e-8,3.449382518613816e-5,-1.532196370613026e-5,-1.0830892582439516e-8,3.482107455406541e-5,-1.498254328611866e-5,-1.0839063244369992e-8,3.502767239053273e-5,-1.4622079522363778e-5,-1.0846829814097262e-8,3.5120439857015004e-5,-1.4307820231652071e-5,-1.085309302508078e-8,3.51375862864246e-5,-1.4089687106817873e-5,-1.085719959088525e-8,3.513199200269295e-5,-1.3986345854532377e-5,-1.085914650566585e-8,3.51525500412995e-5,-1.3985560988209588e-5,-1.085947705163363e-8,3.523209339490654e-5,-1.4054646803086456e-5,-1.0858988747294016e-8,3.5384088933798624e-5,-1.4153334684894148e-5,-1.0858452300955869e-8,3.560538153213612e-5,-1.4243709791482467e-5,-1.0858457682387729e-8,3.5881218350812025e-5,-1.4295764431560704e-5,-1.0859389106431877e-8,3.619005612992247e-5,-1.4289538747822578e-5,-1.0861464399875234e-8,3.650727263331189e-5,-1.4215445163763979e-5,-1.0864770150441248e-8,3.680795793798622e-5,-1.4073968871802461e-5,-1.0869255064842456e-8,3.7069338849790505e-5,-1.3875233842953704e-5,-1.0874690311021376e-8,3.7273324238066565e-5,-1.3638322204225281e-5,-1.0880636211450608e-8,3.740935211446729e-5,-1.338984019635138e-5,-1.0886460859978193e-8,3.747723555199965e-5,-1.3161108246832657e-5,-1.0891439508632244e-8,3.748918890039127e-5,-1.2983612439641286e-5,-1.0894923864558378e-8,3.746992648426565e-5,-1.2882969889767162e-5,-1.0896531846094513e-8,3.745388166964016e-5,-1.2872486930655807e-5,-1.089628939077259e-8,3.7479301400060466e-5,-1.2948111531254483e-5,-1.089466332568615e-8,3.758006931596514e-5,-1.3086710784613064e-5,-1.0892467653005773e-8,3.7777099336497654e-5,-1.3248905734680901e-5,-1.0890674230236611e-8,3.807156828641263e-5,-1.3386503835473725e-5,-1.0890190192257392e-8,3.844207700891592e-5,-1.3453370708504295e-5,-1.0891659080748418e-8,3.8847217212184006e-5,-1.341755372714709e-5,-1.0895313751720727e-8,3.9234030267991595e-5,-1.3271607631699584e-5,-1.090089279363746e-8,3.955132226947631e-5,-1.3037539781839813e-5,-1.0907643242370493e-8,3.976462669241938e-5,-1.2763223288738137e-5,-1.0914452499003047e-8,3.9867493531828635e-5,-1.250952451713426e-5,-1.0920130006578416e-8,3.988372523989806e-5,-1.2331758085782543e-5,-1.0923768775661982e-8,3.9858740281902724e-5,-1.226291312067013e-5,-1.0925025267279314e-8,3.98438771345933e-5,-1.2305852412647015e-5,-1.0924174807119913e-8,3.988096864166715e-5,-1.2436775734862486e-5,-1.092193559817097e-8,3.9993234799773925e-5,-1.2616327199137168e-5,-1.0919186656117713e-8,4.0184029323987886e-5,-1.2802124998079611e-5,-1.0916728214422174e-8,4.0441034122307655e-5,-1.295806215039957e-5,-1.0915158387722742e-8,4.07423430323965e-5,-1.3059008181614689e-5,-1.0914851840032176e-8,4.106194258997215e-5,-1.309190696252388e-5,-1.0915982377055156e-8,4.137369026554492e-5,-1.305496471159586e-5,-1.0918538217819229e-8,4.165397699143815e-5,-1.295627528662622e-5,-1.0922312589289403e-8,4.188372567499801e-5,-1.281253335343146e-5,-1.0926886273075621e-8,4.205038798547874e-5,-1.2647779157268254e-5,-1.0931637253225023e-8,4.2150263329725885e-5,-1.2491600175957169e-5,-1.0935808929506866e-8,4.219089514943613e-5,-1.2376014975777942e-5,-1.0938645719799141e-8,4.219264556971658e-5,-1.2330443038611213e-5,-1.0939574041035733e-8,4.2187994684927e-5,-1.2374868917154073e-5,-1.0938381011529256e-8,4.221708942536862e-5,-1.251262722220375e-5,-1.0935330563847715e-8,4.2319148750577894e-5,-1.272563608677644e-5,-1.0931164753811414e-8,4.252146931834362e-5,-1.2975210570017808e-5,-1.0926967333923104e-8,4.282981205890698e-5,-1.3209939979367455e-5,-1.0923913734952636e-8,4.3224317253663856e-5,-1.3379021269503886e-5,-1.092296888156952e-8,4.3663191015489984e-5,-1.3446687017306154e-5,-1.0924616375420668e-8,4.40932553261884e-5,-1.3402692615521834e-5,-1.0928699864093918e-8,4.446391154055205e-5,-1.3265486287865059e-5,-1.0934436131087437e-8,4.4740262897078254e-5,-1.3077370375528966e-5,-1.0940609312170373e-8,4.491180449520049e-5,-1.2893262674070154e-5,-1.0945898968800855e-8,4.49944176700801e-5,-1.2766207079580588e-5,-1.0949239480507803e-8,4.502512200115446e-5,-1.273370298418019e-5,-1.0950092267772875e-8,4.505116850684658e-5,-1.2808910095088956e-5,-1.0948539845884595e-8,4.511705275984765e-5,-1.2979305349759284e-5,-1.0945188231944347e-8,4.5253768849291526e-5,-1.3212635289537497e-5,-1.0940942427650663e-8,4.547343858202198e-5,-1.3467274984818715e-5,-1.093675586758881e-8,4.576991139681106e-5,-1.370288962080165e-5,-1.0933437996680767e-8,4.6123562686564354e-5,-1.3888173614010929e-5,-1.0931552459312198e-8,4.6507586318521756e-5,-1.4004532581867268e-5,-1.0931388495325245e-8,4.689364295154041e-5,-1.404638935558007e-5,-1.0932970781736282e-8,4.725592017948633e-5,-1.401955872819049e-5,-1.0936077710211673e-8,4.7573669880768315e-5,-1.3939013934426217e-5,-1.0940262282537435e-8,4.783282623871706e-5,-1.3826794886489019e-5,-1.0944887017204275e-8,4.8027394648472436e-5,-1.3710116999369636e-5,-1.0949190756732851e-8,4.816102679731794e-5,-1.361918978051325e-5,-1.095239527820225e-8,4.824866180786038e-5,-1.3583965343721564e-5,-1.0953844774146032e-8,4.8317389669767263E-05,-1.3629077500997938e-5,-1.0953156144793383e-8,4.8404937665998705e-5,-1.3766894228811147e-5,-1.0950352515756894e-8,4.85539270343216e-5,-1.3990186698127629e-5,-1.094594628661613e-8,4.880120852726276e-5,-1.4267952993854126e-5,-1.0940929580088114e-8,4.9164604434804093e-5,-1.4548760923785778e-5,-1.0936627198037842e-8,4.963284107903462e-5,-1.4773613411439147e-5,-1.0934389782899522e-8,5.016508945338154e-5,-1.4894876338232566e-5,-1.0935178671721424e-8,5.070227547728938e-5,-1.4892932210451892e-5,-1.0939190020118924e-8,5.118560276541905e-5,-1.4782534477633037e-5,-1.0945713139716886e-8,5.157392379064546e-5,-1.4606625431828425e-5,-1.095332893238933e-8,5.185338963389235e-5,-1.4421810233716862e-5,-1.0960371481365232e-8,5.203770610741841e-5,-1.4282157086463557e-5,-1.0965440644733544e-8,5.216122418436789e-5,-1.422646572966351e-5,-1.0967760623641757e-8,5.226841451573015e-5,-1.4271353392898255e-5,-1.0967288706004566e-8,5.2402901302713924e-5,-1.4410350265664105e-5,-1.0964601820102489e-8,5.2598368352539667e-5,-1.4617978010402564e-5,-1.0960658830434025e-8,5.2872840342696726e-5,-1.4857176091440661e-5,-1.0956540629101209e-8,5.322704970841118e-5,-1.5088075305254894e-5,-1.0953236332976238e-8,5.364663492512684e-5,-1.5275993367745722e-5,-1.0951500603035131e-8,5.410696514106418e-5,-1.539698624027727e-5,-1.095178087382418e-8,5.457893133346143e-5,-1.5440298921740233e-5,-1.0954194761142424e-8,5.50342383558213e-5,-1.540806131983914e-5,-1.0958542424790509e-8,5.544932692850507e-5,-1.5313173657149106e-5,-1.096434545062792e-8,5.580777697902618e-5,-1.5176465955951547e-5,-1.0970910845978872e-8,5.610161114139606e-5,-1.502389729946295e-5,-1.0977420875607443e-8,5.633207828382777e-5,-1.4883981469539802e-5,-1.0983045974823884e-8,5.651030827952544e-5,-1.4785143953867945e-5,-1.0987069782932988e-8,5.6657843445042456E-05,-1.475241870537396e-5,-1.098900869828785e-8,5.68064043339674e-5,-1.480281230944594e-5,-1.0988713689162896e-8,5.6995445257911e-5,-1.493919710310919e-5,-1.0986451645489575e-8,5.726569833881333e-5,-1.5144085304198487e-5,-1.0982961665724738e-8,5.7647873217573626e-5,-1.537676462498628e-5,-1.097945336000276e-8,5.8148783022304093e-5,-1.5578618482013747e-5,-1.0977468969124607e-8,5.8741629395056166e-5,-1.5689303712884644e-5,-1.0978518978595156e-8,5.936880170599819e-5,-1.5669452550320848e-5,-1.0983516728908241e-8,5.995982222233368e-5,-1.5518212400740367e-5,-1.0992265385709335e-8,6.045655109961612e-5,-1.5274524989521094e-5,-1.100336461316192e-8,6.083213388443301e-5,-1.500128721893175e-5,-1.1014687824535179e-8,6.109517706905173e-5,-1.476232162248893e-5,-1.1024177858417426e-8,6.128078642644321e-5,-1.4603933293794295e-5,-1.1030515003487311e-8,6.14360565632286e-5,-1.4546623392676997e-5,-1.1033379525122147e-8,6.160676979381152e-5,-1.4585862441534919e-5,-1.1033325129027129e-8,6.182836446050053e-5,-1.4698115916188576e-5,-1.103144492460905e-8,6.212137962144658e-5,-1.4848716247797194e-5,-1.1029016395917635e-8,6.249043218855688e-5,-1.499957486442772e-5,-1.1027231651313366e-8,6.292575713367833e-5,-1.5115848315998846e-5,-1.1027035010884309e-8,6.340659244996193e-5,-1.5171078050374148e-5,-1.1029042575856415e-8,6.39057084276371e-5,-1.5150397168465046e-5,-1.1033511588368882e-8,6.439430170432664e-5,-1.5051632264841132e-5,-1.1040338007405747e-8,6.484651366485014e-5,-1.4884453987230887e-5,-1.1049078955669309e-8,6.524295871579131e-5,-1.4668006957840344e-5,-1.1059009733669053e-8,6.557293822920603e-5,-1.4427696477046931e-5,-1.106922243082436e-8,6.583546021894932e-5,-1.4191801641639522e-5,-1.1078757988711264e-8,6.603942429151922e-5,-1.3988227254888844e-5,-1.1086754263160646e-8,6.620324712438544e-5,-1.3841351539194972e-5,-1.1092584244638724e-8,6.635399675116738e-5,-1.376871069724712e-5,-1.1095960923446284e-8,6.652567539394843e-5,-1.377713360613599e-5,-1.1097002545640146e-8,6.675562941069513e-5,-1.3858317394900903e-5,-1.109626926494747e-8,6.707780774668518e-5,-1.3985038180359028e-5,-1.1094780789983727e-8,6.751241829499467e-5,-1.4110813964274978e-5,-1.1093985695546706e-8,6.805398404589733e-5,-1.4176969697956724e-5,-1.1095592658974113e-8,6.866384590550756e-5,-1.4129570457204582e-5,-1.1101140430408416e-8,6.927548828970987e-5,-1.3942193950697216e-5,-1.1111323602410547e-8,6.981586375490909e-5,-1.3632135932979031e-5,-1.1125409233657399e-8,7.023376113526364e-5,-1.3257268294156674e-5,-1.1141255562749935e-8,7.051856313032443e-5,-1.2893039413830864e-5,-1.1156102060587921e-8,7.06990864524921e-5,-1.2603544775620664e-5,-1.1167680283957444e-8,7.082667807448929e-5,-1.2422764469719474e-5,-1.1174960488599823e-8,7.095499623308146e-5,-1.2351727669469376e-5,-1.1178226969257668e-8,7.112590319904138e-5,-1.2366745927631601e-5,-1.1178667858819269e-8,7.136360199813396e-5,-1.2431038164156497e-5,-1.117783577309838e-8,7.167471562637514e-5,-1.2504825814492575e-5,-1.1177222677717251e-8,7.20513073116622e-5,-1.2552337068439892e-5,-1.1178022183958767e-8,7.247483939519828e-5,-1.2546082636510993e-5,-1.1181041603564716e-8,7.292025057925622e-5,-1.2469246626440453e-5,-1.1186692155499417e-8,7.335996924164086e-5,-1.2316707228409032e-5,-1.1195001134773114e-8,7.376777185043507e-5,-1.2094851223874839e-5,-1.1205627668886617e-8,7.41223204444516e-5,-1.1820215935622424e-5,-1.1217891224875756e-8,7.441008632046292e-5,-1.1516986111407657e-5,-1.1230839822596301e-8,7.462727595584035e-5,-1.121357421653002e-5,-1.1243374292470443e-8,7.478054238337684e-5,-1.0938760084437633e-5,-1.1254418929902535e-8,7.48865297826223e-5,-1.0717820966566956e-5,-1.1263107130437595e-8,7.497036903850236e-5,-1.0568904309436396e-5,-1.1268942299422062e-8,7.506321783824891e-5,-1.0499811842188604e-5,-1.1271900341615984e-8,7.519881869817697e-5,-1.0505257389349248e-5,-1.1272463646632064e-8,7.540869080999105e-5,-1.056479190521469e-5,-1.1271600290428743e-8,7.571546174872404e-5,-1.0642370424357846e-5,-1.1270700670162078e-8,7.61246291272292e-5,-1.0689513165947758e-5,-1.1271446895380041e-8,7.661678435223831e-5,-1.0654320433158899e-5,-1.1275546237460665e-8,7.71448147730922e-5,-1.0497201563490087e-5,-1.1284249952033519e-8,7.764205458950148e-5,-1.0209521680141907e-5,-1.1297711821998253e-8,7.804347387462571e-5,-9.824875614952504e-6,-1.1314530735816466e-8,7.831185681715099e-5,-9.411967862924406e-6,-1.133196933848187e-8,7.84533388443129e-5,-9.048847109690942e-6,-1.134696307423481e-8,7.851205357156255e-5,-8.792740654590127e-6,-1.1357361358067248e-8,7.854866512846068e-5,-8.662856311024963e-6,-1.1362623719687482e-8,7.861729582289454e-5,-8.642245361453145e-6,-1.1363680031735883e-8,7.875197622822127e-5,-8.691794929389404e-6,-1.1362277223349593e-8,7.896418283479847e-5,-8.765841602924702e-6,-1.1360297098831838e-8,7.924709191886245e-5,-8.823284793479496e-6,-1.1359315593534433e-8,7.95818503140842e-5,-8.833269852576455e-6,-1.1360426738010168e-8,7.994322616848324e-5,-8.777041367256928e-6,-1.1364233495034238e-8,8.030394161526125e-5,-8.647855079034407e-6,-1.1370898907447606e-8,8.063800618353983e-5,-8.450099063104403e-6,-1.13801913797548e-8,8.092351739561471e-5,-8.197986994855086e-6,-1.139151507594174e-8,8.114517708580553e-5,-7.913748681025796e-6,-1.1403947928868321e-8,8.129649091610874e-5,-7.625053643838189e-6,-1.1416325803923466e-8,8.13812925714093e-5,-7.361498470228608e-6,-1.1427396960663914e-8,8.141408671042445e-5,-7.150374877007221e-6,-1.143603391639288e-8,8.141887617018724e-5,-7.012246466696308e-6,-1.1441458496670813e-8,8.142639354204631e-5,-6.9569547070524565e-6,-1.1443423882852663e-8,8.146989071188947e-5,-6.980733178277085e-6,-1.1442305223764873e-8,8.157988588747373e-5,-7.0650386142183395e-6,-1.1439079612900346e-8,8.177834068751832e-5,-7.177494714956207e-6,-1.1435206339439226e-8,8.207274310460953e-5,-7.275416748518267e-6,-1.1432431508335396e-8,8.24510452990543e-5,-7.312655501458012e-6,-1.1432513684254343e-8,8.287939415777408e-5,-7.250137973215447e-6,-1.14368513607406e-8,8.330545375814392e-5,-7.068926237825051e-6,-1.1446018896562171e-8,8.366980628525399e-5,-6.781801504635946e-6,-1.1459328098698728e-8,8.392475651610919e-5,-6.436424280153653e-6,-1.147469615909485e-8,8.405365240588183e-5,-6.103856380286995e-6,-1.1489120917511639e-8,8.407948845031888e-5,-5.853970011362507e-6,-1.1499731792143241e-8,8.405583920133282e-5,-5.729599983451548e-6,-1.1504887252346792e-8,8.404479026302159e-5,-5.733734864168806e-6,-1.1504668019600196e-8,8.409487550610288e-5,-5.8348805222652595e-6,-1.1500567610929476e-8,8.422953279231353e-5,-5.983832090974439e-6,-1.1494726575699467e-8,8.44475135877195e-5,-6.130958240035688e-6,-1.1489203384318796e-8,8.473016954110671e-5,-6.237308506807428e-6,-1.1485549198160168e-8,8.504997460131159e-5,-6.278822698858891e-6,-1.1484684339034437e-8,8.537722202659041e-5,-6.24604350020151e-6,-1.1486947837148801e-8,8.56843216611937e-5,-6.141962433049987e-6,-1.149219497561945e-8,8.594839135529726e-5,-5.979584647913548e-6,-1.1499878642207251e-8,8.615303700245352e-5,-5.7797022876110846e-6,-1.1509108282661373e-8,8.628989016331793e-5,-5.568700527437504e-6,-1.1518717192858226e-8,8.636003840534361e-5,-5.3759285752394796e-6,-1.1527377565087991e-8,8.637502793286532e-5,-5.230188533993722e-6,-1.1533784620290696e-8,8.635675385529202e-5,-5.155286769746592e-6,-1.1536897415011626e-8,8.63355224875678e-5,-5.165182714998419e-6,-1.1536184302568082e-8,8.634591892159362e-5,-5.259775561616308e-6,-1.1531803962477889e-8,8.642073115040163e-5,-5.4226586174864975e-6,-1.152465872996433e-8,8.65839351077441e-5,-5.622046886179956e-6,-1.1516287597576716e-8,8.684430755827092e-5,-5.8153923203604484e-6,-1.1508609070013934e-8,8.719130249188195e-5,-5.95728092691672e-6,-1.1503558232602766e-8,8.759455242721197e-5,-6.009491974966764e-6,-1.150267039330855e-8,8.800800850055604e-5,-5.95147211987009e-6,-1.1506668360848453e-8,8.837913286366379e-5,-5.7886627769627485e-6,-1.1515138637633855e-8,8.866225574551908e-5,-5.555373933240397e-6,-1.1526431984484355e-8,8.883301404506053e-5,-5.309063543337344e-6,-1.1537937388838975e-8,8.889840023466499e-5,-5.115164449411993e-6,-1.1546777723907165e-8,8.889656623832367e-5,-5.026383401286591e-6,-1.1550737585091733e-8,8.888441107440784e-5,-5.065123260574208e-6,-1.154900893343037e-8,8.891787950494431e-5,-5.21765631045529e-6,-1.1542374452129857e-8,8.903443511633252e-5,-5.442337151279303e-6,-1.1532775965427147e-8,8.924516874443352e-5,-5.686194762207577e-6,-1.1522563607641413e-8,8.953744138069596e-5,-5.90108623252899e-6,-1.1513813593362013e-8,8.988360538093972e-5,-6.053558073616242e-6,-1.1507938669655695e-8,9.025045498071756e-5,-6.127657333921901e-6,-1.1505594789433005e-8,9.06062942791196e-5,-6.123105910016481e-6,-1.1506768232466762e-8,9.092503624012695e-5,-6.051676523403866e-6,-1.1510921388865986e-8,9.118813404710323e-5,-5.933591903961702e-6,-1.1517128603869335e-8,9.138545565664259e-5,-5.794575433039127e-6,-1.1524189430321015e-8,9.151591271894805e-5,-5.66334449111308e-6,-1.1530742462923101e-8,9.158811085003475e-5,-5.568946066028995e-6,-1.1535410442970295e-8,9.162072310193748e-5,-5.537335450390624e-6,-1.1536995250412474e-8,9.164182458652515e-5,-5.58694690455087e-6,-1.1534711584048976e-8,9.168620213239225e-5,-5.723696108466005e-6,-1.152841879943091e-8,9.178992959661302e-5,-5.936777568263604e-6,-1.1518779345972147e-8,9.198249027190544e-5,-6.197337314678204e-6,-1.1507263760530225e-8,9.227820821065515e-5,-6.461935833751877e-6,-1.1495944136778205e-8,9.266993147833276e-5,-6.6812950165578724e-6,-1.1487076652143873e-8,9.31278874804674e-5,-6.8125918600802576e-6,-1.1482550916430714e-8,9.360510332344588e-5,-6.831677883244499e-6,-1.1483350519634967e-8,9.404841563306238e-5,-6.741163582188049e-6,-1.1489195433374426e-8,9.441208477567966e-5,-6.57151688468949e-6,-1.1498505989231926e-8,9.467017588287623e-5,-6.374429642810231e-6,-1.1508741618074349e-8,9.482411049793587e-5,-6.20983930092064e-6,-1.1517053215341923e-8,9.490280063124226e-5,-6.12986333255191e-6,-1.1521069363394867e-8,9.49546446025167e-5,-6.164351503798526e-6,-1.1519561592846616e-8,9.503343971679581e-5,-6.312991752990002e-6,-1.1512751366586703e-8,9.518296893644879e-5,-6.546957614728857e-6,-1.1502154648514587e-8,9.54258618892581e-5,-6.819249442704191e-6,-1.1490053068776307e-8,9.576033063758811e-5,-7.079181183195936e-6,-1.147882172959562e-8,9.616458460450145e-5,-7.285251177458946e-6,-1.1470361003639736e-8,9.660557779129375e-5,-7.412533789784719e-6,-1.1465779950685564e-8,9.70480253349657e-5,-7.454061673847203e-6,-1.1465342600263835e-8,9.746107955264904e-5,-7.418094434670623e-6,-1.1468592015480105e-8,9.782204348641294e-5,-7.323724614127018e-6,-1.1474549309030842e-8,9.811778004559563e-5,-7.196576837891347e-6,-1.1481914889362466e-8,9.834488254743438e-5,-7.065336659585935e-6,-1.1489242896633806e-8,9.85094970832235e-5,-6.958985648334306e-6,-1.1495095179541215e-8,9.862717385640469e-5,-6.90413645241066e-6,-1.1498196338733799e-8,9.8722513616579e-5,-6.921815594705209e-6,-1.1497607920369037e-8,9.882784972662761e-5,-7.023345607949021e-6,-1.1492923262731212e-8,9.897986411696639e-5,-7.205665995436498e-6,-1.148446098537155e-8,9.921318771121227e-5,-7.447586546246423e-6,-1.1473395307025696e-8,9.955120060763667e-5,-7.709619295232465e-6,-1.146172404791077e-8,9.999642762624879e-5,-7.940035443749168e-6,-1.1451968869426325e-8,1.0052494732063333e-4,-8.087647613726074e-6,-1.1446579632065744e-8,1.0108913471724907e-4,-8.117933472199266e-6,-1.1447169892722494e-8,1.016297505105532e-4,-8.025879558080473e-6,-1.1453875399227287e-8,1.0209339869072522e-4,-7.839290063002508e-6,-1.1465163461608666e-8,1.0244827762320929e-4,-7.610760831100816e-6,-1.1478236898852096e-8,1.0269227243374284e-4,-7.4019405703705335e-6,-1.1489879553959839e-8,1.0285149371859283e-4,-7.266368505272329e-6,-1.1497391887392736e-8,1.0297118136782965e-4,-7.236336161787715e-6,-1.1499280042755185e-8,1.0310270675950262e-4,-7.316726316035047e-6,-1.1495523318503002e-8,1.0329056362595021e-4,-7.486349598341804e-6,-1.148742159707798e-8,1.0356255453322497e-4,-7.705430672579288e-6,-1.1477144225777614e-8,1.0392519544575366e-4,-7.926623660176716e-6,-1.1467147125266295e-8,1.0436481553339658e-4,-8.106347722194308e-6,-1.1459615835618466e-8,1.048532139215313e-4,-8.213492770649762e-6,-1.1456056721422704e-8,1.0535556460250918e-4,-8.23373787288498e-6,-1.1457100913129077e-8,1.0583805546501133e-4,-8.169439622731186e-6,-1.1462518463608636e-8,1.0627352735391126e-4,-8.036400609196678e-6,-1.1471385560392026e-8,1.066445607363988e-4,-7.859266130393587e-6,-1.1482325768957206e-8,1.0694441306334356e-4,-7.666977342055716e-6,-1.1493758257334187e-8,1.0717666268625118e-4,-7.489017281889044e-6,-1.1504111986789331e-8,1.0735435490295485e-4,-7.35244966639261e-6,-1.1511999323604564e-8,1.0749903983642938e-4,-7.2792806829164845e-6,-1.1516363131548234e-8,1.0763957831135115e-4,-7.283580274524651e-6,-1.151661702847303e-8,1.0781007680501017e-4,-7.368012685883945e-6,-1.1512793302970118e-8,1.0804590054700001e-4,-7.520061810504988e-6,-1.1505692043057436e-8,1.0837680611466255e-4,-7.709425069854278e-6,-1.1496977420176755e-8,1.0881740161785823e-4,-7.889347522041987e-6,-1.1489103221812277e-8,1.0935759791410143e-4,-8.004876957400208e-6,-1.1484917776821892e-8,1.099584343313986e-4,-8.008601428695032e-6,-1.1486882532745956e-8,1.1055881062444225e-4,-7.879155597116695e-6,-1.1496092004950944e-8,1.1109371258594231e-4,-7.633039843956237e-6,-1.1511581608136922E-08,1.1151663459051103e-4,-7.321605202687162e-6,-1.1530431309502565e-8,1.1181492903404441e-4,-7.013454241810893e-6,-1.1548741122352925e-8,1.1201106022014476e-4,-6.771340174468865e-6,-1.1562985724005811e-8,1.1215140197415839e-4,-6.634405209780007e-6,-1.1571068149846324e-8,1.1228984212495073e-4,-6.611278102413541e-6,-1.1572697123814852e-8,1.1247315925664164e-4,-6.6831267112462406e-6,-1.1569144942454731e-8,1.127316993096942e-4,-6.812598750203812e-6,-1.156266778319374e-8,1.1307579932787652e-4,-6.954602663343077e-6,-1.1555859496188551e-8,1.1349688400417341e-4,-7.066217820959545e-6,-1.1551101049908461e-8,1.139717903089487e-4,-7.114299397794903e-6,-1.1550167056351804e-8,1.1446891416054345e-4,-7.080077937874377e-6,-1.1554002562827165e-8,1.149548174283551e-4,-6.960537575809596e-6,-1.1562667346861427e-8,1.1540007923220339e-4,-6.766933444370123e-6,-1.1575426285469924e-8,1.1578354861211906e-4,-6.521295786051894e-6,-1.1590947546989276e-8,1.1609463410885247e-4,-6.2519478086589645e-6,-1.160756007562344e-8,1.1633376296363593e-4,-5.989012039941205e-6,-1.1623518348194946e-8,1.1651156393922294e-4,-5.760573051355079e-6,-1.1637234212047214e-8,1.1664740182339614e-4,-5.589622358594828e-6,-1.1647459659802337e-8,1.1676759334021895e-4,-5.4915067272458905e-6,-1.1653428976732367e-8,1.1690326783015823e-4,-5.471531648050538e-6,-1.1654974611229112e-8,1.1708746557034123e-4,-5.5225030012895636e-6,-1.1652632718742514e-8,1.1735068033667883e-4,-5.622479874781477e-6,-1.1647735276380047e-8,1.1771412944112854e-4,-5.734062550996382e-6,-1.1642435438662262e-8,1.1818113725851937e-4,-5.8076621481172495e-6,-1.163954187668793e-8,1.1872926880585935e-4,-5.791344442245663e-6,-1.1642004245374285e-8,1.1930855430309953e-4,-5.647553044674574e-6,-1.1651984086518556e-8,1.1985155215788543e-4,-5.371443175151925e-6,-1.1669760410394222e-8,1.2029547121095116e-4,-4.99995084485974e-6,-1.1693115291372944e-8,1.2060678781026997e-4,-4.6024408688642385e-6,-1.1717833613867049e-8,1.2079400904598451e-4,-4.255199093046226e-6,-1.173926368756903e-8,1.2090126966665237e-4,-4.0137842781003e-6,-1.1754062382778059e-8,1.2098843584166365e-4,-3.897678566972292e-6,-1.176115704922468e-8,1.2111008984554611e-4,-3.891400665164609e-6,-1.1761637208694449e-8,1.213022496940009e-4,-3.95630760713687e-6,-1.1757971241563372e-8,1.2157839399120963e-4,-4.044896229076136e-6,-1.1753097167220337e-8,1.2193195516922581e-4,-4.112420305157807e-6,-1.1749718015863004e-8,1.2234182152848596e-4,-4.124267718560327e-6,-1.174987984666976e-8,1.227785275255919e-4,-4.059624660286843e-6,-1.1754780294877045e-8,1.2321007408265877e-4,-3.9124489345179326e-6,-1.1764728817057517e-8,1.2360698042256985e-4,-3.6904598768444323e-6,-1.1779212189448352e-8,1.2394631226203136e-4,-3.4126109266878824e-6,-1.1797041115608418e-8,1.242144823774108e-4,-3.1055077065965403e-6,-1.1816559520484416e-8,1.2440867826661164e-4,-2.799226073876711e-6,-1.1835897138338729e-8,1.2453685337986063e-4,-2.523031477587932e-6,-1.1853238148010125e-8,1.2461646512564885e-4,-2.301547896694e-6,-1.186706784611472e-8,1.2467235994619418e-4,-2.1516861724259745e-6,-1.1876371614580685e-8,1.2473410454800834e-4,-2.0803083645591164e-6,-1.1880779589050701e-8,1.2483283115915695e-4,-2.0825349597226646e-6,-1.1880660082478308e-8,1.2499748069359724e-4,-2.14069314709482e-6,-1.1877165836353078e-8,1.2525010295091812e-4,-2.2241823656063393e-6,-1.1872226457607199e-8,1.2559995192754653e-4,-2.2912602137460035e-6,-1.1868437590207958e-8,1.2603705811992328e-4,-2.2945068883105327e-6,-1.1868742828901586e-8,1.2652772420829495e-4,-2.191539426597471e-6,-1.1875794007561012e-8,1.2701630641300356e-4,-1.9604423994929207e-6,-1.1890987874401511e-8,1.2743771444703272e-4,-1.6147035257241735e-6,-1.1913481241468902e-8,1.2774003479321577e-4,-1.2075860053489198e-6,-1.1939854087612531e-8,1.2790733523272295e-4,-8.17705683285339e-7,-1.1965019553764724e-8,1.279679628288094e-4,-5.194673008425952e-7,-1.1984174542305361e-8,1.279816584662349e-4,-3.5470155045429583e-7,-1.1994671485721905e-8,1.280138942373341e-4,-3.2155917529888203e-7,-1.1996712018024326e-8,1.2811314916667707e-4,-3.832848611376374e-7,-1.1992721904466058e-8,1.2830082617175774e-4,-4.869902782138533e-7,-1.198611016092719e-8,1.2857305116365837e-4,-5.810461096132203e-7,-1.1980164163535222E-08,1.289084172136336e-4,-6.257202090277428e-7,-1.197740043466469e-8,1.2927653296285668e-4,-5.972525154990381e-7,-1.1979329944634138e-8,1.2964491995966202e-4,-4.877474608997493e-7,-1.1986472365228349e-8,1.2998387075651414e-4,-3.031311612369654e-7,-1.1998477370081351e-8,1.3026979244258862e-4,-6.038288953220458e-8,-1.2014282732417834e-8,1.3048752957989842e-4,2.1562191863560383e-7,-1.2032296857404085e-8,1.3063183983413705e-4,4.956069602951913e-7,-1.2050612633462722e-8,1.3070798712429174e-4,7.49696777087375e-7,-1.2067254493324593e-8,1.3073127127371782e-4,9.513984761652111e-7,-1.2080450782354818e-8,1.3072533232997706e-4,1.0813761032640532e-6,-1.2088898078971734e-8,1.3071932425519906e-4,1.1305045965556356e-6,-1.2091976791290884e-8,1.3074424349902703e-4,1.1018477731859764e-6,-1.2089887050399828e-8,1.3082870101893535e-4,1.0113362985932872e-6,-1.2083690937629776e-8,1.3099441618179766e-4,8.869501908669666e-7,-1.2075251931326807e-8,1.3125168068481923e-4,7.662116754938402e-7,-1.2067066918911372e-8,1.3159510738595574e-4,6.915586905267705e-7,-1.2061965515433264e-8,1.3200056820097142e-4,7.028841658829567e-7,-1.2062624571151364e-8,1.3242528918228636e-4,8.270198550287169e-7,-1.2070869118686841e-8,1.3281385380364976e-4,1.0657937989025924e-6,-1.2086852795495238e-8,1.3311208615874337e-4,1.3873940278361398e-6,-1.2108442324416934e-8,1.3328674475046086e-4,1.728378788589479e-6,-1.2131335420364398e-8,1.333423026531807e-4,2.011359960326922e-6,-1.2150284217646462e-8,1.333230859574093e-4,2.173641367897251e-6,-1.2161076558038903e-8,1.3329628509418603e-4,2.1916886718834704e-6,-1.2162183678561086e-8,1.3332488742110422e-4,2.0869799011873835e-6,-1.2155091872515184e-8,1.3344631607287334e-4,1.9118834458728775e-6,-1.214330168860428e-8,1.3366614959370036e-4,1.7270017762180142e-6,-1.213081977253317e-8,1.339647660819936e-4,1.5827822630531564e-6,-1.2120978054806648e-8,1.3430900171919165e-4,1.5107505188582636e-6,-1.2115885232530696e-8,1.346625507586368e-4,1.5227555156633589e-6,-1.2116379839448163e-8,1.3499278908367805e-4,1.6143357752029857e-6,-1.2122232655650623e-8,1.352743630890875e-4,1.7691319425712106e-6,-1.2132411706736463e-8,1.3549082147805045e-4,1.9628976716705375e-6,-1.214532559179744e-8,1.3563536205606977e-4,2.1669414090184472e-6,-1.2159041601093816e-8,1.3571114539193986e-4,2.3513531864422336e-6,-1.2171504657912729e-8,1.3573115122892719e-4,2.488365757099318e-6,-1.218077928907646e-8,1.3571726302195615e-4,2.555989521491244e-6,-1.2185316078541546e-8,1.3569814446294577e-4,2.5416602671032738e-6,-1.2184217684665625e-8,1.3570568585111713e-4,2.4452206623935392e-6,-1.2177449976565543e-8,1.3577024230789847e-4,2.280427964073108e-6,-1.216594442676682e-8,1.3591527737192273e-4,2.0743135607314645e-6,-1.2151550454018783e-8,1.361522991152803e-4,1.8640121265254014e-6,-1.213681987513195e-8,1.3647708727637718e-4,1.6911483786144465e-6,-1.2124630980449703e-8,1.3686810998498884e-4,1.5943000966245994e-6,-1.211767957644585e-8,1.3728794824521178e-4,1.6002951590033876e-6,-1.2117875538135754e-8,1.376885995265603e-4,1.715563961241601e-6,-1.2125719871977474e-8,1.380212492054774e-4,1.9198116421548985e-6,-1.2139827416802713e-8,1.3824979653251647e-4,2.16545754172393e-6,-1.2156862702966804e-8,1.3836476748777283e-4,2.3863798766054845e-6,-1.2172165361997345e-8,1.3839118089512586e-4,2.516681597723158e-6,-1.2181109204786456e-8,1.383836958661086e-4,2.5139173425388923e-6,-1.2180756018019766e-8,1.3840809682379775e-4,2.3754960365028225e-6,-1.2170971847677191e-8,1.3851731397930713e-4,2.1385549249810985e-6,-1.2154358737266609e-8,1.387345180742526e-4,1.8635150257748393e-6,-1.2135089041809021e-8,0.00013905061657867654,1.6115027181214983e-6,-1.21173713319074e-8,1.3943376606727773e-4,1.4271981388203693e-6,-1.2104305360794658e-8,1.3984300364040437e-4,1.3321511005655048e-6,-1.2097427842395805e-8,1.4023941764179271e-4,1.3266107575433846e-6,-1.2096814698533307e-8,1.4059252722173118e-4,1.3952876797859035e-6,-1.2101447432625885e-8,1.4088264636512158e-4,1.5134604515907064e-6,-1.2109616882522158e-8,1.4110100645417162e-4,1.651840139911393e-6,-1.211925900245617e-8,1.4124909369002032e-4,1.780117071596497e-6,-1.212821380203447e-8,1.41337902381737e-4,1.8698047521882043e-6,-1.2134441476175163e-8,1.413871243968482e-4,1.897057213198281e-6,-1.2136236886680415e-8,1.4142383018431504e-4,1.845841427761066e-6,-1.2132461012287831e-8,1.4147997719204125e-4,1.7113175489430788e-6,-1.2122777537746821e-8,1.4158823504138685e-4,1.502646517645388e-6,-1.2107840476713205e-8,1.4177619737628733e-4,1.2439767012537168e-6,-1.2089354094720186e-8,1.420599003828967e-4,9.723315462248096e-7,-1.206992596215161e-8,1.4243837480090518e-4,7.317359454874271e-7,-1.205266945550483e-8,1.428912639706557e-4,5.641719353741576e-7,-1.2040586686537376e-8,1.4338097885540922e-4,4.993306811954009e-7,-1.2035847099509482e-8,1.4385960277296563e-4,5.458783176763343e-7,-1.2039139663143369e-8,1.4427940471458366e-4,6.868122641353136e-7,-1.2049291370737595e-8,1.4460478846783334e-4,8.807411239238364e-7,-1.2063317321420302e-8,1.4482281559751307e-4,1.069839105541091e-6,-1.2076991054963683e-8,0.00014494904837242869,1.1937309248725323e-6,-1.2085887289049307e-8,1.4502568900064648e-4,1.2064426101944527e-6,-1.208665562177113e-8,1.4511070047506638e-4,1.0911379333922037e-6,-1.2078100163221958e-8,1.4526028585175462e-4,8.663198283372468e-7,-1.2061600256805915e-8,1.4551122674497707e-4,5.797058648325919e-7,-1.204063541031233e-8,1.45870714182893e-4,2.919007977922922e-7,-1.2019605889673682e-8,1.4631756661427476e-4,5.7383281304037876e-8,-1.2002481688680475e-8,1.4681257082234934e-4,-8.908235910099019e-8,-1.199182771411262e-8,1.4731178048653533e-4,-1.3681974382092278e-7,-1.1988462719314775e-8,1.4777718123388823e-4,-9.589928020150776e-8,-1.1991666707489123e-8,1.4818241807458256e-4,9.827970495226143e-9,-1.1999669866292774e-8,1.4851424057603252e-4,1.4975826284681487e-7,-1.2010174857616424e-8,1.4877150780700368e-4,2.9190903564939884e-7,-1.2020776035974408e-8,1.4896338718739874e-4,4.064988238931833e-7,-1.2029249027716422e-8,1.491076446423247e-4,4.6841038637613003e-7,-1.2033745868534184e-8,1.4922916257107874e-4,4.5938546572257956e-7,-1.2032953779941988e-8,1.493582247095228e-4,3.705242197180493e-7,-1.2026262139108474e-8,1.4952777954767635e-4,2.051005400277564e-7,-1.2013946805018194e-8,1.4976894050346446e-4,-1.904479417246828e-8,-1.19973299130609e-8,1.5010454947427974e-4,-2.6906541765304796e-7,-1.1978814248321542e-8,1.5054183504320976e-4,-5.005400438808663e-7,-1.1961656886072548e-8,1.510667193509588e-4,-6.659267765992611e-7,-1.1949384554955782e-8,1.5164312623254563e-4,-7.269820831206918e-7,-1.1944897119523432e-8,1.5221953156980696e-4,-6.673181911368249e-7,-1.1949511382214759e-8,1.5274192731700445e-4,-4.998737686083151e-7,-1.1962335916114308e-8,1.5316902981055573e-4,-2.655106490847173e-7,-1.198030645635063e-8,1.5348421088217352e-4,-2.266891378647792e-8,-1.1998944827432675e-8,1.537000877768807e-4,1.6834438575237464e-7,-1.2013585861232607e-8,1.538547110431581e-4,2.613132906223005e-7,-1.2020649305678164e-8,1.5400096519828458e-4,2.3581112219275996e-7,-1.2018566303697278e-8,1.5419235863208593e-4,1.0173672189554832e-7,-1.2008120314198619e-8,1.5446908544374386e-4,-1.043344103221339e-7,-1.1992147545698048e-8,1.548482390991489e-4,-3.2985719788034745e-7,-1.1974709621771796e-8,1.5532098094650596e-4,-5.207662508907146e-7,-1.1959996690102956e-8,1.5585716932915963e-4,-6.350241871756243e-7,-1.1951293605787887e-8,1.5641522266013897e-4,-6.511187991959759e-7,-1.1950307300835039e-8,1.569532769257661e-4,-5.697016549164902e-7,-1.1957005001839564e-8,1.5743798528095797e-4,-4.09469379855435e-7,-1.1969906863521253e-8,1.5784917981561064e-4,-2.0015710169451744e-7,-1.1986632887038163e-8,1.5818066995231428e-4,2.4528128874972442e-8,-1.2004482272335572e-8,1.584385964221662e-4,2.3238212408654543e-7,-1.2020894960770384e-8,1.5863886107822444e-4,3.9624199560292434e-7,-1.2033748244121223e-8,1.588046247824748e-4,4.961257588820515e-7,-1.2041519855910776e-8,1.5896414577085214e-4,5.208075434900433e-7,-1.2043387212766305e-8,1.5914861628490783e-4,4.6946391491526275e-7,-1.2039325589190074e-8,1.5938926955830503e-4,3.53541008361074e-7,-1.2030232908600866e-8,1.5971294009466412e-4,1.982741610365036e-7,-1.2018050074089633e-8,1.601357000258253e-4,4.2346553631336995e-8,-1.2005764507559371e-8,1.6065547610377416e-4,-6.653262914643824e-8,-1.199711354071502e-8,1.6124655500583345e-4,-8.178371801242496e-8,-1.1995829366236498e-8,1.618604147678731e-4,2.7237558855628032e-8,-1.200446695222325e-8,1.624361983654284e-4,2.6113543526894443e-7,-1.2023214939678597e-8,1.6291924082183584e-4,5.850389636777833e-7,-1.2049358081100115e-8,1.6328002909722807e-4,9.37029053897171e-7,-1.2077889657121621e-8,1.6352419934365228e-4,1.2479123374621913e-6,-1.2103126439366304e-8,1.6368904604779273e-4,1.4631281062483648e-6,-1.2120552485357369e-8,1.6382956183236765e-4,1.557395384432055e-6,-1.2128060940280816e-8,1.6400122926582002e-4,1.5381144862877748e-6,-1.2126239058948575e-8,1.6424588726093894e-4,1.439208355081074e-6,-1.2117853915445577e-8,1.6458370748174056e-4,1.3096328102448778e-6,-1.2106913755361764e-8,1.6501154402339606e-4,1.200644338827852e-6,-1.2097641160415495e-8,1.6550648589063686e-4,1.1547586852730628e-6,-1.2093577694547275e-8,1.6603290776267415e-4,1.198176070928625e-6,-1.209694831318382e-8,1.665511035023388e-4,1.3375614745420673e-6,-1.2108362039271342e-8,1.6702550418416318e-4,1.5612138983333382e-6,-1.2126873437650308e-8,1.674307780932752e-4,1.8436692523999273e-6,-1.2150349328123835e-8,1.677549195800197e-4,2.152050182706575e-6,-1.2176009110305286e-8,1.6799940801179606e-4,2.4524165413076667e-6,-1.2200981766056503e-8,1.6817724583540448e-4,2.7148658232038214e-6,-1.2222754118217347e-8,1.683099873280913e-4,2.9168866968960664e-6,-1.2239454785978735e-8,1.6842467146592558e-4,3.0452180407235236e-6,-1.224999322944638e-8,1.6855102695086848e-4,3.0968539557096263e-6,-1.2254119042353992e-8,1.6871880126855085e-4,3.079744230574199e-6,-1.2252464324778996e-8,1.6895472067160068e-4,3.0133940896606534e-6,-1.2246598903420829e-8,1.6927840464195295e-4,2.9289893043908684e-6,-1.2239070910506032e-8,1.6969685867088022e-4,2.8677904600524987e-6,-1.2233319274918822e-8,1.7019831718506845e-4,2.875824828445984e-6,-1.2233272151029017e-8,1.7074810284391787e-4,2.993272269193482e-6,-1.224246480019927e-8,1.7129098425295404e-4,3.2394101336393448e-6,-1.2262719249205929e-8,1.7176398102373194e-4,3.5987654038797006e-6,-1.2292867630372567e-8,1.7211809981800891e-4,4.018086806079489e-6,-1.2328398800877828e-8,1.723391427347796e-4,4.420818917734477e-6,-1.2362681188303285e-8,1.7245473153053103e-4,4.734662467285292e-6,-1.2389396409868513e-8,1.7252252726735316e-4,4.917578549027333e-6,-1.2404843785782865e-8,1.726071540897258e-4,4.968749604148368e-6,-1.2408893192054333e-8,1.727589046978858e-4,4.9221724964740185e-6,-1.2404411962237101e-8,1.7300260344177033e-4,4.83048076677902e-6,-1.2395876284086118e-8,1.7333699122422784e-4,4.748210739532242e-6,-1.2387966354953343e-8,1.7374060169450008e-4,4.719717242328655e-6,-1.2384556320964524e-8,1.7417998643729247e-4,4.77276442662093e-6,-1.2388155529251713e-8,1.7461775716833916e-4,4.916710446013261e-6,-1.2399710045232228e-8,1.7501937203030822e-4,5.1438468128633355e-6,-1.24186647572412e-8,1.7535828951289732e-4,5.432860035887848e-6,-1.2443225854658522e-8,1.756192629618798e-4,5.753664444472852e-6,-1.247077258016822e-8,1.7579965373443565e-4,6.07283129609336e-6,-1.249834752183416e-8,1.7590884946030766e-4,6.358829228718526e-6,-1.2523139875377372e-8,1.759661130968674e-4,6.586381943570775e-6,-1.2542883039875933e-8,1.759974500115724e-4,6.739459298134962e-6,-1.2556116611078232e-8,1.760321637278397e-4,6.812845618154416e-6,-1.2562313354106072e-8,1.7609950601134763e-4,6.812603660833107e-6,-1.2561914546371991e-8,1.7622548831381987e-4,6.755770295736606e-6,-1.2556315384687489e-8,1.7642970412317874e-4,6.669448359319251e-6,-1.2547819558221092e-8,1.7672181959903853e-4,6.589129298634931e-6,-1.2539538164845853e-8,1.7709754531837021e-4,6.555409184978373e-6,-1.253513882005936e-8,1.7753484841258758e-4,6.6077367992058346e-6,-1.2538298544744623e-8,1.7799261074736457e-4,6.774298835042637e-6,-1.2551762208519981e-8,1.7841520147040621e-4,7.059131678797954e-6,-1.2576102085454612e-8,1.7874610453487877e-4,7.431432411420299e-6,-1.2608660039097732e-8,1.7894917443968755e-4,7.825953175386766e-6,-1.264353962001558e-8,1.7902774380033063e-4,8.161207083206408e-6,-1.2673296174765145e-8,1.790278108183074e-4,8.37057801926549e-6,-1.2691829535203863e-8,1.7902000252517539e-4,8.429111940731165e-6,-1.2696822098010562e-8,1.7907052731275117e-4,8.359865779353108e-6,-1.2690259514578959e-8,1.792184376056174e-4,8.218710920752939e-6,-1.2677033409507345e-8,1.7946899122588982e-4,8.070217272528202e-6,-1.2662824877992331e-8,1.798005516314884e-4,7.968098174834111e-6,-1.2652431102927129e-8,1.8017678902342154e-4,7.945639373964074e-6,-1.2648941656457344e-8,1.8055783018827178e-4,8.014489469180937e-6,-1.2653594995131369e-8,1.809079743025977e-4,8.167991049630246e-6,-1.2666002492302427e-8,1.8120015594670137e-4,8.386055770599257e-6,-1.2684515636010646e-8,1.81418169137406e-4,8.640136272423779e-6,-1.2706635648062213e-8,1.8155745362714864e-4,8.897929471115659e-6,-1.2729437938407207e-8,1.816247890930127e-4,9.127778918254038e-6,-1.2749994232411722e-8,1.8163698371062952e-4,9.302709168045539e-6,-1.2765766433492419e-8,1.8161856182727902e-4,9.403888438419948e-6,-1.2774938041748913e-8,1.815985642893323e-4,9.423138551089404e-6,-1.2776645313126941e-8,1.8160681506560852e-4,9.36415692920561e-6,-1.2771087603012172e-8,1.8167007529985502e-4,9.242389932513445e-6,-1.2759527269267482e-8,1.8180839374719023e-4,9.083630182385395e-6,-1.2744194260900506e-8,1.8203189191582484e-4,8.921407254932055e-6,-1.272809684680252e-8,1.8233811686921964e-4,8.793234923543979e-6,-1.271472568547752e-8,1.8271007573164471e-4,8.735513832696627e-6,-1.2707603433132443e-8,1.831156226205783e-4,8.776587215035303e-6,-1.2709611967731912e-8,1.835098044135818e-4,8.927979072561361e-6,-1.2722097762312471e-8,1.8384221630675696e-4,9.175500192615347e-6,-1.27439367278731e-8,1.840705475552472e-4,9.474371020128938e-6,-1.2771002906062082e-8,1.841780628060236e-4,9.754616948466088e-6,-1.279667951127827e-8,1.8418683651227492e-4,9.940934290960093e-6,-1.281380356682737e-8,1.8415563603335129e-4,9.98187460304554e-6,-1.281747050358581e-8,1.8415861263877017e-4,9.872544364405676e-6,-1.2807136409084753e-8,1.842552921475183e-4,9.65575714304891e-6,-1.278665574601449e-8,1.8446960989311107e-4,9.401323160175794e-6,-1.2762350921109002e-8,1.847878917819339e-4,9.177921705907351e-6,-1.274048999348862e-8,1.851716145817177e-4,9.033077144764868e-6,-1.2725517880425859e-8,1.8557404333119885e-4,8.98674862545095e-6,-1.2719465951244568e-8,1.8595285565285299e-4,9.03489153155634e-6,-1.2722206457539776e-8,1.8627673471227903e-4,9.156961441484826e-6,-1.2732052732514901e-8,1.8652737698281774e-4,9.323291635298407e-6,-1.2746379558568107e-8,1.8669908398996258e-4,9.500851281252383e-6,-1.276214259667023e-8,1.867974540649122e-4,9.657494220093313e-6,-1.2776296198795173e-8,1.868377674238962e-4,9.765290802188679e-6,-1.2786140679959678e-8,1.8684306967336814e-4,9.803397871508996e-6,-1.2789619363565743e-8,1.868417147083351e-4,9.760610094037025e-6,-1.2785567727151342e-8,1.8686412458466885e-4,9.637324414561794e-6,-1.2773894189412115e-8,1.8693880886411663e-4,9.44635537749392e-6,-1.2755655110877828e-8,1.8708806034181723e-4,9.212124471751703e-6,-1.2732996276901077e-8,1.873239407935784e-4,8.968006164774606e-6,-1.2708946706398693e-8,1.8764524855502274e-4,8.751851247504868e-6,-1.2687053344743047e-8,1.8803613506589658e-4,8.600047003777075e-6,-1.267086308882513e-8,1.884668350213392e-4,8.540750156571121e-6,-1.266327943929974e-8,1.8889688401037388e-4,8.586957156317759e-6,-1.2665841049346619e-8,1.892813662336039e-4,8.7303677532984365E-06,-1.2678028004774141e-8,1.8958055151708885e-4,8.937957777496288e-6,-1.269682650981506e-8,1.8977205698003573e-4,9.154221964303619e-6,-1.2716894887330907e-8,1.8986226816951858e-4,9.312023948278568e-6,-1.2731645634466873e-8,1.8989097282145473e-4,9.3523306591095e-6,-1.2735235873700964e-8,1.899229344963519e-4,9.246977657328054e-6,-1.2724818924541804e-8,1.9002600500419477e-4,9.012639158824845e-6,-1.2701873808086355e-8,1.90245267253111e-4,8.705899735453676e-6,-1.267169944090641e-8,1.9058743747324758e-4,8.400731767561984e-6,-1.2641284800066107e-8,1.9102317062649488e-4,8.161375525659737e-6,-1.261678823134974e-8,1.915028135995743e-4,8.024638131175617e-6,-1.2601877107848063e-8]} \ No newline at end of file diff --git a/public/lib/Cesium/Assets/Images/bing_maps_credit.png b/public/lib/Cesium/Assets/Images/bing_maps_credit.png new file mode 100644 index 0000000..15109db Binary files /dev/null and b/public/lib/Cesium/Assets/Images/bing_maps_credit.png differ diff --git a/public/lib/Cesium/Assets/Images/cesium_credit.png b/public/lib/Cesium/Assets/Images/cesium_credit.png new file mode 100644 index 0000000..4d1722b Binary files /dev/null and b/public/lib/Cesium/Assets/Images/cesium_credit.png differ diff --git a/public/lib/Cesium/Assets/Images/google_earth_credit.png b/public/lib/Cesium/Assets/Images/google_earth_credit.png new file mode 100644 index 0000000..a7622d8 Binary files /dev/null and b/public/lib/Cesium/Assets/Images/google_earth_credit.png differ diff --git a/public/lib/Cesium/Assets/Images/ion-credit.png b/public/lib/Cesium/Assets/Images/ion-credit.png new file mode 100644 index 0000000..71b7bdf Binary files /dev/null and b/public/lib/Cesium/Assets/Images/ion-credit.png differ diff --git a/public/lib/Cesium/Assets/Textures/LensFlare/DirtMask.jpg b/public/lib/Cesium/Assets/Textures/LensFlare/DirtMask.jpg new file mode 100644 index 0000000..5329902 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/LensFlare/DirtMask.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/LensFlare/StarBurst.jpg b/public/lib/Cesium/Assets/Textures/LensFlare/StarBurst.jpg new file mode 100644 index 0000000..b54ac09 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/LensFlare/StarBurst.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg new file mode 100644 index 0000000..0cad646 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg new file mode 100644 index 0000000..7e63bd6 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg new file mode 100644 index 0000000..e65f1c7 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg new file mode 100644 index 0000000..605f63f Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg new file mode 100644 index 0000000..319458e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg new file mode 100644 index 0000000..a6a3859 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg new file mode 100644 index 0000000..6913a2b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg new file mode 100644 index 0000000..df89ed2 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg new file mode 100644 index 0000000..8f27415 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg new file mode 100644 index 0000000..ce2b06e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg new file mode 100644 index 0000000..e3c0312 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg new file mode 100644 index 0000000..f3ec321 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg new file mode 100644 index 0000000..b59816c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg new file mode 100644 index 0000000..795f212 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg new file mode 100644 index 0000000..822b065 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg new file mode 100644 index 0000000..4dd18ea Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg new file mode 100644 index 0000000..4540c7c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg new file mode 100644 index 0000000..32c6e5a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg new file mode 100644 index 0000000..7c39094 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg new file mode 100644 index 0000000..3e7abe7 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg new file mode 100644 index 0000000..0e0f1e9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg new file mode 100644 index 0000000..732c32f Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg new file mode 100644 index 0000000..576ec70 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg new file mode 100644 index 0000000..6347041 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg new file mode 100644 index 0000000..300aa58 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg new file mode 100644 index 0000000..cd70fca Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg new file mode 100644 index 0000000..eabb83c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg new file mode 100644 index 0000000..54e6b00 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg new file mode 100644 index 0000000..311241c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg new file mode 100644 index 0000000..5ba398c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg new file mode 100644 index 0000000..e03c0c0 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg new file mode 100644 index 0000000..01a1caf Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg new file mode 100644 index 0000000..372e3ef Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg new file mode 100644 index 0000000..fbcfa62 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg new file mode 100644 index 0000000..334ab25 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg new file mode 100644 index 0000000..ebbc3a0 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg new file mode 100644 index 0000000..c3a8e97 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg new file mode 100644 index 0000000..8f730f3 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg new file mode 100644 index 0000000..75235d6 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg new file mode 100644 index 0000000..036d682 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg new file mode 100644 index 0000000..dfd2144 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg new file mode 100644 index 0000000..82c2a34 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml b/public/lib/Cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml new file mode 100644 index 0000000..6f502e7 --- /dev/null +++ b/public/lib/Cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml @@ -0,0 +1,14 @@ + + + NE2_HR_LC_SR_W_DR_recolored.tif + + EPSG:4326 + + + + + + + + + diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg new file mode 100644 index 0000000..6719228 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg new file mode 100644 index 0000000..3dfe883 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg new file mode 100644 index 0000000..7ef2363 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg new file mode 100644 index 0000000..f5d0d8b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg new file mode 100644 index 0000000..a842111 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg new file mode 100644 index 0000000..5efcc76 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/maki/airfield.png b/public/lib/Cesium/Assets/Textures/maki/airfield.png new file mode 100644 index 0000000..b774684 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/airfield.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/airport.png b/public/lib/Cesium/Assets/Textures/maki/airport.png new file mode 100644 index 0000000..44a8413 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/airport.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/alcohol-shop.png b/public/lib/Cesium/Assets/Textures/maki/alcohol-shop.png new file mode 100644 index 0000000..b75a5d9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/alcohol-shop.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/america-football.png b/public/lib/Cesium/Assets/Textures/maki/america-football.png new file mode 100644 index 0000000..5a2c6ba Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/america-football.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/art-gallery.png b/public/lib/Cesium/Assets/Textures/maki/art-gallery.png new file mode 100644 index 0000000..a663512 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/art-gallery.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/bakery.png b/public/lib/Cesium/Assets/Textures/maki/bakery.png new file mode 100644 index 0000000..9735d5e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/bakery.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/bank.png b/public/lib/Cesium/Assets/Textures/maki/bank.png new file mode 100644 index 0000000..a67cee0 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/bank.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/bar.png b/public/lib/Cesium/Assets/Textures/maki/bar.png new file mode 100644 index 0000000..8c2812f Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/bar.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/baseball.png b/public/lib/Cesium/Assets/Textures/maki/baseball.png new file mode 100644 index 0000000..23f344b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/baseball.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/basketball.png b/public/lib/Cesium/Assets/Textures/maki/basketball.png new file mode 100644 index 0000000..7ed3bfc Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/basketball.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/beer.png b/public/lib/Cesium/Assets/Textures/maki/beer.png new file mode 100644 index 0000000..a15cf99 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/beer.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/bicycle.png b/public/lib/Cesium/Assets/Textures/maki/bicycle.png new file mode 100644 index 0000000..fb871be Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/bicycle.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/building.png b/public/lib/Cesium/Assets/Textures/maki/building.png new file mode 100644 index 0000000..885f112 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/building.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/bus.png b/public/lib/Cesium/Assets/Textures/maki/bus.png new file mode 100644 index 0000000..7830502 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/bus.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cafe.png b/public/lib/Cesium/Assets/Textures/maki/cafe.png new file mode 100644 index 0000000..2050cba Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cafe.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/camera.png b/public/lib/Cesium/Assets/Textures/maki/camera.png new file mode 100644 index 0000000..ec54e12 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/camera.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/campsite.png b/public/lib/Cesium/Assets/Textures/maki/campsite.png new file mode 100644 index 0000000..36e0a92 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/campsite.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/car.png b/public/lib/Cesium/Assets/Textures/maki/car.png new file mode 100644 index 0000000..2075afa Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/car.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cemetery.png b/public/lib/Cesium/Assets/Textures/maki/cemetery.png new file mode 100644 index 0000000..df244fd Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cemetery.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cesium.png b/public/lib/Cesium/Assets/Textures/maki/cesium.png new file mode 100644 index 0000000..ce2755d Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cesium.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/chemist.png b/public/lib/Cesium/Assets/Textures/maki/chemist.png new file mode 100644 index 0000000..eb1ea35 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/chemist.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cinema.png b/public/lib/Cesium/Assets/Textures/maki/cinema.png new file mode 100644 index 0000000..56b6925 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cinema.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/circle-stroked.png b/public/lib/Cesium/Assets/Textures/maki/circle-stroked.png new file mode 100644 index 0000000..88689e4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/circle-stroked.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/circle.png b/public/lib/Cesium/Assets/Textures/maki/circle.png new file mode 100644 index 0000000..fbbd582 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/circle.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/city.png b/public/lib/Cesium/Assets/Textures/maki/city.png new file mode 100644 index 0000000..37d8fad Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/city.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/clothing-store.png b/public/lib/Cesium/Assets/Textures/maki/clothing-store.png new file mode 100644 index 0000000..ff5f8a2 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/clothing-store.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/college.png b/public/lib/Cesium/Assets/Textures/maki/college.png new file mode 100644 index 0000000..1026387 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/college.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/commercial.png b/public/lib/Cesium/Assets/Textures/maki/commercial.png new file mode 100644 index 0000000..fdf3b63 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/commercial.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cricket.png b/public/lib/Cesium/Assets/Textures/maki/cricket.png new file mode 100644 index 0000000..6642a3a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cricket.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/cross.png b/public/lib/Cesium/Assets/Textures/maki/cross.png new file mode 100644 index 0000000..8945b3b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/cross.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/dam.png b/public/lib/Cesium/Assets/Textures/maki/dam.png new file mode 100644 index 0000000..aed88a8 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/dam.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/danger.png b/public/lib/Cesium/Assets/Textures/maki/danger.png new file mode 100644 index 0000000..9479572 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/danger.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/disability.png b/public/lib/Cesium/Assets/Textures/maki/disability.png new file mode 100644 index 0000000..1cc3550 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/disability.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/dog-park.png b/public/lib/Cesium/Assets/Textures/maki/dog-park.png new file mode 100644 index 0000000..3483e35 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/dog-park.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/embassy.png b/public/lib/Cesium/Assets/Textures/maki/embassy.png new file mode 100644 index 0000000..46b7e1e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/embassy.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/emergency-telephone.png b/public/lib/Cesium/Assets/Textures/maki/emergency-telephone.png new file mode 100644 index 0000000..fac6239 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/emergency-telephone.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/entrance.png b/public/lib/Cesium/Assets/Textures/maki/entrance.png new file mode 100644 index 0000000..b0ba8c5 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/entrance.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/farm.png b/public/lib/Cesium/Assets/Textures/maki/farm.png new file mode 100644 index 0000000..7b03e82 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/farm.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/fast-food.png b/public/lib/Cesium/Assets/Textures/maki/fast-food.png new file mode 100644 index 0000000..9488c26 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/fast-food.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/ferry.png b/public/lib/Cesium/Assets/Textures/maki/ferry.png new file mode 100644 index 0000000..58c2f27 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/ferry.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/fire-station.png b/public/lib/Cesium/Assets/Textures/maki/fire-station.png new file mode 100644 index 0000000..427512f Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/fire-station.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/fuel.png b/public/lib/Cesium/Assets/Textures/maki/fuel.png new file mode 100644 index 0000000..dc6059b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/fuel.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/garden.png b/public/lib/Cesium/Assets/Textures/maki/garden.png new file mode 100644 index 0000000..265edb8 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/garden.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/gift.png b/public/lib/Cesium/Assets/Textures/maki/gift.png new file mode 100644 index 0000000..866263e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/gift.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/golf.png b/public/lib/Cesium/Assets/Textures/maki/golf.png new file mode 100644 index 0000000..2169d91 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/golf.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/grocery.png b/public/lib/Cesium/Assets/Textures/maki/grocery.png new file mode 100644 index 0000000..05b09d4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/grocery.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/hairdresser.png b/public/lib/Cesium/Assets/Textures/maki/hairdresser.png new file mode 100644 index 0000000..68fbe1e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/hairdresser.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/harbor.png b/public/lib/Cesium/Assets/Textures/maki/harbor.png new file mode 100644 index 0000000..2814f3c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/harbor.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/heart.png b/public/lib/Cesium/Assets/Textures/maki/heart.png new file mode 100644 index 0000000..82e9808 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/heart.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/heliport.png b/public/lib/Cesium/Assets/Textures/maki/heliport.png new file mode 100644 index 0000000..953828d Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/heliport.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/hospital.png b/public/lib/Cesium/Assets/Textures/maki/hospital.png new file mode 100644 index 0000000..faf294e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/hospital.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/ice-cream.png b/public/lib/Cesium/Assets/Textures/maki/ice-cream.png new file mode 100644 index 0000000..323c964 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/ice-cream.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/industrial.png b/public/lib/Cesium/Assets/Textures/maki/industrial.png new file mode 100644 index 0000000..9b3b525 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/industrial.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/land-use.png b/public/lib/Cesium/Assets/Textures/maki/land-use.png new file mode 100644 index 0000000..f86b21b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/land-use.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/laundry.png b/public/lib/Cesium/Assets/Textures/maki/laundry.png new file mode 100644 index 0000000..53fd20d Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/laundry.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/library.png b/public/lib/Cesium/Assets/Textures/maki/library.png new file mode 100644 index 0000000..8564e84 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/library.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/lighthouse.png b/public/lib/Cesium/Assets/Textures/maki/lighthouse.png new file mode 100644 index 0000000..a78e21a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/lighthouse.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/lodging.png b/public/lib/Cesium/Assets/Textures/maki/lodging.png new file mode 100644 index 0000000..4e41ea6 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/lodging.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/logging.png b/public/lib/Cesium/Assets/Textures/maki/logging.png new file mode 100644 index 0000000..4aeef0b Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/logging.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/london-underground.png b/public/lib/Cesium/Assets/Textures/maki/london-underground.png new file mode 100644 index 0000000..94972f7 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/london-underground.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/marker-stroked.png b/public/lib/Cesium/Assets/Textures/maki/marker-stroked.png new file mode 100644 index 0000000..f00d112 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/marker-stroked.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/marker.png b/public/lib/Cesium/Assets/Textures/maki/marker.png new file mode 100644 index 0000000..825eeca Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/marker.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/minefield.png b/public/lib/Cesium/Assets/Textures/maki/minefield.png new file mode 100644 index 0000000..60e174a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/minefield.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/mobilephone.png b/public/lib/Cesium/Assets/Textures/maki/mobilephone.png new file mode 100644 index 0000000..a40ef9c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/mobilephone.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/monument.png b/public/lib/Cesium/Assets/Textures/maki/monument.png new file mode 100644 index 0000000..5b8b7de Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/monument.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/museum.png b/public/lib/Cesium/Assets/Textures/maki/museum.png new file mode 100644 index 0000000..23c1790 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/museum.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/music.png b/public/lib/Cesium/Assets/Textures/maki/music.png new file mode 100644 index 0000000..dbef56f Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/music.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/oil-well.png b/public/lib/Cesium/Assets/Textures/maki/oil-well.png new file mode 100644 index 0000000..a421f5a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/oil-well.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/park.png b/public/lib/Cesium/Assets/Textures/maki/park.png new file mode 100644 index 0000000..741110e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/park.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/park2.png b/public/lib/Cesium/Assets/Textures/maki/park2.png new file mode 100644 index 0000000..5f60dcc Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/park2.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/parking-garage.png b/public/lib/Cesium/Assets/Textures/maki/parking-garage.png new file mode 100644 index 0000000..b91a811 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/parking-garage.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/parking.png b/public/lib/Cesium/Assets/Textures/maki/parking.png new file mode 100644 index 0000000..6a843d9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/parking.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/pharmacy.png b/public/lib/Cesium/Assets/Textures/maki/pharmacy.png new file mode 100644 index 0000000..d82e471 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/pharmacy.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/pitch.png b/public/lib/Cesium/Assets/Textures/maki/pitch.png new file mode 100644 index 0000000..a8205e8 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/pitch.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/place-of-worship.png b/public/lib/Cesium/Assets/Textures/maki/place-of-worship.png new file mode 100644 index 0000000..29f7c31 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/place-of-worship.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/playground.png b/public/lib/Cesium/Assets/Textures/maki/playground.png new file mode 100644 index 0000000..5270d3c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/playground.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/police.png b/public/lib/Cesium/Assets/Textures/maki/police.png new file mode 100644 index 0000000..9787a05 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/police.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/polling-place.png b/public/lib/Cesium/Assets/Textures/maki/polling-place.png new file mode 100644 index 0000000..b2d02a9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/polling-place.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/post.png b/public/lib/Cesium/Assets/Textures/maki/post.png new file mode 100644 index 0000000..ee7aaca Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/post.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/prison.png b/public/lib/Cesium/Assets/Textures/maki/prison.png new file mode 100644 index 0000000..355cba4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/prison.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rail-above.png b/public/lib/Cesium/Assets/Textures/maki/rail-above.png new file mode 100644 index 0000000..e48d7ea Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rail-above.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rail-light.png b/public/lib/Cesium/Assets/Textures/maki/rail-light.png new file mode 100644 index 0000000..895565e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rail-light.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rail-metro.png b/public/lib/Cesium/Assets/Textures/maki/rail-metro.png new file mode 100644 index 0000000..86078c9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rail-metro.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rail-underground.png b/public/lib/Cesium/Assets/Textures/maki/rail-underground.png new file mode 100644 index 0000000..42cfeb7 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rail-underground.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rail.png b/public/lib/Cesium/Assets/Textures/maki/rail.png new file mode 100644 index 0000000..8af055d Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rail.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/religious-christian.png b/public/lib/Cesium/Assets/Textures/maki/religious-christian.png new file mode 100644 index 0000000..201bc81 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/religious-christian.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/religious-jewish.png b/public/lib/Cesium/Assets/Textures/maki/religious-jewish.png new file mode 100644 index 0000000..e3c75f6 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/religious-jewish.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/religious-muslim.png b/public/lib/Cesium/Assets/Textures/maki/religious-muslim.png new file mode 100644 index 0000000..25cbf08 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/religious-muslim.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/restaurant.png b/public/lib/Cesium/Assets/Textures/maki/restaurant.png new file mode 100644 index 0000000..816282a Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/restaurant.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/roadblock.png b/public/lib/Cesium/Assets/Textures/maki/roadblock.png new file mode 100644 index 0000000..539f0ed Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/roadblock.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/rocket.png b/public/lib/Cesium/Assets/Textures/maki/rocket.png new file mode 100644 index 0000000..e6ed718 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/rocket.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/school.png b/public/lib/Cesium/Assets/Textures/maki/school.png new file mode 100644 index 0000000..fb20bf4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/school.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/scooter.png b/public/lib/Cesium/Assets/Textures/maki/scooter.png new file mode 100644 index 0000000..41f7416 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/scooter.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/shop.png b/public/lib/Cesium/Assets/Textures/maki/shop.png new file mode 100644 index 0000000..11a6b75 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/shop.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/skiing.png b/public/lib/Cesium/Assets/Textures/maki/skiing.png new file mode 100644 index 0000000..4fc11e2 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/skiing.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/slaughterhouse.png b/public/lib/Cesium/Assets/Textures/maki/slaughterhouse.png new file mode 100644 index 0000000..9b094ca Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/slaughterhouse.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/soccer.png b/public/lib/Cesium/Assets/Textures/maki/soccer.png new file mode 100644 index 0000000..2385daf Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/soccer.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/square-stroked.png b/public/lib/Cesium/Assets/Textures/maki/square-stroked.png new file mode 100644 index 0000000..fce75b0 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/square-stroked.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/square.png b/public/lib/Cesium/Assets/Textures/maki/square.png new file mode 100644 index 0000000..babc9c5 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/square.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/star-stroked.png b/public/lib/Cesium/Assets/Textures/maki/star-stroked.png new file mode 100644 index 0000000..242e42e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/star-stroked.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/star.png b/public/lib/Cesium/Assets/Textures/maki/star.png new file mode 100644 index 0000000..447dd38 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/star.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/suitcase.png b/public/lib/Cesium/Assets/Textures/maki/suitcase.png new file mode 100644 index 0000000..a94f562 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/suitcase.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/swimming.png b/public/lib/Cesium/Assets/Textures/maki/swimming.png new file mode 100644 index 0000000..b9fbdcc Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/swimming.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/telephone.png b/public/lib/Cesium/Assets/Textures/maki/telephone.png new file mode 100644 index 0000000..6d57dc6 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/telephone.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/tennis.png b/public/lib/Cesium/Assets/Textures/maki/tennis.png new file mode 100644 index 0000000..6cb6320 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/tennis.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/theatre.png b/public/lib/Cesium/Assets/Textures/maki/theatre.png new file mode 100644 index 0000000..772c96e Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/theatre.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/toilets.png b/public/lib/Cesium/Assets/Textures/maki/toilets.png new file mode 100644 index 0000000..e87cf19 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/toilets.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/town-hall.png b/public/lib/Cesium/Assets/Textures/maki/town-hall.png new file mode 100644 index 0000000..1af5c7c Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/town-hall.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/town.png b/public/lib/Cesium/Assets/Textures/maki/town.png new file mode 100644 index 0000000..4166169 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/town.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/triangle-stroked.png b/public/lib/Cesium/Assets/Textures/maki/triangle-stroked.png new file mode 100644 index 0000000..131c7d9 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/triangle-stroked.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/triangle.png b/public/lib/Cesium/Assets/Textures/maki/triangle.png new file mode 100644 index 0000000..d9c47f4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/triangle.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/village.png b/public/lib/Cesium/Assets/Textures/maki/village.png new file mode 100644 index 0000000..2650af5 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/village.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/warehouse.png b/public/lib/Cesium/Assets/Textures/maki/warehouse.png new file mode 100644 index 0000000..910f1e4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/warehouse.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/waste-basket.png b/public/lib/Cesium/Assets/Textures/maki/waste-basket.png new file mode 100644 index 0000000..a71f9e4 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/waste-basket.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/water.png b/public/lib/Cesium/Assets/Textures/maki/water.png new file mode 100644 index 0000000..159a557 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/water.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/wetland.png b/public/lib/Cesium/Assets/Textures/maki/wetland.png new file mode 100644 index 0000000..1e8dec8 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/wetland.png differ diff --git a/public/lib/Cesium/Assets/Textures/maki/zoo.png b/public/lib/Cesium/Assets/Textures/maki/zoo.png new file mode 100644 index 0000000..4802299 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/maki/zoo.png differ diff --git a/public/lib/Cesium/Assets/Textures/moonSmall.jpg b/public/lib/Cesium/Assets/Textures/moonSmall.jpg new file mode 100644 index 0000000..47f5252 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/moonSmall.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/pin.svg b/public/lib/Cesium/Assets/Textures/pin.svg new file mode 100644 index 0000000..7892c36 --- /dev/null +++ b/public/lib/Cesium/Assets/Textures/pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/lib/Cesium/Assets/Textures/waterNormals.jpg b/public/lib/Cesium/Assets/Textures/waterNormals.jpg new file mode 100644 index 0000000..eb1baa2 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/waterNormals.jpg differ diff --git a/public/lib/Cesium/Assets/Textures/waterNormalsSmall.jpg b/public/lib/Cesium/Assets/Textures/waterNormalsSmall.jpg new file mode 100644 index 0000000..57b19d8 Binary files /dev/null and b/public/lib/Cesium/Assets/Textures/waterNormalsSmall.jpg differ diff --git a/public/lib/Cesium/Assets/approximateTerrainHeights.json b/public/lib/Cesium/Assets/approximateTerrainHeights.json new file mode 100644 index 0000000..92e52a3 --- /dev/null +++ b/public/lib/Cesium/Assets/approximateTerrainHeights.json @@ -0,0 +1 @@ +{"6-0-0":[10.66,26.9],"6-0-1":[6.74,20.61],"6-0-2":[4.04,14.2],"6-0-3":[2.99,8.89],"6-0-4":[0.89,6.8],"6-0-5":[0.83,4.22],"6-0-6":[1.01,996.64],"6-0-7":[1.65,1473.8],"6-0-8":[4.23,1405.42],"6-0-9":[3.78,9.42],"6-0-10":[0.33,10.41],"6-0-11":[0.37,9.42],"6-0-12":[-1.21,10.72],"6-0-13":[-24.75,1797.13],"6-0-14":[-25.53,3.24],"6-0-15":[-12.72,0.06],"6-0-16":[-21.01,-5.62],"6-0-17":[-25.65,-10.79],"6-0-18":[-25.81,-11.56],"6-0-19":[-23.99,-9.29],"6-0-20":[-21.03,-8.01],"6-0-21":[-17.26,28.36],"6-0-22":[-10.44,-0.18],"6-0-23":[-6.09,1.27],"6-0-24":[0.2,8.96],"6-0-25":[4.5,13.87],"6-0-26":[6.42,18.94],"6-0-27":[9.26,23.03],"6-0-28":[10.92,27.13],"6-0-29":[12.68,32.43],"6-0-30":[15.67,36.44],"6-0-31":[17.17,41.7],"6-0-32":[18.65,43.91],"6-0-33":[19.85,48.69],"6-0-34":[21.11,56.5],"6-0-35":[26.26,79],"6-0-36":[33,95.12],"6-0-37":[17.36,1242.86],"6-0-38":[17.56,1197.83],"6-0-39":[46.88,149.88],"6-0-40":[49.39,105.09],"6-0-41":[41.61,101.97],"6-0-42":[20.68,550.11],"6-0-43":[17.2,92.57],"6-0-44":[16.92,77.99],"6-0-45":[18.56,46.63],"6-0-46":[12.38,43.07],"6-0-47":[3.4,29.35],"6-0-48":[-19.81,6.49],"6-0-49":[-39.19,-4.52],"6-0-50":[-57.57,-19.1],"6-0-51":[-76.36,-29.46],"6-0-52":[-88.35,-37.9],"6-0-53":[-97.62,-44.45],"6-0-54":[-101.65,-48.19],"6-0-55":[-119.7,-51.12],"6-0-56":[-126.97,-57.56],"6-0-57":[-126.3,-60.82],"6-0-58":[-126.26,-59.93],"6-0-59":[-119.1,-54.84],"6-0-60":[-110.88,-48.64],"6-0-61":[-96.62,258.8],"6-0-62":[-90.74,2997.38],"6-0-63":[-31.67,3098.17],"6-1-0":[10.71,26.95],"6-1-1":[7.14,20.8],"5-0-0":[6.74,26.95],"6-1-2":[3.89,15.04],"6-1-3":[3.37,8.36],"5-0-1":[2.99,15.04],"6-1-4":[-0.61,6.83],"6-1-5":[-0.55,4.83],"5-0-2":[-0.61,6.83],"6-1-6":[-0.38,343.9],"6-1-7":[0.43,308.3],"5-0-3":[-0.38,1473.8],"6-1-8":[1.88,906.96],"6-1-9":[4.01,286.65],"5-0-4":[1.88,1405.42],"6-1-10":[3.66,14],"6-1-11":[1.5,14.18],"5-0-5":[0.33,14.18],"6-1-12":[2.47,10.46],"6-1-13":[-22.06,1734.24],"5-0-6":[-24.75,1797.13],"6-1-14":[-20.71,6.52],"6-1-15":[-11.23,1.31],"5-0-7":[-25.53,6.52],"6-1-16":[-20.51,-4.75],"6-1-17":[-25.7,-10],"5-0-8":[-25.7,-4.75],"6-1-18":[-26.19,-12.15],"6-1-19":[-25.87,-9.22],"5-0-9":[-26.19,-9.22],"6-1-20":[-22.92,-7.87],"6-1-21":[-16.03,0.26],"5-0-10":[-22.92,28.36],"6-1-22":[-9.59,9.27],"6-1-23":[-2.9,6.54],"5-0-11":[-10.44,9.27],"6-1-24":[0.86,11.17],"6-1-25":[4.31,18.66],"5-0-12":[0.2,18.66],"6-1-26":[6.61,18.19],"6-1-27":[8.7,22.85],"5-0-13":[6.42,23.03],"6-1-28":[9.96,23.64],"6-1-29":[9.97,31.23],"5-0-14":[9.96,32.43],"6-1-30":[13.01,34.4],"6-1-31":[16.28,38.74],"5-0-15":[13.01,41.7],"6-1-32":[16.81,39.97],"6-1-33":[17.68,44.11],"5-0-16":[16.81,48.69],"6-1-34":[18.54,49.53],"6-1-35":[22.64,65.95],"5-0-17":[18.54,79],"6-1-36":[28.21,188.59],"6-1-37":[34.36,262.29],"5-0-18":[17.36,1242.86],"6-1-38":[45.21,1074.21],"6-1-39":[25.48,561.48],"5-0-19":[17.56,1197.83],"6-1-40":[23.5,105.17],"6-1-41":[23.63,99.7],"5-0-20":[23.5,105.17],"6-1-42":[19.32,82.54],"6-1-43":[18.61,61.85],"5-0-21":[17.2,550.11],"6-1-44":[20.07,55.81],"6-1-45":[18.77,46.46],"5-0-22":[16.92,77.99],"6-1-46":[8.68,36.12],"6-1-47":[-36.78,306.25],"5-0-23":[-36.78,306.25],"6-1-48":[-22.66,5.19],"6-1-49":[-42.82,-11.13],"5-0-24":[-42.82,6.49],"6-1-50":[-57.85,-19.1],"6-1-51":[-75.69,-29.65],"5-0-25":[-76.36,-19.1],"6-1-52":[-86.83,-37.51],"6-1-53":[-96.13,-43.07],"5-0-26":[-97.62,-37.51],"6-1-54":[-101.17,-47.18],"6-1-55":[-120.92,-50.74],"5-0-27":[-120.92,-47.18],"6-1-56":[-127.84,-59.08],"6-1-57":[-130.41,-62.14],"5-0-28":[-130.41,-57.56],"6-1-58":[-130.18,-59.59],"6-1-59":[-119.25,-55.12],"5-0-29":[-130.18,-54.84],"6-1-60":[-110.99,-49.4],"6-1-61":[-97.87,-11.15],"5-0-30":[-110.99,258.8],"6-1-62":[-91.52,3443.81],"6-1-63":[-29.54,3102.34],"5-0-31":[-91.52,3443.81],"6-2-0":[10.72,26.98],"6-2-1":[7.83,20.82],"6-2-2":[3.58,15.73],"6-2-3":[2.54,7.2],"6-2-4":[-0.61,5.79],"6-2-5":[-0.51,5.62],"6-2-6":[-0.51,2.52],"6-2-7":[0.49,3.57],"6-2-8":[1.45,1107.58],"6-2-9":[4.33,935.49],"6-2-10":[6.38,447.82],"6-2-11":[2.78,22.33],"6-2-12":[4.36,15.33],"6-2-13":[-21.97,1546.34],"6-2-14":[-15.6,10.11],"6-2-15":[-8.94,3.51],"6-2-16":[-19.28,-3.75],"6-2-17":[-25.1,-8.48],"6-2-18":[-26.22,-11.53],"6-2-19":[-26.62,-11.45],"6-2-20":[-24.22,-7.64],"6-2-21":[-15.31,-2.94],"6-2-22":[-9.58,22.84],"6-2-23":[0.06,13.16],"6-2-24":[3.65,16.58],"6-2-25":[5.95,18.75],"6-2-26":[7.56,18.27],"6-2-27":[8.72,22.69],"6-2-28":[9.83,22.16],"6-2-29":[9.86,26.06],"6-2-30":[12.2,32.28],"6-2-31":[13.89,34.73],"6-2-32":[14.45,36.73],"6-2-33":[14.44,38.35],"6-2-34":[17.75,45.33],"6-2-35":[20.66,56.51],"6-2-36":[14.56,1897.33],"6-2-37":[21.73,602.11],"6-2-38":[6.52,258.3],"6-2-39":[23.9,87.93],"6-2-40":[24.73,68.5],"6-2-41":[28.76,71.42],"6-2-42":[24.12,69.11],"6-2-43":[21.79,60.23],"6-2-44":[16.26,53.69],"6-2-45":[9.6,38.48],"6-2-46":[4.35,25.76],"6-2-47":[-8.34,16.06],"6-2-48":[-23.66,-1.78],"6-2-49":[-43.1,-12.47],"6-2-50":[-57.44,-20.26],"6-2-51":[-75.02,-28.99],"6-2-52":[-85.43,-36.15],"6-2-53":[-94.37,-42.32],"6-2-54":[-100.35,-45.74],"6-2-55":[-118.16,-50.3],"6-2-56":[-127.84,-57.37],"6-2-57":[-132.46,-63.72],"6-2-58":[-131.21,-59.33],"6-2-59":[-117.94,-55.1],"6-2-60":[-110.83,-49.58],"6-2-61":[-98.68,-43.95],"6-2-62":[-90.63,3904.3],"6-2-63":[-29.54,3104.92],"6-3-0":[10.72,27.03],"6-3-1":[7.91,20.82],"5-1-0":[7.83,27.03],"6-3-2":[3.44,16.58],"6-3-3":[2.11,6.48],"5-1-1":[2.11,16.58],"4-0-0":[2.11,27.03],"6-3-4":[-0.03,6.76],"6-3-5":[-0.56,6.63],"5-1-2":[-0.61,6.76],"6-3-6":[-1.04,3.03],"6-3-7":[0.58,2.79],"5-1-3":[-1.04,3.57],"4-0-1":[-1.04,1473.8],"6-3-8":[1.26,912.84],"6-3-9":[4.33,618.8],"5-1-4":[1.26,1107.58],"6-3-10":[6.38,21.82],"6-3-11":[-9.62,311.37],"5-1-5":[-9.62,447.82],"4-0-2":[-9.62,1405.42],"6-3-12":[5.53,24.46],"6-3-13":[-16.08,1745.85],"5-1-6":[-21.97,1745.85],"6-3-14":[-2.94,13.6],"6-3-15":[-7.31,5.28],"5-1-7":[-15.6,13.6],"4-0-3":[-25.53,1797.13],"6-3-16":[-15.66,-3.16],"6-3-17":[-22.96,-8.29],"5-1-8":[-25.1,-3.16],"6-3-18":[-26.21,-10.93],"6-3-19":[-27.23,-12.17],"5-1-9":[-27.23,-10.93],"4-0-4":[-27.23,-3.16],"6-3-20":[-24.81,-7.64],"6-3-21":[-14.34,0.47],"5-1-10":[-24.81,0.47],"6-3-22":[-3.34,23.06],"6-3-23":[2.58,22.37],"5-1-11":[-9.58,23.06],"4-0-5":[-24.81,28.36],"6-3-24":[6.28,19.36],"6-3-25":[8.08,21.32],"5-1-12":[3.65,21.32],"6-3-26":[1.66,34.68],"6-3-27":[8.88,23.51],"5-1-13":[1.66,34.68],"4-0-6":[0.2,34.68],"6-3-28":[10.27,25.7],"6-3-29":[10.85,24.86],"5-1-14":[9.83,26.06],"6-3-30":[11.93,28.27],"6-3-31":[13.63,30.64],"5-1-15":[11.93,34.73],"4-0-7":[9.83,41.7],"6-3-32":[14.74,33.87],"6-3-33":[11.58,35.79],"5-1-16":[11.58,38.35],"6-3-34":[16.56,41.34],"6-3-35":[18.05,51.07],"5-1-17":[16.56,56.51],"4-0-8":[11.58,79],"6-3-36":[19.63,771.39],"6-3-37":[21.73,997.06],"5-1-18":[14.56,1897.33],"6-3-38":[22.85,125.79],"6-3-39":[22.68,58.96],"5-1-19":[6.52,258.3],"4-0-9":[6.52,1897.33],"6-3-40":[21.12,59.21],"6-3-41":[21.12,57.29],"5-1-20":[21.12,71.42],"6-3-42":[19,55.57],"6-3-43":[19,45.14],"5-1-21":[19,69.11],"4-0-10":[17.2,550.11],"6-3-44":[12.68,42.37],"6-3-45":[7.26,30.69],"5-1-22":[7.26,53.69],"6-3-46":[1.07,18.1],"6-3-47":[-14.03,6.67],"5-1-23":[-14.03,25.76],"4-0-11":[-36.78,306.25],"6-3-48":[-25.52,-4.53],"6-3-49":[-40.76,-13.01],"5-1-24":[-43.1,-1.78],"6-3-50":[-55.85,-20.05],"6-3-51":[-71.88,-27.95],"5-1-25":[-75.02,-20.05],"4-0-12":[-76.36,6.49],"6-3-52":[-83.23,-35.08],"6-3-53":[-91.13,-41.07],"5-1-26":[-94.37,-35.08],"6-3-54":[-99.02,-44.5],"6-3-55":[-114.54,-49.53],"5-1-27":[-118.16,-44.5],"4-0-13":[-120.92,-35.08],"6-3-56":[-126.73,-56.74],"6-3-57":[-132.79,-63.72],"5-1-28":[-132.79,-56.74],"6-3-58":[-132.21,-59.46],"6-3-59":[-117.45,-55.06],"5-1-29":[-132.21,-55.06],"4-0-14":[-132.79,-54.84],"6-3-60":[-110.9,-50.05],"6-3-61":[-98.89,-43.58],"5-1-30":[-110.9,-43.58],"6-3-62":[-87.67,3970.41],"6-3-63":[-29.54,3106.07],"5-1-31":[-90.63,3970.41],"4-0-15":[-110.99,3970.41],"6-4-0":[10.72,27.07],"6-4-1":[8.58,20.88],"6-4-2":[3.21,17.11],"6-4-3":[2.1,7.09],"6-4-4":[1.19,8.01],"6-4-5":[-0.22,6.22],"6-4-6":[-1.08,2.41],"6-4-7":[0.39,611.05],"6-4-8":[1.07,1101.35],"6-4-9":[4.69,428.48],"6-4-10":[9.22,653.36],"6-4-11":[10.76,27.57],"6-4-12":[-14.99,1825.97],"6-4-13":[-15.6,2084.32],"6-4-14":[3.47,18.16],"6-4-15":[-5.56,6.15],"6-4-16":[-15.54,-2.51],"6-4-17":[-23.21,-7.81],"6-4-18":[-26.71,-10.93],"6-4-19":[-28,-11.62],"6-4-20":[-24.27,-7.94],"6-4-21":[-14.62,0.97],"6-4-22":[-0.2,17.55],"6-4-23":[2.53,28.15],"6-4-24":[7.62,19.59],"6-4-25":[8.14,21.94],"6-4-26":[9.01,22.24],"6-4-27":[10.38,25.71],"6-4-28":[11.65,27.19],"6-4-29":[12.01,27.84],"6-4-30":[12.52,28.27],"6-4-31":[13.6,29.58],"6-4-32":[14.29,32.89],"6-4-33":[15.45,34.86],"6-4-34":[16.24,35.6],"6-4-35":[15.79,39.9],"6-4-36":[15.18,43.72],"6-4-37":[15.33,45.71],"6-4-38":[15.37,48.56],"6-4-39":[15.29,45.88],"6-4-40":[15.09,44.41],"6-4-41":[14.97,42.29],"6-4-42":[13.73,42.26],"6-4-43":[12.06,37.32],"6-4-44":[10.39,32.28],"6-4-45":[5.84,25.33],"6-4-46":[-0.37,17.65],"6-4-47":[-16.61,1.08],"6-4-48":[-26.32,-7.42],"6-4-49":[-40.76,-13.57],"6-4-50":[-53.73,-20.05],"6-4-51":[-70.17,-26.95],"6-4-52":[-80.79,-33.29],"6-4-53":[-89,-39.39],"6-4-54":[-97.35,-43.1],"6-4-55":[-113.49,-49.01],"6-4-56":[-126.75,-56.1],"6-4-57":[-131.59,-62.78],"6-4-58":[-131.91,-58.9],"6-4-59":[-117.3,-55.06],"6-4-60":[-111.07,-49.97],"6-4-61":[-98.75,-43.61],"6-4-62":[-87.85,3807.76],"6-4-63":[-29.54,3106.13],"6-5-0":[10.78,27.12],"6-5-1":[8.58,21.1],"5-2-0":[8.58,27.12],"6-5-2":[3.17,17.66],"6-5-3":[0.92,7.26],"5-2-1":[0.92,17.66],"6-5-4":[-0.48,8],"6-5-5":[-2.17,1.64],"5-2-2":[-2.17,8.01],"6-5-6":[-0.74,0.57],"6-5-7":[-0.44,977.81],"5-2-3":[-1.08,977.81],"6-5-8":[1.07,1285.63],"6-5-9":[5.92,689.98],"5-2-4":[1.07,1285.63],"6-5-10":[9.22,574.41],"6-5-11":[12.46,29.76],"5-2-5":[9.22,653.36],"6-5-12":[-36.25,2863.96],"6-5-13":[-3.12,25.08],"5-2-6":[-36.25,2863.96],"6-5-14":[3.54,19.59],"6-5-15":[-6.33,5.94],"5-2-7":[-6.33,19.59],"6-5-16":[-17.4,-2.51],"6-5-17":[-24.54,-7.99],"5-2-8":[-24.54,-2.51],"6-5-18":[-27.22,-11.55],"6-5-19":[-27.57,-11.81],"5-2-9":[-28,-10.93],"6-5-20":[-24.98,-7.94],"6-5-21":[-15.88,-0.19],"5-2-10":[-24.98,0.97],"6-5-22":[-3.57,8.23],"6-5-23":[3.2,68.18],"5-2-11":[-3.57,68.18],"6-5-24":[7.47,18.67],"6-5-25":[7.19,18.1],"5-2-12":[7.19,21.94],"6-5-26":[7.38,20.47],"6-5-27":[8.56,27.76],"5-2-13":[7.38,27.76],"6-5-28":[11.8,30.78],"6-5-29":[12.82,30.66],"5-2-14":[11.65,30.78],"6-5-30":[13.61,32.3],"6-5-31":[13.86,32.65],"5-2-15":[12.52,32.65],"6-5-32":[14.35,32.3],"6-5-33":[15.09,34.31],"5-2-16":[14.29,34.86],"6-5-34":[14.43,33.96],"6-5-35":[14.39,37.54],"5-2-17":[14.39,39.9],"6-5-36":[12.64,37.44],"6-5-37":[11.66,31.1],"5-2-18":[11.66,45.71],"6-5-38":[11.75,38.62],"6-5-39":[12.15,31.7],"5-2-19":[11.75,48.56],"6-5-40":[10.41,30.13],"6-5-41":[10.41,29.27],"5-2-20":[10.41,44.41],"6-5-42":[10.26,28.59],"6-5-43":[8.59,25.16],"5-2-21":[8.59,42.26],"6-5-44":[6.7,23.39],"6-5-45":[4.27,19.09],"5-2-22":[4.27,32.28],"6-5-46":[-1.36,10.74],"6-5-47":[-17.27,-0.35],"5-2-23":[-17.27,17.65],"6-5-48":[-26.4,-8.28],"6-5-49":[-40.48,-13.41],"5-2-24":[-40.76,-7.42],"6-5-50":[-51.99,-19.83],"6-5-51":[-66.22,-25.93],"5-2-25":[-70.17,-19.83],"6-5-52":[-77.24,-31.84],"6-5-53":[-85.9,-37.71],"5-2-26":[-89,-31.84],"6-5-54":[-96.28,-42.09],"6-5-55":[-112.03,-48.58],"5-2-27":[-113.49,-42.09],"6-5-56":[-123.43,-55.02],"6-5-57":[-130.93,-62.4],"5-2-28":[-131.59,-55.02],"6-5-58":[-131.32,-59.02],"6-5-59":[-121.42,-54.72],"5-2-29":[-131.91,-54.72],"6-5-60":[-111.23,146.66],"6-5-61":[-98.4,-43.74],"5-2-30":[-111.23,146.66],"6-5-62":[-87.94,3579.75],"6-5-63":[-29.55,3100.28],"5-2-31":[-87.94,3807.76],"6-6-0":[10.89,27.18],"6-6-1":[8.99,21.34],"6-6-2":[3.2,17.98],"6-6-3":[0.5,6.62],"6-6-4":[-2.95,6.62],"6-6-5":[-3.68,0.42],"6-6-6":[-2.02,37.03],"6-6-7":[-1.02,1376.89],"6-6-8":[3.71,982.62],"6-6-9":[7.43,985.82],"6-6-10":[11.94,1234.98],"6-6-11":[13.11,705.14],"6-6-12":[-89.41,2536.32],"6-6-13":[3.4,22.83],"6-6-14":[2.65,19.52],"6-6-15":[-7.99,5.64],"6-6-16":[-18.67,-3.61],"6-6-17":[-26.52,-9.15],"6-6-18":[-29.62,-12.33],"6-6-19":[-29.54,-12.54],"6-6-20":[-27.32,-8.27],"6-6-21":[-18.45,-1.95],"6-6-22":[-6.48,7.14],"6-6-23":[3.01,190.01],"6-6-24":[6.51,138.47],"6-6-25":[5.69,15.96],"6-6-26":[5.4,16.51],"6-6-27":[6.05,22.74],"6-6-28":[9.02,28.21],"6-6-29":[-17.46,51.55],"6-6-30":[13.15,50.16],"6-6-31":[15.34,33.27],"6-6-32":[14.32,31.91],"6-6-33":[13.67,32.66],"6-6-34":[12.2,30.79],"6-6-35":[8.78,41.94],"6-6-36":[9.46,29.88],"6-6-37":[9.15,25.29],"6-6-38":[9.38,32.55],"6-6-39":[9.54,25.04],"6-6-40":[7.99,24.13],"6-6-41":[6.63,21.25],"6-6-42":[6.03,21.21],"6-6-43":[5.82,20.07],"6-6-44":[4.24,16.55],"6-6-45":[2.14,12.64],"6-6-46":[-4.05,7.66],"6-6-47":[-16.62,-0.23],"6-6-48":[-26.47,-8.01],"6-6-49":[-39.59,-13.39],"6-6-50":[-50.27,-19.08],"6-6-51":[-63.69,-24.71],"6-6-52":[-73.99,-30.15],"6-6-53":[-84.19,-35.56],"6-6-54":[-95.47,-40.93],"6-6-55":[-110.06,-48.04],"6-6-56":[-123.5,-54.77],"6-6-57":[-129.75,-61.69],"6-6-58":[-129.75,-62.06],"6-6-59":[-121.74,-53.84],"6-6-60":[-109.45,382.35],"6-6-61":[-98.13,-36.44],"6-6-62":[-87.49,3110.85],"6-6-63":[-29.55,3090.17],"6-7-0":[11.05,27.23],"6-7-1":[8.99,21.62],"5-3-0":[8.99,27.23],"6-7-2":[3.11,18.02],"6-7-3":[-1.88,4.75],"5-3-1":[-1.88,18.02],"4-1-0":[-1.88,27.23],"6-7-4":[-2.23,3.16],"6-7-5":[-10.48,-0.69],"5-3-2":[-10.48,6.62],"6-7-6":[-6.6,40.51],"6-7-7":[4.26,1489.28],"5-3-3":[-6.6,1489.28],"4-1-1":[-10.48,1489.28],"3-0-0":[-10.48,1489.28],"6-7-8":[5.88,1063.92],"6-7-9":[20.7,1104.57],"5-3-4":[3.71,1104.57],"6-7-10":[14.91,1599.96],"6-7-11":[-8.97,1740.57],"5-3-5":[-8.97,1740.57],"4-1-2":[-8.97,1740.57],"6-7-12":[-61.85,2512.65],"6-7-13":[5.57,22.76],"5-3-6":[-89.41,2536.32],"6-7-14":[0.64,18.21],"6-7-15":[-12.27,3.05],"5-3-7":[-12.27,19.52],"4-1-3":[-89.41,2863.96],"3-0-1":[-89.41,2863.96],"6-7-16":[-22.25,-4.09],"6-7-17":[-29.14,-10.07],"5-3-8":[-29.14,-3.61],"6-7-18":[-31.98,-13.47],"6-7-19":[-31.86,-13.83],"5-3-9":[-31.98,-12.33],"4-1-4":[-31.98,-2.51],"6-7-20":[-30.11,-10],"6-7-21":[-23.56,-3.54],"5-3-10":[-30.11,-1.95],"6-7-22":[-13.91,4.69],"6-7-23":[0.99,14.6],"5-3-11":[-13.91,190.01],"4-1-5":[-30.11,190.01],"3-0-2":[-31.98,190.01],"6-7-24":[3.42,1613.09],"6-7-25":[5.02,15.52],"5-3-12":[3.42,1613.09],"6-7-26":[3.25,11],"6-7-27":[3.44,17.46],"5-3-13":[3.25,22.74],"4-1-6":[3.25,1613.09],"6-7-28":[7.09,27.01],"6-7-29":[10.93,32.99],"5-3-14":[-17.46,51.55],"6-7-30":[11.96,44.95],"6-7-31":[15.14,36.64],"5-3-15":[11.96,50.16],"4-1-7":[-17.46,51.55],"3-0-3":[-17.46,1613.09],"6-7-32":[14.44,33.46],"6-7-33":[12.08,29.13],"5-3-16":[12.08,33.46],"6-7-34":[9.43,27.02],"6-7-35":[7.86,36.94],"5-3-17":[7.86,41.94],"4-1-8":[7.86,41.94],"6-7-36":[7.22,22.36],"6-7-37":[6.79,18.93],"5-3-18":[6.79,29.88],"6-7-38":[1.56,124.3],"6-7-39":[2.32,568.37],"5-3-19":[1.56,568.37],"4-1-9":[1.56,568.37],"3-0-4":[1.56,1897.33],"6-7-40":[4.25,19.09],"6-7-41":[3.01,14.77],"5-3-20":[3.01,24.13],"6-7-42":[2.34,12.33],"6-7-43":[2.29,11.63],"5-3-21":[2.29,21.21],"4-1-10":[2.29,44.41],"6-7-44":[1.26,10.73],"6-7-45":[0.76,8.15],"5-3-22":[0.76,16.55],"6-7-46":[-6.78,4.11],"6-7-47":[-16.16,-2.7],"5-3-23":[-16.62,7.66],"4-1-11":[-17.27,32.28],"3-0-5":[-36.78,550.11],"6-7-48":[-26.58,-6.48],"6-7-49":[-40.15,-13.72],"5-3-24":[-40.15,-6.48],"6-7-50":[-47.56,-19.18],"6-7-51":[-60.03,-23.45],"5-3-25":[-63.69,-19.08],"4-1-12":[-70.17,-6.48],"6-7-52":[-69.12,-28.3],"6-7-53":[-81.45,-33.85],"5-3-26":[-84.19,-28.3],"6-7-54":[-93.97,-39.48],"6-7-55":[-109.85,-47.07],"5-3-27":[-110.06,-39.48],"4-1-13":[-113.49,-28.3],"3-0-6":[-120.92,6.49],"6-7-56":[-122.72,-54.61],"6-7-57":[-128.44,-60.84],"5-3-28":[-129.75,-54.61],"6-7-58":[-128.99,-62.74],"6-7-59":[-122.71,340.29],"5-3-29":[-129.75,340.29],"4-1-14":[-131.91,340.29],"6-7-60":[-107.62,329.56],"6-7-61":[-97.3,5.39],"5-3-30":[-109.45,382.35],"6-7-62":[-86.37,3872.33],"6-7-63":[-29.55,3078.77],"5-3-31":[-87.49,3872.33],"4-1-15":[-111.23,3872.33],"3-0-7":[-132.79,3970.41],"6-8-0":[11.25,27.28],"6-8-1":[8.74,21.81],"6-8-2":[2.69,17.9],"6-8-3":[-2.96,4.36],"6-8-4":[-4.02,0.26],"6-8-5":[-11.5,-1.15],"6-8-6":[-10.53,46.22],"6-8-7":[12.55,2230.09],"6-8-8":[36.02,2322.75],"6-8-9":[40.43,1231.31],"6-8-10":[15.75,1286.11],"6-8-11":[-30.38,2365.52],"6-8-12":[7.93,340.69],"6-8-13":[5.51,23.37],"6-8-14":[-1.67,15.39],"6-8-15":[-16.52,0.65],"6-8-16":[-24.69,-6.49],"6-8-17":[-32.29,-11.47],"6-8-18":[-35.39,-14.68],"6-8-19":[-34.56,-15.15],"6-8-20":[-31.71,-12.28],"6-8-21":[-26.05,-7.16],"6-8-22":[-18.78,1],"6-8-23":[-3.52,7.31],"6-8-24":[-3.45,4224.76],"6-8-25":[1,4199.19],"6-8-26":[0.32,10.2],"6-8-27":[0.52,13.28],"6-8-28":[4.26,20.81],"6-8-29":[8.36,29.82],"6-8-30":[12.88,34],"6-8-31":[-1.72,39.3],"6-8-32":[14.17,33.54],"6-8-33":[6.64,33.65],"6-8-34":[6.42,29.43],"6-8-35":[5.61,18.21],"6-8-36":[5.17,15.57],"6-8-37":[5.39,18.43],"6-8-38":[3.83,14.4],"6-8-39":[3.25,45.92],"6-8-40":[1.53,11.5],"6-8-41":[0.06,8],"6-8-42":[-0.02,5.43],"6-8-43":[0.21,5.22],"6-8-44":[-2.28,4.54],"6-8-45":[-2.62,2.59],"6-8-46":[-8.98,1.16],"6-8-47":[-17.03,-3.98],"6-8-48":[-25.84,-6.48],"6-8-49":[-38.78,-13.07],"6-8-50":[-45.69,-18.94],"6-8-51":[-56.6,-22.56],"6-8-52":[-66.31,-26.79],"6-8-53":[-78.98,-32.27],"6-8-54":[-91.83,-38.18],"6-8-55":[-109.23,-46.25],"6-8-56":[-120.92,-53.72],"6-8-57":[-127.6,-60.42],"6-8-58":[-128.14,-62.51],"6-8-59":[-122.71,772.25],"6-8-60":[-106.38,254.93],"6-8-61":[-97.02,77.33],"6-8-62":[-84.41,3797.09],"6-8-63":[-29.55,3066.33],"6-9-0":[11.45,27.35],"6-9-1":[8.74,22.1],"5-4-0":[8.74,27.35],"6-9-2":[2.31,17.45],"6-9-3":[-4.87,3.84],"5-4-1":[-4.87,17.9],"6-9-4":[-6.12,-0.5],"6-9-5":[-15.2,-2.83],"5-4-2":[-15.2,0.26],"6-9-6":[-15.2,52.5],"6-9-7":[4.19,2249.45],"5-4-3":[-15.2,2249.45],"6-9-8":[56.64,1957.92],"6-9-9":[69.73,3549.52],"5-4-4":[36.02,3549.52],"6-9-10":[-8.73,3498.22],"6-9-11":[-44.9,2301.61],"5-4-5":[-44.9,3498.22],"6-9-12":[6.61,28.12],"6-9-13":[5.07,22.28],"5-4-6":[5.07,340.69],"6-9-14":[-6.22,10.49],"6-9-15":[-22.36,-1.66],"5-4-7":[-22.36,15.39],"6-9-16":[-30.48,-8.53],"6-9-17":[-38.55,-13.07],"5-4-8":[-38.55,-6.49],"6-9-18":[-40.53,-16.27],"6-9-19":[-40.96,-16.03],"5-4-9":[-40.96,-14.68],"6-9-20":[-37.32,-13.34],"6-9-21":[-28.36,-9.72],"5-4-10":[-37.32,-7.16],"6-9-22":[-23.57,-3.51],"6-9-23":[-16.83,1.38],"5-4-11":[-23.57,7.31],"6-9-24":[-11.52,8.24],"6-9-25":[-7.91,8.27],"5-4-12":[-11.52,4224.76],"6-9-26":[-7.04,2.76],"6-9-27":[-5.19,7.73],"5-4-13":[-7.04,13.28],"6-9-28":[1.39,14.78],"6-9-29":[5.73,25.09],"5-4-14":[1.39,29.82],"6-9-30":[10.36,28.45],"6-9-31":[12.39,30.86],"5-4-15":[-1.72,39.3],"6-9-32":[13.54,31.34],"6-9-33":[10.49,28.46],"5-4-16":[6.64,33.65],"6-9-34":[7.62,22.63],"6-9-35":[4.58,15.89],"5-4-17":[4.58,29.43],"6-9-36":[2.95,11.11],"6-9-37":[-14.06,364.92],"5-4-18":[-14.06,364.92],"6-9-38":[1.83,11.45],"6-9-39":[-0.79,7.86],"5-4-19":[-0.79,45.92],"6-9-40":[-2.81,87.14],"6-9-41":[-2.9,2.06],"5-4-20":[-2.9,87.14],"6-9-42":[-3.32,0.4],"6-9-43":[-4.29,0.66],"5-4-21":[-4.29,5.43],"6-9-44":[-7.14,0.22],"6-9-45":[-8.9,-1.28],"5-4-22":[-8.9,4.54],"6-9-46":[-12.57,-1.34],"6-9-47":[-20.7,-5.15],"5-4-23":[-20.7,1.16],"6-9-48":[-26.09,-8.73],"6-9-49":[-37.6,-13.13],"5-4-24":[-38.78,-6.48],"6-9-50":[-45.9,-17.8],"6-9-51":[-53.38,-22.53],"5-4-25":[-56.6,-17.8],"6-9-52":[-62.81,-25.9],"6-9-53":[-76.09,-30.77],"5-4-26":[-78.98,-25.9],"6-9-54":[-90.63,-37.36],"6-9-55":[-107.41,-45.63],"5-4-27":[-109.23,-37.36],"6-9-56":[-119.96,-53.04],"6-9-57":[-125.63,-58.67],"5-4-28":[-127.6,-53.04],"6-9-58":[-126.31,-58.13],"6-9-59":[-119.94,1007.23],"5-4-29":[-128.14,1007.23],"6-9-60":[-106.59,462.57],"6-9-61":[-96,462.57],"5-4-30":[-106.59,462.57],"6-9-62":[-84.94,2783.57],"6-9-63":[-29.55,3039.73],"5-4-31":[-84.94,3797.09],"6-10-0":[11.66,27.39],"6-10-1":[8.8,22.47],"6-10-2":[2.11,17.55],"6-10-3":[-5.07,2.92],"6-10-4":[-6.14,-2.32],"6-10-5":[-16.63,-2.83],"6-10-6":[-16.98,31.96],"6-10-7":[-2.48,2250.87],"6-10-8":[75.19,1714.22],"6-10-9":[30.42,6207.28],"6-10-10":[-317.19,2318.12],"6-10-11":[5.09,380.19],"6-10-12":[6.09,24.81],"6-10-13":[0.81,18.21],"6-10-14":[-11.19,6.41],"6-10-15":[-27.78,-4.11],"6-10-16":[-35.96,-11.54],"6-10-17":[-43.9,-15.64],"6-10-18":[-45.01,-19.38],"6-10-19":[-44.42,-18.81],"6-10-20":[-43.08,-14.67],"6-10-21":[-34.29,-11.93],"6-10-22":[-28.41,-8.91],"6-10-23":[-23.59,-5.93],"6-10-24":[-20.03,-3.95],"6-10-25":[-15.21,-3.18],"6-10-26":[-11.97,-2.83],"6-10-27":[-7.59,2.35],"6-10-28":[-2.35,10.55],"6-10-29":[2.75,19.96],"6-10-30":[6.93,24.2],"6-10-31":[9.9,28.1],"6-10-32":[11.26,27.88],"6-10-33":[8.09,27.31],"6-10-34":[4.97,20.7],"6-10-35":[0.28,29.22],"6-10-36":[0.02,34.33],"6-10-37":[-7.05,982.44],"6-10-38":[-47,1738.21],"6-10-39":[-8.61,368.88],"6-10-40":[-9.1,399.3],"6-10-41":[-6.13,-0.9],"6-10-42":[-5.03,-1.07],"6-10-43":[-7.02,-1.37],"6-10-44":[-10.1,-2.29],"6-10-45":[-14.95,-3.92],"6-10-46":[-16.66,-4.4],"6-10-47":[-23.64,-6.94],"6-10-48":[-27.68,-10.44],"6-10-49":[-35.5,-13.58],"6-10-50":[-42.84,-16.97],"6-10-51":[-51.64,-20.99],"6-10-52":[-60.08,-24.38],"6-10-53":[-74.73,-29.94],"6-10-54":[-88.65,-36.56],"6-10-55":[-106.09,-44.4],"6-10-56":[-116.67,-51.74],"6-10-57":[-123.8,-57.34],"6-10-58":[-124.5,-55.65],"6-10-59":[-112.82,883.88],"6-10-60":[-105.11,570.37],"6-10-61":[-5.84,549.47],"6-10-62":[-84.94,2425.34],"6-10-63":[-29.55,3008.67],"6-11-0":[11.74,27.45],"6-11-1":[8.8,23.16],"5-5-0":[8.8,27.45],"6-11-2":[1.89,18.15],"6-11-3":[-6.35,2.66],"5-5-1":[-6.35,18.15],"4-2-0":[-6.35,27.45],"6-11-4":[-8.07,-2.32],"6-11-5":[-16.52,-3.47],"5-5-2":[-16.63,-2.32],"6-11-6":[-17.37,5.59],"6-11-7":[-2.46,2337.17],"5-5-3":[-17.37,2337.17],"4-2-1":[-17.37,2337.17],"6-11-8":[96.66,1624.53],"6-11-9":[111.02,4180.16],"5-5-4":[30.42,6207.28],"6-11-10":[-100.65,4014.2],"6-11-11":[5.56,27.09],"5-5-5":[-317.19,4014.2],"4-2-2":[-317.19,6207.28],"6-11-12":[4.91,20.02],"6-11-13":[-4.06,12.89],"5-5-6":[-4.06,24.81],"6-11-14":[-18.2,1.04],"6-11-15":[-33.3,-7.02],"5-5-7":[-33.3,6.41],"4-2-3":[-33.3,340.69],"6-11-16":[-42.2,-14.25],"6-11-17":[-50.16,-18.62],"5-5-8":[-50.16,-11.54],"6-11-18":[-52.64,-21.88],"6-11-19":[-51.01,-21.95],"5-5-9":[-52.64,-18.81],"4-2-4":[-52.64,-6.49],"6-11-20":[-49.53,-17.94],"6-11-21":[-42.64,-14.48],"5-5-10":[-49.53,-11.93],"6-11-22":[-34.91,-12.52],"6-11-23":[-31.5,-10.6],"5-5-11":[-34.91,-5.93],"4-2-5":[-49.53,7.31],"6-11-24":[-29.55,-8.2],"6-11-25":[-23.86,-6.38],"5-5-12":[-29.55,-3.18],"6-11-26":[-19.87,-4.46],"6-11-27":[-13.37,-1.47],"5-5-13":[-19.87,2.35],"4-2-6":[-29.55,4224.76],"6-11-28":[-8.39,3.39],"6-11-29":[-0.38,13.1],"5-5-14":[-8.39,19.96],"6-11-30":[3.79,18.24],"6-11-31":[7.04,23.18],"5-5-15":[3.79,28.1],"4-2-7":[-8.39,39.3],"6-11-32":[8.41,23.23],"6-11-33":[6.61,21.8],"5-5-16":[6.61,27.88],"6-11-34":[1.94,15.53],"6-11-35":[-0.83,8.74],"5-5-17":[-0.83,29.22],"4-2-8":[-0.83,33.65],"6-11-36":[-5.27,4.25],"6-11-37":[-19.17,108.86],"5-5-18":[-19.17,982.44],"6-11-38":[-10.07,418.12],"6-11-39":[-13.37,-1.41],"5-5-19":[-47,1738.21],"4-2-9":[-47,1738.21],"6-11-40":[-14.02,394.12],"6-11-41":[-9.37,-2.74],"5-5-20":[-14.02,399.3],"6-11-42":[-11.22,-2.09],"6-11-43":[-11.68,-2.6],"5-5-21":[-11.68,-1.07],"4-2-10":[-14.02,399.3],"6-11-44":[-14.51,-3.6],"6-11-45":[-18.66,-5.6],"5-5-22":[-18.66,-2.29],"6-11-46":[-22.45,-7.76],"6-11-47":[-26.05,-8.93],"5-5-23":[-26.05,-4.4],"4-2-11":[-26.05,4.54],"6-11-48":[-29.53,-11.9],"6-11-49":[-34.85,-13.59],"5-5-24":[-35.5,-10.44],"6-11-50":[-40.97,-16.5],"6-11-51":[-48.53,-20.15],"5-5-25":[-51.64,-16.5],"4-2-12":[-56.6,-6.48],"6-11-52":[-58.21,-23.76],"6-11-53":[-72.99,-29.48],"5-5-26":[-74.73,-23.76],"6-11-54":[-86.21,-36.12],"6-11-55":[-103.18,-43.08],"5-5-27":[-106.09,-36.12],"4-2-13":[-109.23,-23.76],"6-11-56":[-113.79,-50.3],"6-11-57":[-120.63,-55.96],"5-5-28":[-123.8,-50.3],"6-11-58":[-122.11,-30.17],"6-11-59":[-109.73,896.34],"5-5-29":[-124.5,896.34],"4-2-14":[-128.14,1007.23],"6-11-60":[-50.89,667.99],"6-11-61":[119.31,564.8],"5-5-30":[-105.11,667.99],"6-11-62":[-24.93,3379.23],"6-11-63":[-29.55,2977.45],"5-5-31":[-84.94,3379.23],"4-2-15":[-106.59,3797.09],"6-12-0":[11.81,27.54],"6-12-1":[9.27,23.85],"6-12-2":[1.81,18.51],"6-12-3":[-7.36,2.56],"6-12-4":[-10.2,-3.36],"6-12-5":[-14.2,-3.64],"6-12-6":[-17.25,-1.46],"6-12-7":[-2.4,2626.58],"6-12-8":[127.44,1971.14],"6-12-9":[267.44,4964.36],"6-12-10":[-3.84,5003.13],"6-12-11":[5.53,17.77],"6-12-12":[1.22,17.44],"6-12-13":[-9.28,8.08],"6-12-14":[-24.33,-2.54],"6-12-15":[-38.37,-10.05],"6-12-16":[-46.59,-16.83],"6-12-17":[-57.08,-21.69],"6-12-18":[-58.76,-25],"6-12-19":[-58.51,-24.8],"6-12-20":[-55.3,-22.36],"6-12-21":[-47.72,-17.53],"6-12-22":[-42.01,-15.94],"6-12-23":[-37.95,-14.94],"6-12-24":[-36.96,-12.18],"6-12-25":[-32.38,-10.05],"6-12-26":[-27.79,-7.26],"6-12-27":[-19.35,-4.41],"6-12-28":[-13.92,-0.37],"6-12-29":[-6.27,6.6],"6-12-30":[-0.21,13.43],"6-12-31":[3.37,18.86],"6-12-32":[5.2,19.08],"6-12-33":[3.85,16.44],"6-12-34":[1,12.4],"6-12-35":[-5.91,3.06],"6-12-36":[-9.39,-0.47],"6-12-37":[-17.5,26.39],"6-12-38":[-14.85,15.85],"6-12-39":[-17.05,13.14],"6-12-40":[-17.31,-5.04],"6-12-41":[-154.99,367.1],"6-12-42":[-15.2,-4.66],"6-12-43":[-16.85,-5.49],"6-12-44":[-17.72,-5.68],"6-12-45":[-20.88,-7.48],"6-12-46":[-23.23,-9.37],"6-12-47":[-28.2,-11.32],"6-12-48":[-31.15,-13.01],"6-12-49":[-35.22,-15.16],"6-12-50":[-39.72,-16.79],"6-12-51":[-47.41,-19.15],"6-12-52":[-57.34,-23.29],"6-12-53":[-72.24,-28.77],"6-12-54":[-84.64,-35.59],"6-12-55":[-100.6,-41.81],"6-12-56":[-110.81,-48.6],"6-12-57":[-116.73,-54.27],"6-12-58":[-118.77,732.21],"6-12-59":[-106.63,1118.71],"6-12-60":[70.79,697.82],"6-12-61":[154.07,547.44],"6-12-62":[132.66,3177.52],"6-12-63":[-29.55,2958.4],"6-13-0":[11.89,27.69],"6-13-1":[9.27,24.72],"5-6-0":[9.27,27.69],"6-13-2":[1.77,18.69],"6-13-3":[-8.12,2.29],"5-6-1":[-8.12,18.69],"6-13-4":[-12.79,-3.7],"6-13-5":[-16.12,-5.11],"5-6-2":[-16.12,-3.36],"6-13-6":[-16.46,-1.51],"6-13-7":[-4.5,2443.65],"5-6-3":[-17.25,2626.58],"6-13-8":[159.96,1955.52],"6-13-9":[264.67,3305.19],"5-6-4":[127.44,4964.36],"6-13-10":[-0.63,5501.18],"6-13-11":[3.4,16.19],"5-6-5":[-3.84,5501.18],"6-13-12":[-4.33,12.53],"6-13-13":[-18.11,1.23],"5-6-6":[-18.11,17.44],"6-13-14":[-32.01,-5.03],"6-13-15":[-45.8,-13.68],"5-6-7":[-45.8,-2.54],"6-13-16":[-52.61,-19.6],"6-13-17":[-65.07,-24.29],"5-6-8":[-65.07,-16.83],"6-13-18":[-66.2,-29.09],"6-13-19":[-65.62,-28.05],"5-6-9":[-66.2,-24.8],"6-13-20":[-61.26,-25.11],"6-13-21":[-55.52,-21.57],"5-6-10":[-61.26,-17.53],"6-13-22":[-51.8,-19.25],"6-13-23":[-47.07,-19.08],"5-6-11":[-51.8,-14.94],"6-13-24":[-46.24,-17.09],"6-13-25":[-43.41,-14.52],"5-6-12":[-46.24,-10.05],"6-13-26":[-38.71,-10.51],"6-13-27":[-27.96,-7.34],"5-6-13":[-38.71,-4.41],"6-13-28":[-23.22,-4.17],"6-13-29":[-16.97,-0.2],"5-6-14":[-23.22,6.6],"6-13-30":[-9.11,5.15],"6-13-31":[-0.62,10.05],"5-6-15":[-9.11,18.86],"6-13-32":[1.62,10.97],"6-13-33":[1.64,9.15],"5-6-16":[1.62,19.08],"6-13-34":[-12.01,574],"6-13-35":[-8.4,3.2],"5-6-17":[-12.01,574],"6-13-36":[-12.41,-2.96],"6-13-37":[-12.61,18.94],"5-6-18":[-17.5,26.39],"6-13-38":[-17.05,15.14],"6-13-39":[-23.08,21.33],"5-6-19":[-23.08,21.33],"6-13-40":[-20.89,-7.97],"6-13-41":[-20.89,-4.36],"5-6-20":[-154.99,367.1],"6-13-42":[-17.41,-4.92],"6-13-43":[-19.71,-8.03],"5-6-21":[-19.71,-4.66],"6-13-44":[-19.71,-8.36],"6-13-45":[-23.09,-9.22],"5-6-22":[-23.09,-5.68],"6-13-46":[-26.22,-10.62],"6-13-47":[-29.93,-11.92],"5-6-23":[-29.93,-9.37],"6-13-48":[-33.2,-14.27],"6-13-49":[-36.69,-15.88],"5-6-24":[-36.69,-13.01],"6-13-50":[-37.72,-16.79],"6-13-51":[-46.58,-18.04],"5-6-25":[-47.41,-16.79],"6-13-52":[-56.13,-21.69],"6-13-53":[-71.1,-28.36],"5-6-26":[-72.24,-21.69],"6-13-54":[-82.17,-35.16],"6-13-55":[-96.84,-41.49],"5-6-27":[-100.6,-35.16],"6-13-56":[-107.17,-47.12],"6-13-57":[-113.4,-52.39],"5-6-28":[-116.73,-47.12],"6-13-58":[-113.8,799.79],"6-13-59":[542.77,1415.24],"5-6-29":[-118.77,1415.24],"6-13-60":[220.94,696.8],"6-13-61":[196.25,578.81],"5-6-30":[70.79,697.82],"6-13-62":[157.82,2807.42],"6-13-63":[-29.55,2933.27],"5-6-31":[-29.55,3177.52],"6-14-0":[11.98,27.81],"6-14-1":[9.31,25.28],"6-14-2":[1.78,18.69],"6-14-3":[-8.42,2.84],"6-14-4":[-14.71,-4.24],"6-14-5":[-17.71,-6.65],"6-14-6":[-16.95,-3.21],"6-14-7":[-6.95,1629.08],"6-14-8":[241.64,2195.84],"6-14-9":[291.07,2352.25],"6-14-10":[-17.81,5990.12],"6-14-11":[-1.23,1250.79],"6-14-12":[-8.91,5.47],"6-14-13":[-24.35,-2.9],"6-14-14":[-37.36,-9.51],"6-14-15":[-50.8,-17],"6-14-16":[-57.16,-23.13],"6-14-17":[-69.06,-26.79],"6-14-18":[-71.13,-32.26],"6-14-19":[-70.57,-30.63],"6-14-20":[-66.49,-28.02],"6-14-21":[-61.06,-25.99],"6-14-22":[-58.98,-23.49],"6-14-23":[-55.47,-22.95],"6-14-24":[-54.23,-21.9],"6-14-25":[-50.55,-19.65],"6-14-26":[-46.21,-14.46],"6-14-27":[-36.47,-11.82],"6-14-28":[-32.84,-8.88],"6-14-29":[-24.98,-4.86],"6-14-30":[-17.66,-0.54],"6-14-31":[-8.29,3.14],"6-14-32":[-4.33,4.38],"6-14-33":[-3.04,4.04],"6-14-34":[-30.12,444.87],"6-14-35":[-45.64,1253.85],"6-14-36":[-15.82,-4.2],"6-14-37":[-18.57,11.81],"6-14-38":[-20.38,12.56],"6-14-39":[-34.53,29.28],"6-14-40":[-23.61,-9.96],"6-14-41":[-23.65,-8.25],"6-14-42":[-22.26,-7.63],"6-14-43":[-21.36,-8.79],"6-14-44":[-21.36,-9.44],"6-14-45":[-23.95,-9.8],"6-14-46":[-26.93,-11.59],"6-14-47":[-30.83,-13.34],"6-14-48":[-34.25,-14.96],"6-14-49":[-36.46,-16.64],"6-14-50":[-38.97,-17.15],"6-14-51":[-43.17,-17.84],"6-14-52":[-55.2,-20.47],"6-14-53":[-70.32,-27.45],"6-14-54":[-81.47,-34.2],"6-14-55":[-94.24,-40.37],"6-14-56":[-103.99,-46.19],"6-14-57":[-110.48,-50.32],"6-14-58":[-111.11,1501.65],"6-14-59":[649.8,1730.64],"6-14-60":[290.61,752.21],"6-14-61":[298.29,587.99],"6-14-62":[230.04,3232.04],"6-14-63":[-29.54,2914.46],"6-15-0":[12.07,27.95],"6-15-1":[9.31,25.8],"5-7-0":[9.31,27.95],"6-15-2":[2,18.62],"6-15-3":[-9.36,3.57],"5-7-1":[-9.36,18.69],"4-3-0":[-9.36,27.95],"6-15-4":[-15.66,-4.24],"6-15-5":[-19.9,-7.76],"5-7-2":[-19.9,-4.24],"6-15-6":[-18.71,-3.02],"6-15-7":[-10.73,1677.33],"5-7-3":[-18.71,1677.33],"4-3-1":[-19.9,2626.58],"3-1-0":[-19.9,2626.58],"6-15-8":[6.28,2201.64],"6-15-9":[372.06,2244.89],"5-7-4":[6.28,2352.25],"6-15-10":[-3.5,3286.53],"6-15-11":[-24.01,4338.49],"5-7-5":[-24.01,5990.12],"4-3-2":[-24.01,5990.12],"6-15-12":[-16,0.26],"6-15-13":[-30.5,-5.77],"5-7-6":[-30.5,5.47],"6-15-14":[-41.91,-12.56],"6-15-15":[-54.89,-19.83],"5-7-7":[-54.89,-9.51],"4-3-3":[-54.89,17.44],"3-1-1":[-317.19,6207.28],"2-0-0":[-317.19,6207.28],"6-15-16":[-61.53,-25.72],"6-15-17":[-71.96,-29.35],"5-7-8":[-71.96,-23.13],"6-15-18":[-74.97,-34.5],"6-15-19":[-75.35,-33.7],"5-7-9":[-75.35,-30.63],"4-3-4":[-75.35,-16.83],"6-15-20":[-73.32,-31.19],"6-15-21":[-69.11,-29.89],"5-7-10":[-73.32,-25.99],"6-15-22":[-67.31,-28.48],"6-15-23":[-66.05,-27.68],"5-7-11":[-67.31,-22.95],"4-3-5":[-73.32,-14.94],"3-1-2":[-75.35,7.31],"6-15-24":[-64.91,-26.11],"6-15-25":[-62.05,-23.7],"5-7-12":[-64.91,-19.65],"6-15-26":[-58.25,-19.12],"6-15-27":[-49.51,-17.07],"5-7-13":[-58.25,-11.82],"4-3-6":[-64.91,-4.41],"6-15-28":[-44.78,-13.51],"6-15-29":[-35.93,-9.36],"5-7-14":[-44.78,-4.86],"6-15-30":[-28.32,-5.14],"6-15-31":[-19.14,-2.71],"5-7-15":[-28.32,3.14],"4-3-7":[-44.78,18.86],"3-1-3":[-64.91,4224.76],"2-0-1":[-75.35,4224.76],"6-15-32":[-13.73,-1.71],"6-15-33":[-10.63,-1.49],"5-7-16":[-13.73,4.38],"6-15-34":[-10.78,-2.12],"6-15-35":[-13.93,-2.93],"5-7-17":[-45.64,1253.85],"4-3-8":[-45.64,1253.85],"6-15-36":[-18.78,-4.46],"6-15-37":[-22.12,-7.9],"5-7-18":[-22.12,11.81],"6-15-38":[-22.48,7.98],"6-15-39":[-23.83,16.82],"5-7-19":[-34.53,29.28],"4-3-9":[-34.53,29.28],"3-1-4":[-47,1738.21],"6-15-40":[-25.6,210.54],"6-15-41":[-26.63,-11.38],"5-7-20":[-26.63,210.54],"6-15-42":[-26.15,-10.1],"6-15-43":[-23.47,-10.22],"5-7-21":[-26.15,-7.63],"4-3-10":[-154.99,367.1],"6-15-44":[-23.37,-10.28],"6-15-45":[-24.8,-10.38],"5-7-22":[-24.8,-9.44],"6-15-46":[-27.57,-12.05],"6-15-47":[-31.68,-13.68],"5-7-23":[-31.68,-11.59],"4-3-11":[-31.68,-5.68],"3-1-5":[-154.99,399.3],"2-0-2":[-154.99,1897.33],"6-15-48":[-33.83,-15.28],"6-15-49":[-36.24,-16.57],"5-7-24":[-36.46,-14.96],"6-15-50":[-40.85,-17.93],"6-15-51":[-40.81,-17.17],"5-7-25":[-43.17,-17.15],"4-3-12":[-47.41,-13.01],"6-15-52":[-53.46,-20.29],"6-15-53":[-68.22,-26.61],"5-7-26":[-70.32,-20.29],"6-15-54":[-79.48,-33.55],"6-15-55":[-91.99,-40.09],"5-7-27":[-94.24,-33.55],"4-3-13":[-100.6,-20.29],"3-1-6":[-109.23,-6.48],"6-15-56":[-99.15,-44.2],"6-15-57":[-105.53,-47.94],"5-7-28":[-110.48,-44.2],"6-15-58":[-105.53,1582.81],"6-15-59":[752.2,3280.76],"5-7-29":[-111.11,3280.76],"4-3-14":[-118.77,3280.76],"6-15-60":[370.12,1055.95],"6-15-61":[342.75,583.66],"5-7-30":[290.61,1055.95],"6-15-62":[359.13,3299.77],"6-15-63":[-29.54,2899.4],"5-7-31":[-29.54,3299.77],"4-3-15":[-29.55,3299.77],"3-1-7":[-128.14,3797.09],"2-0-3":[-132.79,3970.41],"6-16-0":[12.18,28.06],"6-16-1":[9.42,26.44],"6-16-2":[2.35,18.81],"6-16-3":[-9.47,3.62],"6-16-4":[-15.5,-4.65],"6-16-5":[-19.9,-6.14],"6-16-6":[-18.71,-2.92],"6-16-7":[-13.51,358.63],"6-16-8":[4.93,2700.74],"6-16-9":[524.03,2379.96],"6-16-10":[138.16,2349.52],"6-16-11":[-19.04,3089.83],"6-16-12":[-32.37,1191.79],"6-16-13":[-32.78,1099.24],"6-16-14":[-42.73,-15.25],"6-16-15":[-55.78,-21.82],"6-16-16":[-62.13,-27.45],"6-16-17":[-73.82,-31.05],"6-16-18":[-77.86,-35.86],"6-16-19":[-79.19,-36.66],"6-16-20":[-78.8,-34.53],"6-16-21":[-75.08,-33.65],"6-16-22":[-74.19,-33.08],"6-16-23":[-73.6,-32.44],"6-16-24":[-71.56,-31.17],"6-16-25":[-70.97,-29.12],"6-16-26":[-66.99,-25.12],"6-16-27":[-59.8,-22.61],"6-16-28":[-53.63,-18.47],"6-16-29":[-44.99,-14.42],"6-16-30":[-35.2,-9.88],"6-16-31":[-25.62,-7.01],"6-16-32":[-19.94,-5.38],"6-16-33":[-16.2,-5.07],"6-16-34":[-15.92,-4.9],"6-16-35":[-16.42,-5.38],"6-16-36":[-19.23,-6.96],"6-16-37":[-22.12,-9.38],"6-16-38":[-22.83,-10.64],"6-16-39":[-23.64,-10.88],"6-16-40":[-25.6,395.5],"6-16-41":[-27.18,-12.58],"6-16-42":[-27.19,-11.89],"6-16-43":[-25.25,-11.48],"6-16-44":[-23.89,-10.73],"6-16-45":[-25.51,-11.64],"6-16-46":[-27.55,-12.42],"6-16-47":[-30.38,-13.83],"6-16-48":[-32.72,-14.63],"6-16-49":[-36.23,-15.29],"6-16-50":[-40.57,-17.57],"6-16-51":[-40.62,-17.17],"6-16-52":[-52.6,-20.03],"6-16-53":[-67.1,-26.24],"6-16-54":[-78.95,-32.27],"6-16-55":[-88.41,-38.74],"6-16-56":[-94.87,-42.36],"6-16-57":[-102.31,-45.37],"6-16-58":[-102.31,2780.28],"6-16-59":[1055.94,3057.06],"6-16-60":[561.63,1251.61],"6-16-61":[360.22,729.54],"6-16-62":[569.39,3324.73],"6-16-63":[-29.54,2887.59],"6-17-0":[12.28,28.2],"6-17-1":[9.42,27.09],"5-8-0":[9.42,28.2],"6-17-2":[2.44,19.47],"6-17-3":[-9.26,3.4],"5-8-1":[-9.47,19.47],"6-17-4":[-12.46,-4.27],"6-17-5":[-17.6,-3.54],"5-8-2":[-19.9,-3.54],"6-17-6":[-16.97,-3.57],"6-17-7":[-17.03,450.81],"5-8-3":[-18.71,450.81],"6-17-8":[-1,2409.04],"6-17-9":[729.41,2941.77],"5-8-4":[-1,2941.77],"6-17-10":[639.5,2300.19],"6-17-11":[-7.73,3041.41],"5-8-5":[-19.04,3089.83],"6-17-12":[-40.41,2709.89],"6-17-13":[-36.12,1110.77],"5-8-6":[-40.41,2709.89],"6-17-14":[-44.38,-16.38],"6-17-15":[-55.37,-22.03],"5-8-7":[-55.78,-15.25],"6-17-16":[-62.03,-26.24],"6-17-17":[-74.43,-30.62],"5-8-8":[-74.43,-26.24],"6-17-18":[-79.53,-36.84],"6-17-19":[-81.78,-38.94],"5-8-9":[-81.78,-35.86],"6-17-20":[-81.39,-38.14],"6-17-21":[-82.89,-37.3],"5-8-10":[-82.89,-33.65],"6-17-22":[-83.1,-37.32],"6-17-23":[-82.35,-36.18],"5-8-11":[-83.1,-32.44],"6-17-24":[-81.19,-36.06],"6-17-25":[-80.32,-33.99],"5-8-12":[-81.19,-29.12],"6-17-26":[-77.62,-31.19],"6-17-27":[-70.94,-27.45],"5-8-13":[-77.62,-22.61],"6-17-28":[-64.31,-23.68],"6-17-29":[-54,-18.06],"5-8-14":[-64.31,-14.42],"6-17-30":[-43.73,-13.82],"6-17-31":[-34.31,-10.34],"5-8-15":[-43.73,-7.01],"6-17-32":[-28.04,-8.32],"6-17-33":[-22.53,-7.81],"5-8-16":[-28.04,-5.07],"6-17-34":[-20.71,-7.81],"6-17-35":[-20.22,-8],"5-8-17":[-20.71,-4.9],"6-17-36":[-18.91,-8.25],"6-17-37":[-21.69,-9.44],"5-8-18":[-22.12,-6.96],"6-17-38":[-22.79,-10.07],"6-17-39":[-23.64,-11.06],"5-8-19":[-23.64,-10.07],"6-17-40":[-25.6,315.4],"6-17-41":[-27.15,-11.32],"5-8-20":[-27.18,395.5],"6-17-42":[-27.2,-12.55],"6-17-43":[-25.3,-11.22],"5-8-21":[-27.2,-11.22],"6-17-44":[-23.39,-10.83],"6-17-45":[-25.69,-11.63],"5-8-22":[-25.69,-10.73],"6-17-46":[-27.32,-12.29],"6-17-47":[-29.02,-13.43],"5-8-23":[-30.38,-12.29],"6-17-48":[-30.31,-14],"6-17-49":[-34.83,-14.43],"5-8-24":[-36.23,-14],"6-17-50":[-36.28,-15.71],"6-17-51":[-39.91,-16.54],"5-8-25":[-40.62,-15.71],"6-17-52":[-49.95,-19.22],"6-17-53":[-64.39,-24.43],"5-8-26":[-67.1,-19.22],"6-17-54":[-75.83,-31.35],"6-17-55":[-84.15,-37.16],"5-8-27":[-88.41,-31.35],"6-17-56":[-89.73,-39.94],"6-17-57":[-97.13,-43.44],"5-8-28":[-102.31,-39.94],"6-17-58":[-96.35,2730.02],"6-17-59":[1251.6,2341.32],"5-8-29":[-102.31,3057.06],"6-17-60":[646.73,1350.33],"6-17-61":[434.89,803.49],"5-8-30":[360.22,1350.33],"6-17-62":[729.53,3573.17],"6-17-63":[-29.54,2879.05],"5-8-31":[-29.54,3573.17],"6-18-0":[12.4,28.31],"6-18-1":[10.07,27.6],"6-18-2":[2.4,20.08],"6-18-3":[-8.33,2.75],"6-18-4":[-10.4,-2.36],"6-18-5":[-18.83,-3.43],"6-18-6":[-22.53,142.08],"6-18-7":[-18.17,429.97],"6-18-8":[-0.16,2151.79],"6-18-9":[348.42,2614.23],"6-18-10":[9.51,2710.75],"6-18-11":[294.75,2698.9],"6-18-12":[-24.66,2746.59],"6-18-13":[-259.61,2747.57],"6-18-14":[-46.28,1843.49],"6-18-15":[-53.35,-22.18],"6-18-16":[-60.66,-26.44],"6-18-17":[-73.74,-29.66],"6-18-18":[-79.72,-35.92],"6-18-19":[-82.56,-39.87],"6-18-20":[-83.14,-40.29],"6-18-21":[-87.25,-40.68],"6-18-22":[-88.44,-41.38],"6-18-23":[-87.74,-40.45],"6-18-24":[-87.08,-40.24],"6-18-25":[-86.36,-38.8],"6-18-26":[-83.25,-35.89],"6-18-27":[-78.02,-32.16],"6-18-28":[-71.88,-27.65],"6-18-29":[-60.18,-22.1],"6-18-30":[-49.79,-17.75],"6-18-31":[-40.43,-14.23],"6-18-32":[-34.17,-11.43],"6-18-33":[-27.72,-10.12],"6-18-34":[-24.22,-9.98],"6-18-35":[-22.71,-9.16],"6-18-36":[-19.05,-9.09],"6-18-37":[-20.03,-8.96],"6-18-38":[-21.83,-9.07],"6-18-39":[-23.26,-10.05],"6-18-40":[-22.96,30.18],"6-18-41":[-25.64,-10.66],"6-18-42":[-26.07,-11.58],"6-18-43":[-24.63,-10.9],"6-18-44":[-23.29,-10.9],"6-18-45":[-24.95,-11.37],"6-18-46":[-26.58,-12.17],"6-18-47":[-27.96,-12.57],"6-18-48":[-28.66,-12.73],"6-18-49":[-31.29,-12.64],"6-18-50":[-33.1,-13.52],"6-18-51":[-38.3,-14.77],"6-18-52":[-46.75,-18.61],"6-18-53":[-62.71,-23.22],"6-18-54":[-73.11,-30.4],"6-18-55":[-79.89,-35.13],"6-18-56":[-85.72,-38.01],"6-18-57":[-91.81,-40.53],"6-18-58":[-89.38,2750.5],"6-18-59":[1350.32,2817.84],"6-18-60":[749.4,1490.05],"6-18-61":[552.13,901.46],"6-18-62":[803.48,3682.63],"6-18-63":[-29.54,2878.07],"6-19-0":[12.49,28.44],"6-19-1":[10.07,28.63],"5-9-0":[10.07,28.63],"6-19-2":[2.33,20.54],"6-19-3":[-8.14,2.42],"5-9-1":[-8.33,20.54],"4-4-0":[-9.47,28.63],"6-19-4":[-13.58,-2.05],"6-19-5":[-21.21,283.5],"5-9-2":[-21.21,283.5],"6-19-6":[-26.63,317.55],"6-19-7":[-24.44,581.34],"5-9-3":[-26.63,581.34],"4-4-1":[-26.63,581.34],"6-19-8":[-7.43,973.14],"6-19-9":[6.63,2480.85],"5-9-4":[-7.43,2614.23],"6-19-10":[-1.43,2228.73],"6-19-11":[399.03,2929.86],"5-9-5":[-1.43,2929.86],"4-4-2":[-19.04,3089.83],"6-19-12":[587.41,2399.44],"6-19-13":[-30.31,3974.94],"5-9-6":[-259.61,3974.94],"6-19-14":[-46.53,2829.29],"6-19-15":[-55.15,2131.34],"5-9-7":[-55.15,2829.29],"4-4-3":[-259.61,3974.94],"6-19-16":[-60.39,1592.47],"6-19-17":[-71.31,1595.59],"5-9-8":[-73.74,1595.59],"6-19-18":[-78.96,251.63],"6-19-19":[-83.12,-38.05],"5-9-9":[-83.12,251.63],"4-4-4":[-83.12,1595.59],"6-19-20":[-84.9,-41.29],"6-19-21":[-89.63,-42.03],"5-9-10":[-89.63,-40.29],"6-19-22":[-92.74,-43.78],"6-19-23":[-93.19,-43.92],"5-9-11":[-93.19,-40.45],"4-4-5":[-93.19,-32.44],"6-19-24":[-93.06,-43.61],"6-19-25":[-92.29,-42.14],"5-9-12":[-93.06,-38.8],"6-19-26":[-89.24,-39.76],"6-19-27":[-85.23,-36.36],"5-9-13":[-89.24,-32.16],"4-4-6":[-93.06,-22.61],"6-19-28":[-78.96,-31.27],"6-19-29":[-67.42,-25.3],"5-9-14":[-78.96,-22.1],"6-19-30":[-57.07,-21.14],"6-19-31":[-48.07,-17.54],"5-9-15":[-57.07,-14.23],"4-4-7":[-78.96,-7.01],"6-19-32":[-41.41,-14.6],"6-19-33":[-33.3,-12.43],"5-9-16":[-41.41,-10.12],"6-19-34":[-28.55,-11.75],"6-19-35":[-23.48,-9.55],"5-9-17":[-28.55,-9.16],"4-4-8":[-41.41,-4.9],"6-19-36":[-19.4,-8.58],"6-19-37":[-18.07,-7.73],"5-9-18":[-20.03,-7.73],"6-19-38":[-19.41,-7.69],"6-19-39":[-21.4,-8.18],"5-9-19":[-23.26,-7.69],"4-4-9":[-23.64,-6.96],"6-19-40":[-21.19,0.38],"6-19-41":[-23.26,-9.49],"5-9-20":[-25.64,30.18],"6-19-42":[-23.81,-10.86],"6-19-43":[-23.19,-10.71],"5-9-21":[-26.07,-10.71],"4-4-10":[-27.2,395.5],"6-19-44":[-23.63,-10.75],"6-19-45":[-24.65,-11.33],"5-9-22":[-24.95,-10.75],"6-19-46":[-24.92,-11.97],"6-19-47":[-25.67,-11.81],"5-9-23":[-27.96,-11.81],"4-4-11":[-30.38,-10.73],"6-19-48":[-25.62,-11.54],"6-19-49":[-26.6,-11.36],"5-9-24":[-31.29,-11.36],"6-19-50":[-29.05,-11.87],"6-19-51":[-37.03,-13.23],"5-9-25":[-38.3,-11.87],"4-4-12":[-40.62,-11.36],"6-19-52":[-44.46,-17.75],"6-19-53":[-60.61,-22.7],"5-9-26":[-62.71,-17.75],"6-19-54":[-69.03,-29.59],"6-19-55":[-75.62,-33.5],"5-9-27":[-79.89,-29.59],"4-4-13":[-88.41,-17.75],"6-19-56":[-80.8,-36.68],"6-19-57":[-87.74,-39.43],"5-9-28":[-91.81,-36.68],"6-19-58":[-80.06,2986.57],"6-19-59":[1490.04,3530.83],"5-9-29":[-89.38,3530.83],"4-4-14":[-102.31,3530.83],"6-19-60":[865.9,1514.1],"6-19-61":[606.22,956.54],"5-9-30":[552.13,1514.1],"6-19-62":[901.45,3114.64],"6-19-63":[-29.54,2878.57],"5-9-31":[-29.54,3682.63],"4-4-15":[-29.54,3682.63],"6-20-0":[12.6,28.55],"6-20-1":[10.43,29.48],"6-20-2":[2.27,20.82],"6-20-3":[-7.48,2.38],"6-20-4":[-13.58,105.36],"6-20-5":[-22.77,360.51],"6-20-6":[-29.85,693.54],"6-20-7":[-27.48,842.66],"6-20-8":[101.52,662.44],"6-20-9":[38.73,1501.83],"6-20-10":[-7.86,1335.36],"6-20-11":[265.12,2410.7],"6-20-12":[394.15,2580.47],"6-20-13":[176.29,3118.01],"6-20-14":[-26.42,3265.41],"6-20-15":[-24.65,4373.52],"6-20-16":[-14.17,3180.62],"6-20-17":[-27.55,4292.74],"6-20-18":[-76.12,2093.71],"6-20-19":[-82.77,1757.21],"6-20-20":[-84.77,-39.45],"6-20-21":[-90.02,-41.79],"6-20-22":[-93.63,-44.7],"6-20-23":[-95.18,-46.27],"6-20-24":[-95.41,-46.25],"6-20-25":[-94.65,-44.61],"6-20-26":[-91.54,-43],"6-20-27":[-87.87,-39.48],"6-20-28":[-81.88,-34.42],"6-20-29":[-70.45,-28.53],"6-20-30":[-61.33,-24.48],"6-20-31":[-52.2,-20.85],"6-20-32":[-45.21,-17.01],"6-20-33":[-35.82,-14.29],"6-20-34":[-30,-12.23],"6-20-35":[-24.98,-9.38],"6-20-36":[-19.21,-7.52],"6-20-37":[-16.88,-6.21],"6-20-38":[-16.13,-6.04],"6-20-39":[-17.89,-6.16],"6-20-40":[-18.62,-6.82],"6-20-41":[-21.61,-7.83],"6-20-42":[-22.22,-9.86],"6-20-43":[-23.83,-10.66],"6-20-44":[-24.73,-11.26],"6-20-45":[-25.79,-11.42],"6-20-46":[-25.8,-11.97],"6-20-47":[-24.13,-11.21],"6-20-48":[-23.48,-10.65],"6-20-49":[-23.65,-10.31],"6-20-50":[-26.04,-10.7],"6-20-51":[-35.46,-11.92],"6-20-52":[-44.23,-15.93],"6-20-53":[-59.19,-21.91],"6-20-54":[-66.26,-28.4],"6-20-55":[-73.37,-32.29],"6-20-56":[-79.03,-35.55],"6-20-57":[-84.12,-37.56],"6-20-58":[-79.02,1956.61],"6-20-59":[1514.09,2297.87],"6-20-60":[953.69,1535.12],"6-20-61":[812.01,1063],"6-20-62":[956.53,2865.19],"6-20-63":[-29.59,2878.57],"6-21-0":[12.69,28.95],"6-21-1":[10.43,30.37],"5-10-0":[10.43,30.37],"6-21-2":[2.27,21.72],"6-21-3":[-4.05,2.72],"5-10-1":[-7.48,21.72],"6-21-4":[-14.88,306.82],"6-21-5":[-25.82,454.87],"5-10-2":[-25.82,454.87],"6-21-6":[-33.35,413.74],"6-21-7":[-35.21,781.37],"5-10-3":[-35.21,842.66],"6-21-8":[126.37,696.58],"6-21-9":[137.72,880.39],"5-10-4":[38.73,1501.83],"6-21-10":[-10.46,833.93],"6-21-11":[299.05,1099.39],"5-10-5":[-10.46,2410.7],"6-21-12":[314.78,3253.8],"6-21-13":[300.79,3939.1],"5-10-6":[176.29,3939.1],"6-21-14":[196.37,2946.16],"6-21-15":[15.24,2851.96],"5-10-7":[-26.42,4373.52],"6-21-16":[351.22,2953.97],"6-21-17":[661.98,3100.13],"5-10-8":[-27.55,4292.74],"6-21-18":[-17.49,4387.58],"6-21-19":[-41.7,4242],"5-10-9":[-82.77,4387.58],"6-21-20":[-83.6,610.58],"6-21-21":[-89.13,1248.21],"5-10-10":[-90.02,1248.21],"6-21-22":[-93.13,-43.26],"6-21-23":[-95.04,-45.42],"5-10-11":[-95.18,-43.26],"6-21-24":[-95.32,-46.3],"6-21-25":[-94.74,-45.23],"5-10-12":[-95.41,-44.61],"6-21-26":[-91.98,-43.77],"6-21-27":[-87.81,-40.96],"5-10-13":[-91.98,-39.48],"6-21-28":[-82.67,-36.11],"6-21-29":[-71.2,-30.73],"5-10-14":[-82.67,-28.53],"6-21-30":[-63.31,-26.83],"6-21-31":[-54.81,-22.8],"5-10-15":[-63.31,-20.85],"6-21-32":[-47.82,-18.67],"6-21-33":[-38.41,-15.13],"5-10-16":[-47.82,-14.29],"6-21-34":[-32.21,-12.89],"6-21-35":[-25.63,-9.33],"5-10-17":[-32.21,-9.33],"6-21-36":[-19.3,-6.07],"6-21-37":[-14.54,-4.67],"5-10-18":[-19.3,-4.67],"6-21-38":[-12.06,-4.21],"6-21-39":[-13.18,-4.21],"5-10-19":[-17.89,-4.21],"6-21-40":[-15.05,-5.08],"6-21-41":[-19.58,-6.52],"5-10-20":[-21.61,-5.08],"6-21-42":[-21.17,-9.26],"6-21-43":[-22.89,-10.44],"5-10-21":[-23.83,-9.26],"6-21-44":[-24.5,-11.31],"6-21-45":[-26.05,-12.01],"5-10-22":[-26.05,-11.26],"6-21-46":[-26.03,-11.96],"6-21-47":[-24,-10.76],"5-10-23":[-26.03,-10.76],"6-21-48":[-22.24,-10.03],"6-21-49":[-21.6,-9.78],"5-10-24":[-23.65,-9.78],"6-21-50":[-23.2,-10.14],"6-21-51":[-31.43,-11.33],"5-10-25":[-35.46,-10.14],"6-21-52":[-42.02,-14.72],"6-21-53":[-56.28,-21.16],"5-10-26":[-59.19,-14.72],"6-21-54":[-63.59,-26.87],"6-21-55":[-71.43,-31.11],"5-10-27":[-73.37,-26.87],"6-21-56":[-74.31,-34.39],"6-21-57":[-79.17,-34.74],"5-10-28":[-84.12,-34.39],"6-21-58":[-75.47,1699.95],"6-21-59":[1495.5,2538.05],"5-10-29":[-79.02,2538.05],"6-21-60":[1062.99,1626.41],"6-21-61":[869.71,1241.73],"5-10-30":[812.01,1626.41],"6-21-62":[1025.91,2638.67],"6-21-63":[-29.63,2874.63],"5-10-31":[-29.63,2878.57],"6-22-0":[12.8,29.12],"6-22-1":[11.43,30.77],"6-22-2":[2.33,22.89],"6-22-3":[-2.3,5.53],"6-22-4":[-15.36,459.75],"6-22-5":[-28.86,707.55],"6-22-6":[-33.69,562.23],"6-22-7":[-36.83,561.11],"6-22-8":[106.74,731.19],"6-22-9":[124.49,633.28],"6-22-10":[-20.19,980.63],"6-22-11":[221.72,953.84],"6-22-12":[291.67,1945.45],"6-22-13":[407.7,3751.07],"6-22-14":[373.13,3467.23],"6-22-15":[143.66,2981.68],"6-22-16":[498.91,2953.81],"6-22-17":[1005.33,3455.03],"6-22-18":[-109.13,3616.13],"6-22-19":[-115.5,3677.07],"6-22-20":[-106.82,3055.54],"6-22-21":[-87.07,2579.5],"6-22-22":[-90.86,227.36],"6-22-23":[-93.31,-36.74],"6-22-24":[-93.47,-43.31],"6-22-25":[-92.56,-42.61],"6-22-26":[-90.46,-41.08],"6-22-27":[-87.11,-38.63],"6-22-28":[-81.94,-34.92],"6-22-29":[-71.11,-31.11],"6-22-30":[-63.37,-27.03],"6-22-31":[-54.82,-23.61],"6-22-32":[-48,-19.66],"6-22-33":[-38.67,-15.78],"6-22-34":[-32.33,-12.28],"6-22-35":[-25.13,-8],"6-22-36":[-18.53,-4.62],"6-22-37":[-11.89,-3.04],"6-22-38":[-9.24,-2.78],"6-22-39":[-10.03,-2.97],"6-22-40":[-12.55,-3.88],"6-22-41":[-18.46,-5.52],"6-22-42":[-20.42,-8.14],"6-22-43":[-22.66,-9.88],"6-22-44":[-24.44,-11.12],"6-22-45":[-25.51,-11.47],"6-22-46":[-25.48,-11.33],"6-22-47":[-23.5,-10.26],"6-22-48":[-21.38,-9.66],"6-22-49":[-20.27,-9.52],"6-22-50":[-22.59,-10.1],"6-22-51":[-29.7,-11.32],"6-22-52":[-41.54,-14.53],"6-22-53":[-53.67,-21.14],"6-22-54":[-61.27,-25.86],"6-22-55":[-68.78,-29.95],"6-22-56":[-72.33,-32.84],"6-22-57":[-76.5,-32.9],"6-22-58":[-76.53,3383.56],"6-22-59":[1286.48,3626.49],"6-22-60":[1241.72,1694.94],"6-22-61":[987.52,1432.98],"6-22-62":[1168.67,2576.08],"6-22-63":[-29.54,2863.29],"6-23-0":[12.92,29.14],"6-23-1":[11.53,30.89],"5-11-0":[11.43,30.89],"6-23-2":[2.57,24.53],"6-23-3":[-2.86,9.47],"5-11-1":[-2.86,24.53],"4-5-0":[-7.48,30.89],"6-23-4":[-17.92,409.2],"6-23-5":[-35.37,754.53],"5-11-2":[-35.37,754.53],"6-23-6":[-35.77,628.59],"6-23-7":[-51.79,437.77],"5-11-3":[-51.79,628.59],"4-5-1":[-51.79,842.66],"3-2-0":[-51.79,842.66],"6-23-8":[212,620.34],"6-23-9":[126.79,595],"5-11-4":[106.74,731.19],"6-23-10":[-25.96,952.89],"6-23-11":[181.68,969.04],"5-11-5":[-25.96,980.63],"4-5-2":[-25.96,2410.7],"6-23-12":[362.56,1217.71],"6-23-13":[599.34,3152.73],"5-11-6":[291.67,3751.07],"6-23-14":[584.02,3396.83],"6-23-15":[496.5,3385.15],"5-11-7":[143.66,3467.23],"4-5-3":[-26.42,4373.52],"3-2-1":[-259.61,4373.52],"6-23-16":[739.26,3846.98],"6-23-17":[1261.06,3659.45],"5-11-8":[498.91,3846.98],"6-23-18":[342.66,3960.27],"6-23-19":[53.25,2781.72],"5-11-9":[-115.5,3960.27],"4-5-4":[-115.5,4387.58],"6-23-20":[-43.42,2074.25],"6-23-21":[-53.91,2324.4],"5-11-10":[-106.82,3055.54],"6-23-22":[-86.07,1902.28],"6-23-23":[-86.2,-37.16],"5-11-11":[-93.31,1902.28],"4-5-5":[-106.82,3055.54],"3-2-2":[-115.5,4387.58],"6-23-24":[-86.54,-38.53],"6-23-25":[-85.65,238.06],"5-11-12":[-93.47,238.06],"6-23-26":[-84.32,-36.65],"6-23-27":[-80.64,-34.81],"5-11-13":[-90.46,-34.81],"4-5-6":[-95.41,238.06],"6-23-28":[-76.59,-32.08],"6-23-29":[-68.37,-29.04],"5-11-14":[-81.94,-29.04],"6-23-30":[-61.8,-25.29],"6-23-31":[-52.78,-21.98],"5-11-15":[-63.37,-21.98],"4-5-7":[-82.67,-20.85],"3-2-3":[-95.41,238.06],"6-23-32":[-46.8,-18.42],"6-23-33":[-38.04,-15],"5-11-16":[-48,-15],"6-23-34":[-31.41,-10.65],"6-23-35":[-23.03,-6.84],"5-11-17":[-32.33,-6.84],"4-5-8":[-48,-6.84],"6-23-36":[-15.57,-3.94],"6-23-37":[-8.42,-2.35],"5-11-18":[-18.53,-2.35],"6-23-38":[-5.83,-1.99],"6-23-39":[-7.6,-2.19],"5-11-19":[-10.03,-1.99],"4-5-9":[-19.3,-1.99],"3-2-4":[-48,-1.99],"6-23-40":[-10.38,-3.43],"6-23-41":[-16.03,-5],"5-11-20":[-18.46,-3.43],"6-23-42":[-19.19,-6.88],"6-23-43":[-22.06,-9.07],"5-11-21":[-22.66,-6.88],"4-5-10":[-23.83,-3.43],"6-23-44":[-22.86,-10.1],"6-23-45":[-23.63,-10.53],"5-11-22":[-25.51,-10.1],"6-23-46":[-23.44,-10.4],"6-23-47":[-22.17,-9.8],"5-11-23":[-25.48,-9.8],"4-5-11":[-26.05,-9.8],"3-2-5":[-30.38,395.5],"6-23-48":[-20.39,-9.35],"6-23-49":[-21.17,-9.35],"5-11-24":[-21.38,-9.35],"6-23-50":[-23.21,-10.18],"6-23-51":[-30.13,-11.53],"5-11-25":[-30.13,-10.1],"4-5-12":[-35.46,-9.35],"6-23-52":[-43.45,-14.72],"6-23-53":[-51.53,-21.48],"5-11-26":[-53.67,-14.53],"6-23-54":[-58.95,-25.37],"6-23-55":[-65.3,-28.82],"5-11-27":[-68.78,-25.37],"4-5-13":[-73.37,-14.53],"3-2-6":[-88.41,-9.35],"6-23-56":[-69.37,-31.18],"6-23-57":[-72.56,-32.31],"5-11-28":[-76.5,-31.18],"6-23-58":[-73.42,2010.01],"6-23-59":[1105.43,2194.6],"5-11-29":[-76.53,3626.49],"4-5-14":[-84.12,3626.49],"6-23-60":[1418.33,1763.02],"6-23-61":[1252.11,1638.58],"5-11-30":[987.52,1763.02],"6-23-62":[1432.97,2755.16],"6-23-63":[-29.54,2834.96],"5-11-31":[-29.54,2863.29],"4-5-15":[-29.63,2878.57],"3-2-7":[-102.31,3682.63],"6-24-0":[13.08,29.1],"6-24-1":[12.77,30.89],"6-24-2":[3.36,25.8],"6-24-3":[-3.5,11.12],"6-24-4":[-19.26,404.18],"6-24-5":[-38.9,404.18],"6-24-6":[-40.02,637.43],"6-24-7":[-57.55,369.52],"6-24-8":[70.59,618.66],"6-24-9":[123.35,643.83],"6-24-10":[-27.38,442.7],"6-24-11":[174.59,841.05],"6-24-12":[373.57,849.8],"6-24-13":[495.56,1071.09],"6-24-14":[572.57,2114.96],"6-24-15":[720.4,3889.28],"6-24-16":[1325.33,4191.26],"6-24-17":[1258.65,4109.88],"6-24-18":[857.52,3690.6],"6-24-19":[364.31,3824.21],"6-24-20":[-26.57,3235.29],"6-24-21":[-39.57,2589.58],"6-24-22":[-71.54,1702.94],"6-24-23":[-79.57,2045.21],"6-24-24":[-78.3,-33.29],"6-24-25":[-77.08,268.06],"6-24-26":[-75.28,-31.52],"6-24-27":[-72.83,-29.62],"6-24-28":[-69.63,-28.02],"6-24-29":[-63.34,-25.65],"6-24-30":[-58.09,-23.11],"6-24-31":[-49.64,-20.2],"6-24-32":[-43.76,-17.27],"6-24-33":[-35.9,-13.42],"6-24-34":[-29.87,-9.91],"6-24-35":[-20.23,-6.43],"6-24-36":[-13.61,-3.86],"6-24-37":[-7.43,-2.32],"6-24-38":[-4.95,-1.94],"6-24-39":[-7.06,-2.13],"6-24-40":[-9.67,-3.32],"6-24-41":[-13.81,-4.7],"6-24-42":[-17.75,-6.09],"6-24-43":[-20.18,-8.32],"6-24-44":[-21.4,-9.34],"6-24-45":[-21.96,-9.83],"6-24-46":[-21.96,-10],"6-24-47":[-20.69,-9.66],"6-24-48":[-19.53,-9.43],"6-24-49":[-21.86,-9.46],"6-24-50":[-23.63,-10.52],"6-24-51":[-30.13,-11.8],"6-24-52":[-42.54,-14.64],"6-24-53":[-50.73,-20.34],"6-24-54":[-56.68,-24.59],"6-24-55":[-62.37,-27.15],"6-24-56":[-67.75,-29.51],"6-24-57":[-69.33,-30.92],"6-24-58":[-67.75,2438.84],"6-24-59":[821.95,3441.15],"6-24-60":[1593.3,1871.81],"6-24-61":[1391.7,1816.7],"6-24-62":[1638.57,2575.14],"6-24-63":[-29.54,2813.19],"6-25-0":[13.28,29.06],"6-25-1":[12.99,30.67],"5-12-0":[12.77,30.89],"6-25-2":[4.33,27.3],"6-25-3":[-3.6,11.88],"5-12-1":[-3.6,27.3],"6-25-4":[-18.48,293.97],"6-25-5":[-39.75,334.46],"5-12-2":[-39.75,404.18],"6-25-6":[-44.82,387.52],"6-25-7":[-63.28,308.5],"5-12-3":[-63.28,637.43],"6-25-8":[-63.06,598.61],"6-25-9":[119.88,600.19],"5-12-4":[-63.06,643.83],"6-25-10":[-28.15,610.76],"6-25-11":[175.34,613.75],"5-12-5":[-28.15,841.05],"6-25-12":[357,741.32],"6-25-13":[154.24,852.58],"5-12-6":[154.24,1071.09],"6-25-14":[529.75,2093.28],"6-25-15":[667.15,3842.68],"5-12-7":[529.75,3889.28],"6-25-16":[1046.96,4204.45],"6-25-17":[1396.76,3751.43],"5-12-8":[1046.96,4204.45],"6-25-18":[1174.25,4348.39],"6-25-19":[1345.74,3458.34],"5-12-9":[364.31,4348.39],"6-25-20":[852.06,3295.69],"6-25-21":[84.61,3091.23],"5-12-10":[-39.57,3295.69],"6-25-22":[-38.22,3268.31],"6-25-23":[-66.41,2081.23],"5-12-11":[-79.57,3268.31],"6-25-24":[-67.95,-28.52],"6-25-25":[-66.59,-26.44],"5-12-12":[-78.3,268.06],"6-25-26":[-65.05,-25.22],"6-25-27":[-63.06,-24.16],"5-12-13":[-75.28,-24.16],"6-25-28":[-59.26,-15.52],"6-25-29":[-54.35,-22.31],"5-12-14":[-69.63,-15.52],"6-25-30":[-50.44,-20.5],"6-25-31":[-45,-18.74],"5-12-15":[-58.09,-18.74],"6-25-32":[-39.97,-16.22],"6-25-33":[-33.52,-12.95],"5-12-16":[-43.76,-12.95],"6-25-34":[-26.73,-9.78],"6-25-35":[-19.19,-6.51],"5-12-17":[-29.87,-6.43],"6-25-36":[-14.52,-4.01],"6-25-37":[-8.87,-2.5],"5-12-18":[-14.52,-2.32],"6-25-38":[-6.34,-2.18],"6-25-39":[-6.84,-2.3],"5-12-19":[-7.06,-1.94],"6-25-40":[-9.41,-3.32],"6-25-41":[-32.1,501.96],"5-12-20":[-32.1,501.96],"6-25-42":[-16.08,-5.36],"6-25-43":[-18.48,-7.5],"5-12-21":[-20.18,-5.36],"6-25-44":[-19.58,-8.5],"6-25-45":[-20.51,-9.34],"5-12-22":[-21.96,-8.5],"6-25-46":[-20.66,-9.34],"6-25-47":[-19.83,-8.98],"5-12-23":[-21.96,-8.98],"6-25-48":[-19.6,-9.09],"6-25-49":[-22.09,-9.67],"5-12-24":[-22.09,-9.09],"6-25-50":[-24.31,-10.8],"6-25-51":[-29.53,-11.99],"5-12-25":[-30.13,-10.52],"6-25-52":[-38.65,-14.61],"6-25-53":[-48.88,-19.4],"5-12-26":[-50.73,-14.61],"6-25-54":[-53.27,-23.18],"6-25-55":[-58.77,-25.88],"5-12-27":[-62.37,-23.18],"6-25-56":[-65.35,-28.74],"6-25-57":[-65.63,-29.51],"5-12-28":[-69.33,-28.74],"6-25-58":[-63.65,821.96],"6-25-59":[726.87,1676.69],"5-12-29":[-67.75,3441.15],"6-25-60":[1630.88,1996.28],"6-25-61":[1569.89,1996.28],"5-12-30":[1391.7,1996.28],"6-25-62":[1816.69,2606.34],"6-25-63":[-29.54,2795.26],"5-12-31":[-29.54,2813.19],"6-26-0":[13.54,29.14],"6-26-1":[13.94,30.48],"6-26-2":[5.28,27.87],"6-26-3":[-3.32,281.71],"6-26-4":[-18.48,308.77],"6-26-5":[-40.42,381.74],"6-26-6":[-46.86,317.75],"6-26-7":[-64.69,215.89],"6-26-8":[-2.27,571.32],"6-26-9":[116.78,565.77],"6-26-10":[-32.41,599.94],"6-26-11":[208.28,611.84],"6-26-12":[299.93,731.39],"6-26-13":[318.89,749.4],"6-26-14":[470.62,993.24],"6-26-15":[555.47,1446.2],"6-26-16":[932.52,3114.6],"6-26-17":[1209.86,4338.56],"6-26-18":[1296.53,4383.25],"6-26-19":[1070.65,3998.98],"6-26-20":[855.68,3617.02],"6-26-21":[658.3,2970.04],"6-26-22":[417.64,3258.01],"6-26-23":[-28.6,3307.88],"6-26-24":[-62.73,2734.41],"6-26-25":[-59.49,2861.69],"6-26-26":[-52.9,-18.54],"6-26-27":[-50.46,-18.19],"6-26-28":[-48.34,-18.13],"6-26-29":[-46.35,-18.06],"6-26-30":[-44.41,-17.73],"6-26-31":[-40.44,-17.02],"6-26-32":[-37.32,-15.49],"6-26-33":[-31.86,-12.9],"6-26-34":[-26.47,-10],"6-26-35":[-21.25,-7.31],"6-26-36":[-17.78,-4.66],"6-26-37":[-11.76,-3.18],"6-26-38":[-7.87,-2.8],"6-26-39":[-6.79,-2.9],"6-26-40":[-7.79,-2.88],"6-26-41":[-10.71,8.49],"6-26-42":[-14.63,-4.56],"6-26-43":[-16.88,-6.59],"6-26-44":[-18.57,-7.39],"6-26-45":[-19.41,-7.99],"6-26-46":[-19.51,-8.34],"6-26-47":[-18.58,-8.35],"6-26-48":[-19.11,-8.37],"6-26-49":[-22.08,-9.26],"6-26-50":[-24.14,-10.47],"6-26-51":[-29.38,-11.82],"6-26-52":[-38.33,-14.03],"6-26-53":[-46.19,-17.49],"6-26-54":[-51.2,-21.67],"6-26-55":[-57.5,-24.38],"6-26-56":[-63.64,-27.72],"6-26-57":[-62.82,189.45],"6-26-58":[-60.91,881.64],"6-26-59":[740.64,1748.55],"6-26-60":[1676.68,2076.65],"6-26-61":[1756.34,2181.07],"6-26-62":[1948.76,2606.49],"6-26-63":[-29.54,2777.84],"6-27-0":[13.6,29.49],"6-27-1":[13.94,31.09],"5-13-0":[13.54,31.09],"6-27-2":[6.45,27.9],"6-27-3":[-0.42,320.5],"5-13-1":[-3.32,320.5],"4-6-0":[-3.6,320.5],"6-27-4":[-16.49,372.69],"6-27-5":[-40.21,294.13],"5-13-2":[-40.42,381.74],"6-27-6":[-53.85,132.2],"6-27-7":[-71.25,117.7],"5-13-3":[-71.25,317.75],"4-6-1":[-71.25,637.43],"6-27-8":[-10.85,325.53],"6-27-9":[25.92,428.65],"5-13-4":[-10.85,571.32],"6-27-10":[-36.63,567.14],"6-27-11":[275.4,510.84],"5-13-5":[-36.63,611.84],"4-6-2":[-63.06,841.05],"6-27-12":[177.93,779.83],"6-27-13":[230.46,797.9],"5-13-6":[177.93,797.9],"6-27-14":[353.23,843.62],"6-27-15":[486.44,1208.11],"5-13-7":[353.23,1446.2],"4-6-3":[154.24,3889.28],"6-27-16":[469.53,2194.75],"6-27-17":[827.22,1798.51],"5-13-8":[469.53,4338.56],"6-27-18":[821.28,2635.83],"6-27-19":[656.62,2159.53],"5-13-9":[656.62,4383.25],"4-6-4":[364.31,4383.25],"6-27-20":[633.52,1925.95],"6-27-21":[300.28,2697.84],"5-13-10":[300.28,3617.02],"6-27-22":[335.31,2999.92],"6-27-23":[921.89,3424.3],"5-13-11":[-28.6,3424.3],"4-6-5":[-79.57,3617.02],"6-27-24":[401.21,3479.94],"6-27-25":[-46.8,4234.29],"5-13-12":[-62.73,4234.29],"6-27-26":[-39.05,-13],"6-27-27":[-35.28,-12.54],"5-13-13":[-52.9,-12.54],"4-6-6":[-78.3,4234.29],"6-27-28":[-35.2,-12.85],"6-27-29":[-35.34,-13.41],"5-13-14":[-48.34,-12.85],"6-27-30":[-35.17,-14.09],"6-27-31":[-34.89,-14.93],"5-13-15":[-44.41,-14.09],"4-6-7":[-69.63,-12.85],"6-27-32":[-33.67,-14.66],"6-27-33":[-30.24,-13.29],"5-13-16":[-37.32,-12.9],"6-27-34":[-28.13,-11.02],"6-27-35":[-24.66,-9.21],"5-13-17":[-28.13,-7.31],"4-6-8":[-43.76,-6.43],"6-27-36":[-20.45,-6.32],"6-27-37":[-14.71,-4.11],"5-13-18":[-20.45,-3.18],"6-27-38":[-10.7,-3.46],"6-27-39":[-7.82,-2.95],"5-13-19":[-10.7,-2.8],"4-6-9":[-20.45,-1.94],"6-27-40":[-6.36,-2.12],"6-27-41":[-8.91,-2.07],"5-13-20":[-10.71,8.49],"6-27-42":[-12.62,-3.64],"6-27-43":[-14.88,-5.64],"5-13-21":[-16.88,-3.64],"4-6-10":[-32.1,501.96],"6-27-44":[-15.67,-6.12],"6-27-45":[-17.16,-6.68],"5-13-22":[-19.41,-6.12],"6-27-46":[-17.14,-7.46],"6-27-47":[-16.64,-6.9],"5-13-23":[-19.51,-6.9],"4-6-11":[-21.96,-6.12],"6-27-48":[-18.13,-7.16],"6-27-49":[-20.76,-8.23],"5-13-24":[-22.08,-7.16],"6-27-50":[-23.03,-9.75],"6-27-51":[-27.57,-10.56],"5-13-25":[-29.38,-9.75],"4-6-12":[-30.13,-7.16],"6-27-52":[-33.04,-12.47],"6-27-53":[-43.05,-16],"5-13-26":[-46.19,-12.47],"6-27-54":[-47.85,-20.49],"6-27-55":[-55.33,-23.04],"5-13-27":[-57.5,-20.49],"4-6-13":[-62.37,-12.47],"6-27-56":[-59.57,-26.31],"6-27-57":[-57.3,647.09],"5-13-28":[-63.64,647.09],"6-27-58":[-55.25,899.06],"6-27-59":[799.61,1803.34],"5-13-29":[-60.91,1803.34],"4-6-14":[-69.33,3441.15],"6-27-60":[1748.54,2159.56],"6-27-61":[1868.06,2197.16],"5-13-30":[1676.68,2197.16],"6-27-62":[2095.95,2581.41],"6-27-63":[-29.54,2769.5],"5-13-31":[-29.54,2777.84],"4-6-15":[-29.54,2813.19],"6-28-0":[13.6,29.98],"6-28-1":[13.97,31.76],"6-28-2":[7.61,27.9],"6-28-3":[-0.98,311.23],"6-28-4":[-14.04,373.55],"6-28-5":[-35.5,302.69],"6-28-6":[-52.23,269.04],"6-28-7":[-71.46,37.53],"6-28-8":[-13.78,273.39],"6-28-9":[-36.74,404.25],"6-28-10":[-38.45,438.24],"6-28-11":[60.84,436.49],"6-28-12":[151.71,375.47],"6-28-13":[182.44,807.5],"6-28-14":[219.33,785.89],"6-28-15":[355.34,755.87],"6-28-16":[348.26,1090.39],"6-28-17":[415.18,1115.44],"6-28-18":[336.8,1003.31],"6-28-19":[247.09,1013.68],"6-28-20":[245.51,909.81],"6-28-21":[22.35,784.58],"6-28-22":[2.36,3697.19],"6-28-23":[-6.03,3685.36],"6-28-24":[-7.33,3903.97],"6-28-25":[-32.6,5379.65],"6-28-26":[-33.85,1685.03],"6-28-27":[-25.73,-8.02],"6-28-28":[-27.14,-9.26],"6-28-29":[-28.13,-9.53],"6-28-30":[-29.73,-10.39],"6-28-31":[-30.49,-11.78],"6-28-32":[-30.3,-13.08],"6-28-33":[-29.11,-13.91],"6-28-34":[-28.13,-12.68],"6-28-35":[-25.46,-10.25],"6-28-36":[-21.32,-7.52],"6-28-37":[-14.78,-5.33],"6-28-38":[-12.03,-4.05],"6-28-39":[-8.07,-2.41],"6-28-40":[-6.04,-1.06],"6-28-41":[-7.12,-1.06],"6-28-42":[-10.83,-2.79],"6-28-43":[-12.78,-4.7],"6-28-44":[-13.74,-5.3],"6-28-45":[-14.99,-5.28],"6-28-46":[-15.4,-5.56],"6-28-47":[-15.79,-5.29],"6-28-48":[-15.93,-5.65],"6-28-49":[-19.25,-6.88],"6-28-50":[-20.66,-7.71],"6-28-51":[-24.63,-9.26],"6-28-52":[-31.19,-11.53],"6-28-53":[-40.85,-14.84],"6-28-54":[-45.75,-18.97],"6-28-55":[-52.39,-21.7],"6-28-56":[-55.08,-24.38],"6-28-57":[-50.79,721.39],"6-28-58":[-51.45,799.62],"6-28-59":[687.23,1812.13],"6-28-60":[1803.33,2299.62],"6-28-61":[1923.59,2175.98],"6-28-62":[1878.69,2429.87],"6-28-63":[-29.54,2761.57],"6-29-0":[13.6,30.78],"6-29-1":[13.97,32.5],"5-14-0":[13.6,32.5],"6-29-2":[8.58,28.94],"6-29-3":[-0.22,604.78],"5-14-1":[-0.98,604.78],"6-29-4":[-10.79,424.86],"6-29-5":[-29.34,367.02],"5-14-2":[-35.5,424.86],"6-29-6":[-48.96,423.04],"6-29-7":[-71.03,188.06],"5-14-3":[-71.46,423.04],"6-29-8":[-71.03,258.97],"6-29-9":[-40.7,265.48],"5-14-4":[-71.03,404.25],"6-29-10":[-45.67,362.54],"6-29-11":[35.43,333.9],"5-14-5":[-45.67,438.24],"6-29-12":[69.29,353.36],"6-29-13":[176.64,297.08],"5-14-6":[69.29,807.5],"6-29-14":[185.4,507.51],"6-29-15":[216.94,624.77],"5-14-7":[185.4,785.89],"6-29-16":[248.19,602.11],"6-29-17":[227.87,668.28],"5-14-8":[227.87,1115.44],"6-29-18":[151.81,558.27],"6-29-19":[87.66,500.16],"5-14-9":[87.66,1013.68],"6-29-20":[11.41,489.46],"6-29-21":[-74.48,534.68],"5-14-10":[-74.48,909.81],"6-29-22":[-59.51,197.1],"6-29-23":[-60.32,1437.08],"5-14-11":[-60.32,3697.19],"6-29-24":[-52.89,3376.08],"6-29-25":[-16.39,5601.19],"5-14-12":[-52.89,5601.19],"6-29-26":[-23.21,3710.87],"6-29-27":[-17.72,-5.43],"5-14-13":[-33.85,3710.87],"6-29-28":[-18.29,-5.37],"6-29-29":[-20.02,-5.8],"5-14-14":[-28.13,-5.37],"6-29-30":[-22.85,-7.34],"6-29-31":[-25.68,-8.54],"5-14-15":[-30.49,-7.34],"6-29-32":[-27.33,-11.17],"6-29-33":[-28.21,-12.92],"5-14-16":[-30.3,-11.17],"6-29-34":[-27.93,-12.74],"6-29-35":[-25.57,-10.37],"5-14-17":[-28.13,-10.25],"6-29-36":[-21.38,-7.55],"6-29-37":[-14.75,-5.87],"5-14-18":[-21.38,-5.33],"6-29-38":[-12.1,-3.7],"6-29-39":[-7.93,-1.6],"5-14-19":[-12.1,-1.6],"6-29-40":[-4.73,-0.26],"6-29-41":[-5.16,-0.14],"5-14-20":[-7.12,-0.14],"6-29-42":[-8.49,-1.41],"6-29-43":[-11.27,-3.5],"5-14-21":[-12.78,-1.41],"6-29-44":[-11.15,-3.82],"6-29-45":[-11.69,-3.55],"5-14-22":[-14.99,-3.55],"6-29-46":[-12.81,-3.56],"6-29-47":[-11.24,-3.95],"5-14-23":[-15.79,-3.56],"6-29-48":[-12.87,-3.81],"6-29-49":[-15.22,-6.07],"5-14-24":[-19.25,-3.81],"6-29-50":[-18.28,-7.31],"6-29-51":[-22.81,-8.44],"5-14-25":[-24.63,-7.31],"6-29-52":[-28.28,-10.9],"6-29-53":[-37.41,-12.86],"5-14-26":[-40.85,-10.9],"6-29-54":[-42.1,-16.84],"6-29-55":[-48.36,-19.69],"5-14-27":[-52.39,-16.84],"6-29-56":[-54.2,-22.1],"6-29-57":[-47.44,695.16],"5-14-28":[-55.08,721.39],"6-29-58":[-44.62,1067.53],"6-29-59":[697.67,1825.18],"5-14-29":[-51.45,1825.18],"6-29-60":[1812.12,2484.31],"6-29-61":[1887.54,2200.25],"5-14-30":[1803.33,2484.31],"6-29-62":[1867.75,2364.99],"6-29-63":[-29.54,2744.46],"5-14-31":[-29.54,2761.57],"6-30-0":[13.6,31.47],"6-30-1":[14.83,32.77],"6-30-2":[9.25,30.01],"6-30-3":[1.4,1609.72],"6-30-4":[-8.83,717.95],"6-30-5":[-23.57,477.26],"6-30-6":[-38.7,559.29],"6-30-7":[-70.31,433.78],"6-30-8":[-70.31,458.53],"6-30-9":[-96.36,174.74],"6-30-10":[-99.28,106.11],"6-30-11":[-98.53,228.76],"6-30-12":[-14.62,294.27],"6-30-13":[195.65,456.57],"6-30-14":[57.99,564.92],"6-30-15":[181.53,584.49],"6-30-16":[173.46,471.28],"6-30-17":[26.59,446.09],"6-30-18":[123.08,490.81],"6-30-19":[2.26,806.41],"6-30-20":[-9.4,204.36],"6-30-21":[-55.44,125.4],"6-30-22":[-65.74,-25.61],"6-30-23":[-65.69,-25.42],"6-30-24":[-54.87,-14.04],"6-30-25":[-36.51,2490.71],"6-30-26":[-21.02,2540.82],"6-30-27":[-19.24,-2.77],"6-30-28":[-11.27,-1.84],"6-30-29":[-14.57,-2.28],"6-30-30":[-17.25,-4.28],"6-30-31":[-22.13,-5.31],"6-30-32":[-25.32,-8.63],"6-30-33":[-27.51,-11.24],"6-30-34":[-27.51,-12.14],"6-30-35":[-24.98,-9.83],"6-30-36":[-20.94,-7.4],"6-30-37":[-14.81,-5.53],"6-30-38":[-11.87,-2.8],"6-30-39":[-6.86,-0.38],"6-30-40":[-3,1.26],"6-30-41":[-2.62,1.53],"6-30-42":[-6.47,0.16],"6-30-43":[-9.48,-1.41],"6-30-44":[-9.48,-2.83],"6-30-45":[-7.66,-2.16],"6-30-46":[-9.07,-1.93],"6-30-47":[-9.84,-2.8],"6-30-48":[-11.72,-2.88],"6-30-49":[-14.44,-4.07],"6-30-50":[-16.72,-6.13],"6-30-51":[-22.37,-7.94],"6-30-52":[-24.41,-9.85],"6-30-53":[-33.43,-11.71],"6-30-54":[-38.58,-14.81],"6-30-55":[-43.96,-16.85],"6-30-56":[-52.81,-19.97],"6-30-57":[-46.56,310.04],"6-30-58":[-43.55,1562.01],"6-30-59":[790.59,1824.22],"6-30-60":[1816.77,2275.03],"6-30-61":[1789.45,2180.52],"6-30-62":[1867.26,2328.81],"6-30-63":[-29.54,2744.46],"6-31-0":[13.6,32.23],"6-31-1":[15.06,32.84],"5-15-0":[13.6,32.84],"6-31-2":[10.78,881.84],"6-31-3":[4.92,2250.64],"5-15-1":[1.4,2250.64],"4-7-0":[-0.98,2250.64],"6-31-4":[-5.46,1374.08],"6-31-5":[-22.85,583.45],"5-15-2":[-23.57,1374.08],"6-31-6":[-45.86,413.34],"6-31-7":[-57.79,429.71],"5-15-3":[-70.31,559.29],"4-7-1":[-71.46,1374.08],"3-3-0":[-71.46,2250.64],"6-31-8":[-36.15,577.62],"6-31-9":[-96.7,282.12],"5-15-4":[-96.7,577.62],"6-31-10":[-99.12,-46.98],"6-31-11":[-98.49,190.58],"5-15-5":[-99.28,228.76],"4-7-2":[-99.28,577.62],"6-31-12":[-15.94,324],"6-31-13":[204.84,447.15],"5-15-6":[-15.94,456.57],"6-31-14":[150.72,671.12],"6-31-15":[147.71,604.9],"5-15-7":[57.99,671.12],"4-7-3":[-15.94,807.5],"3-3-1":[-99.28,3889.28],"2-1-0":[-259.61,4373.52],"6-31-16":[142.69,422.75],"6-31-17":[82.02,300.32],"5-15-8":[26.59,471.28],"6-31-18":[37.49,509.53],"6-31-19":[3.75,590.45],"5-15-9":[2.26,806.41],"4-7-4":[2.26,1115.44],"6-31-20":[-28.13,146.09],"6-31-21":[-51.46,78.7],"5-15-10":[-55.44,204.36],"6-31-22":[-60.53,-24.95],"6-31-23":[-60.55,-17],"5-15-11":[-65.74,-17],"4-7-5":[-74.48,3697.19],"3-3-2":[-79.57,4383.25],"6-31-24":[-51.3,129.8],"6-31-25":[-28.09,2495.76],"5-15-12":[-54.87,2495.76],"6-31-26":[-31.81,4217.93],"6-31-27":[-39.22,1667.28],"5-15-13":[-39.22,4217.93],"4-7-6":[-54.87,5601.19],"6-31-28":[-3.69,3.56],"6-31-29":[-7.94,1.79],"5-15-14":[-14.57,3.56],"6-31-30":[-10.64,-0.95],"6-31-31":[-23.38,1700.45],"5-15-15":[-23.38,1700.45],"4-7-7":[-30.49,1700.45],"3-3-3":[-78.3,5601.19],"2-1-1":[-115.5,5601.19],"1-0-0":[-317.19,6207.28],"6-31-32":[-321.59,1684.42],"6-31-33":[-25.17,-8.12],"5-15-16":[-321.59,1684.42],"6-31-34":[-25.23,-10.22],"6-31-35":[-23.47,-8.63],"5-15-17":[-27.51,-8.63],"4-7-8":[-321.59,1684.42],"6-31-36":[-19.5,-5.98],"6-31-37":[-14.17,-4.58],"5-15-18":[-20.94,-4.58],"6-31-38":[-10.89,-1.76],"6-31-39":[-4.99,1.04],"5-15-19":[-11.87,1.04],"4-7-9":[-21.38,1.04],"3-3-4":[-321.59,1684.42],"6-31-40":[-0.46,3.59],"6-31-41":[0.15,3.57],"5-15-20":[-3,3.59],"6-31-42":[-1.87,3.33],"6-31-43":[-5.77,-0.19],"5-15-21":[-9.48,3.33],"4-7-10":[-12.78,3.59],"6-31-44":[-6.17,-2.1],"6-31-45":[-5.45,-1.19],"5-15-22":[-9.48,-1.19],"6-31-46":[-4.53,-0.73],"6-31-47":[-5.48,-0.93],"5-15-23":[-9.84,-0.73],"4-7-11":[-15.79,-0.73],"3-3-5":[-32.1,501.96],"2-1-2":[-321.59,1684.42],"6-31-48":[-7.3,-1.03],"6-31-49":[-11.96,-1.38],"5-15-24":[-14.44,-1.03],"6-31-50":[-15.08,-4.16],"6-31-51":[-19.15,-5.73],"5-15-25":[-22.37,-4.16],"4-7-12":[-24.63,-1.03],"6-31-52":[-21.76,-8.28],"6-31-53":[-29.28,-9.98],"5-15-26":[-33.43,-8.28],"6-31-54":[-34.04,-12.93],"6-31-55":[-39.77,-14.37],"5-15-27":[-43.96,-12.93],"4-7-13":[-52.39,-8.28],"3-3-6":[-62.37,-1.03],"6-31-56":[-43.43,1365.62],"6-31-57":[-44.81,282.19],"5-15-28":[-52.81,1365.62],"6-31-58":[-39.76,1267.01],"6-31-59":[957.9,1887.87],"5-15-29":[-43.55,1887.87],"4-7-14":[-55.08,1887.87],"6-31-60":[1730.62,2175.26],"6-31-61":[1639.46,1987.13],"5-15-30":[1639.46,2275.03],"6-31-62":[1752.65,2714.87],"6-31-63":[-29.54,2744.46],"5-15-31":[-29.54,2744.46],"4-7-15":[-29.54,2761.57],"3-3-7":[-69.33,3441.15],"2-1-3":[-102.31,3682.63],"1-0-1":[-321.59,3970.41],"6-32-0":[13.6,32.71],"6-32-1":[15.63,32.84],"6-32-2":[12.53,1148.73],"6-32-3":[3.54,1723.08],"6-32-4":[-3.48,1337.96],"6-32-5":[-22.64,684.11],"6-32-6":[-45.53,367.14],"6-32-7":[-63.11,395.57],"6-32-8":[-72.93,546.23],"6-32-9":[-93.99,248.1],"6-32-10":[-96.39,-44.47],"6-32-11":[-97.86,87.35],"6-32-12":[-57.46,240.44],"6-32-13":[116.07,415.1],"6-32-14":[116.17,599.34],"6-32-15":[138.68,568.7],"6-32-16":[-2.59,551.43],"6-32-17":[75.12,291.63],"6-32-18":[-24.24,294.32],"6-32-19":[4.68,321.49],"6-32-20":[-31.39,211.56],"6-32-21":[-63.34,90.38],"6-32-22":[-63.11,-25.22],"6-32-23":[-57.23,-7.65],"6-32-24":[-31.37,200.24],"6-32-25":[-33.45,1010.31],"6-32-26":[-35.51,3009.32],"6-32-27":[-28.36,2376.93],"6-32-28":[-3.22,10.91],"6-32-29":[-1.77,10.51],"6-32-30":[-4.68,6.74],"6-32-31":[-7.35,73.07],"6-32-32":[-18.67,716.38],"6-32-33":[-20.88,-4.49],"6-32-34":[-21.38,-6.53],"6-32-35":[-20.18,-6.02],"6-32-36":[-17.05,-4.75],"6-32-37":[-11.75,-2.76],"6-32-38":[-9,-0.28],"6-32-39":[-2.87,3.56],"6-32-40":[0.59,5.45],"6-32-41":[1.56,6.31],"6-32-42":[-0.2,5.55],"6-32-43":[-3.93,1.13],"6-32-44":[-5.26,-0.57],"6-32-45":[-4.78,-0.14],"6-32-46":[-2.44,1.43],"6-32-47":[-2.43,2.72],"6-32-48":[-2.64,1.56],"6-32-49":[-7.99,-0.1],"6-32-50":[-11.84,-1.81],"6-32-51":[-16.4,-4.23],"6-32-52":[-18.97,-6.57],"6-32-53":[-25.69,-8.31],"6-32-54":[-28.75,-11.31],"6-32-55":[-35.05,-12.68],"6-32-56":[-41.26,-14.17],"6-32-57":[-36.6,248.01],"6-32-58":[-36.6,1290.61],"6-32-59":[1072.47,2685.38],"6-32-60":[1460.89,2381.84],"6-32-61":[1444.34,1985.53],"6-32-62":[1435.21,2244.93],"6-32-63":[-29.54,2744.46],"6-33-0":[13.6,33.18],"6-33-1":[15.63,33.39],"5-16-0":[13.6,33.39],"6-33-2":[13.83,1617.96],"6-33-3":[3.54,1701.03],"5-16-1":[3.54,1723.08],"6-33-4":[-1.3,1540.67],"6-33-5":[-21.29,1009.47],"5-16-2":[-22.64,1540.67],"6-33-6":[-36.75,819.86],"6-33-7":[-62.77,557.56],"5-16-3":[-63.11,819.86],"6-33-8":[-72.83,444.35],"6-33-9":[-88.51,366.68],"5-16-4":[-93.99,546.23],"6-33-10":[-95.62,-42.25],"6-33-11":[-97.09,-45.96],"5-16-5":[-97.86,87.35],"6-33-12":[-96.12,205.42],"6-33-13":[26.23,323.91],"5-16-6":[-96.12,415.1],"6-33-14":[40.15,604.67],"6-33-15":[99.8,613.05],"5-16-7":[40.15,613.05],"6-33-16":[103.99,486.54],"6-33-17":[42.02,356.67],"5-16-8":[-2.59,551.43],"6-33-18":[73.98,611.43],"6-33-19":[-2.39,1256.4],"5-16-9":[-24.24,1256.4],"6-33-20":[-18.21,703.65],"6-33-21":[-62.86,133.72],"5-16-10":[-63.34,703.65],"6-33-22":[-63.05,-24.55],"6-33-23":[-54.77,-15.6],"5-16-11":[-63.11,-7.65],"6-33-24":[-55.01,38.89],"6-33-25":[-31.18,-5.73],"5-16-12":[-55.01,1010.31],"6-33-26":[-16.7,2458.87],"6-33-27":[-29.38,2108.97],"5-16-13":[-35.51,3009.32],"6-33-28":[-12.99,2165.37],"6-33-29":[3.88,21.34],"5-16-14":[-12.99,2165.37],"6-33-30":[-9.95,580.04],"6-33-31":[-3.66,9.28],"5-16-15":[-9.95,580.04],"6-33-32":[-8.84,4.83],"6-33-33":[-12.48,2.13],"5-16-16":[-20.88,716.38],"6-33-34":[-13.36,-2.74],"6-33-35":[-13.27,-2.88],"5-16-17":[-21.38,-2.74],"6-33-36":[-11.47,-2.69],"6-33-37":[-8.95,-0.74],"5-16-18":[-17.05,-0.74],"6-33-38":[-5.14,2.74],"6-33-39":[-0.29,8.08],"5-16-19":[-9,8.08],"6-33-40":[1.94,9.43],"6-33-41":[2.8,10.75],"5-16-20":[0.59,10.75],"6-33-42":[0.89,8.51],"6-33-43":[-0.58,5.53],"5-16-21":[-3.93,8.51],"6-33-44":[-2.13,3.55],"6-33-45":[-1.46,3.29],"5-16-22":[-5.26,3.55],"6-33-46":[-0.15,6.87],"6-33-47":[1.07,7.73],"5-16-23":[-2.44,7.73],"6-33-48":[-0.11,7.04],"6-33-49":[-2.91,4.01],"5-16-24":[-7.99,7.04],"6-33-50":[-7.73,0.65],"6-33-51":[-12.58,-2.01],"5-16-25":[-16.4,0.65],"6-33-52":[-14.99,-3.66],"6-33-53":[-21.95,-5.75],"5-16-26":[-25.69,-3.66],"6-33-54":[-24.52,-9.25],"6-33-55":[-29.3,-10.49],"5-16-27":[-35.05,-9.25],"6-33-56":[-30.53,-11.38],"6-33-57":[-34.54,-11.65],"5-16-28":[-41.26,248.01],"6-33-58":[-34.69,1304.63],"6-33-59":[163.09,4721.94],"5-16-29":[-36.6,4721.94],"6-33-60":[441.12,2555.4],"6-33-61":[1232.67,1732.44],"5-16-30":[441.12,2555.4],"6-33-62":[1251.83,2245.57],"6-33-63":[-29.54,2744.47],"5-16-31":[-29.54,2744.47],"6-34-0":[13.6,33.57],"6-34-1":[16.2,34.27],"6-34-2":[15.09,1823.83],"6-34-3":[5.88,1627.27],"6-34-4":[0.78,1272.1],"6-34-5":[-16.01,1913.68],"6-34-6":[-22.87,1056.55],"6-34-7":[-53.19,570.75],"6-34-8":[-67.08,613.97],"6-34-9":[-84.49,433.17],"6-34-10":[-91.94,-38.64],"6-34-11":[-96.06,-44.35],"6-34-12":[-95.88,171.79],"6-34-13":[-46,145.12],"6-34-14":[-3.04,594.92],"6-34-15":[117.38,614.36],"6-34-16":[124.05,432.14],"6-34-17":[17.53,436.84],"6-34-18":[94.64,1652.42],"6-34-19":[35.46,2004.7],"6-34-20":[-31.34,358.2],"6-34-21":[-56.91,76.45],"6-34-22":[-52.24,86.32],"6-34-23":[-53.41,678.56],"6-34-24":[-46.91,565.42],"6-34-25":[-34.3,19.57],"6-34-26":[-32.9,735.54],"6-34-27":[-24.67,729.46],"6-34-28":[-18.58,3818.31],"6-34-29":[-17.79,1199.76],"6-34-30":[0.98,213.98],"6-34-31":[2.04,21.13],"6-34-32":[2.12,20.08],"6-34-33":[-5.46,10.12],"6-34-34":[-5.77,0.8],"6-34-35":[-6.05,2.96],"6-34-36":[-5.94,2.96],"6-34-37":[-5.13,6.17],"6-34-38":[-1.3,9.8],"6-34-39":[1.64,14.13],"6-34-40":[4.23,15.17],"6-34-41":[4.47,14.04],"6-34-42":[3.4,12.02],"6-34-43":[3.4,11.01],"6-34-44":[1.55,10.91],"6-34-45":[1.48,9.3],"6-34-46":[1.54,11.81],"6-34-47":[3.72,12.77],"6-34-48":[2.17,11.75],"6-34-49":[0.41,7.88],"6-34-50":[-3.25,5.77],"6-34-51":[-6.93,1.5],"6-34-52":[-11.33,-1.44],"6-34-53":[-18.26,-3.74],"6-34-54":[-20.79,-6.34],"6-34-55":[-25.29,-7.54],"6-34-56":[-27.01,-9.25],"6-34-57":[-33.98,-10.94],"6-34-58":[-34.8,1241.13],"6-34-59":[-52.36,1732.84],"6-34-60":[-52.36,2250.43],"6-34-61":[873,1480.75],"6-34-62":[1247.41,2251.13],"6-34-63":[-29.54,2745.47],"6-35-0":[13.6,34.16],"6-35-1":[16.51,35.76],"5-17-0":[13.6,35.76],"6-35-2":[16.38,1923.59],"6-35-3":[9.49,2313.91],"5-17-1":[5.88,2313.91],"4-8-0":[3.54,2313.91],"6-35-4":[3.3,2252.73],"6-35-5":[-8.04,1712.44],"5-17-2":[-16.01,2252.73],"6-35-6":[-16.63,1559.44],"6-35-7":[-53.78,272.32],"5-17-3":[-53.78,1559.44],"4-8-1":[-63.11,2252.73],"6-35-8":[-65.49,185.61],"6-35-9":[-76.1,184.52],"5-17-4":[-84.49,613.97],"6-35-10":[-88.72,293.27],"6-35-11":[-92.71,81.87],"5-17-5":[-96.06,293.27],"4-8-2":[-97.86,613.97],"6-35-12":[-92.66,123.7],"6-35-13":[-45.82,181.36],"5-17-6":[-95.88,181.36],"6-35-14":[-26.92,536.17],"6-35-15":[122.02,651.7],"5-17-7":[-26.92,651.7],"4-8-3":[-96.12,651.7],"6-35-16":[27.96,701.76],"6-35-17":[-8.6,951.43],"5-17-8":[-8.6,951.43],"6-35-18":[-44.79,1713.99],"6-35-19":[-37.13,1476.72],"5-17-9":[-44.79,2004.7],"4-8-4":[-44.79,2004.7],"6-35-20":[-74.33,139.84],"6-35-21":[-74.18,28.94],"5-17-10":[-74.33,358.2],"6-35-22":[-68.27,63.37],"6-35-23":[-53.75,293.76],"5-17-11":[-68.27,678.56],"4-8-5":[-74.33,703.65],"6-35-24":[-62.66,1104.62],"6-35-25":[-46.42,14.26],"5-17-12":[-62.66,1104.62],"6-35-26":[-24.54,8.26],"6-35-27":[-12.35,357.63],"5-17-13":[-32.9,735.54],"4-8-6":[-62.66,3009.32],"6-35-28":[-9.05,1960.73],"6-35-29":[-38,1563.96],"5-17-14":[-38,3818.31],"6-35-30":[10.56,29.2],"6-35-31":[-34,2816.32],"5-17-15":[-34,2816.32],"4-8-7":[-38,3818.31],"6-35-32":[-39.36,6286.78],"6-35-33":[-56.73,4458.62],"5-17-16":[-56.73,6286.78],"6-35-34":[-63.32,4118.74],"6-35-35":[-8.38,458.91],"5-17-17":[-63.32,4118.74],"4-8-8":[-63.32,6286.78],"6-35-36":[-1.45,18],"6-35-37":[2.19,21.77],"5-17-18":[-5.94,21.77],"6-35-38":[3.78,22.14],"6-35-39":[5.81,20.12],"5-17-19":[-1.3,22.14],"4-8-9":[-17.05,22.14],"6-35-40":[6.54,19.83],"6-35-41":[-22.92,470.08],"5-17-20":[-22.92,470.08],"6-35-42":[5.5,19.63],"6-35-43":[-88.44,1091.31],"5-17-21":[-88.44,1091.31],"4-8-10":[-88.44,1091.31],"6-35-44":[-23.76,1289.29],"6-35-45":[4.72,16.91],"5-17-22":[-23.76,1289.29],"6-35-46":[4.86,18.8],"6-35-47":[6.11,18.78],"5-17-23":[1.54,18.8],"4-8-11":[-23.76,1289.29],"6-35-48":[4.51,19.18],"6-35-49":[3.21,14.36],"5-17-24":[0.41,19.18],"6-35-50":[1.45,11.01],"6-35-51":[-2.17,8.59],"5-17-25":[-6.93,11.01],"4-8-12":[-16.4,19.18],"6-35-52":[-5.6,3.45],"6-35-53":[-12,-1.41],"5-17-26":[-18.26,3.45],"6-35-54":[-13.82,-3.08],"6-35-55":[-20.59,-4.15],"5-17-27":[-25.29,-3.08],"4-8-13":[-35.05,3.45],"6-35-56":[-21.6,-7],"6-35-57":[-30.21,327.46],"5-17-28":[-33.98,327.46],"6-35-58":[-30.73,1088.67],"6-35-59":[-49.4,1067.5],"5-17-29":[-52.36,1732.84],"4-8-14":[-52.36,4721.94],"6-35-60":[-49.4,1223.59],"6-35-61":[548.47,1388.03],"5-17-30":[-52.36,2250.43],"6-35-62":[1139.79,2260.72],"6-35-63":[-29.54,2745.47],"5-17-31":[-29.54,2745.47],"4-8-15":[-52.36,2745.47],"6-36-0":[13.6,34.61],"6-36-1":[16.93,36.8],"6-36-2":[17.48,2230.75],"6-36-3":[8.2,2258.08],"6-36-4":[6.48,1817.36],"6-36-5":[1.34,2118.71],"6-36-6":[-14.9,1862.67],"6-36-7":[-49.69,611.89],"6-36-8":[-62.21,282.83],"6-36-9":[-68.81,575.77],"6-36-10":[-79.91,428.02],"6-36-11":[-45.31,430.05],"6-36-12":[-47.68,408.97],"6-36-13":[-44.52,406.33],"6-36-14":[126.58,610.85],"6-36-15":[16.43,575.3],"6-36-16":[12.09,700.02],"6-36-17":[-45.25,927.51],"6-36-18":[-64.5,1201.61],"6-36-19":[-85.54,191.41],"6-36-20":[-89.06,-36.24],"6-36-21":[-93.16,-34.13],"6-36-22":[-90.89,29.15],"6-36-23":[-82.17,55.76],"6-36-24":[-67.36,1947.58],"6-36-25":[-49.86,2231.33],"6-36-26":[-37.01,0.98],"6-36-27":[-29.93,-2.92],"6-36-28":[-18.96,1449.86],"6-36-29":[-29.88,4212.67],"6-36-30":[-37.47,5414.88],"6-36-31":[-328.06,5809.48],"6-36-32":[167.64,5906.18],"6-36-33":[112.46,4149.93],"6-36-34":[77.11,5607.45],"6-36-35":[-116.39,6754.44],"6-36-36":[-49.49,5914.69],"6-36-37":[-7.04,824.13],"6-36-38":[10.05,32.11],"6-36-39":[9.18,30.01],"6-36-40":[9.06,28.91],"6-36-41":[9.77,29.26],"6-36-42":[8.85,27.55],"6-36-43":[7.85,26.75],"6-36-44":[8.15,25.78],"6-36-45":[8.09,22.48],"6-36-46":[8.44,23.14],"6-36-47":[9.17,22.91],"6-36-48":[7.17,22.45],"6-36-49":[4.69,22.45],"6-36-50":[4.05,19.43],"6-36-51":[1.95,10.14],"6-36-52":[-2.07,8.34],"6-36-53":[-5.89,2.43],"6-36-54":[-7.67,1],"6-36-55":[-16.43,-0.39],"6-36-56":[-17.96,4.83],"6-36-57":[-24.97,322.6],"6-36-58":[-25.5,1069.77],"6-36-59":[-46.79,1055.47],"6-36-60":[-49.8,832.48],"6-36-61":[240.99,1288.62],"6-36-62":[1054.14,2281.25],"6-36-63":[-29.54,2745.47],"6-37-0":[13.6,35.4],"6-37-1":[17.14,38.45],"5-18-0":[13.6,38.45],"6-37-2":[18.24,2437.47],"6-37-3":[7.27,2148.92],"5-18-1":[7.27,2437.47],"6-37-4":[7.89,1260.24],"6-37-5":[4.77,32.77],"5-18-2":[1.34,2118.71],"6-37-6":[-1.92,1808.19],"6-37-7":[-40.5,1101.49],"5-18-3":[-49.69,1862.67],"6-37-8":[-50.59,282.61],"6-37-9":[-60.82,642.27],"5-18-4":[-68.81,642.27],"6-37-10":[-29.59,648.16],"6-37-11":[-23.76,410.19],"5-18-5":[-79.91,648.16],"6-37-12":[-40.73,516.43],"6-37-13":[163.41,654.15],"5-18-6":[-47.68,654.15],"6-37-14":[225.34,700.01],"6-37-15":[-96.6,889.43],"5-18-7":[-96.6,889.43],"6-37-16":[-33.29,1597.57],"6-37-17":[-113.29,1241.62],"5-18-8":[-113.29,1597.57],"6-37-18":[-86.48,7.41],"6-37-19":[-97.81,-12.11],"5-18-9":[-97.81,1201.61],"6-37-20":[-102.6,-42.73],"6-37-21":[-100.62,-43.8],"5-18-10":[-102.6,-34.13],"6-37-22":[-95.92,-41.08],"6-37-23":[-92.86,26.27],"5-18-11":[-95.92,55.76],"6-37-24":[-83.2,1217.95],"6-37-25":[-62.64,2330.69],"5-18-12":[-83.2,2330.69],"6-37-26":[-56.44,-14.96],"6-37-27":[-48.4,871.95],"5-18-13":[-56.44,871.95],"6-37-28":[-49.02,5700.22],"6-37-29":[-23.52,3844.52],"5-18-14":[-49.02,5700.22],"6-37-30":[169,5315.89],"6-37-31":[170.25,3836.77],"5-18-15":[-328.06,5809.48],"6-37-32":[117.06,443.38],"6-37-33":[81.67,324.59],"5-18-16":[81.67,5906.18],"6-37-34":[90.99,2362.22],"6-37-35":[136.3,5683.59],"5-18-17":[-116.39,6754.44],"6-37-36":[213.99,5564.58],"6-37-37":[-123.53,5547.75],"5-18-18":[-123.53,5914.69],"6-37-38":[11.41,41.12],"6-37-39":[13.52,40.44],"5-18-19":[9.18,41.12],"6-37-40":[13.77,39.3],"6-37-41":[13.66,37.5],"5-18-20":[9.06,39.3],"6-37-42":[12.71,34.42],"6-37-43":[9.07,32.14],"5-18-21":[7.85,34.42],"6-37-44":[8.29,34.46],"6-37-45":[-18.71,1376.54],"5-18-22":[-18.71,1376.54],"6-37-46":[-29.59,1061.25],"6-37-47":[-7.31,1414.25],"5-18-23":[-29.59,1414.25],"6-37-48":[-36.85,4026.29],"6-37-49":[-269.44,3587.09],"5-18-24":[-269.44,4026.29],"6-37-50":[-96.77,2789.91],"6-37-51":[-222.29,1172.63],"5-18-25":[-222.29,2789.91],"6-37-52":[1.79,13.51],"6-37-53":[0.72,11.28],"5-18-26":[-5.89,13.51],"6-37-54":[-0.4,8.59],"6-37-55":[-7.66,4.36],"5-18-27":[-16.43,8.59],"6-37-56":[-8.53,510.52],"6-37-57":[-19.03,669.28],"5-18-28":[-24.97,669.28],"6-37-58":[-21.41,1660.76],"6-37-59":[-46.84,796.88],"5-18-29":[-46.84,1660.76],"6-37-60":[-52.31,243.32],"6-37-61":[219.34,1153.83],"5-18-30":[-52.31,1288.62],"6-37-62":[921.3,2321.18],"6-37-63":[-29.54,2745.47],"5-18-31":[-29.54,2745.47],"6-38-0":[13.6,36.29],"6-38-1":[17.42,39.8],"6-38-2":[18.96,2116.63],"6-38-3":[6.6,2052.81],"6-38-4":[10,1115.32],"6-38-5":[12.54,35.55],"6-38-6":[0.83,1713.29],"6-38-7":[-34.12,1625.19],"6-38-8":[-39.93,332.82],"6-38-9":[-52.52,633.8],"6-38-10":[-48.57,658.27],"6-38-11":[-23.61,464.64],"6-38-12":[271.57,704.35],"6-38-13":[334.3,1114.61],"6-38-14":[-30.94,1053.24],"6-38-15":[-69.08,1266.55],"6-38-16":[-76.04,1888.88],"6-38-17":[-77.04,507.57],"6-38-18":[-86.89,-36.02],"6-38-19":[-98.41,-42.87],"6-38-20":[-103.24,-47.88],"6-38-21":[-104.42,-47.93],"6-38-22":[-104.14,-46.84],"6-38-23":[-103.56,-41.22],"6-38-24":[-101.46,1152.74],"6-38-25":[-85.84,3067.99],"6-38-26":[-70.73,-20.78],"6-38-27":[-65.4,833.1],"6-38-28":[-114.23,4925.73],"6-38-29":[10.54,5356.84],"6-38-30":[61.91,3882.23],"6-38-31":[106.5,839.2],"6-38-32":[68.16,474.29],"6-38-33":[63.39,249.13],"6-38-34":[103.34,384.58],"6-38-35":[184.94,644.83],"6-38-36":[252.99,6360.34],"6-38-37":[-22.39,6449.41],"6-38-38":[-1.33,5847.77],"6-38-39":[12.47,42.32],"6-38-40":[-9.89,2677.33],"6-38-41":[-3.78,2243.25],"6-38-42":[5.25,5156.32],"6-38-43":[2.3,5062.63],"6-38-44":[-10.81,5023.3],"6-38-45":[10.45,4724.4],"6-38-46":[-49.62,3766.16],"6-38-47":[-60.04,2585.5],"6-38-48":[-22.3,3553.09],"6-38-49":[7.67,3257.62],"6-38-50":[-72.84,2695.15],"6-38-51":[-106.71,1949.61],"6-38-52":[4.99,21.78],"6-38-53":[5.46,21.13],"6-38-54":[2.62,15.36],"6-38-55":[0.1,12.23],"6-38-56":[-3.35,2784.58],"6-38-57":[-15.5,1731.59],"6-38-58":[-15.5,1790.22],"6-38-59":[-44.23,1401.52],"6-38-60":[-50.33,332.2],"6-38-61":[241.75,1029.44],"6-38-62":[742.55,2346.02],"6-38-63":[-29.54,2745.47],"6-39-0":[13.6,37.58],"6-39-1":[17.68,41.29],"5-19-0":[13.6,41.29],"6-39-2":[16.51,1723.34],"6-39-3":[6.84,1651.25],"5-19-1":[6.6,2116.63],"4-9-0":[6.6,2437.47],"6-39-4":[11.11,1535.69],"6-39-5":[13.7,38.14],"5-19-2":[10,1535.69],"6-39-6":[2.98,1492.45],"6-39-7":[-1.86,1664.51],"5-19-3":[-34.12,1713.29],"4-9-1":[-49.69,2118.71],"3-4-0":[-63.11,2437.47],"6-39-8":[-16.42,932.96],"6-39-9":[-42.68,781.05],"5-19-4":[-52.52,932.96],"6-39-10":[-44.28,360.51],"6-39-11":[-41.88,596.29],"5-19-5":[-48.57,658.27],"4-9-2":[-79.91,932.96],"6-39-12":[51.44,869.29],"6-39-13":[188,1077.82],"5-19-6":[51.44,1114.61],"6-39-14":[-31.13,916.29],"6-39-15":[-25.79,1579.36],"5-19-7":[-69.08,1579.36],"4-9-3":[-96.6,1579.36],"3-4-1":[-97.86,1579.36],"6-39-16":[-56.2,1114.21],"6-39-17":[-75.76,23.87],"5-19-8":[-77.04,1888.88],"6-39-18":[-85.75,-37.02],"6-39-19":[-95.04,-41.17],"5-19-9":[-98.41,-36.02],"4-9-4":[-113.29,1888.88],"6-39-20":[-101.46,-44.35],"6-39-21":[-103.88,-46.85],"5-19-10":[-104.42,-44.35],"6-39-22":[-105.29,-49.02],"6-39-23":[-104.93,-50.05],"5-19-11":[-105.29,-41.22],"4-9-5":[-105.29,55.76],"3-4-2":[-113.29,2004.7],"6-39-24":[-129.9,-42.27],"6-39-25":[-132.42,1440.94],"5-19-12":[-132.42,3067.99],"6-39-26":[-85.88,-29.52],"6-39-27":[-89.53,1217.96],"5-19-13":[-89.53,1217.96],"4-9-6":[-132.42,3067.99],"6-39-28":[-34.01,3550.67],"6-39-29":[-4.7,404.14],"5-19-14":[-114.23,5356.84],"6-39-30":[19.1,759.95],"6-39-31":[49.74,984.95],"5-19-15":[19.1,3882.23],"4-9-7":[-328.06,5809.48],"3-4-3":[-328.06,5809.48],"6-39-32":[-0.58,880.62],"6-39-33":[34.67,244.67],"5-19-16":[-0.58,880.62],"6-39-34":[68,300.39],"6-39-35":[108.3,433.23],"5-19-17":[68,644.83],"4-9-8":[-116.39,6754.44],"6-39-36":[155.88,5347.83],"6-39-37":[202.17,6455.95],"5-19-18":[-22.39,6455.95],"6-39-38":[2.92,6600.28],"6-39-39":[3.78,6222.25],"5-19-19":[-1.33,6600.28],"4-9-9":[-123.53,6600.28],"3-4-4":[-123.53,6754.44],"6-39-40":[25.81,6775.96],"6-39-41":[366.3,6919.9],"5-19-20":[-9.89,6919.9],"6-39-42":[645.96,6300.89],"6-39-43":[493.64,6969.13],"5-19-21":[2.3,6969.13],"4-9-10":[-9.89,6969.13],"6-39-44":[407.92,5888.33],"6-39-45":[231.75,3998.13],"5-19-22":[-10.81,5888.33],"6-39-46":[248.58,2022.28],"6-39-47":[173.83,1957.39],"5-19-23":[-60.04,3766.16],"4-9-11":[-60.04,5888.33],"3-4-5":[-88.44,6969.13],"6-39-48":[-0.14,1353.11],"6-39-49":[-111.83,1097.15],"5-19-24":[-111.83,3553.09],"6-39-50":[-1.5,605.9],"6-39-51":[-63.31,2581.84],"5-19-25":[-106.71,2695.15],"4-9-12":[-269.44,4026.29],"6-39-52":[7.24,30.32],"6-39-53":[8.16,28.42],"5-19-26":[4.99,30.32],"6-39-54":[5.99,24.52],"6-39-55":[4.94,1701.66],"5-19-27":[0.1,1701.66],"4-9-13":[-16.43,1701.66],"3-4-6":[-269.44,4026.29],"6-39-56":[2.04,2876.77],"6-39-57":[-5.16,2323.88],"5-19-28":[-15.5,2876.77],"6-39-58":[-5.16,2011.29],"6-39-59":[-38.71,1401.52],"5-19-29":[-44.23,2011.29],"4-9-14":[-46.84,2876.77],"6-39-60":[-48.69,398.96],"6-39-61":[152.3,947.43],"5-19-30":[-50.33,1029.44],"6-39-62":[609.13,2348.16],"6-39-63":[-29.54,2745.47],"5-19-31":[-29.54,2745.47],"4-9-15":[-52.31,2745.47],"3-4-7":[-52.36,4721.94],"6-40-0":[13.58,38.54],"6-40-1":[18.42,42.48],"6-40-2":[14.03,1837.18],"6-40-3":[9.2,1301.31],"6-40-4":[16.61,1474.89],"6-40-5":[15.16,294.75],"6-40-6":[5.31,35.39],"6-40-7":[0.08,1690.53],"6-40-8":[-12.78,2057.19],"6-40-9":[-31.21,1148.56],"6-40-10":[-39,1032.11],"6-40-11":[-38.87,935.94],"6-40-12":[283.81,898.04],"6-40-13":[24.76,1031.68],"6-40-14":[-26.02,1255.33],"6-40-15":[-50.51,787.13],"6-40-16":[-51.94,269.07],"6-40-17":[-74.05,-24.93],"6-40-18":[-82.04,-34.93],"6-40-19":[-88.7,-36.77],"6-40-20":[-92.93,48.35],"6-40-21":[-98.06,-42.9],"6-40-22":[-101.84,-47.14],"6-40-23":[-104.68,-50.45],"6-40-24":[-138.65,-50.2],"6-40-25":[-141.12,1288.29],"6-40-26":[-90.28,-35.91],"6-40-27":[-82.71,92.4],"6-40-28":[-60.97,2718.19],"6-40-29":[-37.5,2385.74],"6-40-30":[52.53,2826.62],"6-40-31":[41.04,2785.87],"6-40-32":[-10.01,1058.3],"6-40-33":[7.09,158.16],"6-40-34":[23.99,203.5],"6-40-35":[68.74,470.48],"6-40-36":[117.6,267.64],"6-40-37":[126.79,5469.94],"6-40-38":[191.91,5778.21],"6-40-39":[986.52,6050.05],"6-40-40":[396.34,6388.87],"6-40-41":[262.61,6039.42],"6-40-42":[156.73,4549.07],"6-40-43":[232.7,2816.12],"6-40-44":[196.61,812.73],"6-40-45":[94.32,598.59],"6-40-46":[-102.43,1675.56],"6-40-47":[0.8,1125.83],"6-40-48":[-8.45,672.86],"6-40-49":[1.67,282.56],"6-40-50":[9.92,25.99],"6-40-51":[-12.01,1141.97],"6-40-52":[12.59,33.62],"6-40-53":[14.04,33.98],"6-40-54":[10.79,32.1],"6-40-55":[7.94,2110.84],"6-40-56":[7.14,2245.41],"6-40-57":[1.76,2040.57],"6-40-58":[-14.94,2090.43],"6-40-59":[-38.71,870.91],"6-40-60":[-48.69,230.81],"6-40-61":[-53.09,864.87],"6-40-62":[549.51,2344.27],"6-40-63":[-29.59,2745.47],"6-41-0":[13.58,39.48],"6-41-1":[19.11,44.26],"5-20-0":[13.58,44.26],"6-41-2":[13.19,951.78],"6-41-3":[11.37,1019.58],"5-20-1":[9.2,1837.18],"6-41-4":[17.37,1639.31],"6-41-5":[16.47,47.31],"5-20-2":[15.16,1639.31],"6-41-6":[12.24,47.31],"6-41-7":[6.36,1076.43],"5-20-3":[0.08,1690.53],"6-41-8":[-2.21,1785.63],"6-41-9":[-5.15,768.08],"5-20-4":[-31.21,2057.19],"6-41-10":[-18.25,1491.48],"6-41-11":[-32.03,1587.28],"5-20-5":[-39,1587.28],"6-41-12":[-13.09,864.36],"6-41-13":[25.94,1005.83],"5-20-6":[-13.09,1031.68],"6-41-14":[-40.09,588],"6-41-15":[-62.23,347.02],"5-20-7":[-62.23,1255.33],"6-41-16":[-51.62,265.73],"6-41-17":[-68.99,-25.54],"5-20-8":[-74.05,269.07],"6-41-18":[-71.61,-29.96],"6-41-19":[-78.01,-32.58],"5-20-9":[-88.7,-29.96],"6-41-20":[-85.81,18.12],"6-41-21":[-94.07,-39.59],"5-20-10":[-98.06,48.35],"6-41-22":[-102.75,-46.49],"6-41-23":[-105.57,-50.83],"5-20-11":[-105.57,-46.49],"6-41-24":[-129.54,-50.47],"6-41-25":[-129.48,1103.9],"5-20-12":[-141.12,1288.29],"6-41-26":[-90.4,869.54],"6-41-27":[-83.95,203.34],"5-20-13":[-90.4,869.54],"6-41-28":[-92.41,2565.59],"6-41-29":[-92.52,2449.21],"5-20-14":[-92.52,2718.19],"6-41-30":[126.29,2659.72],"6-41-31":[-0.89,2129.57],"5-20-15":[-0.89,2826.62],"6-41-32":[-35.4,103.23],"6-41-33":[-58.32,106.3],"5-20-16":[-58.32,1058.3],"6-41-34":[-8.15,187.29],"6-41-35":[3.69,1127.71],"5-20-17":[-8.15,1127.71],"6-41-36":[121.95,684.67],"6-41-37":[141.32,910.63],"5-20-18":[117.6,5469.94],"6-41-38":[214.18,4327.46],"6-41-39":[236.72,4098.61],"5-20-19":[191.91,6050.05],"6-41-40":[173.14,2622.25],"6-41-41":[94.42,1259.46],"5-20-20":[94.42,6388.87],"6-41-42":[68.09,1956.16],"6-41-43":[84.73,1847.62],"5-20-21":[68.09,4549.07],"6-41-44":[37.81,370.32],"6-41-45":[-42.53,1242.87],"5-20-22":[-42.53,1242.87],"6-41-46":[-22.19,172.48],"6-41-47":[-31.67,129.69],"5-20-23":[-102.43,1675.56],"6-41-48":[11.07,24.28],"6-41-49":[10.94,26.76],"5-20-24":[-8.45,672.86],"6-41-50":[10.24,27.93],"6-41-51":[-32.01,987.97],"5-20-25":[-32.01,1141.97],"6-41-52":[13.89,37.69],"6-41-53":[15.64,37.01],"5-20-26":[12.59,37.69],"6-41-54":[14.31,2255.29],"6-41-55":[8.72,2099.32],"5-20-27":[7.94,2255.29],"6-41-56":[6.99,2890.49],"6-41-57":[-1.96,2528.76],"5-20-28":[-1.96,2890.49],"6-41-58":[-28.3,1987.4],"6-41-59":[-36.07,-12.83],"5-20-29":[-38.71,2090.43],"6-41-60":[-47.6,-17.93],"6-41-61":[-51.95,806.53],"5-20-30":[-53.09,864.87],"6-41-62":[471.29,2332.43],"6-41-63":[-29.59,2745.47],"5-20-31":[-29.59,2745.47],"6-42-0":[13.6,39.87],"6-42-1":[20.07,45.77],"6-42-2":[13.39,636.09],"6-42-3":[13.39,1412.39],"6-42-4":[19.15,1850.85],"6-42-5":[16.99,99.21],"6-42-6":[19.11,50.32],"6-42-7":[14.3,47.47],"6-42-8":[7.19,1284.77],"6-42-9":[7.19,31.28],"6-42-10":[-1.45,19.12],"6-42-11":[-15.72,1027.48],"6-42-12":[-15.45,846.11],"6-42-13":[-12.9,704.1],"6-42-14":[-35.16,560.68],"6-42-15":[-28.74,626.18],"6-42-16":[-51.65,12.82],"6-42-17":[-59.93,-22.72],"6-42-18":[-63.96,-25.31],"6-42-19":[-70.71,-27.67],"6-42-20":[-79.19,-32.63],"6-42-21":[-92.99,-37.86],"6-42-22":[-102.26,-44.04],"6-42-23":[-104.51,-48.01],"6-42-24":[-109.89,-46.13],"6-42-25":[-127.72,350.69],"6-42-26":[-127.8,1415.28],"6-42-27":[-108.65,1174.77],"6-42-28":[-95.38,906.03],"6-42-29":[-54.23,2236.77],"6-42-30":[-7.39,2551.06],"6-42-31":[-5.06,1982.48],"6-42-32":[-47.66,394.84],"6-42-33":[-73.31,139.4],"6-42-34":[-32.27,379.21],"6-42-35":[37.28,586.16],"6-42-36":[152.35,742.16],"6-42-37":[128.07,1176.05],"6-42-38":[126.79,1325.79],"6-42-39":[110.1,644.34],"6-42-40":[97.77,249.8],"6-42-41":[34.67,233.97],"6-42-42":[2.15,142.11],"6-42-43":[-47.95,159.46],"6-42-44":[8.07,171.01],"6-42-45":[-24.24,773.01],"6-42-46":[11.51,27.54],"6-42-47":[5.16,24.63],"6-42-48":[5.16,23.27],"6-42-49":[8.2,25.72],"6-42-50":[-14.47,710.18],"6-42-51":[7.63,36.26],"6-42-52":[18.27,39.83],"6-42-53":[15.15,41.77],"6-42-54":[17.24,2109.78],"6-42-55":[9.82,2069.8],"6-42-56":[4.32,269.27],"6-42-57":[-10.08,1250.11],"6-42-58":[-23.74,1211.47],"6-42-59":[-36.14,-12.1],"6-42-60":[-49.12,-17.94],"6-42-61":[-51.95,889.65],"6-42-62":[706.64,2326.44],"6-42-63":[-29.54,2745.48],"6-43-0":[13.6,39.93],"6-43-1":[20.42,46.12],"5-21-0":[13.6,46.12],"6-43-2":[15.74,633.11],"6-43-3":[17.13,1941.41],"5-21-1":[13.39,1941.41],"4-10-0":[9.2,1941.41],"6-43-4":[99.2,2238.22],"6-43-5":[18.2,1021.33],"5-21-2":[16.99,2238.22],"6-43-6":[19.11,56.07],"6-43-7":[20.15,55.35],"5-21-3":[14.3,56.07],"4-10-1":[0.08,2238.22],"6-43-8":[17.02,49.44],"6-43-9":[9.89,42.39],"5-21-4":[7.19,1284.77],"6-43-10":[5.25,33.28],"6-43-11":[0.68,23.83],"5-21-5":[-15.72,1027.48],"4-10-2":[-39,2057.19],"6-43-12":[-8.86,1193.16],"6-43-13":[-13.28,895.93],"5-21-6":[-15.45,1193.16],"6-43-14":[-20.12,804.73],"6-43-15":[-48.44,566.65],"5-21-7":[-48.44,804.73],"4-10-3":[-62.23,1255.33],"6-43-16":[-45.14,-4.42],"6-43-17":[-49.88,-13.27],"5-21-8":[-59.93,12.82],"6-43-18":[-53.59,-19.77],"6-43-19":[-63.3,-23.07],"5-21-9":[-70.71,-19.77],"4-10-4":[-88.7,269.07],"6-43-20":[-73.49,-28.47],"6-43-21":[-87.06,-33.6],"5-21-10":[-92.99,-28.47],"6-43-22":[-94.59,-38.95],"6-43-23":[-97.23,-43.01],"5-21-11":[-104.51,-38.95],"4-10-5":[-105.57,48.35],"6-43-24":[-97.15,-43.83],"6-43-25":[-102.43,-45.56],"5-21-12":[-127.72,350.69],"6-43-26":[-113.66,-45.85],"6-43-27":[-108.06,-44.72],"5-21-13":[-127.8,1415.28],"4-10-6":[-141.12,1415.28],"6-43-28":[-95.84,-31.87],"6-43-29":[-77.21,502.55],"5-21-14":[-95.84,2236.77],"6-43-30":[-149.21,1207.52],"6-43-31":[87.42,1109.8],"5-21-15":[-149.21,2551.06],"4-10-7":[-149.21,2826.62],"6-43-32":[-59.96,483.8],"6-43-33":[-57.01,412.4],"5-21-16":[-73.31,483.8],"6-43-34":[2.73,657.03],"6-43-35":[87.58,621.44],"5-21-17":[-32.27,657.03],"4-10-8":[-73.31,1127.71],"6-43-36":[215.28,689.04],"6-43-37":[74.01,949.21],"5-21-18":[74.01,1176.05],"6-43-38":[58.91,1245.78],"6-43-39":[66.15,856.34],"5-21-19":[58.91,1325.79],"4-10-9":[58.91,6050.05],"6-43-40":[22.81,738.99],"6-43-41":[-2.88,703.38],"5-21-20":[-2.88,738.99],"6-43-42":[24.1,362.62],"6-43-43":[-5.9,395.29],"5-21-21":[-47.95,395.29],"4-10-10":[-47.95,6388.87],"6-43-44":[-44.85,228.24],"6-43-45":[-41.29,445.18],"5-21-22":[-44.85,773.01],"6-43-46":[2.65,26.5],"6-43-47":[0.53,19.67],"5-21-23":[0.53,27.54],"4-10-11":[-102.43,1675.56],"6-43-48":[0.24,14.06],"6-43-49":[3.69,25.65],"5-21-24":[0.24,25.72],"6-43-50":[3.62,714.59],"6-43-51":[5.69,38.8],"5-21-25":[-14.47,714.59],"4-10-12":[-32.01,1141.97],"6-43-52":[18.27,41.03],"6-43-53":[15.15,44.21],"5-21-26":[15.15,44.21],"6-43-54":[19.28,1728.16],"6-43-55":[9.82,37.01],"5-21-27":[9.82,2109.78],"4-10-13":[7.94,2255.29],"6-43-56":[1.8,22.37],"6-43-57":[-9.86,6.91],"5-21-28":[-10.08,1250.11],"6-43-58":[-23.43,-4.86],"6-43-59":[-35.85,-11.97],"5-21-29":[-36.14,1211.47],"4-10-14":[-38.71,2890.49],"6-43-60":[-50.63,-17.94],"6-43-61":[-51.01,1371.37],"5-21-30":[-51.95,1371.37],"6-43-62":[889.64,2317.26],"6-43-63":[-29.54,2745.48],"5-21-31":[-29.54,2745.48],"4-10-15":[-53.09,2745.48],"6-44-0":[13.6,39.84],"6-44-1":[20.3,45.86],"6-44-2":[17.47,772.13],"6-44-3":[19.23,2089.38],"6-44-4":[1020.94,2319.04],"6-44-5":[23.12,1708.39],"6-44-6":[23.37,1880.96],"6-44-7":[23.02,1854.07],"6-44-8":[21.54,1029.06],"6-44-9":[17.35,54.28],"6-44-10":[12.02,44.62],"6-44-11":[7.84,35.64],"6-44-12":[1.92,148.72],"6-44-13":[-20.3,486.61],"6-44-14":[-16.93,577.05],"6-44-15":[-12.05,408.54],"6-44-16":[-25.93,8.57],"6-44-17":[-39.16,-6.77],"6-44-18":[-44.89,-11.09],"6-44-19":[-56.94,-15.52],"6-44-20":[-66.17,-21.28],"6-44-21":[-77.89,-27.12],"6-44-22":[-85.04,-32.05],"6-44-23":[-89.27,-36.06],"6-44-24":[-91.01,-38.75],"6-44-25":[-96.71,-40.68],"6-44-26":[-98.96,-43.31],"6-44-27":[-95.93,-44.41],"6-44-28":[-95.18,-38.68],"6-44-29":[-81.6,14.37],"6-44-30":[-61.24,1030.82],"6-44-31":[94.48,889.3],"6-44-32":[-68.02,823.15],"6-44-33":[-38.49,487.97],"6-44-34":[67.74,694.41],"6-44-35":[161.68,753.33],"6-44-36":[228.41,612.29],"6-44-37":[103.13,914.71],"6-44-38":[86.09,880.42],"6-44-39":[114.58,752.75],"6-44-40":[106.53,799.57],"6-44-41":[70.48,899.62],"6-44-42":[35.31,584.15],"6-44-43":[1.97,482.27],"6-44-44":[-15.03,526.4],"6-44-45":[1.5,25.03],"6-44-46":[-0.35,22.2],"6-44-47":[-1.19,4.24],"6-44-48":[-2.11,6.22],"6-44-49":[-0.03,20.82],"6-44-50":[4.52,23.4],"6-44-51":[4.37,37.14],"6-44-52":[17.75,41.14],"6-44-53":[20.43,1523.88],"6-44-54":[16.01,578.59],"6-44-55":[7.53,38.03],"6-44-56":[-1.38,22.22],"6-44-57":[-9.33,2.32],"6-44-58":[-22.52,-3.02],"6-44-59":[-35.85,-11.88],"6-44-60":[-51.01,204.79],"6-44-61":[-50.72,1540.95],"6-44-62":[1083.33,2298.91],"6-44-63":[-29.54,2745.48],"6-45-0":[13.6,39.31],"6-45-1":[20,45.87],"5-22-0":[13.6,45.87],"6-45-2":[18.2,829.3],"6-45-3":[45.54,2185.38],"5-22-1":[17.47,2185.38],"6-45-4":[1552.61,2333.41],"6-45-5":[1247.03,2344.97],"5-22-2":[23.12,2344.97],"6-45-6":[26.83,2399.4],"6-45-7":[22.92,1842.92],"5-22-3":[22.92,2399.4],"6-45-8":[27.1,2229.6],"6-45-9":[22.31,1280.25],"5-22-4":[17.35,2229.6],"6-45-10":[19.37,59.8],"6-45-11":[16.17,52.29],"5-22-5":[7.84,59.8],"6-45-12":[14.52,48.25],"6-45-13":[12.67,43.66],"5-22-6":[-20.3,486.61],"6-45-14":[-9.6,301],"6-45-15":[-18.2,337.49],"5-22-7":[-18.2,577.05],"6-45-16":[-9.43,30.39],"6-45-17":[-20.11,6.02],"5-22-8":[-39.16,30.39],"6-45-18":[-27.17,-1.97],"6-45-19":[-40.58,-6.64],"5-22-9":[-56.94,-1.97],"6-45-20":[-50.81,-12.66],"6-45-21":[-62.29,-18.14],"5-22-10":[-77.89,-12.66],"6-45-22":[-68.68,-23.39],"6-45-23":[-75.93,-27.38],"5-22-11":[-89.27,-23.39],"6-45-24":[-80.15,-31.4],"6-45-25":[-85.3,-34.94],"5-22-12":[-96.71,-31.4],"6-45-26":[-89.68,-37.87],"6-45-27":[-90.85,-41.31],"5-22-13":[-98.96,-37.87],"6-45-28":[-90.85,-40.13],"6-45-29":[-87.64,-32.13],"5-22-14":[-95.18,14.37],"6-45-30":[-71.92,795.54],"6-45-31":[-78.81,615.02],"5-22-15":[-78.81,1030.82],"6-45-32":[-60.65,667.42],"6-45-33":[-29.07,524.34],"5-22-16":[-68.02,823.15],"6-45-34":[114.46,806.95],"6-45-35":[140.16,772.15],"5-22-17":[67.74,806.95],"6-45-36":[148.33,508.2],"6-45-37":[188.03,1020.26],"5-22-18":[103.13,1020.26],"6-45-38":[279.54,1043.99],"6-45-39":[226.83,630.24],"5-22-19":[86.09,1043.99],"6-45-40":[218.51,1344.63],"6-45-41":[192.34,1399.29],"5-22-20":[70.48,1399.29],"6-45-42":[-18.16,1093.19],"6-45-43":[-20.19,529.24],"5-22-21":[-20.19,1093.19],"6-45-44":[-0.71,38.77],"6-45-45":[-4.23,9.67],"5-22-22":[-15.03,526.4],"6-45-46":[-4.6,2.28],"6-45-47":[-5.77,-0.34],"5-22-23":[-5.77,22.2],"6-45-48":[-6.99,-0.02],"6-45-49":[-2.71,15],"5-22-24":[-6.99,20.82],"6-45-50":[5.01,17.57],"6-45-51":[6.24,35.37],"5-22-25":[4.37,37.14],"6-45-52":[17.75,40.41],"6-45-53":[20.22,47.29],"5-22-26":[17.75,1523.88],"6-45-54":[13.66,45.08],"6-45-55":[7.53,29.37],"5-22-27":[7.53,578.59],"6-45-56":[-1.7,15.36],"6-45-57":[-5.7,-0.8],"5-22-28":[-9.33,22.22],"6-45-58":[-21.59,-2.49],"6-45-59":[-34.95,-11.26],"5-22-29":[-35.85,-2.49],"6-45-60":[-51.02,354.31],"6-45-61":[-49.77,1979.94],"5-22-30":[-51.02,1979.94],"6-45-62":[1259.39,2275.47],"6-45-63":[-29.54,2745.48],"5-22-31":[-29.54,2745.48],"6-46-0":[13.6,38.72],"6-46-1":[19.71,46.42],"6-46-2":[19.83,660.34],"6-46-3":[405.24,2285.51],"6-46-4":[1894.84,2457.14],"6-46-5":[1860.54,2475.02],"6-46-6":[29.19,2542.84],"6-46-7":[26.42,1831.68],"6-46-8":[29.81,2027.72],"6-46-9":[29.48,2175.1],"6-46-10":[26.25,1494.43],"6-46-11":[24.84,68.28],"6-46-12":[21.59,63.25],"6-46-13":[21.59,55.81],"6-46-14":[17.39,52.22],"6-46-15":[15.17,53.92],"6-46-16":[5.41,41.06],"6-46-17":[-3.66,21.16],"6-46-18":[-11.78,10.12],"6-46-19":[-24.71,1.96],"6-46-20":[-35.15,-2.52],"6-46-21":[-46.25,-7.81],"6-46-22":[-53.6,-12.92],"6-46-23":[-62.78,-17.62],"6-46-24":[-68.86,-22.4],"6-46-25":[-75.75,-26.93],"6-46-26":[-82.25,-30.53],"6-46-27":[-86.6,-34.57],"6-46-28":[-87.21,-38.79],"6-46-29":[-85.59,-35.95],"6-46-30":[-76.08,-28.51],"6-46-31":[-60.98,35.72],"6-46-32":[-80.07,69.74],"6-46-33":[-95.49,521.39],"6-46-34":[51.02,882.74],"6-46-35":[105.36,737.91],"6-46-36":[127.52,1154.07],"6-46-37":[227.19,1475.44],"6-46-38":[312.64,1034.42],"6-46-39":[301.73,1075.16],"6-46-40":[-51.68,1855.39],"6-46-41":[-37.26,1825.17],"6-46-42":[-24.64,1827.75],"6-46-43":[-6.23,13.98],"6-46-44":[-9.69,10.93],"6-46-45":[-8.47,-0.7],"6-46-46":[-8.58,-1.87],"6-46-47":[-7.32,-2.14],"6-46-48":[-8.38,-2.22],"6-46-49":[-4.74,9.5],"6-46-50":[1.02,14.82],"6-46-51":[8.24,36.85],"6-46-52":[18.32,40.45],"6-46-53":[18.15,42.54],"6-46-54":[13.5,40.62],"6-46-55":[8,27.69],"6-46-56":[-0.82,15.99],"6-46-57":[-4.02,0.15],"6-46-58":[-20.54,-1.51],"6-46-59":[-34.25,437.71],"6-46-60":[-50.27,631.96],"6-46-61":[-48.16,1965.25],"6-46-62":[1373.28,2268.09],"6-46-63":[-29.54,2745.48],"6-47-0":[13.6,37.99],"6-47-1":[19.55,47.53],"5-23-0":[13.6,47.53],"6-47-2":[20.29,700.91],"6-47-3":[443.21,2373.94],"5-23-1":[19.83,2373.94],"4-11-0":[13.6,2373.94],"6-47-4":[2285.5,2625.24],"6-47-5":[2286.78,2882.05],"5-23-2":[1860.54,2882.05],"6-47-6":[1707.24,2840.8],"6-47-7":[1101.27,2476.32],"5-23-3":[26.42,2840.8],"4-11-1":[22.92,2882.05],"3-5-0":[0.08,2882.05],"6-47-8":[1301.32,2769.8],"6-47-9":[1356.57,2769.95],"5-23-4":[29.48,2769.95],"6-47-10":[33.06,2452.69],"6-47-11":[31.62,81.26],"5-23-5":[24.84,2452.69],"4-11-2":[7.84,2769.95],"6-47-12":[29.54,78.26],"6-47-13":[24.7,72.82],"5-23-6":[21.59,78.26],"6-47-14":[23.65,69.47],"6-47-15":[21.38,70.1],"5-23-7":[15.17,70.1],"4-11-3":[-20.3,577.05],"3-5-1":[-62.23,2769.95],"2-2-0":[-97.86,2882.05],"6-47-16":[13.6,55.71],"6-47-17":[5.96,40.64],"5-23-8":[-3.66,55.71],"6-47-18":[1.95,29.54],"6-47-19":[-2.64,22.06],"5-23-9":[-24.71,29.54],"4-11-4":[-56.94,55.71],"6-47-20":[-11.83,15.19],"6-47-21":[-23.15,4.78],"5-23-10":[-46.25,15.19],"6-47-22":[-31.32,-2.17],"6-47-23":[-42.51,-7.52],"5-23-11":[-62.78,-2.17],"4-11-5":[-89.27,15.19],"3-5-2":[-105.57,269.07],"6-47-24":[-50.68,-13.69],"6-47-25":[-59.08,-19.14],"5-23-12":[-75.75,-13.69],"6-47-26":[-65.46,-24.58],"6-47-27":[-76.9,-25.66],"5-23-13":[-86.6,-24.58],"4-11-6":[-98.96,-13.69],"6-47-28":[-76.9,-30.33],"6-47-29":[-77.77,-32.04],"5-23-14":[-87.21,-30.33],"6-47-30":[-72.57,-28.65],"6-47-31":[-64.4,-23.15],"5-23-15":[-76.08,35.72],"4-11-7":[-95.18,1030.82],"3-5-3":[-149.21,2826.62],"2-2-1":[-328.06,5809.48],"6-47-32":[-64.98,198.92],"6-47-33":[-52.12,442.32],"5-23-16":[-95.49,521.39],"6-47-34":[64.01,663.07],"6-47-35":[165.38,868.81],"5-23-17":[51.02,882.74],"4-11-8":[-95.49,882.74],"6-47-36":[242.55,1657.87],"6-47-37":[397.4,1576.13],"5-23-18":[127.52,1657.87],"6-47-38":[443.95,1269.93],"6-47-39":[482.05,2353.32],"5-23-19":[301.73,2353.32],"4-11-9":[86.09,2353.32],"3-5-4":[-95.49,6050.05],"6-47-40":[-47.11,2413.32],"6-47-41":[-19.83,2.39],"5-23-20":[-51.68,2413.32],"6-47-42":[-16.52,2.77],"6-47-43":[-15,-2.9],"5-23-21":[-24.64,1827.75],"4-11-10":[-51.68,2413.32],"6-47-44":[-12.7,-3.31],"6-47-45":[-12.43,-4],"5-23-22":[-12.7,10.93],"6-47-46":[-12.93,-3],"6-47-47":[-9.68,-2.76],"5-23-23":[-12.93,-1.87],"4-11-11":[-15.03,526.4],"3-5-5":[-102.43,6388.87],"2-2-2":[-123.53,6969.13],"6-47-48":[-7.97,-2.42],"6-47-49":[-5.09,12.36],"5-23-24":[-8.38,12.36],"6-47-50":[0.94,19.2],"6-47-51":[9.93,36.67],"5-23-25":[0.94,36.85],"4-11-12":[-8.38,37.14],"6-47-52":[18.32,42.39],"6-47-53":[18.15,853.58],"5-23-26":[18.15,853.58],"6-47-54":[14.52,46.03],"6-47-55":[8,29.24],"5-23-27":[8,46.03],"4-11-13":[7.53,1523.88],"3-5-6":[-32.01,2255.29],"6-47-56":[0.14,16.45],"6-47-57":[-4.25,0.82],"5-23-28":[-4.25,16.45],"6-47-58":[-18.57,-1.51],"6-47-59":[-29.56,457.63],"5-23-29":[-34.25,457.63],"4-11-14":[-35.85,457.63],"6-47-60":[-47.37,731.02],"6-47-61":[-47.53,1373.29],"5-23-30":[-50.27,1965.25],"6-47-62":[1353.9,2263.16],"6-47-63":[-29.54,2745.98],"5-23-31":[-29.54,2745.98],"4-11-15":[-51.02,2745.98],"3-5-7":[-53.09,2890.49],"2-2-3":[-269.44,4721.94],"6-48-0":[13.6,37.61],"6-48-1":[19.52,48.06],"6-48-2":[23.04,949.4],"6-48-3":[418.15,2469.75],"6-48-4":[2373.93,2812.59],"6-48-5":[2625.23,3024.06],"6-48-6":[2476.31,3047.68],"6-48-7":[2357.41,2826.07],"6-48-8":[1710.88,2785.17],"6-48-9":[45.47,2833.9],"6-48-10":[-226.59,2803.26],"6-48-11":[39.09,92.57],"6-48-12":[36.79,90.15],"6-48-13":[33.05,85.22],"6-48-14":[32.05,78.86],"6-48-15":[27.85,72.39],"6-48-16":[21.23,65.89],"6-48-17":[15.6,54.55],"6-48-18":[11.42,45.38],"6-48-19":[8.36,39.31],"6-48-20":[2.88,32.2],"6-48-21":[-3.8,23.36],"6-48-22":[-13.7,10.3],"6-48-23":[-26.69,-1.49],"6-48-24":[-36.66,-9.03],"6-48-25":[-48.75,-14.66],"6-48-26":[-52.31,-19.6],"6-48-27":[-60.66,-21.73],"6-48-28":[-65.09,-22.59],"6-48-29":[-65.14,-24.57],"6-48-30":[-64.07,-23.02],"6-48-31":[-58.56,-22.33],"6-48-32":[-70.5,80.25],"6-48-33":[-60.53,366.28],"6-48-34":[46.82,588.21],"6-48-35":[175.94,1298.57],"6-48-36":[374.95,1756.49],"6-48-37":[264.86,1788.77],"6-48-38":[158.3,2047.81],"6-48-39":[-0.94,2789.25],"6-48-40":[-170.49,2060.99],"6-48-41":[-22.35,-6.95],"6-48-42":[-21.25,-7.27],"6-48-43":[-16.43,-5.74],"6-48-44":[-15.08,-5.85],"6-48-45":[-14.74,-5.73],"6-48-46":[-15.44,-5.21],"6-48-47":[-14.07,-3.49],"6-48-48":[-9.34,-1.35],"6-48-49":[-3.65,16.97],"6-48-50":[3.91,17.53],"6-48-51":[9.5,35.69],"6-48-52":[17.4,41.28],"6-48-53":[19.29,277.84],"6-48-54":[14.49,46.03],"6-48-55":[8.34,28.56],"6-48-56":[0.81,16.97],"6-48-57":[-6.67,1.37],"6-48-58":[-16.22,-2.35],"6-48-59":[-31.72,213.73],"6-48-60":[-45.8,701.38],"6-48-61":[-47.53,1548.87],"6-48-62":[1362.57,2265.71],"6-48-63":[-29.54,2746.48],"6-49-0":[13.6,37.46],"6-49-1":[19.53,48.73],"5-24-0":[13.6,48.73],"6-49-2":[24.05,1459.96],"6-49-3":[919.34,2462.17],"5-24-1":[23.04,2469.75],"6-49-4":[2354.99,2812.59],"6-49-5":[2629.11,3141.21],"5-24-2":[2354.99,3141.21],"6-49-6":[2784.52,3182.09],"6-49-7":[2634.56,3042.62],"5-24-3":[2357.41,3182.09],"6-49-8":[44.4,2652.87],"6-49-9":[44.54,2012.55],"5-24-4":[44.4,2833.9],"6-49-10":[46.28,334.77],"6-49-11":[44.97,101.28],"5-24-5":[-226.59,2803.26],"6-49-12":[43.91,102],"6-49-13":[40.13,98.24],"5-24-6":[33.05,102],"6-49-14":[36.75,93.09],"6-49-15":[33.71,86.06],"5-24-7":[27.85,93.09],"6-49-16":[28.95,81.48],"6-49-17":[23.81,73.88],"5-24-8":[15.6,81.48],"6-49-18":[21.4,66.2],"6-49-19":[17.36,60.53],"5-24-9":[8.36,66.2],"6-49-20":[13.7,55.5],"6-49-21":[5.84,39.04],"5-24-10":[-3.8,55.5],"6-49-22":[-1.5,22.35],"6-49-23":[-16.89,4.59],"5-24-11":[-26.69,22.35],"6-49-24":[-26.78,-4.39],"6-49-25":[-37.71,-9.55],"5-24-12":[-48.75,-4.39],"6-49-26":[-42.33,-13.76],"6-49-27":[-43.85,-16.48],"5-24-13":[-60.66,-13.76],"6-49-28":[-45.31,-15.23],"6-49-29":[-49.21,-15.42],"5-24-14":[-65.14,-15.23],"6-49-30":[-47.15,-16.29],"6-49-31":[-46.81,-15.86],"5-24-15":[-64.07,-15.86],"6-49-32":[-46.81,79.72],"6-49-33":[-74.23,1125.05],"5-24-16":[-74.23,1125.05],"6-49-34":[53.15,966.21],"6-49-35":[149.22,1272.47],"5-24-17":[46.82,1298.57],"6-49-36":[99.05,2017.31],"6-49-37":[0.38,1423.16],"5-24-18":[0.38,2017.31],"6-49-38":[-51.4,1567.33],"6-49-39":[-41.56,2863.35],"5-24-19":[-51.4,2863.35],"6-49-40":[-24.02,694.74],"6-49-41":[-23.57,-9.82],"5-24-20":[-170.49,2060.99],"6-49-42":[-21.49,-7.66],"6-49-43":[-17.46,-7.18],"5-24-21":[-21.49,-5.74],"6-49-44":[-15.24,-6.72],"6-49-45":[-14.63,-6.41],"5-24-22":[-15.24,-5.73],"6-49-46":[-15.67,-6.33],"6-49-47":[-14.71,-4.79],"5-24-23":[-15.67,-3.49],"6-49-48":[-10.04,-0.71],"6-49-49":[-1.58,15],"5-24-24":[-10.04,16.97],"6-49-50":[3.4,15.14],"6-49-51":[6.24,37.34],"5-24-25":[3.4,37.34],"6-49-52":[17.4,40.03],"6-49-53":[19.24,44.9],"5-24-26":[17.4,277.84],"6-49-54":[14.63,42.23],"6-49-55":[8.34,28.46],"5-24-27":[8.34,46.03],"6-49-56":[1.36,16.69],"6-49-57":[-9.07,1.88],"5-24-28":[-9.07,16.97],"6-49-58":[-13.8,-3.51],"6-49-59":[-31.95,-7.78],"5-24-29":[-31.95,213.73],"6-49-60":[-42.5,467.1],"6-49-61":[-22.1,1679.35],"5-24-30":[-47.53,1679.35],"6-49-62":[1548.86,2265.71],"6-49-63":[-29.54,2746.48],"5-24-31":[-29.54,2746.48],"6-50-0":[13.6,37.63],"6-50-1":[19.61,49.96],"6-50-2":[24.84,1457.67],"6-50-3":[1097.61,2355],"6-50-4":[2249.23,2629.12],"6-50-5":[2558.1,3200.74],"6-50-6":[3042.61,3253.39],"6-50-7":[2639.66,3209.33],"6-50-8":[45.07,3108.37],"6-50-9":[45.74,106.81],"6-50-10":[49.27,105.78],"6-50-11":[49.5,111.91],"6-50-12":[49.85,112.69],"6-50-13":[46.54,108.32],"6-50-14":[43.24,103.27],"6-50-15":[40.73,96.8],"6-50-16":[37.48,93],"6-50-17":[33.1,87.83],"6-50-18":[30.85,80.4],"6-50-19":[27.75,76.44],"6-50-20":[20.59,68.85],"6-50-21":[12.03,47.85],"6-50-22":[3.31,31.01],"6-50-23":[-8.2,12.45],"6-50-24":[-17.97,2.19],"6-50-25":[-27.35,-2.98],"6-50-26":[-32.47,-5.75],"6-50-27":[-35.27,-10.36],"6-50-28":[-34.69,-9.18],"6-50-29":[-34.54,-8.11],"6-50-30":[-34.03,-8.32],"6-50-31":[-34.84,-8.32],"6-50-32":[-34.84,-10.92],"6-50-33":[-44.76,1106.52],"6-50-34":[4.53,1190.32],"6-50-35":[-49.15,1083.8],"6-50-36":[-42.94,626.82],"6-50-37":[-28.08,986.18],"6-50-38":[-23.73,124.34],"6-50-39":[-23.06,-5.86],"6-50-40":[-23.22,-8.26],"6-50-41":[-22.24,-6.03],"6-50-42":[-20.02,-1.95],"6-50-43":[-15.06,-2.36],"6-50-44":[-14.73,-4.64],"6-50-45":[-13.41,-4.06],"6-50-46":[-13.54,-3.83],"6-50-47":[-13.35,-3.1],"6-50-48":[-9.2,0.55],"6-50-49":[-0.72,12.98],"6-50-50":[2.9,23.35],"6-50-51":[-44.49,2738.7],"6-50-52":[19.49,41.64],"6-50-53":[20.4,44],"6-50-54":[14.13,41.06],"6-50-55":[7.93,28.3],"6-50-56":[1.73,16.49],"6-50-57":[-9.57,2.54],"6-50-58":[-12.44,-2.31],"6-50-59":[-30.93,-7.27],"6-50-60":[-38.74,776.2],"6-50-61":[467.09,1715.15],"6-50-62":[1679.34,2262.46],"6-50-63":[-29.54,2746.48],"6-51-0":[13.6,37.87],"6-51-1":[19.71,51.91],"5-25-0":[13.6,51.91],"6-51-2":[25.09,1225.55],"6-51-3":[563.18,2251.74],"5-25-1":[24.84,2355],"4-12-0":[13.6,2469.75],"6-51-4":[2064.18,2558.11],"6-51-5":[2479.15,3116.18],"5-25-2":[2064.18,3200.74],"6-51-6":[2863.3,3190.72],"6-51-7":[842.84,3318.44],"5-25-3":[842.84,3318.44],"4-12-1":[842.84,3318.44],"6-51-8":[51.79,2952.11],"6-51-9":[51.81,111.55],"5-25-4":[45.07,3108.37],"6-51-10":[52.28,118.01],"6-51-11":[54.03,122.71],"5-25-5":[49.27,122.71],"4-12-2":[-226.59,3108.37],"6-51-12":[56.06,122.31],"6-51-13":[52.06,118.71],"5-25-6":[46.54,122.31],"6-51-14":[49.47,113.3],"6-51-15":[47.29,108.7],"5-25-7":[40.73,113.3],"4-12-3":[27.85,122.31],"6-51-16":[45.13,107.59],"6-51-17":[41.29,102.26],"5-25-8":[33.1,107.59],"6-51-18":[39.59,98.78],"6-51-19":[34.86,94.27],"5-25-9":[27.75,98.78],"4-12-4":[8.36,107.59],"6-51-20":[25.6,77.17],"6-51-21":[16.22,56.25],"5-25-10":[12.03,77.17],"6-51-22":[7.85,41.92],"6-51-23":[2.04,22.97],"5-25-11":[-8.2,41.92],"4-12-5":[-26.69,77.17],"6-51-24":[-2.99,19.11],"6-51-25":[-9.54,11.37],"5-25-12":[-27.35,19.11],"6-51-26":[-18.24,4.22],"6-51-27":[-22.86,-3.86],"5-25-13":[-35.27,4.22],"4-12-6":[-60.66,19.11],"6-51-28":[-21.86,-3.45],"6-51-29":[-16.16,0.32],"5-25-14":[-34.69,0.32],"6-51-30":[-15.02,0.32],"6-51-31":[-23.52,-1.06],"5-25-15":[-34.84,0.32],"4-12-7":[-65.14,0.32],"6-51-32":[-24.99,-5.27],"6-51-33":[-25.2,315.67],"5-25-16":[-44.76,1106.52],"6-51-34":[-43.64,1194.05],"6-51-35":[-34.81,1027.17],"5-25-17":[-49.15,1194.05],"4-12-8":[-74.23,1298.57],"6-51-36":[-25.89,-9.5],"6-51-37":[-26.03,-8.12],"5-25-18":[-42.94,986.18],"6-51-38":[-21.09,-6.58],"6-51-39":[-20.12,-3.54],"5-25-19":[-23.73,124.34],"4-12-9":[-51.4,2863.35],"6-51-40":[-17.91,-6.14],"6-51-41":[-15.72,-2.7],"5-25-20":[-23.22,-2.7],"6-51-42":[-11.25,4.88],"6-51-43":[-8.51,4.82],"5-25-21":[-20.02,4.88],"4-12-10":[-170.49,2060.99],"6-51-44":[-8.8,-0.42],"6-51-45":[-8.93,-0.49],"5-25-22":[-14.73,-0.42],"6-51-46":[-7.5,-0.3],"6-51-47":[-7.21,0.52],"5-25-23":[-13.54,0.52],"4-12-11":[-15.67,0.52],"6-51-48":[-5.84,5.1],"6-51-49":[0.54,16.37],"5-25-24":[-9.2,16.37],"6-51-50":[6.57,28.17],"6-51-51":[0.07,2916.19],"5-25-25":[-44.49,2916.19],"4-12-12":[-44.49,2916.19],"6-51-52":[19.49,44.42],"6-51-53":[20.67,45.57],"5-25-26":[19.49,45.57],"6-51-54":[13.2,41.85],"6-51-55":[7.93,27.24],"5-25-27":[7.93,41.85],"4-12-13":[7.93,277.84],"6-51-56":[1.43,15.82],"6-51-57":[-8.96,2.59],"5-25-28":[-9.57,16.49],"6-51-58":[-10.69,-0.69],"6-51-59":[-26.21,682.83],"5-25-29":[-30.93,682.83],"4-12-14":[-31.95,682.83],"6-51-60":[-38.69,818.98],"6-51-61":[776.19,1785.3],"5-25-30":[-38.74,1785.3],"6-51-62":[1715.14,2257.85],"6-51-63":[-29.54,2746.48],"5-25-31":[-29.54,2746.48],"4-12-15":[-47.53,2746.48],"6-52-0":[13.6,38],"6-52-1":[19.75,52.83],"6-52-2":[26.3,1141.68],"6-52-3":[39.31,2076.74],"6-52-4":[1811.24,2521.51],"6-52-5":[2242.7,2887.36],"6-52-6":[2056.01,3023.83],"6-52-7":[55.87,3002.57],"6-52-8":[54.97,1206.68],"6-52-9":[54.3,120.01],"6-52-10":[55.78,125.87],"6-52-11":[59.31,126.28],"6-52-12":[59.58,122.56],"6-52-13":[56.65,121.98],"6-52-14":[54.49,120.69],"6-52-15":[53.73,118.59],"6-52-16":[51.45,117.92],"6-52-17":[49.39,956.08],"6-52-18":[47.13,292.1],"6-52-19":[38.59,98.45],"6-52-20":[29.29,80.32],"6-52-21":[22.35,62.32],"6-52-22":[12.18,49.65],"6-52-23":[9.78,32.21],"6-52-24":[6.18,30.74],"6-52-25":[2.46,27.03],"6-52-26":[-6.88,18.42],"6-52-27":[-11.61,3.79],"6-52-28":[-11.61,1.81],"6-52-29":[-6.04,9.77],"6-52-30":[-1.63,10.1],"6-52-31":[-11.81,9.72],"6-52-32":[-15.72,1.12],"6-52-33":[-24.61,236.48],"6-52-34":[-22.93,-6.99],"6-52-35":[-23.03,-9.64],"6-52-36":[-21.93,-7.29],"6-52-37":[-18.49,-6.71],"6-52-38":[-16.29,-5.18],"6-52-39":[-15.68,-4.33],"6-52-40":[-15.61,-5.17],"6-52-41":[-11.29,0.3],"6-52-42":[-4.72,5.27],"6-52-43":[-1.14,6.16],"6-52-44":[-1.59,8.81],"6-52-45":[-1.75,7.35],"6-52-46":[-1.79,8.03],"6-52-47":[-1.07,9.11],"6-52-48":[0.32,11.62],"6-52-49":[3.14,20.83],"6-52-50":[10.63,31.49],"6-52-51":[8.47,44.15],"6-52-52":[20.98,48.11],"6-52-53":[20.05,47.57],"6-52-54":[12.4,39.99],"6-52-55":[6.84,24.84],"6-52-56":[1.3,15.07],"6-52-57":[-6.52,2.36],"6-52-58":[-10.53,-0.06],"6-52-59":[-21.87,1124.55],"6-52-60":[-37.76,910.74],"6-52-61":[818.39,1887.29],"6-52-62":[1785.29,2271.2],"6-52-63":[-29.54,2746.48],"6-53-0":[13.6,38.04],"6-53-1":[19.67,53.58],"5-26-0":[13.6,53.58],"6-53-2":[26.45,988.3],"6-53-3":[357.17,1866.38],"5-26-1":[26.3,2076.74],"6-53-4":[1590.54,2511.91],"6-53-5":[1504.88,2633.93],"5-26-2":[1504.88,2887.36],"6-53-6":[50.54,2633.93],"6-53-7":[54.99,3982.86],"5-26-3":[50.54,3982.86],"6-53-8":[57.33,121.21],"6-53-9":[57.33,128.08],"5-26-4":[54.3,1206.68],"6-53-10":[60.52,129.5],"6-53-11":[60.77,127.45],"5-26-5":[55.78,129.5],"6-53-12":[59.99,122.28],"6-53-13":[59.83,127.23],"5-26-6":[56.65,127.23],"6-53-14":[60.04,129.8],"6-53-15":[59.64,129.69],"5-26-7":[53.73,129.8],"6-53-16":[58.28,129.28],"6-53-17":[56.51,123.07],"5-26-8":[49.39,956.08],"6-53-18":[49.22,2346.09],"6-53-19":[40.38,100.63],"5-26-9":[38.59,2346.09],"6-53-20":[31.82,83.95],"6-53-21":[25.24,69.72],"5-26-10":[22.35,83.95],"6-53-22":[17.36,52.25],"6-53-23":[15.16,40.62],"5-26-11":[9.78,52.25],"6-53-24":[15.01,37.08],"6-53-25":[10.17,36.9],"5-26-12":[2.46,37.08],"6-53-26":[3.36,31.78],"6-53-27":[0.38,19.03],"5-26-13":[-11.61,31.78],"6-53-28":[0.23,13.16],"6-53-29":[1.8,18.26],"5-26-14":[-11.61,18.26],"6-53-30":[5.2,18.06],"6-53-31":[0.58,16.65],"5-26-15":[-11.81,18.06],"6-53-32":[-9.18,11.61],"6-53-33":[-14,-1.77],"5-26-16":[-24.61,236.48],"6-53-34":[-21.18,-5.37],"6-53-35":[-21.12,-7.87],"5-26-17":[-23.03,-5.37],"6-53-36":[-19.03,-7.1],"6-53-37":[-14.64,-6.55],"5-26-18":[-21.93,-6.55],"6-53-38":[-14.32,-5.31],"6-53-39":[-22.84,584.18],"5-26-19":[-22.84,584.18],"6-53-40":[-12.77,-3.59],"6-53-41":[-8.93,2.46],"5-26-20":[-15.61,2.46],"6-53-42":[0.26,10.35],"6-53-43":[2.82,13.56],"5-26-21":[-4.72,13.56],"6-53-44":[2.99,18.1],"6-53-45":[3.74,19.28],"5-26-22":[-1.75,19.28],"6-53-46":[4.18,19.28],"6-53-47":[4.92,20.12],"5-26-23":[-1.79,20.12],"6-53-48":[4.93,21.48],"6-53-49":[6.89,25.29],"5-26-24":[0.32,25.29],"6-53-50":[10.63,32.32],"6-53-51":[8.47,44.34],"5-26-25":[8.47,44.34],"6-53-52":[22.07,48.37],"6-53-53":[20.05,48.14],"5-26-26":[20.05,48.37],"6-53-54":[11.81,40.04],"6-53-55":[6.84,22.99],"5-26-27":[6.84,40.04],"6-53-56":[1.22,13.57],"6-53-57":[-4.92,1.98],"5-26-28":[-6.52,15.07],"6-53-58":[-10.25,-0.09],"6-53-59":[-16.53,1294.14],"5-26-29":[-21.87,1294.14],"6-53-60":[-35.54,1634.18],"6-53-61":[910.73,1960.78],"5-26-30":[-37.76,1960.78],"6-53-62":[1887.28,2301.31],"6-53-63":[-29.54,2746.48],"5-26-31":[-29.54,2746.48],"6-54-0":[13.6,38.03],"6-54-1":[19.6,54.55],"6-54-2":[26.58,989.93],"6-54-3":[31.94,1631.63],"6-54-4":[1236.12,2416.2],"6-54-5":[47.32,2217.34],"6-54-6":[48.05,2458.39],"6-54-7":[54.4,2560.61],"6-54-8":[59.36,127.95],"6-54-9":[61.22,130.4],"6-54-10":[62.35,130.18],"6-54-11":[60.84,126.55],"6-54-12":[60.65,122.78],"6-54-13":[60.63,127.15],"6-54-14":[62.98,131.06],"6-54-15":[64.62,132.17],"6-54-16":[60.84,129.76],"6-54-17":[57.33,122.83],"6-54-18":[41.12,1086.32],"6-54-19":[38.34,100.89],"6-54-20":[31.04,82.99],"6-54-21":[26.81,66.49],"6-54-22":[21.12,53.95],"6-54-23":[17.1,42.86],"6-54-24":[18.44,45.39],"6-54-25":[15.88,1434.62],"6-54-26":[10.32,41.69],"6-54-27":[7.13,30.03],"6-54-28":[6.53,22.91],"6-54-29":[6.71,23.82],"6-54-30":[8.3,22.61],"6-54-31":[6.31,20.6],"6-54-32":[-2.33,18.27],"6-54-33":[-10.41,1.49],"6-54-34":[-15.53,-1.98],"6-54-35":[-16.6,-5.32],"6-54-36":[-16.29,-6.18],"6-54-37":[-15.52,-6.1],"6-54-38":[-15.32,-6.3],"6-54-39":[-13.65,-5.14],"6-54-40":[-12.51,-0.74],"6-54-41":[-6.03,5.66],"6-54-42":[1.39,12.5],"6-54-43":[4.87,19.2],"6-54-44":[7.12,24.93],"6-54-45":[8.92,26.98],"6-54-46":[9.52,27.23],"6-54-47":[9.52,28],"6-54-48":[10.95,28.86],"6-54-49":[10.95,32.39],"6-54-50":[15.14,35.56],"6-54-51":[2.7,43.39],"6-54-52":[3.95,1349.09],"6-54-53":[10.78,1035.34],"6-54-54":[10.99,38.39],"6-54-55":[6.04,21.85],"6-54-56":[1.32,12.69],"6-54-57":[-4.19,2.98],"6-54-58":[-8.55,102.38],"6-54-59":[-11.49,1507.45],"6-54-60":[282.95,1787.39],"6-54-61":[1151.7,2012.99],"6-54-62":[1960.77,2336.23],"6-54-63":[-29.54,2746.48],"6-55-0":[13.6,37.95],"6-55-1":[19.57,55.69],"5-27-0":[13.6,55.69],"6-55-2":[26.3,766.89],"6-55-3":[31.3,1410.95],"5-27-1":[26.3,1631.63],"4-13-0":[13.6,2076.74],"6-55-4":[33.45,2030.68],"6-55-5":[42.85,2071.97],"5-27-2":[33.45,2416.2],"6-55-6":[49.24,2327.64],"6-55-7":[55.03,1988.61],"5-27-3":[48.05,2560.61],"4-13-1":[33.45,3982.86],"3-6-0":[13.6,3982.86],"6-55-8":[59.61,1471.32],"6-55-9":[64.12,194.14],"5-27-4":[59.36,1471.32],"6-55-10":[60.83,129.91],"6-55-11":[60.83,126.1],"5-27-5":[60.83,130.18],"4-13-2":[54.3,1471.32],"6-55-12":[59.88,126.1],"6-55-13":[60,126.13],"5-27-6":[59.88,127.15],"6-55-14":[62.57,129.01],"6-55-15":[62.57,131.88],"5-27-7":[62.57,132.17],"4-13-3":[53.73,132.17],"3-6-1":[-226.59,3108.37],"6-55-16":[59.45,129.91],"6-55-17":[53.56,120.26],"5-27-8":[53.56,129.91],"6-55-18":[41.9,1131.62],"6-55-19":[36.6,100.95],"5-27-9":[36.6,1131.62],"4-13-4":[36.6,2346.09],"6-55-20":[30.32,76.17],"6-55-21":[26.98,63.94],"5-27-10":[26.81,82.99],"6-55-22":[22.3,55.85],"6-55-23":[20.15,50.59],"5-27-11":[17.1,55.85],"4-13-5":[9.78,83.95],"3-6-2":[-26.69,2346.09],"6-55-24":[19.98,51.75],"6-55-25":[2.58,2003.8],"5-27-12":[2.58,2003.8],"6-55-26":[-31.78,2815.55],"6-55-27":[12.13,37.39],"5-27-13":[-31.78,2815.55],"4-13-6":[-31.78,2815.55],"6-55-28":[11.03,31.14],"6-55-29":[11.25,32.89],"5-27-14":[6.53,32.89],"6-55-30":[10.59,30.93],"6-55-31":[9.61,23.87],"5-27-15":[6.31,30.93],"4-13-7":[-11.81,32.89],"3-6-3":[-65.14,2815.55],"6-55-32":[1.48,20.71],"6-55-33":[-3.02,8.19],"5-27-16":[-10.41,20.71],"6-55-34":[-9.54,4],"6-55-35":[-12.07,-1.23],"5-27-17":[-16.6,4],"4-13-8":[-24.61,236.48],"6-55-36":[-12.66,-2.77],"6-55-37":[-14.13,-3.24],"5-27-18":[-16.29,-2.77],"6-55-38":[-14.42,-3.25],"6-55-39":[-12.99,-2.51],"5-27-19":[-15.32,-2.51],"4-13-9":[-22.84,584.18],"3-6-4":[-74.23,2863.35],"6-55-40":[-10.22,3.34],"6-55-41":[-0.75,11.75],"5-27-20":[-12.51,11.75],"6-55-42":[3.17,18.07],"6-55-43":[7.05,25.53],"5-27-21":[1.39,25.53],"4-13-10":[-15.61,25.53],"6-55-44":[9.9,32.41],"6-55-45":[13.07,35.35],"5-27-22":[7.12,35.35],"6-55-46":[13.58,36.95],"6-55-47":[13.63,36.98],"5-27-23":[9.52,36.98],"4-13-11":[-1.79,36.98],"3-6-5":[-170.49,2060.99],"6-55-48":[14.16,36.96],"6-55-49":[14.19,37.24],"5-27-24":[10.95,37.24],"6-55-50":[16.34,39.76],"6-55-51":[3.61,42.27],"5-27-25":[2.7,43.39],"4-13-12":[0.32,44.34],"6-55-52":[3.95,37.89],"6-55-53":[9.63,38.97],"5-27-26":[3.95,1349.09],"6-55-54":[10.3,35.96],"6-55-55":[6.04,20.47],"5-27-27":[6.04,38.39],"4-13-13":[3.95,1349.09],"3-6-6":[-44.49,2916.19],"6-55-56":[1.74,12.02],"6-55-57":[-4.2,3.22],"5-27-28":[-4.2,12.69],"6-55-58":[-6.28,557.2],"6-55-59":[102.37,1604.48],"5-27-29":[-11.49,1604.48],"4-13-14":[-21.87,1604.48],"6-55-60":[378.53,1737.31],"6-55-61":[1187.19,2103.65],"5-27-30":[282.95,2103.65],"6-55-62":[2012.98,2360.08],"6-55-63":[-29.54,2746.48],"5-27-31":[-29.54,2746.48],"4-13-15":[-37.76,2746.48],"3-6-7":[-47.53,2746.48],"6-56-0":[13.6,37.87],"6-56-1":[19.57,55.73],"6-56-2":[25.75,654.04],"6-56-3":[28.03,1529.13],"6-56-4":[28.03,995.54],"6-56-5":[38.36,1653.87],"6-56-6":[49.95,1002],"6-56-7":[55.4,671.1],"6-56-8":[61.97,1784.7],"6-56-9":[62.67,1475.57],"6-56-10":[60.06,128.25],"6-56-11":[60.24,126.29],"6-56-12":[59.56,126.29],"6-56-13":[59.86,126.21],"6-56-14":[61.49,126.55],"6-56-15":[60.3,127.18],"6-56-16":[56.77,126.5],"6-56-17":[50.99,117.02],"6-56-18":[43.52,106.96],"6-56-19":[36.6,92.67],"6-56-20":[32.36,81.82],"6-56-21":[27.93,72.03],"6-56-22":[25.77,65.54],"6-56-23":[23.87,64.24],"6-56-24":[23.73,52.11],"6-56-25":[24.85,53.98],"6-56-26":[18.69,52.63],"6-56-27":[15.51,44.22],"6-56-28":[15.28,40.2],"6-56-29":[15.58,37.67],"6-56-30":[12.32,36.23],"6-56-31":[11.02,26.97],"6-56-32":[4.25,25.11],"6-56-33":[2.15,15.56],"6-56-34":[-2.11,11.93],"6-56-35":[-5.35,8.47],"6-56-36":[-7.16,4.11],"6-56-37":[-7.33,0.85],"6-56-38":[-8.48,0.68],"6-56-39":[-8.31,1.89],"6-56-40":[-4.64,8.4],"6-56-41":[2.15,16.04],"6-56-42":[6.23,22.14],"6-56-43":[9.62,30.63],"6-56-44":[15.59,36.65],"6-56-45":[16.37,40.5],"6-56-46":[18.42,43.37],"6-56-47":[18.42,44.13],"6-56-48":[18.16,43.98],"6-56-49":[18.16,41.79],"6-56-50":[20.3,41.65],"6-56-51":[20.3,42.33],"6-56-52":[17.44,40.96],"6-56-53":[15.9,41.96],"6-56-54":[9.77,33.92],"6-56-55":[6.16,19.63],"6-56-56":[1.72,12.29],"6-56-57":[-2.06,3.98],"6-56-58":[-5.82,819.33],"6-56-59":[421.04,1695.38],"6-56-60":[516.59,1629.01],"6-56-61":[1285.43,2172.84],"6-56-62":[2103.64,2379.92],"6-56-63":[-29.54,2746.48],"6-57-0":[13.6,37.8],"6-57-1":[19.62,55.09],"5-28-0":[13.6,55.73],"6-57-2":[25.6,59.23],"6-57-3":[28.3,1436.69],"5-28-1":[25.6,1529.13],"6-57-4":[28.3,681.94],"6-57-5":[38.01,949.92],"5-28-2":[28.03,1653.87],"6-57-6":[51.09,115.49],"6-57-7":[57.7,126.66],"5-28-3":[49.95,1002],"6-57-8":[62.46,1937.43],"6-57-9":[60.84,2123.62],"5-28-4":[60.84,2123.62],"6-57-10":[59.7,124.91],"6-57-11":[58.97,123.99],"5-28-5":[58.97,128.25],"6-57-12":[58.91,123.99],"6-57-13":[57.13,122.5],"5-28-6":[57.13,126.29],"6-57-14":[58.08,124.14],"6-57-15":[58.53,123],"5-28-7":[58.08,127.18],"6-57-16":[54.18,119.6],"6-57-17":[49.49,110.36],"5-28-8":[49.49,126.5],"6-57-18":[43.12,101.63],"6-57-19":[40.71,95.46],"5-28-9":[36.6,106.96],"6-57-20":[36.01,1880.85],"6-57-21":[32.18,2439.69],"5-28-10":[27.93,2439.69],"6-57-22":[30.53,1522.97],"6-57-23":[25.18,68.01],"5-28-11":[23.87,1522.97],"6-57-24":[-14.49,116.51],"6-57-25":[25.65,60.59],"5-28-12":[-14.49,116.51],"6-57-26":[1.56,171.48],"6-57-27":[18.28,57.96],"5-28-13":[1.56,171.48],"6-57-28":[17.32,53.31],"6-57-29":[17.61,43.04],"5-28-14":[15.28,53.31],"6-57-30":[14.23,37.19],"6-57-31":[11.87,33.41],"5-28-15":[11.02,37.19],"6-57-32":[8.76,34.41],"6-57-33":[6.71,26.59],"5-28-16":[2.15,34.41],"6-57-34":[4.93,24.73],"6-57-35":[2.81,19.54],"5-28-17":[-5.35,24.73],"6-57-36":[0.84,14.19],"6-57-37":[0.34,10.34],"5-28-18":[-7.33,14.19],"6-57-38":[-0.06,10.45],"6-57-39":[-0.17,10.33],"5-28-19":[-8.48,10.45],"6-57-40":[1.37,15.84],"6-57-41":[5.03,21.64],"5-28-20":[-4.64,21.64],"6-57-42":[8.34,26.94],"6-57-43":[11.9,34.46],"5-28-21":[6.23,34.46],"6-57-44":[15.59,40.42],"6-57-45":[18.81,45.89],"5-28-22":[15.59,45.89],"6-57-46":[20.61,49.37],"6-57-47":[22.02,50.19],"5-28-23":[18.42,50.19],"6-57-48":[21.38,50.16],"6-57-49":[20.47,48.13],"5-28-24":[18.16,50.16],"6-57-50":[20.4,45.48],"6-57-51":[20.34,44.16],"5-28-25":[20.3,45.48],"6-57-52":[19.71,42.18],"6-57-53":[15.9,42.48],"5-28-26":[15.9,42.48],"6-57-54":[9.16,31.18],"6-57-55":[6.21,18.19],"5-28-27":[6.16,33.92],"6-57-56":[2.3,13.36],"6-57-57":[0.42,11.7],"5-28-28":[-2.06,13.36],"6-57-58":[-1.9,1093.26],"6-57-59":[819.32,1811.71],"5-28-29":[-5.82,1811.71],"6-57-60":[814.02,1663.61],"6-57-61":[1522.35,2225.4],"5-28-30":[516.59,2225.4],"6-57-62":[2172.83,2420.8],"6-57-63":[-29.54,2746.48],"5-28-31":[-29.54,2746.48],"6-58-0":[13.6,37.78],"6-58-1":[19.71,53.62],"6-58-2":[25.56,61.94],"6-58-3":[29.9,345.15],"6-58-4":[30,79.45],"6-58-5":[38.66,105.36],"6-58-6":[50.37,116.37],"6-58-7":[58.46,124.92],"6-58-8":[60.43,1885.38],"6-58-9":[60.01,2140.58],"6-58-10":[58.42,121.69],"6-58-11":[57.73,123.87],"6-58-12":[56.63,123.87],"6-58-13":[57.04,123.14],"6-58-14":[55.87,119.28],"6-58-15":[55.11,118.34],"6-58-16":[50.41,118.05],"6-58-17":[47.21,106.08],"6-58-18":[45.73,104.94],"6-58-19":[42.88,99.37],"6-58-20":[28.43,1402.2],"6-58-21":[13.23,3730.85],"6-58-22":[29.84,1980.83],"6-58-23":[-10.67,745.87],"6-58-24":[-18.64,535.71],"6-58-25":[-14.6,356.34],"6-58-26":[-1.62,135.29],"6-58-27":[-20.7,301.55],"6-58-28":[0.18,458.6],"6-58-29":[18.93,63.46],"6-58-30":[15.77,41.91],"6-58-31":[13.35,38.21],"6-58-32":[13.47,38.21],"6-58-33":[12.71,33.98],"6-58-34":[-2.23,864.67],"6-58-35":[7.45,27.57],"6-58-36":[5.05,20.06],"6-58-37":[4.98,16.73],"6-58-38":[4.46,16.62],"6-58-39":[4.41,17.65],"6-58-40":[5.55,22.04],"6-58-41":[8.28,26.07],"6-58-42":[11.11,30.34],"6-58-43":[13.85,35.77],"6-58-44":[17.65,40.21],"6-58-45":[20.04,47.1],"6-58-46":[23.2,50.18],"6-58-47":[24.78,52.72],"6-58-48":[24.35,54.26],"6-58-49":[24.35,51.82],"6-58-50":[22.38,49.92],"6-58-51":[21.5,46.02],"6-58-52":[18.45,42.72],"6-58-53":[13.3,41.86],"6-58-54":[9.11,28.68],"6-58-55":[6.73,17.29],"6-58-56":[3.08,13.48],"6-58-57":[2.25,357.87],"6-58-58":[2.48,1674.63],"6-58-59":[1093.25,1949.57],"6-58-60":[1289.31,1790.34],"6-58-61":[1663.6,2289.94],"6-58-62":[2225.39,2460.86],"6-58-63":[-29.54,2746.48],"6-59-0":[13.6,37.79],"6-59-1":[19.8,52.18],"5-29-0":[13.6,53.62],"6-59-2":[25.75,63.75],"6-59-3":[30.49,64.24],"5-29-1":[25.56,345.15],"4-14-0":[13.6,1529.13],"6-59-4":[30.51,84.68],"6-59-5":[41.87,100.49],"5-29-2":[30,105.36],"6-59-6":[50.16,115.8],"6-59-7":[56.81,119.95],"5-29-3":[50.16,124.92],"4-14-1":[28.03,1653.87],"6-59-8":[57.71,1189.75],"6-59-9":[59.83,125.87],"5-29-4":[57.71,2140.58],"6-59-10":[55.41,120.74],"6-59-11":[54.59,121.48],"5-29-5":[54.59,123.87],"4-14-2":[54.59,2140.58],"6-59-12":[54.73,121.88],"6-59-13":[57.85,123],"5-29-6":[54.73,123.87],"6-59-14":[52.82,118.25],"6-59-15":[49.92,112.43],"5-29-7":[49.92,119.28],"4-14-3":[49.92,127.18],"6-59-16":[47.92,112.43],"6-59-17":[45.53,102.32],"5-29-8":[45.53,118.05],"6-59-18":[43.5,103.1],"6-59-19":[40.18,98.54],"5-29-9":[40.18,104.94],"4-14-4":[36.6,126.5],"6-59-20":[40.18,88.87],"6-59-21":[34.44,731.97],"5-29-10":[13.23,3730.85],"6-59-22":[-35.01,609.23],"6-59-23":[182.63,951.26],"5-29-11":[-35.01,1980.83],"4-14-5":[-35.01,3730.85],"6-59-24":[63.41,838.62],"6-59-25":[2.52,699.41],"5-29-12":[-18.64,838.62],"6-59-26":[4.84,480.98],"6-59-27":[22.18,1567.34],"5-29-13":[-20.7,1567.34],"4-14-6":[-20.7,1567.34],"6-59-28":[-24.77,1463.87],"6-59-29":[1.22,935.28],"5-29-14":[-24.77,1463.87],"6-59-30":[17.76,49.38],"6-59-31":[15.91,40.51],"5-29-15":[13.35,49.38],"4-14-7":[-24.77,1463.87],"6-59-32":[17.61,40.61],"6-59-33":[15.36,39.26],"5-29-16":[12.71,40.61],"6-59-34":[13.68,36.87],"6-59-35":[10.36,29.33],"5-29-17":[-2.23,864.67],"4-14-8":[-5.35,864.67],"6-59-36":[8.78,22.54],"6-59-37":[8.23,21.11],"5-29-18":[4.98,22.54],"6-59-38":[8.08,23.26],"6-59-39":[8.16,24.61],"5-29-19":[4.41,24.61],"4-14-9":[-8.48,24.61],"6-59-40":[9.22,25.8],"6-59-41":[11.68,28.54],"5-29-20":[5.55,28.54],"6-59-42":[13.34,31.4],"6-59-43":[15.33,35.12],"5-29-21":[11.11,35.77],"4-14-10":[-4.64,35.77],"6-59-44":[17.37,39.98],"6-59-45":[15,2060.11],"5-29-22":[15,2060.11],"6-59-46":[22.8,50.12],"6-59-47":[24.47,52.47],"5-29-23":[22.8,52.72],"4-14-11":[15,2060.11],"6-59-48":[25.92,55.19],"6-59-49":[25.17,55.91],"5-29-24":[24.35,55.91],"6-59-50":[23.47,53.48],"6-59-51":[21.5,49.06],"5-29-25":[21.5,53.48],"4-14-12":[18.16,55.91],"6-59-52":[18.45,44.55],"6-59-53":[13.3,39.12],"5-29-26":[13.3,44.55],"6-59-54":[8.95,26.98],"6-59-55":[6.73,17.28],"5-29-27":[6.73,28.68],"4-14-13":[6.16,44.55],"6-59-56":[4.68,14.62],"6-59-57":[4.84,608.1],"5-29-28":[2.25,608.1],"6-59-58":[10.52,2647.27],"6-59-59":[1580.6,2213.91],"5-29-29":[2.48,2647.27],"4-14-14":[-5.82,2647.27],"6-59-60":[1486.82,1899.59],"6-59-61":[1790.33,2337.34],"5-29-30":[1289.31,2337.34],"6-59-62":[2289.93,2494.91],"6-59-63":[-29.54,2746.48],"5-29-31":[-29.54,2746.48],"4-14-15":[-29.54,2746.48],"6-60-0":[13.6,37.78],"6-60-1":[19.82,52.11],"6-60-2":[26.07,63.8],"6-60-3":[31.53,68.91],"6-60-4":[32.12,88.61],"6-60-5":[43.35,100.59],"6-60-6":[50.16,660.73],"6-60-7":[54.73,115.86],"6-60-8":[55.53,123.35],"6-60-9":[56.93,123.85],"6-60-10":[54.77,119.67],"6-60-11":[36.3,467.08],"6-60-12":[54.66,847.15],"6-60-13":[31.72,1061.19],"6-60-14":[50.82,118.9],"6-60-15":[46.84,106.06],"6-60-16":[46.52,848.03],"6-60-17":[45.68,934.31],"6-60-18":[43.52,948.19],"6-60-19":[36.29,97.22],"6-60-20":[36.5,3428.78],"6-60-21":[36.12,3435.16],"6-60-22":[183.32,753.26],"6-60-23":[203.99,625.45],"6-60-24":[208.98,621.86],"6-60-25":[126.64,616.33],"6-60-26":[54.15,571.22],"6-60-27":[72.56,986.01],"6-60-28":[266.59,1965.58],"6-60-29":[-0.28,1465.14],"6-60-30":[10.1,448.45],"6-60-31":[17.88,41.59],"6-60-32":[19,40.1],"6-60-33":[17.4,38.62],"6-60-34":[14.28,36.87],"6-60-35":[11.08,29.16],"6-60-36":[9.95,23.09],"6-60-37":[10.09,23.78],"6-60-38":[10.53,25.27],"6-60-39":[11.82,25.49],"6-60-40":[12.34,27.11],"6-60-41":[13.01,29.48],"6-60-42":[14.24,30.5],"6-60-43":[15.07,32.66],"6-60-44":[15.81,38.1],"6-60-45":[18.29,45.5],"6-60-46":[6.47,931.45],"6-60-47":[23.42,51.85],"6-60-48":[24.91,56.45],"6-60-49":[26.78,56.31],"6-60-50":[24.85,54.12],"6-60-51":[23.88,51.29],"6-60-52":[18.84,47.16],"6-60-53":[13.07,37.45],"6-60-54":[8.97,27.21],"6-60-55":[7.29,18.18],"6-60-56":[6.69,18.97],"6-60-57":[8.72,1445.48],"6-60-58":[608.09,2647.27],"6-60-59":[1819.4,2378.63],"6-60-60":[1773.2,2084.27],"6-60-61":[1899.58,2371.33],"6-60-62":[2337.33,2524.96],"6-60-63":[-29.54,2746.49],"6-61-0":[13.6,37.76],"6-61-1":[19.78,52.5],"5-30-0":[13.6,52.5],"6-61-2":[26.07,61.81],"6-61-3":[29.91,75.45],"5-30-1":[26.07,75.45],"6-61-4":[34.23,88.45],"6-61-5":[43.49,100.68],"5-30-2":[32.12,100.68],"6-61-6":[49.89,2067.72],"6-61-7":[51.02,110.49],"5-30-3":[49.89,2067.72],"6-61-8":[51.94,113.62],"6-61-9":[52.94,792.85],"5-30-4":[51.94,792.85],"6-61-10":[54.18,472.86],"6-61-11":[40.34,998.82],"5-30-5":[36.3,998.82],"6-61-12":[47.75,911.33],"6-61-13":[45.76,978.67],"5-30-6":[31.72,1061.19],"6-61-14":[51.83,275.17],"6-61-15":[44.76,105.85],"5-30-7":[44.76,275.17],"6-61-16":[42.99,2441.8],"6-61-17":[63.03,2479.29],"5-30-8":[42.99,2479.29],"6-61-18":[21.6,1153.69],"6-61-19":[35.43,1045.54],"5-30-9":[21.6,1153.69],"6-61-20":[43.2,3969.25],"6-61-21":[321.36,3240.15],"5-30-10":[36.12,3969.25],"6-61-22":[327.42,538.03],"6-61-23":[228.84,581.24],"5-30-11":[183.32,753.26],"6-61-24":[207.9,518.07],"6-61-25":[135.48,456.49],"5-30-12":[126.64,621.86],"6-61-26":[189.7,487.98],"6-61-27":[282.45,725.34],"5-30-13":[54.15,986.01],"6-61-28":[245.42,1263.81],"6-61-29":[98.59,1793.46],"5-30-14":[-0.28,1965.58],"6-61-30":[9.64,563.59],"6-61-31":[17.84,40.64],"5-30-15":[9.64,563.59],"6-61-32":[18.11,39.27],"6-61-33":[16.27,37.52],"5-30-16":[16.27,40.1],"6-61-34":[14.28,34.25],"6-61-35":[11.71,28.84],"5-30-17":[11.08,36.87],"6-61-36":[11.3,28.82],"6-61-37":[-99.67,814.4],"5-30-18":[-99.67,814.4],"6-61-38":[11.9,26.07],"6-61-39":[12.45,26.9],"5-30-19":[10.53,26.9],"6-61-40":[12.64,30.04],"6-61-41":[13.85,32.62],"5-30-20":[12.34,32.62],"6-61-42":[14.87,32.51],"6-61-43":[15.14,33.46],"5-30-21":[14.24,33.46],"6-61-44":[15.81,36.25],"6-61-45":[17.74,44.2],"5-30-22":[15.81,45.5],"6-61-46":[21.26,47.29],"6-61-47":[22.24,50.55],"5-30-23":[6.47,931.45],"6-61-48":[24.62,53.23],"6-61-49":[25.06,55.27],"5-30-24":[24.62,56.45],"6-61-50":[26.01,56.2],"6-61-51":[23.88,54.1],"5-30-25":[23.88,56.2],"6-61-52":[17.85,50.82],"6-61-53":[13.07,35.17],"5-30-26":[13.07,50.82],"6-61-54":[9.42,26.81],"6-61-55":[7.57,20.65],"5-30-27":[7.29,27.21],"6-61-56":[7.48,20.76],"6-61-57":[10.04,2119.03],"5-30-28":[6.69,2119.03],"6-61-58":[1445.47,2720.05],"6-61-59":[2045.49,2519.15],"5-30-29":[608.09,2720.05],"6-61-60":[1905.59,2242.55],"6-61-61":[1958.12,2404.88],"5-30-30":[1773.2,2404.88],"6-61-62":[2371.32,2555.1],"6-61-63":[-29.54,2747.47],"5-30-31":[-29.54,2747.47],"6-62-0":[13.6,37.73],"6-62-1":[19.73,53.01],"6-62-2":[26.54,59.25],"6-62-3":[28.63,75.62],"6-62-4":[36.2,85.28],"6-62-5":[42.31,99.8],"6-62-6":[49.28,108.11],"6-62-7":[49.78,103.88],"6-62-8":[50.57,107.83],"6-62-9":[49.7,111.74],"6-62-10":[49.66,298.22],"6-62-11":[49.96,1388.09],"6-62-12":[41.71,1035.94],"6-62-13":[45.89,1109.06],"6-62-14":[20.27,639.9],"6-62-15":[44.39,219.03],"6-62-16":[32.45,2687.22],"6-62-17":[297.06,2577.79],"6-62-18":[44.23,3501.33],"6-62-19":[32.49,2419.81],"6-62-20":[632.45,3718.38],"6-62-21":[368.61,1721.06],"6-62-22":[218.45,696.4],"6-62-23":[131.07,471.46],"6-62-24":[138.86,407.06],"6-62-25":[256.95,487.53],"6-62-26":[239.52,1006.14],"6-62-27":[249.3,631.61],"6-62-28":[194.06,789.75],"6-62-29":[15.13,766.66],"6-62-30":[-46.15,332.62],"6-62-31":[17.31,38.68],"6-62-32":[17.52,38.48],"6-62-33":[15.74,36.14],"6-62-34":[14.55,33.16],"6-62-35":[12.03,28.93],"6-62-36":[12.1,28.82],"6-62-37":[12.83,26.82],"6-62-38":[12.65,28.5],"6-62-39":[13.05,31.28],"6-62-40":[13.65,34.28],"6-62-41":[15.43,36.13],"6-62-42":[16.17,36.67],"6-62-43":[16.17,37.77],"6-62-44":[16.2,37.77],"6-62-45":[16.2,40.32],"6-62-46":[17.78,44.64],"6-62-47":[19.75,49.26],"6-62-48":[22.32,50.13],"6-62-49":[23.73,54.94],"6-62-50":[26.51,56.37],"6-62-51":[24.74,55.65],"6-62-52":[17.74,50.79],"6-62-53":[13.06,33.87],"6-62-54":[10.42,25.96],"6-62-55":[9.91,22.36],"6-62-56":[8.78,20.96],"6-62-57":[10.28,2479.23],"6-62-58":[1813.36,2850.41],"6-62-59":[2242.54,2618.27],"6-62-60":[1991.4,2314.66],"6-62-61":[1993.14,2457.95],"6-62-62":[2404.87,2581.14],"6-62-63":[-29.54,2749.47],"6-63-0":[13.6,37.73],"6-63-1":[19.72,53.59],"5-31-0":[13.6,53.59],"6-63-2":[26.54,62.24],"6-63-3":[28.85,73.73],"5-31-1":[26.54,75.62],"4-15-0":[13.6,75.62],"6-63-4":[35.88,86.28],"6-63-5":[42.26,98.34],"5-31-2":[35.88,99.8],"6-63-6":[48.49,104.24],"6-63-7":[48.27,101.1],"5-31-3":[48.27,108.11],"4-15-1":[32.12,2067.72],"3-7-0":[13.6,2067.72],"6-63-8":[48.82,103.66],"6-63-9":[48.93,103.55],"5-31-4":[48.82,111.74],"6-63-10":[46.96,500.18],"6-63-11":[46.68,821.88],"5-31-5":[46.68,1388.09],"4-15-2":[36.3,1388.09],"6-63-12":[-1.23,942.82],"6-63-13":[5.01,686.85],"5-31-6":[-1.23,1109.06],"6-63-14":[29.66,466.81],"6-63-15":[17.32,332.21],"5-31-7":[17.32,639.9],"4-15-3":[-1.23,1109.06],"3-7-1":[-1.23,2140.58],"2-3-0":[-226.59,3982.86],"6-63-16":[16.62,3299.64],"6-63-17":[40.73,2357.66],"5-31-8":[16.62,3299.64],"6-63-18":[40.99,2423.37],"6-63-19":[45.96,1802.73],"5-31-9":[32.49,3501.33],"4-15-4":[16.62,3501.33],"6-63-20":[585.28,2177.76],"6-63-21":[198.79,856.94],"5-31-10":[198.79,3718.38],"6-63-22":[154.1,519.6],"6-63-23":[95.92,407.48],"5-31-11":[95.92,696.4],"4-15-5":[36.12,3969.25],"3-7-2":[-35.01,3969.25],"6-63-24":[189.24,556.84],"6-63-25":[243.53,577.03],"5-31-12":[138.86,577.03],"6-63-26":[242.09,1303.84],"6-63-27":[216.62,572.26],"5-31-13":[216.62,1303.84],"4-15-6":[54.15,1303.84],"6-63-28":[63.8,555.42],"6-63-29":[21.37,874.92],"5-31-14":[15.13,874.92],"6-63-30":[-6.39,370.77],"6-63-31":[16.48,36.2],"5-31-15":[-46.15,370.77],"4-15-7":[-46.15,1965.58],"3-7-3":[-46.15,1965.58],"2-3-1":[-65.14,3969.25],"1-1-0":[-328.06,5809.48],"6-63-32":[17.15,36.78],"6-63-33":[16.29,37.08],"5-31-16":[15.74,38.48],"6-63-34":[12.34,34.98],"6-63-35":[10.7,28.64],"5-31-17":[10.7,34.98],"4-15-8":[10.7,40.1],"6-63-36":[11.05,26.16],"6-63-37":[12.72,29.22],"5-31-18":[11.05,29.22],"6-63-38":[13.43,32.73],"6-63-39":[14.75,35.32],"5-31-19":[12.65,35.32],"4-15-9":[-99.67,814.4],"3-7-4":[-99.67,864.67],"6-63-40":[15.89,39.67],"6-63-41":[17.66,41.82],"5-31-20":[13.65,41.82],"6-63-42":[18.18,43.48],"6-63-43":[17.22,42.55],"5-31-21":[16.17,43.48],"4-15-10":[12.34,43.48],"6-63-44":[15.94,39.03],"6-63-45":[15.92,35.62],"5-31-22":[15.92,40.32],"6-63-46":[17.78,43.75],"6-63-47":[19.65,46.9],"5-31-23":[17.78,49.26],"4-15-11":[6.47,931.45],"3-7-5":[-4.64,2060.11],"2-3-2":[-170.49,2863.35],"6-63-48":[22.32,46.83],"6-63-49":[23.17,52.87],"5-31-24":[22.32,54.94],"6-63-50":[25.95,55.44],"6-63-51":[24.74,55.59],"5-31-25":[24.74,56.37],"4-15-12":[22.32,56.45],"6-63-52":[17.56,49.36],"6-63-53":[13.06,33.43],"5-31-26":[13.06,50.79],"6-63-54":[11.45,27.14],"6-63-55":[10.4,26.46],"5-31-27":[9.91,27.14],"4-15-13":[7.29,50.82],"3-7-6":[6.16,56.45],"6-63-56":[8.78,27.93],"6-63-57":[10.28,2064.74],"5-31-28":[8.78,2479.23],"6-63-58":[6.29,2924.47],"6-63-59":[-4.17,2804.3],"5-31-29":[-4.17,2924.47],"4-15-14":[-4.17,2924.47],"6-63-60":[-10.23,2430.85],"6-63-61":[-15.15,2498.87],"5-31-30":[-15.15,2498.87],"6-63-62":[-22.79,2597.05],"6-63-63":[-29.54,2749.47],"5-31-31":[-29.54,2749.47],"4-15-15":[-29.54,2749.47],"3-7-7":[-29.54,2924.47],"2-3-3":[-47.53,2924.47],"1-1-1":[-269.44,6969.13],"0-0-0":[-328.06,6969.13],"6-64-0":[13.6,37.78],"6-64-1":[19.72,53.59],"6-64-2":[26.6,62.89],"6-64-3":[31.41,76.27],"6-64-4":[36.86,86.28],"6-64-5":[42.7,96.99],"6-64-6":[47,101.29],"6-64-7":[46.73,97.64],"6-64-8":[45.83,101.59],"6-64-9":[45.04,100.52],"6-64-10":[45.18,100.56],"6-64-11":[44.21,95.58],"6-64-12":[41.57,93.35],"6-64-13":[34.37,320.14],"6-64-14":[39.88,478.36],"6-64-15":[62.72,1880.44],"6-64-16":[53.23,3439.27],"6-64-17":[36.39,2431.2],"6-64-18":[43.43,942.66],"6-64-19":[44.68,1847.74],"6-64-20":[490.98,1993.84],"6-64-21":[201.86,739.39],"6-64-22":[138.19,750.53],"6-64-23":[240.33,1166.19],"6-64-24":[334.09,962.42],"6-64-25":[276.69,863.32],"6-64-26":[184.15,556.46],"6-64-27":[168.62,439.96],"6-64-28":[61.71,880.1],"6-64-29":[-17.91,1022.44],"6-64-30":[14.82,41.3],"6-64-31":[15.22,34.38],"6-64-32":[16.21,36.77],"6-64-33":[11.49,36.62],"6-64-34":[9.51,33.23],"6-64-35":[9.43,23.73],"6-64-36":[10.62,24.95],"6-64-37":[12.53,29.78],"6-64-38":[14.73,33.26],"6-64-39":[16.29,40.92],"6-64-40":[19.97,44.49],"6-64-41":[19.97,48.03],"6-64-42":[20.9,49.27],"6-64-43":[20.23,48.27],"6-64-44":[16.76,40.95],"6-64-45":[16.76,37.18],"6-64-46":[18.63,43.85],"6-64-47":[20.07,44.45],"6-64-48":[21.17,45.85],"6-64-49":[22.33,51.91],"6-64-50":[24.99,54.93],"6-64-51":[23.66,55.36],"6-64-52":[17.25,48.1],"6-64-53":[13.73,33.44],"6-64-54":[13.39,34.01],"6-64-55":[11.02,33.97],"6-64-56":[10.25,28.87],"6-64-57":[11.81,2706.61],"6-64-58":[6.29,2970.03],"6-64-59":[-4.17,2947.12],"6-64-60":[-10.23,2543.75],"6-64-61":[-15.15,2526.16],"6-64-62":[-22.79,2618.03],"6-64-63":[-29.54,2752.45],"6-65-0":[13.6,37.81],"6-65-1":[19.76,53.09],"5-32-0":[13.6,53.59],"6-65-2":[26.31,62.46],"6-65-3":[31.01,77.1],"5-32-1":[26.31,77.1],"6-65-4":[38.18,84.8],"6-65-5":[42.64,95.66],"5-32-2":[36.86,96.99],"6-65-6":[44.99,96.88],"6-65-7":[43.49,94.7],"5-32-3":[43.49,101.29],"6-65-8":[42.8,94.18],"6-65-9":[35.63,935.72],"5-32-4":[35.63,935.72],"6-65-10":[20.82,1428.23],"6-65-11":[40.95,136.3],"5-32-5":[20.82,1428.23],"6-65-12":[36.37,88.77],"6-65-13":[-46.66,286.33],"5-32-6":[-46.66,320.14],"6-65-14":[-132.68,643.32],"6-65-15":[137.99,2274.24],"5-32-7":[-132.68,2274.24],"6-65-16":[38.05,2373.31],"6-65-17":[38.96,1377.73],"5-32-8":[36.39,3439.27],"6-65-18":[41.7,1623.57],"6-65-19":[89.48,2161.99],"5-32-9":[41.7,2161.99],"6-65-20":[100.21,941.46],"6-65-21":[185.69,739.39],"5-32-10":[100.21,1993.84],"6-65-22":[257.46,1758.12],"6-65-23":[380.48,2914.18],"5-32-11":[138.19,2914.18],"6-65-24":[426.07,1308.02],"6-65-25":[280.09,733.03],"5-32-12":[276.69,1308.02],"6-65-26":[222.19,683.02],"6-65-27":[143.28,527.99],"5-32-13":[143.28,683.02],"6-65-28":[62.64,650.86],"6-65-29":[-15.66,1095.61],"5-32-14":[-17.91,1095.61],"6-65-30":[-13.75,66.62],"6-65-31":[14.48,33.9],"5-32-15":[-13.75,66.62],"6-65-32":[-19.14,391.88],"6-65-33":[8.66,29.85],"5-32-16":[-19.14,391.88],"6-65-34":[8.35,21.97],"6-65-35":[8.94,22.61],"5-32-17":[8.35,33.23],"6-65-36":[10.62,25.98],"6-65-37":[12.58,30.79],"5-32-18":[10.62,30.79],"6-65-38":[14.93,37.7],"6-65-39":[17.15,49.91],"5-32-19":[14.73,49.91],"6-65-40":[20.87,54.91],"6-65-41":[22.64,56],"5-32-20":[19.97,56],"6-65-42":[22.51,51.03],"6-65-43":[20.23,46.2],"5-32-21":[20.23,51.03],"6-65-44":[17.99,42.51],"6-65-45":[17.84,41.99],"5-32-22":[16.76,42.51],"6-65-46":[18.63,42.48],"6-65-47":[19.73,46.07],"5-32-23":[18.63,46.07],"6-65-48":[21.17,46.4],"6-65-49":[22.33,50.98],"5-32-24":[21.17,51.91],"6-65-50":[24.64,53.8],"6-65-51":[11.85,778.86],"5-32-25":[11.85,778.86],"6-65-52":[17.24,47.71],"6-65-53":[14.74,34.75],"5-32-26":[13.73,48.1],"6-65-54":[14.81,35.37],"6-65-55":[11.99,34.42],"5-32-27":[11.02,35.37],"6-65-56":[10.65,29.79],"6-65-57":[13.9,3054.91],"5-32-28":[10.25,3054.91],"6-65-58":[2706.6,3100.96],"6-65-59":[2543.75,3103.71],"5-32-29":[-4.17,3103.71],"6-65-60":[2255.43,2692.57],"6-65-61":[2248.98,2548.45],"5-32-30":[-15.15,2692.57],"6-65-62":[2526.15,2639.22],"6-65-63":[-29.54,2753.44],"5-32-31":[-29.54,2753.44],"6-66-0":[13.6,37.83],"6-66-1":[19.78,52.14],"6-66-2":[25.64,63.1],"6-66-3":[31.05,77.42],"6-66-4":[38.55,84.66],"6-66-5":[41.57,92.58],"6-66-6":[43.18,93.1],"6-66-7":[40.62,90.09],"6-66-8":[40.54,87.08],"6-66-9":[20.94,2049.01],"6-66-10":[19.29,2462.53],"6-66-11":[4.23,1233.38],"6-66-12":[30.98,117],"6-66-13":[-180.54,876.36],"6-66-14":[90.73,1537.53],"6-66-15":[147.78,4840.9],"6-66-16":[39.23,4069.35],"6-66-17":[43.9,838.48],"6-66-18":[39.99,1553.78],"6-66-19":[-16.37,2250.36],"6-66-20":[30.28,336.76],"6-66-21":[186.56,611.03],"6-66-22":[377.14,1857.82],"6-66-23":[773.49,2746.4],"6-66-24":[408.81,1769.87],"6-66-25":[324.43,1672.93],"6-66-26":[317.13,774.79],"6-66-27":[281.36,874.43],"6-66-28":[46.87,1294.91],"6-66-29":[5.32,816.36],"6-66-30":[-26.99,431.08],"6-66-31":[-28.03,2007.45],"6-66-32":[7.57,607.86],"6-66-33":[6.06,24.36],"6-66-34":[7.09,17.3],"6-66-35":[8.79,26.37],"6-66-36":[11.61,28.98],"6-66-37":[13.1,31.91],"6-66-38":[15.69,39.68],"6-66-39":[19.55,50.83],"6-66-40":[22.63,56.5],"6-66-41":[24.02,57.13],"6-66-42":[22.8,49.96],"6-66-43":[22.8,49.11],"6-66-44":[20.77,46.17],"6-66-45":[20.77,46.35],"6-66-46":[21.39,48.2],"6-66-47":[21.39,49.68],"6-66-48":[23.35,51.88],"6-66-49":[23.35,52.26],"6-66-50":[25.43,54.25],"6-66-51":[21.38,55.21],"6-66-52":[17.56,44.14],"6-66-53":[17.56,39.22],"6-66-54":[17.07,39.22],"6-66-55":[14.68,33.84],"6-66-56":[12.76,30.48],"6-66-57":[13.3,3138.57],"6-66-58":[3003.04,3267.05],"6-66-59":[2692.56,3207.22],"6-66-60":[2381.28,2800.27],"6-66-61":[2355.2,2565.62],"6-66-62":[2548.44,2666.15],"6-66-63":[-29.54,2755.44],"6-67-0":[13.6,37.79],"6-67-1":[19.71,51.23],"5-33-0":[13.6,52.14],"6-67-2":[25.62,63.16],"6-67-3":[30.33,786.22],"5-33-1":[25.62,786.22],"4-16-0":[13.6,786.22],"6-67-4":[37.26,946.45],"6-67-5":[39.53,88.35],"5-33-2":[37.26,946.45],"6-67-6":[40.82,88.5],"6-67-7":[39.27,85.5],"5-33-3":[39.27,93.1],"4-16-1":[36.86,946.45],"6-67-8":[31.58,197.75],"6-67-9":[20.72,2315.19],"5-33-4":[20.72,2315.19],"6-67-10":[28.83,2472.36],"6-67-11":[32.5,847.8],"5-33-5":[4.23,2472.36],"4-16-2":[4.23,2472.36],"6-67-12":[-50.52,217.69],"6-67-13":[33.14,1186.21],"5-33-6":[-180.54,1186.21],"6-67-14":[128.81,1069.93],"6-67-15":[40.08,4029.26],"5-33-7":[40.08,4840.9],"4-16-3":[-180.54,4840.9],"6-67-16":[38.15,2694.01],"6-67-17":[43.45,2374.38],"5-33-8":[38.15,4069.35],"6-67-18":[34.1,1143.75],"6-67-19":[27.14,1413.3],"5-33-9":[-16.37,2250.36],"4-16-4":[-16.37,4069.35],"6-67-20":[23.52,728.47],"6-67-21":[219.62,762.97],"5-33-10":[23.52,762.97],"6-67-22":[420.92,1483.6],"6-67-23":[607.73,1924.9],"5-33-11":[377.14,2746.4],"4-16-5":[23.52,2914.18],"6-67-24":[396.41,1977.29],"6-67-25":[374.52,2023.83],"5-33-12":[324.43,2023.83],"6-67-26":[327.64,714.89],"6-67-27":[323.67,784.44],"5-33-13":[281.36,874.43],"4-16-6":[143.28,2023.83],"6-67-28":[100.15,1784.96],"6-67-29":[31.38,3028.39],"5-33-14":[5.32,3028.39],"6-67-30":[-10.88,4049.43],"6-67-31":[-22.22,1231.48],"5-33-15":[-28.03,4049.43],"4-16-7":[-28.03,4049.43],"6-67-32":[-63.62,953.44],"6-67-33":[-6.6,932.44],"5-33-16":[-63.62,953.44],"6-67-34":[7.15,22.92],"6-67-35":[9.03,31.46],"5-33-17":[7.09,31.46],"4-16-8":[-63.62,953.44],"6-67-36":[13.46,35.43],"6-67-37":[14.74,42.09],"5-33-18":[11.61,42.09],"6-67-38":[16.09,47],"6-67-39":[20.85,47.74],"5-33-19":[15.69,50.83],"4-16-9":[10.62,50.83],"6-67-40":[22.3,48.5],"6-67-41":[23.96,51.6],"5-33-20":[22.3,57.13],"6-67-42":[24.8,52.66],"6-67-43":[23.02,51.42],"5-33-21":[22.8,52.66],"4-16-10":[19.97,57.13],"6-67-44":[22.69,50.41],"6-67-45":[22.33,50.5],"5-33-22":[20.77,50.5],"6-67-46":[22.35,53.75],"6-67-47":[24.22,55.21],"5-33-23":[21.39,55.21],"4-16-11":[16.76,55.21],"6-67-48":[24.66,54.21],"6-67-49":[23.85,53.66],"5-33-24":[23.35,54.21],"6-67-50":[25.43,58.28],"6-67-51":[21.38,55.28],"5-33-25":[21.38,58.28],"4-16-12":[11.85,778.86],"6-67-52":[18.43,43.35],"6-67-53":[18.43,44.37],"5-33-26":[17.56,44.37],"6-67-54":[17.07,44.32],"6-67-55":[14.72,36.1],"5-33-27":[14.68,44.32],"4-16-13":[11.02,48.1],"6-67-56":[12.67,32.07],"6-67-57":[11.97,3175.51],"5-33-28":[11.97,3175.51],"6-67-58":[3138.56,3414.15],"6-67-59":[2800.26,3300.16],"5-33-29":[2692.56,3414.15],"4-16-14":[-4.17,3414.15],"6-67-60":[2458.67,2920.73],"6-67-61":[2439.79,2579.65],"5-33-30":[2355.2,2920.73],"6-67-62":[2565.61,2681.47],"6-67-63":[-29.54,2759.37],"5-33-31":[-29.54,2759.37],"4-16-15":[-29.54,2920.73],"6-68-0":[13.6,37.69],"6-68-1":[19.57,50.91],"6-68-2":[25.25,62.3],"6-68-3":[29.49,1385.65],"6-68-4":[33.18,1035.73],"6-68-5":[38.99,85.09],"6-68-6":[39.15,85.09],"6-68-7":[15.05,1058.54],"6-68-8":[9.73,1750.98],"6-68-9":[19.45,1810.17],"6-68-10":[36.63,1715.33],"6-68-11":[31.96,400.65],"6-68-12":[-23.11,248.2],"6-68-13":[-7.79,988.47],"6-68-14":[94.57,1845.84],"6-68-15":[33.77,3777.17],"6-68-16":[31.24,2893.68],"6-68-17":[26.5,2503.27],"6-68-18":[-23.32,2005.15],"6-68-19":[31.76,209.56],"6-68-20":[27.57,965.23],"6-68-21":[218.9,1068.73],"6-68-22":[308.04,1178.67],"6-68-23":[533.61,1310.69],"6-68-24":[378.5,1156.09],"6-68-25":[344.83,602.11],"6-68-26":[267.07,715.39],"6-68-27":[261.24,609.87],"6-68-28":[128.64,1857.59],"6-68-29":[216.86,2461.39],"6-68-30":[390.81,1585.63],"6-68-31":[140.91,1076.94],"6-68-32":[52.66,1044.68],"6-68-33":[-17.85,885.8],"6-68-34":[-25.08,923.81],"6-68-35":[-3.35,613.65],"6-68-36":[-2.05,2521.11],"6-68-37":[-19.61,2407.1],"6-68-38":[-21.61,2094.46],"6-68-39":[-59.49,1680.35],"6-68-40":[23.13,60.77],"6-68-41":[24.24,62.61],"6-68-42":[25.75,60.9],"6-68-43":[25.75,56.47],"6-68-44":[24.76,52.16],"6-68-45":[24.76,57.31],"6-68-46":[26.02,57.32],"6-68-47":[26.76,56.45],"6-68-48":[26.26,55.86],"6-68-49":[26.26,59.36],"6-68-50":[26.82,62.99],"6-68-51":[23.62,56.76],"6-68-52":[20.02,46.58],"6-68-53":[20.02,47.69],"6-68-54":[18.37,47.1],"6-68-55":[15.04,38.61],"6-68-56":[12.83,47.95],"6-68-57":[11.4,3169.81],"6-68-58":[3108.39,3460.36],"6-68-59":[2920.72,3384.4],"6-68-60":[2494.45,3077.24],"6-68-61":[2482.53,2588.56],"6-68-62":[2579.64,2693.73],"6-68-63":[-29.54,2763.36],"6-69-0":[13.6,37.44],"6-69-1":[19.4,50.44],"5-34-0":[13.6,50.91],"6-69-2":[25.03,60.03],"6-69-3":[29.14,1634.3],"5-34-1":[25.03,1634.3],"6-69-4":[31.42,1233.17],"6-69-5":[35.11,82.7],"5-34-2":[31.42,1233.17],"6-69-6":[35.26,81.82],"6-69-7":[6.63,1592.64],"5-34-3":[6.63,1592.64],"6-69-8":[4.87,1958.98],"6-69-9":[47.04,1310.43],"5-34-4":[4.87,1958.98],"6-69-10":[25.33,797.68],"6-69-11":[26.18,411.97],"5-34-5":[25.33,1715.33],"6-69-12":[19.39,280.51],"6-69-13":[17.14,1624.81],"5-34-6":[-23.11,1624.81],"6-69-14":[154.38,1918.97],"6-69-15":[39.77,2548.59],"5-34-7":[33.77,3777.17],"6-69-16":[16.47,1992.85],"6-69-17":[37.95,2820.36],"5-34-8":[16.47,2893.68],"6-69-18":[29.13,3340.97],"6-69-19":[28.62,288.67],"5-34-9":[-23.32,3340.97],"6-69-20":[9.01,392.95],"6-69-21":[69.58,877.11],"5-34-10":[9.01,1068.73],"6-69-22":[310.38,889.96],"6-69-23":[406.17,1202.42],"5-34-11":[308.04,1310.69],"6-69-24":[27.24,3331.17],"6-69-25":[184,850],"5-34-12":[27.24,3331.17],"6-69-26":[148.07,439.62],"6-69-27":[260.59,551.37],"5-34-13":[148.07,715.39],"6-69-28":[213.54,1124.79],"6-69-29":[275.12,1747.94],"5-34-14":[128.64,2461.39],"6-69-30":[354.28,1070.44],"6-69-31":[276.49,830.16],"5-34-15":[140.91,1585.63],"6-69-32":[252.96,879.81],"6-69-33":[167.87,929.4],"5-34-16":[-17.85,1044.68],"6-69-34":[256.14,1488.2],"6-69-35":[12.55,2127.16],"5-34-17":[-25.08,2127.16],"6-69-36":[166.21,2639.31],"6-69-37":[859.22,2023.5],"5-34-18":[-19.61,2639.31],"6-69-38":[730.14,1749.24],"6-69-39":[10.84,2585.59],"5-34-19":[-59.49,2585.59],"6-69-40":[-162.31,2386.26],"6-69-41":[-159.88,2015.68],"5-34-20":[-162.31,2386.26],"6-69-42":[18.98,704.83],"6-69-43":[26.09,62.3],"5-34-21":[18.98,704.83],"6-69-44":[25.43,58.48],"6-69-45":[25.82,55.17],"5-34-22":[24.76,58.48],"6-69-46":[26.02,58.49],"6-69-47":[27.55,60.1],"5-34-23":[26.02,60.1],"6-69-48":[27.02,60.61],"6-69-49":[27.99,64.2],"5-34-24":[26.26,64.2],"6-69-50":[29.22,67.45],"6-69-51":[23.62,62.15],"5-34-25":[23.62,67.45],"6-69-52":[21.62,53.1],"6-69-53":[22.44,49.65],"5-34-26":[20.02,53.1],"6-69-54":[19.27,47.76],"6-69-55":[15.24,39.44],"5-34-27":[15.04,47.76],"6-69-56":[14.46,300.15],"6-69-57":[14.89,3108.4],"5-34-28":[11.4,3169.81],"6-69-58":[3052.07,3514.26],"6-69-59":[3077.23,3446.22],"5-34-29":[2920.72,3514.26],"6-69-60":[2544.2,3147.37],"6-69-61":[2511.13,2608.3],"5-34-30":[2482.53,3147.37],"6-69-62":[2588.55,2704.02],"6-69-63":[-29.54,2767.34],"5-34-31":[-29.54,2767.34],"6-70-0":[13.6,37.16],"6-70-1":[19.22,49.87],"6-70-2":[24.52,56.84],"6-70-3":[28.6,1635.74],"6-70-4":[29.16,1193.37],"6-70-5":[30.17,441.82],"6-70-6":[29.72,72.1],"6-70-7":[12.72,2122.75],"6-70-8":[199.39,2096.53],"6-70-9":[20.3,735.36],"6-70-10":[18.93,350.95],"6-70-11":[-25.11,119.82],"6-70-12":[22.14,358.72],"6-70-13":[35.6,462.61],"6-70-14":[142.49,2057.45],"6-70-15":[100,1043.38],"6-70-16":[27.8,2489.77],"6-70-17":[24.67,2049.01],"6-70-18":[22.69,753.24],"6-70-19":[22.41,59.3],"6-70-20":[23.96,142.33],"6-70-21":[-25.04,490.94],"6-70-22":[198.02,1063.16],"6-70-23":[343.56,1540.59],"6-70-24":[27.16,3468.04],"6-70-25":[108.1,1729.27],"6-70-26":[121.91,428.48],"6-70-27":[274.16,1624.07],"6-70-28":[322.1,1063.08],"6-70-29":[354.64,767.3],"6-70-30":[305.29,833.8],"6-70-31":[254.18,533.95],"6-70-32":[223.98,448.91],"6-70-33":[192.31,886.28],"6-70-34":[403.12,1242.7],"6-70-35":[605.84,1757.04],"6-70-36":[1116.78,1831.76],"6-70-37":[1104.79,1687.18],"6-70-38":[1028.6,2162.84],"6-70-39":[1184.99,2171.43],"6-70-40":[1018.03,2505.72],"6-70-41":[47.81,2222.4],"6-70-42":[7.61,1720.53],"6-70-43":[18.25,2268.67],"6-70-44":[2.17,2017.39],"6-70-45":[26.72,58.31],"6-70-46":[27.58,59.46],"6-70-47":[29.09,64.51],"6-70-48":[29.91,64.57],"6-70-49":[29.84,67.11],"6-70-50":[31.81,70.73],"6-70-51":[27.49,66.41],"6-70-52":[24.04,57.39],"6-70-53":[24.04,50.76],"6-70-54":[19.07,48.88],"6-70-55":[15.38,38.05],"6-70-56":[14,268.92],"6-70-57":[15.56,3052.08],"6-70-58":[2944.42,3536.78],"6-70-59":[3147.36,3480.29],"6-70-60":[2608.29,3239.33],"6-70-61":[2539.62,2709.23],"6-70-62":[2602.1,2724.91],"6-70-63":[-29.54,2768.65],"6-71-0":[13.6,36.76],"6-71-1":[19.1,48.94],"5-35-0":[13.6,49.87],"6-71-2":[24.15,54.01],"6-71-3":[27.72,709.89],"5-35-1":[24.15,1635.74],"4-17-0":[13.6,1635.74],"6-71-4":[28.01,684.19],"6-71-5":[27.24,62.75],"5-35-2":[27.24,1193.37],"6-71-6":[19.67,948.29],"6-71-7":[4.84,1854.14],"5-35-3":[4.84,2122.75],"4-17-1":[4.84,2122.75],"3-8-0":[4.84,2122.75],"6-71-8":[19.05,851.76],"6-71-9":[17.77,511.56],"5-35-4":[17.77,2096.53],"6-71-10":[17.31,158.69],"6-71-11":[17.94,214.15],"5-35-5":[-25.11,350.95],"4-17-2":[-25.11,2096.53],"6-71-12":[11.89,342.67],"6-71-13":[80.4,644.43],"5-35-6":[11.89,644.43],"6-71-14":[118.41,2648.45],"6-71-15":[68.74,1842.42],"5-35-7":[68.74,2648.45],"4-17-3":[-23.11,3777.17],"3-8-1":[-180.54,4840.9],"6-71-16":[65.18,2700.03],"6-71-17":[23.06,2930.53],"5-35-8":[23.06,2930.53],"6-71-18":[13.5,2524.92],"6-71-19":[8.99,1090.39],"5-35-9":[8.99,2524.92],"4-17-4":[-23.32,3340.97],"6-71-20":[18.37,903.81],"6-71-21":[-31.98,311.99],"5-35-10":[-31.98,903.81],"6-71-22":[94.19,388.14],"6-71-23":[273.49,1038.12],"5-35-11":[94.19,1540.59],"4-17-5":[-31.98,1540.59],"3-8-2":[-31.98,4069.35],"6-71-24":[452.55,932.86],"6-71-25":[308.29,1368.77],"5-35-12":[27.16,3468.04],"6-71-26":[326.68,1327.69],"6-71-27":[373.83,1212.84],"5-35-13":[121.91,1624.07],"4-17-6":[27.16,3468.04],"6-71-28":[371.4,934.47],"6-71-29":[382.62,935.02],"5-35-14":[322.1,1063.08],"6-71-30":[291.34,761.73],"6-71-31":[282.28,549.06],"5-35-15":[254.18,833.8],"4-17-7":[128.64,2461.39],"3-8-3":[-28.03,4049.43],"6-71-32":[271.34,592.5],"6-71-33":[253.5,758.09],"5-35-16":[192.31,886.28],"6-71-34":[404.13,1099.25],"6-71-35":[753.17,1385.35],"5-35-17":[403.12,1757.04],"4-17-8":[-25.08,2127.16],"6-71-36":[1050.78,1507.74],"6-71-37":[1011.55,1380.25],"5-35-18":[1011.55,1831.76],"6-71-38":[960.55,1371.66],"6-71-39":[940.67,1497.56],"5-35-19":[940.67,2171.43],"4-17-9":[-59.49,2639.31],"3-8-4":[-63.62,2639.31],"6-71-40":[991.87,1399.38],"6-71-41":[722.23,1582.99],"5-35-20":[47.81,2505.72],"6-71-42":[427.66,1667.49],"6-71-43":[142.44,2341.81],"5-35-21":[7.61,2341.81],"4-17-10":[-162.31,2505.72],"6-71-44":[-5.94,1732.68],"6-71-45":[27.22,59.84],"5-35-22":[-5.94,2017.39],"6-71-46":[29.17,63.24],"6-71-47":[30.14,66.91],"5-35-23":[27.58,66.91],"4-17-11":[-5.94,2017.39],"3-8-5":[-162.31,2505.72],"6-71-48":[31.75,66.91],"6-71-49":[32.11,69.56],"5-35-24":[29.84,69.56],"6-71-50":[33.7,73.57],"6-71-51":[28.8,72.3],"5-35-25":[27.49,73.57],"4-17-12":[23.62,73.57],"6-71-52":[25.57,60.85],"6-71-53":[24.42,53.17],"5-35-26":[24.04,60.85],"6-71-54":[19.18,48.85],"6-71-55":[15.38,38.12],"5-35-27":[15.38,48.88],"4-17-13":[15.04,60.85],"3-8-6":[11.02,778.86],"6-71-56":[14.98,187.97],"6-71-57":[15.79,2944.43],"5-35-28":[14,3052.08],"6-71-58":[2840.08,3600.93],"6-71-59":[3239.32,3598.47],"5-35-29":[2840.08,3600.93],"4-17-14":[11.4,3600.93],"6-71-60":[2709.22,3295.33],"6-71-61":[2568.24,2810.96],"5-35-30":[2539.62,3295.33],"6-71-62":[2621.33,2751.92],"6-71-63":[-29.54,2771.32],"5-35-31":[-29.54,2771.32],"4-17-15":[-29.54,3295.33],"3-8-7":[-29.54,3600.93],"6-72-0":[13.6,36.49],"6-72-1":[19.01,48.14],"6-72-2":[23.6,52.85],"6-72-3":[25.14,753.17],"6-72-4":[25.05,528.08],"6-72-5":[22.7,56.98],"6-72-6":[22.55,1086.58],"6-72-7":[21.13,1167.12],"6-72-8":[17.66,435.24],"6-72-9":[17.52,286.65],"6-72-10":[15.17,241.92],"6-72-11":[12.2,275.13],"6-72-12":[29.06,318.56],"6-72-13":[28.38,382.74],"6-72-14":[135.43,1998.12],"6-72-15":[147.15,2540.92],"6-72-16":[49.82,2847.57],"6-72-17":[30.85,2950.99],"6-72-18":[21.06,2427.62],"6-72-19":[7.76,2464.23],"6-72-20":[7.73,425.6],"6-72-21":[-11.66,284.94],"6-72-22":[88.27,639.17],"6-72-23":[289.98,1107.43],"6-72-24":[470.56,1912.86],"6-72-25":[498.02,1340.77],"6-72-26":[593.56,1710.7],"6-72-27":[454.32,3017.52],"6-72-28":[444.14,1371.36],"6-72-29":[477.29,1047.83],"6-72-30":[352.38,768.89],"6-72-31":[319.72,630.52],"6-72-32":[322.07,733.63],"6-72-33":[332.54,807.65],"6-72-34":[430.54,1119.46],"6-72-35":[723.96,1534.31],"6-72-36":[1022.28,1643.41],"6-72-37":[961.73,1249.5],"6-72-38":[916.89,1116.92],"6-72-39":[892.54,1255.26],"6-72-40":[958.51,1498.79],"6-72-41":[975.82,1901.6],"6-72-42":[928.72,1783.15],"6-72-43":[77.74,2501.84],"6-72-44":[12.69,1649.02],"6-72-45":[28,66.27],"6-72-46":[29.82,70.25],"6-72-47":[32.16,68.24],"6-72-48":[32.45,66.93],"6-72-49":[32.5,71.41],"6-72-50":[34.78,76.35],"6-72-51":[30.32,73.61],"6-72-52":[26.6,61.36],"6-72-53":[24.54,54.43],"6-72-54":[19.54,49.25],"6-72-55":[15.45,38.72],"6-72-56":[15.31,41.8],"6-72-57":[21.91,3236.81],"6-72-58":[2872.27,3666.27],"6-72-59":[3295.32,3666.27],"6-72-60":[2810.95,3378.93],"6-72-61":[2625.94,2968.07],"6-72-62":[2649.64,2779.15],"6-72-63":[-29.54,2774.31],"6-73-0":[13.6,36.21],"6-73-1":[18.97,47.61],"5-36-0":[13.6,48.14],"6-73-2":[22.99,49.57],"6-73-3":[23.45,674.04],"5-36-1":[22.99,753.17],"6-73-4":[23.04,204.98],"6-73-5":[22,51.05],"5-36-2":[22,528.08],"6-73-6":[18.61,696.6],"6-73-7":[22.39,1083.56],"5-36-3":[18.61,1167.12],"6-73-8":[17.69,559.12],"6-73-9":[46.96,398.6],"5-36-4":[17.52,559.12],"6-73-10":[10.3,258.06],"6-73-11":[18.42,338.7],"5-36-5":[10.3,338.7],"6-73-12":[21.07,371.65],"6-73-13":[119.02,309.64],"5-36-6":[21.07,382.74],"6-73-14":[82.56,1369.76],"6-73-15":[13.61,2520.59],"5-36-7":[13.61,2540.92],"6-73-16":[28.54,1559.76],"6-73-17":[28.77,1798.35],"5-36-8":[28.54,2950.99],"6-73-18":[23.18,2185.74],"6-73-19":[-52.99,2137.5],"5-36-9":[-52.99,2464.23],"6-73-20":[1.3,266.06],"6-73-21":[-117.56,282.94],"5-36-10":[-117.56,425.6],"6-73-22":[27.75,574.35],"6-73-23":[275.3,1131.98],"5-36-11":[27.75,1131.98],"6-73-24":[280.09,1082.02],"6-73-25":[366.24,841.26],"5-36-12":[280.09,1912.86],"6-73-26":[428.45,2020.89],"6-73-27":[423.73,1156.65],"5-36-13":[423.73,3017.52],"6-73-28":[386.96,960.04],"6-73-29":[394.88,977.62],"5-36-14":[386.96,1371.36],"6-73-30":[497.33,946.04],"6-73-31":[366.87,1103.17],"5-36-15":[319.72,1103.17],"6-73-32":[379.78,1540.39],"6-73-33":[413.29,1685.26],"5-36-16":[322.07,1685.26],"6-73-34":[504.55,1701.66],"6-73-35":[515.18,1902.71],"5-36-17":[430.54,1902.71],"6-73-36":[935.23,1683.01],"6-73-37":[473.44,1546.43],"5-36-18":[473.44,1683.01],"6-73-38":[414.32,1440.16],"6-73-39":[758.78,1496.99],"5-36-19":[414.32,1496.99],"6-73-40":[770.57,2110.34],"6-73-41":[993.88,1898.28],"5-36-20":[770.57,2110.34],"6-73-42":[1210.08,3126.88],"6-73-43":[4.71,2790.11],"5-36-21":[4.71,3126.88],"6-73-44":[11.68,321.06],"6-73-45":[28.82,68.52],"5-36-22":[11.68,1649.02],"6-73-46":[33.04,71.86],"6-73-47":[33.1,68.84],"5-36-23":[29.82,71.86],"6-73-48":[32.88,69.45],"6-73-49":[33.33,74.64],"5-36-24":[32.45,74.64],"6-73-50":[35.38,76.55],"6-73-51":[30.59,74.13],"5-36-25":[30.32,76.55],"6-73-52":[27.68,63.59],"6-73-53":[24.54,58.28],"5-36-26":[24.54,63.59],"6-73-54":[20.07,51.54],"6-73-55":[15.99,40.58],"5-36-27":[15.45,51.54],"6-73-56":[15.99,41.88],"6-73-57":[19.59,3236.81],"5-36-28":[15.31,3236.81],"6-73-58":[2976.86,3671.29],"6-73-59":[3378.92,3685.99],"5-36-29":[2872.27,3685.99],"6-73-60":[2968.06,3441.2],"6-73-61":[2691.68,3024.01],"5-36-30":[2625.94,3441.2],"6-73-62":[2691.68,2818.12],"6-73-63":[-29.54,2780.49],"5-36-31":[-29.54,2818.12],"6-74-0":[13.6,36.07],"6-74-1":[18.96,46.86],"6-74-2":[22.03,47],"6-74-3":[20.96,289.51],"6-74-4":[19.84,46.66],"6-74-5":[17.55,45.75],"6-74-6":[11.97,739.68],"6-74-7":[14.65,736.85],"6-74-8":[-6.7,3219.23],"6-74-9":[-7.7,401.9],"6-74-10":[-74.06,523.35],"6-74-11":[30.86,314.28],"6-74-12":[121.32,307.64],"6-74-13":[94.68,347.09],"6-74-14":[53.31,387.19],"6-74-15":[16.89,488.72],"6-74-16":[26.92,429.54],"6-74-17":[0.6,2570.69],"6-74-18":[-38.2,3075.92],"6-74-19":[2.74,3021.97],"6-74-20":[2.74,110.17],"6-74-21":[-52.61,355.67],"6-74-22":[11.08,602.67],"6-74-23":[11.91,551.02],"6-74-24":[164.06,713.34],"6-74-25":[187.45,639.47],"6-74-26":[300.4,1130.48],"6-74-27":[439.11,1410.14],"6-74-28":[346.35,1323.82],"6-74-29":[356.78,738.69],"6-74-30":[452.9,1580.59],"6-74-31":[534,5024.49],"6-74-32":[645.87,4495.21],"6-74-33":[625.99,3461],"6-74-34":[590.29,2489.57],"6-74-35":[742.27,1708.52],"6-74-36":[432.19,1881.89],"6-74-37":[298.55,1739.34],"6-74-38":[466.8,1752.71],"6-74-39":[255.5,1623.82],"6-74-40":[350.82,2352.72],"6-74-41":[677.23,2369.87],"6-74-42":[12.4,3510.35],"6-74-43":[4.61,2075.35],"6-74-44":[25.51,57.03],"6-74-45":[28.71,66.1],"6-74-46":[31.87,69.33],"6-74-47":[32.66,69.51],"6-74-48":[33.21,80.25],"6-74-49":[35.21,80.16],"6-74-50":[35.5,79.81],"6-74-51":[31.79,73.11],"6-74-52":[29.44,68],"6-74-53":[26.69,59.41],"6-74-54":[20.92,53.21],"6-74-55":[18.14,42.59],"6-74-56":[17.26,359.2],"6-74-57":[18.72,2976.87],"6-74-58":[2510.84,3667.35],"6-74-59":[3441.19,3732.45],"6-74-60":[3024,3510.17],"6-74-61":[2783.25,3119.66],"6-74-62":[2780.48,2893.13],"6-74-63":[-29.54,2805.44],"6-75-0":[13.6,35.99],"6-75-1":[18.94,45.05],"5-37-0":[13.6,46.86],"6-75-2":[21.42,45.15],"6-75-3":[20.74,291.18],"5-37-1":[20.74,291.18],"4-18-0":[13.6,753.17],"6-75-4":[17.8,41.45],"6-75-5":[17.26,39.32],"5-37-2":[17.26,46.66],"6-75-6":[15.55,177.14],"6-75-7":[15.55,1181.22],"5-37-3":[11.97,1181.22],"4-18-1":[11.97,1181.22],"6-75-8":[16.77,712.47],"6-75-9":[-32.14,4110.39],"5-37-4":[-32.14,4110.39],"6-75-10":[-19.3,318.43],"6-75-11":[30.72,357.76],"5-37-5":[-74.06,523.35],"4-18-2":[-74.06,4110.39],"6-75-12":[140.07,313.84],"6-75-13":[123.47,252.12],"5-37-6":[94.68,347.09],"6-75-14":[-181.36,293.98],"6-75-15":[-133.08,195.69],"5-37-7":[-181.36,488.72],"4-18-3":[-181.36,2540.92],"6-75-16":[12.44,673.31],"6-75-17":[25.7,2438.12],"5-37-8":[0.6,2570.69],"6-75-18":[22.51,3012.55],"6-75-19":[6.7,2342.54],"5-37-9":[-38.2,3075.92],"4-18-4":[-52.99,3075.92],"6-75-20":[8.83,223.67],"6-75-21":[-4.5,1970.91],"5-37-10":[-52.61,1970.91],"6-75-22":[11.16,2002.31],"6-75-23":[78.71,726.15],"5-37-11":[11.08,2002.31],"4-18-5":[-117.56,2002.31],"6-75-24":[172.21,1207.85],"6-75-25":[212.55,942.11],"5-37-12":[164.06,1207.85],"6-75-26":[305.98,740.02],"6-75-27":[352.02,1457.61],"5-37-13":[300.4,1457.61],"4-18-6":[164.06,3017.52],"6-75-28":[354.16,988.64],"6-75-29":[356.57,725.3],"5-37-14":[346.35,1323.82],"6-75-30":[389.82,3166.22],"6-75-31":[594.3,2060.9],"5-37-15":[389.82,5024.49],"4-18-7":[319.72,5024.49],"6-75-32":[1072.57,1787.81],"6-75-33":[1016.16,1756.25],"5-37-16":[625.99,4495.21],"6-75-34":[735.53,2443.31],"6-75-35":[493.17,2943.5],"5-37-17":[493.17,2943.5],"4-18-8":[322.07,4495.21],"6-75-36":[446.63,1864.36],"6-75-37":[93.22,1716.39],"5-37-18":[93.22,1881.89],"6-75-38":[74.67,2583.3],"6-75-39":[57.48,2427.44],"5-37-19":[57.48,2583.3],"4-18-9":[57.48,2583.3],"6-75-40":[-242.83,1442.62],"6-75-41":[-31.19,1914.13],"5-37-20":[-242.83,2369.87],"6-75-42":[2.04,1636.59],"6-75-43":[21.63,58.03],"5-37-21":[2.04,3510.35],"4-18-10":[-242.83,3510.35],"6-75-44":[25.62,61.17],"6-75-45":[29.14,66.22],"5-37-22":[25.51,66.22],"6-75-46":[31.94,69.34],"6-75-47":[33.03,82.96],"5-37-23":[31.87,82.96],"4-18-11":[11.68,1649.02],"6-75-48":[35.18,89.62],"6-75-49":[39.2,86.77],"5-37-24":[33.21,89.62],"6-75-50":[36.6,80.48],"6-75-51":[34.25,78.22],"5-37-25":[31.79,80.48],"4-18-12":[30.32,89.62],"6-75-52":[30.27,72.13],"6-75-53":[26.69,63.45],"5-37-26":[26.69,72.13],"6-75-54":[20.79,54.64],"6-75-55":[18.14,45.98],"5-37-27":[18.14,54.64],"4-18-13":[15.45,72.13],"6-75-56":[18.66,861.26],"6-75-57":[359.19,2787.68],"5-37-28":[17.26,2976.87],"6-75-58":[2576.62,3670.33],"6-75-59":[3510.16,3745.57],"5-37-29":[2510.84,3745.57],"4-18-14":[15.31,3745.57],"6-75-60":[3119.65,3590.97],"6-75-61":[2882.5,3236.16],"5-37-30":[2783.25,3590.97],"6-75-62":[2805.43,2971.57],"6-75-63":[-29.54,2839.82],"5-37-31":[-29.54,2971.57],"4-18-15":[-29.54,3590.97],"6-76-0":[13.6,35.96],"6-76-1":[18.88,43.71],"6-76-2":[20.05,43.82],"6-76-3":[17.55,47.61],"6-76-4":[15.48,38.46],"6-76-5":[14.03,35.52],"6-76-6":[13.19,32.09],"6-76-7":[13.64,1139.05],"6-76-8":[15.76,538.64],"6-76-9":[14.86,306.08],"6-76-10":[21.95,316.75],"6-76-11":[80.98,357.69],"6-76-12":[126.53,332.1],"6-76-13":[34.69,291.25],"6-76-14":[4.45,251.97],"6-76-15":[11.09,721.64],"6-76-16":[16.18,1541.99],"6-76-17":[17.64,2603.85],"6-76-18":[19.98,3897.68],"6-76-19":[14.59,3093.99],"6-76-20":[-398.55,2689.12],"6-76-21":[-349.48,2516.84],"6-76-22":[7.34,2262.38],"6-76-23":[-21.6,1972.68],"6-76-24":[-6.69,2173.07],"6-76-25":[324.79,1591.14],"6-76-26":[356.19,1104.11],"6-76-27":[401.98,2729.65],"6-76-28":[392.01,3267.45],"6-76-29":[375.1,3342.07],"6-76-30":[309.01,2770.25],"6-76-31":[236.85,4305.91],"6-76-32":[545.42,3396.04],"6-76-33":[671.25,3634.02],"6-76-34":[206.1,2462.72],"6-76-35":[230.19,2952.42],"6-76-36":[-18.37,1938.4],"6-76-37":[7.99,2969.88],"6-76-38":[-27.14,1841.51],"6-76-39":[-30.93,319.69],"6-76-40":[-13.74,244.16],"6-76-41":[8.65,35.45],"6-76-42":[14.14,44.71],"6-76-43":[19.2,58.81],"6-76-44":[24.23,61.33],"6-76-45":[27.4,65.6],"6-76-46":[32.33,76.23],"6-76-47":[35.63,92.82],"6-76-48":[41.49,92.94],"6-76-49":[40.23,88.72],"6-76-50":[39.23,85.78],"6-76-51":[36.06,83.62],"6-76-52":[32.25,75.93],"6-76-53":[27.56,65.48],"6-76-54":[22.21,58.44],"6-76-55":[22.21,48.62],"6-76-56":[20.39,1400],"6-76-57":[861.25,2930.46],"6-76-58":[2787.67,3670.26],"6-76-59":[3590.96,3781.61],"6-76-60":[2776.72,3628.25],"6-76-61":[2954.99,3346.55],"6-76-62":[2839.81,3092.47],"6-76-63":[-29.54,2876.01],"6-77-0":[13.6,35.87],"6-77-1":[18.74,42.43],"5-38-0":[13.6,43.71],"6-77-2":[19.64,42.43],"6-77-3":[17.24,120.99],"5-38-1":[17.24,120.99],"6-77-4":[12.81,34.8],"6-77-5":[12.61,29.58],"5-38-2":[12.61,38.46],"6-77-6":[10.81,27.52],"6-77-7":[10.81,395.4],"5-38-3":[10.81,1139.05],"6-77-8":[13.48,352.95],"6-77-9":[13.48,366.87],"5-38-4":[13.48,538.64],"6-77-10":[35.39,327.96],"6-77-11":[93.37,306.61],"5-38-5":[21.95,357.69],"6-77-12":[105.39,311.33],"6-77-13":[-117.36,300.03],"5-38-6":[-117.36,332.1],"6-77-14":[44.47,375.52],"6-77-15":[2.57,323.22],"5-38-7":[2.57,721.64],"6-77-16":[12.38,1062.09],"6-77-17":[17.22,3382.16],"5-38-8":[12.38,3382.16],"6-77-18":[227.32,3297.16],"6-77-19":[120.11,2377.57],"5-38-9":[14.59,3897.68],"6-77-20":[501.73,1781.74],"6-77-21":[534.04,1378.43],"5-38-10":[-398.55,2689.12],"6-77-22":[6.85,2032.54],"6-77-23":[-26.43,2355.84],"5-38-11":[-26.43,2355.84],"6-77-24":[-82.73,2168.09],"6-77-25":[-31.31,2735.56],"5-38-12":[-82.73,2735.56],"6-77-26":[-27.84,3016.69],"6-77-27":[581.81,4526.44],"5-38-13":[-27.84,4526.44],"6-77-28":[713.31,4259.18],"6-77-29":[510.69,4177.49],"5-38-14":[375.1,4259.18],"6-77-30":[298.72,2764.05],"6-77-31":[167.98,3442.17],"5-38-15":[167.98,4305.91],"6-77-32":[136.09,5158.31],"6-77-33":[-45.68,5869.55],"5-38-16":[-45.68,5869.55],"6-77-34":[-49.58,2618.18],"6-77-35":[-48.06,1490.1],"5-38-17":[-49.58,2952.42],"6-77-36":[-18.95,1408.41],"6-77-37":[-43.82,2305.1],"5-38-18":[-43.82,2969.88],"6-77-38":[-55.16,506.56],"6-77-39":[-23.77,1.33],"5-38-19":[-55.16,1841.51],"6-77-40":[-2.89,15.32],"6-77-41":[4.2,25.41],"5-38-20":[-13.74,244.16],"6-77-42":[9.2,34.13],"6-77-43":[15.55,46.33],"5-38-21":[9.2,58.81],"6-77-44":[24.23,56.57],"6-77-45":[27.4,71.28],"5-38-22":[24.23,71.28],"6-77-46":[32.88,83.08],"6-77-47":[39.51,93.26],"5-38-23":[32.33,93.26],"6-77-48":[38.04,1277.56],"6-77-49":[42.15,90.89],"5-38-24":[38.04,1277.56],"6-77-50":[42.47,93.63],"6-77-51":[38.18,92.27],"5-38-25":[36.06,93.63],"6-77-52":[33.28,80.44],"6-77-53":[29.46,68.79],"5-38-26":[27.56,80.44],"6-77-54":[25.28,62.82],"6-77-55":[22.68,52.06],"5-38-27":[22.21,62.82],"6-77-56":[18.95,1400],"6-77-57":[751.85,3035.01],"5-38-28":[18.95,3035.01],"6-77-58":[2930.45,3670.15],"6-77-59":[3628.25,3814.29],"5-38-29":[2787.67,3814.29],"6-77-60":[3346.54,3652.21],"6-77-61":[3073.2,3460.18],"5-38-30":[2776.72,3652.21],"6-77-62":[2876,3182.27],"6-77-63":[-29.54,2907.97],"5-38-31":[-29.54,3182.27],"6-78-0":[13.6,35.71],"6-78-1":[18.5,41.37],"6-78-2":[18.62,41.37],"6-78-3":[14.08,41.71],"6-78-4":[10.33,32.25],"6-78-5":[8.69,25.05],"6-78-6":[8.19,22.55],"6-78-7":[9.2,327.91],"6-78-8":[11.6,314.82],"6-78-9":[12.9,268.49],"6-78-10":[44.72,286.2],"6-78-11":[79.76,279.53],"6-78-12":[76.55,258.22],"6-78-13":[77.59,248.68],"6-78-14":[14.28,340.26],"6-78-15":[2.68,680.41],"6-78-16":[13.14,3881.85],"6-78-17":[13.73,3918.41],"6-78-18":[321,3209.2],"6-78-19":[147.38,1446.37],"6-78-20":[267.19,949.71],"6-78-21":[374.43,1047.17],"6-78-22":[737.12,1974.55],"6-78-23":[99.43,2149.19],"6-78-24":[-38.59,2651.93],"6-78-25":[-18.11,2755.96],"6-78-26":[-202.91,3297.68],"6-78-27":[-172.94,3970.6],"6-78-28":[208.62,3839.48],"6-78-29":[250.57,4373.18],"6-78-30":[130.76,1692.99],"6-78-31":[-26.1,881.98],"6-78-32":[-77.85,278.94],"6-78-33":[-77.15,504.42],"6-78-34":[-74.93,56.49],"6-78-35":[-67.51,634.05],"6-78-36":[-58.21,1404.07],"6-78-37":[-82.52,980.89],"6-78-38":[-39.1,-9.7],"6-78-39":[-22.61,25.58],"6-78-40":[-3.87,7.79],"6-78-41":[3.4,20.43],"6-78-42":[8.86,32.47],"6-78-43":[15.8,49.23],"6-78-44":[24.72,59.67],"6-78-45":[29.26,78.45],"6-78-46":[35.64,87.67],"6-78-47":[42.4,92.7],"6-78-48":[42.73,92.7],"6-78-49":[43.34,91.97],"6-78-50":[45.44,100.71],"6-78-51":[40.21,95.44],"6-78-52":[34.91,81.61],"6-78-53":[31.4,70.9],"6-78-54":[26.8,64.39],"6-78-55":[25.07,54.85],"6-78-56":[20.74,1829.25],"6-78-57":[790.9,3049.46],"6-78-58":[3035,3654.4],"6-78-59":[3633.12,3814.29],"6-78-60":[3460.17,3676.48],"6-78-61":[3182.26,3515.55],"6-78-62":[2907.96,3278.24],"6-78-63":[-29.54,2956.72],"6-79-0":[13.6,35.35],"6-79-1":[18.17,40.15],"5-39-0":[13.6,41.37],"6-79-2":[18.31,40.92],"6-79-3":[14.08,38.78],"5-39-1":[14.08,41.71],"4-19-0":[13.6,120.99],"6-79-4":[8.85,27.87],"6-79-5":[7.69,19.46],"5-39-2":[7.69,32.25],"6-79-6":[6.77,17.55],"6-79-7":[7.34,252.89],"5-39-3":[6.77,327.91],"4-19-1":[6.77,1139.05],"3-9-0":[6.77,1181.22],"6-79-8":[10.65,224],"6-79-9":[12.58,273.71],"5-39-4":[10.65,314.82],"6-79-10":[36.18,309.09],"6-79-11":[67.88,297.07],"5-39-5":[36.18,309.09],"4-19-2":[10.65,538.64],"6-79-12":[65.82,294.44],"6-79-13":[86.91,291.7],"5-39-6":[65.82,294.44],"6-79-14":[-19.35,260.4],"6-79-15":[-9.6,476.12],"5-39-7":[-19.35,680.41],"4-19-3":[-117.36,721.64],"3-9-1":[-181.36,4110.39],"2-4-0":[-181.36,4840.9],"6-79-16":[37.86,5616.16],"6-79-17":[25.49,5133.37],"5-39-8":[13.14,5616.16],"6-79-18":[263.18,4058.15],"6-79-19":[31.48,3448.78],"5-39-9":[31.48,4058.15],"4-19-4":[12.38,5616.16],"6-79-20":[2.31,377.37],"6-79-21":[110.72,790.42],"5-39-10":[2.31,1047.17],"6-79-22":[400.54,1407.05],"6-79-23":[692.97,1499.62],"5-39-11":[99.43,2149.19],"4-19-5":[-398.55,2689.12],"3-9-2":[-398.55,5616.16],"6-79-24":[612.19,1721.97],"6-79-25":[-26.78,2990.34],"5-39-12":[-38.59,2990.34],"6-79-26":[-70.23,3647.39],"6-79-27":[-179.38,3223.81],"5-39-13":[-202.91,3970.6],"4-19-6":[-202.91,4526.44],"6-79-28":[-41.82,3002.22],"6-79-29":[152.09,1451.56],"5-39-14":[-41.82,4373.18],"6-79-30":[61.26,913.05],"6-79-31":[-86.74,587.03],"5-39-15":[-86.74,1692.99],"4-19-7":[-86.74,4373.18],"3-9-3":[-202.91,5024.49],"2-4-1":[-398.55,5616.16],"6-79-32":[-87.58,65.61],"6-79-33":[-86.64,-37.76],"5-39-16":[-87.58,504.42],"6-79-34":[-81.84,-34.75],"6-79-35":[-71.3,-26.58],"5-39-17":[-81.84,634.05],"4-19-8":[-87.58,5869.55],"6-79-36":[-59.05,2336.88],"6-79-37":[-52.97,605.98],"5-39-18":[-82.52,2336.88],"6-79-38":[-43.74,926.36],"6-79-39":[-68.11,1064.17],"5-39-19":[-68.11,1064.17],"4-19-9":[-82.52,2969.88],"3-9-4":[-87.58,5869.55],"6-79-40":[-18.99,1347.93],"6-79-41":[-12.01,199.04],"5-39-20":[-18.99,1347.93],"6-79-42":[8.42,42.61],"6-79-43":[17.67,65.21],"5-39-21":[8.42,65.21],"4-19-10":[-18.99,1347.93],"6-79-44":[24.72,70.25],"6-79-45":[31.3,83.27],"5-39-22":[24.72,83.27],"6-79-46":[39.48,87.78],"6-79-47":[43.03,91.28],"5-39-23":[35.64,92.7],"4-19-11":[24.23,93.26],"3-9-5":[-242.83,3510.35],"2-4-2":[-242.83,5869.55],"6-79-48":[42.49,94.03],"6-79-49":[43.22,91.87],"5-39-24":[42.49,94.03],"6-79-50":[45.58,101.84],"6-79-51":[40.61,94.5],"5-39-25":[40.21,101.84],"4-19-12":[36.06,1277.56],"6-79-52":[35.82,81.74],"6-79-53":[31.85,70.92],"5-39-26":[31.4,81.74],"6-79-54":[28.07,64.4],"6-79-55":[25.07,56.23],"5-39-27":[25.07,64.4],"4-19-13":[22.21,81.74],"3-9-6":[15.45,1277.56],"6-79-56":[24.51,2238.4],"6-79-57":[1829.24,3044.79],"5-39-28":[20.74,3049.46],"6-79-58":[3023.55,3633.13],"6-79-59":[3590.92,3703.54],"5-39-29":[3023.55,3814.29],"4-19-14":[18.95,3814.29],"6-79-60":[3515.54,3739.77],"6-79-61":[3278.23,3596.54],"5-39-30":[3182.26,3739.77],"6-79-62":[2956.71,3326.45],"6-79-63":[-29.54,2985.88],"5-39-31":[-29.54,3326.45],"4-19-15":[-29.54,3739.77],"3-9-7":[-29.54,3814.29],"2-4-3":[-29.54,3814.29],"6-80-0":[13.6,34.92],"6-80-1":[17.78,39.27],"6-80-2":[16.68,40.65],"6-80-3":[11.49,517.11],"6-80-4":[7.13,26.45],"6-80-5":[4.68,16.89],"6-80-6":[4.58,15.08],"6-80-7":[4.73,237.51],"6-80-8":[7.54,245.48],"6-80-9":[34.12,285.08],"6-80-10":[9.18,302.02],"6-80-11":[61.24,248.97],"6-80-12":[48.7,347.27],"6-80-13":[6.35,372.83],"6-80-14":[-41.25,355.61],"6-80-15":[-76.27,115.89],"6-80-16":[-56.46,4485.88],"6-80-17":[-15.96,4116.85],"6-80-18":[161.31,4577.24],"6-80-19":[32.18,3588.07],"6-80-20":[-43.59,2783.91],"6-80-21":[-86.23,444.94],"6-80-22":[151.78,925.69],"6-80-23":[340.2,1343.13],"6-80-24":[285.31,1028.07],"6-80-25":[400.89,1455.51],"6-80-26":[79.57,2444.71],"6-80-27":[-65.02,2493.24],"6-80-28":[-50.69,2422.23],"6-80-29":[62.25,1006.97],"6-80-30":[-93.25,501.55],"6-80-31":[-99.6,235.87],"6-80-32":[-97.89,-42.83],"6-80-33":[-90.45,-40.91],"6-80-34":[-87.49,-33.55],"6-80-35":[-79.14,8.71],"6-80-36":[-62.55,621.18],"6-80-37":[-52.79,1207.88],"6-80-38":[-3.35,2631.65],"6-80-39":[-45.58,2635.66],"6-80-40":[-13.4,1977.92],"6-80-41":[3.13,244.27],"6-80-42":[12.3,42.61],"6-80-43":[19.05,65.05],"6-80-44":[27.43,70.26],"6-80-45":[35.59,85.76],"6-80-46":[41.63,87.78],"6-80-47":[42.87,92.37],"6-80-48":[44.13,94.46],"6-80-49":[43.94,91.87],"6-80-50":[45.05,99.84],"6-80-51":[40.48,92.21],"6-80-52":[35.29,81.74],"6-80-53":[31.46,70.92],"6-80-54":[28.44,63.71],"6-80-55":[27.25,572.15],"6-80-56":[26.34,2427.48],"6-80-57":[2238.39,3127.78],"6-80-58":[3023.7,3590.93],"6-80-59":[3513.32,3615.32],"6-80-60":[3595.11,3741.77],"6-80-61":[3326.44,3655.25],"6-80-62":[2985.87,3360.65],"6-80-63":[-29.54,3013.02],"6-81-0":[13.6,34.28],"6-81-1":[17.42,38.06],"5-40-0":[13.6,39.27],"6-81-2":[16.06,37.38],"6-81-3":[11.14,453.1],"5-40-1":[11.14,517.11],"6-81-4":[5.36,22.49],"6-81-5":[2.51,12.86],"5-40-2":[2.51,26.45],"6-81-6":[2.24,9.59],"6-81-7":[2.54,195.71],"5-40-3":[2.24,237.51],"6-81-8":[7.96,467.27],"6-81-9":[65.32,477.07],"5-40-4":[7.54,477.07],"6-81-10":[7.84,275.89],"6-81-11":[59.53,298.46],"5-40-5":[7.84,302.02],"6-81-12":[19.86,367.95],"6-81-13":[0.32,377.5],"5-40-6":[0.32,377.5],"6-81-14":[-51.54,65.52],"6-81-15":[-57.25,5.04],"5-40-7":[-76.27,355.61],"6-81-16":[-43.48,748.23],"6-81-17":[-65.9,4455.71],"5-40-8":[-65.9,4485.88],"6-81-18":[-73,4802.09],"6-81-19":[473.29,3898.23],"5-40-9":[-73,4802.09],"6-81-20":[-93.21,4173.89],"6-81-21":[-121.55,2032.48],"5-40-10":[-121.55,4173.89],"6-81-22":[-85.21,483.61],"6-81-23":[-57.81,539.09],"5-40-11":[-85.21,1343.13],"6-81-24":[77.98,467.81],"6-81-25":[176.55,1015.61],"5-40-12":[77.98,1455.51],"6-81-26":[-51.14,2138.39],"6-81-27":[-58.49,2078.28],"5-40-13":[-65.02,2493.24],"6-81-28":[-83.94,1996.26],"6-81-29":[-102.99,846.67],"5-40-14":[-102.99,2422.23],"6-81-30":[-103.29,410.82],"6-81-31":[-103.34,-46.62],"5-40-15":[-103.34,501.55],"6-81-32":[-99.7,-45.29],"6-81-33":[-91.37,-41.35],"5-40-16":[-99.7,-40.91],"6-81-34":[-87.05,-35.59],"6-81-35":[-80.36,-28.86],"5-40-17":[-87.49,8.71],"6-81-36":[-95.35,2866.35],"6-81-37":[-44.05,2817.4],"5-40-18":[-95.35,2866.35],"6-81-38":[-37.94,1755.56],"6-81-39":[-49.87,1687.3],"5-40-19":[-49.87,2635.66],"6-81-40":[-10.79,75],"6-81-41":[1.07,25.08],"5-40-20":[-13.4,1977.92],"6-81-42":[8.34,34.81],"6-81-43":[16.88,54.43],"5-40-21":[8.34,65.05],"6-81-44":[27.43,70.86],"6-81-45":[35.92,83.88],"5-40-22":[27.43,85.76],"6-81-46":[39.83,85.23],"6-81-47":[42.1,89.88],"5-40-23":[39.83,92.37],"6-81-48":[10.5,895.68],"6-81-49":[44.14,90.78],"5-40-24":[10.5,895.68],"6-81-50":[42.93,94.4],"6-81-51":[38.91,91.87],"5-40-25":[38.91,99.84],"6-81-52":[33.96,80.53],"6-81-53":[30.7,68.94],"5-40-26":[30.7,81.74],"6-81-54":[28.32,62.75],"6-81-55":[29.72,1099.75],"5-40-27":[27.25,1099.75],"6-81-56":[30.45,2482.8],"6-81-57":[2427.47,3161.72],"5-40-28":[26.34,3161.72],"6-81-58":[3127.77,3513.33],"6-81-59":[3362.15,3613.49],"5-40-29":[3023.7,3615.32],"6-81-60":[3596.57,3745.47],"6-81-61":[3360.64,3699.75],"5-40-30":[3326.44,3745.47],"6-81-62":[3013.01,3382.27],"6-81-63":[-29.54,3034.71],"5-40-31":[-29.54,3382.27],"6-82-0":[13.6,33.76],"6-82-1":[17,37.12],"6-82-2":[15.53,35.52],"6-82-3":[8.15,574.46],"6-82-4":[4.35,19.3],"6-82-5":[1.27,79.61],"6-82-6":[0.56,585.93],"6-82-7":[0.54,166.68],"6-82-8":[5.53,263.89],"6-82-9":[23.58,441.34],"6-82-10":[5.37,321.16],"6-82-11":[52.24,337.16],"6-82-12":[32.72,384.64],"6-82-13":[-1.79,320.68],"6-82-14":[-63.46,173.57],"6-82-15":[-85.87,-10.01],"6-82-16":[-173.82,522.27],"6-82-17":[-63.16,294.16],"6-82-18":[-61.41,3417.02],"6-82-19":[-32.51,5595.76],"6-82-20":[768.45,4411.42],"6-82-21":[-91.09,4366.48],"6-82-22":[-64.72,1761.32],"6-82-23":[-110.57,170.47],"6-82-24":[-44.95,274.33],"6-82-25":[68.28,1114.62],"6-82-26":[-145.36,1466.69],"6-82-27":[-88.55,1380.57],"6-82-28":[-104.68,723.52],"6-82-29":[-111.56,-41.96],"6-82-30":[-110.83,-50.61],"6-82-31":[-104.52,-49.03],"6-82-32":[-100.44,-45.11],"6-82-33":[-93.4,-10.81],"6-82-34":[-83.72,5.08],"6-82-35":[-74.96,-0.2],"6-82-36":[-62.66,-19.8],"6-82-37":[-49.14,-15.48],"6-82-38":[-35.86,-11.67],"6-82-39":[-24.06,-4.21],"6-82-40":[-11.33,1.34],"6-82-41":[0.88,15.42],"6-82-42":[7.73,31.56],"6-82-43":[16.23,52.89],"6-82-44":[26.35,70.9],"6-82-45":[33.59,79.74],"6-82-46":[36.43,83.44],"6-82-47":[40.09,89.7],"6-82-48":[31.65,1115.13],"6-82-49":[43.67,90.18],"6-82-50":[42.26,91.9],"6-82-51":[37.84,90.05],"6-82-52":[33.96,77.84],"6-82-53":[30.52,67.42],"6-82-54":[28.32,61.42],"6-82-55":[29.72,1774.62],"6-82-56":[1099.74,2729.04],"6-82-57":[2482.79,3157.08],"6-82-58":[3040.04,3362.16],"6-82-59":[3161.66,3614.29],"6-82-60":[3541.01,3772.23],"6-82-61":[3382.26,3728.18],"6-82-62":[3034.7,3397.85],"6-82-63":[-29.54,3048.46],"6-83-0":[13.6,33.14],"6-83-1":[16.83,36.08],"5-41-0":[13.6,37.12],"6-83-2":[15.31,35.22],"6-83-3":[8.15,497.91],"5-41-1":[8.15,574.46],"4-20-0":[8.15,574.46],"6-83-4":[2.83,16.01],"6-83-5":[1.2,1212.81],"5-41-2":[1.2,1212.81],"6-83-6":[-2.49,1230.82],"6-83-7":[-3.49,212.13],"5-41-3":[-3.49,1230.82],"4-20-1":[-3.49,1230.82],"6-83-8":[21.02,244.39],"6-83-9":[32.38,331.03],"5-41-4":[5.53,441.34],"6-83-10":[0.65,350.47],"6-83-11":[53.02,469.81],"5-41-5":[0.65,469.81],"4-20-2":[0.65,477.07],"6-83-12":[50.86,476.59],"6-83-13":[40.69,627.4],"5-41-6":[-1.79,627.4],"6-83-14":[-46.59,323.7],"6-83-15":[-87.65,232.09],"5-41-7":[-87.65,323.7],"4-20-3":[-87.65,627.4],"6-83-16":[-161.11,321.64],"6-83-17":[-92.99,1858.17],"5-41-8":[-173.82,1858.17],"6-83-18":[-78.58,3878.24],"6-83-19":[299.23,3814.01],"5-41-9":[-78.58,5595.76],"4-20-4":[-173.82,5595.76],"6-83-20":[674.01,4034.31],"6-83-21":[627.23,3448.75],"5-41-10":[-91.09,4411.42],"6-83-22":[-84.08,2931.28],"6-83-23":[-93.5,1395.64],"5-41-11":[-110.57,2931.28],"4-20-5":[-121.55,4411.42],"6-83-24":[-29.8,300.19],"6-83-25":[-71.95,1727.17],"5-41-12":[-71.95,1727.17],"6-83-26":[-76.15,1060.42],"6-83-27":[-94.46,1466.16],"5-41-13":[-145.36,1466.69],"4-20-6":[-145.36,2493.24],"6-83-28":[-107.49,-44.27],"6-83-29":[-112.89,-51.27],"5-41-14":[-112.89,723.52],"6-83-30":[-112.22,-52.38],"6-83-31":[-111.92,-50.21],"5-41-15":[-112.22,-49.03],"4-20-7":[-112.89,2422.23],"6-83-32":[-107.44,-46.38],"6-83-33":[-100.55,862.8],"5-41-16":[-107.44,862.8],"6-83-34":[-86.9,-10.47],"6-83-35":[-74.63,-31.32],"5-41-17":[-86.9,5.08],"4-20-8":[-107.44,862.8],"6-83-36":[-65.81,-24.56],"6-83-37":[-50.21,-9.89],"5-41-18":[-65.81,-9.89],"6-83-38":[-36.27,-11.19],"6-83-39":[-27.02,3059.56],"5-41-19":[-36.27,3059.56],"4-20-9":[-95.35,3059.56],"6-83-40":[-8.14,2.28],"6-83-41":[0.88,16.25],"5-41-20":[-11.33,16.25],"6-83-42":[7.73,33.52],"6-83-43":[16.98,55.76],"5-41-21":[7.73,55.76],"4-20-10":[-13.4,1977.92],"6-83-44":[26.42,65.98],"6-83-45":[28.62,71.78],"5-41-22":[26.35,79.74],"6-83-46":[31.75,77.92],"6-83-47":[36.38,85.71],"5-41-23":[31.75,89.7],"4-20-11":[26.35,92.37],"6-83-48":[41.07,88.96],"6-83-49":[41.42,88.26],"5-41-24":[31.65,1115.13],"6-83-50":[40.86,86.86],"6-83-51":[37.02,83.45],"5-41-25":[37.02,91.9],"4-20-12":[10.5,1115.13],"6-83-52":[33.5,75.38],"6-83-53":[30.59,67.43],"5-41-26":[30.52,77.84],"6-83-54":[28.68,62.32],"6-83-55":[29.58,2242.91],"5-41-27":[28.32,2242.91],"4-20-13":[27.25,2242.91],"6-83-56":[568.49,2841.08],"6-83-57":[2729.03,3100.22],"5-41-28":[568.49,3157.08],"6-83-58":[2651.98,3161.67],"6-83-59":[2944.39,3541.02],"5-41-29":[2651.98,3614.29],"4-20-14":[26.34,3615.32],"6-83-60":[3405.03,3807.22],"6-83-61":[3397.84,3762.75],"5-41-30":[3382.26,3807.22],"6-83-62":[3048.45,3423.55],"6-83-63":[-29.54,3056.25],"5-41-31":[-29.54,3423.55],"4-20-15":[-29.54,3807.22],"6-84-0":[13.6,32.73],"6-84-1":[15.68,35.52],"6-84-2":[14.45,462.92],"6-84-3":[6.06,600.63],"6-84-4":[1.87,99.91],"6-84-5":[-4.13,1436.73],"6-84-6":[-6.38,243.89],"6-84-7":[-6.07,220.04],"6-84-8":[14.07,1250.98],"6-84-9":[44.8,1096.24],"6-84-10":[-0.2,1512.31],"6-84-11":[81.33,975.89],"6-84-12":[69.62,1624.4],"6-84-13":[-109.79,1020.66],"6-84-14":[69.5,630.85],"6-84-15":[-35.73,381.12],"6-84-16":[-25.96,265.27],"6-84-17":[-108.09,292.44],"6-84-18":[2.44,3050.69],"6-84-19":[657.64,3289.8],"6-84-20":[218.2,3513.08],"6-84-21":[84.19,4466.14],"6-84-22":[-257.75,3206.24],"6-84-23":[-71.96,2955.44],"6-84-24":[-79.76,1006.29],"6-84-25":[-89.61,187.1],"6-84-26":[-101.44,-35.61],"6-84-27":[-105.8,-39.16],"6-84-28":[-108.15,-47.23],"6-84-29":[-116.74,-51.27],"6-84-30":[-120.83,-54.73],"6-84-31":[-121.14,-53.64],"6-84-32":[-120.53,-50.27],"6-84-33":[-111.77,-41.47],"6-84-34":[-97.72,-15.91],"6-84-35":[-82.46,-11.7],"6-84-36":[-73.49,-25.08],"6-84-37":[-58.26,-16.99],"6-84-38":[-39.63,-4.4],"6-84-39":[-29.1,810.67],"6-84-40":[-9.76,2.28],"6-84-41":[0.83,15.41],"6-84-42":[7.34,34.61],"6-84-43":[17.48,52.91],"6-84-44":[21.66,56.56],"6-84-45":[24.5,63.5],"6-84-46":[28.48,71.79],"6-84-47":[33.69,82.14],"6-84-48":[37.05,84.5],"6-84-49":[39.19,84.88],"6-84-50":[37.64,82.95],"6-84-51":[36.03,81.01],"6-84-52":[33.47,74.05],"6-84-53":[30.96,66.44],"6-84-54":[28.91,62.37],"6-84-55":[28.43,1169.19],"6-84-56":[306.84,2834.46],"6-84-57":[2494.94,2971.6],"6-84-58":[2350.48,2944.4],"6-84-59":[2693.02,3405.04],"6-84-60":[3368.56,3828.34],"6-84-61":[3423.54,3798.94],"6-84-62":[3056.21,3451.5],"6-84-63":[-29.54,3061.98],"6-85-0":[13.6,32.27],"6-85-1":[15.62,35.54],"5-42-0":[13.6,35.54],"6-85-2":[13.83,255.88],"6-85-3":[6.06,601.05],"5-42-1":[6.06,601.05],"6-85-4":[1.27,851.35],"6-85-5":[-6.92,1078],"5-42-2":[-6.92,1436.73],"6-85-6":[-11.51,152.24],"6-85-7":[-9.86,400.74],"5-42-3":[-11.51,400.74],"6-85-8":[20.67,1773.8],"6-85-9":[-5.63,1487.95],"5-42-4":[-5.63,1773.8],"6-85-10":[-53.11,1559.37],"6-85-11":[-77.24,864.4],"5-42-5":[-77.24,1559.37],"6-85-12":[-233.11,1394.5],"6-85-13":[29.59,600.13],"5-42-6":[-233.11,1624.4],"6-85-14":[24.54,429.21],"6-85-15":[-30.91,315.69],"5-42-7":[-35.73,630.85],"6-85-16":[-30.47,243.14],"6-85-17":[32.63,430.08],"5-42-8":[-108.09,430.08],"6-85-18":[50.89,3092.4],"6-85-19":[225.19,3228.78],"5-42-9":[2.44,3289.8],"6-85-20":[429.56,2831.82],"6-85-21":[250.94,3905.23],"5-42-10":[84.19,4466.14],"6-85-22":[-102.11,3453.88],"6-85-23":[-86,2164.41],"5-42-11":[-257.75,3453.88],"6-85-24":[-99.8,1992.49],"6-85-25":[-110.95,-39.87],"5-42-12":[-110.95,1992.49],"6-85-26":[-117.41,-43.92],"6-85-27":[-127.52,-50.66],"5-42-13":[-127.52,-35.61],"6-85-28":[-132,-54.32],"6-85-29":[-131.84,-55.09],"5-42-14":[-132,-47.23],"6-85-30":[-135.58,-59.06],"6-85-31":[-136.23,-60.26],"5-42-15":[-136.23,-53.64],"6-85-32":[-135.19,-55.88],"6-85-33":[-126.29,-49.83],"5-42-16":[-135.19,-41.47],"6-85-34":[-114.17,-41.73],"6-85-35":[-93.31,-35.72],"5-42-17":[-114.17,-11.7],"6-85-36":[-76.7,-25.51],"6-85-37":[-60.92,12.57],"5-42-18":[-76.7,12.57],"6-85-38":[-42.13,-11.51],"6-85-39":[-26.51,-4.38],"5-42-19":[-42.13,810.67],"6-85-40":[-10.15,1.03],"6-85-41":[0.61,18.41],"5-42-20":[-10.15,18.41],"6-85-42":[7.34,33.4],"6-85-43":[14.16,42.27],"5-42-21":[7.34,52.91],"6-85-44":[20.8,47.97],"6-85-45":[23.87,56.43],"5-42-22":[20.8,63.5],"6-85-46":[27.26,65.1],"6-85-47":[30.36,73.18],"5-42-23":[27.26,82.14],"6-85-48":[33.17,77.75],"6-85-49":[36.61,78.57],"5-42-24":[33.17,84.88],"6-85-50":[36.35,77.83],"6-85-51":[34.92,75.64],"5-42-25":[34.92,82.95],"6-85-52":[32.62,71.77],"6-85-53":[30.3,66.45],"5-42-26":[30.3,74.05],"6-85-54":[27.35,61.96],"6-85-55":[26.88,470.02],"5-42-27":[26.88,1169.19],"6-85-56":[29.8,2724.67],"6-85-57":[1711.99,2726.3],"5-42-28":[29.8,2971.6],"6-85-58":[1711.99,2693.03],"6-85-59":[2435.24,3395.87],"5-42-29":[1711.99,3405.04],"6-85-60":[3366.59,3894.08],"6-85-61":[3451.49,3860.75],"5-42-30":[3366.59,3894.08],"6-85-62":[3061.9,3477.38],"6-85-63":[-29.54,3064.64],"5-42-31":[-29.54,3477.38],"6-86-0":[13.59,31.92],"6-86-1":[14.49,35.54],"6-86-2":[11.81,372.35],"6-86-3":[3.34,515.4],"6-86-4":[1.06,851.78],"6-86-5":[-8.29,891.68],"6-86-6":[-14.79,-3.6],"6-86-7":[-14.04,414.42],"6-86-8":[-7.9,1361.22],"6-86-9":[-6.91,250.25],"6-86-10":[-12.46,219.71],"6-86-11":[30.07,213.66],"6-86-12":[40.86,217.01],"6-86-13":[-251.81,281.46],"6-86-14":[1.35,248.91],"6-86-15":[3.27,244.16],"6-86-16":[-29.82,713.35],"6-86-17":[-65.15,925.05],"6-86-18":[118.27,769.1],"6-86-19":[259.05,3625.13],"6-86-20":[437.51,4120.59],"6-86-21":[417.86,2348.74],"6-86-22":[-70.2,2575.17],"6-86-23":[-95.29,426.39],"6-86-24":[-105.6,-40.84],"6-86-25":[-120.89,-49.19],"6-86-26":[-133.2,-54.84],"6-86-27":[-143.88,-59.25],"6-86-28":[-150.34,-63.76],"6-86-29":[-151.57,-65.77],"6-86-30":[-150.84,-65.78],"6-86-31":[-149.1,-67.58],"6-86-32":[-147.35,-64],"6-86-33":[-138.48,-57.09],"6-86-34":[-126.92,-47.83],"6-86-35":[-107,-36.76],"6-86-36":[-89.42,-30.07],"6-86-37":[-64.88,-21.06],"6-86-38":[-48.23,209.37],"6-86-39":[-26.28,376.48],"6-86-40":[-11.57,0.81],"6-86-41":[0.26,18.37],"6-86-42":[7.71,27.18],"6-86-43":[12.56,39.03],"6-86-44":[18.37,47.62],"6-86-45":[23.48,52.93],"6-86-46":[25.88,59.58],"6-86-47":[28.88,66.34],"6-86-48":[31.73,72.21],"6-86-49":[35.04,79.61],"6-86-50":[34.66,75.08],"6-86-51":[34.42,72.8],"6-86-52":[31.27,70.56],"6-86-53":[28.81,64.55],"6-86-54":[26.88,60.6],"6-86-55":[24.41,59.6],"6-86-56":[27.96,2407.49],"6-86-57":[1004.17,2407.49],"6-86-58":[953.72,2435.25],"6-86-59":[2297.21,3458.7],"6-86-60":[3395.86,3925.85],"6-86-61":[3477.37,3915.12],"6-86-62":[3064.43,3500.58],"6-86-63":[-29.54,3065.4],"6-87-0":[13.59,31.44],"6-87-1":[14.36,35.37],"5-43-0":[13.59,35.54],"6-87-2":[10.38,28.84],"6-87-3":[2.68,330.3],"5-43-1":[2.68,515.4],"4-21-0":[2.68,601.05],"6-87-4":[-2.16,1077],"6-87-5":[-10.36,397.96],"5-43-2":[-10.36,1077],"6-87-6":[-15.86,38],"6-87-7":[-16.5,1223.93],"5-43-3":[-16.5,1223.93],"4-21-1":[-16.5,1436.73],"3-10-0":[-16.5,1436.73],"6-87-8":[-9.11,1275.39],"6-87-9":[-9.42,200.27],"5-43-4":[-9.42,1361.22],"6-87-10":[-16.29,154.26],"6-87-11":[12.98,142.53],"5-43-5":[-16.29,219.71],"4-21-2":[-77.24,1773.8],"6-87-12":[33.77,210.72],"6-87-13":[8.93,447.9],"5-43-6":[-251.81,447.9],"6-87-14":[78.72,1084.54],"6-87-15":[-9.6,566.99],"5-43-7":[-9.6,1084.54],"4-21-3":[-251.81,1624.4],"3-10-1":[-251.81,1773.8],"6-87-16":[64.29,821.12],"6-87-17":[59.56,2139.17],"5-43-8":[-65.15,2139.17],"6-87-18":[168.8,4103.6],"6-87-19":[306.05,4599.84],"5-43-9":[118.27,4599.84],"4-21-4":[-108.09,4599.84],"6-87-20":[773.43,4772.12],"6-87-21":[-3.55,3524.89],"5-43-10":[-3.55,4772.12],"6-87-22":[-79.15,2437.68],"6-87-23":[-101.84,529.04],"5-43-11":[-101.84,2575.17],"4-21-5":[-257.75,4772.12],"3-10-2":[-257.75,5595.76],"6-87-24":[-118.44,-45.37],"6-87-25":[-141.93,-54.11],"5-43-12":[-141.93,-40.84],"6-87-26":[-150.7,-61.38],"6-87-27":[-163.78,-68.36],"5-43-13":[-163.78,-54.84],"4-21-6":[-163.78,1992.49],"6-87-28":[-170.56,-73.16],"6-87-29":[-174.45,-76.65],"5-43-14":[-174.45,-63.76],"6-87-30":[-173.2,-74.88],"6-87-31":[-167.31,-74.44],"5-43-15":[-173.2,-65.78],"4-21-7":[-174.45,-47.23],"3-10-3":[-174.45,2493.24],"6-87-32":[-162.11,-70.63],"6-87-33":[-151.07,-64.32],"5-43-16":[-162.11,-57.09],"6-87-34":[-139.14,-55.61],"6-87-35":[-119.37,-45.34],"5-43-17":[-139.14,-36.76],"4-21-8":[-162.11,-11.7],"6-87-36":[-99.82,-34.09],"6-87-37":[-73.91,-24.11],"5-43-18":[-99.82,-21.06],"6-87-38":[-54.69,-13.14],"6-87-39":[-30.91,-5.98],"5-43-19":[-54.69,376.48],"4-21-9":[-99.82,810.67],"3-10-4":[-162.11,3059.56],"6-87-40":[-16.87,0.27],"6-87-41":[-1.52,14.6],"5-43-20":[-16.87,18.37],"6-87-42":[5.69,23.57],"6-87-43":[10.55,36.11],"5-43-21":[5.69,39.03],"4-21-10":[-16.87,52.91],"6-87-44":[18.37,45.54],"6-87-45":[20.45,51.47],"5-43-22":[18.37,52.93],"6-87-46":[25.88,56.59],"6-87-47":[28.04,63.44],"5-43-23":[25.88,66.34],"4-21-11":[18.37,82.14],"3-10-5":[-16.87,1977.92],"6-87-48":[31.01,78.85],"6-87-49":[35.15,81.15],"5-43-24":[31.01,81.15],"6-87-50":[34.57,74.84],"6-87-51":[33.74,72.48],"5-43-25":[33.74,75.08],"4-21-12":[31.01,84.88],"6-87-52":[30.61,72.75],"6-87-53":[28.03,63.27],"5-43-26":[28.03,72.75],"6-87-54":[25.92,57.16],"6-87-55":[24.41,55.46],"5-43-27":[24.41,60.6],"4-21-13":[24.41,1169.19],"3-10-6":[10.5,2242.91],"6-87-56":[25.66,1925.54],"6-87-57":[136.32,1897.68],"5-43-28":[25.66,2407.49],"6-87-58":[355.79,2297.22],"6-87-59":[2244.47,3491.07],"5-43-29":[355.79,3491.07],"4-21-14":[25.66,3491.07],"6-87-60":[3458.69,3965.2],"6-87-61":[3500.57,3965.2],"5-43-30":[3395.86,3965.2],"6-87-62":[3065.04,3512.38],"6-87-63":[-29.54,3065.32],"5-43-31":[-29.54,3512.38],"4-21-15":[-29.54,3965.2],"3-10-7":[-29.54,3965.2],"6-88-0":[13.58,31.01],"6-88-1":[13.27,34.8],"6-88-2":[9.6,27.7],"6-88-3":[1.29,19.28],"6-88-4":[-5.14,793.47],"6-88-5":[-12.58,3.96],"6-88-6":[-14.53,64.34],"6-88-7":[-18.34,249.41],"6-88-8":[-13.24,223.3],"6-88-9":[3.21,226.52],"6-88-10":[-20.98,136.47],"6-88-11":[2.46,131.78],"6-88-12":[34.5,332.5],"6-88-13":[145.85,893.06],"6-88-14":[222.12,731.79],"6-88-15":[55.49,447.99],"6-88-16":[49.18,2106.12],"6-88-17":[156.79,5451.96],"6-88-18":[244.11,5411.27],"6-88-19":[361.44,5666.76],"6-88-20":[181.3,4714.77],"6-88-21":[-15.14,3432.07],"6-88-22":[-77.27,1024.24],"6-88-23":[-103.33,403.18],"6-88-24":[-126.49,569.02],"6-88-25":[-152.38,-59.6],"6-88-26":[-167.17,-70.97],"6-88-27":[-179.31,-76.12],"6-88-28":[-187.08,-81.89],"6-88-29":[-189.2,-85.59],"6-88-30":[-189.78,-83.95],"6-88-31":[-187.17,-81.05],"6-88-32":[-180.89,-76.23],"6-88-33":[-170.46,-69.57],"6-88-34":[-155.68,-60.53],"6-88-35":[-133.85,-49.91],"6-88-36":[-111.17,-38.44],"6-88-37":[-86,-27.34],"6-88-38":[-66.93,-16.67],"6-88-39":[-40.72,-8.66],"6-88-40":[-24.16,-1.51],"6-88-41":[-5.67,10.45],"6-88-42":[1.91,19.79],"6-88-43":[7.53,31.3],"6-88-44":[12.64,39.85],"6-88-45":[17.05,49.39],"6-88-46":[21.65,55.46],"6-88-47":[26.11,62.12],"6-88-48":[30.67,79.28],"6-88-49":[-55.82,1713.79],"6-88-50":[33.89,78.24],"6-88-51":[33.4,70.95],"6-88-52":[29.73,72.08],"6-88-53":[27.21,63.18],"6-88-54":[24.13,56.07],"6-88-55":[22.3,50.78],"6-88-56":[16.28,1116.82],"6-88-57":[13.9,1564.5],"6-88-58":[355.79,2295.88],"6-88-59":[2244.13,3490.99],"6-88-60":[3476.04,3997.79],"6-88-61":[3512.37,4001.34],"6-88-62":[3064.8,3523.63],"6-88-63":[-29.54,3065.05],"6-89-0":[13.6,30.41],"6-89-1":[13.24,33.54],"5-44-0":[13.24,34.8],"6-89-2":[9.34,26.43],"6-89-3":[1.06,16.79],"5-44-1":[1.06,27.7],"6-89-4":[-9.36,2.28],"6-89-5":[-14.35,7.89],"5-44-2":[-14.35,793.47],"6-89-6":[-19.83,60.3],"6-89-7":[-28.71,104.27],"5-44-3":[-28.71,249.41],"6-89-8":[-30.59,100.53],"6-89-9":[14.74,139.63],"5-44-4":[-30.59,226.52],"6-89-10":[-23.64,118.52],"6-89-11":[12.07,117.67],"5-44-5":[-23.64,136.47],"6-89-12":[-17.42,204.12],"6-89-13":[-52.7,749.66],"5-44-6":[-52.7,893.06],"6-89-14":[235.46,1122.49],"6-89-15":[163.09,1082.6],"5-44-7":[55.49,1122.49],"6-89-16":[148.14,4445.78],"6-89-17":[252.71,5979.55],"5-44-8":[49.18,5979.55],"6-89-18":[784.14,7425.22],"6-89-20":[59.84,2777.08],"6-89-19":[190.61,7670.17],"5-44-9":[190.61,7670.17],"6-89-21":[3.23,1028.73],"5-44-10":[-15.14,4714.77],"6-89-22":[-10.18,913.48],"6-89-23":[-89.16,1654.1],"5-44-11":[-103.33,1654.1],"6-89-24":[-133.04,1010.35],"6-89-25":[-155.77,598.43],"5-44-12":[-155.77,1010.35],"6-89-26":[-173.23,-75.99],"6-89-27":[-184.16,-67.66],"5-44-13":[-184.16,-67.66],"6-89-28":[-193.17,-72.32],"6-89-29":[-194.63,-67.67],"5-44-14":[-194.63,-67.67],"6-89-30":[-195.24,-67.2],"6-89-31":[-194.81,-43.56],"5-44-15":[-195.24,-43.56],"6-89-32":[-191.21,-78.05],"6-89-33":[-180.97,-40.52],"5-44-16":[-191.21,-40.52],"6-89-34":[-165.05,-37.6],"6-89-35":[-149.67,-56.07],"5-44-17":[-165.05,-37.6],"6-89-36":[-128.73,-45.3],"6-89-37":[-102.87,-34.29],"5-44-18":[-128.73,-27.34],"6-89-38":[-81.85,-22.52],"6-89-39":[-54.75,-12.77],"5-44-19":[-81.85,-8.66],"6-89-40":[-37.19,-4.34],"6-89-41":[-16.37,3.13],"5-44-20":[-37.19,10.45],"6-89-42":[-2.98,13.04],"6-89-43":[4.23,24.34],"5-44-21":[-2.98,31.3],"6-89-44":[9.98,32.16],"6-89-45":[13.89,42.42],"5-44-22":[9.98,49.39],"6-89-46":[21.65,50.58],"6-89-47":[23.2,61.35],"5-44-23":[21.65,62.12],"6-89-48":[28.47,76.1],"6-89-49":[32.48,302.78],"5-44-24":[-55.82,1713.79],"6-89-50":[6.34,315.35],"6-89-51":[32.78,72.05],"5-44-25":[6.34,315.35],"6-89-52":[28.91,68.61],"6-89-53":[26.94,58.88],"5-44-26":[26.94,72.08],"6-89-54":[21.2,53.9],"6-89-55":[21.2,49.06],"5-44-27":[21.2,56.07],"6-89-56":[16.07,392.26],"6-89-57":[13.9,1769.28],"5-44-28":[13.9,1769.28],"6-89-58":[1383.42,2436.17],"6-89-59":[2295.87,3484.93],"5-44-29":[355.79,3490.99],"6-89-60":[3476.04,4020.7],"6-89-61":[3523.62,4020.7],"5-44-30":[3476.04,4020.7],"6-89-62":[3063.59,3529.73],"6-89-63":[-29.54,3064.81],"5-44-31":[-29.54,3529.73],"6-90-0":[13.56,29.93],"6-90-1":[12.18,32.39],"6-90-2":[9.21,25.5],"6-90-3":[0.25,16.06],"6-90-4":[-11.93,1.31],"6-90-5":[-15.18,-4.47],"6-90-6":[-19.83,102.14],"6-90-7":[-28.89,97.21],"6-90-8":[-30.59,91.65],"6-90-9":[11.33,169.41],"6-90-10":[-26.48,102.52],"6-90-11":[16.21,130.71],"6-90-12":[-4.57,132.71],"6-90-13":[-44.99,965.27],"6-90-14":[341.61,1507.27],"6-90-15":[71.29,1151.88],"6-90-16":[241.76,4807.35],"6-90-17":[805.57,6513.21],"6-90-18":[1232.72,7543.41],"6-90-20":[101.67,5343.32],"6-90-21":[81.23,447.8],"6-90-22":[129.06,998],"6-90-19":[396.49,8087.96],"6-90-23":[-71.01,1264.93],"6-90-24":[-72.08,1499.22],"6-90-25":[-97.09,1527.78],"6-90-26":[-172.11,969.76],"6-90-27":[-189.5,1943.78],"6-90-28":[-199.61,132.05],"6-90-29":[-204.11,-76.78],"6-90-30":[-205.07,-73.55],"6-90-31":[-204.43,-69.28],"6-90-32":[-200.91,-74.1],"6-90-33":[-190.7,-82.52],"6-90-34":[-178.25,-74.83],"6-90-35":[-156.76,-64.37],"6-90-36":[-137.02,-52.73],"6-90-37":[-110.72,-40.93],"6-90-38":[-90.74,-28.8],"6-90-39":[-64.94,-19.04],"6-90-40":[-47.65,-9.27],"6-90-41":[-26.36,-1.84],"6-90-42":[-11.95,7.04],"6-90-43":[1.09,18.97],"6-90-44":[6.57,26.74],"6-90-45":[11.56,36.44],"6-90-46":[16.22,45.25],"6-90-47":[21.29,56.94],"6-90-48":[26.15,64.98],"6-90-49":[29.48,73.84],"6-90-50":[27.75,2779.41],"6-90-51":[30.57,74.05],"6-90-52":[29.34,65.8],"6-90-53":[23.63,58.34],"6-90-54":[20.44,50.44],"6-90-55":[17.32,44.95],"6-90-56":[15.75,1525.64],"6-90-57":[392.25,2210.25],"6-90-58":[1769.27,2619.19],"6-90-59":[2436.16,3487.6],"6-90-60":[3484.48,4037.87],"6-90-61":[3527.59,4030.9],"6-90-62":[3063.36,3530.31],"6-90-63":[-29.54,3064.82],"6-91-0":[13.58,29.33],"6-91-1":[12.18,31.01],"5-45-0":[12.18,32.39],"6-91-2":[8.56,24.24],"6-91-3":[-0.35,15.89],"5-45-1":[-0.35,25.5],"4-22-0":[-0.35,34.8],"6-91-4":[-13.02,0.37],"6-91-5":[-17.46,-5.58],"5-45-2":[-17.46,1.31],"6-91-6":[-20,102],"6-91-7":[-29.05,103.01],"5-45-3":[-29.05,103.01],"4-22-1":[-29.05,793.47],"6-91-8":[-29.05,81.75],"6-91-9":[-9.54,122.72],"5-45-4":[-30.59,169.41],"6-91-10":[-28.84,110.81],"6-91-11":[16.8,118.68],"5-45-5":[-28.84,130.71],"4-22-2":[-30.59,226.52],"6-91-12":[41.21,133.68],"6-91-13":[17.89,487.76],"5-45-6":[-44.99,965.27],"6-91-14":[131.95,1504.92],"6-91-15":[271.47,1384.81],"5-45-7":[71.29,1507.27],"4-22-3":[-52.7,1507.27],"6-91-16":[329.52,4930.95],"6-91-17":[1039.82,5827.63],"5-45-8":[241.76,6513.21],"6-91-18":[1051.98,6379.76],"6-91-19":[2249.39,8560.58],"5-45-9":[396.49,8560.58],"4-22-4":[49.18,8560.58],"6-91-20":[176.06,6725.08],"6-91-21":[96.74,4563.58],"5-45-10":[81.23,6725.08],"6-91-22":[31.65,732.76],"6-91-23":[133.09,994.23],"5-45-11":[-71.01,1264.93],"4-22-5":[-103.33,6725.08],"6-91-24":[88.59,1273.26],"6-91-25":[133.67,698.38],"5-45-12":[-97.09,1527.78],"6-91-26":[29.03,1069.77],"6-91-27":[-98.98,2543.22],"5-45-13":[-189.5,2543.22],"4-22-6":[-189.5,2543.22],"6-91-28":[-197.25,2590.24],"6-91-29":[-213.05,1544.94],"5-45-14":[-213.05,2590.24],"6-91-30":[-213.9,-102.05],"6-91-31":[-208.09,-100.58],"5-45-15":[-213.9,-69.28],"4-22-7":[-213.9,2590.24],"6-91-32":[-205.64,-96.41],"6-91-33":[-194.02,-89.47],"5-45-16":[-205.64,-74.1],"6-91-34":[-182.42,-79.86],"6-91-35":[-161.36,-69.08],"5-45-17":[-182.42,-64.37],"4-22-8":[-205.64,-37.6],"6-91-36":[-142.2,-57.49],"6-91-37":[-116.73,-45.58],"5-45-18":[-142.2,-40.93],"6-91-38":[-98.13,-34.54],"6-91-39":[-76.39,-24.5],"5-45-19":[-98.13,-19.04],"4-22-9":[-142.2,-8.66],"6-91-40":[-59.57,-14.97],"6-91-41":[-39.69,-6.64],"5-45-20":[-59.57,-1.84],"6-91-42":[-24.55,1.1],"6-91-43":[-6.24,12.33],"5-45-21":[-24.55,18.97],"4-22-10":[-59.57,31.3],"6-91-44":[3.69,23.13],"6-91-45":[-0.46,882.59],"5-45-22":[-0.46,882.59],"6-91-46":[14.12,40.84],"6-91-47":[18.73,51.83],"5-45-23":[14.12,56.94],"4-22-11":[-0.46,882.59],"6-91-48":[26.15,57.63],"6-91-49":[26.58,64.22],"5-45-24":[26.15,73.84],"6-91-50":[28.51,71.32],"6-91-51":[27.46,68.43],"5-45-25":[27.46,2779.41],"4-22-12":[-55.82,2779.41],"6-91-52":[27.54,61.22],"6-91-53":[23.63,57.26],"5-45-26":[23.63,65.8],"6-91-54":[18.37,46.65],"6-91-55":[17.3,38.66],"5-45-27":[17.3,50.44],"4-22-13":[17.3,72.08],"6-91-56":[15.75,1873.55],"6-91-57":[1472.92,2662.65],"5-45-28":[15.75,2662.65],"6-91-58":[2210.24,2841.83],"6-91-59":[2619.18,3506.71],"5-45-29":[1769.27,3506.71],"4-22-14":[13.9,3506.71],"6-91-60":[3487.59,4042.04],"6-91-61":[3516.4,4030.73],"5-45-30":[3484.48,4042.04],"6-91-62":[3063.05,3527.6],"6-91-63":[-29.54,3066.42],"5-45-31":[-29.54,3530.31],"4-22-15":[-29.54,4042.04],"6-92-0":[13.55,28.88],"6-92-1":[11.24,30.24],"6-92-2":[7.88,23.28],"6-92-3":[-1.45,283.89],"6-92-4":[-12.53,-0.34],"6-92-5":[-17.94,255.31],"6-92-6":[-21.31,243.75],"6-92-7":[-24.37,117.76],"6-92-8":[-24.37,64.43],"6-92-9":[-19.87,203.65],"6-92-10":[-30.16,114.52],"6-92-11":[9.32,125.15],"6-92-12":[63.09,235.48],"6-92-13":[48.15,478.3],"6-92-14":[109.62,1419.87],"6-92-15":[276.31,4532.62],"6-92-16":[432.35,6633.62],"6-92-17":[908.55,7087.4],"6-92-18":[1029.39,4976.93],"6-92-19":[1276.56,7022.3],"6-92-20":[2453.79,7194.47],"6-92-21":[35.37,7787.57],"6-92-22":[-15.2,295.99],"6-92-23":[-6.93,1069.67],"6-92-24":[29.9,1095.71],"6-92-25":[-88.56,1197.87],"6-92-26":[-182.75,1006.73],"6-92-27":[-197.07,1132.42],"6-92-28":[-198.18,434.8],"6-92-29":[-212.75,2430.45],"6-92-30":[-213.9,-101.01],"6-92-31":[-207.87,-100.16],"6-92-32":[-205.79,-94.42],"6-92-33":[-195,-88.59],"6-92-34":[-182.48,-79.41],"6-92-35":[-161.34,-70.63],"6-92-36":[-142.37,-59.67],"6-92-37":[-120.53,-49.07],"6-92-38":[-104.92,-39.42],"6-92-39":[-84.27,-29.78],"6-92-40":[-67.56,-20.85],"6-92-41":[-47.53,-12.67],"6-92-42":[-33.56,-4.07],"6-92-43":[-15.92,6.04],"6-92-44":[-3.11,19.27],"6-92-45":[3.14,28.24],"6-92-46":[9.41,36.29],"6-92-47":[15.61,46.42],"6-92-48":[19.59,52.39],"6-92-49":[23.34,58.26],"6-92-50":[24.55,61.51],"6-92-51":[20.83,56.57],"6-92-52":[20.97,56.29],"6-92-53":[20.93,53.7],"6-92-54":[15.67,43.92],"6-92-55":[14.25,36.25],"6-92-56":[15.39,2339.17],"6-92-57":[1873.54,2935.32],"6-92-58":[2662.64,3173.47],"6-92-59":[2841.82,3593.63],"6-92-60":[3506.7,4042.04],"6-92-61":[3499.19,4001.04],"6-92-62":[3062.85,3516.41],"6-92-63":[-29.54,3066.46],"6-93-0":[13.56,28.31],"6-93-1":[11.24,29.45],"5-46-0":[11.24,30.24],"6-93-2":[7.36,22.43],"6-93-3":[-1.93,13.28],"5-46-1":[-1.93,283.89],"6-93-4":[-12.52,9.42],"6-93-5":[-19.04,346.14],"5-46-2":[-19.04,346.14],"6-93-6":[-25.93,405.51],"6-93-7":[-28.7,174.16],"5-46-3":[-28.7,405.51],"6-93-8":[-19.06,149.97],"6-93-9":[-3.71,236.06],"5-46-4":[-24.37,236.06],"6-93-10":[-30.26,155.46],"6-93-11":[10.19,162.81],"5-46-5":[-30.26,162.81],"6-93-12":[-1.52,446.71],"6-93-13":[73.33,2380.4],"5-46-6":[-1.52,2380.4],"6-93-14":[23.35,2712],"6-93-15":[124.82,3961.77],"5-46-7":[23.35,4532.62],"6-93-16":[105.62,5107.74],"6-93-17":[837.93,3794.4],"5-46-8":[105.62,7087.4],"6-93-18":[954.9,6062.91],"6-93-19":[1693.3,6911.73],"5-46-9":[954.9,7022.3],"6-93-20":[4293.12,6600.18],"6-93-21":[81.18,8103.55],"5-46-10":[35.37,8103.55],"6-93-22":[-46.13,2512.35],"6-93-23":[-31.32,1178.46],"5-46-11":[-46.13,2512.35],"6-93-24":[-19.46,1262.43],"6-93-25":[-161.45,1608.79],"5-46-12":[-161.45,1608.79],"6-93-26":[-181.92,-37.98],"6-93-27":[-194.57,-86.28],"5-46-13":[-197.07,1132.42],"6-93-28":[-196.82,-88.67],"6-93-29":[-203.21,351.9],"5-46-14":[-212.75,2430.45],"6-93-30":[-206.92,-92.98],"6-93-31":[-203.79,-91.46],"5-46-15":[-213.9,-91.46],"6-93-32":[-197.97,-88.46],"6-93-33":[-185.94,-84.21],"5-46-16":[-205.79,-84.21],"6-93-34":[-175.59,-76.82],"6-93-35":[-155.42,-69.13],"5-46-17":[-182.48,-69.13],"6-93-36":[-142.66,-61.65],"6-93-37":[-126.46,-53.23],"5-46-18":[-142.66,-49.07],"6-93-38":[-113.57,-44.2],"6-93-39":[-92.35,-34.33],"5-46-19":[-113.57,-29.78],"6-93-40":[-75.45,-25.32],"6-93-41":[-57.43,-17.51],"5-46-20":[-75.45,-12.67],"6-93-42":[-43.87,-9.49],"6-93-43":[-26.53,-2.26],"5-46-21":[-43.87,6.04],"6-93-44":[-14.66,3.69],"6-93-45":[-1.24,17.7],"5-46-22":[-14.66,28.24],"6-93-46":[5.93,28.99],"6-93-47":[11.24,38.3],"5-46-23":[5.93,46.42],"6-93-48":[19.38,44.79],"6-93-49":[19.38,49.77],"5-46-24":[19.38,58.26],"6-93-50":[20.9,50.43],"6-93-51":[20.83,47.65],"5-46-25":[20.83,61.51],"6-93-52":[18.26,48.46],"6-93-53":[18.26,48.79],"5-46-26":[18.26,56.29],"6-93-54":[14.04,41],"6-93-55":[13.54,635.17],"5-46-27":[13.54,635.17],"6-93-56":[15.52,2519.02],"6-93-57":[2339.16,3197.54],"5-46-28":[15.39,3197.54],"6-93-58":[2935.31,3364.13],"6-93-59":[3109.51,3621.13],"5-46-29":[2662.64,3621.13],"6-93-60":[3593.62,4025.51],"6-93-61":[3480.01,3923.74],"5-46-30":[3480.01,4042.04],"6-93-62":[3063.46,3499.2],"6-93-63":[-29.54,3067.15],"5-46-31":[-29.54,3516.41],"6-94-0":[13.47,27.85],"6-94-1":[10.93,28.85],"6-94-2":[6.21,22.12],"6-94-3":[-2.74,11.48],"6-94-4":[-13.52,-1.43],"6-94-5":[-19.79,311.63],"6-94-6":[-11.52,248.42],"6-94-7":[-28.7,355.11],"6-94-8":[-17.9,176.8],"6-94-9":[-7.94,232.96],"6-94-10":[-30.83,204.28],"6-94-11":[21.88,252.1],"6-94-12":[-18.21,544.69],"6-94-13":[103.65,2652.03],"6-94-14":[329.84,4375.85],"6-94-15":[163.35,3786.97],"6-94-16":[217.97,5220.28],"6-94-17":[745.63,3644.02],"6-94-18":[804.64,6686.7],"6-94-19":[4212.17,6437.5],"6-94-20":[4352.91,6733.83],"6-94-21":[458.23,8019.76],"6-94-22":[-62.15,8777.15],"6-94-23":[-49.51,1317.62],"6-94-24":[-131.49,1124.07],"6-94-25":[-161,1331.06],"6-94-26":[-174.06,-73.06],"6-94-27":[-177.34,-76.23],"6-94-28":[-181.5,-77.26],"6-94-29":[-187.4,-77.29],"6-94-30":[-187.32,-78.62],"6-94-31":[-187.52,-78.17],"6-94-32":[-182.92,-76.46],"6-94-33":[-176.4,-74.65],"6-94-34":[-168.43,-71.13],"6-94-35":[-151.14,-67.72],"6-94-36":[-139.6,-60.57],"6-94-37":[-126.46,-54.12],"6-94-38":[-114.22,-45.3],"6-94-39":[-93.08,-37.72],"6-94-40":[-77.95,-29.61],"6-94-41":[-61.78,-22.17],"6-94-42":[-50.7,-14.14],"6-94-43":[-33.49,-7.53],"6-94-44":[-21.33,-1.23],"6-94-45":[-8.99,10.6],"6-94-46":[0.56,21.41],"6-94-47":[7.51,31.9],"6-94-48":[11.75,38.12],"6-94-49":[15.47,42.62],"6-94-50":[16.83,42.88],"6-94-51":[15.6,40.98],"6-94-52":[12.93,36.12],"6-94-53":[11.48,39.7],"6-94-54":[10.61,32.65],"6-94-55":[10.62,1029.1],"6-94-56":[635.16,2637.61],"6-94-57":[2519.01,3300.48],"6-94-58":[3197.53,3450.97],"6-94-59":[3321.28,3672.41],"6-94-60":[3621.12,3954.97],"6-94-61":[3420.25,3850.88],"6-94-62":[3064.94,3480.02],"6-94-63":[-29.54,3067.91],"6-95-0":[13.31,27.3],"6-95-1":[10.93,27.94],"5-47-0":[10.93,28.85],"6-95-2":[6.2,21.84],"6-95-3":[-3.28,10.22],"5-47-1":[-3.28,22.12],"4-23-0":[-3.28,283.89],"6-95-4":[-13.57,46.56],"6-95-5":[-14.69,348.59],"5-47-2":[-19.79,348.59],"6-95-6":[-9.39,401.33],"6-95-7":[-9.94,941.07],"5-47-3":[-28.7,941.07],"4-23-1":[-28.7,941.07],"3-11-0":[-29.05,941.07],"6-95-8":[-21.59,733.23],"6-95-9":[-13.86,628.73],"5-47-4":[-21.59,733.23],"6-95-10":[-32.57,242.85],"6-95-11":[53.1,262.78],"5-47-5":[-32.57,262.78],"4-23-2":[-32.57,733.23],"6-95-12":[74.14,2173.74],"6-95-13":[176.51,3529.7],"5-47-6":[-18.21,3529.7],"6-95-14":[474.07,4279.84],"6-95-15":[301.44,3328.41],"5-47-7":[163.35,4375.85],"4-23-3":[-18.21,4532.62],"3-11-1":[-52.7,4532.62],"2-5-0":[-251.81,4532.62],"6-95-16":[-260.5,4987.09],"6-95-17":[619.6,2654.79],"5-47-8":[-260.5,5220.28],"6-95-18":[731.86,6201.27],"6-95-19":[4444.41,6890.4],"5-47-9":[731.86,6890.4],"4-23-4":[-260.5,7087.4],"6-95-20":[4425.14,6254.63],"6-95-21":[988.33,7070.27],"5-47-10":[458.23,8019.76],"6-95-22":[-69.58,8478.4],"6-95-23":[-139.77,533.63],"5-47-11":[-139.77,8777.15],"4-23-5":[-139.77,8777.15],"3-11-2":[-260.5,8777.15],"6-95-24":[-131.42,26.16],"6-95-25":[-146.13,-61.4],"5-47-12":[-161,1331.06],"6-95-26":[-150.96,-63.4],"6-95-27":[-152.36,-64.19],"5-47-13":[-177.34,-63.4],"4-23-6":[-197.07,1608.79],"6-95-28":[-152.61,-62.12],"6-95-29":[-153.05,-59.77],"5-47-14":[-187.4,-59.77],"6-95-30":[-153.22,-59.81],"6-95-31":[-153.97,-60.33],"5-47-15":[-187.52,-59.81],"4-23-7":[-213.9,2430.45],"3-11-3":[-213.9,2590.24],"2-5-1":[-260.5,8777.15],"1-2-0":[-398.55,8777.15],"6-95-32":[-153.84,-61.96],"6-95-33":[-150.16,-62.76],"5-47-16":[-182.92,-61.96],"6-95-34":[-147.07,-63.18],"6-95-35":[-139.29,-62.21],"5-47-17":[-168.43,-62.21],"4-23-8":[-205.79,-61.96],"6-95-36":[-135.36,-58.3],"6-95-37":[-121.04,-51.25],"5-47-18":[-139.6,-51.25],"6-95-38":[-111.37,-44.8],"6-95-39":[-96.39,-38.31],"5-47-19":[-114.22,-37.72],"4-23-9":[-142.66,-29.78],"3-11-4":[-205.79,-8.66],"6-95-40":[-87.28,-30.97],"6-95-41":[-73.3,-25.9],"5-47-20":[-87.28,-22.17],"6-95-42":[-61.25,-17.39],"6-95-43":[-45.22,-11.38],"5-47-21":[-61.25,-7.53],"4-23-10":[-87.28,6.04],"6-95-44":[-34.87,-6.02],"6-95-45":[-20.9,0.57],"5-47-22":[-34.87,10.6],"6-95-46":[-8.31,12.66],"6-95-47":[2.81,22.59],"5-47-23":[-8.31,31.9],"4-23-11":[-34.87,46.42],"3-11-5":[-87.28,882.59],"2-5-2":[-205.79,3059.56],"6-95-48":[11.13,29.29],"6-95-49":[11.13,33.22],"5-47-24":[11.13,42.62],"6-95-50":[13.37,33.58],"6-95-51":[13.37,32.64],"5-47-25":[13.37,42.88],"4-23-12":[11.13,61.51],"6-95-52":[10.23,30.49],"6-95-53":[10.23,23.8],"5-47-26":[10.23,39.7],"6-95-54":[6.78,21.99],"6-95-55":[6.78,1290.06],"5-47-27":[6.78,1290.06],"4-23-13":[6.78,1290.06],"3-11-6":[-55.82,2779.41],"6-95-56":[1007.52,2688.65],"6-95-57":[2637.6,3479.02],"5-47-28":[635.16,3479.02],"6-95-58":[3300.47,3627.63],"6-95-59":[3450.96,3738.39],"5-47-29":[3197.53,3738.39],"4-23-14":[15.39,3738.39],"6-95-60":[3672.4,3883.62],"6-95-61":[3372.97,3781.94],"5-47-30":[3372.97,3954.97],"6-95-62":[3066.6,3420.26],"6-95-63":[-29.54,3069.78],"5-47-31":[-29.54,3480.02],"4-23-15":[-29.54,4042.04],"3-11-7":[-29.54,4042.04],"2-5-3":[-55.82,4042.04],"1-2-1":[-242.83,5869.55],"6-96-0":[13.05,27.12],"6-96-1":[10.66,27.25],"6-96-2":[6.32,21.6],"6-96-3":[-3.81,327.9],"6-96-4":[-13.97,41.97],"6-96-5":[-14.52,491.93],"6-96-6":[-12.84,766.61],"6-96-7":[15.52,1577.7],"6-96-8":[23.06,974.81],"6-96-9":[0.51,751.03],"6-96-10":[-32.17,917.02],"6-96-11":[22.51,457.27],"6-96-12":[87.23,1266.17],"6-96-13":[216.38,3266],"6-96-14":[707.82,4151.48],"6-96-15":[820.5,4116.23],"6-96-16":[-31.39,3824.31],"6-96-17":[290.2,2504.01],"6-96-18":[1263.81,5909.96],"6-96-19":[3248.18,6767.17],"6-96-20":[4109.93,6522.84],"6-96-21":[2989.51,7463.69],"6-96-22":[-83.69,7512.84],"6-96-23":[-109,1663.78],"6-96-24":[-122.52,1062.24],"6-96-25":[-126.56,-53.86],"6-96-26":[-128.85,-59.44],"6-96-27":[-129.38,407.51],"6-96-28":[-128.18,114.95],"6-96-29":[-123.94,-53.59],"6-96-30":[-121.58,-48.89],"6-96-31":[-126.69,-47.66],"6-96-32":[-127.67,-47.94],"6-96-33":[-128.62,-48.79],"6-96-34":[-129.46,-51.46],"6-96-35":[-129.43,-54.63],"6-96-36":[-128.76,-55.19],"6-96-37":[-118.48,-52.16],"6-96-38":[-109.45,-47.88],"6-96-39":[-96.5,-43.64],"6-96-40":[-90.53,-37.51],"6-96-41":[-79.29,-30.63],"6-96-42":[-69.21,-23.04],"6-96-43":[-55.83,-17.8],"6-96-44":[-44.21,-11.23],"6-96-45":[-29.81,-4.63],"6-96-46":[-17.32,4.18],"6-96-47":[-2.33,15.19],"6-96-48":[3,21.54],"6-96-49":[6.76,26.13],"6-96-50":[9.32,27.61],"6-96-51":[9.2,26.58],"6-96-52":[7.16,26.06],"6-96-53":[2.39,19.5],"6-96-54":[2.39,14.94],"6-96-55":[3.38,1584.77],"6-96-56":[1290.05,2802.12],"6-96-57":[2688.64,3518.93],"6-96-58":[3479.01,3704.38],"6-96-59":[3627.62,3756.39],"6-96-60":[3652.33,3799.9],"6-96-61":[3341.14,3696.84],"6-96-62":[3068.58,3372.98],"6-96-63":[-29.54,3073.17],"6-97-0":[12.85,27.04],"6-97-1":[10.66,26.67],"5-48-0":[10.66,27.25],"6-97-2":[5.88,21.3],"6-97-3":[-5.43,785.33],"5-48-1":[-5.43,785.33],"6-97-4":[-15.46,476.72],"6-97-5":[-7.89,604.4],"5-48-2":[-15.46,604.4],"6-97-6":[-13.92,806.23],"6-97-7":[44.76,1618.98],"5-48-3":[-13.92,1618.98],"6-97-8":[91.31,1177.41],"6-97-9":[10.89,764.98],"5-48-4":[0.51,1177.41],"6-97-10":[-24.59,1092.04],"6-97-11":[-3.1,823.06],"5-48-5":[-32.17,1092.04],"6-97-12":[74.37,2561.56],"6-97-13":[260.85,2677.49],"5-48-6":[74.37,3266],"6-97-14":[697.66,2882.06],"6-97-15":[906.92,4155.27],"5-48-7":[697.66,4155.27],"6-97-16":[219.52,4825.04],"6-97-17":[271.2,4733.64],"5-48-8":[-31.39,4825.04],"6-97-18":[2241.79,5772.12],"6-97-19":[2644.39,6131.65],"5-48-9":[1263.81,6767.17],"6-97-20":[3253.98,6237.58],"6-97-21":[107.58,7221.31],"5-48-10":[107.58,7463.69],"6-97-22":[-53.33,5335.5],"6-97-23":[-92.67,2777.96],"5-48-11":[-109,7512.84],"6-97-24":[-99.38,3021.9],"6-97-25":[-120.76,1489.97],"5-48-12":[-126.56,3021.9],"6-97-26":[-124.46,365.67],"6-97-27":[-120.57,671.16],"5-48-13":[-129.38,671.16],"6-97-28":[-127.91,253.16],"6-97-29":[-120.45,634.69],"5-48-14":[-128.18,634.69],"6-97-30":[-106.53,2140.29],"6-97-31":[-94.44,-30.37],"5-48-15":[-126.69,2140.29],"6-97-32":[-93.37,-30.41],"6-97-33":[-100.58,-33.35],"5-48-16":[-128.62,-30.41],"6-97-34":[-105.96,-38.16],"6-97-35":[-109.16,-42.72],"5-48-17":[-129.46,-38.16],"6-97-36":[-110.94,-44.59],"6-97-37":[-107.55,-47.06],"5-48-18":[-128.76,-44.59],"6-97-38":[-103.96,-48.28],"6-97-39":[-97.49,-45.28],"5-48-19":[-109.45,-43.64],"6-97-40":[-91.36,-40.59],"6-97-41":[-84.52,-34.82],"5-48-20":[-91.36,-30.63],"6-97-42":[-74.46,-27.37],"6-97-43":[-60.54,-22.77],"5-48-21":[-74.46,-17.8],"6-97-44":[-55.82,-16.33],"6-97-45":[-41.68,-9.34],"5-48-22":[-55.82,-4.63],"6-97-46":[-29.34,-2.32],"6-97-47":[-13.57,4.79],"5-48-23":[-29.34,15.19],"6-97-48":[-3.72,11.69],"6-97-49":[2.56,17.71],"5-48-24":[-3.72,26.13],"6-97-50":[5.93,18.3],"6-97-51":[6.01,18.13],"5-48-25":[5.93,27.61],"6-97-52":[3.78,17.87],"6-97-53":[-1.51,12.15],"5-48-26":[-1.51,26.06],"6-97-54":[-2.2,7.25],"6-97-55":[-0.05,1584.77],"5-48-27":[-2.2,1584.77],"6-97-56":[1497.42,2824.51],"6-97-57":[2802.11,3500.23],"5-48-28":[1290.05,3518.93],"6-97-58":[3409.99,3719.54],"6-97-59":[3704.37,3755.97],"5-48-29":[3409.99,3756.39],"6-97-60":[3612.81,3775.22],"6-97-61":[3317.34,3652.34],"5-48-30":[3317.34,3799.9],"6-97-62":[3069.22,3341.15],"6-97-63":[-29.54,3074.67],"5-48-31":[-29.54,3372.98],"6-98-0":[12.57,27.03],"6-98-1":[10.26,26.35],"6-98-2":[4.57,21],"6-98-3":[-6.42,915.41],"6-98-4":[-16.48,237.04],"6-98-5":[-7.98,810.48],"6-98-6":[-11.47,688.57],"6-98-7":[12.53,1569.96],"6-98-8":[124.42,1090.5],"6-98-9":[50.44,887.64],"6-98-10":[-27,775.1],"6-98-11":[69.08,615.55],"6-98-12":[151.22,2887.36],"6-98-13":[660.12,2999.01],"6-98-14":[1179.37,3482.56],"6-98-15":[1006.26,3928.85],"6-98-16":[422.97,2953.75],"6-98-17":[1074.68,5415.08],"6-98-18":[2272.72,5725.81],"6-98-19":[2617.61,5462.57],"6-98-20":[3023.42,5731.48],"6-98-21":[133.36,6535.05],"6-98-22":[23.08,5106.11],"6-98-23":[12.3,3346.34],"6-98-24":[-17.38,2464.8],"6-98-25":[-86.67,2574.03],"6-98-26":[-135.7,1748.97],"6-98-27":[-96.39,1498.37],"6-98-28":[-92.56,1085.71],"6-98-29":[-80.53,550.46],"6-98-30":[-71.73,3433.72],"6-98-31":[-71.07,1843.03],"6-98-32":[-66.71,243],"6-98-33":[-76.31,-20.39],"6-98-34":[-86.19,-23.44],"6-98-35":[-91.28,-29.19],"6-98-36":[-94.14,-13.36],"6-98-37":[-101.07,-41.41],"6-98-38":[-100.77,-44.67],"6-98-39":[-96.25,-45.32],"6-98-40":[-93.34,-42.41],"6-98-41":[-85,-35.94],"6-98-42":[-76.44,-31.6],"6-98-43":[-68.5,-27.91],"6-98-44":[-62.86,-21.68],"6-98-45":[-50.56,-14.99],"6-98-46":[-38.51,-7.65],"6-98-47":[-23.36,-2.19],"6-98-48":[-12.63,4.07],"6-98-49":[-1.83,10.05],"6-98-50":[0.77,11.74],"6-98-51":[1.97,12.17],"6-98-52":[-0.24,11.35],"6-98-53":[-6.56,6.36],"6-98-54":[-6.92,6.59],"6-98-55":[-6.32,1715.72],"6-98-56":[1527.57,2802.84],"6-98-57":[2705.17,3410],"6-98-58":[3387.34,3708.3],"6-98-59":[3611.48,3736.73],"6-98-60":[3543.29,3737.71],"6-98-61":[3284.66,3612.82],"6-98-62":[3070.76,3317.35],"6-98-63":[-29.54,3075.47],"6-99-0":[12.31,27.01],"6-99-1":[10.26,25.84],"5-49-0":[10.26,27.03],"6-99-2":[4.57,20.48],"6-99-3":[-6.18,969.4],"5-49-1":[-6.42,969.4],"4-24-0":[-6.42,969.4],"6-99-4":[-16.18,517.22],"6-99-5":[-8.15,590],"5-49-2":[-16.48,810.48],"6-99-6":[-11.65,855.64],"6-99-7":[102.24,1354.63],"5-49-3":[-11.65,1569.96],"4-24-1":[-16.48,1618.98],"6-99-8":[120.14,1086.98],"6-99-9":[86.63,868.73],"5-49-4":[50.44,1090.5],"6-99-10":[-31.02,599.89],"6-99-11":[80.02,729.83],"5-49-5":[-31.02,775.1],"4-24-2":[-32.17,1177.41],"6-99-12":[187.08,2274.47],"6-99-13":[527.52,3424.72],"5-49-6":[151.22,3424.72],"6-99-14":[1035.39,3181.14],"6-99-15":[1160.58,3821.64],"5-49-7":[1006.26,3928.85],"4-24-3":[74.37,4155.27],"6-99-16":[637.58,3902.64],"6-99-17":[836.31,3828.18],"5-49-8":[422.97,5415.08],"6-99-18":[1288.02,5499.12],"6-99-19":[2175.47,6216.6],"5-49-9":[1288.02,6216.6],"4-24-4":[-31.39,6767.17],"6-99-20":[2779.55,6063.79],"6-99-21":[1586.78,6434.65],"5-49-10":[133.36,6535.05],"6-99-22":[657.1,5432.09],"6-99-23":[300.67,3530.75],"5-49-11":[12.3,5432.09],"4-24-5":[-109,7512.84],"6-99-24":[129.64,2554.75],"6-99-25":[-17.17,2536.99],"5-49-12":[-86.67,2574.03],"6-99-26":[-78.1,2080.04],"6-99-27":[-90.57,2009.72],"5-49-13":[-135.7,2080.04],"4-24-6":[-135.7,3021.9],"6-99-28":[-65.06,1760.05],"6-99-29":[-72.95,1543.06],"5-49-14":[-92.56,1760.05],"6-99-30":[-57.01,2251.47],"6-99-31":[-38.89,2884.86],"5-49-15":[-71.73,3433.72],"4-24-7":[-128.18,3433.72],"6-99-32":[-81.91,3098.13],"6-99-33":[-45.75,302.5],"5-49-16":[-81.91,3098.13],"6-99-34":[-54.35,-15.47],"6-99-35":[-71.17,-18.5],"5-49-17":[-91.28,-15.47],"4-24-8":[-129.46,3098.13],"6-99-36":[-82.83,-25.9],"6-99-37":[-88.25,-33.31],"5-49-18":[-101.07,-13.36],"6-99-38":[-94.27,-41.22],"6-99-39":[-95.18,-42.76],"5-49-19":[-100.77,-41.22],"4-24-9":[-128.76,-13.36],"6-99-40":[-92.2,-40.17],"6-99-41":[-83.68,-35.94],"5-49-20":[-93.34,-35.94],"6-99-42":[-78.69,-34.93],"6-99-43":[-74.99,-31.99],"5-49-21":[-78.69,-27.91],"4-24-10":[-93.34,-17.8],"6-99-44":[-72.56,-26.45],"6-99-45":[-59.76,-19.83],"5-49-22":[-72.56,-14.99],"6-99-46":[-48.96,-13.12],"6-99-47":[-34.76,-6.95],"5-49-23":[-48.96,-2.19],"4-24-11":[-72.56,15.19],"6-99-48":[-22.48,-1.82],"6-99-49":[-11.77,0.78],"5-49-24":[-22.48,10.05],"6-99-50":[-6.68,3.52],"6-99-51":[-3.06,3.63],"5-49-25":[-6.68,12.17],"4-24-12":[-22.48,27.61],"6-99-52":[-6.11,2.94],"6-99-53":[-14.49,-0.23],"5-49-26":[-14.49,11.35],"6-99-54":[-16.12,2.4],"6-99-55":[-5.53,1741.17],"5-49-27":[-16.12,1741.17],"4-24-13":[-16.12,1741.17],"6-99-56":[1318.62,2705.18],"6-99-57":[2640.6,3387.35],"5-49-28":[1318.62,3410],"6-99-58":[3292.46,3611.49],"6-99-59":[3525.75,3694.95],"5-49-29":[3292.46,3736.73],"4-24-14":[1290.05,3756.39],"6-99-60":[3433.71,3696.05],"6-99-61":[3240.36,3543.3],"5-49-30":[3240.36,3737.71],"6-99-62":[3070.72,3284.67],"6-99-63":[-29.54,3075.96],"5-49-31":[-29.54,3317.35],"4-24-15":[-29.54,3799.9],"6-100-0":[12.14,26.99],"6-100-1":[10.27,25.24],"6-100-2":[3.43,20.53],"6-100-3":[-0.76,788.17],"6-100-4":[-13.05,864.96],"6-100-5":[-6.27,624.53],"6-100-6":[-13.4,737.36],"6-100-7":[45.51,676.85],"6-100-8":[147.98,958.88],"6-100-9":[114.45,855.83],"6-100-10":[-24.8,555.66],"6-100-11":[130.97,852.88],"6-100-12":[253.49,918],"6-100-13":[346.44,3194.59],"6-100-14":[732.53,2295.19],"6-100-15":[986.95,3379.04],"6-100-16":[844.64,3558.09],"6-100-17":[745.38,1902.58],"6-100-18":[1168.55,5176.87],"6-100-19":[1398.27,4952.19],"6-100-20":[475.77,6100.38],"6-100-21":[222.1,7111.28],"6-100-22":[347.18,4334.26],"6-100-23":[41.06,3117.27],"6-100-24":[36.19,3084.02],"6-100-25":[52.6,2792.64],"6-100-26":[-35.3,1323.34],"6-100-27":[-72.12,1726.89],"6-100-28":[-49.94,1062.2],"6-100-29":[-35.14,1503.56],"6-100-30":[-117.38,2181.1],"6-100-31":[-68.74,1252.6],"6-100-32":[-20.47,3783.24],"6-100-33":[-69.41,3170.1],"6-100-34":[-37.01,1.6],"6-100-35":[-51.44,-9.86],"6-100-36":[-64.35,-13.79],"6-100-37":[-82.44,-27.14],"6-100-38":[-86.64,-34.46],"6-100-39":[-87.84,-34.63],"6-100-40":[-85.52,-36.5],"6-100-41":[-80.19,-37.62],"6-100-42":[-78.68,-37.25],"6-100-43":[-81.4,-35.65],"6-100-44":[-80.06,-30.59],"6-100-45":[-66.32,-24.76],"6-100-46":[-55.39,-18.12],"6-100-47":[-41.05,-11.56],"6-100-48":[-30.56,-6.29],"6-100-49":[-19.26,-3.51],"6-100-50":[-13.29,-1.45],"6-100-51":[-9.52,-0.85],"6-100-52":[-12.52,-1.6],"6-100-53":[-17.41,-3.38],"6-100-54":[-19.91,-2],"6-100-55":[-15.87,1791.71],"6-100-56":[1558.66,2640.61],"6-100-57":[2600.88,3292.47],"6-100-58":[3117.94,3525.76],"6-100-59":[3441.92,3605.31],"6-100-60":[3363.73,3601.4],"6-100-61":[3196.66,3433.72],"6-100-62":[3070.69,3240.37],"6-100-63":[-29.54,3075.89],"6-101-0":[12.06,26.97],"6-101-1":[10.27,24.01],"5-50-0":[10.27,26.99],"6-101-2":[1.88,20.61],"6-101-3":[-0.04,776.54],"5-50-1":[-0.76,788.17],"6-101-4":[-9.34,841.94],"6-101-5":[-23.59,832.71],"5-50-2":[-23.59,864.96],"6-101-6":[-24.81,718.4],"6-101-7":[121.13,1011.68],"5-50-3":[-24.81,1011.68],"6-101-8":[224.5,929.44],"6-101-9":[162.57,836.04],"5-50-4":[114.45,958.88],"6-101-10":[-27.02,706.58],"6-101-11":[88.71,984.1],"5-50-5":[-27.02,984.1],"6-101-12":[253.55,1472.91],"6-101-13":[369.08,2280.07],"5-50-6":[253.49,3194.59],"6-101-14":[518.21,1985.15],"6-101-15":[932.38,2132.01],"5-50-7":[518.21,3379.04],"6-101-16":[778.87,2678.17],"6-101-17":[651.88,2311.12],"5-50-8":[651.88,3558.09],"6-101-18":[992.38,3502.2],"6-101-19":[629.17,4106.19],"5-50-9":[629.17,5176.87],"6-101-20":[194.36,4524.83],"6-101-21":[96.37,1942.57],"5-50-10":[96.37,7111.28],"6-101-22":[245.14,2858.21],"6-101-23":[21.03,2530.43],"5-50-11":[21.03,4334.26],"6-101-24":[-94.3,2937.63],"6-101-25":[-56.68,2686.47],"5-50-12":[-94.3,3084.02],"6-101-26":[-2.53,1984.96],"6-101-27":[-62.53,1793.02],"5-50-13":[-72.12,1984.96],"6-101-28":[-88.98,988.31],"6-101-29":[-13.69,296.81],"5-50-14":[-88.98,1503.56],"6-101-30":[-7.26,564.09],"6-101-31":[-34.24,1041.7],"5-50-15":[-117.38,2181.1],"6-101-32":[-50.63,1126.85],"6-101-33":[-55.36,2229.43],"5-50-16":[-69.41,3783.24],"6-101-34":[-36.88,2218.28],"6-101-35":[-23.97,362.89],"5-50-17":[-51.44,2218.28],"6-101-36":[-50.01,-8.05],"6-101-37":[-67.22,-17.95],"5-50-18":[-82.44,-8.05],"6-101-38":[-72.92,-27.95],"6-101-39":[-72.68,-32.21],"5-50-19":[-87.84,-27.95],"6-101-40":[-76.24,-33.32],"6-101-41":[-78.06,-36.98],"5-50-20":[-85.52,-33.32],"6-101-42":[-80.1,-38.14],"6-101-43":[-82.02,-39.33],"5-50-21":[-82.02,-35.65],"6-101-44":[-82.43,-34.06],"6-101-45":[-71.27,-28.18],"5-50-22":[-82.43,-24.76],"6-101-46":[-62.71,-21.81],"6-101-47":[-49.64,-15.77],"5-50-23":[-62.71,-11.56],"6-101-48":[-39.39,-10.57],"6-101-49":[-28.16,-7.19],"5-50-24":[-39.39,-3.51],"6-101-50":[-21.77,-4.94],"6-101-51":[-17.14,-4.86],"5-50-25":[-21.77,-0.85],"6-101-52":[-18.23,-5.13],"6-101-53":[-25.73,-6.91],"5-50-26":[-25.73,-1.6],"6-101-54":[-26.47,-8.94],"6-101-55":[-27.05,1793.86],"5-50-27":[-27.05,1793.86],"6-101-56":[1569.31,2600.89],"6-101-57":[2518.51,3117.95],"5-50-28":[1558.66,3292.47],"6-101-58":[2973.88,3441.93],"6-101-59":[3288.11,3528.69],"5-50-29":[2973.88,3605.31],"6-101-60":[3280.25,3498.6],"6-101-61":[3169.63,3363.74],"5-50-30":[3169.63,3601.4],"6-101-62":[3069.83,3196.67],"6-101-63":[-29.54,3075.29],"5-50-31":[-29.54,3240.37],"6-102-0":[12.03,26.96],"6-102-1":[10.02,23.17],"6-102-2":[1.63,20.52],"6-102-3":[-0.71,3.6],"6-102-4":[-9.34,927.44],"6-102-5":[-21.44,1119.08],"6-102-6":[-21.06,734.39],"6-102-7":[132.34,887.81],"6-102-8":[166.72,947.89],"6-102-9":[178.95,743.5],"6-102-10":[-23.46,607.14],"6-102-11":[188.2,1969.85],"6-102-12":[317.03,2509.72],"6-102-13":[401.97,1987.12],"6-102-14":[522.51,2758.43],"6-102-15":[862.62,2221.84],"6-102-16":[705.9,1397.18],"6-102-17":[902.24,2304.17],"6-102-18":[874.91,1918.57],"6-102-19":[285.5,3718.19],"6-102-20":[36.4,3019.64],"6-102-21":[48.41,2199.58],"6-102-22":[81.86,2506.96],"6-102-23":[-4.49,1720.45],"6-102-24":[-110.94,1495.1],"6-102-25":[-45.58,1791.56],"6-102-26":[-43.69,2581.3],"6-102-27":[-24.82,2426.49],"6-102-28":[-33.45,1298.21],"6-102-29":[2.64,41.22],"6-102-30":[-11.18,1014.85],"6-102-31":[-30.38,1601.85],"6-102-32":[-4.18,1034.19],"6-102-33":[5.39,373.32],"6-102-34":[-27.49,3442.9],"6-102-35":[-16.46,32.46],"6-102-36":[-35.92,-0.17],"6-102-37":[-55.89,-9.77],"6-102-38":[-63.68,-20.55],"6-102-39":[-67.07,-25.59],"6-102-40":[-74.45,-31.39],"6-102-41":[-78.87,-34.22],"6-102-42":[-80.62,-38.59],"6-102-43":[-81.5,-37.5],"6-102-44":[-81.55,-36.82],"6-102-45":[-75.32,-31.36],"6-102-46":[-66.17,-25.52],"6-102-47":[-55.15,-19.95],"6-102-48":[-45.84,-14.58],"6-102-49":[-34.14,-11.03],"6-102-50":[-27.4,-8.6],"6-102-51":[-22.98,-8.32],"6-102-52":[-24.4,-8.55],"6-102-53":[-30.23,-9.28],"6-102-54":[-36.54,-12.51],"6-102-55":[-33.13,1569.32],"6-102-56":[1087.42,2518.52],"6-102-57":[2491.99,2973.89],"6-102-58":[2898.38,3288.12],"6-102-59":[3218.55,3458.77],"6-102-60":[3217.24,3410.38],"6-102-61":[3122.29,3280.26],"6-102-62":[3068.02,3169.64],"6-102-63":[-29.54,3074.68],"6-103-0":[11.81,26.94],"6-103-1":[10.02,22.97],"5-51-0":[10.02,26.96],"6-103-2":[1.76,20.03],"6-103-3":[-4.68,2.37],"5-51-1":[-4.68,20.52],"4-25-0":[-4.68,788.17],"6-103-4":[-7.07,732.27],"6-103-5":[-18.39,1038.7],"5-51-2":[-21.44,1119.08],"6-103-6":[-8.22,689.79],"6-103-7":[42.21,820.66],"5-51-3":[-21.06,887.81],"4-25-1":[-24.81,1119.08],"3-12-0":[-24.81,1618.98],"6-103-8":[142.66,871.07],"6-103-9":[190.73,581.35],"5-51-4":[142.66,947.89],"6-103-10":[-22.83,599.15],"6-103-11":[157.28,2526.11],"5-51-5":[-23.46,2526.11],"4-25-2":[-27.02,2526.11],"6-103-12":[409.57,2781.93],"6-103-13":[538.79,2000.38],"5-51-6":[317.03,2781.93],"6-103-14":[796.86,2483.46],"6-103-15":[786,1631.54],"5-51-7":[522.51,2758.43],"4-25-3":[253.49,3379.04],"3-12-1":[-32.17,4155.27],"6-103-16":[657.03,1440.56],"6-103-17":[814.48,2312.81],"5-51-8":[657.03,2312.81],"6-103-18":[461.77,2785.32],"6-103-19":[90.97,2608.85],"5-51-9":[90.97,3718.19],"4-25-4":[90.97,5176.87],"6-103-20":[-14.6,3075.61],"6-103-21":[-41.04,2284.9],"5-51-10":[-41.04,3075.61],"6-103-22":[6.19,2090.39],"6-103-23":[-33.9,1930.57],"5-51-11":[-33.9,2506.96],"4-25-5":[-41.04,7111.28],"3-12-2":[-109,7512.84],"6-103-24":[-68.73,1683.1],"6-103-25":[-50.32,1775.49],"5-51-12":[-110.94,1791.56],"6-103-26":[-15.99,22.84],"6-103-27":[-1.31,35.12],"5-51-13":[-43.69,2581.3],"4-25-6":[-110.94,3084.02],"6-103-28":[7.05,50.12],"6-103-29":[13.68,63.16],"5-51-14":[-33.45,1298.21],"6-103-30":[17.55,93.68],"6-103-31":[-60.48,1707.53],"5-51-15":[-60.48,1707.53],"4-25-7":[-117.38,2181.1],"3-12-3":[-135.7,3433.72],"6-103-32":[-5.21,1767.47],"6-103-33":[16.48,98.63],"5-51-16":[-5.21,1767.47],"6-103-34":[-32.43,3363.43],"6-103-35":[-8.1,36.62],"5-51-17":[-32.43,3442.9],"4-25-8":[-69.41,3783.24],"6-103-36":[-20.48,14.72],"6-103-37":[-39.42,-2.58],"5-51-18":[-55.89,14.72],"6-103-38":[-48.07,-12.98],"6-103-39":[-62.92,-19.51],"5-51-19":[-67.07,-12.98],"4-25-9":[-87.84,14.72],"3-12-4":[-129.46,3783.24],"6-103-40":[-67.31,-22.53],"6-103-41":[-76.31,-23.36],"5-51-20":[-78.87,-22.53],"6-103-42":[-79.55,-31.81],"6-103-43":[-79.53,-36.31],"5-51-21":[-81.5,-31.81],"4-25-10":[-85.52,-22.53],"6-103-44":[-81.64,-36.17],"6-103-45":[-78.43,-33.2],"5-51-22":[-81.64,-31.36],"6-103-46":[-69.24,-28.58],"6-103-47":[-59.94,-23.25],"5-51-23":[-69.24,-19.95],"4-25-11":[-82.43,-11.56],"3-12-5":[-93.34,15.19],"6-103-48":[-51.3,-17.94],"6-103-49":[-40.42,-14.13],"5-51-24":[-51.3,-11.03],"6-103-50":[-34.48,-12.04],"6-103-51":[-30.95,-11.71],"5-51-25":[-34.48,-8.32],"4-25-12":[-51.3,-0.85],"6-103-52":[-31.64,-11.83],"6-103-53":[-39.3,-12.7],"5-51-26":[-39.3,-8.55],"6-103-54":[-43.14,-15.55],"6-103-55":[-38.79,1241.72],"5-51-27":[-43.14,1569.32],"4-25-13":[-43.14,1793.86],"3-12-6":[-51.3,1793.86],"6-103-56":[767.03,2536.98],"6-103-57":[2496.32,2925.63],"5-51-28":[767.03,2973.89],"6-103-58":[2895.28,3218.56],"6-103-59":[3190.5,3373.24],"5-51-29":[2895.28,3458.77],"4-25-14":[767.03,3605.31],"6-103-60":[3144.58,3368.42],"6-103-61":[3056.95,3217.25],"5-51-30":[3056.95,3410.38],"6-103-62":[3059.08,3122.3],"6-103-63":[-29.54,3072.12],"5-51-31":[-29.54,3169.64],"4-25-15":[-29.54,3601.4],"3-12-7":[-29.54,3799.9],"6-104-0":[11.39,26.93],"6-104-1":[9.9,23.02],"6-104-2":[2.36,20.31],"6-104-3":[-6,3.25],"6-104-4":[-6,82.84],"6-104-5":[-17.31,495.96],"6-104-6":[-8.77,399.1],"6-104-7":[13.61,491.06],"6-104-8":[115.43,750.89],"6-104-9":[116.1,561.53],"6-104-10":[-21.96,1677.59],"6-104-11":[150.22,2530.45],"6-104-12":[479.34,2992.37],"6-104-13":[504.85,1634.35],"6-104-14":[575.67,1654.73],"6-104-15":[617.47,1754.54],"6-104-16":[880.33,1742.15],"6-104-17":[128.34,2838.35],"6-104-18":[-3.88,3047.6],"6-104-19":[5.77,1847.96],"6-104-20":[-14.28,1280.51],"6-104-21":[-154.55,1772.77],"6-104-22":[-30.87,2103.76],"6-104-23":[-95.56,1877.29],"6-104-24":[-70.08,953.51],"6-104-25":[-6.17,27.99],"6-104-26":[3.36,44.5],"6-104-27":[10.3,55.83],"6-104-28":[17.56,73.24],"6-104-29":[25.67,79.68],"6-104-30":[10.65,2422.76],"6-104-31":[29.67,2305.23],"6-104-32":[6.49,2345.05],"6-104-33":[23.54,1325.52],"6-104-34":[-20.93,3699.18],"6-104-35":[4.34,1042.4],"6-104-36":[-2.59,22.64],"6-104-37":[-24.91,7.42],"6-104-38":[-38.06,-5.3],"6-104-39":[-58.73,307.87],"6-104-40":[-68.83,370.75],"6-104-41":[-63.64,291.1],"6-104-42":[-75.39,303.79],"6-104-43":[-77.46,189.43],"6-104-44":[-81.92,202.32],"6-104-45":[-78.44,-34.62],"6-104-46":[-69.89,-30.52],"6-104-47":[-61.52,-25.77],"6-104-48":[-54.23,-20.78],"6-104-49":[-44.26,-17.39],"6-104-50":[-39.25,-15.56],"6-104-51":[-36.43,-15.24],"6-104-52":[-37.17,-15.45],"6-104-53":[-45.54,-15.94],"6-104-54":[-46.98,-19.12],"6-104-55":[-44.18,1300.89],"6-104-56":[486.82,2508.46],"6-104-57":[2399.34,2971.73],"6-104-58":[2925.62,3190.51],"6-104-59":[3187.99,3320.02],"6-104-60":[3081.53,3317.03],"6-104-61":[2940.53,3144.59],"6-104-62":[3024.22,3080.43],"6-104-63":[-29.54,3069.68],"6-105-0":[11.09,26.9],"6-105-1":[9.45,22.95],"5-52-0":[9.45,26.93],"6-105-2":[2.76,20.29],"6-105-3":[-5.31,3.8],"5-52-1":[-6,20.31],"6-105-4":[-5.65,-0.65],"6-105-5":[-15.13,237.7],"5-52-2":[-17.31,495.96],"6-105-6":[-2.03,277.08],"6-105-7":[17.85,385.91],"5-52-3":[-8.77,491.06],"6-105-8":[110.65,448.35],"6-105-9":[56.9,380.42],"5-52-4":[56.9,750.89],"6-105-10":[-16.13,1615.07],"6-105-11":[217.51,2962.65],"5-52-5":[-21.96,2962.65],"6-105-12":[454.52,2450.24],"6-105-13":[406.43,1532.32],"5-52-6":[406.43,2992.37],"6-105-14":[432.23,1232.86],"6-105-15":[549.84,1464.19],"5-52-7":[432.23,1754.54],"6-105-16":[730.4,2060.03],"6-105-17":[-64.08,2407.63],"5-52-8":[-64.08,2838.35],"6-105-18":[-63.81,805.59],"6-105-19":[-16.17,1519.8],"5-52-9":[-63.81,3047.6],"6-105-20":[-33.57,1755.88],"6-105-21":[-69.59,1735.53],"5-52-10":[-154.55,1772.77],"6-105-22":[4.65,2160.72],"6-105-23":[-47.98,1800.52],"5-52-11":[-95.56,2160.72],"6-105-24":[1.5,35.14],"6-105-25":[6.58,52.59],"5-52-12":[-70.08,953.51],"6-105-26":[13.99,67.42],"6-105-27":[22.24,82.34],"5-52-13":[3.36,82.34],"6-105-28":[30.08,2125.15],"6-105-29":[13.27,4108.68],"5-52-14":[13.27,4108.68],"6-105-30":[17.77,2687.61],"6-105-31":[15.58,2267.3],"5-52-15":[10.65,2687.61],"6-105-32":[-40.37,1916.44],"6-105-33":[6.53,1738.04],"5-52-16":[-40.37,2345.05],"6-105-34":[14.43,3755.88],"6-105-35":[-28.54,2972.87],"5-52-17":[-28.54,3755.88],"6-105-36":[3.7,35.22],"6-105-37":[-12.09,21.02],"5-52-18":[-24.91,35.22],"6-105-38":[-24.32,2.72],"6-105-39":[-35.25,1205.98],"5-52-19":[-58.73,1205.98],"6-105-40":[29.13,1196.06],"6-105-41":[167.75,715.25],"5-52-20":[-68.83,1196.06],"6-105-42":[-14.21,662],"6-105-43":[-99.76,566.35],"5-52-21":[-99.76,662],"6-105-44":[-78.53,969.34],"6-105-45":[-78.21,-34.74],"5-52-22":[-81.92,969.34],"6-105-46":[-69.94,-30.98],"6-105-47":[-61.91,-27.2],"5-52-23":[-69.94,-25.77],"6-105-48":[-54.84,-22.89],"6-105-49":[-47.73,-19.91],"5-52-24":[-54.84,-17.39],"6-105-50":[-42.44,-18.56],"6-105-51":[-41.44,-18.27],"5-52-25":[-42.44,-15.24],"6-105-52":[-43.24,-18.39],"6-105-53":[-52.02,-19.12],"5-52-26":[-52.02,-15.45],"6-105-54":[-54.04,-21.06],"6-105-55":[-53.1,680.38],"5-52-27":[-54.04,1300.89],"6-105-56":[536.8,2408.3],"6-105-57":[2392.94,3030.32],"5-52-28":[486.82,3030.32],"6-105-58":[2971.72,3188.16],"6-105-59":[3108.98,3235.61],"5-52-29":[2925.62,3320.02],"6-105-60":[3012.27,3197.29],"6-105-61":[2926.36,3081.54],"5-52-30":[2926.36,3317.03],"6-105-62":[2976.46,3060.18],"6-105-63":[-29.54,3063.52],"5-52-31":[-29.54,3080.43],"6-106-0":[10.64,26.89],"6-106-1":[8.53,22.53],"6-106-2":[2.49,19.46],"6-106-3":[-5.7,3.75],"6-106-4":[-6.56,0.13],"6-106-5":[-15.63,39.75],"6-106-6":[-15.63,346.26],"6-106-7":[14.94,411.14],"6-106-8":[91.15,443.53],"6-106-9":[32.4,383.49],"6-106-10":[-14.77,717.41],"6-106-11":[169.48,2548.26],"6-106-12":[315.35,2226.52],"6-106-13":[309.69,1486.61],"6-106-14":[471.52,1598.44],"6-106-15":[383.84,1743.81],"6-106-16":[236.1,1936.12],"6-106-17":[-59.35,1887.25],"6-106-18":[-120.47,785.42],"6-106-19":[-39.04,1101.77],"6-106-20":[-105.16,584.53],"6-106-21":[-78.25,1795.67],"6-106-22":[-35.2,1934.56],"6-106-23":[-36.2,3691.21],"6-106-24":[-4.52,1951.28],"6-106-25":[17.56,2501.63],"6-106-26":[-6.79,2962.21],"6-106-27":[26.54,2343.09],"6-106-28":[24.22,1769.36],"6-106-29":[30.27,536.54],"6-106-30":[32.1,935.33],"6-106-31":[37.62,2935.4],"6-106-32":[39.93,3132.81],"6-106-33":[-11.89,3490.23],"6-106-34":[19.97,1959.49],"6-106-35":[5.42,2405.04],"6-106-36":[10.5,52.7],"6-106-37":[1.57,42.5],"6-106-38":[-1.29,35.06],"6-106-39":[-31.05,1152.3],"6-106-40":[340.66,1241.42],"6-106-41":[303.97,737.39],"6-106-42":[254.05,673.8],"6-106-43":[-1.49,507.31],"6-106-44":[-78.18,1063.1],"6-106-45":[-78.01,-33.81],"6-106-46":[-69.49,-30.79],"6-106-47":[-61.11,-27.35],"6-106-48":[-54.99,-24.24],"6-106-49":[-48.72,-21.27],"6-106-50":[-45.04,-20.59],"6-106-51":[-45.09,-20.39],"6-106-52":[-47.54,-20.76],"6-106-53":[-57.28,-21.9],"6-106-54":[-61.21,-25.94],"6-106-55":[-59.83,845.24],"6-106-56":[519.85,2462.74],"6-106-57":[2401.53,3046.36],"6-106-58":[3030.31,3177.4],"6-106-59":[2994.82,3172.35],"6-106-60":[2931.11,3109.06],"6-106-61":[2879.88,3012.28],"6-106-62":[2930.22,3048.31],"6-106-63":[-29.59,3060.25],"6-107-0":[10.15,26.87],"6-107-1":[8.13,21.47],"5-53-0":[8.13,26.89],"6-107-2":[2.41,16.79],"6-107-3":[-5.35,4.39],"5-53-1":[-5.7,19.46],"4-26-0":[-6,26.93],"6-107-4":[-5.79,0.24],"6-107-5":[-13.91,13.68],"5-53-2":[-15.63,39.75],"6-107-6":[-13.91,479.01],"6-107-7":[3.58,427.06],"5-53-3":[-15.63,479.01],"4-26-1":[-17.31,495.96],"6-107-8":[3.9,342.41],"6-107-9":[56.97,417.22],"5-53-4":[3.9,443.53],"6-107-10":[-10.31,1200.19],"6-107-11":[142.11,2000.95],"5-53-5":[-14.77,2548.26],"4-26-2":[-21.96,2962.65],"6-107-12":[249.54,1644.22],"6-107-13":[260.32,1523.39],"5-53-6":[249.54,2226.52],"6-107-14":[165.96,1600.44],"6-107-15":[117.12,1541.69],"5-53-7":[117.12,1743.81],"4-26-3":[117.12,2992.37],"6-107-16":[42.3,816.14],"6-107-17":[-150.51,1174.47],"5-53-8":[-150.51,1936.12],"6-107-18":[-29.13,918.27],"6-107-19":[3.79,96.9],"5-53-9":[-120.47,1101.77],"4-26-4":[-150.51,3047.6],"6-107-20":[-52.47,121.19],"6-107-21":[-35.84,1218.7],"5-53-10":[-105.16,1795.67],"6-107-22":[0.69,450.06],"6-107-23":[-53.71,3956.01],"5-53-11":[-53.71,3956.01],"4-26-5":[-154.55,3956.01],"6-107-24":[11.3,1042.66],"6-107-25":[-10.65,2731.61],"5-53-12":[-10.65,2731.61],"6-107-26":[-0.27,2712.33],"6-107-27":[-54.19,2627.63],"5-53-13":[-54.19,2962.21],"4-26-6":[-70.08,2962.21],"6-107-28":[-134.19,2528.23],"6-107-29":[21.9,2469.27],"5-53-14":[-134.19,2528.23],"6-107-30":[58.38,136.19],"6-107-31":[24.07,2286.44],"5-53-15":[24.07,2935.4],"4-26-7":[-134.19,4108.68],"6-107-32":[0.84,2955.49],"6-107-33":[28.66,2702.65],"5-53-16":[-11.89,3490.23],"6-107-34":[15.94,1676.82],"6-107-35":[5.35,2244.61],"5-53-17":[5.35,2405.04],"4-26-8":[-40.37,3755.88],"6-107-36":[21.36,72.31],"6-107-37":[-21.63,280.29],"5-53-18":[-21.63,280.29],"6-107-38":[-20.07,284.71],"6-107-39":[-14.22,553.65],"5-53-19":[-31.05,1152.3],"4-26-9":[-58.73,1205.98],"6-107-40":[235.6,710.82],"6-107-41":[292.36,692.66],"5-53-20":[235.6,1241.42],"6-107-42":[104.9,561.35],"6-107-43":[-30.26,610.87],"5-53-21":[-30.26,673.8],"4-26-10":[-99.76,1241.42],"6-107-44":[-76.09,322.34],"6-107-45":[-73.83,-32.37],"5-53-22":[-78.18,1063.1],"6-107-46":[-67.41,-29.79],"6-107-47":[-60.78,-27.09],"5-53-23":[-69.49,-27.09],"4-26-11":[-81.92,1063.1],"6-107-48":[-54.95,-24.93],"6-107-49":[-49.55,-22.67],"5-53-24":[-54.99,-21.27],"6-107-50":[-47.09,-22.05],"6-107-51":[-49,-22.03],"5-53-25":[-49,-20.39],"4-26-12":[-54.99,-15.24],"6-107-52":[-52.14,-22.78],"6-107-53":[-62.69,-24.36],"5-53-26":[-62.69,-20.76],"6-107-54":[-67.4,-28.92],"6-107-55":[-64.36,1172.91],"5-53-27":[-67.4,1172.91],"4-26-13":[-67.4,1300.89],"6-107-56":[845.23,2590.73],"6-107-57":[2462.73,3089.34],"5-53-28":[519.85,3089.34],"6-107-58":[3046.35,3196.31],"6-107-59":[2917.96,3163.37],"5-53-29":[2917.96,3196.31],"4-26-14":[486.82,3320.02],"6-107-60":[2826.82,2994.83],"6-107-61":[2826.82,2932.32],"5-53-30":[2826.82,3109.06],"6-107-62":[2871.64,3035.5],"6-107-63":[-29.58,3058.07],"5-53-31":[-29.59,3060.25],"4-26-15":[-29.59,3317.03],"6-108-0":[10.04,26.86],"6-108-1":[7.6,20.19],"6-108-2":[2.41,15.36],"6-108-3":[-5.02,4.8],"6-108-4":[-5,0.2],"6-108-5":[-10.53,23.3],"6-108-6":[-6.11,487.14],"6-108-7":[-1.85,1127.4],"6-108-8":[-14.61,1401.18],"6-108-9":[9.01,816.9],"6-108-10":[0.99,804.47],"6-108-11":[261.28,1845.92],"6-108-12":[224.24,1706.86],"6-108-13":[169.56,1269.14],"6-108-14":[159.24,878.23],"6-108-15":[100.27,339.07],"6-108-16":[60.86,1264.57],"6-108-17":[-268.7,1987.41],"6-108-18":[-101.36,1234.98],"6-108-19":[-7.79,581.2],"6-108-20":[16.92,1941.55],"6-108-21":[18.57,59.8],"6-108-22":[22.07,60.97],"6-108-23":[8,553.56],"6-108-24":[22.25,69.87],"6-108-25":[31.05,86.5],"6-108-26":[38.77,279.06],"6-108-27":[15.22,1607.31],"6-108-28":[-24.5,2547.07],"6-108-29":[21.53,3011.04],"6-108-30":[36.96,1410.92],"6-108-31":[-6.95,2053.63],"6-108-32":[33.67,1465.3],"6-108-33":[35.26,2752.59],"6-108-34":[-4.86,1869.57],"6-108-35":[7.81,2985.2],"6-108-36":[18.74,169.89],"6-108-37":[-47.89,844.91],"6-108-38":[-13.38,967.01],"6-108-39":[127.51,455.4],"6-108-40":[265.28,557.1],"6-108-41":[312.18,555.5],"6-108-42":[124.91,497.24],"6-108-43":[-59.03,276.5],"6-108-44":[-71.44,115.27],"6-108-45":[-69.83,-30.39],"6-108-46":[-64.74,-28.34],"6-108-47":[-58.68,-26.12],"6-108-48":[-54.09,-24.3],"6-108-49":[-49.45,-23.51],"6-108-50":[-48.53,-23.46],"6-108-51":[-51.56,-23.6],"6-108-52":[-55.45,-24.6],"6-108-53":[-65.39,-26.41],"6-108-54":[-71.76,-31.34],"6-108-55":[-65.99,1359.83],"6-108-56":[1164.44,2630.58],"6-108-57":[2590.72,3151.32],"6-108-58":[3089.33,3203.64],"6-108-59":[2882.88,3159.64],"6-108-60":[2697.34,2917.97],"6-108-61":[2697.34,2871.65],"6-108-62":[2844.51,3023.22],"6-108-63":[-29.54,3057.86],"6-109-0":[10.07,26.84],"6-109-1":[7.6,19.56],"5-54-0":[7.6,26.86],"6-109-2":[1.94,15.3],"6-109-3":[-4.59,4.34],"5-54-1":[-5.02,15.36],"6-109-4":[-4.59,1.33],"6-109-5":[-11.15,-0.27],"5-54-2":[-11.15,23.3],"6-109-6":[-13.23,1068.55],"6-109-7":[49.78,2201.02],"5-54-3":[-13.23,2201.02],"6-109-8":[105.58,2117.99],"6-109-9":[2.06,1848.18],"5-54-4":[-14.61,2117.99],"6-109-10":[2.81,676.85],"6-109-11":[199.21,2240.33],"5-54-5":[0.99,2240.33],"6-109-12":[203.07,2048.94],"6-109-13":[137.94,905.39],"5-54-6":[137.94,2048.94],"6-109-14":[100.62,1057.62],"6-109-15":[12.1,1445.43],"5-54-7":[12.1,1445.43],"6-109-16":[169.25,1718.97],"6-109-17":[-9.27,2763.77],"5-54-8":[-268.7,2763.77],"6-109-18":[-16.31,1727.04],"6-109-19":[-43.56,1925.58],"5-54-9":[-101.36,1925.58],"6-109-20":[-39.24,1453.61],"6-109-21":[16.04,722.76],"5-54-10":[-39.24,1941.55],"6-109-22":[13.17,672.79],"6-109-23":[24.41,69.74],"5-54-11":[8,672.79],"6-109-24":[29.92,74.99],"6-109-25":[35.9,87.33],"5-54-12":[22.25,87.33],"6-109-26":[42.78,100.04],"6-109-27":[47.35,114.52],"5-54-13":[15.22,1607.31],"6-109-28":[47.35,127.22],"6-109-29":[45.25,289.5],"5-54-14":[-24.5,3011.04],"6-109-30":[39.86,726.39],"6-109-31":[-77.81,1820.67],"5-54-15":[-77.81,2053.63],"6-109-32":[-16.98,2152.95],"6-109-33":[17.04,2555.71],"5-54-16":[-16.98,2752.59],"6-109-34":[33.44,1415.76],"6-109-35":[30.37,2395.35],"5-54-17":[-4.86,2985.2],"6-109-36":[4.41,198.32],"6-109-37":[-3.57,755.14],"5-54-18":[-47.89,844.91],"6-109-38":[123.22,1012.77],"6-109-39":[240.33,556.98],"5-54-19":[-13.38,1012.77],"6-109-40":[305.48,1049.45],"6-109-41":[288.49,1051.49],"5-54-20":[265.28,1051.49],"6-109-42":[117.95,457.28],"6-109-43":[-68.16,175.13],"5-54-21":[-68.16,497.24],"6-109-44":[-66.21,-23.79],"6-109-45":[-63.97,-28.21],"5-54-22":[-71.44,115.27],"6-109-46":[-60.3,-26.68],"6-109-47":[-55.65,-25.02],"5-54-23":[-64.74,-25.02],"6-109-48":[-52.05,-23.14],"6-109-49":[-47.99,-22.51],"5-54-24":[-54.09,-22.51],"6-109-50":[-47.82,-22.39],"6-109-51":[-52.39,-23.56],"5-54-25":[-52.39,-22.39],"6-109-52":[-58.59,-25.84],"6-109-53":[-69.44,-28.36],"5-54-26":[-69.44,-24.6],"6-109-54":[-76.93,-32.97],"6-109-55":[-75.43,1185.13],"5-54-27":[-76.93,1359.83],"6-109-56":[945.1,2622.61],"6-109-57":[2578.38,3171.09],"5-54-28":[945.1,3171.09],"6-109-58":[3008.62,3189.23],"6-109-59":[2819.28,3116.04],"5-54-29":[2819.28,3203.64],"6-109-60":[2623.1,2882.89],"6-109-61":[2629.61,2844.52],"5-54-30":[2623.1,2917.97],"6-109-62":[2805.68,3011.97],"6-109-63":[-29.54,3059.53],"5-54-31":[-29.54,3059.53],"6-110-0":[10.54,26.83],"6-110-1":[6.87,20.99],"6-110-2":[1.92,15.13],"6-110-3":[-4.55,2.92],"6-110-4":[-4.02,4.86],"6-110-5":[-10.86,-0.21],"6-110-6":[-13.9,856.13],"6-110-7":[47.14,1828.99],"6-110-8":[120.23,1922.66],"6-110-9":[31.37,2002.65],"6-110-10":[5.26,531.48],"6-110-11":[163.23,2290.58],"6-110-12":[207.26,2374.21],"6-110-13":[182.49,1509.02],"6-110-14":[66.2,1216.44],"6-110-15":[10.1,1386.01],"6-110-16":[4.32,1509.87],"6-110-17":[10.26,1774.19],"6-110-18":[-48.7,999.37],"6-110-19":[-18.69,1373.1],"6-110-20":[-17.54,1801.42],"6-110-21":[-19.03,1948.19],"6-110-22":[24,290.95],"6-110-23":[28.82,74.19],"6-110-24":[34.84,77.85],"6-110-25":[38.27,88.57],"6-110-26":[43.53,99.45],"6-110-27":[49.52,113.8],"6-110-28":[55.44,127.03],"6-110-29":[62.11,137.95],"6-110-30":[67.63,149.08],"6-110-31":[62.22,363.49],"6-110-32":[-56.46,1519.04],"6-110-33":[-10.59,3088.67],"6-110-34":[26.67,862.43],"6-110-35":[40.62,116.33],"6-110-36":[-0.62,359.52],"6-110-37":[-20.35,453.11],"6-110-38":[138.03,558.61],"6-110-39":[237.65,915.42],"6-110-40":[389.72,1429.68],"6-110-41":[289.78,1437.62],"6-110-42":[27.63,482.51],"6-110-43":[-47.6,188.18],"6-110-44":[-60.49,-16.06],"6-110-45":[-58.01,-25.18],"6-110-46":[-56.42,-23.9],"6-110-47":[-52.82,-22.85],"6-110-48":[-49.85,-21.48],"6-110-49":[-46.08,-21.12],"6-110-50":[-46.52,-21.31],"6-110-51":[-52.46,-23.05],"6-110-52":[-59.62,-26.04],"6-110-53":[-71.74,-29.78],"6-110-54":[-80.19,-34.71],"6-110-55":[-74.89,1382.72],"6-110-56":[948.42,2601.74],"6-110-57":[2573.54,3136.57],"6-110-58":[2893.92,3137.89],"6-110-59":[2675.26,3008.63],"6-110-60":[2578.01,2819.29],"6-110-61":[2594.09,2805.69],"6-110-62":[2759.42,2999.73],"6-110-63":[-29.54,3062.38],"6-111-0":[11.53,28.02],"6-111-1":[6.59,23.68],"5-55-0":[6.59,28.02],"6-111-2":[2.12,13.54],"6-111-3":[-4.24,2.58],"5-55-1":[-4.55,15.13],"4-27-0":[-5.02,28.02],"6-111-4":[-1.34,4.98],"6-111-5":[-6.9,-0.37],"5-55-2":[-10.86,4.98],"6-111-6":[-9.76,462.09],"6-111-7":[19.54,1221.31],"5-55-3":[-13.9,1828.99],"4-27-1":[-13.9,2201.02],"3-13-0":[-17.31,2201.02],"6-111-8":[105.45,1652.58],"6-111-9":[35.47,2070.51],"5-55-4":[31.37,2070.51],"6-111-10":[7.84,825.86],"6-111-11":[208.63,1856.83],"5-55-5":[5.26,2290.58],"4-27-2":[-14.61,2290.58],"6-111-12":[30.93,2358.55],"6-111-13":[242.51,2286.52],"5-55-6":[30.93,2374.21],"6-111-14":[42.21,2263.84],"6-111-15":[-27.41,1447.73],"5-55-7":[-27.41,2263.84],"4-27-3":[-27.41,2374.21],"3-13-1":[-27.41,2992.37],"2-6-0":[-32.17,4155.27],"6-111-16":[-79.7,1878.55],"6-111-17":[23.24,62.05],"5-55-8":[-79.7,1878.55],"6-111-18":[25.69,66.77],"6-111-19":[-16.84,1986.11],"5-55-9":[-48.7,1986.11],"4-27-4":[-268.7,2763.77],"6-111-20":[-0.37,1882.11],"6-111-21":[27.45,74.09],"5-55-10":[-19.03,1948.19],"6-111-22":[33.04,75.05],"6-111-23":[33.91,80.5],"5-55-11":[24,290.95],"4-27-5":[-39.24,1948.19],"3-13-2":[-268.7,3956.01],"6-111-24":[37.06,83.13],"6-111-25":[39.61,93.95],"5-55-12":[34.84,93.95],"6-111-26":[44.33,102.28],"6-111-27":[49.63,114.34],"5-55-13":[43.53,114.34],"4-27-6":[15.22,1607.31],"6-111-28":[55.18,125.8],"6-111-29":[59.47,301.73],"5-55-14":[55.18,301.73],"6-111-30":[66.39,148.84],"6-111-31":[69.38,149.75],"5-55-15":[62.22,363.49],"4-27-7":[-77.81,3011.04],"3-13-3":[-134.19,4108.68],"2-6-1":[-268.7,7512.84],"6-111-32":[15.14,3028.24],"6-111-33":[-92.74,2016.59],"5-55-16":[-92.74,3088.67],"6-111-34":[38.32,670.15],"6-111-35":[39.61,131.25],"5-55-17":[26.67,862.43],"4-27-8":[-92.74,3088.67],"6-111-36":[-50.67,610.22],"6-111-37":[37.9,457.36],"5-55-18":[-50.67,610.22],"6-111-38":[212.43,466.21],"6-111-39":[278.13,1152.22],"5-55-19":[138.03,1152.22],"4-27-9":[-50.67,1152.22],"3-13-4":[-92.74,3755.88],"6-111-40":[234.53,1528.53],"6-111-41":[101.81,1002.66],"5-55-20":[101.81,1528.53],"6-111-42":[72.04,400.15],"6-111-43":[-50.51,399.93],"5-55-21":[-50.51,482.51],"4-27-10":[-68.16,1528.53],"6-111-44":[-51.73,212.32],"6-111-45":[-50.87,-20.77],"5-55-22":[-60.49,212.32],"6-111-46":[-49.69,-20.97],"6-111-47":[-47.09,-20.45],"5-55-23":[-56.42,-20.45],"4-27-11":[-71.44,212.32],"3-13-5":[-99.76,1528.53],"2-6-2":[-129.46,3783.24],"6-111-48":[-45.23,-19.5],"6-111-49":[-42.63,-19.5],"5-55-24":[-49.85,-19.5],"6-111-50":[-45.55,-20.17],"6-111-51":[-51.95,-22.67],"5-55-25":[-52.46,-20.17],"4-27-12":[-54.09,-19.5],"6-111-52":[-60.12,-25.88],"6-111-53":[-74.09,-30.6],"5-55-26":[-74.09,-25.88],"6-111-54":[-82.21,-35.97],"6-111-55":[-78.66,1711.28],"5-55-27":[-82.21,1711.28],"4-27-13":[-82.21,1711.28],"3-13-6":[-82.21,1711.28],"6-111-56":[1382.71,2605.54],"6-111-57":[2513.78,2976.73],"5-55-28":[948.42,3136.57],"6-111-58":[2794.54,2992.85],"6-111-59":[2564.77,2893.93],"5-55-29":[2564.77,3137.89],"4-27-14":[945.1,3203.64],"6-111-60":[2500.69,2687.3],"6-111-61":[2526.81,2763.19],"5-55-30":[2500.69,2819.29],"6-111-62":[2709.28,2987.5],"6-111-63":[-29.54,3065.26],"5-55-31":[-29.54,3065.26],"4-27-15":[-29.54,3065.26],"3-13-7":[-29.59,3320.02],"2-6-3":[-82.21,3799.9],"6-112-0":[12.7,28.89],"6-112-1":[6.42,25.49],"6-112-2":[2.23,12.87],"6-112-3":[-4.13,4.1],"6-112-4":[-0.69,55.51],"6-112-5":[-5.99,225.27],"6-112-6":[-8.16,496.12],"6-112-7":[13.72,1767.28],"6-112-8":[107.91,1681.65],"6-112-9":[91.8,1766.67],"6-112-10":[12.16,1755.07],"6-112-11":[24.97,1915.02],"6-112-12":[3.84,2099.48],"6-112-13":[23.28,2155.76],"6-112-14":[6.54,1965.97],"6-112-15":[15.76,2024.26],"6-112-16":[12.72,1410.98],"6-112-17":[25.6,66.52],"6-112-18":[-24.3,3037.73],"6-112-19":[-29.59,3225.44],"6-112-20":[16.39,1148.96],"6-112-21":[35.65,80.83],"6-112-22":[36.81,83.26],"6-112-23":[36.79,87.96],"6-112-24":[39.76,92.17],"6-112-25":[41.96,97.91],"6-112-26":[46.97,104.85],"6-112-27":[51.71,114.88],"6-112-28":[56.92,128.34],"6-112-29":[57.72,134.69],"6-112-30":[65.91,141.57],"6-112-31":[67.63,143.17],"6-112-32":[6.63,1532.53],"6-112-33":[44.6,4900.75],"6-112-34":[45.11,141.56],"6-112-35":[56.19,138.86],"6-112-36":[28.28,417.68],"6-112-37":[-0.95,370.77],"6-112-38":[108.64,478.74],"6-112-39":[201.08,643.8],"6-112-40":[73.33,1103.75],"6-112-41":[-45.74,301.67],"6-112-42":[-38.95,426.73],"6-112-43":[-35.05,487.73],"6-112-44":[-41.29,417.28],"6-112-45":[-43.35,-6.75],"6-112-46":[-43.03,-16.66],"6-112-47":[-41.89,-17.81],"6-112-48":[-40.82,-17.53],"6-112-49":[-40.23,-17.58],"6-112-50":[-44.52,-18.84],"6-112-51":[-52.08,-21.66],"6-112-52":[-60.31,-25.8],"6-112-53":[-75.15,-30.77],"6-112-54":[-83.59,-37.04],"6-112-55":[-84.73,1701.91],"6-112-56":[1598.15,2525.84],"6-112-57":[2453.63,2840.96],"6-112-58":[2629.4,2867.37],"6-112-59":[2498.34,2794.55],"6-112-60":[2390.04,2564.78],"6-112-61":[2390.04,2709.29],"6-112-62":[2666.35,2977.76],"6-112-63":[-29.54,3068.14],"6-113-0":[13.21,29.53],"6-113-1":[6.55,26.2],"5-56-0":[6.42,29.53],"6-113-2":[2.65,15.62],"6-113-3":[-3.24,6.86],"5-56-1":[-4.13,15.62],"6-113-4":[0.26,195.82],"6-113-5":[-4.34,347.8],"5-56-2":[-5.99,347.8],"6-113-6":[-5.98,370.97],"6-113-7":[44.86,2177.91],"5-56-3":[-8.16,2177.91],"6-113-8":[234.82,2476.55],"6-113-9":[401.32,2650.27],"5-56-4":[91.8,2650.27],"6-113-10":[23.8,2153.15],"6-113-11":[-0.3,1760.98],"5-56-5":[-0.3,2153.15],"6-113-12":[-14.43,1103.01],"6-113-13":[1.7,1633.71],"5-56-6":[-14.43,2155.76],"6-113-14":[6.02,2108.2],"6-113-15":[5.38,1700.99],"5-56-7":[5.38,2108.2],"6-113-16":[25.39,1549.63],"6-113-17":[-8.62,1641.19],"5-56-8":[-8.62,1641.19],"6-113-18":[-22.8,2604.93],"6-113-19":[-48.47,3800.26],"5-56-9":[-48.47,3800.26],"6-113-20":[33.11,892.01],"6-113-21":[38.38,417.51],"5-56-10":[16.39,1148.96],"6-113-22":[40.6,91.39],"6-113-23":[42.43,95.06],"5-56-11":[36.79,95.06],"6-113-24":[44.58,97.8],"6-113-25":[46.59,101.92],"5-56-12":[39.76,101.92],"6-113-26":[49.34,105.97],"6-113-27":[48.14,115.83],"5-56-13":[46.97,115.83],"6-113-28":[47.63,237.05],"6-113-29":[57.2,131.84],"5-56-14":[47.63,237.05],"6-113-30":[64.56,137.12],"6-113-31":[68.18,144.76],"5-56-15":[64.56,144.76],"6-113-32":[42.04,2301.21],"6-113-33":[54.12,5227.39],"5-56-16":[6.63,5227.39],"6-113-34":[38.04,203.53],"6-113-35":[58.85,141.09],"5-56-17":[38.04,203.53],"6-113-36":[54.67,131.12],"6-113-37":[-15.46,223.46],"5-56-18":[-15.46,417.68],"6-113-38":[7.1,475.97],"6-113-39":[134.5,657.09],"5-56-19":[7.1,657.09],"6-113-40":[48.52,421.94],"6-113-41":[-34.6,242.02],"5-56-20":[-45.74,1103.75],"6-113-42":[-55.11,1079.1],"6-113-43":[-15.57,1164.85],"5-56-21":[-55.11,1164.85],"6-113-44":[-38.17,716.99],"6-113-45":[-33.33,267.94],"5-56-22":[-43.35,716.99],"6-113-46":[-34.86,-12.78],"6-113-47":[-35.43,-15.73],"5-56-23":[-43.03,-12.78],"6-113-48":[-35.41,-16.8],"6-113-49":[-37.65,-17.05],"5-56-24":[-40.82,-16.8],"6-113-50":[-42.35,-18.33],"6-113-51":[-51.23,-20.46],"5-56-25":[-52.08,-18.33],"6-113-52":[-59.96,-25.01],"6-113-53":[-76.66,-30.45],"5-56-26":[-76.66,-25.01],"6-113-54":[-85.09,-37.69],"6-113-55":[-88.87,1616.15],"5-56-27":[-88.87,1701.91],"6-113-56":[1284.64,2522.11],"6-113-57":[2297.97,2629.41],"5-56-28":[1284.64,2840.96],"6-113-58":[2577.31,2726.71],"6-113-59":[2407.17,2693.87],"5-56-29":[2407.17,2867.37],"6-113-60":[2235.7,2498.35],"6-113-61":[2303.19,2666.36],"5-56-30":[2235.7,2709.29],"6-113-62":[2636.28,2970.03],"6-113-63":[-29.54,3070.04],"5-56-31":[-29.54,3070.04],"6-114-0":[13.2,29.62],"6-114-1":[8.14,26.14],"6-114-2":[3.61,17.19],"6-114-3":[0.69,7.07],"6-114-4":[0.49,25.1],"6-114-5":[-2,264.4],"6-114-6":[-2.41,486.19],"6-114-7":[19.72,1696.85],"6-114-8":[77.22,2512.73],"6-114-9":[497.57,2822.43],"6-114-10":[9.71,2513.43],"6-114-11":[10.97,1227.42],"6-114-12":[11.66,627.07],"6-114-13":[3.09,1624.43],"6-114-14":[7.46,1440.11],"6-114-15":[-16.78,1737.87],"6-114-16":[-15.87,2312.97],"6-114-17":[-84.13,2061.69],"6-114-18":[-17.62,1666.14],"6-114-19":[-16.18,124.82],"6-114-20":[11.53,77.38],"6-114-21":[17.61,96.43],"6-114-22":[9.96,768.11],"6-114-23":[28.86,604.84],"6-114-24":[41.43,100.45],"6-114-25":[48.83,105.19],"6-114-26":[50.73,109.47],"6-114-27":[34.45,109.76],"6-114-28":[34.45,123],"6-114-29":[59.18,129.68],"6-114-30":[63.45,136.26],"6-114-31":[66.37,144.7],"6-114-32":[64.3,1467.8],"6-114-33":[33.02,4032.23],"6-114-34":[24.72,3694.06],"6-114-35":[31.23,439.48],"6-114-36":[-3.39,882.4],"6-114-37":[7.79,520.58],"6-114-38":[-0.72,739.41],"6-114-39":[40.06,660.81],"6-114-40":[66.17,435.75],"6-114-41":[40.88,374.96],"6-114-42":[42.73,458.66],"6-114-43":[12.46,485.33],"6-114-44":[-17.44,336.86],"6-114-45":[-41.04,1170.09],"6-114-46":[-31.63,-2.93],"6-114-47":[-33.62,-14.07],"6-114-48":[-34.78,-15.38],"6-114-49":[-37.5,-16.54],"6-114-50":[-40.37,-17.47],"6-114-51":[-49.64,-19.17],"6-114-52":[-59.34,-23.21],"6-114-53":[-75.38,-29.25],"6-114-54":[-88.58,-36.54],"6-114-55":[-89.56,1284.65],"6-114-56":[522.14,2298.07],"6-114-57":[2001.43,2577.32],"6-114-58":[2428.59,2638.08],"6-114-59":[2355.27,2612.99],"6-114-60":[2205.2,2407.18],"6-114-61":[2221.1,2636.29],"6-114-62":[2602.74,2964.79],"6-114-63":[-29.54,3070.97],"6-115-0":[12.07,29.55],"6-115-1":[8.62,24.47],"5-57-0":[8.14,29.62],"6-115-2":[2.39,17.3],"6-115-3":[1.82,6.24],"5-57-1":[0.69,17.3],"4-28-0":[-4.13,29.62],"6-115-4":[0.8,5.87],"6-115-5":[-0.82,73.43],"5-57-2":[-2,264.4],"6-115-6":[-0.82,115.08],"6-115-7":[1.77,672.76],"5-57-3":[-2.41,1696.85],"4-28-1":[-8.16,2177.91],"6-115-8":[49.51,2830.65],"6-115-9":[503.96,2291.47],"5-57-4":[49.51,2830.65],"6-115-10":[9.12,2265.18],"6-115-11":[12.44,34.94],"5-57-5":[9.12,2513.43],"4-28-2":[-0.3,2830.65],"6-115-12":[15.26,35.92],"6-115-13":[10.83,820.94],"5-57-6":[3.09,1624.43],"6-115-14":[14.24,1183.3],"6-115-15":[9.98,553.47],"5-57-7":[-16.78,1737.87],"4-28-3":[-16.78,2155.76],"6-115-16":[9.03,1740.56],"6-115-17":[8.77,43.6],"5-57-8":[-84.13,2312.97],"6-115-18":[14.8,45.02],"6-115-19":[16.45,54.08],"5-57-9":[-17.62,1666.14],"4-28-4":[-84.13,3800.26],"6-115-20":[24.53,58.31],"6-115-21":[25.92,65.71],"5-57-10":[11.53,96.43],"6-115-22":[27.14,79.03],"6-115-23":[25.23,82.85],"5-57-11":[9.96,768.11],"4-28-5":[9.96,1148.96],"6-115-24":[19.75,904.42],"6-115-25":[34.27,1005.01],"5-57-12":[19.75,1005.01],"6-115-26":[39.75,844.84],"6-115-27":[31.11,457.05],"5-57-13":[31.11,844.84],"4-28-6":[19.75,1005.01],"6-115-28":[39.7,118.49],"6-115-29":[57.52,126.91],"5-57-14":[34.45,129.68],"6-115-30":[61.37,131.2],"6-115-31":[64.24,143.3],"5-57-15":[61.37,144.7],"4-28-7":[34.45,237.05],"6-115-32":[67.54,296.18],"6-115-33":[36.6,3477.99],"5-57-16":[33.02,4032.23],"6-115-34":[32.51,4553.66],"6-115-35":[36.3,265.77],"5-57-17":[24.72,4553.66],"4-28-8":[6.63,5227.39],"6-115-36":[59.75,573.48],"6-115-37":[29.75,1449.42],"5-57-18":[-3.39,1449.42],"6-115-38":[28.52,1670.14],"6-115-39":[244.17,1064.78],"5-57-19":[-0.72,1670.14],"4-28-9":[-15.46,1670.14],"6-115-40":[176.38,727.4],"6-115-41":[119.67,517.69],"5-57-20":[40.88,727.4],"6-115-42":[67.33,518.96],"6-115-43":[59.37,560.11],"5-57-21":[12.46,560.11],"4-28-10":[-55.11,1164.85],"6-115-44":[34.38,521.33],"6-115-45":[-56.77,1522.55],"5-57-22":[-56.77,1522.55],"6-115-46":[-46.81,1610.49],"6-115-47":[-195.28,1424.55],"5-57-23":[-195.28,1610.49],"4-28-11":[-195.28,1610.49],"6-115-48":[-32.35,-13.51],"6-115-49":[-36.1,-15.23],"5-57-24":[-37.5,-13.51],"6-115-50":[-39.15,-17.16],"6-115-51":[-46.49,-18.91],"5-57-25":[-49.64,-17.16],"4-28-12":[-52.08,-13.51],"6-115-52":[-56.64,-22.55],"6-115-53":[-73,-28.38],"5-57-26":[-75.38,-22.55],"6-115-54":[-88.66,-36.23],"6-115-55":[-97.84,759.79],"5-57-27":[-97.84,1284.65],"4-28-13":[-97.84,1701.91],"6-115-56":[-97.84,2001.44],"6-115-57":[1792.1,2428.6],"5-57-28":[-97.84,2577.32],"6-115-58":[2305.92,2560],"6-115-59":[2344.15,2552.69],"5-57-29":[2305.92,2638.08],"4-28-14":[-97.84,2867.37],"6-115-60":[2100.93,2355.28],"6-115-61":[2117.14,2602.75],"5-57-30":[2100.93,2636.29],"6-115-62":[2569.81,2959.59],"6-115-63":[-29.54,3076],"5-57-31":[-29.54,3076],"4-28-15":[-29.54,3076],"6-116-0":[10.66,29.12],"6-116-1":[7.22,22.06],"6-116-2":[2.25,16.65],"6-116-3":[1.8,6.88],"6-116-4":[1.2,361.97],"6-116-5":[-0.57,89.29],"6-116-6":[-0.78,341.42],"6-116-7":[1.77,925.79],"6-116-8":[39.12,2260.37],"6-116-9":[440.9,2390.56],"6-116-10":[-3.36,1856.79],"6-116-11":[13.8,37.51],"6-116-12":[16.01,37.9],"6-116-13":[16.01,37.4],"6-116-14":[18.59,40.87],"6-116-15":[10.25,1590.34],"6-116-16":[-1.61,1786.57],"6-116-17":[8.34,43.6],"6-116-18":[15.48,44.53],"6-116-19":[15.73,47.62],"6-116-20":[16.81,51.48],"6-116-21":[19.43,63.16],"6-116-22":[23.95,70.37],"6-116-23":[29.01,74.37],"6-116-24":[26.61,82.69],"6-116-25":[30.18,93.33],"6-116-26":[30.98,99.51],"6-116-27":[30.96,99.08],"6-116-28":[45.57,117.31],"6-116-29":[55.18,122.74],"6-116-30":[58.42,127.66],"6-116-31":[60.62,135.09],"6-116-32":[62.05,783.66],"6-116-33":[65.85,1907.63],"6-116-34":[31.24,4188.78],"6-116-35":[53.93,4099.51],"6-116-36":[62.28,139.92],"6-116-37":[59.3,129.47],"6-116-38":[36.96,1285.71],"6-116-39":[26.9,1325.23],"6-116-40":[126.78,1296.76],"6-116-41":[189.96,988.43],"6-116-42":[97.05,430.67],"6-116-43":[131.13,1421.13],"6-116-44":[85.41,2241.03],"6-116-45":[-70.56,1999.21],"6-116-46":[-19.93,1568.36],"6-116-47":[-160.77,1420.87],"6-116-48":[-29.69,-12.33],"6-116-49":[-36.45,-13.09],"6-116-50":[-40.73,-17.24],"6-116-51":[-47.3,-19.53],"6-116-52":[-54.93,-22.38],"6-116-53":[-72.48,-27.53],"6-116-54":[-87.53,-35.51],"6-116-55":[-101.33,-44.71],"6-116-56":[-102.54,1792.11],"6-116-57":[1600.89,2338.91],"6-116-58":[2295.63,2481.09],"6-116-59":[2291.17,2481.96],"6-116-60":[1899.8,2344.16],"6-116-61":[1943.7,2569.82],"6-116-62":[2529.66,2955.42],"6-116-63":[-29.54,3081.95],"6-117-0":[9.48,28.14],"6-117-1":[6.76,18.88],"5-58-0":[6.76,29.12],"6-117-2":[2.28,14.99],"6-117-3":[1.62,7.39],"5-58-1":[1.62,16.65],"6-117-4":[1.48,155.99],"6-117-5":[0.48,58.1],"5-58-2":[-0.57,361.97],"6-117-6":[0.39,341.42],"6-117-7":[3.51,692.04],"5-58-3":[-0.78,925.79],"6-117-8":[22.34,2175.65],"6-117-9":[114.09,2203.44],"5-58-4":[22.34,2390.56],"6-117-10":[5.55,2094.72],"6-117-11":[-0.47,1541.51],"5-58-5":[-3.36,2094.72],"6-117-12":[17.95,39.7],"6-117-13":[17.96,40.77],"5-58-6":[16.01,40.77],"6-117-14":[18.87,43.2],"6-117-15":[-7.87,1533.21],"5-58-7":[-7.87,1590.34],"6-117-16":[-7.88,45.41],"6-117-17":[12.99,36.86],"5-58-8":[-7.88,1786.57],"6-117-18":[10.18,34.61],"6-117-19":[10.18,33.01],"5-58-9":[10.18,47.62],"6-117-20":[12.59,37.84],"6-117-21":[14.56,46.1],"5-58-10":[12.59,63.16],"6-117-22":[19.38,56.88],"6-117-23":[25.61,72.87],"5-58-11":[19.38,74.37],"6-117-24":[31.14,82.56],"6-117-25":[36.51,88.5],"5-58-12":[26.61,93.33],"6-117-26":[38.76,89.46],"6-117-27":[39.86,92.44],"5-58-13":[30.96,99.51],"6-117-28":[41.99,110.83],"6-117-29":[35.45,503.73],"5-58-14":[35.45,503.73],"6-117-30":[53.07,118.8],"6-117-31":[54.68,129.03],"5-58-15":[53.07,135.09],"6-117-32":[53.24,964.38],"6-117-33":[57.1,2427.64],"5-58-16":[53.24,2427.64],"6-117-34":[58.87,2022.98],"6-117-35":[-78.97,3071.93],"5-58-17":[-78.97,4188.78],"6-117-36":[62.08,143.56],"6-117-37":[61.21,128.82],"5-58-18":[59.3,143.56],"6-117-38":[57.56,126.23],"6-117-39":[30.2,869.8],"5-58-19":[26.9,1325.23],"6-117-40":[0.01,1008.41],"6-117-41":[75.28,1199.98],"5-58-20":[0.01,1296.76],"6-117-42":[145.68,1550.43],"6-117-43":[-25.52,1629.02],"5-58-21":[-25.52,1629.02],"6-117-44":[-80.43,1622.97],"6-117-45":[-23.03,1262.52],"5-58-22":[-80.43,2241.03],"6-117-46":[-14.62,1.67],"6-117-47":[-24.71,-5.89],"5-58-23":[-160.77,1568.36],"6-117-48":[-29.37,-11.35],"6-117-49":[-35.65,-13.2],"5-58-24":[-36.45,-11.35],"6-117-50":[-40.45,-17.24],"6-117-51":[-48.21,-20.04],"5-58-25":[-48.21,-17.24],"6-117-52":[-53.69,-23.2],"6-117-53":[-71.28,-27.26],"5-58-26":[-72.48,-22.38],"6-117-54":[-86.62,-34.15],"6-117-55":[-101.99,-43.8],"5-58-27":[-101.99,-34.15],"6-117-56":[-106.25,1600.9],"6-117-57":[1442.23,2342.57],"5-58-28":[-106.25,2342.57],"6-117-58":[2216.37,2456.95],"6-117-59":[2218.72,2466.51],"5-58-29":[2216.37,2481.96],"6-117-60":[1411.35,2291.18],"6-117-61":[1690.08,2529.67],"5-58-30":[1411.35,2569.82],"6-117-62":[2447.36,2953.28],"6-117-63":[-29.54,3084.91],"5-58-31":[-29.54,3084.91],"6-118-0":[8.81,27.71],"6-118-1":[6.64,17.18],"6-118-2":[1.82,14.17],"6-118-3":[1.29,7.13],"6-118-4":[1.8,112.12],"6-118-5":[0.82,6.14],"6-118-6":[0.71,75.94],"6-118-7":[3.53,559.13],"6-118-8":[15.46,1102.21],"6-118-9":[92.72,1636.07],"6-118-10":[2.35,1813.48],"6-118-11":[1.21,1062.27],"6-118-12":[17.21,43.51],"6-118-13":[19.63,45.98],"6-118-14":[0.73,1460.13],"6-118-15":[-7.91,1395.62],"6-118-16":[-7.92,30.44],"6-118-17":[6.23,30.2],"6-118-18":[4.7,24.25],"6-118-19":[4.92,23.71],"6-118-20":[6.29,28.34],"6-118-21":[10.46,37.16],"6-118-22":[12.98,50.32],"6-118-23":[19.09,62.28],"6-118-24":[25.96,72.19],"6-118-25":[29.55,81.26],"6-118-26":[33.77,84.41],"6-118-27":[35.3,83.99],"6-118-28":[39.24,102.12],"6-118-29":[44.51,337.7],"6-118-30":[50.71,111.44],"6-118-31":[54.6,118.9],"6-118-32":[58.04,435.72],"6-118-33":[2.74,2388.16],"6-118-34":[53.28,143.46],"6-118-35":[58.58,1094.58],"6-118-36":[60.49,866.24],"6-118-37":[60.7,127.95],"6-118-38":[55.23,126.07],"6-118-39":[48.72,114.91],"6-118-40":[16.01,468.23],"6-118-41":[-7.43,1263.13],"6-118-42":[3.55,1616.85],"6-118-43":[-3.46,1396.93],"6-118-44":[7.57,40.32],"6-118-45":[0.66,22.42],"6-118-46":[-11.28,6.94],"6-118-47":[-22.43,-3.98],"6-118-48":[-29.37,-9.38],"6-118-49":[-35.15,-14.48],"6-118-50":[-40.65,-17.23],"6-118-51":[-48.88,-20.43],"6-118-52":[-56.68,-24.15],"6-118-53":[-69.25,-27.35],"6-118-54":[-85.12,-33.76],"6-118-55":[-101.8,-42.74],"6-118-56":[-107,1522.76],"6-118-57":[1441.77,2294.89],"6-118-58":[1910.74,2319.46],"6-118-59":[1821.95,2399.61],"6-118-60":[803.63,2218.73],"6-118-61":[1627.45,2447.37],"6-118-62":[2363.53,2959.26],"6-118-63":[-29.54,3089.37],"6-119-0":[8.67,27.14],"6-119-1":[6.4,16.74],"5-59-0":[6.4,27.71],"6-119-2":[1.77,13.16],"6-119-3":[1.21,7.08],"5-59-1":[1.21,14.17],"4-29-0":[1.21,29.12],"6-119-4":[2.01,7.08],"6-119-5":[0.49,6.94],"5-59-2":[0.49,112.12],"6-119-6":[1.29,81.65],"6-119-7":[3.24,433.72],"5-59-3":[0.71,559.13],"4-29-1":[-0.78,925.79],"3-14-0":[-8.16,2177.91],"6-119-8":[15.62,1098.37],"6-119-9":[80.42,1766.68],"5-59-4":[15.46,1766.68],"6-119-10":[-12.75,1878.57],"6-119-11":[15.7,935.54],"5-59-5":[-12.75,1878.57],"4-29-2":[-12.75,2390.56],"6-119-12":[13.95,2005.12],"6-119-13":[17.08,2477.12],"5-59-6":[13.95,2477.12],"6-119-14":[1.03,1817.92],"6-119-15":[3.25,33.35],"5-59-7":[-7.91,1817.92],"4-29-3":[-7.91,2477.12],"3-14-1":[-16.78,2830.65],"6-119-16":[4.27,23.39],"6-119-17":[1.7,17.38],"5-59-8":[-7.92,30.44],"6-119-18":[0.23,11.21],"6-119-19":[1.53,11.2],"5-59-9":[0.23,24.25],"4-29-4":[-7.92,1786.57],"6-119-20":[4.13,19.59],"6-119-21":[6.49,25.03],"5-59-10":[4.13,37.16],"6-119-22":[9,34.94],"6-119-23":[13.7,51.55],"5-59-11":[9,62.28],"4-29-5":[4.13,74.37],"3-14-2":[-84.13,3800.26],"6-119-24":[20.27,58.63],"6-119-25":[26.32,64.62],"5-59-12":[20.27,81.26],"6-119-26":[29.21,76.13],"6-119-27":[31.51,78.92],"5-59-13":[29.21,84.41],"4-29-6":[20.27,99.51],"6-119-28":[34.89,91.62],"6-119-29":[42.31,102.14],"5-59-14":[34.89,337.7],"6-119-30":[49.88,110.56],"6-119-31":[51.58,118.67],"5-59-15":[49.88,118.9],"4-29-7":[34.89,503.73],"3-14-3":[19.75,1005.01],"6-119-32":[55.15,126.21],"6-119-33":[55.72,960.88],"5-59-16":[2.74,2388.16],"6-119-34":[6.18,2782.57],"6-119-35":[49.89,1115.42],"5-59-17":[6.18,2782.57],"4-29-8":[-78.97,4188.78],"6-119-36":[63.79,138.91],"6-119-37":[60.58,131.76],"5-59-18":[60.49,866.24],"6-119-38":[55.49,123.47],"6-119-39":[49.44,110.92],"5-59-19":[48.72,126.07],"4-29-9":[26.9,1325.23],"3-14-4":[-78.97,5227.39],"6-119-40":[40.76,99.59],"6-119-41":[33.8,84.71],"5-59-20":[-7.43,1263.13],"6-119-42":[26.01,74.04],"6-119-43":[18.31,59.16],"5-59-21":[-3.46,1616.85],"4-29-10":[-25.52,1629.02],"6-119-44":[11.24,40.96],"6-119-45":[3.47,25.39],"5-59-22":[0.66,40.96],"6-119-46":[-5.63,10.69],"6-119-47":[-18.52,-2.2],"5-59-23":[-22.43,10.69],"4-29-11":[-160.77,2241.03],"3-14-5":[-195.28,2241.03],"6-119-48":[-27.89,-8.1],"6-119-49":[-34.87,-13.33],"5-59-24":[-35.15,-8.1],"6-119-50":[-42.15,-16.71],"6-119-51":[-55.48,-20.53],"5-59-25":[-55.48,-16.71],"4-29-12":[-55.48,-8.1],"6-119-52":[-67.25,-24.47],"6-119-53":[-69.99,-28.77],"5-59-26":[-69.99,-24.15],"6-119-54":[-84.63,-34.47],"6-119-55":[-101.06,-42.64],"5-59-27":[-101.8,-33.76],"4-29-13":[-101.99,-22.38],"3-14-6":[-101.99,1701.91],"6-119-56":[-106.67,1594.21],"6-119-57":[1522.75,2260.16],"5-59-28":[-107,2294.89],"6-119-58":[1520.8,2260.16],"6-119-59":[1378.35,2352.82],"5-59-29":[1378.35,2399.61],"4-29-14":[-107,2481.96],"6-119-60":[115.06,3169.82],"6-119-61":[1392.87,2470.74],"5-59-30":[115.06,3169.82],"6-119-62":[2356.79,2967.24],"6-119-63":[-29.54,3091.37],"5-59-31":[-29.54,3091.37],"4-29-15":[-29.54,3169.82],"3-14-7":[-107,3169.82],"6-120-0":[8.69,26.75],"6-120-1":[5.52,17.4],"6-120-2":[1.82,12.04],"6-120-3":[0.59,7.08],"6-120-4":[2.09,7.08],"6-120-5":[0.74,5.17],"6-120-6":[1.05,56.9],"6-120-7":[2.85,903.95],"6-120-8":[56.39,1454.04],"6-120-9":[12.61,1757.61],"6-120-10":[12.59,947.68],"6-120-11":[15.29,2605.13],"6-120-12":[7.08,3631.59],"6-120-13":[-0.7,3468.03],"6-120-14":[1.4,40.12],"6-120-15":[4.12,24.95],"6-120-16":[-0.27,17.95],"6-120-17":[-4.97,7.43],"6-120-18":[-6.56,3],"6-120-19":[-3.98,7.47],"6-120-20":[-0.58,12.98],"6-120-21":[2.19,17.28],"6-120-22":[4.58,25.53],"6-120-23":[8.89,39.89],"6-120-24":[15.15,49.5],"6-120-25":[21.3,58.42],"6-120-26":[25.24,62.27],"6-120-27":[28.53,69.78],"6-120-28":[32.36,84.63],"6-120-29":[37.3,831.89],"6-120-30":[42.45,102.95],"6-120-31":[46.51,110.31],"6-120-32":[48.73,118.16],"6-120-33":[52.39,128.82],"6-120-34":[36.32,1251.14],"6-120-35":[16.84,2387.59],"6-120-36":[45.89,264.39],"6-120-37":[59.17,130.22],"6-120-38":[55.65,121.69],"6-120-39":[49.17,115.94],"6-120-40":[42.96,105.9],"6-120-41":[35.4,90.52],"6-120-42":[28.58,74.62],"6-120-43":[8.57,495.66],"6-120-44":[12.8,48.16],"6-120-45":[5.96,25.68],"6-120-46":[-2.48,12.37],"6-120-47":[-16.47,-0.49],"6-120-48":[-25.27,-6.4],"6-120-49":[-33.37,-10.64],"6-120-50":[-42.5,-14.52],"6-120-51":[-55.8,383.74],"6-120-52":[-67.98,-26.3],"6-120-53":[-72.63,-30.51],"6-120-54":[-84.73,-34.99],"6-120-55":[-104.1,-43.28],"6-120-56":[-112.02,1627.11],"6-120-57":[475.75,2656.26],"6-120-58":[867.53,2268.9],"6-120-59":[1045.7,2732.99],"6-120-60":[-105.78,3191.81],"6-120-61":[347.55,2726.57],"6-120-62":[2344.78,2977.2],"6-120-63":[-29.54,3090.38],"6-121-0":[8.97,26.75],"6-121-1":[5.52,18.2],"5-60-0":[5.52,26.75],"6-121-2":[1.99,11],"6-121-3":[0.42,4.82],"5-60-1":[0.42,12.04],"6-121-4":[2.25,7.43],"6-121-5":[0.71,4.93],"5-60-2":[0.71,7.43],"6-121-6":[1.29,271.44],"6-121-7":[2.85,1052.69],"5-60-3":[1.05,1052.69],"6-121-8":[37.86,1653.57],"6-121-9":[11.56,1415.31],"5-60-4":[11.56,1757.61],"6-121-10":[10.82,1872.79],"6-121-11":[9.11,3277.23],"5-60-5":[9.11,3277.23],"6-121-12":[-5.06,4774.23],"6-121-13":[-5.97,28.14],"5-60-6":[-5.97,4774.23],"6-121-14":[3.79,18.42],"6-121-15":[-1.09,16.76],"5-60-7":[-1.09,40.12],"6-121-16":[-7.93,7.27],"6-121-17":[-11.57,-0.26],"5-60-8":[-11.57,17.95],"6-121-18":[-11.9,-2.7],"6-121-19":[-13.5,-0.57],"5-60-9":[-13.5,7.47],"6-121-20":[-13.4,2.2],"6-121-21":[-4.89,8.56],"5-60-10":[-13.4,17.28],"6-121-22":[1.31,15.96],"6-121-23":[6.08,30.18],"5-60-11":[1.31,39.89],"6-121-24":[11.75,45.27],"6-121-25":[17.54,49.7],"5-60-12":[11.75,58.42],"6-121-26":[24.65,60.14],"6-121-27":[25.47,66.56],"5-60-13":[24.65,69.78],"6-121-28":[28.73,75.09],"6-121-29":[32.36,84.91],"5-60-14":[28.73,831.89],"6-121-30":[37.91,673.97],"6-121-31":[41.13,96.35],"5-60-15":[37.91,673.97],"6-121-32":[43.4,101.5],"6-121-33":[46.93,118.89],"5-60-16":[43.4,128.82],"6-121-34":[49.6,839.37],"6-121-35":[9.56,1980.07],"5-60-17":[9.56,2387.59],"6-121-36":[44.87,241.22],"6-121-37":[58.56,129.2],"5-60-18":[44.87,264.39],"6-121-38":[56.18,122.21],"6-121-39":[50.7,116.7],"5-60-19":[49.17,122.21],"6-121-40":[45.59,106.12],"6-121-41":[37.73,94.44],"5-60-20":[35.4,106.12],"6-121-42":[32.38,82.35],"6-121-43":[24.79,66.27],"5-60-21":[8.57,495.66],"6-121-44":[14.55,55.75],"6-121-45":[6.51,35.28],"5-60-22":[5.96,55.75],"6-121-46":[-0.5,21.22],"6-121-47":[-12.26,3.98],"5-60-23":[-16.47,21.22],"6-121-48":[-19.81,-3.49],"6-121-49":[-29.02,-8.06],"5-60-24":[-33.37,-3.49],"6-121-50":[-41.05,-10.84],"6-121-51":[-63.16,-19.98],"5-60-25":[-63.16,383.74],"6-121-52":[-72.98,-28.17],"6-121-53":[-77.22,-33.82],"5-60-26":[-77.22,-26.3],"6-121-54":[-88.46,-36.59],"6-121-55":[-106.46,1402.86],"5-60-27":[-106.46,1402.86],"6-121-56":[-114.63,475.76],"6-121-57":[-117.59,2620.78],"5-60-28":[-117.59,2656.26],"6-121-58":[-116.47,3433.82],"6-121-59":[-115.52,3317.92],"5-60-29":[-116.47,3433.82],"6-121-60":[-115.69,2320.2],"6-121-61":[-91.83,4077.78],"5-60-30":[-115.69,4077.78],"6-121-62":[1924.9,2984.14],"6-121-63":[-29.54,3088.17],"5-60-31":[-29.54,3090.38],"6-122-0":[9.42,26.76],"6-122-1":[5.65,18.59],"6-122-2":[2.49,11.4],"6-122-3":[0.26,4.81],"6-122-4":[1.95,7.47],"6-122-5":[0.77,4.8],"6-122-6":[1.14,7.62],"6-122-7":[3.84,1528.57],"6-122-8":[108.15,1757.51],"6-122-9":[10.94,1582.28],"6-122-10":[6.8,1233.67],"6-122-11":[7.89,932.54],"6-122-12":[-3.4,850.98],"6-122-13":[1.64,20.11],"6-122-14":[0.48,16.34],"6-122-15":[-7.21,6.88],"6-122-16":[-12.07,-0.71],"6-122-17":[-17.59,-4.25],"6-122-18":[-18.55,-5.37],"6-122-19":[-18.72,-6.19],"6-122-20":[-17.57,-2.87],"6-122-21":[-10.75,2.46],"6-122-22":[-3.63,10.62],"6-122-23":[1.49,22.49],"6-122-24":[7.72,36.85],"6-122-25":[14.12,46.47],"6-122-26":[19.28,54.72],"6-122-27":[23.59,60.99],"6-122-28":[26.75,65.91],"6-122-29":[28.53,72.29],"6-122-30":[31.65,81.32],"6-122-31":[36.02,86.88],"6-122-32":[39.15,92.44],"6-122-33":[41.65,106.03],"6-122-34":[46.65,119.42],"6-122-35":[48.07,866.32],"6-122-36":[45.55,126.93],"6-122-37":[53.7,127.16],"6-122-38":[52.98,340.77],"6-122-39":[35.29,1689.03],"6-122-40":[46.98,106.61],"6-122-41":[40,96.95],"6-122-42":[33.4,82.62],"6-122-43":[27.67,66.13],"6-122-44":[18.65,57.54],"6-122-45":[14.32,44.27],"6-122-46":[3,29.21],"6-122-47":[-11.15,13.47],"6-122-48":[-19.42,-2.93],"6-122-49":[-27.38,-6.28],"6-122-50":[-46.34,517.88],"6-122-51":[-65.39,-20.43],"6-122-52":[-77.62,-31.58],"6-122-53":[-81.78,-37.06],"6-122-54":[-91.49,-38.57],"6-122-55":[-105.7,-45.16],"6-122-56":[-117.38,-51.89],"6-122-57":[-60.46,3075.8],"6-122-58":[-117.89,3148.6],"6-122-59":[-115.52,2551.83],"6-122-60":[-111.82,209.78],"6-122-61":[-93.22,3800.64],"6-122-62":[1431.84,3358.99],"6-122-63":[-29.54,3084.48],"6-123-0":[9.85,26.78],"6-123-1":[5.73,18.86],"5-61-0":[5.65,26.78],"6-123-2":[2.93,12],"6-123-3":[0.14,5.41],"5-61-1":[0.14,12],"4-30-0":[0.14,26.78],"6-123-4":[0.92,8.02],"6-123-5":[1.11,5.42],"5-61-2":[0.77,8.02],"6-123-6":[1.15,7.19],"6-123-7":[3.59,1680.33],"5-61-3":[1.14,1680.33],"4-30-1":[0.71,1680.33],"6-123-8":[102.27,1646.59],"6-123-9":[12.03,1328.47],"5-61-4":[10.94,1757.51],"6-123-10":[4.75,1210.93],"6-123-11":[5.38,20.59],"5-61-5":[4.75,1233.67],"4-30-2":[4.75,3277.23],"6-123-12":[-6.75,744.81],"6-123-13":[-5.24,18.85],"5-61-6":[-6.75,850.98],"6-123-14":[-6.42,11.45],"6-123-15":[-19.48,0.49],"5-61-7":[-19.48,16.34],"4-30-3":[-19.48,4774.23],"6-123-16":[-20.74,-3.9],"6-123-17":[-25.13,-6.72],"5-61-8":[-25.13,-0.71],"6-123-18":[-25.13,-8.71],"6-123-19":[-20.44,-8.81],"5-61-9":[-25.13,-5.37],"4-30-4":[-25.13,17.95],"6-123-20":[-19,-6.48],"6-123-21":[-14.63,-2.18],"5-61-10":[-19,2.46],"6-123-22":[-8.94,1.5],"6-123-23":[-0.85,14.41],"5-61-11":[-8.94,22.49],"4-30-5":[-19,39.89],"6-123-24":[5.5,29.61],"6-123-25":[10.76,38.58],"5-61-12":[5.5,46.47],"6-123-26":[16.15,50.77],"6-123-27":[19.03,52.37],"5-61-13":[16.15,60.99],"4-30-6":[5.5,69.78],"6-123-28":[20.24,74.26],"6-123-29":[19.92,68.93],"5-61-14":[19.92,74.26],"6-123-30":[27.6,72.06],"6-123-31":[30.84,78.32],"5-61-15":[27.6,86.88],"4-30-7":[19.92,831.89],"6-123-32":[9.9,105.9],"6-123-33":[38.55,93.32],"5-61-16":[9.9,106.03],"6-123-34":[42.04,104.47],"6-123-35":[26.89,608.86],"5-61-17":[26.89,866.32],"4-30-8":[9.56,2387.59],"6-123-36":[44.53,1017.74],"6-123-37":[-166.26,1941.75],"5-61-18":[-166.26,1941.75],"6-123-38":[49.91,717.25],"6-123-39":[18.08,1664.47],"5-61-19":[18.08,1689.03],"4-30-9":[-166.26,1941.75],"6-123-40":[48.47,309.11],"6-123-41":[41.3,105.67],"5-61-20":[40,309.11],"6-123-42":[34.67,357.87],"6-123-43":[28.79,77.86],"5-61-21":[27.67,357.87],"4-30-10":[8.57,495.66],"6-123-44":[23.62,65.38],"6-123-45":[14.32,51.14],"5-61-22":[14.32,65.38],"6-123-46":[6.73,41.96],"6-123-47":[-345.62,2939.6],"5-61-23":[-345.62,2939.6],"4-30-11":[-345.62,2939.6],"6-123-48":[-74.06,2088.42],"6-123-49":[-22.42,566.58],"5-61-24":[-74.06,2088.42],"6-123-50":[-82.31,649.83],"6-123-51":[-70.1,-20.38],"5-61-25":[-82.31,649.83],"4-30-12":[-82.31,2088.42],"6-123-52":[-83.38,-32.37],"6-123-53":[-91.85,-39.81],"5-61-26":[-91.85,-31.58],"6-123-54":[-95.58,-41.02],"6-123-55":[-108.17,-46.75],"5-61-27":[-108.17,-38.57],"4-30-13":[-108.17,1402.86],"6-123-56":[-118.68,-52.76],"6-123-57":[-116.81,3530.38],"5-61-28":[-118.68,3530.38],"6-123-58":[-117.58,2686.35],"6-123-59":[-114.23,3368.3],"5-61-29":[-117.89,3368.3],"4-30-14":[-118.68,3530.38],"6-123-60":[-105.65,-47.93],"6-123-61":[-94.72,4324.92],"5-61-30":[-111.82,4324.92],"6-123-62":[1173.34,3260.29],"6-123-63":[-29.54,3084.24],"5-61-31":[-29.54,3358.99],"4-30-15":[-115.69,4324.92],"6-124-0":[10.16,26.79],"6-124-1":[6.14,19.04],"6-124-2":[3.03,12.26],"6-124-3":[0.14,5.75],"6-124-4":[0.89,8.06],"6-124-5":[1.26,5.67],"6-124-6":[1.39,7.36],"6-124-7":[3.52,1617.82],"6-124-8":[8.51,1409.69],"6-124-9":[10.13,2305.88],"6-124-10":[0.45,2164.88],"6-124-11":[2.56,14.63],"6-124-12":[-3.24,14.32],"6-124-13":[-10.59,10.54],"6-124-14":[-10.36,8.76],"6-124-15":[-21.04,0],"6-124-16":[-24.64,-2.76],"6-124-17":[-31.2,-3.85],"6-124-18":[-30.75,-6.47],"6-124-19":[-26.11,-2.49],"6-124-20":[-24.31,-7.51],"6-124-21":[-15.23,-4.76],"6-124-22":[-13.59,-0.84],"6-124-23":[-4.55,9.7],"6-124-24":[2.35,21.54],"6-124-25":[7.35,32.3],"6-124-26":[12.55,38.19],"6-124-27":[15.94,48.53],"6-124-28":[21.55,62.2],"6-124-29":[18.5,57.21],"6-124-30":[24.34,61.69],"6-124-31":[27.97,68.96],"6-124-32":[29.89,114.26],"6-124-33":[33.15,84.09],"6-124-34":[36.93,96.35],"6-124-35":[42.03,117.27],"6-124-36":[44.94,447.27],"6-124-37":[62.06,132.91],"6-124-38":[41.71,1137.87],"6-124-39":[34.07,895.97],"6-124-40":[47.96,131.97],"6-124-41":[46.43,105.92],"6-124-42":[39.86,96.09],"6-124-43":[32.69,85.75],"6-124-44":[26.31,75.44],"6-124-45":[20.78,56.69],"6-124-46":[8.98,1441.5],"6-124-47":[-4.07,3719.73],"6-124-48":[-31.98,2290.2],"6-124-49":[-23.42,-3.78],"6-124-50":[-84.41,535.73],"6-124-51":[-73.94,-20.62],"6-124-52":[-86.86,-35.05],"6-124-53":[-95.4,-42.17],"6-124-54":[-98.04,-43.58],"6-124-55":[-110.57,-48.45],"6-124-56":[-118.68,-54.08],"6-124-57":[-117.84,3544.4],"6-124-58":[-118.43,1962.19],"6-124-59":[-115.85,2252.06],"6-124-60":[-105.91,-48.57],"6-124-61":[-95.38,3812.59],"6-124-62":[594.22,3705.94],"6-124-63":[-29.54,3085.39],"6-125-0":[10.35,26.81],"6-125-1":[6.14,19.41],"5-62-0":[6.14,26.81],"6-125-2":[3.26,12.44],"6-125-3":[0.9,6.39],"5-62-1":[0.14,12.44],"6-125-4":[1.27,6.49],"6-125-5":[1.13,5.32],"5-62-2":[0.89,8.06],"6-125-6":[1.29,6.47],"6-125-7":[3.14,1111.24],"5-62-3":[1.29,1617.82],"6-125-8":[7.11,1048.77],"6-125-9":[6.89,1518.99],"5-62-4":[6.89,2305.88],"6-125-10":[-2.91,1665.46],"6-125-11":[0,6.86],"5-62-5":[-2.91,2164.88],"6-125-12":[-2.34,8.77],"6-125-13":[-14.46,953.56],"5-62-6":[-14.46,953.56],"6-125-14":[-5.06,5.28],"6-125-15":[-17.98,-2.39],"5-62-7":[-21.04,8.76],"6-125-16":[-24.4,-7.68],"6-125-17":[-28.6,-10.11],"5-62-8":[-31.2,-2.76],"6-125-18":[-28.6,-11],"6-125-19":[-25.62,-2.41],"5-62-9":[-30.75,-2.41],"6-125-20":[-22.75,-4.66],"6-125-21":[-15.81,-6.04],"5-62-10":[-24.31,-4.66],"6-125-22":[-14.02,-3.42],"6-125-23":[-6.77,4.64],"5-62-11":[-14.02,9.7],"6-125-24":[1.21,15.8],"6-125-25":[6.11,24.94],"5-62-12":[1.21,32.3],"6-125-26":[10.22,30.26],"6-125-27":[13.87,41.98],"5-62-13":[10.22,48.53],"6-125-28":[18.08,48.13],"6-125-29":[17.79,54.5],"5-62-14":[17.79,62.2],"6-125-30":[22.38,56.85],"6-125-31":[16.56,59.8],"5-62-15":[16.56,68.96],"6-125-32":[25.85,66.31],"6-125-33":[27.99,72.87],"5-62-16":[25.85,114.26],"6-125-34":[33,81.65],"6-125-35":[38.91,103.05],"5-62-17":[33,117.27],"6-125-36":[47.5,124.13],"6-125-37":[57.22,130.49],"5-62-18":[44.94,447.27],"6-125-38":[61.15,131.46],"6-125-39":[52.54,288.83],"5-62-19":[34.07,1137.87],"6-125-40":[48.88,107.87],"6-125-41":[48.01,104.69],"5-62-20":[46.43,131.97],"6-125-42":[42.87,97.22],"6-125-43":[37.6,89.45],"5-62-21":[32.69,97.22],"6-125-44":[6.97,816.34],"6-125-45":[-0.97,2517.08],"5-62-22":[-0.97,2517.08],"6-125-46":[-17.88,2863.4],"6-125-47":[-35.65,2605.15],"5-62-23":[-35.65,3719.73],"6-125-48":[-10.05,11.03],"6-125-49":[-27.68,-4.71],"5-62-24":[-31.98,2290.2],"6-125-50":[-48.98,-11.91],"6-125-51":[-75.78,-21.91],"5-62-25":[-84.41,535.73],"6-125-52":[-88.21,-37.16],"6-125-53":[-96.9,-44.36],"5-62-26":[-96.9,-35.05],"6-125-54":[-99.71,-46.22],"6-125-55":[-113.95,-50.03],"5-62-27":[-113.95,-43.58],"6-125-56":[-118.23,-55.58],"6-125-57":[-119.6,-57.02],"5-62-28":[-119.6,3544.4],"6-125-58":[-119.13,-57.36],"6-125-59":[-115.13,-52.66],"5-62-29":[-119.13,2252.06],"6-125-60":[-106.04,-48.63],"6-125-61":[-95.54,2586.73],"5-62-30":[-106.04,3812.59],"6-125-62":[617.47,3991.97],"6-125-63":[-29.54,3087.55],"5-62-31":[-29.54,3991.97],"6-126-0":[10.48,26.83],"6-126-1":[6.39,19.79],"6-126-2":[3.59,12.74],"6-126-3":[1.34,7.32],"6-126-4":[1.23,5.6],"6-126-5":[1.15,4.51],"6-126-6":[1.24,5.95],"6-126-7":[2.53,1644.02],"6-126-8":[4.57,1334.46],"6-126-9":[2.53,1348.08],"6-126-10":[-4.55,360.68],"6-126-11":[-0.22,3.75],"6-126-12":[-4.16,11.04],"6-126-13":[-20.67,663.5],"6-126-14":[-17.18,1.9],"6-126-15":[-17.03,-2.13],"6-126-16":[-23.5,-6.98],"6-126-17":[-25.32,-10.8],"6-126-18":[-24.77,-10.53],"6-126-19":[-22.17,-7.92],"6-126-20":[-19.02,-6.36],"6-126-21":[-15.67,-4.68],"6-126-22":[-13.71,-4.14],"6-126-23":[-8.08,4.18],"6-126-24":[0.43,12.94],"6-126-25":[5.52,20.01],"6-126-26":[9,27.01],"6-126-27":[12.09,34.89],"6-126-28":[14.82,40.97],"6-126-29":[17.43,44.78],"6-126-30":[17.98,49.65],"6-126-31":[20.75,52.08],"6-126-32":[19.19,56],"6-126-33":[25.26,66],"6-126-34":[28.98,76.55],"6-126-35":[34.87,95.02],"6-126-36":[41.34,297.72],"6-126-37":[52.33,122.31],"6-126-38":[55.22,587.24],"6-126-39":[52.13,124.15],"6-126-40":[49.8,107.99],"6-126-41":[47.34,102.99],"6-126-42":[43.4,96.7],"6-126-43":[39.32,87],"6-126-44":[-5.9,921.24],"6-126-45":[-23.78,2784.98],"6-126-46":[-12.29,1743.24],"6-126-47":[4.88,29.21],"6-126-48":[-9.96,11.4],"6-126-49":[-34.93,-4.57],"6-126-50":[-54.64,-14.05],"6-126-51":[-75.71,-26.38],"6-126-52":[-89.11,-37.37],"6-126-53":[-98.36,-44.98],"6-126-54":[-101.06,-48.44],"6-126-55":[-115.57,-50.65],"6-126-56":[-120.87,-56.97],"6-126-57":[-122.6,-57.42],"6-126-58":[-120.57,-57.41],"6-126-59":[-115.91,-52.64],"6-126-60":[-106.89,-48.23],"6-126-61":[-95.56,3164.9],"6-126-62":[1096.86,4009.42],"6-126-63":[-29.54,3089.77],"6-127-0":[10.58,26.87],"6-127-1":[6.39,20.25],"5-63-0":[6.39,26.87],"6-127-2":[3.82,13.4],"6-127-3":[2.41,8.63],"5-63-1":[1.34,13.4],"4-31-0":[0.14,26.87],"6-127-4":[1.13,6.79],"6-127-5":[1.13,4.39],"5-63-2":[1.13,6.79],"6-127-6":[1.24,612.64],"6-127-7":[2.31,1712.25],"5-63-3":[1.24,1712.25],"4-31-1":[0.89,1712.25],"3-15-0":[0.14,1712.25],"6-127-8":[4.5,1465.56],"6-127-9":[3.01,918.23],"5-63-4":[2.53,1465.56],"6-127-10":[-3.08,11.47],"6-127-11":[-0.12,3.44],"5-63-5":[-4.55,360.68],"4-31-2":[-4.55,2305.88],"6-127-12":[-1.99,11.61],"6-127-13":[-24.8,1210.91],"5-63-6":[-24.8,1210.91],"6-127-14":[-25.57,1.39],"6-127-15":[-13.94,-1.38],"5-63-7":[-25.57,1.9],"4-31-3":[-25.57,1210.91],"3-15-1":[-25.57,4774.23],"2-7-0":[-25.57,4774.23],"6-127-16":[-21,-6.43],"6-127-17":[-25.9,-10.68],"5-63-8":[-25.9,-6.43],"6-127-18":[-26.05,-10.54],"6-127-19":[-22.59,-7.92],"5-63-9":[-26.05,-7.92],"4-31-4":[-31.2,-2.41],"6-127-20":[-19,-7.92],"6-127-21":[-16.82,-4.7],"5-63-10":[-19.02,-4.68],"6-127-22":[-10.69,-3.04],"6-127-23":[-8.26,1.26],"5-63-11":[-13.71,4.18],"4-31-5":[-24.31,9.7],"3-15-2":[-31.2,39.89],"6-127-24":[0.43,9.72],"6-127-25":[4.5,17.61],"5-63-12":[0.43,20.01],"6-127-26":[6.9,22.78],"6-127-27":[8.89,29.21],"5-63-13":[6.9,34.89],"4-31-6":[0.43,48.53],"6-127-28":[12.01,35],"6-127-29":[14.22,37.73],"5-63-14":[12.01,44.78],"6-127-30":[15.67,40.09],"6-127-31":[19.02,46.55],"5-63-15":[15.67,52.08],"4-31-7":[12.01,68.96],"3-15-3":[0.43,831.89],"2-7-1":[-84.13,3800.26],"1-3-0":[-268.7,7512.84],"6-127-32":[20.92,50.53],"6-127-33":[22.89,57.98],"5-63-16":[19.19,66],"6-127-34":[25.27,69.75],"6-127-35":[27.53,86.05],"5-63-17":[25.27,95.02],"4-31-8":[19.19,117.27],"6-127-36":[39.54,104.68],"6-127-37":[22.06,1069.23],"5-63-18":[22.06,1069.23],"6-127-38":[20.15,1371.15],"6-127-39":[49.74,108.66],"5-63-19":[20.15,1371.15],"4-31-9":[20.15,1371.15],"3-15-4":[-166.26,2387.59],"6-127-40":[48.93,103.15],"6-127-41":[47.07,98.56],"5-63-20":[47.07,107.99],"6-127-42":[43.96,94.48],"6-127-43":[38.98,91.71],"5-63-21":[38.98,96.7],"4-31-10":[32.69,131.97],"6-127-44":[20.8,83.16],"6-127-45":[-12.67,1759.88],"5-63-22":[-23.78,2784.98],"6-127-46":[11.75,42.6],"6-127-47":[3.24,30.55],"5-63-23":[-12.29,1743.24],"4-31-11":[-35.65,3719.73],"3-15-5":[-345.62,3719.73],"2-7-2":[-345.62,5227.39],"6-127-48":[-9.45,37.42],"6-127-49":[-38.82,351.39],"5-63-24":[-38.82,351.39],"6-127-50":[-56.24,-17.74],"6-127-51":[-75.79,-28.67],"5-63-25":[-75.79,-14.05],"4-31-12":[-84.41,2290.2],"6-127-52":[-88.85,-37.45],"6-127-53":[-98.42,-44.71],"5-63-26":[-98.42,-37.37],"6-127-54":[-101.55,-48.81],"6-127-55":[-117.07,-50.94],"5-63-27":[-117.07,-48.44],"4-31-13":[-117.07,-35.05],"3-15-6":[-117.07,2290.2],"6-127-56":[-123.45,-57.63],"6-127-57":[-123.93,-60.36],"5-63-28":[-123.93,-56.97],"6-127-58":[-123.3,-58.62],"6-127-59":[-117.49,-53.65],"5-63-29":[-123.3,-52.64],"4-31-14":[-123.93,3544.4],"6-127-60":[-109.53,-48.22],"6-127-61":[-95.58,1201.67],"5-63-30":[-109.53,3164.9],"6-127-62":[-43.08,3227.47],"6-127-63":[-31.68,3092.98],"5-63-31":[-43.08,4009.42],"4-31-15":[-109.53,4009.42],"3-15-7":[-123.93,4324.92],"2-7-3":[-123.93,4324.92],"1-3-1":[-345.62,5227.39],"0-1-0":[-398.55,8777.15]} \ No newline at end of file diff --git a/public/lib/Cesium/Cesium.d.ts b/public/lib/Cesium/Cesium.d.ts new file mode 100644 index 0000000..097f050 --- /dev/null +++ b/public/lib/Cesium/Cesium.d.ts @@ -0,0 +1,42811 @@ +declare module "cesium" { + +/** + * Private interfaces to support PropertyBag being a dictionary-like object. + */ +interface DictionaryLike { + [index: string]: any; +} + +/** + * Enum containing WebGL Constant values by name. +for use without an active WebGL context, or in cases where certain constants are unavailable using the WebGL context +(For example, in [Safari 9]{@link https://github.com/CesiumGS/cesium/issues/2989}). + +These match the constants from the [WebGL 1.0]{@link https://www.khronos.org/registry/webgl/specs/latest/1.0/} +and [WebGL 2.0]{@link https://www.khronos.org/registry/webgl/specs/latest/2.0/} +specifications. + */ +export enum WebGLConstants { + DEPTH_BUFFER_BIT = 256, + STENCIL_BUFFER_BIT = 1024, + COLOR_BUFFER_BIT = 16384, + POINTS = 0, + LINES = 1, + LINE_LOOP = 2, + LINE_STRIP = 3, + TRIANGLES = 4, + TRIANGLE_STRIP = 5, + TRIANGLE_FAN = 6, + ZERO = 0, + ONE = 1, + SRC_COLOR = 768, + ONE_MINUS_SRC_COLOR = 769, + SRC_ALPHA = 770, + ONE_MINUS_SRC_ALPHA = 771, + DST_ALPHA = 772, + ONE_MINUS_DST_ALPHA = 773, + DST_COLOR = 774, + ONE_MINUS_DST_COLOR = 775, + SRC_ALPHA_SATURATE = 776, + FUNC_ADD = 32774, + BLEND_EQUATION = 32777, + BLEND_EQUATION_RGB = 32777, + BLEND_EQUATION_ALPHA = 34877, + FUNC_SUBTRACT = 32778, + FUNC_REVERSE_SUBTRACT = 32779, + BLEND_DST_RGB = 32968, + BLEND_SRC_RGB = 32969, + BLEND_DST_ALPHA = 32970, + BLEND_SRC_ALPHA = 32971, + CONSTANT_COLOR = 32769, + ONE_MINUS_CONSTANT_COLOR = 32770, + CONSTANT_ALPHA = 32771, + ONE_MINUS_CONSTANT_ALPHA = 32772, + BLEND_COLOR = 32773, + ARRAY_BUFFER = 34962, + ELEMENT_ARRAY_BUFFER = 34963, + ARRAY_BUFFER_BINDING = 34964, + ELEMENT_ARRAY_BUFFER_BINDING = 34965, + STREAM_DRAW = 35040, + STATIC_DRAW = 35044, + DYNAMIC_DRAW = 35048, + BUFFER_SIZE = 34660, + BUFFER_USAGE = 34661, + CURRENT_VERTEX_ATTRIB = 34342, + FRONT = 1028, + BACK = 1029, + FRONT_AND_BACK = 1032, + CULL_FACE = 2884, + BLEND = 3042, + DITHER = 3024, + STENCIL_TEST = 2960, + DEPTH_TEST = 2929, + SCISSOR_TEST = 3089, + POLYGON_OFFSET_FILL = 32823, + SAMPLE_ALPHA_TO_COVERAGE = 32926, + SAMPLE_COVERAGE = 32928, + NO_ERROR = 0, + INVALID_ENUM = 1280, + INVALID_VALUE = 1281, + INVALID_OPERATION = 1282, + OUT_OF_MEMORY = 1285, + CW = 2304, + CCW = 2305, + LINE_WIDTH = 2849, + ALIASED_POINT_SIZE_RANGE = 33901, + ALIASED_LINE_WIDTH_RANGE = 33902, + CULL_FACE_MODE = 2885, + FRONT_FACE = 2886, + DEPTH_RANGE = 2928, + DEPTH_WRITEMASK = 2930, + DEPTH_CLEAR_VALUE = 2931, + DEPTH_FUNC = 2932, + STENCIL_CLEAR_VALUE = 2961, + STENCIL_FUNC = 2962, + STENCIL_FAIL = 2964, + STENCIL_PASS_DEPTH_FAIL = 2965, + STENCIL_PASS_DEPTH_PASS = 2966, + STENCIL_REF = 2967, + STENCIL_VALUE_MASK = 2963, + STENCIL_WRITEMASK = 2968, + STENCIL_BACK_FUNC = 34816, + STENCIL_BACK_FAIL = 34817, + STENCIL_BACK_PASS_DEPTH_FAIL = 34818, + STENCIL_BACK_PASS_DEPTH_PASS = 34819, + STENCIL_BACK_REF = 36003, + STENCIL_BACK_VALUE_MASK = 36004, + STENCIL_BACK_WRITEMASK = 36005, + VIEWPORT = 2978, + SCISSOR_BOX = 3088, + COLOR_CLEAR_VALUE = 3106, + COLOR_WRITEMASK = 3107, + UNPACK_ALIGNMENT = 3317, + PACK_ALIGNMENT = 3333, + MAX_TEXTURE_SIZE = 3379, + MAX_VIEWPORT_DIMS = 3386, + SUBPIXEL_BITS = 3408, + RED_BITS = 3410, + GREEN_BITS = 3411, + BLUE_BITS = 3412, + ALPHA_BITS = 3413, + DEPTH_BITS = 3414, + STENCIL_BITS = 3415, + POLYGON_OFFSET_UNITS = 10752, + POLYGON_OFFSET_FACTOR = 32824, + TEXTURE_BINDING_2D = 32873, + SAMPLE_BUFFERS = 32936, + SAMPLES = 32937, + SAMPLE_COVERAGE_VALUE = 32938, + SAMPLE_COVERAGE_INVERT = 32939, + COMPRESSED_TEXTURE_FORMATS = 34467, + DONT_CARE = 4352, + FASTEST = 4353, + NICEST = 4354, + GENERATE_MIPMAP_HINT = 33170, + BYTE = 5120, + UNSIGNED_BYTE = 5121, + SHORT = 5122, + UNSIGNED_SHORT = 5123, + INT = 5124, + UNSIGNED_INT = 5125, + FLOAT = 5126, + DEPTH_COMPONENT = 6402, + ALPHA = 6406, + RGB = 6407, + RGBA = 6408, + LUMINANCE = 6409, + LUMINANCE_ALPHA = 6410, + UNSIGNED_SHORT_4_4_4_4 = 32819, + UNSIGNED_SHORT_5_5_5_1 = 32820, + UNSIGNED_SHORT_5_6_5 = 33635, + FRAGMENT_SHADER = 35632, + VERTEX_SHADER = 35633, + MAX_VERTEX_ATTRIBS = 34921, + MAX_VERTEX_UNIFORM_VECTORS = 36347, + MAX_VARYING_VECTORS = 36348, + MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661, + MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660, + MAX_TEXTURE_IMAGE_UNITS = 34930, + MAX_FRAGMENT_UNIFORM_VECTORS = 36349, + SHADER_TYPE = 35663, + DELETE_STATUS = 35712, + LINK_STATUS = 35714, + VALIDATE_STATUS = 35715, + ATTACHED_SHADERS = 35717, + ACTIVE_UNIFORMS = 35718, + ACTIVE_ATTRIBUTES = 35721, + SHADING_LANGUAGE_VERSION = 35724, + CURRENT_PROGRAM = 35725, + NEVER = 512, + LESS = 513, + EQUAL = 514, + LEQUAL = 515, + GREATER = 516, + NOTEQUAL = 517, + GEQUAL = 518, + ALWAYS = 519, + KEEP = 7680, + REPLACE = 7681, + INCR = 7682, + DECR = 7683, + INVERT = 5386, + INCR_WRAP = 34055, + DECR_WRAP = 34056, + VENDOR = 7936, + RENDERER = 7937, + VERSION = 7938, + NEAREST = 9728, + LINEAR = 9729, + NEAREST_MIPMAP_NEAREST = 9984, + LINEAR_MIPMAP_NEAREST = 9985, + NEAREST_MIPMAP_LINEAR = 9986, + LINEAR_MIPMAP_LINEAR = 9987, + TEXTURE_MAG_FILTER = 10240, + TEXTURE_MIN_FILTER = 10241, + TEXTURE_WRAP_S = 10242, + TEXTURE_WRAP_T = 10243, + TEXTURE_2D = 3553, + TEXTURE = 5890, + TEXTURE_CUBE_MAP = 34067, + TEXTURE_BINDING_CUBE_MAP = 34068, + TEXTURE_CUBE_MAP_POSITIVE_X = 34069, + TEXTURE_CUBE_MAP_NEGATIVE_X = 34070, + TEXTURE_CUBE_MAP_POSITIVE_Y = 34071, + TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072, + TEXTURE_CUBE_MAP_POSITIVE_Z = 34073, + TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074, + MAX_CUBE_MAP_TEXTURE_SIZE = 34076, + TEXTURE0 = 33984, + TEXTURE1 = 33985, + TEXTURE2 = 33986, + TEXTURE3 = 33987, + TEXTURE4 = 33988, + TEXTURE5 = 33989, + TEXTURE6 = 33990, + TEXTURE7 = 33991, + TEXTURE8 = 33992, + TEXTURE9 = 33993, + TEXTURE10 = 33994, + TEXTURE11 = 33995, + TEXTURE12 = 33996, + TEXTURE13 = 33997, + TEXTURE14 = 33998, + TEXTURE15 = 33999, + TEXTURE16 = 34000, + TEXTURE17 = 34001, + TEXTURE18 = 34002, + TEXTURE19 = 34003, + TEXTURE20 = 34004, + TEXTURE21 = 34005, + TEXTURE22 = 34006, + TEXTURE23 = 34007, + TEXTURE24 = 34008, + TEXTURE25 = 34009, + TEXTURE26 = 34010, + TEXTURE27 = 34011, + TEXTURE28 = 34012, + TEXTURE29 = 34013, + TEXTURE30 = 34014, + TEXTURE31 = 34015, + ACTIVE_TEXTURE = 34016, + REPEAT = 10497, + CLAMP_TO_EDGE = 33071, + MIRRORED_REPEAT = 33648, + FLOAT_VEC2 = 35664, + FLOAT_VEC3 = 35665, + FLOAT_VEC4 = 35666, + INT_VEC2 = 35667, + INT_VEC3 = 35668, + INT_VEC4 = 35669, + BOOL = 35670, + BOOL_VEC2 = 35671, + BOOL_VEC3 = 35672, + BOOL_VEC4 = 35673, + FLOAT_MAT2 = 35674, + FLOAT_MAT3 = 35675, + FLOAT_MAT4 = 35676, + SAMPLER_2D = 35678, + SAMPLER_CUBE = 35680, + VERTEX_ATTRIB_ARRAY_ENABLED = 34338, + VERTEX_ATTRIB_ARRAY_SIZE = 34339, + VERTEX_ATTRIB_ARRAY_STRIDE = 34340, + VERTEX_ATTRIB_ARRAY_TYPE = 34341, + VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922, + VERTEX_ATTRIB_ARRAY_POINTER = 34373, + VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975, + IMPLEMENTATION_COLOR_READ_TYPE = 35738, + IMPLEMENTATION_COLOR_READ_FORMAT = 35739, + COMPILE_STATUS = 35713, + LOW_FLOAT = 36336, + MEDIUM_FLOAT = 36337, + HIGH_FLOAT = 36338, + LOW_INT = 36339, + MEDIUM_INT = 36340, + HIGH_INT = 36341, + FRAMEBUFFER = 36160, + RENDERBUFFER = 36161, + RGBA4 = 32854, + RGB5_A1 = 32855, + RGB565 = 36194, + DEPTH_COMPONENT16 = 33189, + STENCIL_INDEX = 6401, + STENCIL_INDEX8 = 36168, + DEPTH_STENCIL = 34041, + RENDERBUFFER_WIDTH = 36162, + RENDERBUFFER_HEIGHT = 36163, + RENDERBUFFER_INTERNAL_FORMAT = 36164, + RENDERBUFFER_RED_SIZE = 36176, + RENDERBUFFER_GREEN_SIZE = 36177, + RENDERBUFFER_BLUE_SIZE = 36178, + RENDERBUFFER_ALPHA_SIZE = 36179, + RENDERBUFFER_DEPTH_SIZE = 36180, + RENDERBUFFER_STENCIL_SIZE = 36181, + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048, + FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049, + FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050, + FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051, + COLOR_ATTACHMENT0 = 36064, + DEPTH_ATTACHMENT = 36096, + STENCIL_ATTACHMENT = 36128, + DEPTH_STENCIL_ATTACHMENT = 33306, + NONE = 0, + FRAMEBUFFER_COMPLETE = 36053, + FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054, + FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055, + FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057, + FRAMEBUFFER_UNSUPPORTED = 36061, + FRAMEBUFFER_BINDING = 36006, + RENDERBUFFER_BINDING = 36007, + MAX_RENDERBUFFER_SIZE = 34024, + INVALID_FRAMEBUFFER_OPERATION = 1286, + UNPACK_FLIP_Y_WEBGL = 37440, + UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441, + CONTEXT_LOST_WEBGL = 37442, + UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443, + BROWSER_DEFAULT_WEBGL = 37444, + COMPRESSED_RGB_S3TC_DXT1_EXT = 33776, + COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777, + COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778, + COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779, + COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840, + COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841, + COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842, + COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843, + COMPRESSED_RGB_ETC1_WEBGL = 36196, + HALF_FLOAT_OES = 36193, + DOUBLE = 5130, + READ_BUFFER = 3074, + UNPACK_ROW_LENGTH = 3314, + UNPACK_SKIP_ROWS = 3315, + UNPACK_SKIP_PIXELS = 3316, + PACK_ROW_LENGTH = 3330, + PACK_SKIP_ROWS = 3331, + PACK_SKIP_PIXELS = 3332, + COLOR = 6144, + DEPTH = 6145, + STENCIL = 6146, + RED = 6403, + RGB8 = 32849, + RGBA8 = 32856, + RGB10_A2 = 32857, + TEXTURE_BINDING_3D = 32874, + UNPACK_SKIP_IMAGES = 32877, + UNPACK_IMAGE_HEIGHT = 32878, + TEXTURE_3D = 32879, + TEXTURE_WRAP_R = 32882, + MAX_3D_TEXTURE_SIZE = 32883, + UNSIGNED_INT_2_10_10_10_REV = 33640, + MAX_ELEMENTS_VERTICES = 33000, + MAX_ELEMENTS_INDICES = 33001, + TEXTURE_MIN_LOD = 33082, + TEXTURE_MAX_LOD = 33083, + TEXTURE_BASE_LEVEL = 33084, + TEXTURE_MAX_LEVEL = 33085, + MIN = 32775, + MAX = 32776, + DEPTH_COMPONENT24 = 33190, + MAX_TEXTURE_LOD_BIAS = 34045, + TEXTURE_COMPARE_MODE = 34892, + TEXTURE_COMPARE_FUNC = 34893, + CURRENT_QUERY = 34917, + QUERY_RESULT = 34918, + QUERY_RESULT_AVAILABLE = 34919, + STREAM_READ = 35041, + STREAM_COPY = 35042, + STATIC_READ = 35045, + STATIC_COPY = 35046, + DYNAMIC_READ = 35049, + DYNAMIC_COPY = 35050, + MAX_DRAW_BUFFERS = 34852, + DRAW_BUFFER0 = 34853, + DRAW_BUFFER1 = 34854, + DRAW_BUFFER2 = 34855, + DRAW_BUFFER3 = 34856, + DRAW_BUFFER4 = 34857, + DRAW_BUFFER5 = 34858, + DRAW_BUFFER6 = 34859, + DRAW_BUFFER7 = 34860, + DRAW_BUFFER8 = 34861, + DRAW_BUFFER9 = 34862, + DRAW_BUFFER10 = 34863, + DRAW_BUFFER11 = 34864, + DRAW_BUFFER12 = 34865, + DRAW_BUFFER13 = 34866, + DRAW_BUFFER14 = 34867, + DRAW_BUFFER15 = 34868, + MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657, + MAX_VERTEX_UNIFORM_COMPONENTS = 35658, + SAMPLER_3D = 35679, + SAMPLER_2D_SHADOW = 35682, + FRAGMENT_SHADER_DERIVATIVE_HINT = 35723, + PIXEL_PACK_BUFFER = 35051, + PIXEL_UNPACK_BUFFER = 35052, + PIXEL_PACK_BUFFER_BINDING = 35053, + PIXEL_UNPACK_BUFFER_BINDING = 35055, + FLOAT_MAT2x3 = 35685, + FLOAT_MAT2x4 = 35686, + FLOAT_MAT3x2 = 35687, + FLOAT_MAT3x4 = 35688, + FLOAT_MAT4x2 = 35689, + FLOAT_MAT4x3 = 35690, + SRGB = 35904, + SRGB8 = 35905, + SRGB8_ALPHA8 = 35907, + COMPARE_REF_TO_TEXTURE = 34894, + RGBA32F = 34836, + RGB32F = 34837, + RGBA16F = 34842, + RGB16F = 34843, + VERTEX_ATTRIB_ARRAY_INTEGER = 35069, + MAX_ARRAY_TEXTURE_LAYERS = 35071, + MIN_PROGRAM_TEXEL_OFFSET = 35076, + MAX_PROGRAM_TEXEL_OFFSET = 35077, + MAX_VARYING_COMPONENTS = 35659, + TEXTURE_2D_ARRAY = 35866, + TEXTURE_BINDING_2D_ARRAY = 35869, + R11F_G11F_B10F = 35898, + UNSIGNED_INT_10F_11F_11F_REV = 35899, + RGB9_E5 = 35901, + UNSIGNED_INT_5_9_9_9_REV = 35902, + TRANSFORM_FEEDBACK_BUFFER_MODE = 35967, + MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 35968, + TRANSFORM_FEEDBACK_VARYINGS = 35971, + TRANSFORM_FEEDBACK_BUFFER_START = 35972, + TRANSFORM_FEEDBACK_BUFFER_SIZE = 35973, + TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 35976, + RASTERIZER_DISCARD = 35977, + MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 35978, + MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 35979, + INTERLEAVED_ATTRIBS = 35980, + SEPARATE_ATTRIBS = 35981, + TRANSFORM_FEEDBACK_BUFFER = 35982, + TRANSFORM_FEEDBACK_BUFFER_BINDING = 35983, + RGBA32UI = 36208, + RGB32UI = 36209, + RGBA16UI = 36214, + RGB16UI = 36215, + RGBA8UI = 36220, + RGB8UI = 36221, + RGBA32I = 36226, + RGB32I = 36227, + RGBA16I = 36232, + RGB16I = 36233, + RGBA8I = 36238, + RGB8I = 36239, + RED_INTEGER = 36244, + RGB_INTEGER = 36248, + RGBA_INTEGER = 36249, + SAMPLER_2D_ARRAY = 36289, + SAMPLER_2D_ARRAY_SHADOW = 36292, + SAMPLER_CUBE_SHADOW = 36293, + UNSIGNED_INT_VEC2 = 36294, + UNSIGNED_INT_VEC3 = 36295, + UNSIGNED_INT_VEC4 = 36296, + INT_SAMPLER_2D = 36298, + INT_SAMPLER_3D = 36299, + INT_SAMPLER_CUBE = 36300, + INT_SAMPLER_2D_ARRAY = 36303, + UNSIGNED_INT_SAMPLER_2D = 36306, + UNSIGNED_INT_SAMPLER_3D = 36307, + UNSIGNED_INT_SAMPLER_CUBE = 36308, + UNSIGNED_INT_SAMPLER_2D_ARRAY = 36311, + DEPTH_COMPONENT32F = 36012, + DEPTH32F_STENCIL8 = 36013, + FLOAT_32_UNSIGNED_INT_24_8_REV = 36269, + FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 33296, + FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 33297, + FRAMEBUFFER_ATTACHMENT_RED_SIZE = 33298, + FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 33299, + FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 33300, + FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 33301, + FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 33302, + FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 33303, + FRAMEBUFFER_DEFAULT = 33304, + UNSIGNED_INT_24_8 = 34042, + DEPTH24_STENCIL8 = 35056, + UNSIGNED_NORMALIZED = 35863, + DRAW_FRAMEBUFFER_BINDING = 36006, + READ_FRAMEBUFFER = 36008, + DRAW_FRAMEBUFFER = 36009, + READ_FRAMEBUFFER_BINDING = 36010, + RENDERBUFFER_SAMPLES = 36011, + FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 36052, + MAX_COLOR_ATTACHMENTS = 36063, + COLOR_ATTACHMENT1 = 36065, + COLOR_ATTACHMENT2 = 36066, + COLOR_ATTACHMENT3 = 36067, + COLOR_ATTACHMENT4 = 36068, + COLOR_ATTACHMENT5 = 36069, + COLOR_ATTACHMENT6 = 36070, + COLOR_ATTACHMENT7 = 36071, + COLOR_ATTACHMENT8 = 36072, + COLOR_ATTACHMENT9 = 36073, + COLOR_ATTACHMENT10 = 36074, + COLOR_ATTACHMENT11 = 36075, + COLOR_ATTACHMENT12 = 36076, + COLOR_ATTACHMENT13 = 36077, + COLOR_ATTACHMENT14 = 36078, + COLOR_ATTACHMENT15 = 36079, + FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 36182, + MAX_SAMPLES = 36183, + HALF_FLOAT = 5131, + RG = 33319, + RG_INTEGER = 33320, + R8 = 33321, + RG8 = 33323, + R16F = 33325, + R32F = 33326, + RG16F = 33327, + RG32F = 33328, + R8I = 33329, + R8UI = 33330, + R16I = 33331, + R16UI = 33332, + R32I = 33333, + R32UI = 33334, + RG8I = 33335, + RG8UI = 33336, + RG16I = 33337, + RG16UI = 33338, + RG32I = 33339, + RG32UI = 33340, + VERTEX_ARRAY_BINDING = 34229, + R8_SNORM = 36756, + RG8_SNORM = 36757, + RGB8_SNORM = 36758, + RGBA8_SNORM = 36759, + SIGNED_NORMALIZED = 36764, + COPY_READ_BUFFER = 36662, + COPY_WRITE_BUFFER = 36663, + COPY_READ_BUFFER_BINDING = 36662, + COPY_WRITE_BUFFER_BINDING = 36663, + UNIFORM_BUFFER = 35345, + UNIFORM_BUFFER_BINDING = 35368, + UNIFORM_BUFFER_START = 35369, + UNIFORM_BUFFER_SIZE = 35370, + MAX_VERTEX_UNIFORM_BLOCKS = 35371, + MAX_FRAGMENT_UNIFORM_BLOCKS = 35373, + MAX_COMBINED_UNIFORM_BLOCKS = 35374, + MAX_UNIFORM_BUFFER_BINDINGS = 35375, + MAX_UNIFORM_BLOCK_SIZE = 35376, + MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 35377, + MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 35379, + UNIFORM_BUFFER_OFFSET_ALIGNMENT = 35380, + ACTIVE_UNIFORM_BLOCKS = 35382, + UNIFORM_TYPE = 35383, + UNIFORM_SIZE = 35384, + UNIFORM_BLOCK_INDEX = 35386, + UNIFORM_OFFSET = 35387, + UNIFORM_ARRAY_STRIDE = 35388, + UNIFORM_MATRIX_STRIDE = 35389, + UNIFORM_IS_ROW_MAJOR = 35390, + UNIFORM_BLOCK_BINDING = 35391, + UNIFORM_BLOCK_DATA_SIZE = 35392, + UNIFORM_BLOCK_ACTIVE_UNIFORMS = 35394, + UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 35395, + UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 35396, + UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 35398, + INVALID_INDEX = 4294967295, + MAX_VERTEX_OUTPUT_COMPONENTS = 37154, + MAX_FRAGMENT_INPUT_COMPONENTS = 37157, + MAX_SERVER_WAIT_TIMEOUT = 37137, + OBJECT_TYPE = 37138, + SYNC_CONDITION = 37139, + SYNC_STATUS = 37140, + SYNC_FLAGS = 37141, + SYNC_FENCE = 37142, + SYNC_GPU_COMMANDS_COMPLETE = 37143, + UNSIGNALED = 37144, + SIGNALED = 37145, + ALREADY_SIGNALED = 37146, + TIMEOUT_EXPIRED = 37147, + CONDITION_SATISFIED = 37148, + WAIT_FAILED = 37149, + SYNC_FLUSH_COMMANDS_BIT = 1, + VERTEX_ATTRIB_ARRAY_DIVISOR = 35070, + ANY_SAMPLES_PASSED = 35887, + ANY_SAMPLES_PASSED_CONSERVATIVE = 36202, + SAMPLER_BINDING = 35097, + RGB10_A2UI = 36975, + INT_2_10_10_10_REV = 36255, + TRANSFORM_FEEDBACK = 36386, + TRANSFORM_FEEDBACK_PAUSED = 36387, + TRANSFORM_FEEDBACK_ACTIVE = 36388, + TRANSFORM_FEEDBACK_BINDING = 36389, + COMPRESSED_R11_EAC = 37488, + COMPRESSED_SIGNED_R11_EAC = 37489, + COMPRESSED_RG11_EAC = 37490, + COMPRESSED_SIGNED_RG11_EAC = 37491, + COMPRESSED_RGB8_ETC2 = 37492, + COMPRESSED_SRGB8_ETC2 = 37493, + COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37494, + COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37495, + COMPRESSED_RGBA8_ETC2_EAC = 37496, + COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 37497, + TEXTURE_IMMUTABLE_FORMAT = 37167, + MAX_ELEMENT_INDEX = 36203, + TEXTURE_IMMUTABLE_LEVELS = 33503, + MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047 +}/** + * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps +retrieved from Elevation Tiles of an an ArcGIS ImageService. + * @example + * var terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({ + url : 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer', + token : 'KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..' +}); +viewer.terrainProvider = terrainProvider; + + + * @param options - Object with the following properties: + * @param options.url - The URL of the ArcGIS ImageServer service. + * @param [options.token] - The authorization token to use to connect to the service. + * @param [options.ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. + If neither parameter is specified, the WGS84 ellipsoid is used. + */ +export class ArcGISTiledElevationTerrainProvider { + constructor(options: { + url: Resource | string | Promise | Promise; + token?: string; + ellipsoid?: Ellipsoid; + }); + /** + * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + errorEvent: Event; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true. + */ + credit: Credit; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true. + */ + tilingScheme: GeographicTilingScheme; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link TerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. + */ + availability: TileAvailability; + /** + * Requests the geometry for a given tile. This function should not be called before + {@link ArcGISTiledElevationTerrainProvider#ready} returns true. The result includes terrain + data and indicates that all child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets the maximum geometric error allowed in a tile at a given level. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * ArcType defines the path that should be taken connecting vertices. + */ +export enum ArcType { + /** + * Straight line that does not conform to the surface of the ellipsoid. + */ + NONE = 0, + /** + * Follow geodesic path. + */ + GEODESIC = 1, + /** + * Follow rhumb or loxodrome path. + */ + RHUMB = 2 +} + +/** + * A collection of key-value pairs that is stored as a hash for easy +lookup but also provides an array for fast iteration. + */ +export class AssociativeArray { + constructor(); + /** + * Gets the number of items in the collection. + */ + length: number; + /** + * Gets an unordered array of all values in the collection. + This is a live array that will automatically reflect the values in the collection, + it should not be modified directly. + */ + values: any[]; + /** + * Determines if the provided key is in the array. + * @param key - The key to check. + * @returns true if the key is in the array, false otherwise. + */ + contains(key: string | number): boolean; + /** + * Associates the provided key with the provided value. If the key already + exists, it is overwritten with the new value. + * @param key - A unique identifier. + * @param value - The value to associate with the provided key. + */ + set(key: string | number, value: any): void; + /** + * Retrieves the value associated with the provided key. + * @param key - The key whose value is to be retrieved. + * @returns The associated value, or undefined if the key does not exist in the collection. + */ + get(key: string | number): any; + /** + * Removes a key-value pair from the collection. + * @param key - The key to be removed. + * @returns True if it was removed, false if the key was not in the collection. + */ + remove(key: string | number): boolean; + /** + * Clears the collection. + */ + removeAll(): void; +} + +/** + * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes. + * @param [minimum = Cartesian3.ZERO] - The minimum point along the x, y, and z axes. + * @param [maximum = Cartesian3.ZERO] - The maximum point along the x, y, and z axes. + * @param [center] - The center of the box; automatically computed if not supplied. + */ +export class AxisAlignedBoundingBox { + constructor(minimum?: Cartesian3, maximum?: Cartesian3, center?: Cartesian3); + /** + * The minimum point defining the bounding box. + */ + minimum: Cartesian3; + /** + * The maximum point defining the bounding box. + */ + maximum: Cartesian3; + /** + * The center point of the bounding box. + */ + center: Cartesian3; + /** + * Computes an instance of an AxisAlignedBoundingBox. The box is determined by + finding the points spaced the farthest apart on the x, y, and z axes. + * @example + * // Compute an axis aligned bounding box enclosing two points. + var box = Cesium.AxisAlignedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]); + * @param positions - List of points that the bounding box will enclose. Each point must have a x, y, and z properties. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided. + */ + static fromPoints(positions: Cartesian3[], result?: AxisAlignedBoundingBox): AxisAlignedBoundingBox; + /** + * Duplicates a AxisAlignedBoundingBox instance. + * @param box - The bounding box to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new AxisAlignedBoundingBox instance if none was provided. (Returns undefined if box is undefined) + */ + static clone(box: AxisAlignedBoundingBox, result?: AxisAlignedBoundingBox): AxisAlignedBoundingBox; + /** + * Compares the provided AxisAlignedBoundingBox componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first AxisAlignedBoundingBox. + * @param [right] - The second AxisAlignedBoundingBox. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: AxisAlignedBoundingBox, right?: AxisAlignedBoundingBox): boolean; + /** + * Determines which side of a plane a box is located. + * @param box - The bounding box to test. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire box is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is + on the opposite side, and {@link Intersect.INTERSECTING} if the box + intersects the plane. + */ + static intersectPlane(box: AxisAlignedBoundingBox, plane: Plane): Intersect; + /** + * Duplicates this AxisAlignedBoundingBox instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided. + */ + clone(result?: AxisAlignedBoundingBox): AxisAlignedBoundingBox; + /** + * Determines which side of a plane this box is located. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire box is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is + on the opposite side, and {@link Intersect.INTERSECTING} if the box + intersects the plane. + */ + intersectPlane(plane: Plane): Intersect; + /** + * Compares this AxisAlignedBoundingBox against the provided AxisAlignedBoundingBox componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side AxisAlignedBoundingBox. + * @returns true if they are equal, false otherwise. + */ + equals(right?: AxisAlignedBoundingBox): boolean; +} + +/** + * Computes the barycentric coordinates for a point with respect to a triangle. + * @example + * // Returns Cartesian3.UNIT_X +var p = new Cesium.Cartesian3(-1.0, 0.0, 0.0); +var b = Cesium.barycentricCoordinates(p, + new Cesium.Cartesian3(-1.0, 0.0, 0.0), + new Cesium.Cartesian3( 1.0, 0.0, 0.0), + new Cesium.Cartesian3( 0.0, 1.0, 1.0)); + * @param point - The point to test. + * @param p0 - The first point of the triangle, corresponding to the barycentric x-axis. + * @param p1 - The second point of the triangle, corresponding to the barycentric y-axis. + * @param p2 - The third point of the triangle, corresponding to the barycentric z-axis. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ +export function barycentricCoordinates(point: Cartesian2 | Cartesian3, p0: Cartesian2 | Cartesian3, p1: Cartesian2 | Cartesian3, p2: Cartesian2 | Cartesian3, result?: Cartesian3): Cartesian3; + +/** + * Finds an item in a sorted array. + * @example + * // Create a comparator function to search through an array of numbers. +function comparator(a, b) { + return a - b; +}; +var numbers = [0, 2, 4, 6, 8]; +var index = Cesium.binarySearch(numbers, 6, comparator); // 3 + * @param array - The sorted array to search. + * @param itemToFind - The item to find in the array. + * @param comparator - The function to use to compare the item to + elements in the array. + * @returns The index of itemToFind in the array, if it exists. If itemToFind + does not exist, the return value is a negative number which is the bitwise complement (~) + of the index before which the itemToFind should be inserted in order to maintain the + sorted order of the array. + */ +export function binarySearch(array: any[], itemToFind: any, comparator: binarySearchComparator): number; + +/** + * A function used to compare two items while performing a binary search. + * @example + * function compareNumbers(a, b) { + return a - b; +} + * @param a - An item in the array. + * @param b - The item being searched for. + */ +export type binarySearchComparator = (a: any, b: any) => number; + +/** + * Provides geocoding through Bing Maps. + * @param options - Object with the following properties: + * @param options.key - A key to use with the Bing Maps geocoding service + */ +export class BingMapsGeocoderService { + constructor(options: { + key: string; + }); + /** + * The URL endpoint for the Bing geocoder service + */ + readonly url: string; + /** + * The key for the Bing geocoder service + */ + readonly key: string; + /** + * @param query - The query to be sent to the geocoder service + */ + geocode(query: string): Promise; +} + +/** + * A bounding rectangle given by a corner, width and height. + * @param [x = 0.0] - The x coordinate of the rectangle. + * @param [y = 0.0] - The y coordinate of the rectangle. + * @param [width = 0.0] - The width of the rectangle. + * @param [height = 0.0] - The height of the rectangle. + */ +export class BoundingRectangle { + constructor(x?: number, y?: number, width?: number, height?: number); + /** + * The x coordinate of the rectangle. + */ + x: number; + /** + * The y coordinate of the rectangle. + */ + y: number; + /** + * The width of the rectangle. + */ + width: number; + /** + * The height of the rectangle. + */ + height: number; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: BoundingRectangle, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: BoundingRectangle): BoundingRectangle; + /** + * Computes a bounding rectangle enclosing the list of 2D points. + The rectangle is oriented with the corner at the bottom left. + * @param positions - List of points that the bounding rectangle will enclose. Each point must have x and y properties. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + static fromPoints(positions: Cartesian2[], result?: BoundingRectangle): BoundingRectangle; + /** + * Computes a bounding rectangle from a rectangle. + * @param rectangle - The valid rectangle used to create a bounding rectangle. + * @param [projection = GeographicProjection] - The projection used to project the rectangle into 2D. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + static fromRectangle(rectangle: Rectangle, projection?: any, result?: BoundingRectangle): BoundingRectangle; + /** + * Duplicates a BoundingRectangle instance. + * @param rectangle - The bounding rectangle to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. (Returns undefined if rectangle is undefined) + */ + static clone(rectangle: BoundingRectangle, result?: BoundingRectangle): BoundingRectangle; + /** + * Computes a bounding rectangle that is the union of the left and right bounding rectangles. + * @param left - A rectangle to enclose in bounding rectangle. + * @param right - A rectangle to enclose in a bounding rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + static union(left: BoundingRectangle, right: BoundingRectangle, result?: BoundingRectangle): BoundingRectangle; + /** + * Computes a bounding rectangle by enlarging the provided rectangle until it contains the provided point. + * @param rectangle - A rectangle to expand. + * @param point - A point to enclose in a bounding rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + static expand(rectangle: BoundingRectangle, point: Cartesian2, result?: BoundingRectangle): BoundingRectangle; + /** + * Determines if two rectangles intersect. + * @param left - A rectangle to check for intersection. + * @param right - The other rectangle to check for intersection. + * @returns Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise. + */ + static intersect(left: BoundingRectangle, right: BoundingRectangle): Intersect; + /** + * Compares the provided BoundingRectangles componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first BoundingRectangle. + * @param [right] - The second BoundingRectangle. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: BoundingRectangle, right?: BoundingRectangle): boolean; + /** + * Duplicates this BoundingRectangle instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingRectangle instance if one was not provided. + */ + clone(result?: BoundingRectangle): BoundingRectangle; + /** + * Determines if this rectangle intersects with another. + * @param right - A rectangle to check for intersection. + * @returns Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise. + */ + intersect(right: BoundingRectangle): Intersect; + /** + * Compares this BoundingRectangle against the provided BoundingRectangle componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side BoundingRectangle. + * @returns true if they are equal, false otherwise. + */ + equals(right?: BoundingRectangle): boolean; +} + +/** + * A bounding sphere with a center and a radius. + * @param [center = Cartesian3.ZERO] - The center of the bounding sphere. + * @param [radius = 0.0] - The radius of the bounding sphere. + */ +export class BoundingSphere { + constructor(center?: Cartesian3, radius?: number); + /** + * The center point of the sphere. + */ + center: Cartesian3; + /** + * The radius of the sphere. + */ + radius: number; + /** + * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points. + The bounding sphere is computed by running two algorithms, a naive algorithm and + Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit. + * @param [positions] - An array of points that the bounding sphere will enclose. Each point must have x, y, and z properties. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if one was not provided. + */ + static fromPoints(positions?: Cartesian3[], result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere from a rectangle projected in 2D. + * @param [rectangle] - The rectangle around which to create a bounding sphere. + * @param [projection = GeographicProjection] - The projection used to project the rectangle into 2D. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromRectangle2D(rectangle?: Rectangle, projection?: any, result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere from a rectangle projected in 2D. The bounding sphere accounts for the + object's minimum and maximum heights over the rectangle. + * @param [rectangle] - The rectangle around which to create a bounding sphere. + * @param [projection = GeographicProjection] - The projection used to project the rectangle into 2D. + * @param [minimumHeight = 0.0] - The minimum height over the rectangle. + * @param [maximumHeight = 0.0] - The maximum height over the rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromRectangleWithHeights2D(rectangle?: Rectangle, projection?: any, minimumHeight?: number, maximumHeight?: number, result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere from a rectangle in 3D. The bounding sphere is created using a subsample of points + on the ellipsoid and contained in the rectangle. It may not be accurate for all rectangles on all types of ellipsoids. + * @param [rectangle] - The valid rectangle used to create a bounding sphere. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid used to determine positions of the rectangle. + * @param [surfaceHeight = 0.0] - The height above the surface of the ellipsoid. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromRectangle3D(rectangle?: Rectangle, ellipsoid?: Ellipsoid, surfaceHeight?: number, result?: BoundingSphere): BoundingSphere; + /** + * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are + stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two + algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to + ensure a tight fit. + * @example + * // Compute the bounding sphere from 3 positions, each specified relative to a center. + // In addition to the X, Y, and Z coordinates, the points array contains two additional + // elements per point which are ignored for the purpose of computing the bounding sphere. + var center = new Cesium.Cartesian3(1.0, 2.0, 3.0); + var points = [1.0, 2.0, 3.0, 0.1, 0.2, + 4.0, 5.0, 6.0, 0.1, 0.2, + 7.0, 8.0, 9.0, 0.1, 0.2]; + var sphere = Cesium.BoundingSphere.fromVertices(points, center, 5); + * @param [positions] - An array of points that the bounding sphere will enclose. Each point + is formed from three elements in the array in the order X, Y, Z. + * @param [center = Cartesian3.ZERO] - The position to which the positions are relative, which need not be the + origin of the coordinate system. This is useful when the positions are to be used for + relative-to-center (RTC) rendering. + * @param [stride = 3] - The number of array elements per vertex. It must be at least 3, but it may + be higher. Regardless of the value of this parameter, the X coordinate of the first position + is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index + 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If + the stride is 5, however, two array elements are skipped and the next position begins at array + index 5. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if one was not provided. + */ + static fromVertices(positions?: number[], center?: Cartesian3, stride?: number, result?: BoundingSphere): BoundingSphere; + /** + * Computes a tight-fitting bounding sphere enclosing a list of EncodedCartesian3s, where the points are + stored in parallel flat arrays in X, Y, Z, order. The bounding sphere is computed by running two + algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to + ensure a tight fit. + * @param [positionsHigh] - An array of high bits of the encoded cartesians that the bounding sphere will enclose. Each point + is formed from three elements in the array in the order X, Y, Z. + * @param [positionsLow] - An array of low bits of the encoded cartesians that the bounding sphere will enclose. Each point + is formed from three elements in the array in the order X, Y, Z. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if one was not provided. + */ + static fromEncodedCartesianVertices(positionsHigh?: number[], positionsLow?: number[], result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere from the corner points of an axis-aligned bounding box. The sphere + tighly and fully encompases the box. + * @example + * // Create a bounding sphere around the unit cube + var sphere = Cesium.BoundingSphere.fromCornerPoints(new Cesium.Cartesian3(-0.5, -0.5, -0.5), new Cesium.Cartesian3(0.5, 0.5, 0.5)); + * @param [corner] - The minimum height over the rectangle. + * @param [oppositeCorner] - The maximum height over the rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromCornerPoints(corner?: Cartesian3, oppositeCorner?: Cartesian3, result?: BoundingSphere): BoundingSphere; + /** + * Creates a bounding sphere encompassing an ellipsoid. + * @example + * var boundingSphere = Cesium.BoundingSphere.fromEllipsoid(ellipsoid); + * @param ellipsoid - The ellipsoid around which to create a bounding sphere. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromEllipsoid(ellipsoid: Ellipsoid, result?: BoundingSphere): BoundingSphere; + /** + * Computes a tight-fitting bounding sphere enclosing the provided array of bounding spheres. + * @param [boundingSpheres] - The array of bounding spheres. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromBoundingSpheres(boundingSpheres?: BoundingSphere[], result?: BoundingSphere): BoundingSphere; + /** + * Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box. + * @param orientedBoundingBox - The oriented bounding box. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static fromOrientedBoundingBox(orientedBoundingBox: OrientedBoundingBox, result?: BoundingSphere): BoundingSphere; + /** + * Duplicates a BoundingSphere instance. + * @param sphere - The bounding sphere to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. (Returns undefined if sphere is undefined) + */ + static clone(sphere: BoundingSphere, result?: BoundingSphere): BoundingSphere; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: BoundingSphere, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere that contains both the left and right bounding spheres. + * @param left - A sphere to enclose in a bounding sphere. + * @param right - A sphere to enclose in a bounding sphere. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static union(left: BoundingSphere, right: BoundingSphere, result?: BoundingSphere): BoundingSphere; + /** + * Computes a bounding sphere by enlarging the provided sphere to contain the provided point. + * @param sphere - A sphere to expand. + * @param point - A point to enclose in a bounding sphere. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static expand(sphere: BoundingSphere, point: Cartesian3, result?: BoundingSphere): BoundingSphere; + /** + * Determines which side of a plane a sphere is located. + * @param sphere - The bounding sphere to test. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire sphere is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is + on the opposite side, and {@link Intersect.INTERSECTING} if the sphere + intersects the plane. + */ + static intersectPlane(sphere: BoundingSphere, plane: Plane): Intersect; + /** + * Applies a 4x4 affine transformation matrix to a bounding sphere. + * @param sphere - The bounding sphere to apply the transformation to. + * @param transform - The transformation matrix to apply to the bounding sphere. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static transform(sphere: BoundingSphere, transform: Matrix4, result?: BoundingSphere): BoundingSphere; + /** + * Computes the estimated distance squared from the closest point on a bounding sphere to a point. + * @example + * // Sort bounding spheres from back to front + spheres.sort(function(a, b) { + return Cesium.BoundingSphere.distanceSquaredTo(b, camera.positionWC) - Cesium.BoundingSphere.distanceSquaredTo(a, camera.positionWC); + }); + * @param sphere - The sphere. + * @param cartesian - The point + * @returns The estimated distance squared from the bounding sphere to the point. + */ + static distanceSquaredTo(sphere: BoundingSphere, cartesian: Cartesian3): number; + /** + * Applies a 4x4 affine transformation matrix to a bounding sphere where there is no scale + The transformation matrix is not verified to have a uniform scale of 1. + This method is faster than computing the general bounding sphere transform using {@link BoundingSphere.transform}. + * @example + * var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid); + var boundingSphere = new Cesium.BoundingSphere(); + var newBoundingSphere = Cesium.BoundingSphere.transformWithoutScale(boundingSphere, modelMatrix); + * @param sphere - The bounding sphere to apply the transformation to. + * @param transform - The transformation matrix to apply to the bounding sphere. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static transformWithoutScale(sphere: BoundingSphere, transform: Matrix4, result?: BoundingSphere): BoundingSphere; + /** + * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction + plus/minus the radius of the bounding sphere. +
+ If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the + closest and farthest planes from position that intersect the bounding sphere. + * @param sphere - The bounding sphere to calculate the distance to. + * @param position - The position to calculate the distance from. + * @param direction - The direction from position. + * @param [result] - A Interval to store the nearest and farthest distances. + * @returns The nearest and farthest distances on the bounding sphere from position in direction. + */ + static computePlaneDistances(sphere: BoundingSphere, position: Cartesian3, direction: Cartesian3, result?: Interval): Interval; + /** + * Creates a bounding sphere in 2D from a bounding sphere in 3D world coordinates. + * @param sphere - The bounding sphere to transform to 2D. + * @param [projection = GeographicProjection] - The projection to 2D. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + static projectTo2D(sphere: BoundingSphere, projection?: any, result?: BoundingSphere): BoundingSphere; + /** + * Determines whether or not a sphere is hidden from view by the occluder. + * @param sphere - The bounding sphere surrounding the occludee object. + * @param occluder - The occluder. + * @returns true if the sphere is not visible; otherwise false. + */ + static isOccluded(sphere: BoundingSphere, occluder: Occluder): boolean; + /** + * Compares the provided BoundingSphere componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first BoundingSphere. + * @param [right] - The second BoundingSphere. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: BoundingSphere, right?: BoundingSphere): boolean; + /** + * Determines which side of a plane the sphere is located. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire sphere is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is + on the opposite side, and {@link Intersect.INTERSECTING} if the sphere + intersects the plane. + */ + intersectPlane(plane: Plane): Intersect; + /** + * Computes the estimated distance squared from the closest point on a bounding sphere to a point. + * @example + * // Sort bounding spheres from back to front + spheres.sort(function(a, b) { + return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC); + }); + * @param cartesian - The point + * @returns The estimated distance squared from the bounding sphere to the point. + */ + distanceSquaredTo(cartesian: Cartesian3): number; + /** + * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction + plus/minus the radius of the bounding sphere. +
+ If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the + closest and farthest planes from position that intersect the bounding sphere. + * @param position - The position to calculate the distance from. + * @param direction - The direction from position. + * @param [result] - A Interval to store the nearest and farthest distances. + * @returns The nearest and farthest distances on the bounding sphere from position in direction. + */ + computePlaneDistances(position: Cartesian3, direction: Cartesian3, result?: Interval): Interval; + /** + * Determines whether or not a sphere is hidden from view by the occluder. + * @param occluder - The occluder. + * @returns true if the sphere is not visible; otherwise false. + */ + isOccluded(occluder: Occluder): boolean; + /** + * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side BoundingSphere. + * @returns true if they are equal, false otherwise. + */ + equals(right?: BoundingSphere): boolean; + /** + * Duplicates this BoundingSphere instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new BoundingSphere instance if none was provided. + */ + clone(result?: BoundingSphere): BoundingSphere; + /** + * Computes the radius of the BoundingSphere. + * @returns The radius of the BoundingSphere. + */ + volume(): number; +} + +/** + * Describes a cube centered at the origin. + * @example + * var box = new Cesium.BoxGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY, + maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0), + minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0) +}); +var geometry = Cesium.BoxGeometry.createGeometry(box); + * @param options - Object with the following properties: + * @param options.minimum - The minimum x, y, and z coordinates of the box. + * @param options.maximum - The maximum x, y, and z coordinates of the box. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class BoxGeometry { + constructor(options: { + minimum: Cartesian3; + maximum: Cartesian3; + vertexFormat?: VertexFormat; + }); + /** + * Creates a cube centered at the origin given its dimensions. + * @example + * var box = Cesium.BoxGeometry.fromDimensions({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY, + dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0) + }); + var geometry = Cesium.BoxGeometry.createGeometry(box); + * @param options - Object with the following properties: + * @param options.dimensions - The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ + static fromDimensions(options: { + dimensions: Cartesian3; + vertexFormat?: VertexFormat; + }): BoxGeometry; + /** + * Creates a cube from the dimensions of an AxisAlignedBoundingBox. + * @example + * var aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ])); + var box = Cesium.BoxGeometry.fromAxisAlignedBoundingBox(aabb); + * @param boundingBox - A description of the AxisAlignedBoundingBox. + */ + static fromAxisAlignedBoundingBox(boundingBox: AxisAlignedBoundingBox): BoxGeometry; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: BoxGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new BoxGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: BoxGeometry): BoxGeometry; + /** + * Computes the geometric representation of a box, including its vertices, indices, and a bounding sphere. + * @param boxGeometry - A description of the box. + * @returns The computed vertices and indices. + */ + static createGeometry(boxGeometry: BoxGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a cube centered at the origin. + * @example + * var box = new Cesium.BoxOutlineGeometry({ + maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0), + minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0) +}); +var geometry = Cesium.BoxOutlineGeometry.createGeometry(box); + * @param options - Object with the following properties: + * @param options.minimum - The minimum x, y, and z coordinates of the box. + * @param options.maximum - The maximum x, y, and z coordinates of the box. + */ +export class BoxOutlineGeometry { + constructor(options: { + minimum: Cartesian3; + maximum: Cartesian3; + }); + /** + * Creates an outline of a cube centered at the origin given its dimensions. + * @example + * var box = Cesium.BoxOutlineGeometry.fromDimensions({ + dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0) + }); + var geometry = Cesium.BoxOutlineGeometry.createGeometry(box); + * @param options - Object with the following properties: + * @param options.dimensions - The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively. + */ + static fromDimensions(options: { + dimensions: Cartesian3; + }): BoxOutlineGeometry; + /** + * Creates an outline of a cube from the dimensions of an AxisAlignedBoundingBox. + * @example + * var aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ])); + var box = Cesium.BoxOutlineGeometry.fromAxisAlignedBoundingBox(aabb); + + + * @param boundingBox - A description of the AxisAlignedBoundingBox. + */ + static fromAxisAlignedBoundingBox(boundingBox: AxisAlignedBoundingBox): BoxOutlineGeometry; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: BoxOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new BoxOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: BoxOutlineGeometry): BoxOutlineGeometry; + /** + * Computes the geometric representation of an outline of a box, including its vertices, indices, and a bounding sphere. + * @param boxGeometry - A description of the box outline. + * @returns The computed vertices and indices. + */ + static createGeometry(boxGeometry: BoxOutlineGeometry): Geometry | undefined; +} + +/** + * Given a relative URL under the Cesium base URL, returns an absolute URL. + * @example + * var viewer = new Cesium.Viewer("cesiumContainer", { + imageryProvider: new Cesium.TileMapServiceImageryProvider({ + url: Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"), + }), + baseLayerPicker: false, +}); + * @param relativeUrl - The relative path. + * @returns The absolutely URL representation of the provided path. + */ +export function buildModuleUrl(relativeUrl: string): string; + +/** + * A browser-independent function to cancel an animation frame requested using {@link requestAnimationFrame}. + * @param requestID - The value returned by {@link requestAnimationFrame}. + */ +export function cancelAnimationFrame(requestID: number): void; + +/** + * A 2D Cartesian point. + * @param [x = 0.0] - The X component. + * @param [y = 0.0] - The Y component. + */ +export class Cartesian2 { + constructor(x?: number, y?: number); + /** + * The X component. + */ + x: number; + /** + * The Y component. + */ + y: number; + /** + * Creates a Cartesian2 instance from x and y coordinates. + * @param x - The x coordinate. + * @param y - The y coordinate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + static fromElements(x: number, y: number, result?: Cartesian2): Cartesian2; + /** + * Duplicates a Cartesian2 instance. + * @param cartesian - The Cartesian to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. (Returns undefined if cartesian is undefined) + */ + static clone(cartesian: Cartesian2, result?: Cartesian2): Cartesian2; + /** + * Creates a Cartesian2 instance from an existing Cartesian3. This simply takes the + x and y properties of the Cartesian3 and drops z. + * @param cartesian - The Cartesian3 instance to create a Cartesian2 instance from. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + static fromCartesian3(cartesian: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Creates a Cartesian2 instance from an existing Cartesian4. This simply takes the + x and y properties of the Cartesian4 and drops z and w. + * @param cartesian - The Cartesian4 instance to create a Cartesian2 instance from. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + static fromCartesian4(cartesian: Cartesian4, result?: Cartesian2): Cartesian2; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Cartesian2, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Cartesian2): Cartesian2; + /** + * Flattens an array of Cartesian2s into and array of components. + * @param array - The array of cartesians to pack. + * @param [result] - The array onto which to store the result. If this is a typed array, it must have array.length * 2 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 2) elements. + * @returns The packed array. + */ + static packArray(array: Cartesian2[], result?: number[]): number[]; + /** + * Unpacks an array of cartesian components into and array of Cartesian2s. + * @param array - The array of components to unpack. + * @param [result] - The array onto which to store the result. + * @returns The unpacked array. + */ + static unpackArray(array: number[], result?: Cartesian2[]): Cartesian2[]; + /** + * Creates a Cartesian2 from two consecutive elements in an array. + * @example + * // Create a Cartesian2 with (1.0, 2.0) + var v = [1.0, 2.0]; + var p = Cesium.Cartesian2.fromArray(v); + + // Create a Cartesian2 with (1.0, 2.0) using an offset into an array + var v2 = [0.0, 0.0, 1.0, 2.0]; + var p2 = Cesium.Cartesian2.fromArray(v2, 2); + * @param array - The array whose two consecutive elements correspond to the x and y components, respectively. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to the x component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Cartesian2): Cartesian2; + /** + * Computes the value of the maximum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the maximum component. + */ + static maximumComponent(cartesian: Cartesian2): number; + /** + * Computes the value of the minimum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the minimum component. + */ + static minimumComponent(cartesian: Cartesian2): number; + /** + * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the minimum components. + */ + static minimumByComponent(first: Cartesian2, second: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the maximum components. + */ + static maximumByComponent(first: Cartesian2, second: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the provided Cartesian's squared magnitude. + * @param cartesian - The Cartesian instance whose squared magnitude is to be computed. + * @returns The squared magnitude. + */ + static magnitudeSquared(cartesian: Cartesian2): number; + /** + * Computes the Cartesian's magnitude (length). + * @param cartesian - The Cartesian instance whose magnitude is to be computed. + * @returns The magnitude. + */ + static magnitude(cartesian: Cartesian2): number; + /** + * Computes the distance between two points. + * @example + * // Returns 1.0 + var d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(2.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distance(left: Cartesian2, right: Cartesian2): number; + /** + * Computes the squared distance between two points. Comparing squared distances + using this function is more efficient than comparing distances using {@link Cartesian2#distance}. + * @example + * // Returns 4.0, not 2.0 + var d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(3.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distanceSquared(left: Cartesian2, right: Cartesian2): number; + /** + * Computes the normalized form of the supplied Cartesian. + * @param cartesian - The Cartesian to be normalized. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static normalize(cartesian: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the dot (scalar) product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The dot product. + */ + static dot(left: Cartesian2, right: Cartesian2): number; + /** + * Computes the magnitude of the cross product that would result from implicitly setting the Z coordinate of the input vectors to 0 + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The cross product. + */ + static cross(left: Cartesian2, right: Cartesian2): number; + /** + * Computes the componentwise product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyComponents(left: Cartesian2, right: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the componentwise quotient of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideComponents(left: Cartesian2, right: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the componentwise sum of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Cartesian2, right: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the componentwise difference of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Cartesian2, right: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Multiplies the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be scaled. + * @param scalar - The scalar to multiply with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(cartesian: Cartesian2, scalar: number, result: Cartesian2): Cartesian2; + /** + * Divides the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be divided. + * @param scalar - The scalar to divide by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideByScalar(cartesian: Cartesian2, scalar: number, result: Cartesian2): Cartesian2; + /** + * Negates the provided Cartesian. + * @param cartesian - The Cartesian to be negated. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(cartesian: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the absolute value of the provided Cartesian. + * @param cartesian - The Cartesian whose absolute value is to be computed. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(cartesian: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the linear interpolation or extrapolation at t using the provided cartesians. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static lerp(start: Cartesian2, end: Cartesian2, t: number, result: Cartesian2): Cartesian2; + /** + * Returns the angle, in radians, between the provided Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The angle between the Cartesians. + */ + static angleBetween(left: Cartesian2, right: Cartesian2): number; + /** + * Returns the axis that is most orthogonal to the provided Cartesian. + * @param cartesian - The Cartesian on which to find the most orthogonal axis. + * @param result - The object onto which to store the result. + * @returns The most orthogonal axis. + */ + static mostOrthogonalAxis(cartesian: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Compares the provided Cartesians componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Cartesian2, right?: Cartesian2): boolean; + /** + * Compares the provided Cartesians componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Cartesian2, right?: Cartesian2, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * An immutable Cartesian2 instance initialized to (0.0, 0.0). + */ + static readonly ZERO: Cartesian2; + /** + * An immutable Cartesian2 instance initialized to (1.0, 0.0). + */ + static readonly UNIT_X: Cartesian2; + /** + * An immutable Cartesian2 instance initialized to (0.0, 1.0). + */ + static readonly UNIT_Y: Cartesian2; + /** + * Duplicates this Cartesian2 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. + */ + clone(result?: Cartesian2): Cartesian2; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side Cartesian. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Cartesian2): boolean; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [right] - The right hand side Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Cartesian2, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Creates a string representing this Cartesian in the format '(x, y)'. + * @returns A string representing the provided Cartesian in the format '(x, y)'. + */ + toString(): string; +} + +/** + * A 3D Cartesian point. + * @param [x = 0.0] - The X component. + * @param [y = 0.0] - The Y component. + * @param [z = 0.0] - The Z component. + */ +export class Cartesian3 { + constructor(x?: number, y?: number, z?: number); + /** + * The X component. + */ + x: number; + /** + * The Y component. + */ + y: number; + /** + * The Z component. + */ + z: number; + /** + * Converts the provided Spherical into Cartesian3 coordinates. + * @param spherical - The Spherical to be converted to Cartesian3. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static fromSpherical(spherical: Spherical, result?: Cartesian3): Cartesian3; + /** + * Creates a Cartesian3 instance from x, y and z coordinates. + * @param x - The x coordinate. + * @param y - The y coordinate. + * @param z - The z coordinate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static fromElements(x: number, y: number, z: number, result?: Cartesian3): Cartesian3; + /** + * Duplicates a Cartesian3 instance. + * @param cartesian - The Cartesian to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. (Returns undefined if cartesian is undefined) + */ + static clone(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Creates a Cartesian3 instance from an existing Cartesian4. This simply takes the + x, y, and z properties of the Cartesian4 and drops w. + * @param cartesian - The Cartesian4 instance to create a Cartesian3 instance from. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static fromCartesian4(cartesian: Cartesian4, result?: Cartesian3): Cartesian3; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Cartesian3, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Cartesian3): Cartesian3; + /** + * Flattens an array of Cartesian3s into an array of components. + * @param array - The array of cartesians to pack. + * @param [result] - The array onto which to store the result. If this is a typed array, it must have array.length * 3 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 3) elements. + * @returns The packed array. + */ + static packArray(array: Cartesian3[], result?: number[]): number[]; + /** + * Unpacks an array of cartesian components into an array of Cartesian3s. + * @param array - The array of components to unpack. + * @param [result] - The array onto which to store the result. + * @returns The unpacked array. + */ + static unpackArray(array: number[], result?: Cartesian3[]): Cartesian3[]; + /** + * Creates a Cartesian3 from three consecutive elements in an array. + * @example + * // Create a Cartesian3 with (1.0, 2.0, 3.0) + var v = [1.0, 2.0, 3.0]; + var p = Cesium.Cartesian3.fromArray(v); + + // Create a Cartesian3 with (1.0, 2.0, 3.0) using an offset into an array + var v2 = [0.0, 0.0, 1.0, 2.0, 3.0]; + var p2 = Cesium.Cartesian3.fromArray(v2, 2); + * @param array - The array whose three consecutive elements correspond to the x, y, and z components, respectively. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to the x component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Cartesian3): Cartesian3; + /** + * Computes the value of the maximum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the maximum component. + */ + static maximumComponent(cartesian: Cartesian3): number; + /** + * Computes the value of the minimum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the minimum component. + */ + static minimumComponent(cartesian: Cartesian3): number; + /** + * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the minimum components. + */ + static minimumByComponent(first: Cartesian3, second: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the maximum components. + */ + static maximumByComponent(first: Cartesian3, second: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the provided Cartesian's squared magnitude. + * @param cartesian - The Cartesian instance whose squared magnitude is to be computed. + * @returns The squared magnitude. + */ + static magnitudeSquared(cartesian: Cartesian3): number; + /** + * Computes the Cartesian's magnitude (length). + * @param cartesian - The Cartesian instance whose magnitude is to be computed. + * @returns The magnitude. + */ + static magnitude(cartesian: Cartesian3): number; + /** + * Computes the distance between two points. + * @example + * // Returns 1.0 + var d = Cesium.Cartesian3.distance(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(2.0, 0.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distance(left: Cartesian3, right: Cartesian3): number; + /** + * Computes the squared distance between two points. Comparing squared distances + using this function is more efficient than comparing distances using {@link Cartesian3#distance}. + * @example + * // Returns 4.0, not 2.0 + var d = Cesium.Cartesian3.distanceSquared(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(3.0, 0.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distanceSquared(left: Cartesian3, right: Cartesian3): number; + /** + * Computes the normalized form of the supplied Cartesian. + * @param cartesian - The Cartesian to be normalized. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static normalize(cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the dot (scalar) product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The dot product. + */ + static dot(left: Cartesian3, right: Cartesian3): number; + /** + * Computes the componentwise product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyComponents(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the componentwise quotient of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideComponents(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the componentwise sum of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the componentwise difference of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Multiplies the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be scaled. + * @param scalar - The scalar to multiply with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(cartesian: Cartesian3, scalar: number, result: Cartesian3): Cartesian3; + /** + * Divides the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be divided. + * @param scalar - The scalar to divide by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideByScalar(cartesian: Cartesian3, scalar: number, result: Cartesian3): Cartesian3; + /** + * Negates the provided Cartesian. + * @param cartesian - The Cartesian to be negated. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the absolute value of the provided Cartesian. + * @param cartesian - The Cartesian whose absolute value is to be computed. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the linear interpolation or extrapolation at t using the provided cartesians. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static lerp(start: Cartesian3, end: Cartesian3, t: number, result: Cartesian3): Cartesian3; + /** + * Returns the angle, in radians, between the provided Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The angle between the Cartesians. + */ + static angleBetween(left: Cartesian3, right: Cartesian3): number; + /** + * Returns the axis that is most orthogonal to the provided Cartesian. + * @param cartesian - The Cartesian on which to find the most orthogonal axis. + * @param result - The object onto which to store the result. + * @returns The most orthogonal axis. + */ + static mostOrthogonalAxis(cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Projects vector a onto vector b + * @param a - The vector that needs projecting + * @param b - The vector to project onto + * @param result - The result cartesian + * @returns The modified result parameter + */ + static projectVector(a: Cartesian3, b: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Compares the provided Cartesians componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Cartesian3, right?: Cartesian3): boolean; + /** + * Compares the provided Cartesians componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Cartesian3, right?: Cartesian3, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Computes the cross (outer) product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The cross product. + */ + static cross(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the midpoint between the right and left Cartesian. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The midpoint. + */ + static midpoint(left: Cartesian3, right: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Returns a Cartesian3 position from longitude and latitude values given in degrees. + * @example + * var position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0); + * @param longitude - The longitude, in degrees + * @param latitude - The latitude, in degrees + * @param [height = 0.0] - The height, in meters, above the ellipsoid. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - The object onto which to store the result. + * @returns The position + */ + static fromDegrees(longitude: number, latitude: number, height?: number, ellipsoid?: Ellipsoid, result?: Cartesian3): Cartesian3; + /** + * Returns a Cartesian3 position from longitude and latitude values given in radians. + * @example + * var position = Cesium.Cartesian3.fromRadians(-2.007, 0.645); + * @param longitude - The longitude, in radians + * @param latitude - The latitude, in radians + * @param [height = 0.0] - The height, in meters, above the ellipsoid. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - The object onto which to store the result. + * @returns The position + */ + static fromRadians(longitude: number, latitude: number, height?: number, ellipsoid?: Ellipsoid, result?: Cartesian3): Cartesian3; + /** + * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in degrees. + * @example + * var positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]); + * @param coordinates - A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...]. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the coordinates lie. + * @param [result] - An array of Cartesian3 objects to store the result. + * @returns The array of positions. + */ + static fromDegreesArray(coordinates: number[], ellipsoid?: Ellipsoid, result?: Cartesian3[]): Cartesian3[]; + /** + * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in radians. + * @example + * var positions = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]); + * @param coordinates - A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...]. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the coordinates lie. + * @param [result] - An array of Cartesian3 objects to store the result. + * @returns The array of positions. + */ + static fromRadiansArray(coordinates: number[], ellipsoid?: Ellipsoid, result?: Cartesian3[]): Cartesian3[]; + /** + * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in degrees. + * @example + * var positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]); + * @param coordinates - A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...]. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - An array of Cartesian3 objects to store the result. + * @returns The array of positions. + */ + static fromDegreesArrayHeights(coordinates: number[], ellipsoid?: Ellipsoid, result?: Cartesian3[]): Cartesian3[]; + /** + * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in radians. + * @example + * var positions = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]); + * @param coordinates - A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...]. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - An array of Cartesian3 objects to store the result. + * @returns The array of positions. + */ + static fromRadiansArrayHeights(coordinates: number[], ellipsoid?: Ellipsoid, result?: Cartesian3[]): Cartesian3[]; + /** + * An immutable Cartesian3 instance initialized to (0.0, 0.0, 0.0). + */ + static readonly ZERO: Cartesian3; + /** + * An immutable Cartesian3 instance initialized to (1.0, 0.0, 0.0). + */ + static readonly UNIT_X: Cartesian3; + /** + * An immutable Cartesian3 instance initialized to (0.0, 1.0, 0.0). + */ + static readonly UNIT_Y: Cartesian3; + /** + * An immutable Cartesian3 instance initialized to (0.0, 0.0, 1.0). + */ + static readonly UNIT_Z: Cartesian3; + /** + * Duplicates this Cartesian3 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + clone(result?: Cartesian3): Cartesian3; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side Cartesian. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Cartesian3): boolean; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [right] - The right hand side Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Cartesian3, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Creates a string representing this Cartesian in the format '(x, y, z)'. + * @returns A string representing this Cartesian in the format '(x, y, z)'. + */ + toString(): string; +} + +/** + * A 4D Cartesian point. + * @param [x = 0.0] - The X component. + * @param [y = 0.0] - The Y component. + * @param [z = 0.0] - The Z component. + * @param [w = 0.0] - The W component. + */ +export class Cartesian4 { + constructor(x?: number, y?: number, z?: number, w?: number); + /** + * The X component. + */ + x: number; + /** + * The Y component. + */ + y: number; + /** + * The Z component. + */ + z: number; + /** + * The W component. + */ + w: number; + /** + * Creates a Cartesian4 instance from x, y, z and w coordinates. + * @param x - The x coordinate. + * @param y - The y coordinate. + * @param z - The z coordinate. + * @param w - The w coordinate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. + */ + static fromElements(x: number, y: number, z: number, w: number, result?: Cartesian4): Cartesian4; + /** + * Creates a Cartesian4 instance from a {@link Color}. red, green, blue, + and alpha map to x, y, z, and w, respectively. + * @param color - The source color. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. + */ + static fromColor(color: Color, result?: Cartesian4): Cartesian4; + /** + * Duplicates a Cartesian4 instance. + * @param cartesian - The Cartesian to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. (Returns undefined if cartesian is undefined) + */ + static clone(cartesian: Cartesian4, result?: Cartesian4): Cartesian4; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Cartesian4, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Cartesian4): Cartesian4; + /** + * Flattens an array of Cartesian4s into and array of components. + * @param array - The array of cartesians to pack. + * @param [result] - The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements. + * @returns The packed array. + */ + static packArray(array: Cartesian4[], result?: number[]): number[]; + /** + * Unpacks an array of cartesian components into and array of Cartesian4s. + * @param array - The array of components to unpack. + * @param [result] - The array onto which to store the result. + * @returns The unpacked array. + */ + static unpackArray(array: number[], result?: Cartesian4[]): Cartesian4[]; + /** + * Creates a Cartesian4 from four consecutive elements in an array. + * @example + * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) + var v = [1.0, 2.0, 3.0, 4.0]; + var p = Cesium.Cartesian4.fromArray(v); + + // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) using an offset into an array + var v2 = [0.0, 0.0, 1.0, 2.0, 3.0, 4.0]; + var p2 = Cesium.Cartesian4.fromArray(v2, 2); + * @param array - The array whose four consecutive elements correspond to the x, y, z, and w components, respectively. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to the x component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Cartesian4): Cartesian4; + /** + * Computes the value of the maximum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the maximum component. + */ + static maximumComponent(cartesian: Cartesian4): number; + /** + * Computes the value of the minimum component for the supplied Cartesian. + * @param cartesian - The cartesian to use. + * @returns The value of the minimum component. + */ + static minimumComponent(cartesian: Cartesian4): number; + /** + * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the minimum components. + */ + static minimumByComponent(first: Cartesian4, second: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. + * @param first - A cartesian to compare. + * @param second - A cartesian to compare. + * @param result - The object into which to store the result. + * @returns A cartesian with the maximum components. + */ + static maximumByComponent(first: Cartesian4, second: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the provided Cartesian's squared magnitude. + * @param cartesian - The Cartesian instance whose squared magnitude is to be computed. + * @returns The squared magnitude. + */ + static magnitudeSquared(cartesian: Cartesian4): number; + /** + * Computes the Cartesian's magnitude (length). + * @param cartesian - The Cartesian instance whose magnitude is to be computed. + * @returns The magnitude. + */ + static magnitude(cartesian: Cartesian4): number; + /** + * Computes the 4-space distance between two points. + * @example + * // Returns 1.0 + var d = Cesium.Cartesian4.distance( + new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0), + new Cesium.Cartesian4(2.0, 0.0, 0.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distance(left: Cartesian4, right: Cartesian4): number; + /** + * Computes the squared distance between two points. Comparing squared distances + using this function is more efficient than comparing distances using {@link Cartesian4#distance}. + * @example + * // Returns 4.0, not 2.0 + var d = Cesium.Cartesian4.distance( + new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0), + new Cesium.Cartesian4(3.0, 0.0, 0.0, 0.0)); + * @param left - The first point to compute the distance from. + * @param right - The second point to compute the distance to. + * @returns The distance between two points. + */ + static distanceSquared(left: Cartesian4, right: Cartesian4): number; + /** + * Computes the normalized form of the supplied Cartesian. + * @param cartesian - The Cartesian to be normalized. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static normalize(cartesian: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the dot (scalar) product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @returns The dot product. + */ + static dot(left: Cartesian4, right: Cartesian4): number; + /** + * Computes the componentwise product of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyComponents(left: Cartesian4, right: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the componentwise quotient of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideComponents(left: Cartesian4, right: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the componentwise sum of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Cartesian4, right: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the componentwise difference of two Cartesians. + * @param left - The first Cartesian. + * @param right - The second Cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Cartesian4, right: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Multiplies the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be scaled. + * @param scalar - The scalar to multiply with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(cartesian: Cartesian4, scalar: number, result: Cartesian4): Cartesian4; + /** + * Divides the provided Cartesian componentwise by the provided scalar. + * @param cartesian - The Cartesian to be divided. + * @param scalar - The scalar to divide by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideByScalar(cartesian: Cartesian4, scalar: number, result: Cartesian4): Cartesian4; + /** + * Negates the provided Cartesian. + * @param cartesian - The Cartesian to be negated. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(cartesian: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the absolute value of the provided Cartesian. + * @param cartesian - The Cartesian whose absolute value is to be computed. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(cartesian: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the linear interpolation or extrapolation at t using the provided cartesians. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static lerp(start: Cartesian4, end: Cartesian4, t: number, result: Cartesian4): Cartesian4; + /** + * Returns the axis that is most orthogonal to the provided Cartesian. + * @param cartesian - The Cartesian on which to find the most orthogonal axis. + * @param result - The object onto which to store the result. + * @returns The most orthogonal axis. + */ + static mostOrthogonalAxis(cartesian: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Compares the provided Cartesians componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Cartesian4, right?: Cartesian4): boolean; + /** + * Compares the provided Cartesians componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [left] - The first Cartesian. + * @param [right] - The second Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Cartesian4, right?: Cartesian4, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 0.0). + */ + static readonly ZERO: Cartesian4; + /** + * An immutable Cartesian4 instance initialized to (1.0, 0.0, 0.0, 0.0). + */ + static readonly UNIT_X: Cartesian4; + /** + * An immutable Cartesian4 instance initialized to (0.0, 1.0, 0.0, 0.0). + */ + static readonly UNIT_Y: Cartesian4; + /** + * An immutable Cartesian4 instance initialized to (0.0, 0.0, 1.0, 0.0). + */ + static readonly UNIT_Z: Cartesian4; + /** + * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 1.0). + */ + static readonly UNIT_W: Cartesian4; + /** + * Duplicates this Cartesian4 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian4 instance if one was not provided. + */ + clone(result?: Cartesian4): Cartesian4; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side Cartesian. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Cartesian4): boolean; + /** + * Compares this Cartesian against the provided Cartesian componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [right] - The right hand side Cartesian. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Cartesian4, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Creates a string representing this Cartesian in the format '(x, y, z, w)'. + * @returns A string representing the provided Cartesian in the format '(x, y, z, w)'. + */ + toString(): string; + /** + * Packs an arbitrary floating point value to 4 values representable using uint8. + * @param value - A floating point number. + * @param [result] - The Cartesian4 that will contain the packed float. + * @returns A Cartesian4 representing the float packed to values in x, y, z, and w. + */ + static packFloat(value: number, result?: Cartesian4): Cartesian4; +} + +/** + * A position defined by longitude, latitude, and height. + * @param [longitude = 0.0] - The longitude, in radians. + * @param [latitude = 0.0] - The latitude, in radians. + * @param [height = 0.0] - The height, in meters, above the ellipsoid. + */ +export class Cartographic { + constructor(longitude?: number, latitude?: number, height?: number); + /** + * The longitude, in radians. + */ + longitude: number; + /** + * The latitude, in radians. + */ + latitude: number; + /** + * The height, in meters, above the ellipsoid. + */ + height: number; + /** + * Creates a new Cartographic instance from longitude and latitude + specified in radians. + * @param longitude - The longitude, in radians. + * @param latitude - The latitude, in radians. + * @param [height = 0.0] - The height, in meters, above the ellipsoid. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if one was not provided. + */ + static fromRadians(longitude: number, latitude: number, height?: number, result?: Cartographic): Cartographic; + /** + * Creates a new Cartographic instance from longitude and latitude + specified in degrees. The values in the resulting object will + be in radians. + * @param longitude - The longitude, in degrees. + * @param latitude - The latitude, in degrees. + * @param [height = 0.0] - The height, in meters, above the ellipsoid. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if one was not provided. + */ + static fromDegrees(longitude: number, latitude: number, height?: number, result?: Cartographic): Cartographic; + /** + * Creates a new Cartographic instance from a Cartesian position. The values in the + resulting object will be in radians. + * @param cartesian - The Cartesian position to convert to cartographic representation. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid. + */ + static fromCartesian(cartesian: Cartesian3, ellipsoid?: Ellipsoid, result?: Cartographic): Cartographic; + /** + * Creates a new Cartesian3 instance from a Cartographic input. The values in the inputted + object should be in radians. + * @param cartographic - Input to be converted into a Cartesian3 output. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the position lies. + * @param [result] - The object onto which to store the result. + * @returns The position + */ + static toCartesian(cartographic: Cartographic, ellipsoid?: Ellipsoid, result?: Cartesian3): Cartesian3; + /** + * Duplicates a Cartographic instance. + * @param cartographic - The cartographic to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if one was not provided. (Returns undefined if cartographic is undefined) + */ + static clone(cartographic: Cartographic, result?: Cartographic): Cartographic; + /** + * Compares the provided cartographics componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first cartographic. + * @param [right] - The second cartographic. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Cartographic, right?: Cartographic): boolean; + /** + * Compares the provided cartographics componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [left] - The first cartographic. + * @param [right] - The second cartographic. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Cartographic, right?: Cartographic, epsilon?: number): boolean; + /** + * An immutable Cartographic instance initialized to (0.0, 0.0, 0.0). + */ + static readonly ZERO: Cartographic; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if one was not provided. + */ + clone(result?: Cartographic): Cartographic; + /** + * Compares the provided against this cartographic componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The second cartographic. + * @returns true if left and right are equal, false otherwise. + */ + equals(right?: Cartographic): boolean; + /** + * Compares the provided against this cartographic componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The second cartographic. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Cartographic, epsilon?: number): boolean; + /** + * Creates a string representing this cartographic in the format '(longitude, latitude, height)'. + * @returns A string representing the provided cartographic in the format '(longitude, latitude, height)'. + */ + toString(): string; +} + +/** + * Geocodes queries containing longitude and latitude coordinates and an optional height. +Query format: `longitude latitude (height)` with longitude/latitude in degrees and height in meters. + */ +export class CartographicGeocoderService { + constructor(); + /** + * @param query - The query to be sent to the geocoder service + */ + geocode(query: string): Promise; +} + +/** + * A Catmull-Rom spline is a cubic spline where the tangent at control points, +except the first and last, are computed using the previous and next control points. +Catmull-Rom splines are in the class C1. + * @example + * // spline above the earth from Philadelphia to Los Angeles +var spline = new Cesium.CatmullRomSpline({ + times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ], + points : [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ] +}); + +var p0 = spline.evaluate(times[i]); // equal to positions[i] +var p1 = spline.evaluate(times[i] + delta); // interpolated value when delta < times[i + 1] - times[i] + * @param options - Object with the following properties: + * @param options.times - An array of strictly increasing, unit-less, floating-point times at each point. + The values are in no way connected to the clock time. They are the parameterization for the curve. + * @param options.points - The array of {@link Cartesian3} control points. + * @param [options.firstTangent] - The tangent of the curve at the first control point. + If the tangent is not given, it will be estimated. + * @param [options.lastTangent] - The tangent of the curve at the last control point. + If the tangent is not given, it will be estimated. + */ +export class CatmullRomSpline { + constructor(options: { + times: number[]; + points: Cartesian3[]; + firstTangent?: Cartesian3; + lastTangent?: Cartesian3; + }); + /** + * An array of times for the control points. + */ + readonly times: number[]; + /** + * An array of {@link Cartesian3} control points. + */ + readonly points: Cartesian3[]; + /** + * The tangent at the first control point. + */ + readonly firstTangent: Cartesian3; + /** + * The tangent at the last control point. + */ + readonly lastTangent: Cartesian3; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around to the updated animation. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: Cartesian3): Cartesian3; +} + +/** + * A {@link TerrainProvider} that accesses terrain data in a Cesium terrain format. + * @example + * // Create Arctic DEM terrain with normals. +var viewer = new Cesium.Viewer('cesiumContainer', { + terrainProvider : new Cesium.CesiumTerrainProvider({ + url : Cesium.IonResource.fromAssetId(3956), + requestVertexNormals : true + }) +}); + * @param options - Object with the following properties: + * @param options.url - The URL of the Cesium terrain server. + * @param [options.requestVertexNormals = false] - Flag that indicates if the client should request additional lighting information from the server, in the form of per vertex normals if available. + * @param [options.requestWaterMask = false] - Flag that indicates if the client should request per tile water masks from the server, if available. + * @param [options.requestMetadata = true] - Flag that indicates if the client should request per tile metadata from the server, if available. + * @param [options.ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + */ +export class CesiumTerrainProvider { + constructor(options: { + url: Resource | string | Promise | Promise; + requestVertexNormals?: boolean; + requestWaterMask?: boolean; + requestMetadata?: boolean; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }); + /** + * Requests the geometry for a given tile. This function should not be called before + {@link CesiumTerrainProvider#ready} returns true. The result must include terrain data and + may optionally include a water mask and an indication of which child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + errorEvent: Event; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should not be called before {@link CesiumTerrainProvider#ready} returns true. + */ + credit: Credit; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link CesiumTerrainProvider#ready} returns true. + */ + tilingScheme: GeographicTilingScheme; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link CesiumTerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link CesiumTerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets a value indicating whether or not the requested tiles include metadata. + This function should not be called before {@link CesiumTerrainProvider#ready} returns true. + */ + hasMetadata: boolean; + /** + * Boolean flag that indicates if the client should request vertex normals from the server. + Vertex normals data is appended to the standard tile mesh data only if the client requests the vertex normals and + if the server provides vertex normals. + */ + requestVertexNormals: boolean; + /** + * Boolean flag that indicates if the client should request a watermask from the server. + Watermask data is appended to the standard tile mesh data only if the client requests the watermask and + if the server provides a watermask. + */ + requestWaterMask: boolean; + /** + * Boolean flag that indicates if the client should request metadata from the server. + Metadata is appended to the standard tile mesh data only if the client requests the metadata and + if the server provides a metadata. + */ + requestMetadata: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link CesiumTerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. Note that this reflects tiles that are known to be available currently. + Additional tiles may be discovered to be available in the future, e.g. if availability information + exists deeper in the tree rather than it all being discoverable at the root. However, a tile that + is available now will not become unavailable in the future. + */ + availability: TileAvailability; + /** + * Gets the maximum geometric error allowed in a tile at a given level. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported or availability is unknown, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * A description of a circle on the ellipsoid. Circle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * // Create a circle. +var circle = new Cesium.CircleGeometry({ + center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), + radius : 100000.0 +}); +var geometry = Cesium.CircleGeometry.createGeometry(circle); + * @param options - Object with the following properties: + * @param options.center - The circle's center point in the fixed frame. + * @param options.radius - The radius in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid the circle will be on. + * @param [options.height = 0.0] - The distance in meters between the circle and the ellipsoid surface. + * @param [options.granularity = 0.02] - The angular distance between points on the circle in radians. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.extrudedHeight = 0.0] - The distance in meters between the circle's extruded face and the ellipsoid surface. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + */ +export class CircleGeometry { + constructor(options: { + center: Cartesian3; + radius: number; + ellipsoid?: Ellipsoid; + height?: number; + granularity?: number; + vertexFormat?: VertexFormat; + extrudedHeight?: number; + stRotation?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CircleGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CircleGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CircleGeometry): CircleGeometry; + /** + * Computes the geometric representation of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param circleGeometry - A description of the circle. + * @returns The computed vertices and indices. + */ + static createGeometry(circleGeometry: CircleGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a circle on the ellipsoid. + * @example + * // Create a circle. +var circle = new Cesium.CircleOutlineGeometry({ + center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), + radius : 100000.0 +}); +var geometry = Cesium.CircleOutlineGeometry.createGeometry(circle); + * @param options - Object with the following properties: + * @param options.center - The circle's center point in the fixed frame. + * @param options.radius - The radius in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid the circle will be on. + * @param [options.height = 0.0] - The distance in meters between the circle and the ellipsoid surface. + * @param [options.granularity = 0.02] - The angular distance between points on the circle in radians. + * @param [options.extrudedHeight = 0.0] - The distance in meters between the circle's extruded face and the ellipsoid surface. + * @param [options.numberOfVerticalLines = 16] - Number of lines to draw between the top and bottom of an extruded circle. + */ +export class CircleOutlineGeometry { + constructor(options: { + center: Cartesian3; + radius: number; + ellipsoid?: Ellipsoid; + height?: number; + granularity?: number; + extrudedHeight?: number; + numberOfVerticalLines?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CircleOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CircleOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CircleOutlineGeometry): CircleOutlineGeometry; + /** + * Computes the geometric representation of an outline of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param circleGeometry - A description of the circle. + * @returns The computed vertices and indices. + */ + static createGeometry(circleGeometry: CircleOutlineGeometry): Geometry | undefined; +} + +/** + * A simple clock for keeping track of simulated time. + * @example + * // Create a clock that loops on Christmas day 2013 and runs in real-time. +var clock = new Cesium.Clock({ + startTime : Cesium.JulianDate.fromIso8601("2013-12-25"), + currentTime : Cesium.JulianDate.fromIso8601("2013-12-25"), + stopTime : Cesium.JulianDate.fromIso8601("2013-12-26"), + clockRange : Cesium.ClockRange.LOOP_STOP, + clockStep : Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER +}); + * @param [options] - Object with the following properties: + * @param [options.startTime] - The start time of the clock. + * @param [options.stopTime] - The stop time of the clock. + * @param [options.currentTime] - The current time. + * @param [options.multiplier = 1.0] - Determines how much time advances when {@link Clock#tick} is called, negative values allow for advancing backwards. + * @param [options.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER] - Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent. + * @param [options.clockRange = ClockRange.UNBOUNDED] - Determines how the clock should behave when {@link Clock#startTime} or {@link Clock#stopTime} is reached. + * @param [options.canAnimate = true] - Indicates whether {@link Clock#tick} can advance time. This could be false if data is being buffered, for example. The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true. + * @param [options.shouldAnimate = false] - Indicates whether {@link Clock#tick} should attempt to advance time. The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true. + */ +export class Clock { + constructor(options?: { + startTime?: JulianDate; + stopTime?: JulianDate; + currentTime?: JulianDate; + multiplier?: number; + clockStep?: ClockStep; + clockRange?: ClockRange; + canAnimate?: boolean; + shouldAnimate?: boolean; + }); + /** + * The start time of the clock. + */ + startTime: JulianDate; + /** + * The stop time of the clock. + */ + stopTime: JulianDate; + /** + * Determines how the clock should behave when + {@link Clock#startTime} or {@link Clock#stopTime} + is reached. + */ + clockRange: ClockRange; + /** + * Indicates whether {@link Clock#tick} can advance time. This could be false if data is being buffered, + for example. The clock will only advance time when both + {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true. + */ + canAnimate: boolean; + /** + * An {@link Event} that is fired whenever {@link Clock#tick} is called. + */ + onTick: Event; + /** + * An {@link Event} that is fired whenever {@link Clock#stopTime} is reached. + */ + onStop: Event; + /** + * The current time. + Changing this property will change + {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to + {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}. + */ + currentTime: JulianDate; + /** + * Gets or sets how much time advances when {@link Clock#tick} is called. Negative values allow for advancing backwards. + If {@link Clock#clockStep} is set to {@link ClockStep.TICK_DEPENDENT}, this is the number of seconds to advance. + If {@link Clock#clockStep} is set to {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}, this value is multiplied by the + elapsed system time since the last call to {@link Clock#tick}. + Changing this property will change + {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to + {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}. + */ + multiplier: number; + /** + * Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent. + Changing this property to {@link ClockStep.SYSTEM_CLOCK} will set + {@link Clock#multiplier} to 1.0, {@link Clock#shouldAnimate} to true, and + {@link Clock#currentTime} to the current system clock time. + */ + clockStep: ClockStep; + /** + * Indicates whether {@link Clock#tick} should attempt to advance time. + The clock will only advance time when both + {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true. + Changing this property will change + {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to + {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}. + */ + shouldAnimate: boolean; + /** + * Advances the clock from the current time based on the current configuration options. + tick should be called every frame, regardless of whether animation is taking place + or not. To control animation, use the {@link Clock#shouldAnimate} property. + * @returns The new value of the {@link Clock#currentTime} property. + */ + tick(): JulianDate; +} + +/** + * Constants used by {@link Clock#tick} to determine behavior +when {@link Clock#startTime} or {@link Clock#stopTime} is reached. + */ +export enum ClockRange { + /** + * {@link Clock#tick} will always advances the clock in its current direction. + */ + UNBOUNDED = 0, + /** + * When {@link Clock#startTime} or {@link Clock#stopTime} is reached, + {@link Clock#tick} will not advance {@link Clock#currentTime} any further. + */ + CLAMPED = 1, + /** + * When {@link Clock#stopTime} is reached, {@link Clock#tick} will advance + {@link Clock#currentTime} to the opposite end of the interval. When + time is moving backwards, {@link Clock#tick} will not advance past + {@link Clock#startTime} + */ + LOOP_STOP = 2 +} + +/** + * Constants to determine how much time advances with each call +to {@link Clock#tick}. + */ +export enum ClockStep { + /** + * {@link Clock#tick} advances the current time by a fixed step, + which is the number of seconds specified by {@link Clock#multiplier}. + */ + TICK_DEPENDENT = 0, + /** + * {@link Clock#tick} advances the current time by the amount of system + time elapsed since the previous call multiplied by {@link Clock#multiplier}. + */ + SYSTEM_CLOCK_MULTIPLIER = 1, + /** + * {@link Clock#tick} sets the clock to the current system time; + ignoring all other settings. + */ + SYSTEM_CLOCK = 2 +} + +/** + * Clones an object, returning a new object containing the same properties. + * @param object - The object to clone. + * @param [deep = false] - If true, all properties will be deep cloned recursively. + * @returns The cloned object. + */ +export function clone(object: any, deep?: boolean): any; + +/** + * A color, specified using red, green, blue, and alpha values, +which range from 0 (no intensity) to 1.0 (full intensity). + * @param [red = 1.0] - The red component. + * @param [green = 1.0] - The green component. + * @param [blue = 1.0] - The blue component. + * @param [alpha = 1.0] - The alpha component. + */ +export class Color { + constructor(red?: number, green?: number, blue?: number, alpha?: number); + /** + * The red component. + */ + red: number; + /** + * The green component. + */ + green: number; + /** + * The blue component. + */ + blue: number; + /** + * The alpha component. + */ + alpha: number; + /** + * Creates a Color instance from a {@link Cartesian4}. x, y, z, + and w map to red, green, blue, and alpha, respectively. + * @param cartesian - The source cartesian. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + static fromCartesian4(cartesian: Cartesian4, result?: Color): Color; + /** + * Creates a new Color specified using red, green, blue, and alpha values + that are in the range of 0 to 255, converting them internally to a range of 0.0 to 1.0. + * @param [red = 255] - The red component. + * @param [green = 255] - The green component. + * @param [blue = 255] - The blue component. + * @param [alpha = 255] - The alpha component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + static fromBytes(red?: number, green?: number, blue?: number, alpha?: number, result?: Color): Color; + /** + * Creates a new Color that has the same red, green, and blue components + of the specified color, but with the specified alpha value. + * @example + * var translucentRed = Cesium.Color.fromAlpha(Cesium.Color.RED, 0.9); + * @param color - The base color + * @param alpha - The new alpha component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + static fromAlpha(color: Color, alpha: number, result?: Color): Color; + /** + * Creates a new Color from a single numeric unsigned 32-bit RGBA value, using the endianness + of the system. + * @example + * var color = Cesium.Color.fromRgba(0x67ADDFFF); + * @param rgba - A single numeric unsigned 32-bit RGBA value. + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The color object. + */ + static fromRgba(rgba: number, result?: Color): Color; + /** + * Creates a Color instance from hue, saturation, and lightness. + * @param [hue = 0] - The hue angle 0...1 + * @param [saturation = 0] - The saturation value 0...1 + * @param [lightness = 0] - The lightness value 0...1 + * @param [alpha = 1.0] - The alpha component 0...1 + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The color object. + */ + static fromHsl(hue?: number, saturation?: number, lightness?: number, alpha?: number, result?: Color): Color; + /** + * Creates a random color using the provided options. For reproducible random colors, you should + call {@link Math#setRandomNumberSeed} once at the beginning of your application. + * @example + * //Create a completely random color + var color = Cesium.Color.fromRandom(); + + //Create a random shade of yellow. + var color = Cesium.Color.fromRandom({ + red : 1.0, + green : 1.0, + alpha : 1.0 + }); + + //Create a random bright color. + var color = Cesium.Color.fromRandom({ + minimumRed : 0.75, + minimumGreen : 0.75, + minimumBlue : 0.75, + alpha : 1.0 + }); + * @param [options] - Object with the following properties: + * @param [options.red] - If specified, the red component to use instead of a randomized value. + * @param [options.minimumRed = 0.0] - The maximum red value to generate if none was specified. + * @param [options.maximumRed = 1.0] - The minimum red value to generate if none was specified. + * @param [options.green] - If specified, the green component to use instead of a randomized value. + * @param [options.minimumGreen = 0.0] - The maximum green value to generate if none was specified. + * @param [options.maximumGreen = 1.0] - The minimum green value to generate if none was specified. + * @param [options.blue] - If specified, the blue component to use instead of a randomized value. + * @param [options.minimumBlue = 0.0] - The maximum blue value to generate if none was specified. + * @param [options.maximumBlue = 1.0] - The minimum blue value to generate if none was specified. + * @param [options.alpha] - If specified, the alpha component to use instead of a randomized value. + * @param [options.minimumAlpha = 0.0] - The maximum alpha value to generate if none was specified. + * @param [options.maximumAlpha = 1.0] - The minimum alpha value to generate if none was specified. + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + static fromRandom(options?: { + red?: number; + minimumRed?: number; + maximumRed?: number; + green?: number; + minimumGreen?: number; + maximumGreen?: number; + blue?: number; + minimumBlue?: number; + maximumBlue?: number; + alpha?: number; + minimumAlpha?: number; + maximumAlpha?: number; + }, result?: Color): Color; + /** + * Creates a Color instance from a CSS color value. + * @example + * var cesiumBlue = Cesium.Color.fromCssColorString('#67ADDF'); + var green = Cesium.Color.fromCssColorString('green'); + * @param color - The CSS color value in #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), or hsla() format. + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The color object, or undefined if the string was not a valid CSS color. + */ + static fromCssColorString(color: string, result?: Color): Color; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Color, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Color): Color; + /** + * Converts a 'byte' color component in the range of 0 to 255 into + a 'float' color component in the range of 0 to 1.0. + * @param number - The number to be converted. + * @returns The converted number. + */ + static byteToFloat(number: number): number; + /** + * Converts a 'float' color component in the range of 0 to 1.0 into + a 'byte' color component in the range of 0 to 255. + * @param number - The number to be converted. + * @returns The converted number. + */ + static floatToByte(number: number): number; + /** + * Duplicates a Color. + * @param color - The Color to duplicate. + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. (Returns undefined if color is undefined) + */ + static clone(color: Color, result?: Color): Color; + /** + * Returns true if the first Color equals the second color. + * @param left - The first Color to compare for equality. + * @param right - The second Color to compare for equality. + * @returns true if the Colors are equal; otherwise, false. + */ + static equals(left: Color, right: Color): boolean; + /** + * Returns a duplicate of a Color instance. + * @param [result] - The object to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + clone(result?: Color): Color; + /** + * Returns true if this Color equals other. + * @param other - The Color to compare for equality. + * @returns true if the Colors are equal; otherwise, false. + */ + equals(other: Color): boolean; + /** + * Returns true if this Color equals other componentwise within the specified epsilon. + * @param other - The Color to compare for equality. + * @param [epsilon = 0.0] - The epsilon to use for equality testing. + * @returns true if the Colors are equal within the specified epsilon; otherwise, false. + */ + equalsEpsilon(other: Color, epsilon?: number): boolean; + /** + * Creates a string representing this Color in the format '(red, green, blue, alpha)'. + * @returns A string representing this Color in the format '(red, green, blue, alpha)'. + */ + toString(): string; + /** + * Creates a string containing the CSS color value for this color. + * @returns The CSS equivalent of this color. + */ + toCssColorString(): string; + /** + * Creates a string containing CSS hex string color value for this color. + * @returns The CSS hex string equivalent of this color. + */ + toCssHexString(): string; + /** + * Converts this color to an array of red, green, blue, and alpha values + that are in the range of 0 to 255. + * @param [result] - The array to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + toBytes(result?: number[]): number[]; + /** + * Converts this color to a single numeric unsigned 32-bit RGBA value, using the endianness + of the system. + * @example + * var rgba = Cesium.Color.BLUE.toRgba(); + * @returns A single numeric unsigned 32-bit RGBA value. + */ + toRgba(): number; + /** + * Brightens this color by the provided magnitude. + * @example + * var brightBlue = Cesium.Color.BLUE.brighten(0.5, new Cesium.Color()); + * @param magnitude - A positive number indicating the amount to brighten. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + brighten(magnitude: number, result: Color): Color; + /** + * Darkens this color by the provided magnitude. + * @example + * var darkBlue = Cesium.Color.BLUE.darken(0.5, new Cesium.Color()); + * @param magnitude - A positive number indicating the amount to darken. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + darken(magnitude: number, result: Color): Color; + /** + * Creates a new Color that has the same red, green, and blue components + as this Color, but with the specified alpha value. + * @example + * var translucentRed = Cesium.Color.RED.withAlpha(0.9); + * @param alpha - The new alpha component. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + withAlpha(alpha: number, result?: Color): Color; + /** + * Computes the componentwise sum of two Colors. + * @param left - The first Color. + * @param right - The second Color. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Color, right: Color, result: Color): Color; + /** + * Computes the componentwise difference of two Colors. + * @param left - The first Color. + * @param right - The second Color. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Color, right: Color, result: Color): Color; + /** + * Computes the componentwise product of two Colors. + * @param left - The first Color. + * @param right - The second Color. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiply(left: Color, right: Color, result: Color): Color; + /** + * Computes the componentwise quotient of two Colors. + * @param left - The first Color. + * @param right - The second Color. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divide(left: Color, right: Color, result: Color): Color; + /** + * Computes the componentwise modulus of two Colors. + * @param left - The first Color. + * @param right - The second Color. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static mod(left: Color, right: Color, result: Color): Color; + /** + * Computes the linear interpolation or extrapolation at t between the provided colors. + * @param start - The color corresponding to t at 0.0. + * @param end - The color corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static lerp(start: Color, end: Color, t: number, result: Color): Color; + /** + * Multiplies the provided Color componentwise by the provided scalar. + * @param color - The Color to be scaled. + * @param scalar - The scalar to multiply with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(color: Color, scalar: number, result: Color): Color; + /** + * Divides the provided Color componentwise by the provided scalar. + * @param color - The Color to be divided. + * @param scalar - The scalar to divide with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideByScalar(color: Color, scalar: number, result: Color): Color; + /** + * An immutable Color instance initialized to CSS color #F0F8FF + + */ + static readonly ALICEBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #FAEBD7 + + */ + static readonly ANTIQUEWHITE: Color; + /** + * An immutable Color instance initialized to CSS color #00FFFF + + */ + static readonly AQUA: Color; + /** + * An immutable Color instance initialized to CSS color #7FFFD4 + + */ + static readonly AQUAMARINE: Color; + /** + * An immutable Color instance initialized to CSS color #F0FFFF + + */ + static readonly AZURE: Color; + /** + * An immutable Color instance initialized to CSS color #F5F5DC + + */ + static readonly BEIGE: Color; + /** + * An immutable Color instance initialized to CSS color #FFE4C4 + + */ + static readonly BISQUE: Color; + /** + * An immutable Color instance initialized to CSS color #000000 + + */ + static readonly BLACK: Color; + /** + * An immutable Color instance initialized to CSS color #FFEBCD + + */ + static readonly BLANCHEDALMOND: Color; + /** + * An immutable Color instance initialized to CSS color #0000FF + + */ + static readonly BLUE: Color; + /** + * An immutable Color instance initialized to CSS color #8A2BE2 + + */ + static readonly BLUEVIOLET: Color; + /** + * An immutable Color instance initialized to CSS color #A52A2A + + */ + static readonly BROWN: Color; + /** + * An immutable Color instance initialized to CSS color #DEB887 + + */ + static readonly BURLYWOOD: Color; + /** + * An immutable Color instance initialized to CSS color #5F9EA0 + + */ + static readonly CADETBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #7FFF00 + + */ + static readonly CHARTREUSE: Color; + /** + * An immutable Color instance initialized to CSS color #D2691E + + */ + static readonly CHOCOLATE: Color; + /** + * An immutable Color instance initialized to CSS color #FF7F50 + + */ + static readonly CORAL: Color; + /** + * An immutable Color instance initialized to CSS color #6495ED + + */ + static readonly CORNFLOWERBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #FFF8DC + + */ + static readonly CORNSILK: Color; + /** + * An immutable Color instance initialized to CSS color #DC143C + + */ + static readonly CRIMSON: Color; + /** + * An immutable Color instance initialized to CSS color #00FFFF + + */ + static readonly CYAN: Color; + /** + * An immutable Color instance initialized to CSS color #00008B + + */ + static readonly DARKBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #008B8B + + */ + static readonly DARKCYAN: Color; + /** + * An immutable Color instance initialized to CSS color #B8860B + + */ + static readonly DARKGOLDENROD: Color; + /** + * An immutable Color instance initialized to CSS color #A9A9A9 + + */ + static readonly DARKGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #006400 + + */ + static readonly DARKGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #A9A9A9 + + */ + static readonly DARKGREY: Color; + /** + * An immutable Color instance initialized to CSS color #BDB76B + + */ + static readonly DARKKHAKI: Color; + /** + * An immutable Color instance initialized to CSS color #8B008B + + */ + static readonly DARKMAGENTA: Color; + /** + * An immutable Color instance initialized to CSS color #556B2F + + */ + static readonly DARKOLIVEGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #FF8C00 + + */ + static readonly DARKORANGE: Color; + /** + * An immutable Color instance initialized to CSS color #9932CC + + */ + static readonly DARKORCHID: Color; + /** + * An immutable Color instance initialized to CSS color #8B0000 + + */ + static readonly DARKRED: Color; + /** + * An immutable Color instance initialized to CSS color #E9967A + + */ + static readonly DARKSALMON: Color; + /** + * An immutable Color instance initialized to CSS color #8FBC8F + + */ + static readonly DARKSEAGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #483D8B + + */ + static readonly DARKSLATEBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #2F4F4F + + */ + static readonly DARKSLATEGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #2F4F4F + + */ + static readonly DARKSLATEGREY: Color; + /** + * An immutable Color instance initialized to CSS color #00CED1 + + */ + static readonly DARKTURQUOISE: Color; + /** + * An immutable Color instance initialized to CSS color #9400D3 + + */ + static readonly DARKVIOLET: Color; + /** + * An immutable Color instance initialized to CSS color #FF1493 + + */ + static readonly DEEPPINK: Color; + /** + * An immutable Color instance initialized to CSS color #00BFFF + + */ + static readonly DEEPSKYBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #696969 + + */ + static readonly DIMGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #696969 + + */ + static readonly DIMGREY: Color; + /** + * An immutable Color instance initialized to CSS color #1E90FF + + */ + static readonly DODGERBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #B22222 + + */ + static readonly FIREBRICK: Color; + /** + * An immutable Color instance initialized to CSS color #FFFAF0 + + */ + static readonly FLORALWHITE: Color; + /** + * An immutable Color instance initialized to CSS color #228B22 + + */ + static readonly FORESTGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #FF00FF + + */ + static readonly FUCHSIA: Color; + /** + * An immutable Color instance initialized to CSS color #DCDCDC + + */ + static readonly GAINSBORO: Color; + /** + * An immutable Color instance initialized to CSS color #F8F8FF + + */ + static readonly GHOSTWHITE: Color; + /** + * An immutable Color instance initialized to CSS color #FFD700 + + */ + static readonly GOLD: Color; + /** + * An immutable Color instance initialized to CSS color #DAA520 + + */ + static readonly GOLDENROD: Color; + /** + * An immutable Color instance initialized to CSS color #808080 + + */ + static readonly GRAY: Color; + /** + * An immutable Color instance initialized to CSS color #008000 + + */ + static readonly GREEN: Color; + /** + * An immutable Color instance initialized to CSS color #ADFF2F + + */ + static readonly GREENYELLOW: Color; + /** + * An immutable Color instance initialized to CSS color #808080 + + */ + static readonly GREY: Color; + /** + * An immutable Color instance initialized to CSS color #F0FFF0 + + */ + static readonly HONEYDEW: Color; + /** + * An immutable Color instance initialized to CSS color #FF69B4 + + */ + static readonly HOTPINK: Color; + /** + * An immutable Color instance initialized to CSS color #CD5C5C + + */ + static readonly INDIANRED: Color; + /** + * An immutable Color instance initialized to CSS color #4B0082 + + */ + static readonly INDIGO: Color; + /** + * An immutable Color instance initialized to CSS color #FFFFF0 + + */ + static readonly IVORY: Color; + /** + * An immutable Color instance initialized to CSS color #F0E68C + + */ + static readonly KHAKI: Color; + /** + * An immutable Color instance initialized to CSS color #E6E6FA + + */ + static readonly LAVENDER: Color; + /** + * An immutable Color instance initialized to CSS color #FFF0F5 + + */ + static readonly LAVENDAR_BLUSH: Color; + /** + * An immutable Color instance initialized to CSS color #7CFC00 + + */ + static readonly LAWNGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #FFFACD + + */ + static readonly LEMONCHIFFON: Color; + /** + * An immutable Color instance initialized to CSS color #ADD8E6 + + */ + static readonly LIGHTBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #F08080 + + */ + static readonly LIGHTCORAL: Color; + /** + * An immutable Color instance initialized to CSS color #E0FFFF + + */ + static readonly LIGHTCYAN: Color; + /** + * An immutable Color instance initialized to CSS color #FAFAD2 + + */ + static readonly LIGHTGOLDENRODYELLOW: Color; + /** + * An immutable Color instance initialized to CSS color #D3D3D3 + + */ + static readonly LIGHTGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #90EE90 + + */ + static readonly LIGHTGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #D3D3D3 + + */ + static readonly LIGHTGREY: Color; + /** + * An immutable Color instance initialized to CSS color #FFB6C1 + + */ + static readonly LIGHTPINK: Color; + /** + * An immutable Color instance initialized to CSS color #20B2AA + + */ + static readonly LIGHTSEAGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #87CEFA + + */ + static readonly LIGHTSKYBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #778899 + + */ + static readonly LIGHTSLATEGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #778899 + + */ + static readonly LIGHTSLATEGREY: Color; + /** + * An immutable Color instance initialized to CSS color #B0C4DE + + */ + static readonly LIGHTSTEELBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #FFFFE0 + + */ + static readonly LIGHTYELLOW: Color; + /** + * An immutable Color instance initialized to CSS color #00FF00 + + */ + static readonly LIME: Color; + /** + * An immutable Color instance initialized to CSS color #32CD32 + + */ + static readonly LIMEGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #FAF0E6 + + */ + static readonly LINEN: Color; + /** + * An immutable Color instance initialized to CSS color #FF00FF + + */ + static readonly MAGENTA: Color; + /** + * An immutable Color instance initialized to CSS color #800000 + + */ + static readonly MAROON: Color; + /** + * An immutable Color instance initialized to CSS color #66CDAA + + */ + static readonly MEDIUMAQUAMARINE: Color; + /** + * An immutable Color instance initialized to CSS color #0000CD + + */ + static readonly MEDIUMBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #BA55D3 + + */ + static readonly MEDIUMORCHID: Color; + /** + * An immutable Color instance initialized to CSS color #9370DB + + */ + static readonly MEDIUMPURPLE: Color; + /** + * An immutable Color instance initialized to CSS color #3CB371 + + */ + static readonly MEDIUMSEAGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #7B68EE + + */ + static readonly MEDIUMSLATEBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #00FA9A + + */ + static readonly MEDIUMSPRINGGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #48D1CC + + */ + static readonly MEDIUMTURQUOISE: Color; + /** + * An immutable Color instance initialized to CSS color #C71585 + + */ + static readonly MEDIUMVIOLETRED: Color; + /** + * An immutable Color instance initialized to CSS color #191970 + + */ + static readonly MIDNIGHTBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #F5FFFA + + */ + static readonly MINTCREAM: Color; + /** + * An immutable Color instance initialized to CSS color #FFE4E1 + + */ + static readonly MISTYROSE: Color; + /** + * An immutable Color instance initialized to CSS color #FFE4B5 + + */ + static readonly MOCCASIN: Color; + /** + * An immutable Color instance initialized to CSS color #FFDEAD + + */ + static readonly NAVAJOWHITE: Color; + /** + * An immutable Color instance initialized to CSS color #000080 + + */ + static readonly NAVY: Color; + /** + * An immutable Color instance initialized to CSS color #FDF5E6 + + */ + static readonly OLDLACE: Color; + /** + * An immutable Color instance initialized to CSS color #808000 + + */ + static readonly OLIVE: Color; + /** + * An immutable Color instance initialized to CSS color #6B8E23 + + */ + static readonly OLIVEDRAB: Color; + /** + * An immutable Color instance initialized to CSS color #FFA500 + + */ + static readonly ORANGE: Color; + /** + * An immutable Color instance initialized to CSS color #FF4500 + + */ + static readonly ORANGERED: Color; + /** + * An immutable Color instance initialized to CSS color #DA70D6 + + */ + static readonly ORCHID: Color; + /** + * An immutable Color instance initialized to CSS color #EEE8AA + + */ + static readonly PALEGOLDENROD: Color; + /** + * An immutable Color instance initialized to CSS color #98FB98 + + */ + static readonly PALEGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #AFEEEE + + */ + static readonly PALETURQUOISE: Color; + /** + * An immutable Color instance initialized to CSS color #DB7093 + + */ + static readonly PALEVIOLETRED: Color; + /** + * An immutable Color instance initialized to CSS color #FFEFD5 + + */ + static readonly PAPAYAWHIP: Color; + /** + * An immutable Color instance initialized to CSS color #FFDAB9 + + */ + static readonly PEACHPUFF: Color; + /** + * An immutable Color instance initialized to CSS color #CD853F + + */ + static readonly PERU: Color; + /** + * An immutable Color instance initialized to CSS color #FFC0CB + + */ + static readonly PINK: Color; + /** + * An immutable Color instance initialized to CSS color #DDA0DD + + */ + static readonly PLUM: Color; + /** + * An immutable Color instance initialized to CSS color #B0E0E6 + + */ + static readonly POWDERBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #800080 + + */ + static readonly PURPLE: Color; + /** + * An immutable Color instance initialized to CSS color #FF0000 + + */ + static readonly RED: Color; + /** + * An immutable Color instance initialized to CSS color #BC8F8F + + */ + static readonly ROSYBROWN: Color; + /** + * An immutable Color instance initialized to CSS color #4169E1 + + */ + static readonly ROYALBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #8B4513 + + */ + static readonly SADDLEBROWN: Color; + /** + * An immutable Color instance initialized to CSS color #FA8072 + + */ + static readonly SALMON: Color; + /** + * An immutable Color instance initialized to CSS color #F4A460 + + */ + static readonly SANDYBROWN: Color; + /** + * An immutable Color instance initialized to CSS color #2E8B57 + + */ + static readonly SEAGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #FFF5EE + + */ + static readonly SEASHELL: Color; + /** + * An immutable Color instance initialized to CSS color #A0522D + + */ + static readonly SIENNA: Color; + /** + * An immutable Color instance initialized to CSS color #C0C0C0 + + */ + static readonly SILVER: Color; + /** + * An immutable Color instance initialized to CSS color #87CEEB + + */ + static readonly SKYBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #6A5ACD + + */ + static readonly SLATEBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #708090 + + */ + static readonly SLATEGRAY: Color; + /** + * An immutable Color instance initialized to CSS color #708090 + + */ + static readonly SLATEGREY: Color; + /** + * An immutable Color instance initialized to CSS color #FFFAFA + + */ + static readonly SNOW: Color; + /** + * An immutable Color instance initialized to CSS color #00FF7F + + */ + static readonly SPRINGGREEN: Color; + /** + * An immutable Color instance initialized to CSS color #4682B4 + + */ + static readonly STEELBLUE: Color; + /** + * An immutable Color instance initialized to CSS color #D2B48C + + */ + static readonly TAN: Color; + /** + * An immutable Color instance initialized to CSS color #008080 + + */ + static readonly TEAL: Color; + /** + * An immutable Color instance initialized to CSS color #D8BFD8 + + */ + static readonly THISTLE: Color; + /** + * An immutable Color instance initialized to CSS color #FF6347 + + */ + static readonly TOMATO: Color; + /** + * An immutable Color instance initialized to CSS color #40E0D0 + + */ + static readonly TURQUOISE: Color; + /** + * An immutable Color instance initialized to CSS color #EE82EE + + */ + static readonly VIOLET: Color; + /** + * An immutable Color instance initialized to CSS color #F5DEB3 + + */ + static readonly WHEAT: Color; + /** + * An immutable Color instance initialized to CSS color #FFFFFF + + */ + static readonly WHITE: Color; + /** + * An immutable Color instance initialized to CSS color #F5F5F5 + + */ + static readonly WHITESMOKE: Color; + /** + * An immutable Color instance initialized to CSS color #FFFF00 + + */ + static readonly YELLOW: Color; + /** + * An immutable Color instance initialized to CSS color #9ACD32 + + */ + static readonly YELLOWGREEN: Color; + /** + * An immutable Color instance initialized to CSS transparent. + + */ + static readonly TRANSPARENT: Color; +} + +/** + * Value and type information for per-instance geometry color. + * @example + * var instance = new Cesium.GeometryInstance({ + geometry : Cesium.BoxGeometry.fromDimensions({ + dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0) + }), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), + id : 'box', + attributes : { + color : new Cesium.ColorGeometryInstanceAttribute(red, green, blue, alpha) + } +}); + * @param [red = 1.0] - The red component. + * @param [green = 1.0] - The green component. + * @param [blue = 1.0] - The blue component. + * @param [alpha = 1.0] - The alpha component. + */ +export class ColorGeometryInstanceAttribute { + constructor(red?: number, green?: number, blue?: number, alpha?: number); + /** + * The values for the attributes stored in a typed array. + */ + value: Uint8Array; + /** + * The datatype of each component in the attribute, e.g., individual elements in + {@link ColorGeometryInstanceAttribute#value}. + */ + readonly componentDatatype: ComponentDatatype; + /** + * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}. + */ + readonly componentsPerAttribute: number; + /** + * When true and componentDatatype is an integer format, + indicate that the components should be mapped to the range [0, 1] (unsigned) + or [-1, 1] (signed) when they are accessed as floating-point for rendering. + */ + readonly normalize: boolean; + /** + * Creates a new {@link ColorGeometryInstanceAttribute} instance given the provided {@link Color}. + * @example + * var instance = new Cesium.GeometryInstance({ + geometry : geometry, + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.CORNFLOWERBLUE), + } + }); + * @param color - The color. + * @returns The new {@link ColorGeometryInstanceAttribute} instance. + */ + static fromColor(color: Color): ColorGeometryInstanceAttribute; + /** + * Converts a color to a typed array that can be used to assign a color attribute. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA, attributes.color); + * @param color - The color. + * @param [result] - The array to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + static toValue(color: Color, result?: Uint8Array): Uint8Array; + /** + * Compares the provided ColorGeometryInstanceAttributes and returns + true if they are equal, false otherwise. + * @param [left] - The first ColorGeometryInstanceAttribute. + * @param [right] - The second ColorGeometryInstanceAttribute. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: ColorGeometryInstanceAttribute, right?: ColorGeometryInstanceAttribute): boolean; +} + +/** + * Merges two objects, copying their properties onto a new combined object. When two objects have the same +property, the value of the property on the first object is used. If either object is undefined, +it will be treated as an empty object. + * @example + * var object1 = { + propOne : 1, + propTwo : { + value1 : 10 + } +} +var object2 = { + propTwo : 2 +} +var final = Cesium.combine(object1, object2); + +// final === { +// propOne : 1, +// propTwo : { +// value1 : 10 +// } +// } + * @param [object1] - The first object to merge. + * @param [object2] - The second object to merge. + * @param [deep = false] - Perform a recursive merge. + * @returns The combined object containing all properties from both objects. + */ +export function combine(object1?: any, object2?: any, deep?: boolean): any; + +/** + * WebGL component datatypes. Components are intrinsics, +which form attributes, which form vertices. + */ +export enum ComponentDatatype { + /** + * 8-bit signed byte corresponding to gl.BYTE and the type + of an element in Int8Array. + */ + BYTE = WebGLConstants.BYTE, + /** + * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type + of an element in Uint8Array. + */ + UNSIGNED_BYTE = WebGLConstants.UNSIGNED_BYTE, + /** + * 16-bit signed short corresponding to SHORT and the type + of an element in Int16Array. + */ + SHORT = WebGLConstants.SHORT, + /** + * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type + of an element in Uint16Array. + */ + UNSIGNED_SHORT = WebGLConstants.UNSIGNED_SHORT, + /** + * 32-bit signed int corresponding to INT and the type + of an element in Int32Array. + */ + INT = WebGLConstants.INT, + /** + * 32-bit unsigned int corresponding to UNSIGNED_INT and the type + of an element in Uint32Array. + */ + UNSIGNED_INT = WebGLConstants.UNSIGNED_INT, + /** + * 32-bit floating-point corresponding to FLOAT and the type + of an element in Float32Array. + */ + FLOAT = WebGLConstants.FLOAT, + /** + * 64-bit floating-point corresponding to gl.DOUBLE (in Desktop OpenGL; + this is not supported in WebGL, and is emulated in Cesium via {@link GeometryPipeline.encodeAttribute}) + and the type of an element in Float64Array. + */ + DOUBLE = WebGLConstants.DOUBLE +} + +/** + * Describes a compressed texture and contains a compressed texture buffer. + * @param internalFormat - The pixel format of the compressed texture. + * @param width - The width of the texture. + * @param height - The height of the texture. + * @param buffer - The compressed texture buffer. + */ +export class CompressedTextureBuffer { + constructor(internalFormat: PixelFormat, width: number, height: number, buffer: Uint8Array); + /** + * The format of the compressed texture. + */ + readonly internalFormat: PixelFormat; + /** + * The width of the texture. + */ + readonly width: number; + /** + * The height of the texture. + */ + readonly height: number; + /** + * The compressed texture buffer. + */ + readonly bufferView: Uint8Array; + /** + * Creates a shallow clone of a compressed texture buffer. + * @param object - The compressed texture buffer to be cloned. + * @returns A shallow clone of the compressed texture buffer. + */ + static clone(object: CompressedTextureBuffer): CompressedTextureBuffer; + /** + * Creates a shallow clone of this compressed texture buffer. + * @returns A shallow clone of the compressed texture buffer. + */ + clone(): CompressedTextureBuffer; +} + +/** + * A description of a polygon composed of arbitrary coplanar positions. + * @example + * var polygonGeometry = new Cesium.CoplanarPolygonGeometry({ + polygonHierarchy: new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArrayHeights([ + -90.0, 30.0, 0.0, + -90.0, 30.0, 300000.0, + -80.0, 30.0, 300000.0, + -80.0, 30.0, 0.0 + ])) +}); + * @param options - Object with the following properties: + * @param options.polygonHierarchy - A polygon hierarchy that can include holes. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + */ +export class CoplanarPolygonGeometry { + constructor(options: { + polygonHierarchy: PolygonHierarchy; + stRotation?: number; + vertexFormat?: VertexFormat; + ellipsoid?: Ellipsoid; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * A description of a coplanar polygon from an array of positions. + * @example + * // create a polygon from points + var polygon = Cesium.CoplanarPolygonGeometry.fromPositions({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + }); + var geometry = Cesium.PolygonGeometry.createGeometry(polygon); + * @param options - Object with the following properties: + * @param options.positions - An array of positions that defined the corner points of the polygon. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + */ + static fromPositions(options: { + positions: Cartesian3[]; + vertexFormat?: VertexFormat; + stRotation?: number; + ellipsoid?: Ellipsoid; + }): CoplanarPolygonGeometry; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CoplanarPolygonGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CoplanarPolygonGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CoplanarPolygonGeometry): CoplanarPolygonGeometry; + /** + * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere. + * @param polygonGeometry - A description of the polygon. + * @returns The computed vertices and indices. + */ + static createGeometry(polygonGeometry: CoplanarPolygonGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a polygon composed of arbitrary coplanar positions. + * @example + * var polygonOutline = new Cesium.CoplanarPolygonOutlineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArrayHeights([ + -90.0, 30.0, 0.0, + -90.0, 30.0, 1000.0, + -80.0, 30.0, 1000.0, + -80.0, 30.0, 0.0 + ]) +}); +var geometry = Cesium.CoplanarPolygonOutlineGeometry.createGeometry(polygonOutline); + * @param options - Object with the following properties: + * @param options.polygonHierarchy - A polygon hierarchy that can include holes. + */ +export class CoplanarPolygonOutlineGeometry { + constructor(options: { + polygonHierarchy: PolygonHierarchy; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * A description of a coplanar polygon outline from an array of positions. + * @param options - Object with the following properties: + * @param options.positions - An array of positions that defined the corner points of the polygon. + */ + static fromPositions(options: { + positions: Cartesian3[]; + }): CoplanarPolygonOutlineGeometry; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CoplanarPolygonOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CoplanarPolygonOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CoplanarPolygonOutlineGeometry): CoplanarPolygonOutlineGeometry; + /** + * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere. + * @param polygonGeometry - A description of the polygon. + * @returns The computed vertices and indices. + */ + static createGeometry(polygonGeometry: CoplanarPolygonOutlineGeometry): Geometry | undefined; +} + +/** + * Style options for corners. + */ +export enum CornerType { + /** + * + + Corner has a smooth edge. + */ + ROUNDED = 0, + /** + * + + Corner point is the intersection of adjacent edges. + */ + MITERED = 1, + /** + * + + Corner is clipped. + */ + BEVELED = 2 +} + +/** + * A description of a corridor. Corridor geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * var corridor = new Cesium.CorridorGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY, + positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]), + width : 100000 +}); + * @param options - Object with the following properties: + * @param options.positions - An array of positions that define the center of the corridor. + * @param options.width - The distance between the edges of the corridor in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.height = 0] - The distance in meters between the ellipsoid surface and the positions. + * @param [options.extrudedHeight] - The distance in meters between the ellipsoid surface and the extruded face. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.cornerType = CornerType.ROUNDED] - Determines the style of the corners. + */ +export class CorridorGeometry { + constructor(options: { + positions: Cartesian3[]; + width: number; + ellipsoid?: Ellipsoid; + granularity?: number; + height?: number; + extrudedHeight?: number; + vertexFormat?: VertexFormat; + cornerType?: CornerType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CorridorGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CorridorGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CorridorGeometry): CorridorGeometry; + /** + * Computes the bounding rectangle given the provided options + * @param options - Object with the following properties: + * @param options.positions - An array of positions that define the center of the corridor. + * @param options.width - The distance between the edges of the corridor in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.cornerType = CornerType.ROUNDED] - Determines the style of the corners. + * @param [result] - An object in which to store the result. + * @returns The result rectangle. + */ + static computeRectangle(options: { + positions: Cartesian3[]; + width: number; + ellipsoid?: Ellipsoid; + cornerType?: CornerType; + }, result?: Rectangle): Rectangle; + /** + * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere. + * @param corridorGeometry - A description of the corridor. + * @returns The computed vertices and indices. + */ + static createGeometry(corridorGeometry: CorridorGeometry): Geometry | undefined; +} + +/** + * A description of a corridor outline. + * @example + * var corridor = new Cesium.CorridorOutlineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]), + width : 100000 +}); + * @param options - Object with the following properties: + * @param options.positions - An array of positions that define the center of the corridor outline. + * @param options.width - The distance between the edges of the corridor outline. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.height = 0] - The distance in meters between the positions and the ellipsoid surface. + * @param [options.extrudedHeight] - The distance in meters between the extruded face and the ellipsoid surface. + * @param [options.cornerType = CornerType.ROUNDED] - Determines the style of the corners. + */ +export class CorridorOutlineGeometry { + constructor(options: { + positions: Cartesian3[]; + width: number; + ellipsoid?: Ellipsoid; + granularity?: number; + height?: number; + extrudedHeight?: number; + cornerType?: CornerType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CorridorOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CorridorOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CorridorOutlineGeometry): CorridorOutlineGeometry; + /** + * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere. + * @param corridorOutlineGeometry - A description of the corridor. + * @returns The computed vertices and indices. + */ + static createGeometry(corridorOutlineGeometry: CorridorOutlineGeometry): Geometry | undefined; +} + +/** + * Creates a Globally unique identifier (GUID) string. A GUID is 128 bits long, and can guarantee uniqueness across space and time. + * @example + * this.guid = Cesium.createGuid(); + */ +export function createGuid(): string; + +/** + * Creates a {@link CesiumTerrainProvider} instance for the {@link https://cesium.com/content/#cesium-world-terrain|Cesium World Terrain}. + * @example + * // Create Cesium World Terrain with default settings +var viewer = new Cesium.Viewer('cesiumContainer', { + terrainProvider : Cesium.createWorldTerrain(); +}); + * @example + * // Create Cesium World Terrain with water and normals. +var viewer = new Cesium.Viewer('cesiumContainer', { + terrainProvider : Cesium.createWorldTerrain({ + requestWaterMask : true, + requestVertexNormals : true + }); +}); + * @param [options] - Object with the following properties: + * @param [options.requestVertexNormals = false] - Flag that indicates if the client should request additional lighting information from the server if available. + * @param [options.requestWaterMask = false] - Flag that indicates if the client should request per tile water masks from the server if available. + */ +export function createWorldTerrain(options?: { + requestVertexNormals?: boolean; + requestWaterMask?: boolean; +}): CesiumTerrainProvider; + +/** + * A credit contains data pertaining to how to display attributions/credits for certain content on the screen. + * @example + * //Create a credit with a tooltip, image and link +var credit = new Cesium.Credit(''); + * @param html - An string representing an html code snippet + * @param [showOnScreen = false] - If true, the credit will be visible in the main credit container. Otherwise, it will appear in a popover + */ +export class Credit { + constructor(html: string, showOnScreen?: boolean); + /** + * The credit content + */ + readonly html: string; + /** + * Whether the credit should be displayed on screen or in a lightbox + */ + readonly showOnScreen: boolean; + /** + * Gets the credit element + */ + readonly element: HTMLElement; + /** + * Returns true if the credits are equal + * @param left - The first credit + * @param right - The second credit + * @returns true if left and right are equal, false otherwise. + */ + static equals(left: Credit, right: Credit): boolean; + /** + * Returns true if the credits are equal + * @param credit - The credit to compare to. + * @returns true if left and right are equal, false otherwise. + */ + equals(credit: Credit): boolean; + /** + * Duplicates a Credit instance. + * @param [credit] - The Credit to duplicate. + * @returns A new Credit instance that is a duplicate of the one provided. (Returns undefined if the credit is undefined) + */ + static clone(credit?: Credit): Credit; +} + +/** + * Defines functions for 3rd order polynomial functions of one variable with only real coefficients. + */ +export namespace CubicRealPolynomial { + /** + * Provides the discriminant of the cubic equation from the supplied coefficients. + * @param a - The coefficient of the 3rd order monomial. + * @param b - The coefficient of the 2nd order monomial. + * @param c - The coefficient of the 1st order monomial. + * @param d - The coefficient of the 0th order monomial. + * @returns The value of the discriminant. + */ + function computeDiscriminant(a: number, b: number, c: number, d: number): number; + /** + * Provides the real valued roots of the cubic polynomial with the provided coefficients. + * @param a - The coefficient of the 3rd order monomial. + * @param b - The coefficient of the 2nd order monomial. + * @param c - The coefficient of the 1st order monomial. + * @param d - The coefficient of the 0th order monomial. + * @returns The real valued roots. + */ + function computeRealRoots(a: number, b: number, c: number, d: number): number[]; +} + +/** + * The culling volume defined by planes. + * @param [planes] - An array of clipping planes. + */ +export class CullingVolume { + constructor(planes?: Cartesian4[]); + /** + * Each plane is represented by a Cartesian4 object, where the x, y, and z components + define the unit vector normal to the plane, and the w component is the distance of the + plane from the origin. + */ + planes: Cartesian4[]; + /** + * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere. + The planes are aligned to the x, y, and z axes in world coordinates. + * @param boundingSphere - The bounding sphere used to create the culling volume. + * @param [result] - The object onto which to store the result. + * @returns The culling volume created from the bounding sphere. + */ + static fromBoundingSphere(boundingSphere: BoundingSphere, result?: CullingVolume): CullingVolume; + /** + * Determines whether a bounding volume intersects the culling volume. + * @param boundingVolume - The bounding volume whose intersection with the culling volume is to be tested. + * @returns Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE. + */ + computeVisibility(boundingVolume: any): Intersect; +} + +/** + * A description of a cylinder. + * @example + * // create cylinder geometry +var cylinder = new Cesium.CylinderGeometry({ + length: 200000, + topRadius: 80000, + bottomRadius: 200000, +}); +var geometry = Cesium.CylinderGeometry.createGeometry(cylinder); + * @param options - Object with the following properties: + * @param options.length - The length of the cylinder. + * @param options.topRadius - The radius of the top of the cylinder. + * @param options.bottomRadius - The radius of the bottom of the cylinder. + * @param [options.slices = 128] - The number of edges around the perimeter of the cylinder. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class CylinderGeometry { + constructor(options: { + length: number; + topRadius: number; + bottomRadius: number; + slices?: number; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CylinderGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CylinderGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CylinderGeometry): CylinderGeometry; + /** + * Computes the geometric representation of a cylinder, including its vertices, indices, and a bounding sphere. + * @param cylinderGeometry - A description of the cylinder. + * @returns The computed vertices and indices. + */ + static createGeometry(cylinderGeometry: CylinderGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a cylinder. + * @example + * // create cylinder geometry +var cylinder = new Cesium.CylinderOutlineGeometry({ + length: 200000, + topRadius: 80000, + bottomRadius: 200000, +}); +var geometry = Cesium.CylinderOutlineGeometry.createGeometry(cylinder); + * @param options - Object with the following properties: + * @param options.length - The length of the cylinder. + * @param options.topRadius - The radius of the top of the cylinder. + * @param options.bottomRadius - The radius of the bottom of the cylinder. + * @param [options.slices = 128] - The number of edges around the perimeter of the cylinder. + * @param [options.numberOfVerticalLines = 16] - Number of lines to draw between the top and bottom surfaces of the cylinder. + */ +export class CylinderOutlineGeometry { + constructor(options: { + length: number; + topRadius: number; + bottomRadius: number; + slices?: number; + numberOfVerticalLines?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: CylinderOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new CylinderOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: CylinderOutlineGeometry): CylinderOutlineGeometry; + /** + * Computes the geometric representation of an outline of a cylinder, including its vertices, indices, and a bounding sphere. + * @param cylinderGeometry - A description of the cylinder outline. + * @returns The computed vertices and indices. + */ + static createGeometry(cylinderGeometry: CylinderOutlineGeometry): Geometry | undefined; +} + +/** + * A simple proxy that appends the desired resource as the sole query parameter +to the given proxy URL. + * @param proxy - The proxy URL that will be used to requests all resources. + */ +export class DefaultProxy extends Proxy { + constructor(proxy: string); + /** + * Get the final URL to use to request a given resource. + * @param resource - The resource to request. + * @returns proxied resource + */ + getURL(resource: string): string; +} + +/** + * Returns the first parameter if not undefined, otherwise the second parameter. +Useful for setting a default value for a parameter. + * @example + * param = Cesium.defaultValue(param, 'default'); + * @returns Returns the first parameter if not undefined, otherwise the second parameter. + */ +export function defaultValue(a: any, b: any): any; + +/** + * @example + * if (Cesium.defined(positions)) { + doSomething(); +} else { + doSomethingElse(); +} + * @param value - The object. + * @returns Returns true if the object is defined, returns false otherwise. + */ +export function defined(value: any): boolean; + +/** + * Destroys an object. Each of the object's functions, including functions in its prototype, +is replaced with a function that throws a {@link DeveloperError}, except for the object's +isDestroyed function, which is set to a function that returns true. +The object's properties are removed with delete. +

+This function is used by objects that hold native resources, e.g., WebGL resources, which +need to be explicitly released. Client code calls an object's destroy function, +which then releases the native resource and calls destroyObject to put itself +in a destroyed state. + * @example + * // How a texture would destroy itself. +this.destroy = function () { + _gl.deleteTexture(_texture); + return Cesium.destroyObject(this); +}; + * @param object - The object to destroy. + * @param [message] - The message to include in the exception that is thrown if + a destroyed object's function is called. + */ +export function destroyObject(object: any, message?: string): void; + +/** + * Constructs an exception object that is thrown due to a developer error, e.g., invalid argument, +argument out of range, etc. This exception should only be thrown during development; +it usually indicates a bug in the calling code. This exception should never be +caught; instead the calling code should strive not to generate it. +

+On the other hand, a {@link RuntimeError} indicates an exception that may +be thrown at runtime, e.g., out of memory, that the calling code should be prepared +to catch. + * @param [message] - The error message for this exception. + */ +export class DeveloperError extends Error { + constructor(message?: string); + /** + * 'DeveloperError' indicating that this exception was thrown due to a developer error. + */ + readonly name: string; + /** + * The explanation for why this exception was thrown. + */ + readonly message: string; + /** + * The stack trace of this exception, if available. + */ + readonly stack: string; +} + +/** + * Determines visibility based on the distance to the camera. + * @example + * // Make a billboard that is only visible when the distance to the camera is between 10 and 20 meters. +billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(10.0, 20.0); + * @param [near = 0.0] - The smallest distance in the interval where the object is visible. + * @param [far = Number.MAX_VALUE] - The largest distance in the interval where the object is visible. + */ +export class DistanceDisplayCondition { + constructor(near?: number, far?: number); + /** + * The smallest distance in the interval where the object is visible. + */ + near: number; + /** + * The largest distance in the interval where the object is visible. + */ + far: number; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: DistanceDisplayCondition, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new DistanceDisplayCondition instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: DistanceDisplayCondition): DistanceDisplayCondition; + /** + * Determines if two distance display conditions are equal. + * @param left - A distance display condition. + * @param right - Another distance display condition. + * @returns Whether the two distance display conditions are equal. + */ + static equals(left: DistanceDisplayCondition, right: DistanceDisplayCondition): boolean; + /** + * Duplicates a distance display condition instance. + * @param [value] - The distance display condition to duplicate. + * @param [result] - The result onto which to store the result. + * @returns The duplicated instance. + */ + static clone(value?: DistanceDisplayCondition, result?: DistanceDisplayCondition): DistanceDisplayCondition; + /** + * Duplicates this instance. + * @param [result] - The result onto which to store the result. + * @returns The duplicated instance. + */ + clone(result?: DistanceDisplayCondition): DistanceDisplayCondition; + /** + * Determines if this distance display condition is equal to another. + * @param other - Another distance display condition. + * @returns Whether this distance display condition is equal to the other. + */ + equals(other: DistanceDisplayCondition): boolean; +} + +/** + * Value and type information for per-instance geometry attribute that determines if the geometry instance has a distance display condition. + * @example + * var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.BoxGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL, + minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0), + maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0) + }), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), + id : 'box', + attributes : { + distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(100.0, 10000.0) + } +}); + * @param [near = 0.0] - The near distance. + * @param [far = Number.MAX_VALUE] - The far distance. + */ +export class DistanceDisplayConditionGeometryInstanceAttribute { + constructor(near?: number, far?: number); + /** + * The values for the attributes stored in a typed array. + */ + value: Float32Array; + /** + * The datatype of each component in the attribute, e.g., individual elements in + {@link DistanceDisplayConditionGeometryInstanceAttribute#value}. + */ + readonly componentDatatype: ComponentDatatype; + /** + * The number of components in the attributes, i.e., {@link DistanceDisplayConditionGeometryInstanceAttribute#value}. + */ + readonly componentsPerAttribute: number; + /** + * When true and componentDatatype is an integer format, + indicate that the components should be mapped to the range [0, 1] (unsigned) + or [-1, 1] (signed) when they are accessed as floating-point for rendering. + */ + readonly normalize: boolean; + /** + * Creates a new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}. + * @example + * var distanceDisplayCondition = new Cesium.DistanceDisplayCondition(100.0, 10000.0); + var instance = new Cesium.GeometryInstance({ + geometry : geometry, + attributes : { + distanceDisplayCondition : Cesium.DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(distanceDisplayCondition) + } + }); + * @param distanceDisplayCondition - The distance display condition. + * @returns The new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance. + */ + static fromDistanceDisplayCondition(distanceDisplayCondition: DistanceDisplayCondition): DistanceDisplayConditionGeometryInstanceAttribute; + /** + * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(distanceDisplayCondition, attributes.distanceDisplayCondition); + * @param distanceDisplayCondition - The distance display condition value. + * @param [result] - The array to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + static toValue(distanceDisplayCondition: DistanceDisplayCondition, result?: Float32Array): Float32Array; +} + +/** + * Easing functions for use with TweenCollection. These function are from +{@link https://github.com/sole/tween.js/|Tween.js} and Robert Penner. See the +{@link http://sole.github.io/tween.js/examples/03_graphs.html|Tween.js graphs for each function}. + */ +export namespace EasingFunction { + /** + * Linear easing. + */ + const LINEAR_NONE: EasingFunction.Callback; + /** + * Quadratic in. + */ + const QUADRATIC_IN: EasingFunction.Callback; + /** + * Quadratic out. + */ + const QUADRATIC_OUT: EasingFunction.Callback; + /** + * Quadratic in then out. + */ + const QUADRATIC_IN_OUT: EasingFunction.Callback; + /** + * Cubic in. + */ + const CUBIC_IN: EasingFunction.Callback; + /** + * Cubic out. + */ + const CUBIC_OUT: EasingFunction.Callback; + /** + * Cubic in then out. + */ + const CUBIC_IN_OUT: EasingFunction.Callback; + /** + * Quartic in. + */ + const QUARTIC_IN: EasingFunction.Callback; + /** + * Quartic out. + */ + const QUARTIC_OUT: EasingFunction.Callback; + /** + * Quartic in then out. + */ + const QUARTIC_IN_OUT: EasingFunction.Callback; + /** + * Quintic in. + */ + const QUINTIC_IN: EasingFunction.Callback; + /** + * Quintic out. + */ + const QUINTIC_OUT: EasingFunction.Callback; + /** + * Quintic in then out. + */ + const QUINTIC_IN_OUT: EasingFunction.Callback; + /** + * Sinusoidal in. + */ + const SINUSOIDAL_IN: EasingFunction.Callback; + /** + * Sinusoidal out. + */ + const SINUSOIDAL_OUT: EasingFunction.Callback; + /** + * Sinusoidal in then out. + */ + const SINUSOIDAL_IN_OUT: EasingFunction.Callback; + /** + * Exponential in. + */ + const EXPONENTIAL_IN: EasingFunction.Callback; + /** + * Exponential out. + */ + const EXPONENTIAL_OUT: EasingFunction.Callback; + /** + * Exponential in then out. + */ + const EXPONENTIAL_IN_OUT: EasingFunction.Callback; + /** + * Circular in. + */ + const CIRCULAR_IN: EasingFunction.Callback; + /** + * Circular out. + */ + const CIRCULAR_OUT: EasingFunction.Callback; + /** + * Circular in then out. + */ + const CIRCULAR_IN_OUT: EasingFunction.Callback; + /** + * Elastic in. + */ + const ELASTIC_IN: EasingFunction.Callback; + /** + * Elastic out. + */ + const ELASTIC_OUT: EasingFunction.Callback; + /** + * Elastic in then out. + */ + const ELASTIC_IN_OUT: EasingFunction.Callback; + /** + * Back in. + */ + const BACK_IN: EasingFunction.Callback; + /** + * Back out. + */ + const BACK_OUT: EasingFunction.Callback; + /** + * Back in then out. + */ + const BACK_IN_OUT: EasingFunction.Callback; + /** + * Bounce in. + */ + const BOUNCE_IN: EasingFunction.Callback; + /** + * Bounce out. + */ + const BOUNCE_OUT: EasingFunction.Callback; + /** + * Bounce in then out. + */ + const BOUNCE_IN_OUT: EasingFunction.Callback; + /** + * Function interface for implementing a custom easing function. + * @example + * function quadraticIn(time) { + return time * time; + } + * @example + * function quadraticOut(time) { + return time * (2.0 - time); + } + * @param time - The time in the range [0, 1]. + */ + type Callback = (time: number) => number; +} + +/** + * A description of an ellipse on an ellipsoid. Ellipse geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * // Create an ellipse. +var ellipse = new Cesium.EllipseGeometry({ + center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), + semiMajorAxis : 500000.0, + semiMinorAxis : 300000.0, + rotation : Cesium.Math.toRadians(60.0) +}); +var geometry = Cesium.EllipseGeometry.createGeometry(ellipse); + * @param options - Object with the following properties: + * @param options.center - The ellipse's center point in the fixed frame. + * @param options.semiMajorAxis - The length of the ellipse's semi-major axis in meters. + * @param options.semiMinorAxis - The length of the ellipse's semi-minor axis in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid the ellipse will be on. + * @param [options.height = 0.0] - The distance in meters between the ellipse and the ellipsoid surface. + * @param [options.extrudedHeight] - The distance in meters between the ellipse's extruded face and the ellipsoid surface. + * @param [options.rotation = 0.0] - The angle of rotation counter-clockwise from north. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates counter-clockwise from north. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The angular distance between points on the ellipse in radians. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class EllipseGeometry { + constructor(options: { + center: Cartesian3; + semiMajorAxis: number; + semiMinorAxis: number; + ellipsoid?: Ellipsoid; + height?: number; + extrudedHeight?: number; + rotation?: number; + stRotation?: number; + granularity?: number; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: EllipseGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new EllipseGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: EllipseGeometry): EllipseGeometry; + /** + * Computes the bounding rectangle based on the provided options + * @param options - Object with the following properties: + * @param options.center - The ellipse's center point in the fixed frame. + * @param options.semiMajorAxis - The length of the ellipse's semi-major axis in meters. + * @param options.semiMinorAxis - The length of the ellipse's semi-minor axis in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid the ellipse will be on. + * @param [options.rotation = 0.0] - The angle of rotation counter-clockwise from north. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The angular distance between points on the ellipse in radians. + * @param [result] - An object in which to store the result + * @returns The result rectangle + */ + static computeRectangle(options: { + center: Cartesian3; + semiMajorAxis: number; + semiMinorAxis: number; + ellipsoid?: Ellipsoid; + rotation?: number; + granularity?: number; + }, result?: Rectangle): Rectangle; + /** + * Computes the geometric representation of a ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param ellipseGeometry - A description of the ellipse. + * @returns The computed vertices and indices. + */ + static createGeometry(ellipseGeometry: EllipseGeometry): Geometry | undefined; +} + +/** + * A description of the outline of an ellipse on an ellipsoid. + * @example + * var ellipse = new Cesium.EllipseOutlineGeometry({ + center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), + semiMajorAxis : 500000.0, + semiMinorAxis : 300000.0, + rotation : Cesium.Math.toRadians(60.0) +}); +var geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse); + * @param options - Object with the following properties: + * @param options.center - The ellipse's center point in the fixed frame. + * @param options.semiMajorAxis - The length of the ellipse's semi-major axis in meters. + * @param options.semiMinorAxis - The length of the ellipse's semi-minor axis in meters. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid the ellipse will be on. + * @param [options.height = 0.0] - The distance in meters between the ellipse and the ellipsoid surface. + * @param [options.extrudedHeight] - The distance in meters between the ellipse's extruded face and the ellipsoid surface. + * @param [options.rotation = 0.0] - The angle from north (counter-clockwise) in radians. + * @param [options.granularity = 0.02] - The angular distance between points on the ellipse in radians. + * @param [options.numberOfVerticalLines = 16] - Number of lines to draw between the top and bottom surface of an extruded ellipse. + */ +export class EllipseOutlineGeometry { + constructor(options: { + center: Cartesian3; + semiMajorAxis: number; + semiMinorAxis: number; + ellipsoid?: Ellipsoid; + height?: number; + extrudedHeight?: number; + rotation?: number; + granularity?: number; + numberOfVerticalLines?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: EllipseOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new EllipseOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: EllipseOutlineGeometry): EllipseOutlineGeometry; + /** + * Computes the geometric representation of an outline of an ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param ellipseGeometry - A description of the ellipse. + * @returns The computed vertices and indices. + */ + static createGeometry(ellipseGeometry: EllipseOutlineGeometry): Geometry | undefined; +} + +/** + * A quadratic surface defined in Cartesian coordinates by the equation +(x / a)^2 + (y / b)^2 + (z / c)^2 = 1. Primarily used +by Cesium to represent the shape of planetary bodies. + +Rather than constructing this object directly, one of the provided +constants is normally used. + * @param [x = 0] - The radius in the x direction. + * @param [y = 0] - The radius in the y direction. + * @param [z = 0] - The radius in the z direction. + */ +export class Ellipsoid { + constructor(x?: number, y?: number, z?: number); + /** + * Gets the radii of the ellipsoid. + */ + readonly radii: Cartesian3; + /** + * Gets the squared radii of the ellipsoid. + */ + readonly radiiSquared: Cartesian3; + /** + * Gets the radii of the ellipsoid raise to the fourth power. + */ + readonly radiiToTheFourth: Cartesian3; + /** + * Gets one over the radii of the ellipsoid. + */ + readonly oneOverRadii: Cartesian3; + /** + * Gets one over the squared radii of the ellipsoid. + */ + readonly oneOverRadiiSquared: Cartesian3; + /** + * Gets the minimum radius of the ellipsoid. + */ + readonly minimumRadius: number; + /** + * Gets the maximum radius of the ellipsoid. + */ + readonly maximumRadius: number; + /** + * Duplicates an Ellipsoid instance. + * @param ellipsoid - The ellipsoid to duplicate. + * @param [result] - The object onto which to store the result, or undefined if a new + instance should be created. + * @returns The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined) + */ + static clone(ellipsoid: Ellipsoid, result?: Ellipsoid): Ellipsoid; + /** + * Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions. + * @param [cartesian = Cartesian3.ZERO] - The ellipsoid's radius in the x, y, and z directions. + * @param [result] - The object onto which to store the result, or undefined if a new + instance should be created. + * @returns A new Ellipsoid instance. + */ + static fromCartesian3(cartesian?: Cartesian3, result?: Ellipsoid): Ellipsoid; + /** + * An Ellipsoid instance initialized to the WGS84 standard. + */ + static readonly WGS84: Ellipsoid; + /** + * An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0). + */ + static readonly UNIT_SPHERE: Ellipsoid; + /** + * An Ellipsoid instance initialized to a sphere with the lunar radius. + */ + static readonly MOON: Ellipsoid; + /** + * Duplicates an Ellipsoid instance. + * @param [result] - The object onto which to store the result, or undefined if a new + instance should be created. + * @returns The cloned Ellipsoid. + */ + clone(result?: Ellipsoid): Ellipsoid; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Ellipsoid, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Ellipsoid instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Ellipsoid): Ellipsoid; + /** + * Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position. + * @param cartesian - The Cartesian for which to to determine the geocentric normal. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided. + */ + geocentricSurfaceNormal(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. + * @param cartographic - The cartographic position for which to to determine the geodetic normal. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided. + */ + geodeticSurfaceNormalCartographic(cartographic: Cartographic, result?: Cartesian3): Cartesian3; + /** + * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. + * @param cartesian - The Cartesian position for which to to determine the surface normal. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided, or undefined if a normal cannot be found. + */ + geodeticSurfaceNormal(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Converts the provided cartographic to Cartesian representation. + * @example + * //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid. + var position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000); + var cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position); + * @param cartographic - The cartographic position. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided. + */ + cartographicToCartesian(cartographic: Cartographic, result?: Cartesian3): Cartesian3; + /** + * Converts the provided array of cartographics to an array of Cartesians. + * @example + * //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid. + var positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0), + new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100), + new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)]; + var cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions); + * @param cartographics - An array of cartographic positions. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Array instance if none was provided. + */ + cartographicArrayToCartesianArray(cartographics: Cartographic[], result?: Cartesian3[]): Cartesian3[]; + /** + * Converts the provided cartesian to cartographic representation. + The cartesian is undefined at the center of the ellipsoid. + * @example + * //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid. + var position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73); + var cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); + * @param cartesian - The Cartesian position to convert to cartographic representation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid. + */ + cartesianToCartographic(cartesian: Cartesian3, result?: Cartographic): Cartographic; + /** + * Converts the provided array of cartesians to an array of cartographics. + * @example + * //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid. + var positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73), + new Cesium.Cartesian3(17832.13, 83234.53, 952313.73), + new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)] + var cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions); + * @param cartesians - An array of Cartesian positions. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Array instance if none was provided. + */ + cartesianArrayToCartographicArray(cartesians: Cartesian3[], result?: Cartographic[]): Cartographic[]; + /** + * Scales the provided Cartesian position along the geodetic surface normal + so that it is on the surface of this ellipsoid. If the position is + at the center of the ellipsoid, this function returns undefined. + * @param cartesian - The Cartesian position to scale. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center. + */ + scaleToGeodeticSurface(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Scales the provided Cartesian position along the geocentric surface normal + so that it is on the surface of this ellipsoid. + * @param cartesian - The Cartesian position to scale. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided. + */ + scaleToGeocentricSurface(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying + its components by the result of {@link Ellipsoid#oneOverRadii}. + * @param position - The position to transform. + * @param [result] - The position to which to copy the result, or undefined to create and + return a new instance. + * @returns The position expressed in the scaled space. The returned instance is the + one passed as the result parameter if it is not undefined, or a new instance of it is. + */ + transformPositionToScaledSpace(position: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying + its components by the result of {@link Ellipsoid#radii}. + * @param position - The position to transform. + * @param [result] - The position to which to copy the result, or undefined to create and + return a new instance. + * @returns The position expressed in the unscaled space. The returned instance is the + one passed as the result parameter if it is not undefined, or a new instance of it is. + */ + transformPositionFromScaledSpace(position: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Compares this Ellipsoid against the provided Ellipsoid componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The other Ellipsoid. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Ellipsoid): boolean; + /** + * Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'. + * @returns A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'. + */ + toString(): string; + /** + * Computes a point which is the intersection of the surface normal with the z-axis. + * @param position - the position. must be on the surface of the ellipsoid. + * @param [buffer = 0.0] - A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid. + In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center. + In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis). + Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2 + * @param [result] - The cartesian to which to copy the result, or undefined to create and + return a new instance. + * @returns the intersection point if it's inside the ellipsoid, undefined otherwise + */ + getSurfaceNormalIntersectionWithZAxis(position: Cartesian3, buffer?: number, result?: Cartesian3): Cartesian3 | undefined; + /** + * Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using + Gauss-Legendre 10th order quadrature. + * @param rectangle - The rectangle used for computing the surface area. + * @returns The approximate area of the rectangle on the surface of this ellipsoid. + */ + surfaceArea(rectangle: Rectangle): number; +} + +/** + * Initializes a geodesic on the ellipsoid connecting the two provided planetodetic points. + * @param [start] - The initial planetodetic point on the path. + * @param [end] - The final planetodetic point on the path. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the geodesic lies. + */ +export class EllipsoidGeodesic { + constructor(start?: Cartographic, end?: Cartographic, ellipsoid?: Ellipsoid); + /** + * Gets the ellipsoid. + */ + readonly ellipsoid: Ellipsoid; + /** + * Gets the surface distance between the start and end point + */ + readonly surfaceDistance: number; + /** + * Gets the initial planetodetic point on the path. + */ + readonly start: Cartographic; + /** + * Gets the final planetodetic point on the path. + */ + readonly end: Cartographic; + /** + * Gets the heading at the initial point. + */ + readonly startHeading: number; + /** + * Gets the heading at the final point. + */ + readonly endHeading: number; + /** + * Sets the start and end points of the geodesic + * @param start - The initial planetodetic point on the path. + * @param end - The final planetodetic point on the path. + */ + setEndPoints(start: Cartographic, end: Cartographic): void; + /** + * Provides the location of a point at the indicated portion along the geodesic. + * @param fraction - The portion of the distance between the initial and final points. + * @param [result] - The object in which to store the result. + * @returns The location of the point along the geodesic. + */ + interpolateUsingFraction(fraction: number, result?: Cartographic): Cartographic; + /** + * Provides the location of a point at the indicated distance along the geodesic. + * @param distance - The distance from the inital point to the point of interest along the geodesic + * @param [result] - The object in which to store the result. + * @returns The location of the point along the geodesic. + */ + interpolateUsingSurfaceDistance(distance: number, result?: Cartographic): Cartographic; +} + +/** + * A description of an ellipsoid centered at the origin. + * @example + * var ellipsoid = new Cesium.EllipsoidGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY, + radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0) +}); +var geometry = Cesium.EllipsoidGeometry.createGeometry(ellipsoid); + * @param [options] - Object with the following properties: + * @param [options.radii = Cartesian3(1.0, 1.0, 1.0)] - The radii of the ellipsoid in the x, y, and z directions. + * @param [options.innerRadii = options.radii] - The inner radii of the ellipsoid in the x, y, and z directions. + * @param [options.minimumClock = 0.0] - The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. + * @param [options.maximumClock = 2*PI] - The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. + * @param [options.minimumCone = 0.0] - The minimum angle measured from the positive z-axis and toward the negative z-axis. + * @param [options.maximumCone = PI] - The maximum angle measured from the positive z-axis and toward the negative z-axis. + * @param [options.stackPartitions = 64] - The number of times to partition the ellipsoid into stacks. + * @param [options.slicePartitions = 64] - The number of times to partition the ellipsoid into radial slices. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class EllipsoidGeometry { + constructor(options?: { + radii?: Cartesian3; + innerRadii?: Cartesian3; + minimumClock?: number; + maximumClock?: number; + minimumCone?: number; + maximumCone?: number; + stackPartitions?: number; + slicePartitions?: number; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: EllipsoidGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new EllipsoidGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: EllipsoidGeometry): EllipsoidGeometry; + /** + * Computes the geometric representation of an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param ellipsoidGeometry - A description of the ellipsoid. + * @returns The computed vertices and indices. + */ + static createGeometry(ellipsoidGeometry: EllipsoidGeometry): Geometry | undefined; +} + +/** + * A description of the outline of an ellipsoid centered at the origin. + * @example + * var ellipsoid = new Cesium.EllipsoidOutlineGeometry({ + radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0), + stackPartitions: 6, + slicePartitions: 5 +}); +var geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid); + * @param [options] - Object with the following properties: + * @param [options.radii = Cartesian3(1.0, 1.0, 1.0)] - The radii of the ellipsoid in the x, y, and z directions. + * @param [options.innerRadii = options.radii] - The inner radii of the ellipsoid in the x, y, and z directions. + * @param [options.minimumClock = 0.0] - The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. + * @param [options.maximumClock = 2*PI] - The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. + * @param [options.minimumCone = 0.0] - The minimum angle measured from the positive z-axis and toward the negative z-axis. + * @param [options.maximumCone = PI] - The maximum angle measured from the positive z-axis and toward the negative z-axis. + * @param [options.stackPartitions = 10] - The count of stacks for the ellipsoid (1 greater than the number of parallel lines). + * @param [options.slicePartitions = 8] - The count of slices for the ellipsoid (Equal to the number of radial lines). + * @param [options.subdivisions = 128] - The number of points per line, determining the granularity of the curvature. + */ +export class EllipsoidOutlineGeometry { + constructor(options?: { + radii?: Cartesian3; + innerRadii?: Cartesian3; + minimumClock?: number; + maximumClock?: number; + minimumCone?: number; + maximumCone?: number; + stackPartitions?: number; + slicePartitions?: number; + subdivisions?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: EllipsoidOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new EllipsoidOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: EllipsoidOutlineGeometry): EllipsoidOutlineGeometry; + /** + * Computes the geometric representation of an outline of an ellipsoid, including its vertices, indices, and a bounding sphere. + * @param ellipsoidGeometry - A description of the ellipsoid outline. + * @returns The computed vertices and indices. + */ + static createGeometry(ellipsoidGeometry: EllipsoidOutlineGeometry): Geometry | undefined; +} + +/** + * Initializes a rhumb line on the ellipsoid connecting the two provided planetodetic points. + * @param [start] - The initial planetodetic point on the path. + * @param [end] - The final planetodetic point on the path. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rhumb line lies. + */ +export class EllipsoidRhumbLine { + constructor(start?: Cartographic, end?: Cartographic, ellipsoid?: Ellipsoid); + /** + * Gets the ellipsoid. + */ + readonly ellipsoid: Ellipsoid; + /** + * Gets the surface distance between the start and end point + */ + readonly surfaceDistance: number; + /** + * Gets the initial planetodetic point on the path. + */ + readonly start: Cartographic; + /** + * Gets the final planetodetic point on the path. + */ + readonly end: Cartographic; + /** + * Gets the heading from the start point to the end point. + */ + readonly heading: number; + /** + * Create a rhumb line using an initial position with a heading and distance. + * @param start - The initial planetodetic point on the path. + * @param heading - The heading in radians. + * @param distance - The rhumb line distance between the start and end point. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rhumb line lies. + * @param [result] - The object in which to store the result. + * @returns The EllipsoidRhumbLine object. + */ + static fromStartHeadingDistance(start: Cartographic, heading: number, distance: number, ellipsoid?: Ellipsoid, result?: EllipsoidRhumbLine): EllipsoidRhumbLine; + /** + * Sets the start and end points of the rhumb line. + * @param start - The initial planetodetic point on the path. + * @param end - The final planetodetic point on the path. + */ + setEndPoints(start: Cartographic, end: Cartographic): void; + /** + * Provides the location of a point at the indicated portion along the rhumb line. + * @param fraction - The portion of the distance between the initial and final points. + * @param [result] - The object in which to store the result. + * @returns The location of the point along the rhumb line. + */ + interpolateUsingFraction(fraction: number, result?: Cartographic): Cartographic; + /** + * Provides the location of a point at the indicated distance along the rhumb line. + * @param distance - The distance from the inital point to the point of interest along the rhumbLine. + * @param [result] - The object in which to store the result. + * @returns The location of the point along the rhumb line. + */ + interpolateUsingSurfaceDistance(distance: number, result?: Cartographic): Cartographic; + /** + * Provides the location of a point at the indicated longitude along the rhumb line. + If the longitude is outside the range of start and end points, the first intersection with the longitude from the start point in the direction of the heading is returned. This follows the spiral property of a rhumb line. + * @param intersectionLongitude - The longitude, in radians, at which to find the intersection point from the starting point using the heading. + * @param [result] - The object in which to store the result. + * @returns The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections. + */ + findIntersectionWithLongitude(intersectionLongitude: number, result?: Cartographic): Cartographic; + /** + * Provides the location of a point at the indicated latitude along the rhumb line. + If the latitude is outside the range of start and end points, the first intersection with the latitude from that start point in the direction of the heading is returned. This follows the spiral property of a rhumb line. + * @param intersectionLatitude - The latitude, in radians, at which to find the intersection point from the starting point using the heading. + * @param [result] - The object in which to store the result. + * @returns The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections. + */ + findIntersectionWithLatitude(intersectionLatitude: number, result?: Cartographic): Cartographic; +} + +/** + * A plane tangent to the provided ellipsoid at the provided origin. +If origin is not on the surface of the ellipsoid, it's surface projection will be used. +If origin is at the center of the ellipsoid, an exception will be thrown. + * @param origin - The point on the surface of the ellipsoid where the tangent plane touches. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid to use. + */ +export class EllipsoidTangentPlane { + constructor(origin: Cartesian3, ellipsoid?: Ellipsoid); + /** + * Gets the ellipsoid. + */ + ellipsoid: Ellipsoid; + /** + * Gets the origin. + */ + origin: Cartesian3; + /** + * Gets the plane which is tangent to the ellipsoid. + */ + readonly plane: Plane; + /** + * Gets the local X-axis (east) of the tangent plane. + */ + readonly xAxis: Cartesian3; + /** + * Gets the local Y-axis (north) of the tangent plane. + */ + readonly yAxis: Cartesian3; + /** + * Gets the local Z-axis (up) of the tangent plane. + */ + readonly zAxis: Cartesian3; + /** + * Creates a new instance from the provided ellipsoid and the center + point of the provided Cartesians. + * @param cartesians - The list of positions surrounding the center point. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid to use. + * @returns The new instance of EllipsoidTangentPlane. + */ + static fromPoints(cartesians: Cartesian3[], ellipsoid?: Ellipsoid): EllipsoidTangentPlane; + /** + * Computes the projection of the provided 3D position onto the 2D plane, radially outward from the {@link EllipsoidTangentPlane.ellipsoid} coordinate system origin. + * @param cartesian - The point to project. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if none was provided. Undefined if there is no intersection point + */ + projectPointOntoPlane(cartesian: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Computes the projection of the provided 3D positions onto the 2D plane (where possible), radially outward from the global origin. + The resulting array may be shorter than the input array - if a single projection is impossible it will not be included. + * @param cartesians - The array of points to project. + * @param [result] - The array of Cartesian2 instances onto which to store results. + * @returns The modified result parameter or a new array of Cartesian2 instances if none was provided. + */ + projectPointsOntoPlane(cartesians: Cartesian3[], result?: Cartesian2[]): Cartesian2[]; + /** + * Computes the projection of the provided 3D position onto the 2D plane, along the plane normal. + * @param cartesian - The point to project. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if none was provided. + */ + projectPointToNearestOnPlane(cartesian: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Computes the projection of the provided 3D positions onto the 2D plane, along the plane normal. + * @param cartesians - The array of points to project. + * @param [result] - The array of Cartesian2 instances onto which to store results. + * @returns The modified result parameter or a new array of Cartesian2 instances if none was provided. This will have the same length as cartesians. + */ + projectPointsToNearestOnPlane(cartesians: Cartesian3[], result?: Cartesian2[]): Cartesian2[]; + /** + * Computes the projection of the provided 2D position onto the 3D ellipsoid. + * @param cartesian - The points to project. + * @param [result] - The Cartesian3 instance to store result. + * @returns The modified result parameter or a new Cartesian3 instance if none was provided. + */ + projectPointOntoEllipsoid(cartesian: Cartesian2, result?: Cartesian3): Cartesian3; + /** + * Computes the projection of the provided 2D positions onto the 3D ellipsoid. + * @param cartesians - The array of points to project. + * @param [result] - The array of Cartesian3 instances onto which to store results. + * @returns The modified result parameter or a new array of Cartesian3 instances if none was provided. + */ + projectPointsOntoEllipsoid(cartesians: Cartesian2[], result?: Cartesian3[]): Cartesian3[]; +} + +/** + * A very simple {@link TerrainProvider} that produces geometry by tessellating an ellipsoidal +surface. + * @param [options] - Object with the following properties: + * @param [options.tilingScheme] - The tiling scheme specifying how the ellipsoidal +surface is broken into tiles. If this parameter is not provided, a {@link GeographicTilingScheme} +is used. + * @param [options.ellipsoid] - The ellipsoid. If the tilingScheme is specified, +this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither +parameter is specified, the WGS84 ellipsoid is used. + */ +export class EllipsoidTerrainProvider { + constructor(options?: { + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + }); + /** + * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + errorEvent: Event; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should not be called before {@link EllipsoidTerrainProvider#ready} returns true. + */ + credit: Credit; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link EllipsoidTerrainProvider#ready} returns true. + */ + tilingScheme: GeographicTilingScheme; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link EllipsoidTerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link EllipsoidTerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link TerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. + */ + availability: TileAvailability; + /** + * Requests the geometry for a given tile. This function should not be called before + {@link TerrainProvider#ready} returns true. The result includes terrain + data and indicates that all child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets the maximum geometric error allowed in a tile at a given level. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * A generic utility class for managing subscribers for a particular event. +This class is usually instantiated inside of a container class and +exposed as a property for others to subscribe to. + * @example + * MyObject.prototype.myListener = function(arg1, arg2) { + this.myArg1Copy = arg1; + this.myArg2Copy = arg2; +} + +var myObjectInstance = new MyObject(); +var evt = new Cesium.Event(); +evt.addEventListener(MyObject.prototype.myListener, myObjectInstance); +evt.raiseEvent('1', '2'); +evt.removeEventListener(MyObject.prototype.myListener); + */ +export class Event { + constructor(); + /** + * The number of listeners currently subscribed to the event. + */ + readonly numberOfListeners: number; + /** + * Registers a callback function to be executed whenever the event is raised. + An optional scope can be provided to serve as the this pointer + in which the function will execute. + * @param listener - The function to be executed when the event is raised. + * @param [scope] - An optional object scope to serve as the this + pointer in which the listener function will execute. + * @returns A function that will remove this event listener when invoked. + */ + addEventListener(listener: (...params: any[]) => any, scope?: any): Event.RemoveCallback; + /** + * Unregisters a previously registered callback. + * @param listener - The function to be unregistered. + * @param [scope] - The scope that was originally passed to addEventListener. + * @returns true if the listener was removed; false if the listener and scope are not registered with the event. + */ + removeEventListener(listener: (...params: any[]) => any, scope?: any): boolean; + /** + * Raises the event by calling each registered listener with all supplied arguments. + * @param arguments - This method takes any number of parameters and passes them through to the listener functions. + */ + raiseEvent(...arguments: any[]): void; +} + +export namespace Event { + /** + * A function that removes a listener. + */ + type RemoveCallback = () => void; +} + +/** + * A convenience object that simplifies the common pattern of attaching event listeners +to several events, then removing all those listeners at once later, for example, in +a destroy method. + * @example + * var helper = new Cesium.EventHelper(); + +helper.add(someObject.event, listener1, this); +helper.add(otherObject.event, listener2, this); + +// later... +helper.removeAll(); + */ +export class EventHelper { + constructor(); + /** + * Adds a listener to an event, and records the registration to be cleaned up later. + * @param event - The event to attach to. + * @param listener - The function to be executed when the event is raised. + * @param [scope] - An optional object scope to serve as the this + pointer in which the listener function will execute. + * @returns A function that will remove this event listener when invoked. + */ + add(event: Event, listener: (...params: any[]) => any, scope?: any): EventHelper.RemoveCallback; + /** + * Unregisters all previously added listeners. + */ + removeAll(): void; +} + +export namespace EventHelper { + /** + * A function that removes a listener. + */ + type RemoveCallback = () => void; +} + +/** + * Constants to determine how an interpolated value is extrapolated +when querying outside the bounds of available data. + */ +export enum ExtrapolationType { + /** + * No extrapolation occurs. + */ + NONE = 0, + /** + * The first or last value is used when outside the range of sample data. + */ + HOLD = 1, + /** + * The value is extrapolated. + */ + EXTRAPOLATE = 2 +} + +/** + * A set of functions to detect whether the current browser supports +various features. + */ +export namespace FeatureDetection { + /** + * Detects whether the current browser supports the full screen standard. + * @returns true if the browser supports the full screen standard, false if not. + */ + function supportsFullscreen(): boolean; + /** + * Detects whether the current browser supports typed arrays. + * @returns true if the browser supports typed arrays, false if not. + */ + function supportsTypedArrays(): boolean; + /** + * Detects whether the current browser supports Web Workers. + * @returns true if the browsers supports Web Workers, false if not. + */ + function supportsWebWorkers(): boolean; + /** + * Detects whether the current browser supports Web Assembly. + * @returns true if the browsers supports Web Assembly, false if not. + */ + function supportsWebAssembly(): boolean; +} + +/** + * Formats an error object into a String. If available, uses name, message, and stack +properties, otherwise, falls back on toString(). + * @param object - The item to find in the array. + * @returns A string containing the formatted error. + */ +export function formatError(object: any): string; + +/** + * Describes a frustum at the given the origin and orientation. + * @param options - Object with the following properties: + * @param options.frustum - The frustum. + * @param options.origin - The origin of the frustum. + * @param options.orientation - The orientation of the frustum. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class FrustumGeometry { + constructor(options: { + frustum: PerspectiveFrustum | OrthographicFrustum; + origin: Cartesian3; + orientation: Quaternion; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: FrustumGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + */ + static unpack(array: number[], startingIndex?: number, result?: FrustumGeometry): void; + /** + * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere. + * @param frustumGeometry - A description of the frustum. + * @returns The computed vertices and indices. + */ + static createGeometry(frustumGeometry: FrustumGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a frustum with the given the origin and orientation. + * @param options - Object with the following properties: + * @param options.frustum - The frustum. + * @param options.origin - The origin of the frustum. + * @param options.orientation - The orientation of the frustum. + */ +export class FrustumOutlineGeometry { + constructor(options: { + frustum: PerspectiveFrustum | OrthographicFrustum; + origin: Cartesian3; + orientation: Quaternion; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: FrustumOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + */ + static unpack(array: number[], startingIndex?: number, result?: FrustumOutlineGeometry): void; + /** + * Computes the geometric representation of a frustum outline, including its vertices, indices, and a bounding sphere. + * @param frustumGeometry - A description of the frustum. + * @returns The computed vertices and indices. + */ + static createGeometry(frustumGeometry: FrustumOutlineGeometry): Geometry | undefined; +} + +/** + * Browser-independent functions for working with the standard fullscreen API. + */ +export namespace Fullscreen { + /** + * The element that is currently fullscreen, if any. To simply check if the + browser is in fullscreen mode or not, use {@link Fullscreen#fullscreen}. + */ + const element: any; + /** + * The name of the event on the document that is fired when fullscreen is + entered or exited. This event name is intended for use with addEventListener. + In your event handler, to determine if the browser is in fullscreen mode or not, + use {@link Fullscreen#fullscreen}. + */ + const changeEventName: string; + /** + * The name of the event that is fired when a fullscreen error + occurs. This event name is intended for use with addEventListener. + */ + const errorEventName: string; + /** + * Determine whether the browser will allow an element to be made fullscreen, or not. + For example, by default, iframes cannot go fullscreen unless the containing page + adds an "allowfullscreen" attribute (or prefixed equivalent). + */ + const enabled: boolean; + /** + * Determines if the browser is currently in fullscreen mode. + */ + const fullscreen: boolean; + /** + * Detects whether the browser supports the standard fullscreen API. + * @returns true if the browser supports the standard fullscreen API, + false otherwise. + */ + function supportsFullscreen(): boolean; + /** + * Asynchronously requests the browser to enter fullscreen mode on the given element. + If fullscreen mode is not supported by the browser, does nothing. + * @example + * // Put the entire page into fullscreen. + Cesium.Fullscreen.requestFullscreen(document.body) + + // Place only the Cesium canvas into fullscreen. + Cesium.Fullscreen.requestFullscreen(scene.canvas) + * @param element - The HTML element which will be placed into fullscreen mode. + * @param [vrDevice] - The HMDVRDevice device. + */ + function requestFullscreen(element: any, vrDevice?: any): void; + /** + * Asynchronously exits fullscreen mode. If the browser is not currently + in fullscreen, or if fullscreen mode is not supported by the browser, does nothing. + */ + function exitFullscreen(): void; +} + +export namespace GeocoderService { + /** + * @property displayName - The display name for a location + * @property destination - The bounding box for a location + */ + type Result = { + displayName: string; + destination: Rectangle | Cartesian3; + }; +} + +/** + * Provides geocoding through an external service. This type describes an interface and +is not intended to be used. + */ +export class GeocoderService { + constructor(); + /** + * @param query - The query to be sent to the geocoder service + * @param [type = GeocodeType.SEARCH] - The type of geocode to perform. + */ + geocode(query: string, type?: GeocodeType): Promise; +} + +/** + * The type of geocoding to be performed by a {@link GeocoderService}. + */ +export enum GeocodeType { + /** + * Perform a search where the input is considered complete. + */ + SEARCH = 0, + /** + * Perform an auto-complete using partial input, typically + reserved for providing possible results as a user is typing. + */ + AUTOCOMPLETE = 1 +} + +/** + * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying +them by the {@link Ellipsoid#maximumRadius}. This projection +is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée. It +is also known as EPSG:4326. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid. + */ +export class GeographicProjection { + constructor(ellipsoid?: Ellipsoid); + /** + * Gets the {@link Ellipsoid}. + */ + readonly ellipsoid: Ellipsoid; + /** + * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters. + X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the + ellipsoid. Z is the unmodified height. + * @param cartographic - The coordinates to project. + * @param [result] - An instance into which to copy the result. If this parameter is + undefined, a new instance is created and returned. + * @returns The projected coordinates. If the result parameter is not undefined, the + coordinates are copied there and that instance is returned. Otherwise, a new instance is + created and returned. + */ + project(cartographic: Cartographic, result?: Cartesian3): Cartesian3; + /** + * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic} + coordinates, in radians. Longitude and Latitude are the X and Y coordinates, respectively, + divided by the maximum radius of the ellipsoid. Height is the unmodified Z coordinate. + * @param cartesian - The Cartesian position to unproject with height (z) in meters. + * @param [result] - An instance into which to copy the result. If this parameter is + undefined, a new instance is created and returned. + * @returns The unprojected coordinates. If the result parameter is not undefined, the + coordinates are copied there and that instance is returned. Otherwise, a new instance is + created and returned. + */ + unproject(cartesian: Cartesian3, result?: Cartographic): Cartographic; +} + +/** + * A tiling scheme for geometry referenced to a simple {@link GeographicProjection} where +longitude and latitude are directly mapped to X and Y. This projection is commonly +known as geographic, equirectangular, equidistant cylindrical, or plate carrée. + * @param [options] - Object with the following properties: + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose surface is being tiled. Defaults to +the WGS84 ellipsoid. + * @param [options.rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the tiling scheme. + * @param [options.numberOfLevelZeroTilesX = 2] - The number of tiles in the X direction at level zero of +the tile tree. + * @param [options.numberOfLevelZeroTilesY = 1] - The number of tiles in the Y direction at level zero of +the tile tree. + */ +export class GeographicTilingScheme { + constructor(options?: { + ellipsoid?: Ellipsoid; + rectangle?: Rectangle; + numberOfLevelZeroTilesX?: number; + numberOfLevelZeroTilesY?: number; + }); + /** + * Gets the ellipsoid that is tiled by this tiling scheme. + */ + ellipsoid: Ellipsoid; + /** + * Gets the rectangle, in radians, covered by this tiling scheme. + */ + rectangle: Rectangle; + /** + * Gets the map projection used by this tiling scheme. + */ + projection: MapProjection; + /** + * Gets the total number of tiles in the X direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the X direction at the given level. + */ + getNumberOfXTilesAtLevel(level: number): number; + /** + * Gets the total number of tiles in the Y direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the Y direction at the given level. + */ + getNumberOfYTilesAtLevel(level: number): number; + /** + * Transforms a rectangle specified in geodetic radians to the native coordinate system + of this tiling scheme. + * @param rectangle - The rectangle to transform. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the native rectangle if 'result' + is undefined. + */ + rectangleToNativeRectangle(rectangle: Rectangle, result?: Rectangle): Rectangle; + /** + * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates + of the tiling scheme. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToNativeRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Converts tile x, y coordinates and level to a cartographic rectangle in radians. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Calculates the tile x, y coordinates of the tile containing + a given cartographic position. + * @param position - The position. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the tile x, y coordinates + if 'result' is undefined. + */ + positionToTileXY(position: Cartographic, level: number, result?: Cartesian2): Cartesian2; +} + +/** + * A geometry representation with attributes forming vertices and optional index data +defining primitives. Geometries and an {@link Appearance}, which describes the shading, +can be assigned to a {@link Primitive} for visualization. A Primitive can +be created from many heterogeneous - in many cases - geometries for performance. +

+Geometries can be transformed and optimized using functions in {@link GeometryPipeline}. +

+ * @example + * // Create geometry with a position attribute and indexed lines. +var positions = new Float64Array([ + 0.0, 0.0, 0.0, + 7500000.0, 0.0, 0.0, + 0.0, 7500000.0, 0.0 +]); + +var geometry = new Cesium.Geometry({ + attributes : { + position : new Cesium.GeometryAttribute({ + componentDatatype : Cesium.ComponentDatatype.DOUBLE, + componentsPerAttribute : 3, + values : positions + }) + }, + indices : new Uint16Array([0, 1, 1, 2, 2, 0]), + primitiveType : Cesium.PrimitiveType.LINES, + boundingSphere : Cesium.BoundingSphere.fromVertices(positions) +}); + * @param options - Object with the following properties: + * @param options.attributes - Attributes, which make up the geometry's vertices. + * @param [options.primitiveType = PrimitiveType.TRIANGLES] - The type of primitives in the geometry. + * @param [options.indices] - Optional index data that determines the primitives in the geometry. + * @param [options.boundingSphere] - An optional bounding sphere that fully enclosed the geometry. + */ +export class Geometry { + constructor(options: { + attributes: GeometryAttributes; + primitiveType?: PrimitiveType; + indices?: Uint16Array | Uint32Array; + boundingSphere?: BoundingSphere; + }); + /** + * Attributes, which make up the geometry's vertices. Each property in this object corresponds to a + {@link GeometryAttribute} containing the attribute's data. +

+ Attributes are always stored non-interleaved in a Geometry. +

+

+ There are reserved attribute names with well-known semantics. The following attributes + are created by a Geometry (depending on the provided {@link VertexFormat}. +

    +
  • position - 3D vertex position. 64-bit floating-point (for precision). 3 components per attribute. See {@link VertexFormat#position}.
  • +
  • normal - Normal (normalized), commonly used for lighting. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#normal}.
  • +
  • st - 2D texture coordinate. 32-bit floating-point. 2 components per attribute. See {@link VertexFormat#st}.
  • +
  • bitangent - Bitangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#bitangent}.
  • +
  • tangent - Tangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#tangent}.
  • +
+

+

+ The following attribute names are generally not created by a Geometry, but are added + to a Geometry by a {@link Primitive} or {@link GeometryPipeline} functions to prepare + the geometry for rendering. +

    +
  • position3DHigh - High 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
  • +
  • position3DLow - Low 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
  • +
  • position3DHigh - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
  • +
  • position2DLow - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
  • +
  • color - RGBA color (normalized) usually from {@link GeometryInstance#color}. 32-bit floating-point. 4 components per attribute.
  • +
  • pickColor - RGBA color used for picking. 32-bit floating-point. 4 components per attribute.
  • +
+

+ * @example + * geometry.attributes.position = new Cesium.GeometryAttribute({ + componentDatatype : Cesium.ComponentDatatype.FLOAT, + componentsPerAttribute : 3, + values : new Float32Array(0) + }); + */ + attributes: GeometryAttributes; + /** + * Optional index data that - along with {@link Geometry#primitiveType} - + determines the primitives in the geometry. + */ + indices: any[]; + /** + * The type of primitives in the geometry. This is most often {@link PrimitiveType.TRIANGLES}, + but can varying based on the specific geometry. + */ + primitiveType: PrimitiveType; + /** + * An optional bounding sphere that fully encloses the geometry. This is + commonly used for culling. + */ + boundingSphere: BoundingSphere; + /** + * Computes the number of vertices in a geometry. The runtime is linear with + respect to the number of attributes in a vertex, not the number of vertices. + * @example + * var numVertices = Cesium.Geometry.computeNumberOfVertices(geometry); + * @param geometry - The geometry. + * @returns The number of vertices in the geometry. + */ + static computeNumberOfVertices(geometry: Geometry): number; +} + +/** + * Values and type information for geometry attributes. A {@link Geometry} +generally contains one or more attributes. All attributes together form +the geometry's vertices. + * @example + * var geometry = new Cesium.Geometry({ + attributes : { + position : new Cesium.GeometryAttribute({ + componentDatatype : Cesium.ComponentDatatype.FLOAT, + componentsPerAttribute : 3, + values : new Float32Array([ + 0.0, 0.0, 0.0, + 7500000.0, 0.0, 0.0, + 0.0, 7500000.0, 0.0 + ]) + }) + }, + primitiveType : Cesium.PrimitiveType.LINE_LOOP +}); + * @param [options] - Object with the following properties: + * @param [options.componentDatatype] - The datatype of each component in the attribute, e.g., individual elements in values. + * @param [options.componentsPerAttribute] - A number between 1 and 4 that defines the number of components in an attributes. + * @param [options.normalize = false] - When true and componentDatatype is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering. + * @param [options.values] - The values for the attributes stored in a typed array. + */ +export class GeometryAttribute { + constructor(options?: { + componentDatatype?: ComponentDatatype; + componentsPerAttribute?: number; + normalize?: boolean; + values?: number[] | Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; + }); + /** + * The datatype of each component in the attribute, e.g., individual elements in + {@link GeometryAttribute#values}. + */ + componentDatatype: ComponentDatatype; + /** + * A number between 1 and 4 that defines the number of components in an attributes. + For example, a position attribute with x, y, and z components would have 3 as + shown in the code example. + * @example + * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT; + attribute.componentsPerAttribute = 3; + attribute.values = new Float32Array([ + 0.0, 0.0, 0.0, + 7500000.0, 0.0, 0.0, + 0.0, 7500000.0, 0.0 + ]); + */ + componentsPerAttribute: number; + /** + * When true and componentDatatype is an integer format, + indicate that the components should be mapped to the range [0, 1] (unsigned) + or [-1, 1] (signed) when they are accessed as floating-point for rendering. +

+ This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}. +

+ * @example + * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE; + attribute.componentsPerAttribute = 4; + attribute.normalize = true; + attribute.values = new Uint8Array([ + Cesium.Color.floatToByte(color.red), + Cesium.Color.floatToByte(color.green), + Cesium.Color.floatToByte(color.blue), + Cesium.Color.floatToByte(color.alpha) + ]); + */ + normalize: boolean; + /** + * The values for the attributes stored in a typed array. In the code example, + every three elements in values defines one attributes since + componentsPerAttribute is 3. + * @example + * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT; + attribute.componentsPerAttribute = 3; + attribute.values = new Float32Array([ + 0.0, 0.0, 0.0, + 7500000.0, 0.0, 0.0, + 0.0, 7500000.0, 0.0 + ]); + */ + values: number[] | Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; +} + +/** + * Attributes, which make up a geometry's vertices. Each property in this object corresponds to a +{@link GeometryAttribute} containing the attribute's data. +

+Attributes are always stored non-interleaved in a Geometry. +

+ */ +export class GeometryAttributes { + constructor(); + /** + * The 3D position attribute. +

+ 64-bit floating-point (for precision). 3 components per attribute. +

+ */ + position: GeometryAttribute; + /** + * The normal attribute (normalized), which is commonly used for lighting. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + normal: GeometryAttribute; + /** + * The 2D texture coordinate attribute. +

+ 32-bit floating-point. 2 components per attribute +

+ */ + st: GeometryAttribute; + /** + * The bitangent attribute (normalized), which is used for tangent-space effects like bump mapping. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + bitangent: GeometryAttribute; + /** + * The tangent attribute (normalized), which is used for tangent-space effects like bump mapping. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + tangent: GeometryAttribute; + /** + * The color attribute. +

+ 8-bit unsigned integer. 4 components per attribute. +

+ */ + color: GeometryAttribute; +} + +/** + * Base class for all geometry creation utility classes that can be passed to {@link GeometryInstance} +for asynchronous geometry creation. + */ +export class GeometryFactory { + constructor(); + /** + * Returns a geometry. + * @param geometryFactory - A description of the circle. + * @returns The computed vertices and indices. + */ + static createGeometry(geometryFactory: GeometryFactory): Geometry | undefined; +} + +/** + * Geometry instancing allows one {@link Geometry} object to be positions in several +different locations and colored uniquely. For example, one {@link BoxGeometry} can +be instanced several times, each with a different modelMatrix to change +its position, rotation, and scale. + * @example + * // Create geometry for a box, and two instances that refer to it. +// One instance positions the box on the bottom and colored aqua. +// The other instance positions the box on the top and color white. +var geometry = Cesium.BoxGeometry.fromDimensions({ + vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL, + dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0) +}); +var instanceBottom = new Cesium.GeometryInstance({ + geometry : geometry, + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) + }, + id : 'bottom' +}); +var instanceTop = new Cesium.GeometryInstance({ + geometry : geometry, + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 3000000.0), new Cesium.Matrix4()), + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) + }, + id : 'top' +}); + * @param options - Object with the following properties: + * @param options.geometry - The geometry to instance. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The model matrix that transforms to transform the geometry from model to world coordinates. + * @param [options.id] - A user-defined object to return when the instance is picked with {@link Scene#pick} or get/set per-instance attributes with {@link Primitive#getGeometryInstanceAttributes}. + * @param [options.attributes] - Per-instance attributes like a show or color attribute shown in the example below. + */ +export class GeometryInstance { + constructor(options: { + geometry: Geometry | GeometryFactory; + modelMatrix?: Matrix4; + id?: any; + attributes?: any; + }); + /** + * The geometry being instanced. + */ + geometry: Geometry; + /** + * The 4x4 transformation matrix that transforms the geometry from model to world coordinates. + When this is the identity matrix, the geometry is drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + */ + modelMatrix: Matrix4; + /** + * User-defined object returned when the instance is picked or used to get/set per-instance attributes. + */ + id: any; + /** + * Per-instance attributes like {@link ColorGeometryInstanceAttribute} or {@link ShowGeometryInstanceAttribute}. + {@link Geometry} attributes varying per vertex; these attributes are constant for the entire instance. + */ + attributes: any; +} + +/** + * Values and type information for per-instance geometry attributes. + * @example + * var instance = new Cesium.GeometryInstance({ + geometry : Cesium.BoxGeometry.fromDimensions({ + dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0) + }), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), + id : 'box', + attributes : { + color : new Cesium.GeometryInstanceAttribute({ + componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE, + componentsPerAttribute : 4, + normalize : true, + value : [255, 255, 0, 255] + }) + } +}); + * @param options - Object with the following properties: + * @param options.componentDatatype - The datatype of each component in the attribute, e.g., individual elements in values. + * @param options.componentsPerAttribute - A number between 1 and 4 that defines the number of components in an attributes. + * @param [options.normalize = false] - When true and componentDatatype is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering. + * @param options.value - The value for the attribute. + */ +export class GeometryInstanceAttribute { + constructor(options: { + componentDatatype: ComponentDatatype; + componentsPerAttribute: number; + normalize?: boolean; + value: number[]; + }); + /** + * The datatype of each component in the attribute, e.g., individual elements in + {@link GeometryInstanceAttribute#value}. + */ + componentDatatype: ComponentDatatype; + /** + * A number between 1 and 4 that defines the number of components in an attributes. + For example, a position attribute with x, y, and z components would have 3 as + shown in the code example. + * @example + * show : new Cesium.GeometryInstanceAttribute({ + componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE, + componentsPerAttribute : 1, + normalize : true, + value : [1.0] + }) + */ + componentsPerAttribute: number; + /** + * When true and componentDatatype is an integer format, + indicate that the components should be mapped to the range [0, 1] (unsigned) + or [-1, 1] (signed) when they are accessed as floating-point for rendering. +

+ This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}. +

+ * @example + * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE; + attribute.componentsPerAttribute = 4; + attribute.normalize = true; + attribute.value = [ + Cesium.Color.floatToByte(color.red), + Cesium.Color.floatToByte(color.green), + Cesium.Color.floatToByte(color.blue), + Cesium.Color.floatToByte(color.alpha) + ]; + */ + normalize: boolean; + /** + * The values for the attributes stored in a typed array. In the code example, + every three elements in values defines one attributes since + componentsPerAttribute is 3. + * @example + * show : new Cesium.GeometryInstanceAttribute({ + componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE, + componentsPerAttribute : 1, + normalize : true, + value : [1.0] + }) + */ + value: number[]; +} + +/** + * Content pipeline functions for geometries. + */ +export namespace GeometryPipeline { + /** + * Converts a geometry's triangle indices to line indices. If the geometry has an indices + and its primitiveType is TRIANGLES, TRIANGLE_STRIP, + TRIANGLE_FAN, it is converted to LINES; otherwise, the geometry is not changed. +

+ This is commonly used to create a wireframe geometry for visual debugging. +

+ * @example + * geometry = Cesium.GeometryPipeline.toWireframe(geometry); + * @param geometry - The geometry to modify. + * @returns The modified geometry argument, with its triangle indices converted to lines. + */ + function toWireframe(geometry: Geometry): Geometry; + /** + * Creates a new {@link Geometry} with LINES representing the provided + attribute (attributeName) for the provided geometry. This is used to + visualize vector attributes like normals, tangents, and bitangents. + * @example + * var geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0); + * @param geometry - The Geometry instance with the attribute. + * @param [attributeName = 'normal'] - The name of the attribute. + * @param [length = 10000.0] - The length of each line segment in meters. This can be negative to point the vector in the opposite direction. + * @returns A new Geometry instance with line segments for the vector. + */ + function createLineSegmentsForVectors(geometry: Geometry, attributeName?: string, length?: number): Geometry; + /** + * Creates an object that maps attribute names to unique locations (indices) + for matching vertex attributes and shader programs. + * @example + * var attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry); + // Example output + // { + // 'position' : 0, + // 'normal' : 1 + // } + * @param geometry - The geometry, which is not modified, to create the object for. + * @returns An object with attribute name / index pairs. + */ + function createAttributeLocations(geometry: Geometry): any; + /** + * Reorders a geometry's attributes and indices to achieve better performance from the GPU's pre-vertex-shader cache. + * @example + * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry); + * @param geometry - The geometry to modify. + * @returns The modified geometry argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache. + */ + function reorderForPreVertexCache(geometry: Geometry): Geometry; + /** + * Reorders a geometry's indices to achieve better performance from the GPU's + post vertex-shader cache by using the Tipsify algorithm. If the geometry primitiveType + is not TRIANGLES or the geometry does not have an indices, this function has no effect. + * @example + * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry); + * @param geometry - The geometry to modify. + * @param [cacheCapacity = 24] - The number of vertices that can be held in the GPU's vertex cache. + * @returns The modified geometry argument, with its indices reordered for the post-vertex-shader cache. + */ + function reorderForPostVertexCache(geometry: Geometry, cacheCapacity?: number): Geometry; + /** + * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the + indices fit into unsigned shorts. This is used to meet the WebGL requirements + when unsigned int indices are not supported. +

+ If the geometry does not have any indices, this function has no effect. +

+ * @example + * var geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry); + * @param geometry - The geometry to be split into multiple geometries. + * @returns An array of geometries, each with indices that fit into unsigned shorts. + */ + function fitToUnsignedShortIndices(geometry: Geometry): Geometry[]; + /** + * Projects a geometry's 3D position attribute to 2D, replacing the position + attribute with separate position3D and position2D attributes. +

+ If the geometry does not have a position, this function has no effect. +

+ * @example + * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D'); + * @param geometry - The geometry to modify. + * @param attributeName - The name of the attribute. + * @param attributeName3D - The name of the attribute in 3D. + * @param attributeName2D - The name of the attribute in 2D. + * @param [projection = new GeographicProjection()] - The projection to use. + * @returns The modified geometry argument with position3D and position2D attributes. + */ + function projectTo2D(geometry: Geometry, attributeName: string, attributeName3D: string, attributeName2D: string, projection?: any): Geometry; + /** + * Encodes floating-point geometry attribute values as two separate attributes to improve + rendering precision. +

+ This is commonly used to create high-precision position vertex attributes. +

+ * @example + * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow'); + * @param geometry - The geometry to modify. + * @param attributeName - The name of the attribute. + * @param attributeHighName - The name of the attribute for the encoded high bits. + * @param attributeLowName - The name of the attribute for the encoded low bits. + * @returns The modified geometry argument, with its encoded attribute. + */ + function encodeAttribute(geometry: Geometry, attributeName: string, attributeHighName: string, attributeLowName: string): Geometry; + /** + * Transforms a geometry instance to world coordinates. This changes + the instance's modelMatrix to {@link Matrix4.IDENTITY} and transforms the + following attributes if they are present: position, normal, + tangent, and bitangent. + * @example + * Cesium.GeometryPipeline.transformToWorldCoordinates(instance); + * @param instance - The geometry instance to modify. + * @returns The modified instance argument, with its attributes transforms to world coordinates. + */ + function transformToWorldCoordinates(instance: GeometryInstance): GeometryInstance; + /** + * Computes per-vertex normals for a geometry containing TRIANGLES by averaging the normals of + all triangles incident to the vertex. The result is a new normal attribute added to the geometry. + This assumes a counter-clockwise winding order. + * @example + * Cesium.GeometryPipeline.computeNormal(geometry); + * @param geometry - The geometry to modify. + * @returns The modified geometry argument with the computed normal attribute. + */ + function computeNormal(geometry: Geometry): Geometry; + /** + * Computes per-vertex tangents and bitangents for a geometry containing TRIANGLES. + The result is new tangent and bitangent attributes added to the geometry. + This assumes a counter-clockwise winding order. +

+ Based on Computing Tangent Space Basis Vectors + for an Arbitrary Mesh by Eric Lengyel. +

+ * @example + * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry); + * @param geometry - The geometry to modify. + * @returns The modified geometry argument with the computed tangent and bitangent attributes. + */ + function computeTangentAndBitangent(geometry: Geometry): Geometry; + /** + * Compresses and packs geometry normal attribute values to save memory. + * @example + * geometry = Cesium.GeometryPipeline.compressVertices(geometry); + * @param geometry - The geometry to modify. + * @returns The modified geometry argument, with its normals compressed and packed. + */ + function compressVertices(geometry: Geometry): Geometry; +} + +/** + * Given a relative Uri and a base Uri, returns the absolute Uri of the relative Uri. + * @example + * //absolute Uri will be "https://test.com/awesome.png"; +var absoluteUri = Cesium.getAbsoluteUri('awesome.png', 'https://test.com'); + * @param relative - The relative Uri. + * @param [base] - The base Uri. + * @returns The absolute Uri of the given relative Uri. + */ +export function getAbsoluteUri(relative: string, base?: string): string; + +/** + * Given a URI, returns the base path of the URI. + * @example + * // basePath will be "/Gallery/"; +var basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false'); + +// basePath will be "/Gallery/?value=true&example=false"; +var basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false', true); + * @param uri - The Uri. + * @param [includeQuery = false] - Whether or not to include the query string and fragment form the uri + * @returns The base path of the Uri. + */ +export function getBaseUri(uri: string, includeQuery?: boolean): string; + +/** + * Given a URI, returns the extension of the URI. + * @example + * //extension will be "czml"; +var extension = Cesium.getExtensionFromUri('/Gallery/simple.czml?value=true&example=false'); + * @param uri - The Uri. + * @returns The extension of the Uri. + */ +export function getExtensionFromUri(uri: string): string; + +/** + * Given a URI, returns the last segment of the URI, removing any path or query information. + * @example + * //fileName will be"simple.czml"; +var fileName = Cesium.getFilenameFromUri('/Gallery/simple.czml?value=true&example=false'); + * @param uri - The Uri. + * @returns The last segment of the Uri. + */ +export function getFilenameFromUri(uri: string): string; + +/** + * Extract a pixel array from a loaded image. Draws the image +into a canvas so it can read the pixels back. + * @param image - The image to extract pixels from. + * @param width - The width of the image. If not defined, then image.width is assigned. + * @param height - The height of the image. If not defined, then image.height is assigned. + * @returns The pixels of the image. + */ +export function getImagePixels(image: HTMLImageElement, width: number, height: number): ImageData; + +/** + * Gets a timestamp that can be used in measuring the time between events. Timestamps +are expressed in milliseconds, but it is not specified what the milliseconds are +measured from. This function uses performance.now() if it is available, or Date.now() +otherwise. + * @returns The timestamp in milliseconds since some unspecified reference time. + */ +export function getTimestamp(): number; + +/** + * Provides metadata using the Google Earth Enterprise REST API. This is used by the GoogleEarthEnterpriseImageryProvider + and GoogleEarthEnterpriseTerrainProvider to share metadata requests. + * @param resourceOrUrl - The url of the Google Earth Enterprise server hosting the imagery + */ +export class GoogleEarthEnterpriseMetadata { + constructor(resourceOrUrl: Resource | string); + /** + * True if imagery is available. + */ + imageryPresent: boolean; + /** + * True if imagery is sent as a protocol buffer, false if sent as plain images. If undefined we will try both. + */ + protoImagery: boolean; + /** + * True if terrain is available. + */ + terrainPresent: boolean; + /** + * Exponent used to compute constant to calculate negative height values. + */ + negativeAltitudeExponentBias: number; + /** + * Threshold where any numbers smaller are actually negative values. They are multiplied by -2^negativeAltitudeExponentBias. + */ + negativeAltitudeThreshold: number; + /** + * Dictionary of provider id to copyright strings. + */ + providers: any; + /** + * Key used to decode packets + */ + key: ArrayBuffer; + /** + * Gets the name of the Google Earth Enterprise server. + */ + readonly url: string; + /** + * Gets the proxy used for metadata requests. + */ + readonly proxy: Proxy; + /** + * Gets the resource used for metadata requests. + */ + readonly resource: Resource; + /** + * Gets a promise that resolves to true when the metadata is ready for use. + */ + readonly readyPromise: Promise; + /** + * Converts a tiles (x, y, level) position into a quadkey used to request an image + from a Google Earth Enterprise server. + * @param x - The tile's x coordinate. + * @param y - The tile's y coordinate. + * @param level - The tile's zoom level. + */ + static tileXYToQuadKey(x: number, y: number, level: number): void; + /** + * Converts a tile's quadkey used to request an image from a Google Earth Enterprise server into the + (x, y, level) position. + * @param quadkey - The tile's quad key + */ + static quadKeyToTileXY(quadkey: string): void; +} + +/** + * Terrain data for a single tile from a Google Earth Enterprise server. + * @example + * var buffer = ... +var childTileMask = ... +var terrainData = new Cesium.GoogleEarthEnterpriseTerrainData({ + buffer : heightBuffer, + childTileMask : childTileMask +}); + * @param options - Object with the following properties: + * @param options.buffer - The buffer containing terrain data. + * @param options.negativeAltitudeExponentBias - Multiplier for negative terrain heights that are encoded as very small positive values. + * @param options.negativeElevationThreshold - Threshold for negative values + * @param [options.childTileMask = 15] - A bit mask indicating which of this tile's four children exist. + If a child's bit is set, geometry will be requested for that tile as well when it + is needed. If the bit is cleared, the child tile is not requested and geometry is + instead upsampled from the parent. The bit values are as follows: + + + + + + +
Bit PositionBit ValueChild Tile
01Southwest
12Southeast
24Northeast
38Northwest
+ * @param [options.createdByUpsampling = false] - True if this instance was created by upsampling another instance; + otherwise, false. + * @param [options.credits] - Array of credits for this tile. + */ +export class GoogleEarthEnterpriseTerrainData { + constructor(options: { + buffer: ArrayBuffer; + negativeAltitudeExponentBias: number; + negativeElevationThreshold: number; + childTileMask?: number; + createdByUpsampling?: boolean; + credits?: Credit[]; + }); + /** + * An array of credits for this tile + */ + credits: Credit[]; + /** + * The water mask included in this terrain data, if any. A water mask is a rectangular + Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land. + Values in between 0 and 255 are allowed as well to smoothly blend between land and water. + */ + waterMask: Uint8Array | HTMLImageElement | HTMLCanvasElement; + /** + * Computes the terrain height at a specified longitude and latitude. + * @param rectangle - The rectangle covered by this terrain data. + * @param longitude - The longitude in radians. + * @param latitude - The latitude in radians. + * @returns The terrain height at the specified position. If the position + is outside the rectangle, this method will extrapolate the height, which is likely to be wildly + incorrect for positions far outside the rectangle. + */ + interpolateHeight(rectangle: Rectangle, longitude: number, latitude: number): number; + /** + * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the + height samples in this instance, interpolated if necessary. + * @param tilingScheme - The tiling scheme of this terrain data. + * @param thisX - The X coordinate of this tile in the tiling scheme. + * @param thisY - The Y coordinate of this tile in the tiling scheme. + * @param thisLevel - The level of this tile in the tiling scheme. + * @param descendantX - The X coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantY - The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantLevel - The level within the tiling scheme of the descendant tile for which we are upsampling. + * @returns A promise for upsampled heightmap terrain data for the descendant tile, + or undefined if too many asynchronous upsample operations are in progress and the request has been + deferred. + */ + upsample(tilingScheme: TilingScheme, thisX: number, thisY: number, thisLevel: number, descendantX: number, descendantY: number, descendantLevel: number): Promise | undefined; + /** + * Determines if a given child tile is available, based on the + {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed + to be one of the four children of this tile. If non-child tile coordinates are + given, the availability of the southeast child tile is returned. + * @param thisX - The tile X coordinate of this (the parent) tile. + * @param thisY - The tile Y coordinate of this (the parent) tile. + * @param childX - The tile X coordinate of the child tile to check for availability. + * @param childY - The tile Y coordinate of the child tile to check for availability. + * @returns True if the child tile is available; otherwise, false. + */ + isChildAvailable(thisX: number, thisY: number, childX: number, childY: number): boolean; + /** + * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution + terrain data. If this value is false, the data was obtained from some other source, such + as by downloading it from a remote server. This method should return true for instances + returned from a call to {@link HeightmapTerrainData#upsample}. + * @returns True if this instance was created by upsampling; otherwise, false. + */ + wasCreatedByUpsampling(): boolean; +} + +/** + * Provides tiled terrain using the Google Earth Enterprise REST API. + * @example + * var geeMetadata = new GoogleEarthEnterpriseMetadata('http://www.earthenterprise.org/3d'); +var gee = new Cesium.GoogleEarthEnterpriseTerrainProvider({ + metadata : geeMetadata +}); + * @param options - Object with the following properties: + * @param options.url - The url of the Google Earth Enterprise server hosting the imagery. + * @param options.metadata - A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseImageryProvider. + * @param [options.ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + */ +export class GoogleEarthEnterpriseTerrainProvider { + constructor(options: { + url: Resource | string; + metadata: GoogleEarthEnterpriseMetadata; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }); + /** + * Gets the name of the Google Earth Enterprise server url hosting the imagery. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. + */ + availability: TileAvailability; + /** + * Requests the geometry for a given tile. This function should not be called before + {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. The result must include terrain data and + may optionally include a water mask and an indication of which child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets the maximum geometric error allowed in a tile at a given level. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * Represents a Gregorian date in a more precise format than the JavaScript Date object. +In addition to submillisecond precision, this object can also represent leap seconds. + * @param [year] - The year as a whole number. + * @param [month] - The month as a whole number with range [1, 12]. + * @param [day] - The day of the month as a whole number starting at 1. + * @param [hour] - The hour as a whole number with range [0, 23]. + * @param [minute] - The minute of the hour as a whole number with range [0, 59]. + * @param [second] - The second of the minute as a whole number with range [0, 60], with 60 representing a leap second. + * @param [millisecond] - The millisecond of the second as a floating point number with range [0.0, 1000.0). + * @param [isLeapSecond] - Whether this time is during a leap second. + */ +export class GregorianDate { + constructor(year?: number, month?: number, day?: number, hour?: number, minute?: number, second?: number, millisecond?: number, isLeapSecond?: boolean); + /** + * Gets or sets the year as a whole number. + */ + year: number; + /** + * Gets or sets the month as a whole number with range [1, 12]. + */ + month: number; + /** + * Gets or sets the day of the month as a whole number starting at 1. + */ + day: number; + /** + * Gets or sets the hour as a whole number with range [0, 23]. + */ + hour: number; + /** + * Gets or sets the minute of the hour as a whole number with range [0, 59]. + */ + minute: number; + /** + * Gets or sets the second of the minute as a whole number with range [0, 60], with 60 representing a leap second. + */ + second: number; + /** + * Gets or sets the millisecond of the second as a floating point number with range [0.0, 1000.0). + */ + millisecond: number; + /** + * Gets or sets whether this time is during a leap second. + */ + isLeapSecond: boolean; +} + +/** + * A description of a polyline on terrain or 3D Tiles. Only to be used with {@link GroundPolylinePrimitive}. + * @example + * var positions = Cesium.Cartesian3.fromDegreesArray([ + -112.1340164450331, 36.05494287836128, + -112.08821010582645, 36.097804071380715, + -112.13296079730024, 36.168769146801104 +]); + +var geometry = new Cesium.GroundPolylineGeometry({ + positions : positions +}); + * @param options - Options with the following properties: + * @param options.positions - An array of {@link Cartesian3} defining the polyline's points. Heights above the ellipsoid will be ignored. + * @param [options.width = 1.0] - The screen space width in pixels. + * @param [options.granularity = 9999.0] - The distance interval in meters used for interpolating options.points. Defaults to 9999.0 meters. Zero indicates no interpolation. + * @param [options.loop = false] - Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polyline segments must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + */ +export class GroundPolylineGeometry { + constructor(options: { + positions: Cartesian3[]; + width?: number; + granularity?: number; + loop?: boolean; + arcType?: ArcType; + }); + /** + * The screen space width in pixels. + */ + width: number; + /** + * The distance interval used for interpolating options.points. Zero indicates no interpolation. + Default of 9999.0 allows centimeter accuracy with 32 bit floating point. + */ + granularity: boolean; + /** + * Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop. + If the geometry has two positions this parameter will be ignored. + */ + loop: boolean; + /** + * The type of path the polyline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + */ + arcType: ArcType; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolygonGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + */ + static unpack(array: number[], startingIndex?: number, result?: PolygonGeometry): void; +} + +/** + * Defines a heading angle, pitch angle, and range in a local frame. +Heading is the rotation from the local north direction where a positive angle is increasing eastward. +Pitch is the rotation from the local xy-plane. Positive pitch angles are above the plane. Negative pitch +angles are below the plane. Range is the distance from the center of the frame. + * @param [heading = 0.0] - The heading angle in radians. + * @param [pitch = 0.0] - The pitch angle in radians. + * @param [range = 0.0] - The distance from the center in meters. + */ +export class HeadingPitchRange { + constructor(heading?: number, pitch?: number, range?: number); + /** + * Heading is the rotation from the local north direction where a positive angle is increasing eastward. + */ + heading: number; + /** + * Pitch is the rotation from the local xy-plane. Positive pitch angles + are above the plane. Negative pitch angles are below the plane. + */ + pitch: number; + /** + * Range is the distance from the center of the local frame. + */ + range: number; + /** + * Duplicates a HeadingPitchRange instance. + * @param hpr - The HeadingPitchRange to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new HeadingPitchRange instance if one was not provided. (Returns undefined if hpr is undefined) + */ + static clone(hpr: HeadingPitchRange, result?: HeadingPitchRange): HeadingPitchRange; +} + +/** + * A rotation expressed as a heading, pitch, and roll. Heading is the rotation about the +negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about +the positive x axis. + * @param [heading = 0.0] - The heading component in radians. + * @param [pitch = 0.0] - The pitch component in radians. + * @param [roll = 0.0] - The roll component in radians. + */ +export class HeadingPitchRoll { + constructor(heading?: number, pitch?: number, roll?: number); + /** + * Gets or sets the heading. + */ + heading: number; + /** + * Gets or sets the pitch. + */ + pitch: number; + /** + * Gets or sets the roll. + */ + roll: number; + /** + * Computes the heading, pitch and roll from a quaternion (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles ) + * @param quaternion - The quaternion from which to retrieve heading, pitch, and roll, all expressed in radians. + * @param [result] - The object in which to store the result. If not provided, a new instance is created and returned. + * @returns The modified result parameter or a new HeadingPitchRoll instance if one was not provided. + */ + static fromQuaternion(quaternion: Quaternion, result?: HeadingPitchRoll): HeadingPitchRoll; + /** + * Returns a new HeadingPitchRoll instance from angles given in degrees. + * @param heading - the heading in degrees + * @param pitch - the pitch in degrees + * @param roll - the heading in degrees + * @param [result] - The object in which to store the result. If not provided, a new instance is created and returned. + * @returns A new HeadingPitchRoll instance + */ + static fromDegrees(heading: number, pitch: number, roll: number, result?: HeadingPitchRoll): HeadingPitchRoll; + /** + * Duplicates a HeadingPitchRoll instance. + * @param headingPitchRoll - The HeadingPitchRoll to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new HeadingPitchRoll instance if one was not provided. (Returns undefined if headingPitchRoll is undefined) + */ + static clone(headingPitchRoll: HeadingPitchRoll, result?: HeadingPitchRoll): HeadingPitchRoll; + /** + * Compares the provided HeadingPitchRolls componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first HeadingPitchRoll. + * @param [right] - The second HeadingPitchRoll. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: HeadingPitchRoll, right?: HeadingPitchRoll): boolean; + /** + * Compares the provided HeadingPitchRolls componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [left] - The first HeadingPitchRoll. + * @param [right] - The second HeadingPitchRoll. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: HeadingPitchRoll, right?: HeadingPitchRoll, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Duplicates this HeadingPitchRoll instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new HeadingPitchRoll instance if one was not provided. + */ + clone(result?: HeadingPitchRoll): HeadingPitchRoll; + /** + * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side HeadingPitchRoll. + * @returns true if they are equal, false otherwise. + */ + equals(right?: HeadingPitchRoll): boolean; + /** + * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [right] - The right hand side HeadingPitchRoll. + * @param [relativeEpsilon = 0] - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: HeadingPitchRoll, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Creates a string representing this HeadingPitchRoll in the format '(heading, pitch, roll)' in radians. + * @returns A string representing the provided HeadingPitchRoll in the format '(heading, pitch, roll)'. + */ + toString(): string; +} + +/** + * The encoding that is used for a heightmap + */ +export enum HeightmapEncoding { + /** + * No encoding + */ + NONE = 0, + /** + * LERC encoding + */ + LERC = 1 +} + +/** + * Terrain data for a single tile where the terrain data is represented as a heightmap. A heightmap +is a rectangular array of heights in row-major order from north to south and west to east. + * @example + * var buffer = ... +var heightBuffer = new Uint16Array(buffer, 0, that._heightmapWidth * that._heightmapWidth); +var childTileMask = new Uint8Array(buffer, heightBuffer.byteLength, 1)[0]; +var waterMask = new Uint8Array(buffer, heightBuffer.byteLength + 1, buffer.byteLength - heightBuffer.byteLength - 1); +var terrainData = new Cesium.HeightmapTerrainData({ + buffer : heightBuffer, + width : 65, + height : 65, + childTileMask : childTileMask, + waterMask : waterMask +}); + * @param options - Object with the following properties: + * @param options.buffer - The buffer containing height data. + * @param options.width - The width (longitude direction) of the heightmap, in samples. + * @param options.height - The height (latitude direction) of the heightmap, in samples. + * @param [options.childTileMask = 15] - A bit mask indicating which of this tile's four children exist. + If a child's bit is set, geometry will be requested for that tile as well when it + is needed. If the bit is cleared, the child tile is not requested and geometry is + instead upsampled from the parent. The bit values are as follows: + + + + + + +
Bit PositionBit ValueChild Tile
01Southwest
12Southeast
24Northwest
38Northeast
+ * @param [options.waterMask] - The water mask included in this terrain data, if any. A water mask is a square + Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land. + Values in between 0 and 255 are allowed as well to smoothly blend between land and water. + * @param [options.structure] - An object describing the structure of the height data. + * @param [options.structure.heightScale = 1.0] - The factor by which to multiply height samples in order to obtain + the height above the heightOffset, in meters. The heightOffset is added to the resulting + height after multiplying by the scale. + * @param [options.structure.heightOffset = 0.0] - The offset to add to the scaled height to obtain the final + height in meters. The offset is added after the height sample is multiplied by the + heightScale. + * @param [options.structure.elementsPerHeight = 1] - The number of elements in the buffer that make up a single height + sample. This is usually 1, indicating that each element is a separate height sample. If + it is greater than 1, that number of elements together form the height sample, which is + computed according to the structure.elementMultiplier and structure.isBigEndian properties. + * @param [options.structure.stride = 1] - The number of elements to skip to get from the first element of + one height to the first element of the next height. + * @param [options.structure.elementMultiplier = 256.0] - The multiplier used to compute the height value when the + stride property is greater than 1. For example, if the stride is 4 and the strideMultiplier + is 256, the height is computed as follows: + `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256` + This is assuming that the isBigEndian property is false. If it is true, the order of the + elements is reversed. + * @param [options.structure.isBigEndian = false] - Indicates endianness of the elements in the buffer when the + stride property is greater than 1. If this property is false, the first element is the + low-order element. If it is true, the first element is the high-order element. + * @param [options.structure.lowestEncodedHeight] - The lowest value that can be stored in the height buffer. Any heights that are lower + than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height + buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers. If this parameter is + not specified, no minimum value is enforced. + * @param [options.structure.highestEncodedHeight] - The highest value that can be stored in the height buffer. Any heights that are higher + than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height + buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger + than 65535. If this parameter is not specified, no maximum value is enforced. + * @param [options.encoding = HeightmapEncoding.NONE] - The encoding that is used on the buffer. + * @param [options.createdByUpsampling = false] - True if this instance was created by upsampling another instance; + otherwise, false. + */ +export class HeightmapTerrainData { + constructor(options: { + buffer: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; + width: number; + height: number; + childTileMask?: number; + waterMask?: Uint8Array; + structure?: { + heightScale?: number; + heightOffset?: number; + elementsPerHeight?: number; + stride?: number; + elementMultiplier?: number; + isBigEndian?: boolean; + lowestEncodedHeight?: number; + highestEncodedHeight?: number; + }; + encoding?: HeightmapEncoding; + createdByUpsampling?: boolean; + }); + /** + * An array of credits for this tile. + */ + credits: Credit[]; + /** + * The water mask included in this terrain data, if any. A water mask is a square + Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land. + Values in between 0 and 255 are allowed as well to smoothly blend between land and water. + */ + waterMask: Uint8Array | HTMLImageElement | HTMLCanvasElement; + /** + * Computes the terrain height at a specified longitude and latitude. + * @param rectangle - The rectangle covered by this terrain data. + * @param longitude - The longitude in radians. + * @param latitude - The latitude in radians. + * @returns The terrain height at the specified position. If the position + is outside the rectangle, this method will extrapolate the height, which is likely to be wildly + incorrect for positions far outside the rectangle. + */ + interpolateHeight(rectangle: Rectangle, longitude: number, latitude: number): number; + /** + * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the + height samples in this instance, interpolated if necessary. + * @param tilingScheme - The tiling scheme of this terrain data. + * @param thisX - The X coordinate of this tile in the tiling scheme. + * @param thisY - The Y coordinate of this tile in the tiling scheme. + * @param thisLevel - The level of this tile in the tiling scheme. + * @param descendantX - The X coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantY - The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantLevel - The level within the tiling scheme of the descendant tile for which we are upsampling. + * @returns A promise for upsampled heightmap terrain data for the descendant tile, + or undefined if too many asynchronous upsample operations are in progress and the request has been + deferred. + */ + upsample(tilingScheme: TilingScheme, thisX: number, thisY: number, thisLevel: number, descendantX: number, descendantY: number, descendantLevel: number): Promise | undefined; + /** + * Determines if a given child tile is available, based on the + {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed + to be one of the four children of this tile. If non-child tile coordinates are + given, the availability of the southeast child tile is returned. + * @param thisX - The tile X coordinate of this (the parent) tile. + * @param thisY - The tile Y coordinate of this (the parent) tile. + * @param childX - The tile X coordinate of the child tile to check for availability. + * @param childY - The tile Y coordinate of the child tile to check for availability. + * @returns True if the child tile is available; otherwise, false. + */ + isChildAvailable(thisX: number, thisY: number, childX: number, childY: number): boolean; + /** + * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution + terrain data. If this value is false, the data was obtained from some other source, such + as by downloading it from a remote server. This method should return true for instances + returned from a call to {@link HeightmapTerrainData#upsample}. + * @returns True if this instance was created by upsampling; otherwise, false. + */ + wasCreatedByUpsampling(): boolean; +} + +/** + * An {@link InterpolationAlgorithm} for performing Hermite interpolation. + */ +export namespace HermitePolynomialApproximation { + /** + * Given the desired degree, returns the number of data points required for interpolation. + * @param degree - The desired degree of interpolation. + * @param [inputOrder = 0] - The order of the inputs (0 means just the data, 1 means the data and its derivative, etc). + * @returns The number of required data points needed for the desired degree of interpolation. + */ + function getRequiredDataPoints(degree: number, inputOrder?: number): number; + /** + * Interpolates values using Hermite Polynomial Approximation. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolateOrderZero(x: number, xTable: number[], yTable: number[], yStride: number, result?: number[]): number[]; + /** + * Interpolates values using Hermite Polynomial Approximation. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param inputOrder - The number of derivatives supplied for input. + * @param outputOrder - The number of derivatives desired for output. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolate(x: number, xTable: number[], yTable: number[], yStride: number, inputOrder: number, outputOrder: number, result?: number[]): number[]; +} + +/** + * A Hermite spline is a cubic interpolating spline. Points, incoming tangents, outgoing tangents, and times +must be defined for each control point. The outgoing tangents are defined for points [0, n - 2] and the incoming +tangents are defined for points [1, n - 1]. For example, when interpolating a segment of the curve between points[i] and +points[i + 1], the tangents at the points will be outTangents[i] and inTangents[i], +respectively. + * @example + * // Create a G1 continuous Hermite spline +var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ]; +var spline = new Cesium.HermiteSpline({ + times : times, + points : [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ], + outTangents : [ + new Cesium.Cartesian3(1125196, -161816, 270551), + new Cesium.Cartesian3(-996690.5, -365906.5, 184028.5), + new Cesium.Cartesian3(-2096917, 48379.5, -292683.5), + new Cesium.Cartesian3(-890902.5, 408999.5, -447115) + ], + inTangents : [ + new Cesium.Cartesian3(-1993381, -731813, 368057), + new Cesium.Cartesian3(-4193834, 96759, -585367), + new Cesium.Cartesian3(-1781805, 817999, -894230), + new Cesium.Cartesian3(1165345, 112641, 47281) + ] +}); + +var p0 = spline.evaluate(times[0]); + * @param options - Object with the following properties: + * @param options.times - An array of strictly increasing, unit-less, floating-point times at each point. + The values are in no way connected to the clock time. They are the parameterization for the curve. + * @param options.points - The array of {@link Cartesian3} control points. + * @param options.inTangents - The array of {@link Cartesian3} incoming tangents at each control point. + * @param options.outTangents - The array of {@link Cartesian3} outgoing tangents at each control point. + */ +export class HermiteSpline { + constructor(options: { + times: number[]; + points: Cartesian3[]; + inTangents: Cartesian3[]; + outTangents: Cartesian3[]; + }); + /** + * An array of times for the control points. + */ + readonly times: number[]; + /** + * An array of {@link Cartesian3} control points. + */ + readonly points: Cartesian3[]; + /** + * An array of {@link Cartesian3} incoming tangents at each control point. + */ + readonly inTangents: Cartesian3[]; + /** + * An array of {@link Cartesian3} outgoing tangents at each control point. + */ + readonly outTangents: Cartesian3[]; + /** + * Creates a spline where the tangents at each control point are the same. + The curves are guaranteed to be at least in the class C1. + * @example + * var points = [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ]; + + // Add tangents + var tangents = new Array(points.length); + tangents[0] = new Cesium.Cartesian3(1125196, -161816, 270551); + var temp = new Cesium.Cartesian3(); + for (var i = 1; i < tangents.length - 1; ++i) { + tangents[i] = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.subtract(points[i + 1], points[i - 1], temp), 0.5, new Cesium.Cartesian3()); + } + tangents[tangents.length - 1] = new Cesium.Cartesian3(1165345, 112641, 47281); + + var spline = Cesium.HermiteSpline.createC1({ + times : times, + points : points, + tangents : tangents + }); + * @param options - Object with the following properties: + * @param options.times - The array of control point times. + * @param options.points - The array of control points. + * @param options.tangents - The array of tangents at the control points. + * @returns A hermite spline. + */ + static createC1(options: { + times: number[]; + points: Cartesian3[]; + tangents: Cartesian3[]; + }): HermiteSpline; + /** + * Creates a natural cubic spline. The tangents at the control points are generated + to create a curve in the class C2. + * @example + * // Create a natural cubic spline above the earth from Philadelphia to Los Angeles. + var spline = Cesium.HermiteSpline.createNaturalCubic({ + times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ], + points : [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ] + }); + * @param options - Object with the following properties: + * @param options.times - The array of control point times. + * @param options.points - The array of control points. + * @returns A hermite spline or a linear spline if less than 3 control points were given. + */ + static createNaturalCubic(options: { + times: number[]; + points: Cartesian3[]; + }): HermiteSpline | LinearSpline; + /** + * Creates a clamped cubic spline. The tangents at the interior control points are generated + to create a curve in the class C2. + * @example + * // Create a clamped cubic spline above the earth from Philadelphia to Los Angeles. + var spline = Cesium.HermiteSpline.createClampedCubic({ + times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ], + points : [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ], + firstTangent : new Cesium.Cartesian3(1125196, -161816, 270551), + lastTangent : new Cesium.Cartesian3(1165345, 112641, 47281) + }); + * @param options - Object with the following properties: + * @param options.times - The array of control point times. + * @param options.points - The array of control points. + * @param options.firstTangent - The outgoing tangent of the first control point. + * @param options.lastTangent - The incoming tangent of the last control point. + * @returns A hermite spline or a linear spline if less than 3 control points were given. + */ + static createClampedCubic(options: { + times: number[]; + points: Cartesian3[]; + firstTangent: Cartesian3; + lastTangent: Cartesian3; + }): HermiteSpline | LinearSpline; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around to the updated animation. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: Cartesian3): Cartesian3; +} + +/** + * Constants for WebGL index datatypes. These corresponds to the +type parameter of {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml|drawElements}. + */ +export enum IndexDatatype { + /** + * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type + of an element in Uint8Array. + */ + UNSIGNED_BYTE = WebGLConstants.UNSIGNED_BYTE, + /** + * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type + of an element in Uint16Array. + */ + UNSIGNED_SHORT = WebGLConstants.UNSIGNED_SHORT, + /** + * 32-bit unsigned int corresponding to UNSIGNED_INT and the type + of an element in Uint32Array. + */ + UNSIGNED_INT = WebGLConstants.UNSIGNED_INT +} + +export namespace InterpolationAlgorithm { + /** + * Gets the name of this interpolation algorithm. + */ + var type: string; + /** + * Given the desired degree, returns the number of data points required for interpolation. + * @param degree - The desired degree of interpolation. + * @returns The number of required data points needed for the desired degree of interpolation. + */ + function getRequiredDataPoints(degree: number): number; + /** + * Performs zero order interpolation. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolateOrderZero(x: number, xTable: number[], yTable: number[], yStride: number, result?: number[]): number[]; + /** + * Performs higher order interpolation. Not all interpolators need to support high-order interpolation, + if this function remains undefined on implementing objects, interpolateOrderZero will be used instead. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param inputOrder - The number of derivatives supplied for input. + * @param outputOrder - The number of derivatives desired for output. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolate(x: number, xTable: number[], yTable: number[], yStride: number, inputOrder: number, outputOrder: number, result?: number[]): number[]; +} + +/** + * The interface for interpolation algorithms. + */ +export interface InterpolationAlgorithm { +} + +/** + * This enumerated type is used in determining where, relative to the frustum, an +object is located. The object can either be fully contained within the frustum (INSIDE), +partially inside the frustum and partially outside (INTERSECTING), or somewhere entirely +outside of the frustum's 6 planes (OUTSIDE). + */ +export enum Intersect { + /** + * Represents that an object is not contained within the frustum. + */ + OUTSIDE = -1, + /** + * Represents that an object intersects one of the frustum's planes. + */ + INTERSECTING = 0, + /** + * Represents that an object is fully within the frustum. + */ + INSIDE = 1 +} + +/** + * Contains functions for operating on 2D triangles. + */ +export namespace Intersections2D { + /** + * Splits a 2D triangle at given axis-aligned threshold value and returns the resulting + polygon on a given side of the threshold. The resulting polygon may have 0, 1, 2, + 3, or 4 vertices. + * @example + * var result = Cesium.Intersections2D.clipTriangleAtAxisAlignedThreshold(0.5, false, 0.2, 0.6, 0.4); + // result === [2, 0, -1, 1, 0, 0.25, -1, 1, 2, 0.5] + * @param threshold - The threshold coordinate value at which to clip the triangle. + * @param keepAbove - true to keep the portion of the triangle above the threshold, or false + to keep the portion below. + * @param u0 - The coordinate of the first vertex in the triangle, in counter-clockwise order. + * @param u1 - The coordinate of the second vertex in the triangle, in counter-clockwise order. + * @param u2 - The coordinate of the third vertex in the triangle, in counter-clockwise order. + * @param [result] - The array into which to copy the result. If this parameter is not supplied, + a new array is constructed and returned. + * @returns The polygon that results after the clip, specified as a list of + vertices. The vertices are specified in counter-clockwise order. + Each vertex is either an index from the existing list (identified as + a 0, 1, or 2) or -1 indicating a new vertex not in the original triangle. + For new vertices, the -1 is followed by three additional numbers: the + index of each of the two original vertices forming the line segment that + the new vertex lies on, and the fraction of the distance from the first + vertex to the second one. + */ + function clipTriangleAtAxisAlignedThreshold(threshold: number, keepAbove: boolean, u0: number, u1: number, u2: number, result?: number[]): number[]; + /** + * Compute the barycentric coordinates of a 2D position within a 2D triangle. + * @example + * var result = Cesium.Intersections2D.computeBarycentricCoordinates(0.0, 0.0, 0.0, 1.0, -1, -0.5, 1, -0.5); + // result === new Cesium.Cartesian3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0); + * @param x - The x coordinate of the position for which to find the barycentric coordinates. + * @param y - The y coordinate of the position for which to find the barycentric coordinates. + * @param x1 - The x coordinate of the triangle's first vertex. + * @param y1 - The y coordinate of the triangle's first vertex. + * @param x2 - The x coordinate of the triangle's second vertex. + * @param y2 - The y coordinate of the triangle's second vertex. + * @param x3 - The x coordinate of the triangle's third vertex. + * @param y3 - The y coordinate of the triangle's third vertex. + * @param [result] - The instance into to which to copy the result. If this parameter + is undefined, a new instance is created and returned. + * @returns The barycentric coordinates of the position within the triangle. + */ + function computeBarycentricCoordinates(x: number, y: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, result?: Cartesian3): Cartesian3; + /** + * Compute the intersection between 2 line segments + * @example + * var result = Cesium.Intersections2D.computeLineSegmentLineSegmentIntersection(0.0, 0.0, 0.0, 2.0, -1, 1, 1, 1); + // result === new Cesium.Cartesian2(0.0, 1.0); + * @param x00 - The x coordinate of the first line's first vertex. + * @param y00 - The y coordinate of the first line's first vertex. + * @param x01 - The x coordinate of the first line's second vertex. + * @param y01 - The y coordinate of the first line's second vertex. + * @param x10 - The x coordinate of the second line's first vertex. + * @param y10 - The y coordinate of the second line's first vertex. + * @param x11 - The x coordinate of the second line's second vertex. + * @param y11 - The y coordinate of the second line's second vertex. + * @param [result] - The instance into to which to copy the result. If this parameter + is undefined, a new instance is created and returned. + * @returns The intersection point, undefined if there is no intersection point or lines are coincident. + */ + function computeLineSegmentLineSegmentIntersection(x00: number, y00: number, x01: number, y01: number, x10: number, y10: number, x11: number, y11: number, result?: Cartesian2): Cartesian2; +} + +/** + * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids. + */ +export namespace IntersectionTests { + /** + * Computes the intersection of a ray and a plane. + * @param ray - The ray. + * @param plane - The plane. + * @param [result] - The object onto which to store the result. + * @returns The intersection point or undefined if there is no intersections. + */ + function rayPlane(ray: Ray, plane: Plane, result?: Cartesian3): Cartesian3; + /** + * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray. + + Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf| + Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore. + * @param ray - The ray. + * @param p0 - The first vertex of the triangle. + * @param p1 - The second vertex of the triangle. + * @param p2 - The third vertex of the triangle. + * @param [cullBackFaces = false] - If true, will only compute an intersection with the front face of the triangle + and return undefined for intersections with the back face. + * @returns The intersection as a parametric distance along the ray, or undefined if there is no intersection. + */ + function rayTriangleParametric(ray: Ray, p0: Cartesian3, p1: Cartesian3, p2: Cartesian3, cullBackFaces?: boolean): number; + /** + * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate. + + Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf| + Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore. + * @param ray - The ray. + * @param p0 - The first vertex of the triangle. + * @param p1 - The second vertex of the triangle. + * @param p2 - The third vertex of the triangle. + * @param [cullBackFaces = false] - If true, will only compute an intersection with the front face of the triangle + and return undefined for intersections with the back face. + * @param [result] - The Cartesian3 onto which to store the result. + * @returns The intersection point or undefined if there is no intersections. + */ + function rayTriangle(ray: Ray, p0: Cartesian3, p1: Cartesian3, p2: Cartesian3, cullBackFaces?: boolean, result?: Cartesian3): Cartesian3; + /** + * Computes the intersection of a line segment and a triangle. + * @param v0 - The an end point of the line segment. + * @param v1 - The other end point of the line segment. + * @param p0 - The first vertex of the triangle. + * @param p1 - The second vertex of the triangle. + * @param p2 - The third vertex of the triangle. + * @param [cullBackFaces = false] - If true, will only compute an intersection with the front face of the triangle + and return undefined for intersections with the back face. + * @param [result] - The Cartesian3 onto which to store the result. + * @returns The intersection point or undefined if there is no intersections. + */ + function lineSegmentTriangle(v0: Cartesian3, v1: Cartesian3, p0: Cartesian3, p1: Cartesian3, p2: Cartesian3, cullBackFaces?: boolean, result?: Cartesian3): Cartesian3; + /** + * Computes the intersection points of a ray with a sphere. + * @param ray - The ray. + * @param sphere - The sphere. + * @param [result] - The result onto which to store the result. + * @returns The interval containing scalar points along the ray or undefined if there are no intersections. + */ + function raySphere(ray: Ray, sphere: BoundingSphere, result?: Interval): Interval; + /** + * Computes the intersection points of a line segment with a sphere. + * @param p0 - An end point of the line segment. + * @param p1 - The other end point of the line segment. + * @param sphere - The sphere. + * @param [result] - The result onto which to store the result. + * @returns The interval containing scalar points along the ray or undefined if there are no intersections. + */ + function lineSegmentSphere(p0: Cartesian3, p1: Cartesian3, sphere: BoundingSphere, result?: Interval): Interval; + /** + * Computes the intersection points of a ray with an ellipsoid. + * @param ray - The ray. + * @param ellipsoid - The ellipsoid. + * @returns The interval containing scalar points along the ray or undefined if there are no intersections. + */ + function rayEllipsoid(ray: Ray, ellipsoid: Ellipsoid): Interval; + /** + * Provides the point along the ray which is nearest to the ellipsoid. + * @param ray - The ray. + * @param ellipsoid - The ellipsoid. + * @returns The nearest planetodetic point on the ray. + */ + function grazingAltitudeLocation(ray: Ray, ellipsoid: Ellipsoid): Cartesian3; + /** + * Computes the intersection of a line segment and a plane. + * @example + * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); + var normal = ellipsoid.geodeticSurfaceNormal(origin); + var plane = Cesium.Plane.fromPointNormal(origin, normal); + + var p0 = new Cesium.Cartesian3(...); + var p1 = new Cesium.Cartesian3(...); + + // find the intersection of the line segment from p0 to p1 and the tangent plane at origin. + var intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane); + * @param endPoint0 - An end point of the line segment. + * @param endPoint1 - The other end point of the line segment. + * @param plane - The plane. + * @param [result] - The object onto which to store the result. + * @returns The intersection point or undefined if there is no intersection. + */ + function lineSegmentPlane(endPoint0: Cartesian3, endPoint1: Cartesian3, plane: Plane, result?: Cartesian3): Cartesian3; + /** + * Computes the intersection of a triangle and a plane + * @example + * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); + var normal = ellipsoid.geodeticSurfaceNormal(origin); + var plane = Cesium.Plane.fromPointNormal(origin, normal); + + var p0 = new Cesium.Cartesian3(...); + var p1 = new Cesium.Cartesian3(...); + var p2 = new Cesium.Cartesian3(...); + + // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane + var triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane); + * @param p0 - First point of the triangle + * @param p1 - Second point of the triangle + * @param p2 - Third point of the triangle + * @param plane - Intersection plane + * @returns An object with properties positions and indices, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists) + */ + function trianglePlaneIntersection(p0: Cartesian3, p1: Cartesian3, p2: Cartesian3, plane: Plane): any; +} + +/** + * Represents the closed interval [start, stop]. + * @param [start = 0.0] - The beginning of the interval. + * @param [stop = 0.0] - The end of the interval. + */ +export class Interval { + constructor(start?: number, stop?: number); + /** + * The beginning of the interval. + */ + start: number; + /** + * The end of the interval. + */ + stop: number; +} + +/** + * Default settings for accessing the Cesium ion API. + +An ion access token is only required if you are using any ion related APIs. +A default access token is provided for evaluation purposes only. +Sign up for a free ion account and get your own access token at {@link https://cesium.com} + */ +export namespace Ion { + /** + * Gets or sets the default Cesium ion access token. + */ + var defaultAccessToken: string; + /** + * Gets or sets the default Cesium ion server. + */ + var defaultServer: string | Resource; +} + +/** + * Provides geocoding through Cesium ion. + * @param options - Object with the following properties: + * @param options.scene - The scene + * @param [options.accessToken = Ion.defaultAccessToken] - The access token to use. + * @param [options.server = Ion.defaultServer] - The resource to the Cesium ion API server. + */ +export class IonGeocoderService { + constructor(options: { + scene: Scene; + accessToken?: string; + server?: string | Resource; + }); + /** + * @param query - The query to be sent to the geocoder service + * @param [type = GeocodeType.SEARCH] - The type of geocode to perform. + */ + geocode(query: string, type?: GeocodeType): Promise; +} + +/** + * A {@link Resource} instance that encapsulates Cesium ion asset access. +This object is normally not instantiated directly, use {@link IonResource.fromAssetId}. + * @param endpoint - The result of the Cesium ion asset endpoint service. + * @param endpointResource - The resource used to retreive the endpoint. + */ +export class IonResource extends Resource { + constructor(endpoint: any, endpointResource: Resource); + /** + * Asynchronously creates an instance. + * @example + * //Load a Cesium3DTileset with asset ID of 124624234 + viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(124624234) })); + * @example + * //Load a CZML file with asset ID of 10890 + Cesium.IonResource.fromAssetId(10890) + .then(function (resource) { + viewer.dataSources.add(Cesium.CzmlDataSource.load(resource)); + }); + * @param assetId - The Cesium ion asset id. + * @param [options] - An object with the following properties: + * @param [options.accessToken = Ion.defaultAccessToken] - The access token to use. + * @param [options.server = Ion.defaultServer] - The resource to the Cesium ion API server. + * @returns A Promise to am instance representing the Cesium ion Asset. + */ + static fromAssetId(assetId: number, options?: { + accessToken?: string; + server?: string | Resource; + }): Promise; + /** + * Gets the credits required for attribution of the asset. + */ + readonly credits: Credit[]; + /** + * Duplicates a Resource instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Resource instance if one was not provided. + */ + clone(result?: Resource): Resource; + /** + * Asynchronously loads the given image resource. Returns a promise that will resolve to + an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if preferImageBitmap is true and the browser supports createImageBitmap or otherwise an + {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load. + * @example + * // load a single image asynchronously + resource.fetchImage().then(function(image) { + // use the loaded image + }).otherwise(function(error) { + // an error occurred + }); + + // load several images in parallel + when.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) { + // images is an array containing all the loaded images + }); + * @param [options] - An object with the following properties. + * @param [options.preferBlob = false] - If true, we will load the image via a blob. + * @param [options.preferImageBitmap = false] - If true, image will be decoded during fetch and an ImageBitmap is returned. + * @param [options.flipY = false] - If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchImage(options?: { + preferBlob?: boolean; + preferImageBitmap?: boolean; + flipY?: boolean; + }): Promise | Promise | undefined; +} + +/** + * Determines if a given date is a leap year. + * @example + * var leapYear = Cesium.isLeapYear(2000); // true + * @param year - The year to be tested. + * @returns True if year is a leap year. + */ +export function isLeapYear(year: number): boolean; + +/** + * Constants related to ISO8601 support. + */ +export namespace Iso8601 { + /** + * A {@link JulianDate} representing the earliest time representable by an ISO8601 date. + This is equivalent to the date string '0000-01-01T00:00:00Z' + */ + const MINIMUM_VALUE: JulianDate; + /** + * A {@link JulianDate} representing the latest time representable by an ISO8601 date. + This is equivalent to the date string '9999-12-31T24:00:00Z' + */ + const MAXIMUM_VALUE: JulianDate; + /** + * A {@link TimeInterval} representing the largest interval representable by an ISO8601 interval. + This is equivalent to the interval string '0000-01-01T00:00:00Z/9999-12-31T24:00:00Z' + */ + const MAXIMUM_INTERVAL: JulianDate; +} + +/** + * Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC). +For increased precision, this class stores the whole number part of the date and the seconds +part of the date in separate components. In order to be safe for arithmetic and represent +leap seconds, the date is always stored in the International Atomic Time standard +{@link TimeStandard.TAI}. + * @param [julianDayNumber = 0.0] - The Julian Day Number representing the number of whole days. Fractional days will also be handled correctly. + * @param [secondsOfDay = 0.0] - The number of seconds into the current Julian Day Number. Fractional seconds, negative seconds and seconds greater than a day will be handled correctly. + * @param [timeStandard = TimeStandard.UTC] - The time standard in which the first two parameters are defined. + */ +export class JulianDate { + constructor(julianDayNumber?: number, secondsOfDay?: number, timeStandard?: TimeStandard); + /** + * Gets or sets the number of whole days. + */ + dayNumber: number; + /** + * Gets or sets the number of seconds into the current day. + */ + secondsOfDay: number; + /** + * Creates a new instance from a GregorianDate. + * @param date - A GregorianDate. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromGregorianDate(date: GregorianDate, result?: JulianDate): JulianDate; + /** + * Creates a new instance from a JavaScript Date. + * @param date - A JavaScript Date. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromDate(date: Date, result?: JulianDate): JulianDate; + /** + * Creates a new instance from a from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date. + This method is superior to Date.parse because it will handle all valid formats defined by the ISO 8601 + specification, including leap seconds and sub-millisecond times, which discarded by most JavaScript implementations. + * @param iso8601String - An ISO 8601 date. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromIso8601(iso8601String: string, result?: JulianDate): JulianDate; + /** + * Creates a new instance that represents the current system time. + This is equivalent to calling JulianDate.fromDate(new Date());. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static now(result?: JulianDate): JulianDate; + /** + * Creates a {@link GregorianDate} from the provided instance. + * @param julianDate - The date to be converted. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static toGregorianDate(julianDate: JulianDate, result?: GregorianDate): GregorianDate; + /** + * Creates a JavaScript Date from the provided instance. + Since JavaScript dates are only accurate to the nearest millisecond and + cannot represent a leap second, consider using {@link JulianDate.toGregorianDate} instead. + If the provided JulianDate is during a leap second, the previous second is used. + * @param julianDate - The date to be converted. + * @returns A new instance representing the provided date. + */ + static toDate(julianDate: JulianDate): Date; + /** + * Creates an ISO8601 representation of the provided date. + * @param julianDate - The date to be converted. + * @param [precision] - The number of fractional digits used to represent the seconds component. By default, the most precise representation is used. + * @returns The ISO8601 representation of the provided date. + */ + static toIso8601(julianDate: JulianDate, precision?: number): string; + /** + * Duplicates a JulianDate instance. + * @param julianDate - The date to duplicate. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. Returns undefined if julianDate is undefined. + */ + static clone(julianDate: JulianDate, result?: JulianDate): JulianDate; + /** + * Compares two instances. + * @param left - The first instance. + * @param right - The second instance. + * @returns A negative value if left is less than right, a positive value if left is greater than right, or zero if left and right are equal. + */ + static compare(left: JulianDate, right: JulianDate): number; + /** + * Compares two instances and returns true if they are equal, false otherwise. + * @param [left] - The first instance. + * @param [right] - The second instance. + * @returns true if the dates are equal; otherwise, false. + */ + static equals(left?: JulianDate, right?: JulianDate): boolean; + /** + * Compares two instances and returns true if they are within epsilon seconds of + each other. That is, in order for the dates to be considered equal (and for + this function to return true), the absolute value of the difference between them, in + seconds, must be less than epsilon. + * @param [left] - The first instance. + * @param [right] - The second instance. + * @param [epsilon = 0] - The maximum number of seconds that should separate the two instances. + * @returns true if the two dates are within epsilon seconds of each other; otherwise false. + */ + static equalsEpsilon(left?: JulianDate, right?: JulianDate, epsilon?: number): boolean; + /** + * Computes the total number of whole and fractional days represented by the provided instance. + * @param julianDate - The date. + * @returns The Julian date as single floating point number. + */ + static totalDays(julianDate: JulianDate): number; + /** + * Computes the difference in seconds between the provided instance. + * @param left - The first instance. + * @param right - The second instance. + * @returns The difference, in seconds, when subtracting right from left. + */ + static secondsDifference(left: JulianDate, right: JulianDate): number; + /** + * Computes the difference in days between the provided instance. + * @param left - The first instance. + * @param right - The second instance. + * @returns The difference, in days, when subtracting right from left. + */ + static daysDifference(left: JulianDate, right: JulianDate): number; + /** + * Computes the number of seconds the provided instance is ahead of UTC. + * @param julianDate - The date. + * @returns The number of seconds the provided instance is ahead of UTC + */ + static computeTaiMinusUtc(julianDate: JulianDate): number; + /** + * Adds the provided number of seconds to the provided date instance. + * @param julianDate - The date. + * @param seconds - The number of seconds to add or subtract. + * @param result - An existing instance to use for the result. + * @returns The modified result parameter. + */ + static addSeconds(julianDate: JulianDate, seconds: number, result: JulianDate): JulianDate; + /** + * Adds the provided number of minutes to the provided date instance. + * @param julianDate - The date. + * @param minutes - The number of minutes to add or subtract. + * @param result - An existing instance to use for the result. + * @returns The modified result parameter. + */ + static addMinutes(julianDate: JulianDate, minutes: number, result: JulianDate): JulianDate; + /** + * Adds the provided number of hours to the provided date instance. + * @param julianDate - The date. + * @param hours - The number of hours to add or subtract. + * @param result - An existing instance to use for the result. + * @returns The modified result parameter. + */ + static addHours(julianDate: JulianDate, hours: number, result: JulianDate): JulianDate; + /** + * Adds the provided number of days to the provided date instance. + * @param julianDate - The date. + * @param days - The number of days to add or subtract. + * @param result - An existing instance to use for the result. + * @returns The modified result parameter. + */ + static addDays(julianDate: JulianDate, days: number, result: JulianDate): JulianDate; + /** + * Compares the provided instances and returns true if left is earlier than right, false otherwise. + * @param left - The first instance. + * @param right - The second instance. + * @returns true if left is earlier than right, false otherwise. + */ + static lessThan(left: JulianDate, right: JulianDate): boolean; + /** + * Compares the provided instances and returns true if left is earlier than or equal to right, false otherwise. + * @param left - The first instance. + * @param right - The second instance. + * @returns true if left is earlier than or equal to right, false otherwise. + */ + static lessThanOrEquals(left: JulianDate, right: JulianDate): boolean; + /** + * Compares the provided instances and returns true if left is later than right, false otherwise. + * @param left - The first instance. + * @param right - The second instance. + * @returns true if left is later than right, false otherwise. + */ + static greaterThan(left: JulianDate, right: JulianDate): boolean; + /** + * Compares the provided instances and returns true if left is later than or equal to right, false otherwise. + * @param left - The first instance. + * @param right - The second instance. + * @returns true if left is later than or equal to right, false otherwise. + */ + static greaterThanOrEquals(left: JulianDate, right: JulianDate): boolean; + /** + * Duplicates this instance. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + clone(result?: JulianDate): JulianDate; + /** + * Compares this and the provided instance and returns true if they are equal, false otherwise. + * @param [right] - The second instance. + * @returns true if the dates are equal; otherwise, false. + */ + equals(right?: JulianDate): boolean; + /** + * Compares this and the provided instance and returns true if they are within epsilon seconds of + each other. That is, in order for the dates to be considered equal (and for + this function to return true), the absolute value of the difference between them, in + seconds, must be less than epsilon. + * @param [right] - The second instance. + * @param [epsilon = 0] - The maximum number of seconds that should separate the two instances. + * @returns true if the two dates are within epsilon seconds of each other; otherwise false. + */ + equalsEpsilon(right?: JulianDate, epsilon?: number): boolean; + /** + * Creates a string representing this date in ISO8601 format. + * @returns A string representing this date in ISO8601 format. + */ + toString(): string; + /** + * Gets or sets the list of leap seconds used throughout Cesium. + */ + static leapSeconds: LeapSecond[]; +} + +/** + * This enumerated type is for representing keyboard modifiers. These are keys +that are held down in addition to other event types. + */ +export enum KeyboardEventModifier { + /** + * Represents the shift key being held down. + */ + SHIFT = 0, + /** + * Represents the control key being held down. + */ + CTRL = 1, + /** + * Represents the alt key being held down. + */ + ALT = 2 +} + +/** + * An {@link InterpolationAlgorithm} for performing Lagrange interpolation. + */ +export namespace LagrangePolynomialApproximation { + /** + * Given the desired degree, returns the number of data points required for interpolation. + * @param degree - The desired degree of interpolation. + * @returns The number of required data points needed for the desired degree of interpolation. + */ + function getRequiredDataPoints(degree: number): number; + /** + * Interpolates values using Lagrange Polynomial Approximation. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolateOrderZero(x: number, xTable: number[], yTable: number[], yStride: number, result?: number[]): number[]; +} + +/** + * Describes a single leap second, which is constructed from a {@link JulianDate} and a +numerical offset representing the number of seconds TAI is ahead of the UTC time standard. + * @param [date] - A Julian date representing the time of the leap second. + * @param [offset] - The cumulative number of seconds that TAI is ahead of UTC at the provided date. + */ +export class LeapSecond { + constructor(date?: JulianDate, offset?: number); + /** + * Gets or sets the date at which this leap second occurs. + */ + julianDate: JulianDate; + /** + * Gets or sets the cumulative number of seconds between the UTC and TAI time standards at the time + of this leap second. + */ + offset: number; +} + +/** + * An {@link InterpolationAlgorithm} for performing linear interpolation. + */ +export namespace LinearApproximation { + /** + * Given the desired degree, returns the number of data points required for interpolation. + Since linear interpolation can only generate a first degree polynomial, this function + always returns 2. + * @param degree - The desired degree of interpolation. + * @returns This function always returns 2. + */ + function getRequiredDataPoints(degree: number): number; + /** + * Interpolates values using linear approximation. + * @param x - The independent variable for which the dependent variables will be interpolated. + * @param xTable - The array of independent variables to use to interpolate. The values + in this array must be in increasing order and the same value must not occur twice in the array. + * @param yTable - The array of dependent variables to use to interpolate. For a set of three + dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. + * @param yStride - The number of dependent variable values in yTable corresponding to + each independent variable value in xTable. + * @param [result] - An existing array into which to store the result. + * @returns The array of interpolated values, or the result parameter if one was provided. + */ + function interpolateOrderZero(x: number, xTable: number[], yTable: number[], yStride: number, result?: number[]): number[]; +} + +/** + * A spline that uses piecewise linear interpolation to create a curve. + * @example + * var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ]; +var spline = new Cesium.LinearSpline({ + times : times, + points : [ + new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0), + new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0), + new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0), + new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0), + new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0) + ] +}); + +var p0 = spline.evaluate(times[0]); + * @param options - Object with the following properties: + * @param options.times - An array of strictly increasing, unit-less, floating-point times at each point. + The values are in no way connected to the clock time. They are the parameterization for the curve. + * @param options.points - The array of {@link Cartesian3} control points. + */ +export class LinearSpline { + constructor(options: { + times: number[]; + points: Cartesian3[]; + }); + /** + * An array of times for the control points. + */ + readonly times: number[]; + /** + * An array of {@link Cartesian3} control points. + */ + readonly points: Cartesian3[]; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around to the updated animation. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: Cartesian3): Cartesian3; +} + +/** + * Asynchronously loads and parses the given URL to a CRN file or parses the raw binary data of a CRN file. +Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded, +or reject if the URL failed to load or failed to parse the data. The data is loaded +using XMLHttpRequest, which means that in order to make requests to another origin, +the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * // load a single URL asynchronously +Cesium.loadCRN('some/url').then(function(textureData) { + var width = textureData.width; + var height = textureData.height; + var format = textureData.internalFormat; + var arrayBufferView = textureData.bufferView; + // use the data to create a texture +}).otherwise(function(error) { + // an error occurred +}); + * @param resourceOrUrlOrBuffer - The URL of the binary data or an ArrayBuffer. + * @returns A promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ +export function loadCRN(resourceOrUrlOrBuffer: Resource | string | ArrayBuffer): Promise | undefined; + +/** + * Asynchronously loads and parses the given URL to a KTX file or parses the raw binary data of a KTX file. +Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded, +or reject if the URL failed to load or failed to parse the data. The data is loaded +using XMLHttpRequest, which means that in order to make requests to another origin, +the server must have Cross-Origin Resource Sharing (CORS) headers enabled. +

+The following are part of the KTX format specification but are not supported: +

    +
  • Big-endian files
  • +
  • Metadata
  • +
  • 3D textures
  • +
  • Texture Arrays
  • +
  • Cubemaps
  • +
  • Mipmaps
  • +
+

+ * @example + * // load a single URL asynchronously +Cesium.loadKTX('some/url').then(function(ktxData) { + var width = ktxData.width; + var height = ktxData.height; + var format = ktxData.internalFormat; + var arrayBufferView = ktxData.bufferView; + // use the data to create a texture +}).otherwise(function(error) { + // an error occurred +}); + * @param resourceOrUrlOrBuffer - The URL of the binary data or an ArrayBuffer. + * @returns A promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ +export function loadKTX(resourceOrUrlOrBuffer: Resource | string | ArrayBuffer): Promise | undefined; + +/** + * Defines how geodetic ellipsoid coordinates ({@link Cartographic}) project to a +flat map like Cesium's 2D and Columbus View modes. + */ +export class MapProjection { + constructor(); + /** + * Gets the {@link Ellipsoid}. + */ + readonly ellipsoid: Ellipsoid; + /** + * Projects {@link Cartographic} coordinates, in radians, to projection-specific map coordinates, in meters. + * @param cartographic - The coordinates to project. + * @param [result] - An instance into which to copy the result. If this parameter is + undefined, a new instance is created and returned. + * @returns The projected coordinates. If the result parameter is not undefined, the + coordinates are copied there and that instance is returned. Otherwise, a new instance is + created and returned. + */ + project(cartographic: Cartographic, result?: Cartesian3): Cartesian3; + /** + * Unprojects projection-specific map {@link Cartesian3} coordinates, in meters, to {@link Cartographic} + coordinates, in radians. + * @param cartesian - The Cartesian position to unproject with height (z) in meters. + * @param [result] - An instance into which to copy the result. If this parameter is + undefined, a new instance is created and returned. + * @returns The unprojected coordinates. If the result parameter is not undefined, the + coordinates are copied there and that instance is returned. Otherwise, a new instance is + created and returned. + */ + unproject(cartesian: Cartesian3, result?: Cartographic): Cartographic; +} + +/** + * Math functions. + */ +export namespace Math { + /** + * 0.1 + */ + const EPSILON1 = 0.1; + /** + * 0.01 + */ + const EPSILON2 = 0.01; + /** + * 0.001 + */ + const EPSILON3 = 0.001; + /** + * 0.0001 + */ + const EPSILON4 = 0.0001; + /** + * 0.00001 + */ + const EPSILON5 = 0.00001; + /** + * 0.000001 + */ + const EPSILON6 = 0.000001; + /** + * 0.0000001 + */ + const EPSILON7 = 1e-7; + /** + * 0.00000001 + */ + const EPSILON8 = 1e-8; + /** + * 0.000000001 + */ + const EPSILON9 = 1e-9; + /** + * 0.0000000001 + */ + const EPSILON10 = 1e-10; + /** + * 0.00000000001 + */ + const EPSILON11 = 1e-11; + /** + * 0.000000000001 + */ + const EPSILON12 = 1e-12; + /** + * 0.0000000000001 + */ + const EPSILON13 = 1e-13; + /** + * 0.00000000000001 + */ + const EPSILON14 = 1e-14; + /** + * 0.000000000000001 + */ + const EPSILON15 = 1e-15; + /** + * 0.0000000000000001 + */ + const EPSILON16 = 1e-16; + /** + * 0.00000000000000001 + */ + const EPSILON17 = 1e-17; + /** + * 0.000000000000000001 + */ + const EPSILON18 = 1e-18; + /** + * 0.0000000000000000001 + */ + const EPSILON19 = 1e-19; + /** + * 0.00000000000000000001 + */ + const EPSILON20 = 1e-20; + /** + * 0.000000000000000000001 + */ + const EPSILON21 = 1e-21; + /** + * The gravitational parameter of the Earth in meters cubed + per second squared as defined by the WGS84 model: 3.986004418e14 + */ + const GRAVITATIONALPARAMETER = 398600441800000; + /** + * Radius of the sun in meters: 6.955e8 + */ + const SOLAR_RADIUS = 695500000; + /** + * The mean radius of the moon, according to the "Report of the IAU/IAG Working Group on + Cartographic Coordinates and Rotational Elements of the Planets and satellites: 2000", + Celestial Mechanics 82: 83-110, 2002. + */ + const LUNAR_RADIUS = 1737400; + /** + * 64 * 1024 + */ + const SIXTY_FOUR_KILOBYTES: number; + /** + * 4 * 1024 * 1024 * 1024 + */ + const FOUR_GIGABYTES: number; + /** + * Returns the sign of the value; 1 if the value is positive, -1 if the value is + negative, or 0 if the value is 0. + * @param value - The value to return the sign of. + * @returns The sign of value. + */ + function sign(value: number): number; + /** + * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. + This is similar to {@link Math#sign} except that returns 1.0 instead of + 0.0 when the input value is 0.0. + * @param value - The value to return the sign of. + * @returns The sign of value. + */ + function signNotZero(value: number): number; + /** + * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum] + * @param value - The scalar value in the range [-1.0, 1.0] + * @param [rangeMaximum = 255] - The maximum value in the mapped range, 255 by default. + * @returns A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0. + */ + function toSNorm(value: number, rangeMaximum?: number): number; + /** + * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0]. + * @param value - SNORM value in the range [0, rangeMaximum] + * @param [rangeMaximum = 255] - The maximum value in the SNORM range, 255 by default. + * @returns Scalar in the range [-1.0, 1.0]. + */ + function fromSNorm(value: number, rangeMaximum?: number): number; + /** + * Converts a scalar value in the range [rangeMinimum, rangeMaximum] to a scalar in the range [0.0, 1.0] + * @param value - The scalar value in the range [rangeMinimum, rangeMaximum] + * @param rangeMinimum - The minimum value in the mapped range. + * @param rangeMaximum - The maximum value in the mapped range. + * @returns A scalar value, where rangeMinimum maps to 0.0 and rangeMaximum maps to 1.0. + */ + function normalize(value: number, rangeMinimum: number, rangeMaximum: number): number; + /** + * Returns the hyperbolic sine of a number. + The hyperbolic sine of value is defined to be + (ex - e-x)/2.0 + where e is Euler's number, approximately 2.71828183. + +

Special cases: +

    +
  • If the argument is NaN, then the result is NaN.
  • + +
  • If the argument is infinite, then the result is an infinity + with the same sign as the argument.
  • + +
  • If the argument is zero, then the result is a zero with the + same sign as the argument.
  • +
+

+ * @param value - The number whose hyperbolic sine is to be returned. + * @returns The hyperbolic sine of value. + */ + function sinh(value: number): number; + /** + * Returns the hyperbolic cosine of a number. + The hyperbolic cosine of value is defined to be + (ex + e-x)/2.0 + where e is Euler's number, approximately 2.71828183. + +

Special cases: +

    +
  • If the argument is NaN, then the result is NaN.
  • + +
  • If the argument is infinite, then the result is positive infinity.
  • + +
  • If the argument is zero, then the result is 1.0.
  • +
+

+ * @param value - The number whose hyperbolic cosine is to be returned. + * @returns The hyperbolic cosine of value. + */ + function cosh(value: number): number; + /** + * Computes the linear interpolation of two values. + * @example + * var n = Cesium.Math.lerp(0.0, 2.0, 0.5); // returns 1.0 + * @param p - The start value to interpolate. + * @param q - The end value to interpolate. + * @param time - The time of interpolation generally in the range [0.0, 1.0]. + * @returns The linearly interpolated value. + */ + function lerp(p: number, q: number, time: number): number; + /** + * pi + */ + const PI: number; + /** + * 1/pi + */ + const ONE_OVER_PI: number; + /** + * pi/2 + */ + const PI_OVER_TWO: number; + /** + * pi/3 + */ + const PI_OVER_THREE: number; + /** + * pi/4 + */ + const PI_OVER_FOUR: number; + /** + * pi/6 + */ + const PI_OVER_SIX: number; + /** + * 3pi/2 + */ + const THREE_PI_OVER_TWO: number; + /** + * 2pi + */ + const TWO_PI: number; + /** + * 1/2pi + */ + const ONE_OVER_TWO_PI: number; + /** + * The number of radians in a degree. + */ + const RADIANS_PER_DEGREE: number; + /** + * The number of degrees in a radian. + */ + const DEGREES_PER_RADIAN: number; + /** + * The number of radians in an arc second. + */ + const RADIANS_PER_ARCSECOND: number; + /** + * Converts degrees to radians. + * @param degrees - The angle to convert in degrees. + * @returns The corresponding angle in radians. + */ + function toRadians(degrees: number): number; + /** + * Converts radians to degrees. + * @param radians - The angle to convert in radians. + * @returns The corresponding angle in degrees. + */ + function toDegrees(radians: number): number; + /** + * Converts a longitude value, in radians, to the range [-Math.PI, Math.PI). + * @example + * // Convert 270 degrees to -90 degrees longitude + var longitude = Cesium.Math.convertLongitudeRange(Cesium.Math.toRadians(270.0)); + * @param angle - The longitude value, in radians, to convert to the range [-Math.PI, Math.PI). + * @returns The equivalent longitude value in the range [-Math.PI, Math.PI). + */ + function convertLongitudeRange(angle: number): number; + /** + * Convenience function that clamps a latitude value, in radians, to the range [-Math.PI/2, Math.PI/2). + Useful for sanitizing data before use in objects requiring correct range. + * @example + * // Clamp 108 degrees latitude to 90 degrees latitude + var latitude = Cesium.Math.clampToLatitudeRange(Cesium.Math.toRadians(108.0)); + * @param angle - The latitude value, in radians, to clamp to the range [-Math.PI/2, Math.PI/2). + * @returns The latitude value clamped to the range [-Math.PI/2, Math.PI/2). + */ + function clampToLatitudeRange(angle: number): number; + /** + * Produces an angle in the range -Pi <= angle <= Pi which is equivalent to the provided angle. + * @param angle - in radians + * @returns The angle in the range [-Math.PI, Math.PI]. + */ + function negativePiToPi(angle: number): number; + /** + * Produces an angle in the range 0 <= angle <= 2Pi which is equivalent to the provided angle. + * @param angle - in radians + * @returns The angle in the range [0, Math.TWO_PI]. + */ + function zeroToTwoPi(angle: number): number; + /** + * The modulo operation that also works for negative dividends. + * @param m - The dividend. + * @param n - The divisor. + * @returns The remainder. + */ + function mod(m: number, n: number): number; + /** + * Determines if two values are equal using an absolute or relative tolerance test. This is useful + to avoid problems due to roundoff error when comparing floating-point values directly. The values are + first compared using an absolute tolerance test. If that fails, a relative tolerance test is performed. + Use this test if you are unsure of the magnitudes of left and right. + * @example + * var a = Cesium.Math.equalsEpsilon(0.0, 0.01, Cesium.Math.EPSILON2); // true + var b = Cesium.Math.equalsEpsilon(0.0, 0.1, Cesium.Math.EPSILON2); // false + var c = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON7); // true + var d = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON9); // false + * @param left - The first value to compare. + * @param right - The other value to compare. + * @param [relativeEpsilon = 0] - The maximum inclusive delta between left and right for the relative tolerance test. + * @param [absoluteEpsilon = relativeEpsilon] - The maximum inclusive delta between left and right for the absolute tolerance test. + * @returns true if the values are equal within the epsilon; otherwise, false. + */ + function equalsEpsilon(left: number, right: number, relativeEpsilon?: number, absoluteEpsilon?: number): boolean; + /** + * Determines if the left value is less than the right value. If the two values are within + absoluteEpsilon of each other, they are considered equal and this function returns false. + * @param left - The first number to compare. + * @param right - The second number to compare. + * @param absoluteEpsilon - The absolute epsilon to use in comparison. + * @returns true if left is less than right by more than + absoluteEpsilon. false if left is greater or if the two + values are nearly equal. + */ + function lessThan(left: number, right: number, absoluteEpsilon: number): boolean; + /** + * Determines if the left value is less than or equal to the right value. If the two values are within + absoluteEpsilon of each other, they are considered equal and this function returns true. + * @param left - The first number to compare. + * @param right - The second number to compare. + * @param absoluteEpsilon - The absolute epsilon to use in comparison. + * @returns true if left is less than right or if the + the values are nearly equal. + */ + function lessThanOrEquals(left: number, right: number, absoluteEpsilon: number): boolean; + /** + * Determines if the left value is greater the right value. If the two values are within + absoluteEpsilon of each other, they are considered equal and this function returns false. + * @param left - The first number to compare. + * @param right - The second number to compare. + * @param absoluteEpsilon - The absolute epsilon to use in comparison. + * @returns true if left is greater than right by more than + absoluteEpsilon. false if left is less or if the two + values are nearly equal. + */ + function greaterThan(left: number, right: number, absoluteEpsilon: number): boolean; + /** + * Determines if the left value is greater than or equal to the right value. If the two values are within + absoluteEpsilon of each other, they are considered equal and this function returns true. + * @param left - The first number to compare. + * @param right - The second number to compare. + * @param absoluteEpsilon - The absolute epsilon to use in comparison. + * @returns true if left is greater than right or if the + the values are nearly equal. + */ + function greaterThanOrEquals(left: number, right: number, absoluteEpsilon: number): boolean; + /** + * Computes the factorial of the provided number. + * @example + * //Compute 7!, which is equal to 5040 + var computedFactorial = Cesium.Math.factorial(7); + * @param n - The number whose factorial is to be computed. + * @returns The factorial of the provided number or undefined if the number is less than 0. + */ + function factorial(n: number): number; + /** + * Increments a number with a wrapping to a minimum value if the number exceeds the maximum value. + * @example + * var n = Cesium.Math.incrementWrap(5, 10, 0); // returns 6 + var n = Cesium.Math.incrementWrap(10, 10, 0); // returns 0 + * @param [n] - The number to be incremented. + * @param [maximumValue] - The maximum incremented value before rolling over to the minimum value. + * @param [minimumValue = 0.0] - The number reset to after the maximum value has been exceeded. + * @returns The incremented number. + */ + function incrementWrap(n?: number, maximumValue?: number, minimumValue?: number): number; + /** + * Determines if a non-negative integer is a power of two. + The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript. + * @example + * var t = Cesium.Math.isPowerOfTwo(16); // true + var f = Cesium.Math.isPowerOfTwo(20); // false + * @param n - The integer to test in the range [0, (2^32)-1]. + * @returns true if the number if a power of two; otherwise, false. + */ + function isPowerOfTwo(n: number): boolean; + /** + * Computes the next power-of-two integer greater than or equal to the provided non-negative integer. + The maximum allowed input is 2^31 due to 32-bit bitwise operator limitation in Javascript. + * @example + * var n = Cesium.Math.nextPowerOfTwo(29); // 32 + var m = Cesium.Math.nextPowerOfTwo(32); // 32 + * @param n - The integer to test in the range [0, 2^31]. + * @returns The next power-of-two integer. + */ + function nextPowerOfTwo(n: number): number; + /** + * Computes the previous power-of-two integer less than or equal to the provided non-negative integer. + The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript. + * @example + * var n = Cesium.Math.previousPowerOfTwo(29); // 16 + var m = Cesium.Math.previousPowerOfTwo(32); // 32 + * @param n - The integer to test in the range [0, (2^32)-1]. + * @returns The previous power-of-two integer. + */ + function previousPowerOfTwo(n: number): number; + /** + * Constraint a value to lie between two values. + * @param value - The value to constrain. + * @param min - The minimum value. + * @param max - The maximum value. + * @returns The value clamped so that min <= value <= max. + */ + function clamp(value: number, min: number, max: number): number; + /** + * Sets the seed used by the random number generator + in {@link Math#nextRandomNumber}. + * @param seed - An integer used as the seed. + */ + function setRandomNumberSeed(seed: number): void; + /** + * Generates a random floating point number in the range of [0.0, 1.0) + using a Mersenne twister. + * @returns A random number in the range of [0.0, 1.0). + */ + function nextRandomNumber(): number; + /** + * Generates a random number between two numbers. + * @param min - The minimum value. + * @param max - The maximum value. + * @returns A random number between the min and max. + */ + function randomBetween(min: number, max: number): number; + /** + * Computes Math.acos(value), but first clamps value to the range [-1.0, 1.0] + so that the function will never return NaN. + * @param value - The value for which to compute acos. + * @returns The acos of the value if the value is in the range [-1.0, 1.0], or the acos of -1.0 or 1.0, + whichever is closer, if the value is outside the range. + */ + function acosClamped(value: number): number; + /** + * Computes Math.asin(value), but first clamps value to the range [-1.0, 1.0] + so that the function will never return NaN. + * @param value - The value for which to compute asin. + * @returns The asin of the value if the value is in the range [-1.0, 1.0], or the asin of -1.0 or 1.0, + whichever is closer, if the value is outside the range. + */ + function asinClamped(value: number): number; + /** + * Finds the chord length between two points given the circle's radius and the angle between the points. + * @param angle - The angle between the two points. + * @param radius - The radius of the circle. + * @returns The chord length. + */ + function chordLength(angle: number, radius: number): number; + /** + * Finds the logarithm of a number to a base. + * @param number - The number. + * @param base - The base. + * @returns The result. + */ + function logBase(number: number, base: number): number; + /** + * Finds the cube root of a number. + Returns NaN if number is not provided. + * @param [number] - The number. + * @returns The result. + */ + function cbrt(number?: number): number; + /** + * Finds the base 2 logarithm of a number. + * @param number - The number. + * @returns The result. + */ + function log2(number: number): number; + /** + * Computes a fast approximation of Atan for input in the range [-1, 1]. + + Based on Michal Drobot's approximation from ShaderFastLibs, + which in turn is based on "Efficient approximations for the arctangent function," + Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006. + Adapted from ShaderFastLibs under MIT License. + * @param x - An input number in the range [-1, 1] + * @returns An approximation of atan(x) + */ + function fastApproximateAtan(x: number): number; + /** + * Computes a fast approximation of Atan2(x, y) for arbitrary input scalars. + + Range reduction math based on nvidia's cg reference implementation: http://developer.download.nvidia.com/cg/atan2.html + * @param x - An input number that isn't zero if y is zero. + * @param y - An input number that isn't zero if x is zero. + * @returns An approximation of atan2(x, y) + */ + function fastApproximateAtan2(x: number, y: number): number; +} + +export interface Matrix2 extends ArrayLike { +} + +/** + * A 2x2 matrix, indexable as a column-major order array. +Constructor parameters are in row-major order for code readability. + * @param [column0Row0 = 0.0] - The value for column 0, row 0. + * @param [column1Row0 = 0.0] - The value for column 1, row 0. + * @param [column0Row1 = 0.0] - The value for column 0, row 1. + * @param [column1Row1 = 0.0] - The value for column 1, row 1. + */ +export class Matrix2 implements ArrayLike { + constructor(column0Row0?: number, column1Row0?: number, column0Row1?: number, column1Row1?: number); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Matrix2, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Matrix2 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Matrix2): Matrix2; + /** + * Duplicates a Matrix2 instance. + * @param matrix - The matrix to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix2 instance if one was not provided. (Returns undefined if matrix is undefined) + */ + static clone(matrix: Matrix2, result?: Matrix2): Matrix2; + /** + * Creates a Matrix2 from 4 consecutive elements in an array. + * @example + * // Create the Matrix2: + // [1.0, 2.0] + // [1.0, 2.0] + + var v = [1.0, 1.0, 2.0, 2.0]; + var m = Cesium.Matrix2.fromArray(v); + + // Create same Matrix2 with using an offset into an array + var v2 = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0]; + var m2 = Cesium.Matrix2.fromArray(v2, 2); + * @param array - The array whose 4 consecutive elements correspond to the positions of the matrix. Assumes column-major order. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to first column first row position in the matrix. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix2 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Matrix2): Matrix2; + /** + * Creates a Matrix2 instance from a column-major order array. + * @param values - The column-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix2 instance if one was not provided. + */ + static fromColumnMajorArray(values: number[], result?: Matrix2): Matrix2; + /** + * Creates a Matrix2 instance from a row-major order array. + The resulting matrix will be in column-major order. + * @param values - The row-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix2 instance if one was not provided. + */ + static fromRowMajorArray(values: number[], result?: Matrix2): Matrix2; + /** + * Computes a Matrix2 instance representing a non-uniform scale. + * @example + * // Creates + // [7.0, 0.0] + // [0.0, 8.0] + var m = Cesium.Matrix2.fromScale(new Cesium.Cartesian2(7.0, 8.0)); + * @param scale - The x and y scale factors. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix2 instance if one was not provided. + */ + static fromScale(scale: Cartesian2, result?: Matrix2): Matrix2; + /** + * Computes a Matrix2 instance representing a uniform scale. + * @example + * // Creates + // [2.0, 0.0] + // [0.0, 2.0] + var m = Cesium.Matrix2.fromUniformScale(2.0); + * @param scale - The uniform scale factor. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix2 instance if one was not provided. + */ + static fromUniformScale(scale: number, result?: Matrix2): Matrix2; + /** + * Creates a rotation matrix. + * @example + * // Rotate a point 45 degrees counterclockwise. + var p = new Cesium.Cartesian2(5, 6); + var m = Cesium.Matrix2.fromRotation(Cesium.Math.toRadians(45.0)); + var rotated = Cesium.Matrix2.multiplyByVector(m, p, new Cesium.Cartesian2()); + * @param angle - The angle, in radians, of the rotation. Positive angles are counterclockwise. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix2 instance if one was not provided. + */ + static fromRotation(angle: number, result?: Matrix2): Matrix2; + /** + * Creates an Array from the provided Matrix2 instance. + The array will be in column-major order. + * @param matrix - The matrix to use.. + * @param [result] - The Array onto which to store the result. + * @returns The modified Array parameter or a new Array instance if one was not provided. + */ + static toArray(matrix: Matrix2, result?: number[]): number[]; + /** + * Computes the array index of the element at the provided row and column. + * @example + * var myMatrix = new Cesium.Matrix2(); + var column1Row0Index = Cesium.Matrix2.getElementIndex(1, 0); + var column1Row0 = myMatrix[column1Row0Index] + myMatrix[column1Row0Index] = 10.0; + * @param row - The zero-based index of the row. + * @param column - The zero-based index of the column. + * @returns The index of the element at the provided row and column. + */ + static getElementIndex(row: number, column: number): number; + /** + * Retrieves a copy of the matrix column at the provided index as a Cartesian2 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getColumn(matrix: Matrix2, index: number, result: Cartesian2): Cartesian2; + /** + * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian2 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified column. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setColumn(matrix: Matrix2, index: number, cartesian: Cartesian2, result: Cartesian2): Matrix2; + /** + * Retrieves a copy of the matrix row at the provided index as a Cartesian2 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getRow(matrix: Matrix2, index: number, result: Cartesian2): Cartesian2; + /** + * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian2 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified row. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setRow(matrix: Matrix2, index: number, cartesian: Cartesian2, result: Matrix2): Matrix2; + /** + * Extracts the non-uniform scale assuming the matrix is an affine transformation. + * @param matrix - The matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getScale(matrix: Matrix2, result: Cartesian2): Cartesian2; + /** + * Computes the maximum scale assuming the matrix is an affine transformation. + The maximum scale is the maximum length of the column vectors. + * @param matrix - The matrix. + * @returns The maximum scale. + */ + static getMaximumScale(matrix: Matrix2): number; + /** + * Computes the product of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiply(left: Matrix2, right: Matrix2, result: Matrix2): Matrix2; + /** + * Computes the sum of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Matrix2, right: Matrix2, result: Matrix2): Matrix2; + /** + * Computes the difference of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Matrix2, right: Matrix2, result: Matrix2): Matrix2; + /** + * Computes the product of a matrix and a column vector. + * @param matrix - The matrix. + * @param cartesian - The column. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByVector(matrix: Matrix2, cartesian: Cartesian2, result: Cartesian2): Cartesian2; + /** + * Computes the product of a matrix and a scalar. + * @param matrix - The matrix. + * @param scalar - The number to multiply by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(matrix: Matrix2, scalar: number, result: Matrix2): Matrix2; + /** + * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix. + * @example + * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromScale(scale), m); + Cesium.Matrix2.multiplyByScale(m, scale, m); + * @param matrix - The matrix on the left-hand side. + * @param scale - The non-uniform scale on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScale(matrix: Matrix2, scale: Cartesian2, result: Matrix2): Matrix2; + /** + * Creates a negated copy of the provided matrix. + * @param matrix - The matrix to negate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(matrix: Matrix2, result: Matrix2): Matrix2; + /** + * Computes the transpose of the provided matrix. + * @param matrix - The matrix to transpose. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static transpose(matrix: Matrix2, result: Matrix2): Matrix2; + /** + * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. + * @param matrix - The matrix with signed elements. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(matrix: Matrix2, result: Matrix2): Matrix2; + /** + * Compares the provided matrices componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Matrix2, right?: Matrix2): boolean; + /** + * Compares the provided matrices componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Matrix2, right?: Matrix2, epsilon?: number): boolean; + /** + * An immutable Matrix2 instance initialized to the identity matrix. + */ + static readonly IDENTITY: Matrix2; + /** + * An immutable Matrix2 instance initialized to the zero matrix. + */ + static readonly ZERO: Matrix2; + /** + * The index into Matrix2 for column 0, row 0. + * @example + * var matrix = new Cesium.Matrix2(); + matrix[Cesium.Matrix2.COLUMN0ROW0] = 5.0; // set column 0, row 0 to 5.0 + */ + static readonly COLUMN0ROW0: number; + /** + * The index into Matrix2 for column 0, row 1. + * @example + * var matrix = new Cesium.Matrix2(); + matrix[Cesium.Matrix2.COLUMN0ROW1] = 5.0; // set column 0, row 1 to 5.0 + */ + static readonly COLUMN0ROW1: number; + /** + * The index into Matrix2 for column 1, row 0. + * @example + * var matrix = new Cesium.Matrix2(); + matrix[Cesium.Matrix2.COLUMN1ROW0] = 5.0; // set column 1, row 0 to 5.0 + */ + static readonly COLUMN1ROW0: number; + /** + * The index into Matrix2 for column 1, row 1. + * @example + * var matrix = new Cesium.Matrix2(); + matrix[Cesium.Matrix2.COLUMN1ROW1] = 5.0; // set column 1, row 1 to 5.0 + */ + static readonly COLUMN1ROW1: number; + /** + * Gets the number of items in the collection. + */ + length: number; + /** + * Duplicates the provided Matrix2 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix2 instance if one was not provided. + */ + clone(result?: Matrix2): Matrix2; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side matrix. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Matrix2): boolean; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The right hand side matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Matrix2, epsilon?: number): boolean; + /** + * Creates a string representing this Matrix with each row being + on a separate line and in the format '(column0, column1)'. + * @returns A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1)'. + */ + toString(): string; +} + +export interface Matrix3 extends ArrayLike { +} + +/** + * A 3x3 matrix, indexable as a column-major order array. +Constructor parameters are in row-major order for code readability. + * @param [column0Row0 = 0.0] - The value for column 0, row 0. + * @param [column1Row0 = 0.0] - The value for column 1, row 0. + * @param [column2Row0 = 0.0] - The value for column 2, row 0. + * @param [column0Row1 = 0.0] - The value for column 0, row 1. + * @param [column1Row1 = 0.0] - The value for column 1, row 1. + * @param [column2Row1 = 0.0] - The value for column 2, row 1. + * @param [column0Row2 = 0.0] - The value for column 0, row 2. + * @param [column1Row2 = 0.0] - The value for column 1, row 2. + * @param [column2Row2 = 0.0] - The value for column 2, row 2. + */ +export class Matrix3 implements ArrayLike { + constructor(column0Row0?: number, column1Row0?: number, column2Row0?: number, column0Row1?: number, column1Row1?: number, column2Row1?: number, column0Row2?: number, column1Row2?: number, column2Row2?: number); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Matrix3, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Matrix3): Matrix3; + /** + * Duplicates a Matrix3 instance. + * @param matrix - The matrix to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if one was not provided. (Returns undefined if matrix is undefined) + */ + static clone(matrix: Matrix3, result?: Matrix3): Matrix3; + /** + * Creates a Matrix3 from 9 consecutive elements in an array. + * @example + * // Create the Matrix3: + // [1.0, 2.0, 3.0] + // [1.0, 2.0, 3.0] + // [1.0, 2.0, 3.0] + + var v = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0]; + var m = Cesium.Matrix3.fromArray(v); + + // Create same Matrix3 with using an offset into an array + var v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0]; + var m2 = Cesium.Matrix3.fromArray(v2, 2); + * @param array - The array whose 9 consecutive elements correspond to the positions of the matrix. Assumes column-major order. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to first column first row position in the matrix. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Matrix3): Matrix3; + /** + * Creates a Matrix3 instance from a column-major order array. + * @param values - The column-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromColumnMajorArray(values: number[], result?: Matrix3): Matrix3; + /** + * Creates a Matrix3 instance from a row-major order array. + The resulting matrix will be in column-major order. + * @param values - The row-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromRowMajorArray(values: number[], result?: Matrix3): Matrix3; + /** + * Computes a 3x3 rotation matrix from the provided quaternion. + * @param quaternion - the quaternion to use. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The 3x3 rotation matrix from this quaternion. + */ + static fromQuaternion(quaternion: Quaternion, result?: Matrix3): Matrix3; + /** + * Computes a 3x3 rotation matrix from the provided headingPitchRoll. (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles ) + * @param headingPitchRoll - the headingPitchRoll to use. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The 3x3 rotation matrix from this headingPitchRoll. + */ + static fromHeadingPitchRoll(headingPitchRoll: HeadingPitchRoll, result?: Matrix3): Matrix3; + /** + * Computes a Matrix3 instance representing a non-uniform scale. + * @example + * // Creates + // [7.0, 0.0, 0.0] + // [0.0, 8.0, 0.0] + // [0.0, 0.0, 9.0] + var m = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0)); + * @param scale - The x, y, and z scale factors. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromScale(scale: Cartesian3, result?: Matrix3): Matrix3; + /** + * Computes a Matrix3 instance representing a uniform scale. + * @example + * // Creates + // [2.0, 0.0, 0.0] + // [0.0, 2.0, 0.0] + // [0.0, 0.0, 2.0] + var m = Cesium.Matrix3.fromUniformScale(2.0); + * @param scale - The uniform scale factor. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromUniformScale(scale: number, result?: Matrix3): Matrix3; + /** + * Computes a Matrix3 instance representing the cross product equivalent matrix of a Cartesian3 vector. + * @example + * // Creates + // [0.0, -9.0, 8.0] + // [9.0, 0.0, -7.0] + // [-8.0, 7.0, 0.0] + var m = Cesium.Matrix3.fromCrossProduct(new Cesium.Cartesian3(7.0, 8.0, 9.0)); + * @param vector - the vector on the left hand side of the cross product operation. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromCrossProduct(vector: Cartesian3, result?: Matrix3): Matrix3; + /** + * Creates a rotation matrix around the x-axis. + * @example + * // Rotate a point 45 degrees counterclockwise around the x-axis. + var p = new Cesium.Cartesian3(5, 6, 7); + var m = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(45.0)); + var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); + * @param angle - The angle, in radians, of the rotation. Positive angles are counterclockwise. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromRotationX(angle: number, result?: Matrix3): Matrix3; + /** + * Creates a rotation matrix around the y-axis. + * @example + * // Rotate a point 45 degrees counterclockwise around the y-axis. + var p = new Cesium.Cartesian3(5, 6, 7); + var m = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(45.0)); + var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); + * @param angle - The angle, in radians, of the rotation. Positive angles are counterclockwise. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromRotationY(angle: number, result?: Matrix3): Matrix3; + /** + * Creates a rotation matrix around the z-axis. + * @example + * // Rotate a point 45 degrees counterclockwise around the z-axis. + var p = new Cesium.Cartesian3(5, 6, 7); + var m = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45.0)); + var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); + * @param angle - The angle, in radians, of the rotation. Positive angles are counterclockwise. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix3 instance if one was not provided. + */ + static fromRotationZ(angle: number, result?: Matrix3): Matrix3; + /** + * Creates an Array from the provided Matrix3 instance. + The array will be in column-major order. + * @param matrix - The matrix to use.. + * @param [result] - The Array onto which to store the result. + * @returns The modified Array parameter or a new Array instance if one was not provided. + */ + static toArray(matrix: Matrix3, result?: number[]): number[]; + /** + * Computes the array index of the element at the provided row and column. + * @example + * var myMatrix = new Cesium.Matrix3(); + var column1Row0Index = Cesium.Matrix3.getElementIndex(1, 0); + var column1Row0 = myMatrix[column1Row0Index] + myMatrix[column1Row0Index] = 10.0; + * @param row - The zero-based index of the row. + * @param column - The zero-based index of the column. + * @returns The index of the element at the provided row and column. + */ + static getElementIndex(row: number, column: number): number; + /** + * Retrieves a copy of the matrix column at the provided index as a Cartesian3 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getColumn(matrix: Matrix3, index: number, result: Cartesian3): Cartesian3; + /** + * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian3 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified column. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setColumn(matrix: Matrix3, index: number, cartesian: Cartesian3, result: Matrix3): Matrix3; + /** + * Retrieves a copy of the matrix row at the provided index as a Cartesian3 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getRow(matrix: Matrix3, index: number, result: Cartesian3): Cartesian3; + /** + * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian3 instance. + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified row. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setRow(matrix: Matrix3, index: number, cartesian: Cartesian3, result: Matrix3): Matrix3; + /** + * Extracts the non-uniform scale assuming the matrix is an affine transformation. + * @param matrix - The matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getScale(matrix: Matrix3, result: Cartesian3): Cartesian3; + /** + * Computes the maximum scale assuming the matrix is an affine transformation. + The maximum scale is the maximum length of the column vectors. + * @param matrix - The matrix. + * @returns The maximum scale. + */ + static getMaximumScale(matrix: Matrix3): number; + /** + * Computes the product of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiply(left: Matrix3, right: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the sum of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Matrix3, right: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the difference of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Matrix3, right: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the product of a matrix and a column vector. + * @param matrix - The matrix. + * @param cartesian - The column. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByVector(matrix: Matrix3, cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the product of a matrix and a scalar. + * @param matrix - The matrix. + * @param scalar - The number to multiply by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(matrix: Matrix3, scalar: number, result: Matrix3): Matrix3; + /** + * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix. + * @example + * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromScale(scale), m); + Cesium.Matrix3.multiplyByScale(m, scale, m); + * @param matrix - The matrix on the left-hand side. + * @param scale - The non-uniform scale on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScale(matrix: Matrix3, scale: Cartesian3, result: Matrix3): Matrix3; + /** + * Creates a negated copy of the provided matrix. + * @param matrix - The matrix to negate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the transpose of the provided matrix. + * @param matrix - The matrix to transpose. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static transpose(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Extracts the rotation assuming the matrix is an affine transformation. + * @param matrix - The matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter + */ + static getRotation(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the eigenvectors and eigenvalues of a symmetric matrix. +

+ Returns a diagonal matrix and unitary matrix such that: + matrix = unitary matrix * diagonal matrix * transpose(unitary matrix) +

+

+ The values along the diagonal of the diagonal matrix are the eigenvalues. The columns + of the unitary matrix are the corresponding eigenvectors. +

+ * @example + * var a = //... symetric matrix + var result = { + unitary : new Cesium.Matrix3(), + diagonal : new Cesium.Matrix3() + }; + Cesium.Matrix3.computeEigenDecomposition(a, result); + + var unitaryTranspose = Cesium.Matrix3.transpose(result.unitary, new Cesium.Matrix3()); + var b = Cesium.Matrix3.multiply(result.unitary, result.diagonal, new Cesium.Matrix3()); + Cesium.Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a + + var lambda = Cesium.Matrix3.getColumn(result.diagonal, 0, new Cesium.Cartesian3()).x; // first eigenvalue + var v = Cesium.Matrix3.getColumn(result.unitary, 0, new Cesium.Cartesian3()); // first eigenvector + var c = Cesium.Cartesian3.multiplyByScalar(v, lambda, new Cesium.Cartesian3()); // equal to Cesium.Matrix3.multiplyByVector(a, v) + * @param matrix - The matrix to decompose into diagonal and unitary matrix. Expected to be symmetric. + * @param [result] - An object with unitary and diagonal properties which are matrices onto which to store the result. + * @returns An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively. + */ + static computeEigenDecomposition(matrix: Matrix3, result?: any): any; + /** + * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. + * @param matrix - The matrix with signed elements. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the determinant of the provided matrix. + * @param matrix - The matrix to use. + * @returns The value of the determinant of the matrix. + */ + static determinant(matrix: Matrix3): number; + /** + * Computes the inverse of the provided matrix. + * @param matrix - The matrix to invert. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverse(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Computes the inverse transpose of a matrix. + * @param matrix - The matrix to transpose and invert. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverseTranspose(matrix: Matrix3, result: Matrix3): Matrix3; + /** + * Compares the provided matrices componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Matrix3, right?: Matrix3): boolean; + /** + * Compares the provided matrices componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Matrix3, right?: Matrix3, epsilon?: number): boolean; + /** + * An immutable Matrix3 instance initialized to the identity matrix. + */ + static readonly IDENTITY: Matrix3; + /** + * An immutable Matrix3 instance initialized to the zero matrix. + */ + static readonly ZERO: Matrix3; + /** + * The index into Matrix3 for column 0, row 0. + */ + static readonly COLUMN0ROW0: number; + /** + * The index into Matrix3 for column 0, row 1. + */ + static readonly COLUMN0ROW1: number; + /** + * The index into Matrix3 for column 0, row 2. + */ + static readonly COLUMN0ROW2: number; + /** + * The index into Matrix3 for column 1, row 0. + */ + static readonly COLUMN1ROW0: number; + /** + * The index into Matrix3 for column 1, row 1. + */ + static readonly COLUMN1ROW1: number; + /** + * The index into Matrix3 for column 1, row 2. + */ + static readonly COLUMN1ROW2: number; + /** + * The index into Matrix3 for column 2, row 0. + */ + static readonly COLUMN2ROW0: number; + /** + * The index into Matrix3 for column 2, row 1. + */ + static readonly COLUMN2ROW1: number; + /** + * The index into Matrix3 for column 2, row 2. + */ + static readonly COLUMN2ROW2: number; + /** + * Gets the number of items in the collection. + */ + length: number; + /** + * Duplicates the provided Matrix3 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if one was not provided. + */ + clone(result?: Matrix3): Matrix3; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side matrix. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Matrix3): boolean; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The right hand side matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Matrix3, epsilon?: number): boolean; + /** + * Creates a string representing this Matrix with each row being + on a separate line and in the format '(column0, column1, column2)'. + * @returns A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2)'. + */ + toString(): string; +} + +export interface Matrix4 extends ArrayLike { +} + +/** + * A 4x4 matrix, indexable as a column-major order array. +Constructor parameters are in row-major order for code readability. + * @param [column0Row0 = 0.0] - The value for column 0, row 0. + * @param [column1Row0 = 0.0] - The value for column 1, row 0. + * @param [column2Row0 = 0.0] - The value for column 2, row 0. + * @param [column3Row0 = 0.0] - The value for column 3, row 0. + * @param [column0Row1 = 0.0] - The value for column 0, row 1. + * @param [column1Row1 = 0.0] - The value for column 1, row 1. + * @param [column2Row1 = 0.0] - The value for column 2, row 1. + * @param [column3Row1 = 0.0] - The value for column 3, row 1. + * @param [column0Row2 = 0.0] - The value for column 0, row 2. + * @param [column1Row2 = 0.0] - The value for column 1, row 2. + * @param [column2Row2 = 0.0] - The value for column 2, row 2. + * @param [column3Row2 = 0.0] - The value for column 3, row 2. + * @param [column0Row3 = 0.0] - The value for column 0, row 3. + * @param [column1Row3 = 0.0] - The value for column 1, row 3. + * @param [column2Row3 = 0.0] - The value for column 2, row 3. + * @param [column3Row3 = 0.0] - The value for column 3, row 3. + */ +export class Matrix4 implements ArrayLike { + constructor(column0Row0?: number, column1Row0?: number, column2Row0?: number, column3Row0?: number, column0Row1?: number, column1Row1?: number, column2Row1?: number, column3Row1?: number, column0Row2?: number, column1Row2?: number, column2Row2?: number, column3Row2?: number, column0Row3?: number, column1Row3?: number, column2Row3?: number, column3Row3?: number); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Matrix4, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Matrix4): Matrix4; + /** + * Duplicates a Matrix4 instance. + * @param matrix - The matrix to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if one was not provided. (Returns undefined if matrix is undefined) + */ + static clone(matrix: Matrix4, result?: Matrix4): Matrix4; + /** + * Creates a Matrix4 from 16 consecutive elements in an array. + * @example + * // Create the Matrix4: + // [1.0, 2.0, 3.0, 4.0] + // [1.0, 2.0, 3.0, 4.0] + // [1.0, 2.0, 3.0, 4.0] + // [1.0, 2.0, 3.0, 4.0] + + var v = [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0]; + var m = Cesium.Matrix4.fromArray(v); + + // Create same Matrix4 with using an offset into an array + var v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0]; + var m2 = Cesium.Matrix4.fromArray(v2, 2); + * @param array - The array whose 16 consecutive elements correspond to the positions of the matrix. Assumes column-major order. + * @param [startingIndex = 0] - The offset into the array of the first element, which corresponds to first column first row position in the matrix. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if one was not provided. + */ + static fromArray(array: number[], startingIndex?: number, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance from a column-major order array. + * @param values - The column-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromColumnMajorArray(values: number[], result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance from a row-major order array. + The resulting matrix will be in column-major order. + * @param values - The row-major order array. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromRowMajorArray(values: number[], result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance from a Matrix3 representing the rotation + and a Cartesian3 representing the translation. + * @param rotation - The upper left portion of the matrix representing the rotation. + * @param [translation = Cartesian3.ZERO] - The upper right portion of the matrix representing the translation. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromRotationTranslation(rotation: Matrix3, translation?: Cartesian3, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance from a translation, rotation, and scale (TRS) + representation with the rotation represented as a quaternion. + * @example + * var result = Cesium.Matrix4.fromTranslationQuaternionRotationScale( + new Cesium.Cartesian3(1.0, 2.0, 3.0), // translation + Cesium.Quaternion.IDENTITY, // rotation + new Cesium.Cartesian3(7.0, 8.0, 9.0), // scale + result); + * @param translation - The translation transformation. + * @param rotation - The rotation transformation. + * @param scale - The non-uniform scale transformation. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromTranslationQuaternionRotationScale(translation: Cartesian3, rotation: Quaternion, scale: Cartesian3, result?: Matrix4): Matrix4; + /** + * Creates a Matrix4 instance from a {@link TranslationRotationScale} instance. + * @param translationRotationScale - The instance. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromTranslationRotationScale(translationRotationScale: TranslationRotationScale, result?: Matrix4): Matrix4; + /** + * Creates a Matrix4 instance from a Cartesian3 representing the translation. + * @param translation - The upper right portion of the matrix representing the translation. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromTranslation(translation: Cartesian3, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing a non-uniform scale. + * @example + * // Creates + // [7.0, 0.0, 0.0, 0.0] + // [0.0, 8.0, 0.0, 0.0] + // [0.0, 0.0, 9.0, 0.0] + // [0.0, 0.0, 0.0, 1.0] + var m = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0)); + * @param scale - The x, y, and z scale factors. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromScale(scale: Cartesian3, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing a uniform scale. + * @example + * // Creates + // [2.0, 0.0, 0.0, 0.0] + // [0.0, 2.0, 0.0, 0.0] + // [0.0, 0.0, 2.0, 0.0] + // [0.0, 0.0, 0.0, 1.0] + var m = Cesium.Matrix4.fromUniformScale(2.0); + * @param scale - The uniform scale factor. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromUniformScale(scale: number, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance from a Camera. + * @param camera - The camera to use. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new Matrix4 instance if one was not provided. + */ + static fromCamera(camera: Camera, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing a perspective transformation matrix. + * @param fovY - The field of view along the Y axis in radians. + * @param aspectRatio - The aspect ratio. + * @param near - The distance to the near plane in meters. + * @param far - The distance to the far plane in meters. + * @param result - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computePerspectiveFieldOfView(fovY: number, aspectRatio: number, near: number, far: number, result: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing an orthographic transformation matrix. + * @param left - The number of meters to the left of the camera that will be in view. + * @param right - The number of meters to the right of the camera that will be in view. + * @param bottom - The number of meters below of the camera that will be in view. + * @param top - The number of meters above of the camera that will be in view. + * @param near - The distance to the near plane in meters. + * @param far - The distance to the far plane in meters. + * @param result - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computeOrthographicOffCenter(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing an off center perspective transformation. + * @param left - The number of meters to the left of the camera that will be in view. + * @param right - The number of meters to the right of the camera that will be in view. + * @param bottom - The number of meters below of the camera that will be in view. + * @param top - The number of meters above of the camera that will be in view. + * @param near - The distance to the near plane in meters. + * @param far - The distance to the far plane in meters. + * @param result - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computePerspectiveOffCenter(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance representing an infinite off center perspective transformation. + * @param left - The number of meters to the left of the camera that will be in view. + * @param right - The number of meters to the right of the camera that will be in view. + * @param bottom - The number of meters below of the camera that will be in view. + * @param top - The number of meters above of the camera that will be in view. + * @param near - The distance to the near plane in meters. + * @param result - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computeInfinitePerspectiveOffCenter(left: number, right: number, bottom: number, top: number, near: number, result: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates. + * @example + * // Create viewport transformation using an explicit viewport and depth range. + var m = Cesium.Matrix4.computeViewportTransformation({ + x : 0.0, + y : 0.0, + width : 1024.0, + height : 768.0 + }, 0.0, 1.0, new Cesium.Matrix4()); + * @param [viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] - The viewport's corners as shown in Example 1. + * @param [nearDepthRange = 0.0] - The near plane distance in window coordinates. + * @param [farDepthRange = 1.0] - The far plane distance in window coordinates. + * @param [result] - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computeViewportTransformation(viewport?: any, nearDepthRange?: number, farDepthRange?: number, result?: Matrix4): Matrix4; + /** + * Computes a Matrix4 instance that transforms from world space to view space. + * @param position - The position of the camera. + * @param direction - The forward direction. + * @param up - The up direction. + * @param right - The right direction. + * @param result - The object in which the result will be stored. + * @returns The modified result parameter. + */ + static computeView(position: Cartesian3, direction: Cartesian3, up: Cartesian3, right: Cartesian3, result: Matrix4): Matrix4; + /** + * Computes an Array from the provided Matrix4 instance. + The array will be in column-major order. + * @example + * //create an array from an instance of Matrix4 + // m = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + var a = Cesium.Matrix4.toArray(m); + + // m remains the same + //creates a = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0] + * @param matrix - The matrix to use.. + * @param [result] - The Array onto which to store the result. + * @returns The modified Array parameter or a new Array instance if one was not provided. + */ + static toArray(matrix: Matrix4, result?: number[]): number[]; + /** + * Computes the array index of the element at the provided row and column. + * @example + * var myMatrix = new Cesium.Matrix4(); + var column1Row0Index = Cesium.Matrix4.getElementIndex(1, 0); + var column1Row0 = myMatrix[column1Row0Index]; + myMatrix[column1Row0Index] = 10.0; + * @param row - The zero-based index of the row. + * @param column - The zero-based index of the column. + * @returns The index of the element at the provided row and column. + */ + static getElementIndex(row: number, column: number): number; + /** + * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance. + * @example + * //returns a Cartesian4 instance with values from the specified column + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + //Example 1: Creates an instance of Cartesian + var a = Cesium.Matrix4.getColumn(m, 2, new Cesium.Cartesian4()); + * @example + * //Example 2: Sets values for Cartesian instance + var a = new Cesium.Cartesian4(); + Cesium.Matrix4.getColumn(m, 2, a); + + // a.x = 12.0; a.y = 16.0; a.z = 20.0; a.w = 24.0; + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getColumn(matrix: Matrix4, index: number, result: Cartesian4): Cartesian4; + /** + * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance. + * @example + * //creates a new Matrix4 instance with new column values from the Cartesian4 instance + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + var a = Cesium.Matrix4.setColumn(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4()); + + // m remains the same + // a = [10.0, 11.0, 99.0, 13.0] + // [14.0, 15.0, 98.0, 17.0] + // [18.0, 19.0, 97.0, 21.0] + // [22.0, 23.0, 96.0, 25.0] + * @param matrix - The matrix to use. + * @param index - The zero-based index of the column to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified column. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setColumn(matrix: Matrix4, index: number, cartesian: Cartesian4, result: Matrix4): Matrix4; + /** + * Computes a new matrix that replaces the translation in the rightmost column of the provided + matrix with the provided translation. This assumes the matrix is an affine transformation + * @param matrix - The matrix to use. + * @param translation - The translation that replaces the translation of the provided matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setTranslation(matrix: Matrix4, translation: Cartesian3, result: Matrix4): Matrix4; + /** + * Computes a new matrix that replaces the scale with the provided scale. This assumes the matrix is an affine transformation + * @param matrix - The matrix to use. + * @param scale - The scale that replaces the scale of the provided matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setScale(matrix: Matrix4, scale: Cartesian3, result: Matrix4): Matrix4; + /** + * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance. + * @example + * //returns a Cartesian4 instance with values from the specified column + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + //Example 1: Returns an instance of Cartesian + var a = Cesium.Matrix4.getRow(m, 2, new Cesium.Cartesian4()); + * @example + * //Example 2: Sets values for a Cartesian instance + var a = new Cesium.Cartesian4(); + Cesium.Matrix4.getRow(m, 2, a); + + // a.x = 18.0; a.y = 19.0; a.z = 20.0; a.w = 21.0; + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to retrieve. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getRow(matrix: Matrix4, index: number, result: Cartesian4): Cartesian4; + /** + * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance. + * @example + * //create a new Matrix4 instance with new row values from the Cartesian4 instance + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + var a = Cesium.Matrix4.setRow(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4()); + + // m remains the same + // a = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [99.0, 98.0, 97.0, 96.0] + // [22.0, 23.0, 24.0, 25.0] + * @param matrix - The matrix to use. + * @param index - The zero-based index of the row to set. + * @param cartesian - The Cartesian whose values will be assigned to the specified row. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static setRow(matrix: Matrix4, index: number, cartesian: Cartesian4, result: Matrix4): Matrix4; + /** + * Extracts the non-uniform scale assuming the matrix is an affine transformation. + * @param matrix - The matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter + */ + static getScale(matrix: Matrix4, result: Cartesian3): Cartesian3; + /** + * Computes the maximum scale assuming the matrix is an affine transformation. + The maximum scale is the maximum length of the column vectors in the upper-left + 3x3 matrix. + * @param matrix - The matrix. + * @returns The maximum scale. + */ + static getMaximumScale(matrix: Matrix4): number; + /** + * Computes the product of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiply(left: Matrix4, right: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the sum of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Matrix4, right: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the difference of two matrices. + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Matrix4, right: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the product of two matrices assuming the matrices are + affine transformation matrices, where the upper left 3x3 elements + are a rotation matrix, and the upper three elements in the fourth + column are the translation. The bottom row is assumed to be [0, 0, 0, 1]. + The matrix is not verified to be in the proper form. + This method is faster than computing the product for general 4x4 + matrices using {@link Matrix4.multiply}. + * @example + * var m1 = new Cesium.Matrix4(1.0, 6.0, 7.0, 0.0, 2.0, 5.0, 8.0, 0.0, 3.0, 4.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0); + var m2 = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(1.0, 1.0, 1.0)); + var m3 = Cesium.Matrix4.multiplyTransformation(m1, m2, new Cesium.Matrix4()); + * @param left - The first matrix. + * @param right - The second matrix. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyTransformation(left: Matrix4, right: Matrix4, result: Matrix4): Matrix4; + /** + * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) + by a 3x3 rotation matrix. This is an optimization + for Matrix4.multiply(m, Matrix4.fromRotationTranslation(rotation), m); with less allocations and arithmetic operations. + * @example + * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromRotationTranslation(rotation), m); + Cesium.Matrix4.multiplyByMatrix3(m, rotation, m); + * @param matrix - The matrix on the left-hand side. + * @param rotation - The 3x3 rotation matrix on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByMatrix3(matrix: Matrix4, rotation: Matrix3, result: Matrix4): Matrix4; + /** + * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) + by an implicit translation matrix defined by a {@link Cartesian3}. This is an optimization + for Matrix4.multiply(m, Matrix4.fromTranslation(position), m); with less allocations and arithmetic operations. + * @example + * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromTranslation(position), m); + Cesium.Matrix4.multiplyByTranslation(m, position, m); + * @param matrix - The matrix on the left-hand side. + * @param translation - The translation on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByTranslation(matrix: Matrix4, translation: Cartesian3, result: Matrix4): Matrix4; + /** + * Multiplies an affine transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) + by an implicit uniform scale matrix. This is an optimization + for Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);, where + m must be an affine matrix. + This function performs fewer allocations and arithmetic operations. + * @example + * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromUniformScale(scale), m); + Cesium.Matrix4.multiplyByUniformScale(m, scale, m); + * @param matrix - The affine matrix on the left-hand side. + * @param scale - The uniform scale on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByUniformScale(matrix: Matrix4, scale: number, result: Matrix4): Matrix4; + /** + * Multiplies an affine transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) + by an implicit non-uniform scale matrix. This is an optimization + for Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);, where + m must be an affine matrix. + This function performs fewer allocations and arithmetic operations. + * @example + * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromScale(scale), m); + Cesium.Matrix4.multiplyByScale(m, scale, m); + * @param matrix - The affine matrix on the left-hand side. + * @param scale - The non-uniform scale on the right-hand side. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScale(matrix: Matrix4, scale: Cartesian3, result: Matrix4): Matrix4; + /** + * Computes the product of a matrix and a column vector. + * @param matrix - The matrix. + * @param cartesian - The vector. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByVector(matrix: Matrix4, cartesian: Cartesian4, result: Cartesian4): Cartesian4; + /** + * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector} + with a {@link Cartesian4} with a w component of zero. + * @example + * var p = new Cesium.Cartesian3(1.0, 2.0, 3.0); + var result = Cesium.Matrix4.multiplyByPointAsVector(matrix, p, new Cesium.Cartesian3()); + // A shortcut for + // Cartesian3 p = ... + // Cesium.Matrix4.multiplyByVector(matrix, new Cesium.Cartesian4(p.x, p.y, p.z, 0.0), result); + * @param matrix - The matrix. + * @param cartesian - The point. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByPointAsVector(matrix: Matrix4, cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector} + with a {@link Cartesian4} with a w component of 1, but returns a {@link Cartesian3} instead of a {@link Cartesian4}. + * @example + * var p = new Cesium.Cartesian3(1.0, 2.0, 3.0); + var result = Cesium.Matrix4.multiplyByPoint(matrix, p, new Cesium.Cartesian3()); + * @param matrix - The matrix. + * @param cartesian - The point. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByPoint(matrix: Matrix4, cartesian: Cartesian3, result: Cartesian3): Cartesian3; + /** + * Computes the product of a matrix and a scalar. + * @example + * //create a Matrix4 instance which is a scaled version of the supplied Matrix4 + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + var a = Cesium.Matrix4.multiplyByScalar(m, -2, new Cesium.Matrix4()); + + // m remains the same + // a = [-20.0, -22.0, -24.0, -26.0] + // [-28.0, -30.0, -32.0, -34.0] + // [-36.0, -38.0, -40.0, -42.0] + // [-44.0, -46.0, -48.0, -50.0] + * @param matrix - The matrix. + * @param scalar - The number to multiply by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(matrix: Matrix4, scalar: number, result: Matrix4): Matrix4; + /** + * Computes a negated copy of the provided matrix. + * @example + * //create a new Matrix4 instance which is a negation of a Matrix4 + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + var a = Cesium.Matrix4.negate(m, new Cesium.Matrix4()); + + // m remains the same + // a = [-10.0, -11.0, -12.0, -13.0] + // [-14.0, -15.0, -16.0, -17.0] + // [-18.0, -19.0, -20.0, -21.0] + // [-22.0, -23.0, -24.0, -25.0] + * @param matrix - The matrix to negate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the transpose of the provided matrix. + * @example + * //returns transpose of a Matrix4 + // m = [10.0, 11.0, 12.0, 13.0] + // [14.0, 15.0, 16.0, 17.0] + // [18.0, 19.0, 20.0, 21.0] + // [22.0, 23.0, 24.0, 25.0] + + var a = Cesium.Matrix4.transpose(m, new Cesium.Matrix4()); + + // m remains the same + // a = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + * @param matrix - The matrix to transpose. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static transpose(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. + * @param matrix - The matrix with signed elements. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static abs(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * Compares the provided matrices componentwise and returns + true if they are equal, false otherwise. + * @example + * //compares two Matrix4 instances + + // a = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + + // b = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + + if(Cesium.Matrix4.equals(a,b)) { + console.log("Both matrices are equal"); + } else { + console.log("They are not equal"); + } + + //Prints "Both matrices are equal" on the console + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Matrix4, right?: Matrix4): boolean; + /** + * Compares the provided matrices componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @example + * //compares two Matrix4 instances + + // a = [10.5, 14.5, 18.5, 22.5] + // [11.5, 15.5, 19.5, 23.5] + // [12.5, 16.5, 20.5, 24.5] + // [13.5, 17.5, 21.5, 25.5] + + // b = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + + if(Cesium.Matrix4.equalsEpsilon(a,b,0.1)){ + console.log("Difference between both the matrices is less than 0.1"); + } else { + console.log("Difference between both the matrices is not less than 0.1"); + } + + //Prints "Difference between both the matrices is not less than 0.1" on the console + * @param [left] - The first matrix. + * @param [right] - The second matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Matrix4, right?: Matrix4, epsilon?: number): boolean; + /** + * Gets the translation portion of the provided matrix, assuming the matrix is a affine transformation matrix. + * @param matrix - The matrix to use. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getTranslation(matrix: Matrix4, result: Cartesian3): Cartesian3; + /** + * Gets the upper left 3x3 rotation matrix of the provided matrix, assuming the matrix is an affine transformation matrix. + * @example + * // returns a Matrix3 instance from a Matrix4 instance + + // m = [10.0, 14.0, 18.0, 22.0] + // [11.0, 15.0, 19.0, 23.0] + // [12.0, 16.0, 20.0, 24.0] + // [13.0, 17.0, 21.0, 25.0] + + var b = new Cesium.Matrix3(); + Cesium.Matrix4.getMatrix3(m,b); + + // b = [10.0, 14.0, 18.0] + // [11.0, 15.0, 19.0] + // [12.0, 16.0, 20.0] + * @param matrix - The matrix to use. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static getMatrix3(matrix: Matrix4, result: Matrix3): Matrix3; + /** + * Computes the inverse of the provided matrix using Cramers Rule. + If the determinant is zero, the matrix can not be inverted, and an exception is thrown. + If the matrix is an affine transformation matrix, it is more efficient + to invert it with {@link Matrix4.inverseTransformation}. + * @param matrix - The matrix to invert. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverse(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the inverse of the provided matrix assuming it is + an affine transformation matrix, where the upper left 3x3 elements + are a rotation matrix, and the upper three elements in the fourth + column are the translation. The bottom row is assumed to be [0, 0, 0, 1]. + The matrix is not verified to be in the proper form. + This method is faster than computing the inverse for a general 4x4 + matrix using {@link Matrix4.inverse}. + * @param matrix - The matrix to invert. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverseTransformation(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * Computes the inverse transpose of a matrix. + * @param matrix - The matrix to transpose and invert. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverseTranspose(matrix: Matrix4, result: Matrix4): Matrix4; + /** + * An immutable Matrix4 instance initialized to the identity matrix. + */ + static readonly IDENTITY: Matrix4; + /** + * An immutable Matrix4 instance initialized to the zero matrix. + */ + static readonly ZERO: Matrix4; + /** + * The index into Matrix4 for column 0, row 0. + */ + static readonly COLUMN0ROW0: number; + /** + * The index into Matrix4 for column 0, row 1. + */ + static readonly COLUMN0ROW1: number; + /** + * The index into Matrix4 for column 0, row 2. + */ + static readonly COLUMN0ROW2: number; + /** + * The index into Matrix4 for column 0, row 3. + */ + static readonly COLUMN0ROW3: number; + /** + * The index into Matrix4 for column 1, row 0. + */ + static readonly COLUMN1ROW0: number; + /** + * The index into Matrix4 for column 1, row 1. + */ + static readonly COLUMN1ROW1: number; + /** + * The index into Matrix4 for column 1, row 2. + */ + static readonly COLUMN1ROW2: number; + /** + * The index into Matrix4 for column 1, row 3. + */ + static readonly COLUMN1ROW3: number; + /** + * The index into Matrix4 for column 2, row 0. + */ + static readonly COLUMN2ROW0: number; + /** + * The index into Matrix4 for column 2, row 1. + */ + static readonly COLUMN2ROW1: number; + /** + * The index into Matrix4 for column 2, row 2. + */ + static readonly COLUMN2ROW2: number; + /** + * The index into Matrix4 for column 2, row 3. + */ + static readonly COLUMN2ROW3: number; + /** + * The index into Matrix4 for column 3, row 0. + */ + static readonly COLUMN3ROW0: number; + /** + * The index into Matrix4 for column 3, row 1. + */ + static readonly COLUMN3ROW1: number; + /** + * The index into Matrix4 for column 3, row 2. + */ + static readonly COLUMN3ROW2: number; + /** + * The index into Matrix4 for column 3, row 3. + */ + static readonly COLUMN3ROW3: number; + /** + * Gets the number of items in the collection. + */ + length: number; + /** + * Duplicates the provided Matrix4 instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if one was not provided. + */ + clone(result?: Matrix4): Matrix4; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side matrix. + * @returns true if they are equal, false otherwise. + */ + equals(right?: Matrix4): boolean; + /** + * Compares this matrix to the provided matrix componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The right hand side matrix. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Matrix4, epsilon?: number): boolean; + /** + * Computes a string representing this Matrix with each row being + on a separate line and in the format '(column0, column1, column2, column3)'. + * @returns A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'. + */ + toString(): string; +} + +/** + * A stable merge sort. + * @example + * // Assume array contains BoundingSpheres in world coordinates. +// Sort them in ascending order of distance from the camera. +var position = camera.positionWC; +Cesium.mergeSort(array, function(a, b, position) { + return Cesium.BoundingSphere.distanceSquaredTo(b, position) - Cesium.BoundingSphere.distanceSquaredTo(a, position); +}, position); + * @param array - The array to sort. + * @param comparator - The function to use to compare elements in the array. + * @param [userDefinedObject] - Any item to pass as the third parameter to comparator. + */ +export function mergeSort(array: any[], comparator: mergeSortComparator, userDefinedObject?: any): void; + +/** + * A function used to compare two items while performing a merge sort. + * @example + * function compareNumbers(a, b, userDefinedObject) { + return a - b; +} + * @param a - An item in the array. + * @param b - An item in the array. + * @param [userDefinedObject] - An object that was passed to {@link mergeSort}. + */ +export type mergeSortComparator = (a: any, b: any, userDefinedObject?: any) => number; + +/** + * Represents a scalar value's lower and upper bound at a near distance and far distance in eye space. + * @param [near = 0.0] - The lower bound of the camera range. + * @param [nearValue = 0.0] - The value at the lower bound of the camera range. + * @param [far = 1.0] - The upper bound of the camera range. + * @param [farValue = 0.0] - The value at the upper bound of the camera range. + */ +export class NearFarScalar { + constructor(near?: number, nearValue?: number, far?: number, farValue?: number); + /** + * The lower bound of the camera range. + */ + near: number; + /** + * The value at the lower bound of the camera range. + */ + nearValue: number; + /** + * The upper bound of the camera range. + */ + far: number; + /** + * The value at the upper bound of the camera range. + */ + farValue: number; + /** + * Duplicates a NearFarScalar instance. + * @param nearFarScalar - The NearFarScalar to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new NearFarScalar instance if one was not provided. (Returns undefined if nearFarScalar is undefined) + */ + static clone(nearFarScalar: NearFarScalar, result?: NearFarScalar): NearFarScalar; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: NearFarScalar, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new NearFarScalar instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: NearFarScalar): NearFarScalar; + /** + * Compares the provided NearFarScalar and returns true if they are equal, + false otherwise. + * @param [left] - The first NearFarScalar. + * @param [right] - The second NearFarScalar. + * @returns true if left and right are equal; otherwise false. + */ + static equals(left?: NearFarScalar, right?: NearFarScalar): boolean; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new NearFarScalar instance if one was not provided. + */ + clone(result?: NearFarScalar): NearFarScalar; + /** + * Compares this instance to the provided NearFarScalar and returns true if they are equal, + false otherwise. + * @param [right] - The right hand side NearFarScalar. + * @returns true if left and right are equal; otherwise false. + */ + equals(right?: NearFarScalar): boolean; +} + +/** + * Converts an object representing a set of name/value pairs into a query string, +with names and values encoded properly for use in a URL. Values that are arrays +will produce multiple values with the same name. + * @example + * var str = Cesium.objectToQuery({ + key1 : 'some value', + key2 : 'a/b', + key3 : ['x', 'y'] +}); + * @param obj - The object containing data to encode. + * @returns An encoded query string. + */ +export function objectToQuery(obj: any): string; + +/** + * Creates an Occluder derived from an object's position and radius, as well as the camera position. +The occluder can be used to determine whether or not other objects are visible or hidden behind the +visible horizon defined by the occluder and camera position. + * @example + * // Construct an occluder one unit away from the origin with a radius of one. +var cameraPosition = Cesium.Cartesian3.ZERO; +var occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 1); +var occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition); + * @param occluderBoundingSphere - The bounding sphere surrounding the occluder. + * @param cameraPosition - The coordinate of the viewer/camera. + */ +export class Occluder { + constructor(occluderBoundingSphere: BoundingSphere, cameraPosition: Cartesian3); + /** + * The position of the occluder. + */ + position: Cartesian3; + /** + * The radius of the occluder. + */ + radius: number; + /** + * The position of the camera. + */ + cameraPosition: Cartesian3; + /** + * Creates an occluder from a bounding sphere and the camera position. + * @param occluderBoundingSphere - The bounding sphere surrounding the occluder. + * @param cameraPosition - The coordinate of the viewer/camera. + * @param [result] - The object onto which to store the result. + * @returns The occluder derived from an object's position and radius, as well as the camera position. + */ + static fromBoundingSphere(occluderBoundingSphere: BoundingSphere, cameraPosition: Cartesian3, result?: Occluder): Occluder; + /** + * Determines whether or not a point, the occludee, is hidden from view by the occluder. + * @example + * var cameraPosition = new Cesium.Cartesian3(0, 0, 0); + var littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25); + var occluder = new Cesium.Occluder(littleSphere, cameraPosition); + var point = new Cesium.Cartesian3(0, 0, -3); + occluder.isPointVisible(point); //returns true + * @param occludee - The point surrounding the occludee object. + * @returns true if the occludee is visible; otherwise false. + */ + isPointVisible(occludee: Cartesian3): boolean; + /** + * Determines whether or not a sphere, the occludee, is hidden from view by the occluder. + * @example + * var cameraPosition = new Cesium.Cartesian3(0, 0, 0); + var littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25); + var occluder = new Cesium.Occluder(littleSphere, cameraPosition); + var bigSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -3), 1); + occluder.isBoundingSphereVisible(bigSphere); //returns true + * @param occludee - The bounding sphere surrounding the occludee object. + * @returns true if the occludee is visible; otherwise false. + */ + isBoundingSphereVisible(occludee: BoundingSphere): boolean; + /** + * Determine to what extent an occludee is visible (not visible, partially visible, or fully visible). + * @example + * var sphere1 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1.5), 0.5); + var sphere2 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -2.5), 0.5); + var cameraPosition = new Cesium.Cartesian3(0, 0, 0); + var occluder = new Cesium.Occluder(sphere1, cameraPosition); + occluder.computeVisibility(sphere2); //returns Visibility.NONE + * @param occludeeBS - The bounding sphere of the occludee. + * @returns Visibility.NONE if the occludee is not visible, + Visibility.PARTIAL if the occludee is partially visible, or + Visibility.FULL if the occludee is fully visible. + */ + computeVisibility(occludeeBS: BoundingSphere): Visibility; + /** + * Computes a point that can be used as the occludee position to the visibility functions. + Use a radius of zero for the occludee radius. Typically, a user computes a bounding sphere around + an object that is used for visibility; however it is also possible to compute a point that if + seen/not seen would also indicate if an object is visible/not visible. This function is better + called for objects that do not move relative to the occluder and is large, such as a chunk of + terrain. You are better off not calling this and using the object's bounding sphere for objects + such as a satellite or ground vehicle. + * @example + * var cameraPosition = new Cesium.Cartesian3(0, 0, 0); + var occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -8), 2); + var occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition); + var positions = [new Cesium.Cartesian3(-0.25, 0, -5.3), new Cesium.Cartesian3(0.25, 0, -5.3)]; + var tileOccluderSphere = Cesium.BoundingSphere.fromPoints(positions); + var occludeePosition = tileOccluderSphere.center; + var occludeePt = Cesium.Occluder.computeOccludeePoint(occluderBoundingSphere, occludeePosition, positions); + * @param occluderBoundingSphere - The bounding sphere surrounding the occluder. + * @param occludeePosition - The point where the occludee (bounding sphere of radius 0) is located. + * @param positions - List of altitude points on the horizon near the surface of the occluder. + * @returns An object containing two attributes: occludeePoint and valid + which is a boolean value. + */ + static computeOccludeePoint(occluderBoundingSphere: BoundingSphere, occludeePosition: Cartesian3, positions: Cartesian3[]): any; + /** + * Computes a point that can be used as the occludee position to the visibility functions from a rectangle. + * @param rectangle - The rectangle used to create a bounding sphere. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid used to determine positions of the rectangle. + * @returns An object containing two attributes: occludeePoint and valid + which is a boolean value. + */ + static computeOccludeePointFromRectangle(rectangle: Rectangle, ellipsoid?: Ellipsoid): any; +} + +/** + * Provides geocoding via a {@link https://opencagedata.com/|OpenCage} server. + * @example + * // Configure a Viewer to use the OpenCage Geocoder +var viewer = new Cesium.Viewer('cesiumContainer', { + geocoder: new Cesium.OpenCageGeocoderService('https://api.opencagedata.com/geocode/v1/', '') +}); + * @param url - The endpoint to the OpenCage server. + * @param apiKey - The OpenCage API Key. + * @param [params] - An object with the following properties (See https://opencagedata.com/api#forward-opt): + * @param [params.abbrv] - When set to 1 we attempt to abbreviate and shorten the formatted string we return. + * @param [options.add_request] - When set to 1 the various request parameters are added to the response for ease of debugging. + * @param [options.bounds] - Provides the geocoder with a hint to the region that the query resides in. + * @param [options.countrycode] - Restricts the results to the specified country or countries (as defined by the ISO 3166-1 Alpha 2 standard). + * @param [options.jsonp] - Wraps the returned JSON with a function name. + * @param [options.language] - An IETF format language code. + * @param [options.limit] - The maximum number of results we should return. + * @param [options.min_confidence] - An integer from 1-10. Only results with at least this confidence will be returned. + * @param [options.no_annotations] - When set to 1 results will not contain annotations. + * @param [options.no_dedupe] - When set to 1 results will not be deduplicated. + * @param [options.no_record] - When set to 1 the query contents are not logged. + * @param [options.pretty] - When set to 1 results are 'pretty' printed for easier reading. Useful for debugging. + * @param [options.proximity] - Provides the geocoder with a hint to bias results in favour of those closer to the specified location (For example: 41.40139,2.12870). + */ +export class OpenCageGeocoderService { + constructor(url: Resource | string, apiKey: string, params?: { + abbrv?: number; + }); + /** + * The Resource used to access the OpenCage endpoint. + */ + readonly url: Resource; + /** + * Optional params passed to OpenCage in order to customize geocoding + */ + readonly params: any; + /** + * @param query - The query to be sent to the geocoder service + */ + geocode(query: string): Promise; +} + +/** + * Creates an instance of an OrientedBoundingBox. +An OrientedBoundingBox of some object is a closed and convex cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases. + * @example + * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale. +var center = new Cesium.Cartesian3(1.0, 0.0, 0.0); +var halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3()); + +var obb = new Cesium.OrientedBoundingBox(center, halfAxes); + * @param [center = Cartesian3.ZERO] - The center of the box. + * @param [halfAxes = Matrix3.ZERO] - The three orthogonal half-axes of the bounding box. + Equivalently, the transformation matrix, to rotate and scale a 0x0x0 + cube centered at the origin. + */ +export class OrientedBoundingBox { + constructor(center?: Cartesian3, halfAxes?: Matrix3); + /** + * The center of the box. + */ + center: Cartesian3; + /** + * The transformation matrix, to rotate the box to the right position. + */ + halfAxes: Matrix3; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: OrientedBoundingBox, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new OrientedBoundingBox instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: OrientedBoundingBox): OrientedBoundingBox; + /** + * Computes an instance of an OrientedBoundingBox of the given positions. + This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis). + Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf + * @example + * // Compute an object oriented bounding box enclosing two points. + var box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]); + * @param [positions] - List of {@link Cartesian3} points that the bounding box will enclose. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrientedBoundingBox instance if one was not provided. + */ + static fromPoints(positions?: Cartesian3[], result?: OrientedBoundingBox): OrientedBoundingBox; + /** + * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}. + There are no guarantees about the orientation of the bounding box. + * @param rectangle - The cartographic rectangle on the surface of the ellipsoid. + * @param [minimumHeight = 0.0] - The minimum height (elevation) within the tile. + * @param [maximumHeight = 0.0] - The maximum height (elevation) within the tile. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rectangle is defined. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrientedBoundingBox instance if none was provided. + */ + static fromRectangle(rectangle: Rectangle, minimumHeight?: number, maximumHeight?: number, ellipsoid?: Ellipsoid, result?: OrientedBoundingBox): OrientedBoundingBox; + /** + * Duplicates a OrientedBoundingBox instance. + * @param box - The bounding box to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined) + */ + static clone(box: OrientedBoundingBox, result?: OrientedBoundingBox): OrientedBoundingBox; + /** + * Determines which side of a plane the oriented bounding box is located. + * @param box - The oriented bounding box to test. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire box is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is + on the opposite side, and {@link Intersect.INTERSECTING} if the box + intersects the plane. + */ + static intersectPlane(box: OrientedBoundingBox, plane: Plane): Intersect; + /** + * Computes the estimated distance squared from the closest point on a bounding box to a point. + * @example + * // Sort bounding boxes from back to front + boxes.sort(function(a, b) { + return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC); + }); + * @param box - The box. + * @param cartesian - The point + * @returns The estimated distance squared from the bounding sphere to the point. + */ + static distanceSquaredTo(box: OrientedBoundingBox, cartesian: Cartesian3): number; + /** + * The distances calculated by the vector from the center of the bounding box to position projected onto direction. +
+ If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the + closest and farthest planes from position that intersect the bounding box. + * @param box - The bounding box to calculate the distance to. + * @param position - The position to calculate the distance from. + * @param direction - The direction from position. + * @param [result] - A Interval to store the nearest and farthest distances. + * @returns The nearest and farthest distances on the bounding box from position in direction. + */ + static computePlaneDistances(box: OrientedBoundingBox, position: Cartesian3, direction: Cartesian3, result?: Interval): Interval; + /** + * Determines whether or not a bounding box is hidden from view by the occluder. + * @param box - The bounding box surrounding the occludee object. + * @param occluder - The occluder. + * @returns true if the box is not visible; otherwise false. + */ + static isOccluded(box: OrientedBoundingBox, occluder: Occluder): boolean; + /** + * Determines which side of a plane the oriented bounding box is located. + * @param plane - The plane to test against. + * @returns {@link Intersect.INSIDE} if the entire box is on the side of the plane + the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is + on the opposite side, and {@link Intersect.INTERSECTING} if the box + intersects the plane. + */ + intersectPlane(plane: Plane): Intersect; + /** + * Computes the estimated distance squared from the closest point on a bounding box to a point. + * @example + * // Sort bounding boxes from back to front + boxes.sort(function(a, b) { + return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC); + }); + * @param cartesian - The point + * @returns The estimated distance squared from the bounding sphere to the point. + */ + distanceSquaredTo(cartesian: Cartesian3): number; + /** + * The distances calculated by the vector from the center of the bounding box to position projected onto direction. +
+ If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the + closest and farthest planes from position that intersect the bounding box. + * @param position - The position to calculate the distance from. + * @param direction - The direction from position. + * @param [result] - A Interval to store the nearest and farthest distances. + * @returns The nearest and farthest distances on the bounding box from position in direction. + */ + computePlaneDistances(position: Cartesian3, direction: Cartesian3, result?: Interval): Interval; + /** + * Determines whether or not a bounding box is hidden from view by the occluder. + * @param occluder - The occluder. + * @returns true if the sphere is not visible; otherwise false. + */ + isOccluded(occluder: Occluder): boolean; + /** + * Compares the provided OrientedBoundingBox componentwise and returns + true if they are equal, false otherwise. + * @param left - The first OrientedBoundingBox. + * @param right - The second OrientedBoundingBox. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left: OrientedBoundingBox, right: OrientedBoundingBox): boolean; + /** + * Duplicates this OrientedBoundingBox instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrientedBoundingBox instance if one was not provided. + */ + clone(result?: OrientedBoundingBox): OrientedBoundingBox; + /** + * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side OrientedBoundingBox. + * @returns true if they are equal, false otherwise. + */ + equals(right?: OrientedBoundingBox): boolean; +} + +/** + * The viewing frustum is defined by 6 planes. +Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components +define the unit vector normal to the plane, and the w component is the distance of the +plane from the origin/camera position. + * @example + * var maxRadii = ellipsoid.maximumRadius; + +var frustum = new Cesium.OrthographicFrustum(); +frustum.near = 0.01 * maxRadii; +frustum.far = 50.0 * maxRadii; + * @param [options] - An object with the following properties: + * @param [options.width] - The width of the frustum in meters. + * @param [options.aspectRatio] - The aspect ratio of the frustum's width to it's height. + * @param [options.near = 1.0] - The distance of the near plane. + * @param [options.far = 500000000.0] - The distance of the far plane. + */ +export class OrthographicFrustum { + constructor(options?: { + width?: number; + aspectRatio?: number; + near?: number; + far?: number; + }); + /** + * The horizontal width of the frustum in meters. + */ + width: number; + /** + * The aspect ratio of the frustum's width to it's height. + */ + aspectRatio: number; + /** + * The distance of the near plane. + */ + near: number; + /** + * The distance of the far plane. + */ + far: number; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: OrthographicFrustum, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new OrthographicFrustum instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: OrthographicFrustum): OrthographicFrustum; + /** + * Gets the orthographic projection matrix computed from the view frustum. + */ + readonly projectionMatrix: Matrix4; + /** + * Creates a culling volume for this frustum. + * @example + * // Check if a bounding volume intersects the frustum. + var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); + var intersect = cullingVolume.computeVisibility(boundingVolume); + * @param position - The eye position. + * @param direction - The view direction. + * @param up - The up direction. + * @returns A culling volume at the given position and orientation. + */ + computeCullingVolume(position: Cartesian3, direction: Cartesian3, up: Cartesian3): CullingVolume; + /** + * Returns the pixel's width and height in meters. + * @example + * // Example 1 + // Get the width and height of a pixel. + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2()); + * @param drawingBufferWidth - The width of the drawing buffer. + * @param drawingBufferHeight - The height of the drawing buffer. + * @param distance - The distance to the near plane in meters. + * @param pixelRatio - The scaling factor from pixel space to coordinate space. + * @param result - The object onto which to store the result. + * @returns The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. + */ + getPixelDimensions(drawingBufferWidth: number, drawingBufferHeight: number, distance: number, pixelRatio: number, result: Cartesian2): Cartesian2; + /** + * Returns a duplicate of a OrthographicFrustum instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrthographicFrustum instance if one was not provided. + */ + clone(result?: OrthographicFrustum): OrthographicFrustum; + /** + * Compares the provided OrthographicFrustum componentwise and returns + true if they are equal, false otherwise. + * @param [other] - The right hand side OrthographicFrustum. + * @returns true if they are equal, false otherwise. + */ + equals(other?: OrthographicFrustum): boolean; + /** + * Compares the provided OrthographicFrustum componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param other - The right hand side OrthographicFrustum. + * @param relativeEpsilon - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if this and other are within the provided epsilon, false otherwise. + */ + equalsEpsilon(other: OrthographicFrustum, relativeEpsilon: number, absoluteEpsilon?: number): boolean; +} + +/** + * The viewing frustum is defined by 6 planes. +Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components +define the unit vector normal to the plane, and the w component is the distance of the +plane from the origin/camera position. + * @example + * var maxRadii = ellipsoid.maximumRadius; + +var frustum = new Cesium.OrthographicOffCenterFrustum(); +frustum.right = maxRadii * Cesium.Math.PI; +frustum.left = -c.frustum.right; +frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth); +frustum.bottom = -c.frustum.top; +frustum.near = 0.01 * maxRadii; +frustum.far = 50.0 * maxRadii; + * @param [options] - An object with the following properties: + * @param [options.left] - The left clipping plane distance. + * @param [options.right] - The right clipping plane distance. + * @param [options.top] - The top clipping plane distance. + * @param [options.bottom] - The bottom clipping plane distance. + * @param [options.near = 1.0] - The near clipping plane distance. + * @param [options.far = 500000000.0] - The far clipping plane distance. + */ +export class OrthographicOffCenterFrustum { + constructor(options?: { + left?: number; + right?: number; + top?: number; + bottom?: number; + near?: number; + far?: number; + }); + /** + * The left clipping plane. + */ + left: number; + /** + * The right clipping plane. + */ + right: number; + /** + * The top clipping plane. + */ + top: number; + /** + * The bottom clipping plane. + */ + bottom: number; + /** + * The distance of the near plane. + */ + near: number; + /** + * The distance of the far plane. + */ + far: number; + /** + * Gets the orthographic projection matrix computed from the view frustum. + */ + readonly projectionMatrix: Matrix4; + /** + * Creates a culling volume for this frustum. + * @example + * // Check if a bounding volume intersects the frustum. + var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); + var intersect = cullingVolume.computeVisibility(boundingVolume); + * @param position - The eye position. + * @param direction - The view direction. + * @param up - The up direction. + * @returns A culling volume at the given position and orientation. + */ + computeCullingVolume(position: Cartesian3, direction: Cartesian3, up: Cartesian3): CullingVolume; + /** + * Returns the pixel's width and height in meters. + * @example + * // Example 1 + // Get the width and height of a pixel. + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2()); + * @param drawingBufferWidth - The width of the drawing buffer. + * @param drawingBufferHeight - The height of the drawing buffer. + * @param distance - The distance to the near plane in meters. + * @param pixelRatio - The scaling factor from pixel space to coordinate space. + * @param result - The object onto which to store the result. + * @returns The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. + */ + getPixelDimensions(drawingBufferWidth: number, drawingBufferHeight: number, distance: number, pixelRatio: number, result: Cartesian2): Cartesian2; + /** + * Returns a duplicate of a OrthographicOffCenterFrustum instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided. + */ + clone(result?: OrthographicOffCenterFrustum): OrthographicOffCenterFrustum; + /** + * Compares the provided OrthographicOffCenterFrustum componentwise and returns + true if they are equal, false otherwise. + * @param [other] - The right hand side OrthographicOffCenterFrustum. + * @returns true if they are equal, false otherwise. + */ + equals(other?: OrthographicOffCenterFrustum): boolean; + /** + * Compares the provided OrthographicOffCenterFrustum componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param other - The right hand side OrthographicOffCenterFrustum. + * @param relativeEpsilon - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if this and other are within the provided epsilon, false otherwise. + */ + equalsEpsilon(other: OrthographicOffCenterFrustum, relativeEpsilon: number, absoluteEpsilon?: number): boolean; +} + +export namespace Packable { + /** + * The number of elements used to pack the object into an array. + */ + var packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + */ + function pack(value: any, array: number[], startingIndex?: number): void; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Object instance if one was not provided. + */ + function unpack(array: number[], startingIndex?: number, result?: any): any; +} + +/** + * Static interface for types which can store their values as packed +elements in an array. These methods and properties are expected to be +defined on a constructor function. + */ +export interface Packable { +} + +/** + * Static interface for {@link Packable} types which are interpolated in a +different representation than their packed value. These methods and +properties are expected to be defined on a constructor function. + */ +export namespace PackableForInterpolation { + /** + * The number of elements used to store the object into an array in its interpolatable form. + */ + var packedInterpolationLength: number; + /** + * Converts a packed array into a form suitable for interpolation. + * @param packedArray - The packed array. + * @param [startingIndex = 0] - The index of the first element to be converted. + * @param [lastIndex = packedArray.length] - The index of the last element to be converted. + * @param [result] - The object into which to store the result. + */ + function convertPackedArrayForInterpolation(packedArray: number[], startingIndex?: number, lastIndex?: number, result?: number[]): void; + /** + * Retrieves an instance from a packed array converted with {@link PackableForInterpolation.convertPackedArrayForInterpolation}. + * @param array - The array previously packed for interpolation. + * @param sourceArray - The original packed array. + * @param [startingIndex = 0] - The startingIndex used to convert the array. + * @param [lastIndex = packedArray.length] - The lastIndex used to convert the array. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Object instance if one was not provided. + */ + function unpackInterpolationResult(array: number[], sourceArray: number[], startingIndex?: number, lastIndex?: number, result?: any): any; +} + +/** + * Provides geocoding via a {@link https://pelias.io/|Pelias} server. + * @example + * // Configure a Viewer to use the Pelias server hosted by https://geocode.earth/ +var viewer = new Cesium.Viewer('cesiumContainer', { + geocoder: new Cesium.PeliasGeocoderService(new Cesium.Resource({ + url: 'https://api.geocode.earth/v1/', + queryParameters: { + api_key: '' + } + })) +}); + * @param url - The endpoint to the Pelias server. + */ +export class PeliasGeocoderService { + constructor(url: Resource | string); + /** + * The Resource used to access the Pelias endpoint. + */ + readonly url: Resource; + /** + * @param query - The query to be sent to the geocoder service + * @param [type = GeocodeType.SEARCH] - The type of geocode to perform. + */ + geocode(query: string, type?: GeocodeType): Promise; +} + +/** + * The viewing frustum is defined by 6 planes. +Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components +define the unit vector normal to the plane, and the w component is the distance of the +plane from the origin/camera position. + * @example + * var frustum = new Cesium.PerspectiveFrustum({ + fov : Cesium.Math.PI_OVER_THREE, + aspectRatio : canvas.clientWidth / canvas.clientHeight + near : 1.0, + far : 1000.0 +}); + * @param [options] - An object with the following properties: + * @param [options.fov] - The angle of the field of view (FOV), in radians. + * @param [options.aspectRatio] - The aspect ratio of the frustum's width to it's height. + * @param [options.near = 1.0] - The distance of the near plane. + * @param [options.far = 500000000.0] - The distance of the far plane. + * @param [options.xOffset = 0.0] - The offset in the x direction. + * @param [options.yOffset = 0.0] - The offset in the y direction. + */ +export class PerspectiveFrustum { + constructor(options?: { + fov?: number; + aspectRatio?: number; + near?: number; + far?: number; + xOffset?: number; + yOffset?: number; + }); + /** + * The angle of the field of view (FOV), in radians. This angle will be used + as the horizontal FOV if the width is greater than the height, otherwise + it will be the vertical FOV. + */ + fov: number; + /** + * The aspect ratio of the frustum's width to it's height. + */ + aspectRatio: number; + /** + * The distance of the near plane. + */ + near: number; + /** + * The distance of the far plane. + */ + far: number; + /** + * Offsets the frustum in the x direction. + */ + xOffset: number; + /** + * Offsets the frustum in the y direction. + */ + yOffset: number; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PerspectiveFrustum, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PerspectiveFrustum instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PerspectiveFrustum): PerspectiveFrustum; + /** + * Gets the perspective projection matrix computed from the view frustum. + */ + readonly projectionMatrix: Matrix4; + /** + * The perspective projection matrix computed from the view frustum with an infinite far plane. + */ + readonly infiniteProjectionMatrix: Matrix4; + /** + * Gets the angle of the vertical field of view, in radians. + */ + readonly fovy: number; + /** + * Creates a culling volume for this frustum. + * @example + * // Check if a bounding volume intersects the frustum. + var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); + var intersect = cullingVolume.computeVisibility(boundingVolume); + * @param position - The eye position. + * @param direction - The view direction. + * @param up - The up direction. + * @returns A culling volume at the given position and orientation. + */ + computeCullingVolume(position: Cartesian3, direction: Cartesian3, up: Cartesian3): CullingVolume; + /** + * Returns the pixel's width and height in meters. + * @example + * // Example 1 + // Get the width and height of a pixel. + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2()); + * @example + * // Example 2 + // Get the width and height of a pixel if the near plane was set to 'distance'. + // For example, get the size of a pixel of an image on a billboard. + var position = camera.position; + var direction = camera.direction; + var toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive + var toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector + var distance = Cesium.Cartesian3.magnitude(toCenterProj); + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2()); + * @param drawingBufferWidth - The width of the drawing buffer. + * @param drawingBufferHeight - The height of the drawing buffer. + * @param distance - The distance to the near plane in meters. + * @param pixelRatio - The scaling factor from pixel space to coordinate space. + * @param result - The object onto which to store the result. + * @returns The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. + */ + getPixelDimensions(drawingBufferWidth: number, drawingBufferHeight: number, distance: number, pixelRatio: number, result: Cartesian2): Cartesian2; + /** + * Returns a duplicate of a PerspectiveFrustum instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new PerspectiveFrustum instance if one was not provided. + */ + clone(result?: PerspectiveFrustum): PerspectiveFrustum; + /** + * Compares the provided PerspectiveFrustum componentwise and returns + true if they are equal, false otherwise. + * @param [other] - The right hand side PerspectiveFrustum. + * @returns true if they are equal, false otherwise. + */ + equals(other?: PerspectiveFrustum): boolean; + /** + * Compares the provided PerspectiveFrustum componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param other - The right hand side PerspectiveFrustum. + * @param relativeEpsilon - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if this and other are within the provided epsilon, false otherwise. + */ + equalsEpsilon(other: PerspectiveFrustum, relativeEpsilon: number, absoluteEpsilon?: number): boolean; +} + +/** + * The viewing frustum is defined by 6 planes. +Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components +define the unit vector normal to the plane, and the w component is the distance of the +plane from the origin/camera position. + * @example + * var frustum = new Cesium.PerspectiveOffCenterFrustum({ + left : -1.0, + right : 1.0, + top : 1.0, + bottom : -1.0, + near : 1.0, + far : 100.0 +}); + * @param [options] - An object with the following properties: + * @param [options.left] - The left clipping plane distance. + * @param [options.right] - The right clipping plane distance. + * @param [options.top] - The top clipping plane distance. + * @param [options.bottom] - The bottom clipping plane distance. + * @param [options.near = 1.0] - The near clipping plane distance. + * @param [options.far = 500000000.0] - The far clipping plane distance. + */ +export class PerspectiveOffCenterFrustum { + constructor(options?: { + left?: number; + right?: number; + top?: number; + bottom?: number; + near?: number; + far?: number; + }); + /** + * Defines the left clipping plane. + */ + left: number; + /** + * Defines the right clipping plane. + */ + right: number; + /** + * Defines the top clipping plane. + */ + top: number; + /** + * Defines the bottom clipping plane. + */ + bottom: number; + /** + * The distance of the near plane. + */ + near: number; + /** + * The distance of the far plane. + */ + far: number; + /** + * Gets the perspective projection matrix computed from the view frustum. + */ + readonly projectionMatrix: Matrix4; + /** + * Gets the perspective projection matrix computed from the view frustum with an infinite far plane. + */ + readonly infiniteProjectionMatrix: Matrix4; + /** + * Creates a culling volume for this frustum. + * @example + * // Check if a bounding volume intersects the frustum. + var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); + var intersect = cullingVolume.computeVisibility(boundingVolume); + * @param position - The eye position. + * @param direction - The view direction. + * @param up - The up direction. + * @returns A culling volume at the given position and orientation. + */ + computeCullingVolume(position: Cartesian3, direction: Cartesian3, up: Cartesian3): CullingVolume; + /** + * Returns the pixel's width and height in meters. + * @example + * // Example 1 + // Get the width and height of a pixel. + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2()); + * @example + * // Example 2 + // Get the width and height of a pixel if the near plane was set to 'distance'. + // For example, get the size of a pixel of an image on a billboard. + var position = camera.position; + var direction = camera.direction; + var toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive + var toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector + var distance = Cesium.Cartesian3.magnitude(toCenterProj); + var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2()); + * @param drawingBufferWidth - The width of the drawing buffer. + * @param drawingBufferHeight - The height of the drawing buffer. + * @param distance - The distance to the near plane in meters. + * @param pixelRatio - The scaling factor from pixel space to coordinate space. + * @param result - The object onto which to store the result. + * @returns The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. + */ + getPixelDimensions(drawingBufferWidth: number, drawingBufferHeight: number, distance: number, pixelRatio: number, result: Cartesian2): Cartesian2; + /** + * Returns a duplicate of a PerspectiveOffCenterFrustum instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new PerspectiveFrustum instance if one was not provided. + */ + clone(result?: PerspectiveOffCenterFrustum): PerspectiveOffCenterFrustum; + /** + * Compares the provided PerspectiveOffCenterFrustum componentwise and returns + true if they are equal, false otherwise. + * @param [other] - The right hand side PerspectiveOffCenterFrustum. + * @returns true if they are equal, false otherwise. + */ + equals(other?: PerspectiveOffCenterFrustum): boolean; + /** + * Compares the provided PerspectiveOffCenterFrustum componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param other - The right hand side PerspectiveOffCenterFrustum. + * @param relativeEpsilon - The relative epsilon tolerance to use for equality testing. + * @param [absoluteEpsilon = relativeEpsilon] - The absolute epsilon tolerance to use for equality testing. + * @returns true if this and other are within the provided epsilon, false otherwise. + */ + equalsEpsilon(other: PerspectiveOffCenterFrustum, relativeEpsilon: number, absoluteEpsilon?: number): boolean; +} + +/** + * A utility class for generating custom map pins as canvas elements. +

+
+
+Example pins generated using both the maki icon set, which ships with Cesium, and single character text. +
+ */ +export class PinBuilder { + constructor(); + /** + * Creates an empty pin of the specified color and size. + * @param color - The color of the pin. + * @param size - The size of the pin, in pixels. + * @returns The canvas element that represents the generated pin. + */ + fromColor(color: Color, size: number): HTMLCanvasElement; + /** + * Creates a pin with the specified icon, color, and size. + * @param url - The url of the image to be stamped onto the pin. + * @param color - The color of the pin. + * @param size - The size of the pin, in pixels. + * @returns The canvas element or a Promise to the canvas element that represents the generated pin. + */ + fromUrl(url: Resource | string, color: Color, size: number): HTMLCanvasElement | Promise; + /** + * Creates a pin with the specified {@link https://www.mapbox.com/maki/|maki} icon identifier, color, and size. + * @param id - The id of the maki icon to be stamped onto the pin. + * @param color - The color of the pin. + * @param size - The size of the pin, in pixels. + * @returns The canvas element or a Promise to the canvas element that represents the generated pin. + */ + fromMakiIconId(id: string, color: Color, size: number): HTMLCanvasElement | Promise; + /** + * Creates a pin with the specified text, color, and size. The text will be sized to be as large as possible + while still being contained completely within the pin. + * @param text - The text to be stamped onto the pin. + * @param color - The color of the pin. + * @param size - The size of the pin, in pixels. + * @returns The canvas element that represents the generated pin. + */ + fromText(text: string, color: Color, size: number): HTMLCanvasElement; +} + +/** + * The format of a pixel, i.e., the number of components it has and what they represent. + */ +export enum PixelFormat { + /** + * A pixel format containing a depth value. + */ + DEPTH_COMPONENT = WebGLConstants.DEPTH_COMPONENT, + /** + * A pixel format containing a depth and stencil value, most often used with {@link PixelDatatype.UNSIGNED_INT_24_8}. + */ + DEPTH_STENCIL = WebGLConstants.DEPTH_STENCIL, + /** + * A pixel format containing an alpha channel. + */ + ALPHA = WebGLConstants.ALPHA, + /** + * A pixel format containing red, green, and blue channels. + */ + RGB = WebGLConstants.RGB, + /** + * A pixel format containing red, green, blue, and alpha channels. + */ + RGBA = WebGLConstants.RGBA, + /** + * A pixel format containing a luminance (intensity) channel. + */ + LUMINANCE = WebGLConstants.LUMINANCE, + /** + * A pixel format containing luminance (intensity) and alpha channels. + */ + LUMINANCE_ALPHA = WebGLConstants.LUMINANCE_ALPHA, + /** + * A pixel format containing red, green, and blue channels that is DXT1 compressed. + */ + RGB_DXT1 = WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT, + /** + * A pixel format containing red, green, blue, and alpha channels that is DXT1 compressed. + */ + RGBA_DXT1 = WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT, + /** + * A pixel format containing red, green, blue, and alpha channels that is DXT3 compressed. + */ + RGBA_DXT3 = WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT, + /** + * A pixel format containing red, green, blue, and alpha channels that is DXT5 compressed. + */ + RGBA_DXT5 = WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT, + /** + * A pixel format containing red, green, and blue channels that is PVR 4bpp compressed. + */ + RGB_PVRTC_4BPPV1 = WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, + /** + * A pixel format containing red, green, and blue channels that is PVR 2bpp compressed. + */ + RGB_PVRTC_2BPPV1 = WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, + /** + * A pixel format containing red, green, blue, and alpha channels that is PVR 4bpp compressed. + */ + RGBA_PVRTC_4BPPV1 = WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, + /** + * A pixel format containing red, green, blue, and alpha channels that is PVR 2bpp compressed. + */ + RGBA_PVRTC_2BPPV1 = WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, + /** + * A pixel format containing red, green, and blue channels that is ETC1 compressed. + */ + RGB_ETC1 = WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL +} + +/** + * A plane in Hessian Normal Form defined by +
+ax + by + cz + d = 0
+
+where (a, b, c) is the plane's normal, d is the signed +distance to the plane, and (x, y, z) is any point on +the plane. + * @example + * // The plane x=0 +var plane = new Cesium.Plane(Cesium.Cartesian3.UNIT_X, 0.0); + * @param normal - The plane's normal (normalized). + * @param distance - The shortest distance from the origin to the plane. The sign of +distance determines which side of the plane the origin +is on. If distance is positive, the origin is in the half-space +in the direction of the normal; if negative, the origin is in the half-space +opposite to the normal; if zero, the plane passes through the origin. + */ +export class Plane { + constructor(normal: Cartesian3, distance: number); + /** + * The plane's normal. + */ + normal: Cartesian3; + /** + * The shortest distance from the origin to the plane. The sign of + distance determines which side of the plane the origin + is on. If distance is positive, the origin is in the half-space + in the direction of the normal; if negative, the origin is in the half-space + opposite to the normal; if zero, the plane passes through the origin. + */ + distance: number; + /** + * Creates a plane from a normal and a point on the plane. + * @example + * var point = Cesium.Cartesian3.fromDegrees(-72.0, 40.0); + var normal = ellipsoid.geodeticSurfaceNormal(point); + var tangentPlane = Cesium.Plane.fromPointNormal(point, normal); + * @param point - The point on the plane. + * @param normal - The plane's normal (normalized). + * @param [result] - The object onto which to store the result. + * @returns A new plane instance or the modified result parameter. + */ + static fromPointNormal(point: Cartesian3, normal: Cartesian3, result?: Plane): Plane; + /** + * Creates a plane from the general equation + * @param coefficients - The plane's normal (normalized). + * @param [result] - The object onto which to store the result. + * @returns A new plane instance or the modified result parameter. + */ + static fromCartesian4(coefficients: Cartesian4, result?: Plane): Plane; + /** + * Computes the signed shortest distance of a point to a plane. + The sign of the distance determines which side of the plane the point + is on. If the distance is positive, the point is in the half-space + in the direction of the normal; if negative, the point is in the half-space + opposite to the normal; if zero, the plane passes through the point. + * @param plane - The plane. + * @param point - The point. + * @returns The signed shortest distance of the point to the plane. + */ + static getPointDistance(plane: Plane, point: Cartesian3): number; + /** + * Projects a point onto the plane. + * @param plane - The plane to project the point onto + * @param point - The point to project onto the plane + * @param [result] - The result point. If undefined, a new Cartesian3 will be created. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. + */ + static projectPointOntoPlane(plane: Plane, point: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transforms the plane by the given transformation matrix. + * @param plane - The plane. + * @param transform - The transformation matrix. + * @param [result] - The object into which to store the result. + * @returns The plane transformed by the given transformation matrix. + */ + static transform(plane: Plane, transform: Matrix4, result?: Plane): Plane; + /** + * Duplicates a Plane instance. + * @param plane - The plane to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Plane instance if one was not provided. + */ + static clone(plane: Plane, result?: Plane): Plane; + /** + * Compares the provided Planes by normal and distance and returns + true if they are equal, false otherwise. + * @param left - The first plane. + * @param right - The second plane. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left: Plane, right: Plane): boolean; + /** + * A constant initialized to the XY plane passing through the origin, with normal in positive Z. + */ + static readonly ORIGIN_XY_PLANE: Plane; + /** + * A constant initialized to the YZ plane passing through the origin, with normal in positive X. + */ + static readonly ORIGIN_YZ_PLANE: Plane; + /** + * A constant initialized to the ZX plane passing through the origin, with normal in positive Y. + */ + static readonly ORIGIN_ZX_PLANE: Plane; +} + +/** + * Describes geometry representing a plane centered at the origin, with a unit width and length. + * @example + * var planeGeometry = new Cesium.PlaneGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY +}); + * @param [options] - Object with the following properties: + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class PlaneGeometry { + constructor(options?: { + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PlaneGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PlaneGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PlaneGeometry): PlaneGeometry; + /** + * Computes the geometric representation of a plane, including its vertices, indices, and a bounding sphere. + * @param planeGeometry - A description of the plane. + * @returns The computed vertices and indices. + */ + static createGeometry(planeGeometry: PlaneGeometry): Geometry | undefined; +} + +/** + * Describes geometry representing the outline of a plane centered at the origin, with a unit width and length. + */ +export class PlaneOutlineGeometry { + constructor(); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @returns The array that was packed into + */ + static pack(value: PlaneOutlineGeometry, array: number[]): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PlaneOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PlaneOutlineGeometry): PlaneOutlineGeometry; + /** + * Computes the geometric representation of an outline of a plane, including its vertices, indices, and a bounding sphere. + * @returns The computed vertices and indices. + */ + static createGeometry(): Geometry | undefined; +} + +/** + * Determines if a point is inside a triangle. + * @example + * // Returns true +var p = new Cesium.Cartesian2(0.25, 0.25); +var b = Cesium.pointInsideTriangle(p, + new Cesium.Cartesian2(0.0, 0.0), + new Cesium.Cartesian2(1.0, 0.0), + new Cesium.Cartesian2(0.0, 1.0)); + * @param point - The point to test. + * @param p0 - The first point of the triangle. + * @param p1 - The second point of the triangle. + * @param p2 - The third point of the triangle. + * @returns true if the point is inside the triangle; otherwise, false. + */ +export function pointInsideTriangle(point: Cartesian2 | Cartesian3, p0: Cartesian2 | Cartesian3, p1: Cartesian2 | Cartesian3, p2: Cartesian2 | Cartesian3): boolean; + +/** + * A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * // 1. create a polygon from points +var polygon = new Cesium.PolygonGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + ) +}); +var geometry = Cesium.PolygonGeometry.createGeometry(polygon); + +// 2. create a nested polygon with holes +var polygonWithHole = new Cesium.PolygonGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -109.0, 30.0, + -95.0, 30.0, + -95.0, 40.0, + -109.0, 40.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -107.0, 31.0, + -107.0, 39.0, + -97.0, 39.0, + -97.0, 31.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -105.0, 33.0, + -99.0, 33.0, + -99.0, 37.0, + -105.0, 37.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -103.0, 34.0, + -101.0, 34.0, + -101.0, 36.0, + -103.0, 36.0 + ]) + )] + )] + )] + ) +}); +var geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole); + +// 3. create extruded polygon +var extrudedPolygon = new Cesium.PolygonGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + ), + extrudedHeight: 300000 +}); +var geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon); + * @param options - Object with the following properties: + * @param options.polygonHierarchy - A polygon hierarchy that can include holes. + * @param [options.height = 0.0] - The distance in meters between the polygon and the ellipsoid surface. + * @param [options.extrudedHeight] - The distance in meters between the polygon's extruded face and the ellipsoid surface. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.perPositionHeight = false] - Use the height of options.positions for each position instead of using options.height to determine the height. + * @param [options.closeTop = true] - When false, leaves off the top of an extruded polygon open. + * @param [options.closeBottom = true] - When false, leaves off the bottom of an extruded polygon open. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + */ +export class PolygonGeometry { + constructor(options: { + polygonHierarchy: PolygonHierarchy; + height?: number; + extrudedHeight?: number; + vertexFormat?: VertexFormat; + stRotation?: number; + ellipsoid?: Ellipsoid; + granularity?: number; + perPositionHeight?: boolean; + closeTop?: boolean; + closeBottom?: boolean; + arcType?: ArcType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * A description of a polygon from an array of positions. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * // create a polygon from points + var polygon = Cesium.PolygonGeometry.fromPositions({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + }); + var geometry = Cesium.PolygonGeometry.createGeometry(polygon); + * @param options - Object with the following properties: + * @param options.positions - An array of positions that defined the corner points of the polygon. + * @param [options.height = 0.0] - The height of the polygon. + * @param [options.extrudedHeight] - The height of the polygon extrusion. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.perPositionHeight = false] - Use the height of options.positions for each position instead of using options.height to determine the height. + * @param [options.closeTop = true] - When false, leaves off the top of an extruded polygon open. + * @param [options.closeBottom = true] - When false, leaves off the bottom of an extruded polygon open. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + */ + static fromPositions(options: { + positions: Cartesian3[]; + height?: number; + extrudedHeight?: number; + vertexFormat?: VertexFormat; + stRotation?: number; + ellipsoid?: Ellipsoid; + granularity?: number; + perPositionHeight?: boolean; + closeTop?: boolean; + closeBottom?: boolean; + arcType?: ArcType; + }): PolygonGeometry; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolygonGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + */ + static unpack(array: number[], startingIndex?: number, result?: PolygonGeometry): void; + /** + * Returns the bounding rectangle given the provided options + * @param options - Object with the following properties: + * @param options.polygonHierarchy - A polygon hierarchy that can include holes. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions sampled. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [result] - An object in which to store the result. + * @returns The result rectangle + */ + static computeRectangle(options: { + polygonHierarchy: PolygonHierarchy; + granularity?: number; + arcType?: ArcType; + ellipsoid?: Ellipsoid; + }, result?: Rectangle): Rectangle; + /** + * Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere. + * @param polygonGeometry - A description of the polygon. + * @returns The computed vertices and indices. + */ + static createGeometry(polygonGeometry: PolygonGeometry): Geometry | undefined; +} + +/** + * An hierarchy of linear rings which define a polygon and its holes. +The holes themselves may also have holes which nest inner polygons. + * @param [positions] - A linear ring defining the outer boundary of the polygon or hole. + * @param [holes] - An array of polygon hierarchies defining holes in the polygon. + */ +export class PolygonHierarchy { + constructor(positions?: Cartesian3[], holes?: PolygonHierarchy[]); + /** + * A linear ring defining the outer boundary of the polygon or hole. + */ + positions: Cartesian3[]; + /** + * An array of polygon hierarchies defining holes in the polygon. + */ + holes: PolygonHierarchy[]; +} + +/** + * A description of the outline of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. + * @example + * // 1. create a polygon outline from points +var polygon = new Cesium.PolygonOutlineGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + ) +}); +var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon); + +// 2. create a nested polygon with holes outline +var polygonWithHole = new Cesium.PolygonOutlineGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -109.0, 30.0, + -95.0, 30.0, + -95.0, 40.0, + -109.0, 40.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -107.0, 31.0, + -107.0, 39.0, + -97.0, 39.0, + -97.0, 31.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -105.0, 33.0, + -99.0, 33.0, + -99.0, 37.0, + -105.0, 37.0 + ]), + [new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -103.0, 34.0, + -101.0, 34.0, + -101.0, 36.0, + -103.0, 36.0 + ]) + )] + )] + )] + ) +}); +var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygonWithHole); + +// 3. create extruded polygon outline +var extrudedPolygon = new Cesium.PolygonOutlineGeometry({ + polygonHierarchy : new Cesium.PolygonHierarchy( + Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + ), + extrudedHeight: 300000 +}); +var geometry = Cesium.PolygonOutlineGeometry.createGeometry(extrudedPolygon); + * @param options - Object with the following properties: + * @param options.polygonHierarchy - A polygon hierarchy that can include holes. + * @param [options.height = 0.0] - The distance in meters between the polygon and the ellipsoid surface. + * @param [options.extrudedHeight] - The distance in meters between the polygon's extruded face and the ellipsoid surface. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.perPositionHeight = false] - Use the height of options.positions for each position instead of using options.height to determine the height. + * @param [options.arcType = ArcType.GEODESIC] - The type of path the outline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. + */ +export class PolygonOutlineGeometry { + constructor(options: { + polygonHierarchy: PolygonHierarchy; + height?: number; + extrudedHeight?: number; + vertexFormat?: VertexFormat; + ellipsoid?: Ellipsoid; + granularity?: number; + perPositionHeight?: boolean; + arcType?: ArcType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolygonOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PolygonOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PolygonOutlineGeometry): PolygonOutlineGeometry; + /** + * A description of a polygon outline from an array of positions. + * @example + * // create a polygon from points + var polygon = Cesium.PolygonOutlineGeometry.fromPositions({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0, + -75.0, 30.0, + -70.0, 30.0, + -68.0, 40.0 + ]) + }); + var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon); + * @param options - Object with the following properties: + * @param options.positions - An array of positions that defined the corner points of the polygon. + * @param [options.height = 0.0] - The height of the polygon. + * @param [options.extrudedHeight] - The height of the polygon extrusion. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.perPositionHeight = false] - Use the height of options.positions for each position instead of using options.height to determine the height. + * @param [options.arcType = ArcType.GEODESIC] - The type of path the outline must follow. Valid options are {@link LinkType.GEODESIC} and {@link ArcType.RHUMB}. + */ + static fromPositions(options: { + positions: Cartesian3[]; + height?: number; + extrudedHeight?: number; + ellipsoid?: Ellipsoid; + granularity?: number; + perPositionHeight?: boolean; + arcType?: ArcType; + }): PolygonOutlineGeometry; + /** + * Computes the geometric representation of a polygon outline, including its vertices, indices, and a bounding sphere. + * @param polygonGeometry - A description of the polygon outline. + * @returns The computed vertices and indices. + */ + static createGeometry(polygonGeometry: PolygonOutlineGeometry): Geometry | undefined; +} + +/** + * A description of a polyline modeled as a line strip; the first two positions define a line segment, +and each additional position defines a line segment from the previous position. The polyline is capable of +displaying with a material. + * @example + * // A polyline with two connected line segments +var polyline = new Cesium.PolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 5.0, 0.0, + 5.0, 5.0 + ]), + width : 10.0 +}); +var geometry = Cesium.PolylineGeometry.createGeometry(polyline); + * @param options - Object with the following properties: + * @param options.positions - An array of {@link Cartesian3} defining the positions in the polyline as a line strip. + * @param [options.width = 1.0] - The width in pixels. + * @param [options.colors] - An Array of {@link Color} defining the per vertex or per segment colors. + * @param [options.colorsPerVertex = false] - A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polyline segments must follow. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + */ +export class PolylineGeometry { + constructor(options: { + positions: Cartesian3[]; + width?: number; + colors?: Color[]; + colorsPerVertex?: boolean; + arcType?: ArcType; + granularity?: number; + vertexFormat?: VertexFormat; + ellipsoid?: Ellipsoid; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolylineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PolylineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PolylineGeometry): PolylineGeometry; + /** + * Computes the geometric representation of a polyline, including its vertices, indices, and a bounding sphere. + * @param polylineGeometry - A description of the polyline. + * @returns The computed vertices and indices. + */ + static createGeometry(polylineGeometry: PolylineGeometry): Geometry | undefined; +} + +/** + * A description of a polyline with a volume (a 2D shape extruded along a polyline). + * @example + * function computeCircle(radius) { + var positions = []; + for (var i = 0; i < 360; i++) { + var radians = Cesium.Math.toRadians(i); + positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians))); + } + return positions; +} + +var volume = new Cesium.PolylineVolumeGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_ONLY, + polylinePositions : Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0 + ]), + shapePositions : computeCircle(100000.0) +}); + * @param options - Object with the following properties: + * @param options.polylinePositions - An array of {@link Cartesian3} positions that define the center of the polyline volume. + * @param options.shapePositions - An array of {@link Cartesian2} positions that define the shape to be extruded along the polyline + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.cornerType = CornerType.ROUNDED] - Determines the style of the corners. + */ +export class PolylineVolumeGeometry { + constructor(options: { + polylinePositions: Cartesian3[]; + shapePositions: Cartesian2[]; + ellipsoid?: Ellipsoid; + granularity?: number; + vertexFormat?: VertexFormat; + cornerType?: CornerType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolylineVolumeGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PolylineVolumeGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PolylineVolumeGeometry): PolylineVolumeGeometry; + /** + * Computes the geometric representation of a polyline with a volume, including its vertices, indices, and a bounding sphere. + * @param polylineVolumeGeometry - A description of the polyline volume. + * @returns The computed vertices and indices. + */ + static createGeometry(polylineVolumeGeometry: PolylineVolumeGeometry): Geometry | undefined; +} + +/** + * A description of a polyline with a volume (a 2D shape extruded along a polyline). + * @example + * function computeCircle(radius) { + var positions = []; + for (var i = 0; i < 360; i++) { + var radians = Cesium.Math.toRadians(i); + positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians))); + } + return positions; +} + +var volumeOutline = new Cesium.PolylineVolumeOutlineGeometry({ + polylinePositions : Cesium.Cartesian3.fromDegreesArray([ + -72.0, 40.0, + -70.0, 35.0 + ]), + shapePositions : computeCircle(100000.0) +}); + * @param options - Object with the following properties: + * @param options.polylinePositions - An array of positions that define the center of the polyline volume. + * @param options.shapePositions - An array of positions that define the shape to be extruded along the polyline + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.cornerType = CornerType.ROUNDED] - Determines the style of the corners. + */ +export class PolylineVolumeOutlineGeometry { + constructor(options: { + polylinePositions: Cartesian3[]; + shapePositions: Cartesian2[]; + ellipsoid?: Ellipsoid; + granularity?: number; + cornerType?: CornerType; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: PolylineVolumeOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new PolylineVolumeOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: PolylineVolumeOutlineGeometry): PolylineVolumeOutlineGeometry; + /** + * Computes the geometric representation of the outline of a polyline with a volume, including its vertices, indices, and a bounding sphere. + * @param polylineVolumeOutlineGeometry - A description of the polyline volume outline. + * @returns The computed vertices and indices. + */ + static createGeometry(polylineVolumeOutlineGeometry: PolylineVolumeOutlineGeometry): Geometry | undefined; +} + +/** + * The type of a geometric primitive, i.e., points, lines, and triangles. + */ +export enum PrimitiveType { + /** + * Points primitive where each vertex (or index) is a separate point. + */ + POINTS = WebGLConstants.POINTS, + /** + * Lines primitive where each two vertices (or indices) is a line segment. Line segments are not necessarily connected. + */ + LINES = WebGLConstants.LINES, + /** + * Line loop primitive where each vertex (or index) after the first connects a line to + the previous vertex, and the last vertex implicitly connects to the first. + */ + LINE_LOOP = WebGLConstants.LINE_LOOP, + /** + * Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex. + */ + LINE_STRIP = WebGLConstants.LINE_STRIP, + /** + * Triangles primitive where each three vertices (or indices) is a triangle. Triangles do not necessarily share edges. + */ + TRIANGLES = WebGLConstants.TRIANGLES, + /** + * Triangle strip primitive where each vertex (or index) after the first two connect to + the previous two vertices forming a triangle. For example, this can be used to model a wall. + */ + TRIANGLE_STRIP = WebGLConstants.TRIANGLE_STRIP, + /** + * Triangle fan primitive where each vertex (or index) after the first two connect to + the previous vertex and the first vertex forming a triangle. For example, this can be used + to model a cone or circle. + */ + TRIANGLE_FAN = WebGLConstants.TRIANGLE_FAN +} + +/** + * Base class for proxying requested made by {@link Resource}. + */ +export class Proxy { + constructor(); + /** + * Get the final URL to use to request a given resource. + * @param resource - The resource to request. + * @returns proxied resource + */ + getURL(resource: string): string; +} + +/** + * Defines functions for 2nd order polynomial functions of one variable with only real coefficients. + */ +export namespace QuadraticRealPolynomial { + /** + * Provides the discriminant of the quadratic equation from the supplied coefficients. + * @param a - The coefficient of the 2nd order monomial. + * @param b - The coefficient of the 1st order monomial. + * @param c - The coefficient of the 0th order monomial. + * @returns The value of the discriminant. + */ + function computeDiscriminant(a: number, b: number, c: number): number; + /** + * Provides the real valued roots of the quadratic polynomial with the provided coefficients. + * @param a - The coefficient of the 2nd order monomial. + * @param b - The coefficient of the 1st order monomial. + * @param c - The coefficient of the 0th order monomial. + * @returns The real valued roots. + */ + function computeRealRoots(a: number, b: number, c: number): number[]; +} + +/** + * Terrain data for a single tile where the terrain data is represented as a quantized mesh. A quantized +mesh consists of three vertex attributes, longitude, latitude, and height. All attributes are expressed +as 16-bit values in the range 0 to 32767. Longitude and latitude are zero at the southwest corner +of the tile and 32767 at the northeast corner. Height is zero at the minimum height in the tile +and 32767 at the maximum height in the tile. + * @example + * var data = new Cesium.QuantizedMeshTerrainData({ + minimumHeight : -100, + maximumHeight : 2101, + quantizedVertices : new Uint16Array([// order is SW NW SE NE + // longitude + 0, 0, 32767, 32767, + // latitude + 0, 32767, 0, 32767, + // heights + 16384, 0, 32767, 16384]), + indices : new Uint16Array([0, 3, 1, + 0, 2, 3]), + boundingSphere : new Cesium.BoundingSphere(new Cesium.Cartesian3(1.0, 2.0, 3.0), 10000), + orientedBoundingBox : new Cesium.OrientedBoundingBox(new Cesium.Cartesian3(1.0, 2.0, 3.0), Cesium.Matrix3.fromRotationX(Cesium.Math.PI, new Cesium.Matrix3())), + horizonOcclusionPoint : new Cesium.Cartesian3(3.0, 2.0, 1.0), + westIndices : [0, 1], + southIndices : [0, 1], + eastIndices : [2, 3], + northIndices : [1, 3], + westSkirtHeight : 1.0, + southSkirtHeight : 1.0, + eastSkirtHeight : 1.0, + northSkirtHeight : 1.0 +}); + * @param options - Object with the following properties: + * @param options.quantizedVertices - The buffer containing the quantized mesh. + * @param options.indices - The indices specifying how the quantized vertices are linked + together into triangles. Each three indices specifies one triangle. + * @param options.minimumHeight - The minimum terrain height within the tile, in meters above the ellipsoid. + * @param options.maximumHeight - The maximum terrain height within the tile, in meters above the ellipsoid. + * @param options.boundingSphere - A sphere bounding all of the vertices in the mesh. + * @param [options.orientedBoundingBox] - An OrientedBoundingBox bounding all of the vertices in the mesh. + * @param options.horizonOcclusionPoint - The horizon occlusion point of the mesh. If this point + is below the horizon, the entire tile is assumed to be below the horizon as well. + The point is expressed in ellipsoid-scaled coordinates. + * @param options.westIndices - The indices of the vertices on the western edge of the tile. + * @param options.southIndices - The indices of the vertices on the southern edge of the tile. + * @param options.eastIndices - The indices of the vertices on the eastern edge of the tile. + * @param options.northIndices - The indices of the vertices on the northern edge of the tile. + * @param options.westSkirtHeight - The height of the skirt to add on the western edge of the tile. + * @param options.southSkirtHeight - The height of the skirt to add on the southern edge of the tile. + * @param options.eastSkirtHeight - The height of the skirt to add on the eastern edge of the tile. + * @param options.northSkirtHeight - The height of the skirt to add on the northern edge of the tile. + * @param [options.childTileMask = 15] - A bit mask indicating which of this tile's four children exist. + If a child's bit is set, geometry will be requested for that tile as well when it + is needed. If the bit is cleared, the child tile is not requested and geometry is + instead upsampled from the parent. The bit values are as follows: + + + + + + +
Bit PositionBit ValueChild Tile
01Southwest
12Southeast
24Northwest
38Northeast
+ * @param [options.createdByUpsampling = false] - True if this instance was created by upsampling another instance; + otherwise, false. + * @param [options.encodedNormals] - The buffer containing per vertex normals, encoded using 'oct' encoding + * @param [options.waterMask] - The buffer containing the watermask. + * @param [options.credits] - Array of credits for this tile. + */ +export class QuantizedMeshTerrainData { + constructor(options: { + quantizedVertices: Uint16Array; + indices: Uint16Array | Uint32Array; + minimumHeight: number; + maximumHeight: number; + boundingSphere: BoundingSphere; + orientedBoundingBox?: OrientedBoundingBox; + horizonOcclusionPoint: Cartesian3; + westIndices: number[]; + southIndices: number[]; + eastIndices: number[]; + northIndices: number[]; + westSkirtHeight: number; + southSkirtHeight: number; + eastSkirtHeight: number; + northSkirtHeight: number; + childTileMask?: number; + createdByUpsampling?: boolean; + encodedNormals?: Uint8Array; + waterMask?: Uint8Array; + credits?: Credit[]; + }); + /** + * An array of credits for this tile. + */ + credits: Credit[]; + /** + * The water mask included in this terrain data, if any. A water mask is a rectangular + Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land. + Values in between 0 and 255 are allowed as well to smoothly blend between land and water. + */ + waterMask: Uint8Array | HTMLImageElement | HTMLCanvasElement; + /** + * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the + vertices in this instance, interpolated if necessary. + * @param tilingScheme - The tiling scheme of this terrain data. + * @param thisX - The X coordinate of this tile in the tiling scheme. + * @param thisY - The Y coordinate of this tile in the tiling scheme. + * @param thisLevel - The level of this tile in the tiling scheme. + * @param descendantX - The X coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantY - The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantLevel - The level within the tiling scheme of the descendant tile for which we are upsampling. + * @returns A promise for upsampled heightmap terrain data for the descendant tile, + or undefined if too many asynchronous upsample operations are in progress and the request has been + deferred. + */ + upsample(tilingScheme: TilingScheme, thisX: number, thisY: number, thisLevel: number, descendantX: number, descendantY: number, descendantLevel: number): Promise | undefined; + /** + * Computes the terrain height at a specified longitude and latitude. + * @param rectangle - The rectangle covered by this terrain data. + * @param longitude - The longitude in radians. + * @param latitude - The latitude in radians. + * @returns The terrain height at the specified position. The position is clamped to + the rectangle, so expect incorrect results for positions far outside the rectangle. + */ + interpolateHeight(rectangle: Rectangle, longitude: number, latitude: number): number; + /** + * Determines if a given child tile is available, based on the + {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed + to be one of the four children of this tile. If non-child tile coordinates are + given, the availability of the southeast child tile is returned. + * @param thisX - The tile X coordinate of this (the parent) tile. + * @param thisY - The tile Y coordinate of this (the parent) tile. + * @param childX - The tile X coordinate of the child tile to check for availability. + * @param childY - The tile Y coordinate of the child tile to check for availability. + * @returns True if the child tile is available; otherwise, false. + */ + isChildAvailable(thisX: number, thisY: number, childX: number, childY: number): boolean; + /** + * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution + terrain data. If this value is false, the data was obtained from some other source, such + as by downloading it from a remote server. This method should return true for instances + returned from a call to {@link HeightmapTerrainData#upsample}. + * @returns True if this instance was created by upsampling; otherwise, false. + */ + wasCreatedByUpsampling(): boolean; +} + +/** + * Defines functions for 4th order polynomial functions of one variable with only real coefficients. + */ +export namespace QuarticRealPolynomial { + /** + * Provides the discriminant of the quartic equation from the supplied coefficients. + * @param a - The coefficient of the 4th order monomial. + * @param b - The coefficient of the 3rd order monomial. + * @param c - The coefficient of the 2nd order monomial. + * @param d - The coefficient of the 1st order monomial. + * @param e - The coefficient of the 0th order monomial. + * @returns The value of the discriminant. + */ + function computeDiscriminant(a: number, b: number, c: number, d: number, e: number): number; + /** + * Provides the real valued roots of the quartic polynomial with the provided coefficients. + * @param a - The coefficient of the 4th order monomial. + * @param b - The coefficient of the 3rd order monomial. + * @param c - The coefficient of the 2nd order monomial. + * @param d - The coefficient of the 1st order monomial. + * @param e - The coefficient of the 0th order monomial. + * @returns The real valued roots. + */ + function computeRealRoots(a: number, b: number, c: number, d: number, e: number): number[]; +} + +/** + * A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space. + * @param [x = 0.0] - The X component. + * @param [y = 0.0] - The Y component. + * @param [z = 0.0] - The Z component. + * @param [w = 0.0] - The W component. + */ +export class Quaternion { + constructor(x?: number, y?: number, z?: number, w?: number); + /** + * The X component. + */ + x: number; + /** + * The Y component. + */ + y: number; + /** + * The Z component. + */ + z: number; + /** + * The W component. + */ + w: number; + /** + * Computes a quaternion representing a rotation around an axis. + * @param axis - The axis of rotation. + * @param angle - The angle in radians to rotate around the axis. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + static fromAxisAngle(axis: Cartesian3, angle: number, result?: Quaternion): Quaternion; + /** + * Computes a Quaternion from the provided Matrix3 instance. + * @param matrix - The rotation matrix. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + static fromRotationMatrix(matrix: Matrix3, result?: Quaternion): Quaternion; + /** + * Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the + negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about + the positive x axis. + * @param headingPitchRoll - The rotation expressed as a heading, pitch and roll. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if none was provided. + */ + static fromHeadingPitchRoll(headingPitchRoll: HeadingPitchRoll, result?: Quaternion): Quaternion; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Quaternion, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Quaternion): Quaternion; + /** + * The number of elements used to store the object into an array in its interpolatable form. + */ + static packedInterpolationLength: number; + /** + * Converts a packed array into a form suitable for interpolation. + * @param packedArray - The packed array. + * @param [startingIndex = 0] - The index of the first element to be converted. + * @param [lastIndex = packedArray.length] - The index of the last element to be converted. + * @param [result] - The object into which to store the result. + */ + static convertPackedArrayForInterpolation(packedArray: number[], startingIndex?: number, lastIndex?: number, result?: number[]): void; + /** + * Retrieves an instance from a packed array converted with {@link convertPackedArrayForInterpolation}. + * @param array - The array previously packed for interpolation. + * @param sourceArray - The original packed array. + * @param [firstIndex = 0] - The firstIndex used to convert the array. + * @param [lastIndex = packedArray.length] - The lastIndex used to convert the array. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + static unpackInterpolationResult(array: number[], sourceArray: number[], firstIndex?: number, lastIndex?: number, result?: Quaternion): Quaternion; + /** + * Duplicates a Quaternion instance. + * @param quaternion - The quaternion to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined) + */ + static clone(quaternion: Quaternion, result?: Quaternion): Quaternion; + /** + * Computes the conjugate of the provided quaternion. + * @param quaternion - The quaternion to conjugate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static conjugate(quaternion: Quaternion, result: Quaternion): Quaternion; + /** + * Computes magnitude squared for the provided quaternion. + * @param quaternion - The quaternion to conjugate. + * @returns The magnitude squared. + */ + static magnitudeSquared(quaternion: Quaternion): number; + /** + * Computes magnitude for the provided quaternion. + * @param quaternion - The quaternion to conjugate. + * @returns The magnitude. + */ + static magnitude(quaternion: Quaternion): number; + /** + * Computes the normalized form of the provided quaternion. + * @param quaternion - The quaternion to normalize. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static normalize(quaternion: Quaternion, result: Quaternion): Quaternion; + /** + * Computes the inverse of the provided quaternion. + * @param quaternion - The quaternion to normalize. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static inverse(quaternion: Quaternion, result: Quaternion): Quaternion; + /** + * Computes the componentwise sum of two quaternions. + * @param left - The first quaternion. + * @param right - The second quaternion. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static add(left: Quaternion, right: Quaternion, result: Quaternion): Quaternion; + /** + * Computes the componentwise difference of two quaternions. + * @param left - The first quaternion. + * @param right - The second quaternion. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static subtract(left: Quaternion, right: Quaternion, result: Quaternion): Quaternion; + /** + * Negates the provided quaternion. + * @param quaternion - The quaternion to be negated. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static negate(quaternion: Quaternion, result: Quaternion): Quaternion; + /** + * Computes the dot (scalar) product of two quaternions. + * @param left - The first quaternion. + * @param right - The second quaternion. + * @returns The dot product. + */ + static dot(left: Quaternion, right: Quaternion): number; + /** + * Computes the product of two quaternions. + * @param left - The first quaternion. + * @param right - The second quaternion. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiply(left: Quaternion, right: Quaternion, result: Quaternion): Quaternion; + /** + * Multiplies the provided quaternion componentwise by the provided scalar. + * @param quaternion - The quaternion to be scaled. + * @param scalar - The scalar to multiply with. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static multiplyByScalar(quaternion: Quaternion, scalar: number, result: Quaternion): Quaternion; + /** + * Divides the provided quaternion componentwise by the provided scalar. + * @param quaternion - The quaternion to be divided. + * @param scalar - The scalar to divide by. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static divideByScalar(quaternion: Quaternion, scalar: number, result: Quaternion): Quaternion; + /** + * Computes the axis of rotation of the provided quaternion. + * @param quaternion - The quaternion to use. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static computeAxis(quaternion: Quaternion, result: Cartesian3): Cartesian3; + /** + * Computes the angle of rotation of the provided quaternion. + * @param quaternion - The quaternion to use. + * @returns The angle of rotation. + */ + static computeAngle(quaternion: Quaternion): number; + /** + * Computes the linear interpolation or extrapolation at t using the provided quaternions. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static lerp(start: Quaternion, end: Quaternion, t: number, result: Quaternion): Quaternion; + /** + * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static slerp(start: Quaternion, end: Quaternion, t: number, result: Quaternion): Quaternion; + /** + * The logarithmic quaternion function. + * @param quaternion - The unit quaternion. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static log(quaternion: Quaternion, result: Cartesian3): Cartesian3; + /** + * The exponential quaternion function. + * @param cartesian - The cartesian. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static exp(cartesian: Cartesian3, result: Quaternion): Quaternion; + /** + * Computes an inner quadrangle point. +

This will compute quaternions that ensure a squad curve is C1.

+ * @param q0 - The first quaternion. + * @param q1 - The second quaternion. + * @param q2 - The third quaternion. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static computeInnerQuadrangle(q0: Quaternion, q1: Quaternion, q2: Quaternion, result: Quaternion): Quaternion; + /** + * Computes the spherical quadrangle interpolation between quaternions. + * @example + * // 1. compute the squad interpolation between two quaternions on a curve + var s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion()); + var s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion()); + var q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion()); + + // 2. compute the squad interpolation as above but where the first quaternion is a end point. + var s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion()); + var q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion()); + * @param q0 - The first quaternion. + * @param q1 - The second quaternion. + * @param s0 - The first inner quadrangle. + * @param s1 - The second inner quadrangle. + * @param t - The time in [0,1] used to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static squad(q0: Quaternion, q1: Quaternion, s0: Quaternion, s1: Quaternion, t: number, result: Quaternion): Quaternion; + /** + * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions. + This implementation is faster than {@link Quaternion#slerp}, but is only accurate up to 10-6. + * @param start - The value corresponding to t at 0.0. + * @param end - The value corresponding to t at 1.0. + * @param t - The point along t at which to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter. + */ + static fastSlerp(start: Quaternion, end: Quaternion, t: number, result: Quaternion): Quaternion; + /** + * Computes the spherical quadrangle interpolation between quaternions. + An implementation that is faster than {@link Quaternion#squad}, but less accurate. + * @param q0 - The first quaternion. + * @param q1 - The second quaternion. + * @param s0 - The first inner quadrangle. + * @param s1 - The second inner quadrangle. + * @param t - The time in [0,1] used to interpolate. + * @param result - The object onto which to store the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fastSquad(q0: Quaternion, q1: Quaternion, s0: Quaternion, s1: Quaternion, t: number, result: Quaternion): Quaternion; + /** + * Compares the provided quaternions componentwise and returns + true if they are equal, false otherwise. + * @param [left] - The first quaternion. + * @param [right] - The second quaternion. + * @returns true if left and right are equal, false otherwise. + */ + static equals(left?: Quaternion, right?: Quaternion): boolean; + /** + * Compares the provided quaternions componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [left] - The first quaternion. + * @param [right] - The second quaternion. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Quaternion, right?: Quaternion, epsilon?: number): boolean; + /** + * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0). + */ + static readonly ZERO: Quaternion; + /** + * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0). + */ + static readonly IDENTITY: Quaternion; + /** + * Duplicates this Quaternion instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + clone(result?: Quaternion): Quaternion; + /** + * Compares this and the provided quaternion componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side quaternion. + * @returns true if left and right are equal, false otherwise. + */ + equals(right?: Quaternion): boolean; + /** + * Compares this and the provided quaternion componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The right hand side quaternion. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: Quaternion, epsilon?: number): boolean; + /** + * Returns a string representing this quaternion in the format (x, y, z, w). + * @returns A string representing this Quaternion. + */ + toString(): string; +} + +/** + * A spline that uses spherical linear (slerp) interpolation to create a quaternion curve. +The generated curve is in the class C1. + * @param options - Object with the following properties: + * @param options.times - An array of strictly increasing, unit-less, floating-point times at each point. + The values are in no way connected to the clock time. They are the parameterization for the curve. + * @param options.points - The array of {@link Quaternion} control points. + */ +export class QuaternionSpline { + constructor(options: { + times: number[]; + points: Quaternion[]; + }); + /** + * An array of times for the control points. + */ + readonly times: number[]; + /** + * An array of {@link Quaternion} control points. + */ + readonly points: Quaternion[]; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around to the updated animation. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: Quaternion): Quaternion; +} + +/** + * Parses a query string into an object, where the keys and values of the object are the +name/value pairs from the query string, decoded. If a name appears multiple times, +the value in the object will be an array of values. + * @example + * var obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y'); +// obj will be: +// { +// key1 : 'some value', +// key2 : 'a/b', +// key3 : ['x', 'y'] +// } + * @param queryString - The query string. + * @returns An object containing the parameters parsed from the query string. + */ +export function queryToObject(queryString: string): any; + +/** + * A queue that can enqueue items at the end, and dequeue items from the front. + */ +export class Queue { + constructor(); + /** + * The length of the queue. + */ + readonly length: number; + /** + * Enqueues the specified item. + * @param item - The item to enqueue. + */ + enqueue(item: any): void; + /** + * Dequeues an item. Returns undefined if the queue is empty. + * @returns The the dequeued item. + */ + dequeue(): any; + /** + * Returns the item at the front of the queue. Returns undefined if the queue is empty. + * @returns The item at the front of the queue. + */ + peek(): any; + /** + * Check whether this queue contains the specified item. + * @param item - The item to search for. + */ + contains(item: any): void; + /** + * Remove all items from the queue. + */ + clear(): void; + /** + * Sort the items in the queue in-place. + * @param compareFunction - A function that defines the sort order. + */ + sort(compareFunction: Queue.Comparator): void; +} + +export namespace Queue { + /** + * A function used to compare two items while sorting a queue. + * @example + * function compareNumbers(a, b) { + return a - b; + } + * @param a - An item in the array. + * @param b - An item in the array. + */ + type Comparator = (a: any, b: any) => number; +} + +/** + * Represents a ray that extends infinitely from the provided origin in the provided direction. + * @param [origin = Cartesian3.ZERO] - The origin of the ray. + * @param [direction = Cartesian3.ZERO] - The direction of the ray. + */ +export class Ray { + constructor(origin?: Cartesian3, direction?: Cartesian3); + /** + * The origin of the ray. + */ + origin: Cartesian3; + /** + * The direction of the ray. + */ + direction: Cartesian3; + /** + * Duplicates a Ray instance. + * @param ray - The ray to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined) + */ + static clone(ray: Ray, result?: Ray): Ray; + /** + * Computes the point along the ray given by r(t) = o + t*d, + where o is the origin of the ray and d is the direction. + * @example + * //Get the first intersection point of a ray and an ellipsoid. + var intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid); + var point = Cesium.Ray.getPoint(ray, intersection.start); + * @param ray - The ray. + * @param t - A scalar value. + * @param [result] - The object in which the result will be stored. + * @returns The modified result parameter, or a new instance if none was provided. + */ + static getPoint(ray: Ray, t: number, result?: Cartesian3): Cartesian3; +} + +/** + * A two dimensional region specified as longitude and latitude coordinates. + * @param [west = 0.0] - The westernmost longitude, in radians, in the range [-Pi, Pi]. + * @param [south = 0.0] - The southernmost latitude, in radians, in the range [-Pi/2, Pi/2]. + * @param [east = 0.0] - The easternmost longitude, in radians, in the range [-Pi, Pi]. + * @param [north = 0.0] - The northernmost latitude, in radians, in the range [-Pi/2, Pi/2]. + */ +export class Rectangle { + constructor(west?: number, south?: number, east?: number, north?: number); + /** + * The westernmost longitude in radians in the range [-Pi, Pi]. + */ + west: number; + /** + * The southernmost latitude in radians in the range [-Pi/2, Pi/2]. + */ + south: number; + /** + * The easternmost longitude in radians in the range [-Pi, Pi]. + */ + east: number; + /** + * The northernmost latitude in radians in the range [-Pi/2, Pi/2]. + */ + north: number; + /** + * Gets the width of the rectangle in radians. + */ + readonly width: number; + /** + * Gets the height of the rectangle in radians. + */ + readonly height: number; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: Rectangle, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Rectangle instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: Rectangle): Rectangle; + /** + * Computes the width of a rectangle in radians. + * @param rectangle - The rectangle to compute the width of. + * @returns The width. + */ + static computeWidth(rectangle: Rectangle): number; + /** + * Computes the height of a rectangle in radians. + * @param rectangle - The rectangle to compute the height of. + * @returns The height. + */ + static computeHeight(rectangle: Rectangle): number; + /** + * Creates a rectangle given the boundary longitude and latitude in degrees. + * @example + * var rectangle = Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0); + * @param [west = 0.0] - The westernmost longitude in degrees in the range [-180.0, 180.0]. + * @param [south = 0.0] - The southernmost latitude in degrees in the range [-90.0, 90.0]. + * @param [east = 0.0] - The easternmost longitude in degrees in the range [-180.0, 180.0]. + * @param [north = 0.0] - The northernmost latitude in degrees in the range [-90.0, 90.0]. + * @param [result] - The object onto which to store the result, or undefined if a new instance should be created. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + static fromDegrees(west?: number, south?: number, east?: number, north?: number, result?: Rectangle): Rectangle; + /** + * Creates a rectangle given the boundary longitude and latitude in radians. + * @example + * var rectangle = Cesium.Rectangle.fromRadians(0.0, Math.PI/4, Math.PI/8, 3*Math.PI/4); + * @param [west = 0.0] - The westernmost longitude in radians in the range [-Math.PI, Math.PI]. + * @param [south = 0.0] - The southernmost latitude in radians in the range [-Math.PI/2, Math.PI/2]. + * @param [east = 0.0] - The easternmost longitude in radians in the range [-Math.PI, Math.PI]. + * @param [north = 0.0] - The northernmost latitude in radians in the range [-Math.PI/2, Math.PI/2]. + * @param [result] - The object onto which to store the result, or undefined if a new instance should be created. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + static fromRadians(west?: number, south?: number, east?: number, north?: number, result?: Rectangle): Rectangle; + /** + * Creates the smallest possible Rectangle that encloses all positions in the provided array. + * @param cartographics - The list of Cartographic instances. + * @param [result] - The object onto which to store the result, or undefined if a new instance should be created. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + static fromCartographicArray(cartographics: Cartographic[], result?: Rectangle): Rectangle; + /** + * Creates the smallest possible Rectangle that encloses all positions in the provided array. + * @param cartesians - The list of Cartesian instances. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid the cartesians are on. + * @param [result] - The object onto which to store the result, or undefined if a new instance should be created. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + static fromCartesianArray(cartesians: Cartesian3[], ellipsoid?: Ellipsoid, result?: Rectangle): Rectangle; + /** + * Duplicates a Rectangle. + * @param rectangle - The rectangle to clone. + * @param [result] - The object onto which to store the result, or undefined if a new instance should be created. + * @returns The modified result parameter or a new Rectangle instance if none was provided. (Returns undefined if rectangle is undefined) + */ + static clone(rectangle: Rectangle, result?: Rectangle): Rectangle; + /** + * Compares the provided Rectangles componentwise and returns + true if they pass an absolute or relative tolerance test, + false otherwise. + * @param [left] - The first Rectangle. + * @param [right] - The second Rectangle. + * @param [absoluteEpsilon = 0] - The absolute epsilon tolerance to use for equality testing. + * @returns true if left and right are within the provided epsilon, false otherwise. + */ + static equalsEpsilon(left?: Rectangle, right?: Rectangle, absoluteEpsilon?: number): boolean; + /** + * Duplicates this Rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + clone(result?: Rectangle): Rectangle; + /** + * Compares the provided Rectangle with this Rectangle componentwise and returns + true if they are equal, false otherwise. + * @param [other] - The Rectangle to compare. + * @returns true if the Rectangles are equal, false otherwise. + */ + equals(other?: Rectangle): boolean; + /** + * Compares the provided rectangles and returns true if they are equal, + false otherwise. + * @param [left] - The first Rectangle. + * @param [right] - The second Rectangle. + * @returns true if left and right are equal; otherwise false. + */ + static equals(left?: Rectangle, right?: Rectangle): boolean; + /** + * Compares the provided Rectangle with this Rectangle componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [other] - The Rectangle to compare. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @returns true if the Rectangles are within the provided epsilon, false otherwise. + */ + equalsEpsilon(other?: Rectangle, epsilon?: number): boolean; + /** + * Checks a Rectangle's properties and throws if they are not in valid ranges. + * @param rectangle - The rectangle to validate + */ + static validate(rectangle: Rectangle): void; + /** + * Computes the southwest corner of a rectangle. + * @param rectangle - The rectangle for which to find the corner + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if none was provided. + */ + static southwest(rectangle: Rectangle, result?: Cartographic): Cartographic; + /** + * Computes the northwest corner of a rectangle. + * @param rectangle - The rectangle for which to find the corner + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if none was provided. + */ + static northwest(rectangle: Rectangle, result?: Cartographic): Cartographic; + /** + * Computes the northeast corner of a rectangle. + * @param rectangle - The rectangle for which to find the corner + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if none was provided. + */ + static northeast(rectangle: Rectangle, result?: Cartographic): Cartographic; + /** + * Computes the southeast corner of a rectangle. + * @param rectangle - The rectangle for which to find the corner + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if none was provided. + */ + static southeast(rectangle: Rectangle, result?: Cartographic): Cartographic; + /** + * Computes the center of a rectangle. + * @param rectangle - The rectangle for which to find the center + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartographic instance if none was provided. + */ + static center(rectangle: Rectangle, result?: Cartographic): Cartographic; + /** + * Computes the intersection of two rectangles. This function assumes that the rectangle's coordinates are + latitude and longitude in radians and produces a correct intersection, taking into account the fact that + the same angle can be represented with multiple values as well as the wrapping of longitude at the + anti-meridian. For a simple intersection that ignores these factors and can be used with projected + coordinates, see {@link Rectangle.simpleIntersection}. + * @param rectangle - On rectangle to find an intersection + * @param otherRectangle - Another rectangle to find an intersection + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection. + */ + static intersection(rectangle: Rectangle, otherRectangle: Rectangle, result?: Rectangle): Rectangle | undefined; + /** + * Computes a simple intersection of two rectangles. Unlike {@link Rectangle.intersection}, this function + does not attempt to put the angular coordinates into a consistent range or to account for crossing the + anti-meridian. As such, it can be used for rectangles where the coordinates are not simply latitude + and longitude (i.e. projected coordinates). + * @param rectangle - On rectangle to find an intersection + * @param otherRectangle - Another rectangle to find an intersection + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection. + */ + static simpleIntersection(rectangle: Rectangle, otherRectangle: Rectangle, result?: Rectangle): Rectangle | undefined; + /** + * Computes a rectangle that is the union of two rectangles. + * @param rectangle - A rectangle to enclose in rectangle. + * @param otherRectangle - A rectangle to enclose in a rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Rectangle instance if none was provided. + */ + static union(rectangle: Rectangle, otherRectangle: Rectangle, result?: Rectangle): Rectangle; + /** + * Computes a rectangle by enlarging the provided rectangle until it contains the provided cartographic. + * @param rectangle - A rectangle to expand. + * @param cartographic - A cartographic to enclose in a rectangle. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Rectangle instance if one was not provided. + */ + static expand(rectangle: Rectangle, cartographic: Cartographic, result?: Rectangle): Rectangle; + /** + * Returns true if the cartographic is on or inside the rectangle, false otherwise. + * @param rectangle - The rectangle + * @param cartographic - The cartographic to test. + * @returns true if the provided cartographic is inside the rectangle, false otherwise. + */ + static contains(rectangle: Rectangle, cartographic: Cartographic): boolean; + /** + * Samples a rectangle so that it includes a list of Cartesian points suitable for passing to + {@link BoundingSphere#fromPoints}. Sampling is necessary to account + for rectangles that cover the poles or cross the equator. + * @param rectangle - The rectangle to subsample. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid to use. + * @param [surfaceHeight = 0.0] - The height of the rectangle above the ellipsoid. + * @param [result] - The array of Cartesians onto which to store the result. + * @returns The modified result parameter or a new Array of Cartesians instances if none was provided. + */ + static subsample(rectangle: Rectangle, ellipsoid?: Ellipsoid, surfaceHeight?: number, result?: Cartesian3[]): Cartesian3[]; + /** + * The largest possible rectangle. + */ + static readonly MAX_VALUE: Rectangle; +} + +/** + * A description of a cartographic rectangle on an ellipsoid centered at the origin. Rectangle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. + * @example + * // 1. create a rectangle +var rectangle = new Cesium.RectangleGeometry({ + ellipsoid : Cesium.Ellipsoid.WGS84, + rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), + height : 10000.0 +}); +var geometry = Cesium.RectangleGeometry.createGeometry(rectangle); + +// 2. create an extruded rectangle without a top +var rectangle = new Cesium.RectangleGeometry({ + ellipsoid : Cesium.Ellipsoid.WGS84, + rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), + height : 10000.0, + extrudedHeight: 300000 +}); +var geometry = Cesium.RectangleGeometry.createGeometry(rectangle); + * @param options - Object with the following properties: + * @param options.rectangle - A cartographic rectangle with north, south, east and west properties in radians. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rectangle lies. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.height = 0.0] - The distance in meters between the rectangle and the ellipsoid surface. + * @param [options.rotation = 0.0] - The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. + * @param [options.stRotation = 0.0] - The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. + * @param [options.extrudedHeight] - The distance in meters between the rectangle's extruded face and the ellipsoid surface. + */ +export class RectangleGeometry { + constructor(options: { + rectangle: Rectangle; + vertexFormat?: VertexFormat; + ellipsoid?: Ellipsoid; + granularity?: number; + height?: number; + rotation?: number; + stRotation?: number; + extrudedHeight?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: RectangleGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new RectangleGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: RectangleGeometry): RectangleGeometry; + /** + * Computes the bounding rectangle based on the provided options + * @param options - Object with the following properties: + * @param options.rectangle - A cartographic rectangle with north, south, east and west properties in radians. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rectangle lies. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.rotation = 0.0] - The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. + * @param [result] - An object in which to store the result. + * @returns The result rectangle + */ + static computeRectangle(options: { + rectangle: Rectangle; + ellipsoid?: Ellipsoid; + granularity?: number; + rotation?: number; + }, result?: Rectangle): Rectangle; + /** + * Computes the geometric representation of a rectangle, including its vertices, indices, and a bounding sphere. + * @param rectangleGeometry - A description of the rectangle. + * @returns The computed vertices and indices. + */ + static createGeometry(rectangleGeometry: RectangleGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a a cartographic rectangle on an ellipsoid centered at the origin. + * @example + * var rectangle = new Cesium.RectangleOutlineGeometry({ + ellipsoid : Cesium.Ellipsoid.WGS84, + rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), + height : 10000.0 +}); +var geometry = Cesium.RectangleOutlineGeometry.createGeometry(rectangle); + * @param options - Object with the following properties: + * @param options.rectangle - A cartographic rectangle with north, south, east and west properties in radians. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid on which the rectangle lies. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.height = 0.0] - The distance in meters between the rectangle and the ellipsoid surface. + * @param [options.rotation = 0.0] - The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. + * @param [options.extrudedHeight] - The distance in meters between the rectangle's extruded face and the ellipsoid surface. + */ +export class RectangleOutlineGeometry { + constructor(options: { + rectangle: Rectangle; + ellipsoid?: Ellipsoid; + granularity?: number; + height?: number; + rotation?: number; + extrudedHeight?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: RectangleOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Quaternion instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: RectangleOutlineGeometry): RectangleOutlineGeometry; + /** + * Computes the geometric representation of an outline of a rectangle, including its vertices, indices, and a bounding sphere. + * @param rectangleGeometry - A description of the rectangle outline. + * @returns The computed vertices and indices. + */ + static createGeometry(rectangleGeometry: RectangleOutlineGeometry): Geometry | undefined; +} + +/** + * Constants for identifying well-known reference frames. + */ +export enum ReferenceFrame { + /** + * The fixed frame. + */ + FIXED = 0, + /** + * The inertial frame. + */ + INERTIAL = 1 +} + +/** + * Stores information for making a request. In general this does not need to be constructed directly. + * @param [options] - An object with the following properties: + * @param [options.url] - The url to request. + * @param [options.requestFunction] - The function that makes the actual data request. + * @param [options.cancelFunction] - The function that is called when the request is cancelled. + * @param [options.priorityFunction] - The function that is called to update the request's priority, which occurs once per frame. + * @param [options.priority = 0.0] - The initial priority of the request. + * @param [options.throttle = false] - Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority. + * @param [options.throttleByServer = false] - Whether to throttle the request by server. + * @param [options.type = RequestType.OTHER] - The type of request. + */ +export class Request { + constructor(options?: { + url?: string; + requestFunction?: Request.RequestCallback; + cancelFunction?: Request.CancelCallback; + priorityFunction?: Request.PriorityCallback; + priority?: number; + throttle?: boolean; + throttleByServer?: boolean; + type?: RequestType; + }); + /** + * The URL to request. + */ + url: string; + /** + * The function that makes the actual data request. + */ + requestFunction: Request.RequestCallback; + /** + * The function that is called when the request is cancelled. + */ + cancelFunction: Request.CancelCallback; + /** + * The function that is called to update the request's priority, which occurs once per frame. + */ + priorityFunction: Request.PriorityCallback; + /** + * Priority is a unit-less value where lower values represent higher priority. + For world-based objects, this is usually the distance from the camera. + A request that does not have a priority function defaults to a priority of 0. + + If priorityFunction is defined, this value is updated every frame with the result of that call. + */ + priority: number; + /** + * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the + request will be throttled and sent based on priority. + */ + readonly throttle: boolean; + /** + * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections + for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value + to true is preferable for requests going through HTTP/1 servers. + */ + readonly throttleByServer: boolean; + /** + * Type of request. + */ + readonly type: RequestType; + /** + * The current state of the request. + */ + readonly state: RequestState; + /** + * Duplicates a Request instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Resource instance if one was not provided. + */ + clone(result?: Request): Request; +} + +export namespace Request { + /** + * The function that makes the actual data request. + */ + type RequestCallback = () => Promise; + /** + * The function that is called when the request is cancelled. + */ + type CancelCallback = () => void; + /** + * The function that is called to update the request's priority, which occurs once per frame. + */ + type PriorityCallback = () => number; +} + +/** + * A browser-independent function to request a new animation frame. This is used to create +an application's draw loop as shown in the example below. + * @example + * // Create a draw loop using requestAnimationFrame. The +// tick callback function is called for every animation frame. +function tick() { + scene.render(); + Cesium.requestAnimationFrame(tick); +} +tick(); + * @param callback - The function to call when the next frame should be drawn. + * @returns An ID that can be passed to {@link cancelAnimationFrame} to cancel the request. + */ +export function requestAnimationFrame(callback: requestAnimationFrameCallback): number; + +/** + * A function that will be called when the next frame should be drawn. + * @param timestamp - A timestamp for the frame, in milliseconds. + */ +export type requestAnimationFrameCallback = (timestamp: number) => void; + +/** + * An event that is raised when a request encounters an error. + * @param [statusCode] - The HTTP error status code, such as 404. + * @param [response] - The response included along with the error. + * @param [responseHeaders] - The response headers, represented either as an object literal or as a + string in the format returned by XMLHttpRequest's getAllResponseHeaders() function. + */ +export class RequestErrorEvent { + constructor(statusCode?: number, response?: any, responseHeaders?: string | any); + /** + * The HTTP error status code, such as 404. If the error does not have a particular + HTTP code, this property will be undefined. + */ + statusCode: number; + /** + * The response included along with the error. If the error does not include a response, + this property will be undefined. + */ + response: any; + /** + * The headers included in the response, represented as an object literal of key/value pairs. + If the error does not include any headers, this property will be undefined. + */ + responseHeaders: any; + /** + * Creates a string representing this RequestErrorEvent. + * @returns A string representing the provided RequestErrorEvent. + */ + toString(): string; +} + +/** + * The request scheduler is used to track and constrain the number of active requests in order to prioritize incoming requests. The ability +to retain control over the number of requests in CesiumJS is important because due to events such as changes in the camera position, +a lot of new requests may be generated and a lot of in-flight requests may become redundant. The request scheduler manually constrains the +number of requests so that newer requests wait in a shorter queue and don't have to compete for bandwidth with requests that have expired. + */ +export namespace RequestScheduler { + /** + * The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit. + */ + var maximumRequests: number; + /** + * The maximum number of simultaneous active requests per server. Un-throttled requests or servers specifically + listed in {@link requestsByServer} do not observe this limit. + */ + var maximumRequestsPerServer: number; + /** + * A per server key list of overrides to use for throttling instead of maximumRequestsPerServer + * @example + * RequestScheduler.requestsByServer = { + 'api.cesium.com:443': 18, + 'assets.cesium.com:443': 18 + }; + */ + var requestsByServer: any; + /** + * Specifies if the request scheduler should throttle incoming requests, or let the browser queue requests under its control. + */ + var throttleRequests: boolean; +} + +/** + * State of the request. + */ +export enum RequestState { + /** + * Initial unissued state. + */ + UNISSUED = 0, + /** + * Issued but not yet active. Will become active when open slots are available. + */ + ISSUED = 1, + /** + * Actual http request has been sent. + */ + ACTIVE = 2, + /** + * Request completed successfully. + */ + RECEIVED = 3, + /** + * Request was cancelled, either explicitly or automatically because of low priority. + */ + CANCELLED = 4, + /** + * Request failed. + */ + FAILED = 5 +} + +/** + * An enum identifying the type of request. Used for finer grained logging and priority sorting. + */ +export enum RequestType { + /** + * Terrain request. + */ + TERRAIN = 0, + /** + * Imagery request. + */ + IMAGERY = 1, + /** + * 3D Tiles request. + */ + TILES3D = 2, + /** + * Other request. + */ + OTHER = 3 +} + +/** + * A resource that includes the location and any other parameters we need to retrieve it or create derived resources. It also provides the ability to retry requests. + * @example + * function refreshTokenRetryCallback(resource, error) { + if (error.statusCode === 403) { + // 403 status code means a new token should be generated + return getNewAccessToken() + .then(function(token) { + resource.queryParameters.access_token = token; + return true; + }) + .otherwise(function() { + return false; + }); + } + + return false; +} + +var resource = new Resource({ + url: 'http://server.com/path/to/resource.json', + proxy: new DefaultProxy('/proxy/'), + headers: { + 'X-My-Header': 'valueOfHeader' + }, + queryParameters: { + 'access_token': '123-435-456-000' + }, + retryCallback: refreshTokenRetryCallback, + retryAttempts: 1 +}); + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + */ +export class Resource { + constructor(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }); + /** + * Additional HTTP headers that will be sent with the request. + */ + headers: any; + /** + * A Request object that will be used. Intended for internal use only. + */ + request: Request; + /** + * A proxy to be used when loading the resource. + */ + proxy: Proxy; + /** + * Function to call when a request for this resource fails. If it returns true or a Promise that resolves to true, the request will be retried. + */ + retryCallback: (...params: any[]) => any; + /** + * The number of times the retryCallback should be called before giving up. + */ + retryAttempts: number; + /** + * Returns true if blobs are supported. + */ + static readonly isBlobSupported: boolean; + /** + * Query parameters appended to the url. + */ + readonly queryParameters: any; + /** + * The key/value pairs used to replace template parameters in the url. + */ + readonly templateValues: any; + /** + * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set. + */ + url: string; + /** + * The file extension of the resource. + */ + readonly extension: string; + /** + * True if the Resource refers to a data URI. + */ + isDataUri: boolean; + /** + * True if the Resource refers to a blob URI. + */ + isBlobUri: boolean; + /** + * True if the Resource refers to a cross origin URL. + */ + isCrossOriginUrl: boolean; + /** + * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys. + */ + hasHeaders: boolean; + /** + * Override Object#toString so that implicit string conversion gives the + complete URL represented by this Resource. + * @returns The URL represented by this Resource + */ + toString(): string; + /** + * Returns the url, optional with the query string and processed by a proxy. + * @param [query = false] - If true, the query string is included. + * @param [proxy = false] - If true, the url is processed by the proxy object, if defined. + * @returns The url with all the requested components. + */ + getUrlComponent(query?: boolean, proxy?: boolean): string; + /** + * Combines the specified object and the existing query parameters. This allows you to add many parameters at once, + as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value. + * @param params - The query parameters + * @param [useAsDefault = false] - If true the params will be used as the default values, so they will only be set if they are undefined. + */ + setQueryParameters(params: any, useAsDefault?: boolean): void; + /** + * Combines the specified object and the existing query parameters. This allows you to add many parameters at once, + as opposed to adding them one at a time to the queryParameters property. + * @param params - The query parameters + */ + appendQueryParameters(params: any): void; + /** + * Combines the specified object and the existing template values. This allows you to add many values at once, + as opposed to adding them one at a time to the templateValues property. If a value is already set, it will become an array and the new value will be appended. + * @param template - The template values + * @param [useAsDefault = false] - If true the values will be used as the default values, so they will only be set if they are undefined. + */ + setTemplateValues(template: any, useAsDefault?: boolean): void; + /** + * Returns a resource relative to the current instance. All properties remain the same as the current instance unless overridden in options. + * @param options - An object with the following properties + * @param [options.url] - The url that will be resolved relative to the url of the current instance. + * @param [options.queryParameters] - An object containing query parameters that will be combined with those of the current instance. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). These will be combined with those of the current instance. + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The function to call when loading the resource fails. + * @param [options.retryAttempts] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.preserveQueryParameters = false] - If true, this will keep all query parameters from the current resource and derived resource. If false, derived parameters will replace those of the current resource. + * @returns The resource derived from the current one. + */ + getDerivedResource(options: { + url?: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + preserveQueryParameters?: boolean; + }): Resource; + /** + * Duplicates a Resource instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Resource instance if one was not provided. + */ + clone(result?: Resource): Resource; + /** + * Returns the base path of the Resource. + * @param [includeQuery = false] - Whether or not to include the query string and fragment form the uri + * @returns The base URI of the resource + */ + getBaseUri(includeQuery?: boolean): string; + /** + * Appends a forward slash to the URL. + */ + appendForwardSlash(): void; + /** + * Asynchronously loads the resource as raw binary data. Returns a promise that will resolve to + an ArrayBuffer once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * // load a single URL asynchronously + resource.fetchArrayBuffer().then(function(arrayBuffer) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchArrayBuffer(): Promise | undefined; + /** + * Creates a Resource and calls fetchArrayBuffer() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchArrayBuffer(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }): Promise | undefined; + /** + * Asynchronously loads the given resource as a blob. Returns a promise that will resolve to + a Blob once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * // load a single URL asynchronously + resource.fetchBlob().then(function(blob) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchBlob(): Promise | undefined; + /** + * Creates a Resource and calls fetchBlob() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchBlob(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }): Promise | undefined; + /** + * Asynchronously loads the given image resource. Returns a promise that will resolve to + an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if preferImageBitmap is true and the browser supports createImageBitmap or otherwise an + {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load. + * @example + * // load a single image asynchronously + resource.fetchImage().then(function(image) { + // use the loaded image + }).otherwise(function(error) { + // an error occurred + }); + + // load several images in parallel + when.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) { + // images is an array containing all the loaded images + }); + * @param [options] - An object with the following properties. + * @param [options.preferBlob = false] - If true, we will load the image via a blob. + * @param [options.preferImageBitmap = false] - If true, image will be decoded during fetch and an ImageBitmap is returned. + * @param [options.flipY = false] - If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchImage(options?: { + preferBlob?: boolean; + preferImageBitmap?: boolean; + flipY?: boolean; + }): Promise | Promise | undefined; + /** + * Creates a Resource and calls fetchImage() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.flipY = false] - Whether to vertically flip the image during fetch and decode. Only applies when requesting an image and the browser supports createImageBitmap. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.preferBlob = false] - If true, we will load the image via a blob. + * @param [options.preferImageBitmap = false] - If true, image will be decoded during fetch and an ImageBitmap is returned. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchImage(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + flipY?: boolean; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + preferBlob?: boolean; + preferImageBitmap?: boolean; + }): Promise | Promise | undefined; + /** + * Asynchronously loads the given resource as text. Returns a promise that will resolve to + a String once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * // load text from a URL, setting a custom header + var resource = new Resource({ + url: 'http://someUrl.com/someJson.txt', + headers: { + 'X-Custom-Header' : 'some value' + } + }); + resource.fetchText().then(function(text) { + // Do something with the text + }).otherwise(function(error) { + // an error occurred + }); + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchText(): Promise | undefined; + /** + * Creates a Resource and calls fetchText() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchText(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }): Promise | undefined; + /** + * Asynchronously loads the given resource as JSON. Returns a promise that will resolve to + a JSON object once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. This function + adds 'Accept: application/json,*/*;q=0.01' to the request headers, if not + already specified. + * @example + * resource.fetchJson().then(function(jsonData) { + // Do something with the JSON object + }).otherwise(function(error) { + // an error occurred + }); + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchJson(): Promise | undefined; + /** + * Creates a Resource and calls fetchJson() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchJson(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }): Promise | undefined; + /** + * Asynchronously loads the given resource as XML. Returns a promise that will resolve to + an XML Document once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * // load XML from a URL, setting a custom header + Cesium.loadXML('http://someUrl.com/someXML.xml', { + 'X-Custom-Header' : 'some value' + }).then(function(document) { + // Do something with the document + }).otherwise(function(error) { + // an error occurred + }); + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchXML(): Promise | undefined; + /** + * Creates a Resource and calls fetchXML() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchXML(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + }): Promise | undefined; + /** + * Requests a resource using JSONP. + * @example + * // load a data asynchronously + resource.fetchJsonp().then(function(data) { + // use the loaded data + }).otherwise(function(error) { + // an error occurred + }); + * @param [callbackParameterName = 'callback'] - The callback parameter name that the server expects. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetchJsonp(callbackParameterName?: string): Promise | undefined; + /** + * Creates a Resource from a URL and calls fetchJsonp() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.callbackParameterName = 'callback'] - The callback parameter name that the server expects. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetchJsonp(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + callbackParameterName?: string; + }): Promise | undefined; + /** + * Asynchronously loads the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. It's recommended that you use + the more specific functions eg. fetchJson, fetchBlob, etc. + * @example + * resource.fetch() + .then(function(body) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + fetch(options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls fetch() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static fetch(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously deletes the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.delete() + .then(function(body) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + delete(options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls delete() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.data] - Data that is posted with the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static delete(options: { + url: string; + data?: any; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously gets headers the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.head() + .then(function(headers) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + head(options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls head() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static head(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously gets options the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.options() + .then(function(headers) { + // use the data + }).otherwise(function(error) { + // an error occurred + }); + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + options(options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls options() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static options(options: { + url: string; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously posts data to the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.post(data) + .then(function(result) { + // use the result + }).otherwise(function(error) { + // an error occurred + }); + * @param data - Data that is posted with the resource. + * @param [options] - Object with the following properties: + * @param [options.data] - Data that is posted with the resource. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + post(data: any, options?: { + data?: any; + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls post() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param options.data - Data that is posted with the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static post(options: { + url: string; + data: any; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously puts data to the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.put(data) + .then(function(result) { + // use the result + }).otherwise(function(error) { + // an error occurred + }); + * @param data - Data that is posted with the resource. + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + put(data: any, options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls put() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param options.data - Data that is posted with the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static put(options: { + url: string; + data: any; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Asynchronously patches data to the given resource. Returns a promise that will resolve to + the result once loaded, or reject if the resource failed to load. The data is loaded + using XMLHttpRequest, which means that in order to make requests to another origin, + the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + * @example + * resource.patch(data) + .then(function(result) { + // use the result + }).otherwise(function(error) { + // an error occurred + }); + * @param data - Data that is posted with the resource. + * @param [options] - Object with the following properties: + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.headers] - Additional HTTP headers to send with the request, if any. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + patch(data: any, options?: { + responseType?: string; + headers?: any; + overrideMimeType?: string; + }): Promise | undefined; + /** + * Creates a Resource from a URL and calls patch() on it. + * @param options - A url or an object with the following properties + * @param options.url - The url of the resource. + * @param options.data - Data that is posted with the resource. + * @param [options.queryParameters] - An object containing query parameters that will be sent when retrieving the resource. + * @param [options.templateValues] - Key/Value pairs that are used to replace template values (eg. {x}). + * @param [options.headers = {}] - Additional HTTP headers that will be sent. + * @param [options.proxy] - A proxy to be used when loading the resource. + * @param [options.retryCallback] - The Function to call when a request for this resource fails. If it returns true, the request will be retried. + * @param [options.retryAttempts = 0] - The number of times the retryCallback should be called before giving up. + * @param [options.request] - A Request object that will be used. Intended for internal use only. + * @param [options.responseType] - The type of response. This controls the type of item returned. + * @param [options.overrideMimeType] - Overrides the MIME type returned by the server. + * @returns a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + */ + static patch(options: { + url: string; + data: any; + queryParameters?: any; + templateValues?: any; + headers?: any; + proxy?: Proxy; + retryCallback?: Resource.RetryCallback; + retryAttempts?: number; + request?: Request; + responseType?: string; + overrideMimeType?: string; + }): Promise | undefined; + /** + * A resource instance initialized to the current browser location + */ + static readonly DEFAULT: Resource; +} + +export namespace Resource { + /** + * A function that returns the value of the property. + * @param [resource] - The resource that failed to load. + * @param [error] - The error that occurred during the loading of the resource. + */ + type RetryCallback = (resource?: Resource, error?: Error) => boolean | Promise; +} + +/** + * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g., +out of memory, could not compile shader, etc. If a function may throw this +exception, the calling code should be prepared to catch it. +

+On the other hand, a {@link DeveloperError} indicates an exception due +to a developer error, e.g., invalid argument, that usually indicates a bug in the +calling code. + * @param [message] - The error message for this exception. + */ +export class RuntimeError extends Error { + constructor(message?: string); + /** + * 'RuntimeError' indicating that this exception was thrown due to a runtime error. + */ + readonly name: string; + /** + * The explanation for why this exception was thrown. + */ + readonly message: string; + /** + * The stack trace of this exception, if available. + */ + readonly stack: string; +} + +/** + * Initiates a terrain height query for an array of {@link Cartographic} positions by +requesting tiles from a terrain provider, sampling, and interpolating. The interpolation +matches the triangles used to render the terrain at the specified level. The query +happens asynchronously, so this function returns a promise that is resolved when +the query completes. Each point height is modified in place. If a height can not be +determined because no terrain data is available for the specified level at that location, +or another error occurs, the height is set to undefined. As is typical of the +{@link Cartographic} type, the supplied height is a height above the reference ellipsoid +(such as {@link Ellipsoid.WGS84}) rather than an altitude above mean sea level. In other +words, it will not necessarily be 0.0 if sampled in the ocean. This function needs the +terrain level of detail as input, if you need to get the altitude of the terrain as precisely +as possible (i.e. with maximum level of detail) use {@link sampleTerrainMostDetailed}. + * @example + * // Query the terrain height of two Cartographic positions +var terrainProvider = Cesium.createWorldTerrain(); +var positions = [ + Cesium.Cartographic.fromDegrees(86.925145, 27.988257), + Cesium.Cartographic.fromDegrees(87.0, 28.0) +]; +var promise = Cesium.sampleTerrain(terrainProvider, 11, positions); +Cesium.when(promise, function(updatedPositions) { + // positions[0].height and positions[1].height have been updated. + // updatedPositions is just a reference to positions. +}); + * @param terrainProvider - The terrain provider from which to query heights. + * @param level - The terrain level-of-detail from which to query terrain heights. + * @param positions - The positions to update with terrain heights. + * @returns A promise that resolves to the provided list of positions when terrain the query has completed. + */ +export function sampleTerrain(terrainProvider: TerrainProvider, level: number, positions: Cartographic[]): Promise; + +/** + * Initiates a sampleTerrain() request at the maximum available tile level for a terrain dataset. + * @example + * // Query the terrain height of two Cartographic positions +var terrainProvider = Cesium.createWorldTerrain(); +var positions = [ + Cesium.Cartographic.fromDegrees(86.925145, 27.988257), + Cesium.Cartographic.fromDegrees(87.0, 28.0) +]; +var promise = Cesium.sampleTerrainMostDetailed(terrainProvider, positions); +Cesium.when(promise, function(updatedPositions) { + // positions[0].height and positions[1].height have been updated. + // updatedPositions is just a reference to positions. +}); + * @param terrainProvider - The terrain provider from which to query heights. + * @param positions - The positions to update with terrain heights. + * @returns A promise that resolves to the provided list of positions when terrain the query has completed. This + promise will reject if the terrain provider's `availability` property is undefined. + */ +export function sampleTerrainMostDetailed(terrainProvider: TerrainProvider, positions: Cartographic[]): Promise; + +/** + * Handles user input events. Custom functions can be added to be executed on +when the user enters input. + * @param [element = document] - The element to add events to. + */ +export class ScreenSpaceEventHandler { + constructor(element?: HTMLCanvasElement); + /** + * Set a function to be executed on an input event. + * @param action - Function to be executed when the input event occurs. + * @param type - The ScreenSpaceEventType of input event. + * @param [modifier] - A KeyboardEventModifier key that is held when a type + event occurs. + */ + setInputAction(action: (...params: any[]) => any, type: number, modifier?: number): void; + /** + * Returns the function to be executed on an input event. + * @param type - The ScreenSpaceEventType of input event. + * @param [modifier] - A KeyboardEventModifier key that is held when a type + event occurs. + * @returns The function to be executed on an input event. + */ + getInputAction(type: number, modifier?: number): (...params: any[]) => any; + /** + * Removes the function to be executed on an input event. + * @param type - The ScreenSpaceEventType of input event. + * @param [modifier] - A KeyboardEventModifier key that is held when a type + event occurs. + */ + removeInputAction(type: number, modifier?: number): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes listeners held by this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * handler = handler && handler.destroy(); + */ + destroy(): void; + /** + * The amount of time, in milliseconds, that mouse events will be disabled after + receiving any touch events, such that any emulated mouse events will be ignored. + */ + static mouseEmulationIgnoreMilliseconds: number; + /** + * The amount of time, in milliseconds, before a touch on the screen becomes a + touch and hold. + */ + static touchHoldDelayMilliseconds: number; +} + +/** + * This enumerated type is for classifying mouse events: down, up, click, double click, move and move while a button is held down. + */ +export enum ScreenSpaceEventType { + /** + * Represents a mouse left button down event. + */ + LEFT_DOWN = 0, + /** + * Represents a mouse left button up event. + */ + LEFT_UP = 1, + /** + * Represents a mouse left click event. + */ + LEFT_CLICK = 2, + /** + * Represents a mouse left double click event. + */ + LEFT_DOUBLE_CLICK = 3, + /** + * Represents a mouse left button down event. + */ + RIGHT_DOWN = 5, + /** + * Represents a mouse right button up event. + */ + RIGHT_UP = 6, + /** + * Represents a mouse right click event. + */ + RIGHT_CLICK = 7, + /** + * Represents a mouse middle button down event. + */ + MIDDLE_DOWN = 10, + /** + * Represents a mouse middle button up event. + */ + MIDDLE_UP = 11, + /** + * Represents a mouse middle click event. + */ + MIDDLE_CLICK = 12, + /** + * Represents a mouse move event. + */ + MOUSE_MOVE = 15, + /** + * Represents a mouse wheel event. + */ + WHEEL = 16, + /** + * Represents the start of a two-finger event on a touch surface. + */ + PINCH_START = 17, + /** + * Represents the end of a two-finger event on a touch surface. + */ + PINCH_END = 18, + /** + * Represents a change of a two-finger event on a touch surface. + */ + PINCH_MOVE = 19 +} + +/** + * Value and type information for per-instance geometry attribute that determines if the geometry instance will be shown. + * @example + * var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.BoxGeometry({ + vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL, + minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0), + maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0) + }), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), + id : 'box', + attributes : { + show : new Cesium.ShowGeometryInstanceAttribute(false) + } +}); + * @param [show = true] - Determines if the geometry instance will be shown. + */ +export class ShowGeometryInstanceAttribute { + constructor(show?: boolean); + /** + * The values for the attributes stored in a typed array. + */ + value: Uint8Array; + /** + * The datatype of each component in the attribute, e.g., individual elements in + {@link ColorGeometryInstanceAttribute#value}. + */ + readonly componentDatatype: ComponentDatatype; + /** + * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}. + */ + readonly componentsPerAttribute: number; + /** + * When true and componentDatatype is an integer format, + indicate that the components should be mapped to the range [0, 1] (unsigned) + or [-1, 1] (signed) when they are accessed as floating-point for rendering. + */ + readonly normalize: boolean; + /** + * Converts a boolean show to a typed array that can be used to assign a show attribute. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true, attributes.show); + * @param show - The show value. + * @param [result] - The array to store the result in, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + static toValue(show: boolean, result?: Uint8Array): Uint8Array; +} + +/** + * Contains functions for finding the Cartesian coordinates of the sun and the moon in the +Earth-centered inertial frame. + */ +export namespace Simon1994PlanetaryPositions { + /** + * Computes the position of the Sun in the Earth-centered inertial frame + * @param [julianDate] - The time at which to compute the Sun's position, if not provided the current system time is used. + * @param [result] - The object onto which to store the result. + * @returns Calculated sun position + */ + function computeSunPositionInEarthInertialFrame(julianDate?: JulianDate, result?: Cartesian3): Cartesian3; + /** + * Computes the position of the Moon in the Earth-centered inertial frame + * @param [julianDate] - The time at which to compute the Sun's position, if not provided the current system time is used. + * @param [result] - The object onto which to store the result. + * @returns Calculated moon position + */ + function computeMoonPositionInEarthInertialFrame(julianDate?: JulianDate, result?: Cartesian3): Cartesian3; +} + +/** + * A description of a polyline modeled as a line strip; the first two positions define a line segment, +and each additional position defines a line segment from the previous position. + * @example + * // A polyline with two connected line segments +var polyline = new Cesium.SimplePolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 5.0, 0.0, + 5.0, 5.0 + ]) +}); +var geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline); + * @param options - Object with the following properties: + * @param options.positions - An array of {@link Cartesian3} defining the positions in the polyline as a line strip. + * @param [options.colors] - An Array of {@link Color} defining the per vertex or per segment colors. + * @param [options.colorsPerVertex = false] - A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices. + * @param [options.arcType = ArcType.GEODESIC] - The type of line the polyline segments must follow. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid to be used as a reference. + */ +export class SimplePolylineGeometry { + constructor(options: { + positions: Cartesian3[]; + colors?: Color[]; + colorsPerVertex?: boolean; + arcType?: ArcType; + granularity?: number; + ellipsoid?: Ellipsoid; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: SimplePolylineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new SimplePolylineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: SimplePolylineGeometry): SimplePolylineGeometry; + /** + * Computes the geometric representation of a simple polyline, including its vertices, indices, and a bounding sphere. + * @param simplePolylineGeometry - A description of the polyline. + * @returns The computed vertices and indices. + */ + static createGeometry(simplePolylineGeometry: SimplePolylineGeometry): Geometry | undefined; +} + +/** + * A description of a sphere centered at the origin. + * @example + * var sphere = new Cesium.SphereGeometry({ + radius : 100.0, + vertexFormat : Cesium.VertexFormat.POSITION_ONLY +}); +var geometry = Cesium.SphereGeometry.createGeometry(sphere); + * @param [options] - Object with the following properties: + * @param [options.radius = 1.0] - The radius of the sphere. + * @param [options.stackPartitions = 64] - The number of times to partition the ellipsoid into stacks. + * @param [options.slicePartitions = 64] - The number of times to partition the ellipsoid into radial slices. + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class SphereGeometry { + constructor(options?: { + radius?: number; + stackPartitions?: number; + slicePartitions?: number; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: SphereGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new SphereGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: SphereGeometry): SphereGeometry; + /** + * Computes the geometric representation of a sphere, including its vertices, indices, and a bounding sphere. + * @param sphereGeometry - A description of the sphere. + * @returns The computed vertices and indices. + */ + static createGeometry(sphereGeometry: SphereGeometry): Geometry | undefined; +} + +/** + * A description of the outline of a sphere. + * @example + * var sphere = new Cesium.SphereOutlineGeometry({ + radius : 100.0, + stackPartitions : 6, + slicePartitions: 5 +}); +var geometry = Cesium.SphereOutlineGeometry.createGeometry(sphere); + * @param [options] - Object with the following properties: + * @param [options.radius = 1.0] - The radius of the sphere. + * @param [options.stackPartitions = 10] - The count of stacks for the sphere (1 greater than the number of parallel lines). + * @param [options.slicePartitions = 8] - The count of slices for the sphere (Equal to the number of radial lines). + * @param [options.subdivisions = 200] - The number of points per line, determining the granularity of the curvature . + */ +export class SphereOutlineGeometry { + constructor(options?: { + radius?: number; + stackPartitions?: number; + slicePartitions?: number; + subdivisions?: number; + }); + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: SphereOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new SphereOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: SphereOutlineGeometry): SphereOutlineGeometry; + /** + * Computes the geometric representation of an outline of a sphere, including its vertices, indices, and a bounding sphere. + * @param sphereGeometry - A description of the sphere outline. + * @returns The computed vertices and indices. + */ + static createGeometry(sphereGeometry: SphereOutlineGeometry): Geometry | undefined; +} + +/** + * A set of curvilinear 3-dimensional coordinates. + * @param [clock = 0.0] - The angular coordinate lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. + * @param [cone = 0.0] - The angular coordinate measured from the positive z-axis and toward the negative z-axis. + * @param [magnitude = 1.0] - The linear coordinate measured from the origin. + */ +export class Spherical { + constructor(clock?: number, cone?: number, magnitude?: number); + /** + * The clock component. + */ + clock: number; + /** + * The cone component. + */ + cone: number; + /** + * The magnitude component. + */ + magnitude: number; + /** + * Converts the provided Cartesian3 into Spherical coordinates. + * @param cartesian3 - The Cartesian3 to be converted to Spherical. + * @param [result] - The object in which the result will be stored, if undefined a new instance will be created. + * @returns The modified result parameter, or a new instance if one was not provided. + */ + static fromCartesian3(cartesian3: Cartesian3, result?: Spherical): Spherical; + /** + * Creates a duplicate of a Spherical. + * @param spherical - The spherical to clone. + * @param [result] - The object to store the result into, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. (Returns undefined if spherical is undefined) + */ + static clone(spherical: Spherical, result?: Spherical): Spherical; + /** + * Computes the normalized version of the provided spherical. + * @param spherical - The spherical to be normalized. + * @param [result] - The object to store the result into, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + static normalize(spherical: Spherical, result?: Spherical): Spherical; + /** + * Returns true if the first spherical is equal to the second spherical, false otherwise. + * @param left - The first Spherical to be compared. + * @param right - The second Spherical to be compared. + * @returns true if the first spherical is equal to the second spherical, false otherwise. + */ + static equals(left: Spherical, right: Spherical): boolean; + /** + * Returns true if the first spherical is within the provided epsilon of the second spherical, false otherwise. + * @param left - The first Spherical to be compared. + * @param right - The second Spherical to be compared. + * @param [epsilon = 0.0] - The epsilon to compare against. + * @returns true if the first spherical is within the provided epsilon of the second spherical, false otherwise. + */ + static equalsEpsilon(left: Spherical, right: Spherical, epsilon?: number): boolean; + /** + * Returns true if this spherical is equal to the provided spherical, false otherwise. + * @param other - The Spherical to be compared. + * @returns true if this spherical is equal to the provided spherical, false otherwise. + */ + equals(other: Spherical): boolean; + /** + * Creates a duplicate of this Spherical. + * @param [result] - The object to store the result into, if undefined a new instance will be created. + * @returns The modified result parameter or a new instance if result was undefined. + */ + clone(result?: Spherical): Spherical; + /** + * Returns true if this spherical is within the provided epsilon of the provided spherical, false otherwise. + * @param other - The Spherical to be compared. + * @param epsilon - The epsilon to compare against. + * @returns true if this spherical is within the provided epsilon of the provided spherical, false otherwise. + */ + equalsEpsilon(other: Spherical, epsilon: number): boolean; + /** + * Returns a string representing this instance in the format (clock, cone, magnitude). + * @returns A string representing this instance. + */ + toString(): string; +} + +/** + * Creates a curve parameterized and evaluated by time. This type describes an interface +and is not intended to be instantiated directly. + */ +export class Spline { + constructor(); + /** + * An array of times for the control points. + */ + times: number[]; + /** + * An array of control points. + */ + points: Cartesian3[] | Quaternion[]; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: Cartesian3 | Quaternion | number[]): Cartesian3 | Quaternion | number[]; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @param startIndex - The index from which to start the search. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number, startIndex: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around the animation period. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; +} + +/** + * Subdivides an array into a number of smaller, equal sized arrays. + * @param array - The array to divide. + * @param numberOfArrays - The number of arrays to divide the provided array into. + */ +export function subdivideArray(array: any[], numberOfArrays: number): void; + +/** + * A wrapper around a web worker that allows scheduling tasks for a given worker, +returning results asynchronously via a promise. + +The Worker is not constructed until a task is scheduled. + * @param workerPath - The Url to the worker. This can either be an absolute path or relative to the Cesium Workers folder. + * @param [maximumActiveTasks = Number.POSITIVE_INFINITY] - The maximum number of active tasks. Once exceeded, + scheduleTask will not queue any more tasks, allowing + work to be rescheduled in future frames. + */ +export class TaskProcessor { + constructor(workerPath: string, maximumActiveTasks?: number); + /** + * Schedule a task to be processed by the web worker asynchronously. If there are currently more + tasks active than the maximum set by the constructor, will immediately return undefined. + Otherwise, returns a promise that will resolve to the result posted back by the worker when + finished. + * @example + * var taskProcessor = new Cesium.TaskProcessor('myWorkerPath'); + var promise = taskProcessor.scheduleTask({ + someParameter : true, + another : 'hello' + }); + if (!Cesium.defined(promise)) { + // too many active tasks - try again later + } else { + Cesium.when(promise, function(result) { + // use the result of the task + }); + } + * @param parameters - Any input data that will be posted to the worker. + * @param [transferableObjects] - An array of objects contained in parameters that should be + transferred to the worker instead of copied. + * @returns Either a promise that will resolve to the result when available, or undefined + if there are too many active tasks, + */ + scheduleTask(parameters: any, transferableObjects?: object[]): Promise | undefined; + /** + * Posts a message to a web worker with configuration to initialize loading + and compiling a web assembly module asychronously, as well as an optional + fallback JavaScript module to use if Web Assembly is not supported. + * @param [webAssemblyOptions] - An object with the following properties: + * @param [webAssemblyOptions.modulePath] - The path of the web assembly JavaScript wrapper module. + * @param [webAssemblyOptions.wasmBinaryFile] - The path of the web assembly binary file. + * @param [webAssemblyOptions.fallbackModulePath] - The path of the fallback JavaScript module to use if web assembly is not supported. + * @returns A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks. + */ + initWebAssemblyModule(webAssemblyOptions?: { + modulePath?: string; + wasmBinaryFile?: string; + fallbackModulePath?: string; + }): Promise; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys this object. This will immediately terminate the Worker. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + */ + destroy(): void; +} + +/** + * Terrain data for a single tile. This type describes an +interface and is not intended to be instantiated directly. + */ +export class TerrainData { + constructor(); + /** + * An array of credits for this tile. + */ + credits: Credit[]; + /** + * The water mask included in this terrain data, if any. A water mask is a rectangular + Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land. + Values in between 0 and 255 are allowed as well to smoothly blend between land and water. + */ + waterMask: Uint8Array | HTMLImageElement | HTMLCanvasElement; + /** + * Computes the terrain height at a specified longitude and latitude. + * @param rectangle - The rectangle covered by this terrain data. + * @param longitude - The longitude in radians. + * @param latitude - The latitude in radians. + * @returns The terrain height at the specified position. If the position + is outside the rectangle, this method will extrapolate the height, which is likely to be wildly + incorrect for positions far outside the rectangle. + */ + interpolateHeight(rectangle: Rectangle, longitude: number, latitude: number): number; + /** + * Determines if a given child tile is available, based on the + {@link TerrainData#childTileMask}. The given child tile coordinates are assumed + to be one of the four children of this tile. If non-child tile coordinates are + given, the availability of the southeast child tile is returned. + * @param thisX - The tile X coordinate of this (the parent) tile. + * @param thisY - The tile Y coordinate of this (the parent) tile. + * @param childX - The tile X coordinate of the child tile to check for availability. + * @param childY - The tile Y coordinate of the child tile to check for availability. + * @returns True if the child tile is available; otherwise, false. + */ + isChildAvailable(thisX: number, thisY: number, childX: number, childY: number): boolean; + /** + * Upsamples this terrain data for use by a descendant tile. + * @param tilingScheme - The tiling scheme of this terrain data. + * @param thisX - The X coordinate of this tile in the tiling scheme. + * @param thisY - The Y coordinate of this tile in the tiling scheme. + * @param thisLevel - The level of this tile in the tiling scheme. + * @param descendantX - The X coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantY - The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling. + * @param descendantLevel - The level within the tiling scheme of the descendant tile for which we are upsampling. + * @returns A promise for upsampled terrain data for the descendant tile, + or undefined if too many asynchronous upsample operations are in progress and the request has been + deferred. + */ + upsample(tilingScheme: TilingScheme, thisX: number, thisY: number, thisLevel: number, descendantX: number, descendantY: number, descendantLevel: number): Promise | undefined; + /** + * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution + terrain data. If this value is false, the data was obtained from some other source, such + as by downloading it from a remote server. This method should return true for instances + returned from a call to {@link TerrainData#upsample}. + * @returns True if this instance was created by upsampling; otherwise, false. + */ + wasCreatedByUpsampling(): boolean; +} + +/** + * Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is +organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an +interface and is not intended to be instantiated directly. + */ +export class TerrainProvider { + constructor(); + /** + * Gets an event that is raised when the terrain provider encounters an asynchronous error.. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + errorEvent: Event; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should + not be called before {@link TerrainProvider#ready} returns true. + */ + credit: Credit; + /** + * Gets the tiling scheme used by the provider. This function should + not be called before {@link TerrainProvider#ready} returns true. + */ + tilingScheme: TilingScheme; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link TerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link TerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link TerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. + */ + availability: TileAvailability; + /** + * Gets a list of indices for a triangle mesh representing a regular grid. Calling + this function multiple times with the same grid width and height returns the + same list of indices. The total number of vertices must be less than or equal + to 65536. + * @param width - The number of vertices in the regular grid in the horizontal direction. + * @param height - The number of vertices in the regular grid in the vertical direction. + * @returns The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less. + */ + static getRegularGridIndices(width: number, height: number): Uint16Array | Uint32Array; + /** + * Specifies the quality of terrain created from heightmaps. A value of 1.0 will + ensure that adjacent heightmap vertices are separated by no more than + {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly. + A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the + screen pixels between adjacent heightmap vertices and thus rendering more quickly. + */ + static heightmapTerrainQuality: number; + /** + * Determines an appropriate geometric error estimate when the geometry comes from a heightmap. + * @param ellipsoid - The ellipsoid to which the terrain is attached. + * @param tileImageWidth - The width, in pixels, of the heightmap associated with a single tile. + * @param numberOfTilesAtLevelZero - The number of tiles in the horizontal direction at tile level zero. + * @returns An estimated geometric error. + */ + static getEstimatedLevelZeroGeometricErrorForAHeightmap(ellipsoid: Ellipsoid, tileImageWidth: number, numberOfTilesAtLevelZero: number): number; + /** + * Requests the geometry for a given tile. This function should not be called before + {@link TerrainProvider#ready} returns true. The result must include terrain data and + may optionally include a water mask and an indication of which child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets the maximum geometric error allowed in a tile at a given level. This function should not be + called before {@link TerrainProvider#ready} returns true. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported by the terrain provider, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * Reports the availability of tiles in a {@link TilingScheme}. + * @param tilingScheme - The tiling scheme in which to report availability. + * @param maximumLevel - The maximum tile level that is potentially available. + */ +export class TileAvailability { + constructor(tilingScheme: TilingScheme, maximumLevel: number); + /** + * Marks a rectangular range of tiles in a particular level as being available. For best performance, + add your ranges in order of increasing level. + * @param level - The level. + * @param startX - The X coordinate of the first available tiles at the level. + * @param startY - The Y coordinate of the first available tiles at the level. + * @param endX - The X coordinate of the last available tiles at the level. + * @param endY - The Y coordinate of the last available tiles at the level. + */ + addAvailableTileRange(level: number, startX: number, startY: number, endX: number, endY: number): void; + /** + * Determines the level of the most detailed tile covering the position. This function + usually completes in time logarithmic to the number of rectangles added with + {@link TileAvailability#addAvailableTileRange}. + * @param position - The position for which to determine the maximum available level. The height component is ignored. + * @returns The level of the most detailed tile covering the position. + */ + computeMaximumLevelAtPosition(position: Cartographic): number; + /** + * Finds the most detailed level that is available _everywhere_ within a given rectangle. More detailed + tiles may be available in parts of the rectangle, but not the whole thing. The return value of this + function may be safely passed to {@link sampleTerrain} for any position within the rectangle. This function + usually completes in time logarithmic to the number of rectangles added with + {@link TileAvailability#addAvailableTileRange}. + * @param rectangle - The rectangle. + * @returns The best available level for the entire rectangle. + */ + computeBestAvailableLevelOverRectangle(rectangle: Rectangle): number; + /** + * Determines if a particular tile is available. + * @param level - The tile level to check. + * @param x - The X coordinate of the tile to check. + * @param y - The Y coordinate of the tile to check. + * @returns True if the tile is available; otherwise, false. + */ + isTileAvailable(level: number, x: number, y: number): boolean; + /** + * Computes a bit mask indicating which of a tile's four children exist. + If a child's bit is set, a tile is available for that child. If it is cleared, + the tile is not available. The bit values are as follows: + + + + + + +
Bit PositionBit ValueChild Tile
01Southwest
12Southeast
24Northwest
38Northeast
+ * @param level - The level of the parent tile. + * @param x - The X coordinate of the parent tile. + * @param y - The Y coordinate of the parent tile. + * @returns The bit mask indicating child availability. + */ + computeChildMaskForTile(level: number, x: number, y: number): number; +} + +/** + * Provides details about an error that occurred in an {@link ImageryProvider} or a {@link TerrainProvider}. + * @param provider - The imagery or terrain provider that experienced the error. + * @param message - A message describing the error. + * @param [x] - The X coordinate of the tile that experienced the error, or undefined if the error + is not specific to a particular tile. + * @param [y] - The Y coordinate of the tile that experienced the error, or undefined if the error + is not specific to a particular tile. + * @param [level] - The level of the tile that experienced the error, or undefined if the error + is not specific to a particular tile. + * @param [timesRetried = 0] - The number of times this operation has been retried. + * @param [error] - The error or exception that occurred, if any. + */ +export class TileProviderError { + constructor(provider: ImageryProvider | TerrainProvider, message: string, x?: number, y?: number, level?: number, timesRetried?: number, error?: Error); + /** + * The {@link ImageryProvider} or {@link TerrainProvider} that experienced the error. + */ + provider: ImageryProvider | TerrainProvider; + /** + * The message describing the error. + */ + message: string; + /** + * The X coordinate of the tile that experienced the error. If the error is not specific + to a particular tile, this property will be undefined. + */ + x: number; + /** + * The Y coordinate of the tile that experienced the error. If the error is not specific + to a particular tile, this property will be undefined. + */ + y: number; + /** + * The level-of-detail of the tile that experienced the error. If the error is not specific + to a particular tile, this property will be undefined. + */ + level: number; + /** + * The number of times this operation has been retried. + */ + timesRetried: number; + /** + * True if the failed operation should be retried; otherwise, false. The imagery or terrain provider + will set the initial value of this property before raising the event, but any listeners + can change it. The value after the last listener is invoked will be acted upon. + */ + retry: boolean; + /** + * The error or exception that occurred, if any. + */ + error: Error; + /** + * Handles an error in an {@link ImageryProvider} or {@link TerrainProvider} by raising an event if it has any listeners, or by + logging the error to the console if the event has no listeners. This method also tracks the number + of times the operation has been retried and will automatically retry if requested to do so by the + event listeners. + * @param previousError - The error instance returned by this function the last + time it was called for this error, or undefined if this is the first time this error has + occurred. + * @param provider - The imagery or terrain provider that encountered the error. + * @param event - The event to raise to inform listeners of the error. + * @param message - The message describing the error. + * @param x - The X coordinate of the tile that experienced the error, or undefined if the + error is not specific to a particular tile. + * @param y - The Y coordinate of the tile that experienced the error, or undefined if the + error is not specific to a particular tile. + * @param level - The level-of-detail of the tile that experienced the error, or undefined if the + error is not specific to a particular tile. + * @param retryFunction - The function to call to retry the operation. If undefined, the + operation will not be retried. + * @param [errorDetails] - The error or exception that occurred, if any. + * @returns The error instance that was passed to the event listeners and that + should be passed to this function the next time it is called for the same error in order + to track retry counts. + */ + static handleError(previousError: TileProviderError, provider: ImageryProvider | TerrainProvider, event: Event, message: string, x: number, y: number, level: number, retryFunction: TileProviderError.RetryFunction, errorDetails?: Error): TileProviderError; + /** + * Handles success of an operation by resetting the retry count of a previous error, if any. This way, + if the error occurs again in the future, the listeners will be informed that it has not yet been retried. + * @param previousError - The previous error, or undefined if this operation has + not previously resulted in an error. + */ + static handleSuccess(previousError: TileProviderError): void; +} + +export namespace TileProviderError { + /** + * A function that will be called to retry the operation. + */ + type RetryFunction = () => void; +} + +/** + * A tiling scheme for geometry or imagery on the surface of an ellipsoid. At level-of-detail zero, +the coarsest, least-detailed level, the number of tiles is configurable. +At level of detail one, each of the level zero tiles has four children, two in each direction. +At level of detail two, each of the level one tiles has four children, two in each direction. +This continues for as many levels as are present in the geometry or imagery source. + */ +export class TilingScheme { + constructor(); + /** + * Gets the ellipsoid that is tiled by the tiling scheme. + */ + ellipsoid: Ellipsoid; + /** + * Gets the rectangle, in radians, covered by this tiling scheme. + */ + rectangle: Rectangle; + /** + * Gets the map projection used by the tiling scheme. + */ + projection: MapProjection; + /** + * Gets the total number of tiles in the X direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the X direction at the given level. + */ + getNumberOfXTilesAtLevel(level: number): number; + /** + * Gets the total number of tiles in the Y direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the Y direction at the given level. + */ + getNumberOfYTilesAtLevel(level: number): number; + /** + * Transforms a rectangle specified in geodetic radians to the native coordinate system + of this tiling scheme. + * @param rectangle - The rectangle to transform. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the native rectangle if 'result' + is undefined. + */ + rectangleToNativeRectangle(rectangle: Rectangle, result?: Rectangle): Rectangle; + /** + * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates + of the tiling scheme. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToNativeRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Converts tile x, y coordinates and level to a cartographic rectangle in radians. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Calculates the tile x, y coordinates of the tile containing + a given cartographic position. + * @param position - The position. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the tile x, y coordinates + if 'result' is undefined. + */ + positionToTileXY(position: Cartographic, level: number, result?: Cartesian2): Cartesian2; +} + +/** + * An interval defined by a start and a stop time; optionally including those times as part of the interval. +Arbitrary data can optionally be associated with each instance for used with {@link TimeIntervalCollection}. + * @example + * // Create an instance that spans August 1st, 1980 and is associated +// with a Cartesian position. +var timeInterval = new Cesium.TimeInterval({ + start : Cesium.JulianDate.fromIso8601('1980-08-01T00:00:00Z'), + stop : Cesium.JulianDate.fromIso8601('1980-08-02T00:00:00Z'), + isStartIncluded : true, + isStopIncluded : false, + data : Cesium.Cartesian3.fromDegrees(39.921037, -75.170082) +}); + * @example + * // Create two instances from ISO 8601 intervals with associated numeric data +// then compute their intersection, summing the data they contain. +var left = Cesium.TimeInterval.fromIso8601({ + iso8601 : '2000/2010', + data : 2 +}); + +var right = Cesium.TimeInterval.fromIso8601({ + iso8601 : '1995/2005', + data : 3 +}); + +//The result of the below intersection will be an interval equivalent to +//var intersection = Cesium.TimeInterval.fromIso8601({ +// iso8601 : '2000/2005', +// data : 5 +//}); +var intersection = new Cesium.TimeInterval(); +Cesium.TimeInterval.intersect(left, right, intersection, function(leftData, rightData) { + return leftData + rightData; +}); + * @example + * // Check if an interval contains a specific time. +var dateToCheck = Cesium.JulianDate.fromIso8601('1982-09-08T11:30:00Z'); +var containsDate = Cesium.TimeInterval.contains(timeInterval, dateToCheck); + * @param [options] - Object with the following properties: + * @param [options.start = new JulianDate()] - The start time of the interval. + * @param [options.stop = new JulianDate()] - The stop time of the interval. + * @param [options.isStartIncluded = true] - true if options.start is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if options.stop is included in the interval, false otherwise. + * @param [options.data] - Arbitrary data associated with this interval. + */ +export class TimeInterval { + constructor(options?: { + start?: JulianDate; + stop?: JulianDate; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + data?: any; + }); + /** + * Gets or sets the start time of this interval. + */ + start: JulianDate; + /** + * Gets or sets the stop time of this interval. + */ + stop: JulianDate; + /** + * Gets or sets the data associated with this interval. + */ + data: any; + /** + * Gets or sets whether or not the start time is included in this interval. + */ + isStartIncluded: boolean; + /** + * Gets or sets whether or not the stop time is included in this interval. + */ + isStopIncluded: boolean; + /** + * Gets whether or not this interval is empty. + */ + readonly isEmpty: boolean; + /** + * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} interval. + * @param options - Object with the following properties: + * @param options.iso8601 - An ISO 8601 interval. + * @param [options.isStartIncluded = true] - true if options.start is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if options.stop is included in the interval, false otherwise. + * @param [options.data] - Arbitrary data associated with this interval. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromIso8601(options: { + iso8601: string; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + data?: any; + }, result?: TimeInterval): TimeInterval; + /** + * Creates an ISO8601 representation of the provided interval. + * @param timeInterval - The interval to be converted. + * @param [precision] - The number of fractional digits used to represent the seconds component. By default, the most precise representation is used. + * @returns The ISO8601 representation of the provided interval. + */ + static toIso8601(timeInterval: TimeInterval, precision?: number): string; + /** + * Duplicates the provided instance. + * @param [timeInterval] - The instance to clone. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static clone(timeInterval?: TimeInterval, result?: TimeInterval): TimeInterval; + /** + * Compares two instances and returns true if they are equal, false otherwise. + * @param [left] - The first instance. + * @param [right] - The second instance. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @returns true if the dates are equal; otherwise, false. + */ + static equals(left?: TimeInterval, right?: TimeInterval, dataComparer?: TimeInterval.DataComparer): boolean; + /** + * Compares two instances and returns true if they are within epsilon seconds of + each other. That is, in order for the dates to be considered equal (and for + this function to return true), the absolute value of the difference between them, in + seconds, must be less than epsilon. + * @param [left] - The first instance. + * @param [right] - The second instance. + * @param [epsilon = 0] - The maximum number of seconds that should separate the two instances. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @returns true if the two dates are within epsilon seconds of each other; otherwise false. + */ + static equalsEpsilon(left?: TimeInterval, right?: TimeInterval, epsilon?: number, dataComparer?: TimeInterval.DataComparer): boolean; + /** + * Computes the intersection of two intervals, optionally merging their data. + * @param left - The first interval. + * @param [right] - The second interval. + * @param [result] - An existing instance to use for the result. + * @param [mergeCallback] - A function which merges the data of the two intervals. If omitted, the data from the left interval will be used. + * @returns The modified result parameter. + */ + static intersect(left: TimeInterval, right?: TimeInterval, result?: TimeInterval, mergeCallback?: TimeInterval.MergeCallback): TimeInterval; + /** + * Checks if the specified date is inside the provided interval. + * @param timeInterval - The interval. + * @param julianDate - The date to check. + * @returns true if the interval contains the specified date, false otherwise. + */ + static contains(timeInterval: TimeInterval, julianDate: JulianDate): boolean; + /** + * Duplicates this instance. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + clone(result?: TimeInterval): TimeInterval; + /** + * Compares this instance against the provided instance componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side interval. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @returns true if they are equal, false otherwise. + */ + equals(right?: TimeInterval, dataComparer?: TimeInterval.DataComparer): boolean; + /** + * Compares this instance against the provided instance componentwise and returns + true if they are within the provided epsilon, + false otherwise. + * @param [right] - The right hand side interval. + * @param [epsilon = 0] - The epsilon to use for equality testing. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @returns true if they are within the provided epsilon, false otherwise. + */ + equalsEpsilon(right?: TimeInterval, epsilon?: number, dataComparer?: TimeInterval.DataComparer): boolean; + /** + * Creates a string representing this TimeInterval in ISO8601 format. + * @returns A string representing this TimeInterval in ISO8601 format. + */ + toString(): string; + /** + * An immutable empty interval. + */ + static readonly EMPTY: TimeInterval; +} + +export namespace TimeInterval { + /** + * Function interface for merging interval data. + * @param leftData - The first data instance. + * @param rightData - The second data instance. + */ + type MergeCallback = (leftData: any, rightData: any) => any; + /** + * Function interface for comparing interval data. + * @param leftData - The first data instance. + * @param rightData - The second data instance. + */ + type DataComparer = (leftData: any, rightData: any) => boolean; +} + +/** + * A non-overlapping collection of {@link TimeInterval} instances sorted by start time. + * @param [intervals] - An array of intervals to add to the collection. + */ +export class TimeIntervalCollection { + constructor(intervals?: TimeInterval[]); + /** + * Gets an event that is raised whenever the collection of intervals change. + */ + readonly changedEvent: Event; + /** + * Gets the start time of the collection. + */ + readonly start: JulianDate; + /** + * Gets whether or not the start time is included in the collection. + */ + readonly isStartIncluded: boolean; + /** + * Gets the stop time of the collection. + */ + readonly stop: JulianDate; + /** + * Gets whether or not the stop time is included in the collection. + */ + readonly isStopIncluded: boolean; + /** + * Gets the number of intervals in the collection. + */ + readonly length: number; + /** + * Gets whether or not the collection is empty. + */ + readonly isEmpty: boolean; + /** + * Compares this instance against the provided instance componentwise and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side collection. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @returns true if they are equal, false otherwise. + */ + equals(right?: TimeIntervalCollection, dataComparer?: TimeInterval.DataComparer): boolean; + /** + * Gets the interval at the specified index. + * @param index - The index of the interval to retrieve. + * @returns The interval at the specified index, or undefined if no interval exists as that index. + */ + get(index: number): TimeInterval | undefined; + /** + * Removes all intervals from the collection. + */ + removeAll(): void; + /** + * Finds and returns the interval that contains the specified date. + * @param date - The date to search for. + * @returns The interval containing the specified date, undefined if no such interval exists. + */ + findIntervalContainingDate(date: JulianDate): TimeInterval | undefined; + /** + * Finds and returns the data for the interval that contains the specified date. + * @param date - The date to search for. + * @returns The data for the interval containing the specified date, or undefined if no such interval exists. + */ + findDataForIntervalContainingDate(date: JulianDate): any; + /** + * Checks if the specified date is inside this collection. + * @param julianDate - The date to check. + * @returns true if the collection contains the specified date, false otherwise. + */ + contains(julianDate: JulianDate): boolean; + /** + * Finds and returns the index of the interval in the collection that contains the specified date. + * @param date - The date to search for. + * @returns The index of the interval that contains the specified date, if no such interval exists, + it returns a negative number which is the bitwise complement of the index of the next interval that + starts after the date, or if no interval starts after the specified date, the bitwise complement of + the length of the collection. + */ + indexOf(date: JulianDate): number; + /** + * Returns the first interval in the collection that matches the specified parameters. + All parameters are optional and undefined parameters are treated as a don't care condition. + * @param [options] - Object with the following properties: + * @param [options.start] - The start time of the interval. + * @param [options.stop] - The stop time of the interval. + * @param [options.isStartIncluded] - true if options.start is included in the interval, false otherwise. + * @param [options.isStopIncluded] - true if options.stop is included in the interval, false otherwise. + * @returns The first interval in the collection that matches the specified parameters. + */ + findInterval(options?: { + start?: JulianDate; + stop?: JulianDate; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + }): TimeInterval | undefined; + /** + * Adds an interval to the collection, merging intervals that contain the same data and + splitting intervals of different data as needed in order to maintain a non-overlapping collection. + The data in the new interval takes precedence over any existing intervals in the collection. + * @param interval - The interval to add. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + */ + addInterval(interval: TimeInterval, dataComparer?: TimeInterval.DataComparer): void; + /** + * Removes the specified interval from this interval collection, creating a hole over the specified interval. + The data property of the input interval is ignored. + * @param interval - The interval to remove. + * @returns true if the interval was removed, false if no part of the interval was in the collection. + */ + removeInterval(interval: TimeInterval): boolean; + /** + * Creates a new instance that is the intersection of this collection and the provided collection. + * @param other - The collection to intersect with. + * @param [dataComparer] - A function which compares the data of the two intervals. If omitted, reference equality is used. + * @param [mergeCallback] - A function which merges the data of the two intervals. If omitted, the data from the left interval will be used. + * @returns A new TimeIntervalCollection which is the intersection of this collection and the provided collection. + */ + intersect(other: TimeIntervalCollection, dataComparer?: TimeInterval.DataComparer, mergeCallback?: TimeInterval.MergeCallback): TimeIntervalCollection; + /** + * Creates a new instance from a JulianDate array. + * @param options - Object with the following properties: + * @param options.julianDates - An array of ISO 8601 dates. + * @param [options.isStartIncluded = true] - true if start time is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if stop time is included in the interval, false otherwise. + * @param [options.leadingInterval = false] - true if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, false otherwise. + * @param [options.trailingInterval = false] - true if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, false otherwise. + * @param [options.dataCallback] - A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromJulianDateArray(options: { + julianDates: JulianDate[]; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + leadingInterval?: boolean; + trailingInterval?: boolean; + dataCallback?: (...params: any[]) => any; + }, result?: TimeIntervalCollection): TimeIntervalCollection; + /** + * Creates a new instance from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} time interval (start/end/duration). + * @param options - Object with the following properties: + * @param options.iso8601 - An ISO 8601 interval. + * @param [options.isStartIncluded = true] - true if start time is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if stop time is included in the interval, false otherwise. + * @param [options.leadingInterval = false] - true if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, false otherwise. + * @param [options.trailingInterval = false] - true if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, false otherwise. + * @param [options.dataCallback] - A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromIso8601(options: { + iso8601: string; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + leadingInterval?: boolean; + trailingInterval?: boolean; + dataCallback?: (...params: any[]) => any; + }, result?: TimeIntervalCollection): TimeIntervalCollection; + /** + * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date array. + * @param options - Object with the following properties: + * @param options.iso8601Dates - An array of ISO 8601 dates. + * @param [options.isStartIncluded = true] - true if start time is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if stop time is included in the interval, false otherwise. + * @param [options.leadingInterval = false] - true if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, false otherwise. + * @param [options.trailingInterval = false] - true if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, false otherwise. + * @param [options.dataCallback] - A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromIso8601DateArray(options: { + iso8601Dates: string[]; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + leadingInterval?: boolean; + trailingInterval?: boolean; + dataCallback?: (...params: any[]) => any; + }, result?: TimeIntervalCollection): TimeIntervalCollection; + /** + * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} duration array. + * @param options - Object with the following properties: + * @param options.epoch - An date that the durations are relative to. + * @param options.iso8601Durations - An array of ISO 8601 durations. + * @param [options.relativeToPrevious = false] - true if durations are relative to previous date, false if always relative to the epoch. + * @param [options.isStartIncluded = true] - true if start time is included in the interval, false otherwise. + * @param [options.isStopIncluded = true] - true if stop time is included in the interval, false otherwise. + * @param [options.leadingInterval = false] - true if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, false otherwise. + * @param [options.trailingInterval = false] - true if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, false otherwise. + * @param [options.dataCallback] - A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection. + * @param [result] - An existing instance to use for the result. + * @returns The modified result parameter or a new instance if none was provided. + */ + static fromIso8601DurationArray(options: { + epoch: JulianDate; + iso8601Durations: string; + relativeToPrevious?: boolean; + isStartIncluded?: boolean; + isStopIncluded?: boolean; + leadingInterval?: boolean; + trailingInterval?: boolean; + dataCallback?: (...params: any[]) => any; + }, result?: TimeIntervalCollection): TimeIntervalCollection; +} + +/** + * Provides the type of time standards which JulianDate can take as input. + */ +export enum TimeStandard { + /** + * Represents the coordinated Universal Time (UTC) time standard. + + UTC is related to TAI according to the relationship + UTC = TAI - deltaT where deltaT is the number of leap + seconds which have been introduced as of the time in TAI. + */ + UTC = 0, + /** + * Represents the International Atomic Time (TAI) time standard. + TAI is the principal time standard to which the other time standards are related. + */ + TAI = 1 +} + +/** + * Contains functions for transforming positions to various reference frames. + */ +export namespace Transforms { + /** + * Generates a function that computes a 4x4 transformation matrix from a reference frame + centered at the provided origin to the provided ellipsoid's fixed reference frame. + * @param firstAxis - name of the first axis of the local reference frame. Must be + 'east', 'north', 'up', 'west', 'south' or 'down'. + * @param secondAxis - name of the second axis of the local reference frame. Must be + 'east', 'north', 'up', 'west', 'south' or 'down'. + * @returns The function that will computes a + 4x4 transformation matrix from a reference frame, with first axis and second axis compliant with the parameters, + */ + function localFrameToFixedFrameGenerator(firstAxis: string, secondAxis: string): Transforms.LocalFrameToFixedFrame; + /** + * Computes a 4x4 transformation matrix from a reference frame + centered at the provided origin to the provided ellipsoid's fixed reference frame. + * @param origin - The center point of the local reference frame. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + */ + type LocalFrameToFixedFrame = (origin: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix4) => Matrix4; + /** + * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes + centered at the provided origin to the provided ellipsoid's fixed reference frame. + The local axes are defined as: +
    +
  • The x axis points in the local east direction.
  • +
  • The y axis points in the local north direction.
  • +
  • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
  • +
+ * @example + * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var transform = Cesium.Transforms.eastNorthUpToFixedFrame(center); + * @param origin - The center point of the local reference frame. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if none was provided. + */ + function eastNorthUpToFixedFrame(origin: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix4): Matrix4; + /** + * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes + centered at the provided origin to the provided ellipsoid's fixed reference frame. + The local axes are defined as: +
    +
  • The x axis points in the local north direction.
  • +
  • The y axis points in the local east direction.
  • +
  • The z axis points in the opposite direction of the ellipsoid surface normal which passes through the position.
  • +
+ * @example + * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var transform = Cesium.Transforms.northEastDownToFixedFrame(center); + * @param origin - The center point of the local reference frame. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if none was provided. + */ + function northEastDownToFixedFrame(origin: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix4): Matrix4; + /** + * Computes a 4x4 transformation matrix from a reference frame with an north-up-east axes + centered at the provided origin to the provided ellipsoid's fixed reference frame. + The local axes are defined as: +
    +
  • The x axis points in the local north direction.
  • +
  • The y axis points in the direction of the ellipsoid surface normal which passes through the position.
  • +
  • The z axis points in the local east direction.
  • +
+ * @example + * // Get the transform from local north-up-east at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var transform = Cesium.Transforms.northUpEastToFixedFrame(center); + * @param origin - The center point of the local reference frame. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if none was provided. + */ + function northUpEastToFixedFrame(origin: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix4): Matrix4; + /** + * Computes a 4x4 transformation matrix from a reference frame with an north-west-up axes + centered at the provided origin to the provided ellipsoid's fixed reference frame. + The local axes are defined as: +
    +
  • The x axis points in the local north direction.
  • +
  • The y axis points in the local west direction.
  • +
  • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
  • +
+ * @example + * // Get the transform from local north-West-Up at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var transform = Cesium.Transforms.northWestUpToFixedFrame(center); + * @param origin - The center point of the local reference frame. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if none was provided. + */ + function northWestUpToFixedFrame(origin: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix4): Matrix4; + /** + * Computes a 4x4 transformation matrix from a reference frame with axes computed from the heading-pitch-roll angles + centered at the provided origin to the provided ellipsoid's fixed reference frame. Heading is the rotation from the local north + direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles + are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. + * @example + * // Get the transform from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var heading = -Cesium.Math.PI_OVER_TWO; + var pitch = Cesium.Math.PI_OVER_FOUR; + var roll = 0.0; + var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); + var transform = Cesium.Transforms.headingPitchRollToFixedFrame(center, hpr); + * @param origin - The center point of the local reference frame. + * @param headingPitchRoll - The heading, pitch, and roll. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [fixedFrameTransform = Transforms.eastNorthUpToFixedFrame] - A 4x4 transformation + matrix from a reference frame to the provided ellipsoid's fixed reference frame + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if none was provided. + */ + function headingPitchRollToFixedFrame(origin: Cartesian3, headingPitchRoll: HeadingPitchRoll, ellipsoid?: Ellipsoid, fixedFrameTransform?: Transforms.LocalFrameToFixedFrame, result?: Matrix4): Matrix4; + /** + * Computes a quaternion from a reference frame with axes computed from the heading-pitch-roll angles + centered at the provided origin. Heading is the rotation from the local north + direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles + are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. + * @example + * // Get the quaternion from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame. + var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var heading = -Cesium.Math.PI_OVER_TWO; + var pitch = Cesium.Math.PI_OVER_FOUR; + var roll = 0.0; + var hpr = new HeadingPitchRoll(heading, pitch, roll); + var quaternion = Cesium.Transforms.headingPitchRollQuaternion(center, hpr); + * @param origin - The center point of the local reference frame. + * @param headingPitchRoll - The heading, pitch, and roll. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [fixedFrameTransform = Transforms.eastNorthUpToFixedFrame] - A 4x4 transformation + matrix from a reference frame to the provided ellipsoid's fixed reference frame + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Quaternion instance if none was provided. + */ + function headingPitchRollQuaternion(origin: Cartesian3, headingPitchRoll: HeadingPitchRoll, ellipsoid?: Ellipsoid, fixedFrameTransform?: Transforms.LocalFrameToFixedFrame, result?: Quaternion): Quaternion; + /** + * Computes heading-pitch-roll angles from a transform in a particular reference frame. Heading is the rotation from the local north + direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles + are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. + * @param transform - The transform + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [fixedFrameTransform = Transforms.eastNorthUpToFixedFrame] - A 4x4 transformation + matrix from a reference frame to the provided ellipsoid's fixed reference frame + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new HeadingPitchRoll instance if none was provided. + */ + function fixedFrameToHeadingPitchRoll(transform: Matrix4, ellipsoid?: Ellipsoid, fixedFrameTransform?: Transforms.LocalFrameToFixedFrame, result?: HeadingPitchRoll): HeadingPitchRoll; + /** + * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the + pseudo-fixed axes at a given time. This method treats the UT1 time standard as equivalent to UTC. + * @example + * //Set the view to the inertial frame. + scene.postUpdate.addEventListener(function(scene, time) { + var now = Cesium.JulianDate.now(); + var offset = Cesium.Matrix4.multiplyByPoint(camera.transform, camera.position, new Cesium.Cartesian3()); + var transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Transforms.computeTemeToPseudoFixedMatrix(now)); + var inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4()); + Cesium.Matrix4.multiplyByPoint(inverseTransform, offset, offset); + camera.lookAtTransform(transform, offset); + }); + * @param date - The time at which to compute the rotation matrix. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if none was provided. + */ + function computeTemeToPseudoFixedMatrix(date: JulianDate, result?: Matrix3): Matrix3; + /** + * Preloads the data necessary to transform between the ICRF and Fixed axes, in either + direction, over a given interval. This function returns a promise that, when resolved, + indicates that the preload has completed. + * @example + * var interval = new Cesium.TimeInterval(...); + when(Cesium.Transforms.preloadIcrfFixed(interval), function() { + // the data is now loaded + }); + * @param timeInterval - The interval to preload. + * @returns A promise that, when resolved, indicates that the preload has completed + and evaluation of the transformation between the fixed and ICRF axes will + no longer return undefined for a time inside the interval. + */ + function preloadIcrfFixed(timeInterval: TimeInterval): Promise; + /** + * Computes a rotation matrix to transform a point or vector from the International Celestial + Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF) + at a given time. This function may return undefined if the data necessary to + do the transformation is not yet loaded. + * @example + * scene.postUpdate.addEventListener(function(scene, time) { + // View in ICRF. + var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time); + if (Cesium.defined(icrfToFixed)) { + var offset = Cesium.Cartesian3.clone(camera.position); + var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed); + camera.lookAtTransform(transform, offset); + } + }); + * @param date - The time at which to compute the rotation matrix. + * @param [result] - The object onto which to store the result. If this parameter is + not specified, a new instance is created and returned. + * @returns The rotation matrix, or undefined if the data necessary to do the + transformation is not yet loaded. + */ + function computeIcrfToFixedMatrix(date: JulianDate, result?: Matrix3): Matrix3; + /** + * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF) + to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes + at a given time. This function may return undefined if the data necessary to + do the transformation is not yet loaded. + * @example + * // Transform a point from the ICRF axes to the Fixed axes. + var now = Cesium.JulianDate.now(); + var pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now); + var pointInInertial = new Cesium.Cartesian3(); + if (Cesium.defined(fixedToIcrf)) { + pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial); + } + * @param date - The time at which to compute the rotation matrix. + * @param [result] - The object onto which to store the result. If this parameter is + not specified, a new instance is created and returned. + * @returns The rotation matrix, or undefined if the data necessary to do the + transformation is not yet loaded. + */ + function computeFixedToIcrfMatrix(date: JulianDate, result?: Matrix3): Matrix3; + /** + * Transform a point from model coordinates to window coordinates. + * @param modelViewProjectionMatrix - The 4x4 model-view-projection matrix. + * @param viewportTransformation - The 4x4 viewport transformation. + * @param point - The point to transform. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Cartesian2 instance if none was provided. + */ + function pointToWindowCoordinates(modelViewProjectionMatrix: Matrix4, viewportTransformation: Matrix4, point: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Transform a position and velocity to a rotation matrix. + * @param position - The position to transform. + * @param velocity - The velocity vector to transform. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose fixed frame is used in the transformation. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix3 instance if none was provided. + */ + function rotationMatrixFromPositionVelocity(position: Cartesian3, velocity: Cartesian3, ellipsoid?: Ellipsoid, result?: Matrix3): Matrix3; +} + +/** + * An affine transformation defined by a translation, rotation, and scale. + * @param [translation = Cartesian3.ZERO] - A {@link Cartesian3} specifying the (x, y, z) translation to apply to the node. + * @param [rotation = Quaternion.IDENTITY] - A {@link Quaternion} specifying the (x, y, z, w) rotation to apply to the node. + * @param [scale = new Cartesian3(1.0, 1.0, 1.0)] - A {@link Cartesian3} specifying the (x, y, z) scaling to apply to the node. + */ +export class TranslationRotationScale { + constructor(translation?: Cartesian3, rotation?: Quaternion, scale?: Cartesian3); + /** + * Gets or sets the (x, y, z) translation to apply to the node. + */ + translation: Cartesian3; + /** + * Gets or sets the (x, y, z, w) rotation to apply to the node. + */ + rotation: Quaternion; + /** + * Gets or sets the (x, y, z) scaling to apply to the node. + */ + scale: Cartesian3; + /** + * Compares this instance against the provided instance and returns + true if they are equal, false otherwise. + * @param [right] - The right hand side TranslationRotationScale. + * @returns true if they are equal, false otherwise. + */ + equals(right?: TranslationRotationScale): boolean; +} + +/** + * Uses the Tridiagonal Matrix Algorithm, also known as the Thomas Algorithm, to solve +a system of linear equations where the coefficient matrix is a tridiagonal matrix. + */ +export namespace TridiagonalSystemSolver { + /** + * Solves a tridiagonal system of linear equations. + * @example + * var lowerDiagonal = [1.0, 1.0, 1.0, 1.0]; + var diagonal = [2.0, 4.0, 4.0, 4.0, 2.0]; + var upperDiagonal = [1.0, 1.0, 1.0, 1.0]; + var rightHandSide = [ + new Cesium.Cartesian3(410757.0, -1595711.0, 1375302.0), + new Cesium.Cartesian3(-5986705.0, -2190640.0, 1099600.0), + new Cesium.Cartesian3(-12593180.0, 288588.0, -1755549.0), + new Cesium.Cartesian3(-5349898.0, 2457005.0, -2685438.0), + new Cesium.Cartesian3(845820.0, 1573488.0, -1205591.0) + ]; + + var solution = Cesium.TridiagonalSystemSolver.solve(lowerDiagonal, diagonal, upperDiagonal, rightHandSide); + * @param diagonal - An array with length n that contains the diagonal of the coefficient matrix. + * @param lower - An array with length n - 1 that contains the lower diagonal of the coefficient matrix. + * @param upper - An array with length n - 1 that contains the upper diagonal of the coefficient matrix. + * @param right - An array of Cartesians with length n that is the right side of the system of equations. + * @returns An array of Cartesians with length n that is the solution to the tridiagonal system of equations. + */ + function solve(diagonal: number[], lower: number[], upper: number[], right: Cartesian3[]): Cartesian3[]; +} + +/** + * A singleton that contains all of the servers that are trusted. Credentials will be sent with +any requests to these servers. + */ +export namespace TrustedServers { + /** + * Adds a trusted server to the registry + * @example + * // Add a trusted server + TrustedServers.add('my.server.com', 80); + * @param host - The host to be added. + * @param port - The port used to access the host. + */ + function add(host: string, port: number): void; + /** + * Removes a trusted server from the registry + * @example + * // Remove a trusted server + TrustedServers.remove('my.server.com', 80); + * @param host - The host to be removed. + * @param port - The port used to access the host. + */ + function remove(host: string, port: number): void; + /** + * Tests whether a server is trusted or not. The server must have been added with the port if it is included in the url. + * @example + * // Add server + TrustedServers.add('my.server.com', 81); + + // Check if server is trusted + if (TrustedServers.contains('https://my.server.com:81/path/to/file.png')) { + // my.server.com:81 is trusted + } + if (TrustedServers.contains('https://my.server.com/path/to/file.png')) { + // my.server.com isn't trusted + } + * @param url - The url to be tested against the trusted list + * @returns Returns true if url is trusted, false otherwise. + */ + function contains(url: string): boolean; + /** + * Clears the registry + * @example + * // Remove a trusted server + TrustedServers.clear(); + */ + function clear(): void; +} + +/** + * A vertex format defines what attributes make up a vertex. A VertexFormat can be provided +to a {@link Geometry} to request that certain properties be computed, e.g., just position, +position and normal, etc. + * @example + * // Create a vertex format with position and 2D texture coordinate attributes. +var format = new Cesium.VertexFormat({ + position : true, + st : true +}); + * @param [options] - An object with boolean properties corresponding to VertexFormat properties as shown in the code example. + */ +export class VertexFormat { + constructor(options?: any); + /** + * When true, the vertex has a 3D position attribute. +

+ 64-bit floating-point (for precision). 3 components per attribute. +

+ */ + position: boolean; + /** + * When true, the vertex has a normal attribute (normalized), which is commonly used for lighting. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + normal: boolean; + /** + * When true, the vertex has a 2D texture coordinate attribute. +

+ 32-bit floating-point. 2 components per attribute +

+ */ + st: boolean; + /** + * When true, the vertex has a bitangent attribute (normalized), which is used for tangent-space effects like bump mapping. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + bitangent: boolean; + /** + * When true, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping. +

+ 32-bit floating-point. 3 components per attribute. +

+ */ + tangent: boolean; + /** + * When true, the vertex has an RGB color attribute. +

+ 8-bit unsigned byte. 3 components per attribute. +

+ */ + color: boolean; + /** + * An immutable vertex format with only a position attribute. + */ + static readonly POSITION_ONLY: VertexFormat; + /** + * An immutable vertex format with position and normal attributes. + This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}. + */ + static readonly POSITION_AND_NORMAL: VertexFormat; + /** + * An immutable vertex format with position, normal, and st attributes. + This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport} + is TEXTURED/code>. + */ + static readonly POSITION_NORMAL_AND_ST: VertexFormat; + /** + * An immutable vertex format with position and st attributes. + This is compatible with {@link EllipsoidSurfaceAppearance}. + */ + static readonly POSITION_AND_ST: VertexFormat; + /** + * An immutable vertex format with position and color attributes. + */ + static readonly POSITION_AND_COLOR: VertexFormat; + /** + * An immutable vertex format with well-known attributes: position, normal, st, tangent, and bitangent. + */ + static readonly ALL: VertexFormat; + /** + * An immutable vertex format with position, normal, and st attributes. + This is compatible with most appearances and materials; however + normal and st attributes are not always required. When this is + known in advance, another VertexFormat should be used. + */ + static readonly DEFAULT: VertexFormat; + /** + * The number of elements used to pack the object into an array. + */ + static packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: VertexFormat, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new VertexFormat instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: VertexFormat): VertexFormat; + /** + * Duplicates a VertexFormat instance. + * @param vertexFormat - The vertex format to duplicate. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new VertexFormat instance if one was not provided. (Returns undefined if vertexFormat is undefined) + */ + static clone(vertexFormat: VertexFormat, result?: VertexFormat): VertexFormat; +} + +/** + * Synchronizes a video element with a simulation clock. + * @param [options] - Object with the following properties: + * @param [options.clock] - The clock instance used to drive the video. + * @param [options.element] - The video element to be synchronized. + * @param [options.epoch = Iso8601.MINIMUM_VALUE] - The simulation time that marks the start of the video. + * @param [options.tolerance = 1.0] - The maximum amount of time, in seconds, that the clock and video can diverge. + */ +export class VideoSynchronizer { + constructor(options?: { + clock?: Clock; + element?: HTMLVideoElement; + epoch?: JulianDate; + tolerance?: number; + }); + /** + * Gets or sets the simulation time that marks the start of the video. + */ + epoch: JulianDate; + /** + * Gets or sets the amount of time in seconds the video's currentTime + and the clock's currentTime can diverge before a video seek is performed. + Lower values make the synchronization more accurate but video + performance might suffer. Higher values provide better performance + but at the cost of accuracy. + */ + tolerance: number; + /** + * Gets or sets the clock used to drive the video element. + */ + clock: Clock; + /** + * Gets or sets the video element to synchronize. + */ + element: HTMLVideoElement; + /** + * Destroys and resources used by the object. Once an object is destroyed, it should not be used. + */ + destroy(): void; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; +} + +/** + * This enumerated type is used in determining to what extent an object, the occludee, +is visible during horizon culling. An occluder may fully block an occludee, in which case +it has no visibility, may partially block an occludee from view, or may not block it at all, +leading to full visibility. + */ +export enum Visibility { + /** + * Represents that no part of an object is visible. + */ + NONE = -1, + /** + * Represents that part, but not all, of an object is visible + */ + PARTIAL = 0, + /** + * Represents that an object is visible in its entirety. + */ + FULL = 1 +} + +/** + * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps +retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}. + * @example + * var terrainProvider = new Cesium.VRTheWorldTerrainProvider({ + url : 'https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/' +}); +viewer.terrainProvider = terrainProvider; + * @param options - Object with the following properties: + * @param options.url - The URL of the VR-TheWorld TileMap. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid. If this parameter is not + specified, the WGS84 ellipsoid is used. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + */ +export class VRTheWorldTerrainProvider { + constructor(options: { + url: Resource | string; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }); + /** + * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + errorEvent: Event; + /** + * Gets the credit to display when this terrain provider is active. Typically this is used to credit + the source of the terrain. This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true. + */ + credit: Credit; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link VRTheWorldTerrainProvider#ready} returns true. + */ + tilingScheme: GeographicTilingScheme; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets a value indicating whether or not the provider includes a water mask. The water mask + indicates which areas of the globe are water rather than land, so they can be rendered + as a reflective surface with animated waves. This function should not be + called before {@link VRTheWorldTerrainProvider#ready} returns true. + */ + hasWaterMask: boolean; + /** + * Gets a value indicating whether or not the requested tiles include vertex normals. + This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true. + */ + hasVertexNormals: boolean; + /** + * Gets an object that can be used to determine availability of terrain from this provider, such as + at points and in rectangles. This function should not be called before + {@link TerrainProvider#ready} returns true. This property may be undefined if availability + information is not available. + */ + availability: TileAvailability; + /** + * Requests the geometry for a given tile. This function should not be called before + {@link VRTheWorldTerrainProvider#ready} returns true. The result includes terrain + data and indicates that all child tiles are available. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the requested geometry. If this method + returns undefined instead of a promise, it is an indication that too many requests are already + pending and the request will be retried later. + */ + requestTileGeometry(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Gets the maximum geometric error allowed in a tile at a given level. + * @param level - The tile level for which to get the maximum geometric error. + * @returns The maximum geometric error. + */ + getLevelMaximumGeometricError(level: number): number; + /** + * Determines whether data for a tile is available to be loaded. + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if not supported, otherwise true or false. + */ + getTileDataAvailable(x: number, y: number, level: number): boolean; + /** + * Makes sure we load availability data for a tile + * @param x - The X coordinate of the tile for which to request geometry. + * @param y - The Y coordinate of the tile for which to request geometry. + * @param level - The level of the tile for which to request geometry. + * @returns Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded + */ + loadTileDataAvailability(x: number, y: number, level: number): undefined | Promise; +} + +/** + * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points, +which extrude down to the ground. Optionally, they can extrude downwards to a specified height. + * @example + * // create a wall that spans from ground level to 10000 meters +var wall = new Cesium.WallGeometry({ + positions : Cesium.Cartesian3.fromDegreesArrayHeights([ + 19.0, 47.0, 10000.0, + 19.0, 48.0, 10000.0, + 20.0, 48.0, 10000.0, + 20.0, 47.0, 10000.0, + 19.0, 47.0, 10000.0 + ]) +}); +var geometry = Cesium.WallGeometry.createGeometry(wall); + * @param options - Object with the following properties: + * @param options.positions - An array of Cartesian objects, which are the points of the wall. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.maximumHeights] - An array parallel to positions that give the maximum height of the + wall at positions. If undefined, the height of each position in used. + * @param [options.minimumHeights] - An array parallel to positions that give the minimum height of the + wall at positions. If undefined, the height at each position is 0.0. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid for coordinate manipulation + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ +export class WallGeometry { + constructor(options: { + positions: Cartesian3[]; + granularity?: number; + maximumHeights?: number[]; + minimumHeights?: number[]; + ellipsoid?: Ellipsoid; + vertexFormat?: VertexFormat; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: WallGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new WallGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: WallGeometry): WallGeometry; + /** + * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points, + which extrude down to the ground. Optionally, they can extrude downwards to a specified height. + * @example + * // create a wall that spans from 10000 meters to 20000 meters + var wall = Cesium.WallGeometry.fromConstantHeights({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 19.0, 47.0, + 19.0, 48.0, + 20.0, 48.0, + 20.0, 47.0, + 19.0, 47.0, + ]), + minimumHeight : 20000.0, + maximumHeight : 10000.0 + }); + var geometry = Cesium.WallGeometry.createGeometry(wall); + * @param options - Object with the following properties: + * @param options.positions - An array of Cartesian objects, which are the points of the wall. + * @param [options.maximumHeight] - A constant that defines the maximum height of the + wall at positions. If undefined, the height of each position in used. + * @param [options.minimumHeight] - A constant that defines the minimum height of the + wall at positions. If undefined, the height at each position is 0.0. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid for coordinate manipulation + * @param [options.vertexFormat = VertexFormat.DEFAULT] - The vertex attributes to be computed. + */ + static fromConstantHeights(options: { + positions: Cartesian3[]; + maximumHeight?: number; + minimumHeight?: number; + ellipsoid?: Ellipsoid; + vertexFormat?: VertexFormat; + }): WallGeometry; + /** + * Computes the geometric representation of a wall, including its vertices, indices, and a bounding sphere. + * @param wallGeometry - A description of the wall. + * @returns The computed vertices and indices. + */ + static createGeometry(wallGeometry: WallGeometry): Geometry | undefined; +} + +/** + * A description of a wall outline. A wall is defined by a series of points, +which extrude down to the ground. Optionally, they can extrude downwards to a specified height. + * @example + * // create a wall outline that spans from ground level to 10000 meters +var wall = new Cesium.WallOutlineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArrayHeights([ + 19.0, 47.0, 10000.0, + 19.0, 48.0, 10000.0, + 20.0, 48.0, 10000.0, + 20.0, 47.0, 10000.0, + 19.0, 47.0, 10000.0 + ]) +}); +var geometry = Cesium.WallOutlineGeometry.createGeometry(wall); + * @param options - Object with the following properties: + * @param options.positions - An array of Cartesian objects, which are the points of the wall. + * @param [options.granularity = Math.RADIANS_PER_DEGREE] - The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. + * @param [options.maximumHeights] - An array parallel to positions that give the maximum height of the + wall at positions. If undefined, the height of each position in used. + * @param [options.minimumHeights] - An array parallel to positions that give the minimum height of the + wall at positions. If undefined, the height at each position is 0.0. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid for coordinate manipulation + */ +export class WallOutlineGeometry { + constructor(options: { + positions: Cartesian3[]; + granularity?: number; + maximumHeights?: number[]; + minimumHeights?: number[]; + ellipsoid?: Ellipsoid; + }); + /** + * The number of elements used to pack the object into an array. + */ + packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + static pack(value: WallOutlineGeometry, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new WallOutlineGeometry instance if one was not provided. + */ + static unpack(array: number[], startingIndex?: number, result?: WallOutlineGeometry): WallOutlineGeometry; + /** + * A description of a walloutline. A wall is defined by a series of points, + which extrude down to the ground. Optionally, they can extrude downwards to a specified height. + * @example + * // create a wall that spans from 10000 meters to 20000 meters + var wall = Cesium.WallOutlineGeometry.fromConstantHeights({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 19.0, 47.0, + 19.0, 48.0, + 20.0, 48.0, + 20.0, 47.0, + 19.0, 47.0, + ]), + minimumHeight : 20000.0, + maximumHeight : 10000.0 + }); + var geometry = Cesium.WallOutlineGeometry.createGeometry(wall); + * @param options - Object with the following properties: + * @param options.positions - An array of Cartesian objects, which are the points of the wall. + * @param [options.maximumHeight] - A constant that defines the maximum height of the + wall at positions. If undefined, the height of each position in used. + * @param [options.minimumHeight] - A constant that defines the minimum height of the + wall at positions. If undefined, the height at each position is 0.0. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid for coordinate manipulation + */ + static fromConstantHeights(options: { + positions: Cartesian3[]; + maximumHeight?: number; + minimumHeight?: number; + ellipsoid?: Ellipsoid; + }): WallOutlineGeometry; + /** + * Computes the geometric representation of a wall outline, including its vertices, indices, and a bounding sphere. + * @param wallGeometry - A description of the wall outline. + * @returns The computed vertices and indices. + */ + static createGeometry(wallGeometry: WallOutlineGeometry): Geometry | undefined; +} + +/** + * The map projection used by Google Maps, Bing Maps, and most of ArcGIS Online, EPSG:3857. This +projection use longitude and latitude expressed with the WGS84 and transforms them to Mercator using +the spherical (rather than ellipsoidal) equations. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid. + */ +export class WebMercatorProjection { + constructor(ellipsoid?: Ellipsoid); + /** + * Gets the {@link Ellipsoid}. + */ + readonly ellipsoid: Ellipsoid; + /** + * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude + in the range -PI/2 to PI/2. + * @param mercatorAngle - The angle to convert. + * @returns The geodetic latitude in radians. + */ + static mercatorAngleToGeodeticLatitude(mercatorAngle: number): number; + /** + * Converts a geodetic latitude in radians, in the range -PI/2 to PI/2, to a Mercator + angle in the range -PI to PI. + * @param latitude - The geodetic latitude in radians. + * @returns The Mercator angle. + */ + static geodeticLatitudeToMercatorAngle(latitude: number): number; + /** + * The maximum latitude (both North and South) supported by a Web Mercator + (EPSG:3857) projection. Technically, the Mercator projection is defined + for any latitude up to (but not including) 90 degrees, but it makes sense + to cut it off sooner because it grows exponentially with increasing latitude. + The logic behind this particular cutoff value, which is the one used by + Google Maps, Bing Maps, and Esri, is that it makes the projection + square. That is, the rectangle is equal in the X and Y directions. + + The constant value is computed by calling: + WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI) + */ + static MaximumLatitude: number; + /** + * Converts geodetic ellipsoid coordinates, in radians, to the equivalent Web Mercator + X, Y, Z coordinates expressed in meters and returned in a {@link Cartesian3}. The height + is copied unmodified to the Z coordinate. + * @param cartographic - The cartographic coordinates in radians. + * @param [result] - The instance to which to copy the result, or undefined if a + new instance should be created. + * @returns The equivalent web mercator X, Y, Z coordinates, in meters. + */ + project(cartographic: Cartographic, result?: Cartesian3): Cartesian3; + /** + * Converts Web Mercator X, Y coordinates, expressed in meters, to a {@link Cartographic} + containing geodetic ellipsoid coordinates. The Z coordinate is copied unmodified to the + height. + * @param cartesian - The web mercator Cartesian position to unrproject with height (z) in meters. + * @param [result] - The instance to which to copy the result, or undefined if a + new instance should be created. + * @returns The equivalent cartographic coordinates. + */ + unproject(cartesian: Cartesian3, result?: Cartographic): Cartographic; +} + +/** + * A tiling scheme for geometry referenced to a {@link WebMercatorProjection}, EPSG:3857. This is +the tiling scheme used by Google Maps, Microsoft Bing Maps, and most of ESRI ArcGIS Online. + * @param [options] - Object with the following properties: + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid whose surface is being tiled. Defaults to +the WGS84 ellipsoid. + * @param [options.numberOfLevelZeroTilesX = 1] - The number of tiles in the X direction at level zero of + the tile tree. + * @param [options.numberOfLevelZeroTilesY = 1] - The number of tiles in the Y direction at level zero of + the tile tree. + * @param [options.rectangleSouthwestInMeters] - The southwest corner of the rectangle covered by the + tiling scheme, in meters. If this parameter or rectangleNortheastInMeters is not specified, the entire + globe is covered in the longitude direction and an equal distance is covered in the latitude + direction, resulting in a square projection. + * @param [options.rectangleNortheastInMeters] - The northeast corner of the rectangle covered by the + tiling scheme, in meters. If this parameter or rectangleSouthwestInMeters is not specified, the entire + globe is covered in the longitude direction and an equal distance is covered in the latitude + direction, resulting in a square projection. + */ +export class WebMercatorTilingScheme { + constructor(options?: { + ellipsoid?: Ellipsoid; + numberOfLevelZeroTilesX?: number; + numberOfLevelZeroTilesY?: number; + rectangleSouthwestInMeters?: Cartesian2; + rectangleNortheastInMeters?: Cartesian2; + }); + /** + * Gets the ellipsoid that is tiled by this tiling scheme. + */ + ellipsoid: Ellipsoid; + /** + * Gets the rectangle, in radians, covered by this tiling scheme. + */ + rectangle: Rectangle; + /** + * Gets the map projection used by this tiling scheme. + */ + projection: MapProjection; + /** + * Gets the total number of tiles in the X direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the X direction at the given level. + */ + getNumberOfXTilesAtLevel(level: number): number; + /** + * Gets the total number of tiles in the Y direction at a specified level-of-detail. + * @param level - The level-of-detail. + * @returns The number of tiles in the Y direction at the given level. + */ + getNumberOfYTilesAtLevel(level: number): number; + /** + * Transforms a rectangle specified in geodetic radians to the native coordinate system + of this tiling scheme. + * @param rectangle - The rectangle to transform. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the native rectangle if 'result' + is undefined. + */ + rectangleToNativeRectangle(rectangle: Rectangle, result?: Rectangle): Rectangle; + /** + * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates + of the tiling scheme. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToNativeRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Converts tile x, y coordinates and level to a cartographic rectangle in radians. + * @param x - The integer x coordinate of the tile. + * @param y - The integer y coordinate of the tile. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the rectangle + if 'result' is undefined. + */ + tileXYToRectangle(x: number, y: number, level: number, result?: any): Rectangle; + /** + * Calculates the tile x, y coordinates of the tile containing + a given cartographic position. + * @param position - The position. + * @param level - The tile level-of-detail. Zero is the least detailed. + * @param [result] - The instance to which to copy the result, or undefined if a new instance + should be created. + * @returns The specified 'result', or a new object containing the tile x, y coordinates + if 'result' is undefined. + */ + positionToTileXY(position: Cartographic, level: number, result?: Cartesian2): Cartesian2; +} + +/** + * A spline that linearly interpolates over an array of weight values used by morph targets. + * @example + * var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ]; +var weights = [0.0, 1.0, 0.25, 0.75, 0.5, 0.5, 0.75, 0.25, 1.0, 0.0]; //Two targets +var spline = new Cesium.WeightSpline({ + times : times, + weights : weights +}); + +var p0 = spline.evaluate(times[0]); + * @param options - Object with the following properties: + * @param options.times - An array of strictly increasing, unit-less, floating-point times at each point. + The values are in no way connected to the clock time. They are the parameterization for the curve. + * @param options.weights - The array of floating-point control weights given. The weights are ordered such + that all weights for the targets are given in chronological order and order in which they appear in + the glTF from which the morph targets come. This means for 2 targets, weights = [w(0,0), w(0,1), w(1,0), w(1,1) ...] + where i and j in w(i,j) are the time indices and target indices, respectively. + */ +export class WeightSpline { + constructor(options: { + times: number[]; + weights: number[]; + }); + /** + * An array of times for the control weights. + */ + readonly times: number[]; + /** + * An array of floating-point array control weights. + */ + readonly weights: number[]; + /** + * Finds an index i in times such that the parameter + time is in the interval [times[i], times[i + 1]]. + * @param time - The time. + * @returns The index for the element at the start of the interval. + */ + findTimeInterval(time: number): number; + /** + * Wraps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, wrapped around to the updated animation. + */ + wrapTime(time: number): number; + /** + * Clamps the given time to the period covered by the spline. + * @param time - The time. + * @returns The time, clamped to the animation period. + */ + clampTime(time: number): number; + /** + * Evaluates the curve at a given time. + * @param time - The time at which to evaluate the curve. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance of the point on the curve at the given time. + */ + evaluate(time: number, result?: number[]): number[]; +} + +/** + * Winding order defines the order of vertices for a triangle to be considered front-facing. + */ +export enum WindingOrder { + /** + * Vertices are in clockwise order. + */ + CLOCKWISE = WebGLConstants.CW, + /** + * Vertices are in counter-clockwise order. + */ + COUNTER_CLOCKWISE = WebGLConstants.CCW +} + +/** + * Writes the given text into a new canvas. The canvas will be sized to fit the text. +If text is blank, returns undefined. + * @param text - The text to write. + * @param [options] - Object with the following properties: + * @param [options.font = '10px sans-serif'] - The CSS font to use. + * @param [options.textBaseline = 'bottom'] - The baseline of the text. + * @param [options.fill = true] - Whether to fill the text. + * @param [options.stroke = false] - Whether to stroke the text. + * @param [options.fillColor = Color.WHITE] - The fill color. + * @param [options.strokeColor = Color.BLACK] - The stroke color. + * @param [options.strokeWidth = 1] - The stroke width. + * @param [options.backgroundColor = Color.TRANSPARENT] - The background color of the canvas. + * @param [options.padding = 0] - The pixel size of the padding to add around the text. + * @returns A new canvas with the given text drawn into it. The dimensions object + from measureText will also be added to the returned canvas. If text is + blank, returns undefined. + */ +export function writeTextToCanvas(text: string, options?: { + font?: string; + textBaseline?: string; + fill?: boolean; + stroke?: boolean; + fillColor?: Color; + strokeColor?: Color; + strokeWidth?: number; + backgroundColor?: Color; + padding?: number; +}): HTMLCanvasElement | undefined; + +export namespace BillboardGraphics { + /** + * Initialization options for the BillboardGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the billboard. + * @property [image] - A Property specifying the Image, URI, or Canvas to use for the billboard. + * @property [scale = 1.0] - A numeric Property specifying the scale to apply to the image size. + * @property [pixelOffset = Cartesian2.ZERO] - A {@link Cartesian2} Property specifying the pixel offset. + * @property [eyeOffset = Cartesian3.ZERO] - A {@link Cartesian3} Property specifying the eye offset. + * @property [horizontalOrigin = HorizontalOrigin.CENTER] - A Property specifying the {@link HorizontalOrigin}. + * @property [verticalOrigin = VerticalOrigin.CENTER] - A Property specifying the {@link VerticalOrigin}. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [color = Color.WHITE] - A Property specifying the tint {@link Color} of the image. + * @property [rotation = 0] - A numeric Property specifying the rotation about the alignedAxis. + * @property [alignedAxis = Cartesian3.ZERO] - A {@link Cartesian3} Property specifying the unit vector axis of rotation. + * @property [sizeInMeters] - A boolean Property specifying whether this billboard's size should be measured in meters. + * @property [width] - A numeric Property specifying the width of the billboard in pixels, overriding the native size. + * @property [height] - A numeric Property specifying the height of the billboard in pixels, overriding the native size. + * @property [scaleByDistance] - A {@link NearFarScalar} Property used to scale the point based on distance from the camera. + * @property [translucencyByDistance] - A {@link NearFarScalar} Property used to set translucency based on distance from the camera. + * @property [pixelOffsetScaleByDistance] - A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera. + * @property [imageSubRegion] - A Property specifying a {@link BoundingRectangle} that defines a sub-region of the image to use for the billboard, rather than the entire image, measured in pixels from the bottom-left. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this billboard will be displayed. + * @property [disableDepthTestDistance] - A Property specifying the distance from the camera at which to disable the depth test to. + */ + type ConstructorOptions = { + show?: Property | boolean; + image?: Property | string | HTMLCanvasElement; + scale?: Property | number; + pixelOffset?: Property | Cartesian2; + eyeOffset?: Property | Cartesian3; + horizontalOrigin?: Property | HorizontalOrigin; + verticalOrigin?: Property | VerticalOrigin; + heightReference?: Property | HeightReference; + color?: Property | Color; + rotation?: Property | number; + alignedAxis?: Property | Cartesian3; + sizeInMeters?: Property | boolean; + width?: Property | number; + height?: Property | number; + scaleByDistance?: Property | NearFarScalar; + translucencyByDistance?: Property | NearFarScalar; + pixelOffsetScaleByDistance?: Property | NearFarScalar; + imageSubRegion?: Property | BoundingRectangle; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + disableDepthTestDistance?: Property | number; + }; +} + +/** + * Describes a two dimensional icon located at the position of the containing {@link Entity}. +

+

+
+Example billboards +
+

+ * @param [options] - Object describing initialization options + */ +export class BillboardGraphics { + constructor(options?: BillboardGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the billboard. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the Image, URI, or Canvas to use for the billboard. + */ + image: Property | undefined; + /** + * Gets or sets the numeric Property specifying the uniform scale to apply to the image. + A scale greater than 1.0 enlarges the billboard while a scale less than 1.0 shrinks it. +

+

+
+ From left to right in the above image, the scales are 0.5, 1.0, and 2.0. +
+

+ */ + scale: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the billboard's pixel offset in screen space + from the origin of this billboard. This is commonly used to align multiple billboards and labels at + the same position, e.g., an image and text. The screen space origin is the top, left corner of the + canvas; x increases from left to right, and y increases from top to bottom. +

+

+ + + +
default
b.pixeloffset = new Cartesian2(50, 25);
+ The billboard's origin is indicated by the yellow point. +
+

+ */ + pixelOffset: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} Property specifying the billboard's offset in eye coordinates. + Eye coordinates is a left-handed coordinate system, where x points towards the viewer's + right, y points up, and z points into the screen. +

+ An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to + arrange a billboard above its corresponding 3D model. +

+ Below, the billboard is positioned at the center of the Earth but an eye offset makes it always + appear on top of the Earth regardless of the viewer's or Earth's orientation. +

+

+ + + +
+ b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0); +
+

+ */ + eyeOffset: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HorizontalOrigin}. + */ + horizontalOrigin: Property | undefined; + /** + * Gets or sets the Property specifying the {@link VerticalOrigin}. + */ + verticalOrigin: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} that is multiplied with the image. + This has two common use cases. First, the same white texture may be used by many different billboards, + each with a different color, to create colored billboards. Second, the color's alpha component can be + used to make the billboard translucent as shown below. An alpha of 0.0 makes the billboard + transparent, and 1.0 makes the billboard opaque. +

+

+ + + +
default
alpha : 0.5
+
+

+ */ + color: Property | undefined; + /** + * Gets or sets the numeric Property specifying the rotation of the image + counter clockwise from the alignedAxis. + */ + rotation: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} Property specifying the unit vector axis of rotation + in the fixed frame. When set to Cartesian3.ZERO the rotation is from the top of the screen. + */ + alignedAxis: Property | undefined; + /** + * Gets or sets the boolean Property specifying if this billboard's size will be measured in meters. + */ + sizeInMeters: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the billboard in pixels. + When undefined, the native width is used. + */ + width: Property | undefined; + /** + * Gets or sets the numeric Property specifying the height of the billboard in pixels. + When undefined, the native height is used. + */ + height: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the scale of the billboard based on the distance from the camera. + A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's scale remains clamped to the nearest bound. + */ + scaleByDistance: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the translucency of the billboard based on the distance from the camera. + A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's translucency remains clamped to the nearest bound. + */ + translucencyByDistance: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the billboard based on the distance from the camera. + A billboard's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's pixel offset remains clamped to the nearest bound. + */ + pixelOffsetScaleByDistance: Property | undefined; + /** + * Gets or sets the Property specifying a {@link BoundingRectangle} that defines a + sub-region of the image to use for the billboard, rather than the entire image, + measured in pixels from the bottom-left. + */ + imageSubRegion: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this billboard will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: BillboardGraphics): BillboardGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: BillboardGraphics): void; +} + +/** + * A {@link Visualizer} which maps {@link Entity#billboard} to a {@link Billboard}. + * @param entityCluster - The entity cluster to manage the collection of billboards and optionally cluster with other entities. + * @param entityCollection - The entityCollection to visualize. + */ +export class BillboardVisualizer { + constructor(entityCluster: EntityCluster, entityCollection: EntityCollection); + /** + * Updates the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link GeometryUpdater} for boxes. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class BoxGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace BoxGraphics { + /** + * Initialization options for the BoxGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the box. + * @property [dimensions] - A {@link Cartesian3} Property specifying the length, width, and height of the box. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height from the entity position is relative to. + * @property [fill = true] - A boolean Property specifying whether the box is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the box. + * @property [outline = false] - A boolean Property specifying whether the box is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the box casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this box will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + dimensions?: Property | Cartesian3; + heightReference?: Property | HeightReference; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a box. The center position and orientation are determined by the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class BoxGraphics { + constructor(options?: BoxGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the box. + */ + show: Property | undefined; + /** + * Gets or sets {@link Cartesian3} Property property specifying the length, width, and height of the box. + */ + dimensions: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the box is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the material used to fill the box. + */ + material: MaterialProperty | undefined; + /** + * Gets or sets the Property specifying whether the box is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the box + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this box will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: BoxGraphics): BoxGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: BoxGraphics): void; +} + +/** + * A {@link Property} whose value is lazily evaluated by a callback function. + * @param callback - The function to be called when the property is evaluated. + * @param isConstant - true when the callback function returns the same value every time, false if the value will change. + */ +export class CallbackProperty { + constructor(callback: CallbackProperty.Callback, isConstant: boolean); + /** + * Gets a value indicating if this property is constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setCallback is called. + */ + readonly definitionChanged: Event; + /** + * Gets the value of the property. + * @param [time] - The time for which to retrieve the value. This parameter is unused since the value does not change with respect to time. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied or is unsupported. + */ + getValue(time?: JulianDate, result?: any): any; + /** + * Sets the callback to be used. + * @param callback - The function to be called when the property is evaluated. + * @param isConstant - true when the callback function returns the same value every time, false if the value will change. + */ + setCallback(callback: CallbackProperty.Callback, isConstant: boolean): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export namespace CallbackProperty { + /** + * A function that returns the value of the property. + * @param [time] - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + */ + type Callback = (time?: JulianDate, result?: any) => any; +} + +export namespace Cesium3DTilesetGraphics { + /** + * Initialization options for the Cesium3DTilesetGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the tileset. + * @property [uri] - A string or Resource Property specifying the URI of the tileset. + * @property [maximumScreenSpaceError] - A number or Property specifying the maximum screen space error used to drive level of detail refinement. + */ + type ConstructorOptions = { + show?: Property | boolean; + uri?: Property | string | Resource; + maximumScreenSpaceError?: Property | number; + }; +} + +/** + * A 3D Tiles tileset represented by an {@link Entity}. +The tileset modelMatrix is determined by the containing Entity position and orientation +or is left unset if position is undefined. + * @param [options] - Object describing initialization options + */ +export class Cesium3DTilesetGraphics { + constructor(options?: Cesium3DTilesetGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the model. + */ + show: Property | undefined; + /** + * Gets or sets the string Property specifying the URI of the glTF asset. + */ + uri: Property | undefined; + /** + * Gets or sets the maximum screen space error used to drive level of detail refinement. + */ + maximumScreenSpaceError: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: Cesium3DTilesetGraphics): Cesium3DTilesetGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: Cesium3DTilesetGraphics): void; +} + +/** + * A {@link Visualizer} which maps {@link Entity#tileset} to a {@link Cesium3DTileset}. + * @param scene - The scene the primitives will be rendered in. + * @param entityCollection - The entityCollection to visualize. + */ +export class Cesium3DTilesetVisualizer { + constructor(scene: Scene, entityCollection: EntityCollection); + /** + * Updates models created this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link MaterialProperty} that maps to checkerboard {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.evenColor = Color.WHITE] - A Property specifying the first {@link Color}. + * @param [options.oddColor = Color.BLACK] - A Property specifying the second {@link Color}. + * @param [options.repeat = new Cartesian2(2.0, 2.0)] - A {@link Cartesian2} Property specifying how many times the tiles repeat in each direction. + */ +export class CheckerboardMaterialProperty { + constructor(options?: { + evenColor?: Property | Color; + oddColor?: Property | Color; + repeat?: Property | Cartesian2; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the first {@link Color}. + */ + evenColor: Property | undefined; + /** + * Gets or sets the Property specifying the second {@link Color}. + */ + oddColor: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying how many times the tiles repeat in each direction. + */ + repeat: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link MaterialProperty} that maps to solid color {@link Material} uniforms. + * @param [color = Color.WHITE] - The {@link Color} Property to be used. + */ +export class ColorMaterialProperty { + constructor(color?: Property | Color); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the {@link Color} {@link Property}. + */ + color: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * Non-destructively composites multiple {@link EntityCollection} instances into a single collection. +If a Entity with the same ID exists in multiple collections, it is non-destructively +merged into a single new entity instance. If an entity has the same property in multiple +collections, the property of the Entity in the last collection of the list it +belongs to is used. CompositeEntityCollection can be used almost anywhere that a +EntityCollection is used. + * @param [collections] - The initial list of EntityCollection instances to merge. + * @param [owner] - The data source (or composite entity collection) which created this collection. + */ +export class CompositeEntityCollection { + constructor(collections?: EntityCollection[], owner?: DataSource | CompositeEntityCollection); + /** + * Gets the event that is fired when entities are added or removed from the collection. + The generated event is a {@link EntityCollection.collectionChangedEventCallback}. + */ + readonly collectionChanged: Event; + /** + * Gets a globally unique identifier for this collection. + */ + readonly id: string; + /** + * Gets the array of Entity instances in the collection. + This array should not be modified directly. + */ + readonly values: Entity[]; + /** + * Gets the owner of this composite entity collection, ie. the data source or composite entity collection which created it. + */ + readonly owner: DataSource | CompositeEntityCollection; + /** + * Adds a collection to the composite. + * @param collection - the collection to add. + * @param [index] - the index to add the collection at. If omitted, the collection will + added on top of all existing collections. + */ + addCollection(collection: EntityCollection, index?: number): void; + /** + * Removes a collection from this composite, if present. + * @param collection - The collection to remove. + * @returns true if the collection was in the composite and was removed, + false if the collection was not in the composite. + */ + removeCollection(collection: EntityCollection): boolean; + /** + * Removes all collections from this composite. + */ + removeAllCollections(): void; + /** + * Checks to see if the composite contains a given collection. + * @param collection - the collection to check for. + * @returns true if the composite contains the collection, false otherwise. + */ + containsCollection(collection: EntityCollection): boolean; + /** + * Returns true if the provided entity is in this collection, false otherwise. + * @param entity - The entity. + * @returns true if the provided entity is in this collection, false otherwise. + */ + contains(entity: Entity): boolean; + /** + * Determines the index of a given collection in the composite. + * @param collection - The collection to find the index of. + * @returns The index of the collection in the composite, or -1 if the collection does not exist in the composite. + */ + indexOfCollection(collection: EntityCollection): number; + /** + * Gets a collection by index from the composite. + * @param index - the index to retrieve. + */ + getCollection(index: number): void; + /** + * Gets the number of collections in this composite. + */ + getCollectionsLength(): void; + /** + * Raises a collection up one position in the composite. + * @param collection - the collection to move. + */ + raiseCollection(collection: EntityCollection): void; + /** + * Lowers a collection down one position in the composite. + * @param collection - the collection to move. + */ + lowerCollection(collection: EntityCollection): void; + /** + * Raises a collection to the top of the composite. + * @param collection - the collection to move. + */ + raiseCollectionToTop(collection: EntityCollection): void; + /** + * Lowers a collection to the bottom of the composite. + * @param collection - the collection to move. + */ + lowerCollectionToBottom(collection: EntityCollection): void; + /** + * Prevents {@link EntityCollection#collectionChanged} events from being raised + until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which + point a single event will be raised that covers all suspended operations. + This allows for many items to be added and removed efficiently. + While events are suspended, recompositing of the collections will + also be suspended, as this can be a costly operation. + This function can be safely called multiple times as long as there + are corresponding calls to {@link EntityCollection#resumeEvents}. + */ + suspendEvents(): void; + /** + * Resumes raising {@link EntityCollection#collectionChanged} events immediately + when an item is added or removed. Any modifications made while while events were suspended + will be triggered as a single event when this function is called. This function also ensures + the collection is recomposited if events are also resumed. + This function is reference counted and can safely be called multiple times as long as there + are corresponding calls to {@link EntityCollection#resumeEvents}. + */ + resumeEvents(): void; + /** + * Computes the maximum availability of the entities in the collection. + If the collection contains a mix of infinitely available data and non-infinite data, + It will return the interval pertaining to the non-infinite data only. If all + data is infinite, an infinite interval will be returned. + * @returns The availability of entities in the collection. + */ + computeAvailability(): TimeInterval; + /** + * Gets an entity with the specified id. + * @param id - The id of the entity to retrieve. + * @returns The entity with the provided id or undefined if the id did not exist in the collection. + */ + getById(id: string): Entity | undefined; +} + +/** + * A {@link CompositeProperty} which is also a {@link MaterialProperty}. + */ +export class CompositeMaterialProperty { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value. + */ + readonly definitionChanged: Event; + /** + * Gets the interval collection. + */ + intervals: TimeIntervalCollection; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link CompositeProperty} which is also a {@link PositionProperty}. + * @param [referenceFrame = ReferenceFrame.FIXED] - The reference frame in which the position is defined. + */ +export class CompositePositionProperty { + constructor(referenceFrame?: ReferenceFrame); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value. + */ + readonly definitionChanged: Event; + /** + * Gets the interval collection. + */ + intervals: TimeIntervalCollection; + /** + * Gets or sets the reference frame which this position presents itself as. + Each PositionProperty making up this object has it's own reference frame, + so this property merely exposes a "preferred" reference frame for clients + to use. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the value of the property at the provided time in the fixed frame. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the +data property of each {@link TimeInterval} is another Property instance which is +evaluated at the provided time. + * @example + * var constantProperty = ...; +var sampledProperty = ...; + +//Create a composite property from two previously defined properties +//where the property is valid on August 1st, 2012 and uses a constant +//property for the first half of the day and a sampled property for the +//remaining half. +var composite = new Cesium.CompositeProperty(); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T12:00:00.00Z', + data : constantProperty +})); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T12:00:00.00Z/2012-08-02T00:00:00.00Z', + isStartIncluded : false, + isStopIncluded : false, + data : sampledProperty +})); + */ +export class CompositeProperty { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value. + */ + readonly definitionChanged: Event; + /** + * Gets the interval collection. + */ + intervals: TimeIntervalCollection; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link PositionProperty} whose value does not change in respect to the +{@link ReferenceFrame} in which is it defined. + * @param [value] - The property value. + * @param [referenceFrame = ReferenceFrame.FIXED] - The reference frame in which the position is defined. + */ +export class ConstantPositionProperty { + constructor(value?: Cartesian3, referenceFrame?: ReferenceFrame); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the reference frame in which the position is defined. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the value of the property at the provided time in the fixed frame. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Sets the value of the property. + * @param value - The property value. + * @param [referenceFrame = this.referenceFrame] - The reference frame in which the position is defined. + */ + setValue(value: Cartesian3, referenceFrame?: ReferenceFrame): void; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} whose value does not change with respect to simulation time. + * @param [value] - The property value. + */ +export class ConstantProperty { + constructor(value?: any); + /** + * Gets a value indicating if this property is constant. + This property always returns true. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value. + */ + readonly definitionChanged: Event; + /** + * Gets the value of the property. + * @param [time] - The time for which to retrieve the value. This parameter is unused since the value does not change with respect to time. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time?: JulianDate, result?: any): any; + /** + * Sets the value of the property. + * @param value - The property value. + */ + setValue(value: any): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; + /** + * Gets this property's value. + * @returns This property's value. + */ + valueOf(): any; + /** + * Creates a string representing this property's value. + * @returns A string representing the property's value. + */ + toString(): string; +} + +/** + * A {@link GeometryUpdater} for corridors. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class CorridorGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace CorridorGraphics { + /** + * Initialization options for the CorridorGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the corridor. + * @property [positions] - A Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor. + * @property [width] - A numeric Property specifying the distance between the edges of the corridor. + * @property [height = 0] - A numeric Property specifying the altitude of the corridor relative to the ellipsoid surface. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [extrudedHeight] - A numeric Property specifying the altitude of the corridor's extruded face relative to the ellipsoid surface. + * @property [extrudedHeightReference = HeightReference.NONE] - A Property specifying what the extrudedHeight is relative to. + * @property [cornerType = CornerType.ROUNDED] - A {@link CornerType} Property specifying the style of the corners. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the distance between each latitude and longitude. + * @property [fill = true] - A boolean Property specifying whether the corridor is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the corridor. + * @property [outline = false] - A boolean Property specifying whether the corridor is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the corridor casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this corridor will be displayed. + * @property [classificationType = ClassificationType.BOTH] - An enum Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground. + * @property [zIndex] - A Property specifying the zIndex of the corridor, used for ordering. Only has an effect if height and extrudedHeight are undefined, and if the corridor is static. + */ + type ConstructorOptions = { + show?: Property | boolean; + positions?: Property | Cartesian3; + width?: Property | number; + height?: Property | number; + heightReference?: Property | HeightReference; + extrudedHeight?: Property | number; + extrudedHeightReference?: Property | HeightReference; + cornerType?: Property | CornerType; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + classificationType?: Property | ClassificationType; + zIndex?: ConstantProperty | number; + }; +} + +/** + * Describes a corridor, which is a shape defined by a centerline and width that +conforms to the curvature of the globe. It can be placed on the surface or at altitude +and can optionally be extruded into a volume. + * @param [options] - Object describing initialization options + */ +export class CorridorGraphics { + constructor(options?: CorridorGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the corridor. + */ + show: Property | undefined; + /** + * Gets or sets a Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor. + */ + positions: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the corridor. + */ + width: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the corridor. + */ + height: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the corridor extrusion. + Setting this property creates a corridor shaped volume starting at height and ending + at this altitude. + */ + extrudedHeight: Property | undefined; + /** + * Gets or sets the Property specifying the extruded {@link HeightReference}. + */ + extrudedHeightReference: Property | undefined; + /** + * Gets or sets the {@link CornerType} Property specifying how corners are styled. + */ + cornerType: Property | undefined; + /** + * Gets or sets the numeric Property specifying the sampling distance between each latitude and longitude point. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the corridor is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the corridor. + */ + material: MaterialProperty | undefined; + /** + * Gets or sets the Property specifying whether the corridor is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the corridor + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this corridor will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the {@link ClassificationType} Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground. + */ + classificationType: Property | undefined; + /** + * Gets or sets the zIndex Property specifying the ordering of the corridor. Only has an effect if the coridor is static and neither height or exturdedHeight are specified. + */ + zIndex: ConstantProperty | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: CorridorGraphics): CorridorGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: CorridorGraphics): void; +} + +/** + * A {@link DataSource} implementation which can be used to manually manage a group of entities. + * @example + * var dataSource = new Cesium.CustomDataSource('myData'); + +var entity = dataSource.entities.add({ + position : Cesium.Cartesian3.fromDegrees(1, 2, 0), + billboard : { + image : 'image.png' + } +}); + +viewer.dataSources.add(dataSource); + * @param [name] - A human-readable name for this instance. + */ +export class CustomDataSource { + constructor(name?: string); + /** + * Gets or sets a human-readable name for this instance. + */ + name: string; + /** + * Gets or sets the clock for this instance. + */ + clock: DataSourceClock; + /** + * Gets the collection of {@link Entity} instances. + */ + entities: EntityCollection; + /** + * Gets or sets whether the data source is currently loading data. + */ + isLoading: boolean; + /** + * Gets an event that will be raised when the underlying data changes. + */ + changedEvent: Event; + /** + * Gets an event that will be raised if an error is encountered during processing. + */ + errorEvent: Event; + /** + * Gets an event that will be raised when the data source either starts or stops loading. + */ + loadingEvent: Event; + /** + * Gets whether or not this data source should be displayed. + */ + show: boolean; + /** + * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources. + */ + clustering: EntityCluster; + /** + * Updates the data source to the provided time. This function is optional and + is not required to be implemented. It is provided for data sources which + retrieve data based on the current animation time or scene state. + If implemented, update will be called by {@link DataSourceDisplay} once a frame. + * @param time - The simulation time. + * @returns True if this data source is ready to be displayed at the provided time, false otherwise. + */ + update(time: JulianDate): boolean; +} + +/** + * A {@link GeometryUpdater} for cylinders. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class CylinderGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace CylinderGraphics { + /** + * Initialization options for the CylinderGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the cylinder. + * @property [length] - A numeric Property specifying the length of the cylinder. + * @property [topRadius] - A numeric Property specifying the radius of the top of the cylinder. + * @property [bottomRadius] - A numeric Property specifying the radius of the bottom of the cylinder. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height from the entity position is relative to. + * @property [fill = true] - A boolean Property specifying whether the cylinder is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the cylinder. + * @property [outline = false] - A boolean Property specifying whether the cylinder is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [numberOfVerticalLines = 16] - A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline. + * @property [slices = 128] - The number of edges around the perimeter of the cylinder. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the cylinder casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this cylinder will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + length?: Property | number; + topRadius?: Property | number; + bottomRadius?: Property | number; + heightReference?: Property | HeightReference; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + numberOfVerticalLines?: Property | number; + slices?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a cylinder, truncated cone, or cone defined by a length, top radius, and bottom radius. +The center position and orientation are determined by the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class CylinderGraphics { + constructor(options?: CylinderGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the cylinder. + */ + show: Property | undefined; + /** + * Gets or sets the numeric Property specifying the length of the cylinder. + */ + length: Property | undefined; + /** + * Gets or sets the numeric Property specifying the radius of the top of the cylinder. + */ + topRadius: Property | undefined; + /** + * Gets or sets the numeric Property specifying the radius of the bottom of the cylinder. + */ + bottomRadius: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the cylinder is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the cylinder. + */ + material: MaterialProperty | undefined; + /** + * Gets or sets the boolean Property specifying whether the cylinder is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets the Property specifying the number of vertical lines to draw along the perimeter for the outline. + */ + numberOfVerticalLines: Property | undefined; + /** + * Gets or sets the Property specifying the number of edges around the perimeter of the cylinder. + */ + slices: Property | undefined; + /** + * Get or sets the enum Property specifying whether the cylinder + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this cylinder will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: CylinderGraphics): CylinderGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: CylinderGraphics): void; +} + +export namespace CzmlDataSource { + /** + * Initialization options for the `load` method. + * @property [sourceUri] - Overrides the url to use for resolving relative links. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type LoadOptions = { + sourceUri?: Resource | string; + credit?: Credit | string; + }; +} + +/** + * A {@link DataSource} which processes {@link https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/CZML-Guide|CZML}. + * @param [name] - An optional name for the data source. This value will be overwritten if a loaded document contains a name. + */ +export class CzmlDataSource { + constructor(name?: string); + /** + * Creates a Promise to a new instance loaded with the provided CZML data. + * @param czml - A url or CZML object to be processed. + * @param [options] - An object specifying configuration options + * @returns A promise that resolves to the new instance once the data is processed. + */ + static load(czml: Resource | string | any, options?: CzmlDataSource.LoadOptions): Promise; + /** + * Gets a human-readable name for this instance. + */ + name: string; + /** + * Gets the clock settings defined by the loaded CZML. If no clock is explicitly + defined in the CZML, the combined availability of all objects is returned. If + only static data exists, this value is undefined. + */ + clock: DataSourceClock; + /** + * Gets the collection of {@link Entity} instances. + */ + entities: EntityCollection; + /** + * Gets a value indicating if the data source is currently loading data. + */ + isLoading: boolean; + /** + * Gets an event that will be raised when the underlying data changes. + */ + changedEvent: Event; + /** + * Gets an event that will be raised if an error is encountered during processing. + */ + errorEvent: Event; + /** + * Gets an event that will be raised when the data source either starts or stops loading. + */ + loadingEvent: Event; + /** + * Gets whether or not this data source should be displayed. + */ + show: boolean; + /** + * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources. + */ + clustering: EntityCluster; + /** + * Gets the credit that will be displayed for the data source + */ + credit: Credit; + /** + * Gets the array of CZML processing functions. + */ + static updaters: any[]; + /** + * Processes the provided url or CZML object without clearing any existing data. + * @param czml - A url or CZML object to be processed. + * @param [options] - An object with the following properties: + * @param [options.sourceUri] - Overrides the url to use for resolving relative links. + * @returns A promise that resolves to this instances once the data is processed. + */ + process(czml: Resource | string | any, options?: { + sourceUri?: string; + }): Promise; + /** + * Loads the provided url or CZML object, replacing any existing data. + * @param czml - A url or CZML object to be processed. + * @param [options] - An object specifying configuration options + * @returns A promise that resolves to this instances once the data is processed. + */ + load(czml: Resource | string | any, options?: CzmlDataSource.LoadOptions): Promise; + /** + * Updates the data source to the provided time. This function is optional and + is not required to be implemented. It is provided for data sources which + retrieve data based on the current animation time or scene state. + If implemented, update will be called by {@link DataSourceDisplay} once a frame. + * @param time - The simulation time. + * @returns True if this data source is ready to be displayed at the provided time, false otherwise. + */ + update(time: JulianDate): boolean; + /** + * A helper function used by custom CZML updater functions + which creates or updates a {@link Property} from a CZML packet. + * @param type - The constructor function for the property being processed. + * @param object - The object on which the property will be added or updated. + * @param propertyName - The name of the property on the object. + * @param packetData - The CZML packet being processed. + * @param interval - A constraining interval for which the data is valid. + * @param sourceUri - The originating uri of the data being processed. + * @param entityCollection - The collection being processsed. + */ + static processPacketData(type: (...params: any[]) => any, object: any, propertyName: string, packetData: any, interval: TimeInterval, sourceUri: string, entityCollection: EntityCollection): void; + /** + * A helper function used by custom CZML updater functions + which creates or updates a {@link PositionProperty} from a CZML packet. + * @param object - The object on which the property will be added or updated. + * @param propertyName - The name of the property on the object. + * @param packetData - The CZML packet being processed. + * @param interval - A constraining interval for which the data is valid. + * @param sourceUri - The originating uri of the data being processed. + * @param entityCollection - The collection being processsed. + */ + static processPositionPacketData(object: any, propertyName: string, packetData: any, interval: TimeInterval, sourceUri: string, entityCollection: EntityCollection): void; + /** + * A helper function used by custom CZML updater functions + which creates or updates a {@link MaterialProperty} from a CZML packet. + * @param object - The object on which the property will be added or updated. + * @param propertyName - The name of the property on the object. + * @param packetData - The CZML packet being processed. + * @param interval - A constraining interval for which the data is valid. + * @param sourceUri - The originating uri of the data being processed. + * @param entityCollection - The collection being processsed. + */ + static processMaterialPacketData(object: any, propertyName: string, packetData: any, interval: TimeInterval, sourceUri: string, entityCollection: EntityCollection): void; +} + +/** + * Defines the interface for data sources, which turn arbitrary data into a +{@link EntityCollection} for generic consumption. This object is an interface +for documentation purposes and is not intended to be instantiated directly. + */ +export class DataSource { + constructor(); + /** + * Gets a human-readable name for this instance. + */ + name: string; + /** + * Gets the preferred clock settings for this data source. + */ + clock: DataSourceClock; + /** + * Gets the collection of {@link Entity} instances. + */ + entities: EntityCollection; + /** + * Gets a value indicating if the data source is currently loading data. + */ + isLoading: boolean; + /** + * Gets an event that will be raised when the underlying data changes. + */ + changedEvent: Event; + /** + * Gets an event that will be raised if an error is encountered during processing. + */ + errorEvent: Event; + /** + * Gets an event that will be raised when the value of isLoading changes. + */ + loadingEvent: Event; + /** + * Gets whether or not this data source should be displayed. + */ + show: boolean; + /** + * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources. + */ + clustering: EntityCluster; + /** + * Updates the data source to the provided time. This function is optional and + is not required to be implemented. It is provided for data sources which + retrieve data based on the current animation time or scene state. + If implemented, update will be called by {@link DataSourceDisplay} once a frame. + * @param time - The simulation time. + * @returns True if this data source is ready to be displayed at the provided time, false otherwise. + */ + update(time: JulianDate): boolean; +} + +/** + * Represents desired clock settings for a particular {@link DataSource}. These settings may be applied +to the {@link Clock} when the DataSource is loaded. + */ +export class DataSourceClock { + constructor(); + /** + * Gets the event that is raised whenever a new property is assigned. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the desired start time of the clock. + See {@link Clock#startTime}. + */ + startTime: JulianDate; + /** + * Gets or sets the desired stop time of the clock. + See {@link Clock#stopTime}. + */ + stopTime: JulianDate; + /** + * Gets or sets the desired current time when this data source is loaded. + See {@link Clock#currentTime}. + */ + currentTime: JulianDate; + /** + * Gets or sets the desired clock range setting. + See {@link Clock#clockRange}. + */ + clockRange: ClockRange; + /** + * Gets or sets the desired clock step setting. + See {@link Clock#clockStep}. + */ + clockStep: ClockStep; + /** + * Gets or sets the desired clock multiplier. + See {@link Clock#multiplier}. + */ + multiplier: number; + /** + * Duplicates a DataSourceClock instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: DataSourceClock): DataSourceClock; + /** + * Returns true if this DataSourceClock is equivalent to the other + * @param other - The other DataSourceClock to compare to. + * @returns true if the DataSourceClocks are equal; otherwise, false. + */ + equals(other: DataSourceClock): boolean; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: DataSourceClock): void; + /** + * Gets the value of this clock instance as a {@link Clock} object. + * @returns The modified result parameter or a new instance if one was not provided. + */ + getValue(): Clock; +} + +/** + * A collection of {@link DataSource} instances. + */ +export class DataSourceCollection { + constructor(); + /** + * Gets the number of data sources in this collection. + */ + readonly length: number; + /** + * An event that is raised when a data source is added to the collection. + Event handlers are passed the data source that was added. + */ + readonly dataSourceAdded: Event; + /** + * An event that is raised when a data source is removed from the collection. + Event handlers are passed the data source that was removed. + */ + readonly dataSourceRemoved: Event; + /** + * An event that is raised when a data source changes position in the collection. Event handlers are passed the data source + that was moved, its new index after the move, and its old index prior to the move. + */ + readonly dataSourceMoved: Event; + /** + * Adds a data source to the collection. + * @param dataSource - A data source or a promise to a data source to add to the collection. + When passing a promise, the data source will not actually be added + to the collection until the promise resolves successfully. + * @returns A Promise that resolves once the data source has been added to the collection. + */ + add(dataSource: DataSource | Promise): Promise; + /** + * Removes a data source from this collection, if present. + * @param dataSource - The data source to remove. + * @param [destroy = false] - Whether to destroy the data source in addition to removing it. + * @returns true if the data source was in the collection and was removed, + false if the data source was not in the collection. + */ + remove(dataSource: DataSource, destroy?: boolean): boolean; + /** + * Removes all data sources from this collection. + * @param [destroy = false] - whether to destroy the data sources in addition to removing them. + */ + removeAll(destroy?: boolean): void; + /** + * Checks to see if the collection contains a given data source. + * @param dataSource - The data source to check for. + * @returns true if the collection contains the data source, false otherwise. + */ + contains(dataSource: DataSource): boolean; + /** + * Determines the index of a given data source in the collection. + * @param dataSource - The data source to find the index of. + * @returns The index of the data source in the collection, or -1 if the data source does not exist in the collection. + */ + indexOf(dataSource: DataSource): number; + /** + * Gets a data source by index from the collection. + * @param index - the index to retrieve. + * @returns The data source at the specified index. + */ + get(index: number): DataSource; + /** + * Gets a data source by name from the collection. + * @param name - The name to retrieve. + * @returns A list of all data sources matching the provided name. + */ + getByName(name: string): DataSource[]; + /** + * Raises a data source up one position in the collection. + * @param dataSource - The data source to move. + */ + raise(dataSource: DataSource): void; + /** + * Lowers a data source down one position in the collection. + * @param dataSource - The data source to move. + */ + lower(dataSource: DataSource): void; + /** + * Raises a data source to the top of the collection. + * @param dataSource - The data source to move. + */ + raiseToTop(dataSource: DataSource): void; + /** + * Lowers a data source to the bottom of the collection. + * @param dataSource - The data source to move. + */ + lowerToBottom(dataSource: DataSource): void; + /** + * Returns true if this object was destroyed; otherwise, false. + If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the resources held by all data sources in this collection. Explicitly destroying this + object allows for deterministic release of WebGL resources, instead of relying on the garbage + collector. Once this object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * dataSourceCollection = dataSourceCollection && dataSourceCollection.destroy(); + */ + destroy(): void; +} + +/** + * Visualizes a collection of {@link DataSource} instances. + * @param options - Object with the following properties: + * @param options.scene - The scene in which to display the data. + * @param options.dataSourceCollection - The data sources to display. + * @param [options.visualizersCallback = DataSourceDisplay.defaultVisualizersCallback] - A function which creates an array of visualizers used for visualization. + If undefined, all standard visualizers are used. + */ +export class DataSourceDisplay { + constructor(options: { + scene: Scene; + dataSourceCollection: DataSourceCollection; + visualizersCallback?: DataSourceDisplay.VisualizersCallback; + }); + /** + * Gets or sets the default function which creates an array of visualizers used for visualization. + By default, this function uses all standard visualizers. + */ + static defaultVisualizersCallback(): void; + /** + * Gets the scene associated with this display. + */ + scene: Scene; + /** + * Gets the collection of data sources to display. + */ + dataSources: DataSourceCollection; + /** + * Gets the default data source instance which can be used to + manually create and visualize entities not tied to + a specific data source. This instance is always available + and does not appear in the list dataSources collection. + */ + defaultDataSource: CustomDataSource; + /** + * Gets a value indicating whether or not all entities in the data source are ready + */ + readonly ready: boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * dataSourceDisplay = dataSourceDisplay.destroy(); + */ + destroy(): void; + /** + * Updates the display to the provided time. + * @param time - The simulation time. + * @returns True if all data sources are ready to be displayed, false otherwise. + */ + update(time: JulianDate): boolean; +} + +export namespace DataSourceDisplay { + /** + * A function which creates an array of visualizers used for visualization. + * @example + * function createVisualizers(scene, dataSource) { + return [new Cesium.BillboardVisualizer(scene, dataSource.entities)]; + } + * @param scene - The scene to create visualizers for. + * @param dataSource - The data source to create visualizers for. + */ + type VisualizersCallback = (scene: Scene, dataSource: DataSource) => Visualizer[]; +} + +/** + * A {@link GeometryUpdater} for ellipses. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class EllipseGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Gets a value indicating if the geometry should be drawn on terrain. + */ + readonly onTerrain: boolean; +} + +export namespace EllipseGraphics { + /** + * Initialization options for the EllipseGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the ellipse. + * @property [semiMajorAxis] - The numeric Property specifying the semi-major axis. + * @property [semiMinorAxis] - The numeric Property specifying the semi-minor axis. + * @property [height = 0] - A numeric Property specifying the altitude of the ellipse relative to the ellipsoid surface. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [extrudedHeight] - A numeric Property specifying the altitude of the ellipse's extruded face relative to the ellipsoid surface. + * @property [extrudedHeightReference = HeightReference.NONE] - A Property specifying what the extrudedHeight is relative to. + * @property [rotation = 0.0] - A numeric property specifying the rotation of the ellipse counter-clockwise from north. + * @property [stRotation = 0.0] - A numeric property specifying the rotation of the ellipse texture counter-clockwise from north. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between points on the ellipse. + * @property [fill = true] - A boolean Property specifying whether the ellipse is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the ellipse. + * @property [outline = false] - A boolean Property specifying whether the ellipse is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [numberOfVerticalLines = 16] - A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the ellipse casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this ellipse will be displayed. + * @property [classificationType = ClassificationType.BOTH] - An enum Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground. + * @property [zIndex = 0] - A property specifying the zIndex of the Ellipse. Used for ordering ground geometry. Only has an effect if the ellipse is constant and neither height or exturdedHeight are specified. + */ + type ConstructorOptions = { + show?: Property | boolean; + semiMajorAxis?: Property | number; + semiMinorAxis?: Property | number; + height?: Property | number; + heightReference?: Property | HeightReference; + extrudedHeight?: Property | number; + extrudedHeightReference?: Property | HeightReference; + rotation?: Property | number; + stRotation?: Property | number; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + numberOfVerticalLines?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + classificationType?: Property | ClassificationType; + zIndex?: ConstantProperty | number; + }; +} + +/** + * Describes an ellipse defined by a center point and semi-major and semi-minor axes. +The ellipse conforms to the curvature of the globe and can be placed on the surface or +at altitude and can optionally be extruded into a volume. +The center point is determined by the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class EllipseGraphics { + constructor(options?: EllipseGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the ellipse. + */ + show: Property | undefined; + /** + * Gets or sets the numeric Property specifying the semi-major axis. + */ + semiMajorAxis: Property | undefined; + /** + * Gets or sets the numeric Property specifying the semi-minor axis. + */ + semiMinorAxis: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the ellipse. + */ + height: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the ellipse extrusion. + Setting this property creates volume starting at height and ending at this altitude. + */ + extrudedHeight: Property | undefined; + /** + * Gets or sets the Property specifying the extruded {@link HeightReference}. + */ + extrudedHeightReference: Property | undefined; + /** + * Gets or sets the numeric property specifying the rotation of the ellipse counter-clockwise from north. + */ + rotation: Property | undefined; + /** + * Gets or sets the numeric property specifying the rotation of the ellipse texture counter-clockwise from north. + */ + stRotation: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between points on the ellipse. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the ellipse is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the ellipse. + */ + material: MaterialProperty | undefined; + /** + * Gets or sets the Property specifying whether the ellipse is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets the numeric Property specifying the number of vertical lines to draw along the perimeter for the outline. + */ + numberOfVerticalLines: Property | undefined; + /** + * Get or sets the enum Property specifying whether the ellipse + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipse will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the {@link ClassificationType} Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground. + */ + classificationType: Property | undefined; + /** + * Gets or sets the zIndex Property specifying the ellipse ordering. Only has an effect if the ellipse is constant and neither height or extrudedHeight are specified + */ + zIndex: ConstantProperty | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: EllipseGraphics): EllipseGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: EllipseGraphics): void; +} + +/** + * A {@link GeometryUpdater} for ellipsoids. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class EllipsoidGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @param [skipModelMatrix = false] - Whether to compute a model matrix for the geometry instance + * @param [modelMatrixResult] - Used to store the result of the model matrix calculation + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate, skipModelMatrix?: boolean, modelMatrixResult?: Matrix4): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @param [skipModelMatrix = false] - Whether to compute a model matrix for the geometry instance + * @param [modelMatrixResult] - Used to store the result of the model matrix calculation + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate, skipModelMatrix?: boolean, modelMatrixResult?: Matrix4): GeometryInstance; +} + +export namespace EllipsoidGraphics { + /** + * Initialization options for the EllipsoidGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the ellipsoid. + * @property [radii] - A {@link Cartesian3} Property specifying the radii of the ellipsoid. + * @property [innerRadii] - A {@link Cartesian3} Property specifying the inner radii of the ellipsoid. + * @property [minimumClock = 0.0] - A Property specifying the minimum clock angle of the ellipsoid. + * @property [maximumClock = 2*PI] - A Property specifying the maximum clock angle of the ellipsoid. + * @property [minimumCone = 0.0] - A Property specifying the minimum cone angle of the ellipsoid. + * @property [maximumCone = PI] - A Property specifying the maximum cone angle of the ellipsoid. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height from the entity position is relative to. + * @property [fill = true] - A boolean Property specifying whether the ellipsoid is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the ellipsoid. + * @property [outline = false] - A boolean Property specifying whether the ellipsoid is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [stackPartitions = 64] - A Property specifying the number of stacks. + * @property [slicePartitions = 64] - A Property specifying the number of radial slices. + * @property [subdivisions = 128] - A Property specifying the number of samples per outline ring, determining the granularity of the curvature. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the ellipsoid casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this ellipsoid will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + radii?: Property | Cartesian3; + innerRadii?: Property | Cartesian3; + minimumClock?: Property | number; + maximumClock?: Property | number; + minimumCone?: Property | number; + maximumCone?: Property | number; + heightReference?: Property | HeightReference; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + stackPartitions?: Property | number; + slicePartitions?: Property | number; + subdivisions?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describe an ellipsoid or sphere. The center position and orientation are determined by the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class EllipsoidGraphics { + constructor(options?: EllipsoidGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the ellipsoid. + */ + show: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} {@link Property} specifying the radii of the ellipsoid. + */ + radii: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} {@link Property} specifying the inner radii of the ellipsoid. + */ + innerRadii: Property | undefined; + /** + * Gets or sets the Property specifying the minimum clock angle of the ellipsoid. + */ + minimumClock: Property | undefined; + /** + * Gets or sets the Property specifying the maximum clock angle of the ellipsoid. + */ + maximumClock: Property | undefined; + /** + * Gets or sets the Property specifying the minimum cone angle of the ellipsoid. + */ + minimumCone: Property | undefined; + /** + * Gets or sets the Property specifying the maximum cone angle of the ellipsoid. + */ + maximumCone: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the ellipsoid is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the ellipsoid. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the ellipsoid is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets the Property specifying the number of stacks. + */ + stackPartitions: Property | undefined; + /** + * Gets or sets the Property specifying the number of radial slices per 360 degrees. + */ + slicePartitions: Property | undefined; + /** + * Gets or sets the Property specifying the number of samples per outline ring, determining the granularity of the curvature. + */ + subdivisions: Property | undefined; + /** + * Get or sets the enum Property specifying whether the ellipsoid + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipsoid will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: EllipsoidGraphics): EllipsoidGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: EllipsoidGraphics): void; +} + +export namespace Entity { + /** + * Initialization options for the Entity constructor + * @property [id] - A unique identifier for this object. If none is provided, a GUID is generated. + * @property [name] - A human readable name to display to users. It does not have to be unique. + * @property [availability] - The availability, if any, associated with this object. + * @property [show] - A boolean value indicating if the entity and its children are displayed. + * @property [description] - A string Property specifying an HTML description for this entity. + * @property [position] - A Property specifying the entity position. + * @property [orientation] - A Property specifying the entity orientation. + * @property [viewFrom] - A suggested initial offset for viewing this object. + * @property [parent] - A parent entity to associate with this entity. + * @property [billboard] - A billboard to associate with this entity. + * @property [box] - A box to associate with this entity. + * @property [corridor] - A corridor to associate with this entity. + * @property [cylinder] - A cylinder to associate with this entity. + * @property [ellipse] - A ellipse to associate with this entity. + * @property [ellipsoid] - A ellipsoid to associate with this entity. + * @property [label] - A options.label to associate with this entity. + * @property [model] - A model to associate with this entity. + * @property [tileset] - A 3D Tiles tileset to associate with this entity. + * @property [path] - A path to associate with this entity. + * @property [plane] - A plane to associate with this entity. + * @property [point] - A point to associate with this entity. + * @property [polygon] - A polygon to associate with this entity. + * @property [polyline] - A polyline to associate with this entity. + * @property [properties] - Arbitrary properties to associate with this entity. + * @property [polylineVolume] - A polylineVolume to associate with this entity. + * @property [rectangle] - A rectangle to associate with this entity. + * @property [wall] - A wall to associate with this entity. + */ + type ConstructorOptions = { + id?: string; + name?: string; + availability?: TimeIntervalCollection; + show?: boolean; + description?: Property | string; + position?: PositionProperty | Cartesian3; + orientation?: Property; + viewFrom?: Property; + parent?: Entity; + billboard?: BillboardGraphics | BillboardGraphics.ConstructorOptions; + box?: BoxGraphics | BoxGraphics.ConstructorOptions; + corridor?: CorridorGraphics | CorridorGraphics.ConstructorOptions; + cylinder?: CylinderGraphics | CylinderGraphics.ConstructorOptions; + ellipse?: EllipseGraphics | EllipseGraphics.ConstructorOptions; + ellipsoid?: EllipsoidGraphics | EllipsoidGraphics.ConstructorOptions; + label?: LabelGraphics | LabelGraphics.ConstructorOptions; + model?: ModelGraphics | ModelGraphics.ConstructorOptions; + tileset?: Cesium3DTilesetGraphics | Cesium3DTilesetGraphics.ConstructorOptions; + path?: PathGraphics | PathGraphics.ConstructorOptions; + plane?: PlaneGraphics | PlaneGraphics.ConstructorOptions; + point?: PointGraphics | PointGraphics.ConstructorOptions; + polygon?: PolygonGraphics | PolygonGraphics.ConstructorOptions; + polyline?: PolylineGraphics | PolylineGraphics.ConstructorOptions; + properties?: PropertyBag | { + [key: string]: any; + }; + polylineVolume?: PolylineVolumeGraphics | PolylineVolumeGraphics.ConstructorOptions; + rectangle?: RectangleGraphics | RectangleGraphics.ConstructorOptions; + wall?: WallGraphics | WallGraphics.ConstructorOptions; + }; +} + +/** + * Entity instances aggregate multiple forms of visualization into a single high-level object. +They can be created manually and added to {@link Viewer#entities} or be produced by +data sources, such as {@link CzmlDataSource} and {@link GeoJsonDataSource}. + * @param [options] - Object describing initialization options + */ +export class Entity { + constructor(options?: Entity.ConstructorOptions); + /** + * Gets or sets the entity collection that this entity belongs to. + */ + entityCollection: EntityCollection; + /** + * The availability, if any, associated with this object. + If availability is undefined, it is assumed that this object's + other properties will return valid data for any provided time. + If availability exists, the objects other properties will only + provide valid data if queried within the given interval. + */ + availability: TimeIntervalCollection | undefined; + /** + * Gets the unique ID associated with this object. + */ + id: string; + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the name of the object. The name is intended for end-user + consumption and does not need to be unique. + */ + name: string | undefined; + /** + * Gets or sets whether this entity should be displayed. When set to true, + the entity is only displayed if the parent entity's show property is also true. + */ + show: boolean; + /** + * Gets whether this entity is being displayed, taking into account + the visibility of any ancestor entities. + */ + isShowing: boolean; + /** + * Gets or sets the parent object. + */ + parent: Entity | undefined; + /** + * Gets the names of all properties registered on this instance. + */ + propertyNames: string[]; + /** + * Gets or sets the billboard. + */ + billboard: BillboardGraphics | undefined; + /** + * Gets or sets the box. + */ + box: BoxGraphics | undefined; + /** + * Gets or sets the corridor. + */ + corridor: CorridorGraphics | undefined; + /** + * Gets or sets the cylinder. + */ + cylinder: CylinderGraphics | undefined; + /** + * Gets or sets the description. + */ + description: Property | undefined; + /** + * Gets or sets the ellipse. + */ + ellipse: EllipseGraphics | undefined; + /** + * Gets or sets the ellipsoid. + */ + ellipsoid: EllipsoidGraphics | undefined; + /** + * Gets or sets the label. + */ + label: LabelGraphics | undefined; + /** + * Gets or sets the model. + */ + model: ModelGraphics | undefined; + /** + * Gets or sets the tileset. + */ + tileset: Cesium3DTilesetGraphics | undefined; + /** + * Gets or sets the orientation. + */ + orientation: Property | undefined; + /** + * Gets or sets the path. + */ + path: PathGraphics | undefined; + /** + * Gets or sets the plane. + */ + plane: PlaneGraphics | undefined; + /** + * Gets or sets the point graphic. + */ + point: PointGraphics | undefined; + /** + * Gets or sets the polygon. + */ + polygon: PolygonGraphics | undefined; + /** + * Gets or sets the polyline. + */ + polyline: PolylineGraphics | undefined; + /** + * Gets or sets the polyline volume. + */ + polylineVolume: PolylineVolumeGraphics | undefined; + /** + * Gets or sets the bag of arbitrary properties associated with this entity. + */ + properties: PropertyBag | undefined; + /** + * Gets or sets the position. + */ + position: PositionProperty | undefined; + /** + * Gets or sets the rectangle. + */ + rectangle: RectangleGraphics | undefined; + /** + * Gets or sets the suggested initial offset when tracking this object. + The offset is typically defined in the east-north-up reference frame, + but may be another frame depending on the object's velocity. + */ + viewFrom: Property | undefined; + /** + * Gets or sets the wall. + */ + wall: WallGraphics | undefined; + /** + * Given a time, returns true if this object should have data during that time. + * @param time - The time to check availability for. + * @returns true if the object should have data during the provided time, false otherwise. + */ + isAvailable(time: JulianDate): boolean; + /** + * Adds a property to this object. Once a property is added, it can be + observed with {@link Entity#definitionChanged} and composited + with {@link CompositeEntityCollection} + * @param propertyName - The name of the property to add. + */ + addProperty(propertyName: string): void; + /** + * Removed a property previously added with addProperty. + * @param propertyName - The name of the property to remove. + */ + removeProperty(propertyName: string): void; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: Entity): void; + /** + * Computes the model matrix for the entity's transform at specified time. Returns undefined if orientation or position + are undefined. + * @param time - The time to retrieve model matrix for. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new Matrix4 instance if one was not provided. Result is undefined if position or orientation are undefined. + */ + computeModelMatrix(time: JulianDate, result?: Matrix4): Matrix4; + /** + * Checks if the given Scene supports materials besides Color on Entities draped on terrain or 3D Tiles. + If this feature is not supported, Entities with non-color materials but no `height` will + instead be rendered as if height is 0. + * @param scene - The current scene. + * @returns Whether or not the current scene supports materials for entities on terrain. + */ + static supportsMaterialsforEntitiesOnTerrain(scene: Scene): boolean; + /** + * Checks if the given Scene supports polylines clamped to terrain or 3D Tiles. + If this feature is not supported, Entities with PolylineGraphics will be rendered with vertices at + the provided heights and using the `arcType` parameter instead of clamped to the ground. + * @param scene - The current scene. + * @returns Whether or not the current scene supports polylines on terrain or 3D TIles. + */ + static supportsPolylinesOnTerrain(scene: Scene): boolean; +} + +/** + * Defines how screen space objects (billboards, points, labels) are clustered. + * @param [options] - An object with the following properties: + * @param [options.enabled = false] - Whether or not to enable clustering. + * @param [options.pixelRange = 80] - The pixel range to extend the screen space bounding box. + * @param [options.minimumClusterSize = 2] - The minimum number of screen space objects that can be clustered. + * @param [options.clusterBillboards = true] - Whether or not to cluster the billboards of an entity. + * @param [options.clusterLabels = true] - Whether or not to cluster the labels of an entity. + * @param [options.clusterPoints = true] - Whether or not to cluster the points of an entity. + * @param [options.show = true] - Determines if the entities in the cluster will be shown. + */ +export class EntityCluster { + constructor(options?: { + enabled?: boolean; + pixelRange?: number; + minimumClusterSize?: number; + clusterBillboards?: boolean; + clusterLabels?: boolean; + clusterPoints?: boolean; + show?: boolean; + }); + /** + * Determines if entities in this collection will be shown. + */ + show: boolean; + /** + * Gets or sets whether clustering is enabled. + */ + enabled: boolean; + /** + * Gets or sets the pixel range to extend the screen space bounding box. + */ + pixelRange: number; + /** + * Gets or sets the minimum number of screen space objects that can be clustered. + */ + minimumClusterSize: number; + /** + * Gets the event that will be raised when a new cluster will be displayed. The signature of the event listener is {@link EntityCluster.newClusterCallback}. + */ + clusterEvent: Event; + /** + * Gets or sets whether clustering billboard entities is enabled. + */ + clusterBillboards: boolean; + /** + * Gets or sets whether clustering labels entities is enabled. + */ + clusterLabels: boolean; + /** + * Gets or sets whether clustering point entities is enabled. + */ + clusterPoints: boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Unlike other objects that use WebGL resources, this object can be reused. For example, if a data source is removed + from a data source collection and added to another. +

+ */ + destroy(): void; +} + +export namespace EntityCluster { + /** + * A event listener function used to style clusters. + * @example + * // The default cluster values. + dataSource.clustering.clusterEvent.addEventListener(function(entities, cluster) { + cluster.label.show = true; + cluster.label.text = entities.length.toLocaleString(); + }); + * @param clusteredEntities - An array of the entities contained in the cluster. + * @param cluster - An object containing billboard, label, and point properties. The values are the same as + billboard, label and point entities, but must be the values of the ConstantProperty. + */ + type newClusterCallback = (clusteredEntities: Entity[], cluster: any) => void; +} + +/** + * An observable collection of {@link Entity} instances where each entity has a unique id. + * @param [owner] - The data source (or composite entity collection) which created this collection. + */ +export class EntityCollection { + constructor(owner?: DataSource | CompositeEntityCollection); + /** + * Prevents {@link EntityCollection#collectionChanged} events from being raised + until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which + point a single event will be raised that covers all suspended operations. + This allows for many items to be added and removed efficiently. + This function can be safely called multiple times as long as there + are corresponding calls to {@link EntityCollection#resumeEvents}. + */ + suspendEvents(): void; + /** + * Resumes raising {@link EntityCollection#collectionChanged} events immediately + when an item is added or removed. Any modifications made while while events were suspended + will be triggered as a single event when this function is called. + This function is reference counted and can safely be called multiple times as long as there + are corresponding calls to {@link EntityCollection#resumeEvents}. + */ + resumeEvents(): void; + /** + * The signature of the event generated by {@link EntityCollection#collectionChanged}. + * @param collection - The collection that triggered the event. + * @param added - The array of {@link Entity} instances that have been added to the collection. + * @param removed - The array of {@link Entity} instances that have been removed from the collection. + * @param changed - The array of {@link Entity} instances that have been modified. + */ + static collectionChangedEventCallback(collection: EntityCollection, added: Entity[], removed: Entity[], changed: Entity[]): void; + /** + * Gets the event that is fired when entities are added or removed from the collection. + The generated event is a {@link EntityCollection.collectionChangedEventCallback}. + */ + readonly collectionChanged: Event; + /** + * Gets a globally unique identifier for this collection. + */ + readonly id: string; + /** + * Gets the array of Entity instances in the collection. + This array should not be modified directly. + */ + readonly values: Entity[]; + /** + * Gets whether or not this entity collection should be + displayed. When true, each entity is only displayed if + its own show property is also true. + */ + show: boolean; + /** + * Gets the owner of this entity collection, ie. the data source or composite entity collection which created it. + */ + readonly owner: DataSource | CompositeEntityCollection; + /** + * Computes the maximum availability of the entities in the collection. + If the collection contains a mix of infinitely available data and non-infinite data, + it will return the interval pertaining to the non-infinite data only. If all + data is infinite, an infinite interval will be returned. + * @returns The availability of entities in the collection. + */ + computeAvailability(): TimeInterval; + /** + * Add an entity to the collection. + * @param entity - The entity to be added. + * @returns The entity that was added. + */ + add(entity: Entity | Entity.ConstructorOptions): Entity; + /** + * Removes an entity from the collection. + * @param entity - The entity to be removed. + * @returns true if the item was removed, false if it did not exist in the collection. + */ + remove(entity: Entity): boolean; + /** + * Returns true if the provided entity is in this collection, false otherwise. + * @param entity - The entity. + * @returns true if the provided entity is in this collection, false otherwise. + */ + contains(entity: Entity): boolean; + /** + * Removes an entity with the provided id from the collection. + * @param id - The id of the entity to remove. + * @returns true if the item was removed, false if no item with the provided id existed in the collection. + */ + removeById(id: string): boolean; + /** + * Removes all Entities from the collection. + */ + removeAll(): void; + /** + * Gets an entity with the specified id. + * @param id - The id of the entity to retrieve. + * @returns The entity with the provided id or undefined if the id did not exist in the collection. + */ + getById(id: string): Entity | undefined; + /** + * Gets an entity with the specified id or creates it and adds it to the collection if it does not exist. + * @param id - The id of the entity to retrieve or create. + * @returns The new or existing object. + */ + getOrCreateEntity(id: string): Entity; +} + +/** + * A utility object for tracking an entity with the camera. + * @param entity - The entity to track with the camera. + * @param scene - The scene to use. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid to use for orienting the camera. + */ +export class EntityView { + constructor(entity: Entity, scene: Scene, ellipsoid?: Ellipsoid); + /** + * The entity to track with the camera. + */ + entity: Entity; + /** + * The scene in which to track the object. + */ + scene: Scene; + /** + * The ellipsoid to use for orienting the camera. + */ + ellipsoid: Ellipsoid; + /** + * The bounding sphere of the object. + */ + boundingSphere: BoundingSphere; + /** + * Gets or sets a camera offset that will be used to + initialize subsequent EntityViews. + */ + static defaultOffset3D: Cartesian3; + /** + * Should be called each animation frame to update the camera + to the latest settings. + * @param time - The current animation time. + * @param [boundingSphere] - bounding sphere of the object. + */ + update(time: JulianDate, boundingSphere?: BoundingSphere): void; +} + +/** + * @property kml - The generated KML. + * @property externalFiles - An object dictionary of external files + */ +export type exportKmlResultKml = { + kml: string; + externalFiles: { + [key: string]: Blob; + }; +}; + +/** + * @property kmz - The generated kmz file. + */ +export type exportKmlResultKmz = { + kmz: Blob; +}; + +/** + * Exports an EntityCollection as a KML document. Only Point, Billboard, Model, Path, Polygon, Polyline geometries +will be exported. Note that there is not a 1 to 1 mapping of Entity properties to KML Feature properties. For +example, entity properties that are time dynamic but cannot be dynamic in KML are exported with their values at +options.time or the beginning of the EntityCollection's time interval if not specified. For time-dynamic properties +that are supported in KML, we use the samples if it is a {@link SampledProperty} otherwise we sample the value using +the options.sampleDuration. Point, Billboard, Model and Path geometries with time-dynamic positions will be exported +as gx:Track Features. Not all Materials are representable in KML, so for more advanced Materials just the primary +color is used. Canvas objects are exported as PNG images. + * @example + * Cesium.exportKml({ + entities: entityCollection + }) + .then(function(result) { + // The XML string is in result.kml + + var externalFiles = result.externalFiles + for(var file in externalFiles) { + // file is the name of the file used in the KML document as the href + // externalFiles[file] is a blob with the contents of the file + } + }); + * @param options - An object with the following properties: + * @param options.entities - The EntityCollection to export as KML. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid for the output file. + * @param [options.modelCallback] - A callback that will be called with a {@link ModelGraphics} instance and should return the URI to use in the KML. Required if a model exists in the entity collection. + * @param [options.time = entities.computeAvailability().start] - The time value to use to get properties that are not time varying in KML. + * @param [options.defaultAvailability = entities.computeAvailability()] - The interval that will be sampled if an entity doesn't have an availability. + * @param [options.sampleDuration = 60] - The number of seconds to sample properties that are varying in KML. + * @param [options.kmz = false] - If true KML and external files will be compressed into a kmz file. + * @returns A promise that resolved to an object containing the KML string and a dictionary of external file blobs, or a kmz file as a blob if options.kmz is true. + */ +export function exportKml(options: { + entities: EntityCollection; + ellipsoid?: Ellipsoid; + modelCallback?: exportKmlModelCallback; + time?: JulianDate; + defaultAvailability?: TimeInterval; + sampleDuration?: number; + kmz?: boolean; +}): Promise; + +/** + * Since KML does not support glTF models, this callback is required to specify what URL to use for the model in the KML document. +It can also be used to add additional files to the externalFiles object, which is the list of files embedded in the exported KMZ, +or otherwise returned with the KML string when exporting. + * @param model - The ModelGraphics instance for an Entity. + * @param time - The time that any properties should use to get the value. + * @param externalFiles - An object that maps a filename to a Blob or a Promise that resolves to a Blob. + */ +export type exportKmlModelCallback = (model: ModelGraphics, time: JulianDate, externalFiles: any) => string; + +export namespace GeoJsonDataSource { + /** + * Initialization options for the `load` method. + * @property [sourceUri] - Overrides the url to use for resolving relative links. + * @property [markerSize = GeoJsonDataSource.markerSize] - The default size of the map pin created for each point, in pixels. + * @property [markerSymbol = GeoJsonDataSource.markerSymbol] - The default symbol of the map pin created for each point. + * @property [markerColor = GeoJsonDataSource.markerColor] - The default color of the map pin created for each point. + * @property [stroke = GeoJsonDataSource.stroke] - The default color of polylines and polygon outlines. + * @property [strokeWidth = GeoJsonDataSource.strokeWidth] - The default width of polylines and polygon outlines. + * @property [fill = GeoJsonDataSource.fill] - The default color for polygon interiors. + * @property [clampToGround = GeoJsonDataSource.clampToGround] - true if we want the geometry features (polygons or linestrings) clamped to the ground. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type LoadOptions = { + sourceUri?: string; + markerSize?: number; + markerSymbol?: string; + markerColor?: Color; + stroke?: Color; + strokeWidth?: number; + fill?: Color; + clampToGround?: boolean; + credit?: Credit | string; + }; + /** + * This callback is displayed as part of the GeoJsonDataSource class. + * @param properties - The properties of the feature. + * @param nameProperty - The property key that Cesium estimates to have the name of the feature. + */ + type describe = (properties: any, nameProperty: string) => void; +} + +/** + * A {@link DataSource} which processes both +{@link http://www.geojson.org/|GeoJSON} and {@link https://github.com/mbostock/topojson|TopoJSON} data. +{@link https://github.com/mapbox/simplestyle-spec|simplestyle-spec} properties will also be used if they +are present. + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', { + stroke: Cesium.Color.HOTPINK, + fill: Cesium.Color.PINK, + strokeWidth: 3, + markerSymbol: '?' +})); + * @param [name] - The name of this data source. If undefined, a name will be taken from + the name of the GeoJSON file. + */ +export class GeoJsonDataSource { + constructor(name?: string); + /** + * Creates a Promise to a new instance loaded with the provided GeoJSON or TopoJSON data. + * @param data - A url, GeoJSON object, or TopoJSON object to be loaded. + * @param [options] - An object specifying configuration options + * @returns A promise that will resolve when the data is loaded. + */ + static load(data: Resource | string | any, options?: GeoJsonDataSource.LoadOptions): Promise; + /** + * Gets or sets the default size of the map pin created for each point, in pixels. + */ + static markerSize: number; + /** + * Gets or sets the default symbol of the map pin created for each point. + This can be any valid {@link http://mapbox.com/maki/|Maki} identifier, any single character, + or blank if no symbol is to be used. + */ + static markerSymbol: string; + /** + * Gets or sets the default color of the map pin created for each point. + */ + static markerColor: Color; + /** + * Gets or sets the default color of polylines and polygon outlines. + */ + static stroke: Color; + /** + * Gets or sets the default width of polylines and polygon outlines. + */ + static strokeWidth: number; + /** + * Gets or sets default color for polygon interiors. + */ + static fill: Color; + /** + * Gets or sets default of whether to clamp to the ground. + */ + static clampToGround: boolean; + /** + * Gets an object that maps the name of a crs to a callback function which takes a GeoJSON coordinate + and transforms it into a WGS84 Earth-fixed Cartesian. Older versions of GeoJSON which + supported the EPSG type can be added to this list as well, by specifying the complete EPSG name, + for example 'EPSG:4326'. + */ + static crsNames: any; + /** + * Gets an object that maps the href property of a crs link to a callback function + which takes the crs properties object and returns a Promise that resolves + to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian. + Items in this object take precedence over those defined in crsLinkHrefs, assuming + the link has a type specified. + */ + static crsLinkHrefs: any; + /** + * Gets an object that maps the type property of a crs link to a callback function + which takes the crs properties object and returns a Promise that resolves + to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian. + Items in crsLinkHrefs take precedence over this object. + */ + static crsLinkTypes: any; + /** + * Gets or sets a human-readable name for this instance. + */ + name: string; + /** + * This DataSource only defines static data, therefore this property is always undefined. + */ + clock: DataSourceClock; + /** + * Gets the collection of {@link Entity} instances. + */ + entities: EntityCollection; + /** + * Gets a value indicating if the data source is currently loading data. + */ + isLoading: boolean; + /** + * Gets an event that will be raised when the underlying data changes. + */ + changedEvent: Event; + /** + * Gets an event that will be raised if an error is encountered during processing. + */ + errorEvent: Event; + /** + * Gets an event that will be raised when the data source either starts or stops loading. + */ + loadingEvent: Event; + /** + * Gets whether or not this data source should be displayed. + */ + show: boolean; + /** + * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources. + */ + clustering: EntityCluster; + /** + * Gets the credit that will be displayed for the data source + */ + credit: Credit; + /** + * Asynchronously loads the provided GeoJSON or TopoJSON data, replacing any existing data. + * @param data - A url, GeoJSON object, or TopoJSON object to be loaded. + * @param [options] - An object with the following properties: + * @param [options.sourceUri] - Overrides the url to use for resolving relative links. + * @param [options.describe = GeoJsonDataSource.defaultDescribeProperty] - A function which returns a Property object (or just a string), + which converts the properties into an html description. + * @param [options.markerSize = GeoJsonDataSource.markerSize] - The default size of the map pin created for each point, in pixels. + * @param [options.markerSymbol = GeoJsonDataSource.markerSymbol] - The default symbol of the map pin created for each point. + * @param [options.markerColor = GeoJsonDataSource.markerColor] - The default color of the map pin created for each point. + * @param [options.stroke = GeoJsonDataSource.stroke] - The default color of polylines and polygon outlines. + * @param [options.strokeWidth = GeoJsonDataSource.strokeWidth] - The default width of polylines and polygon outlines. + * @param [options.fill = GeoJsonDataSource.fill] - The default color for polygon interiors. + * @param [options.clampToGround = GeoJsonDataSource.clampToGround] - true if we want the features clamped to the ground. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + * @returns a promise that will resolve when the GeoJSON is loaded. + */ + load(data: Resource | string | any, options?: { + sourceUri?: string; + describe?: GeoJsonDataSource.describe; + markerSize?: number; + markerSymbol?: string; + markerColor?: Color; + stroke?: Color; + strokeWidth?: number; + fill?: Color; + clampToGround?: boolean; + credit?: Credit | string; + }): Promise; + /** + * Updates the data source to the provided time. This function is optional and + is not required to be implemented. It is provided for data sources which + retrieve data based on the current animation time or scene state. + If implemented, update will be called by {@link DataSourceDisplay} once a frame. + * @param time - The simulation time. + * @returns True if this data source is ready to be displayed at the provided time, false otherwise. + */ + update(time: JulianDate): boolean; +} + +/** + * An abstract class for updating geometry entities. + * @param options - An object with the following properties: + * @param options.entity - The entity containing the geometry to be visualized. + * @param options.scene - The scene where visualization is taking place. + * @param options.geometryOptions - Options for the geometry + * @param options.geometryPropertyName - The geometry property name + * @param options.observedPropertyNames - The entity properties this geometry cares about + */ +export class GeometryUpdater { + constructor(options: { + entity: Entity; + scene: Scene; + geometryOptions: any; + geometryPropertyName: string; + observedPropertyNames: string[]; + }); + /** + * Gets the unique ID associated with this updater + */ + readonly id: string; + /** + * Gets the entity associated with this geometry. + */ + readonly entity: Entity; + /** + * Gets a value indicating if the geometry has a fill component. + */ + readonly fillEnabled: boolean; + /** + * Gets a value indicating if fill visibility varies with simulation time. + */ + readonly hasConstantFill: boolean; + /** + * Gets the material property used to fill the geometry. + */ + readonly fillMaterialProperty: MaterialProperty; + /** + * Gets a value indicating if the geometry has an outline component. + */ + readonly outlineEnabled: boolean; + /** + * Gets a value indicating if the geometry has an outline component. + */ + readonly hasConstantOutline: boolean; + /** + * Gets the {@link Color} property for the geometry outline. + */ + readonly outlineColorProperty: Property; + /** + * Gets the constant with of the geometry outline, in pixels. + This value is only valid if isDynamic is false. + */ + readonly outlineWidth: number; + /** + * Gets the property specifying whether the geometry + casts or receives shadows from light sources. + */ + readonly shadowsProperty: Property; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed. + */ + readonly distanceDisplayConditionProperty: Property; + /** + * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground. + */ + readonly classificationTypeProperty: Property; + /** + * Gets a value indicating if the geometry is time-varying. + If true, all visualization is delegated to a DynamicGeometryUpdater + returned by GeometryUpdater#createDynamicUpdater. + */ + readonly isDynamic: boolean; + /** + * Gets a value indicating if the geometry is closed. + This property is only valid for static geometry. + */ + readonly isClosed: boolean; + /** + * Gets an event that is raised whenever the public properties + of this updater change. + */ + readonly geometryChanged: boolean; + /** + * Checks if the geometry is outlined at the provided time. + * @param time - The time for which to retrieve visibility. + * @returns true if geometry is outlined at the provided time, false otherwise. + */ + isOutlineVisible(time: JulianDate): boolean; + /** + * Checks if the geometry is filled at the provided time. + * @param time - The time for which to retrieve visibility. + * @returns true if geometry is filled at the provided time, false otherwise. + */ + isFilled(time: JulianDate): boolean; + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys and resources used by the object. Once an object is destroyed, it should not be used. + */ + destroy(): void; +} + +/** + * A general purpose visualizer for geometry represented by {@link Primitive} instances. + * @param scene - The scene the primitives will be rendered in. + * @param entityCollection - The entityCollection to visualize. + * @param [primitives = scene.primitives] - A collection to add primitives related to the entities + * @param [groundPrimitives = scene.groundPrimitives] - A collection to add ground primitives related to the entities + */ +export class GeometryVisualizer { + constructor(scene: Scene, entityCollection: EntityCollection, primitives?: PrimitiveCollection, groundPrimitives?: PrimitiveCollection); + /** + * Updates all of the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns True if the visualizer successfully updated to the provided time, + false if the visualizer is waiting for asynchronous primitives to be created. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link MaterialProperty} that maps to grid {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.color = Color.WHITE] - A Property specifying the grid {@link Color}. + * @param [options.cellAlpha = 0.1] - A numeric Property specifying cell alpha values. + * @param [options.lineCount = new Cartesian2(8, 8)] - A {@link Cartesian2} Property specifying the number of grid lines along each axis. + * @param [options.lineThickness = new Cartesian2(1.0, 1.0)] - A {@link Cartesian2} Property specifying the thickness of grid lines along each axis. + * @param [options.lineOffset = new Cartesian2(0.0, 0.0)] - A {@link Cartesian2} Property specifying starting offset of grid lines along each axis. + */ +export class GridMaterialProperty { + constructor(options?: { + color?: Property | Color; + cellAlpha?: Property | number; + lineCount?: Property | Cartesian2; + lineThickness?: Property | Cartesian2; + lineOffset?: Property | Cartesian2; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the grid {@link Color}. + */ + color: Property | undefined; + /** + * Gets or sets the numeric Property specifying cell alpha values. + */ + cellAlpha: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the number of grid lines along each axis. + */ + lineCount: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the thickness of grid lines along each axis. + */ + lineThickness: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the starting offset of grid lines along each axis. + */ + lineOffset: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * An abstract class for updating ground geometry entities. + * @param options - An object with the following properties: + * @param options.entity - The entity containing the geometry to be visualized. + * @param options.scene - The scene where visualization is taking place. + * @param options.geometryOptions - Options for the geometry + * @param options.geometryPropertyName - The geometry property name + * @param options.observedPropertyNames - The entity properties this geometry cares about + */ +export class GroundGeometryUpdater { + constructor(options: { + entity: Entity; + scene: Scene; + geometryOptions: any; + geometryPropertyName: string; + observedPropertyNames: string[]; + }); + /** + * Gets the zindex + */ + readonly zIndex: number; + /** + * Destroys and resources used by the object. Once an object is destroyed, it should not be used. + */ + destroy(): void; +} + +/** + * A {@link MaterialProperty} that maps to image {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.image] - A Property specifying the Image, URL, Canvas, or Video. + * @param [options.repeat = new Cartesian2(1.0, 1.0)] - A {@link Cartesian2} Property specifying the number of times the image repeats in each direction. + * @param [options.color = Color.WHITE] - The color applied to the image + * @param [options.transparent = false] - Set to true when the image has transparency (for example, when a png has transparent sections) + */ +export class ImageMaterialProperty { + constructor(options?: { + image?: Property | string | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement; + repeat?: Property | Cartesian2; + color?: Property | Color; + transparent?: Property | boolean; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying Image, URL, Canvas, or Video to use. + */ + image: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the number of times the image repeats in each direction. + */ + repeat: Property | undefined; + /** + * Gets or sets the Color Property specifying the desired color applied to the image. + */ + color: Property | undefined; + /** + * Gets or sets the Boolean Property specifying whether the image has transparency + */ + transparent: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * Representation of from KML + * @param position - camera position + * @param headingPitchRoll - camera orientation + */ +export class KmlCamera { + constructor(position: Cartesian3, headingPitchRoll: HeadingPitchRoll); +} + +export namespace KmlDataSource { + /** + * Initialization options for the `load` method. + * @property camera - The camera that is used for viewRefreshModes and sending camera properties to network links. + * @property canvas - The canvas that is used for sending viewer properties to network links. + * @property [sourceUri] - Overrides the url to use for resolving relative links and other KML network features. + * @property [clampToGround = false] - true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground. + * @property [ellipsoid = Ellipsoid.WGS84] - The global ellipsoid used for geographical calculations. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type LoadOptions = { + camera: Camera; + canvas: HTMLCanvasElement; + sourceUri?: string; + clampToGround?: boolean; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }; +} + +/** + * A {@link DataSource} which processes Keyhole Markup Language 2.2 (KML). +

+KML support in Cesium is incomplete, but a large amount of the standard, +as well as Google's gx extension namespace, is supported. See Github issue +{@link https://github.com/CesiumGS/cesium/issues/873|#873} for a +detailed list of what is and isn't support. Cesium will also write information to the +console when it encounters most unsupported features. +

+

+Non visual feature data, such as atom:author and ExtendedData +is exposed via an instance of {@link KmlFeatureData}, which is added to each {@link Entity} +under the kml property. +

+ * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.dataSources.add(Cesium.KmlDataSource.load('../../SampleData/facilities.kmz', + { + camera: viewer.scene.camera, + canvas: viewer.scene.canvas + }) +); + * @param options - An object with the following properties: + * @param options.camera - The camera that is used for viewRefreshModes and sending camera properties to network links. + * @param options.canvas - The canvas that is used for sending viewer properties to network links. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The global ellipsoid used for geographical calculations. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + */ +export class KmlDataSource { + constructor(options: { + camera: Camera; + canvas: HTMLCanvasElement; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }); + /** + * Creates a Promise to a new instance loaded with the provided KML data. + * @param data - A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document. + * @param [options] - An object specifying configuration options + * @returns A promise that will resolve to a new KmlDataSource instance once the KML is loaded. + */ + static load(data: Resource | string | Document | Blob, options?: KmlDataSource.LoadOptions): Promise; + /** + * Gets or sets a human-readable name for this instance. + This will be automatically be set to the KML document name on load. + */ + name: string; + /** + * Gets the clock settings defined by the loaded KML. This represents the total + availability interval for all time-dynamic data. If the KML does not contain + time-dynamic data, this value is undefined. + */ + clock: DataSourceClock; + /** + * Gets the collection of {@link Entity} instances. + */ + entities: EntityCollection; + /** + * Gets a value indicating if the data source is currently loading data. + */ + isLoading: boolean; + /** + * Gets an event that will be raised when the underlying data changes. + */ + changedEvent: Event; + /** + * Gets an event that will be raised if an error is encountered during processing. + */ + errorEvent: Event; + /** + * Gets an event that will be raised when the data source either starts or stops loading. + */ + loadingEvent: Event; + /** + * Gets an event that will be raised when the data source refreshes a network link. + */ + refreshEvent: Event; + /** + * Gets an event that will be raised when the data source finds an unsupported node type. + */ + unsupportedNodeEvent: Event; + /** + * Gets whether or not this data source should be displayed. + */ + show: boolean; + /** + * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources. + */ + clustering: EntityCluster; + /** + * Gets the credit that will be displayed for the data source + */ + credit: Credit; + /** + * Asynchronously loads the provided KML data, replacing any existing data. + * @param data - A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document. + * @param [options] - An object with the following properties: + * @param [options.sourceUri] - Overrides the url to use for resolving relative links and other KML network features. + * @param [options.clampToGround = false] - true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground. If true, lines will use corridors so use Entity.corridor instead of Entity.polyline. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The global ellipsoid used for geographical calculations. + * @returns A promise that will resolve to this instances once the KML is loaded. + */ + load(data: Resource | string | Document | Blob, options?: { + sourceUri?: Resource | string; + clampToGround?: boolean; + ellipsoid?: Ellipsoid; + }): Promise; + /** + * Updates any NetworkLink that require updating. + * @param time - The simulation time. + * @returns True if this data source is ready to be displayed at the provided time, false otherwise. + */ + update(time: JulianDate): boolean; +} + +/** + * Contains KML Feature data loaded into the Entity.kml property by {@link KmlDataSource}. + */ +export class KmlFeatureData { + constructor(); + /** + * Gets the atom syndication format author field. + */ + author: KmlFeatureData.Author; + /** + * Gets the link. + */ + link: KmlFeatureData.Link; + /** + * Gets the unstructured address field. + */ + address: string; + /** + * Gets the phone number. + */ + phoneNumber: string; + /** + * Gets the snippet. + */ + snippet: string; + /** + * Gets the extended data, parsed into a JSON object. + Currently only the Data property is supported. + SchemaData and custom data are ignored. + */ + extendedData: string; +} + +export namespace KmlFeatureData { + /** + * @property name - Gets the name. + * @property uri - Gets the URI. + * @property age - Gets the email. + */ + type Author = { + name: string; + uri: string; + age: number; + }; + /** + * @property href - Gets the href. + * @property hreflang - Gets the language of the linked resource. + * @property rel - Gets the link relation. + * @property type - Gets the link type. + * @property title - Gets the link title. + * @property length - Gets the link length. + */ + type Link = { + href: string; + hreflang: string; + rel: string; + type: string; + title: string; + length: string; + }; +} + +/** + * @param position - camera position + * @param headingPitchRange - camera orientation + */ +export class KmlLookAt { + constructor(position: Cartesian3, headingPitchRange: HeadingPitchRange); +} + +/** + * @param name - name parsed from KML + * @param id - id parsed from KML + * @param playlist - array with KMLTourFlyTos, KMLTourWaits and KMLTourSoundCues + */ +export class KmlTour { + constructor(name: string, id: string, playlist: any[]); + /** + * Id of kml gx:Tour entry + */ + id: string; + /** + * Tour name + */ + name: string; + /** + * Index of current entry from playlist + */ + playlistIndex: number; + /** + * Array of playlist entries + */ + playlist: any[]; + /** + * Event will be called when tour starts to play, + before any playlist entry starts to play. + */ + tourStart: Event; + /** + * Event will be called when all playlist entries are + played, or tour playback being canceled. + + If tour playback was terminated, event callback will + be called with terminated=true parameter. + */ + tourEnd: Event; + /** + * Event will be called when entry from playlist starts to play. + + Event callback will be called with curent entry as first parameter. + */ + entryStart: Event; + /** + * Event will be called when entry from playlist ends to play. + + Event callback will be called with following parameters: + 1. entry - entry + 2. terminated - true if playback was terminated by calling {@link KmlTour#stop} + */ + entryEnd: Event; + /** + * Add entry to this tour playlist. + * @param entry - an entry to add to the playlist. + */ + addPlaylistEntry(entry: KmlTourFlyTo | KmlTourWait): void; + /** + * Play this tour. + * @param viewer - viewer widget. + * @param [cameraOptions] - these options will be merged with {@link Camera#flyTo} + options for FlyTo playlist entries. + */ + play(viewer: Viewer, cameraOptions?: any): void; + /** + * Stop curently playing tour. + */ + stop(): void; +} + +/** + * @param duration - entry duration + * @param flyToMode - KML fly to mode: bounce, smooth, etc + * @param view - KmlCamera or KmlLookAt + */ +export class KmlTourFlyTo { + constructor(duration: number, flyToMode: string, view: KmlCamera | KmlLookAt); + /** + * Play this playlist entry + * @param done - function which will be called when playback ends + * @param camera - Cesium camera + * @param [cameraOptions] - which will be merged with camera flyTo options. See {@link Camera#flyTo} + */ + play(done: KmlTourFlyTo.DoneCallback, camera: Camera, cameraOptions?: any): void; + /** + * Stop execution of curent entry. Cancel camera flyTo + */ + stop(): void; + /** + * Returns options for {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere} + depends on this.view type. + * @param cameraOptions - options to merge with generated. See {@link Camera#flyTo} + * @returns {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere} options + */ + getCameraOptions(cameraOptions: any): any; +} + +export namespace KmlTourFlyTo { + /** + * A function that will be executed when the flight completes. + * @param terminated - true if {@link KmlTourFlyTo#stop} was + called before entry done playback. + */ + type DoneCallback = (terminated: boolean) => void; +} + +/** + * @param duration - entry duration + */ +export class KmlTourWait { + constructor(duration: number); + /** + * Play this playlist entry + * @param done - function which will be called when playback ends + */ + play(done: KmlTourWait.DoneCallback): void; + /** + * Stop execution of curent entry, cancel curent timeout + */ + stop(): void; +} + +export namespace KmlTourWait { + /** + * A function which will be called when playback ends. + * @param terminated - true if {@link KmlTourWait#stop} was + called before entry done playback. + */ + type DoneCallback = (terminated: boolean) => void; +} + +export namespace LabelGraphics { + /** + * Initialization options for the LabelGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the label. + * @property [text] - A Property specifying the text. Explicit newlines '\n' are supported. + * @property [font = '30px sans-serif'] - A Property specifying the CSS font. + * @property [style = LabelStyle.FILL] - A Property specifying the {@link LabelStyle}. + * @property [scale = 1.0] - A numeric Property specifying the scale to apply to the text. + * @property [showBackground = false] - A boolean Property specifying the visibility of the background behind the label. + * @property [backgroundColor = new Color(0.165, 0.165, 0.165, 0.8)] - A Property specifying the background {@link Color}. + * @property [backgroundPadding = new Cartesian2(7, 5)] - A {@link Cartesian2} Property specifying the horizontal and vertical background padding in pixels. + * @property [pixelOffset = Cartesian2.ZERO] - A {@link Cartesian2} Property specifying the pixel offset. + * @property [eyeOffset = Cartesian3.ZERO] - A {@link Cartesian3} Property specifying the eye offset. + * @property [horizontalOrigin = HorizontalOrigin.CENTER] - A Property specifying the {@link HorizontalOrigin}. + * @property [verticalOrigin = VerticalOrigin.CENTER] - A Property specifying the {@link VerticalOrigin}. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [fillColor = Color.WHITE] - A Property specifying the fill {@link Color}. + * @property [outlineColor = Color.BLACK] - A Property specifying the outline {@link Color}. + * @property [outlineWidth = 1.0] - A numeric Property specifying the outline width. + * @property [translucencyByDistance] - A {@link NearFarScalar} Property used to set translucency based on distance from the camera. + * @property [pixelOffsetScaleByDistance] - A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera. + * @property [scaleByDistance] - A {@link NearFarScalar} Property used to set scale based on distance from the camera. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this label will be displayed. + * @property [disableDepthTestDistance] - A Property specifying the distance from the camera at which to disable the depth test to. + */ + type ConstructorOptions = { + show?: Property | boolean; + text?: Property | string; + font?: Property | string; + style?: Property | LabelStyle; + scale?: Property | number; + showBackground?: Property | boolean; + backgroundColor?: Property | Color; + backgroundPadding?: Property | Cartesian2; + pixelOffset?: Property | Cartesian2; + eyeOffset?: Property | Cartesian3; + horizontalOrigin?: Property | HorizontalOrigin; + verticalOrigin?: Property | VerticalOrigin; + heightReference?: Property | HeightReference; + fillColor?: Property | Color; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + translucencyByDistance?: Property | NearFarScalar; + pixelOffsetScaleByDistance?: Property | NearFarScalar; + scaleByDistance?: Property | NearFarScalar; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + disableDepthTestDistance?: Property | number; + }; +} + +/** + * Describes a two dimensional label located at the position of the containing {@link Entity}. +

+

+
+Example labels +
+

+ * @param [options] - Object describing initialization options + */ +export class LabelGraphics { + constructor(options?: LabelGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the label. + */ + show: Property | undefined; + /** + * Gets or sets the string Property specifying the text of the label. + Explicit newlines '\n' are supported. + */ + text: Property | undefined; + /** + * Gets or sets the string Property specifying the font in CSS syntax. + */ + font: Property | undefined; + /** + * Gets or sets the Property specifying the {@link LabelStyle}. + */ + style: Property | undefined; + /** + * Gets or sets the numeric Property specifying the uniform scale to apply to the image. + A scale greater than 1.0 enlarges the label while a scale less than 1.0 shrinks it. +

+

+
+ From left to right in the above image, the scales are 0.5, 1.0, + and 2.0. +
+

+ */ + scale: Property | undefined; + /** + * Gets or sets the boolean Property specifying the visibility of the background behind the label. + */ + showBackground: Property | undefined; + /** + * Gets or sets the Property specifying the background {@link Color}. + */ + backgroundColor: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the label's horizontal and vertical + background padding in pixels. + */ + backgroundPadding: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the label's pixel offset in screen space + from the origin of this label. This is commonly used to align multiple labels and labels at + the same position, e.g., an image and text. The screen space origin is the top, left corner of the + canvas; x increases from left to right, and y increases from top to bottom. +

+

+ + + +
default
l.pixeloffset = new Cartesian2(25, 75);
+ The label's origin is indicated by the yellow point. +
+

+ */ + pixelOffset: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} Property specifying the label's offset in eye coordinates. + Eye coordinates is a left-handed coordinate system, where x points towards the viewer's + right, y points up, and z points into the screen. +

+ An eye offset is commonly used to arrange multiple labels or objects at the same position, e.g., to + arrange a label above its corresponding 3D model. +

+ Below, the label is positioned at the center of the Earth but an eye offset makes it always + appear on top of the Earth regardless of the viewer's or Earth's orientation. +

+

+ + + +
+ l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);

+
+

+ */ + eyeOffset: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HorizontalOrigin}. + */ + horizontalOrigin: Property | undefined; + /** + * Gets or sets the Property specifying the {@link VerticalOrigin}. + */ + verticalOrigin: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the Property specifying the fill {@link Color}. + */ + fillColor: Property | undefined; + /** + * Gets or sets the Property specifying the outline {@link Color}. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the outline width. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the translucency of the label based on the distance from the camera. + A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's translucency remains clamped to the nearest bound. + */ + translucencyByDistance: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the label based on the distance from the camera. + A label's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's pixel offset remains clamped to the nearest bound. + */ + pixelOffsetScaleByDistance: Property | undefined; + /** + * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera. + A label's scale will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's scale remains clamped to the nearest bound. If undefined, + scaleByDistance will be disabled. + */ + scaleByDistance: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this label will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: LabelGraphics): LabelGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: LabelGraphics): void; +} + +/** + * A {@link Visualizer} which maps the {@link LabelGraphics} instance +in {@link Entity#label} to a {@link Label}. + * @param entityCluster - The entity cluster to manage the collection of billboards and optionally cluster with other entities. + * @param entityCollection - The entityCollection to visualize. + */ +export class LabelVisualizer { + constructor(entityCluster: EntityCluster, entityCollection: EntityCollection); + /** + * Updates the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * The interface for all {@link Property} objects that represent {@link Material} uniforms. +This type defines an interface and cannot be instantiated directly. + */ +export class MaterialProperty { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export namespace ModelGraphics { + /** + * Initialization options for the ModelGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the model. + * @property [uri] - A string or Resource Property specifying the URI of the glTF asset. + * @property [scale = 1.0] - A numeric Property specifying a uniform linear scale. + * @property [minimumPixelSize = 0.0] - A numeric Property specifying the approximate minimum pixel size of the model regardless of zoom. + * @property [maximumScale] - The maximum scale size of a model. An upper limit for minimumPixelSize. + * @property [incrementallyLoadTextures = true] - Determine if textures may continue to stream in after the model is loaded. + * @property [runAnimations = true] - A boolean Property specifying if glTF animations specified in the model should be started. + * @property [clampAnimations = true] - A boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes. + * @property [shadows = ShadowMode.ENABLED] - An enum Property specifying whether the model casts or receives shadows from light sources. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [silhouetteColor = Color.RED] - A Property specifying the {@link Color} of the silhouette. + * @property [silhouetteSize = 0.0] - A numeric Property specifying the size of the silhouette in pixels. + * @property [color = Color.WHITE] - A Property specifying the {@link Color} that blends with the model's rendered color. + * @property [colorBlendMode = ColorBlendMode.HIGHLIGHT] - An enum Property specifying how the color blends with the model. + * @property [colorBlendAmount = 0.5] - A numeric Property specifying the color strength when the colorBlendMode is MIX. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two. + * @property [imageBasedLightingFactor = new Cartesian2(1.0, 1.0)] - A property specifying the contribution from diffuse and specular image-based lighting. + * @property [lightColor] - A property specifying the light color when shading the model. When undefined the scene's light color is used instead. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this model will be displayed. + * @property [nodeTransformations] - An object, where keys are names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node. The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation. + * @property [articulations] - An object, where keys are composed of an articulation name, a single space, and a stage name, and the values are numeric properties. + * @property [clippingPlanes] - A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model. + */ + type ConstructorOptions = { + show?: Property | boolean; + uri?: Property | string | Resource; + scale?: Property | number; + minimumPixelSize?: Property | number; + maximumScale?: Property | number; + incrementallyLoadTextures?: Property | boolean; + runAnimations?: Property | boolean; + clampAnimations?: Property | boolean; + shadows?: Property | ShadowMode; + heightReference?: Property | HeightReference; + silhouetteColor?: Property | Color; + silhouetteSize?: Property | number; + color?: Property | Color; + colorBlendMode?: Property | ColorBlendMode; + colorBlendAmount?: Property | number; + imageBasedLightingFactor?: Property | Cartesian2; + lightColor?: Property | Color; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + nodeTransformations?: PropertyBag | { + [key: string]: TranslationRotationScale; + }; + articulations?: PropertyBag | { + [key: string]: number; + }; + clippingPlanes?: Property | ClippingPlaneCollection; + }; +} + +/** + * A 3D model based on {@link https://github.com/KhronosGroup/glTF|glTF}, the runtime asset format for WebGL, OpenGL ES, and OpenGL. +The position and orientation of the model is determined by the containing {@link Entity}. +

+Cesium includes support for glTF geometry, materials, animations, and skinning. +Cameras and lights are not currently supported. +

+ * @param [options] - Object describing initialization options + */ +export class ModelGraphics { + constructor(options?: ModelGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the model. + */ + show: Property | undefined; + /** + * Gets or sets the string Property specifying the URI of the glTF asset. + */ + uri: Property | undefined; + /** + * Gets or sets the numeric Property specifying a uniform linear scale + for this model. Values greater than 1.0 increase the size of the model while + values less than 1.0 decrease it. + */ + scale: Property | undefined; + /** + * Gets or sets the numeric Property specifying the approximate minimum + pixel size of the model regardless of zoom. This can be used to ensure that + a model is visible even when the viewer zooms out. When 0.0, + no minimum size is enforced. + */ + minimumPixelSize: Property | undefined; + /** + * Gets or sets the numeric Property specifying the maximum scale + size of a model. This property is used as an upper limit for + {@link ModelGraphics#minimumPixelSize}. + */ + maximumScale: Property | undefined; + /** + * Get or sets the boolean Property specifying whether textures + may continue to stream in after the model is loaded. + */ + incrementallyLoadTextures: Property | undefined; + /** + * Gets or sets the boolean Property specifying if glTF animations should be run. + */ + runAnimations: Property | undefined; + /** + * Gets or sets the boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes. + */ + clampAnimations: Property | undefined; + /** + * Get or sets the enum Property specifying whether the model + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the silhouette. + */ + silhouetteColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the size of the silhouette in pixels. + */ + silhouetteSize: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} that blends with the model's rendered color. + */ + color: Property | undefined; + /** + * Gets or sets the enum Property specifying how the color blends with the model. + */ + colorBlendMode: Property | undefined; + /** + * A numeric Property specifying the color strength when the colorBlendMode is MIX. + A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with + any value in-between resulting in a mix of the two. + */ + colorBlendAmount: Property | undefined; + /** + * A property specifying the {@link Cartesian2} used to scale the diffuse and specular image-based lighting contribution to the final color. + */ + imageBasedLightingFactor: Property | undefined; + /** + * A property specifying the {@link Cartesian3} light color when shading the model. When undefined the scene's light color is used instead. + */ + lightColor: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this model will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the set of node transformations to apply to this model. This is represented as an {@link PropertyBag}, where keys are + names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node. + The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation. + */ + nodeTransformations: PropertyBag; + /** + * Gets or sets the set of articulation values to apply to this model. This is represented as an {@link PropertyBag}, where keys are + composed as the name of the articulation, a single space, and the name of the stage. + */ + articulations: PropertyBag; + /** + * A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model. + */ + clippingPlanes: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: ModelGraphics): ModelGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: ModelGraphics): void; +} + +/** + * A {@link Visualizer} which maps {@link Entity#model} to a {@link Model}. + * @param scene - The scene the primitives will be rendered in. + * @param entityCollection - The entityCollection to visualize. + */ +export class ModelVisualizer { + constructor(scene: Scene, entityCollection: EntityCollection); + /** + * Updates models created this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link Property} that produces {@link TranslationRotationScale} data. + * @param [options] - Object with the following properties: + * @param [options.translation = Cartesian3.ZERO] - A {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node. + * @param [options.rotation = Quaternion.IDENTITY] - A {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node. + * @param [options.scale = new Cartesian3(1.0, 1.0, 1.0)] - A {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node. + */ +export class NodeTransformationProperty { + constructor(options?: { + translation?: Property | Cartesian3; + rotation?: Property | Quaternion; + scale?: Property | Cartesian3; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node. + */ + translation: Property | undefined; + /** + * Gets or sets the {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node. + */ + rotation: Property | undefined; + /** + * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node. + */ + scale: Property | undefined; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: TranslationRotationScale): TranslationRotationScale; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export namespace PathGraphics { + /** + * Initialization options for the PathGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the path. + * @property [leadTime] - A Property specifying the number of seconds in front the object to show. + * @property [trailTime] - A Property specifying the number of seconds behind of the object to show. + * @property [width = 1.0] - A numeric Property specifying the width in pixels. + * @property [resolution = 60] - A numeric Property specifying the maximum number of seconds to step when sampling the position. + * @property [material = Color.WHITE] - A Property specifying the material used to draw the path. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this path will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + leadTime?: Property | number; + trailTime?: Property | number; + width?: Property | number; + resolution?: Property | number; + material?: MaterialProperty | Color; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a polyline defined as the path made by an {@link Entity} as it moves over time. + * @param [options] - Object describing initialization options + */ +export class PathGraphics { + constructor(options?: PathGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the path. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the number of seconds in front of the object to show. + */ + leadTime: Property | undefined; + /** + * Gets or sets the Property specifying the number of seconds behind the object to show. + */ + trailTime: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width in pixels. + */ + width: Property | undefined; + /** + * Gets or sets the Property specifying the maximum number of seconds to step when sampling the position. + */ + resolution: Property | undefined; + /** + * Gets or sets the Property specifying the material used to draw the path. + */ + material: MaterialProperty; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this path will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PathGraphics): PathGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PathGraphics): void; +} + +/** + * A {@link Visualizer} which maps {@link Entity#path} to a {@link Polyline}. + * @param scene - The scene the primitives will be rendered in. + * @param entityCollection - The entityCollection to visualize. + */ +export class PathVisualizer { + constructor(scene: Scene, entityCollection: EntityCollection); + /** + * Updates all of the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link GeometryUpdater} for planes. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class PlaneGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace PlaneGraphics { + /** + * Initialization options for the PlaneGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the plane. + * @property [plane] - A {@link Plane} Property specifying the normal and distance for the plane. + * @property [dimensions] - A {@link Cartesian2} Property specifying the width and height of the plane. + * @property [fill = true] - A boolean Property specifying whether the plane is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the plane. + * @property [outline = false] - A boolean Property specifying whether the plane is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the plane casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this plane will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + plane?: Property | Plane; + dimensions?: Property | Cartesian2; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a plane. The center position and orientation are determined by the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class PlaneGraphics { + constructor(options?: PlaneGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the plane. + */ + show: Property | undefined; + /** + * Gets or sets the {@link Plane} Property specifying the normal and distance of the plane. + */ + plane: Property | undefined; + /** + * Gets or sets the {@link Cartesian2} Property specifying the width and height of the plane. + */ + dimensions: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the plane is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the material used to fill the plane. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the plane is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the plane + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this plane will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PlaneGraphics): PlaneGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PlaneGraphics): void; +} + +export namespace PointGraphics { + /** + * Initialization options for the PointGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the point. + * @property [pixelSize = 1] - A numeric Property specifying the size in pixels. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [color = Color.WHITE] - A Property specifying the {@link Color} of the point. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 0] - A numeric Property specifying the the outline width in pixels. + * @property [scaleByDistance] - A {@link NearFarScalar} Property used to scale the point based on distance. + * @property [translucencyByDistance] - A {@link NearFarScalar} Property used to set translucency based on distance from the camera. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this point will be displayed. + * @property [disableDepthTestDistance] - A Property specifying the distance from the camera at which to disable the depth test to. + */ + type ConstructorOptions = { + show?: Property | boolean; + pixelSize?: Property | number; + heightReference?: Property | HeightReference; + color?: Property | Color; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + scaleByDistance?: Property | NearFarScalar; + translucencyByDistance?: Property | NearFarScalar; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + disableDepthTestDistance?: Property | number; + }; +} + +/** + * Describes a graphical point located at the position of the containing {@link Entity}. + * @param [options] - Object describing initialization options + */ +export class PointGraphics { + constructor(options?: PointGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the point. + */ + show: Property | undefined; + /** + * Gets or sets the numeric Property specifying the size in pixels. + */ + pixelSize: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the point. + */ + color: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the the outline width in pixels. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets the {@link NearFarScalar} Property used to scale the point based on distance. + If undefined, a constant size is used. + */ + scaleByDistance: Property | undefined; + /** + * Gets or sets {@link NearFarScalar} Property specifying the translucency of the point based on the distance from the camera. + A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the points's translucency remains clamped to the nearest bound. + */ + translucencyByDistance: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this point will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PointGraphics): PointGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PointGraphics): void; +} + +/** + * A {@link Visualizer} which maps {@link Entity#point} to a {@link PointPrimitive}. + * @param entityCluster - The entity cluster to manage the collection of billboards and optionally cluster with other entities. + * @param entityCollection - The entityCollection to visualize. + */ +export class PointVisualizer { + constructor(entityCluster: EntityCluster, entityCollection: EntityCollection); + /** + * Updates the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns This function always returns true. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link GeometryUpdater} for polygons. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class PolygonGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace PolygonGraphics { + /** + * Initialization options for the PolygonGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the polygon. + * @property [hierarchy] - A Property specifying the {@link PolygonHierarchy}. + * @property [height = 0] - A numeric Property specifying the altitude of the polygon relative to the ellipsoid surface. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [extrudedHeight] - A numeric Property specifying the altitude of the polygon's extruded face relative to the ellipsoid surface. + * @property [extrudedHeightReference = HeightReference.NONE] - A Property specifying what the extrudedHeight is relative to. + * @property [stRotation = 0.0] - A numeric property specifying the rotation of the polygon texture counter-clockwise from north. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between each latitude and longitude point. + * @property [fill = true] - A boolean Property specifying whether the polygon is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the polygon. + * @property [outline = false] - A boolean Property specifying whether the polygon is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [perPositionHeight = false] - A boolean specifying whether or not the height of each position is used. + * @property [closeTop = true] - When false, leaves off the top of an extruded polygon open. + * @property [closeBottom = true] - When false, leaves off the bottom of an extruded polygon open. + * @property [arcType = ArcType.GEODESIC] - The type of line the polygon edges must follow. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the polygon casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this polygon will be displayed. + * @property [classificationType = ClassificationType.BOTH] - An enum Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground. + * @property [zIndex = 0] - A property specifying the zIndex used for ordering ground geometry. Only has an effect if the polygon is constant and neither height or extrudedHeight are specified. + */ + type ConstructorOptions = { + show?: Property | boolean; + hierarchy?: Property | PolygonHierarchy; + height?: Property | number; + heightReference?: Property | HeightReference; + extrudedHeight?: Property | number; + extrudedHeightReference?: Property | HeightReference; + stRotation?: Property | number; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + perPositionHeight?: Property | boolean; + closeTop?: boolean | boolean; + closeBottom?: boolean | boolean; + arcType?: Property | ArcType; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + classificationType?: Property | ClassificationType; + zIndex?: ConstantProperty | number; + }; +} + +/** + * Describes a polygon defined by an hierarchy of linear rings which make up the outer shape and any nested holes. +The polygon conforms to the curvature of the globe and can be placed on the surface or +at altitude and can optionally be extruded into a volume. + * @param [options] - Object describing initialization options + */ +export class PolygonGraphics { + constructor(options?: PolygonGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the polygon. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the {@link PolygonHierarchy}. + */ + hierarchy: Property | undefined; + /** + * Gets or sets the numeric Property specifying the constant altitude of the polygon. + */ + height: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the polygon extrusion. + If {@link PolygonGraphics#perPositionHeight} is false, the volume starts at {@link PolygonGraphics#height} and ends at this altitude. + If {@link PolygonGraphics#perPositionHeight} is true, the volume starts at the height of each {@link PolygonGraphics#hierarchy} position and ends at this altitude. + */ + extrudedHeight: Property | undefined; + /** + * Gets or sets the Property specifying the extruded {@link HeightReference}. + */ + extrudedHeightReference: Property | undefined; + /** + * Gets or sets the numeric property specifying the rotation of the polygon texture counter-clockwise from north. + */ + stRotation: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between points on the polygon. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the polygon is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the polygon. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the polygon is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Gets or sets the boolean specifying whether or not the the height of each position is used. + If true, the shape will have non-uniform altitude defined by the height of each {@link PolygonGraphics#hierarchy} position. + If false, the shape will have a constant altitude as specified by {@link PolygonGraphics#height}. + */ + perPositionHeight: Property | undefined; + /** + * Gets or sets a boolean specifying whether or not the top of an extruded polygon is included. + */ + closeTop: Property | undefined; + /** + * Gets or sets a boolean specifying whether or not the bottom of an extruded polygon is included. + */ + closeBottom: Property | undefined; + /** + * Gets or sets the {@link ArcType} Property specifying the type of lines the polygon edges use. + */ + arcType: Property | undefined; + /** + * Get or sets the enum Property specifying whether the polygon + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polygon will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the {@link ClassificationType} Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground. + */ + classificationType: Property | undefined; + /** + * Gets or sets the zIndex Prperty specifying the ordering of ground geometry. Only has an effect if the polygon is constant and neither height or extrudedHeight are specified. + */ + zIndex: ConstantProperty | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PolygonGraphics): PolygonGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PolygonGraphics): void; +} + +/** + * A {@link MaterialProperty} that maps to PolylineArrow {@link Material} uniforms. + * @param [color = Color.WHITE] - The {@link Color} Property to be used. + */ +export class PolylineArrowMaterialProperty { + constructor(color?: Property | Color); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the {@link Color} {@link Property}. + */ + color: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link MaterialProperty} that maps to polyline dash {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.color = Color.WHITE] - A Property specifying the {@link Color} of the line. + * @param [options.gapColor = Color.TRANSPARENT] - A Property specifying the {@link Color} of the gaps in the line. + * @param [options.dashLength = 16.0] - A numeric Property specifying the length of the dash pattern in pixels. + * @param [options.dashPattern = 255.0] - A numeric Property specifying a 16 bit pattern for the dash + */ +export class PolylineDashMaterialProperty { + constructor(options?: { + color?: Property | Color; + gapColor?: Property | Color; + dashLength?: Property | number; + dashPattern?: Property | number; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the {@link Color} of the line. + */ + color: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the gaps in the line. + */ + gapColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the length of a dash cycle + */ + dashLength: Property | undefined; + /** + * Gets or sets the numeric Property specifying a dash pattern + */ + dashPattern: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link GeometryUpdater} for polylines. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class PolylineGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Gets the unique ID associated with this updater + */ + readonly id: string; + /** + * Gets the entity associated with this geometry. + */ + readonly entity: Entity; + /** + * Gets a value indicating if the geometry has a fill component. + */ + readonly fillEnabled: boolean; + /** + * Gets a value indicating if fill visibility varies with simulation time. + */ + readonly hasConstantFill: boolean; + /** + * Gets the material property used to fill the geometry. + */ + readonly fillMaterialProperty: MaterialProperty; + /** + * Gets the material property used to fill the geometry when it fails the depth test. + */ + readonly depthFailMaterialProperty: MaterialProperty; + /** + * Gets a value indicating if the geometry has an outline component. + */ + readonly outlineEnabled: boolean; + /** + * Gets a value indicating if outline visibility varies with simulation time. + */ + readonly hasConstantOutline: boolean; + /** + * Gets the {@link Color} property for the geometry outline. + */ + readonly outlineColorProperty: Property; + /** + * Gets the property specifying whether the geometry + casts or receives shadows from light sources. + */ + readonly shadowsProperty: Property; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed. + */ + readonly distanceDisplayConditionProperty: Property; + /** + * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground. + */ + readonly classificationTypeProperty: Property; + /** + * Gets a value indicating if the geometry is time-varying. + If true, all visualization is delegated to the {@link DynamicGeometryUpdater} + returned by GeometryUpdater#createDynamicUpdater. + */ + readonly isDynamic: boolean; + /** + * Gets a value indicating if the geometry is closed. + This property is only valid for static geometry. + */ + readonly isClosed: boolean; + /** + * Gets an event that is raised whenever the public properties + of this updater change. + */ + readonly geometryChanged: boolean; + /** + * Gets a value indicating if the path of the line. + */ + readonly arcType: ArcType; + /** + * Gets a value indicating if the geometry is clamped to the ground. + Returns false if polylines on terrain is not supported. + */ + readonly clampToGround: boolean; + /** + * Gets the zindex + */ + readonly zIndex: number; + /** + * Checks if the geometry is outlined at the provided time. + * @param time - The time for which to retrieve visibility. + * @returns true if geometry is outlined at the provided time, false otherwise. + */ + isOutlineVisible(time: JulianDate): boolean; + /** + * Checks if the geometry is filled at the provided time. + * @param time - The time for which to retrieve visibility. + * @returns true if geometry is filled at the provided time, false otherwise. + */ + isFilled(time: JulianDate): boolean; + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys and resources used by the object. Once an object is destroyed, it should not be used. + */ + destroy(): void; +} + +/** + * A {@link MaterialProperty} that maps to polyline glow {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.color = Color.WHITE] - A Property specifying the {@link Color} of the line. + * @param [options.glowPower = 0.25] - A numeric Property specifying the strength of the glow, as a percentage of the total line width. + * @param [options.taperPower = 1.0] - A numeric Property specifying the strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used. + */ +export class PolylineGlowMaterialProperty { + constructor(options?: { + color?: Property | Color; + glowPower?: Property | number; + taperPower?: Property | number; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the {@link Color} of the line. + */ + color: Property | undefined; + /** + * Gets or sets the numeric Property specifying the strength of the glow, as a percentage of the total line width (less than 1.0). + */ + glowPower: Property | undefined; + /** + * Gets or sets the numeric Property specifying the strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used. + */ + taperPower: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export namespace PolylineGraphics { + /** + * Initialization options for the PolylineGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the polyline. + * @property [positions] - A Property specifying the array of {@link Cartesian3} positions that define the line strip. + * @property [width = 1.0] - A numeric Property specifying the width in pixels. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE. + * @property [material = Color.WHITE] - A Property specifying the material used to draw the polyline. + * @property [depthFailMaterial] - A property specifying the material used to draw the polyline when it is below the terrain. + * @property [arcType = ArcType.GEODESIC] - The type of line the polyline segments must follow. + * @property [clampToGround = false] - A boolean Property specifying whether the Polyline should be clamped to the ground. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the polyline casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this polyline will be displayed. + * @property [classificationType = ClassificationType.BOTH] - An enum Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground. + * @property [zIndex = 0] - A Property specifying the zIndex used for ordering ground geometry. Only has an effect if `clampToGround` is true and polylines on terrain is supported. + */ + type ConstructorOptions = { + show?: Property | boolean; + positions?: Property | Cartesian3[]; + width?: Property | number; + granularity?: Property | number; + material?: MaterialProperty | Color; + depthFailMaterial?: MaterialProperty | Color; + arcType?: Property | ArcType; + clampToGround?: Property | boolean; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + classificationType?: Property | ClassificationType; + zIndex?: Property | number; + }; +} + +/** + * Describes a polyline. The first two positions define a line segment, +and each additional position defines a line segment from the previous position. The segments +can be linear connected points, great arcs, or clamped to terrain. + * @param [options] - Object describing initialization options + */ +export class PolylineGraphics { + constructor(options?: PolylineGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the polyline. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the array of {@link Cartesian3} + positions that define the line strip. + */ + positions: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width in pixels. + */ + width: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE and clampToGround is false. + */ + granularity: Property | undefined; + /** + * Gets or sets the Property specifying the material used to draw the polyline. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying the material used to draw the polyline when it fails the depth test. +

+ Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported, + there may be artifacts. +

+ */ + depthFailMaterial: MaterialProperty; + /** + * Gets or sets the {@link ArcType} Property specifying whether the line segments should be great arcs, rhumb lines or linearly connected. + */ + arcType: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the polyline + should be clamped to the ground. + */ + clampToGround: Property | undefined; + /** + * Get or sets the enum Property specifying whether the polyline + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polyline will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the {@link ClassificationType} Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground. + */ + classificationType: Property | undefined; + /** + * Gets or sets the zIndex Property specifying the ordering of the polyline. Only has an effect if `clampToGround` is true and polylines on terrain is supported. + */ + zIndex: ConstantProperty | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PolylineGraphics): PolylineGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PolylineGraphics): void; +} + +/** + * A {@link MaterialProperty} that maps to polyline outline {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.color = Color.WHITE] - A Property specifying the {@link Color} of the line. + * @param [options.outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @param [options.outlineWidth = 1.0] - A numeric Property specifying the width of the outline, in pixels. + */ +export class PolylineOutlineMaterialProperty { + constructor(options?: { + color?: Property | Color; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the {@link Color} of the line. + */ + color: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A visualizer for polylines represented by {@link Primitive} instances. + * @param scene - The scene the primitives will be rendered in. + * @param entityCollection - The entityCollection to visualize. + * @param [primitives = scene.primitives] - A collection to add primitives related to the entities + * @param [groundPrimitives = scene.groundPrimitives] - A collection to add ground primitives related to the entities + */ +export class PolylineVisualizer { + constructor(scene: Scene, entityCollection: EntityCollection, primitives?: PrimitiveCollection, groundPrimitives?: PrimitiveCollection); + /** + * Updates all of the primitives created by this visualizer to match their + Entity counterpart at the given time. + * @param time - The time to update to. + * @returns True if the visualizer successfully updated to the provided time, + false if the visualizer is waiting for asynchronous primitives to be created. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes and destroys all primitives created by this instance. + */ + destroy(): void; +} + +/** + * A {@link GeometryUpdater} for polyline volumes. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class PolylineVolumeGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace PolylineVolumeGraphics { + /** + * Initialization options for the PolylineVolumeGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the volume. + * @property [positions] - A Property specifying the array of {@link Cartesian3} positions which define the line strip. + * @property [shape] - A Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded. + * @property [cornerType = CornerType.ROUNDED] - A {@link CornerType} Property specifying the style of the corners. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between each latitude and longitude point. + * @property [fill = true] - A boolean Property specifying whether the volume is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the volume. + * @property [outline = false] - A boolean Property specifying whether the volume is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the volume casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this volume will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + positions?: Property | Cartesian3[]; + shape?: Property | Cartesian2[]; + cornerType?: Property | CornerType; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a polyline volume defined as a line strip and corresponding two dimensional shape which is extruded along it. +The resulting volume conforms to the curvature of the globe. + * @param [options] - Object describing initialization options + */ +export class PolylineVolumeGraphics { + constructor(options?: PolylineVolumeGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the volume. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the line strip. + */ + positions: Property | undefined; + /** + * Gets or sets the Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded. + */ + shape: Property | undefined; + /** + * Gets or sets the {@link CornerType} Property specifying the style of the corners. + */ + cornerType: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between points on the volume. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the volume is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the volume. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the volume is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the volume + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this volume will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: PolylineVolumeGraphics): PolylineVolumeGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: PolylineVolumeGraphics): void; +} + +/** + * The interface for all {@link Property} objects that define a world +location as a {@link Cartesian3} with an associated {@link ReferenceFrame}. +This type defines an interface and cannot be instantiated directly. + */ +export class PositionProperty { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the reference frame that the position is defined in. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the value of the property at the provided time in the fixed frame. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: Cartesian3): Cartesian3; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} whose value is an array whose items are the computed value +of other PositionProperty instances. + * @param [value] - An array of Property instances. + * @param [referenceFrame = ReferenceFrame.FIXED] - The reference frame in which the position is defined. + */ +export class PositionPropertyArray { + constructor(value?: Property[], referenceFrame?: ReferenceFrame); + /** + * Gets a value indicating if this property is constant. This property + is considered constant if all property items in the array are constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value or one of the properties in the array also changes. + */ + readonly definitionChanged: Event; + /** + * Gets the reference frame in which the position is defined. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the value of the property. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: Cartesian3[]): Cartesian3[]; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3[]): Cartesian3[]; + /** + * Sets the value of the property. + * @param value - An array of Property instances. + */ + setValue(value: Property[]): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * The interface for all properties, which represent a value that can optionally vary over time. +This type defines an interface and cannot be instantiated directly. + */ +export class Property { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} whose value is an array whose items are the computed value +of other property instances. + * @param [value] - An array of Property instances. + */ +export class PropertyArray { + constructor(value?: Property[]); + /** + * Gets a value indicating if this property is constant. This property + is considered constant if all property items in the array are constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value or one of the properties in the array also changes. + */ + readonly definitionChanged: Event; + /** + * Gets the value of the property. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter, which is an array of values produced by evaluating each of the contained properties at the given time or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: object[]): object[]; + /** + * Sets the value of the property. + * @param value - An array of Property instances. + */ + setValue(value: Property[]): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export interface PropertyBag extends DictionaryLike { +} + +/** + * A {@link Property} whose value is a key-value mapping of property names to the computed value of other properties. + * @param [value] - An object, containing key-value mapping of property names to properties. + * @param [createPropertyCallback] - A function that will be called when the value of any of the properties in value are not a Property. + */ +export class PropertyBag implements DictionaryLike { + constructor(value?: any, createPropertyCallback?: (...params: any[]) => any); + /** + * Gets the names of all properties registered on this instance. + */ + propertyNames: any[]; + /** + * Gets a value indicating if this property is constant. This property + is considered constant if all property items in this object are constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the set of properties contained in this + object changes, or one of the properties itself changes. + */ + readonly definitionChanged: Event; + /** + * Determines if this object has defined a property with the given name. + * @param propertyName - The name of the property to check for. + * @returns True if this object has defined a property with the given name, false otherwise. + */ + hasProperty(propertyName: string): boolean; + /** + * Adds a property to this object. + * @param propertyName - The name of the property to add. + * @param [value] - The value of the new property, if provided. + * @param [createPropertyCallback] - A function that will be called when the value of this new property is set to a value that is not a Property. + */ + addProperty(propertyName: string, value?: any, createPropertyCallback?: (...params: any[]) => any): void; + /** + * Removed a property previously added with addProperty. + * @param propertyName - The name of the property to remove. + */ + removeProperty(propertyName: string): void; + /** + * Gets the value of this property. Each contained property will be evaluated at the given time, and the overall + result will be an object, mapping property names to those values. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + Note that any properties in result which are not part of this PropertyBag will be left as-is. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + * @param [createPropertyCallback] - A function that will be called when the value of any of the properties in value are not a Property. + */ + merge(source: any, createPropertyCallback?: (...params: any[]) => any): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link GeometryUpdater} for rectangles. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class RectangleGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace RectangleGraphics { + /** + * Initialization options for the RectangleGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the rectangle. + * @property [coordinates] - The Property specifying the {@link Rectangle}. + * @property [height = 0] - A numeric Property specifying the altitude of the rectangle relative to the ellipsoid surface. + * @property [heightReference = HeightReference.NONE] - A Property specifying what the height is relative to. + * @property [extrudedHeight] - A numeric Property specifying the altitude of the rectangle's extruded face relative to the ellipsoid surface. + * @property [extrudedHeightReference = HeightReference.NONE] - A Property specifying what the extrudedHeight is relative to. + * @property [rotation = 0.0] - A numeric property specifying the rotation of the rectangle clockwise from north. + * @property [stRotation = 0.0] - A numeric property specifying the rotation of the rectangle texture counter-clockwise from north. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between points on the rectangle. + * @property [fill = true] - A boolean Property specifying whether the rectangle is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the rectangle. + * @property [outline = false] - A boolean Property specifying whether the rectangle is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the rectangle casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this rectangle will be displayed. + * @property [classificationType = ClassificationType.BOTH] - An enum Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground. + * @property [zIndex = 0] - A Property specifying the zIndex used for ordering ground geometry. Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified. + */ + type ConstructorOptions = { + show?: Property | boolean; + coordinates?: Property | Rectangle; + height?: Property | number; + heightReference?: Property | HeightReference; + extrudedHeight?: Property | number; + extrudedHeightReference?: Property | HeightReference; + rotation?: Property | number; + stRotation?: Property | number; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + classificationType?: Property | ClassificationType; + zIndex?: Property | number; + }; +} + +/** + * Describes graphics for a {@link Rectangle}. +The rectangle conforms to the curvature of the globe and can be placed on the surface or +at altitude and can optionally be extruded into a volume. + * @param [options] - Object describing initialization options + */ +export class RectangleGraphics { + constructor(options?: RectangleGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the rectangle. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Rectangle}. + */ + coordinates: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the rectangle. + */ + height: Property | undefined; + /** + * Gets or sets the Property specifying the {@link HeightReference}. + */ + heightReference: Property | undefined; + /** + * Gets or sets the numeric Property specifying the altitude of the rectangle extrusion. + Setting this property creates volume starting at height and ending at this altitude. + */ + extrudedHeight: Property | undefined; + /** + * Gets or sets the Property specifying the extruded {@link HeightReference}. + */ + extrudedHeightReference: Property | undefined; + /** + * Gets or sets the numeric property specifying the rotation of the rectangle clockwise from north. + */ + rotation: Property | undefined; + /** + * Gets or sets the numeric property specifying the rotation of the rectangle texture counter-clockwise from north. + */ + stRotation: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between points on the rectangle. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the rectangle is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the rectangle. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the rectangle is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the rectangle + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this rectangle will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Gets or sets the {@link ClassificationType} Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground. + */ + classificationType: Property | undefined; + /** + * Gets or sets the zIndex Property specifying the ordering of the rectangle. Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified. + */ + zIndex: ConstantProperty | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: RectangleGraphics): RectangleGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: RectangleGraphics): void; +} + +/** + * A {@link Property} which transparently links to another property on a provided object. + * @example + * var collection = new Cesium.EntityCollection(); + +//Create a new entity and assign a billboard scale. +var object1 = new Cesium.Entity({id:'object1'}); +object1.billboard = new Cesium.BillboardGraphics(); +object1.billboard.scale = new Cesium.ConstantProperty(2.0); +collection.add(object1); + +//Create a second entity and reference the scale from the first one. +var object2 = new Cesium.Entity({id:'object2'}); +object2.model = new Cesium.ModelGraphics(); +object2.model.scale = new Cesium.ReferenceProperty(collection, 'object1', ['billboard', 'scale']); +collection.add(object2); + +//Create a third object, but use the fromString helper function. +var object3 = new Cesium.Entity({id:'object3'}); +object3.billboard = new Cesium.BillboardGraphics(); +object3.billboard.scale = Cesium.ReferenceProperty.fromString(collection, 'object1#billboard.scale'); +collection.add(object3); + +//You can refer to an entity with a # or . in id and property names by escaping them. +var object4 = new Cesium.Entity({id:'#object.4'}); +object4.billboard = new Cesium.BillboardGraphics(); +object4.billboard.scale = new Cesium.ConstantProperty(2.0); +collection.add(object4); + +var object5 = new Cesium.Entity({id:'object5'}); +object5.billboard = new Cesium.BillboardGraphics(); +object5.billboard.scale = Cesium.ReferenceProperty.fromString(collection, '\\#object\\.4#billboard.scale'); +collection.add(object5); + * @param targetCollection - The entity collection which will be used to resolve the reference. + * @param targetId - The id of the entity which is being referenced. + * @param targetPropertyNames - The names of the property on the target entity which we will use. + */ +export class ReferenceProperty { + constructor(targetCollection: EntityCollection, targetId: string, targetPropertyNames: string[]); + /** + * Gets a value indicating if this property is constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever the referenced property's definition is changed. + */ + readonly definitionChanged: Event; + /** + * Gets the reference frame that the position is defined in. + This property is only valid if the referenced property is a {@link PositionProperty}. + */ + readonly referenceFrame: ReferenceFrame; + /** + * Gets the id of the entity being referenced. + */ + readonly targetId: string; + /** + * Gets the collection containing the entity being referenced. + */ + readonly targetCollection: EntityCollection; + /** + * Gets the array of property names used to retrieve the referenced property. + */ + readonly targetPropertyNames: string[]; + /** + * Gets the resolved instance of the underlying referenced property. + */ + readonly resolvedProperty: Property | undefined; + /** + * Creates a new instance given the entity collection that will + be used to resolve it and a string indicating the target entity id and property. + The format of the string is "objectId#foo.bar", where # separates the id from + property path and . separates sub-properties. If the reference identifier or + or any sub-properties contains a # . or \ they must be escaped. + * @returns A new instance of ReferenceProperty. + */ + static fromString(targetCollection: EntityCollection, referenceString: string): ReferenceProperty; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + This method is only valid if the property being referenced is a {@link PositionProperty}. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Gets the {@link Material} type at the provided time. + This method is only valid if the property being referenced is a {@link MaterialProperty}. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +export namespace Rotation { + /** + * The number of elements used to pack the object into an array. + */ + var packedLength: number; + /** + * Stores the provided instance into the provided array. + * @param value - The value to pack. + * @param array - The array to pack into. + * @param [startingIndex = 0] - The index into the array at which to start packing the elements. + * @returns The array that was packed into + */ + function pack(value: Rotation, array: number[], startingIndex?: number): number[]; + /** + * Retrieves an instance from a packed array. + * @param array - The packed array. + * @param [startingIndex = 0] - The starting index of the element to be unpacked. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Rotation instance if one was not provided. + */ + function unpack(array: number[], startingIndex?: number, result?: Rotation): Rotation; + /** + * Converts a packed array into a form suitable for interpolation. + * @param packedArray - The packed array. + * @param [startingIndex = 0] - The index of the first element to be converted. + * @param [lastIndex = packedArray.length] - The index of the last element to be converted. + * @param [result] - The object into which to store the result. + */ + function convertPackedArrayForInterpolation(packedArray: number[], startingIndex?: number, lastIndex?: number, result?: number[]): void; + /** + * Retrieves an instance from a packed array converted with {@link Rotation.convertPackedArrayForInterpolation}. + * @param array - The array previously packed for interpolation. + * @param sourceArray - The original packed array. + * @param [firstIndex = 0] - The firstIndex used to convert the array. + * @param [lastIndex = packedArray.length] - The lastIndex used to convert the array. + * @param [result] - The object into which to store the result. + * @returns The modified result parameter or a new Rotation instance if one was not provided. + */ + function unpackInterpolationResult(array: number[], sourceArray: number[], firstIndex?: number, lastIndex?: number, result?: Rotation): Rotation; +} + +/** + * Represents a {@link Packable} number that always interpolates values +towards the shortest angle of rotation. This object is never used directly +but is instead passed to the constructor of {@link SampledProperty} +in order to represent a two-dimensional angle of rotation. + * @example + * var time1 = Cesium.JulianDate.fromIso8601('2010-05-07T00:00:00'); +var time2 = Cesium.JulianDate.fromIso8601('2010-05-07T00:01:00'); +var time3 = Cesium.JulianDate.fromIso8601('2010-05-07T00:02:00'); + +var property = new Cesium.SampledProperty(Cesium.Rotation); +property.addSample(time1, 0); +property.addSample(time3, Cesium.Math.toRadians(350)); + +//Getting the value at time2 will equal 355 degrees instead +//of 175 degrees (which is what you get if you construct +//a SampledProperty(Number) instead. Note, the actual +//return value is in radians, not degrees. +property.getValue(time2); + */ +export interface Rotation { +} + +/** + * A {@link SampledProperty} which is also a {@link PositionProperty}. + * @param [referenceFrame = ReferenceFrame.FIXED] - The reference frame in which the position is defined. + * @param [numberOfDerivatives = 0] - The number of derivatives that accompany each position; i.e. velocity, acceleration, etc... + */ +export class SampledPositionProperty { + constructor(referenceFrame?: ReferenceFrame, numberOfDerivatives?: number); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the reference frame in which the position is defined. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the degree of interpolation to perform when retrieving a value. Call setInterpolationOptions to set this. + */ + readonly interpolationDegree: number; + /** + * Gets the interpolation algorithm to use when retrieving a value. Call setInterpolationOptions to set this. + */ + readonly interpolationAlgorithm: InterpolationAlgorithm; + /** + * The number of derivatives contained by this property; i.e. 0 for just position, 1 for velocity, etc. + */ + numberOfDerivatives: number; + /** + * Gets or sets the type of extrapolation to perform when a value + is requested at a time after any available samples. + */ + forwardExtrapolationType: ExtrapolationType; + /** + * Gets or sets the amount of time to extrapolate forward before + the property becomes undefined. A value of 0 will extrapolate forever. + */ + forwardExtrapolationDuration: number; + /** + * Gets or sets the type of extrapolation to perform when a value + is requested at a time before any available samples. + */ + backwardExtrapolationType: ExtrapolationType; + /** + * Gets or sets the amount of time to extrapolate backward + before the property becomes undefined. A value of 0 will extrapolate forever. + */ + backwardExtrapolationDuration: number; + /** + * Gets the position at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: Cartesian3): Cartesian3; + /** + * Gets the position at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Sets the algorithm and degree to use when interpolating a position. + * @param [options] - Object with the following properties: + * @param [options.interpolationAlgorithm] - The new interpolation algorithm. If undefined, the existing property will be unchanged. + * @param [options.interpolationDegree] - The new interpolation degree. If undefined, the existing property will be unchanged. + */ + setInterpolationOptions(options?: { + interpolationAlgorithm?: InterpolationAlgorithm; + interpolationDegree?: number; + }): void; + /** + * Adds a new sample. + * @param time - The sample time. + * @param position - The position at the provided time. + * @param [derivatives] - The array of derivative values at the provided time. + */ + addSample(time: JulianDate, position: Cartesian3, derivatives?: Cartesian3[]): void; + /** + * Adds multiple samples via parallel arrays. + * @param times - An array of JulianDate instances where each index is a sample time. + * @param positions - An array of Cartesian3 position instances, where each value corresponds to the provided time index. + * @param [derivatives] - An array where each value is another array containing derivatives for the corresponding time index. + */ + addSamples(times: JulianDate[], positions: Cartesian3[], derivatives?: any[][]): void; + /** + * Adds samples as a single packed array where each new sample is represented as a date, + followed by the packed representation of the corresponding value and derivatives. + * @param packedSamples - The array of packed samples. + * @param [epoch] - If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds. + */ + addSamplesPackedArray(packedSamples: number[], epoch?: JulianDate): void; + /** + * Removes a sample at the given time, if present. + * @param time - The sample time. + * @returns true if a sample at time was removed, false otherwise. + */ + removeSample(time: JulianDate): boolean; + /** + * Removes all samples for the given time interval. + * @param time - The time interval for which to remove all samples. + */ + removeSamples(time: TimeInterval): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} whose value is interpolated for a given time from the +provided set of samples and specified interpolation algorithm and degree. + * @example + * //Create a linearly interpolated Cartesian2 +var property = new Cesium.SampledProperty(Cesium.Cartesian2); + +//Populate it with data +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), new Cesium.Cartesian2(0, 0)); +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-02T00:00:00.00Z'), new Cesium.Cartesian2(4, 7)); + +//Retrieve an interpolated value +var result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T12:00:00.00Z')); + * @example + * //Create a simple numeric SampledProperty that uses third degree Hermite Polynomial Approximation +var property = new Cesium.SampledProperty(Number); +property.setInterpolationOptions({ + interpolationDegree : 3, + interpolationAlgorithm : Cesium.HermitePolynomialApproximation +}); + +//Populate it with data +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), 1.0); +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:01:00.00Z'), 6.0); +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:00.00Z'), 12.0); +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:03:30.00Z'), 5.0); +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:06:30.00Z'), 2.0); + +//Samples can be added in any order. +property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:30.00Z'), 6.2); + +//Retrieve an interpolated value +var result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:34.00Z')); + * @param type - The type of property. + * @param [derivativeTypes] - When supplied, indicates that samples will contain derivative information of the specified types. + */ +export class SampledProperty { + constructor(type: number | Packable, derivativeTypes?: Packable[]); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the type of property. + */ + type: any; + /** + * Gets the derivative types used by this property. + */ + derivativeTypes: Packable[]; + /** + * Gets the degree of interpolation to perform when retrieving a value. + */ + interpolationDegree: number; + /** + * Gets the interpolation algorithm to use when retrieving a value. + */ + interpolationAlgorithm: InterpolationAlgorithm; + /** + * Gets or sets the type of extrapolation to perform when a value + is requested at a time after any available samples. + */ + forwardExtrapolationType: ExtrapolationType; + /** + * Gets or sets the amount of time to extrapolate forward before + the property becomes undefined. A value of 0 will extrapolate forever. + */ + forwardExtrapolationDuration: number; + /** + * Gets or sets the type of extrapolation to perform when a value + is requested at a time before any available samples. + */ + backwardExtrapolationType: ExtrapolationType; + /** + * Gets or sets the amount of time to extrapolate backward + before the property becomes undefined. A value of 0 will extrapolate forever. + */ + backwardExtrapolationDuration: number; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Sets the algorithm and degree to use when interpolating a value. + * @param [options] - Object with the following properties: + * @param [options.interpolationAlgorithm] - The new interpolation algorithm. If undefined, the existing property will be unchanged. + * @param [options.interpolationDegree] - The new interpolation degree. If undefined, the existing property will be unchanged. + */ + setInterpolationOptions(options?: { + interpolationAlgorithm?: InterpolationAlgorithm; + interpolationDegree?: number; + }): void; + /** + * Adds a new sample. + * @param time - The sample time. + * @param value - The value at the provided time. + * @param [derivatives] - The array of derivatives at the provided time. + */ + addSample(time: JulianDate, value: Packable, derivatives?: Packable[]): void; + /** + * Adds an array of samples. + * @param times - An array of JulianDate instances where each index is a sample time. + * @param values - The array of values, where each value corresponds to the provided times index. + * @param [derivativeValues] - An array where each item is the array of derivatives at the equivalent time index. + */ + addSamples(times: JulianDate[], values: Packable[], derivativeValues?: any[][]): void; + /** + * Adds samples as a single packed array where each new sample is represented as a date, + followed by the packed representation of the corresponding value and derivatives. + * @param packedSamples - The array of packed samples. + * @param [epoch] - If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds. + */ + addSamplesPackedArray(packedSamples: number[], epoch?: JulianDate): void; + /** + * Removes a sample at the given time, if present. + * @param time - The sample time. + * @returns true if a sample at time was removed, false otherwise. + */ + removeSample(time: JulianDate): boolean; + /** + * Removes all samples for the given time interval. + * @param time - The time interval for which to remove all samples. + */ + removeSamples(time: TimeInterval): void; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link MaterialProperty} that maps to stripe {@link Material} uniforms. + * @param [options] - Object with the following properties: + * @param [options.orientation = StripeOrientation.HORIZONTAL] - A Property specifying the {@link StripeOrientation}. + * @param [options.evenColor = Color.WHITE] - A Property specifying the first {@link Color}. + * @param [options.oddColor = Color.BLACK] - A Property specifying the second {@link Color}. + * @param [options.offset = 0] - A numeric Property specifying how far into the pattern to start the material. + * @param [options.repeat = 1] - A numeric Property specifying how many times the stripes repeat. + */ +export class StripeMaterialProperty { + constructor(options?: { + orientation?: Property | StripeOrientation; + evenColor?: Property | Color; + oddColor?: Property | Color; + offset?: Property | number; + repeat?: Property | number; + }); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the Property specifying the {@link StripeOrientation}/ + */ + orientation: Property | undefined; + /** + * Gets or sets the Property specifying the first {@link Color}. + */ + evenColor: Property | undefined; + /** + * Gets or sets the Property specifying the second {@link Color}. + */ + oddColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the point into the pattern + to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning + of the odd color, 2.0 being the even color again, and any multiple or fractional values + being in between. + */ + offset: Property | undefined; + /** + * Gets or sets the numeric Property specifying how many times the stripes repeat. + */ + repeat: Property | undefined; + /** + * Gets the {@link Material} type at the provided time. + * @param time - The time for which to retrieve the type. + * @returns The type of material. + */ + getType(time: JulianDate): string; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * Defined the orientation of stripes in {@link StripeMaterialProperty}. + */ +export enum StripeOrientation { + /** + * Horizontal orientation. + */ + HORIZONTAL = 0, + /** + * Vertical orientation. + */ + VERTICAL = 1 +} + +/** + * A {@link TimeIntervalCollectionProperty} which is also a {@link PositionProperty}. + * @param [referenceFrame = ReferenceFrame.FIXED] - The reference frame in which the position is defined. + */ +export class TimeIntervalCollectionPositionProperty { + constructor(referenceFrame?: ReferenceFrame); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is considered to have changed if a call to getValue would return + a different result for the same time. + */ + readonly definitionChanged: Event; + /** + * Gets the interval collection. + */ + intervals: TimeIntervalCollection; + /** + * Gets the reference frame in which the position is defined. + */ + referenceFrame: ReferenceFrame; + /** + * Gets the value of the property at the provided time in the fixed frame. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Gets the value of the property at the provided time and in the provided reference frame. + * @param time - The time for which to retrieve the value. + * @param referenceFrame - The desired referenceFrame of the result. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValueInReferenceFrame(time: JulianDate, referenceFrame: ReferenceFrame, result?: Cartesian3): Cartesian3; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the +data property of each {@link TimeInterval} represents the value at time. + * @example + * //Create a Cartesian2 interval property which contains data on August 1st, 2012 +//and uses a different value every 6 hours. +var composite = new Cesium.TimeIntervalCollectionProperty(); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T06:00:00.00Z', + isStartIncluded : true, + isStopIncluded : false, + data : new Cesium.Cartesian2(2.0, 3.4) +})); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T06:00:00.00Z/2012-08-01T12:00:00.00Z', + isStartIncluded : true, + isStopIncluded : false, + data : new Cesium.Cartesian2(12.0, 2.7) +})); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T12:00:00.00Z/2012-08-01T18:00:00.00Z', + isStartIncluded : true, + isStopIncluded : false, + data : new Cesium.Cartesian2(5.0, 12.4) +})); +composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({ + iso8601 : '2012-08-01T18:00:00.00Z/2012-08-02T00:00:00.00Z', + isStartIncluded : true, + isStopIncluded : true, + data : new Cesium.Cartesian2(85.0, 4.1) +})); + */ +export class TimeIntervalCollectionProperty { + constructor(); + /** + * Gets a value indicating if this property is constant. A property is considered + constant if getValue always returns the same result for the current definition. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + The definition is changed whenever setValue is called with data different + than the current value. + */ + readonly definitionChanged: Event; + /** + * Gets the interval collection. + */ + intervals: TimeIntervalCollection; + /** + * Gets the value of the property at the provided time. + * @param time - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time: JulianDate, result?: any): any; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} which evaluates to a {@link Quaternion} rotation +based on the velocity of the provided {@link PositionProperty}. + * @example + * //Create an entity with position and orientation. +var position = new Cesium.SampledProperty(); +position.addSamples(...); +var entity = viewer.entities.add({ + position : position, + orientation : new Cesium.VelocityOrientationProperty(position) +})); + * @param [position] - The position property used to compute the orientation. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid used to determine which way is up. + */ +export class VelocityOrientationProperty { + constructor(position?: PositionProperty, ellipsoid?: Ellipsoid); + /** + * Gets a value indicating if this property is constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the position property used to compute orientation. + */ + position: Property | undefined; + /** + * Gets or sets the ellipsoid used to determine which way is up. + */ + ellipsoid: Property | undefined; + /** + * Gets the value of the property at the provided time. + * @param [time] - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time?: JulianDate, result?: Quaternion): Quaternion; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * A {@link Property} which evaluates to a {@link Cartesian3} vector +based on the velocity of the provided {@link PositionProperty}. + * @example + * //Create an entity with a billboard rotated to match its velocity. +var position = new Cesium.SampledProperty(); +position.addSamples(...); +var entity = viewer.entities.add({ + position : position, + billboard : { + image : 'image.png', + alignedAxis : new Cesium.VelocityVectorProperty(position, true) // alignedAxis must be a unit vector + } +})); + * @param [position] - The position property used to compute the velocity. + * @param [normalize = true] - Whether to normalize the computed velocity vector. + */ +export class VelocityVectorProperty { + constructor(position?: PositionProperty, normalize?: boolean); + /** + * Gets a value indicating if this property is constant. + */ + readonly isConstant: boolean; + /** + * Gets the event that is raised whenever the definition of this property changes. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the position property used to compute the velocity vector. + */ + position: Property | undefined; + /** + * Gets or sets whether the vector produced by this property + will be normalized or not. + */ + normalize: boolean; + /** + * Gets the value of the property at the provided time. + * @param [time] - The time for which to retrieve the value. + * @param [result] - The object to store the value into, if omitted, a new instance is created and returned. + * @returns The modified result parameter or a new instance if the result parameter was not supplied. + */ + getValue(time?: JulianDate, result?: Cartesian3): Cartesian3; + /** + * Compares this property to the provided property and returns + true if they are equal, false otherwise. + * @param [other] - The other property. + * @returns true if left and right are equal, false otherwise. + */ + equals(other?: Property): boolean; +} + +/** + * Defines the interface for visualizers. Visualizers are plug-ins to +{@link DataSourceDisplay} that render data associated with +{@link DataSource} instances. +This object is an interface for documentation purposes and is not intended +to be instantiated directly. + */ +export class Visualizer { + constructor(); + /** + * Updates the visualization to the provided time. + * @param time - The time. + * @returns True if the display was updated to the provided time, + false if the visualizer is waiting for an asynchronous operation to + complete before data can be updated. + */ + update(time: JulianDate): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes all visualization and cleans up any resources associated with this instance. + */ + destroy(): void; +} + +/** + * A {@link GeometryUpdater} for walls. +Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}. + * @param entity - The entity containing the geometry to be visualized. + * @param scene - The scene where visualization is taking place. + */ +export class WallGeometryUpdater { + constructor(entity: Entity, scene: Scene); + /** + * Creates the geometry instance which represents the fill of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the filled portion of the geometry. + */ + createFillGeometryInstance(time: JulianDate): GeometryInstance; + /** + * Creates the geometry instance which represents the outline of the geometry. + * @param time - The time to use when retrieving initial attribute values. + * @returns The geometry instance representing the outline portion of the geometry. + */ + createOutlineGeometryInstance(time: JulianDate): GeometryInstance; +} + +export namespace WallGraphics { + /** + * Initialization options for the WallGraphics constructor + * @property [show = true] - A boolean Property specifying the visibility of the wall. + * @property [positions] - A Property specifying the array of {@link Cartesian3} positions which define the top of the wall. + * @property [minimumHeights] - A Property specifying an array of heights to be used for the bottom of the wall instead of the globe surface. + * @property [maximumHeights] - A Property specifying an array of heights to be used for the top of the wall instead of the height of each position. + * @property [granularity = Cesium.Math.RADIANS_PER_DEGREE] - A numeric Property specifying the angular distance between each latitude and longitude point. + * @property [fill = true] - A boolean Property specifying whether the wall is filled with the provided material. + * @property [material = Color.WHITE] - A Property specifying the material used to fill the wall. + * @property [outline = false] - A boolean Property specifying whether the wall is outlined. + * @property [outlineColor = Color.BLACK] - A Property specifying the {@link Color} of the outline. + * @property [outlineWidth = 1.0] - A numeric Property specifying the width of the outline. + * @property [shadows = ShadowMode.DISABLED] - An enum Property specifying whether the wall casts or receives shadows from light sources. + * @property [distanceDisplayCondition] - A Property specifying at what distance from the camera that this wall will be displayed. + */ + type ConstructorOptions = { + show?: Property | boolean; + positions?: Property | Cartesian3[]; + minimumHeights?: Property | number[]; + maximumHeights?: Property | number[]; + granularity?: Property | number; + fill?: Property | boolean; + material?: MaterialProperty | Color; + outline?: Property | boolean; + outlineColor?: Property | Color; + outlineWidth?: Property | number; + shadows?: Property | ShadowMode; + distanceDisplayCondition?: Property | DistanceDisplayCondition; + }; +} + +/** + * Describes a two dimensional wall defined as a line strip and optional maximum and minimum heights. +The wall conforms to the curvature of the globe and can be placed along the surface or at altitude. + * @param [options] - Object describing initialization options + */ +export class WallGraphics { + constructor(options?: WallGraphics.ConstructorOptions); + /** + * Gets the event that is raised whenever a property or sub-property is changed or modified. + */ + readonly definitionChanged: Event; + /** + * Gets or sets the boolean Property specifying the visibility of the wall. + */ + show: Property | undefined; + /** + * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the top of the wall. + */ + positions: Property | undefined; + /** + * Gets or sets the Property specifying an array of heights to be used for the bottom of the wall instead of the surface of the globe. + If defined, the array must be the same length as {@link Wall#positions}. + */ + minimumHeights: Property | undefined; + /** + * Gets or sets the Property specifying an array of heights to be used for the top of the wall instead of the height of each position. + If defined, the array must be the same length as {@link Wall#positions}. + */ + maximumHeights: Property | undefined; + /** + * Gets or sets the numeric Property specifying the angular distance between points on the wall. + */ + granularity: Property | undefined; + /** + * Gets or sets the boolean Property specifying whether the wall is filled with the provided material. + */ + fill: Property | undefined; + /** + * Gets or sets the Property specifying the material used to fill the wall. + */ + material: MaterialProperty; + /** + * Gets or sets the Property specifying whether the wall is outlined. + */ + outline: Property | undefined; + /** + * Gets or sets the Property specifying the {@link Color} of the outline. + */ + outlineColor: Property | undefined; + /** + * Gets or sets the numeric Property specifying the width of the outline. + */ + outlineWidth: Property | undefined; + /** + * Get or sets the enum Property specifying whether the wall + casts or receives shadows from light sources. + */ + shadows: Property | undefined; + /** + * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this wall will be displayed. + */ + distanceDisplayCondition: Property | undefined; + /** + * Duplicates this instance. + * @param [result] - The object onto which to store the result. + * @returns The modified result parameter or a new instance if one was not provided. + */ + clone(result?: WallGraphics): WallGraphics; + /** + * Assigns each unassigned property on this object to the value + of the same property on the provided source object. + * @param source - The object to be merged into this object. + */ + merge(source: WallGraphics): void; +} + +/** + * The data type of a pixel. + */ +export enum PixelDatatype { + UNSIGNED_BYTE = WebGLConstants.UNSIGNED_BYTE, + UNSIGNED_SHORT = WebGLConstants.UNSIGNED_SHORT, + UNSIGNED_INT = WebGLConstants.UNSIGNED_INT, + FLOAT = WebGLConstants.FLOAT, + HALF_FLOAT = WebGLConstants.HALF_FLOAT_OES, + UNSIGNED_INT_24_8 = WebGLConstants.UNSIGNED_INT_24_8, + UNSIGNED_SHORT_4_4_4_4 = WebGLConstants.UNSIGNED_SHORT_4_4_4_4, + UNSIGNED_SHORT_5_5_5_1 = WebGLConstants.UNSIGNED_SHORT_5_5_5_1, + UNSIGNED_SHORT_5_6_5 = WebGLConstants.UNSIGNED_SHORT_5_6_5 +} + +/** + * Enumerates all possible filters used when magnifying WebGL textures. + */ +export enum TextureMagnificationFilter { + /** + * Samples the texture by returning the closest pixel. + */ + NEAREST = WebGLConstants.NEAREST, + /** + * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than NEAREST filtering. + */ + LINEAR = WebGLConstants.LINEAR +} + +/** + * Enumerates all possible filters used when minifying WebGL textures. + */ +export enum TextureMinificationFilter { + /** + * Samples the texture by returning the closest pixel. + */ + NEAREST = WebGLConstants.NEAREST, + /** + * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than NEAREST filtering. + */ + LINEAR = WebGLConstants.LINEAR, + /** + * Selects the nearest mip level and applies nearest sampling within that level. +

+ Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture. +

+ */ + NEAREST_MIPMAP_NEAREST = WebGLConstants.NEAREST_MIPMAP_NEAREST, + /** + * Selects the nearest mip level and applies linear sampling within that level. +

+ Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture. +

+ */ + LINEAR_MIPMAP_NEAREST = WebGLConstants.LINEAR_MIPMAP_NEAREST, + /** + * Read texture values with nearest sampling from two adjacent mip levels and linearly interpolate the results. +

+ This option provides a good balance of visual quality and speed when sampling from a mipmapped texture. +

+

+ Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture. +

+ */ + NEAREST_MIPMAP_LINEAR = WebGLConstants.NEAREST_MIPMAP_LINEAR, + /** + * Read texture values with linear sampling from two adjacent mip levels and linearly interpolate the results. +

+ This option provides a good balance of visual quality and speed when sampling from a mipmapped texture. +

+

+ Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture. +

+ */ + LINEAR_MIPMAP_LINEAR = WebGLConstants.LINEAR_MIPMAP_LINEAR +} + +/** + * An appearance defines the full GLSL vertex and fragment shaders and the +render state used to draw a {@link Primitive}. All appearances implement +this base Appearance interface. + * @param [options] - Object with the following properties: + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link Appearance#renderState} has alpha blending enabled. + * @param [options.closed = false] - When true, the geometry is expected to be closed so {@link Appearance#renderState} has backface culling enabled. + * @param [options.material = Material.ColorType] - The material used to determine the fragment color. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class Appearance { + constructor(options?: { + translucent?: boolean; + closed?: boolean; + material?: Material; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * The material used to determine the fragment color. Unlike other {@link Appearance} + properties, this is not read-only, so an appearance's material can change on the fly. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. The full fragment shader + source is built procedurally taking into account the {@link Appearance#material}. + Use {@link Appearance#getFragmentShaderSource} to get the full source. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. + */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed. + */ + readonly closed: boolean; + /** + * Procedurally creates the full GLSL fragment shader source for this appearance + taking into account {@link Appearance#fragmentShaderSource} and {@link Appearance#material}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link Appearance#translucent} and {@link Material#isTranslucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +export namespace ArcGisMapServerImageryProvider { + /** + * Initialization options for the ArcGisMapServerImageryProvider constructor + * @property url - The URL of the ArcGIS MapServer service. + * @property [token] - The ArcGIS token used to authenticate with the ArcGIS MapServer service. + * @property [tileDiscardPolicy] - The policy that determines if a tile + is invalid and should be discarded. If this value is not specified, a default + {@link DiscardMissingTileImagePolicy} is used for tiled map servers, and a + {@link NeverTileDiscardPolicy} is used for non-tiled map servers. In the former case, + we request tile 0,0 at the maximum tile level and check pixels (0,0), (200,20), (20,200), + (80,110), and (160, 130). If all of these pixels are transparent, the discard check is + disabled and no tiles are discarded. If any of them have a non-transparent color, any + tile that has the same values in these pixel locations is discarded. The end result of + these defaults should be correct tile discarding for a standard ArcGIS Server. To ensure + that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this + parameter. + * @property [usePreCachedTilesIfAvailable = true] - If true, the server's pre-cached + tiles are used if they are available. If false, any pre-cached tiles are ignored and the + 'export' service is used. + * @property [layers] - A comma-separated list of the layers to show, or undefined if all layers should be shown. + * @property [enablePickFeatures = true] - If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will invoke + the Identify service on the MapServer and return the features included in the response. If false, + {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features) + without communicating with the server. Set this property to false if you don't want this provider's features to + be pickable. Can be overridden by setting the {@link ArcGisMapServerImageryProvider#enablePickFeatures} property on the object. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle of the layer. This parameter is ignored when accessing + a tiled layer. + * @property [tilingScheme = new GeographicTilingScheme()] - The tiling scheme to use to divide the world into tiles. + This parameter is ignored when accessing a tiled server. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified and used, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [credit] - A credit for the data source, which is displayed on the canvas. This parameter is ignored when accessing a tiled server. + * @property [tileWidth = 256] - The width of each tile in pixels. This parameter is ignored when accessing a tiled server. + * @property [tileHeight = 256] - The height of each tile in pixels. This parameter is ignored when accessing a tiled server. + * @property [maximumLevel] - The maximum tile level to request, or undefined if there is no maximum. This parameter is ignored when accessing + a tiled server. + */ + type ConstructorOptions = { + url: Resource | string; + token?: string; + tileDiscardPolicy?: TileDiscardPolicy; + usePreCachedTilesIfAvailable?: boolean; + layers?: string; + enablePickFeatures?: boolean; + rectangle?: Rectangle; + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + tileWidth?: number; + tileHeight?: number; + maximumLevel?: number; + }; +} + +/** + * Provides tiled imagery hosted by an ArcGIS MapServer. By default, the server's pre-cached tiles are +used, if available. + * @example + * var esri = new Cesium.ArcGisMapServerImageryProvider({ + url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer' +}); + * @param options - Object describing initialization options + */ +export class ArcGisMapServerImageryProvider { + constructor(options: ArcGisMapServerImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets or sets a value indicating whether feature picking is enabled. If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will + invoke the "identify" operation on the ArcGIS server and return the features included in the response. If false, + {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features) + without communicating with the server. + */ + enablePickFeatures: boolean; + /** + * Gets the URL of the ArcGIS MapServer. + */ + readonly url: string; + /** + * Gets the ArcGIS token used to authenticate with the ArcGis MapServer service. + */ + readonly token: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether this imagery provider is using pre-cached tiles from the + ArcGIS MapServer. If the imagery provider is not yet ready ({@link ArcGisMapServerImageryProvider#ready}), this function + will return the value of `options.usePreCachedTilesIfAvailable`, even if the MapServer does + not have pre-cached tiles. + */ + readonly usingPrecachedTiles: boolean; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the comma-separated list of layer IDs to show. + */ + layers: string; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link ArcGisMapServerImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * /** + Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link ImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * An enum describing the x, y, and z axes and helper conversion functions. + */ +export enum Axis { + /** + * Denotes the x-axis. + */ + X = 0, + /** + * Denotes the y-axis. + */ + Y = 1, + /** + * Denotes the z-axis. + */ + Z = 2 +} + +/** + * A viewport-aligned image positioned in the 3D scene, that is created +and rendered using a {@link BillboardCollection}. A billboard is created and its initial +properties are set by calling {@link BillboardCollection#add}. +

+
+
+Example billboards +
+ */ +export class Billboard { + constructor(); + /** + * Determines if this billboard will be shown. Use this to hide or show a billboard, instead + of removing it and re-adding it to the collection. + */ + show: boolean; + /** + * Gets or sets the Cartesian position of this billboard. + */ + position: Cartesian3; + /** + * Gets or sets the height reference of this billboard. + */ + heightReference: HeightReference; + /** + * Gets or sets the pixel offset in screen space from the origin of this billboard. This is commonly used + to align multiple billboards and labels at the same position, e.g., an image and text. The + screen space origin is the top, left corner of the canvas; x increases from + left to right, and y increases from top to bottom. +

+
+ + + +
default
b.pixeloffset = new Cartesian2(50, 25);
+ The billboard's origin is indicated by the yellow point. +
+ */ + pixelOffset: Cartesian2; + /** + * Gets or sets near and far scaling properties of a Billboard based on the billboard's distance from the camera. + A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's scale remains clamped to the nearest bound. If undefined, + scaleByDistance will be disabled. + * @example + * // Example 1. + // Set a billboard's scaleByDistance to scale by 1.5 when the + // camera is 1500 meters from the billboard and disappear as + // the camera distance approaches 8.0e6 meters. + b.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0); + * @example + * // Example 2. + // disable scaling by distance + b.scaleByDistance = undefined; + */ + scaleByDistance: NearFarScalar; + /** + * Gets or sets near and far translucency properties of a Billboard based on the billboard's distance from the camera. + A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's translucency remains clamped to the nearest bound. If undefined, + translucencyByDistance will be disabled. + * @example + * // Example 1. + // Set a billboard's translucency to 1.0 when the + // camera is 1500 meters from the billboard and disappear as + // the camera distance approaches 8.0e6 meters. + b.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0); + * @example + * // Example 2. + // disable translucency by distance + b.translucencyByDistance = undefined; + */ + translucencyByDistance: NearFarScalar; + /** + * Gets or sets near and far pixel offset scaling properties of a Billboard based on the billboard's distance from the camera. + A billboard's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the billboard's pixel offset scale remains clamped to the nearest bound. If undefined, + pixelOffsetScaleByDistance will be disabled. + * @example + * // Example 1. + // Set a billboard's pixel offset scale to 0.0 when the + // camera is 1500 meters from the billboard and scale pixel offset to 10.0 pixels + // in the y direction the camera distance approaches 8.0e6 meters. + b.pixelOffset = new Cesium.Cartesian2(0.0, 1.0); + b.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0); + * @example + * // Example 2. + // disable pixel offset by distance + b.pixelOffsetScaleByDistance = undefined; + */ + pixelOffsetScaleByDistance: NearFarScalar; + /** + * Gets or sets the 3D Cartesian offset applied to this billboard in eye coordinates. Eye coordinates is a left-handed + coordinate system, where x points towards the viewer's right, y points up, and + z points into the screen. Eye coordinates use the same scale as world and model coordinates, + which is typically meters. +

+ An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to + arrange a billboard above its corresponding 3D model. +

+ Below, the billboard is positioned at the center of the Earth but an eye offset makes it always + appear on top of the Earth regardless of the viewer's or Earth's orientation. +

+
+ + + +
+ b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);

+
+ */ + eyeOffset: Cartesian3; + /** + * Gets or sets the horizontal origin of this billboard, which determines if the billboard is + to the left, center, or right of its anchor position. +

+
+
+
+ * @example + * // Use a bottom, left origin + b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT; + b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; + */ + horizontalOrigin: HorizontalOrigin; + /** + * Gets or sets the vertical origin of this billboard, which determines if the billboard is + to the above, below, or at the center of its anchor position. +

+
+
+
+ * @example + * // Use a bottom, left origin + b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT; + b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM; + */ + verticalOrigin: VerticalOrigin; + /** + * Gets or sets the uniform scale that is multiplied with the billboard's image size in pixels. + A scale of 1.0 does not change the size of the billboard; a scale greater than + 1.0 enlarges the billboard; a positive scale less than 1.0 shrinks + the billboard. +

+
+
+ From left to right in the above image, the scales are 0.5, 1.0, + and 2.0. +
+ */ + scale: number; + /** + * Gets or sets the color that is multiplied with the billboard's texture. This has two common use cases. First, + the same white texture may be used by many different billboards, each with a different color, to create + colored billboards. Second, the color's alpha component can be used to make the billboard translucent as shown below. + An alpha of 0.0 makes the billboard transparent, and 1.0 makes the billboard opaque. +

+
+ + + +
default
alpha : 0.5
+
+
+ The red, green, blue, and alpha values are indicated by value's red, green, + blue, and alpha properties as shown in Example 1. These components range from 0.0 + (no intensity) to 1.0 (full intensity). + * @example + * // Example 1. Assign yellow. + b.color = Cesium.Color.YELLOW; + * @example + * // Example 2. Make a billboard 50% translucent. + b.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5); + */ + color: Color; + /** + * Gets or sets the rotation angle in radians. + */ + rotation: number; + /** + * Gets or sets the aligned axis in world space. The aligned axis is the unit vector that the billboard up vector points towards. + The default is the zero vector, which means the billboard is aligned to the screen up vector. + * @example + * // Example 1. + // Have the billboard up vector point north + billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z; + * @example + * // Example 2. + // Have the billboard point east. + billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z; + billboard.rotation = -Cesium.Math.PI_OVER_TWO; + * @example + * // Example 3. + // Reset the aligned axis + billboard.alignedAxis = Cesium.Cartesian3.ZERO; + */ + alignedAxis: Cartesian3; + /** + * Gets or sets a width for the billboard. If undefined, the image width will be used. + */ + width: number; + /** + * Gets or sets a height for the billboard. If undefined, the image height will be used. + */ + height: number; + /** + * Gets or sets if the billboard size is in meters or pixels. true to size the billboard in meters; + otherwise, the size is in pixels. + */ + sizeInMeters: boolean; + /** + * Gets or sets the condition specifying at what distance from the camera that this billboard will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: number; + /** + * Gets or sets the user-defined object returned when the billboard is picked. + */ + id: any; + /** + *

+ Gets or sets the image to be used for this billboard. If a texture has already been created for the + given image, the existing texture is used. +

+

+ This property can be set to a loaded Image, a URL which will be loaded as an Image automatically, + a canvas, or another billboard's image property (from the same billboard collection). +

+ * @example + * // load an image from a URL + b.image = 'some/image/url.png'; + + // assuming b1 and b2 are billboards in the same billboard collection, + // use the same image for both billboards. + b2.image = b1.image; + */ + image: string; + /** + * When true, this billboard is ready to render, i.e., the image + has been downloaded and the WebGL resources are created. + */ + readonly ready: boolean; + /** + *

+ Sets the image to be used for this billboard. If a texture has already been created for the + given id, the existing texture is used. +

+

+ This function is useful for dynamically creating textures that are shared across many billboards. + Only the first billboard will actually call the function and create the texture, while subsequent + billboards created with the same id will simply re-use the existing texture. +

+

+ To load an image from a URL, setting the {@link Billboard#image} property is more convenient. +

+ * @example + * // create a billboard image dynamically + function drawImage(id) { + // create and draw an image using a canvas + var canvas = document.createElement('canvas'); + var context2D = canvas.getContext('2d'); + // ... draw image + return canvas; + } + // drawImage will be called to create the texture + b.setImage('myImage', drawImage); + + // subsequent billboards created in the same collection using the same id will use the existing + // texture, without the need to create the canvas or draw the image + b2.setImage('myImage', drawImage); + * @param id - The id of the image. This can be any string that uniquely identifies the image. + * @param image - The image to load. This parameter + can either be a loaded Image or Canvas, a URL which will be loaded as an Image automatically, + or a function which will be called to create the image if it hasn't been loaded already. + */ + setImage(id: string, image: HTMLImageElement | HTMLCanvasElement | string | Resource | Billboard.CreateImageCallback): void; + /** + * Uses a sub-region of the image with the given id as the image for this billboard, + measured in pixels from the bottom-left. + * @param id - The id of the image to use. + * @param subRegion - The sub-region of the image. + */ + setImageSubRegion(id: string, subRegion: BoundingRectangle): void; + /** + * Computes the screen-space position of the billboard's origin, taking into account eye and pixel offsets. + The screen space origin is the top, left corner of the canvas; x increases from + left to right, and y increases from top to bottom. + * @example + * console.log(b.computeScreenSpacePosition(scene).toString()); + * @param scene - The scene. + * @param [result] - The object onto which to store the result. + * @returns The screen-space position of the billboard. + */ + computeScreenSpacePosition(scene: Scene, result?: Cartesian2): Cartesian2; + /** + * Determines if this billboard equals another billboard. Billboards are equal if all their properties + are equal. Billboards in different collections can be equal. + * @param other - The billboard to compare for equality. + * @returns true if the billboards are equal; otherwise, false. + */ + equals(other: Billboard): boolean; +} + +export namespace Billboard { + /** + * A function that creates an image. + * @param id - The identifier of the image to load. + */ + type CreateImageCallback = (id: string) => HTMLImageElement | HTMLCanvasElement | Promise; +} + +/** + * A renderable collection of billboards. Billboards are viewport-aligned +images positioned in the 3D scene. +

+
+
+Example billboards +
+

+Billboards are added and removed from the collection using {@link BillboardCollection#add} +and {@link BillboardCollection#remove}. Billboards in a collection automatically share textures +for images with the same identifier. + * @example + * // Create a billboard collection with two billboards +var billboards = scene.primitives.add(new Cesium.BillboardCollection()); +billboards.add({ + position : new Cesium.Cartesian3(1.0, 2.0, 3.0), + image : 'url/to/image' +}); +billboards.add({ + position : new Cesium.Cartesian3(4.0, 5.0, 6.0), + image : 'url/to/another/image' +}); + * @param [options] - Object with the following properties: + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms each billboard from model to world coordinates. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.scene] - Must be passed in for billboards that use the height reference property or will be depth tested against the globe. + * @param [options.blendOption = BlendOption.OPAQUE_AND_TRANSLUCENT] - The billboard blending option. The default +is used for rendering both opaque and translucent billboards. However, if either all of the billboards are completely opaque or all are completely translucent, +setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x. + * @param [options.show = true] - Determines if the billboards in the collection will be shown. + */ +export class BillboardCollection { + constructor(options?: { + modelMatrix?: Matrix4; + debugShowBoundingVolume?: boolean; + scene?: Scene; + blendOption?: BlendOption; + show?: boolean; + }); + /** + * Determines if billboards in this collection will be shown. + */ + show: boolean; + /** + * The 4x4 transformation matrix that transforms each billboard in this collection from model to world coordinates. + When this is the identity matrix, the billboards are drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + * @example + * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); + billboards.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center); + billboards.add({ + image : 'url/to/image', + position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center + }); + billboards.add({ + image : 'url/to/image', + position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east + }); + billboards.add({ + image : 'url/to/image', + position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north + }); + billboards.add({ + image : 'url/to/image', + position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up + }); + */ + modelMatrix: Matrix4; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the texture atlas for this BillboardCollection as a fullscreen quad. +

+ */ + debugShowTextureAtlas: boolean; + /** + * The billboard blending option. The default is used for rendering both opaque and translucent billboards. + However, if either all of the billboards are completely opaque or all are completely translucent, + setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve + performance by up to 2x. + */ + blendOption: BlendOption; + /** + * Returns the number of billboards in this collection. This is commonly used with + {@link BillboardCollection#get} to iterate over all the billboards + in the collection. + */ + length: number; + /** + * Creates and adds a billboard with the specified initial properties to the collection. + The added billboard is returned so it can be modified or removed from the collection later. + * @example + * // Example 1: Add a billboard, specifying all the default values. + var b = billboards.add({ + show : true, + position : Cesium.Cartesian3.ZERO, + pixelOffset : Cesium.Cartesian2.ZERO, + eyeOffset : Cesium.Cartesian3.ZERO, + heightReference : Cesium.HeightReference.NONE, + horizontalOrigin : Cesium.HorizontalOrigin.CENTER, + verticalOrigin : Cesium.VerticalOrigin.CENTER, + scale : 1.0, + image : 'url/to/image', + imageSubRegion : undefined, + color : Cesium.Color.WHITE, + id : undefined, + rotation : 0.0, + alignedAxis : Cesium.Cartesian3.ZERO, + width : undefined, + height : undefined, + scaleByDistance : undefined, + translucencyByDistance : undefined, + pixelOffsetScaleByDistance : undefined, + sizeInMeters : false, + distanceDisplayCondition : undefined + }); + * @example + * // Example 2: Specify only the billboard's cartographic position. + var b = billboards.add({ + position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height) + }); + * @param [options] - A template describing the billboard's properties as shown in Example 1. + * @returns The billboard that was added to the collection. + */ + add(options?: any): Billboard; + /** + * Removes a billboard from the collection. + * @example + * var b = billboards.add(...); + billboards.remove(b); // Returns true + * @param billboard - The billboard to remove. + * @returns true if the billboard was removed; false if the billboard was not found in the collection. + */ + remove(billboard: Billboard): boolean; + /** + * Removes all billboards from the collection. + * @example + * billboards.add(...); + billboards.add(...); + billboards.removeAll(); + */ + removeAll(): void; + /** + * Check whether this collection contains a given billboard. + * @param [billboard] - The billboard to check for. + * @returns true if this collection contains the billboard, false otherwise. + */ + contains(billboard?: Billboard): boolean; + /** + * Returns the billboard in the collection at the specified index. Indices are zero-based + and increase as billboards are added. Removing a billboard shifts all billboards after + it to the left, changing their indices. This function is commonly used with + {@link BillboardCollection#length} to iterate over all the billboards + in the collection. + * @example + * // Toggle the show property of every billboard in the collection + var len = billboards.length; + for (var i = 0; i < len; ++i) { + var b = billboards.get(i); + b.show = !b.show; + } + * @param index - The zero-based index of the billboard. + * @returns The billboard at the specified index. + */ + get(index: number): Billboard; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * billboards = billboards && billboards.destroy(); + */ + destroy(): void; +} + +export namespace BingMapsImageryProvider { + /** + * Initialization options for the BingMapsImageryProvider constructor + * @property url - The url of the Bing Maps server hosting the imagery. + * @property key - The Bing Maps key for your application, which can be + created at {@link https://www.bingmapsportal.com/}. + * @property [tileProtocol] - The protocol to use when loading tiles, e.g. 'http' or 'https'. + By default, tiles are loaded using the same protocol as the page. + * @property [mapStyle = BingMapsStyle.AERIAL] - The type of Bing Maps imagery to load. + * @property [culture = ''] - The culture to use when requesting Bing Maps imagery. Not + all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx} + for information on the supported cultures. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [tileDiscardPolicy] - The policy that determines if a tile + is invalid and should be discarded. By default, a {@link DiscardEmptyTileImagePolicy} + will be used, with the expectation that the Bing Maps server will send a zero-length response for missing tiles. + To ensure that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this parameter. + */ + type ConstructorOptions = { + url: Resource | string; + key: string; + tileProtocol?: string; + mapStyle?: BingMapsStyle; + culture?: string; + ellipsoid?: Ellipsoid; + tileDiscardPolicy?: TileDiscardPolicy; + }; +} + +/** + * Provides tiled imagery using the Bing Maps Imagery REST API. + * @example + * var bing = new Cesium.BingMapsImageryProvider({ + url : 'https://dev.virtualearth.net', + key : 'get-yours-at-https://www.bingmapsportal.com/', + mapStyle : Cesium.BingMapsStyle.AERIAL +}); + * @param options - Object describing initialization options + */ +export class BingMapsImageryProvider { + constructor(options: BingMapsImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the name of the BingMaps server url hosting the imagery. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the Bing Maps key. + */ + readonly key: string; + /** + * Gets the type of Bing Maps imagery to load. + */ + readonly mapStyle: BingMapsStyle; + /** + * The culture to use when requesting Bing Maps imagery. Not + all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx} + for information on the supported cultures. + */ + readonly culture: string; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link BingMapsImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage + and texture upload time. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link BingMapsImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; + /** + * Converts a tiles (x, y, level) position into a quadkey used to request an image + from a Bing Maps server. + * @param x - The tile's x coordinate. + * @param y - The tile's y coordinate. + * @param level - The tile's zoom level. + */ + static tileXYToQuadKey(x: number, y: number, level: number): void; + /** + * Converts a tile's quadkey used to request an image from a Bing Maps server into the + (x, y, level) position. + * @param quadkey - The tile's quad key + */ + static quadKeyToTileXY(quadkey: string): void; + /** + * Gets or sets the URL to the Bing logo for display in the credit. + */ + static logoUrl: string; +} + +/** + * The types of imagery provided by Bing Maps. + */ +export enum BingMapsStyle { + /** + * Aerial imagery. + */ + AERIAL = "Aerial", + /** + * Aerial imagery with a road overlay. + */ + AERIAL_WITH_LABELS = "AerialWithLabels", + /** + * Aerial imagery with a road overlay. + */ + AERIAL_WITH_LABELS_ON_DEMAND = "AerialWithLabelsOnDemand", + /** + * Roads without additional imagery. + */ + ROAD = "Road", + /** + * Roads without additional imagery. + */ + ROAD_ON_DEMAND = "RoadOnDemand", + /** + * A dark version of the road maps. + */ + CANVAS_DARK = "CanvasDark", + /** + * A lighter version of the road maps. + */ + CANVAS_LIGHT = "CanvasLight", + /** + * A grayscale version of the road maps. + */ + CANVAS_GRAY = "CanvasGray", + /** + * Ordnance Survey imagery. This imagery is visible only for the London, UK area. + */ + ORDNANCE_SURVEY = "OrdnanceSurvey", + /** + * Collins Bart imagery. + */ + COLLINS_BART = "CollinsBart" +} + +/** + * Determines how two pixels' values are combined. + */ +export enum BlendEquation { + /** + * Pixel values are added componentwise. This is used in additive blending for translucency. + */ + ADD = WebGLConstants.FUNC_ADD, + /** + * Pixel values are subtracted componentwise (source - destination). This is used in alpha blending for translucency. + */ + SUBTRACT = WebGLConstants.FUNC_SUBTRACT, + /** + * Pixel values are subtracted componentwise (destination - source). + */ + REVERSE_SUBTRACT = WebGLConstants.FUNC_REVERSE_SUBTRACT, + /** + * Pixel values are given to the minimum function (min(source, destination)). + + This equation operates on each pixel color component. + */ + MIN = WebGLConstants.MIN, + /** + * Pixel values are given to the maximum function (max(source, destination)). + + This equation operates on each pixel color component. + */ + MAX = WebGLConstants.MAX +} + +/** + * Determines how blending factors are computed. + */ +export enum BlendFunction { + /** + * The blend factor is zero. + */ + ZERO = WebGLConstants.ZERO, + /** + * The blend factor is one. + */ + ONE = WebGLConstants.ONE, + /** + * The blend factor is the source color. + */ + SOURCE_COLOR = WebGLConstants.SRC_COLOR, + /** + * The blend factor is one minus the source color. + */ + ONE_MINUS_SOURCE_COLOR = WebGLConstants.ONE_MINUS_SRC_COLOR, + /** + * The blend factor is the destination color. + */ + DESTINATION_COLOR = WebGLConstants.DST_COLOR, + /** + * The blend factor is one minus the destination color. + */ + ONE_MINUS_DESTINATION_COLOR = WebGLConstants.ONE_MINUS_DST_COLOR, + /** + * The blend factor is the source alpha. + */ + SOURCE_ALPHA = WebGLConstants.SRC_ALPHA, + /** + * The blend factor is one minus the source alpha. + */ + ONE_MINUS_SOURCE_ALPHA = WebGLConstants.ONE_MINUS_SRC_ALPHA, + /** + * The blend factor is the destination alpha. + */ + DESTINATION_ALPHA = WebGLConstants.DST_ALPHA, + /** + * The blend factor is one minus the destination alpha. + */ + ONE_MINUS_DESTINATION_ALPHA = WebGLConstants.ONE_MINUS_DST_ALPHA, + /** + * The blend factor is the constant color. + */ + CONSTANT_COLOR = WebGLConstants.CONSTANT_COLOR, + /** + * The blend factor is one minus the constant color. + */ + ONE_MINUS_CONSTANT_COLOR = WebGLConstants.ONE_MINUS_CONSTANT_COLOR, + /** + * The blend factor is the constant alpha. + */ + CONSTANT_ALPHA = WebGLConstants.CONSTANT_ALPHA, + /** + * The blend factor is one minus the constant alpha. + */ + ONE_MINUS_CONSTANT_ALPHA = WebGLConstants.ONE_MINUS_CONSTANT_ALPHA, + /** + * The blend factor is the saturated source alpha. + */ + SOURCE_ALPHA_SATURATE = WebGLConstants.SRC_ALPHA_SATURATE +} + +/** + * The blending state combines {@link BlendEquation} and {@link BlendFunction} and the +enabled flag to define the full blending state for combining source and +destination fragments when rendering. +

+This is a helper when using custom render states with {@link Appearance#renderState}. +

+ */ +export namespace BlendingState { + /** + * Blending is disabled. + */ + const DISABLED: any; + /** + * Blending is enabled using alpha blending, source(source.alpha) + destination(1 - source.alpha). + */ + const ALPHA_BLEND: any; + /** + * Blending is enabled using alpha blending with premultiplied alpha, source + destination(1 - source.alpha). + */ + const PRE_MULTIPLIED_ALPHA_BLEND: any; + /** + * Blending is enabled using additive blending, source(source.alpha) + destination. + */ + const ADDITIVE_BLEND: any; +} + +/** + * Determines how opaque and translucent parts of billboards, points, and labels are blended with the scene. + */ +export enum BlendOption { + /** + * The billboards, points, or labels in the collection are completely opaque. + */ + OPAQUE = 0, + /** + * The billboards, points, or labels in the collection are completely translucent. + */ + TRANSLUCENT = 1, + /** + * The billboards, points, or labels in the collection are both opaque and translucent. + */ + OPAQUE_AND_TRANSLUCENT = 2 +} + +/** + * A ParticleEmitter that emits particles within a box. +Particles will be positioned randomly within the box and have initial velocities emanating from the center of the box. + * @param dimensions - The width, height and depth dimensions of the box. + */ +export class BoxEmitter { + constructor(dimensions: Cartesian3); + /** + * The width, height and depth dimensions of the box in meters. + */ + dimensions: Cartesian3; +} + +/** + * The camera is defined by a position, orientation, and view frustum. +

+The orientation forms an orthonormal basis with a view, up and right = view x up unit vectors. +

+The viewing frustum is defined by 6 planes. +Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components +define the unit vector normal to the plane, and the w component is the distance of the +plane from the origin/camera position. + * @example + * // Create a camera looking down the negative z-axis, positioned at the origin, +// with a field of view of 60 degrees, and 1:1 aspect ratio. +var camera = new Cesium.Camera(scene); +camera.position = new Cesium.Cartesian3(); +camera.direction = Cesium.Cartesian3.negate(Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3()); +camera.up = Cesium.Cartesian3.clone(Cesium.Cartesian3.UNIT_Y); +camera.frustum.fov = Cesium.Math.PI_OVER_THREE; +camera.frustum.near = 1.0; +camera.frustum.far = 2.0; + * @param scene - The scene. + */ +export class Camera { + constructor(scene: Scene); + /** + * The position of the camera. + */ + position: Cartesian3; + /** + * The view direction of the camera. + */ + direction: Cartesian3; + /** + * The up direction of the camera. + */ + up: Cartesian3; + /** + * The right direction of the camera. + */ + right: Cartesian3; + /** + * The region of space in view. + */ + frustum: PerspectiveFrustum | PerspectiveOffCenterFrustum | OrthographicFrustum; + /** + * The default amount to move the camera when an argument is not + provided to the move methods. + */ + defaultMoveAmount: number; + /** + * The default amount to rotate the camera when an argument is not + provided to the look methods. + */ + defaultLookAmount: number; + /** + * The default amount to rotate the camera when an argument is not + provided to the rotate methods. + */ + defaultRotateAmount: number; + /** + * The default amount to move the camera when an argument is not + provided to the zoom methods. + */ + defaultZoomAmount: number; + /** + * If set, the camera will not be able to rotate past this axis in either direction. + */ + constrainedAxis: Cartesian3; + /** + * The factor multiplied by the the map size used to determine where to clamp the camera position + when zooming out from the surface. The default is 1.5. Only valid for 2D and the map is rotatable. + */ + maximumZoomFactor: number; + /** + * The amount the camera has to change before the changed event is raised. The value is a percentage in the [0, 1] range. + */ + percentageChanged: number; + /** + * The default rectangle the camera will view on creation. + */ + static DEFAULT_VIEW_RECTANGLE: Rectangle; + /** + * A scalar to multiply to the camera position and add it back after setting the camera to view the rectangle. + A value of zero means the camera will view the entire {@link Camera#DEFAULT_VIEW_RECTANGLE}, a value greater than zero + will move it further away from the extent, and a value less than zero will move it close to the extent. + */ + static DEFAULT_VIEW_FACTOR: number; + /** + * The default heading/pitch/range that is used when the camera flies to a location that contains a bounding sphere. + */ + static DEFAULT_OFFSET: HeadingPitchRange; + /** + * Gets the camera's reference frame. The inverse of this transformation is appended to the view matrix. + */ + readonly transform: Matrix4; + /** + * Gets the inverse camera transform. + */ + readonly inverseTransform: Matrix4; + /** + * Gets the view matrix. + */ + readonly viewMatrix: Matrix4; + /** + * Gets the inverse view matrix. + */ + readonly inverseViewMatrix: Matrix4; + /** + * Gets the {@link Cartographic} position of the camera, with longitude and latitude + expressed in radians and height in meters. In 2D and Columbus View, it is possible + for the returned longitude and latitude to be outside the range of valid longitudes + and latitudes when the camera is outside the map. + */ + readonly positionCartographic: Cartographic; + /** + * Gets the position of the camera in world coordinates. + */ + readonly positionWC: Cartesian3; + /** + * Gets the view direction of the camera in world coordinates. + */ + readonly directionWC: Cartesian3; + /** + * Gets the up direction of the camera in world coordinates. + */ + readonly upWC: Cartesian3; + /** + * Gets the right direction of the camera in world coordinates. + */ + readonly rightWC: Cartesian3; + /** + * Gets the camera heading in radians. + */ + readonly heading: number; + /** + * Gets the camera pitch in radians. + */ + readonly pitch: number; + /** + * Gets the camera roll in radians. + */ + readonly roll: number; + /** + * Gets the event that will be raised at when the camera starts to move. + */ + readonly moveStart: Event; + /** + * Gets the event that will be raised when the camera has stopped moving. + */ + readonly moveEnd: Event; + /** + * Gets the event that will be raised when the camera has changed by percentageChanged. + */ + readonly changed: Event; + /** + * Sets the camera position, orientation and transform. + * @example + * // 1. Set position with a top-down view + viewer.camera.setView({ + destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0) + }); + + // 2 Set view with heading, pitch and roll + viewer.camera.setView({ + destination : cartesianPosition, + orientation: { + heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north) + pitch : Cesium.Math.toRadians(-90), // default value (looking down) + roll : 0.0 // default value + } + }); + + // 3. Change heading, pitch and roll with the camera position remaining the same. + viewer.camera.setView({ + orientation: { + heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north) + pitch : Cesium.Math.toRadians(-90), // default value (looking down) + roll : 0.0 // default value + } + }); + + + // 4. View rectangle with a top-down view + viewer.camera.setView({ + destination : Cesium.Rectangle.fromDegrees(west, south, east, north) + }); + + // 5. Set position with an orientation using unit vectors. + viewer.camera.setView({ + destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), + orientation : { + direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734), + up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339) + } + }); + * @param options - Object with the following properties: + * @param [options.destination] - The final position of the camera in WGS84 (world) coordinates or a rectangle that would be visible from a top-down view. + * @param [options.orientation] - An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point + towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive + y direction in Columbus view. Orientation is not used in 2D when in infinite scrolling mode. + * @param [options.endTransform] - Transform matrix representing the reference frame of the camera. + * @param [options.convert] - Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to true. + */ + setView(options: { + destination?: Cartesian3 | Rectangle; + orientation?: any; + endTransform?: Matrix4; + convert?: boolean; + }): void; + /** + * Fly the camera to the home view. Use {@link Camera#.DEFAULT_VIEW_RECTANGLE} to set + the default view for the 3D scene. The home view for 2D and columbus view shows the + entire map. + * @param [duration] - The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight. See {@link Camera#flyTo} + */ + flyHome(duration?: number): void; + /** + * Transform a vector or point from world coordinates to the camera's reference frame. + * @param cartesian - The vector or point to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed vector or point. + */ + worldToCameraCoordinates(cartesian: Cartesian4, result?: Cartesian4): Cartesian4; + /** + * Transform a point from world coordinates to the camera's reference frame. + * @param cartesian - The point to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed point. + */ + worldToCameraCoordinatesPoint(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transform a vector from world coordinates to the camera's reference frame. + * @param cartesian - The vector to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed vector. + */ + worldToCameraCoordinatesVector(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transform a vector or point from the camera's reference frame to world coordinates. + * @param cartesian - The vector or point to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed vector or point. + */ + cameraToWorldCoordinates(cartesian: Cartesian4, result?: Cartesian4): Cartesian4; + /** + * Transform a point from the camera's reference frame to world coordinates. + * @param cartesian - The point to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed point. + */ + cameraToWorldCoordinatesPoint(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Transform a vector from the camera's reference frame to world coordinates. + * @param cartesian - The vector to transform. + * @param [result] - The object onto which to store the result. + * @returns The transformed vector. + */ + cameraToWorldCoordinatesVector(cartesian: Cartesian3, result?: Cartesian3): Cartesian3; + /** + * Translates the camera's position by amount along direction. + * @param direction - The direction to move. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + move(direction: Cartesian3, amount?: number): void; + /** + * Translates the camera's position by amount along the camera's view vector. + When in 2D mode, this will zoom in the camera instead of translating the camera's position. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveForward(amount?: number): void; + /** + * Translates the camera's position by amount along the opposite direction + of the camera's view vector. + When in 2D mode, this will zoom out the camera instead of translating the camera's position. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveBackward(amount?: number): void; + /** + * Translates the camera's position by amount along the camera's up vector. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveUp(amount?: number): void; + /** + * Translates the camera's position by amount along the opposite direction + of the camera's up vector. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveDown(amount?: number): void; + /** + * Translates the camera's position by amount along the camera's right vector. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveRight(amount?: number): void; + /** + * Translates the camera's position by amount along the opposite direction + of the camera's right vector. + * @param [amount] - The amount, in meters, to move. Defaults to defaultMoveAmount. + */ + moveLeft(amount?: number): void; + /** + * Rotates the camera around its up vector by amount, in radians, in the opposite direction + of its right vector if not in 2D mode. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + lookLeft(amount?: number): void; + /** + * Rotates the camera around its up vector by amount, in radians, in the direction + of its right vector if not in 2D mode. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + lookRight(amount?: number): void; + /** + * Rotates the camera around its right vector by amount, in radians, in the direction + of its up vector if not in 2D mode. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + lookUp(amount?: number): void; + /** + * Rotates the camera around its right vector by amount, in radians, in the opposite direction + of its up vector if not in 2D mode. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + lookDown(amount?: number): void; + /** + * Rotate each of the camera's orientation vectors around axis by angle + * @param axis - The axis to rotate around. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultLookAmount. + */ + look(axis: Cartesian3, angle?: number): void; + /** + * Rotate the camera counter-clockwise around its direction vector by amount, in radians. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + twistLeft(amount?: number): void; + /** + * Rotate the camera clockwise around its direction vector by amount, in radians. + * @param [amount] - The amount, in radians, to rotate by. Defaults to defaultLookAmount. + */ + twistRight(amount?: number): void; + /** + * Rotates the camera around axis by angle. The distance + of the camera's position to the center of the camera's reference frame remains the same. + * @param axis - The axis to rotate around given in world coordinates. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultRotateAmount. + */ + rotate(axis: Cartesian3, angle?: number): void; + /** + * Rotates the camera around the center of the camera's reference frame by angle downwards. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultRotateAmount. + */ + rotateDown(angle?: number): void; + /** + * Rotates the camera around the center of the camera's reference frame by angle upwards. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultRotateAmount. + */ + rotateUp(angle?: number): void; + /** + * Rotates the camera around the center of the camera's reference frame by angle to the right. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultRotateAmount. + */ + rotateRight(angle?: number): void; + /** + * Rotates the camera around the center of the camera's reference frame by angle to the left. + * @param [angle] - The angle, in radians, to rotate by. Defaults to defaultRotateAmount. + */ + rotateLeft(angle?: number): void; + /** + * Zooms amount along the camera's view vector. + * @param [amount] - The amount to move. Defaults to defaultZoomAmount. + */ + zoomIn(amount?: number): void; + /** + * Zooms amount along the opposite direction of + the camera's view vector. + * @param [amount] - The amount to move. Defaults to defaultZoomAmount. + */ + zoomOut(amount?: number): void; + /** + * Gets the magnitude of the camera position. In 3D, this is the vector magnitude. In 2D and + Columbus view, this is the distance to the map. + * @returns The magnitude of the position. + */ + getMagnitude(): number; + /** + * Sets the camera position and orientation using a target and offset. The target must be given in + world coordinates. The offset can be either a cartesian or heading/pitch/range in the local east-north-up reference frame centered at the target. + If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset + is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. + + In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be + determined from the offset, the heading will be north. + * @example + * // 1. Using a cartesian offset + var center = Cesium.Cartesian3.fromDegrees(-98.0, 40.0); + viewer.camera.lookAt(center, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0)); + + // 2. Using a HeadingPitchRange offset + var center = Cesium.Cartesian3.fromDegrees(-72.0, 40.0); + var heading = Cesium.Math.toRadians(50.0); + var pitch = Cesium.Math.toRadians(-20.0); + var range = 5000.0; + viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range)); + * @param target - The target position in world coordinates. + * @param offset - The offset from the target in the local east-north-up reference frame centered at the target. + */ + lookAt(target: Cartesian3, offset: Cartesian3 | HeadingPitchRange): void; + /** + * Sets the camera position and orientation using a target and transformation matrix. The offset can be either a cartesian or heading/pitch/range. + If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset + is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. + + In 2D, there must be a top down view. The camera will be placed above the center of the reference frame. The height above the + target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be + determined from the offset, the heading will be north. + * @example + * // 1. Using a cartesian offset + var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-98.0, 40.0)); + viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0)); + + // 2. Using a HeadingPitchRange offset + var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-72.0, 40.0)); + var heading = Cesium.Math.toRadians(50.0); + var pitch = Cesium.Math.toRadians(-20.0); + var range = 5000.0; + viewer.camera.lookAtTransform(transform, new Cesium.HeadingPitchRange(heading, pitch, range)); + * @param transform - The transformation matrix defining the reference frame. + * @param [offset] - The offset from the target in a reference frame centered at the target. + */ + lookAtTransform(transform: Matrix4, offset?: Cartesian3 | HeadingPitchRange): void; + /** + * Get the camera position needed to view a rectangle on an ellipsoid or map + * @param rectangle - The rectangle to view. + * @param [result] - The camera position needed to view the rectangle + * @returns The camera position needed to view the rectangle + */ + getRectangleCameraCoordinates(rectangle: Rectangle, result?: Cartesian3): Cartesian3; + /** + * Pick an ellipsoid or map. + * @example + * var canvas = viewer.scene.canvas; + var center = new Cesium.Cartesian2(canvas.clientWidth / 2.0, canvas.clientHeight / 2.0); + var ellipsoid = viewer.scene.globe.ellipsoid; + var result = viewer.camera.pickEllipsoid(center, ellipsoid); + * @param windowPosition - The x and y coordinates of a pixel. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid to pick. + * @param [result] - The object onto which to store the result. + * @returns If the ellipsoid or map was picked, + returns the point on the surface of the ellipsoid or map in world + coordinates. If the ellipsoid or map was not picked, returns undefined. + */ + pickEllipsoid(windowPosition: Cartesian2, ellipsoid?: Ellipsoid, result?: Cartesian3): Cartesian3 | undefined; + /** + * Create a ray from the camera position through the pixel at windowPosition + in world coordinates. + * @param windowPosition - The x and y coordinates of a pixel. + * @param [result] - The object onto which to store the result. + * @returns Returns the {@link Cartesian3} position and direction of the ray. + */ + getPickRay(windowPosition: Cartesian2, result?: Ray): Ray; + /** + * Return the distance from the camera to the front of the bounding sphere. + * @param boundingSphere - The bounding sphere in world coordinates. + * @returns The distance to the bounding sphere. + */ + distanceToBoundingSphere(boundingSphere: BoundingSphere): number; + /** + * Return the pixel size in meters. + * @param boundingSphere - The bounding sphere in world coordinates. + * @param drawingBufferWidth - The drawing buffer width. + * @param drawingBufferHeight - The drawing buffer height. + * @returns The pixel size in meters. + */ + getPixelSize(boundingSphere: BoundingSphere, drawingBufferWidth: number, drawingBufferHeight: number): number; + /** + * Cancels the current camera flight and leaves the camera at its current location. + If no flight is in progress, this this function does nothing. + */ + cancelFlight(): void; + /** + * Completes the current camera flight and moves the camera immediately to its final destination. + If no flight is in progress, this this function does nothing. + */ + completeFlight(): void; + /** + * Flies the camera from its current position to a new position. + * @example + * // 1. Fly to a position with a top-down view + viewer.camera.flyTo({ + destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0) + }); + + // 2. Fly to a Rectangle with a top-down view + viewer.camera.flyTo({ + destination : Cesium.Rectangle.fromDegrees(west, south, east, north) + }); + + // 3. Fly to a position with an orientation using unit vectors. + viewer.camera.flyTo({ + destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), + orientation : { + direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734), + up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339) + } + }); + + // 4. Fly to a position with an orientation using heading, pitch and roll. + viewer.camera.flyTo({ + destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), + orientation : { + heading : Cesium.Math.toRadians(175.0), + pitch : Cesium.Math.toRadians(-35.0), + roll : 0.0 + } + }); + * @param options - Object with the following properties: + * @param options.destination - The final position of the camera in WGS84 (world) coordinates or a rectangle that would be visible from a top-down view. + * @param [options.orientation] - An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point + towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive + y direction in Columbus view. Orientation is not used in 2D when in infinite scrolling mode. + * @param [options.duration] - The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight. + * @param [options.complete] - The function to execute when the flight is complete. + * @param [options.cancel] - The function to execute if the flight is cancelled. + * @param [options.endTransform] - Transform matrix representing the reference frame the camera will be in when the flight is completed. + * @param [options.maximumHeight] - The maximum height at the peak of the flight. + * @param [options.pitchAdjustHeight] - If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport. + * @param [options.flyOverLongitude] - There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude. + * @param [options.flyOverLongitudeWeight] - Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight. + * @param [options.convert] - Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to true. + * @param [options.easingFunction] - Controls how the time is interpolated over the duration of the flight. + */ + flyTo(options: { + destination: Cartesian3 | Rectangle; + orientation?: any; + duration?: number; + complete?: Camera.FlightCompleteCallback; + cancel?: Camera.FlightCancelledCallback; + endTransform?: Matrix4; + maximumHeight?: number; + pitchAdjustHeight?: number; + flyOverLongitude?: number; + flyOverLongitudeWeight?: number; + convert?: boolean; + easingFunction?: EasingFunction.Callback; + }): void; + /** + * Sets the camera so that the current view contains the provided bounding sphere. + +

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + The heading and the pitch angles are defined in the local east-north-up reference frame. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is + zero, a range will be computed such that the whole bounding sphere is visible.

+ +

In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + target will be the range. The heading will be determined from the offset. If the heading cannot be + determined from the offset, the heading will be north.

+ * @param boundingSphere - The bounding sphere to view, in world coordinates. + * @param [offset] - The offset from the target in the local east-north-up reference frame centered at the target. + */ + viewBoundingSphere(boundingSphere: BoundingSphere, offset?: HeadingPitchRange): void; + /** + * Flies the camera to a location where the current view contains the provided bounding sphere. + +

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + The heading and the pitch angles are defined in the local east-north-up reference frame. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is + zero, a range will be computed such that the whole bounding sphere is visible.

+ +

In 2D and Columbus View, there must be a top down view. The camera will be placed above the target looking down. The height above the + target will be the range. The heading will be aligned to local north.

+ * @param boundingSphere - The bounding sphere to view, in world coordinates. + * @param [options] - Object with the following properties: + * @param [options.duration] - The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight. + * @param [options.offset] - The offset from the target in the local east-north-up reference frame centered at the target. + * @param [options.complete] - The function to execute when the flight is complete. + * @param [options.cancel] - The function to execute if the flight is cancelled. + * @param [options.endTransform] - Transform matrix representing the reference frame the camera will be in when the flight is completed. + * @param [options.maximumHeight] - The maximum height at the peak of the flight. + * @param [options.pitchAdjustHeight] - If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport. + * @param [options.flyOverLongitude] - There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude. + * @param [options.flyOverLongitudeWeight] - Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight. + * @param [options.easingFunction] - Controls how the time is interpolated over the duration of the flight. + */ + flyToBoundingSphere(boundingSphere: BoundingSphere, options?: { + duration?: number; + offset?: HeadingPitchRange; + complete?: Camera.FlightCompleteCallback; + cancel?: Camera.FlightCancelledCallback; + endTransform?: Matrix4; + maximumHeight?: number; + pitchAdjustHeight?: number; + flyOverLongitude?: number; + flyOverLongitudeWeight?: number; + easingFunction?: EasingFunction.Callback; + }): void; + /** + * Computes the approximate visible rectangle on the ellipsoid. + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid that you want to know the visible region. + * @param [result] - The rectangle in which to store the result + * @returns The visible rectangle or undefined if the ellipsoid isn't visible at all. + */ + computeViewRectangle(ellipsoid?: Ellipsoid, result?: Rectangle): Rectangle | undefined; + /** + * Switches the frustum/projection to perspective. + + This function is a no-op in 2D which must always be orthographic. + */ + switchToPerspectiveFrustum(): void; + /** + * Switches the frustum/projection to orthographic. + + This function is a no-op in 2D which will always be orthographic. + */ + switchToOrthographicFrustum(): void; +} + +export namespace Camera { + /** + * A function that will execute when a flight completes. + */ + type FlightCompleteCallback = () => void; + /** + * A function that will execute when a flight is cancelled. + */ + type FlightCancelledCallback = () => void; +} + +/** + * Aggregates input events. For example, suppose the following inputs are received between frames: +left mouse button down, mouse move, mouse move, left mouse button up. These events will be aggregated into +one event with a start and end position of the mouse. + * @param [canvas = document] - The element to handle events for. + */ +export class CameraEventAggregator { + constructor(canvas?: HTMLCanvasElement); + /** + * Gets the current mouse position. + */ + currentMousePosition: Cartesian2; + /** + * Gets whether any mouse button is down, a touch has started, or the wheel has been moved. + */ + anyButtonDown: boolean; + /** + * Gets if a mouse button down or touch has started and has been moved. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns Returns true if a mouse button down or touch has started and has been moved; otherwise, false + */ + isMoving(type: CameraEventType, modifier?: KeyboardEventModifier): boolean; + /** + * Gets the aggregated start and end position of the current event. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns An object with two {@link Cartesian2} properties: startPosition and endPosition. + */ + getMovement(type: CameraEventType, modifier?: KeyboardEventModifier): any; + /** + * Gets the start and end position of the last move event (not the aggregated event). + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns An object with two {@link Cartesian2} properties: startPosition and endPosition or undefined. + */ + getLastMovement(type: CameraEventType, modifier?: KeyboardEventModifier): any | undefined; + /** + * Gets whether the mouse button is down or a touch has started. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns Whether the mouse button is down or a touch has started. + */ + isButtonDown(type: CameraEventType, modifier?: KeyboardEventModifier): boolean; + /** + * Gets the mouse position that started the aggregation. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns The mouse position. + */ + getStartMousePosition(type: CameraEventType, modifier?: KeyboardEventModifier): Cartesian2; + /** + * Gets the time the button was pressed or the touch was started. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns The time the button was pressed or the touch was started. + */ + getButtonPressTime(type: CameraEventType, modifier?: KeyboardEventModifier): Date; + /** + * Gets the time the button was released or the touch was ended. + * @param type - The camera event type. + * @param [modifier] - The keyboard modifier. + * @returns The time the button was released or the touch was ended. + */ + getButtonReleaseTime(type: CameraEventType, modifier?: KeyboardEventModifier): Date; + /** + * Signals that all of the events have been handled and the aggregator should be reset to handle new events. + */ + reset(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes mouse listeners held by this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * handler = handler && handler.destroy(); + */ + destroy(): void; +} + +/** + * Enumerates the available input for interacting with the camera. + */ +export enum CameraEventType { + /** + * A left mouse button press followed by moving the mouse and releasing the button. + */ + LEFT_DRAG = 0, + /** + * A right mouse button press followed by moving the mouse and releasing the button. + */ + RIGHT_DRAG = 1, + /** + * A middle mouse button press followed by moving the mouse and releasing the button. + */ + MIDDLE_DRAG = 2, + /** + * Scrolling the middle mouse button. + */ + WHEEL = 3, + /** + * A two-finger touch on a touch surface. + */ + PINCH = 4 +} + +/** + * A tile in a {@link Cesium3DTileset}. When a tile is first created, its content is not loaded; +the content is loaded on-demand when needed based on the view. +

+Do not construct this directly, instead access tiles through {@link Cesium3DTileset#tileVisible}. +

+ */ +export class Cesium3DTile { + constructor(); + /** + * The local transform of this tile. + */ + transform: Matrix4; + /** + * The final computed transform of this tile. + */ + readonly computedTransform: Matrix4; + /** + * The error, in meters, introduced if this tile is rendered and its children are not. + This is used to compute screen space error, i.e., the error measured in pixels. + */ + readonly geometricError: number; + /** + * Gets the tile's children. + */ + readonly children: Cesium3DTile[]; + /** + * This tile's parent or undefined if this tile is the root. +

+ When a tile's content points to an external tileset JSON file, the external tileset's + root tile's parent is not undefined; instead, the parent references + the tile (with its content pointing to an external tileset JSON file) as if the two tilesets were merged. +

+ */ + readonly parent: Cesium3DTile; + /** + * The time in seconds after the tile's content is ready when the content expires and new content is requested. + */ + expireDuration: number; + /** + * The date when the content expires and new content is requested. + */ + expireDate: JulianDate; + /** + * The tileset containing this tile. + */ + readonly tileset: Cesium3DTileset; + /** + * The tile's content. This represents the actual tile's payload, + not the content's metadata in the tileset JSON file. + */ + readonly content: Cesium3DTileContent; + /** + * Get the bounding sphere derived from the tile's bounding volume. + */ + readonly boundingSphere: BoundingSphere; + /** + * Returns the extras property in the tileset JSON for this tile, which contains application specific metadata. + Returns undefined if extras does not exist. + */ + readonly extras: any; +} + +/** + * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from +the original feature, e.g. glTF material or per-point color in the tile. +

+When REPLACE or MIX are used and the source color is a glTF material, the technique must assign the +_3DTILESDIFFUSE semantic to the diffuse color parameter. Otherwise only HIGHLIGHT is supported. +

+

+A feature whose color evaluates to white (1.0, 1.0, 1.0) is always rendered without color blending, regardless of the +tileset's color blend mode. +

+

+"techniques": {
+  "technique0": {
+    "parameters": {
+      "diffuse": {
+        "semantic": "_3DTILESDIFFUSE",
+        "type": 35666
+      }
+    }
+  }
+}
+
+ */ +export enum Cesium3DTileColorBlendMode { + /** + * Multiplies the source color by the feature color. + */ + HIGHLIGHT = 0, + /** + * Replaces the source color with the feature color. + */ + REPLACE = 1, + /** + * Blends the source color and feature color together. + */ + MIX = 2 +} + +/** + * The content of a tile in a {@link Cesium3DTileset}. +

+Derived classes of this interface provide access to individual features in the tile. +Access derived objects through {@link Cesium3DTile#content}. +

+

+This type describes an interface and is not intended to be instantiated directly. +

+ */ +export class Cesium3DTileContent { + constructor(); + /** + * Gets the number of features in the tile. + */ + readonly featuresLength: number; + /** + * Gets the number of points in the tile. +

+ Only applicable for tiles with Point Cloud content. This is different than {@link Cesium3DTileContent#featuresLength} which + equals the number of groups of points as distinguished by the BATCH_ID feature table semantic. +

+ */ + readonly pointsLength: number; + /** + * Gets the number of triangles in the tile. + */ + readonly trianglesLength: number; + /** + * Gets the tile's geometry memory in bytes. + */ + readonly geometryByteLength: number; + /** + * Gets the tile's texture memory in bytes. + */ + readonly texturesByteLength: number; + /** + * Gets the amount of memory used by the batch table textures, in bytes. + */ + readonly batchTableByteLength: number; + /** + * Gets the array of {@link Cesium3DTileContent} objects that represent the + content a composite's inner tiles, which can also be composites. + */ + readonly innerContents: any[]; + /** + * Gets the promise that will be resolved when the tile's content is ready to render. + */ + readonly readyPromise: Promise; + /** + * Gets the tileset for this tile. + */ + readonly tileset: Cesium3DTileset; + /** + * Gets the tile containing this content. + */ + readonly tile: Cesium3DTile; + /** + * Gets the url of the tile's content. + */ + readonly url: string; + /** + * Determines if the tile's batch table has a property. If it does, each feature in + the tile will have the property. + * @param batchId - The batchId for the feature. + * @param name - The case-sensitive name of the property. + * @returns true if the property exists; otherwise, false. + */ + hasProperty(batchId: number, name: string): boolean; + /** + * Returns the {@link Cesium3DTileFeature} object for the feature with the + given batchId. This object is used to get and modify the + feature's properties. +

+ Features in a tile are ordered by batchId, an index used to retrieve their metadata from the batch table. +

+ * @param batchId - The batchId for the feature. + * @returns The corresponding {@link Cesium3DTileFeature} object. + */ + getFeature(batchId: number): Cesium3DTileFeature; +} + +/** + * A feature of a {@link Cesium3DTileset}. +

+Provides access to a feature's properties stored in the tile's batch table, as well +as the ability to show/hide a feature and change its highlight color via +{@link Cesium3DTileFeature#show} and {@link Cesium3DTileFeature#color}, respectively. +

+

+Modifications to a Cesium3DTileFeature object have the lifetime of the tile's +content. If the tile's content is unloaded, e.g., due to it going out of view and needing +to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any +modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications. +

+

+Do not construct this directly. Access it through {@link Cesium3DTileContent#getFeature} +or picking using {@link Scene#pick} and {@link Scene#pickPosition}. +

+ * @example + * // On mouse over, display all the properties for a feature in the console log. +handler.setInputAction(function(movement) { + var feature = scene.pick(movement.endPosition); + if (feature instanceof Cesium.Cesium3DTileFeature) { + var propertyNames = feature.getPropertyNames(); + var length = propertyNames.length; + for (var i = 0; i < length; ++i) { + var propertyName = propertyNames[i]; + console.log(propertyName + ': ' + feature.getProperty(propertyName)); + } + } +}, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + */ +export class Cesium3DTileFeature { + constructor(); + /** + * Gets or sets if the feature will be shown. This is set for all features + when a style's show is evaluated. + */ + show: boolean; + /** + * Gets or sets the highlight color multiplied with the feature's color. When + this is white, the feature's color is not changed. This is set for all features + when a style's color is evaluated. + */ + color: Color; + /** + * Gets the tileset containing the feature. + */ + readonly tileset: Cesium3DTileset; + /** + * All objects returned by {@link Scene#pick} have a primitive property. This returns + the tileset containing the feature. + */ + readonly primitive: Cesium3DTileset; + /** + * Returns whether the feature contains this property. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @param name - The case-sensitive name of the property. + * @returns Whether the feature contains this property. + */ + hasProperty(name: string): boolean; + /** + * Returns an array of property names for the feature. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @param [results] - An array into which to store the results. + * @returns The names of the feature's properties. + */ + getPropertyNames(results?: string[]): string[]; + /** + * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @example + * // Display all the properties for a feature in the console log. + var propertyNames = feature.getPropertyNames(); + var length = propertyNames.length; + for (var i = 0; i < length; ++i) { + var propertyName = propertyNames[i]; + console.log(propertyName + ': ' + feature.getProperty(propertyName)); + } + * @param name - The case-sensitive name of the property. + * @returns The value of the property or undefined if the property does not exist. + */ + getProperty(name: string): any; + /** + * Sets the value of the feature's property with the given name. +

+ If a property with the given name doesn't exist, it is created. +

+ * @example + * var height = feature.getProperty('Height'); // e.g., the height of a building + * @example + * var name = 'clicked'; + if (feature.getProperty(name)) { + console.log('already clicked'); + } else { + feature.setProperty(name, true); + console.log('first click'); + } + * @param name - The case-sensitive name of the property. + * @param value - The value of the property that will be copied. + */ + setProperty(name: string, value: any): void; +} + +/** + * A point feature of a {@link Cesium3DTileset}. +

+Provides access to a feature's properties stored in the tile's batch table, as well +as the ability to show/hide a feature and change its point properties +

+

+Modifications to a Cesium3DTilePointFeature object have the lifetime of the tile's +content. If the tile's content is unloaded, e.g., due to it going out of view and needing +to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any +modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications. +

+

+Do not construct this directly. Access it through {@link Cesium3DTileContent#getFeature} +or picking using {@link Scene#pick} and {@link Scene#pickPosition}. +

+ * @example + * // On mouse over, display all the properties for a feature in the console log. +handler.setInputAction(function(movement) { + var feature = scene.pick(movement.endPosition); + if (feature instanceof Cesium.Cesium3DTilePointFeature) { + var propertyNames = feature.getPropertyNames(); + var length = propertyNames.length; + for (var i = 0; i < length; ++i) { + var propertyName = propertyNames[i]; + console.log(propertyName + ': ' + feature.getProperty(propertyName)); + } + } +}, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + */ +export class Cesium3DTilePointFeature { + constructor(); + /** + * Gets or sets if the feature will be shown. This is set for all features + when a style's show is evaluated. + */ + show: boolean; + /** + * Gets or sets the color of the point of this feature. +

+ Only applied when image is undefined. +

+ */ + color: Color; + /** + * Gets or sets the point size of this feature. +

+ Only applied when image is undefined. +

+ */ + pointSize: number; + /** + * Gets or sets the point outline color of this feature. +

+ Only applied when image is undefined. +

+ */ + pointOutlineColor: Color; + /** + * Gets or sets the point outline width in pixels of this feature. +

+ Only applied when image is undefined. +

+ */ + pointOutlineWidth: number; + /** + * Gets or sets the label color of this feature. +

+ The color will be applied to the label if labelText is defined. +

+ */ + labelColor: Color; + /** + * Gets or sets the label outline color of this feature. +

+ The outline color will be applied to the label if labelText is defined. +

+ */ + labelOutlineColor: Color; + /** + * Gets or sets the outline width in pixels of this feature. +

+ The outline width will be applied to the point if labelText is defined. +

+ */ + labelOutlineWidth: number; + /** + * Gets or sets the font of this feature. +

+ Only applied when the labelText is defined. +

+ */ + font: string; + /** + * Gets or sets the fill and outline style of this feature. +

+ Only applied when labelText is defined. +

+ */ + labelStyle: LabelStyle; + /** + * Gets or sets the text for this feature. + */ + labelText: string; + /** + * Gets or sets the background color of the text for this feature. +

+ Only applied when labelText is defined. +

+ */ + backgroundColor: Color; + /** + * Gets or sets the background padding of the text for this feature. +

+ Only applied when labelText is defined. +

+ */ + backgroundPadding: Cartesian2; + /** + * Gets or sets whether to display the background of the text for this feature. +

+ Only applied when labelText is defined. +

+ */ + backgroundEnabled: boolean; + /** + * Gets or sets the near and far scaling properties for this feature. + */ + scaleByDistance: NearFarScalar; + /** + * Gets or sets the near and far translucency properties for this feature. + */ + translucencyByDistance: NearFarScalar; + /** + * Gets or sets the condition specifying at what distance from the camera that this feature will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; + /** + * Gets or sets the height offset in meters of this feature. + */ + heightOffset: number; + /** + * Gets or sets whether the anchor line is displayed. +

+ Only applied when heightOffset is defined. +

+ */ + anchorLineEnabled: boolean; + /** + * Gets or sets the color for the anchor line. +

+ Only applied when heightOffset is defined. +

+ */ + anchorLineColor: Color; + /** + * Gets or sets the image of this feature. + */ + image: string; + /** + * Gets or sets the distance where depth testing will be disabled. + */ + disableDepthTestDistance: number; + /** + * Gets or sets the horizontal origin of this point, which determines if the point is + to the left, center, or right of its anchor position. + */ + horizontalOrigin: HorizontalOrigin; + /** + * Gets or sets the vertical origin of this point, which determines if the point is + to the bottom, center, or top of its anchor position. + */ + verticalOrigin: VerticalOrigin; + /** + * Gets or sets the horizontal origin of this point's text, which determines if the point's text is + to the left, center, or right of its anchor position. + */ + labelHorizontalOrigin: HorizontalOrigin; + /** + * Get or sets the vertical origin of this point's text, which determines if the point's text is + to the bottom, center, top, or baseline of it's anchor point. + */ + labelVerticalOrigin: VerticalOrigin; + /** + * Gets the tileset containing the feature. + */ + readonly tileset: Cesium3DTileset; + /** + * All objects returned by {@link Scene#pick} have a primitive property. This returns + the tileset containing the feature. + */ + readonly primitive: Cesium3DTileset; + /** + * Returns whether the feature contains this property. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @param name - The case-sensitive name of the property. + * @returns Whether the feature contains this property. + */ + hasProperty(name: string): boolean; + /** + * Returns an array of property names for the feature. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @param [results] - An array into which to store the results. + * @returns The names of the feature's properties. + */ + getPropertyNames(results?: string[]): string[]; + /** + * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's + class and inherited classes when using a batch table hierarchy. + * @example + * // Display all the properties for a feature in the console log. + var propertyNames = feature.getPropertyNames(); + var length = propertyNames.length; + for (var i = 0; i < length; ++i) { + var propertyName = propertyNames[i]; + console.log(propertyName + ': ' + feature.getProperty(propertyName)); + } + * @param name - The case-sensitive name of the property. + * @returns The value of the property or undefined if the property does not exist. + */ + getProperty(name: string): any; + /** + * Sets the value of the feature's property with the given name. +

+ If a property with the given name doesn't exist, it is created. +

+ * @example + * var height = feature.getProperty('Height'); // e.g., the height of a building + * @example + * var name = 'clicked'; + if (feature.getProperty(name)) { + console.log('already clicked'); + } else { + feature.setProperty(name, true); + console.log('first click'); + } + * @param name - The case-sensitive name of the property. + * @param value - The value of the property that will be copied. + */ + setProperty(name: string, value: any): void; +} + +/** + * A {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles tileset}, +used for streaming massive heterogeneous 3D geospatial datasets. + * @example + * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({ + url : 'http://localhost:8002/tilesets/Seattle/tileset.json' +})); + * @example + * // Common setting for the skipLevelOfDetail optimization +var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({ + url : 'http://localhost:8002/tilesets/Seattle/tileset.json', + skipLevelOfDetail : true, + baseScreenSpaceError : 1024, + skipScreenSpaceErrorFactor : 16, + skipLevels : 1, + immediatelyLoadDesiredLevelOfDetail : false, + loadSiblings : false, + cullWithChildrenBounds : true +})); + * @example + * // Common settings for the dynamicScreenSpaceError optimization +var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({ + url : 'http://localhost:8002/tilesets/Seattle/tileset.json', + dynamicScreenSpaceError : true, + dynamicScreenSpaceErrorDensity : 0.00278, + dynamicScreenSpaceErrorFactor : 4.0, + dynamicScreenSpaceErrorHeightFalloff : 0.25 +})); + * @param options - Object with the following properties: + * @param options.url - The url to a tileset JSON file. + * @param [options.show = true] - Determines if the tileset will be shown. + * @param [options.modelMatrix = Matrix4.IDENTITY] - A 4x4 transformation matrix that transforms the tileset's root tile. + * @param [options.shadows = ShadowMode.ENABLED] - Determines whether the tileset casts or receives shadows from light sources. + * @param [options.maximumScreenSpaceError = 16] - The maximum screen space error used to drive level of detail refinement. + * @param [options.maximumMemoryUsage = 512] - The maximum amount of memory in MB that can be used by the tileset. + * @param [options.cullWithChildrenBounds = true] - Optimization option. Whether to cull tiles using the union of their children bounding volumes. + * @param [options.cullRequestsWhileMoving = true] - Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets. + * @param [options.cullRequestsWhileMovingMultiplier = 60.0] - Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling. + * @param [options.preloadWhenHidden = false] - Preload tiles when tileset.show is false. Loads tiles as if the tileset is visible but does not render them. + * @param [options.preloadFlightDestinations = true] - Optimization option. Preload tiles at the camera's flight destination while the camera is in flight. + * @param [options.preferLeaves = false] - Optimization option. Prefer loading of leaves first. + * @param [options.dynamicScreenSpaceError = false] - Optimization option. Reduce the screen space error for tiles that are further away from the camera. + * @param [options.dynamicScreenSpaceErrorDensity = 0.00278] - Density used to adjust the dynamic screen space error, similar to fog density. + * @param [options.dynamicScreenSpaceErrorFactor = 4.0] - A factor used to increase the computed dynamic screen space error. + * @param [options.dynamicScreenSpaceErrorHeightFalloff = 0.25] - A ratio of the tileset's height at which the density starts to falloff. + * @param [options.progressiveResolutionHeightFraction = 0.3] - Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of progressiveResolutionHeightFraction*screenHeight will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load. + * @param [options.foveatedScreenSpaceError = true] - Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the screen space error for tiles around the edge of the screen. Screen space error returns to normal once all the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded. + * @param [options.foveatedConeSize = 0.1] - Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred. Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and their screen space error. This is controlled by {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}. Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, disabling the effect. + * @param [options.foveatedMinimumScreenSpaceErrorRelaxation = 0.0] - Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone. The screen space error will be raised starting with tileset value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}. + * @param [options.foveatedInterpolationCallback = Math.lerp] - Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone, interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError} + * @param [options.foveatedTimeDelay = 0.2] - Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how long in seconds to wait after the camera stops moving before deferred tiles start loading in. This time delay prevents requesting tiles around the edges of the screen when the camera is moving. Setting this to 0.0 will immediately request all tiles in any given view. + * @param [options.skipLevelOfDetail = false] - Optimization option. Determines if level of detail skipping should be applied during the traversal. + * @param [options.baseScreenSpaceError = 1024] - When skipLevelOfDetail is true, the screen space error that must be reached before skipping levels of detail. + * @param [options.skipScreenSpaceErrorFactor = 16] - When skipLevelOfDetail is true, a multiplier defining the minimum screen space error to skip. Used in conjunction with skipLevels to determine which tiles to load. + * @param [options.skipLevels = 1] - When skipLevelOfDetail is true, a constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped. Used in conjunction with skipScreenSpaceErrorFactor to determine which tiles to load. + * @param [options.immediatelyLoadDesiredLevelOfDetail = false] - When skipLevelOfDetail is true, only tiles that meet the maximum screen space error will ever be downloaded. Skipping factors are ignored and just the desired tiles are loaded. + * @param [options.loadSiblings = false] - When skipLevelOfDetail is true, determines whether siblings of visible tiles are always downloaded during traversal. + * @param [options.clippingPlanes] - The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset. + * @param [options.classificationType] - Determines whether terrain, 3D Tiles or both will be classified by this tileset. See {@link Cesium3DTileset#classificationType} for details about restrictions and limitations. + * @param [options.ellipsoid = Ellipsoid.WGS84] - The ellipsoid determining the size and shape of the globe. + * @param [options.pointCloudShading] - Options for constructing a {@link PointCloudShading} object to control point attenuation based on geometric error and lighting. + * @param [options.imageBasedLightingFactor = new Cartesian2(1.0, 1.0)] - Scales the diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox. + * @param [options.lightColor] - The light color when shading models. When undefined the scene's light color is used instead. + * @param [options.luminanceAtZenith = 0.2] - The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map. + * @param [options.sphericalHarmonicCoefficients] - The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. + * @param [options.specularEnvironmentMaps] - A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps. + * @param [options.backFaceCulling = true] - Whether to cull back-facing geometry. When true, back face culling is determined by the glTF material's doubleSided property; when false, back face culling is disabled. + * @param [options.debugHeatmapTilePropertyName] - The tile variable to colorize as a heatmap. All rendered tiles will be colorized relative to each other's specified variable value. + * @param [options.pickPrimitive] - The primitive to be rendered during the pick pass instead of the tileset. + * @param [options.debugFreezeFrame = false] - For debugging only. Determines if only the tiles from last frame should be used for rendering. + * @param [options.debugColorizeTiles = false] - For debugging only. When true, assigns a random color to each tile. + * @param [options.debugWireframe = false] - For debugging only. When true, render's each tile's content as a wireframe. + * @param [options.debugShowBoundingVolume = false] - For debugging only. When true, renders the bounding volume for each tile. + * @param [options.debugShowContentBoundingVolume = false] - For debugging only. When true, renders the bounding volume for each tile's content. + * @param [options.debugShowViewerRequestVolume = false] - For debugging only. When true, renders the viewer request volume for each tile. + * @param [options.debugShowGeometricError = false] - For debugging only. When true, draws labels to indicate the geometric error of each tile. + * @param [options.debugShowRenderingStatistics = false] - For debugging only. When true, draws labels to indicate the number of commands, points, triangles and features for each tile. + * @param [options.debugShowMemoryUsage = false] - For debugging only. When true, draws labels to indicate the texture and geometry memory in megabytes used by each tile. + * @param [options.debugShowUrl = false] - For debugging only. When true, draws labels to indicate the url of each tile. + */ +export class Cesium3DTileset { + constructor(options: { + url: Resource | string | Promise | Promise; + show?: boolean; + modelMatrix?: Matrix4; + shadows?: ShadowMode; + maximumScreenSpaceError?: number; + maximumMemoryUsage?: number; + cullWithChildrenBounds?: boolean; + cullRequestsWhileMoving?: boolean; + cullRequestsWhileMovingMultiplier?: number; + preloadWhenHidden?: boolean; + preloadFlightDestinations?: boolean; + preferLeaves?: boolean; + dynamicScreenSpaceError?: boolean; + dynamicScreenSpaceErrorDensity?: number; + dynamicScreenSpaceErrorFactor?: number; + dynamicScreenSpaceErrorHeightFalloff?: number; + progressiveResolutionHeightFraction?: number; + foveatedScreenSpaceError?: boolean; + foveatedConeSize?: number; + foveatedMinimumScreenSpaceErrorRelaxation?: number; + foveatedInterpolationCallback?: Cesium3DTileset.foveatedInterpolationCallback; + foveatedTimeDelay?: number; + skipLevelOfDetail?: boolean; + baseScreenSpaceError?: number; + skipScreenSpaceErrorFactor?: number; + skipLevels?: number; + immediatelyLoadDesiredLevelOfDetail?: boolean; + loadSiblings?: boolean; + clippingPlanes?: ClippingPlaneCollection; + classificationType?: ClassificationType; + ellipsoid?: Ellipsoid; + pointCloudShading?: any; + imageBasedLightingFactor?: Cartesian2; + lightColor?: Cartesian3; + luminanceAtZenith?: number; + sphericalHarmonicCoefficients?: Cartesian3[]; + specularEnvironmentMaps?: string; + backFaceCulling?: boolean; + debugHeatmapTilePropertyName?: string; + pickPrimitive?: any; + debugFreezeFrame?: boolean; + debugColorizeTiles?: boolean; + debugWireframe?: boolean; + debugShowBoundingVolume?: boolean; + debugShowContentBoundingVolume?: boolean; + debugShowViewerRequestVolume?: boolean; + debugShowGeometricError?: boolean; + debugShowRenderingStatistics?: boolean; + debugShowMemoryUsage?: boolean; + debugShowUrl?: boolean; + }); + /** + * Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets. + */ + cullRequestsWhileMoving: boolean; + /** + * Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling. + */ + cullRequestsWhileMovingMultiplier: number; + /** + * Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of progressiveResolutionHeightFraction*screenHeight will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load. + */ + progressiveResolutionHeightFraction: number; + /** + * Optimization option. Prefer loading of leaves first. + */ + preferLeaves: boolean; + /** + * Preload tiles when tileset.show is false. Loads tiles as if the tileset is visible but does not render them. + */ + preloadWhenHidden: boolean; + /** + * Optimization option. Fetch tiles at the camera's flight destination while the camera is in flight. + */ + preloadFlightDestinations: boolean; + /** + * Optimization option. Whether the tileset should refine based on a dynamic screen space error. Tiles that are further + away will be rendered with lower detail than closer tiles. This improves performance by rendering fewer + tiles and making less requests, but may result in a slight drop in visual quality for tiles in the distance. + The algorithm is biased towards "street views" where the camera is close to the ground plane of the tileset and looking + at the horizon. In addition results are more accurate for tightly fitting bounding volumes like box and region. + */ + dynamicScreenSpaceError: boolean; + /** + * Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the + screen space error for tiles around the edge of the screen. Screen space error returns to normal once all + the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded. + */ + foveatedScreenSpaceError: boolean; + /** + * Gets or sets a callback to control how much to raise the screen space error for tiles outside the foveated cone, + interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}. + */ + foveatedInterpolationCallback: Cesium3DTileset.foveatedInterpolationCallback; + /** + * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control + how long in seconds to wait after the camera stops moving before deferred tiles start loading in. + This time delay prevents requesting tiles around the edges of the screen when the camera is moving. + Setting this to 0.0 will immediately request all tiles in any given view. + */ + foveatedTimeDelay: number; + /** + * A scalar that determines the density used to adjust the dynamic screen space error, similar to {@link Fog}. Increasing this + value has the effect of increasing the maximum screen space error for all tiles, but in a non-linear fashion. + The error starts at 0.0 and increases exponentially until a midpoint is reached, and then approaches 1.0 asymptotically. + This has the effect of keeping high detail in the closer tiles and lower detail in the further tiles, with all tiles + beyond a certain distance all roughly having an error of 1.0. +

+ The dynamic error is in the range [0.0, 1.0) and is multiplied by dynamicScreenSpaceErrorFactor to produce the + final dynamic error. This dynamic error is then subtracted from the tile's actual screen space error. +

+

+ Increasing dynamicScreenSpaceErrorDensity has the effect of moving the error midpoint closer to the camera. + It is analogous to moving fog closer to the camera. +

+ */ + dynamicScreenSpaceErrorDensity: number; + /** + * A factor used to increase the screen space error of tiles for dynamic screen space error. As this value increases less tiles + are requested for rendering and tiles in the distance will have lower detail. If set to zero, the feature will be disabled. + */ + dynamicScreenSpaceErrorFactor: number; + /** + * A ratio of the tileset's height at which the density starts to falloff. If the camera is below this height the + full computed density is applied, otherwise the density falls off. This has the effect of higher density at + street level views. +

+ Valid values are between 0.0 and 1.0. +

+ */ + dynamicScreenSpaceErrorHeightFalloff: number; + /** + * Determines whether the tileset casts or receives shadows from light sources. +

+ Enabling shadows has a performance impact. A tileset that casts shadows must be rendered twice, once from the camera and again from the light's point of view. +

+

+ Shadows are rendered only when {@link Viewer#shadows} is true. +

+ */ + shadows: ShadowMode; + /** + * Determines if the tileset will be shown. + */ + show: boolean; + /** + * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from + the original feature, e.g. glTF material or per-point color in the tile. + */ + colorBlendMode: Cesium3DTileColorBlendMode; + /** + * Defines the value used to linearly interpolate between the source color and feature color when the {@link Cesium3DTileset#colorBlendMode} is MIX. + A value of 0.0 results in the source color while a value of 1.0 results in the feature color, with any value in-between + resulting in a mix of the source color and feature color. + */ + colorBlendAmount: number; + /** + * Options for controlling point size based on geometric error and eye dome lighting. + */ + pointCloudShading: PointCloudShading; + /** + * The event fired to indicate progress of loading new tiles. This event is fired when a new tile + is requested, when a requested tile is finished downloading, and when a downloaded tile has been + processed and is ready to render. +

+ The number of pending tile requests, numberOfPendingRequests, and number of tiles + processing, numberOfTilesProcessing are passed to the event listener. +

+

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * tileset.loadProgress.addEventListener(function(numberOfPendingRequests, numberOfTilesProcessing) { + if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) { + console.log('Stopped loading'); + return; + } + + console.log('Loading: requests: ' + numberOfPendingRequests + ', processing: ' + numberOfTilesProcessing); + }); + */ + loadProgress: Event; + /** + * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. The tileset + is completely loaded for this view. +

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * tileset.allTilesLoaded.addEventListener(function() { + console.log('All tiles are loaded'); + }); + */ + allTilesLoaded: Event; + /** + * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. This event + is fired once when all tiles in the initial view are loaded. +

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * tileset.initialTilesLoaded.addEventListener(function() { + console.log('Initial tiles are loaded'); + }); + */ + initialTilesLoaded: Event; + /** + * The event fired to indicate that a tile's content was loaded. +

+ The loaded {@link Cesium3DTile} is passed to the event listener. +

+

+ This event is fired during the tileset traversal while the frame is being rendered + so that updates to the tile take effect in the same frame. Do not create or modify + Cesium entities or primitives during the event listener. +

+ * @example + * tileset.tileLoad.addEventListener(function(tile) { + console.log('A tile was loaded.'); + }); + */ + tileLoad: Event; + /** + * The event fired to indicate that a tile's content was unloaded. +

+ The unloaded {@link Cesium3DTile} is passed to the event listener. +

+

+ This event is fired immediately before the tile's content is unloaded while the frame is being + rendered so that the event listener has access to the tile's content. Do not create + or modify Cesium entities or primitives during the event listener. +

+ * @example + * tileset.tileUnload.addEventListener(function(tile) { + console.log('A tile was unloaded from the cache.'); + }); + */ + tileUnload: Event; + /** + * The event fired to indicate that a tile's content failed to load. +

+ If there are no event listeners, error messages will be logged to the console. +

+

+ The error object passed to the listener contains two properties: +

    +
  • url: the url of the failed tile.
  • +
  • message: the error message.
  • +
+ * @example + * tileset.tileFailed.addEventListener(function(error) { + console.log('An error occurred loading tile: ' + error.url); + console.log('Error: ' + error.message); + }); + */ + tileFailed: Event; + /** + * This event fires once for each visible tile in a frame. This can be used to manually + style a tileset. +

+ The visible {@link Cesium3DTile} is passed to the event listener. +

+

+ This event is fired during the tileset traversal while the frame is being rendered + so that updates to the tile take effect in the same frame. Do not create or modify + Cesium entities or primitives during the event listener. +

+ * @example + * tileset.tileVisible.addEventListener(function(tile) { + if (tile.content instanceof Cesium.Batched3DModel3DTileContent) { + console.log('A Batched 3D Model tile is visible.'); + } + }); + * @example + * // Apply a red style and then manually set random colors for every other feature when the tile becomes visible. + tileset.style = new Cesium.Cesium3DTileStyle({ + color : 'color("red")' + }); + tileset.tileVisible.addEventListener(function(tile) { + var content = tile.content; + var featuresLength = content.featuresLength; + for (var i = 0; i < featuresLength; i+=2) { + content.getFeature(i).color = Cesium.Color.fromRandom(); + } + }); + */ + tileVisible: Event; + /** + * Optimization option. Determines if level of detail skipping should be applied during the traversal. +

+ The common strategy for replacement-refinement traversal is to store all levels of the tree in memory and require + all children to be loaded before the parent can refine. With this optimization levels of the tree can be skipped + entirely and children can be rendered alongside their parents. The tileset requires significantly less memory when + using this optimization. +

+ */ + skipLevelOfDetail: boolean; + /** + * The screen space error that must be reached before skipping levels of detail. +

+ Only used when {@link Cesium3DTileset#skipLevelOfDetail} is true. +

+ */ + baseScreenSpaceError: number; + /** + * Multiplier defining the minimum screen space error to skip. + For example, if a tile has screen space error of 100, no tiles will be loaded unless they + are leaves or have a screen space error <= 100 / skipScreenSpaceErrorFactor. +

+ Only used when {@link Cesium3DTileset#skipLevelOfDetail} is true. +

+ */ + skipScreenSpaceErrorFactor: number; + /** + * Constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped. + For example, if a tile is level 1, no tiles will be loaded unless they are at level greater than 2. +

+ Only used when {@link Cesium3DTileset#skipLevelOfDetail} is true. +

+ */ + skipLevels: number; + /** + * When true, only tiles that meet the maximum screen space error will ever be downloaded. + Skipping factors are ignored and just the desired tiles are loaded. +

+ Only used when {@link Cesium3DTileset#skipLevelOfDetail} is true. +

+ */ + immediatelyLoadDesiredLevelOfDetail: boolean; + /** + * Determines whether siblings of visible tiles are always downloaded during traversal. + This may be useful for ensuring that tiles are already available when the viewer turns left/right. +

+ Only used when {@link Cesium3DTileset#skipLevelOfDetail} is true. +

+ */ + loadSiblings: boolean; + /** + * The light color when shading models. When undefined the scene's light color is used instead. +

+ For example, disabling additional light sources by setting model.imageBasedLightingFactor = new Cartesian2(0.0, 0.0) will make the + model much darker. Here, increasing the intensity of the light source will make the model brighter. +

+ */ + lightColor: Cartesian3; + /** + * The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map. + This is used when {@link Cesium3DTileset#specularEnvironmentMaps} and {@link Cesium3DTileset#sphericalHarmonicCoefficients} are not defined. + */ + luminanceAtZenith: number; + /** + * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. When undefined, a diffuse irradiance + computed from the atmosphere color is used. +

+ There are nine Cartesian3 coefficients. + The order of the coefficients is: L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22 +

+ + These values can be obtained by preprocessing the environment map using the cmgen tool of + {@link https://github.com/google/filament/releases|Google's Filament project}. This will also generate a KTX file that can be + supplied to {@link Cesium3DTileset#specularEnvironmentMaps}. + */ + sphericalHarmonicCoefficients: Cartesian3[]; + /** + * A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps. + */ + specularEnvironmentMaps: string; + /** + * Whether to cull back-facing geometry. When true, back face culling is determined + by the glTF material's doubleSided property; when false, back face culling is disabled. + */ + backFaceCulling: boolean; + /** + * The primitive to be rendered during the pick pass instead of the tileset. + */ + pickPrimitive: any; + /** + * This property is for debugging only; it is not optimized for production use. +

+ Determines if only the tiles from last frame should be used for rendering. This + effectively "freezes" the tileset to the previous frame so it is possible to zoom + out and see what was rendered. +

+ */ + debugFreezeFrame: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, assigns a random color to each tile. This is useful for visualizing + what features belong to what tiles, especially with additive refinement where features + from parent tiles may be interleaved with features from child tiles. +

+ */ + debugColorizeTiles: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, renders each tile's content as a wireframe. +

+ */ + debugWireframe: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, renders the bounding volume for each visible tile. The bounding volume is + white if the tile has a content bounding volume or is empty; otherwise, it is red. Tiles that don't meet the + screen space error and are still refining to their descendants are yellow. +

+ */ + debugShowBoundingVolume: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, renders the bounding volume for each visible tile's content. The bounding volume is + blue if the tile has a content bounding volume; otherwise it is red. +

+ */ + debugShowContentBoundingVolume: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, renders the viewer request volume for each tile. +

+ */ + debugShowViewerRequestVolume: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, draws labels to indicate the geometric error of each tile. +

+ */ + debugShowGeometricError: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, draws labels to indicate the number of commands, points, triangles and features of each tile. +

+ */ + debugShowRenderingStatistics: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, draws labels to indicate the geometry and texture memory usage of each tile. +

+ */ + debugShowMemoryUsage: boolean; + /** + * This property is for debugging only; it is not optimized for production use. +

+ When true, draws labels to indicate the url of each tile. +

+ */ + debugShowUrl: boolean; + /** + * Gets the tileset's asset object property, which contains metadata about the tileset. +

+ See the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#reference-asset|asset schema reference} + in the 3D Tiles spec for the full set of properties. +

+ */ + readonly asset: any; + /** + * Gets the tileset's extensions object property. + */ + readonly extensions: any; + /** + * The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset. + */ + clippingPlanes: ClippingPlaneCollection; + /** + * Gets the tileset's properties dictionary object, which contains metadata about per-feature properties. +

+ See the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#reference-properties|properties schema reference} + in the 3D Tiles spec for the full set of properties. +

+ * @example + * console.log('Maximum building height: ' + tileset.properties.height.maximum); + console.log('Minimum building height: ' + tileset.properties.height.minimum); + */ + readonly properties: any; + /** + * When true, the tileset's root tile is loaded and the tileset is ready to render. + This is set to true right before {@link Cesium3DTileset#readyPromise} is resolved. + */ + readonly ready: boolean; + /** + * Gets the promise that will be resolved when the tileset's root tile is loaded and the tileset is ready to render. +

+ This promise is resolved at the end of the frame before the first frame the tileset is rendered in. +

+ * @example + * tileset.readyPromise.then(function(tileset) { + // tile.properties is not defined until readyPromise resolves. + var properties = tileset.properties; + if (Cesium.defined(properties)) { + for (var name in properties) { + console.log(properties[name]); + } + } + }); + */ + readonly readyPromise: Promise; + /** + * When true, all tiles that meet the screen space error this frame are loaded. The tileset is + completely loaded for this view. + */ + readonly tilesLoaded: boolean; + /** + * The resource used to fetch the tileset JSON file + */ + readonly resource: Resource; + /** + * The base path that non-absolute paths in tileset JSON file are relative to. + */ + readonly basePath: string; + /** + * The style, defined using the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}, + applied to each feature in the tileset. +

+ Assign undefined to remove the style, which will restore the visual + appearance of the tileset to its default when no style was applied. +

+

+ The style is applied to a tile before the {@link Cesium3DTileset#tileVisible} + event is raised, so code in tileVisible can manually set a feature's + properties (e.g. color and show) after the style is applied. When + a new style is assigned any manually set properties are overwritten. +

+ * @example + * tileset.style = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ['${Height} >= 100', 'color("purple", 0.5)'], + ['${Height} >= 50', 'color("red")'], + ['true', 'color("blue")'] + ] + }, + show : '${Height} > 0', + meta : { + description : '"Building id ${id} has height ${Height}."' + } + }); + */ + style: Cesium3DTileStyle | undefined; + /** + * The maximum screen space error used to drive level of detail refinement. This value helps determine when a tile + refines to its descendants, and therefore plays a major role in balancing performance with visual quality. +

+ A tile's screen space error is roughly equivalent to the number of pixels wide that would be drawn if a sphere with a + radius equal to the tile's geometric error were rendered at the tile's position. If this value exceeds + maximumScreenSpaceError the tile refines to its descendants. +

+

+ Depending on the tileset, maximumScreenSpaceError may need to be tweaked to achieve the right balance. + Higher values provide better performance but lower visual quality. +

+ */ + maximumScreenSpaceError: number; + /** + * The maximum amount of GPU memory (in MB) that may be used to cache tiles. This value is estimated from + geometry, textures, and batch table textures of loaded tiles. For point clouds, this value also + includes per-point metadata. +

+ Tiles not in view are unloaded to enforce this. +

+

+ If decreasing this value results in unloading tiles, the tiles are unloaded the next frame. +

+

+ If tiles sized more than maximumMemoryUsage are needed + to meet the desired screen space error, determined by {@link Cesium3DTileset#maximumScreenSpaceError}, + for the current view, then the memory usage of the tiles loaded will exceed + maximumMemoryUsage. For example, if the maximum is 256 MB, but + 300 MB of tiles are needed to meet the screen space error, then 300 MB of tiles may be loaded. When + these tiles go out of view, they will be unloaded. +

+ */ + maximumMemoryUsage: number; + /** + * The root tile. + */ + readonly root: Cesium3DTile; + /** + * The tileset's bounding sphere. + * @example + * var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ + url : 'http://localhost:8002/tilesets/Seattle/tileset.json' + })); + + tileset.readyPromise.then(function(tileset) { + // Set the camera to view the newly added tileset + viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0)); + }); + */ + readonly boundingSphere: BoundingSphere; + /** + * A 4x4 transformation matrix that transforms the entire tileset. + * @example + * // Adjust a tileset's height from the globe's surface. + var heightOffset = 20.0; + var boundingSphere = tileset.boundingSphere; + var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center); + var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0); + var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset); + var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()); + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + */ + modelMatrix: Matrix4; + /** + * Returns the time, in milliseconds, since the tileset was loaded and first updated. + */ + readonly timeSinceLoad: number; + /** + * The total amount of GPU memory in bytes used by the tileset. This value is estimated from + geometry, texture, and batch table textures of loaded tiles. For point clouds, this value also + includes per-point metadata. + */ + readonly totalMemoryUsageInBytes: number; + /** + * Determines whether terrain, 3D Tiles or both will be classified by this tileset. +

+ This option is only applied to tilesets containing batched 3D models, geometry data, or vector data. Even when undefined, vector data and geometry data + must render as classifications and will default to rendering on both terrain and other 3D Tiles tilesets. +

+

+ When enabled for batched 3D model tilesets, there are a few requirements/limitations on the glTF: +

    +
  • POSITION and _BATCHID semantics are required.
  • +
  • All indices with the same batch id must occupy contiguous sections of the index buffer.
  • +
  • All shaders and techniques are ignored. The generated shader simply multiplies the position by the model-view-projection matrix.
  • +
  • The only supported extensions are CESIUM_RTC and WEB3D_quantized_attributes.
  • +
  • Only one node is supported.
  • +
  • Only one mesh per node is supported.
  • +
  • Only one primitive per mesh is supported.
  • +
+

+ */ + readonly classificationType: ClassificationType; + /** + * Gets an ellipsoid describing the shape of the globe. + */ + readonly ellipsoid: Ellipsoid; + /** + * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred. + Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}. + Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, essentially disabling the effect. + */ + foveatedConeSize: number; + /** + * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone. + The screen space error will be raised starting with this value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}. + */ + foveatedMinimumScreenSpaceErrorRelaxation: number; + /** + * Returns the extras property at the top-level of the tileset JSON, which contains application specific metadata. + Returns undefined if extras does not exist. + */ + readonly extras: any; + /** + * Cesium adds lighting from the earth, sky, atmosphere, and star skybox. This cartesian is used to scale the final + diffuse and specular lighting contribution from those sources to the final color. A value of 0.0 will disable those light sources. + */ + imageBasedLightingFactor: Cartesian2; + /** + * Provides a hook to override the method used to request the tileset json + useful when fetching tilesets from remote servers + * @param tilesetUrl - The url of the json file to be fetched + * @returns A promise that resolves with the fetched json data + */ + static loadJson(tilesetUrl: Resource | string): Promise; + /** + * Marks the tileset's {@link Cesium3DTileset#style} as dirty, which forces all + features to re-evaluate the style in the next frame each is visible. + */ + makeStyleDirty(): void; + /** + * Unloads all tiles that weren't selected the previous frame. This can be used to + explicitly manage the tile cache and reduce the total number of tiles loaded below + {@link Cesium3DTileset#maximumMemoryUsage}. +

+ Tile unloads occur at the next frame to keep all the WebGL delete calls + within the render loop. +

+ */ + trimLoadedTiles(): void; + /** + * true if the tileset JSON file lists the extension in extensionsUsed; otherwise, false. + * @param extensionName - The name of the extension to check. + * @returns true if the tileset JSON file lists the extension in extensionsUsed; otherwise, false. + */ + hasExtension(extensionName: string): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * tileset = tileset && tileset.destroy(); + */ + destroy(): void; +} + +export namespace Cesium3DTileset { + /** + * Optimization option. Used as a callback when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone, + interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}. + * @param p - The start value to interpolate. + * @param q - The end value to interpolate. + * @param time - The time of interpolation generally in the range [0.0, 1.0]. + */ + type foveatedInterpolationCallback = (p: number, q: number, time: number) => number; +} + +/** + * A style that is applied to a {@link Cesium3DTileset}. +

+Evaluates an expression defined using the +{@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}. +

+ * @example + * tileset.style = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ['${Height} >= 100', 'color("purple", 0.5)'], + ['${Height} >= 50', 'color("red")'], + ['true', 'color("blue")'] + ] + }, + show : '${Height} > 0', + meta : { + description : '"Building id ${id} has height ${Height}."' + } +}); + * @example + * tileset.style = new Cesium.Cesium3DTileStyle({ + color : 'vec4(${Temperature})', + pointSize : '${Temperature} * 2.0' +}); + * @param [style] - The url of a style or an object defining a style. + */ +export class Cesium3DTileStyle { + constructor(style?: Resource | string | any); + /** + * Gets the object defining the style using the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}. + */ + readonly style: any; + /** + * When true, the style is ready and its expressions can be evaluated. When + a style is constructed with an object, as opposed to a url, this is true immediately. + */ + readonly ready: boolean; + /** + * Gets the promise that will be resolved when the the style is ready and its expressions can be evaluated. + */ + readonly readyPromise: Promise; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's show property. Alternatively a boolean, string, or object defining a show style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return or convert to a Boolean. +

+

+ This expression is applicable to all tile formats. +

+ * @example + * var style = new Cesium3DTileStyle({ + show : '(regExp("^Chest").test(${County})) && (${YearBuilt} >= 1970)' + }); + style.show.evaluate(feature); // returns true or false depending on the feature's properties + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override show expression with a custom function + style.show = { + evaluate : function(feature) { + return true; + } + }; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override show expression with a boolean + style.show = true; + }; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override show expression with a string + style.show = '${Height} > 0'; + }; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override show expression with a condition + style.show = { + conditions: [ + ['${height} > 2', 'false'], + ['true', 'true'] + ]; + }; + */ + show: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's color property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is applicable to all tile formats. +

+ * @example + * var style = new Cesium3DTileStyle({ + color : '(${Temperature} > 90) ? color("red") : color("white")' + }); + style.color.evaluateColor(feature, result); // returns a Cesium.Color object + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override color expression with a custom function + style.color = { + evaluateColor : function(feature, result) { + return Cesium.Color.clone(Cesium.Color.WHITE, result); + } + }; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override color expression with a string + style.color = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override color expression with a condition + style.color = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + color: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's pointSize property. Alternatively a string or object defining a point size style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Number. +

+

+ This expression is only applicable to point features in a Vector tile or a Point Cloud tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + pointSize : '(${Temperature} > 90) ? 2.0 : 1.0' + }); + style.pointSize.evaluate(feature); // returns a Number + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointSize expression with a custom function + style.pointSize = { + evaluate : function(feature) { + return 1.0; + } + }; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointSize expression with a number + style.pointSize = 1.0; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointSize expression with a string + style.pointSize = '${height} / 10'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointSize expression with a condition + style.pointSize = { + conditions : [ + ['${height} > 2', '1.0'], + ['true', '2.0'] + ] + }; + */ + pointSize: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's pointOutlineColor property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointOutlineColor expression with a string + style.pointOutlineColor = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointOutlineColor expression with a condition + style.pointOutlineColor = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + pointOutlineColor: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's pointOutlineWidth property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Number. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointOutlineWidth expression with a string + style.pointOutlineWidth = '5'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override pointOutlineWidth expression with a condition + style.pointOutlineWidth = { + conditions : [ + ['${height} > 2', '5'], + ['true', '0'] + ] + }; + */ + pointOutlineWidth: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelColor property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelColor expression with a string + style.labelColor = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelColor expression with a condition + style.labelColor = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + labelColor: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelOutlineColor property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelOutlineColor expression with a string + style.labelOutlineColor = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelOutlineColor expression with a condition + style.labelOutlineColor = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + labelOutlineColor: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelOutlineWidth property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Number. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelOutlineWidth expression with a string + style.labelOutlineWidth = '5'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelOutlineWidth expression with a condition + style.labelOutlineWidth = { + conditions : [ + ['${height} > 2', '5'], + ['true', '0'] + ] + }; + */ + labelOutlineWidth: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's font property. Alternatively a string or object defining a string style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a String. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + font : '(${Temperature} > 90) ? "30px Helvetica" : "24px Helvetica"' + }); + style.font.evaluate(feature); // returns a String + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override font expression with a custom function + style.font = { + evaluate : function(feature) { + return '24px Helvetica'; + } + }; + */ + font: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's label style property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a LabelStyle. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + labelStyle : '(${Temperature} > 90) ? ' + LabelStyle.FILL_AND_OUTLINE + ' : ' + LabelStyle.FILL + }); + style.labelStyle.evaluate(feature); // returns a LabelStyle + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelStyle expression with a custom function + style.labelStyle = { + evaluate : function(feature) { + return LabelStyle.FILL; + } + }; + */ + labelStyle: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelText property. Alternatively a string or object defining a string style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a String. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + labelText : '(${Temperature} > 90) ? ">90" : "<=90"' + }); + style.labelText.evaluate(feature); // returns a String + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelText expression with a custom function + style.labelText = { + evaluate : function(feature) { + return 'Example label text'; + } + }; + */ + labelText: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's backgroundColor property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override backgroundColor expression with a string + style.backgroundColor = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override backgroundColor expression with a condition + style.backgroundColor = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + backgroundColor: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's backgroundPadding property. Alternatively a string or object defining a vec2 style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Cartesian2. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override backgroundPadding expression with a string + style.backgroundPadding = 'vec2(5.0, 7.0)'; + style.backgroundPadding.evaluate(feature); // returns a Cartesian2 + */ + backgroundPadding: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's backgroundEnabled property. Alternatively a string or object defining a boolean style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Boolean. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override backgroundEnabled expression with a string + style.backgroundEnabled = 'true'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override backgroundEnabled expression with a condition + style.backgroundEnabled = { + conditions : [ + ['${height} > 2', 'true'], + ['true', 'false'] + ] + }; + */ + backgroundEnabled: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's scaleByDistance property. Alternatively a string or object defining a vec4 style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Cartesian4. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override scaleByDistance expression with a string + style.scaleByDistance = 'vec4(1.5e2, 2.0, 1.5e7, 0.5)'; + style.scaleByDistance.evaluate(feature); // returns a Cartesian4 + */ + scaleByDistance: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's translucencyByDistance property. Alternatively a string or object defining a vec4 style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Cartesian4. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override translucencyByDistance expression with a string + style.translucencyByDistance = 'vec4(1.5e2, 1.0, 1.5e7, 0.2)'; + style.translucencyByDistance.evaluate(feature); // returns a Cartesian4 + */ + translucencyByDistance: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's distanceDisplayCondition property. Alternatively a string or object defining a vec2 style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Cartesian2. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override distanceDisplayCondition expression with a string + style.distanceDisplayCondition = 'vec2(0.0, 5.5e6)'; + style.distanceDisplayCondition.evaluate(feature); // returns a Cartesian2 + */ + distanceDisplayCondition: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's heightOffset property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Number. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override heightOffset expression with a string + style.heightOffset = '2.0'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override heightOffset expression with a condition + style.heightOffset = { + conditions : [ + ['${height} > 2', '4.0'], + ['true', '2.0'] + ] + }; + */ + heightOffset: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's anchorLineEnabled property. Alternatively a string or object defining a boolean style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Boolean. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override anchorLineEnabled expression with a string + style.anchorLineEnabled = 'true'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override anchorLineEnabled expression with a condition + style.anchorLineEnabled = { + conditions : [ + ['${height} > 2', 'true'], + ['true', 'false'] + ] + }; + */ + anchorLineEnabled: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's anchorLineColor property. Alternatively a string or object defining a color style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Color. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override anchorLineColor expression with a string + style.anchorLineColor = 'color("blue")'; + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override anchorLineColor expression with a condition + style.anchorLineColor = { + conditions : [ + ['${height} > 2', 'color("cyan")'], + ['true', 'color("blue")'] + ] + }; + */ + anchorLineColor: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's image property. Alternatively a string or object defining a string style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a String. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + image : '(${Temperature} > 90) ? "/url/to/image1" : "/url/to/image2"' + }); + style.image.evaluate(feature); // returns a String + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override image expression with a custom function + style.image = { + evaluate : function(feature) { + return '/url/to/image'; + } + }; + */ + image: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's disableDepthTestDistance property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a Number. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override disableDepthTestDistance expression with a string + style.disableDepthTestDistance = '1000.0'; + style.disableDepthTestDistance.evaluate(feature); // returns a Number + */ + disableDepthTestDistance: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's horizontalOrigin property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a HorizontalOrigin. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + horizontalOrigin : HorizontalOrigin.LEFT + }); + style.horizontalOrigin.evaluate(feature); // returns a HorizontalOrigin + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override horizontalOrigin expression with a custom function + style.horizontalOrigin = { + evaluate : function(feature) { + return HorizontalOrigin.CENTER; + } + }; + */ + horizontalOrigin: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's verticalOrigin property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a VerticalOrigin. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + verticalOrigin : VerticalOrigin.TOP + }); + style.verticalOrigin.evaluate(feature); // returns a VerticalOrigin + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override verticalOrigin expression with a custom function + style.verticalOrigin = { + evaluate : function(feature) { + return VerticalOrigin.CENTER; + } + }; + */ + verticalOrigin: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelHorizontalOrigin property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a HorizontalOrigin. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + labelHorizontalOrigin : HorizontalOrigin.LEFT + }); + style.labelHorizontalOrigin.evaluate(feature); // returns a HorizontalOrigin + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelHorizontalOrigin expression with a custom function + style.labelHorizontalOrigin = { + evaluate : function(feature) { + return HorizontalOrigin.CENTER; + } + }; + */ + labelHorizontalOrigin: StyleExpression; + /** + * Gets or sets the {@link StyleExpression} object used to evaluate the style's labelVerticalOrigin property. Alternatively a string or object defining a number style can be used. + The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter. +

+ The expression must return a VerticalOrigin. +

+

+ This expression is only applicable to point features in a Vector tile. +

+ * @example + * var style = new Cesium3DTileStyle({ + labelVerticalOrigin : VerticalOrigin.TOP + }); + style.labelVerticalOrigin.evaluate(feature); // returns a VerticalOrigin + * @example + * var style = new Cesium.Cesium3DTileStyle(); + // Override labelVerticalOrigin expression with a custom function + style.labelVerticalOrigin = { + evaluate : function(feature) { + return VerticalOrigin.CENTER; + } + }; + */ + labelVerticalOrigin: StyleExpression; + /** + * Gets or sets the object containing application-specific expression that can be explicitly + evaluated, e.g., for display in a UI. + * @example + * var style = new Cesium3DTileStyle({ + meta : { + description : '"Building id ${id} has height ${Height}."' + } + }); + style.meta.description.evaluate(feature); // returns a String with the substituted variables + */ + meta: StyleExpression; +} + +/** + * A ParticleEmitter that emits particles from a circle. +Particles will be positioned within a circle and have initial velocities going along the z vector. + * @param [radius = 1.0] - The radius of the circle in meters. + */ +export class CircleEmitter { + constructor(radius?: number); + /** + * The radius of the circle in meters. + */ + radius: number; + /** + * The angle of the cone in radians. + */ + angle: number; +} + +/** + * A classification primitive represents a volume enclosing geometry in the {@link Scene} to be highlighted. +

+A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including +{@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement, +and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix +and match most of them and add a new geometry or appearance independently of each other. +Only {@link PerInstanceColorAppearance} with the same color across all instances is supported at this time when using +ClassificationPrimitive directly. +For full {@link Appearance} support when classifying terrain or 3D Tiles use {@link GroundPrimitive} instead. +

+

+For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there +will be rendering artifacts for some viewing angles. +

+

+Valid geometries are {@link BoxGeometry}, {@link CylinderGeometry}, {@link EllipsoidGeometry}, {@link PolylineVolumeGeometry}, and {@link SphereGeometry}. +

+

+Geometries that follow the surface of the ellipsoid, such as {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry}, +are also valid if they are extruded volumes; otherwise, they will not be rendered. +

+ * @param [options] - Object with the following properties: + * @param [options.geometryInstances] - The geometry instances to render. This can either be a single instance or an array of length one. + * @param [options.appearance] - The appearance used to render the primitive. Defaults to PerInstanceColorAppearance when GeometryInstances have a color attribute. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.vertexCacheOptimize = false] - When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + * @param [options.interleave = false] - When true, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time. + * @param [options.compressVertices = true] - When true, the geometry vertices are compressed, which will save memory. + * @param [options.releaseGeometryInstances = true] - When true, the primitive does not keep a reference to the input geometryInstances to save memory. + * @param [options.allowPicking = true] - When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + * @param [options.asynchronous = true] - Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first. + * @param [options.classificationType = ClassificationType.BOTH] - Determines whether terrain, 3D Tiles or both will be classified. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.debugShowShadowVolume = false] - For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be true on + creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be false. + */ +export class ClassificationPrimitive { + constructor(options?: { + geometryInstances?: any[] | GeometryInstance; + appearance?: Appearance; + show?: boolean; + vertexCacheOptimize?: boolean; + interleave?: boolean; + compressVertices?: boolean; + releaseGeometryInstances?: boolean; + allowPicking?: boolean; + asynchronous?: boolean; + classificationType?: ClassificationType; + debugShowBoundingVolume?: boolean; + debugShowShadowVolume?: boolean; + }); + /** + * The geometry instance rendered with this primitive. This may + be undefined if options.releaseGeometryInstances + is true when the primitive is constructed. +

+ Changing this property after the primitive is rendered has no effect. +

+

+ Because of the rendering technique used, all geometry instances must be the same color. + If there is an instance with a differing color, a DeveloperError will be thrown + on the first attempt to render. +

+ */ + readonly geometryInstances: any[] | GeometryInstance; + /** + * Determines if the primitive will be shown. This affects all geometry + instances in the primitive. + */ + show: boolean; + /** + * Determines whether terrain, 3D Tiles or both will be classified. + */ + classificationType: ClassificationType; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the shadow volume for each geometry in the primitive. +

+ */ + debugShowShadowVolume: boolean; + /** + * When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + */ + readonly vertexCacheOptimize: boolean; + /** + * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance. + */ + readonly interleave: boolean; + /** + * When true, the primitive does not keep a reference to the input geometryInstances to save memory. + */ + readonly releaseGeometryInstances: boolean; + /** + * When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + */ + readonly allowPicking: boolean; + /** + * Determines if the geometry instances will be created and batched on a web worker. + */ + readonly asynchronous: boolean; + /** + * When true, geometry vertices are compressed, which will save memory. + */ + readonly compressVertices: boolean; + /** + * Determines if the primitive is complete and ready to render. If this property is + true, the primitive will be rendered the next time that {@link ClassificationPrimitive#update} + is called. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves when the primitive is ready to render. + */ + readonly readyPromise: Promise; + /** + * Determines if ClassificationPrimitive rendering is supported. + * @param scene - The scene. + * @returns true if ClassificationPrimitives are supported; otherwise, returns false + */ + static isSupported(scene: Scene): boolean; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns the modifiable per-instance attributes for a {@link GeometryInstance}. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA); + attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true); + * @param id - The id of the {@link GeometryInstance}. + * @returns The typed array in the attribute's format or undefined if the is no instance with id. + */ + getGeometryInstanceAttributes(id: any): any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * e = e && e.destroy(); + */ + destroy(): void; +} + +/** + * Whether a classification affects terrain, 3D Tiles or both. + */ +export enum ClassificationType { + /** + * Only terrain will be classified. + */ + TERRAIN = 0, + /** + * Only 3D Tiles will be classified. + */ + CESIUM_3D_TILE = 1, + /** + * Both terrain and 3D Tiles will be classified. + */ + BOTH = 2 +} + +/** + * A Plane in Hessian Normal form to be used with {@link ClippingPlaneCollection}. +Compatible with mathematics functions in {@link Plane} + * @param normal - The plane's normal (normalized). + * @param distance - The shortest distance from the origin to the plane. The sign of +distance determines which side of the plane the origin +is on. If distance is positive, the origin is in the half-space +in the direction of the normal; if negative, the origin is in the half-space +opposite to the normal; if zero, the plane passes through the origin. + */ +export class ClippingPlane { + constructor(normal: Cartesian3, distance: number); + /** + * The shortest distance from the origin to the plane. The sign of + distance determines which side of the plane the origin + is on. If distance is positive, the origin is in the half-space + in the direction of the normal; if negative, the origin is in the half-space + opposite to the normal; if zero, the plane passes through the origin. + */ + distance: number; + /** + * The plane's normal. + */ + normal: Cartesian3; + /** + * Create a ClippingPlane from a Plane object. + * @param plane - The plane containing parameters to copy + * @param [result] - The object on which to store the result + * @returns The ClippingPlane generated from the plane's parameters. + */ + static fromPlane(plane: Plane, result?: ClippingPlane): ClippingPlane; + /** + * Clones the ClippingPlane without setting its ownership. + * @param clippingPlane - The ClippingPlane to be cloned + * @param [result] - The object on which to store the cloned parameters. + * @returns a clone of the input ClippingPlane + */ + static clone(clippingPlane: ClippingPlane, result?: ClippingPlane): ClippingPlane; +} + +/** + * Specifies a set of clipping planes. Clipping planes selectively disable rendering in a region on the +outside of the specified list of {@link ClippingPlane} objects for a single gltf model, 3D Tileset, or the globe. +

+In general the clipping planes' coordinates are relative to the object they're attached to, so a plane with distance set to 0 will clip +through the center of the object. +

+

+For 3D Tiles, the root tile's transform is used to position the clipping planes. If a transform is not defined, the root tile's {@link Cesium3DTile#boundingSphere} is used instead. +

+ * @example + * // This clipping plane's distance is positive, which means its normal +// is facing the origin. This will clip everything that is behind +// the plane, which is anything with y coordinate < -5. +var clippingPlanes = new Cesium.ClippingPlaneCollection({ + planes : [ + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), 5.0) + ], +}); +// Create an entity and attach the ClippingPlaneCollection to the model. +var entity = viewer.entities.add({ + position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 10000), + model : { + uri : 'model.gltf', + minimumPixelSize : 128, + maximumScale : 20000, + clippingPlanes : clippingPlanes + } +}); +viewer.zoomTo(entity); + * @param [options] - Object with the following properties: + * @param [options.planes = []] - An array of {@link ClippingPlane} objects used to selectively disable rendering on the outside of each plane. + * @param [options.enabled = true] - Determines whether the clipping planes are active. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix specifying an additional transform relative to the clipping planes original coordinate system. + * @param [options.unionClippingRegions = false] - If true, a region will be clipped if it is on the outside of any plane in the collection. Otherwise, a region will only be clipped if it is on the outside of every plane. + * @param [options.edgeColor = Color.WHITE] - The color applied to highlight the edge along which an object is clipped. + * @param [options.edgeWidth = 0.0] - The width, in pixels, of the highlight applied to the edge along which an object is clipped. + */ +export class ClippingPlaneCollection { + constructor(options?: { + planes?: ClippingPlane[]; + enabled?: boolean; + modelMatrix?: Matrix4; + unionClippingRegions?: boolean; + edgeColor?: Color; + edgeWidth?: number; + }); + /** + * The 4x4 transformation matrix specifying an additional transform relative to the clipping planes + original coordinate system. + */ + modelMatrix: Matrix4; + /** + * The color applied to highlight the edge along which an object is clipped. + */ + edgeColor: Color; + /** + * The width, in pixels, of the highlight applied to the edge along which an object is clipped. + */ + edgeWidth: number; + /** + * An event triggered when a new clipping plane is added to the collection. Event handlers + are passed the new plane and the index at which it was added. + */ + planeAdded: Event; + /** + * An event triggered when a new clipping plane is removed from the collection. Event handlers + are passed the new plane and the index from which it was removed. + */ + planeRemoved: Event; + /** + * Returns the number of planes in this collection. This is commonly used with + {@link ClippingPlaneCollection#get} to iterate over all the planes + in the collection. + */ + readonly length: number; + /** + * If true, a region will be clipped if it is on the outside of any plane in the + collection. Otherwise, a region will only be clipped if it is on the + outside of every plane. + */ + unionClippingRegions: boolean; + /** + * If true, clipping will be enabled. + */ + enabled: boolean; + /** + * Adds the specified {@link ClippingPlane} to the collection to be used to selectively disable rendering + on the outside of each plane. Use {@link ClippingPlaneCollection#unionClippingRegions} to modify + how modify the clipping behavior of multiple planes. + * @param plane - The ClippingPlane to add to the collection. + */ + add(plane: ClippingPlane): void; + /** + * Returns the plane in the collection at the specified index. Indices are zero-based + and increase as planes are added. Removing a plane shifts all planes after + it to the left, changing their indices. This function is commonly used with + {@link ClippingPlaneCollection#length} to iterate over all the planes + in the collection. + * @param index - The zero-based index of the plane. + * @returns The ClippingPlane at the specified index. + */ + get(index: number): ClippingPlane; + /** + * Checks whether this collection contains a ClippingPlane equal to the given ClippingPlane. + * @param [clippingPlane] - The ClippingPlane to check for. + * @returns true if this collection contains the ClippingPlane, false otherwise. + */ + contains(clippingPlane?: ClippingPlane): boolean; + /** + * Removes the first occurrence of the given ClippingPlane from the collection. + * @returns true if the plane was removed; false if the plane was not found in the collection. + */ + remove(clippingPlane: ClippingPlane): boolean; + /** + * Removes all planes from the collection. + */ + removeAll(): void; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + build the resources for clipping planes. +

+ Do not call this function directly. +

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * clippingPlanes = clippingPlanes && clippingPlanes.destroy(); + */ + destroy(): void; +} + +/** + * Defines different modes for blending between a target color and a primitive's source color. + +HIGHLIGHT multiplies the source color by the target color +REPLACE replaces the source color with the target color +MIX blends the source color and target color together + */ +export enum ColorBlendMode { + HIGHLIGHT = 0, + REPLACE = 1, + MIX = 2 +} + +/** + * An expression for a style applied to a {@link Cesium3DTileset}. +

+Evaluates a conditions expression defined using the +{@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}. +

+

+Implements the {@link StyleExpression} interface. +

+ * @example + * var expression = new Cesium.ConditionsExpression({ + conditions : [ + ['${Area} > 10, 'color("#FF0000")'], + ['${id} !== "1"', 'color("#00FF00")'], + ['true', 'color("#FFFFFF")'] + ] +}); +expression.evaluateColor(feature, result); // returns a Cesium.Color object + * @param [conditionsExpression] - The conditions expression defined using the 3D Tiles Styling language. + * @param [defines] - Defines in the style. + */ +export class ConditionsExpression { + constructor(conditionsExpression?: any, defines?: any); + /** + * Gets the conditions expression defined in the 3D Tiles Styling language. + */ + readonly conditionsExpression: any; + /** + * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of + the expression in the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language} + is of type Boolean, Number, or String, the corresponding JavaScript + primitive type will be returned. If the result is a RegExp, a Javascript RegExp + object will be returned. If the result is a Cartesian2, Cartesian3, or Cartesian4, + a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the result argument is + a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned. + * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object onto which to store the result. + * @returns The result of evaluating the expression. + */ + evaluate(feature: Cesium3DTileFeature, result?: any): boolean | number | string | RegExp | Cartesian2 | Cartesian3 | Cartesian4 | Color; + /** + * Evaluates the result of a Color expression, using the values defined by a feature. +

+ This is equivalent to {@link ConditionsExpression#evaluate} but always returns a {@link Color} object. +

+ * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object in which to store the result + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + evaluateColor(feature: Cesium3DTileFeature, result?: Color): Color; +} + +/** + * A ParticleEmitter that emits particles within a cone. +Particles will be positioned at the tip of the cone and have initial velocities going towards the base. + * @param [angle = Cesium.Math.toRadians(30.0)] - The angle of the cone in radians. + */ +export class ConeEmitter { + constructor(angle?: number); +} + +/** + * @property height - The height. + * @property color - The color at this height. + */ +export type createElevationBandMaterialEntry = { + height: number; + color: Color; +}; + +/** + * @property entries - A list of elevation entries. They will automatically be sorted from lowest to highest. If there is only one entry and extendsDownards and extendUpwards are both false, they will both be set to true. + * @property [extendDownwards = false] - If true, the band's minimum elevation color will extend infinitely downwards. + * @property [extendUpwards = false] - If true, the band's maximum elevation color will extend infinitely upwards. + */ +export type createElevationBandMaterialBand = { + entries: createElevationBandMaterialEntry[]; + extendDownwards?: boolean; + extendUpwards?: boolean; +}; + +/** + * Creates a {@link Material} that combines multiple layers of color/gradient bands and maps them to terrain heights. + +The shader does a binary search over all the heights to find out which colors are above and below a given height, and +interpolates between them for the final color. This material supports hundreds of entries relatively cheaply. + * @example + * scene.globe.material = Cesium.createElevationBandMaterial({ + scene : scene, + layers : [{ + entries : [{ + height : 4200.0, + color : new Cesium.Color(0.0, 0.0, 0.0, 1.0) + }, { + height : 8848.0, + color : new Cesium.Color(1.0, 1.0, 1.0, 1.0) + }], + extendDownwards : true, + extendUpwards : true, + }, { + entries : [{ + height : 7000.0, + color : new Cesium.Color(1.0, 0.0, 0.0, 0.5) + }, { + height : 7100.0, + color : new Cesium.Color(1.0, 0.0, 0.0, 0.5) + }] + }] +}); + * @param options - Object with the following properties: + * @param options.scene - The scene where the visualization is taking place. + * @param options.layers - A list of bands ordered from lowest to highest precedence. + * @returns A new {@link Material} instance. + */ +export function createElevationBandMaterial(options: { + scene: Scene; + layers: createElevationBandMaterialBand[]; +}): Material; + +/** + * Creates a {@link Cesium3DTileset} instance for the +{@link https://cesium.com/content/cesium-osm-buildings/|Cesium OSM Buildings} +tileset. + * @example + * // Create Cesium OSM Buildings with default styling +var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.scene.primitives.add(Cesium.createOsmBuildings()); + * @example + * // Create Cesium OSM Buildings with a custom style highlighting +// schools and hospitals. +viewer.scene.primitives.add(Cesium.createOsmBuildings({ + style: new Cesium.Cesium3DTileStyle({ + color: { + conditions: [ + ["${feature['building']} === 'hospital'", "color('#0000FF')"], + ["${feature['building']} === 'school'", "color('#00FF00')"], + [true, "color('#ffffff')"] + ] + } + }) +})); + * @param [options] - Construction options. Any options allowed by the {@link Cesium3DTileset} constructor + may be specified here. In addition to those, the following properties are supported: + * @param [options.defaultColor = Color.WHITE] - The default color to use for buildings + that do not have a color. This parameter is ignored if options.style is specified. + * @param [options.style] - The style to use with the tileset. If not + specified, a default style is used which gives each building or building part a + color inferred from its OpenStreetMap tags. If no color can be inferred, + options.defaultColor is used. + */ +export function createOsmBuildings(options?: { + defaultColor?: Color; + style?: Cesium3DTileStyle; +}): Cesium3DTileset; + +/** + * Creates a {@link Primitive} to visualize well-known vector vertex attributes: +normal, tangent, and bitangent. Normal +is red; tangent is green; and bitangent is blue. If an attribute is not +present, it is not drawn. + * @example + * scene.primitives.add(Cesium.createTangentSpaceDebugPrimitive({ + geometry : instance.geometry, + length : 100000.0, + modelMatrix : instance.modelMatrix +})); + * @param options - Object with the following properties: + * @param options.geometry - The Geometry instance with the attribute. + * @param [options.length = 10000.0] - The length of each line segment in meters. This can be negative to point the vector in the opposite direction. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The model matrix that transforms to transform the geometry from model to world coordinates. + * @returns A new Primitive instance with geometry for the vectors. + */ +export function createTangentSpaceDebugPrimitive(options: { + geometry: Geometry; + length?: number; + modelMatrix?: Matrix4; +}): Primitive; + +/** + * Creates an {@link IonImageryProvider} instance for ion's default global base imagery layer, currently Bing Maps. + * @example + * // Create Cesium World Terrain with default settings +var viewer = new Cesium.Viewer('cesiumContainer', { + imageryProvider : Cesium.createWorldImagery(); +}); + * @example + * // Create Cesium World Terrain with water and normals. +var viewer = new Cesium.Viewer('cesiumContainer', { + imageryProvider : Cesium.createWorldImagery({ + style: Cesium.IonWorldImageryStyle.AERIAL_WITH_LABELS + }) +}); + * @param [options] - Object with the following properties: + * @param [options.style = IonWorldImageryStyle] - The style of base imagery, only AERIAL, AERIAL_WITH_LABELS, and ROAD are currently supported. + */ +export function createWorldImagery(options?: { + style?: IonWorldImageryStyle; +}): IonImageryProvider; + +/** + * The credit display is responsible for displaying credits on screen. + * @example + * var creditDisplay = new Cesium.CreditDisplay(creditContainer); + * @param container - The HTML element where credits will be displayed + * @param [delimiter = ' • '] - The string to separate text credits + * @param [viewport = document.body] - The HTML element that will contain the credits popup + */ +export class CreditDisplay { + constructor(container: HTMLElement, delimiter?: string, viewport?: HTMLElement); + /** + * The HTML element where credits will be displayed. + */ + container: HTMLElement; + /** + * Adds a credit to the list of current credits to be displayed in the credit container + * @param credit - The credit to display + */ + addCredit(credit: Credit): void; + /** + * Adds credits that will persist until they are removed + * @param credit - The credit to added to defaults + */ + addDefaultCredit(credit: Credit): void; + /** + * Removes a default credit + * @param credit - The credit to be removed from defaults + */ + removeDefaultCredit(credit: Credit): void; + /** + * Updates the credit display before a new frame is rendered. + */ + update(): void; + /** + * Resets the credit display to a beginning of frame state, clearing out current credits. + */ + beginFrame(): void; + /** + * Sets the credit display to the end of frame state, displaying credits from the last frame in the credit container. + */ + endFrame(): void; + /** + * Destroys the resources held by this object. Destroying an object allows for deterministic + release of resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + */ + destroy(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Gets or sets the Cesium logo credit. + */ + static cesiumCredit: Credit; +} + +/** + * Determines which triangles, if any, are culled. + */ +export enum CullFace { + /** + * Front-facing triangles are culled. + */ + FRONT = WebGLConstants.FRONT, + /** + * Back-facing triangles are culled. + */ + BACK = WebGLConstants.BACK, + /** + * Both front-facing and back-facing triangles are culled. + */ + FRONT_AND_BACK = WebGLConstants.FRONT_AND_BACK +} + +/** + * Visualizes a vertex attribute by displaying it as a color for debugging. +

+Components for well-known unit-length vectors, i.e., normal, +tangent, and bitangent, are scaled and biased +from [-1.0, 1.0] to (-1.0, 1.0). +

+ * @example + * var primitive = new Cesium.Primitive({ + geometryInstances : // ... + appearance : new Cesium.DebugAppearance({ + attributeName : 'normal' + }) +}); + * @param options - Object with the following properties: + * @param options.attributeName - The name of the attribute to visualize. + * @param [options.perInstanceAttribute = false] - Boolean that determines whether this attribute is a per-instance geometry attribute. + * @param [options.glslDatatype = 'vec3'] - The GLSL datatype of the attribute. Supported datatypes are float, vec2, vec3, and vec4. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class DebugAppearance { + constructor(options: { + attributeName: string; + perInstanceAttribute?: boolean; + glslDatatype?: string; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * This property is part of the {@link Appearance} interface, but is not + used by {@link DebugAppearance} since a fully custom fragment shader is used. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. The full fragment shader + source is built procedurally taking into account the {@link DebugAppearance#material}. + Use {@link DebugAppearance#getFragmentShaderSource} to get the full source. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. + */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed. + */ + readonly closed: boolean; + /** + * The name of the attribute being visualized. + */ + readonly attributeName: string; + /** + * The GLSL datatype of the attribute being visualized. + */ + readonly glslDatatype: string; + /** + * Returns the full GLSL fragment shader source, which for {@link DebugAppearance} is just + {@link DebugAppearance#fragmentShaderSource}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link DebugAppearance#translucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +/** + * Draws the outline of the camera's view frustum. + * @example + * primitives.add(new Cesium.DebugCameraPrimitive({ + camera : camera, + color : Cesium.Color.YELLOW +})); + * @param options - Object with the following properties: + * @param options.camera - The camera. + * @param [options.frustumSplits] - Distances to the near and far planes of the camera frustums. This overrides the camera's frustum near and far values. + * @param [options.color = Color.CYAN] - The color of the debug outline. + * @param [options.updateOnChange = true] - Whether the primitive updates when the underlying camera changes. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.id] - A user-defined object to return when the instance is picked with {@link Scene#pick}. + */ +export class DebugCameraPrimitive { + constructor(options: { + camera: Camera; + frustumSplits?: number[]; + color?: Color; + updateOnChange?: boolean; + show?: boolean; + id?: any; + }); + /** + * Determines if this primitive will be shown. + */ + show: boolean; + /** + * User-defined value returned when the primitive is picked. + */ + id: any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * p = p && p.destroy(); + */ + destroy(): void; +} + +/** + * Draws the axes of a reference frame defined by a matrix that transforms to world +coordinates, i.e., Earth's WGS84 coordinates. The most prominent example is +a primitives modelMatrix. +

+The X axis is red; Y is green; and Z is blue. +

+

+This is for debugging only; it is not optimized for production use. +

+ * @example + * primitives.add(new Cesium.DebugModelMatrixPrimitive({ + modelMatrix : primitive.modelMatrix, // primitive to debug + length : 100000.0, + width : 10.0 +})); + * @param [options] - Object with the following properties: + * @param [options.length = 10000000.0] - The length of the axes in meters. + * @param [options.width = 2.0] - The width of the axes in pixels. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.id] - A user-defined object to return when the instance is picked with {@link Scene#pick} + */ +export class DebugModelMatrixPrimitive { + constructor(options?: { + length?: number; + width?: number; + modelMatrix?: Matrix4; + show?: boolean; + id?: any; + }); + /** + * The length of the axes in meters. + */ + length: number; + /** + * The width of the axes in pixels. + */ + width: number; + /** + * Determines if this primitive will be shown. + */ + show: boolean; + /** + * The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize. + */ + modelMatrix: Matrix4; + /** + * User-defined value returned when the primitive is picked. + */ + id: any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * p = p && p.destroy(); + */ + destroy(): void; +} + +/** + * Determines the function used to compare two depths for the depth test. + */ +export enum DepthFunction { + /** + * The depth test never passes. + */ + NEVER = WebGLConstants.NEVER, + /** + * The depth test passes if the incoming depth is less than the stored depth. + */ + LESS = WebGLConstants.LESS, + /** + * The depth test passes if the incoming depth is equal to the stored depth. + */ + EQUAL = WebGLConstants.EQUAL, + /** + * The depth test passes if the incoming depth is less than or equal to the stored depth. + */ + LESS_OR_EQUAL = WebGLConstants.LEQUAL, + /** + * The depth test passes if the incoming depth is greater than the stored depth. + */ + GREATER = WebGLConstants.GREATER, + /** + * The depth test passes if the incoming depth is not equal to the stored depth. + */ + NOT_EQUAL = WebGLConstants.NOTEQUAL, + /** + * The depth test passes if the incoming depth is greater than or equal to the stored depth. + */ + GREATER_OR_EQUAL = WebGLConstants.GEQUAL, + /** + * The depth test always passes. + */ + ALWAYS = WebGLConstants.ALWAYS +} + +/** + * A light that gets emitted in a single direction from infinitely far away. + * @param options - Object with the following properties: + * @param options.direction - The direction in which light gets emitted. + * @param [options.color = Color.WHITE] - The color of the light. + * @param [options.intensity = 1.0] - The intensity of the light. + */ +export class DirectionalLight { + constructor(options: { + direction: Cartesian3; + color?: Color; + intensity?: number; + }); + /** + * The direction in which light gets emitted. + */ + direction: Cartesian3; + /** + * The color of the light. + */ + color: Color; + /** + * The intensity of the light. + */ + intensity: number; +} + +/** + * A policy for discarding tile images that contain no data (and so aren't actually images). +This policy discards {@link DiscardEmptyTileImagePolicy.EMPTY_IMAGE}, which is +expected to be used in place of any empty tile images by the image loading code. + */ +export class DiscardEmptyTileImagePolicy { + constructor(); + /** + * Determines if the discard policy is ready to process images. + * @returns True if the discard policy is ready to process images; otherwise, false. + */ + isReady(): boolean; + /** + * Given a tile image, decide whether to discard that image. + * @param image - An image to test. + * @returns True if the image should be discarded; otherwise, false. + */ + shouldDiscardImage(image: HTMLImageElement): boolean; + /** + * Default value for representing an empty image. + */ + static readonly EMPTY_IMAGE: HTMLImageElement; +} + +/** + * A policy for discarding tile images that match a known image containing a +"missing" image. + * @param options - Object with the following properties: + * @param options.missingImageUrl - The URL of the known missing image. + * @param options.pixelsToCheck - An array of {@link Cartesian2} pixel positions to + compare against the missing image. + * @param [options.disableCheckIfAllPixelsAreTransparent = false] - If true, the discard check will be disabled + if all of the pixelsToCheck in the missingImageUrl have an alpha value of 0. If false, the + discard check will proceed no matter the values of the pixelsToCheck. + */ +export class DiscardMissingTileImagePolicy { + constructor(options: { + missingImageUrl: Resource | string; + pixelsToCheck: Cartesian2[]; + disableCheckIfAllPixelsAreTransparent?: boolean; + }); + /** + * Determines if the discard policy is ready to process images. + * @returns True if the discard policy is ready to process images; otherwise, false. + */ + isReady(): boolean; + /** + * Given a tile image, decide whether to discard that image. + * @param image - An image to test. + * @returns True if the image should be discarded; otherwise, false. + */ + shouldDiscardImage(image: HTMLImageElement): boolean; +} + +/** + * An appearance for geometry on the surface of the ellipsoid like {@link PolygonGeometry} +and {@link RectangleGeometry}, which supports all materials like {@link MaterialAppearance} +with {@link MaterialAppearance.MaterialSupport.ALL}. However, this appearance requires +fewer vertex attributes since the fragment shader can procedurally compute normal, +tangent, and bitangent. + * @example + * var primitive = new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : new Cesium.PolygonGeometry({ + vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT, + // ... + }) + }), + appearance : new Cesium.EllipsoidSurfaceAppearance({ + material : Cesium.Material.fromType('Stripe') + }) +}); + * @param [options] - Object with the following properties: + * @param [options.flat = false] - When true, flat shading is used in the fragment shader, which means lighting is not taking into account. + * @param [options.faceForward = options.aboveGround] - When true, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}. + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link EllipsoidSurfaceAppearance#renderState} has alpha blending enabled. + * @param [options.aboveGround = false] - When true, the geometry is expected to be on the ellipsoid's surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled. + * @param [options.material = Material.ColorType] - The material used to determine the fragment color. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class EllipsoidSurfaceAppearance { + constructor(options?: { + flat?: boolean; + faceForward?: boolean; + translucent?: boolean; + aboveGround?: boolean; + material?: Material; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * The material used to determine the fragment color. Unlike other {@link EllipsoidSurfaceAppearance} + properties, this is not read-only, so an appearance's material can change on the fly. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. The full fragment shader + source is built procedurally taking into account {@link EllipsoidSurfaceAppearance#material}, + {@link EllipsoidSurfaceAppearance#flat}, and {@link EllipsoidSurfaceAppearance#faceForward}. + Use {@link EllipsoidSurfaceAppearance#getFragmentShaderSource} to get the full source. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. +

+ The render state can be explicitly defined when constructing a {@link EllipsoidSurfaceAppearance} + instance, or it is set implicitly via {@link EllipsoidSurfaceAppearance#translucent} + and {@link EllipsoidSurfaceAppearance#aboveGround}. +

+ */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed so + {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled. + If the viewer enters the geometry, it will not be visible. + */ + readonly closed: boolean; + /** + * The {@link VertexFormat} that this appearance instance is compatible with. + A geometry can have more vertex attributes and still be compatible - at a + potential performance cost - but it can't have less. + */ + readonly vertexFormat: VertexFormat; + /** + * When true, flat shading is used in the fragment shader, + which means lighting is not taking into account. + */ + readonly flat: boolean; + /** + * When true, the fragment shader flips the surface normal + as needed to ensure that the normal faces the viewer to avoid + dark spots. This is useful when both sides of a geometry should be + shaded like {@link WallGeometry}. + */ + readonly faceForward: boolean; + /** + * When true, the geometry is expected to be on the ellipsoid's + surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState} + has backface culling enabled. + */ + readonly aboveGround: boolean; + /** + * The {@link VertexFormat} that all {@link EllipsoidSurfaceAppearance} instances + are compatible with, which requires only position and st + attributes. Other attributes are procedurally computed in the fragment shader. + */ + static readonly VERTEX_FORMAT: VertexFormat; + /** + * Procedurally creates the full GLSL fragment shader source. For {@link EllipsoidSurfaceAppearance}, + this is derived from {@link EllipsoidSurfaceAppearance#fragmentShaderSource}, {@link EllipsoidSurfaceAppearance#flat}, + and {@link EllipsoidSurfaceAppearance#faceForward}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link EllipsoidSurfaceAppearance#translucent} and {@link Material#isTranslucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +/** + * An expression for a style applied to a {@link Cesium3DTileset}. +

+Evaluates an expression defined using the +{@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}. +

+

+Implements the {@link StyleExpression} interface. +

+ * @example + * var expression = new Cesium.Expression('(regExp("^Chest").test(${County})) && (${YearBuilt} >= 1970)'); +expression.evaluate(feature); // returns true or false depending on the feature's properties + * @example + * var expression = new Cesium.Expression('(${Temperature} > 90) ? color("red") : color("white")'); +expression.evaluateColor(feature, result); // returns a Cesium.Color object + * @param [expression] - The expression defined using the 3D Tiles Styling language. + * @param [defines] - Defines in the style. + */ +export class Expression { + constructor(expression?: string, defines?: any); + /** + * Gets the expression defined in the 3D Tiles Styling language. + */ + readonly expression: string; + /** + * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of + the expression in the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language} + is of type Boolean, Number, or String, the corresponding JavaScript + primitive type will be returned. If the result is a RegExp, a Javascript RegExp + object will be returned. If the result is a Cartesian2, Cartesian3, or Cartesian4, + a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the result argument is + a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned. + * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object onto which to store the result. + * @returns The result of evaluating the expression. + */ + evaluate(feature: Cesium3DTileFeature, result?: any): boolean | number | string | RegExp | Cartesian2 | Cartesian3 | Cartesian4 | Color; + /** + * Evaluates the result of a Color expression, optionally using the provided feature's properties. +

+ This is equivalent to {@link Expression#evaluate} but always returns a {@link Color} object. +

+ * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object in which to store the result + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + evaluateColor(feature: Cesium3DTileFeature, result?: Color): Color; +} + +/** + * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional +performance improvements by rendering less geometry and dispatching less terrain requests. + */ +export class Fog { + constructor(); + /** + * true if fog is enabled, false otherwise. + */ + enabled: boolean; + /** + * A scalar that determines the density of the fog. Terrain that is in full fog are culled. + The density of the fog increases as this number approaches 1.0 and becomes less dense as it approaches zero. + The more dense the fog is, the more aggressively the terrain is culled. For example, if the camera is a height of + 1000.0m above the ellipsoid, increasing the value to 3.0e-3 will cause many tiles close to the viewer be culled. + Decreasing the value will push the fog further from the viewer, but decrease performance as more of the terrain is rendered. + */ + density: number; + /** + * A factor used to increase the screen space error of terrain tiles when they are partially in fog. The effect is to reduce + the number of terrain tiles requested for rendering. If set to zero, the feature will be disabled. If the value is increased + for mountainous regions, less tiles will need to be requested, but the terrain meshes near the horizon may be a noticeably + lower resolution. If the value is increased in a relatively flat area, there will be little noticeable change on the horizon. + */ + screenSpaceErrorFactor: number; + /** + * The minimum brightness of the fog color from lighting. A value of 0.0 can cause the fog to be completely black. A value of 1.0 will not affect + the brightness at all. + */ + minimumBrightness: number; +} + +/** + * Monitors the frame rate (frames per second) in a {@link Scene} and raises an event if the frame rate is +lower than a threshold. Later, if the frame rate returns to the required level, a separate event is raised. +To avoid creating multiple FrameRateMonitors for a single {@link Scene}, use {@link FrameRateMonitor.fromScene} +instead of constructing an instance explicitly. + * @param [options] - Object with the following properties: + * @param options.scene - The Scene instance for which to monitor performance. + * @param [options.samplingWindow = 5.0] - The length of the sliding window over which to compute the average frame rate, in seconds. + * @param [options.quietPeriod = 2.0] - The length of time to wait at startup and each time the page becomes visible (i.e. when the user + switches back to the tab) before starting to measure performance, in seconds. + * @param [options.warmupPeriod = 5.0] - The length of the warmup period, in seconds. During the warmup period, a separate + (usually lower) frame rate is required. + * @param [options.minimumFrameRateDuringWarmup = 4] - The minimum frames-per-second that are required for acceptable performance during + the warmup period. If the frame rate averages less than this during any samplingWindow during the warmupPeriod, the + lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any. + * @param [options.minimumFrameRateAfterWarmup = 8] - The minimum frames-per-second that are required for acceptable performance after + the end of the warmup period. If the frame rate averages less than this during any samplingWindow after the warmupPeriod, the + lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any. + */ +export class FrameRateMonitor { + constructor(options?: { + scene: Scene; + samplingWindow?: number; + quietPeriod?: number; + warmupPeriod?: number; + minimumFrameRateDuringWarmup?: number; + minimumFrameRateAfterWarmup?: number; + }); + /** + * Gets or sets the length of the sliding window over which to compute the average frame rate, in seconds. + */ + samplingWindow: number; + /** + * Gets or sets the length of time to wait at startup and each time the page becomes visible (i.e. when the user + switches back to the tab) before starting to measure performance, in seconds. + */ + quietPeriod: number; + /** + * Gets or sets the length of the warmup period, in seconds. During the warmup period, a separate + (usually lower) frame rate is required. + */ + warmupPeriod: number; + /** + * Gets or sets the minimum frames-per-second that are required for acceptable performance during + the warmup period. If the frame rate averages less than this during any samplingWindow during the warmupPeriod, the + lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any. + */ + minimumFrameRateDuringWarmup: number; + /** + * Gets or sets the minimum frames-per-second that are required for acceptable performance after + the end of the warmup period. If the frame rate averages less than this during any samplingWindow after the warmupPeriod, the + lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any. + */ + minimumFrameRateAfterWarmup: number; + /** + * The default frame rate monitoring settings. These settings are used when {@link FrameRateMonitor.fromScene} + needs to create a new frame rate monitor, and for any settings that are not passed to the + {@link FrameRateMonitor} constructor. + */ + static defaultSettings: any; + /** + * Gets the {@link FrameRateMonitor} for a given scene. If the scene does not yet have + a {@link FrameRateMonitor}, one is created with the {@link FrameRateMonitor.defaultSettings}. + * @param scene - The scene for which to get the {@link FrameRateMonitor}. + * @returns The scene's {@link FrameRateMonitor}. + */ + static fromScene(scene: Scene): FrameRateMonitor; + /** + * Gets the {@link Scene} instance for which to monitor performance. + */ + scene: Scene; + /** + * Gets the event that is raised when a low frame rate is detected. The function will be passed + the {@link Scene} instance as its first parameter and the average number of frames per second + over the sampling window as its second parameter. + */ + lowFrameRate: Event; + /** + * Gets the event that is raised when the frame rate returns to a normal level after having been low. + The function will be passed the {@link Scene} instance as its first parameter and the average + number of frames per second over the sampling window as its second parameter. + */ + nominalFrameRate: Event; + /** + * Gets the most recently computed average frames-per-second over the last samplingWindow. + This property may be undefined if the frame rate has not been computed. + */ + lastFramesPerSecond: number; + /** + * Pauses monitoring of the frame rate. To resume monitoring, {@link FrameRateMonitor#unpause} + must be called once for each time this function is called. + */ + pause(): void; + /** + * Resumes monitoring of the frame rate. If {@link FrameRateMonitor#pause} was called + multiple times, this function must be called the same number of times in order to + actually resume monitoring. + */ + unpause(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Unsubscribes this instance from all events it is listening to. + Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + */ + destroy(): void; +} + +/** + * Describes the format in which to request GetFeatureInfo from a Web Map Service (WMS) server. + * @param type - The type of response to expect from a GetFeatureInfo request. Valid + values are 'json', 'xml', 'html', or 'text'. + * @param [format] - The info format to request from the WMS server. This is usually a + MIME type such as 'application/json' or text/xml'. If this parameter is not specified, the provider will request 'json' + using 'application/json', 'xml' using 'text/xml', 'html' using 'text/html', and 'text' using 'text/plain'. + * @param [callback] - A function to invoke with the GetFeatureInfo response from the WMS server + in order to produce an array of picked {@link ImageryLayerFeatureInfo} instances. If this parameter is not specified, + a default function for the type of response is used. + */ +export class GetFeatureInfoFormat { + constructor(type: string, format?: string, callback?: (...params: any[]) => any); +} + +/** + * The globe rendered in the scene, including its terrain ({@link Globe#terrainProvider}) +and imagery layers ({@link Globe#imageryLayers}). Access the globe using {@link Scene#globe}. + * @param [ellipsoid = Ellipsoid.WGS84] - Determines the size and shape of the +globe. + */ +export class Globe { + constructor(ellipsoid?: Ellipsoid); + /** + * Determines if the globe will be shown. + */ + show: boolean; + /** + * The maximum screen-space error used to drive level-of-detail refinement. Higher + values will provide better performance but lower visual quality. + */ + maximumScreenSpaceError: number; + /** + * The size of the terrain tile cache, expressed as a number of tiles. Any additional + tiles beyond this number will be freed, as long as they aren't needed for rendering + this frame. A larger number will consume more memory but will show detail faster + when, for example, zooming out and then back in. + */ + tileCacheSize: number; + /** + * Gets or sets the number of loading descendant tiles that is considered "too many". + If a tile has too many loading descendants, that tile will be loaded and rendered before any of + its descendants are loaded and rendered. This means more feedback for the user that something + is happening at the cost of a longer overall load time. Setting this to 0 will cause each + tile level to be loaded successively, significantly increasing load time. Setting it to a large + number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make + detail appear all at once after a long wait. + */ + loadingDescendantLimit: number; + /** + * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded. + Setting this to true optimizes the zoom-out experience and provides more detail in + newly-exposed areas when panning. The down side is that it requires loading more tiles. + */ + preloadAncestors: boolean; + /** + * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded. + Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even + if they are culled. Setting this to true may provide a better panning experience at the + cost of loading more tiles. + */ + preloadSiblings: boolean; + /** + * The color to use to highlight terrain fill tiles. If undefined, fill tiles are not + highlighted at all. The alpha value is used to alpha blend with the tile's + actual color. Because terrain fill tiles do not represent the actual terrain surface, + it may be useful in some applications to indicate visually that they are not to be trusted. + */ + fillHighlightColor: Color; + /** + * Enable lighting the globe with the scene's light source. + */ + enableLighting: boolean; + /** + * Enable dynamic lighting effects on atmosphere and fog. This only takes effect + when enableLighting is true. + */ + dynamicAtmosphereLighting: boolean; + /** + * Whether dynamic atmosphere lighting uses the sun direction instead of the scene's + light direction. This only takes effect when enableLighting and + dynamicAtmosphereLighting are true. + */ + dynamicAtmosphereLightingFromSun: boolean; + /** + * Enable the ground atmosphere, which is drawn over the globe when viewed from a distance between lightingFadeInDistance and lightingFadeOutDistance. + */ + showGroundAtmosphere: boolean; + /** + * The distance where everything becomes lit. This only takes effect + when enableLighting or showGroundAtmosphere is true. + */ + lightingFadeOutDistance: number; + /** + * The distance where lighting resumes. This only takes effect + when enableLighting or showGroundAtmosphere is true. + */ + lightingFadeInDistance: number; + /** + * The distance where the darkness of night from the ground atmosphere fades out to a lit ground atmosphere. + This only takes effect when showGroundAtmosphere, enableLighting, and + dynamicAtmosphereLighting are true. + */ + nightFadeOutDistance: number; + /** + * The distance where the darkness of night from the ground atmosphere fades in to an unlit ground atmosphere. + This only takes effect when showGroundAtmosphere, enableLighting, and + dynamicAtmosphereLighting are true. + */ + nightFadeInDistance: number; + /** + * True if an animated wave effect should be shown in areas of the globe + covered by water; otherwise, false. This property is ignored if the + terrainProvider does not provide a water mask. + */ + showWaterEffect: boolean; + /** + * True if primitives such as billboards, polylines, labels, etc. should be depth-tested + against the terrain surface, or false if such primitives should always be drawn on top + of terrain unless they're on the opposite side of the globe. The disadvantage of depth + testing primitives against terrain is that slight numerical noise or terrain level-of-detail + switched can sometimes make a primitive that should be on the surface disappear underneath it. + */ + depthTestAgainstTerrain: boolean; + /** + * Determines whether the globe casts or receives shadows from light sources. Setting the globe + to cast shadows may impact performance since the terrain is rendered again from the light's perspective. + Currently only terrain that is in view casts shadows. By default the globe does not cast shadows. + */ + shadows: ShadowMode; + /** + * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A hue shift of 1.0 indicates a complete rotation of the hues available. + */ + atmosphereHueShift: number; + /** + * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A saturation shift of -1.0 is monochrome. + */ + atmosphereSaturationShift: number; + /** + * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A brightness shift of -1.0 is complete darkness, which will let space show through. + */ + atmosphereBrightnessShift: number; + /** + * Whether to show terrain skirts. Terrain skirts are geometry extending downwards from a tile's edges used to hide seams between neighboring tiles. + Skirts are always hidden when the camera is underground or translucency is enabled. + */ + showSkirts: boolean; + /** + * Whether to cull back-facing terrain. Back faces are not culled when the camera is underground or translucency is enabled. + */ + backFaceCulling: boolean; + /** + * Gets an ellipsoid describing the shape of this globe. + */ + ellipsoid: Ellipsoid; + /** + * Gets the collection of image layers that will be rendered on this globe. + */ + imageryLayers: ImageryLayerCollection; + /** + * Gets an event that's raised when an imagery layer is added, shown, hidden, moved, or removed. + */ + readonly imageryLayersUpdatedEvent: Event; + /** + * Returns true when the tile load queue is empty, false otherwise. When the load queue is empty, + all terrain and imagery for the current view have been loaded. + */ + readonly tilesLoaded: boolean; + /** + * Gets or sets the color of the globe when no imagery is available. + */ + baseColor: Color; + /** + * A property specifying a {@link ClippingPlaneCollection} used to selectively disable rendering on the outside of each plane. + */ + clippingPlanes: ClippingPlaneCollection; + /** + * A property specifying a {@link Rectangle} used to limit globe rendering to a cartographic area. + Defaults to the maximum extent of cartographic coordinates. + */ + cartographicLimitRectangle: Rectangle; + /** + * The normal map to use for rendering waves in the ocean. Setting this property will + only have an effect if the configured terrain provider includes a water mask. + */ + oceanNormalMapUrl: string; + /** + * The terrain provider providing surface geometry for this globe. + */ + terrainProvider: TerrainProvider; + /** + * Gets an event that's raised when the terrain provider is changed + */ + readonly terrainProviderChanged: Event; + /** + * Gets an event that's raised when the length of the tile load queue has changed since the last render frame. When the load queue is empty, + all terrain and imagery for the current view have been loaded. The event passes the new length of the tile load queue. + */ + tileLoadProgressEvent: Event; + /** + * Gets or sets the material appearance of the Globe. This can be one of several built-in {@link Material} objects or a custom material, scripted with + {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}. + */ + material: Material; + /** + * The color to render the back side of the globe when the camera is underground or the globe is translucent, + blended with the globe color based on the camera's distance. +

+ To disable underground coloring, set undergroundColor to undefined. + */ + undergroundColor: Color; + /** + * Gets or sets the near and far distance for blending {@link Globe#undergroundColor} with the globe color. + The alpha will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the alpha remains clamped to the nearest bound. If undefined, + the underground color will not be blended with the globe color. +

+ When the camera is above the ellipsoid the distance is computed from the nearest + point on the ellipsoid instead of the camera's position. + */ + undergroundColorAlphaByDistance: NearFarScalar; + /** + * Properties for controlling globe translucency. + */ + translucency: GlobeTranslucency; + /** + * Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates. + * @example + * // find intersection of ray through a pixel and the globe + var ray = viewer.camera.getPickRay(windowCoordinates); + var intersection = globe.pick(ray, scene); + * @param ray - The ray to test for intersection. + * @param scene - The scene. + * @param [result] - The object onto which to store the result. + * @returns The intersection or undefined if none was found. + */ + pick(ray: Ray, scene: Scene, result?: Cartesian3): Cartesian3 | undefined; + /** + * Get the height of the surface at a given cartographic. + * @param cartographic - The cartographic for which to find the height. + * @returns The height of the cartographic or undefined if it could not be found. + */ + getHeight(cartographic: Cartographic): number | undefined; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * globe = globe && globe.destroy(); + */ + destroy(): void; +} + +/** + * Properties for controlling globe translucency. + */ +export class GlobeTranslucency { + constructor(); + /** + * When true, the globe is rendered as a translucent surface. +

+ The alpha is computed by blending {@link Globe#material}, {@link Globe#imageryLayers}, + and {@link Globe#baseColor}, all of which may contain translucency, and then multiplying by + {@link GlobeTranslucency#frontFaceAlpha} and {@link GlobeTranslucency#frontFaceAlphaByDistance} for front faces and + {@link GlobeTranslucency#backFaceAlpha} and {@link GlobeTranslucency#backFaceAlphaByDistance} for back faces. + When the camera is underground back faces and front faces are swapped, i.e. back-facing geometry + is considered front facing. +

+ Translucency is disabled by default. + */ + enabled: boolean; + /** + * A constant translucency to apply to front faces of the globe. +

+ {@link GlobeTranslucency#enabled} must be set to true for this option to take effect. + * @example + * // Set front face translucency to 0.5. + globe.translucency.frontFaceAlpha = 0.5; + globe.translucency.enabled = true; + */ + frontFaceAlpha: number; + /** + * Gets or sets near and far translucency properties of front faces of the globe based on the distance to the camera. + The translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the translucency remains clamped to the nearest bound. If undefined, + frontFaceAlphaByDistance will be disabled. +

+ {@link GlobeTranslucency#enabled} must be set to true for this option to take effect. + * @example + * // Example 1. + // Set front face translucency to 0.5 when the + // camera is 1500 meters from the surface and 1.0 + // as the camera distance approaches 8.0e6 meters. + globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0); + globe.translucency.enabled = true; + * @example + * // Example 2. + // Disable front face translucency by distance + globe.translucency.frontFaceAlphaByDistance = undefined; + */ + frontFaceAlphaByDistance: NearFarScalar; + /** + * A constant translucency to apply to back faces of the globe. +

+ {@link GlobeTranslucency#enabled} must be set to true for this option to take effect. + * @example + * // Set back face translucency to 0.5. + globe.translucency.backFaceAlpha = 0.5; + globe.translucency.enabled = true; + */ + backFaceAlpha: number; + /** + * Gets or sets near and far translucency properties of back faces of the globe based on the distance to the camera. + The translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the translucency remains clamped to the nearest bound. If undefined, + backFaceAlphaByDistance will be disabled. +

+ {@link GlobeTranslucency#enabled} must be set to true for this option to take effect. + * @example + * // Example 1. + // Set back face translucency to 0.5 when the + // camera is 1500 meters from the surface and 1.0 + // as the camera distance approaches 8.0e6 meters. + globe.translucency.backFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0); + globe.translucency.enabled = true; + * @example + * // Example 2. + // Disable back face translucency by distance + globe.translucency.backFaceAlphaByDistance = undefined; + */ + backFaceAlphaByDistance: NearFarScalar; + /** + * A property specifying a {@link Rectangle} used to limit translucency to a cartographic area. + Defaults to the maximum extent of cartographic coordinates. + */ + rectangle: Rectangle; +} + +export namespace GoogleEarthEnterpriseImageryProvider { + /** + * Initialization options for the GoogleEarthEnterpriseImageryProvider constructor + * @property url - The url of the Google Earth Enterprise server hosting the imagery. + * @property metadata - A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseTerrainProvider. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [tileDiscardPolicy] - The policy that determines if a tile + is invalid and should be discarded. If this value is not specified, a default + is to discard tiles that fail to download. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type ConstructorOptions = { + url: Resource | string; + metadata: GoogleEarthEnterpriseMetadata; + ellipsoid?: Ellipsoid; + tileDiscardPolicy?: TileDiscardPolicy; + credit?: Credit | string; + }; +} + +/** + * Provides tiled imagery using the Google Earth Enterprise REST API. + +Notes: This provider is for use with the 3D Earth API of Google Earth Enterprise, + {@link GoogleEarthEnterpriseMapsProvider} should be used with 2D Maps API. + * @example + * var geeMetadata = new GoogleEarthEnterpriseMetadata('http://www.earthenterprise.org/3d'); +var gee = new Cesium.GoogleEarthEnterpriseImageryProvider({ + metadata : geeMetadata +}); + * @param options - Object describing initialization options + */ +export class GoogleEarthEnterpriseImageryProvider { + constructor(options: GoogleEarthEnterpriseImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the name of the Google Earth Enterprise server url hosting the imagery. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage + and texture upload time. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +export namespace GoogleEarthEnterpriseMapsProvider { + /** + * Initialization options for the GoogleEarthEnterpriseMapsProvider constructor + * @property url - The url of the Google Earth server hosting the imagery. + * @property channel - The channel (id) to be used when requesting data from the server. + The channel number can be found by looking at the json file located at: + earth.localdomain/default_map/query?request=Json&vars=geeServerDefs The /default_map path may + differ depending on your Google Earth Enterprise server configuration. Look for the "id" that + is associated with a "ImageryMaps" requestType. There may be more than one id available. + Example: + { + layers: [ + { + id: 1002, + requestType: "ImageryMaps" + }, + { + id: 1007, + requestType: "VectorMapsRaster" + } + ] + } + * @property [path = "/default_map"] - The path of the Google Earth server hosting the imagery. + * @property [maximumLevel] - The maximum level-of-detail supported by the Google Earth + Enterprise server, or undefined if there is no limit. + * @property [tileDiscardPolicy] - The policy that determines if a tile + is invalid and should be discarded. To ensure that no tiles are discarded, construct and pass + a {@link NeverTileDiscardPolicy} for this parameter. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + */ + type ConstructorOptions = { + url: Resource | string; + channel: number; + path?: string; + maximumLevel?: number; + tileDiscardPolicy?: TileDiscardPolicy; + ellipsoid?: Ellipsoid; + }; +} + +/** + * Provides tiled imagery using the Google Earth Imagery API. + +Notes: This imagery provider does not work with the public Google Earth servers. It works with the + Google Earth Enterprise Server. + + By default the Google Earth Enterprise server does not set the + {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} headers. You can either + use a proxy server which adds these headers, or in the /opt/google/gehttpd/conf/gehttpd.conf + and add the 'Header set Access-Control-Allow-Origin "*"' option to the '<Directory />' and + '<Directory "/opt/google/gehttpd/htdocs">' directives. + + This provider is for use with 2D Maps API as part of Google Earth Enterprise. For 3D Earth API uses, it + is necessary to use {@link GoogleEarthEnterpriseImageryProvider} + * @example + * var google = new Cesium.GoogleEarthEnterpriseMapsProvider({ + url : 'https://earth.localdomain', + channel : 1008 +}); + * @param options - Object describing initialization options + */ +export class GoogleEarthEnterpriseMapsProvider { + constructor(options: GoogleEarthEnterpriseMapsProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the Google Earth MapServer. + */ + readonly url: string; + /** + * Gets the url path of the data on the Google Earth server. + */ + readonly path: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the imagery channel (id) currently being used. + */ + readonly channel: number; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the version of the data used by this provider. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly version: number; + /** + * Gets the type of data that is being requested from the provider. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly requestType: string; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; + /** + * Gets or sets the URL to the Google Earth logo for display in the credit. + */ + static logoUrl: string; +} + +export namespace GridImageryProvider { + /** + * Initialization options for the GridImageryProvider constructor + * @property [tilingScheme = new GeographicTilingScheme()] - The tiling scheme for which to draw tiles. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [cells = 8] - The number of grids cells. + * @property [color = Color(1.0, 1.0, 1.0, 0.4)] - The color to draw grid lines. + * @property [glowColor = Color(0.0, 1.0, 0.0, 0.05)] - The color to draw glow for grid lines. + * @property [glowWidth = 6] - The width of lines used for rendering the line glow effect. + * @property [backgroundColor = Color(0.0, 0.5, 0.0, 0.2)] - Background fill color. + * @property [tileWidth = 256] - The width of the tile for level-of-detail selection purposes. + * @property [tileHeight = 256] - The height of the tile for level-of-detail selection purposes. + * @property [canvasSize = 256] - The size of the canvas used for rendering. + */ + type ConstructorOptions = { + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + cells?: number; + color?: Color; + glowColor?: Color; + glowWidth?: number; + backgroundColor?: Color; + tileWidth?: number; + tileHeight?: number; + canvasSize?: number; + }; +} + +/** + * An {@link ImageryProvider} that draws a wireframe grid on every tile with controllable background and glow. +May be useful for custom rendering effects or debugging terrain. + * @param options - Object describing initialization options + */ +export class GridImageryProvider { + constructor(options: GridImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link GridImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Draws a grid of lines into a canvas. + */ + _drawGrid(): void; + /** + * Render a grid into a canvas with background and glow + */ + _createGridCanvas(): void; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link GridImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * A GroundPolylinePrimitive represents a polyline draped over the terrain or 3D Tiles in the {@link Scene}. +

+Only to be used with GeometryInstances containing {@link GroundPolylineGeometry}. +

+ * @example + * // 1. Draw a polyline on terrain with a basic color material + +var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.GroundPolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -112.1340164450331, 36.05494287836128, + -112.08821010582645, 36.097804071380715 + ]), + width : 4.0 + }), + id : 'object returned when this instance is picked and to get/set per-instance attributes' +}); + +scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({ + geometryInstances : instance, + appearance : new Cesium.PolylineMaterialAppearance() +})); + +// 2. Draw a looped polyline on terrain with per-instance color and a distance display condition. +// Distance display conditions for polylines on terrain are based on an approximate terrain height +// instead of true terrain height. + +var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.GroundPolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -112.1340164450331, 36.05494287836128, + -112.08821010582645, 36.097804071380715, + -112.13296079730024, 36.168769146801104 + ]), + loop : true, + width : 4.0 + }), + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('green').withAlpha(0.7)), + distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(1000, 30000) + }, + id : 'object returned when this instance is picked and to get/set per-instance attributes' +}); + +scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({ + geometryInstances : instance, + appearance : new Cesium.PolylineColorAppearance() +})); + * @param [options] - Object with the following properties: + * @param [options.geometryInstances] - GeometryInstances containing GroundPolylineGeometry + * @param [options.appearance] - The Appearance used to render the polyline. Defaults to a white color {@link Material} on a {@link PolylineMaterialAppearance}. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.interleave = false] - When true, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time. + * @param [options.releaseGeometryInstances = true] - When true, the primitive does not keep a reference to the input geometryInstances to save memory. + * @param [options.allowPicking = true] - When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + * @param [options.asynchronous = true] - Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first. + * @param [options.classificationType = ClassificationType.BOTH] - Determines whether terrain, 3D Tiles or both will be classified. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.debugShowShadowVolume = false] - For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be true on creation to have effect. + */ +export class GroundPolylinePrimitive { + constructor(options?: { + geometryInstances?: any[] | GeometryInstance; + appearance?: Appearance; + show?: boolean; + interleave?: boolean; + releaseGeometryInstances?: boolean; + allowPicking?: boolean; + asynchronous?: boolean; + classificationType?: ClassificationType; + debugShowBoundingVolume?: boolean; + debugShowShadowVolume?: boolean; + }); + /** + * The geometry instances rendered with this primitive. This may + be undefined if options.releaseGeometryInstances + is true when the primitive is constructed. +

+ Changing this property after the primitive is rendered has no effect. +

+ */ + readonly geometryInstances: any[] | GeometryInstance; + /** + * The {@link Appearance} used to shade this primitive. Each geometry + instance is shaded with the same appearance. Some appearances, like + {@link PolylineColorAppearance} allow giving each instance unique + properties. + */ + appearance: Appearance; + /** + * Determines if the primitive will be shown. This affects all geometry + instances in the primitive. + */ + show: boolean; + /** + * Determines whether terrain, 3D Tiles or both will be classified. + */ + classificationType: ClassificationType; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance. + */ + readonly interleave: boolean; + /** + * When true, the primitive does not keep a reference to the input geometryInstances to save memory. + */ + readonly releaseGeometryInstances: boolean; + /** + * When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + */ + readonly allowPicking: boolean; + /** + * Determines if the geometry instances will be created and batched on a web worker. + */ + readonly asynchronous: boolean; + /** + * Determines if the primitive is complete and ready to render. If this property is + true, the primitive will be rendered the next time that {@link GroundPolylinePrimitive#update} + is called. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves when the primitive is ready to render. + */ + readonly readyPromise: Promise; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ If true, draws the shadow volume for each geometry in the primitive. +

+ */ + readonly debugShowShadowVolume: boolean; + /** + * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the + GroundPolylinePrimitive synchronously. + * @returns A promise that will resolve once the terrain heights have been loaded. + */ + static initializeTerrainHeights(): Promise; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns the modifiable per-instance attributes for a {@link GeometryInstance}. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA); + attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true); + * @param id - The id of the {@link GeometryInstance}. + * @returns The typed array in the attribute's format or undefined if the is no instance with id. + */ + getGeometryInstanceAttributes(id: any): any; + /** + * Checks if the given Scene supports GroundPolylinePrimitives. + GroundPolylinePrimitives require support for the WEBGL_depth_texture extension. + * @param scene - The current scene. + * @returns Whether or not the current scene supports GroundPolylinePrimitives. + */ + static isSupported(scene: Scene): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * e = e && e.destroy(); + */ + destroy(): void; +} + +/** + * A ground primitive represents geometry draped over terrain or 3D Tiles in the {@link Scene}. +

+A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including +{@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement, +and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix +and match most of them and add a new geometry or appearance independently of each other. +

+

+Support for the WEBGL_depth_texture extension is required to use GeometryInstances with different PerInstanceColors +or materials besides PerInstanceColorAppearance. +

+

+Textured GroundPrimitives were designed for notional patterns and are not meant for precisely mapping +textures to terrain - for that use case, use {@link SingleTileImageryProvider}. +

+

+For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there +will be rendering artifacts for some viewing angles. +

+

+Valid geometries are {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry}. +

+ * @example + * // Example 1: Create primitive with a single instance +var rectangleInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.RectangleGeometry({ + rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0) + }), + id : 'rectangle', + attributes : { + color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5) + } +}); +scene.primitives.add(new Cesium.GroundPrimitive({ + geometryInstances : rectangleInstance +})); + +// Example 2: Batch instances +var color = new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5); // Both instances must have the same color. +var rectangleInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.RectangleGeometry({ + rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0) + }), + id : 'rectangle', + attributes : { + color : color + } +}); +var ellipseInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.EllipseGeometry({ + center : Cesium.Cartesian3.fromDegrees(-105.0, 40.0), + semiMinorAxis : 300000.0, + semiMajorAxis : 400000.0 + }), + id : 'ellipse', + attributes : { + color : color + } +}); +scene.primitives.add(new Cesium.GroundPrimitive({ + geometryInstances : [rectangleInstance, ellipseInstance] +})); + * @param [options] - Object with the following properties: + * @param [options.geometryInstances] - The geometry instances to render. + * @param [options.appearance] - The appearance used to render the primitive. Defaults to a flat PerInstanceColorAppearance when GeometryInstances have a color attribute. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.vertexCacheOptimize = false] - When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + * @param [options.interleave = false] - When true, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time. + * @param [options.compressVertices = true] - When true, the geometry vertices are compressed, which will save memory. + * @param [options.releaseGeometryInstances = true] - When true, the primitive does not keep a reference to the input geometryInstances to save memory. + * @param [options.allowPicking = true] - When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + * @param [options.asynchronous = true] - Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first. + * @param [options.classificationType = ClassificationType.BOTH] - Determines whether terrain, 3D Tiles or both will be classified. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.debugShowShadowVolume = false] - For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be true on + creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be false. + */ +export class GroundPrimitive { + constructor(options?: { + geometryInstances?: any[] | GeometryInstance; + appearance?: Appearance; + show?: boolean; + vertexCacheOptimize?: boolean; + interleave?: boolean; + compressVertices?: boolean; + releaseGeometryInstances?: boolean; + allowPicking?: boolean; + asynchronous?: boolean; + classificationType?: ClassificationType; + debugShowBoundingVolume?: boolean; + debugShowShadowVolume?: boolean; + }); + /** + * The {@link Appearance} used to shade this primitive. Each geometry + instance is shaded with the same appearance. Some appearances, like + {@link PerInstanceColorAppearance} allow giving each instance unique + properties. + */ + appearance: Appearance; + /** + * The geometry instances rendered with this primitive. This may + be undefined if options.releaseGeometryInstances + is true when the primitive is constructed. +

+ Changing this property after the primitive is rendered has no effect. +

+ */ + readonly geometryInstances: any[] | GeometryInstance; + /** + * Determines if the primitive will be shown. This affects all geometry + instances in the primitive. + */ + show: boolean; + /** + * Determines whether terrain, 3D Tiles or both will be classified. + */ + classificationType: ClassificationType; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the shadow volume for each geometry in the primitive. +

+ */ + debugShowShadowVolume: boolean; + /** + * When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + */ + readonly vertexCacheOptimize: boolean; + /** + * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance. + */ + readonly interleave: boolean; + /** + * When true, the primitive does not keep a reference to the input geometryInstances to save memory. + */ + readonly releaseGeometryInstances: boolean; + /** + * When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + */ + readonly allowPicking: boolean; + /** + * Determines if the geometry instances will be created and batched on a web worker. + */ + readonly asynchronous: boolean; + /** + * When true, geometry vertices are compressed, which will save memory. + */ + readonly compressVertices: boolean; + /** + * Determines if the primitive is complete and ready to render. If this property is + true, the primitive will be rendered the next time that {@link GroundPrimitive#update} + is called. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves when the primitive is ready to render. + */ + readonly readyPromise: Promise; + /** + * Determines if GroundPrimitive rendering is supported. + * @param scene - The scene. + * @returns true if GroundPrimitives are supported; otherwise, returns false + */ + static isSupported(scene: Scene): boolean; + /** + * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the + GroundPrimitive synchronously. + * @returns A promise that will resolve once the terrain heights have been loaded. + */ + static initializeTerrainHeights(): Promise; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns the modifiable per-instance attributes for a {@link GeometryInstance}. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA); + attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true); + * @param id - The id of the {@link GeometryInstance}. + * @returns The typed array in the attribute's format or undefined if the is no instance with id. + */ + getGeometryInstanceAttributes(id: any): any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * e = e && e.destroy(); + */ + destroy(): void; + /** + * Checks if the given Scene supports materials on GroundPrimitives. + Materials on GroundPrimitives require support for the WEBGL_depth_texture extension. + * @param scene - The current scene. + * @returns Whether or not the current scene supports materials on GroundPrimitives. + */ + static supportsMaterials(scene: Scene): boolean; +} + +/** + * Represents the position relative to the terrain. + */ +export enum HeightReference { + /** + * The position is absolute. + */ + NONE = 0, + /** + * The position is clamped to the terrain. + */ + CLAMP_TO_GROUND = 1, + /** + * The position height is the height above the terrain. + */ + RELATIVE_TO_GROUND = 2 +} + +/** + * The horizontal location of an origin relative to an object, e.g., a {@link Billboard} +or {@link Label}. For example, setting the horizontal origin to LEFT +or RIGHT will display a billboard to the left or right (in screen space) +of the anchor position. +

+
+
+
+ */ +export enum HorizontalOrigin { + /** + * The origin is at the horizontal center of the object. + */ + CENTER = 0, + /** + * The origin is on the left side of the object. + */ + LEFT = 1, + /** + * The origin is on the right side of the object. + */ + RIGHT = -1 +} + +/** + * An imagery layer that displays tiled image data from a single imagery provider +on a {@link Globe}. + * @param imageryProvider - The imagery provider to use. + * @param [options] - Object with the following properties: + * @param [options.rectangle = imageryProvider.rectangle] - The rectangle of the layer. This rectangle + can limit the visible portion of the imagery provider. + * @param [options.alpha = 1.0] - The alpha blending value of this layer, from 0.0 to 1.0. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the alpha is required, and it is expected to return + the alpha value to use for the tile. + * @param [options.nightAlpha = 1.0] - The alpha blending value of this layer on the night side of the globe, from 0.0 to 1.0. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the alpha is required, and it is expected to return + the alpha value to use for the tile. This only takes effect when enableLighting is true. + * @param [options.dayAlpha = 1.0] - The alpha blending value of this layer on the day side of the globe, from 0.0 to 1.0. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the alpha is required, and it is expected to return + the alpha value to use for the tile. This only takes effect when enableLighting is true. + * @param [options.brightness = 1.0] - The brightness of this layer. 1.0 uses the unmodified imagery + color. Less than 1.0 makes the imagery darker while greater than 1.0 makes it brighter. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the brightness is required, and it is expected to return + the brightness value to use for the tile. The function is executed for every + frame and for every tile, so it must be fast. + * @param [options.contrast = 1.0] - The contrast of this layer. 1.0 uses the unmodified imagery color. + Less than 1.0 reduces the contrast while greater than 1.0 increases it. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the contrast is required, and it is expected to return + the contrast value to use for the tile. The function is executed for every + frame and for every tile, so it must be fast. + * @param [options.hue = 0.0] - The hue of this layer. 0.0 uses the unmodified imagery color. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates + of the imagery tile for which the hue is required, and it is expected to return + the contrast value to use for the tile. The function is executed for every + frame and for every tile, so it must be fast. + * @param [options.saturation = 1.0] - The saturation of this layer. 1.0 uses the unmodified imagery color. + Less than 1.0 reduces the saturation while greater than 1.0 increases it. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates + of the imagery tile for which the saturation is required, and it is expected to return + the contrast value to use for the tile. The function is executed for every + frame and for every tile, so it must be fast. + * @param [options.gamma = 1.0] - The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color. + This can either be a simple number or a function with the signature + function(frameState, layer, x, y, level). The function is passed the + current frame state, this layer, and the x, y, and level coordinates of the + imagery tile for which the gamma is required, and it is expected to return + the gamma value to use for the tile. The function is executed for every + frame and for every tile, so it must be fast. + * @param [options.splitDirection = ImagerySplitDirection.NONE] - The {@link ImagerySplitDirection} split to apply to this layer. + * @param [options.minificationFilter = TextureMinificationFilter.LINEAR] - The + texture minification filter to apply to this layer. Possible values + are TextureMinificationFilter.LINEAR and + TextureMinificationFilter.NEAREST. + * @param [options.magnificationFilter = TextureMagnificationFilter.LINEAR] - The + texture minification filter to apply to this layer. Possible values + are TextureMagnificationFilter.LINEAR and + TextureMagnificationFilter.NEAREST. + * @param [options.show = true] - True if the layer is shown; otherwise, false. + * @param [options.maximumAnisotropy = maximum supported] - The maximum anisotropy level to use + for texture filtering. If this parameter is not specified, the maximum anisotropy supported + by the WebGL stack will be used. Larger values make the imagery look better in horizon + views. + * @param [options.minimumTerrainLevel] - The minimum terrain level-of-detail at which to show this imagery layer, + or undefined to show it at all levels. Level zero is the least-detailed level. + * @param [options.maximumTerrainLevel] - The maximum terrain level-of-detail at which to show this imagery layer, + or undefined to show it at all levels. Level zero is the least-detailed level. + * @param [options.cutoutRectangle] - Cartographic rectangle for cutting out a portion of this ImageryLayer. + * @param [options.colorToAlpha] - Color to be used as alpha. + * @param [options.colorToAlphaThreshold = 0.004] - Threshold for color-to-alpha. + */ +export class ImageryLayer { + constructor(imageryProvider: ImageryProvider, options?: { + rectangle?: Rectangle; + alpha?: number | ((...params: any[]) => any); + nightAlpha?: number | ((...params: any[]) => any); + dayAlpha?: number | ((...params: any[]) => any); + brightness?: number | ((...params: any[]) => any); + contrast?: number | ((...params: any[]) => any); + hue?: number | ((...params: any[]) => any); + saturation?: number | ((...params: any[]) => any); + gamma?: number | ((...params: any[]) => any); + splitDirection?: ImagerySplitDirection | ((...params: any[]) => any); + minificationFilter?: TextureMinificationFilter; + magnificationFilter?: TextureMagnificationFilter; + show?: boolean; + maximumAnisotropy?: number; + minimumTerrainLevel?: number; + maximumTerrainLevel?: number; + cutoutRectangle?: Rectangle; + colorToAlpha?: Color; + colorToAlphaThreshold?: number; + }); + /** + * The alpha blending value of this layer, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + alpha: number; + /** + * The alpha blending value of this layer on the night side of the globe, with 0.0 representing fully transparent and + 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is true. + */ + nightAlpha: number; + /** + * The alpha blending value of this layer on the day side of the globe, with 0.0 representing fully transparent and + 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is true. + */ + dayAlpha: number; + /** + * The brightness of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + brightness: number; + /** + * The contrast of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + contrast: number; + /** + * The hue of this layer in radians. 0.0 uses the unmodified imagery color. + */ + hue: number; + /** + * The saturation of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + saturation: number; + /** + * The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color. + */ + gamma: number; + /** + * The {@link ImagerySplitDirection} to apply to this layer. + */ + splitDirection: ImagerySplitDirection; + /** + * The {@link TextureMinificationFilter} to apply to this layer. + Possible values are {@link TextureMinificationFilter.LINEAR} (the default) + and {@link TextureMinificationFilter.NEAREST}. + + To take effect, this property must be set immediately after adding the imagery layer. + Once a texture is loaded it won't be possible to change the texture filter used. + */ + minificationFilter: TextureMinificationFilter; + /** + * The {@link TextureMagnificationFilter} to apply to this layer. + Possible values are {@link TextureMagnificationFilter.LINEAR} (the default) + and {@link TextureMagnificationFilter.NEAREST}. + + To take effect, this property must be set immediately after adding the imagery layer. + Once a texture is loaded it won't be possible to change the texture filter used. + */ + magnificationFilter: TextureMagnificationFilter; + /** + * Determines if this layer is shown. + */ + show: boolean; + /** + * Rectangle cutout in this layer of imagery. + */ + cutoutRectangle: Rectangle; + /** + * Color value that should be set to transparent. + */ + colorToAlpha: Color; + /** + * Normalized (0-1) threshold for color-to-alpha. + */ + colorToAlphaThreshold: number; + /** + * Gets the imagery provider for this layer. + */ + readonly imageryProvider: ImageryProvider; + /** + * Gets the rectangle of this layer. If this rectangle is smaller than the rectangle of the + {@link ImageryProvider}, only a portion of the imagery provider is shown. + */ + readonly rectangle: Rectangle; + /** + * This value is used as the default brightness for the imagery layer if one is not provided during construction + or by the imagery provider. This value does not modify the brightness of the imagery. + */ + static DEFAULT_BRIGHTNESS: number; + /** + * This value is used as the default contrast for the imagery layer if one is not provided during construction + or by the imagery provider. This value does not modify the contrast of the imagery. + */ + static DEFAULT_CONTRAST: number; + /** + * This value is used as the default hue for the imagery layer if one is not provided during construction + or by the imagery provider. This value does not modify the hue of the imagery. + */ + static DEFAULT_HUE: number; + /** + * This value is used as the default saturation for the imagery layer if one is not provided during construction + or by the imagery provider. This value does not modify the saturation of the imagery. + */ + static DEFAULT_SATURATION: number; + /** + * This value is used as the default gamma for the imagery layer if one is not provided during construction + or by the imagery provider. This value does not modify the gamma of the imagery. + */ + static DEFAULT_GAMMA: number; + /** + * This value is used as the default split for the imagery layer if one is not provided during construction + or by the imagery provider. + */ + static DEFAULT_SPLIT: ImagerySplitDirection; + /** + * This value is used as the default texture minification filter for the imagery layer if one is not provided + during construction or by the imagery provider. + */ + static DEFAULT_MINIFICATION_FILTER: TextureMinificationFilter; + /** + * This value is used as the default texture magnification filter for the imagery layer if one is not provided + during construction or by the imagery provider. + */ + static DEFAULT_MAGNIFICATION_FILTER: TextureMagnificationFilter; + /** + * This value is used as the default threshold for color-to-alpha if one is not provided + during construction or by the imagery provider. + */ + static DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD: number; + /** + * Gets a value indicating whether this layer is the base layer in the + {@link ImageryLayerCollection}. The base layer is the one that underlies all + others. It is special in that it is treated as if it has global rectangle, even if + it actually does not, by stretching the texels at the edges over the entire + globe. + * @returns true if this is the base layer; otherwise, false. + */ + isBaseLayer(): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * imageryLayer = imageryLayer && imageryLayer.destroy(); + */ + destroy(): void; + /** + * Computes the intersection of this layer's rectangle with the imagery provider's availability rectangle, + producing the overall bounds of imagery that can be produced by this layer. + * @example + * // Zoom to an imagery layer. + imageryLayer.getViewableRectangle().then(function (rectangle) { + return camera.flyTo({ + destination: rectangle + }); + }); + * @returns A promise to a rectangle which defines the overall bounds of imagery that can be produced by this layer. + */ + getViewableRectangle(): Promise; +} + +/** + * An ordered collection of imagery layers. + */ +export class ImageryLayerCollection { + constructor(); + /** + * An event that is raised when a layer is added to the collection. Event handlers are passed the layer that + was added and the index at which it was added. + */ + layerAdded: Event; + /** + * An event that is raised when a layer is removed from the collection. Event handlers are passed the layer that + was removed and the index from which it was removed. + */ + layerRemoved: Event; + /** + * An event that is raised when a layer changes position in the collection. Event handlers are passed the layer that + was moved, its new index after the move, and its old index prior to the move. + */ + layerMoved: Event; + /** + * An event that is raised when a layer is shown or hidden by setting the + {@link ImageryLayer#show} property. Event handlers are passed a reference to this layer, + the index of the layer in the collection, and a flag that is true if the layer is now + shown or false if it is now hidden. + */ + layerShownOrHidden: Event; + /** + * Gets the number of layers in this collection. + */ + length: number; + /** + * Adds a layer to the collection. + * @param layer - the layer to add. + * @param [index] - the index to add the layer at. If omitted, the layer will + be added on top of all existing layers. + */ + add(layer: ImageryLayer, index?: number): void; + /** + * Creates a new layer using the given ImageryProvider and adds it to the collection. + * @param imageryProvider - the imagery provider to create a new layer for. + * @param [index] - the index to add the layer at. If omitted, the layer will + added on top of all existing layers. + * @returns The newly created layer. + */ + addImageryProvider(imageryProvider: ImageryProvider, index?: number): ImageryLayer; + /** + * Removes a layer from this collection, if present. + * @param layer - The layer to remove. + * @param [destroy = true] - whether to destroy the layers in addition to removing them. + * @returns true if the layer was in the collection and was removed, + false if the layer was not in the collection. + */ + remove(layer: ImageryLayer, destroy?: boolean): boolean; + /** + * Removes all layers from this collection. + * @param [destroy = true] - whether to destroy the layers in addition to removing them. + */ + removeAll(destroy?: boolean): void; + /** + * Checks to see if the collection contains a given layer. + * @param layer - the layer to check for. + * @returns true if the collection contains the layer, false otherwise. + */ + contains(layer: ImageryLayer): boolean; + /** + * Determines the index of a given layer in the collection. + * @param layer - The layer to find the index of. + * @returns The index of the layer in the collection, or -1 if the layer does not exist in the collection. + */ + indexOf(layer: ImageryLayer): number; + /** + * Gets a layer by index from the collection. + * @param index - the index to retrieve. + * @returns The imagery layer at the given index. + */ + get(index: number): ImageryLayer; + /** + * Raises a layer up one position in the collection. + * @param layer - the layer to move. + */ + raise(layer: ImageryLayer): void; + /** + * Lowers a layer down one position in the collection. + * @param layer - the layer to move. + */ + lower(layer: ImageryLayer): void; + /** + * Raises a layer to the top of the collection. + * @param layer - the layer to move. + */ + raiseToTop(layer: ImageryLayer): void; + /** + * Lowers a layer to the bottom of the collection. + * @param layer - the layer to move. + */ + lowerToBottom(layer: ImageryLayer): void; + /** + * Asynchronously determines the imagery layer features that are intersected by a pick ray. The intersected imagery + layer features are found by invoking {@link ImageryProvider#pickFeatures} for each imagery layer tile intersected + by the pick ray. To compute a pick ray from a location on the screen, use {@link Camera.getPickRay}. + * @example + * var pickRay = viewer.camera.getPickRay(windowPosition); + var featuresPromise = viewer.imageryLayers.pickImageryLayerFeatures(pickRay, viewer.scene); + if (!Cesium.defined(featuresPromise)) { + console.log('No features picked.'); + } else { + Cesium.when(featuresPromise, function(features) { + // This function is called asynchronously when the list if picked features is available. + console.log('Number of features: ' + features.length); + if (features.length > 0) { + console.log('First feature name: ' + features[0].name); + } + }); + } + * @param ray - The ray to test for intersection. + * @param scene - The scene. + * @returns A promise that resolves to an array of features intersected by the pick ray. + If it can be quickly determined that no features are intersected (for example, + because no active imagery providers support {@link ImageryProvider#pickFeatures} + or because the pick ray does not intersect the surface), this function will + return undefined. + */ + pickImageryLayerFeatures(ray: Ray, scene: Scene): Promise | undefined; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by all layers in this collection. Explicitly destroying this + object allows for deterministic release of WebGL resources, instead of relying on the garbage + collector. +

+ Once this object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * layerCollection = layerCollection && layerCollection.destroy(); + */ + destroy(): void; +} + +/** + * Describes a rasterized feature, such as a point, polygon, polyline, etc., in an imagery layer. + */ +export class ImageryLayerFeatureInfo { + constructor(); + /** + * Gets or sets the name of the feature. + */ + name: string | undefined; + /** + * Gets or sets an HTML description of the feature. The HTML is not trusted and should + be sanitized before display to the user. + */ + description: string | undefined; + /** + * Gets or sets the position of the feature, or undefined if the position is not known. + */ + position: Cartographic | undefined; + /** + * Gets or sets the raw data describing the feature. The raw data may be in any + number of formats, such as GeoJSON, KML, etc. + */ + data: any | undefined; + /** + * Gets or sets the image layer of the feature. + */ + imageryLayer: any | undefined; + /** + * Configures the name of this feature by selecting an appropriate property. The name will be obtained from + one of the following sources, in this order: 1) the property with the name 'name', 2) the property with the name 'title', + 3) the first property containing the word 'name', 4) the first property containing the word 'title'. If + the name cannot be obtained from any of these sources, the existing name will be left unchanged. + * @param properties - An object literal containing the properties of the feature. + */ + configureNameFromProperties(properties: any): void; + /** + * Configures the description of this feature by creating an HTML table of properties and their values. + * @param properties - An object literal containing the properties of the feature. + */ + configureDescriptionFromProperties(properties: any): void; +} + +/** + * Provides imagery to be displayed on the surface of an ellipsoid. This type describes an +interface and is not intended to be instantiated directly. + */ +export class ImageryProvider { + constructor(); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the rectangle, in radians, of the imagery provided by the instance. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link ImageryProvider#ready} returns true. Generally, + a minimum level should only be used when the rectangle of the imagery is small + enough that the number of tiles at the minimum level is small. An imagery + provider with more than a few tiles at the minimum level will lead to + rendering problems. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by the provider. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link ImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link ImageryProvider#ready} returns true. + This function is optional, so it may not exist on all ImageryProviders. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; + /** + * Loads an image from a given URL. If the server referenced by the URL already has + too many requests pending, this function will instead return undefined, indicating + that the request should be retried later. + * @param imageryProvider - The imagery provider for the URL. + * @param url - The URL of the image. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + static loadImage(imageryProvider: ImageryProvider, url: Resource | string): Promise | undefined; +} + +/** + * The direction to display an ImageryLayer relative to the {@link Scene#imagerySplitPosition}. + */ +export enum ImagerySplitDirection { + /** + * Display the ImageryLayer to the left of the {@link Scene#imagerySplitPosition}. + */ + LEFT = -1, + /** + * Always display the ImageryLayer. + */ + NONE = 0, + /** + * Display the ImageryLayer to the right of the {@link Scene#imagerySplitPosition}. + */ + RIGHT = 1 +} + +export namespace IonImageryProvider { + /** + * Initialization options for the TileMapServiceImageryProvider constructor + * @property assetId - An ion imagery asset ID + * @property [accessToken = Ion.defaultAccessToken] - The access token to use. + * @property [server = Ion.defaultServer] - The resource to the Cesium ion API server. + */ + type ConstructorOptions = { + assetId: number; + accessToken?: string; + server?: string | Resource; + }; +} + +/** + * Provides tiled imagery using the Cesium ion REST API. + * @example + * viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId : 23489024 })); + * @param options - Object describing initialization options + */ +export class IonImageryProvider { + constructor(options: IonImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the rectangle, in radians, of the imagery provided by the instance. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link IonImageryProvider#ready} returns true. Generally, + a minimum level should only be used when the rectangle of the imagery is small + enough that the number of tiles at the minimum level is small. An imagery + provider with more than a few tiles at the minimum level will lead to + rendering problems. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by the provider. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should + not be called before {@link IonImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link IonImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link IonImageryProvider#ready} returns true. + This function is optional, so it may not exist on all ImageryProviders. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * The types of imagery provided by {@link createWorldImagery}. + */ +export enum IonWorldImageryStyle { + /** + * Aerial imagery. + */ + AERIAL = 2, + /** + * Aerial imagery with a road overlay. + */ + AERIAL_WITH_LABELS = 3, + /** + * Roads without additional imagery. + */ + ROAD = 4 +} + +/** + * A Label draws viewport-aligned text positioned in the 3D scene. This constructor +should not be used directly, instead create labels by calling {@link LabelCollection#add}. + */ +export class Label { + constructor(); + /** + * Determines if this label will be shown. Use this to hide or show a label, instead + of removing it and re-adding it to the collection. + */ + show: boolean; + /** + * Gets or sets the Cartesian position of this label. + */ + position: Cartesian3; + /** + * Gets or sets the height reference of this billboard. + */ + heightReference: HeightReference; + /** + * Gets or sets the text of this label. + */ + text: string; + /** + * Gets or sets the font used to draw this label. Fonts are specified using the same syntax as the CSS 'font' property. + */ + font: string; + /** + * Gets or sets the fill color of this label. + */ + fillColor: Color; + /** + * Gets or sets the outline color of this label. + */ + outlineColor: Color; + /** + * Gets or sets the outline width of this label. + */ + outlineWidth: number; + /** + * Determines if a background behind this label will be shown. + */ + showBackground: boolean; + /** + * Gets or sets the background color of this label. + */ + backgroundColor: Color; + /** + * Gets or sets the background padding, in pixels, of this label. The x value + controls horizontal padding, and the y value controls vertical padding. + */ + backgroundPadding: Cartesian2; + /** + * Gets or sets the style of this label. + */ + style: LabelStyle; + /** + * Gets or sets the pixel offset in screen space from the origin of this label. This is commonly used + to align multiple labels and billboards at the same position, e.g., an image and text. The + screen space origin is the top, left corner of the canvas; x increases from + left to right, and y increases from top to bottom. +

+
+ + + +
default
l.pixeloffset = new Cartesian2(25, 75);
+ The label's origin is indicated by the yellow point. +
+ */ + pixelOffset: Cartesian2; + /** + * Gets or sets near and far translucency properties of a Label based on the Label's distance from the camera. + A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's translucency remains clamped to the nearest bound. If undefined, + translucencyByDistance will be disabled. + * @example + * // Example 1. + // Set a label's translucencyByDistance to 1.0 when the + // camera is 1500 meters from the label and disappear as + // the camera distance approaches 8.0e6 meters. + text.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0); + * @example + * // Example 2. + // disable translucency by distance + text.translucencyByDistance = undefined; + */ + translucencyByDistance: NearFarScalar; + /** + * Gets or sets near and far pixel offset scaling properties of a Label based on the Label's distance from the camera. + A label's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's pixel offset scaling remains clamped to the nearest bound. If undefined, + pixelOffsetScaleByDistance will be disabled. + * @example + * // Example 1. + // Set a label's pixel offset scale to 0.0 when the + // camera is 1500 meters from the label and scale pixel offset to 10.0 pixels + // in the y direction the camera distance approaches 8.0e6 meters. + text.pixelOffset = new Cesium.Cartesian2(0.0, 1.0); + text.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0); + * @example + * // Example 2. + // disable pixel offset by distance + text.pixelOffsetScaleByDistance = undefined; + */ + pixelOffsetScaleByDistance: NearFarScalar; + /** + * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera. + A label's scale will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the label's scale remains clamped to the nearest bound. If undefined, + scaleByDistance will be disabled. + * @example + * // Example 1. + // Set a label's scaleByDistance to scale by 1.5 when the + // camera is 1500 meters from the label and disappear as + // the camera distance approaches 8.0e6 meters. + label.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0); + * @example + * // Example 2. + // disable scaling by distance + label.scaleByDistance = undefined; + */ + scaleByDistance: NearFarScalar; + /** + * Gets and sets the 3D Cartesian offset applied to this label in eye coordinates. Eye coordinates is a left-handed + coordinate system, where x points towards the viewer's right, y points up, and + z points into the screen. Eye coordinates use the same scale as world and model coordinates, + which is typically meters. +

+ An eye offset is commonly used to arrange multiple label or objects at the same position, e.g., to + arrange a label above its corresponding 3D model. +

+ Below, the label is positioned at the center of the Earth but an eye offset makes it always + appear on top of the Earth regardless of the viewer's or Earth's orientation. +

+
+ + + +
+ l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);

+
+ */ + eyeOffset: Cartesian3; + /** + * Gets or sets the horizontal origin of this label, which determines if the label is drawn + to the left, center, or right of its anchor position. +

+
+
+
+ * @example + * // Use a top, right origin + l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT; + l.verticalOrigin = Cesium.VerticalOrigin.TOP; + */ + horizontalOrigin: HorizontalOrigin; + /** + * Gets or sets the vertical origin of this label, which determines if the label is + to the above, below, or at the center of its anchor position. +

+
+
+
+ * @example + * // Use a top, right origin + l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT; + l.verticalOrigin = Cesium.VerticalOrigin.TOP; + */ + verticalOrigin: VerticalOrigin; + /** + * Gets or sets the uniform scale that is multiplied with the label's size in pixels. + A scale of 1.0 does not change the size of the label; a scale greater than + 1.0 enlarges the label; a positive scale less than 1.0 shrinks + the label. +

+ Applying a large scale value may pixelate the label. To make text larger without pixelation, + use a larger font size when calling {@link Label#font} instead. +

+
+
+ From left to right in the above image, the scales are 0.5, 1.0, + and 2.0. +
+ */ + scale: number; + /** + * Gets the total scale of the label, which is the label's scale multiplied by the computed relative size + of the desired font compared to the generated glyph size. + */ + totalScale: number; + /** + * Gets or sets the condition specifying at what distance from the camera that this label will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: number; + /** + * Gets or sets the user-defined value returned when the label is picked. + */ + id: any; + /** + * Computes the screen-space position of the label's origin, taking into account eye and pixel offsets. + The screen space origin is the top, left corner of the canvas; x increases from + left to right, and y increases from top to bottom. + * @example + * console.log(l.computeScreenSpacePosition(scene).toString()); + * @param scene - The scene the label is in. + * @param [result] - The object onto which to store the result. + * @returns The screen-space position of the label. + */ + computeScreenSpacePosition(scene: Scene, result?: Cartesian2): Cartesian2; + /** + * Determines if this label equals another label. Labels are equal if all their properties + are equal. Labels in different collections can be equal. + * @param other - The label to compare for equality. + * @returns true if the labels are equal; otherwise, false. + */ + equals(other: Label): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Determines whether or not run the algorithm, that match the text of the label to right-to-left languages + * @example + * // Example 1. + // Set a label's rightToLeft before init + Cesium.Label.enableRightToLeftDetection = true; + var myLabelEntity = viewer.entities.add({ + label: { + id: 'my label', + text: 'זה טקסט בעברית \n ועכשיו יורדים שורה', + } + }); + * @example + * // Example 2. + var myLabelEntity = viewer.entities.add({ + label: { + id: 'my label', + text: 'English text' + } + }); + // Set a label's rightToLeft after init + Cesium.Label.enableRightToLeftDetection = true; + myLabelEntity.text = 'טקסט חדש'; + */ + static enableRightToLeftDetection: boolean; +} + +/** + * A renderable collection of labels. Labels are viewport-aligned text positioned in the 3D scene. +Each label can have a different font, color, scale, etc. +

+
+
+Example labels +
+

+Labels are added and removed from the collection using {@link LabelCollection#add} +and {@link LabelCollection#remove}. + * @example + * // Create a label collection with two labels +var labels = scene.primitives.add(new Cesium.LabelCollection()); +labels.add({ + position : new Cesium.Cartesian3(1.0, 2.0, 3.0), + text : 'A label' +}); +labels.add({ + position : new Cesium.Cartesian3(4.0, 5.0, 6.0), + text : 'Another label' +}); + * @param [options] - Object with the following properties: + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms each label from model to world coordinates. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.scene] - Must be passed in for labels that use the height reference property or will be depth tested against the globe. + * @param [options.blendOption = BlendOption.OPAQUE_AND_TRANSLUCENT] - The label blending option. The default +is used for rendering both opaque and translucent labels. However, if either all of the labels are completely opaque or all are completely translucent, +setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x. + * @param [options.show = true] - Determines if the labels in the collection will be shown. + */ +export class LabelCollection { + constructor(options?: { + modelMatrix?: Matrix4; + debugShowBoundingVolume?: boolean; + scene?: Scene; + blendOption?: BlendOption; + show?: boolean; + }); + /** + * Determines if labels in this collection will be shown. + */ + show: boolean; + /** + * The 4x4 transformation matrix that transforms each label in this collection from model to world coordinates. + When this is the identity matrix, the labels are drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + * @example + * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); + labels.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center); + labels.add({ + position : new Cesium.Cartesian3(0.0, 0.0, 0.0), + text : 'Center' + }); + labels.add({ + position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0), + text : 'East' + }); + labels.add({ + position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0), + text : 'North' + }); + labels.add({ + position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0), + text : 'Up' + }); + */ + modelMatrix: Matrix4; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * The label blending option. The default is used for rendering both opaque and translucent labels. + However, if either all of the labels are completely opaque or all are completely translucent, + setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve + performance by up to 2x. + */ + blendOption: BlendOption; + /** + * Returns the number of labels in this collection. This is commonly used with + {@link LabelCollection#get} to iterate over all the labels + in the collection. + */ + length: number; + /** + * Creates and adds a label with the specified initial properties to the collection. + The added label is returned so it can be modified or removed from the collection later. + * @example + * // Example 1: Add a label, specifying all the default values. + var l = labels.add({ + show : true, + position : Cesium.Cartesian3.ZERO, + text : '', + font : '30px sans-serif', + fillColor : Cesium.Color.WHITE, + outlineColor : Cesium.Color.BLACK, + outlineWidth : 1.0, + showBackground : false, + backgroundColor : new Cesium.Color(0.165, 0.165, 0.165, 0.8), + backgroundPadding : new Cesium.Cartesian2(7, 5), + style : Cesium.LabelStyle.FILL, + pixelOffset : Cesium.Cartesian2.ZERO, + eyeOffset : Cesium.Cartesian3.ZERO, + horizontalOrigin : Cesium.HorizontalOrigin.LEFT, + verticalOrigin : Cesium.VerticalOrigin.BASELINE, + scale : 1.0, + translucencyByDistance : undefined, + pixelOffsetScaleByDistance : undefined, + heightReference : HeightReference.NONE, + distanceDisplayCondition : undefined + }); + * @example + * // Example 2: Specify only the label's cartographic position, + // text, and font. + var l = labels.add({ + position : Cesium.Cartesian3.fromRadians(longitude, latitude, height), + text : 'Hello World', + font : '24px Helvetica', + }); + * @param [options] - A template describing the label's properties as shown in Example 1. + * @returns The label that was added to the collection. + */ + add(options?: any): Label; + /** + * Removes a label from the collection. Once removed, a label is no longer usable. + * @example + * var l = labels.add(...); + labels.remove(l); // Returns true + * @param label - The label to remove. + * @returns true if the label was removed; false if the label was not found in the collection. + */ + remove(label: Label): boolean; + /** + * Removes all labels from the collection. + * @example + * labels.add(...); + labels.add(...); + labels.removeAll(); + */ + removeAll(): void; + /** + * Check whether this collection contains a given label. + * @param label - The label to check for. + * @returns true if this collection contains the label, false otherwise. + */ + contains(label: Label): boolean; + /** + * Returns the label in the collection at the specified index. Indices are zero-based + and increase as labels are added. Removing a label shifts all labels after + it to the left, changing their indices. This function is commonly used with + {@link LabelCollection#length} to iterate over all the labels + in the collection. + * @example + * // Toggle the show property of every label in the collection + var len = labels.length; + for (var i = 0; i < len; ++i) { + var l = billboards.get(i); + l.show = !l.show; + } + * @param index - The zero-based index of the billboard. + * @returns The label at the specified index. + */ + get(index: number): Label; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * labels = labels && labels.destroy(); + */ + destroy(): void; +} + +/** + * Describes how to draw a label. + */ +export enum LabelStyle { + /** + * Fill the text of the label, but do not outline. + */ + FILL = 0, + /** + * Outline the text of the label, but do not fill. + */ + OUTLINE = 1, + /** + * Fill and outline the text of the label. + */ + FILL_AND_OUTLINE = 2 +} + +/** + * A light source. This type describes an interface and is not intended to be instantiated directly. + */ +export class Light { + constructor(); + /** + * The color of the light. + */ + color: Color; + /** + * The intensity of the light. + */ + intensity: number; +} + +export namespace MapboxImageryProvider { + /** + * Initialization options for the MapboxImageryProvider constructor + * @property [url = 'https://api.mapbox.com/v4/'] - The Mapbox server url. + * @property mapId - The Mapbox Map ID. + * @property accessToken - The public access token for the imagery. + * @property [format = 'png'] - The format of the image request. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying + this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely + to result in rendering problems. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type ConstructorOptions = { + url?: string; + mapId: string; + accessToken: string; + format?: string; + ellipsoid?: Ellipsoid; + minimumLevel?: number; + maximumLevel?: number; + rectangle?: Rectangle; + credit?: Credit | string; + }; +} + +/** + * Provides tiled imagery hosted by Mapbox. + * @example + * // Mapbox tile provider +var mapbox = new Cesium.MapboxImageryProvider({ + mapId: 'mapbox.streets', + accessToken: 'thisIsMyAccessToken' +}); + * @param options - Object describing initialization options + */ +export class MapboxImageryProvider { + constructor(options: MapboxImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the Mapbox server. + */ + readonly url: string; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the rectangle, in radians, of the imagery provided by the instance. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. Generally, + a minimum level should only be used when the rectangle of the imagery is small + enough that the number of tiles at the minimum level is small. An imagery + provider with more than a few tiles at the minimum level will lead to + rendering problems. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by the provider. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link MapboxImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link MapboxImageryProvider#ready} returns true. + This function is optional, so it may not exist on all ImageryProviders. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +export namespace MapboxStyleImageryProvider { + /** + * Initialization options for the MapboxStyleImageryProvider constructor + * @property [url = 'https://api.mapbox.com/styles/v1/'] - The Mapbox server url. + * @property [username = 'mapbox'] - The username of the map account. + * @property styleId - The Mapbox Style ID. + * @property accessToken - The public access token for the imagery. + * @property [tilesize = 512] - The size of the image tiles. + * @property [scaleFactor] - Determines if tiles are rendered at a @2x scale factor. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying + this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely + to result in rendering problems. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + */ + type ConstructorOptions = { + url?: Resource | string; + username?: string; + styleId: string; + accessToken: string; + tilesize?: number; + scaleFactor?: boolean; + ellipsoid?: Ellipsoid; + minimumLevel?: number; + maximumLevel?: number; + rectangle?: Rectangle; + credit?: Credit | string; + }; +} + +/** + * Provides tiled imagery hosted by Mapbox. + * @example + * // Mapbox style provider +var mapbox = new Cesium.MapboxStyleImageryProvider({ + styleId: 'streets-v11', + accessToken: 'thisIsMyAccessToken' +}); + * @param options - Object describing initialization options + */ +export class MapboxStyleImageryProvider { + constructor(options: MapboxStyleImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the Mapbox server. + */ + readonly url: string; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the rectangle, in radians, of the imagery provided by the instance. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. Generally, + a minimum level should only be used when the rectangle of the imagery is small + enough that the number of tiles at the minimum level is small. An imagery + provider with more than a few tiles at the minimum level will lead to + rendering problems. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by the provider. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link MapboxStyleImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link MapboxStyleImageryProvider#ready} returns true. + This function is optional, so it may not exist on all ImageryProviders. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * Describes how the map will operate in 2D. + */ +export enum MapMode2D { + /** + * The 2D map can be rotated about the z axis. + */ + ROTATE = 0, + /** + * The 2D map can be scrolled infinitely in the horizontal direction. + */ + INFINITE_SCROLL = 1 +} + +/** + * A Material defines surface appearance through a combination of diffuse, specular, +normal, emission, and alpha components. These values are specified using a +JSON schema called Fabric which gets parsed and assembled into glsl shader code +behind-the-scenes. Check out the {@link https://github.com/CesiumGS/cesium/wiki/Fabric|wiki page} +for more details on Fabric. +

+ + +Base material types and their uniforms: +
+
    +
  • Color
  • +
      +
    • color: rgba color object.
    • +
    +
  • Image
  • +
      +
    • image: path to image.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    +
  • DiffuseMap
  • +
      +
    • image: path to image.
    • +
    • channels: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    +
  • AlphaMap
  • +
      +
    • image: path to image.
    • +
    • channel: One character string containing r, g, b, or a for selecting the desired image channel.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    +
  • SpecularMap
  • +
      +
    • image: path to image.
    • +
    • channel: One character string containing r, g, b, or a for selecting the desired image channel.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    +
  • EmissionMap
  • +
      +
    • image: path to image.
    • +
    • channels: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    +
  • BumpMap
  • +
      +
    • image: path to image.
    • +
    • channel: One character string containing r, g, b, or a for selecting the desired image channel.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    • strength: Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.
    • +
    +
  • NormalMap
  • +
      +
    • image: path to image.
    • +
    • channels: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.
    • +
    • repeat: Object with x and y values specifying the number of times to repeat the image.
    • +
    • strength: Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.
    • +
    +
  • Grid
  • +
      +
    • color: rgba color object for the whole material.
    • +
    • cellAlpha: Alpha value for the cells between grid lines. This will be combined with color.alpha.
    • +
    • lineCount: Object with x and y values specifying the number of columns and rows respectively.
    • +
    • lineThickness: Object with x and y values specifying the thickness of grid lines (in pixels where available).
    • +
    • lineOffset: Object with x and y values specifying the offset of grid lines (range is 0 to 1).
    • +
    +
  • Stripe
  • +
      +
    • horizontal: Boolean that determines if the stripes are horizontal or vertical.
    • +
    • evenColor: rgba color object for the stripe's first color.
    • +
    • oddColor: rgba color object for the stripe's second color.
    • +
    • offset: Number that controls at which point into the pattern to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning of the odd color, 2.0 being the even color again, and any multiple or fractional values being in between.
    • +
    • repeat: Number that controls the total number of stripes, half light and half dark.
    • +
    +
  • Checkerboard
  • +
      +
    • lightColor: rgba color object for the checkerboard's light alternating color.
    • +
    • darkColor: rgba color object for the checkerboard's dark alternating color.
    • +
    • repeat: Object with x and y values specifying the number of columns and rows respectively.
    • +
    +
  • Dot
  • +
      +
    • lightColor: rgba color object for the dot color.
    • +
    • darkColor: rgba color object for the background color.
    • +
    • repeat: Object with x and y values specifying the number of columns and rows of dots respectively.
    • +
    +
  • Water
  • +
      +
    • baseWaterColor: rgba color object base color of the water.
    • +
    • blendColor: rgba color object used when blending from water to non-water areas.
    • +
    • specularMap: Single channel texture used to indicate areas of water.
    • +
    • normalMap: Normal map for water normal perturbation.
    • +
    • frequency: Number that controls the number of waves.
    • +
    • normalMap: Normal map for water normal perturbation.
    • +
    • animationSpeed: Number that controls the animations speed of the water.
    • +
    • amplitude: Number that controls the amplitude of water waves.
    • +
    • specularIntensity: Number that controls the intensity of specular reflections.
    • +
    +
  • RimLighting
  • +
      +
    • color: diffuse color and alpha.
    • +
    • rimColor: diffuse color and alpha of the rim.
    • +
    • width: Number that determines the rim's width.
    • +
    +
  • Fade
  • +
      +
    • fadeInColor: diffuse color and alpha at time
    • +
    • fadeOutColor: diffuse color and alpha at maximumDistance from time
    • +
    • maximumDistance: Number between 0.0 and 1.0 where the fadeInColor becomes the fadeOutColor. A value of 0.0 gives the entire material a color of fadeOutColor and a value of 1.0 gives the the entire material a color of fadeInColor
    • +
    • repeat: true if the fade should wrap around the texture coodinates.
    • +
    • fadeDirection: Object with x and y values specifying if the fade should be in the x and y directions.
    • +
    • time: Object with x and y values between 0.0 and 1.0 of the fadeInColor position
    • +
    +
  • PolylineArrow
  • +
      +
    • color: diffuse color and alpha.
    • +
    +
  • PolylineDash
  • +
      +
    • color: color for the line.
    • +
    • gapColor: color for the gaps in the line.
    • +
    • dashLength: Dash length in pixels.
    • +
    • dashPattern: The 16 bit stipple pattern for the line..
    • +
    +
  • PolylineGlow
  • +
      +
    • color: color and maximum alpha for the glow on the line.
    • +
    • glowPower: strength of the glow, as a percentage of the total line width (less than 1.0).
    • +
    • taperPower: strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used.
    • +
    +
  • PolylineOutline
  • +
      +
    • color: diffuse color and alpha for the interior of the line.
    • +
    • outlineColor: diffuse color and alpha for the outline.
    • +
    • outlineWidth: width of the outline in pixels.
    • +
    +
  • ElevationContour
  • +
      +
    • color: color and alpha for the contour line.
    • +
    • spacing: spacing for contour lines in meters.
    • +
    • width: Number specifying the width of the grid lines in pixels.
    • +
    +
  • ElevationRamp
  • +
      +
    • image: color ramp image to use for coloring the terrain.
    • +
    • minimumHeight: minimum height for the ramp.
    • +
    • maximumHeight: maximum height for the ramp.
    • +
    +
  • SlopeRamp
  • +
      +
    • image: color ramp image to use for coloring the terrain by slope.
    • +
    +
  • AspectRamp
  • +
      +
    • image: color ramp image to use for color the terrain by aspect.
    • +
    +
  • ElevationBand
  • +
      +
    • heights: image of heights sorted from lowest to highest.
    • +
    • colors: image of colors at the corresponding heights.
    • +
    +
+ +
+ * @example + * // Create a color material with fromType: +polygon.material = Cesium.Material.fromType('Color'); +polygon.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0); + +// Create the default material: +polygon.material = new Cesium.Material(); + +// Create a color material with full Fabric notation: +polygon.material = new Cesium.Material({ + fabric : { + type : 'Color', + uniforms : { + color : new Cesium.Color(1.0, 1.0, 0.0, 1.0) + } + } +}); + * @param [options] - Object with the following properties: + * @param [options.strict = false] - Throws errors for issues that would normally be ignored, including unused uniforms or materials. + * @param [options.translucent = true] - When true or a function that returns true, the geometry + with this material is expected to appear translucent. + * @param [options.minificationFilter = TextureMinificationFilter.LINEAR] - The {@link TextureMinificationFilter} to apply to this material's textures. + * @param [options.magnificationFilter = TextureMagnificationFilter.LINEAR] - The {@link TextureMagnificationFilter} to apply to this material's textures. + * @param options.fabric - The fabric JSON used to generate the material. + */ +export class Material { + constructor(options?: { + strict?: boolean; + translucent?: boolean | ((...params: any[]) => any); + minificationFilter?: TextureMinificationFilter; + magnificationFilter?: TextureMagnificationFilter; + fabric: any; + }); + /** + * The material type. Can be an existing type or a new type. If no type is specified in fabric, type is a GUID. + */ + type: string; + /** + * The glsl shader source for this material. + */ + shaderSource: string; + /** + * Maps sub-material names to Material objects. + */ + materials: any; + /** + * Maps uniform names to their values. + */ + uniforms: any; + /** + * When true or a function that returns true, + the geometry is expected to appear translucent. + */ + translucent: boolean | ((...params: any[]) => any); + /** + * Creates a new material using an existing material type. +

+ Shorthand for: new Material({fabric : {type : type}}); + * @example + * var material = Cesium.Material.fromType('Color', { + color : new Cesium.Color(1.0, 0.0, 0.0, 1.0) + }); + * @param type - The base material type. + * @param [uniforms] - Overrides for the default uniforms. + * @returns New material object. + */ + static fromType(type: string, uniforms?: any): Material; + /** + * Gets whether or not this material is translucent. + * @returns true if this material is translucent, false otherwise. + */ + isTranslucent(): boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * material = material && material.destroy(); + */ + destroy(): void; + /** + * Gets or sets the default texture uniform value. + */ + static DefaultImageId: string; + /** + * Gets or sets the default cube map texture uniform value. + */ + static DefaultCubeMapId: string; + /** + * Gets the name of the color material. + */ + static readonly ColorType: string; + /** + * Gets the name of the image material. + */ + static readonly ImageType: string; + /** + * Gets the name of the diffuce map material. + */ + static readonly DiffuseMapType: string; + /** + * Gets the name of the alpha map material. + */ + static readonly AlphaMapType: string; + /** + * Gets the name of the specular map material. + */ + static readonly SpecularMapType: string; + /** + * Gets the name of the emmision map material. + */ + static readonly EmissionMapType: string; + /** + * Gets the name of the bump map material. + */ + static readonly BumpMapType: string; + /** + * Gets the name of the normal map material. + */ + static readonly NormalMapType: string; + /** + * Gets the name of the grid material. + */ + static readonly GridType: string; + /** + * Gets the name of the stripe material. + */ + static readonly StripeType: string; + /** + * Gets the name of the checkerboard material. + */ + static readonly CheckerboardType: string; + /** + * Gets the name of the dot material. + */ + static readonly DotType: string; + /** + * Gets the name of the water material. + */ + static readonly WaterType: string; + /** + * Gets the name of the rim lighting material. + */ + static readonly RimLightingType: string; + /** + * Gets the name of the fade material. + */ + static readonly FadeType: string; + /** + * Gets the name of the polyline arrow material. + */ + static readonly PolylineArrowType: string; + /** + * Gets the name of the polyline glow material. + */ + static readonly PolylineDashType: string; + /** + * Gets the name of the polyline glow material. + */ + static readonly PolylineGlowType: string; + /** + * Gets the name of the polyline outline material. + */ + static readonly PolylineOutlineType: string; + /** + * Gets the name of the elevation contour material. + */ + static readonly ElevationContourType: string; + /** + * Gets the name of the elevation contour material. + */ + static readonly ElevationRampType: string; + /** + * Gets the name of the yanmo material. + */ + static readonly YanMoType: string; + /** + * Gets the name of the yanmo material. + */ + static readonly WaJueType: string; + /** + * Gets the name of the slope ramp material. + */ + static readonly SlopeRampMaterialType: string; + /** + * Gets the name of the aspect ramp material. + */ + static readonly AspectRampMaterialType: string; + /** + * Gets the name of the elevation band material. + */ + static readonly ElevationBandType: string; +} + +/** + * An appearance for arbitrary geometry (as opposed to {@link EllipsoidSurfaceAppearance}, for example) +that supports shading with materials. + * @example + * var primitive = new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : new Cesium.WallGeometry({ + * materialSupport : Cesium.MaterialAppearance.MaterialSupport.BASIC.vertexFormat, + // ... + }) + }), + appearance : new Cesium.MaterialAppearance({ + material : Cesium.Material.fromType('Color'), + faceForward : true + }) + +}); + * @param [options] - Object with the following properties: + * @param [options.flat = false] - When true, flat shading is used in the fragment shader, which means lighting is not taking into account. + * @param [options.faceForward = !options.closed] - When true, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}. + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link MaterialAppearance#renderState} has alpha blending enabled. + * @param [options.closed = false] - When true, the geometry is expected to be closed so {@link MaterialAppearance#renderState} has backface culling enabled. + * @param [options.materialSupport = MaterialAppearance.MaterialSupport.TEXTURED] - The type of materials that will be supported. + * @param [options.material = Material.ColorType] - The material used to determine the fragment color. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class MaterialAppearance { + constructor(options?: { + flat?: boolean; + faceForward?: boolean; + translucent?: boolean; + closed?: boolean; + materialSupport?: MaterialAppearance.MaterialSupportType; + material?: Material; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * The material used to determine the fragment color. Unlike other {@link MaterialAppearance} + properties, this is not read-only, so an appearance's material can change on the fly. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. The full fragment shader + source is built procedurally taking into account {@link MaterialAppearance#material}, + {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}. + Use {@link MaterialAppearance#getFragmentShaderSource} to get the full source. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. +

+ The render state can be explicitly defined when constructing a {@link MaterialAppearance} + instance, or it is set implicitly via {@link MaterialAppearance#translucent} + and {@link MaterialAppearance#closed}. +

+ */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed so + {@link MaterialAppearance#renderState} has backface culling enabled. + If the viewer enters the geometry, it will not be visible. + */ + readonly closed: boolean; + /** + * The type of materials supported by this instance. This impacts the required + {@link VertexFormat} and the complexity of the vertex and fragment shaders. + */ + readonly materialSupport: MaterialAppearance.MaterialSupportType; + /** + * The {@link VertexFormat} that this appearance instance is compatible with. + A geometry can have more vertex attributes and still be compatible - at a + potential performance cost - but it can't have less. + */ + readonly vertexFormat: VertexFormat; + /** + * When true, flat shading is used in the fragment shader, + which means lighting is not taking into account. + */ + readonly flat: boolean; + /** + * When true, the fragment shader flips the surface normal + as needed to ensure that the normal faces the viewer to avoid + dark spots. This is useful when both sides of a geometry should be + shaded like {@link WallGeometry}. + */ + readonly faceForward: boolean; + /** + * Procedurally creates the full GLSL fragment shader source. For {@link MaterialAppearance}, + this is derived from {@link MaterialAppearance#fragmentShaderSource}, {@link MaterialAppearance#material}, + {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link MaterialAppearance#translucent} and {@link Material#isTranslucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +export namespace MaterialAppearance { + type MaterialSupportType = { + vertexFormat: VertexFormat; + vertexShaderSource: string; + fragmentShaderSource: string; + }; + /** + * Determines the type of {@link Material} that is supported by a + {@link MaterialAppearance} instance. This is a trade-off between + flexibility (a wide array of materials) and memory/performance + (required vertex format and GLSL shader complexity. + */ + namespace MaterialSupport { + /** + * Only basic materials, which require just position and + normal vertex attributes, are supported. + */ + const BASIC: MaterialAppearance.MaterialSupportType; + /** + * Materials with textures, which require position, + normal, and st vertex attributes, + are supported. The vast majority of materials fall into this category. + */ + const TEXTURED: MaterialAppearance.MaterialSupportType; + /** + * All materials, including those that work in tangent space, are supported. + This requires position, normal, st, + tangent, and bitangent vertex attributes. + */ + const ALL: MaterialAppearance.MaterialSupportType; + } +} + +/** + * A 3D model based on glTF, the runtime asset format for WebGL, OpenGL ES, and OpenGL. + *

+ * Cesium includes support for geometry and materials, glTF animations, and glTF skinning. + * In addition, individual glTF nodes are pickable with {@link Scene#pick} and animatable + * with {@link Model#getNode}. glTF cameras and lights are not currently supported. + *

+ *

+ * An external glTF asset is created with {@link Model.fromGltf}. glTF JSON can also be + * created at runtime and passed to this constructor function. In either case, the + * {@link Model#readyPromise} is resolved when the model is ready to render, i.e., + * when the external binary, image, and shader files are downloaded and the WebGL + * resources are created. + *

+ *

+ * Cesium supports glTF assets with the following extensions: + *

    + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/README.md|KHR_binary_glTF (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_materials_common/README.md|KHR_materials_common (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/WEB3D_quantized_attributes/README.md|WEB3D_quantized_attributes (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/AGI_articulations/README.md|AGI_articulations} + *
  • + * {@link https://github.com/KhronosGroup/glTF/pull/1302|KHR_blend (draft)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md|KHR_draco_mesh_compression} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/README.md|KHR_materials_pbrSpecularGlossiness} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit/README.md|KHR_materials_unlit} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_techniques_webgl/README.md|KHR_techniques_webgl} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform} + *
  • + *
+ *

+ *

+ * For high-precision rendering, Cesium supports the {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/CESIUM_RTC/README.md|CESIUM_RTC} extension, which introduces the + * CESIUM_RTC_MODELVIEW parameter semantic that says the node is in WGS84 coordinates translated + * relative to a local origin. + *

+ * @param [options] - Object with the following properties: + * @param [options.gltf] - A glTF JSON object, or a binary glTF buffer. + * @param [options.basePath = ''] - The base path that paths in the glTF JSON are relative to. + * @param [options.show = true] - Determines if the model primitive will be shown. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms the model from model to world coordinates. + * @param [options.scale = 1.0] - A uniform scale applied to this model. + * @param [options.minimumPixelSize = 0.0] - The approximate minimum pixel size of the model regardless of zoom. + * @param [options.maximumScale] - The maximum scale size of a model. An upper limit for minimumPixelSize. + * @param [options.id] - A user-defined object to return when the model is picked with {@link Scene#pick}. + * @param [options.allowPicking = true] - When true, each glTF mesh and primitive is pickable with {@link Scene#pick}. + * @param [options.incrementallyLoadTextures = true] - Determine if textures may continue to stream in after the model is loaded. + * @param [options.asynchronous = true] - Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded. + * @param [options.clampAnimations = true] - Determines if the model's animations should hold a pose over frames where no keyframes are specified. + * @param [options.shadows = ShadowMode.ENABLED] - Determines whether the model casts or receives shadows from light sources. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Draws the bounding sphere for each draw command in the model. + * @param [options.debugWireframe = false] - For debugging only. Draws the model in wireframe. + * @param [options.heightReference = HeightReference.NONE] - Determines how the model is drawn relative to terrain. + * @param [options.scene] - Must be passed in for models that use the height reference property. + * @param [options.distanceDisplayCondition] - The condition specifying at what distance from the camera that this model will be displayed. + * @param [options.color = Color.WHITE] - A color that blends with the model's rendered color. + * @param [options.colorBlendMode = ColorBlendMode.HIGHLIGHT] - Defines how the color blends with the model. + * @param [options.colorBlendAmount = 0.5] - Value used to determine the color strength when the colorBlendMode is MIX. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two. + * @param [options.silhouetteColor = Color.RED] - The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts. + * @param [options.silhouetteSize = 0.0] - The size of the silhouette in pixels. + * @param [options.clippingPlanes] - The {@link ClippingPlaneCollection} used to selectively disable rendering the model. + * @param [options.dequantizeInShader = true] - Determines if a {@link https://github.com/google/draco|Draco} encoded model is dequantized on the GPU. This decreases total memory usage for encoded models. + * @param [options.imageBasedLightingFactor = Cartesian2(1.0, 1.0)] - Scales diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox. + * @param [options.lightColor] - The light color when shading the model. When undefined the scene's light color is used instead. + * @param [options.luminanceAtZenith = 0.2] - The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map. + * @param [options.sphericalHarmonicCoefficients] - The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. + * @param [options.specularEnvironmentMaps] - A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps. + * @param [options.credit] - A credit for the data source, which is displayed on the canvas. + * @param [options.backFaceCulling = true] - Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if {@link Model#color} is translucent or {@link Model#silhouetteSize} is greater than 0.0. + */ +export class Model { + constructor(options?: { + gltf?: any | ArrayBuffer | Uint8Array; + basePath?: Resource | string; + show?: boolean; + modelMatrix?: Matrix4; + scale?: number; + minimumPixelSize?: number; + maximumScale?: number; + id?: any; + allowPicking?: boolean; + incrementallyLoadTextures?: boolean; + asynchronous?: boolean; + clampAnimations?: boolean; + shadows?: ShadowMode; + debugShowBoundingVolume?: boolean; + debugWireframe?: boolean; + heightReference?: HeightReference; + scene?: Scene; + distanceDisplayCondition?: DistanceDisplayCondition; + color?: Color; + colorBlendMode?: ColorBlendMode; + colorBlendAmount?: number; + silhouetteColor?: Color; + silhouetteSize?: number; + clippingPlanes?: ClippingPlaneCollection; + dequantizeInShader?: boolean; + imageBasedLightingFactor?: Cartesian2; + lightColor?: Cartesian3; + luminanceAtZenith?: number; + sphericalHarmonicCoefficients?: Cartesian3[]; + specularEnvironmentMaps?: string; + credit?: Credit | string; + backFaceCulling?: boolean; + }); + /** + * Determines if the model primitive will be shown. + */ + show: boolean; + /** + * The silhouette color. + */ + silhouetteColor: Color; + /** + * The size of the silhouette in pixels. + */ + silhouetteSize: number; + /** + * The 4x4 transformation matrix that transforms the model from model to world coordinates. + * When this is the identity matrix, the model is drawn in world coordinates, i.e., Earth's WGS84 coordinates. + * Local reference frames can be used by providing a different transformation matrix, like that returned + * by {@link Transforms.eastNorthUpToFixedFrame}. + * @example + * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0); + * m.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin); + */ + modelMatrix: Matrix4; + /** + * A uniform scale applied to this model before the {@link Model#modelMatrix}. + * Values greater than 1.0 increase the size of the model; values + * less than 1.0 decrease. + */ + scale: number; + /** + * The approximate minimum pixel size of the model regardless of zoom. + * This can be used to ensure that a model is visible even when the viewer + * zooms out. When 0.0, no minimum size is enforced. + */ + minimumPixelSize: number; + /** + * The maximum scale size for a model. This can be used to give + * an upper limit to the {@link Model#minimumPixelSize}, ensuring that the model + * is never an unreasonable scale. + */ + maximumScale: number; + /** + * User-defined object returned when the model is picked. + */ + id: any; + /** + * Returns the height reference of the model + */ + heightReference: HeightReference; + /** + * The currently playing glTF animations. + */ + activeAnimations: ModelAnimationCollection; + /** + * Determines if the model's animations should hold a pose over frames where no keyframes are specified. + */ + clampAnimations: boolean; + /** + * Determines whether the model casts or receives shadows from light sources. + */ + shadows: ShadowMode; + /** + * A color that blends with the model's rendered color. + */ + color: Color; + /** + * Defines how the color blends with the model. + */ + colorBlendMode: ColorBlendMode; + /** + * Value used to determine the color strength when the colorBlendMode is MIX. + * A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with + * any value in-between resulting in a mix of the two. + */ + colorBlendAmount: number; + /** + * Whether to cull back-facing geometry. When true, back face culling is + * determined by the material's doubleSided property; when false, back face + * culling is disabled. Back faces are not culled if {@link Model#color} is + * translucent or {@link Model#silhouetteSize} is greater than 0.0. + */ + backFaceCulling: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. + *

+ * Draws the bounding sphere for each draw command in the model. A glTF primitive corresponds + * to one draw command. A glTF mesh has an array of primitives, often of length one. + *

+ */ + debugShowBoundingVolume: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. + *

+ * Draws the model in wireframe. + *

+ */ + debugWireframe: boolean; + /** + * The object for the glTF JSON, including properties with default values omitted + * from the JSON provided to this model. + */ + readonly gltf: any; + /** + * The base path that paths in the glTF JSON are relative to. The base + * path is the same path as the path containing the .gltf file + * minus the .gltf file, when binary, image, and shader files are + * in the same directory as the .gltf. When this is '', + * the app's base path is used. + */ + readonly basePath: string; + /** + * The model's bounding sphere in its local coordinate system. This does not take into + * account glTF animations and skins nor does it take into account {@link Model#minimumPixelSize}. + * @example + * // Center in WGS84 coordinates + * var center = Cesium.Matrix4.multiplyByPoint(model.modelMatrix, model.boundingSphere.center, new Cesium.Cartesian3()); + */ + readonly boundingSphere: BoundingSphere; + /** + * When true, this model is ready to render, i.e., the external binary, image, + * and shader files were downloaded and the WebGL resources were created. This is set to + * true right before {@link Model#readyPromise} is resolved. + */ + readonly ready: boolean; + /** + * Gets the promise that will be resolved when this model is ready to render, i.e., when the external binary, image, + * and shader files were downloaded and the WebGL resources were created. + *

+ * This promise is resolved at the end of the frame before the first frame the model is rendered in. + *

+ * @example + * // Play all animations at half-speed when the model is ready to render + * Cesium.when(model.readyPromise).then(function(model) { + * model.activeAnimations.addAll({ + * multiplier : 0.5 + * }); + * }).otherwise(function(error){ + * window.alert(error); + * }); + */ + readonly readyPromise: Promise; + /** + * Determines if model WebGL resource creation will be spread out over several frames or + * block until completion once all glTF files are loaded. + */ + readonly asynchronous: boolean; + /** + * When true, each glTF mesh and primitive is pickable with {@link Scene#pick}. When false, GPU memory is saved. + */ + readonly allowPicking: boolean; + /** + * Determine if textures may continue to stream in after the model is loaded. + */ + readonly incrementallyLoadTextures: boolean; + /** + * Return the number of pending texture loads. + */ + readonly pendingTextureLoads: number; + /** + * Gets or sets the condition specifying at what distance from the camera that this model will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; + /** + * The {@link ClippingPlaneCollection} used to selectively disable rendering the model. + */ + clippingPlanes: ClippingPlaneCollection; + /** + * Cesium adds lighting from the earth, sky, atmosphere, and star skybox. This cartesian is used to scale the final + * diffuse and specular lighting contribution from those sources to the final color. A value of 0.0 will disable those light sources. + */ + imageBasedLightingFactor: Cartesian2; + /** + * The light color when shading the model. When undefined the scene's light color is used instead. + *

+ * For example, disabling additional light sources by setting model.imageBasedLightingFactor = new Cesium.Cartesian2(0.0, 0.0) will make the + * model much darker. Here, increasing the intensity of the light source will make the model brighter. + *

+ */ + lightColor: Cartesian3; + /** + * The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map. + * This is used when {@link Model#specularEnvironmentMaps} and {@link Model#sphericalHarmonicCoefficients} are not defined. + */ + luminanceAtZenith: number; + /** + * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. When undefined, a diffuse irradiance + * computed from the atmosphere color is used. + *

+ * There are nine Cartesian3 coefficients. + * The order of the coefficients is: L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22 + *

+ * + * These values can be obtained by preprocessing the environment map using the cmgen tool of + * {@link https://github.com/google/filament/releases|Google's Filament project}. This will also generate a KTX file that can be + * supplied to {@link Model#specularEnvironmentMaps}. + */ + sphericalHarmonicCoefficients: Cartesian3[]; + /** + * A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps. + */ + specularEnvironmentMaps: string; + /** + * Gets the credit that will be displayed for the model + */ + credit: Credit; + /** + * Determines if silhouettes are supported. + * @param scene - The scene. + * @returns true if silhouettes are supported; otherwise, returns false + */ + static silhouetteSupported(scene: Scene): boolean; + /** + *

+ * Creates a model from a glTF asset. When the model is ready to render, i.e., when the external binary, image, + * and shader files are downloaded and the WebGL resources are created, the {@link Model#readyPromise} is resolved. + *

+ *

+ * The model can be a traditional glTF asset with a .gltf extension or a Binary glTF using the .glb extension. + *

+ *

+ * Cesium supports glTF assets with the following extensions: + *

    + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/README.md|KHR_binary_glTF (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_materials_common/README.md|KHR_materials_common (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/WEB3D_quantized_attributes/README.md|WEB3D_quantized_attributes (glTF 1.0)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/AGI_articulations/README.md|AGI_articulations} + *
  • + * {@link https://github.com/KhronosGroup/glTF/pull/1302|KHR_blend (draft)} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md|KHR_draco_mesh_compression} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/README.md|KHR_materials_pbrSpecularGlossiness} + *
  • + * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit/README.md|KHR_materials_unlit} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_techniques_webgl/README.md|KHR_techniques_webgl} + *
  • + * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform} + *
  • + *
+ *

+ *

+ * For high-precision rendering, Cesium supports the {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/CESIUM_RTC/README.md|CESIUM_RTC} extension, which introduces the + * CESIUM_RTC_MODELVIEW parameter semantic that says the node is in WGS84 coordinates translated + * relative to a local origin. + *

+ * @example + * // Example 1. Create a model from a glTF asset + * var model = scene.primitives.add(Cesium.Model.fromGltf({ + * url : './duck/duck.gltf' + * })); + * @example + * // Example 2. Create model and provide all properties and events + * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0); + * var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin); + * + * var model = scene.primitives.add(Cesium.Model.fromGltf({ + * url : './duck/duck.gltf', + * show : true, // default + * modelMatrix : modelMatrix, + * scale : 2.0, // double size + * minimumPixelSize : 128, // never smaller than 128 pixels + * maximumScale: 20000, // never larger than 20000 * model size (overrides minimumPixelSize) + * allowPicking : false, // not pickable + * debugShowBoundingVolume : false, // default + * debugWireframe : false + * })); + * + * model.readyPromise.then(function(model) { + * // Play all animations when the model is ready to render + * model.activeAnimations.addAll(); + * }); + * @param options - Object with the following properties: + * @param options.url - The url to the .gltf file. + * @param [options.basePath] - The base path that paths in the glTF JSON are relative to. + * @param [options.show = true] - Determines if the model primitive will be shown. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms the model from model to world coordinates. + * @param [options.scale = 1.0] - A uniform scale applied to this model. + * @param [options.minimumPixelSize = 0.0] - The approximate minimum pixel size of the model regardless of zoom. + * @param [options.maximumScale] - The maximum scale for the model. + * @param [options.id] - A user-defined object to return when the model is picked with {@link Scene#pick}. + * @param [options.allowPicking = true] - When true, each glTF mesh and primitive is pickable with {@link Scene#pick}. + * @param [options.incrementallyLoadTextures = true] - Determine if textures may continue to stream in after the model is loaded. + * @param [options.asynchronous = true] - Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded. + * @param [options.clampAnimations = true] - Determines if the model's animations should hold a pose over frames where no keyframes are specified. + * @param [options.shadows = ShadowMode.ENABLED] - Determines whether the model casts or receives shadows from light sources. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Draws the bounding sphere for each draw command in the model. + * @param [options.debugWireframe = false] - For debugging only. Draws the model in wireframe. + * @param [options.heightReference = HeightReference.NONE] - Determines how the model is drawn relative to terrain. + * @param [options.scene] - Must be passed in for models that use the height reference property. + * @param [options.distanceDisplayCondition] - The condition specifying at what distance from the camera that this model will be displayed. + * @param [options.color = Color.WHITE] - A color that blends with the model's rendered color. + * @param [options.colorBlendMode = ColorBlendMode.HIGHLIGHT] - Defines how the color blends with the model. + * @param [options.colorBlendAmount = 0.5] - Value used to determine the color strength when the colorBlendMode is MIX. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two. + * @param [options.silhouetteColor = Color.RED] - The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts. + * @param [options.silhouetteSize = 0.0] - The size of the silhouette in pixels. + * @param [options.clippingPlanes] - The {@link ClippingPlaneCollection} used to selectively disable rendering the model. + * @param [options.dequantizeInShader = true] - Determines if a {@link https://github.com/google/draco|Draco} encoded model is dequantized on the GPU. This decreases total memory usage for encoded models. + * @param [options.credit] - A credit for the model, which is displayed on the canvas. + * @param [options.backFaceCulling = true] - Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if {@link Model#color} is translucent or {@link Model#silhouetteSize} is greater than 0.0. + * @returns The newly created model. + */ + static fromGltf(options: { + url: Resource | string; + basePath?: Resource | string; + show?: boolean; + modelMatrix?: Matrix4; + scale?: number; + minimumPixelSize?: number; + maximumScale?: number; + id?: any; + allowPicking?: boolean; + incrementallyLoadTextures?: boolean; + asynchronous?: boolean; + clampAnimations?: boolean; + shadows?: ShadowMode; + debugShowBoundingVolume?: boolean; + debugWireframe?: boolean; + heightReference?: HeightReference; + scene?: Scene; + distanceDisplayCondition?: DistanceDisplayCondition; + color?: Color; + colorBlendMode?: ColorBlendMode; + colorBlendAmount?: number; + silhouetteColor?: Color; + silhouetteSize?: number; + clippingPlanes?: ClippingPlaneCollection; + dequantizeInShader?: boolean; + credit?: Credit | string; + backFaceCulling?: boolean; + }): Model; + /** + * Returns the glTF node with the given name property. This is used to + * modify a node's transform for animation outside of glTF animations. + * @example + * // Apply non-uniform scale to node LOD3sp + * var node = model.getNode('LOD3sp'); + * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix); + * @param name - The glTF name of the node. + * @returns The node or undefined if no node with name exists. + */ + getNode(name: string): ModelNode; + /** + * Returns the glTF mesh with the given name property. + * @param name - The glTF name of the mesh. + * @returns The mesh or undefined if no mesh with name exists. + */ + getMesh(name: string): ModelMesh; + /** + * Returns the glTF material with the given name property. + * @param name - The glTF name of the material. + * @returns The material or undefined if no material with name exists. + */ + getMaterial(name: string): ModelMaterial; + /** + * Sets the current value of an articulation stage. After setting one or multiple stage values, call + * Model.applyArticulations() to cause the node matrices to be recalculated. + * @param articulationStageKey - The name of the articulation, a space, and the name of the stage. + * @param value - The numeric value of this stage of the articulation. + */ + setArticulationStage(articulationStageKey: string, value: number): void; + /** + * Applies any modified articulation stages to the matrix of each node that participates + * in any articulation. Note that this will overwrite any nodeTransformations on participating nodes. + */ + applyArticulations(): void; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + * get the draw commands needed to render this primitive. + *

+ * Do not call this function directly. This is documented just to + * list the exceptions that may be propagated when the scene is rendered: + *

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. + *

+ * If this object was destroyed, it should not be used; calling any function other than + * isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + * release of WebGL resources, instead of relying on the garbage collector to destroy this object. + *

+ * Once an object is destroyed, it should not be used; calling any function other than + * isDestroyed will result in a {@link DeveloperError} exception. Therefore, + * assign the return value (undefined) to the object as done in the example. + * @example + * model = model && model.destroy(); + */ + destroy(): void; +} + +/** + * An active glTF animation. A glTF asset can contain animations. An active animation +is an animation that is currently playing or scheduled to be played because it was +added to a model's {@link ModelAnimationCollection}. An active animation is an +instance of an animation; for example, there can be multiple active animations +for the same glTF animation, each with a different start time. +

+Create this by calling {@link ModelAnimationCollection#add}. +

+ */ +export class ModelAnimation { + constructor(); + /** + * When true, the animation is removed after it stops playing. + This is slightly more efficient that not removing it, but if, for example, + time is reversed, the animation is not played again. + */ + removeOnStop: boolean; + /** + * The event fired when this animation is started. This can be used, for + example, to play a sound or start a particle system, when the animation starts. +

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * animation.start.addEventListener(function(model, animation) { + console.log('Animation started: ' + animation.name); + }); + */ + start: Event; + /** + * The event fired when on each frame when this animation is updated. The + current time of the animation, relative to the glTF animation time span, is + passed to the event, which allows, for example, starting new animations at a + specific time relative to a playing animation. +

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * animation.update.addEventListener(function(model, animation, time) { + console.log('Animation updated: ' + animation.name + '. glTF animation time: ' + time); + }); + */ + update: Event; + /** + * The event fired when this animation is stopped. This can be used, for + example, to play a sound or start a particle system, when the animation stops. +

+ This event is fired at the end of the frame after the scene is rendered. +

+ * @example + * animation.stop.addEventListener(function(model, animation) { + console.log('Animation stopped: ' + animation.name); + }); + */ + stop: Event; + /** + * The glTF animation name that identifies this animation. + */ + readonly name: string; + /** + * The scene time to start playing this animation. When this is undefined, + the animation starts at the next frame. + */ + readonly startTime: JulianDate; + /** + * The delay, in seconds, from {@link ModelAnimation#startTime} to start playing. + */ + readonly delay: number; + /** + * The scene time to stop playing this animation. When this is undefined, + the animation is played for its full duration and perhaps repeated depending on + {@link ModelAnimation#loop}. + */ + readonly stopTime: JulianDate; + /** + * Values greater than 1.0 increase the speed that the animation is played relative + to the scene clock speed; values less than 1.0 decrease the speed. A value of + 1.0 plays the animation at the speed in the glTF animation mapped to the scene + clock speed. For example, if the scene is played at 2x real-time, a two-second glTF animation + will play in one second even if multiplier is 1.0. + */ + readonly multiplier: number; + /** + * When true, the animation is played in reverse. + */ + readonly reverse: boolean; + /** + * Determines if and how the animation is looped. + */ + readonly loop: ModelAnimationLoop; +} + +/** + * A collection of active model animations. Access this using {@link Model#activeAnimations}. + */ +export class ModelAnimationCollection { + constructor(); + /** + * The event fired when an animation is added to the collection. This can be used, for + example, to keep a UI in sync. + * @example + * model.activeAnimations.animationAdded.addEventListener(function(model, animation) { + console.log('Animation added: ' + animation.name); + }); + */ + animationAdded: Event; + /** + * The event fired when an animation is removed from the collection. This can be used, for + example, to keep a UI in sync. + * @example + * model.activeAnimations.animationRemoved.addEventListener(function(model, animation) { + console.log('Animation removed: ' + animation.name); + }); + */ + animationRemoved: Event; + /** + * The number of animations in the collection. + */ + readonly length: number; + /** + * Creates and adds an animation with the specified initial properties to the collection. +

+ This raises the {@link ModelAnimationCollection#animationAdded} event so, for example, a UI can stay in sync. +

+ * @example + * // Example 1. Add an animation by name + model.activeAnimations.add({ + name : 'animation name' + }); + + // Example 2. Add an animation by index + model.activeAnimations.add({ + index : 0 + }); + * @example + * // Example 3. Add an animation and provide all properties and events + var startTime = Cesium.JulianDate.now(); + + var animation = model.activeAnimations.add({ + name : 'another animation name', + startTime : startTime, + delay : 0.0, // Play at startTime (default) + stopTime : Cesium.JulianDate.addSeconds(startTime, 4.0, new Cesium.JulianDate()), + removeOnStop : false, // Do not remove when animation stops (default) + multiplier : 2.0, // Play at double speed + reverse : true, // Play in reverse + loop : Cesium.ModelAnimationLoop.REPEAT // Loop the animation + }); + + animation.start.addEventListener(function(model, animation) { + console.log('Animation started: ' + animation.name); + }); + animation.update.addEventListener(function(model, animation, time) { + console.log('Animation updated: ' + animation.name + '. glTF animation time: ' + time); + }); + animation.stop.addEventListener(function(model, animation) { + console.log('Animation stopped: ' + animation.name); + }); + * @param options - Object with the following properties: + * @param [options.name] - The glTF animation name that identifies the animation. Must be defined if options.index is undefined. + * @param [options.index] - The glTF animation index that identifies the animation. Must be defined if options.name is undefined. + * @param [options.startTime] - The scene time to start playing the animation. When this is undefined, the animation starts at the next frame. + * @param [options.delay = 0.0] - The delay, in seconds, from startTime to start playing. + * @param [options.stopTime] - The scene time to stop playing the animation. When this is undefined, the animation is played for its full duration. + * @param [options.removeOnStop = false] - When true, the animation is removed after it stops playing. + * @param [options.multiplier = 1.0] - Values greater than 1.0 increase the speed that the animation is played relative to the scene clock speed; values less than 1.0 decrease the speed. + * @param [options.reverse = false] - When true, the animation is played in reverse. + * @param [options.loop = ModelAnimationLoop.NONE] - Determines if and how the animation is looped. + * @returns The animation that was added to the collection. + */ + add(options: { + name?: string; + index?: number; + startTime?: JulianDate; + delay?: number; + stopTime?: JulianDate; + removeOnStop?: boolean; + multiplier?: number; + reverse?: boolean; + loop?: ModelAnimationLoop; + }): ModelAnimation; + /** + * Creates and adds an animation with the specified initial properties to the collection + for each animation in the model. +

+ This raises the {@link ModelAnimationCollection#animationAdded} event for each model so, for example, a UI can stay in sync. +

+ * @example + * model.activeAnimations.addAll({ + multiplier : 0.5, // Play at half-speed + loop : Cesium.ModelAnimationLoop.REPEAT // Loop the animations + }); + * @param [options] - Object with the following properties: + * @param [options.startTime] - The scene time to start playing the animations. When this is undefined, the animations starts at the next frame. + * @param [options.delay = 0.0] - The delay, in seconds, from startTime to start playing. + * @param [options.stopTime] - The scene time to stop playing the animations. When this is undefined, the animations are played for its full duration. + * @param [options.removeOnStop = false] - When true, the animations are removed after they stop playing. + * @param [options.multiplier = 1.0] - Values greater than 1.0 increase the speed that the animations play relative to the scene clock speed; values less than 1.0 decrease the speed. + * @param [options.reverse = false] - When true, the animations are played in reverse. + * @param [options.loop = ModelAnimationLoop.NONE] - Determines if and how the animations are looped. + * @returns An array of {@link ModelAnimation} objects, one for each animation added to the collection. If there are no glTF animations, the array is empty. + */ + addAll(options?: { + startTime?: JulianDate; + delay?: number; + stopTime?: JulianDate; + removeOnStop?: boolean; + multiplier?: number; + reverse?: boolean; + loop?: ModelAnimationLoop; + }): ModelAnimation[]; + /** + * Removes an animation from the collection. +

+ This raises the {@link ModelAnimationCollection#animationRemoved} event so, for example, a UI can stay in sync. +

+

+ An animation can also be implicitly removed from the collection by setting {@link ModelAnimation#removeOnStop} to + true. The {@link ModelAnimationCollection#animationRemoved} event is still fired when the animation is removed. +

+ * @example + * var a = model.activeAnimations.add({ + name : 'animation name' + }); + model.activeAnimations.remove(a); // Returns true + * @param animation - The animation to remove. + * @returns true if the animation was removed; false if the animation was not found in the collection. + */ + remove(animation: ModelAnimation): boolean; + /** + * Removes all animations from the collection. +

+ This raises the {@link ModelAnimationCollection#animationRemoved} event for each + animation so, for example, a UI can stay in sync. +

+ */ + removeAll(): void; + /** + * Determines whether this collection contains a given animation. + * @param animation - The animation to check for. + * @returns true if this collection contains the animation, false otherwise. + */ + contains(animation: ModelAnimation): boolean; + /** + * Returns the animation in the collection at the specified index. Indices are zero-based + and increase as animations are added. Removing an animation shifts all animations after + it to the left, changing their indices. This function is commonly used to iterate over + all the animations in the collection. + * @example + * // Output the names of all the animations in the collection. + var animations = model.activeAnimations; + var length = animations.length; + for (var i = 0; i < length; ++i) { + console.log(animations.get(i).name); + } + * @param index - The zero-based index of the animation. + * @returns The animation at the specified index. + */ + get(index: number): ModelAnimation; +} + +/** + * Determines if and how a glTF animation is looped. + */ +export enum ModelAnimationLoop { + /** + * Play the animation once; do not loop it. + */ + NONE = 0, + /** + * Loop the animation playing it from the start immediately after it stops. + */ + REPEAT = 1, + /** + * Loop the animation. First, playing it forward, then in reverse, then forward, and so on. + */ + MIRRORED_REPEAT = 2 +} + +/** + * A model's material with modifiable parameters. A glTF material +contains parameters defined by the material's technique with values +defined by the technique and potentially overridden by the material. +This class allows changing these values at runtime. +

+Use {@link Model#getMaterial} to create an instance. +

+ */ +export class ModelMaterial { + constructor(); + /** + * The value of the name property of this material. + */ + readonly name: string; + /** + * The index of the material. + */ + readonly id: string; + /** + * Assigns a value to a material parameter. The type for value + depends on the glTF type of the parameter. It will be a floating-point + number, Cartesian, or matrix. + * @example + * material.setValue('diffuse', new Cesium.Cartesian4(1.0, 0.0, 0.0, 1.0)); // vec4 + material.setValue('shininess', 256.0); // scalar + * @param name - The name of the parameter. + * @param [value] - The value to assign to the parameter. + */ + setValue(name: string, value?: any): void; + /** + * Returns the value of the parameter with the given name. The type of the + returned object depends on the glTF type of the parameter. It will be a floating-point + number, Cartesian, or matrix. + * @param name - The name of the parameter. + * @returns The value of the parameter or undefined if the parameter does not exist. + */ + getValue(name: string): any; +} + +/** + * A model's mesh and its materials. +

+Use {@link Model#getMesh} to create an instance. +

+ */ +export class ModelMesh { + constructor(); + /** + * The value of the name property of this mesh. + */ + readonly name: string; + /** + * The index of the mesh. + */ + readonly id: string; + /** + * An array of {@link ModelMaterial} instances indexed by the mesh's + primitive indices. + */ + readonly materials: ModelMaterial[]; +} + +/** + * A model node with a transform for user-defined animations. A glTF asset can +contain animations that target a node's transform. This class allows +changing a node's transform externally so animation can be driven by another +source, not just an animation in the glTF asset. +

+Use {@link Model#getNode} to create an instance. +

+ * @example + * var node = model.getNode('LOD3sp'); +node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix); + */ +export class ModelNode { + constructor(); + /** + * The value of the name property of this node. + */ + readonly name: string; + /** + * The index of the node. + */ + readonly id: string; + /** + * Determines if this node and its children will be shown. + */ + show: boolean; + /** + * The node's 4x4 matrix transform from its local coordinates to + its parent's. +

+ For changes to take effect, this property must be assigned to; + setting individual elements of the matrix will not work. +

+ */ + matrix: Matrix4; + /** + * Gets the node's original 4x4 matrix transform from its local coordinates to + its parent's, without any node transformations or articulations applied. + */ + originalMatrix: Matrix4; +} + +/** + * Draws the Moon in 3D. + * @example + * scene.moon = new Cesium.Moon(); + * @param [options] - Object with the following properties: + * @param [options.show = true] - Determines whether the moon will be rendered. + * @param [options.textureUrl = buildModuleUrl('Assets/Textures/moonSmall.jpg')] - The moon texture. + * @param [options.ellipsoid = Ellipsoid.MOON] - The moon ellipsoid. + * @param [options.onlySunLighting = true] - Use the sun as the only light source. + */ +export class Moon { + constructor(options?: { + show?: boolean; + textureUrl?: string; + ellipsoid?: Ellipsoid; + onlySunLighting?: boolean; + }); + /** + * Determines if the moon will be shown. + */ + show: boolean; + /** + * The moon texture. + */ + textureUrl: string; + /** + * Use the sun as the only light source. + */ + onlySunLighting: boolean; + /** + * Get the ellipsoid that defines the shape of the moon. + */ + readonly ellipsoid: Ellipsoid; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * moon = moon && moon.destroy(); + */ + destroy(): void; +} + +/** + * A {@link TileDiscardPolicy} specifying that tile images should never be discard. + */ +export class NeverTileDiscardPolicy { + constructor(); + /** + * Determines if the discard policy is ready to process images. + * @returns True if the discard policy is ready to process images; otherwise, false. + */ + isReady(): boolean; + /** + * Given a tile image, decide whether to discard that image. + * @param image - An image to test. + * @returns True if the image should be discarded; otherwise, false. + */ + shouldDiscardImage(image: HTMLImageElement): boolean; +} + +export namespace OpenStreetMapImageryProvider { + /** + * Initialization options for the OpenStreetMapImageryProvider constructor + * @property [url = 'https://a.tile.openstreetmap.org'] - The OpenStreetMap server url. + * @property [fileExtension = 'png'] - The file extension for images on the server. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle of the layer. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [credit = 'MapQuest, Open Street Map and contributors, CC-BY-SA'] - A credit for the data source, which is displayed on the canvas. + */ + type ConstructorOptions = { + url?: string; + fileExtension?: string; + rectangle?: Rectangle; + minimumLevel?: number; + maximumLevel?: number; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + }; +} + +/** + * An imagery provider that provides tiled imagery hosted by OpenStreetMap +or another provider of Slippy tiles. The default url connects to OpenStreetMap's volunteer-run +servers, so you must conform to their +{@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. + * @example + * var osm = new Cesium.OpenStreetMapImageryProvider({ + url : 'https://a.tile.openstreetmap.org/' +}); + * @param options - Object describing initialization options + */ +export class OpenStreetMapImageryProvider extends UrlTemplateImageryProvider { + constructor(options: OpenStreetMapImageryProvider.ConstructorOptions); +} + +/** + * A particle emitted by a {@link ParticleSystem}. + * @param options - An object with the following properties: + * @param [options.mass = 1.0] - The mass of the particle in kilograms. + * @param [options.position = Cartesian3.ZERO] - The initial position of the particle in world coordinates. + * @param [options.velocity = Cartesian3.ZERO] - The velocity vector of the particle in world coordinates. + * @param [options.life = Number.MAX_VALUE] - The life of the particle in seconds. + * @param [options.image] - The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard. + * @param [options.startColor = Color.WHITE] - The color of a particle when it is born. + * @param [options.endColor = Color.WHITE] - The color of a particle when it dies. + * @param [options.startScale = 1.0] - The scale of the particle when it is born. + * @param [options.endScale = 1.0] - The scale of the particle when it dies. + * @param [options.imageSize = new Cartesian2(1.0, 1.0)] - The dimensions, width by height, to scale the particle image in pixels. + */ +export class Particle { + constructor(options: { + mass?: number; + position?: Cartesian3; + velocity?: Cartesian3; + life?: number; + image?: any; + startColor?: Color; + endColor?: Color; + startScale?: number; + endScale?: number; + imageSize?: Cartesian2; + }); + /** + * The mass of the particle in kilograms. + */ + mass: number; + /** + * The positon of the particle in world coordinates. + */ + position: Cartesian3; + /** + * The velocity of the particle in world coordinates. + */ + velocity: Cartesian3; + /** + * The life of the particle in seconds. + */ + life: number; + /** + * The image to use for the particle. + */ + image: any; + /** + * The color of the particle when it is born. + */ + startColor: Color; + /** + * The color of the particle when it dies. + */ + endColor: Color; + /** + * the scale of the particle when it is born. + */ + startScale: number; + /** + * The scale of the particle when it dies. + */ + endScale: number; + /** + * The dimensions, width by height, to scale the particle image in pixels. + */ + imageSize: Cartesian2; + /** + * Gets the age of the particle in seconds. + */ + age: number; + /** + * Gets the age normalized to a value in the range [0.0, 1.0]. + */ + normalizedAge: number; +} + +/** + * Represents a burst of {@link Particle}s from a {@link ParticleSystem} at a given time in the systems lifetime. + * @param [options] - An object with the following properties: + * @param [options.time = 0.0] - The time in seconds after the beginning of the particle system's lifetime that the burst will occur. + * @param [options.minimum = 0.0] - The minimum number of particles emmitted in the burst. + * @param [options.maximum = 50.0] - The maximum number of particles emitted in the burst. + */ +export class ParticleBurst { + constructor(options?: { + time?: number; + minimum?: number; + maximum?: number; + }); + /** + * The time in seconds after the beginning of the particle system's lifetime that the burst will occur. + */ + time: number; + /** + * The minimum number of particles emitted. + */ + minimum: number; + /** + * The maximum number of particles emitted. + */ + maximum: number; + /** + * true if the burst has been completed; false otherwise. + */ + complete: boolean; +} + +/** + *

+An object that initializes a {@link Particle} from a {@link ParticleSystem}. +

+

+This type describes an interface and is not intended to be instantiated directly. +

+ */ +export class ParticleEmitter { + constructor(); +} + +/** + * A ParticleSystem manages the updating and display of a collection of particles. + * @param [options] - Object with the following properties: + * @param [options.show = true] - Whether to display the particle system. + * @param [options.updateCallback] - The callback function to be called each frame to update a particle. + * @param [options.emitter = new CircleEmitter(0.5)] - The particle emitter for this system. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms the particle system from model to world coordinates. + * @param [options.emitterModelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system. + * @param [options.emissionRate = 5] - The number of particles to emit per second. + * @param [options.bursts] - An array of {@link ParticleBurst}, emitting bursts of particles at periodic times. + * @param [options.loop = true] - Whether the particle system should loop its bursts when it is complete. + * @param [options.scale = 1.0] - Sets the scale to apply to the image of the particle for the duration of its particleLife. + * @param [options.startScale] - The initial scale to apply to the image of the particle at the beginning of its life. + * @param [options.endScale] - The final scale to apply to the image of the particle at the end of its life. + * @param [options.color = Color.WHITE] - Sets the color of a particle for the duration of its particleLife. + * @param [options.startColor] - The color of the particle at the beginning of its life. + * @param [options.endColor] - The color of the particle at the end of its life. + * @param [options.image] - The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard. + * @param [options.imageSize = new Cartesian2(1.0, 1.0)] - If set, overrides the minimumImageSize and maximumImageSize inputs that scale the particle image's dimensions in pixels. + * @param [options.minimumImageSize] - Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels. + * @param [options.maximumImageSize] - Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels. + * @param [options.sizeInMeters] - Sets if the size of particles is in meters or pixels. true to size the particles in meters; otherwise, the size is in pixels. + * @param [options.speed = 1.0] - If set, overrides the minimumSpeed and maximumSpeed inputs with this value. + * @param [options.minimumSpeed] - Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen. + * @param [options.maximumSpeed] - Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen. + * @param [options.lifetime = Number.MAX_VALUE] - How long the particle system will emit particles, in seconds. + * @param [options.particleLife = 5.0] - If set, overrides the minimumParticleLife and maximumParticleLife inputs with this value. + * @param [options.minimumParticleLife] - Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen. + * @param [options.maximumParticleLife] - Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen. + * @param [options.mass = 1.0] - Sets the minimum and maximum mass of particles in kilograms. + * @param [options.minimumMass] - Sets the minimum bound for the mass of a particle in kilograms. A particle's actual mass will be chosen as a random amount above this value. + * @param [options.maximumMass] - Sets the maximum mass of particles in kilograms. A particle's actual mass will be chosen as a random amount below this value. + */ +export class ParticleSystem { + constructor(options?: { + show?: boolean; + updateCallback?: ParticleSystem.updateCallback; + emitter?: ParticleEmitter; + modelMatrix?: Matrix4; + emitterModelMatrix?: Matrix4; + emissionRate?: number; + bursts?: ParticleBurst[]; + loop?: boolean; + scale?: number; + startScale?: number; + endScale?: number; + color?: Color; + startColor?: Color; + endColor?: Color; + image?: any; + imageSize?: Cartesian2; + minimumImageSize?: Cartesian2; + maximumImageSize?: Cartesian2; + sizeInMeters?: boolean; + speed?: number; + minimumSpeed?: number; + maximumSpeed?: number; + lifetime?: number; + particleLife?: number; + minimumParticleLife?: number; + maximumParticleLife?: number; + mass?: number; + minimumMass?: number; + maximumMass?: number; + }); + /** + * Whether to display the particle system. + */ + show: boolean; + /** + * An array of force callbacks. The callback is passed a {@link Particle} and the difference from the last time + */ + updateCallback: ParticleSystem.updateCallback; + /** + * Whether the particle system should loop it's bursts when it is complete. + */ + loop: boolean; + /** + * The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard. + */ + image: any; + /** + * The particle emitter for this + */ + emitter: ParticleEmitter; + /** + * An array of {@link ParticleBurst}, emitting bursts of particles at periodic times. + */ + bursts: ParticleBurst[]; + /** + * The 4x4 transformation matrix that transforms the particle system from model to world coordinates. + */ + modelMatrix: Matrix4; + /** + * The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system. + */ + emitterModelMatrix: Matrix4; + /** + * The color of the particle at the beginning of its life. + */ + startColor: Color; + /** + * The color of the particle at the end of its life. + */ + endColor: Color; + /** + * The initial scale to apply to the image of the particle at the beginning of its life. + */ + startScale: number; + /** + * The final scale to apply to the image of the particle at the end of its life. + */ + endScale: number; + /** + * The number of particles to emit per second. + */ + emissionRate: number; + /** + * Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen. + */ + minimumSpeed: number; + /** + * Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen. + */ + maximumSpeed: number; + /** + * Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen. + */ + minimumParticleLife: number; + /** + * Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen. + */ + maximumParticleLife: number; + /** + * Sets the minimum mass of particles in kilograms. + */ + minimumMass: number; + /** + * Sets the maximum mass of particles in kilograms. + */ + maximumMass: number; + /** + * Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels. + */ + minimumImageSize: Cartesian2; + /** + * Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels. + */ + maximumImageSize: Cartesian2; + /** + * Gets or sets if the particle size is in meters or pixels. true to size particles in meters; otherwise, the size is in pixels. + */ + sizeInMeters: boolean; + /** + * How long the particle system will emit particles, in seconds. + */ + lifetime: number; + /** + * Fires an event when the particle system has reached the end of its lifetime. + */ + complete: Event; + /** + * When true, the particle system has reached the end of its lifetime; false otherwise. + */ + isComplete: boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + */ + destroy(): void; +} + +export namespace ParticleSystem { + /** + * A function used to modify attributes of the particle at each time step. This can include force modifications, + color, sizing, etc. + * @example + * function applyGravity(particle, dt) { + var position = particle.position; + var gravityVector = Cesium.Cartesian3.normalize(position, new Cesium.Cartesian3()); + Cesium.Cartesian3.multiplyByScalar(gravityVector, GRAVITATIONAL_CONSTANT * dt, gravityVector); + particle.velocity = Cesium.Cartesian3.add(particle.velocity, gravityVector, particle.velocity); + } + * @param particle - The particle being updated. + * @param dt - The time in seconds since the last update. + */ + type updateCallback = (particle: Particle, dt: number) => void; +} + +/** + * An appearance for {@link GeometryInstance} instances with color attributes. +This allows several geometry instances, each with a different color, to +be drawn with the same {@link Primitive} as shown in the second example below. + * @example + * // A solid white line segment +var primitive = new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : new Cesium.SimplePolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 5.0, 0.0 + ]) + }), + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0)) + } + }), + appearance : new Cesium.PerInstanceColorAppearance({ + flat : true, + translucent : false + }) +}); + +// Two rectangles in a primitive, each with a different color +var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.RectangleGeometry({ + rectangle : Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0) + }), + attributes : { + color : new Cesium.ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 0.5) + } +}); + +var anotherInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.RectangleGeometry({ + rectangle : Cesium.Rectangle.fromDegrees(0.0, 40.0, 10.0, 50.0) + }), + attributes : { + color : new Cesium.ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 0.5) + } +}); + +var rectanglePrimitive = new Cesium.Primitive({ + geometryInstances : [instance, anotherInstance], + appearance : new Cesium.PerInstanceColorAppearance() +}); + * @param [options] - Object with the following properties: + * @param [options.flat = false] - When true, flat shading is used in the fragment shader, which means lighting is not taking into account. + * @param [options.faceForward = !options.closed] - When true, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}. + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link PerInstanceColorAppearance#renderState} has alpha blending enabled. + * @param [options.closed = false] - When true, the geometry is expected to be closed so {@link PerInstanceColorAppearance#renderState} has backface culling enabled. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class PerInstanceColorAppearance { + constructor(options?: { + flat?: boolean; + faceForward?: boolean; + translucent?: boolean; + closed?: boolean; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * This property is part of the {@link Appearance} interface, but is not + used by {@link PerInstanceColorAppearance} since a fully custom fragment shader is used. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent so + {@link PerInstanceColorAppearance#renderState} has alpha blending enabled. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. +

+ The render state can be explicitly defined when constructing a {@link PerInstanceColorAppearance} + instance, or it is set implicitly via {@link PerInstanceColorAppearance#translucent} + and {@link PerInstanceColorAppearance#closed}. +

+ */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed so + {@link PerInstanceColorAppearance#renderState} has backface culling enabled. + If the viewer enters the geometry, it will not be visible. + */ + readonly closed: boolean; + /** + * The {@link VertexFormat} that this appearance instance is compatible with. + A geometry can have more vertex attributes and still be compatible - at a + potential performance cost - but it can't have less. + */ + readonly vertexFormat: VertexFormat; + /** + * When true, flat shading is used in the fragment shader, + which means lighting is not taking into account. + */ + readonly flat: boolean; + /** + * When true, the fragment shader flips the surface normal + as needed to ensure that the normal faces the viewer to avoid + dark spots. This is useful when both sides of a geometry should be + shaded like {@link WallGeometry}. + */ + readonly faceForward: boolean; + /** + * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances + are compatible with. This requires only position and normal + attributes. + */ + static readonly VERTEX_FORMAT: VertexFormat; + /** + * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances + are compatible with when {@link PerInstanceColorAppearance#flat} is true. + This requires only a position attribute. + */ + static readonly FLAT_VERTEX_FORMAT: VertexFormat; + /** + * Procedurally creates the full GLSL fragment shader source. For {@link PerInstanceColorAppearance}, + this is derived from {@link PerInstanceColorAppearance#fragmentShaderSource}, {@link PerInstanceColorAppearance#flat}, + and {@link PerInstanceColorAppearance#faceForward}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link PerInstanceColorAppearance#translucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +/** + * Options for performing point attenuation based on geometric error when rendering +point clouds using 3D Tiles. + * @param [options] - Object with the following properties: + * @param [options.attenuation = false] - Perform point attenuation based on geometric error. + * @param [options.geometricErrorScale = 1.0] - Scale to be applied to each tile's geometric error. + * @param [options.maximumAttenuation] - Maximum attenuation in pixels. Defaults to the Cesium3DTileset's maximumScreenSpaceError. + * @param [options.baseResolution] - Average base resolution for the dataset in meters. Substitute for Geometric Error when not available. + * @param [options.eyeDomeLighting = true] - When true, use eye dome lighting when drawing with point attenuation. + * @param [options.eyeDomeLightingStrength = 1.0] - Increasing this value increases contrast on slopes and edges. + * @param [options.eyeDomeLightingRadius = 1.0] - Increase the thickness of contours from eye dome lighting. + * @param [options.backFaceCulling = false] - Determines whether back-facing points are hidden. This option works only if data has normals included. + * @param [options.normalShading = true] - Determines whether a point cloud that contains normals is shaded by the scene's light source. + */ +export class PointCloudShading { + constructor(options?: { + attenuation?: boolean; + geometricErrorScale?: number; + maximumAttenuation?: number; + baseResolution?: number; + eyeDomeLighting?: boolean; + eyeDomeLightingStrength?: number; + eyeDomeLightingRadius?: number; + backFaceCulling?: boolean; + normalShading?: boolean; + }); + /** + * Perform point attenuation based on geometric error. + */ + attenuation: boolean; + /** + * Scale to be applied to the geometric error before computing attenuation. + */ + geometricErrorScale: number; + /** + * Maximum point attenuation in pixels. If undefined, the Cesium3DTileset's maximumScreenSpaceError will be used. + */ + maximumAttenuation: number; + /** + * Average base resolution for the dataset in meters. + Used in place of geometric error when geometric error is 0. + If undefined, an approximation will be computed for each tile that has geometric error of 0. + */ + baseResolution: number; + /** + * Use eye dome lighting when drawing with point attenuation + Requires support for EXT_frag_depth, OES_texture_float, and WEBGL_draw_buffers extensions in WebGL 1.0, + otherwise eye dome lighting is ignored. + */ + eyeDomeLighting: boolean; + /** + * Eye dome lighting strength (apparent contrast) + */ + eyeDomeLightingStrength: number; + /** + * Thickness of contours from eye dome lighting + */ + eyeDomeLightingRadius: number; + /** + * Determines whether back-facing points are hidden. + This option works only if data has normals included. + */ + backFaceCulling: boolean; + /** + * Determines whether a point cloud that contains normals is shaded by the scene's light source. + */ + normalShading: boolean; + /** + * Determines if point cloud shading is supported. + * @param scene - The scene. + * @returns true if point cloud shading is supported; otherwise, returns false + */ + static isSupported(scene: Scene): boolean; +} + +/** + * A graphical point positioned in the 3D scene, that is created +and rendered using a {@link PointPrimitiveCollection}. A point is created and its initial +properties are set by calling {@link PointPrimitiveCollection#add}. + */ +export class PointPrimitive { + constructor(); + /** + * Determines if this point will be shown. Use this to hide or show a point, instead + of removing it and re-adding it to the collection. + */ + show: boolean; + /** + * Gets or sets the Cartesian position of this point. + */ + position: Cartesian3; + /** + * Gets or sets near and far scaling properties of a point based on the point's distance from the camera. + A point's scale will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the point's scale remains clamped to the nearest bound. This scale + multiplies the pixelSize and outlineWidth to affect the total size of the point. If undefined, + scaleByDistance will be disabled. + * @example + * // Example 1. + // Set a pointPrimitive's scaleByDistance to scale to 15 when the + // camera is 1500 meters from the pointPrimitive and disappear as + // the camera distance approaches 8.0e6 meters. + p.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 15, 8.0e6, 0.0); + * @example + * // Example 2. + // disable scaling by distance + p.scaleByDistance = undefined; + */ + scaleByDistance: NearFarScalar; + /** + * Gets or sets near and far translucency properties of a point based on the point's distance from the camera. + A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and + {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds + of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}. + Outside of these ranges the point's translucency remains clamped to the nearest bound. If undefined, + translucencyByDistance will be disabled. + * @example + * // Example 1. + // Set a point's translucency to 1.0 when the + // camera is 1500 meters from the point and disappear as + // the camera distance approaches 8.0e6 meters. + p.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0); + * @example + * // Example 2. + // disable translucency by distance + p.translucencyByDistance = undefined; + */ + translucencyByDistance: NearFarScalar; + /** + * Gets or sets the inner size of the point in pixels. + */ + pixelSize: number; + /** + * Gets or sets the inner color of the point. + The red, green, blue, and alpha values are indicated by value's red, green, + blue, and alpha properties as shown in Example 1. These components range from 0.0 + (no intensity) to 1.0 (full intensity). + * @example + * // Example 1. Assign yellow. + p.color = Cesium.Color.YELLOW; + * @example + * // Example 2. Make a pointPrimitive 50% translucent. + p.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5); + */ + color: Color; + /** + * Gets or sets the outline color of the point. + */ + outlineColor: Color; + /** + * Gets or sets the outline width in pixels. This width adds to pixelSize, + increasing the total size of the point. + */ + outlineWidth: number; + /** + * Gets or sets the condition specifying at what distance from the camera that this point will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; + /** + * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain. + When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied. + */ + disableDepthTestDistance: number; + /** + * Gets or sets the user-defined value returned when the point is picked. + */ + id: any; + /** + * Computes the screen-space position of the point's origin. + The screen space origin is the top, left corner of the canvas; x increases from + left to right, and y increases from top to bottom. + * @example + * console.log(p.computeScreenSpacePosition(scene).toString()); + * @param scene - The scene. + * @param [result] - The object onto which to store the result. + * @returns The screen-space position of the point. + */ + computeScreenSpacePosition(scene: Scene, result?: Cartesian2): Cartesian2; + /** + * Determines if this point equals another point. Points are equal if all their properties + are equal. Points in different collections can be equal. + * @param other - The point to compare for equality. + * @returns true if the points are equal; otherwise, false. + */ + equals(other: PointPrimitive): boolean; +} + +/** + * A renderable collection of points. +

+Points are added and removed from the collection using {@link PointPrimitiveCollection#add} +and {@link PointPrimitiveCollection#remove}. + * @example + * // Create a pointPrimitive collection with two points +var points = scene.primitives.add(new Cesium.PointPrimitiveCollection()); +points.add({ + position : new Cesium.Cartesian3(1.0, 2.0, 3.0), + color : Cesium.Color.YELLOW +}); +points.add({ + position : new Cesium.Cartesian3(4.0, 5.0, 6.0), + color : Cesium.Color.CYAN +}); + * @param [options] - Object with the following properties: + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms each point from model to world coordinates. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.blendOption = BlendOption.OPAQUE_AND_TRANSLUCENT] - The point blending option. The default +is used for rendering both opaque and translucent points. However, if either all of the points are completely opaque or all are completely translucent, +setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x. + * @param [options.show = true] - Determines if the primitives in the collection will be shown. + */ +export class PointPrimitiveCollection { + constructor(options?: { + modelMatrix?: Matrix4; + debugShowBoundingVolume?: boolean; + blendOption?: BlendOption; + show?: boolean; + }); + /** + * Determines if primitives in this collection will be shown. + */ + show: boolean; + /** + * The 4x4 transformation matrix that transforms each point in this collection from model to world coordinates. + When this is the identity matrix, the pointPrimitives are drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + * @example + * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); + pointPrimitives.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center); + pointPrimitives.add({ + color : Cesium.Color.ORANGE, + position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center + }); + pointPrimitives.add({ + color : Cesium.Color.YELLOW, + position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east + }); + pointPrimitives.add({ + color : Cesium.Color.GREEN, + position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north + }); + pointPrimitives.add({ + color : Cesium.Color.CYAN, + position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up + }); + */ + modelMatrix: Matrix4; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * The point blending option. The default is used for rendering both opaque and translucent points. + However, if either all of the points are completely opaque or all are completely translucent, + setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve + performance by up to 2x. + */ + blendOption: BlendOption; + /** + * Returns the number of points in this collection. This is commonly used with + {@link PointPrimitiveCollection#get} to iterate over all the points + in the collection. + */ + length: number; + /** + * Creates and adds a point with the specified initial properties to the collection. + The added point is returned so it can be modified or removed from the collection later. + * @example + * // Example 1: Add a point, specifying all the default values. + var p = pointPrimitives.add({ + show : true, + position : Cesium.Cartesian3.ZERO, + pixelSize : 10.0, + color : Cesium.Color.WHITE, + outlineColor : Cesium.Color.TRANSPARENT, + outlineWidth : 0.0, + id : undefined + }); + * @example + * // Example 2: Specify only the point's cartographic position. + var p = pointPrimitives.add({ + position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height) + }); + * @param [options] - A template describing the point's properties as shown in Example 1. + * @returns The point that was added to the collection. + */ + add(options?: any): PointPrimitive; + /** + * Removes a point from the collection. + * @example + * var p = pointPrimitives.add(...); + pointPrimitives.remove(p); // Returns true + * @param pointPrimitive - The point to remove. + * @returns true if the point was removed; false if the point was not found in the collection. + */ + remove(pointPrimitive: PointPrimitive): boolean; + /** + * Removes all points from the collection. + * @example + * pointPrimitives.add(...); + pointPrimitives.add(...); + pointPrimitives.removeAll(); + */ + removeAll(): void; + /** + * Check whether this collection contains a given point. + * @param [pointPrimitive] - The point to check for. + * @returns true if this collection contains the point, false otherwise. + */ + contains(pointPrimitive?: PointPrimitive): boolean; + /** + * Returns the point in the collection at the specified index. Indices are zero-based + and increase as points are added. Removing a point shifts all points after + it to the left, changing their indices. This function is commonly used with + {@link PointPrimitiveCollection#length} to iterate over all the points + in the collection. + * @example + * // Toggle the show property of every point in the collection + var len = pointPrimitives.length; + for (var i = 0; i < len; ++i) { + var p = pointPrimitives.get(i); + p.show = !p.show; + } + * @param index - The zero-based index of the point. + * @returns The point at the specified index. + */ + get(index: number): PointPrimitive; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * pointPrimitives = pointPrimitives && pointPrimitives.destroy(); + */ + destroy(): void; +} + +/** + * A renderable polyline. Create this by calling {@link PolylineCollection#add} + * @param options - Object with the following properties: + * @param [options.show = true] - true if this polyline will be shown; otherwise, false. + * @param [options.width = 1.0] - The width of the polyline in pixels. + * @param [options.loop = false] - Whether a line segment will be added between the last and first line positions to make this line a loop. + * @param [options.material = Material.ColorType] - The material. + * @param [options.positions] - The positions. + * @param [options.id] - The user-defined object to be returned when this polyline is picked. + * @param [options.distanceDisplayCondition] - The condition specifying at what distance from the camera that this polyline will be displayed. + * @param polylineCollection - The renderable polyline collection. + */ +export class Polyline { + constructor(options: { + show?: boolean; + width?: number; + loop?: boolean; + material?: Material; + positions?: Cartesian3[]; + id?: any; + distanceDisplayCondition?: DistanceDisplayCondition; + }, polylineCollection: PolylineCollection); + /** + * Determines if this polyline will be shown. Use this to hide or show a polyline, instead + of removing it and re-adding it to the collection. + */ + show: boolean; + /** + * Gets or sets the positions of the polyline. + * @example + * polyline.positions = Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 10.0, 0.0, + 0.0, 20.0 + ]); + */ + positions: Cartesian3[]; + /** + * Gets or sets the surface appearance of the polyline. This can be one of several built-in {@link Material} objects or a custom material, scripted with + {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}. + */ + material: Material; + /** + * Gets or sets the width of the polyline. + */ + width: number; + /** + * Gets or sets whether a line segment will be added between the first and last polyline positions. + */ + loop: boolean; + /** + * Gets or sets the user-defined value returned when the polyline is picked. + */ + id: any; + /** + * Gets or sets the condition specifying at what distance from the camera that this polyline will be displayed. + */ + distanceDisplayCondition: DistanceDisplayCondition; +} + +/** + * A renderable collection of polylines. +

+
+
+Example polylines +
+

+Polylines are added and removed from the collection using {@link PolylineCollection#add} +and {@link PolylineCollection#remove}. + * @example + * // Create a polyline collection with two polylines +var polylines = new Cesium.PolylineCollection(); +polylines.add({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -75.10, 39.57, + -77.02, 38.53, + -80.50, 35.14, + -80.12, 25.46]), + width : 2 +}); + +polylines.add({ + positions : Cesium.Cartesian3.fromDegreesArray([ + -73.10, 37.57, + -75.02, 36.53, + -78.50, 33.14, + -78.12, 23.46]), + width : 4 +}); + * @param [options] - Object with the following properties: + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms each polyline from model to world coordinates. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.show = true] - Determines if the polylines in the collection will be shown. + */ +export class PolylineCollection { + constructor(options?: { + modelMatrix?: Matrix4; + debugShowBoundingVolume?: boolean; + show?: boolean; + }); + /** + * Determines if polylines in this collection will be shown. + */ + show: boolean; + /** + * The 4x4 transformation matrix that transforms each polyline in this collection from model to world coordinates. + When this is the identity matrix, the polylines are drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + */ + modelMatrix: Matrix4; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * Returns the number of polylines in this collection. This is commonly used with + {@link PolylineCollection#get} to iterate over all the polylines + in the collection. + */ + length: number; + /** + * Creates and adds a polyline with the specified initial properties to the collection. + The added polyline is returned so it can be modified or removed from the collection later. + * @example + * // Example 1: Add a polyline, specifying all the default values. + var p = polylines.add({ + show : true, + positions : ellipsoid.cartographicArrayToCartesianArray([ + * Cesium.Cartographic.fromDegrees(-75.10, 39.57), + * Cesium.Cartographic.fromDegrees(-77.02, 38.53)]), + width : 1 + }); + * @param [options] - A template describing the polyline's properties as shown in Example 1. + * @returns The polyline that was added to the collection. + */ + add(options?: any): Polyline; + /** + * Removes a polyline from the collection. + * @example + * var p = polylines.add(...); + polylines.remove(p); // Returns true + * @param polyline - The polyline to remove. + * @returns true if the polyline was removed; false if the polyline was not found in the collection. + */ + remove(polyline: Polyline): boolean; + /** + * Removes all polylines from the collection. + * @example + * polylines.add(...); + polylines.add(...); + polylines.removeAll(); + */ + removeAll(): void; + /** + * Determines if this collection contains the specified polyline. + * @param polyline - The polyline to check for. + * @returns true if this collection contains the polyline, false otherwise. + */ + contains(polyline: Polyline): boolean; + /** + * Returns the polyline in the collection at the specified index. Indices are zero-based + and increase as polylines are added. Removing a polyline shifts all polylines after + it to the left, changing their indices. This function is commonly used with + {@link PolylineCollection#length} to iterate over all the polylines + in the collection. + * @example + * // Toggle the show property of every polyline in the collection + var len = polylines.length; + for (var i = 0; i < len; ++i) { + var p = polylines.get(i); + p.show = !p.show; + } + * @param index - The zero-based index of the polyline. + * @returns The polyline at the specified index. + */ + get(index: number): Polyline; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * polylines = polylines && polylines.destroy(); + */ + destroy(): void; +} + +/** + * An appearance for {@link GeometryInstance} instances with color attributes and +{@link PolylineGeometry} or {@link GroundPolylineGeometry}. +This allows several geometry instances, each with a different color, to +be drawn with the same {@link Primitive}. + * @example + * // A solid white line segment +var primitive = new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : new Cesium.PolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 5.0, 0.0 + ]), + width : 10.0, + vertexFormat : Cesium.PolylineColorAppearance.VERTEX_FORMAT + }), + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0)) + } + }), + appearance : new Cesium.PolylineColorAppearance({ + translucent : false + }) +}); + * @param [options] - Object with the following properties: + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link PolylineColorAppearance#renderState} has alpha blending enabled. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class PolylineColorAppearance { + constructor(options?: { + translucent?: boolean; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * This property is part of the {@link Appearance} interface, but is not + used by {@link PolylineColorAppearance} since a fully custom fragment shader is used. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent so + {@link PolylineColorAppearance#renderState} has alpha blending enabled. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. +

+ The render state can be explicitly defined when constructing a {@link PolylineColorAppearance} + instance, or it is set implicitly via {@link PolylineColorAppearance#translucent}. +

+ */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed so + {@link PolylineColorAppearance#renderState} has backface culling enabled. + This is always false for PolylineColorAppearance. + */ + readonly closed: boolean; + /** + * The {@link VertexFormat} that this appearance instance is compatible with. + A geometry can have more vertex attributes and still be compatible - at a + potential performance cost - but it can't have less. + */ + readonly vertexFormat: VertexFormat; + /** + * The {@link VertexFormat} that all {@link PolylineColorAppearance} instances + are compatible with. This requires only a position attribute. + */ + static readonly VERTEX_FORMAT: VertexFormat; + /** + * Procedurally creates the full GLSL fragment shader source. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link PolylineColorAppearance#translucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +/** + * An appearance for {@link PolylineGeometry} that supports shading with materials. + * @example + * var primitive = new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : new Cesium.PolylineGeometry({ + positions : Cesium.Cartesian3.fromDegreesArray([ + 0.0, 0.0, + 5.0, 0.0 + ]), + width : 10.0, + vertexFormat : Cesium.PolylineMaterialAppearance.VERTEX_FORMAT + }) + }), + appearance : new Cesium.PolylineMaterialAppearance({ + material : Cesium.Material.fromType('Color') + }) +}); + * @param [options] - Object with the following properties: + * @param [options.translucent = true] - When true, the geometry is expected to appear translucent so {@link PolylineMaterialAppearance#renderState} has alpha blending enabled. + * @param [options.material = Material.ColorType] - The material used to determine the fragment color. + * @param [options.vertexShaderSource] - Optional GLSL vertex shader source to override the default vertex shader. + * @param [options.fragmentShaderSource] - Optional GLSL fragment shader source to override the default fragment shader. + * @param [options.renderState] - Optional render state to override the default render state. + */ +export class PolylineMaterialAppearance { + constructor(options?: { + translucent?: boolean; + material?: Material; + vertexShaderSource?: string; + fragmentShaderSource?: string; + renderState?: any; + }); + /** + * The material used to determine the fragment color. Unlike other {@link PolylineMaterialAppearance} + properties, this is not read-only, so an appearance's material can change on the fly. + */ + material: Material; + /** + * When true, the geometry is expected to appear translucent so + {@link PolylineMaterialAppearance#renderState} has alpha blending enabled. + */ + translucent: boolean; + /** + * The GLSL source code for the vertex shader. + */ + readonly vertexShaderSource: string; + /** + * The GLSL source code for the fragment shader. + */ + readonly fragmentShaderSource: string; + /** + * The WebGL fixed-function state to use when rendering the geometry. +

+ The render state can be explicitly defined when constructing a {@link PolylineMaterialAppearance} + instance, or it is set implicitly via {@link PolylineMaterialAppearance#translucent} + and {@link PolylineMaterialAppearance#closed}. +

+ */ + readonly renderState: any; + /** + * When true, the geometry is expected to be closed so + {@link PolylineMaterialAppearance#renderState} has backface culling enabled. + This is always false for PolylineMaterialAppearance. + */ + readonly closed: boolean; + /** + * The {@link VertexFormat} that this appearance instance is compatible with. + A geometry can have more vertex attributes and still be compatible - at a + potential performance cost - but it can't have less. + */ + readonly vertexFormat: VertexFormat; + /** + * The {@link VertexFormat} that all {@link PolylineMaterialAppearance} instances + are compatible with. This requires position and st attributes. + */ + static readonly VERTEX_FORMAT: VertexFormat; + /** + * Procedurally creates the full GLSL fragment shader source. For {@link PolylineMaterialAppearance}, + this is derived from {@link PolylineMaterialAppearance#fragmentShaderSource} and {@link PolylineMaterialAppearance#material}. + * @returns The full GLSL fragment shader source. + */ + getFragmentShaderSource(): string; + /** + * Determines if the geometry is translucent based on {@link PolylineMaterialAppearance#translucent} and {@link Material#isTranslucent}. + * @returns true if the appearance is translucent. + */ + isTranslucent(): boolean; + /** + * Creates a render state. This is not the final render state instance; instead, + it can contain a subset of render state properties identical to the render state + created in the context. + * @returns The render state. + */ + getRenderState(): any; +} + +/** + * Runs a post-process stage on either the texture rendered by the scene or the output of a previous post-process stage. + * @example + * // Simple stage to change the color +var fs = + 'uniform sampler2D colorTexture;\n' + + 'varying vec2 v_textureCoordinates;\n' + + 'uniform float scale;\n' + + 'uniform vec3 offset;\n' + + 'void main() {\n' + + ' vec4 color = texture2D(colorTexture, v_textureCoordinates);\n' + + ' gl_FragColor = vec4(color.rgb * scale + offset, 1.0);\n' + + '}\n'; +scene.postProcessStages.add(new Cesium.PostProcessStage({ + fragmentShader : fs, + uniforms : { + scale : 1.1, + offset : function() { + return new Cesium.Cartesian3(0.1, 0.2, 0.3); + } + } +})); + * @example + * // Simple stage to change the color of what is selected. +// If czm_selected returns true, the current fragment belongs to geometry in the selected array. +var fs = + 'uniform sampler2D colorTexture;\n' + + 'varying vec2 v_textureCoordinates;\n' + + 'uniform vec4 highlight;\n' + + 'void main() {\n' + + ' vec4 color = texture2D(colorTexture, v_textureCoordinates);\n' + + ' if (czm_selected()) {\n' + + ' vec3 highlighted = highlight.a * highlight.rgb + (1.0 - highlight.a) * color.rgb;\n' + + ' gl_FragColor = vec4(highlighted, 1.0);\n' + + ' } else { \n' + + ' gl_FragColor = color;\n' + + ' }\n' + + '}\n'; +var stage = scene.postProcessStages.add(new Cesium.PostProcessStage({ + fragmentShader : fs, + uniforms : { + highlight : function() { + return new Cesium.Color(1.0, 0.0, 0.0, 0.5); + } + } +})); +stage.selected = [cesium3DTileFeature]; + * @param options - An object with the following properties: + * @param options.fragmentShader - The fragment shader to use. The default sampler2D uniforms are colorTexture and depthTexture. The color texture is the output of rendering the scene or the previous stage. The depth texture is the output from rendering the scene. The shader should contain one or both uniforms. There is also a vec2 varying named v_textureCoordinates that can be used to sample the textures. + * @param [options.uniforms] - An object whose properties will be used to set the shaders uniforms. The properties can be constant values or a function. A constant value can also be a URI, data URI, or HTML element to use as a texture. + * @param [options.textureScale = 1.0] - A number in the range (0.0, 1.0] used to scale the texture dimensions. A scale of 1.0 will render this post-process stage to a texture the size of the viewport. + * @param [options.forcePowerOfTwo = false] - Whether or not to force the texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions. + * @param [options.sampleMode = PostProcessStageSampleMode.NEAREST] - How to sample the input color texture. + * @param [options.pixelFormat = PixelFormat.RGBA] - The color pixel format of the output texture. + * @param [options.pixelDatatype = PixelDatatype.UNSIGNED_BYTE] - The pixel data type of the output texture. + * @param [options.clearColor = Color.BLACK] - The color to clear the output texture to. + * @param [options.scissorRectangle] - The rectangle to use for the scissor test. + * @param [options.name = createGuid()] - The unique name of this post-process stage for reference by other stages in a composite. If a name is not supplied, a GUID will be generated. + */ +export class PostProcessStage { + constructor(options: { + fragmentShader: string; + uniforms?: any; + textureScale?: number; + forcePowerOfTwo?: boolean; + sampleMode?: PostProcessStageSampleMode; + pixelFormat?: PixelFormat; + pixelDatatype?: PixelDatatype; + clearColor?: Color; + scissorRectangle?: BoundingRectangle; + name?: string; + }); + /** + * Whether or not to execute this post-process stage when ready. + */ + enabled: boolean; + /** + * Determines if this post-process stage is ready to be executed. A stage is only executed when both ready + and {@link PostProcessStage#enabled} are true. A stage will not be ready while it is waiting on textures + to load. + */ + readonly ready: boolean; + /** + * The unique name of this post-process stage for reference by other stages in a {@link PostProcessStageComposite}. + */ + readonly name: string; + /** + * The fragment shader to use when execute this post-process stage. +

+ The shader must contain a sampler uniform declaration for colorTexture, depthTexture, + or both. +

+

+ The shader must contain a vec2 varying declaration for v_textureCoordinates for sampling + the texture uniforms. +

+ */ + readonly fragmentShader: string; + /** + * An object whose properties are used to set the uniforms of the fragment shader. +

+ The object property values can be either a constant or a function. The function will be called + each frame before the post-process stage is executed. +

+

+ A constant value can also be a URI to an image, a data URI, or an HTML element that can be used as a texture, such as HTMLImageElement or HTMLCanvasElement. +

+

+ If this post-process stage is part of a {@link PostProcessStageComposite} that does not execute in series, the constant value can also be + the name of another stage in a composite. This will set the uniform to the output texture the stage with that name. +

+ */ + readonly uniforms: any; + /** + * A number in the range (0.0, 1.0] used to scale the output texture dimensions. A scale of 1.0 will render this post-process stage to a texture the size of the viewport. + */ + readonly textureScale: number; + /** + * Whether or not to force the output texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions. + */ + readonly forcePowerOfTwo: number; + /** + * How to sample the input color texture. + */ + readonly sampleMode: PostProcessStageSampleMode; + /** + * The color pixel format of the output texture. + */ + readonly pixelFormat: PixelFormat; + /** + * The pixel data type of the output texture. + */ + readonly pixelDatatype: PixelDatatype; + /** + * The color to clear the output texture to. + */ + readonly clearColor: Color; + /** + * The {@link BoundingRectangle} to use for the scissor test. A default bounding rectangle will disable the scissor test. + */ + readonly scissorRectangle: BoundingRectangle; + /** + * The features selected for applying the post-process. +

+ In the fragment shader, use czm_selected to determine whether or not to apply the post-process + stage to that fragment. For example: + + if (czm_selected(v_textureCoordinates)) { + // apply post-process stage + } else { + gl_FragColor = texture2D(colorTexture, v_textureCordinates); + } + +

+ */ + selected: any[]; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ */ + destroy(): void; +} + +/** + * A collection of {@link PostProcessStage}s and/or {@link PostProcessStageComposite}s. +

+The input texture for each post-process stage is the texture rendered to by the scene or the texture rendered +to by the previous stage in the collection. +

+

+If the ambient occlusion or bloom stages are enabled, they will execute before all other stages. +

+

+If the FXAA stage is enabled, it will execute after all other stages. +

+ */ +export class PostProcessStageCollection { + constructor(); + /** + * Determines if all of the post-process stages in the collection are ready to be executed. + */ + readonly ready: boolean; + /** + * A post-process stage for Fast Approximate Anti-aliasing. +

+ When enabled, this stage will execute after all others. +

+ */ + readonly fxaa: PostProcessStage; + /** + * A post-process stage that applies Horizon-based Ambient Occlusion (HBAO) to the input texture. +

+ Ambient occlusion simulates shadows from ambient light. These shadows would always be present when the + surface receives light and regardless of the light's position. +

+

+ The uniforms have the following properties: intensity, bias, lengthCap, + stepSize, frustumLength, ambientOcclusionOnly, + delta, sigma, and blurStepSize. +

+
    +
  • intensity is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is 3.0.
  • + +
  • bias is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, + sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is 0.1.
  • + +
  • lengthCap is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value, + sampling stops in the current direction. The default value is 0.26.
  • + +
  • stepSize is a scalar value indicating the distance to the next texel sample in the current direction. The default value is 1.95.
  • + +
  • frustumLength is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment. + The default value is 1000.0.
  • + +
  • ambientOcclusionOnly is a boolean value. When true, only the shadows generated are written to the output. When false, the input texture is modulated + with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is false.
  • +
+

+ delta, sigma, and blurStepSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. + The blur is applied to the shadows generated from the image to make them smoother. +

+

+ When enabled, this stage will execute before all others. +

+ */ + readonly ambientOcclusion: PostProcessStageComposite; + /** + * A post-process stage for a bloom effect. +

+ A bloom effect adds glow effect, makes bright areas brighter, and dark areas darker. +

+

+ This stage has the following uniforms: contrast, brightness, glowOnly, + delta, sigma, and stepSize. +

+
    +
  • contrast is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is 128.0.
  • + +
  • brightness is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is + added to the brightness. The default value is -0.3.
  • + +
  • glowOnly is a boolean value. When true, only the glow effect will be shown. When false, the glow will be added to the input texture. + The default value is false. This is a debug option for viewing the effects when changing the other uniform values.
  • +
+

+ delta, sigma, and stepSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. + The blur is applied to the shadows generated from the image to make them smoother. +

+

+ When enabled, this stage will execute before all others. +

+ */ + readonly bloom: PostProcessStageComposite; + /** + * The number of post-process stages in this collection. + */ + readonly length: number; + /** + * Adds the post-process stage to the collection. + * @param stage - The post-process stage to add to the collection. + * @returns The post-process stage that was added to the collection. + */ + add(stage: PostProcessStage | PostProcessStageComposite): PostProcessStage | PostProcessStageComposite; + /** + * Removes a post-process stage from the collection and destroys it. + * @param stage - The post-process stage to remove from the collection. + * @returns Whether the post-process stage was removed. + */ + remove(stage: PostProcessStage | PostProcessStageComposite): boolean; + /** + * Returns whether the collection contains a post-process stage. + * @param stage - The post-process stage. + * @returns Whether the collection contains the post-process stage. + */ + contains(stage: PostProcessStage | PostProcessStageComposite): boolean; + /** + * Gets the post-process stage at index. + * @param index - The index of the post-process stage. + * @returns The post-process stage at index. + */ + get(index: number): PostProcessStage | PostProcessStageComposite; + /** + * Removes all post-process stages from the collection and destroys them. + */ + removeAll(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ */ + destroy(): void; +} + +/** + * A collection of {@link PostProcessStage}s or other post-process composite stages that execute together logically. +

+All stages are executed in the order of the array. The input texture changes based on the value of inputPreviousStageTexture. +If inputPreviousStageTexture is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. +If inputPreviousStageTexture is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene +or the output texture of the previous stage. +

+ * @example + * // Example 1: separable blur filter +// The input to blurXDirection is the texture rendered to by the scene or the output of the previous stage. +// The input to blurYDirection is the texture rendered to by blurXDirection. +scene.postProcessStages.add(new Cesium.PostProcessStageComposite({ + stages : [blurXDirection, blurYDirection] +})); + * @example + * // Example 2: referencing the output of another post-process stage +scene.postProcessStages.add(new Cesium.PostProcessStageComposite({ + inputPreviousStageTexture : false, + stages : [ + // The same as Example 1. + new Cesium.PostProcessStageComposite({ + inputPreviousStageTexture : true + stages : [blurXDirection, blurYDirection], + name : 'blur' + }), + // The input texture for this stage is the same input texture to blurXDirection since inputPreviousStageTexture is false + new Cesium.PostProcessStage({ + fragmentShader : compositeShader, + uniforms : { + blurTexture : 'blur' // The output of the composite with name 'blur' (the texture that blurYDirection rendered to). + } + }) + ] +}); + * @example + * // Example 3: create a uniform alias +var uniforms = {}; +Cesium.defineProperties(uniforms, { + filterSize : { + get : function() { + return blurXDirection.uniforms.filterSize; + }, + set : function(value) { + blurXDirection.uniforms.filterSize = blurYDirection.uniforms.filterSize = value; + } + } +}); +scene.postProcessStages.add(new Cesium.PostProcessStageComposite({ + stages : [blurXDirection, blurYDirection], + uniforms : uniforms +})); + * @param options - An object with the following properties: + * @param options.stages - An array of {@link PostProcessStage}s or composites to be executed in order. + * @param [options.inputPreviousStageTexture = true] - Whether to execute each post-process stage where the input to one stage is the output of the previous. Otherwise, the input to each contained stage is the output of the stage that executed before the composite. + * @param [options.name = createGuid()] - The unique name of this post-process stage for reference by other composites. If a name is not supplied, a GUID will be generated. + * @param [options.uniforms] - An alias to the uniforms of post-process stages. + */ +export class PostProcessStageComposite { + constructor(options: { + stages: any[]; + inputPreviousStageTexture?: boolean; + name?: string; + uniforms?: any; + }); + /** + * Determines if this post-process stage is ready to be executed. + */ + readonly ready: boolean; + /** + * The unique name of this post-process stage for reference by other stages in a PostProcessStageComposite. + */ + readonly name: string; + /** + * Whether or not to execute this post-process stage when ready. + */ + enabled: boolean; + /** + * An alias to the uniform values of the post-process stages. May be undefined; in which case, get each stage to set uniform values. + */ + uniforms: any; + /** + * All post-process stages are executed in the order of the array. The input texture changes based on the value of inputPreviousStageTexture. + If inputPreviousStageTexture is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. + If inputPreviousStageTexture is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene + or the output texture of the previous stage. + */ + readonly inputPreviousStageTexture: boolean; + /** + * The number of post-process stages in this composite. + */ + readonly length: number; + /** + * The features selected for applying the post-process. + */ + selected: any[]; + /** + * Gets the post-process stage at index + * @param index - The index of the post-process stage or composite. + * @returns The post-process stage or composite at index. + */ + get(index: number): PostProcessStage | PostProcessStageComposite; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ */ + destroy(): void; +} + +/** + * Contains functions for creating common post-process stages. + */ +export namespace PostProcessStageLibrary { + /** + * Creates a post-process stage that applies a Gaussian blur to the input texture. This stage is usually applied in conjunction with another stage. +

+ This stage has the following uniforms: delta, sigma, and stepSize. +

+

+ delta and sigma are used to compute the weights of a Gaussian filter. The equation is exp((-0.5 * delta * delta) / (sigma * sigma)). + The default value for delta is 1.0. The default value for sigma is 2.0. + stepSize is the distance to the next texel. The default is 1.0. +

+ * @returns A post-process stage that applies a Gaussian blur to the input texture. + */ + function createBlurStage(): PostProcessStageComposite; + /** + * Creates a post-process stage that applies a depth of field effect. +

+ Depth of field simulates camera focus. Objects in the scene that are in focus + will be clear whereas objects not in focus will be blurred. +

+

+ This stage has the following uniforms: focalDistance, delta, sigma, and stepSize. +

+

+ focalDistance is the distance in meters from the camera to set the camera focus. +

+

+ delta, sigma, and stepSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. + The blur is applied to the areas out of focus. +

+ * @returns A post-process stage that applies a depth of field effect. + */ + function createDepthOfFieldStage(): PostProcessStageComposite; + /** + * Whether or not a depth of field stage is supported. +

+ This stage requires the WEBGL_depth_texture extension. +

+ * @param scene - The scene. + * @returns Whether this post process stage is supported. + */ + function isDepthOfFieldSupported(scene: Scene): boolean; + /** + * Creates a post-process stage that detects edges. +

+ Writes the color to the output texture with alpha set to 1.0 when it is on an edge. +

+

+ This stage has the following uniforms: color and length +

+
    +
  • color is the color of the highlighted edge. The default is {@link Color#BLACK}.
  • +
  • length is the length of the edges in pixels. The default is 0.5.
  • +
+

+ This stage is not supported in 2D. +

+ * @example + * // multiple silhouette effects + var yellowEdge = Cesium.PostProcessLibrary.createEdgeDetectionStage(); + yellowEdge.uniforms.color = Cesium.Color.YELLOW; + yellowEdge.selected = [feature0]; + + var greenEdge = Cesium.PostProcessLibrary.createEdgeDetectionStage(); + greenEdge.uniforms.color = Cesium.Color.LIME; + greenEdge.selected = [feature1]; + + // draw edges around feature0 and feature1 + postProcessStages.add(Cesium.PostProcessLibrary.createSilhouetteStage([yellowEdge, greenEdge]); + * @returns A post-process stage that applies an edge detection effect. + */ + function createEdgeDetectionStage(): PostProcessStageComposite; + /** + * Whether or not an edge detection stage is supported. +

+ This stage requires the WEBGL_depth_texture extension. +

+ * @param scene - The scene. + * @returns Whether this post process stage is supported. + */ + function isEdgeDetectionSupported(scene: Scene): boolean; + /** + * Creates a post-process stage that applies a silhouette effect. +

+ A silhouette effect composites the color from the edge detection pass with input color texture. +

+

+ This stage has the following uniforms when edgeDetectionStages is undefined: color and length +

+

+ color is the color of the highlighted edge. The default is {@link Color#BLACK}. + length is the length of the edges in pixels. The default is 0.5. +

+ * @param [edgeDetectionStages] - An array of edge detection post process stages. + * @returns A post-process stage that applies a silhouette effect. + */ + function createSilhouetteStage(edgeDetectionStages?: PostProcessStage[]): PostProcessStageComposite; + /** + * Whether or not a silhouette stage is supported. +

+ This stage requires the WEBGL_depth_texture extension. +

+ * @param scene - The scene. + * @returns Whether this post process stage is supported. + */ + function isSilhouetteSupported(scene: Scene): boolean; + /** + * Whether or not an ambient occlusion stage is supported. +

+ This stage requires the WEBGL_depth_texture extension. +

+ * @param scene - The scene. + * @returns Whether this post process stage is supported. + */ + function isAmbientOcclusionSupported(scene: Scene): boolean; + /** + * Creates a post-process stage that renders the input texture with black and white gradations. +

+ This stage has one uniform value, gradations, which scales the luminance of each pixel. +

+ * @returns A post-process stage that renders the input texture with black and white gradations. + */ + function createBlackAndWhiteStage(): PostProcessStage; + /** + * Creates a post-process stage that saturates the input texture. +

+ This stage has one uniform value, brightness, which scales the saturation of each pixel. +

+ * @returns A post-process stage that saturates the input texture. + */ + function createBrightnessStage(): PostProcessStage; + /** + * Creates a post-process stage that adds a night vision effect to the input texture. + * @returns A post-process stage that adds a night vision effect to the input texture. + */ + function createNightVisionStage(): PostProcessStage; + /** + * Creates a post-process stage that applies an effect simulating light flaring a camera lens. +

+ This stage has the following uniforms: dirtTexture, starTexture, intensity, distortion, ghostDispersal, + haloWidth, dirtAmount, and earthRadius. +

    +
  • dirtTexture is a texture sampled to simulate dirt on the lens.
  • +
  • starTexture is the texture sampled for the star pattern of the flare.
  • +
  • intensity is a scalar multiplied by the result of the lens flare. The default value is 2.0.
  • +
  • distortion is a scalar value that affects the chromatic effect distortion. The default value is 10.0.
  • +
  • ghostDispersal is a scalar indicating how far the halo effect is from the center of the texture. The default value is 0.4.
  • +
  • haloWidth is a scalar representing the width of the halo from the ghost dispersal. The default value is 0.4.
  • +
  • dirtAmount is a scalar representing the amount of dirt on the lens. The default value is 0.4.
  • +
  • earthRadius is the maximum radius of the earth. The default value is Ellipsoid.WGS84.maximumRadius.
  • +
+

+ * @returns A post-process stage for applying a lens flare effect. + */ + function createLensFlareStage(): PostProcessStage; +} + +/** + * Determines how input texture to a {@link PostProcessStage} is sampled. + */ +export enum PostProcessStageSampleMode { + /** + * Samples the texture by returning the closest texel. + */ + NEAREST = 0, + /** + * Samples the texture through bi-linear interpolation of the four nearest texels. + */ + LINEAR = 1 +} + +/** + * A primitive represents geometry in the {@link Scene}. The geometry can be from a single {@link GeometryInstance} +as shown in example 1 below, or from an array of instances, even if the geometry is from different +geometry types, e.g., an {@link RectangleGeometry} and an {@link EllipsoidGeometry} as shown in Code Example 2. +

+A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including +{@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement, +and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix +and match most of them and add a new geometry or appearance independently of each other. +

+

+Combining multiple instances into one primitive is called batching, and significantly improves performance for static data. +Instances can be individually picked; {@link Scene#pick} returns their {@link GeometryInstance#id}. Using +per-instance appearances like {@link PerInstanceColorAppearance}, each instance can also have a unique color. +

+

+{@link Geometry} can either be created and batched on a web worker or the main thread. The first two examples +show geometry that will be created on a web worker by using the descriptions of the geometry. The third example +shows how to create the geometry on the main thread by explicitly calling the createGeometry method. +

+ * @example + * // 1. Draw a translucent ellipse on the surface with a checkerboard pattern +var instance = new Cesium.GeometryInstance({ + geometry : new Cesium.EllipseGeometry({ + center : Cesium.Cartesian3.fromDegrees(-100.0, 20.0), + semiMinorAxis : 500000.0, + semiMajorAxis : 1000000.0, + rotation : Cesium.Math.PI_OVER_FOUR, + vertexFormat : Cesium.VertexFormat.POSITION_AND_ST + }), + id : 'object returned when this instance is picked and to get/set per-instance attributes' +}); +scene.primitives.add(new Cesium.Primitive({ + geometryInstances : instance, + appearance : new Cesium.EllipsoidSurfaceAppearance({ + material : Cesium.Material.fromType('Checkerboard') + }) +})); + * @example + * // 2. Draw different instances each with a unique color +var rectangleInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.RectangleGeometry({ + rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0), + vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT + }), + id : 'rectangle', + attributes : { + color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5) + } +}); +var ellipsoidInstance = new Cesium.GeometryInstance({ + geometry : new Cesium.EllipsoidGeometry({ + radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0), + vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL + }), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()), + id : 'ellipsoid', + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) + } +}); +scene.primitives.add(new Cesium.Primitive({ + geometryInstances : [rectangleInstance, ellipsoidInstance], + appearance : new Cesium.PerInstanceColorAppearance() +})); + * @example + * // 3. Create the geometry on the main thread. +scene.primitives.add(new Cesium.Primitive({ + geometryInstances : new Cesium.GeometryInstance({ + geometry : Cesium.EllipsoidGeometry.createGeometry(new Cesium.EllipsoidGeometry({ + radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0), + vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL + })), + modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( + Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()), + id : 'ellipsoid', + attributes : { + color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) + } + }), + appearance : new Cesium.PerInstanceColorAppearance() +})); + * @param [options] - Object with the following properties: + * @param [options.geometryInstances] - The geometry instances - or a single geometry instance - to render. + * @param [options.appearance] - The appearance used to render the primitive. + * @param [options.depthFailAppearance] - The appearance used to shade this primitive when it fails the depth test. + * @param [options.show = true] - Determines if this primitive will be shown. + * @param [options.modelMatrix = Matrix4.IDENTITY] - The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates. + * @param [options.vertexCacheOptimize = false] - When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + * @param [options.interleave = false] - When true, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time. + * @param [options.compressVertices = true] - When true, the geometry vertices are compressed, which will save memory. + * @param [options.releaseGeometryInstances = true] - When true, the primitive does not keep a reference to the input geometryInstances to save memory. + * @param [options.allowPicking = true] - When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. + * @param [options.cull = true] - When true, the renderer frustum culls and horizon culls the primitive's commands based on their bounding volume. Set this to false for a small performance gain if you are manually culling the primitive. + * @param [options.asynchronous = true] - Determines if the primitive will be created asynchronously or block until ready. + * @param [options.debugShowBoundingVolume = false] - For debugging only. Determines if this primitive's commands' bounding spheres are shown. + * @param [options.shadows = ShadowMode.DISABLED] - Determines whether this primitive casts or receives shadows from light sources. + */ +export class Primitive { + constructor(options?: { + geometryInstances?: GeometryInstance[] | GeometryInstance; + appearance?: Appearance; + depthFailAppearance?: Appearance; + show?: boolean; + modelMatrix?: Matrix4; + vertexCacheOptimize?: boolean; + interleave?: boolean; + compressVertices?: boolean; + releaseGeometryInstances?: boolean; + allowPicking?: boolean; + cull?: boolean; + asynchronous?: boolean; + debugShowBoundingVolume?: boolean; + shadows?: ShadowMode; + }); + /** + * The geometry instances rendered with this primitive. This may + be undefined if options.releaseGeometryInstances + is true when the primitive is constructed. +

+ Changing this property after the primitive is rendered has no effect. +

+ */ + readonly geometryInstances: GeometryInstance[] | GeometryInstance; + /** + * The {@link Appearance} used to shade this primitive. Each geometry + instance is shaded with the same appearance. Some appearances, like + {@link PerInstanceColorAppearance} allow giving each instance unique + properties. + */ + appearance: Appearance; + /** + * The {@link Appearance} used to shade this primitive when it fails the depth test. Each geometry + instance is shaded with the same appearance. Some appearances, like + {@link PerInstanceColorAppearance} allow giving each instance unique + properties. + +

+ When using an appearance that requires a color attribute, like PerInstanceColorAppearance, + add a depthFailColor per-instance attribute instead. +

+ +

+ Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported, + there may be artifacts. +

+ */ + depthFailAppearance: Appearance; + /** + * The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates. + When this is the identity matrix, the primitive is drawn in world coordinates, i.e., Earth's WGS84 coordinates. + Local reference frames can be used by providing a different transformation matrix, like that returned + by {@link Transforms.eastNorthUpToFixedFrame}. + +

+ This property is only supported in 3D mode. +

+ * @example + * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0); + p.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin); + */ + modelMatrix: Matrix4; + /** + * Determines if the primitive will be shown. This affects all geometry + instances in the primitive. + */ + show: boolean; + /** + * When true, the renderer frustum culls and horizon culls the primitive's commands + based on their bounding volume. Set this to false for a small performance gain + if you are manually culling the primitive. + */ + cull: boolean; + /** + * This property is for debugging only; it is not for production use nor is it optimized. +

+ Draws the bounding sphere for each draw command in the primitive. +

+ */ + debugShowBoundingVolume: boolean; + /** + * Determines whether this primitive casts or receives shadows from light sources. + */ + shadows: ShadowMode; + /** + * When true, geometry vertices are optimized for the pre and post-vertex-shader caches. + */ + readonly vertexCacheOptimize: boolean; + /** + * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance. + */ + readonly interleave: boolean; + /** + * When true, the primitive does not keep a reference to the input geometryInstances to save memory. + */ + readonly releaseGeometryInstances: boolean; + /** + * When true, each geometry instance will only be pickable with {@link Scene#pick}. When false, GPU memory is saved. * + */ + readonly allowPicking: boolean; + /** + * Determines if the geometry instances will be created and batched on a web worker. + */ + readonly asynchronous: boolean; + /** + * When true, geometry vertices are compressed, which will save memory. + */ + readonly compressVertices: boolean; + /** + * Determines if the primitive is complete and ready to render. If this property is + true, the primitive will be rendered the next time that {@link Primitive#update} + is called. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves when the primitive is ready to render. + */ + readonly readyPromise: Promise; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns the modifiable per-instance attributes for a {@link GeometryInstance}. + * @example + * var attributes = primitive.getGeometryInstanceAttributes('an id'); + attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA); + attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true); + attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(100.0, 10000.0); + attributes.offset = Cesium.OffsetGeometryInstanceAttribute.toValue(Cartesian3.IDENTITY); + * @param id - The id of the {@link GeometryInstance}. + * @returns The typed array in the attribute's format or undefined if the is no instance with id. + */ + getGeometryInstanceAttributes(id: any): any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. +

+ * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. +

+ * @example + * e = e && e.destroy(); + */ + destroy(): void; +} + +/** + * A collection of primitives. This is most often used with {@link Scene#primitives}, +but PrimitiveCollection is also a primitive itself so collections can +be added to collections forming a hierarchy. + * @example + * var billboards = new Cesium.BillboardCollection(); +var labels = new Cesium.LabelCollection(); + +var collection = new Cesium.PrimitiveCollection(); +collection.add(billboards); + +scene.primitives.add(collection); // Add collection +scene.primitives.add(labels); // Add regular primitive + * @param [options] - Object with the following properties: + * @param [options.show = true] - Determines if the primitives in the collection will be shown. + * @param [options.destroyPrimitives = true] - Determines if primitives in the collection are destroyed when they are removed. + */ +export class PrimitiveCollection { + constructor(options?: { + show?: boolean; + destroyPrimitives?: boolean; + }); + /** + * Determines if primitives in this collection will be shown. + */ + show: boolean; + /** + * Determines if primitives in the collection are destroyed when they are removed by + {@link PrimitiveCollection#destroy} or {@link PrimitiveCollection#remove} or implicitly + by {@link PrimitiveCollection#removeAll}. + * @example + * // Example 1. Primitives are destroyed by default. + var primitives = new Cesium.PrimitiveCollection(); + var labels = primitives.add(new Cesium.LabelCollection()); + primitives = primitives.destroy(); + var b = labels.isDestroyed(); // true + * @example + * // Example 2. Do not destroy primitives in a collection. + var primitives = new Cesium.PrimitiveCollection(); + primitives.destroyPrimitives = false; + var labels = primitives.add(new Cesium.LabelCollection()); + primitives = primitives.destroy(); + var b = labels.isDestroyed(); // false + labels = labels.destroy(); // explicitly destroy + */ + destroyPrimitives: boolean; + /** + * Gets the number of primitives in the collection. + */ + readonly length: number; + /** + * Adds a primitive to the collection. + * @example + * var billboards = scene.primitives.add(new Cesium.BillboardCollection()); + * @param primitive - The primitive to add. + * @param [index] - The index to add the layer at. If omitted, the primitive will be added at the bottom of all existing primitives. + * @returns The primitive added to the collection. + */ + add(primitive: any, index?: number): any; + /** + * Removes a primitive from the collection. + * @example + * var billboards = scene.primitives.add(new Cesium.BillboardCollection()); + scene.primitives.remove(billboards); // Returns true + * @param [primitive] - The primitive to remove. + * @returns true if the primitive was removed; false if the primitive is undefined or was not found in the collection. + */ + remove(primitive?: any): boolean; + /** + * Removes all primitives in the collection. + */ + removeAll(): void; + /** + * Determines if this collection contains a primitive. + * @param [primitive] - The primitive to check for. + * @returns true if the primitive is in the collection; false if the primitive is undefined or was not found in the collection. + */ + contains(primitive?: any): boolean; + /** + * Raises a primitive "up one" in the collection. If all primitives in the collection are drawn + on the globe surface, this visually moves the primitive up one. + * @param [primitive] - The primitive to raise. + */ + raise(primitive?: any): void; + /** + * Raises a primitive to the "top" of the collection. If all primitives in the collection are drawn + on the globe surface, this visually moves the primitive to the top. + * @param [primitive] - The primitive to raise the top. + */ + raiseToTop(primitive?: any): void; + /** + * Lowers a primitive "down one" in the collection. If all primitives in the collection are drawn + on the globe surface, this visually moves the primitive down one. + * @param [primitive] - The primitive to lower. + */ + lower(primitive?: any): void; + /** + * Lowers a primitive to the "bottom" of the collection. If all primitives in the collection are drawn + on the globe surface, this visually moves the primitive to the bottom. + * @param [primitive] - The primitive to lower to the bottom. + */ + lowerToBottom(primitive?: any): void; + /** + * Returns the primitive in the collection at the specified index. + * @example + * // Toggle the show property of every primitive in the collection. + var primitives = scene.primitives; + var length = primitives.length; + for (var i = 0; i < length; ++i) { + var p = primitives.get(i); + p.show = !p.show; + } + * @param index - The zero-based index of the primitive to return. + * @returns The primitive at the index. + */ + get(index: number): any; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by each primitive in this collection. Explicitly destroying this + collection allows for deterministic release of WebGL resources, instead of relying on the garbage + collector to destroy this collection. +

+ Since destroying a collection destroys all the contained primitives, only destroy a collection + when you are sure no other code is still using any of the contained primitives. +

+ Once this collection is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * primitives = primitives && primitives.destroy(); + */ + destroy(): void; +} + +/** + * The container for all 3D graphical objects and state in a Cesium virtual scene. Generally, +a scene is not created directly; instead, it is implicitly created by {@link CesiumWidget}. +

+contextOptions parameter details: +

+

+The default values are: + +{ + webgl : { + alpha : false, + depth : true, + stencil : false, + antialias : true, + powerPreference: 'high-performance', + premultipliedAlpha : true, + preserveDrawingBuffer : false, + failIfMajorPerformanceCaveat : false + }, + allowTextureFilterAnisotropic : true +} + +

+

+The webgl property corresponds to the {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes} +object used to create the WebGL context. +

+

+webgl.alpha defaults to false, which can improve performance compared to the standard WebGL default +of true. If an application needs to composite Cesium above other HTML elements using alpha-blending, set +webgl.alpha to true. +

+

+The other webgl properties match the WebGL defaults for {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}. +

+

+allowTextureFilterAnisotropic defaults to true, which enables anisotropic texture filtering when the +WebGL extension is supported. Setting this to false will improve performance, but hurt visual quality, especially for horizon views. +

+ * @example + * // Create scene without anisotropic texture filtering +var scene = new Cesium.Scene({ + canvas : canvas, + contextOptions : { + allowTextureFilterAnisotropic : false + } +}); + * @param [options] - Object with the following properties: + * @param options.canvas - The HTML canvas element to create the scene for. + * @param [options.contextOptions] - Context and WebGL creation properties. See details above. + * @param [options.creditContainer] - The HTML element in which the credits will be displayed. + * @param [options.creditViewport] - The HTML element in which to display the credit popup. If not specified, the viewport will be a added as a sibling of the canvas. + * @param [options.mapProjection = new GeographicProjection()] - The map projection to use in 2D and Columbus View modes. + * @param [options.orderIndependentTranslucency = true] - If true and the configuration supports it, use order independent translucency. + * @param [options.scene3DOnly = false] - If true, optimizes memory use and performance for 3D mode but disables the ability to use 2D or Columbus View. + * @param [options.terrainExaggeration = 1.0] - A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid. + * @param [options.shadows = false] - Determines if shadows are cast by light sources. + * @param [options.mapMode2D = MapMode2D.INFINITE_SCROLL] - Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + * @param [options.requestRenderMode = false] - If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * @param [options.maximumRenderTimeChange = 0.0] - If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + */ +export class Scene { + constructor(options?: { + canvas: HTMLCanvasElement; + contextOptions?: any; + creditContainer?: Element; + creditViewport?: Element; + mapProjection?: MapProjection; + orderIndependentTranslucency?: boolean; + scene3DOnly?: boolean; + terrainExaggeration?: number; + shadows?: boolean; + mapMode2D?: MapMode2D; + requestRenderMode?: boolean; + maximumRenderTimeChange?: number; + }); + /** + * Exceptions occurring in render are always caught in order to raise the + renderError event. If this property is true, the error is rethrown + after the event is raised. If this property is false, the render function + returns normally after raising the event. + */ + rethrowRenderErrors: boolean; + /** + * Determines whether or not to instantly complete the + scene transition animation on user input. + */ + completeMorphOnUserInput: boolean; + /** + * The event fired at the beginning of a scene transition. + */ + morphStart: Event; + /** + * The event fired at the completion of a scene transition. + */ + morphComplete: Event; + /** + * The {@link SkyBox} used to draw the stars. + */ + skyBox: SkyBox; + /** + * The sky atmosphere drawn around the globe. + */ + skyAtmosphere: SkyAtmosphere; + /** + * The {@link Sun}. + */ + sun: Sun; + /** + * Uses a bloom filter on the sun when enabled. + */ + sunBloom: boolean; + /** + * The {@link Moon} + */ + moon: Moon; + /** + * The background color, which is only visible if there is no sky box, i.e., {@link Scene#skyBox} is undefined. + */ + backgroundColor: Color; + /** + * The current morph transition time between 2D/Columbus View and 3D, + with 0.0 being 2D or Columbus View and 1.0 being 3D. + */ + morphTime: number; + /** + * The far-to-near ratio of the multi-frustum when using a normal depth buffer. +

+ This value is used to create the near and far values for each frustum of the multi-frustum. It is only used + when {@link Scene#logarithmicDepthBuffer} is false. When logarithmicDepthBuffer is + true, use {@link Scene#logarithmicDepthFarToNearRatio}. +

+ */ + farToNearRatio: number; + /** + * The far-to-near ratio of the multi-frustum when using a logarithmic depth buffer. +

+ This value is used to create the near and far values for each frustum of the multi-frustum. It is only used + when {@link Scene#logarithmicDepthBuffer} is true. When logarithmicDepthBuffer is + false, use {@link Scene#farToNearRatio}. +

+ */ + logarithmicDepthFarToNearRatio: number; + /** + * Determines the uniform depth size in meters of each frustum of the multifrustum in 2D. If a primitive or model close + to the surface shows z-fighting, decreasing this will eliminate the artifact, but decrease performance. On the + other hand, increasing this will increase performance but may cause z-fighting among primitives close to the surface. + */ + nearToFarDistance2D: number; + /** + * This property is for debugging only; it is not for production use. +

+ A function that determines what commands are executed. As shown in the examples below, + the function receives the command's owner as an argument, and returns a boolean indicating if the + command should be executed. +

+

+ The default is undefined, indicating that all commands are executed. +

+ * @example + * // Do not execute any commands. + scene.debugCommandFilter = function(command) { + return false; + }; + + // Execute only the billboard's commands. That is, only draw the billboard. + var billboards = new Cesium.BillboardCollection(); + scene.debugCommandFilter = function(command) { + return command.owner === billboards; + }; + */ + debugCommandFilter: (...params: any[]) => any; + /** + * This property is for debugging only; it is not for production use. +

+ When true, commands are randomly shaded. This is useful + for performance analysis to see what parts of a scene or model are + command-dense and could benefit from batching. +

+ */ + debugShowCommands: boolean; + /** + * This property is for debugging only; it is not for production use. +

+ When true, commands are shaded based on the frustums they + overlap. Commands in the closest frustum are tinted red, commands in + the next closest are green, and commands in the farthest frustum are + blue. If a command overlaps more than one frustum, the color components + are combined, e.g., a command overlapping the first two frustums is tinted + yellow. +

+ */ + debugShowFrustums: boolean; + /** + * This property is for debugging only; it is not for production use. +

+ Displays frames per second and time between frames. +

+ */ + debugShowFramesPerSecond: boolean; + /** + * This property is for debugging only; it is not for production use. +

+ Displays depth information for the indicated frustum. +

+ */ + debugShowGlobeDepth: boolean; + /** + * This property is for debugging only; it is not for production use. +

+ Indicates which frustum will have depth information displayed. +

+ */ + debugShowDepthFrustum: number; + /** + * This property is for debugging only; it is not for production use. +

+ When true, draws outlines to show the boundaries of the camera frustums +

+ */ + debugShowFrustumPlanes: boolean; + /** + * When true, enables picking using the depth buffer. + */ + useDepthPicking: boolean; + /** + * When true, enables picking translucent geometry using the depth buffer. Note that {@link Scene#useDepthPicking} must also be true for enabling this to work. + +

+ Render must be called between picks. +
There is a decrease in performance when enabled. There are extra draw calls to write depth for + translucent geometry. +

+ * @example + * // picking the position of a translucent primitive + viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) { + var pickedFeature = viewer.scene.pick(movement.position); + if (!Cesium.defined(pickedFeature)) { + // nothing picked + return; + } + viewer.scene.render(); + var worldPosition = viewer.scene.pickPosition(movement.position); + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); + */ + pickTranslucentDepth: boolean; + /** + * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional + performance improvements by rendering less geometry and dispatching less terrain requests. + */ + fog: Fog; + /** + * The shadow map for the scene's light source. When enabled, models, primitives, and the globe may cast and receive shadows. + */ + shadowMap: ShadowMap; + /** + * When false, 3D Tiles will render normally. When true, classified 3D Tile geometry will render normally and + unclassified 3D Tile geometry will render with the color multiplied by {@link Scene#invertClassificationColor}. + */ + invertClassification: boolean; + /** + * The highlight color of unclassified 3D Tile geometry when {@link Scene#invertClassification} is true. +

When the color's alpha is less than 1.0, the unclassified portions of the 3D Tiles will not blend correctly with the classified positions of the 3D Tiles.

+

Also, when the color's alpha is less than 1.0, the WEBGL_depth_texture and EXT_frag_depth WebGL extensions must be supported.

+ */ + invertClassificationColor: Color; + /** + * The focal length for use when with cardboard or WebVR. + */ + focalLength: number; + /** + * The eye separation distance in meters for use with cardboard or WebVR. + */ + eyeSeparation: number; + /** + * Post processing effects applied to the final render. + */ + postProcessStages: PostProcessStageCollection; + /** + * When true, rendering a frame will only occur when needed as determined by changes within the scene. + Enabling improves performance of the application, but requires using {@link Scene#requestRender} + to render a new frame explicitly in this mode. This will be necessary in many cases after making changes + to the scene in other parts of the API. + */ + requestRenderMode: boolean; + /** + * If {@link Scene#requestRenderMode} is true, this value defines the maximum change in + simulation time allowed before a render is requested. Lower values increase the number of frames rendered + and higher values decrease the number of frames rendered. If undefined, changes to + the simulation time will never request a render. + This value impacts the rate of rendering for changes in the scene like lighting, entity property updates, + and animations. + */ + maximumRenderTimeChange: number; + /** + * The spherical harmonic coefficients for image-based lighting of PBR models. + */ + sphericalHarmonicCoefficients: Cartesian3[]; + /** + * The url to the KTX file containing the specular environment map and convoluted mipmaps for image-based lighting of PBR models. + */ + specularEnvironmentMaps: string; + /** + * The light source for shading. Defaults to a directional light from the Sun. + */ + light: Light; + /** + * Gets the canvas element to which this scene is bound. + */ + readonly canvas: HTMLCanvasElement; + /** + * The drawingBufferHeight of the underlying GL context. + */ + readonly drawingBufferHeight: number; + /** + * The drawingBufferHeight of the underlying GL context. + */ + readonly drawingBufferWidth: number; + /** + * The maximum aliased line width, in pixels, supported by this WebGL implementation. It will be at least one. + */ + readonly maximumAliasedLineWidth: number; + /** + * The maximum length in pixels of one edge of a cube map, supported by this WebGL implementation. It will be at least 16. + */ + readonly maximumCubeMapSize: number; + /** + * Returns true if the {@link Scene#pickPosition} function is supported. + */ + readonly pickPositionSupported: boolean; + /** + * Returns true if the {@link Scene#sampleHeight} and {@link Scene#sampleHeightMostDetailed} functions are supported. + */ + readonly sampleHeightSupported: boolean; + /** + * Returns true if the {@link Scene#clampToHeight} and {@link Scene#clampToHeightMostDetailed} functions are supported. + */ + readonly clampToHeightSupported: boolean; + /** + * Returns true if the {@link Scene#invertClassification} is supported. + */ + readonly invertClassificationSupported: boolean; + /** + * Returns true if specular environment maps are supported. + */ + readonly specularEnvironmentMapsSupported: boolean; + /** + * Gets or sets the depth-test ellipsoid. + */ + globe: Globe; + /** + * Gets the collection of primitives. + */ + readonly primitives: PrimitiveCollection; + /** + * Gets the collection of ground primitives. + */ + readonly groundPrimitives: PrimitiveCollection; + /** + * Gets or sets the camera. + */ + readonly camera: Camera; + /** + * Gets the controller for camera input handling. + */ + readonly screenSpaceCameraController: ScreenSpaceCameraController; + /** + * Get the map projection to use in 2D and Columbus View modes. + */ + readonly mapProjection: MapProjection; + /** + * Gets the collection of image layers that will be rendered on the globe. + */ + readonly imageryLayers: ImageryLayerCollection; + /** + * The terrain provider providing surface geometry for the globe. + */ + terrainProvider: TerrainProvider; + /** + * Gets an event that's raised when the terrain provider is changed + */ + readonly terrainProviderChanged: Event; + /** + * Gets the event that will be raised before the scene is updated or rendered. Subscribers to the event + receive the Scene instance as the first parameter and the current time as the second parameter. + */ + readonly preUpdate: Event; + /** + * Gets the event that will be raised immediately after the scene is updated and before the scene is rendered. + Subscribers to the event receive the Scene instance as the first parameter and the current time as the second + parameter. + */ + readonly postUpdate: Event; + /** + * Gets the event that will be raised when an error is thrown inside the render function. + The Scene instance and the thrown error are the only two parameters passed to the event handler. + By default, errors are not rethrown after this event is raised, but that can be changed by setting + the rethrowRenderErrors property. + */ + readonly renderError: Event; + /** + * Gets the event that will be raised after the scene is updated and immediately before the scene is rendered. + Subscribers to the event receive the Scene instance as the first parameter and the current time as the second + parameter. + */ + readonly preRender: Event; + /** + * Gets the event that will be raised immediately after the scene is rendered. Subscribers to the event + receive the Scene instance as the first parameter and the current time as the second parameter. + */ + readonly postRender: Event; + /** + * Gets the simulation time when the scene was last rendered. Returns undefined if the scene has not yet been + rendered. + */ + readonly lastRenderTime: JulianDate; + /** + * This property is for debugging only; it is not for production use. +

+ When {@link Scene.debugShowFrustums} is true, this contains + properties with statistics about the number of command execute per frustum. + totalCommands is the total number of commands executed, ignoring + overlap. commandsInFrustums is an array with the number of times + commands are executed redundantly, e.g., how many commands overlap two or + three frustums. +

+ */ + readonly debugFrustumStatistics: any; + /** + * Gets whether or not the scene is optimized for 3D only viewing. + */ + readonly scene3DOnly: boolean; + /** + * Gets whether or not the scene has order independent translucency enabled. + Note that this only reflects the original construction option, and there are + other factors that could prevent OIT from functioning on a given system configuration. + */ + readonly orderIndependentTranslucency: boolean; + /** + * Gets the unique identifier for this scene. + */ + readonly id: string; + /** + * Gets or sets the current mode of the scene. + */ + mode: SceneMode; + /** + * Gets the scalar used to exaggerate the terrain. + */ + readonly terrainExaggeration: number; + /** + * When true, splits the scene into two viewports with steroscopic views for the left and right eyes. + Used for cardboard and WebVR. + */ + useWebVR: boolean; + /** + * Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + */ + readonly mapMode2D: MapMode2D; + /** + * Gets or sets the position of the Imagery splitter within the viewport. Valid values are between 0.0 and 1.0. + */ + imagerySplitPosition: number; + /** + * The distance from the camera at which to disable the depth test of billboards, labels and points + to, for example, prevent clipping against terrain. When set to zero, the depth test should always + be applied. When less than zero, the depth test should never be applied. Setting the disableDepthTestDistance + property of a billboard, label or point will override this value. + */ + minimumDisableDepthTestDistance: number; + /** + * Whether or not to use a logarithmic depth buffer. Enabling this option will allow for less frustums in the multi-frustum, + increasing performance. This property relies on fragmentDepth being supported. + */ + logarithmicDepthBuffer: boolean; + /** + * The value used for gamma correction. This is only used when rendering with high dynamic range. + */ + gamma: number; + /** + * Whether or not to use high dynamic range rendering. + */ + highDynamicRange: boolean; + /** + * Whether or not high dynamic range rendering is supported. + */ + readonly highDynamicRangeSupported: boolean; + /** + * Whether or not the camera is underneath the globe. + */ + readonly cameraUnderground: boolean; + /** + * Determines if a compressed texture format is supported. + * @param format - The texture format. May be the name of the format or the WebGL extension name, e.g. s3tc or WEBGL_compressed_texture_s3tc. + * @returns Whether or not the format is supported. + */ + getCompressedTextureFormatSupported(format: string): boolean; + /** + * Update and render the scene. It is usually not necessary to call this function + directly because {@link CesiumWidget} or {@link Viewer} do it automatically. + * @param [time] - The simulation time at which to render. + */ + render(time?: JulianDate): void; + /** + * Requests a new rendered frame when {@link Scene#requestRenderMode} is set to true. + The render rate will not exceed the {@link CesiumWidget#targetFrameRate}. + */ + requestRender(): void; + /** + * Returns an object with a `primitive` property that contains the first (top) primitive in the scene + at a particular window coordinate or undefined if nothing is at the location. Other properties may + potentially be set depending on the type of primitive and may be used to further identify the picked object. +

+ When a feature of a 3D Tiles tileset is picked, pick returns a {@link Cesium3DTileFeature} object. +

+ * @example + * // On mouse over, color the feature yellow. + handler.setInputAction(function(movement) { + var feature = scene.pick(movement.endPosition); + if (feature instanceof Cesium.Cesium3DTileFeature) { + feature.color = Cesium.Color.YELLOW; + } + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + * @param windowPosition - Window coordinates to perform picking on. + * @param [width = 3] - Width of the pick rectangle. + * @param [height = 3] - Height of the pick rectangle. + * @returns Object containing the picked primitive. + */ + pick(windowPosition: Cartesian2, width?: number, height?: number): any; + /** + * Returns the cartesian position reconstructed from the depth buffer and window position. +

+ The position reconstructed from the depth buffer in 2D may be slightly different from those + reconstructed in 3D and Columbus view. This is caused by the difference in the distribution + of depth values of perspective and orthographic projection. +

+

+ Set {@link Scene#pickTranslucentDepth} to true to include the depth of + translucent primitives; otherwise, this essentially picks through translucent primitives. +

+ * @param windowPosition - Window coordinates to perform picking on. + * @param [result] - The object on which to restore the result. + * @returns The cartesian position. + */ + pickPosition(windowPosition: Cartesian2, result?: Cartesian3): Cartesian3; + /** + * Returns a list of objects, each containing a `primitive` property, for all primitives at + a particular window coordinate position. Other properties may also be set depending on the + type of primitive and may be used to further identify the picked object. The primitives in + the list are ordered by their visual order in the scene (front to back). + * @example + * var pickedObjects = scene.drillPick(new Cesium.Cartesian2(100.0, 200.0)); + * @param windowPosition - Window coordinates to perform picking on. + * @param [limit] - If supplied, stop drilling after collecting this many picks. + * @param [width = 3] - Width of the pick rectangle. + * @param [height = 3] - Height of the pick rectangle. + * @returns Array of objects, each containing 1 picked primitives. + */ + drillPick(windowPosition: Cartesian2, limit?: number, width?: number, height?: number): any[]; + /** + * Returns the height of scene geometry at the given cartographic position or undefined if there was no + scene geometry to sample height from. The height of the input position is ignored. May be used to clamp objects to + the globe, 3D Tiles, or primitives in the scene. +

+ This function only samples height from globe tiles and 3D Tiles that are rendered in the current view. Samples height + from all other primitives regardless of their visibility. +

+ * @example + * var position = new Cesium.Cartographic(-1.31968, 0.698874); + var height = viewer.scene.sampleHeight(position); + console.log(height); + * @param position - The cartographic position to sample height from. + * @param [objectsToExclude] - A list of primitives, entities, or 3D Tiles features to not sample height from. + * @param [width = 0.1] - Width of the intersection volume in meters. + * @returns The height. This may be undefined if there was no scene geometry to sample height from. + */ + sampleHeight(position: Cartographic, objectsToExclude?: object[], width?: number): number; + /** + * Clamps the given cartesian position to the scene geometry along the geodetic surface normal. Returns the + clamped position or undefined if there was no scene geometry to clamp to. May be used to clamp + objects to the globe, 3D Tiles, or primitives in the scene. +

+ This function only clamps to globe tiles and 3D Tiles that are rendered in the current view. Clamps to + all other primitives regardless of their visibility. +

+ * @example + * // Clamp an entity to the underlying scene geometry + var position = entity.position.getValue(Cesium.JulianDate.now()); + entity.position = viewer.scene.clampToHeight(position); + * @param cartesian - The cartesian position. + * @param [objectsToExclude] - A list of primitives, entities, or 3D Tiles features to not clamp to. + * @param [width = 0.1] - Width of the intersection volume in meters. + * @param [result] - An optional object to return the clamped position. + * @returns The modified result parameter or a new Cartesian3 instance if one was not provided. This may be undefined if there was no scene geometry to clamp to. + */ + clampToHeight(cartesian: Cartesian3, objectsToExclude?: object[], width?: number, result?: Cartesian3): Cartesian3; + /** + * Initiates an asynchronous {@link Scene#sampleHeight} query for an array of {@link Cartographic} positions + using the maximum level of detail for 3D Tilesets in the scene. The height of the input positions is ignored. + Returns a promise that is resolved when the query completes. Each point height is modified in place. + If a height cannot be determined because no geometry can be sampled at that location, or another error occurs, + the height is set to undefined. + * @example + * var positions = [ + new Cesium.Cartographic(-1.31968, 0.69887), + new Cesium.Cartographic(-1.10489, 0.83923) + ]; + var promise = viewer.scene.sampleHeightMostDetailed(positions); + promise.then(function(updatedPosition) { + // positions[0].height and positions[1].height have been updated. + // updatedPositions is just a reference to positions. + } + * @param positions - The cartographic positions to update with sampled heights. + * @param [objectsToExclude] - A list of primitives, entities, or 3D Tiles features to not sample height from. + * @param [width = 0.1] - Width of the intersection volume in meters. + * @returns A promise that resolves to the provided list of positions when the query has completed. + */ + sampleHeightMostDetailed(positions: Cartographic[], objectsToExclude?: object[], width?: number): Promise; + /** + * Initiates an asynchronous {@link Scene#clampToHeight} query for an array of {@link Cartesian3} positions + using the maximum level of detail for 3D Tilesets in the scene. Returns a promise that is resolved when + the query completes. Each position is modified in place. If a position cannot be clamped because no geometry + can be sampled at that location, or another error occurs, the element in the array is set to undefined. + * @example + * var cartesians = [ + entities[0].position.getValue(Cesium.JulianDate.now()), + entities[1].position.getValue(Cesium.JulianDate.now()) + ]; + var promise = viewer.scene.clampToHeightMostDetailed(cartesians); + promise.then(function(updatedCartesians) { + entities[0].position = updatedCartesians[0]; + entities[1].position = updatedCartesians[1]; + } + * @param cartesians - The cartesian positions to update with clamped positions. + * @param [objectsToExclude] - A list of primitives, entities, or 3D Tiles features to not clamp to. + * @param [width = 0.1] - Width of the intersection volume in meters. + * @returns A promise that resolves to the provided list of positions when the query has completed. + */ + clampToHeightMostDetailed(cartesians: Cartesian3[], objectsToExclude?: object[], width?: number): Promise; + /** + * Transforms a position in cartesian coordinates to canvas coordinates. This is commonly used to place an + HTML element at the same screen position as an object in the scene. + * @example + * // Output the canvas position of longitude/latitude (0, 0) every time the mouse moves. + var scene = widget.scene; + var ellipsoid = scene.globe.ellipsoid; + var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); + handler.setInputAction(function(movement) { + console.log(scene.cartesianToCanvasCoordinates(position)); + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + * @param position - The position in cartesian coordinates. + * @param [result] - An optional object to return the input position transformed to canvas coordinates. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. This may be undefined if the input position is near the center of the ellipsoid. + */ + cartesianToCanvasCoordinates(position: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Instantly completes an active transition. + */ + completeMorph(): void; + /** + * Asynchronously transitions the scene to 2D. + * @param [duration = 2.0] - The amount of time, in seconds, for transition animations to complete. + */ + morphTo2D(duration?: number): void; + /** + * Asynchronously transitions the scene to Columbus View. + * @param [duration = 2.0] - The amount of time, in seconds, for transition animations to complete. + */ + morphToColumbusView(duration?: number): void; + /** + * Asynchronously transitions the scene to 3D. + * @param [duration = 2.0] - The amount of time, in seconds, for transition animations to complete. + */ + morphTo3D(duration?: number): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * scene = scene && scene.destroy(); + */ + destroy(): void; +} + +/** + * Indicates if the scene is viewed in 3D, 2D, or 2.5D Columbus view. + */ +export enum SceneMode { + /** + * Morphing between mode, e.g., 3D to 2D. + */ + MORPHING = 0, + /** + * Columbus View mode. A 2.5D perspective view where the map is laid out + flat and objects with non-zero height are drawn above it. + */ + COLUMBUS_VIEW = 1, + /** + * 2D mode. The map is viewed top-down with an orthographic projection. + */ + SCENE2D = 2, + /** + * 3D mode. A traditional 3D perspective view of the globe. + */ + SCENE3D = 3 +} + +/** + * Functions that do scene-dependent transforms between rendering-related coordinate systems. + */ +export namespace SceneTransforms { + /** + * Transforms a position in WGS84 coordinates to window coordinates. This is commonly used to place an + HTML element at the same screen position as an object in the scene. + * @example + * // Output the window position of longitude/latitude (0, 0) every time the mouse moves. + var scene = widget.scene; + var ellipsoid = scene.globe.ellipsoid; + var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); + handler.setInputAction(function(movement) { + console.log(Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position)); + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + * @param scene - The scene. + * @param position - The position in WGS84 (world) coordinates. + * @param [result] - An optional object to return the input position transformed to window coordinates. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. This may be undefined if the input position is near the center of the ellipsoid. + */ + function wgs84ToWindowCoordinates(scene: Scene, position: Cartesian3, result?: Cartesian2): Cartesian2; + /** + * Transforms a position in WGS84 coordinates to drawing buffer coordinates. This may produce different + results from SceneTransforms.wgs84ToWindowCoordinates when the browser zoom is not 100%, or on high-DPI displays. + * @example + * // Output the window position of longitude/latitude (0, 0) every time the mouse moves. + var scene = widget.scene; + var ellipsoid = scene.globe.ellipsoid; + var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0); + var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); + handler.setInputAction(function(movement) { + console.log(Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position)); + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + * @param scene - The scene. + * @param position - The position in WGS84 (world) coordinates. + * @param [result] - An optional object to return the input position transformed to window coordinates. + * @returns The modified result parameter or a new Cartesian2 instance if one was not provided. This may be undefined if the input position is near the center of the ellipsoid. + */ + function wgs84ToDrawingBufferCoordinates(scene: Scene, position: Cartesian3, result?: Cartesian2): Cartesian2; +} + +/** + * Modifies the camera position and orientation based on mouse input to a canvas. + * @param scene - The scene. + */ +export class ScreenSpaceCameraController { + constructor(scene: Scene); + /** + * If true, inputs are allowed conditionally with the flags enableTranslate, enableZoom, + enableRotate, enableTilt, and enableLook. If false, all inputs are disabled. + + NOTE: This setting is for temporary use cases, such as camera flights and + drag-selection of regions (see Picking demo). It is typically set to false at the + start of such events, and set true on completion. To keep inputs disabled + past the end of camera flights, you must use the other booleans (enableTranslate, + enableZoom, enableRotate, enableTilt, and enableLook). + */ + enableInputs: boolean; + /** + * If true, allows the user to pan around the map. If false, the camera stays locked at the current position. + This flag only applies in 2D and Columbus view modes. + */ + enableTranslate: boolean; + /** + * If true, allows the user to zoom in and out. If false, the camera is locked to the current distance from the ellipsoid. + */ + enableZoom: boolean; + /** + * If true, allows the user to rotate the world which translates the user's position. + This flag only applies in 2D and 3D. + */ + enableRotate: boolean; + /** + * If true, allows the user to tilt the camera. If false, the camera is locked to the current heading. + This flag only applies in 3D and Columbus view. + */ + enableTilt: boolean; + /** + * If true, allows the user to use free-look. If false, the camera view direction can only be changed through translating + or rotating. This flag only applies in 3D and Columbus view modes. + */ + enableLook: boolean; + /** + * A parameter in the range [0, 1) used to determine how long + the camera will continue to spin because of inertia. + With value of zero, the camera will have no inertia. + */ + inertiaSpin: number; + /** + * A parameter in the range [0, 1) used to determine how long + the camera will continue to translate because of inertia. + With value of zero, the camera will have no inertia. + */ + inertiaTranslate: number; + /** + * A parameter in the range [0, 1) used to determine how long + the camera will continue to zoom because of inertia. + With value of zero, the camera will have no inertia. + */ + inertiaZoom: number; + /** + * A parameter in the range [0, 1) used to limit the range + of various user inputs to a percentage of the window width/height per animation frame. + This helps keep the camera under control in low-frame-rate situations. + */ + maximumMovementRatio: number; + /** + * Sets the duration, in seconds, of the bounce back animations in 2D and Columbus view. + */ + bounceAnimationTime: number; + /** + * The minimum magnitude, in meters, of the camera position when zooming. Defaults to 1.0. + */ + minimumZoomDistance: number; + /** + * The maximum magnitude, in meters, of the camera position when zooming. Defaults to positive infinity. + */ + maximumZoomDistance: number; + /** + * The input that allows the user to pan around the map. This only applies in 2D and Columbus view modes. +

+ The type came be a {@link CameraEventType}, undefined, an object with eventType + and modifier properties with types CameraEventType and {@link KeyboardEventModifier}, + or an array of any of the preceding. +

+ */ + translateEventTypes: CameraEventType | any[] | undefined; + /** + * The input that allows the user to zoom in/out. +

+ The type came be a {@link CameraEventType}, undefined, an object with eventType + and modifier properties with types CameraEventType and {@link KeyboardEventModifier}, + or an array of any of the preceding. +

+ */ + zoomEventTypes: CameraEventType | any[] | undefined; + /** + * The input that allows the user to rotate around the globe or another object. This only applies in 3D and Columbus view modes. +

+ The type came be a {@link CameraEventType}, undefined, an object with eventType + and modifier properties with types CameraEventType and {@link KeyboardEventModifier}, + or an array of any of the preceding. +

+ */ + rotateEventTypes: CameraEventType | any[] | undefined; + /** + * The input that allows the user to tilt in 3D and Columbus view or twist in 2D. +

+ The type came be a {@link CameraEventType}, undefined, an object with eventType + and modifier properties with types CameraEventType and {@link KeyboardEventModifier}, + or an array of any of the preceding. +

+ */ + tiltEventTypes: CameraEventType | any[] | undefined; + /** + * The input that allows the user to change the direction the camera is viewing. This only applies in 3D and Columbus view modes. +

+ The type came be a {@link CameraEventType}, undefined, an object with eventType + and modifier properties with types CameraEventType and {@link KeyboardEventModifier}, + or an array of any of the preceding. +

+ */ + lookEventTypes: CameraEventType | any[] | undefined; + /** + * The minimum height the camera must be before picking the terrain instead of the ellipsoid. + */ + minimumPickingTerrainHeight: number; + /** + * The minimum height the camera must be before testing for collision with terrain. + */ + minimumCollisionTerrainHeight: number; + /** + * The minimum height the camera must be before switching from rotating a track ball to + free look when clicks originate on the sky or in space. + */ + minimumTrackBallHeight: number; + /** + * Enables or disables camera collision detection with terrain. + */ + enableCollisionDetection: boolean; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Removes mouse listeners held by this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * controller = controller && controller.destroy(); + */ + destroy(): void; +} + +/** + * Use {@link Viewer#shadowMap} to get the scene's shadow map. Do not construct this directly. + +

+The normalOffset bias pushes the shadows forward slightly, and may be disabled +for applications that require ultra precise shadows. +

+ * @param options - An object containing the following properties: + * @param options.lightCamera - A camera representing the light source. + * @param [options.enabled = true] - Whether the shadow map is enabled. + * @param [options.isPointLight = false] - Whether the light source is a point light. Point light shadows do not use cascades. + * @param [options.pointLightRadius = 100.0] - Radius of the point light. + * @param [options.cascadesEnabled = true] - Use multiple shadow maps to cover different partitions of the view frustum. + * @param [options.numberOfCascades = 4] - The number of cascades to use for the shadow map. Supported values are one and four. + * @param [options.maximumDistance = 5000.0] - The maximum distance used for generating cascaded shadows. Lower values improve shadow quality. + * @param [options.size = 2048] - The width and height, in pixels, of each shadow map. + * @param [options.softShadows = false] - Whether percentage-closer-filtering is enabled for producing softer shadows. + * @param [options.darkness = 0.3] - The shadow darkness. + * @param [options.normalOffset = true] - Whether a normal bias is applied to shadows. + */ +export class ShadowMap { + constructor(options: { + lightCamera: Camera; + enabled?: boolean; + isPointLight?: boolean; + pointLightRadius?: boolean; + cascadesEnabled?: boolean; + numberOfCascades?: number; + maximumDistance?: number; + size?: number; + softShadows?: boolean; + darkness?: number; + normalOffset?: boolean; + }); + /** + * Determines the darkness of the shadows. + */ + darkness: number; + /** + * Determines the maximum distance of the shadow map. Only applicable for cascaded shadows. Larger distances may result in lower quality shadows. + */ + maximumDistance: number; + /** + * Determines if the shadow map will be shown. + */ + enabled: boolean; + /** + * Determines if a normal bias will be applied to shadows. + */ + normalOffset: boolean; + /** + * Determines if soft shadows are enabled. Uses pcf filtering which requires more texture reads and may hurt performance. + */ + softShadows: boolean; + /** + * The width and height, in pixels, of each shadow map. + */ + size: number; +} + +/** + * Specifies whether the object casts or receives shadows from light sources when +shadows are enabled. + */ +export enum ShadowMode { + /** + * The object does not cast or receive shadows. + */ + DISABLED = 0, + /** + * The object casts and receives shadows. + */ + ENABLED = 1, + /** + * The object casts shadows only. + */ + CAST_ONLY = 2, + /** + * The object receives shadows only. + */ + RECEIVE_ONLY = 3 +} + +export namespace SingleTileImageryProvider { + /** + * Initialization options for the SingleTileImageryProvider constructor + * @property url - The url for the tile. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + */ + type ConstructorOptions = { + url: Resource | string; + rectangle?: Rectangle; + credit?: Credit | string; + ellipsoid?: Ellipsoid; + }; +} + +/** + * Provides a single, top-level imagery tile. The single image is assumed to use a +{@link GeographicTilingScheme}. + * @param options - Object describing initialization options + */ +export class SingleTileImageryProvider { + constructor(options: SingleTileImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the single, top-level imagery tile. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link SingleTileImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link SingleTileImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * An atmosphere drawn around the limb of the provided ellipsoid. Based on +{@link https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html|Accurate Atmospheric Scattering} +in GPU Gems 2. +

+This is only supported in 3D. Atmosphere is faded out when morphing to 2D or Columbus view. +

+ * @example + * scene.skyAtmosphere = new Cesium.SkyAtmosphere(); + * @param [ellipsoid = Ellipsoid.WGS84] - The ellipsoid that the atmosphere is drawn around. + */ +export class SkyAtmosphere { + constructor(ellipsoid?: Ellipsoid); + /** + * Determines if the atmosphere is shown. + */ + show: boolean; + /** + * Compute atmosphere per-fragment instead of per-vertex. + This produces better looking atmosphere with a slight performance penalty. + */ + perFragmentAtmosphere: boolean; + /** + * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A hue shift of 1.0 indicates a complete rotation of the hues available. + */ + hueShift: number; + /** + * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A saturation shift of -1.0 is monochrome. + */ + saturationShift: number; + /** + * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift). + A brightness shift of -1.0 is complete darkness, which will let space show through. + */ + brightnessShift: number; + /** + * Gets the ellipsoid the atmosphere is drawn around. + */ + readonly ellipsoid: Ellipsoid; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * skyAtmosphere = skyAtmosphere && skyAtmosphere.destroy(); + */ + destroy(): void; +} + +/** + * A sky box around the scene to draw stars. The sky box is defined using the True Equator Mean Equinox (TEME) axes. +

+This is only supported in 3D. The sky box is faded out when morphing to 2D or Columbus view. The size of +the sky box must not exceed {@link Scene#maximumCubeMapSize}. +

+ * @example + * scene.skyBox = new Cesium.SkyBox({ + sources : { + positiveX : 'skybox_px.png', + negativeX : 'skybox_nx.png', + positiveY : 'skybox_py.png', + negativeY : 'skybox_ny.png', + positiveZ : 'skybox_pz.png', + negativeZ : 'skybox_nz.png' + } +}); + * @param options - Object with the following properties: + * @param [options.sources] - The source URL or Image object for each of the six cube map faces. See the example below. + * @param [options.show = true] - Determines if this primitive will be shown. + */ +export class SkyBox { + constructor(options: { + sources?: any; + show?: boolean; + }); + /** + * The sources used to create the cube map faces: an object + with positiveX, negativeX, positiveY, + negativeY, positiveZ, and negativeZ properties. + These can be either URLs or Image objects. + */ + sources: any; + /** + * Determines if the sky box will be shown. + */ + show: boolean; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * skyBox = skyBox && skyBox.destroy(); + */ + destroy(): void; +} + +/** + * A ParticleEmitter that emits particles within a sphere. +Particles will be positioned randomly within the sphere and have initial velocities emanating from the center of the sphere. + * @param [radius = 1.0] - The radius of the sphere in meters. + */ +export class SphereEmitter { + constructor(radius?: number); + /** + * The radius of the sphere in meters. + */ + radius: number; +} + +/** + * Determines the function used to compare stencil values for the stencil test. + */ +export enum StencilFunction { + /** + * The stencil test never passes. + */ + NEVER = WebGLConstants.NEVER, + /** + * The stencil test passes when the masked reference value is less than the masked stencil value. + */ + LESS = WebGLConstants.LESS, + /** + * The stencil test passes when the masked reference value is equal to the masked stencil value. + */ + EQUAL = WebGLConstants.EQUAL, + /** + * The stencil test passes when the masked reference value is less than or equal to the masked stencil value. + */ + LESS_OR_EQUAL = WebGLConstants.LEQUAL, + /** + * The stencil test passes when the masked reference value is greater than the masked stencil value. + */ + GREATER = WebGLConstants.GREATER, + /** + * The stencil test passes when the masked reference value is not equal to the masked stencil value. + */ + NOT_EQUAL = WebGLConstants.NOTEQUAL, + /** + * The stencil test passes when the masked reference value is greater than or equal to the masked stencil value. + */ + GREATER_OR_EQUAL = WebGLConstants.GEQUAL, + /** + * The stencil test always passes. + */ + ALWAYS = WebGLConstants.ALWAYS +} + +/** + * Determines the action taken based on the result of the stencil test. + */ +export enum StencilOperation { + /** + * Sets the stencil buffer value to zero. + */ + ZERO = WebGLConstants.ZERO, + /** + * Does not change the stencil buffer. + */ + KEEP = WebGLConstants.KEEP, + /** + * Replaces the stencil buffer value with the reference value. + */ + REPLACE = WebGLConstants.REPLACE, + /** + * Increments the stencil buffer value, clamping to unsigned byte. + */ + INCREMENT = WebGLConstants.INCR, + /** + * Decrements the stencil buffer value, clamping to zero. + */ + DECREMENT = WebGLConstants.DECR, + /** + * Bitwise inverts the existing stencil buffer value. + */ + INVERT = WebGLConstants.INVERT, + /** + * Increments the stencil buffer value, wrapping to zero when exceeding the unsigned byte range. + */ + INCREMENT_WRAP = WebGLConstants.INCR_WRAP, + /** + * Decrements the stencil buffer value, wrapping to the maximum unsigned byte instead of going below zero. + */ + DECREMENT_WRAP = WebGLConstants.DECR_WRAP +} + +/** + * An expression for a style applied to a {@link Cesium3DTileset}. +

+Derived classes of this interface evaluate expressions in the +{@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}. +

+

+This type describes an interface and is not intended to be instantiated directly. +

+ */ +export class StyleExpression { + constructor(); + /** + * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of + the expression in the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language} + is of type Boolean, Number, or String, the corresponding JavaScript + primitive type will be returned. If the result is a RegExp, a Javascript RegExp + object will be returned. If the result is a Cartesian2, Cartesian3, or Cartesian4, + a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the result argument is + a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned. + * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object onto which to store the result. + * @returns The result of evaluating the expression. + */ + evaluate(feature: Cesium3DTileFeature, result?: any): boolean | number | string | RegExp | Cartesian2 | Cartesian3 | Cartesian4 | Color; + /** + * Evaluates the result of a Color expression, optionally using the provided feature's properties. +

+ This is equivalent to {@link StyleExpression#evaluate} but always returns a {@link Color} object. +

+ * @param feature - The feature whose properties may be used as variables in the expression. + * @param [result] - The object in which to store the result. + * @returns The modified result parameter or a new Color instance if one was not provided. + */ + evaluateColor(feature: Cesium3DTileFeature, result?: Color): Color; +} + +/** + * Draws a sun billboard. +

This is only supported in 3D and Columbus view.

+ * @example + * scene.sun = new Cesium.Sun(); + */ +export class Sun { + constructor(); + /** + * Determines if the sun will be shown. + */ + show: boolean; + /** + * Gets or sets a number that controls how "bright" the Sun's lens flare appears + to be. Zero shows just the Sun's disc without any flare. + Use larger values for a more pronounced flare around the Sun. + */ + glowFactor: number; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * sun = sun && sun.destroy(); + + + */ + destroy(): void; +} + +/** + * A directional light source that originates from the Sun. + * @param [options] - Object with the following properties: + * @param [options.color = Color.WHITE] - The light's color. + * @param [options.intensity = 2.0] - The light's intensity. + */ +export class SunLight { + constructor(options?: { + color?: Color; + intensity?: number; + }); + /** + * The color of the light. + */ + color: Color; + /** + * The intensity of the light. + */ + intensity: number; +} + +export namespace TileCoordinatesImageryProvider { + /** + * Initialization options for the TileCoordinatesImageryProvider constructor + * @property [tilingScheme = new GeographicTilingScheme()] - The tiling scheme for which to draw tiles. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [color = Color.YELLOW] - The color to draw the tile box and label. + * @property [tileWidth = 256] - The width of the tile for level-of-detail selection purposes. + * @property [tileHeight = 256] - The height of the tile for level-of-detail selection purposes. + */ + type ConstructorOptions = { + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + color?: Color; + tileWidth?: number; + tileHeight?: number; + }; +} + +/** + * An {@link ImageryProvider} that draws a box around every rendered tile in the tiling scheme, and draws +a label inside it indicating the X, Y, Level coordinates of the tile. This is mostly useful for +debugging terrain and imagery rendering problems. + * @param [options] - Object describing initialization options + */ +export class TileCoordinatesImageryProvider { + constructor(options?: TileCoordinatesImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage + and texture upload time. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link TileCoordinatesImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * A policy for discarding tile images according to some criteria. This type describes an +interface and is not intended to be instantiated directly. + */ +export class TileDiscardPolicy { + constructor(); + /** + * Determines if the discard policy is ready to process images. + * @returns True if the discard policy is ready to process images; otherwise, false. + */ + isReady(): boolean; + /** + * Given a tile image, decide whether to discard that image. + * @param image - An image to test. + * @returns True if the image should be discarded; otherwise, false. + */ + shouldDiscardImage(image: HTMLImageElement): boolean; +} + +export namespace TileMapServiceImageryProvider { + /** + * Initialization options for the TileMapServiceImageryProvider constructor + * @property [url = '.'] - Path to image tiles on server. + * @property [fileExtension = 'png'] - The file extension for images on the server. + * @property [credit = ''] - A credit for the data source, which is displayed on the canvas. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying + this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely + to result in rendering problems. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image. + * @property [tilingScheme] - The tiling scheme specifying how the ellipsoidal + surface is broken into tiles. If this parameter is not provided, a {@link WebMercatorTilingScheme} + is used. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [tileWidth = 256] - Pixel width of image tiles. + * @property [tileHeight = 256] - Pixel height of image tiles. + * @property [flipXY] - Older versions of gdal2tiles.py flipped X and Y values in tilemapresource.xml. + Specifying this option will do the same, allowing for loading of these incorrect tilesets. + */ + type ConstructorOptions = { + url?: Resource | string | Promise | Promise; + fileExtension?: string; + credit?: Credit | string; + minimumLevel?: number; + maximumLevel?: number; + rectangle?: Rectangle; + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + tileWidth?: number; + tileHeight?: number; + flipXY?: boolean; + }; +} + +/** + * An imagery provider that provides tiled imagery as generated by +{@link http://www.maptiler.org/|MapTiler}, {@link http://www.klokan.cz/projects/gdal2tiles/|GDAL2Tiles}, etc. + * @example + * var tms = new Cesium.TileMapServiceImageryProvider({ + url : '../images/cesium_maptiler/Cesium_Logo_Color', + fileExtension: 'png', + maximumLevel: 4, + rectangle: new Cesium.Rectangle( + Cesium.Math.toRadians(-120.0), + Cesium.Math.toRadians(20.0), + Cesium.Math.toRadians(-60.0), + Cesium.Math.toRadians(40.0)) +}); + * @param options - Object describing initialization options + */ +export class TileMapServiceImageryProvider extends UrlTemplateImageryProvider { + constructor(options: TileMapServiceImageryProvider.ConstructorOptions); +} + +/** + * Provides functionality for ImageryProviders that have time dynamic imagery + * @param options - Object with the following properties: + * @param options.clock - A Clock instance that is used when determining the value for the time dimension. Required when options.times is specified. + * @param options.times - TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values. + * @param options.requestImageFunction - A function that will request imagery tiles. + * @param options.reloadFunction - A function that will be called when all imagery tiles need to be reloaded. + */ +export class TimeDynamicImagery { + constructor(options: { + clock: Clock; + times: TimeIntervalCollection; + requestImageFunction: (...params: any[]) => any; + reloadFunction: (...params: any[]) => any; + }); + /** + * Gets or sets a clock that is used to get keep the time used for time dynamic parameters. + */ + clock: Clock; + /** + * Gets or sets a time interval collection. + */ + times: TimeIntervalCollection; + /** + * Gets the current interval. + */ + currentInterval: TimeInterval; + /** + * Gets the tile from the cache if its available. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if the tile is not in the cache. + */ + getFromCache(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Checks if the next interval is approaching and will start preload the tile if necessary. Otherwise it will + just add the tile to a list to preload when we approach the next interval. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + */ + checkApproachingInterval(x: number, y: number, level: number, request?: Request): void; +} + +/** + * Provides playback of time-dynamic point cloud data. +

+Point cloud frames are prefetched in intervals determined by the average frame load time and the current clock speed. +If intermediate frames cannot be loaded in time to meet playback speed, they will be skipped. If frames are sufficiently +small or the clock is sufficiently slow then no frames will be skipped. +

+ * @param options - Object with the following properties: + * @param options.clock - A {@link Clock} instance that is used when determining the value for the time dimension. + * @param options.intervals - A {@link TimeIntervalCollection} with its data property being an object containing a uri to a 3D Tiles Point Cloud tile and an optional transform. + * @param [options.show = true] - Determines if the point cloud will be shown. + * @param [options.modelMatrix = Matrix4.IDENTITY] - A 4x4 transformation matrix that transforms the point cloud. + * @param [options.shadows = ShadowMode.ENABLED] - Determines whether the point cloud casts or receives shadows from light sources. + * @param [options.maximumMemoryUsage = 256] - The maximum amount of memory in MB that can be used by the point cloud. + * @param [options.shading] - Options for constructing a {@link PointCloudShading} object to control point attenuation and eye dome lighting. + * @param [options.style] - The style, defined using the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}, applied to each point in the point cloud. + * @param [options.clippingPlanes] - The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud. + */ +export class TimeDynamicPointCloud { + constructor(options: { + clock: Clock; + intervals: TimeIntervalCollection; + show?: boolean; + modelMatrix?: Matrix4; + shadows?: ShadowMode; + maximumMemoryUsage?: number; + shading?: any; + style?: Cesium3DTileStyle; + clippingPlanes?: ClippingPlaneCollection; + }); + /** + * Determines if the point cloud will be shown. + */ + show: boolean; + /** + * A 4x4 transformation matrix that transforms the point cloud. + */ + modelMatrix: Matrix4; + /** + * Determines whether the point cloud casts or receives shadows from light sources. +

+ Enabling shadows has a performance impact. A point cloud that casts shadows must be rendered twice, once from the camera and again from the light's point of view. +

+

+ Shadows are rendered only when {@link Viewer#shadows} is true. +

+ */ + shadows: ShadowMode; + /** + * The maximum amount of GPU memory (in MB) that may be used to cache point cloud frames. +

+ Frames that are not being loaded or rendered are unloaded to enforce this. +

+

+ If decreasing this value results in unloading tiles, the tiles are unloaded the next frame. +

+ */ + maximumMemoryUsage: number; + /** + * Options for controlling point size based on geometric error and eye dome lighting. + */ + shading: PointCloudShading; + /** + * The style, defined using the + {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}, + applied to each point in the point cloud. +

+ Assign undefined to remove the style, which will restore the visual + appearance of the point cloud to its default when no style was applied. +

+ * @example + * pointCloud.style = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ['${Classification} === 0', 'color("purple", 0.5)'], + ['${Classification} === 1', 'color("red")'], + ['true', '${COLOR}'] + ] + }, + show : '${Classification} !== 2' + }); + */ + style: Cesium3DTileStyle; + /** + * The event fired to indicate that a frame failed to load. A frame may fail to load if the + request for its uri fails or processing fails due to invalid content. +

+ If there are no event listeners, error messages will be logged to the console. +

+

+ The error object passed to the listener contains two properties: +

    +
  • uri: the uri of the failed frame.
  • +
  • message: the error message.
  • +
+ * @example + * pointCloud.frameFailed.addEventListener(function(error) { + console.log('An error occurred loading frame: ' + error.uri); + console.log('Error: ' + error.message); + }); + */ + frameFailed: Event; + /** + * The event fired to indicate that a new frame was rendered. +

+ The time dynamic point cloud {@link TimeDynamicPointCloud} is passed to the event listener. +

+ * @example + * pointCloud.frameChanged.addEventListener(function(timeDynamicPointCloud) { + viewer.camera.viewBoundingSphere(timeDynamicPointCloud.boundingSphere); + }); + */ + frameChanged: Event; + /** + * The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud. + */ + clippingPlanes: ClippingPlaneCollection; + /** + * The total amount of GPU memory in bytes used by the point cloud. + */ + readonly totalMemoryUsageInBytes: number; + /** + * The bounding sphere of the frame being rendered. Returns undefined if no frame is being rendered. + */ + readonly boundingSphere: BoundingSphere; + /** + * Gets the promise that will be resolved when the point cloud renders a frame for the first time. + */ + readonly readyPromise: Promise; + /** + * Marks the point cloud's {@link TimeDynamicPointCloud#style} as dirty, which forces all + points to re-evaluate the style in the next frame. + */ + makeStyleDirty(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns true if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * pointCloud = pointCloud && pointCloud.destroy(); + */ + destroy(): void; +} + +export namespace UrlTemplateImageryProvider { + /** + * Initialization options for the UrlTemplateImageryProvider constructor + * @property [options] - Object with the following properties: + * @property url - The URL template to use to request tiles. It has the following keywords: +
    +
  • {z}: The level of the tile in the tiling scheme. Level zero is the root of the quadtree pyramid.
  • +
  • {x}: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.
  • +
  • {y}: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.
  • +
  • {s}: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.
  • +
  • {reverseX}: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.
  • +
  • {reverseY}: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.
  • +
  • {reverseZ}: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid. In order to use reverseZ, maximumLevel must be defined.
  • +
  • {westDegrees}: The Western edge of the tile in geodetic degrees.
  • +
  • {southDegrees}: The Southern edge of the tile in geodetic degrees.
  • +
  • {eastDegrees}: The Eastern edge of the tile in geodetic degrees.
  • +
  • {northDegrees}: The Northern edge of the tile in geodetic degrees.
  • +
  • {westProjected}: The Western edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {southProjected}: The Southern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {eastProjected}: The Eastern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {northProjected}: The Northern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {width}: The width of each tile in pixels.
  • +
  • {height}: The height of each tile in pixels.
  • +
+ * @property [pickFeaturesUrl] - The URL template to use to pick features. If this property is not specified, + {@link UrlTemplateImageryProvider#pickFeatures} will immediately returned undefined, indicating no + features picked. The URL template supports all of the keywords supported by the url + parameter, plus the following: +
    +
  • {i}: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.
  • +
  • {j}: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.
  • +
  • {reverseI}: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.
  • +
  • {reverseJ}: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.
  • +
  • {longitudeDegrees}: The longitude of the picked position in degrees.
  • +
  • {latitudeDegrees}: The latitude of the picked position in degrees.
  • +
  • {longitudeProjected}: The longitude of the picked position in the projected coordinates of the tiling scheme.
  • +
  • {latitudeProjected}: The latitude of the picked position in the projected coordinates of the tiling scheme.
  • +
  • {format}: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.
  • +
+ * @property [urlSchemeZeroPadding] - Gets the URL scheme zero padding for each tile coordinate. The format is '000' where + each coordinate will be padded on the left with zeros to match the width of the passed string of zeros. e.g. Setting: + urlSchemeZeroPadding : { '{x}' : '0000'} + will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL. + It the passed object has the following keywords: +
    +
  • {z}: The zero padding for the level of the tile in the tiling scheme.
  • +
  • {x}: The zero padding for the tile X coordinate in the tiling scheme.
  • +
  • {y}: The zero padding for the the tile Y coordinate in the tiling scheme.
  • +
  • {reverseX}: The zero padding for the tile reverseX coordinate in the tiling scheme.
  • +
  • {reverseY}: The zero padding for the tile reverseY coordinate in the tiling scheme.
  • +
  • {reverseZ}: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.
  • +
+ * @property [subdomains = 'abc'] - The subdomains to use for the {s} placeholder in the URL template. + If this parameter is a single string, each character in the string is a subdomain. If it is + an array, each element in the array is a subdomain. + * @property [credit = ''] - A credit for the data source, which is displayed on the canvas. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying + this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely + to result in rendering problems. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image. + * @property [tilingScheme = WebMercatorTilingScheme] - The tiling scheme specifying how the ellipsoidal + surface is broken into tiles. If this parameter is not provided, a {@link WebMercatorTilingScheme} + is used. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [tileWidth = 256] - Pixel width of image tiles. + * @property [tileHeight = 256] - Pixel height of image tiles. + * @property [hasAlphaChannel = true] - true if the images provided by this imagery provider + include an alpha channel; otherwise, false. If this property is false, an alpha channel, if + present, will be ignored. If this property is true, any images without an alpha channel will + be treated as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are potentially reduced. + * @property [getFeatureInfoFormats] - The formats in which to get feature information at a + specific location when {@link UrlTemplateImageryProvider#pickFeatures} is invoked. If this + parameter is not specified, feature picking is disabled. + * @property [enablePickFeatures = true] - If true, {@link UrlTemplateImageryProvider#pickFeatures} will + request the pickFeaturesUrl and attempt to interpret the features included in the response. If false, + {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable + features) without communicating with the server. Set this property to false if you know your data + source does not support picking features or if you don't want this provider's features to be pickable. Note + that this can be dynamically overridden by modifying the {@link UriTemplateImageryProvider#enablePickFeatures} + property. + * @property [customTags] - Allow to replace custom keywords in the URL template. The object must have strings as keys and functions as values. + */ + type ConstructorOptions = { + options?: Promise | any; + url: Resource | string; + pickFeaturesUrl?: Resource | string; + urlSchemeZeroPadding?: any; + subdomains?: string | string[]; + credit?: Credit | string; + minimumLevel?: number; + maximumLevel?: number; + rectangle?: Rectangle; + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + tileWidth?: number; + tileHeight?: number; + hasAlphaChannel?: boolean; + getFeatureInfoFormats?: GetFeatureInfoFormat[]; + enablePickFeatures?: boolean; + customTags?: any; + }; +} + +/** + * Provides imagery by requesting tiles using a specified URL template. + * @example + * // Access Natural Earth II imagery, which uses a TMS tiling scheme and Geographic (EPSG:4326) project +var tms = new Cesium.UrlTemplateImageryProvider({ + url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') + '/{z}/{x}/{reverseY}.jpg', + credit : '© Analytical Graphics, Inc.', + tilingScheme : new Cesium.GeographicTilingScheme(), + maximumLevel : 5 +}); +// Access the CartoDB Positron basemap, which uses an OpenStreetMap-like tiling scheme. +var positron = new Cesium.UrlTemplateImageryProvider({ + url : 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', + credit : 'Map tiles by CartoDB, under CC BY 3.0. Data by OpenStreetMap, under ODbL.' +}); +// Access a Web Map Service (WMS) server. +var wms = new Cesium.UrlTemplateImageryProvider({ + url : 'https://programs.communications.gov.au/geoserver/ows?tiled=true&' + + 'transparent=true&format=image%2Fpng&exceptions=application%2Fvnd.ogc.se_xml&' + + 'styles=&service=WMS&version=1.1.1&request=GetMap&' + + 'layers=public%3AMyBroadband_Availability&srs=EPSG%3A3857&' + + 'bbox={westProjected}%2C{southProjected}%2C{eastProjected}%2C{northProjected}&' + + 'width=256&height=256', + rectangle : Cesium.Rectangle.fromDegrees(96.799393, -43.598214999057824, 153.63925700000001, -9.2159219997013) +}); +// Using custom tags in your template url. +var custom = new Cesium.UrlTemplateImageryProvider({ + url : 'https://yoururl/{Time}/{z}/{y}/{x}.png', + customTags : { + Time: function(imageryProvider, x, y, level) { + return '20171231' + } + } +}); + * @param options - Object describing initialization options + */ +export class UrlTemplateImageryProvider { + constructor(options: UrlTemplateImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets or sets a value indicating whether feature picking is enabled. If true, {@link UrlTemplateImageryProvider#pickFeatures} will + request the options.pickFeaturesUrl and attempt to interpret the features included in the response. If false, + {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable + features) without communicating with the server. Set this property to false if you know your data + source does not support picking features or if you don't want this provider's features to be pickable. + */ + enablePickFeatures: boolean; + /** + * Gets the URL template to use to request tiles. It has the following keywords: +
    +
  • {z}: The level of the tile in the tiling scheme. Level zero is the root of the quadtree pyramid.
  • +
  • {x}: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.
  • +
  • {y}: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.
  • +
  • {s}: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.
  • +
  • {reverseX}: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.
  • +
  • {reverseY}: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.
  • +
  • {reverseZ}: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid. In order to use reverseZ, maximumLevel must be defined.
  • +
  • {westDegrees}: The Western edge of the tile in geodetic degrees.
  • +
  • {southDegrees}: The Southern edge of the tile in geodetic degrees.
  • +
  • {eastDegrees}: The Eastern edge of the tile in geodetic degrees.
  • +
  • {northDegrees}: The Northern edge of the tile in geodetic degrees.
  • +
  • {westProjected}: The Western edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {southProjected}: The Southern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {eastProjected}: The Eastern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {northProjected}: The Northern edge of the tile in projected coordinates of the tiling scheme.
  • +
  • {width}: The width of each tile in pixels.
  • +
  • {height}: The height of each tile in pixels.
  • +
+ */ + readonly url: string; + /** + * Gets the URL scheme zero padding for each tile coordinate. The format is '000' where each coordinate will be padded on + the left with zeros to match the width of the passed string of zeros. e.g. Setting: + urlSchemeZeroPadding : { '{x}' : '0000'} + will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL. + It has the following keywords: +
    +
  • {z}: The zero padding for the level of the tile in the tiling scheme.
  • +
  • {x}: The zero padding for the tile X coordinate in the tiling scheme.
  • +
  • {y}: The zero padding for the the tile Y coordinate in the tiling scheme.
  • +
  • {reverseX}: The zero padding for the tile reverseX coordinate in the tiling scheme.
  • +
  • {reverseY}: The zero padding for the tile reverseY coordinate in the tiling scheme.
  • +
  • {reverseZ}: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.
  • +
+ */ + readonly urlSchemeZeroPadding: any; + /** + * Gets the URL template to use to use to pick features. If this property is not specified, + {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined, indicating no + features picked. The URL template supports all of the keywords supported by the + {@link UrlTemplateImageryProvider#url} property, plus the following: +
    +
  • {i}: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.
  • +
  • {j}: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.
  • +
  • {reverseI}: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.
  • +
  • {reverseJ}: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.
  • +
  • {longitudeDegrees}: The longitude of the picked position in degrees.
  • +
  • {latitudeDegrees}: The latitude of the picked position in degrees.
  • +
  • {longitudeProjected}: The longitude of the picked position in the projected coordinates of the tiling scheme.
  • +
  • {latitudeProjected}: The latitude of the picked position in the projected coordinates of the tiling scheme.
  • +
  • {format}: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.
  • +
+ */ + readonly pickFeaturesUrl: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested, or undefined if there is no limit. + This function should not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link UrlTemplateImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. This function should + not be called before {@link ImageryProvider#ready} returns true. + */ + readonly hasAlphaChannel: boolean; + /** + * Reinitializes this instance. Reinitializing an instance already in use is supported, but it is not + recommended because existing tiles provided by the imagery provider will not be updated. + * @param options - Any of the options that may be passed to the {@link UrlTemplateImageryProvider} constructor. + */ + reinitialize(options: Promise | any): void; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link UrlTemplateImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link ImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * The vertical location of an origin relative to an object, e.g., a {@link Billboard} +or {@link Label}. For example, setting the vertical origin to TOP +or BOTTOM will display a billboard above or below (in screen space) +the anchor position. +

+
+
+
+ */ +export enum VerticalOrigin { + /** + * The origin is at the vertical center between BASELINE and TOP. + */ + CENTER = 0, + /** + * The origin is at the bottom of the object. + */ + BOTTOM = 1, + /** + * If the object contains text, the origin is at the baseline of the text, else the origin is at the bottom of the object. + */ + BASELINE = 2, + /** + * The origin is at the top of the object. + */ + TOP = -1 +} + +/** + * A viewport aligned quad. + * @example + * var viewportQuad = new Cesium.ViewportQuad(new Cesium.BoundingRectangle(0, 0, 80, 40)); +viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 0.0, 0.0, 1.0); + * @param [rectangle] - The {@link BoundingRectangle} defining the quad's position within the viewport. + * @param [material] - The {@link Material} defining the surface appearance of the viewport quad. + */ +export class ViewportQuad { + constructor(rectangle?: BoundingRectangle, material?: Material); + /** + * Determines if the viewport quad primitive will be shown. + */ + show: boolean; + /** + * The BoundingRectangle defining the quad's position within the viewport. + * @example + * viewportQuad.rectangle = new Cesium.BoundingRectangle(0, 0, 80, 40); + */ + rectangle: BoundingRectangle; + /** + * The surface appearance of the viewport quad. This can be one of several built-in {@link Material} objects or a custom material, scripted with + {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}. +

+ The default material is Material.ColorType. +

+ * @example + * // 1. Change the color of the default material to yellow + viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0); + + // 2. Change material to horizontal stripes + viewportQuad.material = Cesium.Material.fromType(Cesium.Material.StripeType); + */ + material: Material; + /** + * Called when {@link Viewer} or {@link CesiumWidget} render the scene to + get the draw commands needed to render this primitive. +

+ Do not call this function directly. This is documented just to + list the exceptions that may be propagated when the scene is rendered: +

+ */ + update(): void; + /** + * Returns true if this object was destroyed; otherwise, false. +

+ If this object was destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. + * @returns True if this object was destroyed; otherwise, false. + */ + isDestroyed(): boolean; + /** + * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic + release of WebGL resources, instead of relying on the garbage collector to destroy this object. +

+ Once an object is destroyed, it should not be used; calling any function other than + isDestroyed will result in a {@link DeveloperError} exception. Therefore, + assign the return value (undefined) to the object as done in the example. + * @example + * quad = quad && quad.destroy(); + */ + destroy(): void; +} + +export namespace WebMapServiceImageryProvider { + /** + * Initialization options for the WebMapServiceImageryProvider constructor + * @property url - The URL of the WMS service. The URL supports the same keywords as the {@link UrlTemplateImageryProvider}. + * @property layers - The layers to include, separated by commas. + * @property [parameters = WebMapServiceImageryProvider.DefaultParameters] - Additional parameters to pass to the WMS server in the GetMap URL. + * @property [getFeatureInfoParameters = WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters] - Additional parameters to pass to the WMS server in the GetFeatureInfo URL. + * @property [enablePickFeatures = true] - If true, {@link WebMapServiceImageryProvider#pickFeatures} will invoke + the GetFeatureInfo operation on the WMS server and return the features included in the response. If false, + {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features) + without communicating with the server. Set this property to false if you know your WMS server does not support + GetFeatureInfo or if you don't want this provider's features to be pickable. Note that this can be dynamically + overridden by modifying the WebMapServiceImageryProvider#enablePickFeatures property. + * @property [getFeatureInfoFormats = WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats] - The formats + in which to try WMS GetFeatureInfo requests. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle of the layer. + * @property [tilingScheme = new GeographicTilingScheme()] - The tiling scheme to use to divide the world into tiles. + * @property [ellipsoid] - The ellipsoid. If the tilingScheme is specified, + this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither + parameter is specified, the WGS84 ellipsoid is used. + * @property [tileWidth = 256] - The width of each tile in pixels. + * @property [tileHeight = 256] - The height of each tile in pixels. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when + specifying this that the number of tiles at the minimum level is small, such as four or less. A larger number is + likely to result in rendering problems. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + If not specified, there is no limit. + * @property [crs] - CRS specification, for use with WMS specification >= 1.3.0. + * @property [srs] - SRS specification, for use with WMS specification 1.1.0 or 1.1.1 + * @property [credit] - A credit for the data source, which is displayed on the canvas. + * @property [subdomains = 'abc'] - The subdomains to use for the {s} placeholder in the URL template. + If this parameter is a single string, each character in the string is a subdomain. If it is + an array, each element in the array is a subdomain. + * @property [clock] - A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified. + * @property [times] - TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values. + */ + type ConstructorOptions = { + url: Resource | string; + layers: string; + parameters?: any; + getFeatureInfoParameters?: any; + enablePickFeatures?: boolean; + getFeatureInfoFormats?: GetFeatureInfoFormat[]; + rectangle?: Rectangle; + tilingScheme?: TilingScheme; + ellipsoid?: Ellipsoid; + tileWidth?: number; + tileHeight?: number; + minimumLevel?: number; + maximumLevel?: number; + crs?: string; + srs?: string; + credit?: Credit | string; + subdomains?: string | string[]; + clock?: Clock; + times?: TimeIntervalCollection; + }; +} + +/** + * Provides tiled imagery hosted by a Web Map Service (WMS) server. + * @example + * var provider = new Cesium.WebMapServiceImageryProvider({ + url : 'https://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer', + layers : '0', + proxy: new Cesium.DefaultProxy('/proxy/') +}); + +viewer.imageryLayers.addImageryProvider(provider); + * @param options - Object describing initialization options + */ +export class WebMapServiceImageryProvider { + constructor(options: WebMapServiceImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the WMS server. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the names of the WMS layers, separated by commas. + */ + readonly layers: string; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link WebMapServiceImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets or sets a value indicating whether feature picking is enabled. If true, {@link WebMapServiceImageryProvider#pickFeatures} will + invoke the GetFeatureInfo service on the WMS server and attempt to interpret the features included in the response. If false, + {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable + features) without communicating with the server. Set this property to false if you know your data + source does not support picking features or if you don't want this provider's features to be pickable. + */ + enablePickFeatures: boolean; + /** + * Gets or sets a clock that is used to get keep the time used for time dynamic parameters. + */ + clock: Clock; + /** + * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each + TimeInterval is an object containing the keys and values of the properties that are used during + tile requests. + */ + times: TimeIntervalCollection; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link WebMapServiceImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Asynchronously determines what features, if any, are located at a given longitude and latitude within + a tile. This function should not be called before {@link ImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; + /** + * The default parameters to include in the WMS URL to obtain images. The values are as follows: + service=WMS + version=1.1.1 + request=GetMap + styles= + format=image/jpeg + */ + static readonly DefaultParameters: any; + /** + * The default parameters to include in the WMS URL to get feature information. The values are as follows: + service=WMS + version=1.1.1 + request=GetFeatureInfo + */ + static readonly GetFeatureInfoDefaultParameters: any; +} + +export namespace WebMapTileServiceImageryProvider { + /** + * Initialization options for the WebMapTileServiceImageryProvider constructor + * @property url - The base URL for the WMTS GetTile operation (for KVP-encoded requests) or the tile-URL template (for RESTful requests). The tile-URL template should contain the following variables: {style}, {TileMatrixSet}, {TileMatrix}, {TileRow}, {TileCol}. The first two are optional if actual values are hardcoded or not required by the server. The {s} keyword may be used to specify subdomains. + * @property [format = 'image/jpeg'] - The MIME type for images to retrieve from the server. + * @property layer - The layer name for WMTS requests. + * @property style - The style name for WMTS requests. + * @property tileMatrixSetID - The identifier of the TileMatrixSet to use for WMTS requests. + * @property [tileMatrixLabels] - A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level. + * @property [clock] - A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified. + * @property [times] - TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values. + * @property [dimensions] - A object containing static dimensions and their values. + * @property [tileWidth = 256] - The tile width in pixels. + * @property [tileHeight = 256] - The tile height in pixels. + * @property [tilingScheme] - The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet. + * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle covered by the layer. + * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. + * @property [maximumLevel] - The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @property [ellipsoid] - The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @property [credit] - A credit for the data source, which is displayed on the canvas. + * @property [subdomains = 'abc'] - The subdomains to use for the {s} placeholder in the URL template. + If this parameter is a single string, each character in the string is a subdomain. If it is + an array, each element in the array is a subdomain. + */ + type ConstructorOptions = { + url: Resource | string; + format?: string; + layer: string; + style: string; + tileMatrixSetID: string; + tileMatrixLabels?: any[]; + clock?: Clock; + times?: TimeIntervalCollection; + dimensions?: any; + tileWidth?: number; + tileHeight?: number; + tilingScheme?: TilingScheme; + rectangle?: Rectangle; + minimumLevel?: number; + maximumLevel?: number; + ellipsoid?: Ellipsoid; + credit?: Credit | string; + subdomains?: string | string[]; + }; +} + +/** + * Provides tiled imagery served by {@link http://www.opengeospatial.org/standards/wmts|WMTS 1.0.0} compliant servers. +This provider supports HTTP KVP-encoded and RESTful GetTile requests, but does not yet support the SOAP encoding. + * @example + * // Example 1. USGS shaded relief tiles (KVP) +var shadedRelief1 = new Cesium.WebMapTileServiceImageryProvider({ + url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS', + layer : 'USGSShadedReliefOnly', + style : 'default', + format : 'image/jpeg', + tileMatrixSetID : 'default028mm', + // tileMatrixLabels : ['default028mm:0', 'default028mm:1', 'default028mm:2' ...], + maximumLevel: 19, + credit : new Cesium.Credit('U. S. Geological Survey') +}); +viewer.imageryLayers.addImageryProvider(shadedRelief1); + * @example + * // Example 2. USGS shaded relief tiles (RESTful) +var shadedRelief2 = new Cesium.WebMapTileServiceImageryProvider({ + url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS/tile/1.0.0/USGSShadedReliefOnly/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpg', + layer : 'USGSShadedReliefOnly', + style : 'default', + format : 'image/jpeg', + tileMatrixSetID : 'default028mm', + maximumLevel: 19, + credit : new Cesium.Credit('U. S. Geological Survey') +}); +viewer.imageryLayers.addImageryProvider(shadedRelief2); + * @example + * // Example 3. NASA time dynamic weather data (RESTful) +var times = Cesium.TimeIntervalCollection.fromIso8601({ + iso8601: '2015-07-30/2017-06-16/P1D', + dataCallback: function dataCallback(interval, index) { + return { + Time: Cesium.JulianDate.toIso8601(interval.start) + }; + } +}); +var weather = new Cesium.WebMapTileServiceImageryProvider({ + url : 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/AMSR2_Snow_Water_Equivalent/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png', + layer : 'AMSR2_Snow_Water_Equivalent', + style : 'default', + tileMatrixSetID : '2km', + maximumLevel : 5, + format : 'image/png', + clock: clock, + times: times, + credit : new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS') +}); +viewer.imageryLayers.addImageryProvider(weather); + * @param options - Object describing initialization options + */ +export class WebMapTileServiceImageryProvider { + constructor(options: WebMapTileServiceImageryProvider.ConstructorOptions); + /** + * The default alpha blending value of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultAlpha: number | undefined; + /** + * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultNightAlpha: number | undefined; + /** + * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and + 1.0 representing fully opaque. + */ + defaultDayAlpha: number | undefined; + /** + * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 + makes the imagery darker while greater than 1.0 makes it brighter. + */ + defaultBrightness: number | undefined; + /** + * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces + the contrast while greater than 1.0 increases it. + */ + defaultContrast: number | undefined; + /** + * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. + */ + defaultHue: number | undefined; + /** + * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the + saturation while greater than 1.0 increases it. + */ + defaultSaturation: number | undefined; + /** + * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. + */ + defaultGamma: number | undefined; + /** + * The default texture minification filter to apply to this provider. + */ + defaultMinificationFilter: TextureMinificationFilter; + /** + * The default texture magnification filter to apply to this provider. + */ + defaultMagnificationFilter: TextureMagnificationFilter; + /** + * Gets the URL of the service hosting the imagery. + */ + readonly url: string; + /** + * Gets the proxy used by this provider. + */ + readonly proxy: Proxy; + /** + * Gets the width of each tile, in pixels. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly tileWidth: number; + /** + * Gets the height of each tile, in pixels. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly tileHeight: number; + /** + * Gets the maximum level-of-detail that can be requested. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly maximumLevel: number | undefined; + /** + * Gets the minimum level-of-detail that can be requested. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly minimumLevel: number; + /** + * Gets the tiling scheme used by this provider. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly tilingScheme: TilingScheme; + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly rectangle: Rectangle; + /** + * Gets the tile discard policy. If not undefined, the discard policy is responsible + for filtering out "missing" tiles via its shouldDiscardImage function. If this function + returns undefined, no tiles are filtered. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly tileDiscardPolicy: TileDiscardPolicy; + /** + * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing + to the event, you will be notified of the error and can potentially recover from it. Event listeners + are passed an instance of {@link TileProviderError}. + */ + readonly errorEvent: Event; + /** + * Gets the mime type of images returned by this imagery provider. + */ + readonly format: string; + /** + * Gets a value indicating whether or not the provider is ready for use. + */ + readonly ready: boolean; + /** + * Gets a promise that resolves to true when the provider is ready for use. + */ + readonly readyPromise: Promise; + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + the source of the imagery. This function should not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + */ + readonly credit: Credit; + /** + * Gets a value indicating whether or not the images provided by this imagery provider + include an alpha channel. If this property is false, an alpha channel, if present, will + be ignored. If this property is true, any images without an alpha channel will be treated + as if their alpha is 1.0 everywhere. When this property is false, memory usage + and texture upload time are reduced. + */ + readonly hasAlphaChannel: boolean; + /** + * Gets or sets a clock that is used to get keep the time used for time dynamic parameters. + */ + clock: Clock; + /** + * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each + TimeInterval is an object containing the keys and values of the properties that are used during + tile requests. + */ + times: TimeIntervalCollection; + /** + * Gets or sets an object that contains static dimensions and their values. + */ + dimensions: any; + /** + * Gets the credits to be displayed when a given tile is displayed. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level; + * @returns The credits to be displayed when the tile is displayed. + */ + getTileCredits(x: number, y: number, level: number): Credit[]; + /** + * Requests the image for a given tile. This function should + not be called before {@link WebMapTileServiceImageryProvider#ready} returns true. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param [request] - The request object. Intended for internal use only. + * @returns A promise for the image that will resolve when the image is available, or + undefined if there are too many active requests to the server, and the request + should be retried later. The resolved image may be either an + Image or a Canvas DOM object. + */ + requestImage(x: number, y: number, level: number, request?: Request): Promise | undefined; + /** + * Picking features is not currently supported by this imagery provider, so this function simply returns + undefined. + * @param x - The tile X coordinate. + * @param y - The tile Y coordinate. + * @param level - The tile level. + * @param longitude - The longitude at which to pick features. + * @param latitude - The latitude at which to pick features. + * @returns A promise for the picked features that will resolve when the asynchronous + picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + instances. The array may be empty if no features are found at the given location. + It may also be undefined if picking is not supported. + */ + pickFeatures(x: number, y: number, level: number, longitude: number, latitude: number): Promise | undefined; +} + +/** + * + +
Animation widget +
+

+The Animation widget provides buttons for play, pause, and reverse, along with the +current time and date, surrounded by a "shuttle ring" for controlling the speed of animation. +

+The "shuttle ring" concept is borrowed from video editing, where typically a +"jog wheel" can be rotated to move past individual animation frames very slowly, and +a surrounding shuttle ring can be twisted to control direction and speed of fast playback. +Cesium typically treats time as continuous (not broken into pre-defined animation frames), +so this widget offers no jog wheel. Instead, the shuttle ring is capable of both fast and +very slow playback. Click and drag the shuttle ring pointer itself (shown above in green), +or click in the rest of the ring area to nudge the pointer to the next preset speed in that direction. +

+The Animation widget also provides a "realtime" button (in the upper-left) that keeps +animation time in sync with the end user's system clock, typically displaying +"today" or "right now." This mode is not available in {@link ClockRange.CLAMPED} or +{@link ClockRange.LOOP_STOP} mode if the current time is outside of {@link Clock}'s startTime and endTime. + * @example + * // In HTML head, include a link to Animation.css stylesheet, +// and in the body, include:
+ +var clock = new Cesium.Clock(); +var clockViewModel = new Cesium.ClockViewModel(clock); +var viewModel = new Cesium.AnimationViewModel(clockViewModel); +var widget = new Cesium.Animation('animationContainer', viewModel); + +function tick() { + clock.tick(); + Cesium.requestAnimationFrame(tick); +} +Cesium.requestAnimationFrame(tick); + * @param container - The DOM element or ID that will contain the widget. + * @param viewModel - The view model used by this widget. + */ +export class Animation { + constructor(container: Element | string, viewModel: AnimationViewModel); + /** + * Gets the parent container. + */ + readonly container: Element; + /** + * Gets the view model. + */ + readonly viewModel: AnimationViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the animation widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * Resizes the widget to match the container size. + This function should be called whenever the container size is changed. + */ + resize(): void; + /** + * Updates the widget to reflect any modified CSS rules for theming. + * @example + * //Switch to the cesium-lighter theme. + document.body.className = 'cesium-lighter'; + animation.applyThemeChanges(); + */ + applyThemeChanges(): void; +} + +/** + * The view model for the {@link Animation} widget. + * @param clockViewModel - The ClockViewModel instance to use. + */ +export class AnimationViewModel { + constructor(clockViewModel: ClockViewModel); + /** + * Gets or sets whether the shuttle ring is currently being dragged. This property is observable. + */ + shuttleRingDragging: boolean; + /** + * Gets or sets whether dragging the shuttle ring should cause the multiplier + to snap to the defined tick values rather than interpolating between them. + This property is observable. + */ + snapToTicks: boolean; + /** + * Gets the string representation of the current time. This property is observable. + */ + timeLabel: string; + /** + * Gets the string representation of the current date. This property is observable. + */ + dateLabel: string; + /** + * Gets the string representation of the current multiplier. This property is observable. + */ + multiplierLabel: string; + /** + * Gets or sets the current shuttle ring angle. This property is observable. + */ + shuttleRingAngle: number; + /** + * Gets or sets the default date formatter used by new instances. + */ + static defaultDateFormatter: AnimationViewModel.DateFormatter; + /** + * Gets or sets the default array of known clock multipliers associated with new instances of the shuttle ring. + */ + static defaultTicks: number[]; + /** + * Gets or sets the default time formatter used by new instances. + */ + static defaultTimeFormatter: AnimationViewModel.TimeFormatter; + /** + * Gets a copy of the array of positive known clock multipliers to associate with the shuttle ring. + * @returns The array of known clock multipliers associated with the shuttle ring. + */ + getShuttleRingTicks(): number[]; + /** + * Sets the array of positive known clock multipliers to associate with the shuttle ring. + These values will have negative equivalents created for them and sets both the minimum + and maximum range of values for the shuttle ring as well as the values that are snapped + to when a single click is made. The values need not be in order, as they will be sorted + automatically, and duplicate values will be removed. + * @param positiveTicks - The list of known positive clock multipliers to associate with the shuttle ring. + */ + setShuttleRingTicks(positiveTicks: number[]): void; + /** + * Gets a command that decreases the speed of animation. + */ + slower: Command; + /** + * Gets a command that increases the speed of animation. + */ + faster: Command; + /** + * Gets the clock view model. + */ + clockViewModel: ClockViewModel; + /** + * Gets the pause toggle button view model. + */ + pauseViewModel: ToggleButtonViewModel; + /** + * Gets the reverse toggle button view model. + */ + playReverseViewModel: ToggleButtonViewModel; + /** + * Gets the play toggle button view model. + */ + playForwardViewModel: ToggleButtonViewModel; + /** + * Gets the realtime toggle button view model. + */ + playRealtimeViewModel: ToggleButtonViewModel; + /** + * Gets or sets the function which formats a date for display. + */ + dateFormatter: AnimationViewModel.DateFormatter; + /** + * Gets or sets the function which formats a time for display. + */ + timeFormatter: AnimationViewModel.TimeFormatter; +} + +export namespace AnimationViewModel { + /** + * A function that formats a date for display. + * @param date - The date to be formatted + * @param viewModel - The AnimationViewModel instance requesting formatting. + */ + type DateFormatter = (date: JulianDate, viewModel: AnimationViewModel) => string; + /** + * A function that formats a time for display. + * @param date - The date to be formatted + * @param viewModel - The AnimationViewModel instance requesting formatting. + */ + type TimeFormatter = (date: JulianDate, viewModel: AnimationViewModel) => string; +} + +/** + * + +
BaseLayerPicker with its drop-panel open. +
+

+The BaseLayerPicker is a single button widget that displays a panel of available imagery and +terrain providers. When imagery is selected, the corresponding imagery layer is created and inserted +as the base layer of the imagery collection; removing the existing base. When terrain is selected, +it replaces the current terrain provider. Each item in the available providers list contains a name, +a representative icon, and a tooltip to display more information when hovered. The list is initially +empty, and must be configured before use, as illustrated in the below example. + * @example + * // In HTML head, include a link to the BaseLayerPicker.css stylesheet, +// and in the body, include:
+ +//Create the list of available providers we would like the user to select from. +//This example uses 3, OpenStreetMap, The Black Marble, and a single, non-streaming world image. +var imageryViewModels = []; +imageryViewModels.push(new Cesium.ProviderViewModel({ + name : 'Open\u00adStreet\u00adMap', + iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/openStreetMap.png'), + tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ +map of the world.\nhttp://www.openstreetmap.org', + creationFunction : function() { + return new Cesium.OpenStreetMapImageryProvider({ + url : 'https://a.tile.openstreetmap.org/' + }); + } + })); + + imageryViewModels.push(new Cesium.ProviderViewModel({ + name : 'Earth at Night', + iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/blackMarble.png'), + tooltip : 'The lights of cities and villages trace the outlines of civilization \ +in this global view of the Earth at night as seen by NASA/NOAA\'s Suomi NPP satellite.', + creationFunction : function() { + return new Cesium.IonImageryProvider({ assetId: 3812 }); + } + })); + + imageryViewModels.push(new Cesium.ProviderViewModel({ + name : 'Natural Earth\u00a0II', + iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/naturalEarthII.png'), + tooltip : 'Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/', + creationFunction : function() { + return new Cesium.TileMapServiceImageryProvider({ + url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') + }); + } + })); + +//Create a CesiumWidget without imagery, if you haven't already done so. +var cesiumWidget = new Cesium.CesiumWidget('cesiumContainer', { imageryProvider: false }); + +//Finally, create the baseLayerPicker widget using our view models. +var layers = cesiumWidget.imageryLayers; +var baseLayerPicker = new Cesium.BaseLayerPicker('baseLayerPickerContainer', { + globe : cesiumWidget.scene.globe, + imageryProviderViewModels : imageryViewModels +}); + * @param container - The parent HTML container node or ID for this widget. + * @param options - Object with the following properties: + * @param options.globe - The Globe to use. + * @param [options.imageryProviderViewModels = []] - The array of ProviderViewModel instances to use for imagery. + * @param [options.selectedImageryProviderViewModel] - The view model for the current base imagery layer, if not supplied the first available imagery layer is used. + * @param [options.terrainProviderViewModels = []] - The array of ProviderViewModel instances to use for terrain. + * @param [options.selectedTerrainProviderViewModel] - The view model for the current base terrain layer, if not supplied the first available terrain layer is used. + */ +export class BaseLayerPicker { + constructor(container: Element | string, options: { + globe: Globe; + imageryProviderViewModels?: ProviderViewModel[]; + selectedImageryProviderViewModel?: ProviderViewModel; + terrainProviderViewModels?: ProviderViewModel[]; + selectedTerrainProviderViewModel?: ProviderViewModel; + }); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: BaseLayerPickerViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link BaseLayerPicker}. + * @param options - Object with the following properties: + * @param options.globe - The Globe to use. + * @param [options.imageryProviderViewModels = []] - The array of ProviderViewModel instances to use for imagery. + * @param [options.selectedImageryProviderViewModel] - The view model for the current base imagery layer, if not supplied the first available imagery layer is used. + * @param [options.terrainProviderViewModels = []] - The array of ProviderViewModel instances to use for terrain. + * @param [options.selectedTerrainProviderViewModel] - The view model for the current base terrain layer, if not supplied the first available terrain layer is used. + */ +export class BaseLayerPickerViewModel { + constructor(options: { + globe: Globe; + imageryProviderViewModels?: ProviderViewModel[]; + selectedImageryProviderViewModel?: ProviderViewModel; + terrainProviderViewModels?: ProviderViewModel[]; + selectedTerrainProviderViewModel?: ProviderViewModel; + }); + /** + * Gets or sets an array of ProviderViewModel instances available for imagery selection. + This property is observable. + */ + imageryProviderViewModels: ProviderViewModel[]; + /** + * Gets or sets an array of ProviderViewModel instances available for terrain selection. + This property is observable. + */ + terrainProviderViewModels: ProviderViewModel[]; + /** + * Gets or sets whether the imagery selection drop-down is currently visible. + */ + dropDownVisible: boolean; + /** + * Gets the button tooltip. This property is observable. + */ + buttonTooltip: string; + /** + * Gets the button background image. This property is observable. + */ + buttonImageUrl: string; + /** + * Gets or sets the currently selected imagery. This property is observable. + */ + selectedImagery: ProviderViewModel; + /** + * Gets or sets the currently selected terrain. This property is observable. + */ + selectedTerrain: ProviderViewModel; + /** + * Gets the command to toggle the visibility of the drop down. + */ + toggleDropDown: Command; + /** + * Gets the globe. + */ + globe: Globe; +} + +/** + * A view model that represents each item in the {@link BaseLayerPicker}. + * @param options - The object containing all parameters. + * @param options.name - The name of the layer. + * @param options.tooltip - The tooltip to show when the item is moused over. + * @param options.iconUrl - An icon representing the layer. + * @param [options.category] - A category for the layer. + * @param options.creationFunction - A function or Command + that creates one or more providers which will be added to the globe when this item is selected. + */ +export class ProviderViewModel { + constructor(options: { + name: string; + tooltip: string; + iconUrl: string; + category?: string; + creationFunction: ProviderViewModel.CreationFunction | Command; + }); + /** + * Gets the display name. This property is observable. + */ + name: string; + /** + * Gets the tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets the icon. This property is observable. + */ + iconUrl: string; + /** + * Gets the Command that creates one or more providers which will be added to + the globe when this item is selected. + */ + readonly creationCommand: Command; + /** + * Gets the category + */ + readonly category: string; +} + +export namespace ProviderViewModel { + /** + * A function which creates one or more providers. + */ + type CreationFunction = () => ImageryProvider | TerrainProvider | ImageryProvider[] | TerrainProvider[]; +} + +/** + * Inspector widget to aid in debugging 3D Tiles + * @param container - The DOM element or ID that will contain the widget. + * @param scene - the Scene instance to use. + */ +export class Cesium3DTilesInspector { + constructor(container: Element | string, scene: Scene); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: Cesium3DTilesInspectorViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link Cesium3DTilesInspector}. + * @param scene - The scene instance to use. + * @param performanceContainer - The container for the performance display + */ +export class Cesium3DTilesInspectorViewModel { + constructor(scene: Scene, performanceContainer: HTMLElement); + /** + * Gets or sets the flag to enable performance display. This property is observable. + */ + performance: boolean; + /** + * Gets or sets the flag to show statistics. This property is observable. + */ + showStatistics: boolean; + /** + * Gets or sets the flag to show pick statistics. This property is observable. + */ + showPickStatistics: boolean; + /** + * Gets or sets the flag to show the inspector. This property is observable. + */ + inspectorVisible: boolean; + /** + * Gets or sets the flag to show the tileset section. This property is observable. + */ + tilesetVisible: boolean; + /** + * Gets or sets the flag to show the display section. This property is observable. + */ + displayVisible: boolean; + /** + * Gets or sets the flag to show the update section. This property is observable. + */ + updateVisible: boolean; + /** + * Gets or sets the flag to show the logging section. This property is observable. + */ + loggingVisible: boolean; + /** + * Gets or sets the flag to show the style section. This property is observable. + */ + styleVisible: boolean; + /** + * Gets or sets the flag to show the tile info section. This property is observable. + */ + tileDebugLabelsVisible: boolean; + /** + * Gets or sets the flag to show the optimization info section. This property is observable. + */ + optimizationVisible: boolean; + /** + * Gets or sets the JSON for the tileset style. This property is observable. + */ + styleString: string; + /** + * Gets the names of the properties in the tileset. This property is observable. + */ + readonly properties: string[]; + /** + * Gets or sets the flag to enable dynamic screen space error. This property is observable. + */ + dynamicScreenSpaceError: boolean; + /** + * Gets or sets the color blend mode. This property is observable. + */ + colorBlendMode: Cesium3DTileColorBlendMode; + /** + * Gets or sets the flag to enable picking. This property is observable. + */ + picking: boolean; + /** + * Gets or sets the flag to colorize tiles. This property is observable. + */ + colorize: boolean; + /** + * Gets or sets the flag to draw with wireframe. This property is observable. + */ + wireframe: boolean; + /** + * Gets or sets the flag to show bounding volumes. This property is observable. + */ + showBoundingVolumes: boolean; + /** + * Gets or sets the flag to show content volumes. This property is observable. + */ + showContentBoundingVolumes: boolean; + /** + * Gets or sets the flag to show request volumes. This property is observable. + */ + showRequestVolumes: boolean; + /** + * Gets or sets the flag to suspend updates. This property is observable. + */ + freezeFrame: boolean; + /** + * Gets or sets the flag to show debug labels only for the currently picked tile. This property is observable. + */ + showOnlyPickedTileDebugLabel: boolean; + /** + * Gets or sets the flag to show tile geometric error. This property is observable. + */ + showGeometricError: boolean; + /** + * Displays the number of commands, points, triangles and features used per tile. This property is observable. + */ + showRenderingStatistics: boolean; + /** + * Displays the memory used per tile. This property is observable. + */ + showMemoryUsage: boolean; + /** + * Gets or sets the flag to show the tile url. This property is observable. + */ + showUrl: boolean; + /** + * Gets or sets the maximum screen space error. This property is observable. + */ + maximumScreenSpaceError: number; + /** + * Gets or sets the dynamic screen space error density. This property is observable. + */ + dynamicScreenSpaceErrorDensity: number; + /** + * Gets or sets the dynamic screen space error density slider value. + This allows the slider to be exponential because values tend to be closer to 0 than 1. + This property is observable. + */ + dynamicScreenSpaceErrorDensitySliderValue: number; + /** + * Gets or sets the dynamic screen space error factor. This property is observable. + */ + dynamicScreenSpaceErrorFactor: number; + /** + * Gets or sets the flag to enable point cloud shading. This property is observable. + */ + pointCloudShading: boolean; + /** + * Gets or sets the geometric error scale. This property is observable. + */ + geometricErrorScale: number; + /** + * Gets or sets the maximum attenuation. This property is observable. + */ + maximumAttenuation: number; + /** + * Gets or sets the base resolution. This property is observable. + */ + baseResolution: number; + /** + * Gets or sets the flag to enable eye dome lighting. This property is observable. + */ + eyeDomeLighting: boolean; + /** + * Gets or sets the eye dome lighting strength. This property is observable. + */ + eyeDomeLightingStrength: number; + /** + * Gets or sets the eye dome lighting radius. This property is observable. + */ + eyeDomeLightingRadius: number; + /** + * Gets or sets the pick state + */ + pickActive: boolean; + /** + * Gets or sets the flag to determine if level of detail skipping should be applied during the traversal. + This property is observable. + */ + skipLevelOfDetail: boolean; + /** + * Gets or sets the multiplier defining the minimum screen space error to skip. This property is observable. + */ + skipScreenSpaceErrorFactor: number; + /** + * Gets or sets the screen space error that must be reached before skipping levels of detail. This property is observable. + */ + baseScreenSpaceError: number; + /** + * Gets or sets the constant defining the minimum number of levels to skip when loading tiles. This property is observable. + */ + skipLevels: number; + /** + * Gets or sets the flag which, when true, only tiles that meet the maximum screen space error will ever be downloaded. + This property is observable. + */ + immediatelyLoadDesiredLevelOfDetail: boolean; + /** + * Gets or sets the flag which determines whether siblings of visible tiles are always downloaded during traversal. + This property is observable + */ + loadSiblings: boolean; + /** + * Gets the scene + */ + readonly scene: Scene; + /** + * Gets the performance container + */ + readonly performanceContainer: HTMLElement; + /** + * Gets the statistics text. This property is observable. + */ + readonly statisticsText: string; + /** + * Gets the pick statistics text. This property is observable. + */ + readonly pickStatisticsText: string; + /** + * Gets the available blend modes + */ + readonly colorBlendModes: object[]; + /** + * Gets the editor error message + */ + readonly editorError: string; + /** + * Gets or sets the tileset of the view model. + */ + tileset: Cesium3DTileset; + /** + * Gets the current feature of the view model. + */ + feature: Cesium3DTileFeature; + /** + * Gets the current tile of the view model + */ + tile: Cesium3DTile; + /** + * Toggles the pick tileset mode + */ + togglePickTileset(): void; + /** + * Toggles the inspector visibility + */ + toggleInspector(): void; + /** + * Toggles the visibility of the tileset section + */ + toggleTileset(): void; + /** + * Toggles the visibility of the display section + */ + toggleDisplay(): void; + /** + * Toggles the visibility of the update section + */ + toggleUpdate(): void; + /** + * Toggles the visibility of the logging section + */ + toggleLogging(): void; + /** + * Toggles the visibility of the style section + */ + toggleStyle(): void; + /** + * Toggles the visibility of the tile Debug Info section + */ + toggleTileDebugLabels(): void; + /** + * Toggles the visibility of the optimization section + */ + toggleOptimization(): void; + /** + * Trims tile cache + */ + trimTilesCache(): void; + /** + * Compiles the style in the style editor. + */ + compileStyle(): void; + /** + * Handles key press events on the style editor. + */ + styleEditorKeyPress(): void; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * Generates an HTML string of the statistics + * @param tileset - The tileset + * @param isPick - Whether this is getting the statistics for the pick pass + * @returns The formatted statistics + */ + static getStatistics(tileset: Cesium3DTileset, isPick: boolean): string; +} + +/** + * Inspector widget to aid in debugging + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The Scene instance to use. + */ +export class CesiumInspector { + constructor(container: Element | string, scene: Scene); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: CesiumInspectorViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link CesiumInspector}. + * @param scene - The scene instance to use. + * @param performanceContainer - The instance to use for performance container. + */ +export class CesiumInspectorViewModel { + constructor(scene: Scene, performanceContainer: Element); + /** + * Gets or sets the show frustums state. This property is observable. + */ + frustums: boolean; + /** + * Gets or sets the show frustum planes state. This property is observable. + */ + frustumPlanes: boolean; + /** + * Gets or sets the show performance display state. This property is observable. + */ + performance: boolean; + /** + * Gets or sets the shader cache text. This property is observable. + */ + shaderCacheText: string; + /** + * Gets or sets the show primitive bounding sphere state. This property is observable. + */ + primitiveBoundingSphere: boolean; + /** + * Gets or sets the show primitive reference frame state. This property is observable. + */ + primitiveReferenceFrame: boolean; + /** + * Gets or sets the filter primitive state. This property is observable. + */ + filterPrimitive: boolean; + /** + * Gets or sets the show tile bounding sphere state. This property is observable. + */ + tileBoundingSphere: boolean; + /** + * Gets or sets the filter tile state. This property is observable. + */ + filterTile: boolean; + /** + * Gets or sets the show wireframe state. This property is observable. + */ + wireframe: boolean; + /** + * Gets or sets the show globe depth state. This property is observable. + */ + globeDepth: boolean; + /** + * Gets or sets the show pick depth state. This property is observable. + */ + pickDepth: boolean; + /** + * Gets or sets the index of the depth frustum to display. This property is observable. + */ + depthFrustum: number; + /** + * Gets or sets the suspend updates state. This property is observable. + */ + suspendUpdates: boolean; + /** + * Gets or sets the show tile coordinates state. This property is observable. + */ + tileCoordinates: boolean; + /** + * Gets or sets the frustum statistic text. This property is observable. + */ + frustumStatisticText: string; + /** + * Gets or sets the selected tile information text. This property is observable. + */ + tileText: string; + /** + * Gets if a primitive has been selected. This property is observable. + */ + hasPickedPrimitive: boolean; + /** + * Gets if a tile has been selected. This property is observable + */ + hasPickedTile: boolean; + /** + * Gets if the picking primitive command is active. This property is observable. + */ + pickPrimitiveActive: boolean; + /** + * Gets if the picking tile command is active. This property is observable. + */ + pickTileActive: boolean; + /** + * Gets or sets if the cesium inspector drop down is visible. This property is observable. + */ + dropDownVisible: boolean; + /** + * Gets or sets if the general section is visible. This property is observable. + */ + generalVisible: boolean; + /** + * Gets or sets if the primitive section is visible. This property is observable. + */ + primitivesVisible: boolean; + /** + * Gets or sets if the terrain section is visible. This property is observable. + */ + terrainVisible: boolean; + /** + * Gets or sets the index of the depth frustum text. This property is observable. + */ + depthFrustumText: string; + /** + * Gets the scene to control. + */ + scene: Scene; + /** + * Gets the container of the PerformanceDisplay + */ + performanceContainer: Element; + /** + * Gets the command to toggle the visibility of the drop down. + */ + toggleDropDown: Command; + /** + * Gets the command to toggle the visibility of a BoundingSphere for a primitive + */ + showPrimitiveBoundingSphere: Command; + /** + * Gets the command to toggle the visibility of a {@link DebugModelMatrixPrimitive} for the model matrix of a primitive + */ + showPrimitiveReferenceFrame: Command; + /** + * Gets the command to toggle a filter that renders only a selected primitive + */ + doFilterPrimitive: Command; + /** + * Gets the command to increment the depth frustum index to be shown + */ + incrementDepthFrustum: Command; + /** + * Gets the command to decrement the depth frustum index to be shown + */ + decrementDepthFrustum: Command; + /** + * Gets the command to toggle the visibility of tile coordinates + */ + showTileCoordinates: Command; + /** + * Gets the command to toggle the visibility of a BoundingSphere for a selected tile + */ + showTileBoundingSphere: Command; + /** + * Gets the command to toggle a filter that renders only a selected tile + */ + doFilterTile: Command; + /** + * Gets the command to expand and collapse the general section + */ + toggleGeneral: Command; + /** + * Gets the command to expand and collapse the primitives section + */ + togglePrimitives: Command; + /** + * Gets the command to expand and collapse the terrain section + */ + toggleTerrain: Command; + /** + * Gets the command to pick a primitive + */ + pickPrimitive: Command; + /** + * Gets the command to pick a tile + */ + pickTile: Command; + /** + * Gets the command to pick a tile + */ + selectParent: Command; + /** + * Gets the command to pick a tile + */ + selectNW: Command; + /** + * Gets the command to pick a tile + */ + selectNE: Command; + /** + * Gets the command to pick a tile + */ + selectSW: Command; + /** + * Gets the command to pick a tile + */ + selectSE: Command; + /** + * Gets or sets the current selected primitive + */ + primitive: Command; + /** + * Gets or sets the current selected tile + */ + tile: Command; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * A widget containing a Cesium scene. + * @example + * // For each example, include a link to CesiumWidget.css stylesheet in HTML head, +// and in the body, include:
+ +//Widget with no terrain and default Bing Maps imagery provider. +var widget = new Cesium.CesiumWidget('cesiumContainer'); + +//Widget with ion imagery and Cesium World Terrain. +var widget = new Cesium.CesiumWidget('cesiumContainer', { + imageryProvider : Cesium.createWorldImagery(), + terrainProvider : Cesium.createWorldTerrain(), + skyBox : new Cesium.SkyBox({ + sources : { + positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg', + negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg', + positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg', + negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg', + positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg', + negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg' + } + }), + // Show Columbus View map with Web Mercator projection + sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, + mapProjection : new Cesium.WebMercatorProjection() +}); + * @param container - The DOM element or ID that will contain the widget. + * @param [options] - Object with the following properties: + * @param [options.clock = new Clock()] - The clock to use to control current time. + * @param [options.imageryProvider = createWorldImagery()] - The imagery provider to serve as the base layer. If set to false, no imagery provider will be added. + * @param [options.terrainProvider = new EllipsoidTerrainProvider] - The terrain provider. + * @param [options.skyBox] - The skybox used to render the stars. When undefined, the default stars are used. If set to false, no skyBox, Sun, or Moon will be added. + * @param [options.skyAtmosphere] - Blue sky, and the glow around the Earth's limb. Set to false to turn it off. + * @param [options.sceneMode = SceneMode.SCENE3D] - The initial scene mode. + * @param [options.scene3DOnly = false] - When true, each geometry instance will only be rendered in 3D to save GPU memory. + * @param [options.orderIndependentTranslucency = true] - If true and the configuration supports it, use order independent translucency. + * @param [options.mapProjection = new GeographicProjection()] - The map projection to use in 2D and Columbus View modes. + * @param [options.globe = new Globe(mapProjection.ellipsoid)] - The globe to use in the scene. If set to false, no globe will be added. + * @param [options.useDefaultRenderLoop = true] - True if this widget should control the render loop, false otherwise. + * @param [options.useBrowserRecommendedResolution = true] - If true, render at the browser's recommended resolution and ignore window.devicePixelRatio. + * @param [options.targetFrameRate] - The target frame rate when using the default render loop. + * @param [options.showRenderLoopErrors = true] - If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs. + * @param [options.contextOptions] - Context and WebGL creation properties corresponding to options passed to {@link Scene}. + * @param [options.creditContainer] - The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added + to the bottom of the widget itself. + * @param [options.creditViewport] - The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself. + * @param [options.terrainExaggeration = 1.0] - A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid. + * @param [options.shadows = false] - Determines if shadows are cast by light sources. + * @param [options.terrainShadows = ShadowMode.RECEIVE_ONLY] - Determines if the terrain casts or receives shadows from light sources. + * @param [options.mapMode2D = MapMode2D.INFINITE_SCROLL] - Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + * @param [options.requestRenderMode = false] - If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * @param [options.maximumRenderTimeChange = 0.0] - If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + */ +export class CesiumWidget { + constructor(container: Element | string, options?: { + clock?: Clock; + imageryProvider?: ImageryProvider | false; + terrainProvider?: TerrainProvider; + skyBox?: SkyBox | false; + skyAtmosphere?: SkyAtmosphere | false; + sceneMode?: SceneMode; + scene3DOnly?: boolean; + orderIndependentTranslucency?: boolean; + mapProjection?: MapProjection; + globe?: Globe | false; + useDefaultRenderLoop?: boolean; + useBrowserRecommendedResolution?: boolean; + targetFrameRate?: number; + showRenderLoopErrors?: boolean; + contextOptions?: any; + creditContainer?: Element | string; + creditViewport?: Element | string; + terrainExaggeration?: number; + shadows?: boolean; + terrainShadows?: ShadowMode; + mapMode2D?: MapMode2D; + requestRenderMode?: boolean; + maximumRenderTimeChange?: number; + }); + /** + * Gets the parent container. + */ + readonly container: Element; + /** + * Gets the canvas. + */ + readonly canvas: HTMLCanvasElement; + /** + * Gets the credit container. + */ + readonly creditContainer: Element; + /** + * Gets the credit viewport + */ + readonly creditViewport: Element; + /** + * Gets the scene. + */ + readonly scene: Scene; + /** + * Gets the collection of image layers that will be rendered on the globe. + */ + readonly imageryLayers: ImageryLayerCollection; + /** + * The terrain provider providing surface geometry for the globe. + */ + terrainProvider: TerrainProvider; + /** + * Gets the camera. + */ + readonly camera: Camera; + /** + * Gets the clock. + */ + readonly clock: Clock; + /** + * Gets the screen space event handler. + */ + readonly screenSpaceEventHandler: ScreenSpaceEventHandler; + /** + * Gets or sets the target frame rate of the widget when useDefaultRenderLoop + is true. If undefined, the browser's {@link requestAnimationFrame} implementation + determines the frame rate. If defined, this value must be greater than 0. A value higher + than the underlying requestAnimationFrame implementation will have no effect. + */ + targetFrameRate: number; + /** + * Gets or sets whether or not this widget should control the render loop. + If set to true the widget will use {@link requestAnimationFrame} to + perform rendering and resizing of the widget, as well as drive the + simulation clock. If set to false, you must manually call the + resize, render methods as part of a custom + render loop. If an error occurs during rendering, {@link Scene}'s + renderError event will be raised and this property + will be set to false. It must be set back to true to continue rendering + after the error. + */ + useDefaultRenderLoop: boolean; + /** + * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve + performance on less powerful devices while values greater than 1.0 will render at a higher + resolution and then scale down, resulting in improved visual fidelity. + For example, if the widget is laid out at a size of 640x480, setting this value to 0.5 + will cause the scene to be rendered at 320x240 and then scaled up while setting + it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down. + */ + resolutionScale: number; + /** + * Boolean flag indicating if the browser's recommended resolution is used. + If true, the browser's device pixel ratio is ignored and 1.0 is used instead, + effectively rendering based on CSS pixels instead of device pixels. This can improve + performance on less powerful devices that have high pixel density. When false, rendering + will be in device pixels. {@link CesiumWidget#resolutionScale} will still take effect whether + this flag is true or false. + */ + useBrowserRecommendedResolution: boolean; + /** + * Show an error panel to the user containing a title and a longer error message, + which can be dismissed using an OK button. This panel is displayed automatically + when a render loop error occurs, if showRenderLoopErrors was not false when the + widget was constructed. + * @param title - The title to be displayed on the error panel. This string is interpreted as text. + * @param [message] - A helpful, user-facing message to display prior to the detailed error information. This string is interpreted as HTML. + * @param [error] - The error to be displayed on the error panel. This string is formatted using {@link formatError} and then displayed as text. + */ + showErrorPanel(title: string, message?: string, error?: string): void; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * Updates the canvas size, camera aspect ratio, and viewport size. + This function is called automatically as needed unless + useDefaultRenderLoop is set to false. + */ + resize(): void; + /** + * Renders the scene. This function is called automatically + unless useDefaultRenderLoop is set to false; + */ + render(): void; +} + +/** + * A view model which exposes a {@link Clock} for user interfaces. + * @param [clock] - The clock object wrapped by this view model, if undefined a new instance will be created. + */ +export class ClockViewModel { + constructor(clock?: Clock); + /** + * Gets the current system time. + This property is observable. + */ + systemTime: JulianDate; + /** + * Gets or sets the start time of the clock. + See {@link Clock#startTime}. + This property is observable. + */ + startTime: JulianDate; + /** + * Gets or sets the stop time of the clock. + See {@link Clock#stopTime}. + This property is observable. + */ + stopTime: JulianDate; + /** + * Gets or sets the current time. + See {@link Clock#currentTime}. + This property is observable. + */ + currentTime: JulianDate; + /** + * Gets or sets the clock multiplier. + See {@link Clock#multiplier}. + This property is observable. + */ + multiplier: number; + /** + * Gets or sets the clock step setting. + See {@link Clock#clockStep}. + This property is observable. + */ + clockStep: ClockStep; + /** + * Gets or sets the clock range setting. + See {@link Clock#clockRange}. + This property is observable. + */ + clockRange: ClockRange; + /** + * Gets or sets whether the clock can animate. + See {@link Clock#canAnimate}. + This property is observable. + */ + canAnimate: boolean; + /** + * Gets or sets whether the clock should animate. + See {@link Clock#shouldAnimate}. + This property is observable. + */ + shouldAnimate: boolean; + /** + * Gets the underlying Clock. + */ + clock: Clock; + /** + * Updates the view model with the contents of the underlying clock. + Can be called to force an update of the viewModel if the underlying + clock has changed and Clock.tick has not yet been called. + */ + synchronize(): void; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the view model. Should be called to + properly clean up the view model when it is no longer needed. + */ + destroy(): void; +} + +/** + * A Command is a function with an extra canExecute observable property to determine +whether the command can be executed. When executed, a Command function will check the +value of canExecute and throw if false. + +This type describes an interface and is not intended to be instantiated directly. +See {@link createCommand} to create a command from a function. + */ +export class Command { + constructor(); + /** + * Gets whether this command can currently be executed. This property is observable. + */ + canExecute: boolean; + /** + * Gets an event which is raised before the command executes, the event + is raised with an object containing two properties: a cancel property, + which if set to false by the listener will prevent the command from being executed, and + an args property, which is the array of arguments being passed to the command. + */ + beforeExecute: Event; + /** + * Gets an event which is raised after the command executes, the event + is raised with the return value of the command as its only parameter. + */ + afterExecute: Event; +} + +/** + * Create a Command from a given function, for use with ViewModels. + +A Command is a function with an extra canExecute observable property to determine +whether the command can be executed. When executed, a Command function will check the +value of canExecute and throw if false. It also provides events for when +a command has been or is about to be executed. + * @param func - The function to execute. + * @param [canExecute = true] - A boolean indicating whether the function can currently be executed. + */ +export function createCommand(func: (...params: any[]) => any, canExecute?: boolean): void; + +/** + * A single button widget for toggling fullscreen mode. + * @param container - The DOM element or ID that will contain the widget. + * @param [fullscreenElement = document.body] - The element or id to be placed into fullscreen mode. + */ +export class FullscreenButton { + constructor(container: Element | string, fullscreenElement?: Element | string); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: FullscreenButtonViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link FullscreenButton}. + * @param [fullscreenElement = document.body] - The element or id to be placed into fullscreen mode. + * @param [container] - The DOM element or ID that will contain the widget. + */ +export class FullscreenButtonViewModel { + constructor(fullscreenElement?: Element | string, container?: Element | string); + /** + * Gets whether or not fullscreen mode is active. This property is observable. + */ + isFullscreen: boolean; + /** + * Gets or sets whether or not fullscreen functionality should be enabled. This property is observable. + */ + isFullscreenEnabled: boolean; + /** + * Gets the tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets or sets the HTML element to place into fullscreen mode when the + corresponding button is pressed. + */ + fullscreenElement: Element; + /** + * Gets the Command to toggle fullscreen mode. + */ + command: Command; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the view model. Should be called to + properly clean up the view model when it is no longer needed. + */ + destroy(): void; +} + +/** + * A widget for finding addresses and landmarks, and flying the camera to them. Geocoding is +performed using {@link https://cesium.com/cesium-ion/|Cesium ion}. + * @param options - Object with the following properties: + * @param options.container - The DOM element or ID that will contain the widget. + * @param options.scene - The Scene instance to use. + * @param [options.geocoderServices] - The geocoder services to be used + * @param [options.autoComplete = true] - True if the geocoder should query as the user types to autocomplete + * @param [options.flightDuration = 1.5] - The duration of the camera flight to an entered location, in seconds. + * @param [options.destinationFound = GeocoderViewModel.flyToDestination] - A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination. + */ +export class Geocoder { + constructor(options: { + container: Element | string; + scene: Scene; + geocoderServices?: GeocoderService[]; + autoComplete?: boolean; + flightDuration?: number; + destinationFound?: Geocoder.DestinationFoundFunction; + }); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the parent container. + */ + searchSuggestionsContainer: Element; + /** + * Gets the view model. + */ + viewModel: GeocoderViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +export namespace Geocoder { + /** + * A function that handles the result of a successful geocode. + * @param viewModel - The view model. + * @param destination - The destination result of the geocode. + */ + type DestinationFoundFunction = (viewModel: GeocoderViewModel, destination: Cartesian3 | Rectangle) => void; +} + +/** + * The view model for the {@link Geocoder} widget. + * @param options - Object with the following properties: + * @param options.scene - The Scene instance to use. + * @param [options.geocoderServices] - Geocoder services to use for geocoding queries. + If more than one are supplied, suggestions will be gathered for the geocoders that support it, + and if no suggestion is selected the result from the first geocoder service wil be used. + * @param [options.flightDuration] - The duration of the camera flight to an entered location, in seconds. + * @param [options.destinationFound = GeocoderViewModel.flyToDestination] - A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination. + */ +export class GeocoderViewModel { + constructor(options: { + scene: Scene; + geocoderServices?: GeocoderService[]; + flightDuration?: number; + destinationFound?: Geocoder.DestinationFoundFunction; + }); + /** + * Gets or sets a value indicating if this instance should always show its text input field. + */ + keepExpanded: boolean; + /** + * True if the geocoder should query as the user types to autocomplete + */ + autoComplete: boolean; + /** + * Gets and sets the command called when a geocode destination is found + */ + destinationFound: Geocoder.DestinationFoundFunction; + /** + * Gets a value indicating whether a search is currently in progress. This property is observable. + */ + isSearchInProgress: boolean; + /** + * Gets or sets the text to search for. The text can be an address, or longitude, latitude, + and optional height, where longitude and latitude are in degrees and height is in meters. + */ + searchText: string; + /** + * Gets or sets the the duration of the camera flight in seconds. + A value of zero causes the camera to instantly switch to the geocoding location. + The duration will be computed based on the distance when undefined. + */ + flightDuration: number | undefined; + /** + * Gets the event triggered on flight completion. + */ + complete: Event; + /** + * Gets the scene to control. + */ + scene: Scene; + /** + * Gets the Command that is executed when the button is clicked. + */ + search: Command; + /** + * Gets the currently selected geocoder search suggestion + */ + selectedSuggestion: any; + /** + * Gets the list of geocoder search suggestions + */ + suggestions: object[]; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * A function to fly to the destination found by a successful geocode. + */ + static flyToDestination: Geocoder.DestinationFoundFunction; +} + +/** + * A single button widget for returning to the default camera view of the current scene. + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The Scene instance to use. + * @param [duration] - The time, in seconds, it takes to complete the camera flight home. + */ +export class HomeButton { + constructor(container: Element | string, scene: Scene, duration?: number); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: HomeButtonViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link HomeButton}. + * @param scene - The scene instance to use. + * @param [duration] - The duration of the camera flight in seconds. + */ +export class HomeButtonViewModel { + constructor(scene: Scene, duration?: number); + /** + * Gets or sets the tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets the scene to control. + */ + scene: Scene; + /** + * Gets the Command that is executed when the button is clicked. + */ + command: Command; + /** + * Gets or sets the the duration of the camera flight in seconds. + A value of zero causes the camera to instantly switch to home view. + The duration will be computed based on the distance when undefined. + */ + duration: number | undefined; +} + +/** + * A widget for displaying information or a description. + * @param container - The DOM element or ID that will contain the widget. + */ +export class InfoBox { + constructor(container: Element | string); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: InfoBoxViewModel; + /** + * Gets the iframe used to display the description. + */ + frame: HTMLIFrameElement; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link InfoBox}. + */ +export class InfoBoxViewModel { + constructor(); + /** + * Gets or sets the maximum height of the info box in pixels. This property is observable. + */ + maxHeight: number; + /** + * Gets or sets whether the camera tracking icon is enabled. + */ + enableCamera: boolean; + /** + * Gets or sets the status of current camera tracking of the selected object. + */ + isCameraTracking: boolean; + /** + * Gets or sets the visibility of the info box. + */ + showInfo: boolean; + /** + * Gets or sets the title text in the info box. + */ + titleText: string; + /** + * Gets or sets the description HTML for the info box. + */ + description: string; + /** + * Gets the SVG path of the camera icon, which can change to be "crossed out" or not. + */ + cameraIconPath: string; + /** + * Gets the maximum height of sections within the info box, minus an offset, in CSS-ready form. + * @param offset - The offset in pixels. + */ + maxHeightOffset(offset: number): string; + /** + * Gets an {@link Event} that is fired when the user clicks the camera icon. + */ + cameraClicked: Event; + /** + * Gets an {@link Event} that is fired when the user closes the info box. + */ + closeClicked: Event; +} + +/** + *

The NavigationHelpButton is a single button widget for displaying instructions for +navigating the globe with the mouse.


+ * @example + * // In HTML head, include a link to the NavigationHelpButton.css stylesheet, +// and in the body, include: + +var navigationHelpButton = new Cesium.NavigationHelpButton({ + container : 'navigationHelpButtonContainer' +}); + * @param options - Object with the following properties: + * @param options.container - The DOM element or ID that will contain the widget. + * @param [options.instructionsInitiallyVisible = false] - True if the navigation instructions should initially be visible; otherwise, false. + */ +export class NavigationHelpButton { + constructor(options: { + container: Element | string; + instructionsInitiallyVisible?: boolean; + }); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: NavigationHelpButtonViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link NavigationHelpButton}. + */ +export class NavigationHelpButtonViewModel { + constructor(); + /** + * Gets or sets whether the instructions are currently shown. This property is observable. + */ + showInstructions: boolean; + /** + * Gets or sets the tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets the Command that is executed when the button is clicked. + */ + command: Command; + /** + * Gets the Command that is executed when the mouse instructions should be shown. + */ + showClick: Command; + /** + * Gets the Command that is executed when the touch instructions should be shown. + */ + showTouch: Command; +} + +/** + * Monitors performance of the application and displays a message if poor performance is detected. + * @param [options] - Object with the following properties: + * @param options.container - The DOM element or ID that will contain the widget. + * @param options.scene - The {@link Scene} for which to monitor performance. + * @param [options.lowFrameRateMessage = 'This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] - The + message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + */ +export class PerformanceWatchdog { + constructor(options?: { + container: Element | string; + scene: Scene; + lowFrameRateMessage?: string; + }); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: PerformanceWatchdogViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link PerformanceWatchdog}. + * @param [options] - Object with the following properties: + * @param options.scene - The Scene instance for which to monitor performance. + * @param [options.lowFrameRateMessage = 'This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] - The + message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + */ +export class PerformanceWatchdogViewModel { + constructor(options?: { + scene: Scene; + lowFrameRateMessage?: string; + }); + /** + * Gets or sets the message to display when a low frame rate is detected. This string will be interpreted as HTML. + */ + lowFrameRateMessage: string; + /** + * Gets or sets a value indicating whether the low frame rate message has previously been dismissed by the user. If it has + been dismissed, the message will not be redisplayed, no matter the frame rate. + */ + lowFrameRateMessageDismissed: boolean; + /** + * Gets or sets a value indicating whether the low frame rate message is currently being displayed. + */ + showingLowFrameRateMessage: boolean; + /** + * Gets the {@link Scene} instance for which to monitor performance. + */ + scene: Scene; + /** + * Gets a command that dismisses the low frame rate message. Once it is dismissed, the message + will not be redisplayed. + */ + dismissMessage: Command; +} + +/** + * The ProjectionPicker is a single button widget for switching between perspective and orthographic projections. + * @example + * // In HTML head, include a link to the ProjectionPicker.css stylesheet, +// and in the body, include:
+// Note: This code assumes you already have a Scene instance. + +var projectionPicker = new Cesium.ProjectionPicker('projectionPickerContainer', scene); + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The Scene instance to use. + */ +export class ProjectionPicker { + constructor(container: Element | string, scene: Scene); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: ProjectionPickerViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link ProjectionPicker}. + * @param scene - The Scene to switch projections. + */ +export class ProjectionPickerViewModel { + constructor(scene: Scene); + /** + * Gets or sets whether the button drop-down is currently visible. This property is observable. + */ + dropDownVisible: boolean; + /** + * Gets or sets the perspective projection tooltip. This property is observable. + */ + tooltipPerspective: string; + /** + * Gets or sets the orthographic projection tooltip. This property is observable. + */ + tooltipOrthographic: string; + /** + * Gets the currently active tooltip. This property is observable. + */ + selectedTooltip: string; + /** + * Gets or sets the current SceneMode. This property is observable. + */ + sceneMode: SceneMode; + /** + * Gets the scene + */ + scene: Scene; + /** + * Gets the command to toggle the drop down box. + */ + toggleDropDown: Command; + /** + * Gets the command to switch to a perspective projection. + */ + switchToPerspective: Command; + /** + * Gets the command to switch to orthographic projection. + */ + switchToOrthographic: Command; + /** + * Gets whether the scene is currently using an orthographic projection. + */ + isOrthographicProjection: Command; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the view model. + */ + destroy(): void; +} + +/** + * +

The SceneModePicker is a single button widget for switching between scene modes; +shown to the left in its expanded state. Programatic switching of scene modes will +be automatically reflected in the widget as long as the specified Scene +is used to perform the change.


+ * @example + * // In HTML head, include a link to the SceneModePicker.css stylesheet, +// and in the body, include:
+// Note: This code assumes you already have a Scene instance. + +var sceneModePicker = new Cesium.SceneModePicker('sceneModePickerContainer', scene); + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The Scene instance to use. + * @param [duration = 2.0] - The time, in seconds, it takes for the scene to transition. + */ +export class SceneModePicker { + constructor(container: Element | string, scene: Scene, duration?: number); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: SceneModePickerViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link SceneModePicker}. + * @param scene - The Scene to morph + * @param [duration = 2.0] - The duration of scene morph animations, in seconds + */ +export class SceneModePickerViewModel { + constructor(scene: Scene, duration?: number); + /** + * Gets or sets the current SceneMode. This property is observable. + */ + sceneMode: SceneMode; + /** + * Gets or sets whether the button drop-down is currently visible. This property is observable. + */ + dropDownVisible: boolean; + /** + * Gets or sets the 2D tooltip. This property is observable. + */ + tooltip2D: string; + /** + * Gets or sets the 3D tooltip. This property is observable. + */ + tooltip3D: string; + /** + * Gets or sets the Columbus View tooltip. This property is observable. + */ + tooltipColumbusView: string; + /** + * Gets the currently active tooltip. This property is observable. + */ + selectedTooltip: string; + /** + * Gets the scene + */ + scene: Scene; + /** + * Gets or sets the the duration of scene mode transition animations in seconds. + A value of zero causes the scene to instantly change modes. + */ + duration: number; + /** + * Gets the command to toggle the drop down box. + */ + toggleDropDown: Command; + /** + * Gets the command to morph to 2D. + */ + morphTo2D: Command; + /** + * Gets the command to morph to 3D. + */ + morphTo3D: Command; + /** + * Gets the command to morph to Columbus View. + */ + morphToColumbusView: Command; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the view model. + */ + destroy(): void; +} + +/** + * A widget for displaying an indicator on a selected object. + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The Scene instance to use. + */ +export class SelectionIndicator { + constructor(container: Element | string, scene: Scene); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: SelectionIndicatorViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link SelectionIndicator}. + * @param scene - The scene instance to use for screen-space coordinate conversion. + * @param selectionIndicatorElement - The element containing all elements that make up the selection indicator. + * @param container - The DOM element that contains the widget. + */ +export class SelectionIndicatorViewModel { + constructor(scene: Scene, selectionIndicatorElement: Element, container: Element); + /** + * Gets or sets the world position of the object for which to display the selection indicator. + */ + position: Cartesian3; + /** + * Gets or sets the visibility of the selection indicator. + */ + showSelection: boolean; + /** + * Gets the visibility of the position indicator. This can be false even if an + object is selected, when the selected object has no position. + */ + isVisible: boolean; + /** + * Gets or sets the function for converting the world position of the object to the screen space position. + * @example + * selectionIndicatorViewModel.computeScreenSpacePosition = function(position, result) { + return Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position, result); + }; + */ + computeScreenSpacePosition: SelectionIndicatorViewModel.ComputeScreenSpacePosition; + /** + * Updates the view of the selection indicator to match the position and content properties of the view model. + This function should be called as part of the render loop. + */ + update(): void; + /** + * Animate the indicator to draw attention to the selection. + */ + animateAppear(): void; + /** + * Animate the indicator to release the selection. + */ + animateDepart(): void; + /** + * Gets the HTML element containing the selection indicator. + */ + container: Element; + /** + * Gets the HTML element that holds the selection indicator. + */ + selectionIndicatorElement: Element; + /** + * Gets the scene being used. + */ + scene: Scene; +} + +export namespace SelectionIndicatorViewModel { + /** + * A function that converts the world position of an object to a screen space position. + * @param position - The position in WGS84 (world) coordinates. + * @param result - An object to return the input position transformed to window coordinates. + */ + type ComputeScreenSpacePosition = (position: Cartesian3, result: Cartesian2) => Cartesian2; +} + +/** + * A Knockout binding handler that creates a DOM element for a single SVG path. +This binding handler will be registered as cesiumSvgPath. + +

+The parameter to this binding is an object with the following properties: +

+ +
    +
  • path: The SVG path as a string.
  • +
  • width: The width of the SVG path with no transformations applied.
  • +
  • height: The height of the SVG path with no transformations applied.
  • +
  • css: Optional. A string containing additional CSS classes to apply to the SVG. 'cesium-svgPath-svg' is always applied.
  • +
+ * @example + * // Create an SVG as a child of a div +
+ +// parameters can be observable from the view model +
+ +// or the whole object can be observable from the view model +
+ */ +export namespace SvgPathBindingHandler { + function register(): void; +} + +/** + * The Timeline is a widget for displaying and controlling the current scene time. + * @param container - The parent HTML container node for this widget. + * @param clock - The clock to use. + */ +export class Timeline { + constructor(container: Element, clock: Clock); + /** + * Gets the parent container. + */ + container: Element; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * Sets the view to the provided times. + * @param startTime - The start time. + * @param stopTime - The stop time. + */ + zoomTo(startTime: JulianDate, stopTime: JulianDate): void; + /** + * Resizes the widget to match the container size. + */ + resize(): void; +} + +/** + * A view model which exposes the properties of a toggle button. + * @param command - The command which will be executed when the button is toggled. + * @param [options] - Object with the following properties: + * @param [options.toggled = false] - A boolean indicating whether the button should be initially toggled. + * @param [options.tooltip = ''] - A string containing the button's tooltip. + */ +export class ToggleButtonViewModel { + constructor(command: Command, options?: { + toggled?: boolean; + tooltip?: string; + }); + /** + * Gets or sets whether the button is currently toggled. This property is observable. + */ + toggled: boolean; + /** + * Gets or sets the button's tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets the command which will be executed when the button is toggled. + */ + command: Command; +} + +export namespace Viewer { + /** + * Initialization options for the Viewer constructor + * @property [animation = true] - If set to false, the Animation widget will not be created. + * @property [baseLayerPicker = true] - If set to false, the BaseLayerPicker widget will not be created. + * @property [fullscreenButton = true] - If set to false, the FullscreenButton widget will not be created. + * @property [vrButton = false] - If set to true, the VRButton widget will be created. + * @property [geocoder = true] - If set to false, the Geocoder widget will not be created. + * @property [homeButton = true] - If set to false, the HomeButton widget will not be created. + * @property [infoBox = true] - If set to false, the InfoBox widget will not be created. + * @property [sceneModePicker = true] - If set to false, the SceneModePicker widget will not be created. + * @property [selectionIndicator = true] - If set to false, the SelectionIndicator widget will not be created. + * @property [timeline = true] - If set to false, the Timeline widget will not be created. + * @property [navigationHelpButton = true] - If set to false, the navigation help button will not be created. + * @property [navigationInstructionsInitiallyVisible = true] - True if the navigation instructions should initially be visible, or false if the should not be shown until the user explicitly clicks the button. + * @property [scene3DOnly = false] - When true, each geometry instance will only be rendered in 3D to save GPU memory. + * @property [shouldAnimate = false] - true if the clock should attempt to advance simulation time by default, false otherwise. This option takes precedence over setting {@link Viewer#clockViewModel}. + * @property [clockViewModel = new ClockViewModel(clock)] - The clock view model to use to control current time. + * @property [selectedImageryProviderViewModel] - The view model for the current base imagery layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true. + * @property [imageryProviderViewModels = createDefaultImageryProviderViewModels()] - The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true. + * @property [selectedTerrainProviderViewModel] - The view model for the current base terrain layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true. + * @property [terrainProviderViewModels = createDefaultTerrainProviderViewModels()] - The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true. + * @property [imageryProvider = createWorldImagery()] - The imagery provider to use. This value is only valid if `baseLayerPicker` is set to false. + * @property [terrainProvider = new EllipsoidTerrainProvider()] - The terrain provider to use + * @property [skyBox] - The skybox used to render the stars. When undefined, the default stars are used. If set to false, no skyBox, Sun, or Moon will be added. + * @property [skyAtmosphere] - Blue sky, and the glow around the Earth's limb. Set to false to turn it off. + * @property [fullscreenElement = document.body] - The element or id to be placed into fullscreen mode when the full screen button is pressed. + * @property [useDefaultRenderLoop = true] - True if this widget should control the render loop, false otherwise. + * @property [targetFrameRate] - The target frame rate when using the default render loop. + * @property [showRenderLoopErrors = true] - If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs. + * @property [useBrowserRecommendedResolution = true] - If true, render at the browser's recommended resolution and ignore window.devicePixelRatio. + * @property [automaticallyTrackDataSourceClocks = true] - If true, this widget will automatically track the clock settings of newly added DataSources, updating if the DataSource's clock changes. Set this to false if you want to configure the clock independently. + * @property [contextOptions] - Context and WebGL creation properties corresponding to options passed to {@link Scene}. + * @property [sceneMode = SceneMode.SCENE3D] - The initial scene mode. + * @property [mapProjection = new GeographicProjection()] - The map projection to use in 2D and Columbus View modes. + * @property [globe = new Globe(mapProjection.ellipsoid)] - The globe to use in the scene. If set to false, no globe will be added. + * @property [orderIndependentTranslucency = true] - If true and the configuration supports it, use order independent translucency. + * @property [creditContainer] - The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added to the bottom of the widget itself. + * @property [creditViewport] - The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself. + * @property [dataSources = new DataSourceCollection()] - The collection of data sources visualized by the widget. If this parameter is provided, + the instance is assumed to be owned by the caller and will not be destroyed when the viewer is destroyed. + * @property [terrainExaggeration = 1.0] - A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid. + * @property [shadows = false] - Determines if shadows are cast by light sources. + * @property [terrainShadows = ShadowMode.RECEIVE_ONLY] - Determines if the terrain casts or receives shadows from light sources. + * @property [mapMode2D = MapMode2D.INFINITE_SCROLL] - Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + * @property [projectionPicker = false] - If set to true, the ProjectionPicker widget will be created. + * @property [requestRenderMode = false] - If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling reduces the CPU/GPU usage of your application and uses less battery on mobile, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * @property [maximumRenderTimeChange = 0.0] - If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + */ + type ConstructorOptions = { + animation?: boolean; + baseLayerPicker?: boolean; + fullscreenButton?: boolean; + vrButton?: boolean; + geocoder?: boolean | GeocoderService[]; + homeButton?: boolean; + infoBox?: boolean; + sceneModePicker?: boolean; + selectionIndicator?: boolean; + timeline?: boolean; + navigationHelpButton?: boolean; + navigationInstructionsInitiallyVisible?: boolean; + scene3DOnly?: boolean; + shouldAnimate?: boolean; + clockViewModel?: ClockViewModel; + selectedImageryProviderViewModel?: ProviderViewModel; + imageryProviderViewModels?: ProviderViewModel[]; + selectedTerrainProviderViewModel?: ProviderViewModel; + terrainProviderViewModels?: ProviderViewModel[]; + imageryProvider?: ImageryProvider; + terrainProvider?: TerrainProvider; + skyBox?: SkyBox | false; + skyAtmosphere?: SkyAtmosphere | false; + fullscreenElement?: Element | string; + useDefaultRenderLoop?: boolean; + targetFrameRate?: number; + showRenderLoopErrors?: boolean; + useBrowserRecommendedResolution?: boolean; + automaticallyTrackDataSourceClocks?: boolean; + contextOptions?: any; + sceneMode?: SceneMode; + mapProjection?: MapProjection; + globe?: Globe | false; + orderIndependentTranslucency?: boolean; + creditContainer?: Element | string; + creditViewport?: Element | string; + dataSources?: DataSourceCollection; + terrainExaggeration?: number; + shadows?: boolean; + terrainShadows?: ShadowMode; + mapMode2D?: MapMode2D; + projectionPicker?: boolean; + requestRenderMode?: boolean; + maximumRenderTimeChange?: number; + }; + /** + * A function that augments a Viewer instance with additional functionality. + * @param viewer - The viewer instance. + * @param options - Options object to be passed to the mixin function. + */ + type ViewerMixin = (viewer: Viewer, options: any) => void; +} + +/** + * A base widget for building applications. It composites all of the standard Cesium widgets into one reusable package. +The widget can always be extended by using mixins, which add functionality useful for a variety of applications. + * @example + * //Initialize the viewer widget with several custom options and mixins. +var viewer = new Cesium.Viewer('cesiumContainer', { + //Start in Columbus Viewer + sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, + //Use Cesium World Terrain + terrainProvider : Cesium.createWorldTerrain(), + //Hide the base layer picker + baseLayerPicker : false, + //Use OpenStreetMaps + imageryProvider : new Cesium.OpenStreetMapImageryProvider({ + url : 'https://a.tile.openstreetmap.org/' + }), + skyBox : new Cesium.SkyBox({ + sources : { + positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg', + negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg', + positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg', + negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg', + positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg', + negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg' + } + }), + // Show Columbus View map with Web Mercator projection + mapProjection : new Cesium.WebMercatorProjection() +}); + +//Add basic drag and drop functionality +viewer.extend(Cesium.viewerDragDropMixin); + +//Show a pop-up alert if we encounter an error when processing a dropped file +viewer.dropError.addEventListener(function(dropHandler, name, error) { + console.log(error); + window.alert(error); +}); + * @param container - The DOM element or ID that will contain the widget. + * @param [options] - Object describing initialization options + */ +export class Viewer { + constructor(container: Element | string, options?: Viewer.ConstructorOptions); + /** + * Gets the parent container. + */ + readonly container: Element; + /** + * Gets the DOM element for the area at the bottom of the window containing the + {@link CreditDisplay} and potentially other things. + */ + readonly bottomContainer: Element; + /** + * Gets the CesiumWidget. + */ + readonly cesiumWidget: CesiumWidget; + /** + * Gets the selection indicator. + */ + readonly selectionIndicator: SelectionIndicator; + /** + * Gets the info box. + */ + readonly infoBox: InfoBox; + /** + * Gets the Geocoder. + */ + readonly geocoder: Geocoder; + /** + * Gets the HomeButton. + */ + readonly homeButton: HomeButton; + /** + * Gets the SceneModePicker. + */ + readonly sceneModePicker: SceneModePicker; + /** + * Gets the ProjectionPicker. + */ + readonly projectionPicker: ProjectionPicker; + /** + * Gets the BaseLayerPicker. + */ + readonly baseLayerPicker: BaseLayerPicker; + /** + * Gets the NavigationHelpButton. + */ + readonly navigationHelpButton: NavigationHelpButton; + /** + * Gets the Animation widget. + */ + readonly animation: Animation; + /** + * Gets the Timeline widget. + */ + readonly timeline: Timeline; + /** + * Gets the FullscreenButton. + */ + readonly fullscreenButton: FullscreenButton; + /** + * Gets the VRButton. + */ + readonly vrButton: VRButton; + /** + * Gets the display used for {@link DataSource} visualization. + */ + readonly dataSourceDisplay: DataSourceDisplay; + /** + * Gets the collection of entities not tied to a particular data source. + This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link Viewer#dataSourceDisplay}. + */ + readonly entities: EntityCollection; + /** + * Gets the set of {@link DataSource} instances to be visualized. + */ + readonly dataSources: DataSourceCollection; + /** + * Gets the canvas. + */ + readonly canvas: HTMLCanvasElement; + /** + * Gets the scene. + */ + readonly scene: Scene; + /** + * Determines if shadows are cast by light sources. + */ + shadows: boolean; + /** + * Determines if the terrain casts or shadows from light sources. + */ + terrainShadows: ShadowMode; + /** + * Get the scene's shadow map + */ + readonly shadowMap: ShadowMap; + /** + * Gets the collection of image layers that will be rendered on the globe. + */ + readonly imageryLayers: ImageryLayerCollection; + /** + * The terrain provider providing surface geometry for the globe. + */ + terrainProvider: TerrainProvider; + /** + * Gets the camera. + */ + readonly camera: Camera; + /** + * Gets the post-process stages. + */ + readonly postProcessStages: PostProcessStageCollection; + /** + * Gets the clock. + */ + readonly clock: Clock; + /** + * Gets the clock view model. + */ + readonly clockViewModel: ClockViewModel; + /** + * Gets the screen space event handler. + */ + readonly screenSpaceEventHandler: ScreenSpaceEventHandler; + /** + * Gets or sets the target frame rate of the widget when useDefaultRenderLoop + is true. If undefined, the browser's {@link requestAnimationFrame} implementation + determines the frame rate. If defined, this value must be greater than 0. A value higher + than the underlying requestAnimationFrame implementation will have no effect. + */ + targetFrameRate: number; + /** + * Gets or sets whether or not this widget should control the render loop. + If set to true the widget will use {@link requestAnimationFrame} to + perform rendering and resizing of the widget, as well as drive the + simulation clock. If set to false, you must manually call the + resize, render methods + as part of a custom render loop. If an error occurs during rendering, {@link Scene}'s + renderError event will be raised and this property + will be set to false. It must be set back to true to continue rendering + after the error. + */ + useDefaultRenderLoop: boolean; + /** + * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve + performance on less powerful devices while values greater than 1.0 will render at a higher + resolution and then scale down, resulting in improved visual fidelity. + For example, if the widget is laid out at a size of 640x480, setting this value to 0.5 + will cause the scene to be rendered at 320x240 and then scaled up while setting + it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down. + */ + resolutionScale: number; + /** + * Boolean flag indicating if the browser's recommended resolution is used. + If true, the browser's device pixel ratio is ignored and 1.0 is used instead, + effectively rendering based on CSS pixels instead of device pixels. This can improve + performance on less powerful devices that have high pixel density. When false, rendering + will be in device pixels. {@link Viewer#resolutionScale} will still take effect whether + this flag is true or false. + */ + useBrowserRecommendedResolution: boolean; + /** + * Gets or sets whether or not data sources can temporarily pause + animation in order to avoid showing an incomplete picture to the user. + For example, if asynchronous primitives are being processed in the + background, the clock will not advance until the geometry is ready. + */ + allowDataSourcesToSuspendAnimation: boolean; + /** + * Gets or sets the Entity instance currently being tracked by the camera. + */ + trackedEntity: Entity | undefined; + /** + * Gets or sets the object instance for which to display a selection indicator. + + If a user interactively picks a Cesium3DTilesFeature instance, then this property + will contain a transient Entity instance with a property named "feature" that is + the instance that was picked. + */ + selectedEntity: Entity | undefined; + /** + * Gets the event that is raised when the selected entity changes. + */ + readonly selectedEntityChanged: Event; + /** + * Gets the event that is raised when the tracked entity changes. + */ + readonly trackedEntityChanged: Event; + /** + * Gets or sets the data source to track with the viewer's clock. + */ + clockTrackedDataSource: DataSource; + /** + * Extends the base viewer functionality with the provided mixin. + A mixin may add additional properties, functions, or other behavior + to the provided viewer instance. + * @param mixin - The Viewer mixin to add to this instance. + * @param [options] - The options object to be passed to the mixin function. + */ + extend(mixin: Viewer.ViewerMixin, options?: any): void; + /** + * Resizes the widget to match the container size. + This function is called automatically as needed unless + useDefaultRenderLoop is set to false. + */ + resize(): void; + /** + * This forces the widget to re-think its layout, including + widget sizes and credit placement. + */ + forceResize(): void; + /** + * Renders the scene. This function is called automatically + unless useDefaultRenderLoop is set to false; + */ + render(): void; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; + /** + * Asynchronously sets the camera to view the provided entity, entities, or data source. + If the data source is still in the process of loading or the visualization is otherwise still loading, + this method waits for the data to be ready before performing the zoom. + +

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + The heading and the pitch angles are defined in the local east-north-up reference frame. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is + zero, a range will be computed such that the whole bounding sphere is visible.

+ +

In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + target will be the range. The heading will be determined from the offset. If the heading cannot be + determined from the offset, the heading will be north.

+ * @param target - The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types. + * @param [offset] - The offset from the center of the entity in the local east-north-up reference frame. + * @returns A Promise that resolves to true if the zoom was successful or false if the target is not currently visualized in the scene or the zoom was cancelled. + */ + zoomTo(target: Entity | Entity[] | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise, offset?: HeadingPitchRange): Promise; + /** + * Flies the camera to the provided entity, entities, or data source. + If the data source is still in the process of loading or the visualization is otherwise still loading, + this method waits for the data to be ready before performing the flight. + +

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + The heading and the pitch angles are defined in the local east-north-up reference frame. + The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is + zero, a range will be computed such that the whole bounding sphere is visible.

+ +

In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + target will be the range. The heading will be determined from the offset. If the heading cannot be + determined from the offset, the heading will be north.

+ * @param target - The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types. + * @param [options] - Object with the following properties: + * @param [options.duration = 3.0] - The duration of the flight in seconds. + * @param [options.maximumHeight] - The maximum height at the peak of the flight. + * @param [options.offset] - The offset from the target in the local east-north-up reference frame centered at the target. + * @returns A Promise that resolves to true if the flight was successful or false if the target is not currently visualized in the scene or the flight was cancelled. //TODO: Cleanup entity mentions + */ + flyTo(target: Entity | Entity[] | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise, options?: { + duration?: number; + maximumHeight?: number; + offset?: HeadingPitchRange; + }): Promise; +} + +/** + * A mixin which adds the {@link Cesium3DTilesInspector} widget to the {@link Viewer} widget. +Rather than being called directly, this function is normally passed as +a parameter to {@link Viewer#extend}, as shown in the example below. + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin); + * @param viewer - The viewer instance. + */ +export function viewerCesium3DTilesInspectorMixin(viewer: Viewer): void; + +/** + * A mixin which adds the CesiumInspector widget to the Viewer widget. +Rather than being called directly, this function is normally passed as +a parameter to {@link Viewer#extend}, as shown in the example below. + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.extend(Cesium.viewerCesiumInspectorMixin); + * @param viewer - The viewer instance. + */ +export function viewerCesiumInspectorMixin(viewer: Viewer): void; + +/** + * A mixin which adds default drag and drop support for CZML files to the Viewer widget. +Rather than being called directly, this function is normally passed as +a parameter to {@link Viewer#extend}, as shown in the example below. + * @example + * // Add basic drag and drop support and pop up an alert window on error. +var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.extend(Cesium.viewerDragDropMixin); +viewer.dropError.addEventListener(function(viewerArg, source, error) { + window.alert('Error processing ' + source + ':' + error); +}); + * @param viewer - The viewer instance. + * @param [options] - Object with the following properties: + * @param [options.dropTarget = viewer.container] - The DOM element which will serve as the drop target. + * @param [options.clearOnDrop = true] - When true, dropping files will clear all existing data sources first, when false, new data sources will be loaded after the existing ones. + * @param [options.flyToOnDrop = true] - When true, dropping files will fly to the data source once it is loaded. + * @param [options.clampToGround = true] - When true, datasources are clamped to the ground. + * @param [options.proxy] - The proxy to be used for KML network links. + */ +export function viewerDragDropMixin(viewer: Viewer, options?: { + dropTarget?: Element | string; + clearOnDrop?: boolean; + flyToOnDrop?: boolean; + clampToGround?: boolean; + proxy?: Proxy; +}): void; + +/** + * A mixin which adds the {@link PerformanceWatchdog} widget to the {@link Viewer} widget. +Rather than being called directly, this function is normally passed as +a parameter to {@link Viewer#extend}, as shown in the example below. + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); +viewer.extend(Cesium.viewerPerformanceWatchdogMixin, { + lowFrameRateMessage : 'Why is this going so slowly?' +}); + * @param viewer - The viewer instance. + * @param [options] - An object with properties. + * @param [options.lowFrameRateMessage = 'This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] - The + message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + */ +export function viewerPerformanceWatchdogMixin(viewer: Viewer, options?: { + lowFrameRateMessage?: string; +}): void; + +/** + * A single button widget for toggling vr mode. + * @param container - The DOM element or ID that will contain the widget. + * @param scene - The scene. + * @param [vrElement = document.body] - The element or id to be placed into vr mode. + */ +export class VRButton { + constructor(container: Element | string, scene: Scene, vrElement?: Element | string); + /** + * Gets the parent container. + */ + container: Element; + /** + * Gets the view model. + */ + viewModel: VRButtonViewModel; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the widget. Should be called if permanently + removing the widget from layout. + */ + destroy(): void; +} + +/** + * The view model for {@link VRButton}. + * @param scene - The scene. + * @param [vrElement = document.body] - The element or id to be placed into VR mode. + */ +export class VRButtonViewModel { + constructor(scene: Scene, vrElement?: Element | string); + /** + * Gets whether or not VR mode is active. + */ + isVRMode: boolean; + /** + * Gets or sets whether or not VR functionality should be enabled. + */ + isVREnabled: boolean; + /** + * Gets the tooltip. This property is observable. + */ + tooltip: string; + /** + * Gets or sets the HTML element to place into VR mode when the + corresponding button is pressed. + */ + vrElement: Element; + /** + * Gets the Command to toggle VR mode. + */ + command: Command; + /** + * @returns true if the object has been destroyed, false otherwise. + */ + isDestroyed(): boolean; + /** + * Destroys the view model. Should be called to + properly clean up the view model when it is no longer needed. + */ + destroy(): void; +} + + + + +} + +declare module "cesium/Source/Core/ArcGISTiledElevationTerrainProvider" { import { ArcGISTiledElevationTerrainProvider } from 'cesium'; export default ArcGISTiledElevationTerrainProvider; } +declare module "cesium/Source/Core/ArcType" { import { ArcType } from 'cesium'; export default ArcType; } +declare module "cesium/Source/Core/AssociativeArray" { import { AssociativeArray } from 'cesium'; export default AssociativeArray; } +declare module "cesium/Source/Core/AxisAlignedBoundingBox" { import { AxisAlignedBoundingBox } from 'cesium'; export default AxisAlignedBoundingBox; } +declare module "cesium/Source/Core/barycentricCoordinates" { import { barycentricCoordinates } from 'cesium'; export default barycentricCoordinates; } +declare module "cesium/Source/Core/binarySearch" { import { binarySearch } from 'cesium'; export default binarySearch; } +declare module "cesium/Source/Core/BingMapsGeocoderService" { import { BingMapsGeocoderService } from 'cesium'; export default BingMapsGeocoderService; } +declare module "cesium/Source/Core/BoundingRectangle" { import { BoundingRectangle } from 'cesium'; export default BoundingRectangle; } +declare module "cesium/Source/Core/BoundingSphere" { import { BoundingSphere } from 'cesium'; export default BoundingSphere; } +declare module "cesium/Source/Core/BoxGeometry" { import { BoxGeometry } from 'cesium'; export default BoxGeometry; } +declare module "cesium/Source/Core/BoxOutlineGeometry" { import { BoxOutlineGeometry } from 'cesium'; export default BoxOutlineGeometry; } +declare module "cesium/Source/Core/buildModuleUrl" { import { buildModuleUrl } from 'cesium'; export default buildModuleUrl; } +declare module "cesium/Source/Core/cancelAnimationFrame" { import { cancelAnimationFrame } from 'cesium'; export default cancelAnimationFrame; } +declare module "cesium/Source/Core/Cartesian2" { import { Cartesian2 } from 'cesium'; export default Cartesian2; } +declare module "cesium/Source/Core/Cartesian3" { import { Cartesian3 } from 'cesium'; export default Cartesian3; } +declare module "cesium/Source/Core/Cartesian4" { import { Cartesian4 } from 'cesium'; export default Cartesian4; } +declare module "cesium/Source/Core/Cartographic" { import { Cartographic } from 'cesium'; export default Cartographic; } +declare module "cesium/Source/Core/CartographicGeocoderService" { import { CartographicGeocoderService } from 'cesium'; export default CartographicGeocoderService; } +declare module "cesium/Source/Core/CatmullRomSpline" { import { CatmullRomSpline } from 'cesium'; export default CatmullRomSpline; } +declare module "cesium/Source/Core/CesiumTerrainProvider" { import { CesiumTerrainProvider } from 'cesium'; export default CesiumTerrainProvider; } +declare module "cesium/Source/Core/CircleGeometry" { import { CircleGeometry } from 'cesium'; export default CircleGeometry; } +declare module "cesium/Source/Core/CircleOutlineGeometry" { import { CircleOutlineGeometry } from 'cesium'; export default CircleOutlineGeometry; } +declare module "cesium/Source/Core/Clock" { import { Clock } from 'cesium'; export default Clock; } +declare module "cesium/Source/Core/ClockRange" { import { ClockRange } from 'cesium'; export default ClockRange; } +declare module "cesium/Source/Core/ClockStep" { import { ClockStep } from 'cesium'; export default ClockStep; } +declare module "cesium/Source/Core/clone" { import { clone } from 'cesium'; export default clone; } +declare module "cesium/Source/Core/Color" { import { Color } from 'cesium'; export default Color; } +declare module "cesium/Source/Core/ColorGeometryInstanceAttribute" { import { ColorGeometryInstanceAttribute } from 'cesium'; export default ColorGeometryInstanceAttribute; } +declare module "cesium/Source/Core/combine" { import { combine } from 'cesium'; export default combine; } +declare module "cesium/Source/Core/ComponentDatatype" { import { ComponentDatatype } from 'cesium'; export default ComponentDatatype; } +declare module "cesium/Source/Core/CompressedTextureBuffer" { import { CompressedTextureBuffer } from 'cesium'; export default CompressedTextureBuffer; } +declare module "cesium/Source/Core/CoplanarPolygonGeometry" { import { CoplanarPolygonGeometry } from 'cesium'; export default CoplanarPolygonGeometry; } +declare module "cesium/Source/Core/CoplanarPolygonOutlineGeometry" { import { CoplanarPolygonOutlineGeometry } from 'cesium'; export default CoplanarPolygonOutlineGeometry; } +declare module "cesium/Source/Core/CornerType" { import { CornerType } from 'cesium'; export default CornerType; } +declare module "cesium/Source/Core/CorridorGeometry" { import { CorridorGeometry } from 'cesium'; export default CorridorGeometry; } +declare module "cesium/Source/Core/CorridorOutlineGeometry" { import { CorridorOutlineGeometry } from 'cesium'; export default CorridorOutlineGeometry; } +declare module "cesium/Source/Core/createGuid" { import { createGuid } from 'cesium'; export default createGuid; } +declare module "cesium/Source/Core/createWorldTerrain" { import { createWorldTerrain } from 'cesium'; export default createWorldTerrain; } +declare module "cesium/Source/Core/Credit" { import { Credit } from 'cesium'; export default Credit; } +declare module "cesium/Source/Core/CubicRealPolynomial" { import { CubicRealPolynomial } from 'cesium'; export default CubicRealPolynomial; } +declare module "cesium/Source/Core/CullingVolume" { import { CullingVolume } from 'cesium'; export default CullingVolume; } +declare module "cesium/Source/Core/CylinderGeometry" { import { CylinderGeometry } from 'cesium'; export default CylinderGeometry; } +declare module "cesium/Source/Core/CylinderOutlineGeometry" { import { CylinderOutlineGeometry } from 'cesium'; export default CylinderOutlineGeometry; } +declare module "cesium/Source/Core/DefaultProxy" { import { DefaultProxy } from 'cesium'; export default DefaultProxy; } +declare module "cesium/Source/Core/defaultValue" { import { defaultValue } from 'cesium'; export default defaultValue; } +declare module "cesium/Source/Core/defined" { import { defined } from 'cesium'; export default defined; } +declare module "cesium/Source/Core/destroyObject" { import { destroyObject } from 'cesium'; export default destroyObject; } +declare module "cesium/Source/Core/DeveloperError" { import { DeveloperError } from 'cesium'; export default DeveloperError; } +declare module "cesium/Source/Core/DistanceDisplayCondition" { import { DistanceDisplayCondition } from 'cesium'; export default DistanceDisplayCondition; } +declare module "cesium/Source/Core/DistanceDisplayConditionGeometryInstanceAttribute" { import { DistanceDisplayConditionGeometryInstanceAttribute } from 'cesium'; export default DistanceDisplayConditionGeometryInstanceAttribute; } +declare module "cesium/Source/Core/EasingFunction" { import { EasingFunction } from 'cesium'; export default EasingFunction; } +declare module "cesium/Source/Core/EllipseGeometry" { import { EllipseGeometry } from 'cesium'; export default EllipseGeometry; } +declare module "cesium/Source/Core/EllipseOutlineGeometry" { import { EllipseOutlineGeometry } from 'cesium'; export default EllipseOutlineGeometry; } +declare module "cesium/Source/Core/Ellipsoid" { import { Ellipsoid } from 'cesium'; export default Ellipsoid; } +declare module "cesium/Source/Core/EllipsoidGeodesic" { import { EllipsoidGeodesic } from 'cesium'; export default EllipsoidGeodesic; } +declare module "cesium/Source/Core/EllipsoidGeometry" { import { EllipsoidGeometry } from 'cesium'; export default EllipsoidGeometry; } +declare module "cesium/Source/Core/EllipsoidOutlineGeometry" { import { EllipsoidOutlineGeometry } from 'cesium'; export default EllipsoidOutlineGeometry; } +declare module "cesium/Source/Core/EllipsoidRhumbLine" { import { EllipsoidRhumbLine } from 'cesium'; export default EllipsoidRhumbLine; } +declare module "cesium/Source/Core/EllipsoidTangentPlane" { import { EllipsoidTangentPlane } from 'cesium'; export default EllipsoidTangentPlane; } +declare module "cesium/Source/Core/EllipsoidTerrainProvider" { import { EllipsoidTerrainProvider } from 'cesium'; export default EllipsoidTerrainProvider; } +declare module "cesium/Source/Core/Event" { import { Event } from 'cesium'; export default Event; } +declare module "cesium/Source/Core/EventHelper" { import { EventHelper } from 'cesium'; export default EventHelper; } +declare module "cesium/Source/Core/ExtrapolationType" { import { ExtrapolationType } from 'cesium'; export default ExtrapolationType; } +declare module "cesium/Source/Core/FeatureDetection" { import { FeatureDetection } from 'cesium'; export default FeatureDetection; } +declare module "cesium/Source/Core/formatError" { import { formatError } from 'cesium'; export default formatError; } +declare module "cesium/Source/Core/FrustumGeometry" { import { FrustumGeometry } from 'cesium'; export default FrustumGeometry; } +declare module "cesium/Source/Core/FrustumOutlineGeometry" { import { FrustumOutlineGeometry } from 'cesium'; export default FrustumOutlineGeometry; } +declare module "cesium/Source/Core/Fullscreen" { import { Fullscreen } from 'cesium'; export default Fullscreen; } +declare module "cesium/Source/Core/GeocoderService" { import { GeocoderService } from 'cesium'; export default GeocoderService; } +declare module "cesium/Source/Core/GeocodeType" { import { GeocodeType } from 'cesium'; export default GeocodeType; } +declare module "cesium/Source/Core/GeographicProjection" { import { GeographicProjection } from 'cesium'; export default GeographicProjection; } +declare module "cesium/Source/Core/GeographicTilingScheme" { import { GeographicTilingScheme } from 'cesium'; export default GeographicTilingScheme; } +declare module "cesium/Source/Core/Geometry" { import { Geometry } from 'cesium'; export default Geometry; } +declare module "cesium/Source/Core/GeometryAttribute" { import { GeometryAttribute } from 'cesium'; export default GeometryAttribute; } +declare module "cesium/Source/Core/GeometryAttributes" { import { GeometryAttributes } from 'cesium'; export default GeometryAttributes; } +declare module "cesium/Source/Core/GeometryFactory" { import { GeometryFactory } from 'cesium'; export default GeometryFactory; } +declare module "cesium/Source/Core/GeometryInstance" { import { GeometryInstance } from 'cesium'; export default GeometryInstance; } +declare module "cesium/Source/Core/GeometryInstanceAttribute" { import { GeometryInstanceAttribute } from 'cesium'; export default GeometryInstanceAttribute; } +declare module "cesium/Source/Core/GeometryPipeline" { import { GeometryPipeline } from 'cesium'; export default GeometryPipeline; } +declare module "cesium/Source/Core/getAbsoluteUri" { import { getAbsoluteUri } from 'cesium'; export default getAbsoluteUri; } +declare module "cesium/Source/Core/getBaseUri" { import { getBaseUri } from 'cesium'; export default getBaseUri; } +declare module "cesium/Source/Core/getExtensionFromUri" { import { getExtensionFromUri } from 'cesium'; export default getExtensionFromUri; } +declare module "cesium/Source/Core/getFilenameFromUri" { import { getFilenameFromUri } from 'cesium'; export default getFilenameFromUri; } +declare module "cesium/Source/Core/getImagePixels" { import { getImagePixels } from 'cesium'; export default getImagePixels; } +declare module "cesium/Source/Core/getTimestamp" { import { getTimestamp } from 'cesium'; export default getTimestamp; } +declare module "cesium/Source/Core/GoogleEarthEnterpriseMetadata" { import { GoogleEarthEnterpriseMetadata } from 'cesium'; export default GoogleEarthEnterpriseMetadata; } +declare module "cesium/Source/Core/GoogleEarthEnterpriseTerrainData" { import { GoogleEarthEnterpriseTerrainData } from 'cesium'; export default GoogleEarthEnterpriseTerrainData; } +declare module "cesium/Source/Core/GoogleEarthEnterpriseTerrainProvider" { import { GoogleEarthEnterpriseTerrainProvider } from 'cesium'; export default GoogleEarthEnterpriseTerrainProvider; } +declare module "cesium/Source/Core/GregorianDate" { import { GregorianDate } from 'cesium'; export default GregorianDate; } +declare module "cesium/Source/Core/GroundPolylineGeometry" { import { GroundPolylineGeometry } from 'cesium'; export default GroundPolylineGeometry; } +declare module "cesium/Source/Core/HeadingPitchRange" { import { HeadingPitchRange } from 'cesium'; export default HeadingPitchRange; } +declare module "cesium/Source/Core/HeadingPitchRoll" { import { HeadingPitchRoll } from 'cesium'; export default HeadingPitchRoll; } +declare module "cesium/Source/Core/HeightmapEncoding" { import { HeightmapEncoding } from 'cesium'; export default HeightmapEncoding; } +declare module "cesium/Source/Core/HeightmapTerrainData" { import { HeightmapTerrainData } from 'cesium'; export default HeightmapTerrainData; } +declare module "cesium/Source/Core/HermitePolynomialApproximation" { import { HermitePolynomialApproximation } from 'cesium'; export default HermitePolynomialApproximation; } +declare module "cesium/Source/Core/HermiteSpline" { import { HermiteSpline } from 'cesium'; export default HermiteSpline; } +declare module "cesium/Source/Core/IndexDatatype" { import { IndexDatatype } from 'cesium'; export default IndexDatatype; } +declare module "cesium/Source/Core/InterpolationAlgorithm" { import { InterpolationAlgorithm } from 'cesium'; export default InterpolationAlgorithm; } +declare module "cesium/Source/Core/Intersect" { import { Intersect } from 'cesium'; export default Intersect; } +declare module "cesium/Source/Core/Intersections2D" { import { Intersections2D } from 'cesium'; export default Intersections2D; } +declare module "cesium/Source/Core/IntersectionTests" { import { IntersectionTests } from 'cesium'; export default IntersectionTests; } +declare module "cesium/Source/Core/Interval" { import { Interval } from 'cesium'; export default Interval; } +declare module "cesium/Source/Core/Ion" { import { Ion } from 'cesium'; export default Ion; } +declare module "cesium/Source/Core/IonGeocoderService" { import { IonGeocoderService } from 'cesium'; export default IonGeocoderService; } +declare module "cesium/Source/Core/IonResource" { import { IonResource } from 'cesium'; export default IonResource; } +declare module "cesium/Source/Core/isLeapYear" { import { isLeapYear } from 'cesium'; export default isLeapYear; } +declare module "cesium/Source/Core/Iso8601" { import { Iso8601 } from 'cesium'; export default Iso8601; } +declare module "cesium/Source/Core/JulianDate" { import { JulianDate } from 'cesium'; export default JulianDate; } +declare module "cesium/Source/Core/KeyboardEventModifier" { import { KeyboardEventModifier } from 'cesium'; export default KeyboardEventModifier; } +declare module "cesium/Source/Core/LagrangePolynomialApproximation" { import { LagrangePolynomialApproximation } from 'cesium'; export default LagrangePolynomialApproximation; } +declare module "cesium/Source/Core/LeapSecond" { import { LeapSecond } from 'cesium'; export default LeapSecond; } +declare module "cesium/Source/Core/LinearApproximation" { import { LinearApproximation } from 'cesium'; export default LinearApproximation; } +declare module "cesium/Source/Core/LinearSpline" { import { LinearSpline } from 'cesium'; export default LinearSpline; } +declare module "cesium/Source/Core/loadCRN" { import { loadCRN } from 'cesium'; export default loadCRN; } +declare module "cesium/Source/Core/loadKTX" { import { loadKTX } from 'cesium'; export default loadKTX; } +declare module "cesium/Source/Core/MapProjection" { import { MapProjection } from 'cesium'; export default MapProjection; } +declare module "cesium/Source/Core/Math" { import { Math } from 'cesium'; export default Math; } +declare module "cesium/Source/Core/Matrix2" { import { Matrix2 } from 'cesium'; export default Matrix2; } +declare module "cesium/Source/Core/Matrix3" { import { Matrix3 } from 'cesium'; export default Matrix3; } +declare module "cesium/Source/Core/Matrix4" { import { Matrix4 } from 'cesium'; export default Matrix4; } +declare module "cesium/Source/Core/mergeSort" { import { mergeSort } from 'cesium'; export default mergeSort; } +declare module "cesium/Source/Core/NearFarScalar" { import { NearFarScalar } from 'cesium'; export default NearFarScalar; } +declare module "cesium/Source/Core/objectToQuery" { import { objectToQuery } from 'cesium'; export default objectToQuery; } +declare module "cesium/Source/Core/Occluder" { import { Occluder } from 'cesium'; export default Occluder; } +declare module "cesium/Source/Core/OpenCageGeocoderService" { import { OpenCageGeocoderService } from 'cesium'; export default OpenCageGeocoderService; } +declare module "cesium/Source/Core/OrientedBoundingBox" { import { OrientedBoundingBox } from 'cesium'; export default OrientedBoundingBox; } +declare module "cesium/Source/Core/OrthographicFrustum" { import { OrthographicFrustum } from 'cesium'; export default OrthographicFrustum; } +declare module "cesium/Source/Core/OrthographicOffCenterFrustum" { import { OrthographicOffCenterFrustum } from 'cesium'; export default OrthographicOffCenterFrustum; } +declare module "cesium/Source/Core/Packable" { import { Packable } from 'cesium'; export default Packable; } +declare module "cesium/Source/Core/PackableForInterpolation" { import { PackableForInterpolation } from 'cesium'; export default PackableForInterpolation; } +declare module "cesium/Source/Core/PeliasGeocoderService" { import { PeliasGeocoderService } from 'cesium'; export default PeliasGeocoderService; } +declare module "cesium/Source/Core/PerspectiveFrustum" { import { PerspectiveFrustum } from 'cesium'; export default PerspectiveFrustum; } +declare module "cesium/Source/Core/PerspectiveOffCenterFrustum" { import { PerspectiveOffCenterFrustum } from 'cesium'; export default PerspectiveOffCenterFrustum; } +declare module "cesium/Source/Core/PinBuilder" { import { PinBuilder } from 'cesium'; export default PinBuilder; } +declare module "cesium/Source/Core/PixelFormat" { import { PixelFormat } from 'cesium'; export default PixelFormat; } +declare module "cesium/Source/Core/Plane" { import { Plane } from 'cesium'; export default Plane; } +declare module "cesium/Source/Core/PlaneGeometry" { import { PlaneGeometry } from 'cesium'; export default PlaneGeometry; } +declare module "cesium/Source/Core/PlaneOutlineGeometry" { import { PlaneOutlineGeometry } from 'cesium'; export default PlaneOutlineGeometry; } +declare module "cesium/Source/Core/pointInsideTriangle" { import { pointInsideTriangle } from 'cesium'; export default pointInsideTriangle; } +declare module "cesium/Source/Core/PolygonGeometry" { import { PolygonGeometry } from 'cesium'; export default PolygonGeometry; } +declare module "cesium/Source/Core/PolygonHierarchy" { import { PolygonHierarchy } from 'cesium'; export default PolygonHierarchy; } +declare module "cesium/Source/Core/PolygonOutlineGeometry" { import { PolygonOutlineGeometry } from 'cesium'; export default PolygonOutlineGeometry; } +declare module "cesium/Source/Core/PolylineGeometry" { import { PolylineGeometry } from 'cesium'; export default PolylineGeometry; } +declare module "cesium/Source/Core/PolylineVolumeGeometry" { import { PolylineVolumeGeometry } from 'cesium'; export default PolylineVolumeGeometry; } +declare module "cesium/Source/Core/PolylineVolumeOutlineGeometry" { import { PolylineVolumeOutlineGeometry } from 'cesium'; export default PolylineVolumeOutlineGeometry; } +declare module "cesium/Source/Core/PrimitiveType" { import { PrimitiveType } from 'cesium'; export default PrimitiveType; } +declare module "cesium/Source/Core/Proxy" { import { Proxy } from 'cesium'; export default Proxy; } +declare module "cesium/Source/Core/QuadraticRealPolynomial" { import { QuadraticRealPolynomial } from 'cesium'; export default QuadraticRealPolynomial; } +declare module "cesium/Source/Core/QuantizedMeshTerrainData" { import { QuantizedMeshTerrainData } from 'cesium'; export default QuantizedMeshTerrainData; } +declare module "cesium/Source/Core/QuarticRealPolynomial" { import { QuarticRealPolynomial } from 'cesium'; export default QuarticRealPolynomial; } +declare module "cesium/Source/Core/Quaternion" { import { Quaternion } from 'cesium'; export default Quaternion; } +declare module "cesium/Source/Core/QuaternionSpline" { import { QuaternionSpline } from 'cesium'; export default QuaternionSpline; } +declare module "cesium/Source/Core/queryToObject" { import { queryToObject } from 'cesium'; export default queryToObject; } +declare module "cesium/Source/Core/Queue" { import { Queue } from 'cesium'; export default Queue; } +declare module "cesium/Source/Core/Ray" { import { Ray } from 'cesium'; export default Ray; } +declare module "cesium/Source/Core/Rectangle" { import { Rectangle } from 'cesium'; export default Rectangle; } +declare module "cesium/Source/Core/RectangleGeometry" { import { RectangleGeometry } from 'cesium'; export default RectangleGeometry; } +declare module "cesium/Source/Core/RectangleOutlineGeometry" { import { RectangleOutlineGeometry } from 'cesium'; export default RectangleOutlineGeometry; } +declare module "cesium/Source/Core/ReferenceFrame" { import { ReferenceFrame } from 'cesium'; export default ReferenceFrame; } +declare module "cesium/Source/Core/Request" { import { Request } from 'cesium'; export default Request; } +declare module "cesium/Source/Core/requestAnimationFrame" { import { requestAnimationFrame } from 'cesium'; export default requestAnimationFrame; } +declare module "cesium/Source/Core/RequestErrorEvent" { import { RequestErrorEvent } from 'cesium'; export default RequestErrorEvent; } +declare module "cesium/Source/Core/RequestScheduler" { import { RequestScheduler } from 'cesium'; export default RequestScheduler; } +declare module "cesium/Source/Core/RequestState" { import { RequestState } from 'cesium'; export default RequestState; } +declare module "cesium/Source/Core/RequestType" { import { RequestType } from 'cesium'; export default RequestType; } +declare module "cesium/Source/Core/Resource" { import { Resource } from 'cesium'; export default Resource; } +declare module "cesium/Source/Core/RuntimeError" { import { RuntimeError } from 'cesium'; export default RuntimeError; } +declare module "cesium/Source/Core/sampleTerrain" { import { sampleTerrain } from 'cesium'; export default sampleTerrain; } +declare module "cesium/Source/Core/sampleTerrainMostDetailed" { import { sampleTerrainMostDetailed } from 'cesium'; export default sampleTerrainMostDetailed; } +declare module "cesium/Source/Core/ScreenSpaceEventHandler" { import { ScreenSpaceEventHandler } from 'cesium'; export default ScreenSpaceEventHandler; } +declare module "cesium/Source/Core/ScreenSpaceEventType" { import { ScreenSpaceEventType } from 'cesium'; export default ScreenSpaceEventType; } +declare module "cesium/Source/Core/ShowGeometryInstanceAttribute" { import { ShowGeometryInstanceAttribute } from 'cesium'; export default ShowGeometryInstanceAttribute; } +declare module "cesium/Source/Core/Simon1994PlanetaryPositions" { import { Simon1994PlanetaryPositions } from 'cesium'; export default Simon1994PlanetaryPositions; } +declare module "cesium/Source/Core/SimplePolylineGeometry" { import { SimplePolylineGeometry } from 'cesium'; export default SimplePolylineGeometry; } +declare module "cesium/Source/Core/SphereGeometry" { import { SphereGeometry } from 'cesium'; export default SphereGeometry; } +declare module "cesium/Source/Core/SphereOutlineGeometry" { import { SphereOutlineGeometry } from 'cesium'; export default SphereOutlineGeometry; } +declare module "cesium/Source/Core/Spherical" { import { Spherical } from 'cesium'; export default Spherical; } +declare module "cesium/Source/Core/Spline" { import { Spline } from 'cesium'; export default Spline; } +declare module "cesium/Source/Core/subdivideArray" { import { subdivideArray } from 'cesium'; export default subdivideArray; } +declare module "cesium/Source/Core/TaskProcessor" { import { TaskProcessor } from 'cesium'; export default TaskProcessor; } +declare module "cesium/Source/Core/TerrainData" { import { TerrainData } from 'cesium'; export default TerrainData; } +declare module "cesium/Source/Core/TerrainProvider" { import { TerrainProvider } from 'cesium'; export default TerrainProvider; } +declare module "cesium/Source/Core/TileAvailability" { import { TileAvailability } from 'cesium'; export default TileAvailability; } +declare module "cesium/Source/Core/TileProviderError" { import { TileProviderError } from 'cesium'; export default TileProviderError; } +declare module "cesium/Source/Core/TilingScheme" { import { TilingScheme } from 'cesium'; export default TilingScheme; } +declare module "cesium/Source/Core/TimeInterval" { import { TimeInterval } from 'cesium'; export default TimeInterval; } +declare module "cesium/Source/Core/TimeIntervalCollection" { import { TimeIntervalCollection } from 'cesium'; export default TimeIntervalCollection; } +declare module "cesium/Source/Core/TimeStandard" { import { TimeStandard } from 'cesium'; export default TimeStandard; } +declare module "cesium/Source/Core/Transforms" { import { Transforms } from 'cesium'; export default Transforms; } +declare module "cesium/Source/Core/TranslationRotationScale" { import { TranslationRotationScale } from 'cesium'; export default TranslationRotationScale; } +declare module "cesium/Source/Core/TridiagonalSystemSolver" { import { TridiagonalSystemSolver } from 'cesium'; export default TridiagonalSystemSolver; } +declare module "cesium/Source/Core/TrustedServers" { import { TrustedServers } from 'cesium'; export default TrustedServers; } +declare module "cesium/Source/Core/VertexFormat" { import { VertexFormat } from 'cesium'; export default VertexFormat; } +declare module "cesium/Source/Core/VideoSynchronizer" { import { VideoSynchronizer } from 'cesium'; export default VideoSynchronizer; } +declare module "cesium/Source/Core/Visibility" { import { Visibility } from 'cesium'; export default Visibility; } +declare module "cesium/Source/Core/VRTheWorldTerrainProvider" { import { VRTheWorldTerrainProvider } from 'cesium'; export default VRTheWorldTerrainProvider; } +declare module "cesium/Source/Core/WallGeometry" { import { WallGeometry } from 'cesium'; export default WallGeometry; } +declare module "cesium/Source/Core/WallOutlineGeometry" { import { WallOutlineGeometry } from 'cesium'; export default WallOutlineGeometry; } +declare module "cesium/Source/Core/WebGLConstants" { import { WebGLConstants } from 'cesium'; export default WebGLConstants; } +declare module "cesium/Source/Core/WebMercatorProjection" { import { WebMercatorProjection } from 'cesium'; export default WebMercatorProjection; } +declare module "cesium/Source/Core/WebMercatorTilingScheme" { import { WebMercatorTilingScheme } from 'cesium'; export default WebMercatorTilingScheme; } +declare module "cesium/Source/Core/WeightSpline" { import { WeightSpline } from 'cesium'; export default WeightSpline; } +declare module "cesium/Source/Core/WindingOrder" { import { WindingOrder } from 'cesium'; export default WindingOrder; } +declare module "cesium/Source/Core/writeTextToCanvas" { import { writeTextToCanvas } from 'cesium'; export default writeTextToCanvas; } +declare module "cesium/Source/DataSources/BillboardGraphics" { import { BillboardGraphics } from 'cesium'; export default BillboardGraphics; } +declare module "cesium/Source/DataSources/BillboardVisualizer" { import { BillboardVisualizer } from 'cesium'; export default BillboardVisualizer; } +declare module "cesium/Source/DataSources/BoxGeometryUpdater" { import { BoxGeometryUpdater } from 'cesium'; export default BoxGeometryUpdater; } +declare module "cesium/Source/DataSources/BoxGraphics" { import { BoxGraphics } from 'cesium'; export default BoxGraphics; } +declare module "cesium/Source/DataSources/CallbackProperty" { import { CallbackProperty } from 'cesium'; export default CallbackProperty; } +declare module "cesium/Source/DataSources/Cesium3DTilesetGraphics" { import { Cesium3DTilesetGraphics } from 'cesium'; export default Cesium3DTilesetGraphics; } +declare module "cesium/Source/DataSources/Cesium3DTilesetVisualizer" { import { Cesium3DTilesetVisualizer } from 'cesium'; export default Cesium3DTilesetVisualizer; } +declare module "cesium/Source/DataSources/CheckerboardMaterialProperty" { import { CheckerboardMaterialProperty } from 'cesium'; export default CheckerboardMaterialProperty; } +declare module "cesium/Source/DataSources/ColorMaterialProperty" { import { ColorMaterialProperty } from 'cesium'; export default ColorMaterialProperty; } +declare module "cesium/Source/DataSources/CompositeEntityCollection" { import { CompositeEntityCollection } from 'cesium'; export default CompositeEntityCollection; } +declare module "cesium/Source/DataSources/CompositeMaterialProperty" { import { CompositeMaterialProperty } from 'cesium'; export default CompositeMaterialProperty; } +declare module "cesium/Source/DataSources/CompositePositionProperty" { import { CompositePositionProperty } from 'cesium'; export default CompositePositionProperty; } +declare module "cesium/Source/DataSources/CompositeProperty" { import { CompositeProperty } from 'cesium'; export default CompositeProperty; } +declare module "cesium/Source/DataSources/ConstantPositionProperty" { import { ConstantPositionProperty } from 'cesium'; export default ConstantPositionProperty; } +declare module "cesium/Source/DataSources/ConstantProperty" { import { ConstantProperty } from 'cesium'; export default ConstantProperty; } +declare module "cesium/Source/DataSources/CorridorGeometryUpdater" { import { CorridorGeometryUpdater } from 'cesium'; export default CorridorGeometryUpdater; } +declare module "cesium/Source/DataSources/CorridorGraphics" { import { CorridorGraphics } from 'cesium'; export default CorridorGraphics; } +declare module "cesium/Source/DataSources/CustomDataSource" { import { CustomDataSource } from 'cesium'; export default CustomDataSource; } +declare module "cesium/Source/DataSources/CylinderGeometryUpdater" { import { CylinderGeometryUpdater } from 'cesium'; export default CylinderGeometryUpdater; } +declare module "cesium/Source/DataSources/CylinderGraphics" { import { CylinderGraphics } from 'cesium'; export default CylinderGraphics; } +declare module "cesium/Source/DataSources/CzmlDataSource" { import { CzmlDataSource } from 'cesium'; export default CzmlDataSource; } +declare module "cesium/Source/DataSources/DataSource" { import { DataSource } from 'cesium'; export default DataSource; } +declare module "cesium/Source/DataSources/DataSourceClock" { import { DataSourceClock } from 'cesium'; export default DataSourceClock; } +declare module "cesium/Source/DataSources/DataSourceCollection" { import { DataSourceCollection } from 'cesium'; export default DataSourceCollection; } +declare module "cesium/Source/DataSources/DataSourceDisplay" { import { DataSourceDisplay } from 'cesium'; export default DataSourceDisplay; } +declare module "cesium/Source/DataSources/EllipseGeometryUpdater" { import { EllipseGeometryUpdater } from 'cesium'; export default EllipseGeometryUpdater; } +declare module "cesium/Source/DataSources/EllipseGraphics" { import { EllipseGraphics } from 'cesium'; export default EllipseGraphics; } +declare module "cesium/Source/DataSources/EllipsoidGeometryUpdater" { import { EllipsoidGeometryUpdater } from 'cesium'; export default EllipsoidGeometryUpdater; } +declare module "cesium/Source/DataSources/EllipsoidGraphics" { import { EllipsoidGraphics } from 'cesium'; export default EllipsoidGraphics; } +declare module "cesium/Source/DataSources/Entity" { import { Entity } from 'cesium'; export default Entity; } +declare module "cesium/Source/DataSources/EntityCluster" { import { EntityCluster } from 'cesium'; export default EntityCluster; } +declare module "cesium/Source/DataSources/EntityCollection" { import { EntityCollection } from 'cesium'; export default EntityCollection; } +declare module "cesium/Source/DataSources/EntityView" { import { EntityView } from 'cesium'; export default EntityView; } +declare module "cesium/Source/DataSources/exportKml" { import { exportKml } from 'cesium'; export default exportKml; } +declare module "cesium/Source/DataSources/GeoJsonDataSource" { import { GeoJsonDataSource } from 'cesium'; export default GeoJsonDataSource; } +declare module "cesium/Source/DataSources/GeometryUpdater" { import { GeometryUpdater } from 'cesium'; export default GeometryUpdater; } +declare module "cesium/Source/DataSources/GeometryVisualizer" { import { GeometryVisualizer } from 'cesium'; export default GeometryVisualizer; } +declare module "cesium/Source/DataSources/GridMaterialProperty" { import { GridMaterialProperty } from 'cesium'; export default GridMaterialProperty; } +declare module "cesium/Source/DataSources/GroundGeometryUpdater" { import { GroundGeometryUpdater } from 'cesium'; export default GroundGeometryUpdater; } +declare module "cesium/Source/DataSources/ImageMaterialProperty" { import { ImageMaterialProperty } from 'cesium'; export default ImageMaterialProperty; } +declare module "cesium/Source/DataSources/KmlCamera" { import { KmlCamera } from 'cesium'; export default KmlCamera; } +declare module "cesium/Source/DataSources/KmlDataSource" { import { KmlDataSource } from 'cesium'; export default KmlDataSource; } +declare module "cesium/Source/DataSources/KmlLookAt" { import { KmlLookAt } from 'cesium'; export default KmlLookAt; } +declare module "cesium/Source/DataSources/KmlTour" { import { KmlTour } from 'cesium'; export default KmlTour; } +declare module "cesium/Source/DataSources/KmlTourFlyTo" { import { KmlTourFlyTo } from 'cesium'; export default KmlTourFlyTo; } +declare module "cesium/Source/DataSources/KmlTourWait" { import { KmlTourWait } from 'cesium'; export default KmlTourWait; } +declare module "cesium/Source/DataSources/LabelGraphics" { import { LabelGraphics } from 'cesium'; export default LabelGraphics; } +declare module "cesium/Source/DataSources/LabelVisualizer" { import { LabelVisualizer } from 'cesium'; export default LabelVisualizer; } +declare module "cesium/Source/DataSources/MaterialProperty" { import { MaterialProperty } from 'cesium'; export default MaterialProperty; } +declare module "cesium/Source/DataSources/ModelGraphics" { import { ModelGraphics } from 'cesium'; export default ModelGraphics; } +declare module "cesium/Source/DataSources/ModelVisualizer" { import { ModelVisualizer } from 'cesium'; export default ModelVisualizer; } +declare module "cesium/Source/DataSources/NodeTransformationProperty" { import { NodeTransformationProperty } from 'cesium'; export default NodeTransformationProperty; } +declare module "cesium/Source/DataSources/PathGraphics" { import { PathGraphics } from 'cesium'; export default PathGraphics; } +declare module "cesium/Source/DataSources/PathVisualizer" { import { PathVisualizer } from 'cesium'; export default PathVisualizer; } +declare module "cesium/Source/DataSources/PlaneGeometryUpdater" { import { PlaneGeometryUpdater } from 'cesium'; export default PlaneGeometryUpdater; } +declare module "cesium/Source/DataSources/PlaneGraphics" { import { PlaneGraphics } from 'cesium'; export default PlaneGraphics; } +declare module "cesium/Source/DataSources/PointGraphics" { import { PointGraphics } from 'cesium'; export default PointGraphics; } +declare module "cesium/Source/DataSources/PointVisualizer" { import { PointVisualizer } from 'cesium'; export default PointVisualizer; } +declare module "cesium/Source/DataSources/PolygonGeometryUpdater" { import { PolygonGeometryUpdater } from 'cesium'; export default PolygonGeometryUpdater; } +declare module "cesium/Source/DataSources/PolygonGraphics" { import { PolygonGraphics } from 'cesium'; export default PolygonGraphics; } +declare module "cesium/Source/DataSources/PolylineArrowMaterialProperty" { import { PolylineArrowMaterialProperty } from 'cesium'; export default PolylineArrowMaterialProperty; } +declare module "cesium/Source/DataSources/PolylineDashMaterialProperty" { import { PolylineDashMaterialProperty } from 'cesium'; export default PolylineDashMaterialProperty; } +declare module "cesium/Source/DataSources/PolylineGeometryUpdater" { import { PolylineGeometryUpdater } from 'cesium'; export default PolylineGeometryUpdater; } +declare module "cesium/Source/DataSources/PolylineGlowMaterialProperty" { import { PolylineGlowMaterialProperty } from 'cesium'; export default PolylineGlowMaterialProperty; } +declare module "cesium/Source/DataSources/PolylineGraphics" { import { PolylineGraphics } from 'cesium'; export default PolylineGraphics; } +declare module "cesium/Source/DataSources/PolylineOutlineMaterialProperty" { import { PolylineOutlineMaterialProperty } from 'cesium'; export default PolylineOutlineMaterialProperty; } +declare module "cesium/Source/DataSources/PolylineVisualizer" { import { PolylineVisualizer } from 'cesium'; export default PolylineVisualizer; } +declare module "cesium/Source/DataSources/PolylineVolumeGeometryUpdater" { import { PolylineVolumeGeometryUpdater } from 'cesium'; export default PolylineVolumeGeometryUpdater; } +declare module "cesium/Source/DataSources/PolylineVolumeGraphics" { import { PolylineVolumeGraphics } from 'cesium'; export default PolylineVolumeGraphics; } +declare module "cesium/Source/DataSources/PositionProperty" { import { PositionProperty } from 'cesium'; export default PositionProperty; } +declare module "cesium/Source/DataSources/PositionPropertyArray" { import { PositionPropertyArray } from 'cesium'; export default PositionPropertyArray; } +declare module "cesium/Source/DataSources/Property" { import { Property } from 'cesium'; export default Property; } +declare module "cesium/Source/DataSources/PropertyArray" { import { PropertyArray } from 'cesium'; export default PropertyArray; } +declare module "cesium/Source/DataSources/PropertyBag" { import { PropertyBag } from 'cesium'; export default PropertyBag; } +declare module "cesium/Source/DataSources/RectangleGeometryUpdater" { import { RectangleGeometryUpdater } from 'cesium'; export default RectangleGeometryUpdater; } +declare module "cesium/Source/DataSources/RectangleGraphics" { import { RectangleGraphics } from 'cesium'; export default RectangleGraphics; } +declare module "cesium/Source/DataSources/ReferenceProperty" { import { ReferenceProperty } from 'cesium'; export default ReferenceProperty; } +declare module "cesium/Source/DataSources/Rotation" { import { Rotation } from 'cesium'; export default Rotation; } +declare module "cesium/Source/DataSources/SampledPositionProperty" { import { SampledPositionProperty } from 'cesium'; export default SampledPositionProperty; } +declare module "cesium/Source/DataSources/SampledProperty" { import { SampledProperty } from 'cesium'; export default SampledProperty; } +declare module "cesium/Source/DataSources/StripeMaterialProperty" { import { StripeMaterialProperty } from 'cesium'; export default StripeMaterialProperty; } +declare module "cesium/Source/DataSources/StripeOrientation" { import { StripeOrientation } from 'cesium'; export default StripeOrientation; } +declare module "cesium/Source/DataSources/TimeIntervalCollectionPositionProperty" { import { TimeIntervalCollectionPositionProperty } from 'cesium'; export default TimeIntervalCollectionPositionProperty; } +declare module "cesium/Source/DataSources/TimeIntervalCollectionProperty" { import { TimeIntervalCollectionProperty } from 'cesium'; export default TimeIntervalCollectionProperty; } +declare module "cesium/Source/DataSources/VelocityOrientationProperty" { import { VelocityOrientationProperty } from 'cesium'; export default VelocityOrientationProperty; } +declare module "cesium/Source/DataSources/VelocityVectorProperty" { import { VelocityVectorProperty } from 'cesium'; export default VelocityVectorProperty; } +declare module "cesium/Source/DataSources/Visualizer" { import { Visualizer } from 'cesium'; export default Visualizer; } +declare module "cesium/Source/DataSources/WallGeometryUpdater" { import { WallGeometryUpdater } from 'cesium'; export default WallGeometryUpdater; } +declare module "cesium/Source/DataSources/WallGraphics" { import { WallGraphics } from 'cesium'; export default WallGraphics; } +declare module "cesium/Source/Renderer/PixelDatatype" { import { PixelDatatype } from 'cesium'; export default PixelDatatype; } +declare module "cesium/Source/Renderer/TextureMagnificationFilter" { import { TextureMagnificationFilter } from 'cesium'; export default TextureMagnificationFilter; } +declare module "cesium/Source/Renderer/TextureMinificationFilter" { import { TextureMinificationFilter } from 'cesium'; export default TextureMinificationFilter; } +declare module "cesium/Source/Scene/Appearance" { import { Appearance } from 'cesium'; export default Appearance; } +declare module "cesium/Source/Scene/ArcGisMapServerImageryProvider" { import { ArcGisMapServerImageryProvider } from 'cesium'; export default ArcGisMapServerImageryProvider; } +declare module "cesium/Source/Scene/Axis" { import { Axis } from 'cesium'; export default Axis; } +declare module "cesium/Source/Scene/Billboard" { import { Billboard } from 'cesium'; export default Billboard; } +declare module "cesium/Source/Scene/BillboardCollection" { import { BillboardCollection } from 'cesium'; export default BillboardCollection; } +declare module "cesium/Source/Scene/BingMapsImageryProvider" { import { BingMapsImageryProvider } from 'cesium'; export default BingMapsImageryProvider; } +declare module "cesium/Source/Scene/BingMapsStyle" { import { BingMapsStyle } from 'cesium'; export default BingMapsStyle; } +declare module "cesium/Source/Scene/BlendEquation" { import { BlendEquation } from 'cesium'; export default BlendEquation; } +declare module "cesium/Source/Scene/BlendFunction" { import { BlendFunction } from 'cesium'; export default BlendFunction; } +declare module "cesium/Source/Scene/BlendingState" { import { BlendingState } from 'cesium'; export default BlendingState; } +declare module "cesium/Source/Scene/BlendOption" { import { BlendOption } from 'cesium'; export default BlendOption; } +declare module "cesium/Source/Scene/BoxEmitter" { import { BoxEmitter } from 'cesium'; export default BoxEmitter; } +declare module "cesium/Source/Scene/Camera" { import { Camera } from 'cesium'; export default Camera; } +declare module "cesium/Source/Scene/CameraEventAggregator" { import { CameraEventAggregator } from 'cesium'; export default CameraEventAggregator; } +declare module "cesium/Source/Scene/CameraEventType" { import { CameraEventType } from 'cesium'; export default CameraEventType; } +declare module "cesium/Source/Scene/Cesium3DTile" { import { Cesium3DTile } from 'cesium'; export default Cesium3DTile; } +declare module "cesium/Source/Scene/Cesium3DTileColorBlendMode" { import { Cesium3DTileColorBlendMode } from 'cesium'; export default Cesium3DTileColorBlendMode; } +declare module "cesium/Source/Scene/Cesium3DTileContent" { import { Cesium3DTileContent } from 'cesium'; export default Cesium3DTileContent; } +declare module "cesium/Source/Scene/Cesium3DTileFeature" { import { Cesium3DTileFeature } from 'cesium'; export default Cesium3DTileFeature; } +declare module "cesium/Source/Scene/Cesium3DTilePointFeature" { import { Cesium3DTilePointFeature } from 'cesium'; export default Cesium3DTilePointFeature; } +declare module "cesium/Source/Scene/Cesium3DTileset" { import { Cesium3DTileset } from 'cesium'; export default Cesium3DTileset; } +declare module "cesium/Source/Scene/Cesium3DTileStyle" { import { Cesium3DTileStyle } from 'cesium'; export default Cesium3DTileStyle; } +declare module "cesium/Source/Scene/CircleEmitter" { import { CircleEmitter } from 'cesium'; export default CircleEmitter; } +declare module "cesium/Source/Scene/ClassificationPrimitive" { import { ClassificationPrimitive } from 'cesium'; export default ClassificationPrimitive; } +declare module "cesium/Source/Scene/ClassificationType" { import { ClassificationType } from 'cesium'; export default ClassificationType; } +declare module "cesium/Source/Scene/ClippingPlane" { import { ClippingPlane } from 'cesium'; export default ClippingPlane; } +declare module "cesium/Source/Scene/ClippingPlaneCollection" { import { ClippingPlaneCollection } from 'cesium'; export default ClippingPlaneCollection; } +declare module "cesium/Source/Scene/ColorBlendMode" { import { ColorBlendMode } from 'cesium'; export default ColorBlendMode; } +declare module "cesium/Source/Scene/ConditionsExpression" { import { ConditionsExpression } from 'cesium'; export default ConditionsExpression; } +declare module "cesium/Source/Scene/ConeEmitter" { import { ConeEmitter } from 'cesium'; export default ConeEmitter; } +declare module "cesium/Source/Scene/createElevationBandMaterial" { import { createElevationBandMaterial } from 'cesium'; export default createElevationBandMaterial; } +declare module "cesium/Source/Scene/createOsmBuildings" { import { createOsmBuildings } from 'cesium'; export default createOsmBuildings; } +declare module "cesium/Source/Scene/createTangentSpaceDebugPrimitive" { import { createTangentSpaceDebugPrimitive } from 'cesium'; export default createTangentSpaceDebugPrimitive; } +declare module "cesium/Source/Scene/createWorldImagery" { import { createWorldImagery } from 'cesium'; export default createWorldImagery; } +declare module "cesium/Source/Scene/CreditDisplay" { import { CreditDisplay } from 'cesium'; export default CreditDisplay; } +declare module "cesium/Source/Scene/CullFace" { import { CullFace } from 'cesium'; export default CullFace; } +declare module "cesium/Source/Scene/DebugAppearance" { import { DebugAppearance } from 'cesium'; export default DebugAppearance; } +declare module "cesium/Source/Scene/DebugCameraPrimitive" { import { DebugCameraPrimitive } from 'cesium'; export default DebugCameraPrimitive; } +declare module "cesium/Source/Scene/DebugModelMatrixPrimitive" { import { DebugModelMatrixPrimitive } from 'cesium'; export default DebugModelMatrixPrimitive; } +declare module "cesium/Source/Scene/DepthFunction" { import { DepthFunction } from 'cesium'; export default DepthFunction; } +declare module "cesium/Source/Scene/DirectionalLight" { import { DirectionalLight } from 'cesium'; export default DirectionalLight; } +declare module "cesium/Source/Scene/DiscardEmptyTileImagePolicy" { import { DiscardEmptyTileImagePolicy } from 'cesium'; export default DiscardEmptyTileImagePolicy; } +declare module "cesium/Source/Scene/DiscardMissingTileImagePolicy" { import { DiscardMissingTileImagePolicy } from 'cesium'; export default DiscardMissingTileImagePolicy; } +declare module "cesium/Source/Scene/EllipsoidSurfaceAppearance" { import { EllipsoidSurfaceAppearance } from 'cesium'; export default EllipsoidSurfaceAppearance; } +declare module "cesium/Source/Scene/Expression" { import { Expression } from 'cesium'; export default Expression; } +declare module "cesium/Source/Scene/Fog" { import { Fog } from 'cesium'; export default Fog; } +declare module "cesium/Source/Scene/FrameRateMonitor" { import { FrameRateMonitor } from 'cesium'; export default FrameRateMonitor; } +declare module "cesium/Source/Scene/GetFeatureInfoFormat" { import { GetFeatureInfoFormat } from 'cesium'; export default GetFeatureInfoFormat; } +declare module "cesium/Source/Scene/Globe" { import { Globe } from 'cesium'; export default Globe; } +declare module "cesium/Source/Scene/GlobeTranslucency" { import { GlobeTranslucency } from 'cesium'; export default GlobeTranslucency; } +declare module "cesium/Source/Scene/GoogleEarthEnterpriseImageryProvider" { import { GoogleEarthEnterpriseImageryProvider } from 'cesium'; export default GoogleEarthEnterpriseImageryProvider; } +declare module "cesium/Source/Scene/GoogleEarthEnterpriseMapsProvider" { import { GoogleEarthEnterpriseMapsProvider } from 'cesium'; export default GoogleEarthEnterpriseMapsProvider; } +declare module "cesium/Source/Scene/GridImageryProvider" { import { GridImageryProvider } from 'cesium'; export default GridImageryProvider; } +declare module "cesium/Source/Scene/GroundPolylinePrimitive" { import { GroundPolylinePrimitive } from 'cesium'; export default GroundPolylinePrimitive; } +declare module "cesium/Source/Scene/GroundPrimitive" { import { GroundPrimitive } from 'cesium'; export default GroundPrimitive; } +declare module "cesium/Source/Scene/HeightReference" { import { HeightReference } from 'cesium'; export default HeightReference; } +declare module "cesium/Source/Scene/HorizontalOrigin" { import { HorizontalOrigin } from 'cesium'; export default HorizontalOrigin; } +declare module "cesium/Source/Scene/ImageryLayer" { import { ImageryLayer } from 'cesium'; export default ImageryLayer; } +declare module "cesium/Source/Scene/ImageryLayerCollection" { import { ImageryLayerCollection } from 'cesium'; export default ImageryLayerCollection; } +declare module "cesium/Source/Scene/ImageryLayerFeatureInfo" { import { ImageryLayerFeatureInfo } from 'cesium'; export default ImageryLayerFeatureInfo; } +declare module "cesium/Source/Scene/ImageryProvider" { import { ImageryProvider } from 'cesium'; export default ImageryProvider; } +declare module "cesium/Source/Scene/ImagerySplitDirection" { import { ImagerySplitDirection } from 'cesium'; export default ImagerySplitDirection; } +declare module "cesium/Source/Scene/IonImageryProvider" { import { IonImageryProvider } from 'cesium'; export default IonImageryProvider; } +declare module "cesium/Source/Scene/IonWorldImageryStyle" { import { IonWorldImageryStyle } from 'cesium'; export default IonWorldImageryStyle; } +declare module "cesium/Source/Scene/Label" { import { Label } from 'cesium'; export default Label; } +declare module "cesium/Source/Scene/LabelCollection" { import { LabelCollection } from 'cesium'; export default LabelCollection; } +declare module "cesium/Source/Scene/LabelStyle" { import { LabelStyle } from 'cesium'; export default LabelStyle; } +declare module "cesium/Source/Scene/Light" { import { Light } from 'cesium'; export default Light; } +declare module "cesium/Source/Scene/MapboxImageryProvider" { import { MapboxImageryProvider } from 'cesium'; export default MapboxImageryProvider; } +declare module "cesium/Source/Scene/MapboxStyleImageryProvider" { import { MapboxStyleImageryProvider } from 'cesium'; export default MapboxStyleImageryProvider; } +declare module "cesium/Source/Scene/MapMode2D" { import { MapMode2D } from 'cesium'; export default MapMode2D; } +declare module "cesium/Source/Scene/Material" { import { Material } from 'cesium'; export default Material; } +declare module "cesium/Source/Scene/MaterialAppearance" { import { MaterialAppearance } from 'cesium'; export default MaterialAppearance; } +declare module "cesium/Source/Scene/Model" { import { Model } from 'cesium'; export default Model; } +declare module "cesium/Source/Scene/ModelAnimation" { import { ModelAnimation } from 'cesium'; export default ModelAnimation; } +declare module "cesium/Source/Scene/ModelAnimationCollection" { import { ModelAnimationCollection } from 'cesium'; export default ModelAnimationCollection; } +declare module "cesium/Source/Scene/ModelAnimationLoop" { import { ModelAnimationLoop } from 'cesium'; export default ModelAnimationLoop; } +declare module "cesium/Source/Scene/ModelMaterial" { import { ModelMaterial } from 'cesium'; export default ModelMaterial; } +declare module "cesium/Source/Scene/ModelMesh" { import { ModelMesh } from 'cesium'; export default ModelMesh; } +declare module "cesium/Source/Scene/ModelNode" { import { ModelNode } from 'cesium'; export default ModelNode; } +declare module "cesium/Source/Scene/Moon" { import { Moon } from 'cesium'; export default Moon; } +declare module "cesium/Source/Scene/NeverTileDiscardPolicy" { import { NeverTileDiscardPolicy } from 'cesium'; export default NeverTileDiscardPolicy; } +declare module "cesium/Source/Scene/OpenStreetMapImageryProvider" { import { OpenStreetMapImageryProvider } from 'cesium'; export default OpenStreetMapImageryProvider; } +declare module "cesium/Source/Scene/Particle" { import { Particle } from 'cesium'; export default Particle; } +declare module "cesium/Source/Scene/ParticleBurst" { import { ParticleBurst } from 'cesium'; export default ParticleBurst; } +declare module "cesium/Source/Scene/ParticleEmitter" { import { ParticleEmitter } from 'cesium'; export default ParticleEmitter; } +declare module "cesium/Source/Scene/ParticleSystem" { import { ParticleSystem } from 'cesium'; export default ParticleSystem; } +declare module "cesium/Source/Scene/PerInstanceColorAppearance" { import { PerInstanceColorAppearance } from 'cesium'; export default PerInstanceColorAppearance; } +declare module "cesium/Source/Scene/PointCloudShading" { import { PointCloudShading } from 'cesium'; export default PointCloudShading; } +declare module "cesium/Source/Scene/PointPrimitive" { import { PointPrimitive } from 'cesium'; export default PointPrimitive; } +declare module "cesium/Source/Scene/PointPrimitiveCollection" { import { PointPrimitiveCollection } from 'cesium'; export default PointPrimitiveCollection; } +declare module "cesium/Source/Scene/Polyline" { import { Polyline } from 'cesium'; export default Polyline; } +declare module "cesium/Source/Scene/PolylineCollection" { import { PolylineCollection } from 'cesium'; export default PolylineCollection; } +declare module "cesium/Source/Scene/PolylineColorAppearance" { import { PolylineColorAppearance } from 'cesium'; export default PolylineColorAppearance; } +declare module "cesium/Source/Scene/PolylineMaterialAppearance" { import { PolylineMaterialAppearance } from 'cesium'; export default PolylineMaterialAppearance; } +declare module "cesium/Source/Scene/PostProcessStage" { import { PostProcessStage } from 'cesium'; export default PostProcessStage; } +declare module "cesium/Source/Scene/PostProcessStageCollection" { import { PostProcessStageCollection } from 'cesium'; export default PostProcessStageCollection; } +declare module "cesium/Source/Scene/PostProcessStageComposite" { import { PostProcessStageComposite } from 'cesium'; export default PostProcessStageComposite; } +declare module "cesium/Source/Scene/PostProcessStageLibrary" { import { PostProcessStageLibrary } from 'cesium'; export default PostProcessStageLibrary; } +declare module "cesium/Source/Scene/PostProcessStageSampleMode" { import { PostProcessStageSampleMode } from 'cesium'; export default PostProcessStageSampleMode; } +declare module "cesium/Source/Scene/Primitive" { import { Primitive } from 'cesium'; export default Primitive; } +declare module "cesium/Source/Scene/PrimitiveCollection" { import { PrimitiveCollection } from 'cesium'; export default PrimitiveCollection; } +declare module "cesium/Source/Scene/Scene" { import { Scene } from 'cesium'; export default Scene; } +declare module "cesium/Source/Scene/SceneMode" { import { SceneMode } from 'cesium'; export default SceneMode; } +declare module "cesium/Source/Scene/SceneTransforms" { import { SceneTransforms } from 'cesium'; export default SceneTransforms; } +declare module "cesium/Source/Scene/ScreenSpaceCameraController" { import { ScreenSpaceCameraController } from 'cesium'; export default ScreenSpaceCameraController; } +declare module "cesium/Source/Scene/ShadowMap" { import { ShadowMap } from 'cesium'; export default ShadowMap; } +declare module "cesium/Source/Scene/ShadowMode" { import { ShadowMode } from 'cesium'; export default ShadowMode; } +declare module "cesium/Source/Scene/SingleTileImageryProvider" { import { SingleTileImageryProvider } from 'cesium'; export default SingleTileImageryProvider; } +declare module "cesium/Source/Scene/SkyAtmosphere" { import { SkyAtmosphere } from 'cesium'; export default SkyAtmosphere; } +declare module "cesium/Source/Scene/SkyBox" { import { SkyBox } from 'cesium'; export default SkyBox; } +declare module "cesium/Source/Scene/SphereEmitter" { import { SphereEmitter } from 'cesium'; export default SphereEmitter; } +declare module "cesium/Source/Scene/StencilFunction" { import { StencilFunction } from 'cesium'; export default StencilFunction; } +declare module "cesium/Source/Scene/StencilOperation" { import { StencilOperation } from 'cesium'; export default StencilOperation; } +declare module "cesium/Source/Scene/StyleExpression" { import { StyleExpression } from 'cesium'; export default StyleExpression; } +declare module "cesium/Source/Scene/Sun" { import { Sun } from 'cesium'; export default Sun; } +declare module "cesium/Source/Scene/SunLight" { import { SunLight } from 'cesium'; export default SunLight; } +declare module "cesium/Source/Scene/TileCoordinatesImageryProvider" { import { TileCoordinatesImageryProvider } from 'cesium'; export default TileCoordinatesImageryProvider; } +declare module "cesium/Source/Scene/TileDiscardPolicy" { import { TileDiscardPolicy } from 'cesium'; export default TileDiscardPolicy; } +declare module "cesium/Source/Scene/TileMapServiceImageryProvider" { import { TileMapServiceImageryProvider } from 'cesium'; export default TileMapServiceImageryProvider; } +declare module "cesium/Source/Scene/TimeDynamicImagery" { import { TimeDynamicImagery } from 'cesium'; export default TimeDynamicImagery; } +declare module "cesium/Source/Scene/TimeDynamicPointCloud" { import { TimeDynamicPointCloud } from 'cesium'; export default TimeDynamicPointCloud; } +declare module "cesium/Source/Scene/UrlTemplateImageryProvider" { import { UrlTemplateImageryProvider } from 'cesium'; export default UrlTemplateImageryProvider; } +declare module "cesium/Source/Scene/VerticalOrigin" { import { VerticalOrigin } from 'cesium'; export default VerticalOrigin; } +declare module "cesium/Source/Scene/ViewportQuad" { import { ViewportQuad } from 'cesium'; export default ViewportQuad; } +declare module "cesium/Source/Scene/WebMapServiceImageryProvider" { import { WebMapServiceImageryProvider } from 'cesium'; export default WebMapServiceImageryProvider; } +declare module "cesium/Source/Scene/WebMapTileServiceImageryProvider" { import { WebMapTileServiceImageryProvider } from 'cesium'; export default WebMapTileServiceImageryProvider; } +declare module "cesium/Source/Widgets/ClockViewModel" { import { ClockViewModel } from 'cesium'; export default ClockViewModel; } +declare module "cesium/Source/Widgets/Command" { import { Command } from 'cesium'; export default Command; } +declare module "cesium/Source/Widgets/createCommand" { import { createCommand } from 'cesium'; export default createCommand; } +declare module "cesium/Source/Widgets/SvgPathBindingHandler" { import { SvgPathBindingHandler } from 'cesium'; export default SvgPathBindingHandler; } +declare module "cesium/Source/Widgets/ToggleButtonViewModel" { import { ToggleButtonViewModel } from 'cesium'; export default ToggleButtonViewModel; } +declare module "cesium/Source/Widgets/Animation/Animation" { import { Animation } from 'cesium'; export default Animation; } +declare module "cesium/Source/Widgets/Animation/AnimationViewModel" { import { AnimationViewModel } from 'cesium'; export default AnimationViewModel; } +declare module "cesium/Source/Widgets/BaseLayerPicker/BaseLayerPicker" { import { BaseLayerPicker } from 'cesium'; export default BaseLayerPicker; } +declare module "cesium/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel" { import { BaseLayerPickerViewModel } from 'cesium'; export default BaseLayerPickerViewModel; } +declare module "cesium/Source/Widgets/BaseLayerPicker/ProviderViewModel" { import { ProviderViewModel } from 'cesium'; export default ProviderViewModel; } +declare module "cesium/Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector" { import { Cesium3DTilesInspector } from 'cesium'; export default Cesium3DTilesInspector; } +declare module "cesium/Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel" { import { Cesium3DTilesInspectorViewModel } from 'cesium'; export default Cesium3DTilesInspectorViewModel; } +declare module "cesium/Source/Widgets/CesiumInspector/CesiumInspector" { import { CesiumInspector } from 'cesium'; export default CesiumInspector; } +declare module "cesium/Source/Widgets/CesiumInspector/CesiumInspectorViewModel" { import { CesiumInspectorViewModel } from 'cesium'; export default CesiumInspectorViewModel; } +declare module "cesium/Source/Widgets/CesiumWidget/CesiumWidget" { import { CesiumWidget } from 'cesium'; export default CesiumWidget; } +declare module "cesium/Source/Widgets/FullscreenButton/FullscreenButton" { import { FullscreenButton } from 'cesium'; export default FullscreenButton; } +declare module "cesium/Source/Widgets/FullscreenButton/FullscreenButtonViewModel" { import { FullscreenButtonViewModel } from 'cesium'; export default FullscreenButtonViewModel; } +declare module "cesium/Source/Widgets/Geocoder/Geocoder" { import { Geocoder } from 'cesium'; export default Geocoder; } +declare module "cesium/Source/Widgets/Geocoder/GeocoderViewModel" { import { GeocoderViewModel } from 'cesium'; export default GeocoderViewModel; } +declare module "cesium/Source/Widgets/HomeButton/HomeButton" { import { HomeButton } from 'cesium'; export default HomeButton; } +declare module "cesium/Source/Widgets/HomeButton/HomeButtonViewModel" { import { HomeButtonViewModel } from 'cesium'; export default HomeButtonViewModel; } +declare module "cesium/Source/Widgets/InfoBox/InfoBox" { import { InfoBox } from 'cesium'; export default InfoBox; } +declare module "cesium/Source/Widgets/InfoBox/InfoBoxViewModel" { import { InfoBoxViewModel } from 'cesium'; export default InfoBoxViewModel; } +declare module "cesium/Source/Widgets/NavigationHelpButton/NavigationHelpButton" { import { NavigationHelpButton } from 'cesium'; export default NavigationHelpButton; } +declare module "cesium/Source/Widgets/NavigationHelpButton/NavigationHelpButtonViewModel" { import { NavigationHelpButtonViewModel } from 'cesium'; export default NavigationHelpButtonViewModel; } +declare module "cesium/Source/Widgets/PerformanceWatchdog/PerformanceWatchdog" { import { PerformanceWatchdog } from 'cesium'; export default PerformanceWatchdog; } +declare module "cesium/Source/Widgets/PerformanceWatchdog/PerformanceWatchdogViewModel" { import { PerformanceWatchdogViewModel } from 'cesium'; export default PerformanceWatchdogViewModel; } +declare module "cesium/Source/Widgets/ProjectionPicker/ProjectionPicker" { import { ProjectionPicker } from 'cesium'; export default ProjectionPicker; } +declare module "cesium/Source/Widgets/ProjectionPicker/ProjectionPickerViewModel" { import { ProjectionPickerViewModel } from 'cesium'; export default ProjectionPickerViewModel; } +declare module "cesium/Source/Widgets/SceneModePicker/SceneModePicker" { import { SceneModePicker } from 'cesium'; export default SceneModePicker; } +declare module "cesium/Source/Widgets/SceneModePicker/SceneModePickerViewModel" { import { SceneModePickerViewModel } from 'cesium'; export default SceneModePickerViewModel; } +declare module "cesium/Source/Widgets/SelectionIndicator/SelectionIndicator" { import { SelectionIndicator } from 'cesium'; export default SelectionIndicator; } +declare module "cesium/Source/Widgets/SelectionIndicator/SelectionIndicatorViewModel" { import { SelectionIndicatorViewModel } from 'cesium'; export default SelectionIndicatorViewModel; } +declare module "cesium/Source/Widgets/Timeline/Timeline" { import { Timeline } from 'cesium'; export default Timeline; } +declare module "cesium/Source/Widgets/Viewer/Viewer" { import { Viewer } from 'cesium'; export default Viewer; } +declare module "cesium/Source/Widgets/Viewer/viewerCesium3DTilesInspectorMixin" { import { viewerCesium3DTilesInspectorMixin } from 'cesium'; export default viewerCesium3DTilesInspectorMixin; } +declare module "cesium/Source/Widgets/Viewer/viewerCesiumInspectorMixin" { import { viewerCesiumInspectorMixin } from 'cesium'; export default viewerCesiumInspectorMixin; } +declare module "cesium/Source/Widgets/Viewer/viewerDragDropMixin" { import { viewerDragDropMixin } from 'cesium'; export default viewerDragDropMixin; } +declare module "cesium/Source/Widgets/Viewer/viewerPerformanceWatchdogMixin" { import { viewerPerformanceWatchdogMixin } from 'cesium'; export default viewerPerformanceWatchdogMixin; } +declare module "cesium/Source/Widgets/VRButton/VRButton" { import { VRButton } from 'cesium'; export default VRButton; } +declare module "cesium/Source/Widgets/VRButton/VRButtonViewModel" { import { VRButtonViewModel } from 'cesium'; export default VRButtonViewModel; } diff --git a/public/lib/Cesium/Cesium.js b/public/lib/Cesium/Cesium.js new file mode 100644 index 0000000..f30c7e5 --- /dev/null +++ b/public/lib/Cesium/Cesium.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Cesium={})}(this,function(exports){"use strict";function appendForwardSlash(e){return 0!==e.length&&"/"===e[e.length-1]||(e+="/"),e}function defined(e){return null!=e}function DeveloperError(e){var t;this.name="DeveloperError",this.message=e;try{throw new Error}catch(e){t=e.stack}this.stack=t}defined(Object.create)&&(DeveloperError.prototype=Object.create(Error.prototype),DeveloperError.prototype.constructor=DeveloperError),DeveloperError.prototype.toString=function(){var e=this.name+": "+this.message;return defined(this.stack)&&(e+="\n"+this.stack.toString()),e},DeveloperError.throwInstantiationError=function(){throw new DeveloperError("This function defines an interface and should not be called directly.")};var Check={};function getUndefinedErrorMessage(e){return e+" is required, actual value was undefined"}function getFailedTypeErrorMessage(e,t,i){return"Expected "+i+" to be typeof "+t+", actual typeof was "+e}function defaultValue(e,t){return null!=e?e:t}function MersenneTwister(e){null==e&&(e=(new Date).getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)}Check.typeOf={},Check.defined=function(e,t){if(!defined(t))throw new DeveloperError(getUndefinedErrorMessage(e))},Check.typeOf.func=function(e,t){if("function"!=typeof t)throw new DeveloperError(getFailedTypeErrorMessage(typeof t,"function",e))},Check.typeOf.string=function(e,t){if("string"!=typeof t)throw new DeveloperError(getFailedTypeErrorMessage(typeof t,"string",e))},Check.typeOf.number=function(e,t){if("number"!=typeof t)throw new DeveloperError(getFailedTypeErrorMessage(typeof t,"number",e))},Check.typeOf.number.lessThan=function(e,t,i){if(Check.typeOf.number(e,t),i<=t)throw new DeveloperError("Expected "+e+" to be less than "+i+", actual value was "+t)},Check.typeOf.number.lessThanOrEquals=function(e,t,i){if(Check.typeOf.number(e,t),i>>0,this.mti=1;this.mti>>30;this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0}},MersenneTwister.prototype.genrand_int32=function(){var e,t,i=new Array(0,this.MATRIX_A);if(this.mti>=this.N){for(this.mti==this.N+1&&this.init_genrand(5489),t=0;t>>1^i[1&e];for(;t>>1^i[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^i[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,(e^=e>>>18)>>>0},MersenneTwister.prototype.random=function(){return this.genrand_int32()*(1/4294967296)};var CesiumMath={EPSILON1:.1,EPSILON2:.01,EPSILON3:.001,EPSILON4:1e-4,EPSILON5:1e-5,EPSILON6:1e-6,EPSILON7:1e-7,EPSILON8:1e-8,EPSILON9:1e-9,EPSILON10:1e-10,EPSILON11:1e-11,EPSILON12:1e-12,EPSILON13:1e-13,EPSILON14:1e-14,EPSILON15:1e-15,EPSILON16:1e-16,EPSILON17:1e-17,EPSILON18:1e-18,EPSILON19:1e-19,EPSILON20:1e-20,EPSILON21:1e-21,GRAVITATIONALPARAMETER:3986004418e5,SOLAR_RADIUS:6955e5,LUNAR_RADIUS:1737400,SIXTY_FOUR_KILOBYTES:65536,FOUR_GIGABYTES:4294967296};CesiumMath.sign=defaultValue(Math.sign,function(e){return 0===(e=+e)||e!=e?e:0=Math.PI?e-t:e},CesiumMath.clampToLatitudeRange=function(e){return CesiumMath.clamp(e,-1*CesiumMath.PI_OVER_TWO,CesiumMath.PI_OVER_TWO)},CesiumMath.negativePiToPi=function(e){return e>=-CesiumMath.PI&&e<=CesiumMath.PI?e:CesiumMath.zeroToTwoPi(e+CesiumMath.PI)-CesiumMath.PI},CesiumMath.zeroToTwoPi=function(e){if(0<=e&&e<=CesiumMath.TWO_PI)return e;var t=CesiumMath.mod(e,CesiumMath.TWO_PI);return Math.abs(t)CesiumMath.EPSILON14?CesiumMath.TWO_PI:t},CesiumMath.mod=function(e,t){return CesiumMath.sign(e)===CesiumMath.sign(t)&&Math.abs(e)>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},CesiumMath.previousPowerOfTwo=function(e){return e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e=((e|=e>>32)>>>0)-(e>>>1)},CesiumMath.clamp=function(e,t,i){return eMath.abs(e)?CesiumMath.PI_OVER_TWO-i:i,i=e<0?CesiumMath.PI-i:i,i=t<0?-i:i},Cartesian3.fromSpherical=function(e,t){defined(t)||(t=new Cartesian3);var i=e.clock,r=e.cone,n=defaultValue(e.magnitude,1),e=n*Math.sin(r);return t.x=e*Math.cos(i),t.y=e*Math.sin(i),t.z=n*Math.cos(r),t},Cartesian3.fromElements=function(e,t,i,r){return defined(r)?(r.x=e,r.y=t,r.z=i,r):new Cartesian3(e,t,i)},Cartesian3.clone=function(e,t){if(defined(e))return defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new Cartesian3(e.x,e.y,e.z)},Cartesian3.fromCartesian4=Cartesian3.clone,Cartesian3.packedLength=3,Cartesian3.pack=function(e,t,i){return i=defaultValue(i,0),t[i++]=e.x,t[i++]=e.y,t[i]=e.z,t},Cartesian3.unpack=function(e,t,i){return t=defaultValue(t,0),(i=!defined(i)?new Cartesian3:i).x=e[t++],i.y=e[t++],i.z=e[t],i},Cartesian3.packArray=function(e,t){var i=e.length,r=3*i;if(defined(t)){if(!Array.isArray(t)&&t.length!==r)throw new DeveloperError("If result is a typed array, it must have exactly array.length * 3 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var n=0;nCesiumMath.EPSILON12);return defined(n)?(n.x=a*y,n.y=o*C,n.z=s*v,n):new Cartesian3(a*y,o*C,s*v)}function Cartographic(e,t,i){this.longitude=defaultValue(e,0),this.latitude=defaultValue(t,0),this.height=defaultValue(i,0)}Cartographic.fromRadians=function(e,t,i,r){return i=defaultValue(i,0),defined(r)?(r.longitude=e,r.latitude=t,r.height=i,r):new Cartographic(e,t,i)},Cartographic.fromDegrees=function(e,t,i,r){return e=CesiumMath.toRadians(e),t=CesiumMath.toRadians(t),Cartographic.fromRadians(e,t,i,r)};var cartesianToCartographicN$1=new Cartesian3,cartesianToCartographicP$1=new Cartesian3,cartesianToCartographicH$1=new Cartesian3,wgs84OneOverRadii=new Cartesian3(1/6378137,1/6378137,1/6356752.314245179),wgs84OneOverRadiiSquared=new Cartesian3(1/40680631590769,1/40680631590769,1/40408299984661.445),wgs84CenterToleranceSquared=CesiumMath.EPSILON1;function initialize$8(e,t,i,r){t=defaultValue(t,0),i=defaultValue(i,0),r=defaultValue(r,0),e._radii=new Cartesian3(t,i,r),e._radiiSquared=new Cartesian3(t*t,i*i,r*r),e._radiiToTheFourth=new Cartesian3(t*t*t*t,i*i*i*i,r*r*r*r),e._oneOverRadii=new Cartesian3(0===t?0:1/t,0===i?0:1/i,0===r?0:1/r),e._oneOverRadiiSquared=new Cartesian3(0===t?0:1/(t*t),0===i?0:1/(i*i),0===r?0:1/(r*r)),e._minimumRadius=Math.min(t,i,r),e._maximumRadius=Math.max(t,i,r),e._centerToleranceSquared=CesiumMath.EPSILON1,0!==e._radiiSquared.z&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function Ellipsoid(e,t,i){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,initialize$8(this,e,t,i)}Cartographic.fromCartesian=function(e,t,i){var r=defined(t)?t.oneOverRadii:wgs84OneOverRadii,n=defined(t)?t.oneOverRadiiSquared:wgs84OneOverRadiiSquared,r=scaleToGeodeticSurface(e,r,n,defined(t)?t._centerToleranceSquared:wgs84CenterToleranceSquared,cartesianToCartographicP$1);if(defined(r)){t=Cartesian3.multiplyComponents(r,n,cartesianToCartographicN$1),t=Cartesian3.normalize(t,t),n=Cartesian3.subtract(e,r,cartesianToCartographicH$1),r=Math.atan2(t.y,t.x),t=Math.asin(t.z),n=CesiumMath.sign(Cartesian3.dot(n,e))*Cartesian3.magnitude(n);return defined(i)?(i.longitude=r,i.latitude=t,i.height=n,i):new Cartographic(r,t,n)}},Cartographic.toCartesian=function(e,t,i){return Cartesian3.fromRadians(e.longitude,e.latitude,e.height,t,i)},Cartographic.clone=function(e,t){if(defined(e))return defined(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new Cartographic(e.longitude,e.latitude,e.height)},Cartographic.equals=function(e,t){return e===t||defined(e)&&defined(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height},Cartographic.equalsEpsilon=function(e,t,i){return i=defaultValue(i,0),e===t||defined(e)&&defined(t)&&Math.abs(e.longitude-t.longitude)<=i&&Math.abs(e.latitude-t.latitude)<=i&&Math.abs(e.height-t.height)<=i},Cartographic.ZERO=Object.freeze(new Cartographic(0,0,0)),Cartographic.prototype.clone=function(e){return Cartographic.clone(this,e)},Cartographic.prototype.equals=function(e){return Cartographic.equals(this,e)},Cartographic.prototype.equalsEpsilon=function(e,t){return Cartographic.equalsEpsilon(this,e,t)},Cartographic.prototype.toString=function(){return"("+this.longitude+", "+this.latitude+", "+this.height+")"},Object.defineProperties(Ellipsoid.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}}),Ellipsoid.clone=function(e,t){if(defined(e)){var i=e._radii;return defined(t)?(Cartesian3.clone(i,t._radii),Cartesian3.clone(e._radiiSquared,t._radiiSquared),Cartesian3.clone(e._radiiToTheFourth,t._radiiToTheFourth),Cartesian3.clone(e._oneOverRadii,t._oneOverRadii),Cartesian3.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new Ellipsoid(i.x,i.y,i.z)}},Ellipsoid.fromCartesian3=function(e,t){return defined(t)||(t=new Ellipsoid),defined(e)&&initialize$8(t,e.x,e.y,e.z),t},Ellipsoid.WGS84=Object.freeze(new Ellipsoid(6378137,6378137,6356752.314245179)),Ellipsoid.UNIT_SPHERE=Object.freeze(new Ellipsoid(1,1,1)),Ellipsoid.MOON=Object.freeze(new Ellipsoid(CesiumMath.LUNAR_RADIUS,CesiumMath.LUNAR_RADIUS,CesiumMath.LUNAR_RADIUS)),Ellipsoid.prototype.clone=function(e){return Ellipsoid.clone(this,e)},Ellipsoid.packedLength=Cartesian3.packedLength,Ellipsoid.pack=function(e,t,i){return i=defaultValue(i,0),Cartesian3.pack(e._radii,t,i),t},Ellipsoid.unpack=function(e,t,i){t=defaultValue(t,0);t=Cartesian3.unpack(e,t);return Ellipsoid.fromCartesian3(t,i)},Ellipsoid.prototype.geocentricSurfaceNormal=Cartesian3.normalize,Ellipsoid.prototype.geodeticSurfaceNormalCartographic=function(e,t){var i=e.longitude,r=e.latitude,n=Math.cos(r),e=n*Math.cos(i),i=n*Math.sin(i),r=Math.sin(r);return(t=!defined(t)?new Cartesian3:t).x=e,t.y=i,t.z=r,Cartesian3.normalize(t,t)},Ellipsoid.prototype.geodeticSurfaceNormal=function(e,t){if(!Cartesian3.equalsEpsilon(e,Cartesian3.ZERO,CesiumMath.EPSILON14))return defined(t)||(t=new Cartesian3),t=Cartesian3.multiplyComponents(e,this._oneOverRadiiSquared,t),Cartesian3.normalize(t,t)};var cartographicToCartesianNormal=new Cartesian3,cartographicToCartesianK=new Cartesian3;Ellipsoid.prototype.cartographicToCartesian=function(e,t){var i=cartographicToCartesianNormal,r=cartographicToCartesianK;this.geodeticSurfaceNormalCartographic(e,i),Cartesian3.multiplyComponents(this._radiiSquared,i,r);var n=Math.sqrt(Cartesian3.dot(i,r));return Cartesian3.divideByScalar(r,n,r),Cartesian3.multiplyByScalar(i,e.height,i),defined(t)||(t=new Cartesian3),Cartesian3.add(r,i,t)},Ellipsoid.prototype.cartographicArrayToCartesianArray=function(e,t){var i=e.length;defined(t)?t.length=i:t=new Array(i);for(var r=0;r=this._radii.z-t))return i};var abscissas=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],weights=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function gaussLegendreQuadrature(e,t,i){for(var r=.5*(t+e),n=.5*(t-e),a=0,o=0;o<5;o++){var s=n*abscissas[o];a+=weights[o]*(i(r+s)+i(r-s))}return a*=n}function GeographicProjection(e){this._ellipsoid=defaultValue(e,Ellipsoid.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Ellipsoid.prototype.surfaceArea=function(e){for(var t=e.west,n=e.east,i=e.south,r=e.north;ni&&(l=(i=(i=(e[Matrix3.getElementIndex(u,u)]-e[Matrix3.getElementIndex(c,c)])/2/e[Matrix3.getElementIndex(u,c)])<0?-1/(-i+Math.sqrt(1+i*i)):1/(i+Math.sqrt(1+i*i)))*(s=1/Math.sqrt(1+i*i))),(t=Matrix3.clone(Matrix3.IDENTITY,t))[Matrix3.getElementIndex(c,c)]=t[Matrix3.getElementIndex(u,u)]=s,t[Matrix3.getElementIndex(u,c)]=l,t[Matrix3.getElementIndex(c,u)]=-l,t}var jMatrix=new Matrix3,jMatrixTranspose=new Matrix3;Matrix3.computeEigenDecomposition=function(e,t){for(var i=CesiumMath.EPSILON20,r=0,n=0,a=(t=!defined(t)?{}:t).unitary=Matrix3.clone(Matrix3.IDENTITY,t.unitary),o=t.diagonal=Matrix3.clone(e,t.diagonal),s=i*computeFrobeniusNorm(o);n<10&&offDiagonalFrobeniusNorm(o)>s;)shurDecomposition(o,jMatrix),Matrix3.transpose(jMatrix,jMatrixTranspose),Matrix3.multiply(o,jMatrix,o),Matrix3.multiply(jMatrixTranspose,o,o),Matrix3.multiply(a,jMatrix,a),2<++r&&(++n,r=0);return t},Matrix3.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t},Matrix3.determinant=function(e){var t=e[0],i=e[3],r=e[6],n=e[1],a=e[4],o=e[7],s=e[2],l=e[5],e=e[8];return t*(a*e-l*o)+n*(l*r-i*e)+s*(i*o-a*r)},Matrix3.inverse=function(e,t){var i=e[0],r=e[1],n=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],e=Matrix3.determinant(e);t[0]=o*u-c*s,t[1]=c*n-r*u,t[2]=r*s-o*n,t[3]=l*s-a*u,t[4]=i*u-l*n,t[5]=a*n-i*s,t[6]=a*c-l*o,t[7]=l*r-i*c,t[8]=i*o-a*r;e=1/e;return Matrix3.multiplyByScalar(t,e,t)};var scratchTransposeMatrix$1=new Matrix3;function Cartesian4(e,t,i,r){this.x=defaultValue(e,0),this.y=defaultValue(t,0),this.z=defaultValue(i,0),this.w=defaultValue(r,0)}Matrix3.inverseTranspose=function(e,t){return Matrix3.inverse(Matrix3.transpose(e,scratchTransposeMatrix$1),t)},Matrix3.equals=function(e,t){return e===t||defined(e)&&defined(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]},Matrix3.equalsEpsilon=function(e,t,i){return i=defaultValue(i,0),e===t||defined(e)&&defined(t)&&Math.abs(e[0]-t[0])<=i&&Math.abs(e[1]-t[1])<=i&&Math.abs(e[2]-t[2])<=i&&Math.abs(e[3]-t[3])<=i&&Math.abs(e[4]-t[4])<=i&&Math.abs(e[5]-t[5])<=i&&Math.abs(e[6]-t[6])<=i&&Math.abs(e[7]-t[7])<=i&&Math.abs(e[8]-t[8])<=i},Matrix3.IDENTITY=Object.freeze(new Matrix3(1,0,0,0,1,0,0,0,1)),Matrix3.ZERO=Object.freeze(new Matrix3(0,0,0,0,0,0,0,0,0)),Matrix3.COLUMN0ROW0=0,Matrix3.COLUMN0ROW1=1,Matrix3.COLUMN0ROW2=2,Matrix3.COLUMN1ROW0=3,Matrix3.COLUMN1ROW1=4,Matrix3.COLUMN1ROW2=5,Matrix3.COLUMN2ROW0=6,Matrix3.COLUMN2ROW1=7,Matrix3.COLUMN2ROW2=8,Object.defineProperties(Matrix3.prototype,{length:{get:function(){return Matrix3.packedLength}}}),Matrix3.prototype.clone=function(e){return Matrix3.clone(this,e)},Matrix3.prototype.equals=function(e){return Matrix3.equals(this,e)},Matrix3.equalsArray=function(e,t,i){return e[0]===t[i]&&e[1]===t[i+1]&&e[2]===t[i+2]&&e[3]===t[i+3]&&e[4]===t[i+4]&&e[5]===t[i+5]&&e[6]===t[i+6]&&e[7]===t[i+7]&&e[8]===t[i+8]},Matrix3.prototype.equalsEpsilon=function(e,t){return Matrix3.equalsEpsilon(this,e,t)},Matrix3.prototype.toString=function(){return"("+this[0]+", "+this[3]+", "+this[6]+")\n("+this[1]+", "+this[4]+", "+this[7]+")\n("+this[2]+", "+this[5]+", "+this[8]+")"},Cartesian4.fromElements=function(e,t,i,r,n){return defined(n)?(n.x=e,n.y=t,n.z=i,n.w=r,n):new Cartesian4(e,t,i,r)},Cartesian4.fromColor=function(e,t){return defined(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new Cartesian4(e.red,e.green,e.blue,e.alpha)},Cartesian4.clone=function(e,t){if(defined(e))return defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new Cartesian4(e.x,e.y,e.z,e.w)},Cartesian4.packedLength=4,Cartesian4.pack=function(e,t,i){return i=defaultValue(i,0),t[i++]=e.x,t[i++]=e.y,t[i++]=e.z,t[i]=e.w,t},Cartesian4.unpack=function(e,t,i){return t=defaultValue(t,0),(i=!defined(i)?new Cartesian4:i).x=e[t++],i.y=e[t++],i.z=e[t++],i.w=e[t],i},Cartesian4.packArray=function(e,t){var i=e.length,r=4*i;if(defined(t)){if(!Array.isArray(t)&&t.length!==r)throw new DeveloperError("If result is a typed array, it must have exactly array.length * 4 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var n=0;nCesiumMath.PI&&(r-=CesiumMath.TWO_PI),i>CesiumMath.PI&&(i-=CesiumMath.TWO_PI)),defined(t)?(t.west=i,t.south=o,t.east=r,t.north=s,t):new Rectangle(i,o,r,s)},Rectangle.fromCartesianArray=function(e,t,i){t=defaultValue(t,Ellipsoid.WGS84);for(var r=Number.MAX_VALUE,n=-Number.MAX_VALUE,a=Number.MAX_VALUE,o=-Number.MAX_VALUE,s=Number.MAX_VALUE,l=-Number.MAX_VALUE,c=0,u=e.length;cCesiumMath.PI&&(n-=CesiumMath.TWO_PI),r>CesiumMath.PI&&(r-=CesiumMath.TWO_PI)),defined(i)?(i.west=r,i.south=s,i.east=n,i.north=l,i):new Rectangle(r,s,n,l)},Rectangle.clone=function(e,t){if(defined(e))return defined(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new Rectangle(e.west,e.south,e.east,e.north)},Rectangle.equalsEpsilon=function(e,t,i){return i=defaultValue(i,0),e===t||defined(e)&&defined(t)&&Math.abs(e.west-t.west)<=i&&Math.abs(e.south-t.south)<=i&&Math.abs(e.east-t.east)<=i&&Math.abs(e.north-t.north)<=i},Rectangle.prototype.clone=function(e){return Rectangle.clone(this,e)},Rectangle.prototype.equals=function(e){return Rectangle.equals(this,e)},Rectangle.equals=function(e,t){return e===t||defined(e)&&defined(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north},Rectangle.prototype.equalsEpsilon=function(e,t){return Rectangle.equalsEpsilon(this,e,t)},Rectangle.validate=function(e){},Rectangle.southwest=function(e,t){return defined(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new Cartographic(e.west,e.south)},Rectangle.northwest=function(e,t){return defined(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new Cartographic(e.west,e.north)},Rectangle.northeast=function(e,t){return defined(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new Cartographic(e.east,e.north)},Rectangle.southeast=function(e,t){return defined(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new Cartographic(e.east,e.south)},Rectangle.center=function(e,t){var i=e.east,r=e.west;i=e.south&&r<=e.north};var subsampleLlaScratch=new Cartographic;function BoundingSphere(e,t){this.center=Cartesian3.clone(defaultValue(e,Cartesian3.ZERO)),this.radius=defaultValue(t,0)}Rectangle.subsample=function(e,t,i,r){t=defaultValue(t,Ellipsoid.WGS84),i=defaultValue(i,0),defined(r)||(r=[]);var n=0,a=e.north,o=e.south,s=e.east,l=e.west,c=subsampleLlaScratch;c.height=i,c.longitude=l,c.latitude=a,r[n]=t.cartographicToCartesian(c,r[n]),n++,c.longitude=s,r[n]=t.cartographicToCartesian(c,r[n]),n++,c.latitude=o,r[n]=t.cartographicToCartesian(c,r[n]),n++,c.longitude=l,r[n]=t.cartographicToCartesian(c,r[n]),n++,c.latitude=a<0?a:0o.x&&Cartesian3.clone(i,o),hs.y&&Cartesian3.clone(i,s),pl.z&&Cartesian3.clone(i,l)}var m=Cartesian3.magnitudeSquared(Cartesian3.subtract(o,r,fromPointsScratch)),f=Cartesian3.magnitudeSquared(Cartesian3.subtract(s,n,fromPointsScratch)),g=Cartesian3.magnitudeSquared(Cartesian3.subtract(l,a,fromPointsScratch)),_=r,y=o,m=m;ml.x&&Cartesian3.clone(n,l),mc.y&&Cartesian3.clone(n,c),fu.z&&Cartesian3.clone(n,u)}var g=Cartesian3.magnitudeSquared(Cartesian3.subtract(l,a,fromPointsScratch)),_=Cartesian3.magnitudeSquared(Cartesian3.subtract(c,o,fromPointsScratch)),y=Cartesian3.magnitudeSquared(Cartesian3.subtract(u,s,fromPointsScratch)),C=a,v=l,g=g;g<_&&(g=_,C=o,v=c),gs.x&&Cartesian3.clone(r,s),pl.y&&Cartesian3.clone(r,l),mc.z&&Cartesian3.clone(r,c)}var f=Cartesian3.magnitudeSquared(Cartesian3.subtract(s,n,fromPointsScratch)),g=Cartesian3.magnitudeSquared(Cartesian3.subtract(l,a,fromPointsScratch)),_=Cartesian3.magnitudeSquared(Cartesian3.subtract(c,o,fromPointsScratch)),y=n,C=s,f=f;fi.radius&&(i.radius=t),i},BoundingSphere.intersectPlane=function(e,t){var i=e.center,r=e.radius,e=t.normal,t=Cartesian3.dot(e,i)+t.distance;return t<-r?Intersect$1.OUTSIDE:t>>0,o=Math.max(0,Math.min(p,a)),s=[],l=a-o+1,c=[],u=defer();if(o)for(r=u.progress,i=function(e){c.push(e),--l||(t=i=noop,u.reject(c))},t=function(e){s.push(e),--o||(t=i=noop,u.resolve(s))},n=0;n>>0,a=[],o=defer();if(n)for(i=function(e,t){when(e,s).then(function(e){a[t]=e,--n||o.resolve(a)},o.reject)},r=0;r>>0,a=arguments;if(a.length<=1)for(;;){if(i in r){t=r[i++];break}if(++i>=n)throw new TypeError}else t=a[1];for(;in&&(t=i[n],this._length=n),t},Heap.prototype.pop=function(e){if(e=defaultValue(e,0),0!==this._length){var t=this._array,i=t[e];return swap$3(t,e,--this._length),this.heapify(e),t[this._length]=void 0,i}};var statistics={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},priorityHeapLength=20,requestHeap=new Heap({comparator:sortRequests});requestHeap.maximumLength=priorityHeapLength,requestHeap.reserve(priorityHeapLength);var activeRequests=[],numberOfActiveRequestsByServer={},pageUri="undefined"!=typeof document?new URI(document.location.href):new URI,requestCompletedEvent=new Event;function RequestScheduler(){}function updatePriority(e){defined(e.priorityFunction)&&(e.priority=e.priorityFunction())}function serverHasOpenSlots(e){var t=defaultValue(RequestScheduler.requestsByServer[e],RequestScheduler.maximumRequestsPerServer);return numberOfActiveRequestsByServer[e]e;)cancelRequest(requestHeap.pop());priorityHeapLength=e,requestHeap.maximumLength=e,requestHeap.reserve(e)}}}),RequestScheduler.update=function(){for(var e,t=0,i=activeRequests.length,r=0;r=RequestScheduler.maximumRequests)){updatePriority(e);var t=requestHeap.insert(e);if(defined(t)){if(t===e)return;cancelRequest(t)}return issueRequest(e)}}},RequestScheduler.clearForSpecs=function(){for(;0=this.retryAttempts)return when(!1);var i=this;return when(t(this,e)).then(function(e){return++i._retryCount,e})},Resource.prototype.clone=function(e){return(e=!defined(e)?new Resource({url:this._url}):e)._url=this._url,e._queryParameters=clone$1(this._queryParameters),e._templateValues=clone$1(this._templateValues),e.headers=clone$1(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e},Resource.prototype.getBaseUri=function(e){return getBaseUri(this.getUrlComponent(e),e)},Resource.prototype.appendForwardSlash=function(){this._url=appendForwardSlash(this._url)},Resource.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})},Resource.fetchArrayBuffer=function(e){return new Resource(e).fetchArrayBuffer()},Resource.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})},Resource.fetchBlob=function(e){return new Resource(e).fetchBlob()},Resource.prototype.fetchImage=function(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT);var t=defaultValue(e.preferImageBitmap,!1),i=defaultValue(e.preferBlob,!1),r=defaultValue(e.flipY,!1);if(checkAndResetRequest(this.request),!xhrBlobSupported||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!i)return fetchImage({resource:this,flipY:r,preferImageBitmap:t});var n,a,o,s=this.fetchBlob();return defined(s)?Resource.supportsImageBitmapOptions().then(function(e){return n=e&&t,s}).then(function(e){if(defined(e)){if(o=e,n)return Resource.createImageBitmapFromBlob(e,{flipY:r,premultiplyAlpha:!1});e=window.URL.createObjectURL(e);return fetchImage({resource:a=new Resource({url:e}),flipY:r,preferImageBitmap:!1})}}).then(function(e){if(defined(e))return e.blob=o,n||window.URL.revokeObjectURL(a.url),e}).otherwise(function(e){return defined(a)&&window.URL.revokeObjectURL(a.url),e.blob=o,when.reject(e)}):void 0},Resource.fetchImage=function(e){return new Resource(e).fetchImage({flipY:e.flipY,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})},Resource.prototype.fetchText=function(){return this.fetch({responseType:"text"})},Resource.fetchText=function(e){return new Resource(e).fetchText()},Resource.prototype.fetchJson=function(){var e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(defined(e))return e.then(function(e){if(defined(e))return JSON.parse(e)})},Resource.fetchJson=function(e){return new Resource(e).fetchJson()},Resource.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})},Resource.fetchXML=function(e){return new Resource(e).fetchXML()},Resource.prototype.fetchJsonp=function(e){var t;for(e=defaultValue(e,"callback"),checkAndResetRequest(this.request);t="loadJsonp"+Math.random().toString().substring(2,8),defined(window[t]););return fetchJsonp(this,e,t)},Resource.fetchJsonp=function(e){return new Resource(e).fetchJsonp(e.callbackParameterName)},Resource.prototype._makeRequest=function(s){var l=this;checkAndResetRequest(l.request);var c=l.request;c.url=l.url,c.requestFunction=function(){var e=s.responseType,t=combine$2(s.headers,l.headers),i=s.overrideMimeType,r=s.method,n=s.data,a=when.defer(),o=Resource._Implementations.loadWithXhr(l.url,e,r,n,t,a,i);return defined(o)&&defined(o.abort)&&(c.cancelFunction=function(){o.abort()}),a.promise};var e=RequestScheduler.request(c);if(defined(e))return e.then(function(e){return c.cancelFunction=void 0,e}).otherwise(function(t){return c.cancelFunction=void 0,c.state!==RequestState$1.FAILED?when.reject(t):l.retryOnError(t).then(function(e){return e?(c.state=RequestState$1.UNISSUED,c.deferred=void 0,l.fetch(s)):when.reject(t)})})};var dataUriRegex$1=/^data:(.*?)(;base64)?,(.*)$/;function decodeDataUriText(e,t){t=decodeURIComponent(t);return e?atob(t):t}function decodeDataUriArrayBuffer(e,t){for(var i=decodeDataUriText(e,t),t=new ArrayBuffer(i.length),r=new Uint8Array(t),n=0;n/gm),DATA_ATTR=seal(/^data-[\-\w.\u00B7-\uFFFF]/),ARIA_ATTR=seal(/^aria-[\-\w]+$/),IS_ALLOWED_URI=seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),IS_SCRIPT_OR_DATA=seal(/^(?:\w+script|data):/i),ATTR_WHITESPACE=seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function _toConsumableArray$1(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t/i,i))b(o,e);else{Q&&(i=stringReplace(i,L," "),i=stringReplace(i,F," "));var c=e.nodeName.toLowerCase();if(M(c,l,i))try{s?e.setAttributeNS(s,o,i):e.setAttribute(o,i),arrayPop(u.removed)}catch(e){}}}w("afterSanitizeAttributes",e,null)}}function R(e){var t,i=P(e);for(w("beforeSanitizeShadowDOM",e,null);t=i.nextNode();)w("uponSanitizeShadowNode",t,null),D(t)||(t.content instanceof d&&R(t.content),I(t));w("afterSanitizeShadowDOM",e,null)}var O,L=MUSTACHE_EXPR,F=ERB_EXPR,N=DATA_ATTR,B=ARIA_ATTR,V=IS_SCRIPT_OR_DATA,k=ATTR_WHITESPACE,z=IS_ALLOWED_URI,U=null,$=addToSet({},[].concat(_toConsumableArray$1(html),_toConsumableArray$1(svg),_toConsumableArray$1(svgFilters),_toConsumableArray$1(mathMl),_toConsumableArray$1(text))),G=null,H=addToSet({},[].concat(_toConsumableArray$1(html$1),_toConsumableArray$1(svg$1),_toConsumableArray$1(mathMl$1),_toConsumableArray$1(xml))),W=null,q=null,j=!0,Y=!0,X=!1,Q=!1,J=!1,Z=!1,K=!1,ee=!1,te=!1,ie=!0,re=!1,ne=!0,ae=!0,oe=!1,se=addToSet({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","plaintext","script","style","svg","template","thead","title","video","xmp"]),le=null,ce=addToSet({},["audio","video","img","source","image","track"]),ue=null,de=addToSet({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),he=null,pe=a.createElement("form");return u.sanitize=function(e,t){var i,r,n=void 0,a=void 0,o=void 0;if("string"!=typeof(e=e||"\x3c!--\x3e")&&!A(e)){if("function"!=typeof e.toString)throw typeErrorCreate("toString is not a function");if("string"!=typeof(e=e.toString()))throw typeErrorCreate("dirty is not a string, aborting")}if(!u.isSupported){if("object"===_typeof(l.toStaticHTML)||"function"==typeof l.toStaticHTML){if("string"==typeof e)return l.toStaticHTML(e);if(A(e))return l.toStaticHTML(e.outerHTML)}return e}if(Z||x(t),u.removed=[],"string"==typeof e&&(oe=!1),!oe)if(e instanceof h)1===(i=(n=E("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===i.nodeName||"HTML"===i.nodeName?n=i:n.appendChild(i);else{if(!ee&&!Q&&!J&&-1===e.indexOf("<"))return m&&re?m.createHTML(e):e;if(!(n=E(e)))return ee?null:f}n&&K&&T(n.firstChild);for(var s=P(oe?e:n);r=s.nextNode();)3===r.nodeType&&r===a||D(r)||(r.content instanceof d&&R(r.content),I(r),a=r);if(a=null,oe)return e;if(ee){if(te)for(o=y.call(n.ownerDocument);n.firstChild;)o.appendChild(n.firstChild);else o=n;return o=ie?C.call(c,o,!0):o}e=J?n.outerHTML:n.innerHTML;return Q&&(e=stringReplace(e,L," "),e=stringReplace(e,F," ")),m&&re?m.createHTML(e):e},u.setConfig=function(e){x(e),Z=!0},u.clearConfig=function(){he=null,Z=!1},u.isValidAttribute=function(e,t,i){he||x({});e=stringToLowerCase(e),t=stringToLowerCase(t);return M(e,t,i)},u.addHook=function(e,t){"function"==typeof t&&(S[e]=S[e]||[],arrayPush(S[e],t))},u.removeHook=function(e){S[e]&&arrayPop(S[e])},u.removeHooks=function(e){S[e]&&(S[e]=[])},u.removeAllHooks=function(){S={}},u}var purify=createDOMPurify(),nextCreditId=0,creditToId={};function Credit(e,t){var i,r=e;defined(creditToId[r])?i=creditToId[r]:(i=nextCreditId++,creditToId[r]=i),t=defaultValue(t,!1),this._id=i,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(Credit.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen}},element:{get:function(){if(!defined(this._element)){var e=purify.sanitize(this._html),t=document.createElement("div");t._creditId=this._id,t.style.display="inline",t.innerHTML=e;for(var i=t.querySelectorAll("a"),r=0;r-t?((i=scratchCameraPositionInScaledSpaceShrunk).x=this._cameraPosition.x/(r.radii.x+t),i.y=this._cameraPosition.y/(r.radii.y+t),i.z=this._cameraPosition.z/(r.radii.z+t),i.x*i.x+i.y*i.y+i.z*i.z-1):(i=this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared);return isScaledSpacePointVisible(e,i,t)},EllipsoidalOccluder.prototype.computeHorizonCullingPoint=function(e,t,i){return computeHorizonCullingPointFromPositions(this._ellipsoid,e,t,i)};var scratchEllipsoidShrunk=Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);EllipsoidalOccluder.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,i,r){return computeHorizonCullingPointFromPositions(getPossiblyShrunkEllipsoid(this._ellipsoid,i,scratchEllipsoidShrunk),e,t,r)},EllipsoidalOccluder.prototype.computeHorizonCullingPointFromVertices=function(e,t,i,r,n){return computeHorizonCullingPointFromVertices(this._ellipsoid,e,t,i,r,n)},EllipsoidalOccluder.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,i,r,n,a){return computeHorizonCullingPointFromVertices(getPossiblyShrunkEllipsoid(this._ellipsoid,n,scratchEllipsoidShrunk),e,t,i,r,a)};var subsampleScratch=[];EllipsoidalOccluder.prototype.computeHorizonCullingPointFromRectangle=function(e,t,i){var r=Rectangle.subsample(e,t,0,subsampleScratch),e=BoundingSphere.fromPoints(r);if(!(Cartesian3.magnitude(e.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(e.center,r,i)};var scratchEllipsoidShrunkRadii=new Cartesian3;function getPossiblyShrunkEllipsoid(e,t,i){return defined(t)&&t<0&&e.minimumRadius>-t&&(t=Cartesian3.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,scratchEllipsoidShrunkRadii),e=Ellipsoid.fromCartesian3(t,i)),e}function computeHorizonCullingPointFromPositions(e,t,i,r){defined(r)||(r=new Cartesian3);for(var n=computeScaledSpaceDirectionToPoint(e,t),a=0,o=0,s=i.length;oi)}var scaledSpaceScratch=new Cartesian3,directionScratch=new Cartesian3;function computeMagnitude(e,t,i){var r=e.transformPositionToScaledSpace(t,scaledSpaceScratch),e=Cartesian3.magnitudeSquared(r),t=Math.sqrt(e),r=Cartesian3.divideByScalar(r,t,directionScratch),e=Math.max(1,e),t=1/(t=Math.max(1,t));return 1/(Cartesian3.dot(r,i)*t-Cartesian3.magnitude(Cartesian3.cross(r,i,r))*(Math.sqrt(e-1)*t))}function magnitudeToPoint(e,t,i){if(!(t<=0||t===1/0||t!=t))return Cartesian3.multiplyByScalar(e,t,i)}var directionToPointScratch=new Cartesian3;function computeScaledSpaceDirectionToPoint(e,t){return Cartesian3.equals(t,Cartesian3.ZERO)?t:(e.transformPositionToScaledSpace(t,directionToPointScratch),Cartesian3.normalize(directionToPointScratch,directionToPointScratch))}var QuadraticRealPolynomial={};function addWithCancellationCheck$1(e,t,i){var r=e+t;return CesiumMath.sign(e)!==CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(e),Math.abs(t)))=o[0]&&l[1]<=o[1]?[o[0],l[0],l[1],o[1]]:o[0]>=l[0]&&o[1]<=l[1]?[l[0],o[0],o[1],l[1]]:l[0]>o[0]&&l[0]=f[0]&&m[1]<=f[1]?[f[0],m[0],m[1],f[1]]:f[0]>=m[0]&&f[1]<=m[1]?[m[0],f[0],f[1],m[1]]:m[0]>f[0]&&m[0]Cartesian3.distance(e,t)))return defined(o)||(o=new Cartesian3),Cartesian3.multiplyByScalar(s.direction,a,o),Cartesian3.add(s.origin,o,o)};var raySphereRoots={root0:0,root1:0};function raySphere(e,t,i){defined(i)||(i=new Interval);var r=e.origin,n=e.direction,e=t.center,t=t.radius*t.radius,e=Cartesian3.subtract(r,e,scratchPVec),t=solveQuadratic(Cartesian3.dot(n,n),2*Cartesian3.dot(n,e),Cartesian3.magnitudeSquared(e)-t,raySphereRoots);if(defined(t))return i.start=t.root0,i.stop=t.root1,i}IntersectionTests.raySphere=function(e,t,i){if(defined(i=raySphere(e,t,i))&&!(i.stop<0))return i.start=Math.max(i.start,0),i};var scratchLineSegmentRay=new Ray;IntersectionTests.lineSegmentSphere=function(e,t,i,r){var n=scratchLineSegmentRay;Cartesian3.clone(e,n.origin);t=Cartesian3.subtract(t,e,n.direction),e=Cartesian3.magnitude(t);if(Cartesian3.normalize(t,t),!(!defined(r=raySphere(n,i,r))||r.stop<0||r.start>e))return r.start=Math.max(r.start,0),r.stop=Math.min(r.stop,e),r};var scratchQ=new Cartesian3,scratchW$1=new Cartesian3;function addWithCancellationCheck(e,t,i){var r=e+t;return CesiumMath.sign(e)!==CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(e),Math.abs(t)))=t?"":Array(1+t-e.length>>>0).join(i),r?e+i:i+e}function v(e,t,i,r,n,a){var o=r-e.length;return e=0>>0;return e=(i=i&&s&&{2:"0b",8:"0",16:"0x"}[t]||"")+C(s.toString(t),a||0,"0",!1),v(e,i,r,n,o)}function x(e,t,i,r,n,a){return null!=r&&(e=e.slice(0,r)),v(e,"",t,i,n,a)}var T=arguments,b=0,e=T[b++];return e.replace(/%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g,function(e,t,i,r,n,a,o){var s,l,c,u,d;if("%%"==e)return"%";for(var h=!1,p="",m=!1,f=!1,g=" ",_=i.length,y=0;i&&y<_;y++)switch(i.charAt(y)){case" ":p=" ";break;case"+":p="+";break;case"-":h=!0;break;case"'":g=i.charAt(y+1);break;case"0":m=!0;break;case"#":f=!0}if((r=r?"*"==r?+T[b++]:"*"==r.charAt(0)?+T[r.slice(1,-1)]:+r:0)<0&&(r=-r,h=!0),!isFinite(r))throw new Error("sprintf: (minimum-)width must be finite");switch(a=a?"*"==a?+T[b++]:"*"==a.charAt(0)?+T[a.slice(1,-1)]:+a:-1<"fFeE".indexOf(o)?6:"d"==o?0:void 0,d=t?T[t.slice(0,-1)]:T[b++],o){case"s":return x(String(d),h,r,a,m,g);case"c":return x(String.fromCharCode(+d),h,r,a,m);case"b":return S(d,2,f,h,r,a,m);case"o":return S(d,8,f,h,r,a,m);case"x":return S(d,16,f,h,r,a,m);case"X":return S(d,16,f,h,r,a,m).toUpperCase();case"u":return S(d,10,f,h,r,a,m);case"i":case"d":return s=+d||0,d=(l=(s=Math.round(s-s%1))<0?"-":p)+C(String(Math.abs(s)),a,"0",!1),v(d,l,h,r,m);case"e":case"E":case"f":case"F":case"g":case"G":return l=(s=+d)<0?"-":p,c=["toExponential","toFixed","toPrecision"]["efg".indexOf(o.toLowerCase())],u=["toString","toUpperCase"]["eEfFgG".indexOf(o)%2],d=l+Math.abs(s)[c](a),v(d,l,h,r,m)[u]();default:return e}})}function GregorianDate(e,t,i,r,n,a,o,s){this.year=e,this.month=t,this.day=i,this.hour=r,this.minute=n,this.second=a,this.millisecond=o,this.isLeapSecond=s}function isLeapYear(e){return e%4==0&&e%100!=0||e%400==0}function LeapSecond(e,t){this.julianDate=e,this.offset=t}Plane.transform=function(e,t,i){var r=e.normal,e=e.distance,t=Matrix4.inverseTranspose(t,scratchInverseTranspose),e=Cartesian4.fromElements(r.x,r.y,r.z,e,scratchPlaneCartesian4),e=Matrix4.multiplyByVector(t,e,e),t=Cartesian3.fromCartesian4(e,scratchTransformNormal);return e=Cartesian4.divideByScalar(e,Cartesian3.magnitude(t),e),Plane.fromCartesian4(e,i)},Plane.clone=function(e,t){return defined(t)?(Cartesian3.clone(e.normal,t.normal),t.distance=e.distance,t):new Plane(e.normal,e.distance)},Plane.equals=function(e,t){return e.distance===t.distance&&Cartesian3.equals(e.normal,t.normal)},Plane.ORIGIN_XY_PLANE=Object.freeze(new Plane(Cartesian3.UNIT_Z,0)),Plane.ORIGIN_YZ_PLANE=Object.freeze(new Plane(Cartesian3.UNIT_X,0)),Plane.ORIGIN_ZX_PLANE=Object.freeze(new Plane(Cartesian3.UNIT_Y,0));var TimeConstants={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:2400000.5},TimeConstants$1=Object.freeze(TimeConstants),TimeStandard={UTC:0,TAI:1},TimeStandard$1=Object.freeze(TimeStandard),gregorianDateScratch=new GregorianDate,daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31],daysInLeapFeburary=29;function compareLeapSecondDates$1(e,t){return JulianDate.compare(e.julianDate,t.julianDate)}var binarySearchScratchLeapSecond=new LeapSecond;function convertUtcToTai(e){binarySearchScratchLeapSecond.julianDate=e;var t=JulianDate.leapSeconds,i=binarySearch(t,binarySearchScratchLeapSecond,compareLeapSecondDates$1),r=t[i=(i=i<0?~i:i)>=t.length?t.length-1:i].offset;0=i.length)return JulianDate.addSeconds(e,-i[r-1].offset,t);var n=JulianDate.secondsDifference(i[r].julianDate,e);return 0===n?JulianDate.addSeconds(e,-i[r].offset,t):n<=1?void 0:JulianDate.addSeconds(e,-i[--r].offset,t)}function setComponents(e,t,i){var r=t/TimeConstants$1.SECONDS_PER_DAY|0;return e+=r,(t-=TimeConstants$1.SECONDS_PER_DAY*r)<0&&(e--,t+=TimeConstants$1.SECONDS_PER_DAY),i.dayNumber=e,i.secondsOfDay=t,i}function computeJulianDateComponents(e,t,i,r,n,a,o){var s=(t-14)/12|0,e=e+4800+s,i=(1461*e/4|0)+(367*(t-2-12*s)/12|0)-(3*((e+100)/100|0)/4|0)+i-32075;(r-=12)<0&&(r+=24);o=a+(r*TimeConstants$1.SECONDS_PER_HOUR+n*TimeConstants$1.SECONDS_PER_MINUTE+o*TimeConstants$1.SECONDS_PER_MILLISECOND);return 43200<=o&&--i,[i,o]}var matchCalendarYear=/^(\d{4})$/,matchCalendarMonth=/^(\d{4})-(\d{2})$/,matchOrdinalDate=/^(\d{4})-?(\d{3})$/,matchWeekDate=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,matchCalendarDate=/^(\d{4})-?(\d{2})-?(\d{2})$/,utcOffset=/([Z+\-])?(\d{2})?:?(\d{2})?$/,matchHours=/^(\d{2})(\.\d+)?/.source+utcOffset.source,matchHoursMinutes=/^(\d{2}):?(\d{2})(\.\d+)?/.source+utcOffset.source,matchHoursMinutesSeconds=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+utcOffset.source;function JulianDate(e,t,i){this.dayNumber=void 0,this.secondsOfDay=void 0,e=defaultValue(e,0),t=defaultValue(t,0),i=defaultValue(i,TimeStandard$1.UTC);var r=0|e;setComponents(r,t+=(e-r)*TimeConstants$1.SECONDS_PER_DAY,this),i===TimeStandard$1.UTC&&convertUtcToTai(this)}JulianDate.fromGregorianDate=function(e,t){e=computeJulianDateComponents(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return defined(t)?(setComponents(e[0],e[1],t),convertUtcToTai(t),t):new JulianDate(e[0],e[1],TimeStandard$1.UTC)},JulianDate.fromDate=function(e,t){e=computeJulianDateComponents(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return defined(t)?(setComponents(e[0],e[1],t),convertUtcToTai(t),t):new JulianDate(e[0],e[1],TimeStandard$1.UTC)},JulianDate.fromIso8601=function(e,t){var i,r,n,a,o,s=(e=e.replace(",",".")).split("T"),l=1,c=1,u=0,d=0,h=0,p=0,m=s[0],e=s[1];if(null!==(s=m.match(matchCalendarDate))?(n=+s[1],l=+s[2],c=+s[3]):null!==(s=m.match(matchCalendarMonth))?(n=+s[1],l=+s[2]):null!==(s=m.match(matchCalendarYear))?n=+s[1]:(null!==(s=m.match(matchOrdinalDate))?(n=+s[1],a=+s[2],r=isLeapYear(n)):null!==(s=m.match(matchWeekDate))&&(n=+s[1],a=7*+s[2]+(+s[3]||0)-new Date(Date.UTC(n,0,4)).getUTCDay()-3),(i=new Date(Date.UTC(n,0,1))).setUTCDate(a),l=i.getUTCMonth()+1,c=i.getUTCDate()),r=isLeapYear(n),defined(e)){null!==(s=e.match(matchHoursMinutesSeconds))?(u=+s[1],d=+s[2],h=+s[3],p=1e3*+(s[4]||0),o=5):null!==(s=e.match(matchHoursMinutes))?(u=+s[1],d=+s[2],h=60*+(s[3]||0),o=4):null!==(s=e.match(matchHours))&&(u=+s[1],d=60*+(s[2]||0),o=3);var f=s[o],g=+s[o+1],_=+(s[o+2]||0);switch(f){case"+":u-=g,d-=_;break;case"-":u+=g,d+=_;break;case"Z":break;default:d+=new Date(Date.UTC(n,l-1,c,u,d)).getTimezoneOffset()}}f=60===h;for(f&&h--;60<=d;)d-=60,u++;for(;24<=u;)u-=24,c++;for(i=r&&2===l?daysInLeapFeburary:daysInMonth[l-1];it.length-1)return o.xPoleWander=0,o.yPoleWander=0,o.xPoleOffset=0,o.yPoleOffset=0,o.ut1MinusUtc=0,o;var l=t[n],c=t[a];if(l.equals(c)||r.equals(l))return fillResultFromIndex(e,i,n,s,o),o;if(r.equals(c))return fillResultFromIndex(e,i,a,s,o),o;var u=JulianDate.secondsDifference(r,l)/JulianDate.secondsDifference(c,l),d=n*s,t=a*s,l=i[d+e._ut1MinusUtcSecondsColumn],n=i[t+e._ut1MinusUtcSecondsColumn],a=n-l;return!(.5=this._totalSamples&&(r=this._totalSamples-1);for(var t=t/this._samplesPerXysFile|0,n=r/this._samplesPerXysFile|0,a=[],o=t;o<=n;++o)a.push(requestXysChunk(this,o));return when.all(a)},Iau2006XysData.prototype.computeXysRadians=function(e,t,i){var r=getDaysSinceEpoch(this,e,t);if(!(r<0)){e=r/this._stepSizeDays|0;if(!(e>=this._totalSamples)){var n=this._interpolationOrder,a=e-(n/2|0),t=(a=a<0?0:a)+n;t>=this._totalSamples&&(a=(t=this._totalSamples-1)-n)<0&&(a=0);var e=!1,o=this._samples;if(defined(o[3*a])||(requestXysChunk(this,a/this._samplesPerXysFile|0),e=!0),defined(o[3*t])||(requestXysChunk(this,t/this._samplesPerXysFile|0),e=!0),!e){defined(i)?(i.x=0,i.y=0,i.s=0):i=new Iau2006XysSample(0,0,0);for(var s,l=r-a*this._stepSizeDays,c=this._work,u=this._denominators,d=this._coef,h=this._xTable,p=0;p<=n;++p)c[p]=l-h[p];for(p=0;p<=n;++p){for(d[p]=1,s=0;s<=n;++s)s!==p&&(d[p]*=c[s]);d[p]*=u[p];var m=3*(a+p);i.x+=d[p]*o[m++],i.y+=d[p]*o[m++],i.s+=d[p]*o[m]}return i}}}};var _names={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},Fullscreen={},theNavigator,isChromeResult,chromeVersionResult,isSafariResult,safariVersionResult,isWebkitResult,webkitVersionResult,isInternetExplorerResult,internetExplorerVersionResult,isEdgeResult,edgeVersionResult,isFirefoxResult,firefoxVersionResult,isWindowsResult,hasPointerEvents,imageRenderingValueResult,supportsImageRenderingPixelatedResult;function extractVersion(e){for(var t=e.split("."),i=0,r=t.length;is&&(o+=(l=r.x-s)*l),r.y<-t?o+=(l=r.y+t)*l:r.y>t&&(o+=(l=r.y-t)*l),r.z<-e?o+=(l=r.z+e)*l:r.z>e&&(o+=(l=r.z-e)*l),o};var scratchCorner=new Cartesian3,scratchToCenter$1=new Cartesian3;OrientedBoundingBox.computePlaneDistances=function(e,t,i,r){defined(r)||(r=new Interval);var n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,o=e.center,s=e.halfAxes,l=Matrix3.getColumn(s,0,scratchCartesianU),c=Matrix3.getColumn(s,1,scratchCartesianV),u=Matrix3.getColumn(s,2,scratchCartesianW),d=Cartesian3.add(l,c,scratchCorner);Cartesian3.add(d,u,d),Cartesian3.add(d,o,d);e=Cartesian3.subtract(d,t,scratchToCenter$1),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a);return Cartesian3.add(o,l,d),Cartesian3.add(d,c,d),Cartesian3.subtract(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.add(o,l,d),Cartesian3.subtract(d,c,d),Cartesian3.add(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.add(o,l,d),Cartesian3.subtract(d,c,d),Cartesian3.subtract(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.subtract(o,l,d),Cartesian3.add(d,c,d),Cartesian3.add(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.subtract(o,l,d),Cartesian3.add(d,c,d),Cartesian3.subtract(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.subtract(o,l,d),Cartesian3.subtract(d,c,d),Cartesian3.add(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),Cartesian3.subtract(o,l,d),Cartesian3.subtract(d,c,d),Cartesian3.subtract(d,u,d),Cartesian3.subtract(d,t,e),s=Cartesian3.dot(i,e),n=Math.min(s,n),a=Math.max(s,a),r.start=n,r.stop=a,r};var scratchBoundingSphere$3=new BoundingSphere;OrientedBoundingBox.isOccluded=function(e,t){e=BoundingSphere.fromOrientedBoundingBox(e,scratchBoundingSphere$3);return!t.isBoundingSphereVisible(e)},OrientedBoundingBox.prototype.intersectPlane=function(e){return OrientedBoundingBox.intersectPlane(this,e)},OrientedBoundingBox.prototype.distanceSquaredTo=function(e){return OrientedBoundingBox.distanceSquaredTo(this,e)},OrientedBoundingBox.prototype.computePlaneDistances=function(e,t,i){return OrientedBoundingBox.computePlaneDistances(this,e,t,i)},OrientedBoundingBox.prototype.isOccluded=function(e){return OrientedBoundingBox.isOccluded(this,e)},OrientedBoundingBox.equals=function(e,t){return e===t||defined(e)&&defined(t)&&Cartesian3.equals(e.center,t.center)&&Matrix3.equals(e.halfAxes,t.halfAxes)},OrientedBoundingBox.prototype.clone=function(e){return OrientedBoundingBox.clone(this,e)},OrientedBoundingBox.prototype.equals=function(e){return OrientedBoundingBox.equals(this,e)};var RIGHT_SHIFT=1/256,LEFT_SHIFT=256,AttributeCompression={octEncodeInRange:function(e,t,i){var r;return i.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),i.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0&&(r=i.x,e=i.y,i.x=(1-Math.abs(e))*CesiumMath.signNotZero(r),i.y=(1-Math.abs(r))*CesiumMath.signNotZero(e)),i.x=CesiumMath.toSNorm(i.x,t),i.y=CesiumMath.toSNorm(i.y,t),i},octEncode:function(e,t){return AttributeCompression.octEncodeInRange(e,255,t)}},octEncodeScratch=new Cartesian2,uint8ForceArray=new Uint8Array(1);function forceUint8(e){return uint8ForceArray[0]=e,uint8ForceArray[0]}AttributeCompression.octEncodeToCartesian4=function(e,t){return AttributeCompression.octEncodeInRange(e,65535,octEncodeScratch),t.x=forceUint8(octEncodeScratch.x*RIGHT_SHIFT),t.y=forceUint8(octEncodeScratch.x),t.z=forceUint8(octEncodeScratch.y*RIGHT_SHIFT),t.w=forceUint8(octEncodeScratch.y),t},AttributeCompression.octDecodeInRange=function(e,t,i,r){return r.x=CesiumMath.fromSNorm(e,i),r.y=CesiumMath.fromSNorm(t,i),r.z=1-(Math.abs(r.x)+Math.abs(r.y)),r.z<0&&(i=r.x,r.x=(1-Math.abs(r.y))*CesiumMath.signNotZero(i),r.y=(1-Math.abs(i))*CesiumMath.signNotZero(r.y)),Cartesian3.normalize(r,r)},AttributeCompression.octDecode=function(e,t,i){return AttributeCompression.octDecodeInRange(e,t,255,i)},AttributeCompression.octDecodeFromCartesian4=function(e,t){var i=e.x,r=e.y,n=e.z,e=e.w,r=i*LEFT_SHIFT+r,e=n*LEFT_SHIFT+e;return AttributeCompression.octDecodeInRange(r,e,65535,t)},AttributeCompression.octPackFloat=function(e){return 256*e.x+e.y};var scratchEncodeCart2=new Cartesian2;function zigZagDecode(e){return e>>1^-(1&e)}AttributeCompression.octEncodeFloat=function(e){return AttributeCompression.octEncode(e,scratchEncodeCart2),AttributeCompression.octPackFloat(scratchEncodeCart2)},AttributeCompression.octDecodeFloat=function(e,t){var i=e/256,e=Math.floor(i),i=256*(i-e);return AttributeCompression.octDecode(e,i,t)},AttributeCompression.octPack=function(e,t,i,r){e=AttributeCompression.octEncodeFloat(e),t=AttributeCompression.octEncodeFloat(t),i=AttributeCompression.octEncode(i,scratchEncodeCart2);return r.x=65536*i.x+e,r.y=65536*i.y+t,r},AttributeCompression.octUnpack=function(e,t,i,r){var n=e.x/65536,a=Math.floor(n),o=65536*(n-a),n=e.y/65536,e=Math.floor(n),n=65536*(n-e);AttributeCompression.octDecodeFloat(o,t),AttributeCompression.octDecodeFloat(n,i),AttributeCompression.octDecode(a,e,r)},AttributeCompression.compressTextureCoordinates=function(e){return 4096*(4095*e.x|0)+(4095*e.y|0)},AttributeCompression.decompressTextureCoordinates=function(e,t){var i=e/4096,i=Math.floor(i);return t.x=i/4095,t.y=(e-4096*i)/4095,t},AttributeCompression.zigZagDeltaDecode=function(e,t,i){for(var r=e.length,n=0,a=0,o=0,s=0;sWebMercatorProjection.MaximumLatitude?e=WebMercatorProjection.MaximumLatitude:e<-WebMercatorProjection.MaximumLatitude&&(e=-WebMercatorProjection.MaximumLatitude);e=Math.sin(e);return.5*Math.log((1+e)/(1-e))},WebMercatorProjection.MaximumLatitude=WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI),WebMercatorProjection.prototype.project=function(e,t){var i=this._semimajorAxis,r=e.longitude*i,i=WebMercatorProjection.geodeticLatitudeToMercatorAngle(e.latitude)*i,e=e.height;return defined(t)?(t.x=r,t.y=i,t.z=e,t):new Cartesian3(r,i,e)},WebMercatorProjection.prototype.unproject=function(e,t){var i=this._oneOverSemimajorAxis,r=e.x*i,i=WebMercatorProjection.mercatorAngleToGeodeticLatitude(e.y*i),e=e.z;return defined(t)?(t.longitude=r,t.latitude=i,t.height=e,t):new Cartographic(r,i,e)};var HeightmapTessellator={};HeightmapTessellator.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var cartesian3Scratch$2=new Cartesian3,matrix4Scratch=new Matrix4,minimumScratch=new Cartesian3,maximumScratch=new Cartesian3;function returnTrue(){return!0}function destroyObject(e,t){function i(){}for(var r in e)"function"==typeof e[r]&&(e[r]=i);e.isDestroyed=returnTrue}function canTransferArrayBuffer(){if(!defined(TaskProcessor._canTransferArrayBuffer)){var t=new Worker(getWorkerUrl("Workers/transferTypedArrayTest.js"));t.postMessage=defaultValue(t.webkitPostMessage,t.postMessage);var e=new Int8Array([99]);try{t.postMessage({array:e},[e.buffer])}catch(e){return TaskProcessor._canTransferArrayBuffer=!1,TaskProcessor._canTransferArrayBuffer}var i=when.defer();t.onmessage=function(e){e=e.data.array,e=defined(e)&&99===e[0];i.resolve(e),t.terminate(),TaskProcessor._canTransferArrayBuffer=e},TaskProcessor._canTransferArrayBuffer=i.promise}return TaskProcessor._canTransferArrayBuffer}HeightmapTessellator.computeVertices=function(e){var t,i,r,n=Math.cos,a=Math.sin,o=Math.sqrt,s=Math.atan,l=Math.exp,c=CesiumMath.PI_OVER_TWO,u=CesiumMath.toRadians,d=e.heightmap,h=e.width,p=e.height,m=e.skirtHeight,f=defaultValue(e.isGeographic,!0),g=defaultValue(e.ellipsoid,Ellipsoid.WGS84),_=1/g.maximumRadius,y=e.nativeRectangle,C=e.rectangle,v=defined(C)?(t=C.west,i=C.south,r=C.east,C.north):f?(t=u(y.west),i=u(y.south),r=u(y.east),u(y.north)):(t=y.west*_,i=c-2*s(l(-y.south*_)),r=y.east*_,c-2*s(l(-y.north*_))),S=defined(x=e.relativeToCenter),x=S?x:Cartesian3.ZERO,T=defaultValue(e.exaggeration,1),b=defaultValue(e.includeWebMercatorT,!1),E=defaultValue(e.structure,HeightmapTessellator.DEFAULT_STRUCTURE),P=defaultValue(E.heightScale,HeightmapTessellator.DEFAULT_STRUCTURE.heightScale),A=defaultValue(E.heightOffset,HeightmapTessellator.DEFAULT_STRUCTURE.heightOffset),w=defaultValue(E.elementsPerHeight,HeightmapTessellator.DEFAULT_STRUCTURE.elementsPerHeight),D=defaultValue(E.stride,HeightmapTessellator.DEFAULT_STRUCTURE.stride),M=defaultValue(E.elementMultiplier,HeightmapTessellator.DEFAULT_STRUCTURE.elementMultiplier),I=defaultValue(E.isBigEndian,HeightmapTessellator.DEFAULT_STRUCTURE.isBigEndian),R=Rectangle.computeWidth(y),O=Rectangle.computeHeight(y),L=R/(h-1),F=O/(p-1);f||(R*=_,O*=_);var N,B,e=g.radiiSquared,V=e.x,k=e.y,z=e.z,U=65536,$=-65536,E=Transforms.eastNorthUpToFixedFrame(x,g),G=Matrix4.inverseTransformation(E,matrix4Scratch);b&&(N=WebMercatorProjection.geodeticLatitudeToMercatorAngle(i),B=1/(WebMercatorProjection.geodeticLatitudeToMercatorAngle(v)-N));var H=minimumScratch;H.x=Number.POSITIVE_INFINITY,H.y=Number.POSITIVE_INFINITY,H.z=Number.POSITIVE_INFINITY;var W=maximumScratch;W.x=Number.NEGATIVE_INFINITY,W.y=Number.NEGATIVE_INFINITY,W.z=Number.NEGATIVE_INFINITY;var q=Number.POSITIVE_INFINITY,j=h*p,Y=j+(0=this._maximumActiveTasks)){++this._activeTasks;var a=this;return when(canTransferArrayBuffer(),function(e){defined(n)?e||(n.length=0):n=emptyTransferableObjectArray;var t=a._nextID++,i=when.defer();return a._deferreds[t]=i,a._worker.postMessage({id:t,parameters:r,canTransferArrayBuffer:e},n),i.promise})}},TaskProcessor.prototype.initWebAssemblyModule=function(e){defined(this._worker)||(this._worker=createWorker(this));var n=when.defer(),a=this,o=this._worker;return getWebAssemblyLoaderConfig(this,e).then(function(r){return when(canTransferArrayBuffer(),function(e){var t,i=r.wasmBinary;defined(i)&&e&&(t=[i]),o.onmessage=function(e){o.onmessage=function(e){completeTask(a,e.data)},n.resolve(e.data)},o.postMessage({webAssemblyConfig:r},t)})}),n},TaskProcessor.prototype.isDestroyed=function(){return!1},TaskProcessor.prototype.destroy=function(){return defined(this._worker)&&this._worker.terminate(),destroyObject(this)},TaskProcessor.taskCompletedEvent=taskCompletedEvent,TaskProcessor._defaultWorkerModulePrefix="Workers/",TaskProcessor._workerModulePrefix=TaskProcessor._defaultWorkerModulePrefix,TaskProcessor._canTransferArrayBuffer=void 0,Object.defineProperties(TerrainData.prototype,{credits:{get:DeveloperError.throwInstantiationError},waterMask:{get:DeveloperError.throwInstantiationError}}),TerrainData.prototype.interpolateHeight=DeveloperError.throwInstantiationError,TerrainData.prototype.isChildAvailable=DeveloperError.throwInstantiationError,TerrainData.prototype.createMesh=DeveloperError.throwInstantiationError,TerrainData.prototype.upsample=DeveloperError.throwInstantiationError,TerrainData.prototype.wasCreatedByUpsampling=DeveloperError.throwInstantiationError,TerrainData.maximumAsynchronousTasks=5;var IndexDatatype={UNSIGNED_BYTE:WebGLConstants$1.UNSIGNED_BYTE,UNSIGNED_SHORT:WebGLConstants$1.UNSIGNED_SHORT,UNSIGNED_INT:WebGLConstants$1.UNSIGNED_INT,getSizeInBytes:function(e){switch(e){case IndexDatatype.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case IndexDatatype.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case IndexDatatype.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}},fromSizeInBytes:function(e){switch(e){case 2:return IndexDatatype.UNSIGNED_SHORT;case 4:return IndexDatatype.UNSIGNED_INT;case 1:return IndexDatatype.UNSIGNED_BYTE}},validate:function(e){return defined(e)&&(e===IndexDatatype.UNSIGNED_BYTE||e===IndexDatatype.UNSIGNED_SHORT||e===IndexDatatype.UNSIGNED_INT)},createTypedArray:function(e,t){return new(e>=CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(t)},createTypedArrayFromArrayBuffer:function(e,t,i,r){return new(e>=CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(t,i,r)}},IndexDatatype$1=Object.freeze(IndexDatatype);function TerrainProvider(){DeveloperError.throwInstantiationError()}Object.defineProperties(TerrainProvider.prototype,{errorEvent:{get:DeveloperError.throwInstantiationError},credit:{get:DeveloperError.throwInstantiationError},tilingScheme:{get:DeveloperError.throwInstantiationError},ready:{get:DeveloperError.throwInstantiationError},readyPromise:{get:DeveloperError.throwInstantiationError},hasWaterMask:{get:DeveloperError.throwInstantiationError},hasVertexNormals:{get:DeveloperError.throwInstantiationError},availability:{get:DeveloperError.throwInstantiationError}});var regularGridIndicesCache=[];TerrainProvider.getRegularGridIndices=function(e,t){var i=regularGridIndicesCache[e];defined(i)||(regularGridIndicesCache[e]=i=[]);var r=i[t];return defined(r)||addRegularGridIndices(e,t,r=e*tu.highestEncodedHeight?u.highestEncodedHeight:A)}return new HeightmapTerrainData({buffer:h,width:l,height:c,childTileMask:0,structure:this._structure,createdByUpsampling:!0})}},HeightmapTerrainData.prototype.isChildAvailable=function(e,t,i,r){var n=2;return i!==2*e&&++n,r!==2*t&&(n-=2),0!=(this._childTileMask&1<=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function rectangleContainsPosition(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function findMaxLevelFromNode(e,t,i){for(var r=0,n=!1;!n;){var a=t._nw&&rectangleContainsPosition(t._nw.extent,i),o=t._ne&&rectangleContainsPosition(t._ne.extent,i),s=t._sw&&rectangleContainsPosition(t._sw.extent,i),l=t._se&&rectangleContainsPosition(t._se.extent,i);if(1r;--u){var d=c[u];rectangleContainsPosition(d,i)&&(r=d.level)}t=t.parent}return r}function updateCoverageWithNode(e,t,i){if(t){var r=!1;for(a=0;at.east&&i.push(new Rectangle(t.east,n.south,n.east,n.north)),n.southt.north&&i.push(new Rectangle(Math.max(t.west,n.west),t.north,Math.min(t.east,n.east),n.north))):i.push(n)}return i}function formatError(e){var t=e.name,i=e.message,i=defined(t)&&defined(i)?t+": "+i:e.toString(),e=e.stack;return defined(e)&&(i+="\n"+e),i}function TileProviderError(e,t,i,r,n,a,o){this.provider=e,this.message=t,this.x=i,this.y=r,this.level=n,this.timesRetried=defaultValue(a,0),this.retry=!1,this.error=o}function WebMercatorTilingScheme(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._ellipsoid=defaultValue(e.ellipsoid,Ellipsoid.WGS84),this._numberOfLevelZeroTilesX=defaultValue(e.numberOfLevelZeroTilesX,1),this._numberOfLevelZeroTilesY=defaultValue(e.numberOfLevelZeroTilesY,1),this._projection=new WebMercatorProjection(this._ellipsoid),defined(e.rectangleSouthwestInMeters)&&defined(e.rectangleNortheastInMeters)?(this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters):(t=this._ellipsoid.maximumRadius*Math.PI,this._rectangleSouthwestInMeters=new Cartesian2(-t,-t),this._rectangleNortheastInMeters=new Cartesian2(t,t));var e=this._projection.unproject(this._rectangleSouthwestInMeters),t=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new Rectangle(e.longitude,e.latitude,t.longitude,t.latitude)}TileAvailability.prototype.isTileAvailable=function(e,t,i){i=this._tilingScheme.tileXYToRectangle(t,i,e,rectangleScratch$6);return Rectangle.center(i,cartographicScratch$4),this.computeMaximumLevelAtPosition(cartographicScratch$4)>=e},TileAvailability.prototype.computeChildMaskForTile=function(e,t,i){var r=e+1;if(r>=this._maximumLevel)return 0;e=0;return e|=this.isTileAvailable(r,2*t,2*i+1)?1:0,e|=this.isTileAvailable(r,2*t+1,2*i+1)?2:0,e|=this.isTileAvailable(r,2*t,2*i)?4:0,e|=this.isTileAvailable(r,2*t+1,2*i)?8:0},Object.defineProperties(QuadtreeNode.prototype,{nw:{get:function(){return this._nw||(this._nw=new QuadtreeNode(this.tilingScheme,this,this.level+1,2*this.x,2*this.y)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new QuadtreeNode(this.tilingScheme,this,this.level+1,2*this.x+1,2*this.y)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new QuadtreeNode(this.tilingScheme,this,this.level+1,2*this.x,2*this.y+1)),this._sw}},se:{get:function(){return this._se||(this._se=new QuadtreeNode(this.tilingScheme,this,this.level+1,2*this.x+1,2*this.y+1)),this._se}}}),TileProviderError.handleError=function(e,t,i,r,n,a,o,s,l){var c=e;return defined(e)?(c.provider=t,c.message=r,c.x=n,c.y=a,c.level=o,c.retry=!1,c.error=l,++c.timesRetried):c=new TileProviderError(t,r,n,a,o,0,l),0e._lodCount)&&(!!a.isTileAvailable(t,i,r)||!n.isTileAvailable(t,i,r)&&void 0)}}function findRange(e,t,i,r){for(var n=t-1,a=i-1,o=r[e.y*t+e.x],s=[],l={startX:e.x,startY:e.y,endX:0,endY:0},c=new Cartesian2(e.x+1,e.y+1),u=!1,d=!1;!u||!d;){var h=c.x,p=d?c.y+1:c.y;if(!u){for(var m=e.y;m>>0,i=defaultValue(i,0),a=i<0?Math.max(n+i,0):Math.min(i,n),r=defaultValue(r,n),o=r<0?Math.max(n+r,0):Math.min(r,n);ai.width?i.width=r:r<0&&(i.width-=r,i.x=t.x),e>i.height?i.height=e:e<0&&(i.height-=e,i.y=t.y),i},BoundingRectangle.intersect=function(e,t){var i=e.x,r=e.y,n=t.x,a=t.y;return i>n+t.width||i+e.widtha+t.height?Intersect$1.OUTSIDE:Intersect$1.INTERSECTING},BoundingRectangle.equals=function(e,t){return e===t||defined(e)&&defined(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height},BoundingRectangle.prototype.clone=function(e){return BoundingRectangle.clone(this,e)},BoundingRectangle.prototype.intersect=function(e){return BoundingRectangle.intersect(this,e)},BoundingRectangle.prototype.equals=function(e){return BoundingRectangle.equals(this,e)};var GeometryType={NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3},GeometryType$1=Object.freeze(GeometryType);function Matrix2(e,t,i,r){this[0]=defaultValue(e,0),this[1]=defaultValue(i,0),this[2]=defaultValue(t,0),this[3]=defaultValue(r,0)}Matrix2.packedLength=4,Matrix2.pack=function(e,t,i){return i=defaultValue(i,0),t[i++]=e[0],t[i++]=e[1],t[i++]=e[2],t[i++]=e[3],t},Matrix2.unpack=function(e,t,i){return t=defaultValue(t,0),(i=!defined(i)?new Matrix2:i)[0]=e[t++],i[1]=e[t++],i[2]=e[t++],i[3]=e[t++],i},Matrix2.clone=function(e,t){if(defined(e))return defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new Matrix2(e[0],e[2],e[1],e[3])},Matrix2.fromArray=function(e,t,i){return t=defaultValue(t,0),(i=!defined(i)?new Matrix2:i)[0]=e[t],i[1]=e[t+1],i[2]=e[t+2],i[3]=e[t+3],i},Matrix2.fromColumnMajorArray=function(e,t){return Matrix2.clone(e,t)},Matrix2.fromRowMajorArray=function(e,t){return defined(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new Matrix2(e[0],e[1],e[2],e[3])},Matrix2.fromScale=function(e,t){return defined(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new Matrix2(e.x,0,0,e.y)},Matrix2.fromUniformScale=function(e,t){return defined(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new Matrix2(e,0,0,e)},Matrix2.fromRotation=function(e,t){var i=Math.cos(e),e=Math.sin(e);return defined(t)?(t[0]=i,t[1]=e,t[2]=-e,t[3]=i,t):new Matrix2(i,-e,e,i)},Matrix2.toArray=function(e,t){return defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]},Matrix2.getElementIndex=function(e,t){return 2*e+t},Matrix2.getColumn=function(e,t,i){var r=2*t,t=e[r],r=e[1+r];return i.x=t,i.y=r,i},Matrix2.setColumn=function(e,t,i,r){t*=2;return(r=Matrix2.clone(e,r))[t]=i.x,r[1+t]=i.y,r},Matrix2.getRow=function(e,t,i){var r=e[t],t=e[t+2];return i.x=r,i.y=t,i},Matrix2.setRow=function(e,t,i,r){return(r=Matrix2.clone(e,r))[t]=i.x,r[t+2]=i.y,r};var scratchColumn=new Cartesian2;Matrix2.getScale=function(e,t){return t.x=Cartesian2.magnitude(Cartesian2.fromElements(e[0],e[1],scratchColumn)),t.y=Cartesian2.magnitude(Cartesian2.fromElements(e[2],e[3],scratchColumn)),t};var scratchScale$4=new Cartesian2;Matrix2.getMaximumScale=function(e){return Matrix2.getScale(e,scratchScale$4),Cartesian2.maximumComponent(scratchScale$4)},Matrix2.multiply=function(e,t,i){var r=e[0]*t[0]+e[2]*t[1],n=e[0]*t[2]+e[2]*t[3],a=e[1]*t[0]+e[3]*t[1],t=e[1]*t[2]+e[3]*t[3];return i[0]=r,i[1]=a,i[2]=n,i[3]=t,i},Matrix2.add=function(e,t,i){return i[0]=e[0]+t[0],i[1]=e[1]+t[1],i[2]=e[2]+t[2],i[3]=e[3]+t[3],i},Matrix2.subtract=function(e,t,i){return i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],i[3]=e[3]-t[3],i},Matrix2.multiplyByVector=function(e,t,i){var r=e[0]*t.x+e[2]*t.y,t=e[1]*t.x+e[3]*t.y;return i.x=r,i.y=t,i},Matrix2.multiplyByScalar=function(e,t,i){return i[0]=e[0]*t,i[1]=e[1]*t,i[2]=e[2]*t,i[3]=e[3]*t,i},Matrix2.multiplyByScale=function(e,t,i){return i[0]=e[0]*t.x,i[1]=e[1]*t.x,i[2]=e[2]*t.y,i[3]=e[3]*t.y,i},Matrix2.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},Matrix2.transpose=function(e,t){var i=e[0],r=e[2],n=e[1],e=e[3];return t[0]=i,t[1]=r,t[2]=n,t[3]=e,t},Matrix2.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t},Matrix2.equals=function(e,t){return e===t||defined(e)&&defined(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},Matrix2.equalsArray=function(e,t,i){return e[0]===t[i]&&e[1]===t[i+1]&&e[2]===t[i+2]&&e[3]===t[i+3]},Matrix2.equalsEpsilon=function(e,t,i){return i=defaultValue(i,0),e===t||defined(e)&&defined(t)&&Math.abs(e[0]-t[0])<=i&&Math.abs(e[1]-t[1])<=i&&Math.abs(e[2]-t[2])<=i&&Math.abs(e[3]-t[3])<=i},Matrix2.IDENTITY=Object.freeze(new Matrix2(1,0,0,1)),Matrix2.ZERO=Object.freeze(new Matrix2(0,0,0,0)),Matrix2.COLUMN0ROW0=0,Matrix2.COLUMN0ROW1=1,Matrix2.COLUMN1ROW0=2,Matrix2.COLUMN1ROW1=3,Object.defineProperties(Matrix2.prototype,{length:{get:function(){return Matrix2.packedLength}}}),Matrix2.prototype.clone=function(e){return Matrix2.clone(this,e)},Matrix2.prototype.equals=function(e){return Matrix2.equals(this,e)},Matrix2.prototype.equalsEpsilon=function(e,t){return Matrix2.equalsEpsilon(this,e,t)},Matrix2.prototype.toString=function(){return"("+this[0]+", "+this[2]+")\n("+this[1]+", "+this[3]+")"};var PrimitiveType={POINTS:WebGLConstants$1.POINTS,LINES:WebGLConstants$1.LINES,LINE_LOOP:WebGLConstants$1.LINE_LOOP,LINE_STRIP:WebGLConstants$1.LINE_STRIP,TRIANGLES:WebGLConstants$1.TRIANGLES,TRIANGLE_STRIP:WebGLConstants$1.TRIANGLE_STRIP,TRIANGLE_FAN:WebGLConstants$1.TRIANGLE_FAN,validate:function(e){return e===PrimitiveType.POINTS||e===PrimitiveType.LINES||e===PrimitiveType.LINE_LOOP||e===PrimitiveType.LINE_STRIP||e===PrimitiveType.TRIANGLES||e===PrimitiveType.TRIANGLE_STRIP||e===PrimitiveType.TRIANGLE_FAN}},PrimitiveType$1=Object.freeze(PrimitiveType);function Geometry(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=defaultValue(e.primitiveType,PrimitiveType$1.TRIANGLES),this.boundingSphere=e.boundingSphere,this.geometryType=defaultValue(e.geometryType,GeometryType$1.NONE),this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}Geometry.computeNumberOfVertices=function(e){var t,i,r=-1;for(t in e.attributes)e.attributes.hasOwnProperty(t)&&defined(e.attributes[t])&&defined(e.attributes[t].values)&&(r=(i=e.attributes[t]).values.length/i.componentsPerAttribute);return r};var rectangleCenterScratch$3=new Cartographic,enuCenterScratch=new Cartesian3,fixedFrameToEnuScratch=new Matrix4,boundingRectanglePointsCartographicScratch=[new Cartographic,new Cartographic,new Cartographic],boundingRectanglePointsEnuScratch=[new Cartesian2,new Cartesian2,new Cartesian2],points2DScratch$2=[new Cartesian2,new Cartesian2,new Cartesian2],pointEnuScratch=new Cartesian3,enuRotationScratch=new Quaternion,enuRotationMatrixScratch=new Matrix4,rotation2DScratch$1=new Matrix2;function GeometryAttribute(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=defaultValue(e.normalize,!1),this.values=e.values}function GeometryAttributes(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.position=e.position,this.normal=e.normal,this.st=e.st,this.bitangent=e.bitangent,this.tangent=e.tangent,this.color=e.color}Geometry._textureCoordinateRotationPoints=function(e,t,i,r){var n=Rectangle.center(r,rectangleCenterScratch$3),a=Cartographic.toCartesian(n,i,enuCenterScratch),n=Transforms.eastNorthUpToFixedFrame(a,i,fixedFrameToEnuScratch),o=Matrix4.inverse(n,fixedFrameToEnuScratch),s=boundingRectanglePointsEnuScratch,l=boundingRectanglePointsCartographicScratch;l[0].longitude=r.west,l[0].latitude=r.south,l[1].longitude=r.west,l[1].latitude=r.north,l[2].longitude=r.east,l[2].latitude=r.south;for(var c=pointEnuScratch,u=0;u<3;u++)Cartographic.toCartesian(l[u],i,c),c=Matrix4.multiplyByPointAsVector(o,c,c),s[u].x=c.x,s[u].y=c.y;var a=Quaternion.fromAxisAngle(Cartesian3.UNIT_Z,-t,enuRotationScratch),d=Matrix3.fromQuaternion(a,enuRotationMatrixScratch),h=e.length,p=Number.POSITIVE_INFINITY,m=Number.POSITIVE_INFINITY,f=Number.NEGATIVE_INFINITY,g=Number.NEGATIVE_INFINITY;for(u=0;u=r[t=defaultValue(t,0)]){if(t+1=r[t-1])return t-1;if(e>r[t])for(i=t;i=r[i]&&e=r[i]&&e>10),56320+(1023&a)))}return t},"undefined"!=typeof TextDecoder?getStringFromTypedArray.decode=getStringFromTypedArray.decodeWithTextDecoder:getStringFromTypedArray.decode=getStringFromTypedArray.decodeWithFromCharCode;var Intersections2D={};function QuantizedMeshTerrainData(e){this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;var t=this._quantizedVertices.length/3,i=this._uValues=this._quantizedVertices.subarray(0,t),r=this._vValues=this._quantizedVertices.subarray(t,2*t);function n(e,t){return r[e]-r[t]}function a(e,t){return i[e]-i[t]}this._heightValues=this._quantizedVertices.subarray(2*t,3*t),this._westIndices=sortIndicesIfNecessary(e.westIndices,n,t),this._southIndices=sortIndicesIfNecessary(e.southIndices,a,t),this._eastIndices=sortIndicesIfNecessary(e.eastIndices,n,t),this._northIndices=sortIndicesIfNecessary(e.northIndices,a,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=defaultValue(e.childTileMask,15),this._createdByUpsampling=defaultValue(e.createdByUpsampling,!1),this._waterMask=e.waterMask,this._mesh=void 0}Intersections2D.clipTriangleAtAxisAlignedThreshold=function(e,t,i,r,n,a){var o,s;defined(a)?a.length=0:a=[];var l,c,u,d,h,p,m=t?(o=ithis._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(i,e,t))return!0;if(!this._hasMetadata)return!1;for(var r=this._layers,n=r.length,a=0;athis._availability._maximumLevel||this._availability.isTileAvailable(i,e,t))&&this._hasMetadata)for(var r=this._layers,n=r.length,a=0;ar&&(s[t[u]]=c,++c);return(c-r+1)/(n/3)}};Tipsify.tipsify=function(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).indices,i=e.maximumIndex,r=defaultValue(e.cacheSize,24);function n(e,t,i,r,n,a,o){for(var s,l=-1,c=-1,u=0;ur&&(d.timeStamp=p,++p),++b}h=n(0,r,f,l,p,g,a)}return y};var GeometryPipeline={};function addTriangle(e,t,i,r,n){e[t++]=i,e[t++]=r,e[t++]=r,e[t++]=n,e[t++]=n,e[t]=i}function trianglesToLines(e){for(var t=e.length,i=t/3*6,r=IndexDatatype$1.createTypedArray(t,i),n=0,a=0;an&&(n=i[a]);e.indices=Tipsify.tipsify({indices:i,maximumIndex:n,cacheSize:t})}return e},GeometryPipeline.fitToUnsignedShortIndices=function(e){var t=[],i=Geometry.computeNumberOfVertices(e);if(defined(e.indices)&&i>=CesiumMath.SIXTY_FOUR_KILOBYTES){var r,n=[],a=[],o=0,s=copyAttributesDescriptions(e.attributes),l=e.indices,c=l.length;e.primitiveType===PrimitiveType$1.TRIANGLES?r=3:e.primitiveType===PrimitiveType$1.LINES?r=2:e.primitiveType===PrimitiveType$1.POINTS&&(r=1);for(var u=0;u=CesiumMath.SIXTY_FOUR_KILOBYTES&&(t.push(new Geometry({attributes:s,indices:a,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),n=[],a=[],o=0,s=copyAttributesDescriptions(e.attributes))}0!==a.length&&t.push(new Geometry({attributes:s,indices:a,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var scratchProjectTo2DCartesian3=new Cartesian3,scratchProjectTo2DCartographic=new Cartographic;GeometryPipeline.projectTo2D=function(e,t,i,r,n){for(var a=e.attributes[t],o=(n=defined(n)?n:new GeographicProjection).ellipsoid,s=a.values,l=new Float64Array(s.length),c=0,u=0;uCesiumMath.EPSILON6?1:0},p0Scratch=new Cartesian3,p1Scratch$2=new Cartesian3,p2Scratch$2=new Cartesian3,barycentricScratch=new Cartesian3;function computeTriangleAttributes(e,t,i,r,n,a,o,s,l,c,u,d,h,p,m,f){if(defined(a)||defined(o)||defined(s)||defined(l)||defined(c)||0!==p){var g,_=barycentricCoordinates(r,Cartesian3.fromArray(n,3*e,p0Scratch),Cartesian3.fromArray(n,3*t,p1Scratch$2),Cartesian3.fromArray(n,3*i,p2Scratch$2),barycentricScratch);if(defined(a)&&interpolateAndPackCartesian3(e,t,i,_,a,d.normal.values,f,!0),defined(c)&&(n=Cartesian3.fromArray(c,3*e,p0Scratch),a=Cartesian3.fromArray(c,3*t,p1Scratch$2),c=Cartesian3.fromArray(c,3*i,p2Scratch$2),Cartesian3.multiplyByScalar(n,_.x,n),Cartesian3.multiplyByScalar(a,_.y,a),Cartesian3.multiplyByScalar(c,_.z,c),Cartesian3.equals(n,Cartesian3.ZERO)&&Cartesian3.equals(a,Cartesian3.ZERO)&&Cartesian3.equals(c,Cartesian3.ZERO)?((g=p0Scratch).x=0,g.y=0,g.z=0):(g=Cartesian3.add(n,a,n),Cartesian3.add(g,c,g),Cartesian3.normalize(g,g)),Cartesian3.pack(g,d.extrudeDirection.values,3*f)),defined(u)&&interpolateAndPackBoolean(e,t,i,_,u,d.applyOffset.values,f),defined(o)&&interpolateAndPackCartesian3(e,t,i,_,o,d.tangent.values,f,!0),defined(s)&&interpolateAndPackCartesian3(e,t,i,_,s,d.bitangent.values,f,!0),defined(l)&&interpolateAndPackCartesian2(e,t,i,_,l,d.st.values,f),0CesiumMath.PI&&(o.north=0CesiumMath.EPSILON8?(o=calculateInverseM(calculateM(n,r,e.latitude)+i*Math.cos(t),n,r),l=calculateSigma(n,e.latitude),s=calculateSigma(n,o),l=Math.tan(t)*(s-l),CesiumMath.negativePiToPi(e.longitude+l)):(o=e.latitude,l=i/(0===n?r*Math.cos(e.latitude):(n=Math.sin(e.latitude),r*Math.cos(e.latitude)/Math.sqrt(1-c*n*n))),080*i){for(var h=r=e[0],p=n=e[1],m=i;ma.x?n.x>o.x?n:o:a.x>o.x?a:o).x,u=(n.y>a.y?n.y>o.y?n:o:a.y>o.y?a:o).y,d=zOrder(s,l,t,i,r),h=zOrder(c,u,t,i,r),p=e.prevZ,m=e.nextZ;p&&p.z>=d&&m&&m.z<=h;){if(p!==e.prev&&p!==e.next&&pointInTriangle(n.x,n.y,a.x,a.y,o.x,o.y,p.x,p.y)&&0<=area(p.prev,p,p.next))return;if(p=p.prevZ,m!==e.prev&&m!==e.next&&pointInTriangle(n.x,n.y,a.x,a.y,o.x,o.y,m.x,m.y)&&0<=area(m.prev,m,m.next))return;m=m.nextZ}for(;p&&p.z>=d;){if(p!==e.prev&&p!==e.next&&pointInTriangle(n.x,n.y,a.x,a.y,o.x,o.y,p.x,p.y)&&0<=area(p.prev,p,p.next))return;p=p.prevZ}for(;m&&m.z<=h;){if(m!==e.prev&&m!==e.next&&pointInTriangle(n.x,n.y,a.x,a.y,o.x,o.y,m.x,m.y)&&0<=area(m.prev,m,m.next))return;m=m.nextZ}return 1}}function cureLocalIntersections(e,t,i){var r=e;do{var n=r.prev,a=r.next.next}while(!equals(n,a)&&intersects$1(n,r,r.next,a)&&locallyInside(n,a)&&locallyInside(a,n)&&(t.push(n.i/i),t.push(r.i/i),t.push(a.i/i),removeNode(r),removeNode(r.next),r=e=a),(r=r.next)!==e);return filterPoints(r)}function splitEarcut(e,t,i,r,n,a){var o=e;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&isValidDiagonal(o,s)){var l=splitPolygon(o,s),o=filterPoints(o,o.next),l=filterPoints(l,l.next);return earcutLinked(o,t,i,r,n,a),void earcutLinked(l,t,i,r,n,a)}s=s.next}}while((o=o.next)!==e)}function eliminateHoles(e,t,i,r){for(var n,a=[],o=0,s=t.length;o=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=n&&o=r.x&&r.x>=u&&n!==r.x&&pointInTriangle(ai.x||r.x===i.x&§orContainsSector(i,r)))&&(i=r,h=l)),r=r.next,r!==c;);return i}function sectorContainsSector(e,t){return area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0}function indexCurve(e,t,i,r){for(var n=e;null===n.z&&(n.z=zOrder(n.x,n.y,t,i,r)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next,n!==e;);n.prevZ.nextZ=null,n.prevZ=null,sortLinked(n)}function sortLinked(e){var t,i,r,n,a,o,s,l,c=1;do{for(i=e,a=e=null,o=0;i;){for(o++,r=i,t=s=0;t=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function sign(e){return 0a!=i.next.y>a&&i.next.y!==i.y&&n<(i.next.x-i.x)*(a-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next,i!==e;);return r}function splitPolygon(e,t){var i=new Node$2(e.i,e.x,e.y),r=new Node$2(t.i,t.x,t.y),n=e.next,a=t.prev;return(e.next=t).prev=e,(i.next=n).prev=i,(r.next=i).prev=r,(a.next=r).prev=a,r}function insertNode(e,t,i,r){i=new Node$2(e,t,i);return r?(i.next=r.next,(i.prev=r).next.prev=i,r.next=i):(i.prev=i).next=i,i}function removeNode(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Node$2(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function signedArea(e,t,i,r){for(var n=0,a=t,o=i-r;ae.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,i}},Queue.prototype.peek=function(){if(0!==this._length)return this._array[this._offset]},Queue.prototype.contains=function(e){return-1!==this._array.indexOf(e)},Queue.prototype.clear=function(){this._array.length=this._offset=this._length=0},Queue.prototype.sort=function(e){0CesiumMath.EPSILON12);n=x*(t*t-i*i)/(i*i),r=n*(256+n*(n*(74-47*n)-128))/1024,t=b*b,r=i*(1+n*(4096+n*(n*(320-175*n)-768))/16384)*(S-r*C*(b+r*(v*(2*t-1)-r*b*(4*C*C-3)*(4*t-3)/6)/4)),t=Math.atan2(c*_,d-p*g),o=Math.atan2(o*_,d*g-p);e._distance=r,e._startHeading=t,e._endHeading=o,e._uSquared=n}var scratchCart1=new Cartesian3,scratchCart2$1=new Cartesian3;function computeProperties(e,t,i,r){Cartesian3.normalize(r.cartographicToCartesian(t,scratchCart2$1),scratchCart1),Cartesian3.normalize(r.cartographicToCartesian(i,scratchCart2$1),scratchCart2$1),vincentyInverseFormula(e,r.maximumRadius,r.minimumRadius,t.longitude,t.latitude,i.longitude,i.latitude),e._start=Cartographic.clone(t,e._start),e._end=Cartographic.clone(i,e._end),e._start.height=0,e._end.height=0,setConstants(e)}function EllipsoidGeodesic(e,t,i){i=defaultValue(i,Ellipsoid.WGS84);this._ellipsoid=i,this._start=new Cartographic,this._end=new Cartographic,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,defined(e)&&defined(t)&&computeProperties(this,e,t,i)}Object.defineProperties(EllipsoidGeodesic.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}}),EllipsoidGeodesic.prototype.setEndPoints=function(e,t){computeProperties(this,e,t,this._ellipsoid)},EllipsoidGeodesic.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)},EllipsoidGeodesic.prototype.interpolateUsingSurfaceDistance=function(e,t){var i=this._constants,r=i.distanceRatio+e/i.b,n=Math.cos(2*r),a=Math.cos(4*r),o=Math.cos(6*r),s=Math.sin(2*r),l=Math.sin(4*r),c=Math.sin(6*r),u=Math.sin(8*r),d=r*r,h=r*d,p=i.u8Over256,m=i.u2Over4,f=i.u6Over64,e=i.u4Over16,d=2*h*p*n/3+r*(1-m+7*e/4-15*f/4+579*p/64-(e-15*f/4+187*p/16)*n-(5*f/4-115*p/16)*a-29*p*o/16)+(m/2-e+71*f/32-85*p/16)*s+(5*e/16-5*f/4+383*p/96)*l-d*((f-11*p/2)*s+5*p*l/2)+(29*f/96-29*p/16)*c+539*p*u/1536,s=Math.asin(Math.sin(d)*i.cosineAlpha),l=Math.atan(i.a/i.b*Math.tan(s));d-=i.sigma;f=Math.cos(2*i.sigma+d),c=Math.sin(d),p=Math.cos(d),u=i.cosineU*p,s=i.sineU*c,f=Math.atan2(c*i.sineHeading,u-s*i.cosineHeading)-computeDeltaLambda(i.f,i.sineAlpha,i.cosineSquaredAlpha,d,c,p,f);return defined(t)?(t.longitude=this._start.longitude+f,t.latitude=l,t.height=0,t):new Cartographic(this._start.longitude+f,l,0)};var PolylinePipeline={numberOfPoints:function(e,t,i){t=Cartesian3.distance(e,t);return Math.ceil(t/i)},numberOfPointsRhumbLine:function(e,t,i){t=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(t/(i*i))))}},cartoScratch$2=new Cartographic;PolylinePipeline.extractHeights=function(e,t){for(var i=e.length,r=new Array(i),n=0;n This application is using Cesium\'s default ion access token. Please assign Cesium.Ion.defaultAccessToken with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at https://cesium.com.',!0)),defaultTokenCredit},defined(Object.create)&&(IonResource.prototype=Object.create(Resource.prototype),IonResource.prototype.constructor=IonResource),IonResource.fromAssetId=function(e,t){var i=IonResource._createEndpointResource(e,t);return i.fetchJson().then(function(e){return new IonResource(e,i)})},Object.defineProperties(IonResource.prototype,{credits:{get:function(){return defined(this._ionRoot)?this._ionRoot.credits:(defined(this._credits)||(this._credits=IonResource.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource)),this._credits)}}}),IonResource.getCreditsFromEndpoint=function(e,t){e=e.attributions.map(Credit.getIonCredit),t=Ion.getDefaultTokenCredit(t.queryParameters.access_token);return defined(t)&&e.push(Credit.clone(t)),e},IonResource.prototype.clone=function(e){var t=defaultValue(this._ionRoot,this);return defined(e)||(e=new IonResource(t._ionEndpoint,t._ionEndpointResource)),(e=Resource.prototype.clone.call(this,e))._ionRoot=t,e._isExternal=this._isExternal,e},IonResource.prototype.fetchImage=function(e){var t;return this._isExternal||(t=e,e={preferBlob:!0},defined(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)),Resource.prototype.fetchImage.call(this,e)},IonResource.prototype._makeRequest=function(e){return this._isExternal||new URI(this.url).authority!==this._ionEndpointDomain||(defined(e.headers)||(e.headers={}),e.headers.Authorization="Bearer "+this._ionEndpoint.accessToken),Resource.prototype._makeRequest.call(this,e)},IonResource._createEndpointResource=function(e,t){t=defaultValue(t,defaultValue.EMPTY_OBJECT);var i=defaultValue(t.server,Ion.defaultServer),t=defaultValue(t.accessToken,Ion.defaultAccessToken),i=Resource.createIfNeeded(i),e={url:"v1/assets/"+e+"/endpoint"};return defined(t)&&(e.queryParameters={access_token:t}),i.getDerivedResource(e)};var faces=[new Cartesian3,new Cartesian3,new Cartesian3];Cartesian3.clone(Cartesian3.UNIT_X,faces[0]),Cartesian3.clone(Cartesian3.UNIT_Y,faces[1]),Cartesian3.clone(Cartesian3.UNIT_Z,faces[2]);var scratchPlaneCenter=new Cartesian3,scratchPlaneNormal=new Cartesian3,scratchPlane$1=new Plane(new Cartesian3(1,0,0),0);CullingVolume.fromBoundingSphere=function(e,t){defined(t)||(t=new CullingVolume);var i=faces.length,r=t.planes;r.length=2*i;for(var n=e.center,a=e.radius,o=0,s=0;s>2],r=(3&s)<<4,o=1;break;case 1:n[a++]=l[r|s>>4],r=(15&s)<<2,o=2;break;case 2:n[a++]=l[r|s>>6],n[a++]=l[63&s],o=0}}return o&&(n[a++]=l[r],n[a]=61,1===o&&(n[a+1]=61)),String.fromCharCode.apply(String,n)};var u="invalid encoding";i.decode=function(e,t,i){for(var r,n=i,a=0,o=0;o>4,r=s,a=2;break;case 2:t[i++]=(15&r)<<4|(60&s)>>2,r=s,a=3;break;case 3:t[i++]=(3&r)<<6|s,a=0}}if(1===a)throw Error(u);return i-n},i.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},{}],3:[function(e,t,i){function r(){this._listeners={}}(t.exports=r).prototype.on=function(e,t,i){return(this._listeners[e]||(this._listeners[e]=[])).push({fn:t,ctx:i||this}),this},r.prototype.off=function(e,t){if(e===undefined$1)this._listeners={};else if(t===undefined$1)this._listeners[e]=[];else for(var i=this._listeners[e],r=0;r>>1,a=null,o=r;return function(e){if(e<1||n>10),a[o++]=56320+(1023&r)):a[o++]=(15&r)<<12|(63&e[t++])<<6|63&e[t++],8191>6|192:(55296==(64512&r)&&56320==(64512&(n=e.charCodeAt(o+1)))?(r=65536+((1023&r)<<10)+(1023&n),++o,t[i++]=r>>18|240,t[i++]=r>>12&63|128):t[i++]=r>>12|224,t[i++]=r>>6&63|128),t[i++]=63&r|128);return i-a}},{}],7:[function(e,t,i){var r=i;function n(){r.Reader._configure(r.BufferReader),r.util._configure()}r.build="minimal",r.roots={},r.Writer=e(14),r.BufferWriter=e(15),r.Reader=e(8),r.BufferReader=e(9),r.util=e(13),r.rpc=e(10),r.configure=n,r.Writer._configure(r.BufferWriter),n()},{10:10,13:13,14:14,15:15,8:8,9:9}],8:[function(e,t,i){t.exports=l;var r,n=e(13),a=n.LongBits,o=n.utf8;function s(e,t){return RangeError("index out of range: "+e.pos+" + "+(t||1)+" > "+e.len)}function l(e){this.buf=e,this.pos=0,this.len=e.length}var c,u="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new l(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new l(e);throw Error("illegal buffer")};function d(){var e=new a(0,0),t=0;if(!(4=this.len)throw s(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,4>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw s(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function h(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function p(){if(this.pos+8>this.len)throw s(this,8);return new a(h(this.buf,this.pos+=4),h(this.buf,this.pos+=4))}l.create=n.Buffer?function(e){return(l.create=function(e){return n.Buffer.isBuffer(e)?new r(e):u(e)})(e)}:u,l.prototype._slice=n.Array.prototype.subarray||n.Array.prototype.slice,l.prototype.uint32=(c=4294967295,function(){if(c=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return c;if((this.pos+=5)>this.len)throw this.pos=this.len,s(this,10);return c}),l.prototype.int32=function(){return 0|this.uint32()},l.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},l.prototype.bool=function(){return 0!==this.uint32()},l.prototype.fixed32=function(){if(this.pos+4>this.len)throw s(this,4);return h(this.buf,this.pos+=4)},l.prototype.sfixed32=function(){if(this.pos+4>this.len)throw s(this,4);return 0|h(this.buf,this.pos+=4)};var m,f,g="undefined"!=typeof Float32Array?(m=new Float32Array(1),f=new Uint8Array(m.buffer),m[0]=-0,f[3]?function(e,t){return f[0]=e[t],f[1]=e[t+1],f[2]=e[t+2],f[3]=e[t+3],m[0]}:function(e,t){return f[0]=e[t+3],f[1]=e[t+2],f[2]=e[t+1],f[3]=e[t],m[0]}):function(e,t){var i=h(e,t+4),e=2*(i>>31)+1,t=i>>>23&255,i=8388607&i;return 255==t?i?NaN:1/0*e:0==t?1401298464324817e-60*e*i:e*Math.pow(2,t-150)*(8388608+i)};l.prototype.float=function(){if(this.pos+4>this.len)throw s(this,4);var e=g(this.buf,this.pos);return this.pos+=4,e};var _,y,C="undefined"!=typeof Float64Array?(_=new Float64Array(1),y=new Uint8Array(_.buffer),_[0]=-0,y[7]?function(e,t){return y[0]=e[t],y[1]=e[t+1],y[2]=e[t+2],y[3]=e[t+3],y[4]=e[t+4],y[5]=e[t+5],y[6]=e[t+6],y[7]=e[t+7],_[0]}:function(e,t){return y[0]=e[t+7],y[1]=e[t+6],y[2]=e[t+5],y[3]=e[t+4],y[4]=e[t+3],y[5]=e[t+2],y[6]=e[t+1],y[7]=e[t],_[0]}):function(e,t){var i=h(e,t+4),r=h(e,t+8),e=2*(r>>31)+1,t=r>>>20&2047,i=4294967296*(1048575&r)+i;return 2047==t?i?NaN:1/0*e:0==t?5e-324*e*i:e*Math.pow(2,t-1075)*(i+4503599627370496)};l.prototype.double=function(){if(this.pos+8>this.len)throw s(this,4);var e=C(this.buf,this.pos);return this.pos+=8,e},l.prototype.bytes=function(){var e=this.uint32(),t=this.pos,i=this.pos+e;if(i>this.len)throw s(this,e);return this.pos+=e,t===i?new this.buf.constructor(0):this._slice.call(this.buf,t,i)},l.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},l.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw s(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw s(this)}while(128&this.buf[this.pos++]);return this},l.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;;){if(4==(e=7&this.uint32()))break;this.skipType(e)}break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},l._configure=function(e){r=e;var t=n.Long?"toLong":"toNumber";n.merge(l.prototype,{int64:function(){return d.call(this)[t](!1)},uint64:function(){return d.call(this)[t](!0)},sint64:function(){return d.call(this).zzDecode()[t](!1)},fixed64:function(){return p.call(this)[t](!0)},sfixed64:function(){return p.call(this)[t](!1)}})}},{13:13}],9:[function(e,t,i){t.exports=n;var r=e(8);(n.prototype=Object.create(r.prototype)).constructor=n;e=e(13);function n(e){r.call(this,e)}e.Buffer&&(n.prototype._slice=e.Buffer.prototype.slice),n.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len))}},{13:13,8:8}],10:[function(e,t,i){i.Service=e(11)},{11:11}],11:[function(e,t,i){t.exports=r;var s=e(13);function r(e,t,i){if("function"!=typeof e)throw TypeError("rpcImpl must be a function");s.EventEmitter.call(this),this.rpcImpl=e,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(i)}((r.prototype=Object.create(s.EventEmitter.prototype)).constructor=r).prototype.rpcCall=function e(i,t,r,n,a){if(!n)throw TypeError("request must be specified");var o=this;if(!a)return s.asPromise(e,o,i,t,r,n);if(!o.rpcImpl)return setTimeout(function(){a(Error("already ended"))},0),undefined$1;try{return o.rpcImpl(i,t[o.requestDelimited?"encodeDelimited":"encode"](n).finish(),function(e,t){if(e)return o.emit("error",e,i),a(e);if(null===t)return o.end(!0),undefined$1;if(!(t instanceof r))try{t=r[o.responseDelimited?"decodeDelimited":"decode"](t)}catch(e){return o.emit("error",e,i),a(e)}return o.emit("data",t,i),a(null,t)})}catch(e){return o.emit("error",e,i),setTimeout(function(){a(e)},0),undefined$1}},r.prototype.end=function(e){return this.rpcImpl&&(e||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{13:13}],12:[function(e,t,i){t.exports=n;var r=e(13);function n(e,t){this.lo=e>>>0,this.hi=t>>>0}var a=n.zero=new n(0,0);a.toNumber=function(){return 0},a.zzEncode=a.zzDecode=function(){return this},a.length=function(){return 1};n.zeroHash="\0\0\0\0\0\0\0\0";n.fromNumber=function(e){if(0===e)return a;var t=e<0,i=(e=t?-e:e)>>>0,e=(e-i)/4294967296>>>0;return t&&(e=~e>>>0,i=~i>>>0,4294967295<++i&&(i=0,4294967295<++e&&(e=0))),new n(i,e)},n.from=function(e){if("number"==typeof e)return n.fromNumber(e);if(r.isString(e)){if(!r.Long)return n.fromNumber(parseInt(e,10));e=r.Long.fromString(e)}return e.low||e.high?new n(e.low>>>0,e.high>>>0):a},n.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,e=~this.hi>>>0;return-(t+4294967296*(e=!t?e+1>>>0:e))}return this.lo+4294967296*this.hi},n.prototype.toLong=function(e){return r.Long?new r.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var o=String.prototype.charCodeAt;n.fromHash=function(e){return"\0\0\0\0\0\0\0\0"===e?a:new n((o.call(e,0)|o.call(e,1)<<8|o.call(e,2)<<16|o.call(e,3)<<24)>>>0,(o.call(e,4)|o.call(e,5)<<8|o.call(e,6)<<16|o.call(e,7)<<24)>>>0)},n.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},n.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},n.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},n.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,i=this.hi>>>24;return 0==i?0==t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:i<128?9:10}},{13:13}],13:[function(e,t,i){var r=i;function n(e,t,i){for(var r=Object.keys(t),n=0;n>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;127>>7;t[i++]=e.lo}function f(e,t,i){t[i++]=255&e,t[i++]=e>>>8&255,t[i++]=e>>>16&255,t[i]=e>>>24}d.create=n.Buffer?function(){return(d.create=function(){return new r})()}:function(){return new d},d.alloc=function(e){return new n.Array(e)},n.Array!==Array&&(d.alloc=n.pool(d.alloc,n.Array.prototype.subarray)),d.prototype.push=function(e,t,i){return this.tail=this.tail.next=new l(e,t,i),this.len+=t,this},(p.prototype=Object.create(l.prototype)).fn=function(e,t,i){for(;127>>=7;t[i]=e},d.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new p((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},d.prototype.int32=function(e){return e<0?this.push(m,10,a.fromNumber(e)):this.uint32(e)},d.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},d.prototype.int64=d.prototype.uint64=function(e){e=a.from(e);return this.push(m,e.length(),e)},d.prototype.sint64=function(e){e=a.from(e).zzEncode();return this.push(m,e.length(),e)},d.prototype.bool=function(e){return this.push(h,1,e?1:0)},d.prototype.sfixed32=d.prototype.fixed32=function(e){return this.push(f,4,e>>>0)},d.prototype.sfixed64=d.prototype.fixed64=function(e){e=a.from(e);return this.push(f,4,e.lo).push(f,4,e.hi)};var g,_,y="undefined"!=typeof Float32Array?(g=new Float32Array(1),_=new Uint8Array(g.buffer),g[0]=-0,_[3]?function(e,t,i){g[0]=e,t[i++]=_[0],t[i++]=_[1],t[i++]=_[2],t[i]=_[3]}:function(e,t,i){g[0]=e,t[i++]=_[3],t[i++]=_[2],t[i++]=_[1],t[i]=_[0]}):function(e,t,i){var r=e<0?1:0;0===(e=r?-e:e)?f(0<1/e?0:2147483648,t,i):isNaN(e)?f(2147483647,t,i):f(34028234663852886e22>>0:e<11754943508222875e-54?(r<<31|Math.round(e/1401298464324817e-60))>>>0:(r<<31|(r=Math.floor(Math.log(e)/Math.LN2))+127<<23|8388607&Math.round(e*Math.pow(2,-r)*8388608))>>>0,t,i)};d.prototype.float=function(e){return this.push(y,4,e)};var C,v,S="undefined"!=typeof Float64Array?(C=new Float64Array(1),v=new Uint8Array(C.buffer),C[0]=-0,v[7]?function(e,t,i){C[0]=e,t[i++]=v[0],t[i++]=v[1],t[i++]=v[2],t[i++]=v[3],t[i++]=v[4],t[i++]=v[5],t[i++]=v[6],t[i]=v[7]}:function(e,t,i){C[0]=e,t[i++]=v[7],t[i++]=v[6],t[i++]=v[5],t[i++]=v[4],t[i++]=v[3],t[i++]=v[2],t[i++]=v[1],t[i]=v[0]}):function(e,t,i){var r,n,a=e<0?1:0;0===(e=a?-e:e)?(f(0,t,i),f(0<1/e?0:2147483648,t,i+4)):isNaN(e)?(f(4294967295,t,i),f(2147483647,t,i+4)):17976931348623157e292>>0,t,i+4)):e<22250738585072014e-324?(f((r=e/5e-324)>>>0,t,i),f((a<<31|r/4294967296)>>>0,t,i+4)):(1024===(n=Math.floor(Math.log(e)/Math.LN2))&&(n=1023),f(4503599627370496*(r=e*Math.pow(2,-n))>>>0,t,i),f((a<<31|n+1023<<20|1048576*r&1048575)>>>0,t,i+4))};d.prototype.double=function(e){return this.push(S,8,e)};var x=n.Array.prototype.set?function(e,t,i){t.set(e,i)}:function(e,t,i){for(var r=0;r>>0;return i?(n.isString(e)&&(t=d.alloc(i=o.length(e)),o.decode(e,t,0),e=t),this.uint32(i).push(x,i,e)):this.push(h,1,0)},d.prototype.string=function(e){var t=s.length(e);return t?this.uint32(t).push(s.write,t,e):this.push(h,1,0)},d.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new l(c,0,0),this.len=0,this},d.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new l(c,0,0),this.len=0),this},d.prototype.ldelim=function(){var e=this.head,t=this.tail,i=this.len;return this.reset().uint32(i),i&&(this.tail.next=e.next,this.tail=t,this.len+=i),this},d.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),i=0;e;)e.fn(e.val,t,i),i+=e.len,e=e.next;return t},d._configure=function(e){r=e}},{13:13}],15:[function(e,t,i){t.exports=o;var r=e(14);(o.prototype=Object.create(r.prototype)).constructor=o;var n=e(13),a=n.Buffer;function o(){r.call(this)}o.alloc=function(e){return(o.alloc=n._Buffer_allocUnsafe)(e)};var s=a&&a.prototype instanceof Uint8Array&&"set"===a.prototype.set.name?function(e,t,i){t.set(e,i)}:function(e,t,i){if(e.copy)e.copy(t,i,0,e.length);else for(var r=0;r>>0;return this.uint32(t),t&&this.push(s,t,e),this},o.prototype.string=function(e){var t=a.byteLength(e);return this.uint32(t),t&&this.push(l,t,e),this}},{13:13,14:14}]},zLb={},ALb=[7],global.protobuf=function e(t){var i=zLb[t];return i||yLb[t][0].call(i=zLb[t]={exports:{}},e,i,i.exports),i.exports}(ALb[0])}(tmp$6);var protobuf=tmp$6.protobuf;function isBitSet(e,t){return 0!=(e&t)}var childrenBitmasks=[1,2,4,8],anyChildBitmask=15,cacheFlagBitmask=16,imageBitmask=64,terrainBitmask=128;function GoogleEarthEnterpriseTileInformation(e,t,i,r,n,a){this._bits=e,this.cnodeVersion=t,this.imageryVersion=i,this.terrainVersion=r,this.imageryProvider=n,this.terrainProvider=a,this.ancestorHasTerrain=!1,this.terrainState=void 0}function stringToBuffer(e){for(var t=e.length,i=new ArrayBuffer(t),r=new Uint8Array(i),n=0;nmF8J´Ýð.ÝuڌDt"úa"\f3"So¯9D\vŒ9Ù9L¹¿«\\ŒP_Ÿ"uxéq‘h;ÁěðMª>}æÎI‰Ææx\fa1-¤O¥~q ˆì\r1èN\v\0nPh}=\b\r•¦n£h—$[kó#ó¶s³\r\v@ÀŸØQ]ú".jßI\0¹ wUÆïj¿{GLƒîÜÜF…©­S+S4ÿ”Yä8è1ƒN¹XFkË-#†’p\x005ˆ"Ï1²&/çÃu-6,rt°#G·ÓÑ&…7râ\0ŒDÏÚ3-Þ`†i#i*|ÍKQ\r•T9w.)ê¦P¢joP™\\>TûïP[\vE‰m(w7ێJfJo™ åpâ¹q~\fmI-zþrÇòY0»]såÉ êxì ðŠB|G`°½&·q¶ÇŸÑ3‚=Ó«îc™È+S D\\qÆÌD2O<ÊÀ)=RÓaX©}e´ÜÏ\rô=ñ\b©BÚ#\tØ¿^PIøMÀËGLO÷{+ØÅ1’;µoÜl\r’ˆўÛ?âéÚ_ԄâFaZÞUϤ\0¾ýÎgñJi—æ HØ]~®q N®ÀV©‘<‚rçvì)IÖ]-ƒãÛ6©;f—‡jÕ¶=P^R¹KÇsWxÉô.Y•“oÐKW>\'\'Ç`Û;íšSD>?’mw¢\në?R¨ÆU^1I7…ôÅ&-©¿‹\'TÚÃj å*x°Öprª‹h½ˆ÷_H±~ÀXL?fù>áeÀp§Ï8i¯ðVldIœ\'­xtO‡ÞV9\0Úw\vË-‰û5Oõ\bQ`Á\nZGM&30xÚÀœFGâ[y`In7gS\n>éìF9²ñ4\rƄSuná\fYÙÞ)…{II¥wy¾IV.6ç\v:»Ob{ÒM1•/½8{¨O!áìFpv•})"xˆ\nÝ\\ÚÞQÏðüYRe|3ßóHÚ»*uÛ`²Ôüíì5¨ÿ(1-È܈F|Š["');function GoogleEarthEnterpriseMetadata(e){var t=e;"string"==typeof t||t instanceof Resource||(t=e.url);t=Resource.createIfNeeded(t);t.appendForwardSlash(),this._resource=t,this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=CesiumMath.EPSILON12,this.providers={},this.key=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={};var i=this;this._readyPromise=requestDbRoot(this).then(function(){return i.getQuadTreePacket("",i._quadPacketVersion)}).then(function(){return!0}).otherwise(function(e){var t="An error occurred while accessing "+getMetadataResource(i,"",1).url+".";return when.reject(new RuntimeError(t))})}Object.defineProperties(GoogleEarthEnterpriseMetadata.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}},readyPromise:{get:function(){return this._readyPromise}}}),GoogleEarthEnterpriseMetadata.tileXYToQuadKey=function(e,t,i){for(var r="",n=i;0<=n;--n){var a=1<CesiumMath.PI_OVER_TWO&&(s=!0,o=Cartesian3.subtract(a,i,normalEndpointScratch),c=l.cartesianToCartographic(o,endPosCartographicScratch)),c.height=0;c=e.project(c,n);return(n=Cartesian3.subtract(c,r,n)).z=0,n=Cartesian3.normalize(n,n),s&&Cartesian3.negate(n,n),n}var adjustHeightNormalScratch=new Cartesian3,adjustHeightOffsetScratch=new Cartesian3;function adjustHeights(e,t,i,r,n,a){var o=Cartesian3.subtract(t,e,adjustHeightNormalScratch);Cartesian3.normalize(o,o);i-=WALL_INITIAL_MIN_HEIGHT,i=Cartesian3.multiplyByScalar(o,i,adjustHeightOffsetScratch);Cartesian3.add(e,i,n);r-=WALL_INITIAL_MAX_HEIGHT,i=Cartesian3.multiplyByScalar(o,r,adjustHeightOffsetScratch);Cartesian3.add(t,i,a)}var nudgeDirectionScratch=new Cartesian3;function nudgeXZ(e,t){var i=Plane.getPointDistance(XZ_PLANE,e),r=Plane.getPointDistance(XZ_PLANE,t),n=nudgeDirectionScratch;CesiumMath.equalsEpsilon(i,0,CesiumMath.EPSILON2)?(n=direction(t,e,n),Cartesian3.multiplyByScalar(n,CesiumMath.EPSILON2,n),Cartesian3.add(e,n,e)):CesiumMath.equalsEpsilon(r,0,CesiumMath.EPSILON2)&&(n=direction(e,t,n),Cartesian3.multiplyByScalar(n,CesiumMath.EPSILON2,n),Cartesian3.add(t,n,t))}function nudgeCartographic(e,t){var i=Math.abs(e.longitude),r=Math.abs(t.longitude);if(CesiumMath.equalsEpsilon(i,CesiumMath.PI,CesiumMath.EPSILON11)){var n=CesiumMath.sign(t.longitude);return e.longitude=n*(i-CesiumMath.EPSILON11),1}if(CesiumMath.equalsEpsilon(r,CesiumMath.PI,CesiumMath.EPSILON11)){e=CesiumMath.sign(e.longitude);return t.longitude=e*(r-CesiumMath.EPSILON11),2}return 0}var startCartographicScratch$1=new Cartographic,endCartographicScratch$1=new Cartographic,segmentStartTopScratch=new Cartesian3,segmentEndTopScratch=new Cartesian3,segmentStartBottomScratch=new Cartesian3,segmentEndBottomScratch=new Cartesian3,segmentStartNormalScratch=new Cartesian3,segmentEndNormalScratch=new Cartesian3,getHeightCartographics=[startCartographicScratch$1,endCartographicScratch$1],getHeightRectangleScratch=new Rectangle,adjustHeightStartTopScratch=new Cartesian3,adjustHeightEndTopScratch=new Cartesian3,adjustHeightStartBottomScratch=new Cartesian3,adjustHeightEndBottomScratch=new Cartesian3,segmentStart2DScratch=new Cartesian3,segmentEnd2DScratch=new Cartesian3,segmentStartNormal2DScratch=new Cartesian3,segmentEndNormal2DScratch=new Cartesian3,offsetScratch$b=new Cartesian3,startUpScratch=new Cartesian3,endUpScratch=new Cartesian3,rightScratch=new Cartesian3,startPlaneNormalScratch=new Cartesian3,endPlaneNormalScratch=new Cartesian3,encodeScratch$1=new EncodedCartesian3,encodeScratch2D=new EncodedCartesian3,forwardOffset2DScratch=new Cartesian3,right2DScratch=new Cartesian3,normalNudgeScratch=new Cartesian3,scratchBoundingSpheres=[new BoundingSphere,new BoundingSphere],REFERENCE_INDICES=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],REFERENCE_INDICES_LENGTH=REFERENCE_INDICES.length;function generateGeometryAttributes(e,t,i,r,n,a,o){var s,l,c,u,d=t._ellipsoid,h=i.length/3-1,p=8*h,m=4*p,f=36*h,g=new(65535MITER_BREAK_SMALL?(W=projectNormal(t,E,J,j,segmentStartNormal2DScratch),q=projectNormal(t,P,U,Y,segmentEndNormal2DScratch)):1===Se?(q=projectNormal(t,P,U,Y,segmentEndNormal2DScratch),W.x=0,W.y=CesiumMath.sign(E.longitude-Math.abs(P.longitude)),W.z=0):(W=projectNormal(t,E,J,j,segmentStartNormal2DScratch),q.x=0,q.y=CesiumMath.sign(E.longitude-P.longitude),q.z=0));var Z,K,ee,te=Cartesian3.distance(Q,z),ie=EncodedCartesian3.fromCartesian(X,encodeScratch$1),re=Cartesian3.subtract(k,X,offsetScratch$b),ne=Cartesian3.normalize(re,rightScratch),ae=Cartesian3.subtract(Q,X,startUpScratch),ae=Cartesian3.normalize(ae,ae),oe=Cartesian3.cross(ne,ae,rightScratch),oe=Cartesian3.normalize(oe,oe),se=Cartesian3.cross(ae,J,startPlaneNormalScratch),se=Cartesian3.normalize(se,se),le=Cartesian3.subtract(z,k,endUpScratch),le=Cartesian3.normalize(le,le),ce=Cartesian3.cross(U,le,endPlaneNormalScratch),ce=Cartesian3.normalize(ce,ce),ue=te/I,de=$/I,he=0,pe=0,me=0;for(o&&(he=Cartesian3.distance(j,Y),Z=EncodedCartesian3.fromCartesian(j,encodeScratch2D),K=Cartesian3.subtract(Y,j,forwardOffset2DScratch),xe=(ee=Cartesian3.normalize(K,right2DScratch)).x,ee.x=ee.y,ee.y=-xe,pe=he/b,me=G/b),D=0;D<8;D++){var fe=B+4*D,ge=F+2*D,_e=fe+3,ye=D<4?1:-1,Ce=2===D||3===D||6===D||7===D?1:-1;Cartesian3.pack(ie.high,y,fe),y[_e]=re.x,Cartesian3.pack(ie.low,C,fe),C[_e]=re.y,Cartesian3.pack(se,v,fe),v[_e]=re.z,Cartesian3.pack(ce,S,fe),S[_e]=ue*ye,Cartesian3.pack(oe,x,fe);var ve=de*Ce;0===ve&&Ce<0&&(ve=9),x[_e]=ve,o&&(s[fe]=Z.high.x,s[fe+1]=Z.high.y,s[fe+2]=Z.low.x,s[fe+3]=Z.low.y,c[fe]=-W.y,c[fe+1]=W.x,c[fe+2]=q.y,c[fe+3]=-q.x,l[fe]=K.x,l[fe+1]=K.y,l[fe+2]=ee.x,l[fe+3]=ee.y,u[ge]=pe*ye,0===(ve=me*Ce)&&Ce<0&&(ve=9),u[ge+1]=ve)}var Se=adjustHeightStartBottomScratch,ne=adjustHeightEndBottomScratch,ae=adjustHeightStartTopScratch,J=adjustHeightEndTopScratch,le=Rectangle.fromCartographicArray(getHeightCartographics,getHeightRectangleScratch),xe=ApproximateTerrainHeights.getMinimumMaximumHeights(le,d),le=xe.minimumTerrainHeight,xe=xe.maximumTerrainHeight;H+=le,H+=xe,adjustHeights(X,Q,le,xe,Se,ae),adjustHeights(k,z,le,xe,ne,J);xe=Cartesian3.multiplyByScalar(oe,CesiumMath.EPSILON5,normalNudgeScratch);Cartesian3.add(Se,xe,Se),Cartesian3.add(ne,xe,ne),Cartesian3.add(ae,xe,ae),Cartesian3.add(J,xe,J),nudgeXZ(Se,ne),nudgeXZ(ae,J),Cartesian3.pack(Se,_,N),Cartesian3.pack(ne,_,N+3),Cartesian3.pack(J,_,N+6),Cartesian3.pack(ae,_,N+9),xe=Cartesian3.multiplyByScalar(oe,-2*CesiumMath.EPSILON5,normalNudgeScratch),Cartesian3.add(Se,xe,Se),Cartesian3.add(ne,xe,ne),Cartesian3.add(ae,xe,ae),Cartesian3.add(J,xe,J),nudgeXZ(Se,ne),nudgeXZ(ae,J),Cartesian3.pack(Se,_,N+12),Cartesian3.pack(ne,_,N+15),Cartesian3.pack(J,_,N+18),Cartesian3.pack(ae,_,N+21),L+=2,R+=3,F+=16,N+=24,B+=32,$+=te,G+=he}var Te=R=0;for(O=0;O>n,b=h>>n,E=PixelFormat$1.isCompressedFormat(c)?PixelFormat$1.compressedTextureSizeInBytes(c,T,b):PixelFormat$1.textureSizeInBytes(c,o,T,b),P=new Uint8Array(_.buffer,C,E);S[faceOrder[x]]=new CompressedTextureBuffer(c,T,b,P),C+=E}C+=3-(C+3)%4+4}var A=v;if(1===f)for(n=0;nt.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}}),ManagedArray.prototype.get=function(e){return this._array[e]},ManagedArray.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t},ManagedArray.prototype.peek=function(){return this._array[this._length-1]},ManagedArray.prototype.push=function(e){var t=this.length++;this._array[t]=e},ManagedArray.prototype.pop=function(){if(0!==this._length){var e=this._array[this._length-1];return--this.length,e}},ManagedArray.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)},ManagedArray.prototype.resize=function(e){this.length=e},ManagedArray.prototype.trim=function(e){e=defaultValue(e,this._length),this._array.length=e},Object.defineProperties(MapProjection.prototype,{ellipsoid:{get:DeveloperError.throwInstantiationError}}),MapProjection.prototype.project=DeveloperError.throwInstantiationError,MapProjection.prototype.unproject=DeveloperError.throwInstantiationError;var leftScratchArray=[],rightScratchArray=[];function merge(e,t,i,r,n,a){for(var o=n-r+1,s=a-n,l=leftScratchArray,c=rightScratchArray,u=0;uCartesian3.magnitudeSquared(t)}return!1};var occludeePositionScratch=new Cartesian3;Occluder.prototype.isBoundingSphereVisible=function(e){var t=Cartesian3.clone(e.center,occludeePositionScratch),i=e.radius;if(this._horizonDistance===Number.MAX_VALUE)return!1;var r=Cartesian3.subtract(t,this._occluderPosition,tempVecScratch),e=this._occluderRadius-i,e=Cartesian3.magnitudeSquared(r)-e*e;if(iCartesian3.magnitudeSquared(r));if(0t*r?!0:t<(e=Math.sqrt(e)+this._horizonDistance)*e+i}return!0};var tempScratch=new Cartesian3;Occluder.prototype.computeVisibility=function(e){var t=Cartesian3.clone(e.center),i=e.radius;if(i>this._occluderRadius)return Visibility$1.FULL;if(this._horizonDistance!==Number.MAX_VALUE){var r=Cartesian3.subtract(t,this._occluderPosition,tempScratch),n=this._occluderRadius-i,a=Cartesian3.magnitudeSquared(r);if(0<(n=a-n*n)){n=Math.sqrt(n)+this._horizonDistance,r=Cartesian3.subtract(t,this._cameraPosition,r),e=Cartesian3.magnitudeSquared(r);return n*n+i*i-i?Visibility$1.PARTIAL:Visibility$1.FULL)}}return Visibility$1.NONE};var occludeePointScratch=new Cartesian3;Occluder.computeOccludeePoint=function(e,t,i){var r=Cartesian3.clone(t),n=Cartesian3.clone(e.center),t=e.radius,a=i.length,o=Cartesian3.normalize(Cartesian3.subtract(r,n,occludeePointScratch),occludeePointScratch),s=-Cartesian3.dot(o,n),l=Occluder._anyRotationVector(n,o,s),c=Occluder._horizonToPlaneNormalDotProduct(e,o,s,l,i[0]);if(c){for(var u,d=1;dr.y?0:1;(0===n&&r.z>r.x||1===n&&r.z>r.y)&&(n=2);var a=new Cartesian3,n=0===n?(r.x=e.x,r.y=e.y+1,r.z=e.z+1,Cartesian3.UNIT_X):1===n?(r.x=e.x+1,r.y=e.y,r.z=e.z+1,Cartesian3.UNIT_Y):(r.x=e.x+1,r.y=e.y+1,r.z=e.z,Cartesian3.UNIT_Z),t=(Cartesian3.dot(t,r)+i)/-Cartesian3.dot(t,n);return Cartesian3.normalize(Cartesian3.subtract(Cartesian3.add(r,Cartesian3.multiplyByScalar(n,t,a),r),e,r),r)};var posDirectionScratch=new Cartesian3;Occluder._rotationVector=function(e,t,i,r,n){e=Cartesian3.subtract(r,e,posDirectionScratch),e=Cartesian3.normalize(e,e);if(Cartesian3.dot(t,e)<.9999999847691291){e=Cartesian3.cross(t,e,e);if(Cartesian3.magnitude(e)>CesiumMath.EPSILON13)return Cartesian3.normalize(e,new Cartesian3)}return n};var posScratch1=new Cartesian3,occluerPosScratch=new Cartesian3,posScratch2=new Cartesian3,horizonPlanePosScratch=new Cartesian3;function OffsetGeometryInstanceAttribute(e,t,i){e=defaultValue(e,0),t=defaultValue(t,0),i=defaultValue(i,0),this.value=new Float32Array([e,t,i])}function OpenCageGeocoderService(e,t,i){(e=Resource.createIfNeeded(e)).appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=defaultValue(i,{})}Occluder._horizonToPlaneNormalDotProduct=function(e,t,i,r,n){var a=Cartesian3.clone(n,posScratch1),o=Cartesian3.clone(e.center,occluerPosScratch),s=e.radius,l=Cartesian3.subtract(o,a,posScratch2),n=Cartesian3.magnitudeSquared(l),e=s*s;if(n"+t,document.body.appendChild(u),n.leading=1.2*o;var d=getCSSValue$1(u,"height");if(2*o<=(d=d.replace("px",""))&&(n.leading=d/2|0),document.body.removeChild(u),c)n.ascent=0,n.descent=0,n.bounds={minx:0,maxx:n.width,miny:0,maxy:0},n.height=0;else{u=document.createElement("canvas");u.width=n.width+100,u.height=3*o,u.style.opacity=1,u.style.fontFamily=a,u.style.fontSize=o,u.style.fontStyle=s,u.style.fontWeight=l;c=u.getContext("2d");c.font=s+" "+l+" "+o+"px "+a;o=u.width,a=u.height,u=a/2;c.fillStyle="white",c.fillRect(-1,-1,o+2,a+2),i&&(c.strokeStyle="black",c.lineWidth=e.lineWidth,c.strokeText(t,50,u)),r&&(c.fillStyle="black",c.fillText(t,50,u));for(var h=c.getImageData(0,0,o,a).data,p=0,m=4*o,f=h.length;++pt.height?a=r*(t.height/t.width):t.widthidlCross.eastOverIDL-idlCross.westOverIDL&&(n.west=idlCross.westOverIDL,n.east=idlCross.eastOverIDL,n.east>CesiumMath.PI&&(n.east=n.east-CesiumMath.TWO_PI),n.west>CesiumMath.PI&&(n.west=n.west-CesiumMath.TWO_PI)),n}var interpolatedCartographicScratch=new Cartographic;function interpolateAndGrowRectangle(e,t,i,r){for(var n=e.surfaceDistance,a=Math.ceil(n*t),o=0=e.minX&&t.maxY>=e.minY}function createNode(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function multiSelect(e,t,i,r,n){for(var a,o=[t,i];o.length;)(i=o.pop())-(t=o.pop())<=r||(quickselect$1(e,a=t+Math.ceil((i-t)/r/2)*r,t,i,n),o.push(t,a,a,i))}function RectangleCollisionChecker(){this._tree=new RBush}function RectangleWithId(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}function idCompare(e,t){return e.id===t.id}PolylineVolumeOutlineGeometry.createGeometry=function(e){var t=arrayRemoveDuplicates(e._positions,Cartesian3.equalsEpsilon),i=e._shape,i=PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(i);if(!(t.length<2||i.length<3)){PolygonPipeline.computeWindingOrder2D(i)===WindingOrder$1.CLOCKWISE&&i.reverse();var r=BoundingRectangle.fromPoints(i,brScratch);return computeAttributes(PolylineVolumeGeometryLibrary.computePositions(t,i,r,e,!1),i)}},Proxy.prototype.getURL=DeveloperError.throwInstantiationError,Object.defineProperties(QuaternionSpline.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}}),QuaternionSpline.prototype.findTimeInterval=Spline.prototype.findTimeInterval,QuaternionSpline.prototype.wrapTime=Spline.prototype.wrapTime,QuaternionSpline.prototype.clampTime=Spline.prototype.clampTime,QuaternionSpline.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)},RBush.prototype.all=function(){return this._all(this.data,[])},RBush.prototype.search=function(e){var t=this.data,i=[];if(!intersects(e,t))return i;for(var r=this.toBBox,n=[];t;){for(var a=0;athis._maxEntries;)this._split(n,t),t--;this._adjustParentBBoxes(r,n,t)},RBush.prototype._split=function(e,t){var i=e[t],r=i.children.length,n=this._minEntries;this._chooseSplitAxis(i,n,r);r=this._chooseSplitIndex(i,n,r),r=createNode(i.children.splice(r,i.children.length-r));r.height=i.height,r.leaf=i.leaf,calcBBox(i,this.toBBox),calcBBox(r,this.toBBox),t?e[t-1].children.push(r):this._splitRoot(i,r)},RBush.prototype._splitRoot=function(e,t){this.data=createNode([e,t]),this.data.height=e.height+1,this.data.leaf=!1,calcBBox(this.data,this.toBBox)},RBush.prototype._chooseSplitIndex=function(e,t,i){for(var r,n=1/0,a=1/0,o=t;o<=i-t;o++){var s=distBBox(e,0,o,this.toBBox),l=distBBox(e,o,i,this.toBBox),c=intersectionArea(s,l),l=bboxArea(s)+bboxArea(l);cScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds}function checkPixelTolerance(e,t,i){var r=e.x-t.x,t=e.y-t.y;return Math.sqrt(r*r+t*t)keplerEqConvergence;++a)r=(n=r)-(n-t*Math.sin(n)-e)/(1-t*Math.cos(n));return n=r+i*CesiumMath.TWO_PI}function eccentricAnomalyToTrueAnomaly(e,t){var i=Math.floor(e/CesiumMath.TWO_PI);e-=i*CesiumMath.TWO_PI;var r=Math.cos(e)-t,t=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(t,r),r=CesiumMath.zeroToTwoPi(r);return e<0&&(r-=CesiumMath.TWO_PI),r+=i*CesiumMath.TWO_PI}function perifocalToCartesianMatrix(e,t,i,r){var n=Math.cos(e),a=Math.sin(e),o=Math.cos(t),e=Math.sin(t),t=Math.cos(i),i=Math.sin(i);return defined(r)?(r[0]=t*n-i*a*o,r[1]=i*n+t*a*o,r[2]=a*e,r[3]=-t*a-i*n*o,r[4]=-i*a+t*n*o,r[5]=n*e,r[6]=i*e,r[7]=-t*e,r[8]=o):r=new Matrix3(t*n-i*a*o,-t*a-i*n*o,i*e,i*n+t*a*o,-i*a+t*n*o,-t*e,a*e,n*e,o),r}var semiMajorAxis0=1.0000010178*MetersPerAstronomicalUnit,meanLongitude0=100.46645683*RadiansPerDegree,meanLongitude1=1295977422.83429*RadiansPerArcSecond,p1u=16002,p2u=21863,p3u=32004,p4u=10931,p5u=14529,p6u=16368,p7u=15318,p8u=32794,Ca1=64e-7*MetersPerAstronomicalUnit,Ca2=-152e-7*MetersPerAstronomicalUnit,Ca3=62e-7*MetersPerAstronomicalUnit,Ca4=-8e-7*MetersPerAstronomicalUnit,Ca5=32e-7*MetersPerAstronomicalUnit,Ca6=-41e-7*MetersPerAstronomicalUnit,Ca7=19e-7*MetersPerAstronomicalUnit,Ca8=-11e-7*MetersPerAstronomicalUnit,Sa1=1e-7*-150*MetersPerAstronomicalUnit,Sa2=-46e-7*MetersPerAstronomicalUnit,Sa3=68*1e-7*MetersPerAstronomicalUnit,Sa4=54e-7*MetersPerAstronomicalUnit,Sa5=14e-7*MetersPerAstronomicalUnit,Sa6=24e-7*MetersPerAstronomicalUnit,Sa7=-28e-7*MetersPerAstronomicalUnit,Sa8=22e-7*MetersPerAstronomicalUnit,q1u=10,q2u=16002,q3u=21863,q4u=10931,q5u=1473,q6u=32004,q7u=4387,q8u=73,Cl1=-325e-7,Cl2=-322e-7,Cl3=1e-7*-79,Cl4=232*1e-7,Cl5=1e-7*-52,Cl6=97e-7,Cl7=55e-7,Cl8=-41e-7,Sl1=-105e-7,Sl2=-137e-7,Sl3=258e-7,Sl4=35e-7,Sl5=1e-7*-116,Sl6=-88e-7,Sl7=-112e-7,Sl8=-8e-6,scratchDate$1=new JulianDate(0,0,TimeStandard$1.TAI);function computeSimonEarthMoonBarycenter(e,t){taiToTdb(e,scratchDate$1);var i=(scratchDate$1.dayNumber-epoch.dayNumber+(scratchDate$1.secondsOfDay-epoch.secondsOfDay)/TimeConstants$1.SECONDS_PER_DAY)/(10*TimeConstants$1.DAYS_PER_JULIAN_CENTURY),r=.3595362*i,e=semiMajorAxis0+Ca1*Math.cos(p1u*r)+Sa1*Math.sin(p1u*r)+Ca2*Math.cos(p2u*r)+Sa2*Math.sin(p2u*r)+Ca3*Math.cos(p3u*r)+Sa3*Math.sin(p3u*r)+Ca4*Math.cos(p4u*r)+Sa4*Math.sin(p4u*r)+Ca5*Math.cos(p5u*r)+Sa5*Math.sin(p5u*r)+Ca6*Math.cos(p6u*r)+Sa6*Math.sin(p6u*r)+Ca7*Math.cos(p7u*r)+Sa7*Math.sin(p7u*r)+Ca8*Math.cos(p8u*r)+Sa8*Math.sin(p8u*r),r=meanLongitude0+meanLongitude1*i+Cl1*Math.cos(q1u*r)+Sl1*Math.sin(q1u*r)+Cl2*Math.cos(q2u*r)+Sl2*Math.sin(q2u*r)+Cl3*Math.cos(q3u*r)+Sl3*Math.sin(q3u*r)+Cl4*Math.cos(q4u*r)+Sl4*Math.sin(q4u*r)+Cl5*Math.cos(q5u*r)+Sl5*Math.sin(q5u*r)+Cl6*Math.cos(q6u*r)+Sl6*Math.sin(q6u*r)+Cl7*Math.cos(q7u*r)+Sl7*Math.sin(q7u*r)+Cl8*Math.cos(q8u*r)+Sl8*Math.sin(q8u*r);return elementsToCartesian(e,.0167086342-.0004203654*i,469.97289*RadiansPerArcSecond*i,102.93734808*RadiansPerDegree+11612.3529*RadiansPerArcSecond*i,174.87317577*RadiansPerDegree-8679.27034*RadiansPerArcSecond*i,r,t)}function computeSimonMoon(e,t){taiToTdb(e,scratchDate$1);var i=(scratchDate$1.dayNumber-epoch.dayNumber+(scratchDate$1.secondsOfDay-epoch.secondsOfDay)/TimeConstants$1.SECONDS_PER_DAY)/TimeConstants$1.DAYS_PER_JULIAN_CENTURY,r=i*i,n=r*i,a=n*i,o=383397.7725+.004*i,s=.055545526-16e-9*i,l=5.15668983*RadiansPerDegree,c=-8e-5*i+.02966*r-42e-6*n-13e-8*a,u=83.35324312*RadiansPerDegree,d=14643420.2669*i-38.2702*r-.045047*n+21301e-8*a,h=125.04455501*RadiansPerDegree,p=-6967919.3631*i+6.3602*r+.007625*n-3586e-8*a,m=218.31664563*RadiansPerDegree,f=1732559343.4847*i-6.391*r+.006588*n-3169e-8*a,g=297.85019547*RadiansPerDegree+RadiansPerArcSecond*(1602961601.209*i-6.3706*r+.006593*n-3169e-8*a),_=134.96340251*RadiansPerDegree+RadiansPerArcSecond*(1717915923.2178*i+31.8792*r+.051635*n-2447e-7*a),y=357.52910918*RadiansPerDegree+RadiansPerArcSecond*(129596581.0481*i-.5532*r+136e-6*n-1149e-8*a),C=310.17137918*RadiansPerDegree-RadiansPerArcSecond*(6967051.436*i+6.2068*r+.007618*n-3219e-8*a),v=2*g,S=4*g,x=6*g,T=2*_,b=3*_,e=4*_,a=2*(93.27209062*RadiansPerDegree+RadiansPerArcSecond*(1739527262.8478*i-12.7512*r-.001037*n+417e-8*a));o+=3400.4*Math.cos(v)-635.6*Math.cos(v-_)-235.6*Math.cos(_)+218.1*Math.cos(v-y)+181*Math.cos(v+_),s+=.014216*Math.cos(v-_)+.008551*Math.cos(v-T)-.001383*Math.cos(_)+.001356*Math.cos(v+_)-.001147*Math.cos(S-b)-914e-6*Math.cos(S-T)+869e-6*Math.cos(v-y-_)-627e-6*Math.cos(v)-394e-6*Math.cos(S-e)+282e-6*Math.cos(v-y-T)-279e-6*Math.cos(g-_)-236e-6*Math.cos(T)+231e-6*Math.cos(S)+229e-6*Math.cos(x-e)-201e-6*Math.cos(T-a),c+=486.26*Math.cos(v-a)-40.13*Math.cos(v)+37.51*Math.cos(a)+25.73*Math.cos(T-a)+19.97*Math.cos(v-y-a),d+=-55609*Math.sin(v-_)-34711*Math.sin(v-T)-9792*Math.sin(_)+9385*Math.sin(S-b)+7505*Math.sin(S-T)+5318*Math.sin(v+_)+3484*Math.sin(S-e)-3417*Math.sin(v-y-_)-2530*Math.sin(x-e)-2376*Math.sin(v)-2075*Math.sin(v-b)-1883*Math.sin(T)-1736*Math.sin(x-5*_)+1626*Math.sin(y)-1370*Math.sin(x-b),p+=-5392*Math.sin(v-a)-540*Math.sin(y)-441*Math.sin(v)+423*Math.sin(a)-288*Math.sin(T-a),f+=-3332.9*Math.sin(v)+1197.4*Math.sin(v-_)-662.5*Math.sin(y)+396.3*Math.sin(_)-218*Math.sin(v-y);T=2*C,_=3*C;c+=46.997*Math.cos(C)*i-.614*Math.cos(v-a+C)*i+.614*Math.cos(v-a-C)*i-.0297*Math.cos(T)*r-.0335*Math.cos(C)*r+.0012*Math.cos(v-a+T)*r-16e-5*Math.cos(C)*n+4e-5*Math.cos(_)*n+4e-5*Math.cos(T)*n;y=2.116*Math.sin(C)*i-.111*Math.sin(v-a-C)*i-.0015*Math.sin(C)*r;return d+=y,f+=y,p+=-520.77*Math.sin(C)*i+13.66*Math.sin(v-a+C)*i+1.12*Math.sin(v-C)*i-1.06*Math.sin(a-C)*i+.66*Math.sin(T)*r+.371*Math.sin(C)*r-.035*Math.sin(v-a+T)*r-.015*Math.sin(v-a+C)*r+.0014*Math.sin(C)*n-.0011*Math.sin(_)*n-9e-4*Math.sin(T)*n,elementsToCartesian(o*=MetersPerKilometer,s,l+c*RadiansPerArcSecond,u+d*RadiansPerArcSecond,h+p*RadiansPerArcSecond,m+f*RadiansPerArcSecond,t)}var moonEarthMassRatio=.012300034,factor=moonEarthMassRatio/(moonEarthMassRatio+1)*-1;function computeSimonEarth(e,t){return t=computeSimonMoon(e,t),Cartesian3.multiplyByScalar(t,factor,t)}var axesTransformation=new Matrix3(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),translation=new Cartesian3;function interpolateColors(e,t,i,r,n,a,o){var s=PolylinePipeline.numberOfPoints(e,t,n),l=i.red,c=i.green,u=i.blue,d=i.alpha,h=r.red,e=r.green,t=r.blue,n=r.alpha;if(Color.equals(i,r)){for(y=0;ymonthLengths[s]||13<=s;)o>monthLengths[s]&&(o-=monthLengths[s],++s),13<=s&&(--s,l+=Math.floor(s/12),s%=12,++s),monthLengths[2]=isLeapYear(l)?29:28;return scratchGregorianDate.millisecond=r,scratchGregorianDate.second=n,scratchGregorianDate.minute=a,scratchGregorianDate.hour=e,scratchGregorianDate.day=o,scratchGregorianDate.month=s,scratchGregorianDate.year=l,JulianDate.fromGregorianDate(scratchGregorianDate,i)}var scratchJulianDate$2=new JulianDate,durationRegex=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function parseDuration(e,t){if(defined(e)&&0!==e.length){if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,"P"===e[t.millisecond=0]){var i=e.match(durationRegex);if(!defined(i))return;defined(i[1])&&(t.year=Number(i[1].replace(",","."))),defined(i[2])&&(t.month=Number(i[2].replace(",","."))),defined(i[3])&&(t.day=7*Number(i[3].replace(",","."))),defined(i[4])&&(t.day+=Number(i[4].replace(",","."))),defined(i[5])&&(t.hour=Number(i[5].replace(",","."))),defined(i[6])&&(t.minute=Number(i[6].replace(",","."))),defined(i[7])&&(i=Number(i[7].replace(",",".")),t.second=Math.floor(i),t.millisecond=i%1*1e3)}else"Z"!==e[e.length-1]&&(e+="Z"),JulianDate.toGregorianDate(JulianDate.fromIso8601(e,scratchJulianDate$2),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}}var scratchDuration=new GregorianDate;TimeIntervalCollection.fromIso8601=function(e,t){var i=e.iso8601.split("/"),r=JulianDate.fromIso8601(i[0]),n=JulianDate.fromIso8601(i[1]),a=[];if(parseDuration(i[2],scratchDuration)){var o=JulianDate.clone(r);for(a.push(o);JulianDate.compare(o,n)<0;){o=addToDate(o,scratchDuration);JulianDate.compare(n,o)<=0&&JulianDate.clone(n,o),a.push(o)}}else a.push(r,n);return TimeIntervalCollection.fromJulianDateArray({julianDates:a,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)},TimeIntervalCollection.fromIso8601DateArray=function(e,t){return TimeIntervalCollection.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(e){return JulianDate.fromIso8601(e)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)},TimeIntervalCollection.fromIso8601DurationArray=function(e,t){for(var i,r,n=e.epoch,a=e.iso8601Durations,o=defaultValue(e.relativeToPrevious,!1),s=[],l=a.length,c=0;cr&&(this._seeking=!0,n.currentTime=e)))},Object.defineProperties(VRTheWorldTerrainProvider.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}}),VRTheWorldTerrainProvider.prototype.requestTileGeometry=function(t,i,r,e){var n=this._tilingScheme.getNumberOfYTilesAtLevel(r),e=this._resource.getDerivedResource({url:r+"/"+t+"/"+(n-i-1)+".tif",queryParameters:{cesium:!0},request:e}).fetchImage({preferImageBitmap:!0});if(defined(e)){var a=this;return when(e).then(function(e){return new HeightmapTerrainData({buffer:getImagePixels(e),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:getChildMask(a,t,i,r),structure:a._terrainDataStructure})})}},VRTheWorldTerrainProvider.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<=CesiumMath.SIXTY_FOUR_KILOBYTES&&a.elementIndexUint?Buffer$1.createIndexBuffer({context:a,typedArray:new Uint32Array(h),usage:s,indexDatatype:IndexDatatype$1.UNSIGNED_INT}):Buffer$1.createIndexBuffer({context:a,typedArray:new Uint16Array(h),usage:s,indexDatatype:IndexDatatype$1.UNSIGNED_SHORT}):n})},Object.defineProperties(VertexArray.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}}),VertexArray.prototype.getAttribute=function(e){return this._attributes[e]},VertexArray.prototype._bind=function(){defined(this._vao)?(this._context.glBindVertexArray(this._vao),this._context.instancedArrays&&setVertexAttribDivisor(this),this._hasConstantAttributes&&setConstantAttributes(this,this._gl)):bind(this._gl,this._attributes,this._indexBuffer)},VertexArray.prototype._unBind=function(){if(defined(this._vao))this._context.glBindVertexArray(null);else{for(var e=this._attributes,t=this._gl,i=0;iShadowVolumeAppearance.MAX_WIDTH_FOR_PLANAR_EXTENTS}ShadowVolumeAppearance.getSphericalExtentGeometryInstanceAttributes=function(e,t,i,r){var n=latLongToSpherical(e.south,e.west,i,sphericalScratch),a=n.x,o=n.y,s=latLongToSpherical(e.north,e.east,i,sphericalScratch),n=s.x,i=s.y,s=0;i>>StencilConstants$1.SKIP_LOD_BIT_SHIFT}function getTranslucentRenderState$2(e){e=clone$1(e,!0);return e.cull.enabled=!1,e.depthTest.enabled=!0,e.depthMask=!1,e.blending=BlendingState$1.ALPHA_BLEND,RenderState.fromCache(e)}function getOpaqueRenderState(e){e=clone$1(e,!0);return e.stencilTest=StencilConstants$1.setCesium3DTileBit(),e.stencilMask=StencilConstants$1.CESIUM_3D_TILE_MASK,RenderState.fromCache(e)}function createTexture$2(e,t,i){e=e._textureDimensions;return new Texture({context:t,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{width:e.x,height:e.y,arrayBufferView:i},flipY:!1,sampler:Sampler.NEAREST})}function createPickTexture(e,t){var i=e.featuresLength;if(!defined(e._pickTexture)&&0r&&e.inverseBindMatrices--}),ForEach.animation(e,function(e){ForEach.animationSampler(e,function(e){defined(e.input)&&e.input>r&&e.input--,defined(e.output)&&e.output>r&&e.output--})})},Remove.buffer=function(e,t){e.buffers.splice(t,1),ForEach.bufferView(e,function(e){defined(e.buffer)&&e.buffer>t&&e.buffer--})},Remove.bufferView=function(e,i){e.bufferViews.splice(i,1),ForEach.accessor(e,function(e){defined(e.bufferView)&&e.bufferView>i&&e.bufferView--}),ForEach.shader(e,function(e){defined(e.bufferView)&&e.bufferView>i&&e.bufferView--}),ForEach.image(e,function(e){defined(e.bufferView)&&e.bufferView>i&&e.bufferView--,ForEach.compressedImage(e,function(e){var t=e.bufferView;defined(t)&&ii&&e.extensions.KHR_draco_mesh_compression.bufferView--})})},Remove.mesh=function(e,t){e.meshes.splice(t,1),ForEach.node(e,function(e){defined(e.mesh)&&(e.mesh>t?e.mesh--:e.mesh===t&&delete e.mesh)})},Remove.node=function(e,t){e.nodes.splice(t,1),ForEach.skin(e,function(e){defined(e.skeleton)&&e.skeleton>t&&e.skeleton--,e.joints=e.joints.map(function(e){return tt&&e.target.node--})}),ForEach.technique(e,function(e){ForEach.techniqueUniform(e,function(e){defined(e.node)&&e.node>t&&e.node--})}),ForEach.node(e,function(e){defined(e.children)&&(e.children=e.children.filter(function(e){return e!==t}).map(function(e){return tt&&e.material--})})},getListOfElementsIdsInUse.accessor=function(e){var t={};return ForEach.mesh(e,function(e){ForEach.meshPrimitive(e,function(e){ForEach.meshPrimitiveAttribute(e,function(e){t[e]=!0}),ForEach.meshPrimitiveTarget(e,function(e){ForEach.meshPrimitiveTargetAttribute(e,function(e){t[e]=!0})});e=e.indices;defined(e)&&(t[e]=!0)})}),ForEach.skin(e,function(e){defined(e.inverseBindMatrices)&&(t[e.inverseBindMatrices]=!0)}),ForEach.animation(e,function(e){ForEach.animationSampler(e,function(e){defined(e.input)&&(t[e.input]=!0),defined(e.output)&&(t[e.output]=!0)})}),t},getListOfElementsIdsInUse.buffer=function(e){var t={};return ForEach.bufferView(e,function(e){defined(e.buffer)&&(t[e.buffer]=!0)}),t},getListOfElementsIdsInUse.bufferView=function(e){var t={};return ForEach.accessor(e,function(e){defined(e.bufferView)&&(t[e.bufferView]=!0)}),ForEach.shader(e,function(e){defined(e.bufferView)&&(t[e.bufferView]=!0)}),ForEach.image(e,function(e){defined(e.bufferView)&&(t[e.bufferView]=!0),ForEach.compressedImage(e,function(e){defined(e.bufferView)&&(t[e.bufferView]=!0)})}),hasExtension(e,"KHR_draco_mesh_compression")&&ForEach.mesh(e,function(e){ForEach.meshPrimitive(e,function(e){defined(e.extensions)&&defined(e.extensions.KHR_draco_mesh_compression)&&(t[e.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),t},getListOfElementsIdsInUse.mesh=function(i){var r={};return ForEach.node(i,function(e){var t;!defined(e.mesh&&defined(i.meshes))||defined(t=i.meshes[e.mesh])&&defined(t.primitives)&&0r&&e.hasOwnProperty(i)&&(r=t);return r}function w3d(e){return q3d[e]||0}function x3d(e,t,i){return{type:"||"===e||"&&"===e?"LogicalExpression":"BinaryExpression",operator:e,left:t,right:i}}function y3d(e){return 48<=e&&e<=57}function z3d(e){return 36===e||95===e||65<=e&&e<=90||97<=e&&e<=122||128<=e&&!q3d[String.fromCharCode(e)]}function B3d(r){for(var e,l=0,t=r.charAt,i=r.charCodeAt,n=function(e){return t.call(r,e)},a=function(e){return i.call(r,e)},o=r.length,s=function(){for(var e=a(l);32===e||9===e;)e=a(++l)},c=function(){var e,t,i=d();return s(),63!==a(l)?i:(l++,(e=c())||n3d("Expected expression",l),s(),58===a(l)?(l++,(t=c())||n3d("Expected expression",l),{type:"ConditionalExpression",test:i,consequent:e,alternate:t}):void n3d("Expected :",l))},u=function(){s();for(var e=r.substr(l,t3d),t=e.length;0":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},s3d=r3d(p3d),t3d=r3d(q3d),u3d={true:!0,false:!1,null:null},B3d.version="0.3.1",B3d.toString=function(){return"JavaScript Expression Parser (JSEP) v"+B3d.version},B3d.addUnaryOp=function(e){return s3d=Math.max(e.length,s3d),p3d[e]=!0,this},B3d.addBinaryOp=function(e,t){return t3d=Math.max(e.length,t3d),q3d[e]=t,this},B3d.addLiteral=function(e,t){return u3d[e]=t,this},B3d.removeUnaryOp=function(e){return delete p3d[e],e.length===s3d&&(s3d=r3d(p3d)),this},B3d.removeAllUnaryOps=function(){return p3d={},s3d=0,this},B3d.removeBinaryOp=function(e){return delete q3d[e],e.length===t3d&&(t3d=r3d(q3d)),this},B3d.removeAllBinaryOps=function(){return q3d={},t3d=0,this},B3d.removeLiteral=function(e){return delete u3d[e],this},B3d.removeAllLiterals=function(){return u3d={},this},S2d.jsep=B3d;var jsep=tmp$5.jsep,ExpressionNodeType={VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18},ExpressionNodeType$1=Object.freeze(ExpressionNodeType);function Expression(e,t){var i;e=replaceVariables(removeBackslashes(e=replaceDefines(this._expression=e,t))),jsep.addBinaryOp("=~",0),jsep.addBinaryOp("!~",0);try{i=jsep(e)}catch(e){throw new RuntimeError(e)}this._runtimeAst=createRuntimeAst(this,i)}Object.defineProperties(Expression.prototype,{expression:{get:function(){return this._expression}}});var scratchStorage={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new Cartesian2],cartesian3Array:[new Cartesian3],cartesian4Array:[new Cartesian4],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);var e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new Cartesian2),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new Cartesian3),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new Cartesian4),this.cartesian4Array[this.cartesian4Index++]}};Expression.prototype.evaluate=function(e,t){scratchStorage.reset();e=this._runtimeAst.evaluate(e);return t instanceof Color&&e instanceof Cartesian4?Color.fromCartesian4(e,t):e instanceof Cartesian2||e instanceof Cartesian3||e instanceof Cartesian4?e.clone(t):e},Expression.prototype.evaluateColor=function(e,t){scratchStorage.reset();e=this._runtimeAst.evaluate(e);return Color.fromCartesian4(e,t)},Expression.prototype.getShaderFunction=function(e,t,i,r){return r+" "+e+"() \n{ \n return "+this.getShaderExpression(t,i)+"; \n} \n"},Expression.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};var unaryOperators=["!","-","+"],binaryOperators=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],variableRegex=/\${(.*?)}/g,backslashRegex=/\\/g,backslashReplacement="@#%",replacementRegex=/@#%/g,scratchColor$k=new Color,unaryFunctions={abs:getEvaluateUnaryComponentwise(Math.abs),sqrt:getEvaluateUnaryComponentwise(Math.sqrt),cos:getEvaluateUnaryComponentwise(Math.cos),sin:getEvaluateUnaryComponentwise(Math.sin),tan:getEvaluateUnaryComponentwise(Math.tan),acos:getEvaluateUnaryComponentwise(Math.acos),asin:getEvaluateUnaryComponentwise(Math.asin),atan:getEvaluateUnaryComponentwise(Math.atan),radians:getEvaluateUnaryComponentwise(CesiumMath.toRadians),degrees:getEvaluateUnaryComponentwise(CesiumMath.toDegrees),sign:getEvaluateUnaryComponentwise(CesiumMath.sign),floor:getEvaluateUnaryComponentwise(Math.floor),ceil:getEvaluateUnaryComponentwise(Math.ceil),round:getEvaluateUnaryComponentwise(Math.round),exp:getEvaluateUnaryComponentwise(Math.exp),exp2:getEvaluateUnaryComponentwise(exp2),log:getEvaluateUnaryComponentwise(Math.log),log2:getEvaluateUnaryComponentwise(log2),fract:getEvaluateUnaryComponentwise(fract),length:length$1,normalize:normalize},binaryFunctions={atan2:getEvaluateBinaryComponentwise(Math.atan2,!1),pow:getEvaluateBinaryComponentwise(Math.pow,!1),min:getEvaluateBinaryComponentwise(Math.min,!0),max:getEvaluateBinaryComponentwise(Math.max,!0),distance:distance,dot:dot,cross:cross},ternaryFunctions={clamp:getEvaluateTernaryComponentwise(CesiumMath.clamp,!0),mix:getEvaluateTernaryComponentwise(CesiumMath.lerp,!0)};function fract(e){return e-Math.floor(e)}function exp2(e){return Math.pow(2,e)}function log2(e){return CesiumMath.log2(e)}function getEvaluateUnaryComponentwise(i){return function(e,t){if("number"==typeof t)return i(t);if(t instanceof Cartesian2)return Cartesian2.fromElements(i(t.x),i(t.y),scratchStorage.getCartesian2());if(t instanceof Cartesian3)return Cartesian3.fromElements(i(t.x),i(t.y),i(t.z),scratchStorage.getCartesian3());if(t instanceof Cartesian4)return Cartesian4.fromElements(i(t.x),i(t.y),i(t.z),i(t.w),scratchStorage.getCartesian4());throw new RuntimeError('Function "'+e+'" requires a vector or number argument. Argument is '+t+".")}}function getEvaluateBinaryComponentwise(r,n){return function(e,t,i){if(n&&"number"==typeof i){if("number"==typeof t)return r(t,i);if(t instanceof Cartesian2)return Cartesian2.fromElements(r(t.x,i),r(t.y,i),scratchStorage.getCartesian2());if(t instanceof Cartesian3)return Cartesian3.fromElements(r(t.x,i),r(t.y,i),r(t.z,i),scratchStorage.getCartesian3());if(t instanceof Cartesian4)return Cartesian4.fromElements(r(t.x,i),r(t.y,i),r(t.z,i),r(t.w,i),scratchStorage.getCartesian4())}if("number"==typeof t&&"number"==typeof i)return r(t,i);if(t instanceof Cartesian2&&i instanceof Cartesian2)return Cartesian2.fromElements(r(t.x,i.x),r(t.y,i.y),scratchStorage.getCartesian2());if(t instanceof Cartesian3&&i instanceof Cartesian3)return Cartesian3.fromElements(r(t.x,i.x),r(t.y,i.y),r(t.z,i.z),scratchStorage.getCartesian3());if(t instanceof Cartesian4&&i instanceof Cartesian4)return Cartesian4.fromElements(r(t.x,i.x),r(t.y,i.y),r(t.z,i.z),r(t.w,i.w),scratchStorage.getCartesian4());throw new RuntimeError('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+" and "+i+".")}}function getEvaluateTernaryComponentwise(n,a){return function(e,t,i,r){if(a&&"number"==typeof r){if("number"==typeof t&&"number"==typeof i)return n(t,i,r);if(t instanceof Cartesian2&&i instanceof Cartesian2)return Cartesian2.fromElements(n(t.x,i.x,r),n(t.y,i.y,r),scratchStorage.getCartesian2());if(t instanceof Cartesian3&&i instanceof Cartesian3)return Cartesian3.fromElements(n(t.x,i.x,r),n(t.y,i.y,r),n(t.z,i.z,r),scratchStorage.getCartesian3());if(t instanceof Cartesian4&&i instanceof Cartesian4)return Cartesian4.fromElements(n(t.x,i.x,r),n(t.y,i.y,r),n(t.z,i.z,r),n(t.w,i.w,r),scratchStorage.getCartesian4())}if("number"==typeof t&&"number"==typeof i&&"number"==typeof r)return n(t,i,r);if(t instanceof Cartesian2&&i instanceof Cartesian2&&r instanceof Cartesian2)return Cartesian2.fromElements(n(t.x,i.x,r.x),n(t.y,i.y,r.y),scratchStorage.getCartesian2());if(t instanceof Cartesian3&&i instanceof Cartesian3&&r instanceof Cartesian3)return Cartesian3.fromElements(n(t.x,i.x,r.x),n(t.y,i.y,r.y),n(t.z,i.z,r.z),scratchStorage.getCartesian3());if(t instanceof Cartesian4&&i instanceof Cartesian4&&r instanceof Cartesian4)return Cartesian4.fromElements(n(t.x,i.x,r.x),n(t.y,i.y,r.y),n(t.z,i.z,r.z),n(t.w,i.w,r.w),scratchStorage.getCartesian4());throw new RuntimeError('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+", "+i+", and "+r+".")}}function length$1(e,t){if("number"==typeof t)return Math.abs(t);if(t instanceof Cartesian2)return Cartesian2.magnitude(t);if(t instanceof Cartesian3)return Cartesian3.magnitude(t);if(t instanceof Cartesian4)return Cartesian4.magnitude(t);throw new RuntimeError('Function "'+e+'" requires a vector or number argument. Argument is '+t+".")}function normalize(e,t){if("number"==typeof t)return 1;if(t instanceof Cartesian2)return Cartesian2.normalize(t,scratchStorage.getCartesian2());if(t instanceof Cartesian3)return Cartesian3.normalize(t,scratchStorage.getCartesian3());if(t instanceof Cartesian4)return Cartesian4.normalize(t,scratchStorage.getCartesian4());throw new RuntimeError('Function "'+e+'" requires a vector or number argument. Argument is '+t+".")}function distance(e,t,i){if("number"==typeof t&&"number"==typeof i)return Math.abs(t-i);if(t instanceof Cartesian2&&i instanceof Cartesian2)return Cartesian2.distance(t,i);if(t instanceof Cartesian3&&i instanceof Cartesian3)return Cartesian3.distance(t,i);if(t instanceof Cartesian4&&i instanceof Cartesian4)return Cartesian4.distance(t,i);throw new RuntimeError('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+" and "+i+".")}function dot(e,t,i){if("number"==typeof t&&"number"==typeof i)return t*i;if(t instanceof Cartesian2&&i instanceof Cartesian2)return Cartesian2.dot(t,i);if(t instanceof Cartesian3&&i instanceof Cartesian3)return Cartesian3.dot(t,i);if(t instanceof Cartesian4&&i instanceof Cartesian4)return Cartesian4.dot(t,i);throw new RuntimeError('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+" and "+i+".")}function cross(e,t,i){if(t instanceof Cartesian3&&i instanceof Cartesian3)return Cartesian3.cross(t,i,scratchStorage.getCartesian3());throw new RuntimeError('Function "'+e+'" requires vec3 arguments. Arguments are '+t+" and "+i+".")}function Node$1(e,t,i,r,n){this._type=e,this._value=t,this._left=i,this._right=r,this._test=n,this.evaluate=void 0,setEvaluateFunction(this)}function replaceDefines(e,t){if(!defined(t))return e;for(var i in t){var r;t.hasOwnProperty(i)&&(r=new RegExp("\\$\\{"+i+"\\}","g"),defined(i="("+t[i]+")")&&(e=e.replace(r,i)))}return e}function removeBackslashes(e){return e.replace(backslashRegex,backslashReplacement)}function replaceBackslashes(e){return e.replace(replacementRegex,"\\")}function replaceVariables(e){for(var t=e,i="",r=t.indexOf("${");0<=r;){var n,a=t.indexOf("'"),o=t.indexOf('"');if(0<=a&&a=ExpressionNodeType$1.LITERAL_NULL}function isVariable(e){return"czm_"===e.substr(0,4)}function getPropertyName(e){return e.substr(4)}function createRuntimeAst(e,t){if("Literal"===t.type)o=parseLiteral(t);else if("CallExpression"===t.type)o=parseCall(e,t);else if("Identifier"===t.type)o=parseKeywordsAndVariables(t);else if("UnaryExpression"===t.type){var i=t.operator,r=createRuntimeAst(e,t.argument);if(!(-1"===e._value?e.evaluate=e._evaluateGreaterThan:">="===e._value?e.evaluate=e._evaluateGreaterThanOrEquals:"&&"===e._value?e.evaluate=e._evaluateAnd:"||"===e._value?e.evaluate=e._evaluateOr:"=~"===e._value?e.evaluate=e._evaluateRegExpMatch:"!~"===e._value?e.evaluate=e._evaluateRegExpNotMatch:defined(binaryFunctions[e._value])&&(e.evaluate=getEvaluateBinaryFunction(e._value)):e._type===ExpressionNodeType$1.TERNARY?e.evaluate=getEvaluateTernaryFunction(e._value):e._type===ExpressionNodeType$1.MEMBER?"brackets"===e._value?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===ExpressionNodeType$1.ARRAY?e.evaluate=e._evaluateArray:e._type===ExpressionNodeType$1.VARIABLE?e.evaluate=e._evaluateVariable:e._type===ExpressionNodeType$1.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===ExpressionNodeType$1.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===ExpressionNodeType$1.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===ExpressionNodeType$1.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===ExpressionNodeType$1.REGEX?e.evaluate=e._evaluateRegExp:e._type===ExpressionNodeType$1.BUILTIN_VARIABLE?"tiles3d_tileset_time"===e._value&&(e.evaluate=evaluateTilesetTime):e.evaluate=e._evaluateLiteral}function evaluateTilesetTime(e){return defined(e)?e.content.tileset.timeSinceLoad:0}function getEvaluateUnaryFunction(t){var i=unaryFunctions[t];return function(e){e=this._left.evaluate(e);return i(t,e)}}function getEvaluateBinaryFunction(i){var r=binaryFunctions[i];return function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);return r(i,t,e)}}function getEvaluateTernaryFunction(r){var n=ternaryFunctions[r];return function(e){var t=this._left.evaluate(e),i=this._right.evaluate(e),e=this._test.evaluate(e);return n(r,t,i,e)}}function getFeatureProperty(e,t){if(defined(e))return e.getProperty(t)}function checkFeature(e){return"feature"===e._value}function convertHSLToRGB(e){for(var t=e._left,i=t.length,r=0;r" requires number arguments. Arguments are '+t+" and "+e+".");return e=" requires number arguments. Arguments are '+t+" and "+e+".");return e<=t},Node$1.prototype._evaluateOr=function(e){var t=this._left.evaluate(e);if("boolean"!=typeof t)throw new RuntimeError('Operator "||" requires boolean arguments. First argument is '+t+".");if(t)return!0;e=this._right.evaluate(e);if("boolean"!=typeof e)throw new RuntimeError('Operator "||" requires boolean arguments. Second argument is '+e+".");return t||e},Node$1.prototype._evaluateAnd=function(e){var t=this._left.evaluate(e);if("boolean"!=typeof t)throw new RuntimeError('Operator "&&" requires boolean arguments. First argument is '+t+".");if(!t)return!1;e=this._right.evaluate(e);if("boolean"!=typeof e)throw new RuntimeError('Operator "&&" requires boolean arguments. Second argument is '+e+".");return t&&e},Node$1.prototype._evaluatePlus=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(e instanceof Cartesian2&&t instanceof Cartesian2)return Cartesian2.add(t,e,scratchStorage.getCartesian2());if(e instanceof Cartesian3&&t instanceof Cartesian3)return Cartesian3.add(t,e,scratchStorage.getCartesian3());if(e instanceof Cartesian4&&t instanceof Cartesian4)return Cartesian4.add(t,e,scratchStorage.getCartesian4());if("string"==typeof t||"string"==typeof e)return t+e;if("number"==typeof t&&"number"==typeof e)return t+e;throw new RuntimeError('Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateMinus=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(e instanceof Cartesian2&&t instanceof Cartesian2)return Cartesian2.subtract(t,e,scratchStorage.getCartesian2());if(e instanceof Cartesian3&&t instanceof Cartesian3)return Cartesian3.subtract(t,e,scratchStorage.getCartesian3());if(e instanceof Cartesian4&&t instanceof Cartesian4)return Cartesian4.subtract(t,e,scratchStorage.getCartesian4());if("number"==typeof t&&"number"==typeof e)return t-e;throw new RuntimeError('Operator "-" requires vector or number arguments of matching types. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateTimes=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(e instanceof Cartesian2&&t instanceof Cartesian2)return Cartesian2.multiplyComponents(t,e,scratchStorage.getCartesian2());if(e instanceof Cartesian2&&"number"==typeof t)return Cartesian2.multiplyByScalar(e,t,scratchStorage.getCartesian2());if(t instanceof Cartesian2&&"number"==typeof e)return Cartesian2.multiplyByScalar(t,e,scratchStorage.getCartesian2());if(e instanceof Cartesian3&&t instanceof Cartesian3)return Cartesian3.multiplyComponents(t,e,scratchStorage.getCartesian3());if(e instanceof Cartesian3&&"number"==typeof t)return Cartesian3.multiplyByScalar(e,t,scratchStorage.getCartesian3());if(t instanceof Cartesian3&&"number"==typeof e)return Cartesian3.multiplyByScalar(t,e,scratchStorage.getCartesian3());if(e instanceof Cartesian4&&t instanceof Cartesian4)return Cartesian4.multiplyComponents(t,e,scratchStorage.getCartesian4());if(e instanceof Cartesian4&&"number"==typeof t)return Cartesian4.multiplyByScalar(e,t,scratchStorage.getCartesian4());if(t instanceof Cartesian4&&"number"==typeof e)return Cartesian4.multiplyByScalar(t,e,scratchStorage.getCartesian4());if("number"==typeof t&&"number"==typeof e)return t*e;throw new RuntimeError('Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateDivide=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(e instanceof Cartesian2&&t instanceof Cartesian2)return Cartesian2.divideComponents(t,e,scratchStorage.getCartesian2());if(t instanceof Cartesian2&&"number"==typeof e)return Cartesian2.divideByScalar(t,e,scratchStorage.getCartesian2());if(e instanceof Cartesian3&&t instanceof Cartesian3)return Cartesian3.divideComponents(t,e,scratchStorage.getCartesian3());if(t instanceof Cartesian3&&"number"==typeof e)return Cartesian3.divideByScalar(t,e,scratchStorage.getCartesian3());if(e instanceof Cartesian4&&t instanceof Cartesian4)return Cartesian4.divideComponents(t,e,scratchStorage.getCartesian4());if(t instanceof Cartesian4&&"number"==typeof e)return Cartesian4.divideByScalar(t,e,scratchStorage.getCartesian4());if("number"==typeof t&&"number"==typeof e)return t/e;throw new RuntimeError('Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateMod=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(e instanceof Cartesian2&&t instanceof Cartesian2)return Cartesian2.fromElements(t.x%e.x,t.y%e.y,scratchStorage.getCartesian2());if(e instanceof Cartesian3&&t instanceof Cartesian3)return Cartesian3.fromElements(t.x%e.x,t.y%e.y,t.z%e.z,scratchStorage.getCartesian3());if(e instanceof Cartesian4&&t instanceof Cartesian4)return Cartesian4.fromElements(t.x%e.x,t.y%e.y,t.z%e.z,t.w%e.w,scratchStorage.getCartesian4());if("number"==typeof t&&"number"==typeof e)return t%e;throw new RuntimeError('Operator "%" requires vector or number arguments of matching types. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateEqualsStrict=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);return e instanceof Cartesian2&&t instanceof Cartesian2||e instanceof Cartesian3&&t instanceof Cartesian3||e instanceof Cartesian4&&t instanceof Cartesian4?t.equals(e):t===e},Node$1.prototype._evaluateNotEqualsStrict=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);return e instanceof Cartesian2&&t instanceof Cartesian2||e instanceof Cartesian3&&t instanceof Cartesian3||e instanceof Cartesian4&&t instanceof Cartesian4?!t.equals(e):t!==e},Node$1.prototype._evaluateConditional=function(e){var t=this._test.evaluate(e);if("boolean"!=typeof t)throw new RuntimeError("Conditional argument of conditional expression must be a boolean. Argument is "+t+".");return(t?this._left:this._right).evaluate(e)},Node$1.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))},Node$1.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))},Node$1.prototype._evaluateIsExactClass=function(e){return!!defined(e)&&e.isExactClass(this._left.evaluate(e))},Node$1.prototype._evaluateIsClass=function(e){return!!defined(e)&&e.isClass(this._left.evaluate(e))},Node$1.prototype._evaluateGetExactClassName=function(e){if(defined(e))return e.getExactClassName()},Node$1.prototype._evaluateBooleanConversion=function(e){return Boolean(this._left.evaluate(e))},Node$1.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))},Node$1.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))},Node$1.prototype._evaluateRegExp=function(e){var t,i=this._value.evaluate(e),r="";defined(this._left)&&(r=this._left.evaluate(e));try{t=new RegExp(i,r)}catch(e){throw new RuntimeError(e)}return t},Node$1.prototype._evaluateRegExpTest=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(!(t instanceof RegExp&&"string"==typeof e))throw new RuntimeError("RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are "+t+" and "+e+".");return t.test(e)},Node$1.prototype._evaluateRegExpMatch=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(t instanceof RegExp&&"string"==typeof e)return t.test(e);if(e instanceof RegExp&&"string"==typeof t)return e.test(t);throw new RuntimeError('Operator "=~" requires one RegExp argument and one string argument. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateRegExpNotMatch=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(t instanceof RegExp&&"string"==typeof e)return!t.test(e);if(e instanceof RegExp&&"string"==typeof t)return!e.test(t);throw new RuntimeError('Operator "!~" requires one RegExp argument and one string argument. Arguments are '+t+" and "+e+".")},Node$1.prototype._evaluateRegExpExec=function(e){var t=this._left.evaluate(e),e=this._right.evaluate(e);if(!(t instanceof RegExp&&"string"==typeof e))throw new RuntimeError("RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are "+t+" and "+e+".");e=t.exec(e);return defined(e)?e[1]:null},Node$1.prototype._evaluateToString=function(e){e=this._left.evaluate(e);if(e instanceof RegExp||e instanceof Cartesian2||e instanceof Cartesian3||e instanceof Cartesian4)return String(e);throw new RuntimeError('Unexpected function call "'+this._value+'".')};var nullSentinel="czm_infinity";function Vector3DTilePrimitive(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=defaultValue(e.center,Cartesian3.ZERO),this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=Color.clone(Color.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=defaultValue(e.classificationType,ClassificationType$1.BOTH),this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};for(var t=this._batchIds.length,i=0;i 0.0 && clipDistance < clippingPlanesEdgeWidth) \n { \n gl_FragColor = clippingPlanesEdgeColor;\n } \n"}DracoLoader._maxDecodingConcurrency=Math.max(FeatureDetection.hardwareConcurrency-1,1),DracoLoader._decoderTaskProcessor=void 0,DracoLoader._taskProcessorReady=!1,DracoLoader._getDecoderTaskProcessor=function(){var e;return defined(DracoLoader._decoderTaskProcessor)||((e=new TaskProcessor("decodeDraco",DracoLoader._maxDecodingConcurrency)).initWebAssemblyModule({modulePath:"ThirdParty/Workers/draco_wasm_wrapper.js",wasmBinaryFile:"ThirdParty/draco_decoder.wasm",fallbackModulePath:"ThirdParty/Workers/draco_decoder.js"}).then(function(){DracoLoader._taskProcessorReady=!0}),DracoLoader._decoderTaskProcessor=e),DracoLoader._decoderTaskProcessor},DracoLoader.hasExtension=function(e){return defined(e.extensionsRequired.KHR_draco_mesh_compression)||defined(e.extensionsUsed.KHR_draco_mesh_compression)},DracoLoader._decodedModelResourceCache=void 0,DracoLoader.parse=function(e,t){if(DracoLoader.hasExtension(e)){var a=e._loadResources,i=e.cacheKey;if(defined(i)){defined(DracoLoader._decodedModelResourceCache)||(defined(t.cache.modelDecodingCache)||(t.cache.modelDecodingCache={}),DracoLoader._decodedModelResourceCache=t.cache.modelDecodingCache);i=DracoLoader._decodedModelResourceCache[i];if(defined(i))return i.count++,void(a.pendingDecodingCache=!0)}var o=e._dequantizeInShader,s=e.gltf;ForEach.mesh(s,function(e,n){ForEach.meshPrimitive(e,function(e,t){var i,r;!defined(e.extensions)||defined(i=e.extensions.KHR_draco_mesh_compression)&&(r=s.bufferViews[i.bufferView],e=arraySlice(s.buffers[r.buffer].extras._pipeline.source,r.byteOffset,r.byteOffset+r.byteLength),a.primitivesToDecode.enqueue({mesh:n,primitive:t,array:e,bufferView:r,compressedAttributes:i.attributes,dequantizeInShader:o}))})})}},DracoLoader.decodeModel=function(e,t){if(!DracoLoader.hasExtension(e))return when.resolve();var i=e._loadResources,r=e.cacheKey;if(defined(r)&&defined(DracoLoader._decodedModelResourceCache)){var n=DracoLoader._decodedModelResourceCache[r];if(defined(n)&&i.pendingDecodingCache)return when(n.ready,function(){e._decodedData=n.data,i.pendingDecodingCache=!1});DracoLoader._decodedModelResourceCache[r]={ready:!1,count:1,data:void 0}}if(0===i.primitivesToDecode.length)return when.resolve();for(var a=DracoLoader._getDecoderTaskProcessor(),o=[],s=scheduleDecodingTask(a,e,i);defined(s);)o.push(s),s=scheduleDecodingTask(a,e,i);return when.all(o)},DracoLoader.decodePointCloud=function(e){var t=DracoLoader._getDecoderTaskProcessor();if(DracoLoader._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])},DracoLoader.cacheDataForModel=function(e){var t=e.cacheKey;defined(t)&&defined(DracoLoader._decodedModelResourceCache)&&(defined(t=DracoLoader._decodedModelResourceCache[t])&&(t.ready=!0,t.data=e._decodedData))},DracoLoader.destroyCachedDataForModel=function(e){var t=e.cacheKey;defined(t)&&defined(DracoLoader._decodedModelResourceCache)&&(defined(e=DracoLoader._decodedModelResourceCache[t])&&0==--e.count&&delete DracoLoader._decodedModelResourceCache[t])};var textureResolutionScratch=new Cartesian2;function getClippingFunction(e,t){var i=e.unionClippingRegions,r=e.length,n=ClippingPlaneCollection.useFloatTexture(t),e=ClippingPlaneCollection.getTextureResolution(e,t,textureResolutionScratch),t=e.x,e=e.y,e=(n?getClippingPlaneFloat:getClippingPlaneUint8)(t,e);return e+="\n",e+=(i?clippingFunctionUnion:clippingFunctionIntersect)(r)}function clippingFunctionUnion(e){return"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n vec4 position = czm_windowToEyeCoordinates(fragCoord);\n vec3 clipNormal = vec3(0.0);\n vec3 clipPosition = vec3(0.0);\n float clipAmount;\n float pixelWidth = czm_metersPerPixel(position);\n bool breakAndDiscard = false;\n for (int i = 0; i < "+e+"; ++i)\n {\n vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n clipNormal = clippingPlane.xyz;\n clipPosition = -clippingPlane.w * clipNormal;\n float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));\n if (amount <= 0.0)\n {\n breakAndDiscard = true;\n break;\n }\n }\n if (breakAndDiscard) {\n discard;\n }\n return clipAmount;\n}\n"}function clippingFunctionIntersect(e){return"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n bool clipped = true;\n vec4 position = czm_windowToEyeCoordinates(fragCoord);\n vec3 clipNormal = vec3(0.0);\n vec3 clipPosition = vec3(0.0);\n float clipAmount = 0.0;\n float pixelWidth = czm_metersPerPixel(position);\n for (int i = 0; i < "+e+"; ++i)\n {\n vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n clipNormal = clippingPlane.xyz;\n clipPosition = -clippingPlane.w * clipNormal;\n float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n clipAmount = max(amount, clipAmount);\n clipped = clipped && (amount <= 0.0);\n }\n if (clipped)\n {\n discard;\n }\n return clipAmount;\n}\n"}function getClippingPlaneFloat(e,t){var i=1/t,t=1/e+"";-1===t.indexOf(".")&&(t+=".0");i+="";return-1===i.indexOf(".")&&(i+=".0"),"vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n int pixY = clippingPlaneNumber / "+e+";\n int pixX = clippingPlaneNumber - (pixY * "+e+");\n float u = (float(pixX) + 0.5) * "+t+";\n float v = (float(pixY) + 0.5) * "+i+";\n vec4 plane = texture2D(packedClippingPlanes, vec2(u, v));\n return czm_transformPlane(plane, transform);\n}\n"}function getClippingPlaneUint8(e,t){var i=1/t,t=1/e+"";-1===t.indexOf(".")&&(t+=".0");i+="";return-1===i.indexOf(".")&&(i+=".0"),"vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n int clippingPlaneStartIndex = clippingPlaneNumber * 2;\n int pixY = clippingPlaneStartIndex / "+e+";\n int pixX = clippingPlaneStartIndex - (pixY * "+e+");\n float u = (float(pixX) + 0.5) * "+t+";\n float v = (float(pixY) + 0.5) * "+i+";\n vec4 oct32 = texture2D(packedClippingPlanes, vec2(u, v)) * 255.0;\n vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);\n vec4 plane;\n plane.xyz = czm_octDecode(oct, 65535.0);\n plane.w = czm_unpackFloat(texture2D(packedClippingPlanes, vec2(u + "+t+", v)));\n return czm_transformPlane(plane, transform);\n}\n"}var JobType={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},JobType$1=Object.freeze(JobType);function ModelAnimationCache(){}var dataUriRegex=/^data\:/i;function getAccessorKey(e,t){var i=e.gltf,r=i.buffers,i=i.bufferViews[t.bufferView],r=r[i.buffer],i=i.byteOffset+t.byteOffset,t=t.count*numberOfComponentsForType(t.type),r=dataUriRegex.test(r.uri)?"":r.uri;return e.cacheKey+"//"+r+"/"+i+"/"+t}var cachedAnimationParameters={};ModelAnimationCache.getAnimationParameterValues=function(e,t){var i=getAccessorKey(e,t);if(!defined(h=cachedAnimationParameters[i])){for(var r=e.gltf,n=r.buffers,a=r.bufferViews[t.bufferView],o=n[a.buffer].extras._pipeline.source,s=t.componentType,l=t.type,c=numberOfComponentsForType(l),u=t.count,d=getAccessorByteStride(r,t),h=new Array(u),t=defaultValue(t.byteOffset,0),p=a.byteOffset+t,m=0;m=r[i+1]?r[i+1]:r[i];return this._spline.evaluate(i,t)},Object.defineProperties(SteppedSpline.prototype,{times:{get:function(){return this._spline.times}}}),SteppedSpline.prototype.wrapTime=function(e){return this._spline.wrapTime(e)},SteppedSpline.prototype.clampTime=function(e){return this._spline.clampTime(e)},ModelAnimationCache.getAnimationSpline=function(e,t,i,r,n,a,o,s){t=getAnimationSplineKey(e,t,r),r=cachedAnimationSplines[t];return defined(r)||(s=s,1===(a=a).length&&1===s.length?r=new ConstantSpline(s[0]):"LINEAR"!==n.interpolation&&"STEP"!==n.interpolation||("translation"===o||"scale"===o?r=new LinearSpline({times:a,points:s}):"rotation"===o?r=new QuaternionSpline({times:a,points:s}):"weights"===o&&(r=new WeightSpline({times:a,weights:s})),defined(r)&&"STEP"===n.interpolation&&(r=new SteppedSpline(r))),defined(e.cacheKey)&&(cachedAnimationSplines[t]=r)),r};var cachedSkinInverseBindMatrices={};ModelAnimationCache.getSkinInverseBindMatrices=function(e,t){var i=getAccessorKey(e,t);if(!defined(d=cachedSkinInverseBindMatrices[i])){var r=e.gltf,n=r.buffers,e=r.bufferViews[t.bufferView],a=n[e.buffer].extras._pipeline.source,o=t.componentType,n=t.type,s=t.count,l=getAccessorByteStride(r,t),c=e.byteOffset+t.byteOffset,u=numberOfComponentsForType(n),d=new Array(s);if(o===WebGLConstants$1.FLOAT&&n===AttributeType$1.MAT4)for(var h=0;h>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}function matchAndStoreCoordinates(e,t,i,r,n,a,o){var s=o?1:0,l=n?1:0,c=computeOrderMask(e,t,s,l,0);if(0===c)return t;var u=n?1:0,d=a?1:0,h=computeOrderMask(e,i,0,u,d);if(0===h)return i;var p=o?1:0,n=a?1:0,o=computeOrderMask(e,r,p,0,n);if(0===o)return r;var m,f,g,a=c&h&o;if(1&a)m=0,f=1,g=2;else if(2&a)m=0,g=1,f=2;else if(4&a)f=0,m=1,g=2;else if(8&a)f=0,g=1,m=2;else if(16&a)g=0,m=1,f=2;else{if(!(32&a)){c=popcount0to63(c),h=popcount0to63(h),o=popcount0to63(o);return c>=1,o.push(createTexture$1(n));r=new Texture({context:t,source:{arrayBufferView:a,mipLevels:o},width:r,height:1,pixelFormat:PixelFormat$1.LUMINANCE,sampler:new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:TextureMinificationFilter$1.LINEAR_MIPMAP_LINEAR,magnificationFilter:TextureMagnificationFilter$1.LINEAR})});return i.outlineTexture=r},ComputeCommand.prototype.execute=function(e){e.execute(this)};var OctahedralProjectionAtlasFS="varying vec2 v_textureCoordinates;\nuniform float originalSize;\nuniform sampler2D texture0;\nuniform sampler2D texture1;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nconst float yMipLevel1 = 1.0 - (1.0 / pow(2.0, 1.0));\nconst float yMipLevel2 = 1.0 - (1.0 / pow(2.0, 2.0));\nconst float yMipLevel3 = 1.0 - (1.0 / pow(2.0, 3.0));\nconst float yMipLevel4 = 1.0 - (1.0 / pow(2.0, 4.0));\nvoid main()\n{\nvec2 uv = v_textureCoordinates;\nvec2 textureSize = vec2(originalSize * 1.5 + 2.0, originalSize);\nvec2 pixel = 1.0 / textureSize;\nfloat mipLevel = 0.0;\nif (uv.x - pixel.x > (textureSize.y / textureSize.x))\n{\nmipLevel = 1.0;\nif (uv.y - pixel.y > yMipLevel1)\n{\nmipLevel = 2.0;\nif (uv.y - pixel.y * 3.0 > yMipLevel2)\n{\nmipLevel = 3.0;\nif (uv.y - pixel.y * 5.0 > yMipLevel3)\n{\nmipLevel = 4.0;\nif (uv.y - pixel.y * 7.0 > yMipLevel4)\n{\nmipLevel = 5.0;\n}\n}\n}\n}\n}\nif (mipLevel > 0.0)\n{\nfloat scale = pow(2.0, mipLevel);\nuv.y -= (pixel.y * (mipLevel - 1.0) * 2.0);\nuv.x *= ((textureSize.x - 2.0) / textureSize.y);\nuv.x -= 1.0 + pixel.x;\nuv.y -= (1.0 - (1.0 / pow(2.0, mipLevel - 1.0)));\nuv *= scale;\n}\nelse\n{\nuv.x *= (textureSize.x / textureSize.y);\n}\nif(mipLevel == 0.0)\n{\ngl_FragColor = texture2D(texture0, uv);\n}\nelse if(mipLevel == 1.0)\n{\ngl_FragColor = texture2D(texture1, uv);\n}\nelse if(mipLevel == 2.0)\n{\ngl_FragColor = texture2D(texture2, uv);\n}\nelse if(mipLevel == 3.0)\n{\ngl_FragColor = texture2D(texture3, uv);\n}\nelse if(mipLevel == 4.0)\n{\ngl_FragColor = texture2D(texture4, uv);\n}\nelse if(mipLevel == 5.0)\n{\ngl_FragColor = texture2D(texture5, uv);\n}\nelse\n{\ngl_FragColor = vec4(0.0);\n}\n}\n",OctahedralProjectionFS="varying vec3 v_cubeMapCoordinates;\nuniform samplerCube cubeMap;\nvoid main()\n{\nvec4 rgbm = textureCube(cubeMap, v_cubeMapCoordinates);\nfloat m = rgbm.a * 16.0;\nvec3 r = rgbm.rgb * m;\ngl_FragColor = vec4(r * r, 1.0);\n}\n",OctahedralProjectionVS="attribute vec4 position;\nattribute vec3 cubeMapCoordinates;\nvarying vec3 v_cubeMapCoordinates;\nvoid main()\n{\ngl_Position = position;\nv_cubeMapCoordinates = cubeMapCoordinates;\n}\n";function OctahedralProjectedCubeMap(e){this._url=e,this._cubeMapBuffers=void 0,this._cubeMaps=void 0,this._texture=void 0,this._mipTextures=void 0,this._va=void 0,this._sp=void 0,this._maximumMipmapLevel=void 0,this._loading=!1,this._ready=!1,this._readyPromise=when.defer()}Object.defineProperties(OctahedralProjectedCubeMap.prototype,{url:{get:function(){return this._url}},texture:{get:function(){return this._texture}},maximumMipmapLevel:{get:function(){return this._maximumMipmapLevel}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}}}),OctahedralProjectedCubeMap.isSupported=function(e){return e.colorBufferHalfFloat&&e.halfFloatingPointTexture||e.floatingPointTexture&&e.colorBufferFloat};for(var v1=new Cartesian3(1,0,0),v2=new Cartesian3(0,0,1),v3=new Cartesian3(-1,0,0),v4=new Cartesian3(0,0,-1),v5=new Cartesian3(0,1,0),v6=new Cartesian3(0,-1,0),cubeMapCoordinates=[v5,v3,v2,v6,v1,v5,v4,v5,v5],length=cubeMapCoordinates.length,flatCubeMapCoordinates=new Float32Array(3*length),offset=0,i$3=0;i$3D||x.center.y-x.radiusD||x.center.y-x.radius=o.clientWidth?m=!0:(positionCC=(h.x>.5*o.clientWidth?(s.width=h.x,p.frustum.right=l.x-t,positionCC=worldToClip(a,i,p,positionCC),SceneTransforms.clipToGLWindowCoordinates(s,positionCC,scratchWindowCoord0),s.x+=h.x,p.position.x=-p.position.x,e=p.frustum.right,p.frustum.right=-p.frustum.left,p.frustum.left=-e):(s.x+=h.x,s.width-=h.x,p.frustum.left=-l.x-t,positionCC=worldToClip(a,i,p,positionCC),SceneTransforms.clipToGLWindowCoordinates(s,positionCC,scratchWindowCoord0),s.x=s.x-s.width,p.position.x=-p.position.x,t=p.frustum.left,p.frustum.left=-p.frustum.right,p.frustum.right=-t),worldToClip(a,i,p,positionCC)),SceneTransforms.clipToGLWindowCoordinates(s,positionCC,scratchWindowCoord1),Cartesian3.clone(c,p.position),p.frustum=u.clone(),((r=Cartesian2.clone(scratchWindowCoord0,r)).x<0||r.x>o.clientWidth)&&(r.x=scratchWindowCoord1.x))),n.mode!==SceneMode$1.SCENE2D||m){if((positionCC=worldToClip(a,i,p,positionCC)).z<0&&!(p.frustum instanceof OrthographicFrustum)&&!(p.frustum instanceof OrthographicOffCenterFrustum))return;r=SceneTransforms.clipToGLWindowCoordinates(s,positionCC,r)}return r.y=o.clientHeight-r.y,r}},SceneTransforms.wgs84ToDrawingBufferCoordinates=function(e,t,i){if(defined(i=SceneTransforms.wgs84ToWindowCoordinates(e,t,i)))return SceneTransforms.transformWindowToDrawingBuffer(e,i,i)};var projectedPosition=new Cartesian3,positionInCartographic=new Cartographic;SceneTransforms.computeActualWgs84Position=function(e,t,i){var r=e.mode;if(r===SceneMode$1.SCENE3D)return Cartesian3.clone(t,i);var n=e.mapProjection,a=n.ellipsoid.cartesianToCartographic(t,positionInCartographic);if(defined(a)){if(n.project(a,projectedPosition),r===SceneMode$1.COLUMBUS_VIEW)return Cartesian3.fromElements(projectedPosition.z,projectedPosition.x,projectedPosition.y,i);if(r===SceneMode$1.SCENE2D)return Cartesian3.fromElements(0,projectedPosition.x,projectedPosition.y,i);e=e.morphTime;return Cartesian3.fromElements(CesiumMath.lerp(projectedPosition.z,t.x,e),CesiumMath.lerp(projectedPosition.x,t.y,e),CesiumMath.lerp(projectedPosition.y,t.z,e),i)}};var positionNDC=new Cartesian3,positionWC=new Cartesian3,viewportTransform=new Matrix4;SceneTransforms.clipToGLWindowCoordinates=function(e,t,i){return Cartesian3.divideByScalar(t,t.w,positionNDC),Matrix4.computeViewportTransformation(e,0,1,viewportTransform),Matrix4.multiplyByPoint(viewportTransform,positionNDC,positionWC),Cartesian2.fromCartesian3(positionWC,i)},SceneTransforms.transformWindowToDrawingBuffer=function(e,t,i){var r=e.canvas,n=e.drawingBufferWidth/r.clientWidth,r=e.drawingBufferHeight/r.clientHeight;return Cartesian2.fromElements(t.x*n,t.y*r,i)};var scratchNDC=new Cartesian4,scratchWorldCoords=new Cartesian4;function Billboard(e,t){var i=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).translucencyByDistance,r=e.pixelOffsetScaleByDistance,n=e.scaleByDistance,a=e.distanceDisplayCondition;defined(i)&&(i=NearFarScalar.clone(i)),defined(r)&&(r=NearFarScalar.clone(r)),defined(n)&&(n=NearFarScalar.clone(n)),defined(a)&&(a=DistanceDisplayCondition.clone(a)),this._show=defaultValue(e.show,!0),this._position=Cartesian3.clone(defaultValue(e.position,Cartesian3.ZERO)),this._actualPosition=Cartesian3.clone(this._position),this._pixelOffset=Cartesian2.clone(defaultValue(e.pixelOffset,Cartesian2.ZERO)),this._translate=new Cartesian2(0,0),this._eyeOffset=Cartesian3.clone(defaultValue(e.eyeOffset,Cartesian3.ZERO)),this._heightReference=defaultValue(e.heightReference,HeightReference$1.NONE),this._verticalOrigin=defaultValue(e.verticalOrigin,VerticalOrigin$1.CENTER),this._horizontalOrigin=defaultValue(e.horizontalOrigin,HorizontalOrigin$1.CENTER),this._scale=defaultValue(e.scale,1),this._color=Color.clone(defaultValue(e.color,Color.WHITE)),this._rotation=defaultValue(e.rotation,0),this._alignedAxis=Cartesian3.clone(defaultValue(e.alignedAxis,Cartesian3.ZERO)),this._width=e.width,this._height=e.height,this._scaleByDistance=n,this._translucencyByDistance=i,this._pixelOffsetScaleByDistance=r,this._sizeInMeters=defaultValue(e.sizeInMeters,!1),this._distanceDisplayCondition=a,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=defaultValue(e.collection,t),this._pickId=void 0,this._pickPrimitive=defaultValue(e._pickPrimitive,this),this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageIndex=-1,this._imageIndexPromise=void 0,this._imageId=void 0,this._image=void 0,this._imageSubRegion=void 0,this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;a=e.image,t=e.imageId;defined(a)&&(defined(t)||(t="string"==typeof a?a:defined(a.src)?a.src:createGuid()),this._imageId=t,this._image=a),defined(e.imageSubRegion)&&(this._imageId=t,this._imageSubRegion=e.imageSubRegion),defined(this._billboardCollection._textureAtlas)&&this._loadImage(),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=SceneMode$1.SCENE3D,this._clusterShow=!0,this._outlineColor=Color.clone(defaultValue(e.outlineColor,Color.BLACK)),this._outlineWidth=defaultValue(e.outlineWidth,0),this._updateClamping()}SceneTransforms.drawingBufferToWgs84Coordinates=function(e,t,i,r){var n=e.context.uniformState,a=n.currentFrustum,o=a.x,s=a.y;e.frameState.useLogDepth&&(l=i*n.log2FarDepthFromNearPlusOne,i=s*(1-o/(Math.pow(2,l)-1+o))/(s-o));var a=e.view.passState.viewport,l=Cartesian4.clone(Cartesian4.UNIT_W,scratchNDC);l.x=(t.x-a.x)/a.width*2-1,l.y=(t.y-a.y)/a.height*2-1,l.z=2*i-1,l.w=1;var c,i=e.camera.frustum;return defined(i.fovy)?(e=1/(c=Matrix4.multiplyByVector(n.inverseViewProjection,l,scratchWorldCoords)).w,Cartesian3.multiplyByScalar(c,e,c)):(defined(i._offCenterFrustum)&&(i=i._offCenterFrustum),(c=scratchWorldCoords).x=.5*(l.x*(i.right-i.left)+i.left+i.right),c.y=.5*(l.y*(i.top-i.bottom)+i.bottom+i.top),c.z=.5*(l.z*(o-s)-o-s),c.w=1,c=Matrix4.multiplyByVector(n.inverseView,c,c)),Cartesian3.fromCartesian4(c,r)};var SHOW_INDEX$5=Billboard.SHOW_INDEX=0,POSITION_INDEX$5=Billboard.POSITION_INDEX=1,PIXEL_OFFSET_INDEX$1=Billboard.PIXEL_OFFSET_INDEX=2,EYE_OFFSET_INDEX$1=Billboard.EYE_OFFSET_INDEX=3,HORIZONTAL_ORIGIN_INDEX$1=Billboard.HORIZONTAL_ORIGIN_INDEX=4,VERTICAL_ORIGIN_INDEX$1=Billboard.VERTICAL_ORIGIN_INDEX=5,SCALE_INDEX$1=Billboard.SCALE_INDEX=6,IMAGE_INDEX_INDEX$1=Billboard.IMAGE_INDEX_INDEX=7,COLOR_INDEX$3=Billboard.COLOR_INDEX=8,ROTATION_INDEX$1=Billboard.ROTATION_INDEX=9,ALIGNED_AXIS_INDEX$1=Billboard.ALIGNED_AXIS_INDEX=10,SCALE_BY_DISTANCE_INDEX$3=Billboard.SCALE_BY_DISTANCE_INDEX=11,TRANSLUCENCY_BY_DISTANCE_INDEX$3=Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX=12,PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX$1=Billboard.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,DISTANCE_DISPLAY_CONDITION$2=Billboard.DISTANCE_DISPLAY_CONDITION=14,DISABLE_DEPTH_DISTANCE$1=Billboard.DISABLE_DEPTH_DISTANCE=15;Billboard.TEXTURE_COORDINATE_BOUNDS=16;var SDF_INDEX$1=Billboard.SDF_INDEX=17;function makeDirty$2(e,t){var i=e._billboardCollection;defined(i)&&(i._updateBillboard(e,t),e._dirty=!0)}Billboard.NUMBER_OF_PROPERTIES=18,Object.defineProperties(Billboard.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,makeDirty$2(this,SHOW_INDEX$5))}},position:{get:function(){return this._position},set:function(e){var t=this._position;Cartesian3.equals(t,e)||(Cartesian3.clone(e,t),Cartesian3.clone(e,this._actualPosition),this._updateClamping(),makeDirty$2(this,POSITION_INDEX$5))}},heightReference:{get:function(){return this._heightReference},set:function(e){e!==this._heightReference&&(this._heightReference=e,this._updateClamping(),makeDirty$2(this,POSITION_INDEX$5))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){var t=this._pixelOffset;Cartesian2.equals(t,e)||(Cartesian2.clone(e,t),makeDirty$2(this,PIXEL_OFFSET_INDEX$1))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){var t=this._scaleByDistance;NearFarScalar.equals(t,e)||(this._scaleByDistance=NearFarScalar.clone(e,t),makeDirty$2(this,SCALE_BY_DISTANCE_INDEX$3))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){var t=this._translucencyByDistance;NearFarScalar.equals(t,e)||(this._translucencyByDistance=NearFarScalar.clone(e,t),makeDirty$2(this,TRANSLUCENCY_BY_DISTANCE_INDEX$3))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){var t=this._pixelOffsetScaleByDistance;NearFarScalar.equals(t,e)||(this._pixelOffsetScaleByDistance=NearFarScalar.clone(e,t),makeDirty$2(this,PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX$1))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){var t=this._eyeOffset;Cartesian3.equals(t,e)||(Cartesian3.clone(e,t),makeDirty$2(this,EYE_OFFSET_INDEX$1))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,makeDirty$2(this,HORIZONTAL_ORIGIN_INDEX$1))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,makeDirty$2(this,VERTICAL_ORIGIN_INDEX$1))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,makeDirty$2(this,SCALE_INDEX$1))}},color:{get:function(){return this._color},set:function(e){var t=this._color;Color.equals(t,e)||(Color.clone(e,t),makeDirty$2(this,COLOR_INDEX$3))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,makeDirty$2(this,ROTATION_INDEX$1))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){var t=this._alignedAxis;Cartesian3.equals(t,e)||(Cartesian3.clone(e,t),makeDirty$2(this,ALIGNED_AXIS_INDEX$1))}},width:{get:function(){return defaultValue(this._width,this._imageWidth)},set:function(e){this._width!==e&&(this._width=e,makeDirty$2(this,IMAGE_INDEX_INDEX$1))}},height:{get:function(){return defaultValue(this._height,this._imageHeight)},set:function(e){this._height!==e&&(this._height=e,makeDirty$2(this,IMAGE_INDEX_INDEX$1))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,makeDirty$2(this,COLOR_INDEX$3))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){DistanceDisplayCondition.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=DistanceDisplayCondition.clone(e,this._distanceDisplayCondition),makeDirty$2(this,DISTANCE_DISPLAY_CONDITION$2))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,makeDirty$2(this,DISABLE_DEPTH_DISTANCE$1))}},id:{get:function(){return this._id},set:function(e){this._id=e,defined(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,defined(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageId},set:function(e){defined(e)?"string"==typeof e?this.setImage(e,e):e instanceof Resource?this.setImage(e.url,e):defined(e.src)?this.setImage(e.src,e):this.setImage(createGuid(),e):(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=void 0,this._image=void 0,this._imageIndexPromise=void 0,makeDirty$2(this,IMAGE_INDEX_INDEX$1))}},ready:{get:function(){return-1!==this._imageIndex}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=Cartesian3.clone(e,this._actualClampedPosition),makeDirty$2(this,POSITION_INDEX$5)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,makeDirty$2(this,SHOW_INDEX$5))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){var t=this._outlineColor;Color.equals(t,e)||(Color.clone(e,t),makeDirty$2(this,SDF_INDEX$1))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,makeDirty$2(this,SDF_INDEX$1))}}}),Billboard.prototype.getPickId=function(e){return defined(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId},Billboard.prototype._updateClamping=function(){Billboard._updateClamping(this._billboardCollection,this)};var scratchCartographic$b=new Cartographic,scratchPosition$4=new Cartesian3;Billboard._updateClamping=function(e,i){var r,t,n,a,o=e._scene;function s(e){var t;i._heightReference===HeightReference$1.RELATIVE_TO_GROUND&&(i._mode===SceneMode$1.SCENE3D?((t=r.cartesianToCartographic(e,scratchCartographic$b)).height+=n.height,r.cartographicToCartesian(t,e)):e.x+=n.height),i._clampedPosition=Cartesian3.clone(e,i._clampedPosition)}defined(o)&&defined(o.globe)&&(a=o.globe,r=a.ellipsoid,t=a._surface,o=(e=o.frameState.mode)!==i._mode,i._mode=e,(i._heightReference===HeightReference$1.NONE||o)&&defined(i._removeCallbackFunc)&&(i._removeCallbackFunc(),i._removeCallbackFunc=void 0,i._clampedPosition=void 0),i._heightReference!==HeightReference$1.NONE&&defined(i._position)&&(defined(n=r.cartesianToCartographic(i._position))?(defined(i._removeCallbackFunc)&&i._removeCallbackFunc(),i._removeCallbackFunc=t.updateHeight(n,s),Cartographic.clone(n,scratchCartographic$b),defined(a=a.getHeight(n))&&(scratchCartographic$b.height=a),r.cartographicToCartesian(scratchCartographic$b,scratchPosition$4),s(scratchPosition$4)):i._actualClampedPosition=void 0))},Billboard.prototype._loadImage=function(){var e,i,r=this._billboardCollection._textureAtlas,n=this._imageId,a=this._image,o=this._imageSubRegion;defined(a)&&(e=r.addImage(n,a)),defined(o)&&(e=r.addSubRegion(n,o)),defined(this._imageIndexPromise=e)&&(i=this,e.then(function(e){var t;i._imageId===n&&i._image===a&&BoundingRectangle.equals(i._imageSubRegion,o)&&(t=r.textureCoordinates[e],i._imageWidth=r.texture.width*t.width,i._imageHeight=r.texture.height*t.height,i._imageIndex=e,i._ready=!0,i._image=void 0,i._imageIndexPromise=void 0,makeDirty$2(i,IMAGE_INDEX_INDEX$1))}).otherwise(function(e){console.error("Error loading image for billboard: "+e),i._imageIndexPromise=void 0}))},Billboard.prototype.setImage=function(e,t){this._imageId!==e&&(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=e,this._image=t,defined(this._billboardCollection._textureAtlas)&&this._loadImage())},Billboard.prototype.setImageSubRegion=function(e,t){this._imageId===e&&BoundingRectangle.equals(this._imageSubRegion,t)||(this._imageIndex=-1,this._imageId=e,this._imageSubRegion=BoundingRectangle.clone(t),defined(this._billboardCollection._textureAtlas)&&this._loadImage())},Billboard.prototype._setTranslate=function(e){var t=this._translate;Cartesian2.equals(t,e)||(Cartesian2.clone(e,t),makeDirty$2(this,PIXEL_OFFSET_INDEX$1))},Billboard.prototype._getActualPosition=function(){return defined(this._clampedPosition)?this._clampedPosition:this._actualPosition},Billboard.prototype._setActualPosition=function(e){defined(this._clampedPosition)||Cartesian3.clone(e,this._actualPosition),makeDirty$2(this,POSITION_INDEX$5)};var tempCartesian3$1=new Cartesian4;Billboard._computeActualPosition=function(e,t,i,r){return defined(e._clampedPosition)?(i.mode!==e._mode&&e._updateClamping(),e._clampedPosition):i.mode===SceneMode$1.SCENE3D?t:(Matrix4.multiplyByPoint(r,t,tempCartesian3$1),SceneTransforms.computeActualWgs84Position(i,tempCartesian3$1))};var scratchCartesian3$4=new Cartesian3;Billboard._computeScreenSpacePosition=function(e,t,i,r,n,a){t=Matrix4.multiplyByPoint(e,t,scratchCartesian3$4),a=SceneTransforms.wgs84WithEyeOffsetToWindowCoordinates(n,t,i,a);if(defined(a))return Cartesian2.add(a,r,a),a};var scratchPixelOffset=new Cartesian2(0,0);Billboard.prototype.computeScreenSpacePosition=function(e,t){var i=this._billboardCollection;defined(t)||(t=new Cartesian2),Cartesian2.clone(this._pixelOffset,scratchPixelOffset),Cartesian2.add(scratchPixelOffset,this._translate,scratchPixelOffset);var r,n=i.modelMatrix,a=this._position;return defined(this._clampedPosition)&&(a=this._clampedPosition,e.mode!==SceneMode$1.SCENE3D&&(i=(r=e.mapProjection).ellipsoid,r=r.unproject(a,scratchCartographic$b),a=i.cartographicToCartesian(r,scratchCartesian3$4),n=Matrix4.IDENTITY)),Billboard._computeScreenSpacePosition(n,a,this._eyeOffset,scratchPixelOffset,e,t)},Billboard.getScreenSpaceBoundingBox=function(e,t,i){var r=e.width,n=e.height,a=e.scale;r*=a,n*=a;a=t.x;e.horizontalOrigin===HorizontalOrigin$1.RIGHT?a-=r:e.horizontalOrigin===HorizontalOrigin$1.CENTER&&(a-=.5*r);t=t.y;return e.verticalOrigin===VerticalOrigin$1.BOTTOM||e.verticalOrigin===VerticalOrigin$1.BASELINE?t-=n:e.verticalOrigin===VerticalOrigin$1.CENTER&&(t-=.5*n),(i=!defined(i)?new BoundingRectangle:i).x=a,i.y=t,i.width=r,i.height=n,i},Billboard.prototype.equals=function(e){return this===e||defined(e)&&this._id===e._id&&Cartesian3.equals(this._position,e._position)&&this._imageId===e._imageId&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&BoundingRectangle.equals(this._imageSubRegion,e._imageSubRegion)&&Color.equals(this._color,e._color)&&Cartesian2.equals(this._pixelOffset,e._pixelOffset)&&Cartesian2.equals(this._translate,e._translate)&&Cartesian3.equals(this._eyeOffset,e._eyeOffset)&&NearFarScalar.equals(this._scaleByDistance,e._scaleByDistance)&&NearFarScalar.equals(this._translucencyByDistance,e._translucencyByDistance)&&NearFarScalar.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&DistanceDisplayCondition.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance},Billboard.prototype._destroy=function(){defined(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),defined(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var BlendOption={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},BlendOption$1=Object.freeze(BlendOption),SDFSettings={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},SDFSettings$1=Object.freeze(SDFSettings);function TextureAtlasNode(e,t,i,r,n){this.bottomLeft=defaultValue(e,Cartesian2.ZERO),this.topRight=defaultValue(t,Cartesian2.ZERO),this.childNode1=i,this.childNode2=r,this.imageIndex=n}var defaultInitialSize=new Cartesian2(16,16);function TextureAtlas(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT);var t=defaultValue(e.borderWidthInPixels,1),i=defaultValue(e.initialSize,defaultInitialSize);this._context=e.context,this._pixelFormat=defaultValue(e.pixelFormat,PixelFormat$1.RGBA),this._borderWidthInPixels=t,this._textureCoordinates=[],this._guid=createGuid(),this._idHash={},this._initialSize=i,this._root=void 0}function resizeAtlas(e,t){var i=e._context,r=e.numberOfImages,n=e._borderWidthInPixels;if(0]/,n=[],a="",o=textTypes.LTR,s="",l=e.length,c=0;c";case">":return"<"}}Object.defineProperties(Label.prototype,{show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;for(var t=this._glyphs,i=0,r=t.length;ic+1?o[c+1].Type===textTypes.RTL?(l=d+l,s=0):(l=spliceWord(l,s,u.Word),s+=u.Word.length):l=spliceWord(l,0,d)):u.Type===textTypes.RTL?l=spliceWord(l,s,d):u.Type===textTypes.LTR?s=(l+=u.Word).length:u.Type!==textTypes.WEAK&&u.Type!==textTypes.BRACKETS||(0c+1?o[c+1].Type===textTypes.RTL?l=spliceWord(l,s,d):s=(l+=u.Word).length:l+=u.Word:s=(l+=u.Word).length)}i+=l,r=e.length-1)return e.length;for(var i,r,n,a,o,s,l=F(L(e,t)),c=[],u=t+1;uCesiumMath.SIXTY_FOUR_KILOBYTES&&(h._locatorBuckets.push({locator:a,count:g}),g=0,t.push(4),s=[],e.push(s),l=0,a.count=o,a=new VertexArrayBucketLocator(r=o=0,0,this),i[++n]=[a]),s.push(l,l+2,l+1),s.push(l+1,l+2,l+3),g+=6,o+=6,r+=6,l+=4;h._locatorBuckets.push({locator:a,count:g}),l+4>CesiumMath.SIXTY_FOUR_KILOBYTES&&(t.push(0),s=[],e.push(s),l=0,a.count=o,a=new VertexArrayBucketLocator(o=r=0,0,this),i[++n]=[a])}h._clean()}return a.count=o,r},PolylineBucket.prototype.getPolylineStartIndex=function(e){for(var t=this.polylines,i=0,r=t.length,n=0;ns&&(o=new Float32Array(o.buffer,0,s));for(var l,r=this.getSegments(t,r),c=r.positions,u=r.lengths,d=0,h=0,p=0,m=c.length,f=0;fi._depth+e.skipLevels)}function sortChildrenByDistanceToCamera(e,t){return 0===t._distanceToCamera&&0===e._distanceToCamera?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera}function updateAndPushChildren(e,t,i,r){for(var n=t.refine===Cesium3DTileRefine$1.REPLACE,a=t.children,o=a.length,s=0;si:t._screenSpaceError>i))}function canTraverse(e,t){return 0!==t.children.length&&(t.hasTilesetContent?!t.contentExpired:t._screenSpaceError>e._maximumScreenSpaceError)}function executeTraversal(e,t,i,r,n){var a=traversal.stack;for(a.push(t);0e._maximumScreenSpaceError;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;var r=t.parent,n=e._maximumScreenSpaceError,e=t._screenSpaceErrorProgressiveResolution<=n,n=defined(r)&&r._screenSpaceErrorProgressiveResolution>n;return i=e&&n?t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0:i}function getPriorityReverseScreenSpaceError(e,t){var i=t.parent,t=(defined(i)&&(!e._skipLevelOfDetail||0===t._screenSpaceError||i.hasTilesetContent)?i:t)._screenSpaceError;return e.root._screenSpaceError-t}function updateExpireDate(e){var t;defined(e.expireDuration)&&(t=JulianDate.now(scratchJulianDate$1),JulianDate.addSeconds(t,e.expireDuration,t),defined(e.expireDate)?JulianDate.lessThan(e.expireDate,t)&&JulianDate.clone(t,e.expireDate):e.expireDate=JulianDate.clone(t))}function getContentFailedFunction(t,i){return function(e){t._contentState===Cesium3DTileContentState$1.PROCESSING?--i.statistics.numberOfTilesProcessing:--i.statistics.numberOfPendingRequests,t._contentState=Cesium3DTileContentState$1.FAILED,t._contentReadyPromise.reject(e),t._contentReadyToProcessPromise.reject(e)}}function createPriorityFunction(e){return function(){return e._priority}}Cesium3DTile.prototype.getScreenSpaceError=function(e,t,i){var r=this._tileset,n=defaultValue(i,1),a=defined(this.parent)?this.parent.geometricError:r._geometricError,o=t?a:this.geometricError;if(0===o)return 0;var s,l=e.camera,i=l.frustum,t=e.context,a=t.drawingBufferWidth,n=t.drawingBufferHeight*n;return e.mode===SceneMode$1.SCENE2D||i instanceof OrthographicFrustum?(defined(i._offCenterFrustum)&&(i=i._offCenterFrustum),s=o/(Math.max(i.top-i.bottom,i.right-i.left)/Math.max(a,n))):(s=o*n/((n=Math.max(this._distanceToCamera,CesiumMath.EPSILON7))*l.frustum.sseDenominator),r.dynamicScreenSpaceError&&(l=r._dynamicScreenSpaceErrorComputedDensity,r=r.dynamicScreenSpaceErrorFactor,s-=CesiumMath.fog(n,l)*r)),s/=e.pixelRatio},Cesium3DTile.prototype.updateVisibility=function(e){var t=this.parent,i=this._tileset,r=defined(t)?t.computedTransform:i.modelMatrix,t=defined(t)?t._visibilityPlaneMask:CullingVolume.MASK_INDETERMINATE;this.updateTransform(r),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,i.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,t),this._visible=this._visibilityPlaneMask!==CullingVolume.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=getPriorityReverseScreenSpaceError(i,this),this._priorityProgressiveResolution=isPriorityProgressiveResolution(i,this),this.priorityDeferred=isPriorityDeferred(this,e)},Cesium3DTile.prototype.updateExpiration=function(){var e;defined(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&(e=JulianDate.now(scratchJulianDate$1),JulianDate.lessThan(this.expireDate,e)&&(this._contentState=Cesium3DTileContentState$1.EXPIRED,this._expiredContent=this._content))},Cesium3DTile.prototype.requestContent=function(){var n=this,a=this._tileset;if(this.hasEmptyContent)return!1;var e=this._contentResource.clone(),o=this.contentExpired;o&&e.setQueryParameters({expired:this.expireDate.toString()});var t=new Request({throttle:!0,throttleByServer:!0,type:RequestType$1.TILES3D,priorityFunction:createPriorityFunction(this),serverKey:this._serverKey});this._request=t,e.request=t;e=e.fetchArrayBuffer();if(!defined(e))return!1;var i=this._contentState;this._contentState=Cesium3DTileContentState$1.LOADING,this._contentReadyToProcessPromise=when.defer(),this._contentReadyPromise=when.defer();var s=getContentFailedFunction(this,a);return e.then(function(e){if(!n.isDestroyed()){var t,i=getMagic(new Uint8Array(e)),r=Cesium3DTileContentFactory[i];return a._disableSkipLevelOfDetail=a._disableSkipLevelOfDetail||"vctr"===i||"geom"===i,defined(r)?t=r(a,n,n._contentResource,e,0):(t=Cesium3DTileContentFactory.json(a,n,n._contentResource,e,0),n.hasTilesetContent=!0),o&&(n.expireDate=void 0),n._content=t,n._contentState=Cesium3DTileContentState$1.PROCESSING,n._contentReadyToProcessPromise.resolve(t),t.readyPromise.then(function(e){n.isDestroyed()?s():(updateExpireDate(n),n._selectedFrame=0,n.lastStyleTime=0,JulianDate.now(n._loadTimestamp),n._contentState=Cesium3DTileContentState$1.READY,n._contentReadyPromise.resolve(e))})}s()}).otherwise(function(e){return t.state===RequestState$1.CANCELLED?(n._contentState=i,--a.statistics.numberOfPendingRequests,void++a.statistics.numberOfAttemptedRequests):void s(e)}),!0},Cesium3DTile.prototype.unloadContent=function(){this.hasEmptyContent||this.hasTilesetContent||(this._content=this._content&&this._content.destroy(),this._contentState=Cesium3DTileContentState$1.UNLOADED,this._contentReadyToProcessPromise=void 0,this._contentReadyPromise=void 0,this.lastStyleTime=0,this.clippingPlanesDirty=0===this._clippingPlanesState,this._clippingPlanesState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var scratchProjectedBoundingSphere=new BoundingSphere;function getBoundingVolume(e,t){var i;return t.mode===SceneMode$1.SCENE3D||defined(e._boundingVolume2D)||(i=e._boundingVolume.boundingSphere,i=BoundingSphere.projectTo2D(i,t.mapProjection,scratchProjectedBoundingSphere),e._boundingVolume2D=new TileBoundingSphere(i.center,i.radius)),t.mode!==SceneMode$1.SCENE3D?e._boundingVolume2D:e._boundingVolume}function getContentBoundingVolume(e,t){var i;return t.mode===SceneMode$1.SCENE3D||defined(e._contentBoundingVolume2D)||(i=e._contentBoundingVolume.boundingSphere,i=BoundingSphere.projectTo2D(i,t.mapProjection,scratchProjectedBoundingSphere),e._contentBoundingVolume2D=new TileBoundingSphere(i.center,i.radius)),t.mode!==SceneMode$1.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}Cesium3DTile.prototype.visibility=function(e,t){var i=e.cullingVolume,r=getBoundingVolume(this,e),n=this._tileset,e=n.clippingPlanes;if(defined(e)&&e.enabled){n=e.computeIntersectionWithBoundingVolume(r,n.clippingPlanesOriginMatrix);if(this._isClipped=n!==Intersect$1.INSIDE,n===Intersect$1.OUTSIDE)return CullingVolume.MASK_OUTSIDE}return i.computeVisibilityWithPlaneMask(r,t)},Cesium3DTile.prototype.contentVisibility=function(e){if(!defined(this._contentBoundingVolume))return Intersect$1.INSIDE;if(this._visibilityPlaneMask===CullingVolume.MASK_INSIDE)return Intersect$1.INSIDE;var t=e.cullingVolume,i=getContentBoundingVolume(this,e),r=this._tileset,e=r.clippingPlanes;if(defined(e)&&e.enabled){r=e.computeIntersectionWithBoundingVolume(i,r.clippingPlanesOriginMatrix);if(this._isClipped=r!==Intersect$1.INSIDE,r===Intersect$1.OUTSIDE)return Intersect$1.OUTSIDE}return t.computeVisibility(i)},Cesium3DTile.prototype.distanceToTile=function(e){return getBoundingVolume(this,e).distanceToCamera(e)};var scratchToTileCenter=new Cartesian3;Cesium3DTile.prototype.distanceToTileCenter=function(e){var t=getBoundingVolume(this,e).boundingVolume,t=Cartesian3.subtract(t.center,e.camera.positionWC,scratchToTileCenter);return Cartesian3.dot(e.camera.directionWC,t)},Cesium3DTile.prototype.insideViewerRequestVolume=function(e){var t=this._viewerRequestVolume;return!defined(t)||0===t.distanceToCamera(e)};var scratchMatrix$2=new Matrix3,scratchScale$2=new Cartesian3,scratchHalfAxes=new Matrix3,scratchCenter$3=new Cartesian3,scratchRectangle$5=new Rectangle,scratchOrientedBoundingBox=new OrientedBoundingBox,scratchTransform=new Matrix4;function createBox(e,t,i){var r=Cartesian3.fromElements(e[0],e[1],e[2],scratchCenter$3),e=Matrix3.fromArray(e,3,scratchHalfAxes),r=Matrix4.multiplyByPoint(t,r,r),t=Matrix4.getMatrix3(t,scratchMatrix$2),e=Matrix3.multiply(t,e,e);return defined(i)?(i.update(r,e),i):new TileOrientedBoundingBox(r,e)}function createBoxFromTransformedRegion(e,t,i,r){var n=Rectangle.unpack(e,0,scratchRectangle$5),a=e[4],e=e[5],a=OrientedBoundingBox.fromRectangle(n,a,e,Ellipsoid.WGS84,scratchOrientedBoundingBox),e=a.center,a=a.halfAxes;t=Matrix4.multiplyTransformation(t,Matrix4.inverseTransformation(i,scratchTransform),scratchTransform);e=Matrix4.multiplyByPoint(t,e,e),t=Matrix4.getMatrix3(t,scratchMatrix$2),a=Matrix3.multiply(t,a,a);return defined(r)&&r instanceof TileOrientedBoundingBox?(r.update(e,a),r):new TileOrientedBoundingBox(e,a)}function createRegion(e,t,i,r){return Matrix4.equalsEpsilon(t,i,CesiumMath.EPSILON8)?defined(r)?r:new TileBoundingRegion({rectangle:Rectangle.unpack(e,0,scratchRectangle$5),minimumHeight:e[4],maximumHeight:e[5]}):createBoxFromTransformedRegion(e,t,i,r)}function createSphere(e,t,i){var r=Cartesian3.fromElements(e[0],e[1],e[2],scratchCenter$3),e=e[3],r=Matrix4.multiplyByPoint(t,r,r),t=Matrix4.getScale(t,scratchScale$2);return e*=Cartesian3.maximumComponent(t),defined(i)?(i.update(r,e),i):new TileBoundingSphere(r,e)}function applyDebugSettings$1(e,t,i,r){var n,a,o;r.isRender&&(o=defined(e._header.content)&&defined(e._header.content.boundingVolume),n=e.hasEmptyContent||e.hasTilesetContent,(a=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o)?(r=e._finalResolution?n?Color.DARKGRAY:Color.WHITE:Color.YELLOW,defined(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(r)),e._debugBoundingVolume.update(i),(n=e._debugBoundingVolume.getGeometryInstanceAttributes("outline")).color=ColorGeometryInstanceAttribute.toValue(r,n.color)):!a&&defined(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy()),t.debugShowContentBoundingVolume&&o?(defined(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(Color.BLUE)),e._debugContentBoundingVolume.update(i)):!t.debugShowContentBoundingVolume&&defined(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&defined(e._viewerRequestVolume)?(defined(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(Color.YELLOW)),e._debugViewerRequestVolume.update(i)):!t.debugShowViewerRequestVolume&&defined(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy()),a=t.debugColorizeTiles&&!e._debugColorizeTiles||defined(t._heatmap.tilePropertyName),o=!t.debugColorizeTiles&&e._debugColorizeTiles,a?(t._heatmap.colorize(e,i),e._debugColorizeTiles=!0,e.color=e._debugColor):o&&(e._debugColorizeTiles=!1,e.color=Color.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),o&&t.makeStyleDirty())}function updateContent(e,t,i){var r=e._content,n=e._expiredContent;if(defined(n)){if(!e.contentReady)return void n.update(t,i);e._expiredContent.destroy(),e._expiredContent=void 0}r.update(t,i)}function updateClippingPlanes(e,t){var i=t.clippingPlanes,t=0;(t=defined(i)&&e._isClipped&&i.enabled?i.clippingPlanesState:t)!==e._clippingPlanesState&&(e._clippingPlanesState=t,e.clippingPlanesDirty=!0)}Cesium3DTile.prototype.createBoundingVolume=function(e,t,i){if(!defined(e))throw new RuntimeError("boundingVolume must be defined");if(defined(e.box))return createBox(e.box,t,i);if(defined(e.region))return createRegion(e.region,t,this._initialTransform,i);if(defined(e.sphere))return createSphere(e.sphere,t,i);throw new RuntimeError("boundingVolume must contain a sphere, region, or box")},Cesium3DTile.prototype.updateTransform=function(e){e=defaultValue(e,Matrix4.IDENTITY);var t=Matrix4.multiply(e,this.transform,scratchTransform);Matrix4.equals(t,this.computedTransform)||(Matrix4.clone(t,this.computedTransform),e=this._header,t=this._header.content,this._boundingVolume=this.createBoundingVolume(e.boundingVolume,this.computedTransform,this._boundingVolume),defined(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(t.boundingVolume,this.computedTransform,this._contentBoundingVolume)),defined(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(e.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())},Cesium3DTile.prototype.updateGeometricErrorScale=function(){var e=Matrix4.getScale(this.computedTransform,scratchScale$2),e=Cartesian3.maximumComponent(e);this.geometricError=this._geometricError*e},Cesium3DTile.prototype.update=function(e,t,i){var r=t.commandList.length;updateClippingPlanes(this,e),applyDebugSettings$1(this,e,t,i),updateContent(this,e,t),this._commandsLength=t.commandList.length-r,this.clippingPlanesDirty=!1};var scratchCommandList$1=[];function isolateDigits(e,t,i){t=e*Math.pow(10,t);return parseInt(t)*Math.pow(10,i)}function priorityNormalizeAndClamp(e,t,i){return Math.max(CesiumMath.normalize(e,t,i)-CesiumMath.EPSILON7,0)}Cesium3DTile.prototype.process=function(e,t){var i=t.commandList;t.commandList=scratchCommandList$1,this._content.update(e,t),scratchCommandList$1.length=0,t.commandList=i},Cesium3DTile.prototype.updatePriority=function(){var e=this.tileset,t=e.preferLeaves,i=e._minimumPriority,r=e._maximumPriority,n=Math.pow(10,8),a=Math.pow(10,9),o=Math.pow(10,10),s=priorityNormalizeAndClamp(this._depth,i.depth,r.depth),s=t?1-s:s,t=isolateDigits(!e._skipLevelOfDetail&&this.refine===Cesium3DTileRefine$1.REPLACE?priorityNormalizeAndClamp(this._priorityHolder._distanceToCamera,i.distance,r.distance):priorityNormalizeAndClamp(this._priorityReverseScreenSpaceError,i.reverseScreenSpaceError,r.reverseScreenSpaceError),4,0),n=this._priorityProgressiveResolution?0:n,r=isolateDigits(priorityNormalizeAndClamp(this._priorityHolder._foveatedFactor,i.foveatedFactor,r.foveatedFactor),4,4),a=this.priorityDeferred?a:0,o=e._pass===Cesium3DTilePass$1.PRELOAD_FLIGHT?0:o;this._priority=s+t+n+r+a+o},Cesium3DTile.prototype.isDestroyed=function(){return!1},Cesium3DTile.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),destroyObject(this)};var Cesium3DTileOptimizations={},scratchAxis$1=new Cartesian3;function Cesium3DTilesetCache(){this._list=new DoublyLinkedList,this._sentinel=this._list.add(),this._trimTiles=!1}function Cesium3DTilesetHeatmap(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function getHeatmapValue(e,t){e="_loadTimestamp"===t?JulianDate.toDate(e).getTime():e;return e}function getHeatmapValueAndUpdateMinimumMaximum(e,t){var i=e.tilePropertyName;if(defined(i)){i=getHeatmapValue(t[i],i);return defined(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}Cesium3DTileOptimizations.checkChildrenWithinParent=function(e){var t=e.children,i=t.length,r=e.boundingVolume;if(r instanceof TileOrientedBoundingBox||r instanceof TileBoundingRegion){var n=r._orientedBoundingBox;e._optimChildrenWithinParent=Cesium3DTileOptimizationHint$1.USE_OPTIMIZATION;for(var a=0;an||i);){var s=o.item,o=o.next;this.unloadTile(e,s,t)}},Cesium3DTilesetCache.prototype.trim=function(){this._trimTiles=!0},Cesium3DTilesetHeatmap.prototype.setReferenceMinimumMaximum=function(e,t,i){this._referenceMinimum[i]=getHeatmapValue(e,i),this._referenceMaximum[i]=getHeatmapValue(t,i)};var heatmapColors=[new Color(.1,.1,.1,1),new Color(.153,.278,.878,1),new Color(.827,.231,.49,1),new Color(.827,.188,.22,1),new Color(1,.592,.259,1),new Color(1,.843,0,1)];function Cesium3DTilesetStatistics(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.batchTableByteLength=0}function updatePointAndFeatureCounts(e,t,i,r){var n=t.innerContents,a=t.pointsLength,o=t.trianglesLength,s=t.featuresLength,l=t.geometryByteLength,c=t.texturesByteLength,t=t.batchTableByteLength;if(r?(e.numberOfFeaturesLoaded+=i?-s:s,e.numberOfPointsLoaded+=i?-a:a,e.geometryByteLength+=i?-l:l,e.texturesByteLength+=i?-c:c,e.batchTableByteLength+=i?-t:t):(e.numberOfFeaturesSelected+=i?-s:s,e.numberOfPointsSelected+=i?-a:a,e.numberOfTrianglesSelected+=i?-o:o),defined(n))for(var u=n.length,d=0;dApproximateTerrainHeights._defaultMinTerrainHeight&&(l._initialClippingPlanesOriginMatrix=Transforms.eastNorthUpToFixedFrame(i)),l._clippingPlanesOriginMatrix=Matrix4.clone(l._initialClippingPlanesOriginMatrix),l._readyPromise.resolve(l)}).otherwise(function(e){l._readyPromise.reject(e)})}Cesium3DTilesetHeatmap.prototype.colorize=function(e,t){var i,r,n;defined(this.tilePropertyName)&&e.contentAvailable&&e._selectedFrame===t.frameNumber&&(r=getHeatmapValueAndUpdateMinimumMaximum(this,e),n=this._previousMinimum,i=this._previousMaximum,n!==Number.MAX_VALUE&&i!==-Number.MAX_VALUE&&(t=i-n+CesiumMath.EPSILON7,i=CesiumMath.clamp(r-n,0,t)/t*(heatmapColors.length-1),r=Math.floor(i),n=Math.ceil(i),t=i-r,i=heatmapColors[r],r=heatmapColors[n],(n=Color.clone(Color.WHITE)).red=CesiumMath.lerp(i.red,r.red,t),n.green=CesiumMath.lerp(i.green,r.green,t),n.blue=CesiumMath.lerp(i.blue,r.blue,t),e._debugColor=n))},Cesium3DTilesetHeatmap.prototype.resetMinimumMaximum=function(){var e,t,i=this.tilePropertyName;defined(i)&&(e=this._referenceMinimum[i],t=this._referenceMaximum[i],i=defined(e)&&defined(t),this._previousMinimum=i?e:this._minimum,this._previousMaximum=i?t:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE)},Cesium3DTilesetStatistics.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0},Cesium3DTilesetStatistics.prototype.incrementSelectionCounts=function(e){updatePointAndFeatureCounts(this,e,!1,!1)},Cesium3DTilesetStatistics.prototype.incrementLoadCounts=function(e){updatePointAndFeatureCounts(this,e,!1,!0)},Cesium3DTilesetStatistics.prototype.decrementLoadCounts=function(e){updatePointAndFeatureCounts(this,e,!0,!0)},Cesium3DTilesetStatistics.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.selected=e.selected,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.batchTableByteLength=e.batchTableByteLength},Object.defineProperties(Cesium3DTileStyleEngine.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}}),Cesium3DTileStyleEngine.prototype.makeDirty=function(){this._styleDirty=!0},Cesium3DTileStyleEngine.prototype.resetDirty=function(){this._styleDirty=!1},Cesium3DTileStyleEngine.prototype.applyStyle=function(e){if(e.ready&&(!defined(this._style)||this._style.ready)){var t=this._styleDirty;t&&++this._lastStyleTime;for(var i=this._lastStyleTime,r=e._statistics,n=t?e._selectedTiles:e._selectedTilesToStyle,a=n.length,o=0;or.minimumRadius?(s=Cartographic.fromCartesian(t,r,scratchCartographic$8),p=Cartesian3.normalize(c.positionWC,scratchPositionNormal$2),n=c.directionWC,a=c.positionCartographic.height,h=0,o=2*s.height):(s=Matrix4.multiplyByPoint(i,c.positionWC,scratchPosition$2),p=Cartesian3.UNIT_Z,n=Matrix4.multiplyByPointAsVector(i,c.directionWC,scratchDirection$1),n=Cartesian3.normalize(n,n),a=s.z,d instanceof TileOrientedBoundingBox?(u=u._header.boundingVolume.box[11],h=t.z-u,o=t.z+u):d instanceof TileBoundingSphere&&(l=l.radius,h=t.z-l,o=t.z+l)));var h=h+(o-h)*e.dynamicScreenSpaceErrorHeightFalloff,h=CesiumMath.clamp((a-h)/(o-h),0,1),p=1-Math.abs(Cartesian3.dot(n,p));p*=1-h;h=e.dynamicScreenSpaceErrorDensity;h*=p,e._dynamicScreenSpaceErrorComputedDensity=h}function requestContent(e,t){var i,r;t.hasEmptyContent||(i=e._statistics,r=t.contentExpired,t.requestContent()?(r&&(t.hasTilesetContent?destroySubtree(e,t):(i.decrementLoadCounts(t.content),--i.numberOfTilesWithContentReady)),++i.numberOfPendingRequests,e._requestedTilesInFlight.push(t),t.contentReadyToProcessPromise.then(addToProcessingQueue(e,t)),t.contentReadyPromise.then(handleTileSuccess(e,t)).otherwise(handleTileFailure(e,t))):++i.numberOfAttemptedRequests)}function sortRequestByPriority(e,t){return e._priority-t._priority}function cancelOutOfViewRequests(e,t){for(var i=e._requestedTilesInFlight,r=0,n=i.length,a=0;au&&swapItem(e,t,r,n);du;)h--}t[2*r+a]===u?swapItem(e,t,r,h):swapItem(e,t,++h,n),h<=i&&(r=h+1),i<=h&&(n=h-1)}}function swapItem(e,t,i,r){swap$1(e,i,r),swap$1(t,2*i,2*r),swap$1(t,2*i+1,2*r+1)}function swap$1(e,t,i){var r=e[t];e[t]=e[i],e[i]=r}function within(e,t,i,r,n,a){for(var o=[0,e.length-1,0],s=[],l=n*n;o.length;){var c=o.pop(),u=o.pop(),d=o.pop();if(u-d<=a)for(var h=d;h<=u;h++)sqDist(t[2*h],t[2*h+1],i,r)<=l&&s.push(e[h]);else{var p=Math.floor((d+u)/2),m=t[2*p],f=t[2*p+1];sqDist(m,f,i,r)<=l&&s.push(e[p]);var g=(c+1)%2;(0===c?i-n<=m:r-n<=f)&&(o.push(d),o.push(p-1),o.push(g)),(0===c?m<=i+n:f<=r+n)&&(o.push(p+1),o.push(u),o.push(g))}}return s}function sqDist(e,t,i,r){i=e-i,r=t-r;return i*i+r*r}function EntityCluster(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._enabled=defaultValue(e.enabled,!1),this._pixelRange=defaultValue(e.pixelRange,80),this._minimumClusterSize=defaultValue(e.minimumClusterSize,2),this._clusterBillboards=defaultValue(e.clusterBillboards,!0),this._clusterLabels=defaultValue(e.clusterLabels,!0),this._clusterPoints=defaultValue(e.clusterPoints,!0),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new Event,this.show=defaultValue(e.show,!0)}function getX(e){return e.coord.x}function getY(e){return e.coord.y}function expandBoundingBox(e,t){e.x-=t,e.y-=t,e.width+=2*t,e.height+=2*t}PointPrimitiveCollection.prototype.update=function(e){if(removePointPrimitives(this),this.show){this._maxTotalPointSize=ContextLimits.maximumAliasedPointSize,updateMode(this,e);var t=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,r=this._pointPrimitivesToUpdateIndex,n=this._propertiesChanged,a=this._createVertexArray,o=e.context,s=e.passes,l=s.pick;if(a||!l&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(var c=0;cs)return;if(this._backwardExtrapolationType===ExtrapolationType$1.HOLD)return n.unpack(a,0,t)}if(r<=l){var l,c=i[l=r-1];if(s=this._forwardExtrapolationDuration,this._forwardExtrapolationType===ExtrapolationType$1.NONE||0!==s&&JulianDate.secondsDifference(e,c)>s)return;if(this._forwardExtrapolationType===ExtrapolationType$1.HOLD)return l=r-1,n.unpack(a,l*n.packedLength,t)}var u=this._xTable,d=this._yTable,h=this._interpolationAlgorithm,o=this._packedInterpolationLength,c=this._inputOrder;this._updateTableLength&&(this._updateTableLength=!1,(p=Math.min(h.getRequiredDataPoints(this._interpolationDegree,c),r))!==this._numberOfPoints&&(this._numberOfPoints=p,u.length=p,d.length=p*o));s=this._numberOfPoints-1;if(s<1)return;var p,m=0,f=r-1;1+s<=f-m+1&&(m=p=f<(r=(p=(p=l-(s/2|0)-1). version format.");i=t._documentPacket;defined(e.name)&&(i.name=e.name);t=e.clock;defined(t)&&(defined(e=i.clock)?(e.interval=defaultValue(t.interval,e.interval),e.currentTime=defaultValue(t.currentTime,e.currentTime),e.range=defaultValue(t.range,e.range),e.step=defaultValue(t.step,e.step),e.multiplier=defaultValue(t.multiplier,e.multiplier)):i.clock={interval:t.interval,currentTime:t.currentTime,range:t.range,step:t.step,multiplier:t.multiplier})}function processEllipse(e,t,i,r){var n,a=t.ellipse;defined(a)&&(n=intervalFromString(a.interval),defined(t=e.ellipse)||(e.ellipse=t=new EllipseGraphics),processPacketData(Boolean,t,"show",a.show,n,r,i),processPacketData(Number,t,"semiMajorAxis",a.semiMajorAxis,n,r,i),processPacketData(Number,t,"semiMinorAxis",a.semiMinorAxis,n,r,i),processPacketData(Number,t,"height",a.height,n,r,i),processPacketData(HeightReference$1,t,"heightReference",a.heightReference,n,r,i),processPacketData(Number,t,"extrudedHeight",a.extrudedHeight,n,r,i),processPacketData(HeightReference$1,t,"extrudedHeightReference",a.extrudedHeightReference,n,r,i),processPacketData(Rotation,t,"rotation",a.rotation,n,r,i),processPacketData(Rotation,t,"stRotation",a.stRotation,n,r,i),processPacketData(Number,t,"granularity",a.granularity,n,r,i),processPacketData(Boolean,t,"fill",a.fill,n,r,i),processMaterialPacketData(t,"material",a.material,n,r,i),processPacketData(Boolean,t,"outline",a.outline,n,r,i),processPacketData(Color,t,"outlineColor",a.outlineColor,n,r,i),processPacketData(Number,t,"outlineWidth",a.outlineWidth,n,r,i),processPacketData(Number,t,"numberOfVerticalLines",a.numberOfVerticalLines,n,r,i),processPacketData(ShadowMode$1,t,"shadows",a.shadows,n,r,i),processPacketData(DistanceDisplayCondition,t,"distanceDisplayCondition",a.distanceDisplayCondition,n,r,i),processPacketData(ClassificationType$1,t,"classificationType",a.classificationType,n,r,i),processPacketData(Number,t,"zIndex",a.zIndex,n,r,i))}function processEllipsoid(e,t,i,r){var n,a=t.ellipsoid;defined(a)&&(n=intervalFromString(a.interval),defined(t=e.ellipsoid)||(e.ellipsoid=t=new EllipsoidGraphics),processPacketData(Boolean,t,"show",a.show,n,r,i),processPacketData(Cartesian3,t,"radii",a.radii,n,r,i),processPacketData(Cartesian3,t,"innerRadii",a.innerRadii,n,r,i),processPacketData(Number,t,"minimumClock",a.minimumClock,n,r,i),processPacketData(Number,t,"maximumClock",a.maximumClock,n,r,i),processPacketData(Number,t,"minimumCone",a.minimumCone,n,r,i),processPacketData(Number,t,"maximumCone",a.maximumCone,n,r,i),processPacketData(HeightReference$1,t,"heightReference",a.heightReference,n,r,i),processPacketData(Boolean,t,"fill",a.fill,n,r,i),processMaterialPacketData(t,"material",a.material,n,r,i),processPacketData(Boolean,t,"outline",a.outline,n,r,i),processPacketData(Color,t,"outlineColor",a.outlineColor,n,r,i),processPacketData(Number,t,"outlineWidth",a.outlineWidth,n,r,i),processPacketData(Number,t,"stackPartitions",a.stackPartitions,n,r,i),processPacketData(Number,t,"slicePartitions",a.slicePartitions,n,r,i),processPacketData(Number,t,"subdivisions",a.subdivisions,n,r,i),processPacketData(ShadowMode$1,t,"shadows",a.shadows,n,r,i),processPacketData(DistanceDisplayCondition,t,"distanceDisplayCondition",a.distanceDisplayCondition,n,r,i))}function processLabel(e,t,i,r){var n,a=t.label;defined(a)&&(n=intervalFromString(a.interval),defined(t=e.label)||(e.label=t=new LabelGraphics),processPacketData(Boolean,t,"show",a.show,n,r,i),processPacketData(String,t,"text",a.text,n,r,i),processPacketData(String,t,"font",a.font,n,r,i),processPacketData(LabelStyle$1,t,"style",a.style,n,r,i),processPacketData(Number,t,"scale",a.scale,n,r,i),processPacketData(Boolean,t,"showBackground",a.showBackground,n,r,i),processPacketData(Color,t,"backgroundColor",a.backgroundColor,n,r,i),processPacketData(Cartesian2,t,"backgroundPadding",a.backgroundPadding,n,r,i),processPacketData(Cartesian2,t,"pixelOffset",a.pixelOffset,n,r,i),processPacketData(Cartesian3,t,"eyeOffset",a.eyeOffset,n,r,i),processPacketData(HorizontalOrigin$1,t,"horizontalOrigin",a.horizontalOrigin,n,r,i),processPacketData(VerticalOrigin$1,t,"verticalOrigin",a.verticalOrigin,n,r,i),processPacketData(HeightReference$1,t,"heightReference",a.heightReference,n,r,i),processPacketData(Color,t,"fillColor",a.fillColor,n,r,i),processPacketData(Color,t,"outlineColor",a.outlineColor,n,r,i),processPacketData(Number,t,"outlineWidth",a.outlineWidth,n,r,i),processPacketData(NearFarScalar,t,"translucencyByDistance",a.translucencyByDistance,n,r,i),processPacketData(NearFarScalar,t,"pixelOffsetScaleByDistance",a.pixelOffsetScaleByDistance,n,r,i),processPacketData(NearFarScalar,t,"scaleByDistance",a.scaleByDistance,n,r,i),processPacketData(DistanceDisplayCondition,t,"distanceDisplayCondition",a.distanceDisplayCondition,n,r,i),processPacketData(Number,t,"disableDepthTestDistance",a.disableDepthTestDistance,n,r,i))}function processModel(e,t,i,r){t=t.model;if(defined(t)){var n,a,o=intervalFromString(t.interval),s=e.model;defined(s)||(e.model=s=new ModelGraphics),processPacketData(Boolean,s,"show",t.show,o,r,i),processPacketData(URI,s,"uri",t.gltf,o,r,i),processPacketData(Number,s,"scale",t.scale,o,r,i),processPacketData(Number,s,"minimumPixelSize",t.minimumPixelSize,o,r,i),processPacketData(Number,s,"maximumScale",t.maximumScale,o,r,i),processPacketData(Boolean,s,"incrementallyLoadTextures",t.incrementallyLoadTextures,o,r,i),processPacketData(Boolean,s,"runAnimations",t.runAnimations,o,r,i),processPacketData(Boolean,s,"clampAnimations",t.clampAnimations,o,r,i),processPacketData(ShadowMode$1,s,"shadows",t.shadows,o,r,i),processPacketData(HeightReference$1,s,"heightReference",t.heightReference,o,r,i),processPacketData(Color,s,"silhouetteColor",t.silhouetteColor,o,r,i),processPacketData(Number,s,"silhouetteSize",t.silhouetteSize,o,r,i),processPacketData(Color,s,"color",t.color,o,r,i),processPacketData(ColorBlendMode$1,s,"colorBlendMode",t.colorBlendMode,o,r,i),processPacketData(Number,s,"colorBlendAmount",t.colorBlendAmount,o,r,i),processPacketData(DistanceDisplayCondition,s,"distanceDisplayCondition",t.distanceDisplayCondition,o,r,i);var l=t.nodeTransformations;if(defined(l))if(Array.isArray(l))for(n=0,a=l.length;nnorthUpAxisFactor*o.maximumRadius?(c=updateTransformCartesian3Scratch2,Cartesian3.normalize(v,c),Cartesian3.negate(c,c),d=Cartesian3.clone(Cartesian3.UNIT_Z,updateTransformCartesian3Scratch3),u=Cartesian3.cross(d,c,updateTransformCartesian3Scratch1),Cartesian3.magnitude(u)>CesiumMath.EPSILON7&&(Cartesian3.normalize(c,c),Cartesian3.normalize(u,u),d=Cartesian3.cross(c,u,updateTransformCartesian3Scratch3),Cartesian3.normalize(d,d),s=!0)):Cartesian3.equalsEpsilon(v,h,CesiumMath.EPSILON7)||(d=updateTransformCartesian3Scratch2,Cartesian3.normalize(n,d),Cartesian3.normalize(a,a),u=Cartesian3.cross(d,a,updateTransformCartesian3Scratch3),l&&(u=Cartesian3.multiplyByScalar(u,-1,u)),Cartesian3.equalsEpsilon(u,Cartesian3.ZERO,CesiumMath.EPSILON7)||(c=Cartesian3.cross(u,d,updateTransformCartesian3Scratch1),Matrix3.multiplyByVector(y,c,c),Matrix3.multiplyByVector(y,u,u),Matrix3.multiplyByVector(y,d,d),Cartesian3.normalize(c,c),Cartesian3.normalize(u,u),Cartesian3.normalize(d,d),s=!0)))),defined(e.boundingSphere)&&(v=e.boundingSphere.center),r&&(f=Cartesian3.clone(t.position,updateTransformCartesian3Scratch4),g=Cartesian3.clone(t.direction,updateTransformCartesian3Scratch5),_=Cartesian3.clone(t.up,updateTransformCartesian3Scratch6)),y=updateTransformMatrix4Scratch,s?(y[0]=c.x,y[1]=c.y,y[2]=c.z,y[3]=0,y[4]=u.x,y[5]=u.y,y[6]=u.z,y[7]=0,y[8]=d.x,y[9]=d.y,y[10]=d.z,y[11]=0,y[12]=v.x,y[13]=v.y,y[14]=v.z,y[15]=0):Transforms.eastNorthUpToFixedFrame(v,o,y),t._setTransform(y),r&&(Cartesian3.clone(f,t.position),Cartesian3.clone(g,t.direction),Cartesian3.clone(_,t.up),Cartesian3.cross(g,_,t.right))),i&&(e=C===SceneMode$1.SCENE2D||Cartesian3.equals(e._offset3D,Cartesian3.ZERO)?void 0:e._offset3D,t.lookAtTransform(t.transform,e))}function EntityView(e,t,i){this.entity=e,this.scene=t,this.ellipsoid=defaultValue(i,Ellipsoid.WGS84),this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new Cartesian3,this._defaultOffset3D=void 0,this._offset3D=new Cartesian3}Object.defineProperties(EntityView,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=Cartesian3.clone(e,new Cartesian3)}}}),EntityView.defaultOffset3D=new Cartesian3(-14e3,3500,3500);var scratchHeadingPitchRange=new HeadingPitchRange,scratchCartesian$2=new Cartesian3;EntityView.prototype.update=function(e,t){var i,r,n,a,o,s,l,c,u=this.scene,d=this.ellipsoid,h=u.mode;h===SceneMode$1.MORPHING||defined(r=(i=this.entity).position)&&(c=i!==this._lastEntity,n=h!==this._mode,a=u.camera,o=c||n,s=!0,c?!(u=defined(l=i.viewFrom))&&defined(t)?(scratchHeadingPitchRange.pitch=-CesiumMath.PI_OVER_FOUR,scratchHeadingPitchRange.range=0,defined(c=r.getValue(e,scratchCartesian$2))&&(c=2-1/Math.max(1,Cartesian3.magnitude(c)/d.maximumRadius),scratchHeadingPitchRange.pitch*=c),a.viewBoundingSphere(t,scratchHeadingPitchRange),this.boundingSphere=t,s=o=!1):u&&defined(l.getValue(e,this._offset3D))||Cartesian3.clone(EntityView._defaultOffset3D,this._offset3D):n||this._mode===SceneMode$1.SCENE2D||Cartesian3.clone(a.position,this._offset3D),this._lastEntity=i,this._mode=h,updateTransform(this,a,o,s,r,e,d))};var tmp$4={};!function(T){var a,e,d="File format is not recognized.",o="File contains encrypted entry.",s="File is using Zip64 (4gb+ file size).",n="Error while reading zip file.",t="Error while reading file data.",g=524288,b="inflate.js",S="deflate.js",l="text/plain",x="message";try{a=0===new Blob([new DataView(new ArrayBuffer(0))]).size}catch(e){}function E(){var r=-1,n=this;n.append=function(e){for(var t=n.table,i=0;i>>8^t[255&(r^e[i])]},n.get=function(){return~r}}function P(e,t){var i=new ArrayBuffer(e),e=new Uint8Array(i);return t&&e.set(t,0),{buffer:i,array:e,view:new DataView(i)}}function i(){}function r(r){var n,a=this;a.size=0,a.init=function(e,t){var i=new Blob([r],{type:l});(n=new u(i)).init(function(){a.size=n.size,e()},t)},a.readUint8Array=function(e,t,i,r){n.readUint8Array(e,t,i,r)}}function c(c){var u,i=this;i.size=0,i.init=function(e){for(var t=c.length;"="==c.charAt(t-1);)t--;u=c.indexOf(",")+1,i.size=Math.floor(.75*(t-u)),e()},i.readUint8Array=function(e,t,i){for(var r=P(t),n=4*Math.floor(e/3),a=4*Math.ceil((e+t)/3),o=window.atob(c.substring(n+u,a+u)),s=e-3*Math.floor(n/4),l=s;l>16,i=65535&e;try{return new Date(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&i)>>11,(2016&i)>>5,2*(31&i),0)}catch(e){}}(e.lastModDateRaw),1!=(1&e.bitFlag)?(!r&&8==(8&e.bitFlag)||(e.crc32=t.view.getUint32(i+10,!0),e.compressedSize=t.view.getUint32(i+14,!0),e.uncompressedSize=t.view.getUint32(i+18,!0)),4294967295!==e.compressedSize&&4294967295!==e.uncompressedSize?(e.filenameLength=t.view.getUint16(i+22,!0),e.extraFieldLength=t.view.getUint16(i+24,!0)):n(s)):n(o)}function v(x,c){function u(){}return u.prototype.getData=function(m,r,f,g){var _,y=this;function n(e,t){_&&_.terminate(),_=null,e&&e(t)}function C(e,t){var i;g&&(i=t,(t=P(4)).view.setUint32(0,i),y.crc32!=t.view.getUint32(0))?v():m.getData(function(e){n(r,e)})}function v(){n(c,t)}function S(){n(c,"Error while writing file data.")}x.readUint8Array(y.offset,30,function(e){var p,e=P(e.length,e);1347093252==e.view.getUint32(0)?(M(y,e,4,!1,c),p=y.offset+30+y.filenameLength+y.extraFieldLength,m.init(function(){function e(e,t){o&&!e&&h.append(t)}function t(e){s(e,h.get())}var i,r,n,a,o,s,l,c,u,d,h;0===y.compressionMethod?D(x,m,p,y.compressedSize,g,C,f,v,S):(i=x,r=m,n=p,a=y.compressedSize,o=g,s=C,l=f,c=v,u=S,h=new E,T.zip.useWebWorkers?A(d=new Worker(T.zip.workerScriptsPath+b),i,r,n,a,e,l,t,c,u):w(new T.zip.Inflater,i,r,n,a,e,l,t,c,u),_=d)},S)):c(d)},v)},{getEntries:function(l){x.size<22?c(d):function t(i,r){x.readUint8Array(x.size-i,i,function(e){1347093766!=(e=P(e.length,e).view).getUint32(0)?t(i+1,r):r(e)},function(){c(n)})}(22,function(e){var t=e.getUint32(16,!0),s=e.getUint16(8,!0);x.readUint8Array(t,x.size-t,function(e){for(var t,i,r=0,n=[],a=P(e.length,e),o=0;o>>1^3988292384:t>>>=1;i[r]=t}return i}(),(r.prototype=new i).constructor=r,(c.prototype=new i).constructor=c,(u.prototype=new i).constructor=u,h.prototype.getData=function(e){e(this.data)},(p.prototype=new h).constructor=p,(m.prototype=new h).constructor=m,(f.prototype=new h).constructor=f,T.zip={Reader:i,Writer:h,BlobReader:u,Data64URIReader:c,TextReader:r,BlobWriter:f,Data64URIWriter:m,TextWriter:p,createReader:function(e,t,i){e.init(function(){t(v(e,i))},i)},createWriter:function(e,t,i,r){e.init(function(){t(O(e,i,r))},i)},useWebWorkers:!0},Object.defineProperties(T.zip,{workerScriptsPath:{get:function(){return e=void 0===e?buildModuleUrl("ThirdParty/Workers/"):e}}})}(tmp$4);var zip=tmp$4.zip,BILLBOARD_SIZE$1=32,kmlNamespace="http://www.opengis.net/kml/2.2",gxNamespace="http://www.google.com/kml/ext/2.2",xmlnsNamespace="http://www.w3.org/2000/xmlns/";function ExternalFileHandler(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var imageTypeRegex=/^data:image\/([^,;]+)/;function getModelBlobHander(t,i){return function(e){t._files[i]=e}}function ValueGetter(e){this._time=e}function StyleCache(){this._ids={},this._styles={},this._count=0}function IdManager(){this._ids={}}function exportKml(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).entities,i=defaultValue(e.kmz,!1),r=exportKml._createState(e),n=t.values.filter(function(e){return!defined(e.parent)}),e=r.kmlDoc,t=e.documentElement;t.setAttributeNS(xmlnsNamespace,"xmlns:gx",gxNamespace);e=e.createElement("Document");t.appendChild(e),recurseEntities(r,e,n),r.styleCache.save(e);var a=r.externalFileHandler;return a.promise.then(function(){var e=(new XMLSerializer).serializeToString(r.kmlDoc);return i?createKmz(e,a.files):{kml:e,externalFiles:a.files}})}function createKmz(e,i){var r=when.defer();return zip.createWriter(new zip.BlobWriter,function(t){addKmlToZip(t,e).then(function(){var e=Object.keys(i);return addExternalFilesToZip(t,e,i,0)}).then(function(){t.close(function(e){r.resolve({kmz:e})})})}),r.promise}function addKmlToZip(e,t){var i=when.defer();return e.add("doc.kml",new zip.TextReader(t),function(){i.resolve()}),i.promise}function addExternalFilesToZip(e,t,i,r){if(t.length!==r){var n=t[r],a=when.defer();return e.add(n,new zip.BlobReader(i[n]),function(){a.resolve()}),a.promise.then(function(){return addExternalFilesToZip(e,t,i,r+1)})}}function recurseEntities(e,t,i){for(var r=e.kmlDoc,n=e.styleCache,a=e.valueGetter,o=e.idManager,s=i.length,l=0;ls&&(s=e[0]),e[1]l&&(l=e[1])}function r(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(r);break;case"Point":i(e.coordinates);break;case"MultiPoint":e.coordinates.forEach(i)}}for(t in e.arcs.forEach(function(e){for(var t,i=-1,r=e.length;++is&&(s=t[0]),t[1]l&&(l=t[1])}),e.objects)r(e.objects[t]);return[a,o,s,l]}function a(t,e){return"GeometryCollection"===e.type?{type:"FeatureCollection",features:e.geometries.map(function(e){return i(t,e)})}:i(t,e)}var h=function(e){if(null==e)return t;var a,o,s=e.scale[0],l=e.scale[1],c=e.translate[0],u=e.translate[1];return function(e,t){t||(a=o=0);var i=2,r=e.length,n=new Array(r);for(n[0]=(a+=e[0])*s+c,n[1]=(o+=e[1])*l+u;io&&(n=i[0],i[0]=i[a],i[a]=n,o=r);return i})}}function g(e,t){for(var i=0,r=e.length;i>>1;e[n]=n)throw new Error("full hashset");i=l[t=t+1&c]}return l[t]=e,!0},has:function(e){for(var t=a(e)&c,i=l[t],r=0;i!=s;){if(o(i,e))return!0;if(++r>=n)break;i=l[t=t+1&c]}return!1},values:function(){for(var e=[],t=0,i=l.length;t=a)throw new Error("full hashmap");r=c[i=i+1&d]}return c[i]=e,u[i]=t},maybeSet:function(e,t){for(var i=o(e)&d,r=c[i],n=0;r!=l;){if(s(r,e))return u[i];if(++n>=a)throw new Error("full hashmap");r=c[i=i+1&d]}return c[i]=e,u[i]=t},get:function(e,t){for(var i=o(e)&d,r=c[i],n=0;r!=l;){if(s(r,e))return u[i];if(++n>=a)break;r=c[i=i+1&d]}return t},keys:function(){for(var e=[],t=0,i=c.length;t>7^l[2]^l[3])}function v(e){for(var n=e.coordinates,t=e.lines,i=e.rings,r=function(){for(var e=P(1.4*n.length,S,x,Int32Array,-1,Int32Array),t=new Int32Array(n.length),i=0,r=n.length;i>1);t=r}}function F(e,t){return e[1][2]-t[1][2]}function N(e){return[e[0],e[1],0]}function B(e,t){return t-e}var s=Math.PI,V=2*s,k=s/4,z=s/180,U=Math.abs,$=Math.atan2,G=Math.cos,H=Math.sin;function W(e,t){for(var i=0,r=e.length,n=0,a=(c=e[t?i++:r-1])[0]*z,o=c[1]*z/2+k,s=G(o),l=H(o);i>1)-1,r=o[i];if(0<=F(e,r))break;o[r._=t]=r,o[e._=t=i]=e}}function n(e,t){for(;;){var i=t+1<<1,r=i-1,n=t,a=o[n];if(r=o&&(a[r++]=[t[0],t[1]]);return a.length=r,a});return{type:"Topology",transform:e.transform,bbox:e.bbox,objects:e.objects,arcs:t}},e.sphericalRingArea=function(e,t){return e=W(e,!0),t&&(e*=-1),2*(e<0?V+e:e)},e.sphericalTriangleArea=function(e){return 2*U(W(e,!1))},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?nUg(exports):nUg(mUg.topojson=mUg.topojson||{});var topojson=tmp$3.topojson;function defaultCrsFunction(e){return Cartesian3.fromDegrees(e[0],e[1],e[2])}var crsNames={"urn:ogc:def:crs:OGC:1.3:CRS84":defaultCrsFunction,"EPSG:4326":defaultCrsFunction,"urn:ogc:def:crs:EPSG::4326":defaultCrsFunction,"EPSG:4490":defaultCrsFunction,"urn:ogc:def:crs:EPSG::4490":defaultCrsFunction},crsLinkHrefs={},crsLinkTypes={},defaultMarkerSize=48,defaultMarkerSymbol,defaultMarkerColor=Color.ROYALBLUE,defaultStroke=Color.YELLOW,defaultStrokeWidth=2,defaultFill=Color.fromBytes(255,255,0,100),defaultClampToGround=!1,sizes={small:24,medium:48,large:64},simpleStyleIdentifiers=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function defaultDescribe(e,t){var i,r,n="";for(i in e)!e.hasOwnProperty(i)||i===t||-1!==simpleStyleIdentifiers.indexOf(i)||defined(r=e[i])&&(n+="object"==typeof r?""+i+""+defaultDescribe(r)+"":""+i+""+r+"");return n=0'+n+"":n}function createDescriptionCallback(i,r,n){var a;return function(e,t){return a=!defined(a)?i(r,n):a}}function defaultDescribeProperty(e,t){return new CallbackProperty(createDescriptionCallback(defaultDescribe,e,t),!0)}function createObject(e,t,i){var r=e.id;if(defined(r)&&"Feature"===e.type){for(var n=2,a=r;defined(t.getById(a));)a=r+"_"+n,n++;r=a}else r=createGuid();var o=t.getOrCreateEntity(r),s=e.properties;if(defined(s)){var l,e=(o.properties=s).title;if(defined(e))o.name=e,l="title";else{var c,u=Number.MAX_VALUE;for(c in s)if(s.hasOwnProperty(c)&&s[c]){var d=c.toLowerCase();if(1t&&(r=null==i?(i="…",3):i.length,e=e.substring(0,t-r)+i),e}function fbh(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var i=0,r=e.length;i",this.getInnerHtml(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e,t=this.getAttrs(),i=[];for(e in t)t.hasOwnProperty(e)&&i.push(e+'="'+t[e]+'"');return i.join(" ")},e}(),nbh=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new jbh({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},i=this.createCssClass(e);return i&&(t.class=i),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=o)return(s.host.length==t?s.host.substr(0,t-c)+n:a(e,o)).substr(0,o+i);var c="";s.path&&(c+="/"+s.path);s.query&&(c+="?"+s.query);if(c){if(o<=(e+c).length){if((e+c).length==t)return(e+c).substr(0,t);var u=o-e.length;return(e+a(c,u)).substr(0,o+i)}e+=c}if(s.fragment){u="#"+s.fragment;if(o<=(e+u).length){if((e+u).length==t)return(e+u).substr(0,t);c=o-e.length;return(e+a(u,c)).substr(0,o+i)}e+=u}if(s.scheme&&s.host){s=s.scheme+"://";if((e+s).length"!==e&&ybh.test(e)?u=3:m()}(p);break;case 3:!function(e){Abh.test(e)?(h=new Ybh(rbh({},h,{name:_()})),u=4):"<"===e?f():"/"===e?(h=new Ybh(rbh({},h,{name:_()})),u=12):">"===e?(h=new Ybh(rbh({},h,{name:_()})),g()):ybh.test(e)||zbh.test(e)||":"===e||m()}(p);break;case 4:!function(e){Abh.test(e)||("/"===e?u=12:">"===e?g():"<"===e?f():"="===e||Bbh.test(e)||Cbh.test(e)?m():u=5)}(p);break;case 5:!function(e){Abh.test(e)?u=6:"/"===e?u=12:"="===e?u=7:">"===e?g():"<"===e?f():Bbh.test(e)&&m()}(p);break;case 6:!function(e){Abh.test(e)||("/"===e?u=12:"="===e?u=7:">"===e?g():"<"===e?f():Bbh.test(e)?m():u=5)}(p);break;case 7:!function(e){Abh.test(e)||('"'===e?u=8:"'"===e?u=9:/[>=`]/.test(e)?m():"<"===e?f():u=10)}(p);break;case 8:!function(e){'"'===e&&(u=11)}(p);break;case 9:!function(e){"'"===e&&(u=11)}(p);break;case 10:!function(e){Abh.test(e)?u=4:">"===e?g():"<"===e&&f()}(p);break;case 11:!function(e){Abh.test(e)?u=4:"/"===e?u=12:">"===e?g():"<"===e?f():(u=4,l--)}(p);break;case 12:!function(e){">"===e?(h=new Ybh(rbh({},h,{isClosing:!0})),g()):u=4}(p);break;case 13:"--"===t.substr(l,2)?(l+=2,h=new Ybh(rbh({},h,{type:"comment"})),u=14):"DOCTYPE"===t.substr(l,7).toUpperCase()?(l+=7,h=new Ybh(rbh({},h,{type:"doctype"})),u=20):m();break;case 14:!function(e){"-"===e?u=15:">"===e?m():u=16}(p);break;case 15:!function(e){"-"===e?u=18:">"===e?m():u=16}(p);break;case 16:!function(e){"-"===e&&(u=17)}(p);break;case 17:!function(e){u="-"===e?18:16}(p);break;case 18:!function(e){">"===e?g():"!"===e?u=19:"-"===e||(u=16)}(p);break;case 19:!function(e){"-"===e?u=17:">"===e?g():u=16}(p);break;case 20:!function(e){">"===e?g():"<"===e&&f()}(p);break;default:ibh(u)}l++}dn?t:t+1,e.splice(n,1)))}return e},i.prototype.removeUnwantedMatches=function(e){return this.hashtag||gbh(e,function(e){return"hashtag"===e.getType()}),this.email||gbh(e,function(e){return"email"===e.getType()}),this.phone||gbh(e,function(e){return"phone"===e.getType()}),this.mention||gbh(e,function(e){return"mention"===e.getType()}),this.urls.schemeMatches||gbh(e,function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()}),this.urls.wwwMatches||gbh(e,function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()}),this.urls.tldMatches||gbh(e,function(e){return"url"===e.getType()&&"tld"===e.getUrlMatchType()}),e},i.prototype.parseText=function(e,t){t=(t=void 0===t?0:t)||0;for(var i=this.getMatchers(),r=[],n=0,a=i.length;n",r);-1!==r&&rthis._started+this._timeThreshold))return void this._giveUpTime();r=this._nextNode()}this._pop()&&e&&this._process(!0)};var colorOptions={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function parseColorString(e,t){if(defined(e)&&!/^\s*$/gm.test(e)){"#"===e[0]&&(e=e.substring(1));var i=parseInt(e.substring(0,2),16)/255,r=parseInt(e.substring(2,4),16)/255,n=parseInt(e.substring(4,6),16)/255,e=parseInt(e.substring(6,8),16)/255;return t?(0:clampToSeaFloor is currently not supported, using :clampToGround."),HeightReference$1.CLAMP_TO_GROUND):"relativeToSeaFloor"===t?(oneTimeWarning("kml-gx:altitudeMode-relativeToSeaFloor","KML - :relativeToSeaFloor is currently not supported, using :relativeToGround."),HeightReference$1.RELATIVE_TO_GROUND):(defined(e)?oneTimeWarning("kml-altitudeMode-unknown","KML - Unknown :"+e+", using :CLAMP_TO_GROUND."):oneTimeWarning("kml-gx:altitudeMode-unknown","KML - Unknown :"+t+", using :CLAMP_TO_GROUND."),HeightReference$1.CLAMP_TO_GROUND)}function createPositionPropertyFromAltitudeMode(e,t,i){return"relativeToSeaFloor"===i||"absolute"===t||"relativeToGround"===t?e:((defined(t)&&"clampToGround"!==t||defined(i)&&"clampToSeaFloor"!==i)&&oneTimeWarning("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+defaultValue(t,i)),new ScaledPositionProperty(e))}function createPositionPropertyArrayFromAltitudeMode(e,t,i,r){if(defined(e)){if("relativeToSeaFloor"===i||"absolute"===t||"relativeToGround"===t)return e;(defined(t)&&"clampToGround"!==t||defined(i)&&"clampToSeaFloor"!==i)&&oneTimeWarning("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+defaultValue(t,i));for(var n=e.length,a=0;a',y=0;y"+defaultValue((p=l[a=o[y]]).displayName,a)+""+defaultValue(p.value,"")+"";d+=""}if(defined(d)){d=autolinker.link(d),scratchDiv.innerHTML=d;for(var _=scratchDiv.querySelectorAll("a"),y=0;y<_.length;y++)_[y].setAttribute("target","_blank");defined(r)&&1",scratchDiv.innerHTML="",t.description=n}}function processFeature(e,t,i){var r=i.entityCollection,n=i.parentEntity,a=i.sourceResource,o=i.uriResolver,s=createEntity(t,r,i.context),l=s.kml,r=computeFinalStyle(e,t,i.styleCollection,a,o),i=queryStringValue(t,"name",namespaces.kml);s.name=i,s.parent=n;i=processTimeSpan(t);defined(i)||(i=processTimeStamp(t)),s.availability=i,mergeAvailabilityWithParent(s);i=queryBooleanValue(t,"visibility",namespaces.kml);s.show=function e(t){return!t||t.show&&e(t.parent)}(n)&&defaultValue(i,!0);n=queryFirstNode(t,"author",namespaces.atom),i=l.author;i.name=queryStringValue(n,"name",namespaces.atom),i.uri=queryStringValue(n,"uri",namespaces.atom),i.email=queryStringValue(n,"email",namespaces.atom);i=queryFirstNode(t,"link",namespaces.atom),n=l.link;n.href=queryStringAttribute(i,"href"),n.hreflang=queryStringAttribute(i,"hreflang"),n.rel=queryStringAttribute(i,"rel"),n.type=queryStringAttribute(i,"type"),n.title=queryStringAttribute(i,"title"),n.length=queryStringAttribute(i,"length"),l.address=queryStringValue(t,"address",namespaces.kml),l.phoneNumber=queryStringValue(t,"phoneNumber",namespaces.kml),l.snippet=queryStringValue(t,"Snippet",namespaces.kml),processExtendedData(t,s),processDescription(t,s,r,o,a);e=e._ellipsoid;return processLookAt(t,s,e),processCamera(t,s,e),defined(queryFirstNode(t,"Region",namespaces.kml))&&oneTimeWarning("kml-region","KML - Placemark Regions are unsupported"),{entity:s,styleEntity:r}}function processDocument(e,t,i,r){r.addNodes(t.childNodes,i),r.process()}function processFolder(e,t,i,r){var n=processFeature(e,t,i),i=clone$1(i);i.parentEntity=n.entity,processDocument(e,t,i,r)}function processPlacemark(e,t,i,r){for(var n=processFeature(e,t,i),a=n.entity,o=n.styleEntity,s=!1,l=t.childNodes,c=0,u=l.length;cCesiumMath.PI_OVER_TWO?CesiumMath.PI_OVER_TWO:e}function s(e){return e>CesiumMath.PI?e-CesiumMath.TWO_PI:e<-CesiumMath.PI?e+CesiumMath.TWO_PI:e}var l,c,u,d,h=objectToQuery(e.queryParameters);h=h.replace(/%5B/g,"[").replace(/%5D/g,"]"),h=defined(t)&&t._mode!==SceneMode$1.MORPHING?(n=defaultValue(n,zeroRectangle),defined(i)&&(scratchCartesian2$2.x=.5*i.clientWidth,scratchCartesian2$2.y=.5*i.clientHeight,l=t.pickEllipsoid(scratchCartesian2$2,a,scratchCartesian3$2)),defined(l)?d=a.cartesianToCartographic(l,scratchCartographic$5):(d=Rectangle.center(n,scratchCartographic$5),l=a.cartographicToCartesian(d)),defined(r)&&!CesiumMath.equalsEpsilon(r,1,CesiumMath.EPSILON9)&&(c=n.width*r*.5,u=n.height*r*.5,n=new Rectangle(s(d.longitude-c),o(d.latitude-u),s(d.longitude+c),o(d.latitude+u))),h=(h=(h=(h=h.replace("[bboxWest]",CesiumMath.toDegrees(n.west).toString())).replace("[bboxSouth]",CesiumMath.toDegrees(n.south).toString())).replace("[bboxEast]",CesiumMath.toDegrees(n.east).toString())).replace("[bboxNorth]",CesiumMath.toDegrees(n.north).toString()),u=CesiumMath.toDegrees(d.longitude).toString(),n=CesiumMath.toDegrees(d.latitude).toString(),h=(h=(h=(h=(h=(h=(h=(h=h.replace("[lookatLon]",u)).replace("[lookatLat]",n)).replace("[lookatTilt]",CesiumMath.toDegrees(t.pitch).toString())).replace("[lookatHeading]",CesiumMath.toDegrees(t.heading).toString())).replace("[lookatRange]",Cartesian3.distance(t.positionWC,l))).replace("[lookatTerrainLon]",u)).replace("[lookatTerrainLat]",n)).replace("[lookatTerrainAlt]",d.height.toString()),a.cartesianToCartographic(t.positionWC,scratchCartographic$5),h=(h=(h=h.replace("[cameraLon]",CesiumMath.toDegrees(scratchCartographic$5.longitude).toString())).replace("[cameraLat]",CesiumMath.toDegrees(scratchCartographic$5.latitude).toString())).replace("[cameraAlt]",CesiumMath.toDegrees(scratchCartographic$5.height).toString()),d=n="",defined(t=(a=t.frustum).aspectRatio)&&(a=CesiumMath.toDegrees(a.fov),1t.time&&(r=!0):t.refreshMode===RefreshMode.EXPIRE?JulianDate.greaterThan(a,t.time)&&(r=!0):t.refreshMode===RefreshMode.STOP&&(s&&(t.needsUpdate=!0,t.cameraUpdateTime=a),t.needsUpdate&&JulianDate.secondsDifference(a,t.cameraUpdateTime)>=t.time&&(r=!0)),r&&(function e(t){for(var i=t._children,r=i.length,n=0;nt.width?2*Math.tan(.5*r)/t.height:2*Math.tan(.5*r)/t.width:1/Math.max(t.width,t.height);this._geometricToleranceOverMeter=t*e.maximumScreenSpaceError,Color.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};var cameraPositionMC=new Cartesian3;function cleanEncodedCameraPositionMC(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,Matrix4.multiplyByPoint(e.inverseModel,e._cameraPosition,cameraPositionMC),EncodedCartesian3.fromCartesian(cameraPositionMC,e._encodedCameraPositionMC))}var view2Dto3DPScratch=new Cartesian3,view2Dto3DRScratch=new Cartesian3,view2Dto3DUScratch=new Cartesian3,view2Dto3DDScratch=new Cartesian3,view2Dto3DCartographicScratch=new Cartographic,view2Dto3DCartesian3Scratch=new Cartesian3,view2Dto3DMatrix4Scratch=new Matrix4;function view2Dto3D(e,t,i,r,n,a,o,s){var l=view2Dto3DPScratch;l.x=e.y,l.y=e.z,l.z=e.x;e=view2Dto3DRScratch;e.x=i.y,e.y=i.z,e.z=i.x;i=view2Dto3DUScratch;i.x=r.y,i.y=r.z,i.z=r.x;r=view2Dto3DDScratch;r.x=t.y,r.y=t.z,r.z=t.x,a===SceneMode$1.SCENE2D&&(l.z=.5*n);l=o.unproject(l,view2Dto3DCartographicScratch);l.longitude=CesiumMath.clamp(l.longitude,-Math.PI,Math.PI),l.latitude=CesiumMath.clamp(l.latitude,-CesiumMath.PI_OVER_TWO,CesiumMath.PI_OVER_TWO);o=o.ellipsoid,l=o.cartographicToCartesian(l,view2Dto3DCartesian3Scratch),o=Transforms.eastNorthUpToFixedFrame(l,o,view2Dto3DMatrix4Scratch);return Matrix4.multiplyByPointAsVector(o,e,e),Matrix4.multiplyByPointAsVector(o,i,i),Matrix4.multiplyByPointAsVector(o,r,r),(s=!defined(s)?new Matrix4:s)[0]=e.x,s[1]=i.x,s[2]=-r.x,s[3]=0,s[4]=e.y,s[5]=i.y,s[6]=-r.y,s[7]=0,s[8]=e.z,s[9]=i.z,s[10]=-r.z,s[11]=0,s[12]=-Cartesian3.dot(e,l),s[13]=-Cartesian3.dot(i,l),s[14]=Cartesian3.dot(r,l),s[15]=1,s}function updateView3D(e){e._view3DDirty&&(e._mode===SceneMode$1.SCENE3D?Matrix4.clone(e._view,e._view3D):view2Dto3D(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),Matrix4.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function updateInverseView3D(e){e._inverseView3DDirty&&(Matrix4.inverseTransformation(e.view3D,e._inverseView3D),Matrix4.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}function errorToString(e,t){var i="WebGL Error: ";switch(t){case e.INVALID_ENUM:i+="INVALID_ENUM";break;case e.INVALID_VALUE:i+="INVALID_VALUE";break;case e.INVALID_OPERATION:i+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:i+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:i+="CONTEXT_LOST_WEBGL lost";break;default:i+="Unknown ("+t+")"}return i}function createErrorMessage(e,t,i,r){for(var n=errorToString(e,r)+": "+t.name+"(",a=0;a"+i+""+e(r)+"":""+i+""+r+"");return n+=""}(e)},Object.defineProperties(ImageryProvider.prototype,{ready:{get:DeveloperError.throwInstantiationError},readyPromise:{get:DeveloperError.throwInstantiationError},rectangle:{get:DeveloperError.throwInstantiationError},tileWidth:{get:DeveloperError.throwInstantiationError},tileHeight:{get:DeveloperError.throwInstantiationError},maximumLevel:{get:DeveloperError.throwInstantiationError},minimumLevel:{get:DeveloperError.throwInstantiationError},tilingScheme:{get:DeveloperError.throwInstantiationError},tileDiscardPolicy:{get:DeveloperError.throwInstantiationError},errorEvent:{get:DeveloperError.throwInstantiationError},credit:{get:DeveloperError.throwInstantiationError},proxy:{get:DeveloperError.throwInstantiationError},hasAlphaChannel:{get:DeveloperError.throwInstantiationError}}),ImageryProvider.prototype.getTileCredits=function(e,t,i){DeveloperError.throwInstantiationError()},ImageryProvider.prototype.requestImage=function(e,t,i,r){DeveloperError.throwInstantiationError()},ImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){DeveloperError.throwInstantiationError()};var ktxRegex=/\.ktx$/i,crnRegex=/\.crn$/i;function ArcGisMapServerImageryProvider(o){o=defaultValue(o,defaultValue.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var e=Resource.createIfNeeded(o.url);e.appendForwardSlash(),defined(o.token)&&e.setQueryParameters({token:o.token}),this._resource=e,this._tileDiscardPolicy=o.tileDiscardPolicy,this._tileWidth=defaultValue(o.tileWidth,256),this._tileHeight=defaultValue(o.tileHeight,256),this._maximumLevel=o.maximumLevel,this._tilingScheme=defaultValue(o.tilingScheme,new GeographicTilingScheme({ellipsoid:o.ellipsoid})),this._useTiles=defaultValue(o.usePreCachedTilesIfAvailable,!0),this._rectangle=defaultValue(o.rectangle,this._tilingScheme.rectangle),this._layers=o.layers,this._layerDefs=o.layerDefs,this._maxTileLevel=o.maxTileLevel,this._wkid=o.wkid;e=o.credit;"string"==typeof e&&(e=new Credit(e)),this._credit=e,this.enablePickFeatures=defaultValue(o.enablePickFeatures,!0),this._errorEvent=new Event,this._ready=!1,this._readyPromise=when.defer();var s,l=this;function t(e){var t=e.tileInfo;if(defined(t)){if(l._tileWidth=t.rows,l._tileHeight=t.cols,l._wkid=t.spatialReference.wkid,102100===t.spatialReference.wkid||102113===t.spatialReference.wkid)l._tilingScheme=new WebMercatorTilingScheme({ellipsoid:o.ellipsoid});else{if(4326!==e.tileInfo.spatialReference.wkid&&4490!==e.tileInfo.spatialReference.wkid){t="Tile spatial reference WKID "+e.tileInfo.spatialReference.wkid+" is not supported.";return void(s=TileProviderError.handleError(s,l,l._errorEvent,t,void 0,void 0,void 0,c))}l._tilingScheme=new GeographicTilingScheme({ellipsoid:o.ellipsoid})}if(l._maximumLevel||(l._maximumLevel=e.tileInfo.lods.length-1),defined(e.fullExtent)){if(defined(e.fullExtent.spatialReference)&&defined(e.fullExtent.spatialReference.wkid))if(102100===e.fullExtent.spatialReference.wkid||102113===e.fullExtent.spatialReference.wkid){var i=new WebMercatorProjection,r=e.fullExtent,n=i.unproject(new Cartesian3(Math.max(r.xmin,-l._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(r.ymin,-l._tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),r=i.unproject(new Cartesian3(Math.min(r.xmax,l._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(r.ymax,l._tilingScheme.ellipsoid.maximumRadius*Math.PI),0));l._rectangle=new Rectangle(n.longitude,n.latitude,r.longitude,r.latitude)}else{if(4326!==e.fullExtent.spatialReference.wkid&&4490!==e.fullExtent.spatialReference.wkid){var a="fullExtent.spatialReference WKID "+e.fullExtent.spatialReference.wkid+" is not supported.";return void(s=TileProviderError.handleError(s,l,l._errorEvent,a,void 0,void 0,void 0,c))}l._rectangle=Rectangle.fromDegrees(e.fullExtent.xmin,e.fullExtent.ymin,e.fullExtent.xmax,e.fullExtent.ymax)}}else l._rectangle=l._tilingScheme.rectangle;defined(l._tileDiscardPolicy)||(l._tileDiscardPolicy=new DiscardMissingTileImagePolicy({missingImageUrl:buildImageResource$3(l,0,0,l._maximumLevel).url,pixelsToCheck:[new Cartesian2(0,0),new Cartesian2(200,20),new Cartesian2(20,200),new Cartesian2(80,110),new Cartesian2(160,130)],disableCheckIfAllPixelsAreTransparent:!0})),l._useTiles=!0}else l._useTiles=!1;a=e.fullExtent||e.initialExtent;defined(a)&&defined(a.spatialReference)&&defined(a.spatialReference.wkid)&&(102100===a.spatialReference.wkid||102113===a.spatialReference.wkid?(n=(i=new WebMercatorProjection).unproject(new Cartesian3(Math.max(a.xmin,-l._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(a.ymin,-l._tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),r=i.unproject(new Cartesian3(Math.min(a.xmax,l._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(a.ymax,l._tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),l._rectangle=new Rectangle(n.longitude,n.latitude,r.longitude,r.latitude)):4326!==a.spatialReference.wkid&&4490!==a.spatialReference.wkid||(l._rectangle=Rectangle.fromDegrees(a.xmin,a.ymin,a.xmax,a.ymax))),defined(e.copyrightText)&&0'),this._tilingScheme=new WebMercatorTilingScheme({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._errorEvent=new Event,this._ready=!1,this._readyPromise=when.defer();e=this._tileProtocol;defined(e)?0=d.zoomMin&&t<=d.zoomMax&&defined(Rectangle.intersection(i,d.bbox,intersectionScratch))&&(l=!0)}l&&r.push(o.credit)}return r}BingMapsImageryProvider._metadataCache={};var defaultDimensions=new Cartesian3(1,1,1);function BoxEmitter(e){e=defaultValue(e,defaultDimensions),this._dimensions=Cartesian3.clone(e)}Object.defineProperties(BoxEmitter.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){Cartesian3.clone(e,this._dimensions)}}});var scratchHalfDim=new Cartesian3;BoxEmitter.prototype.emit=function(e){var t=this._dimensions,i=Cartesian3.multiplyByScalar(t,.5,scratchHalfDim),r=CesiumMath.randomBetween(-i.x,i.x),t=CesiumMath.randomBetween(-i.y,i.y),i=CesiumMath.randomBetween(-i.z,i.z);e.position=Cartesian3.fromElements(r,t,i,e.position),e.velocity=Cartesian3.normalize(e.position,e.velocity)};var BrdfLutGeneratorFS="varying vec2 v_textureCoordinates;\nconst float M_PI = 3.141592653589793;\nfloat vdcRadicalInverse(int i)\n{\nfloat r;\nfloat base = 2.0;\nfloat value = 0.0;\nfloat invBase = 1.0 / base;\nfloat invBi = invBase;\nfor (int x = 0; x < 100; x++)\n{\nif (i <= 0)\n{\nbreak;\n}\nr = mod(float(i), base);\nvalue += r * invBi;\ninvBi *= invBase;\ni = int(float(i) * invBase);\n}\nreturn value;\n}\nvec2 hammersley2D(int i, int N)\n{\nreturn vec2(float(i) / float(N), vdcRadicalInverse(i));\n}\nvec3 importanceSampleGGX(vec2 xi, float roughness, vec3 N)\n{\nfloat a = roughness * roughness;\nfloat phi = 2.0 * M_PI * xi.x;\nfloat cosTheta = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));\nfloat sinTheta = sqrt(1.0 - cosTheta * cosTheta);\nvec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);\nvec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\nvec3 tangentX = normalize(cross(upVector, N));\nvec3 tangentY = cross(N, tangentX);\nreturn tangentX * H.x + tangentY * H.y + N * H.z;\n}\nfloat G1_Smith(float NdotV, float k)\n{\nreturn NdotV / (NdotV * (1.0 - k) + k);\n}\nfloat G_Smith(float roughness, float NdotV, float NdotL)\n{\nfloat k = roughness * roughness / 2.0;\nreturn G1_Smith(NdotV, k) * G1_Smith(NdotL, k);\n}\nvec2 integrateBrdf(float roughness, float NdotV)\n{\nvec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);\nfloat A = 0.0;\nfloat B = 0.0;\nconst int NumSamples = 1024;\nfor (int i = 0; i < NumSamples; i++)\n{\nvec2 xi = hammersley2D(i, NumSamples);\nvec3 H = importanceSampleGGX(xi, roughness, vec3(0.0, 0.0, 1.0));\nvec3 L = 2.0 * dot(V, H) * H - V;\nfloat NdotL = clamp(L.z, 0.0, 1.0);\nfloat NdotH = clamp(H.z, 0.0, 1.0);\nfloat VdotH = clamp(dot(V, H), 0.0, 1.0);\nif (NdotL > 0.0)\n{\nfloat G = G_Smith(roughness, NdotV, NdotL);\nfloat G_Vis = G * VdotH / (NdotH * NdotV);\nfloat Fc = pow(1.0 - VdotH, 5.0);\nA += (1.0 - Fc) * G_Vis;\nB += Fc * G_Vis;\n}\n}\nreturn vec2(A, B) / float(NumSamples);\n}\nvoid main()\n{\ngl_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);\n}\n";function BrdfLutGenerator(){this._framebuffer=void 0,this._colorTexture=void 0,this._drawCommand=void 0}function createCommand$1(e,t){var i=e._framebuffer,i=t.createViewportQuadCommand(BrdfLutGeneratorFS,{framebuffer:i,renderState:RenderState.fromCache({viewport:new BoundingRectangle(0,0,256,256)})});e._drawCommand=i}function createFramebuffer$1(e,t){var i=new Texture({context:t,width:256,height:256,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),i=new Framebuffer({context:t,colorTextures:[e._colorTexture=i],destroyAttachments:!1});e._framebuffer=i}Object.defineProperties(BrdfLutGenerator.prototype,{colorTexture:{get:function(){return this._colorTexture}}}),BrdfLutGenerator.prototype.update=function(e){defined(this._colorTexture)||(createFramebuffer$1(this,e=e.context),createCommand$1(this,e),this._drawCommand.execute(e),this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy())},BrdfLutGenerator.prototype.isDestroyed=function(){return!1},BrdfLutGenerator.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),destroyObject(this)};var CameraFlightPath={};function getAltitude(e,t,i){if(e instanceof PerspectiveFrustum){var r=Math.tan(.5*e.fovy),n=e.near,a=e.near*r,r=e.aspectRatio*a;return Math.max(t*n/r,i*n/a)}return e instanceof PerspectiveOffCenterFrustum?(n=e.near,a=e.top,r=e.right,Math.max(t*n/r,i*n/a)):Math.max(t,i)}var scratchCart=new Cartesian3,scratchCart2=new Cartesian3;function createPitchFunction(i,r,n,e){if(defined(e)&&n(.5)>e){var a=n(0),o=n(1),e=n(.5),s=e-a,l=e-o;return function(e){var t=n(e);if(e<=.5){e=(t-a)/s;return CesiumMath.lerp(i,-CesiumMath.PI_OVER_TWO,e)}t=(t-o)/l;return CesiumMath.lerp(-CesiumMath.PI_OVER_TWO,r,1-t)}}return function(e){return CesiumMath.lerp(i,r,e)}}function createHeightFunction(e,t,i,r,n){var a,o,s=n,l=Math.max(i,r);if(defined(s)||(a=e.position,o=e.up,n=e.right,e=e.frustum,t=Cartesian3.subtract(a,t,scratchCart),o=Cartesian3.magnitude(Cartesian3.multiplyByScalar(o,Cartesian3.dot(t,o),scratchCart2)),n=Cartesian3.magnitude(Cartesian3.multiplyByScalar(n,Cartesian3.dot(t,n),scratchCart2)),s=Math.min(.2*getAltitude(e,o,n),1e9)),l(e=CesiumMath.equalsEpsilon(e,CesiumMath.TWO_PI,CesiumMath.EPSILON11)?0:e)+Math.PI?e+=CesiumMath.TWO_PI:tCesiumMath.PI&&(t.longitude+=CesiumMath.TWO_PI)}var scratchStartCart=new Cartographic,scratchEndCart=new Cartographic;function createUpdate3D(e,i,t,r,n,a,o,s,l,c){var u=e.camera,d=e.mapProjection.ellipsoid,h=Cartographic.clone(u.positionCartographic,scratchStartCart),p=u.pitch,m=adjustAngleForLERP(u.heading,r),f=adjustAngleForLERP(u.roll,a),g=d.cartesianToCartographic(t,scratchEndCart);h.longitude=CesiumMath.zeroToTwoPi(h.longitude),g.longitude=CesiumMath.zeroToTwoPi(g.longitude);var _=!1;defined(s)&&(e=CesiumMath.zeroToTwoPi(s),d=Math.min(h.longitude,g.longitude),s=Math.max(h.longitude,g.longitude),d=d<=e&&e<=s,defined(l)?(e=Math.abs(h.longitude-g.longitude),s=CesiumMath.TWO_PI-e,(d?e:s)<(d?s:e)*l&&!d&&(_=!0)):d||(_=!0)),(_?useLongestFlight:useShortestFlight)(h,g);var y,C,v,S,x=createHeightFunction(u,t,h.height,g.height,o),T=createPitchFunction(p,n,x,c);return y=h.longitude,C=g.longitude,v=h.latitude,S=g.latitude,function(e){var t=e.time/i,e=Cartesian3.fromRadians(CesiumMath.lerp(y,C,t),CesiumMath.lerp(v,S,t),x(t));u.setView({destination:e,orientation:{heading:CesiumMath.lerp(m,r,t),pitch:T(t),roll:CesiumMath.lerp(f,a,t)}})}}function createUpdate2D(e,r,n,a,t,i,o){var s=e.camera,l=Cartesian3.clone(s.position,scratchStart),c=adjustAngleForLERP(s.heading,a),e=s.frustum.right-s.frustum.left,u=createHeightFunction(s,n,e,n.z,o);return function(e){var t=e.time/r;s.setView({orientation:{heading:CesiumMath.lerp(c,a,t)}}),Cartesian2.lerp(l,n,t,s.position);var i=u(t),t=(e=s.frustum).top/e.right,i=.5*(i-(e.right-e.left));e.right+=i,e.left-=i,e.top=t*e.right,e.bottom=-e.top}}var scratchCartographic$4=new Cartographic,scratchDestination=new Cartesian3;function emptyFlight(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function wrapCallback(e,t){return function(){"function"==typeof t&&t(),e.enableInputs=!0}}CameraFlightPath.createTween=function(e,t){var i=(t=defaultValue(t,defaultValue.EMPTY_OBJECT)).destination,r=e.mode;if(r===SceneMode$1.MORPHING)return emptyFlight();var n=defaultValue(t.convert,!0),a=e.mapProjection,o=a.ellipsoid,s=t.maximumHeight,l=t.flyOverLongitude,c=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,d=t.easingFunction;n&&r!==SceneMode$1.SCENE3D&&(o.cartesianToCartographic(i,scratchCartographic$4),i=a.project(scratchCartographic$4,scratchDestination));var h=e.camera,p=t.endTransform;defined(p)&&h._setTransform(p);n=t.duration;defined(n)||(n=Math.ceil(Cartesian3.distance(h.position,i)/1e6)+2,n=Math.min(n,3));var m=defaultValue(t.heading,0),f=defaultValue(t.pitch,-CesiumMath.PI_OVER_TWO),g=defaultValue(t.roll,0),a=e.screenSpaceCameraController;a.enableInputs=!1;var _=wrapCallback(a,t.complete),p=wrapCallback(a,t.cancel),a=h.frustum,t=e.mode===SceneMode$1.SCENE2D;if(t=(t=(t=(t=t&&Cartesian2.equalsEpsilon(h.position,i,CesiumMath.EPSILON6))&&CesiumMath.equalsEpsilon(Math.max(a.right-a.left,a.top-a.bottom),i.z,CesiumMath.EPSILON6))||e.mode!==SceneMode$1.SCENE2D&&Cartesian3.equalsEpsilon(i,h.position,CesiumMath.EPSILON10))&&CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(m),CesiumMath.negativePiToPi(h.heading),CesiumMath.EPSILON10)&&CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(f),CesiumMath.negativePiToPi(h.pitch),CesiumMath.EPSILON10)&&CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(g),CesiumMath.negativePiToPi(h.roll),CesiumMath.EPSILON10))return emptyFlight(_,p);var y=new Array(4);if(y[SceneMode$1.SCENE2D]=createUpdate2D,y[SceneMode$1.SCENE3D]=createUpdate3D,y[SceneMode$1.COLUMBUS_VIEW]=createUpdateCV,n<=0)return emptyFlight(function(){y[r](e,1,i,m,f,g,s,l,c,u)({time:1}),"function"==typeof _&&_()},p);t=y[r](e,n,i,m,f,g,s,l,c,u);return defined(d)||(h=h.positionCartographic.height,d=(r===SceneMode$1.SCENE3D?o.cartesianToCartographic(i).height:i.z)CesiumMath.EPSILON10?Cartesian3.cross(s,c,l):(r=Cartesian4.add(Matrix4.getColumn(e._transform,1,scratchCartesian3$1),r,scratchCartesian3$1),i.cartesianToCartographic(r,n),t.project(n,a),l.x=a.z,l.y=a.x,l.z=a.y,l.w=0,Cartesian3.subtract(l,o,l),l.x=0,Cartesian3.magnitudeSquared(l)CesiumMath.EPSILON2&&(p=1/Cartesian3.magnitudeSquared(l),p=Cartesian3.dot(l,o)*p,p=Cartesian3.multiplyByScalar(o,p,scratchCartesian$1),l=Cartesian3.normalize(Cartesian3.subtract(l,p,e._up),e._up),Cartesian3.clone(l,e.up),u=Cartesian3.cross(o,l,e._right),Cartesian3.clone(u,e.right))),(s||h)&&(e._directionWC=Matrix4.multiplyByPointAsVector(i,o,e._directionWC),Cartesian3.normalize(e._directionWC,e._directionWC)),(c||h)&&(e._upWC=Matrix4.multiplyByPointAsVector(i,l,e._upWC),Cartesian3.normalize(e._upWC,e._upWC)),(d||h)&&(e._rightWC=Matrix4.multiplyByPointAsVector(i,u,e._rightWC),Cartesian3.normalize(e._rightWC,e._rightWC)),(a||s||c||d||h)&&updateViewMatrix(e)}function getHeading(e,t){e=CesiumMath.equalsEpsilon(Math.abs(e.z),1,CesiumMath.EPSILON3)?Math.atan2(t.y,t.x)-CesiumMath.PI_OVER_TWO:Math.atan2(e.y,e.x)-CesiumMath.PI_OVER_TWO;return CesiumMath.TWO_PI-CesiumMath.zeroToTwoPi(e)}function getPitch(e){return CesiumMath.PI_OVER_TWO-CesiumMath.acosClamped(e.z)}function getRoll(e,t,i){var r=0;return CesiumMath.equalsEpsilon(Math.abs(e.z),1,CesiumMath.EPSILON3)||(r=Math.atan2(-i.z,t.z),r=CesiumMath.zeroToTwoPi(r+CesiumMath.TWO_PI)),r}var scratchHPRMatrix1=new Matrix4,scratchHPRMatrix2=new Matrix4;Object.defineProperties(Camera.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return updateMembers(this),this._invTransform}},viewMatrix:{get:function(){return updateMembers(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return updateMembers(this),this._invViewMatrix}},positionCartographic:{get:function(){return updateMembers(this),this._positionCartographic}},positionWC:{get:function(){return updateMembers(this),this._positionWC}},directionWC:{get:function(){return updateMembers(this),this._directionWC}},upWC:{get:function(){return updateMembers(this),this._upWC}},rightWC:{get:function(){return updateMembers(this),this._rightWC}},heading:{get:function(){if(this._mode!==SceneMode$1.MORPHING){var e=this._projection.ellipsoid,t=Matrix4.clone(this._transform,scratchHPRMatrix1),e=Transforms.eastNorthUpToFixedFrame(this.positionWC,e,scratchHPRMatrix2);this._setTransform(e);e=getHeading(this.direction,this.up);return this._setTransform(t),e}}},pitch:{get:function(){if(this._mode!==SceneMode$1.MORPHING){var e=this._projection.ellipsoid,t=Matrix4.clone(this._transform,scratchHPRMatrix1),e=Transforms.eastNorthUpToFixedFrame(this.positionWC,e,scratchHPRMatrix2);this._setTransform(e);e=getPitch(this.direction);return this._setTransform(t),e}}},roll:{get:function(){if(this._mode!==SceneMode$1.MORPHING){var e=this._projection.ellipsoid,t=Matrix4.clone(this._transform,scratchHPRMatrix1),e=Transforms.eastNorthUpToFixedFrame(this.positionWC,e,scratchHPRMatrix2);this._setTransform(e);e=getRoll(this.direction,this.up,this.right);return this._setTransform(t),e}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}}),Camera.prototype.update=function(e){var t=!1;e!==this._mode&&(this._mode=e,this._modeChanged=e!==SceneMode$1.MORPHING,t=this._mode===SceneMode$1.SCENE2D),t&&(t=(e=this._max2Dfrustum=this.frustum.clone()).top/e.right,e.right=2*this._maxCoord.x,e.left=-e.right,e.top=t*e.right,e.bottom=-e.top),this._mode===SceneMode$1.SCENE2D&&clampMove2D(this,this.position)};var setTransformPosition=new Cartesian3,setTransformUp=new Cartesian3,setTransformDirection=new Cartesian3;Camera.prototype._setTransform=function(e){var t=Cartesian3.clone(this.positionWC,setTransformPosition),i=Cartesian3.clone(this.upWC,setTransformUp),r=Cartesian3.clone(this.directionWC,setTransformDirection);Matrix4.clone(e,this._transform),this._transformChanged=!0,updateMembers(this);e=this._actualInvTransform;Matrix4.multiplyByPoint(e,t,this.position),Matrix4.multiplyByPointAsVector(e,r,this.direction),Matrix4.multiplyByPointAsVector(e,i,this.up),Cartesian3.cross(this.direction,this.up,this.right),updateMembers(this)};var scratchAdjustOrthographicFrustumMousePosition=new Cartesian2,scratchPickRay$1=new Ray,scratchRayIntersection$1=new Cartesian3,scratchDepthIntersection$1=new Cartesian3;function calculateOrthographicFrustumWidth(e){if(!Matrix4.equals(Matrix4.IDENTITY,e.transform))return Cartesian3.magnitude(e.position);var t,i,r=e._scene,n=r.globe,a=scratchAdjustOrthographicFrustumMousePosition;return a.x=r.drawingBufferWidth/2,a.y=r.drawingBufferHeight/2,defined(n)&&(i=e.getPickRay(a,scratchPickRay$1),i=n.pickWorldCoordinates(i,r,!0,scratchRayIntersection$1)),r.pickPositionSupported&&(t=r.pickPositionWorldCoordinates(a,scratchDepthIntersection$1)),defined(i)||defined(t)?(t=defined(t)?Cartesian3.distance(t,e.positionWC):Number.POSITIVE_INFINITY,i=defined(i)?Cartesian3.distance(i,e.positionWC):Number.POSITIVE_INFINITY,Math.min(t,i)):Math.max(e.positionCartographic.height,0)}Camera.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof OrthographicFrustum&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=calculateOrthographicFrustumWidth(this)))};var scratchSetViewCartesian=new Cartesian3,scratchSetViewTransform1=new Matrix4,scratchSetViewTransform2=new Matrix4,scratchSetViewQuaternion=new Quaternion,scratchSetViewMatrix3=new Matrix3,scratchSetViewCartographic=new Cartographic;function setView3D(e,t,i){var r=Matrix4.clone(e.transform,scratchSetViewTransform1),t=Transforms.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,scratchSetViewTransform2);e._setTransform(t),Cartesian3.clone(Cartesian3.ZERO,e.position),i.heading=i.heading-CesiumMath.PI_OVER_TWO;i=Quaternion.fromHeadingPitchRoll(i,scratchSetViewQuaternion),i=Matrix3.fromQuaternion(i,scratchSetViewMatrix3);Matrix3.getColumn(i,0,e.direction),Matrix3.getColumn(i,2,e.up),Cartesian3.cross(e.direction,e.up,e.right),e._setTransform(r),e._adjustOrthographicFrustum(!0)}function setViewCV(e,t,i,r){var n,a=Matrix4.clone(e.transform,scratchSetViewTransform1);e._setTransform(Matrix4.IDENTITY),Cartesian3.equals(t,e.positionWC)||(r&&(r=(n=e._projection).ellipsoid.cartesianToCartographic(t,scratchSetViewCartographic),t=n.project(r,scratchSetViewCartesian)),Cartesian3.clone(t,e.position)),i.heading=i.heading-CesiumMath.PI_OVER_TWO;i=Quaternion.fromHeadingPitchRoll(i,scratchSetViewQuaternion),i=Matrix3.fromQuaternion(i,scratchSetViewMatrix3);Matrix3.getColumn(i,0,e.direction),Matrix3.getColumn(i,2,e.up),Cartesian3.cross(e.direction,e.up,e.right),e._setTransform(a),e._adjustOrthographicFrustum(!0)}function setView2D(e,t,i,r){var n,a,o=Matrix4.clone(e.transform,scratchSetViewTransform1);e._setTransform(Matrix4.IDENTITY),Cartesian3.equals(t,e.positionWC)||(r&&(a=(n=e._projection).ellipsoid.cartesianToCartographic(t,scratchSetViewCartographic),t=n.project(a,scratchSetViewCartesian)),Cartesian2.clone(t,e.position),n=-(r=.5*-t.z),a=e.frustum,rn&&(t.x=i),t.x<-n&&(t.x=r),t.y>e&&(t.y=e),t.y<-e&&(t.y=-e)}Camera.prototype.flyHome=function(e){var t,i,r=this._mode;r===SceneMode$1.MORPHING&&this._scene.completeMorph(),r===SceneMode$1.SCENE2D?this.flyTo({destination:Camera.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:Matrix4.IDENTITY}):r===SceneMode$1.SCENE3D?(i=this.getRectangleCameraCoordinates(Camera.DEFAULT_VIEW_RECTANGLE),t=Cartesian3.magnitude(i),t+=t*Camera.DEFAULT_VIEW_FACTOR,Cartesian3.normalize(i,i),Cartesian3.multiplyByScalar(i,t,i),this.flyTo({destination:i,duration:e,endTransform:Matrix4.IDENTITY})):r===SceneMode$1.COLUMBUS_VIEW&&(i=this._projection.ellipsoid.maximumRadius,r=new Cartesian3(0,-1,1),r=Cartesian3.multiplyByScalar(Cartesian3.normalize(r,r),5*i,r),this.flyTo({destination:r,duration:e,orientation:{heading:0,pitch:-Math.acos(Cartesian3.normalize(r,pitchScratch).z),roll:0},endTransform:Matrix4.IDENTITY,convert:!1}))},Camera.prototype.worldToCameraCoordinates=function(e,t){return defined(t)||(t=new Cartesian4),updateMembers(this),Matrix4.multiplyByVector(this._actualInvTransform,e,t)},Camera.prototype.worldToCameraCoordinatesPoint=function(e,t){return defined(t)||(t=new Cartesian3),updateMembers(this),Matrix4.multiplyByPoint(this._actualInvTransform,e,t)},Camera.prototype.worldToCameraCoordinatesVector=function(e,t){return defined(t)||(t=new Cartesian3),updateMembers(this),Matrix4.multiplyByPointAsVector(this._actualInvTransform,e,t)},Camera.prototype.cameraToWorldCoordinates=function(e,t){return defined(t)||(t=new Cartesian4),updateMembers(this),Matrix4.multiplyByVector(this._actualTransform,e,t)},Camera.prototype.cameraToWorldCoordinatesPoint=function(e,t){return defined(t)||(t=new Cartesian3),updateMembers(this),Matrix4.multiplyByPoint(this._actualTransform,e,t)},Camera.prototype.cameraToWorldCoordinatesVector=function(e,t){return defined(t)||(t=new Cartesian3),updateMembers(this),Matrix4.multiplyByPointAsVector(this._actualTransform,e,t)};var moveScratch=new Cartesian3;Camera.prototype.move=function(e,t){var i=this.position;Cartesian3.multiplyByScalar(e,t,moveScratch),Cartesian3.add(i,moveScratch,i),this._mode===SceneMode$1.SCENE2D&&clampMove2D(this,i),this._adjustOrthographicFrustum(!0)},Camera.prototype.moveForward=function(e){e=defaultValue(e,this.defaultMoveAmount),this._mode===SceneMode$1.SCENE2D?zoom2D$1(this,e):this.move(this.direction,e)},Camera.prototype.moveBackward=function(e){e=defaultValue(e,this.defaultMoveAmount),this._mode===SceneMode$1.SCENE2D?zoom2D$1(this,-e):this.move(this.direction,-e)},Camera.prototype.moveUp=function(e){e=defaultValue(e,this.defaultMoveAmount),this.move(this.up,e)},Camera.prototype.moveDown=function(e){e=defaultValue(e,this.defaultMoveAmount),this.move(this.up,-e)},Camera.prototype.moveRight=function(e){e=defaultValue(e,this.defaultMoveAmount),this.move(this.right,e)},Camera.prototype.moveLeft=function(e){e=defaultValue(e,this.defaultMoveAmount),this.move(this.right,-e)},Camera.prototype.lookLeft=function(e){e=defaultValue(e,this.defaultLookAmount),this._mode!==SceneMode$1.SCENE2D&&this.look(this.up,-e)},Camera.prototype.lookRight=function(e){e=defaultValue(e,this.defaultLookAmount),this._mode!==SceneMode$1.SCENE2D&&this.look(this.up,e)},Camera.prototype.lookUp=function(e){e=defaultValue(e,this.defaultLookAmount),this._mode!==SceneMode$1.SCENE2D&&this.look(this.right,-e)},Camera.prototype.lookDown=function(e){e=defaultValue(e,this.defaultLookAmount),this._mode!==SceneMode$1.SCENE2D&&this.look(this.right,e)};var lookScratchQuaternion=new Quaternion,lookScratchMatrix=new Matrix3;Camera.prototype.look=function(e,t){var i=defaultValue(t,this.defaultLookAmount),r=Quaternion.fromAxisAngle(e,-i,lookScratchQuaternion),t=Matrix3.fromQuaternion(r,lookScratchMatrix),e=this.direction,i=this.up,r=this.right;Matrix3.multiplyByVector(t,e,e),Matrix3.multiplyByVector(t,i,i),Matrix3.multiplyByVector(t,r,r)},Camera.prototype.twistLeft=function(e){e=defaultValue(e,this.defaultLookAmount),this.look(this.direction,e)},Camera.prototype.twistRight=function(e){e=defaultValue(e,this.defaultLookAmount),this.look(this.direction,-e)};var rotateScratchQuaternion=new Quaternion,rotateScratchMatrix=new Matrix3;Camera.prototype.rotate=function(e,t){t=defaultValue(t,this.defaultRotateAmount),t=Quaternion.fromAxisAngle(e,-t,rotateScratchQuaternion),t=Matrix3.fromQuaternion(t,rotateScratchMatrix);Matrix3.multiplyByVector(t,this.position,this.position),Matrix3.multiplyByVector(t,this.direction,this.direction),Matrix3.multiplyByVector(t,this.up,this.up),Cartesian3.cross(this.direction,this.up,this.right),Cartesian3.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)},Camera.prototype.rotateDown=function(e){rotateVertical(this,e=defaultValue(e,this.defaultRotateAmount))},Camera.prototype.rotateUp=function(e){rotateVertical(this,-(e=defaultValue(e,this.defaultRotateAmount)))};var rotateVertScratchP=new Cartesian3,rotateVertScratchA=new Cartesian3,rotateVertScratchTan=new Cartesian3,rotateVertScratchNegate=new Cartesian3;function rotateVertical(e,t){var i,r,n,a=e.position;defined(e.constrainedAxis)&&!Cartesian3.equalsEpsilon(e.position,Cartesian3.ZERO,CesiumMath.EPSILON2)?(n=Cartesian3.normalize(a,rotateVertScratchP),i=Cartesian3.equalsEpsilon(n,e.constrainedAxis,CesiumMath.EPSILON2),r=Cartesian3.equalsEpsilon(n,Cartesian3.negate(e.constrainedAxis,rotateVertScratchNegate),CesiumMath.EPSILON2),i||r?(i&&t<0||r&&0Math.abs(a.left)+Math.abs(a.right)?(r=a.top-t,n=a.bottom+t,i=e._maxCoord.y,e._scene.mapMode2D===MapMode2D$1.ROTATE&&(i*=e.maximumZoomFactor),(r=iCesiumMath.PI_OVER_TWO-CesiumMath.RADIANS_PER_DEGREE?0:((y=viewRectangle3DCartographic1).longitude=u,y.latitude=o,y.height=0,(C=viewRectangle3DCartographic2).longitude=u,C.latitude=s,C.height=0,defined(v=viewRectangle3DEllipsoidGeodesic)&&v.ellipsoid===n||(viewRectangle3DEllipsoidGeodesic=v=new EllipsoidGeodesic(void 0,void 0,n)),v.setEndPoints(y,C),v.interpolateUsingFraction(.5,viewRectangle3DCartographic1).latitude),h=viewRectangle3DCartographic1;h.longitude=u,h.latitude=d,h.height=0;var p=n.cartographicToCartesian(h,viewRectangle3DCenter),m=viewRectangle3DCartographic1;m.longitude=l,m.latitude=o;var f=n.cartographicToCartesian(m,viewRectangle3DNorthEast);m.longitude=c;var g=n.cartographicToCartesian(m,viewRectangle3DNorthWest);m.longitude=u;var _=n.cartographicToCartesian(m,viewRectangle3DNorthCenter);m.latitude=s;r=n.cartographicToCartesian(m,viewRectangle3DSouthCenter);m.longitude=l;t=n.cartographicToCartesian(m,viewRectangle3DSouthEast);m.longitude=c;var y=n.cartographicToCartesian(m,viewRectangle3DSouthWest);Cartesian3.subtract(g,p,g),Cartesian3.subtract(t,p,t),Cartesian3.subtract(f,p,f),Cartesian3.subtract(y,p,y),Cartesian3.subtract(_,p,_),Cartesian3.subtract(r,p,r);var C=n.geodeticSurfaceNormal(p,a.direction);Cartesian3.negate(C,C);var v=Cartesian3.cross(C,Cartesian3.UNIT_Z,a.right);Cartesian3.normalize(v,v);var S,x,d=Cartesian3.cross(v,C,a.up);return e.frustum instanceof OrthographicFrustum?(h=Math.max(Cartesian3.distance(f,g),Cartesian3.distance(t,y)),(a=(u=Math.max(Cartesian3.distance(f,t),Cartesian3.distance(g,y)))*(m=e.frustum._offCenterFrustum.right/e.frustum._offCenterFrustum.top))t.east&&(t=Rectangle.MAX_VALUE);var n=e._actualTransform,a=e._actualInvTransform,o=viewRectangleCVCartographic;o.longitude=t.east,o.latitude=t.north;var s=r.project(o,viewRectangleCVNorthEast);Matrix4.multiplyByPoint(n,s,s),Matrix4.multiplyByPoint(a,s,s),o.longitude=t.west,o.latitude=t.south;var l,o=r.project(o,viewRectangleCVSouthWest);return Matrix4.multiplyByPoint(n,o,o),Matrix4.multiplyByPoint(a,o,o),i.x=.5*(s.x-o.x)+o.x,i.y=.5*(s.y-o.y)+o.y,defined(e.frustum.fovy)?(l=Math.tan(.5*e.frustum.fovy),e=e.frustum.aspectRatio*l,i.z=.5*Math.max((s.x-o.x)/e,(s.y-o.y)/l)):(l=s.x-o.x,o=s.y-o.y,i.z=Math.max(l,o)),i}var viewRectangle2DCartographic=new Cartographic,viewRectangle2DNorthEast=new Cartesian3,viewRectangle2DSouthWest=new Cartesian3;function rectangleCameraPosition2D(e,t,i){var r=e._projection,n=t.east;t.west>t.east&&(e._scene.mapMode2D===MapMode2D$1.INFINITE_SCROLL?n+=CesiumMath.TWO_PI:n=(t=Rectangle.MAX_VALUE).east);var a=viewRectangle2DCartographic;a.longitude=n,a.latitude=t.north;var o=r.project(a,viewRectangle2DNorthEast);a.longitude=t.west,a.latitude=t.south;var s,l,c=r.project(a,viewRectangle2DSouthWest),u=.5*Math.abs(o.x-c.x),n=.5*Math.abs(o.y-c.y),t=e.frustum.right/e.frustum.top,e=n*t;return eCesiumMath.PI_OVER_TWO))return i.ellipsoid.cartographicToCartesian(t,r)}var pickEllipsoidCVRay=new Ray;function pickMapColumbusView(e,t,i,r){e=e.getPickRay(t,pickEllipsoidCVRay),t=-e.origin.x/e.direction.x;Ray.getPoint(e,t,r);t=i.unproject(new Cartesian3(r.y,r.z,0));if(!(t.latitude<-CesiumMath.PI_OVER_TWO||t.latitude>CesiumMath.PI_OVER_TWO||t.longitude<-Math.PI||t.longitude>Math.PI))return i.ellipsoid.cartographicToCartesian(t,r)}Camera.prototype.pickEllipsoid=function(e,t,i){var r=this._scene.canvas;if(0!==r.clientWidth&&0!==r.clientHeight){if(defined(i)||(i=new Cartesian3),t=defaultValue(t,Ellipsoid.WGS84),this._mode===SceneMode$1.SCENE3D)i=pickEllipsoid3D(this,e,t,i);else if(this._mode===SceneMode$1.SCENE2D)i=pickMap2D(this,e,this._projection,i);else{if(this._mode!==SceneMode$1.COLUMBUS_VIEW)return;i=pickMapColumbusView(this,e,this._projection,i)}return i}};var pickPerspCenter=new Cartesian3,pickPerspXDir=new Cartesian3,pickPerspYDir=new Cartesian3;function getPickRayPerspective(e,t,i){var r=e._scene.canvas,n=r.clientWidth,a=r.clientHeight,o=Math.tan(.5*e.frustum.fovy),s=e.frustum.aspectRatio*o,l=e.frustum.near,r=2/n*t.x-1,n=2/a*(a-t.y)-1,a=e.positionWC;Cartesian3.clone(a,i.origin);t=Cartesian3.multiplyByScalar(e.directionWC,l,pickPerspCenter);Cartesian3.add(a,t,t);s=Cartesian3.multiplyByScalar(e.rightWC,r*l*s,pickPerspXDir),o=Cartesian3.multiplyByScalar(e.upWC,n*l*o,pickPerspYDir),s=Cartesian3.add(t,s,i.direction);return Cartesian3.add(s,o,s),Cartesian3.subtract(s,a,s),Cartesian3.normalize(s,s),i}var scratchDirection=new Cartesian3;function getPickRayOrthographic(e,t,i){var r=e._scene.canvas,n=r.clientWidth,a=r.clientHeight,r=e.frustum;defined(r._offCenterFrustum)&&(r=r._offCenterFrustum);n=2/n*t.x-1;n*=.5*(r.right-r.left);t=2/a*(a-t.y)-1;t*=.5*(r.top-r.bottom);r=i.origin;return Cartesian3.clone(e.position,r),Cartesian3.multiplyByScalar(e.right,n,scratchDirection),Cartesian3.add(scratchDirection,r,r),Cartesian3.multiplyByScalar(e.up,t,scratchDirection),Cartesian3.add(scratchDirection,r,r),Cartesian3.clone(e.directionWC,i.direction),e._mode!==SceneMode$1.COLUMBUS_VIEW&&e._mode!==SceneMode$1.SCENE2D||Cartesian3.fromElements(i.origin.z,i.origin.x,i.origin.y,i.origin),i}Camera.prototype.getPickRay=function(e,t){defined(t)||(t=new Ray);var i=this.frustum;return(defined(i.aspectRatio)&&defined(i.fov)&&defined(i.near)?getPickRayPerspective:getPickRayOrthographic)(this,e,t)};var scratchToCenter=new Cartesian3,scratchProj=new Cartesian3;Camera.prototype.distanceToBoundingSphere=function(e){var t=Cartesian3.subtract(this.positionWC,e.center,scratchToCenter),t=Cartesian3.multiplyByScalar(this.directionWC,Cartesian3.dot(t,this.directionWC),scratchProj);return Math.max(0,Cartesian3.magnitude(t)-e.radius)};var scratchPixelSize=new Cartesian2;function createAnimationTemplateCV(t,i,e,r,n,a){var o=Cartesian3.clone(i);return e.y>r?o.y-=e.y-r:e.y<-r&&(o.y+=-r-e.y),e.z>n?o.z-=e.z-n:e.z<-n&&(o.z+=-n-e.z),{easingFunction:EasingFunction$1.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:a,update:function(e){e=Cartesian3.lerp(i,o,e.time,new Cartesian3),t.worldToCameraCoordinatesPoint(e,t.position)}}}Camera.prototype.getPixelSize=function(e,t,i){e=this.distanceToBoundingSphere(e),e=this.frustum.getPixelDimensions(t,i,e,this._scene.pixelRatio,scratchPixelSize);return Math.max(e.x,e.y)};var normalScratch$1=new Cartesian3,centerScratch$1=new Cartesian3,posScratch=new Cartesian3,scratchCartesian3Subtract=new Cartesian3;function createAnimationCV(e,t){var i=e.position,r=e.direction,n=e.worldToCameraCoordinatesVector(Cartesian3.UNIT_X,normalScratch$1),a=-Cartesian3.dot(n,i)/Cartesian3.dot(n,r),o=Cartesian3.add(i,Cartesian3.multiplyByScalar(r,a,centerScratch$1),centerScratch$1);e.cameraToWorldCoordinatesPoint(o,o);var i=e.cameraToWorldCoordinatesPoint(e.position,posScratch),s=Math.tan(.5*e.frustum.fovy),n=e.frustum.aspectRatio*s,r=Cartesian3.magnitude(Cartesian3.subtract(i,o,scratchCartesian3Subtract)),a=n*r,n=s*r,s=e._maxCoord.x,r=e._maxCoord.y,a=Math.max(a-s,s),s=Math.max(n-r,r);if(i.z<-a||i.z>a||i.y<-s||i.y>s){n=o.y<-a||o.y>a,r=o.z<-s||o.z>s;if(n||r)return createAnimationTemplateCV(e,i,o,a,s,t)}}Camera.prototype.createCorrectPositionTween=function(e){if(this._mode===SceneMode$1.COLUMBUS_VIEW)return createAnimationCV(this,e)};var scratchFlyToDestination=new Cartesian3,newOptions={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};function distanceToBoundingSphere3D(e,t){var i=e.frustum,e=Math.tan(.5*i.fovy),i=i.aspectRatio*e;return Math.max(t/i,t/e)}function distanceToBoundingSphere2D(e,t){var i,r,n=e.frustum,e=(n=defined(n._offCenterFrustum)?n._offCenterFrustum:n).right/n.top,n=t*e;return nCesiumMath.PI?o+=CesiumMath.TWO_PI-u:o+=u,s=c}return CesiumMath.equalsEpsilon(Math.abs(o),CesiumMath.TWO_PI,CesiumMath.EPSILON9)&&(t.west=-CesiumMath.PI,t.east=CesiumMath.PI,0<=cartoArray[0].latitude?t.north=CesiumMath.PI_OVER_TWO:t.south=-CesiumMath.PI_OVER_TWO),t}},Camera.prototype.switchToPerspectiveFrustum=function(){var e;this._mode===SceneMode$1.SCENE2D||this.frustum instanceof PerspectiveFrustum||(e=this._scene,this.frustum=new PerspectiveFrustum,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=CesiumMath.toRadians(60))},Camera.prototype.switchToOrthographicFrustum=function(){var e,t;this._mode===SceneMode$1.SCENE2D||this.frustum instanceof OrthographicFrustum||(e=calculateOrthographicFrustumWidth(this),t=this._scene,this.frustum=new OrthographicFrustum,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e)},Camera.clone=function(e,t){return defined(t)||(t=new Camera(e._scene)),Cartesian3.clone(e.position,t.position),Cartesian3.clone(e.direction,t.direction),Cartesian3.clone(e.up,t.up),Cartesian3.clone(e.right,t.right),Matrix4.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var CameraEventType={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},CameraEventType$1=Object.freeze(CameraEventType);function getKey$1(e,t){return defined(t)&&(e+="+"+t),e}function clonePinchMovement(e,t){Cartesian2.clone(e.distance.startPosition,t.distance.startPosition),Cartesian2.clone(e.distance.endPosition,t.distance.endPosition),Cartesian2.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),Cartesian2.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function listenToPinch(t,e,n){var a=getKey$1(CameraEventType$1.PINCH,e),o=t._update,s=t._isDown,i=t._eventStartPosition,r=t._pressTime,l=t._releaseTime;o[a]=!0,s[a]=!1,i[a]=new Cartesian2;var c=t._movement[a];(c=!defined(c)?t._movement[a]={}:c).distance={startPosition:new Cartesian2,endPosition:new Cartesian2},c.angleAndHeight={startPosition:new Cartesian2,endPosition:new Cartesian2},c.prevAngle=0,t._eventHandler.setInputAction(function(e){t._buttonsDown++,s[a]=!0,r[a]=new Date,Cartesian2.lerp(e.position1,e.position2,.5,i[a])},ScreenSpaceEventType$1.PINCH_START,e),t._eventHandler.setInputAction(function(){t._buttonsDown=Math.max(t._buttonsDown-1,0),s[a]=!1,l[a]=new Date},ScreenSpaceEventType$1.PINCH_END,e),t._eventHandler.setInputAction(function(e){if(s[a]){o[a]?(clonePinchMovement(e,c),o[a]=!1,c.prevAngle=c.angleAndHeight.startPosition.x):(Cartesian2.clone(e.distance.endPosition,c.distance.endPosition),Cartesian2.clone(e.angleAndHeight.endPosition,c.angleAndHeight.endPosition));for(var t=c.angleAndHeight.endPosition.x,i=c.prevAngle,r=2*Math.PI;t>=i+Math.PI;)t-=r;for(;t=m.height;h?s=s.reverse():d||mergeSort(s,function(e,t){return CesiumMath.sign(e.height-t.height)});var f=defaultValue(n.extendDownwards,!1),n=defaultValue(n.extendUpwards,!1);1!==s.length||f||n||(n=f=!0),f&&s.splice(0,0,createNewEntry(createElevationBandMaterial._minimumHeight,s[0].color)),n&&s.splice(s.length,0,createNewEntry(createElevationBandMaterial._maximumHeight,s[s.length-1].color)),s=removeDuplicates(s),t.push(s)}return t}function createLayeredEntries(e){var t=preprocess(e),i=[];function r(e,t){i.push(createNewEntry(e,t))}function n(e,t,i){i=Color.multiplyByScalar(i,1-t.alpha,scratchColorBlend);r(e,i=Color.add(i,t,i))}for(var a=t.length,o=0;o=c._getFeatureInfoFormats.length)return when([]);var t=c._getFeatureInfoFormats[l],i=buildPickFeaturesResource(c,r,n,a,o,s,t.format);return++l,("json"===t.type?i.fetchJson().then(t.callback):"xml"===t.type?i.fetchXML().then(t.callback):"text"===t.type||"html"===t.type?i.fetchText().then(t.callback):i.fetch({responseType:t.format}).then(function(e,t){return e.callback(t)}.bind(void 0,t))).otherwise(e)}()}};var degreesScratchComputed=!1,degreesScratch=new Rectangle,projectedScratchComputed=!1,projectedScratch=new Rectangle;function buildImageResource$1(t,i,r,n,e){projectedScratchComputed=degreesScratchComputed=!1;var a=t._resource,o=a.getUrlComponent(!0),s=t._tags,l={},o=o.match(templateRegex);return defined(o)&&o.forEach(function(e){e=e.substring(1,e.length-1);defined(s[e])&&(l[e]=s[e](t,i,r,n))}),a.getDerivedResource({request:e,templateValues:l})}var ijScratchComputed=!1,ijScratch=new Cartesian2,longitudeLatitudeProjectedScratchComputed=!1;function buildPickFeaturesResource(t,i,r,n,a,o,s){longitudeLatitudeProjectedScratchComputed=ijScratchComputed=projectedScratchComputed=degreesScratchComputed=!1;var e=t._pickFeaturesResource,l=e.getUrlComponent(!0),c=t._pickFeaturesTags,u={},l=l.match(templateRegex);return defined(l)&&l.forEach(function(e){e=e.substring(1,e.length-1);defined(c[e])&&(u[e]=c[e](t,i,r,n,a,o,s))}),e.getDerivedResource({templateValues:u})}function padWithZerosIfNecessary(e,t,i){return e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)&&("string"!=typeof(t=e.urlSchemeZeroPadding[t])||1<(t=t.length)&&(i=i.length>=t?i:new Array(t-i.toString().length+1).join("0")+i)),i}function xTag(e,t,i,r){return padWithZerosIfNecessary(e,"{x}",t)}function reverseXTag(e,t,i,r){t=e.tilingScheme.getNumberOfXTilesAtLevel(r)-t-1;return padWithZerosIfNecessary(e,"{reverseX}",t)}function yTag(e,t,i,r){return padWithZerosIfNecessary(e,"{y}",i)}function reverseYTag(e,t,i,r){i=e.tilingScheme.getNumberOfYTilesAtLevel(r)-i-1;return padWithZerosIfNecessary(e,"{reverseY}",i)}function reverseZTag(e,t,i,r){var n=e.maximumLevel;return padWithZerosIfNecessary(e,"{reverseZ}",defined(n)&&rt.rectangle.east&&(e.east=t.rectangle.east),e.southt.rectangle.north&&(e.north=t.rectangle.north),e}function calculateSafeMinimumDetailLevel(e,t,i){var r=e.positionToTileXY(Rectangle.southwest(t),i),t=e.positionToTileXY(Rectangle.northeast(t),i);return 4<(Math.abs(t.x-r.x)+1)*(Math.abs(t.y-r.y)+1)?0:i}function GoogleEarthEnterpriseMapsProvider(a){a=defaultValue(a,{}),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=1.9,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var e=a.url,t=defaultValue(a.path,"/default_map"),i=Resource.createIfNeeded(e).getDerivedResource({url:"/"===t[0]?t.substring(1):t});i.appendForwardSlash(),this._resource=i,this._url=e,this._path=t,this._tileDiscardPolicy=a.tileDiscardPolicy,this._channel=a.channel,this._requestType="ImageryMaps",this._credit=new Credit(''),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=a.maximumLevel,this._errorEvent=new Event,this._ready=!1,this._readyPromise=when.defer();var o,r=i.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),s=this;function n(t){var i,e;try{i=JSON.parse(t)}catch(e){i=JSON.parse(t.replace(/([\[\{,])[\n\r ]*([A-Za-z0-9]+)[\n\r ]*:/g,'$1"$2":'))}for(var r,n=0;nMapbox © OpenStreetMap Improve this map');function MapboxImageryProvider(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).mapId,i=e.accessToken;this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var r=Resource.createIfNeeded(defaultValue(e.url,"https://{s}.tiles.mapbox.com/v4/"));this._mapId=t,this._accessToken=i;var n=defaultValue(e.format,"png");/\./.test(n)||(n="."+n),this._format=n;var a,n=r.getUrlComponent();trailingSlashRegex$1.test(n)||(n+="/"),n+=t+"/{z}/{x}/{y}"+this._format,r.url=n,r.setQueryParameters({access_token:i}),defined(e.credit)?"string"==typeof(a=e.credit)&&(a=new Credit(a)):a=defaultCredit$3,this._resource=r,this._imageryProvider=new UrlTemplateImageryProvider({url:r,credit:a,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}function SingleTileImageryProvider(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var i=Resource.createIfNeeded(e.url),t=new GeographicTilingScheme({rectangle:defaultValue(e.rectangle,Rectangle.MAX_VALUE),numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=t,this._resource=i,this._image=void 0,this._texture=void 0,this._tileWidth=0,this._tileHeight=0,this._errorEvent=new Event,this._ready=!1,this._readyPromise=when.defer();e=e.credit;"string"==typeof e&&(e=new Credit(e)),this._credit=e;var r,n=this;function a(e){n._image=e,n._tileWidth=e.width,n._tileHeight=e.height,n._ready=!0,n._readyPromise.resolve(!0),TileProviderError.handleSuccess(n._errorEvent)}function o(e){var t="Failed to load image "+i.url+".";r=TileProviderError.handleError(r,n,n._errorEvent,t,0,0,0,s,e),n._readyPromise.reject(new RuntimeError(t))}function s(){ImageryProvider.loadImage(null,i).then(a).otherwise(o)}s()}function GetFeatureInfoFormat(e,t,i){this.type=e,defined(t)||("json"===e?t="application/json":"xml"===e?t="text/xml":"html"===e?t="text/html":"text"===e&&(t="text/plain")),this.format=t,defined(i)||("json"===e?i=geoJsonToFeatureInfo:"xml"===e?i=xmlToFeatureInfo:"html"!==e&&"text"!==e||(i=textToFeatureInfo)),this.callback=i}function geoJsonToFeatureInfo(e){for(var t=[],i=e.features,r=0;r\s*<\/body>/im,wmsServiceExceptionReportRegex=//im,titleRegex=/([\s\S]*)<\/title>/im;function textToFeatureInfo(e){if(!emptyBodyRegex.test(e)&&!wmsServiceExceptionReportRegex.test(e)){var t,i=titleRegex.exec(e);i&&1<i.length&&(t=i[1]);i=new ImageryLayerFeatureInfo;return i.name=t,i.description=e,i.data=e,[i]}}function TimeDynamicImagery(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._tileCache={},this._tilesRequestedForInterval=[];var t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}function getKey(e,t,i){return e+"-"+t+"-"+i}function getKeyElements(e){e=e.split("-");if(3===e.length)return{x:Number(e[0]),y:Number(e[1]),level:Number(e[2])}}function getApproachingInterval(e){var t=e._times;if(defined(t)){var i=e._clock,r=i.currentTime,n=i.canAnimate&&i.shouldAnimate,e=i.multiplier;if(n||0===e){var a,i=t.indexOf(r);if(!(i<0)){n=t.get(i);return 0<e?(a=JulianDate.secondsDifference(n.stop,r),++i):(a=JulianDate.secondsDifference(n.start,r),--i),a/=e,0<=i&&a<=5?t.get(i):void 0}}}}function addToCache(e,t,i){var r=e._times.indexOf(i.start),n=e._tileCache,a=n[r];defined(a)||(a=n[r]={});n=t.key;if(defined(a[n]))return!0;r=getKeyElements(n),t=new Request({throttle:!1,throttleByServer:!0,type:RequestType$1.IMAGERY,priorityFunction:t.priorityFunction}),i=e._requestImageFunction(r.x,r.y,r.level,t,i);return!!defined(i)&&(a[n]={promise:i,request:t},!0)}function WebMapServiceImageryProvider(e){if(defined((e=defaultValue(e,defaultValue.EMPTY_OBJECT)).times)&&!defined(e.clock))throw new DeveloperError("options.times was specified, so options.clock is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=Resource.createIfNeeded(e.url),i=t.clone();t.setQueryParameters(WebMapServiceImageryProvider.DefaultParameters,!0),i.setQueryParameters(WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters,!0),defined(e.parameters)&&t.setQueryParameters(objectToLowercase(e.parameters)),defined(e.getFeatureInfoParameters)&&i.setQueryParameters(objectToLowercase(e.getFeatureInfoParameters));var a=this;this._reload=void 0,defined(e.times)&&(this._timeDynamicImagery=new TimeDynamicImagery({clock:e.clock,times:e.times,requestImageFunction:function(e,t,i,r,n){return requestImage$1(a,e,t,i,r,n)},reloadFunction:function(){defined(a._reload)&&a._reload()}}));var r={};r.layers=e.layers,r.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",r.width="{width}",r.height="{height}",1.3<=parseFloat(t.queryParameters.version)?r.crs=defaultValue(e.crs,e.tilingScheme&&e.tilingScheme.projection instanceof WebMercatorProjection?"EPSG:3857":"CRS:84"):r.srs=defaultValue(e.srs,e.tilingScheme&&e.tilingScheme.projection instanceof WebMercatorProjection?"EPSG:3857":"EPSG:4326"),t.setQueryParameters(r,!0),i.setQueryParameters(r,!0);r={query_layers:e.layers,info_format:"{format}"};1.3<=parseFloat(i.queryParameters.version)?(r.i="{i}",r.j="{j}"):(r.x="{i}",r.y="{j}"),i.setQueryParameters(r,!0),this._resource=t,this._pickFeaturesResource=i,this._layers=e.layers,this._tileProvider=new UrlTemplateImageryProvider({url:t,pickFeaturesUrl:i,tilingScheme:defaultValue(e.tilingScheme,new GeographicTilingScheme({ellipsoid:e.ellipsoid})),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:defaultValue(e.getFeatureInfoFormats,WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats),enablePickFeatures:e.enablePickFeatures})}function requestImage$1(e,t,i,r,n,a){a=defined(a)?a.data:void 0,e=e._tileProvider;return defined(a)&&e._resource.setQueryParameters(a),e.requestImage(t,i,r,n)}function pickFeatures(e,t,i,r,n,a,o){o=defined(o)?o.data:void 0,e=e._tileProvider;return defined(o)&&e._pickFeaturesResource.setQueryParameters(o),e.pickFeatures(t,i,r,n,a)}function objectToLowercase(e){var t,i={};for(t in e)e.hasOwnProperty(t)&&(i[t.toLowerCase()]=e[t]);return i}Object.defineProperties(TimeDynamicImagery.prototype,{clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}}),TimeDynamicImagery.prototype.getFromCache=function(e,t,i,r){var n,a,t=getKey(e,t,i),i=this._tileCache[this._currentIntervalIndex];return defined(i)&&defined(i[t])&&(a=(n=i[t]).promise.otherwise(function(e){throw r.state=n.request.state,e}),delete i[t]),a},TimeDynamicImagery.prototype.checkApproachingInterval=function(e,t,i,r){e=getKey(e,t,i),t=this._tilesRequestedForInterval,i=getApproachingInterval(this),r={key:e,priorityFunction:r.priorityFunction};defined(i)&&addToCache(this,r,i)||t.push(r),512<=t.length&&t.splice(0,256)},TimeDynamicImagery.prototype._clockOnTick=function(e){var t=e.currentTime,e=this._times.indexOf(t),t=this._currentIntervalIndex;if(e!==t){var i,r=this._tileCache[t];for(i in r)r.hasOwnProperty(i)&&r[i].request.cancel();return delete this._tileCache[t],this._tilesRequestedForInterval=[],this._currentIntervalIndex=e,void this._reloadFunction()}var n=getApproachingInterval(this);if(defined(n))for(var a=this._tilesRequestedForInterval,o=!0;o&&0!==a.length;){var s=a.pop();(o=addToCache(this,s,n))||a.push(s)}},Object.defineProperties(WebMapServiceImageryProvider.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},ready:{get:function(){return this._tileProvider.ready}},readyPromise:{get:function(){return this._tileProvider.readyPromise}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}}}),WebMapServiceImageryProvider.prototype.getTileCredits=function(e,t,i){return this._tileProvider.getTileCredits(e,t,i)},WebMapServiceImageryProvider.prototype.requestImage=function(e,t,i,r){var n,a,o=this._timeDynamicImagery;return defined(o)&&(a=o.currentInterval,n=o.getFromCache(e,t,i,r)),defined(n)||(n=requestImage$1(this,e,t,i,r,a)),defined(n)&&defined(o)&&o.checkApproachingInterval(e,t,i,r),n},WebMapServiceImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){var a=this._timeDynamicImagery;return pickFeatures(this,e,t,i,r,n,defined(a)?a.currentInterval:void 0)},WebMapServiceImageryProvider.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"}),WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"}),WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new GetFeatureInfoFormat("json","application/json")),Object.freeze(new GetFeatureInfoFormat("xml","text/xml")),Object.freeze(new GetFeatureInfoFormat("text","text/html"))]);var defaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function WebMapTileServiceImageryProvider(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t,i=Resource.createIfNeeded(e.url),r=e.style,n=e.tileMatrixSetID;0<=i.url.indexOf("{")?(t={style:r,Style:r,TileMatrixSet:n},i.setTemplateValues(t),this._useKvp=!1):(i.setQueryParameters(defaultParameters),this._useKvp=!0),this._resource=i,this._layer=e.layer,this._style=r,this._tileMatrixSetID=n,this._tileMatrixLabels=e.tileMatrixLabels,this._format=defaultValue(e.format,"image/jpeg"),this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=defined(e.tilingScheme)?e.tilingScheme:new WebMercatorTilingScheme({ellipsoid:e.ellipsoid}),this._tileWidth=defaultValue(e.tileWidth,256),this._tileHeight=defaultValue(e.tileHeight,256),this._minimumLevel=defaultValue(e.minimumLevel,0),this._maximumLevel=e.maximumLevel,this._rectangle=defaultValue(e.rectangle,this._tilingScheme.rectangle),this._dimensions=e.dimensions;var a=this;this._reload=void 0,defined(e.times)&&(this._timeDynamicImagery=new TimeDynamicImagery({clock:e.clock,times:e.times,requestImageFunction:function(e,t,i,r,n){return requestImage(a,e,t,i,r,n)},reloadFunction:function(){defined(a._reload)&&a._reload()}})),this._readyPromise=when.resolve(!0);r=this._tilingScheme.positionToTileXY(Rectangle.southwest(this._rectangle),this._minimumLevel),n=this._tilingScheme.positionToTileXY(Rectangle.northeast(this._rectangle),this._minimumLevel);Math.abs(n.x-r.x),Math.abs(n.y-r.y),this._errorEvent=new Event;r=e.credit;this._credit="string"==typeof r?new Credit(r):r,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():defined(this._subdomains)&&0<this._subdomains.length?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function requestImage(e,t,i,r,n,a){var o,s=e._tileMatrixLabels,l=defined(s)?s[r]:r.toString(),c=e._subdomains,s=e._dimensions,a=defined(a)?a.data:void 0;return e._useKvp?((o={}).tilematrix=l,o.layer=e._layer,o.style=e._style,o.tilerow=i,o.tilecol=t,o.tilematrixset=e._tileMatrixSetID,o.format=e._format,defined(s)&&(o=combine$2(o,s)),defined(a)&&(o=combine$2(o,a)),o=e._resource.getDerivedResource({queryParameters:o,request:n})):(c={TileMatrix:l,TileRow:i.toString(),TileCol:t.toString(),s:c[(t+i+r)%c.length]},(o=e._resource.getDerivedResource({request:n})).setTemplateValues(c),defined(s)&&o.setTemplateValues(s),defined(a)&&o.setTemplateValues(a)),ImageryProvider.loadImage(e,o)}function createFactory(t){return function(e){return new t(e)}}Object.defineProperties(WebMapTileServiceImageryProvider.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},format:{get:function(){return this._format}},ready:{value:!0},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,defined(this._reload)&&this._reload())}}}),WebMapTileServiceImageryProvider.prototype.getTileCredits=function(e,t,i){},WebMapTileServiceImageryProvider.prototype.requestImage=function(e,t,i,r){var n,a,o=this._timeDynamicImagery;return defined(o)&&(a=o.currentInterval,n=o.getFromCache(e,t,i,r)),defined(n)||(n=requestImage(this,e,t,i,r,a)),defined(n)&&defined(o)&&o.checkApproachingInterval(e,t,i,r),n},WebMapTileServiceImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){};var ImageryProviderMapping={ARCGIS_MAPSERVER:createFactory(ArcGisMapServerImageryProvider),BING:createFactory(BingMapsImageryProvider),GOOGLE_EARTH:createFactory(GoogleEarthEnterpriseMapsProvider),MAPBOX:createFactory(MapboxImageryProvider),SINGLE_TILE:createFactory(SingleTileImageryProvider),TMS:createFactory(TileMapServiceImageryProvider),URL_TEMPLATE:createFactory(UrlTemplateImageryProvider),WMS:createFactory(WebMapServiceImageryProvider),WMTS:createFactory(WebMapTileServiceImageryProvider)};function IonImageryProvider(e){var r=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).assetId;this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this._ready=!1,this._tileCredits=void 0,this._errorEvent=new Event;var n=this,a=IonResource._createEndpointResource(r,e),t=e.assetId.toString()+e.accessToken+e.server,e=IonImageryProvider._endpointCache[t];defined(e)||(e=a.fetchJson(),IonImageryProvider._endpointCache[t]=e),this._readyPromise=e.then(function(e){if("IMAGERY"!==e.type)return when.reject(new RuntimeError("Cesium ion asset "+r+" is not an imagery asset."));var t=e.externalType;if(defined(t)){var i=ImageryProviderMapping[t];if(!defined(i))return when.reject(new RuntimeError("Unrecognized Cesium ion imagery type: "+t));i=i(e.options)}else i=new TileMapServiceImageryProvider({url:new IonResource(e,a)});return n._tileCredits=IonResource.getCreditsFromEndpoint(e,a),i.errorEvent.addEventListener(function(e){(e.provider=n)._errorEvent.raiseEvent(e)}),(n._imageryProvider=i).readyPromise.then(function(){return n._ready=!0})})}Object.defineProperties(IonImageryProvider.prototype,{ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel},proxy:{get:function(){}}}}),IonImageryProvider.prototype.getTileCredits=function(e,t,i){i=this._imageryProvider.getTileCredits(e,t,i);return defined(i)?this._tileCredits.concat(i):this._tileCredits},IonImageryProvider.prototype.requestImage=function(e,t,i,r){return this._imageryProvider.requestImage(e,t,i,r)},IonImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){return this._imageryProvider.pickFeatures(e,t,i,r,n)},IonImageryProvider._endpointCache={};var IonWorldImageryStyle={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},IonWorldImageryStyle$1=Object.freeze(IonWorldImageryStyle);function createWorldImagery(e){return e=defaultValue(e,defaultValue.EMPTY_OBJECT),new IonImageryProvider({assetId:defaultValue(e.style,IonWorldImageryStyle$1.AERIAL)})}var mobileWidth=576,lightboxHeight=100,textColor="#ffffff",highlightColor$1="#48b";function contains(e,t){for(var i=e.length,r=0;r<i;r++){var n=e[r];if(Credit.equals(n,t))return 1}}function swapCesiumCredit(e){var t=e._previousCesiumCredit,i=e._currentCesiumCredit;Credit.equals(i,t)||(defined(t)&&e._cesiumCreditContainer.removeChild(t.element),defined(i)&&e._cesiumCreditContainer.appendChild(i.element),e._previousCesiumCredit=i)}var delimiterClassName="cesium-credit-delimiter",defaultCredit$2;function createDelimiterElement(e){var t=document.createElement("span");return t.textContent=e,t.className=delimiterClassName,t}function createCreditElement(e,t){return defined(t)&&((t=document.createElement(t))._creditId=e._creditId,t.appendChild(e),e=t),e}function displayCredits(e,t,i,r){for(var n=e.childNodes,a=-1,o=0;o<t.length;++o){var s,l,c=t[o];defined(c)&&(a=o,defined(i)&&(a*=2,0<o&&(s=a-1,n.length<=s?e.appendChild(createDelimiterElement(i)):(l=n[s]).className!==delimiterClassName&&e.replaceChild(createDelimiterElement(i),l))),s=c.element,n.length<=a?e.appendChild(createCreditElement(s,r)):(l=n[a])._creditId!==c._id&&e.replaceChild(createCreditElement(s,r),l))}for(++a;a<n.length;)e.removeChild(n[a])}function styleLightboxContainer(e){var t=e._lightboxCredits,i=e.viewport.clientWidth,r=e.viewport.clientHeight;i!==e._lastViewportWidth&&(i<mobileWidth?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=Math.floor(.5*(r-t.clientHeight))+"px"),e._lastViewportWidth=i),mobileWidth<=i&&r!==e._lastViewportHeight&&(t.style.marginTop=Math.floor(.5*(r-t.clientHeight))+"px",e._lastViewportHeight=r)}function addStyle(e,t){var i,r=e+" {";for(i in t)t.hasOwnProperty(i)&&(r+=i+": "+t[i]+"; ");return r+=" }\n"}function appendCss(){var e="";e+=addStyle(".cesium-credit-lightbox-overlay",{display:"none","z-index":"1",position:"absolute",top:"0",left:"0",width:"100%",height:"100%","background-color":"rgba(80, 80, 80, 0.8)"}),e+=addStyle(".cesium-credit-lightbox",{"background-color":"#303336",color:textColor,position:"relative","min-height":lightboxHeight+"px",margin:"auto"}),e+=addStyle(".cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited",{color:textColor}),e+=addStyle(".cesium-credit-lightbox > ul > li a:hover",{color:highlightColor$1}),e+=addStyle(".cesium-credit-lightbox.cesium-credit-lightbox-expanded",{border:"1px solid #444","border-radius":"5px","max-width":"370px"}),e+=addStyle(".cesium-credit-lightbox.cesium-credit-lightbox-mobile",{height:"100%",width:"100%"}),e+=addStyle(".cesium-credit-lightbox-title",{padding:"20px 20px 0 20px"}),e+=addStyle(".cesium-credit-lightbox-close",{"font-size":"18pt",cursor:"pointer",position:"absolute",top:"0",right:"6px",color:textColor}),e+=addStyle(".cesium-credit-lightbox-close:hover",{color:highlightColor$1}),e+=addStyle(".cesium-credit-lightbox > ul",{margin:"0",padding:"12px 20px 12px 40px","font-size":"13px"}),e+=addStyle(".cesium-credit-lightbox > ul > li",{"padding-bottom":"6px"}),e+=addStyle(".cesium-credit-lightbox > ul > li *",{padding:"0",margin:"0"}),e+=addStyle(".cesium-credit-expand-link",{"padding-left":"5px",cursor:"pointer","text-decoration":"underline",color:textColor}),e+=addStyle(".cesium-credit-expand-link:hover",{color:highlightColor$1}),e+=addStyle(".cesium-credit-text",{color:textColor}),e+=addStyle(".cesium-credit-textContainer *, .cesium-credit-logoContainer *",{display:"inline"});var t=document.head,i=document.createElement("style");i.innerHTML=e,t.insertBefore(i,t.firstChild)}function CreditDisplay(e,t,i){var r=this;i=defaultValue(i,document.body);var n=document.createElement("div");n.className="cesium-credit-lightbox-overlay",i.appendChild(n);var a=document.createElement("div");function o(e){a.contains(e.target)||r.hideLightbox()}a.className="cesium-credit-lightbox",n.appendChild(a),n.addEventListener("click",o,!1);var s=document.createElement("div");s.className="cesium-credit-lightbox-title",s.textContent="Data provided by:",a.appendChild(s);var l=document.createElement("a");l.onclick=this.hideLightbox.bind(this),l.innerHTML="×",l.className="cesium-credit-lightbox-close",a.appendChild(l);var c=document.createElement("ul");a.appendChild(c);var u=document.createElement("div");u.className="cesium-credit-logoContainer",u.style.display="inline",e.appendChild(u);var d=document.createElement("div");d.className="cesium-credit-textContainer",d.style.display="inline",e.appendChild(d);s=document.createElement("a");s.className="cesium-credit-expand-link",s.onclick=this.showLightbox.bind(this),s.textContent="Data attribution",e.appendChild(s),appendCss();l=Credit.clone(CreditDisplay.cesiumCredit);this._delimiter=defaultValue(t," • "),this._screenContainer=d,this._cesiumCreditContainer=u,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=a,this._creditList=c,this._lightbox=n,this._hideLightbox=o,this._expandLink=s,this._expanded=!1,this._defaultCredits=[],this._cesiumCredit=l,this._previousCesiumCredit=void 0,this._currentCesiumCredit=l,this._currentFrameCredits={screenCredits:new AssociativeArray,lightboxCredits:new AssociativeArray},this._defaultCredit=void 0,this.viewport=i,this.container=e}function getDefaultCredit(){var e;return defined(defaultCredit$2)||(0!==(e=buildModuleUrl("Assets/Images/ion-credit.png")).indexOf("http://")&&0!==e.indexOf("https://")&&0!==e.indexOf("data:")&&(e=new URI(e).getPath()),defaultCredit$2=new Credit('<a href="https://cesium.com/" target="_blank"><img src="'+e+'" title="Cesium ion"/></a>',!0)),CreditDisplay._cesiumCreditInitialized||(CreditDisplay._cesiumCredit=defaultCredit$2,CreditDisplay._cesiumCreditInitialized=!0),defaultCredit$2}function DebugAppearance(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).attributeName,i=e.perInstanceAttribute;defined(i)||(i=!1);var r,n=defaultValue(e.glslDatatype,"vec3"),a="v_"+t;if("normal"===t||"tangent"===t||"bitangent"===t)r="vec4 getColor() { return vec4(("+a+" + vec3(1.0)) * 0.5, 1.0); }\n";else switch(n="st"===t?"vec2":n){case"float":r="vec4 getColor() { return vec4(vec3("+a+"), 1.0); }\n";break;case"vec2":r="vec4 getColor() { return vec4("+a+", 0.0, 1.0); }\n";break;case"vec3":r="vec4 getColor() { return vec4("+a+", 1.0); }\n";break;case"vec4":r="vec4 getColor() { return "+a+"; }\n"}var o="attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute float batchId;\n"+(i?"":"attribute "+n+" "+t+";\n")+"varying "+n+" "+a+";\nvoid main()\n{\nvec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);\n"+(i?a+" = czm_batchTable_"+t+"(batchId);\n":a+" = "+t+";\n")+"gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}",i="varying "+n+" "+a+";\n"+r+"\nvoid main()\n{\ngl_FragColor = getColor();\n}";this.material=void 0,this.translucent=defaultValue(e.translucent,!1),this._vertexShaderSource=defaultValue(e.vertexShaderSource,o),this._fragmentShaderSource=defaultValue(e.fragmentShaderSource,i),this._renderState=Appearance.getDefaultRenderState(!1,!1,e.renderState),this._closed=defaultValue(e.closed,!1),this._attributeName=t,this._glslDatatype=n}function DebugCameraPrimitive(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=defaultValue(e.color,Color.CYAN),this._updateOnChange=defaultValue(e.updateOnChange,!0),this.show=defaultValue(e.show,!0),this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}CreditDisplay.prototype.addCredit=function(e){if(e._isIon)return defined(this._defaultCredit)||(this._defaultCredit=Credit.clone(getDefaultCredit())),void(this._currentCesiumCredit=this._defaultCredit);(e.showOnScreen?this._currentFrameCredits.screenCredits:this._currentFrameCredits.lightboxCredits).set(e.id,e)},CreditDisplay.prototype.addDefaultCredit=function(e){var t=this._defaultCredits;contains(t,e)||t.push(e)},CreditDisplay.prototype.removeDefaultCredit=function(e){var t=this._defaultCredits,e=t.indexOf(e);-1!==e&&t.splice(e,1)},CreditDisplay.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0},CreditDisplay.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1},CreditDisplay.prototype.update=function(){this._expanded&&styleLightboxContainer(this)},CreditDisplay.prototype.beginFrame=function(){var e=this._currentFrameCredits,t=e.screenCredits;t.removeAll();for(var i=this._defaultCredits,r=0;r<i.length;++r){var n=i[r];t.set(n.id,n)}e.lightboxCredits.removeAll(),Credit.equals(CreditDisplay.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=Credit.clone(CreditDisplay.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit},CreditDisplay.prototype.endFrame=function(){var e=this._currentFrameCredits.screenCredits.values;displayCredits(this._screenContainer,e,this._delimiter,void 0);e=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=0<e.length?"inline":"none",displayCredits(this._creditList,e,void 0,"li"),swapCesiumCredit(this)},CreditDisplay.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),destroyObject(this)},CreditDisplay.prototype.isDestroyed=function(){return!1},CreditDisplay._cesiumCredit=void 0,CreditDisplay._cesiumCreditInitialized=!1,Object.defineProperties(CreditDisplay,{cesiumCredit:{get:function(){return getDefaultCredit(),CreditDisplay._cesiumCredit},set:function(e){CreditDisplay._cesiumCredit=e,CreditDisplay._cesiumCreditInitialized=!0}}}),Object.defineProperties(DebugAppearance.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}}),DebugAppearance.prototype.getFragmentShaderSource=Appearance.prototype.getFragmentShaderSource,DebugAppearance.prototype.isTranslucent=Appearance.prototype.isTranslucent,DebugAppearance.prototype.getRenderState=Appearance.prototype.getRenderState;var scratchRight$2=new Cartesian3,scratchRotation=new Matrix3,scratchOrientation=new Quaternion,scratchPerspective=new PerspectiveFrustum,scratchPerspectiveOffCenter=new PerspectiveOffCenterFrustum,scratchOrthographic=new OrthographicFrustum,scratchOrthographicOffCenter=new OrthographicOffCenterFrustum,scratchColor$1=new Color,scratchSplits$1=[1,1e5];function DebugInspector(){this._cachedShowFrustumsShaders={}}function getAttributeLocations(e){var t,i={},r=e.vertexAttributes;for(t in r)r.hasOwnProperty(t)&&(i[t]=r[t].index);return i}function createDebugShowFrustumsShaderProgram(e,t){var i=e.context,r=t,e=r.fragmentShaderSource.clone(),n=[];e.sources=e.sources.map(function(e){e=ShaderSource.replaceMain(e,"czm_Debug_main");for(var t,i=/gl_FragData\[(\d+)\]/g;null!==(t=i.exec(e));)-1===n.indexOf(t[1])&&n.push(t[1]);return e});var a,o=n.length,s="";if(s+="uniform vec3 debugShowCommandsColor;\n",s+="uniform vec3 debugShowFrustumsColor;\n",s+="void main() \n{ \n czm_Debug_main(); \n",0<o)for(a=0;a<o;++a)s+=" gl_FragData["+n[a]+"].rgb *= debugShowCommandsColor;\n",s+=" gl_FragData["+n[a]+"].rgb *= debugShowFrustumsColor;\n";else s+=" gl_FragColor.rgb *= debugShowCommandsColor;\n",s+=" gl_FragColor.rgb *= debugShowFrustumsColor;\n";s+="}",e.sources.push(s);t=getAttributeLocations(r);return ShaderProgram.fromCache({context:i,vertexShaderSource:r.vertexShaderSource,fragmentShaderSource:e,attributeLocations:t})}DebugCameraPrimitive.prototype.update=function(e){if(this.show){var t,i,r=this._planesPrimitives,n=this._outlinePrimitives;if(this._updateOnChange){for(i=r.length,t=0;t<i;++t)n[t]=n[t]&&n[t].destroy(),r[t]=r[t]&&r[t].destroy();r.length=0,n.length=0}if(0===r.length){var a=this._camera,o=a.frustum,s=o instanceof PerspectiveFrustum?scratchPerspective:o instanceof PerspectiveOffCenterFrustum?scratchPerspectiveOffCenter:o instanceof OrthographicFrustum?scratchOrthographic:scratchOrthographicOffCenter;s=o.clone(s);var l=this._frustumSplits,c=!defined(l)||l.length<=1?((l=scratchSplits$1)[0]=this._camera.frustum.near,l[1]=this._camera.frustum.far,1):l.length-1,u=a.positionWC,d=a.directionWC,h=a.upWC,o=a.rightWC,o=Cartesian3.negate(o,scratchRight$2),a=scratchRotation;Matrix3.setColumn(a,0,o,a),Matrix3.setColumn(a,1,h,a),Matrix3.setColumn(a,2,d,a);var p=Quaternion.fromRotationMatrix(a,scratchOrientation);for(r.length=n.length=c,t=0;t<c;++t)s.near=l[t],s.far=l[t+1],r[t]=new Primitive({geometryInstances:new GeometryInstance({geometry:new FrustumGeometry({origin:u,orientation:p,frustum:s,_drawNearPlane:0===t}),attributes:{color:ColorGeometryInstanceAttribute.fromColor(Color.fromAlpha(this._color,.1,scratchColor$1))},id:this.id,pickPrimitive:this}),appearance:new PerInstanceColorAppearance({translucent:!0,flat:!0}),asynchronous:!1}),n[t]=new Primitive({geometryInstances:new GeometryInstance({geometry:new FrustumOutlineGeometry({origin:u,orientation:p,frustum:s,_drawNearPlane:0===t}),attributes:{color:ColorGeometryInstanceAttribute.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new PerInstanceColorAppearance({translucent:!1,flat:!0}),asynchronous:!1})}for(i=r.length,t=0;t<i;++t)n[t].update(e),r[t].update(e)}},DebugCameraPrimitive.prototype.isDestroyed=function(){return!1},DebugCameraPrimitive.prototype.destroy=function(){for(var e=this._planesPrimitives.length,t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return destroyObject(this)};var scratchFrustumColor=new Color;function createDebugShowFrustumsUniformMap(e,t){var i=defined(t.uniformMap)?t.uniformMap:{};return defined(i.debugShowCommandsColor)||defined(i.debugShowFrustumsColor)||(i.debugShowCommandsColor=function(){return e.debugShowCommands?(defined(t._debugColor)||(t._debugColor=Color.fromRandom()),t._debugColor):Color.WHITE},i.debugShowFrustumsColor=function(){return e.debugShowFrustums?(scratchFrustumColor.red=1&t.debugOverlappingFrustums?1:0,scratchFrustumColor.green=2&t.debugOverlappingFrustums?1:0,scratchFrustumColor.blue=4&t.debugOverlappingFrustums?1:0,scratchFrustumColor.alpha=1,scratchFrustumColor):Color.WHITE}),i}var scratchShowFrustumCommand=new DrawCommand;function DebugModelMatrixPrimitive(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.length=defaultValue(e.length,1e7),this._length=void 0,this.width=defaultValue(e.width,2),this._width=void 0,this.show=defaultValue(e.show,!0),this.modelMatrix=Matrix4.clone(defaultValue(e.modelMatrix,Matrix4.IDENTITY)),this._modelMatrix=new Matrix4,this.id=e.id,this._id=void 0,this._primitive=void 0}DebugInspector.prototype.executeDebugShowFrustumsCommand=function(e,t,i){var r=t.shaderProgram.id,n=this._cachedShowFrustumsShaders[r];defined(n)||(n=createDebugShowFrustumsShaderProgram(e,t.shaderProgram),this._cachedShowFrustumsShaders[r]=n);r=DrawCommand.shallowClone(t,scratchShowFrustumCommand);r.shaderProgram=n,r.uniformMap=createDebugShowFrustumsUniformMap(e,t),r.execute(e.context,i)},DebugModelMatrixPrimitive.prototype.update=function(e){var t,i,r;this.show&&(defined(this._primitive)&&Matrix4.equals(this._modelMatrix,this.modelMatrix)&&this._length===this.length&&this._width===this.width&&this._id===this.id||(this._modelMatrix=Matrix4.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,defined(this._primitive)&&this._primitive.destroy(),0===this.modelMatrix[12]&&0===this.modelMatrix[13]&&0===this.modelMatrix[14]&&(this.modelMatrix[14]=.01),t=new GeometryInstance({geometry:new PolylineGeometry({positions:[Cartesian3.ZERO,Cartesian3.UNIT_X],width:this.width,vertexFormat:PolylineColorAppearance.VERTEX_FORMAT,colors:[Color.RED,Color.RED],arcType:ArcType$1.NONE}),modelMatrix:Matrix4.multiplyByUniformScale(this.modelMatrix,this.length,new Matrix4),id:this.id,pickPrimitive:this}),i=new GeometryInstance({geometry:new PolylineGeometry({positions:[Cartesian3.ZERO,Cartesian3.UNIT_Y],width:this.width,vertexFormat:PolylineColorAppearance.VERTEX_FORMAT,colors:[Color.GREEN,Color.GREEN],arcType:ArcType$1.NONE}),modelMatrix:Matrix4.multiplyByUniformScale(this.modelMatrix,this.length,new Matrix4),id:this.id,pickPrimitive:this}),r=new GeometryInstance({geometry:new PolylineGeometry({positions:[Cartesian3.ZERO,Cartesian3.UNIT_Z],width:this.width,vertexFormat:PolylineColorAppearance.VERTEX_FORMAT,colors:[Color.BLUE,Color.BLUE],arcType:ArcType$1.NONE}),modelMatrix:Matrix4.multiplyByUniformScale(this.modelMatrix,this.length,new Matrix4),id:this.id,pickPrimitive:this}),this._primitive=new Primitive({geometryInstances:[t,i,r],appearance:new PolylineColorAppearance,asynchronous:!1})),this._primitive.update(e))},DebugModelMatrixPrimitive.prototype.isDestroyed=function(){return!1},DebugModelMatrixPrimitive.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),destroyObject(this)};var DepthPlaneFS="varying vec4 positionEC;\nvoid main()\n{\nvec3 position;\nvec3 direction;\nif (czm_orthographicIn3D == 1.0)\n{\nvec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw;\nvec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y);\nvec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x);\nposition = vec3(mix(minPlane, maxPlane, uv), 0.0);\ndirection = vec3(0.0, 0.0, -1.0);\n}\nelse\n{\nposition = vec3(0.0);\ndirection = normalize(positionEC.xyz);\n}\nczm_ray ray = czm_ray(position, direction);\nvec3 ellipsoid_center = czm_view[3].xyz;\nczm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\nif (!czm_isEmpty(intersection))\n{\ngl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\n}\nelse\n{\ndiscard;\n}\nczm_writeLogDepth();\n}\n",DepthPlaneVS="attribute vec4 position;\nvarying vec4 positionEC;\nvoid main()\n{\npositionEC = czm_modelView * position;\ngl_Position = czm_projection * positionEC;\nczm_vertexLogDepth();\n}\n";function DepthPlane(){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1}var depthQuadScratch=FeatureDetection.supportsTypedArrays()?new Float32Array(12):[],scratchCartesian1$1=new Cartesian3,scratchCartesian2$1=new Cartesian3,scratchCartesian3=new Cartesian3,scratchCartesian4$1=new Cartesian3,scratchCartesian5=new Cartesian3;function computeDepthQuad(e,t){var i,r,n=e.radii,a=t.camera;s=a.frustum instanceof OrthographicFrustum?(i=Cartesian3.ZERO,r=a.rightWC,a.upWC):(o=a.positionWC,t=Cartesian3.multiplyComponents(e.oneOverRadii,o,scratchCartesian1$1),a=Cartesian3.normalize(t,scratchCartesian2$1),e=Cartesian3.normalize(Cartesian3.cross(Cartesian3.UNIT_Z,t,scratchCartesian3),scratchCartesian3),s=Cartesian3.normalize(Cartesian3.cross(a,e,scratchCartesian4$1),scratchCartesian4$1),o=Cartesian3.magnitude(t),t=Math.sqrt(o*o-1),i=Cartesian3.multiplyByScalar(a,1/o,scratchCartesian1$1),o=t/o,r=Cartesian3.multiplyByScalar(e,o,scratchCartesian2$1),Cartesian3.multiplyByScalar(s,o,scratchCartesian3));var o=Cartesian3.add(i,s,scratchCartesian5);Cartesian3.subtract(o,r,o),Cartesian3.multiplyComponents(n,o,o),Cartesian3.pack(o,depthQuadScratch,0);o=Cartesian3.subtract(i,s,scratchCartesian5);Cartesian3.subtract(o,r,o),Cartesian3.multiplyComponents(n,o,o),Cartesian3.pack(o,depthQuadScratch,3);o=Cartesian3.add(i,s,scratchCartesian5);Cartesian3.add(o,r,o),Cartesian3.multiplyComponents(n,o,o),Cartesian3.pack(o,depthQuadScratch,6);var s=Cartesian3.subtract(i,s,scratchCartesian5);return Cartesian3.add(s,r,s),Cartesian3.multiplyComponents(n,s,s),Cartesian3.pack(s,depthQuadScratch,9),depthQuadScratch}function DerivedCommand(){}DepthPlane.prototype.update=function(e){var t,i,r,n,a;this._mode=e.mode,e.mode===SceneMode$1.SCENE3D&&(t=e.context,i=e.mapProjection.ellipsoid,r=e.useLogDepth,defined(this._command)||(this._rs=RenderState.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new DrawCommand({renderState:this._rs,boundingVolume:new BoundingSphere(Cartesian3.ZERO,i.maximumRadius),pass:Pass$1.OPAQUE,owner:this})),defined(this._sp)&&this._useLogDepth===r||(this._useLogDepth=r,n=new ShaderSource({sources:[DepthPlaneVS]}),a=new ShaderSource({sources:[DepthPlaneFS]}),r&&(a.sources.push("#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n"),a.defines.push("LOG_DEPTH"),n.defines.push("LOG_DEPTH")),this._sp=ShaderProgram.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:n,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp),e=computeDepthQuad(i,e),defined(this._va)?this._va.getAttribute(0).vertexBuffer.copyFromArrayView(e):(e=new Geometry({attributes:{position:new GeometryAttribute({componentDatatype:ComponentDatatype$1.FLOAT,componentsPerAttribute:3,values:e})},indices:[0,1,2,2,1,3],primitiveType:PrimitiveType$1.TRIANGLES}),this._va=VertexArray.fromGeometry({context:t,geometry:e,attributeLocations:{position:0},bufferUsage:BufferUsage$1.DYNAMIC_DRAW}),this._command.vertexArray=this._va))},DepthPlane.prototype.execute=function(e,t){this._mode===SceneMode$1.SCENE3D&&this._command.execute(e,t)},DepthPlane.prototype.isDestroyed=function(){return!1},DepthPlane.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var fragDepthRegex=/\bgl_FragDepthEXT\b/,discardRegex=/\bdiscard\b/;function getDepthOnlyShaderProgram$1(e,t){var i=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(!defined(i)){for(var r=t._attributeLocations,n=t.fragmentShaderSource,a=!1,o=n.sources,s=o.length,l=0;l<s;++l)if(fragDepthRegex.test(o[l])||discardRegex.test(o[l])){a=!0;break}var c=!1,u=n.defines,s=u.length;for(l=0;l<s;++l)if("LOG_DEPTH"===u[l]){c=!0;break}a||c?!a&&c&&(n=new ShaderSource({defines:["LOG_DEPTH"],sources:["#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\nvoid main() \n{ \n gl_FragColor = vec4(1.0); \n czm_writeLogDepth(); \n} \n"]})):n=new ShaderSource({sources:["void main() \n{ \n gl_FragColor = vec4(1.0); \n} \n"]}),i=e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:n,attributeLocations:r})}return i}function getDepthOnlyRenderState(e,t){if(!t)return null;var i=e._depthOnlyRenderStateCache,r=i[t.id];return defined(r)||((e=RenderState.getState(t)).depthMask=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1},r=RenderState.fromCache(e),i[t.id]=r),r}DerivedCommand.createDepthOnlyDerivedCommand=function(e,t,i,r){var n,a;return defined(r)||(r={}),defined(r.depthOnlyCommand)&&(n=r.depthOnlyCommand.shaderProgram,a=r.depthOnlyCommand.renderState),r.depthOnlyCommand=DrawCommand.shallowClone(t,r.depthOnlyCommand),defined(n)&&r.shaderProgramId===t.shaderProgram.id?(r.depthOnlyCommand.shaderProgram=n,r.depthOnlyCommand.renderState=a):(r.depthOnlyCommand.shaderProgram=getDepthOnlyShaderProgram$1(i,t.shaderProgram),r.depthOnlyCommand.renderState=getDepthOnlyRenderState(e,t.renderState),r.shaderProgramId=t.shaderProgram.id),r};var writeLogDepthRegex=/\s+czm_writeLogDepth\(/,vertexlogDepthRegex=/\s+czm_vertexLogDepth\(/,extensionRegex=/\s*#extension\s+GL_EXT_frag_depth\s*:\s*enable/;function getLogDepthShaderProgram(e,t){var i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(!defined(i)){var r=t._attributeLocations,n=t.vertexShaderSource.clone(),a=t.fragmentShaderSource.clone();n.defines=defined(n.defines)?n.defines.slice(0):[],n.defines.push("LOG_DEPTH"),a.defines=defined(a.defines)?a.defines.slice(0):[],a.defines.push("LOG_DEPTH");for(var o=!1,s=n.sources,l=s.length,c=0;c<l;++c)if(vertexlogDepthRegex.test(s[c])){o=!0;break}if(!o){for(c=0;c<l;++c)s[c]=ShaderSource.replaceMain(s[c],"czm_log_depth_main");s.push("\n\nvoid main() \n{ \n czm_log_depth_main(); \n czm_vertexLogDepth(); \n} \n")}for(l=(s=a.sources).length,o=!1,c=0;c<l;++c)writeLogDepthRegex.test(s[c])&&(o=!0);-1!==a.defines.indexOf("LOG_DEPTH_WRITE")&&(o=!0);var u=!0;for(c=0;c<l;++c)extensionRegex.test(s[c])&&(u=!1);var d="";if(u&&(d+="#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n"),!o){for(c=0;c<l;c++)s[c]=ShaderSource.replaceMain(s[c],"czm_log_depth_main");d+="\nvoid main() \n{ \n czm_log_depth_main(); \n czm_writeLogDepth(); \n} \n"}s.push(d),i=e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:n,fragmentShaderSource:a,attributeLocations:r})}return i}function getPickShaderProgram$1(e,t,i){var r=e.shaderCache.getDerivedShaderProgram(t,"pick");if(!defined(r)){for(var n=t._attributeLocations,a=t.fragmentShaderSource,o=a.sources,s=o.length,i="void main() \n{ \n czm_non_pick_main(); \n if (gl_FragColor.a == 0.0) { \n discard; \n } \n gl_FragColor = "+i+"; \n} \n",l=new Array(s+1),c=0;c<s;++c)l[c]=ShaderSource.replaceMain(o[c],"czm_non_pick_main");l[s]=i,a=new ShaderSource({sources:l,defines:a.defines}),r=e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:n})}return r}function getPickRenderState(e,t){var i=e.picking.pickRenderStateCache,r=i[t.id];return defined(r)||((e=RenderState.getState(t)).blending.enabled=!1,e.depthMask=!0,r=RenderState.fromCache(e),i[t.id]=r),r}function getHdrShaderProgram(e,t){var i,r,n,a=e.shaderCache.getDerivedShaderProgram(t,"HDR");return defined(a)||(i=t._attributeLocations,r=t.vertexShaderSource.clone(),n=t.fragmentShaderSource.clone(),r.defines=defined(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),n.defines=defined(n.defines)?n.defines.slice(0):[],n.defines.push("HDR"),a=e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:r,fragmentShaderSource:n,attributeLocations:i})),a}function DeviceOrientationCameraController(e){this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;var i=this;function t(e){var t=e.alpha;if(!defined(t))return i._alpha=void 0,i._beta=void 0,void(i._gamma=void 0);i._alpha=CesiumMath.toRadians(t),i._beta=CesiumMath.toRadians(e.beta),i._gamma=CesiumMath.toRadians(e.gamma)}window.addEventListener("deviceorientation",t,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",t,!1)}}DerivedCommand.createLogDepthCommand=function(e,t,i){var r;return defined(i)||(i={}),defined(i.command)&&(r=i.command.shaderProgram),i.command=DrawCommand.shallowClone(e,i.command),defined(r)&&i.shaderProgramId===e.shaderProgram.id?i.command.shaderProgram=r:(i.command.shaderProgram=getLogDepthShaderProgram(t,e.shaderProgram),i.shaderProgramId=e.shaderProgram.id),i},DerivedCommand.createPickDerivedCommand=function(e,t,i,r){var n,a;return defined(r)||(r={}),defined(r.pickCommand)&&(n=r.pickCommand.shaderProgram,a=r.pickCommand.renderState),r.pickCommand=DrawCommand.shallowClone(t,r.pickCommand),defined(n)&&r.shaderProgramId===t.shaderProgram.id?(r.pickCommand.shaderProgram=n,r.pickCommand.renderState=a):(r.pickCommand.shaderProgram=getPickShaderProgram$1(i,t.shaderProgram,t.pickId),r.pickCommand.renderState=getPickRenderState(e,t.renderState),r.shaderProgramId=t.shaderProgram.id),r},DerivedCommand.createHdrCommand=function(e,t,i){var r;return defined(i)||(i={}),defined(i.command)&&(r=i.command.shaderProgram),i.command=DrawCommand.shallowClone(e,i.command),defined(r)&&i.shaderProgramId===e.shaderProgram.id?i.command.shaderProgram=r:(i.command.shaderProgram=getHdrShaderProgram(t,e.shaderProgram),i.shaderProgramId=e.shaderProgram.id),i};var scratchQuaternion1=new Quaternion,scratchQuaternion2=new Quaternion,scratchMatrix3=new Matrix3;function rotate(e,t,i,r){var n=e.direction,a=e.right,e=e.up,i=Quaternion.fromAxisAngle(n,i,scratchQuaternion2),r=Quaternion.fromAxisAngle(a,r,scratchQuaternion1),r=Quaternion.multiply(r,i,r),t=Quaternion.fromAxisAngle(e,t,scratchQuaternion2);Quaternion.multiply(t,r,r);r=Matrix3.fromQuaternion(r,scratchMatrix3);Matrix3.multiplyByVector(r,a,a),Matrix3.multiplyByVector(r,e,e),Matrix3.multiplyByVector(r,n,n)}function DirectionalLight(e){this.direction=Cartesian3.clone(e.direction),this.color=Color.clone(defaultValue(e.color,Color.WHITE)),this.intensity=defaultValue(e.intensity,1)}DeviceOrientationCameraController.prototype.update=function(){var e,t,i;defined(this._alpha)&&(defined(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma),e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,i=this._lastGamma-this._gamma,rotate(this._scene.camera,-e,t,i),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma)},DeviceOrientationCameraController.prototype.isDestroyed=function(){return!1},DeviceOrientationCameraController.prototype.destroy=function(){return this._removeListener(),destroyObject(this)};var EllipsoidFS="#ifdef WRITE_DEPTH\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n#endif\nuniform vec3 u_radii;\nuniform vec3 u_oneOverEllipsoidRadiiSquared;\nvarying vec3 v_positionEC;\nvec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)\n{\nvec3 positionEC = czm_pointAlongRay(ray, intersection);\nvec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;\nvec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));\nvec3 sphericalNormal = normalize(positionMC / u_radii);\nvec3 normalMC = geodeticNormal * side;\nvec3 normalEC = normalize(czm_normal * normalMC);\nvec2 st = czm_ellipsoidWgs84TextureCoordinates(sphericalNormal);\nvec3 positionToEyeEC = -positionEC;\nczm_materialInput materialInput;\nmaterialInput.s = st.s;\nmaterialInput.st = st;\nmaterialInput.str = (positionMC + u_radii) / u_radii;\nmaterialInput.normalEC = normalEC;\nmaterialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\nmaterialInput.positionToEyeEC = positionToEyeEC;\nczm_material material = czm_getMaterial(materialInput);\n#ifdef ONLY_SUN_LIGHTING\nreturn czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);\n#else\nreturn czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\nvoid main()\n{\nfloat maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;\nvec3 direction = normalize(v_positionEC);\nvec3 ellipsoidCenter = czm_modelView[3].xyz;\nfloat t1 = -1.0;\nfloat t2 = -1.0;\nfloat b = -2.0 * dot(direction, ellipsoidCenter);\nfloat c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;\nfloat discriminant = b * b - 4.0 * c;\nif (discriminant >= 0.0) {\nt1 = (-b - sqrt(discriminant)) * 0.5;\nt2 = (-b + sqrt(discriminant)) * 0.5;\n}\nif (t1 < 0.0 && t2 < 0.0) {\ndiscard;\n}\nfloat t = min(t1, t2);\nif (t < 0.0) {\nt = 0.0;\n}\nczm_ray ray = czm_ray(t * direction, direction);\nvec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);\nczm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);\nif (czm_isEmpty(intersection))\n{\ndiscard;\n}\nvec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);\nvec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);\ngl_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);\ngl_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);\n#ifdef WRITE_DEPTH\n#ifdef GL_EXT_frag_depth\nt = (intersection.start != 0.0) ? intersection.start : intersection.stop;\nvec3 positionEC = czm_pointAlongRay(ray, t);\nvec4 positionCC = czm_projection * vec4(positionEC, 1.0);\n#ifdef LOG_DEPTH\nczm_writeLogDepth(1.0 + positionCC.w);\n#else\nfloat z = positionCC.z / positionCC.w;\nfloat n = czm_depthRange.near;\nfloat f = czm_depthRange.far;\ngl_FragDepthEXT = (z * (f - n) + f + n) * 0.5;\n#endif\n#endif\n#endif\n}\n",EllipsoidVS="attribute vec3 position;\nuniform vec3 u_radii;\nvarying vec3 v_positionEC;\nvoid main()\n{\nvec4 p = vec4(u_radii * position, 1.0);\nv_positionEC = (czm_modelView * p).xyz;\ngl_Position = czm_modelViewProjection * p;\ngl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);\nczm_vertexLogDepth();\n}\n",attributeLocations={position:0};function EllipsoidPrimitive(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.center=Cartesian3.clone(defaultValue(e.center,Cartesian3.ZERO)),this._center=new Cartesian3,this.radii=Cartesian3.clone(e.radii),this._radii=new Cartesian3,this._oneOverEllipsoidRadiiSquared=new Cartesian3,this._boundingSphere=new BoundingSphere,this.modelMatrix=Matrix4.clone(defaultValue(e.modelMatrix,Matrix4.IDENTITY)),this._modelMatrix=new Matrix4,this._computedModelMatrix=new Matrix4,this.show=defaultValue(e.show,!0),this.material=defaultValue(e.material,Material.fromType(Material.ColorType)),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=defaultValue(e.debugShowBoundingVolume,!1),this.onlySunLighting=defaultValue(e.onlySunLighting,!1),this._onlySunLighting=!1,this._depthTestEnabled=defaultValue(e.depthTestEnabled,!0),this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new DrawCommand({owner:defaultValue(e._owner,this)}),this._pickCommand=new DrawCommand({owner:defaultValue(e._owner,this),pickOnly:!0});var t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}function getVertexArray(e){if(defined(i=e.cache.ellipsoidPrimitive_vertexArray))return i;var t=BoxGeometry.createGeometry(BoxGeometry.fromDimensions({dimensions:new Cartesian3(2,2,2),vertexFormat:VertexFormat.POSITION_ONLY})),i=VertexArray.fromGeometry({context:e,geometry:t,attributeLocations:attributeLocations,bufferUsage:BufferUsage$1.STATIC_DRAW,interleave:!0});return e.cache.ellipsoidPrimitive_vertexArray=i}var logDepthExtension="#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n";EllipsoidPrimitive.prototype.update=function(e){var t,i,r,n,a,o,s,l,c;this.show&&e.mode===SceneMode$1.SCENE3D&&defined(this.center)&&defined(this.radii)&&(t=e.context,i=this.material.isTranslucent(),c=this._translucent!==i,defined(this._rs)&&!c||(this._translucent=i,this._rs=RenderState.fromCache({cull:{enabled:!0,face:CullFace$1.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!i&&t.fragmentDepth,blending:i?BlendingState$1.ALPHA_BLEND:void 0})),defined(this._va)||(this._va=getVertexArray(t)),o=!1,a=this.radii,Cartesian3.equals(this._radii,a)||(Cartesian3.clone(a,this._radii),(n=this._oneOverEllipsoidRadiiSquared).x=1/(a.x*a.x),n.y=1/(a.y*a.y),n.z=1/(a.z*a.z),o=!0),Matrix4.equals(this.modelMatrix,this._modelMatrix)&&Cartesian3.equals(this.center,this._center)||(Matrix4.clone(this.modelMatrix,this._modelMatrix),Cartesian3.clone(this.center,this._center),Matrix4.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(Cartesian3.clone(Cartesian3.ZERO,this._boundingSphere.center),this._boundingSphere.radius=Cartesian3.maximumComponent(a),BoundingSphere.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere)),r=this._material!==this.material,this._material=this.material,this._material.update(t),n=this.onlySunLighting!==this._onlySunLighting,this._onlySunLighting=this.onlySunLighting,o=e.useLogDepth,a=this._useLogDepth!==o,this._useLogDepth=o,o=this._colorCommand,(r||n||c||a)&&(s=new ShaderSource({sources:[EllipsoidVS]}),l=new ShaderSource({sources:[this.material.shaderSource,EllipsoidFS]}),this.onlySunLighting&&l.defines.push("ONLY_SUN_LIGHTING"),!i&&t.fragmentDepth&&l.defines.push("WRITE_DEPTH"),this._useLogDepth&&(s.defines.push("LOG_DEPTH"),l.defines.push("LOG_DEPTH"),l.sources.push(logDepthExtension)),this._sp=ShaderProgram.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:s,fragmentShaderSource:l,attributeLocations:attributeLocations}),o.vertexArray=this._va,o.renderState=this._rs,o.shaderProgram=this._sp,o.uniformMap=combine$2(this._uniforms,this.material._uniforms),o.executeInClosestFrustum=i),c=e.commandList,(e=e.passes).render&&(o.boundingVolume=this._boundingSphere,o.debugShowBoundingVolume=this.debugShowBoundingVolume,o.modelMatrix=this._computedModelMatrix,o.pass=i?Pass$1.TRANSLUCENT:Pass$1.OPAQUE,c.push(o)),e.pick&&(e=this._pickCommand,defined(this._pickId)&&this._id===this.id||(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(r||n||!defined(this._pickSP)||a)&&(s=new ShaderSource({sources:[EllipsoidVS]}),l=new ShaderSource({sources:[this.material.shaderSource,EllipsoidFS],pickColorQualifier:"uniform"}),this.onlySunLighting&&l.defines.push("ONLY_SUN_LIGHTING"),!i&&t.fragmentDepth&&l.defines.push("WRITE_DEPTH"),this._useLogDepth&&(s.defines.push("LOG_DEPTH"),l.defines.push("LOG_DEPTH"),l.sources.push(logDepthExtension)),this._pickSP=ShaderProgram.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:s,fragmentShaderSource:l,attributeLocations:attributeLocations}),e.vertexArray=this._va,e.renderState=this._rs,e.shaderProgram=this._pickSP,e.uniformMap=combine$2(combine$2(this._uniforms,this._pickUniforms),this.material._uniforms),e.executeInClosestFrustum=i),e.boundingVolume=this._boundingSphere,e.modelMatrix=this._computedModelMatrix,e.pass=i?Pass$1.TRANSLUCENT:Pass$1.OPAQUE,c.push(e)))},EllipsoidPrimitive.prototype.isDestroyed=function(){return!1},EllipsoidPrimitive.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),destroyObject(this)};var EllipsoidSurfaceAppearanceFS="varying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec2 v_st;\nvoid main()\n{\nczm_materialInput materialInput;\nvec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\n#ifdef FACE_FORWARD\nnormalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\nmaterialInput.s = v_st.s;\nmaterialInput.st = v_st;\nmaterialInput.str = vec3(v_st, 0.0);\nmaterialInput.normalEC = normalEC;\nmaterialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\nvec3 positionToEyeEC = -v_positionEC;\nmaterialInput.positionToEyeEC = positionToEyeEC;\nczm_material material = czm_getMaterial(materialInput);\n#ifdef FLAT\ngl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\ngl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n",EllipsoidSurfaceAppearanceVS="attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec2 st;\nattribute float batchId;\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec2 v_st;\nvoid main()\n{\nvec4 p = czm_computePosition();\nv_positionMC = position3DHigh + position3DLow;\nv_positionEC = (czm_modelViewRelativeToEye * p).xyz;\nv_st = st;\ngl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n";function EllipsoidSurfaceAppearance(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT);var t=defaultValue(e.translucent,!0),i=defaultValue(e.aboveGround,!1);this.material=defined(e.material)?e.material:Material.fromType(Material.ColorType),this.translucent=defaultValue(e.translucent,!0),this._vertexShaderSource=defaultValue(e.vertexShaderSource,EllipsoidSurfaceAppearanceVS),this._fragmentShaderSource=defaultValue(e.fragmentShaderSource,EllipsoidSurfaceAppearanceFS),this._renderState=Appearance.getDefaultRenderState(t,!i,e.renderState),this._closed=!1,this._flat=defaultValue(e.flat,!1),this._faceForward=defaultValue(e.faceForward,i),this._aboveGround=i}function Fog(){this.enabled=!0,this.density=2e-4,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}Object.defineProperties(EllipsoidSurfaceAppearance.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return EllipsoidSurfaceAppearance.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}}),EllipsoidSurfaceAppearance.VERTEX_FORMAT=VertexFormat.POSITION_AND_ST,EllipsoidSurfaceAppearance.prototype.getFragmentShaderSource=Appearance.prototype.getFragmentShaderSource,EllipsoidSurfaceAppearance.prototype.isTranslucent=Appearance.prototype.isTranslucent,EllipsoidSurfaceAppearance.prototype.getRenderState=Appearance.prototype.getRenderState;for(var heightsTable=[359.393,800.749,1275.6501,2151.1192,3141.7763,4777.5198,6281.2493,12364.307,15900.765,49889.0549,78026.8259,99260.7344,120036.3873,151011.0158,156091.1953,203849.3112,274866.9803,319916.3149,493552.0528,628733.5874],densityTable=[2e-5,2e-4,1e-4,7e-5,5e-5,4e-5,3e-5,19e-6,1e-5,85e-7,62e-7,58e-7,53e-7,52e-7,51e-7,42e-7,4e-6,34e-7,26e-7,22e-7],i$2=0;i$2<densityTable.length;++i$2)densityTable[i$2]*=1e6;for(var tableStartDensity=densityTable[1],tableEndDensity=densityTable[densityTable.length-1],j=0;j<densityTable.length;++j)densityTable[j]=(densityTable[j]-tableEndDensity)/(tableStartDensity-tableEndDensity);var tableLastIndex=0;function findInterval(e){var t,i=heightsTable,r=i.length;if(e<i[0])return tableLastIndex=0;if(e>i[r-1])return tableLastIndex=r-2;if(e>=i[tableLastIndex]){if(tableLastIndex+1<r&&e<i[tableLastIndex+1])return tableLastIndex;if(tableLastIndex+2<r&&e<i[tableLastIndex+2])return++tableLastIndex}else if(0<=tableLastIndex-1&&e>=i[tableLastIndex-1])return--tableLastIndex;for(t=0;t<r-2&&!(e>=i[t]&&e<i[t+1]);++t);return tableLastIndex=t}var scratchPositionNormal$1=new Cartesian3;function FrameRateMonitor(e){this._scene=e.scene,this.samplingWindow=defaultValue(e.samplingWindow,FrameRateMonitor.defaultSettings.samplingWindow),this.quietPeriod=defaultValue(e.quietPeriod,FrameRateMonitor.defaultSettings.quietPeriod),this.warmupPeriod=defaultValue(e.warmupPeriod,FrameRateMonitor.defaultSettings.warmupPeriod),this.minimumFrameRateDuringWarmup=defaultValue(e.minimumFrameRateDuringWarmup,FrameRateMonitor.defaultSettings.minimumFrameRateDuringWarmup),this.minimumFrameRateAfterWarmup=defaultValue(e.minimumFrameRateAfterWarmup,FrameRateMonitor.defaultSettings.minimumFrameRateAfterWarmup),this._lowFrameRate=new Event,this._nominalFrameRate=new Event,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;var i=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener(function(e,t){update(i)}),this._hiddenPropertyName=void 0!==document.hidden?"hidden":void 0!==document.mozHidden?"mozHidden":void 0!==document.msHidden?"msHidden":void 0!==document.webkitHidden?"webkitHidden":void 0;var t=void 0!==document.hidden?"visibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.webkitHidden?"webkitvisibilitychange":void 0;function r(){visibilityChanged(i)}this._visibilityChangeRemoveListener=void 0,defined(t)&&(document.addEventListener(t,r,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(t,r,!1)})}function update(e,t){if(!(0<e._pauseCount)){var i=getTimestamp$1();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=i+e.quietPeriod/TimeConstants$1.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/TimeConstants$1.SECONDS_PER_MILLISECOND;else if(i>=e._quietPeriodEndTime){e._frameTimes.push(i);var r=i-e.samplingWindow/TimeConstants$1.SECONDS_PER_MILLISECOND;if(2<=e._frameTimes.length&&e._frameTimes[0]<=r){for(;2<=e._frameTimes.length&&e._frameTimes[1]<r;)e._frameTimes.shift();var n=(i-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/n,1e3/(i>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup)<n?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}}function visibilityChanged(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}function FrameState(e,t,i){this.context=e,this.commandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=SceneMode$1.SCENE3D,this.morphTime=SceneMode$1.getMorphTime(SceneMode$1.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=i,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,density:void 0,sse:void 0,minimumBrightness:void 0},this.terrainExaggeration=1,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.imagerySplitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0}function FrustumCommands(e,t){this.near=defaultValue(e,0),this.far=defaultValue(t,0);for(var i=Pass$1.NUMBER_OF_PASSES,r=new Array(i),n=new Array(i),a=0;a<i;++a)r[a]=[],n[a]=0;this.commands=r,this.indices=n}Fog.prototype.update=function(e){var t,i,r;(e.fog.enabled=this.enabled)&&(!defined(i=(t=e.camera).positionCartographic)||8e5<i.height||e.mode!==SceneMode$1.SCENE3D?e.fog.enabled=!1:(i=findInterval(r=i.height),r=CesiumMath.clamp((r-heightsTable[i])/(heightsTable[i+1]-heightsTable[i]),0,1),i=(i=CesiumMath.lerp(densityTable[i],densityTable[i+1],r))*((r=1e6*this.density)-r/tableStartDensity*tableEndDensity)*1e-6,r=Cartesian3.normalize(t.positionWC,scratchPositionNormal$1),i*=1-Math.abs(Cartesian3.dot(t.directionWC,r)),e.fog.density=i,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness))},FrameRateMonitor.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8},FrameRateMonitor.fromScene=function(e){return defined(e._frameRateMonitor)&&!e._frameRateMonitor.isDestroyed()||(e._frameRateMonitor=new FrameRateMonitor({scene:e})),e._frameRateMonitor},Object.defineProperties(FrameRateMonitor.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}}),FrameRateMonitor.prototype.pause=function(){++this._pauseCount,1===this._pauseCount&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)},FrameRateMonitor.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)},FrameRateMonitor.prototype.isDestroyed=function(){return!1},FrameRateMonitor.prototype.destroy=function(){return this._preUpdateRemoveListener(),defined(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),destroyObject(this)};var GlobeFS="uniform vec4 u_initialColor;\n#ifdef APPLY_TAILOR\nuniform sampler2D u_tailorArea;\nuniform bool u_enableTailor;\nuniform bool u_showTailorOnly;\nuniform mat4 u_inverTailorCenterMat;\nuniform vec4 u_tailorRect;\n#endif\n#if TEXTURE_UNITS > 0\nuniform sampler2D u_dayTextures[TEXTURE_UNITS];\nuniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];\nuniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];\n#ifdef APPLY_ALPHA\nuniform float u_dayTextureAlpha[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_DAY_NIGHT_ALPHA\nuniform float u_dayTextureNightAlpha[TEXTURE_UNITS];\nuniform float u_dayTextureDayAlpha[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_SPLIT\nuniform float u_dayTextureSplit[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_BRIGHTNESS\nuniform float u_dayTextureBrightness[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_CONTRAST\nuniform float u_dayTextureContrast[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_HUE\nuniform float u_dayTextureHue[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_SATURATION\nuniform float u_dayTextureSaturation[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_GAMMA\nuniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_IMAGERY_CUTOUT\nuniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];\n#endif\n#ifdef APPLY_COLOR_TO_ALPHA\nuniform vec4 u_colorsToAlpha[TEXTURE_UNITS];\n#endif\nuniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];\n#endif\n#ifdef SHOW_REFLECTIVE_OCEAN\nuniform sampler2D u_waterMask;\nuniform vec4 u_waterMaskTranslationAndScale;\nuniform float u_zoomedOutOceanSpecularIntensity;\n#endif\n#ifdef SHOW_OCEAN_WAVES\nuniform sampler2D u_oceanNormalMap;\n#endif\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\nuniform vec2 u_lightingFadeDistance;\n#endif\n#ifdef TILE_LIMIT_RECTANGLE\nuniform vec4 u_cartographicLimitRectangle;\n#endif\n#ifdef GROUND_ATMOSPHERE\nuniform vec2 u_nightFadeDistance;\n#endif\n#ifdef ENABLE_CLIPPING_PLANES\nuniform highp sampler2D u_clippingPlanes;\nuniform mat4 u_clippingPlanesMatrix;\nuniform vec4 u_clippingPlanesEdgeStyle;\n#endif\n#if defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\nuniform float u_minimumBrightness;\n#endif\n#ifdef COLOR_CORRECT\nuniform vec3 u_hsbShift;\n#endif\n#ifdef HIGHLIGHT_FILL_TILE\nuniform vec4 u_fillHighlightColor;\n#endif\n#ifdef TRANSLUCENT\nuniform vec4 u_frontFaceAlphaByDistance;\nuniform vec4 u_backFaceAlphaByDistance;\nuniform vec4 u_translucencyRectangle;\n#endif\n#ifdef UNDERGROUND_COLOR\nuniform vec4 u_undergroundColor;\nuniform vec4 u_undergroundColorAlphaByDistance;\n#endif\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec3 v_textureCoordinates;\nvarying vec3 v_normalMC;\nvarying vec3 v_normalEC;\n#ifdef APPLY_MATERIAL\nuniform bool globe;\nuniform sampler2D u_floodArea;\nuniform bool u_enableFlood;\nuniform bool u_showFloodOnly;\nuniform mat4 u_inverFloodCenterMat;\nuniform vec4 u_floodRect;\nuniform bool u_showElseArea;\nvarying float v_height;\nvarying float v_slope;\nvarying float v_aspect;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nvarying float v_distance;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nvarying vec3 v_fogRayleighColor;\nvarying vec3 v_fogMieColor;\n#endif\n#ifdef GROUND_ATMOSPHERE\nvarying vec3 v_rayleighColor;\nvarying vec3 v_mieColor;\n#endif\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nfloat interpolateByDistance(vec4 nearFarScalar, float distance)\n{\nfloat startDistance = nearFarScalar.x;\nfloat startValue = nearFarScalar.y;\nfloat endDistance = nearFarScalar.z;\nfloat endValue = nearFarScalar.w;\nfloat t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);\nreturn mix(startValue, endValue, t);\n}\n#endif\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)\nvec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)\n{\nreturn sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);\n}\n#endif\n#ifdef TRANSLUCENT\nbool inTranslucencyRectangle()\n{\nreturn\nv_textureCoordinates.x > u_translucencyRectangle.x &&\nv_textureCoordinates.x < u_translucencyRectangle.z &&\nv_textureCoordinates.y > u_translucencyRectangle.y &&\nv_textureCoordinates.y < u_translucencyRectangle.w;\n}\n#endif\nvec4 sampleAndBlend(\nvec4 previousColor,\nsampler2D textureToSample,\nvec2 tileTextureCoordinates,\nvec4 textureCoordinateRectangle,\nvec4 textureCoordinateTranslationAndScale,\nfloat textureAlpha,\nfloat textureNightAlpha,\nfloat textureDayAlpha,\nfloat textureBrightness,\nfloat textureContrast,\nfloat textureHue,\nfloat textureSaturation,\nfloat textureOneOverGamma,\nfloat split,\nvec4 colorToAlpha,\nfloat nightBlend)\n{\nvec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);\ntextureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\nalphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);\ntextureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\ntextureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);\n#endif\nvec2 translation = textureCoordinateTranslationAndScale.xy;\nvec2 scale = textureCoordinateTranslationAndScale.zw;\nvec2 textureCoordinates = tileTextureCoordinates * scale + translation;\nvec4 value = texture2D(textureToSample, textureCoordinates);\nvec3 color = value.rgb;\nfloat alpha = value.a;\n#ifdef APPLY_COLOR_TO_ALPHA\nvec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);\ncolorDiff.r = max(max(colorDiff.r, colorDiff.g), colorDiff.b);\nalpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);\n#endif\n#if !defined(APPLY_GAMMA)\nvec4 tempColor = czm_gammaCorrect(vec4(color, alpha));\ncolor = tempColor.rgb;\nalpha = tempColor.a;\n#else\ncolor = pow(color, vec3(textureOneOverGamma));\n#endif\n#ifdef APPLY_SPLIT\nfloat splitPosition = czm_imagerySplitPosition;\nif (split < 0.0 && gl_FragCoord.x > splitPosition) {\nalpha = 0.0;\n}\nelse if (split > 0.0 && gl_FragCoord.x < splitPosition) {\nalpha = 0.0;\n}\n#endif\n#ifdef APPLY_BRIGHTNESS\ncolor = mix(vec3(0.0), color, textureBrightness);\n#endif\n#ifdef APPLY_CONTRAST\ncolor = mix(vec3(0.5), color, textureContrast);\n#endif\n#ifdef APPLY_HUE\ncolor = czm_hue(color, textureHue);\n#endif\n#ifdef APPLY_SATURATION\ncolor = czm_saturation(color, textureSaturation);\n#endif\nfloat sourceAlpha = alpha * textureAlpha;\nfloat outAlpha = mix(previousColor.a, 1.0, sourceAlpha);\noutAlpha += sign(outAlpha) - 1.0;\nvec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;\nreturn vec4(outColor, max(outAlpha, 0.0));\n}\nvec3 colorCorrect(vec3 rgb) {\n#ifdef COLOR_CORRECT\nvec3 hsb = czm_RGBToHSB(rgb);\nhsb.x += u_hsbShift.x;\nhsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0);\nhsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0;\nrgb = czm_HSBToRGB(hsb);\n#endif\nreturn rgb;\n}\nvec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);\n#ifdef GROUND_ATMOSPHERE\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist);\n#endif\nconst float fExposure = 2.0;\nvoid main()\n{\n#ifdef TILE_LIMIT_RECTANGLE\nif (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||\nv_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)\n{\ndiscard;\n}\n#endif\n#ifdef ENABLE_CLIPPING_PLANES\nfloat clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);\n#endif\n#if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)\nvec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0));\nvec3 normalEC = czm_normal3D * normalMC;\n#endif\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\nfloat nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);\n#else\nfloat nightBlend = 0.0;\n#endif\nvec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);\n#ifdef SHOW_TILE_BOUNDARIES\nif (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||\nv_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))\n{\ncolor = vec4(1.0, 0.0, 0.0, 1.0);\n}\n#endif\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\nfloat cameraDist;\nif (czm_sceneMode == czm_sceneMode2D)\n{\ncameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;\n}\nelse if (czm_sceneMode == czm_sceneModeColumbusView)\n{\ncameraDist = -czm_view[3].z;\n}\nelse\n{\ncameraDist = length(czm_view[3]);\n}\nfloat fadeOutDist = u_lightingFadeDistance.x;\nfloat fadeInDist = u_lightingFadeDistance.y;\nif (czm_sceneMode != czm_sceneMode3D) {\nvec3 radii = czm_ellipsoidRadii;\nfloat maxRadii = max(radii.x, max(radii.y, radii.z));\nfadeOutDist -= maxRadii;\nfadeInDist -= maxRadii;\n}\nfloat fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\n#else\nfloat fade = 0.0;\n#endif\n#ifdef SHOW_REFLECTIVE_OCEAN\nvec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;\nvec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;\nvec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;\nwaterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;\nfloat mask = texture2D(u_waterMask, waterMaskTextureCoordinates).r;\nif (mask > 0.0)\n{\nmat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);\nvec2 ellipsoidTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC);\nvec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC.zyx);\nvec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));\ncolor = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);\n}\n#endif\n#ifdef APPLY_MATERIAL\nczm_materialInput materialInput;\nmaterialInput.st = v_textureCoordinates.st;\nmaterialInput.normalEC = normalize(v_normalEC);\nmaterialInput.slope = v_slope;\nmaterialInput.height = v_height;\nmaterialInput.aspect = v_aspect;\nczm_material material = czm_getMaterial(materialInput);\nvec4 materialColor = vec4(material.diffuse, material.alpha);\nif(u_enableFlood){\nif(globe){\nvec4 materialColor = vec4(material.diffuse, material.alpha);\ncolor = alphaBlend(materialColor, color);\n}else{\nvec4 lpos = u_inverFloodCenterMat * vec4(v_positionMC,1.0);\nvec2 newuv = (lpos.xy - u_floodRect.xy) / u_floodRect.zw;\nvec4 ymColor = texture2D(u_floodArea, newuv);\nif (newuv.x>=0.0 && newuv.x<=1.0 && newuv.y>=0.0 && newuv.y<=1.0 && ymColor.r>0.8 && ymColor.a > 0.8) {\ncolor.xyz = mix(color.xyz, material.diffuse, material.alpha);\n} else {\nif (!u_showElseArea) {\ndiscard;\n}\n}\n}\n}\n#endif\n#ifdef ENABLE_VERTEX_LIGHTING\nfloat diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * 0.9 + 0.3, 0.0, 1.0);\nvec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\n#elif defined(ENABLE_DAYNIGHT_SHADING)\nfloat diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);\ndiffuseIntensity = mix(1.0, diffuseIntensity, fade);\nvec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\n#else\nvec4 finalColor = color;\n#endif\n#ifdef ENABLE_CLIPPING_PLANES\nvec4 clippingPlanesEdgeColor = vec4(1.0);\nclippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;\nfloat clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;\nif (clipDistance < clippingPlanesEdgeWidth)\n{\nfinalColor = clippingPlanesEdgeColor;\n}\n#endif\n#ifdef HIGHLIGHT_FILL_TILE\nfinalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nvec3 fogColor = colorCorrect(v_fogMieColor) + finalColor.rgb * colorCorrect(v_fogRayleighColor);\n#ifndef HDR\nfogColor = vec3(1.0) - exp(-fExposure * fogColor);\n#endif\n#endif\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)\nvec3 atmosphereLightDirection = czm_sunDirectionWC;\n#else\nvec3 atmosphereLightDirection = czm_lightDirectionWC;\n#endif\n#ifdef FOG\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\nfloat darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);\nfogColor *= darken;\n#endif\n#ifdef HDR\nconst float modifier = 0.15;\nfinalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor, modifier), finalColor.a);\n#else\nfinalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor), finalColor.a);\n#endif\n#endif\n#ifdef GROUND_ATMOSPHERE\nif (!czm_backFacing())\n{\nvec3 groundAtmosphereColor = computeGroundAtmosphereColor(fogColor, finalColor, atmosphereLightDirection, cameraDist);\nfinalColor = vec4(mix(finalColor.rgb, groundAtmosphereColor, fade), finalColor.a);\n}\n#endif\n#ifdef UNDERGROUND_COLOR\nif (czm_backFacing())\n{\nfloat distanceFromEllipsoid = max(czm_eyeHeight, 0.0);\nfloat distance = max(v_distance - distanceFromEllipsoid, 0.0);\nfloat blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);\nvec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);\nfinalColor = alphaBlend(undergroundColor, finalColor);\n}\n#endif\n#ifdef TRANSLUCENT\nif (inTranslucencyRectangle())\n{\nvec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;\nfinalColor.a *= interpolateByDistance(alphaByDistance, v_distance);\n}\n#endif\n#ifdef APPLY_TAILOR\nif(u_enableTailor){\nvec4 tlpos = u_inverTailorCenterMat * vec4(v_positionMC,1.0);\nvec2 tuv = (tlpos.xy - u_tailorRect.xy)/ u_tailorRect.zw;\nvec4 tColor = texture2D(u_tailorArea, tuv);\nif (!(tuv.x>=0.0 && tuv.x<=1.0 && tuv.y>=0.0 && tuv.y<=1.0) || (tColor.r<0.5 && tColor.a<0.5)) {\nif (u_showTailorOnly) {\ndiscard;\n}\n} else {\nif (!u_showTailorOnly) {\ndiscard;\n}\n}\n}\n#endif\ngl_FragColor = finalColor;\n#ifdef APPLY_EXCAVATE\ngl_FragColor = vec4(1.0);\n#endif\n}\n#ifdef GROUND_ATMOSPHERE\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist)\n{\n#if defined(PER_FRAGMENT_GROUND_ATMOSPHERE) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))\nfloat mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);\nvec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);\nxy *= czm_viewport.zw * mpp * 0.5;\nvec3 direction = normalize(vec3(xy, -czm_currentFrustum.x));\nczm_ray ray = czm_ray(vec3(0.0), direction);\nvec3 ellipsoid_center = czm_view[3].xyz;\nczm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\nvec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);\nellipsoidPosition = (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;\nAtmosphereColor atmosColor = computeGroundAtmosphereFromSpace(ellipsoidPosition, true, atmosphereLightDirection);\nvec3 groundAtmosphereColor = colorCorrect(atmosColor.mie) + finalColor.rgb * colorCorrect(atmosColor.rayleigh);\n#ifndef HDR\ngroundAtmosphereColor = vec3(1.0) - exp(-fExposure * groundAtmosphereColor);\n#endif\nfloat fadeInDist = u_nightFadeDistance.x;\nfloat fadeOutDist = u_nightFadeDistance.y;\nfloat sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\n#ifdef HDR\nsunlitAtmosphereIntensity = max(sunlitAtmosphereIntensity * sunlitAtmosphereIntensity, 0.03);\n#endif\ngroundAtmosphereColor = mix(groundAtmosphereColor, fogColor, sunlitAtmosphereIntensity);\n#else\nvec3 groundAtmosphereColor = fogColor;\n#endif\n#ifdef HDR\ngroundAtmosphereColor = czm_saturation(groundAtmosphereColor, 1.6);\n#endif\nreturn groundAtmosphereColor;\n}\n#endif\n#ifdef SHOW_REFLECTIVE_OCEAN\nfloat waveFade(float edge0, float edge1, float x)\n{\nfloat y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\nreturn pow(1.0 - y, 5.0);\n}\nfloat linearFade(float edge0, float edge1, float x)\n{\nreturn clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n}\nconst float oceanFrequencyLowAltitude = 825000.0;\nconst float oceanAnimationSpeedLowAltitude = 0.004;\nconst float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;\nconst float oceanSpecularIntensity = 0.5;\nconst float oceanFrequencyHighAltitude = 125000.0;\nconst float oceanAnimationSpeedHighAltitude = 0.008;\nconst float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)\n{\nvec3 positionToEyeEC = -positionEyeCoordinates;\nfloat positionToEyeECLength = length(positionToEyeEC);\nvec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));\nfloat waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);\n#ifdef SHOW_OCEAN_WAVES\nfloat time = czm_frameNumber * oceanAnimationSpeedHighAltitude;\nvec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);\nvec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);\ntime = czm_frameNumber * oceanAnimationSpeedLowAltitude;\nnoise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);\nvec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);\nfloat highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);\nfloat lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);\nvec3 normalTangentSpace =\n(highAltitudeFade * normalTangentSpaceHighAltitude) +\n(lowAltitudeFade * normalTangentSpaceLowAltitude);\nnormalTangentSpace = normalize(normalTangentSpace);\nnormalTangentSpace.xy *= waveIntensity;\nnormalTangentSpace = normalize(normalTangentSpace);\n#else\nvec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);\n#endif\nvec3 normalEC = enuToEye * normalTangentSpace;\nconst vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);\nfloat diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;\nvec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);\n#ifdef SHOW_OCEAN_WAVES\nfloat tsPerturbationRatio = normalTangentSpace.z;\nvec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);\n#else\nvec3 nonDiffuseHighlight = vec3(0.0);\n#endif\nfloat specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);\nfloat surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);\nfloat specular = specularIntensity * surfaceReflectance;\n#ifdef HDR\nspecular *= 1.4;\nfloat e = 0.2;\nfloat d = 3.3;\nfloat c = 1.7;\nvec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));\n#else\nvec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;\n#endif\nreturn vec4(color, imageryColor.a);\n}\n#endif // #ifdef SHOW_REFLECTIVE_OCEAN\n",GlobeVS="#ifdef QUANTIZATION_BITS12\nattribute vec4 compressed0;\nattribute float compressed1;\n#else\nattribute vec4 position3DAndHeight;\nattribute vec4 textureCoordAndEncodedNormals;\n#endif\nuniform vec3 u_center3D;\nuniform mat4 u_modifiedModelView;\nuniform mat4 u_modifiedModelViewProjection;\nuniform vec4 u_tileRectangle;\nuniform vec2 u_southAndNorthLatitude;\nuniform vec2 u_southMercatorYAndOneOverHeight;\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec3 v_textureCoordinates;\nvarying vec3 v_normalMC;\nvarying vec3 v_normalEC;\n#ifdef APPLY_MATERIAL\nvarying float v_slope;\nvarying float v_aspect;\nvarying float v_height;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nvarying float v_distance;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nvarying vec3 v_fogMieColor;\nvarying vec3 v_fogRayleighColor;\n#endif\nvec4 getPosition(vec3 position, float height, vec2 textureCoordinates);\nfloat get2DYPositionFraction(vec2 textureCoordinates);\nvec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)\n{\nreturn u_modifiedModelViewProjection * vec4(position, 1.0);\n}\nfloat get2DMercatorYPositionFraction(vec2 textureCoordinates)\n{\nconst float maxTileWidth = 0.003068;\nfloat positionFraction = textureCoordinates.y;\nfloat southLatitude = u_southAndNorthLatitude.x;\nfloat northLatitude = u_southAndNorthLatitude.y;\nif (northLatitude - southLatitude > maxTileWidth)\n{\nfloat southMercatorY = u_southMercatorYAndOneOverHeight.x;\nfloat oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;\nfloat currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);\ncurrentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);\npositionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);\n}\nreturn positionFraction;\n}\nfloat get2DGeographicYPositionFraction(vec2 textureCoordinates)\n{\nreturn textureCoordinates.y;\n}\nvec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)\n{\nfloat yPositionFraction = get2DYPositionFraction(textureCoordinates);\nvec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\nreturn u_modifiedModelViewProjection * rtcPosition2D;\n}\nvec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)\n{\nreturn getPositionPlanarEarth(position, 0.0, textureCoordinates);\n}\nvec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)\n{\nreturn getPositionPlanarEarth(position, height, textureCoordinates);\n}\nvec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)\n{\nvec3 position3DWC = position + u_center3D;\nfloat yPositionFraction = get2DYPositionFraction(textureCoordinates);\nvec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\nvec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);\nreturn czm_modelViewProjection * morphPosition;\n}\n#ifdef QUANTIZATION_BITS12\nuniform vec2 u_minMaxHeight;\nuniform mat4 u_scaleAndBias;\n#endif\nvoid main()\n{\n#ifdef QUANTIZATION_BITS12\nvec2 xy = czm_decompressTextureCoordinates(compressed0.x);\nvec2 zh = czm_decompressTextureCoordinates(compressed0.y);\nvec3 position = vec3(xy, zh.x);\nfloat height = zh.y;\nvec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);\nheight = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;\nposition = (u_scaleAndBias * vec4(position, 1.0)).xyz;\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\nfloat webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\nfloat encodedNormal = compressed1;\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\nfloat webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\nfloat encodedNormal = 0.0;\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)\nfloat webMercatorT = textureCoordinates.y;\nfloat encodedNormal = compressed0.w;\n#else\nfloat webMercatorT = textureCoordinates.y;\nfloat encodedNormal = 0.0;\n#endif\n#else\nvec3 position = position3DAndHeight.xyz;\nfloat height = position3DAndHeight.w;\nvec2 textureCoordinates = textureCoordAndEncodedNormals.xy;\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\nfloat webMercatorT = textureCoordAndEncodedNormals.z;\nfloat encodedNormal = textureCoordAndEncodedNormals.w;\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\nfloat webMercatorT = textureCoordinates.y;\nfloat encodedNormal = textureCoordAndEncodedNormals.z;\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\nfloat webMercatorT = textureCoordAndEncodedNormals.z;\nfloat encodedNormal = 0.0;\n#else\nfloat webMercatorT = textureCoordinates.y;\nfloat encodedNormal = 0.0;\n#endif\n#endif\nvec3 position3DWC = position + u_center3D;\ngl_Position = getPosition(position, height, textureCoordinates);\nv_textureCoordinates = vec3(textureCoordinates, webMercatorT);\n#if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\nv_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\nv_positionMC = position3DWC;\nvec3 normalMC = czm_octDecode(encodedNormal);\nv_normalMC = normalMC;\nv_normalEC = czm_normal3D * v_normalMC;\n#elif defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(GENERATE_POSITION) || defined(HDR)\nv_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\nv_positionMC = position3DWC;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nAtmosphereColor atmosFogColor = computeGroundAtmosphereFromSpace(position3DWC, false, vec3(0.0));\nv_fogMieColor = atmosFogColor.mie;\nv_fogRayleighColor = atmosFogColor.rayleigh;\n#endif\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nv_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);\n#endif\n#ifdef APPLY_MATERIAL\nfloat northPoleZ = czm_ellipsoidRadii.z;\nvec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);\nvec3 ellipsoidNormal = normalize(v_positionMC);\nvec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));\nfloat dotProd = abs(dot(ellipsoidNormal, v_normalMC));\nv_slope = acos(dotProd);\nvec3 normalRejected = ellipsoidNormal * dotProd;\nvec3 normalProjected = v_normalMC - normalRejected;\nvec3 aspectVector = normalize(normalProjected);\nv_aspect = acos(dot(aspectVector, vectorEastMC));\nfloat determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);\nv_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);\nv_height = height;\n#endif\n}\n",GroundAtmosphere="const float Kr = 0.0025;\nconst float Km = 0.0015;\nconst float ESun = 15.0;\nconst float fKrESun = Kr * ESun;\nconst float fKmESun = Km * ESun;\nconst float fKr4PI = Kr * 4.0 * czm_pi;\nconst float fKm4PI = Km * 4.0 * czm_pi;\nconst vec3 v3InvWavelength = vec3(5.60204474633241, 9.473284437923038, 19.64380261047721);\nconst float fScaleDepth = 0.25;\nstruct AtmosphereColor\n{\nvec3 mie;\nvec3 rayleigh;\n};\nconst int nSamples = 2;\nconst float fSamples = 2.0;\nfloat scale(float fCos)\n{\nfloat x = 1.0 - fCos;\nreturn fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\n}\nAtmosphereColor computeGroundAtmosphereFromSpace(vec3 v3Pos, bool dynamicLighting, vec3 lightDirectionWC)\n{\nfloat fInnerRadius = czm_ellipsoidRadii.x;\nfloat fOuterRadius = czm_ellipsoidRadii.x * 1.025;\nfloat fOuterRadius2 = fOuterRadius * fOuterRadius;\nfloat fScale = 1.0 / (fOuterRadius - fInnerRadius);\nfloat fScaleOverScaleDepth = fScale / fScaleDepth;\nvec3 v3Ray = v3Pos - czm_viewerPositionWC;\nfloat fFar = length(v3Ray);\nv3Ray /= fFar;\nfloat fCameraHeight = length(czm_viewerPositionWC);\nfloat fCameraHeight2 = fCameraHeight * fCameraHeight;\nfloat B = 2.0 * length(czm_viewerPositionWC) * dot(normalize(czm_viewerPositionWC), v3Ray);\nfloat C = fCameraHeight2 - fOuterRadius2;\nfloat fDet = max(0.0, B*B - 4.0 * C);\nfloat fNear = 0.5 * (-B - sqrt(fDet));\nvec3 v3Start = czm_viewerPositionWC + v3Ray * fNear;\nfFar -= fNear;\nfloat fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\nfloat fLightAngle = czm_branchFreeTernary(dynamicLighting, dot(lightDirectionWC, v3Pos) / length(v3Pos), 1.0);\nfloat fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\nfloat fCameraScale = scale(fCameraAngle);\nfloat fLightScale = scale(fLightAngle);\nfloat fCameraOffset = fDepth*fCameraScale;\nfloat fTemp = (fLightScale + fCameraScale);\nfloat fSampleLength = fFar / fSamples;\nfloat fScaledLength = fSampleLength * fScale;\nvec3 v3SampleRay = v3Ray * fSampleLength;\nvec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\nvec3 v3FrontColor = vec3(0.0);\nvec3 v3Attenuate = vec3(0.0);\nfor(int i=0; i<nSamples; i++)\n{\nfloat fHeight = length(v3SamplePoint);\nfloat fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\nfloat fScatter = fDepth*fTemp - fCameraOffset;\nv3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\nv3FrontColor += v3Attenuate * (fDepth * fScaledLength);\nv3SamplePoint += v3SampleRay;\n}\nAtmosphereColor color;\ncolor.mie = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\ncolor.rayleigh = v3Attenuate;\nreturn color;\n}\n";function GlobeSurfaceShader(e,t,i,r,n){this.numberOfDayTextures=e,this.flags=t,this.material=i,this.shaderProgram=r,this.clippingShaderState=n}function GlobeSurfaceShaderSet(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function getPositionMode(e){var t;switch(e){case SceneMode$1.SCENE3D:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }";break;case SceneMode$1.SCENE2D:case SceneMode$1.COLUMBUS_VIEW:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }";break;case SceneMode$1.MORPHING:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }"}return t}function get2DYPositionFraction(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}GlobeSurfaceShaderSet.prototype.getShaderProgram=function(e){var t=e.frameState,i=e.surfaceTile,r=e.numberOfDayTextures,n=e.applyBrightness,a=e.applyContrast,o=e.applyHue,s=e.applySaturation,l=e.applyGamma,c=e.applyAlpha,u=e.applyDayNightAlpha,d=e.applySplit,h=e.showReflectiveOcean,p=e.showOceanWaves,m=e.enableLighting,f=e.dynamicAtmosphereLighting,g=e.dynamicAtmosphereLightingFromSun,_=e.showGroundAtmosphere,y=e.perFragmentGroundAtmosphere,C=e.hasVertexNormals,v=e.useWebMercatorProjection,S=e.enableFog,x=e.enableClippingPlanes,T=e.clippingPlanes,b=e.clippedByBoundaries,E=e.hasImageryLayerCutout,P=e.colorCorrect,A=e.highlightFillTile,w=e.colorToAlpha,D=e.showUndergroundColor,M=e.translucent,I=e.applyTailor,R=0,O="",L=i.renderedMesh.encoding;L.quantization===TerrainQuantization$1.BITS12&&(R=1,O="QUANTIZATION_BITS12");var F=0,N="";b&&(F=1,N="TILE_LIMIT_RECTANGLE");var B=0,V="";E&&(B=1,V="APPLY_IMAGERY_CUTOUT");var k=t.mode,z=k|n<<2|a<<3|o<<4|s<<5|l<<6|c<<7|h<<8|p<<9|m<<10|f<<11|g<<12|_<<13|y<<14|C<<15|v<<16|S<<17|R<<18|d<<19|x<<20|F<<21|B<<22|P<<23|A<<24|w<<25|D<<26|M<<27|u<<28,e=0;if(defined(T)&&0<T.length&&(e=x?T.clippingPlanesState:0),defined(b=i.surfaceShader)&&b.numberOfDayTextures===r&&b.flags===z&&b.material===this.material&&b.clippingShaderState===e)return b.shaderProgram;R=this._shadersByTexturesFlags[r];if(b=(R=!defined(R)?this._shadersByTexturesFlags[r]=[]:R)[z],I||!defined(b)||b.material!==this.material||b.clippingShaderState!==e){F=this.baseVertexShaderSource.clone(),B=this.baseFragmentShaderSource.clone();0!==e&&B.sources.unshift(getClippingFunction(T,t.context)),I&&B.defines.push("APPLY_TAILOR"),F.defines.push(O),B.defines.push("TEXTURE_UNITS "+r,N,V),n&&B.defines.push("APPLY_BRIGHTNESS"),a&&B.defines.push("APPLY_CONTRAST"),o&&B.defines.push("APPLY_HUE"),s&&B.defines.push("APPLY_SATURATION"),l&&B.defines.push("APPLY_GAMMA"),c&&B.defines.push("APPLY_ALPHA"),u&&B.defines.push("APPLY_DAY_NIGHT_ALPHA"),h&&(B.defines.push("SHOW_REFLECTIVE_OCEAN"),F.defines.push("SHOW_REFLECTIVE_OCEAN")),p&&B.defines.push("SHOW_OCEAN_WAVES"),w&&B.defines.push("APPLY_COLOR_TO_ALPHA"),D&&(F.defines.push("UNDERGROUND_COLOR"),B.defines.push("UNDERGROUND_COLOR")),M&&(F.defines.push("TRANSLUCENT"),B.defines.push("TRANSLUCENT")),m&&(C?(F.defines.push("ENABLE_VERTEX_LIGHTING"),B.defines.push("ENABLE_VERTEX_LIGHTING")):(F.defines.push("ENABLE_DAYNIGHT_SHADING"),B.defines.push("ENABLE_DAYNIGHT_SHADING"))),f&&(B.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),g&&B.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN")),_&&(F.defines.push("GROUND_ATMOSPHERE"),B.defines.push("GROUND_ATMOSPHERE"),y&&B.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE")),F.defines.push("INCLUDE_WEB_MERCATOR_Y"),B.defines.push("INCLUDE_WEB_MERCATOR_Y"),S&&(F.defines.push("FOG"),B.defines.push("FOG")),d&&B.defines.push("APPLY_SPLIT"),x&&B.defines.push("ENABLE_CLIPPING_PLANES"),P&&B.defines.push("COLOR_CORRECT"),A&&B.defines.push("HIGHLIGHT_FILL_TILE");var U=" vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\n {\n vec4 color = initialColor;\n";E&&(U+=" vec4 cutoutAndColorResult;\n bool texelUnclipped;\n");for(var $=0;$<r;++$)U+=E?" cutoutAndColorResult = u_dayTextureCutoutRectangles["+$+"];\n texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\n cutoutAndColorResult = sampleAndBlend(\n":" color = sampleAndBlend(\n",U+=" color,\n u_dayTextures["+$+"],\n u_dayTextureUseWebMercatorT["+$+"] ? textureCoordinates.xz : textureCoordinates.xy,\n u_dayTextureTexCoordsRectangle["+$+"],\n u_dayTextureTranslationAndScale["+$+"],\n "+(c?"u_dayTextureAlpha["+$+"]":"1.0")+",\n "+(u?"u_dayTextureNightAlpha["+$+"]":"1.0")+",\n"+(u?"u_dayTextureDayAlpha["+$+"]":"1.0")+",\n"+(n?"u_dayTextureBrightness["+$+"]":"0.0")+",\n "+(a?"u_dayTextureContrast["+$+"]":"0.0")+",\n "+(o?"u_dayTextureHue["+$+"]":"0.0")+",\n "+(s?"u_dayTextureSaturation["+$+"]":"0.0")+",\n "+(l?"u_dayTextureOneOverGamma["+$+"]":"0.0")+",\n "+(d?"u_dayTextureSplit["+$+"]":"0.0")+",\n "+(w?"u_colorsToAlpha["+$+"]":"vec4(0.0)")+",\n nightBlend );\n",E&&(U+=" color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\n");U+=" return color;\n }",B.sources.push(U),F.sources.push(getPositionMode(k)),F.sources.push(get2DYPositionFraction(v));L=ShaderProgram.fromCache({context:t.context,vertexShaderSource:F,fragmentShaderSource:B,attributeLocations:L.getAttributeLocations()}),b=R[z]=new GlobeSurfaceShader(r,z,this.material,L,e)}return(i.surfaceShader=b).shaderProgram},GlobeSurfaceShaderSet.prototype.destroy=function(){var e,t,i,r=this._shadersByTexturesFlags;for(i in r)if(r.hasOwnProperty(i)){var n=r[i];if(defined(n))for(e in n)n.hasOwnProperty(e)&&defined(t=n[e])&&t.shaderProgram.destroy()}return destroyObject(this)};var ImageryState={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},ImageryState$1=Object.freeze(ImageryState),QuadtreeTileLoadState={START:0,LOADING:1,DONE:2,FAILED:3},QuadtreeTileLoadState$1=Object.freeze(QuadtreeTileLoadState),TerrainState={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},TerrainState$1=Object.freeze(TerrainState);function GlobeSurfaceTile(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new Cartesian4(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.orientedBoundingBox=void 0,this.boundingVolumeSourceTile=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new Cartesian3,this.terrainState=TerrainState$1.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new BoundingSphere,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}function getPosition(e,t,i,r,n,a){return e.decodePosition(r,n,a),defined(t)&&t!==SceneMode$1.SCENE3D&&(t=i.ellipsoid.cartesianToCartographic(a),i.project(t,a),Cartesian3.fromElements(a.z,a.x,a.y,a)),a}Object.defineProperties(GlobeSurfaceTile.prototype,{eligibleForUnloading:{get:function(){for(var e=this.terrainState,t=!(e===TerrainState$1.RECEIVING||e===TerrainState$1.TRANSFORMING),i=this.imagery,r=0,n=i.length;t&&r<n;++r)var a=i[r],t=!defined(a.loadingImagery)||a.loadingImagery.state!==ImageryState$1.TRANSITIONING;return t}},renderedMesh:{get:function(){return defined(this.vertexArray)?this.mesh:defined(this.fill)?this.fill.mesh:void 0}}});var scratchV0=new Cartesian3,scratchV1=new Cartesian3,scratchV2=new Cartesian3;function prepareNewTile(e,t,i){var r,n,a=t.getTileDataAvailable(e.x,e.y,e.level);defined(a)||!defined(e.parent)||defined(n=(r=e.parent).data)&&defined(n.terrainData)&&(a=n.terrainData.isChildAvailable(r.x,r.y,e.x,e.y)),!1===a&&(e.data.terrainState=TerrainState$1.FAILED);for(var o=0,s=i.length;o<s;++o){var l=i.get(o);l.show&&l._createTileImagerySkeletons(e,t)}}function processTerrainStateMachine(e,t,i,r,n){var a=e.data,o=e.parent;a.terrainState===TerrainState$1.FAILED&&void 0!==o&&(void 0!==o.data&&void 0!==o.data.terrainData&&!1!==o.data.terrainData.canUpsample||GlobeSurfaceTile.processStateMachine(o,t,i,r,!0)),a.terrainState===TerrainState$1.FAILED&&upsample(a,e,t,i,e.x,e.y,e.level),a.terrainState===TerrainState$1.UNLOADED&&requestTileGeometry(a,i,e.x,e.y,e.level),a.terrainState===TerrainState$1.RECEIVED&&transform(a,t,i,e.x,e.y,e.level),a.terrainState===TerrainState$1.TRANSFORMED&&createResources$2(a,t.context,i,e.x,e.y,e.level,n),a.terrainState>=TerrainState$1.RECEIVED&&void 0===a.waterMaskTexture&&i.hasWaterMask&&(void 0!==a.terrainData.waterMask?createWaterMaskTextureIfNeeded(t.context,a):defined(t=a._findAncestorTileWithTerrainData(e))&&defined(t.data.waterMaskTexture)&&(a.waterMaskTexture=t.data.waterMaskTexture,++a.waterMaskTexture.referenceCount,a._computeWaterMaskTranslationAndScale(e,t,a.waterMaskTranslationAndScale)))}function upsample(t,e,i,r,n,a,o){var s,l,c,u=e.parent;u?(s=u.data.terrainData,l=u.x,c=u.y,u=u.level,!defined(s)||defined(o=s.upsample(r.tilingScheme,l,c,u,n,a,o))&&(t.terrainState=TerrainState$1.RECEIVING,when(o,function(e){t.terrainData=e,t.terrainState=TerrainState$1.RECEIVED},function(){t.terrainState=TerrainState$1.FAILED}))):e.state=QuadtreeTileLoadState$1.FAILED}function requestTileGeometry(t,i,r,n,a){function o(e){t.terrainData=e,t.terrainState=TerrainState$1.RECEIVED,t.request=void 0}function s(){if(t.request.state===RequestState$1.CANCELLED)return t.terrainData=void 0,t.terrainState=TerrainState$1.UNLOADED,void(t.request=void 0);t.terrainState=TerrainState$1.FAILED,t.request=void 0;var e="Failed to obtain terrain tile X: "+r+" Y: "+n+" Level: "+a+".";i._requestError=TileProviderError.handleError(i._requestError,i,i.errorEvent,e,r,n,a,l)}function l(){var e=new Request({throttle:!1,throttleByServer:!0,type:RequestType$1.TERRAIN});t.request=e;e=i.requestTileGeometry(r,n,a,e);defined(e)?(t.terrainState=TerrainState$1.RECEIVING,when(e,o,s)):(t.terrainState=TerrainState$1.UNLOADED,t.request=void 0)}l()}GlobeSurfaceTile.prototype.pick=function(e,t,i,r,n){var a=this.renderedMesh;if(defined(a)){for(var o=a.vertices,s=a.indices,l=a.encoding,c=s.length,u=Number.MAX_VALUE,d=0;d<c;d+=3){var h=s[d],p=s[d+1],m=s[d+2],h=getPosition(l,t,i,o,h,scratchV0),p=getPosition(l,t,i,o,p,scratchV1),m=getPosition(l,t,i,o,m,scratchV2),m=IntersectionTests.rayTriangleParametric(e,h,p,m,r);defined(m)&&m<u&&0<=m&&(u=m)}return u!==Number.MAX_VALUE?Ray.getPoint(e,u,n):void 0}},GlobeSurfaceTile.prototype.freeResources=function(){defined(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,0===this.waterMaskTexture.referenceCount&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=TerrainState$1.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();for(var e=this.imagery,t=0,i=e.length;t<i;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()},GlobeSurfaceTile.prototype.freeVertexArray=function(){GlobeSurfaceTile._freeVertexArray(this.vertexArray),this.vertexArray=void 0,GlobeSurfaceTile._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0},GlobeSurfaceTile.initialize=function(e,t,i){defined(e.data)||(e.data=new GlobeSurfaceTile),e.state===QuadtreeTileLoadState$1.START&&(prepareNewTile(e,t,i),e.state=QuadtreeTileLoadState$1.LOADING)},GlobeSurfaceTile.processStateMachine=function(e,t,i,r,n,a){GlobeSurfaceTile.initialize(e,i,r);var o=e.data;if(e.state===QuadtreeTileLoadState$1.LOADING&&processTerrainStateMachine(e,t,i,r,n),!a){n=e.renderable;e.renderable=defined(o.vertexArray);a=o.terrainState===TerrainState$1.READY;e.upsampledFromParent=defined(o.terrainData)&&o.terrainData.wasCreatedByUpsampling();t=o.processImagery(e,i,t);if(a&&t){var s,l=e._loadedCallbacks,c={};for(s in l)l.hasOwnProperty(s)&&(l[s](e)||(c[s]=l[s]));e._loadedCallbacks=c,e.state=QuadtreeTileLoadState$1.DONE}n&&(e.renderable=!0)}},GlobeSurfaceTile.prototype.processImagery=function(e,t,i,r){for(var n=e.data,a=e.upsampledFromParent,o=!1,s=!0,l=n.imagery,c=0,u=l.length;c<u;++c){var d=l[c];if(defined(d.loadingImagery)){if(d.loadingImagery.state===ImageryState$1.PLACEHOLDER){var h=d.loadingImagery.imageryLayer;if(h.imageryProvider.ready){d.freeResources(),l.splice(c,1),h._createTileImagerySkeletons(e,t,c),--c,u=l.length;continue}a=!1}h=d.processStateMachine(e,i,r),s=s&&h,o=o||h||defined(d.readyImagery),a=a&&defined(d.loadingImagery)&&(d.loadingImagery.state===ImageryState$1.FAILED||d.loadingImagery.state===ImageryState$1.INVALID)}else a=!1}return e.upsampledFromParent=a,e.renderable=e.renderable&&(o||s),s};var scratchCreateMeshOptions={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,throttle:!0};function transform(t,e,i,r,n,a){var o=i.tilingScheme,i=scratchCreateMeshOptions;i.tilingScheme=o,i.x=r,i.y=n,i.level=a,i.exaggeration=e.terrainExaggeration,i.throttle=!0;i=t.terrainData.createMesh(i);defined(i)&&(t.terrainState=TerrainState$1.TRANSFORMING,when(i,function(e){t.mesh=e,t.orientedBoundingBox=OrientedBoundingBox.clone(e.orientedBoundingBox,t.orientedBoundingBox),t.occludeePointInScaledSpace=Cartesian3.clone(e.occludeePointInScaledSpace,t.occludeePointInScaledSpace),t.terrainState=TerrainState$1.TRANSFORMED},function(){t.terrainState=TerrainState$1.FAILED}))}function createResources$2(e,t,i,r,n,a,o){e.vertexArray=GlobeSurfaceTile._createVertexArrayForMesh(t,e.mesh),e.terrainState=TerrainState$1.READY,e.fill=e.fill&&e.fill.destroy(o)}function getContextWaterMaskData(e){var t,i=e.cache.tile_waterMaskData;return defined(i)||((t=Texture.create({context:e,pixelFormat:PixelFormat$1.LUMINANCE,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}})).referenceCount=1,i={allWaterTexture:t,sampler:new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:TextureMinificationFilter$1.LINEAR,magnificationFilter:TextureMagnificationFilter$1.LINEAR}),destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=i),i}function createWaterMaskTextureIfNeeded(e,t){var i=t.terrainData.waterMask,r=getContextWaterMaskData(e),n=i.length;if(1===n){if(0===i[0])return;a=r.allWaterTexture}else{var a,n=Math.sqrt(n);(a=Texture.create({context:e,pixelFormat:PixelFormat$1.LUMINANCE,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{width:n,height:n,arrayBufferView:i},sampler:r.sampler,flipY:!1})).referenceCount=0}++a.referenceCount,t.waterMaskTexture=a,Cartesian4.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}GlobeSurfaceTile._createVertexArrayForMesh=function(e,t){var i=t.vertices,r=Buffer$1.createVertexBuffer({context:e,typedArray:i,usage:BufferUsage$1.STATIC_DRAW}),n=t.encoding.getAttributes(r),a=t.indices.indexBuffers||{},i=a[e.id];return!defined(i)||i.isDestroyed()?(r=t.indices,(i=Buffer$1.createIndexBuffer({context:e,typedArray:r,usage:BufferUsage$1.STATIC_DRAW,indexDatatype:IndexDatatype$1.fromSizeInBytes(r.BYTES_PER_ELEMENT)})).vertexArrayDestroyable=!1,i.referenceCount=1,a[e.id]=i,t.indices.indexBuffers=a):++i.referenceCount,new VertexArray({context:e,attributes:n,indexBuffer:i})},GlobeSurfaceTile._freeVertexArray=function(e){var t;defined(e)&&(t=e.indexBuffer,e.destroy(),defined(t)&&!t.isDestroyed()&&defined(t.referenceCount)&&(--t.referenceCount,0===t.referenceCount&&t.destroy()))},GlobeSurfaceTile.prototype._findAncestorTileWithTerrainData=function(e){for(var t=e.parent;defined(t)&&(!defined(t.data)||!defined(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t},GlobeSurfaceTile.prototype._computeWaterMaskTranslationAndScale=function(e,t,i){var r=t.rectangle,n=e.rectangle,a=n.width,o=n.height,t=a/r.width,e=o/r.height;return i.x=t*(n.west-r.west)/a,i.y=e*(n.south-r.south)/o,i.z=t,i.w=e,i};var ReprojectWebMercatorFS="uniform sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\ngl_FragColor = texture2D(u_texture, v_textureCoordinates);\n}\n",ReprojectWebMercatorVS="attribute vec4 position;\nattribute float webMercatorT;\nuniform vec2 u_textureDimensions;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nv_textureCoordinates = vec2(position.x, webMercatorT);\ngl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));\n}\n";function Imagery(e,t,i,r,n){var a,o,s;this.imageryLayer=e,this.x=t,this.y=i,this.level=r,this.request=void 0,0!==r&&(a=t/2|0,o=i/2|0,s=r-1,this.parent=e.getImageryFromCache(a,o,s)),this.state=ImageryState$1.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!defined(n)&&e.imageryProvider.ready&&(n=e.imageryProvider.tilingScheme.tileXYToRectangle(t,i,r)),this.rectangle=n}Imagery.createPlaceholder=function(e){e=new Imagery(e,0,0,0);return e.addReference(),e.state=ImageryState$1.PLACEHOLDER,e},Imagery.prototype.addReference=function(){++this.referenceCount},Imagery.prototype.releaseReference=function(){return--this.referenceCount,0===this.referenceCount?(this.imageryLayer.removeImageryFromCache(this),defined(this.parent)&&this.parent.releaseReference(),defined(this.image)&&defined(this.image.destroy)&&this.image.destroy(),defined(this.texture)&&this.texture.destroy(),defined(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),destroyObject(this),0):this.referenceCount},Imagery.prototype.processStateMachine=function(e,t,i){this.state!==ImageryState$1.UNLOADED||i||(this.state=ImageryState$1.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===ImageryState$1.RECEIVED&&(this.state=ImageryState$1.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));i=this.state===ImageryState$1.READY&&t&&!this.texture;this.state!==ImageryState$1.TEXTURE_LOADED&&!i||(this.state=ImageryState$1.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var ImagerySplitDirection={LEFT:-1,NONE:0,RIGHT:1},ImagerySplitDirection$1=Object.freeze(ImagerySplitDirection);function TileImagery(e,t,i){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=i}function ImageryLayer(e,t){this._imageryProvider=e,t=defaultValue(t,defaultValue.EMPTY_OBJECT),this.alpha=defaultValue(t.alpha,defaultValue(e.defaultAlpha,1)),this.nightAlpha=defaultValue(t.nightAlpha,defaultValue(e.defaultNightAlpha,1)),this.dayAlpha=defaultValue(t.dayAlpha,defaultValue(e.defaultDayAlpha,1)),this.brightness=defaultValue(t.brightness,defaultValue(e.defaultBrightness,ImageryLayer.DEFAULT_BRIGHTNESS)),this.contrast=defaultValue(t.contrast,defaultValue(e.defaultContrast,ImageryLayer.DEFAULT_CONTRAST)),this.hue=defaultValue(t.hue,defaultValue(e.defaultHue,ImageryLayer.DEFAULT_HUE)),this.saturation=defaultValue(t.saturation,defaultValue(e.defaultSaturation,ImageryLayer.DEFAULT_SATURATION)),this.gamma=defaultValue(t.gamma,defaultValue(e.defaultGamma,ImageryLayer.DEFAULT_GAMMA)),this.splitDirection=defaultValue(t.splitDirection,defaultValue(e.defaultSplit,ImageryLayer.DEFAULT_SPLIT)),this.minificationFilter=defaultValue(t.minificationFilter,defaultValue(e.defaultMinificationFilter,ImageryLayer.DEFAULT_MINIFICATION_FILTER)),this.magnificationFilter=defaultValue(t.magnificationFilter,defaultValue(e.defaultMagnificationFilter,ImageryLayer.DEFAULT_MAGNIFICATION_FILTER)),this.show=defaultValue(t.show,!0),this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=defaultValue(t.rectangle,Rectangle.MAX_VALUE),this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new TileImagery(Imagery.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=defaultValue(t.colorToAlphaThreshold,ImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD)}TileImagery.prototype.freeResources=function(){defined(this.readyImagery)&&this.readyImagery.releaseReference(),defined(this.loadingImagery)&&this.loadingImagery.releaseReference()},TileImagery.prototype.processStateMachine=function(e,t,i){var r=this.loadingImagery,n=r.imageryLayer;if(r.processStateMachine(t,!this.useWebMercatorT,i),r.state===ImageryState$1.READY)return defined(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=n._calculateTextureTranslationAndScale(e,this),!0;for(var a,o=r.parent;defined(o)&&(o.state!==ImageryState$1.READY||!this.useWebMercatorT&&!defined(o.texture));)o.state!==ImageryState$1.FAILED&&o.state!==ImageryState$1.INVALID&&(a=a||o),o=o.parent;return this.readyImagery!==o&&(defined(this.readyImagery)&&this.readyImagery.releaseReference(),defined(this.readyImagery=o)&&(o.addReference(),this.textureTranslationAndScale=n._calculateTextureTranslationAndScale(e,this))),(r.state===ImageryState$1.FAILED||r.state===ImageryState$1.INVALID)&&(!defined(a)||(a.processStateMachine(t,!this.useWebMercatorT,i),!1))},Object.defineProperties(ImageryLayer.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},rectangle:{get:function(){return this._rectangle}}}),ImageryLayer.DEFAULT_BRIGHTNESS=1,ImageryLayer.DEFAULT_CONTRAST=1,ImageryLayer.DEFAULT_HUE=0,ImageryLayer.DEFAULT_SATURATION=1,ImageryLayer.DEFAULT_GAMMA=1,ImageryLayer.DEFAULT_SPLIT=ImagerySplitDirection$1.NONE,ImageryLayer.DEFAULT_MINIFICATION_FILTER=TextureMinificationFilter$1.LINEAR,ImageryLayer.DEFAULT_MAGNIFICATION_FILTER=TextureMagnificationFilter$1.LINEAR,ImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004,ImageryLayer.prototype.isBaseLayer=function(){return this._isBaseLayer},ImageryLayer.prototype.isDestroyed=function(){return!1},ImageryLayer.prototype.destroy=function(){return destroyObject(this)};var imageryBoundsScratch=new Rectangle,tileImageryBoundsScratch=new Rectangle,clippedRectangleScratch=new Rectangle,terrainRectangleScratch=new Rectangle;function getSamplerKey(e,t,i){return e+":"+t+":"+i}function getImageryCacheKey(e,t,i){return JSON.stringify([e,t,i])}ImageryLayer.prototype.getViewableRectangle=function(){var e=this._imageryProvider,t=this._rectangle;return e.readyPromise.then(function(){return Rectangle.intersection(e.rectangle,t)})},ImageryLayer.prototype._createTileImagerySkeletons=function(e,t,i){var r=e.data;if(defined(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel)return!1;if(defined(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;var n=this._imageryProvider;if(defined(i)||(i=r.imagery.length),!n.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),r.imagery.splice(i,0,this._skeletonPlaceholder),!0;var a=n.tilingScheme.projection instanceof WebMercatorProjection&&e.rectangle.north<WebMercatorProjection.MaximumLatitude&&e.rectangle.south>-WebMercatorProjection.MaximumLatitude,o=Rectangle.intersection(n.rectangle,this._rectangle,imageryBoundsScratch);if(!defined(c=Rectangle.intersection(e.rectangle,o,tileImageryBoundsScratch))){if(!this.isBaseLayer())return!1;var s=o,l=e.rectangle,c=tileImageryBoundsScratch;l.south>=s.north?c.north=c.south=s.north:l.north<=s.south?c.north=c.south=s.south:(c.south=Math.max(l.south,s.south),c.north=Math.min(l.north,s.north)),l.west>=s.east?c.west=c.east=s.east:l.east<=s.west?c.west=c.east=s.west:(c.west=Math.max(l.west,s.west),c.east=Math.min(l.east,s.east))}s=0;0<c.south?s=c.south:c.north<0&&(s=c.north);var u=getLevelWithMaximumTexelSpacing(this,+t.getLevelMaximumGeometricError(e.level),s),u=Math.max(0,u),s=n.maximumLevel;s<u&&(u=s),!defined(n.minimumLevel)||u<(s=n.minimumLevel)&&(u=s);var n=n.tilingScheme,d=n.positionToTileXY(Rectangle.northwest(c),u),h=n.positionToTileXY(Rectangle.southeast(c),u),p=e.rectangle.width/512,m=e.rectangle.height/512,c=n.tileXYToRectangle(d.x,d.y,u);Math.abs(c.south-e.rectangle.north)<m&&d.y<h.y&&++d.y,Math.abs(c.east-e.rectangle.west)<p&&d.x<h.x&&++d.x;c=n.tileXYToRectangle(h.x,h.y,u);Math.abs(c.north-e.rectangle.south)<m&&h.y>d.y&&--h.y,Math.abs(c.west-e.rectangle.east)<p&&h.x>d.x&&--h.x;var f,g,_=Rectangle.clone(e.rectangle,terrainRectangleScratch),y=n.tileXYToRectangle(d.x,d.y,u),C=Rectangle.intersection(y,o,clippedRectangleScratch);a?(n.rectangleToNativeRectangle(_,_),n.rectangleToNativeRectangle(y,y),n.rectangleToNativeRectangle(C,C),n.rectangleToNativeRectangle(o,o),f=n.tileXYToNativeRectangle.bind(n),p=_.width/512,m=_.height/512):f=n.tileXYToRectangle.bind(n);var v=0,S=1;!this.isBaseLayer()&&Math.abs(C.west-_.west)>=p&&(v=Math.min(1,(C.west-_.west)/_.width));for(var x=S=!this.isBaseLayer()&&Math.abs(C.north-_.north)>=m?Math.max(0,(C.north-_.south)/_.height):S,T=d.x;T<=h.x;T++)if(g=v,y=f(T,d.y,u),defined(C=Rectangle.simpleIntersection(y,o,clippedRectangleScratch))){v=Math.min(1,(C.east-_.west)/_.width),T===h.x&&(this.isBaseLayer()||Math.abs(C.east-_.east)<p)&&(v=1),S=x;for(var b=d.y;b<=h.y;b++){var E,P=S,y=f(T,b,u);defined(C=Rectangle.simpleIntersection(y,o,clippedRectangleScratch))&&(S=Math.max(0,(C.south-_.south)/_.height),E=new Cartesian4(g,S=b===h.y&&(this.isBaseLayer()||Math.abs(C.south-_.south)<m)?0:S,v,P),P=this.getImageryFromCache(T,b,u),r.imagery.splice(i,0,new TileImagery(P,E,a)),++i)}}return!0},ImageryLayer.prototype._calculateTextureTranslationAndScale=function(e,t){var i=t.readyImagery.rectangle,r=e.rectangle;t.useWebMercatorT&&(i=(a=t.readyImagery.imageryLayer.imageryProvider.tilingScheme).rectangleToNativeRectangle(i,imageryBoundsScratch),r=a.rectangleToNativeRectangle(r,terrainRectangleScratch));var n=r.width,e=r.height,t=n/i.width,a=e/i.height;return new Cartesian4(t*(r.west-i.west)/n,a*(r.south-i.south)/e,t,a)},ImageryLayer.prototype._requestImagery=function(i){var r=this._imageryProvider,n=this;function t(e){if(!defined(e))return a();i.image=e,i.state=ImageryState$1.RECEIVED,i.request=void 0,TileProviderError.handleSuccess(n._requestImageError),n.onAddTileSuccess&&n.onAddTileSuccess(i)}function a(e){if(i.request.state===RequestState$1.CANCELLED)return i.state=ImageryState$1.UNLOADED,void(i.request=void 0);i.state=ImageryState$1.FAILED,i.request=void 0;var t="无法获得图块 X: "+i.x+" Y: "+i.y+" Level: "+i.level+".";n._requestImageError=TileProviderError.handleError(n._requestImageError,r,r.errorEvent,t,i.x,i.y,i.level,o,e),n.onAddTileError&&n.onAddTileError(i)}function o(){var e=new Request({throttle:!1,throttleByServer:!0,type:RequestType$1.IMAGERY});i.request=e,i.state=ImageryState$1.TRANSITIONING;e=r.requestImage(i.x,i.y,i.level,e);if(!defined(e))return i.state=ImageryState$1.UNLOADED,void(i.request=void 0);defined(r.getTileCredits)&&(i.credits=r.getTileCredits(i.x,i.y,i.level)),n.onAddTile&&n.onAddTile(i),when(e,t,a)}o()},ImageryLayer.prototype._createTextureWebGL=function(e,t){var i=new Sampler({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),t=t.image;return defined(t.internalFormat)?new Texture({context:e,pixelFormat:t.internalFormat,width:t.width,height:t.height,source:{arrayBufferView:t.bufferView},sampler:i}):new Texture({context:e,source:t,pixelFormat:this._imageryProvider.hasAlphaChannel?PixelFormat$1.RGBA:PixelFormat$1.RGB,sampler:i})},ImageryLayer.prototype._createTexture=function(e,t){var i=this._imageryProvider,r=t.image;if(defined(i.tileDiscardPolicy)){var n=i.tileDiscardPolicy;if(defined(n)){if(!n.isReady())return void(t.state=ImageryState$1.RECEIVED);if(n.shouldDiscardImage(r))return void(t.state=ImageryState$1.INVALID)}}e=this._createTextureWebGL(e,t);i.tilingScheme.projection instanceof WebMercatorProjection?t.textureWebMercator=e:t.texture=e,t.image=void 0,t.state=ImageryState$1.TEXTURE_LOADED},ImageryLayer.prototype._finalizeReprojectTexture=function(e,t){var i,r,n,a,o=this.minificationFilter,s=this.magnificationFilter;o===TextureMinificationFilter$1.LINEAR&&s===TextureMagnificationFilter$1.LINEAR&&!PixelFormat$1.isCompressedFormat(t.pixelFormat)&&CesiumMath.isPowerOfTwo(t.width)&&CesiumMath.isPowerOfTwo(t.height)?(o=TextureMinificationFilter$1.LINEAR_MIPMAP_LINEAR,a=ContextLimits.maximumTextureFilterAnisotropy,i=getSamplerKey(o,s,n=Math.min(a,defaultValue(this._maximumAnisotropy,a))),defined(r=e.cache.imageryLayerMipmapSamplers)||(r={},e.cache.imageryLayerMipmapSamplers=r),defined(a=r[i])||(a=r[i]=new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:o,magnificationFilter:s,maximumAnisotropy:n})),t.generateMipmap(MipmapHint$1.NICEST),t.sampler=a):(n=getSamplerKey(o,s,0),defined(a=e.cache.imageryLayerNonMipmapSamplers)||(a={},e.cache.imageryLayerNonMipmapSamplers=a),defined(e=a[n])||(e=a[n]=new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:o,magnificationFilter:s})),t.sampler=e)},ImageryLayer.prototype._reprojectTexture=function(e,t,i){var r,n=t.textureWebMercator||t.texture,a=t.rectangle,o=e.context;(i=defaultValue(i,!0))&&!(this._imageryProvider.tilingScheme.projection instanceof GeographicProjection)&&1e-5<a.width/n.width?(r=this,t.addReference(),a=new ComputeCommand({persists:!0,owner:this,preExecute:function(e){reprojectToGeographic(e,o,n,t.rectangle)},postExecute:function(e){t.texture=e,r._finalizeReprojectTexture(o,e),t.state=ImageryState$1.READY,t.releaseReference()},canceled:function(){t.state=ImageryState$1.TEXTURE_LOADED,t.releaseReference()}}),this._reprojectComputeCommands.push(a)):(i&&(t.texture=n),this._finalizeReprojectTexture(o,n),t.state=ImageryState$1.READY)},ImageryLayer.prototype.queueReprojectionCommands=function(e){for(var t=this._reprojectComputeCommands,i=t.length,r=0;r<i;++r)e.commandList.push(t[r]);t.length=0},ImageryLayer.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){defined(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0},ImageryLayer.prototype.getImageryFromCache=function(e,t,i,r){var n=getImageryCacheKey(e,t,i),a=this._imageryCache[n];return defined(a)||(a=new Imagery(this,e,t,i,r),this._imageryCache[n]=a),a.addReference(),a},ImageryLayer.prototype.removeImageryFromCache=function(e){this.onRemoveTile&&this.onRemoveTile(e);e=getImageryCacheKey(e.x,e.y,e.level);delete this._imageryCache[e]};var uniformMap={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new Cartesian2,texture:void 0},float32ArrayScratch=FeatureDetection.supportsTypedArrays()?new Float32Array(128):void 0;function reprojectToGeographic(e,t,i,r){if(!defined(n=t.cache.imageryLayer_reproject)){for(var n=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){defined(this.framebuffer)&&this.framebuffer.destroy(),defined(this.vertexArray)&&this.vertexArray.destroy(),defined(this.shaderProgram)&&this.shaderProgram.destroy()}},a=new Float32Array(256),o=0,s=0;s<64;++s){var l=s/63;a[o++]=0,a[o++]=l,a[o++]=1,a[o++]=l}var c={position:0,webMercatorT:1},u=TerrainProvider.getRegularGridIndices(2,64),u=Buffer$1.createIndexBuffer({context:t,typedArray:u,usage:BufferUsage$1.STATIC_DRAW,indexDatatype:IndexDatatype$1.UNSIGNED_SHORT});n.vertexArray=new VertexArray({context:t,attributes:[{index:c.position,vertexBuffer:Buffer$1.createVertexBuffer({context:t,typedArray:a,usage:BufferUsage$1.STATIC_DRAW}),componentsPerAttribute:2},{index:c.webMercatorT,vertexBuffer:Buffer$1.createVertexBuffer({context:t,sizeInBytes:512,usage:BufferUsage$1.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:u});u=new ShaderSource({sources:[ReprojectWebMercatorVS]});n.shaderProgram=ShaderProgram.fromCache({context:t,vertexShaderSource:u,fragmentShaderSource:ReprojectWebMercatorFS,attributeLocations:c}),n.sampler=new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:TextureMinificationFilter$1.LINEAR,magnificationFilter:TextureMagnificationFilter$1.LINEAR})}i.sampler=n.sampler;u=i.width,c=i.height;uniformMap.textureDimensions.x=u,uniformMap.textureDimensions.y=c,uniformMap.texture=i;var d=Math.sin(r.south),h=.5*Math.log((1+d)/(1-d));d=Math.sin(r.north);var p=1/(.5*Math.log((1+d)/(1-d))-h),i=new Texture({context:t,width:u,height:c,pixelFormat:i.pixelFormat,pixelDatatype:i.pixelDatatype,preMultiplyAlpha:i.preMultiplyAlpha});CesiumMath.isPowerOfTwo(u)&&CesiumMath.isPowerOfTwo(c)&&i.generateMipmap(MipmapHint$1.NICEST);for(var m=r.south,f=r.north,g=float32ArrayScratch,_=0,y=0;y<64;++y){var C=y/63,C=CesiumMath.lerp(m,f,C),d=Math.sin(C),C=(.5*Math.log((1+d)/(1-d))-h)*p;g[_++]=C,g[_++]=C}n.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(g),e.shaderProgram=n.shaderProgram,e.outputTexture=i,e.uniformMap=uniformMap,e.vertexArray=n.vertexArray}function getLevelWithMaximumTexelSpacing(e,t,i){var r=e._imageryProvider,n=r.tilingScheme,a=n.ellipsoid,e=e._imageryProvider.tilingScheme.projection instanceof GeographicProjection?1:Math.cos(i),i=n.rectangle,t=a.maximumRadius*i.width*e/(r.tileWidth*n.getNumberOfXTilesAtLevel(0))/t,t=Math.log(t)/Math.log(2);return 0|Math.round(t)}var TileSelectionResult={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=TileSelectionResult.RENDERED_AND_KICKED},originalResult:function(e){return 3&e},kick:function(e){return 4|e}};function TerrainFillMesh(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new Cartesian4}TerrainFillMesh.prototype.update=function(e,t,i){this.changedThisFrame&&(createFillMesh(e,t,this.tile,i),this.changedThisFrame=!1)},TerrainFillMesh.prototype.destroy=function(e){defined(this.vertexArray)&&(defined(e)?e.push(this.vertexArray):GlobeSurfaceTile._freeVertexArray(this.vertexArray,e),this.vertexArray=void 0),defined(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,0===this.waterMaskTexture.referenceCount&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};var traversalQueueScratch=new Queue;function visitRenderedTiles(e,t,i,r,n,a,o,s,l){if(void 0!==r){for(var c=r;c&&(c._lastSelectionResultFrame!==n||TileSelectionResult.wasKicked(c._lastSelectionResult)||TileSelectionResult.originalResult(c._lastSelectionResult)===TileSelectionResult.CULLED);){if(o)return;var u=c.parent;if(a>=TileEdge.NORTHWEST&&void 0!==u)switch(a){case TileEdge.NORTHWEST:c=c===u.northwestChild?u:void 0;break;case TileEdge.NORTHEAST:c=c===u.northeastChild?u:void 0;break;case TileEdge.SOUTHWEST:c=c===u.southwestChild?u:void 0;break;case TileEdge.SOUTHEAST:c=c===u.southeastChild?u:void 0}else c=u}if(void 0!==c){if(c._lastSelectionResult===TileSelectionResult.RENDERED)return!defined(c.data.vertexArray)&&void visitTile$1(e,t,i,c,a,n,s,l);if(TileSelectionResult.originalResult(r._lastSelectionResult)!==TileSelectionResult.CULLED)switch(a){case TileEdge.WEST:visitRenderedTiles(e,t,i,r.northwestChild,n,a,!0,s,l),visitRenderedTiles(e,t,i,r.southwestChild,n,a,!0,s,l);break;case TileEdge.EAST:visitRenderedTiles(e,t,i,r.southeastChild,n,a,!0,s,l),visitRenderedTiles(e,t,i,r.northeastChild,n,a,!0,s,l);break;case TileEdge.SOUTH:visitRenderedTiles(e,t,i,r.southwestChild,n,a,!0,s,l),visitRenderedTiles(e,t,i,r.southeastChild,n,a,!0,s,l);break;case TileEdge.NORTH:visitRenderedTiles(e,t,i,r.northeastChild,n,a,!0,s,l),visitRenderedTiles(e,t,i,r.northwestChild,n,a,!0,s,l);break;case TileEdge.NORTHWEST:visitRenderedTiles(e,t,i,r.northwestChild,n,a,!0,s,l);break;case TileEdge.NORTHEAST:visitRenderedTiles(e,t,i,r.northeastChild,n,a,!0,s,l);break;case TileEdge.SOUTHWEST:visitRenderedTiles(e,t,i,r.southwestChild,n,a,!0,s,l);break;case TileEdge.SOUTHEAST:visitRenderedTiles(e,t,i,r.southeastChild,n,a,!0,s,l);break;default:throw new DeveloperError("Invalid edge")}}}}function visitTile$1(e,t,i,r,n,a,o,s){var l=r.data;if(void 0===l.fill)l.fill=new TerrainFillMesh(r);else if(l.fill.visitedFrame===a)return;l.fill.enqueuedFrame!==a&&(l.fill.enqueuedFrame=a,l.fill.changedThisFrame=!1,o.enqueue(r)),propagateEdge(e,t,i,r,n,s)}function propagateEdge(e,t,i,r,n,a){var o,s,l,c,u,d=r.data.fill,h=i.data.fill,p=defined(h)?(h.visitedFrame=t.frameNumber,h.changedThisFrame&&(createFillMesh(e,t,i,a),h.changedThisFrame=!1),i.data.fill.mesh):i.data.mesh;switch(n){case TileEdge.WEST:o=d.westMeshes,s=d.westTiles;break;case TileEdge.SOUTH:o=d.southMeshes,s=d.southTiles;break;case TileEdge.EAST:o=d.eastMeshes,s=d.eastTiles;break;case TileEdge.NORTH:o=d.northMeshes,s=d.northTiles;break;case TileEdge.NORTHWEST:return d.changedThisFrame=d.changedThisFrame||d.northwestMesh!==p,d.northwestMesh=p,void(d.northwestTile=i);case TileEdge.NORTHEAST:return d.changedThisFrame=d.changedThisFrame||d.northeastMesh!==p,d.northeastMesh=p,void(d.northeastTile=i);case TileEdge.SOUTHWEST:return d.changedThisFrame=d.changedThisFrame||d.southwestMesh!==p,d.southwestMesh=p,void(d.southwestTile=i);case TileEdge.SOUTHEAST:return d.changedThisFrame=d.changedThisFrame||d.southeastMesh!==p,d.southeastMesh=p,void(d.southeastTile=i)}if(i.level<=r.level)return d.changedThisFrame=d.changedThisFrame||o[0]!==p||1!==o.length,o[0]=p,s[0]=i,o.length=1,void(s.length=1);var m,f=i.rectangle,g=r.rectangle;switch(n){case TileEdge.WEST:for(m=(g.north-g.south)*CesiumMath.EPSILON5,l=0;l<s.length&&(u=s[l].rectangle,!CesiumMath.greaterThan(f.north,u.south,m));++l);for(c=l;c<s.length&&(u=s[c].rectangle,!CesiumMath.greaterThanOrEquals(f.south,u.north,m));++c);break;case TileEdge.SOUTH:for(m=(g.east-g.west)*CesiumMath.EPSILON5,l=0;l<s.length&&(u=s[l].rectangle,!CesiumMath.lessThan(f.west,u.east,m));++l);for(c=l;c<s.length&&(u=s[c].rectangle,!CesiumMath.lessThanOrEquals(f.east,u.west,m));++c);break;case TileEdge.EAST:for(m=(g.north-g.south)*CesiumMath.EPSILON5,l=0;l<s.length&&(u=s[l].rectangle,!CesiumMath.lessThan(f.south,u.north,m));++l);for(c=l;c<s.length&&(u=s[c].rectangle,!CesiumMath.lessThanOrEquals(f.north,u.south,m));++c);break;case TileEdge.NORTH:for(m=(g.east-g.west)*CesiumMath.EPSILON5,l=0;l<s.length&&(u=s[l].rectangle,!CesiumMath.greaterThan(f.east,u.west,m));++l);for(c=l;c<s.length&&(u=s[c].rectangle,!CesiumMath.greaterThanOrEquals(f.west,u.east,m));++c);}c-l==1?(d.changedThisFrame=d.changedThisFrame||o[l]!==p,o[l]=p,s[l]=i):(d.changedThisFrame=!0,o.splice(l,c-l,p),s.splice(l,c-l,i))}TerrainFillMesh.updateFillTiles=function(e,t,i,r){var n=e._quadtree,a=n._levelZeroTiles,o=n._lastSelectionFrameNumber,s=traversalQueueScratch;s.clear();for(var l=0;l<t.length;++l)defined(t[l].data.vertexArray)&&s.enqueue(t[l]);for(var c=s.dequeue();void 0!==c;){var u=c.findTileToWest(a),d=c.findTileToSouth(a),h=c.findTileToEast(a),p=c.findTileToNorth(a);visitRenderedTiles(e,i,c,u,o,TileEdge.EAST,!1,s,r),visitRenderedTiles(e,i,c,d,o,TileEdge.NORTH,!1,s,r),visitRenderedTiles(e,i,c,h,o,TileEdge.WEST,!1,s,r),visitRenderedTiles(e,i,c,p,o,TileEdge.SOUTH,!1,s,r);d=u.findTileToNorth(a),p=u.findTileToSouth(a),u=h.findTileToNorth(a),h=h.findTileToSouth(a);visitRenderedTiles(e,i,c,d,o,TileEdge.SOUTHEAST,!1,s,r),visitRenderedTiles(e,i,c,u,o,TileEdge.SOUTHWEST,!1,s,r),visitRenderedTiles(e,i,c,p,o,TileEdge.NORTHEAST,!1,s,r),visitRenderedTiles(e,i,c,h,o,TileEdge.NORTHWEST,!1,s,r),c=s.dequeue()}};var cartographicScratch=new Cartographic,centerCartographicScratch=new Cartographic,cartesianScratch=new Cartesian3,normalScratch=new Cartesian3,octEncodedNormalScratch=new Cartesian2,uvScratch2=new Cartesian2,uvScratch=new Cartesian2;function HeightAndNormal(){this.height=0,this.encodedNormal=new Cartesian2}function fillMissingCorner(e,t,i,r,n,a,o,s,l){if(defined(n))return n;var c=defined(a)&&defined(o)?.5*(a.height+o.height):defined(a)?a.height:defined(o)?o.height:defined(s)?s.height:(c=o=0,defined(s=e.tile.data.tileBoundingRegion)&&(o=s.minimumHeight,c=s.maximumHeight),.5*(o+c));return getVertexWithHeightAtCorner(e,t,i,r,c,l),l}var heightRangeScratch={minimumHeight:0,maximumHeight:0},swVertexScratch=new HeightAndNormal,seVertexScratch=new HeightAndNormal,nwVertexScratch=new HeightAndNormal,neVertexScratch=new HeightAndNormal,heightmapBuffer="undefined"!=typeof Uint8Array?new Uint8Array(81):void 0,scratchCreateMeshSyncOptions={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1};function createFillMesh(e,t,i,r){GlobeSurfaceTile.initialize(i,e.terrainProvider,e._imageryLayers);var n=i.data,a=n.fill,o=i.rectangle,s=i.tilingScheme.ellipsoid,l=getCorner(a,s,0,1,a.northwestTile,a.northwestMesh,a.northTiles,a.northMeshes,a.westTiles,a.westMeshes,nwVertexScratch),c=getCorner(a,s,0,0,a.southwestTile,a.southwestMesh,a.westTiles,a.westMeshes,a.southTiles,a.southMeshes,swVertexScratch),u=getCorner(a,s,1,0,a.southeastTile,a.southeastMesh,a.southTiles,a.southMeshes,a.eastTiles,a.eastMeshes,seVertexScratch),l=fillMissingCorner(a,s,0,1,l,c,d=getCorner(a,s,1,1,a.northeastTile,a.northeastMesh,a.eastTiles,a.eastMeshes,a.northTiles,a.northMeshes,neVertexScratch),u,nwVertexScratch),c=fillMissingCorner(a,s,0,0,c,l,u,d,swVertexScratch),u=fillMissingCorner(a,s,1,1,u,c,d,l,seVertexScratch),d=fillMissingCorner(a,s,1,1,d,u,l,c,neVertexScratch),h=c.height,p=u.height,m=l.height,f=d.height,h=.5*((P=Math.min(h,p,m,f))+(A=Math.max(h,p,m,f))),p=e.getLevelMaximumGeometricError(i.level),m=s.maximumRadius-p,f=4*Math.acos(m/s.maximumRadius);if(f*=1.5,o.width>f&&A-P<=p){var g=new HeightmapTerrainData({width:9,height:9,buffer:heightmapBuffer,structure:{heightOffset:A}}),_=scratchCreateMeshSyncOptions;_.tilingScheme=i.tilingScheme,_.x=i.x,_.y=i.y,_.level=i.level,a.mesh=g._createMeshSync(_)}else{var y=new TerrainEncoding(void 0,void 0,void 0,void 0,!0,!0),m=centerCartographicScratch;m.longitude=.5*(o.east+o.west),m.latitude=.5*(o.north+o.south),m.height=h,y.center=s.cartographicToCartesian(m,y.center);for(var C=5,v=a.westMeshes,S=0,x=v.length;S<x;++S)C+=v[S].eastIndicesNorthToSouth.length;for(S=0,x=(v=a.southMeshes).length;S<x;++S)C+=v[S].northIndicesWestToEast.length;for(S=0,x=(v=a.eastMeshes).length;S<x;++S)C+=v[S].westIndicesSouthToNorth.length;for(S=0,x=(v=a.northMeshes).length;S<x;++S)C+=v[S].southIndicesEastToWest.length;f=heightRangeScratch;f.minimumHeight=P,f.maximumHeight=A;var p=y.getStride(),g=0,T=g=addEdge(a,s,y,_=new Float32Array(C*p),g=addVertexWithComputedPosition(s,o,y,_,0,0,1,l.height,l.encodedNormal,1,f),a.westTiles,a.westMeshes,TileEdge.EAST,f),b=g=addEdge(a,s,y,_,g=addVertexWithComputedPosition(s,o,y,_,g,0,0,c.height,c.encodedNormal,0,f),a.southTiles,a.southMeshes,TileEdge.NORTH,f),E=g=addEdge(a,s,y,_,g=addVertexWithComputedPosition(s,o,y,_,g,1,0,u.height,u.encodedNormal,0,f),a.eastTiles,a.eastMeshes,TileEdge.WEST,f);g=addEdge(a,s,y,_,g=addVertexWithComputedPosition(s,o,y,_,g,1,1,d.height,d.encodedNormal,1,f),a.northTiles,a.northMeshes,TileEdge.SOUTH,f);var P=f.minimumHeight,A=f.maximumHeight,u=OrientedBoundingBox.fromRectangle(o,P,A,i.tilingScheme.ellipsoid),d=WebMercatorProjection.geodeticLatitudeToMercatorAngle(o.south),f=1/(WebMercatorProjection.geodeticLatitudeToMercatorAngle(o.north)-d),f=(WebMercatorProjection.geodeticLatitudeToMercatorAngle(m.latitude)-d)*f;s.geodeticSurfaceNormalCartographic(cartographicScratch,normalScratch);var s=AttributeCompression.octEncode(normalScratch,octEncodedNormalScratch),w=g;y.encode(_,g*p,u.center,Cartesian2.fromElements(.5,.5,uvScratch),h,s,f);var D,M=++g,f=3*(M-1);D=f*(M<256?1:2)<=(_.length-M*p)*Float32Array.BYTES_PER_ELEMENT?(g=M*p*Float32Array.BYTES_PER_ELEMENT,new(M<256?Uint8Array:Uint16Array)(_.buffer,g,f)):new(M<256?Uint8Array:Uint16Array)(f);var _=new Float32Array(_.buffer,0,M*p),I=0;for(S=0;S<M-2;++S)D[I++]=w,D[I++]=S,D[I++]=S+1;D[I++]=w,D[I++]=S,D[I++]=0;var R=[];for(S=T;0<=S;--S)R.push(S);var O=[];for(S=b;T<=S;--S)O.push(S);var L=[];for(S=E;b<=S;--S)L.push(S);var F=[];for(F.push(0),S=w-1;E<=S;--S)F.push(S);a.mesh=new TerrainMesh(y.center,_,D,f,M,P,A,BoundingSphere.fromOrientedBoundingBox(u),computeOccludeePoint$1(e,u.center,o,P,A),y.getStride(),u,y,t.terrainExaggeration,R,O,L,F)}y=t.context;defined(a.vertexArray)&&(defined(r)?r.push(a.vertexArray):GlobeSurfaceTile._freeVertexArray(a.vertexArray)),a.vertexArray=GlobeSurfaceTile._createVertexArrayForMesh(y,a.mesh),n.processImagery(i,e.terrainProvider,t,!0);t=a.waterMaskTexture;a.waterMaskTexture=void 0,!e.terrainProvider.hasWaterMask||defined(e=n._findAncestorTileWithTerrainData(i))&&defined(e.data.waterMaskTexture)&&(a.waterMaskTexture=e.data.waterMaskTexture,++a.waterMaskTexture.referenceCount,n._computeWaterMaskTranslationAndScale(i,e,a.waterMaskTranslationAndScale)),defined(t)&&(--t.referenceCount,0===t.referenceCount&&t.destroy())}function addVertexWithComputedPosition(e,t,i,r,n,a,o,s,l,c,u){var d=cartographicScratch;d.longitude=CesiumMath.lerp(t.west,t.east,a),d.latitude=CesiumMath.lerp(t.south,t.north,o),d.height=s;e=e.cartographicToCartesian(d,cartesianScratch),d=uvScratch2;return d.x=a,d.y=o,i.encode(r,n*i.getStride(),e,d,s,l,c),u.minimumHeight=Math.min(u.minimumHeight,s),u.maximumHeight=Math.max(u.maximumHeight,s),n+1}var sourceRectangleScratch=new Rectangle;function transformTextureCoordinates(e,t,i,r){var n=e.rectangle,a=t.rectangle;0===t.x&&1===i.x&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?((n=Rectangle.clone(e.rectangle,sourceRectangleScratch)).west-=CesiumMath.TWO_PI,n.east-=CesiumMath.TWO_PI):0===e.x&&0===i.x&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&((n=Rectangle.clone(e.rectangle,sourceRectangleScratch)).west+=CesiumMath.TWO_PI,n.east+=CesiumMath.TWO_PI);var o=n.east-n.west,s=(a.west-n.west)/o,t=(a.east-n.west)/o,e=n.north-n.south,o=(a.south-n.south)/e,e=(a.north-n.south)/e,s=(i.x-s)/(t-s),o=(i.y-o)/(e-o);return Math.abs(s)<Math.EPSILON5?s=0:Math.abs(s-1)<Math.EPSILON5&&(s=1),Math.abs(o)<Math.EPSILON5?o=0:Math.abs(o-1)<Math.EPSILON5&&(o=1),r.x=s,r.y=o,r}var encodedNormalScratch=new Cartesian2;function getVertexFromTileAtCorner(e,t,i,r,n){var a=e.encoding,e=e.vertices;n.height=a.decodeHeight(e,t),a.hasVertexNormals?a.getOctEncodedNormal(e,t,n.encodedNormal):((n=n.encodedNormal).x=0,n.y=0)}var encodedNormalScratch2=new Cartesian2,cartesianScratch2=new Cartesian3;function getInterpolatedVertexAtCorner(e,t,i,r,n,a,o,s,l,c){var u,d=r.encoding,h=r.vertices,r=transformTextureCoordinates(t,i,d.decodeTextureCoordinates(h,n,uvScratch),uvScratch),t=transformTextureCoordinates(t,i,d.decodeTextureCoordinates(h,a,uvScratch2),uvScratch2),l=l?(o-r.x)/(t.x-r.x):(s-r.y)/(t.y-r.y),t=d.decodeHeight(h,n),r=d.decodeHeight(h,a),i=i.rectangle;cartographicScratch.longitude=CesiumMath.lerp(i.west,i.east,o),cartographicScratch.latitude=CesiumMath.lerp(i.south,i.north,s),c.height=cartographicScratch.height=CesiumMath.lerp(t,r,l),d.hasVertexNormals?(n=d.getOctEncodedNormal(h,n,encodedNormalScratch),u=d.getOctEncodedNormal(h,a,encodedNormalScratch2),n=AttributeCompression.octDecode(n.x,n.y,cartesianScratch),u=AttributeCompression.octDecode(u.x,u.y,cartesianScratch2),u=Cartesian3.lerp(n,u,l,cartesianScratch),Cartesian3.normalize(u,u)):u=e.geodeticSurfaceNormalCartographic(cartographicScratch,cartesianScratch),AttributeCompression.octEncode(u,c.encodedNormal)}function getVertexWithHeightAtCorner(e,t,i,r,n,a){a.height=n;t=t.geodeticSurfaceNormalCartographic(cartographicScratch,cartesianScratch);AttributeCompression.octEncode(t,a.encodedNormal)}function getCorner(e,t,i,r,n,a,o,s,l,c,u){return getCornerFromEdge(e,t,s,o,!1,i,r,u)||getCornerFromEdge(e,t,c,l,!0,i,r,u)?u:meshIsUsable(n,a)?(getVertexFromTileAtCorner(a,(0===i?0===r?a.eastIndicesNorthToSouth:a.southIndicesEastToWest:0===r?a.northIndicesWestToEast:a.westIndicesSouthToNorth)[0],i,r,u),u):defined(a=0===i?0===r?getClosestHeightToCorner(e.westMeshes,e.westTiles,TileEdge.EAST,e.southMeshes,e.southTiles,TileEdge.NORTH):getClosestHeightToCorner(e.northMeshes,e.northTiles,TileEdge.SOUTH,e.westMeshes,e.westTiles,TileEdge.EAST):0===r?getClosestHeightToCorner(e.southMeshes,e.southTiles,TileEdge.NORTH,e.eastMeshes,e.eastTiles,TileEdge.WEST):getClosestHeightToCorner(e.eastMeshes,e.eastTiles,TileEdge.WEST,e.northMeshes,e.northTiles,TileEdge.SOUTH))?(getVertexWithHeightAtCorner(e,t,i,r,a,u),u):void 0}function getClosestHeightToCorner(e,t,i,r,n,a,o,s){i=getNearestHeightOnEdge(e,t,!1,i),a=getNearestHeightOnEdge(r,n,!0,a);return defined(i)&&defined(a)?.5*(i+a):defined(i)?i:a}function addEdge(e,t,i,r,n,a,o,s,l){for(var c=0;c<a.length;++c)n=addEdgeMesh(e,t,i,r,n,a[c],o[c],s,l);return n}function addEdgeMesh(e,t,i,r,n,a,o,s,l){var c=a.rectangle;s===TileEdge.EAST&&0===e.tile.x?((c=Rectangle.clone(a.rectangle,sourceRectangleScratch)).west-=CesiumMath.TWO_PI,c.east-=CesiumMath.TWO_PI):s===TileEdge.WEST&&0===a.x&&((c=Rectangle.clone(a.rectangle,sourceRectangleScratch)).west+=CesiumMath.TWO_PI,c.east+=CesiumMath.TWO_PI);var u,d,h,p,m=e.tile.rectangle;switch(0<n&&(i.decodeTextureCoordinates(r,n-1,uvScratch),u=uvScratch.x,d=uvScratch.y),s){case TileEdge.WEST:h=o.westIndicesSouthToNorth,p=!1;break;case TileEdge.NORTH:h=o.northIndicesWestToEast,p=!0;break;case TileEdge.EAST:h=o.eastIndicesNorthToSouth,p=!1;break;case TileEdge.SOUTH:h=o.southIndicesEastToWest,p=!0}var f,g,_=a,y=e.tile,C=o.encoding,v=o.vertices,S=i.getStride();C.hasWebMercatorT&&(f=WebMercatorProjection.geodeticLatitudeToMercatorAngle(m.south),g=1/(WebMercatorProjection.geodeticLatitudeToMercatorAngle(m.north)-f));for(var x=0;x<h.length;++x){var T=h[x],b=C.decodeTextureCoordinates(v,T,uvScratch);transformTextureCoordinates(_,y,b,b);var E,P=b.x,A=b.y,w=p?P:A;w<0||1<w||Math.abs(P-u)<CesiumMath.EPSILON5&&Math.abs(A-d)<CesiumMath.EPSILON5||(w=Math.abs(P)<CesiumMath.EPSILON5||Math.abs(P-1)<CesiumMath.EPSILON5,P=Math.abs(A)<CesiumMath.EPSILON5||Math.abs(A-1)<CesiumMath.EPSILON5,w&&P||(w=C.decodePosition(v,T,cartesianScratch),P=C.decodeHeight(v,T),C.hasVertexNormals?E=C.getOctEncodedNormal(v,T,octEncodedNormalScratch):((E=octEncodedNormalScratch).x=0,E.y=0),T=A,C.hasWebMercatorT&&(A=CesiumMath.lerp(m.south,m.north,A),T=(WebMercatorProjection.geodeticLatitudeToMercatorAngle(A)-f)*g),i.encode(r,n*S,w,b,P,E,T),l.minimumHeight=Math.min(l.minimumHeight,P),l.maximumHeight=Math.max(l.maximumHeight,P),++n))}return n}function getNearestHeightOnEdge(e,t,i,r,n,a){for(var o,s,l=i?(o=0,s=e.length,1):(o=e.length-1,s=-1),c=o;c!==s;c+=l){var u,d=e[c];if(meshIsUsable(t[c],d)){switch(r){case TileEdge.WEST:u=d.westIndicesSouthToNorth;break;case TileEdge.SOUTH:u=d.southIndicesEastToWest;break;case TileEdge.EAST:u=d.eastIndicesNorthToSouth;break;case TileEdge.NORTH:u=d.northIndicesWestToEast}var h=u[i?0:u.length-1];if(defined(h))return d.encoding.decodeHeight(d.vertices,h)}}}function meshIsUsable(e,t){return defined(t)&&(!defined(e.data.fill)||!e.data.fill.changedThisFrame)}function getCornerFromEdge(i,e,t,r,n,a,o,s){var l,c,u,d=r[n?0:t.length-1],h=t[n?0:t.length-1];if(meshIsUsable(d,h)&&(u=0===a?0===o?(l=n?h.northIndicesWestToEast:h.eastIndicesNorthToSouth,c=n):(l=n?h.eastIndicesNorthToSouth:h.southIndicesEastToWest,c=!n,!1):0===o?(l=n?h.westIndicesSouthToNorth:h.northIndicesWestToEast,c=!n,!0):(l=n?h.southIndicesEastToWest:h.westIndicesSouthToNorth,!(c=n)),0<l.length)){t=l[r=n?0:l.length-1],h.encoding.decodeTextureCoordinates(h.vertices,t,uvScratch);n=transformTextureCoordinates(d,i.tile,uvScratch,uvScratch);if(n.x===a&&n.y===o)return getVertexFromTileAtCorner(h,t,a,o,s),!0;if(!((r=binarySearch(l,c?a:o,function(e,t){h.encoding.decodeTextureCoordinates(h.vertices,e,uvScratch);e=transformTextureCoordinates(d,i.tile,uvScratch,uvScratch);return u?c?e.x-a:e.y-o:c?a-e.x:o-e.y}))<0))return getVertexFromTileAtCorner(h,l[r],a,o,s),!0;if(0<(r=~r)&&r<l.length)return getInterpolatedVertexAtCorner(e,d,i.tile,h,l[r-1],l[r],a,o,c,s),!0}return!1}var cornerPositionsScratch$1=[new Cartesian3,new Cartesian3,new Cartesian3,new Cartesian3];function computeOccludeePoint$1(e,t,i,r,n,a){var o=e.quadtree._occluders.ellipsoid,s=o.ellipsoid,e=cornerPositionsScratch$1;return Cartesian3.fromRadians(i.west,i.south,n,s,e[0]),Cartesian3.fromRadians(i.east,i.south,n,s,e[1]),Cartesian3.fromRadians(i.west,i.north,n,s,e[2]),Cartesian3.fromRadians(i.east,i.north,n,s,e[3]),o.computeHorizonCullingPointPossiblyUnderEllipsoid(t,e,r,a)}function GlobeSurfaceTileProvider(e){this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=ShadowMode$1.RECEIVE_ONLY,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new Event,this._imageryLayers.layerAdded.addEventListener(GlobeSurfaceTileProvider.prototype._onLayerAdded,this),this._imageryLayers.layerRemoved.addEventListener(GlobeSurfaceTileProvider.prototype._onLayerRemoved,this),this._imageryLayers.layerMoved.addEventListener(GlobeSurfaceTileProvider.prototype._onLayerMoved,this),this._imageryLayers.layerShownOrHidden.addEventListener(GlobeSurfaceTileProvider.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new Event,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new Color(0,0,.5,1),this._clippingPlanes=void 0,this.cartographicLimitRectangle=Rectangle.clone(Rectangle.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._floodAnalysis={floodVar:[0,0,0,500],rect_flood:[0,0,0,0,0,0,0,0,0],floodSpeed:1,ym_max_index:0,globe:!0,showElseArea:!0},this._excavateAnalysis={splitNum:30,showTailorOnly:!1,tailorArea:void 0,enableTailor:!1,inverTailorCenterMat:!1,tailorRect:new Cartesian4,excavateHeight:0,excavateMinHeight:9999,excavatePerPoint:!1}}function sortTileImageryByLayerIndex(e,t){var i=e.loadingImagery;defined(i)||(i=e.readyImagery);e=t.loadingImagery;return defined(e)||(e=t.readyImagery),i.imageryLayer._layerIndex-e.imageryLayer._layerIndex}function updateCredits(e,t){var i=t.creditDisplay;e._terrainProvider.ready&&defined(e._terrainProvider.credit)&&i.addCredit(e._terrainProvider.credit);for(var r=e._imageryLayers,n=0,a=r.length;n<a;++n){var o=r.get(n).imageryProvider;o.ready&&defined(o.credit)&&i.addCredit(o.credit)}}function pushCommand(e,t){var i,r=t.globeTranslucencyState;r.translucent?(i=e.renderState.blending.enabled,r.pushDerivedCommands(e,i,t)):t.commandList.push(e)}Object.defineProperties(GlobeSurfaceTileProvider.prototype,{floodAnalysis:{get:function(){return this._floodAnalysis}},excavateAnalysis:{get:function(){return this._excavateAnalysis}},baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=Cartesian4.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){this._quadtree=e}},ready:{get:function(){return this._terrainProvider.ready&&(0===this._imageryLayers.length||this._imageryLayers.get(0).imageryProvider.ready)}},tilingScheme:{get:function(){return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){this._terrainProvider!==e&&(this._terrainProvider=e,defined(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ClippingPlaneCollection.setOwner(e,this,"_clippingPlanes")}}}),GlobeSurfaceTileProvider.prototype.update=function(e){this._imageryLayers._update()},GlobeSurfaceTileProvider.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(e){e.data.imagery.sort(sortTileImageryByLayerIndex)})),updateCredits(this,e);for(var t=this._vertexArraysToDestroy,i=t.length,r=0;r<i;++r)GlobeSurfaceTile._freeVertexArray(t[r]);t.length=0},GlobeSurfaceTileProvider.prototype.beginUpdate=function(e){for(var t=this._tilesToRenderByTextureCount,i=0,r=t.length;i<r;++i){var n=t[i];defined(n)&&(n.length=0)}var a=this._clippingPlanes;defined(a)&&a.enabled&&a.update(e),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1},GlobeSurfaceTileProvider.prototype.endUpdate=function(e){var t;defined(this._renderState)||(this._renderState=RenderState.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:DepthFunction$1.LESS}}),this._blendRenderState=RenderState.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:DepthFunction$1.LESS_OR_EQUAL},blending:BlendingState$1.ALPHA_BLEND}),(t=clone$1(this._renderState,!0)).cull.enabled=!1,this._disableCullingRenderState=RenderState.fromCache(t),(t=clone$1(this._blendRenderState,!0)).cull.enabled=!1,this._disableCullingBlendRenderState=RenderState.fromCache(t)),this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&TerrainFillMesh.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);for(var i=this._tilesToRenderByTextureCount,r=0,n=i.length;r<n;++r){var a=i[r];if(defined(a))for(var o=0,s=a.length;o<s;++o){var l=a[o],c=l.data.tileBoundingRegion;addDrawCommandsForTile(this,l,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,c.minimumHeight)}}},GlobeSurfaceTileProvider.prototype.updateForPick=function(e){for(var t=this._drawCommands,i=0,r=this._usedDrawCommands;i<r;++i)pushCommand(t[i],e)},GlobeSurfaceTileProvider.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()},GlobeSurfaceTileProvider.prototype.getLevelMaximumGeometricError=function(e){return this._terrainProvider.getLevelMaximumGeometricError(e)},GlobeSurfaceTileProvider.prototype.loadTile=function(e,t){var i,r=t.data,n=!0;defined(r)&&(n=r.boundingVolumeSourceTile!==t||t._lastSelectionResult===TileSelectionResult.CULLED_BUT_NEEDED,i=r.terrainState),GlobeSurfaceTile.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this._vertexArraysToDestroy,n),r=t.data,n&&i!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)!==Visibility$1.NONE&&r.boundingVolumeSourceTile===t&&(n=!1,GlobeSurfaceTile.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this._vertexArraysToDestroy,n))};var boundingSphereScratch$1=new BoundingSphere,rectangleIntersectionScratch=new Rectangle,splitCartographicLimitRectangleScratch=new Rectangle,rectangleCenterScratch=new Cartographic;function clipRectangleAntimeridian(e,t){if(t.west<t.east)return t;t=Rectangle.clone(t,splitCartographicLimitRectangleScratch);return 0<Rectangle.center(e,rectangleCenterScratch).longitude?t.east=CesiumMath.PI:t.west=-CesiumMath.PI,t}function isUndergroundVisible(e,t){if(t.cameraUnderground)return!0;if(t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;t=e._clippingPlanes;return!(!defined(t)||!t.enabled)||!Rectangle.equals(e.cartographicLimitRectangle,Rectangle.MAX_VALUE)}GlobeSurfaceTileProvider.prototype.computeTileVisibility=function(e,t,i){var r=this.computeDistanceToTile(e,t);e._distance=r;var n=isUndergroundVisible(this,t);if(t.fog.enabled&&!n&&1<=CesiumMath.fog(r,t.fog.density))return Visibility$1.NONE;var a=e.data,o=a.tileBoundingRegion;if(void 0===a.boundingVolumeSourceTile)return Visibility$1.PARTIAL;var s=t.cullingVolume,l=a.orientedBoundingBox;!defined(l)&&defined(a.renderedMesh)&&(l=a.renderedMesh.boundingSphere3D),a.clippedByBoundaries=!1;r=clipRectangleAntimeridian(e.rectangle,this.cartographicLimitRectangle),r=Rectangle.simpleIntersection(r,e.rectangle,rectangleIntersectionScratch);if(!defined(r))return Visibility$1.NONE;if(Rectangle.equals(r,e.rectangle)||(a.clippedByBoundaries=!0),t.mode!==SceneMode$1.SCENE3D&&(l=boundingSphereScratch$1,BoundingSphere.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,o.minimumHeight,o.maximumHeight,l),Cartesian3.fromElements(l.center.z,l.center.x,l.center.y,l.center),t.mode===SceneMode$1.MORPHING&&defined(a.renderedMesh)&&(l=BoundingSphere.union(a.renderedMesh.boundingSphere3D,l,l))),!defined(l))return Visibility$1.PARTIAL;var c,r=this._clippingPlanes;if(defined(r)&&r.enabled){r=r.computeIntersectionWithBoundingVolume(l);if(e.isClipped=r!==Intersect$1.INSIDE,r===Intersect$1.OUTSIDE)return Visibility$1.NONE}l=s.computeVisibility(l);if(l===Intersect$1.OUTSIDE?c=Visibility$1.NONE:l===Intersect$1.INTERSECTING?c=Visibility$1.PARTIAL:l===Intersect$1.INSIDE&&(c=Visibility$1.FULL),c===Visibility$1.NONE)return c;l=t.mode===SceneMode$1.SCENE3D&&t.camera.frustum instanceof OrthographicFrustum;if(t.mode!==SceneMode$1.SCENE3D||l||!defined(i)||n)return c;a=a.occludeePointInScaledSpace;return!defined(a)||i.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(a,o.minimumHeight)?c:Visibility$1.NONE},GlobeSurfaceTileProvider.prototype.canRefine=function(e){return!!defined(e.data.terrainData)||void 0!==this.terrainProvider.getTileDataAvailable(2*e.x,2*e.y,e.level+1)};var readyImageryScratch=[],canRenderTraversalStack=[];GlobeSurfaceTileProvider.prototype.canRenderWithoutLosingDetail=function(e,t){var i=e.data,r=readyImageryScratch;r.length=this._imageryLayers.length;var n,a=!1,o=!1;for(defined(i)&&(a=i.terrainState===TerrainState$1.READY,o=!0,n=i.imagery),m=0,f=r.length;m<f;++m)r[m]=o;if(defined(n))for(m=0,f=n.length;m<f;++m){var s=n[m],l=s.loadingImagery,l=!defined(l)||l.state===ImageryState$1.FAILED||l.state===ImageryState$1.INVALID,s=(s.loadingImagery||s.readyImagery).imageryLayer._layerIndex;r[s]=l&&r[s]}var c=this.quadtree._lastSelectionFrameNumber,u=canRenderTraversalStack;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);0<u.length;){var d=u.pop(),h=d._lastSelectionResultFrame===c?d._lastSelectionResult:TileSelectionResult.NONE;if(h===TileSelectionResult.RENDERED){if(defined(d.data)){if(!a&&d.data.terrainState===TerrainState$1.READY)return!1;for(var p=d.data.imagery,m=0,f=p.length;m<f;++m){var g=p[m],_=g.loadingImagery,_=!defined(_)||_.state===ImageryState$1.FAILED||_.state===ImageryState$1.INVALID,g=(g.loadingImagery||g.readyImagery).imageryLayer._layerIndex;if(_&&!r[g])return!1}}}else h===TileSelectionResult.REFINED&&u.push(d.southwestChild,d.southeastChild,d.northwestChild,d.northeastChild)}return!0};var tileDirectionScratch=new Cartesian3;GlobeSurfaceTileProvider.prototype.computeTileLoadPriority=function(e,t){var i=e.data;if(void 0===i)return 0;var r=i.orientedBoundingBox;if(void 0===r)return 0;i=t.camera.positionWC,t=t.camera.directionWC,r=Cartesian3.subtract(r.center,i,tileDirectionScratch),i=Cartesian3.magnitude(r);return i<CesiumMath.EPSILON5?0:(Cartesian3.divideByScalar(r,i,r),(1-Cartesian3.dot(r,t))*e._distance)};var modifiedModelViewScratch=new Matrix4,modifiedModelViewProjectionScratch=new Matrix4,tileRectangleScratch=new Cartesian4,localizedCartographicLimitRectangleScratch=new Cartesian4,localizedTranslucencyRectangleScratch=new Cartesian4,rtcScratch=new Cartesian3,centerEyeScratch=new Cartesian3,southwestScratch=new Cartesian3,northeastScratch=new Cartesian3;GlobeSurfaceTileProvider.prototype.showTileThisFrame=function(e,t){for(var i=0,r=e.data.imagery,n=0,a=r.length;n<a;++n){var o=r[n];defined(o.readyImagery)&&0!==o.readyImagery.imageryLayer.alpha&&++i}var s=this._tilesToRenderByTextureCount[i];defined(s)||(s=[],this._tilesToRenderByTextureCount[i]=s),s.push(e),defined(e.data.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;e=this._debug;++e.tilesRendered,e.texturesRendered+=i};var cornerPositionsScratch=[new Cartesian3,new Cartesian3,new Cartesian3,new Cartesian3];function computeOccludeePoint(e,t,i,r,n,a){var o=e.quadtree._occluders.ellipsoid,s=o.ellipsoid,e=cornerPositionsScratch;return Cartesian3.fromRadians(i.west,i.south,n,s,e[0]),Cartesian3.fromRadians(i.east,i.south,n,s,e[1]),Cartesian3.fromRadians(i.west,i.north,n,s,e[2]),Cartesian3.fromRadians(i.east,i.north,n,s,e[3]),o.computeHorizonCullingPointPossiblyUnderEllipsoid(t,e,r,a)}function updateTileBoundingRegion(e,t,i){var r=e.data;void 0===(r=void 0===r?e.data=new GlobeSurfaceTile:r).tileBoundingRegion&&(r.tileBoundingRegion=new TileBoundingRegion({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:e.tilingScheme.ellipsoid,minimumHeight:0,maximumHeight:0}));var n=r.terrainData,a=r.mesh,o=r.tileBoundingRegion;if(void 0!==a&&void 0!==a.minimumHeight&&void 0!==a.maximumHeight)return o.minimumHeight=a.minimumHeight,o.maximumHeight=a.maximumHeight,e;if(void 0!==n&&void 0!==n._minimumHeight&&void 0!==n._maximumHeight)return o.minimumHeight=n._minimumHeight*i.terrainExaggeration,o.maximumHeight=n._maximumHeight*i.terrainExaggeration,e;o.minimumHeight=Number.NaN,o.maximumHeight=Number.NaN;for(var s=e.parent;void 0!==s;){var l=s.data;if(void 0!==l){var c=l.mesh;if(void 0!==c&&void 0!==c.minimumHeight&&void 0!==c.maximumHeight)return o.minimumHeight=c.minimumHeight,o.maximumHeight=c.maximumHeight,s;l=l.terrainData;if(void 0!==l&&void 0!==l._minimumHeight&&void 0!==l._maximumHeight)return o.minimumHeight=l._minimumHeight*i.terrainExaggeration,o.maximumHeight=l._maximumHeight*i.terrainExaggeration,s}s=s.parent}}function getTileReadyCallback(l,c,u){return function(e){for(var t=-1,i=e.data.imagery,r=i.length,n=0;n<r;++n)if((s=defaultValue((a=i[n]).readyImagery,a.loadingImagery)).imageryLayer===c){t=n;break}if(-1!==t){var a,o=t+l,s=defined(a=i[o])?defaultValue(a.readyImagery,a.loadingImagery):void 0;if(!defined(s)||s.imageryLayer!==c)return!c._createTileImagerySkeletons(e,u,o);for(n=t;n<o;++n)i[n].freeResources();i.splice(t,l)}return!0}}GlobeSurfaceTileProvider.prototype.computeDistanceToTile=function(e,t){var i=updateTileBoundingRegion(e,this.terrainProvider,t),r=e.data,n=r.tileBoundingRegion;if(void 0===i)return 9999999999;r.boundingVolumeSourceTile!==i&&(r.boundingVolumeSourceTile=i,defined(e.rectangle)&&(r.orientedBoundingBox=OrientedBoundingBox.fromRectangle(e.rectangle,n.minimumHeight,n.maximumHeight,e.tilingScheme.ellipsoid,r.orientedBoundingBox),r.occludeePointInScaledSpace=computeOccludeePoint(this,r.orientedBoundingBox.center,e.rectangle,n.minimumHeight,n.maximumHeight,r.occludeePointInScaledSpace)));var a=n.minimumHeight,i=n.maximumHeight;r.boundingVolumeSourceTile!==e&&(r=t.camera.positionCartographic.height,e=Math.abs(r-a),Math.abs(r-i)<e?(n.minimumHeight=a,n.maximumHeight=a):(n.minimumHeight=i,n.maximumHeight=i));t=n.distanceToCamera(t);return n.minimumHeight=a,n.maximumHeight=i,t},GlobeSurfaceTileProvider.prototype.isDestroyed=function(){return!1},GlobeSurfaceTileProvider.prototype.destroy=function(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),destroyObject(this)},GlobeSurfaceTileProvider.prototype._onLayerAdded=function(l,e){var c,t,i,r;l.show&&(c=this._terrainProvider,t=this,i=l.imageryProvider,r=this._imageryLayersUpdatedEvent,i._reload=function(){l._imageryCache={},t._quadtree.forEachLoadedTile(function(e){if(!defined(e._loadedCallbacks[l._layerIndex])){for(var t,i=e.data.imagery,r=i.length,n=-1,a=0,o=0;o<r;++o){var s=i[o];if(defaultValue(s.readyImagery,s.loadingImagery).imageryLayer===l)-1===n&&(n=o),++a;else if(-1!==n)break}-1!==n&&(t=n+a,l._createTileImagerySkeletons(e,c,t)&&(e._loadedCallbacks[l._layerIndex]=getTileReadyCallback(a,l,c),e.state=QuadtreeTileLoadState$1.LOADING))}})},this._quadtree.forEachLoadedTile(function(e){l._createTileImagerySkeletons(e,c)&&(e.state=QuadtreeTileLoadState$1.LOADING,0===e.level||e._lastSelectionResultFrame===t.quadtree._lastSelectionFrameNumber&&e._lastSelectionResult===TileSelectionResult.RENDERED||(e.renderable=!1))}),this._layerOrderChanged=!0,r.raiseEvent())},GlobeSurfaceTileProvider.prototype._onLayerRemoved=function(l,e){this._quadtree.forEachLoadedTile(function(e){for(var t=e.data.imagery,i=-1,r=0,n=0,a=t.length;n<a;++n){var o=t[n],s=o.loadingImagery;if((s=!defined(s)?o.readyImagery:s).imageryLayer===l)-1===i&&(i=n),o.freeResources(),++r;else if(-1!==i)break}-1!==i&&t.splice(i,r)}),defined(l.imageryProvider)&&(l.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()},GlobeSurfaceTileProvider.prototype._onLayerMoved=function(e,t,i){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()},GlobeSurfaceTileProvider.prototype._onLayerShownOrHidden=function(e,t,i){i?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)},GlobeSurfaceTileProvider.prototype.resetFloodAnalysis=function(){this._floodAnalysis={floodVar:[0,0,0,500],ym_pos_x:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],ym_pos_y:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],ym_pos_z:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],rect_flood:[0,0,0,0,0,0,0,0,0],floodSpeed:1,ym_max_index:0,globe:!0,showElseArea:!0}},GlobeSurfaceTileProvider.prototype.resetExcavateAnalysis=function(){this._excavateAnalysis={splitNum:30,showSelfOnly:!1,dig_pos_x:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dig_pos_y:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dig_pos_z:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],rect_dig:[0,0,0,0,0,0,0,0,0],dig_max_index:0,excavateHeight:0,excavateMinHeight:9999,excavatePerPoint:!1}};var scratchClippingPlanesMatrix=new Matrix4,scratchInverseTransposeClippingPlanesMatrix=new Matrix4,getDebugOrientedBoundingBox,getDebugBoundingSphere,debugDestroyPrimitive,rzi,szi,ozi,pzi,qzi;function createTileUniformMap(r,t){var e={u_showTailorOnly:function(){return t._excavateAnalysis.showTailorOnly},u_tailorArea:function(){return t._excavateAnalysis.tailorArea&&t._excavateAnalysis.tailorArea._colorTextures&&t._excavateAnalysis.tailorArea._colorTextures[0]?t._excavateAnalysis.tailorArea._colorTextures[0]:r.context.defaultTexture},u_enableTailor:function(){return t._excavateAnalysis.enableTailor},u_inverTailorCenterMat:function(){return t._excavateAnalysis.inverTailorCenterMat||new Matrix4},u_tailorRect:function(){return t._excavateAnalysis.tailorRect||new Cartesian4},globe:function(){return t._floodAnalysis.globe},u_showElseArea:function(){return t._floodAnalysis.showElseArea},u_floodArea:function(){return t._floodAnalysis.floodArea&&t._floodAnalysis.floodArea._colorTextures&&t._floodAnalysis.floodArea._colorTextures[0]?t._floodAnalysis.floodArea._colorTextures[0]:r.context.defaultTexture},u_enableFlood:function(){return t._floodAnalysis.enableFlood},floodVar:function(){var e=t._floodAnalysis.floodVar;return e?new Cartesian4(e[0],e[1],e[2],e[3]):new Cartesian4},u_inverFloodCenterMat:function(){return t._floodAnalysis.inverFloodCenterMat||new Matrix4},u_floodRect:function(){return t._floodAnalysis.floodRect||new Cartesian4},u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){var e=r.context.uniformState.view,t=Matrix4.multiplyByPoint(e,this.properties.rtc,centerEyeScratch);return Matrix4.setTranslation(e,t,modifiedModelViewScratch),modifiedModelViewScratch},u_modifiedModelViewProjection:function(){var e=r.context.uniformState.view,t=r.context.uniformState.projection,i=Matrix4.multiplyByPoint(e,this.properties.rtc,centerEyeScratch);return Matrix4.setTranslation(e,i,modifiedModelViewProjectionScratch),Matrix4.multiply(t,modifiedModelViewProjectionScratch,modifiedModelViewProjectionScratch),modifiedModelViewProjectionScratch},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){var e=t._clippingPlanes;return defined(e)&&defined(e.texture)?e.texture:r.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){var e=t._clippingPlanes,e=defined(e)?Matrix4.multiply(r.context.uniformState.view,e.modelMatrix,scratchClippingPlanesMatrix):Matrix4.IDENTITY;return Matrix4.inverseTranspose(e,scratchInverseTransposeClippingPlanesMatrix)},u_clippingPlanesEdgeStyle:function(){var e=this.properties.clippingPlanesEdgeColor;return e.alpha=this.properties.clippingPlanesEdgeWidth,e},u_minimumBrightness:function(){return r.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},properties:{initialColor:new Cartesian4(0,0,.5,1),fillHighlightColor:new Color(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new Cartesian2(65e5,9e6),nightFadeDistance:new Cartesian2(1e7,4e7),hsbShift:new Cartesian3,center3D:void 0,rtc:new Cartesian3,modifiedModelView:new Matrix4,tileRectangle:new Cartesian4,dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new Cartesian2,southMercatorYAndOneOverHeight:new Cartesian2,waterMask:void 0,waterMaskTranslationAndScale:new Cartesian4,minMaxHeight:new Cartesian2,scaleAndBias:new Matrix4,clippingPlanesEdgeColor:Color.clone(Color.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new Cartesian4,frontFaceAlphaByDistance:new Cartesian4,backFaceAlphaByDistance:new Cartesian4,localizedTranslucencyRectangle:new Cartesian4,undergroundColor:Color.clone(Color.TRANSPARENT),undergroundColorAlphaByDistance:new Cartesian4}};return defined(t.materialUniformMap)?combine$2(e,t.materialUniformMap):e}function createWireframeVertexArrayIfNecessary(e,t,i){var r,n,i=i.data;if(defined(i.vertexArray)?(r=i.mesh,n=i.vertexArray):defined(i.fill)&&defined(i.fill.vertexArray)&&(r=i.fill.mesh,n=i.fill.vertexArray),defined(r)&&defined(n)){if(defined(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===r)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=createWireframeVertexArray(e,n,r),i.wireframeVertexArray.mesh=r}}function createWireframeVertexArray(e,t,i){i={indices:i.indices,primitiveType:PrimitiveType$1.TRIANGLES};GeometryPipeline.toWireframe(i);i=i.indices,i=Buffer$1.createIndexBuffer({context:e,typedArray:i,usage:BufferUsage$1.STATIC_DRAW,indexDatatype:IndexDatatype$1.fromSizeInBytes(i.BYTES_PER_ELEMENT)});return new VertexArray({context:e,attributes:t._attributes,indexBuffer:i})}function tzi(e){return new Primitive({geometryInstances:e,appearance:new PerInstanceColorAppearance({translucent:!1,flat:!0}),asynchronous:!1})}ozi=new GeometryInstance({geometry:BoxOutlineGeometry.fromDimensions({dimensions:new Cartesian3(2,2,2)})}),pzi=new GeometryInstance({geometry:new SphereOutlineGeometry({radius:1})}),qzi=new Matrix4,getDebugOrientedBoundingBox=function(e,t){return e===rzi?szi:(debugDestroyPrimitive(),rzi=e,qzi=Matrix4.fromRotationTranslation(e.halfAxes,e.center,qzi),ozi.modelMatrix=qzi,ozi.attributes.color=ColorGeometryInstanceAttribute.fromColor(t),szi=tzi(ozi))},getDebugBoundingSphere=function(e,t){return e===rzi?szi:(debugDestroyPrimitive(),rzi=e,qzi=Matrix4.fromTranslation(e.center,qzi),qzi=Matrix4.multiplyByUniformScale(qzi,e.radius,qzi),pzi.modelMatrix=qzi,pzi.attributes.color=ColorGeometryInstanceAttribute.fromColor(t),szi=tzi(pzi))},debugDestroyPrimitive=function(){defined(szi)&&(szi.destroy(),rzi=szi=void 0)};var otherPassesInitialColor=new Cartesian4(0,0,0,0),surfaceShaderSetOptionsScratch={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0},defaultUndergroundColor=Color.TRANSPARENT,defaultundergroundColorAlphaByDistance=new NearFarScalar;function addDrawCommandsForTile(e,t,i){var r=t.data;defined(r.vertexArray)||(void 0===r.fill&&(r.fill=new TerrainFillMesh(t)),r.fill.update(e,i));var n=i.creditDisplay,a=r.terrainData;if(defined(a)&&defined(a.credits))for(var o=a.credits,s=0,l=o.length;s<l;++s)n.addCredit(o[s]);var c=ContextLimits.maximumTextureImageUnits,u=r.waterMaskTexture,d=r.waterMaskTranslationAndScale;!defined(u)&&defined(r.fill)&&(u=r.fill.waterMaskTexture,d=r.fill.waterMaskTranslationAndScale);var h=i.cameraUnderground,p=i.globeTranslucencyState,m=p.translucent,f=p.frontFaceAlphaByDistance,g=p.backFaceAlphaByDistance,_=p.rectangle,y=defaultValue(e.undergroundColor,defaultUndergroundColor),C=defaultValue(e.undergroundColorAlphaByDistance,defaultundergroundColorAlphaByDistance),v=isUndergroundVisible(e,i)&&i.mode===SceneMode$1.SCENE3D&&0<y.alpha&&(0<C.nearValue||0<C.farValue),S=e.hasWaterMask&&defined(u),x=e.oceanNormalMap,T=S&&defined(x),b=e.terrainProvider.ready&&e.terrainProvider.hasVertexNormals,E=i.fog.enabled&&!h,P=e.showGroundAtmosphere&&i.mode===SceneMode$1.SCENE3D,A=ShadowMode$1.castShadows(e.shadows)&&!m,w=ShadowMode$1.receiveShadows(e.shadows)&&!m,D=e.hueShift,M=e.saturationShift,I=e.brightnessShift,R=!(CesiumMath.equalsEpsilon(D,0,CesiumMath.EPSILON7)&&CesiumMath.equalsEpsilon(M,0,CesiumMath.EPSILON7)&&CesiumMath.equalsEpsilon(I,0,CesiumMath.EPSILON7)),O=!1;P&&(F=Cartesian3.magnitude(i.camera.positionWC),O=e.nightFadeOutDistance<F),S&&--c,T&&--c,defined(i.shadowState)&&i.shadowState.shadowsEnabled&&--c,defined(e.clippingPlanes)&&e.clippingPlanes.enabled&&--c,c-=p.numberOfTextureUniforms;var L,F,N=r.renderedMesh,B=N.center,V=N.encoding,k=tileRectangleScratch,z=0,U=0,$=0,G=0,H=!1;i.mode!==SceneMode$1.SCENE3D&&(a=(L=i.mapProjection).project(Rectangle.southwest(t.rectangle),southwestScratch),F=L.project(Rectangle.northeast(t.rectangle),northeastScratch),k.x=a.x,k.y=a.y,k.z=F.x,k.w=F.y,i.mode!==SceneMode$1.MORPHING&&((B=rtcScratch).x=0,B.y=.5*(k.z+k.x),B.z=.5*(k.w+k.y),k.x-=B.y,k.y-=B.z,k.z-=B.y,k.w-=B.z),i.mode===SceneMode$1.SCENE2D&&V.quantization===TerrainQuantization$1.BITS12&&(a=1/(Math.pow(2,12)-1)*.5,F=(k.z-k.x)*a,a=(k.w-k.y)*a,k.x-=F,k.y-=a,k.z+=F,k.w+=a),L instanceof WebMercatorProjection&&(z=t.rectangle.south,U=t.rectangle.north,$=WebMercatorProjection.geodeticLatitudeToMercatorAngle(z),G=1/(WebMercatorProjection.geodeticLatitudeToMercatorAngle(U)-$),H=!0));var W=surfaceShaderSetOptionsScratch;W.frameState=i,W.surfaceTile=r,W.showReflectiveOcean=S,W.showOceanWaves=T,W.enableLighting=e.enableLighting,W.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,W.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,W.showGroundAtmosphere=P,W.perFragmentGroundAtmosphere=O,W.hasVertexNormals=b,W.useWebMercatorProjection=H,W.clippedByBoundaries=r.clippedByBoundaries;var q=r.imagery,j=0,Y=q.length,X=e.showSkirts&&!h&&!m,b=e.backFaceCulling&&!h&&!m,H=b?e._renderState:e._disableCullingRenderState,Q=b?e._blendRenderState:e._disableCullingBlendRenderState,J=H,Z=e._firstPassInitialColor,K=i.context;if(defined(e._debug.boundingSphereTile)||debugDestroyPrimitive(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;for(var ee=e._drawCommands.length,te=0;te<ee;++te)e._uniformMaps[te]=createTileUniformMap(i,e)}do{var ie,re,ne=0;e._drawCommands.length<=e._usedDrawCommands?((ie=new DrawCommand).owner=t,ie.cull=!1,ie.boundingVolume=new BoundingSphere,ie.orientedBoundingBox=void 0,re=createTileUniformMap(i,e),e._drawCommands.push(ie),e._uniformMaps.push(re)):(ie=e._drawCommands[e._usedDrawCommands],re=e._uniformMaps[e._usedDrawCommands]),ie.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile&&(defined(ue=r.orientedBoundingBox)?getDebugOrientedBoundingBox(ue,Color.RED).update(i):defined(N)&&defined(N.boundingSphere3D)&&getDebugBoundingSphere(N.boundingSphere3D,Color.RED).update(i));var ae=re.properties;Cartesian4.clone(Z,ae.initialColor),ae.oceanNormalMap=x,ae.lightingFadeDistance.x=e.lightingFadeOutDistance,ae.lightingFadeDistance.y=e.lightingFadeInDistance,ae.nightFadeDistance.x=e.nightFadeOutDistance,ae.nightFadeDistance.y=e.nightFadeInDistance,ae.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;var oe=h?g:f,se=h?f:g;defined(oe)&&(Cartesian4.fromElements(oe.near,oe.nearValue,oe.far,oe.farValue,ae.frontFaceAlphaByDistance),Cartesian4.fromElements(se.near,se.nearValue,se.far,se.farValue,ae.backFaceAlphaByDistance)),Cartesian4.fromElements(C.near,C.nearValue,C.far,C.farValue,ae.undergroundColorAlphaByDistance),Color.clone(y,ae.undergroundColor);var le=!defined(r.vertexArray)&&defined(e.fillHighlightColor)&&0<e.fillHighlightColor.alpha;le&&Color.clone(e.fillHighlightColor,ae.fillHighlightColor),ae.center3D=N.center,Cartesian3.clone(B,ae.rtc),Cartesian4.clone(k,ae.tileRectangle),ae.southAndNorthLatitude.x=z,ae.southAndNorthLatitude.y=U,ae.southMercatorYAndOneOverHeight.x=$,ae.southMercatorYAndOneOverHeight.y=G;var ce=localizedCartographicLimitRectangleScratch,ue=clipRectangleAntimeridian(t.rectangle,e.cartographicLimitRectangle),oe=localizedTranslucencyRectangleScratch,se=clipRectangleAntimeridian(t.rectangle,_);Cartesian3.fromElements(D,M,I,ae.hsbShift);var de=t.rectangle,he=1/de.width,pe=1/de.height;ce.x=(ue.west-de.west)*he,ce.y=(ue.south-de.south)*pe,ce.z=(ue.east-de.west)*he,ce.w=(ue.north-de.south)*pe,Cartesian4.clone(ce,ae.localizedCartographicLimitRectangle),oe.x=(se.west-de.west)*he,oe.y=(se.south-de.south)*pe,oe.z=(se.east-de.west)*he,oe.w=(se.north-de.south)*pe,Cartesian4.clone(oe,ae.localizedTranslucencyRectangle);for(var ue=E&&CesiumMath.fog(t._distance,i.fog.density)>CesiumMath.EPSILON3,R=R&&(ue||P),me=!1,fe=!1,ge=!1,_e=!1,ye=!1,Ce=!1,ve=!1,Se=!1,xe=!1,Te=!1,ce=!1,ce=e.applyTailor;ne<c&&j<Y;){var be=q[j],Ee=be.readyImagery;if(++j,defined(Ee)&&0!==Ee.imageryLayer.alpha){var Pe=be.useWebMercatorT?Ee.textureWebMercator:Ee.texture,Ae=Ee.imageryLayer;defined(be.textureTranslationAndScale)||(be.textureTranslationAndScale=Ae._calculateTextureTranslationAndScale(t,be)),ae.dayTextures[ne]=Pe,ae.dayTextureTranslationAndScale[ne]=be.textureTranslationAndScale,ae.dayTextureTexCoordsRectangle[ne]=be.textureCoordinateRectangle,ae.dayTextureUseWebMercatorT[ne]=be.useWebMercatorT,ae.dayTextureAlpha[ne]=Ae.alpha,Ce=Ce||1!==ae.dayTextureAlpha[ne],ae.dayTextureNightAlpha[ne]=Ae.nightAlpha,ve=ve||1!==ae.dayTextureNightAlpha[ne],ae.dayTextureDayAlpha[ne]=Ae.dayAlpha,ve=ve||1!==ae.dayTextureDayAlpha[ne],ae.dayTextureBrightness[ne]=Ae.brightness,me=me||ae.dayTextureBrightness[ne]!==ImageryLayer.DEFAULT_BRIGHTNESS,ae.dayTextureContrast[ne]=Ae.contrast,fe=fe||ae.dayTextureContrast[ne]!==ImageryLayer.DEFAULT_CONTRAST,ae.dayTextureHue[ne]=Ae.hue,ge=ge||ae.dayTextureHue[ne]!==ImageryLayer.DEFAULT_HUE,ae.dayTextureSaturation[ne]=Ae.saturation,_e=_e||ae.dayTextureSaturation[ne]!==ImageryLayer.DEFAULT_SATURATION,ae.dayTextureOneOverGamma[ne]=1/Ae.gamma,ye=ye||ae.dayTextureOneOverGamma[ne]!==1/ImageryLayer.DEFAULT_GAMMA,ae.dayTextureSplit[ne]=Ae.splitDirection;Se=Se||0!==ae.dayTextureSplit[ne],be=ae.dayTextureCutoutRectangles[ne];defined(be)||(be=ae.dayTextureCutoutRectangles[ne]=new Cartesian4),Cartesian4.clone(Cartesian4.ZERO,be),defined(Ae.cutoutRectangle)&&(we=clipRectangleAntimeridian(de,Ae.cutoutRectangle),xe=defined(Rectangle.simpleIntersection(we,de,rectangleIntersectionScratch))||xe,be.x=(we.west-de.west)*he,be.y=(we.south-de.south)*pe,be.z=(we.east-de.west)*he,be.w=(we.north-de.south)*pe);be=ae.colorsToAlpha[ne];defined(be)||(be=ae.colorsToAlpha[ne]=new Cartesian4);var we=defined(Ae.colorToAlpha)&&0<Ae.colorToAlphaThreshold,Te=Te||we;if(we?(we=Ae.colorToAlpha,be.x=we.red,be.y=we.green,be.z=we.blue,be.w=Ae.colorToAlphaThreshold):be.w=-1,defined(Ee.credits))for(var De=Ee.credits,Me=0,Ie=De.length;Me<Ie;++Me)n.addCredit(De[Me]);++ne}}ae.dayTextures.length=ne,ae.waterMask=u,Cartesian4.clone(d,ae.waterMaskTranslationAndScale),ae.minMaxHeight.x=V.minimumHeight,ae.minMaxHeight.y=V.maximumHeight,Matrix4.clone(V.matrix,ae.scaleAndBias);se=e._clippingPlanes,oe=defined(se)&&se.enabled&&t.isClipped;oe&&(ae.clippingPlanesEdgeColor=Color.clone(se.edgeColor,ae.clippingPlanesEdgeColor),ae.clippingPlanesEdgeWidth=se.edgeWidth),W.numberOfDayTextures=ne,W.applyBrightness=me,W.applyContrast=fe,W.applyHue=ge,W.applySaturation=_e,W.applyGamma=ye,W.applyAlpha=Ce,W.applyDayNightAlpha=ve,W.applySplit=Se,W.enableFog=ue,W.enableClippingPlanes=oe,W.clippingPlanes=se,W.hasImageryLayerCutout=xe,W.colorCorrect=R,W.highlightFillTile=le,W.colorToAlpha=Te,W.showUndergroundColor=v,W.translucent=m,W.applyTailor=ce;se=r.renderedMesh.indices.length;X||(se=r.renderedMesh.indexCountWithoutSkirts),ie.shaderProgram=e._surfaceShaderSet.getShaderProgram(W),ie.castShadows=A,ie.receiveShadows=w,ie.renderState=J,ie.primitiveType=PrimitiveType$1.TRIANGLES,ie.vertexArray=r.vertexArray||r.fill.vertexArray,ie.count=se,ie.uniformMap=re,ie.pass=Pass$1.GLOBE,e._debug.wireframe&&(createWireframeVertexArrayIfNecessary(K,e,t),defined(r.wireframeVertexArray)&&(ie.vertexArray=r.wireframeVertexArray,ie.primitiveType=PrimitiveType$1.LINES,ie.count=2*se));le=ie.boundingVolume,ce=ie.orientedBoundingBox}while(i.mode!==SceneMode$1.SCENE3D?(se=r.tileBoundingRegion,BoundingSphere.fromRectangleWithHeights2D(t.rectangle,i.mapProjection,se.minimumHeight,se.maximumHeight,le),Cartesian3.fromElements(le.center.z,le.center.x,le.center.y,le.center),i.mode===SceneMode$1.MORPHING&&(le=BoundingSphere.union(N.boundingSphere3D,le,le))):(ie.boundingVolume=BoundingSphere.clone(N.boundingSphere3D,le),ie.orientedBoundingBox=OrientedBoundingBox.clone(r.orientedBoundingBox,ce)),ie.dirty=!0,m&&p.updateDerivedCommands(ie,i),pushCommand(ie,i),J=Q,Z=otherPassesInitialColor,j<Y)}function GlobeTranslucency(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=Rectangle.clone(Rectangle.MAX_VALUE)}function ImageryLayerCollection(){this._layers=[],this.layerAdded=new Event,this.layerRemoved=new Event,this.layerMoved=new Event,this.layerShownOrHidden=new Event}function getLayerIndex(e,t){return e.indexOf(t)}function swapLayers(e,t,i){var r,n=e._layers;(t=CesiumMath.clamp(t,0,n.length-1))!==(i=CesiumMath.clamp(i,0,n.length-1))&&(r=n[t],n[t]=n[i],n[i]=r,e._update(),e.layerMoved.raiseEvent(r,i,t))}Object.defineProperties(GlobeTranslucency.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){this._frontFaceAlphaByDistance=NearFarScalar.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){this._backFaceAlphaByDistance=NearFarScalar.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){defined(e)||(e=Rectangle.clone(Rectangle.MAX_VALUE)),Rectangle.clone(e,this._rectangle)}}}),Object.defineProperties(ImageryLayerCollection.prototype,{length:{get:function(){return this._layers.length}}}),ImageryLayerCollection.prototype.add=function(e,t){defined(t)?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t)},ImageryLayerCollection.prototype.addImageryProvider=function(e,t){e=new ImageryLayer(e);return this.add(e,t),e},ImageryLayerCollection.prototype.remove=function(e,t){t=defaultValue(t,!0);var i=this._layers.indexOf(e);return-1!==i&&(this._layers.splice(i,1),this._update(),this.layerRemoved.raiseEvent(e,i),t&&e.destroy(),!0)},ImageryLayerCollection.prototype.removeAll=function(e){e=defaultValue(e,!0);for(var t=this._layers,i=0,r=t.length;i<r;i++){var n=t[i];this.layerRemoved.raiseEvent(n,i),e&&n.destroy()}this._layers=[]},ImageryLayerCollection.prototype.contains=function(e){return-1!==this.indexOf(e)},ImageryLayerCollection.prototype.indexOf=function(e){return this._layers.indexOf(e)},ImageryLayerCollection.prototype.get=function(e){return this._layers[e]},ImageryLayerCollection.prototype.raise=function(e){e=getLayerIndex(this._layers,e);swapLayers(this,e,e+1)},ImageryLayerCollection.prototype.lower=function(e){e=getLayerIndex(this._layers,e);swapLayers(this,e,e-1)},ImageryLayerCollection.prototype.raiseToTop=function(e){var t=getLayerIndex(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))},ImageryLayerCollection.prototype.lowerToBottom=function(e){var t=getLayerIndex(this._layers,e);0!==t&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var applicableRectangleScratch=new Rectangle,comparisonPoint;function QuadtreeOccluders(e){this._ellipsoid=new EllipsoidalOccluder(e.ellipsoid,Cartesian3.ZERO)}function QuadtreeTile(e){this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=[],this._frameUpdated=void 0,this._lastSelectionResult=TileSelectionResult.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this.state=QuadtreeTileLoadState$1.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}function freeTile(e){defined(e)&&e.freeResources()}function TileReplacementQueue(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}function remove(e,t){var i=t.replacementPrevious,r=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=r),t===e.head?e.head=r:i.replacementNext=r,t===e.tail?e.tail=i:r.replacementPrevious=i,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}function QuadtreePrimitive(e){this._tileProvider=e.tileProvider,(this._tileProvider.quadtree=this)._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};var t=this._tileProvider.tilingScheme.ellipsoid;this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new TileReplacementQueue,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._lastTileIndex=0,this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=defaultValue(e.maximumScreenSpaceError,2),this.tileCacheSize=defaultValue(e.tileCacheSize,100),this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new QuadtreeOccluders({ellipsoid:t}),this._tileLoadProgressEvent=new Event,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}function invalidateAllTiles(e){var t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,clearTileLoadQueue(e);var i=e._levelZeroTiles;if(defined(i))for(var r=0;r<i.length;++r){for(var n=i[r].customData,a=n.length,o=0;o<a;++o){var s=n[o];s.level=0,e._addHeightCallbacks.push(s)}i[r].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}function clearTileLoadQueue(e){var t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}function updateTileLoadProgress(e,t){var i=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;i===e._lastTileLoadQueueLength&&!e._tilesInvalidated||(t.afterRender.push(Event.prototype.raiseEvent.bind(e._tileLoadProgressEvent,i)),e._lastTileLoadQueueLength=i);i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce(function(e,t){return Math.max(e,t.level)},-1),i.tilesRendered=e._tilesToRender.length,i.tilesVisited===i.lastTilesVisited&&i.tilesRendered===i.lastTilesRendered&&i.tilesCulled===i.lastTilesCulled&&i.maxDepth===i.lastMaxDepth&&i.tilesWaitingForChildren===i.lastTilesWaitingForChildren&&i.maxDepthVisited===i.lastMaxDepthVisited||(console.log("Visited "+i.tilesVisited+", Rendered: "+i.tilesRendered+", Culled: "+i.tilesCulled+", Max Depth Rendered: "+i.maxDepth+", Max Depth Visited: "+i.maxDepthVisited+", Waiting for children: "+i.tilesWaitingForChildren),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}ImageryLayerCollection.prototype.pickImageryLayerFeatures=function(e,t){e=t.globe.pick(e,t);if(defined(e)){for(var i,s=t.globe.ellipsoid.cartesianToCartographic(e),r=t.globe._surface._tilesToRender,n=0;!defined(i)&&n<r.length;++n){var a=r[n];Rectangle.contains(a.rectangle,s)&&(i=a)}if(defined(i)){for(var o=i.data.imagery,l=[],c=[],u=o.length-1;0<=u;--u){var d,h,p,m=o[u],f=m.readyImagery;defined(f)&&(defined((p=f.imageryLayer.imageryProvider).pickFeatures)&&Rectangle.contains(f.rectangle,s)&&(h=1/1024,(d=applicableRectangleScratch).west=CesiumMath.lerp(i.rectangle.west,i.rectangle.east,m.textureCoordinateRectangle.x-h),d.east=CesiumMath.lerp(i.rectangle.west,i.rectangle.east,m.textureCoordinateRectangle.z+h),d.south=CesiumMath.lerp(i.rectangle.south,i.rectangle.north,m.textureCoordinateRectangle.y-h),d.north=CesiumMath.lerp(i.rectangle.south,i.rectangle.north,m.textureCoordinateRectangle.w+h),!Rectangle.contains(d,s)||defined(p=p.pickFeatures(f.x,f.y,f.level,s.longitude,s.latitude))&&(l.push(p),c.push(f.imageryLayer))))}if(0!==l.length)return when.all(l,function(e){for(var t=[],i=0;i<e.length;++i){var r=e[i],n=c[i];if(defined(r)&&0<r.length)for(var a=0;a<r.length;++a){var o=r[a];o.imageryLayer=n,defined(o.position)||(o.position=s),t.push(o)}}return t})}}},ImageryLayerCollection.prototype.queueReprojectionCommands=function(e){for(var t=this._layers,i=0,r=t.length;i<r;++i)t[i].queueReprojectionCommands(e)},ImageryLayerCollection.prototype.cancelReprojections=function(){for(var e=this._layers,t=0,i=e.length;t<i;++t)e[t].cancelReprojections()},ImageryLayerCollection.prototype.isDestroyed=function(){return!1},ImageryLayerCollection.prototype.destroy=function(){return this.removeAll(!0),destroyObject(this)},ImageryLayerCollection.prototype._update=function(){for(var e,t,i=!0,r=this._layers,n=0,a=r.length;n<a;++n)(t=r[n])._layerIndex=n,t.show?(t._isBaseLayer=i,i=!1):t._isBaseLayer=!1,t.show!==t._show&&(defined(t._show)&&(e=!defined(e)?[]:e).push(t),t._show=t.show);if(defined(e))for(n=0,a=e.length;n<a;++n)t=e[n],this.layerShownOrHidden.raiseEvent(t,t._layerIndex,t.show)},Object.defineProperties(QuadtreeOccluders.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),QuadtreeTile.createLevelZeroTiles=function(e){for(var t=e.getNumberOfXTilesAtLevel(0),i=e.getNumberOfYTilesAtLevel(0),r=new Array(t*i),n=0,a=0;a<i;++a)for(var o=0;o<t;++o)r[n++]=new QuadtreeTile({tilingScheme:e,x:o,y:a,level:0});return r},QuadtreeTile.prototype._updateCustomData=function(e,t,i){var r,n=this.customData;if(defined(t)&&defined(i)){for(n=n.filter(function(e){return-1===i.indexOf(e)}),this._customData=n,a=this._rectangle,s=0;s<t.length;++s)r=t[s],Rectangle.contains(a,r.positionCartographic)&&n.push(r);this._frameUpdated=e}else{e=this._parent;if(defined(e)&&this._frameUpdated!==e._frameUpdated){n.length=0;for(var a=this._rectangle,o=e.customData,s=0;s<o.length;++s)r=o[s],Rectangle.contains(a,r.positionCartographic)&&n.push(r);this._frameUpdated=e._frameUpdated}}},Object.defineProperties(QuadtreeTile.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return defined(this._southwestChild)||(this._southwestChild=new QuadtreeTile({tilingScheme:this.tilingScheme,x:2*this.x,y:2*this.y+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return defined(this._southeastChild)||(this._southeastChild=new QuadtreeTile({tilingScheme:this.tilingScheme,x:2*this.x+1,y:2*this.y+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return defined(this._northwestChild)||(this._northwestChild=new QuadtreeTile({tilingScheme:this.tilingScheme,x:2*this.x,y:2*this.y,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return defined(this._northeastChild)||(this._northeastChild=new QuadtreeTile({tilingScheme:this.tilingScheme,x:2*this.x+1,y:2*this.y,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<QuadtreeTileLoadState$1.DONE}},eligibleForUnloading:{get:function(){var e=!0;return defined(this.data)&&(defined(e=this.data.eligibleForUnloading)||(e=!0)),e}}}),QuadtreeTile.prototype.findLevelZeroTile=function(e,t,i){var r=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=r:r<=t&&(t-=r),!(i<0||i>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter(function(e){return e.x===t&&e.y===i})[0]},QuadtreeTile.prototype.findTileToWest=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;e=t.findTileToWest(e);return void 0!==e?t.southwestChild===this?e.southeastChild:e.northeastChild:void 0},QuadtreeTile.prototype.findTileToEast=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;e=t.findTileToEast(e);return void 0!==e?t.southeastChild===this?e.southwestChild:e.northwestChild:void 0},QuadtreeTile.prototype.findTileToSouth=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;e=t.findTileToSouth(e);return void 0!==e?t.southwestChild===this?e.northwestChild:e.northeastChild:void 0},QuadtreeTile.prototype.findTileToNorth=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;e=t.findTileToNorth(e);return void 0!==e?t.northwestChild===this?e.southwestChild:e.southeastChild:void 0},QuadtreeTile.prototype.freeResources=function(){this.state=QuadtreeTileLoadState$1.START,this.renderable=!1,this.upsampledFromParent=!1,defined(this.data)&&defined(this.data.freeResources)&&this.data.freeResources(),freeTile(this._southwestChild),this._southwestChild=void 0,freeTile(this._southeastChild),this._southeastChild=void 0,freeTile(this._northwestChild),this._northwestChild=void 0,freeTile(this._northeastChild),this._northeastChild=void 0},TileReplacementQueue.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head},TileReplacementQueue.prototype.trimTiles=function(e){for(var t=this.tail,i=!0;i&&defined(this._lastBeforeStartOfFrame)&&this.count>e&&defined(t);){var i=t!==this._lastBeforeStartOfFrame,r=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),remove(this,t)),t=r}},TileReplacementQueue.prototype.markTileRendered=function(e){var t=this.head;if(t!==e){if(++this.count,!defined(t))return e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,void(this.tail=e);(defined(e.replacementPrevious)||defined(e.replacementNext))&&remove(this,e),e.replacementPrevious=void 0,(e.replacementNext=t).replacementPrevious=e,this.head=e}else e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext)},Object.defineProperties(QuadtreePrimitive.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}}),QuadtreePrimitive.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0},QuadtreePrimitive.prototype.forEachLoadedTile=function(e){for(var t=this._tileReplacementQueue.head;defined(t);)t.state!==QuadtreeTileLoadState$1.START&&e(t),t=t.replacementNext},QuadtreePrimitive.prototype.forEachRenderedTile=function(e){for(var t=this._tilesToRender,i=0,r=t.length;i<r;++i)e(t[i])},QuadtreePrimitive.prototype.updateHeight=function(e,t){var r=this,n={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t,removeFunc:function(){for(var e=r._addHeightCallbacks,t=e.length,i=0;i<t;++i)if(e[i]===n){e.splice(i,1);break}r._removeHeightCallbacks.push(n)}};return r._addHeightCallbacks.push(n),n.removeFunc},QuadtreePrimitive.prototype.update=function(e){defined(this._tileProvider.update)&&this._tileProvider.update(e)},QuadtreePrimitive.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(invalidateAllTiles(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),clearTileLoadQueue(this),this._debug.suspendLodUpdate||this._tileReplacementQueue.markStartOfRenderFrame())},QuadtreePrimitive.prototype.render=function(e){var t=e.passes,i=this._tileProvider;t.render&&(i.beginUpdate(e),selectTilesForRendering(this,e),createRenderCommandsForSelectedTiles(this,e),i.endUpdate(e)),t.pick&&0<this._tilesToRender.length&&i.updateForPick(e)},QuadtreePrimitive.prototype.endFrame=function(e){e.passes.render&&e.mode!==SceneMode$1.MORPHING&&(processTileLoadQueue(this,e),updateHeights(this,e),updateTileLoadProgress(this,e))},QuadtreePrimitive.prototype.isDestroyed=function(){return!1},QuadtreePrimitive.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var centerScratch=new Cartographic;function compareDistanceToPoint(e,t){var i=Rectangle.center(e.rectangle,centerScratch),r=i.longitude-comparisonPoint.longitude,e=i.latitude-comparisonPoint.latitude,t=(i=Rectangle.center(t.rectangle,centerScratch)).longitude-comparisonPoint.longitude,i=i.latitude-comparisonPoint.latitude;return r*r+e*e-(t*t+i*i)}var cameraOriginScratch=new Cartesian3,rootTraversalDetails=[];function selectTilesForRendering(e,t){var i,r=e._debug;if(!r.suspendLodUpdate){e._tilesToRender.length=0;var n,a=e._tileProvider;if(!defined(e._levelZeroTiles)){if(!a.ready)return;var o=a.tilingScheme;e._levelZeroTiles=QuadtreeTile.createLevelZeroTiles(o);var s=e._levelZeroTiles.length;if(rootTraversalDetails.length<s)for(rootTraversalDetails=new Array(s),i=0;i<s;++i)void 0===rootTraversalDetails[i]&&(rootTraversalDetails[i]=new TraversalDetails)}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;var l=e._levelZeroTiles,c=1<l.length?e._occluders:void 0;comparisonPoint=t.camera.positionCartographic,l.sort(compareDistanceToPoint);var u,d=e._addHeightCallbacks,h=e._removeHeightCallbacks,p=t.frameNumber;if(0<d.length||0<h.length){for(i=0,u=l.length;i<u;++i)(n=l[i])._updateCustomData(p,d,h);d.length=0,h.length=0}o=t.camera;e._cameraPositionCartographic=o.positionCartographic;o=Matrix4.getTranslation(o.transform,cameraOriginScratch);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(o,e._cameraReferenceFrameOriginCartographic),i=0,u=l.length;i<u;++i)n=l[i],e._tileReplacementQueue.markTileRendered(n),n.renderable?visitIfVisible(e,n,a,t,c,!1,rootTraversalDetails[i]):(queueTileLoad(e,e._tileLoadQueueHigh,n,t),++r.tilesWaitingForChildren);e._lastSelectionFrameNumber=p}}function queueTileLoad(e,t,i,r){i.needsLoading&&(void 0!==e.tileProvider.computeTileLoadPriority&&(i._loadPriority=e.tileProvider.computeTileLoadPriority(i,r)),t.push(i))}function TraversalDetails(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function TraversalQuadDetails(){this.southwest=new TraversalDetails,this.southeast=new TraversalDetails,this.northwest=new TraversalDetails,this.northeast=new TraversalDetails}TraversalQuadDetails.prototype.combine=function(e){var t=this.southwest,i=this.southeast,r=this.northwest,n=this.northeast;e.allAreRenderable=t.allAreRenderable&&i.allAreRenderable&&r.allAreRenderable&&n.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||r.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+i.notYetRenderableCount+r.notYetRenderableCount+n.notYetRenderableCount};for(var traversalQuadsByLevel=new Array(31),i$1=0;i$1<traversalQuadsByLevel.length;++i$1)traversalQuadsByLevel[i$1]=new TraversalQuadDetails;function visitTile(e,t,i,r,n){var a=e._debug;++a.tilesVisited,e._tileReplacementQueue.markTileRendered(i),i._updateCustomData(t.frameNumber),i.level>a.maxDepthVisited&&(a.maxDepthVisited=i.level);var o=screenSpaceError(e,t,i)<e.maximumScreenSpaceError,s=i.southwestChild,l=i.southeastChild,c=i.northwestChild,u=i.northeastChild,d=e._lastSelectionFrameNumber,h=i._lastSelectionResultFrame===d?i._lastSelectionResult:TileSelectionResult.NONE,d=e.tileProvider;if(o||r){var p=TileSelectionResult.originalResult(h)===TileSelectionResult.RENDERED,m=TileSelectionResult.originalResult(h)===TileSelectionResult.CULLED||h===TileSelectionResult.NONE,f=i.state===QuadtreeTileLoadState$1.DONE,p=p||m||f;if(p||defined(d.canRenderWithoutLosingDetail)&&(p=d.canRenderWithoutLosingDetail(i)),p)return o&&queueTileLoad(e,e._tileLoadQueueMedium,i,t),addTileToRenderList(e,i),n.allAreRenderable=i.renderable,n.anyWereRenderedLastFrame=h===TileSelectionResult.RENDERED,n.notYetRenderableCount=i.renderable?0:1,i._lastSelectionResultFrame=t.frameNumber,i._lastSelectionResult=TileSelectionResult.RENDERED,void(n.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(i));r=!0,o&&queueTileLoad(e,e._tileLoadQueueHigh,i,t)}if(d.canRefine(i)){if(s.upsampledFromParent&&l.upsampledFromParent&&c.upsampledFromParent&&u.upsampledFromParent)return addTileToRenderList(e,i),queueTileLoad(e,e._tileLoadQueueMedium,i,t),e._tileReplacementQueue.markTileRendered(s),e._tileReplacementQueue.markTileRendered(l),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(u),n.allAreRenderable=i.renderable,n.anyWereRenderedLastFrame=h===TileSelectionResult.RENDERED,n.notYetRenderableCount=i.renderable?0:1,i._lastSelectionResultFrame=t.frameNumber,i._lastSelectionResult=TileSelectionResult.RENDERED,void(n.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(i));i._lastSelectionResultFrame=t.frameNumber,i._lastSelectionResult=TileSelectionResult.REFINED;m=e._tilesToRender.length,f=e._tileLoadQueueLow.length,p=e._tileLoadQueueMedium.length,o=e._tileLoadQueueHigh.length,d=e._tileToUpdateHeights.length;if(visitVisibleChildrenNearToFar(e,s,l,c,u,t,r,n),m!==e._tilesToRender.length){l=n.allAreRenderable,c=n.anyWereRenderedLastFrame,u=n.notYetRenderableCount,r=!1;if(!l&&!c){for(var g=e._tilesToRender,_=m;_<g.length;++_)for(var y=g[_];void 0!==y&&y._lastSelectionResult!==TileSelectionResult.KICKED&&y!==i;)y._lastSelectionResult=TileSelectionResult.kick(y._lastSelectionResult),y=y.parent;e._tilesToRender.length=m,e._tileToUpdateHeights.length=d,addTileToRenderList(e,i),i._lastSelectionResult=TileSelectionResult.RENDERED;d=h===TileSelectionResult.RENDERED;!d&&u>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=f,e._tileLoadQueueMedium.length=p,e._tileLoadQueueHigh.length=o,queueTileLoad(e,e._tileLoadQueueMedium,i,t),n.notYetRenderableCount=i.renderable?0:1,r=!0),n.allAreRenderable=i.renderable,(n.anyWereRenderedLastFrame=d)||e._tileToUpdateHeights.push(i),++a.tilesWaitingForChildren}e.preloadAncestors&&!r&&queueTileLoad(e,e._tileLoadQueueLow,i,t)}}else i._lastSelectionResultFrame=t.frameNumber,i._lastSelectionResult=TileSelectionResult.RENDERED,addTileToRenderList(e,i),queueTileLoad(e,e._tileLoadQueueHigh,i,t),n.allAreRenderable=i.renderable,n.anyWereRenderedLastFrame=h===TileSelectionResult.RENDERED,n.notYetRenderableCount=i.renderable?0:1}function visitVisibleChildrenNearToFar(e,t,i,r,n,a,o,s){var l=a.camera.positionCartographic,c=e._tileProvider,u=e._occluders,d=traversalQuadsByLevel[t.level],h=d.southwest,p=d.southeast,m=d.northwest,f=d.northeast;l.longitude<t.rectangle.east?l.latitude<t.rectangle.north?(visitIfVisible(e,t,c,a,u,o,h),visitIfVisible(e,i,c,a,u,o,p),visitIfVisible(e,r,c,a,u,o,m),visitIfVisible(e,n,c,a,u,o,f)):(visitIfVisible(e,r,c,a,u,o,m),visitIfVisible(e,t,c,a,u,o,h),visitIfVisible(e,n,c,a,u,o,f),visitIfVisible(e,i,c,a,u,o,p)):l.latitude<t.rectangle.north?(visitIfVisible(e,i,c,a,u,o,p),visitIfVisible(e,t,c,a,u,o,h),visitIfVisible(e,n,c,a,u,o,f),visitIfVisible(e,r,c,a,u,o,m)):(visitIfVisible(e,n,c,a,u,o,f),visitIfVisible(e,r,c,a,u,o,m),visitIfVisible(e,i,c,a,u,o,p),visitIfVisible(e,t,c,a,u,o,h)),d.combine(s)}function containsNeededPosition(e,t){t=t.rectangle;return defined(e._cameraPositionCartographic)&&Rectangle.contains(t,e._cameraPositionCartographic)||defined(e._cameraReferenceFrameOriginCartographic)&&Rectangle.contains(t,e._cameraReferenceFrameOriginCartographic)}function visitIfVisible(e,t,i,r,n,a,o){if(i.computeTileVisibility(t,r,n)!==Visibility$1.NONE)return visitTile(e,r,t,a,o);++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),o.allAreRenderable=!0,o.anyWereRenderedLastFrame=!1,o.notYetRenderableCount=0,containsNeededPosition(e,t)?(defined(t.data)&&defined(t.data.vertexArray)||queueTileLoad(e,e._tileLoadQueueMedium,t,r),o=e._lastSelectionFrameNumber,(o=t._lastSelectionResultFrame===o?t._lastSelectionResult:TileSelectionResult.NONE)!==TileSelectionResult.CULLED_BUT_NEEDED&&o!==TileSelectionResult.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=TileSelectionResult.CULLED_BUT_NEEDED):(!e.preloadSiblings&&0!==t.level||queueTileLoad(e,e._tileLoadQueueLow,t,r),t._lastSelectionResult=TileSelectionResult.CULLED),t._lastSelectionResultFrame=r.frameNumber}function screenSpaceError(e,t,i){if(t.mode===SceneMode$1.SCENE2D||t.camera.frustum instanceof OrthographicFrustum||t.camera.frustum instanceof OrthographicOffCenterFrustum)return screenSpaceError2D(e,t,i);e=e._tileProvider.getLevelMaximumGeometricError(i.level),i=i._distance,e=e*t.context.drawingBufferHeight/(i*t.camera.frustum.sseDenominator);return t.fog.enabled&&(e-=CesiumMath.fog(i,t.fog.density)*t.fog.sse),e/=t.pixelRatio}function screenSpaceError2D(e,t,i){var r=t.camera.frustum;defined(r._offCenterFrustum)&&(r=r._offCenterFrustum);var n=t.context,a=n.drawingBufferWidth,n=n.drawingBufferHeight,n=e._tileProvider.getLevelMaximumGeometricError(i.level)/(Math.max(r.top-r.bottom,r.right-r.left)/Math.max(a,n));return t.fog.enabled&&t.mode!==SceneMode$1.SCENE2D&&(n-=CesiumMath.fog(i._distance,t.fog.density)*t.fog.sse),n/=t.pixelRatio}function addTileToRenderList(e,t){e._tilesToRender.push(t)}function processTileLoadQueue(e,t){var i,r,n=e._tileLoadQueueHigh,a=e._tileLoadQueueMedium,o=e._tileLoadQueueLow;0===n.length&&0===a.length&&0===o.length||(e._tileReplacementQueue.trimTiles(e.tileCacheSize),i=getTimestamp$1()+e._loadQueueTimeSlice,n=processSinglePriorityLoadQueue(e,t,r=e._tileProvider,i,n,!1),n=processSinglePriorityLoadQueue(e,t,r,i,a,n),processSinglePriorityLoadQueue(e,t,r,i,o,n))}function sortByLoadPriority(e,t){return e._loadPriority-t._loadPriority}function processSinglePriorityLoadQueue(e,t,i,r,n,a){void 0!==i.computeTileLoadPriority&&n.sort(sortByLoadPriority);for(var o=0,s=n.length;o<s&&(getTimestamp$1()<r||!a);++o){var l=n[o];e._tileReplacementQueue.markTileRendered(l),i.loadTile(t,l),a=!0}return a}var scratchRay=new Ray,scratchCartographic$2=new Cartographic,scratchPosition$1=new Cartesian3,scratchArray$1=[];function updateHeights(e,t){if(e.tileProvider.ready){var i=scratchArray$1;i.length=0;for(var r=e._tileToUpdateHeights,n=e._tileProvider.terrainProvider,a=getTimestamp$1()+e._updateHeightsTimeSlice,o=t.mode,s=t.mapProjection,l=e.tileProvider.tilingScheme.ellipsoid;0<r.length;){var c=r[0];if(defined(c.data)&&defined(c.data.mesh)){for(var u=c.customData,d=u.length,h=!1,p=e._lastTileIndex;p<d;++p){var m,f,g=u[p];if(c.level>g.level){defined(g.positionOnEllipsoidSurface)||(g.positionOnEllipsoidSurface=Cartesian3.fromRadians(g.positionCartographic.longitude,g.positionCartographic.latitude,0,l)),o===SceneMode$1.SCENE3D?(m=l.geodeticSurfaceNormal(g.positionOnEllipsoidSurface,scratchRay.direction),defined(l.getSurfaceNormalIntersectionWithZAxis(g.positionOnEllipsoidSurface,11500,scratchRay.origin))||(defined(c.data.tileBoundingRegion)&&(f=c.data.tileBoundingRegion.minimumHeight),_=Math.min(defaultValue(f,0),-11500),x=Cartesian3.multiplyByScalar(m,Math.abs(_)+1,scratchPosition$1),Cartesian3.subtract(g.positionOnEllipsoidSurface,x,scratchRay.origin))):(Cartographic.clone(g.positionCartographic,scratchCartographic$2),scratchCartographic$2.height=-11500,s.project(scratchCartographic$2,scratchPosition$1),Cartesian3.fromElements(scratchPosition$1.z,scratchPosition$1.x,scratchPosition$1.y,scratchPosition$1),Cartesian3.clone(scratchPosition$1,scratchRay.origin),Cartesian3.clone(Cartesian3.UNIT_X,scratchRay.direction));var _=c.data.pick(scratchRay,o,s,!1,scratchPosition$1);defined(_)&&(g.callback(_),g.level=c.level)}else if(c.level===g.level){for(var y,C=c.children,v=C.length,S=0;S<v&&(y=C[S],!Rectangle.contains(y.rectangle,g.positionCartographic));++S);var x=n.getTileDataAvailable(y.x,y.y,y.level),_=c.parent;(defined(x)&&!x||defined(_)&&defined(_.data)&&defined(_.data.terrainData)&&!_.data.terrainData.isChildAvailable(_.x,_.y,y.x,y.y))&&g.removeFunc()}if(getTimestamp$1()>=a){h=!0;break}}if(h){e._lastTileIndex=p;break}e._lastTileIndex=0,r.shift()}else{var T=c._lastSelectionResultFrame===e._lastSelectionFrameNumber?c._lastSelectionResult:TileSelectionResult.NONE;T!==TileSelectionResult.RENDERED&&T!==TileSelectionResult.CULLED_BUT_NEEDED||i.push(c),r.shift(),e._lastTileIndex=0}}for(p=0;p<i.length;p++)r.push(i[p])}}function createRenderCommandsForSelectedTiles(e,t){for(var i=e._tileProvider,r=e._tilesToRender,n=0,a=r.length;n<a;++n){var o=r[n];i.showTileThisFrame(o,t)}}function Globe(e){var t=new EllipsoidTerrainProvider({ellipsoid:e=defaultValue(e,Ellipsoid.WGS84)}),i=new ImageryLayerCollection;this._ellipsoid=e,this._imageryLayerCollection=i,this._surfaceShaderSet=new GlobeSurfaceShaderSet,this._material=void 0,this._surface=new QuadtreePrimitive({tileProvider:new GlobeSurfaceTileProvider({terrainProvider:t,imageryLayers:i,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new Event,this._undergroundColor=Color.clone(Color.BLACK),this._undergroundColorAlphaByDistance=new NearFarScalar(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new GlobeTranslucency,makeShadersDirty(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Resource({url:buildModuleUrl("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!0,this.lightingFadeOutDistance=1e7,this.lightingFadeInDistance=2e7,this.nightFadeOutDistance=1e7,this.nightFadeInDistance=5e7,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=ShadowMode$1.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0}function makeShadersWaJue(e){var t=[],i=defined(e._material)&&(e._material.shaderSource.match(/slope/)||e._material.shaderSource.match("normalEC")),r=[GroundAtmosphere];!defined(e._material)||i&&!e._terrainProvider.requestVertexNormals?e._surface._tileProvider.materialUniformMap=void 0:(r.push(e._material.shaderSource),t.push("WAJUE"),e._surface._tileProvider.materialUniformMap=e._material._uniforms),r.push(GlobeFS),e._surfaceShaderSet.baseVertexShaderSource=new ShaderSource({sources:[GroundAtmosphere,GlobeVS],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new ShaderSource({sources:r,defines:t}),e._surfaceShaderSet.material=e._material}function makeShadersDirty(e){var t=[],i=defined(e._material)&&(e._material.shaderSource.match(/slope/)||e._material.shaderSource.match("normalEC")),r=[GroundAtmosphere];!defined(e._material)||i&&!e._terrainProvider.requestVertexNormals?e._surface._tileProvider.materialUniformMap=void 0:(r.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms),r.push(GlobeFS),e._surfaceShaderSet.baseVertexShaderSource=new ShaderSource({sources:[GroundAtmosphere,GlobeVS],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new ShaderSource({sources:r,defines:t}),e._surfaceShaderSet.material=e._material}function createComparePickTileFunction(i){return function(e,t){return BoundingSphere.distanceSquaredTo(e.pickBoundingSphere,i)-BoundingSphere.distanceSquaredTo(t.pickBoundingSphere,i)}}Object.defineProperties(Globe.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return!defined(this._surface)||this._surface.tileProvider.ready&&0===this._surface._tileLoadQueueHigh.length&&0===this._surface._tileLoadQueueMedium.length&&0===this._surface._tileLoadQueueLow.length}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){defined(e)||(e=Rectangle.clone(Rectangle.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,this._terrainProviderChanged.raiseEvent(e),defined(this._material)&&makeShadersDirty(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&((this._material=e)&&"WaJue"==e.type?makeShadersWaJue:makeShadersDirty)(this)}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=Color.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){this._undergroundColorAlphaByDistance=NearFarScalar.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});var scratchArray=[],scratchSphereIntersectionResult={start:0,stop:0};Globe.prototype.pickWorldCoordinates=function(e,t,i,r){i=defaultValue(i,!0);var n=t.mode,a=t.mapProjection,o=scratchArray;o.length=0;for(var s,l=this._surface._tilesToRender,c=l.length,u=0;u<c;++u){var d,h=(d=l[u]).data;if(defined(h)){var p=h.pickBoundingSphere;if(n!==SceneMode$1.SCENE3D)h.pickBoundingSphere=p=BoundingSphere.fromRectangleWithHeights2D(d.rectangle,a,h.tileBoundingRegion.minimumHeight,h.tileBoundingRegion.maximumHeight,p),Cartesian3.fromElements(p.center.z,p.center.x,p.center.y,p.center);else{if(!defined(h.renderedMesh))continue;BoundingSphere.clone(h.renderedMesh.boundingSphere3D,p)}defined(IntersectionTests.raySphere(e,p,scratchSphereIntersectionResult))&&o.push(h)}}for(o.sort(createComparePickTileFunction(e.origin)),c=o.length,u=0;u<c&&!defined(s=o[u].pick(e,t.mode,t.mapProjection,i,r));++u);return s};var cartoScratch=new Cartographic;Globe.prototype.pick=function(e,t,i){return defined(i=this.pickWorldCoordinates(e,t,!0,i))&&t.mode!==SceneMode$1.SCENE3D&&(i=Cartesian3.fromElements(i.y,i.z,i.x,i),e=t.mapProjection.unproject(i,cartoScratch),i=t.globe.ellipsoid.cartographicToCartesian(e,i)),i};var scratchGetHeightCartesian=new Cartesian3,scratchGetHeightIntersection=new Cartesian3,scratchGetHeightCartographic=new Cartographic,scratchGetHeightRay=new Ray;function tileIfContainsCartographic(e,t){return defined(e)&&Rectangle.contains(e.rectangle,t)?e:void 0}Globe.prototype.getHeight=function(e){var t=this._surface._levelZeroTiles;if(defined(t)){for(var i,r=t.length,n=0;n<r&&(i=t[n],!Rectangle.contains(i.rectangle,e));++n);if(!(r<=n)){for(var a=i;defined(i);)defined(i=tileIfContainsCartographic(i._southwestChild,e)||tileIfContainsCartographic(i._southeastChild,e)||tileIfContainsCartographic(i._northwestChild,e)||i._northeastChild)&&defined(i.data)&&defined(i.data.renderedMesh)&&(a=i);if(defined(i=a)&&defined(i.data)&&defined(i.data.renderedMesh)){var o,s=this._surface._tileProvider.tilingScheme.ellipsoid,l=Cartesian3.fromRadians(e.longitude,e.latitude,0,s,scratchGetHeightCartesian),c=scratchGetHeightRay,u=s.geodeticSurfaceNormal(l,c.direction);defined(s.getSurfaceNormalIntersectionWithZAxis(l,11500,c.origin))||(defined(i.data.tileBoundingRegion)&&(o=i.data.tileBoundingRegion.minimumHeight),o=Math.min(defaultValue(o,0),-11500),o=Cartesian3.multiplyByScalar(u,Math.abs(o)+1,scratchGetHeightIntersection),Cartesian3.subtract(l,o,c.origin));c=i.data.pick(c,void 0,void 0,!1,scratchGetHeightIntersection);if(defined(c))return s.cartesianToCartographic(c,scratchGetHeightCartographic).height}}}},Globe.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)},Globe.prototype.beginFrame=function(t){var i,r,e=this._surface,n=e.tileProvider,a=this.terrainProvider,o=this.showWaterEffect&&a.ready&&a.hasWaterMask;o&&this._oceanNormalMapResourceDirty&&(this._oceanNormalMapResourceDirty=!1,s=this._oceanNormalMapResource,defined(i=s.url)?(r=this,when(s.fetchImage(),function(e){i===r._oceanNormalMapResource.url&&(r._oceanNormalMap=r._oceanNormalMap&&r._oceanNormalMap.destroy(),r._oceanNormalMap=new Texture({context:t.context,source:e}))})):this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy());var a=t.passes,s=t.mode;a.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e.tileCacheSize=this.tileCacheSize,e.loadingDescendantLimit=this.loadingDescendantLimit,e.preloadAncestors=this.preloadAncestors,e.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===SceneMode$1.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,e.beginFrame(t))},Globe.prototype.render=function(e){this.show&&(defined(this._material)&&this._material.update(e.context),this._surface.render(e))},Globe.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)},Globe.prototype.isDestroyed=function(){return!1},Globe.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),destroyObject(this)};var PassThrough="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\ngl_FragColor = texture2D(colorTexture, v_textureCoordinates);\n}\n",PassThroughDepth="uniform highp sampler2D u_depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\ngl_FragColor = czm_packDepth(texture2D(u_depthTexture, v_textureCoordinates).r);\n}\n";function GlobeDepth(){this._globeColorTexture=void 0,this._primitiveColorTexture=void 0,this._depthStencilTexture=void 0,this._globeDepthTexture=void 0,this._tempGlobeDepthTexture=void 0,this._tempCopyDepthTexture=void 0,this._globeColorFramebuffer=void 0,this._primitiveColorFramebuffer=void 0,this._copyDepthFramebuffer=void 0,this._tempCopyDepthFramebuffer=void 0,this._updateDepthFramebuffer=void 0,this._clearGlobeColorCommand=void 0,this._clearPrimitiveColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._mergeColorCommand=void 0,this._viewport=new BoundingRectangle,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useLogDepth=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0,this._debugGlobeDepthViewportCommand=void 0}function executeDebugGlobeDepth(e,t,i,r){var n;defined(e._debugGlobeDepthViewportCommand)&&r===e._useLogDepth||(n=new ShaderSource({defines:[r?"LOG_DEPTH":""],sources:["uniform highp sampler2D u_depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n float z_window = czm_unpackDepth(texture2D(u_depthTexture, v_textureCoordinates));\n z_window = czm_reverseLogDepth(z_window); \n float n_range = czm_depthRange.near;\n float f_range = czm_depthRange.far;\n float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\n float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\n gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\n}\n"]}),e._debugGlobeDepthViewportCommand=t.createViewportQuadCommand(n,{uniformMap:{u_depthTexture:function(){return e._globeDepthTexture}},owner:e}),e._useLogDepth=r),e._debugGlobeDepthViewportCommand.execute(t,i)}function destroyTextures$2(e){e._globeColorTexture=e._globeColorTexture&&!e._globeColorTexture.isDestroyed()&&e._globeColorTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&!e._depthStencilTexture.isDestroyed()&&e._depthStencilTexture.destroy(),e._globeDepthTexture=e._globeDepthTexture&&!e._globeDepthTexture.isDestroyed()&&e._globeDepthTexture.destroy()}function destroyFramebuffers$2(e){e._globeColorFramebuffer=e._globeColorFramebuffer&&!e._globeColorFramebuffer.isDestroyed()&&e._globeColorFramebuffer.destroy(),e._copyDepthFramebuffer=e._copyDepthFramebuffer&&!e._copyDepthFramebuffer.isDestroyed()&&e._copyDepthFramebuffer.destroy()}function destroyUpdateDepthResources(e){e._tempCopyDepthFramebuffer=e._tempCopyDepthFramebuffer&&!e._tempCopyDepthFramebuffer.isDestroyed()&&e._tempCopyDepthFramebuffer.destroy(),e._updateDepthFramebuffer=e._updateDepthFramebuffer&&!e._updateDepthFramebuffer.isDestroyed()&&e._updateDepthFramebuffer.destroy(),e._tempGlobeDepthTexture=e._tempGlobeDepthTexture&&!e._tempGlobeDepthTexture.isDestroyed()&&e._tempGlobeDepthTexture.destroy()}function createUpdateDepthResources(e,t,i,r,n){e._tempGlobeDepthTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),e._tempCopyDepthFramebuffer=new Framebuffer({context:t,colorTextures:[e._tempGlobeDepthTexture],destroyAttachments:!1}),e._updateDepthFramebuffer=new Framebuffer({context:t,colorTextures:[e._globeDepthTexture],depthStencilTexture:n.framebuffer.depthStencilTexture,destroyAttachments:!1})}function createTextures$1(e,t,i,r,n){n=n?t.halfFloatingPointTexture?PixelDatatype$1.HALF_FLOAT:PixelDatatype$1.FLOAT:PixelDatatype$1.UNSIGNED_BYTE;e._globeColorTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:n,sampler:Sampler.NEAREST}),e._depthStencilTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8}),e._globeDepthTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST})}function createFramebuffers$2(e,t){e._globeColorFramebuffer=new Framebuffer({context:t,colorTextures:[e._globeColorTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._copyDepthFramebuffer=new Framebuffer({context:t,colorTextures:[e._globeDepthTexture],destroyAttachments:!1})}function createPrimitiveFramebuffer(e,t,i,r,n){n=n?t.halfFloatingPointTexture?PixelDatatype$1.HALF_FLOAT:PixelDatatype$1.FLOAT:PixelDatatype$1.UNSIGNED_BYTE;e._primitiveColorTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:n,sampler:Sampler.NEAREST}),e._primitiveColorFramebuffer=new Framebuffer({context:t,colorTextures:[e._primitiveColorTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1})}function destroyPrimitiveFramebuffer(e){e._primitiveColorTexture=e._primitiveColorTexture&&!e._primitiveColorTexture.isDestroyed()&&e._primitiveColorTexture.destroy(),e._primitiveColorFramebuffer=e._primitiveColorFramebuffer&&!e._primitiveColorFramebuffer.isDestroyed()&&e._primitiveColorFramebuffer.destroy()}function updateFramebuffers$3(e,t,i,r,n,a){var o=e._globeColorTexture,o=!defined(o)||o.width!==i||o.height!==r||n!==e._useHdr;o&&(destroyTextures$2(e),destroyFramebuffers$2(e),createTextures$1(e,t,i,r,n),createFramebuffers$2(e,t)),!o&&a===e._clearGlobeDepth||(destroyPrimitiveFramebuffer(e),a&&createPrimitiveFramebuffer(e,t,i,r,n))}function updateCopyCommands$1(e,t,i,r,n){e._viewport.width=i,e._viewport.height=r;i=!BoundingRectangle.equals(e._viewport,n.viewport),r=i!==e._useScissorTest;e._useScissorTest=i,BoundingRectangle.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=BoundingRectangle.clone(n.viewport,e._scissorRectangle),r=!0),defined(e._rs)&&BoundingRectangle.equals(e._viewport,e._rs.viewport)&&!r||(e._rs=RenderState.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=RenderState.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:BlendingState$1.ALPHA_BLEND}),e._rsUpdate=RenderState.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:StencilFunction$1.EQUAL,frontOperation:{fail:StencilOperation$1.KEEP,zFail:StencilOperation$1.KEEP,zPass:StencilOperation$1.KEEP},backFunction:StencilFunction$1.NEVER,reference:StencilConstants$1.CESIUM_3D_TILE_MASK,mask:StencilConstants$1.CESIUM_3D_TILE_MASK}})),defined(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(PassThroughDepth,{uniformMap:{u_depthTexture:function(){return e._depthStencilTexture}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer,e._copyDepthCommand.renderState=e._rs,defined(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(PassThrough,{uniformMap:{colorTexture:function(){return e._globeColorTexture}},owner:e})),e._copyColorCommand.renderState=e._rs,defined(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(PassThroughDepth,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer,e._tempCopyDepthCommand.renderState=e._rs,defined(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(PassThrough,{uniformMap:{colorTexture:function(){return e._tempGlobeDepthTexture}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer,e._updateDepthCommand.renderState=e._rsUpdate,defined(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new ClearCommand({color:new Color(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e._globeColorFramebuffer,defined(e._clearPrimitiveColorCommand)||(e._clearPrimitiveColorCommand=new ClearCommand({color:new Color(0,0,0,0),stencil:0,owner:e})),e._clearPrimitiveColorCommand.framebuffer=e._primitiveColorFramebuffer,defined(e._mergeColorCommand)||(e._mergeColorCommand=t.createViewportQuadCommand(PassThrough,{uniformMap:{colorTexture:function(){return e._primitiveColorTexture}},owner:e})),e._mergeColorCommand.framebuffer=e._globeColorFramebuffer,e._mergeColorCommand.renderState=e._rsBlend}function GlobeTranslucencyFramebuffer(){this._colorTexture=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._framebuffer=void 0,this._packedDepthTexture=void 0,this._packedDepthFramebuffer=void 0,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new BoundingRectangle,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}function destroyResources$3(e){e._colorTexture=e._colorTexture&&!e._colorTexture.isDestroyed()&&e._colorTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&!e._depthStencilTexture.isDestroyed()&&e._depthStencilTexture.destroy(),e._depthStencilRenderbuffer=e._depthStencilRenderbuffer&&!e._depthStencilRenderbuffer.isDestroyed()&&e._depthStencilRenderbuffer.destroy(),e._framebuffer=e._framebuffer&&!e._framebuffer.isDestroyed()&&e._framebuffer.destroy(),e._packedDepthTexture=e._packedDepthTexture&&!e._packedDepthTexture.isDestroyed()&&e._packedDepthTexture.destroy(),e._packedDepthFramebuffer=e._packedDepthFramebuffer&&!e._packedDepthFramebuffer.isDestroyed()&&e._packedDepthFramebuffer.destroy()}function createResources$1(e,t,i,r,n){n=n?t.halfFloatingPointTexture?PixelDatatype$1.HALF_FLOAT:PixelDatatype$1.FLOAT:PixelDatatype$1.UNSIGNED_BYTE;e._colorTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:n,sampler:Sampler.NEAREST}),t.depthTexture?e._depthStencilTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8}):e._depthStencilRenderbuffer=new Renderbuffer({context:t,width:i,height:r,format:RenderbufferFormat$1.DEPTH_STENCIL}),e._framebuffer=new Framebuffer({context:t,colorTextures:[e._colorTexture],depthStencilTexture:e._depthStencilTexture,depthStencilRenderbuffer:e._depthStencilRenderbuffer,destroyAttachments:!1}),e._packedDepthTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),e._packedDepthFramebuffer=new Framebuffer({context:t,colorTextures:[e._packedDepthTexture],destroyAttachments:!1})}function updateResources(e,t,i,r,n){var a=e._colorTexture;defined(a)&&a.width===i&&a.height===r&&n===e._useHdr||(destroyResources$3(e),createResources$1(e,t,i,r,n))}function updateCommands(e,t,i,r,n){e._viewport.width=i,e._viewport.height=r;i=!BoundingRectangle.equals(e._viewport,n.viewport),r=i!==e._useScissorTest;e._useScissorTest=i,BoundingRectangle.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=BoundingRectangle.clone(n.viewport,e._scissorRectangle),r=!0),defined(e._renderState)&&BoundingRectangle.equals(e._viewport,e._renderState.viewport)&&!r||(e._renderState=RenderState.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),defined(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(PassThroughDepth,{uniformMap:{u_depthTexture:function(){return e._depthStencilTexture}},owner:e})),defined(e._clearCommand)||(e._clearCommand=new ClearCommand({color:new Color(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e._framebuffer,e._clearCommand.renderState=e._renderState}Object.defineProperties(GlobeDepth.prototype,{framebuffer:{get:function(){return this._globeColorFramebuffer}},primitiveFramebuffer:{get:function(){return this._primitiveColorFramebuffer}}}),GlobeDepth.prototype.executeDebugGlobeDepth=function(e,t,i){executeDebugGlobeDepth(this,e,t,i)},GlobeDepth.prototype.update=function(e,t,i,r,n){var a=i.width,i=i.height;updateFramebuffers$3(this,e,a,i,r,n),updateCopyCommands$1(this,e,a,i,t),e.uniformState.globeDepthTexture=void 0,this._useHdr=r,this._clearGlobeDepth=n},GlobeDepth.prototype.executeCopyDepth=function(e,t){defined(this._copyDepthCommand)&&(this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._globeDepthTexture)},GlobeDepth.prototype.executeUpdateDepth=function(e,t,i){var r,n=t.framebuffer.depthStencilTexture;i||n!==this._depthStencilTexture?defined(this._updateDepthCommand)&&(defined(this._updateDepthFramebuffer)&&this._updateDepthFramebuffer.depthStencilTexture===n&&this._updateDepthFramebuffer.getColorTexture(0)===this._globeDepthTexture||(r=this._globeDepthTexture.width,i=this._globeDepthTexture.height,destroyUpdateDepthResources(this),createUpdateDepthResources(this,e,r,i,t),updateCopyCommands$1(this,e,r,i,t)),this._tempCopyDepthTexture=n,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)):defined(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t)},GlobeDepth.prototype.executeCopyColor=function(e,t){defined(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)},GlobeDepth.prototype.executeMergeColor=function(e,t){defined(this._mergeColorCommand)&&this._mergeColorCommand.execute(e,t)},GlobeDepth.prototype.clear=function(e,t,i){var r=this._clearGlobeColorCommand;defined(r)&&(Color.clone(i,r.color),r.execute(e,t)),defined(r=this._clearPrimitiveColorCommand)&&defined(this._primitiveColorFramebuffer)&&r.execute(e,t)},GlobeDepth.prototype.isDestroyed=function(){return!1},GlobeDepth.prototype.destroy=function(){return destroyTextures$2(this),destroyFramebuffers$2(this),destroyPrimitiveFramebuffer(this),destroyUpdateDepthResources(this),defined(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),defined(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),defined(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),defined(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),defined(this._mergeColorCommand)&&(this._mergeColorCommand.shaderProgram=this._mergeColorCommand.shaderProgram.destroy()),defined(this._debugGlobeDepthViewportCommand)&&(this._debugGlobeDepthViewportCommand.shaderProgram=this._debugGlobeDepthViewportCommand.shaderProgram.destroy()),destroyObject(this)},Object.defineProperties(GlobeTranslucencyFramebuffer.prototype,{classificationTexture:{get:function(){return this._colorTexture}},classificationFramebuffer:{get:function(){return this._framebuffer}}}),GlobeTranslucencyFramebuffer.prototype.updateAndClear=function(e,t,i,r){var n=t.width,t=t.height;updateResources(this,i,n,t,e),updateCommands(this,i,n,t,r),this._useHdr=e},GlobeTranslucencyFramebuffer.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)},GlobeTranslucencyFramebuffer.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this._packedDepthTexture},GlobeTranslucencyFramebuffer.prototype.isDestroyed=function(){return!1},GlobeTranslucencyFramebuffer.prototype.destroy=function(){return destroyResources$3(this),destroyObject(this)};var DerivedCommandType={OPAQUE_FRONT_FACE:0,OPAQUE_BACK_FACE:1,DEPTH_ONLY_FRONT_FACE:2,DEPTH_ONLY_BACK_FACE:3,DEPTH_ONLY_FRONT_AND_BACK_FACE:4,TRANSLUCENT_FRONT_FACE:5,TRANSLUCENT_BACK_FACE:6,TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:7,TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:8,PICK_FRONT_FACE:9,PICK_BACK_FACE:10,DERIVED_COMMANDS_MAXIMUM_LENGTH:11},derivedCommandsMaximumLength=DerivedCommandType.DERIVED_COMMANDS_MAXIMUM_LENGTH,DerivedCommandNames=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function GlobeTranslucencyState(){this._frontFaceAlphaByDistance=new NearFarScalar(0,1,0,1),this._backFaceAlphaByDistance=new NearFarScalar(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=Rectangle.clone(Rectangle.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(derivedCommandsMaximumLength),this._derivedBlendCommandTypes=new Array(derivedCommandsMaximumLength),this._derivedPickCommandTypes=new Array(derivedCommandsMaximumLength),this._derivedCommandTypesToUpdate=new Array(derivedCommandsMaximumLength),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}function updateAlphaByDistance(e,t,i,r){return e?defined(i)?(NearFarScalar.clone(i,r),r.nearValue*=t,r.farValue*=t):(r.nearValue=t,r.farValue=t):(r.nearValue=1,r.farValue=1),r}function isFaceTranslucent(e,t,i){return e&&(i.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function isSunVisibleThroughGlobe(e,t){var i=e._frontFaceTranslucent,e=e._backFaceTranslucent;return i&&(t.cameraUnderground||e)}function isEnvironmentVisible(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function useDepthPlane(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function requiresManualDepthTest(e,t,i){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!i.depthTestAgainstTerrain&&t.mode!==SceneMode$1.SCENE2D&&t.context.depthTexture}function getNumberOfTextureUniforms(e){var t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function gatherDerivedCommandRequirements(e,t){e._derivedCommandsLength=getDerivedCommandTypes(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=getDerivedCommandTypes(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=getDerivedCommandTypes(e,t,!1,!0,e._derivedPickCommandTypes);for(var i=0,r=0;r<e._derivedCommandsLength;++r)i|=1<<e._derivedCommandTypes[r];for(r=0;r<e._derivedBlendCommandsLength;++r)i|=1<<e._derivedBlendCommandTypes[r];for(r=0;r<e._derivedPickCommandsLength;++r)i|=1<<e._derivedPickCommandTypes[r];var n=0;for(r=0;r<derivedCommandsMaximumLength;++r)0<(i&1<<r)&&(e._derivedCommandTypesToUpdate[n++]=r);e._derivedCommandsToUpdateLength=n;t=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=t,!defined(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=createDerivedCommandPacks())}function getDerivedCommandTypes(e,t,i,r,n){var a=0,o=e._frontFaceTranslucent,s=e._backFaceTranslucent;if(!o)return a;var l=t.cameraUnderground,o=e._requiresManualDepthTest,e=r?DerivedCommandType.PICK_FRONT_FACE:o?DerivedCommandType.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:DerivedCommandType.TRANSLUCENT_FRONT_FACE,o=r?DerivedCommandType.PICK_BACK_FACE:o?DerivedCommandType.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:DerivedCommandType.TRANSLUCENT_BACK_FACE;return t.mode===SceneMode$1.SCENE2D?(n[a++]=DerivedCommandType.DEPTH_ONLY_FRONT_FACE,n[a++]=e):s?(i||(n[a++]=DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE),l?(n[a++]=e,n[a++]=o):(n[a++]=o,n[a++]=e)):l?(i||(n[a++]=DerivedCommandType.DEPTH_ONLY_BACK_FACE),n[a++]=DerivedCommandType.OPAQUE_FRONT_FACE,n[a++]=o):(i||(n[a++]=DerivedCommandType.DEPTH_ONLY_FRONT_FACE),n[a++]=DerivedCommandType.OPAQUE_BACK_FACE,n[a++]=e),a}function removeDefine(e,t){t=e.indexOf(t);-1<t&&e.splice(t,1)}function hasDefine(e,t){return-1<e.indexOf(t)}function getOpaqueFrontFaceShaderProgram(e,t){removeDefine(e.defines,"TRANSLUCENT"),removeDefine(t.defines,"TRANSLUCENT")}function getOpaqueBackFaceShaderProgram(e,t){removeDefine(e.defines,"GROUND_ATMOSPHERE"),removeDefine(t.defines,"GROUND_ATMOSPHERE"),removeDefine(e.defines,"FOG"),removeDefine(t.defines,"FOG"),removeDefine(e.defines,"TRANSLUCENT"),removeDefine(t.defines,"TRANSLUCENT")}function getDepthOnlyShaderProgram(e,t){hasDefine(t.defines,"TILE_LIMIT_RECTANGLE")||hasDefine(t.defines,"ENABLE_CLIPPING_PLANES")||(t.sources=["void main() \n{ \n gl_FragColor = vec4(1.0); \n} \n"])}function getTranslucentShaderProgram$1(e,t){for(var i=t.sources,r=i.length,n=0;n<r;++n)i[n]=ShaderSource.replaceMain(i[n],"czm_globe_translucency_main");i.push("\n\nuniform sampler2D u_classificationTexture; \nvoid main() \n{ \n vec2 st = gl_FragCoord.xy / czm_viewport.zw; \n#ifdef MANUAL_DEPTH_TEST \n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, st)); \n if (logDepthOrDepth != 0.0) \n { \n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); \n float depthEC = eyeCoordinate.z / eyeCoordinate.w; \n if (v_positionEC.z < depthEC) \n { \n discard; \n } \n } \n#endif \n czm_globe_translucency_main(); \n vec4 classificationColor = texture2D(u_classificationTexture, st); \n if (classificationColor.a > 0.0) \n { \n // Reverse premultiplication process to get the correct composited result of the classification primitives \n classificationColor.rgb /= classificationColor.a; \n } \n gl_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + gl_FragColor * (1.0 - classificationColor.a); \n} \n")}function getTranslucentBackFaceShaderProgram(e,t){getTranslucentShaderProgram$1(e,t),removeDefine(e.defines,"GROUND_ATMOSPHERE"),removeDefine(t.defines,"GROUND_ATMOSPHERE"),removeDefine(e.defines,"FOG"),removeDefine(t.defines,"FOG")}function getTranslucentFrontFaceManualDepthTestShaderProgram(e,t){getTranslucentShaderProgram$1(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function getTranslucentBackFaceManualDepthTestShaderProgram(e,t){getTranslucentBackFaceShaderProgram(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function getPickShaderProgram(e,t){t.sources=["uniform sampler2D u_classificationTexture; \nvoid main() \n{ \n vec2 st = gl_FragCoord.xy / czm_viewport.zw; \n vec4 pickColor = texture2D(u_classificationTexture, st); \n if (pickColor == vec4(0.0)) \n { \n discard; \n } \n gl_FragColor = pickColor; \n} \n"]}function getDerivedShaderProgram(e,t,i,r,n,a){if(!defined(n))return t;if(!r&&defined(i))return i;var o,s=e.shaderCache.getDerivedShaderProgram(t,a);return defined(s)||(o=t._attributeLocations,r=t.vertexShaderSource.clone(),i=t.fragmentShaderSource.clone(),r.defines=defined(r.defines)?r.defines.slice(0):[],i.defines=defined(i.defines)?i.defines.slice(0):[],n(r,i),s=e.shaderCache.createDerivedShaderProgram(t,a,{vertexShaderSource:r,fragmentShaderSource:i,attributeLocations:o})),s}function getOpaqueFrontFaceRenderState(e){e.cull.face=CullFace$1.BACK,e.cull.enabled=!0}function getOpaqueBackFaceRenderState(e){e.cull.face=CullFace$1.FRONT,e.cull.enabled=!0}function getDepthOnlyFrontFaceRenderState(e){e.cull.face=CullFace$1.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function getDepthOnlyBackFaceRenderState(e){e.cull.face=CullFace$1.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function getDepthOnlyFrontAndBackFaceRenderState(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function getTranslucentFrontFaceRenderState(e){e.cull.face=CullFace$1.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=BlendingState$1.ALPHA_BLEND}function getTranslucentBackFaceRenderState(e){e.cull.face=CullFace$1.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=BlendingState$1.ALPHA_BLEND}function getPickFrontFaceRenderState(e){e.cull.face=CullFace$1.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function getPickBackFaceRenderState(e){e.cull.face=CullFace$1.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function getDerivedRenderState(e,t,i,r,n){if(!defined(r))return e;if(!i&&defined(t))return t;t=n[e.id];return defined(t)||(r(r=RenderState.getState(e)),t=RenderState.fromCache(r),n[e.id]=t),t}function getTranslucencyUniformMap(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function getDerivedUniformMap(e,t,i,r,n){return defined(n)?!r&&defined(i)?i:combine$2(t,n(e),!1):t}function DerivedCommandPack(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function createDerivedCommandPacks(){return[new DerivedCommandPack({pass:Pass$1.GLOBE,pickOnly:!1,getShaderProgramFunction:getOpaqueFrontFaceShaderProgram,getRenderStateFunction:getOpaqueFrontFaceRenderState,getUniformMapFunction:void 0}),new DerivedCommandPack({pass:Pass$1.GLOBE,pickOnly:!1,getShaderProgramFunction:getOpaqueBackFaceShaderProgram,getRenderStateFunction:getOpaqueBackFaceRenderState,getUniformMapFunction:void 0}),new DerivedCommandPack({pass:Pass$1.GLOBE,pickOnly:!1,getShaderProgramFunction:getDepthOnlyShaderProgram,getRenderStateFunction:getDepthOnlyFrontFaceRenderState,getUniformMapFunction:void 0}),new DerivedCommandPack({pass:Pass$1.GLOBE,pickOnly:!1,getShaderProgramFunction:getDepthOnlyShaderProgram,getRenderStateFunction:getDepthOnlyBackFaceRenderState,getUniformMapFunction:void 0}),new DerivedCommandPack({pass:Pass$1.GLOBE,pickOnly:!1,getShaderProgramFunction:getDepthOnlyShaderProgram,getRenderStateFunction:getDepthOnlyFrontAndBackFaceRenderState,getUniformMapFunction:void 0}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:getTranslucentShaderProgram$1,getRenderStateFunction:getTranslucentFrontFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:getTranslucentBackFaceShaderProgram,getRenderStateFunction:getTranslucentBackFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:getTranslucentFrontFaceManualDepthTestShaderProgram,getRenderStateFunction:getTranslucentFrontFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:getTranslucentBackFaceManualDepthTestShaderProgram,getRenderStateFunction:getTranslucentBackFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:getPickShaderProgram,getRenderStateFunction:getPickFrontFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap}),new DerivedCommandPack({pass:Pass$1.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:getPickShaderProgram,getRenderStateFunction:getPickBackFaceRenderState,getUniformMapFunction:getTranslucencyUniformMap})]}Object.defineProperties(GlobeTranslucencyState.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}}),GlobeTranslucencyState.prototype.update=function(e){var t=e.globe;if(!defined(t)||!t.show)return this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,void(this._useDepthPlane=!1);this._frontFaceAlphaByDistance=updateAlphaByDistance(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=updateAlphaByDistance(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=isFaceTranslucent(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=isFaceTranslucent(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=requiresManualDepthTest(this,e,t),this._sunVisibleThroughGlobe=isSunVisibleThroughGlobe(this,e),this._environmentVisible=isEnvironmentVisible(this,e),this._useDepthPlane=useDepthPlane(this,e),this._numberOfTextureUniforms=getNumberOfTextureUniforms(this),this._rectangle=Rectangle.clone(t.translucency.rectangle,this._rectangle),gatherDerivedCommandRequirements(this,e)};var derivedCommandNames=new Array(derivedCommandsMaximumLength),derivedCommandPacks=new Array(derivedCommandsMaximumLength);function updateDerivedCommands$1(e,t,i,r,n,a,o){var s=t.derivedCommands.globeTranslucency,l=e._derivedCommandsDirty;if(t.dirty||!defined(s)||l){t.dirty=!1,defined(s)||(s={},t.derivedCommands.globeTranslucency=s);var c=o.frameNumber,u=defaultValue(s.uniformMapDirtyFrame,0),d=defaultValue(s.shaderProgramDirtyFrame,0),h=defaultValue(s.renderStateDirtyFrame,0),p=s.uniformMap!==t.uniformMap,m=s.shaderProgramId!==t.shaderProgram.id,f=s.renderStateId!==t.renderState.id;p&&(s.uniformMapDirtyFrame=c),m&&(s.shaderProgramDirtyFrame=c),f&&(s.renderStateDirtyFrame=c),s.uniformMap=t.uniformMap,s.shaderProgramId=t.shaderProgram.id,s.renderStateId=t.renderState.id;for(var g=0;g<i;++g){var _,y,C=a[g],v=r[g],S=n[g],x=defined(T=s[S])?(_=T.uniformMap,y=T.shaderProgram,T.renderState):y=_=void 0,T=DrawCommand.shallowClone(t,T),b=defaultValue((s[S]=T).derivedCommands.uniformMapDirtyFrame,0),E=defaultValue(T.derivedCommands.shaderProgramDirtyFrame,0),P=defaultValue(T.derivedCommands.renderStateDirtyFrame,0),b=p||b<u,E=m||E<d,P=f||P<h;b&&(T.derivedCommands.uniformMapDirtyFrame=c),E&&(T.derivedCommands.shaderProgramDirtyFrame=c),P&&(T.derivedCommands.renderStateDirtyFrame=c),T.derivedCommands.type=v,T.pass=C.pass,T.pickOnly=C.pickOnly,T.uniformMap=getDerivedUniformMap(e,t.uniformMap,_,b,C.getUniformMapFunction),T.shaderProgram=getDerivedShaderProgram(o.context,t.shaderProgram,y,E,C.getShaderProgramFunction,S),T.renderState=getDerivedRenderState(t.renderState,x,P,C.getRenderStateFunction,C.renderStateCache)}}}function executeCommandsMatchingType(e,t,i,r,n,a,o){for(var s=0;s<t;++s){var l=e[s],c=l.derivedCommands.type;(!defined(o)||-1<o.indexOf(c))&&i(l,r,n,a)}}function executeCommands$1(e,t,i,r,n,a){for(var o=0;o<t;++o)i(e[o],r,n,a)}GlobeTranslucencyState.prototype.updateDerivedCommands=function(e,t){var i=this._derivedCommandTypesToUpdate,r=this._derivedCommandsToUpdateLength;if(0!==r){for(var n=0;n<r;++n)derivedCommandPacks[n]=this._derivedCommandPacks[i[n]],derivedCommandNames[n]=DerivedCommandNames[i[n]];updateDerivedCommands$1(this,e,r,i,derivedCommandNames,derivedCommandPacks,t)}},GlobeTranslucencyState.prototype.pushDerivedCommands=function(e,t,i){var r=i.passes.pick;if(!r||!t){var n=this._derivedCommandTypes,a=this._derivedCommandsLength;if(r?(n=this._derivedPickCommandTypes,a=this._derivedPickCommandsLength):t&&(n=this._derivedBlendCommandTypes,a=this._derivedBlendCommandsLength),0!==a)for(var o=e.derivedCommands.globeTranslucency,s=0;s<a;++s){var l=DerivedCommandNames[n[s]];i.commandList.push(o[l])}else i.commandList.push(e)}};var opaqueTypes=[DerivedCommandType.OPAQUE_FRONT_FACE,DerivedCommandType.OPAQUE_BACK_FACE],depthOnlyTypes=[DerivedCommandType.DEPTH_ONLY_FRONT_FACE,DerivedCommandType.DEPTH_ONLY_BACK_FACE,DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE];function GoogleEarthEnterpriseDiscardPolicy(){this._image=new Image}function GoogleEarthEnterpriseImageryProvider(e){var t;e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,t=defined(e.metadata)?e.metadata:new GoogleEarthEnterpriseMetadata(Resource.createIfNeeded(e.url)),this._metadata=t,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new GeographicTilingScheme({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new Rectangle(-CesiumMath.PI,-CesiumMath.PI,CesiumMath.PI,CesiumMath.PI),ellipsoid:e.ellipsoid});e=e.credit;"string"==typeof e&&(e=new Credit(e)),this._credit=e,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,defined(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new GoogleEarthEnterpriseDiscardPolicy),this._errorEvent=new Event,this._ready=!1;var i,r=this;this._readyPromise=t.readyPromise.then(function(e){if(t.imageryPresent)return TileProviderError.handleSuccess(i),r._ready=e;e=new RuntimeError("The server "+t.url+" doesn't have imagery");return i=TileProviderError.handleError(i,r,r._errorEvent,e.message,void 0,void 0,void 0,e),when.reject(e)}).otherwise(function(e){return i=TileProviderError.handleError(i,r,r._errorEvent,e.message,void 0,void 0,void 0,e),when.reject(e)})}function buildImageResource(e,t,i,r,n,a){n=GoogleEarthEnterpriseMetadata.tileXYToQuadKey(i,r,n),t=defined(t=t.imageryVersion)&&0<t?t:1;return e._metadata.resource.getDerivedResource({url:"flatfile?f1-0"+n+"-i."+t.toString(),request:a})}function getImageType(e){var t="JFIF";if(e[6]===t.charCodeAt(0)&&e[7]===t.charCodeAt(1)&&e[8]===t.charCodeAt(2)&&e[9]===t.charCodeAt(3))return"image/jpeg";return e[1]==="PNG".charCodeAt(0)&&e[2]==="PNG".charCodeAt(1)&&e[3]==="PNG".charCodeAt(2)?"image/png":void 0}function decodeEarthImageryPacket(e){for(var t=protobuf.Reader.create(e),i=t.len,r={};t.pos<i;){var n=t.uint32();switch(n>>>3){case 1:r.imageType=t.uint32();break;case 2:r.imageData=t.bytes();break;case 3:r.alphaType=t.uint32();break;case 4:r.imageAlpha=t.bytes();break;case 5:var a=r.copyrightIds;if(defined(a)||(a=r.copyrightIds=[]),2==(7&n))for(var o=t.uint32()+t.pos;t.pos<o;)a.push(t.uint32());else a.push(t.uint32());break;default:t.skipType(7&n)}}e=r.imageType;if(defined(e))switch(e){case 0:r.imageType="image/jpeg";break;case 4:r.imageType="image/png";break;default:throw new RuntimeError("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}e=r.alphaType;return defined(e)&&0!==e&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete r.alphaType,delete r.imageAlpha),r}GlobeTranslucencyState.prototype.executeGlobeCommands=function(e,t,i,r,n){var a=r.context,o=e.commands[Pass$1.GLOBE],e=e.indices[Pass$1.GLOBE];0!==e&&((this._globeTranslucencyFramebuffer=i).clearClassification(a,n),executeCommandsMatchingType(o,e,t,r,a,n,opaqueTypes))},GlobeTranslucencyState.prototype.executeGlobeClassificationCommands=function(e,t,i,r,n){var a,o=r.context,s=e.commands[Pass$1.GLOBE],l=e.indices[Pass$1.GLOBE],c=e.commands[Pass$1.TERRAIN_CLASSIFICATION],u=e.indices[Pass$1.TERRAIN_CLASSIFICATION];0!==l&&0!==u&&(a=this._frontFaceTranslucent,e=this._backFaceTranslucent,a&&e||executeCommands$1(c,u,t,r,o,n),(a||e)&&(this._globeTranslucencyFramebuffer=i,a=o.uniformState.globeDepthTexture,e=n.framebuffer,n.framebuffer=i.classificationFramebuffer,executeCommandsMatchingType(s,l,t,r,o,n,depthOnlyTypes),o.depthTexture&&(i=i.packDepth(o,n),o.uniformState.globeDepthTexture=i),executeCommands$1(c,u,t,r,o,n),o.uniformState.globeDepthTexture=a,n.framebuffer=e))},GoogleEarthEnterpriseDiscardPolicy.prototype.isReady=function(){return!0},GoogleEarthEnterpriseDiscardPolicy.prototype.shouldDiscardImage=function(e){return e===this._image},Object.defineProperties(GoogleEarthEnterpriseImageryProvider.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}}),GoogleEarthEnterpriseImageryProvider.prototype.getTileCredits=function(e,t,i){var r=this._metadata,i=r.getTileInformation(e,t,i);if(defined(i)){i=r.providers[i.imageryProvider];if(defined(i))return[i]}},GoogleEarthEnterpriseImageryProvider.prototype.requestImage=function(e,t,i,r){var n=this._tileDiscardPolicy._image,a=this._metadata,o=GoogleEarthEnterpriseMetadata.tileXYToQuadKey(e,t,i),s=a.getTileInformation(e,t,i);if(!defined(s)){if(a.isValid(o)){o=new Request({throttle:r.throttle,throttleByServer:r.throttleByServer,type:r.type,priorityFunction:r.priorityFunction});return void a.populateSubtree(e,t,i,o)}return n}if(!s.hasImagery())return n;r=buildImageResource(this,s,e,t,i,r).fetchArrayBuffer();return defined(r)?r.then(function(e){decodeGoogleEarthEnterpriseData(a.key,e);var t,i=new Uint8Array(e),e=a.protoImagery;return defined(e)&&e||(t=getImageType(i)),defined(t)||defined(e)&&!e||(t=(e=decodeEarthImageryPacket(i)).imageType,i=e.imageData),defined(t)&&defined(i)?loadImageFromTypedArray({uint8Array:i,format:t,flipY:!0}):n}):void 0},GoogleEarthEnterpriseImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){};var defaultColor=new Color(1,1,1,.4),defaultGlowColor=new Color(0,1,0,.05),defaultBackgroundColor=new Color(0,.5,0,.2);function GridImageryProvider(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this._tilingScheme=defined(e.tilingScheme)?e.tilingScheme:new GeographicTilingScheme({ellipsoid:e.ellipsoid}),this._cells=defaultValue(e.cells,8),this._color=defaultValue(e.color,defaultColor),this._glowColor=defaultValue(e.glowColor,defaultGlowColor),this._glowWidth=defaultValue(e.glowWidth,6),this._backgroundColor=defaultValue(e.backgroundColor,defaultBackgroundColor),this._errorEvent=new Event,this._tileWidth=defaultValue(e.tileWidth,256),this._tileHeight=defaultValue(e.tileHeight,256),this._canvasSize=defaultValue(e.canvasSize,256),this._canvas=this._createGridCanvas(),this._readyPromise=when.resolve(!0)}function InvertClassification(){this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._texture=void 0,this._classifiedTexture=void 0,this._depthStencilTexture=void 0,this._fbo=void 0,this._fboClassified=void 0,this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new ClearCommand({color:new Color(0,0,0,0),owner:this}),this._clearCommand=new ClearCommand({color:new Color(0,0,0,0),depth:1,stencil:0});var e=this;this._uniformMap={colorTexture:function(){return e._texture},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._classifiedTexture}}}Object.defineProperties(GridImageryProvider.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return!0}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}}),GridImageryProvider.prototype._drawGrid=function(e){for(var t=this._canvasSize,i=0;i<=this._cells;++i){var r=1+i/this._cells*(t-1);e.moveTo(r,0),e.lineTo(r,t),e.moveTo(0,r),e.lineTo(t,r)}e.stroke()},GridImageryProvider.prototype._createGridCanvas=function(){var e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;var t=this._canvasSize,i=e.getContext("2d"),r=this._backgroundColor.toCssColorString();i.fillStyle=r,i.fillRect(0,0,t,t);r=this._glowColor.toCssColorString();i.strokeStyle=r,i.lineWidth=this._glowWidth,i.strokeRect(0,0,t,t),this._drawGrid(i),i.lineWidth=.5*this._glowWidth,i.strokeRect(0,0,t,t),this._drawGrid(i);r=this._color.toCssColorString();return i.strokeStyle=r,i.lineWidth=2,i.strokeRect(0,0,t,t),i.lineWidth=1,this._drawGrid(i),e},GridImageryProvider.prototype.getTileCredits=function(e,t,i){},GridImageryProvider.prototype.requestImage=function(e,t,i,r){return this._canvas},GridImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){},Object.defineProperties(InvertClassification.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}}),InvertClassification.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var rsUnclassified={depthMask:!1,stencilTest:{enabled:!0,frontFunction:StencilFunction$1.EQUAL,frontOperation:{fail:StencilOperation$1.KEEP,zFail:StencilOperation$1.KEEP,zPass:StencilOperation$1.KEEP},backFunction:StencilFunction$1.NEVER,reference:0,mask:StencilConstants$1.CLASSIFICATION_MASK},blending:BlendingState$1.ALPHA_BLEND},rsClassified={depthMask:!1,stencilTest:{enabled:!0,frontFunction:StencilFunction$1.NOT_EQUAL,frontOperation:{fail:StencilOperation$1.KEEP,zFail:StencilOperation$1.KEEP,zPass:StencilOperation$1.KEEP},backFunction:StencilFunction$1.NEVER,reference:0,mask:StencilConstants$1.CLASSIFICATION_MASK},blending:BlendingState$1.ALPHA_BLEND},rsDefault={depthMask:!0,depthTest:{enabled:!0},stencilTest:StencilConstants$1.setCesium3DTileBit(),stencilMask:StencilConstants$1.CESIUM_3D_TILE_MASK,blending:BlendingState$1.ALPHA_BLEND},translucentFS="#extension GL_EXT_frag_depth : enable\nuniform sampler2D colorTexture;\nuniform sampler2D depthTexture;\nuniform sampler2D classifiedTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n if (color.a == 0.0)\n {\n discard;\n }\n bool isClassified = all(equal(texture2D(classifiedTexture, v_textureCoordinates), vec4(0.0)));\n#ifdef UNCLASSIFIED\n vec4 highlightColor = czm_invertClassificationColor;\n if (isClassified)\n {\n discard;\n }\n#else\n vec4 highlightColor = vec4(1.0);\n if (!isClassified)\n {\n discard;\n }\n#endif\n gl_FragColor = color * highlightColor;\n gl_FragDepthEXT = texture2D(depthTexture, v_textureCoordinates).r;\n}\n",opaqueFS="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n if (color.a == 0.0)\n {\n discard;\n }\n#ifdef UNCLASSIFIED\n gl_FragColor = color * czm_invertClassificationColor;\n#else\n gl_FragColor = color;\n#endif\n}\n";function JobTypeBudget(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}function JobScheduler(e){var t=new Array(JobType$1.NUMBER_OF_JOB_TYPES);t[JobType$1.TEXTURE]=new JobTypeBudget(defined(e)?e[JobType$1.TEXTURE]:10),t[JobType$1.PROGRAM]=new JobTypeBudget(defined(e)?e[JobType$1.PROGRAM]:10),t[JobType$1.BUFFER]=new JobTypeBudget(defined(e)?e[JobType$1.BUFFER]:30);for(var i=t.length,r=0,n=0;n<i;++n)r+=t[n].total;var a=new Array(i);for(n=0;n<i;++n)a[n]=!1;this._totalBudget=r,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=a}function Light(){}InvertClassification.prototype.update=function(e){var t=this._texture,i=!defined(t)||this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;var r,n,a=e.drawingBufferWidth,o=e.drawingBufferHeight,t=!defined(t)||t.width!==a||t.height!==o;(t||i)&&(this._texture=this._texture&&this._texture.destroy(),this._classifiedTexture=this._classifiedTexture&&this._classifiedTexture.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._texture=new Texture({context:e,width:a,height:o,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:TextureMinificationFilter$1.LINEAR,magnificationFilter:TextureMagnificationFilter$1.LINEAR})}),defined(this._previousFramebuffer)||(this._classifiedTexture=new Texture({context:e,width:a,height:o,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:TextureMinificationFilter$1.LINEAR,magnificationFilter:TextureMagnificationFilter$1.LINEAR})}),this._depthStencilTexture=new Texture({context:e,width:a,height:o,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8}))),defined(this._fbo)&&!t&&!i||(this._fbo=this._fbo&&this._fbo.destroy(),this._fboClassified=this._fboClassified&&this._fboClassified.destroy(),defined(this._previousFramebuffer)?(n=this._previousFramebuffer.depthStencilTexture,r=this._previousFramebuffer.depthStencilRenderbuffer):n=this._depthStencilTexture,this._fbo=new Framebuffer({context:e,colorTextures:[this._texture],depthStencilTexture:n,depthStencilRenderbuffer:r,destroyAttachments:!1}),defined(this._previousFramebuffer)||(this._fboClassified=new Framebuffer({context:e,colorTextures:[this._classifiedTexture],depthStencilTexture:n,destroyAttachments:!1}))),defined(this._rsUnclassified)||(this._rsUnclassified=RenderState.fromCache(rsUnclassified),this._rsClassified=RenderState.fromCache(rsClassified),this._rsDefault=RenderState.fromCache(rsDefault)),defined(this._unclassifiedCommand)&&!i||(defined(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),i=new ShaderSource({defines:["UNCLASSIFIED"],sources:[n=defined(this._previousFramebuffer)?opaqueFS:translucentFS]}),n=new ShaderSource({sources:[n]}),this._unclassifiedCommand=e.createViewportQuadCommand(i,{renderState:defined(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(n,{renderState:defined(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),defined(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),defined(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(PassThrough,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this})))},InvertClassification.prototype.clear=function(e,t){var i=t.framebuffer;defined(this._previousFramebuffer)?(t.framebuffer=this._fbo,this._clearColorCommand.execute(e,t)):(t.framebuffer=this._fbo,this._clearCommand.execute(e,t),t.framebuffer=this._fboClassified,this._clearCommand.execute(e,t)),t.framebuffer=i},InvertClassification.prototype.executeClassified=function(e,t){var i;defined(this._previousFramebuffer)||(i=t.framebuffer,t.framebuffer=this._fboClassified,this._translucentCommand.execute(e,t),t.framebuffer=i),this._classifiedCommand.execute(e,t)},InvertClassification.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)},InvertClassification.prototype.isDestroyed=function(){return!1},InvertClassification.prototype.destroy=function(){return this._fbo=this._fbo&&this._fbo.destroy(),this._texture=this._texture&&this._texture.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),defined(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),destroyObject(this)},Object.defineProperties(JobTypeBudget.prototype,{total:{get:function(){return this._total}}}),JobScheduler.getTimestamp=getTimestamp$1,Object.defineProperties(JobScheduler.prototype,{totalBudget:{get:function(){return this._totalBudget}}}),JobScheduler.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget},JobScheduler.prototype.resetBudgets=function(){for(var e=this._budgets,t=e.length,i=0;i<t;++i){var r=e[i];r.starvedLastFrame=r.starvedThisFrame,r.starvedThisFrame=!1,r.usedThisFrame=0,r.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0},JobScheduler.prototype.execute=function(e,t){var i,r=this._budgets,n=r[t],a=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&a)return!(n.starvedThisFrame=!0);if(n.usedThisFrame+n.stolenFromMeThisFrame>=n.total){for(var o=r.length,s=0;s<o&&(!((i=r[s]).usedThisFrame+i.stolenFromMeThisFrame<i.total)||i.starvedLastFrame);++s);if(s===o&&a)return!1;a&&(n.starvedThisFrame=!0)}a=JobScheduler.getTimestamp();e.execute();a=JobScheduler.getTimestamp()-a;return this._totalUsedThisFrame+=a,i?i.stolenFromMeThisFrame+=a:n.usedThisFrame+=a,this._executedThisFrame[t]=!0},Object.defineProperties(Light.prototype,{color:{get:DeveloperError.throwInstantiationError},intensity:{get:DeveloperError.throwInstantiationError}});var trailingSlashRegex=/\/$/,defaultCredit$1=new Credit('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function MapboxStyleImageryProvider(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).styleId,i=e.accessToken;this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var r=Resource.createIfNeeded(defaultValue(e.url,"https://api.mapbox.com/styles/v1/"));this._styleId=t,this._accessToken=i;var n=defaultValue(e.tilesize,512);this._tilesize=n;var a=defaultValue(e.username,"mapbox");this._username=a;var o,n=defined(e.scaleFactor)?"@2x":"",a=r.getUrlComponent();trailingSlashRegex.test(a)||(a+="/"),a+=this._username+"/"+t+"/tiles/"+this._tilesize+"/{z}/{x}/{y}"+n,r.url=a,r.setQueryParameters({access_token:i}),defined(e.credit)?"string"==typeof(o=e.credit)&&(o=new Credit(o)):o=defaultCredit$1,this._resource=r,this._imageryProvider=new UrlTemplateImageryProvider({url:r,credit:o,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}function Moon(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).textureUrl;defined(t)||(t=buildModuleUrl("Assets/Textures/moonSmall.jpg")),this.show=defaultValue(e.show,!0),this.textureUrl=t,this._ellipsoid=defaultValue(e.ellipsoid,Ellipsoid.MOON),this.onlySunLighting=defaultValue(e.onlySunLighting,!0),this._ellipsoidPrimitive=new EllipsoidPrimitive({radii:this.ellipsoid.radii,material:Material.fromType(Material.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new IauOrientationAxes}Object.defineProperties(MapboxStyleImageryProvider.prototype,{url:{get:function(){return this._imageryProvider.url}},ready:{get:function(){return this._imageryProvider.ready}},readyPromise:{get:function(){return this._imageryProvider.readyPromise}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}}),MapboxStyleImageryProvider.prototype.getTileCredits=function(e,t,i){},MapboxStyleImageryProvider.prototype.requestImage=function(e,t,i,r){return this._imageryProvider.requestImage(e,t,i,r)},MapboxStyleImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){return this._imageryProvider.pickFeatures(e,t,i,r,n)},MapboxStyleImageryProvider._defaultCredit=defaultCredit$1,Object.defineProperties(Moon.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var icrfToFixed=new Matrix3,rotationScratch=new Matrix3,translationScratch=new Cartesian3,scratchCommandList=[];function NeverTileDiscardPolicy(e){}Moon.prototype.update=function(e){if(this.show){var t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;var i=e.time;defined(Transforms.computeIcrfToFixedMatrix(i,icrfToFixed))||Transforms.computeTemeToPseudoFixedMatrix(i,icrfToFixed);var r=this._axes.evaluate(i,rotationScratch);Matrix3.transpose(r,r),Matrix3.multiply(icrfToFixed,r,r);i=Simon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame(i,translationScratch);Matrix3.multiplyByVector(icrfToFixed,i,i),Matrix4.fromRotationTranslation(r,i,t.modelMatrix);i=e.commandList;return(e.commandList=scratchCommandList).length=0,t.update(e),e.commandList=i,1===scratchCommandList.length?scratchCommandList[0]:void 0}},Moon.prototype.isDestroyed=function(){return!1},Moon.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),destroyObject(this)},NeverTileDiscardPolicy.prototype.isReady=function(){return!0},NeverTileDiscardPolicy.prototype.shouldDiscardImage=function(e){return!1};var AdjustTranslucentFS="#ifdef MRT\n#extension GL_EXT_draw_buffers : enable\n#endif\nuniform vec4 u_bgColor;\nuniform sampler2D u_depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nif (texture2D(u_depthTexture, v_textureCoordinates).r < 1.0)\n{\n#ifdef MRT\ngl_FragData[0] = u_bgColor;\ngl_FragData[1] = vec4(u_bgColor.a);\n#else\ngl_FragColor = u_bgColor;\n#endif\nreturn;\n}\ndiscard;\n}\n",CompositeOITFS="uniform sampler2D u_opaque;\nuniform sampler2D u_accumulation;\nuniform sampler2D u_revealage;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nvec4 opaque = texture2D(u_opaque, v_textureCoordinates);\nvec4 accum = texture2D(u_accumulation, v_textureCoordinates);\nfloat r = texture2D(u_revealage, v_textureCoordinates).r;\n#ifdef MRT\nvec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\n#else\nvec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);\n#endif\ngl_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;\nif (opaque != czm_backgroundColor)\n{\ngl_FragColor.a = 1.0;\n}\n}\n";function OIT(e){this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;var t=e.colorBufferFloat&&e.depthTexture;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=void 0,this._alphaFBO=void 0,this._adjustTranslucentFBO=void 0,this._adjustAlphaFBO=void 0,this._opaqueClearCommand=new ClearCommand({color:new Color(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new ClearCommand({color:new Color(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new ClearCommand({color:new Color(0,0,0,0),owner:this}),this._alphaClearCommand=new ClearCommand({color:new Color(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new BoundingRectangle,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function destroyTextures$1(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function destroyFramebuffers$1(e){e._translucentFBO=e._translucentFBO&&!e._translucentFBO.isDestroyed()&&e._translucentFBO.destroy(),e._alphaFBO=e._alphaFBO&&!e._alphaFBO.isDestroyed()&&e._alphaFBO.destroy(),e._adjustTranslucentFBO=e._adjustTranslucentFBO&&!e._adjustTranslucentFBO.isDestroyed()&&e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO=e._adjustAlphaFBO&&!e._adjustAlphaFBO.isDestroyed()&&e._adjustAlphaFBO.destroy()}function destroyResources$2(e){destroyTextures$1(e),destroyFramebuffers$1(e)}function updateTextures(e,t,i,r){destroyTextures$1(e),e._accumulationTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.FLOAT});var n=new Float32Array(i*r*4);e._revealageTexture=new Texture({context:t,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.FLOAT,source:{arrayBufferView:n,width:i,height:r},flipY:!1})}function updateFramebuffers$2(e,t){destroyFramebuffers$1(e);var i,r,n=WebGLConstants$1.FRAMEBUFFER_COMPLETE,a=!0;return e._translucentMRTSupport&&(e._translucentFBO=new Framebuffer({context:t,colorTextures:[e._accumulationTexture,e._revealageTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._adjustTranslucentFBO=new Framebuffer({context:t,colorTextures:[e._accumulationTexture,e._revealageTexture],destroyAttachments:!1}),e._translucentFBO.status===n&&e._adjustTranslucentFBO.status===n||(destroyFramebuffers$1(e),e._translucentMRTSupport=!1)),e._translucentMRTSupport||(e._translucentFBO=new Framebuffer({context:t,colorTextures:[e._accumulationTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._alphaFBO=new Framebuffer({context:t,colorTextures:[e._revealageTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._adjustTranslucentFBO=new Framebuffer({context:t,colorTextures:[e._accumulationTexture],destroyAttachments:!1}),e._adjustAlphaFBO=new Framebuffer({context:t,colorTextures:[e._revealageTexture],destroyAttachments:!1}),i=e._translucentFBO.status===n,r=e._alphaFBO.status===n,t=e._adjustTranslucentFBO.status===n,n=e._adjustAlphaFBO.status===n,i&&r&&t&&n||(destroyResources$2(e),a=e._translucentMultipassSupport=!1)),a}OIT.prototype.update=function(e,t,i,r){var n,a,o,s,l;this.isSupported()&&(this._opaqueFBO=i,this._opaqueTexture=i.getColorTexture(0),this._depthStencilTexture=i.depthStencilTexture,s=this._opaqueTexture.width,l=this._opaqueTexture.height,(i=!defined(i=this._accumulationTexture)||i.width!==s||i.height!==l||r!==this._useHDR)&&updateTextures(this,e,s,l),(defined(this._translucentFBO)&&!i||updateFramebuffers$2(this,e))&&(this._useHDR=r,defined((n=this)._compositeCommand)||(a=new ShaderSource({sources:[CompositeOITFS]}),this._translucentMRTSupport&&a.defines.push("MRT"),o={u_opaque:function(){return n._opaqueTexture},u_accumulation:function(){return n._accumulationTexture},u_revealage:function(){return n._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(a,{uniformMap:o,owner:this})),defined(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(a=new ShaderSource({defines:["MRT"],sources:[AdjustTranslucentFS]}),o={u_bgColor:function(){return n._translucentMRTClearCommand.color},u_depthTexture:function(){return n._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(a,{uniformMap:o,owner:this})):this._translucentMultipassSupport&&(a=new ShaderSource({sources:[AdjustTranslucentFS]}),o={u_bgColor:function(){return n._translucentMultipassClearCommand.color},u_depthTexture:function(){return n._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(a,{uniformMap:o,owner:this}),o={u_bgColor:function(){return n._alphaClearCommand.color},u_depthTexture:function(){return n._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(a,{uniformMap:o,owner:this}))),this._viewport.width=s,this._viewport.height=l,l=(s=!BoundingRectangle.equals(this._viewport,t.viewport))!==this._useScissorTest,this._useScissorTest=s,BoundingRectangle.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=BoundingRectangle.clone(t.viewport,this._scissorRectangle),l=!0),defined(this._rs)&&BoundingRectangle.equals(this._viewport,this._rs.viewport)&&!l||(this._rs=RenderState.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),defined(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),defined(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)))};var translucentMRTBlend={enabled:!0,color:new Color(0,0,0,0),equationRgb:BlendEquation$1.ADD,equationAlpha:BlendEquation$1.ADD,functionSourceRgb:BlendFunction$1.ONE,functionDestinationRgb:BlendFunction$1.ONE,functionSourceAlpha:BlendFunction$1.ZERO,functionDestinationAlpha:BlendFunction$1.ONE_MINUS_SOURCE_ALPHA},translucentColorBlend={enabled:!0,color:new Color(0,0,0,0),equationRgb:BlendEquation$1.ADD,equationAlpha:BlendEquation$1.ADD,functionSourceRgb:BlendFunction$1.ONE,functionDestinationRgb:BlendFunction$1.ONE,functionSourceAlpha:BlendFunction$1.ONE,functionDestinationAlpha:BlendFunction$1.ONE},translucentAlphaBlend={enabled:!0,color:new Color(0,0,0,0),equationRgb:BlendEquation$1.ADD,equationAlpha:BlendEquation$1.ADD,functionSourceRgb:BlendFunction$1.ZERO,functionDestinationRgb:BlendFunction$1.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:BlendFunction$1.ZERO,functionDestinationAlpha:BlendFunction$1.ONE_MINUS_SOURCE_ALPHA};function getTranslucentRenderState(e,t,i,r){var n,a=i[r.id];return defined(a)||((n=RenderState.getState(r)).depthMask=!1,n.blending=t,a=RenderState.fromCache(n),i[r.id]=a),a}function getTranslucentMRTRenderState(e,t,i){return getTranslucentRenderState(t,translucentMRTBlend,e._translucentRenderStateCache,i)}function getTranslucentColorRenderState(e,t,i){return getTranslucentRenderState(t,translucentColorBlend,e._translucentRenderStateCache,i)}function getTranslucentAlphaRenderState(e,t,i){return getTranslucentRenderState(t,translucentAlphaBlend,e._alphaRenderStateCache,i)}var mrtShaderSource=" vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\n float ai = czm_gl_FragColor.a;\n float wzi = czm_alphaWeight(ai);\n gl_FragData[0] = vec4(Ci * wzi, ai);\n gl_FragData[1] = vec4(ai * wzi);\n",colorShaderSource=" vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\n float ai = czm_gl_FragColor.a;\n float wzi = czm_alphaWeight(ai);\n gl_FragColor = vec4(Ci, ai) * wzi;\n",alphaShaderSource=" float ai = czm_gl_FragColor.a;\n gl_FragColor = vec4(ai);\n";function getTranslucentShaderProgram(e,t,i,r){var n,a,o=e.shaderCache.getDerivedShaderProgram(t,i);return defined(o)||(n=t._attributeLocations,(a=t.fragmentShaderSource.clone()).sources=a.sources.map(function(e){return e=(e=(e=(e=ShaderSource.replaceMain(e,"czm_translucent_main")).replace(/gl_FragColor/g,"czm_gl_FragColor")).replace(/\bdiscard\b/g,"czm_discard = true")).replace(/czm_phong/g,"czm_translucentPhong")}),a.sources.splice(0,0,(-1!==r.indexOf("gl_FragData")?"#extension GL_EXT_draw_buffers : enable \n":"")+"vec4 czm_gl_FragColor;\nbool czm_discard = false;\n"),a.sources.push("void main()\n{\n czm_translucent_main();\n if (czm_discard)\n {\n discard;\n }\n"+r+"}\n"),o=e.shaderCache.createDerivedShaderProgram(t,i,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:n})),o}function getTranslucentMRTShaderProgram(e,t){return getTranslucentShaderProgram(e,t,"translucentMRT",mrtShaderSource)}function getTranslucentColorShaderProgram(e,t){return getTranslucentShaderProgram(e,t,"translucentMultipass",colorShaderSource)}function getTranslucentAlphaShaderProgram(e,t){return getTranslucentShaderProgram(e,t,"alphaMultipass",alphaShaderSource)}function executeTranslucentCommandsSortedMultipass(e,t,i,r,n,a){var o,s,l=t.context,c=t.frameState.useLogDepth,u=t._hdr,d=r.framebuffer,h=n.length,p=t.frameState.shadowState.lightShadowsEnabled;r.framebuffer=e._adjustTranslucentFBO,e._adjustTranslucentCommand.execute(l,r),r.framebuffer=e._adjustAlphaFBO,e._adjustAlphaCommand.execute(l,r);var m=e._opaqueFBO;for(r.framebuffer=e._translucentFBO,s=0;s<h;++s)o=n[s],o=c?o.derivedCommands.logDepth.command:o,o=u?o.derivedCommands.hdr.command:o,i((p&&o.receiveShadows?o.derivedCommands.oit.shadows:o.derivedCommands.oit).translucentCommand,t,l,r,m);for(defined(a)&&(o=a.unclassifiedCommand,i((p&&o.receiveShadows?o.derivedCommands.oit.shadows:o.derivedCommands.oit).translucentCommand,t,l,r,m)),r.framebuffer=e._alphaFBO,s=0;s<h;++s)o=n[s],o=c?o.derivedCommands.logDepth.command:o,o=u?o.derivedCommands.hdr.command:o,i((p&&o.receiveShadows?o.derivedCommands.oit.shadows:o.derivedCommands.oit).alphaCommand,t,l,r,m);defined(a)&&(o=a.unclassifiedCommand,i((p&&o.receiveShadows?o.derivedCommands.oit.shadows:o.derivedCommands.oit).alphaCommand,t,l,r,m)),r.framebuffer=d}function executeTranslucentCommandsSortedMRT(e,t,i,r,n,a){var o=t.context,s=t.frameState.useLogDepth,l=t._hdr,c=r.framebuffer,u=n.length,d=t.frameState.shadowState.lightShadowsEnabled;r.framebuffer=e._adjustTranslucentFBO,e._adjustTranslucentCommand.execute(o,r);var h,p=e._opaqueFBO;r.framebuffer=e._translucentFBO;for(var m=0;m<u;++m)h=n[m],h=s?h.derivedCommands.logDepth.command:h,h=l?h.derivedCommands.hdr.command:h,i((d&&h.receiveShadows?h.derivedCommands.oit.shadows:h.derivedCommands.oit).translucentCommand,t,o,r,p);defined(a)&&(h=a.unclassifiedCommand,i((d&&h.receiveShadows?h.derivedCommands.oit.shadows:h.derivedCommands.oit).translucentCommand,t,o,r,p)),r.framebuffer=c}OIT.prototype.createDerivedCommands=function(e,t,i){var r,n,a,o,s,l;return defined(i)||(i={}),this._translucentMRTSupport?(defined(i.translucentCommand)&&(r=i.translucentCommand.shaderProgram,n=i.translucentCommand.renderState),i.translucentCommand=DrawCommand.shallowClone(e,i.translucentCommand),defined(r)&&i.shaderProgramId===e.shaderProgram.id?(i.translucentCommand.shaderProgram=r,i.translucentCommand.renderState=n):(i.translucentCommand.shaderProgram=getTranslucentMRTShaderProgram(t,e.shaderProgram),i.translucentCommand.renderState=getTranslucentMRTRenderState(this,t,e.renderState),i.shaderProgramId=e.shaderProgram.id)):(defined(i.translucentCommand)&&(a=i.translucentCommand.shaderProgram,o=i.translucentCommand.renderState,s=i.alphaCommand.shaderProgram,l=i.alphaCommand.renderState),i.translucentCommand=DrawCommand.shallowClone(e,i.translucentCommand),i.alphaCommand=DrawCommand.shallowClone(e,i.alphaCommand),defined(a)&&i.shaderProgramId===e.shaderProgram.id?(i.translucentCommand.shaderProgram=a,i.translucentCommand.renderState=o,i.alphaCommand.shaderProgram=s,i.alphaCommand.renderState=l):(i.translucentCommand.shaderProgram=getTranslucentColorShaderProgram(t,e.shaderProgram),i.translucentCommand.renderState=getTranslucentColorRenderState(this,t,e.renderState),i.alphaCommand.shaderProgram=getTranslucentAlphaShaderProgram(t,e.shaderProgram),i.alphaCommand.renderState=getTranslucentAlphaRenderState(this,t,e.renderState),i.shaderProgramId=e.shaderProgram.id)),i},OIT.prototype.executeCommands=function(e,t,i,r,n){(this._translucentMRTSupport?executeTranslucentCommandsSortedMRT:executeTranslucentCommandsSortedMultipass)(this,e,t,i,r,n)},OIT.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)},OIT.prototype.clear=function(e,t,i){var r=t.framebuffer;t.framebuffer=this._opaqueFBO,Color.clone(i,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO,this._alphaClearCommand.execute(e,t)),t.framebuffer=r},OIT.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport},OIT.prototype.isDestroyed=function(){return!1},OIT.prototype.destroy=function(){return destroyResources$2(this),defined(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),defined(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),defined(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),destroyObject(this)};var defaultCredit=new Credit("MapQuest, Open Street Map and contributors, CC-BY-SA");function OpenStreetMapImageryProvider(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT);var t=Resource.createIfNeeded(defaultValue(e.url,"https://a.tile.openstreetmap.org/"));t.appendForwardSlash(),t.url+="{z}/{x}/{y}."+defaultValue(e.fileExtension,"png");var i=new WebMercatorTilingScheme({ellipsoid:e.ellipsoid}),r=defaultValue(e.minimumLevel,0),n=e.maximumLevel,a=defaultValue(e.rectangle,i.rectangle),o=i.positionToTileXY(Rectangle.southwest(a),r),s=i.positionToTileXY(Rectangle.northeast(a),r);Math.abs(s.x-o.x),Math.abs(s.y-o.y);e=defaultValue(e.credit,defaultCredit);"string"==typeof e&&(e=new Credit(e)),UrlTemplateImageryProvider.call(this,{url:t,credit:e,tilingScheme:i,tileWidth:256,tileHeight:256,minimumLevel:r,maximumLevel:n,rectangle:a})}defined(Object.create)&&(OpenStreetMapImageryProvider.prototype=Object.create(UrlTemplateImageryProvider.prototype),OpenStreetMapImageryProvider.prototype.constructor=OpenStreetMapImageryProvider);var defaultSize=new Cartesian2(1,1);function Particle(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.mass=defaultValue(e.mass,1),this.position=Cartesian3.clone(defaultValue(e.position,Cartesian3.ZERO)),this.velocity=Cartesian3.clone(defaultValue(e.velocity,Cartesian3.ZERO)),this.life=defaultValue(e.life,Number.MAX_VALUE),this.image=e.image,this.startColor=Color.clone(defaultValue(e.startColor,Color.WHITE)),this.endColor=Color.clone(defaultValue(e.endColor,Color.WHITE)),this.startScale=defaultValue(e.startScale,1),this.endScale=defaultValue(e.endScale,1),this.imageSize=Cartesian2.clone(defaultValue(e.imageSize,defaultSize)),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(Particle.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var deltaScratch=new Cartesian3;function ParticleBurst(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.time=defaultValue(e.time,0),this.minimum=defaultValue(e.minimum,0),this.maximum=defaultValue(e.maximum,50),this._complete=!1}function ParticleEmitter(e){}Particle.prototype.update=function(e,t){return Cartesian3.multiplyByScalar(this.velocity,e,deltaScratch),Cartesian3.add(this.position,deltaScratch,this.position),defined(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life},Object.defineProperties(ParticleBurst.prototype,{complete:{get:function(){return this._complete}}}),ParticleEmitter.prototype.emit=function(e){DeveloperError.throwInstantiationError()};var defaultImageSize=new Cartesian2(1,1);function ParticleSystem(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.show=defaultValue(e.show,!0),this.updateCallback=e.updateCallback,this.loop=defaultValue(e.loop,!0),this.image=defaultValue(e.image,void 0);var t=e.emitter;defined(t)||(t=new CircleEmitter(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=Matrix4.clone(defaultValue(e.modelMatrix,Matrix4.IDENTITY)),this._emitterModelMatrix=Matrix4.clone(defaultValue(e.emitterModelMatrix,Matrix4.IDENTITY)),this._matrixDirty=!0,this._combinedMatrix=new Matrix4,this._startColor=Color.clone(defaultValue(e.color,defaultValue(e.startColor,Color.WHITE))),this._endColor=Color.clone(defaultValue(e.color,defaultValue(e.endColor,Color.WHITE))),this._startScale=defaultValue(e.scale,defaultValue(e.startScale,1)),this._endScale=defaultValue(e.scale,defaultValue(e.endScale,1)),this._emissionRate=defaultValue(e.emissionRate,5),this._minimumSpeed=defaultValue(e.speed,defaultValue(e.minimumSpeed,1)),this._maximumSpeed=defaultValue(e.speed,defaultValue(e.maximumSpeed,1)),this._minimumParticleLife=defaultValue(e.particleLife,defaultValue(e.minimumParticleLife,5)),this._maximumParticleLife=defaultValue(e.particleLife,defaultValue(e.maximumParticleLife,5)),this._minimumMass=defaultValue(e.mass,defaultValue(e.minimumMass,1)),this._maximumMass=defaultValue(e.mass,defaultValue(e.maximumMass,1)),this._minimumImageSize=Cartesian2.clone(defaultValue(e.imageSize,defaultValue(e.minimumImageSize,defaultImageSize))),this._maximumImageSize=Cartesian2.clone(defaultValue(e.imageSize,defaultValue(e.maximumImageSize,defaultImageSize))),this._sizeInMeters=defaultValue(e.sizeInMeters,!1),this._lifetime=defaultValue(e.lifetime,Number.MAX_VALUE),this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new Event,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}function updateParticlePool(e){var t=e._emissionRate,i=e._maximumParticleLife,r=0,n=e._bursts;if(defined(n))for(var a=n.length,o=0;o<a;++o)r+=n[o].maximum;for(var s=e._billboardCollection,l=e.image,t=Math.ceil(t*i+r),i=e._particles,c=e._particlePool,u=Math.max(t-i.length-c.length,0),d=0;d<u;++d){var h=new Particle;h._billboard=s.add({image:l}),c.push(h)}e._particleEstimate=t}function getOrCreateParticle(e){e=e._particlePool.pop();return e=!defined(e)?new Particle:e}function addParticleToPool(e,t){e._particlePool.push(t)}function freeParticlePool(e){for(var t=e._particles,i=e._particlePool,r=e._billboardCollection,t=t.length,n=i.length,e=e._particleEstimate,t=n-Math.max(e-t-n,0),a=t;a<n;++a){var o=i[a];r.remove(o._billboard)}i.length=t}function removeBillboard(e){defined(e._billboard)&&(e._billboard.show=!1)}function updateBillboard(e,t){var i=t._billboard;(i=!defined(i)?t._billboard=e._billboardCollection.add({image:t.image}):i).width=t.imageSize.x,i.height=t.imageSize.y,i.position=t.position,i.sizeInMeters=e.sizeInMeters,i.show=!0;var r=CesiumMath.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),n=CesiumMath.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),a=CesiumMath.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),e=CesiumMath.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);i.color=new Color(r,n,a,e),i.scale=CesiumMath.lerp(t.startScale,t.endScale,t.normalizedAge)}function addParticle(e,t){t.startColor=Color.clone(e._startColor,t.startColor),t.endColor=Color.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=CesiumMath.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=CesiumMath.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=CesiumMath.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=CesiumMath.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;var i=CesiumMath.randomBetween(e._minimumSpeed,e._maximumSpeed);Cartesian3.multiplyByScalar(t.velocity,i,t.velocity),e._particles.push(t)}function calculateNumberToEmit(e,t){if(e._isComplete)return 0;var t=(t=CesiumMath.mod(t,e._lifetime))*e._emissionRate,i=Math.floor(t);if(e._carryOver+=t-i,1<e._carryOver&&(i++,--e._carryOver),defined(e.bursts))for(var r=e.bursts.length,n=0;n<r;n++){var a=e.bursts[n],o=e._currentTime;defined(a)&&!a._complete&&o>a.time&&(i+=CesiumMath.randomBetween(a.minimum,a.maximum),a._complete=!0)}return i}Object.defineProperties(ParticleSystem.prototype,{emitter:{get:function(){return this._emitter},set:function(e){this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!Matrix4.equals(this._modelMatrix,e),Matrix4.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!Matrix4.equals(this._emitterModelMatrix,e),Matrix4.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){Color.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){Color.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});var rotatedVelocityScratch=new Cartesian3;function getElement(e){return e="string"==typeof e?document.getElementById(e):e}function PerformanceDisplay(e){var t=getElement((e=defaultValue(e,defaultValue.EMPTY_OBJECT)).container);this._container=t;var i=document.createElement("div");i.className="cesium-performanceDisplay";e=document.createElement("div");e.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),e.appendChild(this._fpsText);t=document.createElement("div");t.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),t.appendChild(this._msText),i.appendChild(t),i.appendChild(e),this._container.appendChild(i),this._lastFpsSampleTime=getTimestamp$1(),this._lastMsSampleTime=getTimestamp$1(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;e=document.createElement("div");e.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),e.appendChild(this._throttledText),i.appendChild(e)}function PickDepth(){this._framebuffer=void 0,this._depthTexture=void 0,this._textureToCopy=void 0,this._copyDepthCommand=void 0,this._useLogDepth=void 0,this._debugPickDepthViewportCommand=void 0}function executeDebugPickDepth(e,t,i,r){var n;defined(e._debugPickDepthViewportCommand)&&r===e._useLogDepth||(n=new ShaderSource({defines:[r?"LOG_DEPTH":""],sources:["uniform highp sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n float z_window = czm_unpackDepth(texture2D(u_texture, v_textureCoordinates));\n z_window = czm_reverseLogDepth(z_window); \n float n_range = czm_depthRange.near;\n float f_range = czm_depthRange.far;\n float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\n float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\n gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\n}\n"]}),e._debugPickDepthViewportCommand=t.createViewportQuadCommand(n,{uniformMap:{u_texture:function(){return e._depthTexture}},owner:e}),e._useLogDepth=r),e._debugPickDepthViewportCommand.execute(t,i)}function destroyTextures(e){e._depthTexture=e._depthTexture&&!e._depthTexture.isDestroyed()&&e._depthTexture.destroy()}function destroyFramebuffers(e){e._framebuffer=e._framebuffer&&!e._framebuffer.isDestroyed()&&e._framebuffer.destroy()}function createTextures(e,t,i,r){e._depthTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE})}function createFramebuffers$1(e,t,i,r){destroyTextures(e),destroyFramebuffers(e),createTextures(e,t,i,r),e._framebuffer=new Framebuffer({context:t,colorTextures:[e._depthTexture],destroyAttachments:!1})}function updateFramebuffers$1(e,t,i){var r=i.width,n=i.height,i=e._depthTexture,i=!defined(i)||i.width!==r||i.height!==n;defined(e._framebuffer)&&!i||createFramebuffers$1(e,t,r,n)}function updateCopyCommands(e,t,i){defined(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand("uniform highp sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n gl_FragColor = czm_packDepth(texture2D(u_texture, v_textureCoordinates).r);\n}\n",{renderState:RenderState.fromCache(),uniformMap:{u_texture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=i,e._copyDepthCommand.framebuffer=e._framebuffer}ParticleSystem.prototype.update=function(e){if(this.show){defined(this._billboardCollection)||(this._billboardCollection=new BillboardCollection),this._updateParticlePool&&(updateParticlePool(this),this._updateParticlePool=!1);var t=0;(t=this._previousTime?JulianDate.secondsDifference(e.time,this._previousTime):t)<0&&(t=0);var i,r=this._particles,n=this._emitter,a=this.updateCallback,o=r.length;for(c=0;c<o;++c)(i=r[c]).update(t,a)?updateBillboard(this,i):(removeBillboard(i),addParticleToPool(this,i),r[c]=r[o-1],--c,--o);r.length=o;var s=calculateNumberToEmit(this,t);if(0<s&&defined(n)){this._matrixDirty&&(this._combinedMatrix=Matrix4.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);for(var l=this._combinedMatrix,c=0;c<s;c++)i=getOrCreateParticle(this),this._emitter.emit(i),Cartesian3.add(i.position,i.velocity,rotatedVelocityScratch),Matrix4.multiplyByPoint(l,rotatedVelocityScratch,rotatedVelocityScratch),i.position=Matrix4.multiplyByPoint(l,i.position,i.position),Cartesian3.subtract(rotatedVelocityScratch,i.position,i.velocity),Cartesian3.normalize(i.velocity,i.velocity),addParticle(this,i),updateBillboard(this,i)}if(this._billboardCollection.update(e),this._previousTime=JulianDate.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=CesiumMath.mod(this._currentTime,this._lifetime),this.bursts){var u=this.bursts.length;for(c=0;c<u;c++)this.bursts[c]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120==0&&freeParticlePool(this)}},ParticleSystem.prototype.isDestroyed=function(){return!1},ParticleSystem.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),destroyObject(this)},Object.defineProperties(PerformanceDisplay.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(this._throttledText.nodeValue=e?"(throttled)":"",this._throttled=e)}}}),PerformanceDisplay.prototype.update=function(e){var t=getTimestamp$1(),i=defaultValue(e,!0);this._fpsFrameCount++;e=t-this._lastFpsSampleTime;1e3<e&&(r="N/A",i&&(r=1e3*this._fpsFrameCount/e|0),this._fpsText.nodeValue=r+" FPS",this._lastFpsSampleTime=t,this._fpsFrameCount=0),this._msFrameCount++;var r,e=t-this._lastMsSampleTime;200<e&&(r="N/A",i&&(r=(e/this._msFrameCount).toFixed(2)),this._msText.nodeValue=r+" MS",this._lastMsSampleTime=t,this._msFrameCount=0)},PerformanceDisplay.prototype.destroy=function(){return destroyObject(this)},PickDepth.prototype.executeDebugPickDepth=function(e,t,i){executeDebugPickDepth(this,e,t,i)},PickDepth.prototype.update=function(e,t){updateFramebuffers$1(this,e,t),updateCopyCommands(this,e,t)};var scratchPackedDepth=new Cartesian4,packedDepthScale=new Cartesian4(1,1/255,1/65025,1/16581375);function PickDepthFramebuffer(){this._depthStencilTexture=void 0,this._framebuffer=void 0,this._passState=void 0}function destroyResources$1(e){e._framebuffer=e._framebuffer&&e._framebuffer.destroy(),e._depthStencilTexture=e._depthStencilTexture&&e._depthStencilTexture.destroy()}function createResources(e,t){var i=t.drawingBufferWidth,r=t.drawingBufferHeight;e._depthStencilTexture=new Texture({context:t,width:i,height:r,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8}),e._framebuffer=new Framebuffer({context:t,depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1});t=new PassState(t);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new BoundingRectangle},t.viewport=new BoundingRectangle,e._passState=t}function PickFramebuffer(e){var t=new PassState(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new BoundingRectangle},t.viewport=new BoundingRectangle,this._context=e,this._fb=void 0,this._passState=t,this._width=0,this._height=0}PickDepth.prototype.getDepth=function(e,t,i){if(defined(this._framebuffer)){i=e.readPixels({x:t,y:i,width:1,height:1,framebuffer:this._framebuffer}),i=Cartesian4.unpack(i,0,scratchPackedDepth);return Cartesian4.divideByScalar(i,255,i),Cartesian4.dot(i,packedDepthScale)}},PickDepth.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)},PickDepth.prototype.isDestroyed=function(){return!1},PickDepth.prototype.destroy=function(){return destroyTextures(this),destroyFramebuffers(this),defined(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=defined(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),destroyObject(this)},PickDepthFramebuffer.prototype.update=function(e,t,i){var r=i.width,n=i.height;defined(this._framebuffer)&&r===this._depthStencilTexture.width&&n===this._depthStencilTexture.height||(destroyResources$1(this),createResources(this,e));i=this._framebuffer,e=this._passState;return e.framebuffer=i,e.viewport.width=r,e.viewport.height=n,e.scissorTest.rectangle.x=t.x,e.scissorTest.rectangle.y=n-t.y,e.scissorTest.rectangle.width=1,e.scissorTest.rectangle.height=1,e},PickDepthFramebuffer.prototype.isDestroyed=function(){return!1},PickDepthFramebuffer.prototype.destroy=function(){return destroyResources$1(this),destroyObject(this)},PickFramebuffer.prototype.begin=function(e,t){var i=this._context,r=t.width,t=t.height;return BoundingRectangle.clone(e,this._passState.scissorTest.rectangle),defined(this._fb)&&this._width===r&&this._height===t||(this._width=r,this._height=t,this._fb=this._fb&&this._fb.destroy(),this._fb=new Framebuffer({context:i,colorTextures:[new Texture({context:i,width:r,height:t})],depthStencilRenderbuffer:new Renderbuffer({context:i,width:r,height:t,format:RenderbufferFormat$1.DEPTH_STENCIL})}),this._passState.framebuffer=this._fb),this._passState.viewport.width=r,this._passState.viewport.height=t,this._passState};var colorScratch=new Color;function SceneFramebuffer(){this._colorTexture=void 0,this._idTexture=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._framebuffer=void 0,this._idFramebuffer=void 0,this._idClearColor=new Color(0,0,0,0),this._useHdr=void 0,this._clearCommand=new ClearCommand({color:new Color(0,0,0,0),depth:1,owner:this})}function destroyResources(e){e._framebuffer=e._framebuffer&&e._framebuffer.destroy(),e._idFramebuffer=e._idFramebuffer&&e._idFramebuffer.destroy(),e._colorTexture=e._colorTexture&&e._colorTexture.destroy(),e._idTexture=e._idTexture&&e._idTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&e._depthStencilTexture.destroy(),e._depthStencilRenderbuffer=e._depthStencilRenderbuffer&&e._depthStencilRenderbuffer.destroy(),e._depthStencilIdTexture=e._depthStencilIdTexture&&e._depthStencilIdTexture.destroy(),e._depthStencilIdRenderbuffer=e._depthStencilIdRenderbuffer&&e._depthStencilIdRenderbuffer.destroy(),e._framebuffer=void 0,e._idFramebuffer=void 0,e._colorTexture=void 0,e._idTexture=void 0,e._depthStencilTexture=void 0,e._depthStencilRenderbuffer=void 0,e._depthStencilIdTexture=void 0,e._depthStencilIdRenderbuffer=void 0}function ShadowMapShader(){}function isSun(e){return 7471e3<Math.abs(e.x)||(7471e3<Math.abs(e.y)||7471e3<Math.abs(e.z))}function ShadowMap(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).context;this._enabled=defaultValue(e.enabled,!0),this._softShadows=defaultValue(e.softShadows,!1),this._normalOffset=defaultValue(e.normalOffset,!0),this.dirty=!0,this.fromLightSource=defaultValue(e.fromLightSource,!0),this.darkness=defaultValue(e.darkness,.3),this._darkness=this.darkness,this.maximumDistance=defaultValue(e.maximumDistance,5e3),this._outOfView=!1,this._outOfViewPrevious=!1;var i,r=this._needsUpdate=!0;(FeatureDetection.isInternetExplorer()||FeatureDetection.isEdge()||(FeatureDetection.isChrome()||FeatureDetection.isFirefox())&&FeatureDetection.isWindows()&&!t.depthTexture)&&(r=!1),this._polygonOffsetSupported=r,this._terrainBias={polygonOffset:r,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:r,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new Matrix4,this._shadowMapTexture=void 0,this._lightDirectionEC=new Cartesian3,this._lightPositionEC=new Cartesian4,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new ShadowMapCamera,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new BoundingSphere,this._isPointLight=defaultValue(e.isPointLight,!1),this._pointLightRadius=defaultValue(e.pointLightRadius,100),this._cascadesEnabled=!this._isPointLight&&defaultValue(e.cascadesEnabled,!0),this._numberOfCascades=this._cascadesEnabled?defaultValue(e.numberOfCascades,4):0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new Cartesian2,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new OrthographicOffCenterFrustum:defined(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new Cartesian4,new Cartesian4],this._cascadeMatrices=[new Matrix4,new Matrix4,new Matrix4,new Matrix4],this._cascadeDistances=new Cartesian4,i=this._isPointLight?6:this._cascadesEnabled?this._numberOfCascades:1,this._passes=new Array(i);for(var n=0;n<i;++n)this._passes[n]=new ShadowPass(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,createRenderStates(this),this._clearCommand=new ClearCommand({depth:1,color:new Color}),this._clearPassState=new PassState(t),this._size=defaultValue(e.size,2048),this.size=this._size}function ShadowPass(e){this.camera=new ShadowMapCamera,this.passState=new PassState(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function createRenderState(e,t){return RenderState.fromCache({cull:{enabled:!0,face:CullFace$1.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function createRenderStates(e){var t=!e._usesDepthTexture;e._primitiveRenderState=createRenderState(t,e._primitiveBias),e._terrainRenderState=createRenderState(t,e._terrainBias),e._pointRenderState=createRenderState(t,e._pointBias)}function destroyFramebuffer(e){for(var t=e._passes.length,i=0;i<t;++i){var r=e._passes[i],n=r.framebuffer;defined(n)&&!n.isDestroyed()&&n.destroy(),r.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function createFramebufferColor(e,t){for(var i=new Renderbuffer({context:t,width:e._textureSize.x,height:e._textureSize.y,format:RenderbufferFormat$1.DEPTH_COMPONENT16}),r=new Texture({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),n=new Framebuffer({context:t,depthRenderbuffer:i,colorTextures:[r],destroyAttachments:!1}),a=e._passes.length,o=0;o<a;++o){var s=e._passes[o];s.framebuffer=n,s.passState.framebuffer=n}e._shadowMapTexture=r,e._depthAttachment=i,e._colorAttachment=r}function createFramebufferDepth(e,t){for(var i=new Texture({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8,sampler:Sampler.NEAREST}),r=new Framebuffer({context:t,depthStencilTexture:i,destroyAttachments:!1}),n=e._passes.length,a=0;a<n;++a){var o=e._passes[a];o.framebuffer=r,o.passState.framebuffer=r}e._shadowMapTexture=i,e._depthAttachment=i}function createFramebufferCube(e,t){for(var i=new Renderbuffer({context:t,width:e._textureSize.x,height:e._textureSize.y,format:RenderbufferFormat$1.DEPTH_COMPONENT16}),r=new CubeMap({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),n=[r.negativeX,r.negativeY,r.negativeZ,r.positiveX,r.positiveY,r.positiveZ],a=0;a<6;++a){var o=new Framebuffer({context:t,depthRenderbuffer:i,colorTextures:[n[a]],destroyAttachments:!1}),s=e._passes[a];s.framebuffer=o,s.passState.framebuffer=o}e._shadowMapTexture=r,e._depthAttachment=i,e._colorAttachment=r}function createFramebuffer(e,t){(e._isPointLight?createFramebufferCube:e._usesDepthTexture?createFramebufferDepth:createFramebufferColor)(e,t)}function checkFramebuffer(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==WebGLConstants$1.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,createRenderStates(e),destroyFramebuffer(e),createFramebuffer(e,t))}function updateFramebuffer(e,t){defined(e._passes[0].framebuffer)&&e._shadowMapTexture.width===e._textureSize.x||(destroyFramebuffer(e),createFramebuffer(e,t),checkFramebuffer(e,t),clearFramebuffer(e,t))}function clearFramebuffer(e,t,i){i=defaultValue(i,0),!e._isPointLight&&0!==i||(e._clearCommand.framebuffer=e._passes[i].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function resize(e,t){e._size=t;var i,r=e._passes,n=r.length,a=e._textureSize;e._isPointLight?(t=ContextLimits.maximumCubeMapSize>=t?t:ContextLimits.maximumCubeMapSize,a.x=t,i=new BoundingRectangle(0,0,a.y=t,t),r[0].passState.viewport=i,r[1].passState.viewport=i,r[2].passState.viewport=i,r[3].passState.viewport=i,r[4].passState.viewport=i,r[5].passState.viewport=i):1===n?(t=ContextLimits.maximumTextureSize>=t?t:ContextLimits.maximumTextureSize,a.x=t,a.y=t,r[0].passState.viewport=new BoundingRectangle(0,0,t,t)):4===n&&(t=ContextLimits.maximumTextureSize>=2*t?t:ContextLimits.maximumTextureSize/2,a.x=2*t,a.y=2*t,r[0].passState.viewport=new BoundingRectangle(0,0,t,t),r[1].passState.viewport=new BoundingRectangle(t,0,t,t),r[2].passState.viewport=new BoundingRectangle(0,t,t,t),r[3].passState.viewport=new BoundingRectangle(t,t,t,t)),e._clearPassState.viewport=new BoundingRectangle(0,0,a.x,a.y);for(var o=0;o<n;++o){var s=r[o],l=s.passState.viewport,c=l.x/a.x,u=l.y/a.y,d=l.width/a.x,l=l.height/a.y;s.textureOffsets=new Matrix4(d,0,0,c,0,l,0,u,0,0,1,0,0,0,0,1)}}PickFramebuffer.prototype.end=function(e){for(var t=defaultValue(e.width,1),i=defaultValue(e.height,1),r=this._context,n=r.readPixels({x:e.x,y:e.y,width:t,height:i,framebuffer:this._fb}),e=Math.max(t,i),a=e*e,o=Math.floor(.5*t),s=Math.floor(.5*i),l=0,c=0,u=0,d=-1,h=0;h<a;++h){if(-o<=l&&l<=o&&-s<=c&&c<=s){var p=4*((s-c)*t+l+o);colorScratch.red=Color.byteToFloat(n[p]),colorScratch.green=Color.byteToFloat(n[1+p]),colorScratch.blue=Color.byteToFloat(n[2+p]),colorScratch.alpha=Color.byteToFloat(n[3+p]);var p=r.getObjectByPickColor(colorScratch);if(defined(p))return p}(l===c||l<0&&-l===c||0<l&&l===1-c)&&(p=u,u=-d,d=p),l+=u,c+=d}},PickFramebuffer.prototype.isDestroyed=function(){return!1},PickFramebuffer.prototype.destroy=function(){return this._fb=this._fb&&this._fb.destroy(),destroyObject(this)},SceneFramebuffer.prototype.update=function(e,t,i){var r=t.width,n=t.height,t=this._colorTexture;defined(t)&&t.width===r&&t.height===n&&i===this._useHdr||(destroyResources(this),i=(this._useHdr=i)?e.halfFloatingPointTexture?PixelDatatype$1.HALF_FLOAT:PixelDatatype$1.FLOAT:PixelDatatype$1.UNSIGNED_BYTE,this._colorTexture=new Texture({context:e,width:r,height:n,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:i,sampler:Sampler.NEAREST}),this._idTexture=new Texture({context:e,width:r,height:n,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,sampler:Sampler.NEAREST}),e.depthTexture?(this._depthStencilTexture=new Texture({context:e,width:r,height:n,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8,sampler:Sampler.NEAREST}),this._depthStencilIdTexture=new Texture({context:e,width:r,height:n,pixelFormat:PixelFormat$1.DEPTH_STENCIL,pixelDatatype:PixelDatatype$1.UNSIGNED_INT_24_8,sampler:Sampler.NEAREST})):(this._depthStencilRenderbuffer=new Renderbuffer({context:e,width:r,height:n,format:RenderbufferFormat$1.DEPTH_STENCIL}),this._depthStencilIdRenderbuffer=new Renderbuffer({context:e,width:r,height:n,format:RenderbufferFormat$1.DEPTH_STENCIL})),this._framebuffer=new Framebuffer({context:e,colorTextures:[this._colorTexture],depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}),this._idFramebuffer=new Framebuffer({context:e,colorTextures:[this._idTexture],depthStencilTexture:this._depthStencilIdTexture,depthStencilRenderbuffer:this._depthStencilIdRenderbuffer,destroyAttachments:!1}))},SceneFramebuffer.prototype.clear=function(e,t,i){var r=t.framebuffer;t.framebuffer=this._framebuffer,Color.clone(i,this._clearCommand.color),this._clearCommand.execute(e,t),t.framebuffer=this._idFramebuffer,Color.clone(this._idClearColor,this._clearCommand.color),this._clearCommand.execute(e,t),t.framebuffer=r},SceneFramebuffer.prototype.getFramebuffer=function(){return this._framebuffer},SceneFramebuffer.prototype.getIdFramebuffer=function(){return this._idFramebuffer},SceneFramebuffer.prototype.isDestroyed=function(){return!1},SceneFramebuffer.prototype.destroy=function(){return destroyResources(this),destroyObject(this)},ShadowMapShader.getShadowCastShaderKeyword=function(e,t,i,r){return"castShadow "+e+" "+t+" "+i+" "+r},ShadowMapShader.createShadowCastVertexShader=function(e,t,i){var r=e.defines.slice(0),n=e.sources.slice(0);r.push("SHADOW_MAP"),i&&r.push("GENERATE_POSITION");e=defined(ShaderSource.findPositionVarying(e));if(t&&!e){for(var a=n.length,o=0;o<a;++o)n[o]=ShaderSource.replaceMain(n[o],"czm_shadow_cast_main");n.push("varying vec3 v_positionEC; \nvoid main() \n{ \n czm_shadow_cast_main(); \n v_positionEC = (czm_inverseProjection * gl_Position).xyz; \n}")}return new ShaderSource({defines:r,sources:n})},ShadowMapShader.createShadowCastFragmentShader=function(e,t,i,r){var n=e.defines.slice(0),a=e.sources.slice(0),o=ShaderSource.findPositionVarying(e),s=defined(o);s||(o="v_positionEC");for(var l=a.length,c=0;c<l;++c)a[c]=ShaderSource.replaceMain(a[c],"czm_shadow_cast_main");e="";return t&&(s||(e+="varying vec3 v_positionEC; \n"),e+="uniform vec4 shadowMap_lightPositionEC; \n"),e+=r?"void main() \n{ \n":"void main() \n{ \n czm_shadow_cast_main(); \n if (gl_FragColor.a == 0.0) \n { \n discard; \n } \n",e+=t?" float distance = length("+o+"); \n if (distance >= shadowMap_lightPositionEC.w) \n { \n discard; \n } \n distance /= shadowMap_lightPositionEC.w; // radius \n gl_FragColor = czm_packDepth(distance); \n":i?" gl_FragColor = vec4(1.0); \n":" gl_FragColor = czm_packDepth(gl_FragCoord.z); \n",e+="} \n",a.push(e),new ShaderSource({defines:n,sources:a})},ShadowMapShader.getShadowReceiveShaderKeyword=function(e,t,i,r){return"receiveShadow "+e._usesDepthTexture+e._polygonOffsetSupported+e._isPointLight+e._isSpotLight+(1<e._numberOfCascades)+e.debugCascadeColors+e.softShadows+t+i+r},ShadowMapShader.createShadowReceiveVertexShader=function(e,t,i){var r=e.defines.slice(0),e=e.sources.slice(0);return r.push("SHADOW_MAP"),t&&(i?r.push("GENERATE_POSITION_AND_NORMAL"):r.push("GENERATE_POSITION")),new ShaderSource({defines:r,sources:e})},ShadowMapShader.createShadowReceiveFragmentShader=function(e,t,i,r,n){for(var a=ShaderSource.findNormalVarying(e),o=!r&&defined(a)||r&&n,s=ShaderSource.findPositionVarying(e),l=defined(s),c=t._usesDepthTexture,u=t._polygonOffsetSupported,d=t._isPointLight,h=t._isSpotLight,p=1<t._numberOfCascades,m=t.debugCascadeColors,f=t.softShadows,g=d?t._pointBias:r?t._terrainBias:t._primitiveBias,n=e.defines.slice(0),_=e.sources.slice(0),y=_.length,C=0;C<y;++C)_[C]=ShaderSource.replaceMain(_[C],"czm_shadow_receive_main");d?n.push("USE_CUBE_MAP_SHADOW"):c&&n.push("USE_SHADOW_DEPTH_TEXTURE"),f&&!d&&n.push("USE_SOFT_SHADOWS"),p&&i&&r&&(o?n.push("ENABLE_VERTEX_LIGHTING"):n.push("ENABLE_DAYNIGHT_SHADING")),i&&g.normalShading&&o&&(n.push("USE_NORMAL_SHADING"),0<g.normalShadingSmooth&&n.push("USE_NORMAL_SHADING_SMOOTH"));i="";return i+=d?"uniform samplerCube shadowMap_textureCube; \n":"uniform sampler2D shadowMap_texture; \n",i+="uniform mat4 shadowMap_matrix; \nuniform vec3 shadowMap_lightDirectionEC; \nuniform vec4 shadowMap_lightPositionEC; \nuniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; \nuniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; \n#ifdef LOG_DEPTH \nvarying vec3 v_logPositionEC; \n#endif \nvec4 getPositionEC() \n{ \n"+(l?" return vec4("+s+", 1.0); \n":"#ifndef LOG_DEPTH \n return czm_windowToEyeCoordinates(gl_FragCoord); \n#else \n return vec4(v_logPositionEC, 1.0); \n#endif \n")+"} \nvec3 getNormalEC() \n{ \n"+(o?" return normalize("+a+"); \n":" return vec3(1.0); \n")+"} \nvoid applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) \n{ \n"+(g.normalOffset&&o?" float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; \n float normalOffsetScale = 1.0 - nDotL; \n vec3 offset = normalOffset * normalOffsetScale * normalEC; \n positionEC.xyz += offset; \n":"")+"} \n",i+="void main() \n{ \n czm_shadow_receive_main(); \n vec4 positionEC = getPositionEC(); \n vec3 normalEC = getNormalEC(); \n float depth = -positionEC.z; \n",i+=" czm_shadowParameters shadowParameters; \n shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; \n shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; \n shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; \n shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; \n",r?i+=" shadowParameters.depthBias *= max(depth * 0.01, 1.0); \n":u||(i+=" shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \n"),i+=d?" vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; \n float distance = length(directionEC); \n directionEC = normalize(directionEC); \n float radius = shadowMap_lightPositionEC.w; \n // Stop early if the fragment is beyond the point light radius \n if (distance > radius) \n { \n return; \n } \n vec3 directionWC = czm_inverseViewRotation * directionEC; \n shadowParameters.depth = distance / radius; \n shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \n shadowParameters.texCoords = directionWC; \n float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); \n":h?" vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); \n float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n vec4 shadowPosition = shadowMap_matrix * positionEC; \n // Spot light uses a perspective projection, so perform the perspective divide \n shadowPosition /= shadowPosition.w; \n // Stop early if the fragment is not in the shadow bounds \n if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \n { \n return; \n } \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n":p?" float maxDepth = shadowMap_cascadeSplits[1].w; \n // Stop early if the eye depth exceeds the last cascade \n if (depth > maxDepth) \n { \n return; \n } \n // Get the cascade based on the eye-space depth \n vec4 weights = czm_cascadeWeights(depth); \n // Apply normal offset \n float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n // Transform position into the cascade \n vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; \n // Get visibility \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n // Fade out shadows that are far away \n float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; \n float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); \n visibility = mix(visibility, 1.0, fade); \n"+(m?" // Draw cascade colors for debugging \n gl_FragColor *= czm_cascadeColor(weights); \n":""):" float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n vec4 shadowPosition = shadowMap_matrix * positionEC; \n // Stop early if the fragment is not in the shadow bounds \n if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \n { \n return; \n } \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n",isSun(t._lightCamera.position)?i+=" gl_FragColor.rgb *= visibility; \n} \n":i+=" gl_FragColor.rgb = gl_FragColor.rgb; \n} \n",_.push(i),new ShaderSource({defines:n,sources:_})},ShadowMap.MAXIMUM_DISTANCE=2e4,ShadowMap.prototype.debugCreateRenderStates=function(){createRenderStates(this)},Object.defineProperties(ShadowMap.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){resize(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});var scratchViewport=new BoundingRectangle;function createDebugShadowViewCommand(e,t){var i=e._isPointLight?"uniform samplerCube shadowMap_textureCube; \nvarying vec2 v_textureCoordinates; \nvoid main() \n{ \n vec2 uv = v_textureCoordinates; \n vec3 dir; \n \n if (uv.y < 0.5) \n { \n if (uv.x < 0.333) \n { \n dir.x = -1.0; \n dir.y = uv.x * 6.0 - 1.0; \n dir.z = uv.y * 4.0 - 1.0; \n } \n else if (uv.x < 0.666) \n { \n dir.y = -1.0; \n dir.x = uv.x * 6.0 - 3.0; \n dir.z = uv.y * 4.0 - 1.0; \n } \n else \n { \n dir.z = -1.0; \n dir.x = uv.x * 6.0 - 5.0; \n dir.y = uv.y * 4.0 - 1.0; \n } \n } \n else \n { \n if (uv.x < 0.333) \n { \n dir.x = 1.0; \n dir.y = uv.x * 6.0 - 1.0; \n dir.z = uv.y * 4.0 - 3.0; \n } \n else if (uv.x < 0.666) \n { \n dir.y = 1.0; \n dir.x = uv.x * 6.0 - 3.0; \n dir.z = uv.y * 4.0 - 3.0; \n } \n else \n { \n dir.z = 1.0; \n dir.x = uv.x * 6.0 - 5.0; \n dir.y = uv.y * 4.0 - 3.0; \n } \n } \n \n float shadow = czm_unpackDepth(textureCube(shadowMap_textureCube, dir)); \n gl_FragColor = vec4(vec3(shadow), 1.0); \n} \n":"uniform sampler2D shadowMap_texture; \nvarying vec2 v_textureCoordinates; \nvoid main() \n{ \n"+(e._usesDepthTexture?" float shadow = texture2D(shadowMap_texture, v_textureCoordinates).r; \n":" float shadow = czm_unpackDepth(texture2D(shadowMap_texture, v_textureCoordinates)); \n")+" gl_FragColor = vec4(vec3(shadow), 1.0); \n} \n",i=t.createViewportQuadCommand(i,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=Pass$1.OVERLAY,i}function updateDebugShadowViewCommand(e,t){var i=t.context,r=t.context.drawingBufferWidth,n=t.context.drawingBufferHeight,a=.3*Math.min(r,n),n=scratchViewport;n.x=r-a,n.y=0,n.width=a,n.height=a;a=e._debugShadowViewCommand;defined(a)||(a=createDebugShadowViewCommand(e,i),e._debugShadowViewCommand=a),defined(a.renderState)&&BoundingRectangle.equals(a.renderState.viewport,n)||(a.renderState=RenderState.fromCache({viewport:BoundingRectangle.clone(n)})),t.commandList.push(e._debugShadowViewCommand)}var frustumCornersNDC=new Array(8);frustumCornersNDC[0]=new Cartesian4(-1,-1,-1,1),frustumCornersNDC[1]=new Cartesian4(1,-1,-1,1),frustumCornersNDC[2]=new Cartesian4(1,1,-1,1),frustumCornersNDC[3]=new Cartesian4(-1,1,-1,1),frustumCornersNDC[4]=new Cartesian4(-1,-1,1,1),frustumCornersNDC[5]=new Cartesian4(1,-1,1,1),frustumCornersNDC[6]=new Cartesian4(1,1,1,1),frustumCornersNDC[7]=new Cartesian4(-1,1,1,1);for(var scratchMatrix=new Matrix4,scratchFrustumCorners=new Array(8),i=0;i<8;++i)scratchFrustumCorners[i]=new Cartesian4;function createDebugPointLight(e,t){return new Primitive({geometryInstances:[new GeometryInstance({geometry:new BoxOutlineGeometry({minimum:new Cartesian3(-.5,-.5,-.5),maximum:new Cartesian3(.5,.5,.5)}),attributes:{color:ColorGeometryInstanceAttribute.fromColor(t)}}),new GeometryInstance({geometry:new SphereOutlineGeometry({radius:.5}),attributes:{color:ColorGeometryInstanceAttribute.fromColor(t)}})],appearance:new PerInstanceColorAppearance({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var debugOutlineColors=[Color.RED,Color.GREEN,Color.BLUE,Color.MAGENTA],scratchScale=new Cartesian3;function applyDebugSettings(e,t){updateDebugShadowViewCommand(e,t);var i,r,n,a=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(a&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new DebugCameraPrimitive({camera:e._sceneCamera,color:Color.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){a&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new DebugCameraPrimitive({camera:e._shadowMapCamera,color:Color.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(var o=0;o<e._numberOfCascades;++o)a&&(e._debugCascadeFrustums[o]=e._debugCascadeFrustums[o]&&e._debugCascadeFrustums[o].destroy(),e._debugCascadeFrustums[o]=new DebugCameraPrimitive({camera:e._passes[o].camera,color:debugOutlineColors[o],updateOnChange:!1})),e._debugCascadeFrustums[o].update(t)}}else e._isPointLight?defined(e._debugLightFrustum)&&!e._needsUpdate||(i=e._shadowMapCamera.positionWC,r=Quaternion.IDENTITY,n=2*e._pointLightRadius,n=Cartesian3.fromElements(n,n,n,scratchScale),n=Matrix4.fromTranslationQuaternionRotationScale(i,r,n,scratchMatrix),e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=createDebugPointLight(n,Color.YELLOW)):defined(e._debugLightFrustum)&&!e._needsUpdate||(e._debugLightFrustum=new DebugCameraPrimitive({camera:e._shadowMapCamera,color:Color.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function ShadowMapCamera(){this.viewMatrix=new Matrix4,this.inverseViewMatrix=new Matrix4,this.frustum=void 0,this.positionCartographic=new Cartographic,this.positionWC=new Cartesian3,this.directionWC=Cartesian3.clone(Cartesian3.UNIT_Z),this.upWC=Cartesian3.clone(Cartesian3.UNIT_Y),this.rightWC=Cartesian3.clone(Cartesian3.UNIT_X),this.viewProjectionMatrix=new Matrix4}ShadowMapCamera.prototype.clone=function(e){Matrix4.clone(e.viewMatrix,this.viewMatrix),Matrix4.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),Cartographic.clone(e.positionCartographic,this.positionCartographic),Cartesian3.clone(e.positionWC,this.positionWC),Cartesian3.clone(e.directionWC,this.directionWC),Cartesian3.clone(e.upWC,this.upWC),Cartesian3.clone(e.rightWC,this.rightWC)};var scaleBiasMatrix=new Matrix4(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);ShadowMapCamera.prototype.getViewProjection=function(){var e=this.viewMatrix,t=this.frustum.projectionMatrix;return Matrix4.multiply(t,e,this.viewProjectionMatrix),Matrix4.multiply(scaleBiasMatrix,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var scratchSplits=new Array(5),scratchFrustum=new PerspectiveFrustum,scratchCascadeDistances=new Array(4),scratchMin=new Cartesian3,scratchMax=new Cartesian3;function computeCascades(e,t){var i=e._shadowMapCamera,r=e._sceneCamera,n=r.frustum.near,a=r.frustum.far,o=e._numberOfCascades,s=a-n,l=a/n,c=.9,u=!1;t.shadowState.closestObjectSize<200&&(u=!0,c=.9);var d=scratchCascadeDistances,h=scratchSplits;for(h[0]=n,h[o]=a,g=0;g<o;++g){var p=(g+1)/o,m=n*Math.pow(l,p),p=n+s*p,m=CesiumMath.lerp(p,m,c);h[g+1]=m,d[g]=m-h[g]}if(u){for(g=0;g<o;++g)d[g]=Math.min(d[g],e._maximumCascadeDistances[g]);for(var f=h[0],g=0;g<o-1;++g)f+=d[g],h[g+1]=f}Cartesian4.unpack(h,0,e._cascadeSplits[0]),Cartesian4.unpack(h,1,e._cascadeSplits[1]),Cartesian4.unpack(d,0,e._cascadeDistances);var u=i.frustum,_=u.left,y=u.right,C=u.bottom,v=u.top,S=u.near,x=u.far,T=i.positionWC,b=i.directionWC,E=i.upWC,P=r.frustum.clone(scratchFrustum),A=i.getViewProjection();for(g=0;g<o;++g){P.near=h[g],P.far=h[g+1];for(var w=Matrix4.multiply(P.projectionMatrix,r.viewMatrix,scratchMatrix),D=Matrix4.inverse(w,scratchMatrix),M=Matrix4.multiply(A,D,scratchMatrix),I=Cartesian3.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,scratchMin),R=Cartesian3.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,scratchMax),O=0;O<8;++O){var L=Cartesian4.clone(frustumCornersNDC[O],scratchFrustumCorners[O]);Matrix4.multiplyByVector(M,L,L),Cartesian3.divideByScalar(L,L.w,L),Cartesian3.minimumByComponent(L,I,I),Cartesian3.maximumByComponent(L,R,R)}I.x=Math.max(I.x,0),I.y=Math.max(I.y,0),I.z=0,R.x=Math.min(R.x,1),R.y=Math.min(R.y,1),R.z=Math.min(R.z,1);var F=e._passes[g],w=F.camera;w.clone(i);D=w.frustum;D.left=_+I.x*(y-_),D.right=_+R.x*(y-_),D.bottom=C+I.y*(v-C),D.top=C+R.y*(v-C),D.near=S+I.z*(x-S),D.far=S+R.z*(x-S),F.cullingVolume=w.frustum.computeCullingVolume(T,b,E);D=e._cascadeMatrices[g];Matrix4.multiply(w.getViewProjection(),r.inverseViewMatrix,D),Matrix4.multiply(F.textureOffsets,D,D)}}var scratchLightView=new Matrix4,scratchRight$1=new Cartesian3,scratchUp$1=new Cartesian3,scratchTranslation=new Cartesian3;function fitShadowMapToScene(e,t){var i=e._shadowMapCamera,r=e._sceneCamera,n=Matrix4.multiply(r.frustum.projectionMatrix,r.viewMatrix,scratchMatrix),a=Matrix4.inverse(n,scratchMatrix),o=i.directionWC,s=r.directionWC;Cartesian3.equalsEpsilon(o,s,CesiumMath.EPSILON10)&&(s=r.upWC);var l=Cartesian3.cross(o,s,scratchRight$1),s=Cartesian3.cross(l,o,scratchUp$1);Cartesian3.normalize(s,s),Cartesian3.normalize(l,l);for(var c=Cartesian3.fromElements(0,0,0,scratchTranslation),e=Matrix4.computeView(c,o,s,l,scratchLightView),u=Matrix4.multiply(e,a,scratchMatrix),d=Cartesian3.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,scratchMin),h=Cartesian3.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,scratchMax),p=0;p<8;++p){var m=Cartesian4.clone(frustumCornersNDC[p],scratchFrustumCorners[p]);Matrix4.multiplyByVector(u,m,m),Cartesian3.divideByScalar(m,m.w,m),Cartesian3.minimumByComponent(m,d,d),Cartesian3.maximumByComponent(m,h,h)}h.z+=1e3,d.z-=10;n=scratchTranslation;n.x=-.5*(d.x+h.x),n.y=-.5*(d.y+h.y),n.z=-h.z;r=Matrix4.fromTranslation(n,scratchMatrix),e=Matrix4.multiply(r,e,e),c=.5*(h.x-d.x),a=.5*(h.y-d.y),n=h.z-d.z,r=i.frustum;r.left=-c,r.right=c,r.bottom=-a,r.top=a,r.near=.01,r.far=n,Matrix4.clone(e,i.viewMatrix),Matrix4.inverse(e,i.inverseViewMatrix),Matrix4.getTranslation(i.inverseViewMatrix,i.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(i.positionWC,i.positionCartographic),Cartesian3.clone(o,i.directionWC),Cartesian3.clone(s,i.upWC),Cartesian3.clone(l,i.rightWC)}var directions=[new Cartesian3(-1,0,0),new Cartesian3(0,-1,0),new Cartesian3(0,0,-1),new Cartesian3(1,0,0),new Cartesian3(0,1,0),new Cartesian3(0,0,1)],ups=[new Cartesian3(0,-1,0),new Cartesian3(0,0,-1),new Cartesian3(0,-1,0),new Cartesian3(0,-1,0),new Cartesian3(0,0,1),new Cartesian3(0,-1,0)],rights=[new Cartesian3(0,0,1),new Cartesian3(1,0,0),new Cartesian3(-1,0,0),new Cartesian3(0,0,-1),new Cartesian3(1,0,0),new Cartesian3(1,0,0)];function computeOmnidirectional(e,t){var i=new PerspectiveFrustum;i.fov=CesiumMath.PI_OVER_TWO,i.near=1,i.far=e._pointLightRadius,i.aspectRatio=1;for(var r=0;r<6;++r){var n=e._passes[r].camera;n.positionWC=e._shadowMapCamera.positionWC,n.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),n.directionWC=directions[r],n.upWC=ups[r],n.rightWC=rights[r],Matrix4.computeView(n.positionWC,n.directionWC,n.upWC,n.rightWC,n.viewMatrix),Matrix4.inverse(n.viewMatrix,n.inverseViewMatrix),n.frustum=i}}var scratchCartesian1=new Cartesian3,scratchCartesian2=new Cartesian3,scratchBoundingSphere=new BoundingSphere,scratchCenter$1=scratchBoundingSphere.center;function checkVisibility(e,t){var i=e._sceneCamera,r=e._shadowMapCamera,n=scratchBoundingSphere;if(e._cascadesEnabled){if(i.frustum.near>=e.maximumDistance)return e._outOfView=!0,void(e._needsUpdate=!1);var a=t.mapProjection.ellipsoid.geodeticSurfaceNormal(i.positionWC,scratchCartesian1),i=Cartesian3.negate(r.directionWC,scratchCartesian2),a=Cartesian3.dot(a,i),i=CesiumMath.clamp(a/.1,0,1);if(e._darkness=CesiumMath.lerp(1,e.darkness,i),a<0)return e._outOfView=!0,void(e._needsUpdate=!1);e._needsUpdate=!0,e._outOfView=!1}else e._isPointLight?(n.center=r.positionWC,n.radius=e._pointLightRadius):(a=r.frustum.far/2,r=Cartesian3.add(r.positionWC,Cartesian3.multiplyByScalar(r.directionWC,a,scratchCenter$1),scratchCenter$1),n.center=r,n.radius=a),e._outOfView=t.cullingVolume.computeVisibility(n)===Intersect$1.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(n),BoundingSphere.clone(n,e._boundingSphere)}function updateCameras(e,t){var i=t.camera,r=e._lightCamera,n=e._sceneCamera,a=e._shadowMapCamera;e._cascadesEnabled?Cartesian3.clone(r.directionWC,a.directionWC):e._isPointLight?Cartesian3.clone(r.positionWC,a.positionWC):a.clone(r);var o,s,r=e._lightDirectionEC;Matrix4.multiplyByPointAsVector(i.viewMatrix,a.directionWC,r),Cartesian3.normalize(r,r),Cartesian3.negate(r,r),Matrix4.multiplyByPoint(i.viewMatrix,a.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius,s=e._fitNearFar?(o=Math.min(t.shadowState.nearPlane,e.maximumDistance),s=Math.min(t.shadowState.farPlane,e.maximumDistance),Math.max(s,o+1)):(o=i.frustum.near,e.maximumDistance),e._sceneCamera=Camera.clone(i,n),i.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=o,e._sceneCamera.frustum.far=s,e._distance=s-o,checkVisibility(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}ShadowMap.prototype.update=function(e){var t,i,r,n;updateCameras(this,e),this._needsUpdate&&(updateFramebuffer(this,e.context),this._isPointLight&&computeOmnidirectional(this,e),this._cascadesEnabled&&(fitShadowMapToScene(this,e),1<this._numberOfCascades&&computeCascades(this,e)),this._isPointLight?this._shadowMapCullingVolume=CullingVolume.fromBoundingSphere(this._boundingSphere):(t=(n=this._shadowMapCamera).positionWC,i=n.directionWC,r=n.upWC,this._shadowMapCullingVolume=n.frustum.computeCullingVolume(t,i,r),1===this._passes.length&&this._passes[0].camera.clone(n))),1===this._passes.length&&(n=this._sceneCamera.inverseViewMatrix,Matrix4.multiply(this._shadowMapCamera.getViewProjection(),n,this._shadowMapMatrix)),this.debugShow&&applyDebugSettings(this,e)},ShadowMap.prototype.updatePass=function(e,t){clearFramebuffer(this,e,t)};var scratchTexelStepSize=new Cartesian2;function combineUniforms(t,e,i){var r=t._isPointLight?t._pointBias:i?t._terrainBias:t._primitiveBias;return combine$2(e,{shadowMap_texture:function(){return t._shadowMapTexture},shadowMap_textureCube:function(){return t._shadowMapTexture},shadowMap_matrix:function(){return t._shadowMapMatrix},shadowMap_cascadeSplits:function(){return t._cascadeSplits},shadowMap_cascadeMatrices:function(){return t._cascadeMatrices},shadowMap_lightDirectionEC:function(){return t._lightDirectionEC},shadowMap_lightPositionEC:function(){return t._lightPositionEC},shadowMap_cascadeDistances:function(){return t._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){var e=scratchTexelStepSize;return e.x=1/t._textureSize.x,e.y=1/t._textureSize.y,Cartesian4.fromElements(e.x,e.y,r.depthBias,r.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return Cartesian4.fromElements(r.normalOffsetScale,t._distance,t.maximumDistance,t._darkness,this.combinedUniforms2)},combinedUniforms1:new Cartesian4,combinedUniforms2:new Cartesian4},!1)}function createCastDerivedCommand(e,t,i,r,n,a){var o,s,l,c,u,d,h,p,m;return defined(a)&&(m=a.shaderProgram,o=a.renderState,s=a.uniformMap),(a=DrawCommand.shallowClone(i,a)).castShadows=!0,a.receiveShadows=!1,defined(m)&&n===i.shaderProgram.id&&!t||(l=i.shaderProgram,c=i.pass===Pass$1.GLOBE,p=i.pass!==Pass$1.TRANSLUCENT,u=e._isPointLight,d=e._usesDepthTexture,h=ShadowMapShader.getShadowCastShaderKeyword(u,c,d,p),defined(m=r.shaderCache.getDerivedShaderProgram(l,h))||(n=l.vertexShaderSource,t=l.fragmentShaderSource,n=ShadowMapShader.createShadowCastVertexShader(n,u,c),p=ShadowMapShader.createShadowCastFragmentShader(t,u,d,p),m=r.shaderCache.createDerivedShaderProgram(l,h,{vertexShaderSource:n,fragmentShaderSource:p,attributeLocations:l._attributeLocations})),o=e._primitiveRenderState,u?o=e._pointRenderState:c&&(o=e._terrainRenderState),i.renderState.cull.enabled||((o=clone$1(o,!1)).cull=clone$1(o.cull,!1),o.cull.enabled=!1,o=RenderState.fromCache(o)),s=combineUniforms(e,i.uniformMap,c)),a.shaderProgram=m,a.renderState=o,a.uniformMap=s,a}function CommandExtent(){this.command=void 0,this.near=void 0,this.far=void 0}function View(e,t,i){var r,n,a=e.context;a.depthTexture&&(r=new GlobeDepth),e._useOIT&&a.depthTexture&&(n=new OIT(a));e=new PassState(a);e.viewport=BoundingRectangle.clone(i),this.camera=t,this._cameraClone=Camera.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=i,this.passState=e,this.pickFramebuffer=new PickFramebuffer(a),this.pickDepthFramebuffer=new PickDepthFramebuffer,this.sceneFramebuffer=new SceneFramebuffer,this.globeDepth=r,this.globeTranslucencyFramebuffer=new GlobeTranslucencyFramebuffer,this.oit=n,this.pickDepths=[],this.debugGlobeDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}ShadowMap.createReceiveDerivedCommand=function(e,t,i,r,n){defined(n)||(n={});var a,o,s,l=0<e.length,c=t.shaderProgram,u=c.vertexShaderSource,d=c.fragmentShaderSource,h=t.pass===Pass$1.GLOBE,p=!1;return h&&(p=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&l&&(defined(n.receiveCommand)&&(s=n.receiveCommand.shaderProgram,a=n.receiveCommand.uniformMap),n.receiveCommand=DrawCommand.shallowClone(t,n.receiveCommand),n.castShadows=!1,n.receiveShadows=!0,o=n.receiveShaderCastShadows!==t.castShadows,l=n.receiveShaderProgramId!==t.shaderProgram.id,(!defined(s)||l||i||o)&&(o=ShadowMapShader.getShadowReceiveShaderKeyword(e[0],t.castShadows,h,p),defined(s=r.shaderCache.getDerivedShaderProgram(c,o))||(u=ShadowMapShader.createShadowReceiveVertexShader(u,h,p),p=ShadowMapShader.createShadowReceiveFragmentShader(d,e[0],t.castShadows,h,p),s=r.shaderCache.createDerivedShaderProgram(c,o,{vertexShaderSource:u,fragmentShaderSource:p,attributeLocations:c._attributeLocations})),a=combineUniforms(e[0],t.uniformMap,h)),n.receiveCommand.shaderProgram=s,n.receiveCommand.uniformMap=a,n.receiveShaderProgramId=t.shaderProgram.id,n.receiveShaderCastShadows=t.castShadows),n},ShadowMap.createCastDerivedCommand=function(e,t,i,r,n){if(defined(n)||(n={}),t.castShadows){var a=n.castCommands;defined(a)||(a=n.castCommands=[]);var o=n.castShaderProgramId,s=e.length;a.length=s;for(var l=0;l<s;++l)a[l]=createCastDerivedCommand(e[l],i,t,r,o,a[l]);n.castShaderProgramId=t.shaderProgram.id}return n},ShadowMap.prototype.isDestroyed=function(){return!1},ShadowMap.prototype.destroy=function(){destroyFramebuffer(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(var e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return destroyObject(this)};var scratchPosition0=new Cartesian3,scratchPosition1=new Cartesian3;function maxComponent(e,t){var i=Math.max(Math.abs(e.x),Math.abs(t.x)),r=Math.max(Math.abs(e.y),Math.abs(t.y)),t=Math.max(Math.abs(e.z),Math.abs(t.z));return Math.max(Math.max(i,r),t)}function cameraEqual(e,t,i){var r=1/Math.max(1,maxComponent(e.position,t.position));return Cartesian3.multiplyByScalar(e.position,r,scratchPosition0),Cartesian3.multiplyByScalar(t.position,r,scratchPosition1),Cartesian3.equalsEpsilon(scratchPosition0,scratchPosition1,i)&&Cartesian3.equalsEpsilon(e.direction,t.direction,i)&&Cartesian3.equalsEpsilon(e.up,t.up,i)&&Cartesian3.equalsEpsilon(e.right,t.right,i)&&Matrix4.equalsEpsilon(e.transform,t.transform,i)&&e.frustum.equalsEpsilon(t.frustum,i)}function updateFrustums(e,t,i,r){var n=t.frameState,a=n.camera,o=n.useLogDepth?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,s=t.mode===SceneMode$1.SCENE2D,l=t.nearToFarDistance2D;r*=1+CesiumMath.EPSILON2,i=Math.min(Math.max(i,a.frustum.near),a.frustum.far),r=Math.max(Math.min(r,a.frustum.far),i);var c=s?(r=Math.min(r,a.position.z+t.nearToFarDistance2D),i=Math.min(i,r),Math.ceil(Math.max(1,r-i)/t.nearToFarDistance2D)):Math.ceil(Math.log(r/i)/Math.log(o)),u=e.frustumCommandsList;u.length=c;for(var d=0;d<c;++d){var h,p=s?(h=Math.min(r-l,i+d*l),Math.min(r,h+l)):(h=Math.max(i,Math.pow(o,d)*i),Math.min(r,o*h)),m=u[d];defined(m)?(m.near=h,m.far=p):m=u[d]=new FrustumCommands(h,p)}}function insertIntoBin(e,t,i,r,n){t.debugShowFrustums&&(i.debugOverlappingFrustums=0);for(var a,o=e.frustumCommandsList,s=o.length,l=0;l<s;++l){var c=o[l],u=c.near;if(!(c.far<r)){if(n<u)break;var d=i.pass,u=c.indices[d]++;if(c.commands[d][u]=i,t.debugShowFrustums&&(i.debugOverlappingFrustums|=1<<l),i.executeInClosestFrustum)break}}t.debugShowFrustums&&((a=e.debugFrustumStatistics.commandsInFrustums)[i.debugOverlappingFrustums]=defined(a[i.debugOverlappingFrustums])?a[i.debugOverlappingFrustums]+1:1,++e.debugFrustumStatistics.totalCommands),t.updateDerivedCommands(i)}View.prototype.checkForCameraUpdates=function(e){var t=this.camera,i=this._cameraClone;return cameraEqual(t,i,CesiumMath.EPSILON15)?(this._cameraStartFired&&getTimestamp$1()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=getTimestamp$1(),Camera.clone(t,i),!0)};var scratchCullingVolume$1=new CullingVolume,scratchNearFarInterval=new Interval;View.prototype.createPotentiallyVisibleSet=function(e){var t=e.frameState,i=t.camera,r=i.directionWC,n=i.positionWC,a=e._computeCommandList,o=e._overlayCommandList,s=t.commandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});for(var l=this.frustumCommandsList,c=l.length,u=Pass$1.NUMBER_OF_PASSES,d=0;d<c;++d)for(var h=0;h<u;++h)l[d].indices[h]=0;a.length=0,o.length=0;for(var p=this._commandExtents,m=p.length,f=0,g=+Number.MAX_VALUE,_=-Number.MAX_VALUE,y=t.shadowState.shadowsEnabled,C=+Number.MAX_VALUE,v=-Number.MAX_VALUE,S=Number.MAX_VALUE,x=t.mode===SceneMode$1.SCENE3D?t.occluder:void 0,T=t.cullingVolume,b=scratchCullingVolume$1.planes,E=0;E<5;++E)b[E]=T.planes[E];for(var P,A,T=scratchCullingVolume$1,w=s.length,D=0;D<w;++D){var M=s[D],I=M.pass;if(I===Pass$1.COMPUTE)a.push(M);else if(I===Pass$1.OVERLAY)o.push(M);else{var R=M.boundingVolume;if(defined(R)){if(!e.isVisible(M,T,x))continue;var O=R.computePlaneDistances(n,r,scratchNearFarInterval),L=O.start,O=O.stop,g=Math.min(g,L),_=Math.max(_,O);y&&M.receiveShadows&&L<ShadowMap.MAXIMUM_DISTANCE&&!(I===Pass$1.GLOBE&&L<-100&&100<O)&&(F=O-L,I!==Pass$1.GLOBE&&L<100&&(S=Math.min(S,F)),C=Math.min(C,L),v=Math.max(v,O))}else M instanceof ClearCommand?(L=i.frustum.near,O=i.frustum.far):(L=i.frustum.near,O=i.frustum.far,g=Math.min(g,L),_=Math.max(_,O));var F=p[f];(F=!defined(F)?p[f]=new CommandExtent:F).command=M,F.near=L,F.far=O,f++}}for(y&&(C=Math.min(Math.max(C,i.frustum.near),i.frustum.far),v=Math.max(Math.min(v,i.frustum.far),C)),y&&(t.shadowState.nearPlane=C,t.shadowState.farPlane=v,t.shadowState.closestObjectSize=S),updateFrustums(this,e,g,_),P=0;P<f;P++)insertIntoBin(this,e,(A=p[P]).command,A.near,A.far);if(f<m)for(P=f;P<m&&defined((A=p[P]).command);P++)A.command=void 0;var N=l.length,B=t.frustumSplits;B.length=N+1;for(var V=0;V<N;++V)B[V]=l[V].near,V===N-1&&(B[V+1]=l[V].far)},View.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();for(var e=this.pickDepths,t=this.debugGlobeDepths,i=e.length,r=0;r<i;++r)e[r].destroy();for(i=t.length,r=0;r<i;++r)t[r].destroy()};var offscreenDefaultWidth=.1,mostDetailedPreloadTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.MOST_DETAILED_PRELOAD}),mostDetailedPickTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.MOST_DETAILED_PICK}),pickTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.PICK});function Picking(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;var t=new BoundingRectangle(0,0,1,1),i=new Camera(e);i.frustum=new OrthographicFrustum({width:offscreenDefaultWidth,aspectRatio:1,near:.1}),this._pickOffscreenView=new View(e,i,t)}Picking.prototype.update=function(){this._pickPositionCacheDirty=!0},Picking.prototype.getPickDepth=function(e,t){var i=e.view.pickDepths,e=i[t];return defined(e)||(e=new PickDepth,i[t]=e),e};var scratchOrthoPickingFrustum=new OrthographicOffCenterFrustum,scratchOrthoOrigin=new Cartesian3,scratchOrthoDirection=new Cartesian3,scratchOrthoPixelSize=new Cartesian2,scratchOrthoPickVolumeMatrix4=new Matrix4;function getPickOrthographicCullingVolume(e,t,i,r,n){var a=e.camera,o=a.frustum;defined(o._offCenterFrustum)&&(o=o._offCenterFrustum);var s=2*(t.x-n.x)/n.width-1;s*=.5*(o.right-o.left);var l=2*(n.height-t.y-n.y)/n.height-1;l*=.5*(o.top-o.bottom);var c=Matrix4.clone(a.transform,scratchOrthoPickVolumeMatrix4);a._setTransform(Matrix4.IDENTITY);t=Cartesian3.clone(a.position,scratchOrthoOrigin);Cartesian3.multiplyByScalar(a.right,s,scratchOrthoDirection),Cartesian3.add(scratchOrthoDirection,t,t),Cartesian3.multiplyByScalar(a.up,l,scratchOrthoDirection),Cartesian3.add(scratchOrthoDirection,t,t),a._setTransform(c),e.mode===SceneMode$1.SCENE2D&&Cartesian3.fromElements(t.z,t.x,t.y,t);e=o.getPixelDimensions(n.width,n.height,1,1,scratchOrthoPixelSize),n=scratchOrthoPickingFrustum;return n.right=.5*e.x,n.left=-n.right,n.top=.5*e.y,n.bottom=-n.top,n.near=o.near,n.far=o.far,n.computeCullingVolume(t,a.directionWC,a.upWC)}var scratchPerspPickingFrustum=new PerspectiveOffCenterFrustum,scratchPerspPixelSize=new Cartesian2;function getPickPerspectiveCullingVolume(e,t,i,r,n){var a=e.camera,o=a.frustum,s=o.near,l=Math.tan(.5*o.fovy),e=o.aspectRatio*l,e=(2*(t.x-n.x)/n.width-1)*s*e,l=(2*(n.height-t.y-n.y)/n.height-1)*s*l,n=o.getPixelDimensions(n.width,n.height,1,1,scratchPerspPixelSize),i=n.x*i*.5,n=n.y*r*.5,r=scratchPerspPickingFrustum;return r.top=l+n,r.bottom=l-n,r.right=e+i,r.left=e-i,r.near=s,r.far=o.far,r.computeCullingVolume(a.positionWC,a.directionWC,a.upWC)}function getPickCullingVolume(e,t,i,r,n){var a=e.camera.frustum;return(a instanceof OrthographicFrustum||a instanceof OrthographicOffCenterFrustum?getPickOrthographicCullingVolume:getPickPerspectiveCullingVolume)(e,t,i,r,n)}var scratchRectangleWidth=3,scratchRectangleHeight=3,scratchRectangle=new BoundingRectangle(0,0,scratchRectangleWidth,scratchRectangleHeight),scratchPosition=new Cartesian2,scratchColorZero=new Color(0,0,0,0);function renderTranslucentDepthForPick(e,t){var i=e.context,r=e.frameState,n=e.environmentState,a=e.defaultView,o=(e.view=a).viewport;o.x=0,o.y=0,o.width=i.drawingBufferWidth,o.height=i.drawingBufferHeight;var s=a.passState;s.viewport=BoundingRectangle.clone(o,s.viewport),e.clearPasses(r.passes),r.passes.pick=!0,r.passes.depth=!0,r.cullingVolume=getPickCullingVolume(e,t,1,1,o),r.tilesetPassState=pickTilesetPassState,e.updateEnvironment(),n.renderTranslucentDepthForPick=!0,s=a.pickDepthFramebuffer.update(i,t,o),e.updateAndExecuteCommands(s,scratchColorZero),e.resolveFramebuffers(s),i.endFrame()}Picking.prototype.pick=function(e,t,i,r){scratchRectangleWidth=defaultValue(i,3),scratchRectangleHeight=defaultValue(r,scratchRectangleWidth);var n=e.context,a=n.uniformState,o=e.frameState,s=e.defaultView,i=(e.view=s).viewport;i.x=0,i.y=0,i.width=n.drawingBufferWidth,i.height=n.drawingBufferHeight;r=s.passState;r.viewport=BoundingRectangle.clone(i,r.viewport);t=SceneTransforms.transformWindowToDrawingBuffer(e,t,scratchPosition);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=getPickCullingVolume(e,t,scratchRectangleWidth,scratchRectangleHeight,i),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=pickTilesetPassState,a.update(o),e.updateEnvironment(),scratchRectangle.x=t.x-.5*(scratchRectangleWidth-1),scratchRectangle.y=e.drawingBufferHeight-t.y-.5*(scratchRectangleHeight-1),scratchRectangle.width=scratchRectangleWidth,scratchRectangle.height=scratchRectangleHeight,r=s.pickFramebuffer.begin(scratchRectangle,s.viewport),e.updateAndExecuteCommands(r,scratchColorZero),e.resolveFramebuffers(r);s=s.pickFramebuffer.end(scratchRectangle);return n.endFrame(),s};var scratchPerspectiveFrustum$1=new PerspectiveFrustum,scratchPerspectiveOffCenterFrustum$1=new PerspectiveOffCenterFrustum,scratchOrthographicFrustum$1=new OrthographicFrustum,scratchOrthographicOffCenterFrustum$1=new OrthographicOffCenterFrustum;Picking.prototype.pickPositionWorldCoordinates=function(e,t,i){if(e.useDepthPicking){var r=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(r))return Cartesian3.clone(this._pickPositionCache[r],i);var n=e.frameState,a=e.context,o=a.uniformState,s=e.defaultView;e.view=s;var l=SceneTransforms.transformWindowToDrawingBuffer(e,t,scratchPosition);e.pickTranslucentDepth?renderTranslucentDepthForPick(e,l):(e.updateFrameState(),o.update(n),e.updateEnvironment()),l.y=e.drawingBufferHeight-l.y;for(var c=e.camera,u=defined(c.frustum.fov)?c.frustum.clone(scratchPerspectiveFrustum$1):defined(c.frustum.infiniteProjectionMatrix)?c.frustum.clone(scratchPerspectiveOffCenterFrustum$1):defined(c.frustum.width)?c.frustum.clone(scratchOrthographicFrustum$1):c.frustum.clone(scratchOrthographicOffCenterFrustum$1),d=s.frustumCommandsList,h=d.length,p=0;p<h;++p){var m=this.getPickDepth(e,p).getDepth(a,l.x,l.y);if(defined(m)&&(0<m&&m<1)){var f,g=d[p];return e.mode===SceneMode$1.SCENE2D?(f=c.position.z,c.position.z=f-g.near+1,u.far=Math.max(1,g.far-g.near),u.near=1,o.update(n)):(u.near=g.near*(0!==p?e.opaqueFrustumNearOffset:1),u.far=g.far),o.updateFrustum(u),i=SceneTransforms.drawingBufferToWgs84Coordinates(e,l,m,i),e.mode===SceneMode$1.SCENE2D&&(c.position.z=f,o.update(n)),this._pickPositionCache[r]=Cartesian3.clone(i),i}}this._pickPositionCache[r]=void 0}};var scratchPickPositionCartographic=new Cartographic;function drillPick(e,t){var i,r,n=[],a=[],o=[],s=[];defined(e)||(e=Number.MAX_VALUE);for(var l=0,c=t();defined(c)&&!(100<++l);){var u=c.object,d=c.position,h=c.exclude;if(defined(d)&&!defined(u)){n.push(c);break}if(!defined(u)||!defined(u.primitive))break;if(!h&&(n.push(c),--e<=0))break;d=u.primitive,h=!1;"function"==typeof d.getGeometryInstanceAttributes&&defined(u.id)&&defined(r=d.getGeometryInstanceAttributes(u.id))&&defined(r.show)&&(h=!0,r.show=ShowGeometryInstanceAttribute.toValue(!1,r.show),o.push(r)),u instanceof Cesium3DTileFeature&&(h=!0,u.show=!1,s.push(u)),h||(d.show=!1,a.push(d)),c=t()}for(i=0;i<a.length;++i)a[i].show=!0;for(i=0;i<o.length;++i)(r=o[i]).show=ShowGeometryInstanceAttribute.toValue(!0,r.show);for(i=0;i<s.length;++i)s[i].show=!0;return n}Picking.prototype.pickPosition=function(e,t,i){return defined(i=this.pickPositionWorldCoordinates(e,t,i))&&e.mode!==SceneMode$1.SCENE3D&&(Cartesian3.fromElements(i.y,i.z,i.x,i),e=(t=e.mapProjection).ellipsoid,t=t.unproject(i,scratchPickPositionCartographic),e.cartographicToCartesian(t,i)),i},Picking.prototype.drillPick=function(t,i,e,r,n){var a=this;return drillPick(e,function(){var e=a.pick(t,i,r,n);if(defined(e))return{object:e,position:void 0,exclude:!1}}).map(function(e){return e.object})};var scratchRight=new Cartesian3,scratchUp=new Cartesian3;function MostDetailedRayPick(e,t,i){this.ray=e,this.width=t,this.tilesets=i,this.ready=!1,this.deferred=when.defer(),this.promise=this.deferred.promise}function updateOffscreenCameraFromRay(e,t,i,r){var n=t.direction,a=Cartesian3.mostOrthogonalAxis(n,scratchRight),o=Cartesian3.cross(n,a,scratchRight),a=Cartesian3.cross(n,o,scratchUp);return r.position=t.origin,r.direction=n,r.up=a,r.right=o,r.frustum.width=defaultValue(i,offscreenDefaultWidth),r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function updateMostDetailedRayPick(e,t,i){var r=t.frameState,n=i.ray,a=i.width,o=i.tilesets,s=e._pickOffscreenView.camera,a=updateOffscreenCameraFromRay(e,n,a,s),l=mostDetailedPreloadTilesetPassState;l.camera=s,l.cullingVolume=a;for(var c=!0,u=o.length,d=0;d<u;++d){var h=o[d];h.show&&t.primitives.contains(h)&&(h.updateForPass(r,l),c=c&&l.ready)}return c&&i.deferred.resolve(),c}function getTilesets(e,t,i){for(var r=e.length,n=0;n<r;++n){var a=e.get(n);a.show&&(defined(a.isCesium3DTileset)?defined(t)&&-1!==t.indexOf(a)||i.push(a):a instanceof PrimitiveCollection&&getTilesets(a,t,i))}}function launchMostDetailedRayPick(e,t,i,r,n,a){var o=[];if(getTilesets(t.primitives,r,o),0===o.length)return when.resolve(a());o=new MostDetailedRayPick(i,n,o);return e._mostDetailedRayPicks.push(o),o.promise.then(function(){return a()})}function isExcluded(e,t){return!(!defined(e)||!defined(t)||0===t.length)&&(-1<t.indexOf(e)||-1<t.indexOf(e.primitive)||-1<t.indexOf(e.id))}function getRayIntersection(e,t,i,r,n,a,o){var s=t.context,l=s.uniformState,c=t.frameState,u=e._pickOffscreenView;updateOffscreenCameraFromRay(e,i,n,(t.view=u).camera),scratchRectangle=BoundingRectangle.clone(u.viewport,scratchRectangle);n=u.pickFramebuffer.begin(scratchRectangle,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),c.invertClassification=!1,c.passes.pick=!0,c.passes.offscreen=!0,c.tilesetPassState=o?mostDetailedPickTilesetPassState:pickTilesetPassState,l.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(n,scratchColorZero),t.resolveFramebuffers(n);n=u.pickFramebuffer.end(s);if(t.context.depthTexture)for(var d=u.frustumCommandsList.length,h=0;h<d;++h){var p=e.getPickDepth(t,h).getDepth(s,0,0);if(defined(p)&&(0<p&&p<1)){var m=u.frustumCommandsList[h],f=m.near*(0!==h?t.opaqueFrustumNearOffset:1),f=f+p*(m.far-f),g=Ray.getPoint(i,f);break}}if(t.view=t.defaultView,s.endFrame(),defined(n)||defined(g))return{object:n,position:g,exclude:!defined(g)&&a||isExcluded(n,r)}}function getRayIntersections(e,t,i,r,n,a,o,s){return drillPick(r,function(){return getRayIntersection(e,t,i,n,a,o,s)})}function pickFromRay(e,t,i,r,n,a,o){o=getRayIntersections(e,t,i,1,r,n,a,o);if(0<o.length)return o[0]}function drillPickFromRay(e,t,i,r,n,a,o,s){return getRayIntersections(e,t,i,r,n,a,o,s)}function deferPromiseUntilPostRender(i,e){var r=when.defer();return e.then(function(e){var t=i.postRender.addEventListener(function(){r.resolve(e),t()});i.requestRender()}).otherwise(function(e){r.reject(e)}),r.promise}Picking.prototype.updateMostDetailedRayPicks=function(e){for(var t=this._mostDetailedRayPicks,i=0;i<t.length;++i)updateMostDetailedRayPick(this,e,t[i])&&t.splice(i--,1)},Picking.prototype.pickFromRay=function(e,t,i,r){return pickFromRay(this,e,t,i,r,!1,!1)},Picking.prototype.drillPickFromRay=function(e,t,i,r,n){return drillPickFromRay(this,e,t,i,r,n,!1,!1)},Picking.prototype.pickFromRayMostDetailed=function(e,t,i,r){var n=this;return t=Ray.clone(t),i=defined(i)?i.slice():i,deferPromiseUntilPostRender(e,launchMostDetailedRayPick(n,e,t,i,r,function(){return pickFromRay(n,e,t,i,r,!1,!0)}))},Picking.prototype.drillPickFromRayMostDetailed=function(e,t,i,r,n){var a=this;return t=Ray.clone(t),r=defined(r)?r.slice():r,deferPromiseUntilPostRender(e,launchMostDetailedRayPick(a,e,t,r,n,function(){return drillPickFromRay(a,e,t,i,r,n,!1,!0)}))};var scratchSurfacePosition=new Cartesian3,scratchSurfaceNormal$1=new Cartesian3,scratchSurfaceRay=new Ray,scratchCartographic$1=new Cartographic;function getRayForSampleHeight(e,t){var i=e.globe,r=(defined(i)?i:e.mapProjection).ellipsoid,i=ApproximateTerrainHeights._defaultMaxTerrainHeight,e=r.geodeticSurfaceNormalCartographic(t,scratchSurfaceNormal$1),t=Cartographic.toCartesian(t,r,scratchSurfacePosition),r=scratchSurfaceRay;r.origin=t,r.direction=e;t=new Ray;return Ray.getPoint(r,i,t.origin),Cartesian3.negate(e,t.direction),t}function getRayForClampToHeight(e,t){var i=e.globe,i=(defined(i)?i:e.mapProjection).ellipsoid;return getRayForSampleHeight(e,Cartographic.fromCartesian(t,i,scratchCartographic$1))}function getHeightFromCartesian(e,t){var i=e.globe,e=(defined(i)?i:e.mapProjection).ellipsoid;return Cartographic.fromCartesian(t,e,scratchCartographic$1).height}function sampleHeightMostDetailed(t,i,e,r,n){var a=getRayForSampleHeight(i,e);return launchMostDetailedRayPick(t,i,a,r,n,function(){var e=pickFromRay(t,i,a,r,n,!0,!0);if(defined(e))return getHeightFromCartesian(i,e.position)})}function clampToHeightMostDetailed(t,i,e,r,n,a){var o=getRayForClampToHeight(i,e);return launchMostDetailedRayPick(t,i,o,r,n,function(){var e=pickFromRay(t,i,o,r,n,!0,!0);if(defined(e))return Cartesian3.clone(e.position,a)})}Picking.prototype.sampleHeight=function(e,t,i,r){r=pickFromRay(this,e,getRayForSampleHeight(e,t),i,r,!0,!1);if(defined(r))return getHeightFromCartesian(e,r.position)},Picking.prototype.clampToHeight=function(e,t,i,r,n){r=pickFromRay(this,e,getRayForClampToHeight(e,t),i,r,!0,!1);if(defined(r))return Cartesian3.clone(r.position,n)},Picking.prototype.sampleHeightMostDetailed=function(e,r,t,i){t=defined(t)?t.slice():t;for(var n=r.length,a=new Array(n),o=0;o<n;++o)a[o]=sampleHeightMostDetailed(this,e,r[o],t,i);return deferPromiseUntilPostRender(e,when.all(a).then(function(e){for(var t=e.length,i=0;i<t;++i)r[i].height=e[i];return r}))},Picking.prototype.clampToHeightMostDetailed=function(e,r,t,i){t=defined(t)?t.slice():t;for(var n=r.length,a=new Array(n),o=0;o<n;++o)a[o]=clampToHeightMostDetailed(this,e,r[o],t,i,r[o]);return deferPromiseUntilPostRender(e,when.all(a).then(function(e){for(var t=e.length,i=0;i<t;++i)r[i]=e[i];return r}))},Picking.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var PostProcessStageSampleMode={NEAREST:0,LINEAR:1};function PostProcessStage(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).fragmentShader,i=defaultValue(e.textureScale,1),r=defaultValue(e.pixelFormat,PixelFormat$1.RGBA);this._fragmentShader=t,this._uniforms=e.uniforms,this._textureScale=i,this._forcePowerOfTwo=defaultValue(e.forcePowerOfTwo,!1),this._sampleMode=defaultValue(e.sampleMode,PostProcessStageSampleMode.NEAREST),this._pixelFormat=r,this._pixelDatatype=defaultValue(e.pixelDatatype,PixelDatatype$1.UNSIGNED_BYTE),this._clearColor=defaultValue(e.clearColor,Color.BLACK),this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;r=new PassState;r.scissorTest={enabled:!0,rectangle:defined(e.scissorRectangle)?BoundingRectangle.clone(e.scissorRectangle):new BoundingRectangle},this._passState=r,this._ready=!1;e=e.name;defined(e)||(e=createGuid()),this._name=e,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(PostProcessStage.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(defined(this._textureCache)){var e=this._textureCache.getFramebuffer(this._name);if(defined(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var depthTextureRegex=/uniform\s+sampler2D\s+depthTexture/g;function getUniformValueGetterAndSetter(n,a,o){var e=a[o];return("string"==typeof e||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof HTMLVideoElement||e instanceof ImageData)&&n._dirtyUniforms.push(o),{get:function(){return a[o]},set:function(e){var t=a[o];a[o]=e;var i=n._actualUniforms,r=i[o];defined(r)&&r!==t&&r instanceof Texture&&!defined(n._textureCache.getStageByName(o))&&(n._texturesToRelease.push(r),delete i[o],delete i[o+"Dimensions"]),t instanceof Texture&&n._texturesToRelease.push(t),"string"==typeof e||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof HTMLVideoElement||e instanceof ImageData?n._dirtyUniforms.push(o):i[o]=e}}}function getUniformMapFunction(t,i){return function(){var e=t._actualUniforms[i];return"function"==typeof e?e():e}}function getUniformMapDimensionsFunction(t,i){return function(){var e=t[i]();if(defined(e))return e.dimensions}}function createUniformMap(e){if(!defined(e._uniformMap)){var t,i,r={},n={},a=e._uniforms,o=e._actualUniforms;for(t in a)a.hasOwnProperty(t)&&("function"!=typeof a[t]?(r[t]=getUniformMapFunction(e,t),n[t]=getUniformValueGetterAndSetter(e,a,t)):(r[t]=a[t],n[t]=a[t]),o[t]=a[t],("string"==typeof(i=r[t]())||i instanceof Texture||i instanceof HTMLImageElement||i instanceof HTMLCanvasElement||i instanceof HTMLVideoElement)&&(r[t+"Dimensions"]=getUniformMapDimensionsFunction(r,t)));e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=combine$2(r,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}}function createDrawCommand(e,t){var i;defined(e._command)&&!e._logDepthChanged&&!e._selectedDirty||(i=e._fragmentShader,defined(e._selectedIdTexture)&&(i="#define CZM_SELECTED_FEATURE \nuniform sampler2D czm_idTexture; \nuniform sampler2D czm_selectedIdTexture; \nuniform float czm_selectedIdTextureStep; \nvarying vec2 v_textureCoordinates; \nbool czm_selected(vec2 offset) \n{ \n bool selected = false;\n vec4 id = texture2D(czm_idTexture, v_textureCoordinates + offset); \n for (int i = 0; i < "+e._selectedIdTexture.width+"; ++i) \n { \n vec4 selectedId = texture2D(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5)); \n if (all(equal(id, selectedId))) \n { \n return true; \n } \n } \n return false; \n} \n\nbool czm_selected() \n{ \n return czm_selected(vec2(0.0)); \n} \n\n"+(i=i.replace(/varying\s+vec2\s+v_textureCoordinates;/g,""))),i=new ShaderSource({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[i]}),e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e}))}function createSampler(e){var t,i=e._sampleMode===PostProcessStageSampleMode.LINEAR?(t=TextureMinificationFilter$1.LINEAR,TextureMagnificationFilter$1.LINEAR):(t=TextureMinificationFilter$1.NEAREST,TextureMagnificationFilter$1.NEAREST),r=e._sampler;defined(r)&&r.minificationFilter===t&&r.magnificationFilter===i||(e._sampler=new Sampler({wrapS:TextureWrap$1.CLAMP_TO_EDGE,wrapT:TextureWrap$1.CLAMP_TO_EDGE,minificationFilter:t,magnificationFilter:i}))}function createLoadImageFunction(t,i){return function(e){t._texturesToCreate.push({name:i,source:e})}}function createStageOutputTextureFunction(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function updateUniformTextures(e,t){var i,r=e._texturesToRelease,n=r.length;for(d=0;d<n;++d)i=(i=r[d])&&i.destroy();r.length=0;var a=e._texturesToCreate;for(n=a.length,d=0;d<n;++d){var o=a[d],s=o.name,o=o.source;e._actualUniforms[s]=new Texture({context:t,source:o})}a.length=0;var l=e._dirtyUniforms;if(0!==l.length||defined(e._texturePromise)){if(0!==l.length&&!defined(e._texturePromise)){for(var n=l.length,c=e._uniforms,u=[],d=0;d<n;++d){var h,p=c[s=l[d]];defined(e._textureCache.getStageByName(p))?e._actualUniforms[s]=createStageOutputTextureFunction(e,p):"string"==typeof p?(h=new Resource({url:p}),u.push(h.fetchImage().then(createLoadImageFunction(e,s)))):e._texturesToCreate.push({name:s,source:p})}(l.length=0)<u.length?(e._ready=!1,e._texturePromise=when.all(u).then(function(){e._ready=!0,e._texturePromise=void 0})):e._ready=!0}}else e._ready=!0}function releaseResources$1(e){defined(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();var t=e._textureCache;if(defined(t)){var i,r=e._uniforms,n=e._actualUniforms;for(i in n)n.hasOwnProperty(i)&&n[i]instanceof Texture&&(defined(t.getStageByName(r[i]))||n[i].destroy(),e._dirtyUniforms.push(i))}}function isSelectedTextureDirty$1(e){var t=defined(e._selected)?e._selected.length:0,i=defined(e._parentSelected)?e._parentSelected:0,r=(r=e._selected!==e._selectedShadow||t!==e._selectedLength)||e._parentSelected!==e._parentSelectedShadow||i!==e._parentSelectedLength;if(defined(e._selected)&&defined(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):defined(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!r&&defined(e._combinedSelected)){if(!defined(e._combinedSelectedShadow))return!0;for(var t=e._combinedSelected.length,n=0;n<t;++n)if(e._combinedSelected[n]!==e._combinedSelectedShadow[n])return!0}return r}function createSelectedTexture(e,t){if(e._selectedDirty){e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;var i=e._combinedSelected;if(defined(i)){for(var r,n,a=0,o=i.length,s=0;s<o;++s)defined((r=i[s]).pickIds)?a+=r.pickIds.length:defined(r.pickId)&&++a;if(0===o||0===a){var l=new Uint8Array(4);return l[0]=255,l[1]=255,l[2]=255,l[3]=255,void(e._selectedIdTexture=new Texture({context:t,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{arrayBufferView:l,width:1,height:1},sampler:Sampler.NEAREST}))}var c=0,u=new Uint8Array(4*a);for(s=0;s<o;++s)if(defined((r=i[s]).pickIds))for(var d=r.pickIds,h=d.length,p=0;p<h;++p)n=d[p].color,u[c]=Color.floatToByte(n.red),u[c+1]=Color.floatToByte(n.green),u[c+2]=Color.floatToByte(n.blue),u[c+3]=Color.floatToByte(n.alpha),c+=4;else defined(r.pickId)&&(n=r.pickId.color,u[c]=Color.floatToByte(n.red),u[c+1]=Color.floatToByte(n.green),u[c+2]=Color.floatToByte(n.blue),u[c+3]=Color.floatToByte(n.alpha),c+=4);e._selectedIdTexture=new Texture({context:t,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{arrayBufferView:u,width:a,height:1},sampler:Sampler.NEAREST})}}}PostProcessStage.prototype._isSupported=function(e){return!depthTextureRegex.test(this._fragmentShader)||e.depthTexture},PostProcessStage.prototype.update=function(e,t){var i;this.enabled===this._enabled||this.enabled||releaseResources$1(this),this._enabled=this.enabled,this._enabled&&(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=isSelectedTextureDirty$1(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=defined(this._selected)?this._selected.length:0,this._parentSelectedLength=defined(this._parentSelected)?this._parentSelected.length:0,createSelectedTexture(this,e),createUniformMap(this),updateUniformTextures(this,e),createDrawCommand(this,e),createSampler(this),this._selectedDirty=!1,this._ready&&(t=this._textureCache.getFramebuffer(this._name),defined(this._command.framebuffer=t)&&((t=t.getColorTexture(0)).width===e.drawingBufferWidth&&t.height===e.drawingBufferHeight||defined(i=this._renderState)&&t.width===i.viewport.width&&t.height===i.viewport.height||(this._renderState=RenderState.fromCache({viewport:new BoundingRectangle(0,0,t.width,t.height)})),this._command.renderState=i)))},PostProcessStage.prototype.execute=function(e,t,i,r){defined(this._command)&&defined(this._command.framebuffer)&&this._ready&&this._enabled&&(this._colorTexture=t,this._depthTexture=i,this._idTexture=r,Sampler.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler),defined(r=0<this.scissorRectangle.width&&0<this.scissorRectangle.height?this._passState:void 0)&&(r.context=e),this._command.execute(e,r))},PostProcessStage.prototype.isDestroyed=function(){return!1},PostProcessStage.prototype.destroy=function(){return releaseResources$1(this),destroyObject(this)};var AcesTonemapping="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\nvoid main()\n{\nvec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\nvec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\ncolor /= texture2D(autoExposure, vec2(0.5)).r;\n#endif\ncolor = czm_acesTonemapping(color);\ncolor = czm_inverseGamma(color);\ngl_FragColor = vec4(color, fragmentColor.a);\n}\n",AmbientOcclusionGenerate="uniform sampler2D randomTexture;\nuniform sampler2D depthTexture;\nuniform float intensity;\nuniform float bias;\nuniform float lengthCap;\nuniform float stepSize;\nuniform float frustumLength;\nvarying vec2 v_textureCoordinates;\nvec4 clipToEye(vec2 uv, float depth)\n{\nvec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\nvec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);\nposEC = posEC / posEC.w;\nreturn posEC;\n}\nvec3 getNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize)\n{\nvec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU);\nvec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD);\nvec4 posInCameraLeft = clipToEye(v_textureCoordinates - vec2(pixelSize.x, 0.0), depthL);\nvec4 posInCameraRight = clipToEye(v_textureCoordinates + vec2(pixelSize.x, 0.0), depthR);\nvec3 up = posInCamera.xyz - posInCameraUp.xyz;\nvec3 down = posInCameraDown.xyz - posInCamera.xyz;\nvec3 left = posInCamera.xyz - posInCameraLeft.xyz;\nvec3 right = posInCameraRight.xyz - posInCamera.xyz;\nvec3 DX = length(left) < length(right) ? left : right;\nvec3 DY = length(up) < length(down) ? up : down;\nreturn normalize(cross(DY, DX));\n}\nvoid main(void)\n{\nfloat depth = czm_readDepth(depthTexture, v_textureCoordinates);\nvec4 posInCamera = clipToEye(v_textureCoordinates, depth);\nif (posInCamera.z > frustumLength)\n{\ngl_FragColor = vec4(1.0);\nreturn;\n}\nvec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\nfloat depthU = czm_readDepth(depthTexture, v_textureCoordinates - vec2(0.0, pixelSize.y));\nfloat depthD = czm_readDepth(depthTexture, v_textureCoordinates + vec2(0.0, pixelSize.y));\nfloat depthL = czm_readDepth(depthTexture, v_textureCoordinates - vec2(pixelSize.x, 0.0));\nfloat depthR = czm_readDepth(depthTexture, v_textureCoordinates + vec2(pixelSize.x, 0.0));\nvec3 normalInCamera = getNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize);\nfloat ao = 0.0;\nvec2 sampleDirection = vec2(1.0, 0.0);\nfloat gapAngle = 90.0 * czm_radiansPerDegree;\nfloat randomVal = texture2D(randomTexture, v_textureCoordinates).x;\nfor (int i = 0; i < 4; i++)\n{\nfloat newGapAngle = gapAngle * (float(i) + randomVal);\nfloat cosVal = cos(newGapAngle);\nfloat sinVal = sin(newGapAngle);\nvec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);\nfloat localAO = 0.0;\nfloat localStepSize = stepSize;\nfor (int j = 0; j < 6; j++)\n{\nvec2 newCoords = v_textureCoordinates + rotatedSampleDirection * localStepSize * pixelSize;\nif(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0)\n{\nbreak;\n}\nfloat stepDepthInfo = czm_readDepth(depthTexture, newCoords);\nvec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo);\nvec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz;\nfloat len = length(diffVec);\nif (len > lengthCap)\n{\nbreak;\n}\nfloat dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 );\nfloat weight = len / lengthCap;\nweight = 1.0 - weight * weight;\nif (dotVal < bias)\n{\ndotVal = 0.0;\n}\nlocalAO = max(localAO, dotVal * weight);\nlocalStepSize += stepSize;\n}\nao += localAO;\n}\nao /= 4.0;\nao = 1.0 - clamp(ao, 0.0, 1.0);\nao = pow(ao, intensity);\ngl_FragColor = vec4(vec3(ao), 1.0);\n}\n",AmbientOcclusionModulate="uniform sampler2D colorTexture;\nuniform sampler2D ambientOcclusionTexture;\nuniform bool ambientOcclusionOnly;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec3 color = texture2D(colorTexture, v_textureCoordinates).rgb;\nvec3 ao = texture2D(ambientOcclusionTexture, v_textureCoordinates).rgb;\ngl_FragColor.rgb = ambientOcclusionOnly ? ao : ao * color;\n}\n",BlackAndWhite="uniform sampler2D colorTexture;\nuniform float gradations;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\n#ifdef CZM_SELECTED_FEATURE\nif (czm_selected()) {\ngl_FragColor = vec4(rgb, 1.0);\nreturn;\n}\n#endif\nfloat luminance = czm_luminance(rgb);\nfloat darkness = luminance * gradations;\ndarkness = (darkness - fract(darkness)) / gradations;\ngl_FragColor = vec4(vec3(darkness), 1.0);\n}\n",BloomComposite="uniform sampler2D colorTexture;\nuniform sampler2D bloomTexture;\nuniform bool glowOnly;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec4 color = texture2D(colorTexture, v_textureCoordinates);\n#ifdef CZM_SELECTED_FEATURE\nif (czm_selected()) {\ngl_FragColor = color;\nreturn;\n}\n#endif\nvec4 bloom = texture2D(bloomTexture, v_textureCoordinates);\ngl_FragColor = glowOnly ? bloom : bloom + color;\n}\n",Brightness="uniform sampler2D colorTexture;\nuniform float brightness;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\nvec3 target = vec3(0.0);\ngl_FragColor = vec4(mix(target, rgb, brightness), 1.0);\n}\n",ContrastBias="uniform sampler2D colorTexture;\nuniform float contrast;\nuniform float brightness;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec3 sceneColor = texture2D(colorTexture, v_textureCoordinates).xyz;\nsceneColor = czm_RGBToHSB(sceneColor);\nsceneColor.z += brightness;\nsceneColor = czm_HSBToRGB(sceneColor);\nfloat factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));\nsceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);\ngl_FragColor = vec4(sceneColor, 1.0);\n}\n",DepthOfField="uniform sampler2D colorTexture;\nuniform sampler2D blurTexture;\nuniform sampler2D depthTexture;\nuniform float focalDistance;\nvarying vec2 v_textureCoordinates;\nvec4 toEye(vec2 uv, float depth)\n{\nvec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\nvec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);\nposInCamera = posInCamera / posInCamera.w;\nreturn posInCamera;\n}\nfloat computeDepthBlur(float depth)\n{\nfloat f;\nif (depth < focalDistance)\n{\nf = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);\n}\nelse\n{\nf = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);\nf = pow(f, 0.1);\n}\nf *= f;\nf = clamp(f, 0.0, 1.0);\nreturn pow(f, 0.5);\n}\nvoid main(void)\n{\nfloat depth = czm_readDepth(depthTexture, v_textureCoordinates);\nvec4 posInCamera = toEye(v_textureCoordinates, depth);\nfloat d = computeDepthBlur(-posInCamera.z);\ngl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), texture2D(blurTexture, v_textureCoordinates), d);\n}\n",DepthView="uniform sampler2D depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nfloat depth = czm_readDepth(depthTexture, v_textureCoordinates);\ngl_FragColor = vec4(vec3(depth), 1.0);\n}\n",EdgeDetection="uniform sampler2D depthTexture;\nuniform float length;\nuniform vec4 color;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nfloat directions[3];\ndirections[0] = -1.0;\ndirections[1] = 0.0;\ndirections[2] = 1.0;\nfloat scalars[3];\nscalars[0] = 3.0;\nscalars[1] = 10.0;\nscalars[2] = 3.0;\nfloat padx = czm_pixelRatio / czm_viewport.z;\nfloat pady = czm_pixelRatio / czm_viewport.w;\n#ifdef CZM_SELECTED_FEATURE\nbool selected = false;\nfor (int i = 0; i < 3; ++i)\n{\nfloat dir = directions[i];\nselected = selected || czm_selected(vec2(-padx, dir * pady));\nselected = selected || czm_selected(vec2(padx, dir * pady));\nselected = selected || czm_selected(vec2(dir * padx, -pady));\nselected = selected || czm_selected(vec2(dir * padx, pady));\nif (selected)\n{\nbreak;\n}\n}\nif (!selected)\n{\ngl_FragColor = vec4(color.rgb, 0.0);\nreturn;\n}\n#endif\nfloat horizEdge = 0.0;\nfloat vertEdge = 0.0;\nfor (int i = 0; i < 3; ++i)\n{\nfloat dir = directions[i];\nfloat scale = scalars[i];\nhorizEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;\nhorizEdge += texture2D(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;\nvertEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;\nvertEdge += texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;\n}\nfloat len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\ngl_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);\n}\n",FilmicTonemapping="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\nvoid main()\n{\nvec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\nvec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\nfloat exposure = texture2D(autoExposure, vec2(0.5)).r;\ncolor /= exposure;\n#endif\nconst float A = 0.22;\nconst float B = 0.30;\nconst float C = 0.10;\nconst float D = 0.20;\nconst float E = 0.01;\nconst float F = 0.30;\nconst float white = 11.2;\nvec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;\nfloat w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;\nc = czm_inverseGamma(c / w);\ngl_FragColor = vec4(c, fragmentColor.a);\n}\n",FXAA="varying vec2 v_textureCoordinates;\nuniform sampler2D colorTexture;\nconst float fxaaQualitySubpix = 0.5;\nconst float fxaaQualityEdgeThreshold = 0.125;\nconst float fxaaQualityEdgeThresholdMin = 0.0833;\nvoid main()\n{\nvec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw;\nvec4 color = FxaaPixelShader(\nv_textureCoordinates,\ncolorTexture,\nfxaaQualityRcpFrame,\nfxaaQualitySubpix,\nfxaaQualityEdgeThreshold,\nfxaaQualityEdgeThresholdMin);\nfloat alpha = texture2D(colorTexture, v_textureCoordinates).a;\ngl_FragColor = vec4(color.rgb, alpha);\n}\n",GaussianBlur1D="#define SAMPLES 8\nuniform float delta;\nuniform float sigma;\nuniform float direction;\nuniform sampler2D colorTexture;\n#ifdef USE_STEP_SIZE\nuniform float stepSize;\n#else\nuniform vec2 step;\n#endif\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nvec2 st = v_textureCoordinates;\nvec2 dir = vec2(1.0 - direction, direction);\n#ifdef USE_STEP_SIZE\nvec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));\n#else\nvec2 step = step;\n#endif\nvec3 g;\ng.x = 1.0 / (sqrt(czm_twoPi) * sigma);\ng.y = exp((-0.5 * delta * delta) / (sigma * sigma));\ng.z = g.y * g.y;\nvec4 result = texture2D(colorTexture, st) * g.x;\nfor (int i = 1; i < SAMPLES; ++i)\n{\ng.xy *= g.yz;\nvec2 offset = float(i) * dir * step;\nresult += texture2D(colorTexture, st - offset) * g.x;\nresult += texture2D(colorTexture, st + offset) * g.x;\n}\ngl_FragColor = result;\n}\n",LensFlare="uniform sampler2D colorTexture;\nuniform sampler2D dirtTexture;\nuniform sampler2D starTexture;\nuniform vec2 dirtTextureDimensions;\nuniform float distortion;\nuniform float ghostDispersal;\nuniform float haloWidth;\nuniform float dirtAmount;\nuniform float earthRadius;\nuniform float intensity;\nvarying vec2 v_textureCoordinates;\n#define DISTANCE_TO_SPACE 6500000.0\nvec4 getNDCFromWC(vec3 WC, float earthRadius)\n{\nvec4 positionEC = czm_view * vec4(WC, 1.0);\npositionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);\nvec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\nreturn czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);\n}\nfloat isInEarth(vec2 texcoord, vec2 sceneSize)\n{\nvec2 NDC = texcoord * 2.0 - 1.0;\nvec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);\nvec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);\nNDC.xy -= earthPosSC.xy;\nfloat X = abs(NDC.x) * sceneSize.x;\nfloat Y = abs(NDC.y) * sceneSize.y;\nreturn clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));\n}\nvec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)\n{\nvec2 sceneSize = czm_viewport.zw;\nvec3 color;\nif(isSpace)\n{\ncolor.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r;\ncolor.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g;\ncolor.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b;\n}\nelse\n{\ncolor.r = texture2D(tex, texcoord + direction * distortion.r).r;\ncolor.g = texture2D(tex, texcoord + direction * distortion.g).g;\ncolor.b = texture2D(tex, texcoord + direction * distortion.b).b;\n}\nreturn vec4(clamp(color, 0.0, 1.0), 0.0);\n}\nvoid main(void)\n{\nvec4 originalColor = texture2D(colorTexture, v_textureCoordinates);\nvec3 rgb = originalColor.rgb;\nbool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;\nvec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);\nvec4 sunPositionEC = czm_view * sunPos;\nvec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);\nsunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);\nif(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))\n{\ngl_FragColor = originalColor;\nreturn;\n}\nvec2 texcoord = vec2(1.0) - v_textureCoordinates;\nvec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\nvec2 invPixelSize = 1.0 / pixelSize;\nvec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);\nvec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;\nvec3 direction = normalize(vec3(ghostVec, 0.0));\nvec4 result = vec4(0.0);\nvec4 ghost = vec4(0.0);\nfor (int i = 0; i < 4; ++i)\n{\nvec2 offset = fract(texcoord + ghostVec * float(i));\nghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);\n}\nresult += ghost;\nvec2 haloVec = normalize(ghostVec) * haloWidth;\nfloat weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\nweightForHalo = pow(1.0 - weightForHalo, 5.0);\nresult += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;\nvec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;\nif (dirtTexCoords.x > 1.0)\n{\ndirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x);\n}\nif (dirtTexCoords.y > 1.0)\n{\ndirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y);\n}\nresult += dirtAmount * texture2D(dirtTexture, dirtTexCoords);\nfloat camrot = czm_view[0].z + czm_view[1].y;\nfloat cosValue = cos(camrot);\nfloat sinValue = sin(camrot);\nmat3 rotation = mat3(\ncosValue, -sinValue, 0.0,\nsinValue, cosValue, 0.0,\n0.0, 0.0, 1.0\n);\nvec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);\nvec3 st2 = vec3((rotation * st1).xy, 1.0);\nvec3 st3 = st2 * 0.5 + vec3(0.5);\nvec2 lensStarTexcoord = st3.xy;\nfloat weightForLensFlare = length(vec3(sunPos.xy, 0.0));\nfloat oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);\nif (!isSpace)\n{\nresult *= oneMinusWeightForLensFlare * intensity * 0.2;\n}\nelse\n{\nresult *= oneMinusWeightForLensFlare * intensity;\nresult *= texture2D(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;\n}\nresult += texture2D(colorTexture, v_textureCoordinates);\ngl_FragColor = result;\n}\n",ModifiedReinhardTonemapping="uniform sampler2D colorTexture;\nuniform vec3 white;\nvarying vec2 v_textureCoordinates;\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\nvoid main()\n{\nvec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\nvec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\nfloat exposure = texture2D(autoExposure, vec2(0.5)).r;\ncolor /= exposure;\n#endif\ncolor = (color * (1.0 + color / white)) / (1.0 + color);\ncolor = czm_inverseGamma(color);\ngl_FragColor = vec4(color, fragmentColor.a);\n}\n",NightVision="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\nfloat rand(vec2 co)\n{\nreturn fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);\n}\nvoid main(void)\n{\nfloat noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;\nvec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\nvec3 green = vec3(0.0, 1.0, 0.0);\ngl_FragColor = vec4((noiseValue + rgb) * green, 1.0);\n}\n",ReinhardTonemapping="uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\nvoid main()\n{\nvec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\nvec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\nfloat exposure = texture2D(autoExposure, vec2(0.5)).r;\ncolor /= exposure;\n#endif\ncolor = color / (1.0 + color);\ncolor = czm_inverseGamma(color);\ngl_FragColor = vec4(color, fragmentColor.a);\n}\n",Silhouette="uniform sampler2D colorTexture;\nuniform sampler2D silhouetteTexture;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec4 silhouetteColor = texture2D(silhouetteTexture, v_textureCoordinates);\nvec4 color = texture2D(colorTexture, v_textureCoordinates);\ngl_FragColor = mix(color, silhouetteColor, silhouetteColor.a);\n}\n",FXAA3_11="#if (FXAA_QUALITY_PRESET == 10)\n#define FXAA_QUALITY_PS 3\n#define FXAA_QUALITY_P0 1.5\n#define FXAA_QUALITY_P1 3.0\n#define FXAA_QUALITY_P2 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 11)\n#define FXAA_QUALITY_PS 4\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 3.0\n#define FXAA_QUALITY_P3 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 12)\n#define FXAA_QUALITY_PS 5\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 4.0\n#define FXAA_QUALITY_P4 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 13)\n#define FXAA_QUALITY_PS 6\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 4.0\n#define FXAA_QUALITY_P5 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 14)\n#define FXAA_QUALITY_PS 7\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 4.0\n#define FXAA_QUALITY_P6 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 15)\n#define FXAA_QUALITY_PS 8\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 4.0\n#define FXAA_QUALITY_P7 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 20)\n#define FXAA_QUALITY_PS 3\n#define FXAA_QUALITY_P0 1.5\n#define FXAA_QUALITY_P1 2.0\n#define FXAA_QUALITY_P2 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 21)\n#define FXAA_QUALITY_PS 4\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 22)\n#define FXAA_QUALITY_PS 5\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 23)\n#define FXAA_QUALITY_PS 6\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 24)\n#define FXAA_QUALITY_PS 7\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 3.0\n#define FXAA_QUALITY_P6 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 25)\n#define FXAA_QUALITY_PS 8\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 4.0\n#define FXAA_QUALITY_P7 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 26)\n#define FXAA_QUALITY_PS 9\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 2.0\n#define FXAA_QUALITY_P7 4.0\n#define FXAA_QUALITY_P8 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 27)\n#define FXAA_QUALITY_PS 10\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 2.0\n#define FXAA_QUALITY_P7 2.0\n#define FXAA_QUALITY_P8 4.0\n#define FXAA_QUALITY_P9 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 28)\n#define FXAA_QUALITY_PS 11\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 2.0\n#define FXAA_QUALITY_P7 2.0\n#define FXAA_QUALITY_P8 2.0\n#define FXAA_QUALITY_P9 4.0\n#define FXAA_QUALITY_P10 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 29)\n#define FXAA_QUALITY_PS 12\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.5\n#define FXAA_QUALITY_P2 2.0\n#define FXAA_QUALITY_P3 2.0\n#define FXAA_QUALITY_P4 2.0\n#define FXAA_QUALITY_P5 2.0\n#define FXAA_QUALITY_P6 2.0\n#define FXAA_QUALITY_P7 2.0\n#define FXAA_QUALITY_P8 2.0\n#define FXAA_QUALITY_P9 2.0\n#define FXAA_QUALITY_P10 4.0\n#define FXAA_QUALITY_P11 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 39)\n#define FXAA_QUALITY_PS 12\n#define FXAA_QUALITY_P0 1.0\n#define FXAA_QUALITY_P1 1.0\n#define FXAA_QUALITY_P2 1.0\n#define FXAA_QUALITY_P3 1.0\n#define FXAA_QUALITY_P4 1.0\n#define FXAA_QUALITY_P5 1.5\n#define FXAA_QUALITY_P6 2.0\n#define FXAA_QUALITY_P7 2.0\n#define FXAA_QUALITY_P8 2.0\n#define FXAA_QUALITY_P9 2.0\n#define FXAA_QUALITY_P10 4.0\n#define FXAA_QUALITY_P11 8.0\n#endif\n#define FxaaBool bool\n#define FxaaFloat float\n#define FxaaFloat2 vec2\n#define FxaaFloat3 vec3\n#define FxaaFloat4 vec4\n#define FxaaHalf float\n#define FxaaHalf2 vec2\n#define FxaaHalf3 vec3\n#define FxaaHalf4 vec4\n#define FxaaInt2 vec2\n#define FxaaTex sampler2D\n#define FxaaSat(x) clamp(x, 0.0, 1.0)\n#define FxaaTexTop(t, p) texture2D(t, p)\n#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r))\nFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\nFxaaFloat4 FxaaPixelShader(\nFxaaFloat2 pos,\nFxaaTex tex,\nFxaaFloat2 fxaaQualityRcpFrame,\nFxaaFloat fxaaQualitySubpix,\nFxaaFloat fxaaQualityEdgeThreshold,\nFxaaFloat fxaaQualityEdgeThresholdMin\n) {\nFxaaFloat2 posM;\nposM.x = pos.x;\nposM.y = pos.y;\nFxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n#define lumaM rgbyM.y\nFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\nFxaaFloat maxSM = max(lumaS, lumaM);\nFxaaFloat minSM = min(lumaS, lumaM);\nFxaaFloat maxESM = max(lumaE, maxSM);\nFxaaFloat minESM = min(lumaE, minSM);\nFxaaFloat maxWN = max(lumaN, lumaW);\nFxaaFloat minWN = min(lumaN, lumaW);\nFxaaFloat rangeMax = max(maxWN, maxESM);\nFxaaFloat rangeMin = min(minWN, minESM);\nFxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\nFxaaFloat range = rangeMax - rangeMin;\nFxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\nFxaaBool earlyExit = range < rangeMaxClamped;\nif(earlyExit)\nreturn rgbyM;\nFxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\nFxaaFloat lumaNS = lumaN + lumaS;\nFxaaFloat lumaWE = lumaW + lumaE;\nFxaaFloat subpixRcpRange = 1.0/range;\nFxaaFloat subpixNSWE = lumaNS + lumaWE;\nFxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\nFxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\nFxaaFloat lumaNESE = lumaNE + lumaSE;\nFxaaFloat lumaNWNE = lumaNW + lumaNE;\nFxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\nFxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\nFxaaFloat lumaNWSW = lumaNW + lumaSW;\nFxaaFloat lumaSWSE = lumaSW + lumaSE;\nFxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\nFxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\nFxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\nFxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\nFxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\nFxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\nFxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\nFxaaFloat lengthSign = fxaaQualityRcpFrame.x;\nFxaaBool horzSpan = edgeHorz >= edgeVert;\nFxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\nif(!horzSpan) lumaN = lumaW;\nif(!horzSpan) lumaS = lumaE;\nif(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\nFxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\nFxaaFloat gradientN = lumaN - lumaM;\nFxaaFloat gradientS = lumaS - lumaM;\nFxaaFloat lumaNN = lumaN + lumaM;\nFxaaFloat lumaSS = lumaS + lumaM;\nFxaaBool pairN = abs(gradientN) >= abs(gradientS);\nFxaaFloat gradient = max(abs(gradientN), abs(gradientS));\nif(pairN) lengthSign = -lengthSign;\nFxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\nFxaaFloat2 posB;\nposB.x = posM.x;\nposB.y = posM.y;\nFxaaFloat2 offNP;\noffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\noffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\nif(!horzSpan) posB.x += lengthSign * 0.5;\nif( horzSpan) posB.y += lengthSign * 0.5;\nFxaaFloat2 posN;\nposN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\nposN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\nFxaaFloat2 posP;\nposP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\nposP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\nFxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\nFxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\nFxaaFloat subpixE = subpixC * subpixC;\nFxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\nif(!pairN) lumaNN = lumaSS;\nFxaaFloat gradientScaled = gradient * 1.0/4.0;\nFxaaFloat lumaMM = lumaM - lumaNN * 0.5;\nFxaaFloat subpixF = subpixD * subpixE;\nFxaaBool lumaMLTZero = lumaMM < 0.0;\nlumaEndN -= lumaNN * 0.5;\nlumaEndP -= lumaNN * 0.5;\nFxaaBool doneN = abs(lumaEndN) >= gradientScaled;\nFxaaBool doneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\nFxaaBool doneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\n#if (FXAA_QUALITY_PS > 3)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\n#if (FXAA_QUALITY_PS > 4)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\n#if (FXAA_QUALITY_PS > 5)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\n#if (FXAA_QUALITY_PS > 6)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\n#if (FXAA_QUALITY_PS > 7)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\n#if (FXAA_QUALITY_PS > 8)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\n#if (FXAA_QUALITY_PS > 9)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\n#if (FXAA_QUALITY_PS > 10)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\n#if (FXAA_QUALITY_PS > 11)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\n#if (FXAA_QUALITY_PS > 12)\nif(doneNP) {\nif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\nif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\nif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\nif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\ndoneN = abs(lumaEndN) >= gradientScaled;\ndoneP = abs(lumaEndP) >= gradientScaled;\nif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\nif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\ndoneNP = (!doneN) || (!doneP);\nif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\nif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\n#endif\n}\nFxaaFloat dstN = posM.x - posN.x;\nFxaaFloat dstP = posP.x - posM.x;\nif(!horzSpan) dstN = posM.y - posN.y;\nif(!horzSpan) dstP = posP.y - posM.y;\nFxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\nFxaaFloat spanLength = (dstP + dstN);\nFxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\nFxaaFloat spanLengthRcp = 1.0/spanLength;\nFxaaBool directionN = dstN < dstP;\nFxaaFloat dst = min(dstN, dstP);\nFxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\nFxaaFloat subpixG = subpixF * subpixF;\nFxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\nFxaaFloat subpixH = subpixG * fxaaQualitySubpix;\nFxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\nFxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\nif(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\nif( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\nreturn FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\n}\n";function PostProcessStageComposite(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._stages=e.stages,this._inputPreviousStageTexture=defaultValue(e.inputPreviousStageTexture,!0);var t=e.name;defined(t)||(t=createGuid()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}function isSelectedTextureDirty(e){var t=defined(e._selected)?e._selected.length:0,i=defined(e._parentSelected)?e._parentSelected:0,r=(r=e._selected!==e._selectedShadow||t!==e._selectedLength)||e._parentSelected!==e._parentSelectedShadow||i!==e._parentSelectedLength;if(defined(e._selected)&&defined(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):defined(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!r&&defined(e._combinedSelected)){if(!defined(e._combinedSelectedShadow))return!0;for(var t=e._combinedSelected.length,n=0;n<t;++n)if(e._combinedSelected[n]!==e._combinedSelectedShadow[n])return!0}return r}Object.defineProperties(PostProcessStageComposite.prototype,{ready:{get:function(){for(var e=this._stages,t=e.length,i=0;i<t;++i)if(!e[i].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){for(var t=this._stages,i=t.length,r=0;r<i;++r)t[r].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}}),PostProcessStageComposite.prototype._isSupported=function(e){for(var t=this._stages,i=t.length,r=0;r<i;++r)if(!t[r]._isSupported(e))return!1;return!0},PostProcessStageComposite.prototype.get=function(e){return this._stages[e]},PostProcessStageComposite.prototype.update=function(e,t){this._selectedDirty=isSelectedTextureDirty(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=defined(this._selected)?this._selected.length:0,this._parentSelectedLength=defined(this._parentSelected)?this._parentSelected.length:0;for(var i=this._stages,r=i.length,n=0;n<r;++n){var a=i[n];this._selectedDirty&&(a.parentSelected=this._combinedSelected),a.update(e,t)}},PostProcessStageComposite.prototype.isDestroyed=function(){return!1},PostProcessStageComposite.prototype.destroy=function(){for(var e=this._stages,t=e.length,i=0;i<t;++i)e[i].destroy();return destroyObject(this)};var PostProcessStageLibrary={};function createBlur(e){var t="#define USE_STEP_SIZE\n"+GaussianBlur1D,r=new PostProcessStage({name:e+"_x_direction",fragmentShader:t,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:PostProcessStageSampleMode.LINEAR}),n=new PostProcessStage({name:e+"_y_direction",fragmentShader:t,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:PostProcessStageSampleMode.LINEAR}),t={};return Object.defineProperties(t,{delta:{get:function(){return r.uniforms.delta},set:function(e){var t=r.uniforms,i=n.uniforms;t.delta=i.delta=e}},sigma:{get:function(){return r.uniforms.sigma},set:function(e){var t=r.uniforms,i=n.uniforms;t.sigma=i.sigma=e}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(e){var t=r.uniforms,i=n.uniforms;t.stepSize=i.stepSize=e}}}),new PostProcessStageComposite({name:e,stages:[r,n],uniforms:t})}function getSilhouetteEdgeDetection(e){if(!defined(e))return PostProcessStageLibrary.createEdgeDetectionStage();for(var t=new PostProcessStageComposite({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),i={},r="",n="",a=0;a<e.length;++a)r+="uniform sampler2D edgeTexture"+a+"; \n",n+=" vec4 edge"+a+" = texture2D(edgeTexture"+a+", v_textureCoordinates); \n if (edge"+a+".a > 0.0) \n { \n color = edge"+a+"; \n break; \n } \n",i["edgeTexture"+a]=e[a].name;return new PostProcessStageComposite({name:"czm_edge_detection_composite",stages:[t,new PostProcessStage({name:"czm_edge_detection_combine",fragmentShader:r+"varying vec2 v_textureCoordinates; \nvoid main() { \n vec4 color = vec4(0.0); \n for (int i = 0; i < "+e.length+"; i++) \n { \n"+n+" } \n gl_FragColor = color; \n} \n",uniforms:i})]})}PostProcessStageLibrary.createBlurStage=function(){return createBlur("czm_blur")},PostProcessStageLibrary.createDepthOfFieldStage=function(){var t=createBlur("czm_depth_of_field_blur"),i=new PostProcessStage({name:"czm_depth_of_field_composite",fragmentShader:DepthOfField,uniforms:{focalDistance:5,blurTexture:t.name}}),e={};return Object.defineProperties(e,{focalDistance:{get:function(){return i.uniforms.focalDistance},set:function(e){i.uniforms.focalDistance=e}},delta:{get:function(){return t.uniforms.delta},set:function(e){t.uniforms.delta=e}},sigma:{get:function(){return t.uniforms.sigma},set:function(e){t.uniforms.sigma=e}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(e){t.uniforms.stepSize=e}}}),new PostProcessStageComposite({name:"czm_depth_of_field",stages:[t,i],inputPreviousStageTexture:!1,uniforms:e})},PostProcessStageLibrary.isDepthOfFieldSupported=function(e){return e.context.depthTexture},PostProcessStageLibrary.createEdgeDetectionStage=function(){return new PostProcessStage({name:"czm_edge_detection_"+createGuid(),fragmentShader:EdgeDetection,uniforms:{length:.25,color:Color.clone(Color.BLACK)}})},PostProcessStageLibrary.isEdgeDetectionSupported=function(e){return e.context.depthTexture},PostProcessStageLibrary.createSilhouetteStage=function(e){e=getSilhouetteEdgeDetection(e);return new PostProcessStageComposite({name:"czm_silhouette",stages:[e,new PostProcessStage({name:"czm_silhouette_color_edges",fragmentShader:Silhouette,uniforms:{silhouetteTexture:e.name}})],inputPreviousStageTexture:!1,uniforms:e.uniforms})},PostProcessStageLibrary.isSilhouetteSupported=function(e){return e.context.depthTexture},PostProcessStageLibrary.createBloomStage=function(){var t=new PostProcessStage({name:"czm_bloom_contrast_bias",fragmentShader:ContrastBias,uniforms:{contrast:128,brightness:-.3}}),i=createBlur("czm_bloom_blur"),e=new PostProcessStageComposite({name:"czm_bloom_contrast_bias_blur",stages:[t,i]}),r=new PostProcessStage({name:"czm_bloom_generate_composite",fragmentShader:BloomComposite,uniforms:{glowOnly:!1,bloomTexture:e.name}}),n={};return Object.defineProperties(n,{glowOnly:{get:function(){return r.uniforms.glowOnly},set:function(e){r.uniforms.glowOnly=e}},contrast:{get:function(){return t.uniforms.contrast},set:function(e){t.uniforms.contrast=e}},brightness:{get:function(){return t.uniforms.brightness},set:function(e){t.uniforms.brightness=e}},delta:{get:function(){return i.uniforms.delta},set:function(e){i.uniforms.delta=e}},sigma:{get:function(){return i.uniforms.sigma},set:function(e){i.uniforms.sigma=e}},stepSize:{get:function(){return i.uniforms.stepSize},set:function(e){i.uniforms.stepSize=e}}}),new PostProcessStageComposite({name:"czm_bloom",stages:[e,r],inputPreviousStageTexture:!1,uniforms:n})},PostProcessStageLibrary.createAmbientOcclusionStage=function(){var t=new PostProcessStage({name:"czm_ambient_occlusion_generate",fragmentShader:AmbientOcclusionGenerate,uniforms:{intensity:3,bias:.1,lengthCap:.26,stepSize:1.95,frustumLength:1e3,randomTexture:void 0}}),i=createBlur("czm_ambient_occlusion_blur");i.uniforms.stepSize=.86;var e=new PostProcessStageComposite({name:"czm_ambient_occlusion_generate_blur",stages:[t,i]}),r=new PostProcessStage({name:"czm_ambient_occlusion_composite",fragmentShader:AmbientOcclusionModulate,uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:e.name}}),n={};return Object.defineProperties(n,{intensity:{get:function(){return t.uniforms.intensity},set:function(e){t.uniforms.intensity=e}},bias:{get:function(){return t.uniforms.bias},set:function(e){t.uniforms.bias=e}},lengthCap:{get:function(){return t.uniforms.lengthCap},set:function(e){t.uniforms.lengthCap=e}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(e){t.uniforms.stepSize=e}},frustumLength:{get:function(){return t.uniforms.frustumLength},set:function(e){t.uniforms.frustumLength=e}},randomTexture:{get:function(){return t.uniforms.randomTexture},set:function(e){t.uniforms.randomTexture=e}},delta:{get:function(){return i.uniforms.delta},set:function(e){i.uniforms.delta=e}},sigma:{get:function(){return i.uniforms.sigma},set:function(e){i.uniforms.sigma=e}},blurStepSize:{get:function(){return i.uniforms.stepSize},set:function(e){i.uniforms.stepSize=e}},ambientOcclusionOnly:{get:function(){return r.uniforms.ambientOcclusionOnly},set:function(e){r.uniforms.ambientOcclusionOnly=e}}}),new PostProcessStageComposite({name:"czm_ambient_occlusion",stages:[e,r],inputPreviousStageTexture:!1,uniforms:n})},PostProcessStageLibrary.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var fxaaFS="#define FXAA_QUALITY_PRESET 39 \n"+FXAA3_11+"\n"+FXAA;function PostProcessStageTextureCache(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function getLastStageName(e){for(;defined(e.length);)e=e.get(e.length-1);return e.name}function getStageDependencies(e,t,i,r,n){if(!r.enabled||!r._isSupported(t))return n;var a=i[r.name]={};defined(n)&&(a[getLastStageName(e.getStageByName(n))]=!0);var o=r.uniforms;if(defined(o))for(var s=Object.getOwnPropertyNames(o),l=s.length,c=0;c<l;++c){var u=o[s[c]];"string"!=typeof u||defined(u=e.getStageByName(u))&&(a[getLastStageName(u)]=!0)}return r.name}function getCompositeDependencies(e,t,i,r,n){if(defined(r.enabled)&&!r.enabled||defined(r._isSupported)&&!r._isSupported(t))return n;for(var a,o=n,s=!defined(r.inputPreviousStageTexture)||r.inputPreviousStageTexture,l=n,c=r.length,u=0;u<c;++u){var d=r.get(u),l=(defined(d.length)?getCompositeDependencies:getStageDependencies)(e,t,i,d,n);s&&(n=l)}if(s)for(a=1;a<c;++a)defined(i[h=getLastStageName(r.get(a))])||(i[h]={}),i[h][o]=!0;else for(a=1;a<c;++a)for(var h,p=i[h=getLastStageName(r.get(a))],m=0;m<a;++m)p[getLastStageName(r.get(m))]=!0;return l}function getDependencies(e,t){var i,r,n,a,o={};return defined(e.ambientOcclusion)?(a=e.ambientOcclusion,i=e.bloom,r=e._tonemapping,n=e.fxaa,a=getCompositeDependencies(e,t,o,a,void 0),a=getStageDependencies(e,t,o,r,a=getCompositeDependencies(e,t,o,i,a)),getStageDependencies(e,t,o,n,a=getCompositeDependencies(e,t,o,e,a))):getCompositeDependencies(e,t,o,e,void 0),o}function getFramebuffer(e,t,i){for(var r,n=e._collection.getStageByName(t),a=n._textureScale,o=n._forcePowerOfTwo,s=n._pixelFormat,l=n._pixelDatatype,c=n._clearColor,u=e._framebuffers,d=u.length,h=0;h<d;++h)if(a===(r=u[h]).textureScale&&o===r.forcePowerOfTwo&&s===r.pixelFormat&&l===r.pixelDatatype&&Color.equals(c,r.clearColor)){for(var p=r.stages,m=p.length,f=!1,g=0;g<m;++g)if(i[p[g]]){f=!0;break}if(!f)break}return defined(r)&&h<d?r.stages.push(t):(r={textureScale:a,forcePowerOfTwo:o,pixelFormat:s,pixelDatatype:l,clearColor:c,stages:[t],buffer:void 0,clear:void 0},u.push(r)),r}function createFramebuffers(e,t){var i,r=getDependencies(e._collection,t);for(i in r)r.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=getFramebuffer(e,i,r[i]))}function releaseResources(e){for(var t=e._framebuffers,i=t.length,r=0;r<i;++r){var n=t[r];n.buffer=n.buffer&&n.buffer.destroy(),n.buffer=void 0}}function updateFramebuffers(e,t){for(var i=e._width,r=e._height,n=e._framebuffers,a=n.length,o=0;o<a;++o){var s=n[o],l=s.textureScale,c=Math.ceil(i*l),u=Math.ceil(r*l),l=Math.min(c,u);s.forcePowerOfTwo&&(u=c=l=!CesiumMath.isPowerOfTwo(l)?CesiumMath.nextPowerOfTwo(l):l),s.buffer=new Framebuffer({context:t,colorTextures:[new Texture({context:t,width:c,height:u,pixelFormat:s.pixelFormat,pixelDatatype:s.pixelDatatype})]}),s.clear=new ClearCommand({color:s.clearColor,framebuffer:s.buffer})}}PostProcessStageLibrary.createFXAAStage=function(){return new PostProcessStage({name:"czm_FXAA",fragmentShader:fxaaFS,sampleMode:PostProcessStageSampleMode.LINEAR})},PostProcessStageLibrary.createAcesTonemappingStage=function(e){e=e?"#define AUTO_EXPOSURE\n":"";return new PostProcessStage({name:"czm_aces",fragmentShader:e+=AcesTonemapping,uniforms:{autoExposure:void 0}})},PostProcessStageLibrary.createFilmicTonemappingStage=function(e){e=e?"#define AUTO_EXPOSURE\n":"";return new PostProcessStage({name:"czm_filmic",fragmentShader:e+=FilmicTonemapping,uniforms:{autoExposure:void 0}})},PostProcessStageLibrary.createReinhardTonemappingStage=function(e){e=e?"#define AUTO_EXPOSURE\n":"";return new PostProcessStage({name:"czm_reinhard",fragmentShader:e+=ReinhardTonemapping,uniforms:{autoExposure:void 0}})},PostProcessStageLibrary.createModifiedReinhardTonemappingStage=function(e){e=e?"#define AUTO_EXPOSURE\n":"";return new PostProcessStage({name:"czm_modified_reinhard",fragmentShader:e+=ModifiedReinhardTonemapping,uniforms:{white:Color.WHITE,autoExposure:void 0}})},PostProcessStageLibrary.createAutoExposureStage=function(){return new AutoExposure},PostProcessStageLibrary.createBlackAndWhiteStage=function(){return new PostProcessStage({name:"czm_black_and_white",fragmentShader:BlackAndWhite,uniforms:{gradations:5}})},PostProcessStageLibrary.createBrightnessStage=function(){return new PostProcessStage({name:"czm_brightness",fragmentShader:Brightness,uniforms:{brightness:.5}})},PostProcessStageLibrary.createNightVisionStage=function(){return new PostProcessStage({name:"czm_night_vision",fragmentShader:NightVision})},PostProcessStageLibrary.createDepthViewStage=function(){return new PostProcessStage({name:"czm_depth_view",fragmentShader:DepthView})},PostProcessStageLibrary.createLensFlareStage=function(){return new PostProcessStage({name:"czm_lens_flare",fragmentShader:LensFlare,uniforms:{dirtTexture:buildModuleUrl("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:buildModuleUrl("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:Ellipsoid.WGS84.maximumRadius}})},PostProcessStageTextureCache.prototype.updateDependencies=function(){this._updateDependencies=!0},PostProcessStageTextureCache.prototype.update=function(e){var t=this._collection,i=this._updateDependencies,r=defined(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),n=defined(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),a=defined(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),o=defined(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),n=!defined(t._activeStages)||0<t._activeStages.length||r||n||a||o;(i||!n&&0<this._framebuffers.length)&&(releaseResources(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),(i||n)&&(0===this._framebuffers.length&&createFramebuffers(this,e),a=e.drawingBufferWidth,o=e.drawingBufferHeight,n=this._width!==a||this._height!==o,(i||n)&&(this._width=a,this._height=o,this._updateDependencies=!1,releaseResources(this),updateFramebuffers(this,e)))},PostProcessStageTextureCache.prototype.clear=function(e){for(var t=this._framebuffers,i=0;i<t.length;++i)t[i].clear.execute(e)},PostProcessStageTextureCache.prototype.getStageByName=function(e){return this._collection.getStageByName(e)},PostProcessStageTextureCache.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)},PostProcessStageTextureCache.prototype.getFramebuffer=function(e){e=this._stageNameToFramebuffer[e];if(defined(e))return e.buffer},PostProcessStageTextureCache.prototype.isDestroyed=function(){return!1},PostProcessStageTextureCache.prototype.destroy=function(){return releaseResources(this),destroyObject(this)};var Tonemapper={REINHARD:0,MODIFIED_REINHARD:1,FILMIC:2,ACES:3,validate:function(e){return e===Tonemapper.REINHARD||e===Tonemapper.MODIFIED_REINHARD||e===Tonemapper.FILMIC||e===Tonemapper.ACES}},Tonemapper$1=Object.freeze(Tonemapper),stackScratch=[];function PostProcessStageCollection(){var e=PostProcessStageLibrary.createFXAAStage(),t=PostProcessStageLibrary.createAmbientOcclusionStage(),i=PostProcessStageLibrary.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=PostProcessStageLibrary.createAutoExposureStage(),this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Tonemapper$1.ACES;var r=this._tonemapping;e.enabled=!1,t.enabled=!1,i.enabled=!1,r.enabled=!1;var n=new PostProcessStageTextureCache(this),a={},o=stackScratch;for(o.push(e,t,i,r);0<o.length;){var s=o.pop();(a[s.name]=s)._textureCache=n;var l=s.length;if(defined(l))for(var c=0;c<l;++c)o.push(s.get(c))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;var u=this;t.uniforms.randomTexture=function(){return u._randomTexture},this._ao=t,this._bloom=i,this._fxaa=e,this._lastLength=void 0,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=a,this._textureCache=n}function removeStages(e){if(e._stagesRemoved){e._stagesRemoved=!1;for(var t=[],i=e._stages,r=i.length,n=0,a=0;n<r;++n){var o=i[n];o&&(o._index=a++,t.push(o))}e._stages=t}}function getOutputTexture(e){for(;defined(e.length);)e=e.get(e.length-1);return e.outputTexture}function execute(e,t,i,r,n){if(defined(e.execute))e.execute(t,i,r,n);else{var a,o=e.length;if(e.inputPreviousStageTexture)for(execute(e.get(0),t,i,r,n),a=1;a<o;++a)execute(e.get(a),t,getOutputTexture(e.get(a-1)),r,n);else for(a=0;a<o;++a)execute(e.get(a),t,i,r,n)}}function QuadtreeTileProvider(){DeveloperError.throwInstantiationError()}function SceneTransitioner(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}Object.defineProperties(PostProcessStageCollection.prototype,{ready:{get:function(){for(var e=!1,t=this._stages,i=t.length-1;0<=i;--i)var r=t[i],e=e||r.ready&&r.enabled;var n=this._fxaa,a=this._ao,o=this._bloom,s=this._tonemapping;return e=(e=(e=(e=e||n.ready&&n.enabled)||a.ready&&a.enabled)||o.ready&&o.enabled)||s.ready&&s.enabled}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return removeStages(this),this._stages.length}},outputTexture:{get:function(){var e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);for(var t=this._stages,i=t.length-1;0<=i;--i){var r=t[i];if(defined(r)&&r.ready&&r.enabled)return this.getOutputTexture(r.name)}e=this._tonemapping;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);e=this._bloom;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);e=this._ao;return e.enabled&&e.ready?this.getOutputTexture(e.name):void 0}},hasSelected:{get:function(){for(var e=arraySlice(this._stages);0<e.length;){var t=e.pop();if(defined(t)){if(defined(t.selected))return!0;var i=t.length;if(defined(i))for(var r=0;r<i;++r)e.push(t.get(r))}}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper!==e){defined(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());var t,i,r=this._autoExposureEnabled;switch(e){case Tonemapper$1.REINHARD:t=PostProcessStageLibrary.createReinhardTonemappingStage(r);break;case Tonemapper$1.MODIFIED_REINHARD:t=PostProcessStageLibrary.createModifiedReinhardTonemappingStage(r);break;case Tonemapper$1.FILMIC:t=PostProcessStageLibrary.createFilmicTonemappingStage(r);break;default:t=PostProcessStageLibrary.createAcesTonemappingStage(r)}r&&(i=this._autoExposure,t.uniforms.autoExposure=function(){return i.outputTexture}),this._tonemapper=e,this._tonemapping=t,defined(this._stageNames)&&((this._stageNames[t.name]=t)._textureCache=this._textureCache),this._textureCacheDirty=!0}}}}),PostProcessStageCollection.prototype.add=function(e){var t=this._stageNames,i=stackScratch;for(i.push(e);0<i.length;){var r=i.pop();(t[r.name]=r)._textureCache=this._textureCache;var n=r.length;if(defined(n))for(var a=0;a<n;++a)i.push(r.get(a))}var o=this._stages;return e._index=o.length,o.push(e),this._textureCacheDirty=!0,e},PostProcessStageCollection.prototype.remove=function(e){if(!this.contains(e))return!1;var t=this._stageNames,i=stackScratch;for(i.push(e);0<i.length;){var r=i.pop();delete t[r.name];var n=r.length;if(defined(n))for(var a=0;a<n;++a)i.push(r.get(a))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0},PostProcessStageCollection.prototype.contains=function(e){return defined(e)&&defined(e._index)&&e._textureCache===this._textureCache},PostProcessStageCollection.prototype.get=function(e){return removeStages(this),this._stages[e]},PostProcessStageCollection.prototype.removeAll=function(){for(var e=this._stages,t=e.length,i=0;i<t;++i)this.remove(e[i]);e.length=0},PostProcessStageCollection.prototype.getStageByName=function(e){return this._stageNames[e]},PostProcessStageCollection.prototype.update=function(e,t,i){removeStages(this);var r=this._activeStages,n=this._activeStages=this._previousActiveStages;this._previousActiveStages=r;var a,o=this._stages,s=n.length=o.length,l=0;for(C=0;C<s;++C)(a=o[C]).ready&&a.enabled&&a._isSupported(e)&&(n[l++]=a);var c=(n.length=l)!==r.length;if(!c)for(C=0;C<l;++C)if(n[C]!==r[C]){c=!0;break}var u=this._ao,d=this._bloom,h=this._autoExposure,p=this._tonemapping,m=this._fxaa;p.enabled=i;var f=u.enabled&&u._isSupported(e),g=d.enabled&&d._isSupported(e),_=p.enabled&&p._isSupported(e),i=m.enabled&&m._isSupported(e);if((c||this._textureCacheDirty||l!==this._lastLength||f!==this._aoEnabled||g!==this._bloomEnabled||_!==this._tonemappingEnabled||i!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._lastLength=l,this._aoEnabled=f,this._bloomEnabled=g,this._tonemappingEnabled=_,this._fxaaEnabled=i,this._textureCacheDirty=!1),defined(this._randomTexture)&&!f&&(this._randomTexture.destroy(),this._randomTexture=void 0),!defined(this._randomTexture)&&f){for(var s=196608,y=new Uint8Array(s),C=0;C<s;C+=3)y[C]=Math.floor(255*Math.random());this._randomTexture=new Texture({context:e,pixelFormat:PixelFormat$1.RGB,pixelDatatype:PixelDatatype$1.UNSIGNED_BYTE,source:{arrayBufferView:y,width:256,height:256},sampler:new Sampler({wrapS:TextureWrap$1.REPEAT,wrapT:TextureWrap$1.REPEAT,minificationFilter:TextureMinificationFilter$1.NEAREST,magnificationFilter:TextureMagnificationFilter$1.NEAREST})})}for(this._textureCache.update(e),m.update(e,t),u.update(e,t),d.update(e,t),p.update(e,t),this._autoExposureEnabled&&h.update(e,t),s=o.length,C=0;C<s;++C)o[C].update(e,t)},PostProcessStageCollection.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)},PostProcessStageCollection.prototype.getOutputTexture=function(e){e=this.getStageByName(e);if(defined(e))return getOutputTexture(e)},PostProcessStageCollection.prototype.execute=function(e,t,i,r){var n=this._activeStages,a=n.length,o=this._fxaa,s=this._ao,l=this._bloom,c=this._autoExposure,u=this._tonemapping,d=s.enabled&&s._isSupported(e),h=l.enabled&&l._isSupported(e),p=this._autoExposureEnabled,m=u.enabled&&u._isSupported(e),f=o.enabled&&o._isSupported(e);if(f||d||h||m||0!==a){t=t;d&&s.ready&&(execute(s,e,t,i,r),t=getOutputTexture(s)),h&&l.ready&&(execute(l,e,t,i,r),t=getOutputTexture(l)),p&&c.ready&&execute(c,e,t,i,r),m&&u.ready&&(execute(u,e,t,i,r),t=getOutputTexture(u));u=t;if(0<a){execute(n[0],e,t,i,r);for(var g=1;g<a;++g)execute(n[g],e,getOutputTexture(n[g-1]),i,r);u=getOutputTexture(n[a-1])}f&&o.ready&&execute(o,e,u,i,r)}},PostProcessStageCollection.prototype.copy=function(e,t){var i;defined(this._copyColorCommand)||((i=this)._copyColorCommand=e.createViewportQuadCommand(PassThrough,{uniformMap:{colorTexture:function(){return i.outputTexture}},owner:this})),this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)},PostProcessStageCollection.prototype.isDestroyed=function(){return!1},PostProcessStageCollection.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),destroyObject(this)},QuadtreeTileProvider.computeDefaultLevelZeroMaximumGeometricError=function(e){return 2*e.ellipsoid.maximumRadius*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))},Object.defineProperties(QuadtreeTileProvider.prototype,{quadtree:{get:DeveloperError.throwInstantiationError,set:DeveloperError.throwInstantiationError},ready:{get:DeveloperError.throwInstantiationError},tilingScheme:{get:DeveloperError.throwInstantiationError},errorEvent:{get:DeveloperError.throwInstantiationError}}),QuadtreeTileProvider.prototype.update=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.beginUpdate=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.endUpdate=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.getLevelMaximumGeometricError=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.loadTile=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.computeTileVisibility=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.showTileThisFrame=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.computeDistanceToTile=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.isDestroyed=DeveloperError.throwInstantiationError,QuadtreeTileProvider.prototype.destroy=DeveloperError.throwInstantiationError,SceneTransitioner.prototype.completeMorph=function(){defined(this._completeMorph)&&this._completeMorph()},SceneTransitioner.prototype.morphTo2D=function(e,t){defined(this._completeMorph)&&this._completeMorph();var i=this._scene;this._previousMode=i.mode,this._morphToOrthographic=i.camera.frustum instanceof OrthographicFrustum,this._previousMode!==SceneMode$1.SCENE2D&&this._previousMode!==SceneMode$1.MORPHING&&(this._scene.morphStart.raiseEvent(this,this._previousMode,SceneMode$1.SCENE2D,!0),i._mode=SceneMode$1.MORPHING,i.camera._setTransform(Matrix4.IDENTITY),this._previousMode===SceneMode$1.COLUMBUS_VIEW?morphFromColumbusViewTo2D(this,e):morphFrom3DTo2D(this,e,t),0===e&&defined(this._completeMorph)&&this._completeMorph())};var scratchToCVPosition=new Cartesian3,scratchToCVDirection=new Cartesian3,scratchToCVUp=new Cartesian3,scratchToCVPosition2D=new Cartesian3,scratchToCVDirection2D=new Cartesian3,scratchToCVUp2D=new Cartesian3,scratchToCVSurfacePosition=new Cartesian3,scratchToCVCartographic=new Cartographic,scratchToCVToENU=new Matrix4,scratchToCVFrustumPerspective=new PerspectiveFrustum,scratchToCVFrustumOrthographic=new OrthographicFrustum,scratchToCVCamera={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};SceneTransitioner.prototype.morphToColumbusView=function(e,t){defined(this._completeMorph)&&this._completeMorph();var i,r,n,a,o,s,l=this._scene;this._previousMode=l.mode,this._previousMode!==SceneMode$1.COLUMBUS_VIEW&&this._previousMode!==SceneMode$1.MORPHING&&(this._scene.morphStart.raiseEvent(this,this._previousMode,SceneMode$1.COLUMBUS_VIEW,!0),l.camera._setTransform(Matrix4.IDENTITY),i=scratchToCVPosition,r=scratchToCVDirection,n=scratchToCVUp,0<e?(i.x=0,i.y=-1,i.z=1,i=Cartesian3.multiplyByScalar(Cartesian3.normalize(i,i),5*t.maximumRadius,i),Cartesian3.negate(Cartesian3.normalize(i,r),r),Cartesian3.cross(Cartesian3.UNIT_X,r,n)):(a=l.camera,this._previousMode===SceneMode$1.SCENE2D?(Cartesian3.clone(a.position,i),i.z=a.frustum.right-a.frustum.left,Cartesian3.negate(Cartesian3.UNIT_Z,r),Cartesian3.clone(Cartesian3.UNIT_Y,n)):(Cartesian3.clone(a.positionWC,i),Cartesian3.clone(a.directionWC,r),Cartesian3.clone(a.upWC,n),o=t.scaleToGeodeticSurface(i,scratchToCVSurfacePosition),o=Transforms.eastNorthUpToFixedFrame(o,t,scratchToCVToENU),Matrix4.inverseTransformation(o,o),l.mapProjection.project(t.cartesianToCartographic(i,scratchToCVCartographic),i),Matrix4.multiplyByPointAsVector(o,r,r),Matrix4.multiplyByPointAsVector(o,n,n))),this._morphToOrthographic?((s=scratchToCVFrustumOrthographic).width=l.camera.frustum.right-l.camera.frustum.left,s.aspectRatio=l.drawingBufferWidth/l.drawingBufferHeight):((s=scratchToCVFrustumPerspective).aspectRatio=l.drawingBufferWidth/l.drawingBufferHeight,s.fov=CesiumMath.toRadians(60)),(o=scratchToCVCamera).position=i,o.direction=r,o.up=n,o.frustum=s,createMorphHandler(this,s=completeColumbusViewCallback(o)),this._previousMode===SceneMode$1.SCENE2D?morphFrom2DToColumbusView(this,e,o,s):(o.position2D=Matrix4.multiplyByPoint(Camera.TRANSFORM_2D,i,scratchToCVPosition2D),o.direction2D=Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,r,scratchToCVDirection2D),o.up2D=Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,n,scratchToCVUp2D),l._mode=SceneMode$1.MORPHING,morphFrom3DToColumbusView(this,e,o,s)),0===e&&defined(this._completeMorph)&&this._completeMorph())};var scratchCVTo3DCamera={position:new Cartesian3,direction:new Cartesian3,up:new Cartesian3,frustum:void 0},scratch2DTo3DFrustumPersp=new PerspectiveFrustum;function createMorphHandler(e,t){var i;e._scene.completeMorphOnUserInput&&(e._morphHandler=new ScreenSpaceEventHandler(e._scene.canvas),i=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)},e._completeMorph=i,e._morphHandler.setInputAction(i,ScreenSpaceEventType$1.LEFT_DOWN),e._morphHandler.setInputAction(i,ScreenSpaceEventType$1.MIDDLE_DOWN),e._morphHandler.setInputAction(i,ScreenSpaceEventType$1.RIGHT_DOWN),e._morphHandler.setInputAction(i,ScreenSpaceEventType$1.WHEEL))}function destroyMorphHandler(e){for(var t=e._currentTweens,i=0;i<t.length;++i)t[i].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}SceneTransitioner.prototype.morphTo3D=function(e,t){defined(this._completeMorph)&&this._completeMorph();var i,r,n=this._scene;this._previousMode=n.mode,this._previousMode!==SceneMode$1.SCENE3D&&this._previousMode!==SceneMode$1.MORPHING&&(this._scene.morphStart.raiseEvent(this,this._previousMode,SceneMode$1.SCENE3D,!0),n._mode=SceneMode$1.MORPHING,n.camera._setTransform(Matrix4.IDENTITY),this._previousMode===SceneMode$1.SCENE2D?morphFrom2DTo3D(this,e,t):(0<e?(i=scratchCVTo3DCamera,Cartesian3.fromDegrees(0,0,5*t.maximumRadius,t,i.position),Cartesian3.negate(i.position,i.direction),Cartesian3.normalize(i.direction,i.direction),Cartesian3.clone(Cartesian3.UNIT_Z,i.up)):i=getColumbusViewTo3DCamera(this,t),(t=n.camera).frustum instanceof OrthographicFrustum?r=t.frustum.clone():((r=scratch2DTo3DFrustumPersp).aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,r.fov=CesiumMath.toRadians(60)),i.frustum=r,createMorphHandler(this,r=complete3DCallback(i)),morphFromColumbusViewTo3D(this,e,i,r)),0===e&&defined(this._completeMorph)&&this._completeMorph())},SceneTransitioner.prototype.isDestroyed=function(){return!1},SceneTransitioner.prototype.destroy=function(){return destroyMorphHandler(this),destroyObject(this)};var scratchCVTo3DCartographic=new Cartographic,scratchCVTo3DSurfacePoint=new Cartesian3,scratchCVTo3DFromENU=new Matrix4;function getColumbusViewTo3DCamera(e,t){var i=e._scene,r=i.camera,n=scratchCVTo3DCamera,a=n.position,o=n.direction,e=n.up,i=i.mapProjection.unproject(r.position,scratchCVTo3DCartographic);t.cartographicToCartesian(i,a);a=t.scaleToGeodeticSurface(a,scratchCVTo3DSurfacePoint),t=Transforms.eastNorthUpToFixedFrame(a,t,scratchCVTo3DFromENU);return Matrix4.multiplyByPointAsVector(t,r.direction,o),Matrix4.multiplyByPointAsVector(t,r.up,e),n}var scratchCVTo3DStartPos=new Cartesian3,scratchCVTo3DStartDir=new Cartesian3,scratchCVTo3DStartUp=new Cartesian3,scratchCVTo3DEndPos=new Cartesian3,scratchCVTo3DEndDir=new Cartesian3,scratchCVTo3DEndUp=new Cartesian3;function morphFromColumbusViewTo3D(e,t,i,r){t*=.5;var n=e._scene,a=n.camera,o=Cartesian3.clone(a.position,scratchCVTo3DStartPos),s=Cartesian3.clone(a.direction,scratchCVTo3DStartDir),l=Cartesian3.clone(a.up,scratchCVTo3DStartUp),c=Matrix4.multiplyByPoint(Camera.TRANSFORM_2D_INVERSE,i.position,scratchCVTo3DEndPos),u=Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D_INVERSE,i.direction,scratchCVTo3DEndDir),d=Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D_INVERSE,i.up,scratchCVTo3DEndUp);i=n.tweens.add({duration:t,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){columbusViewMorph(o,c,e.time,a.position),columbusViewMorph(s,u,e.time,a.direction),columbusViewMorph(l,d,e.time,a.up),Cartesian3.cross(a.direction,a.up,a.right),Cartesian3.normalize(a.right,a.right)},complete:function(){addMorphTimeAnimations(e,n,0,1,t,r)}});e._currentTweens.push(i)}var scratch2DTo3DFrustumOrtho=new OrthographicFrustum,scratch3DToCVStartPos=new Cartesian3,scratch3DToCVStartDir=new Cartesian3,scratch3DToCVStartUp=new Cartesian3,scratch3DToCVEndPos=new Cartesian3,scratch3DToCVEndDir=new Cartesian3,scratch3DToCVEndUp=new Cartesian3;function morphFrom2DTo3D(e,t,i){t/=3;var r,n,a=e._scene,o=a.camera;0<t?(r=scratchCVTo3DCamera,Cartesian3.fromDegrees(0,0,5*i.maximumRadius,i,r.position),Cartesian3.negate(r.position,r.direction),Cartesian3.normalize(r.direction,r.direction),Cartesian3.clone(Cartesian3.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=getColumbusViewTo3DCamera(e,i)),e._morphToOrthographic?((n=scratch2DTo3DFrustumOrtho).aspectRatio=a.drawingBufferWidth/a.drawingBufferHeight,n.width=o.frustum.right-o.frustum.left):((n=scratch2DTo3DFrustumPersp).aspectRatio=a.drawingBufferWidth/a.drawingBufferHeight,n.fov=CesiumMath.toRadians(60)),r.frustum=n;var s,l=complete3DCallback(r);createMorphHandler(e,l),s=e._morphToOrthographic?function(){morphFromColumbusViewTo3D(e,t,r,l)}:function(){morphOrthographicToPerspective(e,t,r,function(){morphFromColumbusViewTo3D(e,t,r,l)})},0<t?(a._mode=SceneMode$1.SCENE2D,o.flyTo({duration:t,destination:Cartesian3.fromDegrees(0,0,5*i.maximumRadius,i,scratch3DToCVEndPos),complete:function(){a._mode=SceneMode$1.MORPHING,s()}})):s()}function columbusViewMorph(e,t,i,r){return Cartesian3.lerp(e,t,i,r)}function morphPerspectiveToOrthographic(e,t,i,r,n){var a,o,s,l=e._scene,c=l.camera;c.frustum instanceof OrthographicFrustum||(a=c.frustum.fov,o=.5*CesiumMath.RADIANS_PER_DEGREE,s=i.position.z*Math.tan(.5*a),c.frustum.far=s/Math.tan(.5*o)+1e7,t=l.tweens.add({duration:t,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){c.frustum.fov=CesiumMath.lerp(a,o,e.time),e=s/Math.tan(.5*c.frustum.fov),r(c,e)},complete:function(){c.frustum=i.frustum.clone(),n(e)}}),e._currentTweens.push(t))}var scratchCVTo2DStartPos=new Cartesian3,scratchCVTo2DStartDir=new Cartesian3,scratchCVTo2DStartUp=new Cartesian3,scratchCVTo2DEndPos=new Cartesian3,scratchCVTo2DEndDir=new Cartesian3,scratchCVTo2DEndUp=new Cartesian3,scratchCVTo2DFrustum=new OrthographicOffCenterFrustum,scratchCVTo2DRay=new Ray,scratchCVTo2DPickPos=new Cartesian3,scratchCVTo2DCamera={position:void 0,direction:void 0,up:void 0,frustum:void 0};function morphFromColumbusViewTo2D(e,t){t*=.5;var i,r,n=e._scene,a=n.camera,o=Cartesian3.clone(a.position,scratchCVTo2DStartPos),s=Cartesian3.clone(a.direction,scratchCVTo2DStartDir),l=Cartesian3.clone(a.up,scratchCVTo2DStartUp),c=Cartesian3.negate(Cartesian3.UNIT_Z,scratchCVTo2DEndDir),u=Cartesian3.clone(Cartesian3.UNIT_Y,scratchCVTo2DEndUp),d=scratchCVTo2DEndPos;0<t?(Cartesian3.clone(Cartesian3.ZERO,scratchCVTo2DEndPos),d.z=5*n.mapProjection.ellipsoid.maximumRadius):(Cartesian3.clone(o,scratchCVTo2DEndPos),i=scratchCVTo2DRay,Matrix4.multiplyByPoint(Camera.TRANSFORM_2D,o,i.origin),Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,s,i.direction),!defined(r=n.globe)||defined(h=r.pickWorldCoordinates(i,n,!0,scratchCVTo2DPickPos))&&(Matrix4.multiplyByPoint(Camera.TRANSFORM_2D_INVERSE,h,d),d.z+=Cartesian3.distance(o,d)));var h=scratchCVTo2DFrustum;h.right=.5*d.z,h.left=-h.right,h.top=h.right*(n.drawingBufferHeight/n.drawingBufferWidth),h.bottom=-h.top;var p=scratchCVTo2DCamera;p.position=d,p.direction=c,p.up=u,p.frustum=h;var m=complete2DCallback(p);function f(e,t){e.position.z=t}createMorphHandler(e,m);n=n.tweens.add({duration:t,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){columbusViewMorph(o,d,e.time,a.position),columbusViewMorph(s,c,e.time,a.direction),columbusViewMorph(l,u,e.time,a.up),Cartesian3.cross(a.direction,a.up,a.right),Cartesian3.normalize(a.right,a.right),a._adjustOrthographicFrustum(!0)},complete:function(){morphPerspectiveToOrthographic(e,t,p,f,m)}});e._currentTweens.push(n)}var scratch3DTo2DCartographic=new Cartographic,scratch3DTo2DCamera={position:new Cartesian3,direction:new Cartesian3,up:new Cartesian3,position2D:new Cartesian3,direction2D:new Cartesian3,up2D:new Cartesian3,frustum:new OrthographicOffCenterFrustum},scratch3DTo2DEndCamera={position:new Cartesian3,direction:new Cartesian3,up:new Cartesian3,frustum:void 0},scratch3DTo2DPickPosition=new Cartesian3,scratch3DTo2DRay=new Ray,scratch3DTo2DToENU=new Matrix4,scratch3DTo2DSurfacePoint=new Cartesian3;function morphFrom3DTo2D(e,t,i){t*=.5;var r,n,a=e._scene,o=a.camera,s=scratch3DTo2DCamera;function l(e,t){e.position.x=t}0<t?(Cartesian3.clone(Cartesian3.ZERO,s.position),s.position.z=5*i.maximumRadius,Cartesian3.negate(Cartesian3.UNIT_Z,s.direction),Cartesian3.clone(Cartesian3.UNIT_Y,s.up)):(i.cartesianToCartographic(o.positionWC,scratch3DTo2DCartographic),a.mapProjection.project(scratch3DTo2DCartographic,s.position),Cartesian3.negate(Cartesian3.UNIT_Z,s.direction),Cartesian3.clone(Cartesian3.UNIT_Y,s.up),n=scratch3DTo2DRay,Cartesian3.clone(s.position2D,n.origin),r=Cartesian3.clone(o.directionWC,n.direction),o=i.scaleToGeodeticSurface(o.positionWC,scratch3DTo2DSurfacePoint),i=Transforms.eastNorthUpToFixedFrame(o,i,scratch3DTo2DToENU),Matrix4.inverseTransformation(i,i),Matrix4.multiplyByPointAsVector(i,r,r),Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,r,r),!defined(r=a.globe)||defined(c=r.pickWorldCoordinates(n,a,!0,scratch3DTo2DPickPosition))&&(n=Cartesian3.distance(s.position2D,c),c.x+=n,Cartesian3.clone(c,s.position2D))),Matrix4.multiplyByPoint(Camera.TRANSFORM_2D,s.position,s.position2D),Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,s.direction,s.direction2D),Matrix4.multiplyByPointAsVector(Camera.TRANSFORM_2D,s.up,s.up2D);var c=s.frustum;c.right=.5*s.position.z,c.left=-c.right,c.top=c.right*(a.drawingBufferHeight/a.drawingBufferWidth),c.bottom=-c.top;a=scratch3DTo2DEndCamera;Matrix4.multiplyByPoint(Camera.TRANSFORM_2D_INVERSE,s.position2D,a.position),Cartesian3.clone(s.direction,a.direction),Cartesian3.clone(s.up,a.up),a.frustum=c;var u=complete2DCallback(a);createMorphHandler(e,u),morphFrom3DToColumbusView(e,t,s,function(){morphPerspectiveToOrthographic(e,t,s,l,u)})}function morphOrthographicToPerspective(e,t,i,r){var n=e._scene,a=n.camera,o=a.frustum.right-a.frustum.left;a.frustum=i.frustum.clone();var s=a.frustum.fov,l=.5*CesiumMath.RADIANS_PER_DEGREE,c=o*Math.tan(.5*s);a.frustum.far=c/Math.tan(.5*l)+1e7,a.frustum.fov=l;t=n.tweens.add({duration:t,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){a.frustum.fov=CesiumMath.lerp(l,s,e.time),a.position.z=c/Math.tan(.5*a.frustum.fov)},complete:function(){r(e)}});e._currentTweens.push(t)}function morphFrom2DToColumbusView(n,a,o,s){a*=.5;var l=n._scene,c=l.camera,u=Cartesian3.clone(o.position,scratch3DToCVEndPos),d=Cartesian3.clone(o.direction,scratch3DToCVEndDir),h=Cartesian3.clone(o.up,scratch3DToCVEndUp);function e(){c.frustum=o.frustum.clone();var t=Cartesian3.clone(c.position,scratch3DToCVStartPos),i=Cartesian3.clone(c.direction,scratch3DToCVStartDir),r=Cartesian3.clone(c.up,scratch3DToCVStartUp);t.z=u.z;var e=l.tweens.add({duration:a,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){columbusViewMorph(t,u,e.time,c.position),columbusViewMorph(i,d,e.time,c.direction),columbusViewMorph(r,h,e.time,c.up),Cartesian3.cross(c.direction,c.up,c.right),Cartesian3.normalize(c.right,c.right)},complete:function(){s(n)}});n._currentTweens.push(e)}l._mode=SceneMode$1.MORPHING,n._morphToOrthographic?e():morphOrthographicToPerspective(n,0,o,e)}function morphFrom3DToColumbusView(e,t,i,r){var n=e._scene,a=n.camera,o=Cartesian3.clone(a.position,scratch3DToCVStartPos),s=Cartesian3.clone(a.direction,scratch3DToCVStartDir),l=Cartesian3.clone(a.up,scratch3DToCVStartUp),c=Cartesian3.clone(i.position2D,scratch3DToCVEndPos),u=Cartesian3.clone(i.direction2D,scratch3DToCVEndDir),d=Cartesian3.clone(i.up2D,scratch3DToCVEndUp);i=n.tweens.add({duration:t,easingFunction:EasingFunction$1.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){columbusViewMorph(o,c,e.time,a.position),columbusViewMorph(s,u,e.time,a.direction),columbusViewMorph(l,d,e.time,a.up),Cartesian3.cross(a.direction,a.up,a.right),Cartesian3.normalize(a.right,a.right),a._adjustOrthographicFrustum(!0)},complete:function(){addMorphTimeAnimations(e,n,1,0,t,r)}});e._currentTweens.push(i)}function addMorphTimeAnimations(e,t,i,r,n,a){n={object:t,property:"morphTime",startValue:i,stopValue:r,duration:n,easingFunction:EasingFunction$1.QUARTIC_OUT};defined(a)&&(n.complete=function(){a(e)});n=t.tweens.addProperty(n);e._currentTweens.push(n)}function complete3DCallback(r){return function(e){var t=e._scene;t._mode=SceneMode$1.SCENE3D,t.morphTime=SceneMode$1.getMorphTime(SceneMode$1.SCENE3D),destroyMorphHandler(e);var i=t.camera;e._previousMode===SceneMode$1.MORPHING&&!e._morphCancelled||(e._morphCancelled=!1,Cartesian3.clone(r.position,i.position),Cartesian3.clone(r.direction,i.direction),Cartesian3.clone(r.up,i.up),Cartesian3.cross(i.direction,i.up,i.right),Cartesian3.normalize(i.right,i.right),i.frustum=r.frustum.clone());i=i.frustum;t.frameState.useLogDepth&&(i.near=.1,i.far=1e10);i=defined(e._completeMorph);e._completeMorph=void 0,t.camera.update(t.mode),e._scene.morphComplete.raiseEvent(e,e._previousMode,SceneMode$1.SCENE3D,i)}}function complete2DCallback(r){return function(e){var t=e._scene;t._mode=SceneMode$1.SCENE2D,t.morphTime=SceneMode$1.getMorphTime(SceneMode$1.SCENE2D),destroyMorphHandler(e);var i=t.camera;Cartesian3.clone(r.position,i.position),i.position.z=2*t.mapProjection.ellipsoid.maximumRadius,Cartesian3.clone(r.direction,i.direction),Cartesian3.clone(r.up,i.up),Cartesian3.cross(i.direction,i.up,i.right),Cartesian3.normalize(i.right,i.right),i.frustum=r.frustum.clone();i=defined(e._completeMorph);e._completeMorph=void 0,t.camera.update(t.mode),e._scene.morphComplete.raiseEvent(e,e._previousMode,SceneMode$1.SCENE2D,i)}}function completeColumbusViewCallback(r){return function(e){var t=e._scene;t._mode=SceneMode$1.COLUMBUS_VIEW,t.morphTime=SceneMode$1.getMorphTime(SceneMode$1.COLUMBUS_VIEW),destroyMorphHandler(e);var i=t.camera;e._previousModeMode===SceneMode$1.MORPHING&&!e._morphCancelled||(e._morphCancelled=!1,Cartesian3.clone(r.position,i.position),Cartesian3.clone(r.direction,i.direction),Cartesian3.clone(r.up,i.up),Cartesian3.cross(i.direction,i.up,i.right),Cartesian3.normalize(i.right,i.right));i=i.frustum;t.frameState.useLogDepth&&(i.near=.1,i.far=1e10);i=defined(e._completeMorph);e._completeMorph=void 0,t.camera.update(t.mode),e._scene.morphComplete.raiseEvent(e,e._previousMode,SceneMode$1.COLUMBUS_VIEW,i)}}function Tween(e,t,i,r,n,a,o,s,l,c){this._tweens=e,this._tweenjs=t,this._startObject=clone$1(i),this._stopObject=clone$1(r),this._duration=n,this._delay=a,this._easingFunction=o,this._update=s,this._complete=l,this.cancel=c,this.needsStart=!0}function TweenCollection(){this._tweens=[]}function ScreenSpaceCameraController(e){this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.translateEventTypes=CameraEventType$1.LEFT_DRAG,this.zoomEventTypes=[CameraEventType$1.RIGHT_DRAG,CameraEventType$1.WHEEL,CameraEventType$1.PINCH],this.rotateEventTypes=CameraEventType$1.LEFT_DRAG,this.tiltEventTypes=[CameraEventType$1.MIDDLE_DRAG,CameraEventType$1.PINCH,{eventType:CameraEventType$1.LEFT_DRAG,modifier:KeyboardEventModifier$1.CTRL},{eventType:CameraEventType$1.RIGHT_DRAG,modifier:KeyboardEventModifier$1.CTRL}],this.lookEventTypes={eventType:CameraEventType$1.LEFT_DRAG,modifier:KeyboardEventModifier$1.SHIFT},this.minimumPickingTerrainHeight=15e4,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumCollisionTerrainHeight=15e3,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=75e5,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this._scene=e,this._globe=void 0,this._ellipsoid=void 0,this._aggregator=new CameraEventAggregator(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new TweenCollection,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new Cartesian2(-1,-1),this._tiltCenter=new Cartesian3,this._rotateMousePosition=new Cartesian2(-1,-1),this._rotateStartPosition=new Cartesian3,this._strafeStartPosition=new Cartesian3,this._strafeMousePosition=new Cartesian2,this._strafeEndMousePosition=new Cartesian2,this._zoomMouseStart=new Cartesian2(-1,-1),this._zoomWorldPosition=new Cartesian3,this._useZoomWorldPosition=!1,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;e=e.mapProjection;this._maxCoord=e.project(new Cartographic(Math.PI,CesiumMath.PI_OVER_TWO)),this._zoomFactor=5,this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=2e-4,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function decay(e,t){if(e<0)return 0;t=25*(1-t);return Math.exp(-t*e)}function sameMousePosition(e){return Cartesian2.equalsEpsilon(e.startPosition,e.endPosition,CesiumMath.EPSILON14)}Object.defineProperties(Tween.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}}),Tween.prototype.cancelTween=function(){this._tweens.remove(this)},Object.defineProperties(TweenCollection.prototype,{length:{get:function(){return this._tweens.length}}}),TweenCollection.prototype.add=function(e){if(0===(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).duration)return defined(e.complete)&&e.complete(),new Tween(this);var t=e.duration/TimeConstants$1.SECONDS_PER_MILLISECOND,i=defaultValue(e.delay,0),r=i/TimeConstants$1.SECONDS_PER_MILLISECOND,n=defaultValue(e.easingFunction,EasingFunction$1.LINEAR_NONE),a=e.startObject,o=new TWEEN.Tween(a);o.to(clone$1(e.stopObject),t),o.delay(r),o.easing(n),defined(e.update)&&o.onUpdate(function(){e.update(a)}),o.onComplete(defaultValue(e.complete,null)),o.repeat(defaultValue(e._repeat,0));n=new Tween(this,o,e.startObject,e.stopObject,e.duration,i,n,e.update,e.complete,e.cancel);return this._tweens.push(n),n},TweenCollection.prototype.addProperty=function(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).object,i=e.property,r=e.startValue,n=e.stopValue;return this.add({startObject:{value:r},stopObject:{value:n},duration:defaultValue(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:function(e){t[i]=e.value},complete:e.complete,cancel:e.cancel,_repeat:e._repeat})},TweenCollection.prototype.addAlpha=function(e){var t,r=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).material,n=[];for(t in r.uniforms)r.uniforms.hasOwnProperty(t)&&defined(r.uniforms[t])&&defined(r.uniforms[t].alpha)&&n.push(t);return this.add({startObject:{alpha:defaultValue(e.startValue,0)},stopObject:{alpha:defaultValue(e.stopValue,1)},duration:defaultValue(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:function(e){for(var t=n.length,i=0;i<t;++i)r.uniforms[n[i]].alpha=e.alpha},complete:e.complete,cancel:e.cancel})},TweenCollection.prototype.addOffsetIncrement=function(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).material.uniforms;return this.addProperty({object:t,property:"offset",startValue:t.offset,stopValue:t.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})},TweenCollection.prototype.remove=function(e){if(!defined(e))return!1;var t=this._tweens.indexOf(e);return-1!==t&&(e.tweenjs.stop(),defined(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0)},TweenCollection.prototype.removeAll=function(){for(var e=this._tweens,t=0;t<e.length;++t){var i=e[t];i.tweenjs.stop(),defined(i.cancel)&&i.cancel()}e.length=0},TweenCollection.prototype.contains=function(e){return defined(e)&&-1!==this._tweens.indexOf(e)},TweenCollection.prototype.get=function(e){return this._tweens[e]},TweenCollection.prototype.update=function(e){var t=this._tweens,i=0;for(e=defined(e)?e/TimeConstants$1.SECONDS_PER_MILLISECOND:getTimestamp$1();i<t.length;){var r=t[i],n=r.tweenjs;r.needsStart?(r.needsStart=!1,n.start(e)):n.update(e)?i++:(n.stop(),t.splice(i,1))}};var inertiaMaxClickTimeThreshold=.4;function maintainInertia(e,t,i,r,n,a,o){var s=a[o];defined(s)||(s=a[o]={startPosition:new Cartesian2,endPosition:new Cartesian2,motion:new Cartesian2,inertiaEnabled:!0});var l=e.getButtonPressTime(t,i),c=e.getButtonReleaseTime(t,i),u=l&&c&&(c.getTime()-l.getTime())/1e3,o=new Date,o=c&&(o.getTime()-c.getTime())/1e3;l&&c&&u<inertiaMaxClickTimeThreshold&&(o=decay(o,r),defined(r=e.getLastMovement(t,i))&&!sameMousePosition(r)&&s.inertiaEnabled&&(s.motion.x=.5*(r.endPosition.x-r.startPosition.x),s.motion.y=.5*(r.endPosition.y-r.startPosition.y),s.startPosition=Cartesian2.clone(r.startPosition,s.startPosition),s.endPosition=Cartesian2.multiplyByScalar(s.motion,o,s.endPosition),s.endPosition=Cartesian2.add(s.startPosition,s.endPosition,s.endPosition),isNaN(s.endPosition.x)||isNaN(s.endPosition.y)||Cartesian2.distance(s.startPosition,s.endPosition)<.5||e.isButtonDown(t,i)||n(a,e.getStartMousePosition(t,i),s)))}function activateInertia(e,t){if(defined(t)){var i=e[t];defined(i)&&(i.inertiaEnabled=!0);var r=e._inertiaDisablers[t];if(defined(r))for(var n=r.length,a=0;a<n;++a)defined(i=e[r[a]])&&(i.inertiaEnabled=!1)}}var scratchEventTypeArray=[];function reactToInput(e,t,i,r,n,a){if(defined(i)){var o=e._aggregator;Array.isArray(i)||(scratchEventTypeArray[0]=i,i=scratchEventTypeArray);for(var s=i.length,l=0;l<s;++l){var c=i[l],u=defined(c.eventType)?c.eventType:c,d=c.modifier,h=o.isMoving(u,d)&&o.getMovement(u,d),c=o.getStartMousePosition(u,d);e.enableInputs&&t&&(h?(r(e,c,h),activateInertia(e,a)):n<1&&maintainInertia(o,u,d,n,r,e,a))}}}var scratchZoomPickRay=new Ray,scratchPickCartesian$1=new Cartesian3,scratchZoomOffset=new Cartesian2,scratchZoomDirection=new Cartesian3,scratchCenterPixel=new Cartesian2,scratchCenterPosition=new Cartesian3,scratchPositionNormal=new Cartesian3,scratchPickNormal=new Cartesian3,scratchZoomAxis=new Cartesian3,scratchCameraPositionNormal=new Cartesian3,scratchTargetNormal=new Cartesian3,scratchCameraPosition=new Cartesian3,scratchCameraUpNormal=new Cartesian3,scratchCameraRightNormal=new Cartesian3,scratchForwardNormal=new Cartesian3,scratchPositionToTarget=new Cartesian3,scratchPositionToTargetNormal=new Cartesian3,scratchPan=new Cartesian3,scratchCenterMovement=new Cartesian3,scratchCenter=new Cartesian3,scratchCartesian=new Cartesian3,scratchCartesianTwo=new Cartesian3,scratchCartesianThree=new Cartesian3,scratchZoomViewOptions={orientation:new HeadingPitchRoll};function handleZoom(e,t,i,r,n,a){var o=1;defined(a)&&(o=CesiumMath.clamp(Math.abs(a),.25,1));var s=e.minimumZoomDistance*o,l=e.maximumZoomDistance,c=r*(n-s),c=CesiumMath.clamp(c,e._minimumZoomRate,e._maximumZoomRate),a=(i.endPosition.y-i.startPosition.y)/e._scene.canvas.clientHeight,o=c*(a=Math.min(a,e.maximumMovementRatio));if(e.enableCollisionDetection||0===e.minimumZoomDistance||!defined(e._globe)){if(0<o&&Math.abs(n-s)<1)return;if(o<0&&Math.abs(n-l)<1)return;n-o<s?o=n-s-1:l<n-o&&(o=n-l)}r=e._scene,i=r.camera,c=r.mode,a=scratchZoomViewOptions.orientation;if(a.heading=i.heading,a.pitch=i.pitch,a.roll=i.roll,i.frustum instanceof OrthographicFrustum)0<Math.abs(o)&&(i.zoomIn(o),i._adjustOrthographicFrustum());else{s=Cartesian2.equals(t,e._zoomMouseStart),n=e._zoomingOnVector,l=e._rotatingZoom;if(s||(e._zoomMouseStart=Cartesian2.clone(t,e._zoomMouseStart),defined(e._globe)&&(_=c===SceneMode$1.SCENE2D?(_=i.getPickRay(t,scratchZoomPickRay).origin,Cartesian3.fromElements(_.y,_.z,_.x)):pickGlobe(e,t,scratchPickCartesian$1)),defined(_)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=Cartesian3.clone(_,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,n=e._zoomingOnVector=!1,l=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),e._useZoomWorldPosition){a=c===SceneMode$1.COLUMBUS_VIEW;if(i.positionCartographic.height<2e6&&(l=!0),!s||l){if(c===SceneMode$1.SCENE2D){var u=e._zoomWorldPosition,d=i.position;!Cartesian3.equals(u,d)&&i.positionCartographic.height<2*e._maxCoord.x&&(f=i.position.x,h=Cartesian3.subtract(u,d,scratchZoomDirection),Cartesian3.normalize(h,h),m=Cartesian3.distance(u,d)*o/(.5*i.getMagnitude()),i.move(h,.5*m),(i.position.x<0&&0<f||0<i.position.x&&f<0)&&(_=i.getPickRay(t,scratchZoomPickRay).origin,_=Cartesian3.fromElements(_.y,_.z,_.x),e._zoomWorldPosition=Cartesian3.clone(_,e._zoomWorldPosition)))}else if(c===SceneMode$1.SCENE3D){l=Cartesian3.normalize(i.position,scratchCameraPositionNormal);if(e._cameraUnderground||e._zoomingUnderground||i.positionCartographic.height<3e3&&Math.abs(Cartesian3.dot(i.direction,l))<.6)a=!0;else{u=r.canvas,d=scratchCenterPixel;d.x=u.clientWidth/2,d.y=u.clientHeight/2;var h=pickGlobe(e,d,scratchCenterPosition);if(defined(h))if(i.positionCartographic.height<1e6){if(!(-.5<=Cartesian3.dot(i.direction,l))){var p=scratchCameraPosition;Cartesian3.clone(i.position,p);var m=e._zoomWorldPosition,f=scratchTargetNormal,f=Cartesian3.normalize(m,f);if(Cartesian3.dot(f,l)<0)return;var g=scratchCenter,_=scratchForwardNormal;Cartesian3.clone(i.direction,_),Cartesian3.add(p,Cartesian3.multiplyByScalar(_,1e3,scratchCartesian),g);u=scratchPositionToTarget,d=scratchPositionToTargetNormal;Cartesian3.subtract(m,p,u),Cartesian3.normalize(u,d);f=Cartesian3.dot(l,d);if(0<=f)return void(e._zoomMouseStart.x=-1);l=Math.acos(-f),f=Cartesian3.magnitude(p),m=Cartesian3.magnitude(m),f=f-o,u=Cartesian3.magnitude(u),u=Math.asin(CesiumMath.clamp(u/m*Math.sin(l),-1,1))-Math.asin(CesiumMath.clamp(f/m*Math.sin(l),-1,1))+l,m=scratchCameraUpNormal;Cartesian3.normalize(p,m);l=scratchCameraRightNormal,l=Cartesian3.cross(d,m,l);l=Cartesian3.normalize(l,l),Cartesian3.normalize(Cartesian3.cross(m,l,scratchCartesian),_),Cartesian3.multiplyByScalar(Cartesian3.normalize(g,scratchCartesian),Cartesian3.magnitude(g)-o,g),Cartesian3.normalize(p,p),Cartesian3.multiplyByScalar(p,f,p);d=scratchPan;Cartesian3.multiplyByScalar(Cartesian3.add(Cartesian3.multiplyByScalar(m,Math.cos(u)-1,scratchCartesianTwo),Cartesian3.multiplyByScalar(_,Math.sin(u),scratchCartesianThree),scratchCartesian),f,d),Cartesian3.add(p,d,p),Cartesian3.normalize(g,m),Cartesian3.normalize(Cartesian3.cross(m,l,scratchCartesian),_);l=scratchCenterMovement;return Cartesian3.multiplyByScalar(Cartesian3.add(Cartesian3.multiplyByScalar(m,Math.cos(u)-1,scratchCartesianTwo),Cartesian3.multiplyByScalar(_,Math.sin(u),scratchCartesianThree),scratchCartesian),Cartesian3.magnitude(g),l),Cartesian3.add(g,l,g),Cartesian3.clone(p,i.position),Cartesian3.normalize(Cartesian3.subtract(g,p,scratchCartesian),i.direction),Cartesian3.clone(i.direction,i.direction),Cartesian3.cross(i.direction,i.up,i.right),Cartesian3.cross(i.right,i.direction,i.up),void i.setView(scratchZoomViewOptions)}a=!0}else{g=Cartesian3.normalize(h,scratchPositionNormal),p=Cartesian3.normalize(e._zoomWorldPosition,scratchPickNormal),h=Cartesian3.dot(p,g);0<h&&h<1&&(h=CesiumMath.acosClamped(h),p=Cartesian3.cross(p,g,scratchZoomAxis),g=o/(Math.abs(h)>CesiumMath.toRadians(20)?.75*i.positionCartographic.height:i.positionCartographic.height-o),i.rotate(p,h*g))}else a=!0}}e._rotatingZoom=!a}!s&&a||n?(r=SceneTransforms.wgs84ToWindowCoordinates(r,e._zoomWorldPosition,scratchZoomOffset),t=(c!==SceneMode$1.COLUMBUS_VIEW&&Cartesian2.equals(t,e._zoomMouseStart)&&defined(r)?i.getPickRay(r,scratchZoomPickRay):i.getPickRay(t,scratchZoomPickRay)).direction,c!==SceneMode$1.COLUMBUS_VIEW&&c!==SceneMode$1.SCENE2D||Cartesian3.fromElements(t.y,t.z,t.x,t),i.move(t,o),e._zoomingOnVector=!0):i.zoomIn(o),e._cameraUnderground||i.setView(scratchZoomViewOptions)}else i.zoomIn(o)}}var translate2DStart=new Ray,translate2DEnd=new Ray,scratchTranslateP0=new Cartesian3;function translate2D(e,t,i){var r=e._scene.camera,e=r.getPickRay(i.startPosition,translate2DStart).origin,i=r.getPickRay(i.endPosition,translate2DEnd).origin,e=Cartesian3.fromElements(e.y,e.z,e.x,e),i=Cartesian3.fromElements(i.y,i.z,i.x,i),e=Cartesian3.subtract(e,i,scratchTranslateP0),i=Cartesian3.magnitude(e);0<i&&(Cartesian3.normalize(e,e),r.move(e,i))}function zoom2D(e,t,i){defined(i.distance)&&(i=i.distance);var r=e._scene.camera;handleZoom(e,t,i,e._zoomFactor,r.getMagnitude())}var twist2DStart=new Cartesian2,twist2DEnd=new Cartesian2;function twist2D(e,t,i){var r,n,a;defined(i.angleAndHeight)?singleAxisTwist2D(e,t,i.angleAndHeight):(r=(a=e._scene).camera,t=(n=a.canvas).clientWidth,e=n.clientHeight,(a=twist2DStart).x=2/t*i.startPosition.x-1,a.y=2/e*(e-i.startPosition.y)-1,a=Cartesian2.normalize(a,a),(n=twist2DEnd).x=2/t*i.endPosition.x-1,n.y=2/e*(e-i.endPosition.y)-1,n=Cartesian2.normalize(n,n),i=CesiumMath.acosClamped(a.x),a.y<0&&(i=CesiumMath.TWO_PI-i),a=CesiumMath.acosClamped(n.x),i=(a=n.y<0?CesiumMath.TWO_PI-a:a)-i,r.twistRight(i))}function singleAxisTwist2D(e,t,i){var r=e._rotateFactor*e._rotateRateRangeAdjustment;(r=r>e._maximumRotateRate?e._maximumRotateRate:r)<e._minimumRotateRate&&(r=e._minimumRotateRate);var n=e._scene,a=n.camera,n=n.canvas,n=(i.endPosition.x-i.startPosition.x)/n.clientWidth,n=r*(n=Math.min(n,e.maximumMovementRatio))*Math.PI*4;a.twistRight(n)}function update2D(e){var t=e._scene.mapMode2D===MapMode2D$1.ROTATE;Matrix4.equals(Matrix4.IDENTITY,e._scene.camera.transform)?(reactToInput(e,e.enableTranslate,e.translateEventTypes,translate2D,e.inertiaTranslate,"_lastInertiaTranslateMovement"),reactToInput(e,e.enableZoom,e.zoomEventTypes,zoom2D,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&reactToInput(e,e.enableRotate,e.tiltEventTypes,twist2D,e.inertiaSpin,"_lastInertiaTiltMovement")):(reactToInput(e,e.enableZoom,e.zoomEventTypes,zoom2D,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&reactToInput(e,e.enableRotate,e.translateEventTypes,twist2D,e.inertiaSpin,"_lastInertiaSpinMovement"))}var pickGlobeScratchRay=new Ray,scratchDepthIntersection=new Cartesian3,scratchRayIntersection=new Cartesian3;function pickGlobe(e,t,i){var r=e._scene,n=e._globe,a=r.camera;if(defined(n)){var o,e=!e._cameraUnderground;r.pickPositionSupported&&(o=r.pickPositionWorldCoordinates(t,scratchDepthIntersection));t=a.getPickRay(t,pickGlobeScratchRay),e=n.pickWorldCoordinates(t,r,e,scratchRayIntersection);return(defined(o)?Cartesian3.distance(o,a.positionWC):Number.POSITIVE_INFINITY)<(defined(e)?Cartesian3.distance(e,a.positionWC):Number.POSITIVE_INFINITY)?Cartesian3.clone(o,i):Cartesian3.clone(e,i)}}var scratchDistanceCartographic=new Cartographic;function getDistanceFromSurface(e){var t=e._ellipsoid,i=e._scene,r=i.camera,n=0;i.mode===SceneMode$1.SCENE3D?defined(t=t.cartesianToCartographic(r.position,scratchDistanceCartographic))&&(n=t.height):n=r.position.z;e=defaultValue(e._scene.globeHeight,0);return Math.abs(e-n)}var scratchSurfaceNormal=new Cartesian3;function getZoomDistanceUnderground(e,t){var i=t.origin,t=t.direction,e=getDistanceFromSurface(e),i=Cartesian3.normalize(i,scratchSurfaceNormal),t=Math.abs(Cartesian3.dot(i,t));return e*(t=2*Math.max(t,.5))}function getTiltCenterUnderground(e,t,i,r){var n=Cartesian3.distance(t.origin,i),i=getDistanceFromSurface(e);return CesiumMath.clamp(5*i,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance)<n&&(n=Math.min(n,i/5),n=Math.max(n,100)),Ray.getPoint(t,n,r)}function getStrafeStartPositionUnderground(e,t,i,r){var n;return(!defined(i)||(n=Cartesian3.distance(t.origin,i))>e._maximumUndergroundPickDistance)&&(n=getDistanceFromSurface(e)),Ray.getPoint(t,n,r)}var scratchInertialDelta=new Cartesian2;function continueStrafing(e,t){var i=t.endPosition,r=Cartesian2.subtract(t.endPosition,t.startPosition,scratchInertialDelta),n=e._strafeEndMousePosition;Cartesian2.add(n,r,n),t.endPosition=n,strafe(e,t,e._strafeStartPosition),t.endPosition=i}var translateCVStartRay=new Ray,translateCVEndRay=new Ray,translateCVStartPos=new Cartesian3,translateCVEndPos=new Cartesian3,translateCVDifference=new Cartesian3,translateCVOrigin=new Cartesian3,translateCVPlane=new Plane(Cartesian3.UNIT_X,0),translateCVStartMouse=new Cartesian2,translateCVEndMouse=new Cartesian2;function translateCV(e,t,i){if(Cartesian3.equals(t,e._translateMousePosition)||(e._looking=!1),Cartesian3.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking)look3D(e,t,i);else if(e._strafing)continueStrafing(e,i);else{var r,n=e._scene.camera,a=e._cameraUnderground,o=Cartesian2.clone(i.startPosition,translateCVStartMouse),s=Cartesian2.clone(i.endPosition,translateCVEndMouse),l=n.getPickRay(o,translateCVStartRay),c=Cartesian3.clone(Cartesian3.ZERO,translateCVOrigin),u=Cartesian3.UNIT_X;if(n.position.z<e._minimumPickingTerrainHeight&&defined(r=pickGlobe(e,o,translateCVStartPos))&&(c.x=r.x),a||c.x>n.position.z&&defined(r)){var d=r;return a&&(d=getStrafeStartPositionUnderground(e,l,r,translateCVStartPos)),Cartesian2.clone(t,e._strafeMousePosition),Cartesian2.clone(t,e._strafeEndMousePosition),Cartesian3.clone(d,e._strafeStartPosition),e._strafing=!0,void strafe(e,i,e._strafeStartPosition)}u=Plane.fromPointNormal(c,u,translateCVPlane),l=n.getPickRay(o,translateCVStartRay),l=IntersectionTests.rayPlane(l,u,translateCVStartPos),s=n.getPickRay(s,translateCVEndRay),u=IntersectionTests.rayPlane(s,u,translateCVEndPos);if(!defined(l)||!defined(u))return e._looking=!0,look3D(e,t,i),void Cartesian2.clone(t,e._translateMousePosition);l=Cartesian3.subtract(l,u,translateCVDifference),u=l.x;l.x=l.y,l.y=l.z,l.z=u;u=Cartesian3.magnitude(l);u>CesiumMath.EPSILON6&&(Cartesian3.normalize(l,l),n.move(l,u))}}var rotateCVWindowPos=new Cartesian2,rotateCVWindowRay=new Ray,rotateCVCenter=new Cartesian3,rotateCVVerticalCenter=new Cartesian3,rotateCVTransform=new Matrix4,rotateCVVerticalTransform=new Matrix4,rotateCVOrigin=new Cartesian3,rotateCVPlane=new Plane(Cartesian3.UNIT_X,0),rotateCVCartesian3=new Cartesian3,rotateCVCart=new Cartographic,rotateCVOldTransform=new Matrix4,rotateCVQuaternion=new Quaternion,rotateCVMatrix=new Matrix3,tilt3DCartesian3=new Cartesian3;function rotateCV(e,t,i){var r;defined(i.angleAndHeight)&&(i=i.angleAndHeight),Cartesian2.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking?look3D(e,t,i):(r=e._scene.camera,e._tiltCVOffMap||!e.onMap()||Math.abs(r.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,rotateCVOnPlane(e,t,i)):rotateCVOnTerrain(e,t,i))}function rotateCVOnPlane(e,t,i){var r=e._scene,n=r.camera,a=r.canvas,o=rotateCVWindowPos;o.x=a.clientWidth/2,o.y=a.clientHeight/2;var s=n.getPickRay(o,rotateCVWindowRay),l=Cartesian3.UNIT_X,a=s.origin,o=s.direction,s=Cartesian3.dot(l,o);if(!defined(c=Math.abs(s)>CesiumMath.EPSILON6?-Cartesian3.dot(l,a)/s:c)||c<=0)return e._looking=!0,look3D(e,t,i),void Cartesian2.clone(t,e._tiltCenterMousePosition);o=Cartesian3.multiplyByScalar(o,c,rotateCVCenter);Cartesian3.add(a,o,o);var c=r.mapProjection,a=c.ellipsoid;Cartesian3.fromElements(o.y,o.z,o.x,o);r=c.unproject(o,rotateCVCart);a.cartographicToCartesian(r,o);c=Transforms.eastNorthUpToFixedFrame(o,a,rotateCVTransform),r=e._globe,o=e._ellipsoid;e._globe=void 0,e._ellipsoid=Ellipsoid.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;a=Matrix4.clone(n.transform,rotateCVOldTransform);n._setTransform(c),rotate3D(e,t,i,Cartesian3.UNIT_Z),n._setTransform(a),e._globe=r;o=(e._ellipsoid=o).maximumRadius;e._rotateFactor=1/o,e._rotateRateRangeAdjustment=o}function rotateCVOnTerrain(e,t,i){var r=e._scene,n=r.camera,a=e._cameraUnderground,o=Cartesian3.UNIT_X;if(Cartesian2.equals(t,e._tiltCenterMousePosition))h=Cartesian3.clone(e._tiltCenter,rotateCVCenter);else{if(!defined(h=n.position.z<e._minimumPickingTerrainHeight?pickGlobe(e,t,rotateCVCenter):h)){var s=(d=n.getPickRay(t,rotateCVWindowRay)).origin,l=d.direction,c=Cartesian3.dot(o,l);if(!defined(u=Math.abs(c)>CesiumMath.EPSILON6?-Cartesian3.dot(o,s)/c:u)||u<=0)return e._looking=!0,look3D(e,t,i),void Cartesian2.clone(t,e._tiltCenterMousePosition);h=Cartesian3.multiplyByScalar(l,u,rotateCVCenter),Cartesian3.add(s,h,h)}a&&getTiltCenterUnderground(e,d=!defined(d)?n.getPickRay(t,rotateCVWindowRay):d,h,h),Cartesian2.clone(t,e._tiltCenterMousePosition),Cartesian3.clone(h,e._tiltCenter)}var u=r.canvas,s=rotateCVWindowPos;s.x=u.clientWidth/2,s.y=e._tiltCenterMousePosition.y,d=n.getPickRay(s,rotateCVWindowRay);r=Cartesian3.clone(Cartesian3.ZERO,rotateCVOrigin);r.x=h.x;u=Plane.fromPointNormal(r,o,rotateCVPlane),s=IntersectionTests.rayPlane(d,u,rotateCVVerticalCenter),r=n._projection,o=r.ellipsoid;Cartesian3.fromElements(h.y,h.z,h.x,h);var d=r.unproject(h,rotateCVCart);o.cartographicToCartesian(d,h);var u=Transforms.eastNorthUpToFixedFrame(h,o,rotateCVTransform),h=defined(s)?(Cartesian3.fromElements(s.y,s.z,s.x,s),d=r.unproject(s,rotateCVCart),o.cartographicToCartesian(d,s),Transforms.eastNorthUpToFixedFrame(s,o,rotateCVVerticalTransform)):u,r=e._globe,d=e._ellipsoid;e._globe=void 0,e._ellipsoid=Ellipsoid.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;s=Cartesian3.UNIT_Z,o=Matrix4.clone(n.transform,rotateCVOldTransform);n._setTransform(u);u=Cartesian3.cross(Cartesian3.UNIT_Z,Cartesian3.normalize(n.position,rotateCVCartesian3),rotateCVCartesian3),u=Cartesian3.dot(n.right,u);rotate3D(e,t,i,s,!1,!0),n._setTransform(h),u<0?(u=i.startPosition.y-i.endPosition.y,(a&&u<0||!a&&0<u)&&(s=void 0),u=n.constrainedAxis,rotate3D(e,t,i,s,!(n.constrainedAxis=void 0),!1),n.constrainedAxis=u):rotate3D(e,t,i,s,!0,!1),defined(n.constrainedAxis)&&(s=Cartesian3.cross(n.direction,n.constrainedAxis,tilt3DCartesian3),Cartesian3.equalsEpsilon(s,Cartesian3.ZERO,CesiumMath.EPSILON6)||(Cartesian3.dot(s,n.right)<0&&Cartesian3.negate(s,s),Cartesian3.cross(s,n.direction,n.up),Cartesian3.cross(n.direction,n.up,n.right),Cartesian3.normalize(n.up,n.up),Cartesian3.normalize(n.right,n.right))),n._setTransform(o),e._globe=r;d=(e._ellipsoid=d).maximumRadius;e._rotateFactor=1/d,e._rotateRateRangeAdjustment=d;d=Cartesian3.clone(n.positionWC,rotateCVCartesian3);e.enableCollisionDetection&&adjustHeightForTerrain(e),Cartesian3.equals(n.positionWC,d)||(n._setTransform(h),n.worldToCameraCoordinatesPoint(d,d),h=Cartesian3.magnitudeSquared(d),Cartesian3.magnitudeSquared(n.position)>h&&(Cartesian3.normalize(n.position,n.position),Cartesian3.multiplyByScalar(n.position,Math.sqrt(h),n.position)),h=Cartesian3.angleBetween(d,n.position),d=Cartesian3.cross(d,n.position,d),Cartesian3.normalize(d,d),h=Quaternion.fromAxisAngle(d,h,rotateCVQuaternion),h=Matrix3.fromQuaternion(h,rotateCVMatrix),Matrix3.multiplyByVector(h,n.direction,n.direction),Matrix3.multiplyByVector(h,n.up,n.up),Cartesian3.cross(n.direction,n.up,n.right),Cartesian3.cross(n.right,n.direction,n.up),n._setTransform(o))}var zoomCVWindowPos=new Cartesian2,zoomCVWindowRay=new Ray,zoomCVIntersection=new Cartesian3;function zoomCV(e,t,i){defined(i.distance)&&(i=i.distance);var r,n=e._scene,a=n.camera,o=n.canvas,s=e._cameraUnderground;s?r=t:((r=zoomCVWindowPos).x=o.clientWidth/2,r.y=o.clientHeight/2);var l,c,u,d=a.getPickRay(r,zoomCVWindowRay),n=d.origin,o=d.direction;defined(l=a.position.z<e._minimumPickingTerrainHeight?pickGlobe(e,r,zoomCVIntersection):l)&&(c=Cartesian3.distance(n,l)),s&&(u=getZoomDistanceUnderground(e,d),c=defined(c)?Math.min(c,u):u),defined(c)||(u=Cartesian3.UNIT_X,c=-Cartesian3.dot(u,n)/Cartesian3.dot(u,o)),handleZoom(e,t,i,e._zoomFactor,c)}function updateCV(e){var t,i=e._scene.camera;Matrix4.equals(Matrix4.IDENTITY,i.transform)?(t=e._tweens,e._aggregator.anyButtonDown&&t.removeAll(),reactToInput(e,e.enableTilt,e.tiltEventTypes,rotateCV,e.inertiaSpin,"_lastInertiaTiltMovement"),reactToInput(e,e.enableTranslate,e.translateEventTypes,translateCV,e.inertiaTranslate,"_lastInertiaTranslateMovement"),reactToInput(e,e.enableZoom,e.zoomEventTypes,zoomCV,e.inertiaZoom,"_lastInertiaZoomMovement"),reactToInput(e,e.enableLook,e.lookEventTypes,look3D),e._aggregator.anyButtonDown||t.contains(e._tween)||defined(i=i.createCorrectPositionTween(e.bounceAnimationTime))&&(e._tween=t.add(i)),t.update()):(reactToInput(e,e.enableRotate,e.rotateEventTypes,rotate3D,e.inertiaSpin,"_lastInertiaSpinMovement"),reactToInput(e,e.enableZoom,e.zoomEventTypes,zoom3D,e.inertiaZoom,"_lastInertiaZoomMovement"))}var scratchStrafeRay=new Ray,scratchStrafePlane=new Plane(Cartesian3.UNIT_X,0),scratchStrafeIntersection=new Cartesian3,scratchStrafeDirection=new Cartesian3,scratchMousePos=new Cartesian3;function strafe(e,t,i){var r=e._scene,n=r.camera,a=n.getPickRay(t.endPosition,scratchStrafeRay),e=Cartesian3.clone(n.direction,scratchStrafeDirection);r.mode===SceneMode$1.COLUMBUS_VIEW&&Cartesian3.fromElements(e.z,e.x,e.y,e);t=Plane.fromPointNormal(i,e,scratchStrafePlane),t=IntersectionTests.rayPlane(a,t,scratchStrafeIntersection);defined(t)&&(e=Cartesian3.subtract(i,t,e),r.mode===SceneMode$1.COLUMBUS_VIEW&&Cartesian3.fromElements(e.y,e.z,e.x,e),Cartesian3.add(n.position,e,n.position))}var spin3DPick=new Cartesian3,scratchCartographic=new Cartographic,scratchRadii=new Cartesian3,scratchEllipsoid=new Ellipsoid,scratchLookUp=new Cartesian3,scratchNormal=new Cartesian3;function spin3D(e,t,i){var r=e._scene.camera,n=e._cameraUnderground,a=e._ellipsoid;if(Matrix4.equals(r.transform,Matrix4.IDENTITY)){var o,s,l=a.geodeticSurfaceNormal(r.position,scratchLookUp);if(Cartesian2.equals(t,e._rotateMousePosition))if(e._looking)look3D(e,t,i,l);else if(e._rotating)rotate3D(e,t,i);else if(e._strafing)continueStrafing(e,i);else{if(Cartesian3.magnitude(r.position)<Cartesian3.magnitude(e._rotateStartPosition))return;o=Cartesian3.magnitude(e._rotateStartPosition),(s=scratchRadii).x=s.y=s.z=o,pan3D(e,t,i,a=Ellipsoid.fromCartesian3(s,scratchEllipsoid))}else{e._looking=!1,e._rotating=!1,e._strafing=!1;var c,u,d,h=a.cartesianToCartographic(r.positionWC,scratchCartographic).height;defined(e._globe)&&h<e._minimumPickingTerrainHeight?defined(c=pickGlobe(e,i.startPosition,scratchMousePos))?(d=!1,u=r.getPickRay(i.startPosition,pickGlobeScratchRay),n?(d=!0,getStrafeStartPositionUnderground(e,u,c,c)):(n=a.geodeticSurfaceNormal(c,scratchNormal),d=Math.abs(Cartesian3.dot(u.direction,n))<.05||Cartesian3.magnitude(r.position)<Cartesian3.magnitude(c)),d?(Cartesian2.clone(t,e._strafeEndMousePosition),Cartesian3.clone(c,e._strafeStartPosition),e._strafing=!0,strafe(e,i,e._strafeStartPosition)):(o=Cartesian3.magnitude(c),(s=scratchRadii).x=s.y=s.z=o,pan3D(e,t,i,a=Ellipsoid.fromCartesian3(s,scratchEllipsoid)),Cartesian3.clone(c,e._rotateStartPosition))):(e._looking=!0,look3D(e,t,i,l)):defined(r.pickEllipsoid(i.startPosition,e._ellipsoid,spin3DPick))?(pan3D(e,t,i,e._ellipsoid),Cartesian3.clone(spin3DPick,e._rotateStartPosition)):h>e._minimumTrackBallHeight?(e._rotating=!0,rotate3D(e,t,i)):(e._looking=!0,look3D(e,t,i,l)),Cartesian2.clone(t,e._rotateMousePosition)}}else rotate3D(e,t,i)}function rotate3D(e,t,i,r,n,a){n=defaultValue(n,!1),a=defaultValue(a,!1);var o=e._scene,s=o.camera,l=o.canvas,c=s.constrainedAxis;defined(r)&&(s.constrainedAxis=r);o=Cartesian3.magnitude(s.position),r=e._rotateFactor*(o-e._rotateRateRangeAdjustment);(r=r>e._maximumRotateRate?e._maximumRotateRate:r)<e._minimumRotateRate&&(r=e._minimumRotateRate);o=(i.startPosition.x-i.endPosition.x)/l.clientWidth,l=(i.startPosition.y-i.endPosition.y)/l.clientHeight,o=Math.min(o,e.maximumMovementRatio),l=Math.min(l,e.maximumMovementRatio),o=r*o*Math.PI*2,l=r*l*Math.PI;n||s.rotateRight(o),a||s.rotateUp(l),s.constrainedAxis=c}var pan3DP0=Cartesian4.clone(Cartesian4.UNIT_W),pan3DP1=Cartesian4.clone(Cartesian4.UNIT_W),pan3DTemp0=new Cartesian3,pan3DTemp1=new Cartesian3,pan3DTemp2=new Cartesian3,pan3DTemp3=new Cartesian3,pan3DStartMousePosition=new Cartesian2,pan3DEndMousePosition=new Cartesian2;function pan3D(e,t,i,r){var n,a,o=e._scene.camera,s=Cartesian2.clone(i.startPosition,pan3DStartMousePosition),l=Cartesian2.clone(i.endPosition,pan3DEndMousePosition),c=o.pickEllipsoid(s,r,pan3DP0),u=o.pickEllipsoid(l,r,pan3DP1);if(!defined(c)||!defined(u))return e._rotating=!0,void rotate3D(e,t,i);c=o.worldToCameraCoordinates(c,c),u=o.worldToCameraCoordinates(u,u),defined(o.constrainedAxis)?(n=o.constrainedAxis,s=Cartesian3.mostOrthogonalAxis(n,pan3DTemp0),Cartesian3.cross(s,n,s),Cartesian3.normalize(s,s),l=Cartesian3.cross(n,s,pan3DTemp1),r=Cartesian3.magnitude(c),a=Cartesian3.dot(n,c),e=Math.acos(a/r),t=Cartesian3.multiplyByScalar(n,a,pan3DTemp2),Cartesian3.subtract(c,t,t),Cartesian3.normalize(t,t),i=Cartesian3.magnitude(u),r=Cartesian3.dot(n,u),a=Math.acos(r/i),i=Cartesian3.multiplyByScalar(n,r,pan3DTemp3),Cartesian3.subtract(u,i,i),Cartesian3.normalize(i,i),r=Math.acos(Cartesian3.dot(t,s)),Cartesian3.dot(t,l)<0&&(r=CesiumMath.TWO_PI-r),s=Math.acos(Cartesian3.dot(i,s)),i=r-(s=Cartesian3.dot(i,l)<0?CesiumMath.TWO_PI-s:s),l=Cartesian3.equalsEpsilon(n,o.position,CesiumMath.EPSILON2)?o.right:Cartesian3.cross(n,o.position,pan3DTemp0),s=Cartesian3.cross(n,l,pan3DTemp0),l=Cartesian3.dot(s,Cartesian3.subtract(c,n,pan3DTemp1)),s=Cartesian3.dot(s,Cartesian3.subtract(u,n,pan3DTemp1)),a=0<l&&0<s?a-e:0<l&&s<=0?0<Cartesian3.dot(o.position,n)?-e-a:e+a:e-a,o.rotateRight(i),o.rotateUp(a)):(Cartesian3.normalize(c,c),Cartesian3.normalize(u,u),a=Cartesian3.dot(c,u),u=Cartesian3.cross(c,u,pan3DTemp0),a<1&&!Cartesian3.equalsEpsilon(u,Cartesian3.ZERO,CesiumMath.EPSILON14)&&(a=Math.acos(a),o.rotate(u,a)))}var zoom3DUnitPosition=new Cartesian3,zoom3DCartographic=new Cartographic;function zoom3D(e,t,i){defined(i.distance)&&(i=i.distance);var r,n=e._ellipsoid,a=e._scene,o=a.camera,s=a.canvas,a=e._cameraUnderground;a?r=t:((r=zoomCVWindowPos).x=s.clientWidth/2,r.y=s.clientHeight/2);var l,c,s=o.getPickRay(r,zoomCVWindowRay),n=n.cartesianToCartographic(o.position,zoom3DCartographic).height;defined(l=n<e._minimumPickingTerrainHeight?pickGlobe(e,r,zoomCVIntersection):l)&&(c=Cartesian3.distance(s.origin,l)),a&&(s=getZoomDistanceUnderground(e,s),c=defined(c)?Math.min(c,s):s),defined(c)||(c=n);n=Cartesian3.normalize(o.position,zoom3DUnitPosition);handleZoom(e,t,i,e._zoomFactor,c,Cartesian3.dot(n,o.direction))}var tilt3DWindowPos=new Cartesian2,tilt3DRay=new Ray,tilt3DCenter=new Cartesian3,tilt3DVerticalCenter=new Cartesian3,tilt3DTransform=new Matrix4,tilt3DVerticalTransform=new Matrix4,tilt3DOldTransform=new Matrix4,tilt3DQuaternion=new Quaternion,tilt3DMatrix=new Matrix3,tilt3DCart=new Cartographic,tilt3DLookUp=new Cartesian3;function tilt3D(e,t,i){var r,n=e._scene.camera;Matrix4.equals(n.transform,Matrix4.IDENTITY)&&(defined(i.angleAndHeight)&&(i=i.angleAndHeight),Cartesian2.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking?(r=e._ellipsoid.geodeticSurfaceNormal(n.position,tilt3DLookUp),look3D(e,t,i,r)):(n=e._ellipsoid.cartesianToCartographic(n.position,tilt3DCart),e._tiltOnEllipsoid||n.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,tilt3DOnEllipsoid(e,t,i)):tilt3DOnTerrain(e,t,i)))}var tilt3DOnEllipsoidCartographic=new Cartographic;function tilt3DOnEllipsoid(e,t,i){var r=e._ellipsoid,n=e._scene,a=n.camera,o=.25*e.minimumZoomDistance,s=r.cartesianToCartographic(a.positionWC,tilt3DOnEllipsoidCartographic).height;if(!(s-o-1<CesiumMath.EPSILON3&&i.endPosition.y-i.startPosition.y<0)){o=n.canvas,n=tilt3DWindowPos;n.x=o.clientWidth/2,n.y=o.clientHeight/2;o=a.getPickRay(n,tilt3DRay),n=IntersectionTests.rayEllipsoid(o,r);if(defined(n))u=Ray.getPoint(o,n.start,tilt3DCenter);else{if(!(s>e._minimumTrackBallHeight)){e._looking=!0;var l=e._ellipsoid.geodeticSurfaceNormal(a.position,tilt3DLookUp);return look3D(e,t,i,l),void Cartesian2.clone(t,e._tiltCenterMousePosition)}var c=IntersectionTests.grazingAltitudeLocation(o,r);if(!defined(c))return;l=r.cartesianToCartographic(c,tilt3DCart);l.height=0,u=r.cartographicToCartesian(l,tilt3DCenter)}var c=Transforms.eastNorthUpToFixedFrame(u,r,tilt3DTransform),l=e._globe,u=e._ellipsoid;e._globe=void 0,e._ellipsoid=Ellipsoid.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;r=Matrix4.clone(a.transform,tilt3DOldTransform);a._setTransform(c),rotate3D(e,t,i,Cartesian3.UNIT_Z),a._setTransform(r),e._globe=l;u=(e._ellipsoid=u).maximumRadius;e._rotateFactor=1/u,e._rotateRateRangeAdjustment=u}}function tilt3DOnTerrain(e,t,i){var r=e._ellipsoid,n=e._scene,a=n.camera,o=e._cameraUnderground;if(Cartesian2.equals(t,e._tiltCenterMousePosition))d=Cartesian3.clone(e._tiltCenter,tilt3DCenter);else{if(!defined(d=pickGlobe(e,t,tilt3DCenter))){var s=a.getPickRay(t,tilt3DRay),l=IntersectionTests.rayEllipsoid(s,r);if(!defined(l))return void(r.cartesianToCartographic(a.position,tilt3DCart).height<=e._minimumTrackBallHeight&&(e._looking=!0,u=e._ellipsoid.geodeticSurfaceNormal(a.position,tilt3DLookUp),look3D(e,t,i,u),Cartesian2.clone(t,e._tiltCenterMousePosition)));d=Ray.getPoint(s,l.start,tilt3DCenter)}o&&getTiltCenterUnderground(e,s=!defined(s)?a.getPickRay(t,tilt3DRay):s,d,d),Cartesian2.clone(t,e._tiltCenterMousePosition),Cartesian3.clone(d,e._tiltCenter)}var c=n.canvas,u=tilt3DWindowPos;u.x=c.clientWidth/2,u.y=e._tiltCenterMousePosition.y,s=a.getPickRay(u,tilt3DRay);var d,n=Cartesian3.magnitude(d),c=Cartesian3.fromElements(n,n,n,scratchRadii),u=Ellipsoid.fromCartesian3(c,scratchEllipsoid);defined(l=IntersectionTests.rayEllipsoid(s,u))&&(c=Cartesian3.magnitude(s.origin)>n?l.start:l.stop,n=Ray.getPoint(s,c,tilt3DVerticalCenter),l=Transforms.eastNorthUpToFixedFrame(d,r,tilt3DTransform),s=Transforms.eastNorthUpToFixedFrame(n,u,tilt3DVerticalTransform),c=e._globe,d=e._ellipsoid,e._globe=void 0,e._ellipsoid=Ellipsoid.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1,r=Cartesian3.UNIT_Z,u=Matrix4.clone(a.transform,tilt3DOldTransform),a._setTransform(l),n=Cartesian3.cross(n,a.positionWC,tilt3DCartesian3),n=Cartesian3.dot(a.rightWC,n),rotate3D(e,t,i,r,!1,!0),a._setTransform(s),n<0?(n=i.startPosition.y-i.endPosition.y,(o&&n<0||!o&&0<n)&&(r=void 0),n=a.constrainedAxis,rotate3D(e,t,i,r,!(a.constrainedAxis=void 0),!1),a.constrainedAxis=n):rotate3D(e,t,i,r,!0,!1),defined(a.constrainedAxis)&&(r=Cartesian3.cross(a.direction,a.constrainedAxis,tilt3DCartesian3),Cartesian3.equalsEpsilon(r,Cartesian3.ZERO,CesiumMath.EPSILON6)||(Cartesian3.dot(r,a.right)<0&&Cartesian3.negate(r,r),Cartesian3.cross(r,a.direction,a.up),Cartesian3.cross(a.direction,a.up,a.right),Cartesian3.normalize(a.up,a.up),Cartesian3.normalize(a.right,a.right))),a._setTransform(u),e._globe=c,d=(e._ellipsoid=d).maximumRadius,e._rotateFactor=1/d,e._rotateRateRangeAdjustment=d,d=Cartesian3.clone(a.positionWC,tilt3DCartesian3),e.enableCollisionDetection&&adjustHeightForTerrain(e),Cartesian3.equals(a.positionWC,d)||(a._setTransform(s),a.worldToCameraCoordinatesPoint(d,d),s=Cartesian3.magnitudeSquared(d),Cartesian3.magnitudeSquared(a.position)>s&&(Cartesian3.normalize(a.position,a.position),Cartesian3.multiplyByScalar(a.position,Math.sqrt(s),a.position)),s=Cartesian3.angleBetween(d,a.position),d=Cartesian3.cross(d,a.position,d),Cartesian3.normalize(d,d),s=Quaternion.fromAxisAngle(d,s,tilt3DQuaternion),s=Matrix3.fromQuaternion(s,tilt3DMatrix),Matrix3.multiplyByVector(s,a.direction,a.direction),Matrix3.multiplyByVector(s,a.up,a.up),Cartesian3.cross(a.direction,a.up,a.right),Cartesian3.cross(a.right,a.direction,a.up),a._setTransform(u)))}var look3DStartPos=new Cartesian2,look3DEndPos=new Cartesian2,look3DStartRay=new Ray,look3DEndRay=new Ray,look3DNegativeRot=new Cartesian3,look3DTan=new Cartesian3;function look3D(e,t,i,r){var n=e._scene.camera,a=look3DStartPos;a.x=i.startPosition.x,a.y=0;var o=look3DEndPos;o.x=i.endPosition.x,o.y=0;var s=n.getPickRay(a,look3DStartRay),l=n.getPickRay(o,look3DEndRay),c=0;n.frustum instanceof OrthographicFrustum?(h=s.origin,d=l.origin,Cartesian3.add(n.direction,h,h),Cartesian3.add(n.direction,d,d),Cartesian3.subtract(h,n.position,h),Cartesian3.subtract(d,n.position,d),Cartesian3.normalize(h,h),Cartesian3.normalize(d,d)):(h=s.direction,d=l.direction);var u=Cartesian3.dot(h,d);u<1&&(c=Math.acos(u));var d,h,c=i.startPosition.x>i.endPosition.x?-c:c,e=e._horizontalRotationAxis;defined(r)?n.look(r,-c):defined(e)?n.look(e,-c):n.lookLeft(c),a.x=0,a.y=i.startPosition.y,o.x=0,o.y=i.endPosition.y,s=n.getPickRay(a,look3DStartRay),l=n.getPickRay(o,look3DEndRay),c=0,n.frustum instanceof OrthographicFrustum?(h=s.origin,d=l.origin,Cartesian3.add(n.direction,h,h),Cartesian3.add(n.direction,d,d),Cartesian3.subtract(h,n.position,h),Cartesian3.subtract(d,n.position,d),Cartesian3.normalize(h,h),Cartesian3.normalize(d,d)):(h=s.direction,d=l.direction),(u=Cartesian3.dot(h,d))<1&&(c=Math.acos(u)),c=i.startPosition.y>i.endPosition.y?-c:c,defined(r=defaultValue(r,e))?(h=n.direction,d=Cartesian3.negate(r,look3DNegativeRot),i=Cartesian3.equalsEpsilon(h,r,CesiumMath.EPSILON2),e=Cartesian3.equalsEpsilon(h,d,CesiumMath.EPSILON2),i||e?(i&&c<0||e&&0<c)&&n.look(n.right,-c):(u=Cartesian3.dot(h,r),e=CesiumMath.acosClamped(u),0<c&&e<c&&(c=e-CesiumMath.EPSILON4),u=Cartesian3.dot(h,d),e=CesiumMath.acosClamped(u),c<0&&e<-c&&(c=-e+CesiumMath.EPSILON4),h=Cartesian3.cross(r,h,look3DTan),n.look(h,c))):n.lookUp(c)}function update3D(e){reactToInput(e,e.enableRotate,e.rotateEventTypes,spin3D,e.inertiaSpin,"_lastInertiaSpinMovement"),reactToInput(e,e.enableZoom,e.zoomEventTypes,zoom3D,e.inertiaZoom,"_lastInertiaZoomMovement"),reactToInput(e,e.enableTilt,e.tiltEventTypes,tilt3D,e.inertiaSpin,"_lastInertiaTiltMovement"),reactToInput(e,e.enableLook,e.lookEventTypes,look3D)}var scratchAdjustHeightTransform=new Matrix4,scratchAdjustHeightCartographic=new Cartographic;function adjustHeightForTerrain(e){e._adjustedHeightForTerrain=!0;var t,i,r,n,a,o,s=e._scene,l=s.mode,c=s.globe;defined(c)&&l!==SceneMode$1.SCENE2D&&l!==SceneMode$1.MORPHING&&(t=s.camera,i=c.ellipsoid,r=s.mapProjection,Matrix4.equals(t.transform,Matrix4.IDENTITY)||(n=Matrix4.clone(t.transform,scratchAdjustHeightTransform),a=Cartesian3.magnitude(t.position),t._setTransform(Matrix4.IDENTITY)),o=scratchAdjustHeightCartographic,l===SceneMode$1.SCENE3D?i.cartesianToCartographic(t.position,o):r.unproject(t.position,o),c=!1,o.height<e._minimumCollisionTerrainHeight&&(defined(s=e._scene.globeHeight)&&(s=s+e.minimumZoomDistance,o.height<s&&(o.height=s,l===SceneMode$1.SCENE3D?i.cartographicToCartesian(o,t.position):r.project(o,t.position),c=!0))),defined(n)&&(t._setTransform(n),c&&(Cartesian3.normalize(t.position,t.position),Cartesian3.negate(t.position,t.direction),Cartesian3.multiplyByScalar(t.position,Math.max(a,e.minimumZoomDistance),t.position),Cartesian3.normalize(t.direction,t.direction),Cartesian3.cross(t.direction,t.up,t.right),Cartesian3.cross(t.right,t.direction,t.up))))}ScreenSpaceCameraController.prototype.onMap=function(){var e=this._scene,t=e.mode,e=e.camera;return t!==SceneMode$1.COLUMBUS_VIEW||Math.abs(e.position.x)-this._maxCoord.x<0&&Math.abs(e.position.y)-this._maxCoord.y<0};var scratchPreviousPosition=new Cartesian3,scratchPreviousDirection=new Cartesian3;ScreenSpaceCameraController.prototype.update=function(){var e=this._scene,t=e.camera,i=e.globe,r=e.mode;Matrix4.equals(t.transform,Matrix4.IDENTITY)?(this._globe=i,this._ellipsoid=(defined(this._globe)?this._globe:e.mapProjection).ellipsoid):(this._globe=void 0,this._ellipsoid=Ellipsoid.UNIT_SPHERE),this._cameraUnderground=e.cameraUnderground&&defined(this._globe),this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight*e.terrainExaggeration,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight*e.terrainExaggeration,this._minimumTrackBallHeight=this.minimumTrackBallHeight*e.terrainExaggeration;i=this._ellipsoid.maximumRadius;this._rotateFactor=1/i,this._rotateRateRangeAdjustment=i,this._adjustedHeightForTerrain=!1;e=Cartesian3.clone(t.positionWC,scratchPreviousPosition),i=Cartesian3.clone(t.directionWC,scratchPreviousDirection);r===SceneMode$1.SCENE2D?update2D(this):r===SceneMode$1.COLUMBUS_VIEW?(this._horizontalRotationAxis=Cartesian3.UNIT_Z,updateCV(this)):r===SceneMode$1.SCENE3D&&(this._horizontalRotationAxis=void 0,update3D(this)),!this.enableCollisionDetection||this._adjustedHeightForTerrain||Cartesian3.equals(e,t.positionWC)&&Cartesian3.equals(i,t.directionWC)||adjustHeightForTerrain(this),this._aggregator.reset()},ScreenSpaceCameraController.prototype.isDestroyed=function(){return!1},ScreenSpaceCameraController.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),destroyObject(this)};var AdditiveBlend="uniform sampler2D colorTexture;\nuniform sampler2D colorTexture2;\nuniform vec2 center;\nuniform float radius;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nvec4 color0 = texture2D(colorTexture, v_textureCoordinates);\nvec4 color1 = texture2D(colorTexture2, v_textureCoordinates);\nfloat x = length(gl_FragCoord.xy - center) / radius;\nfloat t = smoothstep(0.5, 0.8, x);\ngl_FragColor = mix(color0 + color1, color1, t);\n}\n",BrightPass="uniform sampler2D colorTexture;\nuniform float avgLuminance;\nuniform float threshold;\nuniform float offset;\nvarying vec2 v_textureCoordinates;\nfloat key(float avg)\n{\nfloat guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));\nreturn max(0.0, guess) + 0.1;\n}\nvoid main()\n{\nvec4 color = texture2D(colorTexture, v_textureCoordinates);\nvec3 xyz = czm_RGBToXYZ(color.rgb);\nfloat luminance = xyz.r;\nfloat scaledLum = key(avgLuminance) * luminance / avgLuminance;\nfloat brightLum = max(scaledLum - threshold, 0.0);\nfloat brightness = brightLum / (offset + brightLum);\nxyz.r = brightness;\ngl_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);\n}\n";function SunPostProcess(){this._sceneFramebuffer=new SceneFramebuffer;var e=new Array(6);e[0]=new PostProcessStage({fragmentShader:PassThrough,textureScale:.125,forcePowerOfTwo:!0,sampleMode:PostProcessStageSampleMode.LINEAR});var t=e[1]=new PostProcessStage({fragmentShader:BrightPass,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:.125,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new Cartesian2,e[2]=new PostProcessStage({fragmentShader:GaussianBlur1D,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/t.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:0},textureScale:.125,forcePowerOfTwo:!0}),e[3]=new PostProcessStage({fragmentShader:GaussianBlur1D,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/t.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:1},textureScale:.125,forcePowerOfTwo:!0}),e[4]=new PostProcessStage({fragmentShader:PassThrough,sampleMode:PostProcessStageSampleMode.LINEAR}),this._uCenter=new Cartesian2,this._uRadius=void 0,e[5]=new PostProcessStage({fragmentShader:AdditiveBlend,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.getFramebuffer().getColorTexture(0)}}}),this._stages=new PostProcessStageComposite({stages:e});for(var r=new PostProcessStageTextureCache(this),n=e.length,a=0;a<n;++a)e[a]._textureCache=r;this._textureCache=r,this.length=e.length}SunPostProcess.prototype.get=function(e){return this._stages.get(e)},SunPostProcess.prototype.getStageByName=function(e){for(var t=this._stages.length,i=0;i<t;++i){var r=this._stages.get(i);if(r.name===e)return r}};var sunPositionECScratch=new Cartesian4,sunPositionWCScratch=new Cartesian2,sizeScratch=new Cartesian2,postProcessMatrix4Scratch=new Matrix4;function updateSunPosition(e,t,i){var r=t.uniformState,n=r.sunPositionWC,a=r.view,o=r.viewProjection,s=r.projection,l=Matrix4.computeViewportTransformation(i,0,1,postProcessMatrix4Scratch),c=Matrix4.multiplyByPoint(a,n,sunPositionECScratch),u=Transforms.pointToGLWindowCoordinates(o,l,n,sunPositionWCScratch);c.x+=CesiumMath.SOLAR_RADIUS;r=Transforms.pointToGLWindowCoordinates(s,l,c,c),i=30*Cartesian2.magnitude(Cartesian2.subtract(r,u,r))*2,a=sizeScratch;a.x=i,a.y=i,e._uCenter=Cartesian2.clone(u,e._uCenter),e._uRadius=.15*Math.max(a.x,a.y);var s=t.drawingBufferWidth,c=t.drawingBufferHeight,d=e._stages,r=d.get(0),i=r.outputTexture.width,t=r.outputTexture.height,e=new BoundingRectangle;e.width=i,e.height=t,l=Matrix4.computeViewportTransformation(e,0,1,postProcessMatrix4Scratch),u=Transforms.pointToGLWindowCoordinates(o,l,n,sunPositionWCScratch),a.x*=i/s,a.y*=t/c;var h=r.scissorRectangle;h.x=Math.max(u.x-.5*a.x,0),h.y=Math.max(u.y-.5*a.y,0),h.width=Math.min(a.x,s),h.height=Math.min(a.y,c);for(var p=1;p<4;++p)BoundingRectangle.clone(h,d.get(p).scissorRectangle)}SunPostProcess.prototype.clear=function(e,t,i){this._sceneFramebuffer.clear(e,t,i),this._textureCache.clear(e)},SunPostProcess.prototype.update=function(e){var t=e.context,i=e.viewport,e=this._sceneFramebuffer;e.update(t,i);e=e.getFramebuffer();return this._textureCache.update(t),this._stages.update(t,!1),updateSunPosition(this,t,i),e},SunPostProcess.prototype.execute=function(e){var t=this._sceneFramebuffer.getFramebuffer().getColorTexture(0),i=this._stages,r=i.length;i.get(0).execute(e,t);for(var n=1;n<r;++n)i.get(n).execute(e,i.get(n-1).outputTexture)},SunPostProcess.prototype.copy=function(e,t){var i;defined(this._copyColorCommand)||((i=this)._copyColorCommand=e.createViewportQuadCommand(PassThrough,{uniformMap:{colorTexture:function(){return i._stages.get(i._stages.length-1).outputTexture}},owner:this})),this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)},SunPostProcess.prototype.isDestroyed=function(){return!1},SunPostProcess.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),destroyObject(this)};var requestRenderAfterFrame=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function Scene(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).canvas,i=e.creditContainer,r=e.creditViewport,n=clone$1(e.contextOptions);defined(n)||(n={}),defined(n.webgl)||(n.webgl={}),n.webgl.powerPreference=defaultValue(n.webgl.powerPreference,"high-performance");var a=defined(i),n=new Context(t,n);a||((i=document.createElement("div")).style.position="absolute",i.style.bottom="0",i.style["text-shadow"]="0 0 2px #000000",i.style.color="#ffffff",i.style["font-size"]="10px",i.style["padding-right"]="5px",t.parentNode.appendChild(i)),defined(r)||(r=t.parentNode),this._id=createGuid(),this._jobScheduler=new JobScheduler,this._frameState=new FrameState(n,new CreditDisplay(i," • ",r),this._jobScheduler),this._frameState.scene3DOnly=defaultValue(e.scene3DOnly,!1),this._removeCreditContainer=!a,this._creditContainer=i,this._canvas=t,this._context=n,this._computeEngine=new ComputeEngine(n),this._globe=void 0,this._globeTranslucencyState=new GlobeTranslucencyState,this._primitives=new PrimitiveCollection,this._groundPrimitives=new PrimitiveCollection,this._globeHeight=void 0,this._cameraUnderground=!1,this._logDepthBuffer=n.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new TweenCollection,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=defaultValue(e.orderIndependentTranslucency,!0),this._executeOITFunction=void 0,this._depthPlane=new DepthPlane,this._clearColorCommand=new ClearCommand({color:new Color,stencil:0,owner:this}),this._depthClearCommand=new ClearCommand({depth:1,owner:this}),this._stencilClearCommand=new ClearCommand({stencil:0}),this._classificationStencilClearCommand=new ClearCommand({stencil:0,renderState:RenderState.fromCache({stencilMask:StencilConstants$1.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new SceneTransitioner(this),this._preUpdate=new Event,this._postUpdate=new Event,this._renderError=new Event,this._preRender=new Event,this._postRender=new Event,this._minimumDisableDepthTestDistance=0,this._debugInspector=new DebugInspector,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new Event,this.morphComplete=new Event,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=Color.clone(Color.BLACK),this._mode=SceneMode$1.SCENE3D,this._mapProjection=defined(e.mapProjection)?e.mapProjection:new GeographicProjection,this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowGlobeDepth=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.fog=new Fog,this._shadowMapCamera=new Camera(this),this.shadowMap=new ShadowMap({context:n,lightCamera:this._shadowMapCamera,enabled:defaultValue(e.shadows,!1)}),this.invertClassification=!1,this.invertClassificationColor=Color.clone(Color.WHITE),this._actualInvertClassificationColor=Color.clone(this._invertClassificationColor),this._invertClassification=new InvertClassification,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new PostProcessStageCollection,this._brdfLutGenerator=new BrdfLutGenerator,this._terrainExaggeration=defaultValue(e.terrainExaggeration,1),this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new ScreenSpaceCameraController(this),this._cameraUnderground=!1,this._mapMode2D=defaultValue(e.mapMode2D,MapMode2D$1.INFINITE_SCROLL),this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,separatePrimitiveFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=defaultValue(e.requestRenderMode,!1),this._renderRequested=!0,this.maximumRenderTimeChange=defaultValue(e.maximumRenderTimeChange,0),this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=RequestScheduler.requestCompletedEvent.addEventListener(requestRenderAfterFrame(this)),this._removeTaskProcessorListenerCallback=TaskProcessor.taskCompletedEvent.addEventListener(requestRenderAfterFrame(this)),this._removeGlobeCallbacks=[];e=new BoundingRectangle(0,0,n.drawingBufferWidth,n.drawingBufferHeight),n=new Camera(this);this._logDepthBuffer&&(n.frustum.near=.1,n.frustum.far=1e10),this.preloadFlightCamera=new Camera(this),this.preloadFlightCullingVolume=void 0,this._picking=new Picking(this),this._defaultView=new View(this,n,e),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentMapAtlas=void 0,this.light=new SunLight,updateFrameNumber(this,0,JulianDate.now()),this.updateFrameState(),this.initializeFrame()}function updateGlobeListeners(e,t){for(var i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;var r=[];defined(t)&&(r.push(t.imageryLayersUpdatedEvent.addEventListener(requestRenderAfterFrame(e))),r.push(t.terrainProviderChanged.addEventListener(requestRenderAfterFrame(e)))),e._removeGlobeCallbacks=r}function updateDerivedCommands(e,t,i){var r=e._frameState,n=e._context,a=e._view.oit,o=r.shadowState.lightShadowMaps,s=r.shadowState.lightShadowsEnabled,r=t.derivedCommands;defined(t.pickId)&&(r.picking=DerivedCommand.createPickDerivedCommand(e,t,n,r.picking)),t.pickOnly||(r.depth=DerivedCommand.createDepthOnlyDerivedCommand(e,t,n,r.depth)),r.originalCommand=t,e._hdr&&(r.hdr=DerivedCommand.createHdrCommand(t,n,r.hdr),r=(t=r.hdr.command).derivedCommands),s&&t.receiveShadows&&(r.shadows=ShadowMap.createReceiveDerivedCommand(o,t,i,n,r.shadows)),t.pass===Pass$1.TRANSLUCENT&&defined(a)&&a.isSupported()&&(s&&t.receiveShadows?(r.oit=defined(r.oit)?r.oit:{},r.oit.shadows=a.createDerivedCommands(r.shadows.receiveCommand,n,r.oit.shadows)):r.oit=a.createDerivedCommands(t,n,r.oit))}Object.defineProperties(Scene.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return ContextLimits.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return ContextLimits.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return OctahedralProjectedCubeMap.isSupported(this._context)}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,updateGlobeListeners(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(defined(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(defined(this.globe))return this.globe.terrainProvider},set:function(e){defined(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(defined(this.globe))return this.globe.terrainProviderChanged}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){e===SceneMode$1.SCENE2D?this.morphTo2D(0):e===SceneMode$1.SCENE3D?this.morphTo3D(0):e===SceneMode$1.COLUMBUS_VIEW&&this.morphToColumbusView(0),this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},terrainExaggeration:{get:function(){return this._terrainExaggeration}},useWebVR:{get:function(){return this._useWebVR},set:function(e){this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new Camera(this),defined(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new DeviceOrientationCameraController(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},imagerySplitPosition:{get:function(){return this._frameState.imagerySplitPosition},set:function(e){this._frameState.imagerySplitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){var t=this._context,t=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=t!==this._hdr,this._hdr=t}},highDynamicRangeSupported:{get:function(){var e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return.9999}},globeHeight:{get:function(){return this._globeHeight}}}),Scene.prototype.getCompressedTextureFormatSupported=function(e){var t=this.context;return("WEBGL_compressed_texture_s3tc"===e||"s3tc"===e)&&t.s3tc||("WEBGL_compressed_texture_pvrtc"===e||"pvrtc"===e)&&t.pvrtc||("WEBGL_compressed_texture_etc1"===e||"etc1"===e)&&t.etc1},Scene.prototype.updateDerivedCommands=function(e){var t,i,r,n,a,o,s,l,c,u;defined(e.derivedCommands)&&(t=this._frameState,i=this._context,r=!1,l=t.shadowState.lastDirtyTime,e.lastDirtyTime!==l&&(e.lastDirtyTime=l,r=e.dirty=!0),n=t.useLogDepth,c=this._hdr,o=defined((a=e.derivedCommands).logDepth),u=defined(a.hdr),s=defined(a.originalCommand),l=n&&!o,u=c&&!u,c=!(n&&c||s),e.dirty=e.dirty||l||u||c,e.dirty&&(e.dirty=!1,u=t.shadowState.shadowMaps,t.shadowState.shadowsEnabled&&e.castShadows&&(a.shadows=ShadowMap.createCastDerivedCommand(u,e,r,i,a.shadows)),(o||l)&&(a.logDepth=DerivedCommand.createLogDepthCommand(e,i,a.logDepth),updateDerivedCommands(this,a.logDepth.command,r)),(s||c)&&updateDerivedCommands(this,e,r)))};var renderTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.RENDER}),preloadTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.PRELOAD}),preloadFlightTilesetPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.PRELOAD_FLIGHT}),requestRenderModeDeferCheckPassState=new Cesium3DTilePassState({pass:Cesium3DTilePass$1.REQUEST_RENDER_MODE_DEFER_CHECK}),scratchOccluderBoundingSphere=new BoundingSphere,scratchOccluder;function getOccluder(e){var t=e.globe;if(e._mode===SceneMode$1.SCENE3D&&defined(t)&&t.show&&!e._cameraUnderground&&!e._globeTranslucencyState.translucent){var i=t.ellipsoid,t=e.frameState.minimumTerrainHeight;return scratchOccluderBoundingSphere.radius=i.minimumRadius+t,scratchOccluder=Occluder.fromBoundingSphere(scratchOccluderBoundingSphere,e.camera.positionWC,scratchOccluder)}}function updateFrameNumber(e,t,i){e=e._frameState;e.frameNumber=t,e.time=JulianDate.clone(i,e.time)}Scene.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1},Scene.prototype.updateFrameState=function(){var e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=getOccluder(this),t.terrainExaggeration=this._terrainExaggeration,t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof OrthographicFrustum||this.camera.frustum instanceof OrthographicOffCenterFrustum),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState,defined(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.ready?(t.specularEnvironmentMaps=this._specularEnvironmentMapAtlas.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentMapAtlas.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=Color.clone(this.invertClassificationColor,this._actualInvertClassificationColor),InvertClassification.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,defined(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0},Scene.prototype.isVisible=function(e,t,i){return defined(e)&&(!defined(e.boundingVolume)||!e.cull||t.computeVisibility(e.boundingVolume)!==Intersect$1.OUTSIDE&&(!defined(i)||!e.occlude||!e.boundingVolume.isOccluded(i)))};var transformFrom2D=new Matrix4(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);function debugShowBoundingVolume(e,t,i,r){var n=t._frameState,a=n.context,o=e.boundingVolume;defined(t._debugVolume)&&t._debugVolume.destroy();var s,l,c,u=Cartesian3.clone(o.center);n.mode!==SceneMode$1.SCENE3D&&(u=Matrix4.multiplyByPoint(transformFrom2D,u,u),l=(s=n.mapProjection).unproject(u),u=s.ellipsoid.cartographicToCartesian(l)),defined(o.radius)?(c=o.radius,c=GeometryPipeline.toWireframe(EllipsoidGeometry.createGeometry(new EllipsoidGeometry({radii:new Cartesian3(c,c,c),vertexFormat:PerInstanceColorAppearance.FLAT_VERTEX_FORMAT}))),t._debugVolume=new Primitive({geometryInstances:new GeometryInstance({geometry:c,modelMatrix:Matrix4.fromTranslation(u),attributes:{color:new ColorGeometryInstanceAttribute(1,0,0,1)}}),appearance:new PerInstanceColorAppearance({flat:!0,translucent:!1}),asynchronous:!1})):(h=o.halfAxes,c=GeometryPipeline.toWireframe(BoxGeometry.createGeometry(BoxGeometry.fromDimensions({dimensions:new Cartesian3(2,2,2),vertexFormat:PerInstanceColorAppearance.FLAT_VERTEX_FORMAT}))),t._debugVolume=new Primitive({geometryInstances:new GeometryInstance({geometry:c,modelMatrix:Matrix4.fromRotationTranslation(h,u,new Matrix4),attributes:{color:new ColorGeometryInstanceAttribute(1,0,0,1)}}),appearance:new PerInstanceColorAppearance({flat:!0,translucent:!1}),asynchronous:!1}));var d,h=n.commandList,u=n.commandList=[];t._debugVolume.update(n),e=u[0],n.useLogDepth&&(e=DerivedCommand.createLogDepthCommand(e,a).command),defined(r)&&(d=i.framebuffer,i.framebuffer=r),e.execute(a,i),defined(d)&&(i.framebuffer=d),n.commandList=h}function executeCommand(e,t,i,r,n){var a=t._frameState;if(!defined(t.debugCommandFilter)||t.debugCommandFilter(e))if(e instanceof ClearCommand)e.execute(i,r);else{e.debugShowBoundingVolume&&defined(e.boundingVolume)&&debugShowBoundingVolume(e,t,r,n),a.useLogDepth&&defined(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);n=a.passes;if(!n.pick&&!n.depth&&t._hdr&&defined(e.derivedCommands)&&defined(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),n.pick||n.depth){if(n.pick&&!n.depth&&defined(e.derivedCommands.picking))return void(e=e.derivedCommands.picking.pickCommand).execute(i,r);if(defined(e.derivedCommands.depth))return void(e=e.derivedCommands.depth.depthOnlyCommand).execute(i,r)}t.debugShowCommands||t.debugShowFrustums?t._debugInspector.executeDebugShowFrustumsCommand(t,e,r):(a.shadowState.lightShadowsEnabled&&e.receiveShadows&&defined(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand:e).execute(i,r)}}function executeIdCommand(e,t,i,r){var n=t._frameState,t=e.derivedCommands;defined(t)&&(n.useLogDepth&&defined(t.logDepth)&&(e=t.logDepth.command),defined((t=e.derivedCommands).picking)?(e=t.picking.pickCommand).execute(i,r):defined(t.depth)&&(e=t.depth.depthOnlyCommand).execute(i,r))}function backToFront(e,t,i){return t.boundingVolume.distanceSquaredTo(i)-e.boundingVolume.distanceSquaredTo(i)}function frontToBack(e,t,i){return e.boundingVolume.distanceSquaredTo(i)-t.boundingVolume.distanceSquaredTo(i)+CesiumMath.EPSILON12}function executeTranslucentCommandsBackToFront(e,t,i,r,n){var a=e.context;mergeSort(r,backToFront,e.camera.positionWC),defined(n)&&t(n.unclassifiedCommand,e,a,i);for(var o=r.length,s=0;s<o;++s)t(r[s],e,a,i)}function executeTranslucentCommandsFrontToBack(e,t,i,r,n){var a=e.context;mergeSort(r,frontToBack,e.camera.positionWC),defined(n)&&t(n.unclassifiedCommand,e,a,i);for(var o=r.length,s=0;s<o;++s)t(r[s],e,a,i)}function getDebugGlobeDepth(e,t){var i=e._view.debugGlobeDepths,r=i[t];return!defined(r)&&e.context.depthTexture&&(r=new GlobeDepth,i[t]=r),r}var transformFrom2D=Matrix4.inverseTransformation(transformFrom2D,transformFrom2D),scratchPerspectiveFrustum=new PerspectiveFrustum,scratchPerspectiveOffCenterFrustum=new PerspectiveOffCenterFrustum,scratchOrthographicFrustum=new OrthographicFrustum,scratchOrthographicOffCenterFrustum=new OrthographicOffCenterFrustum;function executeCommands(e,t){var i,r=e.camera,n=e.context,a=e.frameState,o=n.uniformState;o.updateCamera(r),(i=defined(r.frustum.fov)?r.frustum.clone(scratchPerspectiveFrustum):defined(r.frustum.infiniteProjectionMatrix)?r.frustum.clone(scratchPerspectiveOffCenterFrustum):defined(r.frustum.width)?r.frustum.clone(scratchOrthographicFrustum):r.frustum.clone(scratchOrthographicOffCenterFrustum)).near=r.frustum.near,i.far=r.frustum.far,o.updateFrustum(i),o.updatePass(Pass$1.ENVIRONMENT);var s,l=a.passes,c=l.pick,u=e._environmentState,d=e._view,h=u.renderTranslucentDepthForPick,p=u.useWebVR;c||(defined(s=u.skyBoxCommand)&&executeCommand(s,e,n,t),u.isSkyAtmosphereVisible&&executeCommand(u.skyAtmosphereCommand,e,n,t),u.isSunVisible&&(u.sunDrawCommand.execute(n,t),e.sunBloom&&!p&&(p=u.useGlobeDepthFramebuffer?d.globeDepth.framebuffer:u.usePostProcess?d.sceneFramebuffer.getFramebuffer():u.originalFramebuffer,e._sunPostProcess.execute(n),e._sunPostProcess.copy(n,p),t.framebuffer=p)),u.isMoonVisible&&u.moonCommand.execute(n,t));for(var m,f=u.useOIT?(defined(e._executeOITFunction)||(e._executeOITFunction=function(e,t,i,r,n){d.oit.executeCommands(e,t,i,r,n)}),e._executeOITFunction):l.render?executeTranslucentCommandsBackToFront:executeTranslucentCommandsFrontToBack,g=d.frustumCommandsList,_=g.length,y=u.clearGlobeDepth,C=u.useDepthPlane,v=e._globeTranslucencyState,S=v.translucent,x=e._view.globeTranslucencyFramebuffer,T=(u.separatePrimitiveFramebuffer=!1,e._depthClearCommand),b=e._stencilClearCommand,E=e._classificationStencilClearCommand,P=e._depthPlane,A=u.usePostProcessSelected,w=r.position.z,D=0;D<_;++D){var M=_-D-1,I=g[M];e.mode===SceneMode$1.SCENE2D?(r.position.z=w-I.near+1,i.far=Math.max(1,I.far-I.near),i.near=1,o.update(a)):(i.near=0!=M?I.near*e.opaqueFrustumNearOffset:I.near,i.far=I.far),o.updateFrustum(i);var R,O=e.debugShowGlobeDepth?getDebugGlobeDepth(e,M):d.globeDepth;0,e.debugShowGlobeDepth&&defined(O)&&u.useGlobeDepthFramebuffer&&(O.update(n,t,d.viewport,e._hdr,y),O.clear(n,t,e._clearColorCommand.color),R=t.framebuffer,t.framebuffer=O.framebuffer),T.execute(n,t),n.stencilBuffer&&b.execute(n,t),o.updatePass(Pass$1.GLOBE);var L,F=I.commands[Pass$1.GLOBE],N=I.indices[Pass$1.GLOBE];if(S)v.executeGlobeCommands(I,executeCommand,x,e,t);else for(m=0;m<N;++m)executeCommand(F[m],e,n,t);if(defined(O)&&u.useGlobeDepthFramebuffer&&O.executeCopyDepth(n,t),e.debugShowGlobeDepth&&defined(O)&&u.useGlobeDepthFramebuffer&&(t.framebuffer=R),!u.renderTranslucentDepthForPick)if(o.updatePass(Pass$1.TERRAIN_CLASSIFICATION),F=I.commands[Pass$1.TERRAIN_CLASSIFICATION],N=I.indices[Pass$1.TERRAIN_CLASSIFICATION],S)v.executeGlobeClassificationCommands(I,executeCommand,x,e,t);else for(m=0;m<N;++m)executeCommand(F[m],e,n,t);if(y&&(T.execute(n,t),C&&P.execute(n,t)),!u.useInvertClassification||c||u.renderTranslucentDepthForPick){for(o.updatePass(Pass$1.CESIUM_3D_TILE),F=I.commands[Pass$1.CESIUM_3D_TILE],N=I.indices[Pass$1.CESIUM_3D_TILE],m=0;m<N;++m)executeCommand(F[m],e,n,t);if(0<N&&(defined(O)&&u.useGlobeDepthFramebuffer&&O.executeUpdateDepth(n,t,y),!u.renderTranslucentDepthForPick))for(o.updatePass(Pass$1.CESIUM_3D_TILE_CLASSIFICATION),F=I.commands[Pass$1.CESIUM_3D_TILE_CLASSIFICATION],N=I.indices[Pass$1.CESIUM_3D_TILE_CLASSIFICATION],m=0;m<N;++m)executeCommand(F[m],e,n,t)}else{e._invertClassification.clear(n,t);var B=t.framebuffer;for(t.framebuffer=e._invertClassification._fbo,o.updatePass(Pass$1.CESIUM_3D_TILE),F=I.commands[Pass$1.CESIUM_3D_TILE],N=I.indices[Pass$1.CESIUM_3D_TILE],m=0;m<N;++m)executeCommand(F[m],e,n,t);for(defined(O)&&u.useGlobeDepthFramebuffer&&O.executeUpdateDepth(n,t,y),o.updatePass(Pass$1.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),F=I.commands[Pass$1.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],N=I.indices[Pass$1.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],m=0;m<N;++m)executeCommand(F[m],e,n,t);for(t.framebuffer=B,e._invertClassification.executeClassified(n,t),1===a.invertClassificationColor.alpha&&e._invertClassification.executeUnclassified(n,t),0<N&&n.stencilBuffer&&E.execute(n,t),o.updatePass(Pass$1.CESIUM_3D_TILE_CLASSIFICATION),F=I.commands[Pass$1.CESIUM_3D_TILE_CLASSIFICATION],N=I.indices[Pass$1.CESIUM_3D_TILE_CLASSIFICATION],m=0;m<N;++m)executeCommand(F[m],e,n,t)}for(0<N&&n.stencilBuffer&&b.execute(n,t),o.updatePass(Pass$1.OPAQUE),F=I.commands[Pass$1.OPAQUE],N=I.indices[Pass$1.OPAQUE],m=0;m<N;++m)executeCommand(F[m],e,n,t);if(0!=M&&e.mode!==SceneMode$1.SCENE2D&&(i.near=I.near,o.updateFrustum(i)),!c&&u.useInvertClassification&&a.invertClassificationColor.alpha<1&&(L=e._invertClassification),o.updatePass(Pass$1.TRANSLUCENT),(F=I.commands[Pass$1.TRANSLUCENT]).length=I.indices[Pass$1.TRANSLUCENT],f(e,executeCommand,t,F,L),n.depthTexture&&e.useDepthPicking&&(u.useGlobeDepthFramebuffer||h)&&(O=(h?t:O).framebuffer.depthStencilTexture,(V=e._picking.getPickDepth(e,M)).update(n,O),V.executeCopyDepth(n,t)),!c&&A){var V=t.framebuffer;if(t.framebuffer=d.sceneFramebuffer.getIdFramebuffer(),i.near=0!=M?I.near*e.opaqueFrustumNearOffset:I.near,i.far=I.far,o.updateFrustum(i),o.updatePass(Pass$1.GLOBE),F=I.commands[Pass$1.GLOBE],N=I.indices[Pass$1.GLOBE],S)v.executeGlobeCommands(I,executeIdCommand,x,e,t);else for(m=0;m<N;++m)executeIdCommand(F[m],e,n,t);for(y&&(T.framebuffer=t.framebuffer,T.execute(n,t),T.framebuffer=void 0),y&&C&&P.execute(n,t),o.updatePass(Pass$1.CESIUM_3D_TILE),F=I.commands[Pass$1.CESIUM_3D_TILE],N=I.indices[Pass$1.CESIUM_3D_TILE],m=0;m<N;++m)executeIdCommand(F[m],e,n,t);for(o.updatePass(Pass$1.OPAQUE),F=I.commands[Pass$1.OPAQUE],N=I.indices[Pass$1.OPAQUE],m=0;m<N;++m)executeIdCommand(F[m],e,n,t);for(o.updatePass(Pass$1.TRANSLUCENT),F=I.commands[Pass$1.TRANSLUCENT],N=I.indices[Pass$1.TRANSLUCENT],m=0;m<N;++m)executeIdCommand(F[m],e,n,t);t.framebuffer=V}}}function executeComputeCommands(e){e.context.uniformState.updatePass(Pass$1.COMPUTE);var t=e._environmentState.sunComputeCommand;defined(t)&&t.execute(e._computeEngine);for(var i=e._computeCommandList,r=i.length,n=0;n<r;++n)i[n].execute(e._computeEngine)}function executeOverlayCommands(e,t){e.context.uniformState.updatePass(Pass$1.OVERLAY);for(var i=e.context,r=e._overlayCommandList,n=r.length,a=0;a<n;++a)r[a].execute(i,t)}function insertShadowCastCommands(e,t,i){for(var r=i.shadowMapCullingVolume,n=i.isPointLight,a=i.passes,o=a.length,s=t.length,l=0;l<s;++l){var c=t[l];if(e.updateDerivedCommands(c),c.castShadows&&(c.pass===Pass$1.GLOBE||c.pass===Pass$1.CESIUM_3D_TILE||c.pass===Pass$1.OPAQUE||c.pass===Pass$1.TRANSLUCENT)&&e.isVisible(c,r))if(n)for(var u=0;u<o;++u)a[u].commandList.push(c);else if(1===o)a[0].commandList.push(c);else for(var d=!1,h=o-1;0<=h;--h){var p=a[h].cullingVolume;if(e.isVisible(c,p))a[h].commandList.push(c),d=!0;else if(d)break}}}function executeShadowMapCastCommands(e){var t=e.frameState,i=t.shadowState.shadowMaps,r=i.length;if(t.shadowState.shadowsEnabled)for(var n=e.context,a=n.uniformState,o=0;o<r;++o){var s=i[o];if(!s.outOfView){for(var l=s.passes,c=l.length,u=0;u<c;++u)l[u].commandList.length=0;for(insertShadowCastCommands(e,e.frameState.commandList,s),u=0;u<c;++u){var d=s.passes[u];a.updateCamera(d.camera),s.updatePass(n,u);for(var h=d.commandList.length,p=0;p<h;++p){var m=d.commandList[p];a.updatePass(m.pass),executeCommand(m.derivedCommands.shadows.castCommands[o],e,n,d.passState)}}}}}var scratchEyeTranslation=new Cartesian3;function executeWebVRCommands(e,t,i){var r=e._view,n=r.camera,a=e._environmentState.renderTranslucentDepthForPick;updateAndClearFramebuffers(e,t,i),a||updateAndRenderPrimitives(e),r.createPotentiallyVisibleSet(e),a||(executeComputeCommands(e),executeShadowMapCastCommands(e));var o=t.viewport;o.x=0,o.y=0,o.width=.5*o.width;var s=Camera.clone(n,e._cameraVR);s.frustum=n.frustum;var l=n.frustum.near,i=l*defaultValue(e.focalLength,5),r=defaultValue(e.eyeSeparation,i/30),a=Cartesian3.multiplyByScalar(s.right,.5*r,scratchEyeTranslation);n.frustum.aspectRatio=o.width/o.height;i=.5*r*l/i;Cartesian3.add(s.position,a,n.position),n.frustum.xOffset=i,executeCommands(e,t),o.x=o.width,Cartesian3.subtract(s.position,a,n.position),n.frustum.xOffset=-i,executeCommands(e,t),Camera.clone(s,n)}Scene.prototype.updateAndExecuteCommands=function(e,t){var i=this._frameState.mode;this._environmentState.useWebVR?executeWebVRCommands(this,e,t):i!==SceneMode$1.SCENE2D||this._mapMode2D===MapMode2D$1.ROTATE?executeCommandsInViewport(!0,this,e,t):(updateAndClearFramebuffers(this,e,t),execute2DViewportCommands(this,e))};var scratch2DViewportCartographic=new Cartographic(Math.PI,CesiumMath.PI_OVER_TWO),scratch2DViewportMaxCoord=new Cartesian3,scratch2DViewportSavedPosition=new Cartesian3,scratch2DViewportTransform=new Matrix4,scratch2DViewportCameraTransform=new Matrix4,scratch2DViewportEyePoint=new Cartesian3,scratch2DViewportWindowCoords=new Cartesian3,scratch2DViewport=new BoundingRectangle;function execute2DViewportCommands(e,t){var i=e.context,r=e.frameState,n=e.camera,a=t.viewport,o=BoundingRectangle.clone(a,scratch2DViewport);t.viewport=o;var s=scratch2DViewportMaxCoord;e.mapProjection.project(scratch2DViewportCartographic,s);var l=Cartesian3.clone(n.position,scratch2DViewportSavedPosition),c=Matrix4.clone(n.transform,scratch2DViewportCameraTransform),u=n.frustum.clone();n._setTransform(Matrix4.IDENTITY);var d=Matrix4.computeViewportTransformation(o,0,1,scratch2DViewportTransform),h=n.frustum.projectionMatrix,p=n.positionWC.y,m=Cartesian3.fromElements(CesiumMath.sign(p)*s.x-p,0,-n.positionWC.x,scratch2DViewportEyePoint),f=Transforms.pointToGLWindowCoordinates(h,d,m,scratch2DViewportWindowCoords);f.x=Math.floor(f.x);h=o.x,d=o.width;0===p||f.x<=h||f.x>=h+d?executeCommandsInViewport(!0,e,t):(Math.abs(h+.5*d-f.x)<1?(o.width=f.x-o.x,n.position.x*=CesiumMath.sign(n.position.x),n.frustum.right=0,r.cullingVolume=n.frustum.computeCullingVolume(n.positionWC,n.directionWC,n.upWC),i.uniformState.update(r),executeCommandsInViewport(!0,e,t),o.x=f.x,n.position.x=-n.position.x,n.frustum.right=-n.frustum.left,n.frustum.left=0):f.x>h+.5*d?(o.width=f.x-h,m=n.frustum.right,n.frustum.right=s.x-p,r.cullingVolume=n.frustum.computeCullingVolume(n.positionWC,n.directionWC,n.upWC),i.uniformState.update(r),executeCommandsInViewport(!0,e,t),o.x=f.x,o.width=h+d-f.x,n.position.x=-n.position.x,n.frustum.left=-n.frustum.right,n.frustum.right=m-2*n.frustum.right):(o.x=f.x,o.width=h+d-f.x,d=n.frustum.left,n.frustum.left=-s.x-p,r.cullingVolume=n.frustum.computeCullingVolume(n.positionWC,n.directionWC,n.upWC),i.uniformState.update(r),executeCommandsInViewport(!0,e,t),o.x=h,o.width=f.x-h,n.position.x=-n.position.x,n.frustum.right=-n.frustum.left,n.frustum.left=d-2*n.frustum.left),r.cullingVolume=n.frustum.computeCullingVolume(n.positionWC,n.directionWC,n.upWC),i.uniformState.update(r),executeCommandsInViewport(!1,e,t)),n._setTransform(c),Cartesian3.clone(l,n.position),n.frustum=u.clone(),t.viewport=a}function executeCommandsInViewport(e,t,i,r){var n=t._environmentState,a=t._view,n=n.renderTranslucentDepthForPick;e||n||(t.frameState.commandList.length=0),n||updateAndRenderPrimitives(t),a.createPotentiallyVisibleSet(t),e&&(defined(r)&&updateAndClearFramebuffers(t,i,r),n||(executeComputeCommands(t),executeShadowMapCastCommands(t))),executeCommands(t,i)}var scratchCullingVolume=new CullingVolume;function updateDebugFrustumPlanes(e){var t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new DebugCameraPrimitive({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),defined(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function updateShadowMaps(e){var t=e._frameState,i=t.shadowMaps,r=i.length,e=0<r&&!t.passes.pick&&e.mode===SceneMode$1.SCENE3D;if(e!==t.shadowState.shadowsEnabled&&(++t.shadowState.lastDirtyTime,t.shadowState.shadowsEnabled=e),t.shadowState.lightShadowsEnabled=!1,e){for(var n=0;n<r;++n)if(i[n]!==t.shadowState.shadowMaps[n]){++t.shadowState.lastDirtyTime;break}t.shadowState.shadowMaps.length=0;for(var a=t.shadowState.lightShadowMaps.length=0;a<r;++a){var o=i[a];o.update(t),t.shadowState.shadowMaps.push(o),o.fromLightSource&&(t.shadowState.lightShadowMaps.push(o),t.shadowState.lightShadowsEnabled=!0),o.dirty&&(++t.shadowState.lastDirtyTime,o.dirty=!1)}}}function updateAndRenderPrimitives(e){var t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),updateDebugFrustumPlanes(e),updateShadowMaps(e),e._globe&&e._globe.render(t)}function updateAndClearFramebuffers(e,t,i){var r=e._context,n=e._frameState,a=e._environmentState,o=e._view,s=e._frameState.passes.pick,l=a.useWebVR;a.originalFramebuffer=t.framebuffer,defined(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!l?e._sunPostProcess=new SunPostProcess:defined(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!defined(e.sun)&&defined(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);var c=e._clearColorCommand;Color.clone(i,c.color),c.execute(r,t);var u=a.useGlobeDepthFramebuffer=defined(o.globeDepth);u&&(o.globeDepth.update(r,t,o.viewport,e._hdr,a.clearGlobeDepth),o.globeDepth.clear(r,t,i));var d=o.oit,h=a.useOIT=!s&&defined(d)&&d.isSupported();h&&(d.update(r,t,o.globeDepth.framebuffer,e._hdr),d.clear(r,t,i),a.useOIT=d.isSupported());var p,m=e.postProcessStages,f=a.usePostProcess=!s&&(e._hdr||0<m.length||m.ambientOcclusion.enabled||m.fxaa.enabled||m.bloom.enabled);a.usePostProcessSelected=!1,f&&(o.sceneFramebuffer.update(r,o.viewport,e._hdr),o.sceneFramebuffer.clear(r,t,i),m.update(r,n.useLogDepth,e._hdr),m.clear(r),f=a.usePostProcess=m.ready,a.usePostProcessSelected=f&&m.hasSelected),a.isSunVisible&&e.sunBloom&&!l?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(r,t,i)):u?t.framebuffer=o.globeDepth.framebuffer:f&&(t.framebuffer=o.sceneFramebuffer.getFramebuffer()),defined(t.framebuffer)&&c.execute(r,t),(a.useInvertClassification=!s&&defined(t.framebuffer)&&e.invertClassification)&&(defined(p=1===e.frameState.invertClassificationColor.alpha&&a.useGlobeDepthFramebuffer?o.globeDepth.framebuffer:p)||r.depthTexture?(e._invertClassification.previousFramebuffer=p,e._invertClassification.update(r),e._invertClassification.clear(r,t),e.frameState.invertClassificationColor.alpha<1&&h&&((h=(p=e._invertClassification.unclassifiedCommand).derivedCommands).oit=d.createDerivedCommands(p,r,h.oit))):a.useInvertClassification=!1),e._globeTranslucencyState.translucent&&o.globeTranslucencyFramebuffer.updateAndClear(e._hdr,o.viewport,r,t)}function callAfterRenderFunctions(e){for(var t=e._frameState.afterRender,i=0,r=t.length;i<r;++i)t[i](),e.requestRender();t.length=0}function getGlobeHeight(e){var t=e._globe,e=e.camera.positionCartographic;if(defined(t)&&t.show&&defined(e))return t.getHeight(e)}function isCameraUnderground(e){var t=e.camera,i=e._mode,r=e.globe,n=e._screenSpaceCameraController,t=t.positionCartographic;if(!defined(t))return!1;if(!n.onMap()&&t.height<0)return!0;if(!defined(r)||!r.show||i===SceneMode$1.SCENE2D||i===SceneMode$1.MORPHING)return!1;e=e._globeHeight;return defined(e)&&t.height<e}function updateDebugShowFramesPerSecond(e,t){var i,r;e.debugShowFramesPerSecond?(defined(e._performanceDisplay)||((i=document.createElement("div")).className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(i),r=new PerformanceDisplay({container:i}),e._performanceDisplay=r,e._performanceContainer=i),e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)):defined(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function prePassesUpdate(e){e._jobScheduler.resetBudgets();var t=e._frameState;e.primitives.prePassesUpdate(t),defined(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function postPassesUpdate(e){var t=e._frameState;e.primitives.postPassesUpdate(t),RequestScheduler.update()}Scene.prototype.updateEnvironment=function(){var e=this._frameState,t=this._view,i=this._environmentState,r=e.passes.render,n=e.passes.offscreen,a=this.skyAtmosphere,o=this.globe,s=this._globeTranslucencyState;!r||this._mode!==SceneMode$1.SCENE2D&&t.camera.frustum instanceof OrthographicFrustum||!s.environmentVisible?(i.skyAtmosphereCommand=void 0,i.skyBoxCommand=void 0,i.sunDrawCommand=void 0,i.sunComputeCommand=void 0,i.moonCommand=void 0):(defined(a)?(defined(o)&&(a.setDynamicAtmosphereColor(o.enableLighting&&o.dynamicAtmosphereLighting,o.dynamicAtmosphereLightingFromSun),i.isReadyForAtmosphere=i.isReadyForAtmosphere||0<o._surface._tilesToRender.length),i.skyAtmosphereCommand=a.update(e,o),defined(i.skyAtmosphereCommand)&&this.updateDerivedCommands(i.skyAtmosphereCommand)):i.skyAtmosphereCommand=void 0,i.skyBoxCommand=defined(this.skyBox)?this.skyBox.update(e,this._hdr):void 0,t=defined(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0,i.sunDrawCommand=defined(t)?t.drawCommand:void 0,i.sunComputeCommand=defined(t)?t.computeCommand:void 0,i.moonCommand=defined(this.moon)?this.moon.update(e):void 0);o=i.clearGlobeDepth=defined(o)&&o.show&&(!o.depthTestAgainstTerrain||this.mode===SceneMode$1.SCENE2D);(i.useDepthPlane=o&&this.mode===SceneMode$1.SCENE3D&&s.useDepthPlane)&&this._depthPlane.update(e),i.renderTranslucentDepthForPick=!1,i.useWebVR=this._useWebVR&&this.mode!==SceneMode$1.SCENE2D&&!n;for(var s=e.mode!==SceneMode$1.SCENE3D||s.sunVisibleThroughGlobe?void 0:e.occluder,l=e.cullingVolume,c=scratchCullingVolume.planes,u=0;u<5;++u)c[u]=l.planes[u];l=scratchCullingVolume,i.isSkyAtmosphereVisible=defined(i.skyAtmosphereCommand)&&i.isReadyForAtmosphere,i.isSunVisible=this.isVisible(i.sunDrawCommand,l,s),i.isMoonVisible=this.isVisible(i.moonCommand,l,s);i=this.specularEnvironmentMaps,s=this._specularEnvironmentMapAtlas;!defined(i)||defined(s)&&s.url===i?!defined(i)&&defined(s)&&(s.destroy(),this._specularEnvironmentMapAtlas=void 0):(s=s&&s.destroy(),this._specularEnvironmentMapAtlas=new OctahedralProjectedCubeMap(i)),defined(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.update(e)},Scene.prototype.resolveFramebuffers=function(e){var t=this._context,i=this._frameState,r=this._environmentState,n=this._view,a=n.globeDepth,o=r.useOIT,s=r.useGlobeDepthFramebuffer,l=r.usePostProcess,c=r.originalFramebuffer,u=s?a.framebuffer:void 0,d=n.sceneFramebuffer.getFramebuffer(),h=n.sceneFramebuffer.getIdFramebuffer();r.separatePrimitiveFramebuffer&&a.executeMergeColor(t,e),o&&(e.framebuffer=l?d:c,n.oit.execute(t,e)),l&&(r=s&&!o?u:d,n=this.postProcessStages,r=r.getColorTexture(0),h=h.getColorTexture(0),d=defaultValue(u,d).depthStencilTexture,n.execute(t,r,d,h),n.copy(t,c)),o||l||!s||(e.framebuffer=c,a.executeCopyColor(t,e));i=i.useLogDepth;this.debugShowGlobeDepth&&s&&getDebugGlobeDepth(this,this.debugShowDepthFrustum-1).executeDebugGlobeDepth(t,e,i),this.debugShowPickDepth&&s&&this._picking.getPickDepth(this,this.debugShowDepthFrustum-1).executeDebugPickDepth(t,e,i)},Scene.prototype.initializeFrame=function(){120==this._shaderFrameCount++&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeight=getGlobeHeight(this),this._cameraUnderground=isCameraUnderground(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),defined(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};var scratchBackgroundColor=new Color;function render(e){var t=e._frameState,i=e.context,r=i.uniformState,n=e._defaultView;e._view=n,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=renderTilesetPassState;var a=defaultValue(e.backgroundColor,Color.BLACK);e._hdr&&((a=Color.clone(a,scratchBackgroundColor)).red=Math.pow(a.red,e.gamma),a.green=Math.pow(a.green,e.gamma),a.blue=Math.pow(a.blue,e.gamma)),t.backgroundColor=a,e.fog.update(t),r.update(t);var o=e.shadowMap;defined(o)&&o.enabled&&(!defined(e.light)||e.light instanceof SunLight?Cartesian3.negate(r.sunDirectionWC,e._shadowMapCamera.direction):Cartesian3.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(o)),e._computeCommandList.length=0,e._overlayCommandList.length=0;o=n.viewport;o.x=0,o.y=0,o.width=i.drawingBufferWidth,o.height=i.drawingBufferHeight;n=n.passState;n.framebuffer=void 0,n.blendingEnabled=void 0,n.scissorTest=void 0,n.viewport=BoundingRectangle.clone(o,n.viewport),defined(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(n,a),e.resolveFramebuffers(n),n.framebuffer=void 0,executeOverlayCommands(e,n),defined(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),i.endFrame()}function tryAndCatchError(t,e){try{e(t)}catch(e){if(t._renderError.raiseEvent(t,e),t.rethrowRenderErrors)throw e}}function updateMostDetailedRayPicks(e){return e._picking.updateMostDetailedRayPicks(e)}function updatePreloadPass(e){var t=e._frameState;preloadTilesetPassState.camera=t.camera,preloadTilesetPassState.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,preloadTilesetPassState)}function updatePreloadFlightPass(e){var t=e._frameState;t.camera.canPreloadFlight()&&(preloadFlightTilesetPassState.camera=e.preloadFlightCamera,preloadFlightTilesetPassState.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,preloadFlightTilesetPassState))}function updateRequestRenderModeDeferCheckPass(e){e.primitives.updateForPass(e._frameState,requestRenderModeDeferCheckPassState)}Scene.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);var t=this._frameState;t.newFrame=!1,defined(e)||(e=JulianDate.now());var i=this._view.checkForCameraUpdates(this),r=!this.requestRenderMode||this._renderRequested||i||this._logDepthBufferDirty||this._hdrDirty||this.mode===SceneMode$1.MORPHING;!r&&defined(this.maximumRenderTimeChange)&&defined(this._lastRenderTime)&&(i=Math.abs(JulianDate.secondsDifference(this._lastRenderTime,e)),r=r||i>this.maximumRenderTimeChange),r&&(this._lastRenderTime=JulianDate.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1,updateFrameNumber(this,CesiumMath.incrementWrap(t.frameNumber,15e6,1),e),t.newFrame=!0),tryAndCatchError(this,prePassesUpdate),this.primitives.show&&(tryAndCatchError(this,updateMostDetailedRayPicks),tryAndCatchError(this,updatePreloadPass),tryAndCatchError(this,updatePreloadFlightPass),r||tryAndCatchError(this,updateRequestRenderModeDeferCheckPass)),this._postUpdate.raiseEvent(this,e),r&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),tryAndCatchError(this,render)),updateDebugShowFramesPerSecond(this,r),tryAndCatchError(this,postPassesUpdate),callAfterRenderFunctions(this),r&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())},Scene.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)},Scene.prototype.requestRender=function(){this._renderRequested=!0},Scene.prototype.clampLineWidth=function(e){return Math.max(ContextLimits.minimumAliasedLineWidth,Math.min(e,ContextLimits.maximumAliasedLineWidth))},Scene.prototype.pick=function(e,t,i){return this._picking.pick(this,e,t,i)},Scene.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)},Scene.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)},Scene.prototype.drillPick=function(e,t,i,r){return this._picking.drillPick(this,e,t,i,r)},Scene.prototype.pickFromRay=function(e,t,i){return this._picking.pickFromRay(this,e,t,i)},Scene.prototype.drillPickFromRay=function(e,t,i,r){return this._picking.drillPickFromRay(this,e,t,i,r)},Scene.prototype.pickFromRayMostDetailed=function(e,t,i){return this._picking.pickFromRayMostDetailed(this,e,t,i)},Scene.prototype.drillPickFromRayMostDetailed=function(e,t,i,r){return this._picking.drillPickFromRayMostDetailed(this,e,t,i,r)},Scene.prototype.sampleHeight=function(e,t,i){return this._picking.sampleHeight(this,e,t,i)},Scene.prototype.clampToHeight=function(e,t,i,r){return this._picking.clampToHeight(this,e,t,i,r)},Scene.prototype.sampleHeightMostDetailed=function(e,t,i){return this._picking.sampleHeightMostDetailed(this,e,t,i)},Scene.prototype.clampToHeightMostDetailed=function(e,t,i){return this._picking.clampToHeightMostDetailed(this,e,t,i)},Scene.prototype.cartesianToCanvasCoordinates=function(e,t){return SceneTransforms.wgs84ToWindowCoordinates(this,e,t)},Scene.prototype.completeMorph=function(){this._transitioner.completeMorph()},Scene.prototype.morphTo2D=function(e){var t=this.globe,t=(defined(t)?t:this.mapProjection).ellipsoid;e=defaultValue(e,2),this._transitioner.morphTo2D(e,t)},Scene.prototype.morphToColumbusView=function(e){var t=this.globe,t=(defined(t)?t:this.mapProjection).ellipsoid;e=defaultValue(e,2),this._transitioner.morphToColumbusView(e,t)},Scene.prototype.morphTo3D=function(e){var t=this.globe,t=(defined(t)?t:this.mapProjection).ellipsoid;e=defaultValue(e,2),this._transitioner.morphTo3D(e,t)},Scene.prototype.isDestroyed=function(){return!1},Scene.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),defined(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(var e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,destroyObject(this)};var SkyAtmosphereCommon="const float Kr = 0.0025;\nconst float Kr4PI = Kr * 4.0 * czm_pi;\nconst float Km = 0.0015;\nconst float Km4PI = Km * 4.0 * czm_pi;\nconst float ESun = 15.0;\nconst float KmESun = Km * ESun;\nconst float KrESun = Kr * ESun;\nconst vec3 InvWavelength = vec3(\n5.60204474633241,\n9.473284437923038,\n19.643802610477206);\nconst float rayleighScaleDepth = 0.25;\nconst int nSamples = 2;\nconst float fSamples = 2.0;\nconst float g = -0.95;\nconst float g2 = g * g;\n#ifdef COLOR_CORRECT\nuniform vec3 u_hsbShift;\n#endif\nuniform vec3 u_radiiAndDynamicAtmosphereColor;\nfloat scale(float cosAngle)\n{\nfloat x = 1.0 - cosAngle;\nreturn rayleighScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\n}\nvec3 getLightDirection(vec3 positionWC)\n{\nfloat lightEnum = u_radiiAndDynamicAtmosphereColor.z;\nvec3 lightDirection =\npositionWC * float(lightEnum == 0.0) +\nczm_lightDirectionWC * float(lightEnum == 1.0) +\nczm_sunDirectionWC * float(lightEnum == 2.0);\nreturn normalize(lightDirection);\n}\nvoid calculateRayScatteringFromSpace(in vec3 positionWC, in vec3 ray, in float innerRadius, in float outerRadius, inout float far, out vec3 start, out float startOffset)\n{\nfloat cameraHeight = length(positionWC);\nfloat B = 2.0 * dot(positionWC, ray);\nfloat C = cameraHeight * cameraHeight - outerRadius * outerRadius;\nfloat det = max(0.0, B * B - 4.0 * C);\nfloat near = 0.5 * (-B - sqrt(det));\nstart = positionWC + ray * near;\nfar -= near;\nfloat startAngle = dot(ray, start) / outerRadius;\nfloat startDepth = exp(-1.0 / rayleighScaleDepth);\nstartOffset = startDepth * scale(startAngle);\n}\nvoid calculateRayScatteringFromGround(in vec3 positionWC, in vec3 ray, in float atmosphereScale, in float innerRadius, out vec3 start, out float startOffset)\n{\nfloat cameraHeight = length(positionWC);\nstart = positionWC;\nfloat height = length(start);\nfloat depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - cameraHeight));\nfloat startAngle = dot(ray, start) / height;\nstartOffset = depth*scale(startAngle);\n}\nczm_raySegment rayEllipsoidIntersection(czm_ray ray, vec3 inverseRadii)\n{\nvec3 o = inverseRadii * (czm_inverseView * vec4(ray.origin, 1.0)).xyz;\nvec3 d = inverseRadii * (czm_inverseView * vec4(ray.direction, 0.0)).xyz;\nfloat a = dot(d, d);\nfloat b = dot(d, o);\nfloat c = dot(o, o) - 1.0;\nfloat discriminant = b * b - a * c;\nif (discriminant < 0.0)\n{\nreturn czm_emptyRaySegment;\n}\ndiscriminant = sqrt(discriminant);\nfloat t1 = (-b - discriminant) / a;\nfloat t2 = (-b + discriminant) / a;\nif (t1 < 0.0 && t2 < 0.0)\n{\nreturn czm_emptyRaySegment;\n}\nif (t1 < 0.0 && t2 >= 0.0)\n{\nt1 = 0.0;\n}\nreturn czm_raySegment(t1, t2);\n}\nvec3 getAdjustedPosition(vec3 positionWC, float innerRadius)\n{\nfloat cameraHeight = czm_eyeHeight + innerRadius;\nreturn normalize(positionWC) * cameraHeight;\n}\nvec3 getTranslucentPosition(vec3 positionWC, vec3 outerPositionWC, float innerRadius, out bool intersectsEllipsoid)\n{\nvec3 directionWC = normalize(outerPositionWC - positionWC);\nvec3 directionEC = czm_viewRotation * directionWC;\nczm_ray viewRay = czm_ray(vec3(0.0), directionEC);\nczm_raySegment raySegment = rayEllipsoidIntersection(viewRay, czm_ellipsoidInverseRadii);\nintersectsEllipsoid = raySegment.start >= 0.0;\nif (intersectsEllipsoid)\n{\nreturn positionWC + raySegment.stop * directionWC;\n}\nreturn getAdjustedPosition(positionWC, innerRadius);\n}\nvoid calculateMieColorAndRayleighColor(vec3 outerPositionWC, out vec3 mieColor, out vec3 rayleighColor)\n{\nfloat outerRadius = u_radiiAndDynamicAtmosphereColor.x;\nfloat innerRadius = u_radiiAndDynamicAtmosphereColor.y;\n#ifdef GLOBE_TRANSLUCENT\nbool intersectsEllipsoid = false;\nvec3 startPositionWC = getTranslucentPosition(czm_viewerPositionWC, outerPositionWC, innerRadius, intersectsEllipsoid);\n#else\nvec3 startPositionWC = getAdjustedPosition(czm_viewerPositionWC, innerRadius);\n#endif\nvec3 lightDirection = getLightDirection(startPositionWC);\nvec3 ray = outerPositionWC - startPositionWC;\nfloat far = length(ray);\nray /= far;\nfloat atmosphereScale = 1.0 / (outerRadius - innerRadius);\nvec3 start;\nfloat startOffset;\n#ifdef SKY_FROM_SPACE\n#ifdef GLOBE_TRANSLUCENT\nif (intersectsEllipsoid)\n{\ncalculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\n}\nelse\n{\ncalculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\n}\n#else\ncalculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\n#endif\n#else\ncalculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\n#endif\nfloat sampleLength = far / fSamples;\nfloat scaledLength = sampleLength * atmosphereScale;\nvec3 sampleRay = ray * sampleLength;\nvec3 samplePoint = start + sampleRay * 0.5;\nvec3 frontColor = vec3(0.0, 0.0, 0.0);\nfor (int i = 0; i<nSamples; i++)\n{\nfloat height = length(samplePoint);\nfloat depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - height));\nfloat fLightAngle = dot(lightDirection, samplePoint) / height;\nfloat fCameraAngle = dot(ray, samplePoint) / height;\nfloat fScatter = (startOffset + depth*(scale(fLightAngle) - scale(fCameraAngle)));\nvec3 attenuate = exp(-fScatter * (InvWavelength * Kr4PI + Km4PI));\nfrontColor += attenuate * (depth * scaledLength);\nsamplePoint += sampleRay;\n}\nmieColor = frontColor * KmESun;\nrayleighColor = frontColor * (InvWavelength * KrESun);\nmieColor = min(mieColor, vec3(10000000.0));\nrayleighColor = min(rayleighColor, vec3(10000000.0));\n}\nvec4 calculateFinalColor(vec3 positionWC, vec3 toCamera, vec3 lightDirection, vec3 mieColor, vec3 rayleighColor)\n{\nfloat cosAngle = dot(lightDirection, normalize(toCamera)) / length(toCamera);\nfloat rayleighPhase = 0.75 * (1.0 + cosAngle * cosAngle);\nfloat miePhase = 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + cosAngle * cosAngle) / pow(1.0 + g2 - 2.0 * g * cosAngle, 1.5);\nvec3 rgb = rayleighPhase * rayleighColor + miePhase * mieColor;\nconst float exposure = 2.0;\nvec3 rgbExposure = vec3(1.0) - exp(-exposure * rgb);\n#ifndef HDR\nrgb = rgbExposure;\n#endif\n#ifdef COLOR_CORRECT\nvec3 hsb = czm_RGBToHSB(rgb);\nhsb.x += u_hsbShift.x;\nhsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0);\nhsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0;\nrgb = czm_HSBToRGB(hsb);\n#endif\nfloat outerRadius = u_radiiAndDynamicAtmosphereColor.x;\nfloat innerRadius = u_radiiAndDynamicAtmosphereColor.y;\nfloat lightEnum = u_radiiAndDynamicAtmosphereColor.z;\nfloat cameraHeight = czm_eyeHeight + innerRadius;\nfloat atmosphereAlpha = clamp((outerRadius - cameraHeight) / (outerRadius - innerRadius), 0.0, 1.0);\nfloat nightAlpha = (lightEnum != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;\natmosphereAlpha *= pow(nightAlpha, 0.5);\nvec4 finalColor = vec4(rgb, mix(clamp(rgbExposure.b, 0.0, 1.0), 1.0, atmosphereAlpha) * smoothstep(0.0, 1.0, czm_morphTime));\nif (mieColor.b > 1.0)\n{\nfloat strength = mieColor.b;\nfloat minDistance = outerRadius;\nfloat maxDistance = outerRadius * 3.0;\nfloat maxStrengthLerp = 1.0 - clamp((maxDistance - cameraHeight) / (maxDistance - minDistance), 0.0, 1.0);\nfloat maxStrength = mix(100.0, 10000.0, maxStrengthLerp);\nstrength = min(strength, maxStrength);\nfloat alpha = 1.0 - (strength / maxStrength);\nfinalColor.a = alpha;\n}\nreturn finalColor;\n}\n",SkyAtmosphereFS="varying vec3 v_outerPositionWC;\n#ifndef PER_FRAGMENT_ATMOSPHERE\nvarying vec3 v_mieColor;\nvarying vec3 v_rayleighColor;\n#endif\nvoid main (void)\n{\nvec3 toCamera = czm_viewerPositionWC - v_outerPositionWC;\nvec3 lightDirection = getLightDirection(czm_viewerPositionWC);\nvec3 mieColor;\nvec3 rayleighColor;\n#ifdef PER_FRAGMENT_ATMOSPHERE\ncalculateMieColorAndRayleighColor(v_outerPositionWC, mieColor, rayleighColor);\n#else\nmieColor = v_mieColor;\nrayleighColor = v_rayleighColor;\n#endif\ngl_FragColor = calculateFinalColor(czm_viewerPositionWC, toCamera, lightDirection, mieColor, rayleighColor);\n}\n",SkyAtmosphereVS="attribute vec4 position;\nvarying vec3 v_outerPositionWC;\n#ifndef PER_FRAGMENT_ATMOSPHERE\nvarying vec3 v_mieColor;\nvarying vec3 v_rayleighColor;\n#endif\nvoid main(void)\n{\nvec4 positionWC = czm_model * position;\n#ifndef PER_FRAGMENT_ATMOSPHERE\ncalculateMieColorAndRayleighColor(positionWC.xyz, v_mieColor, v_rayleighColor);\n#endif\nv_outerPositionWC = positionWC.xyz;\ngl_Position = czm_modelViewProjection * position;\n}\n";function SkyAtmosphere(e){e=defaultValue(e,Ellipsoid.WGS84),this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;var t=Cartesian3.multiplyByScalar(e.radii,1.025,new Cartesian3);this._scaleMatrix=Matrix4.fromScale(t),this._modelMatrix=new Matrix4,this._command=new DrawCommand({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new Cartesian3;t=new Cartesian3;t.x=1.025*e.maximumRadius,t.y=e.maximumRadius,t.z=0,this._radiiAndDynamicAtmosphereColor=t;var i=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return i._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return i._hueSaturationBrightness.x=i.hueShift,i._hueSaturationBrightness.y=i.saturationShift,i._hueSaturationBrightness.z=i.brightnessShift,i._hueSaturationBrightness}}}Object.defineProperties(SkyAtmosphere.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),SkyAtmosphere.prototype.setDynamicAtmosphereColor=function(e,t){t=e?t?2:1:0;this._radiiAndDynamicAtmosphereColor.z=t};var scratchModelMatrix$1=new Matrix4;function hasColorCorrection(e){return!(CesiumMath.equalsEpsilon(e.hueShift,0,CesiumMath.EPSILON7)&&CesiumMath.equalsEpsilon(e.saturationShift,0,CesiumMath.EPSILON7)&&CesiumMath.equalsEpsilon(e.brightnessShift,0,CesiumMath.EPSILON7))}SkyAtmosphere.prototype.update=function(e,t){if(this.show){var i=e.mode;if((i===SceneMode$1.SCENE3D||i===SceneMode$1.MORPHING)&&e.passes.render){var r=Matrix4.fromRotationTranslation(e.context.uniformState.inverseViewRotation,Cartesian3.ZERO,scratchModelMatrix$1),n=Matrix4.multiplyTransformation(r,Axis$1.Y_UP_TO_Z_UP,scratchModelMatrix$1),a=Matrix4.multiply(this._scaleMatrix,n,scratchModelMatrix$1);Matrix4.clone(a,this._modelMatrix);i=e.context,r=hasColorCorrection(this),n=e.globeTranslucencyState.translucent,a=this.perFragmentAtmosphere||n||!defined(t)||!t.show,t=this._command;defined(t.vertexArray)||(o=EllipsoidGeometry.createGeometry(new EllipsoidGeometry({radii:new Cartesian3(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:VertexFormat.POSITION_ONLY})),t.vertexArray=VertexArray.fromGeometry({context:i,geometry:o,attributeLocations:GeometryPipeline.createAttributeLocations(o),bufferUsage:BufferUsage$1.STATIC_DRAW}),t.renderState=RenderState.fromCache({cull:{enabled:!0,face:CullFace$1.FRONT},blending:BlendingState$1.ALPHA_BLEND,depthMask:!1}));var o=r|a<<2|n<<3;o!==this._flags&&(this._flags=o,o=[],r&&o.push("COLOR_CORRECT"),a&&o.push("PER_FRAGMENT_ATMOSPHERE"),n&&o.push("GLOBE_TRANSLUCENT"),a=new ShaderSource({defines:o.concat("SKY_FROM_SPACE"),sources:[SkyAtmosphereCommon,SkyAtmosphereVS]}),n=new ShaderSource({defines:o.concat("SKY_FROM_SPACE"),sources:[SkyAtmosphereCommon,SkyAtmosphereFS]}),this._spSkyFromSpace=ShaderProgram.fromCache({context:i,vertexShaderSource:a,fragmentShaderSource:n}),a=new ShaderSource({defines:o.concat("SKY_FROM_ATMOSPHERE"),sources:[SkyAtmosphereCommon,SkyAtmosphereVS]}),n=new ShaderSource({defines:o.concat("SKY_FROM_ATMOSPHERE"),sources:[SkyAtmosphereCommon,SkyAtmosphereFS]}),this._spSkyFromAtmosphere=ShaderProgram.fromCache({context:i,vertexShaderSource:a,fragmentShaderSource:n}));e=e.camera.positionWC;return Cartesian3.magnitude(e)>this._radiiAndDynamicAtmosphereColor.x?t.shaderProgram=this._spSkyFromSpace:t.shaderProgram=this._spSkyFromAtmosphere,t}}},SkyAtmosphere.prototype.isDestroyed=function(){return!1},SkyAtmosphere.prototype.destroy=function(){var e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyFromSpace=this._spSkyFromSpace&&this._spSkyFromSpace.destroy(),this._spSkyFromAtmosphere=this._spSkyFromAtmosphere&&this._spSkyFromAtmosphere.destroy(),destroyObject(this)};var SkyBoxFS="uniform samplerCube u_cubeMap;\nvarying vec3 v_texCoord;\nvoid main()\n{\nvec4 color = textureCube(u_cubeMap, normalize(v_texCoord));\ngl_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\n}\n",SkyBoxVS="attribute vec3 position;\nuniform mat3 u_rotateMatrix;\nvarying vec3 v_texCoord;\nvoid main()\n{\nvec3 p = czm_viewRotation * u_rotateMatrix * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\ngl_Position = czm_projection * vec4(p, 1.0);\nv_texCoord = position.xyz;\n}\n";function SkyBox(e){this.sources=e.sources,this._sources=void 0,this.nearGround=e.nearGround,this.show=defaultValue(e.show,!0),this._command=new DrawCommand({modelMatrix:Matrix4.clone(Matrix4.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0}function SphereEmitter(e){e=defaultValue(e,1),this._radius=defaultValue(e,1)}function StyleExpression(){}SkyBox.prototype.update=function(e,t){var i=this;if(this.show&&(e.mode===SceneMode$1.SCENE3D||e.mode===SceneMode$1.MORPHING)&&e.passes.render){var r=e.context;this._sources!==this.sources&&(this._sources=this.sources,"string"==typeof(n=this.sources).positiveX?loadCubeMap(r,this._sources).then(function(e){i._cubeMap=i._cubeMap&&i._cubeMap.destroy(),i._cubeMap=e}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new CubeMap({context:r,source:n})));var n,a,o=this._command;if(defined(o.vertexArray)||(o.uniformMap={u_cubeMap:function(){return i._cubeMap},u_rotateMatrix:function(){return i.nearGround?(o.modelMatrix=Transforms.eastNorthUpToFixedFrame(e.camera._positionWC),Matrix4.getMatrix3(o.modelMatrix,new Matrix3)):Matrix3.IDENTITY}},n=BoxGeometry.createGeometry(BoxGeometry.fromDimensions({dimensions:new Cartesian3(2,2,2),vertexFormat:VertexFormat.POSITION_ONLY})),a=this._attributeLocations=GeometryPipeline.createAttributeLocations(n),o.vertexArray=VertexArray.fromGeometry({context:r,geometry:n,attributeLocations:a,bufferUsage:BufferUsage$1.STATIC_DRAW}),o.renderState=RenderState.fromCache({blending:BlendingState$1.ALPHA_BLEND})),defined(o.shaderProgram)&&this._useHdr===t||(a=new ShaderSource({defines:[t?"HDR":""],sources:[SkyBoxFS]}),o.shaderProgram=ShaderProgram.fromCache({context:r,vertexShaderSource:SkyBoxVS,fragmentShaderSource:a,attributeLocations:this._attributeLocations}),this._useHdr=t),defined(this._cubeMap))return o}},SkyBox.prototype.isDestroyed=function(){return!1},SkyBox.prototype.destroy=function(){var e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),destroyObject(this)},Object.defineProperties(SphereEmitter.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}}),SphereEmitter.prototype.emit=function(e){var t=CesiumMath.randomBetween(0,CesiumMath.TWO_PI),i=CesiumMath.randomBetween(0,CesiumMath.PI),r=CesiumMath.randomBetween(0,this._radius),n=r*Math.cos(t)*Math.sin(i),t=r*Math.sin(t)*Math.sin(i),i=r*Math.cos(i);e.position=Cartesian3.fromElements(n,t,i,e.position),e.velocity=Cartesian3.normalize(e.position,e.velocity)},StyleExpression.prototype.evaluate=function(e,t){DeveloperError.throwInstantiationError()},StyleExpression.prototype.evaluateColor=function(e,t){DeveloperError.throwInstantiationError()},StyleExpression.prototype.getShaderFunction=function(e,t,i,r){DeveloperError.throwInstantiationError()};var SunFS="uniform sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nvec4 color = texture2D(u_texture, v_textureCoordinates);\ngl_FragColor = czm_gammaCorrect(color);\n}\n",SunTextureFS="uniform float u_radiusTS;\nvarying vec2 v_textureCoordinates;\nvec2 rotate(vec2 p, vec2 direction)\n{\nreturn vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);\n}\nvec4 addBurst(vec2 position, vec2 direction, float lengthScalar)\n{\nvec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);\nfloat radius = length(rotatedPosition) * lengthScalar;\nfloat burst = 1.0 - smoothstep(0.0, 0.55, radius);\nreturn vec4(burst);\n}\nvoid main()\n{\nfloat lengthScalar = 2.0 / sqrt(2.0);\nvec2 position = v_textureCoordinates - vec2(0.5);\nfloat radius = length(position) * lengthScalar;\nfloat surface = step(radius, u_radiusTS);\nvec4 color = vec4(vec2(1.0), surface + 0.2, surface);\nfloat glow = 1.0 - smoothstep(0.0, 0.55, radius);\ncolor.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;\nvec4 burst = vec4(0.0);\nburst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar);\nburst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar);\nburst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar);\nburst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar);\nburst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar);\nburst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar);\ncolor += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;\ngl_FragColor = clamp(color, vec4(0.0), vec4(1.0));\n}\n",SunVS="attribute vec2 direction;\nuniform float u_size;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nvec4 position;\nif (czm_morphTime == 1.0)\n{\nposition = vec4(czm_sunPositionWC, 1.0);\n}\nelse\n{\nposition = vec4(czm_sunPositionColumbusView.zxy, 1.0);\n}\nvec4 positionEC = czm_view * position;\nvec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\nvec2 halfSize = vec2(u_size * 0.5);\nhalfSize *= ((direction * 2.0) - 1.0);\ngl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);\nv_textureCoordinates = direction;\n}\n";function Sun(){this.show=!0,this._drawCommand=new DrawCommand({primitiveType:PrimitiveType$1.TRIANGLES,boundingVolume:new BoundingSphere,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new BoundingSphere,this._boundingVolume2D=new BoundingSphere,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;var e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(Sun.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var scratchPositionWC=new Cartesian2,scratchLimbWC=new Cartesian2,scratchPositionEC=new Cartesian4,scratchCartesian4=new Cartesian4;function TileBoundingVolume(){}function TileCoordinatesImageryProvider(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this._tilingScheme=defined(e.tilingScheme)?e.tilingScheme:new GeographicTilingScheme({ellipsoid:e.ellipsoid}),this._color=defaultValue(e.color,Color.YELLOW),this._errorEvent=new Event,this._tileWidth=defaultValue(e.tileWidth,256),this._tileHeight=defaultValue(e.tileHeight,256),this._readyPromise=when.resolve(!0),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0}function TileDiscardPolicy(e){DeveloperError.throwInstantiationError()}Sun.prototype.update=function(e,t,i){if(this.show){var r=e.mode;if(r!==SceneMode$1.SCENE2D&&r!==SceneMode$1.MORPHING&&e.passes.render){var n,a=e.context,o=t.viewport.width,s=t.viewport.height;defined(this._texture)&&o===this._drawingBufferWidth&&s===this._drawingBufferHeight&&!this._glowFactorDirty&&i===this._useHdr||(this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=o,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=i,s=Math.max(o,s),s=Math.pow(2,Math.ceil(Math.log(s)/Math.log(2))-2),s=Math.max(1,s),l=i?a.halfFloatingPointTexture?PixelDatatype$1.HALF_FLOAT:PixelDatatype$1.FLOAT:PixelDatatype$1.UNSIGNED_BYTE,this._texture=new Texture({context:a,width:s,height:s,pixelFormat:PixelFormat$1.RGBA,pixelDatatype:l}),this._glowLengthTS=5*this._glowFactor,this._radiusTS=1/(1+2*this._glowLengthTS)*.5,l={u_radiusTS:function(){return n._radiusTS}},(n=this)._commands.computeCommand=new ComputeCommand({fragmentShaderSource:SunTextureFS,outputTexture:this._texture,uniformMap:l,persists:!1,owner:this,postExecute:function(){n._commands.computeCommand=void 0}}));var l=this._drawCommand;defined(l.vertexArray)||(h={direction:0},(d=new Uint8Array(8))[0]=0,d[1]=0,d[2]=255,d[3]=0,d[4]=255,d[5]=255,d[6]=0,d[7]=255,c=Buffer$1.createVertexBuffer({context:a,typedArray:d,usage:BufferUsage$1.STATIC_DRAW}),u=[{index:h.direction,vertexBuffer:c,componentsPerAttribute:2,normalize:!0,componentDatatype:ComponentDatatype$1.UNSIGNED_BYTE}],d=Buffer$1.createIndexBuffer({context:a,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:BufferUsage$1.STATIC_DRAW,indexDatatype:IndexDatatype$1.UNSIGNED_SHORT}),l.vertexArray=new VertexArray({context:a,attributes:u,indexBuffer:d}),l.shaderProgram=ShaderProgram.fromCache({context:a,vertexShaderSource:SunVS,fragmentShaderSource:SunFS,attributeLocations:h}),l.renderState=RenderState.fromCache({blending:BlendingState$1.ALPHA_BLEND}),l.uniformMap=this._uniformMap);var c=a.uniformState.sunPositionWC,u=a.uniformState.sunPositionColumbusView,d=this._boundingVolume,h=this._boundingVolume2D;Cartesian3.clone(c,d.center),h.center.x=u.z,h.center.y=u.x,h.center.z=u.y,d.radius=CesiumMath.SOLAR_RADIUS+CesiumMath.SOLAR_RADIUS*this._glowLengthTS,h.radius=d.radius,r===SceneMode$1.SCENE3D?BoundingSphere.clone(d,l.boundingVolume):r===SceneMode$1.COLUMBUS_VIEW&&BoundingSphere.clone(h,l.boundingVolume);c=SceneTransforms.computeActualWgs84Position(e,c,scratchCartesian4),c=Cartesian3.magnitude(Cartesian3.subtract(c,e.camera.position,scratchCartesian4)),e=a.uniformState.projection,a=scratchPositionEC;a.x=0,a.y=0,a.z=-c,a.w=1;c=Matrix4.multiplyByVector(e,a,scratchCartesian4),c=SceneTransforms.clipToGLWindowCoordinates(t.viewport,c,scratchPositionWC);a.x=CesiumMath.SOLAR_RADIUS;a=Matrix4.multiplyByVector(e,a,scratchCartesian4),a=SceneTransforms.clipToGLWindowCoordinates(t.viewport,a,scratchLimbWC);return this._size=Cartesian2.magnitude(Cartesian2.subtract(a,c,scratchCartesian4)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands}}},Sun.prototype.isDestroyed=function(){return!1},Sun.prototype.destroy=function(){var e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),destroyObject(this)},TileBoundingVolume.prototype.boundingVolume=void 0,TileBoundingVolume.prototype.boundingSphere=void 0,TileBoundingVolume.prototype.distanceToCamera=function(e){DeveloperError.throwInstantiationError()},TileBoundingVolume.prototype.intersectPlane=function(e){DeveloperError.throwInstantiationError()},TileBoundingVolume.prototype.createDebugVolume=function(e){DeveloperError.throwInstantiationError()},Object.defineProperties(TileCoordinatesImageryProvider.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return!0}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}}),TileCoordinatesImageryProvider.prototype.getTileCredits=function(e,t,i){},TileCoordinatesImageryProvider.prototype.requestImage=function(e,t,i,r){var n=document.createElement("canvas");n.width=256,n.height=256;var a=n.getContext("2d"),o=this._color.toCssColorString();return a.strokeStyle=o,a.lineWidth=2,a.strokeRect(1,1,255,255),a.font="bold 25px Arial",a.textAlign="center",a.fillStyle=o,a.fillText("L: "+i,124,86),a.fillText("X: "+e,124,136),a.fillText("Y: "+t,124,186),n},TileCoordinatesImageryProvider.prototype.pickFeatures=function(e,t,i,r,n){},TileDiscardPolicy.prototype.isReady=DeveloperError.throwInstantiationError,TileDiscardPolicy.prototype.shouldDiscardImage=DeveloperError.throwInstantiationError;var TileState={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},TileState$1=Object.freeze(TileState);function TimeDynamicPointCloud(e){e=defaultValue(e,defaultValue.EMPTY_OBJECT),this.show=defaultValue(e.show,!0),this.modelMatrix=Matrix4.clone(defaultValue(e.modelMatrix,Matrix4.IDENTITY)),this.shadows=defaultValue(e.shadows,ShadowMode$1.ENABLED),this.maximumMemoryUsage=defaultValue(e.maximumMemoryUsage,256),this.shading=new PointCloudShading(e.shading),this.style=e.style,this.frameFailed=new Event,this.frameChanged=new Event,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new PointCloudEyeDomeLighting,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._readyPromise=when.defer(),this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=arrayFill(new Array(5),0),this._runningAverage=0}function getFragmentShaderLoaded(e){return"uniform vec4 czm_pickColor;\n"+e}function getUniformMapLoaded(t){return function(e){return combine$2(e,{czm_pickColor:function(){return t._pickId.color}})}}function getPickIdLoaded(){return"czm_pickColor"}Object.defineProperties(TimeDynamicPointCloud.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){ClippingPlaneCollection.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(defined(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}},readyPromise:{get:function(){return this._readyPromise.promise}}}),TimeDynamicPointCloud.prototype.makeStyleDirty=function(){this._styleDirty=!0},TimeDynamicPointCloud.prototype._getAverageLoadTime=function(){return 0===this._runningLength?.05:this._runningAverage};var scratchDate=new JulianDate;function getClockMultiplier(e){var t=e._clock,e=t.canAnimate&&t.shouldAnimate,t=t.multiplier;return e?t:0}function getIntervalIndex(e,t){return e._intervals.indexOf(t.start)}function getNextInterval(e,t){var i=e._intervals,r=e._clock,n=getClockMultiplier(e);if(0!==n){var a=e._getAverageLoadTime(),a=JulianDate.addSeconds(r.currentTime,a*n,scratchDate),a=i.indexOf(a);return a===getIntervalIndex(e,t)&&(0<=n?++a:--a),i.get(a)}}function getCurrentInterval(e){var t=e._intervals,e=e._clock.currentTime,e=t.indexOf(e);return t.get(e)}function reachedInterval(e,t,i){var r=getClockMultiplier(e),t=getIntervalIndex(e,t),i=getIntervalIndex(e,i);return 0<=r?i<=t:t<=i}function handleFrameFailure(t,i){return function(e){e=defined(e.message)?e.message:e.toString();0<t.frameFailed.numberOfListeners?t.frameFailed.raiseEvent({uri:i,message:e}):(console.log("A frame failed to load: "+i),console.log("Error: "+e))}}function requestFrame(t,e,i){var r,n=getIntervalIndex(t,e),a=t._frames,o=a[n];return defined(o)||(r=defined(r=e.data.transform)?Matrix4.fromArray(r):void 0,e=e.data.uri,o={pointCloud:void 0,transform:r,timestamp:getTimestamp$1(),sequential:!0,ready:!1,touchedFrameNumber:i.frameNumber},a[n]=o,Resource.fetchArrayBuffer({url:e}).then(function(e){return o.pointCloud=new PointCloud({arrayBuffer:e,cull:!0,fragmentShaderLoaded:getFragmentShaderLoaded,uniformMapLoaded:getUniformMapLoaded(t),pickIdLoaded:getPickIdLoaded}),o.pointCloud.readyPromise}).otherwise(handleFrameFailure(t,e))),o}function updateAverageLoadTime(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}function prepareFrame(e,t,i,r){t.touchedFrameNumber<r.frameNumber-1&&(t.sequential=!1);var n,a,o=t.pointCloud;defined(o)&&!t.ready&&(a=(n=r.commandList).length,renderFrame(e,t,i,r),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,n.length=a,t.sequential&&updateAverageLoadTime(e,(getTimestamp$1()-t.timestamp)/1e3))),t.touchedFrameNumber=r.frameNumber}var scratchModelMatrix=new Matrix4;function getGeometricError(e,t){e=e.shading;return defined(e)&&defined(e.baseResolution)?e.baseResolution:defined(t.boundingSphere)?CesiumMath.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function getMaximumAttenuation(e){e=e.shading;return defined(e)&&defined(e.maximumAttenuation)?e.maximumAttenuation:10}var defaultShading=new PointCloudShading;function renderFrame(e,t,i,r){var n=defaultValue(e.shading,defaultShading),a=t.pointCloud,o=defaultValue(t.transform,Matrix4.IDENTITY);a.modelMatrix=Matrix4.multiplyTransformation(e.modelMatrix,o,scratchModelMatrix),a.style=e.style,a.time=i.timeSinceLoad,a.shadows=e.shadows,a.clippingPlanes=e._clippingPlanes,a.isClipped=i.isClipped,a.attenuation=n.attenuation,a.backFaceCulling=n.backFaceCulling,a.normalShading=n.normalShading,a.geometricError=getGeometricError(e,a),a.geometricErrorScale=n.geometricErrorScale,a.maximumAttenuation=getMaximumAttenuation(e),a.update(r),t.touchedFrameNumber=r.frameNumber}function loadFrame(e,t,i,r){prepareFrame(e,requestFrame(e,t,r),i,r)}function getUnloadCondition(t){return function(e){return e.touchedFrameNumber<t.frameNumber}}function unloadFrames(e,t){for(var i=e._frames,r=i.length,n=0;n<r;++n){var a,o=i[n];defined(o)&&(defined(t)&&!t(o)||(a=o.pointCloud,o.ready&&(e._totalMemoryUsageInBytes-=a.geometryByteLength),defined(a)&&a.destroy(),o===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),i[n]=void 0))}}function getFrame(e,t){t=getIntervalIndex(e,t),t=e._frames[t];if(defined(t)&&t.ready)return t}function updateInterval(e,t,i,r,n){return defined(i)&&(i.ready||(loadFrame(e,t,r,n),i.ready))}function getNearestReadyInterval(e,t,i,r,n){var a,o,s=e._intervals,l=e._frames,i=getIntervalIndex(e,i),c=getIntervalIndex(e,t);if(c<=i){for(a=i;c<=a;--a)if(updateInterval(e,o=s.get(a),l[a],r,n))return o}else for(a=i;a<=c;++a)if(updateInterval(e,o=s.get(a),l[a],r,n))return o;return t}function setFramesDirty(e,t,i){for(var r=e._frames,n=r.length,a=0;a<n;++a){var o=r[a];defined(o)&&defined(o.pointCloud)&&(o.pointCloud.clippingPlanesDirty=t,o.pointCloud.styleDirty=i)}}var updateState={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};TimeDynamicPointCloud.prototype.update=function(e){var t,i,r,n,a,o,s,l,c,u,d;e.mode!==SceneMode$1.MORPHING&&this.show&&(defined(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),defined(this._loadTimestamp)||(this._loadTimestamp=JulianDate.clone(e.time)),o=Math.max(1e3*JulianDate.secondsDifference(e.time,this._loadTimestamp),0),n=0,u=!1,(s=defined(l=this._clippingPlanes)&&l.enabled)&&(l.update(e),n=l.clippingPlanesState),this._clippingPlanesState!==n&&(this._clippingPlanesState=n,u=!0),a=this._styleDirty,this._styleDirty=!1,(u||a)&&setFramesDirty(this,u,a),updateState.timeSinceLoad=o,updateState.isClipped=s,t=this.shading,i=this._pointCloudEyeDomeLighting,r=(d=e.commandList).length,l=this._previousInterval,n=this._nextInterval,defined(u=getCurrentInterval(this))&&(a=!1,s=0===(o=getClockMultiplier(this)),o!==this._clockMultiplier&&(a=!0,this._clockMultiplier=o),defined(l)&&!s||(l=u),defined(n)&&!a&&!reachedInterval(this,u,n)||(n=getNextInterval(this,u)),defined(u=getFrame(this,l=getNearestReadyInterval(this,l,u,updateState,e)))||(loadFrame(this,l,updateState,e),u=this._lastRenderedFrame),defined(u)&&renderFrame(this,u,updateState,e),defined(n)&&loadFrame(this,n,updateState,e),c=this,defined(u)&&!defined(this._lastRenderedFrame)&&e.afterRender.push(function(){c._readyPromise.resolve(c)}),defined(u)&&u!==this._lastRenderedFrame&&0<c.frameChanged.numberOfListeners&&e.afterRender.push(function(){c.frameChanged.raiseEvent(c)}),this._previousInterval=l,this._nextInterval=n,this._lastRenderedFrame=u,u=this._totalMemoryUsageInBytes,1024*this.maximumMemoryUsage*1024<u&&unloadFrames(this,getUnloadCondition(e)),d=d.length-r,defined(t)&&t.attenuation&&t.eyeDomeLighting&&0<d&&i.update(e,r,t,this.boundingSphere)))},TimeDynamicPointCloud.prototype.isDestroyed=function(){return!1},TimeDynamicPointCloud.prototype.destroy=function(){return unloadFrames(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),destroyObject(this)};var ViewportQuadFS="varying vec2 v_textureCoordinates;\nvoid main()\n{\nczm_materialInput materialInput;\nmaterialInput.s = v_textureCoordinates.s;\nmaterialInput.st = v_textureCoordinates;\nmaterialInput.str = vec3(v_textureCoordinates, 0.0);\nmaterialInput.normalEC = vec3(0.0, 0.0, -1.0);\nczm_material material = czm_getMaterial(materialInput);\ngl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n}\n",oldValue;function ViewportQuad(e,t){this.show=!0,defined(e)||(e=new BoundingRectangle),this.rectangle=BoundingRectangle.clone(e),defined(t)||(t=Material.fromType(Material.ColorType,{color:new Color(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}ViewportQuad.prototype.update=function(e){var t,i;this.show&&(defined(i=this._rs)&&BoundingRectangle.equals(i.viewport,this.rectangle)||(this._rs=RenderState.fromCache({blending:BlendingState$1.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render&&(t=e.context,this._material===this.material&&defined(this._overlayCommand)||(this._material=this.material,defined(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy(),i=new ShaderSource({sources:[this._material.shaderSource,ViewportQuadFS]}),this._overlayCommand=t.createViewportQuadCommand(i,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Pass$1.OVERLAY),this._material.update(t),this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)))},ViewportQuad.prototype.isDestroyed=function(){return!1},ViewportQuad.prototype.destroy=function(){return defined(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),destroyObject(this)},"undefined"!=typeof ko&&(oldValue=ko),function(R){var S=this||(0,eval)("this"),x=S.document,v=S.navigator,T=S.jQuery,b=S.JSON;T||"undefined"==typeof jQuery||(T=jQuery),function(e,r){function i(e,t){return null===e||typeof e in l?e===t:!1}function a(e,t){var i;return function(){i||(i=I.a.setTimeout(function(){i=R;e()},t))}}function o(e,t){var i;return function(){clearTimeout(i);i=I.a.setTimeout(e,t)}}function c(e,t){t&&"change"!==t?"beforeChange"===t?this.pc(e):this.gb(e,t):this.qc(e)}function n(e,t){null!==t&&t.s&&t.s()}function s(e,t){var i=this.qd,r=i[p];r.ra||(this.Qb&&this.mb[t]?(i.uc(t,e,this.mb[t]),this.mb[t]=null,--this.Qb):r.I[t]||i.uc(t,e,r.J?{da:e}:i.$c(e)),e.Ja&&e.gd())}var I="undefined"!==typeof e?e:{};I.b=function(e,t){for(var i=e.split("."),r=I,n=0;n<i.length-1;n++)r=r[i[n]];r[i[i.length-1]]=t},I.L=function(e,t,i){e[t]=i},I.version="3.5.1",I.b("version",I.version),I.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},I.a=function(){function d(e,t){for(var i in e)a.call(e,i)&&t(i,e[i])}function e(e,t){if(t)for(var i in t)a.call(t,i)&&(e[i]=t[i]);return e}function t(e,t){e.__proto__=t;return e}function n(e,t,i,r){var n=e[t].match(u)||[];I.a.D(i.match(u),function(e){I.a.Na(n,e,r)});e[t]=n.join(" ")}var a=Object.prototype.hasOwnProperty,i={__proto__:[]}instanceof Array,r="function"===typeof Symbol,o={},s={};o[v&&/Firefox\/2/i.test(v.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];o.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");d(o,function(e,t){if(t.length)for(var i=0,r=t.length;i<r;i++)s[t[i]]=e});var l={propertychange:!0},c=x&&function(){for(var e=3,t=x.createElement("div"),i=t.getElementsByTagName("i");t.innerHTML="\x3c!--[if gt IE "+ ++e+"]><i></i><![endif]--\x3e",i[0];);return 4<e?e:R}(),u=/\S+/g,h;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(e,t,i){for(var r=0,n=e.length;r<n;r++)t.call(i,e[r],r,e)},A:"function"==typeof Array.prototype.indexOf?function(e,t){return Array.prototype.indexOf.call(e,t)}:function(e,t){for(var i=0,r=e.length;i<r;i++)if(e[i]===t)return i;return-1},Lb:function(e,t,i){for(var r=0,n=e.length;r<n;r++)if(t.call(i,e[r],r,e))return e[r];return R},Pa:function(e,t){var i=I.a.A(e,t);0<i?e.splice(i,1):0===i&&e.shift()},wc:function(e){var t=[];e&&I.a.D(e,function(e){0>I.a.A(t,e)&&t.push(e)});return t},Mb:function(e,t,i){var r=[];if(e)for(var n=0,a=e.length;n<a;n++)r.push(t.call(i,e[n],n));return r},jb:function(e,t,i){var r=[];if(e)for(var n=0,a=e.length;n<a;n++)t.call(i,e[n],n)&&r.push(e[n]);return r},Nb:function(e,t){if(t instanceof Array)e.push.apply(e,t);else for(var i=0,r=t.length;i<r;i++)e.push(t[i]);return e},Na:function(e,t,i){var r=I.a.A(I.a.bc(e),t);0>r?i&&e.push(t):i||e.splice(r,1)},Ba:i,extend:e,setPrototypeOf:t,Ab:i?t:e,P:d,Ga:function(e,t,i){if(!e)return e;var r={},n;for(n in e)a.call(e,n)&&(r[n]=t.call(i,e[n],n,e));return r},Tb:function(e){for(;e.firstChild;)I.removeNode(e.firstChild)},Yb:function(e){e=I.a.la(e);for(var t=(e[0]&&e[0].ownerDocument||x).createElement("div"),i=0,r=e.length;i<r;i++)t.appendChild(I.oa(e[i]));return t},Ca:function(e,t){for(var i=0,r=e.length,n=[];i<r;i++){var a=e[i].cloneNode(!0);n.push(t?I.oa(a):a)}return n},va:function(e,t){I.a.Tb(e);if(t)for(var i=0,r=t.length;i<r;i++)e.appendChild(t[i])},Xc:function(e,t){var i=e.nodeType?[e]:e;if(0<i.length){for(var r=i[0],n=r.parentNode,a=0,o=t.length;a<o;a++)n.insertBefore(t[a],r);a=0;for(o=i.length;a<o;a++)I.removeNode(i[a])}},Ua:function(e,t){if(e.length){for(t=8===t.nodeType&&t.parentNode||t;e.length&&e[0].parentNode!==t;)e.splice(0,1);for(;1<e.length&&e[e.length-1].parentNode!==t;)e.length--;if(1<e.length){var i=e[0],r=e[e.length-1];for(e.length=0;i!==r;)e.push(i),i=i.nextSibling;e.push(r)}}return e},Zc:function(e,t){7>c?e.setAttribute("selected",t):e.selected=t},Db:function(e){return null===e||e===R?"":e.trim?e.trim():e.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(e,t){e=e||"";return t.length>e.length?!1:e.substring(0,t.length)===t},vd:function(e,t){if(e===t)return!0;if(11===e.nodeType)return!1;if(t.contains)return t.contains(1!==e.nodeType?e.parentNode:e);if(t.compareDocumentPosition)return 16==(t.compareDocumentPosition(e)&16);for(;e&&e!=t;)e=e.parentNode;return!!e},Sb:function(e){return I.a.vd(e,e.ownerDocument.documentElement)},kd:function(e){return!!I.a.Lb(e,I.a.Sb)},R:function(e){return e&&e.tagName&&e.tagName.toLowerCase()},Ac:function(e){return I.onError?function(){try{return e.apply(this,arguments)}catch(e){throw I.onError&&I.onError(e),e}}:e},setTimeout:function(e,t){return setTimeout(I.a.Ac(e),t)},Gc:function(e){setTimeout(function(){I.onError&&I.onError(e);throw e},0)},B:function(t,e,i){var r=I.a.Ac(i);i=l[e];if(I.options.useOnlyNativeEvents||i||!T)if(i||"function"!=typeof t.addEventListener)if("undefined"!=typeof t.attachEvent){var n=function(e){r.call(t,e)},a="on"+e;t.attachEvent(a,n);I.a.K.za(t,function(){t.detachEvent(a,n)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else t.addEventListener(e,r,!1);else h||(h="function"==typeof T(t).on?"on":"bind"),T(t)[h](e,r)},Fb:function(e,t){if(!e||!e.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var i;"input"===I.a.R(e)&&e.type&&"click"==t.toLowerCase()?(i=e.type,i="checkbox"==i||"radio"==i):i=!1;if(I.options.useOnlyNativeEvents||!T||i)if("function"==typeof x.createEvent)if("function"==typeof e.dispatchEvent)i=x.createEvent(s[t]||"HTMLEvents"),i.initEvent(t,!0,!0,S,0,0,0,0,0,!1,!1,!1,!1,0,e),e.dispatchEvent(i);else throw Error("The supplied element doesn't support dispatchEvent");else if(i&&e.click)e.click();else if("undefined"!=typeof e.fireEvent)e.fireEvent("on"+t);else throw Error("Browser doesn't support triggering events");else T(e).trigger(t)},f:function(e){return I.O(e)?e():e},bc:function(e){return I.O(e)?e.v():e},Eb:function(t,e,i){var r;e&&("object"===typeof t.classList?(r=t.classList[i?"add":"remove"],I.a.D(e.match(u),function(e){r.call(t.classList,e)})):"string"===typeof t.className.baseVal?n(t.className,"baseVal",e,i):n(t,"className",e,i))},Bb:function(e,t){var i=I.a.f(t);if(null===i||i===R)i="";var r=I.h.firstChild(e);!r||3!=r.nodeType||I.h.nextSibling(r)?I.h.va(e,[e.ownerDocument.createTextNode(i)]):r.data=i;I.a.Ad(e)},Yc:function(e,t){e.name=t;if(7>=c)try{var i=e.name.replace(/[&<>'"]/g,function(e){return"&#"+e.charCodeAt(0)+";"});e.mergeAttributes(x.createElement("<input name='"+i+"'/>"),!1)}catch(e){}},Ad:function(e){9<=c&&(e=1==e.nodeType?e:e.parentNode,e.style&&(e.style.zoom=e.style.zoom))},wd:function(e){if(c){var t=e.style.width;e.style.width=0;e.style.width=t}},Pd:function(e,t){e=I.a.f(e);t=I.a.f(t);for(var i=[],r=e;r<=t;r++)i.push(r);return i},la:function(e){for(var t=[],i=0,r=e.length;i<r;i++)t.push(e[i]);return t},Da:function(e){return r?Symbol(e):e},Zd:6===c,$d:7===c,W:c,Lc:function(e,t){for(var i=I.a.la(e.getElementsByTagName("input")).concat(I.a.la(e.getElementsByTagName("textarea"))),r="string"==typeof t?function(e){return e.name===t}:function(e){return t.test(e.name)},n=[],a=i.length-1;0<=a;a--)r(i[a])&&n.push(i[a]);return n},Nd:function(e){return"string"==typeof e&&(e=I.a.Db(e))?b&&b.parse?b.parse(e):new Function("return "+e)():null},hc:function(e,t,i){if(!b||!b.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return b.stringify(I.a.f(e),t,i)},Od:function(e,t,i){i=i||{};var r=i.params||{},n=i.includeFields||this.Jc,a=e;if("object"==typeof e&&"form"===I.a.R(e))for(var a=e.action,o=n.length-1;0<=o;o--)for(var s=I.a.Lc(e,n[o]),l=s.length-1;0<=l;l--)r[s[l].name]=s[l].value;t=I.a.f(t);var c=x.createElement("form");c.style.display="none";c.action=a;c.method="post";for(var u in t)e=x.createElement("input"),e.type="hidden",e.name=u,e.value=I.a.hc(I.a.f(t[u])),c.appendChild(e);d(r,function(e,t){var i=x.createElement("input");i.type="hidden";i.name=e;i.value=t;c.appendChild(i)});x.body.appendChild(c);i.submitter?i.submitter(c):c.submit();setTimeout(function(){c.parentNode.removeChild(c)},0)}}}(),I.b("utils",I.a),I.b("utils.arrayForEach",I.a.D),I.b("utils.arrayFirst",I.a.Lb),I.b("utils.arrayFilter",I.a.jb),I.b("utils.arrayGetDistinctValues",I.a.wc),I.b("utils.arrayIndexOf",I.a.A),I.b("utils.arrayMap",I.a.Mb),I.b("utils.arrayPushAll",I.a.Nb),I.b("utils.arrayRemoveItem",I.a.Pa),I.b("utils.cloneNodes",I.a.Ca),I.b("utils.createSymbolOrString",I.a.Da),I.b("utils.extend",I.a.extend),I.b("utils.fieldsIncludedWithJsonPost",I.a.Jc),I.b("utils.getFormFields",I.a.Lc),I.b("utils.objectMap",I.a.Ga),I.b("utils.peekObservable",I.a.bc),I.b("utils.postJson",I.a.Od),I.b("utils.parseJson",I.a.Nd),I.b("utils.registerEventHandler",I.a.B),I.b("utils.stringifyJson",I.a.hc),I.b("utils.range",I.a.Pd),I.b("utils.toggleDomNodeCssClass",I.a.Eb),I.b("utils.triggerEvent",I.a.Fb),I.b("utils.unwrapObservable",I.a.f),I.b("utils.objectForEach",I.a.P),I.b("utils.addOrRemoveItem",I.a.Na),I.b("utils.setTextContent",I.a.Bb),I.b("unwrap",I.a.f),Function.prototype.bind||(Function.prototype.bind=function(t){var i=this;if(1===arguments.length)return function(){return i.apply(t,arguments)};var r=Array.prototype.slice.call(arguments,1);return function(){var e=r.slice(0);e.push.apply(e,arguments);return i.apply(t,e)}}),I.a.g=new function(){var r=0,n="__ko__"+(new Date).getTime(),a={},o,e;I.a.W?(o=function(e,t){var i=e[n];if(!i||"null"===i||!a[i]){if(!t)return R;i=e[n]="ko"+r++;a[i]={}}return a[i]},e=function(e){var t=e[n];return t?(delete a[t],e[n]=null,!0):!1}):(o=function(e,t){var i=e[n];!i&&t&&(i=e[n]={});return i},e=function(e){return e[n]?(delete e[n],!0):!1});return{get:function(e,t){var i=o(e,!1);return i&&i[t]},set:function(e,t,i){(e=o(e,i!==R))&&(e[t]=i)},Ub:function(e,t,i){e=o(e,!0);return e[t]||(e[t]=i)},clear:e,Z:function(){return r+++n}}},I.b("utils.domData",I.a.g),I.b("utils.domData.clear",I.a.g.clear),I.a.K=new function(){function r(e,t){var i=I.a.g.get(e,o);i===R&&t&&(i=[],I.a.g.set(e,o,i));return i}function a(e){var t=r(e,!1);if(t)for(var t=t.slice(0),i=0;i<t.length;i++)t[i](e);I.a.g.clear(e);I.a.K.cleanExternalData(e);s[e.nodeType]&&n(e.childNodes,!0)}function n(e,t){for(var i=[],r,n=0;n<e.length;n++)if(!t||8===e[n].nodeType)if(a(i[i.length]=r=e[n]),e[n]!==r)for(;n--&&-1==I.a.A(i,e[n]););}var o=I.a.g.Z(),t={1:!0,8:!0,9:!0},s={1:!0,9:!0};return{za:function(e,t){if("function"!=typeof t)throw Error("Callback must be a function");r(e,!0).push(t)},yb:function(e,t){var i=r(e,!1);i&&(I.a.Pa(i,t),0==i.length&&I.a.g.set(e,o,R))},oa:function(e){I.u.G(function(){t[e.nodeType]&&(a(e),s[e.nodeType]&&n(e.getElementsByTagName("*")))});return e},removeNode:function(e){I.oa(e);e.parentNode&&e.parentNode.removeChild(e)},cleanExternalData:function(e){T&&"function"==typeof T.cleanData&&T.cleanData([e])}}},I.oa=I.a.K.oa,I.removeNode=I.a.K.removeNode,I.b("cleanNode",I.oa),I.b("removeNode",I.removeNode),I.b("utils.domNodeDisposal",I.a.K),I.b("utils.domNodeDisposal.addDisposeCallback",I.a.K.za),I.b("utils.domNodeDisposal.removeDisposeCallback",I.a.K.yb),function(){var s=[0,"",""],e=[1,"<table>","</table>"],t=[3,"<table><tbody><tr>","</tr></tbody></table>"],i=[1,"<select multiple='multiple'>","</select>"],l={thead:e,tbody:e,tfoot:e,tr:[2,"<table><tbody>","</tbody></table>"],td:t,th:t,option:i,optgroup:i},c=8>=I.a.W;I.a.ua=function(e,t){var i;if(T){if(T.parseHTML)i=T.parseHTML(e,t)||[];else if((i=T.clean([e],t))&&i[0]){for(var r=i[0];r.parentNode&&11!==r.parentNode.nodeType;)r=r.parentNode;r.parentNode&&r.parentNode.removeChild(r)}}else{(i=t)||(i=x);var r=i.parentWindow||i.defaultView||S,n=I.a.Db(e).toLowerCase(),a=i.createElement("div"),o;o=(n=n.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&l[n[1]]||s;n=o[0];o="ignored<div>"+o[1]+e+o[2]+"</div>";"function"==typeof r.innerShiv?a.appendChild(r.innerShiv(o)):(c&&i.body.appendChild(a),a.innerHTML=o,c&&a.parentNode.removeChild(a));for(;n--;)a=a.lastChild;i=I.a.la(a.lastChild.childNodes)}return i};I.a.Md=function(e,t){var i=I.a.ua(e,t);return i.length&&i[0].parentElement||I.a.Yb(i)};I.a.fc=function(e,t){I.a.Tb(e);t=I.a.f(t);if(null!==t&&t!==R)if("string"!=typeof t&&(t=t.toString()),T)T(e).html(t);else for(var i=I.a.ua(t,e.ownerDocument),r=0;r<i.length;r++)e.appendChild(i[r])}}(),I.b("utils.parseHtmlFragment",I.a.ua),I.b("utils.setHtml",I.a.fc),I.aa=function(){function s(e,t){if(e)if(8==e.nodeType){var i=I.aa.Uc(e.nodeValue);null!=i&&t.push({ud:e,Kd:i})}else if(1==e.nodeType)for(var i=0,r=e.childNodes,n=r.length;i<n;i++)s(r[i],t)}var r={};return{Xb:function(e){if("function"!=typeof e)throw Error("You can only pass a function to ko.memoization.memoize()");var t=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);r[t]=e;return"\x3c!--[ko_memo:"+t+"]--\x3e"},bd:function(e,t){var i=r[e];if(i===R)throw Error("Couldn't find any memo with ID "+e+". Perhaps it's already been unmemoized.");try{return i.apply(null,t||[]),!0}finally{delete r[e]}},cd:function(e,t){var i=[];s(e,i);for(var r=0,n=i.length;r<n;r++){var a=i[r].ud,o=[a];t&&I.a.Nb(o,t);I.aa.bd(i[r].Kd,o);a.nodeValue="";a.parentNode&&a.parentNode.removeChild(a)}},Uc:function(e){return(e=e.match(/^\[ko_memo\:(.*?)\]$/))?e[1]:null}}}(),I.b("memoization",I.aa),I.b("memoization.memoize",I.aa.Xb),I.b("memoization.unmemoize",I.aa.bd),I.b("memoization.parseMemoText",I.aa.Uc),I.b("memoization.unmemoizeDomNodeAndDescendants",I.aa.cd),I.na=function(){function e(){if(n)for(var e=n,t=0,i;o<n;)if(i=r[o++]){if(o>e){if(5e3<=++t){o=n;I.a.Gc(Error("'Too much recursion' after processing "+t+" task groups."));break}e=n}try{i()}catch(e){I.a.Gc(e)}}}function t(){e();o=n=r.length=0}var i,r=[],n=0,a=1,o=0;S.MutationObserver?i=function(e){var t=x.createElement("div");new MutationObserver(e).observe(t,{attributes:!0});return function(){t.classList.toggle("foo")}}(t):i=x&&"onreadystatechange"in x.createElement("script")?function(e){var t=x.createElement("script");t.onreadystatechange=function(){t.onreadystatechange=null;x.documentElement.removeChild(t);t=null;e()};x.documentElement.appendChild(t)}:function(e){setTimeout(e,0)};return{scheduler:i,zb:function(e){n||I.na.scheduler(t);r[n++]=e;return a++},cancel:function(e){e=e-(a-n);e>=o&&e<n&&(r[e]=null)},resetForTesting:function(){var e=n-o;o=n=r.length=0;return e},Sd:e}}(),I.b("tasks",I.na),I.b("tasks.schedule",I.na.zb),I.b("tasks.runEarly",I.na.Sd),I.Ta={throttle:function(t,i){t.throttleEvaluation=i;var r=null;return I.$({read:t,write:function(e){clearTimeout(r);r=I.a.setTimeout(function(){t(e)},i)}})},rateLimit:function(e,t){var i,r,n;"number"==typeof t?i=t:(i=t.timeout,r=t.method);e.Hb=!1;n="function"==typeof r?r:"notifyWhenChangesStop"==r?o:a;e.ub(function(e){return n(e,i,t)})},deferred:function(r,e){if(!0!==e)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");r.Hb||(r.Hb=!0,r.ub(function(e){var t,i=!1;return function(){if(!i){I.na.cancel(t);t=I.na.zb(e);try{i=!0,r.notifySubscribers(R,"dirty")}finally{i=!1}}}}))},notify:function(e,t){e.equalityComparer="always"==t?null:i}};var l={undefined:1,boolean:1,number:1,string:1};I.b("extenders",I.Ta),I.ic=function(e,t,i){this.da=e;this.lc=t;this.mc=i;this.Ib=!1;this.fb=this.Jb=null;I.L(this,"dispose",this.s);I.L(this,"disposeWhenNodeIsRemoved",this.l)},I.ic.prototype.s=function(){this.Ib||(this.fb&&I.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},I.ic.prototype.l=function(e){this.Jb=e;I.a.K.za(e,this.fb=this.s.bind(this))},I.T=function(){I.a.Ab(this,t);t.qb(this)};var t={qb:function(e){e.U={change:[]};e.sc=1},subscribe:function(e,t,i){var r=this;i=i||"change";var n=new I.ic(r,t?e.bind(t):e,function(){I.a.Pa(r.U[i],n);r.hb&&r.hb(i)});r.Qa&&r.Qa(i);r.U[i]||(r.U[i]=[]);r.U[i].push(n);return n},notifySubscribers:function(e,t){t=t||"change";"change"===t&&this.Gb();if(this.Wa(t)){var i="change"===t&&this.ed||this.U[t].slice(0);try{I.u.xc();for(var r=0,n;n=i[r];++r)n.Ib||n.lc(e)}finally{I.u.end()}}},ob:function(){return this.sc},Dd:function(e){return this.ob()!==e},Gb:function(){++this.sc},ub:function(e){var i=this,t=I.O(i),r,n,a,o,s;i.gb||(i.gb=i.notifySubscribers,i.notifySubscribers=c);var l=e(function(){i.Ja=!1;t&&o===i&&(o=i.nc?i.nc():i());var e=n||s&&i.sb(a,o);s=n=r=!1;e&&i.gb(a=o)});i.qc=function(e,t){t&&i.Ja||(s=!t);i.ed=i.U.change.slice(0);i.Ja=r=!0;o=e;l()};i.pc=function(e){r||(a=e,i.gb(e,"beforeChange"))};i.rc=function(){s=!0};i.gd=function(){i.sb(a,i.v(!0))&&(n=!0)}},Wa:function(e){return this.U[e]&&this.U[e].length},Bd:function(e){if(e)return this.U[e]&&this.U[e].length||0;var i=0;I.a.P(this.U,function(e,t){"dirty"!==e&&(i+=t.length)});return i},sb:function(e,t){return!this.equalityComparer||!this.equalityComparer(e,t)},toString:function(){return"[object Object]"},extend:function(e){var r=this;e&&I.a.P(e,function(e,t){var i=I.Ta[e];"function"==typeof i&&(r=i(r,t)||r)});return r}};I.L(t,"init",t.qb),I.L(t,"subscribe",t.subscribe),I.L(t,"extend",t.extend),I.L(t,"getSubscriptionsCount",t.Bd),I.a.Ba&&I.a.setPrototypeOf(t,Function.prototype),I.T.fn=t,I.Qc=function(e){return null!=e&&"function"==typeof e.subscribe&&"function"==typeof e.notifySubscribers},I.b("subscribable",I.T),I.b("isSubscribable",I.Qc),I.S=I.u=function(){function r(e){t.push(i);i=e}function n(){i=t.pop()}var t=[],i,a=0;return{xc:r,end:n,cc:function(e){if(i){if(!I.Qc(e))throw Error("Only subscribable things can act as dependencies");i.od.call(i.pd,e,e.fd||(e.fd=++a))}},G:function(e,t,i){try{return r(),e.apply(t,i||[])}finally{n()}},qa:function(){if(i)return i.o.qa()},Va:function(){if(i)return i.o.Va()},Ya:function(){if(i)return i.Ya},o:function(){if(i)return i.o}}}(),I.b("computedContext",I.S),I.b("computedContext.getDependenciesCount",I.S.qa),I.b("computedContext.getDependencies",I.S.Va),I.b("computedContext.isInitial",I.S.Ya),I.b("computedContext.registerDependency",I.S.cc),I.b("ignoreDependencies",I.Yd=I.u.G);var u=I.a.Da("_latestValue");I.ta=function(e){function t(){if(0<arguments.length)return t.sb(t[u],arguments[0])&&(t.ya(),t[u]=arguments[0],t.xa()),this;I.u.cc(t);return t[u]}t[u]=e;I.a.Ba||I.a.extend(t,I.T.fn);I.T.fn.qb(t);I.a.Ab(t,d);I.options.deferUpdates&&I.Ta.deferred(t,!0);return t};var d={equalityComparer:i,v:function(){return this[u]},xa:function(){this.notifySubscribers(this[u],"spectate");this.notifySubscribers(this[u])},ya:function(){this.notifySubscribers(this[u],"beforeChange")}};I.a.Ba&&I.a.setPrototypeOf(d,I.T.fn);var h=I.ta.Ma="__ko_proto__";d[h]=I.ta,I.O=function(e){if((e="function"==typeof e&&e[h])&&e!==d[h]&&e!==I.o.fn[h])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!e},I.Za=function(e){return"function"==typeof e&&(e[h]===d[h]||e[h]===I.o.fn[h]&&e.Nc)},I.b("observable",I.ta),I.b("isObservable",I.O),I.b("isWriteableObservable",I.Za),I.b("isWritableObservable",I.Za),I.b("observable.fn",d),I.L(d,"peek",d.v),I.L(d,"valueHasMutated",d.xa),I.L(d,"valueWillMutate",d.ya),I.Ha=function(e){e=e||[];if("object"!=typeof e||!("length"in e))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");e=I.ta(e);I.a.Ab(e,I.Ha.fn);return e.extend({trackArrayChanges:!0})},I.Ha.fn={remove:function(t){for(var e=this.v(),i=[],r="function"!=typeof t||I.O(t)?function(e){return e===t}:t,n=0;n<e.length;n++){var a=e[n];if(r(a)){0===i.length&&this.ya();if(e[n]!==a)throw Error("Array modified during remove; cannot remove item");i.push(a);e.splice(n,1);n--}}i.length&&this.xa();return i},removeAll:function(t){if(t===R){var e=this.v(),i=e.slice(0);this.ya();e.splice(0,e.length);this.xa();return i}return t?this.remove(function(e){return 0<=I.a.A(t,e)}):[]},destroy:function(t){var e=this.v(),i="function"!=typeof t||I.O(t)?function(e){return e===t}:t;this.ya();for(var r=e.length-1;0<=r;r--){var n=e[r];i(n)&&(n._destroy=!0)}this.xa()},destroyAll:function(t){return t===R?this.destroy(function(){return!0}):t?this.destroy(function(e){return 0<=I.a.A(t,e)}):[]},indexOf:function(e){var t=this();return I.a.A(t,e)},replace:function(e,t){var i=this.indexOf(e);0<=i&&(this.ya(),this.v()[i]=t,this.xa())},sorted:function(e){var t=this().slice(0);return e?t.sort(e):t.sort()},reversed:function(){return this().slice(0).reverse()}},I.a.Ba&&I.a.setPrototypeOf(I.Ha.fn,I.ta.fn),I.a.D("pop push reverse shift sort splice unshift".split(" "),function(i){I.Ha.fn[i]=function(){var e=this.v();this.ya();this.zc(e,i,arguments);var t=e[i].apply(e,arguments);this.xa();return t===e?this:t}}),I.a.D(["slice"],function(t){I.Ha.fn[t]=function(){var e=this();return e[t].apply(e,arguments)}}),I.Pc=function(e){return I.O(e)&&"function"==typeof e.remove&&"function"==typeof e.push},I.b("observableArray",I.Ha),I.b("isObservableArray",I.Pc),I.Ta.trackArrayChanges=function(i,e){function t(){function e(){if(p){var e=[].concat(i.v()||[]),t;if(i.Wa("arrayChange")){if(!h||1<p)h=I.a.Pb(a,e,i.Ob);t=h}a=e;h=null;p=0;t&&t.length&&i.notifySubscribers(t,"arrayChange")}}d?e():(d=!0,n=i.subscribe(function(){++p},null,"spectate"),a=[].concat(i.v()||[]),h=null,r=i.subscribe(e))}i.Ob={};e&&"object"==typeof e&&I.a.extend(i.Ob,e);i.Ob.sparse=!0;if(!i.zc){var d=!1,h=null,r,n,p=0,a,o=i.Qa,s=i.hb;i.Qa=function(e){o&&o.call(i,e);"arrayChange"===e&&t()};i.hb=function(e){s&&s.call(i,e);"arrayChange"!==e||i.Wa("arrayChange")||(r&&r.s(),n&&n.s(),n=r=null,d=!1,a=R)};i.zc=function(e,t,i){function r(e,t,i){return n[n.length]={status:e,value:t,index:i}}if(d&&!p){var n=[],a=e.length,o=i.length,s=0;switch(t){case"push":s=a;case"unshift":for(t=0;t<o;t++)r("added",i[t],s+t);break;case"pop":s=a-1;case"shift":a&&r("deleted",e[s],s);break;case"splice":t=Math.min(Math.max(0,0>i[0]?a+i[0]:i[0]),a);for(var a=1===o?a:Math.min(t+(i[1]||0),a),o=t+o-2,s=Math.max(a,o),l=[],c=[],u=2;t<s;++t,++u)t<a&&c.push(r("deleted",e[t],t)),t<o&&l.push(r("added",i[u],t));I.a.Kc(c,l);break;default:return}h=n}}}};var p=I.a.Da("_state");I.o=I.$=function(e,t,i){function r(){if(0<arguments.length){if("function"===typeof n)n.apply(a.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}a.ra||I.u.cc(r);(a.ka||a.J&&r.Xa())&&r.ha();return a.X}"object"===typeof e?i=e:(i=i||{},e&&(i.read=e));if("function"!=typeof i.read)throw Error("Pass a function that returns the value of the ko.computed");var n=i.write,a={X:R,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:i.read,nb:t||i.owner,l:i.disposeWhenNodeIsRemoved||i.l||null,Sa:i.disposeWhen||i.Sa,Rb:null,I:{},V:0,Ic:null};r[p]=a;r.Nc="function"===typeof n;I.a.Ba||I.a.extend(r,I.T.fn);I.T.fn.qb(r);I.a.Ab(r,m);i.pure?(a.wb=!0,a.J=!0,I.a.extend(r,f)):i.deferEvaluation&&I.a.extend(r,g);I.options.deferUpdates&&I.Ta.deferred(r,!0);a.l&&(a.jc=!0,a.l.nodeType||(a.l=null));a.J||i.deferEvaluation||r.ha();a.l&&r.ja()&&I.a.K.za(a.l,a.Rb=function(){r.s()});return r};var m={equalityComparer:i,qa:function(){return this[p].V},Va:function(){var i=[];I.a.P(this[p].I,function(e,t){i[t.Ka]=t.da});return i},Vb:function(t){if(!this[p].V)return!1;var e=this.Va();return-1!==I.a.A(e,t)?!0:!!I.a.Lb(e,function(e){return e.Vb&&e.Vb(t)})},uc:function(e,t,i){if(this[p].wb&&t===this)throw Error("A 'pure' computed must not be called recursively");this[p].I[e]=i;i.Ka=this[p].V++;i.La=t.ob()},Xa:function(){var e,t,i=this[p].I;for(e in i)if(Object.prototype.hasOwnProperty.call(i,e)&&(t=i[e],this.Ia&&t.da.Ja||t.da.Dd(t.La)))return!0},Jd:function(){this.Ia&&!this[p].rb&&this.Ia(!1)},ja:function(){var e=this[p];return e.ka||0<e.V},Rd:function(){this.Ja?this[p].ka&&(this[p].sa=!0):this.Hc()},$c:function(e){if(e.Hb){var t=e.subscribe(this.Jd,this,"dirty"),i=e.subscribe(this.Rd,this);return{da:e,s:function(){t.s();i.s()}}}return e.subscribe(this.Hc,this)},Hc:function(){var e=this,t=e.throttleEvaluation;t&&0<=t?(clearTimeout(this[p].Ic),this[p].Ic=I.a.setTimeout(function(){e.ha(!0)},t)):e.Ia?e.Ia(!0):e.ha(!0)},ha:function(e){var t=this[p],i=t.Sa,r=!1;if(!t.rb&&!t.ra){if(t.l&&!I.a.Sb(t.l)||i&&i()){if(!t.jc){this.s();return}}else t.jc=!1;t.rb=!0;try{r=this.zd(e)}finally{t.rb=!1}return r}},zd:function(e){var t=this[p],i=!1,r=t.wb?R:!t.V,i={qd:this,mb:t.I,Qb:t.V};I.u.xc({pd:i,od:s,o:this,Ya:r});t.I={};t.V=0;var n=this.yd(t,i);t.V?i=this.sb(t.X,n):(this.s(),i=!0);i&&(t.J?this.Gb():this.notifySubscribers(t.X,"beforeChange"),t.X=n,this.notifySubscribers(t.X,"spectate"),!t.J&&e&&this.notifySubscribers(t.X),this.rc&&this.rc());r&&this.notifySubscribers(t.X,"awake");return i},yd:function(e,t){try{var i=e.Wc;return e.nb?i.call(e.nb):i()}finally{I.u.end(),t.Qb&&!e.J&&I.a.P(t.mb,n),e.sa=e.ka=!1}},v:function(e){var t=this[p];(t.ka&&(e||!t.V)||t.J&&this.Xa())&&this.ha();return t.X},ub:function(e){I.T.fn.ub.call(this,e);this.nc=function(){this[p].J||(this[p].sa?this.ha():this[p].ka=!1);return this[p].X};this.Ia=function(e){this.pc(this[p].X);this[p].ka=!0;e&&(this[p].sa=!0);this.qc(this,!e)}},s:function(){var e=this[p];!e.J&&e.I&&I.a.P(e.I,function(e,t){t.s&&t.s()});e.l&&e.Rb&&I.a.K.yb(e.l,e.Rb);e.I=R;e.V=0;e.ra=!0;e.sa=!1;e.ka=!1;e.J=!1;e.l=R;e.Sa=R;e.Wc=R;this.Nc||(e.nb=R)}},f={Qa:function(e){var n=this,a=n[p];if(!a.ra&&a.J&&"change"==e){a.J=!1;if(a.sa||n.Xa())a.I=null,a.V=0,n.ha()&&n.Gb();else{var i=[];I.a.P(a.I,function(e,t){i[t.Ka]=e});I.a.D(i,function(e,t){var i=a.I[e],r=n.$c(i.da);r.Ka=t;r.La=i.La;a.I[e]=r});n.Xa()&&n.ha()&&n.Gb()}a.ra||n.notifySubscribers(a.X,"awake")}},hb:function(e){var i=this[p];i.ra||"change"!=e||this.Wa("change")||(I.a.P(i.I,function(e,t){t.s&&(i.I[e]={da:t.da,Ka:t.Ka,La:t.La},t.s())}),i.J=!0,this.notifySubscribers(R,"asleep"))},ob:function(){var e=this[p];e.J&&(e.sa||this.Xa())&&this.ha();return I.T.fn.ob.call(this)}},g={Qa:function(e){"change"!=e&&"beforeChange"!=e||this.v()}};I.a.Ba&&I.a.setPrototypeOf(m,I.T.fn);var _=I.ta.Ma;m[_]=I.o,I.Oc=function(e){return"function"==typeof e&&e[_]===m[_]},I.Fd=function(e){return I.Oc(e)&&e[p]&&e[p].wb},I.b("computed",I.o),I.b("dependentObservable",I.o),I.b("isComputed",I.Oc),I.b("isPureComputed",I.Fd),I.b("computed.fn",m),I.L(m,"peek",m.v),I.L(m,"dispose",m.s),I.L(m,"isActive",m.ja),I.L(m,"getDependenciesCount",m.qa),I.L(m,"getDependencies",m.Va),I.xb=function(e,t){if("function"===typeof e)return I.o(e,t,{pure:!0});e=I.a.extend({},e);e.pure=!0;return I.o(e,t)},I.b("pureComputed",I.xb),function(){function s(r,n,a){a=a||new t;r=n(r);if("object"!=typeof r||null===r||r===R||r instanceof RegExp||r instanceof Date||r instanceof String||r instanceof Number||r instanceof Boolean)return r;var o=r instanceof Array?[]:{};a.save(r,o);e(r,function(e){var t=n(r[e]);switch(typeof t){case"boolean":case"number":case"string":case"function":o[e]=t;break;case"object":case"undefined":var i=a.get(t);o[e]=i!==R?i:s(t,n,a)}});return o}function e(e,t){if(e instanceof Array){for(var i=0;i<e.length;i++)t(i);"function"==typeof e.toJSON&&t("toJSON")}else for(i in e)t(i)}function t(){this.keys=[];this.values=[]}I.ad=function(e){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return s(e,function(e){for(var t=0;I.O(e)&&10>t;t++)e=e();return e})};I.toJSON=function(e,t,i){e=I.ad(e);return I.a.hc(e,t,i)};t.prototype={constructor:t,save:function(e,t){var i=I.a.A(this.keys,e);0<=i?this.values[i]=t:(this.keys.push(e),this.values.push(t))},get:function(e){e=I.a.A(this.keys,e);return 0<=e?this.values[e]:R}}}(),I.b("toJS",I.ad),I.b("toJSON",I.toJSON),I.Wd=function(r,e,n){function t(t){var e=I.xb(r,n).extend({ma:"always"}),i=e.subscribe(function(e){e&&(i.s(),t(e))});e.notifySubscribers(e.v());return i}return"function"!==typeof Promise||e?t(e.bind(n)):new Promise(t)},I.b("when",I.Wd),function(){I.w={M:function(e){switch(I.a.R(e)){case"option":return!0===e.__ko__hasDomDataOptionValue__?I.a.g.get(e,I.c.options.$b):7>=I.a.W?e.getAttributeNode("value")&&e.getAttributeNode("value").specified?e.value:e.text:e.value;case"select":return 0<=e.selectedIndex?I.w.M(e.options[e.selectedIndex]):R;default:return e.value}},cb:function(e,t,i){switch(I.a.R(e)){case"option":"string"===typeof t?(I.a.g.set(e,I.c.options.$b,R),"__ko__hasDomDataOptionValue__"in e&&delete e.__ko__hasDomDataOptionValue__,e.value=t):(I.a.g.set(e,I.c.options.$b,t),e.__ko__hasDomDataOptionValue__=!0,e.value="number"===typeof t?t:"");break;case"select":if(""===t||null===t)t=R;for(var r=-1,n=0,a=e.options.length,o;n<a;++n)if(o=I.w.M(e.options[n]),o==t||""===o&&t===R){r=n;break}if(i||0<=r||t===R&&1<e.size)e.selectedIndex=r,6===I.a.W&&I.a.setTimeout(function(){e.selectedIndex=r},0);break;default:if(null===t||t===R)t="";e.value=t}}}}(),I.b("selectExtensions",I.w),I.b("selectExtensions.readValue",I.w.M),I.b("selectExtensions.writeValue",I.w.cb),I.m=function(){function r(e){e=I.a.Db(e);123===e.charCodeAt(0)&&(e=e.slice(1,-1));e+="\n,";var t=[],i=e.match(d),r,n=[],a=0;if(1<i.length){for(var o=0,s;s=i[o];++o){var l=s.charCodeAt(0);if(44===l){if(0>=a){t.push(r&&n.length?{key:r,value:n.join("")}:{unknown:r||n.join("")});r=a=0;n=[];continue}}else if(58===l){if(!a&&!r&&1===n.length){r=n.pop();continue}}else if(47===l&&1<s.length&&(47===s.charCodeAt(1)||42===s.charCodeAt(1)))continue;else 47===l&&o&&1<s.length?(l=i[o-1].match(h))&&!p[l[0]]&&(e=e.substr(e.indexOf(s)+1),i=e.match(d),o=-1,s="/"):40===l||123===l||91===l?++a:41===l||125===l||93===l?--a:r||n.length||34!==l&&39!==l||(s=s.slice(1,-1));n.push(s)}if(0<a)throw Error("Unbalanced parentheses, braces, or brackets")}return t}var c=["true","false","null","undefined"],u=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,d=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),h=/[\])"'A-Za-z0-9_$]+$/,p={in:1,return:1,typeof:1},m={};return{Ra:[],wa:m,ac:r,vb:function(e,t){function n(e,t){var i;if(!l){var r=I.getBindingHandler(e);if(r&&r.preprocess&&!(t=r.preprocess(t,e,n)))return;if(r=m[e])i=t,0<=I.a.A(c,i)?i=!1:(r=i.match(u),i=null===r?!1:r[1]?"Object("+r[1]+")"+r[2]:i),r=i;r&&o.push("'"+("string"==typeof m[e]?m[e]:e)+"':function(_z){"+i+"=_z}")}s&&(t="function(){return "+t+" }");a.push("'"+e+"':"+t)}t=t||{};var a=[],o=[],s=t.valueAccessors,l=t.bindingParams,i="string"===typeof e?r(e):e;I.a.D(i,function(e){n(e.key||e.unknown,e.value)});o.length&&n("_ko_property_writers","{"+o.join(",")+" }");return a.join(",")},Id:function(e,t){for(var i=0;i<e.length;i++)if(e[i].key==t)return!0;return!1},eb:function(e,t,i,r,n){if(e&&I.O(e))!I.Za(e)||n&&e.v()===r||e(r);else if((e=t.get("_ko_property_writers"))&&e[i])e[i](r)}}}(),I.b("expressionRewriting",I.m),I.b("expressionRewriting.bindingRewriteValidators",I.m.Ra),I.b("expressionRewriting.parseObjectLiteral",I.m.ac),I.b("expressionRewriting.preProcessBindings",I.m.vb),I.b("expressionRewriting._twoWayBindings",I.m.wa),I.b("jsonExpressionRewriting",I.m),I.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",I.m.vb),function(){function a(e){return 8==e.nodeType&&i.test(t?e.text:e.nodeValue)}function o(e){return 8==e.nodeType&&n.test(t?e.text:e.nodeValue)}function r(e,t){for(var i=e,r=1,n=[];i=i.nextSibling;){if(o(i)&&(I.a.g.set(i,c,!0),r--,0===r))return n;n.push(i);a(i)&&r++}if(!t)throw Error("Cannot find closing comment tag to match: "+e.nodeValue);return null}function s(e,t){var i=r(e,t);return i?0<i.length?i[i.length-1].nextSibling:e.nextSibling:null}var t=x&&"\x3c!--test--\x3e"===x.createComment("test").text,i=t?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,n=t?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0},c="__ko_matchedEndComment__";I.h={ea:{},childNodes:function(e){return a(e)?r(e):e.childNodes},Ea:function(e){if(a(e)){e=I.h.childNodes(e);for(var t=0,i=e.length;t<i;t++)I.removeNode(e[t])}else I.a.Tb(e)},va:function(e,t){if(a(e)){I.h.Ea(e);for(var i=e.nextSibling,r=0,n=t.length;r<n;r++)i.parentNode.insertBefore(t[r],i)}else I.a.va(e,t)},Vc:function(e,t){var i;a(e)?(i=e.nextSibling,e=e.parentNode):i=e.firstChild;i?t!==i&&e.insertBefore(t,i):e.appendChild(t)},Wb:function(e,t,i){i?(i=i.nextSibling,a(e)&&(e=e.parentNode),i?t!==i&&e.insertBefore(t,i):e.appendChild(t)):I.h.Vc(e,t)},firstChild:function(e){if(a(e))return!e.nextSibling||o(e.nextSibling)?null:e.nextSibling;if(e.firstChild&&o(e.firstChild))throw Error("Found invalid end comment, as the first child of "+e);return e.firstChild},nextSibling:function(e){a(e)&&(e=s(e));if(e.nextSibling&&o(e.nextSibling)){var t=e.nextSibling;if(o(t)&&!I.a.g.get(t,c))throw Error("Found end comment without a matching opening comment, as child of "+e);return null}return e.nextSibling},Cd:a,Vd:function(e){return(e=(t?e.text:e.nodeValue).match(i))?e[1]:null},Sc:function(e){if(l[I.a.R(e)]){var t=e.firstChild;if(t)do{if(1===t.nodeType){var i;i=t.firstChild;var r=null;if(i)do{if(r)r.push(i);else if(a(i)){var n=s(i,!0);n?i=n:r=[i]}else o(i)&&(r=[i])}while(i=i.nextSibling);if(i=r)for(r=t.nextSibling,n=0;n<i.length;n++)r?e.insertBefore(i[n],r):e.appendChild(i[n])}}while(t=t.nextSibling)}}}}(),I.b("virtualElements",I.h),I.b("virtualElements.allowedBindings",I.h.ea),I.b("virtualElements.emptyNode",I.h.Ea),I.b("virtualElements.insertAfter",I.h.Wb),I.b("virtualElements.prepend",I.h.Vc),I.b("virtualElements.setDomNodeChildren",I.h.va),function(){I.ga=function(){this.nd={}};I.a.extend(I.ga.prototype,{nodeHasBindings:function(e){switch(e.nodeType){case 1:return null!=e.getAttribute("data-bind")||I.j.getComponentNameForNode(e);case 8:return I.h.Cd(e);default:return!1}},getBindings:function(e,t){var i=this.getBindingsString(e,t),i=i?this.parseBindingsString(i,t,e):null;return I.j.tc(i,e,t,!1)},getBindingAccessors:function(e,t){var i=this.getBindingsString(e,t),i=i?this.parseBindingsString(i,t,e,{valueAccessors:!0}):null;return I.j.tc(i,e,t,!0)},getBindingsString:function(e){switch(e.nodeType){case 1:return e.getAttribute("data-bind");case 8:return I.h.Vd(e);default:return null}},parseBindingsString:function(t,e,i,r){try{var n=this.nd,a=t+(r&&r.valueAccessors||""),o;if(!(o=n[a])){var s,l="with($context){with($data||{}){return{"+I.m.vb(t,r)+"}}}";s=new Function("$context","$element",l);o=n[a]=s}return o(e,i)}catch(e){throw e.message="Unable to parse bindings.\nBindings value: "+t+"\nMessage: "+e.message,e}}});I.ga.instance=new I.ga}(),I.b("bindingProvider",I.ga),function(){function r(e){var t=(e=I.a.g.get(e,v))&&e.N;t&&(e.N=null,t.Tc())}function n(e,t,i){this.node=e;this.yc=t;this.kb=[];this.H=!1;t.N||I.a.K.za(e,r);i&&i.N&&(i.N.kb.push(e),this.Kb=i)}function a(e){return function(){return e}}function p(e){return e()}function o(i){return I.a.Ga(I.u.G(i),function(e,t){return function(){return i()[t]}})}function s(e,t,i){return"function"===typeof e?o(e.bind(null,t,i)):I.a.Ga(e,a)}function m(e,t){return o(this.getBindings.bind(this,e,t))}function l(e,t){var i=I.h.firstChild(t);if(i){var r,n=I.ga.instance,a=n.preprocessNode;if(a){for(;r=i;)i=I.h.nextSibling(r),a.call(n,r);i=I.h.firstChild(t)}for(;r=i;)i=I.h.nextSibling(r),c(e,r)}I.i.ma(t,I.i.H)}function c(e,t){var i=e,r=1===t.nodeType;r&&I.h.Sc(t);if(r||I.ga.instance.nodeHasBindings(t))i=u(t,null,e).bindingContextForDescendants;i&&!y[I.a.R(t)]&&l(i,t)}function f(r){var n=[],a={},o=[];I.a.P(r,function t(e){if(!a[e]){var i=I.getBindingHandler(e);i&&(i.after&&(o.push(e),I.a.D(i.after,function(e){if(r[e]){if(-1!==I.a.A(o,e))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+o.join(", "));t(e)}}),o.length--),n.push({key:e,Mc:i}));a[e]=!0}});return n}function u(n,e,t){var i=I.a.g.Ub(n,v,{}),r=i.hd;if(!e){if(r)throw Error("You cannot apply bindings multiple times to the same element.");i.hd=!0}r||(i.context=t);i.Zb||(i.Zb={});var a;if(e&&"function"!==typeof e)a=e;else{var o=I.ga.instance,s=o.getBindingAccessors||m,l=I.$(function(){if(a=e?e(t,n):s.call(o,n,t)){if(t[g])t[g]();if(t[_])t[_]()}return a},null,{l:n});a&&l.ja()||(l=null)}var c=t,u;if(a){var d=function(){return I.a.Ga(l?l():a,p)},h=l?function(e){return function(){return p(l()[e])}}:function(e){return a[e]};d.get=function(e){return a[e]&&p(h(e))};d.has=function(e){return e in a};I.i.H in a&&I.i.subscribe(n,I.i.H,function(){var e=(0,a[I.i.H])();if(e){var t=I.h.childNodes(n);t.length&&e(t,I.Ec(t[0]))}});I.i.pa in a&&(c=I.i.Cb(n,t),I.i.subscribe(n,I.i.pa,function(){var e=(0,a[I.i.pa])();e&&I.h.firstChild(n)&&e(n)}));i=f(a);I.a.D(i,function(e){var t=e.Mc.init,i=e.Mc.update,r=e.key;if(8===n.nodeType&&!I.h.ea[r])throw Error("The binding '"+r+"' cannot be used with virtual elements");try{"function"==typeof t&&I.u.G(function(){var e=t(n,h(r),d,c.$data,c);if(e&&e.controlsDescendantBindings){if(u!==R)throw Error("Multiple bindings ("+u+" and "+r+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=r}}),"function"==typeof i&&I.$(function(){i(n,h(r),d,c.$data,c)},null,{l:n})}catch(e){throw e.message='Unable to process binding "'+r+": "+a[r]+'"\nMessage: '+e.message,e}})}i=u===R;return{shouldBindDescendants:i,bindingContextForDescendants:i&&c}}function d(e,t){return e&&e instanceof I.fa?e:new I.fa(e,R,R,t)}var g=I.a.Da("_subscribable"),h=I.a.Da("_ancestorBindingInfo"),_=I.a.Da("_dataDependency");I.c={};var y={script:!0,textarea:!0,template:!0};I.getBindingHandler=function(e){return I.c[e]};var C={};I.fa=function(e,i,r,n,t){function a(){var e=c?l():l,t=I.a.f(e);i?(I.a.extend(o,i),h in i&&(o[h]=i[h])):(o.$parents=[],o.$root=t,o.ko=I);o[g]=u;s?t=o.$data:(o.$rawData=e,o.$data=t);r&&(o[r]=t);n&&n(o,i,t);if(i&&i[g]&&!I.S.o().Vb(i[g]))i[g]();d&&(o[_]=d);return o.$data}var o=this,s=e===C,l=s?R:e,c="function"==typeof l&&!I.O(l),u,d=t&&t.dataDependency;t&&t.exportDependencies?a():(u=I.xb(a),u.v(),u.ja()?u.equalityComparer=null:o[g]=R)};I.fa.prototype.createChildContext=function(t,i,r,e){!e&&i&&"object"==typeof i&&(e=i,i=e.as,r=e.extend);if(i&&e&&e.noChildContext){var n="function"==typeof t&&!I.O(t);return new I.fa(C,this,null,function(e){r&&r(e);e[i]=n?t():t},e)}return new I.fa(t,this,i,function(e,t){e.$parentContext=t;e.$parent=t.$data;e.$parents=(t.$parents||[]).slice(0);e.$parents.unshift(e.$parent);r&&r(e)},e)};I.fa.prototype.extend=function(t,e){return new I.fa(C,this,null,function(e){I.a.extend(e,"function"==typeof t?t(e):t)},e)};var v=I.a.g.Z();n.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};n.prototype.sd=function(e){I.a.Pa(this.kb,e);!this.kb.length&&this.H&&this.Cc()};n.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=null,I.a.K.yb(this.node,r),I.i.ma(this.node,I.i.pa),this.Tc())};I.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(e,t,i,r,n){var a=I.a.g.Ub(e,v,{});a.Fa||(a.Fa=new I.T);n&&n.notifyImmediately&&a.Zb[t]&&I.u.G(i,r,[e]);return a.Fa.subscribe(i,r,t)},ma:function(e,t){var i=I.a.g.get(e,v);if(i&&(i.Zb[t]=!0,i.Fa&&i.Fa.notifySubscribers(e,t),t==I.i.H))if(i.N)i.N.Cc();else if(i.N===R&&i.Fa&&i.Fa.Wa(I.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")},Cb:function(e,t){var i=I.a.g.Ub(e,v,{});i.N||(i.N=new n(e,i,t[h]));return t[h]==i?t:t.extend(function(e){e[h]=i})}};I.Td=function(e){return(e=I.a.g.get(e,v))&&e.context};I.ib=function(e,t,i){1===e.nodeType&&I.h.Sc(e);return u(e,t,d(i))};I.ld=function(e,t,i){i=d(i);return I.ib(e,s(t,i,e),i)};I.Oa=function(e,t){1!==t.nodeType&&8!==t.nodeType||l(d(e),t)};I.vc=function(e,t,i){!T&&S.jQuery&&(T=S.jQuery);if(2>arguments.length){if(t=x.body,!t)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!t||1!==t.nodeType&&8!==t.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");c(d(e,i),t)};I.Dc=function(e){return!e||1!==e.nodeType&&8!==e.nodeType?R:I.Td(e)};I.Ec=function(e){return(e=I.Dc(e))?e.$data:R};I.b("bindingHandlers",I.c);I.b("bindingEvent",I.i);I.b("bindingEvent.subscribe",I.i.subscribe);I.b("bindingEvent.startPossiblyAsyncContentBinding",I.i.Cb);I.b("applyBindings",I.vc);I.b("applyBindingsToDescendants",I.Oa);I.b("applyBindingAccessorsToNode",I.ib);I.b("applyBindingsToNode",I.ld);I.b("contextFor",I.Dc);I.b("dataFor",I.Ec)}(),function(s){function r(r,e){var n=Object.prototype.hasOwnProperty.call(o,r)?o[r]:s,a;n?n.subscribe(e):(n=o[r]=new I.T,n.subscribe(e),t(r,function(e,t){var i=!(!t||!t.synchronous);c[r]={definition:e,Gd:i};delete o[r];a||i?n.notifySubscribers(e):I.na.zb(function(){n.notifySubscribers(e)})}),a=!0)}function t(e,i){l("getConfig",[e],function(t){t?l("loadComponent",[e,t],function(e){i(e,t)}):i(null,null)})}function l(t,i,r,n){n||(n=I.j.loaders.slice(0));var e=n.shift();if(e){var a=e[t];if(a){var o=!1;if(a.apply(e,i.concat(function(e){o?r(null):null!==e?r(e):l(t,i,r,n)}))!==s&&(o=!0,!e.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else l(t,i,r,n)}else r(null)}var o={},c={};I.j={get:function(e,t){var i=Object.prototype.hasOwnProperty.call(c,e)?c[e]:s;i?i.Gd?I.u.G(function(){t(i.definition)}):I.na.zb(function(){t(i.definition)}):r(e,t)},Bc:function(e){delete c[e]},oc:l};I.j.loaders=[];I.b("components",I.j);I.b("components.get",I.j.get);I.b("components.clearCachedDefinition",I.j.Bc)}(),function(){function n(t,e,i,r){function n(){0===--o&&r(a)}var a={},o=2,s=i.template;i=i.viewModel;s?l(e,s,function(e){I.j.oc("loadTemplate",[t,e],function(e){a.template=e;n()})}):n();i?l(e,i,function(e){I.j.oc("loadViewModel",[t,e],function(e){a[u]=e;n()})}):n()}function a(e,t,i){if("function"===typeof t)i(function(e){return new t(e)});else if("function"===typeof t[u])i(t[u]);else if("instance"in t){var r=t.instance;i(function(){return r})}else"viewModel"in t?a(e,t.viewModel,i):e("Unknown viewModel value: "+t)}function o(e){switch(I.a.R(e)){case"script":return I.a.ua(e.text);case"textarea":return I.a.ua(e.value);case"template":if(s(e.content))return I.a.Ca(e.content.childNodes)}return I.a.Ca(e.childNodes)}function s(e){return S.DocumentFragment?e instanceof DocumentFragment:e&&11===e.nodeType}function l(e,t,i){"string"===typeof t.require?r||S.require?(r||S.require)([t.require],function(e){e&&"object"===typeof e&&e.Xd&&e["default"]&&(e=e["default"]);i(e)}):e("Uses require, but no AMD loader is present"):i(t)}function c(t){return function(e){throw Error("Component '"+t+"': "+e)}}var i={};I.j.register=function(e,t){if(!t)throw Error("Invalid configuration for "+e);if(I.j.tb(e))throw Error("Component "+e+" is already registered");i[e]=t};I.j.tb=function(e){return Object.prototype.hasOwnProperty.call(i,e)};I.j.unregister=function(e){delete i[e];I.j.Bc(e)};I.j.Fc={getConfig:function(e,t){t(I.j.tb(e)?i[e]:null)},loadComponent:function(t,e,i){var r=c(t);l(r,e,function(e){n(t,r,e,i)})},loadTemplate:function(e,t,i){e=c(e);if("string"===typeof t)i(I.a.ua(t));else if(t instanceof Array)i(t);else if(s(t))i(I.a.la(t.childNodes));else if(t.element)if(t=t.element,S.HTMLElement?t instanceof HTMLElement:t&&t.tagName&&1===t.nodeType)i(o(t));else if("string"===typeof t){var r=x.getElementById(t);r?i(o(r)):e("Cannot find element with ID "+t)}else e("Unknown element type: "+t);else e("Unknown template value: "+t)},loadViewModel:function(e,t,i){a(c(e),t,i)}};var u="createViewModel";I.b("components.register",I.j.register);I.b("components.isRegistered",I.j.tb);I.b("components.unregister",I.j.unregister);I.b("components.defaultLoader",I.j.Fc);I.j.loaders.push(I.j.Fc);I.j.dd=i}(),function(){function o(i,e){var t=i.getAttribute("params");if(t){var t=n.parseBindingsString(t,e,i,{valueAccessors:!0,bindingParams:!0}),t=I.a.Ga(t,function(e){return I.o(e,null,{l:i})}),r=I.a.Ga(t,function(t){var e=t.v();return t.ja()?I.o({read:function(){return I.a.f(t())},write:I.Za(e)&&function(e){t()(e)},l:i}):e});Object.prototype.hasOwnProperty.call(r,"$raw")||(r.$raw=t);return r}return{$raw:{}}}I.j.getComponentNameForNode=function(e){var t=I.a.R(e);if(I.j.tb(t)&&(-1!=t.indexOf("-")||"[object HTMLUnknownElement]"==""+e||8>=I.a.W&&e.tagName===t))return t};I.j.tc=function(e,t,i,r){if(1===t.nodeType){var n=I.j.getComponentNameForNode(t);if(n){e=e||{};if(e.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var a={name:n,params:o(t,i)};e.component=r?function(){return a}:a}}return e};var n=new I.ga;9>I.a.W&&(I.j.register=function(t){return function(e){return t.apply(this,arguments)}}(I.j.register),x.createDocumentFragment=function(t){return function(){var e=t();I.j.dd;return e}}(x.createDocumentFragment))}(),function(){function p(e,t,i){t=t.template;if(!t)throw Error("Component '"+e+"' has no template");e=I.a.Ca(t);I.h.va(i,e)}function m(e,t,i){var r=e.createViewModel;return r?r.call(e,t,i):t}var f=0;I.c.component={init:function(o,t,e,i,s){function l(){var e=c&&c.dispose;"function"===typeof e&&e.call(c);d&&d.s();u=c=d=null}var c,u,d,h=I.a.la(I.h.childNodes(o));I.h.Ea(o);I.a.K.za(o,l);I.o(function(){var e=I.a.f(t()),i,r;"string"===typeof e?i=e:(i=I.a.f(e.name),r=I.a.f(e.params));if(!i)throw Error("No component name specified");var n=I.i.Cb(o,s),a=u=++f;I.j.get(i,function(e){if(u===a){l();if(!e)throw Error("Unknown component '"+i+"'");p(i,e,o);var t=m(e,r,{element:o,templateNodes:h});e=n.createChildContext(t,{extend:function(e){e.$component=t;e.$componentTemplateNodes=h}});t&&t.koDescendantsComplete&&(d=I.i.subscribe(o,I.i.pa,t.koDescendantsComplete,t));c=t;I.Oa(e,o)}})},null,{l:o});return{controlsDescendantBindings:!0}}};I.h.ea.component=!0}();var y={class:"className",for:"htmlFor"};I.c.attr={update:function(n,e){var t=I.a.f(e())||{};I.a.P(t,function(e,t){t=I.a.f(t);var i=e.indexOf(":"),i="lookupNamespaceURI"in n&&0<i&&n.lookupNamespaceURI(e.substr(0,i)),r=!1===t||null===t||t===R;r?i?n.removeAttributeNS(i,e):n.removeAttribute(e):t=t.toString();8>=I.a.W&&e in y?(e=y[e],r?n.removeAttribute(e):n[e]=t):r||(i?n.setAttributeNS(i,e,t):n.setAttribute(e,t));"name"===e&&I.a.Yc(n,r?"":t)})}},function(){I.c.checked={after:["value","attr"],init:function(a,o,s){function e(){var e=a.checked,t=l();if(!I.S.Ya()&&(e||!u&&!I.S.qa())){var i=I.u.G(o);if(d){var r=h?i.v():i,n=p;p=t;n!==t?e&&(I.a.Na(r,t,!0),I.a.Na(r,n,!1)):I.a.Na(r,t,e);h&&I.Za(i)&&i(r)}else c&&(t===R?t=e:e||(t=R)),I.m.eb(i,s,"checked",t,!0)}}function t(){var e=I.a.f(o()),t=l();d?(a.checked=0<=I.a.A(e,t),p=t):a.checked=c&&t===R?!!e:l()===e}var l=I.xb(function(){if(s.has("checkedValue"))return I.a.f(s.get("checkedValue"));if(r)return s.has("value")?I.a.f(s.get("value")):a.value}),c="checkbox"==a.type,u="radio"==a.type;if(c||u){var i=o(),d=c&&I.a.f(i)instanceof Array,h=!(d&&i.push&&i.splice),r=u||d,p=d?l():R;u&&!a.name&&I.c.uniqueName.init(a,function(){return!0});I.o(e,null,{l:a});I.a.B(a,"click",e);I.o(t,null,{l:a});i=R}}};I.m.wa.checked=!0;I.c.checkedValue={update:function(e,t){e.value=I.a.f(t())}}}(),I.c["class"]={update:function(e,t){var i=I.a.Db(I.a.f(t()));I.a.Eb(e,e.__ko__cssValue,!1);e.__ko__cssValue=i;I.a.Eb(e,i,!0)}},I.c.css={update:function(i,e){var t=I.a.f(e());null!==t&&"object"==typeof t?I.a.P(t,function(e,t){t=I.a.f(t);I.a.Eb(i,e,t)}):I.c["class"].update(i,e)}},I.c.enable={update:function(e,t){var i=I.a.f(t());i&&e.disabled?e.removeAttribute("disabled"):i||e.disabled||(e.disabled=!0)}},I.c.disable={update:function(e,t){I.c.enable.update(e,function(){return!I.a.f(t())})}},I.c.event={init:function(e,a,o,s,l){var t=a()||{};I.a.P(t,function(n){"string"==typeof n&&I.a.B(e,n,function(e){var t,i=a()[n];if(i){try{var r=I.a.la(arguments);s=l.$data;r.unshift(s);t=i.apply(s,r)}finally{!0!==t&&(e.preventDefault?e.preventDefault():e.returnValue=!1)}!1===o.get(n+"Bubble")&&(e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation())}})})}},I.c.foreach={Rc:function(i){return function(){var e=i(),t=I.a.bc(e);if(!t||"number"==typeof t.length)return{foreach:e,templateEngine:I.ba.Ma};I.a.f(e);return{foreach:t.data,as:t.as,noChildContext:t.noChildContext,includeDestroyed:t.includeDestroyed,afterAdd:t.afterAdd,beforeRemove:t.beforeRemove,afterRender:t.afterRender,beforeMove:t.beforeMove,afterMove:t.afterMove,templateEngine:I.ba.Ma}}},init:function(e,t){return I.c.template.init(e,I.c.foreach.Rc(t))},update:function(e,t,i,r,n){return I.c.template.update(e,I.c.foreach.Rc(t),i,r,n)}},I.m.Ra.foreach=!1,I.h.ea.foreach=!0,I.c.hasfocus={init:function(r,n,a){function e(e){r.__ko_hasfocusUpdating=!0;var t=r.ownerDocument;if("activeElement"in t){var i;try{i=t.activeElement}catch(e){i=t.body}e=i===r}t=n();I.m.eb(t,a,"hasfocus",e,!0);r.__ko_hasfocusLastValue=e;r.__ko_hasfocusUpdating=!1}var t=e.bind(null,!0),i=e.bind(null,!1);I.a.B(r,"focus",t);I.a.B(r,"focusin",t);I.a.B(r,"blur",i);I.a.B(r,"focusout",i);r.__ko_hasfocusLastValue=!1},update:function(e,t){var i=!!I.a.f(t());e.__ko_hasfocusUpdating||e.__ko_hasfocusLastValue===i||(i?e.focus():e.blur(),!i&&e.__ko_hasfocusLastValue&&e.ownerDocument.body.focus(),I.u.G(I.a.Fb,null,[e,i?"focusin":"focusout"]))}},I.m.wa.hasfocus=!0,I.c.hasFocus=I.c.hasfocus,I.m.wa.hasFocus="hasfocus",I.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(e,t){I.a.fc(e,t())}},function(){function e(e,p,m){I.c[e]={init:function(n,a,e,t,o){var s,l,c={},u,d,h;if(p){t=e.get("as");var i=e.get("noChildContext");h=!(t&&i);c={as:t,noChildContext:i,exportDependencies:h}}d=(u="render"==e.get("completeOn"))||e.has(I.i.pa);I.o(function(){var e=I.a.f(a()),t=!m!==!e,i=!l,r;if(h||t!==s){d&&(o=I.i.Cb(n,o));if(t){if(!p||h)c.dataDependency=I.S.o();r=p?o.createChildContext("function"==typeof e?e:a,c):I.S.qa()?o.extend(null,c):o}i&&I.S.qa()&&(l=I.a.Ca(I.h.childNodes(n),!0));t?(i||I.h.va(n,I.a.Ca(l)),I.Oa(r,n)):(I.h.Ea(n),u||I.i.ma(n,I.i.H));s=t}},null,{l:n});return{controlsDescendantBindings:!0}}};I.m.Ra[e]=!1;I.h.ea[e]=!0}e("if");e("ifnot",!1,!0);e("with",!0)}(),I.c.let={init:function(e,t,i,r,n){t=n.extend(t);I.Oa(t,e);return{controlsDescendantBindings:!0}}},I.h.ea.let=!0;var C={};I.c.options={init:function(e){if("select"!==I.a.R(e))throw Error("options binding applies only to SELECT elements");for(;0<e.length;)e.remove(0);return{controlsDescendantBindings:!0}},update:function(r,e,n){function t(){return I.a.jb(r.options,function(e){return e.selected})}function a(e,t,i){var r=typeof t;return"function"==r?t(e):"string"==r?e[t]:i}function i(e,t){if(p&&c)I.i.ma(r,I.i.H);else if(h.length){var i=0<=I.a.A(h,I.w.M(t[0]));I.a.Zc(t[0],i);p&&!i&&I.u.G(I.a.Fb,null,[r,"change"])}}var o=r.multiple,s=0!=r.length&&o?r.scrollTop:null,l=I.a.f(e()),c=n.get("valueAllowUnset")&&n.has("value"),u=n.get("optionsIncludeDestroyed");e={};var d,h=[];c||(o?h=I.a.Mb(t(),I.w.M):0<=r.selectedIndex&&h.push(I.w.M(r.options[r.selectedIndex])));l&&("undefined"==typeof l.length&&(l=[l]),d=I.a.jb(l,function(e){return u||e===R||null===e||!I.a.f(e._destroy)}),n.has("optionsCaption")&&(l=I.a.f(n.get("optionsCaption")),null!==l&&l!==R&&d.unshift(C)));var p=!1;e.beforeRemove=function(e){r.removeChild(e)};l=i;n.has("optionsAfterRender")&&"function"==typeof n.get("optionsAfterRender")&&(l=function(e,t){i(0,t);I.u.G(n.get("optionsAfterRender"),null,[t[0],e!==C?e:R])});I.a.ec(r,d,function(e,t,i){i.length&&(h=!c&&i[0].selected?[I.w.M(i[0])]:[],p=!0);t=r.ownerDocument.createElement("option");e===C?(I.a.Bb(t,n.get("optionsCaption")),I.w.cb(t,R)):(i=a(e,n.get("optionsValue"),e),I.w.cb(t,I.a.f(i)),e=a(e,n.get("optionsText"),i),I.a.Bb(t,e));return[t]},e,l);if(!c){var m;o?m=h.length&&t().length<h.length:m=h.length&&0<=r.selectedIndex?I.w.M(r.options[r.selectedIndex])!==h[0]:h.length||0<=r.selectedIndex;m&&I.u.G(I.a.Fb,null,[r,"change"])}(c||I.S.Ya())&&I.i.ma(r,I.i.H);I.a.wd(r);s&&20<Math.abs(s-r.scrollTop)&&(r.scrollTop=s)}},I.c.options.$b=I.a.g.Z(),I.c.selectedOptions={init:function(r,n,i){function e(){var e=n(),t=[];I.a.D(r.getElementsByTagName("option"),function(e){e.selected&&t.push(I.w.M(e))});I.m.eb(e,i,"selectedOptions",t)}function t(){var i=I.a.f(n()),e=r.scrollTop;i&&"number"==typeof i.length&&I.a.D(r.getElementsByTagName("option"),function(e){var t=0<=I.a.A(i,I.w.M(e));e.selected!=t&&I.a.Zc(e,t)});r.scrollTop=e}if("select"!=I.a.R(r))throw Error("selectedOptions binding applies only to SELECT elements");var a;I.i.subscribe(r,I.i.H,function(){a?e():(I.a.B(r,"change",e),a=I.o(t,null,{l:r}))},null,{notifyImmediately:!0})},update:function(){}},I.m.wa.selectedOptions=!0,I.c.style={update:function(r,e){var t=I.a.f(e()||{});I.a.P(t,function(e,t){t=I.a.f(t);if(null===t||t===R||!1===t)t="";if(T)T(r).css(e,t);else if(/^--/.test(e))r.style.setProperty(e,t);else{e=e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()});var i=r.style[e];r.style[e]=t;t===i||r.style[e]!=i||isNaN(t)||(r.style[e]=t+"px")}})}},I.c.submit={init:function(r,n,e,t,a){if("function"!=typeof n())throw Error("The value for a submit binding must be a function");I.a.B(r,"submit",function(e){var t,i=n();try{t=i.call(a.$data,r)}finally{!0!==t&&(e.preventDefault?e.preventDefault():e.returnValue=!1)}})}},I.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(e,t){I.a.Bb(e,t())}},I.h.ea.text=!0,function(){if(S&&S.navigator){var e=function(e){if(e)return parseFloat(e[1])},t=S.navigator.userAgent,h,p,m,f,g;(h=S.opera&&S.opera.version&&parseInt(S.opera.version()))||(g=e(t.match(/Edge\/([^ ]+)$/)))||e(t.match(/Chrome\/([^ ]+)/))||(p=e(t.match(/Version\/([^ ]+) Safari/)))||(m=e(t.match(/Firefox\/([^ ]+)/)))||(f=I.a.W||e(t.match(/MSIE ([^ ]+)/)))||(f=e(t.match(/rv:([^ )]+)/)))}if(8<=f&&10>f)var r=I.a.g.Z(),n=I.a.g.Z(),a=function(e){var t=this.activeElement;(t=t&&I.a.g.get(t,n))&&t(e)},_=function(e,t){var i=e.ownerDocument;I.a.g.get(i,r)||(I.a.g.set(i,r,!0),I.a.B(i,"selectionchange",a));I.a.g.set(e,n,t)};I.c.textInput={init:function(i,t,r){function e(e,t){I.a.B(i,e,t)}function n(){var e=I.a.f(t());if(null===e||e===R)e="";c!==R&&e===c?I.a.setTimeout(n,4):i.value!==e&&(d=!0,i.value=e,d=!1,s=i.value)}function a(){l||(c=i.value,l=I.a.setTimeout(o,4))}function o(){clearTimeout(l);c=l=R;var e=i.value;s!==e&&(s=e,I.m.eb(t(),r,"textInput",e))}var s=i.value,l,c,u=9==I.a.W?a:o,d=!1;f&&e("keypress",o);11>f&&e("propertychange",function(e){d||"value"!==e.propertyName||u()});8==f&&(e("keyup",o),e("keydown",o));_&&(_(i,u),e("dragend",a));(!f||9<=f)&&e("input",u);5>p&&"textarea"===I.a.R(i)?(e("keydown",a),e("paste",a),e("cut",a)):11>h?e("keydown",a):4>m?(e("DOMAutoComplete",o),e("dragdrop",o),e("drop",o)):g&&"number"===i.type&&e("keydown",a);e("change",o);e("blur",o);I.o(n,null,{l:i})}};I.m.wa.textInput=!0;I.c.textinput={preprocess:function(e,t,i){i("textInput",e)}}}(),I.c.uniqueName={init:function(e,t){if(t()){var i="ko_unique_"+ ++I.c.uniqueName.rd;I.a.Yc(e,i)}}},I.c.uniqueName.rd=0,I.c.using={init:function(e,t,i,r,n){var a;i.has("as")&&(a={as:i.get("as"),noChildContext:i.get("noChildContext")});t=n.createChildContext(t,a);I.Oa(t,e);return{controlsDescendantBindings:!0}}},I.h.ea.using=!0,I.c.value={init:function(i,r,n){var a=I.a.R(i),e="input"==a;if(!e||"checkbox"!=i.type&&"radio"!=i.type){var t=[],o=n.get("valueUpdate"),s=!1,l=null;o&&("string"==typeof o?t=[o]:t=I.a.wc(o),I.a.Pa(t,"change"));var c=function(){l=null;s=!1;var e=r(),t=I.w.M(i);I.m.eb(e,n,"value",t)};!I.a.W||!e||"text"!=i.type||"off"==i.autocomplete||i.form&&"off"==i.form.autocomplete||-1!=I.a.A(t,"propertychange")||(I.a.B(i,"propertychange",function(){s=!0}),I.a.B(i,"focus",function(){s=!1}),I.a.B(i,"blur",function(){s&&c()}));I.a.D(t,function(e){var t=c;I.a.Ud(e,"after")&&(t=function(){l=I.w.M(i);I.a.setTimeout(c,0)},e=e.substring(5));I.a.B(i,e,t)});var u;u=e&&"file"==i.type?function(){var e=I.a.f(r());null===e||e===R||""===e?i.value="":I.u.G(c)}:function(){var e=I.a.f(r()),t=I.w.M(i);if(null!==l&&e===l)I.a.setTimeout(u,0);else if(e!==t||t===R)"select"===a?(t=n.get("valueAllowUnset"),I.w.cb(i,e,t),t||e===I.w.M(i)||I.u.G(c)):I.w.cb(i,e)};if("select"===a){var d;I.i.subscribe(i,I.i.H,function(){d?n.get("valueAllowUnset")?u():c():(I.a.B(i,"change",c),d=I.o(u,null,{l:i}))},null,{notifyImmediately:!0})}else I.a.B(i,"change",c),I.o(u,null,{l:i})}else I.ib(i,{checkedValue:r})},update:function(){}},I.m.wa.value=!0,I.c.visible={update:function(e,t){var i=I.a.f(t()),r="none"!=e.style.display;i&&!r?e.style.display="":!i&&r&&(e.style.display="none")}},I.c.hidden={update:function(e,t){I.c.visible.update(e,function(){return!I.a.f(t())})}},function(a){I.c[a]={init:function(e,t,i,r,n){return I.c.event.init.call(this,e,function(){var e={};e[a]=t();return e},i,r,n)}}}("click"),I.ca=function(){},I.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},I.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},I.ca.prototype.makeTemplateSource=function(e,t){if("string"==typeof e){t=t||x;var i=t.getElementById(e);if(!i)throw Error("Cannot find template with ID "+e);return new I.C.F(i)}if(1==e.nodeType||8==e.nodeType)return new I.C.ia(e);throw Error("Unknown template type: "+e)},I.ca.prototype.renderTemplate=function(e,t,i,r){e=this.makeTemplateSource(e,r);return this.renderTemplateSource(e,t,i,r)},I.ca.prototype.isTemplateRewritten=function(e,t){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(e,t).data("isRewritten")},I.ca.prototype.rewriteTemplate=function(e,t,i){e=this.makeTemplateSource(e,i);t=t(e.text());e.text(t);e.data("isRewritten",!0)},I.b("templateEngine",I.ca),I.kc=function(){function o(e,t,i,r){e=I.m.ac(e);for(var n=I.m.Ra,a=0;a<e.length;a++){var o=e[a].key;if(Object.prototype.hasOwnProperty.call(n,o)){var s=n[o];if("function"===typeof s){if(o=s(e[a].value))throw Error(o)}else if(!s)throw Error("This template engine does not support the '"+o+"' binding within its templates")}}i="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+I.m.vb(e,{valueAccessors:!0})+" } })()},'"+i.toLowerCase()+"')";return r.createJavaScriptEvaluatorBlock(i)+t}var t=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,i=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(e,t,i){t.isTemplateRewritten(e,i)||t.rewriteTemplate(e,function(e){return I.kc.Ld(e,t)},i)},Ld:function(e,a){return e.replace(t,function(e,t,i,r,n){return o(n,t,i,a)}).replace(i,function(e,t){return o(t,"\x3c!-- ko --\x3e","#comment",a)})},md:function(r,n){return I.aa.Xb(function(e,t){var i=e.nextSibling;i&&i.nodeName.toLowerCase()===n&&I.ib(i,r,t)})}}}(),I.b("__tr_ambtns",I.kc.md),function(){I.C={};I.C.F=function(e){if(this.F=e){var t=I.a.R(e);this.ab="script"===t?1:"textarea"===t?2:"template"==t&&e.content&&11===e.content.nodeType?3:4}};I.C.F.prototype.text=function(){var e=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.F[e];var t=arguments[0];"innerHTML"===e?I.a.fc(this.F,t):this.F[e]=t};var t=I.a.g.Z()+"_";I.C.F.prototype.data=function(e){if(1===arguments.length)return I.a.g.get(this.F,t+e);I.a.g.set(this.F,t+e,arguments[1])};var n=I.a.g.Z();I.C.F.prototype.nodes=function(){var e=this.F;if(0==arguments.length){var t=I.a.g.get(e,n)||{},i=t.lb||(3===this.ab?e.content:4===this.ab?e:R);if(!i||t.jd){var r=this.text();r&&r!==t.bb&&(i=I.a.Md(r,e.ownerDocument),I.a.g.set(e,n,{lb:i,bb:r,jd:!0}))}return i}t=arguments[0];this.ab!==R&&this.text("");I.a.g.set(e,n,{lb:t})};I.C.ia=function(e){this.F=e};I.C.ia.prototype=new I.C.F;I.C.ia.prototype.constructor=I.C.ia;I.C.ia.prototype.text=function(){if(0==arguments.length){var e=I.a.g.get(this.F,n)||{};e.bb===R&&e.lb&&(e.bb=e.lb.innerHTML);return e.bb}I.a.g.set(this.F,n,{bb:arguments[0]})};I.b("templateSources",I.C);I.b("templateSources.domElement",I.C.F);I.b("templateSources.anonymousTemplate",I.C.ia)}(),function(){function r(e,t,i){var r;for(t=I.h.nextSibling(t);e&&(r=e)!==t;)e=I.h.nextSibling(r),i(r,e)}function h(e,t){if(e.length){var n=e[0],a=e[e.length-1],i=n.parentNode,o=I.ga.instance,s=o.preprocessNode;if(s){r(n,a,function(e,t){var i=e.previousSibling,r=s.call(o,e);r&&(e===n&&(n=r[0]||t),e===a&&(a=r[r.length-1]||i))});e.length=0;if(!n)return;n===a?e.push(n):(e.push(n,a),I.a.Ua(e,i))}r(n,a,function(e){1!==e.nodeType&&8!==e.nodeType||I.vc(t,e)});r(n,a,function(e){1!==e.nodeType&&8!==e.nodeType||I.aa.cd(e,[t])});I.a.Ua(e,i)}}function l(e){return e.nodeType?e:0<e.length?e[0]:null}function p(e,t,i,r,n){n=n||{};var a=(e&&l(e)||i||{}).ownerDocument,o=n.templateEngine||c;I.kc.xd(i,o,a);i=o.renderTemplate(i,r,n,a);if("number"!=typeof i.length||0<i.length&&"number"!=typeof i[0].nodeType)throw Error("Template engine must return an array of DOM nodes");a=!1;switch(t){case"replaceChildren":I.h.va(e,i);a=!0;break;case"replaceNode":I.a.Xc(e,i);a=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+t)}a&&(h(i,r),n.afterRender&&I.u.G(n.afterRender,null,[i,r[n.as||"$data"]]),"replaceChildren"==t&&I.i.ma(e,I.i.H));return i}function m(e,t,i){return I.O(e)?e():"function"===typeof e?e(t,i):e}var c;I.gc=function(e){if(e!=R&&!(e instanceof I.ca))throw Error("templateEngine must inherit from ko.templateEngine");c=e};I.dc=function(i,r,n,a,o){n=n||{};if((n.templateEngine||c)==R)throw Error("Set a template engine before calling renderTemplate");o=o||"replaceChildren";if(a){var s=l(a);return I.$(function(){var e=r&&r instanceof I.fa?r:new I.fa(r,null,null,null,{exportDependencies:!0}),t=m(i,e.$data,e),e=p(a,o,t,e,n);"replaceNode"==o&&(a=e,s=l(a))},null,{Sa:function(){return!s||!I.a.Sb(s)},l:s&&"replaceNode"==o?s.parentNode:s})}return I.aa.Xb(function(e){I.dc(i,r,n,e,"replaceNode")})};I.Qd=function(r,t,n,a,o){function i(e,t){I.u.G(I.a.ec,null,[a,e,l,n,s,t]);I.i.ma(a,I.i.H)}function s(e,t){h(t,c);n.afterRender&&n.afterRender(t,e);c=null}function l(e,t){c=o.createChildContext(e,{as:u,noChildContext:n.noChildContext,extend:function(e){e.$index=t;u&&(e[u+"Index"]=t)}});var i=m(r,e,c);return p(a,"ignoreTargetNode",i,c,n)}var c,u=n.as,d=!1===n.includeDestroyed||I.options.foreachHidesDestroyed&&!n.includeDestroyed;if(d||n.beforeRemove||!I.Pc(t))return I.$(function(){var e=I.a.f(t)||[];"undefined"==typeof e.length&&(e=[e]);d&&(e=I.a.jb(e,function(e){return e===R||null===e||!I.a.f(e._destroy)}));i(e)},null,{l:a});i(t.v());var e=t.subscribe(function(e){i(t(),e)},null,"arrayChange");e.l(a);return e};var o=I.a.g.Z(),n=I.a.g.Z();I.c.template={init:function(e,t){var i=I.a.f(t());if("string"==typeof i||"name"in i)I.h.Ea(e);else if("nodes"in i){i=i.nodes||[];if(I.O(i))throw Error('The "nodes" option must be a plain, non-observable array.');var r=i[0]&&i[0].parentNode;r&&I.a.g.get(r,n)||(r=I.a.Yb(i),I.a.g.set(r,n,!0));new I.C.ia(e).nodes(r)}else if(i=I.h.childNodes(e),0<i.length)r=I.a.Yb(i),new I.C.ia(e).nodes(r);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(e,t,i,r,n){var a=t();t=I.a.f(a);i=!0;r=null;"string"==typeof t?t={}:(a="name"in t?t.name:e,"if"in t&&(i=I.a.f(t["if"])),i&&"ifnot"in t&&(i=!I.a.f(t.ifnot)),i&&!a&&(i=!1));"foreach"in t?r=I.Qd(a,i&&t.foreach||[],t,e,n):i?(i=n,"data"in t&&(i=n.createChildContext(t.data,{as:t.as,noChildContext:t.noChildContext,exportDependencies:!0})),r=I.dc(a,i,t,e)):I.h.Ea(e);n=r;(t=I.a.g.get(e,o))&&"function"==typeof t.s&&t.s();I.a.g.set(e,o,!n||n.ja&&!n.ja()?R:n)}};I.m.Ra.template=function(e){e=I.m.ac(e);return 1==e.length&&e[0].unknown||I.m.Id(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"};I.h.ea.template=!0}(),I.b("setTemplateEngine",I.gc),I.b("renderTemplate",I.dc),I.a.Kc=function(e,t,i){if(e.length&&t.length){var r,n,a,o,s;for(r=n=0;(!i||r<i)&&(o=e[n]);++n){for(a=0;s=t[a];++a)if(o.value===s.value){o.moved=s.index;s.moved=o.index;t.splice(a,1);r=a=0;break}r+=a}}},I.a.Pb=function(){function r(e,t,i,r,n){var a=Math.min,o=Math.max,s=[],l,c=e.length,u,d=t.length,h=d-c||1,p=c+d+1,m,f,g;for(l=0;l<=c;l++)for(f=m,s.push(m=[]),g=a(d,l+h),u=o(0,l-1);u<=g;u++)m[u]=u?l?e[l-1]===t[u-1]?f[u-1]:a(f[u]||p,m[u-1]||p)+1:u+1:l+1;a=[];o=[];h=[];l=c;for(u=d;l||u;)d=s[l][u]-1,u&&d===s[l][u-1]?o.push(a[a.length]={status:i,value:t[--u],index:u}):l&&d===s[l-1][u]?h.push(a[a.length]={status:r,value:e[--l],index:l}):(--u,--l,n.sparse||a.push({status:"retained",value:t[u]}));I.a.Kc(h,o,!n.dontLimitMoves&&10*c);return a.reverse()}return function(e,t,i){i="boolean"===typeof i?{dontLimitMoves:i}:i||{};e=e||[];t=t||[];return e.length<t.length?r(e,t,"added","deleted",i):r(t,e,"deleted","added",i)}}(),I.b("utils.compareArrays",I.a.Pb),function(){function w(t,i,r,n,a){var o=[],e=I.$(function(){var e=i(r,a,I.a.Ua(o,t))||[];0<o.length&&(I.a.Xc(o,e),n&&I.u.G(n,null,[r,e,a]));o.length=0;I.a.Nb(o,e)},null,{l:t,Sa:function(){return!I.a.kd(o)}});return{Y:o,$:e.ja()?e:R}}var D=I.a.g.Z(),M=I.a.g.Z();I.a.ec=function(t,e,i,r,n,a){function o(e){C={Aa:e,pb:I.ta(p++)};d.push(C);u||y.push(C)}function s(e){C=c[e];p!==C.pb.v()&&_.push(C);C.pb(p++);I.a.Ua(C.Y,t);d.push(C)}function l(t,i){if(t)for(var r=0,e=i.length;r<e;r++)I.a.D(i[r].Y,function(e){t(e,r,i[r].Aa)})}e=e||[];"undefined"==typeof e.length&&(e=[e]);r=r||{};var c=I.a.g.get(t,D),u=!c,d=[],h=0,p=0,m=[],f=[],g=[],_=[],y=[],C,v=0;if(u)I.a.D(e,o);else{if(!a||c&&c._countWaitingForRemove){var S=I.a.Mb(c,function(e){return e.Aa});a=I.a.Pb(S,e,{dontLimitMoves:r.dontLimitMoves,sparse:!0})}for(var S=0,x,T,b;x=a[S];S++)switch(T=x.moved,b=x.index,x.status){case"deleted":for(;h<b;)s(h++);T===R&&(C=c[h],C.$&&(C.$.s(),C.$=R),I.a.Ua(C.Y,t).length&&(r.beforeRemove&&(d.push(C),v++,C.Aa===M?C=null:g.push(C)),C&&m.push.apply(m,C.Y)));h++;break;case"added":for(;p<b;)s(h++);T!==R?(f.push(d.length),s(T)):o(x.value)}for(;p<e.length;)s(h++);d._countWaitingForRemove=v}I.a.g.set(t,D,d);l(r.beforeMove,_);I.a.D(m,r.beforeRemove?I.oa:I.removeNode);var E,P,A;try{A=t.ownerDocument.activeElement}catch(e){}if(f.length)for(;(S=f.shift())!=R;){C=d[S];for(E=R;S;)if((P=d[--S].Y)&&P.length){E=P[P.length-1];break}for(e=0;h=C.Y[e];E=h,e++)I.h.Wb(t,h,E)}for(S=0;C=d[S];S++){C.Y||I.a.extend(C,w(t,i,C.Aa,n,C.pb));for(e=0;h=C.Y[e];E=h,e++)I.h.Wb(t,h,E);!C.Ed&&n&&(n(C.Aa,C.Y,C.pb),C.Ed=!0,E=C.Y[C.Y.length-1])}A&&t.ownerDocument.activeElement!=A&&A.focus();l(r.beforeRemove,g);for(S=0;S<g.length;++S)g[S].Aa=M;l(r.afterMove,_);l(r.afterAdd,y)}}(),I.b("utils.setDomNodeChildrenFromArrayMapping",I.a.ec),I.ba=function(){this.allowTemplateRewriting=!1},I.ba.prototype=new I.ca,I.ba.prototype.constructor=I.ba,I.ba.prototype.renderTemplateSource=function(e,t,i,r){if(t=(9>I.a.W?0:e.nodes)?e.nodes():null)return I.a.la(t.cloneNode(!0).childNodes);e=e.text();return I.a.ua(e,r)},I.ba.Ma=new I.ba,I.gc(I.ba.Ma),I.b("nativeTemplateEngine",I.ba),function(){I.$a=function(){var a=this.Hd=function(){if(!T||!T.tmpl)return 0;try{if(0<=T.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(e){}return 1}();this.renderTemplateSource=function(e,t,i,r){r=r||x;i=i||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var n=e.data("precompiled");n||(n=e.text()||"",n=T.template(null,"{{ko_with $item.koBindingContext}}"+n+"{{/ko_with}}"),e.data("precompiled",n));e=[t.$data];t=T.extend({koBindingContext:t},i.templateOptions);t=T.tmpl(n,e,t);t.appendTo(r.createElement("div"));T.fragments={};return t};this.createJavaScriptEvaluatorBlock=function(e){return"{{ko_code ((function() { return "+e+" })()) }}"};this.addTemplate=function(e,t){x.write("<script type='text/html' id='"+e+"'>"+t+"<\/script>")};0<a&&(T.tmpl.tag.ko_code={open:"__.push($1 || '');"},T.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};I.$a.prototype=new I.ca;I.$a.prototype.constructor=I.$a;var e=new I.$a;0<e.Hd&&I.gc(e);I.b("jqueryTmplTemplateEngine",I.$a)}()}(S.ko={})}();var knockout=ko;"undefined"!=typeof window?(ko=window.ko,void 0!==oldValue?window.ko=oldValue:delete window.ko):(ko=global.ko,void 0!==oldValue?global.ko=oldValue:delete global.ko);var OBSERVABLES_PROPERTY="__knockoutObservables",SUBSCRIBABLE_PROPERTY="__knockoutSubscribable";function track(r,e){if(!r)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,a=getAllObservablesForObject(r,!0);return(e=e||Object.getOwnPropertyNames(r)).forEach(function(e){var t,i;e!==OBSERVABLES_PROPERTY&&e!==SUBSCRIBABLE_PROPERTY&&(e in a||(t=(i=r[e])instanceof Array,i=n.isObservable(i)?i:t?n.observableArray(i):n.observable(i),Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:i,set:n.isWriteableObservable(i)?i:void 0}),a[e]=i,t&¬ifyWhenPresentOrFutureArrayValuesMutate(n,i)))}),r}function getAllObservablesForObject(e,t){var i=e[OBSERVABLES_PROPERTY];return!i&&t&&(i={},Object.defineProperty(e,OBSERVABLES_PROPERTY,{value:i})),i}function defineComputedProperty(e,t,i){var r={owner:e,deferEvaluation:!0};if("function"==typeof i)r.read=i;else{if("value"in i)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if("function"!=typeof i.get)throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');r.read=i.get,r.write=i.set}return e[t]=this.computed(r),track.call(this,e,[t]),e}function notifyWhenPresentOrFutureArrayValuesMutate(t,i){var r=null;t.computed(function(){r&&(r.dispose(),r=null);var e=i();e instanceof Array&&(r=startWatchingArrayInstance(t,i,e))})}function startWatchingArrayInstance(e,t,i){return getSubscribableForArray(e,i).subscribe(t)}function getSubscribableForArray(e,t){var i,r=t[SUBSCRIBABLE_PROPERTY];return r||(r=new e.subscribable,Object.defineProperty(t,SUBSCRIBABLE_PROPERTY,{value:r}),wrapStandardArrayMutators(t,r,i={}),addKnockoutArrayMutators(e,t,r,i)),r}function wrapStandardArrayMutators(i,r,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach(function(e){var t=i[e];i[e]=function(){var e=t.apply(this,arguments);return!0!==n.pause&&r.notifySubscribers(this),e}})}function addKnockoutArrayMutators(i,r,n,a){["remove","removeAll","destroy","destroyAll","replace"].forEach(function(t){Object.defineProperty(r,t,{enumerable:!1,value:function(){var e;a.pause=!0;try{e=i.observableArray.fn[t].apply(i.observableArray(r),arguments)}finally{a.pause=!1}return n.notifySubscribers(r),e}})})}function getObservable(e,t){if(!e)return null;e=getAllObservablesForObject(e,!1);return e&&e[t]||null}function valueHasMutated(e,t){t=getObservable(e,t);t&&t.valueHasMutated()}function attachToKo(e){e.track=track,e.getObservable=getObservable,e.valueHasMutated=valueHasMutated,e.defineProperty=defineComputedProperty}var knockout_es5={attachToKo:attachToKo},svgNS$1="http://www.w3.org/2000/svg",svgClassName="cesium-svgPath-svg",SvgPathBindingHandler={register:function(o){o.bindingHandlers.cesiumSvgPath={init:function(e,r){var n=document.createElementNS(svgNS$1,"svg:svg");n.setAttribute("class",svgClassName);var a=document.createElementNS(svgNS$1,"path");return n.appendChild(a),o.virtualElements.setDomNodeChildren(e,[n]),o.computed({read:function(){var e=o.unwrap(r());a.setAttribute("d",o.unwrap(e.path));var t=o.unwrap(e.width),i=o.unwrap(e.height);n.setAttribute("width",t),n.setAttribute("height",i),n.setAttribute("viewBox","0 0 "+t+" "+i),e.css&&n.setAttribute("class",svgClassName+" "+o.unwrap(e.css))},disposeWhenNodeIsRemoved:e}),{controlsDescendantBindings:!0}}},o.virtualElements.allowedBindings.cesiumSvgPath=!0}};knockout_es5.attachToKo(knockout),SvgPathBindingHandler.register(knockout);var tmp$1={},t6j,u6j,v6j,w6j,x6j,y6j,wek,p6j,q6j,r6j,s6j;t6j={defaultNoDataValue:-34027999387901484e22,decode:function(e,t){var i=(t=t||{}).encodedMaskData||null===t.encodedMaskData,r=x6j(e,t.inputOffset||0,i),e=null!==t.noDataValue?t.noDataValue:t6j.defaultNoDataValue,i=u6j(r,t.pixelType||Float32Array,t.encodedMaskData,e,t.returnMask),e={width:r.width,height:r.height,pixelData:i.resultPixels,minValue:i.minValue,maxValue:r.pixels.maxValue,noDataValue:e};return i.resultMask&&(e.maskData=i.resultMask),t.returnEncodedMask&&r.mask&&(e.encodedMaskData=r.mask.bitset||null),t.returnFileInfo&&(e.fileInfo=v6j(r),t.computeUsedBitDepths&&(e.fileInfo.bitDepths=w6j(r))),e}},u6j=function(e,t,i,r,n){var a,o,s,l=0,c=e.pixels.numBlocksX,u=e.pixels.numBlocksY,d=Math.floor(e.width/c),h=Math.floor(e.height/u),p=2*e.maxZError,m=Number.MAX_VALUE;i=i||(e.mask?e.mask.bitset:null),o=new t(e.width*e.height),n&&i&&(s=new Uint8Array(e.width*e.height));for(var f,g,_=new Float32Array(d*h),y=0;y<=u;y++){var C=y!==u?h:e.height%u;if(0!==C)for(var v=0;v<=c;v++){var S=v!==c?d:e.width%c;if(0!==S){var x,T,b,E,P=y*e.width*h+v*d,A=e.width-S,w=e.pixels.blocks[l];if(w.encoding<2?(x=0===w.encoding?w.rawData:(y6j(w.stuffedData,w.bitsPerPixel,w.numValidPixels,w.offset,p,_,e.pixels.maxValue),_),T=0):b=2===w.encoding?0:w.offset,i)for(g=0;g<C;g++){for(7&P&&(E=i[P>>3],E<<=7&P),f=0;f<S;f++)128&(E=!(7&P)?i[P>>3]:E)?(s&&(s[P]=1),m=(a=w.encoding<2?x[T++]:b)<m?a:m,o[P++]=a):(s&&(s[P]=0),o[P++]=r),E<<=1;P+=A}else if(w.encoding<2)for(g=0;g<C;g++){for(f=0;f<S;f++)m=(a=x[T++])<m?a:m,o[P++]=a;P+=A}else for(m=b<m?b:m,g=0;g<C;g++){for(f=0;f<S;f++)o[P++]=b;P+=A}if(1===w.encoding&&T!==w.numValidPixels)throw"Block and Mask do not match";l++}}}return{resultPixels:o,resultMask:s,minValue:m}},v6j=function(e){return{fileIdentifierString:e.fileIdentifierString,fileVersion:e.fileVersion,imageType:e.imageType,height:e.height,width:e.width,maxZError:e.maxZError,eofOffset:e.eofOffset,mask:e.mask?{numBlocksX:e.mask.numBlocksX,numBlocksY:e.mask.numBlocksY,numBytes:e.mask.numBytes,maxValue:e.mask.maxValue}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,numBytes:e.pixels.numBytes,maxValue:e.pixels.maxValue,noDataValue:e.noDataValue}}},w6j=function(e){for(var t=e.pixels.numBlocksX*e.pixels.numBlocksY,i={},r=0;r<t;r++){var n=e.pixels.blocks[r];0===n.encoding?i.float32=!0:1===n.encoding?i[n.bitsPerPixel]=!0:i[0]=!0}return Object.keys(i)},x6j=function(e,t,i){var r={},n=new Uint8Array(e,t,10);if(r.fileIdentifierString=String.fromCharCode.apply(null,n),"CntZImage"!==r.fileIdentifierString.trim())throw"Unexpected file identifier string: "+r.fileIdentifierString;t+=10;var a=new DataView(e,t,24);if(r.fileVersion=a.getInt32(0,!0),r.imageType=a.getInt32(4,!0),r.height=a.getUint32(8,!0),r.width=a.getUint32(12,!0),r.maxZError=a.getFloat64(16,!0),t+=24,!i)if(a=new DataView(e,t,16),r.mask={},r.mask.numBlocksY=a.getUint32(0,!0),r.mask.numBlocksX=a.getUint32(4,!0),r.mask.numBytes=a.getUint32(8,!0),r.mask.maxValue=a.getFloat32(12,!0),t+=16,0<r.mask.numBytes){var o=new Uint8Array(Math.ceil(r.width*r.height/8)),s=(a=new DataView(e,t,r.mask.numBytes)).getInt16(0,!0),l=2,c=0;do{if(0<s)for(;s--;)o[c++]=a.getUint8(l++);else for(var u=a.getUint8(l++),s=-s;s--;)o[c++]=u}while(s=a.getInt16(l,!0),(l+=2)<r.mask.numBytes);if(-32768!==s||c<o.length)throw"Unexpected end of mask RLE encoding";r.mask.bitset=o,t+=r.mask.numBytes}else 0==(r.mask.numBytes|r.mask.numBlocksY|r.mask.maxValue)&&(r.mask.bitset=new Uint8Array(Math.ceil(r.width*r.height/8)));a=new DataView(e,t,16),r.pixels={},r.pixels.numBlocksY=a.getUint32(0,!0),r.pixels.numBlocksX=a.getUint32(4,!0),r.pixels.numBytes=a.getUint32(8,!0),r.pixels.maxValue=a.getFloat32(12,!0),t+=16;var n=r.pixels.numBlocksX,i=r.pixels.numBlocksY,d=n+(0<r.width%n?1:0),h=i+(0<r.height%i?1:0);r.pixels.blocks=new Array(d*h);for(var p=0,m=0;m<h;m++)for(var f=0;f<d;f++){var g=0,_=e.byteLength-t;a=new DataView(e,t,Math.min(10,_));var y={};r.pixels.blocks[p++]=y;var C,_=a.getUint8(0);if(g++,y.encoding=63&_,3<y.encoding)throw"Invalid block encoding ("+y.encoding+")";if(2!==y.encoding){if(0!==_&&2!==_){if(_>>=6,2===(y.offsetType=_))y.offset=a.getInt8(1),g++;else if(1===_)y.offset=a.getInt16(1,!0),g+=2;else{if(0!==_)throw"Invalid block offset type";y.offset=a.getFloat32(1,!0),g+=4}if(1===y.encoding)if(_=a.getUint8(g),g++,y.bitsPerPixel=63&_,_>>=6,2===(y.numValidPixelsType=_))y.numValidPixels=a.getUint8(g),g++;else if(1===_)y.numValidPixels=a.getUint16(g,!0),g+=2;else{if(0!==_)throw"Invalid valid pixel count type";y.numValidPixels=a.getUint32(g,!0),g+=4}}if(t+=g,3!==y.encoding)if(0===y.encoding){var v=(r.pixels.numBytes-1)/4;if(v!==Math.floor(v))throw"uncompressed block has invalid length";C=new ArrayBuffer(4*v),new Uint8Array(C).set(new Uint8Array(e,t,4*v));var S=new Float32Array(C);y.rawData=S,t+=4*v}else 1===y.encoding&&(S=Math.ceil(y.numValidPixels*y.bitsPerPixel/8),v=Math.ceil(S/4),C=new ArrayBuffer(4*v),new Uint8Array(C).set(new Uint8Array(e,t,S)),y.stuffedData=new Uint32Array(C),t+=S)}else t++}return r.eofOffset=t,r},y6j=function(e,t,i,r,n,a,o){var s,l,c,u,d=(1<<t)-1,h=0,p=0,m=Math.ceil((o-r)/n),f=4*e.length-Math.ceil(t*i/8);for(e[e.length-1]<<=8*f,s=0;s<i;s++)0===p&&(u=e[h++],p=32),t<=p?(c=u>>>p-t&d,p-=t):(c=(u&d)<<(l=t-p)&d,c+=(u=e[h++])>>>(p=32-l)),a[s]=c<m?r+c*n:o;return a},p6j=t6j,q6j=function(){var v=function(e,t,i,r,n,a,o,s){var l,c,u,d,h,p=(1<<i)-1,m=0,f=0,g=4*e.length-Math.ceil(i*r/8);if(e[e.length-1]<<=8*g,n)for(l=0;l<r;l++)0===f&&(u=e[m++],f=32),i<=f?(c=u>>>f-i&p,f-=i):(c=(u&p)<<(d=i-f)&p,c+=(u=e[m++])>>>(f=32-d)),t[l]=n[c];else for(h=Math.ceil((s-a)/o),l=0;l<r;l++)0===f&&(u=e[m++],f=32),i<=f?(c=u>>>f-i&p,f-=i):(c=(u&p)<<(d=i-f)&p,c+=(u=e[m++])>>>(f=32-d)),t[l]=c<h?a+c*o:s},S=function(e,t,i,r,n,a){var o,s,l=(1<<t)-1,c=0,u=0,d=0,h=0,p=[],m=4*e.length-Math.ceil(t*i/8);e[e.length-1]<<=8*m;for(var f=Math.ceil((a-r)/n),u=0;u<i;u++)0===d&&(s=e[c++],d=32),t<=d?(h=s>>>d-t&l,d-=t):(h=(s&l)<<(o=t-d)&l,h+=(s=e[c++])>>>(d=32-o)),p[u]=h<f?r+h*n:a;return p.unshift(r),p},x=function(e,t,i,r,n,a,o,s){var l,c,u,d=(1<<i)-1,h=0,p=0,m=0;if(n)for(g=0;g<r;g++)0===p&&(c=e[h++],p=32,m=0),i<=p?(l=c>>>m&d,p-=i,m+=i):(l=c>>>m&d,p=32-(u=i-p),l|=((c=e[h++])&(1<<u)-1)<<i-u,m=u),t[g]=n[l];else for(var f=Math.ceil((s-a)/o),g=0;g<r;g++)0===p&&(c=e[h++],p=32,m=0),i<=p?(l=c>>>m&d,p-=i,m+=i):(l=c>>>m&d,p=32-(u=i-p),l|=((c=e[h++])&(1<<u)-1)<<i-u,m=u),t[g]=l<f?a+l*o:s;return t},T=function(e,t,i,r,n,a){for(var o,s,l=(1<<t)-1,c=0,u=0,d=0,h=0,p=0,m=[],f=Math.ceil((a-r)/n),u=0;u<i;u++)0===d&&(s=e[c++],d=32,p=0),t<=d?(h=s>>>p&l,d-=t,p+=t):(h=s>>>p&l,d=32-(o=t-d),h|=((s=e[c++])&(1<<o)-1)<<t-o,p=o),m[u]=h<f?r+h*n:a;return m.unshift(r),m},b=function(e,t,i,r){var n,a,o,s,l=(1<<i)-1,c=0,u=0,d=4*e.length-Math.ceil(i*r/8);for(e[e.length-1]<<=8*d,n=0;n<r;n++)0===u&&(o=e[c++],u=32),i<=u?(a=o>>>u-i&l,u-=i):(a=(o&l)<<(s=i-u)&l,a+=(o=e[c++])>>>(u=32-s)),t[n]=a;return t},E=function(e,t,i,r){for(var n,a,o,s=(1<<i)-1,l=0,c=0,u=0,d=0;d<r;d++)0===c&&(a=e[l++],c=32,u=0),i<=c?(n=a>>>u&s,c-=i,u+=i):(n=a>>>u&s,c=32-(o=i-c),n|=((a=e[l++])&(1<<o)-1)<<i-o,u=o),t[d]=n;return t},k={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(e){for(var t=65535,i=65535,r=e.length,n=Math.floor(r/2),a=0;n;){var o=359<=n?359:n;for(n-=o;t+=e[a++]<<8,i+=t+=e[a++],--o;);t=(65535&t)+(t>>>16),i=(65535&i)+(i>>>16)}return 1&r&&(i+=t+=e[a]<<8),((i=(65535&i)+(i>>>16))<<16|(t=(65535&t)+(t>>>16)))>>>0},readHeaderInfo:function(e,t){var i=t.ptr,r=new Uint8Array(e,i,6),n={};if(n.fileIdentifierString=String.fromCharCode.apply(null,r),0!==n.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+n.fileIdentifierString;i+=6;var a=new DataView(e,i,8),r=a.getInt32(0,!0);if(n.fileVersion=r,i+=4,3<=r&&(n.checksum=a.getUint32(4,!0),i+=4),a=new DataView(e,i,12),n.height=a.getUint32(0,!0),n.width=a.getUint32(4,!0),i+=8,4<=r?(n.numDims=a.getUint32(8,!0),i+=4):n.numDims=1,a=new DataView(e,i,40),n.numValidPixel=a.getUint32(0,!0),n.microBlockSize=a.getInt32(4,!0),n.blobSize=a.getInt32(8,!0),n.imageType=a.getInt32(12,!0),n.maxZError=a.getFloat64(16,!0),n.zMin=a.getFloat64(24,!0),n.zMax=a.getFloat64(32,!0),i+=40,t.headerInfo=n,t.ptr=i,3<=r&&(r=4<=r?52:48,this.computeChecksumFletcher32(new Uint8Array(e,i-r,n.blobSize-14))!==n.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(e,t){var i=t.headerInfo,r=this.getDataTypeArray(i.imageType),n=i.numDims*this.getDataTypeSize(i.imageType),a=this.readSubArray(e,t.ptr,r,n),o=this.readSubArray(e,t.ptr+n,r,n);t.ptr+=2*n;for(var s=!0,l=0;l<i.numDims;l++)if(a[l]!==o[l]){s=!1;break}return i.minValues=a,i.maxValues=o,s},readSubArray:function(e,t,i,r){var n=i===Uint8Array?new Uint8Array(e,t,r):(n=new ArrayBuffer(r),new Uint8Array(n).set(new Uint8Array(e,t,r)),new i(n));return n},readMask:function(e,t){var i=t.ptr,r=t.headerInfo,n=r.width*r.height,r=r.numValidPixel,a=new DataView(e,i,4),o={};if(o.numBytes=a.getUint32(0,!0),i+=4,(0===r||n===r)&&0!==o.numBytes)throw"invalid mask";if(0===r)l=new Uint8Array(Math.ceil(n/8)),o.bitset=l,h=new Uint8Array(n),t.pixels.resultMask=h,i+=o.numBytes;else if(0<o.numBytes){var s,l=new Uint8Array(Math.ceil(n/8)),c=(a=new DataView(e,i,o.numBytes)).getInt16(0,!0),u=2,d=0;do{if(0<c)for(;c--;)l[d++]=a.getUint8(u++);else for(s=a.getUint8(u++),c=-c;c--;)l[d++]=s}while(c=a.getInt16(u,!0),(u+=2)<o.numBytes);if(-32768!==c||d<l.length)throw"Unexpected end of mask RLE encoding";for(var h=new Uint8Array(n),p=0,m=0,m=0;m<n;m++)7&m?(p=l[m>>3],p<<=7&m):p=l[m>>3],128&p&&(h[m]=1);t.pixels.resultMask=h,o.bitset=l,i+=o.numBytes}return t.ptr=i,t.mask=o,!0},readDataOneSweep:function(e,t,i){var r=t.ptr,n=t.headerInfo,a=n.numDims,o=n.width*n.height,s=n.imageType,n=n.numValidPixel*k.getDataTypeSize(s)*a,l=t.pixels.resultMask,c=i===Uint8Array?new Uint8Array(e,r,n):(s=new ArrayBuffer(n),new Uint8Array(s).set(new Uint8Array(e,r,n)),new i(s));if(c.length===o*a)t.pixels.resultPixels=c;else{t.pixels.resultPixels=new i(o*a);var u,d=0,h=0,p=0;if(1<a)for(p=0;p<a;p++)for(u=p*o,h=0;h<o;h++)l[h]&&(t.pixels.resultPixels[u+h]=c[d++]);else for(h=0;h<o;h++)l[h]&&(t.pixels.resultPixels[h]=c[d++])}return r+=n,t.ptr=r,!0},readHuffmanTree:function(e,t){var i=this.HUFFMAN_LUT_BITS_MAX,r=new DataView(e,t.ptr,16);if(t.ptr+=16,r.getInt32(0,!0)<2)throw"unsupported Huffman version";var n=r.getInt32(4,!0),a=r.getInt32(8,!0),o=r.getInt32(12,!0);if(o<=a)return!1;var s=new Uint32Array(o-a);k.decodeBits(e,t,s);for(var l,c,u,d=[],h=a;h<o;h++)d[l=h-(h<n?0:n)]={first:s[h-a],second:null};var p=e.byteLength-t.ptr,r=Math.ceil(p/4),r=new ArrayBuffer(4*r);new Uint8Array(r).set(new Uint8Array(e,t.ptr,p));var m=new Uint32Array(r),f=0,g=0,_=m[0];for(h=a;h<o;h++)0<(u=d[l=h-(h<n?0:n)].first)&&(d[l].second=_<<f>>>32-u,u<=32-f?32===(f+=u)&&(f=0,_=m[++g]):(f+=u-32,_=m[++g],d[l].second|=_>>>32-f));var y=0,C=0,v=new A;for(h=0;h<d.length;h++)void 0!==d[h]&&(y=Math.max(y,d[h].first));C=i<=y?i:y,30<=y&&console.log("WARning, large NUM LUT BITS IS "+y);var S,x,T,b,E,P=[];for(h=a;h<o;h++)if(0<(u=d[l=h-(h<n?0:n)].first))if(S=[u,l],u<=C)for(x=d[l].second<<C-u,T=1<<C-u,c=0;c<T;c++)P[x|c]=S;else for(x=d[l].second,E=v,b=u-1;0<=b;b--)E=x>>>b&1?(E.right||(E.right=new A),E.right):(E.left||(E.left=new A),E.left),0!==b||E.val||(E.val=S[1]);return{decodeLut:P,numBitsLUTQick:C,numBitsLUT:y,tree:v,stuffedData:m,srcPtr:g,bitPos:f}},readHuffman:function(e,t,i){var r,n,a,o,s,l,c,u,d,h=t.headerInfo,p=h.numDims,m=t.headerInfo.height,f=t.headerInfo.width,g=f*m,e=this.readHuffmanTree(e,t),_=e.decodeLut,y=e.tree,C=e.stuffedData,v=e.srcPtr,S=e.bitPos,x=e.numBitsLUTQick,T=e.numBitsLUT,b=0===t.headerInfo.imageType?128:0,E=t.pixels.resultMask,P=0;0<S&&(v++,S=0);for(var A=C[v],w=1===t.encodeMode,D=new i(g*p),M=D,I=0;I<h.numDims;I++){if(1<p&&(M=new i(D.buffer,g*I,g),P=0),t.headerInfo.numValidPixel===f*m)for(l=u=0;l<m;l++)for(c=0;c<f;c++,u++){if(n=0,s=o=A<<S>>>32-x,_[s=32-S<x?o|=C[v+1]>>>64-S-x:s])n=_[s][1],S+=_[s][0];else for(s=o=A<<S>>>32-T,32-S<T&&(s=o|=C[v+1]>>>64-S-T),r=y,d=0;d<T;d++)if(!(r=o>>>T-d-1&1?r.right:r.left).left&&!r.right){n=r.val,S=S+d+1;break}32<=S&&(S-=32,A=C[++v]),a=n-b,w?(a+=!(0<c)&&0<l?M[u-f]:P,a&=255,P=M[u]=a):M[u]=a}else for(l=u=0;l<m;l++)for(c=0;c<f;c++,u++)if(E[u]){if(n=0,s=o=A<<S>>>32-x,_[s=32-S<x?o|=C[v+1]>>>64-S-x:s])n=_[s][1],S+=_[s][0];else for(s=o=A<<S>>>32-T,32-S<T&&(s=o|=C[v+1]>>>64-S-T),r=y,d=0;d<T;d++)if(!(r=o>>>T-d-1&1?r.right:r.left).left&&!r.right){n=r.val,S=S+d+1;break}32<=S&&(S-=32,A=C[++v]),a=n-b,w?(!(0<c&&E[u-1])&&0<l&&E[u-f]?a+=M[u-f]:a+=P,a&=255,P=M[u]=a):M[u]=a}t.ptr=t.ptr+4*(v+1)+(0<S?4:0)}t.pixels.resultPixels=D},decodeBits:function(e,t,i,r,n){var a=t.headerInfo,o=a.fileVersion,s=0,l=5<=e.byteLength-t.ptr?5:e.byteLength-t.ptr,c=new DataView(e,t.ptr,l),u=c.getUint8(0);s++;var d=u>>6,h=0==d?4:3-d,l=0<(32&u),d=31&u,u=0;if(1==h)u=c.getUint8(s),s++;else if(2==h)u=c.getUint16(s,!0),s+=2;else{if(4!=h)throw"Invalid valid pixel count type";u=c.getUint32(s,!0),s+=4}var p,m,f,g,_,y,C,h=2*a.maxZError,a=1<a.numDims?a.maxValues[n]:a.zMax;if(l){for(t.counter.lut++,y=c.getUint8(s),s++,g=Math.ceil((y-1)*d/8),_=Math.ceil(g/4),m=new ArrayBuffer(4*_),f=new Uint8Array(m),t.ptr+=s,f.set(new Uint8Array(e,t.ptr,g)),c=new Uint32Array(m),t.ptr+=g,C=0;y-1>>>C;)C++;g=Math.ceil(u*C/8),_=Math.ceil(g/4),m=new ArrayBuffer(4*_),(f=new Uint8Array(m)).set(new Uint8Array(e,t.ptr,g)),p=new Uint32Array(m),t.ptr+=g,c=(3<=o?T:S)(c,d,y-1,r,h,a),(3<=o?x:v)(p,i,C,u,c)}else t.counter.bitstuffer++,C=d,t.ptr+=s,0<C&&(g=Math.ceil(u*C/8),_=Math.ceil(g/4),m=new ArrayBuffer(4*_),(f=new Uint8Array(m)).set(new Uint8Array(e,t.ptr,g)),p=new Uint32Array(m),t.ptr+=g,3<=o?null===r?E(p,i,C,u):x(p,i,C,u,!1,r,h,a):null===r?b(p,i,C,u):v(p,i,C,u,!1,r,h,a))},readTiles:function(e,t,i){var r=t.headerInfo,n=r.width,a=r.height,o=r.microBlockSize,s=r.imageType,l=k.getDataTypeSize(s),c=Math.ceil(n/o),u=Math.ceil(a/o);t.pixels.numBlocksY=u,t.pixels.numBlocksX=c;for(var d,h,p,m,f,g,_,y,C,v,S,x,T,b,E=t.pixels.ptr=0,P=0,A=0,w=0,D=0,M=0,I=0,R=0,O=new i(o*o),L=a%o||o,F=n%o||o,N=r.numDims,B=t.pixels.resultMask,V=t.pixels.resultPixels,A=0;A<u;A++)for(d=A!==u-1?o:L,w=0;w<c;w++)for(D=A*n*o+w*o,g=n-(h=w!==c-1?o:F),b=0;b<N;b++){if(1<N&&(V=new i(t.pixels.resultPixels.buffer,n*a*b*l,n*a)),p=e.byteLength-t.ptr,C={},R=0,R++,f=(m=(y=new DataView(e,t.ptr,Math.min(10,p))).getUint8(0))>>6&255,(m>>2&15)!=(w*o>>3&15))throw"integrity issue";if(3<(S=3&m))throw t.ptr+=R,"Invalid block encoding ("+S+")";if(2!=S)if(0==S){if(t.counter.uncompressed++,t.ptr+=R,M=(M=d*h*l)<(_=e.byteLength-t.ptr)?M:_,x=new ArrayBuffer(M%l==0?M:M+l-M%l),new Uint8Array(x).set(new Uint8Array(e,t.ptr,M)),v=new i(x),I=0,B)for(E=0;E<d;E++){for(P=0;P<h;P++)B[D]&&(V[D]=v[I++]),D++;D+=g}else for(E=0;E<d;E++){for(P=0;P<h;P++)V[D++]=v[I++];D+=g}t.ptr+=I*l}else if(x=k.getDataTypeUsed(s,f),T=k.getOnePixel(C,R,x,y),R+=k.getDataTypeSize(x),3==S)if(t.ptr+=R,t.counter.constantoffset++,B)for(E=0;E<d;E++){for(P=0;P<h;P++)B[D]&&(V[D]=T),D++;D+=g}else for(E=0;E<d;E++){for(P=0;P<h;P++)V[D++]=T;D+=g}else if(t.ptr+=R,k.decodeBits(e,t,O,T,b),R=0,B)for(E=0;E<d;E++){for(P=0;P<h;P++)B[D]&&(V[D]=O[R++]),D++;D+=g}else for(E=0;E<d;E++){for(P=0;P<h;P++)V[D++]=O[R++];D+=g}else t.counter.constant++,t.ptr+=R}},formatFileInfo:function(e){return{fileIdentifierString:e.headerInfo.fileIdentifierString,fileVersion:e.headerInfo.fileVersion,imageType:e.headerInfo.imageType,height:e.headerInfo.height,width:e.headerInfo.width,numValidPixel:e.headerInfo.numValidPixel,microBlockSize:e.headerInfo.microBlockSize,blobSize:e.headerInfo.blobSize,maxZError:e.headerInfo.maxZError,pixelType:k.getPixelType(e.headerInfo.imageType),eofOffset:e.eofOffset,mask:e.mask?{numBytes:e.mask.numBytes}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,maxValue:e.headerInfo.zMax,minValue:e.headerInfo.zMin,noDataValue:e.noDataValue}}},constructConstantSurface:function(e){var t,i=e.headerInfo.zMax,r=e.headerInfo.numDims,n=e.headerInfo.height*e.headerInfo.width,a=n*r,o=0,s=0,l=e.pixels.resultMask;if(l)if(1<r)for(o=0;o<r;o++)for(t=o*n,s=0;s<n;s++)l[s]&&(e.pixels.resultPixels[t+s]=i);else for(s=0;s<n;s++)l[s]&&(e.pixels.resultPixels[s]=i);else if(e.pixels.resultPixels.fill)e.pixels.resultPixels.fill(i);else for(s=0;s<a;s++)e.pixels.resultPixels[s]=i},getDataTypeArray:function(e){var t;switch(e){case 0:t=Int8Array;break;case 1:t=Uint8Array;break;case 2:t=Int16Array;break;case 3:t=Uint16Array;break;case 4:t=Int32Array;break;case 5:t=Uint32Array;break;case 6:t=Float32Array;break;case 7:t=Float64Array;break;default:t=Float32Array}return t},getPixelType:function(e){var t;switch(e){case 0:t="S8";break;case 1:t="U8";break;case 2:t="S16";break;case 3:t="U16";break;case 4:t="S32";break;case 5:t="U32";break;case 6:t="F32";break;case 7:t="F64";break;default:t="F32"}return t},isValidPixelValue:function(e,t){if(null===t)return!1;var i;switch(e){case 0:i=-128<=t&&t<=127;break;case 1:i=0<=t&&t<=255;break;case 2:i=-32768<=t&&t<=32767;break;case 3:i=0<=t&&t<=65536;break;case 4:i=-2147483648<=t&&t<=2147483647;break;case 5:i=0<=t&&t<=4294967296;break;case 6:i=-34027999387901484e22<=t&&t<=34027999387901484e22;break;case 7:i=5e-324<=t&&t<=17976931348623157e292;break;default:i=!1}return i},getDataTypeSize:function(e){var t=0;switch(e){case 0:case 1:t=1;break;case 2:case 3:t=2;break;case 4:case 5:case 6:t=4;break;case 7:t=8;break;default:t=e}return t},getDataTypeUsed:function(e,t){var i=e;switch(e){case 2:case 4:i=e-t;break;case 3:case 5:i=e-2*t;break;case 6:i=0===t?e:1===t?2:1;break;case 7:i=0===t?e:e-2*t+1;break;default:i=e}return i},getOnePixel:function(e,t,i,r){var n=0;switch(i){case 0:n=r.getInt8(t);break;case 1:n=r.getUint8(t);break;case 2:n=r.getInt16(t,!0);break;case 3:n=r.getUint16(t,!0);break;case 4:n=r.getInt32(t,!0);break;case 5:n=r.getUInt32(t,!0);break;case 6:n=r.getFloat32(t,!0);break;case 7:n=r.getFloat64(t,!0);break;default:throw"the decoder does not understand this pixel type"}return n}},A=function(e,t,i){this.val=e,this.left=t,this.right=i};return{decode:function(e,t){var i=(t=t||{}).noDataValue,r=0,n={};if(n.ptr=t.inputOffset||0,n.pixels={},k.readHeaderInfo(e,n)){var a=n.headerInfo,o=a.fileVersion,s=k.getDataTypeArray(a.imageType);k.readMask(e,n),a.numValidPixel===a.width*a.height||n.pixels.resultMask||(n.pixels.resultMask=t.maskData);var l,c=a.width*a.height;if(n.pixels.resultPixels=new s(c*a.numDims),n.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},0!==a.numValidPixel)if(a.zMax===a.zMin)k.constructConstantSurface(n);else if(4<=o&&k.checkMinMaxRanges(e,n))k.constructConstantSurface(n);else{var u=new DataView(e,n.ptr,2),d=u.getUint8(0);if(n.ptr++,d)k.readDataOneSweep(e,n,s);else if(1<o&&a.imageType<=1&&Math.abs(a.maxZError-.5)<1e-5){u=u.getUint8(1);if(n.ptr++,2<(n.encodeMode=u)||o<4&&1<u)throw"Invalid Huffman flag "+u;u?k.readHuffman(e,n,s):k.readTiles(e,n,s)}else k.readTiles(e,n,s)}n.eofOffset=n.ptr,t.inputOffset?(l=n.headerInfo.blobSize+t.inputOffset-n.ptr,1<=Math.abs(l)&&(n.eofOffset=t.inputOffset+n.headerInfo.blobSize)):(l=n.headerInfo.blobSize-n.ptr,1<=Math.abs(l)&&(n.eofOffset=n.headerInfo.blobSize));var h={width:a.width,height:a.height,pixelData:n.pixels.resultPixels,minValue:a.zMin,maxValue:a.zMax,validPixelCount:a.numValidPixel,dimCount:a.numDims,dimStats:{minValues:a.minValues,maxValues:a.maxValues},maskData:n.pixels.resultMask};if(n.pixels.resultMask&&k.isValidPixelValue(a.imageType,i)){for(var p=n.pixels.resultMask,r=0;r<c;r++)p[r]||(h.pixelData[r]=i);h.noDataValue=i}return n.noDataValue=i,t.returnFileInfo&&(h.fileInfo=k.formatFileInfo(n)),h}},getBandCount:function(e){for(var t=0,i=0,r={ptr:0,pixels:{}};i<e.byteLength-58;)k.readHeaderInfo(e,r),i+=r.headerInfo.blobSize,t++,r.ptr=i;return t}}}(),wek=new ArrayBuffer(4),s6j=new Uint8Array(wek),r6j=(new Uint32Array(wek)[0]=1)===s6j[0],s6j={decode:function(e,t){if(!r6j)throw"Big endian system is not supported.";var i,r,n=(t=t||{}).inputOffset||0,a=new Uint8Array(e,n,10),a=String.fromCharCode.apply(null,a);if("CntZImage"===a.trim())i=p6j,r=1;else{if("Lerc2"!==a.substring(0,5))throw"Unexpected file identifier string: "+a;i=q6j,r=2}for(var o,s,l,c,u,d,h=0,p=e.byteLength-10,m=[],f={width:0,height:0,pixels:[],pixelType:t.pixelType,mask:null,statistics:[]};n<p;){var g=i.decode(e,{inputOffset:n,encodedMaskData:o,maskData:l,returnMask:0===h,returnEncodedMask:0===h,returnFileInfo:!0,pixelType:t.pixelType||null,noDataValue:t.noDataValue||null}),n=g.fileInfo.eofOffset;0===h&&(o=g.encodedMaskData,l=g.maskData,f.width=g.width,f.height=g.height,f.dimCount=g.dimCount||1,f.pixelType=g.pixelType||g.fileInfo.pixelType,f.mask=g.maskData),1<r&&g.fileInfo.mask&&0<g.fileInfo.mask.numBytes&&m.push(g.maskData),h++,f.pixels.push(g.pixelData),f.statistics.push({minValue:g.minValue,maxValue:g.maxValue,noDataValue:g.noDataValue,dimStats:g.dimStats})}if(1<r&&1<m.length){for(d=f.width*f.height,f.bandMasks=m,(l=new Uint8Array(d)).set(m[0]),c=1;c<m.length;c++)for(s=m[c],u=0;u<d;u++)l[u]=l[u]&s[u];f.maskData=l}return f}},tmp$1.Lerc=s6j;var LercDecode=tmp$1.Lerc,tmp={},Sek,Tek;Sek=tmp,Tek=function(){return n={},r.m=i=[function(e,t,i){var r=function(e,t,i){return t&&n(e.prototype,t),i&&n(e,i),e};function n(e,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=i(1),a=i.webm,o=i.mp4,s="undefined"!=typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,r=(r(l,[{key:"_addSourceToVideo",value:function(e,t,i){var r=document.createElement("source");r.src=i,r.type="video/"+t,e.appendChild(r)}},{key:"enable",value:function(){s?(this.disable(),console.warn("\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n "),this.noSleepTimer=window.setInterval(function(){document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){s?this.noSleepTimer&&(console.warn("\n NoSleep now disabled for older iOS devices.\n "),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),l);function l(){var e=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),s?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("muted",""),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",a),this._addSourceToVideo(this.noSleepVideo,"mp4",o),this.noSleepVideo.addEventListener("loadedmetadata",function(){e.noSleepVideo.duration<=1?e.noSleepVideo.setAttribute("loop",""):e.noSleepVideo.addEventListener("timeupdate",function(){.5<e.noSleepVideo.currentTime&&(e.noSleepVideo.currentTime=Math.random())})}))}e.exports=r},function(e,t,i){e.exports={webm:"data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=",mp4:"data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}}],r.c=n,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0);function r(e){if(n[e])return n[e].exports;var t=n[e]={i:e,l:!1,exports:{}};return i[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}var i,n},Sek.NoSleep=Tek();var NoSleep=tmp.NoSleep;function quickselect(e,t,i,r,n){quickselectStep(e,t,i||0,r||e.length-1,n||defaultCompare)}function quickselectStep(e,t,i,r,n){for(;i<r;){var a,o,s,l;600<r-i&&(a=r-i+1,o=t-i+1,l=Math.log(a),s=.5*Math.exp(2*l/3),l=.5*Math.sqrt(l*s*(a-s)/a)*(o-a/2<0?-1:1),quickselectStep(e,t,Math.max(i,Math.floor(t-o*s/a+l)),Math.min(r,Math.floor(t+(a-o)*s/a+l)),n));var c=e[t],u=i,d=r;for(swap(e,i,t),0<n(e[r],c)&&swap(e,i,r);u<d;){for(swap(e,u,d),u++,d--;n(e[u],c)<0;)u++;for(;0<n(e[d],c);)d--}0===n(e[i],c)?swap(e,i,d):swap(e,++d,r),d<=t&&(i=d+1),t<=d&&(r=d-1)}}function swap(e,t,i){var r=e[t];e[t]=e[i],e[i]=r}function defaultCompare(e,t){return e<t?-1:t<e?1:0}function ClockViewModel(t){defined(t)||(t=new Clock),this._clock=t,this._eventHelper=new EventHelper,this._eventHelper.add(t.onTick,this.synchronize,this),this.systemTime=knockout.observable(JulianDate.now()),this.systemTime.equalityComparer=JulianDate.equals,this.startTime=knockout.observable(t.startTime),this.startTime.equalityComparer=JulianDate.equals,this.startTime.subscribe(function(e){t.startTime=e,this.synchronize()},this),this.stopTime=knockout.observable(t.stopTime),this.stopTime.equalityComparer=JulianDate.equals,this.stopTime.subscribe(function(e){t.stopTime=e,this.synchronize()},this),this.currentTime=knockout.observable(t.currentTime),this.currentTime.equalityComparer=JulianDate.equals,this.currentTime.subscribe(function(e){t.currentTime=e,this.synchronize()},this),this.multiplier=knockout.observable(t.multiplier),this.multiplier.subscribe(function(e){t.multiplier=e,this.synchronize()},this),this.clockStep=knockout.observable(t.clockStep),this.clockStep.subscribe(function(e){t.clockStep=e,this.synchronize()},this),this.clockRange=knockout.observable(t.clockRange),this.clockRange.subscribe(function(e){t.clockRange=e,this.synchronize()},this),this.canAnimate=knockout.observable(t.canAnimate),this.canAnimate.subscribe(function(e){t.canAnimate=e,this.synchronize()},this),this.shouldAnimate=knockout.observable(t.shouldAnimate),this.shouldAnimate.subscribe(function(e){t.shouldAnimate=e,this.synchronize()},this),knockout.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}function Command(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,DeveloperError.throwInstantiationError()}function createCommand(i,e){e=defaultValue(e,!0);var r=new Event,n=new Event;function t(){var e,t={args:arguments,cancel:!1};return r.raiseEvent(t),t.cancel||(e=i.apply(null,arguments),n.raiseEvent(e)),e}return t.canExecute=e,knockout.track(t,["canExecute"]),Object.defineProperties(t,{beforeExecute:{value:r},afterExecute:{value:n}}),t}Object.defineProperties(ClockViewModel.prototype,{clock:{get:function(){return this._clock}}}),ClockViewModel.prototype.synchronize=function(){var e=this._clock;this.systemTime=JulianDate.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate},ClockViewModel.prototype.isDestroyed=function(){return!1},ClockViewModel.prototype.destroy=function(){this._eventHelper.removeAll(),destroyObject(this)};var InspectorShared={};function subscribeAndEvaluate(e,t,i,r,n){return i.call(r,e[t]),knockout.getObservable(e,t).subscribe(i,r,n)}function ToggleButtonViewModel(e,t){this._command=e,t=defaultValue(t,defaultValue.EMPTY_OBJECT),this.toggled=defaultValue(t.toggled,!1),this.tooltip=defaultValue(t.tooltip,""),knockout.track(this,["toggled","tooltip"])}InspectorShared.createCheckbox=function(e,t,i){var r=document.createElement("div"),n=document.createElement("label"),a=document.createElement("input");a.type="checkbox";t="checked: "+t;return defined(i)&&(t+=", enable: "+i),a.setAttribute("data-bind",t),n.appendChild(a),n.appendChild(document.createTextNode(e)),r.appendChild(n),r},InspectorShared.createSection=function(e,t,i,r){var n=document.createElement("div");n.className="cesium-cesiumInspector-section",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-section-collapsed": !'+i+" }"),e.appendChild(n);e=document.createElement("h3");e.className="cesium-cesiumInspector-sectionHeader",e.appendChild(document.createTextNode(t)),e.setAttribute("data-bind","click: "+r),n.appendChild(e);e=document.createElement("div");return e.className="cesium-cesiumInspector-sectionContent",n.appendChild(e),e},Object.defineProperties(ToggleButtonViewModel.prototype,{command:{get:function(){return this._command}}});var BloomThreshold="uniform sampler2D colorTexture;\nuniform float threshold;\nvarying vec2 v_textureCoordinates;\nvoid main(void)\n{\nvec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\nfloat brightness = dot(rgb, vec3(0.2126, 0.7152, 0.0722));\nif(brightness > threshold)\ngl_FragColor = vec4(rgb, 1.0);\nelse\ngl_FragColor = vec4(0., 0., 0., 1.);\n}\n",DepthViewPacked="uniform sampler2D u_depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\nfloat z_window = czm_unpackDepth(texture2D(u_depthTexture, v_textureCoordinates));\nz_window = czm_reverseLogDepth(z_window);\nfloat n_range = czm_depthRange.near;\nfloat f_range = czm_depthRange.far;\nfloat z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\nfloat scale = pow(z_ndc * 0.5 + 0.5, 8.0);\ngl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\n}\n";function removePipelineExtras(e){return ForEach.shader(e,function(e){removeExtras(e)}),ForEach.buffer(e,function(e){removeExtras(e)}),ForEach.image(e,function(e){removeExtras(e),ForEach.compressedImage(e,function(e){removeExtras(e)})}),removeExtras(e),e}function removeExtras(e){defined(e.extras)&&(defined(e.extras._pipeline)&&delete e.extras._pipeline,0===Object.keys(e.extras).length&&delete e.extras)}var svgNS="http://www.w3.org/2000/svg",xlinkNS="http://www.w3.org/1999/xlink",widgetForDrag,gradientEnabledColor0=Color.fromCssColorString("rgba(247,250,255,0.384)"),gradientEnabledColor1=Color.fromCssColorString("rgba(143,191,255,0.216)"),gradientEnabledColor2=Color.fromCssColorString("rgba(153,197,255,0.098)"),gradientEnabledColor3=Color.fromCssColorString("rgba(255,255,255,0.086)"),gradientDisabledColor0=Color.fromCssColorString("rgba(255,255,255,0.267)"),gradientDisabledColor1=Color.fromCssColorString("rgba(255,255,255,0)"),gradientKnobColor=Color.fromCssColorString("rgba(66,67,68,0.3)"),gradientPointerColor=Color.fromCssColorString("rgba(0,0,0,0.5)");function getElementColor(e){return Color.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var svgIconsById={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function svgFromObject(e){var t,i=document.createElementNS(svgNS,e.tagName);for(t in e)if(e.hasOwnProperty(t)&&"tagName"!==t)if("children"===t)for(var r=e.children.length,n=0;n<r;++n)i.appendChild(svgFromObject(e.children[n]));else 0===t.indexOf("xlink:")?i.setAttributeNS(xlinkNS,t.substring(6),e[t]):"textContent"===t?i.textContent=e[t]:i.setAttribute(t,e[t]);return i}function svgText(e,t,i){var r=document.createElementNS(svgNS,"text");r.setAttribute("x",e),r.setAttribute("y",t),r.setAttribute("class","cesium-animation-svgText");t=document.createElementNS(svgNS,"tspan");return t.textContent=i,r.appendChild(t),r}function setShuttleRingPointer(e,t,i){e.setAttribute("transform","translate(100,100) rotate("+i+")"),t.setAttribute("transform","rotate("+i+")")}var makeColorStringScratch=new Color;function makeColorString(e,t){var i=t.alpha,r=1-i;return makeColorStringScratch.red=e.red*r+t.red*i,makeColorStringScratch.green=e.green*r+t.green*i,makeColorStringScratch.blue=e.blue*r+t.blue*i,makeColorStringScratch.toCssColorString()}function rectButton(e,t,i){var r=svgIconsById[i];return svgFromObject({tagName:"g",class:"cesium-animation-rectButton",transform:"translate("+e+","+t+")",children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:i,tagName:r.tagName,transform:r.transform,d:r.d},{tagName:"title",textContent:""}]})}function wingButton(e,t,i){var r=svgIconsById[i],n=svgIconsById.animation_pathWingButton;return svgFromObject({tagName:"g",class:"cesium-animation-rectButton",transform:"translate("+e+","+t+")",children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:n.tagName,d:n.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:n.tagName,d:n.d},{class:"cesium-animation-buttonPath",id:i,tagName:r.tagName,transform:r.transform,d:r.d},{tagName:"title",textContent:""}]})}function setShuttleRingFromMouseOrTouch(e,t){var i,r,n,a,o,s,l=e._viewModel,c=l.shuttleRingDragging;c&&widgetForDrag!==e||("mousedown"===t.type||c&&"mousemove"===t.type||"touchstart"===t.type&&1===t.touches.length||c&&"touchmove"===t.type&&1===t.touches.length?(s=e._centerX,i=e._centerY,o=e._svgNode.getBoundingClientRect(),n="touchstart"===t.type||"touchmove"===t.type?(r=t.touches[0].clientX,t.touches[0].clientY):(r=t.clientX,t.clientY),!c&&(r>o.right||r<o.left||n<o.top||n>o.bottom)||(a=e._shuttleRingPointer.getBoundingClientRect(),s=r-s-o.left,o=n-i-o.top,180<(o=180*Math.atan2(o,s)/Math.PI+90)&&(o-=360),s=l.shuttleRingAngle,c||r<a.right&&r>a.left&&n>a.top&&n<a.bottom?(widgetForDrag=e,l.shuttleRingDragging=!0,l.shuttleRingAngle=o):o<s?l.slower():s<o&&l.faster(),t.preventDefault())):(e===widgetForDrag&&(widgetForDrag=void 0),l.shuttleRingDragging=!1))}function SvgButton(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;var i=this;this._clickFunction=function(){var e=i._viewModel.command;e.canExecute&&e()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[subscribeAndEvaluate(t,"toggled",this.setToggled,this),subscribeAndEvaluate(t,"tooltip",this.setTooltip,this),subscribeAndEvaluate(t.command,"canExecute",this.setEnabled,this)]}function Animation(e,t){e=getElement(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;var i=e.ownerDocument,r=document.createElement("style");r.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",i.head.insertBefore(r,i.head.childNodes[0]);var n=document.createElement("div");n.className="cesium-animation-theme",n.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=n,this._themeNormal=n.childNodes[0],this._themeHover=n.childNodes[1],this._themeSelect=n.childNodes[2],this._themeDisabled=n.childNodes[3],this._themeKnob=n.childNodes[4],this._themePointer=n.childNodes[5],this._themeSwoosh=n.childNodes[6],this._themeSwooshHover=n.childNodes[7];var a=document.createElementNS(svgNS,"svg:svg");(this._svgNode=a).setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",xlinkNS);var o=document.createElementNS(svgNS,"g");this._topG=o,this._realtimeSVG=new SvgButton(wingButton(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new SvgButton(rectButton(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new SvgButton(rectButton(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new SvgButton(rectButton(84,99,"animation_pathPause"),t.pauseViewModel);var s=document.createElementNS(svgNS,"g");s.appendChild(this._realtimeSVG.svgElement),s.appendChild(this._playReverseSVG.svgElement),s.appendChild(this._playForwardSVG.svgElement),s.appendChild(this._pauseSVG.svgElement);var l=svgFromObject({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=l;var c=svgIconsById.animation_pathSwooshFX,u=svgIconsById.animation_pathPointer,d=svgFromObject({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:c.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:c.d},{tagName:c.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:c.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=d,this._shuttleRingPointer=svgFromObject({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});var h=svgFromObject({tagName:"g",transform:"translate(100,100)"});this._knobOuter=svgFromObject({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});r=svgFromObject({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:61});this._knobDate=svgText(0,-24,""),this._knobTime=svgText(0,-7,""),this._knobStatus=svgText(0,-41,"");c=svgFromObject({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:61}),u=document.createElementNS(svgNS,"g");u.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(n),o.appendChild(u),o.appendChild(h),o.appendChild(s),u.appendChild(l),u.appendChild(d),u.appendChild(this._shuttleRingPointer),h.appendChild(this._knobOuter),h.appendChild(r),h.appendChild(this._knobDate),h.appendChild(this._knobTime),h.appendChild(this._knobStatus),h.appendChild(c),a.appendChild(o),e.appendChild(a);var p=this;function m(e){setShuttleRingFromMouseOrTouch(p,e)}this._mouseCallback=m,l.addEventListener("mousedown",m,!0),l.addEventListener("touchstart",m,!0),d.addEventListener("mousedown",m,!0),d.addEventListener("touchstart",m,!0),i.addEventListener("mousemove",m,!0),i.addEventListener("touchmove",m,!0),i.addEventListener("mouseup",m,!0),i.addEventListener("touchend",m,!0),i.addEventListener("touchcancel",m,!0),this._shuttleRingPointer.addEventListener("mousedown",m,!0),this._shuttleRingPointer.addEventListener("touchstart",m,!0),this._knobOuter.addEventListener("mousedown",m,!0),this._knobOuter.addEventListener("touchstart",m,!0);var f,g=this._knobTime.childNodes[0],_=this._knobDate.childNodes[0],y=this._knobStatus.childNodes[0];this._subscriptions=[subscribeAndEvaluate(t.pauseViewModel,"toggled",function(e){f!==e&&((f=e)?p._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):p._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),subscribeAndEvaluate(t,"shuttleRingAngle",function(e){setShuttleRingPointer(p._shuttleRingPointer,p._knobOuter,e)}),subscribeAndEvaluate(t,"dateLabel",function(e){_.textContent!==e&&(_.textContent=e)}),subscribeAndEvaluate(t,"timeLabel",function(e){g.textContent!==e&&(g.textContent=e)}),subscribeAndEvaluate(t,"multiplierLabel",function(e){y.textContent!==e&&(y.textContent=e)})],this.applyThemeChanges(),this.resize()}SvgButton.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);for(var e=this._subscriptions,t=0,i=e.length;t<i;t++)e[t].dispose();destroyObject(this)},SvgButton.prototype.isDestroyed=function(){return!1},SvgButton.prototype.setEnabled=function(e){this._enabled!==e&&((this._enabled=e)?this._toggled?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton"):this.svgElement.setAttribute("class","cesium-animation-buttonDisabled"))},SvgButton.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))},SvgButton.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e},Object.defineProperties(Animation.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Animation.prototype.isDestroyed=function(){return!1},Animation.prototype.destroy=function(){defined(this._observer)&&(this._observer.disconnect(),this._observer=void 0);var e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();for(var i=this._subscriptions,r=0,n=i.length;r<n;r++)i[r].dispose();return destroyObject(this)},Animation.prototype.resize=function(){var e,t,i,r,n,a=this._container.clientWidth,o=this._container.clientHeight;a===this._lastWidth&&o===this._lastHeight||(i=o,0===(t=a)&&0===o?(t=200,i=132):0===a?t=(i=o)/132*200:0===o&&(i=(t=a)/200*132),r=t/200,n=i/132,(e=this._svgNode).style.cssText="width: "+t+"px; height: "+i+"px; position: absolute; bottom: 0; left: 0; overflow: hidden;",e.setAttribute("width",t),e.setAttribute("height",i),e.setAttribute("viewBox","0 0 "+t+" "+i),this._topG.setAttribute("transform","scale("+r+","+n+")"),this._centerX=Math.max(1,100*r),this._centerY=Math.max(1,100*n),this._lastHeight=a,this._lastWidth=o)},Animation.prototype.applyThemeChanges=function(){var e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(defined(this._observer))return;var t=this;return t._observer=new MutationObserver(function(){e.body.contains(t._container)&&(t._observer.disconnect(),t._observer=void 0,t.applyThemeChanges())}),void t._observer.observe(e,{childList:!0,subtree:!0})}var i=getElementColor(this._themeNormal),r=getElementColor(this._themeHover),n=getElementColor(this._themeSelect),a=getElementColor(this._themeDisabled),o=getElementColor(this._themeKnob),s=getElementColor(this._themePointer),l=getElementColor(this._themeSwoosh),c=getElementColor(this._themeSwooshHover),o=svgFromObject({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":makeColorString(i,gradientEnabledColor0)},{tagName:"stop",offset:"12%","stop-color":makeColorString(i,gradientEnabledColor1)},{tagName:"stop",offset:"46%","stop-color":makeColorString(i,gradientEnabledColor2)},{tagName:"stop",offset:"81%","stop-color":makeColorString(i,gradientEnabledColor3)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":makeColorString(r,gradientEnabledColor0)},{tagName:"stop",offset:"12%","stop-color":makeColorString(r,gradientEnabledColor1)},{tagName:"stop",offset:"46%","stop-color":makeColorString(r,gradientEnabledColor2)},{tagName:"stop",offset:"81%","stop-color":makeColorString(r,gradientEnabledColor3)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":makeColorString(n,gradientEnabledColor0)},{tagName:"stop",offset:"12%","stop-color":makeColorString(n,gradientEnabledColor1)},{tagName:"stop",offset:"46%","stop-color":makeColorString(n,gradientEnabledColor2)},{tagName:"stop",offset:"81%","stop-color":makeColorString(n,gradientEnabledColor3)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":makeColorString(a,gradientDisabledColor0)},{tagName:"stop",offset:"75%","stop-color":makeColorString(a,gradientDisabledColor1)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":l.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":l.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":l.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":c.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":makeColorString(s,gradientPointerColor)},{tagName:"stop",offset:"100%","stop-color":makeColorString(s,gradientPointerColor)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":makeColorString(o,gradientEnabledColor0)},{tagName:"stop",offset:"60%","stop-color":makeColorString(o,gradientKnobColor)},{tagName:"stop",offset:"85%","stop-color":makeColorString(o,gradientEnabledColor1)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":makeColorString(o,gradientKnobColor)},{tagName:"stop",offset:"60%","stop-color":makeColorString(o,gradientEnabledColor0)},{tagName:"stop",offset:"85%","stop-color":makeColorString(o,gradientEnabledColor3)}]}]});defined(this._defsElement)?this._svgNode.replaceChild(o,this._defsElement):this._svgNode.appendChild(o),this._defsElement=o};var realtimeShuttleRingAngle=15,maxShuttleRingAngle=105;function numberComparator(e,t){return e-t}function getTypicalMultiplierIndex(e,t){e=binarySearch(t,e,numberComparator);return e<0?~e:e}function angleToMultiplier(e,t){if(Math.abs(e)<=realtimeShuttleRingAngle)return e/realtimeShuttleRingAngle;var i,r=realtimeShuttleRingAngle,n=maxShuttleRingAngle;return 0<e?(i=+Math.log(t[t.length-1])/(n-r),Math.exp(0+i*(e-r))):(i=+Math.log(-t[0])/(n-r),-Math.exp(0+i*(Math.abs(e)-r)))}function multiplierToAngle(e,t,i){if(i.clockStep===ClockStep$1.SYSTEM_CLOCK)return realtimeShuttleRingAngle;if(Math.abs(e)<=1)return e*realtimeShuttleRingAngle;var r=t[t.length-1];r<e?e=r:e<-r&&(e=-r);var n,a=realtimeShuttleRingAngle,i=maxShuttleRingAngle;return 0<e?(n=+Math.log(r)/(i-a),+Math.log(e)/n+a):(n=+Math.log(-t[0])/(i-a),-(+Math.log(Math.abs(e))/n+a))}function AnimationViewModel(e){var o=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=AnimationViewModel.defaultDateFormatter,this._timeFormatter=AnimationViewModel.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,knockout.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(AnimationViewModel.defaultTicks),this.timeLabel=void 0,knockout.defineProperty(this,"timeLabel",function(){return o._timeFormatter(o._clockViewModel.currentTime,o)}),this.dateLabel=void 0,knockout.defineProperty(this,"dateLabel",function(){return o._dateFormatter(o._clockViewModel.currentTime,o)}),this.multiplierLabel=void 0,knockout.defineProperty(this,"multiplierLabel",function(){var e=o._clockViewModel;if(e.clockStep===ClockStep$1.SYSTEM_CLOCK)return"今天";e=e.multiplier;return e%1==0?e.toFixed(0)+"x":e.toFixed(3).replace(/0{0,3}$/,"")+"x"}),this.shuttleRingAngle=void 0,knockout.defineProperty(this,"shuttleRingAngle",{get:function(){return multiplierToAngle(e.multiplier,o._allShuttleRingTicks,e)},set:function(e){e=Math.max(Math.min(e,maxShuttleRingAngle),-maxShuttleRingAngle);var t,i,r,n=o._allShuttleRingTicks,a=o._clockViewModel;a.clockStep=ClockStep$1.SYSTEM_CLOCK_MULTIPLIER,Math.abs(e)!==maxShuttleRingAngle?(r=angleToMultiplier(e,n),o.snapToTicks?r=n[getTypicalMultiplierIndex(r,n)]:0!==r&&(100<(t=Math.abs(r))?(i=t.toFixed(0).length-2,i=Math.pow(10,i),r=Math.round(r/i)*i|0):realtimeShuttleRingAngle<t?r=Math.round(r):1<t?r=+r.toFixed(1):0<t&&(r=+r.toFixed(2))),a.multiplier=r):a.multiplier=0<e?n[n.length-1]:n[0]}}),this._canAnimate=void 0,knockout.defineProperty(this,"_canAnimate",function(){var e=o._clockViewModel,t=e.clockRange;if(o.shuttleRingDragging||t===ClockRange$1.UNBOUNDED)return!0;var i=e.multiplier,r=e.currentTime,n=e.startTime,a=!1;return(a=t===ClockRange$1.LOOP_STOP?JulianDate.greaterThan(r,n)||r.equals(n)&&0<i:(t=e.stopTime,JulianDate.greaterThan(r,n)&&JulianDate.lessThan(r,t)||r.equals(n)&&0<i||r.equals(t)&&i<0))||(e.shouldAnimate=!1),a}),this._isSystemTimeAvailable=void 0,knockout.defineProperty(this,"_isSystemTimeAvailable",function(){var e=o._clockViewModel;if(e.clockRange===ClockRange$1.UNBOUNDED)return!0;var t=e.systemTime;return JulianDate.greaterThanOrEquals(t,e.startTime)&&JulianDate.lessThanOrEquals(t,e.stopTime)}),this._isAnimating=void 0,knockout.defineProperty(this,"_isAnimating",function(){return o._clockViewModel.shouldAnimate&&(o._canAnimate||o.shuttleRingDragging)});var t=createCommand(function(){var e=o._clockViewModel;e.shouldAnimate?e.shouldAnimate=!1:o._canAnimate&&(e.shouldAnimate=!0)});this._pauseViewModel=new ToggleButtonViewModel(t,{toggled:knockout.computed(function(){return!o._isAnimating}),tooltip:"暂停"});t=createCommand(function(){var e=o._clockViewModel,t=e.multiplier;0<t&&(e.multiplier=-t),e.shouldAnimate=!0});this._playReverseViewModel=new ToggleButtonViewModel(t,{toggled:knockout.computed(function(){return o._isAnimating&&e.multiplier<0}),tooltip:"后退"});t=createCommand(function(){var e=o._clockViewModel,t=e.multiplier;t<0&&(e.multiplier=-t),e.shouldAnimate=!0});this._playForwardViewModel=new ToggleButtonViewModel(t,{toggled:knockout.computed(function(){return o._isAnimating&&0<e.multiplier&&e.clockStep!==ClockStep$1.SYSTEM_CLOCK}),tooltip:"前进"});t=createCommand(function(){o._clockViewModel.clockStep=ClockStep$1.SYSTEM_CLOCK},knockout.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new ToggleButtonViewModel(t,{toggled:knockout.computed(function(){return e.clockStep===ClockStep$1.SYSTEM_CLOCK}),tooltip:knockout.computed(function(){return o._isSystemTimeAvailable?"今天 (实时)":"当前时间不在范围内"})}),this._slower=createCommand(function(){var e=o._clockViewModel,t=o._allShuttleRingTicks,i=getTypicalMultiplierIndex(e.multiplier,t)-1;0<=i&&(e.multiplier=t[i])}),this._faster=createCommand(function(){var e=o._clockViewModel,t=o._allShuttleRingTicks,i=getTypicalMultiplierIndex(e.multiplier,t)+1;i<t.length&&(e.multiplier=t[i])})}function BaseLayerPickerViewModel(e){var t=(e=defaultValue(e,defaultValue.EMPTY_OBJECT)).globe,i=defaultValue(e.imageryProviderViewModels,[]),r=defaultValue(e.terrainProviderViewModels,[]);this._globe=t,this.imageryProviderViewModels=i.slice(0),this.terrainProviderViewModels=r.slice(0),this.dropDownVisible=!1,knockout.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);var l=knockout.getObservable(this,"imageryProviderViewModels"),t=knockout.pureComputed(function(){for(var e=l(),t={},i=0;i<e.length;i++){var r=e[i],n=r.category;defined(t[n])?t[n].push(r):t[n]=[r]}var a=Object.keys(t),o=[];for(i=0;i<a.length;i++){var s=a[i];o.push({name:s,providers:t[s]})}return o});this._imageryProviders=t;var c=knockout.getObservable(this,"terrainProviderViewModels"),t=knockout.pureComputed(function(){for(var e=c(),t={},i=0;i<e.length;i++){var r=e[i],n=r.category;defined(t[n])?t[n].push(r):t[n]=[r]}var a=Object.keys(t),o=[];for(i=0;i<a.length;i++){var s=a[i];o.push({name:s,providers:t[s]})}return o});this._terrainProviders=t,this.buttonTooltip=void 0,knockout.defineProperty(this,"buttonTooltip",function(){var e=this.selectedImagery,t=this.selectedTerrain,e=defined(e)?e.name:void 0,t=defined(t)?t.name:void 0;return defined(e)&&defined(t)?e+"\n"+t:defined(e)?e:t}),this.buttonImageUrl=void 0,knockout.defineProperty(this,"buttonImageUrl",function(){var e=this.selectedImagery;if(defined(e))return e.iconUrl}),this.selectedImagery=void 0;var d=knockout.observable();this._currentImageryProviders=[],knockout.defineProperty(this,"selectedImagery",{get:function(){return d()},set:function(e){if(d()!==e){var t=this._currentImageryProviders,i=t.length,r=this._globe.imageryLayers,n=!1;for(u=0;u<i;u++)for(var a=r.length,o=0;o<a;o++){var s=r.get(o);if(s.imageryProvider===t[u]){r.remove(s),n=!0;break}}if(defined(e)){var l,c=e.creationCommand();if(Array.isArray(c)){for(var u=c.length-1;0<=u;u--)r.addImageryProvider(c[u],0);this._currentImageryProviders=c.slice(0)}else this._currentImageryProviders=[c],n||defined(l=r.get(0))&&r.remove(l),r.addImageryProvider(c,0)}d(e),this.dropDownVisible=!1}else this.dropDownVisible=!1}}),this.selectedTerrain=void 0;var n=knockout.observable();knockout.defineProperty(this,"selectedTerrain",{get:function(){return n()},set:function(e){var t;n()!==e&&(defined(e)&&(t=e.creationCommand()),this._globe.depthTestAgainstTerrain=!(t instanceof EllipsoidTerrainProvider),this._globe.terrainProvider=t,n(e)),this.dropDownVisible=!1}});var a=this;this._toggleDropDown=createCommand(function(){a.dropDownVisible=!a.dropDownVisible}),this.selectedImagery=defaultValue(e.selectedImageryProviderViewModel,i[0]),this.selectedTerrain=defaultValue(e.selectedTerrainProviderViewModel,r[0])}function BaseLayerPicker(e,t){e=getElement(e);var i=new BaseLayerPickerViewModel(t),r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(r);var n=document.createElement("img");n.setAttribute("draggable","false"),n.className="cesium-baseLayerPicker-selected",n.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),r.appendChild(n);var a=document.createElement("div");a.className="cesium-baseLayerPicker-dropDown",a.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(a);t=document.createElement("div");t.className="cesium-baseLayerPicker-sectionTitle",t.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),t.innerHTML="影像",a.appendChild(t);n=document.createElement("div");n.className="cesium-baseLayerPicker-section",n.setAttribute("data-bind","foreach: _imageryProviders"),a.appendChild(n);t=document.createElement("div");t.className="cesium-baseLayerPicker-category",n.appendChild(t);n=document.createElement("div");n.className="cesium-baseLayerPicker-categoryTitle",n.setAttribute("data-bind","text: name"),t.appendChild(n);n=document.createElement("div");n.className="cesium-baseLayerPicker-choices",n.setAttribute("data-bind","foreach: providers"),t.appendChild(n);t=document.createElement("div");t.className="cesium-baseLayerPicker-item",t.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),n.appendChild(t);n=document.createElement("img");n.className="cesium-baseLayerPicker-itemIcon",n.setAttribute("data-bind","attr: { src: iconUrl }"),n.setAttribute("draggable","false"),t.appendChild(n);n=document.createElement("div");n.className="cesium-baseLayerPicker-itemLabel",n.setAttribute("data-bind","text: name"),t.appendChild(n);t=document.createElement("div");t.className="cesium-baseLayerPicker-sectionTitle",t.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),t.innerHTML="地形",a.appendChild(t);n=document.createElement("div");n.className="cesium-baseLayerPicker-section",n.setAttribute("data-bind","foreach: _terrainProviders"),a.appendChild(n);t=document.createElement("div");t.className="cesium-baseLayerPicker-category",n.appendChild(t);n=document.createElement("div");n.className="cesium-baseLayerPicker-categoryTitle",n.setAttribute("data-bind","text: name"),t.appendChild(n);n=document.createElement("div");n.className="cesium-baseLayerPicker-choices",n.setAttribute("data-bind","foreach: providers"),t.appendChild(n);t=document.createElement("div");t.className="cesium-baseLayerPicker-item",t.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),n.appendChild(t);n=document.createElement("img");n.className="cesium-baseLayerPicker-itemIcon",n.setAttribute("data-bind","attr: { src: iconUrl }"),n.setAttribute("draggable","false"),t.appendChild(n);n=document.createElement("div");n.className="cesium-baseLayerPicker-itemLabel",n.setAttribute("data-bind","text: name"),t.appendChild(n),knockout.applyBindings(i,r),knockout.applyBindings(i,a),this._viewModel=i,this._container=e,this._element=r,this._dropPanel=a,this._closeDropDown=function(e){r.contains(e.target)||a.contains(e.target)||(i.dropDownVisible=!1)},FeatureDetection.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}function ProviderViewModel(e){var t=e.creationFunction;defined(t.canExecute)||(t=createCommand(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=defaultValue(e.category,""),knockout.track(this,["name","tooltip","iconUrl"])}function createDefaultImageryProviderViewModels(){var e=[];return e.push(new ProviderViewModel({name:"单张图片",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:"本地单张图片离线数据",category:"标准坐标系",creationFunction:function(){return new TileMapServiceImageryProvider({url:buildModuleUrl("Assets/Textures/NaturalEarthII")})}})),e.push(new ProviderViewModel({name:"谷歌卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"谷歌卫星地图",category:"标准坐标系",creationFunction:function(){return[new UrlTemplateImageryProvider({url:"http://mt3.google.cn/vt/lyrs=s&x={x}&y={y}&z={z}"})]}})),e.push(new ProviderViewModel({name:"Bing卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"微软提供的高清卫星地图",category:"标准坐标系",creationFunction:function(){return new BingMapsImageryProvider({url:"https://dev.virtualearth.net",key:"AtkX3zhnRe5fyGuLU30uZw8r3sxdBDnpQly7KfFTCB2rGlDgXBG3yr-qEiQEicEc",mapStyle:"Aerial"})}})),e.push(new ProviderViewModel({name:"ESRI卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/esriWorldImagery.png"),tooltip:"ESRI提供的高清卫星地图",category:"标准坐标系",creationFunction:function(){return new ArcGisMapServerImageryProvider({url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",enablePickFeatures:!1})}})),e.push(new ProviderViewModel({name:"天地图卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"国家测绘局提供的天地图卫星",category:"标准坐标系",creationFunction:function(){for(var e=new Array(18),t=0;t<=18;t++)e[t]=t.toString();return new WebMapTileServiceImageryProvider({url:"//t0.tianditu.gov.cn/img_w/wmts?service=WMTS&version=1.0.0&request=GetTile&tilematrix={TileMatrix}&layer=img&style={style}&tilerow={TileRow}&tilecol={TileCol}&tilematrixset={TileMatrixSet}&format=tiles&tk=87949882c75775b5069a0076357b7530",layer:"img",style:"default",format:"tiles",tileMatrixSetID:"w",subdomains:["0","1","2","3","4","5","6","7"],tileMatrixLabels:e,maximumLevel:18})}})),e.push(new ProviderViewModel({name:"谷歌卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/mapboxSatellite.png"),tooltip:"谷歌卫星地图",category:"国测局偏移坐标系",creationFunction:function(){return[new UrlTemplateImageryProvider({url:"http://mt{s}.google.cn/vt/lyrs=s&hl=zh-CN&gl=CN&x={x}&y={y}&z={z}&s=Gali",subdomains:["1","2","3"]}),new UrlTemplateImageryProvider({url:"http://mt{s}.google.cn/vt/imgtp=png32&lyrs=h@207000000&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}&s=Galil",subdomains:["1","2","3"]})]}})),e.push(new ProviderViewModel({name:"高德卫星",iconUrl:buildModuleUrl("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"高德卫星地图",category:"国测局偏移坐标系",creationFunction:function(){return[new UrlTemplateImageryProvider({url:"http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",subdomains:["1","2","3","4"]}),new UrlTemplateImageryProvider({url:"http://webst0{s}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",subdomains:["1","2","3","4"]})]}})),e}function createDefaultTerrainProviderViewModels(){var e=[];return e.push(new ProviderViewModel({name:"无地形",iconUrl:buildModuleUrl("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84标准椭球,即 EPSG:4326",category:"",creationFunction:function(){return new EllipsoidTerrainProvider}})),e.push(new ProviderViewModel({name:"全球地形",iconUrl:buildModuleUrl("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"由 Cesium官方 提供的高分辨率全球地形",category:"",creationFunction:function(){return createWorldTerrain({requestWaterMask:!0,requestVertexNormals:!0})}})),e}function getPickTileset(t){return function(e){e=t._scene.pick(e.position);defined(e)&&e.primitive instanceof Cesium3DTileset&&(t.tileset=e.primitive),t.pickActive=!1}}function selectTilesetOnHover(t,e){e?t._eventHandler.setInputAction(function(e){e=t._scene.pick(e.endPosition);defined(e)&&e.primitive instanceof Cesium3DTileset&&(t.tileset=e.primitive)},ScreenSpaceEventType$1.MOUSE_MOVE):(t._eventHandler.removeInputAction(ScreenSpaceEventType$1.MOUSE_MOVE),t.picking=t.picking)}AnimationViewModel.defaultDateFormatter=function(e,t){e=JulianDate.toDate(e);return e.getFullYear()+"年"+(e.getMonth()+1)+"月"+e.getDate()+"日"},AnimationViewModel.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800],AnimationViewModel.defaultTimeFormatter=function(e,t){e=JulianDate.toDate(e);return sprintf("%02d:%02d:%02d",e.getHours(),e.getMinutes(),e.getSeconds())},AnimationViewModel.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)},AnimationViewModel.prototype.setShuttleRingTicks=function(e){var t,i={},r=this._sortedFilteredPositiveTicks;for(o=r.length=0,n=e.length;o<n;++o)t=e[o],i.hasOwnProperty(t)||(i[t]=!0,r.push(t));r.sort(numberComparator);for(var n,a=[],o=(n=r.length)-1;0<=o;--o)0!==(t=r[o])&&a.push(-t);Array.prototype.push.apply(a,r),this._allShuttleRingTicks=a},Object.defineProperties(AnimationViewModel.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){this._timeFormatter=e}}}),AnimationViewModel._maxShuttleRingAngle=maxShuttleRingAngle,AnimationViewModel._realtimeShuttleRingAngle=realtimeShuttleRingAngle,Object.defineProperties(BaseLayerPickerViewModel.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}}),Object.defineProperties(BaseLayerPicker.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),BaseLayerPicker.prototype.isDestroyed=function(){return!1},BaseLayerPicker.prototype.destroy=function(){return FeatureDetection.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),knockout.cleanNode(this._element),knockout.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),destroyObject(this)},Object.defineProperties(ProviderViewModel.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var stringOptions={maximumFractionDigits:3};function formatMemoryString(e){e/=1048576;return e<1?e.toLocaleString(void 0,stringOptions):Math.round(e).toLocaleString()}function getStatistics(e,t){if(!defined(e))return"";var i=t?e._statisticsPerPass[Cesium3DTilePass$1.PICK]:e._statisticsPerPass[Cesium3DTilePass$1.RENDER],e='<ul class="cesium-cesiumInspector-statistics">';return e+="<li><strong>Visited: </strong>"+i.visited.toLocaleString()+"</li><li><strong>Selected: </strong>"+i.selected.toLocaleString()+"</li><li><strong>Commands: </strong>"+i.numberOfCommands.toLocaleString()+"</li>",e+="</ul>",t||(e+='<ul class="cesium-cesiumInspector-statistics">',e+="<li><strong>Requests: </strong>"+i.numberOfPendingRequests.toLocaleString()+"</li><li><strong>Attempted: </strong>"+i.numberOfAttemptedRequests.toLocaleString()+"</li><li><strong>Processing: </strong>"+i.numberOfTilesProcessing.toLocaleString()+"</li><li><strong>Content Ready: </strong>"+i.numberOfTilesWithContentReady.toLocaleString()+"</li><li><strong>Total: </strong>"+i.numberOfTilesTotal.toLocaleString()+"</li>",e+="</ul>",e+='<ul class="cesium-cesiumInspector-statistics">',e+="<li><strong>Features Selected: </strong>"+i.numberOfFeaturesSelected.toLocaleString()+"</li><li><strong>Features Loaded: </strong>"+i.numberOfFeaturesLoaded.toLocaleString()+"</li><li><strong>Points Selected: </strong>"+i.numberOfPointsSelected.toLocaleString()+"</li><li><strong>Points Loaded: </strong>"+i.numberOfPointsLoaded.toLocaleString()+"</li><li><strong>Triangles Selected: </strong>"+i.numberOfTrianglesSelected.toLocaleString()+"</li>",e+="</ul>",e+='<ul class="cesium-cesiumInspector-statistics">',e+="<li><strong>Tiles styled: </strong>"+i.numberOfTilesStyled.toLocaleString()+"</li><li><strong>Features styled: </strong>"+i.numberOfFeaturesStyled.toLocaleString()+"</li>",e+="</ul>",e+='<ul class="cesium-cesiumInspector-statistics">',e+="<li><strong>Children Union Culled: </strong>"+i.numberOfTilesCulledWithChildrenUnion.toLocaleString()+"</li>",e+="</ul>",e+='<ul class="cesium-cesiumInspector-statistics">',e+="<li><strong>Geometry Memory (MB): </strong>"+formatMemoryString(i.geometryByteLength)+"</li><li><strong>Texture Memory (MB): </strong>"+formatMemoryString(i.texturesByteLength)+"</li><li><strong>Batch Table Memory (MB): </strong>"+formatMemoryString(i.batchTableByteLength)+"</li>",e+="</ul>"),e}var colorBlendModes=[{text:"Highlight",value:Cesium3DTileColorBlendMode$1.HIGHLIGHT},{text:"Replace",value:Cesium3DTileColorBlendMode$1.REPLACE},{text:"Mix",value:Cesium3DTileColorBlendMode$1.MIX}],highlightColor=new Color(1,1,0,.4),scratchColor=new Color,oldColor=new Color;function Cesium3DTilesInspectorViewModel(r,e){var n=this,t=r.canvas;this._eventHandler=new ScreenSpaceEventHandler(t),this._scene=r,this._performanceContainer=e,this._canvas=t,this._performanceDisplay=new PerformanceDisplay({container:e}),this._statisticsText="",this._pickStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this._tileset=void 0,this._feature=void 0,this._tile=void 0,knockout.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_editorError","showPickStatistics","showStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile"]),this._properties=knockout.observable({}),this.properties=[],knockout.defineProperty(this,"properties",function(){var e,t=[],i=n._properties();for(e in i)i.hasOwnProperty(e)&&t.push(e);return t});var i=knockout.observable();knockout.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return i()},set:function(e){i(e),defined(n._tileset)&&(n._tileset.dynamicScreenSpaceError=e)}}),this.dynamicScreenSpaceError=!1;var a=knockout.observable();knockout.defineProperty(this,"colorBlendMode",{get:function(){return a()},set:function(e){a(e),defined(n._tileset)&&(n._tileset.colorBlendMode=e,n._scene.requestRender())}}),this.colorBlendMode=Cesium3DTileColorBlendMode$1.HIGHLIGHT;var o=knockout.observable(),s=knockout.observable();knockout.defineProperty(this,"picking",{get:function(){return s()},set:function(e){s(e),e?n._eventHandler.setInputAction(function(e){var t,i=r.pick(e.endPosition);i instanceof Cesium3DTileFeature?(n.feature=i,n.tile=i.content.tile):defined(i)&&defined(i.content)?(n.feature=void 0,n.tile=i.content.tile):(n.feature=void 0,n.tile=void 0),defined(n._tileset)&&(o&&defined(i)&&defined(i.content)?(r.pickPositionSupported&&defined(t=r.pickPosition(e.endPosition))&&(n._tileset.debugPickPosition=t),n._tileset.debugPickedTile=i.content.tile):n._tileset.debugPickedTile=void 0,n._scene.requestRender())},ScreenSpaceEventType$1.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(ScreenSpaceEventType$1.MOUSE_MOVE))}}),this.picking=!0;var l=knockout.observable();knockout.defineProperty(this,"colorize",{get:function(){return l()},set:function(e){l(e),defined(n._tileset)&&(n._tileset.debugColorizeTiles=e,n._scene.requestRender())}}),this.colorize=!1;var c=knockout.observable();knockout.defineProperty(this,"wireframe",{get:function(){return c()},set:function(e){c(e),defined(n._tileset)&&(n._tileset.debugWireframe=e,n._scene.requestRender())}}),this.wireframe=!1;var u=knockout.observable();knockout.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(e){u(e),defined(n._tileset)&&(n._tileset.debugShowBoundingVolume=e,n._scene.requestRender())}}),this.showBoundingVolumes=!1;var d=knockout.observable();knockout.defineProperty(this,"showContentBoundingVolumes",{get:function(){return d()},set:function(e){d(e),defined(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=e,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;var h=knockout.observable();knockout.defineProperty(this,"showRequestVolumes",{get:function(){return h()},set:function(e){h(e),defined(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=e,n._scene.requestRender())}}),this.showRequestVolumes=!1;var p=knockout.observable();knockout.defineProperty(this,"freezeFrame",{get:function(){return p()},set:function(e){p(e),defined(n._tileset)&&(n._tileset.debugFreezeFrame=e,n._scene.debugShowFrustumPlanes=e,n._scene.requestRender())}}),this.freezeFrame=!1,knockout.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return o()},set:function(e){o(e),defined(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=e,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;var m=knockout.observable();knockout.defineProperty(this,"showGeometricError",{get:function(){return m()},set:function(e){m(e),defined(n._tileset)&&(n._tileset.debugShowGeometricError=e,n._scene.requestRender())}}),this.showGeometricError=!1;var f=knockout.observable();knockout.defineProperty(this,"showRenderingStatistics",{get:function(){return f()},set:function(e){f(e),defined(n._tileset)&&(n._tileset.debugShowRenderingStatistics=e,n._scene.requestRender())}}),this.showRenderingStatistics=!1;var g=knockout.observable();knockout.defineProperty(this,"showMemoryUsage",{get:function(){return g()},set:function(e){g(e),defined(n._tileset)&&(n._tileset.debugShowMemoryUsage=e,n._scene.requestRender())}}),this.showMemoryUsage=!1;var _=knockout.observable();knockout.defineProperty(this,"showUrl",{get:function(){return _()},set:function(e){_(e),defined(n._tileset)&&(n._tileset.debugShowUrl=e,n._scene.requestRender())}}),this.showUrl=!1;var y=knockout.observable();knockout.defineProperty(this,"maximumScreenSpaceError",{get:function(){return y()},set:function(e){e=Number(e),isNaN(e)||(y(e),defined(n._tileset)&&(n._tileset.maximumScreenSpaceError=e))}}),this.maximumScreenSpaceError=16;var C=knockout.observable();knockout.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return C()},set:function(e){e=Number(e),isNaN(e)||(C(e),defined(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=e))}}),this.dynamicScreenSpaceErrorDensity=.00278,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,knockout.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(C(),1/6)},set:function(e){C(Math.pow(e,6))}});var v=knockout.observable();knockout.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return v()},set:function(e){e=Number(e),isNaN(e)||(v(e),defined(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=e))}}),this.dynamicScreenSpaceErrorFactor=4;var S=getPickTileset(this),x=knockout.observable();knockout.defineProperty(this,"pickActive",{get:function(){return x()},set:function(e){x(e),e?n._eventHandler.setInputAction(S,ScreenSpaceEventType$1.LEFT_CLICK):n._eventHandler.removeInputAction(ScreenSpaceEventType$1.LEFT_CLICK)}});var T=knockout.observable();knockout.defineProperty(this,"pointCloudShading",{get:function(){return T()},set:function(e){T(e),defined(n._tileset)&&(n._tileset.pointCloudShading.attenuation=e)}}),this.pointCloudShading=!1;var b=knockout.observable();knockout.defineProperty(this,"geometricErrorScale",{get:function(){return b()},set:function(e){e=Number(e),isNaN(e)||(b(e),defined(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=e))}}),this.geometricErrorScale=1;var E=knockout.observable();knockout.defineProperty(this,"maximumAttenuation",{get:function(){return E()},set:function(e){e=Number(e),isNaN(e)||(E(e),defined(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=0===e?void 0:e))}}),this.maximumAttenuation=0;var P=knockout.observable();knockout.defineProperty(this,"baseResolution",{get:function(){return P()},set:function(e){e=Number(e),isNaN(e)||(P(e),defined(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=0===e?void 0:e))}}),this.baseResolution=0;var A=knockout.observable();knockout.defineProperty(this,"eyeDomeLighting",{get:function(){return A()},set:function(e){A(e),defined(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=e)}}),this.eyeDomeLighting=!1;var w=knockout.observable();knockout.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return w()},set:function(e){e=Number(e),isNaN(e)||(w(e),defined(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=e))}}),this.eyeDomeLightingStrength=1;var D=knockout.observable();knockout.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return D()},set:function(e){e=Number(e),isNaN(e)||(D(e),defined(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=e))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;var M=knockout.observable();knockout.defineProperty(this,"skipLevelOfDetail",{get:function(){return M()},set:function(e){M(e),defined(n._tileset)&&(n._tileset.skipLevelOfDetail=e)}}),this.skipLevelOfDetail=!0;var I=knockout.observable();knockout.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return I()},set:function(e){e=Number(e),isNaN(e)||(I(e),defined(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=e))}}),this.skipScreenSpaceErrorFactor=16;var R=knockout.observable();knockout.defineProperty(this,"baseScreenSpaceError",{get:function(){return R()},set:function(e){e=Number(e),isNaN(e)||(R(e),defined(n._tileset)&&(n._tileset.baseScreenSpaceError=e))}}),this.baseScreenSpaceError=1024;var O=knockout.observable();knockout.defineProperty(this,"skipLevels",{get:function(){return O()},set:function(e){e=Number(e),isNaN(e)||(O(e),defined(n._tileset)&&(n._tileset.skipLevels=e))}}),this.skipLevels=1;var L=knockout.observable();knockout.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return L()},set:function(e){L(e),defined(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=e)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;var F=knockout.observable();knockout.defineProperty(this,"loadSiblings",{get:function(){return F()},set:function(e){F(e),defined(n._tileset)&&(n._tileset.loadSiblings=e)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=r.postRender.addEventListener(function(){n._update()}),defined(this._tileset)||selectTilesetOnHover(this,!0)}function hasFeatures(e){if(0<e.featuresLength)return 1;var t=e.innerContents;if(defined(t)){for(var i=t.length,r=0;r<i;++r)if(!hasFeatures(t[r]))return;return 1}}function Cesium3DTilesInspector(e,t){e=getElement(e);var i=document.createElement("div"),r=document.createElement("div");r.setAttribute("data-bind","visible: performance");var n=new Cesium3DTilesInspectorViewModel(t,r);this._viewModel=n,this._container=e,this._element=i;var a=document.createElement("div");a.textContent="3D Tiles Inspector",a.className="cesium-cesiumInspector-button",a.setAttribute("data-bind","click: toggleInspector"),i.appendChild(a),i.className="cesium-cesiumInspector cesium-3DTilesInspector",i.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(i);var o=document.createElement("div");(this._panel=o).className="cesium-cesiumInspector-dropDown",i.appendChild(o);var s=InspectorShared.createSection,l=InspectorShared.createCheckbox,c=s(o,"Tileset","tilesetVisible","toggleTileset"),u=s(o,"Display","displayVisible","toggleDisplay"),d=s(o,"Update","updateVisible","toggleUpdate"),h=s(o,"Logging","loggingVisible","toggleLogging"),p=s(o,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),t=s(o,"Style","styleVisible","toggleStyle"),a=s(o,"Optimization","optimizationVisible","toggleOptimization"),e=document.createElement("div");e.className="field-group";s=document.createElement("label");s.className="field-label",s.appendChild(document.createTextNode("Properties: "));o=document.createElement("div");o.setAttribute("data-bind","text: properties"),e.appendChild(s),e.appendChild(o),c.appendChild(e),c.appendChild(makeButton("togglePickTileset","Pick Tileset","pickActive")),c.appendChild(makeButton("trimTilesCache","Trim Tiles Cache")),c.appendChild(l("Enable Picking","picking")),u.appendChild(l("Colorize","colorize")),u.appendChild(l("Wireframe","wireframe")),u.appendChild(l("Bounding Volumes","showBoundingVolumes")),u.appendChild(l("Content Volumes","showContentBoundingVolumes")),u.appendChild(l("Request Volumes","showRequestVolumes")),u.appendChild(l("Point Cloud Shading","pointCloudShading"));c=document.createElement("div");c.setAttribute("data-bind","visible: pointCloudShading"),c.appendChild(makeRangeInput("geometricErrorScale",0,2,.01,"Geometric Error Scale")),c.appendChild(makeRangeInput("maximumAttenuation",0,32,1,"Maximum Attenuation")),c.appendChild(makeRangeInput("baseResolution",0,1,.01,"Base Resolution")),c.appendChild(l("Eye Dome Lighting (EDL)","eyeDomeLighting")),u.appendChild(c);u=document.createElement("div");u.setAttribute("data-bind","visible: eyeDomeLighting"),u.appendChild(makeRangeInput("eyeDomeLightingStrength",0,2,.1,"EDL Strength")),u.appendChild(makeRangeInput("eyeDomeLightingRadius",0,4,.1,"EDL Radius")),c.appendChild(u),d.appendChild(l("Freeze Frame","freezeFrame")),d.appendChild(l("Dynamic Screen Space Error","dynamicScreenSpaceError"));u=document.createElement("div");u.appendChild(makeRangeInput("maximumScreenSpaceError",0,128,1,"Maximum Screen Space Error")),d.appendChild(u);u=document.createElement("div");u.setAttribute("data-bind","visible: dynamicScreenSpaceError"),u.appendChild(makeRangeInput("dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"Screen Space Error Density","dynamicScreenSpaceErrorDensity")),u.appendChild(makeRangeInput("dynamicScreenSpaceErrorFactor",1,10,.1,"Screen Space Error Factor")),d.appendChild(u),h.appendChild(l("Performance","performance")),h.appendChild(r),h.appendChild(l("Statistics","showStatistics"));r=document.createElement("div");r.className="cesium-3dTilesInspector-statistics",r.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),h.appendChild(r),h.appendChild(l("Pick Statistics","showPickStatistics"));r=document.createElement("div");r.className="cesium-3dTilesInspector-statistics",r.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),h.appendChild(r);r=document.createElement("div");t.appendChild(r),r.appendChild(document.createTextNode("Color Blend Mode: "));t=document.createElement("select");t.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),r.appendChild(t);t=document.createElement("textarea");t.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),r.className="cesium-cesiumInspector-styleEditor",r.appendChild(t);t=makeButton("compileStyle","Compile (Ctrl+Enter)");r.appendChild(t);t=document.createElement("div");t.className="cesium-cesiumInspector-error",t.setAttribute("data-bind","text: editorError"),r.appendChild(t),p.appendChild(l("Show Picked Only","showOnlyPickedTileDebugLabel")),p.appendChild(l("Geometric Error","showGeometricError")),p.appendChild(l("Rendering Statistics","showRenderingStatistics")),p.appendChild(l("Memory Usage (MB)","showMemoryUsage")),p.appendChild(l("Url","showUrl")),a.appendChild(l("Skip Tile LODs","skipLevelOfDetail"));p=document.createElement("div");p.appendChild(makeRangeInput("skipScreenSpaceErrorFactor",1,50,1,"Skip SSE Factor")),a.appendChild(p);p=document.createElement("div");p.appendChild(makeRangeInput("baseScreenSpaceError",0,4096,1,"SSE before skipping LOD")),a.appendChild(p);p=document.createElement("div");p.appendChild(makeRangeInput("skipLevels",0,10,1,"Min. levels to skip")),a.appendChild(p),a.appendChild(l("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),a.appendChild(l("Load siblings of visible tiles","loadSiblings")),knockout.applyBindings(n,i)}function makeRangeInput(e,t,i,r,n,a){a=defaultValue(a,e);var o=document.createElement("input");o.setAttribute("data-bind","value: "+a),o.type="number";a=document.createElement("input");a.type="range",a.min=t,a.max=i,a.step=r,a.setAttribute("data-bind",'valueUpdate: "input", value: '+e);e=document.createElement("div");e.appendChild(a);a=document.createElement("div");return a.className="cesium-cesiumInspector-slider",a.appendChild(document.createTextNode(n)),a.appendChild(o),a.appendChild(e),a}function makeButton(e,t,i){var r=document.createElement("button");r.type="button",r.textContent=t,r.className="cesium-cesiumInspector-pickButton";e="click: "+e;return defined(i)&&(e+=', css: {"cesium-cesiumInspector-pickButtonHighlight" : '+i+"}"),r.setAttribute("data-bind",e),r}function frustumStatisticsToString(e){if(defined(e)){var t,i="Command Statistics",r=e.commandsInFrustums;for(t in r)if(r.hasOwnProperty(t)){var n,a=parseInt(t,10);if(7===a)n="1, 2 and 3";else{for(var o=[],s=2;0<=s;s--){var l=Math.pow(2,s);l<=a&&(o.push(s+1),a-=l)}n=o.reverse().join(" and ")}i+="<br>    "+r[t]+" in frustum "+n}i+="<br>Total: "+e.totalCommands}return i}function boundDepthFrustum(e,t,i){t=Math.min(i,t);return t=Math.max(t,e)}Object.defineProperties(Cesium3DTilesInspectorViewModel.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},colorBlendModes:{get:function(){return colorBlendModes}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,defined(e)){var t=this;e.readyPromise.then(function(e){t.isDestroyed()||t._properties(e.properties)});for(var i=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],r=i.length,n=0;n<r;++n){var a=i[n];this[a]=this[a]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings;var o=e.pointCloudShading;this.pointCloudShading=o.attenuation,this.geometricErrorScale=o.geometricErrorScale,this.maximumAttenuation=o.maximumAttenuation||0,this.baseResolution=o.baseResolution||0,this.eyeDomeLighting=o.eyeDomeLighting,this.eyeDomeLightingStrength=o.eyeDomeLightingStrength,this.eyeDomeLightingRadius=o.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=getStatistics(e,!1),this._pickStatisticsText=getStatistics(e,!0),selectTilesetOnHover(this,!1)}},feature:{get:function(){return this._feature},set:function(e){var t;this._feature!==e&&(defined(t=this._feature)&&!t.content.isDestroyed()&&(!this.colorize&&defined(this._style)?t.color=defined(this._style.color)?this._style.color.evaluateColor(t,scratchColor):Color.WHITE:t.color=oldColor,this._scene.requestRender()),defined(e)&&(Color.clone(e.color,oldColor),e.color=highlightColor,this._scene.requestRender()),this._feature=e)}},tile:{get:function(){return this._tile},set:function(e){var t;this._tile!==e&&(!defined(t=this._tile)||t.isDestroyed()||hasFeatures(t.content)||(t.color=oldColor,this._scene.requestRender()),defined(e)&&!hasFeatures(e.content)&&(Color.clone(e.color,oldColor),e.color=highlightColor,this._scene.requestRender()),this._tile=e)}}}),Cesium3DTilesInspectorViewModel.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive},Cesium3DTilesInspectorViewModel.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible},Cesium3DTilesInspectorViewModel.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible},Cesium3DTilesInspectorViewModel.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible},Cesium3DTilesInspectorViewModel.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible},Cesium3DTilesInspectorViewModel.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible},Cesium3DTilesInspectorViewModel.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible},Cesium3DTilesInspectorViewModel.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible},Cesium3DTilesInspectorViewModel.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible},Cesium3DTilesInspectorViewModel.prototype.trimTilesCache=function(){defined(this._tileset)&&this._tileset.trimLoadedTiles()},Cesium3DTilesInspectorViewModel.prototype.compileStyle=function(){var e=this._tileset;if(defined(e)&&this.styleString!==JSON.stringify(e.style)){this._editorError="";try{0===this.styleString.length&&(this.styleString="{}"),this._style=new Cesium3DTileStyle(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(e){this._editorError=e.toString()}this.feature=this._feature,this.tile=this._tile}},Cesium3DTilesInspectorViewModel.prototype.styleEditorKeyPress=function(e,t){if(9===t.keyCode){t.preventDefault();var i,r=t.target,n=r.selectionStart,a=r.selectionEnd,o=a,s=r.value.slice(n,a).split("\n"),l=s.length;if(t.shiftKey)for(i=0;i<l;++i)" "===s[i][0]&&(" "===s[i][1]?(s[i]=s[i].substr(2),o-=2):(s[i]=s[i].substr(1),--o));else for(i=0;i<l;++i)s[i]=" "+s[i],o+=2;var c=s.join("\n");r.value=r.value.slice(0,n)+c+r.value.slice(a),r.selectionStart=n!==a?n:o,r.selectionEnd=o}else!t.ctrlKey||10!==t.keyCode&&13!==t.keyCode||this.compileStyle();return!0},Cesium3DTilesInspectorViewModel.prototype._update=function(){var e=this._tileset;if(this.performance&&this._performanceDisplay.update(),defined(e)){if(e.isDestroyed())return this.tile=void 0,this.feature=void 0,void(this.tileset=void 0);var t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=getStatistics(e,!1),this._pickStatisticsText=getStatistics(e,!0))},Cesium3DTilesInspectorViewModel.prototype.isDestroyed=function(){return!1},Cesium3DTilesInspectorViewModel.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();var t=this;return this._definedProperties.forEach(function(e){knockout.getObservable(t,e).dispose()}),destroyObject(this)},Cesium3DTilesInspectorViewModel.getStatistics=getStatistics,Object.defineProperties(Cesium3DTilesInspector.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Cesium3DTilesInspector.prototype.isDestroyed=function(){return!1},Cesium3DTilesInspector.prototype.destroy=function(){return knockout.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),destroyObject(this)};var scratchPickRay=new Ray,scratchPickCartesian=new Cartesian3;function CesiumInspectorViewModel(e,t){var c=this,i=e.canvas,r=new ScreenSpaceEventHandler(i);this._eventHandler=r,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;var n,u=this._scene.globe;function a(e){e=c._scene.pick({x:e.position.x,y:e.position.y});defined(e)&&(c.primitive=defined(e.collection)?e.collection:e.primitive),c._scene.requestRender(),c.pickPrimitiveActive=!1}function o(e){var t,i=u.ellipsoid,e=c._scene.camera.getPickRay(e.position,scratchPickRay),e=u.pick(e,c._scene,scratchPickCartesian);if(defined(e))for(var r=i.cartesianToCartographic(e),n=u._surface.tileProvider._tilesToRenderByTextureCount,a=0;!t&&a<n.length;++a){var o=n[a];if(defined(o))for(var s=0;!t&&s<o.length;++s){var l=o[s];Rectangle.contains(l.rectangle,r)&&(t=l)}}c.tile=t,c.pickTileActive=!1}u.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.globeDepth=!1,this.pickDepth=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",knockout.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","globeDepth","pickDepth","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=createCommand(function(){c.dropDownVisible=!c.dropDownVisible}),this._toggleGeneral=createCommand(function(){c.generalVisible=!c.generalVisible}),this._togglePrimitives=createCommand(function(){c.primitivesVisible=!c.primitivesVisible}),this._toggleTerrain=createCommand(function(){c.terrainVisible=!c.terrainVisible}),this._frustumsSubscription=knockout.getObservable(this,"frustums").subscribe(function(e){c._scene.debugShowFrustums=e,c._scene.requestRender()}),this._frustumPlanesSubscription=knockout.getObservable(this,"frustumPlanes").subscribe(function(e){c._scene.debugShowFrustumPlanes=e,c._scene.requestRender()}),this._performanceSubscription=knockout.getObservable(this,"performance").subscribe(function(e){e?c._performanceDisplay=new PerformanceDisplay({container:c._performanceContainer}):c._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=createCommand(function(){return c._primitive.debugShowBoundingVolume=c.primitiveBoundingSphere,c._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=knockout.getObservable(this,"primitiveBoundingSphere").subscribe(function(){c._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=createCommand(function(){var e;return c.primitiveReferenceFrame?(e=c._primitive.modelMatrix,c._modelMatrixPrimitive=new DebugModelMatrixPrimitive({modelMatrix:e}),c._scene.primitives.add(c._modelMatrixPrimitive)):defined(c._modelMatrixPrimitive)&&(c._scene.primitives.remove(c._modelMatrixPrimitive),c._modelMatrixPrimitive=void 0),c._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=knockout.getObservable(this,"primitiveReferenceFrame").subscribe(function(){c._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=createCommand(function(){return c.filterPrimitive?c._scene.debugCommandFilter=function(e){return!(!defined(c._modelMatrixPrimitive)||e.owner!==c._modelMatrixPrimitive._primitive)||!!defined(c._primitive)&&(e.owner===c._primitive||e.owner===c._primitive._billboardCollection||e.owner.primitive===c._primitive)}:c._scene.debugCommandFilter=void 0,!0}),this._filterPrimitiveSubscription=knockout.getObservable(this,"filterPrimitive").subscribe(function(){c._doFilterPrimitive(),c._scene.requestRender()}),this._wireframeSubscription=knockout.getObservable(this,"wireframe").subscribe(function(e){u._surface.tileProvider._debug.wireframe=e,c._scene.requestRender()}),this._globeDepthSubscription=knockout.getObservable(this,"globeDepth").subscribe(function(e){c._scene.debugShowGlobeDepth=e,c._scene.requestRender()}),this._pickDepthSubscription=knockout.getObservable(this,"pickDepth").subscribe(function(e){c._scene.debugShowPickDepth=e,c._scene.requestRender()}),this._depthFrustumSubscription=knockout.getObservable(this,"depthFrustum").subscribe(function(e){c._scene.debugShowDepthFrustum=e,c._scene.requestRender()}),this._incrementDepthFrustum=createCommand(function(){var e=c.depthFrustum+1;return c.depthFrustum=boundDepthFrustum(1,c._numberOfFrustums,e),c._scene.requestRender(),!0}),this._decrementDepthFrustum=createCommand(function(){var e=c.depthFrustum-1;return c.depthFrustum=boundDepthFrustum(1,c._numberOfFrustums,e),c._scene.requestRender(),!0}),this._suspendUpdatesSubscription=knockout.getObservable(this,"suspendUpdates").subscribe(function(e){(u._surface._debug.suspendLodUpdate=e)||(c.filterTile=!1)}),this._showTileCoordinates=createCommand(function(){return c.tileCoordinates&&!defined(n)?n=e.imageryLayers.addImageryProvider(new TileCoordinatesImageryProvider({tilingScheme:e.terrainProvider.tilingScheme})):!c.tileCoordinates&&defined(n)&&(e.imageryLayers.remove(n),n=void 0),!0}),this._tileCoordinatesSubscription=knockout.getObservable(this,"tileCoordinates").subscribe(function(){c._showTileCoordinates(),c._scene.requestRender()}),this._tileBoundingSphereSubscription=knockout.getObservable(this,"tileBoundingSphere").subscribe(function(){c._showTileBoundingSphere(),c._scene.requestRender()}),this._showTileBoundingSphere=createCommand(function(){return c.tileBoundingSphere?u._surface.tileProvider._debug.boundingSphereTile=c._tile:u._surface.tileProvider._debug.boundingSphereTile=void 0,c._scene.requestRender(),!0}),this._doFilterTile=createCommand(function(){return c.filterTile?(c.suspendUpdates=!0,u._surface._tilesToRender=[],defined(c._tile)&&c._tile.renderable&&u._surface._tilesToRender.push(c._tile)):c.suspendUpdates=!1,!0}),this._filterTileSubscription=knockout.getObservable(this,"filterTile").subscribe(function(){c.doFilterTile(),c._scene.requestRender()}),this._pickPrimitive=createCommand(function(){c.pickPrimitiveActive=!c.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=knockout.getObservable(this,"pickPrimitiveActive").subscribe(function(e){e?r.setInputAction(a,ScreenSpaceEventType$1.LEFT_CLICK):r.removeInputAction(ScreenSpaceEventType$1.LEFT_CLICK)}),this._pickTile=createCommand(function(){c.pickTileActive=!c.pickTileActive}),this._pickTileActiveSubscription=knockout.getObservable(this,"pickTileActive").subscribe(function(e){e?r.setInputAction(o,ScreenSpaceEventType$1.LEFT_CLICK):r.removeInputAction(ScreenSpaceEventType$1.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){c._update()})}function CesiumInspector(e,t){e=getElement(e);var i=document.createElement("div"),r=new CesiumInspectorViewModel(t,i);this._viewModel=r,this._container=e;var n=document.createElement("div");this._element=n;var a=document.createElement("div");a.textContent="Cesium Inspector",a.className="cesium-cesiumInspector-button",a.setAttribute("data-bind","click: toggleDropDown"),n.appendChild(a),n.className="cesium-cesiumInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);var o=document.createElement("div");(this._panel=o).className="cesium-cesiumInspector-dropDown",n.appendChild(o);var s=InspectorShared.createSection,l=InspectorShared.createCheckbox,c=s(o,"General","generalVisible","toggleGeneral"),u=l("Show Frustums","frustums"),d=document.createElement("div");d.className="cesium-cesiumInspector-frustumStatistics",d.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(d),c.appendChild(u),c.appendChild(l("Show Frustum Planes","frustumPlanes")),c.appendChild(l("Performance Display","performance")),i.className="cesium-cesiumInspector-performanceDisplay",c.appendChild(i);var h=document.createElement("div");h.className="cesium-cesiumInspector-shaderCache",h.setAttribute("data-bind","html: shaderCacheText"),c.appendChild(h);var p=document.createElement("div");c.appendChild(p);t=document.createElement("span");t.setAttribute("data-bind",'html: "     Frustum:"'),p.appendChild(t);a=document.createElement("span");a.setAttribute("data-bind","text: depthFrustumText"),p.appendChild(a);e=document.createElement("input");e.type="button",e.value="-",e.className="cesium-cesiumInspector-pickButton",e.setAttribute("data-bind","click: decrementDepthFrustum"),p.appendChild(e);n=document.createElement("input");n.type="button",n.value="+",n.className="cesium-cesiumInspector-pickButton",n.setAttribute("data-bind","click: incrementDepthFrustum"),p.appendChild(n);d=s(o,"Primitives","primitivesVisible","togglePrimitives"),u=document.createElement("div");u.className="cesium-cesiumInspector-pickSection",d.appendChild(u);i=document.createElement("input");i.type="button",i.value="Pick a primitive",i.className="cesium-cesiumInspector-pickButton",i.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');h=document.createElement("div");h.className="cesium-cesiumInspector-center",h.appendChild(i),u.appendChild(h),u.appendChild(l("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),u.appendChild(l("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=l("Show only selected","filterPrimitive","hasPickedPrimitive"),u.appendChild(this._primitiveOnly);c=s(o,"Terrain","terrainVisible","toggleTerrain"),t=document.createElement("div");t.className="cesium-cesiumInspector-pickSection",c.appendChild(t);a=document.createElement("input");a.type="button",a.value="Pick a tile",a.className="cesium-cesiumInspector-pickButton",a.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),(h=document.createElement("div")).appendChild(a),h.className="cesium-cesiumInspector-center",t.appendChild(h);e=document.createElement("div");t.appendChild(e);p=document.createElement("input");p.type="button",p.value="Parent",p.className="cesium-cesiumInspector-pickButton",p.setAttribute("data-bind","click: selectParent");n=document.createElement("input");n.type="button",n.value="NW",n.className="cesium-cesiumInspector-pickButton",n.setAttribute("data-bind","click: selectNW");d=document.createElement("input");d.type="button",d.value="NE",d.className="cesium-cesiumInspector-pickButton",d.setAttribute("data-bind","click: selectNE");i=document.createElement("input");i.type="button",i.value="SW",i.className="cesium-cesiumInspector-pickButton",i.setAttribute("data-bind","click: selectSW");u=document.createElement("input");u.type="button",u.value="SE",u.className="cesium-cesiumInspector-pickButton",u.setAttribute("data-bind","click: selectSE");s=document.createElement("div");s.className="cesium-cesiumInspector-tileText",e.className="cesium-cesiumInspector-frustumStatistics",e.appendChild(s),e.setAttribute("data-bind","visible: hasPickedTile"),s.setAttribute("data-bind","html: tileText");o=document.createElement("div");o.className="cesium-cesiumInspector-relativeText",o.textContent="Select relative:",e.appendChild(o);a=document.createElement("table"),h=document.createElement("tr"),s=document.createElement("tr"),o=document.createElement("td");o.appendChild(p);p=document.createElement("td");p.appendChild(n);n=document.createElement("td");n.appendChild(d),h.appendChild(o),h.appendChild(p),h.appendChild(n);p=document.createElement("td"),n=document.createElement("td");n.appendChild(i);i=document.createElement("td");i.appendChild(u),s.appendChild(p),s.appendChild(n),s.appendChild(i),a.appendChild(h),a.appendChild(s),e.appendChild(a),t.appendChild(l("Show bounding volume","tileBoundingSphere","hasPickedTile")),t.appendChild(l("Show only selected","filterTile","hasPickedTile")),c.appendChild(l("Wireframe","wireframe")),c.appendChild(l("Suspend LOD update","suspendUpdates")),c.appendChild(l("Show tile coordinates","tileCoordinates")),knockout.applyBindings(r,this._element)}function getDefaultSkyBoxUrl(e){return buildModuleUrl("Assets/Textures/SkyBox/tycho2t3_80_"+e+".jpg")}function startRenderLoop(n){n._renderLoopRunning=!0;var a=0;requestAnimationFramePolyFill(function e(t){if(!n.isDestroyed())if(n._useDefaultRenderLoop)try{var i,r=n._targetFrameRate;defined(r)?(i=1e3/r)<(r=t-a)&&(n.resize(),n.render(),a=t-r%i):(n.resize(),n.render()),requestAnimationFramePolyFill(e)}catch(e){n._useDefaultRenderLoop=!1,n._renderLoopRunning=!1,n._showRenderLoopErrors&&n.showErrorPanel("WebGL渲染时发生错误,渲染已经停止,请刷新页面。",void 0,e)}else n._renderLoopRunning=!1})}function configurePixelRatio(e){var t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,defined(e._scene)&&(e._scene.pixelRatio=t),t}function configureCanvasSize(e){var t=e._canvas,i=t.clientWidth,r=t.clientHeight,n=configurePixelRatio(e);e._canvasClientWidth=i,e._canvasClientHeight=r,i*=n,r*=n,t.width=i,t.height=r,e._canRender=0!=i&&0!=r,e._lastDevicePixelRatio=window.devicePixelRatio}function configureCameraFrustum(e){var t=e._canvas,i=t.width,t=t.height;0!==i&&0!==t&&(defined((e=e._scene.camera.frustum).aspectRatio)?e.aspectRatio=i/t:(e.top=e.right*(t/i),e.bottom=-e.top))}function CesiumWidget(e,t){e=getElement(e),t=defaultValue(t,defaultValue.EMPTY_OBJECT);var i=document.createElement("div");i.className="cesium-widget",e.appendChild(i);var r=document.createElement("canvas"),n=FeatureDetection.supportsImageRenderingPixelated();function a(){r!==r.ownerDocument.activeElement&&r.ownerDocument.activeElement.blur()}(this._supportsImageRenderingPixelated=n)&&(r.style.imageRendering=FeatureDetection.imageRenderingValue()),r.oncontextmenu=function(){return!1},r.onselectstart=function(){return!1},r.addEventListener("mousedown",a),r.addEventListener("pointerdown",a),i.appendChild(r);var o=document.createElement("div");o.className="cesium-widget-credits";var s=defined(t.creditContainer)?getElement(t.creditContainer):i;s.appendChild(o);var l=defined(t.creditViewport)?getElement(t.creditViewport):i,c=defaultValue(t.showRenderLoopErrors,!0),n=defaultValue(t.useBrowserRecommendedResolution,!0);this._element=i,this._container=e,this._canvas=r,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=l,this._creditContainer=s,this._innerCreditContainer=o,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=c,this._resolutionScale=1,this._useBrowserRecommendedResolution=n,this._forceResize=!1,this._clock=defined(t.clock)?t.clock:new Clock,configureCanvasSize(this);try{var u=new Scene({canvas:r,contextOptions:t.contextOptions,creditContainer:o,creditViewport:l,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:defaultValue(t.scene3DOnly,!1),terrainExaggeration:t.terrainExaggeration,shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange});(this._scene=u).camera.constrainedAxis=Cartesian3.UNIT_Z,configurePixelRatio(this),configureCameraFrustum(this);var d=defaultValue(u.mapProjection.ellipsoid,Ellipsoid.WGS84),h=t.globe;!1!==(h=!defined(h)?new Globe(d):h)&&(u.globe=h,u.globe.shadows=defaultValue(t.terrainShadows,ShadowMode$1.RECEIVE_ONLY));h=t.skyBox;!1!==(h=!defined(h)?new SkyBox({sources:{positiveX:getDefaultSkyBoxUrl("px"),negativeX:getDefaultSkyBoxUrl("mx"),positiveY:getDefaultSkyBoxUrl("py"),negativeY:getDefaultSkyBoxUrl("my"),positiveZ:getDefaultSkyBoxUrl("pz"),negativeZ:getDefaultSkyBoxUrl("mz")}}):h)&&(u.skyBox=h,u.sun=new Sun,u.moon=new Moon);h=t.skyAtmosphere;!1!==(h=!defined(h)?new SkyAtmosphere(d):h)&&(u.skyAtmosphere=h);h=!1!==t.globe&&t.imageryProvider;!1!==(h=!defined(h)?createWorldImagery():h)&&u.imageryLayers.addImageryProvider(h),defined(t.terrainProvider)&&!1!==t.globe&&(u.terrainProvider=t.terrainProvider),this._screenSpaceEventHandler=new ScreenSpaceEventHandler(r),defined(t.sceneMode)&&(t.sceneMode===SceneMode$1.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===SceneMode$1.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=defaultValue(t.useDefaultRenderLoop,!0),this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;var p=this;this._onRenderError=function(e,t){p._useDefaultRenderLoop=!1,p._renderLoopRunning=!1,p._showRenderLoopErrors&&p.showErrorPanel("WebGL渲染时发生错误,渲染已经停止,请刷新页面。",void 0,t)},u.renderError.addEventListener(this._onRenderError)}catch(e){throw c&&this.showErrorPanel("构造CesiumWidget时出错",'访问<a href="http://get.webgl.org"> http://get.webgl.org </a>以验证您的Web浏览器和硬件是否支持WebGL。请考虑尝试使用其他最新浏览器或更新显卡驱动程序。详细的错误信息如下:',e),e}}function FullscreenButtonViewModel(e,t){t=getElement(t=!defined(t)?document.body:t);var i=this,r=knockout.observable(Fullscreen.fullscreen),n=knockout.observable(Fullscreen.enabled),t=t.ownerDocument;this.isFullscreen=void 0,knockout.defineProperty(this,"isFullscreen",{get:function(){return r()}}),this.isFullscreenEnabled=void 0,knockout.defineProperty(this,"isFullscreenEnabled",{get:function(){return n()},set:function(e){n(e&&Fullscreen.enabled)}}),this.tooltip=void 0,knockout.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?r()?"退出全屏":"全屏":"全屏不可用"}),this._command=createCommand(function(){Fullscreen.fullscreen?Fullscreen.exitFullscreen():Fullscreen.requestFullscreen(i._fullscreenElement)},knockout.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=defaultValue(getElement(e),t.body),this._callback=function(){r(Fullscreen.fullscreen)},t.addEventListener(Fullscreen.changeEventName,this._callback)}Object.defineProperties(CesiumInspectorViewModel.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){var e=this;return createCommand(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){var e=this;return createCommand(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){var e=this;return createCommand(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){var e=this;return createCommand(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){var e=this;return createCommand(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){var t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,defined(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,defined(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),(this._primitive=e).show=!1,setTimeout(function(){e.show=!0},50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){var t;defined(e)?(this.hasPickedTile=!0,e!==this._tile&&(this.tileText="L: "+e.level+" X: "+e.x+" Y: "+e.y,this.tileText+="<br>SW corner: "+e.rectangle.west+", "+e.rectangle.south,this.tileText+="<br>NE corner: "+e.rectangle.east+", "+e.rectangle.north,defined(t=e.data)&&defined(t.tileBoundingRegion)?this.tileText+="<br>Min: "+t.tileBoundingRegion.minimumHeight+" Max: "+t.tileBoundingRegion.maximumHeight:this.tileText+="<br>(Tile is not loaded)"),this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()):(this.hasPickedTile=!1,this._tile=void 0)}}}),CesiumInspectorViewModel.prototype._update=function(){this.frustums&&(this.frustumStatisticText=frustumStatisticsToString(this._scene.debugFrustumStatistics));var e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=boundDepthFrustum(1,e,this.depthFrustum),this.depthFrustumText=this.depthFrustum+" of "+e,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText="Cached shaders: "+this._scene.context.shaderCache.numberOfShaders},CesiumInspectorViewModel.prototype.isDestroyed=function(){return!1},CesiumInspectorViewModel.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._globeDepthSubscription.dispose(),this._pickDepthSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),destroyObject(this)},Object.defineProperties(CesiumInspector.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),CesiumInspector.prototype.isDestroyed=function(){return!1},CesiumInspector.prototype.destroy=function(){return knockout.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),destroyObject(this)},Object.defineProperties(CesiumWidget.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},camera:{get:function(){return this._scene.camera}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e)&&!this._renderLoopRunning&&startRenderLoop(this)}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}}}),CesiumWidget.prototype.showErrorPanel=function(e,t,i){var r=this._element,n=document.createElement("div");n.className="cesium-widget-errorPanel";var a=document.createElement("div");a.className="cesium-widget-errorPanel-content",n.appendChild(a);var o=document.createElement("div");o.className="cesium-widget-errorPanel-header",o.appendChild(document.createTextNode(e)),a.appendChild(o);var s=document.createElement("div");function l(){s.style.maxHeight=Math.max(Math.round(.9*r.clientHeight-100),30)+"px"}s.className="cesium-widget-errorPanel-scroll",a.appendChild(s),l(),defined(window.addEventListener)&&window.addEventListener("resize",l,!1);var c,u,d,h=defined(t),o=defined(i);(h||o)&&((p=document.createElement("div")).className="cesium-widget-errorPanel-message",s.appendChild(p),o&&(c=formatError(i),h||(t=formatError({name:(i="string"==typeof i?new Error(i):i).name,message:i.message}),c=i.stack),"undefined"!=typeof console&&console.error(e+"\n"+t+"\n"+c),(u=document.createElement("div")).className="cesium-widget-errorPanel-message-details collapsed",(d=document.createElement("span")).className="cesium-widget-errorPanel-more-details",d.appendChild(document.createTextNode("See more...")),u.appendChild(d),u.onclick=function(e){u.removeChild(d),u.appendChild(document.createTextNode(c)),u.className="cesium-widget-errorPanel-message-details",a.className="cesium-widget-errorPanel-content expanded",u.onclick=void 0},s.appendChild(u)),p.innerHTML="<p>"+t+"</p>");var p=document.createElement("div");p.className="cesium-widget-errorPanel-buttonPanel",a.appendChild(p);t=document.createElement("button");t.setAttribute("type","button"),t.className="cesium-button",t.appendChild(document.createTextNode("OK")),t.onclick=function(){defined(l)&&defined(window.removeEventListener)&&window.removeEventListener("resize",l,!1),r.removeChild(n)},p.appendChild(t),r.appendChild(n)},CesiumWidget.prototype.isDestroyed=function(){return!1},CesiumWidget.prototype.destroy=function(){defined(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),destroyObject(this)},CesiumWidget.prototype.resize=function(){var e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,configureCanvasSize(this),configureCameraFrustum(this),this._scene.requestRender())},CesiumWidget.prototype.render=function(){var e;this._canRender?(this._scene.initializeFrame(),e=this._clock.tick(),this._scene.render(e)):this._clock.tick()},Object.defineProperties(FullscreenButtonViewModel.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}}),FullscreenButtonViewModel.prototype.isDestroyed=function(){return!1},FullscreenButtonViewModel.prototype.destroy=function(){document.removeEventListener(Fullscreen.changeEventName,this._callback),destroyObject(this)};var enterFullScreenPath="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z",exitFullScreenPath="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z";function FullscreenButton(e,t){var i=new FullscreenButtonViewModel(t,e=getElement(e));i._exitFullScreenPath=exitFullScreenPath,i._enterFullScreenPath=enterFullScreenPath;t=document.createElement("button");t.type="button",t.className="cesium-button cesium-fullscreenButton",t.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(t),knockout.applyBindings(i,t),this._container=e,this._viewModel=i,this._element=t}Object.defineProperties(FullscreenButton.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),FullscreenButton.prototype.isDestroyed=function(){return!1},FullscreenButton.prototype.destroy=function(){return this._viewModel.destroy(),knockout.cleanNode(this._element),this._container.removeChild(this._element),destroyObject(this)};var DEFAULT_HEIGHT=1e3;function GeocoderViewModel(e){defined(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new CartographicGeocoderService,new IonGeocoderService({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._geocodePromise=void 0,this._complete=new Event,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=handleArrowDown,this._handleArrowUp=handleArrowUp;var n=this;this._suggestionsVisible=knockout.pureComputed(function(){var e=0<knockout.getObservable(n,"_suggestions")().length,t=knockout.getObservable(n,"_showSuggestions")();return e&&t}),this._searchCommand=createCommand(function(e){return e=defaultValue(e,GeocodeType$1.SEARCH),n._focusTextbox=!1,defined(n._selectedSuggestion)?(n.activateSuggestion(n._selectedSuggestion),!1):(n.hideSuggestions(),void(n.isSearchInProgress?cancelGeocode(n):geocode(n,n._geocoderServices,e)))}),this.deselectSuggestion=function(){n._selectedSuggestion=void 0},this.handleKeyDown=function(e,t){var i="ArrowDown"===t.key||"Down"===t.key||40===t.keyCode,r="ArrowUp"===t.key||"Up"===t.key||38===t.keyCode;return(i||r)&&t.preventDefault(),!0},this.handleKeyUp=function(e,t){var i="ArrowDown"===t.key||"Down"===t.key||40===t.keyCode,r="ArrowUp"===t.key||"Up"===t.key||38===t.keyCode,t="Enter"===t.key||13===t.keyCode;return r?handleArrowUp(n):i?handleArrowDown(n):t&&n._searchCommand(),!0},this.activateSuggestion=function(e){n.hideSuggestions(),n._searchText=e.displayName;e=e.destination;clearSuggestions(n),n.destinationFound(n,e)},this.hideSuggestions=function(){n._showSuggestions=!1,n._selectedSuggestion=void 0},this.showSuggestions=function(){n._showSuggestions=!0},this.handleMouseover=function(e,t){e!==n._selectedSuggestion&&(n._selectedSuggestion=e)},this.keepExpanded=!1,this.autoComplete=defaultValue(e.autocomplete,!0),this.destinationFound=defaultValue(e.destinationFound,GeocoderViewModel.flyToDestination),this._focusTextbox=!1,knockout.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);e=knockout.getObservable(this,"_searchText");e.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=e.subscribe(function(){GeocoderViewModel._updateSearchSuggestions(n)}),this.isSearchInProgress=void 0,knockout.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,knockout.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"查询中...":this._searchText},set:function(e){this._searchText=e}}),this.flightDuration=void 0,knockout.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(e){this._flightDuration=e}})}function handleArrowUp(e){var t;0!==e._suggestions.length&&(-1!==(t=e._suggestions.indexOf(e._selectedSuggestion))&&0!==t?(t=t-1,e._selectedSuggestion=e._suggestions[t],GeocoderViewModel._adjustSuggestionsScroll(e,t)):e._selectedSuggestion=void 0)}function handleArrowDown(e){var t;0!==e._suggestions.length&&(t=e._suggestions.length,t=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t,e._selectedSuggestion=e._suggestions[t],GeocoderViewModel._adjustSuggestionsScroll(e,t))}function computeFlyToLocationForCartographic(t,e){var i=defined(e)?e.availability:void 0;return defined(i)?sampleTerrainMostDetailed(e,[t]).then(function(e){return(t=e[0]).height+=DEFAULT_HEIGHT,t}):(t.height+=DEFAULT_HEIGHT,when.resolve(t))}function flyToDestination(e,t){var i,r=e._scene,n=r.mapProjection.ellipsoid,a=r.camera,o=r.terrainProvider,s=t;t instanceof Rectangle?CesiumMath.equalsEpsilon(t.south,t.north,CesiumMath.EPSILON7)&&CesiumMath.equalsEpsilon(t.east,t.west,CesiumMath.EPSILON7)?t=Rectangle.center(t):i=computeFlyToLocationForRectangle(t,r):t=n.cartesianToCartographic(t),(i=!defined(i)?computeFlyToLocationForCartographic(t,o):i).then(function(e){s=n.cartographicToCartesian(e)}).always(function(){a.flyTo({destination:s,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:Matrix4.IDENTITY})})}function chainPromise(e,t,i,r){return e.then(function(e){return defined(e)&&"fulfilled"===e.state&&0<e.value.length?e:t.geocode(i,r).then(function(e){return{state:"fulfilled",value:e}}).otherwise(function(e){return{state:"rejected",reason:e}})})}function geocode(i,e,t){var r=i._searchText;if(hasOnlyWhitespace(r))i.showSuggestions();else{i._isSearchInProgress=!0;for(var n=when.resolve(),a=0;a<e.length;a++)n=chainPromise(n,e[a],r,t);(i._geocodePromise=n).then(function(e){if(!n.cancel){i._isSearchInProgress=!1;var t=e.value;if("fulfilled"===e.state&&defined(t)&&0<t.length)return i._searchText=t[0].displayName,void i.destinationFound(i,t[0].destination);i._searchText=r}})}}function adjustSuggestionsScroll(e,t){var i=getElement(e._viewContainer),e=i.getElementsByClassName("search-results")[0],i=i.getElementsByTagName("li")[t];0!==t?(t=i.offsetTop)+i.clientHeight>e.clientHeight?e.scrollTop=t+i.clientHeight:t<e.scrollTop&&(e.scrollTop=t):e.scrollTop=0}function cancelGeocode(e){e._isSearchInProgress=!1,defined(e._geocodePromise)&&(e._geocodePromise.cancel=!0,e._geocodePromise=void 0)}function hasOnlyWhitespace(e){return/^\s*$/.test(e)}function clearSuggestions(e){knockout.getObservable(e,"_suggestions").removeAll()}function updateSearchSuggestions(r){var i,t;r.autoComplete&&(i=r._searchText,clearSuggestions(r),hasOnlyWhitespace(i)||(t=when.resolve([]),r._geocoderServices.forEach(function(e){t=t.then(function(t){return 5<=t.length?t:e.geocode(i,GeocodeType$1.AUTOCOMPLETE).then(function(e){return t=t.concat(e)})})}),t.then(function(e){for(var t=r._suggestions,i=0;i<e.length;i++)t.push(e[i])})))}Object.defineProperties(GeocoderViewModel.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}}),GeocoderViewModel.prototype.destroy=function(){this._suggestionSubscription.dispose()},GeocoderViewModel.flyToDestination=flyToDestination,GeocoderViewModel._updateSearchSuggestions=updateSearchSuggestions,GeocoderViewModel._adjustSuggestionsScroll=adjustSuggestionsScroll;var startSearchPath="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",stopSearchPath="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";function Geocoder(e){var i=getElement(e.container),r=new GeocoderViewModel(e);r._startSearchPath=startSearchPath,r._stopSearchPath=stopSearchPath;var t=document.createElement("form");t.setAttribute("data-bind","submit: search");var n=document.createElement("input");n.type="search",n.className="cesium-geocoder-input",n.setAttribute("placeholder","搜索定位..."),n.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout(function(){n.select()},0)},n.addEventListener("focus",this._onTextBoxFocus,!1),t.appendChild(n),this._textBox=n;var a=document.createElement("span");a.className="cesium-geocoder-searchButton",a.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),t.appendChild(a),i.appendChild(t);var o=document.createElement("div");o.className="search-results",o.setAttribute("data-bind","visible: _suggestionsVisible");e=document.createElement("ul");e.setAttribute("data-bind","foreach: _suggestions");a=document.createElement("li");e.appendChild(a),a.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),o.appendChild(e),i.appendChild(o),knockout.applyBindings(r,t),knockout.applyBindings(r,o),this._container=i,this._searchSuggestionsContainer=o,this._viewModel=r,this._form=t,this._onInputBegin=function(e){var t=e.target;"function"==typeof e.composedPath&&(t=e.composedPath()[0]),i.contains(t)||(r._focusTextbox=!1,r.hideSuggestions())},this._onInputEnd=function(e){r._focusTextbox=!0,r.showSuggestions()},FeatureDetection.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),i.addEventListener("pointerup",this._onInputEnd,!0),i.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),i.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),i.addEventListener("touchend",this._onInputEnd,!0),i.addEventListener("touchcancel",this._onInputEnd,!0))}function HomeButtonViewModel(e,t){this._scene=e,this._duration=t;var i=this;this._command=createCommand(function(){i._scene.camera.flyHome(i._duration)}),this.tooltip="复位视角",knockout.track(this,["tooltip"])}function HomeButton(e,t,i){e=getElement(e);t=new HomeButtonViewModel(t,i);t._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button cesium-home-button",i.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(i),knockout.applyBindings(t,i),this._container=e,this._viewModel=t,this._element=i}Object.defineProperties(Geocoder.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}}),Geocoder.prototype.isDestroyed=function(){return!1},Geocoder.prototype.destroy=function(){var e=this._container;return FeatureDetection.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),knockout.cleanNode(this._form),knockout.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),destroyObject(this)},Object.defineProperties(HomeButtonViewModel.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}}}),Object.defineProperties(HomeButton.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),HomeButton.prototype.isDestroyed=function(){return!1},HomeButton.prototype.destroy=function(){return knockout.cleanNode(this._element),this._container.removeChild(this._element),destroyObject(this)};var cameraEnabledPath="M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z",cameraDisabledPath="M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z";function InfoBoxViewModel(){this._cameraClicked=new Event,this._closeClicked=new Event,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",knockout.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,knockout.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?cameraDisabledPath:cameraEnabledPath}}),knockout.defineProperty(this,"_bodyless",{get:function(){return!defined(this.description)||0===this.description.length}})}function InfoBox(e){e=getElement(e);var n=document.createElement("div");n.className="cesium-infoBox",n.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(n);var t=document.createElement("div");t.className="cesium-infoBox-title",t.setAttribute("data-bind","text: titleText"),n.appendChild(t);t=document.createElement("button");t.type="button",t.className="cesium-button cesium-infoBox-camera",t.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),n.appendChild(t);t=document.createElement("button");t.type="button",t.className="cesium-infoBox-close",t.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),t.innerHTML="×",n.appendChild(t);var a=document.createElement("iframe");a.className="cesium-infoBox-iframe",a.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),a.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),a.setAttribute("allowfullscreen",!0),n.appendChild(a);var i=new InfoBoxViewModel;knockout.applyBindings(i,n),this._container=e,this._element=n,this._frame=a,this._viewModel=i,this._descriptionSubscription=void 0;var o=this;a.addEventListener("load",function(){var e=a.contentDocument,t=e.createElement("link");t.href=buildModuleUrl("Widgets/InfoBox/InfoBoxDescription.css"),t.rel="stylesheet",t.type="text/css";var r=e.createElement("div");r.className="cesium-infoBox-description",e.head.appendChild(t),e.body.appendChild(r),o._descriptionSubscription=subscribeAndEvaluate(i,"description",function(e){a.style.height="5px",r.innerHTML=e;var t=null,i=r.firstElementChild;null===i||1!==r.childNodes.length||null!==(e=window.getComputedStyle(i))&&(i=e["background-color"],defined(i=Color.fromCssColorString(i))&&0!==i.alpha&&(t=e["background-color"])),n.style["background-color"]=t;t=r.getBoundingClientRect().height;a.style.height=t+"px"})}),a.setAttribute("src","about:blank")}function NavigationHelpButtonViewModel(){this.showInstructions=!1;var e=this;this._command=createCommand(function(){e.showInstructions=!e.showInstructions}),this._showClick=createCommand(function(){e._touch=!1}),this._showTouch=createCommand(function(){e._touch=!0}),this._touch=!1,this.tooltip="鼠标或触摸操作帮助",knockout.track(this,["tooltip","showInstructions","_touch"])}function NavigationHelpButton(e){var t=getElement(e.container),i=new NavigationHelpButtonViewModel,r=defaultValue(e.instructionsInitiallyVisible,!1);i.showInstructions=r,i._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";var n=document.createElement("span");n.className="cesium-navigationHelpButton-wrapper",t.appendChild(n);var a=document.createElement("button");a.type="button",a.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",a.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),n.appendChild(a);var o=document.createElement("div");o.className="cesium-navigation-help",o.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),n.appendChild(o);e=document.createElement("button");e.type="button",e.className="cesium-navigation-button cesium-navigation-button-left",e.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');r=document.createElement("img");r.src=buildModuleUrl("Widgets/Images/NavigationHelp/Mouse.svg"),r.className="cesium-navigation-button-icon",r.style.width="25px",r.style.height="25px",e.appendChild(r),e.appendChild(document.createTextNode("鼠标"));a=document.createElement("button");a.type="button",a.className="cesium-navigation-button cesium-navigation-button-right",a.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');r=document.createElement("img");r.src=buildModuleUrl("Widgets/Images/NavigationHelp/Touch.svg"),r.className="cesium-navigation-button-icon",r.style.width="25px",r.style.height="25px",a.appendChild(r),a.appendChild(document.createTextNode("触摸屏")),o.appendChild(e),o.appendChild(a);a=document.createElement("div");a.className="cesium-click-navigation-help cesium-navigation-help-instructions",a.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),a.innerHTML=' <table> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/MouseLeft.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">平移视图</div> <div class="cesium-navigation-help-details">鼠标左键拖动</div> </td> </tr> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/MouseRight.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">缩放视图</div> <div class="cesium-navigation-help-details">右键拖动或鼠标中键滚动</div> </td> </tr> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/MouseMiddle.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">旋转视图</div> <div class="cesium-navigation-help-details">中键拖动</div> <div class="cesium-navigation-help-details">或按Ctrl键同时左键拖动</div> </td> </tr> </table>',o.appendChild(a);a=document.createElement("div");a.className="cesium-touch-navigation-help cesium-navigation-help-instructions",a.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),a.innerHTML=' <table> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/TouchDrag.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">平移视图</div> <div class="cesium-navigation-help-details">单指拖动</div> </td> </tr> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/TouchZoom.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">缩放视图</div> <div class="cesium-navigation-help-details">双指向内或向外滑动</div> </td> </tr> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/TouchTilt.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">倾斜角度</div> <div class="cesium-navigation-help-details">双指拖曳,相同方向</div> </td> </tr> <tr> <td><img src="'+buildModuleUrl("Widgets/Images/NavigationHelp/TouchRotate.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">旋转视图</div> <div class="cesium-navigation-help-details">双指拖曳,相反方向</div> </td> </tr> </table>',o.appendChild(a),knockout.applyBindings(i,n),this._container=t,this._viewModel=i,this._wrapper=n,this._closeInstructions=function(e){n.contains(e.target)||(i.showInstructions=!1)},FeatureDetection.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}function PerformanceWatchdogViewModel(e){this._scene=e.scene,this.lowFrameRateMessage=defaultValue(e.lowFrameRateMessage,"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers."),this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,knockout.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);var t=this;this._dismissMessage=createCommand(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});e=FrameRateMonitor.fromScene(e.scene);this._unsubscribeLowFrameRate=e.lowFrameRate.addEventListener(function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)}),this._unsubscribeNominalFrameRate=e.nominalFrameRate.addEventListener(function(){t.showingLowFrameRateMessage=!1})}function PerformanceWatchdog(e){var t=getElement(e.container),i=new PerformanceWatchdogViewModel(e),r=document.createElement("div");r.className="cesium-performance-watchdog-message-area",r.setAttribute("data-bind","visible: showingLowFrameRateMessage");e=document.createElement("button");e.setAttribute("type","button"),e.className="cesium-performance-watchdog-message-dismiss",e.innerHTML="×",e.setAttribute("data-bind","click: dismissMessage"),r.appendChild(e);e=document.createElement("div");e.className="cesium-performance-watchdog-message",e.setAttribute("data-bind","html: lowFrameRateMessage"),r.appendChild(e),t.appendChild(r),knockout.applyBindings(i,r),this._container=t,this._viewModel=i,this._element=r}function ProjectionPickerViewModel(e){this._scene=e,this._orthographic=e.camera.frustum instanceof OrthographicFrustum,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,knockout.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);var n=this;knockout.defineProperty(this,"selectedTooltip",function(){return n._orthographic?n.tooltipOrthographic:n.tooltipPerspective}),this._toggleDropDown=createCommand(function(){n.sceneMode===SceneMode$1.SCENE2D||n._flightInProgress||(n.dropDownVisible=!n.dropDownVisible)}),this._eventHelper=new EventHelper,this._eventHelper.add(e.morphComplete,function(e,t,i,r){n.sceneMode=i,n._orthographic=i===SceneMode$1.SCENE2D||n._scene.camera.frustum instanceof OrthographicFrustum}),this._eventHelper.add(e.preRender,function(){n._flightInProgress=defined(e.camera._currentFlight)}),this._switchToPerspective=createCommand(function(){n.sceneMode!==SceneMode$1.SCENE2D&&(n._scene.camera.switchToPerspectiveFrustum(),n._orthographic=!1,n.dropDownVisible=!1)}),this._switchToOrthographic=createCommand(function(){n.sceneMode!==SceneMode$1.SCENE2D&&(n._scene.camera.switchToOrthographicFrustum(),n._orthographic=!0,n.dropDownVisible=!1)}),this._sceneMode=SceneMode$1}InfoBoxViewModel.prototype.maxHeightOffset=function(e){return this.maxHeight-e+"px"},Object.defineProperties(InfoBoxViewModel.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}}),Object.defineProperties(InfoBox.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}}),InfoBox.prototype.isDestroyed=function(){return!1},InfoBox.prototype.destroy=function(){var e=this._container;return knockout.cleanNode(this._element),e.removeChild(this._element),defined(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),destroyObject(this)},Object.defineProperties(NavigationHelpButtonViewModel.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}}),Object.defineProperties(NavigationHelpButton.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),NavigationHelpButton.prototype.isDestroyed=function(){return!1},NavigationHelpButton.prototype.destroy=function(){return FeatureDetection.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),knockout.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),destroyObject(this)},Object.defineProperties(PerformanceWatchdogViewModel.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}}),PerformanceWatchdogViewModel.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),destroyObject(this)},Object.defineProperties(PerformanceWatchdog.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),PerformanceWatchdog.prototype.isDestroyed=function(){return!1},PerformanceWatchdog.prototype.destroy=function(){return this._viewModel.destroy(),knockout.cleanNode(this._element),this._container.removeChild(this._element),destroyObject(this)},Object.defineProperties(ProjectionPickerViewModel.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}}),ProjectionPickerViewModel.prototype.isDestroyed=function(){return!1},ProjectionPickerViewModel.prototype.destroy=function(){this._eventHelper.removeAll(),destroyObject(this)};var perspectivePath="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",orthographicPath="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";function ProjectionPicker(e,t){e=getElement(e);var i=new ProjectionPickerViewModel(t);i._perspectivePath=perspectivePath,i._orthographicPath=orthographicPath;var r=document.createElement("span");r.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(r);t=document.createElement("button");t.type="button",t.className="cesium-button cesium-toolbar-button",t.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),t.innerHTML='\x3c!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --\x3e\x3c!-- /ko --\x3e',r.appendChild(t);t=document.createElement("button");t.type="button",t.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",t.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),r.appendChild(t);t=document.createElement("button");t.type="button",t.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",t.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),r.appendChild(t),knockout.applyBindings(i,r),this._viewModel=i,this._container=e,this._wrapper=r,this._closeDropDown=function(e){r.contains(e.target)||(i.dropDownVisible=!1)},FeatureDetection.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}function SceneModePickerViewModel(e,t){this._scene=e;var n=this;this._eventHelper=new EventHelper,this._eventHelper.add(e.morphStart,function(e,t,i,r){n.sceneMode=i,n.dropDownVisible=!1}),this._duration=defaultValue(t,2),this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="二维视图",this.tooltip3D="三维视图",this.tooltipColumbusView="哥伦布视图",knockout.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,knockout.defineProperty(this,"selectedTooltip",function(){var e=n.sceneMode;return e===SceneMode$1.SCENE2D?n.tooltip2D:e===SceneMode$1.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=createCommand(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=createCommand(function(){e.morphTo2D(n._duration)}),this._morphTo3D=createCommand(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=createCommand(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=SceneMode$1}Object.defineProperties(ProjectionPicker.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),ProjectionPicker.prototype.isDestroyed=function(){return!1},ProjectionPicker.prototype.destroy=function(){return this._viewModel.destroy(),FeatureDetection.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),knockout.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),destroyObject(this)},Object.defineProperties(SceneModePickerViewModel.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}}),SceneModePickerViewModel.prototype.isDestroyed=function(){return!1},SceneModePickerViewModel.prototype.destroy=function(){this._eventHelper.removeAll(),destroyObject(this)};var globePath="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",flatMapPath="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",columbusViewPath="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";function SceneModePicker(e,t,i){e=getElement(e);var r=new SceneModePickerViewModel(t,i);r._globePath=globePath,r._flatMapPath=flatMapPath,r._columbusViewPath=columbusViewPath;var n=document.createElement("span");n.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(n);i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),i.innerHTML='\x3c!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --\x3e\x3c!-- /ko --\x3e',n.appendChild(i);i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",i.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),n.appendChild(i);i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",i.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),n.appendChild(i);i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",i.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),n.appendChild(i),knockout.applyBindings(r,n),this._viewModel=r,this._container=e,this._wrapper=n,this._closeDropDown=function(e){n.contains(e.target)||(r.dropDownVisible=!1)},FeatureDetection.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(SceneModePicker.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),SceneModePicker.prototype.isDestroyed=function(){return!1},SceneModePicker.prototype.destroy=function(){return this._viewModel.destroy(),FeatureDetection.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),knockout.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),destroyObject(this)};var screenSpacePos=new Cartesian2,offScreen="-1000px";function SelectionIndicatorViewModel(i,e,t){this._scene=i,this._screenPositionX=offScreen,this._screenPositionY=offScreen,this._tweens=i.tweens,this._container=defaultValue(t,document.body),this._selectionIndicatorElement=e,this._scale=1,this.position=void 0,this.showSelection=!1,knockout.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,knockout.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&defined(this.position)}}),knockout.defineProperty(this,"_transform",{get:function(){return"scale("+this._scale+")"}}),this.computeScreenSpacePosition=function(e,t){return SceneTransforms.wgs84ToWindowCoordinates(i,e,t)}}function SelectionIndicator(e,t){e=getElement(e),this._container=e;var i=document.createElement("div");i.className="cesium-selection-wrapper",i.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(i),this._element=i;var r="http://www.w3.org/2000/svg",n=document.createElementNS(r,"svg:svg");n.setAttribute("width",160),n.setAttribute("height",160),n.setAttribute("viewBox","0 0 160 160");e=document.createElementNS(r,"g");e.setAttribute("transform","translate(80,80)"),n.appendChild(e);r=document.createElementNS(r,"path");r.setAttribute("data-bind","attr: { transform: _transform }"),r.setAttribute("d","M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z"),e.appendChild(r),i.appendChild(n);t=new SelectionIndicatorViewModel(t,this._element,this._container);this._viewModel=t,knockout.applyBindings(this._viewModel,this._element)}function TimelineHighlightRange(e,t,i){this._color=e,this._height=t,this._base=defaultValue(i,0)}function TimelineTrack(e,t,i,r){this.interval=e,this.height=t,this.color=i||new Color(.5,.5,.5,1),this.backgroundColor=r||new Color(0,0,0,0)}SelectionIndicatorViewModel.prototype.update=function(){var e,t,i,r,n;this.showSelection&&defined(this.position)&&(defined(e=this.computeScreenSpacePosition(this.position,screenSpacePos))?(t=(n=this._container).parentNode.clientWidth,i=n.parentNode.clientHeight,n=.5*(r=this._selectionIndicatorElement.clientWidth),e.x=Math.min(Math.max(e.x,-r),t+r)-n,e.y=Math.min(Math.max(e.y,-r),i+r)-n,this._screenPositionX=Math.floor(e.x+.25)+"px",this._screenPositionY=Math.floor(e.y+.25)+"px"):(this._screenPositionX=offScreen,this._screenPositionY=offScreen))},SelectionIndicatorViewModel.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:EasingFunction$1.EXPONENTIAL_OUT})},SelectionIndicatorViewModel.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:EasingFunction$1.EXPONENTIAL_OUT})},Object.defineProperties(SelectionIndicatorViewModel.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}}),Object.defineProperties(SelectionIndicator.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),SelectionIndicator.prototype.isDestroyed=function(){return!1},SelectionIndicator.prototype.destroy=function(){var e=this._container;return knockout.cleanNode(this._element),e.removeChild(this._element),destroyObject(this)},TimelineHighlightRange.prototype.getHeight=function(){return this._height},TimelineHighlightRange.prototype.getBase=function(){return this._base},TimelineHighlightRange.prototype.getStartTime=function(){return this._start},TimelineHighlightRange.prototype.getStopTime=function(){return this._stop},TimelineHighlightRange.prototype.setRange=function(e,t){this._start=e,this._stop=t},TimelineHighlightRange.prototype.render=function(e){var t,i,r="";return this._start&&this._stop&&this._color&&(i=JulianDate.secondsDifference(this._start,e.epochJulian),t=Math.round(e.timeBarWidth*e.getAlpha(i)),i=JulianDate.secondsDifference(this._stop,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(i))-t,t<0&&(i+=t,t=0),0<(i=t+i>e.timeBarWidth?e.timeBarWidth-t:i)&&(r='<span class="cesium-timeline-highlight" style="left: '+t.toString()+"px; width: "+i.toString()+"px; bottom: "+this._base.toString()+"px; height: "+this._height+"px; background-color: "+this._color+';"></span>')),r},TimelineTrack.prototype.render=function(e,t){var i=this.interval.start,r=this.interval.stop,n=t.startJulian,a=JulianDate.addSeconds(t.startJulian,t.duration,new JulianDate);if(JulianDate.lessThan(i,n)&&JulianDate.greaterThan(r,a))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(JulianDate.lessThanOrEquals(i,a)&&JulianDate.greaterThanOrEquals(r,n)){for(var o,s,l=0;l<t.timeBarWidth;++l){var c=JulianDate.addSeconds(t.startJulian,l/t.timeBarWidth*t.duration,new JulianDate);!defined(o)&&JulianDate.greaterThanOrEquals(c,i)?o=l:!defined(s)&&JulianDate.greaterThanOrEquals(c,r)&&(s=l)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),defined(o)&&(defined(s)||(s=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(o,t.y,Math.max(s-o,1),this.height))}};var timelineWheelDelta=1e12,timelineMouseMode={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},timelineTouchMode={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},timelineTicScales=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6];function Timeline(e,t){var i=(e=getElement(e)).ownerDocument;this.container=e;var r=i.createElement("div");r.className="cesium-timeline-main",e.appendChild(r),this._topDiv=r,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=timelineMouseMode.none,this._touchMode=timelineTouchMode.none,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=createMouseDownCallback(this),this._onMouseUp=createMouseUpCallback(this),this._onMouseMove=createMouseMoveCallback(this),this._onMouseWheel=createMouseWheelCallback(this),this._onTouchStart=createTouchStartCallback(this),this._onTouchMove=createTouchMoveCallback(this),this._onTouchEnd=createTouchEndCallback(this);r=this._timeBarEle;i.addEventListener("mouseup",this._onMouseUp,!1),i.addEventListener("mousemove",this._onMouseMove,!1),r.addEventListener("mousedown",this._onMouseDown,!1),r.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),r.addEventListener("mousewheel",this._onMouseWheel,!1),r.addEventListener("touchstart",this._onTouchStart,!1),r.addEventListener("touchmove",this._onTouchMove,!1),r.addEventListener("touchend",this._onTouchEnd,!1),r.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}function twoDigits(e){return e<10?"0"+e.toString():e.toString()}function createMouseDownCallback(t){return function(e){t._mouseMode!==timelineMouseMode.touchOnly&&(0===e.button?(t._mouseMode=timelineMouseMode.scrub,t._scrubElement&&(t._scrubElement.style.backgroundPosition="-16px 0"),t._onMouseMove(e)):(t._mouseX=e.clientX,2===e.button?t._mouseMode=timelineMouseMode.zoom:t._mouseMode=timelineMouseMode.slide)),e.preventDefault()}}function createMouseUpCallback(t){return function(e){t._mouseMode=timelineMouseMode.none,t._scrubElement&&(t._scrubElement.style.backgroundPosition="0 0"),t._timelineDrag=0,t._timelineDragLocation=void 0}}function createMouseMoveCallback(r){return function(e){var t,i;r._mouseMode===timelineMouseMode.scrub?(e.preventDefault(),(t=e.clientX-r._topDiv.getBoundingClientRect().left)<0?(r._timelineDragLocation=0,r._timelineDrag=-.01*r._timeBarSecondsSpan):t>r._topDiv.clientWidth?(r._timelineDragLocation=r._topDiv.clientWidth,r._timelineDrag=.01*r._timeBarSecondsSpan):(r._timelineDragLocation=void 0,r._setTimeBarTime(t,t*r._timeBarSecondsSpan/r._topDiv.clientWidth))):r._mouseMode===timelineMouseMode.slide?(i=r._mouseX-e.clientX,r._mouseX=e.clientX,0!==i&&(t=i*r._timeBarSecondsSpan/r._topDiv.clientWidth,r.zoomTo(JulianDate.addSeconds(r._startJulian,t,new JulianDate),JulianDate.addSeconds(r._endJulian,t,new JulianDate)))):r._mouseMode===timelineMouseMode.zoom&&(i=r._mouseX-e.clientX,r._mouseX=e.clientX,0!==i&&r.zoomFrom(Math.pow(1.01,i)))}}function createMouseWheelCallback(t){return function(e){e=e.wheelDeltaY||e.wheelDelta||-e.detail;e/=timelineWheelDelta=Math.max(Math.min(Math.abs(e),timelineWheelDelta),1),t.zoomFrom(Math.pow(1.05,-e))}}function createTouchStartCallback(n){return function(e){var t,i=e.touches.length,r=n._topDiv.getBoundingClientRect().left;e.preventDefault(),n._mouseMode=timelineMouseMode.touchOnly,1===i?(t=JulianDate.secondsDifference(n._scrubJulian,n._startJulian),t=Math.round(t*n._topDiv.clientWidth/n._timeBarSecondsSpan+r),Math.abs(e.touches[0].clientX-t)<50?(n._touchMode=timelineTouchMode.scrub,n._scrubElement&&(n._scrubElement.style.backgroundPosition=1===i?"-16px 0":"0 0")):(n._touchMode=timelineTouchMode.singleTap,n._touchState.centerX=e.touches[0].clientX-r)):2===i?(n._touchMode=timelineTouchMode.slideZoom,n._touchState.centerX=.5*(e.touches[0].clientX+e.touches[1].clientX)-r,n._touchState.spanX=Math.abs(e.touches[0].clientX-e.touches[1].clientX)):n._touchMode=timelineTouchMode.ignore}}function createTouchEndCallback(r){return function(e){var t=e.touches.length,i=r._topDiv.getBoundingClientRect().left;r._touchMode===timelineTouchMode.singleTap?(r._touchMode=timelineTouchMode.scrub,r._onTouchMove(e)):r._touchMode===timelineTouchMode.scrub&&r._onTouchMove(e),r._mouseMode=timelineMouseMode.touchOnly,1!==t?r._touchMode=0<t?timelineTouchMode.ignore:timelineTouchMode.none:r._touchMode===timelineTouchMode.slideZoom&&(r._touchState.centerX=e.touches[0].clientX-i),r._scrubElement&&(r._scrubElement.style.backgroundPosition="0 0")}}function createTouchMoveCallback(s){return function(e){var t,i,r,n,a=1,o=s._topDiv.getBoundingClientRect().left;s._touchMode===timelineTouchMode.singleTap&&(s._touchMode=timelineTouchMode.slideZoom),s._mouseMode=timelineMouseMode.touchOnly,s._touchMode===timelineTouchMode.scrub?(e.preventDefault(),1===e.changedTouches.length&&0<=(t=e.changedTouches[0].clientX-o)&&t<=s._topDiv.clientWidth&&s._setTimeBarTime(t,t*s._timeBarSecondsSpan/s._topDiv.clientWidth)):s._touchMode===timelineTouchMode.slideZoom&&(2===(t=e.touches.length)?(i=.5*(e.touches[0].clientX+e.touches[1].clientX)-o,r=Math.abs(e.touches[0].clientX-e.touches[1].clientX)):1===t&&(i=e.touches[0].clientX-o,r=0),defined(i)&&(n=0<r&&0<s._touchState.spanX?(a=s._touchState.spanX/r,JulianDate.addSeconds(s._startJulian,(s._touchState.centerX*s._timeBarSecondsSpan-i*s._timeBarSecondsSpan*a)/s._topDiv.clientWidth,new JulianDate)):(n=s._touchState.centerX-i,JulianDate.addSeconds(s._startJulian,n*s._timeBarSecondsSpan/s._topDiv.clientWidth,new JulianDate)),s.zoomTo(n,JulianDate.addSeconds(n,s._timeBarSecondsSpan*a,new JulianDate)),s._touchState.centerX=i,s._touchState.spanX=r))}}function lockScreen(e){var t=!1,i=window.screen;return defined(i)&&(defined(i.lockOrientation)?t=i.lockOrientation(e):defined(i.mozLockOrientation)?t=i.mozLockOrientation(e):defined(i.msLockOrientation)?t=i.msLockOrientation(e):defined(i.orientation&&i.orientation.lock)&&(t=i.orientation.lock(e))),t}function unlockScreen(){var e=window.screen;defined(e)&&(defined(e.unlockOrientation)?e.unlockOrientation():defined(e.mozUnlockOrientation)?e.mozUnlockOrientation():defined(e.msUnlockOrientation)?e.msUnlockOrientation():defined(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function toggleVR(e,t,i,r){r()||(i()?(t.useWebVR=!1,e._locked&&(unlockScreen(),e._locked=!1),e._noSleep.disable(),Fullscreen.exitFullscreen(),i(!1)):(Fullscreen.fullscreen||Fullscreen.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=lockScreen("landscape")),i(t.useWebVR=!0)))}function VRButtonViewModel(e,t){var i=this,r=knockout.observable(Fullscreen.enabled),n=knockout.observable(!1);this.isVRMode=void 0,knockout.defineProperty(this,"isVRMode",{get:function(){return n()}}),this.isVREnabled=void 0,knockout.defineProperty(this,"isVREnabled",{get:function(){return r()},set:function(e){r(e&&Fullscreen.enabled)}}),this.tooltip=void 0,knockout.defineProperty(this,"tooltip",function(){return r()?n()?"退出VR模式":"进入VR模式":"VR mode is unavailable"});var a=knockout.observable(!1);this._isOrthographic=void 0,knockout.defineProperty(this,"_isOrthographic",{get:function(){return a()}}),this._eventHelper=new EventHelper,this._eventHelper.add(e.preRender,function(){a(e.camera.frustum instanceof OrthographicFrustum)}),this._locked=!1,this._noSleep=new NoSleep,this._command=createCommand(function(){toggleVR(i,e,n,a)},knockout.getObservable(this,"isVREnabled")),this._vrElement=defaultValue(getElement(t),document.body),this._callback=function(){!Fullscreen.fullscreen&&n()&&(e.useWebVR=!1,i._locked&&(unlockScreen(),i._locked=!1),i._noSleep.disable(),n(!1))},document.addEventListener(Fullscreen.changeEventName,this._callback)}Timeline.prototype.addEventListener=function(e,t,i){this._topDiv.addEventListener(e,t,i)},Timeline.prototype.removeEventListener=function(e,t,i){this._topDiv.removeEventListener(e,t,i)},Timeline.prototype.isDestroyed=function(){return!1},Timeline.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);var e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);e=this._timeBarEle;e.removeEventListener("mousedown",this._onMouseDown,!1),e.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),e.removeEventListener("mousewheel",this._onMouseWheel,!1),e.removeEventListener("touchstart",this._onTouchStart,!1),e.removeEventListener("touchmove",this._onTouchMove,!1),e.removeEventListener("touchend",this._onTouchEnd,!1),e.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),destroyObject(this)},Timeline.prototype.addHighlightRange=function(e,t,i){i=new TimelineHighlightRange(e,t,i);return this._highlightRanges.push(i),this.resize(),i},Timeline.prototype.addTrack=function(e,t,i,r){r=new TimelineTrack(e,t,i,r);return this._trackList.push(r),this._lastHeight=void 0,this.resize(),r},Timeline.prototype.zoomTo=function(e,t){var i,r;this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=JulianDate.secondsDifference(t,e),this._clock&&this._clock.clockRange!==ClockRange$1.UNBOUNDED&&(i=this._clock.startTime,n=this._clock.stopTime,r=JulianDate.secondsDifference(n,i),t=JulianDate.secondsDifference(i,this._startJulian),e=JulianDate.secondsDifference(n,this._endJulian),this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):0<t?(this._endJulian=JulianDate.addSeconds(this._endJulian,t,new JulianDate),this._startJulian=i,this._timeBarSecondsSpan=JulianDate.secondsDifference(this._endJulian,this._startJulian)):e<0&&(this._startJulian=JulianDate.addSeconds(this._startJulian,e,new JulianDate),this._endJulian=n,this._timeBarSecondsSpan=JulianDate.secondsDifference(this._endJulian,this._startJulian))),this._makeTics();var n=document.createEvent("Event");n.initEvent("setzoom",!0,!0),n.startJulian=this._startJulian,n.endJulian=this._endJulian,n.epochJulian=this._epochJulian,n.totalSpan=this._timeBarSecondsSpan,n.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(n)},Timeline.prototype.zoomFrom=function(e){var t=JulianDate.secondsDifference(this._scrubJulian,this._startJulian);1<e||t<0||t>this._timeBarSecondsSpan?t=.5*this._timeBarSecondsSpan:t+=t-.5*this._timeBarSecondsSpan;var i=this._timeBarSecondsSpan-t;this.zoomTo(JulianDate.addSeconds(this._startJulian,t-t*e,new JulianDate),JulianDate.addSeconds(this._endJulian,i*e-i,new JulianDate))},Timeline.prototype.makeLabel=function(e){e=JulianDate.toDate(e);return e.getFullYear()+"年"+(e.getMonth()+1)+"月"+e.getDate()+"日"+twoDigits(e.getHours())+":"+twoDigits(e.getMinutes())+":"+twoDigits(e.getSeconds())},Timeline.prototype.smallestTicInPixels=7,Timeline.prototype._makeTics=function(){var e=this._timeBarEle,t=JulianDate.secondsDifference(this._scrubJulian,this._startJulian),i=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan),r=i-8,n=this;this._needleEle.style.left=i.toString()+"px";var a="",t=31536e6,o=0,s=this._timeBarSecondsSpan;s<.01?(s=.01,this._timeBarSecondsSpan=.01,this._endJulian=JulianDate.addSeconds(this._startJulian,.01,new JulianDate)):t<s&&(s=t,this._timeBarSecondsSpan=t,this._endJulian=JulianDate.addSeconds(this._startJulian,t,new JulianDate));var l=this._timeBarEle.clientWidth;l<10&&(l=10);var c=this._startJulian,i=Math.min(s/l*1e-5,.4),t=JulianDate.toGregorianDate(c),t=31536e4<s?JulianDate.fromDate(new Date(Date.UTC(100*Math.floor(t.year/100),0))):31536e3<s?JulianDate.fromDate(new Date(Date.UTC(10*Math.floor(t.year/10),0))):86400<s?JulianDate.fromDate(new Date(Date.UTC(t.year,0))):JulianDate.fromDate(new Date(Date.UTC(t.year,t.month,t.day))),u=JulianDate.secondsDifference(this._startJulian,JulianDate.addSeconds(t,i,new JulianDate)),d=u+s;function h(e){return Math.floor(u/e)*e}function p(e,t){return Math.ceil(e/t+.5)*t}function m(e){return(e-u)/s}function f(e,t){return e-t*Math.round(e/t)}this._epochJulian=t,this._rulerEle.innerHTML=this.makeLabel(JulianDate.addSeconds(this._endJulian,-.01,new JulianDate));var g=this._rulerEle.offsetWidth+20;g<30&&(g=180);i=o;o-=1e-10;var _={startTime:u,startJulian:c,epochJulian:t,duration:s,timeBarWidth:l,getAlpha:m};this._highlightRanges.forEach(function(e){a+=e.render(_)});var y=0,C=0,v=0,S=g/l;1<S&&(S=1),S*=this._timeBarSecondsSpan;for(var x=-1,T=-1,b=timelineTicScales.length,E=0;E<b;++E){var P=timelineTicScales[E];if(++x,S<(y=P)&&o<P)break;T<0&&l*(P/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(T=x)}if(0<x){for(;0<x;)if(--x,Math.abs(f(y,timelineTicScales[x]))<1e-5){timelineTicScales[x]>=o&&(C=timelineTicScales[x]);break}if(0<=T)for(;T<x;){if(Math.abs(f(C,timelineTicScales[T]))<1e-5&&timelineTicScales[T]>=o){v=timelineTicScales[T];break}++T}}1e-10<(o=i)&&v<1e-5&&1e-10<Math.abs(o-y)&&(v=o)<=y+1e-10&&(C=0);var A=-999999;if(3<=l*(v/this._timeBarSecondsSpan))for(w=h(v);w<=d;w=p(w,v))a+='<span class="cesium-timeline-ticTiny" style="left: '+Math.round(l*m(w)).toString()+'px;"></span>';if(3<=l*(C/this._timeBarSecondsSpan))for(w=h(C);w<=d;w=p(w,C))a+='<span class="cesium-timeline-ticSub" style="left: '+Math.round(l*m(w)).toString()+'px;"></span>';if(2<=l*(y/this._timeBarSecondsSpan)){d+=this._mainTicSpan=y;for(var w=h(y),D=JulianDate.computeTaiMinusUtc(t);w<=d;){var M,I=JulianDate.addSeconds(c,w-u,new JulianDate);2.1<y&&(M=JulianDate.computeTaiMinusUtc(I),.1<Math.abs(M-D)&&(w+=M-D,I=JulianDate.addSeconds(c,w-u,new JulianDate)));var R=Math.round(l*m(w)),O=this.makeLabel(I);this._rulerEle.innerHTML=O;I=R-((M=(M=this._rulerEle.offsetWidth)<10?g:M)/2-1);A<I?(A=I+M+5,a+='<span class="cesium-timeline-ticMain" style="left: '+R.toString()+'px;"></span><span class="cesium-timeline-ticLabel" style="left: '+I.toString()+'px;">'+O+"</span>"):a+='<span class="cesium-timeline-ticSub" style="left: '+R.toString()+'px;"></span>',w=p(w,y)}}else this._mainTicSpan=-1;a+='<span class="cesium-timeline-icon16" style="left:'+r+'px;bottom:0;background-position: 0 0;"></span>',e.innerHTML=a,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),_.y=0,this._trackList.forEach(function(e){e.render(n._context,_),_.y+=e.height})},Timeline.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;var e,t=this._scrubElement;defined(this._scrubElement)&&(e=JulianDate.secondsDifference(this._scrubJulian,this._startJulian),e=Math.round(e*this._topDiv.clientWidth/this._timeBarSecondsSpan),this._lastXPos!==e&&(this._lastXPos=e,t.style.left=e-8+"px",this._needleEle.style.left=e+"px")),defined(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(JulianDate.addSeconds(this._startJulian,this._timelineDrag,new JulianDate),JulianDate.addSeconds(this._endJulian,this._timelineDrag,new JulianDate)))},Timeline.prototype._setTimeBarTime=function(e,t){e=Math.round(e),this._scrubJulian=JulianDate.addSeconds(this._startJulian,t,new JulianDate),this._scrubElement&&(i=e-8,this._scrubElement.style.left=i.toString()+"px",this._needleEle.style.left=e.toString()+"px");var i=document.createEvent("Event");i.initEvent("settime",!0,!0),i.clientX=e,i.timeSeconds=t,i.timeJulian=this._scrubJulian,i.clock=this._clock,this._topDiv.dispatchEvent(i)},Timeline.prototype.resize=function(){var t,e=this.container.clientWidth,i=this.container.clientHeight;e===this._lastWidth&&i===this._lastHeight||(this._trackContainer.style.height=i+"px",t=1,this._trackList.forEach(function(e){t+=e.height}),this._trackListEle.style.height=t.toString()+"px",this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=t,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=i)},Object.defineProperties(VRButtonViewModel.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}}),VRButtonViewModel.prototype.isDestroyed=function(){return!1},VRButtonViewModel.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(Fullscreen.changeEventName,this._callback),destroyObject(this)};var enterVRPath="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z",exitVRPath="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z";function VRButton(e,t,i){e=getElement(e);t=new VRButtonViewModel(t,i);t._exitVRPath=exitVRPath,t._enterVRPath=enterVRPath;i=document.createElement("button");i.type="button",i.className="cesium-button cesium-vrButton",i.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(i),knockout.applyBindings(t,i),this._container=e,this._viewModel=t,this._element=i}Object.defineProperties(VRButton.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),VRButton.prototype.isDestroyed=function(){return!1},VRButton.prototype.destroy=function(){return this._viewModel.destroy(),knockout.cleanNode(this._element),this._container.removeChild(this._element),destroyObject(this)};var boundingSphereScratch=new BoundingSphere;function onTimelineScrubfunction(e){var t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function getCesium3DTileFeatureDescription(i){var e=i.getPropertyNames(),r="";return e.forEach(function(e){var t=i.getProperty(e);defined(t)&&(r+="<tr><th>"+e+"</th><td>"+t+"</td></tr>")}),r=0<r.length?'<table class="cesium-infoBox-defaultTable"><tbody>'+r+"</tbody></table>":r}function getCesium3DTileFeatureName(e){for(var t=[],i=e.getPropertyNames(),r=0;r<i.length;r++){var n=i[r];/^name$/i.test(n)?t[0]=e.getProperty(n):/name/i.test(n)?t[1]=e.getProperty(n):/^title$/i.test(n)?t[2]=e.getProperty(n):/^(id|identifier)$/i.test(n)?t[3]=e.getProperty(n):/element/i.test(n)?t[4]=e.getProperty(n):/(id|identifier)$/i.test(n)&&(t[5]=e.getProperty(n))}var a=t.length;for(r=0;r<a;r++){var o=t[r];if(defined(o)&&""!==o)return o}return"Unnamed Feature"}function pickEntity(e,t){var i=e.scene.pick(t.position);if(defined(i)){var r=defaultValue(i.id,i.primitive.id);if(r instanceof Entity)return r;if(i instanceof Cesium3DTileFeature)return new Entity({name:getCesium3DTileFeatureName(i),description:getCesium3DTileFeatureDescription(i),feature:i})}if(defined(e.scene.globe))return pickImageryLayerFeature(e,t.position)}function trackDataSourceClock(e,t,i){!defined(i)||defined(i=i.clock)&&(i.getValue(t),defined(e)&&(e.updateFromClock(),e.zoomTo(i.startTime,i.stopTime)))}var cartesian3Scratch=new Cartesian3;function pickImageryLayerFeature(i,e){var t=i.scene,e=t.camera.getPickRay(e),t=t.imageryLayers.pickImageryLayerFeatures(e,t);if(defined(t)){var r=new Entity({id:"Loading...",description:"Loading feature information..."});return when(t,function(e){var t;i.selectedEntity===r&&(defined(e)&&0!==e.length?(e=new Entity({id:(t=e[0]).name,description:t.description}),defined(t.position)&&(t=i.scene.globe.ellipsoid.cartographicToCartesian(t.position,cartesian3Scratch),e.position=new ConstantPositionProperty(t)),i.selectedEntity=e):i.selectedEntity=createNoFeaturesEntity())},function(){i.selectedEntity===r&&(i.selectedEntity=createNoFeaturesEntity())}),r}}function createNoFeaturesEntity(){return new Entity({id:"None",description:"No features found."})}function enableVRUI(e,t){var i=e._geocoder,r=e._homeButton,n=e._sceneModePicker,a=e._projectionPicker,o=e._baseLayerPicker,s=e._animation,l=e._timeline,c=e._fullscreenButton,u=e._infoBox,d=e._selectionIndicator,t=t?"hidden":"visible";defined(i)&&(i.container.style.visibility=t),defined(r)&&(r.container.style.visibility=t),defined(n)&&(n.container.style.visibility=t),defined(a)&&(a.container.style.visibility=t),defined(o)&&(o.container.style.visibility=t),defined(s)&&(s.container.style.visibility=t),defined(l)&&(l.container.style.visibility=t),defined(c)&&c.viewModel.isFullscreenEnabled&&(c.container.style.visibility=t),defined(u)&&(u.container.style.visibility=t),defined(d)&&(d.container.style.visibility=t),e._container&&e.forceResize()}function Viewer(e,t){e=getElement(e);var i=!(defined((t=defaultValue(t,defaultValue.EMPTY_OBJECT)).globe)&&!1===t.globe||defined(t.baseLayerPicker)&&!1===t.baseLayerPicker),r=this,n=document.createElement("div");n.className="cesium-viewer",e.appendChild(n);var a=document.createElement("div");a.className="cesium-viewer-cesiumWidgetContainer",n.appendChild(a);var o=document.createElement("div");o.className="cesium-viewer-bottom",n.appendChild(o);var s,l,c=defaultValue(t.scene3DOnly,!1),u=!1;defined(t.clockViewModel)?s=(l=t.clockViewModel).clock:(l=new ClockViewModel(s=new Clock),u=!0),defined(t.shouldAnimate)&&(s.shouldAnimate=t.shouldAnimate);var d=new CesiumWidget(a,{imageryProvider:!i&&!defined(t.imageryProvider)&&void 0,clock:s,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:defined(t.creditContainer)?t.creditContainer:o,creditViewport:t.creditViewport,scene3DOnly:c,terrainExaggeration:t.terrainExaggeration,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange}),h=t.dataSources,p=!1;defined(h)||(h=new DataSourceCollection,p=!0);var m,f,g=d.scene,_=new DataSourceDisplay({scene:g,dataSourceCollection:h}),a=new EventHelper;a.add(s.onTick,Viewer.prototype._onTick,this),a.add(g.morphStart,Viewer.prototype._clearTrackedObject,this),defined(t.selectionIndicator)&&!1===t.selectionIndicator||((m=document.createElement("div")).className="cesium-viewer-selectionIndicatorContainer",n.appendChild(m),m=new SelectionIndicator(m,g)),defined(t.infoBox)&&!1===t.infoBox||((N=document.createElement("div")).className="cesium-viewer-infoBoxContainer",n.appendChild(N),C=(f=new InfoBox(N)).viewModel,a.add(C.cameraClicked,Viewer.prototype._onInfoBoxCameraClicked,this),a.add(C.closeClicked,Viewer.prototype._onInfoBoxClockClicked,this));var y,C,v,S,x,T,b,E,P,A,w,D,M,I,R,O,L,F,N=document.createElement("div");if(N.className="cesium-viewer-toolbar",n.appendChild(N),defined(t.geocoder)&&!1===t.geocoder||((C=document.createElement("div")).className="cesium-viewer-geocoderContainer",N.appendChild(C),defined(t.geocoder)&&"boolean"!=typeof t.geocoder&&(v=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),y=new Geocoder({container:C,geocoderServices:v,scene:g}),a.add(y.viewModel.search.beforeExecute,Viewer.prototype._clearObjects,this)),defined(t.homeButton)&&!1===t.homeButton||(S=new HomeButton(N,g),defined(y)&&a.add(S.viewModel.command.afterExecute,function(){var e=y.viewModel;e.searchText="",e.isSearchInProgress&&e.search()}),a.add(S.viewModel.command.beforeExecute,Viewer.prototype._clearTrackedObject,this)),c||defined(t.sceneModePicker)&&!1===t.sceneModePicker||(x=new SceneModePicker(N,g)),t.projectionPicker&&(T=new ProjectionPicker(N,g)),i&&(b=defaultValue(t.imageryProviderViewModels,createDefaultImageryProviderViewModels()),E=defaultValue(t.terrainProviderViewModels,createDefaultTerrainProviderViewModels()),b=new BaseLayerPicker(N,{globe:g.globe,imageryProviderViewModels:b,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:E,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),E=N.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]),defined(t.imageryProvider)&&!1!==t.imageryProvider&&(i&&(b.viewModel.selectedImagery=void 0),g.imageryLayers.removeAll(),g.imageryLayers.addImageryProvider(t.imageryProvider)),defined(t.terrainProvider)&&(i&&(b.viewModel.selectedTerrain=void 0),g.terrainProvider=t.terrainProvider),defined(t.animation)&&!1===t.animation||((P=document.createElement("div")).className="cesium-viewer-animationContainer",n.appendChild(P),P=new Animation(P,new AnimationViewModel(l))),defined(t.timeline)&&!1===t.timeline||((A=document.createElement("div")).className="cesium-viewer-timelineContainer",n.appendChild(A),(A=new Timeline(A,s)).addEventListener("settime",onTimelineScrubfunction,!1),A.zoomTo(s.startTime,s.stopTime)),defined(t.fullscreenButton)&&!1===t.fullscreenButton||((M=document.createElement("div")).className="cesium-button cesium-toolbar-button ",N.appendChild(M),D=subscribeAndEvaluate((w=new FullscreenButton(M,t.fullscreenElement)).viewModel,"isFullscreenEnabled",function(e){M.style.display=e?"inline-block":"none"})),t.vrButton&&((L=document.createElement("div")).className="cesium-button cesium-toolbar-button ",N.appendChild(L),R=subscribeAndEvaluate((I=new VRButton(L,g,t.fullScreenElement)).viewModel,"isVREnabled",function(e){L.style.display=e?"inline-block":"none"}),O=subscribeAndEvaluate(I.viewModel,"isVRMode",function(e){enableVRUI(r,e)})),!defined(t.navigationHelpButton)||!1!==t.navigationHelpButton){var B,V=!0;try{defined(window.localStorage)&&(defined(B=window.localStorage.getItem("cesium-hasSeenNavHelp"))&&Boolean(B)?V=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true"))}catch(e){}F=new NavigationHelpButton({container:N,instructionsInitiallyVisible:defaultValue(t.navigationInstructionsInitiallyVisible,V)})}this._baseLayerPickerDropDown=E,this._fullscreenSubscription=D,this._vrSubscription=R,this._vrModeSubscription=O,this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=defaultValue(t.automaticallyTrackDataSourceClocks,!0),this._container=e,this._bottomContainer=o,this._element=n,this._cesiumWidget=d,this._selectionIndicator=m,this._infoBox=f,this._dataSourceCollection=h,this._destroyDataSourceCollection=p,this._dataSourceDisplay=_,this._clockViewModel=l,this._destroyClockViewModel=u,this._toolbar=N,this._homeButton=S,this._sceneModePicker=x,this._projectionPicker=T,this._baseLayerPicker=b,this._navigationHelpButton=F,this._animation=P,this._timeline=A,this._fullscreenButton=w,this._vrButton=I,this._geocoder=y,this._eventHelper=a,this._lastWidth=0,this._lastHeight=0,this._allowDataSourcesToSuspendAnimation=!0,this._entityView=void 0,this._enableInfoOrSelection=defined(f)||defined(m),this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._selectedEntity=void 0,this._clockTrackedDataSource=void 0,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._selectedEntityChanged=new Event,this._trackedEntityChanged=new Event,knockout.track(this,["_trackedEntity","_selectedEntity","_clockTrackedDataSource"]),a.add(h.dataSourceAdded,Viewer.prototype._onDataSourceAdded,this),a.add(h.dataSourceRemoved,Viewer.prototype._onDataSourceRemoved,this),a.add(g.postUpdate,Viewer.prototype.resize,this),a.add(g.postRender,Viewer.prototype._postRender,this);for(var k=h.length,z=0;z<k;z++)this._dataSourceAdded(h,h.get(z));this._dataSourceAdded(void 0,_.defaultDataSource),a.add(h.dataSourceAdded,Viewer.prototype._dataSourceAdded,this),a.add(h.dataSourceRemoved,Viewer.prototype._dataSourceRemoved,this),d.screenSpaceEventHandler.setInputAction(function(e){r.selectedEntity=pickEntity(r,e)},ScreenSpaceEventType$1.LEFT_CLICK),d.screenSpaceEventHandler.setInputAction(function(e){defined(e=pickEntity(r,e))?Property.getValueOrUndefined(e.position,r.clock.currentTime)?r.trackedEntity=e:r.zoomTo(e):defined(r.trackedEntity)&&(r.trackedEntity=void 0)},ScreenSpaceEventType$1.LEFT_DOUBLE_CLICK)}function zoomToOrFly(i,e,t,r){cancelZoom(i);var n=when.defer();return i._zoomPromise=n,i._zoomIsFlight=r,i._zoomOptions=t,when(e,function(e){var t;i._zoomPromise===n&&(e instanceof ImageryLayer?e.getViewableRectangle().then(function(e){return computeFlyToLocationForRectangle(e,i.scene)}).then(function(e){i._zoomPromise===n&&(i._zoomTarget=e)}):e instanceof Cesium3DTileset||e instanceof TimeDynamicPointCloud?i._zoomTarget=e:e.isLoading&&defined(e.loadingEvent)?t=e.loadingEvent.addEventListener(function(){t(),i._zoomPromise===n&&(i._zoomTarget=e.entities.values.slice(0))}):Array.isArray(e)?i._zoomTarget=e.slice(0):(defined((e=defaultValue(e.values,e)).entities)&&(e=e.entities.values),Array.isArray(e)?i._zoomTarget=e.slice(0):i._zoomTarget=[e]))}),i.scene.requestRender(),n.promise}function clearZoom(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function cancelZoom(e){var t=e._zoomPromise;defined(t)&&(clearZoom(e),t.resolve(!1))}function updateZoomTarget(t){var i=t._zoomTarget;if(defined(i)&&t.scene.mode!==SceneMode$1.MORPHING){var r,e=t.scene,n=e.camera,a=t._zoomPromise,o=defaultValue(t._zoomOptions,{});if(i instanceof Cesium3DTileset)return i.readyPromise.then(function(){var e=i.boundingSphere;defined(o.offset)||(o.offset=new HeadingPitchRange(0,-.5,e.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){a.resolve(!0)},cancel:function(){a.resolve(!1)}},t._zoomIsFlight?n.flyToBoundingSphere(i.boundingSphere,r):(n.viewBoundingSphere(e,o.offset),n.lookAtTransform(Matrix4.IDENTITY),a.resolve(!0)),clearZoom(t)});if(i instanceof TimeDynamicPointCloud)return i.readyPromise.then(function(){var e=i.boundingSphere;defined(o.offset)||(o.offset=new HeadingPitchRange(0,-.5,e.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){a.resolve(!0)},cancel:function(){a.resolve(!1)}},t._zoomIsFlight?n.flyToBoundingSphere(e,r):(n.viewBoundingSphere(e,o.offset),n.lookAtTransform(Matrix4.IDENTITY),a.resolve(!0)),clearZoom(t)});if(i instanceof Cartographic)return r={destination:e.mapProjection.ellipsoid.cartographicToCartesian(i),duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){a.resolve(!0)},cancel:function(){a.resolve(!1)}},t._zoomIsFlight?n.flyTo(r):(n.setView(r),a.resolve(!0)),void clearZoom(t);for(var s=i,l=[],c=0,u=s.length;c<u;c++){var d=t._dataSourceDisplay.getBoundingSphere(s[c],!1,boundingSphereScratch);if(d===BoundingSphereState$1.PENDING)return;d!==BoundingSphereState$1.FAILED&&l.push(BoundingSphere.clone(boundingSphereScratch))}0!==l.length?(t.trackedEntity=void 0,e=BoundingSphere.fromBoundingSpheres(l),t._zoomIsFlight?(clearZoom(t),n.flyToBoundingSphere(e,{duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){a.resolve(!0)},cancel:function(){a.resolve(!1)},offset:o.offset})):(n.viewBoundingSphere(e,o.offset),n.lookAtTransform(Matrix4.IDENTITY),clearZoom(t),a.resolve(!0))):cancelZoom(t)}}function updateTrackedEntity(e){var t,i,r,n,a;e._needTrackedEntityUpdate&&(t=e._trackedEntity,i=e.clock.currentTime,defined(Property.getValueOrUndefined(t.position,i))&&(r=e.scene,(a=e._dataSourceDisplay.getBoundingSphere(t,!1,boundingSphereScratch))!==BoundingSphereState$1.PENDING&&((n=r.mode)!==SceneMode$1.COLUMBUS_VIEW&&n!==SceneMode$1.SCENE2D||(r.screenSpaceCameraController.enableTranslate=!1),n!==SceneMode$1.COLUMBUS_VIEW&&n!==SceneMode$1.SCENE3D||(r.screenSpaceCameraController.enableTilt=!1),a=a!==BoundingSphereState$1.FAILED?boundingSphereScratch:void 0,e._entityView=new EntityView(t,r,r.mapProjection.ellipsoid),e._entityView.update(i,a),e._needTrackedEntityUpdate=!1)))}function viewerCesium3DTilesInspectorMixin(e){var t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);var i=new Cesium3DTilesInspector(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return i}}})}function viewerCesiumInspectorMixin(e){var t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);var i=new CesiumInspector(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return i}}})}function viewerDragDropMixin(o,e){e=defaultValue(e,defaultValue.EMPTY_OBJECT);var t=!0,i=defaultValue(e.flyToOnDrop,!0),r=new Event,s=defaultValue(e.clearOnDrop,!0),n=defaultValue(e.dropTarget,o.container),l=defaultValue(e.clampToGround,!0),c=e.proxy;function a(e){stop(e),s&&(o.entities.removeAll(),o.dataSources.removeAll());for(var t=e.dataTransfer.files,i=t.length,r=0;r<i;r++){var n=t[r],a=new FileReader;a.onload=createOnLoadCallback(o,n,c,l),a.onerror=createDropErrorCallback(o,n),a.readAsText(n)}}n=getElement(n),Object.defineProperties(o,{dropTarget:{get:function(){return n},set:function(e){unsubscribe(n,a),subscribe(n=e,a)}},dropEnabled:{get:function(){return t},set:function(e){e!==t&&((e?subscribe:unsubscribe)(n,a),t=e)}},dropError:{get:function(){return r}},clearOnDrop:{get:function(){return s},set:function(e){s=e}},flyToOnDrop:{get:function(){return i},set:function(e){i=e}},proxy:{get:function(){return c},set:function(e){c=e}},clampToGround:{get:function(){return l},set:function(e){l=e}}}),subscribe(n,a),o.destroy=wrapFunction(o,o.destroy,function(){o.dropEnabled=!1}),o._handleDrop=a}function stop(e){e.stopPropagation(),e.preventDefault()}function unsubscribe(e,t){defined(e)&&(e.removeEventListener("drop",t,!1),e.removeEventListener("dragenter",stop,!1),e.removeEventListener("dragover",stop,!1),e.removeEventListener("dragexit",stop,!1))}function subscribe(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",stop,!1),e.addEventListener("dragover",stop,!1),e.addEventListener("dragexit",stop,!1)}function createOnLoadCallback(r,n,a,o){var s=r.scene;return function(e){var t,i=n.name;try{if(/\.czml$/i.test(i))t=CzmlDataSource.load(JSON.parse(e.target.result),{sourceUri:i});else if(/\.geojson$/i.test(i)||/\.json$/i.test(i)||/\.topojson$/i.test(i))t=GeoJsonDataSource.load(JSON.parse(e.target.result),{sourceUri:i,clampToGround:o});else{if(!/\.(kml|kmz)$/i.test(i))return void r.dropError.raiseEvent(r,i,"Unrecognized file: "+i);t=KmlDataSource.load(n,{sourceUri:i,proxy:a,camera:s.camera,canvas:s.canvas,clampToGround:o})}defined(t)&&r.dataSources.add(t).then(function(e){r.flyToOnDrop&&r.flyTo(e)}).otherwise(function(e){r.dropError.raiseEvent(r,i,e)})}catch(e){r.dropError.raiseEvent(r,i,e)}}}function createDropErrorCallback(t,i){return function(e){t.dropError.raiseEvent(t,i.name,e.target.error)}}function viewerPerformanceWatchdogMixin(e,t){t=defaultValue(t,defaultValue.EMPTY_OBJECT);var i=new PerformanceWatchdog({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return i}}})}function callAndWrap(e,t,i){try{return e(t,i)}catch(e){return when.reject(e)}}function createTaskProcessorWorker(n){var a;return function(e){var t=e.data,i=[],r={id:t.id,result:void 0,error:void 0};return when(callAndWrap(n,t.parameters,i)).then(function(e){r.result=e}).otherwise(function(e){e instanceof Error?r.error={name:e.name,message:e.message,stack:e.stack}:r.error=e}).always(function(){defined(a)||(a=defaultValue(self.webkitPostMessage,self.postMessage)),t.canTransferArrayBuffer||(i.length=0);try{a(r,i)}catch(e){r.result=void 0,r.error="postMessage failed with error: "+formatError(e)+"\n with responseMessage: "+JSON.stringify(r),a(r)}})}}Object.defineProperties(Viewer.prototype,{container:{get:function(){return this._container}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){var t,i;this._trackedEntity!==e&&(this._trackedEntity=e,cancelZoom(this),i=(t=this.scene).mode,defined(e)&&defined(e.position)?this._needTrackedEntityUpdate=!0:(this._needTrackedEntityUpdate=!1,i!==SceneMode$1.COLUMBUS_VIEW&&i!==SceneMode$1.SCENE2D||(t.screenSpaceCameraController.enableTranslate=!0),i!==SceneMode$1.COLUMBUS_VIEW&&i!==SceneMode$1.SCENE3D||(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(Matrix4.IDENTITY)),this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender())}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){var t;this._selectedEntity!==e&&(this._selectedEntity=e,t=defined(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0,defined(e)?defined(t)&&t.animateAppear():defined(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e))}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,trackDataSourceClock(this._timeline,this.clock,e))}}}),Viewer.prototype.extend=function(e,t){e(this,t)},Viewer.prototype.resize=function(){var e,t,i,r=this._cesiumWidget,n=this._container,a=n.clientWidth,o=n.clientHeight,s=defined(this._animation),l=defined(this._timeline);r.resize(),a===this._lastWidth&&o===this._lastHeight||(i=o-125,defined(e=this._baseLayerPickerDropDown)&&(e.style.maxHeight=i+"px"),defined(this._geocoder)&&(this._geocoder.searchSuggestionsContainer.style.maxHeight=i+"px"),defined(this._infoBox)&&(this._infoBox.viewModel.maxHeight=i),n=this._timeline,i=e=r=0,s&&"hidden"!==window.getComputedStyle(this._animation.container).visibility&&(s=this._lastWidth,t=this._animation.container,900<a?(r=169,s<=900&&(t.style.width="169px",t.style.height="112px",this._animation.resize())):600<=a?(r=136,(s<600||900<s)&&(t.style.width="136px",t.style.height="90px",this._animation.resize())):(r=106,(600<s||0===s)&&(t.style.width="106px",t.style.height="70px",this._animation.resize())),e=r+5),l&&"hidden"!==window.getComputedStyle(this._timeline.container).visibility&&(l=(t=n.container).style,i=t.clientHeight+3,l.left=r+"px",l.right="0px",n.resize()),this._bottomContainer.style.left=e+"px",this._bottomContainer.style.bottom=i+"px",this._lastWidth=a,this._lastHeight=o)},Viewer.prototype.forceResize=function(){this._lastWidth=0,this.resize()},Viewer.prototype.render=function(){this._cesiumWidget.render()},Viewer.prototype.isDestroyed=function(){return!1},Viewer.prototype.destroy=function(){this.screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType$1.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType$1.LEFT_DOUBLE_CLICK);for(var e=this.dataSources,t=e.length,i=0;i<t;i++)this._dataSourceRemoved(e,e.get(i));return this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),defined(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),defined(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),defined(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),defined(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),defined(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),defined(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),defined(this._timeline)&&(this._timeline.removeEventListener("settime",onTimelineScrubfunction,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),defined(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._fullscreenButton=this._fullscreenButton.destroy()),defined(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._vrButton=this._vrButton.destroy()),defined(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),defined(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),this._cesiumWidget=this._cesiumWidget.destroy(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),destroyObject(this)},Viewer.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(Viewer.prototype._onEntityCollectionChanged,this)},Viewer.prototype._dataSourceRemoved=function(e,t){t=t.entities;t.collectionChanged.removeEventListener(Viewer.prototype._onEntityCollectionChanged,this),defined(this.trackedEntity)&&t.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0),defined(this.selectedEntity)&&t.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)},Viewer.prototype._onTick=function(e){var t=e.currentTime,i=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&(this._clockViewModel.canAnimate=i);var r,n=this._entityView;defined(n)&&(a=this._trackedEntity,this._dataSourceDisplay.getBoundingSphere(a,!1,boundingSphereScratch)===BoundingSphereState$1.DONE&&n.update(t,boundingSphereScratch));var e=!1,i=this.selectedEntity,a=defined(i)&&this._enableInfoOrSelection;a&&i.isShowing&&i.isAvailable(t)&&(this._dataSourceDisplay.getBoundingSphere(i,!0,boundingSphereScratch)!==BoundingSphereState$1.FAILED?r=boundingSphereScratch.center:defined(i.position)&&(r=i.position.getValue(t,r)),e=defined(r));n=defined(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;defined(n)&&(n.position=Cartesian3.clone(r,n.position),n.showSelection=a&&e,n.update());n=defined(this._infoBox)?this._infoBox.viewModel:void 0;defined(n)&&(n.showInfo=a,n.enableCamera=e,n.isCameraTracking=this.trackedEntity===this.selectedEntity,a?(n.titleText=defaultValue(i.name,i.id),n.description=Property.getValueOrDefault(i.description,t,"")):(n.titleText="",n.description=""))},Viewer.prototype._onEntityCollectionChanged=function(e,t,i){for(var r=i.length,n=0;n<r;n++){var a=i[n];this.trackedEntity===a&&(this.trackedEntity=void 0),this.selectedEntity===a&&(this.selectedEntity=void 0)}},Viewer.prototype._onInfoBoxCameraClicked=function(e){e.isCameraTracking&&this.trackedEntity===this.selectedEntity?this.trackedEntity=void 0:defined(this.selectedEntity.position)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)},Viewer.prototype._clearTrackedObject=function(){this.trackedEntity=void 0},Viewer.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0},Viewer.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0},Viewer.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&trackDataSourceClock(this.timeline,this.clock,e)},Viewer.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);var i=t.entities.id,t=this._eventHelper.add(t.changedEvent,Viewer.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[i]=t},Viewer.prototype._onDataSourceRemoved=function(e,t){var i=this.clockTrackedDataSource===t,t=t.entities.id;this._dataSourceChangedListeners[t](),this._dataSourceChangedListeners[t]=void 0,i&&(i=e.length,this._automaticallyTrackDataSourceClocks&&0<i?this.clockTrackedDataSource=e.get(i-1):this.clockTrackedDataSource=void 0)},Viewer.prototype.zoomTo=function(e,t){return zoomToOrFly(this,e,{offset:t},!1)},Viewer.prototype.flyTo=function(e,t){return zoomToOrFly(this,e,t,!0)},Viewer.prototype._postRender=function(){updateZoomTarget(this),updateTrackedEntity(this)};var VERSION="1.79.1";exports.Animation=Animation,exports.AnimationViewModel=AnimationViewModel,exports.Appearance=Appearance,exports.ApproximateTerrainHeights=ApproximateTerrainHeights,exports.ArcGISTiledElevationTerrainProvider=ArcGISTiledElevationTerrainProvider,exports.ArcGisMapServerImageryProvider=ArcGisMapServerImageryProvider,exports.ArcType=ArcType$1,exports.AssociativeArray=AssociativeArray,exports.AttributeCompression=AttributeCompression,exports.AttributeType=AttributeType$1,exports.AutoExposure=AutoExposure,exports.Autolinker=Autolinker,exports.AutomaticUniforms=AutomaticUniforms,exports.Axis=Axis$1,exports.AxisAlignedBoundingBox=AxisAlignedBoundingBox,exports.BaseLayerPicker=BaseLayerPicker,exports.BaseLayerPickerViewModel=BaseLayerPickerViewModel,exports.BatchTable=BatchTable,exports.Batched3DModel3DTileContent=Batched3DModel3DTileContent,exports.Billboard=Billboard,exports.BillboardCollection=BillboardCollection,exports.BillboardGraphics=BillboardGraphics,exports.BillboardVisualizer=BillboardVisualizer,exports.BingMapsGeocoderService=BingMapsGeocoderService,exports.BingMapsImageryProvider=BingMapsImageryProvider,exports.BingMapsStyle=BingMapsStyle$1,exports.BlendEquation=BlendEquation$1,exports.BlendFunction=BlendFunction$1,exports.BlendOption=BlendOption$1,exports.BlendingState=BlendingState$1,exports.BoundingRectangle=BoundingRectangle,exports.BoundingSphere=BoundingSphere,exports.BoundingSphereState=BoundingSphereState$1,exports.BoxEmitter=BoxEmitter,exports.BoxGeometry=BoxGeometry,exports.BoxGeometryUpdater=BoxGeometryUpdater,exports.BoxGraphics=BoxGraphics,exports.BoxOutlineGeometry=BoxOutlineGeometry,exports.BrdfLutGenerator=BrdfLutGenerator,exports.Buffer=Buffer$1,exports.BufferUsage=BufferUsage$1,exports.CallbackProperty=CallbackProperty,exports.Camera=Camera,exports.CameraEventAggregator=CameraEventAggregator,exports.CameraEventType=CameraEventType$1,exports.CameraFlightPath=CameraFlightPath,exports.Cartesian2=Cartesian2,exports.Cartesian3=Cartesian3,exports.Cartesian4=Cartesian4,exports.Cartographic=Cartographic,exports.CartographicGeocoderService=CartographicGeocoderService,exports.CatmullRomSpline=CatmullRomSpline,exports.Cesium3DTile=Cesium3DTile,exports.Cesium3DTileBatchTable=Cesium3DTileBatchTable,exports.Cesium3DTileColorBlendMode=Cesium3DTileColorBlendMode$1,exports.Cesium3DTileContent=Cesium3DTileContent,exports.Cesium3DTileContentFactory=Cesium3DTileContentFactory,exports.Cesium3DTileContentState=Cesium3DTileContentState$1,exports.Cesium3DTileFeature=Cesium3DTileFeature,exports.Cesium3DTileFeatureTable=Cesium3DTileFeatureTable,exports.Cesium3DTileOptimizationHint=Cesium3DTileOptimizationHint$1,exports.Cesium3DTileOptimizations=Cesium3DTileOptimizations,exports.Cesium3DTilePass=Cesium3DTilePass$1,exports.Cesium3DTilePassState=Cesium3DTilePassState,exports.Cesium3DTilePointFeature=Cesium3DTilePointFeature,exports.Cesium3DTileRefine=Cesium3DTileRefine$1,exports.Cesium3DTileStyle=Cesium3DTileStyle,exports.Cesium3DTileStyleEngine=Cesium3DTileStyleEngine,exports.Cesium3DTilesInspector=Cesium3DTilesInspector,exports.Cesium3DTilesInspectorViewModel=Cesium3DTilesInspectorViewModel,exports.Cesium3DTileset=Cesium3DTileset,exports.Cesium3DTilesetCache=Cesium3DTilesetCache,exports.Cesium3DTilesetGraphics=Cesium3DTilesetGraphics,exports.Cesium3DTilesetHeatmap=Cesium3DTilesetHeatmap,exports.Cesium3DTilesetMostDetailedTraversal=Cesium3DTilesetMostDetailedTraversal,exports.Cesium3DTilesetStatistics=Cesium3DTilesetStatistics,exports.Cesium3DTilesetTraversal=Cesium3DTilesetTraversal,exports.Cesium3DTilesetVisualizer=Cesium3DTilesetVisualizer,exports.CesiumInspector=CesiumInspector,exports.CesiumInspectorViewModel=CesiumInspectorViewModel,exports.CesiumTerrainProvider=CesiumTerrainProvider,exports.CesiumWidget=CesiumWidget,exports.Check=Check,exports.CheckerboardMaterialProperty=CheckerboardMaterialProperty,exports.CircleEmitter=CircleEmitter,exports.CircleGeometry=CircleGeometry,exports.CircleOutlineGeometry=CircleOutlineGeometry,exports.ClassificationModel=ClassificationModel,exports.ClassificationPrimitive=ClassificationPrimitive,exports.ClassificationType=ClassificationType$1,exports.ClearCommand=ClearCommand,exports.ClippingPlane=ClippingPlane,exports.ClippingPlaneCollection=ClippingPlaneCollection,exports.Clock=Clock,exports.ClockRange=ClockRange$1,exports.ClockStep=ClockStep$1,exports.ClockViewModel=ClockViewModel,exports.Color=Color,exports.ColorBlendMode=ColorBlendMode$1,exports.ColorGeometryInstanceAttribute=ColorGeometryInstanceAttribute,exports.ColorMaterialProperty=ColorMaterialProperty,exports.Command=Command,exports.ComponentDatatype=ComponentDatatype$1,exports.Composite3DTileContent=Composite3DTileContent,exports.CompositeEntityCollection=CompositeEntityCollection,exports.CompositeMaterialProperty=CompositeMaterialProperty,exports.CompositePositionProperty=CompositePositionProperty,exports.CompositeProperty=CompositeProperty,exports.CompressedTextureBuffer=CompressedTextureBuffer,exports.ComputeCommand=ComputeCommand,exports.ComputeEngine=ComputeEngine,exports.ConditionsExpression=ConditionsExpression,exports.ConeEmitter=ConeEmitter,exports.ConstantPositionProperty=ConstantPositionProperty,exports.ConstantProperty=ConstantProperty,exports.Context=Context,exports.ContextLimits=ContextLimits,exports.CoplanarPolygonGeometry=CoplanarPolygonGeometry,exports.CoplanarPolygonGeometryLibrary=CoplanarPolygonGeometryLibrary,exports.CoplanarPolygonOutlineGeometry=CoplanarPolygonOutlineGeometry,exports.CornerType=CornerType$1,exports.CorridorGeometry=CorridorGeometry,exports.CorridorGeometryLibrary=CorridorGeometryLibrary,exports.CorridorGeometryUpdater=CorridorGeometryUpdater,exports.CorridorGraphics=CorridorGraphics,exports.CorridorOutlineGeometry=CorridorOutlineGeometry,exports.Credit=Credit,exports.CreditDisplay=CreditDisplay,exports.CubeMap=CubeMap,exports.CubeMapFace=CubeMapFace,exports.CubicRealPolynomial=CubicRealPolynomial,exports.CullFace=CullFace$1,exports.CullingVolume=CullingVolume,exports.CustomDataSource=CustomDataSource,exports.CylinderGeometry=CylinderGeometry,exports.CylinderGeometryLibrary=CylinderGeometryLibrary,exports.CylinderGeometryUpdater=CylinderGeometryUpdater,exports.CylinderGraphics=CylinderGraphics,exports.CylinderOutlineGeometry=CylinderOutlineGeometry,exports.CzmlDataSource=CzmlDataSource,exports.DataSource=DataSource,exports.DataSourceClock=DataSourceClock,exports.DataSourceCollection=DataSourceCollection,exports.DataSourceDisplay=DataSourceDisplay,exports.DebugAppearance=DebugAppearance,exports.DebugCameraPrimitive=DebugCameraPrimitive,exports.DebugInspector=DebugInspector,exports.DebugModelMatrixPrimitive=DebugModelMatrixPrimitive,exports.DefaultProxy=DefaultProxy,exports.DepthFunction=DepthFunction$1,exports.DepthPlane=DepthPlane,exports.DerivedCommand=DerivedCommand,exports.DeveloperError=DeveloperError,exports.DeviceOrientationCameraController=DeviceOrientationCameraController,exports.DirectionalLight=DirectionalLight,exports.DiscardEmptyTileImagePolicy=DiscardEmptyTileImagePolicy,exports.DiscardMissingTileImagePolicy=DiscardMissingTileImagePolicy,exports.DistanceDisplayCondition=DistanceDisplayCondition,exports.DistanceDisplayConditionGeometryInstanceAttribute=DistanceDisplayConditionGeometryInstanceAttribute,exports.DoublyLinkedList=DoublyLinkedList,exports.DracoLoader=DracoLoader,exports.DrawCommand=DrawCommand,exports.DynamicGeometryBatch=DynamicGeometryBatch,exports.DynamicGeometryUpdater=DynamicGeometryUpdater$1,exports.EarthOrientationParameters=EarthOrientationParameters,exports.EarthOrientationParametersSample=EarthOrientationParametersSample,exports.EasingFunction=EasingFunction$1,exports.EllipseGeometry=EllipseGeometry,exports.EllipseGeometryLibrary=EllipseGeometryLibrary,exports.EllipseGeometryUpdater=EllipseGeometryUpdater,exports.EllipseGraphics=EllipseGraphics,exports.EllipseOutlineGeometry=EllipseOutlineGeometry,exports.Ellipsoid=Ellipsoid,exports.EllipsoidGeodesic=EllipsoidGeodesic,exports.EllipsoidGeometry=EllipsoidGeometry,exports.EllipsoidGeometryUpdater=EllipsoidGeometryUpdater,exports.EllipsoidGraphics=EllipsoidGraphics,exports.EllipsoidOutlineGeometry=EllipsoidOutlineGeometry,exports.EllipsoidPrimitive=EllipsoidPrimitive,exports.EllipsoidRhumbLine=EllipsoidRhumbLine,exports.EllipsoidSurfaceAppearance=EllipsoidSurfaceAppearance,exports.EllipsoidTangentPlane=EllipsoidTangentPlane,exports.EllipsoidTerrainProvider=EllipsoidTerrainProvider,exports.EllipsoidalOccluder=EllipsoidalOccluder,exports.Empty3DTileContent=Empty3DTileContent,exports.EncodedCartesian3=EncodedCartesian3,exports.Entity=Entity,exports.EntityCluster=EntityCluster,exports.EntityCollection=EntityCollection,exports.EntityView=EntityView,exports.Event=Event,exports.EventHelper=EventHelper,exports.ExpandByMars=ExpandByMars,exports.Expression=Expression,exports.ExpressionNodeType=ExpressionNodeType$1,exports.ExtrapolationType=ExtrapolationType$1,exports.FXAA3_11=FXAA3_11,exports.FeatureDetection=FeatureDetection,exports.Fog=Fog,exports.ForEach=ForEach,exports.FrameRateMonitor=FrameRateMonitor,exports.FrameState=FrameState,exports.Framebuffer=Framebuffer,exports.FrustumCommands=FrustumCommands,exports.FrustumGeometry=FrustumGeometry,exports.FrustumOutlineGeometry=FrustumOutlineGeometry,exports.Fullscreen=Fullscreen,exports.FullscreenButton=FullscreenButton,exports.FullscreenButtonViewModel=FullscreenButtonViewModel,exports.GeoJsonDataSource=GeoJsonDataSource,exports.GeocodeType=GeocodeType$1,exports.Geocoder=Geocoder,exports.GeocoderService=GeocoderService,exports.GeocoderViewModel=GeocoderViewModel,exports.GeographicProjection=GeographicProjection,exports.GeographicTilingScheme=GeographicTilingScheme,exports.Geometry=Geometry,exports.Geometry3DTileContent=Geometry3DTileContent,exports.GeometryAttribute=GeometryAttribute,exports.GeometryAttributes=GeometryAttributes,exports.GeometryFactory=GeometryFactory,exports.GeometryInstance=GeometryInstance,exports.GeometryInstanceAttribute=GeometryInstanceAttribute,exports.GeometryOffsetAttribute=GeometryOffsetAttribute$1,exports.GeometryPipeline=GeometryPipeline,exports.GeometryType=GeometryType$1,exports.GeometryUpdater=GeometryUpdater,exports.GeometryVisualizer=GeometryVisualizer,exports.GetFeatureInfoFormat=GetFeatureInfoFormat,exports.Globe=Globe,exports.GlobeDepth=GlobeDepth,exports.GlobeSurfaceShaderSet=GlobeSurfaceShaderSet,exports.GlobeSurfaceTile=GlobeSurfaceTile,exports.GlobeSurfaceTileProvider=GlobeSurfaceTileProvider,exports.GlobeTranslucency=GlobeTranslucency,exports.GlobeTranslucencyFramebuffer=GlobeTranslucencyFramebuffer,exports.GlobeTranslucencyState=GlobeTranslucencyState,exports.GoogleEarthEnterpriseImageryProvider=GoogleEarthEnterpriseImageryProvider,exports.GoogleEarthEnterpriseMapsProvider=GoogleEarthEnterpriseMapsProvider,exports.GoogleEarthEnterpriseMetadata=GoogleEarthEnterpriseMetadata,exports.GoogleEarthEnterpriseTerrainData=GoogleEarthEnterpriseTerrainData,exports.GoogleEarthEnterpriseTerrainProvider=GoogleEarthEnterpriseTerrainProvider,exports.GoogleEarthEnterpriseTileInformation=GoogleEarthEnterpriseTileInformation,exports.GregorianDate=GregorianDate,exports.GridImageryProvider=GridImageryProvider,exports.GridMaterialProperty=GridMaterialProperty,exports.GroundGeometryUpdater=GroundGeometryUpdater,exports.GroundPolylineGeometry=GroundPolylineGeometry,exports.GroundPolylinePrimitive=GroundPolylinePrimitive,exports.GroundPrimitive=GroundPrimitive,exports.HeadingPitchRange=HeadingPitchRange,exports.HeadingPitchRoll=HeadingPitchRoll,exports.Heap=Heap,exports.HeightReference=HeightReference$1,exports.HeightmapEncoding=HeightmapEncoding$1,exports.HeightmapTerrainData=HeightmapTerrainData,exports.HeightmapTessellator=HeightmapTessellator,exports.HermitePolynomialApproximation=HermitePolynomialApproximation,exports.HermiteSpline=HermiteSpline,exports.HomeButton=HomeButton,exports.HomeButtonViewModel=HomeButtonViewModel,exports.HorizontalOrigin=HorizontalOrigin$1,exports.Iau2000Orientation=Iau2000Orientation,exports.Iau2006XysData=Iau2006XysData,exports.Iau2006XysSample=Iau2006XysSample,exports.IauOrientationAxes=IauOrientationAxes,exports.IauOrientationParameters=IauOrientationParameters,exports.ImageMaterialProperty=ImageMaterialProperty,exports.Imagery=Imagery,exports.ImageryLayer=ImageryLayer,exports.ImageryLayerCollection=ImageryLayerCollection,exports.ImageryLayerFeatureInfo=ImageryLayerFeatureInfo,exports.ImageryProvider=ImageryProvider,exports.ImagerySplitDirection=ImagerySplitDirection$1,exports.ImageryState=ImageryState$1,exports.IndexDatatype=IndexDatatype$1,exports.InfoBox=InfoBox,exports.InfoBoxViewModel=InfoBoxViewModel,exports.InspectorShared=InspectorShared,exports.Instanced3DModel3DTileContent=Instanced3DModel3DTileContent,exports.InterpolationAlgorithm=InterpolationAlgorithm,exports.Intersect=Intersect$1,exports.IntersectionTests=IntersectionTests,exports.Intersections2D=Intersections2D,exports.Interval=Interval,exports.InvertClassification=InvertClassification,exports.Ion=Ion,exports.IonGeocoderService=IonGeocoderService,exports.IonImageryProvider=IonImageryProvider,exports.IonResource=IonResource,exports.IonWorldImageryStyle=IonWorldImageryStyle$1,exports.Iso8601=Iso8601,exports.JobScheduler=JobScheduler,exports.JobType=JobType$1,exports.JulianDate=JulianDate,exports.KeyboardEventModifier=KeyboardEventModifier$1,exports.KmlCamera=KmlCamera,exports.KmlDataSource=KmlDataSource,exports.KmlLookAt=KmlLookAt,exports.KmlTour=KmlTour,exports.KmlTourFlyTo=KmlTourFlyTo,exports.KmlTourWait=KmlTourWait,exports.Label=Label,exports.LabelCollection=LabelCollection,exports.LabelGraphics=LabelGraphics,exports.LabelStyle=LabelStyle$1,exports.LabelVisualizer=LabelVisualizer,exports.LagrangePolynomialApproximation=LagrangePolynomialApproximation,exports.LeapSecond=LeapSecond,exports.LercDecode=LercDecode,exports.Light=Light,exports.LinearApproximation=LinearApproximation,exports.LinearSpline=LinearSpline,exports.ManagedArray=ManagedArray,exports.MapMode2D=MapMode2D$1,exports.MapProjection=MapProjection,exports.MapboxImageryProvider=MapboxImageryProvider,exports.MapboxStyleImageryProvider=MapboxStyleImageryProvider,exports.Material=Material,exports.MaterialAppearance=MaterialAppearance,exports.MaterialProperty=MaterialProperty,exports.Math=CesiumMath,exports.Matrix2=Matrix2,exports.Matrix3=Matrix3,exports.Matrix4=Matrix4,exports.MipmapHint=MipmapHint$1,exports.Model=Model,exports.ModelAnimation=ModelAnimation,exports.ModelAnimationCache=ModelAnimationCache,exports.ModelAnimationCollection=ModelAnimationCollection,exports.ModelAnimationLoop=ModelAnimationLoop$1,exports.ModelAnimationState=ModelAnimationState,exports.ModelGraphics=ModelGraphics,exports.ModelInstance=ModelInstance,exports.ModelInstanceCollection=ModelInstanceCollection,exports.ModelLoadResources=ModelLoadResources,exports.ModelMaterial=ModelMaterial,exports.ModelMesh=ModelMesh,exports.ModelNode=ModelNode,exports.ModelOutlineLoader=ModelOutlineLoader,exports.ModelUtility=ModelUtility,exports.ModelVisualizer=ModelVisualizer,exports.Moon=Moon,exports.NavigationHelpButton=NavigationHelpButton,exports.NavigationHelpButtonViewModel=NavigationHelpButtonViewModel,exports.NearFarScalar=NearFarScalar,exports.NeverTileDiscardPolicy=NeverTileDiscardPolicy,exports.NoSleep=NoSleep,exports.NodeTransformationProperty=NodeTransformationProperty,exports.OIT=OIT,exports.Occluder=Occluder,exports.OctahedralProjectedCubeMap=OctahedralProjectedCubeMap,exports.OffsetGeometryInstanceAttribute=OffsetGeometryInstanceAttribute,exports.OpenCageGeocoderService=OpenCageGeocoderService,exports.OpenStreetMapImageryProvider=OpenStreetMapImageryProvider,exports.OrderedGroundPrimitiveCollection=OrderedGroundPrimitiveCollection,exports.OrientedBoundingBox=OrientedBoundingBox,exports.OrthographicFrustum=OrthographicFrustum,exports.OrthographicOffCenterFrustum=OrthographicOffCenterFrustum,exports.Packable=Packable,exports.PackableForInterpolation=PackableForInterpolation,exports.Particle=Particle,exports.ParticleBurst=ParticleBurst,exports.ParticleEmitter=ParticleEmitter,exports.ParticleSystem=ParticleSystem,exports.Pass=Pass$1,exports.PassState=PassState,exports.PathGraphics=PathGraphics,exports.PathVisualizer=PathVisualizer,exports.PeliasGeocoderService=PeliasGeocoderService,exports.PerInstanceColorAppearance=PerInstanceColorAppearance,exports.PerformanceDisplay=PerformanceDisplay,exports.PerformanceWatchdog=PerformanceWatchdog,exports.PerformanceWatchdogViewModel=PerformanceWatchdogViewModel,exports.PerspectiveFrustum=PerspectiveFrustum,exports.PerspectiveOffCenterFrustum=PerspectiveOffCenterFrustum,exports.PickDepth=PickDepth,exports.PickDepthFramebuffer=PickDepthFramebuffer,exports.PickFramebuffer=PickFramebuffer,exports.Picking=Picking,exports.PinBuilder=PinBuilder,exports.PixelDatatype=PixelDatatype$1,exports.PixelFormat=PixelFormat$1,exports.Plane=Plane,exports.PlaneGeometry=PlaneGeometry,exports.PlaneGeometryUpdater=PlaneGeometryUpdater,exports.PlaneGraphics=PlaneGraphics,exports.PlaneOutlineGeometry=PlaneOutlineGeometry,exports.PointCloud=PointCloud,exports.PointCloud3DTileContent=PointCloud3DTileContent,exports.PointCloudEyeDomeLighting=PointCloudEyeDomeLighting,exports.PointCloudShading=PointCloudShading,exports.PointGraphics=PointGraphics,exports.PointPrimitive=PointPrimitive,exports.PointPrimitiveCollection=PointPrimitiveCollection,exports.PointVisualizer=PointVisualizer,exports.PolygonGeometry=PolygonGeometry,exports.PolygonGeometryLibrary=PolygonGeometryLibrary,exports.PolygonGeometryUpdater=PolygonGeometryUpdater,exports.PolygonGraphics=PolygonGraphics,exports.PolygonHierarchy=PolygonHierarchy,exports.PolygonOutlineGeometry=PolygonOutlineGeometry,exports.PolygonPipeline=PolygonPipeline,exports.Polyline=Polyline,exports.PolylineArrowMaterialProperty=PolylineArrowMaterialProperty,exports.PolylineCollection=PolylineCollection,exports.PolylineColorAppearance=PolylineColorAppearance,exports.PolylineDashMaterialProperty=PolylineDashMaterialProperty,exports.PolylineGeometry=PolylineGeometry,exports.PolylineGeometryUpdater=PolylineGeometryUpdater,exports.PolylineGlowMaterialProperty=PolylineGlowMaterialProperty,exports.PolylineGraphics=PolylineGraphics,exports.PolylineMaterialAppearance=PolylineMaterialAppearance,exports.PolylineOutlineMaterialProperty=PolylineOutlineMaterialProperty,exports.PolylinePipeline=PolylinePipeline,exports.PolylineVisualizer=PolylineVisualizer,exports.PolylineVolumeGeometry=PolylineVolumeGeometry,exports.PolylineVolumeGeometryLibrary=PolylineVolumeGeometryLibrary,exports.PolylineVolumeGeometryUpdater=PolylineVolumeGeometryUpdater,exports.PolylineVolumeGraphics=PolylineVolumeGraphics,exports.PolylineVolumeOutlineGeometry=PolylineVolumeOutlineGeometry,exports.PositionProperty=PositionProperty,exports.PositionPropertyArray=PositionPropertyArray,exports.PostProcessStage=PostProcessStage,exports.PostProcessStageCollection=PostProcessStageCollection,exports.PostProcessStageComposite=PostProcessStageComposite,exports.PostProcessStageLibrary=PostProcessStageLibrary,exports.PostProcessStageSampleMode=PostProcessStageSampleMode,exports.PostProcessStageTextureCache=PostProcessStageTextureCache,exports.Primitive=Primitive,exports.PrimitiveCollection=PrimitiveCollection,exports.PrimitivePipeline=PrimitivePipeline,exports.PrimitiveState=PrimitiveState$1,exports.PrimitiveType=PrimitiveType$1,exports.ProjectionPicker=ProjectionPicker,exports.ProjectionPickerViewModel=ProjectionPickerViewModel,exports.Property=Property,exports.PropertyArray=PropertyArray,exports.PropertyBag=PropertyBag,exports.ProviderViewModel=ProviderViewModel,exports.Proxy=Proxy,exports.QuadraticRealPolynomial=QuadraticRealPolynomial,exports.QuadtreeOccluders=QuadtreeOccluders,exports.QuadtreePrimitive=QuadtreePrimitive,exports.QuadtreeTile=QuadtreeTile,exports.QuadtreeTileLoadState=QuadtreeTileLoadState$1,exports.QuadtreeTileProvider=QuadtreeTileProvider,exports.QuantizedMeshTerrainData=QuantizedMeshTerrainData,exports.QuarticRealPolynomial=QuarticRealPolynomial,exports.Quaternion=Quaternion,exports.QuaternionSpline=QuaternionSpline,exports.Queue=Queue,exports.Ray=Ray,exports.Rectangle=Rectangle,exports.RectangleCollisionChecker=RectangleCollisionChecker,exports.RectangleGeometry=RectangleGeometry,exports.RectangleGeometryLibrary=RectangleGeometryLibrary,exports.RectangleGeometryUpdater=RectangleGeometryUpdater,exports.RectangleGraphics=RectangleGraphics,exports.RectangleOutlineGeometry=RectangleOutlineGeometry,exports.ReferenceFrame=ReferenceFrame$1,exports.ReferenceProperty=ReferenceProperty,exports.RenderState=RenderState,exports.Renderbuffer=Renderbuffer,exports.RenderbufferFormat=RenderbufferFormat$1,exports.Request=Request,exports.RequestErrorEvent=RequestErrorEvent,exports.RequestScheduler=RequestScheduler,exports.RequestState=RequestState$1,exports.RequestType=RequestType$1,exports.Resource=Resource,exports.Rotation=Rotation,exports.RuntimeError=RuntimeError,exports.SDFSettings=SDFSettings$1,exports.SampledPositionProperty=SampledPositionProperty,exports.SampledProperty=SampledProperty,exports.Sampler=Sampler,exports.ScaledPositionProperty=ScaledPositionProperty,exports.Scene=Scene,exports.SceneFramebuffer=SceneFramebuffer,exports.SceneMode=SceneMode$1,exports.SceneModePicker=SceneModePicker,exports.SceneModePickerViewModel=SceneModePickerViewModel,exports.SceneTransforms=SceneTransforms,exports.SceneTransitioner=SceneTransitioner,exports.ScreenSpaceCameraController=ScreenSpaceCameraController,exports.ScreenSpaceEventHandler=ScreenSpaceEventHandler,exports.ScreenSpaceEventType=ScreenSpaceEventType$1,exports.SelectionIndicator=SelectionIndicator,exports.SelectionIndicatorViewModel=SelectionIndicatorViewModel,exports.ShaderCache=ShaderCache,exports.ShaderProgram=ShaderProgram,exports.ShaderSource=ShaderSource,exports.ShadowMap=ShadowMap,exports.ShadowMapShader=ShadowMapShader,exports.ShadowMode=ShadowMode$1,exports.ShadowVolumeAppearance=ShadowVolumeAppearance,exports.ShowGeometryInstanceAttribute=ShowGeometryInstanceAttribute,exports.Simon1994PlanetaryPositions=Simon1994PlanetaryPositions,exports.SimplePolylineGeometry=SimplePolylineGeometry,exports.SingleTileImageryProvider=SingleTileImageryProvider,exports.SkyAtmosphere=SkyAtmosphere,exports.SkyBox=SkyBox,exports.SphereEmitter=SphereEmitter,exports.SphereGeometry=SphereGeometry,exports.SphereOutlineGeometry=SphereOutlineGeometry,exports.Spherical=Spherical,exports.Spline=Spline,exports.StaticGeometryColorBatch=StaticGeometryColorBatch,exports.StaticGeometryPerMaterialBatch=StaticGeometryPerMaterialBatch,exports.StaticGroundGeometryColorBatch=StaticGroundGeometryColorBatch,exports.StaticGroundGeometryPerMaterialBatch=StaticGroundGeometryPerMaterialBatch,exports.StaticGroundPolylinePerMaterialBatch=StaticGroundPolylinePerMaterialBatch,exports.StaticOutlineGeometryBatch=StaticOutlineGeometryBatch,exports.StencilConstants=StencilConstants$1,exports.StencilFunction=StencilFunction$1,exports.StencilOperation=StencilOperation$1,exports.StripeMaterialProperty=StripeMaterialProperty,exports.StripeOrientation=StripeOrientation$1,exports.StyleExpression=StyleExpression,exports.Sun=Sun,exports.SunLight=SunLight,exports.SunPostProcess=SunPostProcess,exports.SvgPathBindingHandler=SvgPathBindingHandler,exports.TaskProcessor=TaskProcessor,exports.TerrainData=TerrainData,exports.TerrainEncoding=TerrainEncoding,exports.TerrainFillMesh=TerrainFillMesh,exports.TerrainMesh=TerrainMesh,exports.TerrainOffsetProperty=TerrainOffsetProperty,exports.TerrainProvider=TerrainProvider,exports.TerrainQuantization=TerrainQuantization$1,exports.TerrainState=TerrainState$1,exports.Texture=Texture,exports.TextureAtlas=TextureAtlas,exports.TextureCache=TextureCache,exports.TextureMagnificationFilter=TextureMagnificationFilter$1,exports.TextureMinificationFilter=TextureMinificationFilter$1,exports.TextureWrap=TextureWrap$1,exports.TileAvailability=TileAvailability,exports.TileBoundingRegion=TileBoundingRegion,exports.TileBoundingSphere=TileBoundingSphere,exports.TileBoundingVolume=TileBoundingVolume,exports.TileCoordinatesImageryProvider=TileCoordinatesImageryProvider,exports.TileDiscardPolicy=TileDiscardPolicy,exports.TileEdge=TileEdge,exports.TileImagery=TileImagery,exports.TileMapServiceImageryProvider=TileMapServiceImageryProvider,exports.TileOrientedBoundingBox=TileOrientedBoundingBox,exports.TileProviderError=TileProviderError,exports.TileReplacementQueue=TileReplacementQueue,exports.TileSelectionResult=TileSelectionResult,exports.TileState=TileState$1,exports.Tileset3DTileContent=Tileset3DTileContent,exports.TilingScheme=TilingScheme,exports.TimeConstants=TimeConstants$1,exports.TimeDynamicImagery=TimeDynamicImagery,exports.TimeDynamicPointCloud=TimeDynamicPointCloud,exports.TimeInterval=TimeInterval,exports.TimeIntervalCollection=TimeIntervalCollection,exports.TimeIntervalCollectionPositionProperty=TimeIntervalCollectionPositionProperty,exports.TimeIntervalCollectionProperty=TimeIntervalCollectionProperty,exports.TimeStandard=TimeStandard$1,exports.Timeline=Timeline,exports.TimelineHighlightRange=TimelineHighlightRange,exports.TimelineTrack=TimelineTrack,exports.Tipsify=Tipsify,exports.ToggleButtonViewModel=ToggleButtonViewModel,exports.Tonemapper=Tonemapper$1,exports.Transforms=Transforms,exports.TranslationRotationScale=TranslationRotationScale,exports.TridiagonalSystemSolver=TridiagonalSystemSolver,exports.TrustedServers=TrustedServers,exports.Tween=TWEEN,exports.TweenCollection=TweenCollection,exports.UniformState=UniformState,exports.Uri=URI,exports.UrlTemplateImageryProvider=UrlTemplateImageryProvider,exports.VERSION=VERSION,exports.VRButton=VRButton,exports.VRButtonViewModel=VRButtonViewModel,exports.VRTheWorldTerrainProvider=VRTheWorldTerrainProvider,exports.Vector3DTileBatch=Vector3DTileBatch,exports.Vector3DTileContent=Vector3DTileContent,exports.Vector3DTileGeometry=Vector3DTileGeometry,exports.Vector3DTilePoints=Vector3DTilePoints,exports.Vector3DTilePolygons=Vector3DTilePolygons,exports.Vector3DTilePolylines=Vector3DTilePolylines,exports.Vector3DTilePrimitive=Vector3DTilePrimitive,exports.VelocityOrientationProperty=VelocityOrientationProperty,exports.VelocityVectorProperty=VelocityVectorProperty,exports.VertexArray=VertexArray,exports.VertexArrayFacade=VertexArrayFacade,exports.VertexFormat=VertexFormat,exports.VerticalOrigin=VerticalOrigin$1,exports.VideoSynchronizer=VideoSynchronizer,exports.View=View,exports.Viewer=Viewer,exports.ViewportQuad=ViewportQuad,exports.Visibility=Visibility$1,exports.Visualizer=Visualizer,exports.WallGeometry=WallGeometry,exports.WallGeometryLibrary=WallGeometryLibrary,exports.WallGeometryUpdater=WallGeometryUpdater,exports.WallGraphics=WallGraphics,exports.WallOutlineGeometry=WallOutlineGeometry,exports.WebGLConstants=WebGLConstants$1,exports.WebMapServiceImageryProvider=WebMapServiceImageryProvider,exports.WebMapTileServiceImageryProvider=WebMapTileServiceImageryProvider,exports.WebMercatorProjection=WebMercatorProjection,exports.WebMercatorTilingScheme=WebMercatorTilingScheme,exports.WeightSpline=WeightSpline,exports.WindingOrder=WindingOrder$1,exports._shadersAcesTonemappingStage=AcesTonemapping,exports._shadersAdditiveBlend=AdditiveBlend,exports._shadersAdjustTranslucentFS=AdjustTranslucentFS,exports._shadersAllMaterialAppearanceFS=AllMaterialAppearanceFS,exports._shadersAllMaterialAppearanceVS=AllMaterialAppearanceVS,exports._shadersAmbientOcclusionGenerate=AmbientOcclusionGenerate,exports._shadersAmbientOcclusionModulate=AmbientOcclusionModulate,exports._shadersAspectRampMaterial=AspectRampMaterial,exports._shadersBasicMaterialAppearanceFS=BasicMaterialAppearanceFS,exports._shadersBasicMaterialAppearanceVS=BasicMaterialAppearanceVS,exports._shadersBillboardCollectionFS=BillboardCollectionFS,exports._shadersBillboardCollectionVS=BillboardCollectionVS,exports._shadersBlackAndWhite=BlackAndWhite,exports._shadersBloomComposite=BloomComposite,exports._shadersBloomThreshold=BloomThreshold,exports._shadersBrdfLutGeneratorFS=BrdfLutGeneratorFS,exports._shadersBrightPass=BrightPass,exports._shadersBrightness=Brightness,exports._shadersBumpMapMaterial=BumpMapMaterial,exports._shadersCheckerboardMaterial=CheckerboardMaterial,exports._shadersCompositeOITFS=CompositeOITFS,exports._shadersContrastBias=ContrastBias,exports._shadersCzmBuiltins=CzmBuiltins,exports._shadersDepthOfField=DepthOfField,exports._shadersDepthPlaneFS=DepthPlaneFS,exports._shadersDepthPlaneVS=DepthPlaneVS,exports._shadersDepthView=DepthView,exports._shadersDepthViewPacked=DepthViewPacked,exports._shadersDotMaterial=DotMaterial,exports._shadersEdgeDetection=EdgeDetection,exports._shadersElevationBandMaterial=ElevationBandMaterial,exports._shadersElevationContourMaterial=ElevationContourMaterial,exports._shadersElevationRampMaterial=ElevationRampMaterial,exports._shadersEllipsoidFS=EllipsoidFS,exports._shadersEllipsoidSurfaceAppearanceFS=EllipsoidSurfaceAppearanceFS,exports._shadersEllipsoidSurfaceAppearanceVS=EllipsoidSurfaceAppearanceVS,exports._shadersEllipsoidVS=EllipsoidVS,exports._shadersFXAA=FXAA,exports._shadersFadeMaterial=FadeMaterial,exports._shadersFilmicTonemapping=FilmicTonemapping,exports._shadersGaussianBlur1D=GaussianBlur1D,exports._shadersGlobeFS=GlobeFS,exports._shadersGlobeVS=GlobeVS,exports._shadersGridMaterial=GridMaterial,exports._shadersGroundAtmosphere=GroundAtmosphere,exports._shadersHSBToRGB=czm_HSBToRGB,exports._shadersHSLToRGB=czm_HSLToRGB,exports._shadersLensFlare=LensFlare,exports._shadersModifiedReinhardTonemapping=ModifiedReinhardTonemapping,exports._shadersNightVision=NightVision,exports._shadersNormalMapMaterial=NormalMapMaterial,exports._shadersOctahedralProjectionAtlasFS=OctahedralProjectionAtlasFS,exports._shadersOctahedralProjectionFS=OctahedralProjectionFS,exports._shadersOctahedralProjectionVS=OctahedralProjectionVS,exports._shadersPassThrough=PassThrough,exports._shadersPassThroughDepth=PassThroughDepth,exports._shadersPerInstanceColorAppearanceFS=PerInstanceColorAppearanceFS,exports._shadersPerInstanceColorAppearanceVS=PerInstanceColorAppearanceVS,exports._shadersPerInstanceFlatColorAppearanceFS=PerInstanceFlatColorAppearanceFS,exports._shadersPerInstanceFlatColorAppearanceVS=PerInstanceFlatColorAppearanceVS,exports._shadersPointCloudEyeDomeLighting=PointCloudEyeDomeLightingShader,exports._shadersPointPrimitiveCollectionFS=PointPrimitiveCollectionFS,exports._shadersPointPrimitiveCollectionVS=PointPrimitiveCollectionVS,exports._shadersPolylineArrowMaterial=PolylineArrowMaterial,exports._shadersPolylineColorAppearanceVS=PolylineColorAppearanceVS,exports._shadersPolylineCommon=PolylineCommon,exports._shadersPolylineDashMaterial=PolylineDashMaterial,exports._shadersPolylineFS=PolylineFS$1,exports._shadersPolylineGlowMaterial=PolylineGlowMaterial,exports._shadersPolylineMaterialAppearanceVS=PolylineMaterialAppearanceVS,exports._shadersPolylineOutlineMaterial=PolylineOutlineMaterial,exports._shadersPolylineShadowVolumeFS=PolylineShadowVolumeFS,exports._shadersPolylineShadowVolumeMorphFS=PolylineShadowVolumeMorphFS,exports._shadersPolylineShadowVolumeMorphVS=PolylineShadowVolumeMorphVS,exports._shadersPolylineShadowVolumeVS=PolylineShadowVolumeVS,exports._shadersPolylineVS=PolylineVS,exports._shadersRGBToHSB=czm_RGBToHSB,exports._shadersRGBToHSL=czm_RGBToHSL,exports._shadersRGBToXYZ=czm_RGBToXYZ,exports._shadersReinhardTonemapping=ReinhardTonemapping,exports._shadersReprojectWebMercatorFS=ReprojectWebMercatorFS,exports._shadersReprojectWebMercatorVS=ReprojectWebMercatorVS,exports._shadersRimLightingMaterial=RimLightingMaterial,exports._shadersShadowVolumeAppearanceFS=ShadowVolumeAppearanceFS,exports._shadersShadowVolumeAppearanceVS=ShadowVolumeAppearanceVS,exports._shadersShadowVolumeFS=ShadowVolumeFS,exports._shadersSilhouette=Silhouette,exports._shadersSkyAtmosphereCommon=SkyAtmosphereCommon,exports._shadersSkyAtmosphereFS=SkyAtmosphereFS,exports._shadersSkyAtmosphereVS=SkyAtmosphereVS,exports._shadersSkyBoxFS=SkyBoxFS,exports._shadersSkyBoxVS=SkyBoxVS,exports._shadersSlopeRampMaterial=SlopeRampMaterial,exports._shadersStripeMaterial=StripeMaterial,exports._shadersSunFS=SunFS,exports._shadersSunTextureFS=SunTextureFS,exports._shadersSunVS=SunVS,exports._shadersTexturedMaterialAppearanceFS=TexturedMaterialAppearanceFS,exports._shadersTexturedMaterialAppearanceVS=TexturedMaterialAppearanceVS,exports._shadersVector3DTilePolylinesVS=Vector3DTilePolylinesVS,exports._shadersVectorTileVS=VectorTileVS,exports._shadersViewportQuadFS=ViewportQuadFS,exports._shadersViewportQuadVS=ViewportQuadVS,exports._shadersWaJueMaterial=WaJueMaterial,exports._shadersWater=WaterMaterial,exports._shadersXYZToRGB=czm_XYZToRGB,exports._shadersYanMoMaterial=YanMoMaterial,exports._shadersacesTonemapping=czm_acesTonemapping,exports._shadersalphaWeight=czm_alphaWeight,exports._shadersantialias=czm_antialias,exports._shadersapproximateSphericalCoordinates=czm_approximateSphericalCoordinates,exports._shadersbackFacing=czm_backFacing,exports._shadersbranchFreeTernary=czm_branchFreeTernary,exports._shaderscascadeColor=czm_cascadeColor,exports._shaderscascadeDistance=czm_cascadeDistance,exports._shaderscascadeMatrix=czm_cascadeMatrix,exports._shaderscascadeWeights=czm_cascadeWeights,exports._shaderscolumbusViewMorph=czm_columbusViewMorph,exports._shaderscomputePosition=czm_computePosition,exports._shaderscosineAndSine=czm_cosineAndSine,exports._shadersdecompressTextureCoordinates=czm_decompressTextureCoordinates,exports._shadersdegreesPerRadian=czm_degreesPerRadian,exports._shadersdepthClamp=czm_depthClamp,exports._shadersdepthRange=czm_depthRange,exports._shadersdepthRangeStruct=czm_depthRangeStruct,exports._shaderseastNorthUpToEyeCoordinates=czm_eastNorthUpToEyeCoordinates,exports._shadersellipsoidContainsPoint=czm_ellipsoidContainsPoint,exports._shadersellipsoidWgs84TextureCoordinates=czm_ellipsoidWgs84TextureCoordinates,exports._shadersepsilon1=czm_epsilon1,exports._shadersepsilon2=czm_epsilon2,exports._shadersepsilon3=czm_epsilon3,exports._shadersepsilon4=czm_epsilon4,exports._shadersepsilon5=czm_epsilon5,exports._shadersepsilon6=czm_epsilon6,exports._shadersepsilon7=czm_epsilon7,exports._shadersequalsEpsilon=czm_equalsEpsilon,exports._shaderseyeOffset=czm_eyeOffset,exports._shaderseyeToWindowCoordinates=czm_eyeToWindowCoordinates,exports._shadersfastApproximateAtan=czm_fastApproximateAtan,exports._shadersfog=czm_fog,exports._shadersfromCartesian=czm_fromCartesian,exports._shadersgammaCorrect=czm_gammaCorrect,exports._shadersgeodeticSurfaceNormal=czm_geodeticSurfaceNormal,exports._shadersgetDefaultMaterial=czm_getDefaultMaterial,exports._shadersgetFloodRect=czm_getFloodRect,exports._shadersgetIndexMat=czm_getIndexMat,exports._shadersgetLambertDiffuse=czm_getLambertDiffuse,exports._shadersgetMaxIndex=czm_getMaxIndex,exports._shadersgetMaxIndexVal=czm_getMaxIndexVal,exports._shadersgetSpecular=czm_getSpecular,exports._shadersgetWaterNoise=czm_getWaterNoise,exports._shadershue=czm_hue,exports._shadersinfinity=czm_infinity,exports._shadersinverseGamma=czm_inverseGamma,exports._shadersisEmpty=czm_isEmpty,exports._shadersisFull=czm_isFull,exports._shadersisInEllipsoid=czm_isInEllipsoid,exports._shadersisInObliq=czm_isInObliq,exports._shaderslatitudeToWebMercatorFraction=czm_latitudeToWebMercatorFraction,exports._shaderslineDistance=czm_lineDistance,exports._shadersluminance=czm_luminance,exports._shadersmagnitude=czm_magnitude,exports._shadersmagnitudeSquared=czm_magnitudeSquared,exports._shadersmaterial=czm_material,exports._shadersmaterialInput=czm_materialInput,exports._shadersmetersPerPixel=czm_metersPerPixel,exports._shadersmodelToWindowCoordinates=czm_modelToWindowCoordinates,exports._shadersmultiplyComponents=czm_multiplyComponents,exports._shadersmultiplyWithColorBalance=czm_multiplyWithColorBalance,exports._shadersnearFarScalar=czm_nearFarScalar,exports._shadersoctDecode=czm_octDecode,exports._shadersoneOverPi=czm_oneOverPi,exports._shadersoneOverTwoPi=czm_oneOverTwoPi,exports._shaderspackDepth=czm_packDepth,exports._shaderspassCesium3DTile=czm_passCesium3DTile,exports._shaderspassCesium3DTileClassification=czm_passCesium3DTileClassification,exports._shaderspassCesium3DTileClassificationIgnoreShow=czm_passCesium3DTileClassificationIgnoreShow,exports._shaderspassClassification=czm_passClassification,exports._shaderspassCompute=czm_passCompute,exports._shaderspassEnvironment=czm_passEnvironment,exports._shaderspassGlobe=czm_passGlobe,exports._shaderspassOpaque=czm_passOpaque,exports._shaderspassOverlay=czm_passOverlay,exports._shaderspassTerrainClassification=czm_passTerrainClassification,exports._shaderspassTranslucent=czm_passTranslucent,exports._shadersphong=czm_phong,exports._shaderspi=czm_pi;exports._shaderspiOverFour=czm_piOverFour,exports._shaderspiOverSix=czm_piOverSix,exports._shaderspiOverThree=czm_piOverThree,exports._shaderspiOverTwo=czm_piOverTwo,exports._shadersplaneDistance=czm_planeDistance,exports._shaderspointAlongRay=czm_pointAlongRay,exports._shadersradiansPerDegree=czm_radiansPerDegree,exports._shadersray=czm_ray,exports._shadersrayEllipsoidIntersectionInterval=czm_rayEllipsoidIntersectionInterval,exports._shadersraySegment=czm_raySegment,exports._shadersreadDepth=czm_readDepth,exports._shadersreadNonPerspective=czm_readNonPerspective,exports._shadersreverseLogDepth=czm_reverseLogDepth,exports._shaderssampleOctahedralProjection=czm_sampleOctahedralProjection,exports._shaderssaturation=czm_saturation,exports._shadersscaleToGeodeticSurface=czm_scaleToGeodeticSurface,exports._shaderssceneMode2D=czm_sceneMode2D,exports._shaderssceneMode3D=czm_sceneMode3D,exports._shaderssceneModeColumbusView=czm_sceneModeColumbusView,exports._shaderssceneModeMorphing=czm_sceneModeMorphing,exports._shadersshadowDepthCompare=czm_shadowDepthCompare,exports._shadersshadowParameters=czm_shadowParameters,exports._shadersshadowVisibility=czm_shadowVisibility,exports._shaderssignNotZero=czm_signNotZero,exports._shaderssolarRadius=czm_solarRadius,exports._shaderssphericalHarmonics=czm_sphericalHarmonics,exports._shaderstangentToEyeSpaceMatrix=czm_tangentToEyeSpaceMatrix,exports._shadersthreePiOver2=czm_threePiOver2,exports._shaderstransformPlane=czm_transformPlane,exports._shaderstranslateRelativeToEye=czm_translateRelativeToEye,exports._shaderstranslucentPhong=czm_translucentPhong,exports._shaderstranspose=czm_transpose,exports._shaderstwoPi=czm_twoPi,exports._shadersunpackDepth=czm_unpackDepth,exports._shadersunpackFloat=czm_unpackFloat,exports._shadersvertexLogDepth=czm_vertexLogDepth,exports._shaderswebMercatorMaxLatitude=czm_webMercatorMaxLatitude,exports._shaderswindowToEyeCoordinates=czm_windowToEyeCoordinates,exports._shaderswriteDepthClamp=czm_writeDepthClamp,exports._shaderswriteLogDepth=czm_writeLogDepth,exports._shaderswriteNonPerspective=czm_writeNonPerspective,exports.addBuffer=addBuffer,exports.addDefaults=addDefaults,exports.addExtensionsRequired=addExtensionsRequired,exports.addExtensionsUsed=addExtensionsUsed,exports.addPipelineExtras=addPipelineExtras,exports.addToArray=addToArray,exports.appendForwardSlash=appendForwardSlash,exports.arrayFill=arrayFill,exports.arrayRemoveDuplicates=arrayRemoveDuplicates,exports.arraySlice=arraySlice,exports.barycentricCoordinates=barycentricCoordinates,exports.binarySearch=binarySearch,exports.bitmap_sdf=calcSDF,exports.buildModuleUrl=buildModuleUrl,exports.cancelAnimationFrame=cancelAnimationFramePolyfill,exports.clone=clone$1,exports.combine=combine$2,exports.computeFlyToLocationForRectangle=computeFlyToLocationForRectangle,exports.createBillboardPointCallback=createBillboardPointCallback,exports.createCommand=createCommand,exports.createDefaultImageryProviderViewModels=createDefaultImageryProviderViewModels,exports.createDefaultTerrainProviderViewModels=createDefaultTerrainProviderViewModels,exports.createElevationBandMaterial=createElevationBandMaterial,exports.createGuid=createGuid,exports.createMaterialPropertyDescriptor=createMaterialPropertyDescriptor,exports.createOsmBuildings=createOsmBuildings,exports.createPropertyDescriptor=createPropertyDescriptor,exports.createRawPropertyDescriptor=createRawPropertyDescriptor,exports.createTangentSpaceDebugPrimitive=createTangentSpaceDebugPrimitive,exports.createTaskProcessorWorker=createTaskProcessorWorker,exports.createUniform=createUniform,exports.createUniformArray=createUniformArray,exports.createWorldImagery=createWorldImagery,exports.createWorldTerrain=createWorldTerrain,exports.decodeGoogleEarthEnterpriseData=decodeGoogleEarthEnterpriseData,exports.defaultValue=defaultValue,exports.defined=defined,exports.deprecationWarning=deprecationWarning,exports.destroyObject=destroyObject,exports.earcut_2_2_1=earcut,exports.exportKml=exportKml,exports.findAccessorMinMax=findAccessorMinMax,exports.formatError=formatError,exports.freezeRenderState=freezeRenderState,exports.getAbsoluteUri=getAbsoluteUri,exports.getAccessorByteStride=getAccessorByteStride,exports.getBaseUri=getBaseUri,exports.getBinaryAccessor=getBinaryAccessor,exports.getClipAndStyleCode=getClipAndStyleCode,exports.getClippingFunction=getClippingFunction,exports.getComponentReader=getComponentReader,exports.getElement=getElement,exports.getExtensionFromUri=getExtensionFromUri,exports.getFilenameFromUri=getFilenameFromUri,exports.getImagePixels=getImagePixels,exports.getJsonFromTypedArray=getJsonFromTypedArray,exports.getMagic=getMagic,exports.getStringFromTypedArray=getStringFromTypedArray,exports.getTimestamp=getTimestamp$1,exports.graphemesplitter=GraphemeSplitter,exports.hasExtension=hasExtension,exports.heightReferenceOnEntityPropertyChanged=heightReferenceOnEntityPropertyChanged,exports.isBitSet=isBitSet,exports.isBlobUri=isBlobUri,exports.isCrossOriginUrl=isCrossOriginUrl,exports.isDataUri=isDataUri,exports.isLeapYear=isLeapYear,exports.jsep=jsep,exports.kdbush=kdbush,exports.knockout=knockout,exports.knockout_3_5_1=knockout,exports.knockout_es5=knockout_es5,exports.loadAndExecuteScript=loadAndExecuteScript,exports.loadCRN=loadCRN,exports.loadCubeMap=loadCubeMap,exports.loadImageFromTypedArray=loadImageFromTypedArray,exports.loadKTX=loadKTX,exports.measureText=measureText,exports.mergeSort=mergeSort,exports.mersenne_twister=MersenneTwister,exports.modernizeShader=modernizeShader,exports.moveTechniqueRenderStates=moveTechniqueRenderStates,exports.moveTechniquesToExtension=moveTechniquesToExtension,exports.numberOfComponentsForType=numberOfComponentsForType,exports.objectToQuery=objectToQuery,exports.oneTimeWarning=oneTimeWarning,exports.parseGlb=parseGlb,exports.parseResponseHeaders=parseResponseHeaders,exports.pointInsideTriangle=pointInsideTriangle,exports.processModelMaterialsCommon=processModelMaterialsCommon,exports.processPbrMaterials=processPbrMaterials,exports.protobuf_minimal=protobuf,exports.purify=purify,exports.queryToObject=queryToObject,exports.quickselect=quickselect,exports.rbush=RBush,exports.readAccessorPacked=readAccessorPacked,exports.removeExtensionsRequired=removeExtensionsRequired,exports.removeExtensionsUsed=removeExtensionsUsed,exports.removePipelineExtras=removePipelineExtras,exports.removeUnusedElements=removeUnusedElements,exports.requestAnimationFrame=requestAnimationFramePolyFill,exports.sampleTerrain=sampleTerrain,exports.sampleTerrainMostDetailed=sampleTerrainMostDetailed,exports.scaleToGeodeticSurface=scaleToGeodeticSurface,exports.sprintf=sprintf,exports.subdivideArray=subdivideArray,exports.subscribeAndEvaluate=subscribeAndEvaluate,exports.topojson=topojson,exports.updateAccessorComponentTypes=updateAccessorComponentTypes,exports.updateVersion=updateVersion,exports.viewerCesium3DTilesInspectorMixin=viewerCesium3DTilesInspectorMixin,exports.viewerCesiumInspectorMixin=viewerCesiumInspectorMixin,exports.viewerDragDropMixin=viewerDragDropMixin,exports.viewerPerformanceWatchdogMixin=viewerPerformanceWatchdogMixin,exports.webGLConstantToGlslType=webGLConstantToGlslType,exports.when=when,exports.wrapFunction=wrapFunction,exports.writeTextToCanvas=writeTextToCanvas,exports.zip=zip,Object.defineProperty(exports,"__esModule",{value:!0})}); diff --git a/public/lib/Cesium/README.md b/public/lib/Cesium/README.md new file mode 100644 index 0000000..3fd5009 --- /dev/null +++ b/public/lib/Cesium/README.md @@ -0,0 +1,16 @@ +#Cesium web三维gis地图框架 + +版本:具体版本号请参考F12浏览器控制台打印值 + +官方地址:http://cesiumjs.com/ +github地址:https://github.com/CesiumGS/cesium + + + +介绍: + Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包, + 方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。 + +目录说明: + Cesium 官方压缩版包 + CesiumUnminified 官方未压缩版包,可以进行调试 \ No newline at end of file diff --git a/public/lib/Cesium/ThirdParty/Workers/deflate.js b/public/lib/Cesium/ThirdParty/Workers/deflate.js new file mode 100644 index 0000000..613e4eb --- /dev/null +++ b/public/lib/Cesium/ThirdParty/Workers/deflate.js @@ -0,0 +1 @@ +!function(e){var h=15,dt=256,p=573,st=256,lt=-2,ct=-5,n=[0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29];function ht(){var c=this;function u(t,e,n){for(var a,i,r=[],_=0,o=1;o<=h;o++)r[o]=_=_+n[o-1]<<1;for(a=0;a<=e;a++)0!==(i=t[2*a+1])&&(t[2*a]=function(t,e){for(var n=0;n|=1&t,t>>>=1,n<<=1,0<--e;);return n>>>1}(r[i]++,i))}c.build_tree=function(t){var e,n,a,i=c.dyn_tree,r=c.stat_desc.static_tree,_=c.stat_desc.elems,o=-1;for(t.heap_len=0,t.heap_max=p,e=0;e<_;e++)0!==i[2*e]?(t.heap[++t.heap_len]=o=e,t.depth[e]=0):i[2*e+1]=0;for(;t.heap_len<2;)i[2*(a=t.heap[++t.heap_len]=o<2?++o:0)]=1,t.depth[a]=0,t.opt_len--,r&&(t.static_len-=r[2*a+1]);for(c.max_code=o,e=Math.floor(t.heap_len/2);1<=e;e--)t.pqdownheap(i,e);for(a=_;e=t.heap[1],t.heap[1]=t.heap[t.heap_len--],t.pqdownheap(i,1),n=t.heap[1],t.heap[--t.heap_max]=e,t.heap[--t.heap_max]=n,i[2*a]=i[2*e]+i[2*n],t.depth[a]=Math.max(t.depth[e],t.depth[n])+1,i[2*e+1]=i[2*n+1]=a,t.heap[1]=a++,t.pqdownheap(i,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t){for(var e,n,a,i,r,_=c.dyn_tree,o=c.stat_desc.static_tree,u=c.stat_desc.extra_bits,f=c.stat_desc.extra_base,d=c.stat_desc.max_length,s=0,l=0;l<=h;l++)t.bl_count[l]=0;for(_[2*t.heap[t.heap_max]+1]=0,e=t.heap_max+1;e<p;e++)d<(l=_[2*_[2*(n=t.heap[e])+1]+1]+1)&&(l=d,s++),_[2*n+1]=l,n>c.max_code||(t.bl_count[l]++,i=0,f<=n&&(i=u[n-f]),r=_[2*n],t.opt_len+=r*(l+i),o&&(t.static_len+=r*(o[2*n+1]+i)));if(0!==s){do{for(l=d-1;0===t.bl_count[l];)l--}while(t.bl_count[l]--,t.bl_count[l+1]+=2,t.bl_count[d]--,0<(s-=2));for(l=d;0!==l;l--)for(n=t.bl_count[l];0!==n;)(a=t.heap[--e])>c.max_code||(_[2*a+1]!=l&&(t.opt_len+=(l-_[2*a+1])*_[2*a],_[2*a+1]=l),n--)}}(t),u(i,c.max_code,t.bl_count)}}function pt(t,e,n,a,i){var r=this;r.static_tree=t,r.extra_bits=e,r.extra_base=n,r.elems=a,r.max_length=i}ht._length_code=[0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28],ht.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],ht.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],ht.d_code=function(t){return t<256?n[t]:n[256+(t>>>7)]},ht.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ht.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ht.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ht.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],pt.static_ltree=[12,8,140,8,76,8,204,8,44,8,172,8,108,8,236,8,28,8,156,8,92,8,220,8,60,8,188,8,124,8,252,8,2,8,130,8,66,8,194,8,34,8,162,8,98,8,226,8,18,8,146,8,82,8,210,8,50,8,178,8,114,8,242,8,10,8,138,8,74,8,202,8,42,8,170,8,106,8,234,8,26,8,154,8,90,8,218,8,58,8,186,8,122,8,250,8,6,8,134,8,70,8,198,8,38,8,166,8,102,8,230,8,22,8,150,8,86,8,214,8,54,8,182,8,118,8,246,8,14,8,142,8,78,8,206,8,46,8,174,8,110,8,238,8,30,8,158,8,94,8,222,8,62,8,190,8,126,8,254,8,1,8,129,8,65,8,193,8,33,8,161,8,97,8,225,8,17,8,145,8,81,8,209,8,49,8,177,8,113,8,241,8,9,8,137,8,73,8,201,8,41,8,169,8,105,8,233,8,25,8,153,8,89,8,217,8,57,8,185,8,121,8,249,8,5,8,133,8,69,8,197,8,37,8,165,8,101,8,229,8,21,8,149,8,85,8,213,8,53,8,181,8,117,8,245,8,13,8,141,8,77,8,205,8,45,8,173,8,109,8,237,8,29,8,157,8,93,8,221,8,61,8,189,8,125,8,253,8,19,9,275,9,147,9,403,9,83,9,339,9,211,9,467,9,51,9,307,9,179,9,435,9,115,9,371,9,243,9,499,9,11,9,267,9,139,9,395,9,75,9,331,9,203,9,459,9,43,9,299,9,171,9,427,9,107,9,363,9,235,9,491,9,27,9,283,9,155,9,411,9,91,9,347,9,219,9,475,9,59,9,315,9,187,9,443,9,123,9,379,9,251,9,507,9,7,9,263,9,135,9,391,9,71,9,327,9,199,9,455,9,39,9,295,9,167,9,423,9,103,9,359,9,231,9,487,9,23,9,279,9,151,9,407,9,87,9,343,9,215,9,471,9,55,9,311,9,183,9,439,9,119,9,375,9,247,9,503,9,15,9,271,9,143,9,399,9,79,9,335,9,207,9,463,9,47,9,303,9,175,9,431,9,111,9,367,9,239,9,495,9,31,9,287,9,159,9,415,9,95,9,351,9,223,9,479,9,63,9,319,9,191,9,447,9,127,9,383,9,255,9,511,9,0,7,64,7,32,7,96,7,16,7,80,7,48,7,112,7,8,7,72,7,40,7,104,7,24,7,88,7,56,7,120,7,4,7,68,7,36,7,100,7,20,7,84,7,52,7,116,7,3,8,131,8,67,8,195,8,35,8,163,8,99,8,227,8],pt.static_dtree=[0,5,16,5,8,5,24,5,4,5,20,5,12,5,28,5,2,5,18,5,10,5,26,5,6,5,22,5,14,5,30,5,1,5,17,5,9,5,25,5,5,5,21,5,13,5,29,5,3,5,19,5,11,5,27,5,7,5,23,5],pt.static_l_desc=new pt(pt.static_ltree,ht.extra_lbits,257,286,h),pt.static_d_desc=new pt(pt.static_dtree,ht.extra_dbits,0,30,h),pt.static_bl_desc=new pt(null,ht.extra_blbits,0,19,7);function t(t,e,n,a,i){var r=this;r.good_length=t,r.max_lazy=e,r.nice_length=n,r.max_chain=a,r.func=i}var a,xt=[new t(0,0,0,0,0),new t(4,4,8,4,1),new t(4,5,16,8,1),new t(4,6,32,32,1),new t(4,4,16,16,2),new t(8,16,32,32,2),new t(8,16,128,128,2),new t(8,32,128,256,2),new t(32,128,258,1024,2),new t(32,258,258,4096,2)],vt=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],bt=113,gt=666,wt=258,mt=262;function yt(t,e,n,a){var i=t[2*e],t=t[2*n];return i<t||i==t&&a[e]<=a[n]}function i(){var o,u,f,d,l,s,c,h,i,p,x,v,b,_,g,w,m,y,M,A,U,E,k,z,q,D,I,P,S,L,j,B,C,F,G,H,J,r,K,a,N,O=this,Q=new ht,R=new ht,T=new ht;function V(){for(var t=0;t<286;t++)j[2*t]=0;for(t=0;t<30;t++)B[2*t]=0;for(t=0;t<19;t++)C[2*t]=0;j[512]=1,O.opt_len=O.static_len=0,H=r=0}function W(t,e){var n,a,i=-1,r=t[1],_=0,o=7,u=4;for(0===r&&(o=138,u=3),t[2*(e+1)+1]=65535,n=0;n<=e;n++)a=r,r=t[2*(n+1)+1],++_<o&&a==r||(_<u?C[2*a]+=_:0!==a?(a!=i&&C[2*a]++,C[32]++):_<=10?C[34]++:C[36]++,i=a,u=(_=0)===r?(o=138,3):a==r?(o=6,3):(o=7,4))}function X(t){O.pending_buf[O.pending++]=t}function Y(t){X(255&t),X(t>>>8&255)}function Z(t,e){var n=e;16-n<N?(Y(a|=(e=t)<<N&65535),a=e>>>16-N,N+=n-16):(a|=t<<N&65535,N+=n)}function $(t,e){t*=2;Z(65535&e[t],65535&e[1+t])}function tt(t,e){var n,a,i=-1,r=t[1],_=0,o=7,u=4;for(0===r&&(o=138,u=3),n=0;n<=e;n++)if(a=r,r=t[2*(n+1)+1],!(++_<o&&a==r)){if(_<u)for(;$(a,C),0!=--_;);else 0!==a?(a!=i&&($(a,C),_--),$(16,C),Z(_-3,2)):_<=10?($(17,C),Z(_-3,3)):($(18,C),Z(_-11,7));i=a,u=(_=0)===r?(o=138,3):a==r?(o=6,3):(o=7,4)}}function et(){16==N?(Y(a),N=a=0):8<=N&&(X(255&a),a>>>=8,N-=8)}function nt(t,e){var n,a;if(O.pending_buf[J+2*H]=t>>>8&255,O.pending_buf[J+2*H+1]=255&t,O.pending_buf[F+H]=255&e,H++,0===t?j[2*e]++:(r++,t--,j[2*(ht._length_code[e]+dt+1)]++,B[2*ht.d_code(t)]++),0==(8191&H)&&2<I){for(n=8*H,t=U-m,a=0;a<30;a++)n+=B[2*a]*(5+ht.extra_dbits[a]);if(n>>>=3,r<Math.floor(H/2)&&n<Math.floor(t/2))return!0}return H==G-1}function at(t,e){var n,a,i,r,_=0;if(0!==H)for(;n=O.pending_buf[J+2*_]<<8&65280|255&O.pending_buf[J+2*_+1],a=255&O.pending_buf[F+_],_++,0==n?$(a,t):($((i=ht._length_code[a])+dt+1,t),0!==(r=ht.extra_lbits[i])&&Z(a-=ht.base_length[i],r),$(i=ht.d_code(--n),e),0!==(r=ht.extra_dbits[i])&&Z(n-=ht.base_dist[i],r)),_<H;);$(st,t),K=t[513]}function it(){8<N?Y(a):0<N&&X(255&a),N=a=0}function rt(t,e,n){Z(0+(n?1:0),3),n=t,t=e,e=!0,it(),K=8,e&&(Y(t),Y(~t)),O.pending_buf.set(h.subarray(n,n+t),O.pending),O.pending+=t}function e(t,e,n){var a,i,r=0;0<I?(Q.build_tree(O),R.build_tree(O),r=function(){var t;for(W(j,Q.max_code),W(B,R.max_code),T.build_tree(O),t=18;3<=t&&0===C[2*ht.bl_order[t]+1];t--);return O.opt_len+=3*(t+1)+5+5+4,t}(),a=O.opt_len+3+7>>>3,(i=O.static_len+3+7>>>3)<=a&&(a=i)):a=i=e+5,e+4<=a&&-1!=t?rt(t,e,n):i==a?(Z(2+(n?1:0),3),at(pt.static_ltree,pt.static_dtree)):(Z(4+(n?1:0),3),function(t,e,n){var a;for(Z(t-257,5),Z(e-1,5),Z(n-4,4),a=0;a<n;a++)Z(C[2*ht.bl_order[a]+1],3);tt(j,t-1),tt(B,e-1)}(Q.max_code+1,R.max_code+1,r+1),at(j,B)),V(),n&&it()}function _t(t){e(0<=m?m:-1,U-m,t),m=U,o.flush_pending()}function ot(){var t,e,n,a;do{if(0===(a=i-k-U)&&0===U&&0===k)a=l;else if(-1==a)a--;else if(l+l-mt<=U){for(h.set(h.subarray(l,l+l),0),E-=l,U-=l,m-=l,t=b,n=t;e=65535&x[--n],x[n]=l<=e?e-l:0,0!=--t;);for(t=l,n=t;e=65535&p[--n],p[n]=l<=e?e-l:0,0!=--t;);a+=l}if(0===o.avail_in)return}while(t=o.read_buf(h,U+k,a),3<=(k+=t)&&(v=((v=255&h[U])<<w^255&h[U+1])&g),k<mt&&0!==o.avail_in)}function ut(t){var e,n,a=q,i=U,r=z,_=l-mt<U?U-(l-mt):0,o=L,u=c,f=U+wt,d=h[i+r-1],s=h[i+r];S<=z&&(a>>=2),k<o&&(o=k);do{if(h[(e=t)+r]==s&&h[e+r-1]==d&&h[e]==h[i]&&h[++e]==h[i+1]){for(i+=2,e++;h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&h[++i]==h[++e]&&i<f;);if(n=wt-(f-i),i=f-wt,r<n){if(E=t,o<=(r=n))break;d=h[i+r-1],s=h[i+r]}}}while((t=65535&p[t&u])>_&&0!=--a);return r<=k?r:k}function ft(t){return t.total_in=t.total_out=0,t.msg=null,O.pending=0,O.pending_out=0,u=bt,d=0,Q.dyn_tree=j,Q.stat_desc=pt.static_l_desc,R.dyn_tree=B,R.stat_desc=pt.static_d_desc,T.dyn_tree=C,T.stat_desc=pt.static_bl_desc,N=a=0,K=8,V(),function(){var t;for(i=2*l,t=x[b-1]=0;t<b-1;t++)x[t]=0;D=xt[I].max_lazy,S=xt[I].good_length,L=xt[I].nice_length,q=xt[I].max_chain,y=z=2,v=A=k=m=U=0}(),0}O.depth=[],O.bl_count=[],O.heap=[],j=[],B=[],C=[],O.pqdownheap=function(t,e){for(var n=O.heap,a=n[e],i=e<<1;i<=O.heap_len&&(i<O.heap_len&&yt(t,n[i+1],n[i],O.depth)&&i++,!yt(t,a,n[i],O.depth));)n[e]=n[i],e=i,i<<=1;n[e]=a},O.deflateInit=function(t,e,n,a,i,r){return a=a||8,i=i||8,r=r||0,t.msg=null,-1==e&&(e=6),i<1||9<i||8!=a||n<9||15<n||e<0||9<e||r<0||2<r?lt:(t.dstate=O,c=(l=1<<(s=n))-1,g=(b=1<<(_=i+7))-1,w=Math.floor((_+3-1)/3),h=new Uint8Array(2*l),p=[],x=[],G=1<<i+6,O.pending_buf=new Uint8Array(4*G),f=4*G,J=Math.floor(G/2),F=3*G,I=e,P=r,ft(t))},O.deflateEnd=function(){return 42!=u&&u!=bt&&u!=gt?lt:(O.pending_buf=null,h=p=x=null,O.dstate=null,u==bt?-3:0)},O.deflateParams=function(t,e,n){var a=0;return(e=-1==e?6:e)<0||9<e||n<0||2<n?lt:(xt[I].func!=xt[e].func&&0!==t.total_in&&(a=t.deflate(1)),I!=e&&(D=xt[I=e].max_lazy,S=xt[I].good_length,L=xt[I].nice_length,q=xt[I].max_chain),P=n,a)},O.deflateSetDictionary=function(t,e,n){var a,i=n,r=0;if(!e||42!=u)return lt;if(i<3)return 0;for(l-mt<i&&(r=n-(i=l-mt)),h.set(e.subarray(r,r+i),0),m=U=i,v=((v=255&h[0])<<w^255&h[1])&g,a=0;a<=i-3;a++)v=(v<<w^255&h[a+2])&g,p[a&c]=x[v],x[v]=a;return 0},O.deflate=function(t,e){var n,a,i,r,_;if(4<e||e<0)return lt;if(!t.next_out||!t.next_in&&0!==t.avail_in||u==gt&&4!=e)return t.msg=vt[4],lt;if(0===t.avail_out)return t.msg=vt[7],ct;if(o=t,i=d,d=e,42==u&&(_=8+(s-8<<4)<<8,_|=(a=3<(a=(I-1&255)>>1)?3:a)<<6,0!==U&&(_|=32),u=bt,X((_=_+=31-_%31)>>8&255),X(255&_)),0!==O.pending){if(o.flush_pending(),0===o.avail_out)return d=-1,0}else if(0===o.avail_in&&e<=i&&4!=e)return o.msg=vt[7],ct;if(u==gt&&0!==o.avail_in)return t.msg=vt[7],ct;if(0!==o.avail_in||0!==k||0!=e&&u!=gt){switch(r=-1,xt[I].func){case 0:r=function(t){var e,n=65535;for(f-5<n&&(n=f-5);;){if(k<=1){if(ot(),0===k&&0==t)return 0;if(0===k)break}if(U+=k,k=0,e=m+n,(0===U||e<=U)&&(k=U-e,U=e,_t(!1),0===o.avail_out))return 0;if(l-mt<=U-m&&(_t(!1),0===o.avail_out))return 0}return _t(4==t),0===o.avail_out?4==t?2:0:4==t?3:1}(e);break;case 1:r=function(t){for(var e,n=0;;){if(k<mt){if(ot(),k<mt&&0==t)return 0;if(0===k)break}if(3<=k&&(v=(v<<w^255&h[U+2])&g,n=65535&x[v],p[U&c]=x[v],x[v]=U),3<=(y=0!==n&&(U-n&65535)<=l-mt&&2!=P?ut(n):y))if(e=nt(U-E,y-3),k-=y,y<=D&&3<=k){for(y--;v=(v<<w^255&h[++U+2])&g,n=65535&x[v],p[U&c]=x[v],x[v]=U,0!=--y;);U++}else U+=y,y=0,v=((v=255&h[U])<<w^255&h[U+1])&g;else e=nt(0,255&h[U]),k--,U++;if(e&&(_t(!1),0===o.avail_out))return 0}return _t(4==t),0===o.avail_out?4==t?2:0:4==t?3:1}(e);break;case 2:r=function(t){for(var e,n,a=0;;){if(k<mt){if(ot(),k<mt&&0==t)return 0;if(0===k)break}if(3<=k&&(v=(v<<w^255&h[U+2])&g,a=65535&x[v],p[U&c]=x[v],x[v]=U),z=y,M=E,y=2,0!==a&&z<D&&(U-a&65535)<=l-mt&&(y=2!=P?ut(a):y)<=5&&(1==P||3==y&&4096<U-E)&&(y=2),3<=z&&y<=z){for(n=U+k-3,e=nt(U-1-M,z-3),k-=z-1,z-=2;++U<=n&&(v=(v<<w^255&h[U+2])&g,a=65535&x[v],p[U&c]=x[v],x[v]=U),0!=--z;);if(A=0,y=2,U++,e&&(_t(!1),0===o.avail_out))return 0}else if(0!==A){if((e=nt(0,255&h[U-1]))&&_t(!1),U++,k--,0===o.avail_out)return 0}else A=1,U++,k--}return 0!==A&&(e=nt(0,255&h[U-1]),A=0),_t(4==t),0===o.avail_out?4==t?2:0:4==t?3:1}(e)}if(2!=r&&3!=r||(u=gt),0==r||2==r)return 0===o.avail_out&&(d=-1),0;if(1==r){if(1==e)Z(2,3),$(st,pt.static_ltree),et(),1+K+10-N<9&&(Z(2,3),$(st,pt.static_ltree),et()),K=7;else if(rt(0,0,!1),3==e)for(n=0;n<b;n++)x[n]=0;if(o.flush_pending(),0===o.avail_out)return d=-1,0}}return 4!=e?0:1}}function r(){var t=this;t.next_in_index=0,t.next_out_index=0,t.avail_in=0,t.total_in=0,t.avail_out=0,t.total_out=0}function _(t){var o=new r,u=new Uint8Array(512);void 0===t&&(t=-1),o.deflateInit(t),o.next_out=u,this.append=function(t,e){var n,a=[],i=0,r=0,_=0;if(t.length){o.next_in_index=0,o.next_in=t,o.avail_in=t.length;do{if(o.next_out_index=0,o.avail_out=512,0!=o.deflate(0))throw"deflating: "+o.msg}while(o.next_out_index&&(512==o.next_out_index?a.push(new Uint8Array(u)):a.push(new Uint8Array(u.subarray(0,o.next_out_index)))),_+=o.next_out_index,e&&0<o.next_in_index&&o.next_in_index!=i&&(e(o.next_in_index),i=o.next_in_index),0<o.avail_in||0===o.avail_out);return n=new Uint8Array(_),a.forEach(function(t){n.set(t,r),r+=t.length}),n}},this.flush=function(){var t,e,n=[],a=0,i=0;do{if(o.next_out_index=0,o.avail_out=512,1!=(t=o.deflate(4))&&0!=t)throw"deflating: "+o.msg}while(0<512-o.avail_out&&n.push(new Uint8Array(u.subarray(0,o.next_out_index))),i+=o.next_out_index,0<o.avail_in||0===o.avail_out);return o.deflateEnd(),e=new Uint8Array(i),n.forEach(function(t){e.set(t,a),a+=t.length}),e}}r.prototype={deflateInit:function(t,e){return this.dstate=new i,e=e||h,this.dstate.deflateInit(this,t,e)},deflate:function(t){return this.dstate?this.dstate.deflate(this,t):lt},deflateEnd:function(){if(!this.dstate)return lt;var t=this.dstate.deflateEnd();return this.dstate=null,t},deflateParams:function(t,e){return this.dstate?this.dstate.deflateParams(this,t,e):lt},deflateSetDictionary:function(t,e){return this.dstate?this.dstate.deflateSetDictionary(this,t,e):lt},read_buf:function(t,e,n){var a=this,i=a.avail_in;return 0===(i=n<i?n:i)?0:(a.avail_in-=i,t.set(a.next_in.subarray(a.next_in_index,a.next_in_index+i),e),a.next_in_index+=i,a.total_in+=i,i)},flush_pending:function(){var t=this,e=t.dstate.pending;0!==(e=e>t.avail_out?t.avail_out:e)&&(t.next_out.set(t.dstate.pending_buf.subarray(t.dstate.pending_out,t.dstate.pending_out+e),t.next_out_index),t.next_out_index+=e,t.dstate.pending_out+=e,t.total_out+=e,t.avail_out-=e,t.dstate.pending-=e,0===t.dstate.pending&&(t.dstate.pending_out=0))}},e.zip?e.zip.Deflater=_:(a=new _,e.addEventListener("message",function(t){t=t.data;t.init&&(a=new _(t.level),e.postMessage({oninit:!0})),t.append&&e.postMessage({onappend:!0,data:a.append(t.data,function(t){e.postMessage({progress:!0,current:t})})}),t.flush&&e.postMessage({onflush:!0,data:a.flush()})},!1))}(this); \ No newline at end of file diff --git a/public/lib/Cesium/ThirdParty/Workers/draco_decoder.js b/public/lib/Cesium/ThirdParty/Workers/draco_decoder.js new file mode 100644 index 0000000..52d5c7d --- /dev/null +++ b/public/lib/Cesium/ThirdParty/Workers/draco_decoder.js @@ -0,0 +1,33 @@ +var DracoDecoderModule = function(DracoDecoderModule) { + DracoDecoderModule = DracoDecoderModule || {}; + +var Module=typeof DracoDecoderModule!=="undefined"?DracoDecoderModule:{};var isRuntimeInitialized=false;var isModuleParsed=false;Module["onRuntimeInitialized"]=(function(){isRuntimeInitialized=true;if(isModuleParsed){if(typeof Module["onModuleLoaded"]==="function"){Module["onModuleLoaded"](Module)}}});Module["onModuleParsed"]=(function(){isModuleParsed=true;if(isRuntimeInitialized){if(typeof Module["onModuleLoaded"]==="function"){Module["onModuleLoaded"](Module)}}});function isVersionSupported(versionString){if(typeof versionString!=="string")return false;const version=versionString.split(".");if(version.length<2||version.length>3)return false;if(version[0]==1&&version[1]>=0&&version[1]<=3)return true;if(version[0]!=0||version[1]>10)return false;return true}Module["isVersionSupported"]=isVersionSupported;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{throw new Error("not compiled for this environment")}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);else if(returnType==="boolean")ret=Boolean(ret);if(stack!==0){stackRestore(stack)}return ret}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY<HEAP32[DYNAMICTOP_PTR>>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module["buffer"]=buffer}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPreMain(cb){__ATMAIN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["fround"]){var froundBuffer=new Float32Array(1);Math["fround"]=(function(x){froundBuffer[0]=x;return froundBuffer[0]})}Math.fround=Math["fround"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+17904;__ATINIT__.push();memoryInitializer="data:application/octet-stream;base64,8BIAADgTAAAYAAAAAAAAAMgSAABfEwAA8BIAAHwTAAAYAAAAAAAAAPASAAClEwAAQAAAAAAAAADIEgAAwRMAAPASAABVFAAAMAAAAAAAAADIEgAAdxQAAPASAACcFAAAMAAAAAAAAADwEgAAMSEAAFgAAAAAAAAA8BIAAMwUAACQAAAAAAAAAPASAAAlFQAAoAAAAAAAAADwEgAAeRUAALAAAAAAAAAA8BIAAK0VAADAAAAAAAAAAMgSAADYFQAA8BIAAPwVAADYAAAAAAAAAMgSAACaFgAA8BIAADgXAADwAAAAAAAAAPASAADQFwAAkAAAAAAAAADwEgAAWRgAAPAAAAAAAAAA8BIAAPMYAADwAAAAAAAAAPASAACFGQAA8AAAAAAAAADwEgAAKxoAAPAAAAAAAAAA8BIAAMYaAADwAAAAAAAAAPASAABcGwAAYAEAAAAAAADIEgAABxwAAPASAACyHAAAeAEAAAAAAADwEgAAVx0AAJAAAAAAAAAA8BIAAO0dAAB4AQAAAAAAAPASAACUHgAAeAEAAAAAAADwEgAAMx8AAHgBAAAAAAAA8BIAAOYfAAB4AQAAAAAAAPASAACOIAAAeAEAAAAAAADwEgAA8S0AAHAAAAAAAAAA8BIAAF0hAAD4AQAAAAAAAPASAADOIQAAoAAAAAAAAADwEgAAOiIAABgCAAAAAAAAyBIAAPAiAADwEgAApiMAADACAAAAAAAA8BIAAFYkAAD4AQAAAAAAAPASAAD3JAAAUAIAAAAAAADIEgAAuiUAAPASAAB9JgAAaAIAAAAAAADwEgAAOicAAPgBAAAAAAAA8BIAAOgnAACIAgAAAAAAAPASAABMKAAAoAAAAAAAAADwEgAAqygAAKgCAAAAAAAAyBIAAFQpAADwEgAA/SkAAMACAAAAAAAA8BIAAKAqAACIAgAAAAAAAPASAAA0KwAA4AIAAAAAAADIEgAA6isAAPASAACgLAAA+AIAAAAAAADwEgAAUC0AAIgCAAAAAAAA8BIAABwuAABwAAAAAAAAAPASAAC0LgAA2AMAAAAAAADwEgAAyi4AABgDAAAAAAAA8BIAALgxAACQAwAAAAAAAMgSAADrLgAA8BIAADMvAABgAwAAAAAAAMgSAAD9LwAAyBIAABcwAADwEgAAUjAAAGADAAAAAAAA8BIAAPswAABgAwAAAAAAAMgSAAAEMgAA8BIAADIyAACQAwAAAAAAAPASAACIMgAAkAMAAAAAAADwEgAA9TIAABgDAAAAAAAA8BIAANsyAABgAwAAAAAAAMgSAAAVMwAA8BIAAEg0AADYAwAAAAAAAPASAABqNAAA2AMAAAAAAADwEgAAkDQAABAEAAAAAAAAyBIAAJ40AADIEgAAsT4AAPASAAARPwAAMAQAAAAAAADwEgAAvj4AAEAEAAAAAAAAyBIAAN8+AADwEgAA7D4AACAEAAAAAAAA8BIAADM/AAAYBAAAAAAAAPASAABDPwAAWAQAAAAAAADwEgAAeD8AADAEAAAAAAAA8BIAAFQ/AAB4BAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAACAAAAAEAAAACAAAAAQAAAAEAAAABAAAAAAAAACAAAAADAAAABAAAAAIAAAACAAAAAgAAAAAAAAAwAAAABQAAAAYAAAABAAAAAwAAAAQAAAAFAAAAAwAAAAQAAAAGAAAAAQAAAAcAAAAFAAAAAAAAAEgAAAAHAAAACAAAAAEAAAADAAAABAAAAAUAAAADAAAABAAAAAYAAAAIAAAACQAAAAYAAAAAAAAAWAAAAAkAAAAKAAAAAgAAAAoAAAADAAAABAAAAAsAAAAMAAAABQAAAP////8AAAAAYAAAAAsAAAAMAAAAAQAAAA0AAAAOAAAABQAAAAMAAAAEAAAADwAAABAAAAARAAAABwAAAAEAAAAAAAAAcAAAAA0AAAAOAAAABgAAAAoAAAADAAAABAAAABIAAAAMAAAABwAAAAgAAAABAAAACAAAABMAAAAAAAAAkAAAAA8AAAAQAAAAAQAAAAkAAAABAAAACgAAABQAAAAVAAAACwAAAAwAAAAWAAAAAQAAAAAAAACAAAAADwAAABEAAAANAAAACQAAAA4AAAAKAAAAFAAAABUAAAALAAAADAAAABYAAAABAAAAAAAAAEABAAAPAAAAEgAAAA8AAAAJAAAAEAAAAAoAAAAUAAAAFQAAAAsAAAAMAAAAFgAAAAIAAAAAAAAAMAEAAA8AAAATAAAAEQAAAAkAAAASAAAACgAAABQAAAAVAAAACwAAAAwAAAAWAAAAAwAAAAAAAAAgAQAAFAAAABUAAAATAAAACQAAABQAAAAKAAAAFAAAABUAAAALAAAADAAAABcAAAAEAAAAAAAAABABAAAWAAAAFwAAABUAAAAJAAAAFgAAABcAAAAYAAAAGQAAAAsAAAAMAAAAGgAAAAUAAAAAAAAA8AAAAA8AAAAYAAAAAQAAAAkAAAABAAAACgAAABQAAAAVAAAACwAAAAwAAAAWAAAAAQAAAAAAAADgAAAAGQAAABoAAAAYAAAACQAAABkAAAAaAAAAGwAAABwAAAALAAAADAAAAB0AAAAGAAAAAAAAANgAAAAbAAAAHAAAAAEAAAAbAAAAAQAAAAAAAADIAAAAGwAAAB0AAAAeAAAAGwAAAAIAAAAAAAAAAAEAAB4AAAAfAAAAHAAAAAkAAAAdAAAAHgAAAB8AAAAgAAAACwAAAAwAAAAhAAAABwAAAAAAAADIAQAADwAAACAAAAAfAAAACQAAACAAAAAKAAAAFAAAABUAAAALAAAADAAAABYAAAAIAAAAAAAAALgBAAAPAAAAIQAAACEAAAAJAAAAIgAAAAoAAAAUAAAAFQAAAAsAAAAMAAAAFgAAAAkAAAAAAAAAqAEAACIAAAAjAAAAIwAAAAkAAAAkAAAACgAAABQAAAAVAAAACwAAAAwAAAAiAAAACgAAAAAAAACYAQAAJAAAACUAAAAlAAAACQAAACYAAAAnAAAAIwAAACQAAAALAAAADAAAACUAAAALAAAAAAAAAHgBAAAPAAAAJgAAAAEAAAAJAAAAAQAAAAoAAAAUAAAAFQAAAAsAAAAMAAAAFgAAAAEAAAAAAAAAaAEAACcAAAAoAAAAKAAAAAkAAAApAAAAKgAAACYAAAAnAAAACwAAAAwAAAAoAAAADAAAAAAAAABgAQAAKQAAACoAAAABAAAAKwAAAAEAAAAAAAAAUAEAACkAAAArAAAAKQAAACsAAAADAAAAAAAAAIgBAAAsAAAALQAAACwAAAAJAAAALQAAAC4AAAAqAAAAKwAAAAsAAAAMAAAALAAAAA0AAAAAAAAA2AEAAA0AAAAuAAAACQAAAAoAAAADAAAACgAAABIAAAAMAAAABwAAAAsAAAACAAAALwAAAC0AAAAAAAAAeAIAAC8AAAAwAAAAMAAAADEAAAAyAAAAMwAAAC4AAAAvAAAANAAAADUAAAAwAAAADgAAAAAAAADoAQAALwAAADEAAAA2AAAANwAAADgAAAA5AAAAMQAAADIAAAA6AAAAOwAAADMAAAAPAAAAAAAAAFgCAAAyAAAAMwAAADwAAAA3AAAAPQAAAD4AAAA0AAAANQAAADoAAAA7AAAANgAAABAAAAAAAAAAQAIAADQAAAA1AAAANwAAAD8AAAAEAAAAAAAAACACAAA2AAAANwAAAEAAAAA3AAAAQQAAAEIAAAA4AAAAOQAAADoAAAA7AAAAOgAAABEAAAAAAAAACAIAADgAAAA5AAAAOwAAAEMAAAAFAAAAAAAAAOgCAAA6AAAAOwAAAEQAAAAxAAAARQAAAEYAAAA8AAAAPQAAADQAAAA1AAAAPgAAABIAAAAAAAAA0AIAADwAAAA9AAAAPwAAAEcAAAAGAAAAAAAAALACAAA+AAAAPwAAAEgAAAAxAAAASQAAAEoAAABAAAAAQQAAADQAAAA1AAAAQgAAABMAAAAAAAAAmAIAAEAAAABBAAAAQwAAAEsAAAAHAAAAAAAAAAgDAABCAAAAQwAAAAwAAAAKAAAAAwAAAA0AAAASAAAADAAAAAcAAAAOAAAAAQAAAAgAAABEAAAATAAAAEUAAAAAAAAAGAMAAEQAAABFAAAATQAAAE4AAAABAAAATwAAAFAAAABRAAAAUgAAAFMAAABGAAAARwAAAAEAAAAAAAAAKAMAAEYAAABHAAAATQAAAFQAAABIAAAATwAAAFAAAABRAAAAVQAAAFYAAABJAAAASgAAAFcAAAAAAAAAOAMAAEgAAABJAAAASwAAAEwAAABNAAAATgAAAFgAAABZAAAAWgAAAFsAAAD/////AAAAAFADAABKAAAASwAAAE8AAABcAAAAAAAAAEgDAABMAAAATQAAAE4AAAD/////AAAAAHADAABPAAAAUAAAAFAAAABdAAAAAAAAAGgDAABRAAAAUgAAAFMAAAAAAAAAgAMAAFQAAABVAAAAUQAAAF4AAAAAAAAAmAMAAFYAAABXAAAAUgAAAFMAAABUAAAAVQAAAF8AAABgAAAAYQAAAGIAAAAAAAAAqAMAAFgAAABZAAAAVgAAAFcAAABYAAAAWQAAAGMAAABkAAAAZQAAAGYAAAAAAAAAAQAAAAMAAAAFAAAABwAAAAAAAAC4AwAARAAAAFoAAABNAAAATgAAAFoAAABPAAAAUAAAAFEAAABSAAAAUwAAAEYAAABHAAAAZwAAAAAAAADIAwAAWwAAAFwAAABbAAAAaAAAAAAAAADYAwAARAAAAF0AAABpAAAATgAAAAEAAABqAAAAUAAAAFEAAABSAAAAAAAAAOADAABEAAAAXgAAAGkAAABOAAAAXAAAAGsAAABQAAAAUQAAAFIAAAAAAAAA8AMAAEQAAABfAAAAaQAAAE4AAABdAAAAbAAAAFAAAABRAAAAUgAAAP//////////AAAAAAAEAABgAAAAYQAAAAgAAAADAAAA/////wAAAAAQBAAAYgAAAGMAAAAJAAAABAAAANQOAAAFAAAAAAAAAAAAAABtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAEAAAAOBBAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVA8AAAUAAAAAAAAAAAAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAQAAAA6EEAAAAEAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAr/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAUAAAAHAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB/AAAAgwAAAIkAAACLAAAAlQAAAJcAAACdAAAAowAAAKcAAACtAAAAswAAALUAAAC/AAAAwQAAAMUAAADHAAAA0wAAAAEAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAHkAAAB/AAAAgwAAAIkAAACLAAAAjwAAAJUAAACXAAAAnQAAAKMAAACnAAAAqQAAAK0AAACzAAAAtQAAALsAAAC/AAAAwQAAAMUAAADHAAAA0QAAAAAAAAAgBAAAZAAAAGUAAABmAAAAZwAAABMAAAABAAAAAQAAAAMAAAAAAAAASAQAAGQAAABoAAAAZgAAAGcAAAATAAAAAgAAAAIAAAAEAAAAAAAAAFgEAABpAAAAagAAAG4AAAAAAAAAaAQAAGkAAABrAAAAbgAAAE41ZHJhY28yOEF0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1FAE41ZHJhY28xOEF0dHJpYnV0ZVRyYW5zZm9ybUUATjVkcmFjbzMwQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtRQBONWRyYWNvMTdBdHRyaWJ1dGVzRGVjb2RlckUATjVkcmFjbzI2QXR0cmlidXRlc0RlY29kZXJJbnRlcmZhY2VFAEtkVHJlZUF0dHJpYnV0ZXNEZWNvZGVyOiBjb21wcmVzc2lvbiBsZXZlbCAlaSBub3Qgc3VwcG9ydGVkLgoATWV0aG9kIG5vdCBzdXBwb3J0ZWQuIAoAVmVyc2lvbiBub3Qgc3VwcG9ydGVkLiAKAE41ZHJhY28yM0tkVHJlZUF0dHJpYnV0ZXNEZWNvZGVyRQBONWRyYWNvMjZTZXF1ZW50aWFsQXR0cmlidXRlRGVjb2RlckUATjVkcmFjbzM3U2VxdWVudGlhbEF0dHJpYnV0ZURlY29kZXJzQ29udHJvbGxlckUATjVkcmFjbzI4UHJlZGljdGlvblNjaGVtZURlbHRhRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVFRQBONWRyYWNvMjNQcmVkaWN0aW9uU2NoZW1lRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVFRQBONWRyYWNvMzdQcmVkaWN0aW9uU2NoZW1lVHlwZWREZWNvZGVySW50ZXJmYWNlSWlpRUUATjVkcmFjbzMyUHJlZGljdGlvblNjaGVtZURlY29kZXJJbnRlcmZhY2VFAE41ZHJhY28yNVByZWRpY3Rpb25TY2hlbWVJbnRlcmZhY2VFAE41ZHJhY280OE1lc2hQcmVkaWN0aW9uU2NoZW1lR2VvbWV0cmljTm9ybWFsUHJlZGljdG9yQXJlYUlpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JCYXNlSWlOU18zN1ByZWRpY3Rpb25TY2hlbWVXcmFwRGVjb2RpbmdUcmFuc2Zvcm1JaWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzExQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDJNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbERlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMTFDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY28yN01lc2hQcmVkaWN0aW9uU2NoZW1lRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ0TWVzaFByZWRpY3Rpb25TY2hlbWVUZXhDb29yZHNQb3J0YWJsZURlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMTFDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY28zNk1lc2hQcmVkaWN0aW9uU2NoZW1lVGV4Q29vcmRzRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzU2TWVzaFByZWRpY3Rpb25TY2hlbWVDb25zdHJhaW5lZE11bHRpUGFyYWxsZWxvZ3JhbURlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMTFDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280NU1lc2hQcmVkaWN0aW9uU2NoZW1lTXVsdGlQYXJhbGxlbG9ncmFtRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQwTWVzaFByZWRpY3Rpb25TY2hlbWVQYXJhbGxlbG9ncmFtRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JBcmVhSWlOU18zN1ByZWRpY3Rpb25TY2hlbWVXcmFwRGVjb2RpbmdUcmFuc2Zvcm1JaWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzI0TWVzaEF0dHJpYnV0ZUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JCYXNlSWlOU18zN1ByZWRpY3Rpb25TY2hlbWVXcmFwRGVjb2RpbmdUcmFuc2Zvcm1JaWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzI0TWVzaEF0dHJpYnV0ZUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQyTWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxEZWNvZGVySWlOU18zN1ByZWRpY3Rpb25TY2hlbWVXcmFwRGVjb2RpbmdUcmFuc2Zvcm1JaWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzI0TWVzaEF0dHJpYnV0ZUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzI3TWVzaFByZWRpY3Rpb25TY2hlbWVEZWNvZGVySWlOU18zN1ByZWRpY3Rpb25TY2hlbWVXcmFwRGVjb2RpbmdUcmFuc2Zvcm1JaWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzI0TWVzaEF0dHJpYnV0ZUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ0TWVzaFByZWRpY3Rpb25TY2hlbWVUZXhDb29yZHNQb3J0YWJsZURlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMzZNZXNoUHJlZGljdGlvblNjaGVtZVRleENvb3Jkc0RlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNTZNZXNoUHJlZGljdGlvblNjaGVtZUNvbnN0cmFpbmVkTXVsdGlQYXJhbGxlbG9ncmFtRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18yNE1lc2hBdHRyaWJ1dGVDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280NU1lc2hQcmVkaWN0aW9uU2NoZW1lTXVsdGlQYXJhbGxlbG9ncmFtRGVjb2RlcklpTlNfMzdQcmVkaWN0aW9uU2NoZW1lV3JhcERlY29kaW5nVHJhbnNmb3JtSWlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18yNE1lc2hBdHRyaWJ1dGVDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280ME1lc2hQcmVkaWN0aW9uU2NoZW1lUGFyYWxsZWxvZ3JhbURlY29kZXJJaU5TXzM3UHJlZGljdGlvblNjaGVtZVdyYXBEZWNvZGluZ1RyYW5zZm9ybUlpaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMzNTZXF1ZW50aWFsSW50ZWdlckF0dHJpYnV0ZURlY29kZXJFAE41ZHJhY28yOFByZWRpY3Rpb25TY2hlbWVEZWx0YURlY29kZXJJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFRUUATjVkcmFjbzIzUHJlZGljdGlvblNjaGVtZURlY29kZXJJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JBcmVhSWlOU182MlByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uQ2Fub25pY2FsaXplZERlY29kaW5nVHJhbnNmb3JtSWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzExQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDhNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbFByZWRpY3RvckJhc2VJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMTFDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280Mk1lc2hQcmVkaWN0aW9uU2NoZW1lR2VvbWV0cmljTm9ybWFsRGVjb2RlcklpTlNfNjJQcmVkaWN0aW9uU2NoZW1lTm9ybWFsT2N0YWhlZHJvbkNhbm9uaWNhbGl6ZWREZWNvZGluZ1RyYW5zZm9ybUlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzI3TWVzaFByZWRpY3Rpb25TY2hlbWVEZWNvZGVySWlOU182MlByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uQ2Fub25pY2FsaXplZERlY29kaW5nVHJhbnNmb3JtSWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzExQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDhNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbFByZWRpY3RvckFyZWFJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDhNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbFByZWRpY3RvckJhc2VJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDJNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbERlY29kZXJJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMjdNZXNoUHJlZGljdGlvblNjaGVtZURlY29kZXJJaU5TXzYyUHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25DYW5vbmljYWxpemVkRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMjhQcmVkaWN0aW9uU2NoZW1lRGVsdGFEZWNvZGVySWlOU180OVByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uRGVjb2RpbmdUcmFuc2Zvcm1JaUVFRUUATjVkcmFjbzIzUHJlZGljdGlvblNjaGVtZURlY29kZXJJaU5TXzQ5UHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25EZWNvZGluZ1RyYW5zZm9ybUlpRUVFRQBONWRyYWNvNDhNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbFByZWRpY3RvckFyZWFJaU5TXzQ5UHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25EZWNvZGluZ1RyYW5zZm9ybUlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JCYXNlSWlOU180OVByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMTFDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280Mk1lc2hQcmVkaWN0aW9uU2NoZW1lR2VvbWV0cmljTm9ybWFsRGVjb2RlcklpTlNfNDlQcmVkaWN0aW9uU2NoZW1lTm9ybWFsT2N0YWhlZHJvbkRlY29kaW5nVHJhbnNmb3JtSWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzExQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMjdNZXNoUHJlZGljdGlvblNjaGVtZURlY29kZXJJaU5TXzQ5UHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25EZWNvZGluZ1RyYW5zZm9ybUlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18xMUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzQ4TWVzaFByZWRpY3Rpb25TY2hlbWVHZW9tZXRyaWNOb3JtYWxQcmVkaWN0b3JBcmVhSWlOU180OVByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvNDhNZXNoUHJlZGljdGlvblNjaGVtZUdlb21ldHJpY05vcm1hbFByZWRpY3RvckJhc2VJaU5TXzQ5UHJlZGljdGlvblNjaGVtZU5vcm1hbE9jdGFoZWRyb25EZWNvZGluZ1RyYW5zZm9ybUlpRUVOU18yNE1lc2hQcmVkaWN0aW9uU2NoZW1lRGF0YUlOU18yNE1lc2hBdHRyaWJ1dGVDb3JuZXJUYWJsZUVFRUVFAE41ZHJhY280Mk1lc2hQcmVkaWN0aW9uU2NoZW1lR2VvbWV0cmljTm9ybWFsRGVjb2RlcklpTlNfNDlQcmVkaWN0aW9uU2NoZW1lTm9ybWFsT2N0YWhlZHJvbkRlY29kaW5nVHJhbnNmb3JtSWlFRU5TXzI0TWVzaFByZWRpY3Rpb25TY2hlbWVEYXRhSU5TXzI0TWVzaEF0dHJpYnV0ZUNvcm5lclRhYmxlRUVFRUUATjVkcmFjbzI3TWVzaFByZWRpY3Rpb25TY2hlbWVEZWNvZGVySWlOU180OVByZWRpY3Rpb25TY2hlbWVOb3JtYWxPY3RhaGVkcm9uRGVjb2RpbmdUcmFuc2Zvcm1JaUVFTlNfMjRNZXNoUHJlZGljdGlvblNjaGVtZURhdGFJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVFRQBONWRyYWNvMzJTZXF1ZW50aWFsTm9ybWFsQXR0cmlidXRlRGVjb2RlckUATjVkcmFjbzM4U2VxdWVudGlhbFF1YW50aXphdGlvbkF0dHJpYnV0ZURlY29kZXJFAFVuc3VwcG9ydGVkIGVuY29kaW5nIG1ldGhvZC4ASW5wdXQgaXMgbm90IGEgbWVzaC4ASW5wdXQgaXMgbm90IGEgcG9pbnQgY2xvdWQuAHNraXBfYXR0cmlidXRlX3RyYW5zZm9ybQBONWRyYWNvMTFNZXNoRGVjb2RlckUATjVkcmFjbzIyTWVzaEVkZ2VCcmVha2VyRGVjb2RlckUATjVkcmFjbzI5Q29ybmVyVGFibGVUcmF2ZXJzYWxQcm9jZXNzb3JJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUUATjVkcmFjbzIyTWVzaFRyYXZlcnNhbFNlcXVlbmNlcklOU18yMEVkZ2VCcmVha2VyVHJhdmVyc2VySU5TXzI5Q29ybmVyVGFibGVUcmF2ZXJzYWxQcm9jZXNzb3JJTlNfMjRNZXNoQXR0cmlidXRlQ29ybmVyVGFibGVFRUVOU18zNk1lc2hBdHRyaWJ1dGVJbmRpY2VzRW5jb2RpbmdPYnNlcnZlcklTM19FRU5TXzE5RWRnZUJyZWFrZXJPYnNlcnZlckVFRUVFAE41ZHJhY28xNVBvaW50c1NlcXVlbmNlckUATjVkcmFjbzI5Q29ybmVyVGFibGVUcmF2ZXJzYWxQcm9jZXNzb3JJTlNfMTFDb3JuZXJUYWJsZUVFRQBONWRyYWNvMjJNZXNoVHJhdmVyc2FsU2VxdWVuY2VySU5TXzI1UHJlZGljdGlvbkRlZ3JlZVRyYXZlcnNlcklOU18yOUNvcm5lclRhYmxlVHJhdmVyc2FsUHJvY2Vzc29ySU5TXzExQ29ybmVyVGFibGVFRUVOU18zNk1lc2hBdHRyaWJ1dGVJbmRpY2VzRW5jb2RpbmdPYnNlcnZlcklTM19FRUVFRUUATjVkcmFjbzIyTWVzaFRyYXZlcnNhbFNlcXVlbmNlcklOU18yMEVkZ2VCcmVha2VyVHJhdmVyc2VySU5TXzI5Q29ybmVyVGFibGVUcmF2ZXJzYWxQcm9jZXNzb3JJTlNfMTFDb3JuZXJUYWJsZUVFRU5TXzM2TWVzaEF0dHJpYnV0ZUluZGljZXNFbmNvZGluZ09ic2VydmVySVMzX0VFTlNfMTlFZGdlQnJlYWtlck9ic2VydmVyRUVFRUUATjVkcmFjbzI2TWVzaEVkZ2VCcmVha2VyRGVjb2RlckltcGxJTlNfMzFNZXNoRWRnZUJyZWFrZXJUcmF2ZXJzYWxEZWNvZGVyRUVFAE41ZHJhY28zNU1lc2hFZGdlQnJlYWtlckRlY29kZXJJbXBsSW50ZXJmYWNlRQBONWRyYWNvMjZNZXNoRWRnZUJyZWFrZXJEZWNvZGVySW1wbElOU180MU1lc2hFZGdlQnJlYWtlclRyYXZlcnNhbFByZWRpY3RpdmVEZWNvZGVyRUVFAE41ZHJhY28yNk1lc2hFZGdlQnJlYWtlckRlY29kZXJJbXBsSU5TXzM4TWVzaEVkZ2VCcmVha2VyVHJhdmVyc2FsVmFsZW5jZURlY29kZXJFRUUATjVkcmFjbzE1TGluZWFyU2VxdWVuY2VyRQBONWRyYWNvMjFNZXNoU2VxdWVudGlhbERlY29kZXJFAE41ZHJhY28xN1BvaW50Q2xvdWREZWNvZGVyRQBGYWlsZWQgdG8gcGFyc2UgRHJhY28gaGVhZGVyLgBEUkFDTwBOb3QgYSBEcmFjbyBmaWxlLgBGYWlsZWQgdG8gZGVjb2RlIG1ldGFkYXRhLgBVc2luZyBpbmNvbXBhdGlibGUgZGVjb2RlciBmb3IgdGhlIGlucHV0IGdlb21ldHJ5LgBVbmtub3duIG1ham9yIHZlcnNpb24uAFVua25vd24gbWlub3IgdmVyc2lvbi4ARmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIGRlY29kZXIuAEZhaWxlZCB0byBkZWNvZGUgZ2VvbWV0cnkgZGF0YS4ARmFpbGVkIHRvIGRlY29kZSBwb2ludCBhdHRyaWJ1dGVzLgBONWRyYWNvMjNQb2ludENsb3VkS2RUcmVlRGVjb2RlckUATjVkcmFjbzI3UG9pbnRDbG91ZFNlcXVlbnRpYWxEZWNvZGVyRQBONWRyYWNvNE1lc2hFAE41ZHJhY28xMFBvaW50Q2xvdWRFAEZsb2F0UG9pbnRzVHJlZURlY29kZXI6IGNvbXByZXNzaW9uIGxldmVsICVpIG5vdCBzdXBwb3J0ZWQuCgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOADAxMjM0NTY3ODlBQkNERUYuAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAJWQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAFN0MTFsb2dpY19lcnJvcgBTdDEybGVuZ3RoX2Vycm9yAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___cxa_allocate_exception(size){return _malloc(size)}function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var key in EXCEPTIONS.infos){var ptr=+key;var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module["___cxa_can_catch"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___gxx_personality_v0(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module["_fflush"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){___syscall146.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){Module["abort"]()}var _llvm_ceil_f32=Math_ceil;var _llvm_floor_f64=Math_floor;function _llvm_trap(){abort("trap!")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output});function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,"base64")}catch(_){buf=new Buffer(s,"base64")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iii(index,a1,a2){try{return Module["dynCall_iii"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_iiiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_v(index){try{Module["dynCall_v"](index)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_vi(index,a1){try{Module["dynCall_vi"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_vii(index,a1,a2){try{Module["dynCall_vii"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viii(index,a1,a2,a3){try{Module["dynCall_viii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module["dynCall_viiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity,"byteLength":byteLength};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiiiii":invoke_iiiiiii,"invoke_v":invoke_v,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiii":invoke_viiiii,"invoke_viiiiii":invoke_viiiiii,"__ZSt18uncaught_exceptionv":__ZSt18uncaught_exceptionv,"___cxa_allocate_exception":___cxa_allocate_exception,"___cxa_find_matching_catch":___cxa_find_matching_catch,"___cxa_pure_virtual":___cxa_pure_virtual,"___cxa_throw":___cxa_throw,"___gxx_personality_v0":___gxx_personality_v0,"___resumeException":___resumeException,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall54":___syscall54,"___syscall6":___syscall6,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_llvm_ceil_f32":_llvm_ceil_f32,"_llvm_floor_f64":_llvm_floor_f64,"_llvm_trap":_llvm_trap,"flush_NO_FILESYSTEM":flush_NO_FILESYSTEM,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX};// EMSCRIPTEN_START_ASM +var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) { +"almost asm";var a=global.Int8Array;var b=new a(buffer);var c=global.Int16Array;var d=new c(buffer);var e=global.Int32Array;var f=new e(buffer);var g=global.Uint8Array;var h=new g(buffer);var i=global.Uint16Array;var j=new i(buffer);var k=global.Uint32Array;var l=new k(buffer);var m=global.Float32Array;var n=new m(buffer);var o=global.Float64Array;var p=new o(buffer);var q=global.byteLength;var r=env.DYNAMICTOP_PTR|0;var s=env.tempDoublePtr|0;var t=env.ABORT|0;var u=env.STACKTOP|0;var v=env.STACK_MAX|0;var w=0;var x=0;var y=0;var z=0;var A=global.NaN,B=global.Infinity;var C=0,D=0,E=0,F=0,G=0.0;var H=0;var I=global.Math.floor;var J=global.Math.abs;var K=global.Math.sqrt;var L=global.Math.pow;var M=global.Math.cos;var N=global.Math.sin;var O=global.Math.tan;var P=global.Math.acos;var Q=global.Math.asin;var R=global.Math.atan;var S=global.Math.atan2;var T=global.Math.exp;var U=global.Math.log;var V=global.Math.ceil;var W=global.Math.imul;var X=global.Math.min;var Y=global.Math.max;var Z=global.Math.clz32;var _=global.Math.fround;var $=env.abort;var aa=env.assert;var ba=env.enlargeMemory;var ca=env.getTotalMemory;var da=env.abortOnCannotGrowMemory;var ea=env.invoke_ii;var fa=env.invoke_iii;var ga=env.invoke_iiii;var ha=env.invoke_iiiiiii;var ia=env.invoke_v;var ja=env.invoke_vi;var ka=env.invoke_vii;var la=env.invoke_viii;var ma=env.invoke_viiii;var na=env.invoke_viiiii;var oa=env.invoke_viiiiii;var pa=env.__ZSt18uncaught_exceptionv;var qa=env.___cxa_allocate_exception;var ra=env.___cxa_find_matching_catch;var sa=env.___cxa_pure_virtual;var ta=env.___cxa_throw;var ua=env.___gxx_personality_v0;var va=env.___resumeException;var wa=env.___setErrNo;var xa=env.___syscall140;var ya=env.___syscall146;var za=env.___syscall54;var Aa=env.___syscall6;var Ba=env._abort;var Ca=env._emscripten_memcpy_big;var Da=env._llvm_ceil_f32;var Ea=env._llvm_floor_f64;var Fa=env._llvm_trap;var Ga=env.flush_NO_FILESYSTEM;var Ha=_(0);const Ia=_(0);function Ja(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;b=new a(newBuffer);d=new c(newBuffer);f=new e(newBuffer);h=new g(newBuffer);j=new i(newBuffer);l=new k(newBuffer);n=new m(newBuffer);p=new o(newBuffer);buffer=newBuffer;return true} +// EMSCRIPTEN_START_FUNCS +function wc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;if(c>>>0>=262144){if((p|0)!=1048576)f[w>>2]=x+1048576}else Eg(n,262144-c|0);c=a+28|0;x=a+32|0;a=f[c>>2]|0;w=(f[x>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[x>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;x=w;w=(f[p>>2]|0)+w|0;if(w>>>0>262144){g=0;r=38;break}if(x>>>0<w>>>0){p=f[n>>2]|0;a=x;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==262144|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function xc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;if(c>>>0>=65536){if((p|0)!=262144)f[w>>2]=x+262144}else Eg(n,65536-c|0);c=a+28|0;x=a+32|0;a=f[c>>2]|0;w=(f[x>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[x>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;x=w;w=(f[p>>2]|0)+w|0;if(w>>>0>65536){g=0;r=38;break}if(x>>>0<w>>>0){p=f[n>>2]|0;a=x;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==65536|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function yc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;if(c>>>0>=32768){if((p|0)!=131072)f[w>>2]=x+131072}else Eg(n,32768-c|0);c=a+28|0;x=a+32|0;a=f[c>>2]|0;w=(f[x>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[x>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;x=w;w=(f[p>>2]|0)+w|0;if(w>>>0>32768){g=0;r=38;break}if(x>>>0<w>>>0){p=f[n>>2]|0;a=x;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==32768|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function zc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((b|0)<0)return;c=a+12|0;d=f[c>>2]|0;e=f[a+8>>2]|0;g=e;h=d;if(d-e>>2>>>0<=b>>>0)return;e=g+(b<<2)|0;d=f[(f[e>>2]|0)+56>>2]|0;i=f[(f[g+(b<<2)>>2]|0)+60>>2]|0;g=e+4|0;if((g|0)!=(h|0)){j=g;g=e;do{k=f[j>>2]|0;f[j>>2]=0;l=f[g>>2]|0;f[g>>2]=k;if(l|0){k=l+88|0;m=f[k>>2]|0;f[k>>2]=0;if(m|0){k=f[m+8>>2]|0;if(k|0){f[m+12>>2]=k;Ko(k)}Ko(m)}m=f[l+68>>2]|0;if(m|0){f[l+72>>2]=m;Ko(m)}m=l+64|0;k=f[m>>2]|0;f[m>>2]=0;if(k|0){m=f[k>>2]|0;if(m|0){f[k+4>>2]=m;Ko(m)}Ko(k)}Ko(l)}j=j+4|0;g=g+4|0}while((j|0)!=(h|0));j=f[c>>2]|0;if((j|0)==(g|0))n=g;else{o=g;p=j;q=19}}else{o=e;p=h;q=19}if((q|0)==19){q=p;do{q=q+-4|0;p=f[q>>2]|0;f[q>>2]=0;if(p|0){h=p+88|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0){h=f[e+8>>2]|0;if(h|0){f[e+12>>2]=h;Ko(h)}Ko(e)}e=f[p+68>>2]|0;if(e|0){f[p+72>>2]=e;Ko(e)}e=p+64|0;h=f[e>>2]|0;f[e>>2]=0;if(h|0){e=f[h>>2]|0;if(e|0){f[h+4>>2]=e;Ko(e)}Ko(h)}Ko(p)}}while((q|0)!=(o|0));n=o}f[c>>2]=n;n=f[a+4>>2]|0;if(n|0)hg(n,i);a:do if((d|0)<5){i=f[a+20+(d*12|0)>>2]|0;n=a+20+(d*12|0)+4|0;c=f[n>>2]|0;o=c;b:do if((i|0)==(c|0))r=i;else{q=i;while(1){if((f[q>>2]|0)==(b|0)){r=q;break b}q=q+4|0;if((q|0)==(c|0))break a}}while(0);if((r|0)!=(c|0)){i=r+4|0;q=o-i|0;if(q|0)Rj(r|0,i|0,q|0)|0;f[n>>2]=r+(q>>2<<2)}}while(0);r=f[a+24>>2]|0;d=f[a+20>>2]|0;q=d;if((r|0)!=(d|0)){i=r-d>>2;d=0;do{r=q+(d<<2)|0;p=f[r>>2]|0;if((p|0)>(b|0))f[r>>2]=p+-1;d=d+1|0}while(d>>>0<i>>>0)}i=f[a+36>>2]|0;d=f[a+32>>2]|0;q=d;if((i|0)!=(d|0)){p=i-d>>2;d=0;do{i=q+(d<<2)|0;r=f[i>>2]|0;if((r|0)>(b|0))f[i>>2]=r+-1;d=d+1|0}while(d>>>0<p>>>0)}p=f[a+48>>2]|0;d=f[a+44>>2]|0;q=d;if((p|0)!=(d|0)){r=p-d>>2;d=0;do{p=q+(d<<2)|0;i=f[p>>2]|0;if((i|0)>(b|0))f[p>>2]=i+-1;d=d+1|0}while(d>>>0<r>>>0)}r=f[a+60>>2]|0;d=f[a+56>>2]|0;q=d;if((r|0)!=(d|0)){i=r-d>>2;d=0;do{r=q+(d<<2)|0;p=f[r>>2]|0;if((p|0)>(b|0))f[r>>2]=p+-1;d=d+1|0}while(d>>>0<i>>>0)}i=f[a+72>>2]|0;d=f[a+68>>2]|0;a=d;if((i|0)==(d|0))return;q=i-d>>2;d=0;do{i=a+(d<<2)|0;p=f[i>>2]|0;if((p|0)>(b|0))f[i>>2]=p+-1;d=d+1|0}while(d>>>0<q>>>0);return}function Ac(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;h=a+4|0;i=f[c>>2]|0;c=i;do if((i|0)!=(h|0)){j=i+16|0;k=b[j+11>>0]|0;l=k<<24>>24<0;m=l?f[i+20>>2]|0:k&255;k=b[g+11>>0]|0;n=k<<24>>24<0;o=n?f[g+4>>2]|0:k&255;k=m>>>0<o>>>0;p=k?m:o;q=(p|0)==0;if(!q?(r=n?f[g>>2]|0:g,s=l?f[j>>2]|0:j,t=Fi(r,s,p)|0,(t|0)!=0):0)if((t|0)<0)break;else{u=s;v=r;w=23}else{if(o>>>0<m>>>0)break;if(q)w=24;else{u=l?f[j>>2]|0:j;v=n?f[g>>2]|0:g;w=23}}if((w|0)==23){j=Fi(u,v,p)|0;if(j){if((j|0)>=0)w=42}else w=24}if((w|0)==24?!k:0)w=42;if((w|0)==42){f[d>>2]=c;f[e>>2]=c;x=e;return x|0}k=f[i+4>>2]|0;if(!k){j=i+8|0;p=f[j>>2]|0;if((f[p>>2]|0)==(i|0))y=p;else{p=j;do{j=f[p>>2]|0;p=j+8|0;l=f[p>>2]|0}while((f[l>>2]|0)!=(j|0));y=l}}else{p=k;while(1){l=f[p>>2]|0;if(!l)break;else p=l}y=p}do if((y|0)!=(h|0)){k=y+16|0;l=b[k+11>>0]|0;j=l<<24>>24<0;q=j?f[y+20>>2]|0:l&255;l=q>>>0<o>>>0?q:o;if((l|0)!=0?(m=Fi(n?f[g>>2]|0:g,j?f[k>>2]|0:k,l)|0,(m|0)!=0):0){if((m|0)<0)break}else w=36;if((w|0)==36?o>>>0<q>>>0:0)break;x=Le(a,d,g)|0;return x|0}while(0);if(!(f[i+4>>2]|0)){f[d>>2]=c;x=i+4|0;return x|0}else{f[d>>2]=y;x=y;return x|0}}while(0);y=f[i>>2]|0;do if((f[a>>2]|0)==(i|0))z=c;else{if(!y){h=i;do{e=h;h=f[h+8>>2]|0}while((f[h>>2]|0)==(e|0));A=h}else{e=y;while(1){v=f[e+4>>2]|0;if(!v){A=e;break}else e=v}}e=A;h=A+16|0;v=b[g+11>>0]|0;u=v<<24>>24<0;o=u?f[g+4>>2]|0:v&255;v=b[h+11>>0]|0;n=v<<24>>24<0;p=n?f[A+20>>2]|0:v&255;v=o>>>0<p>>>0?o:p;if((v|0)!=0?(q=Fi(n?f[h>>2]|0:h,u?f[g>>2]|0:g,v)|0,(q|0)!=0):0){if((q|0)<0){z=e;break}}else w=15;if((w|0)==15?p>>>0<o>>>0:0){z=e;break}x=Le(a,d,g)|0;return x|0}while(0);if(!y){f[d>>2]=i;x=i;return x|0}else{f[d>>2]=z;x=z+4|0;return x|0}return 0}function Bc(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;i=u;u=u+32|0;j=i+12|0;k=i;f[c+40>>2]=e;e=c+32|0;f[e>>2]=g;f[c+4>>2]=h;fc(a,g,j);if(f[a>>2]|0){u=i;return}g=a+4|0;h=g+11|0;if((b[h>>0]|0)<0)Ko(f[g>>2]|0);l=b[j+7>>0]|0;if((Ka[f[(f[c>>2]|0)+8>>2]&127](c)|0)!=(l&255|0)){m=wk(64)|0;f[k>>2]=m;f[k+8>>2]=-2147483584;f[k+4>>2]=50;n=m;o=13186;p=n+50|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[m+50>>0]=0;f[a>>2]=-1;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}m=b[j+5>>0]|0;b[c+36>>0]=m;q=b[j+6>>0]|0;b[c+37>>0]=q;if((m+-1&255)>1){r=wk(32)|0;f[k>>2]=r;f[k+8>>2]=-2147483616;f[k+4>>2]=22;n=r;o=13237;p=n+22|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[r+22>>0]=0;f[a>>2]=-5;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}r=q&255;if(m<<24>>24==2&(l<<24>>24==0?3:2)>>>0<r>>>0){l=wk(32)|0;f[k>>2]=l;f[k+8>>2]=-2147483616;f[k+4>>2]=22;n=l;o=13260;p=n+22|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[l+22>>0]=0;f[a>>2]=-5;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}l=((m&255)<<8|r)&65535;d[(f[e>>2]|0)+38>>1]=l;if((l&65535)>258?(d[j+10>>1]|0)<0:0){Od(a,c);if(f[a>>2]|0){u=i;return}if((b[h>>0]|0)<0)Ko(f[g>>2]|0)}if(!(Ka[f[(f[c>>2]|0)+12>>2]&127](c)|0)){h=wk(48)|0;f[k>>2]=h;f[k+8>>2]=-2147483600;f[k+4>>2]=33;n=h;o=13283;p=n+33|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[h+33>>0]=0;f[a>>2]=-1;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}if(!(Ka[f[(f[c>>2]|0)+20>>2]&127](c)|0)){h=wk(32)|0;f[k>>2]=h;f[k+8>>2]=-2147483616;f[k+4>>2]=31;n=h;o=13317;p=n+31|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[h+31>>0]=0;f[a>>2]=-1;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}if(Ka[f[(f[c>>2]|0)+24>>2]&127](c)|0){f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;u=i;return}c=wk(48)|0;f[k>>2]=c;f[k+8>>2]=-2147483600;f[k+4>>2]=34;n=c;o=13349;p=n+34|0;do{b[n>>0]=b[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));b[c+34>>0]=0;f[a>>2]=-1;Yi(g,k);if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);u=i;return}function Cc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;e=b+12|0;g=f[e>>2]|0;h=(f[c>>2]|0)-g|0;i=c+4|0;j=(f[i>>2]|0)-g|0;k=c;f[k>>2]=h;f[k+4>>2]=j;k=(h|0)>-1;l=(j|0)>-1;m=f[e>>2]|0;n=((l?j:0-j|0)+(k?h:0-h|0)|0)<=(m|0);if(n){o=h;p=j}else{if(k)if(!l)if((h|0)<1){q=-1;r=-1}else s=6;else{q=1;r=1}else if((j|0)<1){q=-1;r=-1}else s=6;if((s|0)==6){q=(h|0)>0?1:-1;r=(j|0)>0?1:-1}l=W(q,m)|0;k=W(r,m)|0;m=(h<<1)-l|0;f[c>>2]=m;h=(j<<1)-k|0;f[i>>2]=h;if((W(q,r)|0)>-1){r=0-h|0;f[c>>2]=r;t=r;u=0-m|0}else{f[c>>2]=h;t=h;u=m}m=(t+l|0)/2|0;f[c>>2]=m;l=(u+k|0)/2|0;f[i>>2]=l;o=m;p=l}if(!o)if(!p){v=1;w=o;x=p;y=0}else{z=(p|0)>0?3:1;s=14}else{l=(p|0)<1;m=(o|0)>0?(p>>31)+2|0:l?0:3;if((o|0)<0&l){v=1;w=o;x=p;y=m}else{z=m;s=14}}if((s|0)==14){switch(z|0){case 1:{A=p;B=0-o|0;break}case 2:{A=0-o|0;B=0-p|0;break}case 3:{A=0-p|0;B=o;break}default:{A=o;B=p}}p=c;f[p>>2]=A;f[p+4>>2]=B;v=0;w=A;x=B;y=z}z=(f[d>>2]|0)+w|0;f[a>>2]=z;w=(f[d+4>>2]|0)+x|0;x=a+4|0;f[x>>2]=w;d=f[e>>2]|0;if((d|0)>=(z|0))if((z|0)<(0-d|0))C=(f[b+4>>2]|0)+z|0;else C=z;else C=z-(f[b+4>>2]|0)|0;f[a>>2]=C;if((d|0)>=(w|0))if((w|0)<(0-d|0))D=(f[b+4>>2]|0)+w|0;else D=w;else D=w-(f[b+4>>2]|0)|0;f[x>>2]=D;if(v){E=D;F=C}else{switch((4-y|0)%4|0|0){case 1:{G=D;H=0-C|0;break}case 2:{G=0-C|0;H=0-D|0;break}case 3:{G=0-D|0;H=C;break}default:{G=C;H=D}}D=a;f[D>>2]=G;f[D+4>>2]=H;E=H;F=G}if(n){I=F;J=E;K=I+g|0;L=J+g|0;M=a;N=M;f[N>>2]=K;O=M+4|0;P=O;f[P>>2]=L;return}if((F|0)>-1)if((E|0)<=-1)if((F|0)<1){Q=-1;R=-1}else s=38;else{Q=1;R=1}else if((E|0)<1){Q=-1;R=-1}else s=38;if((s|0)==38){Q=(F|0)>0?1:-1;R=(E|0)>0?1:-1}s=W(Q,d)|0;n=W(R,d)|0;d=(F<<1)-s|0;f[a>>2]=d;F=(E<<1)-n|0;f[x>>2]=F;if((W(Q,R)|0)>-1){R=0-F|0;f[a>>2]=R;S=R;T=0-d|0}else{f[a>>2]=F;S=F;T=d}d=(S+s|0)/2|0;f[a>>2]=d;s=(T+n|0)/2|0;f[x>>2]=s;I=d;J=s;K=I+g|0;L=J+g|0;M=a;N=M;f[N>>2]=K;O=M+4|0;P=O;f[P>>2]=L;return}function Dc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=b[c+11>>0]|0;e=d<<24>>24<0;g=e?f[c>>2]|0:c;i=e?f[c+4>>2]|0:d&255;if(i>>>0>3){d=g;c=i;e=i;while(1){j=W(h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24,1540483477)|0;c=(W(j>>>24^j,1540483477)|0)^(W(c,1540483477)|0);e=e+-4|0;if(e>>>0<=3)break;else d=d+4|0}d=i+-4|0;e=d&-4;k=d-e|0;l=g+(e+4)|0;m=c}else{k=i;l=g;m=i}switch(k|0){case 3:{n=h[l+2>>0]<<16^m;o=7;break}case 2:{n=m;o=7;break}case 1:{p=m;o=8;break}default:q=m}if((o|0)==7){p=h[l+1>>0]<<8^n;o=8}if((o|0)==8)q=W(p^h[l>>0],1540483477)|0;l=W(q>>>13^q,1540483477)|0;q=l>>>15^l;l=f[a+4>>2]|0;if(!l){r=0;return r|0}p=l+-1|0;n=(p&l|0)==0;if(!n)if(q>>>0<l>>>0)s=q;else s=(q>>>0)%(l>>>0)|0;else s=q&p;m=f[(f[a>>2]|0)+(s<<2)>>2]|0;if(!m){r=0;return r|0}a=f[m>>2]|0;if(!a){r=0;return r|0}m=(i|0)==0;if(n){n=a;a:while(1){k=f[n+4>>2]|0;c=(q|0)==(k|0);if(!(c|(k&p|0)==(s|0))){r=0;o=45;break}do if(c?(k=n+8|0,e=b[k+11>>0]|0,d=e<<24>>24<0,j=e&255,((d?f[n+12>>2]|0:j)|0)==(i|0)):0){e=f[k>>2]|0;t=d?e:k;u=e&255;if(d){if(m){r=n;o=45;break a}if(!(Fi(t,g,i)|0)){r=n;o=45;break a}else break}if(m){r=n;o=45;break a}if((b[g>>0]|0)==u<<24>>24){u=k;k=j;j=g;do{k=k+-1|0;u=u+1|0;if(!k){r=n;o=45;break a}j=j+1|0}while((b[u>>0]|0)==(b[j>>0]|0))}}while(0);n=f[n>>2]|0;if(!n){r=0;o=45;break}}if((o|0)==45)return r|0}n=a;b:while(1){a=f[n+4>>2]|0;do if((q|0)==(a|0)){p=n+8|0;c=b[p+11>>0]|0;j=c<<24>>24<0;u=c&255;if(((j?f[n+12>>2]|0:u)|0)==(i|0)){c=f[p>>2]|0;k=j?c:p;t=c&255;if(j){if(m){r=n;o=45;break b}if(!(Fi(k,g,i)|0)){r=n;o=45;break b}else break}if(m){r=n;o=45;break b}if((b[g>>0]|0)==t<<24>>24){t=p;p=u;u=g;do{p=p+-1|0;t=t+1|0;if(!p){r=n;o=45;break b}u=u+1|0}while((b[t>>0]|0)==(b[u>>0]|0))}}}else{if(a>>>0<l>>>0)v=a;else v=(a>>>0)%(l>>>0)|0;if((v|0)!=(s|0)){r=0;o=45;break b}}while(0);n=f[n>>2]|0;if(!n){r=0;o=45;break}}if((o|0)==45)return r|0;return 0}function Ec(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=b[c+11>>0]|0;e=d<<24>>24<0;g=e?f[c>>2]|0:c;i=e?f[c+4>>2]|0:d&255;if(i>>>0>3){d=g;c=i;e=i;while(1){j=W(h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24,1540483477)|0;c=(W(j>>>24^j,1540483477)|0)^(W(c,1540483477)|0);e=e+-4|0;if(e>>>0<=3)break;else d=d+4|0}d=i+-4|0;e=d&-4;k=d-e|0;l=g+(e+4)|0;m=c}else{k=i;l=g;m=i}switch(k|0){case 3:{n=h[l+2>>0]<<16^m;o=7;break}case 2:{n=m;o=7;break}case 1:{p=m;o=8;break}default:q=m}if((o|0)==7){p=h[l+1>>0]<<8^n;o=8}if((o|0)==8)q=W(p^h[l>>0],1540483477)|0;l=W(q>>>13^q,1540483477)|0;q=l>>>15^l;l=f[a+4>>2]|0;if(!l){r=0;return r|0}p=l+-1|0;n=(p&l|0)==0;if(!n)if(q>>>0<l>>>0)s=q;else s=(q>>>0)%(l>>>0)|0;else s=q&p;m=f[(f[a>>2]|0)+(s<<2)>>2]|0;if(!m){r=0;return r|0}a=f[m>>2]|0;if(!a){r=0;return r|0}m=(i|0)==0;if(n){n=a;a:while(1){k=f[n+4>>2]|0;c=(k|0)==(q|0);if(!(c|(k&p|0)==(s|0))){r=0;o=45;break}do if(c?(k=n+8|0,e=b[k+11>>0]|0,d=e<<24>>24<0,j=e&255,((d?f[n+12>>2]|0:j)|0)==(i|0)):0){e=f[k>>2]|0;t=d?e:k;u=e&255;if(d){if(m){r=n;o=45;break a}if(!(Fi(t,g,i)|0)){r=n;o=45;break a}else break}if(m){r=n;o=45;break a}if((b[g>>0]|0)==u<<24>>24){u=k;k=j;j=g;do{k=k+-1|0;u=u+1|0;if(!k){r=n;o=45;break a}j=j+1|0}while((b[u>>0]|0)==(b[j>>0]|0))}}while(0);n=f[n>>2]|0;if(!n){r=0;o=45;break}}if((o|0)==45)return r|0}n=a;b:while(1){a=f[n+4>>2]|0;do if((a|0)==(q|0)){p=n+8|0;c=b[p+11>>0]|0;j=c<<24>>24<0;u=c&255;if(((j?f[n+12>>2]|0:u)|0)==(i|0)){c=f[p>>2]|0;k=j?c:p;t=c&255;if(j){if(m){r=n;o=45;break b}if(!(Fi(k,g,i)|0)){r=n;o=45;break b}else break}if(m){r=n;o=45;break b}if((b[g>>0]|0)==t<<24>>24){t=p;p=u;u=g;do{p=p+-1|0;t=t+1|0;if(!p){r=n;o=45;break b}u=u+1|0}while((b[t>>0]|0)==(b[u>>0]|0))}}}else{if(a>>>0<l>>>0)v=a;else v=(a>>>0)%(l>>>0)|0;if((v|0)!=(s|0)){r=0;o=45;break b}}while(0);n=f[n>>2]|0;if(!n){r=0;o=45;break}}if((o|0)==45)return r|0;return 0}function Fc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=u;u=u+48|0;d=c+32|0;e=c+28|0;g=c+16|0;h=c;i=a+16|0;j=f[i>>2]|0;if(j|0){k=f[b>>2]|0;l=i;m=j;do{j=(f[m+16>>2]|0)<(k|0);l=j?l:m;m=f[(j?m+4|0:m)>>2]|0}while((m|0)!=0);if((l|0)!=(i|0)?(k|0)>=(f[l+16>>2]|0):0){n=l;o=n+20|0;u=c;return o|0}}mn(g);f[h>>2]=f[b>>2];b=h+4|0;f[h+8>>2]=0;l=h+12|0;f[l>>2]=0;k=h+8|0;f[b>>2]=k;m=f[g>>2]|0;j=g+4|0;if((m|0)!=(j|0)){p=k;q=m;while(1){m=q+16|0;f[e>>2]=p;f[d>>2]=f[e>>2];Ff(b,d,m,m)|0;m=f[q+4>>2]|0;if(!m){r=q+8|0;s=f[r>>2]|0;if((f[s>>2]|0)==(q|0))t=s;else{s=r;do{r=f[s>>2]|0;s=r+8|0;v=f[s>>2]|0}while((f[v>>2]|0)!=(r|0));t=v}}else{s=m;while(1){v=f[s>>2]|0;if(!v)break;else s=v}t=s}if((t|0)==(j|0))break;else q=t}}t=a+12|0;q=f[i>>2]|0;do if(q){d=f[h>>2]|0;e=a+16|0;p=q;while(1){m=f[p+16>>2]|0;if((d|0)<(m|0)){v=f[p>>2]|0;if(!v){w=21;break}else{x=p;y=v}}else{if((m|0)>=(d|0)){w=25;break}z=p+4|0;m=f[z>>2]|0;if(!m){w=24;break}else{x=z;y=m}}e=x;p=y}if((w|0)==21){A=p;B=p;break}else if((w|0)==24){A=p;B=z;break}else if((w|0)==25){A=p;B=e;break}}else{A=i;B=i}while(0);i=f[B>>2]|0;if(!i){w=wk(32)|0;f[w+16>>2]=f[h>>2];z=w+20|0;f[z>>2]=f[b>>2];y=w+24|0;x=f[h+8>>2]|0;f[y>>2]=x;q=f[l>>2]|0;f[w+28>>2]=q;if(!q)f[z>>2]=y;else{f[x+8>>2]=y;f[b>>2]=k;f[k>>2]=0;f[l>>2]=0}f[w>>2]=0;f[w+4>>2]=0;f[w+8>>2]=A;f[B>>2]=w;A=f[f[t>>2]>>2]|0;if(!A)C=w;else{f[t>>2]=A;C=f[B>>2]|0}vd(f[a+16>>2]|0,C);C=a+20|0;f[C>>2]=(f[C>>2]|0)+1;D=w}else D=i;Bh(h+4|0,f[k>>2]|0);Bh(g,f[j>>2]|0);n=D;o=n+20|0;u=c;return o|0}function Gc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;g=a;h=b;i=h;j=c;k=d;l=k;if(!i){m=(e|0)!=0;if(!l){if(m){f[e>>2]=(g>>>0)%(j>>>0);f[e+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return (H=n,o)|0}else{if(!m){n=0;o=0;return (H=n,o)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;n=0;o=0;return (H=n,o)|0}}m=(l|0)==0;do if(j){if(!m){p=(Z(l|0)|0)-(Z(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=g>>>(q>>>0)&s|i<<r;v=i>>>(q>>>0)&s;w=0;x=g<<r;break}if(!e){n=0;o=0;return (H=n,o)|0}f[e>>2]=a|0;f[e+4>>2]=h|b&0;n=0;o=0;return (H=n,o)|0}r=j-1|0;if(r&j|0){s=(Z(j|0)|0)+33-(Z(i|0)|0)|0;q=64-s|0;p=32-s|0;y=p>>31;z=s-32|0;A=z>>31;t=s;u=p-1>>31&i>>>(z>>>0)|(i<<p|g>>>(s>>>0))&A;v=A&i>>>(s>>>0);w=g<<q&y;x=(i<<q|g>>>(z>>>0))&y|g<<p&s-33>>31;break}if(e|0){f[e>>2]=r&g;f[e+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return (H=n,o)|0}else{r=Wn(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return (H=n,o)|0}}else{if(m){if(e|0){f[e>>2]=(i>>>0)%(j>>>0);f[e+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return (H=n,o)|0}if(!g){if(e|0){f[e>>2]=0;f[e+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return (H=n,o)|0}r=l-1|0;if(!(r&l)){if(e|0){f[e>>2]=a|0;f[e+4>>2]=r&i|b&0}n=0;o=i>>>((Wn(l|0)|0)>>>0);return (H=n,o)|0}r=(Z(l|0)|0)-(Z(i|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=i<<p|g>>>(s>>>0);v=i>>>(s>>>0);w=0;x=g<<p;break}if(!e){n=0;o=0;return (H=n,o)|0}f[e>>2]=a|0;f[e+4>>2]=h|b&0;n=0;o=0;return (H=n,o)|0}while(0);if(!t){B=x;C=w;D=v;E=u;F=0;G=0}else{b=c|0|0;c=k|d&0;d=vl(b|0,c|0,-1,-1)|0;k=H;h=x;x=w;w=v;v=u;u=t;t=0;do{a=h;h=x>>>31|h<<1;x=t|x<<1;g=v<<1|a>>>31|0;a=v>>>31|w<<1|0;wl(d|0,k|0,g|0,a|0)|0;i=H;l=i>>31|((i|0)<0?-1:0)<<1;t=l&1;v=wl(g|0,a|0,l&b|0,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&c|0)|0;w=H;u=u-1|0}while((u|0)!=0);B=h;C=x;D=w;E=v;F=0;G=t}t=C;C=0;if(e|0){f[e>>2]=E;f[e+4>>2]=D}n=(t|0)>>>31|(B|C)<<1|(C<<1|t>>>31)&0|F;o=(t<<1|0>>>31)&-2|G;return (H=n,o)|0}function Hc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=a+4|0;if(!c){e=f[a>>2]|0;f[a>>2]=0;if(e|0)Ko(e);f[d>>2]=0;return}if(c>>>0>1073741823){e=qa(8)|0;Dm(e,13552);f[e>>2]=4908;ta(e|0,1128,105)}e=wk(c<<2)|0;g=f[a>>2]|0;f[a>>2]=e;if(g|0)Ko(g);f[d>>2]=c;d=0;do{f[(f[a>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=(c|0));d=a+8|0;g=f[d>>2]|0;if(!g)return;e=f[g+4>>2]|0;h=c+-1|0;i=(h&c|0)==0;if(!i)if(e>>>0<c>>>0)j=e;else j=(e>>>0)%(c>>>0)|0;else j=e&h;f[(f[a>>2]|0)+(j<<2)>>2]=d;d=f[g>>2]|0;if(!d)return;e=j;j=d;d=g;while(1){g=f[j+4>>2]|0;if(!i)if(g>>>0<c>>>0)k=g;else k=(g>>>0)%(c>>>0)|0;else k=g&h;do if((k|0)==(e|0)){l=e;m=j}else{g=(f[a>>2]|0)+(k<<2)|0;if(!(f[g>>2]|0)){f[g>>2]=d;l=k;m=j;break}g=f[j>>2]|0;a:do if(!g)n=j;else{o=j+8|0;p=b[o+11>>0]|0;q=p<<24>>24<0;r=p&255;p=q?f[j+12>>2]|0:r;s=(p|0)==0;if(q){q=j;t=g;while(1){u=t+8|0;v=b[u+11>>0]|0;w=v<<24>>24<0;if((p|0)!=((w?f[t+12>>2]|0:v&255)|0)){n=q;break a}if(!s?Fi(f[o>>2]|0,w?f[u>>2]|0:u,p)|0:0){n=q;break a}u=f[t>>2]|0;if(!u){n=t;break a}else{w=t;t=u;q=w}}}if(s){q=j;t=g;while(1){w=b[t+8+11>>0]|0;if((w<<24>>24<0?f[t+12>>2]|0:w&255)|0){n=q;break a}w=f[t>>2]|0;if(!w){n=t;break a}else{u=t;t=w;q=u}}}q=j;t=g;while(1){s=t+8|0;u=b[s+11>>0]|0;w=u<<24>>24<0;if((p|0)!=((w?f[t+12>>2]|0:u&255)|0)){n=q;break a}u=w?f[s>>2]|0:s;if((b[u>>0]|0)!=(f[o>>2]&255)<<24>>24){n=q;break a}s=o;w=r;v=u;while(1){w=w+-1|0;s=s+1|0;if(!w)break;v=v+1|0;if((b[s>>0]|0)!=(b[v>>0]|0)){n=q;break a}}v=f[t>>2]|0;if(!v){n=t;break}else{s=t;t=v;q=s}}}while(0);f[d>>2]=f[n>>2];f[n>>2]=f[f[(f[a>>2]|0)+(k<<2)>>2]>>2];f[f[(f[a>>2]|0)+(k<<2)>>2]>>2]=j;l=e;m=d}while(0);j=f[m>>2]|0;if(!j)break;else{e=l;d=m}}return}function Ic(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=u;u=u+16|0;d=c;e=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;if((e|0)<=0){g=1;u=c;return g|0}h=a+36|0;i=a+48|0;j=d+8|0;k=d+4|0;l=d+11|0;m=0;while(1){n=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+40|0;if((f[n>>2]|0)!=0?(n=f[(f[h>>2]|0)+(m<<2)>>2]|0,o=f[n+8>>2]|0,p=Nf(n)|0,(p|0)!=0):0){n=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+40|0;q=f[n>>2]|0;n=f[o+56>>2]|0;o=wk(32)|0;f[d>>2]=o;f[j>>2]=-2147483616;f[k>>2]=24;r=o;s=11931;t=r+24|0;do{b[r>>0]=b[s>>0]|0;r=r+1|0;s=s+1|0}while((r|0)<(t|0));b[o+24>>0]=0;s=q+16|0;r=f[s>>2]|0;a:do if(r){t=s;v=r;do{w=(f[v+16>>2]|0)<(n|0);t=w?t:v;v=f[(w?v+4|0:v)>>2]|0}while((v|0)!=0);if(((t|0)!=(s|0)?(n|0)>=(f[t+16>>2]|0):0)?(v=t+20|0,w=f[t+24>>2]|0,(w|0)!=0):0){x=w;while(1){w=x+16|0;y=b[w+11>>0]|0;z=y<<24>>24<0;A=z?f[x+20>>2]|0:y&255;y=A>>>0<24;B=y?A:24;C=(B|0)==0;if(!C?(D=z?f[w>>2]|0:w,E=Fi(o,D,B)|0,(E|0)!=0):0)if((E|0)<0)F=16;else{G=D;F=19}else if(A>>>0<=24)if(C)F=20;else{G=z?f[w>>2]|0:w;F=19}else F=16;if((F|0)==16){F=0;H=x}else if((F|0)==19){F=0;w=Fi(G,o,B)|0;if(w)if((w|0)<0)F=22;else break;else F=20}if((F|0)==20){F=0;if(y)F=22;else break}if((F|0)==22){F=0;H=x+4|0}x=f[H>>2]|0;if(!x){F=25;break a}}I=ci(v,d,0)|0}else F=25}else F=25;while(0);if((F|0)==25){F=0;I=ci(q,d,0)|0}if((b[l>>0]|0)<0)Ko(f[d>>2]|0);if(I)ge(f[(f[(f[h>>2]|0)+(m<<2)>>2]|0)+8>>2]|0,p);else F=30}else F=30;if((F|0)==30?(F=0,o=f[(f[h>>2]|0)+(m<<2)>>2]|0,!(La[f[(f[o>>2]|0)+24>>2]&127](o,i)|0)):0){g=0;F=32;break}m=m+1|0;if((m|0)>=(e|0)){g=1;F=32;break}}if((F|0)==32){u=c;return g|0}return 0}function Jc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=u;u=u+64|0;i=g;j=i;k=j+52|0;do{f[j>>2]=0;j=j+4|0}while((j|0)<(k|0));a:do if(uc(i,d)|0?ad(i,d)|0:0){j=(a|0)==0;if(!j){if(!(f[i+12>>2]|0)){l=0;break}vf(d,0,0)|0;if(!j){j=i+44|0;k=i+48|0;m=i+40|0;n=i+16|0;o=i+28|0;p=(c|0)>0;q=d+36|0;r=d+32|0;s=d+24|0;t=d+28|0;v=0;w=0;x=f[k>>2]|0;while(1){b:do if(x>>>0<16384){y=f[j>>2]|0;z=x;while(1){if((y|0)<=0){A=z;break b}B=f[m>>2]|0;y=y+-1|0;f[j>>2]=y;C=z<<8|h[B+y>>0];f[k>>2]=C;if(C>>>0>=16384){A=C;break}else z=C}}else A=x;while(0);z=A&4095;y=f[(f[n>>2]|0)+(z<<2)>>2]|0;C=f[o>>2]|0;x=(W(f[C+(y<<3)>>2]|0,A>>>12)|0)+z-(f[C+(y<<3)+4>>2]|0)|0;f[k>>2]=x;c:do if(p){C=(b[q>>0]|0)==0;if((y|0)<=0){z=0;B=w;while(1){if(C){l=0;break a}D=B+1|0;f[e+(B<<2)>>2]=0;z=z+1|0;if((z|0)>=(c|0)){E=D;break c}else B=D}}B=0;z=w;while(1){if(C){l=0;break a}D=f[s>>2]|0;F=f[t>>2]|0;G=0;H=0;I=f[r>>2]|0;while(1){J=D+(I>>>3)|0;if(J>>>0<F>>>0){K=(h[J>>0]|0)>>>(I&7)&1;J=I+1|0;f[r>>2]=J;L=K;M=J}else{L=0;M=I}G=L<<H|G;H=H+1|0;if((H|0)==(y|0))break;else I=M}I=z+1|0;f[e+(z<<2)>>2]=G;B=B+1|0;if((B|0)>=(c|0)){E=I;break}else z=I}}else E=w;while(0);v=v+c|0;if(v>>>0>=a>>>0)break;else w=E}}}else vf(d,0,0)|0;Cj(d);l=1}else l=0;while(0);d=f[i+28>>2]|0;if(d|0){f[i+32>>2]=d;Ko(d)}d=f[i+16>>2]|0;if(d|0){f[i+20>>2]=d;Ko(d)}d=f[i>>2]|0;if(!d){u=g;return l|0}f[i+4>>2]=d;Ko(d);u=g;return l|0}function Kc(a,b){a=a|0;b=b|0;var c=0;if(!(rd(a,b)|0)){c=0;return c|0}if(!(rd(a+16|0,b)|0)){c=0;return c|0}if(!(rd(a+32|0,b)|0)){c=0;return c|0}if(!(rd(a+48|0,b)|0)){c=0;return c|0}if(!(rd(a+64|0,b)|0)){c=0;return c|0}if(!(rd(a+80|0,b)|0)){c=0;return c|0}if(!(rd(a+96|0,b)|0)){c=0;return c|0}if(!(rd(a+112|0,b)|0)){c=0;return c|0}if(!(rd(a+128|0,b)|0)){c=0;return c|0}if(!(rd(a+144|0,b)|0)){c=0;return c|0}if(!(rd(a+160|0,b)|0)){c=0;return c|0}if(!(rd(a+176|0,b)|0)){c=0;return c|0}if(!(rd(a+192|0,b)|0)){c=0;return c|0}if(!(rd(a+208|0,b)|0)){c=0;return c|0}if(!(rd(a+224|0,b)|0)){c=0;return c|0}if(!(rd(a+240|0,b)|0)){c=0;return c|0}if(!(rd(a+256|0,b)|0)){c=0;return c|0}if(!(rd(a+272|0,b)|0)){c=0;return c|0}if(!(rd(a+288|0,b)|0)){c=0;return c|0}if(!(rd(a+304|0,b)|0)){c=0;return c|0}if(!(rd(a+320|0,b)|0)){c=0;return c|0}if(!(rd(a+336|0,b)|0)){c=0;return c|0}if(!(rd(a+352|0,b)|0)){c=0;return c|0}if(!(rd(a+368|0,b)|0)){c=0;return c|0}if(!(rd(a+384|0,b)|0)){c=0;return c|0}if(!(rd(a+400|0,b)|0)){c=0;return c|0}if(!(rd(a+416|0,b)|0)){c=0;return c|0}if(!(rd(a+432|0,b)|0)){c=0;return c|0}if(!(rd(a+448|0,b)|0)){c=0;return c|0}if(!(rd(a+464|0,b)|0)){c=0;return c|0}if(!(rd(a+480|0,b)|0)){c=0;return c|0}if(!(rd(a+496|0,b)|0)){c=0;return c|0}c=rd(a+512|0,b)|0;return c|0}function Lc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=a+8|0;f[g>>2]=e;h=a+32|0;i=a+36|0;j=f[h>>2]|0;k=(f[i>>2]|0)-j>>2;if(k>>>0>=e>>>0){if(k>>>0>e>>>0)f[i>>2]=j+(e<<2)}else Eg(h,e-k|0);k=e>>>0>1073741823?-1:e<<2;h=Ho(k)|0;oh(h|0,0,k|0)|0;k=f[g>>2]|0;if((k|0)>0){j=a+16|0;i=a+32|0;l=a+12|0;m=0;do{n=f[h+(m<<2)>>2]|0;o=f[j>>2]|0;do if((n|0)<=(o|0)){p=f[l>>2]|0;q=f[i>>2]|0;r=q+(m<<2)|0;if((n|0)<(p|0)){f[r>>2]=p;s=q;break}else{f[r>>2]=n;s=q;break}}else{q=f[i>>2]|0;f[q+(m<<2)>>2]=o;s=q}while(0);m=m+1|0;t=f[g>>2]|0}while((m|0)<(t|0));if((t|0)>0){m=a+20|0;i=0;do{o=(f[b+(i<<2)>>2]|0)+(f[s+(i<<2)>>2]|0)|0;n=c+(i<<2)|0;f[n>>2]=o;if((o|0)<=(f[j>>2]|0)){if((o|0)<(f[l>>2]|0)){u=(f[m>>2]|0)+o|0;v=19}}else{u=o-(f[m>>2]|0)|0;v=19}if((v|0)==19){v=0;f[n>>2]=u}i=i+1|0;n=f[g>>2]|0}while((i|0)<(n|0));w=n}else w=t}else w=k;if((e|0)>=(d|0)){Io(h);return 1}k=0-e|0;t=a+16|0;i=a+32|0;u=a+12|0;m=a+20|0;a=e;l=w;while(1){w=c+(a<<2)|0;j=w+(k<<2)|0;s=b+(a<<2)|0;if((l|0)>0){n=0;do{o=f[j+(n<<2)>>2]|0;q=f[t>>2]|0;do if((o|0)<=(q|0)){r=f[u>>2]|0;p=f[i>>2]|0;x=p+(n<<2)|0;if((o|0)<(r|0)){f[x>>2]=r;y=p;break}else{f[x>>2]=o;y=p;break}}else{p=f[i>>2]|0;f[p+(n<<2)>>2]=q;y=p}while(0);n=n+1|0;z=f[g>>2]|0}while((n|0)<(z|0));if((z|0)>0){n=0;do{j=(f[s+(n<<2)>>2]|0)+(f[y+(n<<2)>>2]|0)|0;q=w+(n<<2)|0;f[q>>2]=j;if((j|0)<=(f[t>>2]|0)){if((j|0)<(f[u>>2]|0)){A=(f[m>>2]|0)+j|0;v=38}}else{A=j-(f[m>>2]|0)|0;v=38}if((v|0)==38){v=0;f[q>>2]=A}n=n+1|0;q=f[g>>2]|0}while((n|0)<(q|0));B=q}else B=z}else B=l;a=a+e|0;if((a|0)>=(d|0))break;else l=B}Io(h);return 1}function Mc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=u;u=u+32|0;e=d+24|0;g=d+20|0;h=d+8|0;i=d+4|0;j=d;f[e>>2]=0;zh(e,f[a>>2]|0)|0;a:do if(f[e>>2]|0){k=0;while(1){k=k+1|0;if(!(bd(a,c)|0)){l=0;break}if(k>>>0>=(f[e>>2]|0)>>>0)break a}u=d;return l|0}while(0);f[g>>2]=0;zh(g,f[a>>2]|0)|0;b:do if(!(f[g>>2]|0))m=1;else{e=h+11|0;k=0;while(1){f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;n=f[a>>2]|0;o=n+8|0;p=f[o+4>>2]|0;q=n+16|0;r=q;s=f[r>>2]|0;t=f[r+4>>2]|0;do if((p|0)>(t|0)|((p|0)==(t|0)?(f[o>>2]|0)>>>0>s>>>0:0)){r=b[(f[n>>2]|0)+s>>0]|0;v=vl(s|0,t|0,1,0)|0;w=q;f[w>>2]=v;f[w+4>>2]=H;w=r&255;Gh(h,w,0);if(r<<24>>24){v=f[a>>2]|0;x=gj(h,0)|0;y=v+8|0;z=f[y>>2]|0;A=f[y+4>>2]|0;y=v+16|0;B=y;C=f[B>>2]|0;D=r&255;r=vl(C|0,f[B+4>>2]|0,D|0,0)|0;B=H;if((A|0)<(B|0)|(A|0)==(B|0)&z>>>0<r>>>0){E=1;break}Bf(x|0,(f[v>>2]|0)+C|0,w|0)|0;w=y;C=vl(f[w>>2]|0,f[w+4>>2]|0,D|0,0)|0;D=y;f[D>>2]=C;f[D+4>>2]=H}D=wk(40)|0;f[D>>2]=0;f[D+4>>2]=0;f[D+8>>2]=0;f[D+12>>2]=0;f[D+16>>2]=1065353216;C=D+20|0;f[C>>2]=0;f[C+4>>2]=0;f[C+8>>2]=0;f[C+12>>2]=0;f[D+36>>2]=1065353216;f[i>>2]=D;if(Mc(a,D)|0){D=f[i>>2]|0;f[i>>2]=0;f[j>>2]=D;of(c,h,j)|0;Xg(j);F=0}else F=1;Xg(i);E=F}else E=1;while(0);if((b[e>>0]|0)<0)Ko(f[h>>2]|0);k=k+1|0;if(E|0){m=0;break b}if(k>>>0>=(f[g>>2]|0)>>>0){m=1;break}}}while(0);l=m;u=d;return l|0}function Nc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;d=u;u=u+16|0;e=d;g=a+68|0;f[g>>2]=(f[g>>2]|0)+1;g=(f[a+8+(b*12|0)+4>>2]|0)-(f[a+8+(b*12|0)>>2]|0)|0;h=g>>2;if((g|0)<=0){u=d;return}g=a+4|0;i=a+56|0;j=a+72|0;k=f[c>>2]|0;c=k+4|0;l=k+8|0;m=a+76|0;n=0;o=f[a+44+(b<<2)>>2]|0;while(1){b=(o|0)==-1;p=(o>>>0)/3|0;q=b?-1:p;r=(f[i>>2]|0)+(q>>>5<<2)|0;f[r>>2]=f[r>>2]|1<<(q&31);f[j>>2]=(f[j>>2]|0)+1;do if(n){if(b)s=-1;else{q=(o|0)/3|0;s=f[(f[(f[a>>2]|0)+96>>2]|0)+(q*12|0)+(o-(q*3|0)<<2)>>2]|0}f[m>>2]=s;f[e>>2]=s;q=f[c>>2]|0;if(q>>>0<(f[l>>2]|0)>>>0){f[q>>2]=s;f[c>>2]=q+4}else Ng(k,e);if(!(n&1)){q=o+1|0;if(b){t=-1;break}v=((q>>>0)%3|0|0)==0?o+-2|0:q;w=35;break}if(!b)if(!(o-(p*3|0)|0)){v=o+2|0;w=35;break}else{v=o+-1|0;w=35;break}else t=-1}else{if(b)x=-1;else x=f[(f[(f[a>>2]|0)+96>>2]|0)+(((o|0)/3|0)*12|0)+(((o|0)%3|0)<<2)>>2]|0;f[e>>2]=x;q=f[c>>2]|0;if(q>>>0<(f[l>>2]|0)>>>0){f[q>>2]=x;f[c>>2]=q+4}else Ng(k,e);q=o+1|0;if(!b?(r=((q>>>0)%3|0|0)==0?o+-2|0:q,(r|0)!=-1):0){q=(r|0)/3|0;y=f[(f[(f[a>>2]|0)+96>>2]|0)+(q*12|0)+(r-(q*3|0)<<2)>>2]|0}else y=-1;f[e>>2]=y;q=f[c>>2]|0;if(q>>>0<(f[l>>2]|0)>>>0){f[q>>2]=y;f[c>>2]=q+4}else Ng(k,e);if(!b?(q=(((o>>>0)%3|0|0)==0?2:-1)+o|0,(q|0)!=-1):0){r=(q|0)/3|0;z=f[(f[(f[a>>2]|0)+96>>2]|0)+(r*12|0)+(q-(r*3|0)<<2)>>2]|0}else z=-1;f[m>>2]=z;f[e>>2]=z;r=f[c>>2]|0;if(r>>>0<(f[l>>2]|0)>>>0){f[r>>2]=z;f[c>>2]=r+4}else Ng(k,e);v=o;w=35}while(0);if((w|0)==35){w=0;if((v|0)==-1)t=-1;else t=f[(f[(f[g>>2]|0)+12>>2]|0)+(v<<2)>>2]|0}n=n+1|0;if((n|0)>=(h|0))break;else o=t}u=d;return}function Oc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;c=a+4|0;if(!b){d=f[a>>2]|0;f[a>>2]=0;if(d|0)Ko(d);f[c>>2]=0;return}if(b>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}d=wk(b<<2)|0;e=f[a>>2]|0;f[a>>2]=d;if(e|0)Ko(e);f[c>>2]=b;c=0;do{f[(f[a>>2]|0)+(c<<2)>>2]=0;c=c+1|0}while((c|0)!=(b|0));c=a+8|0;e=f[c>>2]|0;if(!e)return;d=f[e+4>>2]|0;g=b+-1|0;h=(g&b|0)==0;if(!h)if(d>>>0<b>>>0)i=d;else i=(d>>>0)%(b>>>0)|0;else i=d&g;f[(f[a>>2]|0)+(i<<2)>>2]=c;c=f[e>>2]|0;if(!c)return;if(h){h=i;d=c;j=e;while(1){k=f[d+4>>2]&g;do if((k|0)==(h|0)){l=h;m=d}else{n=(f[a>>2]|0)+(k<<2)|0;if(!(f[n>>2]|0)){f[n>>2]=j;l=k;m=d;break}n=f[d>>2]|0;a:do if(!n)o=d;else{p=f[d+8>>2]|0;q=d;r=n;while(1){if((p|0)!=(f[r+8>>2]|0)){o=q;break a}s=f[r>>2]|0;if(!s){o=r;break}else{t=r;r=s;q=t}}}while(0);f[j>>2]=f[o>>2];f[o>>2]=f[f[(f[a>>2]|0)+(k<<2)>>2]>>2];f[f[(f[a>>2]|0)+(k<<2)>>2]>>2]=d;l=h;m=j}while(0);d=f[m>>2]|0;if(!d)break;else{h=l;j=m}}return}m=i;i=c;c=e;while(1){e=f[i+4>>2]|0;if(e>>>0<b>>>0)u=e;else u=(e>>>0)%(b>>>0)|0;do if((u|0)==(m|0)){v=m;w=i}else{e=(f[a>>2]|0)+(u<<2)|0;if(!(f[e>>2]|0)){f[e>>2]=c;v=u;w=i;break}e=f[i>>2]|0;b:do if(!e)x=i;else{j=f[i+8>>2]|0;l=i;h=e;while(1){if((j|0)!=(f[h+8>>2]|0)){x=l;break b}d=f[h>>2]|0;if(!d){x=h;break}else{o=h;h=d;l=o}}}while(0);f[c>>2]=f[x>>2];f[x>>2]=f[f[(f[a>>2]|0)+(u<<2)>>2]>>2];f[f[(f[a>>2]|0)+(u<<2)>>2]>>2]=i;v=m;w=c}while(0);i=f[w>>2]|0;if(!i)break;else{m=v;c=w}}return}function Pc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=u;u=u+16|0;e=d+8|0;g=d;h=d+4|0;if(!(Qe(a,b)|0)){i=0;u=d;return i|0}j=b+96|0;k=b+100|0;b=f[k>>2]|0;l=f[j>>2]|0;if((b|0)==(l|0)){i=1;u=d;return i|0}m=a+56|0;n=a+8|0;o=a+12|0;p=a+20|0;q=a+24|0;r=a+32|0;s=a+36|0;t=a+68|0;v=a+76|0;w=f[c>>2]|0;c=w+4|0;x=w+8|0;y=w;z=a+72|0;A=0;B=l;l=b;while(1){if(!(f[(f[m>>2]|0)+(A>>>5<<2)>>2]&1<<(A&31))){b=A*3|0;f[g>>2]=b;f[e>>2]=f[g>>2];_b(a,0,e);C=(f[o>>2]|0)-(f[n>>2]|0)|0;D=(C|0)!=0;E=D?C>>2:0;f[g>>2]=b+1;f[e>>2]=f[g>>2];_b(a,1,e);C=(f[q>>2]|0)-(f[p>>2]|0)>>2;F=C>>>0>E>>>0;f[g>>2]=b+2;f[e>>2]=f[g>>2];_b(a,2,e);b=(f[s>>2]|0)-(f[r>>2]|0)>>2>>>0>(F?C:E)>>>0?2:F?1:(D^1)<<31>>31;if((f[t>>2]|0)>0){D=f[v>>2]|0;f[e>>2]=D;F=f[c>>2]|0;if(F>>>0<(f[x>>2]|0)>>>0){f[F>>2]=D;f[c>>2]=F+4}else Ng(w,e);F=f[a+44+(b<<2)>>2]|0;if((F|0)==-1)G=-1;else{D=(F|0)/3|0;G=f[(f[(f[a>>2]|0)+96>>2]|0)+(D*12|0)+(F-(D*3|0)<<2)>>2]|0}f[e>>2]=G;D=f[c>>2]|0;if(D>>>0<(f[x>>2]|0)>>>0){f[D>>2]=G;f[c>>2]=D+4}else Ng(w,e);D=(f[z>>2]|0)+2|0;f[z>>2]=D;if(D&1|0){f[e>>2]=G;D=f[c>>2]|0;if(D>>>0<(f[x>>2]|0)>>>0){f[D>>2]=G;f[c>>2]=D+4}else Ng(w,e);f[z>>2]=(f[z>>2]|0)+1}}f[h>>2]=y;f[e>>2]=f[h>>2];Nc(a,b,e);H=f[j>>2]|0;I=f[k>>2]|0}else{H=B;I=l}A=A+1|0;if(A>>>0>=((I-H|0)/12|0)>>>0){i=1;break}else{B=H;l=I}}u=d;return i|0}function Qc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=u;u=u+176|0;g=e+136|0;h=e+64|0;i=e;j=e+32|0;k=f[(f[c+4>>2]|0)+44>>2]|0;l=wk(88)|0;f[l+4>>2]=0;f[l>>2]=3384;m=l+12|0;f[m>>2]=3364;n=l+64|0;f[n>>2]=0;f[l+68>>2]=0;f[l+72>>2]=0;o=l+16|0;p=o+44|0;do{f[o>>2]=0;o=o+4|0}while((o|0)<(p|0));f[l+76>>2]=k;f[l+80>>2]=d;f[l+84>>2]=0;q=l;r=h+4|0;f[r>>2]=3364;s=h+56|0;f[s>>2]=0;t=h+60|0;f[t>>2]=0;f[h+64>>2]=0;o=h+8|0;p=o+44|0;do{f[o>>2]=0;o=o+4|0}while((o|0)<(p|0));o=f[c+8>>2]|0;f[i>>2]=3364;c=i+4|0;p=c+4|0;f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0;f[p+16>>2]=0;f[p+20>>2]=0;f[c>>2]=o;c=((f[o+4>>2]|0)-(f[o>>2]|0)>>2>>>0)/3|0;b[g>>0]=0;Gf(i+8|0,c,g);Pa[f[(f[i>>2]|0)+8>>2]&127](i);le(j,i);le(g,j);f[h>>2]=f[g+4>>2];c=h+4|0;He(c,g)|0;f[g>>2]=3364;p=f[g+20>>2]|0;if(p|0)Ko(p);p=f[g+8>>2]|0;if(p|0)Ko(p);f[h+36>>2]=o;f[h+40>>2]=d;f[h+44>>2]=k;f[h+48>>2]=l;f[j>>2]=3364;k=f[j+20>>2]|0;if(k|0)Ko(k);k=f[j+8>>2]|0;if(k|0)Ko(k);f[l+8>>2]=f[h>>2];He(m,c)|0;c=l+44|0;l=h+36|0;f[c>>2]=f[l>>2];f[c+4>>2]=f[l+4>>2];f[c+8>>2]=f[l+8>>2];f[c+12>>2]=f[l+12>>2];b[c+16>>0]=b[l+16>>0]|0;df(n,f[s>>2]|0,f[t>>2]|0);f[a>>2]=q;f[i>>2]=3364;q=f[i+20>>2]|0;if(q|0)Ko(q);q=f[i+8>>2]|0;if(q|0)Ko(q);q=f[s>>2]|0;if(q|0){f[t>>2]=q;Ko(q)}f[r>>2]=3364;r=f[h+24>>2]|0;if(r|0)Ko(r);r=f[h+12>>2]|0;if(!r){u=e;return}Ko(r);u=e;return}function Rc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+16|0;h=d+4|0;i=d;f[a+72>>2]=e;f[a+64>>2]=g;g=Ho(e>>>0>1073741823?-1:e<<2)|0;j=a+68|0;k=f[j>>2]|0;f[j>>2]=g;if(k|0)Io(k);k=a+8|0;f[k>>2]=e;g=a+32|0;l=a+36|0;m=f[g>>2]|0;n=(f[l>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[l>>2]=m+(e<<2)}else Eg(g,e-n|0);n=a+56|0;g=f[n>>2]|0;m=f[g+4>>2]|0;l=f[g>>2]|0;o=m-l|0;p=o>>2;if((o|0)<=0){u=d;return 1}o=a+16|0;q=a+32|0;r=a+12|0;s=a+20|0;if((m|0)==(l|0)){t=g;$n(t)}g=0;m=l;while(1){f[i>>2]=f[m+(g<<2)>>2];f[h>>2]=f[i>>2];ac(a,h,c,g);l=W(g,e)|0;v=f[j>>2]|0;w=b+(l<<2)|0;x=c+(l<<2)|0;if((f[k>>2]|0)>0){l=0;do{y=f[v+(l<<2)>>2]|0;z=f[o>>2]|0;do if((y|0)<=(z|0)){A=f[r>>2]|0;B=f[q>>2]|0;C=B+(l<<2)|0;if((y|0)<(A|0)){f[C>>2]=A;D=B;break}else{f[C>>2]=y;D=B;break}}else{B=f[q>>2]|0;f[B+(l<<2)>>2]=z;D=B}while(0);l=l+1|0;E=f[k>>2]|0}while((l|0)<(E|0));if((E|0)>0){l=0;do{v=(f[w+(l<<2)>>2]|0)+(f[D+(l<<2)>>2]|0)|0;z=x+(l<<2)|0;f[z>>2]=v;if((v|0)<=(f[o>>2]|0)){if((v|0)<(f[r>>2]|0)){F=(f[s>>2]|0)+v|0;G=26}}else{F=v-(f[s>>2]|0)|0;G=26}if((G|0)==26){G=0;f[z>>2]=F}l=l+1|0}while((l|0)<(f[k>>2]|0))}}g=g+1|0;if((g|0)>=(p|0)){G=10;break}l=f[n>>2]|0;m=f[l>>2]|0;if((f[l+4>>2]|0)-m>>2>>>0<=g>>>0){t=l;G=11;break}}if((G|0)==10){u=d;return 1}else if((G|0)==11)$n(t);return 0}function Sc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+16|0;h=d+4|0;i=d;f[a+72>>2]=e;f[a+64>>2]=g;g=Ho(e>>>0>1073741823?-1:e<<2)|0;j=a+68|0;k=f[j>>2]|0;f[j>>2]=g;if(k|0)Io(k);k=a+8|0;f[k>>2]=e;g=a+32|0;l=a+36|0;m=f[g>>2]|0;n=(f[l>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[l>>2]=m+(e<<2)}else Eg(g,e-n|0);n=a+56|0;g=f[n>>2]|0;m=f[g+4>>2]|0;l=f[g>>2]|0;o=m-l|0;p=o>>2;if((o|0)<=0){u=d;return 1}o=a+16|0;q=a+32|0;r=a+12|0;s=a+20|0;if((m|0)==(l|0)){t=g;$n(t)}g=0;m=l;while(1){f[i>>2]=f[m+(g<<2)>>2];f[h>>2]=f[i>>2];bc(a,h,c,g);l=W(g,e)|0;v=f[j>>2]|0;w=b+(l<<2)|0;x=c+(l<<2)|0;if((f[k>>2]|0)>0){l=0;do{y=f[v+(l<<2)>>2]|0;z=f[o>>2]|0;do if((y|0)<=(z|0)){A=f[r>>2]|0;B=f[q>>2]|0;C=B+(l<<2)|0;if((y|0)<(A|0)){f[C>>2]=A;D=B;break}else{f[C>>2]=y;D=B;break}}else{B=f[q>>2]|0;f[B+(l<<2)>>2]=z;D=B}while(0);l=l+1|0;E=f[k>>2]|0}while((l|0)<(E|0));if((E|0)>0){l=0;do{v=(f[w+(l<<2)>>2]|0)+(f[D+(l<<2)>>2]|0)|0;z=x+(l<<2)|0;f[z>>2]=v;if((v|0)<=(f[o>>2]|0)){if((v|0)<(f[r>>2]|0)){F=(f[s>>2]|0)+v|0;G=26}}else{F=v-(f[s>>2]|0)|0;G=26}if((G|0)==26){G=0;f[z>>2]=F}l=l+1|0}while((l|0)<(f[k>>2]|0))}}g=g+1|0;if((g|0)>=(p|0)){G=10;break}l=f[n>>2]|0;m=f[l>>2]|0;if((f[l+4>>2]|0)-m>>2>>>0<=g>>>0){t=l;G=11;break}}if((G|0)==10){u=d;return 1}else if((G|0)==11)$n(t);return 0}function Tc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=a+148|0;d=f[b>>2]|0;b=(d|0)==-1;e=d+1|0;do if(!b){g=((e>>>0)%3|0|0)==0?d+-2|0:e;if(!((d>>>0)%3|0)){h=d+2|0;i=g;break}else{h=d+-1|0;i=g;break}}else{h=-1;i=-1}while(0);g=a+184|0;j=f[g>>2]|0;switch(j|0){case 1:case 0:{k=f[c>>2]|0;if((i|0)==-1)l=-1;else l=f[(f[k>>2]|0)+(i<<2)>>2]|0;m=f[a+156>>2]|0;n=m+(l<<2)|0;f[n>>2]=(f[n>>2]|0)+1;if((h|0)==-1)o=-1;else o=f[(f[k>>2]|0)+(h<<2)>>2]|0;p=m+(o<<2)|0;q=1;r=32;break}case 5:{o=f[c>>2]|0;if(b)s=-1;else s=f[(f[o>>2]|0)+(d<<2)>>2]|0;m=f[a+156>>2]|0;k=m+(s<<2)|0;f[k>>2]=(f[k>>2]|0)+1;if((i|0)==-1)t=-1;else t=f[(f[o>>2]|0)+(i<<2)>>2]|0;k=m+(t<<2)|0;f[k>>2]=(f[k>>2]|0)+1;if((h|0)==-1)u=-1;else u=f[(f[o>>2]|0)+(h<<2)>>2]|0;p=m+(u<<2)|0;q=2;r=32;break}case 3:{u=f[c>>2]|0;if(b)v=-1;else v=f[(f[u>>2]|0)+(d<<2)>>2]|0;m=f[a+156>>2]|0;o=m+(v<<2)|0;f[o>>2]=(f[o>>2]|0)+1;if((i|0)==-1)w=-1;else w=f[(f[u>>2]|0)+(i<<2)>>2]|0;o=m+(w<<2)|0;f[o>>2]=(f[o>>2]|0)+2;if((h|0)==-1)x=-1;else x=f[(f[u>>2]|0)+(h<<2)>>2]|0;p=m+(x<<2)|0;q=1;r=32;break}case 7:{x=f[c>>2]|0;if(b)y=-1;else y=f[(f[x>>2]|0)+(d<<2)>>2]|0;m=f[a+156>>2]|0;u=m+(y<<2)|0;f[u>>2]=(f[u>>2]|0)+2;if((i|0)==-1)z=-1;else z=f[(f[x>>2]|0)+(i<<2)>>2]|0;i=m+(z<<2)|0;f[i>>2]=(f[i>>2]|0)+2;if((h|0)==-1)A=-1;else A=f[(f[x>>2]|0)+(h<<2)>>2]|0;p=m+(A<<2)|0;q=2;r=32;break}default:B=j}if((r|0)==32){f[p>>2]=(f[p>>2]|0)+q;B=f[g>>2]|0}switch(B|0){case 5:case 0:break;default:{f[a+188>>2]=-1;return}}B=f[c>>2]|0;if(!b?(b=((e>>>0)%3|0|0)==0?d+-2|0:e,(b|0)!=-1):0)C=f[(f[B>>2]|0)+(b<<2)>>2]|0;else C=-1;f[a+188>>2]=(f[(f[a+156>>2]|0)+(C<<2)>>2]|0)<6?5:0;return}function Uc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0;f[a>>2]=f[c>>2];d=c+4|0;f[a+4>>2]=f[d>>2];e=c+8|0;f[a+8>>2]=f[e>>2];g=c+12|0;f[a+12>>2]=f[g>>2];f[d>>2]=0;f[e>>2]=0;f[g>>2]=0;g=c+16|0;f[a+16>>2]=f[g>>2];e=c+20|0;f[a+20>>2]=f[e>>2];d=c+24|0;f[a+24>>2]=f[d>>2];f[g>>2]=0;f[e>>2]=0;f[d>>2]=0;b[a+28>>0]=b[c+28>>0]|0;d=a+32|0;e=c+32|0;f[d>>2]=0;g=a+36|0;f[g>>2]=0;h=a+40|0;f[h>>2]=0;f[d>>2]=f[e>>2];d=c+36|0;f[g>>2]=f[d>>2];g=c+40|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[d>>2]=0;f[e>>2]=0;e=a+44|0;d=c+44|0;f[e>>2]=0;g=a+48|0;f[g>>2]=0;h=a+52|0;f[h>>2]=0;f[e>>2]=f[d>>2];e=c+48|0;f[g>>2]=f[e>>2];g=c+52|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[e>>2]=0;f[d>>2]=0;d=a+56|0;e=c+56|0;f[d>>2]=0;g=a+60|0;f[g>>2]=0;h=a+64|0;f[h>>2]=0;f[d>>2]=f[e>>2];d=c+60|0;f[g>>2]=f[d>>2];g=c+64|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[d>>2]=0;f[e>>2]=0;f[a+68>>2]=f[c+68>>2];f[a+72>>2]=f[c+72>>2];e=a+76|0;d=c+76|0;f[e>>2]=0;g=a+80|0;f[g>>2]=0;h=a+84|0;f[h>>2]=0;f[e>>2]=f[d>>2];e=c+80|0;f[g>>2]=f[e>>2];g=c+84|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[e>>2]=0;f[d>>2]=0;d=a+88|0;e=c+88|0;f[d>>2]=0;g=a+92|0;f[g>>2]=0;h=a+96|0;f[h>>2]=0;f[d>>2]=f[e>>2];d=c+92|0;f[g>>2]=f[d>>2];g=c+96|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[d>>2]=0;f[e>>2]=0;b[a+100>>0]=b[c+100>>0]|0;e=a+104|0;d=c+104|0;f[e>>2]=0;g=a+108|0;f[g>>2]=0;h=a+112|0;f[h>>2]=0;f[e>>2]=f[d>>2];e=c+108|0;f[g>>2]=f[e>>2];g=c+112|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[e>>2]=0;f[d>>2]=0;d=a+116|0;e=c+116|0;f[d>>2]=0;g=a+120|0;f[g>>2]=0;h=a+124|0;f[h>>2]=0;f[d>>2]=f[e>>2];d=c+120|0;f[g>>2]=f[d>>2];g=c+124|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[d>>2]=0;f[e>>2]=0;f[a+128>>2]=f[c+128>>2];e=a+132|0;d=c+132|0;f[e>>2]=0;g=a+136|0;f[g>>2]=0;h=a+140|0;f[h>>2]=0;f[e>>2]=f[d>>2];e=c+136|0;f[g>>2]=f[e>>2];g=c+140|0;f[h>>2]=f[g>>2];f[g>>2]=0;f[e>>2]=0;f[d>>2]=0;return}function Vc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+4194304|0;f[z>>2]=a;o=a>>>0<1073741824;u=d;return o|0}function Wc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+2097152|0;f[z>>2]=a;o=a>>>0<536870912;u=d;return o|0}function Xc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+1048576|0;f[z>>2]=a;o=a>>>0<268435456;u=d;return o|0}function Yc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+262144|0;f[z>>2]=a;o=a>>>0<67108864;u=d;return o|0}function Zc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+131072|0;f[z>>2]=a;o=a>>>0<33554432;u=d;return o|0}function _c(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=a+148|0;d=f[b>>2]|0;b=(d|0)==-1;e=d+1|0;do if(!b){g=((e>>>0)%3|0|0)==0?d+-2|0:e;if(!((d>>>0)%3|0)){h=d+2|0;i=g;break}else{h=d+-1|0;i=g;break}}else{h=-1;i=-1}while(0);switch(f[a+168>>2]|0){case 1:case 0:{e=f[c>>2]|0;if((i|0)==-1)j=-1;else j=f[(f[e>>2]|0)+(i<<2)>>2]|0;g=f[a+156>>2]|0;k=g+(j<<2)|0;f[k>>2]=(f[k>>2]|0)+1;if((h|0)==-1)l=-1;else l=f[(f[e>>2]|0)+(h<<2)>>2]|0;m=g+(l<<2)|0;n=1;o=32;break}case 5:{l=f[c>>2]|0;if(b)p=-1;else p=f[(f[l>>2]|0)+(d<<2)>>2]|0;g=f[a+156>>2]|0;e=g+(p<<2)|0;f[e>>2]=(f[e>>2]|0)+1;if((i|0)==-1)q=-1;else q=f[(f[l>>2]|0)+(i<<2)>>2]|0;e=g+(q<<2)|0;f[e>>2]=(f[e>>2]|0)+1;if((h|0)==-1)r=-1;else r=f[(f[l>>2]|0)+(h<<2)>>2]|0;m=g+(r<<2)|0;n=2;o=32;break}case 3:{r=f[c>>2]|0;if(b)s=-1;else s=f[(f[r>>2]|0)+(d<<2)>>2]|0;g=f[a+156>>2]|0;l=g+(s<<2)|0;f[l>>2]=(f[l>>2]|0)+1;if((i|0)==-1)t=-1;else t=f[(f[r>>2]|0)+(i<<2)>>2]|0;l=g+(t<<2)|0;f[l>>2]=(f[l>>2]|0)+2;if((h|0)==-1)u=-1;else u=f[(f[r>>2]|0)+(h<<2)>>2]|0;m=g+(u<<2)|0;n=1;o=32;break}case 7:{u=f[c>>2]|0;if(b)v=-1;else v=f[(f[u>>2]|0)+(d<<2)>>2]|0;d=f[a+156>>2]|0;b=d+(v<<2)|0;f[b>>2]=(f[b>>2]|0)+2;if((i|0)==-1)w=-1;else w=f[(f[u>>2]|0)+(i<<2)>>2]|0;b=d+(w<<2)|0;f[b>>2]=(f[b>>2]|0)+2;if((h|0)==-1)x=-1;else x=f[(f[u>>2]|0)+(h<<2)>>2]|0;m=d+(x<<2)|0;n=2;o=32;break}default:{}}if((o|0)==32)f[m>>2]=(f[m>>2]|0)+n;if((i|0)==-1)y=-1;else y=f[(f[f[c>>2]>>2]|0)+(i<<2)>>2]|0;i=f[(f[a+156>>2]|0)+(y<<2)>>2]|0;y=f[a+176>>2]|0;if((i|0)<(y|0)){z=y;A=z-y|0;B=a+172|0;f[B>>2]=A;return}c=f[a+180>>2]|0;z=(i|0)>(c|0)?c:i;A=z-y|0;B=a+172|0;f[B>>2]=A;return}function $c(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+32768|0;f[z>>2]=a;o=a>>>0<8388608;u=d;return o|0}function ad(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;do if((j[c+38>>1]|0)<512){g=c+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=c+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=d;return o|0}else{p=(f[c>>2]|0)+m|0;m=p;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=p+4|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=e;f[m>>2]=q;f[m+4>>2]=p;m=g;f[m>>2]=n;f[m+4>>2]=l;r=g;s=i;t=k;v=n;w=l;x=p;y=q;break}}else if(ah(e,c)|0){q=e;p=c+8|0;l=c+16|0;n=l;r=l;s=f[p>>2]|0;t=f[p+4>>2]|0;v=f[n>>2]|0;w=f[n+4>>2]|0;x=f[q+4>>2]|0;y=f[q>>2]|0;break}else{o=0;u=d;return o|0}while(0);e=wl(s|0,t|0,v|0,w|0)|0;t=H;if(x>>>0>t>>>0|(x|0)==(t|0)&y>>>0>e>>>0){o=0;u=d;return o|0}e=(f[c>>2]|0)+v|0;c=vl(v|0,w|0,y|0,x|0)|0;x=r;f[x>>2]=c;f[x+4>>2]=H;if((y|0)<1){o=0;u=d;return o|0}f[a+40>>2]=e;x=y+-1|0;c=e+x|0;a:do switch((h[c>>0]|0)>>>6&3){case 0:{f[a+44>>2]=x;r=b[c>>0]&63;w=a+48|0;f[w>>2]=r;z=w;A=r;break}case 1:{if((y|0)<2){o=0;u=d;return o|0}else{f[a+44>>2]=y+-2;r=e+y+-2|0;w=(h[r+1>>0]|0)<<8&16128|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break a}break}case 2:{if((y|0)<3){o=0;u=d;return o|0}else{f[a+44>>2]=y+-3;w=e+y+-3|0;r=(h[w+1>>0]|0)<<8|(h[w>>0]|0)|(h[w+2>>0]|0)<<16&4128768;w=a+48|0;f[w>>2]=r;z=w;A=r;break a}break}case 3:{f[a+44>>2]=y+-4;r=e+y+-4|0;w=(h[r+2>>0]|0)<<16|(h[r+3>>0]|0)<<24&1056964608|(h[r+1>>0]|0)<<8|(h[r>>0]|0);r=a+48|0;f[r>>2]=w;z=r;A=w;break}default:{}}while(0);a=A+16384|0;f[z>>2]=a;o=a>>>0<4194304;u=d;return o|0}function bd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=u;u=u+32|0;e=d+16|0;g=d+12|0;h=d;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;i=f[a>>2]|0;j=i+8|0;k=f[j+4>>2]|0;l=i+16|0;m=l;n=f[m>>2]|0;o=f[m+4>>2]|0;do if((k|0)>(o|0)|((k|0)==(o|0)?(f[j>>2]|0)>>>0>n>>>0:0)){m=b[(f[i>>2]|0)+n>>0]|0;p=vl(n|0,o|0,1,0)|0;q=l;f[q>>2]=p;f[q+4>>2]=H;q=m&255;Gh(e,q,0);if(m<<24>>24){p=f[a>>2]|0;r=gj(e,0)|0;s=p+8|0;t=f[s>>2]|0;v=f[s+4>>2]|0;s=p+16|0;w=s;x=f[w>>2]|0;y=m&255;m=vl(x|0,f[w+4>>2]|0,y|0,0)|0;w=H;if((v|0)<(w|0)|(v|0)==(w|0)&t>>>0<m>>>0){z=0;break}Bf(r|0,(f[p>>2]|0)+x|0,q|0)|0;q=s;x=vl(f[q>>2]|0,f[q+4>>2]|0,y|0,0)|0;y=s;f[y>>2]=x;f[y+4>>2]=H}f[g>>2]=0;y=(zh(g,f[a>>2]|0)|0)^1;x=f[g>>2]|0;if((x|0)==0|y)A=0;else{f[h>>2]=0;y=h+4|0;f[y>>2]=0;s=h+8|0;f[s>>2]=0;if((x|0)<0)$n(h);q=wk(x)|0;f[y>>2]=q;f[h>>2]=q;f[s>>2]=q+x;s=x;x=q;do{b[x>>0]=0;x=(f[y>>2]|0)+1|0;f[y>>2]=x;s=s+-1|0}while((s|0)!=0);s=f[a>>2]|0;x=f[g>>2]|0;q=s+8|0;p=f[q>>2]|0;r=f[q+4>>2]|0;q=s+16|0;m=q;t=f[m>>2]|0;w=vl(t|0,f[m+4>>2]|0,x|0,0)|0;m=H;if((r|0)<(m|0)|(r|0)==(m|0)&p>>>0<w>>>0)B=0;else{Bf(f[h>>2]|0,(f[s>>2]|0)+t|0,x|0)|0;t=q;s=vl(f[t>>2]|0,f[t+4>>2]|0,x|0,0)|0;x=q;f[x>>2]=s;f[x+4>>2]=H;$j(c,e,h);B=1}x=f[h>>2]|0;if(x|0){f[y>>2]=x;Ko(x)}A=B}z=A}else z=0;while(0);if((b[e+11>>0]|0)>=0){u=d;return z|0}Ko(f[e>>2]|0);u=d;return z|0}function cd(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+16|0;h=d+4|0;i=d;j=a+60|0;f[a+64>>2]=g;g=a+8|0;f[g>>2]=e;k=a+32|0;l=a+36|0;m=f[k>>2]|0;n=(f[l>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[l>>2]=m+(e<<2)}else Eg(k,e-n|0);n=a+56|0;k=f[n>>2]|0;m=f[k+4>>2]|0;l=f[k>>2]|0;o=m-l|0;p=o>>2;if((o|0)<=0){q=1;u=d;return q|0}o=a+16|0;r=a+32|0;s=a+12|0;t=a+20|0;if((m|0)==(l|0)){v=k;$n(v)}k=0;m=l;while(1){f[i>>2]=f[m+(k<<2)>>2];f[h>>2]=f[i>>2];if(!(Kb(j,h,c,k)|0)){q=0;w=28;break}l=W(k,e)|0;x=b+(l<<2)|0;y=c+(l<<2)|0;if((f[g>>2]|0)>0){l=0;do{z=f[a+68+(l<<2)>>2]|0;A=f[o>>2]|0;do if((z|0)<=(A|0)){B=f[s>>2]|0;C=f[r>>2]|0;D=C+(l<<2)|0;if((z|0)<(B|0)){f[D>>2]=B;E=C;break}else{f[D>>2]=z;E=C;break}}else{C=f[r>>2]|0;f[C+(l<<2)>>2]=A;E=C}while(0);l=l+1|0;F=f[g>>2]|0}while((l|0)<(F|0));if((F|0)>0){l=0;do{A=(f[x+(l<<2)>>2]|0)+(f[E+(l<<2)>>2]|0)|0;z=y+(l<<2)|0;f[z>>2]=A;if((A|0)<=(f[o>>2]|0)){if((A|0)<(f[s>>2]|0)){G=(f[t>>2]|0)+A|0;w=24}}else{G=A-(f[t>>2]|0)|0;w=24}if((w|0)==24){w=0;f[z>>2]=G}l=l+1|0}while((l|0)<(f[g>>2]|0))}}k=k+1|0;if((k|0)>=(p|0)){q=1;w=28;break}l=f[n>>2]|0;m=f[l>>2]|0;if((f[l+4>>2]|0)-m>>2>>>0<=k>>>0){v=l;w=8;break}}if((w|0)==8)$n(v);else if((w|0)==28){u=d;return q|0}return 0}function dd(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+16|0;h=d+4|0;i=d;j=a+60|0;f[a+64>>2]=g;g=a+8|0;f[g>>2]=e;k=a+32|0;l=a+36|0;m=f[k>>2]|0;n=(f[l>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[l>>2]=m+(e<<2)}else Eg(k,e-n|0);n=a+56|0;k=f[n>>2]|0;m=f[k+4>>2]|0;l=f[k>>2]|0;o=m-l|0;p=o>>2;if((o|0)<=0){q=1;u=d;return q|0}o=a+16|0;r=a+32|0;s=a+12|0;t=a+20|0;if((m|0)==(l|0)){v=k;$n(v)}k=0;m=l;while(1){f[i>>2]=f[m+(k<<2)>>2];f[h>>2]=f[i>>2];if(!(Jb(j,h,c,k)|0)){q=0;w=28;break}l=W(k,e)|0;x=b+(l<<2)|0;y=c+(l<<2)|0;if((f[g>>2]|0)>0){l=0;do{z=f[a+68+(l<<2)>>2]|0;A=f[o>>2]|0;do if((z|0)<=(A|0)){B=f[s>>2]|0;C=f[r>>2]|0;D=C+(l<<2)|0;if((z|0)<(B|0)){f[D>>2]=B;E=C;break}else{f[D>>2]=z;E=C;break}}else{C=f[r>>2]|0;f[C+(l<<2)>>2]=A;E=C}while(0);l=l+1|0;F=f[g>>2]|0}while((l|0)<(F|0));if((F|0)>0){l=0;do{A=(f[x+(l<<2)>>2]|0)+(f[E+(l<<2)>>2]|0)|0;z=y+(l<<2)|0;f[z>>2]=A;if((A|0)<=(f[o>>2]|0)){if((A|0)<(f[s>>2]|0)){G=(f[t>>2]|0)+A|0;w=24}}else{G=A-(f[t>>2]|0)|0;w=24}if((w|0)==24){w=0;f[z>>2]=G}l=l+1|0}while((l|0)<(f[g>>2]|0))}}k=k+1|0;if((k|0)>=(p|0)){q=1;w=28;break}l=f[n>>2]|0;m=f[l>>2]|0;if((f[l+4>>2]|0)-m>>2>>>0<=k>>>0){v=l;w=8;break}}if((w|0)==8)$n(v);else if((w|0)==28){u=d;return q|0}return 0}function ed(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=Ia,r=Ia,s=Ia,t=0,u=0,v=0,w=0,x=0;c=f[b>>2]|0;b=a+4|0;d=f[b>>2]|0;e=(d|0)==0;a:do if(!e){g=d+-1|0;h=(g&d|0)==0;if(!h)if(c>>>0<d>>>0)i=c;else i=(c>>>0)%(d>>>0)|0;else i=g&c;j=f[(f[a>>2]|0)+(i<<2)>>2]|0;if((j|0)!=0?(k=f[j>>2]|0,(k|0)!=0):0){if(h){h=k;while(1){j=f[h+4>>2]|0;if(!((j|0)==(c|0)|(j&g|0)==(i|0))){l=i;break a}if((f[h+8>>2]|0)==(c|0)){m=h;break}h=f[h>>2]|0;if(!h){l=i;break a}}o=m+12|0;return o|0}h=k;while(1){g=f[h+4>>2]|0;if((g|0)!=(c|0)){if(g>>>0<d>>>0)p=g;else p=(g>>>0)%(d>>>0)|0;if((p|0)!=(i|0)){l=i;break a}}if((f[h+8>>2]|0)==(c|0)){m=h;break}h=f[h>>2]|0;if(!h){l=i;break a}}o=m+12|0;return o|0}else l=i}else l=0;while(0);i=wk(16)|0;f[i+8>>2]=c;f[i+12>>2]=0;f[i+4>>2]=c;f[i>>2]=0;p=a+12|0;q=_(((f[p>>2]|0)+1|0)>>>0);r=_(d>>>0);s=_(n[a+16>>2]);do if(e|_(s*r)<q){h=d<<1|(d>>>0<3|(d+-1&d|0)!=0)&1;k=~~_(V(_(q/s)))>>>0;dg(a,h>>>0<k>>>0?k:h);h=f[b>>2]|0;k=h+-1|0;if(!(k&h)){t=h;u=k&c;break}if(c>>>0<h>>>0){t=h;u=c}else{t=h;u=(c>>>0)%(h>>>0)|0}}else{t=d;u=l}while(0);l=(f[a>>2]|0)+(u<<2)|0;u=f[l>>2]|0;if(!u){d=a+8|0;f[i>>2]=f[d>>2];f[d>>2]=i;f[l>>2]=d;d=f[i>>2]|0;if(d|0){l=f[d+4>>2]|0;d=t+-1|0;if(d&t)if(l>>>0<t>>>0)v=l;else v=(l>>>0)%(t>>>0)|0;else v=l&d;w=(f[a>>2]|0)+(v<<2)|0;x=33}}else{f[i>>2]=f[u>>2];w=u;x=33}if((x|0)==33)f[w>>2]=i;f[p>>2]=(f[p>>2]|0)+1;m=i;o=m+12|0;return o|0}function fd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c+8|0;g=f[e+4>>2]|0;h=c+16|0;i=h;j=f[i>>2]|0;k=f[i+4>>2]|0;if(!((g|0)>(k|0)|((g|0)==(k|0)?(f[e>>2]|0)>>>0>j>>>0:0))){l=0;return l|0}e=b[(f[c>>2]|0)+j>>0]|0;g=vl(j|0,k|0,1,0)|0;k=h;f[k>>2]=g;f[k+4>>2]=H;do switch(e<<24>>24){case 1:{l=Ge(a,c,d)|0;return l|0}case 2:{l=Ge(a,c,d)|0;return l|0}case 3:{l=Ge(a,c,d)|0;return l|0}case 4:{l=Ge(a,c,d)|0;return l|0}case 5:{l=Ge(a,c,d)|0;return l|0}case 6:{l=Ge(a,c,d)|0;return l|0}case 7:{l=Ge(a,c,d)|0;return l|0}case 8:{l=Ge(a,c,d)|0;return l|0}case 9:{l=Fe(a,c,d)|0;return l|0}case 10:{l=Ee(a,c,d)|0;return l|0}case 11:{l=De(a,c,d)|0;return l|0}case 12:{l=Ce(a,c,d)|0;return l|0}case 13:{l=Be(a,c,d)|0;return l|0}case 14:{l=Ae(a,c,d)|0;return l|0}case 15:{l=Ae(a,c,d)|0;return l|0}case 16:{l=Ae(a,c,d)|0;return l|0}case 17:{l=Ae(a,c,d)|0;return l|0}case 18:{l=Ae(a,c,d)|0;return l|0}default:{l=0;return l|0}}while(0);return 0}function gd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=b+12|0;g=f[e>>2]|0;h=(f[c>>2]|0)-g|0;i=c+4|0;j=(f[i>>2]|0)-g|0;k=c;f[k>>2]=h;f[k+4>>2]=j;k=(h|0)>-1;l=(j|0)>-1;m=f[e>>2]|0;if(((l?j:0-j|0)+(k?h:0-h|0)|0)>(m|0)){if(k)if(!l)if((h|0)<1){n=-1;o=-1}else p=6;else{n=1;o=1}else if((j|0)<1){n=-1;o=-1}else p=6;if((p|0)==6){n=(h|0)>0?1:-1;o=(j|0)>0?1:-1}l=W(n,m)|0;k=W(o,m)|0;q=(h<<1)-l|0;f[c>>2]=q;r=(j<<1)-k|0;f[i>>2]=r;if((W(n,o)|0)>-1){o=0-r|0;f[c>>2]=o;s=o;t=0-q|0}else{f[c>>2]=r;s=r;t=q}q=(s+l|0)/2|0;f[c>>2]=q;c=(t+k|0)/2|0;f[i>>2]=c;u=0;v=q;w=c;x=f[e>>2]|0}else{u=1;v=h;w=j;x=m}m=(f[d>>2]|0)+v|0;f[a>>2]=m;v=(f[d+4>>2]|0)+w|0;w=a+4|0;f[w>>2]=v;if((x|0)>=(m|0))if((m|0)<(0-x|0))y=(f[b+4>>2]|0)+m|0;else y=m;else y=m-(f[b+4>>2]|0)|0;f[a>>2]=y;if((x|0)>=(v|0))if((v|0)<(0-x|0))z=(f[b+4>>2]|0)+v|0;else z=v;else z=v-(f[b+4>>2]|0)|0;f[w>>2]=z;if(u){A=y;B=z;C=A+g|0;D=B+g|0;E=a;F=E;f[F>>2]=C;G=E+4|0;H=G;f[H>>2]=D;return}if((y|0)>-1)if((z|0)<=-1)if((y|0)<1){I=-1;J=-1}else p=24;else{I=1;J=1}else if((z|0)<1){I=-1;J=-1}else p=24;if((p|0)==24){I=(y|0)>0?1:-1;J=(z|0)>0?1:-1}p=W(I,x)|0;u=W(J,x)|0;x=(y<<1)-p|0;f[a>>2]=x;y=(z<<1)-u|0;f[w>>2]=y;if((W(I,J)|0)>-1){J=0-y|0;f[a>>2]=J;K=J;L=0-x|0}else{f[a>>2]=y;K=y;L=x}x=(K+p|0)/2|0;f[a>>2]=x;p=(L+u|0)/2|0;f[w>>2]=p;A=x;B=p;C=A+g|0;D=B+g|0;E=a;F=E;f[F>>2]=C;G=E+4|0;H=G;f[H>>2]=D;return}function hd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=a+8|0;e=f[d>>2]|0;switch(f[e+28>>2]|0){case 2:{g=b[e+24>>0]|0;h=g<<24>>24;i=Ho((h|0)>-1?h:-1)|0;j=f[a+16>>2]|0;if(!(f[j+80>>2]|0))k=0;else k=(f[f[j>>2]>>2]|0)+(f[j+48>>2]|0)|0;a:do if(c|0){if(g<<24>>24<=0){Bf(f[f[e+64>>2]>>2]|0,i|0,h|0)|0;if((c|0)==1)break;j=0;l=1;while(1){j=j+h|0;Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+j|0,i|0,h|0)|0;l=l+1|0;if((l|0)==(c|0))break a}}l=0;j=0;while(1){m=0;n=j;while(1){b[i+m>>0]=f[k+(n<<2)>>2];m=m+1|0;if((m|0)==(h|0))break;else n=n+1|0}Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+j|0,i|0,h|0)|0;l=l+1|0;if((l|0)==(c|0))break;else j=j+h|0}}while(0);Io(i);o=1;return o|0}case 1:{i=b[e+24>>0]|0;h=i<<24>>24;k=Ho((h|0)>-1?h:-1)|0;g=f[a+16>>2]|0;if(!(f[g+80>>2]|0))p=0;else p=(f[f[g>>2]>>2]|0)+(f[g+48>>2]|0)|0;b:do if(c|0){if(i<<24>>24<=0){Bf(f[f[e+64>>2]>>2]|0,k|0,h|0)|0;if((c|0)==1)break;g=0;j=1;while(1){g=g+h|0;Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+g|0,k|0,h|0)|0;j=j+1|0;if((j|0)==(c|0))break b}}j=0;g=0;while(1){l=0;n=g;while(1){b[k+l>>0]=f[p+(n<<2)>>2];l=l+1|0;if((l|0)==(h|0))break;else n=n+1|0}Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+g|0,k|0,h|0)|0;j=j+1|0;if((j|0)==(c|0))break;else g=g+h|0}}while(0);Io(k);o=1;return o|0}case 4:{_f(a,c);o=1;return o|0}case 3:{_f(a,c);o=1;return o|0}case 6:{$f(a,c);o=1;return o|0}case 5:{$f(a,c);o=1;return o|0}default:{o=0;return o|0}}return 0}function id(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=f[b>>2]|0;g=f[b+4>>2]|0;h=((f[c>>2]|0)-e<<3)+(f[c+4>>2]|0)-g|0;c=e;if((h|0)<=0){i=d+4|0;j=f[d>>2]|0;f[a>>2]=j;k=a+4|0;l=f[i>>2]|0;f[k>>2]=l;return}if(!g){e=d+4|0;m=h;n=e;o=f[e>>2]|0;p=c}else{e=32-g|0;q=(h|0)<(e|0)?h:e;r=-1>>>(e-q|0)&-1<<g&f[c>>2];e=d+4|0;s=f[e>>2]|0;t=32-s|0;u=t>>>0<q>>>0?t:q;v=f[d>>2]|0;w=f[v>>2]&~(-1>>>(t-u|0)&-1<<s);f[v>>2]=w;s=f[e>>2]|0;f[v>>2]=w|(s>>>0>g>>>0?r<<s-g:r>>>(g-s|0));s=(f[e>>2]|0)+u|0;w=v+(s>>>5<<2)|0;f[d>>2]=w;v=s&31;f[e>>2]=v;s=q-u|0;if((s|0)>0){f[w>>2]=f[w>>2]&~(-1>>>(32-s|0))|r>>>(u+g|0);f[e>>2]=s;x=s}else x=v;v=c+4|0;f[b>>2]=v;m=h-q|0;n=e;o=x;p=v}v=32-o|0;x=-1<<o;if((m|0)>31){o=~x;e=f[d>>2]|0;q=~m;h=m+((q|0)>-64?q:-64)+32|0;q=(h>>>5)+1|0;c=m+-32-(h&-32)|0;h=m;s=p;g=f[e>>2]|0;u=e;while(1){r=f[s>>2]|0;w=g&o;f[u>>2]=w;f[u>>2]=r<<f[n>>2]|w;u=u+4|0;g=f[u>>2]&x|r>>>v;f[u>>2]=g;if((h|0)<=63)break;else{h=h+-32|0;s=s+4|0}}s=p+(q<<2)|0;f[b>>2]=s;f[d>>2]=e+(q<<2);y=c;z=s}else{y=m;z=p}if((y|0)<=0){i=n;j=f[d>>2]|0;f[a>>2]=j;k=a+4|0;l=f[i>>2]|0;f[k>>2]=l;return}p=f[z>>2]&-1>>>(32-y|0);z=(v|0)<(y|0)?v:y;m=f[d>>2]|0;s=f[m>>2]&~(-1<<f[n>>2]&-1>>>(v-z|0));f[m>>2]=s;f[m>>2]=p<<f[n>>2]|s;s=(f[n>>2]|0)+z|0;v=m+(s>>>5<<2)|0;f[d>>2]=v;f[n>>2]=s&31;s=y-z|0;if((s|0)<=0){i=n;j=f[d>>2]|0;f[a>>2]=j;k=a+4|0;l=f[i>>2]|0;f[k>>2]=l;return}f[v>>2]=f[v>>2]&~(-1>>>(32-s|0))|p>>>z;f[n>>2]=s;i=n;j=f[d>>2]|0;f[a>>2]=j;k=a+4|0;l=f[i>>2]|0;f[k>>2]=l;return}function jd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;e=f[b>>2]|0;g=b+4|0;h=f[g>>2]|0;i=((f[c>>2]|0)-e<<3)+(f[c+4>>2]|0)-h|0;c=e;if((i|0)<=0){j=d+4|0;k=f[d>>2]|0;f[a>>2]=k;l=a+4|0;m=f[j>>2]|0;f[l>>2]=m;return}if(!h){e=d+4|0;n=i;o=e;p=c;q=f[e>>2]|0}else{e=32-h|0;r=(i|0)<(e|0)?i:e;s=-1>>>(e-r|0)&-1<<h&f[c>>2];c=d+4|0;h=f[c>>2]|0;e=32-h|0;t=e>>>0<r>>>0?e:r;u=f[d>>2]|0;v=f[u>>2]&~(-1>>>(e-t|0)&-1<<h);f[u>>2]=v;h=f[c>>2]|0;e=f[g>>2]|0;f[u>>2]=(h>>>0>e>>>0?s<<h-e:s>>>(e-h|0))|v;v=(f[c>>2]|0)+t|0;h=u+(v>>>5<<2)|0;f[d>>2]=h;u=v&31;f[c>>2]=u;v=r-t|0;if((v|0)>0){e=f[h>>2]&~(-1>>>(32-v|0));f[h>>2]=e;f[h>>2]=s>>>((f[g>>2]|0)+t|0)|e;f[c>>2]=v;w=v}else w=u;u=(f[b>>2]|0)+4|0;f[b>>2]=u;n=i-r|0;o=c;p=u;q=w}w=32-q|0;u=-1<<q;if((n|0)>31){q=~u;c=~n;r=n+((c|0)>-64?c:-64)+32&-32;c=n;i=p;while(1){v=f[i>>2]|0;e=f[d>>2]|0;t=f[e>>2]&q;f[e>>2]=t;f[e>>2]=v<<f[o>>2]|t;t=e+4|0;f[d>>2]=t;f[t>>2]=f[t>>2]&u|v>>>w;i=(f[b>>2]|0)+4|0;f[b>>2]=i;if((c|0)<=63)break;else c=c+-32|0}x=n+-32-r|0;y=i}else{x=n;y=p}if((x|0)<=0){j=o;k=f[d>>2]|0;f[a>>2]=k;l=a+4|0;m=f[j>>2]|0;f[l>>2]=m;return}p=f[y>>2]&-1>>>(32-x|0);y=(w|0)<(x|0)?w:x;n=f[d>>2]|0;i=f[n>>2]&~(-1<<f[o>>2]&-1>>>(w-y|0));f[n>>2]=i;f[n>>2]=p<<f[o>>2]|i;i=(f[o>>2]|0)+y|0;w=n+(i>>>5<<2)|0;f[d>>2]=w;f[o>>2]=i&31;i=x-y|0;if((i|0)<=0){j=o;k=f[d>>2]|0;f[a>>2]=k;l=a+4|0;m=f[j>>2]|0;f[l>>2]=m;return}f[w>>2]=f[w>>2]&~(-1>>>(32-i|0))|p>>>y;f[o>>2]=i;j=o;k=f[d>>2]|0;f[a>>2]=k;l=a+4|0;m=f[j>>2]|0;f[l>>2]=m;return}function kd(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;i=u;u=u+32|0;j=i+16|0;k=i+12|0;l=i;m=c+24|0;n=b[m>>0]|0;o=n<<24>>24;p=f[a+80>>2]|0;a=W(p,o)|0;q=f[c+28>>2]|0;if((q|0)==(e|0)|(q|0)==(g|0)?b[c+84>>0]|0:0){g=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;We(h,g,g+(a<<1)|0);r=1;u=i;return r|0}f[l>>2]=0;g=l+4|0;f[g>>2]=0;q=l+8|0;f[q>>2]=0;do if(n<<24>>24)if(n<<24>>24<0)$n(l);else{e=o<<1;s=wk(e)|0;f[l>>2]=s;t=s+(o<<1)|0;f[q>>2]=t;oh(s|0,0,e|0)|0;f[g>>2]=t;break}while(0);We(h,0,0+(a<<1)|0);a:do if(!p)v=1;else{a=c+84|0;q=c+68|0;if(n<<24>>24<=0){t=0;while(1){if(!(b[a>>0]|0))w=f[(f[q>>2]|0)+(t<<2)>>2]|0;else w=t;e=f[l>>2]|0;f[k>>2]=w;s=b[m>>0]|0;f[j>>2]=f[k>>2];if(!(Ab(c,j,s,e)|0)){v=0;break a}t=t+1|0;if(t>>>0>=p>>>0){v=1;break a}}}t=0;e=0;while(1){if(!(b[a>>0]|0))x=f[(f[q>>2]|0)+(e<<2)>>2]|0;else x=e;s=f[l>>2]|0;f[k>>2]=x;y=b[m>>0]|0;f[j>>2]=f[k>>2];if(!(Ab(c,j,y,s)|0)){v=0;break a}s=f[l>>2]|0;y=f[h>>2]|0;z=0;A=t;while(1){d[y+(A<<1)>>1]=d[s+(z<<1)>>1]|0;z=z+1|0;if((z|0)==(o|0))break;else A=A+1|0}e=e+1|0;if(e>>>0>=p>>>0){v=1;break}else t=t+o|0}}while(0);o=f[l>>2]|0;if(o|0){f[g>>2]=o;Ko(o)}r=v;u=i;return r|0}function ld(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;i=u;u=u+32|0;j=i+16|0;k=i+12|0;l=i;m=c+24|0;n=b[m>>0]|0;o=n<<24>>24;p=f[a+80>>2]|0;a=W(p,o)|0;q=f[c+28>>2]|0;if((q|0)==(e|0)|(q|0)==(g|0)?b[c+84>>0]|0:0){g=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;We(h,g,g+(a<<1)|0);r=1;u=i;return r|0}f[l>>2]=0;g=l+4|0;f[g>>2]=0;q=l+8|0;f[q>>2]=0;do if(n<<24>>24)if(n<<24>>24<0)$n(l);else{e=o<<1;s=wk(e)|0;f[l>>2]=s;t=s+(o<<1)|0;f[q>>2]=t;oh(s|0,0,e|0)|0;f[g>>2]=t;break}while(0);We(h,0,0+(a<<1)|0);a:do if(!p)v=1;else{a=c+84|0;q=c+68|0;if(n<<24>>24<=0){t=0;while(1){if(!(b[a>>0]|0))w=f[(f[q>>2]|0)+(t<<2)>>2]|0;else w=t;e=f[l>>2]|0;f[k>>2]=w;s=b[m>>0]|0;f[j>>2]=f[k>>2];if(!(Bb(c,j,s,e)|0)){v=0;break a}t=t+1|0;if(t>>>0>=p>>>0){v=1;break a}}}t=0;e=0;while(1){if(!(b[a>>0]|0))x=f[(f[q>>2]|0)+(e<<2)>>2]|0;else x=e;s=f[l>>2]|0;f[k>>2]=x;y=b[m>>0]|0;f[j>>2]=f[k>>2];if(!(Bb(c,j,y,s)|0)){v=0;break a}s=f[l>>2]|0;y=f[h>>2]|0;z=0;A=t;while(1){d[y+(A<<1)>>1]=d[s+(z<<1)>>1]|0;z=z+1|0;if((z|0)==(o|0))break;else A=A+1|0}e=e+1|0;if(e>>>0>=p>>>0){v=1;break}else t=t+o|0}}while(0);o=f[l>>2]|0;if(o|0){f[g>>2]=o;Ko(o)}r=v;u=i;return r|0}function md(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;h=u;u=u+32|0;i=h+16|0;j=h+12|0;k=h;l=c+24|0;m=b[l>>0]|0;n=m<<24>>24;o=f[a+80>>2]|0;a=W(o,n)|0;p=f[c+28>>2]|0;if((p|0)==(d|0)|(p|0)==(e|0)?b[c+84>>0]|0:0){e=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;Ye(g,e,e+(a<<2)|0);q=1;u=h;return q|0}f[k>>2]=0;e=k+4|0;f[e>>2]=0;p=k+8|0;f[p>>2]=0;do if(m<<24>>24)if(m<<24>>24<0)$n(k);else{d=n<<2;r=wk(d)|0;f[k>>2]=r;s=r+(n<<2)|0;f[p>>2]=s;oh(r|0,0,d|0)|0;f[e>>2]=s;break}while(0);Ye(g,0,0+(a<<2)|0);a:do if(!o)t=1;else{a=c+84|0;p=c+68|0;if(m<<24>>24<=0){s=0;while(1){if(!(b[a>>0]|0))v=f[(f[p>>2]|0)+(s<<2)>>2]|0;else v=s;d=f[k>>2]|0;f[j>>2]=v;r=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Cb(c,i,r,d)|0)){t=0;break a}s=s+1|0;if(s>>>0>=o>>>0){t=1;break a}}}s=0;d=0;while(1){if(!(b[a>>0]|0))w=f[(f[p>>2]|0)+(d<<2)>>2]|0;else w=d;r=f[k>>2]|0;f[j>>2]=w;x=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Cb(c,i,x,r)|0)){t=0;break a}r=f[k>>2]|0;x=f[g>>2]|0;y=0;z=s;while(1){f[x+(z<<2)>>2]=f[r+(y<<2)>>2];y=y+1|0;if((y|0)==(n|0))break;else z=z+1|0}d=d+1|0;if(d>>>0>=o>>>0){t=1;break}else s=s+n|0}}while(0);n=f[k>>2]|0;if(n|0){f[e>>2]=n;Ko(n)}q=t;u=h;return q|0}function nd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=u;u=u+32|0;d=c+16|0;e=c;f[d>>2]=0;do if((j[b+38>>1]|0)<514){g=b+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=b+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,4,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){o=0;u=c;return o|0}else{i=(f[b>>2]|0)+m|0;m=h[i>>0]|h[i+1>>0]<<8|h[i+2>>0]<<16|h[i+3>>0]<<24;f[d>>2]=m;i=g;f[i>>2]=n;f[i+4>>2]=l;p=m;break}}else if(zh(d,b)|0){p=f[d>>2]|0;break}else{o=0;u=c;return o|0}while(0);if(!p){o=0;u=c;return o|0}m=a+76|0;td(m,p,0);ym(e);if(rd(e,b)|0){if(f[d>>2]|0){p=1;l=0;do{p=p^((pi(e)|0)^1);i=(f[m>>2]|0)+(l>>>5<<2)|0;n=1<<(l&31);if(p)q=f[i>>2]|n;else q=f[i>>2]&~n;f[i>>2]=q;l=l+1|0}while(l>>>0<(f[d>>2]|0)>>>0)}d=b+8|0;l=f[d>>2]|0;q=f[d+4>>2]|0;d=b+16|0;p=d;m=f[p>>2]|0;e=f[p+4>>2]|0;p=vl(m|0,e|0,4,0)|0;i=H;if(((!((q|0)<(i|0)|(q|0)==(i|0)&l>>>0<p>>>0)?(n=f[b>>2]|0,b=n+m|0,g=h[b>>0]|h[b+1>>0]<<8|h[b+2>>0]<<16|h[b+3>>0]<<24,b=d,f[b>>2]=p,f[b+4>>2]=i,i=vl(m|0,e|0,8,0)|0,e=H,!((q|0)<(e|0)|(q|0)==(e|0)&l>>>0<i>>>0)):0)?(l=n+p|0,p=h[l>>0]|h[l+1>>0]<<8|h[l+2>>0]<<16|h[l+3>>0]<<24,l=d,f[l>>2]=i,f[l+4>>2]=e,(g|0)<=(p|0)):0)?(f[a+12>>2]=g,f[a+16>>2]=p,e=wl(p|0,((p|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0,g=H,g>>>0<0|(g|0)==0&e>>>0<2147483647):0){g=e+1|0;f[a+20>>2]=g;e=(g|0)/2|0;p=a+24|0;f[p>>2]=e;f[a+28>>2]=0-e;if(!(g&1)){f[p>>2]=e+-1;r=1}else r=1}else r=0}else r=0;o=r;u=c;return o|0}function od(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;h=u;u=u+32|0;i=h+16|0;j=h+12|0;k=h;l=c+24|0;m=b[l>>0]|0;n=m<<24>>24;o=f[a+80>>2]|0;a=W(o,n)|0;p=f[c+28>>2]|0;if((p|0)==(d|0)|(p|0)==(e|0)?b[c+84>>0]|0:0){e=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;Ye(g,e,e+(a<<2)|0);q=1;u=h;return q|0}f[k>>2]=0;e=k+4|0;f[e>>2]=0;p=k+8|0;f[p>>2]=0;do if(m<<24>>24)if(m<<24>>24<0)$n(k);else{d=n<<2;r=wk(d)|0;f[k>>2]=r;s=r+(n<<2)|0;f[p>>2]=s;oh(r|0,0,d|0)|0;f[e>>2]=s;break}while(0);Ye(g,0,0+(a<<2)|0);a:do if(!o)t=1;else{a=c+84|0;p=c+68|0;if(m<<24>>24<=0){s=0;while(1){if(!(b[a>>0]|0))v=f[(f[p>>2]|0)+(s<<2)>>2]|0;else v=s;d=f[k>>2]|0;f[j>>2]=v;r=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Db(c,i,r,d)|0)){t=0;break a}s=s+1|0;if(s>>>0>=o>>>0){t=1;break a}}}s=0;d=0;while(1){if(!(b[a>>0]|0))w=f[(f[p>>2]|0)+(d<<2)>>2]|0;else w=d;r=f[k>>2]|0;f[j>>2]=w;x=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Db(c,i,x,r)|0)){t=0;break a}r=f[k>>2]|0;x=f[g>>2]|0;y=0;z=s;while(1){f[x+(z<<2)>>2]=f[r+(y<<2)>>2];y=y+1|0;if((y|0)==(n|0))break;else z=z+1|0}d=d+1|0;if(d>>>0>=o>>>0){t=1;break}else s=s+n|0}}while(0);n=f[k>>2]|0;if(n|0){f[e>>2]=n;Ko(n)}q=t;u=h;return q|0}function pd(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;h=u;u=u+32|0;i=h+16|0;j=h+12|0;k=h;l=c+24|0;m=b[l>>0]|0;n=m<<24>>24;o=f[a+80>>2]|0;a=W(o,n)|0;p=f[c+28>>2]|0;if((p|0)==(d|0)|(p|0)==(e|0)?b[c+84>>0]|0:0){e=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;rf(g,e,e+a|0);q=1;u=h;return q|0}f[k>>2]=0;e=k+4|0;f[e>>2]=0;p=k+8|0;f[p>>2]=0;if(m<<24>>24){if(m<<24>>24<0)$n(k);d=wk(n)|0;f[e>>2]=d;f[k>>2]=d;f[p>>2]=d+n;p=n;r=d;do{b[r>>0]=0;r=(f[e>>2]|0)+1|0;f[e>>2]=r;p=p+-1|0}while((p|0)!=0)}rf(g,0,0+a|0);a:do if(!o)s=1;else{a=c+84|0;p=c+68|0;if(m<<24>>24<=0){r=0;while(1){if(!(b[a>>0]|0))t=f[(f[p>>2]|0)+(r<<2)>>2]|0;else t=r;d=f[k>>2]|0;f[j>>2]=t;v=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Eb(c,i,v,d)|0)){s=0;break a}r=r+1|0;if(r>>>0>=o>>>0){s=1;break a}}}r=0;d=0;while(1){if(!(b[a>>0]|0))w=f[(f[p>>2]|0)+(d<<2)>>2]|0;else w=d;v=f[k>>2]|0;f[j>>2]=w;x=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Eb(c,i,x,v)|0)){s=0;break a}v=0;x=r;while(1){b[(f[g>>2]|0)+x>>0]=b[(f[k>>2]|0)+v>>0]|0;v=v+1|0;if((v|0)==(n|0))break;else x=x+1|0}d=d+1|0;if(d>>>0>=o>>>0){s=1;break}else r=r+n|0}}while(0);n=f[k>>2]|0;if(n|0){f[e>>2]=n;Ko(n)}q=s;u=h;return q|0}function qd(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;h=u;u=u+32|0;i=h+16|0;j=h+12|0;k=h;l=c+24|0;m=b[l>>0]|0;n=m<<24>>24;o=f[a+80>>2]|0;a=W(o,n)|0;p=f[c+28>>2]|0;if((p|0)==(d|0)|(p|0)==(e|0)?b[c+84>>0]|0:0){e=(f[f[c>>2]>>2]|0)+(f[c+48>>2]|0)|0;rf(g,e,e+a|0);q=1;u=h;return q|0}f[k>>2]=0;e=k+4|0;f[e>>2]=0;p=k+8|0;f[p>>2]=0;if(m<<24>>24){if(m<<24>>24<0)$n(k);d=wk(n)|0;f[e>>2]=d;f[k>>2]=d;f[p>>2]=d+n;p=n;r=d;do{b[r>>0]=0;r=(f[e>>2]|0)+1|0;f[e>>2]=r;p=p+-1|0}while((p|0)!=0)}rf(g,0,0+a|0);a:do if(!o)s=1;else{a=c+84|0;p=c+68|0;if(m<<24>>24<=0){r=0;while(1){if(!(b[a>>0]|0))t=f[(f[p>>2]|0)+(r<<2)>>2]|0;else t=r;d=f[k>>2]|0;f[j>>2]=t;v=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Fb(c,i,v,d)|0)){s=0;break a}r=r+1|0;if(r>>>0>=o>>>0){s=1;break a}}}r=0;d=0;while(1){if(!(b[a>>0]|0))w=f[(f[p>>2]|0)+(d<<2)>>2]|0;else w=d;v=f[k>>2]|0;f[j>>2]=w;x=b[l>>0]|0;f[i>>2]=f[j>>2];if(!(Fb(c,i,x,v)|0)){s=0;break a}v=0;x=r;while(1){b[(f[g>>2]|0)+x>>0]=b[(f[k>>2]|0)+v>>0]|0;v=v+1|0;if((v|0)==(n|0))break;else x=x+1|0}d=d+1|0;if(d>>>0>=o>>>0){s=1;break}else r=r+n|0}}while(0);n=f[k>>2]|0;if(n|0){f[e>>2]=n;Ko(n)}q=s;u=h;return q|0}function rd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;d=u;u=u+16|0;e=d;g=c+8|0;i=g;k=f[i+4>>2]|0;l=c+16|0;m=l;n=f[m>>2]|0;o=f[m+4>>2]|0;if(!((k|0)>(o|0)|((k|0)==(o|0)?(f[i>>2]|0)>>>0>n>>>0:0))){p=0;u=d;return p|0}b[a+12>>0]=b[(f[c>>2]|0)+n>>0]|0;n=l;i=f[n>>2]|0;o=f[n+4>>2]|0;n=vl(i|0,o|0,1,0)|0;k=l;f[k>>2]=n;f[k+4>>2]=H;if((j[c+38>>1]|0)<514){k=g;m=f[k>>2]|0;q=f[k+4>>2]|0;k=vl(i|0,o|0,5,0)|0;o=H;if((q|0)<(o|0)|(q|0)==(o|0)&m>>>0<k>>>0)r=0;else{i=(f[c>>2]|0)+n|0;n=h[i>>0]|h[i+1>>0]<<8|h[i+2>>0]<<16|h[i+3>>0]<<24;f[e>>2]=n;i=l;f[i>>2]=k;f[i+4>>2]=o;s=m;t=q;v=k;w=o;x=n;y=7}}else if(zh(e,c)|0){n=g;g=l;s=f[n>>2]|0;t=f[n+4>>2]|0;v=f[g>>2]|0;w=f[g+4>>2]|0;x=f[e>>2]|0;y=7}else r=0;a:do if((y|0)==7){e=wl(s|0,t|0,v|0,w|0)|0;g=H;if(!((g|0)<0|(g|0)==0&e>>>0<x>>>0)?(e=(f[c>>2]|0)+v|0,(x|0)>=1):0){f[a>>2]=e;g=x+-1|0;n=e+g|0;switch((h[n>>0]|0)>>>6&3){case 0:{f[a+4>>2]=g;g=b[n>>0]&63;n=a+8|0;f[n>>2]=g;z=n;A=g;break}case 1:{if((x|0)<2){r=0;break a}f[a+4>>2]=x+-2;g=e+x+-2|0;n=(h[g+1>>0]|0)<<8&16128|(h[g>>0]|0);g=a+8|0;f[g>>2]=n;z=g;A=n;break}case 2:{if((x|0)<3){r=0;break a}f[a+4>>2]=x+-3;n=e+x+-3|0;e=(h[n+1>>0]|0)<<8|(h[n>>0]|0)|(h[n+2>>0]|0)<<16&4128768;n=a+8|0;f[n>>2]=e;z=n;A=e;break}default:{r=0;break a}}e=A+4096|0;f[z>>2]=e;if(e>>>0<1048576){e=vl(v|0,w|0,x|0,0)|0;n=l;f[n>>2]=e;f[n+4>>2]=H;r=1}else r=0}else r=0}while(0);p=r;u=d;return p|0}function sd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=u;u=u+32|0;g=e+8|0;i=e;switch(d|0){case 2:{d=f[b+12>>2]|0;j=f[b+4>>2]|0;f[g>>2]=-1;f[g+4>>2]=-1;f[g+8>>2]=-1;f[g+12>>2]=-1;a:do if((c|0)==-2){f[i>>2]=0;k=0}else{l=f[(f[(f[j+4>>2]|0)+8>>2]|0)+(d<<2)>>2]|0;do if((Ka[f[(f[j>>2]|0)+8>>2]&127](j)|0)==1){Cd(i,j,c,d,g,((h[j+36>>0]|0)<<8|(h[j+37>>0]|0))&65535);m=f[i>>2]|0;if(!m){f[i>>2]=0;break}else{k=m;break a}}while(0);m=wk(24)|0;f[m+4>>2]=l;n=m+8|0;f[n>>2]=f[g>>2];f[n+4>>2]=f[g+4>>2];f[n+8>>2]=f[g+8>>2];f[n+12>>2]=f[g+12>>2];f[m>>2]=2604;n=m;f[i>>2]=n;k=n}while(0);f[a>>2]=k;u=e;return}case 3:{k=f[b+12>>2]|0;j=f[b+4>>2]|0;f[g>>2]=-1;f[g+4>>2]=-1;f[g+8>>2]=-1;f[g+12>>2]=-1;b:do if((c|0)==-2){f[i>>2]=0;o=0}else{b=f[(f[(f[j+4>>2]|0)+8>>2]|0)+(k<<2)>>2]|0;do if((Ka[f[(f[j>>2]|0)+8>>2]&127](j)|0)==1){Bd(i,j,c,k,g,((h[j+36>>0]|0)<<8|(h[j+37>>0]|0))&65535);d=f[i>>2]|0;if(!d){f[i>>2]=0;break}else{o=d;break b}}while(0);l=wk(24)|0;f[l+4>>2]=b;d=l+8|0;f[d>>2]=f[g>>2];f[d+4>>2]=f[g+4>>2];f[d+8>>2]=f[g+8>>2];f[d+12>>2]=f[g+12>>2];f[l>>2]=2660;d=l;f[i>>2]=d;o=d}while(0);f[a>>2]=o;u=e;return}default:{f[a>>2]=0;u=e;return}}}function td(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=u;u=u+32|0;e=d+8|0;g=d;h=a+4|0;i=f[h>>2]|0;if(i>>>0>=b>>>0){f[h>>2]=b;u=d;return}j=a+8|0;k=f[j>>2]|0;l=k<<5;m=b-i|0;if(l>>>0<m>>>0|i>>>0>(l-m|0)>>>0){f[e>>2]=0;n=e+4|0;f[n>>2]=0;o=e+8|0;f[o>>2]=0;if((b|0)<0)$n(a);p=k<<6;k=b+31&-32;vg(e,l>>>0<1073741823?(p>>>0<k>>>0?k:p):2147483647);p=f[h>>2]|0;f[n>>2]=p+m;k=f[a>>2]|0;l=k;q=f[e>>2]|0;r=(l+(p>>>5<<2)-k<<3)+(p&31)|0;if((r|0)>0){p=r>>>5;Rj(q|0,k|0,p<<2|0)|0;k=r&31;r=q+(p<<2)|0;s=r;if(!k){t=0;v=s}else{w=-1>>>(32-k|0);f[r>>2]=f[r>>2]&~w|f[l+(p<<2)>>2]&w;t=k;v=s}}else{t=0;v=q}f[g>>2]=v;f[g+4>>2]=t;t=g;g=f[t>>2]|0;v=f[t+4>>2]|0;t=f[a>>2]|0;f[a>>2]=f[e>>2];f[e>>2]=t;e=f[h>>2]|0;f[h>>2]=f[n>>2];f[n>>2]=e;e=f[j>>2]|0;f[j>>2]=f[o>>2];f[o>>2]=e;if(t|0)Ko(t);x=g;y=v}else{v=(f[a>>2]|0)+(i>>>5<<2)|0;f[h>>2]=b;x=v;y=i&31}if(!m){u=d;return}i=(y|0)==0;v=x;if(c){if(i){z=m;A=x;B=v}else{c=32-y|0;b=c>>>0>m>>>0?m:c;f[v>>2]=f[v>>2]|-1>>>(c-b|0)&-1<<y;c=v+4|0;z=m-b|0;A=c;B=c}c=z>>>5;oh(A|0,-1,c<<2|0)|0;A=z&31;z=B+(c<<2)|0;if(!A){u=d;return}f[z>>2]=f[z>>2]|-1>>>(32-A|0);u=d;return}else{if(i){C=m;D=x;E=v}else{x=32-y|0;i=x>>>0>m>>>0?m:x;f[v>>2]=f[v>>2]&~(-1>>>(x-i|0)&-1<<y);y=v+4|0;C=m-i|0;D=y;E=y}y=C>>>5;oh(D|0,0,y<<2|0)|0;D=C&31;C=E+(y<<2)|0;if(!D){u=d;return}f[C>>2]=f[C>>2]&~(-1>>>(32-D|0));u=d;return}}function ud(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=a+32|0;d=f[c>>2]|0;e=d+8|0;g=f[e+4>>2]|0;h=d+16|0;i=h;j=f[i>>2]|0;k=f[i+4>>2]|0;if(!((g|0)>(k|0)|((g|0)==(k|0)?(f[e>>2]|0)>>>0>j>>>0:0))){l=0;return l|0}e=b[(f[d>>2]|0)+j>>0]|0;d=vl(j|0,k|0,1,0)|0;k=h;f[k>>2]=d;f[k+4>>2]=H;k=e&255;d=e<<24>>24==0;a:do if(!d){e=0;while(1){if(!(La[f[(f[a>>2]|0)+16>>2]&127](a,e)|0)){l=0;break}e=e+1|0;if(e>>>0>=k>>>0)break a}return l|0}while(0);e=a+8|0;h=f[e>>2]|0;j=f[a+12>>2]|0;b:do if((h|0)!=(j|0)){g=a+4|0;i=h;while(1){m=f[i>>2]|0;i=i+4|0;if(!(Ma[f[(f[m>>2]|0)+8>>2]&31](m,a,f[g>>2]|0)|0)){l=0;break}if((i|0)==(j|0))break b}return l|0}while(0);if(!d){j=0;do{h=f[(f[e>>2]|0)+(j<<2)>>2]|0;j=j+1|0;if(!(La[f[(f[h>>2]|0)+12>>2]&127](h,f[c>>2]|0)|0)){l=0;n=27;break}}while(j>>>0<k>>>0);if((n|0)==27)return l|0;if(!d){d=a+20|0;n=a+24|0;j=0;do{c=f[(f[e>>2]|0)+(j<<2)>>2]|0;h=Ka[f[(f[c>>2]|0)+24>>2]&127](c)|0;if((h|0)>0){c=0;do{i=f[(f[e>>2]|0)+(j<<2)>>2]|0;g=La[f[(f[i>>2]|0)+20>>2]&127](i,c)|0;i=f[d>>2]|0;m=(f[n>>2]|0)-i>>2;o=i;do if(g>>>0>=m>>>0){i=g+1|0;if(i>>>0>m>>>0){Eg(d,i-m|0);p=f[d>>2]|0;break}if(i>>>0<m>>>0){f[n>>2]=o+(i<<2);p=o}else p=o}else p=o;while(0);f[p+(g<<2)>>2]=j;c=c+1|0}while((c|0)!=(h|0))}j=j+1|0}while((j|0)!=(k|0))}}if(!(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)){l=0;return l|0}l=Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0;return l|0}function vd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=(c|0)==(a|0);b[c+12>>0]=d&1;if(d)return;d=c;while(1){e=d+8|0;g=f[e>>2]|0;h=g+12|0;if(b[h>>0]|0){i=24;break}j=f[g+8>>2]|0;c=f[j>>2]|0;if((c|0)==(g|0)){k=f[j+4>>2]|0;if(!k){i=7;break}l=k+12|0;if(!(b[l>>0]|0))m=l;else{i=7;break}}else{if(!c){i=16;break}l=c+12|0;if(!(b[l>>0]|0))m=l;else{i=16;break}}b[h>>0]=1;b[j+12>>0]=(j|0)==(a|0)&1;b[m>>0]=1;if((j|0)==(a|0)){i=24;break}else d=j}if((i|0)==7){a=g+8|0;if((f[g>>2]|0)==(d|0)){n=h;o=j}else{m=g+4|0;l=f[m>>2]|0;c=f[l>>2]|0;f[m>>2]=c;if(!c)p=j;else{f[c+8>>2]=g;p=f[a>>2]|0}f[l+8>>2]=p;p=f[a>>2]|0;f[((f[p>>2]|0)==(g|0)?p:p+4|0)>>2]=l;f[l>>2]=g;f[a>>2]=l;n=l+12|0;o=f[l+8>>2]|0}b[n>>0]=1;b[o+12>>0]=0;n=f[o>>2]|0;l=n+4|0;a=f[l>>2]|0;f[o>>2]=a;if(a|0)f[a+8>>2]=o;a=o+8|0;f[n+8>>2]=f[a>>2];p=f[a>>2]|0;f[((f[p>>2]|0)==(o|0)?p:p+4|0)>>2]=n;f[l>>2]=o;f[a>>2]=n;return}else if((i|0)==16){n=g+8|0;if((f[g>>2]|0)==(d|0)){a=d+4|0;o=f[a>>2]|0;f[g>>2]=o;if(!o)q=j;else{f[o+8>>2]=g;q=f[n>>2]|0}f[e>>2]=q;q=f[n>>2]|0;f[((f[q>>2]|0)==(g|0)?q:q+4|0)>>2]=d;f[a>>2]=g;f[n>>2]=d;r=d+12|0;s=f[d+8>>2]|0}else{r=h;s=j}b[r>>0]=1;b[s+12>>0]=0;r=s+4|0;j=f[r>>2]|0;h=f[j>>2]|0;f[r>>2]=h;if(h|0)f[h+8>>2]=s;h=s+8|0;f[j+8>>2]=f[h>>2];r=f[h>>2]|0;f[((f[r>>2]|0)==(s|0)?r:r+4|0)>>2]=j;f[j>>2]=s;f[h>>2]=j;return}else if((i|0)==24)return}function wd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=a+4|0;d=f[c>>2]|0;e=f[a>>2]|0;g=(d-e|0)/24|0;h=g+1|0;i=e;j=d;if(h>>>0>178956970)$n(a);d=a+8|0;k=((f[d>>2]|0)-e|0)/24|0;l=k<<1;m=k>>>0<89478485?(l>>>0<h>>>0?h:l):178956970;do if(m)if(m>>>0>178956970){l=qa(8)|0;Dm(l,13552);f[l>>2]=4908;ta(l|0,1128,105)}else{n=wk(m*24|0)|0;break}else n=0;while(0);l=n+(g*24|0)|0;h=n+(m*24|0)|0;f[l>>2]=1228;f[n+(g*24|0)+4>>2]=f[b+4>>2];m=n+(g*24|0)+8|0;f[m>>2]=0;k=n+(g*24|0)+12|0;f[k>>2]=0;o=n+(g*24|0)+16|0;f[o>>2]=0;p=f[b+8>>2]|0;q=(f[b+12>>2]|0)-p|0;r=q>>2;if(q|0){if(r>>>0>1073741823)$n(m);s=wk(q)|0;f[k>>2]=s;f[m>>2]=s;f[o>>2]=s+(r<<2);if((q|0)>0){Bf(s|0,p|0,q|0)|0;f[k>>2]=s+(q>>>2<<2)}}f[n+(g*24|0)+20>>2]=f[b+20>>2];b=l+24|0;if((j|0)!=(i|0)){g=j;j=l;do{f[j+-24>>2]=1228;f[j+-20>>2]=f[g+-20>>2];n=j+-16|0;q=g+-16|0;f[n>>2]=0;s=j+-12|0;f[s>>2]=0;k=j+-8|0;f[k>>2]=0;f[n>>2]=f[q>>2];n=g+-12|0;f[s>>2]=f[n>>2];s=g+-8|0;f[k>>2]=f[s>>2];f[s>>2]=0;f[n>>2]=0;f[q>>2]=0;f[j+-4>>2]=f[g+-4>>2];g=g+-24|0;j=j+-24|0}while((g|0)!=(i|0));i=f[a>>2]|0;g=f[c>>2]|0;q=i;f[a>>2]=j;f[c>>2]=b;f[d>>2]=h;if((g|0)==(q|0))t=i;else{j=g;do{j=j+-24|0;Pa[f[f[j>>2]>>2]&127](j)}while((j|0)!=(q|0));t=i}}else{f[a>>2]=l;f[c>>2]=b;f[d>>2]=h;t=e}if(!t)return;Ko(t);return}function xd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=u;u=u+144|0;g=e+136|0;h=e+32|0;i=e;j=f[(f[c+4>>2]|0)+44>>2]|0;k=wk(124)|0;f[k+4>>2]=0;f[k>>2]=3340;f[k+12>>2]=3364;f[k+100>>2]=0;f[k+104>>2]=0;f[k+108>>2]=0;l=k+16|0;m=l+80|0;do{f[l>>2]=0;l=l+4|0}while((l|0)<(m|0));f[k+112>>2]=j;f[k+116>>2]=d;f[k+120>>2]=0;n=k;o=h+4|0;f[o>>2]=3364;p=h+92|0;f[p>>2]=0;q=h+96|0;f[q>>2]=0;f[h+100>>2]=0;l=h+8|0;m=l+80|0;do{f[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=f[c+8>>2]|0;f[i>>2]=3364;c=i+4|0;m=c+4|0;f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;f[m+16>>2]=0;f[m+20>>2]=0;f[c>>2]=l;m=((f[l+4>>2]|0)-(f[l>>2]|0)>>2>>>0)/3|0;b[g>>0]=0;Gf(i+8|0,m,g);Pa[f[(f[i>>2]|0)+8>>2]&127](i);f[h>>2]=f[c>>2];He(h+4|0,i)|0;f[h+36>>2]=l;f[h+40>>2]=d;f[h+44>>2]=j;f[h+48>>2]=k;mf(k,h);f[a>>2]=n;f[i>>2]=3364;n=f[i+20>>2]|0;if(n|0)Ko(n);n=f[i+8>>2]|0;if(n|0)Ko(n);n=f[p>>2]|0;if(n|0){f[q>>2]=n;Ko(n)}n=f[h+76>>2]|0;if(n|0){f[h+80>>2]=n;Ko(n)}n=f[h+64>>2]|0;if(n|0){f[h+68>>2]=n;Ko(n)}n=f[h+52>>2]|0;if(n|0){f[h+56>>2]=n;Ko(n)}f[o>>2]=3364;o=f[h+24>>2]|0;if(o|0)Ko(o);o=f[h+12>>2]|0;if(!o){u=e;return}Ko(o);u=e;return}function yd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;e=u;u=u+32|0;g=e+12|0;i=e;j=c+24|0;k=b[j>>0]|0;l=k<<24>>24;f[g>>2]=0;m=g+4|0;f[m>>2]=0;n=g+8|0;f[n>>2]=0;if(!(k<<24>>24))o=0;else{if(k<<24>>24<0)$n(g);k=wk(l)|0;f[m>>2]=k;f[g>>2]=k;f[n>>2]=k+l;n=l;l=k;do{b[l>>0]=0;l=(f[m>>2]|0)+1|0;f[m>>2]=l;n=n+-1|0}while((n|0)!=0);o=b[j>>0]|0}n=o<<24>>24;f[i>>2]=0;l=i+4|0;f[l>>2]=0;k=i+8|0;f[k>>2]=0;if(o<<24>>24){if(o<<24>>24<0)$n(i);o=wk(n)|0;f[l>>2]=o;f[i>>2]=o;f[k>>2]=o+n;k=n;n=o;do{b[n>>0]=0;n=(f[l>>2]|0)+1|0;f[l>>2]=n;k=k+-1|0}while((k|0)!=0)}k=c+80|0;if(!(f[k>>2]|0))p=f[i>>2]|0;else{n=c+48|0;o=c+40|0;q=c+64|0;r=a+48|0;a=0;do{s=f[g>>2]|0;t=n;v=f[t>>2]|0;w=f[t+4>>2]|0;t=o;x=f[t>>2]|0;y=Bk(x|0,f[t+4>>2]|0,a|0,0)|0;t=vl(y|0,H|0,v|0,w|0)|0;Bf(s|0,(f[f[c>>2]>>2]|0)+t|0,x|0)|0;if((b[j>>0]|0)>0?(b[f[i>>2]>>0]=(f[(f[r>>2]|0)+(d<<2)>>2]|0)+(h[s>>0]|0),(b[j>>0]|0)>1):0){s=1;do{b[(f[i>>2]|0)+s>>0]=(f[(f[r>>2]|0)+(s+d<<2)>>2]|0)+(h[(f[g>>2]|0)+s>>0]|0);s=s+1|0}while((s|0)<(b[j>>0]|0))}s=f[i>>2]|0;x=f[o>>2]|0;Bf((f[f[q>>2]>>2]|0)+(W(a,x)|0)|0,s|0,x|0)|0;a=a+1|0}while(a>>>0<(f[k>>2]|0)>>>0);p=s}if(p|0){f[l>>2]=p;Ko(p)}p=f[g>>2]|0;if(!p){u=e;return 1}f[m>>2]=p;Ko(p);u=e;return 1}function zd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;c=u;u=u+16|0;d=c;e=b+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=b+16|0;k=g;l=f[k>>2]|0;m=vl(l|0,f[k+4>>2]|0,4,0)|0;k=H;if((j|0)<(k|0)|(j|0)==(k|0)&i>>>0<m>>>0){n=0;u=c;return n|0}i=(f[b>>2]|0)+l|0;l=h[i>>0]|h[i+1>>0]<<8|h[i+2>>0]<<16|h[i+3>>0]<<24;i=g;f[i>>2]=m;f[i+4>>2]=k;if((l|0)<0){n=0;u=c;return n|0}td(a+76|0,l,0);ym(d);if(rd(d,b)|0){if((l|0)>0){k=a+76|0;i=1;m=0;do{i=i^((pi(d)|0)^1);j=(f[k>>2]|0)+(m>>>5<<2)|0;o=1<<(m&31);if(i)p=f[j>>2]|o;else p=f[j>>2]&~o;f[j>>2]=p;m=m+1|0}while((m|0)<(l|0))}l=e;e=f[l>>2]|0;m=f[l+4>>2]|0;l=g;p=f[l>>2]|0;i=f[l+4>>2]|0;l=vl(p|0,i|0,4,0)|0;k=H;if(((!((m|0)<(k|0)|(m|0)==(k|0)&e>>>0<l>>>0)?(d=f[b>>2]|0,b=d+p|0,j=h[b>>0]|h[b+1>>0]<<8|h[b+2>>0]<<16|h[b+3>>0]<<24,b=g,f[b>>2]=l,f[b+4>>2]=k,k=vl(p|0,i|0,8,0)|0,i=H,!((m|0)<(i|0)|(m|0)==(i|0)&e>>>0<k>>>0)):0)?(e=d+l|0,l=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24,e=g,f[e>>2]=k,f[e+4>>2]=i,(j|0)<=(l|0)):0)?(f[a+12>>2]=j,f[a+16>>2]=l,i=wl(l|0,((l|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0,j=H,j>>>0<0|(j|0)==0&i>>>0<2147483647):0){j=i+1|0;f[a+20>>2]=j;i=(j|0)/2|0;l=a+24|0;f[l>>2]=i;f[a+28>>2]=0-i;if(!(j&1)){f[l>>2]=i+-1;q=1}else q=1}else q=0}else q=0;n=q;u=c;return n|0}function Ad(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=a+8|0;e=f[d>>2]|0;g=a+4|0;h=f[g>>2]|0;if(((e-h|0)/144|0)>>>0>=c>>>0){i=c;j=h;do{f[j>>2]=-1;ti(j+4|0);b[j+100>>0]=1;k=j+104|0;l=k+40|0;do{f[k>>2]=0;k=k+4|0}while((k|0)<(l|0));j=(f[g>>2]|0)+144|0;f[g>>2]=j;i=i+-1|0}while((i|0)!=0);return}i=f[a>>2]|0;j=(h-i|0)/144|0;h=j+c|0;if(h>>>0>29826161)$n(a);m=(e-i|0)/144|0;i=m<<1;e=m>>>0<14913080?(i>>>0<h>>>0?h:i):29826161;do if(e)if(e>>>0>29826161){i=qa(8)|0;Dm(i,13552);f[i>>2]=4908;ta(i|0,1128,105)}else{n=wk(e*144|0)|0;break}else n=0;while(0);i=n+(j*144|0)|0;j=i;h=n+(e*144|0)|0;e=c;c=j;n=i;while(1){f[n>>2]=-1;ti(n+4|0);b[n+100>>0]=1;k=n+104|0;l=k+40|0;do{f[k>>2]=0;k=k+4|0}while((k|0)<(l|0));o=c+144|0;m=e+-1|0;if(!m)break;else{e=m;c=o;n=o}}n=o;o=f[a>>2]|0;c=f[g>>2]|0;if((c|0)==(o|0)){p=j;q=o;r=o}else{j=c;c=i;do{c=c+-144|0;j=j+-144|0;Uc(c,j)}while((j|0)!=(o|0));p=c;q=f[a>>2]|0;r=f[g>>2]|0}f[a>>2]=p;f[g>>2]=n;f[d>>2]=h;h=q;if((r|0)!=(h|0)){d=r;do{r=f[d+-12>>2]|0;if(r|0){f[d+-8>>2]=r;Ko(r)}r=f[d+-28>>2]|0;if(r|0){f[d+-24>>2]=r;Ko(r)}r=f[d+-40>>2]|0;if(r|0){f[d+-36>>2]=r;Ko(r)}di(d+-140|0);d=d+-144|0}while((d|0)!=(h|0))}if(!q)return;Ko(q);return}function Bd(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;g=f[(f[(f[b+4>>2]|0)+8>>2]|0)+(d<<2)>>2]|0;if(!((c+-1|0)>>>0<6&(Ka[f[(f[b>>2]|0)+8>>2]&127](b)|0)==1)){h=0;f[a>>2]=h;return}i=Ka[f[(f[b>>2]|0)+36>>2]&127](b)|0;j=La[f[(f[b>>2]|0)+44>>2]&127](b,d)|0;if((i|0)==0|(j|0)==0){h=0;f[a>>2]=h;return}k=La[f[(f[b>>2]|0)+40>>2]&127](b,d)|0;d=f[b+44>>2]|0;b=j+12|0;l=(c|0)==6;if(!k){if(l){c=wk(104)|0;f[c+4>>2]=g;m=c+8|0;f[m>>2]=f[e>>2];f[m+4>>2]=f[e+4>>2];f[m+8>>2]=f[e+8>>2];f[m+12>>2]=f[e+12>>2];f[c+24>>2]=d;f[c+28>>2]=i;f[c+32>>2]=b;f[c+36>>2]=j;f[c>>2]=2800;f[c+44>>2]=0;f[c+48>>2]=0;f[c+52>>2]=d;f[c+56>>2]=i;f[c+60>>2]=b;f[c+64>>2]=j;f[c+40>>2]=2856;f[c+68>>2]=1;i=c+72|0;f[i>>2]=-1;f[i+4>>2]=-1;f[i+8>>2]=-1;f[i+12>>2]=-1;ym(c+88|0);h=c;f[a>>2]=h;return}}else if(l){l=wk(104)|0;f[l+4>>2]=g;g=l+8|0;f[g>>2]=f[e>>2];f[g+4>>2]=f[e+4>>2];f[g+8>>2]=f[e+8>>2];f[g+12>>2]=f[e+12>>2];f[l+24>>2]=d;f[l+28>>2]=k;f[l+32>>2]=b;f[l+36>>2]=j;f[l>>2]=2716;f[l+44>>2]=0;f[l+48>>2]=0;f[l+52>>2]=d;f[l+56>>2]=k;f[l+60>>2]=b;f[l+64>>2]=j;f[l+40>>2]=2772;f[l+68>>2]=1;j=l+72|0;f[j>>2]=-1;f[j+4>>2]=-1;f[j+8>>2]=-1;f[j+12>>2]=-1;ym(l+88|0);h=l;f[a>>2]=h;return}f[a>>2]=0;h=0;f[a>>2]=h;return}function Cd(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;g=f[(f[(f[b+4>>2]|0)+8>>2]|0)+(d<<2)>>2]|0;if(!((c+-1|0)>>>0<6&(Ka[f[(f[b>>2]|0)+8>>2]&127](b)|0)==1)){h=0;f[a>>2]=h;return}i=Ka[f[(f[b>>2]|0)+36>>2]&127](b)|0;j=La[f[(f[b>>2]|0)+44>>2]&127](b,d)|0;if((i|0)==0|(j|0)==0){h=0;f[a>>2]=h;return}k=La[f[(f[b>>2]|0)+40>>2]&127](b,d)|0;d=f[b+44>>2]|0;b=j+12|0;l=(c|0)==6;if(!k){if(l){c=wk(104)|0;f[c+4>>2]=g;m=c+8|0;f[m>>2]=f[e>>2];f[m+4>>2]=f[e+4>>2];f[m+8>>2]=f[e+8>>2];f[m+12>>2]=f[e+12>>2];f[c+24>>2]=d;f[c+28>>2]=i;f[c+32>>2]=b;f[c+36>>2]=j;f[c>>2]=2968;f[c+44>>2]=0;f[c+48>>2]=0;f[c+52>>2]=d;f[c+56>>2]=i;f[c+60>>2]=b;f[c+64>>2]=j;f[c+40>>2]=3024;f[c+68>>2]=1;i=c+72|0;f[i>>2]=-1;f[i+4>>2]=-1;f[i+8>>2]=-1;f[i+12>>2]=-1;ym(c+88|0);h=c;f[a>>2]=h;return}}else if(l){l=wk(104)|0;f[l+4>>2]=g;g=l+8|0;f[g>>2]=f[e>>2];f[g+4>>2]=f[e+4>>2];f[g+8>>2]=f[e+8>>2];f[g+12>>2]=f[e+12>>2];f[l+24>>2]=d;f[l+28>>2]=k;f[l+32>>2]=b;f[l+36>>2]=j;f[l>>2]=2884;f[l+44>>2]=0;f[l+48>>2]=0;f[l+52>>2]=d;f[l+56>>2]=k;f[l+60>>2]=b;f[l+64>>2]=j;f[l+40>>2]=2940;f[l+68>>2]=1;j=l+72|0;f[j>>2]=-1;f[j+4>>2]=-1;f[j+8>>2]=-1;f[j+12>>2]=-1;ym(l+88|0);h=l;f[a>>2]=h;return}f[a>>2]=0;h=0;f[a>>2]=h;return}function Dd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=u;u=u+16|0;d=c;e=a+40|0;g=e;h=a;i=g+40|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if(vf(e,1,d)|0){g=a;h=e;i=g+40|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));e=d;k=f[e>>2]|0;l=f[e+4>>2]|0;e=a+8|0;m=e;n=a+16|0;o=n;p=f[o>>2]|0;q=f[o+4>>2]|0;o=wl(f[m>>2]|0,f[m+4>>2]|0,p|0,q|0)|0;m=H;if(!(l>>>0>m>>>0|(l|0)==(m|0)&k>>>0>o>>>0)){o=vl(p|0,q|0,k|0,l|0)|0;l=n;f[l>>2]=o;f[l+4>>2]=H;do if((j[a+38>>1]|0)>=514){if(!(rd(a+80|0,a)|0)){r=0;u=c;return r|0}}else{l=a+96|0;g=l;h=a;i=g+40|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if(vf(l,1,d)|0){g=a;h=l;i=g+40|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=d;o=f[l>>2]|0;k=f[l+4>>2]|0;l=e;q=n;p=f[q>>2]|0;m=f[q+4>>2]|0;q=wl(f[l>>2]|0,f[l+4>>2]|0,p|0,m|0)|0;l=H;if(!(k>>>0>l>>>0|(k|0)==(l|0)&o>>>0>q>>>0)){q=vl(p|0,m|0,o|0,k|0)|0;k=n;f[k>>2]=q;f[k+4>>2]=H;break}}r=0;u=c;return r|0}while(0);if(!(Jg(a)|0)){r=0;u=c;return r|0}g=b;h=a;i=g+40|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));r=1;u=c;return r|0}}r=0;u=c;return r|0}function Ed(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=u;u=u+16|0;g=e;h=f[a+40>>2]|0;i=f[a+44>>2]|0;if((h|0)==(i|0)){j=0;u=e;return j|0}a=g+11|0;k=g+4|0;l=d+11|0;m=d+4|0;n=0;o=h;a:while(1){f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=lh(f[o>>2]|0,c,g)|0;p=b[a>>0]|0;b:do if(h){q=p<<24>>24<0;r=p&255;s=q?f[k>>2]|0:r;t=b[l>>0]|0;v=t<<24>>24<0;if((s|0)==((v?f[m>>2]|0:t&255)|0)){t=f[g>>2]|0;w=q?t:g;x=v?f[d>>2]|0:d;v=(s|0)==0;y=t&255;c:do if(q){if(!v?Fi(w,x,s)|0:0){z=0;A=n;B=15;break b}}else if(!v){if((b[x>>0]|0)!=y<<24>>24){C=0;D=n;B=14;break b}t=g;E=r;F=x;while(1){E=E+-1|0;t=t+1|0;if(!E)break c;F=F+1|0;if((b[t>>0]|0)!=(b[F>>0]|0)){C=0;D=n;B=14;break b}}}while(0);C=1;D=f[o>>2]|0;B=14}else{C=0;D=n;B=14}}else{C=3;D=n;B=14}while(0);if((B|0)==14){B=0;if(p<<24>>24<0){z=C;A=D;B=15}else{G=C;H=D}}if((B|0)==15){B=0;Ko(f[g>>2]|0);G=z;H=A}switch(G&3){case 3:case 0:break;default:{j=H;B=18;break a}}o=o+4|0;if((o|0)==(i|0)){j=0;B=18;break}else n=H}if((B|0)==18){u=e;return j|0}return 0}function Fd(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=u;u=u+16|0;e=d;if(!(kc(a,c)|0)){g=0;u=d;return g|0}h=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;i=a+36|0;j=a+40|0;k=f[j>>2]|0;l=f[i>>2]|0;m=k-l>>2;n=l;l=k;if(h>>>0<=m>>>0){if(h>>>0<m>>>0){k=n+(h<<2)|0;if((k|0)!=(l|0)){n=l;do{n=n+-4|0;l=f[n>>2]|0;f[n>>2]=0;if(l|0)Pa[f[(f[l>>2]|0)+4>>2]&127](l)}while((n|0)!=(k|0))}f[j>>2]=k}}else Se(i,h-m|0);m=c+8|0;if((h|0)<=0){g=1;u=d;return g|0}k=c+16|0;j=0;while(1){n=m;l=f[n+4>>2]|0;o=k;p=f[o>>2]|0;q=f[o+4>>2]|0;if(!((l|0)>(q|0)|((l|0)==(q|0)?(f[n>>2]|0)>>>0>p>>>0:0))){g=0;r=21;break}n=b[(f[c>>2]|0)+p>>0]|0;l=vl(p|0,q|0,1,0)|0;q=k;f[q>>2]=l;f[q+4>>2]=H;Ra[f[(f[a>>2]|0)+48>>2]&15](e,a,n);n=(f[i>>2]|0)+(j<<2)|0;q=f[e>>2]|0;f[e>>2]=0;l=f[n>>2]|0;f[n>>2]=q;if(l|0)Pa[f[(f[l>>2]|0)+4>>2]&127](l);l=f[e>>2]|0;f[e>>2]=0;if(l|0)Pa[f[(f[l>>2]|0)+4>>2]&127](l);l=f[(f[i>>2]|0)+(j<<2)>>2]|0;if(!l){g=0;r=21;break}q=f[(f[l>>2]|0)+8>>2]|0;n=Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0;p=La[f[(f[a>>2]|0)+20>>2]&127](a,j)|0;j=j+1|0;if(!(Ma[q&31](l,n,p)|0)){g=0;r=21;break}if((j|0)>=(h|0)){g=1;r=21;break}}if((r|0)==21){u=d;return g|0}return 0}function Gd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return kb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Hd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return mb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Id(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return lb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Jd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(gf(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+36|0,c)|0)){r=0;return r|0}if(!(gf(a+56|0,c)|0)){r=0;return r|0}if(gf(a+76|0,c)|0)return jb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Kd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(gf(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+36|0,c)|0)){r=0;return r|0}if(!(gf(a+56|0,c)|0)){r=0;return r|0}if(gf(a+76|0,c)|0)return ib(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Ld(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(rd(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+32|0,c)|0)){r=0;return r|0}if(!(gf(a+52|0,c)|0)){r=0;return r|0}if(gf(a+72|0,c)|0)return pb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Md(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(rd(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+32|0,c)|0)){r=0;return r|0}if(!(gf(a+52|0,c)|0)){r=0;return r|0}if(gf(a+72|0,c)|0)return nb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Nd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(f[c>>2]|0)+(4-1)&~(4-1);e=f[d>>2]|0;f[c>>2]=d+4;f[a>>2]=e;break a;break}case 10:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a;break}case 11:{d=(f[c>>2]|0)+(4-1)&~(4-1);e=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=e;f[d+4>>2]=0;break a;break}case 12:{d=(f[c>>2]|0)+(8-1)&~(8-1);e=d;g=f[e>>2]|0;h=f[e+4>>2]|0;f[c>>2]=d+8;d=a;f[d>>2]=g;f[d+4>>2]=h;break a;break}case 13:{h=(f[c>>2]|0)+(4-1)&~(4-1);d=f[h>>2]|0;f[c>>2]=h+4;h=(d&65535)<<16>>16;d=a;f[d>>2]=h;f[d+4>>2]=((h|0)<0)<<31>>31;break a;break}case 14:{h=(f[c>>2]|0)+(4-1)&~(4-1);d=f[h>>2]|0;f[c>>2]=h+4;h=a;f[h>>2]=d&65535;f[h+4>>2]=0;break a;break}case 15:{h=(f[c>>2]|0)+(4-1)&~(4-1);d=f[h>>2]|0;f[c>>2]=h+4;h=(d&255)<<24>>24;d=a;f[d>>2]=h;f[d+4>>2]=((h|0)<0)<<31>>31;break a;break}case 16:{h=(f[c>>2]|0)+(4-1)&~(4-1);d=f[h>>2]|0;f[c>>2]=h+4;h=a;f[h>>2]=d&255;f[h+4>>2]=0;break a;break}case 17:{h=(f[c>>2]|0)+(8-1)&~(8-1);i=+p[h>>3];f[c>>2]=h+8;p[a>>3]=i;break a;break}case 18:{h=(f[c>>2]|0)+(8-1)&~(8-1);i=+p[h>>3];f[c>>2]=h+8;p[a>>3]=i;break a;break}default:break a}while(0);while(0);return}function Od(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=u;u=u+16|0;e=d+12|0;g=d;h=wk(52)|0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;f[h+12>>2]=0;f[h+16>>2]=1065353216;i=h+20|0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;f[h+36>>2]=1065353216;f[h+40>>2]=0;f[h+44>>2]=0;f[h+48>>2]=0;jo(e);if(Af(e,f[c+32>>2]|0,h)|0){e=(f[c+4>>2]|0)+4|0;c=f[e>>2]|0;f[e>>2]=h;if(c|0){e=c+40|0;i=f[e>>2]|0;if(i|0){j=c+44|0;k=f[j>>2]|0;if((k|0)==(i|0))l=i;else{m=k;do{m=m+-4|0;k=f[m>>2]|0;f[m>>2]=0;if(k|0){eh(k);Ko(k)}}while((m|0)!=(i|0));l=f[e>>2]|0}f[j>>2]=i;Ko(l)}eh(c);Ko(c)}f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;u=d;return}else{f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;c=wk(32)|0;f[g>>2]=c;f[g+8>>2]=-2147483616;f[g+4>>2]=26;l=c;i=13159;j=l+26|0;do{b[l>>0]=b[i>>0]|0;l=l+1|0;i=i+1|0}while((l|0)<(j|0));b[c+26>>0]=0;f[a>>2]=-1;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);g=h+40|0;a=f[g>>2]|0;if(a|0){c=h+44|0;i=f[c>>2]|0;if((i|0)==(a|0))n=a;else{l=i;do{l=l+-4|0;i=f[l>>2]|0;f[l>>2]=0;if(i|0){eh(i);Ko(i)}}while((l|0)!=(a|0));n=f[g>>2]|0}f[c>>2]=a;Ko(n)}eh(h);Ko(h);u=d;return}}function Pd(a){a=a|0;var b=0,c=0,d=0,e=0;f[a>>2]=3408;b=f[a+388>>2]|0;if(b|0){f[a+392>>2]=b;Ko(b)}b=a+368|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0){b=c+-4|0;d=f[b>>2]|0;if(d|0){e=c+(d<<4)|0;do e=e+-16|0;while((e|0)!=(c|0))}Io(b)}Ch(a+216|0);b=f[a+196>>2]|0;if(b|0){f[a+200>>2]=b;Ko(b)}b=f[a+184>>2]|0;if(b|0){f[a+188>>2]=b;Ko(b)}b=f[a+172>>2]|0;if(b|0){f[a+176>>2]=b;Ko(b)}b=f[a+160>>2]|0;if(b|0){f[a+164>>2]=b;Ko(b)}b=f[a+144>>2]|0;if(b|0){c=b;do{b=c;c=f[c>>2]|0;Ko(b)}while((c|0)!=0)}c=a+136|0;b=f[c>>2]|0;f[c>>2]=0;if(b|0)Ko(b);b=f[a+120>>2]|0;if(b|0)Ko(b);b=f[a+108>>2]|0;if(b|0)Ko(b);b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+60>>2]|0;if(b|0)Ko(b);b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+36>>2]|0;if(b|0){f[a+40>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=a+8|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=f[a+76>>2]|0;if(b|0){f[a+80>>2]=b;Ko(b)}b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=f[a>>2]|0;if(b|0){f[a+4>>2]=b;Ko(b)}Ko(a);return}function Qd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=Ia,k=0,l=0,m=0,o=0,p=0,q=Ia,r=Ia,s=Ia,t=Ia,v=Ia,w=0,x=Ia,y=Ia,z=0,A=0;g=u;u=u+32|0;h=g+16|0;i=g;j=_(n[d+4>>2]);k=(1<<f[d>>2])+-1|0;dn(h);qk(h,j,k)|0;d=f[a>>2]|0;if((d|0)==(f[c>>2]|0)){u=g;return}a=h+4|0;l=i+4|0;m=i+8|0;o=e+16|0;p=e+28|0;e=d;do{d=(f[e>>2]|0)-k|0;if((d|0)>-1){j=_(d|0);q=_(n[a>>2]);r=_(q*j);j=_(n[h>>2]);s=_(r*j);t=q;v=j}else{w=wl(0,0,d|0,((d|0)<0)<<31>>31|0)|0;j=_(+(w>>>0)+4294967296.0*+(H|0));q=_(n[a>>2]);r=_(q*j);j=_(n[h>>2]);s=_(-_(r*j));t=q;v=j}w=(f[e+4>>2]|0)-k|0;if((w|0)>-1)x=_(_(t*_(w|0))*v);else{d=wl(0,0,w|0,((w|0)<0)<<31>>31|0)|0;x=_(-_(_(t*_(+(d>>>0)+4294967296.0*+(H|0)))*v))}d=(f[e+8>>2]|0)-k|0;if((d|0)>-1)y=_(_(t*_(d|0))*v);else{w=wl(0,0,d|0,((d|0)<0)<<31>>31|0)|0;y=_(-_(_(t*_(+(w>>>0)+4294967296.0*+(H|0)))*v))}n[i>>2]=s;n[l>>2]=x;n[m>>2]=y;w=f[o>>2]|0;d=f[w>>2]|0;z=f[p>>2]|0;if(!(b[d+84>>0]|0))A=f[(f[d+68>>2]|0)+(z<<2)>>2]|0;else A=z;z=f[d+40>>2]|0;Bf((f[f[d+64>>2]>>2]|0)+(W(A,z)|0)|0,i+(f[w+4>>2]<<2)|0,z|0)|0;f[p>>2]=(f[p>>2]|0)+1;e=e+12|0}while((e|0)!=(f[c>>2]|0));u=g;return}function Rd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;c=u;u=u+32|0;d=c;e=a+4|0;g=f[a>>2]|0;h=(f[e>>2]|0)-g>>2;i=h+1|0;if(i>>>0>1073741823)$n(a);j=a+8|0;k=(f[j>>2]|0)-g|0;g=k>>1;l=k>>2>>>0<536870911?(g>>>0<i>>>0?i:g):1073741823;g=d+12|0;f[g>>2]=0;f[d+16>>2]=a+8;do if(l)if(l>>>0>1073741823){i=qa(8)|0;Dm(i,13552);f[i>>2]=4908;ta(i|0,1128,105)}else{m=wk(l<<2)|0;break}else m=0;while(0);f[d>>2]=m;i=m+(h<<2)|0;h=d+8|0;k=d+4|0;f[k>>2]=i;n=m+(l<<2)|0;f[g>>2]=n;l=f[b>>2]|0;f[b>>2]=0;f[i>>2]=l;l=i+4|0;f[h>>2]=l;b=f[a>>2]|0;m=f[e>>2]|0;if((m|0)==(b|0)){o=i;p=g;q=h;r=b;s=l;t=m;v=n;w=o;f[a>>2]=w;f[k>>2]=r;f[e>>2]=s;f[q>>2]=t;x=f[j>>2]|0;f[j>>2]=v;f[p>>2]=x;f[d>>2]=r;Og(d);u=c;return}n=m;m=i;do{n=n+-4|0;i=f[n>>2]|0;f[n>>2]=0;f[m+-4>>2]=i;m=(f[k>>2]|0)+-4|0;f[k>>2]=m}while((n|0)!=(b|0));o=m;p=g;q=h;r=f[a>>2]|0;s=f[h>>2]|0;t=f[e>>2]|0;v=f[g>>2]|0;w=o;f[a>>2]=w;f[k>>2]=r;f[e>>2]=s;f[q>>2]=t;x=f[j>>2]|0;f[j>>2]=v;f[p>>2]=x;f[d>>2]=r;Og(d);u=c;return}function Sd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return db(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Td(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return fb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Ud(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(Kc(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+544|0,c)|0)){r=0;return r|0}if(!(gf(a+564|0,c)|0)){r=0;return r|0}if(gf(a+584|0,c)|0)return eb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Vd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;e=u;u=u+32|0;g=e+8|0;i=e+4|0;j=e;f[g>>2]=0;k=g+4|0;f[k>>2]=0;f[g+8>>2]=0;l=c+8|0;m=f[l>>2]|0;n=f[l+4>>2]|0;l=c+16|0;o=l;p=f[o>>2]|0;q=f[o+4>>2]|0;o=vl(p|0,q|0,4,0)|0;r=H;a:do if((n|0)<(r|0)|(n|0)==(r|0)&m>>>0<o>>>0)s=0;else{t=f[c>>2]|0;v=t+p|0;w=h[v>>0]|h[v+1>>0]<<8|h[v+2>>0]<<16|h[v+3>>0]<<24;v=l;f[v>>2]=o;f[v+4>>2]=r;b:do switch(w|0){case 3:{if(!((n|0)>(r|0)|(n|0)==(r|0)&m>>>0>o>>>0)){s=0;break a}v=b[t+o>>0]|0;x=vl(p|0,q|0,5,0)|0;y=l;f[y>>2]=x;f[y+4>>2]=H;f[a+8>>2]=v<<24>>24;if(v<<24>>24==1)if($b(a,c,g)|0)break b;else{s=0;break a}else{Pi(5156,23,1,f[948]|0)|0;s=0;break a}break}case 2:{if(!($b(a,c,g)|0)){s=0;break a}break}default:{Pi(5180,24,1,f[948]|0)|0;s=0;break a}}while(0);f[i>>2]=f[g>>2];f[j>>2]=f[k>>2];Qd(i,j,a,d);s=1}while(0);d=f[g>>2]|0;if(!d){u=e;return s|0}f[k>>2]=d;Ko(d);u=e;return s|0}function Wd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(gf(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+36|0,c)|0)){r=0;return r|0}if(!(gf(a+56|0,c)|0)){r=0;return r|0}if(gf(a+76|0,c)|0)return cb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Xd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(gf(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+36|0,c)|0)){r=0;return r|0}if(!(gf(a+56|0,c)|0)){r=0;return r|0}if(gf(a+76|0,c)|0)return bb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Yd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(rd(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+32|0,c)|0)){r=0;return r|0}if(!(gf(a+52|0,c)|0)){r=0;return r|0}if(gf(a+72|0,c)|0)return hb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function Zd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+8|0;g=e;i=f[g>>2]|0;j=f[g+4>>2]|0;g=c+16|0;k=g;l=f[k>>2]|0;m=f[k+4>>2]|0;k=vl(l|0,m|0,4,0)|0;n=H;if((j|0)<(n|0)|(j|0)==(n|0)&i>>>0<k>>>0){o=f[a>>2]|0;p=l;q=m}else{m=(f[c>>2]|0)+l|0;l=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[a>>0]=l;b[a+1>>0]=l>>8;b[a+2>>0]=l>>16;b[a+3>>0]=l>>24;m=g;k=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=H;i=g;f[i>>2]=k;f[i+4>>2]=m;o=l;p=k;q=m}if(o>>>0>32){r=0;return r|0}o=a+4|0;m=e;e=f[m>>2]|0;k=f[m+4>>2]|0;m=vl(p|0,q|0,4,0)|0;q=H;if((k|0)<(q|0)|(k|0)==(q|0)&e>>>0<m>>>0)s=f[o>>2]|0;else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;b[o>>0]=p;b[o+1>>0]=p>>8;b[o+2>>0]=p>>16;b[o+3>>0]=p>>24;m=g;e=vl(f[m>>2]|0,f[m+4>>2]|0,4,0)|0;m=g;f[m>>2]=e;f[m+4>>2]=H;s=p}if(!s){r=1;return r|0}f[a+8>>2]=0;if(!(rd(a+16|0,c)|0)){r=0;return r|0}if(!(gf(a+32|0,c)|0)){r=0;return r|0}if(!(gf(a+52|0,c)|0)){r=0;return r|0}if(gf(a+72|0,c)|0)return gb(a,f[o>>2]|0,d)|0;else{r=0;return r|0}return 0}function _d(a){a=a|0;var b=0,c=0,d=0,e=0;f[a>>2]=3240;b=a+368|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0){b=c+-4|0;d=f[b>>2]|0;if(d|0){e=c+(d<<4)|0;do e=e+-16|0;while((e|0)!=(c|0))}Io(b)}Ch(a+216|0);b=f[a+196>>2]|0;if(b|0){f[a+200>>2]=b;Ko(b)}b=f[a+184>>2]|0;if(b|0){f[a+188>>2]=b;Ko(b)}b=f[a+172>>2]|0;if(b|0){f[a+176>>2]=b;Ko(b)}b=f[a+160>>2]|0;if(b|0){f[a+164>>2]=b;Ko(b)}b=f[a+144>>2]|0;if(b|0){c=b;do{b=c;c=f[c>>2]|0;Ko(b)}while((c|0)!=0)}c=a+136|0;b=f[c>>2]|0;f[c>>2]=0;if(b|0)Ko(b);b=f[a+120>>2]|0;if(b|0)Ko(b);b=f[a+108>>2]|0;if(b|0)Ko(b);b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+60>>2]|0;if(b|0)Ko(b);b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+36>>2]|0;if(b|0){f[a+40>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=a+8|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=f[a+76>>2]|0;if(b|0){f[a+80>>2]=b;Ko(b)}b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=f[a>>2]|0;if(b|0){f[a+4>>2]=b;Ko(b)}Ko(a);return}function $d(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=u;u=u+16|0;c=b+4|0;d=b;e=a+8|0;g=f[e>>2]|0;Wh(f[a+4>>2]|0,(f[g+28>>2]|0)-(f[g+24>>2]|0)>>2);g=a+100|0;h=f[e>>2]|0;i=(f[h+28>>2]|0)-(f[h+24>>2]|0)>>2;f[c>>2]=0;h=a+104|0;j=f[g>>2]|0;k=(f[h>>2]|0)-j>>2;if(i>>>0<=k>>>0){if(i>>>0<k>>>0)f[h>>2]=j+(i<<2)}else Of(g,i-k|0,c);k=a+120|0;a=f[k>>2]|0;if(!a){i=f[e>>2]|0;g=(f[i+4>>2]|0)-(f[i>>2]|0)>>2;i=(g>>>0)/3|0;if(g>>>0<=2){l=1;u=b;return l|0}g=0;while(1){f[d>>2]=g*3;f[c>>2]=f[d>>2];g=g+1|0;if(!(xb(e,c)|0)){l=0;m=14;break}if(g>>>0>=i>>>0){l=1;m=14;break}}if((m|0)==14){u=b;return l|0}}else{i=f[a>>2]|0;if((f[a+4>>2]|0)==(i|0)){l=1;u=b;return l|0}a=0;g=i;while(1){f[d>>2]=f[g+(a<<2)>>2];f[c>>2]=f[d>>2];a=a+1|0;if(!(xb(e,c)|0)){l=0;m=14;break}i=f[k>>2]|0;g=f[i>>2]|0;if(a>>>0>=(f[i+4>>2]|0)-g>>2>>>0){l=1;m=14;break}}if((m|0)==14){u=b;return l|0}}return 0}function ae(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=u;u=u+32|0;e=d+12|0;g=d;h=Wi(c,0)|0;if(!h){f[a>>2]=0;u=d;return}i=f[c+100>>2]|0;j=f[c+96>>2]|0;c=i-j|0;k=(c|0)/12|0;f[e>>2]=0;l=e+4|0;f[l>>2]=0;m=e+8|0;f[m>>2]=0;n=j;do if(c)if(k>>>0>357913941)$n(e);else{o=wk(c)|0;f[e>>2]=o;f[m>>2]=o+(k*12|0);oh(o|0,0,c|0)|0;f[l>>2]=o+c;p=o;break}else p=0;while(0);f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;if((i|0)!=(j|0)){j=g+4|0;i=g+8|0;if(!(b[h+84>>0]|0)){c=f[h+68>>2]|0;h=0;do{m=f[c+(f[n+(h*12|0)>>2]<<2)>>2]|0;f[g>>2]=m;o=f[c+(f[n+(h*12|0)+4>>2]<<2)>>2]|0;f[j>>2]=o;q=f[c+(f[n+(h*12|0)+8>>2]<<2)>>2]|0;f[i>>2]=q;f[p+(h*12|0)>>2]=m;f[p+(h*12|0)+4>>2]=o;f[p+(h*12|0)+8>>2]=q;h=h+1|0}while(h>>>0<k>>>0)}else{h=0;do{c=n+(h*12|0)|0;f[g>>2]=f[c>>2];f[g+4>>2]=f[c+4>>2];f[g+8>>2]=f[c+8>>2];f[p+(h*12|0)>>2]=f[g>>2];f[p+(h*12|0)+4>>2]=f[j>>2];f[p+(h*12|0)+8>>2]=f[i>>2];h=h+1|0}while(h>>>0<k>>>0)}}og(a,e);a=f[e>>2]|0;if(a|0){f[l>>2]=a;Ko(a)}u=d;return}function be(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=f[a+8>>2]|0;e=a+76|0;g=f[e>>2]|0;h=f[g+80>>2]|0;b[c+84>>0]=0;i=c+68|0;j=c+72|0;k=f[i>>2]|0;l=(f[j>>2]|0)-k>>2;if(h>>>0<=l>>>0)if(h>>>0<l>>>0){f[j>>2]=k+(h<<2);m=g;n=h}else{m=g;n=h}else{Of(i,h-l|0,3328);l=f[e>>2]|0;m=l;n=f[l+80>>2]|0}l=f[m+96>>2]|0;e=(f[m+100>>2]|0)-l|0;m=(e|0)/12|0;h=l;if(!e){o=1;return o|0}e=a+80|0;a=c+68|0;c=0;while(1){l=c*3|0;if((l|0)==-1){o=0;p=11;break}i=f[d>>2]|0;g=f[i+(l<<2)>>2]|0;if((g|0)==-1){o=0;p=11;break}k=f[(f[e>>2]|0)+12>>2]|0;j=f[k+(g<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}g=f[a>>2]|0;f[g+(f[h+(c*12|0)>>2]<<2)>>2]=j;j=l+1|0;if((j|0)==-1){o=0;p=11;break}q=f[i+(j<<2)>>2]|0;if((q|0)==-1){o=0;p=11;break}j=f[k+(q<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}f[g+(f[h+(c*12|0)+4>>2]<<2)>>2]=j;j=l+2|0;if((j|0)==-1){o=0;p=11;break}l=f[i+(j<<2)>>2]|0;if((l|0)==-1){o=0;p=11;break}j=f[k+(l<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}f[g+(f[h+(c*12|0)+8>>2]<<2)>>2]=j;c=c+1|0;if(c>>>0>=m>>>0){o=1;p=11;break}}if((p|0)==11)return o|0;return 0}function ce(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;e=u;u=u+32|0;g=e+20|0;h=e+16|0;i=e;j=c+24|0;k=b[j>>0]|0;l=k<<24>>24;m=f[a+80>>2]|0;a=W(m,l)|0;f[i>>2]=f[294];f[i+4>>2]=f[295];f[i+8>>2]=f[296];f[i+12>>2]=f[297];n=d+4|0;o=f[d>>2]|0;p=(f[n>>2]|0)-o>>2;if(a>>>0<=p>>>0){if(a>>>0<p>>>0)f[n>>2]=o+(a<<2)}else Eg(d,a-p|0);if(!m){q=1;u=e;return q|0}p=c+84|0;a=c+68|0;if(k<<24>>24<=0){k=0;while(1){if(!(b[p>>0]|0))r=f[(f[a>>2]|0)+(k<<2)>>2]|0;else r=k;f[h>>2]=r;o=b[j>>0]|0;f[g>>2]=f[h>>2];if(!(ob(c,g,o,i)|0)){q=0;s=19;break}k=k+1|0;if(k>>>0>=m>>>0){q=1;s=19;break}}if((s|0)==19){u=e;return q|0}}k=0;r=0;while(1){if(!(b[p>>0]|0))t=f[(f[a>>2]|0)+(r<<2)>>2]|0;else t=r;f[h>>2]=t;o=b[j>>0]|0;f[g>>2]=f[h>>2];if(!(ob(c,g,o,i)|0)){q=0;s=19;break}o=f[d>>2]|0;n=0;v=k;while(1){f[o+(v<<2)>>2]=f[i+(n<<2)>>2];n=n+1|0;if((n|0)==(l|0))break;else v=v+1|0}r=r+1|0;if(r>>>0>=m>>>0){q=1;s=19;break}else k=k+l|0}if((s|0)==19){u=e;return q|0}return 0}function de(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c=u;u=u+32|0;d=c;e=a+8|0;g=f[e>>2]|0;h=a+4|0;i=f[h>>2]|0;j=i;if(g-i>>2>>>0>=b>>>0){oh(i|0,0,b<<2|0)|0;f[h>>2]=j+(b<<2);u=c;return}k=f[a>>2]|0;l=i-k>>2;m=l+b|0;n=k;if(m>>>0>1073741823)$n(a);o=g-k|0;p=o>>1;q=o>>2>>>0<536870911?(p>>>0<m>>>0?m:p):1073741823;p=d+12|0;f[p>>2]=0;f[d+16>>2]=a+8;do if(q)if(q>>>0>1073741823){m=qa(8)|0;Dm(m,13552);f[m>>2]=4908;ta(m|0,1128,105)}else{r=wk(q<<2)|0;break}else r=0;while(0);f[d>>2]=r;m=r+(l<<2)|0;l=d+8|0;o=d+4|0;f[o>>2]=m;s=r+(q<<2)|0;f[p>>2]=s;oh(m|0,0,b<<2|0)|0;q=m+(b<<2)|0;f[l>>2]=q;if((j|0)==(n|0)){t=m;v=p;w=l;x=k;y=q;z=i;A=s;B=g}else{g=j;j=m;do{g=g+-4|0;m=f[g>>2]|0;f[g>>2]=0;f[j+-4>>2]=m;j=(f[o>>2]|0)+-4|0;f[o>>2]=j}while((g|0)!=(n|0));t=j;v=p;w=l;x=f[a>>2]|0;y=f[l>>2]|0;z=f[h>>2]|0;A=f[p>>2]|0;B=f[e>>2]|0}f[a>>2]=t;f[o>>2]=x;f[h>>2]=y;f[w>>2]=z;f[e>>2]=A;f[v>>2]=B;f[d>>2]=x;Og(d);u=c;return}function ee(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=f[a+8>>2]|0;e=a+112|0;g=f[e>>2]|0;h=f[g+80>>2]|0;b[c+84>>0]=0;i=c+68|0;j=c+72|0;k=f[i>>2]|0;l=(f[j>>2]|0)-k>>2;if(h>>>0<=l>>>0)if(h>>>0<l>>>0){f[j>>2]=k+(h<<2);m=g;n=h}else{m=g;n=h}else{Of(i,h-l|0,3328);l=f[e>>2]|0;m=l;n=f[l+80>>2]|0}l=f[m+96>>2]|0;e=(f[m+100>>2]|0)-l|0;m=(e|0)/12|0;h=l;if(!e){o=1;return o|0}e=a+116|0;a=c+68|0;c=0;while(1){l=c*3|0;if((l|0)==-1){o=0;p=11;break}i=f[d>>2]|0;g=f[i+(l<<2)>>2]|0;if((g|0)==-1){o=0;p=11;break}k=f[(f[e>>2]|0)+12>>2]|0;j=f[k+(g<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}g=f[a>>2]|0;f[g+(f[h+(c*12|0)>>2]<<2)>>2]=j;j=l+1|0;if((j|0)==-1){o=0;p=11;break}q=f[i+(j<<2)>>2]|0;if((q|0)==-1){o=0;p=11;break}j=f[k+(q<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}f[g+(f[h+(c*12|0)+4>>2]<<2)>>2]=j;j=l+2|0;if((j|0)==-1){o=0;p=11;break}l=f[i+(j<<2)>>2]|0;if((l|0)==-1){o=0;p=11;break}j=f[k+(l<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=11;break}f[g+(f[h+(c*12|0)+8>>2]<<2)>>2]=j;c=c+1|0;if(c>>>0>=m>>>0){o=1;p=11;break}}if((p|0)==11)return o|0;return 0}function fe(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=c+8|0;e=f[d>>2]|0;g=f[d+4>>2]|0;d=c+16|0;i=d;k=f[i>>2]|0;l=f[i+4>>2]|0;i=vl(k|0,l|0,4,0)|0;m=H;if((g|0)<(m|0)|(g|0)==(m|0)&e>>>0<i>>>0){n=0;return n|0}o=f[c>>2]|0;p=o+k|0;q=h[p>>0]|h[p+1>>0]<<8|h[p+2>>0]<<16|h[p+3>>0]<<24;p=d;f[p>>2]=i;f[p+4>>2]=m;m=vl(k|0,l|0,8,0)|0;p=H;if((g|0)<(p|0)|(g|0)==(p|0)&e>>>0<m>>>0){n=0;return n|0}r=o+i|0;i=h[r>>0]|h[r+1>>0]<<8|h[r+2>>0]<<16|h[r+3>>0]<<24;r=d;f[r>>2]=m;f[r+4>>2]=p;if((q|0)>(i|0)){n=0;return n|0}f[a+12>>2]=q;f[a+16>>2]=i;r=wl(i|0,((i|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;q=H;if(!(q>>>0<0|(q|0)==0&r>>>0<2147483647)){n=0;return n|0}q=r+1|0;f[a+20>>2]=q;r=(q|0)/2|0;i=a+24|0;f[i>>2]=r;f[a+28>>2]=0-r;if(!(q&1))f[i>>2]=r+-1;if((j[c+38>>1]|0)<514){a:do if((g|0)>(p|0)|(g|0)==(p|0)&e>>>0>m>>>0){r=b[o+m>>0]|0;i=vl(k|0,l|0,9,0)|0;q=d;f[q>>2]=i;f[q+4>>2]=H;switch(r<<24>>24){case 0:{s=0;break a;break}case 1:{s=1;break a;break}default:{n=0;return n|0}}}else s=0;while(0);f[a+88>>2]=s}n=rd(a+108|0,c)|0;return n|0}function ge(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(f[a+64>>2]|0)){d=wk(32)|0;Kk(d);e=a+64|0;g=f[e>>2]|0;f[e>>2]=d;if(!g)h=d;else{d=f[g>>2]|0;if(d|0){f[g+4>>2]=d;Ko(d)}Ko(g);h=f[e>>2]|0}oi(a,h,0,0,0,0);i=a}else i=a;if(!(jh(i,c)|0))return;b[a+84>>0]=b[c+84>>0]|0;f[a+80>>2]=f[c+80>>2];if((a|0)!=(c|0))df(a+68|0,f[c+68>>2]|0,f[c+72>>2]|0);i=f[c+88>>2]|0;if(!i){c=a+88|0;h=f[c>>2]|0;f[c>>2]=0;if(!h)return;c=f[h+8>>2]|0;if(c|0){f[h+12>>2]=c;Ko(c)}Ko(h);return}h=wk(40)|0;f[h>>2]=f[i>>2];c=h+8|0;e=i+8|0;f[c>>2]=0;g=h+12|0;f[g>>2]=0;d=h+16|0;f[d>>2]=0;j=i+12|0;k=(f[j>>2]|0)-(f[e>>2]|0)|0;if(k|0){if((k|0)<0)$n(c);l=wk(k)|0;f[g>>2]=l;f[c>>2]=l;f[d>>2]=l+k;k=f[e>>2]|0;e=(f[j>>2]|0)-k|0;if((e|0)>0){Bf(l|0,k|0,e|0)|0;f[g>>2]=l+e}}e=h+24|0;l=i+24|0;f[e>>2]=f[l>>2];f[e+4>>2]=f[l+4>>2];f[e+8>>2]=f[l+8>>2];f[e+12>>2]=f[l+12>>2];l=a+88|0;a=f[l>>2]|0;f[l>>2]=h;if(!a)return;h=f[a+8>>2]|0;if(h|0){f[a+12>>2]=h;Ko(h)}Ko(a);return}function he(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=Ia,x=Ia,y=Ia,z=0;d=u;u=u+16|0;e=d;g=f[a+24>>2]|0;h=a+8|0;i=b[(f[h>>2]|0)+24>>0]|0;j=i<<24>>24;k=j<<2;l=Ho(j>>>0>1073741823?-1:j<<2)|0;dn(e);if(!(qk(e,_(n[a+32>>2]),(1<<g)+-1|0)|0)){m=0;Io(l);u=d;return m|0}g=f[a+16>>2]|0;if(!(f[g+80>>2]|0))o=0;else o=(f[f[g>>2]>>2]|0)+(f[g+48>>2]|0)|0;if(!c){m=1;Io(l);u=d;return m|0}g=e+4|0;p=a+28|0;if(i<<24>>24<=0){i=0;a=0;while(1){Bf((f[f[(f[h>>2]|0)+64>>2]>>2]|0)+a|0,l|0,k|0)|0;i=i+1|0;if((i|0)==(c|0)){m=1;break}else a=a+k|0}Io(l);u=d;return m|0}a=0;i=0;q=0;while(1){r=f[p>>2]|0;s=0;t=i;while(1){v=f[o+(t<<2)>>2]|0;if((v|0)>-1){w=_(v|0);x=_(_(n[g>>2])*w);y=_(x*_(n[e>>2]))}else{z=wl(0,0,v|0,((v|0)<0)<<31>>31|0)|0;x=_(+(z>>>0)+4294967296.0*+(H|0));w=_(_(n[g>>2])*x);y=_(-_(w*_(n[e>>2])))}w=_(y+_(n[r+(s<<2)>>2]));n[l+(s<<2)>>2]=w;s=s+1|0;if((s|0)==(j|0))break;else t=t+1|0}Bf((f[f[(f[h>>2]|0)+64>>2]>>2]|0)+q|0,l|0,k|0)|0;a=a+1|0;if((a|0)==(c|0)){m=1;break}else{i=i+j|0;q=q+k|0}}Io(l);u=d;return m|0}function ie(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;e=u;u=u+16|0;g=e;i=d+8|0;j=f[i>>2]|0;k=f[i+4>>2]|0;i=d+16|0;l=i;m=f[l>>2]|0;n=f[l+4>>2]|0;if((k|0)>(n|0)|(k|0)==(n|0)&j>>>0>m>>>0){l=b[(f[d>>2]|0)+m>>0]|0;o=vl(m|0,n|0,1,0)|0;p=H;q=i;f[q>>2]=o;f[q+4>>2]=p;if(l<<24>>24!=-2){r=l;s=p;t=o;v=3}}else{r=0;s=n;t=m;v=3}if((v|0)==3){if((k|0)>(s|0)|(k|0)==(s|0)&j>>>0>t>>>0){j=b[(f[d>>2]|0)+t>>0]|0;k=vl(t|0,s|0,1,0)|0;s=i;f[s>>2]=k;f[s+4>>2]=H;w=j}else w=0;Sa[f[(f[a>>2]|0)+40>>2]&7](g,a,r<<24>>24,w<<24>>24);w=a+20|0;r=f[g>>2]|0;f[g>>2]=0;j=f[w>>2]|0;f[w>>2]=r;if(j){Pa[f[(f[j>>2]|0)+4>>2]&127](j);j=f[g>>2]|0;f[g>>2]=0;if(j|0)Pa[f[(f[j>>2]|0)+4>>2]&127](j)}else f[g>>2]=0}g=f[a+20>>2]|0;if(g|0?!(La[f[(f[a>>2]|0)+28>>2]&127](a,g)|0):0){x=0;u=e;return x|0}if(!(Ma[f[(f[a>>2]|0)+36>>2]&31](a,c,d)|0)){x=0;u=e;return x|0}d=(f[c+4>>2]|0)-(f[c>>2]|0)>>2;c=f[a+4>>2]|0;if((c|0?((h[c+36>>0]|0)<<8&65535)<512:0)?!(La[f[(f[a>>2]|0)+48>>2]&127](a,d)|0):0){x=0;u=e;return x|0}x=1;u=e;return x|0}function je(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=u;u=u+32|0;d=c+24|0;e=c+16|0;g=c+8|0;h=c;f[a>>2]=3316;f[a+4>>2]=f[b+4>>2];i=a+8|0;j=b+8|0;f[i>>2]=0;k=a+12|0;f[k>>2]=0;l=a+16|0;f[l>>2]=0;m=b+12|0;n=f[m>>2]|0;do if(n|0)if((n|0)<0)$n(i);else{o=((n+-1|0)>>>5)+1|0;p=wk(o<<2)|0;f[i>>2]=p;f[k>>2]=0;f[l>>2]=o;o=f[j>>2]|0;f[g>>2]=o;f[g+4>>2]=0;p=f[m>>2]|0;f[h>>2]=o+(p>>>5<<2);f[h+4>>2]=p&31;f[e>>2]=f[g>>2];f[e+4>>2]=f[g+4>>2];f[d>>2]=f[h>>2];f[d+4>>2]=f[h+4>>2];xe(i,e,d);break}while(0);i=a+20|0;f[i>>2]=0;m=a+24|0;f[m>>2]=0;j=a+28|0;f[j>>2]=0;a=b+24|0;l=f[a>>2]|0;if(!l){u=c;return}if((l|0)<0)$n(i);k=((l+-1|0)>>>5)+1|0;l=wk(k<<2)|0;f[i>>2]=l;f[m>>2]=0;f[j>>2]=k;k=f[b+20>>2]|0;f[g>>2]=k;f[g+4>>2]=0;b=f[a>>2]|0;f[h>>2]=k+(b>>>5<<2);f[h+4>>2]=b&31;f[e>>2]=f[g>>2];f[e+4>>2]=f[g+4>>2];f[d>>2]=f[h>>2];f[d+4>>2]=f[h+4>>2];xe(i,e,d);u=c;return}function ke(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=u;u=u+32|0;d=c+12|0;e=c;g=b*3|0;f[d>>2]=0;h=d+4|0;f[h>>2]=0;i=d+8|0;f[i>>2]=0;do if(g)if(g>>>0>1073741823)$n(d);else{j=b*12|0;k=wk(j)|0;f[d>>2]=k;l=k+(g<<2)|0;f[i>>2]=l;oh(k|0,0,j|0)|0;f[h>>2]=l;m=k;break}else m=0;while(0);if(kh(g,1,f[a+32>>2]|0,m)|0)if(!b)n=1;else{m=a+44|0;a=e+4|0;g=e+8|0;i=0;k=0;l=0;while(1){f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;j=f[d>>2]|0;o=f[j+(k<<2)>>2]|0;p=o>>>1;q=((o&1|0)==0?p:0-p|0)+l|0;f[e>>2]=q;p=f[j+(k+1<<2)>>2]|0;o=p>>>1;r=((p&1|0)==0?o:0-o|0)+q|0;f[a>>2]=r;q=f[j+(k+2<<2)>>2]|0;j=q>>>1;l=((q&1|0)==0?j:0-j|0)+r|0;f[g>>2]=l;r=f[m>>2]|0;j=r+100|0;q=f[j>>2]|0;if((q|0)==(f[r+104>>2]|0))yg(r+96|0,e);else{f[q>>2]=f[e>>2];f[q+4>>2]=f[e+4>>2];f[q+8>>2]=f[e+8>>2];f[j>>2]=(f[j>>2]|0)+12}i=i+1|0;if(i>>>0>=b>>>0){n=1;break}else k=k+3|0}}else n=0;k=f[d>>2]|0;if(!k){u=c;return n|0}f[h>>2]=k;Ko(k);u=c;return n|0}function le(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=u;u=u+32|0;d=c+24|0;e=c+16|0;g=c+8|0;h=c;f[a>>2]=3364;f[a+4>>2]=f[b+4>>2];i=a+8|0;j=b+8|0;f[i>>2]=0;k=a+12|0;f[k>>2]=0;l=a+16|0;f[l>>2]=0;m=b+12|0;n=f[m>>2]|0;do if(n|0)if((n|0)<0)$n(i);else{o=((n+-1|0)>>>5)+1|0;p=wk(o<<2)|0;f[i>>2]=p;f[k>>2]=0;f[l>>2]=o;o=f[j>>2]|0;f[g>>2]=o;f[g+4>>2]=0;p=f[m>>2]|0;f[h>>2]=o+(p>>>5<<2);f[h+4>>2]=p&31;f[e>>2]=f[g>>2];f[e+4>>2]=f[g+4>>2];f[d>>2]=f[h>>2];f[d+4>>2]=f[h+4>>2];xe(i,e,d);break}while(0);i=a+20|0;f[i>>2]=0;m=a+24|0;f[m>>2]=0;j=a+28|0;f[j>>2]=0;a=b+24|0;l=f[a>>2]|0;if(!l){u=c;return}if((l|0)<0)$n(i);k=((l+-1|0)>>>5)+1|0;l=wk(k<<2)|0;f[i>>2]=l;f[m>>2]=0;f[j>>2]=k;k=f[b+20>>2]|0;f[g>>2]=k;f[g+4>>2]=0;b=f[a>>2]|0;f[h>>2]=k+(b>>>5<<2);f[h+4>>2]=b&31;f[e>>2]=f[g>>2];f[e+4>>2]=f[g+4>>2];f[d>>2]=f[h>>2];f[d+4>>2]=f[h+4>>2];xe(i,e,d);u=c;return}function me(a){a=a|0;var b=0,c=0;f[a>>2]=3456;gh(a+232|0);Ch(a+216|0);b=f[a+196>>2]|0;if(b|0){f[a+200>>2]=b;Ko(b)}b=f[a+184>>2]|0;if(b|0){f[a+188>>2]=b;Ko(b)}b=f[a+172>>2]|0;if(b|0){f[a+176>>2]=b;Ko(b)}b=f[a+160>>2]|0;if(b|0){f[a+164>>2]=b;Ko(b)}b=f[a+144>>2]|0;if(b|0){c=b;do{b=c;c=f[c>>2]|0;Ko(b)}while((c|0)!=0)}c=a+136|0;b=f[c>>2]|0;f[c>>2]=0;if(b|0)Ko(b);b=f[a+120>>2]|0;if(b|0)Ko(b);b=f[a+108>>2]|0;if(b|0)Ko(b);b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+60>>2]|0;if(b|0)Ko(b);b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+36>>2]|0;if(b|0){f[a+40>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=a+8|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=f[a+76>>2]|0;if(b|0){f[a+80>>2]=b;Ko(b)}b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=f[a>>2]|0;if(b|0){f[a+4>>2]=b;Ko(b)}Ko(a);return}function ne(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=u;u=u+80|0;h=g;i=g+60|0;j=g+40|0;k=h;l=d;m=k+40|0;do{f[k>>2]=f[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));fc(a,h,i);if(f[a>>2]|0){u=g;return}h=a+4|0;n=h+11|0;if((b[n>>0]|0)<0)Ko(f[h>>2]|0);if(b[i+7>>0]|0){f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;o=wk(32)|0;f[j>>2]=o;f[j+8>>2]=-2147483616;f[j+4>>2]=27;k=o;l=11903;m=k+27|0;do{b[k>>0]=b[l>>0]|0;k=k+1|0;l=l+1|0}while((k|0)<(m|0));b[o+27>>0]=0;f[a>>2]=-1;Yi(h,j);if((b[j+11>>0]|0)<0)Ko(f[j>>2]|0);u=g;return}zf(j,b[i+8>>0]|0);i=f[j>>2]|0;if(!i){o=j+16|0;l=f[o>>2]|0;f[o>>2]=0;Bc(a,l,c,d,e);if(!(f[a>>2]|0)){if((b[n>>0]|0)<0)Ko(f[h>>2]|0);f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0}if(l|0)Pa[f[(f[l>>2]|0)+4>>2]&127](l)}else{f[a>>2]=i;Yi(h,j+4|0)}h=j+16|0;i=f[h>>2]|0;f[h>>2]=0;if(i|0)Pa[f[(f[i>>2]|0)+4>>2]&127](i);i=j+4|0;if((b[i+11>>0]|0)<0)Ko(f[i>>2]|0);u=g;return}function oe(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0;g=u;u=u+16|0;h=g;i=c+24|0;k=b[i>>0]|0;l=k<<24>>24;f[h>>2]=0;m=h+4|0;f[m>>2]=0;n=h+8|0;f[n>>2]=0;do if(k<<24>>24)if(k<<24>>24<0)$n(h);else{o=l<<1;p=wk(o)|0;f[h>>2]=p;q=p+(l<<1)|0;f[n>>2]=q;oh(p|0,0,o|0)|0;f[m>>2]=q;q=l<<1;o=wk(q)|0;oh(o|0,0,q|0)|0;r=o;s=o;t=p;v=p;break}else{r=0;s=0;t=0;v=0}while(0);l=c+80|0;if(f[l>>2]|0){n=c+48|0;h=c+40|0;k=c+64|0;p=a+48|0;a=0;o=v;while(1){q=n;w=f[q>>2]|0;x=f[q+4>>2]|0;q=h;y=f[q>>2]|0;z=Bk(y|0,f[q+4>>2]|0,a|0,0)|0;q=vl(z|0,H|0,w|0,x|0)|0;Bf(o|0,(f[f[c>>2]>>2]|0)+q|0,y|0)|0;y=b[i>>0]|0;if(y<<24>>24>0){q=f[p>>2]|0;x=y<<24>>24;y=0;do{d[s+(y<<1)>>1]=(f[q+(y+e<<2)>>2]|0)+(j[t+(y<<1)>>1]|0);y=y+1|0}while((y|0)<(x|0));A=v}else A=o;x=f[h>>2]|0;Bf((f[f[k>>2]>>2]|0)+(W(a,x)|0)|0,s|0,x|0)|0;a=a+1|0;if(a>>>0>=(f[l>>2]|0)>>>0)break;else o=A}}if(r|0)Ko(s);if(!t){u=g;return 1}f[m>>2]=t;Ko(v);u=g;return 1}function pe(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;e=u;u=u+16|0;g=e;h=c+24|0;i=b[h>>0]|0;j=i<<24>>24;f[g>>2]=0;k=g+4|0;f[k>>2]=0;l=g+8|0;f[l>>2]=0;do if(i<<24>>24)if(i<<24>>24<0)$n(g);else{m=j<<2;n=wk(m)|0;f[g>>2]=n;o=n+(j<<2)|0;f[l>>2]=o;oh(n|0,0,m|0)|0;f[k>>2]=o;o=j<<2;m=wk(o)|0;oh(m|0,0,o|0)|0;p=m;q=m;r=n;s=n;break}else{p=0;q=0;r=0;s=0}while(0);j=c+80|0;if(f[j>>2]|0){l=c+48|0;g=c+40|0;i=c+64|0;n=a+48|0;a=0;m=s;while(1){o=l;t=f[o>>2]|0;v=f[o+4>>2]|0;o=g;w=f[o>>2]|0;x=Bk(w|0,f[o+4>>2]|0,a|0,0)|0;o=vl(x|0,H|0,t|0,v|0)|0;Bf(m|0,(f[f[c>>2]>>2]|0)+o|0,w|0)|0;w=b[h>>0]|0;if(w<<24>>24>0){o=f[n>>2]|0;v=w<<24>>24;w=0;do{f[q+(w<<2)>>2]=(f[o+(w+d<<2)>>2]|0)+(f[r+(w<<2)>>2]|0);w=w+1|0}while((w|0)<(v|0));y=s}else y=m;v=f[g>>2]|0;Bf((f[f[i>>2]>>2]|0)+(W(a,v)|0)|0,q|0,v|0)|0;a=a+1|0;if(a>>>0>=(f[j>>2]|0)>>>0)break;else m=y}}if(p|0)Ko(q);if(!r){u=e;return 1}f[k>>2]=r;Ko(s);u=e;return 1}function qe(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=b[(f[a+8>>2]|0)+24>>0]|0;d=Ho(c>>>0>1073741823?-1:c<<2)|0;e=a+28|0;g=f[e>>2]|0;f[e>>2]=d;if(g|0)Io(g);g=a+4|0;d=f[(f[g>>2]|0)+32>>2]|0;i=c<<2;c=d+8|0;j=f[c>>2]|0;k=f[c+4>>2]|0;c=d+16|0;l=c;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,i|0,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&j>>>0<n>>>0){o=0;return o|0}Bf(f[e>>2]|0,(f[d>>2]|0)+m|0,i|0)|0;m=c;d=vl(f[m>>2]|0,f[m+4>>2]|0,i|0,0)|0;i=c;f[i>>2]=d;f[i+4>>2]=H;i=(f[g>>2]|0)+32|0;g=f[i>>2]|0;d=g+8|0;c=f[d>>2]|0;m=f[d+4>>2]|0;d=g+16|0;e=d;n=f[e>>2]|0;j=vl(n|0,f[e+4>>2]|0,4,0)|0;e=H;if((m|0)<(e|0)|(m|0)==(e|0)&c>>>0<j>>>0){o=0;return o|0}j=a+32|0;c=(f[g>>2]|0)+n|0;n=h[c>>0]|h[c+1>>0]<<8|h[c+2>>0]<<16|h[c+3>>0]<<24;b[j>>0]=n;b[j+1>>0]=n>>8;b[j+2>>0]=n>>16;b[j+3>>0]=n>>24;n=d;j=vl(f[n>>2]|0,f[n+4>>2]|0,4,0)|0;n=d;f[n>>2]=j;f[n+4>>2]=H;n=f[i>>2]|0;i=n+8|0;j=f[i+4>>2]|0;d=n+16|0;c=d;g=f[c>>2]|0;e=f[c+4>>2]|0;if(!((j|0)>(e|0)|((j|0)==(e|0)?(f[i>>2]|0)>>>0>g>>>0:0))){o=0;return o|0}i=b[(f[n>>2]|0)+g>>0]|0;n=vl(g|0,e|0,1,0)|0;e=d;f[e>>2]=n;f[e+4>>2]=H;if((i&255)>31){o=0;return o|0}f[a+24>>2]=i&255;o=1;return o|0}function re(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=u;u=u+16|0;d=c;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=b;Wf(a+16|0);ym(a+528|0);Wl(a+544|0);Wl(a+564|0);Wl(a+584|0);e=a+604|0;f[e>>2]=0;g=a+608|0;f[g>>2]=0;h=a+612|0;f[h>>2]=0;i=(b|0)==0;do if(!i)if(b>>>0>1073741823)$n(e);else{j=b<<2;k=wk(j)|0;f[e>>2]=k;l=k+(b<<2)|0;f[h>>2]=l;oh(k|0,0,j|0)|0;f[g>>2]=l;break}while(0);g=a+616|0;f[g>>2]=0;h=a+620|0;f[h>>2]=0;e=a+624|0;f[e>>2]=0;if(!i){l=b<<2;j=wk(l)|0;f[g>>2]=j;g=j+(b<<2)|0;f[e>>2]=g;oh(j|0,0,l|0)|0;f[h>>2]=g}g=b<<5|1;f[d>>2]=0;h=d+4|0;f[h>>2]=0;l=d+8|0;f[l>>2]=0;if(!i){j=b<<2;e=wk(j)|0;f[d>>2]=e;k=e+(b<<2)|0;f[l>>2]=k;oh(e|0,0,j|0)|0;f[h>>2]=k}fg(a+628|0,g,d);k=f[d>>2]|0;if(k|0){f[h>>2]=k;Ko(k)}f[d>>2]=0;k=d+4|0;f[k>>2]=0;h=d+8|0;f[h>>2]=0;if(!i){i=b<<2;j=wk(i)|0;f[d>>2]=j;e=j+(b<<2)|0;f[h>>2]=e;oh(j|0,0,i|0)|0;f[k>>2]=e}fg(a+640|0,g,d);g=f[d>>2]|0;if(!g){u=c;return}f[k>>2]=g;Ko(g);u=c;return}function se(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=u;u=u+80|0;h=g;i=g+60|0;j=g+40|0;k=h;l=d;m=k+40|0;do{f[k>>2]=f[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));fc(a,h,i);if(f[a>>2]|0){u=g;return}h=a+4|0;n=h+11|0;if((b[n>>0]|0)<0)Ko(f[h>>2]|0);if((b[i+7>>0]|0)!=1){f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;o=wk(32)|0;f[j>>2]=o;f[j+8>>2]=-2147483616;f[j+4>>2]=20;k=o;l=11882;m=k+20|0;do{b[k>>0]=b[l>>0]|0;k=k+1|0;l=l+1|0}while((k|0)<(m|0));b[o+20>>0]=0;f[a>>2]=-1;Yi(h,j);if((b[j+11>>0]|0)<0)Ko(f[j>>2]|0);u=g;return}Zf(j,b[i+8>>0]|0);i=f[j>>2]|0;if(!i){o=j+16|0;l=f[o>>2]|0;f[o>>2]=0;Nj(a,l,c,d,e);if(!(f[a>>2]|0)){if((b[n>>0]|0)<0)Ko(f[h>>2]|0);f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0}if(l|0)Pa[f[(f[l>>2]|0)+4>>2]&127](l)}else{f[a>>2]=i;Yi(h,j+4|0)}h=j+16|0;i=f[h>>2]|0;f[h>>2]=0;if(i|0)Pa[f[(f[i>>2]|0)+4>>2]&127](i);i=j+4|0;if((b[i+11>>0]|0)<0)Ko(f[i>>2]|0);u=g;return}function te(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=c+8|0;e=f[d>>2]|0;g=f[d+4>>2]|0;d=c+16|0;i=d;k=f[i>>2]|0;l=f[i+4>>2]|0;i=vl(k|0,l|0,4,0)|0;m=H;if((g|0)<(m|0)|(g|0)==(m|0)&e>>>0<i>>>0){n=0;return n|0}o=f[c>>2]|0;p=o+k|0;q=h[p>>0]|h[p+1>>0]<<8|h[p+2>>0]<<16|h[p+3>>0]<<24;p=d;f[p>>2]=i;f[p+4>>2]=m;p=(j[c+38>>1]|0)<514;do if(p){r=vl(k|0,l|0,8,0)|0;s=H;if((g|0)<(s|0)|(g|0)==(s|0)&e>>>0<r>>>0){n=0;return n|0}else{t=d;f[t>>2]=r;f[t+4>>2]=s;u=s;v=r;break}}else{u=m;v=i}while(0);if(!(q&1)){n=0;return n|0}i=(Z(q|0)|0)^31;if((i+-1|0)>>>0>28){n=0;return n|0}f[a+8>>2]=i+1;q=2<<i;f[a+12>>2]=q+-1;i=q+-2|0;f[a+16>>2]=i;f[a+20>>2]=(i|0)/2|0;if(p){a:do if((g|0)>(u|0)|(g|0)==(u|0)&e>>>0>v>>>0){p=b[o+v>>0]|0;i=vl(v|0,u|0,1,0)|0;q=d;f[q>>2]=i;f[q+4>>2]=H;switch(p<<24>>24){case 0:{w=0;break a;break}case 1:{w=1;break a;break}default:{n=0;return n|0}}}else w=0;while(0);f[a+68>>2]=w}n=rd(a+88|0,c)|0;return n|0}function ue(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=a+4|0;d=f[c>>2]|0;e=d;g=f[a>>2]|0;h=g;do if((d|0)==(g|0)){i=a+8|0;j=f[i>>2]|0;k=a+12|0;l=f[k>>2]|0;m=l;if(j>>>0<l>>>0){l=j;n=((m-l>>2)+1|0)/2|0;o=j+(n<<2)|0;p=l-e|0;l=o+(0-(p>>2)<<2)|0;if(!p){q=o;r=o}else{Rj(l|0,d|0,p|0)|0;q=l;r=(f[i>>2]|0)+(n<<2)|0}f[c>>2]=q;f[i>>2]=r;s=q;break}n=m-h|0;m=(n|0)==0?1:n>>1;n=(m+3|0)>>>2;do if(m)if(m>>>0>1073741823){l=qa(8)|0;Dm(l,13552);f[l>>2]=4908;ta(l|0,1128,105)}else{t=wk(m<<2)|0;break}else t=0;while(0);l=t;p=t+(n<<2)|0;o=p;u=t+(m<<2)|0;if((d|0)==(j|0)){v=o;w=d}else{x=((j+-4-e|0)>>>2)+n+1|0;y=p;z=d;while(1){f[y>>2]=f[z>>2];z=z+4|0;if((z|0)==(j|0))break;else y=y+4|0}v=t+(x<<2)|0;w=f[a>>2]|0}f[a>>2]=l;f[c>>2]=o;f[i>>2]=v;f[k>>2]=u;if(!w)s=p;else{Ko(w);s=f[c>>2]|0}}else s=d;while(0);f[s+-4>>2]=f[b>>2];f[c>>2]=(f[c>>2]|0)+-4;return}function ve(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=u;u=u+16|0;d=c;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=b;Wl(a+16|0);Wl(a+36|0);Wl(a+56|0);Wl(a+76|0);e=a+96|0;f[e>>2]=0;g=a+100|0;f[g>>2]=0;h=a+104|0;f[h>>2]=0;i=(b|0)==0;do if(!i)if(b>>>0>1073741823)$n(e);else{j=b<<2;k=wk(j)|0;f[e>>2]=k;l=k+(b<<2)|0;f[h>>2]=l;oh(k|0,0,j|0)|0;f[g>>2]=l;break}while(0);g=a+108|0;f[g>>2]=0;h=a+112|0;f[h>>2]=0;e=a+116|0;f[e>>2]=0;if(!i){l=b<<2;j=wk(l)|0;f[g>>2]=j;g=j+(b<<2)|0;f[e>>2]=g;oh(j|0,0,l|0)|0;f[h>>2]=g}g=b<<5|1;f[d>>2]=0;h=d+4|0;f[h>>2]=0;l=d+8|0;f[l>>2]=0;if(!i){j=b<<2;e=wk(j)|0;f[d>>2]=e;k=e+(b<<2)|0;f[l>>2]=k;oh(e|0,0,j|0)|0;f[h>>2]=k}fg(a+120|0,g,d);k=f[d>>2]|0;if(k|0){f[h>>2]=k;Ko(k)}f[d>>2]=0;k=d+4|0;f[k>>2]=0;h=d+8|0;f[h>>2]=0;if(!i){i=b<<2;j=wk(i)|0;f[d>>2]=j;e=j+(b<<2)|0;f[h>>2]=e;oh(j|0,0,i|0)|0;f[k>>2]=e}fg(a+132|0,g,d);g=f[d>>2]|0;if(!g){u=c;return}f[k>>2]=g;Ko(g);u=c;return}function we(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=u;u=u+16|0;d=c;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=b;ym(a+16|0);Wl(a+32|0);Wl(a+52|0);Wl(a+72|0);e=a+92|0;f[e>>2]=0;g=a+96|0;f[g>>2]=0;h=a+100|0;f[h>>2]=0;i=(b|0)==0;do if(!i)if(b>>>0>1073741823)$n(e);else{j=b<<2;k=wk(j)|0;f[e>>2]=k;l=k+(b<<2)|0;f[h>>2]=l;oh(k|0,0,j|0)|0;f[g>>2]=l;break}while(0);g=a+104|0;f[g>>2]=0;h=a+108|0;f[h>>2]=0;e=a+112|0;f[e>>2]=0;if(!i){l=b<<2;j=wk(l)|0;f[g>>2]=j;g=j+(b<<2)|0;f[e>>2]=g;oh(j|0,0,l|0)|0;f[h>>2]=g}g=b<<5|1;f[d>>2]=0;h=d+4|0;f[h>>2]=0;l=d+8|0;f[l>>2]=0;if(!i){j=b<<2;e=wk(j)|0;f[d>>2]=e;k=e+(b<<2)|0;f[l>>2]=k;oh(e|0,0,j|0)|0;f[h>>2]=k}fg(a+116|0,g,d);k=f[d>>2]|0;if(k|0){f[h>>2]=k;Ko(k)}f[d>>2]=0;k=d+4|0;f[k>>2]=0;h=d+8|0;f[h>>2]=0;if(!i){i=b<<2;j=wk(i)|0;f[d>>2]=j;e=j+(b<<2)|0;f[h>>2]=e;oh(j|0,0,i|0)|0;f[k>>2]=e}fg(a+128|0,g,d);g=f[d>>2]|0;if(!g){u=c;return}f[k>>2]=g;Ko(g);u=c;return}function xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;d=u;u=u+48|0;e=d+40|0;g=d+32|0;h=d+8|0;i=d;j=d+24|0;k=d+16|0;l=a+4|0;m=f[l>>2]|0;n=b;b=f[n>>2]|0;o=f[n+4>>2]|0;n=c;c=f[n>>2]|0;p=f[n+4>>2]|0;n=c-b<<3;f[l>>2]=m-o+p+n;l=(f[a>>2]|0)+(m>>>5<<2)|0;a=m&31;m=l;if((a|0)!=(o|0)){q=h;f[q>>2]=b;f[q+4>>2]=o;q=i;f[q>>2]=c;f[q+4>>2]=p;f[j>>2]=m;f[j+4>>2]=a;f[g>>2]=f[h>>2];f[g+4>>2]=f[h+4>>2];f[e>>2]=f[i>>2];f[e+4>>2]=f[i+4>>2];id(k,g,e,j);u=d;return}j=p-o+n|0;n=b;if((j|0)>0){if(!o){r=j;s=0;t=l;v=n}else{b=32-o|0;p=(j|0)<(b|0)?j:b;e=-1>>>(b-p|0)&-1<<o;f[l>>2]=f[l>>2]&~e|f[n>>2]&e;e=p+o|0;r=j-p|0;s=e&31;t=l+(e>>>5<<2)|0;v=n+4|0}n=(r|0)/32|0;Rj(t|0,v|0,n<<2|0)|0;e=r-(n<<5)|0;r=t+(n<<2)|0;t=r;if((e|0)>0){l=-1>>>(32-e|0);f[r>>2]=f[r>>2]&~l|f[v+(n<<2)>>2]&l;w=e;x=t}else{w=s;x=t}}else{w=o;x=m}f[k>>2]=x;f[k+4>>2]=w;u=d;return}function ye(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=f[a+8>>2]|0;e=a+76|0;g=f[e>>2]|0;h=f[g+80>>2]|0;b[c+84>>0]=0;i=c+68|0;j=c+72|0;k=f[i>>2]|0;l=(f[j>>2]|0)-k>>2;if(h>>>0<=l>>>0)if(h>>>0<l>>>0){f[j>>2]=k+(h<<2);m=g;n=h}else{m=g;n=h}else{Of(i,h-l|0,3328);l=f[e>>2]|0;m=l;n=f[l+80>>2]|0}l=f[m+96>>2]|0;e=(f[m+100>>2]|0)-l|0;m=(e|0)/12|0;h=l;if(!e){o=1;return o|0}e=a+80|0;a=c+68|0;c=f[d+28>>2]|0;d=0;while(1){l=d*3|0;i=f[c+(l<<2)>>2]|0;if((i|0)==-1){o=0;p=10;break}g=f[(f[e>>2]|0)+12>>2]|0;k=f[g+(i<<2)>>2]|0;if(k>>>0>=n>>>0){o=0;p=10;break}i=f[a>>2]|0;f[i+(f[h+(d*12|0)>>2]<<2)>>2]=k;k=f[c+(l+1<<2)>>2]|0;if((k|0)==-1){o=0;p=10;break}j=f[g+(k<<2)>>2]|0;if(j>>>0>=n>>>0){o=0;p=10;break}f[i+(f[h+(d*12|0)+4>>2]<<2)>>2]=j;j=f[c+(l+2<<2)>>2]|0;if((j|0)==-1){o=0;p=10;break}l=f[g+(j<<2)>>2]|0;if(l>>>0>=n>>>0){o=0;p=10;break}f[i+(f[h+(d*12|0)+8>>2]<<2)>>2]=l;d=d+1|0;if(d>>>0>=m>>>0){o=1;p=10;break}}if((p|0)==10)return o|0;return 0}function ze(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=u;u=u+32|0;i=h+16|0;j=h;k=f[(f[(f[b+4>>2]|0)+8>>2]|0)+(d<<2)>>2]|0;do if((c+-1|0)>>>0<6&(Ka[f[(f[b>>2]|0)+8>>2]&127](b)|0)==1){l=Ka[f[(f[b>>2]|0)+36>>2]&127](b)|0;m=La[f[(f[b>>2]|0)+44>>2]&127](b,d)|0;if((l|0)==0|(m|0)==0){f[a>>2]=0;u=h;return}n=La[f[(f[b>>2]|0)+40>>2]&127](b,d)|0;if(!n){f[j>>2]=f[b+44>>2];f[j+4>>2]=l;f[j+12>>2]=m;f[j+8>>2]=m+12;ic(a,i,c,k,e,j,g);if(!(f[a>>2]|0)){f[a>>2]=0;break}u=h;return}else{f[j>>2]=f[b+44>>2];f[j+4>>2]=n;f[j+12>>2]=m;f[j+8>>2]=m+12;hc(a,i,c,k,e,j,g);if(!(f[a>>2]|0)){f[a>>2]=0;break}u=h;return}}while(0);f[a>>2]=0;u=h;return}function Ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(sc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=Vc(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<4194304){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=4194304){r=t;break}else q=t}}else r=o;while(0);q=r&1048575;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>20)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function Be(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(vc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=Wc(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<2097152){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=2097152){r=t;break}else q=t}}else r=o;while(0);q=r&524287;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>19)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function Ce(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(wc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=Xc(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<1048576){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=1048576){r=t;break}else q=t}}else r=o;while(0);q=r&262143;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>18)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function De(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(xc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=Yc(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<262144){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=262144){r=t;break}else q=t}}else r=o;while(0);q=r&65535;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>16)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function Ee(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(yc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=Zc(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<131072){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=131072){r=t;break}else q=t}}else r=o;while(0);q=r&32767;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>15)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function Fe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(tc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=$c(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<32768){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=32768){r=t;break}else q=t}}else r=o;while(0);q=r&8191;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>13)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function Ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=u;u=u+64|0;e=d;g=e;i=g+52|0;do{f[g>>2]=0;g=g+4|0}while((g|0)<(i|0));do if(uc(e,b)|0){g=(a|0)==0;if(!g?(f[e+12>>2]|0)==0:0){j=0;break}i=ad(e,b)|0;if(g|i^1)j=i;else{i=e+44|0;g=e+48|0;k=e+40|0;l=e+16|0;m=e+28|0;n=0;o=f[g>>2]|0;while(1){a:do if(o>>>0<16384){p=f[i>>2]|0;q=o;while(1){if((p|0)<=0){r=q;break a}s=f[k>>2]|0;p=p+-1|0;f[i>>2]=p;t=q<<8|(h[s+p>>0]|0);f[g>>2]=t;if(t>>>0>=16384){r=t;break}else q=t}}else r=o;while(0);q=r&4095;p=f[(f[l>>2]|0)+(q<<2)>>2]|0;t=f[m>>2]|0;o=(W(f[t+(p<<3)>>2]|0,r>>>12)|0)+q-(f[t+(p<<3)+4>>2]|0)|0;f[g>>2]=o;f[c+(n<<2)>>2]=p;n=n+1|0;if((n|0)==(a|0)){j=1;break}}}}else j=0;while(0);a=f[e+28>>2]|0;if(a|0){f[e+32>>2]=a;Ko(a)}a=f[e+16>>2]|0;if(a|0){f[e+20>>2]=a;Ko(a)}a=f[e>>2]|0;if(!a){u=d;return j|0}f[e+4>>2]=a;Ko(a);u=d;return j|0}function He(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f[a+4>>2]=f[b+4>>2];c=a+8|0;d=b+8|0;if((a|0)==(b|0))return a|0;e=b+12|0;g=f[e>>2]|0;if(!g)h=0;else{i=a+16|0;do if(g>>>0>f[i>>2]<<5>>>0){j=f[c>>2]|0;if(!j)k=g;else{Ko(j);f[c>>2]=0;f[i>>2]=0;f[a+12>>2]=0;k=f[e>>2]|0}if((k|0)<0)$n(c);else{j=((k+-1|0)>>>5)+1|0;l=wk(j<<2)|0;f[c>>2]=l;f[a+12>>2]=0;f[i>>2]=j;m=f[e>>2]|0;n=l;break}}else{m=g;n=f[c>>2]|0}while(0);Rj(n|0,f[d>>2]|0,((m+-1|0)>>>5<<2)+4|0)|0;h=f[e>>2]|0}f[a+12>>2]=h;h=a+20|0;e=b+20|0;m=b+24|0;b=f[m>>2]|0;if(!b)o=0;else{d=a+28|0;do if(b>>>0>f[d>>2]<<5>>>0){n=f[h>>2]|0;if(!n)p=b;else{Ko(n);f[h>>2]=0;f[d>>2]=0;f[a+24>>2]=0;p=f[m>>2]|0}if((p|0)<0)$n(h);else{n=((p+-1|0)>>>5)+1|0;c=wk(n<<2)|0;f[h>>2]=c;f[a+24>>2]=0;f[d>>2]=n;q=f[m>>2]|0;r=c;break}}else{q=b;r=f[h>>2]|0}while(0);Rj(r|0,f[e>>2]|0,((q+-1|0)>>>5<<2)+4|0)|0;o=f[m>>2]|0}f[a+24>>2]=o;return a|0}function Ie(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=a+8|0;d=f[c>>2]|0;e=a+4|0;g=f[e>>2]|0;h=g;if(((d-g|0)/12|0)>>>0>=b>>>0){oh(g|0,0,b*12|0)|0;f[e>>2]=h+(b*12|0);return}i=f[a>>2]|0;j=(g-i|0)/12|0;g=j+b|0;k=i;if(g>>>0>357913941)$n(a);l=(d-i|0)/12|0;d=l<<1;m=l>>>0<178956970?(d>>>0<g>>>0?g:d):357913941;do if(m)if(m>>>0>357913941){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{n=wk(m*12|0)|0;break}else n=0;while(0);d=n+(j*12|0)|0;j=n+(m*12|0)|0;oh(d|0,0,b*12|0)|0;m=d+(b*12|0)|0;if((h|0)==(k|0)){o=d;p=k;q=h;r=i}else{i=h;h=d;do{d=h;h=h+-12|0;b=i;i=i+-12|0;f[h>>2]=0;n=d+-8|0;f[n>>2]=0;g=d+-4|0;f[g>>2]=0;f[h>>2]=f[i>>2];d=b+-8|0;f[n>>2]=f[d>>2];n=b+-4|0;f[g>>2]=f[n>>2];f[n>>2]=0;f[d>>2]=0;f[i>>2]=0}while((i|0)!=(k|0));k=f[a>>2]|0;o=h;p=k;q=f[e>>2]|0;r=k}f[a>>2]=o;f[e>>2]=m;f[c>>2]=j;if((q|0)!=(p|0)){j=q;do{q=j;j=j+-12|0;c=f[j>>2]|0;if(c|0){f[q+-8>>2]=c;Ko(c)}}while((j|0)!=(p|0))}if(!r)return;Ko(r);return}function Je(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f[c>>2]=1;d=a+4|0;e=c+8|0;g=c+12|0;c=f[e>>2]|0;i=(f[g>>2]|0)-c|0;if(i>>>0<4294967292){eg(e,i+4|0,0);j=f[e>>2]|0}else j=c;c=j+i|0;i=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;b[c>>0]=i;b[c+1>>0]=i>>8;b[c+2>>0]=i>>16;b[c+3>>0]=i>>24;i=a+8|0;c=a+12|0;d=f[i>>2]|0;if((f[c>>2]|0)!=(d|0)){j=0;k=d;do{d=k+(j<<2)|0;l=f[e>>2]|0;m=(f[g>>2]|0)-l|0;if(m>>>0<4294967292){eg(e,m+4|0,0);n=f[e>>2]|0}else n=l;l=n+m|0;m=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;b[l>>0]=m;b[l+1>>0]=m>>8;b[l+2>>0]=m>>16;b[l+3>>0]=m>>24;j=j+1|0;k=f[i>>2]|0}while(j>>>0<(f[c>>2]|0)-k>>2>>>0)}k=a+20|0;a=f[e>>2]|0;c=(f[g>>2]|0)-a|0;if(c>>>0<4294967292){eg(e,c+4|0,0);o=f[e>>2]|0;p=o+c|0;q=h[k>>0]|h[k+1>>0]<<8|h[k+2>>0]<<16|h[k+3>>0]<<24;b[p>>0]=q;b[p+1>>0]=q>>8;b[p+2>>0]=q>>16;b[p+3>>0]=q>>24;return}else{o=a;p=o+c|0;q=h[k>>0]|h[k+1>>0]<<8|h[k+2>>0]<<16|h[k+3>>0]<<24;b[p>>0]=q;b[p+1>>0]=q>>8;b[p+2>>0]=q>>16;b[p+3>>0]=q>>24;return}}function Ke(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=a+8|0;d=f[c>>2]|0;e=a+12|0;g=f[e>>2]|0;h=g;do if((d|0)==(g|0)){i=a+4|0;j=f[i>>2]|0;k=j;l=f[a>>2]|0;m=l;if(j>>>0>l>>>0){n=((k-m>>2)+1|0)/-2|0;o=j+(n<<2)|0;p=d-k|0;if(!p)q=o;else{Rj(o|0,j|0,p|0)|0;q=(f[i>>2]|0)+(n<<2)|0}n=o+(p>>2<<2)|0;f[c>>2]=n;f[i>>2]=q;r=n;break}n=h-m|0;m=(n|0)==0?1:n>>1;n=m>>>2;do if(m)if(m>>>0>1073741823){p=qa(8)|0;Dm(p,13552);f[p>>2]=4908;ta(p|0,1128,105)}else{s=wk(m<<2)|0;break}else s=0;while(0);p=s;o=s+(n<<2)|0;t=o;u=s+(m<<2)|0;if((j|0)==(d|0)){v=t;w=l}else{x=n+((d+-4-k|0)>>>2)+1|0;y=o;o=j;while(1){f[y>>2]=f[o>>2];o=o+4|0;if((o|0)==(d|0))break;else y=y+4|0}v=s+(x<<2)|0;w=f[a>>2]|0}f[a>>2]=p;f[i>>2]=t;f[c>>2]=v;f[e>>2]=u;if(!w)r=v;else{Ko(w);r=f[c>>2]|0}}else r=d;while(0);f[r>>2]=f[b>>2];f[c>>2]=(f[c>>2]|0)+4;return}function Le(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=a+4|0;g=f[e>>2]|0;if(!g){f[c>>2]=e;h=e;return h|0}e=b[d+11>>0]|0;i=e<<24>>24<0;j=i?f[d+4>>2]|0:e&255;e=i?f[d>>2]|0:d;d=a+4|0;a=g;while(1){g=a+16|0;i=b[g+11>>0]|0;k=i<<24>>24<0;l=k?f[a+20>>2]|0:i&255;i=l>>>0<j>>>0;m=i?l:j;n=(m|0)==0;if(!n?(o=k?f[g>>2]|0:g,p=Fi(e,o,m)|0,(p|0)!=0):0)if((p|0)<0)q=7;else{r=o;q=11}else if(j>>>0>=l>>>0)if(n)q=12;else{r=k?f[g>>2]|0:g;q=11}else q=7;if((q|0)==7){q=0;g=f[a>>2]|0;if(!g){q=8;break}else{s=a;t=g}}else if((q|0)==11){q=0;g=Fi(r,e,m)|0;if(g)if((g|0)<0)q=14;else{q=16;break}else q=12}if((q|0)==12){q=0;if(i)q=14;else{q=16;break}}if((q|0)==14){q=0;u=a+4|0;i=f[u>>2]|0;if(!i){q=15;break}else{s=u;t=i}}d=s;a=t}if((q|0)==8){f[c>>2]=a;h=a;return h|0}else if((q|0)==15){f[c>>2]=a;h=u;return h|0}else if((q|0)==16){f[c>>2]=a;h=d;return h|0}return 0}function Me(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=u;u=u+16|0;c=b+4|0;d=b;e=a+8|0;g=f[e>>2]|0;Wh(f[a+4>>2]|0,(f[g+56>>2]|0)-(f[g+52>>2]|0)>>2);g=a+84|0;a=f[g>>2]|0;if(!a){h=f[(f[e>>2]|0)+64>>2]|0;i=(f[h+4>>2]|0)-(f[h>>2]|0)>>2;h=(i>>>0)/3|0;if(i>>>0<=2){j=1;u=b;return j|0}i=0;while(1){f[d>>2]=i*3;f[c>>2]=f[d>>2];i=i+1|0;if(!(Hb(e,c)|0)){j=0;k=10;break}if(i>>>0>=h>>>0){j=1;k=10;break}}if((k|0)==10){u=b;return j|0}}else{h=f[a>>2]|0;if((f[a+4>>2]|0)==(h|0)){j=1;u=b;return j|0}a=0;i=h;while(1){f[d>>2]=f[i+(a<<2)>>2];f[c>>2]=f[d>>2];a=a+1|0;if(!(Hb(e,c)|0)){j=0;k=10;break}h=f[g>>2]|0;i=f[h>>2]|0;if(a>>>0>=(f[h+4>>2]|0)-i>>2>>>0){j=1;k=10;break}}if((k|0)==10){u=b;return j|0}}return 0}function Ne(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=c+8|0;e=f[d>>2]|0;g=f[d+4>>2]|0;d=c+16|0;i=d;k=f[i>>2]|0;l=f[i+4>>2]|0;i=vl(k|0,l|0,4,0)|0;m=H;if((g|0)<(m|0)|(g|0)==(m|0)&e>>>0<i>>>0){n=0;return n|0}o=f[c>>2]|0;p=o+k|0;q=h[p>>0]|h[p+1>>0]<<8|h[p+2>>0]<<16|h[p+3>>0]<<24;p=d;f[p>>2]=i;f[p+4>>2]=m;m=vl(k|0,l|0,8,0)|0;p=H;if((g|0)<(p|0)|(g|0)==(p|0)&e>>>0<m>>>0){n=0;return n|0}i=d;f[i>>2]=m;f[i+4>>2]=p;if(!(q&1)){n=0;return n|0}i=(Z(q|0)|0)^31;if((i+-1|0)>>>0>28){n=0;return n|0}f[a+8>>2]=i+1;q=2<<i;f[a+12>>2]=q+-1;i=q+-2|0;f[a+16>>2]=i;f[a+20>>2]=(i|0)/2|0;if((j[c+38>>1]|0)<514){a:do if((g|0)>(p|0)|(g|0)==(p|0)&e>>>0>m>>>0){i=b[o+m>>0]|0;q=vl(k|0,l|0,9,0)|0;r=d;f[r>>2]=q;f[r+4>>2]=H;switch(i<<24>>24){case 0:{s=0;break a;break}case 1:{s=1;break a;break}default:{n=0;return n|0}}}else s=0;while(0);f[a+68>>2]=s}n=rd(a+88|0,c)|0;return n|0}function Oe(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=u;u=u+16|0;c=b+4|0;d=b;e=a+8|0;g=f[e>>2]|0;Wh(f[a+4>>2]|0,(f[g+28>>2]|0)-(f[g+24>>2]|0)>>2);g=a+84|0;a=f[g>>2]|0;if(!a){h=f[e>>2]|0;i=(f[h+4>>2]|0)-(f[h>>2]|0)>>2;h=(i>>>0)/3|0;if(i>>>0<=2){j=1;u=b;return j|0}i=0;while(1){f[d>>2]=i*3;f[c>>2]=f[d>>2];i=i+1|0;if(!(Ib(e,c)|0)){j=0;k=10;break}if(i>>>0>=h>>>0){j=1;k=10;break}}if((k|0)==10){u=b;return j|0}}else{h=f[a>>2]|0;if((f[a+4>>2]|0)==(h|0)){j=1;u=b;return j|0}a=0;i=h;while(1){f[d>>2]=f[i+(a<<2)>>2];f[c>>2]=f[d>>2];a=a+1|0;if(!(Ib(e,c)|0)){j=0;k=10;break}h=f[g>>2]|0;i=f[h>>2]|0;if(a>>>0>=(f[h+4>>2]|0)-i>>2>>>0){j=1;k=10;break}}if((k|0)==10){u=b;return j|0}}return 0}function Pe(a,b,c,d){a=a|0;b=_(b);c=_(c);d=d|0;var e=Ia,f=Ia,g=Ia,h=Ia,i=Ia,j=Ia,k=0.0,l=Ia,m=Ia,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=Ia,u=Ia,v=0,w=0;e=_(b+c);f=_(b-c);if(!(f<=_(.5))|(!(f>=_(-.5))|(!(e>=_(.5))|!(e<=_(1.5))))){do if(!(e<=_(.5))){if(e>=_(1.5)){g=_(_(1.5)-c);h=_(_(1.5)-b);break}if(!(f<=_(-.5))){g=_(c+_(.5));h=_(b+_(-.5));break}else{g=_(c+_(-.5));h=_(b+_(.5));break}}else{g=_(_(.5)-c);h=_(_(.5)-b)}while(0);i=_(h+g);j=_(g-h);k=-1.0;l=g;m=h}else{i=e;j=f;k=1.0;l=b;m=c}c=_(+l*2.0+-1.0);l=_(+m*2.0+-1.0);o=+i*2.0;p=o+-1.0;q=3.0-o;o=+j*2.0;r=o+1.0;s=1.0-o;o=s<r?s:r;r=q<p?q:p;j=_(k*(o<r?o:r));i=_(_(l*l)+_(_(c*c)+_(j*j)));if(+i<1.0e-06){n[d>>2]=_(0.0);t=_(0.0);u=_(0.0);v=d+4|0;n[v>>2]=u;w=d+8|0;n[w>>2]=t;return}else{m=_(_(1.0)/_(K(_(i))));i=_(m*j);n[d>>2]=i;t=_(m*l);u=_(m*c);v=d+4|0;n[v>>2]=u;w=d+8|0;n[w>>2]=t;return}}function Qe(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;d=u;u=u+16|0;e=d;f[a>>2]=c;f[a+68>>2]=0;f[a+72>>2]=0;ae(e,c);g=a+4|0;h=f[e>>2]|0;f[e>>2]=0;i=f[g>>2]|0;f[g>>2]=h;if(!i){f[e>>2]=0;j=h}else{h=f[i+76>>2]|0;if(h|0){f[i+80>>2]=h;Ko(h)}h=f[i+64>>2]|0;if(h|0){f[i+68>>2]=h;Ko(h)}h=f[i+48>>2]|0;if(h|0){f[i+52>>2]=h;Ko(h)}h=f[i+24>>2]|0;if(h|0){f[i+28>>2]=h;Ko(h)}h=f[i+12>>2]|0;if(h|0){f[i+16>>2]=h;Ko(h)}h=f[i>>2]|0;if(h|0){f[i+4>>2]=h;Ko(h)}Ko(i);i=f[e>>2]|0;f[e>>2]=0;if(i|0){h=f[i+76>>2]|0;if(h|0){f[i+80>>2]=h;Ko(h)}h=f[i+64>>2]|0;if(h|0){f[i+68>>2]=h;Ko(h)}h=f[i+48>>2]|0;if(h|0){f[i+52>>2]=h;Ko(h)}h=f[i+24>>2]|0;if(h|0){f[i+28>>2]=h;Ko(h)}h=f[i+12>>2]|0;if(h|0){f[i+16>>2]=h;Ko(h)}h=f[i>>2]|0;if(h|0){f[i+4>>2]=h;Ko(h)}Ko(i)}j=f[g>>2]|0}if(!j){k=0;u=d;return k|0}j=((f[c+100>>2]|0)-(f[c+96>>2]|0)|0)/12|0;b[e>>0]=0;Gf(a+56|0,j,e);k=1;u=d;return k|0}function Re(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=c&255;g=(d|0)!=0;a:do if(g&(a&3|0)!=0){h=c&255;i=a;j=d;while(1){if((b[i>>0]|0)==h<<24>>24){k=i;l=j;m=6;break a}n=i+1|0;o=j+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){i=n;j=o}else{q=n;r=o;s=p;m=5;break}}}else{q=a;r=d;s=g;m=5}while(0);if((m|0)==5)if(s){k=q;l=r;m=6}else m=16;b:do if((m|0)==6){r=c&255;if((b[k>>0]|0)==r<<24>>24)if(!l){m=16;break}else{t=k;break}q=W(e,16843009)|0;c:do if(l>>>0>3){s=k;g=l;while(1){d=f[s>>2]^q;if((d&-2139062144^-2139062144)&d+-16843009|0){u=g;v=s;break c}d=s+4|0;a=g+-4|0;if(a>>>0>3){s=d;g=a}else{w=d;x=a;m=11;break}}}else{w=k;x=l;m=11}while(0);if((m|0)==11)if(!x){m=16;break}else{u=x;v=w}q=v;g=u;while(1){if((b[q>>0]|0)==r<<24>>24){t=q;break b}g=g+-1|0;if(!g){m=16;break}else q=q+1|0}}while(0);if((m|0)==16)t=0;return t|0}function Se(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=a+8|0;d=f[c>>2]|0;e=a+4|0;g=f[e>>2]|0;h=g;if(d-g>>2>>>0>=b>>>0){oh(g|0,0,b<<2|0)|0;f[e>>2]=h+(b<<2);return}i=f[a>>2]|0;j=g-i>>2;g=j+b|0;k=i;if(g>>>0>1073741823)$n(a);l=d-i|0;d=l>>1;m=l>>2>>>0<536870911?(d>>>0<g>>>0?g:d):1073741823;do if(m)if(m>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{n=wk(m<<2)|0;break}else n=0;while(0);d=n+(j<<2)|0;g=n+(m<<2)|0;oh(d|0,0,b<<2|0)|0;m=d+(b<<2)|0;if((h|0)==(k|0)){o=d;p=k;q=h;r=i}else{b=j+-1-((h+-4+(0-i)|0)>>>2)|0;i=h;h=d;do{h=h+-4|0;i=i+-4|0;d=f[i>>2]|0;f[i>>2]=0;f[h>>2]=d}while((i|0)!=(k|0));k=f[a>>2]|0;o=n+(b<<2)|0;p=k;q=f[e>>2]|0;r=k}f[a>>2]=o;f[e>>2]=m;f[c>>2]=g;if((q|0)!=(p|0)){g=q;do{g=g+-4|0;q=f[g>>2]|0;f[g>>2]=0;if(q|0)Pa[f[(f[q>>2]|0)+4>>2]&127](q)}while((g|0)!=(p|0))}if(!r)return;Ko(r);return}function Te(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,i=0,j=0,k=0,l=0;if((b|0)==-2)g=0;else{i=f[(f[(f[d+4>>2]|0)+8>>2]|0)+(c<<2)>>2]|0;do if((Ka[f[(f[d>>2]|0)+8>>2]&127](d)|0)==1){ze(a,d,b,c,e,((h[d+36>>0]|0)<<8|(h[d+37>>0]|0))&65535);if(!(f[a>>2]|0)){f[a>>2]=0;break}else return}while(0);d=wk(44)|0;f[d>>2]=1536;f[d+4>>2]=i;i=d+8|0;f[i>>2]=f[e>>2];f[i+4>>2]=f[e+4>>2];f[i+8>>2]=f[e+8>>2];f[i+12>>2]=f[e+12>>2];f[i+16>>2]=f[e+16>>2];f[i+20>>2]=f[e+20>>2];i=d+32|0;f[i>>2]=0;c=d+36|0;f[c>>2]=0;b=d+40|0;f[b>>2]=0;j=f[e+24>>2]|0;k=(f[e+28>>2]|0)-j|0;e=k>>2;if(k|0){if(e>>>0>1073741823)$n(i);l=wk(k)|0;f[c>>2]=l;f[i>>2]=l;f[b>>2]=l+(e<<2);if((k|0)>0){Bf(l|0,j|0,k|0)|0;f[c>>2]=l+(k>>>2<<2)}}f[d>>2]=1592;g=d}f[a>>2]=g;return}function Ue(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=f[a+32>>2]|0;d=c+8|0;e=f[d+4>>2]|0;g=c+16|0;h=g;i=f[h>>2]|0;j=f[h+4>>2]|0;if(!((e|0)>(j|0)|((e|0)==(j|0)?(f[d>>2]|0)>>>0>i>>>0:0))){k=0;return k|0}d=b[(f[c>>2]|0)+i>>0]|0;c=vl(i|0,j|0,1,0)|0;j=g;f[j>>2]=c;f[j+4>>2]=H;j=a+48|0;c=f[j>>2]|0;f[j>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);switch(d<<24>>24){case 0:{d=wk(384)|0;Kh(d);c=f[j>>2]|0;f[j>>2]=d;if(!c)l=d;else{Pa[f[(f[c>>2]|0)+4>>2]&127](c);m=11}break}case 1:{c=wk(424)|0;bh(c);d=f[j>>2]|0;f[j>>2]=c;if(!d)l=c;else{Pa[f[(f[d>>2]|0)+4>>2]&127](d);m=11}break}case 2:{d=wk(440)|0;Gg(d);c=f[j>>2]|0;f[j>>2]=d;if(!c)l=d;else{Pa[f[(f[c>>2]|0)+4>>2]&127](c);m=11}break}default:m=11}if((m|0)==11){m=f[j>>2]|0;if(!m){k=0;return k|0}else l=m}k=La[f[(f[l>>2]|0)+8>>2]&127](l,a)|0;return k|0}function Ve(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=u;u=u+32|0;g=e+12|0;h=e;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;i=Dh(c)|0;if(i>>>0>4294967279)$n(g);if(i>>>0<11){b[g+11>>0]=i;if(!i)j=g;else{k=g;l=6}}else{m=i+16&-16;n=wk(m)|0;f[g>>2]=n;f[g+8>>2]=m|-2147483648;f[g+4>>2]=i;k=n;l=6}if((l|0)==6){Bf(k|0,c|0,i|0)|0;j=k}b[j+i>>0]=0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;i=Dh(d)|0;if(i>>>0>4294967279)$n(h);if(i>>>0<11){b[h+11>>0]=i;if(!i)o=h;else{p=h;l=12}}else{j=i+16&-16;k=wk(j)|0;f[h>>2]=k;f[h+8>>2]=j|-2147483648;f[h+4>>2]=i;p=k;l=12}if((l|0)==12){Bf(p|0,d|0,i|0)|0;o=p}b[o+i>>0]=0;i=f[a+4>>2]|0;if((i|0)!=0?(o=Ed(i,g,h)|0,(o|0)!=0):0)q=Di(a,f[o+40>>2]|0)|0;else q=-1;if((b[h+11>>0]|0)<0)Ko(f[h>>2]|0);if((b[g+11>>0]|0)>=0){u=e;return q|0}Ko(f[g>>2]|0);u=e;return q|0}function We(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=b;g=c-e|0;h=g>>1;i=a+8|0;j=f[i>>2]|0;k=f[a>>2]|0;l=k;if(h>>>0<=j-k>>1>>>0){m=a+4|0;n=(f[m>>2]|0)-k>>1;o=h>>>0>n>>>0;p=b+(n<<1)|0;n=o?p:c;q=n;r=q-e|0;if(r|0)Rj(k|0,b|0,r|0)|0;if(!o){f[m>>2]=l+(r>>1<<1);return}if((n|0)==(c|0))return;n=f[m>>2]|0;r=c+-2-q|0;q=p;p=n;while(1){d[p>>1]=d[q>>1]|0;q=q+2|0;if((q|0)==(c|0))break;else p=p+2|0}f[m>>2]=n+((r>>>1)+1<<1);return}if(!k)s=j;else{j=a+4|0;f[j>>2]=k;Ko(k);f[i>>2]=0;f[j>>2]=0;f[a>>2]=0;s=0}if((g|0)<0)$n(a);g=s>>1>>>0<1073741823?(s>>>0<h>>>0?h:s):2147483647;if((g|0)<0)$n(a);s=wk(g<<1)|0;h=a+4|0;f[h>>2]=s;f[a>>2]=s;f[i>>2]=s+(g<<1);if((b|0)==(c|0))return;g=c+-2-e|0;e=b;b=s;while(1){d[b>>1]=d[e>>1]|0;e=e+2|0;if((e|0)==(c|0))break;else b=b+2|0}f[h>>2]=s+((g>>>1)+1<<1);return}function Xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;d=u;u=u+32|0;e=d+24|0;g=d+16|0;h=d+8|0;i=d;j=a+4|0;k=f[j>>2]|0;l=f[b>>2]|0;m=f[b+4>>2]|0;b=f[c>>2]|0;n=f[c+4>>2]|0;c=n-m+(b-l<<3)|0;f[j>>2]=c+k;j=(f[a>>2]|0)+(k>>>5<<2)|0;a=k&31;k=j;if((m|0)!=(a|0)){f[e>>2]=l;f[e+4>>2]=m;f[g>>2]=b;f[g+4>>2]=n;f[h>>2]=k;f[h+4>>2]=a;jd(i,e,g,h);u=d;return}h=l;if((c|0)>0){if(!m){o=c;p=j;q=0;r=l;s=h}else{l=32-m|0;g=(c|0)<(l|0)?c:l;e=-1>>>(l-g|0)&-1<<m;f[j>>2]=f[j>>2]&~e|f[h>>2]&e;e=g+m|0;l=h+4|0;o=c-g|0;p=j+(e>>>5<<2)|0;q=e&31;r=l;s=l}l=(o|0)/32|0;Rj(p|0,r|0,l<<2|0)|0;r=o-(l<<5)|0;o=p+(l<<2)|0;p=o;if((r|0)>0){e=-1>>>(32-r|0);f[o>>2]=f[o>>2]&~e|f[s+(l<<2)>>2]&e;t=r;v=p}else{t=q;v=p}}else{t=m;v=k}f[i>>2]=v;f[i+4>>2]=t;u=d;return}function Ye(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=b;e=c-d>>2;g=a+8|0;h=f[g>>2]|0;i=f[a>>2]|0;j=i;if(e>>>0<=h-i>>2>>>0){k=a+4|0;l=(f[k>>2]|0)-i>>2;m=e>>>0>l>>>0;n=b+(l<<2)|0;l=m?n:c;o=l;p=o-d|0;if(p|0)Rj(i|0,b|0,p|0)|0;if(!m){f[k>>2]=j+(p>>2<<2);return}if((l|0)==(c|0))return;l=f[k>>2]|0;p=c+-4-o|0;o=n;n=l;while(1){f[n>>2]=f[o>>2];o=o+4|0;if((o|0)==(c|0))break;else n=n+4|0}f[k>>2]=l+((p>>>2)+1<<2);return}if(!i)q=h;else{h=a+4|0;f[h>>2]=i;Ko(i);f[g>>2]=0;f[h>>2]=0;f[a>>2]=0;q=0}if(e>>>0>1073741823)$n(a);h=q>>1;i=q>>2>>>0<536870911?(h>>>0<e>>>0?e:h):1073741823;if(i>>>0>1073741823)$n(a);h=wk(i<<2)|0;e=a+4|0;f[e>>2]=h;f[a>>2]=h;f[g>>2]=h+(i<<2);if((b|0)==(c|0))return;i=c+-4-d|0;d=b;b=h;while(1){f[b>>2]=f[d>>2];d=d+4|0;if((d|0)==(c|0))break;else b=b+4|0}f[e>>2]=h+((i>>>2)+1<<2);return}function Ze(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;f[a>>2]=1536;f[a+4>>2]=b;b=a+8|0;f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];f[b+12>>2]=f[c+12>>2];f[b+16>>2]=f[c+16>>2];f[b+20>>2]=f[c+20>>2];b=a+32|0;e=c+24|0;f[b>>2]=0;g=a+36|0;f[g>>2]=0;h=a+40|0;f[h>>2]=0;i=c+28|0;c=(f[i>>2]|0)-(f[e>>2]|0)|0;j=c>>2;if(c|0){if(j>>>0>1073741823)$n(b);k=wk(c)|0;f[g>>2]=k;f[b>>2]=k;f[h>>2]=k+(j<<2);j=f[e>>2]|0;e=(f[i>>2]|0)-j|0;if((e|0)>0){Bf(k|0,j|0,e|0)|0;f[g>>2]=k+(e>>>2<<2)}}f[a>>2]=2320;e=a+44|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];f[a>>2]=2376;e=a+60|0;f[e>>2]=2432;f[a+64>>2]=0;f[a+68>>2]=0;k=a+72|0;f[k>>2]=f[d>>2];f[k+4>>2]=f[d+4>>2];f[k+8>>2]=f[d+8>>2];f[k+12>>2]=f[d+12>>2];f[e>>2]=2460;f[a+88>>2]=1;e=a+92|0;f[e>>2]=-1;f[e+4>>2]=-1;f[e+8>>2]=-1;f[e+12>>2]=-1;ym(a+108|0);return}function _e(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;f[a>>2]=1536;f[a+4>>2]=b;b=a+8|0;f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];f[b+12>>2]=f[c+12>>2];f[b+16>>2]=f[c+16>>2];f[b+20>>2]=f[c+20>>2];b=a+32|0;e=c+24|0;f[b>>2]=0;g=a+36|0;f[g>>2]=0;h=a+40|0;f[h>>2]=0;i=c+28|0;c=(f[i>>2]|0)-(f[e>>2]|0)|0;j=c>>2;if(c|0){if(j>>>0>1073741823)$n(b);k=wk(c)|0;f[g>>2]=k;f[b>>2]=k;f[h>>2]=k+(j<<2);j=f[e>>2]|0;e=(f[i>>2]|0)-j|0;if((e|0)>0){Bf(k|0,j|0,e|0)|0;f[g>>2]=k+(e>>>2<<2)}}f[a>>2]=1872;e=a+44|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];f[a>>2]=1928;e=a+60|0;f[e>>2]=1984;f[a+64>>2]=0;f[a+68>>2]=0;k=a+72|0;f[k>>2]=f[d>>2];f[k+4>>2]=f[d+4>>2];f[k+8>>2]=f[d+8>>2];f[k+12>>2]=f[d+12>>2];f[e>>2]=2012;f[a+88>>2]=1;e=a+92|0;f[e>>2]=-1;f[e+4>>2]=-1;f[e+8>>2]=-1;f[e+12>>2]=-1;ym(a+108|0);return}function $e(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f[a>>2]=0;c=a+4|0;f[c>>2]=0;d=a+8|0;f[d>>2]=0;e=a+16|0;f[e>>2]=0;g=a+20|0;f[g>>2]=0;h=a+24|0;f[h>>2]=0;i=b+4|0;j=(f[i>>2]|0)-(f[b>>2]|0)|0;k=(j|0)/20|0;if(j|0){if(k>>>0>214748364)$n(e);l=wk(j)|0;f[g>>2]=l;f[e>>2]=l;f[h>>2]=l+(k*20|0);k=f[b>>2]|0;b=(f[i>>2]|0)-k|0;if((b|0)>0){Bf(l|0,k|0,b|0)|0;k=l+(((b>>>0)/20|0)*20|0)|0;f[g>>2]=k;f[a+28>>2]=0;if((k|0)==(l|0)){m=0;n=a+12|0;f[n>>2]=m;return}g=(k-l|0)/20|0;k=0;b=0;do{i=W(f[l+(k*20|0)+16>>2]|0,f[l+(k*20|0)+12>>2]|0)|0;b=b>>>0<i>>>0?i:b;k=k+1|0}while(k>>>0<g>>>0);if(!b){m=0;n=a+12|0;f[n>>2]=m;return}if((b|0)<0)$n(a);g=wk(b)|0;oh(g|0,0,b|0)|0;k=g+b|0;b=g;f[a>>2]=b;f[c>>2]=k;f[d>>2]=k;m=b;n=a+12|0;f[n>>2]=m;return}}f[a+28>>2]=0;m=0;n=a+12|0;f[n>>2]=m;return}function af(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=f[b>>2]|0;do if((c|0)!=-1){b=f[(f[(f[a+4>>2]|0)+12>>2]|0)+(c<<2)>>2]|0;d=c+1|0;e=((d>>>0)%3|0|0)==0?c+-2|0:d;if((e|0)==-1)g=-1;else{d=(e|0)/3|0;g=f[(f[(f[a>>2]|0)+96>>2]|0)+(d*12|0)+(e-(d*3|0)<<2)>>2]|0}if((b|0)!=-1){d=(((b>>>0)%3|0|0)==0?2:-1)+b|0;if((d|0)==-1){h=-1;i=b;j=0}else{e=(d|0)/3|0;h=f[(f[(f[a>>2]|0)+96>>2]|0)+(e*12|0)+(d-(e*3|0)<<2)>>2]|0;i=b;j=0}}else{h=-1;i=-1;j=1}if((g|0)!=(h|0)){k=-1;return k|0}b=(((c>>>0)%3|0|0)==0?2:-1)+c|0;if((b|0)==-1)if(j){l=-1;m=-1;n=i;break}else o=-1;else{e=(b|0)/3|0;d=f[(f[(f[a>>2]|0)+96>>2]|0)+(e*12|0)+(b-(e*3|0)<<2)>>2]|0;if(j){l=-1;m=d;n=i;break}else o=d}d=i+1|0;e=((d>>>0)%3|0|0)==0?i+-2|0:d;if((e|0)==-1){l=-1;m=o;n=i}else{d=(e|0)/3|0;l=f[(f[(f[a>>2]|0)+96>>2]|0)+(d*12|0)+(e-(d*3|0)<<2)>>2]|0;m=o;n=i}}else{l=-1;m=-1;n=-1}while(0);k=(m|0)==(l|0)?n:-1;return k|0}function bf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=u;u=u+16|0;d=c;e=wk(64)|0;g=wk(12)|0;h=f[(f[a+4>>2]|0)+80>>2]|0;f[g+4>>2]=0;f[g>>2]=3584;f[g+8>>2]=h;f[d>>2]=g;Zi(e,d);g=e;if((b|0)>=0){h=a+8|0;i=a+12|0;a=f[i>>2]|0;j=f[h>>2]|0;k=a-j>>2;do if((k|0)<=(b|0)){l=b+1|0;m=a;if(l>>>0>k>>>0){Se(h,l-k|0);break}if(l>>>0<k>>>0){n=j+(l<<2)|0;if((n|0)!=(m|0)){l=m;do{l=l+-4|0;m=f[l>>2]|0;f[l>>2]=0;if(m|0)Pa[f[(f[m>>2]|0)+4>>2]&127](m)}while((l|0)!=(n|0))}f[i>>2]=n}}while(0);i=(f[h>>2]|0)+(b<<2)|0;b=f[i>>2]|0;f[i>>2]=g;if(!b)o=1;else{Pa[f[(f[b>>2]|0)+4>>2]&127](b);o=1}}else{Pa[f[(f[e>>2]|0)+4>>2]&127](e);o=0}e=f[d>>2]|0;f[d>>2]=0;if(!e){u=c;return o|0}Pa[f[(f[e>>2]|0)+4>>2]&127](e);u=c;return o|0}function cf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=a+4|0;e=f[a>>2]|0;g=((f[d>>2]|0)-e|0)/12|0;h=g+1|0;if(h>>>0>357913941)$n(a);i=a+8|0;j=((f[i>>2]|0)-e|0)/12|0;e=j<<1;k=j>>>0<178956970?(e>>>0<h>>>0?h:e):357913941;do if(k)if(k>>>0>357913941){e=qa(8)|0;Dm(e,13552);f[e>>2]=4908;ta(e|0,1128,105)}else{l=wk(k*12|0)|0;break}else l=0;while(0);e=l+(g*12|0)|0;g=l+(k*12|0)|0;Yi(e,c);c=e+12|0;k=f[a>>2]|0;l=f[d>>2]|0;if((l|0)==(k|0)){m=e;n=k;o=k}else{h=l;l=e;do{l=l+-12|0;h=h+-12|0;f[l>>2]=f[h>>2];f[l+4>>2]=f[h+4>>2];f[l+8>>2]=f[h+8>>2];f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0}while((h|0)!=(k|0));m=l;n=f[a>>2]|0;o=f[d>>2]|0}f[a>>2]=m;f[d>>2]=c;f[i>>2]=g;g=n;if((o|0)!=(g|0)){i=o;do{i=i+-12|0;if((b[i+11>>0]|0)<0)Ko(f[i>>2]|0)}while((i|0)!=(g|0))}if(!n)return;Ko(n);return}function df(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=c;e=b;g=d-e|0;h=g>>2;i=a+8|0;j=f[i>>2]|0;k=f[a>>2]|0;l=k;if(h>>>0>j-k>>2>>>0){if(!k)m=j;else{j=a+4|0;f[j>>2]=k;Ko(k);f[i>>2]=0;f[j>>2]=0;f[a>>2]=0;m=0}if(h>>>0>1073741823)$n(a);j=m>>1;n=m>>2>>>0<536870911?(j>>>0<h>>>0?h:j):1073741823;if(n>>>0>1073741823)$n(a);j=wk(n<<2)|0;m=a+4|0;f[m>>2]=j;f[a>>2]=j;f[i>>2]=j+(n<<2);if((g|0)<=0)return;Bf(j|0,b|0,g|0)|0;f[m>>2]=j+(g>>>2<<2);return}g=a+4|0;a=f[g>>2]|0;j=a-k>>2;k=h>>>0>j>>>0;h=k?b+(j<<2)|0:c;c=a;if((h|0)==(b|0))o=l;else{a=h+-4-e|0;e=b;b=l;while(1){f[b>>2]=f[e>>2];e=e+4|0;if((e|0)==(h|0))break;else b=b+4|0}o=l+((a>>>2)+1<<2)|0}if(!k){f[g>>2]=o;return}o=d-h|0;if((o|0)<=0)return;Bf(c|0,h|0,o|0)|0;f[g>>2]=(f[g>>2]|0)+(o>>>2<<2);return}function ef(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=a+4|0;d=f[a>>2]|0;e=(f[c>>2]|0)-d>>2;g=e+1|0;if(g>>>0>1073741823)$n(a);h=a+8|0;i=(f[h>>2]|0)-d|0;d=i>>1;j=i>>2>>>0<536870911?(d>>>0<g>>>0?g:d):1073741823;do if(j)if(j>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{k=wk(j<<2)|0;break}else k=0;while(0);d=k+(e<<2)|0;g=k+(j<<2)|0;j=f[b>>2]|0;f[b>>2]=0;f[d>>2]=j;j=d+4|0;b=f[a>>2]|0;i=b;l=f[c>>2]|0;if((l|0)==(b|0)){m=d;n=i;o=b}else{p=e+-1-((l+-4-i|0)>>>2)|0;i=l;l=d;do{l=l+-4|0;i=i+-4|0;d=f[i>>2]|0;f[i>>2]=0;f[l>>2]=d}while((i|0)!=(b|0));m=k+(p<<2)|0;n=f[a>>2]|0;o=f[c>>2]|0}f[a>>2]=m;f[c>>2]=j;f[h>>2]=g;g=n;if((o|0)!=(g|0)){h=o;do{h=h+-4|0;o=f[h>>2]|0;f[h>>2]=0;if(o|0){eh(o);Ko(o)}}while((h|0)!=(g|0))}if(!n)return;Ko(n);return}function ff(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;do if(!(en(a,f[c+8>>2]|0,g)|0)){if(!(en(a,f[c>>2]|0,g)|0)){h=f[a+8>>2]|0;Ta[f[(f[h>>2]|0)+24>>2]&3](h,c,d,e,g);break}if((f[c+16>>2]|0)!=(d|0)?(h=c+20|0,(f[h>>2]|0)!=(d|0)):0){f[c+32>>2]=e;i=c+44|0;if((f[i>>2]|0)==4)break;j=c+52|0;b[j>>0]=0;k=c+53|0;b[k>>0]=0;l=f[a+8>>2]|0;Ua[f[(f[l>>2]|0)+20>>2]&3](l,c,d,d,1,g);if(b[k>>0]|0)if(!(b[j>>0]|0)){m=1;n=11}else n=15;else{m=0;n=11}do if((n|0)==11){f[h>>2]=d;j=c+40|0;f[j>>2]=(f[j>>2]|0)+1;if((f[c+36>>2]|0)==1?(f[c+24>>2]|0)==2:0){b[c+54>>0]=1;if(m){n=15;break}else{o=4;break}}if(m)n=15;else o=4}while(0);if((n|0)==15)o=3;f[i>>2]=o;break}if((e|0)==1)f[c+32>>2]=1}else nk(0,c,d,e);while(0);return}function gf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=f[a>>2]|0;f[a+4>>2]=c;d=a+16|0;f[d>>2]=0;e=a+12|0;f[e>>2]=c;c=b+8|0;g=c;i=f[g>>2]|0;j=f[g+4>>2]|0;g=b+16|0;k=g;l=f[k>>2]|0;m=vl(l|0,f[k+4>>2]|0,4,0)|0;k=H;if((j|0)<(k|0)|(j|0)==(k|0)&i>>>0<m>>>0){n=0;return n|0}o=(f[b>>2]|0)+l|0;l=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;o=g;f[o>>2]=m;f[o+4>>2]=k;if(!((l|0)!=0&(l&3|0)==0)){n=0;return n|0}o=wl(i|0,j|0,m|0,k|0)|0;p=H;if((p|0)<0|(p|0)==0&o>>>0<l>>>0){n=0;return n|0}o=l>>>2;if(!o){q=m;r=k;s=j;t=i}else{Eg(a,o);o=c;c=g;q=f[c>>2]|0;r=f[c+4>>2]|0;s=f[o+4>>2]|0;t=f[o>>2]|0}o=vl(q|0,r|0,l|0,0)|0;r=H;if((s|0)<(r|0)|(s|0)==(r|0)&t>>>0<o>>>0){n=0;return n|0}Bf(f[a>>2]|0,(f[b>>2]|0)+q|0,l|0)|0;q=g;b=vl(f[q>>2]|0,f[q+4>>2]|0,l|0,0)|0;l=g;f[l>>2]=b;f[l+4>>2]=H;f[e>>2]=f[a>>2];f[d>>2]=0;n=1;return n|0}function hf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0;d=u;u=u+48|0;e=d+16|0;g=d;h=d+32|0;i=a+28|0;j=f[i>>2]|0;f[h>>2]=j;k=a+20|0;l=(f[k>>2]|0)-j|0;f[h+4>>2]=l;f[h+8>>2]=b;f[h+12>>2]=c;b=l+c|0;l=a+60|0;f[g>>2]=f[l>>2];f[g+4>>2]=h;f[g+8>>2]=2;j=Ol(ya(146,g|0)|0)|0;a:do if((b|0)!=(j|0)){g=2;m=b;n=h;o=j;while(1){if((o|0)<0)break;m=m-o|0;p=f[n+4>>2]|0;q=o>>>0>p>>>0;r=q?n+8|0:n;s=g+(q<<31>>31)|0;t=o-(q?p:0)|0;f[r>>2]=(f[r>>2]|0)+t;p=r+4|0;f[p>>2]=(f[p>>2]|0)-t;f[e>>2]=f[l>>2];f[e+4>>2]=r;f[e+8>>2]=s;o=Ol(ya(146,e|0)|0)|0;if((m|0)==(o|0)){v=3;break a}else{g=s;n=r}}f[a+16>>2]=0;f[i>>2]=0;f[k>>2]=0;f[a>>2]=f[a>>2]|32;if((g|0)==2)w=0;else w=c-(f[n+4>>2]|0)|0}else v=3;while(0);if((v|0)==3){v=f[a+44>>2]|0;f[a+16>>2]=v+(f[a+48>>2]|0);a=v;f[i>>2]=a;f[k>>2]=a;w=c}u=d;return w|0}function jf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;c=u;u=u+16|0;d=c;e=a+76|0;g=f[e>>2]|0;f[e>>2]=0;f[a+80>>2]=0;f[a+84>>2]=0;if(g|0)Ko(g);g=a+64|0;e=f[g>>2]|0;f[g>>2]=0;f[a+68>>2]=0;f[a+72>>2]=0;if(e|0)Ko(e);e=b+4|0;g=f[e>>2]|0;h=f[b>>2]|0;i=((g-h|0)/12|0)*3|0;j=a+4|0;k=f[a>>2]|0;l=(f[j>>2]|0)-k>>2;m=h;if(i>>>0<=l>>>0)if(i>>>0<l>>>0){f[j>>2]=k+(i<<2);n=g;o=h;p=m}else{n=g;o=h;p=m}else{Eg(a,i-l|0);l=f[b>>2]|0;n=f[e>>2]|0;o=l;p=l}if((n|0)!=(o|0)){o=f[a>>2]|0;l=(n-p|0)/12|0;n=0;do{e=n*3|0;f[o+(e<<2)>>2]=f[p+(n*12|0)>>2];f[o+(e+1<<2)>>2]=f[p+(n*12|0)+4>>2];f[o+(e+2<<2)>>2]=f[p+(n*12|0)+8>>2];n=n+1|0}while(n>>>0<l>>>0)}f[d>>2]=-1;if(!(Ub(a,d)|0)){q=0;u=c;return q|0}yb(a,f[d>>2]|0)|0;q=1;u=c;return q|0}function kf(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=a+12|0;d=f[a>>2]|0;e=a+8|0;g=f[e>>2]|0;h=(g|0)==-1;if(!(b[c>>0]|0)){do if(((!h?(i=(((g>>>0)%3|0|0)==0?2:-1)+g|0,(i|0)!=-1):0)?(f[(f[d>>2]|0)+(i>>>5<<2)>>2]&1<<(i&31)|0)==0:0)?(j=f[(f[(f[d+64>>2]|0)+12>>2]|0)+(i<<2)>>2]|0,(j|0)!=-1):0)if(!((j>>>0)%3|0)){k=j+2|0;break}else{k=j+-1|0;break}else k=-1;while(0);f[e>>2]=k;return}k=g+1|0;if(((!h?(h=((k>>>0)%3|0|0)==0?g+-2|0:k,(h|0)!=-1):0)?(f[(f[d>>2]|0)+(h>>>5<<2)>>2]&1<<(h&31)|0)==0:0)?(k=f[(f[(f[d+64>>2]|0)+12>>2]|0)+(h<<2)>>2]|0,h=k+1|0,(k|0)!=-1):0){g=((h>>>0)%3|0|0)==0?k+-2|0:h;f[e>>2]=g;if((g|0)!=-1){if((g|0)!=(f[a+4>>2]|0))return;f[e>>2]=-1;return}}else f[e>>2]=-1;g=f[a+4>>2]|0;do if((((g|0)!=-1?(a=(((g>>>0)%3|0|0)==0?2:-1)+g|0,(a|0)!=-1):0)?(f[(f[d>>2]|0)+(a>>>5<<2)>>2]&1<<(a&31)|0)==0:0)?(h=f[(f[(f[d+64>>2]|0)+12>>2]|0)+(a<<2)>>2]|0,(h|0)!=-1):0)if(!((h>>>0)%3|0)){l=h+2|0;break}else{l=h+-1|0;break}else l=-1;while(0);f[e>>2]=l;b[c>>0]=0;return}function lf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;d=a+8|0;e=f[d>>2]|0;g=a+4|0;h=f[g>>2]|0;if(((e-h|0)/12|0)>>>0>=b>>>0){i=b;j=h;do{f[j>>2]=f[c>>2];f[j+4>>2]=f[c+4>>2];f[j+8>>2]=f[c+8>>2];j=(f[g>>2]|0)+12|0;f[g>>2]=j;i=i+-1|0}while((i|0)!=0);return}i=f[a>>2]|0;j=(h-i|0)/12|0;h=j+b|0;if(h>>>0>357913941)$n(a);k=(e-i|0)/12|0;i=k<<1;e=k>>>0<178956970?(i>>>0<h>>>0?h:i):357913941;do if(e)if(e>>>0>357913941){i=qa(8)|0;Dm(i,13552);f[i>>2]=4908;ta(i|0,1128,105)}else{l=wk(e*12|0)|0;break}else l=0;while(0);i=l+(j*12|0)|0;j=l+(e*12|0)|0;e=b;b=i;while(1){f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];e=e+-1|0;if(!e)break;else b=b+12|0}b=f[a>>2]|0;e=(f[g>>2]|0)-b|0;c=i+(((e|0)/-12|0)*12|0)|0;if((e|0)>0)Bf(c|0,b|0,e|0)|0;f[a>>2]=c;f[g>>2]=l+(h*12|0);f[d>>2]=j;if(!b)return;Ko(b);return}function mf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;f[c>>2]=f[b>>2];He(a+12|0,b+4|0)|0;d=a+44|0;e=b+36|0;f[d>>2]=f[e>>2];f[d+4>>2]=f[e+4>>2];f[d+8>>2]=f[e+8>>2];f[d+12>>2]=f[e+12>>2];if((c|0)==(b|0)){f[a+96>>2]=f[b+88>>2];return}else{df(a+60|0,f[b+52>>2]|0,f[b+56>>2]|0);df(a+72|0,f[b+64>>2]|0,f[b+68>>2]|0);df(a+84|0,f[b+76>>2]|0,f[b+80>>2]|0);f[a+96>>2]=f[b+88>>2];Df(a+100|0,f[b+92>>2]|0,f[b+96>>2]|0);return}}function nf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;d=a+8|0;e=f[d>>2]|0;g=f[a>>2]|0;h=g;if(e-g>>2>>>0<b>>>0){if(!g)i=e;else{e=a+4|0;f[e>>2]=g;Ko(g);f[d>>2]=0;f[e>>2]=0;f[a>>2]=0;i=0}if(b>>>0>1073741823)$n(a);e=i>>1;j=i>>2>>>0<536870911?(e>>>0<b>>>0?b:e):1073741823;if(j>>>0>1073741823)$n(a);e=wk(j<<2)|0;i=a+4|0;f[i>>2]=e;f[a>>2]=e;f[d>>2]=e+(j<<2);j=b;d=e;while(1){f[d>>2]=f[c>>2];j=j+-1|0;if(!j)break;else d=d+4|0}k=i;l=e+(b<<2)|0;f[k>>2]=l;return}else{e=a+4|0;a=f[e>>2]|0;i=a-g>>2;g=i>>>0<b>>>0;d=g?i:b;j=a;if(d|0){a=d;d=h;while(1){f[d>>2]=f[c>>2];a=a+-1|0;if(!a)break;else d=d+4|0}}if(!g){k=e;l=h+(b<<2)|0;f[k>>2]=l;return}h=b-i|0;i=h;b=j;while(1){f[b>>2]=f[c>>2];i=i+-1|0;if(!i)break;else b=b+4|0}k=e;l=j+(h<<2)|0;f[k>>2]=l;return}}function of(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;e=a+20|0;if(Ec(e,c)|0){g=0;return g|0}a=Wb(e,c)|0;c=f[d>>2]|0;f[d>>2]=0;d=f[a>>2]|0;f[a>>2]=c;if(!d){g=1;return g|0}c=f[d+28>>2]|0;if(c|0){a=c;do{c=a;a=f[a>>2]|0;Dg(c+8|0);Ko(c)}while((a|0)!=0)}a=d+20|0;c=f[a>>2]|0;f[a>>2]=0;if(c|0)Ko(c);c=f[d+8>>2]|0;if(c|0){a=c;do{c=a;a=f[a>>2]|0;e=c+8|0;h=f[c+20>>2]|0;if(h|0){f[c+24>>2]=h;Ko(h)}if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);Ko(c)}while((a|0)!=0)}a=f[d>>2]|0;f[d>>2]=0;if(a|0)Ko(a);Ko(d);g=1;return g|0}function pf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=f[c>>2]|0;c=f[a>>2]|0;e=c+(d>>>5<<2)|0;f[e>>2]=f[e>>2]|1<<(d&31);e=f[a+64>>2]|0;g=(d|0)==-1;h=d+1|0;if(!g?(i=((h>>>0)%3|0|0)==0?d+-2|0:h,(i|0)!=-1):0)j=f[(f[e>>2]|0)+(i<<2)>>2]|0;else j=-1;i=f[a+12>>2]|0;h=i+(j>>>5<<2)|0;f[h>>2]=f[h>>2]|1<<(j&31);if(g){g=i+536870908|0;k=g;l=f[g>>2]|0;m=-2147483648}else{g=(((d>>>0)%3|0|0)==0?2:-1)+d|0;if((g|0)==-1)n=-1;else n=f[(f[e>>2]|0)+(g<<2)>>2]|0;g=i+(n>>>5<<2)|0;f[g>>2]=1<<(n&31)|f[g>>2];g=f[(f[e+12>>2]|0)+(d<<2)>>2]|0;if((g|0)==-1)return;b[a+24>>0]=0;a=c+(g>>>5<<2)|0;f[a>>2]=f[a>>2]|1<<(g&31);a=g+1|0;c=((a>>>0)%3|0|0)==0?g+-2|0:a;if((c|0)==-1)o=-1;else o=f[(f[e>>2]|0)+(c<<2)>>2]|0;c=i+(o>>>5<<2)|0;f[c>>2]=1<<(o&31)|f[c>>2];c=(((g>>>0)%3|0|0)==0?2:-1)+g|0;if((c|0)==-1)p=-1;else p=f[(f[e>>2]|0)+(c<<2)>>2]|0;c=i+(p>>>5<<2)|0;k=c;l=1<<(p&31);m=f[c>>2]|0}f[k>>2]=l|m;return}function qf(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;c=a+172|0;d=f[c>>2]|0;do if((d|0)==-1){e=f[a+144>>2]|0;g=Ka[f[(f[e>>2]|0)+32>>2]&127](e)|0;if(((h[g+36>>0]<<8|h[g+37>>0])&65535)<514)if(b[a+76>>0]|0){g=a+72|0;e=f[g>>2]|0;i=f[a+64>>2]|0;j=f[a+68>>2]|0;k=i+(e>>>3)|0;if(k>>>0<j>>>0?(l=h[k>>0]|0,k=e+1|0,f[g>>2]=k,(1<<(e&7)&l|0)!=0):0){l=i+(k>>>3)|0;if(l>>>0<j>>>0){m=(h[l>>0]|0)>>>(k&7)&1;n=e+2|0;f[g>>2]=n;o=m;p=i+(n>>>3)|0;q=n}else{o=0;p=l;q=k}if(p>>>0<j>>>0){j=(h[p>>0]|0)>>>(q&7);f[g>>2]=q+1;r=j<<1&2}else r=0;s=(r|o)<<1|1}else s=0}else s=1;else s=7}else{j=(f[a+196>>2]|0)+(d<<2)|0;g=f[j>>2]|0;k=g+-1|0;f[j>>2]=k;if((g|0)<1){t=9;return t|0}else{s=f[3496+(f[(f[(f[a+184>>2]|0)+((f[c>>2]|0)*12|0)>>2]|0)+(k<<2)>>2]<<2)>>2]|0;break}}while(0);f[a+168>>2]=s;t=s;return t|0}function rf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=c;g=d-e|0;h=a+8|0;i=f[h>>2]|0;j=f[a>>2]|0;k=j;if(g>>>0<=(i-j|0)>>>0){l=a+4|0;m=(f[l>>2]|0)-j|0;n=g>>>0>m>>>0;o=c+m|0;m=n?o:d;p=m-e|0;if(p|0)Rj(k|0,c|0,p|0)|0;if(!n){f[l>>2]=k+p;return}if((m|0)==(d|0))return;m=o;o=f[l>>2]|0;do{b[o>>0]=b[m>>0]|0;m=m+1|0;o=(f[l>>2]|0)+1|0;f[l>>2]=o}while((m|0)!=(d|0));return}if(!j)q=i;else{i=a+4|0;f[i>>2]=j;Ko(k);f[h>>2]=0;f[i>>2]=0;f[a>>2]=0;q=0}if((g|0)<0)$n(a);i=q<<1;k=q>>>0<1073741823?(i>>>0<g>>>0?g:i):2147483647;if((k|0)<0)$n(a);i=wk(k)|0;g=a+4|0;f[g>>2]=i;f[a>>2]=i;f[h>>2]=i+k;if((c|0)==(d|0))return;k=c;c=i;do{b[c>>0]=b[k>>0]|0;k=k+1|0;c=(f[g>>2]|0)+1|0;f[g>>2]=c}while((k|0)!=(d|0));return}function sf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0;g=u;u=u+32|0;h=g+16|0;i=g+8|0;j=g;k=e>>>0>1073741823?-1:e<<2;l=Ho(k)|0;oh(l|0,0,k|0)|0;k=a+8|0;a=f[l+4>>2]|0;m=f[b>>2]|0;n=f[b+4>>2]|0;f[i>>2]=f[l>>2];f[i+4>>2]=a;f[j>>2]=m;f[j+4>>2]=n;Cc(h,k,i,j);f[c>>2]=f[h>>2];f[c+4>>2]=f[h+4>>2];if((e|0)>=(d|0)){Io(l);u=g;return 1}n=0-e|0;m=i+4|0;a=j+4|0;o=h+4|0;p=e;do{q=c+(p<<2)|0;r=q+(n<<2)|0;s=b+(p<<2)|0;t=f[r+4>>2]|0;v=f[s>>2]|0;w=f[s+4>>2]|0;f[i>>2]=f[r>>2];f[m>>2]=t;f[j>>2]=v;f[a>>2]=w;Cc(h,k,i,j);f[q>>2]=f[h>>2];f[q+4>>2]=f[o>>2];p=p+e|0}while((p|0)<(d|0));Io(l);u=g;return 1}function tf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;f[a>>2]=1536;f[a+4>>2]=b;b=a+8|0;f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];f[b+12>>2]=f[c+12>>2];f[b+16>>2]=f[c+16>>2];f[b+20>>2]=f[c+20>>2];b=a+32|0;e=c+24|0;f[b>>2]=0;g=a+36|0;f[g>>2]=0;h=a+40|0;f[h>>2]=0;i=c+28|0;c=(f[i>>2]|0)-(f[e>>2]|0)|0;j=c>>2;if(c|0){if(j>>>0>1073741823)$n(b);k=wk(c)|0;f[g>>2]=k;f[b>>2]=k;f[h>>2]=k+(j<<2);j=f[e>>2]|0;e=(f[i>>2]|0)-j|0;if((e|0)>0){Bf(k|0,j|0,e|0)|0;f[g>>2]=k+(e>>>2<<2)}}f[a>>2]=2320;e=a+44|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];f[a>>2]=2488;f[a+60>>2]=0;f[a+64>>2]=0;f[a+76>>2]=0;f[a+80>>2]=0;f[a+84>>2]=0;e=a+88|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;f[a>>2]=1536;f[a+4>>2]=b;b=a+8|0;f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];f[b+12>>2]=f[c+12>>2];f[b+16>>2]=f[c+16>>2];f[b+20>>2]=f[c+20>>2];b=a+32|0;e=c+24|0;f[b>>2]=0;g=a+36|0;f[g>>2]=0;h=a+40|0;f[h>>2]=0;i=c+28|0;c=(f[i>>2]|0)-(f[e>>2]|0)|0;j=c>>2;if(c|0){if(j>>>0>1073741823)$n(b);k=wk(c)|0;f[g>>2]=k;f[b>>2]=k;f[h>>2]=k+(j<<2);j=f[e>>2]|0;e=(f[i>>2]|0)-j|0;if((e|0)>0){Bf(k|0,j|0,e|0)|0;f[g>>2]=k+(e>>>2<<2)}}f[a>>2]=1872;e=a+44|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];f[a>>2]=2040;f[a+60>>2]=0;f[a+64>>2]=0;f[a+76>>2]=0;f[a+80>>2]=0;f[a+84>>2]=0;e=a+88|0;f[e>>2]=f[d>>2];f[e+4>>2]=f[d+4>>2];f[e+8>>2]=f[d+8>>2];f[e+12>>2]=f[d+12>>2];return}function vf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,k=0,l=0,m=0,n=0;do if(c){if((j[a+38>>1]|0)>=514){if(ah(d,a)|0)break;else e=0;return e|0}g=a+8|0;i=f[g>>2]|0;k=f[g+4>>2]|0;g=a+16|0;l=g;m=f[l>>2]|0;n=vl(m|0,f[l+4>>2]|0,8,0)|0;l=H;if((k|0)<(l|0)|(k|0)==(l|0)&i>>>0<n>>>0){e=0;return e|0}else{n=(f[a>>2]|0)+m|0;m=n;i=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=n+4|0;n=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=d;l=m;b[l>>0]=i;b[l+1>>0]=i>>8;b[l+2>>0]=i>>16;b[l+3>>0]=i>>24;i=m+4|0;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;n=g;i=vl(f[n>>2]|0,f[n+4>>2]|0,8,0)|0;n=g;f[n>>2]=i;f[n+4>>2]=H;break}}while(0);b[a+36>>0]=1;d=a+16|0;c=f[d>>2]|0;n=(f[a>>2]|0)+c|0;i=a+8|0;g=wl(f[i>>2]|0,f[i+4>>2]|0,c|0,f[d+4>>2]|0)|0;f[a+32>>2]=0;f[a+24>>2]=n;f[a+28>>2]=n+g;e=1;return e|0}function wf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;g=u;u=u+32|0;h=g+16|0;i=g+8|0;j=g;k=e>>>0>1073741823?-1:e<<2;l=Ho(k)|0;oh(l|0,0,k|0)|0;k=a+8|0;a=f[l>>2]|0;m=f[l+4>>2]|0;n=f[b+4>>2]|0;f[h>>2]=f[b>>2];f[h+4>>2]=n;f[j>>2]=a;f[j+4>>2]=m;gd(i,k,j,h);f[c>>2]=f[i>>2];f[c+4>>2]=f[i+4>>2];if((e|0)>=(d|0)){Io(l);u=g;return 1}m=0-e|0;a=h+4|0;n=j+4|0;o=i+4|0;p=e;do{q=c+(p<<2)|0;r=q+(m<<2)|0;s=b+(p<<2)|0;t=f[r>>2]|0;v=f[r+4>>2]|0;r=f[s+4>>2]|0;f[h>>2]=f[s>>2];f[a>>2]=r;f[j>>2]=t;f[n>>2]=v;gd(i,k,j,h);f[q>>2]=f[i>>2];f[q+4>>2]=f[o>>2];p=p+e|0}while((p|0)<(d|0));Io(l);u=g;return 1}function xf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(c>>>0>4294967279)$n(a);d=a+11|0;e=b[d>>0]|0;g=e<<24>>24<0;if(g){h=f[a+4>>2]|0;i=(f[a+8>>2]&2147483647)+-1|0}else{h=e&255;i=10}j=h>>>0>c>>>0?h:c;c=j>>>0<11;k=c?10:(j+16&-16)+-1|0;do if((k|0)!=(i|0)){do if(c){j=f[a>>2]|0;if(g){l=0;m=j;n=a;o=13}else{um(a,j,(e&255)+1|0)|0;Ko(j);o=16}}else{j=k+1|0;p=wk(j)|0;if(g){l=1;m=f[a>>2]|0;n=p;o=13;break}else{um(p,a,(e&255)+1|0)|0;q=p;r=j;s=a+4|0;o=15;break}}while(0);if((o|0)==13){j=a+4|0;um(n,m,(f[j>>2]|0)+1|0)|0;Ko(m);if(l){q=n;r=k+1|0;s=j;o=15}else o=16}if((o|0)==15){f[a+8>>2]=r|-2147483648;f[s>>2]=h;f[a>>2]=q;break}else if((o|0)==16){b[d>>0]=h;break}}while(0);return}function yf(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)<0){g=0;return g|0}a:do if(!c){e=a+4|0;h=f[e>>2]|0;i=f[a>>2]|0;j=h-i|0;k=i;if(j>>>0>=d>>>0){if(j>>>0<=d>>>0)break;f[e>>2]=k+d;break}l=d-j|0;m=a+8|0;n=f[m>>2]|0;if((n-h|0)>>>0>=l>>>0){o=l;p=h;while(1){b[p>>0]=0;p=(f[e>>2]|0)+1|0;f[e>>2]=p;o=o+-1|0;if(!o)break a}}if((d|0)<0)$n(a);o=n-i|0;p=o<<1;h=o>>>0<1073741823?(p>>>0<d>>>0?d:p):2147483647;if(!h)q=0;else q=wk(h)|0;oh(q+j|0,0,l|0)|0;if((j|0)>0)Bf(q|0,k|0,j|0)|0;f[a>>2]=q;f[e>>2]=q+d;f[m>>2]=q+h;if(i|0)Ko(k)}else rf(a,c,c+d|0);while(0);d=a+24|0;a=d;c=vl(f[a>>2]|0,f[a+4>>2]|0,1,0)|0;a=d;f[a>>2]=c;f[a+4>>2]=H;g=1;return g|0}function zf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=u;u=u+32|0;e=d+16|0;g=d;switch(c<<24>>24){case 0:{c=wk(44)|0;h=c;i=h+44|0;do{f[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Qj(c);f[c>>2]=3696;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=c;u=d;return}case 1:{c=wk(44)|0;h=c;i=h+44|0;do{f[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Qj(c);f[c>>2]=3652;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=c;u=d;return}default:{c=wk(32)|0;f[g>>2]=c;f[g+8>>2]=-2147483616;f[g+4>>2]=28;h=c;j=11853;i=h+28|0;do{b[h>>0]=b[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(i|0));b[c+28>>0]=0;f[e>>2]=-1;c=e+4|0;Yi(c,g);f[a>>2]=f[e>>2];Yi(a+4|0,c);f[a+16>>2]=0;if((b[c+11>>0]|0)<0)Ko(f[c>>2]|0);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=d;return}}}function Af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=u;u=u+16|0;e=d+8|0;g=d+4|0;h=d;if(!c){i=0;u=d;return i|0}f[a>>2]=b;f[e>>2]=0;zh(e,b)|0;a:do if(!(f[e>>2]|0))j=8;else{b=0;while(1){zh(g,f[a>>2]|0)|0;k=wk(44)|0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=1065353216;l=k+20|0;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;f[l+12>>2]=0;f[k+36>>2]=1065353216;f[k+40>>2]=f[g>>2];if(!(Mc(a,k)|0))break;f[h>>2]=k;bi(c,h)|0;l=f[h>>2]|0;f[h>>2]=0;if(l|0){eh(l);Ko(l)}b=b+1|0;if(b>>>0>=(f[e>>2]|0)>>>0){j=8;break a}}eh(k);Ko(k);m=0}while(0);if((j|0)==8)m=Mc(a,c)|0;i=m;u=d;return i|0}function Bf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;if((d|0)>=8192)return Ca(a|0,c|0,d|0)|0;e=a|0;g=a+d|0;if((a&3)==(c&3)){while(a&3){if(!d)return e|0;b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0;d=d-1|0}h=g&-4|0;d=h-64|0;while((a|0)<=(d|0)){f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];f[a+12>>2]=f[c+12>>2];f[a+16>>2]=f[c+16>>2];f[a+20>>2]=f[c+20>>2];f[a+24>>2]=f[c+24>>2];f[a+28>>2]=f[c+28>>2];f[a+32>>2]=f[c+32>>2];f[a+36>>2]=f[c+36>>2];f[a+40>>2]=f[c+40>>2];f[a+44>>2]=f[c+44>>2];f[a+48>>2]=f[c+48>>2];f[a+52>>2]=f[c+52>>2];f[a+56>>2]=f[c+56>>2];f[a+60>>2]=f[c+60>>2];a=a+64|0;c=c+64|0}while((a|0)<(h|0)){f[a>>2]=f[c>>2];a=a+4|0;c=c+4|0}}else{h=g-4|0;while((a|0)<(h|0)){b[a>>0]=b[c>>0]|0;b[a+1>>0]=b[c+1>>0]|0;b[a+2>>0]=b[c+2>>0]|0;b[a+3>>0]=b[c+3>>0]|0;a=a+4|0;c=c+4|0}}while((a|0)<(g|0)){b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}return e|0}function Cf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=a+132|0;c=f[b>>2]|0;if(c|0){d=a+136|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{e=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[e+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}g=a+120|0;c=f[g>>2]|0;if(c|0){d=a+124|0;b=f[d>>2]|0;if((b|0)==(c|0))j=c;else{h=b;do{b=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[b+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));j=f[g>>2]|0}f[d>>2]=c;Ko(j)}j=f[a+108>>2]|0;if(j|0){f[a+112>>2]=j;Ko(j)}j=f[a+96>>2]|0;if(!j){k=a+76|0;zk(k);l=a+56|0;zk(l);m=a+36|0;zk(m);n=a+16|0;zk(n);return}f[a+100>>2]=j;Ko(j);k=a+76|0;zk(k);l=a+56|0;zk(l);m=a+36|0;zk(m);n=a+16|0;zk(n);return}function Df(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c;e=b;g=d-e|0;h=g>>2;i=a+8|0;j=f[i>>2]|0;k=f[a>>2]|0;l=k;if(h>>>0<=j-k>>2>>>0){m=a+4|0;n=(f[m>>2]|0)-k>>2;o=h>>>0>n>>>0;p=o?b+(n<<2)|0:c;c=p;n=c-e|0;if(n|0)Rj(k|0,b|0,n|0)|0;if(!o){f[m>>2]=l+(n>>2<<2);return}n=d-c|0;if((n|0)<=0)return;Bf(f[m>>2]|0,p|0,n|0)|0;f[m>>2]=(f[m>>2]|0)+(n>>>2<<2);return}if(!k)q=j;else{j=a+4|0;f[j>>2]=k;Ko(k);f[i>>2]=0;f[j>>2]=0;f[a>>2]=0;q=0}if(h>>>0>1073741823)$n(a);j=q>>1;k=q>>2>>>0<536870911?(j>>>0<h>>>0?h:j):1073741823;if(k>>>0>1073741823)$n(a);j=wk(k<<2)|0;h=a+4|0;f[h>>2]=j;f[a>>2]=j;f[i>>2]=j+(k<<2);if((g|0)<=0)return;Bf(j|0,b|0,g|0)|0;f[h>>2]=j+(g>>>2<<2);return}function Ef(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=u;u=u+16|0;e=d;f[e>>2]=b;g=a+8|0;if(((f[a+12>>2]|0)-(f[g>>2]|0)>>2|0)<=(b|0))xg(g,b+1|0);h=f[(f[c>>2]|0)+56>>2]|0;do if((h|0)<5){i=a+20+(h*12|0)+4|0;j=f[i>>2]|0;if((j|0)==(f[a+20+(h*12|0)+8>>2]|0)){Ng(a+20+(h*12|0)|0,e);break}else{f[j>>2]=b;f[i>>2]=j+4;break}}while(0);b=f[c>>2]|0;h=f[e>>2]|0;f[b+60>>2]=h;e=(f[g>>2]|0)+(h<<2)|0;f[c>>2]=0;c=f[e>>2]|0;f[e>>2]=b;if(!c){u=d;return}b=c+88|0;e=f[b>>2]|0;f[b>>2]=0;if(e|0){b=f[e+8>>2]|0;if(b|0){f[e+12>>2]=b;Ko(b)}Ko(e)}e=f[c+68>>2]|0;if(e|0){f[c+72>>2]=e;Ko(e)}e=c+64|0;b=f[e>>2]|0;f[e>>2]=0;if(b|0){e=f[b>>2]|0;if(e|0){f[b+4>>2]=e;Ko(e)}Ko(b)}Ko(c);u=d;return}function Ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;e=u;u=u+16|0;g=e+12|0;h=e+8|0;i=e;f[i>>2]=f[b>>2];f[g>>2]=f[i>>2];i=Ac(a,g,h,e+4|0,c)|0;c=f[i>>2]|0;if(c|0){j=c;u=e;return j|0}c=wk(40)|0;Yi(c+16|0,d);Yi(c+28|0,d+12|0);d=f[h>>2]|0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=d;f[i>>2]=c;d=f[f[a>>2]>>2]|0;if(!d)k=c;else{f[a>>2]=d;k=f[i>>2]|0}vd(f[a+4>>2]|0,k);k=a+8|0;f[k>>2]=(f[k>>2]|0)+1;j=c;u=e;return j|0}function Gf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=u;u=u+16|0;g=e;h=a+4|0;f[h>>2]=0;if(!c){u=e;return}i=a+8|0;j=f[i>>2]|0;k=j<<5;if(k>>>0<c>>>0){f[g>>2]=0;l=g+4|0;f[l>>2]=0;m=g+8|0;f[m>>2]=0;if((c|0)<0)$n(a);n=j<<6;j=c+31&-32;vg(g,k>>>0<1073741823?(n>>>0<j>>>0?j:n):2147483647);n=f[a>>2]|0;f[a>>2]=f[g>>2];f[g>>2]=n;g=f[h>>2]|0;f[h>>2]=c;f[l>>2]=g;g=f[i>>2]|0;f[i>>2]=f[m>>2];f[m>>2]=g;if(n|0)Ko(n);o=a}else{f[h>>2]=c;o=a}a=f[o>>2]|0;o=a;h=a;a=c>>>5;n=a<<2;if(!(b[d>>0]|0)){oh(h|0,0,n|0)|0;d=c&31;g=o+(a<<2)|0;if(!d){u=e;return}f[g>>2]=f[g>>2]&~(-1>>>(32-d|0));u=e;return}else{oh(h|0,-1,n|0)|0;n=c&31;c=o+(a<<2)|0;if(!n){u=e;return}f[c>>2]=f[c>>2]|-1>>>(32-n|0);u=e;return}}function Hf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;c=b+8|0;d=f[c>>2]|0;e=f[c+4>>2]|0;c=b+16|0;g=c;i=f[g>>2]|0;j=f[g+4>>2]|0;g=vl(i|0,j|0,4,0)|0;k=H;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0<g>>>0){l=0;return l|0}m=f[b>>2]|0;b=m+i|0;n=h[b>>0]|h[b+1>>0]<<8|h[b+2>>0]<<16|h[b+3>>0]<<24;b=c;f[b>>2]=g;f[b+4>>2]=k;k=vl(i|0,j|0,8,0)|0;j=H;if((e|0)<(j|0)|(e|0)==(j|0)&d>>>0<k>>>0){l=0;return l|0}d=m+g|0;g=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;d=c;f[d>>2]=k;f[d+4>>2]=j;if((n|0)>(g|0)){l=0;return l|0}f[a+12>>2]=n;f[a+16>>2]=g;j=wl(g|0,((g|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=H;if(!(n>>>0<0|(n|0)==0&j>>>0<2147483647)){l=0;return l|0}n=j+1|0;f[a+20>>2]=n;j=(n|0)/2|0;g=a+24|0;f[g>>2]=j;f[a+28>>2]=0-j;if(n&1|0){l=1;return l|0}f[g>>2]=j+-1;l=1;return l|0}function If(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=a+4|0;d=f[c>>2]|0;e=f[a>>2]|0;g=(d-e|0)/12|0;h=g+1|0;i=e;j=d;if(h>>>0>357913941)$n(a);d=a+8|0;k=((f[d>>2]|0)-e|0)/12|0;l=k<<1;m=k>>>0<178956970?(l>>>0<h>>>0?h:l):357913941;do if(m)if(m>>>0>357913941){l=qa(8)|0;Dm(l,13552);f[l>>2]=4908;ta(l|0,1128,105)}else{n=wk(m*12|0)|0;break}else n=0;while(0);l=n+(g*12|0)|0;h=n+(m*12|0)|0;f[l>>2]=f[b>>2];f[n+(g*12|0)+4>>2]=f[b+4>>2];f[n+(g*12|0)+8>>2]=f[b+8>>2];b=l+12|0;if((j|0)==(i|0))o=l;else{g=j;j=l;while(1){l=j+-12|0;n=g;g=g+-12|0;f[l>>2]=f[g>>2];f[j+-8>>2]=f[n+-8>>2];f[j+-4>>2]=f[n+-4>>2];if((g|0)==(i|0)){o=l;break}else j=l}}f[a>>2]=o;f[c>>2]=b;f[d>>2]=h;if(!e)return;Ko(e);return}function Jf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=a+4|0;a=f[d>>2]|0;do if(a|0){e=b[c+11>>0]|0;g=e<<24>>24<0;h=g?f[c+4>>2]|0:e&255;e=g?f[c>>2]|0:c;g=d;i=a;do{j=i+16|0;k=b[j+11>>0]|0;l=k<<24>>24<0;m=l?f[i+20>>2]|0:k&255;k=h>>>0<m>>>0;n=k?h:m;if((n|0)!=0?(o=Fi(l?f[j>>2]|0:j,e,n)|0,(o|0)!=0):0)p=o;else p=m>>>0<h>>>0?-1:k&1;k=(p|0)<0;g=k?g:i;i=f[(k?i+4|0:i)>>2]|0}while((i|0)!=0);if((g|0)!=(d|0)){i=g+16|0;k=b[i+11>>0]|0;m=k<<24>>24<0;o=m?f[g+20>>2]|0:k&255;k=o>>>0<h>>>0?o:h;if(k|0?(n=Fi(e,m?f[i>>2]|0:i,k)|0,n|0):0){if((n|0)<0)break;else q=g;return q|0}if(h>>>0>=o>>>0){q=g;return q|0}}}while(0);q=d;return q|0}function Kf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=f[c+88>>2]|0;if(!d){e=0;return e|0}if((f[d>>2]|0)!=1){e=0;return e|0}g=d+8|0;d=f[g>>2]|0;f[a+4>>2]=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;i=a+8|0;j=c+24|0;c=b[j>>0]|0;k=c<<24>>24;l=a+12|0;m=f[i>>2]|0;n=(f[l>>2]|0)-m>>2;o=m;if(n>>>0>=k>>>0)if(n>>>0>k>>>0){f[l>>2]=o+(k<<2);p=c;q=d}else{p=c;q=d}else{Eg(i,k-n|0);p=b[j>>0]|0;q=f[g>>2]|0}g=q+4|0;j=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;if(p<<24>>24>0){g=f[i>>2]|0;i=p<<24>>24;p=j;n=4;k=0;while(1){f[g+(k<<2)>>2]=p;n=n+4|0;k=k+1|0;d=q+n|0;c=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;if((k|0)>=(i|0)){r=c;break}else p=c}}else r=j;f[a+20>>2]=r;e=1;return e|0}function Lf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=a+128|0;c=f[b>>2]|0;if(c|0){d=a+132|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{e=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[e+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}g=a+116|0;c=f[g>>2]|0;if(c|0){d=a+120|0;b=f[d>>2]|0;if((b|0)==(c|0))j=c;else{h=b;do{b=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[b+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));j=f[g>>2]|0}f[d>>2]=c;Ko(j)}j=f[a+104>>2]|0;if(j|0){f[a+108>>2]=j;Ko(j)}j=f[a+92>>2]|0;if(!j){k=a+72|0;zk(k);l=a+52|0;zk(l);m=a+32|0;zk(m);return}f[a+96>>2]=j;Ko(j);k=a+72|0;zk(k);l=a+52|0;zk(l);m=a+32|0;zk(m);return}function Mf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=u;u=u+224|0;g=e+120|0;h=e+80|0;i=e;j=e+136|0;k=h;l=k+40|0;do{f[k>>2]=0;k=k+4|0}while((k|0)<(l|0));f[g>>2]=f[d>>2];if((ub(0,c,g,i,h)|0)<0)m=-1;else{if((f[a+76>>2]|0)>-1)n=Po(a)|0;else n=0;d=f[a>>2]|0;k=d&32;if((b[a+74>>0]|0)<1)f[a>>2]=d&-33;d=a+48|0;if(!(f[d>>2]|0)){l=a+44|0;o=f[l>>2]|0;f[l>>2]=j;p=a+28|0;f[p>>2]=j;q=a+20|0;f[q>>2]=j;f[d>>2]=80;r=a+16|0;f[r>>2]=j+80;j=ub(a,c,g,i,h)|0;if(!o)s=j;else{Ma[f[a+36>>2]&31](a,0,0)|0;t=(f[q>>2]|0)==0?-1:j;f[l>>2]=o;f[d>>2]=0;f[r>>2]=0;f[p>>2]=0;f[q>>2]=0;s=t}}else s=ub(a,c,g,i,h)|0;h=f[a>>2]|0;f[a>>2]=h|k;if(n|0)Oo(a);m=(h&32|0)==0?s:-1}u=e;return m|0}function Nf(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=a+8|0;d=f[c>>2]|0;e=d+84|0;g=a+16|0;if(b[e>>0]|0){h=f[g>>2]|0;return h|0}a=f[g>>2]|0;if(!a){h=f[g>>2]|0;return h|0}i=a+84|0;if(!(b[i>>0]|0)){h=f[g>>2]|0;return h|0}j=d+68|0;k=d+72|0;d=(f[k>>2]|0)-(f[j>>2]|0)>>2;b[i>>0]=0;i=a+68|0;l=a+72|0;a=f[i>>2]|0;m=(f[l>>2]|0)-a>>2;if(d>>>0<=m>>>0)if(d>>>0<m>>>0){f[l>>2]=a+(d<<2);n=k;o=j;p=e}else{n=k;o=j;p=e}else{Of(i,d-m|0,1404);m=f[c>>2]|0;n=m+72|0;o=m+68|0;p=m+84|0}if(b[p>>0]|0){h=f[g>>2]|0;return h|0}p=f[o>>2]|0;o=p;m=(f[n>>2]|0)-p|0;p=m>>2;if(!m){h=f[g>>2]|0;return h|0}m=f[(f[g>>2]|0)+68>>2]|0;n=0;do{f[m+(n<<2)>>2]=f[o+(n<<2)>>2];n=n+1|0}while(n>>>0<p>>>0);h=f[g>>2]|0;return h|0}function Of(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=a+8|0;e=f[d>>2]|0;g=a+4|0;h=f[g>>2]|0;i=h;if(e-h>>2>>>0>=b>>>0){j=b;k=i;while(1){f[k>>2]=f[c>>2];j=j+-1|0;if(!j)break;else k=k+4|0}f[g>>2]=i+(b<<2);return}i=f[a>>2]|0;k=h-i|0;h=k>>2;j=h+b|0;if(j>>>0>1073741823)$n(a);l=e-i|0;e=l>>1;m=l>>2>>>0<536870911?(e>>>0<j>>>0?j:e):1073741823;do if(m)if(m>>>0>1073741823){e=qa(8)|0;Dm(e,13552);f[e>>2]=4908;ta(e|0,1128,105)}else{e=wk(m<<2)|0;n=e;o=e;break}else{n=0;o=0}while(0);e=n+(h<<2)|0;h=n+(m<<2)|0;m=b;j=e;while(1){f[j>>2]=f[c>>2];m=m+-1|0;if(!m)break;else j=j+4|0}if((k|0)>0)Bf(o|0,i|0,k|0)|0;f[a>>2]=n;f[g>>2]=e+(b<<2);f[d>>2]=h;if(!i)return;Ko(i);return}function Pf(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=u;u=u+64|0;i=h;j=f[a>>2]|0;k=a+(f[j+-8>>2]|0)|0;l=f[j+-4>>2]|0;f[i>>2]=e;f[i+4>>2]=a;f[i+8>>2]=c;f[i+12>>2]=g;g=i+16|0;c=i+20|0;a=i+24|0;j=i+28|0;m=i+32|0;n=i+40|0;o=g;p=o+36|0;do{f[o>>2]=0;o=o+4|0}while((o|0)<(p|0));d[g+36>>1]=0;b[g+38>>0]=0;a:do if(en(l,e,0)|0){f[i+48>>2]=1;Ua[f[(f[l>>2]|0)+20>>2]&3](l,i,k,k,1,0);q=(f[a>>2]|0)==1?k:0}else{Ta[f[(f[l>>2]|0)+24>>2]&3](l,i,k,1,0);switch(f[i+36>>2]|0){case 0:{q=(f[n>>2]|0)==1&(f[j>>2]|0)==1&(f[m>>2]|0)==1?f[c>>2]|0:0;break a;break}case 1:break;default:{q=0;break a}}if((f[a>>2]|0)!=1?!((f[n>>2]|0)==0&(f[j>>2]|0)==1&(f[m>>2]|0)==1):0){q=0;break}q=f[g>>2]|0}while(0);u=h;return q|0}function Qf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=Ia;d=u;u=u+32|0;e=d+16|0;g=d;h=a+8|0;i=b[(f[h>>2]|0)+24>>0]<<2;j=f[a+16>>2]|0;if(!(f[j+80>>2]|0))k=0;else k=(f[f[j>>2]>>2]|0)+(f[j+48>>2]|0)|0;f[g>>2]=-1;f[g+4>>2]=-1;f[g+8>>2]=-1;f[g+12>>2]=-1;j=f[a+24>>2]|0;if((j+-2|0)>>>0>28){l=0;u=d;return l|0}f[g>>2]=j;a=1<<j;f[g+4>>2]=a+-1;j=a+-2|0;a=g+8|0;f[a>>2]=j;f[g+12>>2]=(j|0)/2|0;if(!c){l=1;u=d;return l|0}m=0;n=0;o=0;p=j;while(1){q=_(_(1.0)/_(p|0));Pe(g,_(q*_(f[k+(m<<2)>>2]|0)),_(q*_(f[k+((m|1)<<2)>>2]|0)),e);Bf((f[f[(f[h>>2]|0)+64>>2]>>2]|0)+o|0,e|0,i|0)|0;j=n+1|0;if((j|0)==(c|0)){l=1;break}m=m+2|0;n=j;o=o+i|0;p=f[a>>2]|0}u=d;return l|0}function Rf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=(f[a>>2]|0)+1794895138|0;g=fn(f[a+8>>2]|0,e)|0;h=fn(f[a+12>>2]|0,e)|0;i=fn(f[a+16>>2]|0,e)|0;a:do if((g>>>0<c>>>2>>>0?(j=c-(g<<2)|0,h>>>0<j>>>0&i>>>0<j>>>0):0)?((i|h)&3|0)==0:0){j=h>>>2;k=i>>>2;l=0;m=g;while(1){n=m>>>1;o=l+n|0;p=o<<1;q=p+j|0;r=fn(f[a+(q<<2)>>2]|0,e)|0;s=fn(f[a+(q+1<<2)>>2]|0,e)|0;if(!(s>>>0<c>>>0&r>>>0<(c-s|0)>>>0)){t=0;break a}if(b[a+(s+r)>>0]|0){t=0;break a}r=Ri(d,a+s|0)|0;if(!r)break;s=(r|0)<0;if((m|0)==1){t=0;break a}l=s?l:o;m=s?n:m-n|0}m=p+k|0;l=fn(f[a+(m<<2)>>2]|0,e)|0;j=fn(f[a+(m+1<<2)>>2]|0,e)|0;if(j>>>0<c>>>0&l>>>0<(c-j|0)>>>0)t=(b[a+(j+l)>>0]|0)==0?a+j|0:0;else t=0}else t=0;while(0);return t|0}function Sf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=a+8|0;d=f[c>>2]|0;e=a+4|0;g=f[e>>2]|0;h=g;if(d-g>>2>>>0>=b>>>0){i=b;j=h;while(1){f[j>>2]=1;i=i+-1|0;if(!i)break;else j=j+4|0}f[e>>2]=h+(b<<2);return}h=f[a>>2]|0;j=g-h|0;g=j>>2;i=g+b|0;if(i>>>0>1073741823)$n(a);k=d-h|0;d=k>>1;l=k>>2>>>0<536870911?(d>>>0<i>>>0?i:d):1073741823;do if(l)if(l>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{d=wk(l<<2)|0;m=d;n=d;break}else{m=0;n=0}while(0);d=m+(g<<2)|0;g=m+(l<<2)|0;l=b;i=d;while(1){f[i>>2]=1;l=l+-1|0;if(!l)break;else i=i+4|0}if((j|0)>0)Bf(n|0,h|0,j|0)|0;f[a>>2]=m;f[e>>2]=d+(b<<2);f[c>>2]=g;if(!h)return;Ko(h);return}function Tf(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=a+12|0;d=f[a>>2]|0;e=a+8|0;g=f[e>>2]|0;h=(g|0)==-1;if(!(b[c>>0]|0)){do if((!h?(i=(((g>>>0)%3|0|0)==0?2:-1)+g|0,(i|0)!=-1):0)?(j=f[(f[d+12>>2]|0)+(i<<2)>>2]|0,(j|0)!=-1):0)if(!((j>>>0)%3|0)){k=j+2|0;break}else{k=j+-1|0;break}else k=-1;while(0);f[e>>2]=k;return}k=g+1|0;if((!h?(h=((k>>>0)%3|0|0)==0?g+-2|0:k,(h|0)!=-1):0)?(k=f[(f[d+12>>2]|0)+(h<<2)>>2]|0,h=k+1|0,(k|0)!=-1):0){g=((h>>>0)%3|0|0)==0?k+-2|0:h;f[e>>2]=g;if((g|0)!=-1){if((g|0)!=(f[a+4>>2]|0))return;f[e>>2]=-1;return}}else f[e>>2]=-1;g=f[a+4>>2]|0;do if(((g|0)!=-1?(a=(((g>>>0)%3|0|0)==0?2:-1)+g|0,(a|0)!=-1):0)?(h=f[(f[d+12>>2]|0)+(a<<2)>>2]|0,(h|0)!=-1):0)if(!((h>>>0)%3|0)){l=h+2|0;break}else{l=h+-1|0;break}else l=-1;while(0);f[e>>2]=l;b[c>>0]=0;return}function Uf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=a+12|0;a:do if((f[e>>2]|0)!=(c|0)){g=f[a>>2]|0;h=a+4|0;i=f[h>>2]|0;if((i|0)!=(g|0)){j=i;do{j=j+-12|0;if((b[j+11>>0]|0)<0)Ko(f[j>>2]|0)}while((j|0)!=(g|0))}f[h>>2]=g;f[e>>2]=c;j=f[c+8>>2]|0;if(j|0){i=a+8|0;k=j;j=g;while(1){l=k+8|0;if((j|0)==(f[i>>2]|0))cf(a,l);else{Yi(j,l);f[h>>2]=(f[h>>2]|0)+12}l=f[k>>2]|0;if(!l)break a;k=l;j=f[h>>2]|0}}}while(0);if((d|0)<0){m=0;return m|0}c=f[a>>2]|0;if((((f[a+4>>2]|0)-c|0)/12|0)>>>0<=d>>>0){m=0;return m|0}a=c+(d*12|0)|0;if((b[a+11>>0]|0)<0){m=f[a>>2]|0;return m|0}else{m=a;return m|0}return 0}function Vf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=u;u=u+32|0;e=d+12|0;g=d;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;h=Dh(c)|0;if(h>>>0>4294967279)$n(e);if(h>>>0<11){b[e+11>>0]=h;if(!h)i=e;else{j=e;k=6}}else{l=h+16&-16;m=wk(l)|0;f[e>>2]=m;f[e+8>>2]=l|-2147483648;f[e+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,c|0,h|0)|0;i=j}b[i+h>>0]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=g+11|0;b[h>>0]=4;f[g>>2]=1701667182;b[g+4>>0]=0;i=f[a+4>>2]|0;if((i|0)!=0?(j=Ed(i,g,e)|0,(j|0)!=0):0)n=Di(a,f[j+40>>2]|0)|0;else n=-1;if((b[h>>0]|0)<0)Ko(f[g>>2]|0);if((b[e+11>>0]|0)>=0){u=d;return n|0}Ko(f[e>>2]|0);u=d;return n|0} +function sb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;g=u;u=u+64|0;d=g+16|0;h=g;i=a+8|0;f[i>>2]=e;j=a+32|0;k=a+36|0;l=f[j>>2]|0;m=(f[k>>2]|0)-l>>2;if(m>>>0>=e>>>0){if(m>>>0>e>>>0)f[k>>2]=l+(e<<2)}else Eg(j,e-m|0);m=d;j=m+48|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(j|0));f[h>>2]=0;if(!e){n=0;o=0}else{Of(d,e,h);n=f[d+12>>2]|0;o=f[d+16>>2]|0}f[h>>2]=0;m=d+16|0;j=o-n>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[m>>2]=n+(e<<2)}else Of(d+12|0,e-j|0,h);j=d+24|0;f[h>>2]=0;n=d+28|0;m=f[j>>2]|0;o=(f[n>>2]|0)-m>>2;if(o>>>0>=e>>>0){if(o>>>0>e>>>0)f[n>>2]=m+(e<<2)}else Of(j,e-o|0,h);o=d+36|0;f[h>>2]=0;j=d+40|0;m=f[o>>2]|0;n=(f[j>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[j>>2]=m+(e<<2)}else Of(o,e-n|0,h);n=f[d>>2]|0;if((f[i>>2]|0)>0){o=a+16|0;m=a+32|0;j=a+12|0;l=0;do{k=f[n+(l<<2)>>2]|0;p=f[o>>2]|0;do if((k|0)<=(p|0)){q=f[j>>2]|0;r=f[m>>2]|0;s=r+(l<<2)|0;if((k|0)<(q|0)){f[s>>2]=q;t=r;break}else{f[s>>2]=k;t=r;break}}else{r=f[m>>2]|0;f[r+(l<<2)>>2]=p;t=r}while(0);l=l+1|0;v=f[i>>2]|0}while((l|0)<(v|0));if((v|0)>0){v=a+20|0;l=0;do{m=(f[b+(l<<2)>>2]|0)+(f[t+(l<<2)>>2]|0)|0;n=c+(l<<2)|0;f[n>>2]=m;if((m|0)<=(f[o>>2]|0)){if((m|0)<(f[j>>2]|0)){w=(f[v>>2]|0)+m|0;x=19}}else{w=m-(f[v>>2]|0)|0;x=19}if((x|0)==19){x=0;f[n>>2]=w}l=l+1|0}while((l|0)<(f[i>>2]|0))}}l=f[a+48>>2]|0;w=f[a+52>>2]|0;v=wk(16)|0;f[v>>2]=0;f[v+4>>2]=0;f[v+8>>2]=0;f[v+12>>2]=0;f[h>>2]=0;j=h+4|0;f[j>>2]=0;o=h+8|0;f[o>>2]=0;do if(e)if(e>>>0>1073741823)$n(h);else{t=e<<2;n=wk(t)|0;f[h>>2]=n;m=n+(e<<2)|0;f[o>>2]=m;oh(n|0,0,t|0)|0;f[j>>2]=m;y=n;break}else y=0;while(0);o=f[a+56>>2]|0;n=f[o>>2]|0;m=(f[o+4>>2]|0)-n|0;t=m>>2;a:do if((m|0)>4){p=n;k=(e|0)>0;r=l+12|0;s=a+16|0;q=a+32|0;z=a+12|0;A=a+20|0;B=e<<2;C=(e|0)==1;D=1;while(1){if(t>>>0<=D>>>0){x=30;break}E=f[p+(D<<2)>>2]|0;do if((E|0)!=-1){F=(((E>>>0)%3|0|0)==0?2:-1)+E|0;G=(F|0)==-1;H=f[r>>2]|0;I=H+(F<<2)|0;F=1;J=0;K=E;b:while(1){L=f[d+(J*12|0)>>2]|0;M=f[H+(K<<2)>>2]|0;if((M|0)!=-1){N=f[l>>2]|0;O=f[w>>2]|0;P=f[O+(f[N+(M<<2)>>2]<<2)>>2]|0;Q=M+1|0;R=((Q>>>0)%3|0|0)==0?M+-2|0:Q;if((R|0)==-1)S=-1;else S=f[N+(R<<2)>>2]|0;R=f[O+(S<<2)>>2]|0;Q=(((M>>>0)%3|0|0)==0?2:-1)+M|0;if((Q|0)==-1)T=-1;else T=f[N+(Q<<2)>>2]|0;Q=f[O+(T<<2)>>2]|0;if((P|0)<(D|0)&(R|0)<(D|0)&(Q|0)<(D|0)){O=W(P,e)|0;P=W(R,e)|0;R=W(Q,e)|0;if(k){Q=0;do{f[L+(Q<<2)>>2]=(f[c+(Q+R<<2)>>2]|0)+(f[c+(Q+P<<2)>>2]|0)-(f[c+(Q+O<<2)>>2]|0);Q=Q+1|0}while((Q|0)!=(e|0))}Q=J+1|0;if((Q|0)==4){U=4;break}else V=Q}else V=J}else V=J;do if(F){Q=K+1|0;O=((Q>>>0)%3|0|0)==0?K+-2|0:Q;if((O|0)!=-1?(Q=f[H+(O<<2)>>2]|0,O=Q+1|0,(Q|0)!=-1):0)X=((O>>>0)%3|0|0)==0?Q+-2|0:O;else X=-1}else{O=(((K>>>0)%3|0|0)==0?2:-1)+K|0;if((O|0)!=-1?(Q=f[H+(O<<2)>>2]|0,(Q|0)!=-1):0)if(!((Q>>>0)%3|0)){X=Q+2|0;break}else{X=Q+-1|0;break}else X=-1}while(0);if((X|0)==(E|0)){x=59;break}Q=(X|0)!=-1;O=Q|F^1;do if(!(O|G)){P=f[I>>2]|0;if((P|0)==-1){x=59;break b}if(!((P>>>0)%3|0)){Y=0;Z=P+2|0;break}else{Y=0;Z=P+-1|0;break}}else{Y=Q&F;Z=O?X:-1}while(0);if((Z|0)==-1){x=59;break}else{F=Y;J=V;K=Z}}if((x|0)==59){x=0;if((V|0)>0)U=V;else{x=60;break}}if(k){oh(f[h>>2]|0,0,B|0)|0;K=U+-1|0;J=v+(K<<2)|0;F=a+60+(K*12|0)+4|0;I=a+60+(K*12|0)|0;K=f[h>>2]|0;G=0;H=0;while(1){O=f[J>>2]|0;f[J>>2]=O+1;if((f[F>>2]|0)>>>0<=O>>>0){_=K;$=0;break a}if(!(f[(f[I>>2]|0)+(O>>>5<<2)>>2]&1<<(O&31))){O=f[d+(G*12|0)>>2]|0;Q=0;do{P=K+(Q<<2)|0;f[P>>2]=(f[P>>2]|0)+(f[O+(Q<<2)>>2]|0);Q=Q+1|0}while((Q|0)!=(e|0));aa=H+1|0}else aa=H;G=G+1|0;if((G|0)>=(U|0)){ba=aa;break}else H=aa}}else{H=U+-1|0;G=v+(H<<2)|0;K=a+60+(H*12|0)|0;I=f[h>>2]|0;F=f[a+60+(H*12|0)+4>>2]|0;H=0;J=0;Q=f[G>>2]|0;while(1){O=Q;Q=Q+1|0;f[G>>2]=Q;if(F>>>0<=O>>>0){_=I;$=0;break a}P=J+((f[(f[K>>2]|0)+(O>>>5<<2)>>2]&1<<(O&31)|0)==0&1)|0;H=H+1|0;if((H|0)>=(U|0)){ba=P;break}else J=P}}J=W(D,e)|0;if(ba){H=f[h>>2]|0;if(k?(f[H>>2]=(f[H>>2]|0)/(ba|0)|0,!C):0){K=1;do{I=H+(K<<2)|0;f[I>>2]=(f[I>>2]|0)/(ba|0)|0;K=K+1|0}while((K|0)!=(e|0))}K=b+(J<<2)|0;I=c+(J<<2)|0;if((f[i>>2]|0)>0){F=0;do{Q=f[H+(F<<2)>>2]|0;G=f[s>>2]|0;do if((Q|0)<=(G|0)){P=f[z>>2]|0;O=f[q>>2]|0;R=O+(F<<2)|0;if((Q|0)<(P|0)){f[R>>2]=P;ca=O;break}else{f[R>>2]=Q;ca=O;break}}else{O=f[q>>2]|0;f[O+(F<<2)>>2]=G;ca=O}while(0);F=F+1|0;da=f[i>>2]|0}while((F|0)<(da|0));if((da|0)>0){F=0;do{H=(f[K+(F<<2)>>2]|0)+(f[ca+(F<<2)>>2]|0)|0;G=I+(F<<2)|0;f[G>>2]=H;do if((H|0)>(f[s>>2]|0)){ea=H-(f[A>>2]|0)|0;x=106}else{if((H|0)>=(f[z>>2]|0))break;ea=(f[A>>2]|0)+H|0;x=106}while(0);if((x|0)==106){x=0;f[G>>2]=ea}F=F+1|0}while((F|0)<(f[i>>2]|0))}}}else{fa=J;x=73}}else x=60;while(0);if((x|0)==60){x=0;fa=W(D,e)|0;x=73}if((x|0)==73?(x=0,E=c+((W(D+-1|0,e)|0)<<2)|0,F=b+(fa<<2)|0,I=c+(fa<<2)|0,(f[i>>2]|0)>0):0){K=0;do{H=f[E+(K<<2)>>2]|0;Q=f[s>>2]|0;do if((H|0)<=(Q|0)){O=f[z>>2]|0;R=f[q>>2]|0;P=R+(K<<2)|0;if((H|0)<(O|0)){f[P>>2]=O;ga=R;break}else{f[P>>2]=H;ga=R;break}}else{R=f[q>>2]|0;f[R+(K<<2)>>2]=Q;ga=R}while(0);K=K+1|0;ha=f[i>>2]|0}while((K|0)<(ha|0));if((ha|0)>0){K=0;do{E=(f[F+(K<<2)>>2]|0)+(f[ga+(K<<2)>>2]|0)|0;Q=I+(K<<2)|0;f[Q>>2]=E;if((E|0)<=(f[s>>2]|0)){if((E|0)<(f[z>>2]|0)){ia=(f[A>>2]|0)+E|0;x=87}}else{ia=E-(f[A>>2]|0)|0;x=87}if((x|0)==87){x=0;f[Q>>2]=ia}K=K+1|0}while((K|0)<(f[i>>2]|0))}}D=D+1|0;if((D|0)>=(t|0)){x=110;break}}if((x|0)==30)$n(o);else if((x|0)==110){_=f[h>>2]|0;$=1;break}}else{_=y;$=1}while(0);if(_|0){f[j>>2]=_;Ko(_)}Ko(v);v=f[d+36>>2]|0;if(v|0){f[d+40>>2]=v;Ko(v)}v=f[d+24>>2]|0;if(v|0){f[d+28>>2]=v;Ko(v)}v=f[d+12>>2]|0;if(v|0){f[d+16>>2]=v;Ko(v)}v=f[d>>2]|0;if(!v){u=g;return $|0}f[d+4>>2]=v;Ko(v);u=g;return $|0}function tb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=Ia,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;d=u;u=u+720|0;e=d;g=d+688|0;i=d+656|0;k=d+4|0;if((j[c+38>>1]|0)>514){f[i>>2]=0;l=i+4|0;f[l>>2]=0;f[i+8>>2]=0;m=c+8|0;o=c+16|0;p=g+4|0;q=g+8|0;r=a+36|0;t=a+40|0;v=a+60|0;w=a+44|0;x=g+8|0;y=g+12|0;z=g+20|0;A=0;a:while(1){if((A|0)>=(Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0)){B=26;break}C=La[f[(f[a>>2]|0)+20>>2]&127](a,A)|0;D=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;E=f[(f[(f[D>>2]|0)+8>>2]|0)+(C<<2)>>2]|0;if((f[E+28>>2]|0)==9){C=b[E+24>>0]|0;E=f[i>>2]|0;D=(f[l>>2]|0)-E>>2;if(D>>>0>=C>>>0){if(D>>>0>C>>>0)f[l>>2]=E+(C<<2)}else Eg(i,C-D|0);D=C<<2;E=m;F=f[E>>2]|0;G=f[E+4>>2]|0;E=o;I=f[E>>2]|0;J=vl(I|0,f[E+4>>2]|0,D|0,0)|0;E=H;if((G|0)<(E|0)|(G|0)==(E|0)&F>>>0<J>>>0){K=0;break}Bf(f[i>>2]|0,(f[c>>2]|0)+I|0,D|0)|0;I=o;J=vl(f[I>>2]|0,f[I+4>>2]|0,D|0,0)|0;D=H;I=o;f[I>>2]=J;f[I+4>>2]=D;I=m;F=f[I>>2]|0;E=f[I+4>>2]|0;I=vl(J|0,D|0,4,0)|0;G=H;if((E|0)<(G|0)|(E|0)==(G|0)&F>>>0<I>>>0){K=0;break}L=f[c>>2]|0;M=L+J|0;b[s>>0]=b[M>>0];b[s+1>>0]=b[M+1>>0];b[s+2>>0]=b[M+2>>0];b[s+3>>0]=b[M+3>>0];N=_(n[s>>2]);M=o;f[M>>2]=I;f[M+4>>2]=G;if(!((E|0)>(G|0)|(E|0)==(G|0)&F>>>0>I>>>0)){K=0;break}F=b[L+I>>0]|0;I=vl(J|0,D|0,5,0)|0;D=o;f[D>>2]=I;f[D+4>>2]=H;if((F&255)>31){K=0;break}f[g>>2]=1228;f[p>>2]=-1;f[q>>2]=0;f[q+4>>2]=0;f[q+8>>2]=0;f[q+12>>2]=0;kj(g,F&255,f[i>>2]|0,C,N);do if(Si(g,f[(f[v>>2]|0)+((((f[t>>2]|0)-(f[r>>2]|0)|0)/24|0)<<2)>>2]|0)|0){C=f[t>>2]|0;if((C|0)==(f[w>>2]|0)){wd(r,g);O=0;break}f[C>>2]=1228;f[C+4>>2]=f[p>>2];P=C+8|0;f[P>>2]=0;F=C+12|0;f[F>>2]=0;D=C+16|0;f[D>>2]=0;I=(f[y>>2]|0)-(f[x>>2]|0)|0;J=I>>2;if(I|0){if(J>>>0>1073741823){B=17;break a}L=wk(I)|0;f[F>>2]=L;f[P>>2]=L;f[D>>2]=L+(J<<2);J=f[x>>2]|0;D=(f[y>>2]|0)-J|0;if((D|0)>0){Bf(L|0,J|0,D|0)|0;f[F>>2]=L+(D>>>2<<2)}}f[C+20>>2]=f[z>>2];f[t>>2]=(f[t>>2]|0)+24;O=0}else O=1;while(0);f[g>>2]=1228;C=f[q>>2]|0;if(C|0){f[y>>2]=C;Ko(C)}if(O|0){K=0;break}}A=A+1|0}if((B|0)==17)$n(P);if((B|0)==26){P=a+48|0;A=a+52|0;if((f[A>>2]|0)==(f[P>>2]|0))K=1;else{O=0;y=0;while(1){if(zh(g,c)|0){q=f[g>>2]|0;Q=q<<31>>31^q>>>1}else Q=y;q=f[P>>2]|0;f[q+(O<<2)>>2]=Q;O=O+1|0;if(O>>>0>=(f[A>>2]|0)-q>>2>>>0){K=1;break}else y=Q}}}Q=f[i>>2]|0;if(Q|0){f[l>>2]=Q;Ko(Q)}R=K;u=d;return R|0}K=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;f[g>>2]=0;Q=g+4|0;f[Q>>2]=0;l=g+8|0;f[l>>2]=0;y=(K|0)==0;if(y){S=0;T=f[(f[a>>2]|0)+20>>2]|0;U=a}else{if(K>>>0>214748364)$n(g);A=K*20|0;O=wk(A)|0;f[g>>2]=O;f[l>>2]=O+(K*20|0);oh(O|0,0,A|0)|0;f[Q>>2]=O+A;A=0;O=0;l=f[(f[a>>2]|0)+20>>2]|0;while(1){P=La[l&127](a,A)|0;q=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;t=f[(f[(f[q>>2]|0)+8>>2]|0)+(P<<2)>>2]|0;P=f[t+28>>2]|0;q=Bj(P)|0;z=b[t+24>>0]|0;x=f[g>>2]|0;f[x+(A*20|0)>>2]=t;f[x+(A*20|0)+4>>2]=O;f[x+(A*20|0)+8>>2]=P;f[x+(A*20|0)+12>>2]=(q|0)>0?q:0;f[x+(A*20|0)+16>>2]=z;x=O+z|0;A=A+1|0;z=f[(f[a>>2]|0)+20>>2]|0;if(A>>>0>=K>>>0){S=x;T=z;U=a;break}else{O=x;l=z}}}l=La[T&127](a,0)|0;T=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;O=f[(f[(f[T>>2]|0)+8>>2]|0)+(l<<2)>>2]|0;b[O+84>>0]=1;f[O+72>>2]=f[O+68>>2];l=c+8|0;T=f[l>>2]|0;A=f[l+4>>2]|0;l=c+16|0;z=l;x=f[z>>2]|0;q=f[z+4>>2]|0;b:do if((A|0)>(q|0)|(A|0)==(q|0)&T>>>0>x>>>0){z=f[c>>2]|0;P=b[z+x>>0]|0;t=vl(x|0,q|0,1,0)|0;p=H;r=l;f[r>>2]=t;f[r+4>>2]=p;switch(P<<24>>24){case 0:{if(!((A|0)>(p|0)|(A|0)==(p|0)&T>>>0>t>>>0)){V=0;break b}P=vl(x|0,q|0,2,0)|0;r=l;f[r>>2]=P;f[r+4>>2]=H;r=vl(x|0,q|0,6,0)|0;w=H;if((A|0)<(w|0)|(A|0)==(w|0)&T>>>0<r>>>0){V=0;break b}v=z+P|0;P=h[v>>0]|h[v+1>>0]<<8|h[v+2>>0]<<16|h[v+3>>0]<<24;v=l;f[v>>2]=r;f[v+4>>2]=w;Fh(O,P)|0;fm(i);$e(k,g);P=Vd(i,c,k)|0;w=f[k+16>>2]|0;if(w|0){f[k+20>>2]=w;Ko(w)}w=f[k>>2]|0;if(w|0){f[k+4>>2]=w;Ko(w)}if(!P){V=0;break b}break}case 1:{if(!((A|0)>(p|0)|(A|0)==(p|0)&T>>>0>t>>>0)){V=0;break b}p=b[z+t>>0]|0;t=vl(x|0,q|0,2,0)|0;P=l;f[P>>2]=t;f[P+4>>2]=H;if((p&255)>6){f[e>>2]=p&255;kl(5094,e)|0;V=0;break b}P=vl(x|0,q|0,6,0)|0;w=H;if((A|0)<(w|0)|(A|0)==(w|0)&T>>>0<P>>>0){V=0;break b}v=z+t|0;t=h[v>>0]|h[v+1>>0]<<8|h[v+2>>0]<<16|h[v+3>>0]<<24;v=l;f[v>>2]=P;f[v+4>>2]=w;if(!y){w=0;do{v=La[f[(f[U>>2]|0)+20>>2]&127](a,w)|0;P=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;z=f[(f[(f[P>>2]|0)+8>>2]|0)+(v<<2)>>2]|0;Fh(z,t)|0;b[z+84>>0]=1;f[z+72>>2]=f[z+68>>2];w=w+1|0}while(w>>>0<K>>>0)}$e(i,g);switch(p<<24>>24){case 0:{ve(k,S);w=Xd(k,c,i)|0;Cf(k);if(w)B=65;else W=1;break}case 1:{ve(k,S);w=Wd(k,c,i)|0;Cf(k);if(w)B=65;else W=1;break}case 2:{we(k,S);w=Zd(k,c,i)|0;Lf(k);if(w)B=65;else W=1;break}case 3:{we(k,S);w=Yd(k,c,i)|0;Lf(k);if(w)B=65;else W=1;break}case 4:{re(k,S);w=Ud(k,c,i)|0;jg(k);if(w)B=65;else W=1;break}case 5:{re(k,S);w=Td(k,c,i)|0;jg(k);if(w)B=65;else W=1;break}case 6:{re(k,S);w=Sd(k,c,i)|0;jg(k);if(w)B=65;else W=1;break}default:W=1}if((B|0)==65)W=0;w=f[i+16>>2]|0;if(w|0){f[i+20>>2]=w;Ko(w)}w=f[i>>2]|0;if(w|0){f[i+4>>2]=w;Ko(w)}if(W|0){V=0;break b}break}default:{V=0;break b}}V=1}else V=0;while(0);W=f[g>>2]|0;if(W|0){f[Q>>2]=W;Ko(W)}R=V;u=d;return R|0}function ub(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;i=u;u=u+64|0;j=i+16|0;k=i;l=i+24|0;m=i+8|0;n=i+20|0;f[j>>2]=c;c=(a|0)!=0;o=l+40|0;q=o;r=l+39|0;l=m+4|0;s=0;t=0;v=0;a:while(1){w=s;x=t;while(1){do if((x|0)>-1)if((w|0)>(2147483647-x|0)){y=Ro()|0;f[y>>2]=75;z=-1;break}else{z=w+x|0;break}else z=x;while(0);A=f[j>>2]|0;y=b[A>>0]|0;if(!(y<<24>>24)){B=94;break a}C=y;y=A;b:while(1){switch(C<<24>>24){case 37:{B=10;break b;break}case 0:{D=y;break b;break}default:{}}E=y+1|0;f[j>>2]=E;C=b[E>>0]|0;y=E}c:do if((B|0)==10){B=0;C=y;E=y;while(1){if((b[E+1>>0]|0)!=37){D=C;break c}F=C+1|0;E=E+2|0;f[j>>2]=E;if((b[E>>0]|0)!=37){D=F;break}else C=F}}while(0);w=D-A|0;if(c)Pm(a,A,w);if(!w)break;else x=z}x=(to(b[(f[j>>2]|0)+1>>0]|0)|0)==0;w=f[j>>2]|0;if(!x?(b[w+2>>0]|0)==36:0){G=(b[w+1>>0]|0)+-48|0;I=1;J=3}else{G=-1;I=v;J=1}x=w+J|0;f[j>>2]=x;w=b[x>>0]|0;y=(w<<24>>24)+-32|0;if(y>>>0>31|(1<<y&75913|0)==0){K=0;L=w;M=x}else{w=0;C=y;y=x;while(1){x=1<<C|w;E=y+1|0;f[j>>2]=E;F=b[E>>0]|0;C=(F<<24>>24)+-32|0;if(C>>>0>31|(1<<C&75913|0)==0){K=x;L=F;M=E;break}else{w=x;y=E}}}if(L<<24>>24==42){if((to(b[M+1>>0]|0)|0)!=0?(y=f[j>>2]|0,(b[y+2>>0]|0)==36):0){w=y+1|0;f[h+((b[w>>0]|0)+-48<<2)>>2]=10;N=f[g+((b[w>>0]|0)+-48<<3)>>2]|0;O=1;P=y+3|0}else{if(I|0){Q=-1;break}if(c){y=(f[e>>2]|0)+(4-1)&~(4-1);w=f[y>>2]|0;f[e>>2]=y+4;R=w}else R=0;N=R;O=0;P=(f[j>>2]|0)+1|0}f[j>>2]=P;w=(N|0)<0;S=w?0-N|0:N;T=w?K|8192:K;U=O;V=P}else{w=sj(j)|0;if((w|0)<0){Q=-1;break}S=w;T=K;U=I;V=f[j>>2]|0}do if((b[V>>0]|0)==46){w=V+1|0;if((b[w>>0]|0)!=42){f[j>>2]=w;w=sj(j)|0;W=w;X=f[j>>2]|0;break}if(to(b[V+2>>0]|0)|0?(w=f[j>>2]|0,(b[w+3>>0]|0)==36):0){y=w+2|0;f[h+((b[y>>0]|0)+-48<<2)>>2]=10;C=f[g+((b[y>>0]|0)+-48<<3)>>2]|0;y=w+4|0;f[j>>2]=y;W=C;X=y;break}if(U|0){Q=-1;break a}if(c){y=(f[e>>2]|0)+(4-1)&~(4-1);C=f[y>>2]|0;f[e>>2]=y+4;Y=C}else Y=0;C=(f[j>>2]|0)+2|0;f[j>>2]=C;W=Y;X=C}else{W=-1;X=V}while(0);C=0;y=X;while(1){if(((b[y>>0]|0)+-65|0)>>>0>57){Q=-1;break a}w=y;y=y+1|0;f[j>>2]=y;Z=b[(b[w>>0]|0)+-65+(13620+(C*58|0))>>0]|0;_=Z&255;if((_+-1|0)>>>0>=8)break;else C=_}if(!(Z<<24>>24)){Q=-1;break}w=(G|0)>-1;do if(Z<<24>>24==19)if(w){Q=-1;break a}else B=54;else{if(w){f[h+(G<<2)>>2]=_;E=g+(G<<3)|0;x=f[E+4>>2]|0;F=k;f[F>>2]=f[E>>2];f[F+4>>2]=x;B=54;break}if(!c){Q=0;break a}Nd(k,_,e);$=f[j>>2]|0;B=55}while(0);if((B|0)==54){B=0;if(c){$=y;B=55}else aa=0}d:do if((B|0)==55){B=0;w=b[$+-1>>0]|0;x=(C|0)!=0&(w&15|0)==3?w&-33:w;w=T&-65537;F=(T&8192|0)==0?T:w;e:do switch(x|0){case 110:{switch((C&255)<<24>>24){case 0:{f[f[k>>2]>>2]=z;aa=0;break d;break}case 1:{f[f[k>>2]>>2]=z;aa=0;break d;break}case 2:{E=f[k>>2]|0;f[E>>2]=z;f[E+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break}case 3:{d[f[k>>2]>>1]=z;aa=0;break d;break}case 4:{b[f[k>>2]>>0]=z;aa=0;break d;break}case 6:{f[f[k>>2]>>2]=z;aa=0;break d;break}case 7:{E=f[k>>2]|0;f[E>>2]=z;f[E+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break}default:{aa=0;break d}}break}case 112:{ba=120;ca=W>>>0>8?W:8;da=F|8;B=67;break}case 88:case 120:{ba=x;ca=W;da=F;B=67;break}case 111:{E=k;ea=f[E>>2]|0;fa=f[E+4>>2]|0;E=wj(ea,fa,o)|0;ga=q-E|0;ha=E;ia=0;ja=14084;ka=(F&8|0)==0|(W|0)>(ga|0)?W:ga+1|0;la=F;ma=ea;na=fa;B=73;break}case 105:case 100:{fa=k;ea=f[fa>>2]|0;ga=f[fa+4>>2]|0;if((ga|0)<0){fa=wl(0,0,ea|0,ga|0)|0;E=H;oa=k;f[oa>>2]=fa;f[oa+4>>2]=E;pa=1;qa=14084;ra=fa;sa=E;B=72;break e}else{pa=(F&2049|0)!=0&1;qa=(F&2048|0)==0?((F&1|0)==0?14084:14086):14085;ra=ea;sa=ga;B=72;break e}break}case 117:{ga=k;pa=0;qa=14084;ra=f[ga>>2]|0;sa=f[ga+4>>2]|0;B=72;break}case 99:{b[r>>0]=f[k>>2];ta=r;ua=0;va=14084;wa=1;xa=w;ya=q;break}case 109:{ga=Ro()|0;za=Um(f[ga>>2]|0)|0;B=77;break}case 115:{ga=f[k>>2]|0;za=(ga|0)==0?14094:ga;B=77;break}case 67:{f[m>>2]=f[k>>2];f[l>>2]=0;f[k>>2]=m;Aa=-1;B=81;break}case 83:{if(!W){vi(a,32,S,0,F);Ba=0;B=91}else{Aa=W;B=81}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{aa=rb(a,+p[k>>3],S,W,F,x)|0;break d;break}default:{ta=A;ua=0;va=14084;wa=W;xa=F;ya=q}}while(0);f:do if((B|0)==67){B=0;x=k;ga=f[x>>2]|0;ea=f[x+4>>2]|0;x=aj(ga,ea,o,ba&32)|0;E=(da&8|0)==0|(ga|0)==0&(ea|0)==0;ha=x;ia=E?0:2;ja=E?14084:14084+(ba>>>4)|0;ka=ca;la=da;ma=ga;na=ea;B=73}else if((B|0)==72){B=0;ha=xh(ra,sa,o)|0;ia=pa;ja=qa;ka=W;la=F;ma=ra;na=sa;B=73}else if((B|0)==77){B=0;ea=Re(za,0,W)|0;ga=(ea|0)==0;ta=za;ua=0;va=14084;wa=ga?W:ea-za|0;xa=w;ya=ga?za+W|0:ea}else if((B|0)==81){B=0;ea=f[k>>2]|0;ga=0;while(1){E=f[ea>>2]|0;if(!E){Ca=ga;break}x=Fm(n,E)|0;Da=(x|0)<0;if(Da|x>>>0>(Aa-ga|0)>>>0){B=85;break}E=x+ga|0;if(Aa>>>0>E>>>0){ea=ea+4|0;ga=E}else{Ca=E;break}}if((B|0)==85){B=0;if(Da){Q=-1;break a}else Ca=ga}vi(a,32,S,Ca,F);if(!Ca){Ba=0;B=91}else{ea=f[k>>2]|0;E=0;while(1){x=f[ea>>2]|0;if(!x){Ba=Ca;B=91;break f}fa=Fm(n,x)|0;E=fa+E|0;if((E|0)>(Ca|0)){Ba=Ca;B=91;break f}Pm(a,n,fa);if(E>>>0>=Ca>>>0){Ba=Ca;B=91;break}else ea=ea+4|0}}}while(0);if((B|0)==73){B=0;w=(ma|0)!=0|(na|0)!=0;ea=(ka|0)!=0|w;E=q-ha+((w^1)&1)|0;ta=ea?ha:o;ua=ia;va=ja;wa=ea?((ka|0)>(E|0)?ka:E):0;xa=(ka|0)>-1?la&-65537:la;ya=q}else if((B|0)==91){B=0;vi(a,32,S,Ba,F^8192);aa=(S|0)>(Ba|0)?S:Ba;break}E=ya-ta|0;ea=(wa|0)<(E|0)?E:wa;w=ea+ua|0;ga=(S|0)<(w|0)?w:S;vi(a,32,ga,w,xa);Pm(a,va,ua);vi(a,48,ga,w,xa^65536);vi(a,48,ea,E,0);Pm(a,ta,E);vi(a,32,ga,w,xa^8192);aa=ga}while(0);s=aa;t=z;v=U}g:do if((B|0)==94)if(!a)if(!v)Q=0;else{U=1;while(1){t=f[h+(U<<2)>>2]|0;if(!t)break;Nd(g+(U<<3)|0,t,e);t=U+1|0;if(t>>>0<10)U=t;else{Q=1;break g}}t=U;while(1){if(f[h+(t<<2)>>2]|0){Q=-1;break g}t=t+1|0;if(t>>>0>=10){Q=1;break}}}else Q=z;while(0);u=i;return Q|0}function vb(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;c=u;u=u+32|0;d=c+20|0;e=c+16|0;g=c+4|0;i=c;j=a+36|0;k=a+37|0;l=a+32|0;m=f[l>>2]|0;do if((((h[j>>0]|0)<<8|(h[k>>0]|0))&65535)<514){n=m+8|0;o=f[n>>2]|0;p=f[n+4>>2]|0;n=m+16|0;q=n;r=f[q>>2]|0;s=f[q+4>>2]|0;q=vl(r|0,s|0,4,0)|0;t=H;if((p|0)<(t|0)|(p|0)==(t|0)&o>>>0<q>>>0){v=0;u=c;return v|0}w=(f[m>>2]|0)+r|0;x=h[w>>0]|h[w+1>>0]<<8|h[w+2>>0]<<16|h[w+3>>0]<<24;f[d>>2]=x;w=n;f[w>>2]=q;f[w+4>>2]=t;t=vl(r|0,s|0,8,0)|0;s=H;if((p|0)<(s|0)|(p|0)==(s|0)&o>>>0<t>>>0){v=0;u=c;return v|0}else{o=(f[m>>2]|0)+q|0;f[e>>2]=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;o=n;f[o>>2]=t;f[o+4>>2]=s;y=x;break}}else{if(!(zh(d,m)|0)){v=0;u=c;return v|0}if(zh(e,f[l>>2]|0)|0){y=f[d>>2]|0;break}else{v=0;u=c;return v|0}}while(0);if(y>>>0>1431655765){v=0;u=c;return v|0}m=f[e>>2]|0;x=Bk(y|0,0,3,0)|0;s=H;if(s>>>0<0|(s|0)==0&x>>>0<m>>>0){v=0;u=c;return v|0}x=f[l>>2]|0;s=x+8|0;o=f[s+4>>2]|0;t=x+16|0;n=t;q=f[n>>2]|0;p=f[n+4>>2]|0;if(!((o|0)>(p|0)|((o|0)==(p|0)?(f[s>>2]|0)>>>0>q>>>0:0))){v=0;u=c;return v|0}s=b[(f[x>>2]|0)+q>>0]|0;o=vl(q|0,p|0,1,0)|0;n=H;r=t;f[r>>2]=o;f[r+4>>2]=n;a:do if(!(s<<24>>24)){if(!(ke(a,y)|0)){v=0;u=c;return v|0}}else{if(m>>>0<256){if(!y)break;r=a+44|0;t=g+4|0;w=g+8|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;z=x+8|0;A=f[z>>2]|0;B=f[z+4>>2]|0;b:do if((B|0)>(n|0)|(B|0)==(n|0)&A>>>0>o>>>0){z=0;C=x;D=o;E=n;F=B;G=A;I=y;while(1){J=C+16|0;K=f[C>>2]|0;L=b[K+D>>0]|0;M=vl(D|0,E|0,1,0)|0;N=H;O=J;f[O>>2]=M;f[O+4>>2]=N;f[g>>2]=L&255;if(!((F|0)>(N|0)|(F|0)==(N|0)&G>>>0>M>>>0))break b;N=b[K+M>>0]|0;M=vl(D|0,E|0,2,0)|0;L=H;O=J;f[O>>2]=M;f[O+4>>2]=L;f[t>>2]=N&255;if(!((F|0)>(L|0)|(F|0)==(L|0)&G>>>0>M>>>0))break b;L=b[K+M>>0]|0;M=vl(D|0,E|0,3,0)|0;K=J;f[K>>2]=M;f[K+4>>2]=H;f[w>>2]=L&255;L=f[r>>2]|0;K=L+100|0;M=f[K>>2]|0;if((M|0)==(f[L+104>>2]|0)){yg(L+96|0,g);P=f[d>>2]|0}else{f[M>>2]=f[g>>2];f[M+4>>2]=f[g+4>>2];f[M+8>>2]=f[g+8>>2];f[K>>2]=(f[K>>2]|0)+12;P=I}z=z+1|0;if(z>>>0>=P>>>0)break a;C=f[l>>2]|0;K=C+16|0;D=f[K>>2]|0;E=f[K+4>>2]|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;K=C+8|0;G=f[K>>2]|0;F=f[K+4>>2]|0;if(!((F|0)>(E|0)|(F|0)==(E|0)&G>>>0>D>>>0))break;else I=P}}while(0);v=0;u=c;return v|0}if(m>>>0<65536){if(!y)break;r=a+44|0;w=g+4|0;t=g+8|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;A=x+8|0;B=f[A>>2]|0;I=f[A+4>>2]|0;A=vl(q|0,p|0,3,0)|0;D=H;c:do if(!((I|0)<(D|0)|(I|0)==(D|0)&B>>>0<A>>>0)){G=0;E=x;F=o;C=A;z=D;K=n;M=I;L=B;J=y;while(1){N=E+16|0;O=f[E>>2]|0;Q=O+F|0;R=h[Q>>0]|h[Q+1>>0]<<8;Q=N;f[Q>>2]=C;f[Q+4>>2]=z;f[g>>2]=R&65535;R=vl(F|0,K|0,4,0)|0;Q=H;if((M|0)<(Q|0)|(M|0)==(Q|0)&L>>>0<R>>>0)break c;S=O+C|0;T=h[S>>0]|h[S+1>>0]<<8;S=N;f[S>>2]=R;f[S+4>>2]=Q;f[w>>2]=T&65535;T=vl(F|0,K|0,6,0)|0;Q=H;if((M|0)<(Q|0)|(M|0)==(Q|0)&L>>>0<T>>>0)break c;S=O+R|0;R=h[S>>0]|h[S+1>>0]<<8;S=N;f[S>>2]=T;f[S+4>>2]=Q;f[t>>2]=R&65535;R=f[r>>2]|0;Q=R+100|0;S=f[Q>>2]|0;if((S|0)==(f[R+104>>2]|0)){yg(R+96|0,g);U=f[d>>2]|0}else{f[S>>2]=f[g>>2];f[S+4>>2]=f[g+4>>2];f[S+8>>2]=f[g+8>>2];f[Q>>2]=(f[Q>>2]|0)+12;U=J}G=G+1|0;if(G>>>0>=U>>>0)break a;E=f[l>>2]|0;Q=E+16|0;F=f[Q>>2]|0;K=f[Q+4>>2]|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;Q=E+8|0;L=f[Q>>2]|0;M=f[Q+4>>2]|0;C=vl(F|0,K|0,2,0)|0;z=H;if((M|0)<(z|0)|(M|0)==(z|0)&L>>>0<C>>>0)break;else J=U}}while(0);v=0;u=c;return v|0}r=a+44|0;if((f[(f[r>>2]|0)+80>>2]|0)>>>0<2097152?(((h[j>>0]|0)<<8|(h[k>>0]|0))&65535)>513:0){if(!y)break;t=g+4|0;w=g+8|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;d:do if(zh(i,x)|0){B=0;do{f[g>>2]=f[i>>2];if(!(zh(i,f[l>>2]|0)|0))break d;f[t>>2]=f[i>>2];if(!(zh(i,f[l>>2]|0)|0))break d;f[w>>2]=f[i>>2];I=f[r>>2]|0;D=I+100|0;A=f[D>>2]|0;if((A|0)==(f[I+104>>2]|0))yg(I+96|0,g);else{f[A>>2]=f[g>>2];f[A+4>>2]=f[g+4>>2];f[A+8>>2]=f[g+8>>2];f[D>>2]=(f[D>>2]|0)+12}B=B+1|0;if(B>>>0>=(f[d>>2]|0)>>>0)break a;D=f[l>>2]|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0}while(zh(i,D)|0)}while(0);v=0;u=c;return v|0}if(y|0){w=g+4|0;t=g+8|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;B=x+8|0;D=f[B>>2]|0;A=f[B+4>>2]|0;B=vl(q|0,p|0,5,0)|0;I=H;e:do if(!((A|0)<(I|0)|(A|0)==(I|0)&D>>>0<B>>>0)){J=0;C=x;L=o;z=B;M=I;K=n;F=A;E=D;G=y;while(1){Q=C+16|0;S=f[C>>2]|0;R=S+L|0;T=h[R>>0]|h[R+1>>0]<<8|h[R+2>>0]<<16|h[R+3>>0]<<24;R=Q;f[R>>2]=z;f[R+4>>2]=M;f[g>>2]=T;T=vl(L|0,K|0,8,0)|0;R=H;if((F|0)<(R|0)|(F|0)==(R|0)&E>>>0<T>>>0)break e;N=S+z|0;O=h[N>>0]|h[N+1>>0]<<8|h[N+2>>0]<<16|h[N+3>>0]<<24;N=Q;f[N>>2]=T;f[N+4>>2]=R;f[w>>2]=O;O=vl(L|0,K|0,12,0)|0;R=H;if((F|0)<(R|0)|(F|0)==(R|0)&E>>>0<O>>>0)break e;N=S+T|0;T=h[N>>0]|h[N+1>>0]<<8|h[N+2>>0]<<16|h[N+3>>0]<<24;N=Q;f[N>>2]=O;f[N+4>>2]=R;f[t>>2]=T;T=f[r>>2]|0;R=T+100|0;N=f[R>>2]|0;if((N|0)==(f[T+104>>2]|0)){yg(T+96|0,g);V=f[d>>2]|0}else{f[N>>2]=f[g>>2];f[N+4>>2]=f[g+4>>2];f[N+8>>2]=f[g+8>>2];f[R>>2]=(f[R>>2]|0)+12;V=G}J=J+1|0;if(J>>>0>=V>>>0)break a;C=f[l>>2]|0;R=C+16|0;L=f[R>>2]|0;K=f[R+4>>2]|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;R=C+8|0;E=f[R>>2]|0;F=f[R+4>>2]|0;z=vl(L|0,K|0,4,0)|0;M=H;if((F|0)<(M|0)|(F|0)==(M|0)&E>>>0<z>>>0)break;else G=V}}while(0);v=0;u=c;return v|0}}while(0);f[(f[a+4>>2]|0)+80>>2]=f[e>>2];v=1;u=c;return v|0}function wb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=Ia,D=0,E=0.0,F=0,G=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){m=f[f[a>>2]>>2]|0;o=a+40|0;q=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(q|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=m+r|0;r=0;while(1){m=b[o>>0]|0;q=g+(r<<3)|0;f[q>>2]=m;f[q+4>>2]=((m|0)<0)<<31>>31;r=r+1|0;m=b[k>>0]|0;if((r|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){s=m;break}else o=o+1|0}}else s=l;o=s<<24>>24;if(s<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<3)|0,0,(e<<24>>24)-o<<3|0)|0;i=1;return i|0}case 2:{o=a+24|0;r=b[o>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;q=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(q|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){k=g+(t<<3)|0;f[k>>2]=h[m>>0];f[k+4>>2]=0;t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){u=k;break}else m=m+1|0}}else u=r;m=u<<24>>24;if(u<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<3)|0,0,(e<<24>>24)-m<<3|0)|0;i=1;return i|0}case 3:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;q=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+q|0;q=0;while(1){o=d[l>>1]|0;k=g+(q<<3)|0;f[k>>2]=o;f[k+4>>2]=((o|0)<0)<<31>>31;q=q+1|0;o=b[m>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){v=o;break}else l=l+2|0}}else v=t;l=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<3)|0,0,(e<<24>>24)-l<<3|0)|0;i=1;return i|0}case 4:{l=a+24|0;q=b[l>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){m=f[f[a>>2]>>2]|0;r=a+40|0;o=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;k=vl(o|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=m+k|0;k=0;while(1){m=g+(k<<3)|0;f[m>>2]=j[r>>1];f[m+4>>2]=0;k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){w=m;break}else r=r+2|0}}else w=q;r=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<3)|0,0,(e<<24>>24)-r<<3|0)|0;i=1;return i|0}case 5:{r=a+24|0;k=b[r>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){l=f[f[a>>2]>>2]|0;t=a+40|0;m=Bk(f[t>>2]|0,f[t+4>>2]|0,f[c>>2]|0,0)|0;t=a+48|0;o=vl(m|0,H|0,f[t>>2]|0,f[t+4>>2]|0)|0;t=l+o|0;o=0;while(1){l=f[t>>2]|0;m=g+(o<<3)|0;f[m>>2]=l;f[m+4>>2]=((l|0)<0)<<31>>31;o=o+1|0;l=b[r>>0]|0;if((o|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){x=l;break}else t=t+4|0}}else x=k;t=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(t<<3)|0,0,(e<<24>>24)-t<<3|0)|0;i=1;return i|0}case 6:{t=a+24|0;o=b[t>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){r=f[f[a>>2]>>2]|0;q=a+40|0;l=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;m=vl(l|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=r+m|0;m=0;while(1){r=g+(m<<3)|0;f[r>>2]=f[q>>2];f[r+4>>2]=0;m=m+1|0;r=b[t>>0]|0;if((m|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){y=r;break}else q=q+4|0}}else y=o;q=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<3)|0,0,(e<<24>>24)-q<<3|0)|0;i=1;return i|0}case 7:{q=a+24|0;m=b[q>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){t=f[f[a>>2]>>2]|0;k=a+40|0;r=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;l=vl(r|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=t+l|0;l=0;while(1){t=k;r=f[t+4>>2]|0;z=g+(l<<3)|0;f[z>>2]=f[t>>2];f[z+4>>2]=r;l=l+1|0;r=b[q>>0]|0;if((l|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){A=r;break}else k=k+8|0}}else A=m;k=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<3)|0,0,(e<<24>>24)-k<<3|0)|0;i=1;return i|0}case 8:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){q=f[f[a>>2]>>2]|0;o=a+40|0;r=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;z=vl(r|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=q+z|0;z=0;while(1){q=o;r=f[q+4>>2]|0;t=g+(z<<3)|0;f[t>>2]=f[q>>2];f[t+4>>2]=r;z=z+1|0;r=b[k>>0]|0;if((z|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){B=r;break}else o=o+8|0}}else B=l;o=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<3)|0,0,(e<<24>>24)-o<<3|0)|0;i=1;return i|0}case 9:{o=a+24|0;z=b[o>>0]|0;if((z<<24>>24>e<<24>>24?e:z)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;r=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(r|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){C=_(n[m>>2]);k=+J(+C)>=1.0?(+C>0.0?~~+X(+I(+C/4294967296.0),4294967295.0)>>>0:~~+V((+C-+(~~+C>>>0))/4294967296.0)>>>0):0;r=g+(t<<3)|0;f[r>>2]=~~+C>>>0;f[r+4>>2]=k;t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){D=k;break}else m=m+4|0}}else D=z;m=D<<24>>24;if(D<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<3)|0,0,(e<<24>>24)-m<<3|0)|0;i=1;return i|0}case 10:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;r=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+r|0;r=0;while(1){E=+p[l>>3];o=+J(E)>=1.0?(E>0.0?~~+X(+I(E/4294967296.0),4294967295.0)>>>0:~~+V((E-+(~~E>>>0))/4294967296.0)>>>0):0;k=g+(r<<3)|0;f[k>>2]=~~E>>>0;f[k+4>>2]=o;r=r+1|0;o=b[m>>0]|0;if((r|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){F=o;break}else l=l+8|0}}else F=t;l=F<<24>>24;if(F<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<3)|0,0,(e<<24>>24)-l<<3|0)|0;i=1;return i|0}case 11:{l=a+24|0;r=b[l>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){m=f[f[a>>2]>>2]|0;z=a+40|0;o=Bk(f[z>>2]|0,f[z+4>>2]|0,f[c>>2]|0,0)|0;z=a+48|0;k=vl(o|0,H|0,f[z>>2]|0,f[z+4>>2]|0)|0;z=m+k|0;k=0;while(1){m=g+(k<<3)|0;f[m>>2]=h[z>>0];f[m+4>>2]=0;k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){G=m;break}else z=z+1|0}}else G=r;z=G<<24>>24;if(G<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(z<<3)|0,0,(e<<24>>24)-z<<3|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function xb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;c=u;u=u+16|0;d=c+8|0;e=c;if((f[a+96>>2]|0)==(f[a+92>>2]|0)){u=c;return 1}g=a+56|0;h=f[g>>2]|0;if((h|0)==(f[a+60>>2]|0)){Ng(a+52|0,b);i=b}else{f[h>>2]=f[b>>2];f[g>>2]=h+4;i=b}b=a+88|0;f[b>>2]=0;h=f[a>>2]|0;g=f[i>>2]|0;j=g+1|0;if((g|0)!=-1){k=((j>>>0)%3|0|0)==0?g+-2|0:j;if((k|0)==-1)l=-1;else l=f[(f[h>>2]|0)+(k<<2)>>2]|0;k=(((g>>>0)%3|0|0)==0?2:-1)+g|0;if((k|0)==-1){m=l;n=-1}else{m=l;n=f[(f[h>>2]|0)+(k<<2)>>2]|0}}else{m=-1;n=-1}k=a+24|0;h=f[k>>2]|0;l=h+(m>>>5<<2)|0;g=1<<(m&31);j=f[l>>2]|0;if(!(j&g)){f[l>>2]=j|g;g=f[i>>2]|0;j=g+1|0;if((g|0)==-1)o=-1;else o=((j>>>0)%3|0|0)==0?g+-2|0:j;f[e>>2]=o;j=(o>>>0)/3|0;g=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(j*12|0)+(o-(j*3|0)<<2)>>2]|0;j=f[a+48>>2]|0;f[d>>2]=g;o=f[j+4>>2]|0;j=o+4|0;l=f[j>>2]|0;if((l|0)==(f[o+8>>2]|0))Ng(o,d);else{f[l>>2]=g;f[j>>2]=l+4}l=a+40|0;j=f[l>>2]|0;g=j+4|0;o=f[g>>2]|0;if((o|0)==(f[j+8>>2]|0)){Ng(j,e);p=f[l>>2]|0}else{f[o>>2]=f[e>>2];f[g>>2]=o+4;p=j}j=p+24|0;f[(f[p+12>>2]|0)+(m<<2)>>2]=f[j>>2];f[j>>2]=(f[j>>2]|0)+1;q=f[k>>2]|0}else q=h;h=q+(n>>>5<<2)|0;q=1<<(n&31);j=f[h>>2]|0;if(!(j&q)){f[h>>2]=j|q;q=f[i>>2]|0;do if((q|0)!=-1)if(!((q>>>0)%3|0)){r=q+2|0;break}else{r=q+-1|0;break}else r=-1;while(0);f[e>>2]=r;q=(r>>>0)/3|0;j=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(q*12|0)+(r-(q*3|0)<<2)>>2]|0;q=f[a+48>>2]|0;f[d>>2]=j;r=f[q+4>>2]|0;q=r+4|0;h=f[q>>2]|0;if((h|0)==(f[r+8>>2]|0))Ng(r,d);else{f[h>>2]=j;f[q>>2]=h+4}h=a+40|0;q=f[h>>2]|0;j=q+4|0;r=f[j>>2]|0;if((r|0)==(f[q+8>>2]|0)){Ng(q,e);s=f[h>>2]|0}else{f[r>>2]=f[e>>2];f[j>>2]=r+4;s=q}q=s+24|0;f[(f[s+12>>2]|0)+(n<<2)>>2]=f[q>>2];f[q>>2]=(f[q>>2]|0)+1}q=f[i>>2]|0;if((q|0)==-1)t=-1;else t=f[(f[f[a>>2]>>2]|0)+(q<<2)>>2]|0;q=(f[k>>2]|0)+(t>>>5<<2)|0;n=1<<(t&31);s=f[q>>2]|0;if(!(n&s)){f[q>>2]=s|n;n=f[i>>2]|0;f[e>>2]=n;s=(n>>>0)/3|0;q=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(s*12|0)+(n-(s*3|0)<<2)>>2]|0;s=f[a+48>>2]|0;f[d>>2]=q;n=f[s+4>>2]|0;s=n+4|0;r=f[s>>2]|0;if((r|0)==(f[n+8>>2]|0))Ng(n,d);else{f[r>>2]=q;f[s>>2]=r+4}r=a+40|0;s=f[r>>2]|0;q=s+4|0;n=f[q>>2]|0;if((n|0)==(f[s+8>>2]|0)){Ng(s,e);v=f[r>>2]|0}else{f[n>>2]=f[e>>2];f[q>>2]=n+4;v=s}s=v+24|0;f[(f[v+12>>2]|0)+(t<<2)>>2]=f[s>>2];f[s>>2]=(f[s>>2]|0)+1}s=f[b>>2]|0;a:do if((s|0)<3){t=a+12|0;v=a+44|0;n=a+48|0;q=a+40|0;r=a+92|0;j=s;while(1){h=a+52+(j*12|0)+4|0;m=f[h>>2]|0;if((f[a+52+(j*12|0)>>2]|0)==(m|0))if((j|0)<2)w=j+1|0;else break a;else{p=m+-4|0;m=f[p>>2]|0;f[h>>2]=p;f[b>>2]=j;f[i>>2]=m;if((m|0)==-1)break;p=(m>>>0)/3|0;h=f[t>>2]|0;do if(!(f[h+(p>>>5<<2)>>2]&1<<(p&31))){o=m;g=h;b:while(1){l=(o>>>0)/3|0;x=g+(l>>>5<<2)|0;f[x>>2]=1<<(l&31)|f[x>>2];x=f[i>>2]|0;if((x|0)==-1)y=-1;else y=f[(f[f[a>>2]>>2]|0)+(x<<2)>>2]|0;l=(f[k>>2]|0)+(y>>>5<<2)|0;z=1<<(y&31);A=f[l>>2]|0;if(!(z&A)){f[l>>2]=A|z;z=f[i>>2]|0;f[e>>2]=z;A=(z>>>0)/3|0;l=f[(f[(f[v>>2]|0)+96>>2]|0)+(A*12|0)+(z-(A*3|0)<<2)>>2]|0;A=f[n>>2]|0;f[d>>2]=l;z=f[A+4>>2]|0;A=z+4|0;B=f[A>>2]|0;if((B|0)==(f[z+8>>2]|0))Ng(z,d);else{f[B>>2]=l;f[A>>2]=B+4}B=f[q>>2]|0;A=B+4|0;l=f[A>>2]|0;if((l|0)==(f[B+8>>2]|0)){Ng(B,e);C=f[q>>2]|0}else{f[l>>2]=f[e>>2];f[A>>2]=l+4;C=B}B=C+24|0;f[(f[C+12>>2]|0)+(y<<2)>>2]=f[B>>2];f[B>>2]=(f[B>>2]|0)+1;D=f[i>>2]|0}else D=x;x=f[a>>2]|0;if((D|0)==-1){E=94;break}B=D+1|0;l=((B>>>0)%3|0|0)==0?D+-2|0:B;if((l|0)==-1)F=-1;else F=f[(f[x+12>>2]|0)+(l<<2)>>2]|0;l=(((D>>>0)%3|0|0)==0?2:-1)+D|0;if((l|0)==-1)G=-1;else G=f[(f[x+12>>2]|0)+(l<<2)>>2]|0;l=(F|0)==-1;B=l?-1:(F>>>0)/3|0;A=(G|0)==-1;z=A?-1:(G>>>0)/3|0;if(l)H=1;else H=(f[(f[t>>2]|0)+(B>>>5<<2)>>2]&1<<(B&31)|0)!=0;do if(A)if(H){E=94;break b}else E=82;else{if(f[(f[t>>2]|0)+(z>>>5<<2)>>2]&1<<(z&31)|0)if(H){E=94;break b}else{E=82;break}B=f[(f[x>>2]|0)+(G<<2)>>2]|0;if(!(1<<(B&31)&f[(f[k>>2]|0)+(B>>>5<<2)>>2])){I=(f[r>>2]|0)+(B<<2)|0;B=f[I>>2]|0;f[I>>2]=B+1;J=(B|0)>0?1:2}else J=0;if(H?(J|0)<=(f[b>>2]|0):0){K=G;break}f[d>>2]=G;B=a+52+(J*12|0)+4|0;I=f[B>>2]|0;if((I|0)==(f[a+52+(J*12|0)+8>>2]|0))Ng(a+52+(J*12|0)|0,d);else{f[I>>2]=G;f[B>>2]=I+4}if((f[b>>2]|0)>(J|0))f[b>>2]=J;if(H){E=94;break b}else E=82}while(0);if((E|0)==82){E=0;if(l)L=-1;else L=f[(f[f[a>>2]>>2]|0)+(F<<2)>>2]|0;if(!(1<<(L&31)&f[(f[k>>2]|0)+(L>>>5<<2)>>2])){x=(f[r>>2]|0)+(L<<2)|0;z=f[x>>2]|0;f[x>>2]=z+1;M=(z|0)>0?1:2}else M=0;if((M|0)>(f[b>>2]|0))break;else K=F}f[i>>2]=K;o=K;g=f[t>>2]|0}if((E|0)==94){E=0;N=f[b>>2]|0;break}f[d>>2]=F;g=a+52+(M*12|0)+4|0;o=f[g>>2]|0;if((o|0)==(f[a+52+(M*12|0)+8>>2]|0))Ng(a+52+(M*12|0)|0,d);else{f[o>>2]=F;f[g>>2]=o+4}o=f[b>>2]|0;if((o|0)>(M|0)){f[b>>2]=M;O=M}else O=o;N=O}else N=j;while(0);if((N|0)<3)w=N;else break a}j=w}u=c;return 1}while(0);f[i>>2]=-1;u=c;return 1}function yb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;c=u;u=u+32|0;d=c+16|0;e=c+4|0;g=c;f[a+36>>2]=b;h=a+24|0;i=a+28|0;j=f[h>>2]|0;k=(f[i>>2]|0)-j>>2;l=j;if(k>>>0>=b>>>0){if(k>>>0>b>>>0)f[i>>2]=l+(b<<2)}else Of(h,b-k|0,3732);f[d>>2]=0;k=d+4|0;f[k>>2]=0;l=d+8|0;f[l>>2]=0;if(b){if((b|0)<0)$n(d);j=((b+-1|0)>>>5)+1|0;m=wk(j<<2)|0;f[d>>2]=m;f[l>>2]=j;f[k>>2]=b;j=b>>>5;oh(m|0,0,j<<2|0)|0;n=b&31;o=m+(j<<2)|0;j=m;if(!n){p=b;q=j;r=m}else{f[o>>2]=f[o>>2]&~(-1>>>(32-n|0));p=b;q=j;r=m}}else{p=0;q=0;r=0}m=a+4|0;j=f[a>>2]|0;n=(f[m>>2]|0)-j|0;o=n>>2;f[e>>2]=0;s=e+4|0;f[s>>2]=0;t=e+8|0;f[t>>2]=0;do if(n){if((n|0)<0)$n(e);v=((o+-1|0)>>>5)+1|0;w=wk(v<<2)|0;f[e>>2]=w;f[t>>2]=v;f[s>>2]=o;v=o>>>5;oh(w|0,0,v<<2|0)|0;x=o&31;y=w+(v<<2)|0;if(x|0)f[y>>2]=f[y>>2]&~(-1>>>(32-x|0));if(o>>>0>2){x=a+32|0;y=a+12|0;v=a+52|0;w=a+56|0;z=a+48|0;A=b;B=j;C=0;D=q;E=r;a:while(1){F=B;G=C*3|0;H=f[F+(G<<2)>>2]|0;I=G+1|0;if((I|0)!=-1){J=f[F+(I<<2)>>2]|0;I=G+2|0;if((I|0)==-1){K=-1;L=J}else{M=J;N=I;O=22}}else{M=-1;N=0;O=22}if((O|0)==22){O=0;K=f[F+(N<<2)>>2]|0;L=M}if((H|0)!=(L|0)?!((H|0)==(K|0)|(L|0)==(K|0)):0){H=0;F=A;I=D;J=E;while(1){P=H+G|0;if(!(f[(f[e>>2]|0)+(P>>>5<<2)>>2]&1<<(P&31))){Q=f[(f[a>>2]|0)+(P<<2)>>2]|0;f[g>>2]=Q;R=Q>>>5;S=1<<(Q&31);b:do if(!(f[J+(R<<2)>>2]&S)){Q=f[d>>2]|0;T=Q+(R<<2)|0;f[T>>2]=f[T>>2]|S;T=Q;U=f[h>>2]|0;V=P;while(1){W=(f[e>>2]|0)+(V>>>5<<2)|0;f[W>>2]=f[W>>2]|1<<(V&31);f[U+(f[g>>2]<<2)>>2]=V;W=V+1|0;X=((W>>>0)%3|0|0)==0?V+-2|0:W;do if((X|0)==-1)Y=-1;else{W=f[(f[y>>2]|0)+(X<<2)>>2]|0;Z=W+1|0;if((W|0)==-1){Y=-1;break}Y=((Z>>>0)%3|0|0)==0?W+-2|0:Z}while(0);if((Y|0)==(P|0)){_=0;$=F;aa=T;ba=Q;O=50;break b}if((Y|0)==-1){ca=0;da=F;ea=T;fa=Q;O=51;break}else V=Y}}else{V=f[i>>2]|0;if((V|0)==(f[x>>2]|0))Ng(h,3732);else{f[V>>2]=-1;f[i>>2]=V+4}V=f[v>>2]|0;if((V|0)==(f[w>>2]|0))Ng(z,g);else{f[V>>2]=f[g>>2];f[v>>2]=V+4}V=f[k>>2]|0;Q=f[l>>2]|0;if((V|0)==(Q<<5|0)){if((V+1|0)<0){O=36;break a}T=Q<<6;Q=V+32&-32;vg(d,V>>>0<1073741823?(T>>>0<Q>>>0?Q:T):2147483647);ga=f[k>>2]|0}else ga=V;f[k>>2]=ga+1;V=(f[d>>2]|0)+(ga>>>5<<2)|0;f[V>>2]=f[V>>2]&~(1<<(ga&31));V=F+1|0;f[g>>2]=F;T=f[d>>2]|0;Q=T+(F>>>5<<2)|0;f[Q>>2]=f[Q>>2]|1<<(F&31);Q=T;U=f[h>>2]|0;X=f[a>>2]|0;Z=P;while(1){W=(f[e>>2]|0)+(Z>>>5<<2)|0;f[W>>2]=f[W>>2]|1<<(Z&31);W=f[g>>2]|0;f[U+(W<<2)>>2]=Z;f[X+(Z<<2)>>2]=W;W=Z+1|0;ha=((W>>>0)%3|0|0)==0?Z+-2|0:W;do if((ha|0)==-1)ia=-1;else{W=f[(f[y>>2]|0)+(ha<<2)>>2]|0;ja=W+1|0;if((W|0)==-1){ia=-1;break}ia=((ja>>>0)%3|0|0)==0?W+-2|0:ja}while(0);if((ia|0)==(P|0)){_=1;$=V;aa=Q;ba=T;O=50;break b}if((ia|0)==-1){ca=1;da=V;ea=Q;fa=T;O=51;break}else Z=ia}}while(0);if((O|0)==50){O=0;if((P|0)==-1){ca=_;da=$;ea=aa;fa=ba;O=51}else{ka=$;la=aa;ma=ba}}c:do if((O|0)==51){O=0;S=(((P>>>0)%3|0|0)==0?2:-1)+P|0;if(((S|0)!=-1?(R=f[(f[y>>2]|0)+(S<<2)>>2]|0,(R|0)!=-1):0)?(S=R+(((R>>>0)%3|0|0)==0?2:-1)|0,(S|0)!=-1):0)if(ca){R=f[a>>2]|0;Z=S;while(1){T=(f[e>>2]|0)+(Z>>>5<<2)|0;f[T>>2]=f[T>>2]|1<<(Z&31);f[R+(Z<<2)>>2]=f[g>>2];T=(((Z>>>0)%3|0|0)==0?2:-1)+Z|0;if((T|0)==-1){ka=da;la=ea;ma=fa;break c}Q=f[(f[y>>2]|0)+(T<<2)>>2]|0;if((Q|0)==-1){ka=da;la=ea;ma=fa;break c}Z=Q+(((Q>>>0)%3|0|0)==0?2:-1)|0;if((Z|0)==-1){ka=da;la=ea;ma=fa;break}}}else{Z=S;while(1){R=(f[e>>2]|0)+(Z>>>5<<2)|0;f[R>>2]=f[R>>2]|1<<(Z&31);R=(((Z>>>0)%3|0|0)==0?2:-1)+Z|0;if((R|0)==-1){ka=da;la=ea;ma=fa;break c}Q=f[(f[y>>2]|0)+(R<<2)>>2]|0;if((Q|0)==-1){ka=da;la=ea;ma=fa;break c}Z=Q+(((Q>>>0)%3|0|0)==0?2:-1)|0;if((Z|0)==-1){ka=da;la=ea;ma=fa;break}}}else{ka=da;la=ea;ma=fa}}while(0);na=ka;oa=la;pa=ma}else{na=F;oa=I;pa=J}H=H+1|0;if(H>>>0>=3){qa=na;ra=oa;sa=pa;break}else{F=na;I=oa;J=pa}}}else{qa=A;ra=D;sa=E}C=C+1|0;B=f[a>>2]|0;if(C>>>0>=(((f[m>>2]|0)-B>>2>>>0)/3|0)>>>0){O=17;break}else{A=qa;D=ra;E=sa}}if((O|0)==17){ta=ra;ua=f[k>>2]|0;break}else if((O|0)==36)$n(d)}else{ta=q;ua=p}}else{ta=q;ua=p}while(0);p=a+44|0;f[p>>2]=0;a=ta;q=ua>>>5;O=a+(q<<2)|0;k=ua&31;if(q|k|0){q=ta;ta=0;ua=a;a=0;while(1){if(!(f[ua>>2]&1<<ta)){ra=a+1|0;f[p>>2]=ra;va=ra}else va=a;ra=(ta|0)==31;q=ra?ua+4|0:q;ta=ra?0:ta+1|0;ua=q;if(!((O|0)!=(ua|0)|(ta|0)!=(k|0)))break;else a=va}}va=f[e>>2]|0;if(va|0)Ko(va);va=f[d>>2]|0;if(!va){u=c;return 1}Ko(va);u=c;return 1}function zb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=Ia,L=Ia,M=Ia,N=0,O=0,P=0,Q=0,R=0,S=0;e=u;u=u+48|0;g=e+40|0;i=e+16|0;j=e;k=Ec(a,c)|0;if(k|0){l=f[a+4>>2]|0;m=f[k+4>>2]|0;o=l+-1|0;p=(o&l|0)==0;if(!p)if(m>>>0<l>>>0)q=m;else q=(m>>>0)%(l>>>0)|0;else q=o&m;m=(f[a>>2]|0)+(q<<2)|0;r=f[m>>2]|0;while(1){s=f[r>>2]|0;if((s|0)==(k|0))break;else r=s}if((r|0)!=(a+8|0)){s=f[r+4>>2]|0;if(!p)if(s>>>0<l>>>0)t=s;else t=(s>>>0)%(l>>>0)|0;else t=s&o;if((t|0)==(q|0))v=k;else w=15}else w=15;do if((w|0)==15){t=f[k>>2]|0;if(t|0){s=f[t+4>>2]|0;if(!p)if(s>>>0<l>>>0)x=s;else x=(s>>>0)%(l>>>0)|0;else x=s&o;if((x|0)==(q|0)){v=k;break}}f[m>>2]=0;v=k}while(0);m=f[v>>2]|0;x=m;if(m){s=f[m+4>>2]|0;if(!p)if(s>>>0<l>>>0)y=s;else y=(s>>>0)%(l>>>0)|0;else y=s&o;if((y|0)!=(q|0)){f[(f[a>>2]|0)+(y<<2)>>2]=r;z=f[k>>2]|0}else z=x}else z=x;f[r>>2]=z;f[v>>2]=0;v=a+12|0;f[v>>2]=(f[v>>2]|0)+-1;v=k+8|0;z=f[k+20>>2]|0;if(z|0){f[k+24>>2]=z;Ko(z)}if((b[v+11>>0]|0)<0)Ko(f[v>>2]|0);Ko(k)}f[j>>2]=0;k=j+4|0;f[k>>2]=0;f[j+8>>2]=0;v=(f[d+4>>2]|0)-(f[d>>2]|0)|0;Kg(j,v);Bf(f[j>>2]|0,f[d>>2]|0,v|0)|0;Yi(i,c);c=i+12|0;f[c>>2]=0;v=i+16|0;f[v>>2]=0;f[i+20>>2]=0;Kg(c,(f[k>>2]|0)-(f[j>>2]|0)|0);d=f[j>>2]|0;Bf(f[c>>2]|0,d|0,(f[k>>2]|0)-d|0)|0;d=i+11|0;z=b[d>>0]|0;r=z<<24>>24<0;x=r?f[i>>2]|0:i;y=r?f[i+4>>2]|0:z&255;if(y>>>0>3){z=x;r=y;q=y;while(1){o=W(h[z>>0]|h[z+1>>0]<<8|h[z+2>>0]<<16|h[z+3>>0]<<24,1540483477)|0;r=(W(o>>>24^o,1540483477)|0)^(W(r,1540483477)|0);q=q+-4|0;if(q>>>0<=3)break;else z=z+4|0}z=y+-4|0;q=z&-4;A=z-q|0;B=x+(q+4)|0;C=r}else{A=y;B=x;C=y}switch(A|0){case 3:{D=h[B+2>>0]<<16^C;w=40;break}case 2:{D=C;w=40;break}case 1:{E=C;w=41;break}default:F=C}if((w|0)==40){E=h[B+1>>0]<<8^D;w=41}if((w|0)==41)F=W(E^h[B>>0],1540483477)|0;B=W(F>>>13^F,1540483477)|0;F=B>>>15^B;B=a+4|0;E=f[B>>2]|0;D=(E|0)==0;a:do if(!D){C=E+-1|0;A=(C&E|0)==0;if(!A)if(F>>>0<E>>>0)G=F;else G=(F>>>0)%(E>>>0)|0;else G=F&C;r=f[(f[a>>2]|0)+(G<<2)>>2]|0;if((r|0)!=0?(q=f[r>>2]|0,(q|0)!=0):0){r=(y|0)==0;if(A){if(r){A=q;while(1){z=f[A+4>>2]|0;if(!((z|0)==(F|0)|(z&C|0)==(G|0))){H=G;w=86;break a}z=b[A+8+11>>0]|0;if(!((z<<24>>24<0?f[A+12>>2]|0:z&255)|0))break a;A=f[A>>2]|0;if(!A){H=G;w=86;break a}}}A=q;while(1){z=f[A+4>>2]|0;if(!((z|0)==(F|0)|(z&C|0)==(G|0))){H=G;w=86;break a}z=A+8|0;o=b[z+11>>0]|0;s=o<<24>>24<0;l=o&255;do if(((s?f[A+12>>2]|0:l)|0)==(y|0)){o=f[z>>2]|0;if(s)if(!(Fi(o,x,y)|0))break a;else break;if((b[x>>0]|0)==(o&255)<<24>>24){o=z;p=l;m=x;do{p=p+-1|0;o=o+1|0;if(!p)break a;m=m+1|0}while((b[o>>0]|0)==(b[m>>0]|0))}}while(0);A=f[A>>2]|0;if(!A){H=G;w=86;break a}}}if(r){A=q;while(1){C=f[A+4>>2]|0;if((C|0)!=(F|0)){if(C>>>0<E>>>0)I=C;else I=(C>>>0)%(E>>>0)|0;if((I|0)!=(G|0)){H=G;w=86;break a}}C=b[A+8+11>>0]|0;if(!((C<<24>>24<0?f[A+12>>2]|0:C&255)|0))break a;A=f[A>>2]|0;if(!A){H=G;w=86;break a}}}A=q;while(1){r=f[A+4>>2]|0;if((r|0)!=(F|0)){if(r>>>0<E>>>0)J=r;else J=(r>>>0)%(E>>>0)|0;if((J|0)!=(G|0)){H=G;w=86;break a}}r=A+8|0;C=b[r+11>>0]|0;l=C<<24>>24<0;z=C&255;do if(((l?f[A+12>>2]|0:z)|0)==(y|0)){C=f[r>>2]|0;if(l)if(!(Fi(C,x,y)|0))break a;else break;if((b[x>>0]|0)==(C&255)<<24>>24){C=r;s=z;m=x;do{s=s+-1|0;C=C+1|0;if(!s)break a;m=m+1|0}while((b[C>>0]|0)==(b[m>>0]|0))}}while(0);A=f[A>>2]|0;if(!A){H=G;w=86;break}}}else{H=G;w=86}}else{H=0;w=86}while(0);if((w|0)==86){G=wk(32)|0;f[g>>2]=G;x=G+8|0;f[x>>2]=f[i>>2];f[x+4>>2]=f[i+4>>2];f[x+8>>2]=f[i+8>>2];f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;x=G+20|0;f[x>>2]=0;f[G+24>>2]=0;f[G+28>>2]=0;Kg(x,(f[v>>2]|0)-(f[c>>2]|0)|0);y=f[c>>2]|0;Bf(f[x>>2]|0,y|0,(f[v>>2]|0)-y|0)|0;f[G+4>>2]=F;f[G>>2]=0;y=a+12|0;K=_(((f[y>>2]|0)+1|0)>>>0);L=_(E>>>0);M=_(n[a+16>>2]);do if(D|_(M*L)<K){x=E<<1|(E>>>0<3|(E+-1&E|0)!=0)&1;c=~~_(V(_(K/M)))>>>0;Xf(a,x>>>0<c>>>0?c:x);x=f[B>>2]|0;c=x+-1|0;if(!(c&x)){N=x;O=c&F;break}if(F>>>0<x>>>0){N=x;O=F}else{N=x;O=(F>>>0)%(x>>>0)|0}}else{N=E;O=H}while(0);H=(f[a>>2]|0)+(O<<2)|0;O=f[H>>2]|0;if(!O){E=a+8|0;f[G>>2]=f[E>>2];f[E>>2]=G;f[H>>2]=E;E=f[G>>2]|0;if(!E)P=g;else{H=f[E+4>>2]|0;E=N+-1|0;if(E&N)if(H>>>0<N>>>0)Q=H;else Q=(H>>>0)%(N>>>0)|0;else Q=H&E;R=g;S=(f[a>>2]|0)+(Q<<2)|0;w=99}}else{f[G>>2]=f[O>>2];R=g;S=O;w=99}if((w|0)==99){f[S>>2]=G;P=R}f[y>>2]=(f[y>>2]|0)+1;f[P>>2]=0}P=f[i+12>>2]|0;if(P|0){f[v>>2]=P;Ko(P)}if((b[d>>0]|0)<0)Ko(f[i>>2]|0);i=f[j>>2]|0;if(!i){u=e;return}f[k>>2]=i;Ko(i);u=e;return}function Ab(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{j=a+24|0;k=b[j>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){l=f[f[a>>2]>>2]|0;m=a+40|0;o=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;q=vl(o|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=l+q|0;q=0;while(1){d[g+(q<<1)>>1]=b[m>>0]|0;q=q+1|0;l=b[j>>0]|0;if((q|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){r=l;break}else m=m+1|0}}else r=k;m=r<<24>>24;if(r<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<1)|0,0,(e<<24>>24)-m<<1|0)|0;i=1;return i|0}case 2:{m=a+24|0;q=b[m>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){j=f[f[a>>2]>>2]|0;l=a+40|0;o=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;s=vl(o|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=j+s|0;s=0;while(1){d[g+(s<<1)>>1]=h[l>>0]|0;s=s+1|0;j=b[m>>0]|0;if((s|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){t=j;break}else l=l+1|0}}else t=q;l=t<<24>>24;if(t<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<1)|0,0,(e<<24>>24)-l<<1|0)|0;i=1;return i|0}case 3:{l=a+24|0;s=b[l>>0]|0;if((s<<24>>24>e<<24>>24?e:s)<<24>>24>0){m=f[f[a>>2]>>2]|0;k=a+40|0;j=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;o=vl(j|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=m+o|0;o=0;while(1){d[g+(o<<1)>>1]=d[k>>1]|0;o=o+1|0;m=b[l>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){u=m;break}else k=k+2|0}}else u=s;k=u<<24>>24;if(u<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<1)|0,0,(e<<24>>24)-k<<1|0)|0;i=1;return i|0}case 4:{k=a+24|0;o=b[k>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){l=f[f[a>>2]>>2]|0;q=a+40|0;m=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;j=vl(m|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=l+j|0;j=0;while(1){d[g+(j<<1)>>1]=d[q>>1]|0;j=j+1|0;l=b[k>>0]|0;if((j|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){v=l;break}else q=q+2|0}}else v=o;q=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<1)|0,0,(e<<24>>24)-q<<1|0)|0;i=1;return i|0}case 5:{q=a+24|0;j=b[q>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){k=f[f[a>>2]>>2]|0;s=a+40|0;l=Bk(f[s>>2]|0,f[s+4>>2]|0,f[c>>2]|0,0)|0;s=a+48|0;m=vl(l|0,H|0,f[s>>2]|0,f[s+4>>2]|0)|0;s=k+m|0;m=0;while(1){d[g+(m<<1)>>1]=f[s>>2];m=m+1|0;k=b[q>>0]|0;if((m|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){w=k;break}else s=s+4|0}}else w=j;s=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(s<<1)|0,0,(e<<24>>24)-s<<1|0)|0;i=1;return i|0}case 6:{s=a+24|0;m=b[s>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){q=f[f[a>>2]>>2]|0;o=a+40|0;k=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;l=vl(k|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=q+l|0;l=0;while(1){d[g+(l<<1)>>1]=f[o>>2];l=l+1|0;q=b[s>>0]|0;if((l|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){x=q;break}else o=o+4|0}}else x=m;o=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<1)|0,0,(e<<24>>24)-o<<1|0)|0;i=1;return i|0}case 7:{o=a+24|0;l=b[o>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){s=f[f[a>>2]>>2]|0;j=a+40|0;q=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;k=vl(q|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=s+k|0;k=0;while(1){d[g+(k<<1)>>1]=f[j>>2];k=k+1|0;s=b[o>>0]|0;if((k|0)>=((s<<24>>24>e<<24>>24?e:s)<<24>>24|0)){y=s;break}else j=j+8|0}}else y=l;j=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(j<<1)|0,0,(e<<24>>24)-j<<1|0)|0;i=1;return i|0}case 8:{j=a+24|0;k=b[j>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){o=f[f[a>>2]>>2]|0;m=a+40|0;s=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;q=vl(s|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=o+q|0;q=0;while(1){d[g+(q<<1)>>1]=f[m>>2];q=q+1|0;o=b[j>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){z=o;break}else m=m+8|0}}else z=k;m=z<<24>>24;if(z<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<1)|0,0,(e<<24>>24)-m<<1|0)|0;i=1;return i|0}case 9:{m=a+24|0;q=b[m>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){j=f[f[a>>2]>>2]|0;l=a+40|0;o=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;s=vl(o|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=j+s|0;s=0;while(1){j=~~_(n[l>>2])&65535;d[g+(s<<1)>>1]=j;s=s+1|0;j=b[m>>0]|0;if((s|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){A=j;break}else l=l+4|0}}else A=q;l=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<1)|0,0,(e<<24>>24)-l<<1|0)|0;i=1;return i|0}case 10:{l=a+24|0;s=b[l>>0]|0;if((s<<24>>24>e<<24>>24?e:s)<<24>>24>0){m=f[f[a>>2]>>2]|0;k=a+40|0;j=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;o=vl(j|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=m+o|0;o=0;while(1){d[g+(o<<1)>>1]=~~+p[k>>3];o=o+1|0;m=b[l>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){B=m;break}else k=k+8|0}}else B=s;k=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<1)|0,0,(e<<24>>24)-k<<1|0)|0;i=1;return i|0}case 11:{k=a+24|0;o=b[k>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){l=f[f[a>>2]>>2]|0;q=a+40|0;m=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;j=vl(m|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=l+j|0;j=0;while(1){d[g+(j<<1)>>1]=h[q>>0]|0;j=j+1|0;l=b[k>>0]|0;if((j|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){C=l;break}else q=q+1|0}}else C=o;q=C<<24>>24;if(C<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<1)|0,0,(e<<24>>24)-q<<1|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function Bb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{j=a+24|0;k=b[j>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){l=f[f[a>>2]>>2]|0;m=a+40|0;o=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;q=vl(o|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=l+q|0;q=0;while(1){d[g+(q<<1)>>1]=b[m>>0]|0;q=q+1|0;l=b[j>>0]|0;if((q|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){r=l;break}else m=m+1|0}}else r=k;m=r<<24>>24;if(r<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<1)|0,0,(e<<24>>24)-m<<1|0)|0;i=1;return i|0}case 2:{m=a+24|0;q=b[m>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){j=f[f[a>>2]>>2]|0;l=a+40|0;o=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;s=vl(o|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=j+s|0;s=0;while(1){d[g+(s<<1)>>1]=h[l>>0]|0;s=s+1|0;j=b[m>>0]|0;if((s|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){t=j;break}else l=l+1|0}}else t=q;l=t<<24>>24;if(t<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<1)|0,0,(e<<24>>24)-l<<1|0)|0;i=1;return i|0}case 3:{l=a+24|0;s=b[l>>0]|0;if((s<<24>>24>e<<24>>24?e:s)<<24>>24>0){m=f[f[a>>2]>>2]|0;k=a+40|0;j=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;o=vl(j|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=m+o|0;o=0;while(1){d[g+(o<<1)>>1]=d[k>>1]|0;o=o+1|0;m=b[l>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){u=m;break}else k=k+2|0}}else u=s;k=u<<24>>24;if(u<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<1)|0,0,(e<<24>>24)-k<<1|0)|0;i=1;return i|0}case 4:{k=a+24|0;o=b[k>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){l=f[f[a>>2]>>2]|0;q=a+40|0;m=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;j=vl(m|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=l+j|0;j=0;while(1){d[g+(j<<1)>>1]=d[q>>1]|0;j=j+1|0;l=b[k>>0]|0;if((j|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){v=l;break}else q=q+2|0}}else v=o;q=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<1)|0,0,(e<<24>>24)-q<<1|0)|0;i=1;return i|0}case 5:{q=a+24|0;j=b[q>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){k=f[f[a>>2]>>2]|0;s=a+40|0;l=Bk(f[s>>2]|0,f[s+4>>2]|0,f[c>>2]|0,0)|0;s=a+48|0;m=vl(l|0,H|0,f[s>>2]|0,f[s+4>>2]|0)|0;s=k+m|0;m=0;while(1){d[g+(m<<1)>>1]=f[s>>2];m=m+1|0;k=b[q>>0]|0;if((m|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){w=k;break}else s=s+4|0}}else w=j;s=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(s<<1)|0,0,(e<<24>>24)-s<<1|0)|0;i=1;return i|0}case 6:{s=a+24|0;m=b[s>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){q=f[f[a>>2]>>2]|0;o=a+40|0;k=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;l=vl(k|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=q+l|0;l=0;while(1){d[g+(l<<1)>>1]=f[o>>2];l=l+1|0;q=b[s>>0]|0;if((l|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){x=q;break}else o=o+4|0}}else x=m;o=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<1)|0,0,(e<<24>>24)-o<<1|0)|0;i=1;return i|0}case 7:{o=a+24|0;l=b[o>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){s=f[f[a>>2]>>2]|0;j=a+40|0;q=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;k=vl(q|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=s+k|0;k=0;while(1){d[g+(k<<1)>>1]=f[j>>2];k=k+1|0;s=b[o>>0]|0;if((k|0)>=((s<<24>>24>e<<24>>24?e:s)<<24>>24|0)){y=s;break}else j=j+8|0}}else y=l;j=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(j<<1)|0,0,(e<<24>>24)-j<<1|0)|0;i=1;return i|0}case 8:{j=a+24|0;k=b[j>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){o=f[f[a>>2]>>2]|0;m=a+40|0;s=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;q=vl(s|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=o+q|0;q=0;while(1){d[g+(q<<1)>>1]=f[m>>2];q=q+1|0;o=b[j>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){z=o;break}else m=m+8|0}}else z=k;m=z<<24>>24;if(z<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<1)|0,0,(e<<24>>24)-m<<1|0)|0;i=1;return i|0}case 9:{m=a+24|0;q=b[m>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){j=f[f[a>>2]>>2]|0;l=a+40|0;o=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;s=vl(o|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=j+s|0;s=0;while(1){j=~~_(n[l>>2]);d[g+(s<<1)>>1]=j;s=s+1|0;j=b[m>>0]|0;if((s|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){A=j;break}else l=l+4|0}}else A=q;l=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<1)|0,0,(e<<24>>24)-l<<1|0)|0;i=1;return i|0}case 10:{l=a+24|0;s=b[l>>0]|0;if((s<<24>>24>e<<24>>24?e:s)<<24>>24>0){m=f[f[a>>2]>>2]|0;k=a+40|0;j=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;o=vl(j|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=m+o|0;o=0;while(1){d[g+(o<<1)>>1]=~~+p[k>>3];o=o+1|0;m=b[l>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){B=m;break}else k=k+8|0}}else B=s;k=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<1)|0,0,(e<<24>>24)-k<<1|0)|0;i=1;return i|0}case 11:{k=a+24|0;o=b[k>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){l=f[f[a>>2]>>2]|0;q=a+40|0;m=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;j=vl(m|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=l+j|0;j=0;while(1){d[g+(j<<1)>>1]=h[q>>0]|0;j=j+1|0;l=b[k>>0]|0;if((j|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){C=l;break}else q=q+1|0}}else C=o;q=C<<24>>24;if(C<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<1)|0,0,(e<<24>>24)-q<<1|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function Cb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){m=f[f[a>>2]>>2]|0;o=a+40|0;q=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(q|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=m+r|0;r=0;while(1){f[g+(r<<2)>>2]=b[o>>0];r=r+1|0;m=b[k>>0]|0;if((r|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){s=m;break}else o=o+1|0}}else s=l;o=s<<24>>24;if(s<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<2)|0,0,(e<<24>>24)-o<<2|0)|0;i=1;return i|0}case 2:{o=a+24|0;r=b[o>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;q=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(q|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){f[g+(t<<2)>>2]=h[m>>0];t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){u=k;break}else m=m+1|0}}else u=r;m=u<<24>>24;if(u<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<2)|0,0,(e<<24>>24)-m<<2|0)|0;i=1;return i|0}case 3:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;q=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+q|0;q=0;while(1){f[g+(q<<2)>>2]=d[l>>1];q=q+1|0;o=b[m>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){v=o;break}else l=l+2|0}}else v=t;l=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<2)|0,0,(e<<24>>24)-l<<2|0)|0;i=1;return i|0}case 4:{l=a+24|0;q=b[l>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){m=f[f[a>>2]>>2]|0;r=a+40|0;o=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;k=vl(o|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=m+k|0;k=0;while(1){f[g+(k<<2)>>2]=j[r>>1];k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){w=m;break}else r=r+2|0}}else w=q;r=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<2)|0,0,(e<<24>>24)-r<<2|0)|0;i=1;return i|0}case 5:{r=a+24|0;k=b[r>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){l=f[f[a>>2]>>2]|0;t=a+40|0;m=Bk(f[t>>2]|0,f[t+4>>2]|0,f[c>>2]|0,0)|0;t=a+48|0;o=vl(m|0,H|0,f[t>>2]|0,f[t+4>>2]|0)|0;t=l+o|0;o=0;while(1){f[g+(o<<2)>>2]=f[t>>2];o=o+1|0;l=b[r>>0]|0;if((o|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){x=l;break}else t=t+4|0}}else x=k;t=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(t<<2)|0,0,(e<<24>>24)-t<<2|0)|0;i=1;return i|0}case 6:{t=a+24|0;o=b[t>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){r=f[f[a>>2]>>2]|0;q=a+40|0;l=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;m=vl(l|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=r+m|0;m=0;while(1){f[g+(m<<2)>>2]=f[q>>2];m=m+1|0;r=b[t>>0]|0;if((m|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){y=r;break}else q=q+4|0}}else y=o;q=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<2)|0,0,(e<<24>>24)-q<<2|0)|0;i=1;return i|0}case 7:{q=a+24|0;m=b[q>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){t=f[f[a>>2]>>2]|0;k=a+40|0;r=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;l=vl(r|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=t+l|0;l=0;while(1){f[g+(l<<2)>>2]=f[k>>2];l=l+1|0;t=b[q>>0]|0;if((l|0)>=((t<<24>>24>e<<24>>24?e:t)<<24>>24|0)){z=t;break}else k=k+8|0}}else z=m;k=z<<24>>24;if(z<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<2)|0,0,(e<<24>>24)-k<<2|0)|0;i=1;return i|0}case 8:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){q=f[f[a>>2]>>2]|0;o=a+40|0;t=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(t|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=q+r|0;r=0;while(1){f[g+(r<<2)>>2]=f[o>>2];r=r+1|0;q=b[k>>0]|0;if((r|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){A=q;break}else o=o+8|0}}else A=l;o=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<2)|0,0,(e<<24>>24)-o<<2|0)|0;i=1;return i|0}case 9:{o=a+24|0;r=b[o>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;q=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(q|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){k=~~_(n[m>>2])>>>0;f[g+(t<<2)>>2]=k;t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){B=k;break}else m=m+4|0}}else B=r;m=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<2)|0,0,(e<<24>>24)-m<<2|0)|0;i=1;return i|0}case 10:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;q=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+q|0;q=0;while(1){f[g+(q<<2)>>2]=~~+p[l>>3]>>>0;q=q+1|0;o=b[m>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){C=o;break}else l=l+8|0}}else C=t;l=C<<24>>24;if(C<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<2)|0,0,(e<<24>>24)-l<<2|0)|0;i=1;return i|0}case 11:{l=a+24|0;q=b[l>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){m=f[f[a>>2]>>2]|0;r=a+40|0;o=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;k=vl(o|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=m+k|0;k=0;while(1){f[g+(k<<2)>>2]=h[r>>0];k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){D=m;break}else r=r+1|0}}else D=q;r=D<<24>>24;if(D<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<2)|0,0,(e<<24>>24)-r<<2|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function Db(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){m=f[f[a>>2]>>2]|0;o=a+40|0;q=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(q|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=m+r|0;r=0;while(1){f[g+(r<<2)>>2]=b[o>>0];r=r+1|0;m=b[k>>0]|0;if((r|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){s=m;break}else o=o+1|0}}else s=l;o=s<<24>>24;if(s<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<2)|0,0,(e<<24>>24)-o<<2|0)|0;i=1;return i|0}case 2:{o=a+24|0;r=b[o>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;q=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(q|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){f[g+(t<<2)>>2]=h[m>>0];t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){u=k;break}else m=m+1|0}}else u=r;m=u<<24>>24;if(u<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<2)|0,0,(e<<24>>24)-m<<2|0)|0;i=1;return i|0}case 3:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;q=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+q|0;q=0;while(1){f[g+(q<<2)>>2]=d[l>>1];q=q+1|0;o=b[m>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){v=o;break}else l=l+2|0}}else v=t;l=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<2)|0,0,(e<<24>>24)-l<<2|0)|0;i=1;return i|0}case 4:{l=a+24|0;q=b[l>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){m=f[f[a>>2]>>2]|0;r=a+40|0;o=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;k=vl(o|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=m+k|0;k=0;while(1){f[g+(k<<2)>>2]=j[r>>1];k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){w=m;break}else r=r+2|0}}else w=q;r=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<2)|0,0,(e<<24>>24)-r<<2|0)|0;i=1;return i|0}case 5:{r=a+24|0;k=b[r>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){l=f[f[a>>2]>>2]|0;t=a+40|0;m=Bk(f[t>>2]|0,f[t+4>>2]|0,f[c>>2]|0,0)|0;t=a+48|0;o=vl(m|0,H|0,f[t>>2]|0,f[t+4>>2]|0)|0;t=l+o|0;o=0;while(1){f[g+(o<<2)>>2]=f[t>>2];o=o+1|0;l=b[r>>0]|0;if((o|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){x=l;break}else t=t+4|0}}else x=k;t=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(t<<2)|0,0,(e<<24>>24)-t<<2|0)|0;i=1;return i|0}case 6:{t=a+24|0;o=b[t>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){r=f[f[a>>2]>>2]|0;q=a+40|0;l=Bk(f[q>>2]|0,f[q+4>>2]|0,f[c>>2]|0,0)|0;q=a+48|0;m=vl(l|0,H|0,f[q>>2]|0,f[q+4>>2]|0)|0;q=r+m|0;m=0;while(1){f[g+(m<<2)>>2]=f[q>>2];m=m+1|0;r=b[t>>0]|0;if((m|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){y=r;break}else q=q+4|0}}else y=o;q=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(q<<2)|0,0,(e<<24>>24)-q<<2|0)|0;i=1;return i|0}case 7:{q=a+24|0;m=b[q>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){t=f[f[a>>2]>>2]|0;k=a+40|0;r=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;l=vl(r|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=t+l|0;l=0;while(1){f[g+(l<<2)>>2]=f[k>>2];l=l+1|0;t=b[q>>0]|0;if((l|0)>=((t<<24>>24>e<<24>>24?e:t)<<24>>24|0)){z=t;break}else k=k+8|0}}else z=m;k=z<<24>>24;if(z<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<2)|0,0,(e<<24>>24)-k<<2|0)|0;i=1;return i|0}case 8:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){q=f[f[a>>2]>>2]|0;o=a+40|0;t=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(t|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=q+r|0;r=0;while(1){f[g+(r<<2)>>2]=f[o>>2];r=r+1|0;q=b[k>>0]|0;if((r|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){A=q;break}else o=o+8|0}}else A=l;o=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<2)|0,0,(e<<24>>24)-o<<2|0)|0;i=1;return i|0}case 9:{o=a+24|0;r=b[o>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){k=f[f[a>>2]>>2]|0;m=a+40|0;q=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;t=vl(q|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=k+t|0;t=0;while(1){k=~~_(n[m>>2]);f[g+(t<<2)>>2]=k;t=t+1|0;k=b[o>>0]|0;if((t|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){B=k;break}else m=m+4|0}}else B=r;m=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<2)|0,0,(e<<24>>24)-m<<2|0)|0;i=1;return i|0}case 10:{m=a+24|0;t=b[m>>0]|0;if((t<<24>>24>e<<24>>24?e:t)<<24>>24>0){o=f[f[a>>2]>>2]|0;l=a+40|0;k=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;q=vl(k|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=o+q|0;q=0;while(1){f[g+(q<<2)>>2]=~~+p[l>>3];q=q+1|0;o=b[m>>0]|0;if((q|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){C=o;break}else l=l+8|0}}else C=t;l=C<<24>>24;if(C<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(l<<2)|0,0,(e<<24>>24)-l<<2|0)|0;i=1;return i|0}case 11:{l=a+24|0;q=b[l>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){m=f[f[a>>2]>>2]|0;r=a+40|0;o=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;k=vl(o|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=m+k|0;k=0;while(1){f[g+(k<<2)>>2]=h[r>>0];k=k+1|0;m=b[l>>0]|0;if((k|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){D=m;break}else r=r+1|0}}else D=q;r=D<<24>>24;if(D<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<2)|0,0,(e<<24>>24)-r<<2|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function Eb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!g){h=0;return h|0}do switch(f[a+28>>2]|0){case 1:{i=a+24|0;j=b[i>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){k=f[f[a>>2]>>2]|0;l=a+40|0;m=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;o=vl(m|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=k+o|0;o=0;while(1){b[g+o>>0]=b[l>>0]|0;o=o+1|0;k=b[i>>0]|0;if((o|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){q=k;break}else l=l+1|0}}else q=j;l=q<<24>>24;if(q<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+l|0,0,(e<<24>>24)-l|0)|0;h=1;return h|0}case 2:{l=a+24|0;o=b[l>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){i=f[f[a>>2]>>2]|0;k=a+40|0;m=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;r=vl(m|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=i+r|0;r=0;while(1){b[g+r>>0]=b[k>>0]|0;r=r+1|0;i=b[l>>0]|0;if((r|0)>=((i<<24>>24>e<<24>>24?e:i)<<24>>24|0)){s=i;break}else k=k+1|0}}else s=o;k=s<<24>>24;if(s<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+k|0,0,(e<<24>>24)-k|0)|0;h=1;return h|0}case 3:{k=a+24|0;r=b[k>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){l=f[f[a>>2]>>2]|0;j=a+40|0;i=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;m=vl(i|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=l+m|0;m=0;while(1){b[g+m>>0]=d[j>>1];m=m+1|0;l=b[k>>0]|0;if((m|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){t=l;break}else j=j+2|0}}else t=r;j=t<<24>>24;if(t<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+j|0,0,(e<<24>>24)-j|0)|0;h=1;return h|0}case 4:{j=a+24|0;m=b[j>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){k=f[f[a>>2]>>2]|0;o=a+40|0;l=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;i=vl(l|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=k+i|0;i=0;while(1){b[g+i>>0]=d[o>>1];i=i+1|0;k=b[j>>0]|0;if((i|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){u=k;break}else o=o+2|0}}else u=m;o=u<<24>>24;if(u<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+o|0,0,(e<<24>>24)-o|0)|0;h=1;return h|0}case 5:{o=a+24|0;i=b[o>>0]|0;if((i<<24>>24>e<<24>>24?e:i)<<24>>24>0){j=f[f[a>>2]>>2]|0;r=a+40|0;k=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;l=vl(k|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=j+l|0;l=0;while(1){b[g+l>>0]=f[r>>2];l=l+1|0;j=b[o>>0]|0;if((l|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){v=j;break}else r=r+4|0}}else v=i;r=v<<24>>24;if(v<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+r|0,0,(e<<24>>24)-r|0)|0;h=1;return h|0}case 6:{r=a+24|0;l=b[r>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){o=f[f[a>>2]>>2]|0;m=a+40|0;j=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;k=vl(j|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=o+k|0;k=0;while(1){b[g+k>>0]=f[m>>2];k=k+1|0;o=b[r>>0]|0;if((k|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){w=o;break}else m=m+4|0}}else w=l;m=w<<24>>24;if(w<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+m|0,0,(e<<24>>24)-m|0)|0;h=1;return h|0}case 7:{m=a+24|0;k=b[m>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){r=f[f[a>>2]>>2]|0;i=a+40|0;o=Bk(f[i>>2]|0,f[i+4>>2]|0,f[c>>2]|0,0)|0;i=a+48|0;j=vl(o|0,H|0,f[i>>2]|0,f[i+4>>2]|0)|0;i=r+j|0;j=0;while(1){b[g+j>>0]=f[i>>2];j=j+1|0;r=b[m>>0]|0;if((j|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){x=r;break}else i=i+8|0}}else x=k;i=x<<24>>24;if(x<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+i|0,0,(e<<24>>24)-i|0)|0;h=1;return h|0}case 8:{i=a+24|0;j=b[i>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){m=f[f[a>>2]>>2]|0;l=a+40|0;r=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;o=vl(r|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=m+o|0;o=0;while(1){b[g+o>>0]=f[l>>2];o=o+1|0;m=b[i>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){y=m;break}else l=l+8|0}}else y=j;l=y<<24>>24;if(y<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+l|0,0,(e<<24>>24)-l|0)|0;h=1;return h|0}case 9:{l=a+24|0;o=b[l>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){i=f[f[a>>2]>>2]|0;k=a+40|0;m=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;r=vl(m|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=i+r|0;r=0;while(1){i=~~_(n[k>>2])&255;b[g+r>>0]=i;r=r+1|0;i=b[l>>0]|0;if((r|0)>=((i<<24>>24>e<<24>>24?e:i)<<24>>24|0)){z=i;break}else k=k+4|0}}else z=o;k=z<<24>>24;if(z<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+k|0,0,(e<<24>>24)-k|0)|0;h=1;return h|0}case 10:{k=a+24|0;r=b[k>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){l=f[f[a>>2]>>2]|0;j=a+40|0;i=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;m=vl(i|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=l+m|0;m=0;while(1){b[g+m>>0]=~~+p[j>>3];m=m+1|0;l=b[k>>0]|0;if((m|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){A=l;break}else j=j+8|0}}else A=r;j=A<<24>>24;if(A<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+j|0,0,(e<<24>>24)-j|0)|0;h=1;return h|0}case 11:{j=a+24|0;m=b[j>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){k=f[f[a>>2]>>2]|0;o=a+40|0;l=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;i=vl(l|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=k+i|0;i=0;while(1){b[g+i>>0]=b[o>>0]|0;i=i+1|0;k=b[j>>0]|0;if((i|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){B=k;break}else o=o+1|0}}else B=m;o=B<<24>>24;if(B<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+o|0,0,(e<<24>>24)-o|0)|0;h=1;return h|0}default:{h=0;return h|0}}while(0);return 0}function Fb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!g){h=0;return h|0}do switch(f[a+28>>2]|0){case 1:{i=a+24|0;j=b[i>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){k=f[f[a>>2]>>2]|0;l=a+40|0;m=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;o=vl(m|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=k+o|0;o=0;while(1){b[g+o>>0]=b[l>>0]|0;o=o+1|0;k=b[i>>0]|0;if((o|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){q=k;break}else l=l+1|0}}else q=j;l=q<<24>>24;if(q<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+l|0,0,(e<<24>>24)-l|0)|0;h=1;return h|0}case 2:{l=a+24|0;o=b[l>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){i=f[f[a>>2]>>2]|0;k=a+40|0;m=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;r=vl(m|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=i+r|0;r=0;while(1){b[g+r>>0]=b[k>>0]|0;r=r+1|0;i=b[l>>0]|0;if((r|0)>=((i<<24>>24>e<<24>>24?e:i)<<24>>24|0)){s=i;break}else k=k+1|0}}else s=o;k=s<<24>>24;if(s<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+k|0,0,(e<<24>>24)-k|0)|0;h=1;return h|0}case 3:{k=a+24|0;r=b[k>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){l=f[f[a>>2]>>2]|0;j=a+40|0;i=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;m=vl(i|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=l+m|0;m=0;while(1){b[g+m>>0]=d[j>>1];m=m+1|0;l=b[k>>0]|0;if((m|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){t=l;break}else j=j+2|0}}else t=r;j=t<<24>>24;if(t<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+j|0,0,(e<<24>>24)-j|0)|0;h=1;return h|0}case 4:{j=a+24|0;m=b[j>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){k=f[f[a>>2]>>2]|0;o=a+40|0;l=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;i=vl(l|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=k+i|0;i=0;while(1){b[g+i>>0]=d[o>>1];i=i+1|0;k=b[j>>0]|0;if((i|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){u=k;break}else o=o+2|0}}else u=m;o=u<<24>>24;if(u<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+o|0,0,(e<<24>>24)-o|0)|0;h=1;return h|0}case 5:{o=a+24|0;i=b[o>>0]|0;if((i<<24>>24>e<<24>>24?e:i)<<24>>24>0){j=f[f[a>>2]>>2]|0;r=a+40|0;k=Bk(f[r>>2]|0,f[r+4>>2]|0,f[c>>2]|0,0)|0;r=a+48|0;l=vl(k|0,H|0,f[r>>2]|0,f[r+4>>2]|0)|0;r=j+l|0;l=0;while(1){b[g+l>>0]=f[r>>2];l=l+1|0;j=b[o>>0]|0;if((l|0)>=((j<<24>>24>e<<24>>24?e:j)<<24>>24|0)){v=j;break}else r=r+4|0}}else v=i;r=v<<24>>24;if(v<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+r|0,0,(e<<24>>24)-r|0)|0;h=1;return h|0}case 6:{r=a+24|0;l=b[r>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){o=f[f[a>>2]>>2]|0;m=a+40|0;j=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;k=vl(j|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=o+k|0;k=0;while(1){b[g+k>>0]=f[m>>2];k=k+1|0;o=b[r>>0]|0;if((k|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){w=o;break}else m=m+4|0}}else w=l;m=w<<24>>24;if(w<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+m|0,0,(e<<24>>24)-m|0)|0;h=1;return h|0}case 7:{m=a+24|0;k=b[m>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){r=f[f[a>>2]>>2]|0;i=a+40|0;o=Bk(f[i>>2]|0,f[i+4>>2]|0,f[c>>2]|0,0)|0;i=a+48|0;j=vl(o|0,H|0,f[i>>2]|0,f[i+4>>2]|0)|0;i=r+j|0;j=0;while(1){b[g+j>>0]=f[i>>2];j=j+1|0;r=b[m>>0]|0;if((j|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){x=r;break}else i=i+8|0}}else x=k;i=x<<24>>24;if(x<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+i|0,0,(e<<24>>24)-i|0)|0;h=1;return h|0}case 8:{i=a+24|0;j=b[i>>0]|0;if((j<<24>>24>e<<24>>24?e:j)<<24>>24>0){m=f[f[a>>2]>>2]|0;l=a+40|0;r=Bk(f[l>>2]|0,f[l+4>>2]|0,f[c>>2]|0,0)|0;l=a+48|0;o=vl(r|0,H|0,f[l>>2]|0,f[l+4>>2]|0)|0;l=m+o|0;o=0;while(1){b[g+o>>0]=f[l>>2];o=o+1|0;m=b[i>>0]|0;if((o|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){y=m;break}else l=l+8|0}}else y=j;l=y<<24>>24;if(y<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+l|0,0,(e<<24>>24)-l|0)|0;h=1;return h|0}case 9:{l=a+24|0;o=b[l>>0]|0;if((o<<24>>24>e<<24>>24?e:o)<<24>>24>0){i=f[f[a>>2]>>2]|0;k=a+40|0;m=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;r=vl(m|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=i+r|0;r=0;while(1){i=~~_(n[k>>2]);b[g+r>>0]=i;r=r+1|0;i=b[l>>0]|0;if((r|0)>=((i<<24>>24>e<<24>>24?e:i)<<24>>24|0)){z=i;break}else k=k+4|0}}else z=o;k=z<<24>>24;if(z<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+k|0,0,(e<<24>>24)-k|0)|0;h=1;return h|0}case 10:{k=a+24|0;r=b[k>>0]|0;if((r<<24>>24>e<<24>>24?e:r)<<24>>24>0){l=f[f[a>>2]>>2]|0;j=a+40|0;i=Bk(f[j>>2]|0,f[j+4>>2]|0,f[c>>2]|0,0)|0;j=a+48|0;m=vl(i|0,H|0,f[j>>2]|0,f[j+4>>2]|0)|0;j=l+m|0;m=0;while(1){b[g+m>>0]=~~+p[j>>3];m=m+1|0;l=b[k>>0]|0;if((m|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){A=l;break}else j=j+8|0}}else A=r;j=A<<24>>24;if(A<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+j|0,0,(e<<24>>24)-j|0)|0;h=1;return h|0}case 11:{j=a+24|0;m=b[j>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){k=f[f[a>>2]>>2]|0;o=a+40|0;l=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;i=vl(l|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=k+i|0;i=0;while(1){b[g+i>>0]=b[o>>0]|0;i=i+1|0;k=b[j>>0]|0;if((i|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){B=k;break}else o=o+1|0}}else B=m;o=B<<24>>24;if(B<<24>>24>=e<<24>>24){h=1;return h|0}oh(g+o|0,0,(e<<24>>24)-o|0)|0;h=1;return h|0}default:{h=0;return h|0}}while(0);return 0}function Gb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;c=u;u=u+48|0;d=c+24|0;e=c+12|0;g=c;h=a+4|0;i=f[(f[h>>2]|0)+44>>2]|0;j=a+8|0;k=f[j>>2]|0;l=((f[k+4>>2]|0)-(f[k>>2]|0)>>2>>>0)/3|0;k=i+96|0;m=i+100|0;f[d>>2]=0;f[d+4>>2]=0;f[d+8>>2]=0;i=f[k>>2]|0;n=((f[m>>2]|0)-i|0)/12|0;if(l>>>0<=n>>>0){if(l>>>0<n>>>0)f[m>>2]=i+(l*12|0)}else lf(k,l-n|0,d);n=a+216|0;l=a+220|0;if((f[n>>2]|0)==(f[l>>2]|0)){k=f[h>>2]|0;i=f[k+44>>2]|0;m=f[i+100>>2]|0;o=f[i+96>>2]|0;if((m|0)!=(o|0)){i=d+4|0;p=d+8|0;q=o;r=(m-o|0)/12|0;o=0;do{f[d>>2]=0;f[d+4>>2]=0;f[d+8>>2]=0;m=o*3|0;if((m|0)!=-1){s=f[(f[f[j>>2]>>2]|0)+(m<<2)>>2]|0;f[d>>2]=s;t=m+1|0;if((t|0)==-1){f[i>>2]=-1;v=0;w=s;x=77}else{y=t;z=s;x=76}}else{f[d>>2]=-1;y=0;z=-1;x=76}if((x|0)==76){x=0;f[i>>2]=f[(f[f[j>>2]>>2]|0)+(y<<2)>>2];s=m+2|0;if((s|0)==-1){A=-1;B=z}else{v=s;w=z;x=77}}if((x|0)==77){x=0;A=f[(f[f[j>>2]>>2]|0)+(v<<2)>>2]|0;B=w}f[p>>2]=A;f[q+(o*12|0)>>2]=B;f[q+(o*12|0)+4>>2]=f[i>>2];f[q+(o*12|0)+8>>2]=f[p>>2];o=o+1|0}while(o>>>0<r>>>0)}f[(f[k+4>>2]|0)+80>>2]=b;C=1;u=c;return C|0}f[d>>2]=0;b=d+4|0;f[b>>2]=0;k=d+8|0;f[k>>2]=0;r=f[j>>2]|0;o=(f[r+4>>2]|0)-(f[r>>2]|0)|0;p=o>>2;f[e>>2]=0;q=e+4|0;f[q>>2]=0;i=e+8|0;f[i>>2]=0;do if(o|0)if(p>>>0>1073741823)$n(e);else{B=wk(o)|0;f[e>>2]=B;A=B+(p<<2)|0;f[i>>2]=A;oh(B|0,0,o|0)|0;f[q>>2]=A;break}while(0);a:do if(((f[r+28>>2]|0)-(f[r+24>>2]|0)|0)>0){o=a+120|0;i=0;p=r;while(1){A=f[(f[p+24>>2]|0)+(i<<2)>>2]|0;b:do if((A|0)!=-1){c:do if((f[(f[o>>2]|0)+(i>>>5<<2)>>2]&1<<(i&31)|0)==0?(B=f[l>>2]|0,w=f[n>>2]|0,v=w,(B|0)!=(w|0)):0){z=(((A>>>0)%3|0|0)==0?2:-1)+A|0;y=p+12|0;s=(B-w|0)/144|0;if((z|0)==-1){w=0;while(1){B=f[(f[f[v+(w*144|0)+68>>2]>>2]|0)+(A<<2)>>2]|0;if(1<<(B&31)&f[(f[v+(w*144|0)+16>>2]|0)+(B>>>5<<2)>>2]|0){D=0;break a}w=w+1|0;if(w>>>0>=s>>>0){E=A;break c}}}w=0;while(1){B=f[(f[f[v+(w*144|0)+68>>2]>>2]|0)+(A<<2)>>2]|0;if(1<<(B&31)&f[(f[v+(w*144|0)+16>>2]|0)+(B>>>5<<2)>>2]|0){B=f[v+(w*144|0)+32>>2]|0;m=f[B+(A<<2)>>2]|0;t=f[y>>2]|0;F=f[t+(z<<2)>>2]|0;do if((F|0)!=-1)if(!((F>>>0)%3|0)){G=F+2|0;break}else{G=F+-1|0;break}else G=-1;while(0);if((G|0)!=(A|0)){F=G;while(1){if((F|0)==-1){D=0;break a}if((f[B+(F<<2)>>2]|0)!=(m|0)){E=F;break c}H=(((F>>>0)%3|0|0)==0?2:-1)+F|0;do if((H|0)!=-1){I=f[t+(H<<2)>>2]|0;if((I|0)==-1){J=-1;break}if(!((I>>>0)%3|0)){J=I+2|0;break}else{J=I+-1|0;break}}else J=-1;while(0);if((J|0)==(A|0))break;else F=J}}}w=w+1|0;if(w>>>0>=s>>>0){E=A;break}}}else E=A;while(0);s=f[b>>2]|0;f[(f[e>>2]|0)+(E<<2)>>2]=s-(f[d>>2]|0)>>2;f[g>>2]=E;w=s;if((f[k>>2]|0)>>>0>w>>>0){f[w>>2]=E;f[b>>2]=w+4;K=p}else{Ng(d,g);K=f[j>>2]|0}if((((E|0)!=-1?(w=(((E>>>0)%3|0|0)==0?2:-1)+E|0,(w|0)!=-1):0)?(s=f[(f[K+12>>2]|0)+(w<<2)>>2]|0,(s|0)!=-1):0)?(w=s+(((s>>>0)%3|0|0)==0?2:-1)|0,(w|0)!=-1&(w|0)!=(E|0)):0){s=E;z=w;w=K;while(1){y=f[l>>2]|0;v=f[n>>2]|0;F=v;d:do if((y|0)==(v|0))x=59;else{t=(y-v|0)/144|0;m=0;while(1){B=f[F+(m*144|0)+32>>2]|0;m=m+1|0;if((f[B+(z<<2)>>2]|0)!=(f[B+(s<<2)>>2]|0))break;if(m>>>0>=t>>>0){x=59;break d}}t=f[b>>2]|0;f[(f[e>>2]|0)+(z<<2)>>2]=t-(f[d>>2]|0)>>2;f[g>>2]=z;m=t;if((f[k>>2]|0)>>>0>m>>>0){f[m>>2]=z;f[b>>2]=m+4;L=w}else{Ng(d,g);L=f[j>>2]|0}M=L}while(0);if((x|0)==59){x=0;F=f[e>>2]|0;f[F+(z<<2)>>2]=f[F+(s<<2)>>2];M=w}if((z|0)==-1){N=M;break b}F=(((z>>>0)%3|0|0)==0?2:-1)+z|0;if((F|0)==-1){N=M;break b}v=f[(f[M+12>>2]|0)+(F<<2)>>2]|0;if((v|0)==-1){N=M;break b}F=v+(((v>>>0)%3|0|0)==0?2:-1)|0;if((F|0)!=-1&(F|0)!=(E|0)){v=z;z=F;w=M;s=v}else{N=M;break}}}else N=K}else N=p;while(0);i=i+1|0;if((i|0)>=((f[N+28>>2]|0)-(f[N+24>>2]|0)>>2|0)){x=65;break}else p=N}}else x=65;while(0);if((x|0)==65){x=f[h>>2]|0;h=f[x+44>>2]|0;N=f[h+100>>2]|0;K=f[h+96>>2]|0;if((N|0)!=(K|0)?(h=f[e>>2]|0,M=g+4|0,E=g+8|0,L=(N-K|0)/12|0,f[g>>2]=f[h>>2],f[g+4>>2]=f[h+4>>2],f[g+8>>2]=f[h+8>>2],N=K,f[N>>2]=f[g>>2],f[N+4>>2]=f[M>>2],f[N+8>>2]=f[E>>2],L>>>0>1):0){K=1;do{j=h+(K*3<<2)|0;f[g>>2]=f[j>>2];f[g+4>>2]=f[j+4>>2];f[g+8>>2]=f[j+8>>2];f[N+(K*12|0)>>2]=f[g>>2];f[N+(K*12|0)+4>>2]=f[M>>2];f[N+(K*12|0)+8>>2]=f[E>>2];K=K+1|0}while(K>>>0<L>>>0)}f[(f[x+4>>2]|0)+80>>2]=(f[b>>2]|0)-(f[d>>2]|0)>>2;D=1}x=f[e>>2]|0;if(x|0){f[q>>2]=x;Ko(x)}x=f[d>>2]|0;if(x|0){f[b>>2]=x;Ko(x)}C=D;u=c;return C|0}function Hb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;c=u;u=u+16|0;d=c+8|0;e=c;g=f[b>>2]|0;if((g|0)==-1){h=1;u=c;return h|0}i=(g>>>0)/3|0;j=a+12|0;if(f[(f[j>>2]|0)+(i>>>5<<2)>>2]&1<<(i&31)|0){h=1;u=c;return h|0}i=a+56|0;k=f[i>>2]|0;l=a+60|0;f[l>>2]=k;m=k;k=a+64|0;if((f[k>>2]|0)==(m|0))Ng(i,b);else{f[m>>2]=g;f[l>>2]=m+4}m=f[a>>2]|0;g=f[b>>2]|0;n=g+1|0;do if((g|0)!=-1){o=f[m+28>>2]|0;p=f[o+((((n>>>0)%3|0|0)==0?g+-2|0:n)<<2)>>2]|0;if(!((g>>>0)%3|0)){q=p;r=g+2|0;s=o;break}else{q=p;r=g+-1|0;s=o;break}}else{o=f[m+28>>2]|0;q=f[o+-4>>2]|0;r=-1;s=o}while(0);m=f[s+(r<<2)>>2]|0;if((q|0)==-1|(m|0)==-1){h=0;u=c;return h|0}r=a+24|0;s=f[r>>2]|0;g=s+(q>>>5<<2)|0;n=1<<(q&31);o=f[g>>2]|0;if(!(o&n)){f[g>>2]=o|n;n=f[b>>2]|0;o=n+1|0;if((n|0)==-1)t=-1;else t=((o>>>0)%3|0|0)==0?n+-2|0:o;f[e>>2]=t;o=(t>>>0)/3|0;n=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(o*12|0)+(t-(o*3|0)<<2)>>2]|0;o=f[a+48>>2]|0;f[d>>2]=n;t=f[o+4>>2]|0;o=t+4|0;g=f[o>>2]|0;if((g|0)==(f[t+8>>2]|0))Ng(t,d);else{f[g>>2]=n;f[o>>2]=g+4}g=a+40|0;o=f[g>>2]|0;n=o+4|0;t=f[n>>2]|0;if((t|0)==(f[o+8>>2]|0)){Ng(o,e);v=f[g>>2]|0}else{f[t>>2]=f[e>>2];f[n>>2]=t+4;v=o}o=v+24|0;f[(f[v+12>>2]|0)+(q<<2)>>2]=f[o>>2];f[o>>2]=(f[o>>2]|0)+1;w=f[r>>2]|0}else w=s;s=w+(m>>>5<<2)|0;w=1<<(m&31);o=f[s>>2]|0;if(!(o&w)){f[s>>2]=o|w;w=f[b>>2]|0;do if((w|0)!=-1)if(!((w>>>0)%3|0)){x=w+2|0;break}else{x=w+-1|0;break}else x=-1;while(0);f[e>>2]=x;w=(x>>>0)/3|0;o=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(w*12|0)+(x-(w*3|0)<<2)>>2]|0;w=f[a+48>>2]|0;f[d>>2]=o;x=f[w+4>>2]|0;w=x+4|0;s=f[w>>2]|0;if((s|0)==(f[x+8>>2]|0))Ng(x,d);else{f[s>>2]=o;f[w>>2]=s+4}s=a+40|0;w=f[s>>2]|0;o=w+4|0;x=f[o>>2]|0;if((x|0)==(f[w+8>>2]|0)){Ng(w,e);y=f[s>>2]|0}else{f[x>>2]=f[e>>2];f[o>>2]=x+4;y=w}w=y+24|0;f[(f[y+12>>2]|0)+(m<<2)>>2]=f[w>>2];f[w>>2]=(f[w>>2]|0)+1}w=f[l>>2]|0;if((f[i>>2]|0)==(w|0)){h=1;u=c;return h|0}m=a+44|0;y=a+48|0;x=a+40|0;o=w;a:while(1){w=o+-4|0;s=f[w>>2]|0;f[b>>2]=s;q=(s>>>0)/3|0;if((s|0)!=-1?(s=(f[j>>2]|0)+(q>>>5<<2)|0,v=1<<(q&31),q=f[s>>2]|0,(q&v|0)==0):0){f[s>>2]=q|v;v=f[a>>2]|0;q=f[b>>2]|0;s=f[(f[v+28>>2]|0)+(q<<2)>>2]|0;if((s|0)==-1){h=0;z=78;break}t=s;s=v;v=q;b:while(1){q=(f[r>>2]|0)+(t>>>5<<2)|0;n=1<<(t&31);g=f[q>>2]|0;if(!(g&n)){p=f[(f[s+40>>2]|0)+(t<<2)>>2]|0;if((p|0)==-1)A=1;else{B=f[(f[f[s+64>>2]>>2]|0)+(p<<2)>>2]|0;A=(1<<(B&31)&f[(f[s+12>>2]|0)+(B>>>5<<2)>>2]|0)!=0}f[q>>2]=g|n;n=f[b>>2]|0;f[e>>2]=n;g=(n>>>0)/3|0;q=f[(f[(f[m>>2]|0)+96>>2]|0)+(g*12|0)+(n-(g*3|0)<<2)>>2]|0;g=f[y>>2]|0;f[d>>2]=q;n=f[g+4>>2]|0;g=n+4|0;B=f[g>>2]|0;if((B|0)==(f[n+8>>2]|0))Ng(n,d);else{f[B>>2]=q;f[g>>2]=B+4}B=f[x>>2]|0;g=B+4|0;q=f[g>>2]|0;if((q|0)==(f[B+8>>2]|0)){Ng(B,e);C=f[x>>2]|0}else{f[q>>2]=f[e>>2];f[g>>2]=q+4;C=B}B=C+24|0;f[(f[C+12>>2]|0)+(t<<2)>>2]=f[B>>2];f[B>>2]=(f[B>>2]|0)+1;B=f[a>>2]|0;q=f[b>>2]|0;if(A){D=q;E=B;z=55}else{g=q+1|0;do if((q|0)==-1)F=-1;else{n=((g>>>0)%3|0|0)==0?q+-2|0:g;if((n|0)==-1){F=-1;break}if(f[(f[B>>2]|0)+(n>>>5<<2)>>2]&1<<(n&31)|0){F=-1;break}F=f[(f[(f[B+64>>2]|0)+12>>2]|0)+(n<<2)>>2]|0}while(0);f[b>>2]=F;G=(F>>>0)/3|0}}else{D=v;E=s;z=55}if((z|0)==55){z=0;B=D+1|0;if((D|0)==-1){z=59;break}g=((B>>>0)%3|0|0)==0?D+-2|0:B;if((g|0)!=-1?(f[(f[E>>2]|0)+(g>>>5<<2)>>2]&1<<(g&31)|0)==0:0)H=f[(f[(f[E+64>>2]|0)+12>>2]|0)+(g<<2)>>2]|0;else H=-1;f[d>>2]=H;g=(((D>>>0)%3|0|0)==0?2:-1)+D|0;do if((g|0)==-1)I=-1;else{if(f[(f[E>>2]|0)+(g>>>5<<2)>>2]&1<<(g&31)|0){I=-1;break}I=f[(f[(f[E+64>>2]|0)+12>>2]|0)+(g<<2)>>2]|0}while(0);g=(H|0)==-1;B=(H>>>0)/3|0;q=g?-1:B;n=(I|0)==-1;p=(I>>>0)/3|0;J=n?-1:p;do if(!g){K=f[j>>2]|0;if(f[K+(q>>>5<<2)>>2]&1<<(q&31)|0){z=65;break}if(n){L=B;M=H;break}if(!(f[K+(J>>>5<<2)>>2]&1<<(J&31))){z=70;break b}else{L=B;M=H}}else z=65;while(0);if((z|0)==65){z=0;if(n){z=67;break}if(!(f[(f[j>>2]|0)+(J>>>5<<2)>>2]&1<<(J&31))){L=p;M=I}else{z=67;break}}f[b>>2]=M;G=L}B=(f[j>>2]|0)+(G>>>5<<2)|0;f[B>>2]=f[B>>2]|1<<(G&31);s=f[a>>2]|0;v=f[b>>2]|0;t=f[(f[s+28>>2]|0)+(v<<2)>>2]|0;if((t|0)==-1){h=0;z=78;break a}}do if((z|0)==59){z=0;f[d>>2]=-1;z=67}else if((z|0)==70){z=0;t=f[l>>2]|0;f[t+-4>>2]=I;if((t|0)==(f[k>>2]|0)){Ng(i,d);break}else{f[t>>2]=f[d>>2];f[l>>2]=t+4;break}}while(0);if((z|0)==67){z=0;f[l>>2]=(f[l>>2]|0)+-4}}else f[l>>2]=w;o=f[l>>2]|0;if((f[i>>2]|0)==(o|0)){h=1;z=78;break}}if((z|0)==78){u=c;return h|0}return 0}function Ib(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;c=u;u=u+16|0;d=c+8|0;e=c;g=f[b>>2]|0;if((g|0)==-1){h=1;u=c;return h|0}i=(g>>>0)/3|0;j=a+12|0;if(f[(f[j>>2]|0)+(i>>>5<<2)>>2]&1<<(i&31)|0){h=1;u=c;return h|0}i=a+56|0;k=f[i>>2]|0;l=a+60|0;f[l>>2]=k;m=k;k=a+64|0;if((f[k>>2]|0)==(m|0))Ng(i,b);else{f[m>>2]=g;f[l>>2]=m+4}m=f[a>>2]|0;g=f[b>>2]|0;n=g+1|0;if((g|0)==-1){h=0;u=c;return h|0}o=((n>>>0)%3|0|0)==0?g+-2|0:n;if((o|0)==-1)p=-1;else p=f[(f[m>>2]|0)+(o<<2)>>2]|0;o=(((g>>>0)%3|0|0)==0?2:-1)+g|0;if((o|0)==-1){h=0;u=c;return h|0}g=f[(f[m>>2]|0)+(o<<2)>>2]|0;if((p|0)==-1|(g|0)==-1){h=0;u=c;return h|0}o=a+24|0;m=f[o>>2]|0;n=m+(p>>>5<<2)|0;q=1<<(p&31);r=f[n>>2]|0;if(!(r&q)){f[n>>2]=r|q;q=f[b>>2]|0;r=q+1|0;if((q|0)==-1)s=-1;else s=((r>>>0)%3|0|0)==0?q+-2|0:r;f[e>>2]=s;r=(s>>>0)/3|0;q=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(r*12|0)+(s-(r*3|0)<<2)>>2]|0;r=f[a+48>>2]|0;f[d>>2]=q;s=f[r+4>>2]|0;r=s+4|0;n=f[r>>2]|0;if((n|0)==(f[s+8>>2]|0))Ng(s,d);else{f[n>>2]=q;f[r>>2]=n+4}n=a+40|0;r=f[n>>2]|0;q=r+4|0;s=f[q>>2]|0;if((s|0)==(f[r+8>>2]|0)){Ng(r,e);t=f[n>>2]|0}else{f[s>>2]=f[e>>2];f[q>>2]=s+4;t=r}r=t+24|0;f[(f[t+12>>2]|0)+(p<<2)>>2]=f[r>>2];f[r>>2]=(f[r>>2]|0)+1;v=f[o>>2]|0}else v=m;m=v+(g>>>5<<2)|0;v=1<<(g&31);r=f[m>>2]|0;if(!(r&v)){f[m>>2]=r|v;v=f[b>>2]|0;do if((v|0)!=-1)if(!((v>>>0)%3|0)){w=v+2|0;break}else{w=v+-1|0;break}else w=-1;while(0);f[e>>2]=w;v=(w>>>0)/3|0;r=f[(f[(f[a+44>>2]|0)+96>>2]|0)+(v*12|0)+(w-(v*3|0)<<2)>>2]|0;v=f[a+48>>2]|0;f[d>>2]=r;w=f[v+4>>2]|0;v=w+4|0;m=f[v>>2]|0;if((m|0)==(f[w+8>>2]|0))Ng(w,d);else{f[m>>2]=r;f[v>>2]=m+4}m=a+40|0;v=f[m>>2]|0;r=v+4|0;w=f[r>>2]|0;if((w|0)==(f[v+8>>2]|0)){Ng(v,e);x=f[m>>2]|0}else{f[w>>2]=f[e>>2];f[r>>2]=w+4;x=v}v=x+24|0;f[(f[x+12>>2]|0)+(g<<2)>>2]=f[v>>2];f[v>>2]=(f[v>>2]|0)+1}v=f[l>>2]|0;if((f[i>>2]|0)==(v|0)){h=1;u=c;return h|0}g=a+44|0;x=a+48|0;w=a+40|0;r=v;a:while(1){v=r+-4|0;m=f[v>>2]|0;f[b>>2]=m;p=(m>>>0)/3|0;if((m|0)!=-1?(m=(f[j>>2]|0)+(p>>>5<<2)|0,t=1<<(p&31),p=f[m>>2]|0,(p&t|0)==0):0){f[m>>2]=p|t;t=f[b>>2]|0;if((t|0)==-1){h=0;y=79;break}p=t;b:while(1){t=f[a>>2]|0;m=f[(f[t>>2]|0)+(p<<2)>>2]|0;if((m|0)==-1){h=0;y=79;break a}s=(f[o>>2]|0)+(m>>>5<<2)|0;q=1<<(m&31);n=f[s>>2]|0;do if(!(n&q)){z=f[(f[t+24>>2]|0)+(m<<2)>>2]|0;A=z+1|0;do if((z|0)!=-1){B=((A>>>0)%3|0|0)==0?z+-2|0:A;if((B|0)==-1){y=46;break}C=f[(f[t+12>>2]|0)+(B<<2)>>2]|0;B=C+1|0;if((C|0)==-1){y=46;break}if(((((B>>>0)%3|0|0)==0?C+-2|0:B)|0)!=-1)D=0;else y=46}else y=46;while(0);if((y|0)==46){y=0;D=1}f[s>>2]=n|q;A=f[b>>2]|0;f[e>>2]=A;z=(A>>>0)/3|0;B=f[(f[(f[g>>2]|0)+96>>2]|0)+(z*12|0)+(A-(z*3|0)<<2)>>2]|0;z=f[x>>2]|0;f[d>>2]=B;A=f[z+4>>2]|0;z=A+4|0;C=f[z>>2]|0;if((C|0)==(f[A+8>>2]|0))Ng(A,d);else{f[C>>2]=B;f[z>>2]=C+4}C=f[w>>2]|0;z=C+4|0;B=f[z>>2]|0;if((B|0)==(f[C+8>>2]|0)){Ng(C,e);E=f[w>>2]|0}else{f[B>>2]=f[e>>2];f[z>>2]=B+4;E=C}C=E+24|0;f[(f[E+12>>2]|0)+(m<<2)>>2]=f[C>>2];f[C>>2]=(f[C>>2]|0)+1;C=f[a>>2]|0;B=f[b>>2]|0;if(D)if((B|0)==-1){y=61;break b}else{F=B;G=C;y=59;break}do if((B|0)==-1)H=-1;else{z=B+1|0;A=((z>>>0)%3|0|0)==0?B+-2|0:z;if((A|0)==-1){H=-1;break}H=f[(f[C+12>>2]|0)+(A<<2)>>2]|0}while(0);f[b>>2]=H;I=(H>>>0)/3|0}else{F=p;G=t;y=59}while(0);if((y|0)==59){y=0;t=F+1|0;m=((t>>>0)%3|0|0)==0?F+-2|0:t;if((m|0)==-1)J=-1;else J=f[(f[G+12>>2]|0)+(m<<2)>>2]|0;f[d>>2]=J;m=(((F>>>0)%3|0|0)==0?2:-1)+F|0;if((m|0)==-1)K=-1;else K=f[(f[G+12>>2]|0)+(m<<2)>>2]|0;m=(J|0)==-1;t=(J>>>0)/3|0;q=m?-1:t;n=(K|0)==-1;s=(K>>>0)/3|0;C=n?-1:s;do if(!m){B=f[j>>2]|0;if(f[B+(q>>>5<<2)>>2]&1<<(q&31)|0){y=66;break}if(n){L=t;M=J;break}if(!(f[B+(C>>>5<<2)>>2]&1<<(C&31))){y=71;break b}else{L=t;M=J}}else y=66;while(0);if((y|0)==66){y=0;if(n){y=68;break}if(!(f[(f[j>>2]|0)+(C>>>5<<2)>>2]&1<<(C&31))){L=s;M=K}else{y=68;break}}f[b>>2]=M;I=L}t=(f[j>>2]|0)+(I>>>5<<2)|0;f[t>>2]=f[t>>2]|1<<(I&31);p=f[b>>2]|0;if((p|0)==-1){h=0;y=79;break a}}do if((y|0)==61){y=0;f[d>>2]=-1;y=68}else if((y|0)==71){y=0;p=f[l>>2]|0;f[p+-4>>2]=K;if((p|0)==(f[k>>2]|0)){Ng(i,d);break}else{f[p>>2]=f[d>>2];f[l>>2]=p+4;break}}while(0);if((y|0)==68){y=0;f[l>>2]=(f[l>>2]|0)+-4}}else f[l>>2]=v;r=f[l>>2]|0;if((f[i>>2]|0)==(r|0)){h=1;y=79;break}}if((y|0)==79){u=c;return h|0}return 0}function Jb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;g=u;u=u+80|0;h=g+76|0;i=g+72|0;j=g+48|0;k=g+24|0;l=g;m=f[c>>2]|0;c=m+1|0;if((m|0)!=-1){n=((c>>>0)%3|0|0)==0?m+-2|0:c;c=(((m>>>0)%3|0|0)==0?2:-1)+m|0;m=f[a+32>>2]|0;if((n|0)==-1)o=-1;else o=f[(f[m>>2]|0)+(n<<2)>>2]|0;if((c|0)==-1){p=o;q=-1}else{p=o;q=f[(f[m>>2]|0)+(c<<2)>>2]|0}}else{p=-1;q=-1}c=f[a+36>>2]|0;m=f[c>>2]|0;o=(f[c+4>>2]|0)-m>>2;if(o>>>0<=p>>>0)$n(c);n=m;m=f[n+(p<<2)>>2]|0;if(o>>>0<=q>>>0)$n(c);c=f[n+(q<<2)>>2]|0;q=(m|0)<(e|0);do if(q&(c|0)<(e|0)){n=m<<1;o=f[d+(n<<2)>>2]|0;p=((o|0)<0)<<31>>31;r=f[d+((n|1)<<2)>>2]|0;n=((r|0)<0)<<31>>31;s=c<<1;t=f[d+(s<<2)>>2]|0;v=f[d+((s|1)<<2)>>2]|0;if(!((t|0)!=(o|0)|(v|0)!=(r|0))){f[a+8>>2]=o;f[a+12>>2]=r;w=1;u=g;return w|0}s=a+4|0;x=f[(f[s>>2]|0)+(e<<2)>>2]|0;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;f[j+12>>2]=0;f[j+16>>2]=0;f[j+20>>2]=0;y=f[a>>2]|0;if(!(b[y+84>>0]|0))z=f[(f[y+68>>2]|0)+(x<<2)>>2]|0;else z=x;f[i>>2]=z;x=b[y+24>>0]|0;f[h>>2]=f[i>>2];wb(y,h,x,j)|0;x=f[(f[s>>2]|0)+(m<<2)>>2]|0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=0;f[k+20>>2]=0;y=f[a>>2]|0;if(!(b[y+84>>0]|0))A=f[(f[y+68>>2]|0)+(x<<2)>>2]|0;else A=x;f[i>>2]=A;x=b[y+24>>0]|0;f[h>>2]=f[i>>2];wb(y,h,x,k)|0;x=f[(f[s>>2]|0)+(c<<2)>>2]|0;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;f[l+12>>2]=0;f[l+16>>2]=0;f[l+20>>2]=0;s=f[a>>2]|0;if(!(b[s+84>>0]|0))B=f[(f[s+68>>2]|0)+(x<<2)>>2]|0;else B=x;f[i>>2]=B;x=b[s+24>>0]|0;f[h>>2]=f[i>>2];wb(s,h,x,l)|0;x=l;s=k;y=f[s>>2]|0;C=f[s+4>>2]|0;s=wl(f[x>>2]|0,f[x+4>>2]|0,y|0,C|0)|0;x=H;D=l+8|0;E=k+8|0;F=f[E>>2]|0;G=f[E+4>>2]|0;E=wl(f[D>>2]|0,f[D+4>>2]|0,F|0,G|0)|0;D=H;I=l+16|0;J=k+16|0;K=f[J>>2]|0;L=f[J+4>>2]|0;J=wl(f[I>>2]|0,f[I+4>>2]|0,K|0,L|0)|0;I=H;M=Bk(s|0,x|0,s|0,x|0)|0;N=H;O=Bk(E|0,D|0,E|0,D|0)|0;P=vl(O|0,H|0,M|0,N|0)|0;N=H;M=Bk(J|0,I|0,J|0,I|0)|0;O=vl(P|0,N|0,M|0,H|0)|0;M=H;if((O|0)==0&(M|0)==0)break;N=j;P=wl(f[N>>2]|0,f[N+4>>2]|0,y|0,C|0)|0;C=H;y=j+8|0;N=wl(f[y>>2]|0,f[y+4>>2]|0,F|0,G|0)|0;G=H;F=j+16|0;y=wl(f[F>>2]|0,f[F+4>>2]|0,K|0,L|0)|0;L=H;K=Bk(P|0,C|0,s|0,x|0)|0;F=H;Q=Bk(N|0,G|0,E|0,D|0)|0;R=vl(Q|0,H|0,K|0,F|0)|0;F=H;K=Bk(y|0,L|0,J|0,I|0)|0;Q=vl(R|0,F|0,K|0,H|0)|0;K=H;F=wl(t|0,((t|0)<0)<<31>>31|0,o|0,p|0)|0;t=H;R=wl(v|0,((v|0)<0)<<31>>31|0,r|0,n|0)|0;v=H;S=Bk(O|0,M|0,o|0,p|0)|0;p=H;o=Bk(O|0,M|0,r|0,n|0)|0;n=H;r=Bk(Q|0,K|0,F|0,t|0)|0;T=H;U=Bk(Q|0,K|0,R|0,v|0)|0;V=H;W=vl(r|0,T|0,S|0,p|0)|0;p=H;S=vl(U|0,V|0,o|0,n|0)|0;n=H;o=Bk(Q|0,K|0,s|0,x|0)|0;x=H;s=Bk(Q|0,K|0,E|0,D|0)|0;D=H;E=Bk(Q|0,K|0,J|0,I|0)|0;I=H;J=ni(o|0,x|0,O|0,M|0)|0;x=H;o=ni(s|0,D|0,O|0,M|0)|0;D=H;s=ni(E|0,I|0,O|0,M|0)|0;I=H;E=wl(P|0,C|0,J|0,x|0)|0;x=H;J=wl(N|0,G|0,o|0,D|0)|0;D=H;o=wl(y|0,L|0,s|0,I|0)|0;I=H;s=Bk(E|0,x|0,E|0,x|0)|0;x=H;E=Bk(J|0,D|0,J|0,D|0)|0;D=vl(E|0,H|0,s|0,x|0)|0;x=H;s=Bk(o|0,I|0,o|0,I|0)|0;I=vl(D|0,x|0,s|0,H|0)|0;s=H;x=wl(0,0,F|0,t|0)|0;t=H;F=Bk(I|0,s|0,O|0,M|0)|0;s=H;switch(F|0){case 0:{if(!s){X=F;Y=s}else Z=23;break}case 1:{if(!s){_=F;$=s;Z=25}else Z=23;break}default:Z=23}if((Z|0)==23){I=1;D=0;o=F;E=s;while(1){J=rl(I|0,D|0,1)|0;L=H;y=o;o=xl(o|0,E|0,2)|0;if(!(E>>>0>0|(E|0)==0&y>>>0>7)){_=J;$=L;Z=25;break}else{I=J;D=L;E=H}}}if((Z|0)==25){E=_;D=$;while(1){I=ln(F|0,s|0,E|0,D|0)|0;o=vl(I|0,H|0,E|0,D|0)|0;I=xl(o|0,H|0,1)|0;o=H;L=Bk(I|0,o|0,I|0,o|0)|0;J=H;if(J>>>0>s>>>0|(J|0)==(s|0)&L>>>0>F>>>0){E=I;D=o}else{X=I;Y=o;break}}}D=Bk(X|0,Y|0,R|0,v|0)|0;E=H;F=Bk(X|0,Y|0,x|0,t|0)|0;s=H;o=a+20|0;I=f[o>>2]|0;if(!I)aa=0;else{L=I+-1|0;I=(f[(f[a+16>>2]|0)+(L>>>5<<2)>>2]&1<<(L&31)|0)==0;f[o>>2]=L;L=wl(0,0,F|0,s|0)|0;o=vl(S|0,n|0,(I?L:F)|0,(I?H:s)|0)|0;s=H;F=wl(0,0,D|0,E|0)|0;L=vl(W|0,p|0,(I?F:D)|0,(I?H:E)|0)|0;E=ni(L|0,H|0,O|0,M|0)|0;L=ni(o|0,s|0,O|0,M|0)|0;f[a+8>>2]=E;f[a+12>>2]=L;aa=1}w=aa;u=g;return w|0}while(0);do if(q)ba=m<<1;else{if((e|0)>0){ba=(e<<1)+-2|0;break}aa=a+8|0;f[aa>>2]=0;f[aa+4>>2]=0;w=1;u=g;return w|0}while(0);f[a+8>>2]=f[d+(ba<<2)>>2];f[a+12>>2]=f[d+(ba+1<<2)>>2];w=1;u=g;return w|0}function Kb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;g=u;u=u+80|0;h=g+76|0;i=g+72|0;j=g+48|0;k=g+24|0;l=g;m=a+32|0;n=f[c>>2]|0;c=n+1|0;do if((n|0)!=-1){o=((c>>>0)%3|0|0)==0?n+-2|0:c;if(!((n>>>0)%3|0)){p=n+2|0;q=o;break}else{p=n+-1|0;q=o;break}}else{p=-1;q=-1}while(0);n=f[(f[m>>2]|0)+28>>2]|0;m=f[n+(q<<2)>>2]|0;q=f[n+(p<<2)>>2]|0;p=f[a+36>>2]|0;n=f[p>>2]|0;c=(f[p+4>>2]|0)-n>>2;if(c>>>0<=m>>>0)$n(p);o=n;n=f[o+(m<<2)>>2]|0;if(c>>>0<=q>>>0)$n(p);p=f[o+(q<<2)>>2]|0;q=(n|0)<(e|0);do if(q&(p|0)<(e|0)){o=n<<1;c=f[d+(o<<2)>>2]|0;m=((c|0)<0)<<31>>31;r=f[d+((o|1)<<2)>>2]|0;o=((r|0)<0)<<31>>31;s=p<<1;t=f[d+(s<<2)>>2]|0;v=f[d+((s|1)<<2)>>2]|0;if(!((t|0)!=(c|0)|(v|0)!=(r|0))){f[a+8>>2]=c;f[a+12>>2]=r;w=1;u=g;return w|0}s=a+4|0;x=f[(f[s>>2]|0)+(e<<2)>>2]|0;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;f[j+12>>2]=0;f[j+16>>2]=0;f[j+20>>2]=0;y=f[a>>2]|0;if(!(b[y+84>>0]|0))z=f[(f[y+68>>2]|0)+(x<<2)>>2]|0;else z=x;f[i>>2]=z;x=b[y+24>>0]|0;f[h>>2]=f[i>>2];wb(y,h,x,j)|0;x=f[(f[s>>2]|0)+(n<<2)>>2]|0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=0;f[k+20>>2]=0;y=f[a>>2]|0;if(!(b[y+84>>0]|0))A=f[(f[y+68>>2]|0)+(x<<2)>>2]|0;else A=x;f[i>>2]=A;x=b[y+24>>0]|0;f[h>>2]=f[i>>2];wb(y,h,x,k)|0;x=f[(f[s>>2]|0)+(p<<2)>>2]|0;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;f[l+12>>2]=0;f[l+16>>2]=0;f[l+20>>2]=0;s=f[a>>2]|0;if(!(b[s+84>>0]|0))B=f[(f[s+68>>2]|0)+(x<<2)>>2]|0;else B=x;f[i>>2]=B;x=b[s+24>>0]|0;f[h>>2]=f[i>>2];wb(s,h,x,l)|0;x=l;s=k;y=f[s>>2]|0;C=f[s+4>>2]|0;s=wl(f[x>>2]|0,f[x+4>>2]|0,y|0,C|0)|0;x=H;D=l+8|0;E=k+8|0;F=f[E>>2]|0;G=f[E+4>>2]|0;E=wl(f[D>>2]|0,f[D+4>>2]|0,F|0,G|0)|0;D=H;I=l+16|0;J=k+16|0;K=f[J>>2]|0;L=f[J+4>>2]|0;J=wl(f[I>>2]|0,f[I+4>>2]|0,K|0,L|0)|0;I=H;M=Bk(s|0,x|0,s|0,x|0)|0;N=H;O=Bk(E|0,D|0,E|0,D|0)|0;P=vl(O|0,H|0,M|0,N|0)|0;N=H;M=Bk(J|0,I|0,J|0,I|0)|0;O=vl(P|0,N|0,M|0,H|0)|0;M=H;if((O|0)==0&(M|0)==0)break;N=j;P=wl(f[N>>2]|0,f[N+4>>2]|0,y|0,C|0)|0;C=H;y=j+8|0;N=wl(f[y>>2]|0,f[y+4>>2]|0,F|0,G|0)|0;G=H;F=j+16|0;y=wl(f[F>>2]|0,f[F+4>>2]|0,K|0,L|0)|0;L=H;K=Bk(P|0,C|0,s|0,x|0)|0;F=H;Q=Bk(N|0,G|0,E|0,D|0)|0;R=vl(Q|0,H|0,K|0,F|0)|0;F=H;K=Bk(y|0,L|0,J|0,I|0)|0;Q=vl(R|0,F|0,K|0,H|0)|0;K=H;F=wl(t|0,((t|0)<0)<<31>>31|0,c|0,m|0)|0;t=H;R=wl(v|0,((v|0)<0)<<31>>31|0,r|0,o|0)|0;v=H;S=Bk(O|0,M|0,c|0,m|0)|0;m=H;c=Bk(O|0,M|0,r|0,o|0)|0;o=H;r=Bk(Q|0,K|0,F|0,t|0)|0;T=H;U=Bk(Q|0,K|0,R|0,v|0)|0;V=H;W=vl(r|0,T|0,S|0,m|0)|0;m=H;S=vl(U|0,V|0,c|0,o|0)|0;o=H;c=Bk(Q|0,K|0,s|0,x|0)|0;x=H;s=Bk(Q|0,K|0,E|0,D|0)|0;D=H;E=Bk(Q|0,K|0,J|0,I|0)|0;I=H;J=ni(c|0,x|0,O|0,M|0)|0;x=H;c=ni(s|0,D|0,O|0,M|0)|0;D=H;s=ni(E|0,I|0,O|0,M|0)|0;I=H;E=wl(P|0,C|0,J|0,x|0)|0;x=H;J=wl(N|0,G|0,c|0,D|0)|0;D=H;c=wl(y|0,L|0,s|0,I|0)|0;I=H;s=Bk(E|0,x|0,E|0,x|0)|0;x=H;E=Bk(J|0,D|0,J|0,D|0)|0;D=vl(E|0,H|0,s|0,x|0)|0;x=H;s=Bk(c|0,I|0,c|0,I|0)|0;I=vl(D|0,x|0,s|0,H|0)|0;s=H;x=wl(0,0,F|0,t|0)|0;t=H;F=Bk(I|0,s|0,O|0,M|0)|0;s=H;switch(F|0){case 0:{if(!s){X=F;Y=s}else Z=22;break}case 1:{if(!s){_=F;$=s;Z=24}else Z=22;break}default:Z=22}if((Z|0)==22){I=1;D=0;c=F;E=s;while(1){J=rl(I|0,D|0,1)|0;L=H;y=c;c=xl(c|0,E|0,2)|0;if(!(E>>>0>0|(E|0)==0&y>>>0>7)){_=J;$=L;Z=24;break}else{I=J;D=L;E=H}}}if((Z|0)==24){E=_;D=$;while(1){I=ln(F|0,s|0,E|0,D|0)|0;c=vl(I|0,H|0,E|0,D|0)|0;I=xl(c|0,H|0,1)|0;c=H;L=Bk(I|0,c|0,I|0,c|0)|0;J=H;if(J>>>0>s>>>0|(J|0)==(s|0)&L>>>0>F>>>0){E=I;D=c}else{X=I;Y=c;break}}}D=Bk(X|0,Y|0,R|0,v|0)|0;E=H;F=Bk(X|0,Y|0,x|0,t|0)|0;s=H;c=a+20|0;I=f[c>>2]|0;if(!I)aa=0;else{L=I+-1|0;I=(f[(f[a+16>>2]|0)+(L>>>5<<2)>>2]&1<<(L&31)|0)==0;f[c>>2]=L;L=wl(0,0,F|0,s|0)|0;c=vl(S|0,o|0,(I?L:F)|0,(I?H:s)|0)|0;s=H;F=wl(0,0,D|0,E|0)|0;L=vl(W|0,m|0,(I?F:D)|0,(I?H:E)|0)|0;E=ni(L|0,H|0,O|0,M|0)|0;L=ni(c|0,s|0,O|0,M|0)|0;f[a+8>>2]=E;f[a+12>>2]=L;aa=1}w=aa;u=g;return w|0}while(0);do if(q)ba=n<<1;else{if((e|0)>0){ba=(e<<1)+-2|0;break}aa=a+8|0;f[aa>>2]=0;f[aa+4>>2]=0;w=1;u=g;return w|0}while(0);f[a+8>>2]=f[d+(ba<<2)>>2];f[a+12>>2]=f[d+(ba+1<<2)>>2];w=1;u=g;return w|0}function Lb(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=Ia,ca=Ia,da=Ia;c=u;u=u+32|0;d=c+12|0;e=c;g=a+60|0;if((f[g>>2]|0)==(f[a+64>>2]|0)?(f[a+48>>2]|0)==(f[a+52>>2]|0):0){h=1;u=c;return h|0}if((Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0)<=0){h=1;u=c;return h|0}i=d+4|0;j=d+8|0;k=a+36|0;l=d+8|0;m=d+4|0;o=e+4|0;p=e+8|0;q=d+11|0;r=d+4|0;s=0;t=0;v=0;a:while(1){w=La[f[(f[a>>2]|0)+20>>2]&127](a,v)|0;x=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;y=f[(f[(f[x>>2]|0)+8>>2]|0)+(w<<2)>>2]|0;w=y+28|0;b:do switch(f[w>>2]|0){case 1:case 3:case 5:{x=y+24|0;z=b[x>>0]|0;A=z<<24>>24;f[d>>2]=0;f[i>>2]=0;f[j>>2]=0;if(!(z<<24>>24))B=0;else{if(z<<24>>24<0){C=8;break a}z=A<<2;D=wk(z)|0;f[d>>2]=D;E=D+(A<<2)|0;f[j>>2]=E;oh(D|0,0,z|0)|0;f[i>>2]=E;B=b[x>>0]|0}E=B<<24>>24;f[e>>2]=0;f[o>>2]=0;f[p>>2]=0;if(B<<24>>24){if(B<<24>>24<0){C=12;break a}z=E<<2;D=wk(z)|0;f[e>>2]=D;A=D+(E<<2)|0;f[p>>2]=A;oh(D|0,0,z|0)|0;f[o>>2]=A}switch(f[w>>2]|0){case 5:{if(pe(a,y,t)|0)C=18;else{F=1;G=t}break}case 3:{if(oe(a,y,t)|0)C=18;else{F=1;G=t}break}case 1:{if(yd(a,y,t)|0)C=18;else{F=1;G=t}break}default:C=18}if((C|0)==18){C=0;F=0;G=t+(b[x>>0]|0)|0}x=f[e>>2]|0;if(x|0){f[o>>2]=x;Ko(x)}x=f[d>>2]|0;if(x|0){f[i>>2]=x;Ko(x)}if(!F){I=s;J=G}else{h=0;C=64;break a}break}case 9:{x=f[(f[g>>2]|0)+(s<<2)>>2]|0;A=f[k>>2]|0;z=s+1|0;D=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+40|0;E=f[D>>2]|0;D=f[y+56>>2]|0;K=wk(32)|0;f[d>>2]=K;f[l>>2]=-2147483616;f[m>>2]=24;L=K;M=11931;N=L+24|0;do{b[L>>0]=b[M>>0]|0;L=L+1|0;M=M+1|0}while((L|0)<(N|0));b[K+24>>0]=0;M=E+16|0;L=f[M>>2]|0;c:do if(L){N=M;O=L;do{P=(f[O+16>>2]|0)<(D|0);N=P?N:O;O=f[(P?O+4|0:O)>>2]|0}while((O|0)!=0);if(((N|0)!=(M|0)?(D|0)>=(f[N+16>>2]|0):0)?(O=N+20|0,P=f[N+24>>2]|0,(P|0)!=0):0){Q=P;while(1){P=Q+16|0;R=b[P+11>>0]|0;S=R<<24>>24<0;T=S?f[Q+20>>2]|0:R&255;R=T>>>0<24;U=R?T:24;V=(U|0)==0;if(!V?(W=S?f[P>>2]|0:P,X=Fi(K,W,U)|0,(X|0)!=0):0)if((X|0)<0)C=35;else{Y=W;C=38}else if(T>>>0<=24)if(V)C=39;else{Y=S?f[P>>2]|0:P;C=38}else C=35;if((C|0)==35){C=0;Z=Q}else if((C|0)==38){C=0;P=Fi(Y,K,U)|0;if(P)if((P|0)<0)C=41;else break;else C=39}if((C|0)==39){C=0;if(R)C=41;else break}if((C|0)==41){C=0;Z=Q+4|0}Q=f[Z>>2]|0;if(!Q){C=44;break c}}$=ci(O,d,0)|0}else C=44}else C=44;while(0);if((C|0)==44){C=0;$=ci(E,d,0)|0}if((b[q>>0]|0)<0)Ko(f[d>>2]|0);if($){ge(y,x);I=z;J=t;break b}K=f[A+(s*24|0)+4>>2]|0;D=b[y+24>>0]|0;M=D<<24>>24;L=M<<2;aa=Ho(M>>>0>1073741823?-1:M<<2)|0;dn(d);if(!(qk(d,_(n[A+(s*24|0)+20>>2]),(1<<K)+-1|0)|0)){C=63;break a}K=(f[f[x>>2]>>2]|0)+(f[x+48>>2]|0)|0;Q=x+80|0;d:do if(f[Q>>2]|0){N=y+64|0;R=A+(s*24|0)+8|0;if(D<<24>>24<=0){P=0;U=0;while(1){Bf((f[f[N>>2]>>2]|0)+U|0,aa|0,L|0)|0;P=P+1|0;if(P>>>0>=(f[Q>>2]|0)>>>0)break d;else U=U+L|0}}U=0;P=0;O=0;while(1){S=f[R>>2]|0;V=0;T=O;while(1){W=f[K+(T<<2)>>2]|0;if((W|0)>-1){ba=_(W|0);ca=_(_(n[r>>2])*ba);da=_(ca*_(n[d>>2]))}else{X=wl(0,0,W|0,((W|0)<0)<<31>>31|0)|0;ca=_(+(X>>>0)+4294967296.0*+(H|0));ba=_(_(n[r>>2])*ca);da=_(-_(ba*_(n[d>>2])))}ba=_(da+_(n[S+(V<<2)>>2]));n[aa+(V<<2)>>2]=ba;V=V+1|0;if((V|0)==(M|0))break;else T=T+1|0}Bf((f[f[N>>2]>>2]|0)+P|0,aa|0,L|0)|0;U=U+1|0;if(U>>>0>=(f[Q>>2]|0)>>>0)break;else{P=P+L|0;O=O+M|0}}}while(0);Io(aa);I=z;J=t;break}default:{I=s;J=t}}while(0);v=v+1|0;if((v|0)>=(Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0)){h=1;C=64;break}else{s=I;t=J}}if((C|0)==8)$n(d);else if((C|0)==12)$n(e);else if((C|0)==63){Io(aa);h=0;u=c;return h|0}else if((C|0)==64){u=c;return h|0}return 0}function Mb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;e=u;u=u+96|0;g=e+92|0;h=e+88|0;i=e+72|0;j=e+48|0;k=e+24|0;l=e;m=a+16|0;n=f[m>>2]|0;o=f[c>>2]|0;f[i>>2]=n;f[i+4>>2]=o;c=i+8|0;f[c>>2]=o;b[i+12>>0]=1;p=(o|0)==-1;if(p)q=-1;else q=f[(f[n>>2]|0)+(o<<2)>>2]|0;n=a+20|0;r=f[n>>2]|0;s=f[r>>2]|0;if((f[r+4>>2]|0)-s>>2>>>0<=q>>>0)$n(r);r=a+8|0;t=f[(f[r>>2]|0)+(f[s+(q<<2)>>2]<<2)>>2]|0;q=a+4|0;s=f[q>>2]|0;if(!(b[s+84>>0]|0))v=f[(f[s+68>>2]|0)+(t<<2)>>2]|0;else v=t;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;f[j+12>>2]=0;f[j+16>>2]=0;f[j+20>>2]=0;f[h>>2]=v;v=b[s+24>>0]|0;f[g>>2]=f[h>>2];wb(s,g,v,j)|0;v=a+28|0;a=(f[v>>2]|0)==0;do if(!p){s=o+1|0;t=((s>>>0)%3|0|0)==0?o+-2|0:s;s=k+8|0;w=j+8|0;x=k+16|0;y=j+16|0;z=l+8|0;A=l+16|0;B=o+(((o>>>0)%3|0|0)==0?2:-1)|0;C=0;D=0;E=0;F=0;G=0;I=0;J=a;K=o;while(1){do if(!J){L=K+1|0;M=((L>>>0)%3|0|0)==0?K+-2|0:L;if(!((K>>>0)%3|0)){N=K+2|0;O=M;break}else{N=K+-1|0;O=M;break}}else{N=B;O=t}while(0);if((O|0)==-1)P=-1;else P=f[(f[f[m>>2]>>2]|0)+(O<<2)>>2]|0;Q=f[n>>2]|0;M=f[Q>>2]|0;if((f[Q+4>>2]|0)-M>>2>>>0<=P>>>0){R=16;break}L=f[(f[r>>2]|0)+(f[M+(P<<2)>>2]<<2)>>2]|0;M=f[q>>2]|0;if(!(b[M+84>>0]|0))S=f[(f[M+68>>2]|0)+(L<<2)>>2]|0;else S=L;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=0;f[k+20>>2]=0;f[h>>2]=S;L=b[M+24>>0]|0;f[g>>2]=f[h>>2];wb(M,g,L,k)|0;if((N|0)==-1)T=-1;else T=f[(f[f[m>>2]>>2]|0)+(N<<2)>>2]|0;U=f[n>>2]|0;L=f[U>>2]|0;if((f[U+4>>2]|0)-L>>2>>>0<=T>>>0){R=22;break}M=f[(f[r>>2]|0)+(f[L+(T<<2)>>2]<<2)>>2]|0;L=f[q>>2]|0;if(!(b[L+84>>0]|0))V=f[(f[L+68>>2]|0)+(M<<2)>>2]|0;else V=M;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;f[l+12>>2]=0;f[l+16>>2]=0;f[l+20>>2]=0;f[h>>2]=V;M=b[L+24>>0]|0;f[g>>2]=f[h>>2];wb(L,g,M,l)|0;M=k;L=j;W=f[L>>2]|0;X=f[L+4>>2]|0;L=wl(f[M>>2]|0,f[M+4>>2]|0,W|0,X|0)|0;M=H;Y=s;Z=w;_=f[Z>>2]|0;$=f[Z+4>>2]|0;Z=wl(f[Y>>2]|0,f[Y+4>>2]|0,_|0,$|0)|0;Y=H;aa=x;ba=y;ca=f[ba>>2]|0;da=f[ba+4>>2]|0;ba=wl(f[aa>>2]|0,f[aa+4>>2]|0,ca|0,da|0)|0;aa=H;ea=l;fa=wl(f[ea>>2]|0,f[ea+4>>2]|0,W|0,X|0)|0;X=H;W=z;ea=wl(f[W>>2]|0,f[W+4>>2]|0,_|0,$|0)|0;$=H;_=A;W=wl(f[_>>2]|0,f[_+4>>2]|0,ca|0,da|0)|0;da=H;ca=Bk(W|0,da|0,Z|0,Y|0)|0;_=H;ga=Bk(ea|0,$|0,ba|0,aa|0)|0;ha=H;ia=Bk(fa|0,X|0,ba|0,aa|0)|0;aa=H;ba=Bk(W|0,da|0,L|0,M|0)|0;da=H;W=Bk(ea|0,$|0,L|0,M|0)|0;M=H;L=Bk(fa|0,X|0,Z|0,Y|0)|0;Y=H;Z=wl(C|0,D|0,ga|0,ha|0)|0;C=vl(Z|0,H|0,ca|0,_|0)|0;D=H;_=vl(ia|0,aa|0,E|0,F|0)|0;E=wl(_|0,H|0,ba|0,da|0)|0;F=H;da=wl(G|0,I|0,L|0,Y|0)|0;G=vl(da|0,H|0,W|0,M|0)|0;I=H;Tf(i);K=f[c>>2]|0;J=(f[v>>2]|0)==0;if((K|0)==-1){R=26;break}}if((R|0)==16)$n(Q);else if((R|0)==22)$n(U);else if((R|0)==26){K=wl(0,0,C|0,D|0)|0;if((D|0)>-1|(D|0)==-1&C>>>0>4294967295){ja=J;ka=C;la=D;ma=E;na=F;oa=G;pa=I;R=27;break}else{qa=J;ra=F;sa=E;ta=I;ua=G;va=K;wa=H;xa=C;ya=D;break}}}else{ja=a;ka=0;la=0;ma=0;na=0;oa=0;pa=0;R=27}while(0);if((R|0)==27){qa=ja;ra=na;sa=ma;ta=pa;ua=oa;va=ka;wa=la;xa=ka;ya=la}la=(ra|0)>-1|(ra|0)==-1&sa>>>0>4294967295;ka=wl(0,0,sa|0,ra|0)|0;oa=la?ra:H;pa=(ta|0)>-1|(ta|0)==-1&ua>>>0>4294967295;ma=wl(0,0,ua|0,ta|0)|0;na=vl((la?sa:ka)|0,oa|0,(pa?ua:ma)|0,(pa?ta:H)|0)|0;pa=vl(na|0,H|0,va|0,wa|0)|0;wa=H;if(qa){if((pa|0)<=536870912){za=xa;Aa=sa;Ba=ua;f[d>>2]=za;Ca=d+4|0;f[Ca>>2]=Aa;Da=d+8|0;f[Da>>2]=Ba;u=e;return}qa=xl(pa|0,wa|0,29)|0;va=qa&7;qa=ni(xa|0,ya|0,va|0,0)|0;na=ni(sa|0,ra|0,va|0,0)|0;ma=ni(ua|0,ta|0,va|0,0)|0;za=qa;Aa=na;Ba=ma;f[d>>2]=za;Ca=d+4|0;f[Ca>>2]=Aa;Da=d+8|0;f[Da>>2]=Ba;u=e;return}else{if(!((wa|0)>0|(wa|0)==0&pa>>>0>536870912)){za=xa;Aa=sa;Ba=ua;f[d>>2]=za;Ca=d+4|0;f[Ca>>2]=Aa;Da=d+8|0;f[Da>>2]=Ba;u=e;return}ma=xl(pa|0,wa|0,29)|0;wa=H;pa=ni(xa|0,ya|0,ma|0,wa|0)|0;ya=ni(sa|0,ra|0,ma|0,wa|0)|0;ra=ni(ua|0,ta|0,ma|0,wa|0)|0;za=pa;Aa=ya;Ba=ra;f[d>>2]=za;Ca=d+4|0;f[Ca>>2]=Aa;Da=d+8|0;f[Da>>2]=Ba;u=e;return}}function Nb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;d=u;u=u+32|0;e=d+20|0;g=d+8|0;i=d+4|0;j=d;k=a+4|0;do if((h[(f[k>>2]|0)+36>>0]<<8&65535)<512){l=c+8|0;m=f[l>>2]|0;n=f[l+4>>2]|0;l=c+16|0;o=l;p=f[o>>2]|0;q=vl(p|0,f[o+4>>2]|0,4,0)|0;o=H;if((n|0)<(o|0)|(n|0)==(o|0)&m>>>0<q>>>0){r=-1;u=d;return r|0}else{m=(f[c>>2]|0)+p|0;p=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;f[e>>2]=p;m=l;f[m>>2]=q;f[m+4>>2]=o;s=p;break}}else if(zh(e,c)|0){s=f[e>>2]|0;break}else{r=-1;u=d;return r|0}while(0);a:do if(s|0){p=f[a+8>>2]|0;if(s>>>0>(((f[p+4>>2]|0)-(f[p>>2]|0)>>2>>>0)/3|0)>>>0){r=-1;u=d;return r|0}p=f[k>>2]|0;if(((h[p+36>>0]<<8|h[p+37>>0])&65535)<258){p=c+8|0;o=c+16|0;m=g+4|0;q=g+8|0;l=a+40|0;n=a+44|0;t=a+36|0;v=0;w=s;while(1){x=p;y=f[x>>2]|0;z=f[x+4>>2]|0;x=o;A=f[x>>2]|0;B=f[x+4>>2]|0;x=vl(A|0,B|0,4,0)|0;C=H;if((z|0)<(C|0)|(z|0)==(C|0)&y>>>0<x>>>0)break;D=f[c>>2]|0;E=D+A|0;f[g>>2]=h[E>>0]|h[E+1>>0]<<8|h[E+2>>0]<<16|h[E+3>>0]<<24;E=o;f[E>>2]=x;f[E+4>>2]=C;C=vl(A|0,B|0,8,0)|0;E=H;if((z|0)<(E|0)|(z|0)==(E|0)&y>>>0<C>>>0)break;F=D+x|0;f[m>>2]=h[F>>0]|h[F+1>>0]<<8|h[F+2>>0]<<16|h[F+3>>0]<<24;F=o;f[F>>2]=C;f[F+4>>2]=E;if(!((z|0)>(E|0)|(z|0)==(E|0)&y>>>0>C>>>0))break;y=b[D+C>>0]|0;C=vl(A|0,B|0,9,0)|0;B=o;f[B>>2]=C;f[B+4>>2]=H;b[q>>0]=b[q>>0]&-2|y&1;y=f[l>>2]|0;if((y|0)==(f[n>>2]|0)){yg(t,g);G=f[e>>2]|0}else{f[y>>2]=f[g>>2];f[y+4>>2]=f[g+4>>2];f[y+8>>2]=f[g+8>>2];f[l>>2]=(f[l>>2]|0)+12;G=w}v=v+1|0;if(v>>>0>=G>>>0)break a;else w=G}r=-1;u=d;return r|0}w=g+4|0;v=a+40|0;l=a+44|0;t=a+36|0;n=0;q=0;do{zh(i,c)|0;f[w>>2]=(f[i>>2]|0)+q;zh(i,c)|0;o=f[i>>2]|0;q=f[w>>2]|0;if(q>>>0<o>>>0){I=36;break}f[g>>2]=q-o;o=f[v>>2]|0;if((o|0)==(f[l>>2]|0))yg(t,g);else{f[o>>2]=f[g>>2];f[o+4>>2]=f[g+4>>2];f[o+8>>2]=f[g+8>>2];f[v>>2]=(f[v>>2]|0)+12}n=n+1|0}while(n>>>0<(f[e>>2]|0)>>>0);if((I|0)==36){r=-1;u=d;return r|0}vf(c,0,0)|0;n=f[e>>2]|0;if(n|0){v=c+36|0;t=a+36|0;l=c+32|0;q=c+24|0;w=c+28|0;o=0;m=0;while(1){p=f[k>>2]|0;y=(b[v>>0]|0)==0;if(((h[p+36>>0]<<8|h[p+37>>0])&65535)<514)if(!y){p=f[l>>2]|0;B=f[q>>2]|0;C=f[w>>2]|0;A=B+(p>>>3)|0;if(A>>>0<C>>>0){D=(h[A>>0]|0)>>>(p&7)&1;E=p+1|0;f[l>>2]=E;J=D;K=B+(E>>>3)|0;L=E}else{J=0;K=A;L=p}if(K>>>0<C>>>0){f[l>>2]=L+1;M=J}else M=J}else M=m;else if(!y){y=f[l>>2]|0;C=(f[q>>2]|0)+(y>>>3)|0;if(C>>>0<(f[w>>2]|0)>>>0){p=(h[C>>0]|0)>>>(y&7)&1;f[l>>2]=y+1;M=p}else M=0}else M=m;p=(f[t>>2]|0)+(o*12|0)+8|0;b[p>>0]=b[p>>0]&-2|M&1;o=o+1|0;if(o>>>0>=n>>>0)break;else m=M}}Cj(c)}while(0);f[g>>2]=0;M=f[k>>2]|0;J=(h[M+36>>0]<<8|h[M+37>>0])&65535;if((J&65535)<512){M=c+8|0;L=f[M>>2]|0;K=f[M+4>>2]|0;M=c+16|0;e=M;G=f[e>>2]|0;s=vl(G|0,f[e+4>>2]|0,4,0)|0;e=H;if((K|0)<(e|0)|(K|0)==(e|0)&L>>>0<s>>>0)N=-1;else{L=(f[c>>2]|0)+G|0;G=h[L>>0]|h[L+1>>0]<<8|h[L+2>>0]<<16|h[L+3>>0]<<24;f[g>>2]=G;L=M;f[L>>2]=s;f[L+4>>2]=e;O=G;I=43}}else if(J<<16>>16==512)if(zh(g,c)|0){O=f[g>>2]|0;I=43}else N=-1;else I=57;b:do if((I|0)==43)if(!O)I=57;else{J=f[k>>2]|0;if(((h[J+36>>0]<<8|h[J+37>>0])&65535)>=258){J=a+52|0;G=a+56|0;e=a+48|0;L=0;s=0;while(1){f[i>>2]=0;zh(j,c)|0;s=(f[j>>2]|0)+s|0;f[i>>2]=s;M=f[J>>2]|0;if((M|0)==(f[G>>2]|0))Ng(e,i);else{f[M>>2]=s;f[J>>2]=M+4}L=L+1|0;if(L>>>0>=(f[g>>2]|0)>>>0){I=57;break b}}}L=c+8|0;J=c+16|0;s=a+52|0;e=a+56|0;G=a+48|0;M=0;while(1){f[i>>2]=0;K=L;m=f[K>>2]|0;n=f[K+4>>2]|0;K=J;o=f[K>>2]|0;t=vl(o|0,f[K+4>>2]|0,4,0)|0;K=H;if((n|0)<(K|0)|(n|0)==(K|0)&m>>>0<t>>>0)break;m=(f[c>>2]|0)+o|0;o=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;f[i>>2]=o;m=J;f[m>>2]=t;f[m+4>>2]=K;K=f[s>>2]|0;if((K|0)==(f[e>>2]|0))Ng(G,i);else{f[K>>2]=o;f[s>>2]=K+4}M=M+1|0;if(M>>>0>=(f[g>>2]|0)>>>0){I=57;break b}}N=-1}while(0);if((I|0)==57)N=f[c+16>>2]|0;r=N;u=d;return r|0}function Ob(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;e=u;u=u+96|0;g=e+92|0;h=e+88|0;i=e+72|0;j=e+48|0;k=e+24|0;l=e;m=a+16|0;n=f[m>>2]|0;o=f[c>>2]|0;f[i>>2]=n;f[i+4>>2]=o;c=i+8|0;f[c>>2]=o;b[i+12>>0]=1;p=f[(f[n+28>>2]|0)+(o<<2)>>2]|0;n=a+20|0;q=f[n>>2]|0;r=f[q>>2]|0;if((f[q+4>>2]|0)-r>>2>>>0<=p>>>0)$n(q);q=a+8|0;s=f[(f[q>>2]|0)+(f[r+(p<<2)>>2]<<2)>>2]|0;p=a+4|0;r=f[p>>2]|0;if(!(b[r+84>>0]|0))t=f[(f[r+68>>2]|0)+(s<<2)>>2]|0;else t=s;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;f[j+12>>2]=0;f[j+16>>2]=0;f[j+20>>2]=0;f[h>>2]=t;t=b[r+24>>0]|0;f[g>>2]=f[h>>2];wb(r,g,t,j)|0;t=a+28|0;a=(f[t>>2]|0)==0;do if((o|0)!=-1){r=o+1|0;s=((r>>>0)%3|0|0)==0?o+-2|0:r;r=k+8|0;v=j+8|0;w=k+16|0;x=j+16|0;y=l+8|0;z=l+16|0;A=o+(((o>>>0)%3|0|0)==0?2:-1)|0;B=0;C=0;D=0;E=0;F=0;G=0;I=a;J=o;while(1){do if(!I){K=J+1|0;L=((K>>>0)%3|0|0)==0?J+-2|0:K;if(!((J>>>0)%3|0)){M=J+2|0;N=L;break}else{M=J+-1|0;N=L;break}}else{M=A;N=s}while(0);L=f[(f[(f[m>>2]|0)+28>>2]|0)+(N<<2)>>2]|0;O=f[n>>2]|0;K=f[O>>2]|0;if((f[O+4>>2]|0)-K>>2>>>0<=L>>>0){P=12;break}Q=f[(f[q>>2]|0)+(f[K+(L<<2)>>2]<<2)>>2]|0;L=f[p>>2]|0;if(!(b[L+84>>0]|0))R=f[(f[L+68>>2]|0)+(Q<<2)>>2]|0;else R=Q;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=0;f[k+20>>2]=0;f[h>>2]=R;Q=b[L+24>>0]|0;f[g>>2]=f[h>>2];wb(L,g,Q,k)|0;Q=f[(f[(f[m>>2]|0)+28>>2]|0)+(M<<2)>>2]|0;S=f[n>>2]|0;L=f[S>>2]|0;if((f[S+4>>2]|0)-L>>2>>>0<=Q>>>0){P=16;break}K=f[(f[q>>2]|0)+(f[L+(Q<<2)>>2]<<2)>>2]|0;Q=f[p>>2]|0;if(!(b[Q+84>>0]|0))T=f[(f[Q+68>>2]|0)+(K<<2)>>2]|0;else T=K;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;f[l+12>>2]=0;f[l+16>>2]=0;f[l+20>>2]=0;f[h>>2]=T;K=b[Q+24>>0]|0;f[g>>2]=f[h>>2];wb(Q,g,K,l)|0;K=k;Q=j;L=f[Q>>2]|0;U=f[Q+4>>2]|0;Q=wl(f[K>>2]|0,f[K+4>>2]|0,L|0,U|0)|0;K=H;V=r;W=v;X=f[W>>2]|0;Y=f[W+4>>2]|0;W=wl(f[V>>2]|0,f[V+4>>2]|0,X|0,Y|0)|0;V=H;Z=w;_=x;$=f[_>>2]|0;aa=f[_+4>>2]|0;_=wl(f[Z>>2]|0,f[Z+4>>2]|0,$|0,aa|0)|0;Z=H;ba=l;ca=wl(f[ba>>2]|0,f[ba+4>>2]|0,L|0,U|0)|0;U=H;L=y;ba=wl(f[L>>2]|0,f[L+4>>2]|0,X|0,Y|0)|0;Y=H;X=z;L=wl(f[X>>2]|0,f[X+4>>2]|0,$|0,aa|0)|0;aa=H;$=Bk(L|0,aa|0,W|0,V|0)|0;X=H;da=Bk(ba|0,Y|0,_|0,Z|0)|0;ea=H;fa=Bk(ca|0,U|0,_|0,Z|0)|0;Z=H;_=Bk(L|0,aa|0,Q|0,K|0)|0;aa=H;L=Bk(ba|0,Y|0,Q|0,K|0)|0;K=H;Q=Bk(ca|0,U|0,W|0,V|0)|0;V=H;W=wl(B|0,C|0,da|0,ea|0)|0;B=vl(W|0,H|0,$|0,X|0)|0;C=H;X=vl(fa|0,Z|0,D|0,E|0)|0;D=wl(X|0,H|0,_|0,aa|0)|0;E=H;aa=wl(F|0,G|0,Q|0,V|0)|0;F=vl(aa|0,H|0,L|0,K|0)|0;G=H;kf(i);J=f[c>>2]|0;I=(f[t>>2]|0)==0;if((J|0)==-1){P=20;break}}if((P|0)==12)$n(O);else if((P|0)==16)$n(S);else if((P|0)==20){J=wl(0,0,B|0,C|0)|0;if((C|0)>-1|(C|0)==-1&B>>>0>4294967295){ga=I;ha=B;ia=C;ja=D;ka=E;la=F;ma=G;P=21;break}else{na=I;oa=E;pa=D;qa=G;ra=F;sa=J;ta=H;ua=B;va=C;break}}}else{ga=a;ha=0;ia=0;ja=0;ka=0;la=0;ma=0;P=21}while(0);if((P|0)==21){na=ga;oa=ka;pa=ja;qa=ma;ra=la;sa=ha;ta=ia;ua=ha;va=ia}ia=(oa|0)>-1|(oa|0)==-1&pa>>>0>4294967295;ha=wl(0,0,pa|0,oa|0)|0;la=ia?oa:H;ma=(qa|0)>-1|(qa|0)==-1&ra>>>0>4294967295;ja=wl(0,0,ra|0,qa|0)|0;ka=vl((ia?pa:ha)|0,la|0,(ma?ra:ja)|0,(ma?qa:H)|0)|0;ma=vl(ka|0,H|0,sa|0,ta|0)|0;ta=H;if(na){if((ma|0)<=536870912){wa=ua;xa=pa;ya=ra;f[d>>2]=wa;za=d+4|0;f[za>>2]=xa;Aa=d+8|0;f[Aa>>2]=ya;u=e;return}na=xl(ma|0,ta|0,29)|0;sa=na&7;na=ni(ua|0,va|0,sa|0,0)|0;ka=ni(pa|0,oa|0,sa|0,0)|0;ja=ni(ra|0,qa|0,sa|0,0)|0;wa=na;xa=ka;ya=ja;f[d>>2]=wa;za=d+4|0;f[za>>2]=xa;Aa=d+8|0;f[Aa>>2]=ya;u=e;return}else{if(!((ta|0)>0|(ta|0)==0&ma>>>0>536870912)){wa=ua;xa=pa;ya=ra;f[d>>2]=wa;za=d+4|0;f[za>>2]=xa;Aa=d+8|0;f[Aa>>2]=ya;u=e;return}ja=xl(ma|0,ta|0,29)|0;ta=H;ma=ni(ua|0,va|0,ja|0,ta|0)|0;va=ni(pa|0,oa|0,ja|0,ta|0)|0;oa=ni(ra|0,qa|0,ja|0,ta|0)|0;wa=ma;xa=va;ya=oa;f[d>>2]=wa;za=d+4|0;f[za>>2]=xa;Aa=d+8|0;f[Aa>>2]=ya;u=e;return}}function Pb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;g=a+8|0;f[g>>2]=e;d=a+32|0;h=a+36|0;i=f[d>>2]|0;j=(f[h>>2]|0)-i>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[h>>2]=i+(e<<2)}else Eg(d,e-j|0);j=e>>>0>1073741823?-1:e<<2;d=Ho(j)|0;oh(d|0,0,j|0)|0;i=Ho(j)|0;oh(i|0,0,j|0)|0;j=f[g>>2]|0;if((j|0)>0){h=a+16|0;k=a+32|0;l=a+12|0;m=0;do{n=f[d+(m<<2)>>2]|0;o=f[h>>2]|0;do if((n|0)<=(o|0)){p=f[l>>2]|0;q=f[k>>2]|0;r=q+(m<<2)|0;if((n|0)<(p|0)){f[r>>2]=p;s=q;break}else{f[r>>2]=n;s=q;break}}else{q=f[k>>2]|0;f[q+(m<<2)>>2]=o;s=q}while(0);m=m+1|0;t=f[g>>2]|0}while((m|0)<(t|0));if((t|0)>0){m=a+20|0;k=0;do{o=(f[b+(k<<2)>>2]|0)+(f[s+(k<<2)>>2]|0)|0;n=c+(k<<2)|0;f[n>>2]=o;if((o|0)<=(f[h>>2]|0)){if((o|0)<(f[l>>2]|0)){u=(f[m>>2]|0)+o|0;v=19}}else{u=o-(f[m>>2]|0)|0;v=19}if((v|0)==19){v=0;f[n>>2]=u}k=k+1|0;n=f[g>>2]|0}while((k|0)<(n|0));w=n}else w=t}else w=j;j=f[a+48>>2]|0;t=f[a+56>>2]|0;k=f[t>>2]|0;u=(f[t+4>>2]|0)-k|0;m=u>>2;if((u|0)<=4){Io(i);Io(d);return 1}u=f[a+52>>2]|0;l=k;k=(e|0)>0;h=j+12|0;s=a+16|0;n=a+32|0;o=a+12|0;q=a+20|0;a=e<<2;r=1;p=w;while(1){if(m>>>0<=r>>>0){v=25;break}w=f[l+(r<<2)>>2]|0;if(k)oh(d|0,0,a|0)|0;if((w|0)!=-1){x=f[h>>2]|0;y=0;z=w;while(1){A=f[x+(z<<2)>>2]|0;if((A|0)!=-1){B=f[j>>2]|0;C=f[u>>2]|0;D=f[C+(f[B+(A<<2)>>2]<<2)>>2]|0;E=A+1|0;F=((E>>>0)%3|0|0)==0?A+-2|0:E;if((F|0)==-1)G=-1;else G=f[B+(F<<2)>>2]|0;F=f[C+(G<<2)>>2]|0;E=(((A>>>0)%3|0|0)==0?2:-1)+A|0;if((E|0)==-1)H=-1;else H=f[B+(E<<2)>>2]|0;E=f[C+(H<<2)>>2]|0;if((D|0)<(r|0)&(F|0)<(r|0)&(E|0)<(r|0)){C=W(D,e)|0;D=W(F,e)|0;F=W(E,e)|0;if(k){E=0;do{f[i+(E<<2)>>2]=(f[c+(E+F<<2)>>2]|0)+(f[c+(E+D<<2)>>2]|0)-(f[c+(E+C<<2)>>2]|0);E=E+1|0}while((E|0)!=(e|0));if(k){E=0;do{C=d+(E<<2)|0;f[C>>2]=(f[C>>2]|0)+(f[i+(E<<2)>>2]|0);E=E+1|0}while((E|0)!=(e|0))}}I=y+1|0}else I=y}else I=y;E=(((z>>>0)%3|0|0)==0?2:-1)+z|0;do if((E|0)!=-1?(C=f[x+(E<<2)>>2]|0,(C|0)!=-1):0)if(!((C>>>0)%3|0)){J=C+2|0;break}else{J=C+-1|0;break}else J=-1;while(0);z=(J|0)==(w|0)?-1:J;if((z|0)==-1)break;else y=I}y=W(r,e)|0;if(I){if(k){z=0;do{w=d+(z<<2)|0;f[w>>2]=(f[w>>2]|0)/(I|0)|0;z=z+1|0}while((z|0)!=(e|0))}z=b+(y<<2)|0;w=c+(y<<2)|0;if((p|0)>0){x=0;do{E=f[d+(x<<2)>>2]|0;C=f[s>>2]|0;do if((E|0)<=(C|0)){D=f[o>>2]|0;F=f[n>>2]|0;B=F+(x<<2)|0;if((E|0)<(D|0)){f[B>>2]=D;K=F;break}else{f[B>>2]=E;K=F;break}}else{F=f[n>>2]|0;f[F+(x<<2)>>2]=C;K=F}while(0);x=x+1|0;L=f[g>>2]|0}while((x|0)<(L|0));if((L|0)>0){x=0;do{C=(f[z+(x<<2)>>2]|0)+(f[K+(x<<2)>>2]|0)|0;E=w+(x<<2)|0;f[E>>2]=C;if((C|0)<=(f[s>>2]|0)){if((C|0)<(f[o>>2]|0)){M=(f[q>>2]|0)+C|0;v=83}}else{M=C-(f[q>>2]|0)|0;v=83}if((v|0)==83){v=0;f[E>>2]=M}x=x+1|0;E=f[g>>2]|0}while((x|0)<(E|0));N=E}else N=L}else N=p}else{O=y;v=51}}else{O=W(r,e)|0;v=51}if((v|0)==51){v=0;x=c+((W(r+-1|0,e)|0)<<2)|0;w=b+(O<<2)|0;z=c+(O<<2)|0;if((p|0)>0){E=0;do{C=f[x+(E<<2)>>2]|0;F=f[s>>2]|0;do if((C|0)<=(F|0)){B=f[o>>2]|0;D=f[n>>2]|0;A=D+(E<<2)|0;if((C|0)<(B|0)){f[A>>2]=B;P=D;break}else{f[A>>2]=C;P=D;break}}else{D=f[n>>2]|0;f[D+(E<<2)>>2]=F;P=D}while(0);E=E+1|0;Q=f[g>>2]|0}while((E|0)<(Q|0));if((Q|0)>0){E=0;do{x=(f[w+(E<<2)>>2]|0)+(f[P+(E<<2)>>2]|0)|0;y=z+(E<<2)|0;f[y>>2]=x;if((x|0)<=(f[s>>2]|0)){if((x|0)<(f[o>>2]|0)){R=(f[q>>2]|0)+x|0;v=65}}else{R=x-(f[q>>2]|0)|0;v=65}if((v|0)==65){v=0;f[y>>2]=R}E=E+1|0;y=f[g>>2]|0}while((E|0)<(y|0));N=y}else N=Q}else N=p}r=r+1|0;if((r|0)>=(m|0)){v=23;break}else p=N}if((v|0)==23){Io(i);Io(d);return 1}else if((v|0)==25)$n(t);return 0}function Qb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=a+8|0;f[g>>2]=e;d=a+32|0;h=a+36|0;i=f[d>>2]|0;j=(f[h>>2]|0)-i>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[h>>2]=i+(e<<2)}else Eg(d,e-j|0);j=e>>>0>1073741823?-1:e<<2;d=Ho(j)|0;oh(d|0,0,j|0)|0;i=Ho(j)|0;oh(i|0,0,j|0)|0;j=f[g>>2]|0;if((j|0)>0){h=a+16|0;k=a+32|0;l=a+12|0;m=0;do{n=f[d+(m<<2)>>2]|0;o=f[h>>2]|0;do if((n|0)<=(o|0)){p=f[l>>2]|0;q=f[k>>2]|0;r=q+(m<<2)|0;if((n|0)<(p|0)){f[r>>2]=p;s=q;break}else{f[r>>2]=n;s=q;break}}else{q=f[k>>2]|0;f[q+(m<<2)>>2]=o;s=q}while(0);m=m+1|0;t=f[g>>2]|0}while((m|0)<(t|0));if((t|0)>0){m=a+20|0;k=0;do{o=(f[b+(k<<2)>>2]|0)+(f[s+(k<<2)>>2]|0)|0;n=c+(k<<2)|0;f[n>>2]=o;if((o|0)<=(f[h>>2]|0)){if((o|0)<(f[l>>2]|0)){u=(f[m>>2]|0)+o|0;v=19}}else{u=o-(f[m>>2]|0)|0;v=19}if((v|0)==19){v=0;f[n>>2]=u}k=k+1|0;n=f[g>>2]|0}while((k|0)<(n|0));w=n}else w=t}else w=j;j=f[a+48>>2]|0;t=f[a+56>>2]|0;k=f[t>>2]|0;u=(f[t+4>>2]|0)-k|0;m=u>>2;if((u|0)<=4){Io(i);Io(d);return 1}u=f[a+52>>2]|0;l=k;k=(e|0)>0;h=j+64|0;s=j+28|0;n=a+16|0;o=a+32|0;q=a+12|0;r=a+20|0;a=e<<2;p=1;x=w;while(1){if(m>>>0<=p>>>0){v=25;break}w=f[l+(p<<2)>>2]|0;if(k)oh(d|0,0,a|0)|0;if((w|0)!=-1){y=f[j>>2]|0;z=0;A=w;while(1){if(((f[y+(A>>>5<<2)>>2]&1<<(A&31)|0)==0?(B=f[(f[(f[h>>2]|0)+12>>2]|0)+(A<<2)>>2]|0,(B|0)!=-1):0)?(C=f[s>>2]|0,D=f[u>>2]|0,E=f[D+(f[C+(B<<2)>>2]<<2)>>2]|0,F=B+1|0,G=f[D+(f[C+((((F>>>0)%3|0|0)==0?B+-2|0:F)<<2)>>2]<<2)>>2]|0,F=f[D+(f[C+((((B>>>0)%3|0|0)==0?2:-1)+B<<2)>>2]<<2)>>2]|0,(E|0)<(p|0)&(G|0)<(p|0)&(F|0)<(p|0)):0){B=W(E,e)|0;E=W(G,e)|0;G=W(F,e)|0;if(k){F=0;do{f[i+(F<<2)>>2]=(f[c+(F+G<<2)>>2]|0)+(f[c+(F+E<<2)>>2]|0)-(f[c+(F+B<<2)>>2]|0);F=F+1|0}while((F|0)!=(e|0));if(k){F=0;do{B=d+(F<<2)|0;f[B>>2]=(f[B>>2]|0)+(f[i+(F<<2)>>2]|0);F=F+1|0}while((F|0)!=(e|0))}}H=z+1|0}else H=z;F=(((A>>>0)%3|0|0)==0?2:-1)+A|0;do if(((F|0)!=-1?(f[y+(F>>>5<<2)>>2]&1<<(F&31)|0)==0:0)?(B=f[(f[(f[h>>2]|0)+12>>2]|0)+(F<<2)>>2]|0,(B|0)!=-1):0)if(!((B>>>0)%3|0)){I=B+2|0;break}else{I=B+-1|0;break}else I=-1;while(0);A=(I|0)==(w|0)?-1:I;if((A|0)==-1)break;else z=H}z=W(p,e)|0;if(H){if(k){A=0;do{w=d+(A<<2)|0;f[w>>2]=(f[w>>2]|0)/(H|0)|0;A=A+1|0}while((A|0)!=(e|0))}A=b+(z<<2)|0;w=c+(z<<2)|0;if((x|0)>0){y=0;do{F=f[d+(y<<2)>>2]|0;B=f[n>>2]|0;do if((F|0)<=(B|0)){E=f[q>>2]|0;G=f[o>>2]|0;C=G+(y<<2)|0;if((F|0)<(E|0)){f[C>>2]=E;J=G;break}else{f[C>>2]=F;J=G;break}}else{G=f[o>>2]|0;f[G+(y<<2)>>2]=B;J=G}while(0);y=y+1|0;K=f[g>>2]|0}while((y|0)<(K|0));if((K|0)>0){y=0;do{B=(f[A+(y<<2)>>2]|0)+(f[J+(y<<2)>>2]|0)|0;F=w+(y<<2)|0;f[F>>2]=B;if((B|0)<=(f[n>>2]|0)){if((B|0)<(f[q>>2]|0)){L=(f[r>>2]|0)+B|0;v=81}}else{L=B-(f[r>>2]|0)|0;v=81}if((v|0)==81){v=0;f[F>>2]=L}y=y+1|0;F=f[g>>2]|0}while((y|0)<(F|0));M=F}else M=K}else M=x}else{N=z;v=49}}else{N=W(p,e)|0;v=49}if((v|0)==49){v=0;y=c+((W(p+-1|0,e)|0)<<2)|0;w=b+(N<<2)|0;A=c+(N<<2)|0;if((x|0)>0){F=0;do{B=f[y+(F<<2)>>2]|0;G=f[n>>2]|0;do if((B|0)<=(G|0)){C=f[q>>2]|0;E=f[o>>2]|0;D=E+(F<<2)|0;if((B|0)<(C|0)){f[D>>2]=C;O=E;break}else{f[D>>2]=B;O=E;break}}else{E=f[o>>2]|0;f[E+(F<<2)>>2]=G;O=E}while(0);F=F+1|0;P=f[g>>2]|0}while((F|0)<(P|0));if((P|0)>0){F=0;do{y=(f[w+(F<<2)>>2]|0)+(f[O+(F<<2)>>2]|0)|0;z=A+(F<<2)|0;f[z>>2]=y;if((y|0)<=(f[n>>2]|0)){if((y|0)<(f[q>>2]|0)){Q=(f[r>>2]|0)+y|0;v=63}}else{Q=y-(f[r>>2]|0)|0;v=63}if((v|0)==63){v=0;f[z>>2]=Q}F=F+1|0;z=f[g>>2]|0}while((F|0)<(z|0));M=z}else M=P}else M=x}p=p+1|0;if((p|0)>=(m|0)){v=23;break}else x=M}if((v|0)==23){Io(i);Io(d);return 1}else if((v|0)==25)$n(t);return 0}function Rb(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;if(!a)return;b=a+-8|0;c=f[4076]|0;d=f[a+-4>>2]|0;a=d&-8;e=b+a|0;do if(!(d&1)){g=f[b>>2]|0;if(!(d&3))return;h=b+(0-g)|0;i=g+a|0;if(h>>>0<c>>>0)return;if((f[4077]|0)==(h|0)){j=e+4|0;k=f[j>>2]|0;if((k&3|0)!=3){l=h;m=i;n=h;break}f[4074]=i;f[j>>2]=k&-2;f[h+4>>2]=i|1;f[h+i>>2]=i;return}k=g>>>3;if(g>>>0<256){g=f[h+8>>2]|0;j=f[h+12>>2]|0;if((j|0)==(g|0)){f[4072]=f[4072]&~(1<<k);l=h;m=i;n=h;break}else{f[g+12>>2]=j;f[j+8>>2]=g;l=h;m=i;n=h;break}}g=f[h+24>>2]|0;j=f[h+12>>2]|0;do if((j|0)==(h|0)){k=h+16|0;o=k+4|0;p=f[o>>2]|0;if(!p){q=f[k>>2]|0;if(!q){r=0;break}else{s=q;t=k}}else{s=p;t=o}o=s;p=t;while(1){k=o+20|0;q=f[k>>2]|0;if(!q){u=o+16|0;v=f[u>>2]|0;if(!v)break;else{w=v;x=u}}else{w=q;x=k}o=w;p=x}f[p>>2]=0;r=o}else{k=f[h+8>>2]|0;f[k+12>>2]=j;f[j+8>>2]=k;r=j}while(0);if(g){j=f[h+28>>2]|0;k=16592+(j<<2)|0;if((f[k>>2]|0)==(h|0)){f[k>>2]=r;if(!r){f[4073]=f[4073]&~(1<<j);l=h;m=i;n=h;break}}else{j=g+16|0;f[((f[j>>2]|0)==(h|0)?j:g+20|0)>>2]=r;if(!r){l=h;m=i;n=h;break}}f[r+24>>2]=g;j=h+16|0;k=f[j>>2]|0;if(k|0){f[r+16>>2]=k;f[k+24>>2]=r}k=f[j+4>>2]|0;if(k){f[r+20>>2]=k;f[k+24>>2]=r;l=h;m=i;n=h}else{l=h;m=i;n=h}}else{l=h;m=i;n=h}}else{l=b;m=a;n=b}while(0);if(n>>>0>=e>>>0)return;b=e+4|0;a=f[b>>2]|0;if(!(a&1))return;if(!(a&2)){if((f[4078]|0)==(e|0)){r=(f[4075]|0)+m|0;f[4075]=r;f[4078]=l;f[l+4>>2]=r|1;if((l|0)!=(f[4077]|0))return;f[4077]=0;f[4074]=0;return}if((f[4077]|0)==(e|0)){r=(f[4074]|0)+m|0;f[4074]=r;f[4077]=n;f[l+4>>2]=r|1;f[n+r>>2]=r;return}r=(a&-8)+m|0;x=a>>>3;do if(a>>>0<256){w=f[e+8>>2]|0;t=f[e+12>>2]|0;if((t|0)==(w|0)){f[4072]=f[4072]&~(1<<x);break}else{f[w+12>>2]=t;f[t+8>>2]=w;break}}else{w=f[e+24>>2]|0;t=f[e+12>>2]|0;do if((t|0)==(e|0)){s=e+16|0;c=s+4|0;d=f[c>>2]|0;if(!d){k=f[s>>2]|0;if(!k){y=0;break}else{z=k;A=s}}else{z=d;A=c}c=z;d=A;while(1){s=c+20|0;k=f[s>>2]|0;if(!k){j=c+16|0;q=f[j>>2]|0;if(!q)break;else{B=q;C=j}}else{B=k;C=s}c=B;d=C}f[d>>2]=0;y=c}else{o=f[e+8>>2]|0;f[o+12>>2]=t;f[t+8>>2]=o;y=t}while(0);if(w|0){t=f[e+28>>2]|0;h=16592+(t<<2)|0;if((f[h>>2]|0)==(e|0)){f[h>>2]=y;if(!y){f[4073]=f[4073]&~(1<<t);break}}else{t=w+16|0;f[((f[t>>2]|0)==(e|0)?t:w+20|0)>>2]=y;if(!y)break}f[y+24>>2]=w;t=e+16|0;h=f[t>>2]|0;if(h|0){f[y+16>>2]=h;f[h+24>>2]=y}h=f[t+4>>2]|0;if(h|0){f[y+20>>2]=h;f[h+24>>2]=y}}}while(0);f[l+4>>2]=r|1;f[n+r>>2]=r;if((l|0)==(f[4077]|0)){f[4074]=r;return}else D=r}else{f[b>>2]=a&-2;f[l+4>>2]=m|1;f[n+m>>2]=m;D=m}m=D>>>3;if(D>>>0<256){n=16328+(m<<1<<2)|0;a=f[4072]|0;b=1<<m;if(!(a&b)){f[4072]=a|b;E=n;F=n+8|0}else{b=n+8|0;E=f[b>>2]|0;F=b}f[F>>2]=l;f[E+12>>2]=l;f[l+8>>2]=E;f[l+12>>2]=n;return}n=D>>>8;if(n)if(D>>>0>16777215)G=31;else{E=(n+1048320|0)>>>16&8;F=n<<E;n=(F+520192|0)>>>16&4;b=F<<n;F=(b+245760|0)>>>16&2;a=14-(n|E|F)+(b<<F>>>15)|0;G=D>>>(a+7|0)&1|a<<1}else G=0;a=16592+(G<<2)|0;f[l+28>>2]=G;f[l+20>>2]=0;f[l+16>>2]=0;F=f[4073]|0;b=1<<G;a:do if(!(F&b)){f[4073]=F|b;f[a>>2]=l;f[l+24>>2]=a;f[l+12>>2]=l;f[l+8>>2]=l}else{E=f[a>>2]|0;b:do if((f[E+4>>2]&-8|0)==(D|0))H=E;else{n=D<<((G|0)==31?0:25-(G>>>1)|0);m=E;while(1){I=m+16+(n>>>31<<2)|0;r=f[I>>2]|0;if(!r)break;if((f[r+4>>2]&-8|0)==(D|0)){H=r;break b}else{n=n<<1;m=r}}f[I>>2]=l;f[l+24>>2]=m;f[l+12>>2]=l;f[l+8>>2]=l;break a}while(0);E=H+8|0;w=f[E>>2]|0;f[w+12>>2]=l;f[E>>2]=l;f[l+8>>2]=w;f[l+12>>2]=H;f[l+24>>2]=0}while(0);l=(f[4080]|0)+-1|0;f[4080]=l;if(l|0)return;l=16744;while(1){H=f[l>>2]|0;if(!H)break;else l=H+8|0}f[4080]=-1;return}function Sb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+176|0;e=d+136|0;g=d+32|0;i=d;j=d+104|0;k=d+100|0;l=a+4|0;m=f[l>>2]|0;n=f[m+32>>2]|0;o=n+8|0;p=f[o>>2]|0;q=f[o+4>>2]|0;o=n+16|0;r=o;s=f[r>>2]|0;t=f[r+4>>2]|0;if(!((q|0)>(t|0)|(q|0)==(t|0)&p>>>0>s>>>0)){v=0;u=d;return v|0}r=f[n>>2]|0;n=b[r+s>>0]|0;w=vl(s|0,t|0,1,0)|0;x=H;y=o;f[y>>2]=w;f[y+4>>2]=x;if(!((q|0)>(x|0)|(q|0)==(x|0)&p>>>0>w>>>0)){v=0;u=d;return v|0}x=b[r+w>>0]|0;w=vl(s|0,t|0,2,0)|0;y=H;z=o;f[z>>2]=w;f[z+4>>2]=y;if(n<<24>>24>-1){z=n<<24>>24;A=f[a+216>>2]|0;if((((f[a+220>>2]|0)-A|0)/144|0)>>>0<=z>>>0){v=0;u=d;return v|0}B=A+(z*144|0)|0;if((f[B>>2]|0)>-1){v=0;u=d;return v|0}else C=B}else{B=a+212|0;if((f[B>>2]|0)>-1){v=0;u=d;return v|0}else C=B}f[C>>2]=c;do if((((h[m+36>>0]|0)<<8|(h[m+37>>0]|0))&65535)>257)if((q|0)>(y|0)|(q|0)==(y|0)&p>>>0>w>>>0){C=b[r+w>>0]|0;B=vl(s|0,t|0,3,0)|0;z=o;f[z>>2]=B;f[z+4>>2]=H;D=C&255;break}else{v=0;u=d;return v|0}else D=0;while(0);o=f[m+44>>2]|0;if(!(x<<24>>24)){if(n<<24>>24<0)E=a+184|0;else{x=n<<24>>24;m=f[a+216>>2]|0;b[m+(x*144|0)+100>>0]=0;E=m+(x*144|0)+104|0}switch((D&255)<<24>>24){case 0:{Qc(e,a,E);F=f[e>>2]|0;break}case 1:{xd(e,a,E);F=f[e>>2]|0;break}default:{v=0;u=d;return v|0}}if(!F){v=0;u=d;return v|0}else G=F}else{if(n<<24>>24<0|(D|0)!=0){v=0;u=d;return v|0}D=wk(88)|0;F=n<<24>>24;n=f[a+216>>2]|0;a=n+(F*144|0)+104|0;f[D+4>>2]=0;f[D>>2]=3292;E=D+12|0;f[E>>2]=3316;x=D+64|0;f[x>>2]=0;f[D+68>>2]=0;f[D+72>>2]=0;m=D+16|0;t=m+44|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(t|0));f[D+76>>2]=o;f[D+80>>2]=a;f[D+84>>2]=0;s=g+4|0;f[s>>2]=3316;w=g+56|0;f[w>>2]=0;r=g+60|0;f[r>>2]=0;f[g+64>>2]=0;m=g+8|0;t=m+44|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(t|0));m=n+(F*144|0)+4|0;f[i>>2]=3316;t=i+4|0;p=t+4|0;f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0;f[p+16>>2]=0;f[p+20>>2]=0;f[t>>2]=m;t=f[n+(F*144|0)+68>>2]|0;F=((f[t+4>>2]|0)-(f[t>>2]|0)>>2>>>0)/3|0;b[e>>0]=0;Gf(i+8|0,F,e);Pa[f[(f[i>>2]|0)+8>>2]&127](i);je(j,i);je(e,j);f[g>>2]=f[e+4>>2];F=g+4|0;He(F,e)|0;f[e>>2]=3316;t=f[e+20>>2]|0;if(t|0)Ko(t);t=f[e+8>>2]|0;if(t|0)Ko(t);f[g+36>>2]=m;f[g+40>>2]=a;f[g+44>>2]=o;f[g+48>>2]=D;f[j>>2]=3316;o=f[j+20>>2]|0;if(o|0)Ko(o);o=f[j+8>>2]|0;if(o|0)Ko(o);f[D+8>>2]=f[g>>2];He(E,F)|0;F=D+44|0;E=g+36|0;f[F>>2]=f[E>>2];f[F+4>>2]=f[E+4>>2];f[F+8>>2]=f[E+8>>2];f[F+12>>2]=f[E+12>>2];b[F+16>>0]=b[E+16>>0]|0;df(x,f[w>>2]|0,f[r>>2]|0);f[i>>2]=3316;x=f[i+20>>2]|0;if(x|0)Ko(x);x=f[i+8>>2]|0;if(x|0)Ko(x);x=f[w>>2]|0;if(x|0){f[r>>2]=x;Ko(x)}f[s>>2]=3316;s=f[g+24>>2]|0;if(s|0)Ko(s);s=f[g+12>>2]|0;if(s|0)Ko(s);G=D}D=wk(64)|0;f[k>>2]=G;Zi(D,k);G=D;s=f[k>>2]|0;f[k>>2]=0;if(s|0)Pa[f[(f[s>>2]|0)+4>>2]&127](s);s=f[l>>2]|0;if((c|0)<0){Pa[f[(f[D>>2]|0)+4>>2]&127](D);v=0;u=d;return v|0}D=s+8|0;l=s+12|0;s=f[l>>2]|0;k=f[D>>2]|0;g=s-k>>2;do if((g|0)<=(c|0)){x=c+1|0;r=s;if(x>>>0>g>>>0){Se(D,x-g|0);break}if(x>>>0<g>>>0){w=k+(x<<2)|0;if((w|0)!=(r|0)){x=r;do{x=x+-4|0;r=f[x>>2]|0;f[x>>2]=0;if(r|0)Pa[f[(f[r>>2]|0)+4>>2]&127](r)}while((x|0)!=(w|0))}f[l>>2]=w}}while(0);l=(f[D>>2]|0)+(c<<2)|0;c=f[l>>2]|0;f[l>>2]=G;if(!c){v=1;u=d;return v|0}Pa[f[(f[c>>2]|0)+4>>2]&127](c);v=1;u=d;return v|0}function Tb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=u;u=u+736|0;e=d+716|0;g=d;h=d+64|0;if((j[c+38>>1]|0)<515){i=1;u=d;return i|0}k=c+8|0;l=f[k+4>>2]|0;m=c+16|0;n=m;o=f[n>>2]|0;p=f[n+4>>2]|0;if(!((l|0)>(p|0)|((l|0)==(p|0)?(f[k>>2]|0)>>>0>o>>>0:0))){i=0;u=d;return i|0}k=b[(f[c>>2]|0)+o>>0]|0;l=vl(o|0,p|0,1,0)|0;p=m;f[p>>2]=l;f[p+4>>2]=H;p=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;l=f[(f[p>>2]|0)+80>>2]|0;p=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;f[e>>2]=0;m=e+4|0;f[m>>2]=0;o=e+8|0;f[o>>2]=0;do if(p|0)if(p>>>0>214748364)$n(e);else{n=p*20|0;q=wk(n)|0;f[e>>2]=q;f[o>>2]=q+(p*20|0);oh(q|0,0,n|0)|0;f[m>>2]=q+n;break}while(0);p=a+52|0;o=a+56|0;n=a+48|0;q=a+64|0;r=a+68|0;s=a+60|0;t=0;v=0;a:while(1){if((v|0)>=(Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0)){w=35;break}x=La[f[(f[a>>2]|0)+20>>2]&127](a,v)|0;y=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;z=f[(f[(f[y>>2]|0)+8>>2]|0)+(x<<2)>>2]|0;Fh(z,l)|0;b[z+84>>0]=1;f[z+72>>2]=f[z+68>>2];switch(f[z+28>>2]|0){case 2:case 4:case 6:{A=z;break}case 1:case 3:case 5:{x=z+24|0;y=b[x>>0]|0;if(y<<24>>24>0){B=0;C=y;while(1){f[g>>2]=0;y=f[p>>2]|0;if(y>>>0<(f[o>>2]|0)>>>0){f[y>>2]=0;f[p>>2]=y+4;D=C}else{Ng(n,g);D=b[x>>0]|0}B=B+1|0;if((B|0)>=(D<<24>>24|0))break;else C=D}}A=z;break}case 9:{C=b[z+24>>0]|0;oj(g);B=f[z+56>>2]|0;x=W(Bj(6)|0,C<<24>>24)|0;Ih(g,B,0,C,6,0,x,((x|0)<0)<<31>>31,0,0);x=wk(96)|0;$i(x,g);f[h>>2]=x;b[x+84>>0]=1;f[x+72>>2]=f[x+68>>2];Fh(x,l)|0;x=f[q>>2]|0;if(x>>>0<(f[r>>2]|0)>>>0){C=f[h>>2]|0;f[h>>2]=0;f[x>>2]=C;C=x+4|0;f[q>>2]=C;E=C}else{Rd(s,h);E=f[q>>2]|0}C=f[E+-4>>2]|0;x=f[h>>2]|0;f[h>>2]=0;if(x|0){B=x+88|0;y=f[B>>2]|0;f[B>>2]=0;if(y|0){B=f[y+8>>2]|0;if(B|0){f[y+12>>2]=B;Ko(B)}Ko(y)}y=f[x+68>>2]|0;if(y|0){f[x+72>>2]=y;Ko(y)}y=x+64|0;B=f[y>>2]|0;f[y>>2]=0;if(B|0){y=f[B>>2]|0;if(y|0){f[B+4>>2]=y;Ko(y)}Ko(B)}Ko(x)}A=C;break}default:{F=0;break a}}C=A;x=f[C+28>>2]|0;B=Bj(x)|0;y=b[C+24>>0]|0;C=f[e>>2]|0;f[C+(v*20|0)>>2]=A;f[C+(v*20|0)+4>>2]=t;f[C+(v*20|0)+8>>2]=x;f[C+(v*20|0)+12>>2]=(B|0)>0?B:0;f[C+(v*20|0)+16>>2]=y;t=t+y|0;v=v+1|0}if((w|0)==35){$e(g,e);switch(k<<24>>24){case 0:{ve(h,t);k=Xd(h,c,g)|0;Cf(h);if(k)w=43;else G=0;break}case 1:{ve(h,t);k=Wd(h,c,g)|0;Cf(h);if(k)w=43;else G=0;break}case 2:{we(h,t);k=Zd(h,c,g)|0;Lf(h);if(k)w=43;else G=0;break}case 3:{we(h,t);k=Yd(h,c,g)|0;Lf(h);if(k)w=43;else G=0;break}case 4:{re(h,t);k=Ud(h,c,g)|0;jg(h);if(k)w=43;else G=0;break}case 5:{re(h,t);k=Td(h,c,g)|0;jg(h);if(k)w=43;else G=0;break}case 6:{re(h,t);t=Sd(h,c,g)|0;jg(h);if(t)w=43;else G=0;break}default:G=0}if((w|0)==43)G=1;w=f[g+16>>2]|0;if(w|0){f[g+20>>2]=w;Ko(w)}w=f[g>>2]|0;if(w|0){f[g+4>>2]=w;Ko(w)}F=G}G=f[e>>2]|0;if(G|0){f[m>>2]=G;Ko(G)}i=F;u=d;return i|0}function Ub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;c=u;u=u+48|0;d=c+24|0;e=c+12|0;g=c;if(!b){h=0;u=c;return h|0}i=a+12|0;j=a+4|0;k=(f[j>>2]|0)-(f[a>>2]|0)>>2;l=a+16|0;m=f[i>>2]|0;n=(f[l>>2]|0)-m>>2;if(k>>>0<=n>>>0)if(k>>>0<n>>>0){f[l>>2]=m+(k<<2);o=k}else o=k;else{Of(i,k-n|0,3732);o=(f[j>>2]|0)-(f[a>>2]|0)>>2}f[d>>2]=0;n=d+4|0;f[n>>2]=0;f[d+8>>2]=0;Wh(d,o);o=f[j>>2]|0;k=f[a>>2]|0;m=k;if((o|0)==(k|0)){p=0;q=0;r=m;s=m;t=m;v=m;w=m;x=o;y=k}else{l=f[d>>2]|0;z=l;A=z;B=0;C=m;D=m;E=m;F=m;G=m;H=o;o=z;z=m;m=l;l=k;while(1){k=f[z+(B<<2)>>2]|0;I=(f[n>>2]|0)-m>>2;if(k>>>0<I>>>0){J=l;K=A;L=C;M=D;N=E;O=F;P=G;Q=o;R=l;S=H}else{T=k+1|0;f[e>>2]=0;if(T>>>0<=I>>>0)if(T>>>0<I>>>0){f[n>>2]=m+(T<<2);U=A;V=H;W=l}else{U=A;V=H;W=l}else{Of(d,T-I|0,e);U=f[d>>2]|0;V=f[j>>2]|0;W=f[a>>2]|0}I=W;J=I;K=U;L=I;M=I;N=I;O=I;P=I;Q=U;R=W;S=V}I=Q+(k<<2)|0;f[I>>2]=(f[I>>2]|0)+1;B=B+1|0;I=S-R|0;k=I>>2;if(B>>>0>=k>>>0){p=k;q=I;r=L;s=M;t=N;v=O;w=P;x=S;y=R;break}else{A=K;C=L;D=M;E=N;F=O;G=P;H=S;o=Q;z=J;m=Q;l=R}}}f[e>>2]=0;R=e+4|0;f[R>>2]=0;l=e+8|0;f[l>>2]=0;do if(q)if(p>>>0>536870911)$n(e);else{Q=wk(q<<1)|0;f[e>>2]=Q;f[l>>2]=Q+(p<<3);m=p<<3;oh(Q|0,-1,m|0)|0;f[R>>2]=Q+m;X=Q;Y=Q;break}else{X=0;Y=0}while(0);p=f[d>>2]|0;l=(f[n>>2]|0)-p|0;q=l>>2;f[g>>2]=0;Q=g+4|0;f[Q>>2]=0;m=g+8|0;f[m>>2]=0;J=p;if(!l){Z=0;_=0}else{if(q>>>0>1073741823)$n(g);p=wk(l)|0;f[g>>2]=p;g=p+(q<<2)|0;f[m>>2]=g;oh(p|0,0,l|0)|0;f[Q>>2]=g;g=0;l=0;while(1){f[p+(l<<2)>>2]=g;m=l+1|0;if(m>>>0<q>>>0){g=(f[J+(l<<2)>>2]|0)+g|0;l=m}else{Z=p;_=p;break}}}if((x|0)!=(y|0)){p=a+40|0;a=x-y>>2;x=y;y=X;l=0;g=v;v=t;t=s;s=r;r=w;while(1){w=f[r+(l<<2)>>2]|0;m=l+1|0;z=((m>>>0)%3|0|0)==0?l+-2|0:m;if((z|0)==-1)$=-1;else $=f[g+(z<<2)>>2]|0;z=((l>>>0)%3|0|0)==0;o=(z?2:-1)+l|0;if((o|0)==-1)aa=-1;else aa=f[v+(o<<2)>>2]|0;if(z?(z=f[t+(l<<2)>>2]|0,($|0)==(aa|0)|((z|0)==($|0)|(z|0)==(aa|0))):0){f[p>>2]=(f[p>>2]|0)+1;ba=y;ca=l+3|0}else da=41;a:do if((da|0)==41){da=0;z=f[J+(aa<<2)>>2]|0;b:do if((z|0)>0){o=0;S=f[Z+(aa<<2)>>2]|0;while(1){ea=y+(S<<3)|0;H=f[ea>>2]|0;if((H|0)==-1)break b;if((H|0)==($|0)){fa=f[y+(S<<3)+4>>2]|0;if((fa|0)==-1)ga=-1;else ga=f[s+(fa<<2)>>2]|0;if((w|0)!=(ga|0))break}H=o+1|0;if((H|0)<(z|0)){o=H;S=S+1|0}else break b}H=o+1|0;c:do if((H|0)<(z|0)){P=H;G=S;while(1){O=G;G=G+1|0;F=y+(G<<3)|0;N=f[F>>2]|0;E=y+(O<<3)|0;f[E>>2]=N;f[y+(O<<3)+4>>2]=f[y+(G<<3)+4>>2];if((N|0)==-1){ha=E;break c}P=P+1|0;if((P|0)>=(z|0)){ha=F;break}}}else ha=ea;while(0);f[ha>>2]=-1;if((fa|0)!=-1){S=f[i>>2]|0;f[S+(l<<2)>>2]=fa;f[S+(fa<<2)>>2]=l;ba=y;ca=m;break a}}while(0);z=f[J+($<<2)>>2]|0;if((z|0)>0){S=0;H=f[Z+($<<2)>>2]|0;while(1){ia=X+(H<<3)|0;if((f[ia>>2]|0)==-1)break;S=S+1|0;if((S|0)>=(z|0)){ba=X;ca=m;break a}else H=H+1|0}f[ia>>2]=aa;f[X+(H<<3)+4>>2]=l;ba=X;ca=m}else{ba=y;ca=m}}while(0);if(ca>>>0<a>>>0){y=ba;l=ca;g=x;v=x;t=x;s=x;r=x}else break}}f[b>>2]=q;if(!Z){ja=X;ka=Y}else{f[Q>>2]=Z;Ko(_);_=f[e>>2]|0;ja=_;ka=_}if(ja|0){f[R>>2]=ja;Ko(ka)}ka=f[d>>2]|0;if(ka|0){f[n>>2]=ka;Ko(ka)}h=1;u=c;return h|0}function Vb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=u;u=u+16|0;e=d;g=a+144|0;i=f[g>>2]|0;k=Ka[f[(f[i>>2]|0)+32>>2]&127](i)|0;do if((((h[k+36>>0]|0)<<8|(h[k+37>>0]|0))&65535)<514){i=a+40|0;l=i;m=a;n=l+40|0;do{f[l>>2]=f[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));if(vf(i,1,e)|0){l=a;m=i;n=l+40|0;do{f[l>>2]=f[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));i=e;o=f[i>>2]|0;p=f[i+4>>2]|0;i=a+8|0;q=a+16|0;r=q;s=f[r>>2]|0;t=f[r+4>>2]|0;r=wl(f[i>>2]|0,f[i+4>>2]|0,s|0,t|0)|0;i=H;if(!(p>>>0>i>>>0|(p|0)==(i|0)&o>>>0>r>>>0)){r=vl(s|0,t|0,o|0,p|0)|0;p=q;f[p>>2]=r;f[p+4>>2]=H;break}}v=0;u=d;return v|0}while(0);do if((j[a+38>>1]|0)>=514){if(!(rd(a+80|0,a)|0)){v=0;u=d;return v|0}}else{k=a+96|0;l=k;m=a;n=l+40|0;do{f[l>>2]=f[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));if(vf(k,1,e)|0){l=a;m=k;n=l+40|0;do{f[l>>2]=f[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));k=e;p=f[k>>2]|0;r=f[k+4>>2]|0;k=a+8|0;q=a+16|0;o=q;t=f[o>>2]|0;s=f[o+4>>2]|0;o=wl(f[k>>2]|0,f[k+4>>2]|0,t|0,s|0)|0;k=H;if(!(r>>>0>k>>>0|(r|0)==(k|0)&p>>>0>o>>>0)){o=vl(t|0,s|0,p|0,r|0)|0;r=q;f[r>>2]=o;f[r+4>>2]=H;break}}v=0;u=d;return v|0}while(0);if(!(Jg(a)|0)){v=0;u=d;return v|0}l=c;m=a;n=l+40|0;do{f[l>>2]=f[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));m=f[g>>2]|0;l=Ka[f[(f[m>>2]|0)+32>>2]&127](m)|0;do if((((h[l+36>>0]|0)<<8|(h[l+37>>0]|0))&65535)<514){m=f[g>>2]|0;n=(Ka[f[(f[m>>2]|0)+32>>2]&127](m)|0)+36|0;if(((h[n>>0]|0)<<8&65535)<512){n=c+8|0;m=f[n>>2]|0;r=f[n+4>>2]|0;n=c+16|0;o=n;q=f[o>>2]|0;p=vl(q|0,f[o+4>>2]|0,4,0)|0;o=H;if(!((r|0)<(o|0)|(r|0)==(o|0)&m>>>0<p>>>0)){m=(f[c>>2]|0)+q|0;q=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;f[e>>2]=q;m=n;f[m>>2]=p;f[m+4>>2]=o;w=q;x=19}}else if(zh(e,c)|0){w=f[e>>2]|0;x=19}if((((x|0)==19?(q=f[a+152>>2]|0,w>>>0<q>>>0):0)?(o=c+8|0,m=f[o+4>>2]|0,p=c+16|0,n=p,r=f[n>>2]|0,s=f[n+4>>2]|0,(m|0)>(s|0)|((m|0)==(s|0)?(f[o>>2]|0)>>>0>r>>>0:0)):0)?(o=b[(f[c>>2]|0)+r>>0]|0,m=vl(r|0,s|0,1,0)|0,s=p,f[s>>2]=m,f[s+4>>2]=H,o<<24>>24==0):0){f[a+176>>2]=2;f[a+180>>2]=7;y=q;break}v=0;u=d;return v|0}else{f[a+176>>2]=2;f[a+180>>2]=7;y=f[a+152>>2]|0}while(0);if((y|0)<0){v=0;u=d;return v|0}w=a+156|0;f[e>>2]=0;x=a+160|0;g=f[w>>2]|0;l=(f[x>>2]|0)-g>>2;if(y>>>0<=l>>>0)if(y>>>0<l>>>0){f[x>>2]=g+(y<<2);z=2;A=7}else{z=2;A=7}else{Of(w,y-l|0,e);z=f[a+176>>2]|0;A=f[a+180>>2]|0}l=A-z+1|0;z=a+184|0;A=a+188|0;y=f[A>>2]|0;w=f[z>>2]|0;g=(y-w|0)/12|0;x=w;w=y;if(l>>>0<=g>>>0)if(l>>>0<g>>>0){q=x+(l*12|0)|0;if((q|0)!=(w|0)){x=w;do{w=x;x=x+-12|0;o=f[x>>2]|0;if(o|0){f[w+-8>>2]=o;Ko(o)}}while((x|0)!=(q|0))}f[A>>2]=q;B=q}else B=y;else{Ie(z,l-g|0);B=f[A>>2]|0}g=a+196|0;l=f[z>>2]|0;y=(B-l|0)/12|0;q=a+200|0;a=f[g>>2]|0;x=(f[q>>2]|0)-a>>2;if(y>>>0<=x>>>0)if(y>>>0<x>>>0){f[q>>2]=a+(y<<2);C=B;D=l}else{C=B;D=l}else{Eg(g,y-x|0);C=f[A>>2]|0;D=f[z>>2]|0}if((C|0)==(D|0)){v=1;u=d;return v|0}D=0;do{zh(e,c)|0;C=f[e>>2]|0;if(C|0){x=f[z>>2]|0;y=x+(D*12|0)|0;l=x+(D*12|0)+4|0;B=f[y>>2]|0;a=(f[l>>2]|0)-B>>2;if(C>>>0<=a>>>0)if(C>>>0<a>>>0){f[l>>2]=B+(C<<2);E=x;F=C}else{E=x;F=C}else{Eg(y,C-a|0);E=f[z>>2]|0;F=f[e>>2]|0}kh(F,1,c,f[E+(D*12|0)>>2]|0)|0;f[(f[g>>2]|0)+(D<<2)>>2]=f[e>>2]}D=D+1|0}while(D>>>0<(((f[A>>2]|0)-(f[z>>2]|0)|0)/12|0)>>>0);v=1;u=d;return v|0}function Wb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=Ia,E=Ia,F=Ia,G=0,H=0,I=0,J=0;d=b[c+11>>0]|0;e=d<<24>>24<0;g=e?f[c>>2]|0:c;i=e?f[c+4>>2]|0:d&255;if(i>>>0>3){d=g;e=i;j=i;while(1){k=W(h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24,1540483477)|0;e=(W(k>>>24^k,1540483477)|0)^(W(e,1540483477)|0);j=j+-4|0;if(j>>>0<=3)break;else d=d+4|0}d=i+-4|0;j=d&-4;l=d-j|0;m=g+(j+4)|0;o=e}else{l=i;m=g;o=i}switch(l|0){case 3:{p=h[m+2>>0]<<16^o;q=7;break}case 2:{p=o;q=7;break}case 1:{r=o;q=8;break}default:s=o}if((q|0)==7){r=h[m+1>>0]<<8^p;q=8}if((q|0)==8)s=W(r^h[m>>0],1540483477)|0;m=W(s>>>13^s,1540483477)|0;s=m>>>15^m;m=a+4|0;r=f[m>>2]|0;p=(r|0)==0;a:do if(!p){o=r+-1|0;l=(o&r|0)==0;if(!l)if(s>>>0<r>>>0)t=s;else t=(s>>>0)%(r>>>0)|0;else t=s&o;e=f[(f[a>>2]|0)+(t<<2)>>2]|0;if((e|0)!=0?(j=f[e>>2]|0,(j|0)!=0):0){e=(i|0)==0;if(l){if(e){l=j;while(1){d=f[l+4>>2]|0;if(!((d|0)==(s|0)|(d&o|0)==(t|0))){u=t;break a}d=b[l+8+11>>0]|0;if(!((d<<24>>24<0?f[l+12>>2]|0:d&255)|0)){v=l;break}l=f[l>>2]|0;if(!l){u=t;break a}}w=v+20|0;return w|0}l=j;b:while(1){d=f[l+4>>2]|0;if(!((d|0)==(s|0)|(d&o|0)==(t|0))){u=t;break a}d=l+8|0;k=b[d+11>>0]|0;x=k<<24>>24<0;y=k&255;do if(((x?f[l+12>>2]|0:y)|0)==(i|0)){k=f[d>>2]|0;if(x)if(!(Fi(k,g,i)|0)){v=l;q=68;break b}else break;if((b[g>>0]|0)==(k&255)<<24>>24){k=d;z=y;A=g;do{z=z+-1|0;k=k+1|0;if(!z){v=l;q=68;break b}A=A+1|0}while((b[k>>0]|0)==(b[A>>0]|0))}}while(0);l=f[l>>2]|0;if(!l){u=t;break a}}if((q|0)==68){w=v+20|0;return w|0}}if(e){l=j;while(1){o=f[l+4>>2]|0;if((o|0)!=(s|0)){if(o>>>0<r>>>0)B=o;else B=(o>>>0)%(r>>>0)|0;if((B|0)!=(t|0)){u=t;break a}}o=b[l+8+11>>0]|0;if(!((o<<24>>24<0?f[l+12>>2]|0:o&255)|0)){v=l;break}l=f[l>>2]|0;if(!l){u=t;break a}}w=v+20|0;return w|0}l=j;c:while(1){e=f[l+4>>2]|0;if((e|0)!=(s|0)){if(e>>>0<r>>>0)C=e;else C=(e>>>0)%(r>>>0)|0;if((C|0)!=(t|0)){u=t;break a}}e=l+8|0;o=b[e+11>>0]|0;y=o<<24>>24<0;d=o&255;do if(((y?f[l+12>>2]|0:d)|0)==(i|0)){o=f[e>>2]|0;if(y)if(!(Fi(o,g,i)|0)){v=l;q=68;break c}else break;if((b[g>>0]|0)==(o&255)<<24>>24){o=e;x=d;A=g;do{x=x+-1|0;o=o+1|0;if(!x){v=l;q=68;break c}A=A+1|0}while((b[o>>0]|0)==(b[A>>0]|0))}}while(0);l=f[l>>2]|0;if(!l){u=t;break a}}if((q|0)==68){w=v+20|0;return w|0}}else u=t}else u=0;while(0);t=wk(24)|0;Yi(t+8|0,c);f[t+20>>2]=0;f[t+4>>2]=s;f[t>>2]=0;c=a+12|0;D=_(((f[c>>2]|0)+1|0)>>>0);E=_(r>>>0);F=_(n[a+16>>2]);do if(p|_(F*E)<D){g=r<<1|(r>>>0<3|(r+-1&r|0)!=0)&1;i=~~_(V(_(D/F)))>>>0;Xf(a,g>>>0<i>>>0?i:g);g=f[m>>2]|0;i=g+-1|0;if(!(i&g)){G=g;H=i&s;break}if(s>>>0<g>>>0){G=g;H=s}else{G=g;H=(s>>>0)%(g>>>0)|0}}else{G=r;H=u}while(0);u=(f[a>>2]|0)+(H<<2)|0;H=f[u>>2]|0;if(!H){r=a+8|0;f[t>>2]=f[r>>2];f[r>>2]=t;f[u>>2]=r;r=f[t>>2]|0;if(r|0){u=f[r+4>>2]|0;r=G+-1|0;if(r&G)if(u>>>0<G>>>0)I=u;else I=(u>>>0)%(G>>>0)|0;else I=u&r;J=(f[a>>2]|0)+(I<<2)|0;q=66}}else{f[t>>2]=f[H>>2];J=H;q=66}if((q|0)==66)f[J>>2]=t;f[c>>2]=(f[c>>2]|0)+1;v=t;w=v+20|0;return w|0}function Xb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=a+8|0;f[g>>2]=e;d=a+32|0;h=a+36|0;i=f[d>>2]|0;j=(f[h>>2]|0)-i>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[h>>2]=i+(e<<2)}else Eg(d,e-j|0);j=f[a+48>>2]|0;d=f[a+52>>2]|0;i=e>>>0>1073741823?-1:e<<2;h=Ho(i)|0;oh(h|0,0,i|0)|0;i=f[g>>2]|0;if((i|0)>0){k=a+16|0;l=a+32|0;m=a+12|0;n=0;do{o=f[h+(n<<2)>>2]|0;p=f[k>>2]|0;do if((o|0)<=(p|0)){q=f[m>>2]|0;r=f[l>>2]|0;s=r+(n<<2)|0;if((o|0)<(q|0)){f[s>>2]=q;t=r;break}else{f[s>>2]=o;t=r;break}}else{r=f[l>>2]|0;f[r+(n<<2)>>2]=p;t=r}while(0);n=n+1|0;u=f[g>>2]|0}while((n|0)<(u|0));if((u|0)>0){n=a+20|0;l=0;do{p=(f[b+(l<<2)>>2]|0)+(f[t+(l<<2)>>2]|0)|0;o=c+(l<<2)|0;f[o>>2]=p;if((p|0)<=(f[k>>2]|0)){if((p|0)<(f[m>>2]|0)){v=(f[n>>2]|0)+p|0;w=19}}else{v=p-(f[n>>2]|0)|0;w=19}if((w|0)==19){w=0;f[o>>2]=v}l=l+1|0;o=f[g>>2]|0}while((l|0)<(o|0));x=o}else x=u}else x=i;i=f[a+56>>2]|0;u=f[i>>2]|0;l=(f[i+4>>2]|0)-u|0;v=l>>2;if((l|0)<=4){Io(h);return 1}l=u;u=j+12|0;n=a+16|0;m=a+32|0;k=a+12|0;t=(e|0)>0;o=a+20|0;a=1;p=x;while(1){if(v>>>0<=a>>>0){w=25;break}x=f[l+(a<<2)>>2]|0;r=W(a,e)|0;if((x|0)!=-1?(s=f[(f[u>>2]|0)+(x<<2)>>2]|0,(s|0)!=-1):0){x=f[j>>2]|0;q=f[d>>2]|0;y=f[q+(f[x+(s<<2)>>2]<<2)>>2]|0;z=s+1|0;A=((z>>>0)%3|0|0)==0?s+-2|0:z;if((A|0)==-1)B=-1;else B=f[x+(A<<2)>>2]|0;A=f[q+(B<<2)>>2]|0;z=(((s>>>0)%3|0|0)==0?2:-1)+s|0;if((z|0)==-1)C=-1;else C=f[x+(z<<2)>>2]|0;z=f[q+(C<<2)>>2]|0;if((y|0)<(a|0)&(A|0)<(a|0)&(z|0)<(a|0)){q=W(y,e)|0;y=W(A,e)|0;A=W(z,e)|0;if(t){z=0;do{f[h+(z<<2)>>2]=(f[c+(z+A<<2)>>2]|0)+(f[c+(z+y<<2)>>2]|0)-(f[c+(z+q<<2)>>2]|0);z=z+1|0}while((z|0)!=(e|0))}z=b+(r<<2)|0;q=c+(r<<2)|0;if((p|0)>0){y=0;do{A=f[h+(y<<2)>>2]|0;x=f[n>>2]|0;do if((A|0)<=(x|0)){s=f[k>>2]|0;D=f[m>>2]|0;E=D+(y<<2)|0;if((A|0)<(s|0)){f[E>>2]=s;F=D;break}else{f[E>>2]=A;F=D;break}}else{D=f[m>>2]|0;f[D+(y<<2)>>2]=x;F=D}while(0);y=y+1|0;G=f[g>>2]|0}while((y|0)<(G|0));if((G|0)>0){y=0;do{x=(f[z+(y<<2)>>2]|0)+(f[F+(y<<2)>>2]|0)|0;A=q+(y<<2)|0;f[A>>2]=x;if((x|0)<=(f[n>>2]|0)){if((x|0)<(f[k>>2]|0)){H=(f[o>>2]|0)+x|0;w=66}}else{H=x-(f[o>>2]|0)|0;w=66}if((w|0)==66){w=0;f[A>>2]=H}y=y+1|0;A=f[g>>2]|0}while((y|0)<(A|0));I=A}else I=G}else I=p}else w=36}else w=36;if((w|0)==36){w=0;y=c+((W(a+-1|0,e)|0)<<2)|0;q=b+(r<<2)|0;z=c+(r<<2)|0;if((p|0)>0){A=0;do{x=f[y+(A<<2)>>2]|0;D=f[n>>2]|0;do if((x|0)<=(D|0)){E=f[k>>2]|0;s=f[m>>2]|0;J=s+(A<<2)|0;if((x|0)<(E|0)){f[J>>2]=E;K=s;break}else{f[J>>2]=x;K=s;break}}else{s=f[m>>2]|0;f[s+(A<<2)>>2]=D;K=s}while(0);A=A+1|0;L=f[g>>2]|0}while((A|0)<(L|0));if((L|0)>0){A=0;do{y=(f[q+(A<<2)>>2]|0)+(f[K+(A<<2)>>2]|0)|0;r=z+(A<<2)|0;f[r>>2]=y;if((y|0)<=(f[n>>2]|0)){if((y|0)<(f[k>>2]|0)){M=(f[o>>2]|0)+y|0;w=50}}else{M=y-(f[o>>2]|0)|0;w=50}if((w|0)==50){w=0;f[r>>2]=M}A=A+1|0;r=f[g>>2]|0}while((A|0)<(r|0));I=r}else I=L}else I=p}a=a+1|0;if((a|0)>=(v|0)){w=23;break}else p=I}if((w|0)==23){Io(h);return 1}else if((w|0)==25)$n(i);return 0}function Yb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;g=a+8|0;f[g>>2]=e;d=a+32|0;h=a+36|0;i=f[d>>2]|0;j=(f[h>>2]|0)-i>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[h>>2]=i+(e<<2)}else Eg(d,e-j|0);j=f[a+48>>2]|0;d=f[a+52>>2]|0;i=e>>>0>1073741823?-1:e<<2;h=Ho(i)|0;oh(h|0,0,i|0)|0;i=f[g>>2]|0;if((i|0)>0){k=a+16|0;l=a+32|0;m=a+12|0;n=0;do{o=f[h+(n<<2)>>2]|0;p=f[k>>2]|0;do if((o|0)<=(p|0)){q=f[m>>2]|0;r=f[l>>2]|0;s=r+(n<<2)|0;if((o|0)<(q|0)){f[s>>2]=q;t=r;break}else{f[s>>2]=o;t=r;break}}else{r=f[l>>2]|0;f[r+(n<<2)>>2]=p;t=r}while(0);n=n+1|0;u=f[g>>2]|0}while((n|0)<(u|0));if((u|0)>0){n=a+20|0;l=0;do{p=(f[b+(l<<2)>>2]|0)+(f[t+(l<<2)>>2]|0)|0;o=c+(l<<2)|0;f[o>>2]=p;if((p|0)<=(f[k>>2]|0)){if((p|0)<(f[m>>2]|0)){v=(f[n>>2]|0)+p|0;w=19}}else{v=p-(f[n>>2]|0)|0;w=19}if((w|0)==19){w=0;f[o>>2]=v}l=l+1|0;o=f[g>>2]|0}while((l|0)<(o|0));x=o}else x=u}else x=i;i=f[a+56>>2]|0;u=f[i>>2]|0;l=(f[i+4>>2]|0)-u|0;v=l>>2;if((l|0)<=4){Io(h);return 1}l=u;u=a+16|0;n=a+32|0;m=a+12|0;k=j+64|0;t=j+28|0;o=(e|0)>0;p=a+20|0;a=1;r=x;while(1){if(v>>>0<=a>>>0){w=25;break}x=f[l+(a<<2)>>2]|0;s=W(a,e)|0;if((((x|0)!=-1?(f[(f[j>>2]|0)+(x>>>5<<2)>>2]&1<<(x&31)|0)==0:0)?(q=f[(f[(f[k>>2]|0)+12>>2]|0)+(x<<2)>>2]|0,(q|0)!=-1):0)?(x=f[t>>2]|0,y=f[d>>2]|0,z=f[y+(f[x+(q<<2)>>2]<<2)>>2]|0,A=q+1|0,B=f[y+(f[x+((((A>>>0)%3|0|0)==0?q+-2|0:A)<<2)>>2]<<2)>>2]|0,A=f[y+(f[x+((((q>>>0)%3|0|0)==0?2:-1)+q<<2)>>2]<<2)>>2]|0,(z|0)<(a|0)&(B|0)<(a|0)&(A|0)<(a|0)):0){q=W(z,e)|0;z=W(B,e)|0;B=W(A,e)|0;if(o){A=0;do{f[h+(A<<2)>>2]=(f[c+(A+B<<2)>>2]|0)+(f[c+(A+z<<2)>>2]|0)-(f[c+(A+q<<2)>>2]|0);A=A+1|0}while((A|0)!=(e|0))}A=b+(s<<2)|0;q=c+(s<<2)|0;if((r|0)>0){z=0;do{B=f[h+(z<<2)>>2]|0;x=f[u>>2]|0;do if((B|0)<=(x|0)){y=f[m>>2]|0;C=f[n>>2]|0;D=C+(z<<2)|0;if((B|0)<(y|0)){f[D>>2]=y;E=C;break}else{f[D>>2]=B;E=C;break}}else{C=f[n>>2]|0;f[C+(z<<2)>>2]=x;E=C}while(0);z=z+1|0;F=f[g>>2]|0}while((z|0)<(F|0));if((F|0)>0){z=0;do{x=(f[A+(z<<2)>>2]|0)+(f[E+(z<<2)>>2]|0)|0;B=q+(z<<2)|0;f[B>>2]=x;if((x|0)<=(f[u>>2]|0)){if((x|0)<(f[m>>2]|0)){G=(f[p>>2]|0)+x|0;w=63}}else{G=x-(f[p>>2]|0)|0;w=63}if((w|0)==63){w=0;f[B>>2]=G}z=z+1|0;B=f[g>>2]|0}while((z|0)<(B|0));H=B}else H=F}else H=r}else{z=c+((W(a+-1|0,e)|0)<<2)|0;q=b+(s<<2)|0;A=c+(s<<2)|0;if((r|0)>0){B=0;do{x=f[z+(B<<2)>>2]|0;C=f[u>>2]|0;do if((x|0)<=(C|0)){D=f[m>>2]|0;y=f[n>>2]|0;I=y+(B<<2)|0;if((x|0)<(D|0)){f[I>>2]=D;J=y;break}else{f[I>>2]=x;J=y;break}}else{y=f[n>>2]|0;f[y+(B<<2)>>2]=C;J=y}while(0);B=B+1|0;K=f[g>>2]|0}while((B|0)<(K|0));if((K|0)>0){B=0;do{z=(f[q+(B<<2)>>2]|0)+(f[J+(B<<2)>>2]|0)|0;s=A+(B<<2)|0;f[s>>2]=z;if((z|0)<=(f[u>>2]|0)){if((z|0)<(f[m>>2]|0)){L=(f[p>>2]|0)+z|0;w=47}}else{L=z-(f[p>>2]|0)|0;w=47}if((w|0)==47){w=0;f[s>>2]=L}B=B+1|0;s=f[g>>2]|0}while((B|0)<(s|0));H=s}else H=K}else H=r}a=a+1|0;if((a|0)>=(v|0)){w=23;break}else r=H}if((w|0)==23){Io(h);return 1}else if((w|0)==25)$n(i);return 0}function Zb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;c=u;u=u+16|0;d=c;e=f[b>>2]|0;b=a+8|0;g=e+1|0;if((e|0)!=-1){h=((g>>>0)%3|0|0)==0?e+-2|0:g;g=e+(((e>>>0)%3|0|0)==0?2:-1)|0;i=a+216|0;j=a+220|0;k=a+368|0;if((f[(f[(f[b>>2]|0)+12>>2]|0)+(e<<2)>>2]|0)!=-1){l=f[j>>2]|0;m=f[i>>2]|0;n=m;if((l|0)==(m|0)){o=g;p=d;q=d;r=n;s=n;t=h;v=l;w=l;x=k;y=i;z=j;A=i}else{l=0;do{if(pi((f[k>>2]|0)+(l<<4)|0)|0){n=f[i>>2]|0;f[d>>2]=e;m=n+(l*144|0)+136|0;B=f[m>>2]|0;if(B>>>0<(f[n+(l*144|0)+140>>2]|0)>>>0){f[B>>2]=e;f[m>>2]=B+4}else Ng(n+(l*144|0)+132|0,d)}l=l+1|0;C=f[j>>2]|0;D=f[i>>2]|0}while(l>>>0<((C-D|0)/144|0)>>>0);l=D;o=g;p=d;q=d;r=l;s=l;t=h;v=C;w=D;x=k;y=i;z=j;A=i}}else{E=d;F=k;G=d;H=i;I=g;J=h;K=j;L=i;M=4}}else{i=a+216|0;E=d;F=a+368|0;G=d;H=i;I=-1;J=-1;K=a+220|0;L=i;M=4}if((M|0)==4){M=f[K>>2]|0;i=f[L>>2]|0;a=i;if((M|0)==(i|0)){o=I;p=E;q=G;r=a;s=a;t=J;v=M;w=M;x=F;y=H;z=K;A=L}else{j=0;h=a;g=a;k=M;M=a;a=i;while(1){f[d>>2]=e;i=M+(j*144|0)+136|0;D=f[i>>2]|0;if(D>>>0<(f[M+(j*144|0)+140>>2]|0)>>>0){f[D>>2]=e;f[i>>2]=D+4;N=a;O=h;P=g;Q=a;R=k}else{Ng(M+(j*144|0)+132|0,d);D=f[L>>2]|0;i=D;N=i;O=i;P=i;Q=D;R=f[K>>2]|0}j=j+1|0;if(j>>>0>=((R-Q|0)/144|0)>>>0){o=I;p=E;q=G;r=O;s=P;t=J;v=R;w=Q;x=F;y=H;z=K;A=L;break}else{h=O;g=P;k=R;M=N;a=Q}}}}if((t|0)!=-1?(f[(f[(f[b>>2]|0)+12>>2]|0)+(t<<2)>>2]|0)!=-1:0)if((v|0)==(w|0)){S=w;T=w;U=r}else{Q=0;do{if(pi((f[x>>2]|0)+(Q<<4)|0)|0){a=f[y>>2]|0;f[d>>2]=t;N=a+(Q*144|0)+136|0;M=f[N>>2]|0;if(M>>>0<(f[a+(Q*144|0)+140>>2]|0)>>>0){f[M>>2]=t;f[N>>2]=M+4}else Ng(a+(Q*144|0)+132|0,d)}Q=Q+1|0;V=f[z>>2]|0;W=f[A>>2]|0}while(Q>>>0<((V-W|0)/144|0)>>>0);S=V;T=W;U=W}else if((v|0)==(w|0)){S=w;T=w;U=r}else{W=0;V=w;w=r;r=v;v=s;while(1){f[d>>2]=t;s=v+(W*144|0)+136|0;Q=f[s>>2]|0;if(Q>>>0<(f[v+(W*144|0)+140>>2]|0)>>>0){f[Q>>2]=t;f[s>>2]=Q+4;X=V;Y=V;Z=r;_=w}else{Ng(v+(W*144|0)+132|0,d);Q=f[A>>2]|0;s=Q;X=s;Y=Q;Z=f[z>>2]|0;_=s}W=W+1|0;if(W>>>0>=((Z-Y|0)/144|0)>>>0){S=Z;T=Y;U=_;break}else{V=Y;w=_;r=Z;v=X}}}if((o|0)!=-1?(f[(f[(f[b>>2]|0)+12>>2]|0)+(o<<2)>>2]|0)!=-1:0){if((S|0)==(T|0)){u=c;return 1}b=0;do{if(pi((f[x>>2]|0)+(b<<4)|0)|0){X=f[y>>2]|0;f[d>>2]=o;v=X+(b*144|0)+136|0;Z=f[v>>2]|0;if(Z>>>0<(f[X+(b*144|0)+140>>2]|0)>>>0){f[Z>>2]=o;f[v>>2]=Z+4}else Ng(X+(b*144|0)+132|0,d)}b=b+1|0}while(b>>>0<(((f[z>>2]|0)-(f[A>>2]|0)|0)/144|0)>>>0);u=c;return 1}if((S|0)==(T|0)){u=c;return 1}b=0;y=U;U=T;T=S;while(1){f[d>>2]=o;S=y+(b*144|0)+136|0;x=f[S>>2]|0;if(x>>>0<(f[y+(b*144|0)+140>>2]|0)>>>0){f[x>>2]=o;f[S>>2]=x+4;$=U;aa=T}else{Ng(y+(b*144|0)+132|0,d);$=f[A>>2]|0;aa=f[z>>2]|0}b=b+1|0;if(b>>>0>=((aa-$|0)/144|0)>>>0)break;else{y=$;U=$;T=aa}}u=c;return 1}function _b(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;d=u;u=u+16|0;e=d+12|0;g=d;h=d+8|0;i=d+4|0;j=a+8+(b*12|0)|0;k=a+8+(b*12|0)+4|0;f[k>>2]=f[j>>2];l=f[c>>2]|0;m=a+4|0;f[g>>2]=(l|0)==-1?-1:(l>>>0)/3|0;n=a+56|0;o=a+8+(b*12|0)+8|0;p=0;q=l;r=l;while(1){l=(p|0)==1;if(l){s=(q|0)==-1;do if(!s)if(!((q>>>0)%3|0)){t=q+2|0;break}else{t=q+-1|0;break}else t=-1;while(0);f[h>>2]=t;f[e>>2]=f[h>>2];if((af(a,e)|0)==-1){v=q;break}w=q+1|0;if(s){x=10;break}y=((w>>>0)%3|0|0)==0?q+-2|0:w;f[c>>2]=y;w=y+1|0;if((y|0)==-1){z=q;x=14;break}A=((w>>>0)%3|0|0)==0?y+-2|0:w;if((A|0)==-1){z=q;x=14;break}w=f[(f[(f[m>>2]|0)+12>>2]|0)+(A<<2)>>2]|0;A=w+1|0;if((w|0)==-1){z=q;x=14;break}y=((A>>>0)%3|0|0)==0?w+-2|0:A;f[c>>2]=y;if((y|0)==-1){v=q;break}A=(y>>>0)/3|0;f[g>>2]=A;B=y;C=A}else{B=r;C=f[g>>2]|0}A=(f[n>>2]|0)+(C>>>5<<2)|0;y=1<<(C&31);w=f[A>>2]|0;if(!(y&w)){a:do if(l){D=0;E=q;F=y;G=w;H=A;I=B;while(1){f[H>>2]=G|F;J=f[k>>2]|0;if((J|0)==(f[o>>2]|0))Ng(j,g);else{f[J>>2]=f[g>>2];f[k>>2]=J+4}J=D+1|0;if(!D){K=E;L=I}else{M=(I|0)==-1;do if(!(J&1))if(!M)if(!((I>>>0)%3|0)){N=I+2|0;O=I;break}else{N=I+-1|0;O=I;break}else{N=-1;O=I}else{P=I+1|0;if(M){N=-1;O=E}else{N=((P>>>0)%3|0|0)==0?I+-2|0:P;O=E}}while(0);f[c>>2]=N;K=O;L=N}f[i>>2]=L;f[e>>2]=f[i>>2];M=af(a,e)|0;f[c>>2]=M;if((M|0)==-1){Q=J;R=K;S=-1;break a}P=(M>>>0)/3|0;f[g>>2]=P;H=(f[n>>2]|0)+(P>>>5<<2)|0;F=1<<(P&31);G=f[H>>2]|0;if(F&G|0){Q=J;R=K;S=M;break}else{D=J;E=K;I=M}}}else{I=0;E=B;D=y;G=w;F=A;while(1){f[F>>2]=G|D;H=f[k>>2]|0;if((H|0)==(f[o>>2]|0))Ng(j,g);else{f[H>>2]=f[g>>2];f[k>>2]=H+4}H=I+1|0;if(!I)T=E;else{M=(E|0)==-1;do if(!(H&1))if(!M)if(!((E>>>0)%3|0)){U=E+2|0;break}else{U=E+-1|0;break}else U=-1;else{P=E+1|0;if(M)U=-1;else U=((P>>>0)%3|0|0)==0?E+-2|0:P}while(0);f[c>>2]=U;T=U}f[i>>2]=T;f[e>>2]=f[i>>2];M=af(a,e)|0;f[c>>2]=M;if((M|0)==-1){Q=H;R=q;S=-1;break a}J=(M>>>0)/3|0;f[g>>2]=J;F=(f[n>>2]|0)+(J>>>5<<2)|0;D=1<<(J&31);G=f[F>>2]|0;if(D&G|0){Q=H;R=q;S=M;break}else{I=H;E=M}}}while(0);if((Q&1|0)==0|l^1){V=R;W=S}else{A=(f[k>>2]|0)+-4|0;w=f[A>>2]|0;y=(f[n>>2]|0)+(w>>>5<<2)|0;f[y>>2]=f[y>>2]&~(1<<(w&31));f[k>>2]=A;V=R;W=S}}else{V=q;W=B}p=p+1|0;if(p>>>0>=2){v=V;break}else{q=V;r=W}}if((x|0)==10){f[c>>2]=-1;z=-1;x=14}if((x|0)==14){f[c>>2]=-1;v=z}f[a+44+(b<<2)>>2]=v;v=f[k>>2]|0;k=f[j>>2]|0;j=k;if((v|0)==(k|0)){u=d;return}b=f[n>>2]|0;n=v-k>>2;k=0;do{v=f[j+(k<<2)>>2]|0;a=b+(v>>>5<<2)|0;f[a>>2]=f[a>>2]&~(1<<(v&31));k=k+1|0}while(k>>>0<n>>>0);u=d;return}function $b(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0;e=u;u=u+672|0;g=e;i=e+656|0;j=e+4|0;k=c+8|0;l=k;m=f[l>>2]|0;n=f[l+4>>2]|0;l=c+16|0;o=l;p=f[o>>2]|0;q=vl(p|0,f[o+4>>2]|0,4,0)|0;o=H;if((n|0)<(o|0)|(n|0)==(o|0)&m>>>0<q>>>0){r=0;u=e;return r|0}q=(f[c>>2]|0)+p|0;p=h[q>>0]|h[q+1>>0]<<8|h[q+2>>0]<<16|h[q+3>>0]<<24;b[a>>0]=p;b[a+1>>0]=p>>8;b[a+2>>0]=p>>16;b[a+3>>0]=p>>24;q=l;m=f[q>>2]|0;o=f[q+4>>2]|0;q=vl(m|0,o|0,4,0)|0;n=l;f[n>>2]=q;f[n+4>>2]=H;if(p>>>0>31){r=0;u=e;return r|0}p=k;n=f[p>>2]|0;s=f[p+4>>2]|0;p=vl(m|0,o|0,8,0)|0;o=H;if((s|0)<(o|0)|(s|0)==(o|0)&n>>>0<p>>>0){r=0;u=e;return r|0}p=a+4|0;n=(f[c>>2]|0)+q|0;q=h[n>>0]|h[n+1>>0]<<8|h[n+2>>0]<<16|h[n+3>>0]<<24;b[p>>0]=q;b[p+1>>0]=q>>8;b[p+2>>0]=q>>16;b[p+3>>0]=q>>24;q=l;p=f[q>>2]|0;n=f[q+4>>2]|0;q=vl(p|0,n|0,4,0)|0;o=l;f[o>>2]=q;f[o+4>>2]=H;o=a+12|0;s=k;m=f[s>>2]|0;t=f[s+4>>2]|0;s=vl(p|0,n|0,8,0)|0;n=H;if((t|0)<(n|0)|(t|0)==(n|0)&m>>>0<s>>>0){r=0;u=e;return r|0}s=(f[c>>2]|0)+q|0;q=h[s>>0]|h[s+1>>0]<<8|h[s+2>>0]<<16|h[s+3>>0]<<24;b[o>>0]=q;b[o+1>>0]=q>>8;b[o+2>>0]=q>>16;b[o+3>>0]=q>>24;s=l;m=f[s>>2]|0;n=f[s+4>>2]|0;s=vl(m|0,n|0,4,0)|0;t=l;f[t>>2]=s;f[t+4>>2]=H;t=a+16|0;a=k;k=f[a>>2]|0;p=f[a+4>>2]|0;a=vl(m|0,n|0,8,0)|0;n=H;if((p|0)<(n|0)|(p|0)==(n|0)&k>>>0<a>>>0){r=0;u=e;return r|0}a=(f[c>>2]|0)+s|0;s=h[a>>0]|h[a+1>>0]<<8|h[a+2>>0]<<16|h[a+3>>0]<<24;b[t>>0]=s;b[t+1>>0]=s>>8;b[t+2>>0]=s>>16;b[t+3>>0]=s>>24;a=l;k=vl(f[a>>2]|0,f[a+4>>2]|0,4,0)|0;a=l;f[a>>2]=k;f[a+4>>2]=H;if(s>>>0>6){f[g>>2]=s;kl(13491,g)|0;r=0;u=e;return r|0}f[i>>2]=d;a:do if(!q)v=17;else{Tg(d,q);switch(f[t>>2]|0){case 0:{ve(j,3);Kd(j,c,i)|0;Cf(j);v=17;break a;break}case 1:{ve(j,3);Jd(j,c,i)|0;Cf(j);v=17;break a;break}case 2:{we(j,3);Md(j,c,i)|0;Lf(j);v=17;break a;break}case 3:{we(j,3);Ld(j,c,i)|0;Lf(j);v=17;break a;break}case 4:{re(j,3);Id(j,c,i)|0;jg(j);v=17;break a;break}case 5:{re(j,3);Hd(j,c,i)|0;jg(j);v=17;break a;break}case 6:{re(j,3);Gd(j,c,i)|0;jg(j);v=17;break a;break}default:{w=0;break a}}}while(0);if((v|0)==17)w=(((f[d+4>>2]|0)-(f[d>>2]|0)|0)/12|0|0)==(f[o>>2]|0);r=w;u=e;return r|0}function ac(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,t=0,v=0,w=0,x=Ia,y=Ia,z=Ia,A=Ia,B=0,C=0,D=0,E=Ia,F=Ia,G=Ia,H=Ia,J=Ia,L=Ia,M=Ia,N=Ia,O=Ia,P=Ia,Q=Ia,R=0,S=0;g=u;u=u+48|0;h=g+40|0;i=g+36|0;j=g+24|0;k=g+12|0;l=g;m=a+48|0;o=f[c>>2]|0;c=o+1|0;do if((o|0)!=-1){p=((c>>>0)%3|0|0)==0?o+-2|0:c;if(!((o>>>0)%3|0)){q=o+2|0;r=p;break}else{q=o+-1|0;r=p;break}}else{q=-1;r=-1}while(0);o=f[(f[m>>2]|0)+28>>2]|0;m=f[o+(r<<2)>>2]|0;r=f[o+(q<<2)>>2]|0;q=f[a+52>>2]|0;o=f[q>>2]|0;c=(f[q+4>>2]|0)-o>>2;if(c>>>0<=m>>>0)$n(q);p=o;o=f[p+(m<<2)>>2]|0;if(c>>>0<=r>>>0)$n(q);q=f[p+(r<<2)>>2]|0;r=(o|0)<(e|0);if(!(r&(q|0)<(e|0))){do if(r){p=a+72|0;c=f[p>>2]|0;t=W(c,o)|0;v=p;w=c}else{if((e|0)>0){c=a+72|0;p=f[c>>2]|0;t=W(p,e+-1|0)|0;v=c;w=p;break}p=a+72|0;if((f[p>>2]|0)<=0){u=g;return}c=f[a+68>>2]|0;m=0;do{f[c+(m<<2)>>2]=0;m=m+1|0}while((m|0)<(f[p>>2]|0));u=g;return}while(0);if((w|0)<=0){u=g;return}w=f[a+68>>2]|0;r=0;do{f[w+(r<<2)>>2]=f[d+(r+t<<2)>>2];r=r+1|0}while((r|0)<(f[v>>2]|0));u=g;return}v=f[a+72>>2]|0;r=W(v,o)|0;x=_(f[d+(r<<2)>>2]|0);y=_(f[d+(r+1<<2)>>2]|0);r=W(v,q)|0;z=_(f[d+(r<<2)>>2]|0);A=_(f[d+(r+1<<2)>>2]|0);if(!(z!=x|A!=y)){r=f[a+68>>2]|0;f[r>>2]=~~z;f[r+4>>2]=~~A;u=g;return}r=a+64|0;d=f[(f[r>>2]|0)+(e<<2)>>2]|0;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;e=a+60|0;v=f[e>>2]|0;if(!(b[v+84>>0]|0))B=f[(f[v+68>>2]|0)+(d<<2)>>2]|0;else B=d;f[i>>2]=B;B=b[v+24>>0]|0;f[h>>2]=f[i>>2];ob(v,h,B,j)|0;B=f[(f[r>>2]|0)+(o<<2)>>2]|0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;o=f[e>>2]|0;if(!(b[o+84>>0]|0))C=f[(f[o+68>>2]|0)+(B<<2)>>2]|0;else C=B;f[i>>2]=C;C=b[o+24>>0]|0;f[h>>2]=f[i>>2];ob(o,h,C,k)|0;C=f[(f[r>>2]|0)+(q<<2)>>2]|0;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;q=f[e>>2]|0;if(!(b[q+84>>0]|0))D=f[(f[q+68>>2]|0)+(C<<2)>>2]|0;else D=C;f[i>>2]=D;D=b[q+24>>0]|0;f[h>>2]=f[i>>2];ob(q,h,D,l)|0;E=_(n[l>>2]);F=_(n[k>>2]);G=_(E-F);E=_(n[l+4>>2]);H=_(n[k+4>>2]);J=_(E-H);E=_(n[l+8>>2]);L=_(n[k+8>>2]);M=_(E-L);E=_(_(n[j>>2])-F);F=_(_(n[j+4>>2])-H);H=_(_(n[j+8>>2])-L);L=_(_(_(_(G*G)+_(0.0))+_(J*J))+_(M*M));if(L>_(0.0)?1:(f[a+88>>2]|0)<258){N=_(_(_(_(_(G*E)+_(0.0))+_(J*F))+_(M*H))/L);O=_(E-_(G*N));G=_(F-_(J*N));J=_(H-_(M*N));P=N;Q=_(K(_(_(_(J*J)+_(_(G*G)+_(_(O*O)+_(0.0))))/L)))}else{P=_(0.0);Q=_(0.0)}L=_(z-x);z=_(A-y);A=_(_(L*P)+x);x=_(L*Q);L=_(_(z*P)+y);y=_(z*Q);j=a+80|0;k=(f[j>>2]|0)+-1|0;l=(1<<(k&31)&f[(f[a+76>>2]|0)+(k>>>5<<2)>>2]|0)==0;f[j>>2]=k;Q=_(-y);z=_(A+(l?y:Q));Q=_(-x);y=_(L+(l?Q:x));if(((n[s>>2]=z,f[s>>2]|0)&2147483647)>>>0>2139095040){l=f[a+68>>2]|0;f[l>>2]=-2147483648;R=l}else{l=~~+I(+(+z+.5));k=f[a+68>>2]|0;f[k>>2]=l;R=k}if(((n[s>>2]=y,f[s>>2]|0)&2147483647)>>>0>2139095040)S=-2147483648;else S=~~+I(+(+y+.5));f[R+4>>2]=S;u=g;return}function bc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,t=0,v=0,w=0,x=Ia,y=Ia,z=Ia,A=Ia,B=0,C=0,D=0,E=Ia,F=Ia,G=Ia,H=Ia,J=Ia,L=Ia,M=Ia,N=Ia,O=Ia,P=Ia,Q=Ia,R=0,S=0;g=u;u=u+48|0;h=g+40|0;i=g+36|0;j=g+24|0;k=g+12|0;l=g;m=f[c>>2]|0;c=m+1|0;if((m|0)!=-1){o=((c>>>0)%3|0|0)==0?m+-2|0:c;c=(((m>>>0)%3|0|0)==0?2:-1)+m|0;m=f[a+48>>2]|0;if((o|0)==-1)p=-1;else p=f[(f[m>>2]|0)+(o<<2)>>2]|0;if((c|0)==-1){q=-1;r=p}else{q=f[(f[m>>2]|0)+(c<<2)>>2]|0;r=p}}else{q=-1;r=-1}p=f[a+52>>2]|0;c=f[p>>2]|0;m=(f[p+4>>2]|0)-c>>2;if(m>>>0<=r>>>0)$n(p);o=c;c=f[o+(r<<2)>>2]|0;if(m>>>0<=q>>>0)$n(p);p=f[o+(q<<2)>>2]|0;q=(c|0)<(e|0);if(!(q&(p|0)<(e|0))){do if(q){o=a+72|0;m=f[o>>2]|0;t=W(m,c)|0;v=o;w=m}else{if((e|0)>0){m=a+72|0;o=f[m>>2]|0;t=W(o,e+-1|0)|0;v=m;w=o;break}o=a+72|0;if((f[o>>2]|0)<=0){u=g;return}m=f[a+68>>2]|0;r=0;do{f[m+(r<<2)>>2]=0;r=r+1|0}while((r|0)<(f[o>>2]|0));u=g;return}while(0);if((w|0)<=0){u=g;return}w=f[a+68>>2]|0;q=0;do{f[w+(q<<2)>>2]=f[d+(q+t<<2)>>2];q=q+1|0}while((q|0)<(f[v>>2]|0));u=g;return}v=f[a+72>>2]|0;q=W(v,c)|0;x=_(f[d+(q<<2)>>2]|0);y=_(f[d+(q+1<<2)>>2]|0);q=W(v,p)|0;z=_(f[d+(q<<2)>>2]|0);A=_(f[d+(q+1<<2)>>2]|0);if(!(z!=x|A!=y)){q=f[a+68>>2]|0;f[q>>2]=~~z;f[q+4>>2]=~~A;u=g;return}q=a+64|0;d=f[(f[q>>2]|0)+(e<<2)>>2]|0;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;e=a+60|0;v=f[e>>2]|0;if(!(b[v+84>>0]|0))B=f[(f[v+68>>2]|0)+(d<<2)>>2]|0;else B=d;f[i>>2]=B;B=b[v+24>>0]|0;f[h>>2]=f[i>>2];ob(v,h,B,j)|0;B=f[(f[q>>2]|0)+(c<<2)>>2]|0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;c=f[e>>2]|0;if(!(b[c+84>>0]|0))C=f[(f[c+68>>2]|0)+(B<<2)>>2]|0;else C=B;f[i>>2]=C;C=b[c+24>>0]|0;f[h>>2]=f[i>>2];ob(c,h,C,k)|0;C=f[(f[q>>2]|0)+(p<<2)>>2]|0;f[l>>2]=0;f[l+4>>2]=0;f[l+8>>2]=0;p=f[e>>2]|0;if(!(b[p+84>>0]|0))D=f[(f[p+68>>2]|0)+(C<<2)>>2]|0;else D=C;f[i>>2]=D;D=b[p+24>>0]|0;f[h>>2]=f[i>>2];ob(p,h,D,l)|0;E=_(n[l>>2]);F=_(n[k>>2]);G=_(E-F);E=_(n[l+4>>2]);H=_(n[k+4>>2]);J=_(E-H);E=_(n[l+8>>2]);L=_(n[k+8>>2]);M=_(E-L);E=_(_(n[j>>2])-F);F=_(_(n[j+4>>2])-H);H=_(_(n[j+8>>2])-L);L=_(_(_(_(G*G)+_(0.0))+_(J*J))+_(M*M));if(L>_(0.0)?1:(f[a+88>>2]|0)<258){N=_(_(_(_(_(G*E)+_(0.0))+_(J*F))+_(M*H))/L);O=_(E-_(G*N));G=_(F-_(J*N));J=_(H-_(M*N));P=N;Q=_(K(_(_(_(J*J)+_(_(G*G)+_(_(O*O)+_(0.0))))/L)))}else{P=_(0.0);Q=_(0.0)}L=_(z-x);z=_(A-y);A=_(_(L*P)+x);x=_(L*Q);L=_(_(z*P)+y);y=_(z*Q);j=a+80|0;k=(f[j>>2]|0)+-1|0;l=(1<<(k&31)&f[(f[a+76>>2]|0)+(k>>>5<<2)>>2]|0)==0;f[j>>2]=k;Q=_(-y);z=_(A+(l?y:Q));Q=_(-x);y=_(L+(l?Q:x));if(((n[s>>2]=z,f[s>>2]|0)&2147483647)>>>0>2139095040){l=f[a+68>>2]|0;f[l>>2]=-2147483648;R=l}else{l=~~+I(+(+z+.5));k=f[a+68>>2]|0;f[k>>2]=l;R=k}if(((n[s>>2]=y,f[s>>2]|0)&2147483647)>>>0>2139095040)S=-2147483648;else S=~~+I(+(+y+.5));f[R+4>>2]=S;u=g;return}function cc(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=u;u=u+32|0;c=b+4|0;d=b;e=a+16|0;g=f[e>>2]|0;if(g>>>0>340){f[e>>2]=g+-341;g=a+4|0;e=f[g>>2]|0;h=f[e>>2]|0;i=e+4|0;f[g>>2]=i;e=a+8|0;j=f[e>>2]|0;k=a+12|0;l=f[k>>2]|0;m=l;do if((j|0)==(l|0)){n=i;o=f[a>>2]|0;p=o;if(i>>>0>o>>>0){q=((n-p>>2)+1|0)/-2|0;r=i+(q<<2)|0;s=j-n|0;if(!s)t=r;else{Rj(r|0,i|0,s|0)|0;t=(f[g>>2]|0)+(q<<2)|0}q=r+(s>>2<<2)|0;f[e>>2]=q;f[g>>2]=t;v=q;break}q=m-p|0;p=(q|0)==0?1:q>>1;q=p>>>2;do if(p)if(p>>>0>1073741823){s=qa(8)|0;Dm(s,13552);f[s>>2]=4908;ta(s|0,1128,105)}else{w=wk(p<<2)|0;break}else w=0;while(0);s=w;r=w+(q<<2)|0;x=r;y=w+(p<<2)|0;if((i|0)==(j|0)){z=x;A=o}else{B=((j+-4-n|0)>>>2)+1|0;C=r;r=i;while(1){f[C>>2]=f[r>>2];r=r+4|0;if((r|0)==(j|0))break;else C=C+4|0}z=w+(B+q<<2)|0;A=f[a>>2]|0}f[a>>2]=s;f[g>>2]=x;f[e>>2]=z;f[k>>2]=y;if(!A)v=z;else{Ko(A);v=f[e>>2]|0}}else v=j;while(0);f[v>>2]=h;f[e>>2]=(f[e>>2]|0)+4;u=b;return}e=a+8|0;h=f[e>>2]|0;v=a+4|0;j=h-(f[v>>2]|0)>>2;A=a+12|0;z=f[A>>2]|0;k=z-(f[a>>2]|0)|0;if(j>>>0>=k>>2>>>0){g=(k|0)==0?1:k>>1;k=c+12|0;f[k>>2]=0;f[c+16>>2]=a+12;do if(g)if(g>>>0>1073741823){w=qa(8)|0;Dm(w,13552);f[w>>2]=4908;ta(w|0,1128,105)}else{D=wk(g<<2)|0;break}else D=0;while(0);f[c>>2]=D;w=D+(j<<2)|0;j=c+8|0;f[j>>2]=w;i=c+4|0;f[i>>2]=w;f[k>>2]=D+(g<<2);g=wk(4092)|0;f[d>>2]=g;Ke(c,d);d=f[e>>2]|0;g=f[v>>2]|0;if((d|0)==(g|0)){E=g;F=d}else{g=d;do{g=g+-4|0;ue(c,g);G=f[v>>2]|0}while((g|0)!=(G|0));E=G;F=f[e>>2]|0}G=E;g=f[a>>2]|0;f[a>>2]=f[c>>2];f[c>>2]=g;f[v>>2]=f[i>>2];f[i>>2]=G;f[e>>2]=f[j>>2];f[j>>2]=F;i=f[A>>2]|0;f[A>>2]=f[k>>2];f[k>>2]=i;i=F;if((E|0)!=(i|0))f[j>>2]=i+(~((i+-4-G|0)>>>2)<<2);if(g|0)Ko(g);u=b;return}if((z|0)!=(h|0)){h=wk(4092)|0;f[c>>2]=h;Ke(a,c);u=b;return}h=wk(4092)|0;f[c>>2]=h;ue(a,c);c=f[v>>2]|0;h=f[c>>2]|0;z=c+4|0;f[v>>2]=z;c=f[e>>2]|0;g=f[A>>2]|0;G=g;do if((c|0)==(g|0)){i=z;j=f[a>>2]|0;E=j;if(z>>>0>j>>>0){F=((i-E>>2)+1|0)/-2|0;k=z+(F<<2)|0;d=c-i|0;if(!d)H=k;else{Rj(k|0,z|0,d|0)|0;H=(f[v>>2]|0)+(F<<2)|0}F=k+(d>>2<<2)|0;f[e>>2]=F;f[v>>2]=H;I=F;break}F=G-E|0;E=(F|0)==0?1:F>>1;F=E>>>2;do if(E)if(E>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{J=wk(E<<2)|0;break}else J=0;while(0);y=J;x=J+(F<<2)|0;s=x;q=J+(E<<2)|0;if((z|0)==(c|0)){K=s;L=j}else{B=((c+-4-i|0)>>>2)+1|0;d=x;x=z;while(1){f[d>>2]=f[x>>2];x=x+4|0;if((x|0)==(c|0))break;else d=d+4|0}K=J+(B+F<<2)|0;L=f[a>>2]|0}f[a>>2]=y;f[v>>2]=s;f[e>>2]=K;f[A>>2]=q;if(!L)I=K;else{Ko(L);I=f[e>>2]|0}}else I=c;while(0);f[I>>2]=h;f[e>>2]=(f[e>>2]|0)+4;u=b;return}function dc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=u;u=u+32|0;d=e+28|0;h=e+16|0;i=e+8|0;j=e;k=a+60|0;f[a+68>>2]=g;g=a+56|0;l=f[g>>2]|0;m=(f[l+4>>2]|0)-(f[l>>2]|0)|0;n=m>>2;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;if((m|0)<=0){u=e;return 1}m=h+4|0;o=h+8|0;p=a+104|0;q=a+108|0;r=i+4|0;s=a+100|0;t=a+8|0;v=a+16|0;w=a+32|0;x=a+12|0;y=a+20|0;a=f[l>>2]|0;if((f[l+4>>2]|0)==(a|0)){z=l;$n(z)}l=0;A=a;while(1){f[j>>2]=f[A+(l<<2)>>2];f[d>>2]=f[j>>2];Ob(k,d,h);a=f[h>>2]|0;B=(a|0)>-1?a:0-a|0;C=f[m>>2]|0;D=(C|0)>-1?C:0-C|0;E=vl(D|0,((D|0)<0)<<31>>31|0,B|0,((B|0)<0)<<31>>31|0)|0;B=f[o>>2]|0;D=(B|0)>-1;F=D?B:0-B|0;B=vl(E|0,H|0,F|0,((F|0)<0)<<31>>31|0)|0;F=H;do if(!((B|0)==0&(F|0)==0)){E=f[p>>2]|0;G=((E|0)<0)<<31>>31;I=Bk(E|0,G|0,a|0,((a|0)<0)<<31>>31|0)|0;J=ni(I|0,H|0,B|0,F|0)|0;f[h>>2]=J;I=Bk(E|0,G|0,C|0,((C|0)<0)<<31>>31|0)|0;G=ni(I|0,H|0,B|0,F|0)|0;f[m>>2]=G;I=E-((J|0)>-1?J:0-J|0)-((G|0)>-1?G:0-G|0)|0;if(D){f[o>>2]=I;break}else{f[o>>2]=0-I;break}}else f[h>>2]=f[p>>2];while(0);D=pi(q)|0;F=f[h>>2]|0;if(D){D=0-F|0;B=0-(f[m>>2]|0)|0;C=0-(f[o>>2]|0)|0;f[h>>2]=D;f[m>>2]=B;f[o>>2]=C;K=D;L=B}else{K=F;L=f[m>>2]|0}do if((K|0)<=-1){if((L|0)<0){F=f[o>>2]|0;M=(F|0)>-1?F:0-F|0;N=F}else{F=f[o>>2]|0;M=(f[s>>2]|0)-((F|0)>-1?F:0-F|0)|0;N=F}if((N|0)<0){O=(L|0)>-1?L:0-L|0;P=M;break}else{O=(f[s>>2]|0)-((L|0)>-1?L:0-L|0)|0;P=M;break}}else{F=f[p>>2]|0;O=(f[o>>2]|0)+F|0;P=F+L|0}while(0);F=(P|0)==0;B=(O|0)==0;D=f[s>>2]|0;do if(O|P){C=(D|0)==(O|0);if(!(F&C)){a=(D|0)==(P|0);if(!(B&a)){if(F?(I=f[p>>2]|0,(I|0)<(O|0)):0){Q=0;R=(I<<1)-O|0;break}if(a?(a=f[p>>2]|0,(a|0)>(O|0)):0){Q=P;R=(a<<1)-O|0;break}if(C?(C=f[p>>2]|0,(C|0)>(P|0)):0){Q=(C<<1)-P|0;R=O;break}if(B){C=f[p>>2]|0;Q=(C|0)<(P|0)?(C<<1)-P|0:P;R=0}else{Q=P;R=O}}else{Q=P;R=P}}else{Q=O;R=O}}else{Q=D;R=D}while(0);f[i>>2]=Q;f[r>>2]=R;D=l<<1;B=b+(D<<2)|0;F=c+(D<<2)|0;if((f[t>>2]|0)>0){D=0;C=Q;while(1){a=f[v>>2]|0;do if((C|0)<=(a|0)){I=f[x>>2]|0;G=f[w>>2]|0;J=G+(D<<2)|0;if((C|0)<(I|0)){f[J>>2]=I;S=G;break}else{f[J>>2]=C;S=G;break}}else{G=f[w>>2]|0;f[G+(D<<2)>>2]=a;S=G}while(0);a=D+1|0;T=f[t>>2]|0;if((a|0)>=(T|0))break;D=a;C=f[i+(a<<2)>>2]|0}if((T|0)>0){C=0;do{D=(f[B+(C<<2)>>2]|0)+(f[S+(C<<2)>>2]|0)|0;a=F+(C<<2)|0;f[a>>2]=D;if((D|0)<=(f[v>>2]|0)){if((D|0)<(f[x>>2]|0)){U=(f[y>>2]|0)+D|0;V=51}}else{U=D-(f[y>>2]|0)|0;V=51}if((V|0)==51){V=0;f[a>>2]=U}C=C+1|0}while((C|0)<(f[t>>2]|0))}}l=l+1|0;if((l|0)>=(n|0)){V=4;break}C=f[g>>2]|0;A=f[C>>2]|0;if((f[C+4>>2]|0)-A>>2>>>0<=l>>>0){z=C;V=5;break}}if((V|0)==4){u=e;return 1}else if((V|0)==5)$n(z);return 0}function ec(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=u;u=u+32|0;d=e+28|0;h=e+16|0;i=e+8|0;j=e;k=a+60|0;f[a+68>>2]=g;g=a+56|0;l=f[g>>2]|0;m=(f[l+4>>2]|0)-(f[l>>2]|0)|0;n=m>>2;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;if((m|0)<=0){u=e;return 1}m=h+4|0;o=h+8|0;p=a+104|0;q=a+108|0;r=i+4|0;s=a+100|0;t=a+8|0;v=a+16|0;w=a+32|0;x=a+12|0;y=a+20|0;a=f[l>>2]|0;if((f[l+4>>2]|0)==(a|0)){z=l;$n(z)}l=0;A=a;while(1){f[j>>2]=f[A+(l<<2)>>2];f[d>>2]=f[j>>2];Mb(k,d,h);a=f[h>>2]|0;B=(a|0)>-1?a:0-a|0;C=f[m>>2]|0;D=(C|0)>-1?C:0-C|0;E=vl(D|0,((D|0)<0)<<31>>31|0,B|0,((B|0)<0)<<31>>31|0)|0;B=f[o>>2]|0;D=(B|0)>-1;F=D?B:0-B|0;B=vl(E|0,H|0,F|0,((F|0)<0)<<31>>31|0)|0;F=H;do if(!((B|0)==0&(F|0)==0)){E=f[p>>2]|0;G=((E|0)<0)<<31>>31;I=Bk(E|0,G|0,a|0,((a|0)<0)<<31>>31|0)|0;J=ni(I|0,H|0,B|0,F|0)|0;f[h>>2]=J;I=Bk(E|0,G|0,C|0,((C|0)<0)<<31>>31|0)|0;G=ni(I|0,H|0,B|0,F|0)|0;f[m>>2]=G;I=E-((J|0)>-1?J:0-J|0)-((G|0)>-1?G:0-G|0)|0;if(D){f[o>>2]=I;break}else{f[o>>2]=0-I;break}}else f[h>>2]=f[p>>2];while(0);D=pi(q)|0;F=f[h>>2]|0;if(D){D=0-F|0;B=0-(f[m>>2]|0)|0;C=0-(f[o>>2]|0)|0;f[h>>2]=D;f[m>>2]=B;f[o>>2]=C;K=D;L=B}else{K=F;L=f[m>>2]|0}do if((K|0)<=-1){if((L|0)<0){F=f[o>>2]|0;M=(F|0)>-1?F:0-F|0;N=F}else{F=f[o>>2]|0;M=(f[s>>2]|0)-((F|0)>-1?F:0-F|0)|0;N=F}if((N|0)<0){O=(L|0)>-1?L:0-L|0;P=M;break}else{O=(f[s>>2]|0)-((L|0)>-1?L:0-L|0)|0;P=M;break}}else{F=f[p>>2]|0;O=(f[o>>2]|0)+F|0;P=F+L|0}while(0);F=(P|0)==0;B=(O|0)==0;D=f[s>>2]|0;do if(O|P){C=(D|0)==(O|0);if(!(F&C)){a=(D|0)==(P|0);if(!(B&a)){if(F?(I=f[p>>2]|0,(I|0)<(O|0)):0){Q=0;R=(I<<1)-O|0;break}if(a?(a=f[p>>2]|0,(a|0)>(O|0)):0){Q=P;R=(a<<1)-O|0;break}if(C?(C=f[p>>2]|0,(C|0)>(P|0)):0){Q=(C<<1)-P|0;R=O;break}if(B){C=f[p>>2]|0;Q=(C|0)<(P|0)?(C<<1)-P|0:P;R=0}else{Q=P;R=O}}else{Q=P;R=P}}else{Q=O;R=O}}else{Q=D;R=D}while(0);f[i>>2]=Q;f[r>>2]=R;D=l<<1;B=b+(D<<2)|0;F=c+(D<<2)|0;if((f[t>>2]|0)>0){D=0;C=Q;while(1){a=f[v>>2]|0;do if((C|0)<=(a|0)){I=f[x>>2]|0;G=f[w>>2]|0;J=G+(D<<2)|0;if((C|0)<(I|0)){f[J>>2]=I;S=G;break}else{f[J>>2]=C;S=G;break}}else{G=f[w>>2]|0;f[G+(D<<2)>>2]=a;S=G}while(0);a=D+1|0;T=f[t>>2]|0;if((a|0)>=(T|0))break;D=a;C=f[i+(a<<2)>>2]|0}if((T|0)>0){C=0;do{D=(f[B+(C<<2)>>2]|0)+(f[S+(C<<2)>>2]|0)|0;a=F+(C<<2)|0;f[a>>2]=D;if((D|0)<=(f[v>>2]|0)){if((D|0)<(f[x>>2]|0)){U=(f[y>>2]|0)+D|0;V=51}}else{U=D-(f[y>>2]|0)|0;V=51}if((V|0)==51){V=0;f[a>>2]=U}C=C+1|0}while((C|0)<(f[t>>2]|0))}}l=l+1|0;if((l|0)>=(n|0)){V=4;break}C=f[g>>2]|0;A=f[C>>2]|0;if((f[C+4>>2]|0)-A>>2>>>0<=l>>>0){z=C;V=5;break}}if((V|0)==4){u=e;return 1}else if((V|0)==5)$n(z);return 0}function fc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=u;u=u+16|0;g=e;i=c+8|0;j=i;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,5,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){o=wk(32)|0;f[g>>2]=o;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=o;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[o+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}o=(f[c>>2]|0)+n|0;b[d>>0]=b[o>>0]|0;b[d+1>>0]=b[o+1>>0]|0;b[d+2>>0]=b[o+2>>0]|0;b[d+3>>0]=b[o+3>>0]|0;b[d+4>>0]=b[o+4>>0]|0;o=j;n=vl(f[o>>2]|0,f[o+4>>2]|0,5,0)|0;o=H;k=j;f[k>>2]=n;f[k+4>>2]=o;if(Fi(d,13135,5)|0){k=wk(32)|0;f[g>>2]=k;f[g+8>>2]=-2147483616;f[g+4>>2]=17;p=k;q=13141;r=p+17|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[k+17>>0]=0;f[a>>2]=-1;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}k=i;m=f[k+4>>2]|0;if(!((m|0)>(o|0)|((m|0)==(o|0)?(f[k>>2]|0)>>>0>n>>>0:0))){k=wk(32)|0;f[g>>2]=k;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=k;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[k+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}b[d+5>>0]=b[(f[c>>2]|0)+n>>0]|0;n=j;k=vl(f[n>>2]|0,f[n+4>>2]|0,1,0)|0;n=H;o=j;f[o>>2]=k;f[o+4>>2]=n;o=i;m=f[o+4>>2]|0;if(!((m|0)>(n|0)|((m|0)==(n|0)?(f[o>>2]|0)>>>0>k>>>0:0))){o=wk(32)|0;f[g>>2]=o;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=o;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[o+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}b[d+6>>0]=b[(f[c>>2]|0)+k>>0]|0;k=j;o=vl(f[k>>2]|0,f[k+4>>2]|0,1,0)|0;k=H;n=j;f[n>>2]=o;f[n+4>>2]=k;n=i;m=f[n+4>>2]|0;if(!((m|0)>(k|0)|((m|0)==(k|0)?(f[n>>2]|0)>>>0>o>>>0:0))){n=wk(32)|0;f[g>>2]=n;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=n;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[n+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}b[d+7>>0]=b[(f[c>>2]|0)+o>>0]|0;o=j;n=vl(f[o>>2]|0,f[o+4>>2]|0,1,0)|0;o=H;k=j;f[k>>2]=n;f[k+4>>2]=o;k=i;m=f[k+4>>2]|0;if(!((m|0)>(o|0)|((m|0)==(o|0)?(f[k>>2]|0)>>>0>n>>>0:0))){k=wk(32)|0;f[g>>2]=k;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=k;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[k+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}b[d+8>>0]=b[(f[c>>2]|0)+n>>0]|0;n=j;k=f[n>>2]|0;o=f[n+4>>2]|0;n=vl(k|0,o|0,1,0)|0;m=j;f[m>>2]=n;f[m+4>>2]=H;m=i;i=f[m>>2]|0;l=f[m+4>>2]|0;m=vl(k|0,o|0,3,0)|0;o=H;if(!((l|0)<(o|0)|(l|0)==(o|0)&i>>>0<m>>>0)){m=d+10|0;d=(f[c>>2]|0)+n|0;n=h[d>>0]|h[d+1>>0]<<8;b[m>>0]=n;b[m+1>>0]=n>>8;n=j;m=vl(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;n=j;f[n>>2]=m;f[n+4>>2]=H;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;u=e;return}n=wk(32)|0;f[g>>2]=n;f[g+8>>2]=-2147483616;f[g+4>>2]=29;p=n;q=13105;r=p+29|0;do{b[p>>0]=b[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(r|0));b[n+29>>0]=0;f[a>>2]=-2;Yi(a+4|0,g);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=e;return}function gc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c=u;u=u+16|0;d=c;e=f[b>>2]|0;b=a+8|0;g=e+1|0;if((e|0)!=-1){h=((g>>>0)%3|0|0)==0?e+-2|0:g;g=(e>>>0)/3|0;i=e+((e-(g*3|0)|0)==0?2:-1)|0;j=a+216|0;k=a+220|0;l=a+368|0;m=f[(f[(f[b>>2]|0)+12>>2]|0)+(e<<2)>>2]|0;if((m|0)!=-1)if(((m>>>0)/3|0)>>>0>=g>>>0?(f[k>>2]|0)!=(f[j>>2]|0):0){m=0;do{if(pi((f[l>>2]|0)+(m<<4)|0)|0){n=f[j>>2]|0;f[d>>2]=e;o=n+(m*144|0)+136|0;p=f[o>>2]|0;if(p>>>0<(f[n+(m*144|0)+140>>2]|0)>>>0){f[p>>2]=e;f[o>>2]=p+4}else Ng(n+(m*144|0)+132|0,d)}m=m+1|0}while(m>>>0<(((f[k>>2]|0)-(f[j>>2]|0)|0)/144|0)>>>0);q=g;r=i;s=d;t=d;v=h;w=k;x=j;y=l;z=j}else{q=g;r=i;s=d;t=d;v=h;w=k;x=j;y=l;z=j}else{A=g;B=d;C=l;D=d;E=j;F=i;G=h;H=k;I=j;J=4}}else{j=a+216|0;A=-1;B=d;C=a+368|0;D=d;E=j;F=-1;G=-1;H=a+220|0;I=j;J=4}if((J|0)==4){j=f[H>>2]|0;a=f[I>>2]|0;if((j|0)==(a|0)){q=A;r=F;s=B;t=D;v=G;w=H;x=I;y=C;z=E}else{k=0;h=j;j=a;while(1){a=j;f[d>>2]=e;i=a+(k*144|0)+136|0;l=f[i>>2]|0;if(l>>>0<(f[a+(k*144|0)+140>>2]|0)>>>0){f[l>>2]=e;f[i>>2]=l+4;K=j;L=h}else{Ng(a+(k*144|0)+132|0,d);K=f[I>>2]|0;L=f[H>>2]|0}k=k+1|0;if(k>>>0>=((L-K|0)/144|0)>>>0){q=A;r=F;s=B;t=D;v=G;w=H;x=I;y=C;z=E;break}else{h=L;j=K}}}}if((v|0)!=-1?(K=f[(f[(f[b>>2]|0)+12>>2]|0)+(v<<2)>>2]|0,(K|0)!=-1):0){if(((K>>>0)/3|0)>>>0>=q>>>0?(f[w>>2]|0)!=(f[x>>2]|0):0){K=0;do{if(pi((f[y>>2]|0)+(K<<4)|0)|0){j=f[z>>2]|0;f[d>>2]=v;L=j+(K*144|0)+136|0;h=f[L>>2]|0;if(h>>>0<(f[j+(K*144|0)+140>>2]|0)>>>0){f[h>>2]=v;f[L>>2]=h+4}else Ng(j+(K*144|0)+132|0,d)}K=K+1|0}while(K>>>0<(((f[w>>2]|0)-(f[x>>2]|0)|0)/144|0)>>>0)}}else J=30;if((J|0)==30?(J=f[w>>2]|0,K=f[x>>2]|0,(J|0)!=(K|0)):0){j=0;h=K;K=J;while(1){J=h;f[d>>2]=v;L=J+(j*144|0)+136|0;E=f[L>>2]|0;if(E>>>0<(f[J+(j*144|0)+140>>2]|0)>>>0){f[E>>2]=v;f[L>>2]=E+4;M=h;N=K}else{Ng(J+(j*144|0)+132|0,d);M=f[x>>2]|0;N=f[w>>2]|0}j=j+1|0;if(j>>>0>=((N-M|0)/144|0)>>>0)break;else{h=M;K=N}}}if((r|0)!=-1?(N=f[(f[(f[b>>2]|0)+12>>2]|0)+(r<<2)>>2]|0,(N|0)!=-1):0){if(((N>>>0)/3|0)>>>0<q>>>0){u=c;return 1}if((f[w>>2]|0)==(f[x>>2]|0)){u=c;return 1}q=0;do{if(pi((f[y>>2]|0)+(q<<4)|0)|0){N=f[z>>2]|0;f[d>>2]=r;b=N+(q*144|0)+136|0;K=f[b>>2]|0;if(K>>>0<(f[N+(q*144|0)+140>>2]|0)>>>0){f[K>>2]=r;f[b>>2]=K+4}else Ng(N+(q*144|0)+132|0,d)}q=q+1|0}while(q>>>0<(((f[w>>2]|0)-(f[x>>2]|0)|0)/144|0)>>>0);u=c;return 1}q=f[w>>2]|0;z=f[x>>2]|0;if((q|0)==(z|0)){u=c;return 1}y=0;N=z;z=q;while(1){q=N;f[d>>2]=r;K=q+(y*144|0)+136|0;b=f[K>>2]|0;if(b>>>0<(f[q+(y*144|0)+140>>2]|0)>>>0){f[b>>2]=r;f[K>>2]=b+4;O=N;P=z}else{Ng(q+(y*144|0)+132|0,d);O=f[x>>2]|0;P=f[w>>2]|0}y=y+1|0;if(y>>>0>=((P-O|0)/144|0)>>>0)break;else{N=O;z=P}}u=c;return 1}function hc(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(c|0){case 1:{c=wk(60)|0;f[c>>2]=1536;f[c+4>>2]=d;b=c+8|0;f[b>>2]=f[e>>2];f[b+4>>2]=f[e+4>>2];f[b+8>>2]=f[e+8>>2];f[b+12>>2]=f[e+12>>2];f[b+16>>2]=f[e+16>>2];f[b+20>>2]=f[e+20>>2];b=c+32|0;f[b>>2]=0;i=c+36|0;f[i>>2]=0;j=c+40|0;f[j>>2]=0;k=f[e+24>>2]|0;l=(f[e+28>>2]|0)-k|0;m=l>>2;if(l|0){if(m>>>0>1073741823)$n(b);n=wk(l)|0;f[i>>2]=n;f[b>>2]=n;f[j>>2]=n+(m<<2);if((l|0)>0){Bf(n|0,k|0,l|0)|0;f[i>>2]=n+(l>>>2<<2)}}l=c+44|0;f[l>>2]=f[g>>2];f[l+4>>2]=f[g+4>>2];f[l+8>>2]=f[g+8>>2];f[l+12>>2]=f[g+12>>2];f[c>>2]=2096;o=c;f[a>>2]=o;return}case 2:{c=wk(60)|0;f[c>>2]=1536;f[c+4>>2]=d;l=c+8|0;f[l>>2]=f[e>>2];f[l+4>>2]=f[e+4>>2];f[l+8>>2]=f[e+8>>2];f[l+12>>2]=f[e+12>>2];f[l+16>>2]=f[e+16>>2];f[l+20>>2]=f[e+20>>2];l=c+32|0;f[l>>2]=0;n=c+36|0;f[n>>2]=0;i=c+40|0;f[i>>2]=0;k=f[e+24>>2]|0;m=(f[e+28>>2]|0)-k|0;j=m>>2;if(m|0){if(j>>>0>1073741823)$n(l);b=wk(m)|0;f[n>>2]=b;f[l>>2]=b;f[i>>2]=b+(j<<2);if((m|0)>0){Bf(b|0,k|0,m|0)|0;f[n>>2]=b+(m>>>2<<2)}}m=c+44|0;f[m>>2]=f[g>>2];f[m+4>>2]=f[g+4>>2];f[m+8>>2]=f[g+8>>2];f[m+12>>2]=f[g+12>>2];f[c>>2]=2152;o=c;f[a>>2]=o;return}case 4:{c=wk(112)|0;f[c>>2]=1536;f[c+4>>2]=d;m=c+8|0;f[m>>2]=f[e>>2];f[m+4>>2]=f[e+4>>2];f[m+8>>2]=f[e+8>>2];f[m+12>>2]=f[e+12>>2];f[m+16>>2]=f[e+16>>2];f[m+20>>2]=f[e+20>>2];m=c+32|0;f[m>>2]=0;b=c+36|0;f[b>>2]=0;n=c+40|0;f[n>>2]=0;k=f[e+24>>2]|0;j=(f[e+28>>2]|0)-k|0;i=j>>2;if(j|0){if(i>>>0>1073741823)$n(m);l=wk(j)|0;f[b>>2]=l;f[m>>2]=l;f[n>>2]=l+(i<<2);if((j|0)>0){Bf(l|0,k|0,j|0)|0;f[b>>2]=l+(j>>>2<<2)}}j=c+44|0;f[j>>2]=f[g>>2];f[j+4>>2]=f[g+4>>2];f[j+8>>2]=f[g+8>>2];f[j+12>>2]=f[g+12>>2];f[c>>2]=2208;j=c+60|0;l=j+52|0;do{f[j>>2]=0;j=j+4|0}while((j|0)<(l|0));o=c;f[a>>2]=o;return}case 3:{c=wk(92)|0;j=h&65535;f[c>>2]=1536;f[c+4>>2]=d;h=c+8|0;f[h>>2]=f[e>>2];f[h+4>>2]=f[e+4>>2];f[h+8>>2]=f[e+8>>2];f[h+12>>2]=f[e+12>>2];f[h+16>>2]=f[e+16>>2];f[h+20>>2]=f[e+20>>2];h=c+32|0;f[h>>2]=0;l=c+36|0;f[l>>2]=0;b=c+40|0;f[b>>2]=0;k=f[e+24>>2]|0;i=(f[e+28>>2]|0)-k|0;n=i>>2;if(i|0){if(n>>>0>1073741823)$n(h);m=wk(i)|0;f[l>>2]=m;f[h>>2]=m;f[b>>2]=m+(n<<2);if((i|0)>0){Bf(m|0,k|0,i|0)|0;f[l>>2]=m+(i>>>2<<2)}}i=c+44|0;f[i>>2]=f[g>>2];f[i+4>>2]=f[g+4>>2];f[i+8>>2]=f[g+8>>2];f[i+12>>2]=f[g+12>>2];f[c>>2]=2264;i=c+60|0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;f[i+16>>2]=0;f[i+20>>2]=0;f[i+24>>2]=0;f[c+88>>2]=j;o=c;f[a>>2]=o;return}case 5:{c=wk(104)|0;tf(c,d,e,g);o=c;f[a>>2]=o;return}case 6:{c=wk(124)|0;Ze(c,d,e,g);o=c;f[a>>2]=o;return}default:{o=0;f[a>>2]=o;return}}}function ic(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(c|0){case 1:{c=wk(60)|0;f[c>>2]=1536;f[c+4>>2]=d;b=c+8|0;f[b>>2]=f[e>>2];f[b+4>>2]=f[e+4>>2];f[b+8>>2]=f[e+8>>2];f[b+12>>2]=f[e+12>>2];f[b+16>>2]=f[e+16>>2];f[b+20>>2]=f[e+20>>2];b=c+32|0;f[b>>2]=0;i=c+36|0;f[i>>2]=0;j=c+40|0;f[j>>2]=0;k=f[e+24>>2]|0;l=(f[e+28>>2]|0)-k|0;m=l>>2;if(l|0){if(m>>>0>1073741823)$n(b);n=wk(l)|0;f[i>>2]=n;f[b>>2]=n;f[j>>2]=n+(m<<2);if((l|0)>0){Bf(n|0,k|0,l|0)|0;f[i>>2]=n+(l>>>2<<2)}}l=c+44|0;f[l>>2]=f[g>>2];f[l+4>>2]=f[g+4>>2];f[l+8>>2]=f[g+8>>2];f[l+12>>2]=f[g+12>>2];f[c>>2]=1648;o=c;f[a>>2]=o;return}case 2:{c=wk(60)|0;f[c>>2]=1536;f[c+4>>2]=d;l=c+8|0;f[l>>2]=f[e>>2];f[l+4>>2]=f[e+4>>2];f[l+8>>2]=f[e+8>>2];f[l+12>>2]=f[e+12>>2];f[l+16>>2]=f[e+16>>2];f[l+20>>2]=f[e+20>>2];l=c+32|0;f[l>>2]=0;n=c+36|0;f[n>>2]=0;i=c+40|0;f[i>>2]=0;k=f[e+24>>2]|0;m=(f[e+28>>2]|0)-k|0;j=m>>2;if(m|0){if(j>>>0>1073741823)$n(l);b=wk(m)|0;f[n>>2]=b;f[l>>2]=b;f[i>>2]=b+(j<<2);if((m|0)>0){Bf(b|0,k|0,m|0)|0;f[n>>2]=b+(m>>>2<<2)}}m=c+44|0;f[m>>2]=f[g>>2];f[m+4>>2]=f[g+4>>2];f[m+8>>2]=f[g+8>>2];f[m+12>>2]=f[g+12>>2];f[c>>2]=1704;o=c;f[a>>2]=o;return}case 4:{c=wk(112)|0;f[c>>2]=1536;f[c+4>>2]=d;m=c+8|0;f[m>>2]=f[e>>2];f[m+4>>2]=f[e+4>>2];f[m+8>>2]=f[e+8>>2];f[m+12>>2]=f[e+12>>2];f[m+16>>2]=f[e+16>>2];f[m+20>>2]=f[e+20>>2];m=c+32|0;f[m>>2]=0;b=c+36|0;f[b>>2]=0;n=c+40|0;f[n>>2]=0;k=f[e+24>>2]|0;j=(f[e+28>>2]|0)-k|0;i=j>>2;if(j|0){if(i>>>0>1073741823)$n(m);l=wk(j)|0;f[b>>2]=l;f[m>>2]=l;f[n>>2]=l+(i<<2);if((j|0)>0){Bf(l|0,k|0,j|0)|0;f[b>>2]=l+(j>>>2<<2)}}j=c+44|0;f[j>>2]=f[g>>2];f[j+4>>2]=f[g+4>>2];f[j+8>>2]=f[g+8>>2];f[j+12>>2]=f[g+12>>2];f[c>>2]=1760;j=c+60|0;l=j+52|0;do{f[j>>2]=0;j=j+4|0}while((j|0)<(l|0));o=c;f[a>>2]=o;return}case 3:{c=wk(92)|0;j=h&65535;f[c>>2]=1536;f[c+4>>2]=d;h=c+8|0;f[h>>2]=f[e>>2];f[h+4>>2]=f[e+4>>2];f[h+8>>2]=f[e+8>>2];f[h+12>>2]=f[e+12>>2];f[h+16>>2]=f[e+16>>2];f[h+20>>2]=f[e+20>>2];h=c+32|0;f[h>>2]=0;l=c+36|0;f[l>>2]=0;b=c+40|0;f[b>>2]=0;k=f[e+24>>2]|0;i=(f[e+28>>2]|0)-k|0;n=i>>2;if(i|0){if(n>>>0>1073741823)$n(h);m=wk(i)|0;f[l>>2]=m;f[h>>2]=m;f[b>>2]=m+(n<<2);if((i|0)>0){Bf(m|0,k|0,i|0)|0;f[l>>2]=m+(i>>>2<<2)}}i=c+44|0;f[i>>2]=f[g>>2];f[i+4>>2]=f[g+4>>2];f[i+8>>2]=f[g+8>>2];f[i+12>>2]=f[g+12>>2];f[c>>2]=1816;i=c+60|0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;f[i+16>>2]=0;f[i+20>>2]=0;f[i+24>>2]=0;f[c+88>>2]=j;o=c;f[a>>2]=o;return}case 5:{c=wk(104)|0;uf(c,d,e,g);o=c;f[a>>2]=o;return}case 6:{c=wk(124)|0;_e(c,d,e,g);o=c;f[a>>2]=o;return}default:{o=0;f[a>>2]=o;return}}}function jc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;e=u;u=u+16|0;g=e+8|0;h=e+4|0;i=e;j=a+64|0;k=f[j>>2]|0;if((f[k+28>>2]|0)==(f[k+24>>2]|0)){u=e;return}l=c+96|0;c=a+52|0;m=d+84|0;n=d+68|0;d=a+56|0;o=a+60|0;p=a+12|0;q=a+28|0;r=a+40|0;s=a+44|0;t=a+48|0;v=0;w=0;x=k;while(1){k=f[(f[x+24>>2]|0)+(w<<2)>>2]|0;if((k|0)==-1){y=v;z=x}else{A=v+1|0;B=(k|0)/3|0;C=f[(f[l>>2]|0)+(B*12|0)+(k-(B*3|0)<<2)>>2]|0;if(!(b[m>>0]|0))D=f[(f[n>>2]|0)+(C<<2)>>2]|0;else D=C;f[g>>2]=D;C=f[d>>2]|0;if(C>>>0<(f[o>>2]|0)>>>0){f[C>>2]=D;f[d>>2]=C+4}else Ng(c,g);f[g>>2]=k;f[h>>2]=0;a:do if(!(f[(f[p>>2]|0)+(w>>>5<<2)>>2]&1<<(w&31)))E=k;else{C=k+1|0;B=((C>>>0)%3|0|0)==0?k+-2|0:C;if(((B|0)!=-1?(f[(f[a>>2]|0)+(B>>>5<<2)>>2]&1<<(B&31)|0)==0:0)?(C=f[(f[(f[j>>2]|0)+12>>2]|0)+(B<<2)>>2]|0,B=C+1|0,(C|0)!=-1):0){F=((B>>>0)%3|0|0)==0?C+-2|0:B;f[h>>2]=F;if((F|0)==-1){E=k;break}B=F;while(1){f[g>>2]=B;F=B+1|0;C=((F>>>0)%3|0|0)==0?B+-2|0:F;if((C|0)==-1)break;if(f[(f[a>>2]|0)+(C>>>5<<2)>>2]&1<<(C&31)|0)break;F=f[(f[(f[j>>2]|0)+12>>2]|0)+(C<<2)>>2]|0;C=F+1|0;if((F|0)==-1)break;G=((C>>>0)%3|0|0)==0?F+-2|0:C;f[h>>2]=G;if((G|0)==-1){E=B;break a}else B=G}f[h>>2]=-1;E=B;break}f[h>>2]=-1;E=k}while(0);f[(f[q>>2]|0)+(E<<2)>>2]=v;k=f[s>>2]|0;if((k|0)==(f[t>>2]|0))Ng(r,g);else{f[k>>2]=f[g>>2];f[s>>2]=k+4}k=f[j>>2]|0;G=f[g>>2]|0;b:do if(((G|0)!=-1?(C=(((G>>>0)%3|0|0)==0?2:-1)+G|0,(C|0)!=-1):0)?(F=f[(f[k+12>>2]|0)+(C<<2)>>2]|0,(F|0)!=-1):0){C=F+(((F>>>0)%3|0|0)==0?2:-1)|0;f[h>>2]=C;if((C|0)!=-1&(C|0)!=(G|0)){F=A;H=v;I=C;while(1){C=I+1|0;J=((C>>>0)%3|0|0)==0?I+-2|0:C;do if(f[(f[a>>2]|0)+(J>>>5<<2)>>2]&1<<(J&31)){C=F+1|0;K=(I|0)/3|0;L=f[(f[l>>2]|0)+(K*12|0)+(I-(K*3|0)<<2)>>2]|0;if(!(b[m>>0]|0))M=f[(f[n>>2]|0)+(L<<2)>>2]|0;else M=L;f[i>>2]=M;L=f[d>>2]|0;if(L>>>0<(f[o>>2]|0)>>>0){f[L>>2]=M;f[d>>2]=L+4}else Ng(c,i);L=f[s>>2]|0;if((L|0)==(f[t>>2]|0)){Ng(r,h);N=C;O=F;break}else{f[L>>2]=f[h>>2];f[s>>2]=L+4;N=C;O=F;break}}else{N=F;O=H}while(0);f[(f[q>>2]|0)+(f[h>>2]<<2)>>2]=O;P=f[j>>2]|0;J=f[h>>2]|0;if((J|0)==-1)break;C=(((J>>>0)%3|0|0)==0?2:-1)+J|0;if((C|0)==-1)break;J=f[(f[P+12>>2]|0)+(C<<2)>>2]|0;if((J|0)==-1)break;I=J+(((J>>>0)%3|0|0)==0?2:-1)|0;f[h>>2]=I;if(!((I|0)!=-1?(I|0)!=(f[g>>2]|0):0)){Q=N;R=P;break b}else{F=N;H=O}}f[h>>2]=-1;Q=N;R=P}else{Q=A;R=k}}else S=30;while(0);if((S|0)==30){S=0;f[h>>2]=-1;Q=A;R=k}y=Q;z=R}w=w+1|0;if(w>>>0>=(f[z+28>>2]|0)-(f[z+24>>2]|0)>>2>>>0)break;else{v=y;x=z}}u=e;return}function kc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0;d=u;u=u+80|0;e=d+76|0;g=d;i=d+72|0;j=d+64|0;k=d+68|0;l=a+28|0;do if(((h[(f[l>>2]|0)+36>>0]|0)<<8&65535)<512){m=c+8|0;n=f[m>>2]|0;o=f[m+4>>2]|0;m=c+16|0;p=m;q=f[p>>2]|0;r=vl(q|0,f[p+4>>2]|0,4,0)|0;p=H;if((o|0)<(p|0)|(o|0)==(p|0)&n>>>0<r>>>0){s=0;u=d;return s|0}else{n=(f[c>>2]|0)+q|0;q=h[n>>0]|h[n+1>>0]<<8|h[n+2>>0]<<16|h[n+3>>0]<<24;f[e>>2]=q;n=m;f[n>>2]=r;f[n+4>>2]=p;t=q;break}}else if(zh(e,c)|0){t=f[e>>2]|0;break}else{s=0;u=d;return s|0}while(0);if(!t){s=0;u=d;return s|0}q=a+4|0;p=a+8|0;n=f[q>>2]|0;r=(f[p>>2]|0)-n>>2;if(t>>>0>r>>>0){Eg(q,t-r|0);if(!(f[e>>2]|0)){s=1;u=d;return s|0}}else if(t>>>0<r>>>0)f[p>>2]=n+(t<<2);t=f[a+32>>2]|0;n=c+8|0;p=c+16|0;r=g+60|0;m=t+8|0;o=a+16|0;v=a+20|0;a=0;while(1){w=n;x=f[w>>2]|0;y=f[w+4>>2]|0;w=p;z=f[w>>2]|0;A=f[w+4>>2]|0;if(!((y|0)>(A|0)|(y|0)==(A|0)&x>>>0>z>>>0)){s=0;B=41;break}w=f[c>>2]|0;C=b[w+z>>0]|0;D=vl(z|0,A|0,1,0)|0;E=H;F=p;f[F>>2]=D;f[F+4>>2]=E;if(!((y|0)>(E|0)|(y|0)==(E|0)&x>>>0>D>>>0)){s=0;B=41;break}E=b[w+D>>0]|0;D=vl(z|0,A|0,2,0)|0;F=H;G=p;f[G>>2]=D;f[G+4>>2]=F;if(!((y|0)>(F|0)|(y|0)==(F|0)&x>>>0>D>>>0)){s=0;B=41;break}F=b[w+D>>0]|0;D=vl(z|0,A|0,3,0)|0;G=H;I=p;f[I>>2]=D;f[I+4>>2]=G;if(!((y|0)>(G|0)|(y|0)==(G|0)&x>>>0>D>>>0)){s=0;B=41;break}x=b[w+D>>0]|0;D=vl(z|0,A|0,4,0)|0;A=p;f[A>>2]=D;f[A+4>>2]=H;A=E&255;if((E+-1&255)>10){s=0;B=41;break}oj(g);E=W(Bj(A)|0,F&255)|0;Ih(g,C&255,0,F,A,x<<24>>24!=0,E,((E|0)<0)<<31>>31,0,0);E=f[l>>2]|0;if((((h[E+36>>0]|0)<<8|(h[E+37>>0]|0))&65535)<259){E=n;x=f[E>>2]|0;A=f[E+4>>2]|0;E=p;F=f[E>>2]|0;C=vl(F|0,f[E+4>>2]|0,2,0)|0;E=H;if((A|0)<(E|0)|(A|0)==(E|0)&x>>>0<C>>>0){B=39;break}x=(f[c>>2]|0)+F|0;F=h[x>>0]|h[x+1>>0]<<8;x=p;f[x>>2]=C;f[x+4>>2]=E;E=F&65535;f[i>>2]=E;J=E}else{zh(i,c)|0;J=f[i>>2]|0}f[r>>2]=J;E=wk(96)|0;$i(E,g);f[j>>2]=E;E=ig(t,j)|0;F=f[j>>2]|0;f[j>>2]=0;if(F|0){x=F+88|0;C=f[x>>2]|0;f[x>>2]=0;if(C|0){x=f[C+8>>2]|0;if(x|0){f[C+12>>2]=x;Ko(x)}Ko(C)}C=f[F+68>>2]|0;if(C|0){f[F+72>>2]=C;Ko(C)}C=F+64|0;x=f[C>>2]|0;f[C>>2]=0;if(x|0){C=f[x>>2]|0;if(C|0){f[x+4>>2]=C;Ko(C)}Ko(x)}Ko(F)}f[(f[(f[m>>2]|0)+(E<<2)>>2]|0)+60>>2]=f[i>>2];f[(f[q>>2]|0)+(a<<2)>>2]=E;F=f[o>>2]|0;x=(f[v>>2]|0)-F>>2;C=F;if((E|0)<(x|0))K=C;else{F=E+1|0;f[k>>2]=-1;if(F>>>0<=x>>>0)if(F>>>0<x>>>0){f[v>>2]=C+(F<<2);L=C}else L=C;else{Of(o,F-x|0,k);L=f[o>>2]|0}K=L}f[K+(E<<2)>>2]=a;a=a+1|0;if(a>>>0>=(f[e>>2]|0)>>>0){s=1;B=41;break}}if((B|0)==39){s=0;u=d;return s|0}else if((B|0)==41){u=d;return s|0}return 0}function lc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;e=u;u=u+48|0;d=e+32|0;h=e+24|0;i=e+16|0;j=e;k=e+12|0;l=a+8|0;m=f[l>>2]|0;if((m+-2|0)>>>0<=28){f[a+72>>2]=m;n=1<<m;f[a+76>>2]=n+-1;m=n+-2|0;f[a+80>>2]=m;f[a+84>>2]=(m|0)/2|0}m=a+40|0;f[a+48>>2]=g;g=a+36|0;n=f[g>>2]|0;o=(f[n+4>>2]|0)-(f[n>>2]|0)|0;p=o>>2;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;if((o|0)<=0){u=e;return 1}o=j+4|0;q=j+8|0;r=a+84|0;s=a+88|0;t=a+80|0;a=h+4|0;v=i+4|0;w=d+4|0;x=f[n>>2]|0;if((f[n+4>>2]|0)==(x|0)){y=n;$n(y)}n=0;z=x;while(1){f[k>>2]=f[z+(n<<2)>>2];f[d>>2]=f[k>>2];Ob(m,d,j);x=f[j>>2]|0;A=(x|0)>-1?x:0-x|0;B=f[o>>2]|0;C=(B|0)>-1?B:0-B|0;D=vl(C|0,((C|0)<0)<<31>>31|0,A|0,((A|0)<0)<<31>>31|0)|0;A=f[q>>2]|0;C=(A|0)>-1;E=C?A:0-A|0;A=vl(D|0,H|0,E|0,((E|0)<0)<<31>>31|0)|0;E=H;do if(!((A|0)==0&(E|0)==0)){D=f[r>>2]|0;F=((D|0)<0)<<31>>31;G=Bk(D|0,F|0,x|0,((x|0)<0)<<31>>31|0)|0;I=ni(G|0,H|0,A|0,E|0)|0;f[j>>2]=I;G=Bk(D|0,F|0,B|0,((B|0)<0)<<31>>31|0)|0;F=ni(G|0,H|0,A|0,E|0)|0;f[o>>2]=F;G=D-((I|0)>-1?I:0-I|0)-((F|0)>-1?F:0-F|0)|0;if(C){f[q>>2]=G;break}else{f[q>>2]=0-G;break}}else f[j>>2]=f[r>>2];while(0);C=pi(s)|0;E=f[j>>2]|0;if(C){C=0-E|0;A=0-(f[o>>2]|0)|0;B=0-(f[q>>2]|0)|0;f[j>>2]=C;f[o>>2]=A;f[q>>2]=B;J=C;K=A}else{J=E;K=f[o>>2]|0}do if((J|0)<=-1){if((K|0)<0){E=f[q>>2]|0;L=(E|0)>-1?E:0-E|0;M=E}else{E=f[q>>2]|0;L=(f[t>>2]|0)-((E|0)>-1?E:0-E|0)|0;M=E}if((M|0)<0){N=(K|0)>-1?K:0-K|0;O=L;break}else{N=(f[t>>2]|0)-((K|0)>-1?K:0-K|0)|0;O=L;break}}else{E=f[r>>2]|0;N=(f[q>>2]|0)+E|0;O=E+K|0}while(0);E=(O|0)==0;A=(N|0)==0;C=f[t>>2]|0;do if(N|O){B=(C|0)==(N|0);if(!(E&B)){x=(C|0)==(O|0);if(!(A&x)){if(E?(G=f[r>>2]|0,(G|0)<(N|0)):0){P=0;Q=(G<<1)-N|0;break}if(x?(x=f[r>>2]|0,(x|0)>(N|0)):0){P=O;Q=(x<<1)-N|0;break}if(B?(B=f[r>>2]|0,(B|0)>(O|0)):0){P=(B<<1)-O|0;Q=N;break}if(A){B=f[r>>2]|0;P=(B|0)<(O|0)?(B<<1)-O|0:O;Q=0}else{P=O;Q=N}}else{P=O;Q=O}}else{P=N;Q=N}}else{P=C;Q=C}while(0);C=n<<1;A=b+(C<<2)|0;E=c+(C<<2)|0;C=f[A>>2]|0;B=f[A+4>>2]|0;f[h>>2]=P;f[a>>2]=Q;f[i>>2]=C;f[v>>2]=B;Cc(d,l,h,i);f[E>>2]=f[d>>2];f[E+4>>2]=f[w>>2];n=n+1|0;if((n|0)>=(p|0)){R=6;break}E=f[g>>2]|0;z=f[E>>2]|0;if((f[E+4>>2]|0)-z>>2>>>0<=n>>>0){y=E;R=7;break}}if((R|0)==6){u=e;return 1}else if((R|0)==7)$n(y);return 0}function mc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;e=u;u=u+48|0;d=e+32|0;h=e+24|0;i=e+16|0;j=e;k=e+12|0;l=a+8|0;m=f[l>>2]|0;if((m+-2|0)>>>0<=28){f[a+72>>2]=m;n=1<<m;f[a+76>>2]=n+-1;m=n+-2|0;f[a+80>>2]=m;f[a+84>>2]=(m|0)/2|0}m=a+40|0;f[a+48>>2]=g;g=a+36|0;n=f[g>>2]|0;o=(f[n+4>>2]|0)-(f[n>>2]|0)|0;p=o>>2;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;if((o|0)<=0){u=e;return 1}o=j+4|0;q=j+8|0;r=a+84|0;s=a+88|0;t=a+80|0;a=h+4|0;v=i+4|0;w=d+4|0;x=f[n>>2]|0;if((f[n+4>>2]|0)==(x|0)){y=n;$n(y)}n=0;z=x;while(1){f[k>>2]=f[z+(n<<2)>>2];f[d>>2]=f[k>>2];Mb(m,d,j);x=f[j>>2]|0;A=(x|0)>-1?x:0-x|0;B=f[o>>2]|0;C=(B|0)>-1?B:0-B|0;D=vl(C|0,((C|0)<0)<<31>>31|0,A|0,((A|0)<0)<<31>>31|0)|0;A=f[q>>2]|0;C=(A|0)>-1;E=C?A:0-A|0;A=vl(D|0,H|0,E|0,((E|0)<0)<<31>>31|0)|0;E=H;do if(!((A|0)==0&(E|0)==0)){D=f[r>>2]|0;F=((D|0)<0)<<31>>31;G=Bk(D|0,F|0,x|0,((x|0)<0)<<31>>31|0)|0;I=ni(G|0,H|0,A|0,E|0)|0;f[j>>2]=I;G=Bk(D|0,F|0,B|0,((B|0)<0)<<31>>31|0)|0;F=ni(G|0,H|0,A|0,E|0)|0;f[o>>2]=F;G=D-((I|0)>-1?I:0-I|0)-((F|0)>-1?F:0-F|0)|0;if(C){f[q>>2]=G;break}else{f[q>>2]=0-G;break}}else f[j>>2]=f[r>>2];while(0);C=pi(s)|0;E=f[j>>2]|0;if(C){C=0-E|0;A=0-(f[o>>2]|0)|0;B=0-(f[q>>2]|0)|0;f[j>>2]=C;f[o>>2]=A;f[q>>2]=B;J=C;K=A}else{J=E;K=f[o>>2]|0}do if((J|0)<=-1){if((K|0)<0){E=f[q>>2]|0;L=(E|0)>-1?E:0-E|0;M=E}else{E=f[q>>2]|0;L=(f[t>>2]|0)-((E|0)>-1?E:0-E|0)|0;M=E}if((M|0)<0){N=(K|0)>-1?K:0-K|0;O=L;break}else{N=(f[t>>2]|0)-((K|0)>-1?K:0-K|0)|0;O=L;break}}else{E=f[r>>2]|0;N=(f[q>>2]|0)+E|0;O=E+K|0}while(0);E=(O|0)==0;A=(N|0)==0;C=f[t>>2]|0;do if(N|O){B=(C|0)==(N|0);if(!(E&B)){x=(C|0)==(O|0);if(!(A&x)){if(E?(G=f[r>>2]|0,(G|0)<(N|0)):0){P=0;Q=(G<<1)-N|0;break}if(x?(x=f[r>>2]|0,(x|0)>(N|0)):0){P=O;Q=(x<<1)-N|0;break}if(B?(B=f[r>>2]|0,(B|0)>(O|0)):0){P=(B<<1)-O|0;Q=N;break}if(A){B=f[r>>2]|0;P=(B|0)<(O|0)?(B<<1)-O|0:O;Q=0}else{P=O;Q=N}}else{P=O;Q=O}}else{P=N;Q=N}}else{P=C;Q=C}while(0);C=n<<1;A=b+(C<<2)|0;E=c+(C<<2)|0;C=f[A>>2]|0;B=f[A+4>>2]|0;f[h>>2]=P;f[a>>2]=Q;f[i>>2]=C;f[v>>2]=B;Cc(d,l,h,i);f[E>>2]=f[d>>2];f[E+4>>2]=f[w>>2];n=n+1|0;if((n|0)>=(p|0)){R=6;break}E=f[g>>2]|0;z=f[E>>2]|0;if((f[E+4>>2]|0)-z>>2>>>0<=n>>>0){y=E;R=7;break}}if((R|0)==6){u=e;return 1}else if((R|0)==7)$n(y);return 0}function nc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;e=u;u=u+48|0;d=e+32|0;h=e+24|0;i=e+16|0;j=e;k=e+12|0;l=a+8|0;m=f[l>>2]|0;if((m+-2|0)>>>0<=28){f[a+72>>2]=m;n=1<<m;f[a+76>>2]=n+-1;m=n+-2|0;f[a+80>>2]=m;f[a+84>>2]=(m|0)/2|0}m=a+40|0;f[a+48>>2]=g;g=a+36|0;n=f[g>>2]|0;o=(f[n+4>>2]|0)-(f[n>>2]|0)|0;p=o>>2;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;if((o|0)<=0){u=e;return 1}o=j+4|0;q=j+8|0;r=a+84|0;s=a+88|0;t=a+80|0;a=d+4|0;v=i+4|0;w=h+4|0;x=f[n>>2]|0;if((f[n+4>>2]|0)==(x|0)){y=n;$n(y)}n=0;z=x;while(1){f[k>>2]=f[z+(n<<2)>>2];f[d>>2]=f[k>>2];Ob(m,d,j);x=f[j>>2]|0;A=(x|0)>-1?x:0-x|0;B=f[o>>2]|0;C=(B|0)>-1?B:0-B|0;D=vl(C|0,((C|0)<0)<<31>>31|0,A|0,((A|0)<0)<<31>>31|0)|0;A=f[q>>2]|0;C=(A|0)>-1;E=C?A:0-A|0;A=vl(D|0,H|0,E|0,((E|0)<0)<<31>>31|0)|0;E=H;do if(!((A|0)==0&(E|0)==0)){D=f[r>>2]|0;F=((D|0)<0)<<31>>31;G=Bk(D|0,F|0,x|0,((x|0)<0)<<31>>31|0)|0;I=ni(G|0,H|0,A|0,E|0)|0;f[j>>2]=I;G=Bk(D|0,F|0,B|0,((B|0)<0)<<31>>31|0)|0;F=ni(G|0,H|0,A|0,E|0)|0;f[o>>2]=F;G=D-((I|0)>-1?I:0-I|0)-((F|0)>-1?F:0-F|0)|0;if(C){f[q>>2]=G;break}else{f[q>>2]=0-G;break}}else f[j>>2]=f[r>>2];while(0);C=pi(s)|0;E=f[j>>2]|0;if(C){C=0-E|0;A=0-(f[o>>2]|0)|0;B=0-(f[q>>2]|0)|0;f[j>>2]=C;f[o>>2]=A;f[q>>2]=B;J=C;K=A}else{J=E;K=f[o>>2]|0}do if((J|0)<=-1){if((K|0)<0){E=f[q>>2]|0;L=(E|0)>-1?E:0-E|0;M=E}else{E=f[q>>2]|0;L=(f[t>>2]|0)-((E|0)>-1?E:0-E|0)|0;M=E}if((M|0)<0){N=(K|0)>-1?K:0-K|0;O=L;break}else{N=(f[t>>2]|0)-((K|0)>-1?K:0-K|0)|0;O=L;break}}else{E=f[r>>2]|0;N=(f[q>>2]|0)+E|0;O=E+K|0}while(0);E=(O|0)==0;A=(N|0)==0;C=f[t>>2]|0;do if(N|O){B=(C|0)==(N|0);if(!(E&B)){x=(C|0)==(O|0);if(!(A&x)){if(E?(G=f[r>>2]|0,(G|0)<(N|0)):0){P=0;Q=(G<<1)-N|0;break}if(x?(x=f[r>>2]|0,(x|0)>(N|0)):0){P=O;Q=(x<<1)-N|0;break}if(B?(B=f[r>>2]|0,(B|0)>(O|0)):0){P=(B<<1)-O|0;Q=N;break}if(A){B=f[r>>2]|0;P=(B|0)<(O|0)?(B<<1)-O|0:O;Q=0}else{P=O;Q=N}}else{P=O;Q=O}}else{P=N;Q=N}}else{P=C;Q=C}while(0);C=n<<1;A=b+(C<<2)|0;E=c+(C<<2)|0;C=f[A+4>>2]|0;f[d>>2]=f[A>>2];f[a>>2]=C;f[i>>2]=P;f[v>>2]=Q;gd(h,l,i,d);f[E>>2]=f[h>>2];f[E+4>>2]=f[w>>2];n=n+1|0;if((n|0)>=(p|0)){R=6;break}E=f[g>>2]|0;z=f[E>>2]|0;if((f[E+4>>2]|0)-z>>2>>>0<=n>>>0){y=E;R=7;break}}if((R|0)==6){u=e;return 1}else if((R|0)==7)$n(y);return 0}function oc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;e=u;u=u+48|0;d=e+32|0;h=e+24|0;i=e+16|0;j=e;k=e+12|0;l=a+8|0;m=f[l>>2]|0;if((m+-2|0)>>>0<=28){f[a+72>>2]=m;n=1<<m;f[a+76>>2]=n+-1;m=n+-2|0;f[a+80>>2]=m;f[a+84>>2]=(m|0)/2|0}m=a+40|0;f[a+48>>2]=g;g=a+36|0;n=f[g>>2]|0;o=(f[n+4>>2]|0)-(f[n>>2]|0)|0;p=o>>2;f[j>>2]=0;f[j+4>>2]=0;f[j+8>>2]=0;if((o|0)<=0){u=e;return 1}o=j+4|0;q=j+8|0;r=a+84|0;s=a+88|0;t=a+80|0;a=d+4|0;v=i+4|0;w=h+4|0;x=f[n>>2]|0;if((f[n+4>>2]|0)==(x|0)){y=n;$n(y)}n=0;z=x;while(1){f[k>>2]=f[z+(n<<2)>>2];f[d>>2]=f[k>>2];Mb(m,d,j);x=f[j>>2]|0;A=(x|0)>-1?x:0-x|0;B=f[o>>2]|0;C=(B|0)>-1?B:0-B|0;D=vl(C|0,((C|0)<0)<<31>>31|0,A|0,((A|0)<0)<<31>>31|0)|0;A=f[q>>2]|0;C=(A|0)>-1;E=C?A:0-A|0;A=vl(D|0,H|0,E|0,((E|0)<0)<<31>>31|0)|0;E=H;do if(!((A|0)==0&(E|0)==0)){D=f[r>>2]|0;F=((D|0)<0)<<31>>31;G=Bk(D|0,F|0,x|0,((x|0)<0)<<31>>31|0)|0;I=ni(G|0,H|0,A|0,E|0)|0;f[j>>2]=I;G=Bk(D|0,F|0,B|0,((B|0)<0)<<31>>31|0)|0;F=ni(G|0,H|0,A|0,E|0)|0;f[o>>2]=F;G=D-((I|0)>-1?I:0-I|0)-((F|0)>-1?F:0-F|0)|0;if(C){f[q>>2]=G;break}else{f[q>>2]=0-G;break}}else f[j>>2]=f[r>>2];while(0);C=pi(s)|0;E=f[j>>2]|0;if(C){C=0-E|0;A=0-(f[o>>2]|0)|0;B=0-(f[q>>2]|0)|0;f[j>>2]=C;f[o>>2]=A;f[q>>2]=B;J=C;K=A}else{J=E;K=f[o>>2]|0}do if((J|0)<=-1){if((K|0)<0){E=f[q>>2]|0;L=(E|0)>-1?E:0-E|0;M=E}else{E=f[q>>2]|0;L=(f[t>>2]|0)-((E|0)>-1?E:0-E|0)|0;M=E}if((M|0)<0){N=(K|0)>-1?K:0-K|0;O=L;break}else{N=(f[t>>2]|0)-((K|0)>-1?K:0-K|0)|0;O=L;break}}else{E=f[r>>2]|0;N=(f[q>>2]|0)+E|0;O=E+K|0}while(0);E=(O|0)==0;A=(N|0)==0;C=f[t>>2]|0;do if(N|O){B=(C|0)==(N|0);if(!(E&B)){x=(C|0)==(O|0);if(!(A&x)){if(E?(G=f[r>>2]|0,(G|0)<(N|0)):0){P=0;Q=(G<<1)-N|0;break}if(x?(x=f[r>>2]|0,(x|0)>(N|0)):0){P=O;Q=(x<<1)-N|0;break}if(B?(B=f[r>>2]|0,(B|0)>(O|0)):0){P=(B<<1)-O|0;Q=N;break}if(A){B=f[r>>2]|0;P=(B|0)<(O|0)?(B<<1)-O|0:O;Q=0}else{P=O;Q=N}}else{P=O;Q=O}}else{P=N;Q=N}}else{P=C;Q=C}while(0);C=n<<1;A=b+(C<<2)|0;E=c+(C<<2)|0;C=f[A+4>>2]|0;f[d>>2]=f[A>>2];f[a>>2]=C;f[i>>2]=P;f[v>>2]=Q;gd(h,l,i,d);f[E>>2]=f[h>>2];f[E+4>>2]=f[w>>2];n=n+1|0;if((n|0)>=(p|0)){R=6;break}E=f[g>>2]|0;z=f[E>>2]|0;if((f[E+4>>2]|0)-z>>2>>>0<=n>>>0){y=E;R=7;break}}if((R|0)==6){u=e;return 1}else if((R|0)==7)$n(y);return 0}function pc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;d=u;u=u+32|0;e=d+16|0;g=d;if((j[c+38>>1]|0)<514){i=c+8|0;k=f[i+4>>2]|0;l=c+16|0;m=l;n=f[m>>2]|0;o=f[m+4>>2]|0;if(!((k|0)>(o|0)|((k|0)==(o|0)?(f[i>>2]|0)>>>0>n>>>0:0))){p=0;u=d;return p|0}i=b[(f[c>>2]|0)+n>>0]|0;k=vl(n|0,o|0,1,0)|0;o=l;f[o>>2]=k;f[o+4>>2]=H;if(i<<24>>24){p=0;u=d;return p|0}}zh(e,c)|0;i=f[e>>2]|0;if(i){o=a+60|0;td(o,i,0);ym(g);if(rd(g,c)|0){if(f[e>>2]|0){i=0;do{k=pi(g)|0;l=(f[o>>2]|0)+(i>>>5<<2)|0;n=1<<(i&31);if(k)q=f[l>>2]|n;else q=f[l>>2]&~n;f[l>>2]=q;i=i+1|0}while(i>>>0<(f[e>>2]|0)>>>0)}r=13}}else r=13;do if((r|0)==13){zh(e,c)|0;i=f[e>>2]|0;if(i|0){q=a+72|0;td(q,i,0);ym(g);if(!(rd(g,c)|0))break;if(f[e>>2]|0){i=0;do{o=pi(g)|0;l=(f[q>>2]|0)+(i>>>5<<2)|0;n=1<<(i&31);if(o)s=f[l>>2]|n;else s=f[l>>2]&~n;f[l>>2]=s;i=i+1|0}while(i>>>0<(f[e>>2]|0)>>>0)}}zh(e,c)|0;i=f[e>>2]|0;if(i|0){q=a+84|0;td(q,i,0);ym(g);if(!(rd(g,c)|0))break;if(f[e>>2]|0){i=0;do{l=pi(g)|0;n=(f[q>>2]|0)+(i>>>5<<2)|0;o=1<<(i&31);if(l)t=f[n>>2]|o;else t=f[n>>2]&~o;f[n>>2]=t;i=i+1|0}while(i>>>0<(f[e>>2]|0)>>>0)}}zh(e,c)|0;i=f[e>>2]|0;if(i|0){q=a+96|0;td(q,i,0);ym(g);if(!(rd(g,c)|0))break;if(f[e>>2]|0){i=0;do{n=pi(g)|0;o=(f[q>>2]|0)+(i>>>5<<2)|0;l=1<<(i&31);if(n)v=f[o>>2]|l;else v=f[o>>2]&~l;f[o>>2]=v;i=i+1|0}while(i>>>0<(f[e>>2]|0)>>>0)}}i=c+8|0;q=f[i>>2]|0;o=f[i+4>>2]|0;i=c+16|0;l=i;n=f[l>>2]|0;k=f[l+4>>2]|0;l=vl(n|0,k|0,4,0)|0;m=H;if((o|0)<(m|0)|(o|0)==(m|0)&q>>>0<l>>>0){p=0;u=d;return p|0}w=f[c>>2]|0;x=w+n|0;y=h[x>>0]|h[x+1>>0]<<8|h[x+2>>0]<<16|h[x+3>>0]<<24;x=i;f[x>>2]=l;f[x+4>>2]=m;m=vl(n|0,k|0,8,0)|0;k=H;if((o|0)<(k|0)|(o|0)==(k|0)&q>>>0<m>>>0){p=0;u=d;return p|0}q=w+l|0;l=h[q>>0]|h[q+1>>0]<<8|h[q+2>>0]<<16|h[q+3>>0]<<24;q=i;f[q>>2]=m;f[q+4>>2]=k;if((y|0)>(l|0)){p=0;u=d;return p|0}f[a+12>>2]=y;f[a+16>>2]=l;k=wl(l|0,((l|0)<0)<<31>>31|0,y|0,((y|0)<0)<<31>>31|0)|0;y=H;if(!(y>>>0<0|(y|0)==0&k>>>0<2147483647)){p=0;u=d;return p|0}y=k+1|0;f[a+20>>2]=y;k=(y|0)/2|0;l=a+24|0;f[l>>2]=k;f[a+28>>2]=0-k;if(y&1|0){p=1;u=d;return p|0}f[l>>2]=k+-1;p=1;u=d;return p|0}while(0);p=0;u=d;return p|0}function qc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=u;u=u+16|0;b=c+8|0;d=c+4|0;e=c;g=a+64|0;h=f[g>>2]|0;if((f[h+28>>2]|0)==(f[h+24>>2]|0)){u=c;return}i=a+52|0;j=a+56|0;k=a+60|0;l=a+12|0;m=a+28|0;n=a+40|0;o=a+44|0;p=a+48|0;q=0;r=0;s=h;while(1){h=f[(f[s+24>>2]|0)+(r<<2)>>2]|0;if((h|0)==-1){t=q;v=s}else{w=q+1|0;f[b>>2]=q;x=f[j>>2]|0;if((x|0)==(f[k>>2]|0))Ng(i,b);else{f[x>>2]=q;f[j>>2]=x+4}f[d>>2]=h;f[e>>2]=0;a:do if(!(f[(f[l>>2]|0)+(r>>>5<<2)>>2]&1<<(r&31)))y=h;else{x=h+1|0;z=((x>>>0)%3|0|0)==0?h+-2|0:x;if(((z|0)!=-1?(f[(f[a>>2]|0)+(z>>>5<<2)>>2]&1<<(z&31)|0)==0:0)?(x=f[(f[(f[g>>2]|0)+12>>2]|0)+(z<<2)>>2]|0,z=x+1|0,(x|0)!=-1):0){A=((z>>>0)%3|0|0)==0?x+-2|0:z;f[e>>2]=A;if((A|0)==-1){y=h;break}z=A;while(1){f[d>>2]=z;A=z+1|0;x=((A>>>0)%3|0|0)==0?z+-2|0:A;if((x|0)==-1)break;if(f[(f[a>>2]|0)+(x>>>5<<2)>>2]&1<<(x&31)|0)break;A=f[(f[(f[g>>2]|0)+12>>2]|0)+(x<<2)>>2]|0;x=A+1|0;if((A|0)==-1)break;B=((x>>>0)%3|0|0)==0?A+-2|0:x;f[e>>2]=B;if((B|0)==-1){y=z;break a}else z=B}f[e>>2]=-1;y=z;break}f[e>>2]=-1;y=h}while(0);f[(f[m>>2]|0)+(y<<2)>>2]=f[b>>2];h=f[o>>2]|0;if((h|0)==(f[p>>2]|0))Ng(n,d);else{f[h>>2]=f[d>>2];f[o>>2]=h+4}h=f[g>>2]|0;B=f[d>>2]|0;b:do if(((B|0)!=-1?(x=(((B>>>0)%3|0|0)==0?2:-1)+B|0,(x|0)!=-1):0)?(A=f[(f[h+12>>2]|0)+(x<<2)>>2]|0,(A|0)!=-1):0){x=A+(((A>>>0)%3|0|0)==0?2:-1)|0;f[e>>2]=x;if((x|0)!=-1&(x|0)!=(B|0)){A=w;C=x;while(1){x=C+1|0;D=((x>>>0)%3|0|0)==0?C+-2|0:x;do if(f[(f[a>>2]|0)+(D>>>5<<2)>>2]&1<<(D&31)){x=A+1|0;f[b>>2]=A;E=f[j>>2]|0;if((E|0)==(f[k>>2]|0))Ng(i,b);else{f[E>>2]=A;f[j>>2]=E+4}E=f[o>>2]|0;if((E|0)==(f[p>>2]|0)){Ng(n,e);F=x;break}else{f[E>>2]=f[e>>2];f[o>>2]=E+4;F=x;break}}else F=A;while(0);f[(f[m>>2]|0)+(f[e>>2]<<2)>>2]=f[b>>2];G=f[g>>2]|0;D=f[e>>2]|0;if((D|0)==-1)break;x=(((D>>>0)%3|0|0)==0?2:-1)+D|0;if((x|0)==-1)break;D=f[(f[G+12>>2]|0)+(x<<2)>>2]|0;if((D|0)==-1)break;C=D+(((D>>>0)%3|0|0)==0?2:-1)|0;f[e>>2]=C;if(!((C|0)!=-1?(C|0)!=(f[d>>2]|0):0)){H=F;I=G;break b}else A=F}f[e>>2]=-1;H=F;I=G}else{H=w;I=h}}else J=28;while(0);if((J|0)==28){J=0;f[e>>2]=-1;H=w;I=h}t=H;v=I}r=r+1|0;if(r>>>0>=(f[v+28>>2]|0)-(f[v+24>>2]|0)>>2>>>0)break;else{q=t;s=v}}u=c;return}function rc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0;e=Ka[f[(f[a>>2]|0)+44>>2]&127](a)|0;if((e|0)<1){g=0;return g|0}h=(f[c+4>>2]|0)-(f[c>>2]|0)>>2;i=W(h,e)|0;Yf(a,h,e);h=a+16|0;j=f[h>>2]|0;if(!(f[j+80>>2]|0)){g=0;return g|0}k=(f[f[j>>2]>>2]|0)+(f[j+48>>2]|0)|0;if(!k){g=0;return g|0}j=d+8|0;l=j;m=f[l>>2]|0;n=f[l+4>>2]|0;l=d+16|0;o=l;p=f[o>>2]|0;q=f[o+4>>2]|0;if(!((n|0)>(q|0)|(n|0)==(q|0)&m>>>0>p>>>0)){g=0;return g|0}o=f[d>>2]|0;r=b[o+p>>0]|0;s=vl(p|0,q|0,1,0)|0;t=H;u=l;f[u>>2]=s;f[u+4>>2]=t;a:do if(!(r<<24>>24)){if(!((n|0)>(t|0)|(n|0)==(t|0)&m>>>0>s>>>0)){g=0;return g|0}u=b[o+s>>0]|0;v=vl(p|0,q|0,2,0)|0;w=l;f[w>>2]=v;f[w+4>>2]=H;w=u&255;v=(Bj(5)|0)==(w|0);x=f[(f[h>>2]|0)+64>>2]|0;y=(f[x+4>>2]|0)-(f[x>>2]|0)|0;if(v){v=i<<2;if(y>>>0<v>>>0){g=0;return g|0}x=j;z=f[x>>2]|0;A=f[x+4>>2]|0;x=l;B=f[x>>2]|0;C=vl(B|0,f[x+4>>2]|0,v|0,0)|0;x=H;if((A|0)<(x|0)|(A|0)==(x|0)&z>>>0<C>>>0){g=0;return g|0}else{Bf(k|0,(f[d>>2]|0)+B|0,v|0)|0;B=l;C=vl(f[B>>2]|0,f[B+4>>2]|0,v|0,0)|0;v=l;f[v>>2]=C;f[v+4>>2]=H;D=20;break}}v=W(i,w)|0;if(y>>>0<v>>>0){g=0;return g|0}y=j;C=f[y>>2]|0;B=f[y+4>>2]|0;y=l;z=f[y>>2]|0;x=f[y+4>>2]|0;y=wl(C|0,B|0,z|0,x|0)|0;A=H;if((A|0)<0|(A|0)==0&y>>>0<v>>>0){g=0;return g|0}if(!i)D=21;else{v=u&255;u=0;y=z;z=x;x=B;B=C;while(1){C=vl(y|0,z|0,v|0,0)|0;A=H;if((x|0)<(A|0)|(x|0)==(A|0)&B>>>0<C>>>0){E=y;F=z}else{Bf(k+(u<<2)|0,(f[d>>2]|0)+y|0,w|0)|0;C=l;A=vl(f[C>>2]|0,f[C+4>>2]|0,v|0,0)|0;C=H;G=l;f[G>>2]=A;f[G+4>>2]=C;E=A;F=C}C=u+1|0;if((C|0)==(i|0)){D=20;break a}A=j;u=C;y=E;z=F;x=f[A+4>>2]|0;B=f[A>>2]|0}}}else if(kh(i,e,d,k)|0)D=20;else{g=0;return g|0}while(0);do if((D|0)==20)if(!i)D=21;else{F=a+20|0;E=f[F>>2]|0;if(E|0?Ka[f[(f[E>>2]|0)+32>>2]&127](E)|0:0){I=F;J=1;break}Yj(k,i,k);I=F;J=1}while(0);if((D|0)==21){I=a+20|0;J=0}a=f[I>>2]|0;if(a|0){if(!(La[f[(f[a>>2]|0)+40>>2]&127](a,d)|0)){g=0;return g|0}if(J?(J=f[I>>2]|0,!(Na[f[(f[J>>2]|0)+44>>2]&31](J,k,k,i,e,f[c>>2]|0)|0)):0){g=0;return g|0}}g=1;return g|0}function sc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;if(c>>>0>=1048576){if((p|0)!=4194304)f[w>>2]=x+4194304}else Eg(n,1048576-c|0);c=a+28|0;x=a+32|0;a=f[c>>2]|0;w=(f[x>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[x>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;x=w;w=(f[p>>2]|0)+w|0;if(w>>>0>1048576){g=0;r=38;break}if(x>>>0<w>>>0){p=f[n>>2]|0;a=x;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==1048576|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function tc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;o=x;if(c>>>0>=8192){if((p|0)!=32768)f[w>>2]=o+32768}else Eg(n,8192-c|0);c=a+28|0;o=a+32|0;a=f[c>>2]|0;w=(f[o>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[o>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;o=w;w=(f[p>>2]|0)+w|0;if(w>>>0>8192){g=0;r=38;break}if(o>>>0<w>>>0){p=f[n>>2]|0;a=o;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==8192|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function uc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;o=x;if(c>>>0>=4096){if((p|0)!=16384)f[w>>2]=o+16384}else Eg(n,4096-c|0);c=a+28|0;o=a+32|0;a=f[c>>2]|0;w=(f[o>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[o>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;o=w;w=(f[p>>2]|0)+w|0;if(w>>>0>4096){g=0;r=38;break}if(o>>>0<w>>>0){p=f[n>>2]|0;a=o;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==4096|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0}function vc(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=d[c+38>>1]|0;if(!(e<<16>>16)){g=0;return g|0}i=a+12|0;do if((e&65535)<512){j=c+8|0;k=f[j>>2]|0;l=f[j+4>>2]|0;j=c+16|0;m=j;n=f[m>>2]|0;o=vl(n|0,f[m+4>>2]|0,4,0)|0;m=H;if((l|0)<(m|0)|(l|0)==(m|0)&k>>>0<o>>>0){g=0;return g|0}else{o=(f[c>>2]|0)+n|0;n=h[o>>0]|h[o+1>>0]<<8|h[o+2>>0]<<16|h[o+3>>0]<<24;b[i>>0]=n;b[i+1>>0]=n>>8;b[i+2>>0]=n>>16;b[i+3>>0]=n>>24;o=j;k=vl(f[o>>2]|0,f[o+4>>2]|0,4,0)|0;o=j;f[o>>2]=k;f[o+4>>2]=H;p=n;break}}else if(zh(i,c)|0){p=f[i>>2]|0;break}else{g=0;return g|0}while(0);e=a+4|0;n=f[a>>2]|0;o=(f[e>>2]|0)-n>>2;if(p>>>0<=o>>>0)if(p>>>0<o>>>0){f[e>>2]=n+(p<<2);q=p}else q=p;else{Eg(a,p-o|0);q=f[i>>2]|0}if(!q){g=1;return g|0}o=c+8|0;p=c+16|0;n=0;e=q;a:while(1){q=o;k=f[q>>2]|0;j=f[q+4>>2]|0;q=p;m=f[q>>2]|0;l=f[q+4>>2]|0;if(!((j|0)>(l|0)|(j|0)==(l|0)&k>>>0>m>>>0)){g=0;r=38;break}q=f[c>>2]|0;s=b[q+m>>0]|0;t=vl(m|0,l|0,1,0)|0;l=H;m=p;f[m>>2]=t;f[m+4>>2]=l;m=s&255;u=m&3;v=m>>>2;switch(s&3){case 3:{s=v+n|0;if(s>>>0>=e>>>0){g=0;r=38;break a}oh((f[a>>2]|0)+(n<<2)|0,0,(m&252)+4|0)|0;w=s;break}case 0:{x=v;r=20;break}default:{s=v;v=0;m=l;l=t;while(1){if(!((j|0)>(m|0)|(j|0)==(m|0)&k>>>0>l>>>0)){g=0;r=38;break a}t=b[q+l>>0]|0;l=vl(l|0,m|0,1,0)|0;m=H;y=p;f[y>>2]=l;f[y+4>>2]=m;y=(t&255)<<(v<<3|6)|s;v=v+1|0;if(v>>>0>=u>>>0){x=y;r=20;break}else s=y}}}if((r|0)==20){r=0;f[(f[a>>2]|0)+(n<<2)>>2]=x;w=n}n=w+1|0;e=f[i>>2]|0;if(n>>>0>=e>>>0){r=22;break}}if((r|0)==22){n=a+16|0;i=f[a>>2]|0;w=a+20|0;x=f[n>>2]|0;p=(f[w>>2]|0)-x|0;c=p>>2;if(c>>>0>=524288){if((p|0)!=2097152)f[w>>2]=x+2097152}else Eg(n,524288-c|0);c=a+28|0;x=a+32|0;a=f[c>>2]|0;w=(f[x>>2]|0)-a>>3;p=a;if(e>>>0<=w>>>0){if(e>>>0<w>>>0)f[x>>2]=p+(e<<3);if(!e){g=0;return g|0}else z=p}else{cg(c,e-w|0);z=f[c>>2]|0}c=0;w=0;while(1){p=i+(c<<2)|0;f[z+(c<<3)>>2]=f[p>>2];f[z+(c<<3)+4>>2]=w;x=w;w=(f[p>>2]|0)+w|0;if(w>>>0>524288){g=0;r=38;break}if(x>>>0<w>>>0){p=f[n>>2]|0;a=x;do{f[p+(a<<2)>>2]=c;a=a+1|0}while((a|0)!=(w|0))}c=c+1|0;if(c>>>0>=e>>>0){r=37;break}}if((r|0)==37)return (w|0)==524288|0;else if((r|0)==38)return g|0}else if((r|0)==38)return g|0;return 0} +function Va(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;b=u;u=u+16|0;c=b;do if(a>>>0<245){d=a>>>0<11?16:a+11&-8;e=d>>>3;g=f[4072]|0;h=g>>>e;if(h&3|0){i=(h&1^1)+e|0;j=16328+(i<<1<<2)|0;k=j+8|0;l=f[k>>2]|0;m=l+8|0;n=f[m>>2]|0;if((n|0)==(j|0))f[4072]=g&~(1<<i);else{f[n+12>>2]=j;f[k>>2]=n}n=i<<3;f[l+4>>2]=n|3;i=l+n+4|0;f[i>>2]=f[i>>2]|1;o=m;u=b;return o|0}m=f[4074]|0;if(d>>>0>m>>>0){if(h|0){i=2<<e;n=h<<e&(i|0-i);i=(n&0-n)+-1|0;n=i>>>12&16;e=i>>>n;i=e>>>5&8;h=e>>>i;e=h>>>2&4;l=h>>>e;h=l>>>1&2;k=l>>>h;l=k>>>1&1;j=(i|n|e|h|l)+(k>>>l)|0;l=16328+(j<<1<<2)|0;k=l+8|0;h=f[k>>2]|0;e=h+8|0;n=f[e>>2]|0;if((n|0)==(l|0)){i=g&~(1<<j);f[4072]=i;p=i}else{f[n+12>>2]=l;f[k>>2]=n;p=g}n=j<<3;j=n-d|0;f[h+4>>2]=d|3;k=h+d|0;f[k+4>>2]=j|1;f[h+n>>2]=j;if(m|0){n=f[4077]|0;h=m>>>3;l=16328+(h<<1<<2)|0;i=1<<h;if(!(p&i)){f[4072]=p|i;q=l;r=l+8|0}else{i=l+8|0;q=f[i>>2]|0;r=i}f[r>>2]=n;f[q+12>>2]=n;f[n+8>>2]=q;f[n+12>>2]=l}f[4074]=j;f[4077]=k;o=e;u=b;return o|0}e=f[4073]|0;if(e){k=(e&0-e)+-1|0;j=k>>>12&16;l=k>>>j;k=l>>>5&8;n=l>>>k;l=n>>>2&4;i=n>>>l;n=i>>>1&2;h=i>>>n;i=h>>>1&1;s=f[16592+((k|j|l|n|i)+(h>>>i)<<2)>>2]|0;i=s;h=s;n=(f[s+4>>2]&-8)-d|0;while(1){s=f[i+16>>2]|0;if(!s){l=f[i+20>>2]|0;if(!l)break;else t=l}else t=s;s=(f[t+4>>2]&-8)-d|0;l=s>>>0<n>>>0;i=t;h=l?t:h;n=l?s:n}i=h+d|0;if(i>>>0>h>>>0){s=f[h+24>>2]|0;l=f[h+12>>2]|0;do if((l|0)==(h|0)){j=h+20|0;k=f[j>>2]|0;if(!k){v=h+16|0;w=f[v>>2]|0;if(!w){x=0;break}else{y=w;z=v}}else{y=k;z=j}j=y;k=z;while(1){v=j+20|0;w=f[v>>2]|0;if(!w){A=j+16|0;B=f[A>>2]|0;if(!B)break;else{C=B;D=A}}else{C=w;D=v}j=C;k=D}f[k>>2]=0;x=j}else{v=f[h+8>>2]|0;f[v+12>>2]=l;f[l+8>>2]=v;x=l}while(0);do if(s|0){l=f[h+28>>2]|0;v=16592+(l<<2)|0;if((h|0)==(f[v>>2]|0)){f[v>>2]=x;if(!x){f[4073]=e&~(1<<l);break}}else{l=s+16|0;f[((f[l>>2]|0)==(h|0)?l:s+20|0)>>2]=x;if(!x)break}f[x+24>>2]=s;l=f[h+16>>2]|0;if(l|0){f[x+16>>2]=l;f[l+24>>2]=x}l=f[h+20>>2]|0;if(l|0){f[x+20>>2]=l;f[l+24>>2]=x}}while(0);if(n>>>0<16){s=n+d|0;f[h+4>>2]=s|3;e=h+s+4|0;f[e>>2]=f[e>>2]|1}else{f[h+4>>2]=d|3;f[i+4>>2]=n|1;f[i+n>>2]=n;if(m|0){e=f[4077]|0;s=m>>>3;l=16328+(s<<1<<2)|0;v=1<<s;if(!(v&g)){f[4072]=v|g;E=l;F=l+8|0}else{v=l+8|0;E=f[v>>2]|0;F=v}f[F>>2]=e;f[E+12>>2]=e;f[e+8>>2]=E;f[e+12>>2]=l}f[4074]=n;f[4077]=i}o=h+8|0;u=b;return o|0}else G=d}else G=d}else G=d}else if(a>>>0<=4294967231){l=a+11|0;e=l&-8;v=f[4073]|0;if(v){s=0-e|0;w=l>>>8;if(w)if(e>>>0>16777215)H=31;else{l=(w+1048320|0)>>>16&8;A=w<<l;w=(A+520192|0)>>>16&4;B=A<<w;A=(B+245760|0)>>>16&2;I=14-(w|l|A)+(B<<A>>>15)|0;H=e>>>(I+7|0)&1|I<<1}else H=0;I=f[16592+(H<<2)>>2]|0;a:do if(!I){J=0;K=0;L=s;M=61}else{A=0;B=s;l=I;w=e<<((H|0)==31?0:25-(H>>>1)|0);N=0;while(1){O=(f[l+4>>2]&-8)-e|0;if(O>>>0<B>>>0)if(!O){P=l;Q=0;R=l;M=65;break a}else{S=l;T=O}else{S=A;T=B}O=f[l+20>>2]|0;l=f[l+16+(w>>>31<<2)>>2]|0;U=(O|0)==0|(O|0)==(l|0)?N:O;if(!l){J=U;K=S;L=T;M=61;break}else{A=S;B=T;w=w<<1;N=U}}}while(0);if((M|0)==61){if((J|0)==0&(K|0)==0){I=2<<H;s=(I|0-I)&v;if(!s){G=e;break}I=(s&0-s)+-1|0;s=I>>>12&16;d=I>>>s;I=d>>>5&8;h=d>>>I;d=h>>>2&4;i=h>>>d;h=i>>>1&2;n=i>>>h;i=n>>>1&1;V=0;W=f[16592+((I|s|d|h|i)+(n>>>i)<<2)>>2]|0}else{V=K;W=J}if(!W){X=V;Y=L}else{P=V;Q=L;R=W;M=65}}if((M|0)==65){i=P;n=Q;h=R;while(1){d=(f[h+4>>2]&-8)-e|0;s=d>>>0<n>>>0;I=s?d:n;d=s?h:i;s=f[h+16>>2]|0;if(!s)Z=f[h+20>>2]|0;else Z=s;if(!Z){X=d;Y=I;break}else{i=d;n=I;h=Z}}}if(((X|0)!=0?Y>>>0<((f[4074]|0)-e|0)>>>0:0)?(h=X+e|0,h>>>0>X>>>0):0){n=f[X+24>>2]|0;i=f[X+12>>2]|0;do if((i|0)==(X|0)){I=X+20|0;d=f[I>>2]|0;if(!d){s=X+16|0;g=f[s>>2]|0;if(!g){_=0;break}else{$=g;aa=s}}else{$=d;aa=I}I=$;d=aa;while(1){s=I+20|0;g=f[s>>2]|0;if(!g){m=I+16|0;N=f[m>>2]|0;if(!N)break;else{ba=N;ca=m}}else{ba=g;ca=s}I=ba;d=ca}f[d>>2]=0;_=I}else{s=f[X+8>>2]|0;f[s+12>>2]=i;f[i+8>>2]=s;_=i}while(0);do if(n){i=f[X+28>>2]|0;s=16592+(i<<2)|0;if((X|0)==(f[s>>2]|0)){f[s>>2]=_;if(!_){s=v&~(1<<i);f[4073]=s;da=s;break}}else{s=n+16|0;f[((f[s>>2]|0)==(X|0)?s:n+20|0)>>2]=_;if(!_){da=v;break}}f[_+24>>2]=n;s=f[X+16>>2]|0;if(s|0){f[_+16>>2]=s;f[s+24>>2]=_}s=f[X+20>>2]|0;if(s){f[_+20>>2]=s;f[s+24>>2]=_;da=v}else da=v}else da=v;while(0);b:do if(Y>>>0<16){v=Y+e|0;f[X+4>>2]=v|3;n=X+v+4|0;f[n>>2]=f[n>>2]|1}else{f[X+4>>2]=e|3;f[h+4>>2]=Y|1;f[h+Y>>2]=Y;n=Y>>>3;if(Y>>>0<256){v=16328+(n<<1<<2)|0;s=f[4072]|0;i=1<<n;if(!(s&i)){f[4072]=s|i;ea=v;fa=v+8|0}else{i=v+8|0;ea=f[i>>2]|0;fa=i}f[fa>>2]=h;f[ea+12>>2]=h;f[h+8>>2]=ea;f[h+12>>2]=v;break}v=Y>>>8;if(v)if(Y>>>0>16777215)ga=31;else{i=(v+1048320|0)>>>16&8;s=v<<i;v=(s+520192|0)>>>16&4;n=s<<v;s=(n+245760|0)>>>16&2;g=14-(v|i|s)+(n<<s>>>15)|0;ga=Y>>>(g+7|0)&1|g<<1}else ga=0;g=16592+(ga<<2)|0;f[h+28>>2]=ga;s=h+16|0;f[s+4>>2]=0;f[s>>2]=0;s=1<<ga;if(!(da&s)){f[4073]=da|s;f[g>>2]=h;f[h+24>>2]=g;f[h+12>>2]=h;f[h+8>>2]=h;break}s=f[g>>2]|0;c:do if((f[s+4>>2]&-8|0)==(Y|0))ha=s;else{g=Y<<((ga|0)==31?0:25-(ga>>>1)|0);n=s;while(1){ia=n+16+(g>>>31<<2)|0;i=f[ia>>2]|0;if(!i)break;if((f[i+4>>2]&-8|0)==(Y|0)){ha=i;break c}else{g=g<<1;n=i}}f[ia>>2]=h;f[h+24>>2]=n;f[h+12>>2]=h;f[h+8>>2]=h;break b}while(0);s=ha+8|0;I=f[s>>2]|0;f[I+12>>2]=h;f[s>>2]=h;f[h+8>>2]=I;f[h+12>>2]=ha;f[h+24>>2]=0}while(0);o=X+8|0;u=b;return o|0}else G=e}else G=e}else G=-1;while(0);X=f[4074]|0;if(X>>>0>=G>>>0){ha=X-G|0;ia=f[4077]|0;if(ha>>>0>15){Y=ia+G|0;f[4077]=Y;f[4074]=ha;f[Y+4>>2]=ha|1;f[ia+X>>2]=ha;f[ia+4>>2]=G|3}else{f[4074]=0;f[4077]=0;f[ia+4>>2]=X|3;ha=ia+X+4|0;f[ha>>2]=f[ha>>2]|1}o=ia+8|0;u=b;return o|0}ia=f[4075]|0;if(ia>>>0>G>>>0){ha=ia-G|0;f[4075]=ha;X=f[4078]|0;Y=X+G|0;f[4078]=Y;f[Y+4>>2]=ha|1;f[X+4>>2]=G|3;o=X+8|0;u=b;return o|0}if(!(f[4190]|0)){f[4192]=4096;f[4191]=4096;f[4193]=-1;f[4194]=-1;f[4195]=0;f[4183]=0;f[4190]=c&-16^1431655768;ja=4096}else ja=f[4192]|0;c=G+48|0;X=G+47|0;ha=ja+X|0;Y=0-ja|0;ja=ha&Y;if(ja>>>0<=G>>>0){o=0;u=b;return o|0}ga=f[4182]|0;if(ga|0?(da=f[4180]|0,ea=da+ja|0,ea>>>0<=da>>>0|ea>>>0>ga>>>0):0){o=0;u=b;return o|0}d:do if(!(f[4183]&4)){ga=f[4078]|0;e:do if(ga){ea=16736;while(1){da=f[ea>>2]|0;if(da>>>0<=ga>>>0?(da+(f[ea+4>>2]|0)|0)>>>0>ga>>>0:0)break;da=f[ea+8>>2]|0;if(!da){M=128;break e}else ea=da}da=ha-ia&Y;if(da>>>0<2147483647){fa=vj(da|0)|0;if((fa|0)==((f[ea>>2]|0)+(f[ea+4>>2]|0)|0))if((fa|0)==(-1|0))ka=da;else{la=da;ma=fa;M=145;break d}else{na=fa;oa=da;M=136}}else ka=0}else M=128;while(0);do if((M|0)==128){ga=vj(0)|0;if((ga|0)!=(-1|0)?(e=ga,da=f[4191]|0,fa=da+-1|0,_=((fa&e|0)==0?0:(fa+e&0-da)-e|0)+ja|0,e=f[4180]|0,da=_+e|0,_>>>0>G>>>0&_>>>0<2147483647):0){fa=f[4182]|0;if(fa|0?da>>>0<=e>>>0|da>>>0>fa>>>0:0){ka=0;break}fa=vj(_|0)|0;if((fa|0)==(ga|0)){la=_;ma=ga;M=145;break d}else{na=fa;oa=_;M=136}}else ka=0}while(0);do if((M|0)==136){_=0-oa|0;if(!(c>>>0>oa>>>0&(oa>>>0<2147483647&(na|0)!=(-1|0))))if((na|0)==(-1|0)){ka=0;break}else{la=oa;ma=na;M=145;break d}fa=f[4192]|0;ga=X-oa+fa&0-fa;if(ga>>>0>=2147483647){la=oa;ma=na;M=145;break d}if((vj(ga|0)|0)==(-1|0)){vj(_|0)|0;ka=0;break}else{la=ga+oa|0;ma=na;M=145;break d}}while(0);f[4183]=f[4183]|4;pa=ka;M=143}else{pa=0;M=143}while(0);if(((M|0)==143?ja>>>0<2147483647:0)?(ka=vj(ja|0)|0,ja=vj(0)|0,na=ja-ka|0,oa=na>>>0>(G+40|0)>>>0,!((ka|0)==(-1|0)|oa^1|ka>>>0<ja>>>0&((ka|0)!=(-1|0)&(ja|0)!=(-1|0))^1)):0){la=oa?na:pa;ma=ka;M=145}if((M|0)==145){ka=(f[4180]|0)+la|0;f[4180]=ka;if(ka>>>0>(f[4181]|0)>>>0)f[4181]=ka;ka=f[4078]|0;f:do if(ka){pa=16736;while(1){qa=f[pa>>2]|0;ra=f[pa+4>>2]|0;if((ma|0)==(qa+ra|0)){M=154;break}na=f[pa+8>>2]|0;if(!na)break;else pa=na}if(((M|0)==154?(na=pa+4|0,(f[pa+12>>2]&8|0)==0):0)?ma>>>0>ka>>>0&qa>>>0<=ka>>>0:0){f[na>>2]=ra+la;na=(f[4075]|0)+la|0;oa=ka+8|0;ja=(oa&7|0)==0?0:0-oa&7;oa=ka+ja|0;X=na-ja|0;f[4078]=oa;f[4075]=X;f[oa+4>>2]=X|1;f[ka+na+4>>2]=40;f[4079]=f[4194];break}if(ma>>>0<(f[4076]|0)>>>0)f[4076]=ma;na=ma+la|0;X=16736;while(1){if((f[X>>2]|0)==(na|0)){M=162;break}oa=f[X+8>>2]|0;if(!oa)break;else X=oa}if((M|0)==162?(f[X+12>>2]&8|0)==0:0){f[X>>2]=ma;pa=X+4|0;f[pa>>2]=(f[pa>>2]|0)+la;pa=ma+8|0;oa=ma+((pa&7|0)==0?0:0-pa&7)|0;pa=na+8|0;ja=na+((pa&7|0)==0?0:0-pa&7)|0;pa=oa+G|0;c=ja-oa-G|0;f[oa+4>>2]=G|3;g:do if((ka|0)==(ja|0)){Y=(f[4075]|0)+c|0;f[4075]=Y;f[4078]=pa;f[pa+4>>2]=Y|1}else{if((f[4077]|0)==(ja|0)){Y=(f[4074]|0)+c|0;f[4074]=Y;f[4077]=pa;f[pa+4>>2]=Y|1;f[pa+Y>>2]=Y;break}Y=f[ja+4>>2]|0;if((Y&3|0)==1){ia=Y&-8;ha=Y>>>3;h:do if(Y>>>0<256){ga=f[ja+8>>2]|0;_=f[ja+12>>2]|0;if((_|0)==(ga|0)){f[4072]=f[4072]&~(1<<ha);break}else{f[ga+12>>2]=_;f[_+8>>2]=ga;break}}else{ga=f[ja+24>>2]|0;_=f[ja+12>>2]|0;do if((_|0)==(ja|0)){fa=ja+16|0;da=fa+4|0;e=f[da>>2]|0;if(!e){ca=f[fa>>2]|0;if(!ca){sa=0;break}else{ta=ca;ua=fa}}else{ta=e;ua=da}da=ta;e=ua;while(1){fa=da+20|0;ca=f[fa>>2]|0;if(!ca){ba=da+16|0;aa=f[ba>>2]|0;if(!aa)break;else{va=aa;wa=ba}}else{va=ca;wa=fa}da=va;e=wa}f[e>>2]=0;sa=da}else{fa=f[ja+8>>2]|0;f[fa+12>>2]=_;f[_+8>>2]=fa;sa=_}while(0);if(!ga)break;_=f[ja+28>>2]|0;n=16592+(_<<2)|0;do if((f[n>>2]|0)!=(ja|0)){fa=ga+16|0;f[((f[fa>>2]|0)==(ja|0)?fa:ga+20|0)>>2]=sa;if(!sa)break h}else{f[n>>2]=sa;if(sa|0)break;f[4073]=f[4073]&~(1<<_);break h}while(0);f[sa+24>>2]=ga;_=ja+16|0;n=f[_>>2]|0;if(n|0){f[sa+16>>2]=n;f[n+24>>2]=sa}n=f[_+4>>2]|0;if(!n)break;f[sa+20>>2]=n;f[n+24>>2]=sa}while(0);xa=ja+ia|0;ya=ia+c|0}else{xa=ja;ya=c}ha=xa+4|0;f[ha>>2]=f[ha>>2]&-2;f[pa+4>>2]=ya|1;f[pa+ya>>2]=ya;ha=ya>>>3;if(ya>>>0<256){Y=16328+(ha<<1<<2)|0;ea=f[4072]|0;n=1<<ha;if(!(ea&n)){f[4072]=ea|n;za=Y;Aa=Y+8|0}else{n=Y+8|0;za=f[n>>2]|0;Aa=n}f[Aa>>2]=pa;f[za+12>>2]=pa;f[pa+8>>2]=za;f[pa+12>>2]=Y;break}Y=ya>>>8;do if(!Y)Ba=0;else{if(ya>>>0>16777215){Ba=31;break}n=(Y+1048320|0)>>>16&8;ea=Y<<n;ha=(ea+520192|0)>>>16&4;_=ea<<ha;ea=(_+245760|0)>>>16&2;fa=14-(ha|n|ea)+(_<<ea>>>15)|0;Ba=ya>>>(fa+7|0)&1|fa<<1}while(0);Y=16592+(Ba<<2)|0;f[pa+28>>2]=Ba;ia=pa+16|0;f[ia+4>>2]=0;f[ia>>2]=0;ia=f[4073]|0;fa=1<<Ba;if(!(ia&fa)){f[4073]=ia|fa;f[Y>>2]=pa;f[pa+24>>2]=Y;f[pa+12>>2]=pa;f[pa+8>>2]=pa;break}fa=f[Y>>2]|0;i:do if((f[fa+4>>2]&-8|0)==(ya|0))Ca=fa;else{Y=ya<<((Ba|0)==31?0:25-(Ba>>>1)|0);ia=fa;while(1){Da=ia+16+(Y>>>31<<2)|0;ea=f[Da>>2]|0;if(!ea)break;if((f[ea+4>>2]&-8|0)==(ya|0)){Ca=ea;break i}else{Y=Y<<1;ia=ea}}f[Da>>2]=pa;f[pa+24>>2]=ia;f[pa+12>>2]=pa;f[pa+8>>2]=pa;break g}while(0);fa=Ca+8|0;Y=f[fa>>2]|0;f[Y+12>>2]=pa;f[fa>>2]=pa;f[pa+8>>2]=Y;f[pa+12>>2]=Ca;f[pa+24>>2]=0}while(0);o=oa+8|0;u=b;return o|0}pa=16736;while(1){c=f[pa>>2]|0;if(c>>>0<=ka>>>0?(Ea=c+(f[pa+4>>2]|0)|0,Ea>>>0>ka>>>0):0)break;pa=f[pa+8>>2]|0}pa=Ea+-47|0;oa=pa+8|0;c=pa+((oa&7|0)==0?0:0-oa&7)|0;oa=ka+16|0;pa=c>>>0<oa>>>0?ka:c;c=pa+8|0;ja=la+-40|0;na=ma+8|0;X=(na&7|0)==0?0:0-na&7;na=ma+X|0;Y=ja-X|0;f[4078]=na;f[4075]=Y;f[na+4>>2]=Y|1;f[ma+ja+4>>2]=40;f[4079]=f[4194];ja=pa+4|0;f[ja>>2]=27;f[c>>2]=f[4184];f[c+4>>2]=f[4185];f[c+8>>2]=f[4186];f[c+12>>2]=f[4187];f[4184]=ma;f[4185]=la;f[4187]=0;f[4186]=c;c=pa+24|0;do{Y=c;c=c+4|0;f[c>>2]=7}while((Y+8|0)>>>0<Ea>>>0);if((pa|0)!=(ka|0)){c=pa-ka|0;f[ja>>2]=f[ja>>2]&-2;f[ka+4>>2]=c|1;f[pa>>2]=c;Y=c>>>3;if(c>>>0<256){na=16328+(Y<<1<<2)|0;X=f[4072]|0;fa=1<<Y;if(!(X&fa)){f[4072]=X|fa;Fa=na;Ga=na+8|0}else{fa=na+8|0;Fa=f[fa>>2]|0;Ga=fa}f[Ga>>2]=ka;f[Fa+12>>2]=ka;f[ka+8>>2]=Fa;f[ka+12>>2]=na;break}na=c>>>8;if(na)if(c>>>0>16777215)Ha=31;else{fa=(na+1048320|0)>>>16&8;X=na<<fa;na=(X+520192|0)>>>16&4;Y=X<<na;X=(Y+245760|0)>>>16&2;ga=14-(na|fa|X)+(Y<<X>>>15)|0;Ha=c>>>(ga+7|0)&1|ga<<1}else Ha=0;ga=16592+(Ha<<2)|0;f[ka+28>>2]=Ha;f[ka+20>>2]=0;f[oa>>2]=0;X=f[4073]|0;Y=1<<Ha;if(!(X&Y)){f[4073]=X|Y;f[ga>>2]=ka;f[ka+24>>2]=ga;f[ka+12>>2]=ka;f[ka+8>>2]=ka;break}Y=f[ga>>2]|0;j:do if((f[Y+4>>2]&-8|0)==(c|0))Ia=Y;else{ga=c<<((Ha|0)==31?0:25-(Ha>>>1)|0);X=Y;while(1){Ja=X+16+(ga>>>31<<2)|0;fa=f[Ja>>2]|0;if(!fa)break;if((f[fa+4>>2]&-8|0)==(c|0)){Ia=fa;break j}else{ga=ga<<1;X=fa}}f[Ja>>2]=ka;f[ka+24>>2]=X;f[ka+12>>2]=ka;f[ka+8>>2]=ka;break f}while(0);c=Ia+8|0;Y=f[c>>2]|0;f[Y+12>>2]=ka;f[c>>2]=ka;f[ka+8>>2]=Y;f[ka+12>>2]=Ia;f[ka+24>>2]=0}}else{Y=f[4076]|0;if((Y|0)==0|ma>>>0<Y>>>0)f[4076]=ma;f[4184]=ma;f[4185]=la;f[4187]=0;f[4081]=f[4190];f[4080]=-1;f[4085]=16328;f[4084]=16328;f[4087]=16336;f[4086]=16336;f[4089]=16344;f[4088]=16344;f[4091]=16352;f[4090]=16352;f[4093]=16360;f[4092]=16360;f[4095]=16368;f[4094]=16368;f[4097]=16376;f[4096]=16376;f[4099]=16384;f[4098]=16384;f[4101]=16392;f[4100]=16392;f[4103]=16400;f[4102]=16400;f[4105]=16408;f[4104]=16408;f[4107]=16416;f[4106]=16416;f[4109]=16424;f[4108]=16424;f[4111]=16432;f[4110]=16432;f[4113]=16440;f[4112]=16440;f[4115]=16448;f[4114]=16448;f[4117]=16456;f[4116]=16456;f[4119]=16464;f[4118]=16464;f[4121]=16472;f[4120]=16472;f[4123]=16480;f[4122]=16480;f[4125]=16488;f[4124]=16488;f[4127]=16496;f[4126]=16496;f[4129]=16504;f[4128]=16504;f[4131]=16512;f[4130]=16512;f[4133]=16520;f[4132]=16520;f[4135]=16528;f[4134]=16528;f[4137]=16536;f[4136]=16536;f[4139]=16544;f[4138]=16544;f[4141]=16552;f[4140]=16552;f[4143]=16560;f[4142]=16560;f[4145]=16568;f[4144]=16568;f[4147]=16576;f[4146]=16576;Y=la+-40|0;c=ma+8|0;oa=(c&7|0)==0?0:0-c&7;c=ma+oa|0;pa=Y-oa|0;f[4078]=c;f[4075]=pa;f[c+4>>2]=pa|1;f[ma+Y+4>>2]=40;f[4079]=f[4194]}while(0);ma=f[4075]|0;if(ma>>>0>G>>>0){la=ma-G|0;f[4075]=la;ma=f[4078]|0;ka=ma+G|0;f[4078]=ka;f[ka+4>>2]=la|1;f[ma+4>>2]=G|3;o=ma+8|0;u=b;return o|0}}ma=Ro()|0;f[ma>>2]=12;o=0;u=b;return o|0}function Wa(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;d=u;u=u+80|0;e=d+56|0;g=d+36|0;i=d+16|0;k=d+4|0;l=d+48|0;m=d;f[g>>2]=0;n=g+4|0;f[n>>2]=0;o=g+8|0;f[o>>2]=0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;f[i+16>>2]=1065353216;f[k>>2]=0;p=k+4|0;f[p>>2]=0;q=k+8|0;f[q>>2]=0;r=(f[a+216>>2]|0)==(f[a+220>>2]|0);s=a+120|0;t=f[a+124>>2]|0;a:do if((c|0)>0){v=a+232|0;w=a+420|0;x=a+308|0;y=a+400|0;z=a+416|0;A=a+304|0;B=a+296|0;C=a+300|0;D=a+8|0;E=a+36|0;F=a+40|0;G=i+4|0;H=c+-1|0;I=a+388|0;J=0;b:while(1){K=J+1|0;if((f[w>>2]|0)!=-1?pi(y)|0:0){L=f[w>>2]|0;f[z>>2]=L;if(!L)M=17;else{N=L;M=32}}else M=6;c:do if((M|0)==6){M=0;do if(!(b[x>>0]|0))O=1;else{L=f[A>>2]|0;P=f[B>>2]|0;Q=f[C>>2]|0;R=P+(L>>>3)|0;if(R>>>0<Q>>>0?(S=h[R>>0]|0,R=L+1|0,f[A>>2]=R,1<<(L&7)&S|0):0){S=P+(R>>>3)|0;if(S>>>0<Q>>>0){T=(h[S>>0]|0)>>>(R&7)&1;U=L+2|0;f[A>>2]=U;V=T;W=P+(U>>>3)|0;X=U}else{V=0;W=S;X=R}if(W>>>0<Q>>>0){Q=(h[W>>0]|0)>>>(X&7);f[A>>2]=X+1;Y=Q<<1&2}else Y=0;O=(Y|V)<<1|1;break}f[z>>2]=0;M=17;break c}while(0);f[z>>2]=O;N=O;M=32}while(0);d:do if((M|0)==17){M=0;Q=f[n>>2]|0;if((f[g>>2]|0)==(Q|0)){Z=-1;M=196;break a}R=Q+-4|0;Q=f[R>>2]|0;S=f[D>>2]|0;U=(Q|0)==-1;P=Q+1|0;if(!U?(T=((P>>>0)%3|0|0)==0?Q+-2|0:P,(T|0)!=-1):0)_=f[(f[S>>2]|0)+(T<<2)>>2]|0;else _=-1;T=f[S+24>>2]|0;P=f[T+(_<<2)>>2]|0;L=P+1|0;if((P|0)==-1)$=-1;else $=((L>>>0)%3|0|0)==0?P+-2|0:L;L=J*3|0;P=L+1|0;aa=f[S+12>>2]|0;f[aa+(Q<<2)>>2]=P;f[aa+(P<<2)>>2]=Q;ba=L+2|0;f[aa+($<<2)>>2]=ba;f[aa+(ba<<2)>>2]=$;aa=f[S>>2]|0;f[aa+(L<<2)>>2]=_;S=$+1|0;if(($|0)!=-1?(ca=((S>>>0)%3|0|0)==0?$+-2|0:S,(ca|0)!=-1):0)da=f[aa+(ca<<2)>>2]|0;else da=-1;f[aa+(P<<2)>>2]=da;if(!U?(U=(((Q>>>0)%3|0|0)==0?2:-1)+Q|0,(U|0)!=-1):0){Q=f[aa+(U<<2)>>2]|0;f[aa+(ba<<2)>>2]=Q;if((Q|0)!=-1)f[T+(Q<<2)>>2]=ba}else f[aa+(ba<<2)>>2]=-1;ba=(f[s>>2]|0)+(_>>>5<<2)|0;f[ba>>2]=f[ba>>2]&~(1<<(_&31));f[R>>2]=L;f[l>>2]=f[R>>2];f[e>>2]=f[l>>2];Tc(v,e)}else if((M|0)==32){M=0;R=(N|0)==5;switch(N|0){case 3:case 5:{L=f[n>>2]|0;if((f[g>>2]|0)==(L|0)){Z=-1;M=196;break a}ba=f[L+-4>>2]|0;L=J*3|0;aa=R?L:L+2|0;Q=L+(R&1)|0;T=(R?2:1)+L|0;R=f[D>>2]|0;U=f[R+12>>2]|0;f[U+(T<<2)>>2]=ba;f[U+(ba<<2)>>2]=T;U=R+24|0;P=R+28|0;ca=f[P>>2]|0;if((ca|0)==(f[R+32>>2]|0)){Ng(U,3280);ea=f[P>>2]|0}else{f[ca>>2]=-1;R=ca+4|0;f[P>>2]=R;ea=R}R=ea-(f[U>>2]|0)|0;U=(R>>2)+-1|0;P=f[D>>2]|0;ca=f[P+24>>2]|0;S=ca;if(((f[P+28>>2]|0)-ca>>2|0)>(t|0)){Z=-1;M=196;break a}ca=f[P>>2]|0;f[ca+(T<<2)>>2]=U;if(R|0)f[S+(U<<2)>>2]=T;if((ba|0)!=-1){T=(((ba>>>0)%3|0|0)==0?2:-1)+ba|0;if((T|0)!=-1){U=f[ca+(T<<2)>>2]|0;f[ca+(aa<<2)>>2]=U;if((U|0)!=-1)f[S+(U<<2)>>2]=aa}else f[ca+(aa<<2)>>2]=-1;U=ba+1|0;S=((U>>>0)%3|0|0)==0?ba+-2|0:U;if((S|0)==-1)fa=-1;else fa=f[ca+(S<<2)>>2]|0}else{f[ca+(aa<<2)>>2]=-1;fa=-1}f[ca+(Q<<2)>>2]=fa;Q=(f[n>>2]|0)+-4|0;f[Q>>2]=L;f[l>>2]=f[Q>>2];f[e>>2]=f[l>>2];Tc(v,e);break}case 1:{Q=f[g>>2]|0;L=f[n>>2]|0;if((Q|0)==(L|0)){Z=-1;M=196;break a}ca=L+-4|0;aa=f[ca>>2]|0;f[n>>2]=ca;S=f[G>>2]|0;e:do if(S){U=S+-1|0;ba=(U&S|0)==0;if(!ba)if(J>>>0<S>>>0)ga=J;else ga=(J>>>0)%(S>>>0)|0;else ga=U&J;T=f[(f[i>>2]|0)+(ga<<2)>>2]|0;if((T|0)!=0?(R=f[T>>2]|0,(R|0)!=0):0){f:do if(ba){T=R;while(1){P=f[T+4>>2]|0;ha=(P|0)==(J|0);if(!(ha|(P&U|0)==(ga|0))){ia=Q;ja=ca;break e}if(ha?(f[T+8>>2]|0)==(J|0):0){ka=T;break f}T=f[T>>2]|0;if(!T){ia=Q;ja=ca;break e}}}else{T=R;while(1){ha=f[T+4>>2]|0;if((ha|0)==(J|0)){if((f[T+8>>2]|0)==(J|0)){ka=T;break f}}else{if(ha>>>0<S>>>0)la=ha;else la=(ha>>>0)%(S>>>0)|0;if((la|0)!=(ga|0)){ia=Q;ja=ca;break e}}T=f[T>>2]|0;if(!T){ia=Q;ja=ca;break e}}}while(0);R=ka+12|0;if((ca|0)==(f[o>>2]|0)){Ng(g,R);ia=f[g>>2]|0;ja=f[n>>2]|0;break}else{f[ca>>2]=f[R>>2];f[n>>2]=L;ia=Q;ja=L;break}}else{ia=Q;ja=ca}}else{ia=Q;ja=ca}while(0);if((ia|0)==(ja|0)){Z=-1;M=196;break a}ca=ja+-4|0;Q=f[ca>>2]|0;L=f[D>>2]|0;S=(Q|0)==-1;if(!S?(f[(f[L+12>>2]|0)+(Q<<2)>>2]|0)!=-1:0){Z=-1;M=196;break a}R=(aa|0)==-1;U=f[L+12>>2]|0;if(!R){ba=U+(aa<<2)|0;if((f[ba>>2]|0)==-1)ma=ba;else{Z=-1;M=196;break a}}else ma=U+-4|0;ba=J*3|0;T=ba+2|0;f[U+(Q<<2)>>2]=T;f[U+(T<<2)>>2]=Q;ha=ba+1|0;f[ma>>2]=ha;f[U+(ha<<2)>>2]=aa;if(!S){S=(((Q>>>0)%3|0|0)==0?2:-1)+Q|0;P=f[L>>2]|0;if((S|0)==-1)na=-1;else na=f[P+(S<<2)>>2]|0;f[P+(ba<<2)>>2]=na;S=Q+1|0;oa=((S>>>0)%3|0|0)==0?Q+-2|0:S;if((oa|0)==-1){pa=-1;qa=na;ra=P;sa=L}else{pa=f[P+(oa<<2)>>2]|0;qa=na;ra=P;sa=L}}else{P=f[L>>2]|0;f[P+(ba<<2)>>2]=-1;pa=-1;qa=-1;ra=P;sa=L}f[ra+(ha<<2)>>2]=pa;if(!R){R=(((aa>>>0)%3|0|0)==0?2:-1)+aa|0;if((R|0)!=-1){ha=f[ra+(R<<2)>>2]|0;f[ra+(T<<2)>>2]=ha;if((ha|0)!=-1)f[(f[L+24>>2]|0)+(ha<<2)>>2]=T}else f[ra+(T<<2)>>2]=-1;ha=aa+1|0;R=((ha>>>0)%3|0|0)==0?aa+-2|0:ha;if((R|0)==-1){ta=-1;ua=-1}else{ta=f[ra+(R<<2)>>2]|0;ua=R}}else{f[ra+(T<<2)>>2]=-1;ta=-1;ua=-1}f[e>>2]=ta;T=f[I>>2]|0;R=T+(qa<<2)|0;f[R>>2]=(f[R>>2]|0)+(f[T+(ta<<2)>>2]|0);T=f[L+24>>2]|0;if((qa|0)!=-1)f[T+(qa<<2)>>2]=f[T+(f[e>>2]<<2)>>2];g:do if((ua|0)!=-1){L=f[sa>>2]|0;R=ua;do{f[L+(R<<2)>>2]=qa;ha=R+1|0;P=((ha>>>0)%3|0|0)==0?R+-2|0:ha;if((P|0)==-1)break g;ha=f[U+(P<<2)>>2]|0;P=ha+1|0;if((ha|0)==-1)break g;R=((P>>>0)%3|0|0)==0?ha+-2|0:P}while((R|0)!=-1)}while(0);f[T+(f[e>>2]<<2)>>2]=-1;do if(r){U=f[p>>2]|0;if((U|0)==(f[q>>2]|0)){Ng(k,e);va=(f[n>>2]|0)+-4|0;break}else{f[U>>2]=f[e>>2];f[p>>2]=U+4;va=ca;break}}else va=ca;while(0);f[va>>2]=ba;f[l>>2]=f[va>>2];f[e>>2]=f[l>>2];Tc(v,e);break d;break}case 7:{f[e>>2]=J*3;ca=f[D>>2]|0;T=ca+24|0;U=ca+28|0;aa=f[U>>2]|0;if((aa|0)==(f[ca+32>>2]|0)){Ng(T,3280);wa=f[U>>2]|0}else{f[aa>>2]=-1;ca=aa+4|0;f[U>>2]=ca;wa=ca}ca=wa-(f[T>>2]|0)|0;T=ca>>2;U=T+-1|0;aa=f[D>>2]|0;R=f[e>>2]|0;L=f[aa>>2]|0;f[L+(R<<2)>>2]=U;P=aa+24|0;ha=aa+28|0;oa=f[ha>>2]|0;if((oa|0)==(f[aa+32>>2]|0)){Ng(P,3280);xa=f[ha>>2]|0;ya=f[aa>>2]|0}else{f[oa>>2]=-1;aa=oa+4|0;f[ha>>2]=aa;xa=aa;ya=L}f[ya+(R+1<<2)>>2]=(xa-(f[P>>2]|0)>>2)+-1;P=f[D>>2]|0;R=(f[e>>2]|0)+2|0;L=P+24|0;aa=P+28|0;ha=f[aa>>2]|0;if((ha|0)==(f[P+32>>2]|0)){Ng(L,3280);za=f[aa>>2]|0}else{f[ha>>2]=-1;oa=ha+4|0;f[aa>>2]=oa;za=oa}f[(f[P>>2]|0)+(R<<2)>>2]=(za-(f[L>>2]|0)>>2)+-1;L=f[D>>2]|0;R=f[L+24>>2]|0;P=R;if(((f[L+28>>2]|0)-R>>2|0)>(t|0))break b;R=f[e>>2]|0;if(ca){f[P+(U<<2)>>2]=R;if((ca|0)!=-4){f[P+(T<<2)>>2]=(f[e>>2]|0)+1;ca=T+1|0;if((ca|0)!=-1){Aa=ca;M=119}}else{Aa=0;M=119}}else{f[P+(T<<2)>>2]=R+1;Aa=1;M=119}if((M|0)==119){M=0;f[P+(Aa<<2)>>2]=(f[e>>2]|0)+2}P=f[n>>2]|0;if((P|0)==(f[o>>2]|0)){Ng(g,e);Ba=f[n>>2]|0}else{f[P>>2]=f[e>>2];R=P+4|0;f[n>>2]=R;Ba=R}f[l>>2]=f[Ba+-4>>2];f[e>>2]=f[l>>2];Tc(v,e);break}default:{Z=-1;M=196;break a}}R=c-J+-1|0;P=f[F>>2]|0;if((P|0)!=(f[E>>2]|0)){T=P;do{P=T;ca=P+-12|0;U=f[P+-8>>2]|0;if(U>>>0>R>>>0){Z=-1;M=196;break a}if((U|0)!=(R|0))break d;U=b[P+-4>>0]|0;P=f[ca>>2]|0;f[F>>2]=ca;if((P|0)<0){Z=-1;M=196;break a}ca=f[(f[n>>2]|0)+-4>>2]|0;L=(ca|0)==-1;do if(!(U&1))if(!L)if(!((ca>>>0)%3|0)){Ca=ca+2|0;break}else{Ca=ca+-1|0;break}else Ca=-1;else{oa=ca+1|0;if(L)Ca=-1;else Ca=((oa>>>0)%3|0|0)==0?ca+-2|0:oa}while(0);f[e>>2]=H-P;ca=ed(i,e)|0;f[ca>>2]=Ca;T=f[F>>2]|0}while((T|0)!=(f[E>>2]|0))}}while(0);if((K|0)<(c|0))J=K;else{Da=K;Ea=D;M=139;break a}}Z=-1;M=196}else{Da=0;Ea=a+8|0;M=139}while(0);h:do if((M|0)==139){c=f[Ea>>2]|0;if(((f[c+28>>2]|0)-(f[c+24>>2]|0)>>2|0)<=(t|0)){Ca=f[n>>2]|0;do if((Ca|0)!=(f[g>>2]|0)){l=a+270|0;Ba=a+364|0;o=a+60|0;Aa=a+64|0;za=a+68|0;xa=a+312|0;ya=a+360|0;wa=a+352|0;va=a+356|0;q=a+76|0;r=a+80|0;qa=a+72|0;ua=Da;sa=Ca;i:while(1){ta=sa+-4|0;f[e>>2]=f[ta>>2];f[n>>2]=ta;if((j[l>>1]|0)<514)if(b[Ba>>0]|0){ta=f[ya>>2]|0;ra=(f[wa>>2]|0)+(ta>>>3)|0;if(ra>>>0<(f[va>>2]|0)>>>0){pa=(h[ra>>0]|0)>>>(ta&7)&1;f[ya>>2]=ta+1;Fa=pa;M=147}else M=168}else M=148;else{Fa=(pi(xa)|0)&1;M=147}if((M|0)==147){M=0;if(!Fa)M=168;else M=148}do if((M|0)==148){M=0;pa=f[Ea>>2]|0;ta=f[pa>>2]|0;ra=ta;if((ua|0)>=(((f[pa+4>>2]|0)-ta>>2>>>0)/3|0|0)){M=175;break i}ta=f[e>>2]|0;na=ta+1|0;if((ta|0)!=-1?(ma=((na>>>0)%3|0|0)==0?ta+-2|0:na,(ma|0)!=-1):0)Ga=f[ra+(ma<<2)>>2]|0;else Ga=-1;ma=f[pa+24>>2]|0;na=f[ma+(Ga<<2)>>2]|0;ja=na+1|0;if((na|0)!=-1?(ia=((ja>>>0)%3|0|0)==0?na+-2|0:ja,ja=ia+1|0,(ia|0)!=-1):0){na=((ja>>>0)%3|0|0)==0?ia+-2|0:ja;if((na|0)==-1){Ha=-1;Ia=ia}else{Ha=f[ra+(na<<2)>>2]|0;Ia=ia}}else{Ha=-1;Ia=-1}ia=f[ma+(Ha<<2)>>2]|0;ma=ia+1|0;if((ia|0)!=-1?(na=((ma>>>0)%3|0|0)==0?ia+-2|0:ma,ma=na+1|0,(na|0)!=-1):0){ia=((ma>>>0)%3|0|0)==0?na+-2|0:ma;if((ia|0)==-1){Ja=-1;Ka=na}else{Ja=f[ra+(ia<<2)>>2]|0;Ka=na}}else{Ja=-1;Ka=-1}na=ua*3|0;f[m>>2]=na;ia=f[pa+12>>2]|0;f[ia+(na<<2)>>2]=ta;f[ia+(ta<<2)>>2]=na;na=(f[m>>2]|0)+1|0;f[ia+(na<<2)>>2]=Ia;f[ia+(Ia<<2)>>2]=na;na=(f[m>>2]|0)+2|0;f[ia+(na<<2)>>2]=Ka;f[ia+(Ka<<2)>>2]=na;na=f[m>>2]|0;f[ra+(na<<2)>>2]=Ha;f[ra+(na+1<<2)>>2]=Ja;f[ra+(na+2<<2)>>2]=Ga;ia=(na|0)==-1?-1:Ha;na=f[s>>2]|0;ta=na+(ia>>>5<<2)|0;f[ta>>2]=f[ta>>2]&~(1<<(ia&31));ia=(f[m>>2]|0)+1|0;if((ia|0)==-1)La=-1;else La=f[ra+(ia<<2)>>2]|0;ia=na+(La>>>5<<2)|0;f[ia>>2]=f[ia>>2]&~(1<<(La&31));ia=(f[m>>2]|0)+2|0;if((ia|0)==-1)Ma=-1;else Ma=f[ra+(ia<<2)>>2]|0;ia=na+(Ma>>>5<<2)|0;f[ia>>2]=f[ia>>2]&~(1<<(Ma&31));ia=ua+1|0;na=f[Aa>>2]|0;ra=f[za>>2]|0;if((na|0)==(ra<<5|0)){if((na+1|0)<0){M=162;break i}ta=ra<<6;ra=na+32&-32;vg(o,na>>>0<1073741823?(ta>>>0<ra>>>0?ra:ta):2147483647);Na=f[Aa>>2]|0}else Na=na;f[Aa>>2]=Na+1;na=(f[o>>2]|0)+(Na>>>5<<2)|0;f[na>>2]=f[na>>2]|1<<(Na&31);na=f[q>>2]|0;if((na|0)==(f[r>>2]|0))Ng(qa,m);else{f[na>>2]=f[m>>2];f[q>>2]=na+4}Oa=ia}else if((M|0)==168){M=0;ia=f[Aa>>2]|0;na=f[za>>2]|0;if((ia|0)==(na<<5|0)){if((ia+1|0)<0){M=170;break i}ta=na<<6;na=ia+32&-32;vg(o,ia>>>0<1073741823?(ta>>>0<na>>>0?na:ta):2147483647);Pa=f[Aa>>2]|0}else Pa=ia;f[Aa>>2]=Pa+1;ia=(f[o>>2]|0)+(Pa>>>5<<2)|0;f[ia>>2]=f[ia>>2]&~(1<<(Pa&31));ia=f[q>>2]|0;if((ia|0)==(f[r>>2]|0)){Ng(qa,e);Oa=ua;break}else{f[ia>>2]=f[e>>2];f[q>>2]=ia+4;Oa=ua;break}}while(0);sa=f[n>>2]|0;if((sa|0)==(f[g>>2]|0)){M=177;break}else ua=Oa}if((M|0)==162)$n(o);else if((M|0)==170)$n(o);else if((M|0)==175){Z=-1;M=196;break h}else if((M|0)==177){Qa=Oa;Ra=f[Ea>>2]|0;break}}else{Qa=Da;Ra=c}while(0);if((Qa|0)==(((f[Ra+4>>2]|0)-(f[Ra>>2]|0)>>2>>>0)/3|0|0)){c=(f[Ra+28>>2]|0)-(f[Ra+24>>2]|0)>>2;Ca=f[k>>2]|0;ua=f[p>>2]|0;if((Ca|0)==(ua|0)){Sa=c;Ta=Ca}else{sa=e+4|0;q=e+8|0;qa=e+12|0;r=c;c=Ca;Ca=Ra;while(1){Aa=f[c>>2]|0;za=r+-1|0;xa=f[Ca+24>>2]|0;ya=xa+(za<<2)|0;if((f[ya>>2]|0)==-1){va=r;while(1){wa=va+-1|0;Ba=va+-2|0;l=xa+(Ba<<2)|0;if((f[l>>2]|0)==-1)va=wa;else{Ua=wa;Va=l;Wa=Ba;break}}}else{Ua=r;Va=ya;Wa=za}if(Wa>>>0<Aa>>>0){Xa=Ua;Ya=Ca}else{f[e>>2]=Ca;va=f[Va>>2]|0;f[sa>>2]=va;f[q>>2]=va;b[qa>>0]=1;if((va|0)==-1){Za=xa;_a=Ca}else{o=Ca;Ba=va;do{f[(f[o>>2]|0)+(Ba<<2)>>2]=Aa;Tf(e);Ba=f[q>>2]|0;o=f[Ea>>2]|0}while((Ba|0)!=-1);Za=f[o+24>>2]|0;_a=o}Ba=Za+(Wa<<2)|0;if((Aa|0)!=-1)f[Za+(Aa<<2)>>2]=f[Ba>>2];f[Ba>>2]=-1;Ba=f[s>>2]|0;xa=Ba+(Wa>>>5<<2)|0;za=1<<(Wa&31);ya=Ba+(Aa>>>5<<2)|0;Ba=1<<(Aa&31);if(!(f[xa>>2]&za))$a=f[ya>>2]&~Ba;else $a=f[ya>>2]|Ba;f[ya>>2]=$a;f[xa>>2]=f[xa>>2]&~za;Xa=Ua+-1|0;Ya=_a}c=c+4|0;if((c|0)==(ua|0)){Z=Xa;M=196;break}else{r=Xa;Ca=Ya}}}}else{Z=-1;M=196}}else{Z=-1;M=196}}while(0);if((M|0)==196){Sa=Z;Ta=f[k>>2]|0}if(Ta|0){f[p>>2]=Ta;Ko(Ta)}Ta=f[i+8>>2]|0;if(Ta|0){p=Ta;do{Ta=p;p=f[p>>2]|0;Ko(Ta)}while((p|0)!=0)}p=f[i>>2]|0;f[i>>2]=0;if(p|0)Ko(p);p=f[g>>2]|0;if(!p){u=d;return Sa|0}f[n>>2]=p;Ko(p);u=d;return Sa|0}function Xa(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;d=u;u=u+80|0;e=d+56|0;g=d+36|0;i=d+16|0;k=d+4|0;l=d+48|0;m=d;f[g>>2]=0;n=g+4|0;f[n>>2]=0;o=g+8|0;f[o>>2]=0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;f[i+16>>2]=1065353216;f[k>>2]=0;p=k+4|0;f[p>>2]=0;q=k+8|0;f[q>>2]=0;r=(f[a+216>>2]|0)==(f[a+220>>2]|0);s=a+120|0;t=f[a+124>>2]|0;a:do if((c|0)>0){v=a+232|0;w=a+8|0;x=a+36|0;y=a+40|0;z=i+4|0;A=c+-1|0;B=a+388|0;C=0;b:while(1){D=C+1|0;E=qf(v)|0;c:do if(E){F=(E|0)==5;switch(E|0){case 3:case 5:{G=f[n>>2]|0;if((f[g>>2]|0)==(G|0)){H=-1;I=184;break a}J=f[G+-4>>2]|0;G=C*3|0;K=F?G:G+2|0;L=G+(F&1)|0;M=(F?2:1)+G|0;F=f[w>>2]|0;N=f[F+12>>2]|0;f[N+(M<<2)>>2]=J;f[N+(J<<2)>>2]=M;N=F+24|0;O=F+28|0;P=f[O>>2]|0;if((P|0)==(f[F+32>>2]|0)){Ng(N,3280);Q=f[O>>2]|0}else{f[P>>2]=-1;F=P+4|0;f[O>>2]=F;Q=F}F=Q-(f[N>>2]|0)|0;N=(F>>2)+-1|0;O=f[w>>2]|0;P=f[O+24>>2]|0;R=P;if(((f[O+28>>2]|0)-P>>2|0)>(t|0)){H=-1;I=184;break a}P=f[O>>2]|0;f[P+(M<<2)>>2]=N;if(F|0)f[R+(N<<2)>>2]=M;if((J|0)!=-1){M=(((J>>>0)%3|0|0)==0?2:-1)+J|0;if((M|0)!=-1){N=f[P+(M<<2)>>2]|0;f[P+(K<<2)>>2]=N;if((N|0)!=-1)f[R+(N<<2)>>2]=K}else f[P+(K<<2)>>2]=-1;N=J+1|0;R=((N>>>0)%3|0|0)==0?J+-2|0:N;if((R|0)==-1)S=-1;else S=f[P+(R<<2)>>2]|0}else{f[P+(K<<2)>>2]=-1;S=-1}f[P+(L<<2)>>2]=S;L=(f[n>>2]|0)+-4|0;f[L>>2]=G;f[l>>2]=f[L>>2];f[e>>2]=f[l>>2];_c(v,e);break}case 1:{L=f[g>>2]|0;G=f[n>>2]|0;if((L|0)==(G|0)){H=-1;I=184;break a}P=G+-4|0;K=f[P>>2]|0;f[n>>2]=P;R=f[z>>2]|0;d:do if(R){N=R+-1|0;J=(N&R|0)==0;if(!J)if(C>>>0<R>>>0)T=C;else T=(C>>>0)%(R>>>0)|0;else T=N&C;M=f[(f[i>>2]|0)+(T<<2)>>2]|0;if((M|0)!=0?(F=f[M>>2]|0,(F|0)!=0):0){e:do if(J){M=F;while(1){O=f[M+4>>2]|0;U=(O|0)==(C|0);if(!(U|(O&N|0)==(T|0))){V=L;W=P;break d}if(U?(f[M+8>>2]|0)==(C|0):0){X=M;break e}M=f[M>>2]|0;if(!M){V=L;W=P;break d}}}else{M=F;while(1){U=f[M+4>>2]|0;if((U|0)==(C|0)){if((f[M+8>>2]|0)==(C|0)){X=M;break e}}else{if(U>>>0<R>>>0)Y=U;else Y=(U>>>0)%(R>>>0)|0;if((Y|0)!=(T|0)){V=L;W=P;break d}}M=f[M>>2]|0;if(!M){V=L;W=P;break d}}}while(0);F=X+12|0;if((P|0)==(f[o>>2]|0)){Ng(g,F);V=f[g>>2]|0;W=f[n>>2]|0;break}else{f[P>>2]=f[F>>2];f[n>>2]=G;V=L;W=G;break}}else{V=L;W=P}}else{V=L;W=P}while(0);if((V|0)==(W|0)){H=-1;I=184;break a}P=W+-4|0;L=f[P>>2]|0;G=f[w>>2]|0;R=(L|0)==-1;if(!R?(f[(f[G+12>>2]|0)+(L<<2)>>2]|0)!=-1:0){H=-1;I=184;break a}F=(K|0)==-1;N=f[G+12>>2]|0;if(!F){J=N+(K<<2)|0;if((f[J>>2]|0)==-1)Z=J;else{H=-1;I=184;break a}}else Z=N+-4|0;J=C*3|0;M=J+2|0;f[N+(L<<2)>>2]=M;f[N+(M<<2)>>2]=L;U=J+1|0;f[Z>>2]=U;f[N+(U<<2)>>2]=K;if(!R){R=(((L>>>0)%3|0|0)==0?2:-1)+L|0;O=f[G>>2]|0;if((R|0)==-1)_=-1;else _=f[O+(R<<2)>>2]|0;f[O+(J<<2)>>2]=_;R=L+1|0;$=((R>>>0)%3|0|0)==0?L+-2|0:R;if(($|0)==-1){aa=-1;ba=_;ca=O;da=G}else{aa=f[O+($<<2)>>2]|0;ba=_;ca=O;da=G}}else{O=f[G>>2]|0;f[O+(J<<2)>>2]=-1;aa=-1;ba=-1;ca=O;da=G}f[ca+(U<<2)>>2]=aa;if(!F){F=(((K>>>0)%3|0|0)==0?2:-1)+K|0;if((F|0)!=-1){U=f[ca+(F<<2)>>2]|0;f[ca+(M<<2)>>2]=U;if((U|0)!=-1)f[(f[G+24>>2]|0)+(U<<2)>>2]=M}else f[ca+(M<<2)>>2]=-1;U=K+1|0;F=((U>>>0)%3|0|0)==0?K+-2|0:U;if((F|0)==-1){ea=-1;fa=-1}else{ea=f[ca+(F<<2)>>2]|0;fa=F}}else{f[ca+(M<<2)>>2]=-1;ea=-1;fa=-1}f[e>>2]=ea;M=f[B>>2]|0;F=M+(ba<<2)|0;f[F>>2]=(f[F>>2]|0)+(f[M+(ea<<2)>>2]|0);M=f[G+24>>2]|0;if((ba|0)!=-1)f[M+(ba<<2)>>2]=f[M+(f[e>>2]<<2)>>2];f:do if((fa|0)!=-1){G=f[da>>2]|0;F=fa;do{f[G+(F<<2)>>2]=ba;U=F+1|0;O=((U>>>0)%3|0|0)==0?F+-2|0:U;if((O|0)==-1)break f;U=f[N+(O<<2)>>2]|0;O=U+1|0;if((U|0)==-1)break f;F=((O>>>0)%3|0|0)==0?U+-2|0:O}while((F|0)!=-1)}while(0);f[M+(f[e>>2]<<2)>>2]=-1;do if(r){N=f[p>>2]|0;if((N|0)==(f[q>>2]|0)){Ng(k,e);ga=(f[n>>2]|0)+-4|0;break}else{f[N>>2]=f[e>>2];f[p>>2]=N+4;ga=P;break}}else ga=P;while(0);f[ga>>2]=J;f[l>>2]=f[ga>>2];f[e>>2]=f[l>>2];_c(v,e);break c;break}case 7:{f[e>>2]=C*3;P=f[w>>2]|0;M=P+24|0;N=P+28|0;K=f[N>>2]|0;if((K|0)==(f[P+32>>2]|0)){Ng(M,3280);ha=f[N>>2]|0}else{f[K>>2]=-1;P=K+4|0;f[N>>2]=P;ha=P}P=ha-(f[M>>2]|0)|0;M=P>>2;N=M+-1|0;K=f[w>>2]|0;F=f[e>>2]|0;G=f[K>>2]|0;f[G+(F<<2)>>2]=N;O=K+24|0;U=K+28|0;$=f[U>>2]|0;if(($|0)==(f[K+32>>2]|0)){Ng(O,3280);ia=f[U>>2]|0;ja=f[K>>2]|0}else{f[$>>2]=-1;K=$+4|0;f[U>>2]=K;ia=K;ja=G}f[ja+(F+1<<2)>>2]=(ia-(f[O>>2]|0)>>2)+-1;O=f[w>>2]|0;F=(f[e>>2]|0)+2|0;G=O+24|0;K=O+28|0;U=f[K>>2]|0;if((U|0)==(f[O+32>>2]|0)){Ng(G,3280);ka=f[K>>2]|0}else{f[U>>2]=-1;$=U+4|0;f[K>>2]=$;ka=$}f[(f[O>>2]|0)+(F<<2)>>2]=(ka-(f[G>>2]|0)>>2)+-1;G=f[w>>2]|0;F=f[G+24>>2]|0;O=F;if(((f[G+28>>2]|0)-F>>2|0)>(t|0))break b;F=f[e>>2]|0;if(P){f[O+(N<<2)>>2]=F;if((P|0)!=-4){f[O+(M<<2)>>2]=(f[e>>2]|0)+1;P=M+1|0;if((P|0)!=-1){la=P;I=107}}else{la=0;I=107}}else{f[O+(M<<2)>>2]=F+1;la=1;I=107}if((I|0)==107){I=0;f[O+(la<<2)>>2]=(f[e>>2]|0)+2}O=f[n>>2]|0;if((O|0)==(f[o>>2]|0)){Ng(g,e);ma=f[n>>2]|0}else{f[O>>2]=f[e>>2];F=O+4|0;f[n>>2]=F;ma=F}f[l>>2]=f[ma+-4>>2];f[e>>2]=f[l>>2];_c(v,e);break}default:{H=-1;I=184;break a}}F=c-C+-1|0;O=f[y>>2]|0;if((O|0)!=(f[x>>2]|0)){M=O;do{O=M;P=O+-12|0;N=f[O+-8>>2]|0;if(N>>>0>F>>>0){H=-1;I=184;break a}if((N|0)!=(F|0))break c;N=b[O+-4>>0]|0;O=f[P>>2]|0;f[y>>2]=P;if((O|0)<0){H=-1;I=184;break a}P=f[(f[n>>2]|0)+-4>>2]|0;G=(P|0)==-1;do if(!(N&1))if(!G)if(!((P>>>0)%3|0)){na=P+2|0;break}else{na=P+-1|0;break}else na=-1;else{$=P+1|0;if(G)na=-1;else na=(($>>>0)%3|0|0)==0?P+-2|0:$}while(0);f[e>>2]=A-O;P=ed(i,e)|0;f[P>>2]=na;M=f[y>>2]|0}while((M|0)!=(f[x>>2]|0))}}else{M=f[n>>2]|0;if((f[g>>2]|0)==(M|0)){H=-1;I=184;break a}F=M+-4|0;M=f[F>>2]|0;J=f[w>>2]|0;P=(M|0)==-1;G=M+1|0;if(!P?(N=((G>>>0)%3|0|0)==0?M+-2|0:G,(N|0)!=-1):0)oa=f[(f[J>>2]|0)+(N<<2)>>2]|0;else oa=-1;N=f[J+24>>2]|0;G=f[N+(oa<<2)>>2]|0;$=G+1|0;if((G|0)==-1)pa=-1;else pa=(($>>>0)%3|0|0)==0?G+-2|0:$;$=C*3|0;G=$+1|0;K=f[J+12>>2]|0;f[K+(M<<2)>>2]=G;f[K+(G<<2)>>2]=M;U=$+2|0;f[K+(pa<<2)>>2]=U;f[K+(U<<2)>>2]=pa;K=f[J>>2]|0;f[K+($<<2)>>2]=oa;J=pa+1|0;if((pa|0)!=-1?(R=((J>>>0)%3|0|0)==0?pa+-2|0:J,(R|0)!=-1):0)qa=f[K+(R<<2)>>2]|0;else qa=-1;f[K+(G<<2)>>2]=qa;if(!P?(P=(((M>>>0)%3|0|0)==0?2:-1)+M|0,(P|0)!=-1):0){M=f[K+(P<<2)>>2]|0;f[K+(U<<2)>>2]=M;if((M|0)!=-1)f[N+(M<<2)>>2]=U}else f[K+(U<<2)>>2]=-1;U=(f[s>>2]|0)+(oa>>>5<<2)|0;f[U>>2]=f[U>>2]&~(1<<(oa&31));f[F>>2]=$;f[l>>2]=f[F>>2];f[e>>2]=f[l>>2];_c(v,e)}while(0);if((D|0)<(c|0))C=D;else{ra=D;sa=w;I=127;break a}}H=-1;I=184}else{ra=0;sa=a+8|0;I=127}while(0);g:do if((I|0)==127){c=f[sa>>2]|0;if(((f[c+28>>2]|0)-(f[c+24>>2]|0)>>2|0)<=(t|0)){l=f[n>>2]|0;do if((l|0)!=(f[g>>2]|0)){oa=a+270|0;qa=a+364|0;pa=a+60|0;na=a+64|0;ma=a+68|0;o=a+312|0;la=a+360|0;ka=a+352|0;ia=a+356|0;ja=a+76|0;ha=a+80|0;ga=a+72|0;q=ra;r=l;h:while(1){ba=r+-4|0;f[e>>2]=f[ba>>2];f[n>>2]=ba;if((j[oa>>1]|0)<514)if(b[qa>>0]|0){ba=f[la>>2]|0;fa=(f[ka>>2]|0)+(ba>>>3)|0;if(fa>>>0<(f[ia>>2]|0)>>>0){da=(h[fa>>0]|0)>>>(ba&7)&1;f[la>>2]=ba+1;ta=da;I=135}else I=156}else I=136;else{ta=(pi(o)|0)&1;I=135}if((I|0)==135){I=0;if(!ta)I=156;else I=136}do if((I|0)==136){I=0;da=f[sa>>2]|0;ba=f[da>>2]|0;fa=ba;if((q|0)>=(((f[da+4>>2]|0)-ba>>2>>>0)/3|0|0)){I=163;break h}ba=f[e>>2]|0;ea=ba+1|0;if((ba|0)!=-1?(ca=((ea>>>0)%3|0|0)==0?ba+-2|0:ea,(ca|0)!=-1):0)ua=f[fa+(ca<<2)>>2]|0;else ua=-1;ca=f[da+24>>2]|0;ea=f[ca+(ua<<2)>>2]|0;aa=ea+1|0;if((ea|0)!=-1?(_=((aa>>>0)%3|0|0)==0?ea+-2|0:aa,aa=_+1|0,(_|0)!=-1):0){ea=((aa>>>0)%3|0|0)==0?_+-2|0:aa;if((ea|0)==-1){va=-1;wa=_}else{va=f[fa+(ea<<2)>>2]|0;wa=_}}else{va=-1;wa=-1}_=f[ca+(va<<2)>>2]|0;ca=_+1|0;if((_|0)!=-1?(ea=((ca>>>0)%3|0|0)==0?_+-2|0:ca,ca=ea+1|0,(ea|0)!=-1):0){_=((ca>>>0)%3|0|0)==0?ea+-2|0:ca;if((_|0)==-1){xa=-1;ya=ea}else{xa=f[fa+(_<<2)>>2]|0;ya=ea}}else{xa=-1;ya=-1}ea=q*3|0;f[m>>2]=ea;_=f[da+12>>2]|0;f[_+(ea<<2)>>2]=ba;f[_+(ba<<2)>>2]=ea;ea=(f[m>>2]|0)+1|0;f[_+(ea<<2)>>2]=wa;f[_+(wa<<2)>>2]=ea;ea=(f[m>>2]|0)+2|0;f[_+(ea<<2)>>2]=ya;f[_+(ya<<2)>>2]=ea;ea=f[m>>2]|0;f[fa+(ea<<2)>>2]=va;f[fa+(ea+1<<2)>>2]=xa;f[fa+(ea+2<<2)>>2]=ua;_=(ea|0)==-1?-1:va;ea=f[s>>2]|0;ba=ea+(_>>>5<<2)|0;f[ba>>2]=f[ba>>2]&~(1<<(_&31));_=(f[m>>2]|0)+1|0;if((_|0)==-1)za=-1;else za=f[fa+(_<<2)>>2]|0;_=ea+(za>>>5<<2)|0;f[_>>2]=f[_>>2]&~(1<<(za&31));_=(f[m>>2]|0)+2|0;if((_|0)==-1)Aa=-1;else Aa=f[fa+(_<<2)>>2]|0;_=ea+(Aa>>>5<<2)|0;f[_>>2]=f[_>>2]&~(1<<(Aa&31));_=q+1|0;ea=f[na>>2]|0;fa=f[ma>>2]|0;if((ea|0)==(fa<<5|0)){if((ea+1|0)<0){I=150;break h}ba=fa<<6;fa=ea+32&-32;vg(pa,ea>>>0<1073741823?(ba>>>0<fa>>>0?fa:ba):2147483647);Ba=f[na>>2]|0}else Ba=ea;f[na>>2]=Ba+1;ea=(f[pa>>2]|0)+(Ba>>>5<<2)|0;f[ea>>2]=f[ea>>2]|1<<(Ba&31);ea=f[ja>>2]|0;if((ea|0)==(f[ha>>2]|0))Ng(ga,m);else{f[ea>>2]=f[m>>2];f[ja>>2]=ea+4}Ca=_}else if((I|0)==156){I=0;_=f[na>>2]|0;ea=f[ma>>2]|0;if((_|0)==(ea<<5|0)){if((_+1|0)<0){I=158;break h}ba=ea<<6;ea=_+32&-32;vg(pa,_>>>0<1073741823?(ba>>>0<ea>>>0?ea:ba):2147483647);Da=f[na>>2]|0}else Da=_;f[na>>2]=Da+1;_=(f[pa>>2]|0)+(Da>>>5<<2)|0;f[_>>2]=f[_>>2]&~(1<<(Da&31));_=f[ja>>2]|0;if((_|0)==(f[ha>>2]|0)){Ng(ga,e);Ca=q;break}else{f[_>>2]=f[e>>2];f[ja>>2]=_+4;Ca=q;break}}while(0);r=f[n>>2]|0;if((r|0)==(f[g>>2]|0)){I=165;break}else q=Ca}if((I|0)==150)$n(pa);else if((I|0)==158)$n(pa);else if((I|0)==163){H=-1;I=184;break g}else if((I|0)==165){Ea=Ca;Fa=f[sa>>2]|0;break}}else{Ea=ra;Fa=c}while(0);if((Ea|0)==(((f[Fa+4>>2]|0)-(f[Fa>>2]|0)>>2>>>0)/3|0|0)){c=(f[Fa+28>>2]|0)-(f[Fa+24>>2]|0)>>2;l=f[k>>2]|0;q=f[p>>2]|0;if((l|0)==(q|0)){Ga=c;Ha=l}else{r=e+4|0;ja=e+8|0;ga=e+12|0;ha=c;c=l;l=Fa;while(1){na=f[c>>2]|0;ma=ha+-1|0;o=f[l+24>>2]|0;la=o+(ma<<2)|0;if((f[la>>2]|0)==-1){ia=ha;while(1){ka=ia+-1|0;qa=ia+-2|0;oa=o+(qa<<2)|0;if((f[oa>>2]|0)==-1)ia=ka;else{Ia=ka;Ja=oa;Ka=qa;break}}}else{Ia=ha;Ja=la;Ka=ma}if(Ka>>>0<na>>>0){La=Ia;Ma=l}else{f[e>>2]=l;ia=f[Ja>>2]|0;f[r>>2]=ia;f[ja>>2]=ia;b[ga>>0]=1;if((ia|0)==-1){Na=o;Oa=l}else{pa=l;qa=ia;do{f[(f[pa>>2]|0)+(qa<<2)>>2]=na;Tf(e);qa=f[ja>>2]|0;pa=f[sa>>2]|0}while((qa|0)!=-1);Na=f[pa+24>>2]|0;Oa=pa}qa=Na+(Ka<<2)|0;if((na|0)!=-1)f[Na+(na<<2)>>2]=f[qa>>2];f[qa>>2]=-1;qa=f[s>>2]|0;o=qa+(Ka>>>5<<2)|0;ma=1<<(Ka&31);la=qa+(na>>>5<<2)|0;qa=1<<(na&31);if(!(f[o>>2]&ma))Pa=f[la>>2]&~qa;else Pa=f[la>>2]|qa;f[la>>2]=Pa;f[o>>2]=f[o>>2]&~ma;La=Ia+-1|0;Ma=Oa}c=c+4|0;if((c|0)==(q|0)){H=La;I=184;break}else{ha=La;l=Ma}}}}else{H=-1;I=184}}else{H=-1;I=184}}while(0);if((I|0)==184){Ga=H;Ha=f[k>>2]|0}if(Ha|0){f[p>>2]=Ha;Ko(Ha)}Ha=f[i+8>>2]|0;if(Ha|0){p=Ha;do{Ha=p;p=f[p>>2]|0;Ko(Ha)}while((p|0)!=0)}p=f[i>>2]|0;f[i>>2]=0;if(p|0)Ko(p);p=f[g>>2]|0;if(!p){u=d;return Ga|0}f[n>>2]=p;Ko(p);u=d;return Ga|0}function Ya(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;d=u;u=u+80|0;e=d+56|0;g=d+36|0;i=d+24|0;k=d+8|0;l=d;f[e>>2]=0;m=e+4|0;f[m>>2]=0;n=e+8|0;f[n>>2]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=1065353216;f[i>>2]=0;o=i+4|0;f[o>>2]=0;p=i+8|0;f[p>>2]=0;q=(f[a+216>>2]|0)==(f[a+220>>2]|0);r=a+120|0;s=f[a+124>>2]|0;a:do if((c|0)>0){t=a+308|0;v=a+304|0;w=a+296|0;x=a+300|0;y=g+4|0;z=a+8|0;A=a+36|0;B=a+40|0;C=c+-1|0;D=0;b:while(1){E=D+1|0;c:do if(!(b[t>>0]|0))F=43;else{G=f[v>>2]|0;H=f[w>>2]|0;I=f[x>>2]|0;J=H+(G>>>3)|0;if(J>>>0<I>>>0?(K=h[J>>0]|0,J=G+1|0,f[v>>2]=J,1<<(G&7)&K|0):0){K=H+(J>>>3)|0;if(K>>>0<I>>>0){L=(h[K>>0]|0)>>>(J&7)&1;M=G+2|0;f[v>>2]=M;N=L;O=H+(M>>>3)|0;P=M}else{N=0;O=K;P=J}if(O>>>0<I>>>0){I=(h[O>>0]|0)>>>(P&7);f[v>>2]=P+1;Q=I<<1&2}else Q=0;I=(Q|N)<<1|1;J=(I|0)==5;switch(I&7){case 1:{F=43;break c;break}case 3:case 5:{I=f[m>>2]|0;if((f[e>>2]|0)==(I|0)){R=-1;F=191;break a}K=f[I+-4>>2]|0;I=D*3|0;M=J?I:I+2|0;H=I+(J&1)|0;L=(J?2:1)+I|0;J=f[z>>2]|0;G=f[J+12>>2]|0;f[G+(L<<2)>>2]=K;f[G+(K<<2)>>2]=L;G=J+24|0;S=J+28|0;T=f[S>>2]|0;if((T|0)==(f[J+32>>2]|0)){Ng(G,3280);U=f[S>>2]|0}else{f[T>>2]=-1;J=T+4|0;f[S>>2]=J;U=J}J=U-(f[G>>2]|0)|0;G=(J>>2)+-1|0;S=f[z>>2]|0;T=f[S+24>>2]|0;V=T;if(((f[S+28>>2]|0)-T>>2|0)>(s|0)){R=-1;F=191;break a}T=f[S>>2]|0;f[T+(L<<2)>>2]=G;if(J|0)f[V+(G<<2)>>2]=L;if((K|0)!=-1){L=(((K>>>0)%3|0|0)==0?2:-1)+K|0;if((L|0)!=-1){G=f[T+(L<<2)>>2]|0;f[T+(M<<2)>>2]=G;if((G|0)!=-1)f[V+(G<<2)>>2]=M}else f[T+(M<<2)>>2]=-1;G=K+1|0;V=((G>>>0)%3|0|0)==0?K+-2|0:G;if((V|0)==-1)W=-1;else W=f[T+(V<<2)>>2]|0}else{f[T+(M<<2)>>2]=-1;W=-1}f[T+(H<<2)>>2]=W;f[(f[m>>2]|0)+-4>>2]=I;break}case 7:{f[k>>2]=D*3;I=f[z>>2]|0;H=I+24|0;T=I+28|0;M=f[T>>2]|0;if((M|0)==(f[I+32>>2]|0)){Ng(H,3280);X=f[T>>2]|0}else{f[M>>2]=-1;I=M+4|0;f[T>>2]=I;X=I}I=X-(f[H>>2]|0)|0;H=I>>2;T=H+-1|0;M=f[z>>2]|0;V=f[k>>2]|0;G=f[M>>2]|0;f[G+(V<<2)>>2]=T;K=M+24|0;L=M+28|0;J=f[L>>2]|0;if((J|0)==(f[M+32>>2]|0)){Ng(K,3280);Y=f[L>>2]|0;Z=f[M>>2]|0}else{f[J>>2]=-1;M=J+4|0;f[L>>2]=M;Y=M;Z=G}f[Z+(V+1<<2)>>2]=(Y-(f[K>>2]|0)>>2)+-1;K=f[z>>2]|0;V=(f[k>>2]|0)+2|0;G=K+24|0;M=K+28|0;L=f[M>>2]|0;if((L|0)==(f[K+32>>2]|0)){Ng(G,3280);_=f[M>>2]|0}else{f[L>>2]=-1;J=L+4|0;f[M>>2]=J;_=J}f[(f[K>>2]|0)+(V<<2)>>2]=(_-(f[G>>2]|0)>>2)+-1;G=f[z>>2]|0;V=f[G+24>>2]|0;K=V;if(((f[G+28>>2]|0)-V>>2|0)>(s|0)){F=117;break b}V=f[k>>2]|0;if(I){f[K+(T<<2)>>2]=V;if((I|0)!=-4){f[K+(H<<2)>>2]=(f[k>>2]|0)+1;I=H+1|0;if((I|0)!=-1){$=I;F=112}}else{$=0;F=112}}else{f[K+(H<<2)>>2]=V+1;$=1;F=112}if((F|0)==112){F=0;f[K+($<<2)>>2]=(f[k>>2]|0)+2}K=f[m>>2]|0;if((K|0)==(f[n>>2]|0))Ng(e,k);else{f[K>>2]=f[k>>2];f[m>>2]=K+4}break}default:{F=190;break b}}K=c-D+-1|0;V=f[B>>2]|0;if((V|0)==(f[A>>2]|0))break;H=V;while(1){V=H;I=V+-12|0;T=f[V+-8>>2]|0;if(T>>>0>K>>>0){R=-1;F=191;break a}if((T|0)!=(K|0))break c;T=b[V+-4>>0]|0;V=f[I>>2]|0;f[B>>2]=I;if((V|0)<0){R=-1;F=191;break a}I=f[(f[m>>2]|0)+-4>>2]|0;G=(I|0)==-1;do if(!(T&1))if(!G)if(!((I>>>0)%3|0)){aa=I+2|0;break}else{aa=I+-1|0;break}else aa=-1;else{J=I+1|0;if(G)aa=-1;else aa=((J>>>0)%3|0|0)==0?I+-2|0:J}while(0);f[k>>2]=C-V;I=ed(g,k)|0;f[I>>2]=aa;H=f[B>>2]|0;if((H|0)==(f[A>>2]|0))break c}}H=f[m>>2]|0;if((f[e>>2]|0)==(H|0)){R=-1;F=191;break a}K=H+-4|0;H=f[K>>2]|0;I=f[z>>2]|0;G=(H|0)==-1;T=H+1|0;if(!G?(J=((T>>>0)%3|0|0)==0?H+-2|0:T,(J|0)!=-1):0)ba=f[(f[I>>2]|0)+(J<<2)>>2]|0;else ba=-1;J=f[I+24>>2]|0;T=f[J+(ba<<2)>>2]|0;M=T+1|0;if((T|0)==-1)ca=-1;else ca=((M>>>0)%3|0|0)==0?T+-2|0:M;M=D*3|0;T=M+1|0;L=f[I+12>>2]|0;f[L+(H<<2)>>2]=T;f[L+(T<<2)>>2]=H;S=M+2|0;f[L+(ca<<2)>>2]=S;f[L+(S<<2)>>2]=ca;L=f[I>>2]|0;f[L+(M<<2)>>2]=ba;I=ca+1|0;if((ca|0)!=-1?(da=((I>>>0)%3|0|0)==0?ca+-2|0:I,(da|0)!=-1):0)ea=f[L+(da<<2)>>2]|0;else ea=-1;f[L+(T<<2)>>2]=ea;if(!G?(G=(((H>>>0)%3|0|0)==0?2:-1)+H|0,(G|0)!=-1):0){H=f[L+(G<<2)>>2]|0;f[L+(S<<2)>>2]=H;if((H|0)!=-1)f[J+(H<<2)>>2]=S}else f[L+(S<<2)>>2]=-1;S=(f[r>>2]|0)+(ba>>>5<<2)|0;f[S>>2]=f[S>>2]&~(1<<(ba&31));f[K>>2]=M}while(0);if((F|0)==43){F=0;M=f[e>>2]|0;K=f[m>>2]|0;if((M|0)==(K|0)){R=-1;F=191;break a}S=K+-4|0;L=f[S>>2]|0;f[m>>2]=S;H=f[y>>2]|0;d:do if(H){J=H+-1|0;G=(J&H|0)==0;if(!G)if(D>>>0<H>>>0)fa=D;else fa=(D>>>0)%(H>>>0)|0;else fa=J&D;T=f[(f[g>>2]|0)+(fa<<2)>>2]|0;if((T|0)!=0?(da=f[T>>2]|0,(da|0)!=0):0){e:do if(G){T=da;while(1){I=f[T+4>>2]|0;ga=(I|0)==(D|0);if(!(ga|(I&J|0)==(fa|0))){ha=M;ia=S;break d}if(ga?(f[T+8>>2]|0)==(D|0):0){ja=T;break e}T=f[T>>2]|0;if(!T){ha=M;ia=S;break d}}}else{T=da;while(1){V=f[T+4>>2]|0;if((V|0)==(D|0)){if((f[T+8>>2]|0)==(D|0)){ja=T;break e}}else{if(V>>>0<H>>>0)ka=V;else ka=(V>>>0)%(H>>>0)|0;if((ka|0)!=(fa|0)){ha=M;ia=S;break d}}T=f[T>>2]|0;if(!T){ha=M;ia=S;break d}}}while(0);da=ja+12|0;if((S|0)==(f[n>>2]|0)){Ng(e,da);ha=f[e>>2]|0;ia=f[m>>2]|0;break}else{f[S>>2]=f[da>>2];f[m>>2]=K;ha=M;ia=K;break}}else{ha=M;ia=S}}else{ha=M;ia=S}while(0);if((ha|0)==(ia|0)){R=-1;F=191;break a}S=ia+-4|0;M=f[S>>2]|0;K=f[z>>2]|0;H=(M|0)==-1;if(!H?(f[(f[K+12>>2]|0)+(M<<2)>>2]|0)!=-1:0){R=-1;F=191;break a}da=(L|0)==-1;J=f[K+12>>2]|0;if(!da){G=J+(L<<2)|0;if((f[G>>2]|0)==-1)la=G;else{R=-1;F=191;break a}}else la=J+-4|0;G=D*3|0;T=G+2|0;f[J+(M<<2)>>2]=T;f[J+(T<<2)>>2]=M;V=G+1|0;f[la>>2]=V;f[J+(V<<2)>>2]=L;if(!H){H=(((M>>>0)%3|0|0)==0?2:-1)+M|0;ga=f[K>>2]|0;if((H|0)==-1)ma=-1;else ma=f[ga+(H<<2)>>2]|0;f[ga+(G<<2)>>2]=ma;H=M+1|0;I=((H>>>0)%3|0|0)==0?M+-2|0:H;if((I|0)==-1){na=-1;oa=ma;pa=ga;qa=K}else{na=f[ga+(I<<2)>>2]|0;oa=ma;pa=ga;qa=K}}else{ga=f[K>>2]|0;f[ga+(G<<2)>>2]=-1;na=-1;oa=-1;pa=ga;qa=K}f[pa+(V<<2)>>2]=na;if(!da){da=(((L>>>0)%3|0|0)==0?2:-1)+L|0;if((da|0)!=-1){V=f[pa+(da<<2)>>2]|0;f[pa+(T<<2)>>2]=V;if((V|0)!=-1)f[(f[K+24>>2]|0)+(V<<2)>>2]=T}else f[pa+(T<<2)>>2]=-1;V=L+1|0;da=((V>>>0)%3|0|0)==0?L+-2|0:V;if((da|0)==-1){ra=-1;sa=-1}else{ra=f[pa+(da<<2)>>2]|0;sa=da}}else{f[pa+(T<<2)>>2]=-1;ra=-1;sa=-1}f[k>>2]=ra;T=f[K+24>>2]|0;if((oa|0)!=-1)f[T+(oa<<2)>>2]=f[T+(ra<<2)>>2];f:do if((sa|0)!=-1){K=f[qa>>2]|0;da=sa;do{f[K+(da<<2)>>2]=oa;V=da+1|0;ga=((V>>>0)%3|0|0)==0?da+-2|0:V;if((ga|0)==-1)break f;V=f[J+(ga<<2)>>2]|0;ga=V+1|0;if((V|0)==-1)break f;da=((ga>>>0)%3|0|0)==0?V+-2|0:ga}while((da|0)!=-1)}while(0);f[T+(f[k>>2]<<2)>>2]=-1;do if(q){J=f[o>>2]|0;if((J|0)==(f[p>>2]|0)){Ng(i,k);ta=(f[m>>2]|0)+-4|0;break}else{f[J>>2]=f[k>>2];f[o>>2]=J+4;ta=S;break}}else ta=S;while(0);f[ta>>2]=G}if((E|0)<(c|0))D=E;else{ua=E;va=z;F=133;break a}}if((F|0)==117){R=-1;F=191;break}}else{ua=0;va=a+8|0;F=133}while(0);g:do if((F|0)==133){c=f[va>>2]|0;if(((f[c+28>>2]|0)-(f[c+24>>2]|0)>>2|0)<=(s|0)){ta=f[m>>2]|0;do if((ta|0)!=(f[e>>2]|0)){p=a+270|0;q=a+364|0;oa=a+60|0;sa=a+64|0;qa=a+68|0;ra=a+312|0;pa=a+360|0;na=a+352|0;ma=a+356|0;la=a+76|0;ia=a+80|0;ha=a+72|0;n=ua;ja=ta;h:while(1){fa=ja+-4|0;f[k>>2]=f[fa>>2];f[m>>2]=fa;if((j[p>>1]|0)<514)if(b[q>>0]|0){fa=f[pa>>2]|0;ka=(f[na>>2]|0)+(fa>>>3)|0;if(ka>>>0<(f[ma>>2]|0)>>>0){ba=(h[ka>>0]|0)>>>(fa&7)&1;f[pa>>2]=fa+1;wa=ba;F=141}else F=162}else F=142;else{wa=(pi(ra)|0)&1;F=141}if((F|0)==141){F=0;if(!wa)F=162;else F=142}do if((F|0)==142){F=0;ba=f[va>>2]|0;fa=f[ba>>2]|0;ka=fa;if((n|0)>=(((f[ba+4>>2]|0)-fa>>2>>>0)/3|0|0)){F=169;break h}fa=f[k>>2]|0;ea=fa+1|0;if((fa|0)!=-1?(ca=((ea>>>0)%3|0|0)==0?fa+-2|0:ea,(ca|0)!=-1):0)xa=f[ka+(ca<<2)>>2]|0;else xa=-1;ca=f[ba+24>>2]|0;ea=f[ca+(xa<<2)>>2]|0;aa=ea+1|0;if((ea|0)!=-1?($=((aa>>>0)%3|0|0)==0?ea+-2|0:aa,aa=$+1|0,($|0)!=-1):0){ea=((aa>>>0)%3|0|0)==0?$+-2|0:aa;if((ea|0)==-1){ya=-1;za=$}else{ya=f[ka+(ea<<2)>>2]|0;za=$}}else{ya=-1;za=-1}$=f[ca+(ya<<2)>>2]|0;ca=$+1|0;if(($|0)!=-1?(ea=((ca>>>0)%3|0|0)==0?$+-2|0:ca,ca=ea+1|0,(ea|0)!=-1):0){$=((ca>>>0)%3|0|0)==0?ea+-2|0:ca;if(($|0)==-1){Aa=-1;Ba=ea}else{Aa=f[ka+($<<2)>>2]|0;Ba=ea}}else{Aa=-1;Ba=-1}ea=n*3|0;f[l>>2]=ea;$=f[ba+12>>2]|0;f[$+(ea<<2)>>2]=fa;f[$+(fa<<2)>>2]=ea;ea=(f[l>>2]|0)+1|0;f[$+(ea<<2)>>2]=za;f[$+(za<<2)>>2]=ea;ea=(f[l>>2]|0)+2|0;f[$+(ea<<2)>>2]=Ba;f[$+(Ba<<2)>>2]=ea;ea=f[l>>2]|0;f[ka+(ea<<2)>>2]=ya;f[ka+(ea+1<<2)>>2]=Aa;f[ka+(ea+2<<2)>>2]=xa;$=(ea|0)==-1?-1:ya;ea=f[r>>2]|0;fa=ea+($>>>5<<2)|0;f[fa>>2]=f[fa>>2]&~(1<<($&31));$=(f[l>>2]|0)+1|0;if(($|0)==-1)Ca=-1;else Ca=f[ka+($<<2)>>2]|0;$=ea+(Ca>>>5<<2)|0;f[$>>2]=f[$>>2]&~(1<<(Ca&31));$=(f[l>>2]|0)+2|0;if(($|0)==-1)Da=-1;else Da=f[ka+($<<2)>>2]|0;$=ea+(Da>>>5<<2)|0;f[$>>2]=f[$>>2]&~(1<<(Da&31));$=n+1|0;ea=f[sa>>2]|0;ka=f[qa>>2]|0;if((ea|0)==(ka<<5|0)){if((ea+1|0)<0){F=156;break h}fa=ka<<6;ka=ea+32&-32;vg(oa,ea>>>0<1073741823?(fa>>>0<ka>>>0?ka:fa):2147483647);Ea=f[sa>>2]|0}else Ea=ea;f[sa>>2]=Ea+1;ea=(f[oa>>2]|0)+(Ea>>>5<<2)|0;f[ea>>2]=f[ea>>2]|1<<(Ea&31);ea=f[la>>2]|0;if((ea|0)==(f[ia>>2]|0))Ng(ha,l);else{f[ea>>2]=f[l>>2];f[la>>2]=ea+4}Fa=$}else if((F|0)==162){F=0;$=f[sa>>2]|0;ea=f[qa>>2]|0;if(($|0)==(ea<<5|0)){if(($+1|0)<0){F=164;break h}fa=ea<<6;ea=$+32&-32;vg(oa,$>>>0<1073741823?(fa>>>0<ea>>>0?ea:fa):2147483647);Ga=f[sa>>2]|0}else Ga=$;f[sa>>2]=Ga+1;$=(f[oa>>2]|0)+(Ga>>>5<<2)|0;f[$>>2]=f[$>>2]&~(1<<(Ga&31));$=f[la>>2]|0;if(($|0)==(f[ia>>2]|0)){Ng(ha,k);Fa=n;break}else{f[$>>2]=f[k>>2];f[la>>2]=$+4;Fa=n;break}}while(0);ja=f[m>>2]|0;if((ja|0)==(f[e>>2]|0)){F=171;break}else n=Fa}if((F|0)==156)$n(oa);else if((F|0)==164)$n(oa);else if((F|0)==169){R=-1;F=191;break g}else if((F|0)==171){Ha=Fa;Ia=f[va>>2]|0;break}}else{Ha=ua;Ia=c}while(0);if((Ha|0)==(((f[Ia+4>>2]|0)-(f[Ia>>2]|0)>>2>>>0)/3|0|0)){c=(f[Ia+28>>2]|0)-(f[Ia+24>>2]|0)>>2;ta=f[i>>2]|0;n=f[o>>2]|0;if((ta|0)==(n|0)){Ja=c;Ka=ta}else{ja=k+4|0;la=k+8|0;ha=k+12|0;ia=c;c=ta;ta=Ia;while(1){sa=f[c>>2]|0;qa=ia+-1|0;ra=f[ta+24>>2]|0;pa=ra+(qa<<2)|0;if((f[pa>>2]|0)==-1){ma=ia;while(1){na=ma+-1|0;q=ma+-2|0;p=ra+(q<<2)|0;if((f[p>>2]|0)==-1)ma=na;else{La=na;Ma=p;Na=q;break}}}else{La=ia;Ma=pa;Na=qa}if(Na>>>0<sa>>>0){Oa=La;Pa=ta}else{f[k>>2]=ta;ma=f[Ma>>2]|0;f[ja>>2]=ma;f[la>>2]=ma;b[ha>>0]=1;if((ma|0)==-1){Qa=ra;Ra=ta}else{oa=ta;q=ma;do{f[(f[oa>>2]|0)+(q<<2)>>2]=sa;Tf(k);q=f[la>>2]|0;oa=f[va>>2]|0}while((q|0)!=-1);Qa=f[oa+24>>2]|0;Ra=oa}q=Qa+(Na<<2)|0;if((sa|0)!=-1)f[Qa+(sa<<2)>>2]=f[q>>2];f[q>>2]=-1;q=f[r>>2]|0;ra=q+(Na>>>5<<2)|0;qa=1<<(Na&31);pa=q+(sa>>>5<<2)|0;q=1<<(sa&31);if(!(f[ra>>2]&qa))Sa=f[pa>>2]&~q;else Sa=f[pa>>2]|q;f[pa>>2]=Sa;f[ra>>2]=f[ra>>2]&~qa;Oa=La+-1|0;Pa=Ra}c=c+4|0;if((c|0)==(n|0)){R=Oa;F=191;break}else{ia=Oa;ta=Pa}}}}else{R=-1;F=191}}else{R=-1;F=191}}while(0);if((F|0)==191){Ja=R;Ka=f[i>>2]|0}if(Ka|0){f[o>>2]=Ka;Ko(Ka)}Ka=f[g+8>>2]|0;if(Ka|0){o=Ka;do{Ka=o;o=f[o>>2]|0;Ko(Ka)}while((o|0)!=0)}o=f[g>>2]|0;f[g>>2]=0;if(o|0)Ko(o);o=f[e>>2]|0;if(!o){u=d;return Ja|0}f[m>>2]=o;Ko(o);u=d;return Ja|0}function Za(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;b=u;u=u+16|0;c=b;d=b+8|0;e=b+4|0;f[d>>2]=a;do if(a>>>0>=212){g=(a>>>0)/210|0;h=g*210|0;f[e>>2]=a-h;i=0;j=g;g=h;h=(mj(4608,4800,e,c)|0)-4608>>2;a:while(1){k=(f[4608+(h<<2)>>2]|0)+g|0;l=5;while(1){if(l>>>0>=47){m=6;break}n=f[4416+(l<<2)>>2]|0;o=(k>>>0)/(n>>>0)|0;if(o>>>0<n>>>0){m=107;break a}if((k|0)==(W(o,n)|0)){p=i;break}else l=l+1|0}b:do if((m|0)==6){m=0;l=211;n=i;c:while(1){o=(k>>>0)/(l>>>0)|0;do if(o>>>0>=l>>>0)if((k|0)!=(W(o,l)|0)){q=l+10|0;r=(k>>>0)/(q>>>0)|0;if(r>>>0>=q>>>0)if((k|0)!=(W(r,q)|0)){r=l+12|0;s=(k>>>0)/(r>>>0)|0;if(s>>>0>=r>>>0)if((k|0)!=(W(s,r)|0)){s=l+16|0;t=(k>>>0)/(s>>>0)|0;if(t>>>0>=s>>>0)if((k|0)!=(W(t,s)|0)){t=l+18|0;v=(k>>>0)/(t>>>0)|0;if(v>>>0>=t>>>0)if((k|0)!=(W(v,t)|0)){v=l+22|0;w=(k>>>0)/(v>>>0)|0;if(w>>>0>=v>>>0)if((k|0)!=(W(w,v)|0)){w=l+28|0;x=(k>>>0)/(w>>>0)|0;if(x>>>0>=w>>>0)if((k|0)==(W(x,w)|0)){y=w;z=9;A=n}else{x=l+30|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+36|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+40|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+42|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+46|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+52|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+58|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+60|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+66|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+70|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+72|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+78|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+82|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+88|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+96|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+100|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+102|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+106|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+108|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+112|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+120|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+126|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+130|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+136|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+138|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+142|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+148|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+150|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+156|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+162|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+166|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+168|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+172|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+178|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+180|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+186|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+190|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+192|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+196|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+198|0;B=(k>>>0)/(x>>>0)|0;if(B>>>0<x>>>0){y=x;z=1;A=k;break}if((k|0)==(W(B,x)|0)){y=x;z=9;A=n;break}x=l+208|0;B=(k>>>0)/(x>>>0)|0;C=B>>>0<x>>>0;D=(k|0)==(W(B,x)|0);y=C|D?x:l+210|0;z=C?1:D?9:0;A=C?k:n}else{y=w;z=1;A=k}}else{y=v;z=9;A=n}else{y=v;z=1;A=k}}else{y=t;z=9;A=n}else{y=t;z=1;A=k}}else{y=s;z=9;A=n}else{y=s;z=1;A=k}}else{y=r;z=9;A=n}else{y=r;z=1;A=k}}else{y=q;z=9;A=n}else{y=q;z=1;A=k}}else{y=l;z=9;A=n}else{y=l;z=1;A=k}while(0);switch(z&15){case 9:{p=A;break b;break}case 0:{l=y;n=A;break}default:break c}}if(!z)p=A;else{m=108;break a}}while(0);n=h+1|0;l=(n|0)==48;o=j+(l&1)|0;i=p;j=o;g=o*210|0;h=l?0:n}if((m|0)==107){f[d>>2]=k;E=k;break}else if((m|0)==108){f[d>>2]=k;E=A;break}}else{h=mj(4416,4608,d,c)|0;E=f[h>>2]|0}while(0);u=b;return E|0}function _a(a){a=a|0;var c=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=u;u=u+80|0;e=c+68|0;g=c+64|0;i=c+56|0;k=c+48|0;l=c+40|0;m=c;n=c+60|0;o=c+52|0;p=c+44|0;q=a+132|0;f[q>>2]=0;r=a+148|0;if(f[r>>2]|0){s=a+144|0;t=f[s>>2]|0;if(t|0){v=t;do{t=v;v=f[v>>2]|0;Ko(t)}while((v|0)!=0)}f[s>>2]=0;s=f[a+140>>2]|0;if(s|0){v=a+136|0;t=0;do{f[(f[v>>2]|0)+(t<<2)>>2]=0;t=t+1|0}while((t|0)!=(s|0))}f[r>>2]=0}r=a+4|0;s=f[r>>2]|0;t=h[s+36>>0]<<8;v=(t|h[s+37>>0])&65535;do if((v&65535)<514){w=f[s+32>>2]|0;if((v&65535)<512){x=w+8|0;y=f[x>>2]|0;z=f[x+4>>2]|0;x=w+16|0;A=x;B=f[A>>2]|0;C=vl(B|0,f[A+4>>2]|0,4,0)|0;A=H;if(!((z|0)<(A|0)|(z|0)==(A|0)&y>>>0<C>>>0)){y=(f[w>>2]|0)+B|0;B=h[y>>0]|h[y+1>>0]<<8|h[y+2>>0]<<16|h[y+3>>0]<<24;f[e>>2]=B;y=x;f[y>>2]=C;f[y+4>>2]=A;D=s;E=t;F=B;G=15}}else if(zh(e,w)|0){w=f[r>>2]|0;D=w;E=h[w+36>>0]<<8;F=f[e>>2]|0;G=15}if((G|0)==15){f[q>>2]=F;I=E;J=D;break}K=0;u=c;return K|0}else{I=t;J=s}while(0);s=f[J+32>>2]|0;if((I&65535)<512){I=s+8|0;J=f[I>>2]|0;t=f[I+4>>2]|0;I=s+16|0;D=I;E=f[D>>2]|0;F=vl(E|0,f[D+4>>2]|0,4,0)|0;D=H;if((t|0)<(D|0)|(t|0)==(D|0)&J>>>0<F>>>0)L=0;else{J=(f[s>>2]|0)+E|0;E=h[J>>0]|h[J+1>>0]<<8|h[J+2>>0]<<16|h[J+3>>0]<<24;f[g>>2]=E;J=I;f[J>>2]=F;f[J+4>>2]=D;D=a+156|0;f[D>>2]=E;M=s;N=i;O=D;G=22}}else if(zh(g,s)|0){s=f[r>>2]|0;D=f[s+32>>2]|0;E=h[s+36>>0]<<8&65535;s=a+156|0;f[s>>2]=f[g>>2];if((E&65535)>=512)if(zh(i,D)|0){P=f[i>>2]|0;Q=s;R=i;G=26}else{S=0;T=i;G=125}else{M=D;N=i;O=s;G=22}}else L=0;if((G|0)==22){s=M+8|0;D=f[s>>2]|0;E=f[s+4>>2]|0;s=M+16|0;g=s;J=f[g>>2]|0;F=vl(J|0,f[g+4>>2]|0,4,0)|0;g=H;if((E|0)<(g|0)|(E|0)==(g|0)&D>>>0<F>>>0){S=0;T=N;G=125}else{D=(f[M>>2]|0)+J|0;J=h[D>>0]|h[D+1>>0]<<8|h[D+2>>0]<<16|h[D+3>>0]<<24;f[i>>2]=J;D=s;f[D>>2]=F;f[D+4>>2]=g;P=J;Q=O;R=N;G=26}}if((G|0)==26)if((P>>>0<=1431655765?(f[Q>>2]|0)>>>0<=(P*3|0)>>>0:0)?(N=f[r>>2]|0,O=f[N+32>>2]|0,J=O+8|0,g=f[J>>2]|0,D=f[J+4>>2]|0,J=O+16|0,F=J,s=f[F>>2]|0,M=f[F+4>>2]|0,(D|0)>(M|0)|(D|0)==(M|0)&g>>>0>s>>>0):0){F=f[O>>2]|0;E=b[F+s>>0]|0;I=vl(s|0,M|0,1,0)|0;t=J;f[t>>2]=I;f[t+4>>2]=H;if((h[N+36>>0]<<8&65535)<512){N=vl(s|0,M|0,5,0)|0;M=H;if((D|0)<(M|0)|(D|0)==(M|0)&g>>>0<N>>>0)U=0;else{g=F+I|0;I=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[k>>2]=I;g=J;f[g>>2]=N;f[g+4>>2]=M;V=P;W=I;G=34}}else if(zh(k,O)|0){V=f[i>>2]|0;W=f[k>>2]|0;G=34}else U=0;if((G|0)==34)if(V>>>0>=W>>>0?V>>>0<=(((W>>>0)/3|0)+W|0)>>>0:0){V=f[r>>2]|0;O=f[V+32>>2]|0;if((h[V+36>>0]<<8&65535)<512){V=O+8|0;I=f[V>>2]|0;P=f[V+4>>2]|0;V=O+16|0;M=V;g=f[M>>2]|0;N=vl(g|0,f[M+4>>2]|0,4,0)|0;M=H;if((P|0)<(M|0)|(P|0)==(M|0)&I>>>0<N>>>0)X=0;else{I=(f[O>>2]|0)+g|0;g=h[I>>0]|h[I+1>>0]<<8|h[I+2>>0]<<16|h[I+3>>0]<<24;f[l>>2]=g;I=V;f[I>>2]=N;f[I+4>>2]=M;Y=g;Z=W;G=41}}else if(zh(l,O)|0){Y=f[l>>2]|0;Z=f[k>>2]|0;G=41}else X=0;a:do if((G|0)==41)if(Y>>>0<=Z>>>0){f[a+28>>2]=f[a+24>>2];O=wk(88)|0;Ej(O);W=a+8|0;g=f[W>>2]|0;f[W>>2]=O;if(g|0){O=f[g+76>>2]|0;if(O|0){f[g+80>>2]=O;Ko(O)}O=f[g+64>>2]|0;if(O|0){f[g+68>>2]=O;Ko(O)}O=f[g+48>>2]|0;if(O|0){f[g+52>>2]=O;Ko(O)}O=f[g+24>>2]|0;if(O|0){f[g+28>>2]=O;Ko(O)}O=f[g+12>>2]|0;if(O|0){f[g+16>>2]=O;Ko(O)}O=f[g>>2]|0;if(O|0){f[g+4>>2]=O;Ko(O)}Ko(g);if(!(f[W>>2]|0)){X=0;break}}g=a+160|0;f[a+164>>2]=f[g>>2];Wh(g,f[i>>2]|0);g=a+172|0;f[a+176>>2]=f[g>>2];Wh(g,f[i>>2]|0);f[a+40>>2]=f[a+36>>2];f[a+52>>2]=f[a+48>>2];f[a+64>>2]=0;f[a+76>>2]=f[a+72>>2];f[a+84>>2]=-1;f[a+92>>2]=-1;f[a+88>>2]=-1;g=a+216|0;O=f[g>>2]|0;M=a+220|0;I=f[M>>2]|0;if((I|0)!=(O|0)){N=I;do{I=f[N+-12>>2]|0;if(I|0){f[N+-8>>2]=I;Ko(I)}I=f[N+-28>>2]|0;if(I|0){f[N+-24>>2]=I;Ko(I)}I=f[N+-40>>2]|0;if(I|0){f[N+-36>>2]=I;Ko(I)}di(N+-140|0);N=N+-144|0}while((N|0)!=(O|0))}f[M>>2]=O;N=E&255;Zg(g,N);if(Hh(f[W>>2]|0,f[i>>2]|0,(f[l>>2]|0)+(f[Q>>2]|0)|0)|0){I=(f[l>>2]|0)+(f[Q>>2]|0)|0;b[e>>0]=1;Gf(a+120|0,I,e);I=f[r>>2]|0;V=(h[I+36>>0]<<8|h[I+37>>0])&65535;b:do if((V&65535)>=514)if((Nb(a,f[I+32>>2]|0)|0)==-1){X=0;break a}else _=-1;else{P=f[I+32>>2]|0;do if((V&65535)<512){J=P+8|0;F=f[J>>2]|0;D=f[J+4>>2]|0;J=P+16|0;s=J;t=f[s>>2]|0;q=vl(t|0,f[s+4>>2]|0,4,0)|0;s=H;if((D|0)<(s|0)|(D|0)==(s|0)&F>>>0<q>>>0)break;F=(f[P>>2]|0)+t|0;t=h[F>>0]|h[F+1>>0]<<8|h[F+2>>0]<<16|h[F+3>>0]<<24;f[e>>2]=t;F=J;f[F>>2]=q;f[F+4>>2]=s;$=t;G=72}else{if(!(zh(e,P)|0))break;$=f[e>>2]|0;G=72}while(0);do if((G|0)==72){if(!$)break;P=f[(f[r>>2]|0)+32>>2]|0;t=P+8|0;s=P+16|0;P=wl(f[t>>2]|0,f[t+4>>2]|0,f[s>>2]|0,f[s+4>>2]|0)|0;s=H;if((s|0)<0|(s|0)==0&P>>>0<$>>>0)break;Zj(m);P=f[(f[r>>2]|0)+32>>2]|0;s=P+16|0;t=f[s>>2]|0;F=f[e>>2]|0;q=(f[P>>2]|0)+t+F|0;J=P+8|0;D=wl(f[J>>2]|0,f[J+4>>2]|0,t|0,f[s+4>>2]|0)|0;pk(m,q,D-F|0,d[P+38>>1]|0);P=Nb(a,m)|0;if((P|0)==-1)break;_=P;break b}while(0);X=0;break a}while(0);V=a+232|0;f[a+376>>2]=a;I=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;O=f[I>>2]|0;I=(f[O>>2]|0)+(f[O+16>>2]|0)|0;O=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;P=f[O>>2]|0;O=P+8|0;F=P+16|0;P=wl(f[O>>2]|0,f[O+4>>2]|0,f[F>>2]|0,f[F+4>>2]|0)|0;F=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;pk(V,I,P,d[(f[F>>2]|0)+38>>1]|0);F=Ka[f[(f[a>>2]|0)+36>>2]&127](a)|0;f[a+380>>2]=F;F=a+384|0;f[F>>2]=(f[l>>2]|0)+(f[Q>>2]|0);f[a+372>>2]=N;Zj(m);c:do if(Dd(V,m)|0){P=m+8|0;I=P;O=f[I>>2]|0;D=f[I+4>>2]|0;I=m+16|0;q=I;s=f[q>>2]|0;t=vl(s|0,f[q+4>>2]|0,4,0)|0;q=H;if((D|0)<(q|0)|(D|0)==(q|0)&O>>>0<t>>>0){aa=0;break}O=(f[m>>2]|0)+s|0;s=h[O>>0]|h[O+1>>0]<<8|h[O+2>>0]<<16|h[O+3>>0]<<24;O=I;f[O>>2]=t;f[O+4>>2]=q;if((s|0)<0){aa=0;break}q=f[F>>2]|0;if((s|0)>=(q|0)){aa=0;break}s=a+388|0;f[e>>2]=0;O=a+392|0;t=f[s>>2]|0;D=(f[O>>2]|0)-t>>2;do if(q>>>0>D>>>0)Of(s,q-D|0,e);else{if(q>>>0>=D>>>0)break;f[O>>2]=t+(q<<2)}while(0);if(!(rd(a+400|0,m)|0)){aa=0;break}q=Wa(a,f[k>>2]|0)|0;if((q|0)==-1){aa=0;break}t=f[(f[r>>2]|0)+32>>2]|0;O=I;D=f[O>>2]|0;s=(f[m>>2]|0)+D|0;J=P;v=wl(f[J>>2]|0,f[J+4>>2]|0,D|0,f[O+4>>2]|0)|0;pk(t,s,v,d[t+38>>1]|0);t=f[r>>2]|0;v=(h[t+36>>0]<<8|h[t+37>>0])&65535;if((v&65535)<514){s=(f[t+32>>2]|0)+16|0;t=s;O=vl(f[t>>2]|0,f[t+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;t=s;f[t>>2]=O;f[t+4>>2]=H}do if((f[M>>2]|0)!=(f[g>>2]|0)){t=f[W>>2]|0;O=(f[t+4>>2]|0)!=(f[t>>2]|0);if((v&65535)<513){if(!O)break;t=0;do{f[n>>2]=t;f[e>>2]=f[n>>2];t=t+3|0;if(!(Zb(a,e)|0)){aa=0;break c}s=f[W>>2]|0}while(t>>>0<(f[s+4>>2]|0)-(f[s>>2]|0)>>2>>>0)}else{if(!O)break;t=0;do{f[o>>2]=t;f[e>>2]=f[o>>2];t=t+3|0;if(!(gc(a,e)|0)){aa=0;break c}s=f[W>>2]|0}while(t>>>0<(f[s+4>>2]|0)-(f[s>>2]|0)>>2>>>0)}}while(0);if(b[a+308>>0]|0)Cj(a+272|0);if((j[a+270>>1]|0)<514)Cj(a+328|0);v=f[g>>2]|0;if((f[M>>2]|0)!=(v|0)){P=0;I=v;do{gg(I+(P*144|0)+4|0,f[W>>2]|0)|0;v=f[g>>2]|0;t=f[v+(P*144|0)+132>>2]|0;O=f[v+(P*144|0)+136>>2]|0;if((t|0)==(O|0))ba=v;else{s=t;t=v;while(1){f[p>>2]=f[s>>2];f[e>>2]=f[p>>2];pf(t+(P*144|0)+4|0,e);s=s+4|0;v=f[g>>2]|0;if((s|0)==(O|0)){ba=v;break}else t=v}}jj(ba+(P*144|0)+4|0,0,0);P=P+1|0;I=f[g>>2]|0}while(P>>>0<(((f[M>>2]|0)-I|0)/144|0)>>>0)}I=f[W>>2]|0;P=(f[I+28>>2]|0)-(f[I+24>>2]|0)>>2;I=a+196|0;t=a+200|0;O=f[I>>2]|0;s=(f[t>>2]|0)-O>>2;do if(P>>>0>s>>>0)Eg(I,P-s|0);else{if(P>>>0>=s>>>0)break;f[t>>2]=O+(P<<2)}while(0);Wh(a+184|0,P);O=f[g>>2]|0;if((f[M>>2]|0)!=(O|0)){t=0;s=O;do{O=s;I=(f[O+(t*144|0)+60>>2]|0)-(f[O+(t*144|0)+56>>2]|0)>>2;v=f[W>>2]|0;D=(f[v+28>>2]|0)-(f[v+24>>2]|0)>>2;v=(I|0)<(D|0)?D:I;I=O+(t*144|0)+116|0;D=O+(t*144|0)+120|0;J=f[I>>2]|0;w=(f[D>>2]|0)-J>>2;do if(v>>>0>w>>>0)Eg(I,v-w|0);else{if(v>>>0>=w>>>0)break;f[D>>2]=J+(v<<2)}while(0);Wh(O+(t*144|0)+104|0,v);t=t+1|0;s=f[g>>2]|0}while(t>>>0<(((f[M>>2]|0)-s|0)/144|0)>>>0)}aa=Gb(a,q)|0}else aa=0;while(0);X=aa}else X=0}else X=0;while(0);U=X}else U=0;S=U;T=R;G=125}else{S=0;T=R;G=125}if((G|0)==125)L=S;K=L;u=c;return K|0}function $a(a){a=a|0;var c=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=u;u=u+80|0;e=c+68|0;g=c+64|0;i=c+60|0;k=c+52|0;l=c+44|0;m=c;n=c+56|0;o=c+48|0;p=c+40|0;q=a+132|0;f[q>>2]=0;r=a+148|0;if(f[r>>2]|0){s=a+144|0;t=f[s>>2]|0;if(t|0){v=t;do{t=v;v=f[v>>2]|0;Ko(t)}while((v|0)!=0)}f[s>>2]=0;s=f[a+140>>2]|0;if(s|0){v=a+136|0;t=0;do{f[(f[v>>2]|0)+(t<<2)>>2]=0;t=t+1|0}while((t|0)!=(s|0))}f[r>>2]=0}r=a+4|0;s=f[r>>2]|0;t=h[s+36>>0]<<8;v=(t|h[s+37>>0])&65535;do if((v&65535)<514){w=f[s+32>>2]|0;if((v&65535)<512){x=w+8|0;y=f[x>>2]|0;z=f[x+4>>2]|0;x=w+16|0;A=x;B=f[A>>2]|0;C=vl(B|0,f[A+4>>2]|0,4,0)|0;A=H;if(!((z|0)<(A|0)|(z|0)==(A|0)&y>>>0<C>>>0)){y=(f[w>>2]|0)+B|0;B=h[y>>0]|h[y+1>>0]<<8|h[y+2>>0]<<16|h[y+3>>0]<<24;f[e>>2]=B;y=x;f[y>>2]=C;f[y+4>>2]=A;D=s;E=t;F=B;G=15}}else if(zh(e,w)|0){w=f[r>>2]|0;D=w;E=h[w+36>>0]<<8;F=f[e>>2]|0;G=15}if((G|0)==15){f[q>>2]=F;I=E;J=D;break}K=0;u=c;return K|0}else{I=t;J=s}while(0);s=f[J+32>>2]|0;if((I&65535)<512){I=s+8|0;J=f[I>>2]|0;t=f[I+4>>2]|0;I=s+16|0;D=I;E=f[D>>2]|0;F=vl(E|0,f[D+4>>2]|0,4,0)|0;D=H;if((t|0)<(D|0)|(t|0)==(D|0)&J>>>0<F>>>0)L=0;else{J=(f[s>>2]|0)+E|0;E=h[J>>0]|h[J+1>>0]<<8|h[J+2>>0]<<16|h[J+3>>0]<<24;f[g>>2]=E;J=I;f[J>>2]=F;f[J+4>>2]=D;D=a+156|0;f[D>>2]=E;M=s;N=i;O=D;G=22}}else if(zh(g,s)|0){s=f[r>>2]|0;D=f[s+32>>2]|0;E=h[s+36>>0]<<8&65535;s=a+156|0;f[s>>2]=f[g>>2];if((E&65535)>=512)if(zh(i,D)|0){P=f[i>>2]|0;Q=s;R=i;G=26}else{S=0;T=i;G=117}else{M=D;N=i;O=s;G=22}}else L=0;if((G|0)==22){s=M+8|0;D=f[s>>2]|0;E=f[s+4>>2]|0;s=M+16|0;g=s;J=f[g>>2]|0;F=vl(J|0,f[g+4>>2]|0,4,0)|0;g=H;if((E|0)<(g|0)|(E|0)==(g|0)&D>>>0<F>>>0){S=0;T=N;G=117}else{D=(f[M>>2]|0)+J|0;J=h[D>>0]|h[D+1>>0]<<8|h[D+2>>0]<<16|h[D+3>>0]<<24;f[i>>2]=J;D=s;f[D>>2]=F;f[D+4>>2]=g;P=J;Q=O;R=N;G=26}}if((G|0)==26)if((P>>>0<=1431655765?(f[Q>>2]|0)>>>0<=(P*3|0)>>>0:0)?(N=f[r>>2]|0,O=f[N+32>>2]|0,J=O+8|0,g=f[J>>2]|0,D=f[J+4>>2]|0,J=O+16|0,F=J,s=f[F>>2]|0,M=f[F+4>>2]|0,(D|0)>(M|0)|(D|0)==(M|0)&g>>>0>s>>>0):0){F=f[O>>2]|0;E=b[F+s>>0]|0;I=vl(s|0,M|0,1,0)|0;t=J;f[t>>2]=I;f[t+4>>2]=H;if((h[N+36>>0]<<8&65535)<512){N=vl(s|0,M|0,5,0)|0;M=H;if((D|0)<(M|0)|(D|0)==(M|0)&g>>>0<N>>>0)U=0;else{g=F+I|0;I=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[k>>2]=I;g=J;f[g>>2]=N;f[g+4>>2]=M;V=P;W=I;G=34}}else if(zh(k,O)|0){V=f[i>>2]|0;W=f[k>>2]|0;G=34}else U=0;if((G|0)==34)if(V>>>0>=W>>>0?V>>>0<=(((W>>>0)/3|0)+W|0)>>>0:0){V=f[r>>2]|0;O=f[V+32>>2]|0;if((h[V+36>>0]<<8&65535)<512){V=O+8|0;I=f[V>>2]|0;P=f[V+4>>2]|0;V=O+16|0;M=V;g=f[M>>2]|0;N=vl(g|0,f[M+4>>2]|0,4,0)|0;M=H;if((P|0)<(M|0)|(P|0)==(M|0)&I>>>0<N>>>0)X=0;else{I=(f[O>>2]|0)+g|0;g=h[I>>0]|h[I+1>>0]<<8|h[I+2>>0]<<16|h[I+3>>0]<<24;f[l>>2]=g;I=V;f[I>>2]=N;f[I+4>>2]=M;Y=g;Z=W;G=41}}else if(zh(l,O)|0){Y=f[l>>2]|0;Z=f[k>>2]|0;G=41}else X=0;a:do if((G|0)==41)if(Y>>>0<=Z>>>0){f[a+28>>2]=f[a+24>>2];O=wk(88)|0;Ej(O);W=a+8|0;g=f[W>>2]|0;f[W>>2]=O;if(g|0){O=f[g+76>>2]|0;if(O|0){f[g+80>>2]=O;Ko(O)}O=f[g+64>>2]|0;if(O|0){f[g+68>>2]=O;Ko(O)}O=f[g+48>>2]|0;if(O|0){f[g+52>>2]=O;Ko(O)}O=f[g+24>>2]|0;if(O|0){f[g+28>>2]=O;Ko(O)}O=f[g+12>>2]|0;if(O|0){f[g+16>>2]=O;Ko(O)}O=f[g>>2]|0;if(O|0){f[g+4>>2]=O;Ko(O)}Ko(g);if(!(f[W>>2]|0)){X=0;break}}g=a+160|0;f[a+164>>2]=f[g>>2];Wh(g,f[i>>2]|0);g=a+172|0;f[a+176>>2]=f[g>>2];Wh(g,f[i>>2]|0);f[a+40>>2]=f[a+36>>2];f[a+52>>2]=f[a+48>>2];f[a+64>>2]=0;f[a+76>>2]=f[a+72>>2];f[a+84>>2]=-1;f[a+92>>2]=-1;f[a+88>>2]=-1;g=a+216|0;O=f[g>>2]|0;M=a+220|0;I=f[M>>2]|0;if((I|0)!=(O|0)){N=I;do{I=f[N+-12>>2]|0;if(I|0){f[N+-8>>2]=I;Ko(I)}I=f[N+-28>>2]|0;if(I|0){f[N+-24>>2]=I;Ko(I)}I=f[N+-40>>2]|0;if(I|0){f[N+-36>>2]=I;Ko(I)}di(N+-140|0);N=N+-144|0}while((N|0)!=(O|0))}f[M>>2]=O;N=E&255;Zg(g,N);if(Hh(f[W>>2]|0,f[i>>2]|0,(f[l>>2]|0)+(f[Q>>2]|0)|0)|0){I=(f[l>>2]|0)+(f[Q>>2]|0)|0;b[e>>0]=1;Gf(a+120|0,I,e);I=f[r>>2]|0;V=(h[I+36>>0]<<8|h[I+37>>0])&65535;b:do if((V&65535)>=514)if((Nb(a,f[I+32>>2]|0)|0)==-1){X=0;break a}else _=-1;else{P=f[I+32>>2]|0;do if((V&65535)<512){J=P+8|0;F=f[J>>2]|0;D=f[J+4>>2]|0;J=P+16|0;s=J;t=f[s>>2]|0;q=vl(t|0,f[s+4>>2]|0,4,0)|0;s=H;if((D|0)<(s|0)|(D|0)==(s|0)&F>>>0<q>>>0)break;F=(f[P>>2]|0)+t|0;t=h[F>>0]|h[F+1>>0]<<8|h[F+2>>0]<<16|h[F+3>>0]<<24;f[e>>2]=t;F=J;f[F>>2]=q;f[F+4>>2]=s;$=t;G=72}else{if(!(zh(e,P)|0))break;$=f[e>>2]|0;G=72}while(0);do if((G|0)==72){if(!$)break;P=f[(f[r>>2]|0)+32>>2]|0;t=P+8|0;s=P+16|0;P=wl(f[t>>2]|0,f[t+4>>2]|0,f[s>>2]|0,f[s+4>>2]|0)|0;s=H;if((s|0)<0|(s|0)==0&P>>>0<$>>>0)break;Zj(m);P=f[(f[r>>2]|0)+32>>2]|0;s=P+16|0;t=f[s>>2]|0;F=f[e>>2]|0;q=(f[P>>2]|0)+t+F|0;J=P+8|0;D=wl(f[J>>2]|0,f[J+4>>2]|0,t|0,f[s+4>>2]|0)|0;pk(m,q,D-F|0,d[P+38>>1]|0);P=Nb(a,m)|0;if((P|0)==-1)break;_=P;break b}while(0);X=0;break a}while(0);V=a+232|0;f[a+376>>2]=a;I=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;O=f[I>>2]|0;I=(f[O>>2]|0)+(f[O+16>>2]|0)|0;O=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;P=f[O>>2]|0;O=P+8|0;F=P+16|0;P=wl(f[O>>2]|0,f[O+4>>2]|0,f[F>>2]|0,f[F+4>>2]|0)|0;F=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;pk(V,I,P,d[(f[F>>2]|0)+38>>1]|0);F=Ka[f[(f[a>>2]|0)+36>>2]&127](a)|0;f[a+380>>2]=F;f[a+384>>2]=(f[l>>2]|0)+(f[Q>>2]|0);f[a+372>>2]=N;Zj(m);c:do if(Vb(V,m)|0){F=Xa(a,f[k>>2]|0)|0;if((F|0)==-1){aa=0;break}P=f[(f[r>>2]|0)+32>>2]|0;I=m+16|0;O=f[I>>2]|0;D=(f[m>>2]|0)+O|0;q=m+8|0;s=wl(f[q>>2]|0,f[q+4>>2]|0,O|0,f[I+4>>2]|0)|0;pk(P,D,s,d[P+38>>1]|0);P=f[r>>2]|0;s=(h[P+36>>0]<<8|h[P+37>>0])&65535;if((s&65535)<514){D=(f[P+32>>2]|0)+16|0;P=D;I=vl(f[P>>2]|0,f[P+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;P=D;f[P>>2]=I;f[P+4>>2]=H}do if((f[M>>2]|0)!=(f[g>>2]|0)){P=f[W>>2]|0;I=(f[P+4>>2]|0)!=(f[P>>2]|0);if((s&65535)<513){if(!I)break;P=0;do{f[n>>2]=P;f[e>>2]=f[n>>2];P=P+3|0;if(!(Zb(a,e)|0)){aa=0;break c}D=f[W>>2]|0}while(P>>>0<(f[D+4>>2]|0)-(f[D>>2]|0)>>2>>>0)}else{if(!I)break;P=0;do{f[o>>2]=P;f[e>>2]=f[o>>2];P=P+3|0;if(!(gc(a,e)|0)){aa=0;break c}D=f[W>>2]|0}while(P>>>0<(f[D+4>>2]|0)-(f[D>>2]|0)>>2>>>0)}}while(0);if(b[a+308>>0]|0)Cj(a+272|0);if((j[a+270>>1]|0)<514)Cj(a+328|0);s=f[g>>2]|0;if((f[M>>2]|0)!=(s|0)){P=0;I=s;do{gg(I+(P*144|0)+4|0,f[W>>2]|0)|0;s=f[g>>2]|0;D=f[s+(P*144|0)+132>>2]|0;O=f[s+(P*144|0)+136>>2]|0;if((D|0)==(O|0))ba=s;else{q=D;D=s;while(1){f[p>>2]=f[q>>2];f[e>>2]=f[p>>2];pf(D+(P*144|0)+4|0,e);q=q+4|0;s=f[g>>2]|0;if((q|0)==(O|0)){ba=s;break}else D=s}}jj(ba+(P*144|0)+4|0,0,0);P=P+1|0;I=f[g>>2]|0}while(P>>>0<(((f[M>>2]|0)-I|0)/144|0)>>>0)}I=f[W>>2]|0;P=(f[I+28>>2]|0)-(f[I+24>>2]|0)>>2;I=a+196|0;D=a+200|0;O=f[I>>2]|0;q=(f[D>>2]|0)-O>>2;do if(P>>>0>q>>>0)Eg(I,P-q|0);else{if(P>>>0>=q>>>0)break;f[D>>2]=O+(P<<2)}while(0);Wh(a+184|0,P);O=f[g>>2]|0;if((f[M>>2]|0)!=(O|0)){D=0;q=O;do{O=q;I=(f[O+(D*144|0)+60>>2]|0)-(f[O+(D*144|0)+56>>2]|0)>>2;s=f[W>>2]|0;t=(f[s+28>>2]|0)-(f[s+24>>2]|0)>>2;s=(I|0)<(t|0)?t:I;I=O+(D*144|0)+116|0;t=O+(D*144|0)+120|0;J=f[I>>2]|0;v=(f[t>>2]|0)-J>>2;do if(s>>>0>v>>>0)Eg(I,s-v|0);else{if(s>>>0>=v>>>0)break;f[t>>2]=J+(s<<2)}while(0);Wh(O+(D*144|0)+104|0,s);D=D+1|0;q=f[g>>2]|0}while(D>>>0<(((f[M>>2]|0)-q|0)/144|0)>>>0)}aa=Gb(a,F)|0}else aa=0;while(0);X=aa}else X=0}else X=0;while(0);U=X}else U=0;S=U;T=R;G=117}else{S=0;T=R;G=117}if((G|0)==117)L=S;K=L;u=c;return K|0}function ab(a){a=a|0;var c=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=u;u=u+80|0;e=c+68|0;g=c+64|0;i=c+60|0;k=c+52|0;l=c+44|0;m=c;n=c+56|0;o=c+48|0;p=c+40|0;q=a+132|0;f[q>>2]=0;r=a+148|0;if(f[r>>2]|0){s=a+144|0;t=f[s>>2]|0;if(t|0){v=t;do{t=v;v=f[v>>2]|0;Ko(t)}while((v|0)!=0)}f[s>>2]=0;s=f[a+140>>2]|0;if(s|0){v=a+136|0;t=0;do{f[(f[v>>2]|0)+(t<<2)>>2]=0;t=t+1|0}while((t|0)!=(s|0))}f[r>>2]=0}r=a+4|0;s=f[r>>2]|0;t=h[s+36>>0]<<8;v=(t|h[s+37>>0])&65535;do if((v&65535)<514){w=f[s+32>>2]|0;if((v&65535)<512){x=w+8|0;y=f[x>>2]|0;z=f[x+4>>2]|0;x=w+16|0;A=x;B=f[A>>2]|0;C=vl(B|0,f[A+4>>2]|0,4,0)|0;A=H;if(!((z|0)<(A|0)|(z|0)==(A|0)&y>>>0<C>>>0)){y=(f[w>>2]|0)+B|0;B=h[y>>0]|h[y+1>>0]<<8|h[y+2>>0]<<16|h[y+3>>0]<<24;f[e>>2]=B;y=x;f[y>>2]=C;f[y+4>>2]=A;D=s;E=t;F=B;G=15}}else if(zh(e,w)|0){w=f[r>>2]|0;D=w;E=h[w+36>>0]<<8;F=f[e>>2]|0;G=15}if((G|0)==15){f[q>>2]=F;I=E;J=D;break}K=0;u=c;return K|0}else{I=t;J=s}while(0);s=f[J+32>>2]|0;if((I&65535)<512){I=s+8|0;J=f[I>>2]|0;t=f[I+4>>2]|0;I=s+16|0;D=I;E=f[D>>2]|0;F=vl(E|0,f[D+4>>2]|0,4,0)|0;D=H;if((t|0)<(D|0)|(t|0)==(D|0)&J>>>0<F>>>0)L=0;else{J=(f[s>>2]|0)+E|0;E=h[J>>0]|h[J+1>>0]<<8|h[J+2>>0]<<16|h[J+3>>0]<<24;f[g>>2]=E;J=I;f[J>>2]=F;f[J+4>>2]=D;D=a+156|0;f[D>>2]=E;M=s;N=i;O=D;G=22}}else if(zh(g,s)|0){s=f[r>>2]|0;D=f[s+32>>2]|0;E=h[s+36>>0]<<8&65535;s=a+156|0;f[s>>2]=f[g>>2];if((E&65535)>=512)if(zh(i,D)|0){P=f[i>>2]|0;Q=s;R=i;G=26}else{S=0;T=i;G=117}else{M=D;N=i;O=s;G=22}}else L=0;if((G|0)==22){s=M+8|0;D=f[s>>2]|0;E=f[s+4>>2]|0;s=M+16|0;g=s;J=f[g>>2]|0;F=vl(J|0,f[g+4>>2]|0,4,0)|0;g=H;if((E|0)<(g|0)|(E|0)==(g|0)&D>>>0<F>>>0){S=0;T=N;G=117}else{D=(f[M>>2]|0)+J|0;J=h[D>>0]|h[D+1>>0]<<8|h[D+2>>0]<<16|h[D+3>>0]<<24;f[i>>2]=J;D=s;f[D>>2]=F;f[D+4>>2]=g;P=J;Q=O;R=N;G=26}}if((G|0)==26)if((P>>>0<=1431655765?(f[Q>>2]|0)>>>0<=(P*3|0)>>>0:0)?(N=f[r>>2]|0,O=f[N+32>>2]|0,J=O+8|0,g=f[J>>2]|0,D=f[J+4>>2]|0,J=O+16|0,F=J,s=f[F>>2]|0,M=f[F+4>>2]|0,(D|0)>(M|0)|(D|0)==(M|0)&g>>>0>s>>>0):0){F=f[O>>2]|0;E=b[F+s>>0]|0;I=vl(s|0,M|0,1,0)|0;t=J;f[t>>2]=I;f[t+4>>2]=H;if((h[N+36>>0]<<8&65535)<512){N=vl(s|0,M|0,5,0)|0;M=H;if((D|0)<(M|0)|(D|0)==(M|0)&g>>>0<N>>>0)U=0;else{g=F+I|0;I=h[g>>0]|h[g+1>>0]<<8|h[g+2>>0]<<16|h[g+3>>0]<<24;f[k>>2]=I;g=J;f[g>>2]=N;f[g+4>>2]=M;V=P;W=I;G=34}}else if(zh(k,O)|0){V=f[i>>2]|0;W=f[k>>2]|0;G=34}else U=0;if((G|0)==34)if(V>>>0>=W>>>0?V>>>0<=(((W>>>0)/3|0)+W|0)>>>0:0){V=f[r>>2]|0;O=f[V+32>>2]|0;if((h[V+36>>0]<<8&65535)<512){V=O+8|0;I=f[V>>2]|0;P=f[V+4>>2]|0;V=O+16|0;M=V;g=f[M>>2]|0;N=vl(g|0,f[M+4>>2]|0,4,0)|0;M=H;if((P|0)<(M|0)|(P|0)==(M|0)&I>>>0<N>>>0)X=0;else{I=(f[O>>2]|0)+g|0;g=h[I>>0]|h[I+1>>0]<<8|h[I+2>>0]<<16|h[I+3>>0]<<24;f[l>>2]=g;I=V;f[I>>2]=N;f[I+4>>2]=M;Y=g;Z=W;G=41}}else if(zh(l,O)|0){Y=f[l>>2]|0;Z=f[k>>2]|0;G=41}else X=0;a:do if((G|0)==41)if(Y>>>0<=Z>>>0){f[a+28>>2]=f[a+24>>2];O=wk(88)|0;Ej(O);W=a+8|0;g=f[W>>2]|0;f[W>>2]=O;if(g|0){O=f[g+76>>2]|0;if(O|0){f[g+80>>2]=O;Ko(O)}O=f[g+64>>2]|0;if(O|0){f[g+68>>2]=O;Ko(O)}O=f[g+48>>2]|0;if(O|0){f[g+52>>2]=O;Ko(O)}O=f[g+24>>2]|0;if(O|0){f[g+28>>2]=O;Ko(O)}O=f[g+12>>2]|0;if(O|0){f[g+16>>2]=O;Ko(O)}O=f[g>>2]|0;if(O|0){f[g+4>>2]=O;Ko(O)}Ko(g);if(!(f[W>>2]|0)){X=0;break}}g=a+160|0;f[a+164>>2]=f[g>>2];Wh(g,f[i>>2]|0);g=a+172|0;f[a+176>>2]=f[g>>2];Wh(g,f[i>>2]|0);f[a+40>>2]=f[a+36>>2];f[a+52>>2]=f[a+48>>2];f[a+64>>2]=0;f[a+76>>2]=f[a+72>>2];f[a+84>>2]=-1;f[a+92>>2]=-1;f[a+88>>2]=-1;g=a+216|0;O=f[g>>2]|0;M=a+220|0;I=f[M>>2]|0;if((I|0)!=(O|0)){N=I;do{I=f[N+-12>>2]|0;if(I|0){f[N+-8>>2]=I;Ko(I)}I=f[N+-28>>2]|0;if(I|0){f[N+-24>>2]=I;Ko(I)}I=f[N+-40>>2]|0;if(I|0){f[N+-36>>2]=I;Ko(I)}di(N+-140|0);N=N+-144|0}while((N|0)!=(O|0))}f[M>>2]=O;N=E&255;Zg(g,N);if(Hh(f[W>>2]|0,f[i>>2]|0,(f[l>>2]|0)+(f[Q>>2]|0)|0)|0){I=(f[l>>2]|0)+(f[Q>>2]|0)|0;b[e>>0]=1;Gf(a+120|0,I,e);I=f[r>>2]|0;V=(h[I+36>>0]<<8|h[I+37>>0])&65535;b:do if((V&65535)>=514)if((Nb(a,f[I+32>>2]|0)|0)==-1){X=0;break a}else _=-1;else{P=f[I+32>>2]|0;do if((V&65535)<512){J=P+8|0;F=f[J>>2]|0;D=f[J+4>>2]|0;J=P+16|0;s=J;t=f[s>>2]|0;q=vl(t|0,f[s+4>>2]|0,4,0)|0;s=H;if((D|0)<(s|0)|(D|0)==(s|0)&F>>>0<q>>>0)break;F=(f[P>>2]|0)+t|0;t=h[F>>0]|h[F+1>>0]<<8|h[F+2>>0]<<16|h[F+3>>0]<<24;f[e>>2]=t;F=J;f[F>>2]=q;f[F+4>>2]=s;$=t;G=72}else{if(!(zh(e,P)|0))break;$=f[e>>2]|0;G=72}while(0);do if((G|0)==72){if(!$)break;P=f[(f[r>>2]|0)+32>>2]|0;t=P+8|0;s=P+16|0;P=wl(f[t>>2]|0,f[t+4>>2]|0,f[s>>2]|0,f[s+4>>2]|0)|0;s=H;if((s|0)<0|(s|0)==0&P>>>0<$>>>0)break;Zj(m);P=f[(f[r>>2]|0)+32>>2]|0;s=P+16|0;t=f[s>>2]|0;F=f[e>>2]|0;q=(f[P>>2]|0)+t+F|0;J=P+8|0;D=wl(f[J>>2]|0,f[J+4>>2]|0,t|0,f[s+4>>2]|0)|0;pk(m,q,D-F|0,d[P+38>>1]|0);P=Nb(a,m)|0;if((P|0)==-1)break;_=P;break b}while(0);X=0;break a}while(0);V=a+232|0;f[a+376>>2]=a;I=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;O=f[I>>2]|0;I=(f[O>>2]|0)+(f[O+16>>2]|0)|0;O=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;P=f[O>>2]|0;O=P+8|0;F=P+16|0;P=wl(f[O>>2]|0,f[O+4>>2]|0,f[F>>2]|0,f[F+4>>2]|0)|0;F=(Ka[f[(f[a>>2]|0)+32>>2]&127](a)|0)+32|0;pk(V,I,P,d[(f[F>>2]|0)+38>>1]|0);f[a+372>>2]=N;Zj(m);c:do if(Dd(V,m)|0){F=Ya(a,f[k>>2]|0)|0;if((F|0)==-1){aa=0;break}P=f[(f[r>>2]|0)+32>>2]|0;I=m+16|0;O=f[I>>2]|0;D=(f[m>>2]|0)+O|0;q=m+8|0;s=wl(f[q>>2]|0,f[q+4>>2]|0,O|0,f[I+4>>2]|0)|0;pk(P,D,s,d[P+38>>1]|0);P=f[r>>2]|0;s=(h[P+36>>0]<<8|h[P+37>>0])&65535;if((s&65535)<514){D=(f[P+32>>2]|0)+16|0;P=D;I=vl(f[P>>2]|0,f[P+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;P=D;f[P>>2]=I;f[P+4>>2]=H}do if((f[M>>2]|0)!=(f[g>>2]|0)){P=f[W>>2]|0;I=(f[P+4>>2]|0)!=(f[P>>2]|0);if((s&65535)<513){if(!I)break;P=0;do{f[n>>2]=P;f[e>>2]=f[n>>2];P=P+3|0;if(!(Zb(a,e)|0)){aa=0;break c}D=f[W>>2]|0}while(P>>>0<(f[D+4>>2]|0)-(f[D>>2]|0)>>2>>>0)}else{if(!I)break;P=0;do{f[o>>2]=P;f[e>>2]=f[o>>2];P=P+3|0;if(!(gc(a,e)|0)){aa=0;break c}D=f[W>>2]|0}while(P>>>0<(f[D+4>>2]|0)-(f[D>>2]|0)>>2>>>0)}}while(0);if(b[a+308>>0]|0)Cj(a+272|0);if((j[a+270>>1]|0)<514)Cj(a+328|0);s=f[g>>2]|0;if((f[M>>2]|0)!=(s|0)){P=0;I=s;do{gg(I+(P*144|0)+4|0,f[W>>2]|0)|0;s=f[g>>2]|0;D=f[s+(P*144|0)+132>>2]|0;O=f[s+(P*144|0)+136>>2]|0;if((D|0)==(O|0))ba=s;else{q=D;D=s;while(1){f[p>>2]=f[q>>2];f[e>>2]=f[p>>2];pf(D+(P*144|0)+4|0,e);q=q+4|0;s=f[g>>2]|0;if((q|0)==(O|0)){ba=s;break}else D=s}}jj(ba+(P*144|0)+4|0,0,0);P=P+1|0;I=f[g>>2]|0}while(P>>>0<(((f[M>>2]|0)-I|0)/144|0)>>>0)}I=f[W>>2]|0;P=(f[I+28>>2]|0)-(f[I+24>>2]|0)>>2;I=a+196|0;D=a+200|0;O=f[I>>2]|0;q=(f[D>>2]|0)-O>>2;do if(P>>>0>q>>>0)Eg(I,P-q|0);else{if(P>>>0>=q>>>0)break;f[D>>2]=O+(P<<2)}while(0);Wh(a+184|0,P);O=f[g>>2]|0;if((f[M>>2]|0)!=(O|0)){D=0;q=O;do{O=q;I=(f[O+(D*144|0)+60>>2]|0)-(f[O+(D*144|0)+56>>2]|0)>>2;s=f[W>>2]|0;t=(f[s+28>>2]|0)-(f[s+24>>2]|0)>>2;s=(I|0)<(t|0)?t:I;I=O+(D*144|0)+116|0;t=O+(D*144|0)+120|0;J=f[I>>2]|0;v=(f[t>>2]|0)-J>>2;do if(s>>>0>v>>>0)Eg(I,s-v|0);else{if(s>>>0>=v>>>0)break;f[t>>2]=J+(s<<2)}while(0);Wh(O+(D*144|0)+104|0,s);D=D+1|0;q=f[g>>2]|0}while(D>>>0<(((f[M>>2]|0)-q|0)/144|0)>>>0)}aa=Gb(a,F)|0}else aa=0;while(0);X=aa}else X=0}else X=0;while(0);U=X}else U=0;S=U;T=R;G=117}else{S=0;T=R;G=117}if((G|0)==117)L=S;K=L;u=c;return K|0}function bb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;e=u;u=u+32|0;g=e;h=a+12|0;i=f[h>>2]|0;f[g>>2]=0;j=g+4|0;f[j>>2]=0;k=g+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(g);else{l=i<<2;m=wk(l)|0;f[g>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+120|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[g>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[g>>2]=0;k=g+4|0;f[k>>2]=0;q=g+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(g);else{t=v<<2;r=wk(t)|0;f[g>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+132|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[g>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=c;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=d+16|0;r=d+20|0;A=d+28|0;w=a+8|0;s=d+12|0;x=a+108|0;t=a+4|0;n=a+96|0;j=a+52|0;i=a+48|0;l=a+40|0;o=a+32|0;p=a+28|0;E=a+20|0;F=a+92|0;G=a+80|0;H=a+88|0;I=C;while(1){J=f[B>>2]|0;K=I+-1|0;L=J+K|0;M=f[y>>2]|0;N=(L>>>0)/341|0;O=f[M+(N<<2)>>2]|0;P=L-(N*341|0)|0;N=f[O+(P*12|0)>>2]|0;L=f[O+(P*12|0)+4>>2]|0;Q=f[O+(P*12|0)+8>>2]|0;f[z>>2]=K;K=f[q>>2]|0;P=K-M|0;if((1-I-J+((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[K+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}K=f[m>>2]|0;P=K+(Q*12|0)|0;J=(f[v>>2]|0)+(Q*12|0)|0;if(N>>>0>c>>>0){D=0;break a}M=Pk(a,N,J,L)|0;if(M>>>0>=(f[h>>2]|0)>>>0){D=0;break a}L=(f[a>>2]|0)-(f[(f[J>>2]|0)+(M<<2)>>2]|0)|0;b:do if(!L)if(!N)R=19;else{O=0;while(1){S=f[k>>2]|0;c:do if((f[r>>2]|0)!=(S|0)){T=0;U=S;do{V=U;X=f[V+(T*20|0)>>2]|0;Y=V+(T*20|0)+12|0;_=V+(T*20|0)+16|0;$=(f[P>>2]|0)+(f[V+(T*20|0)+4>>2]<<2)|0;V=f[Y>>2]|0;if((V|0)==4)aa=$;else{if(f[_>>2]|0){ba=f[s>>2]|0;ca=0;da=V;while(1){Bf(ba|0,$+(ca<<2)|0,da|0)|0;ca=ca+1|0;V=f[Y>>2]|0;if(ca>>>0>=(f[_>>2]|0)>>>0)break;else{ba=ba+V|0;da=V}}}aa=f[s>>2]|0}da=f[A>>2]|0;if(!(b[X+84>>0]|0))ea=f[(f[X+68>>2]|0)+(da<<2)>>2]|0;else ea=da;if(ea>>>0>=(f[X+80>>2]|0)>>>0)break c;da=f[X+40>>2]|0;Bf((f[f[X+64>>2]>>2]|0)+(W(ea,da)|0)|0,aa|0,da|0)|0;T=T+1|0;U=f[k>>2]|0}while(T>>>0<(((f[r>>2]|0)-U|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;O=O+1|0;if((O|0)==(N|0)){R=19;break}}}else{if(N>>>0>=3){if((f[w>>2]|0)>>>0>(f[t>>2]|0)>>>0){D=0;break a}O=Q+1|0;S=f[m>>2]|0;U=S+(O*12|0)|0;if((U|0)==(P|0))fa=S;else{Df(U,f[P>>2]|0,f[K+(Q*12|0)+4>>2]|0);fa=f[m>>2]|0}U=(f[fa+(O*12|0)>>2]|0)+(M<<2)|0;f[U>>2]=(f[U>>2]|0)+(1<<L+-1);U=(Z(N|0)|0)^31;S=f[o>>2]|0;T=32-S|0;do if((U|0)>(T|0)){da=f[p>>2]|0;ba=da+4|0;if((ba|0)==(f[E>>2]|0))ga=0;else{_=f[da>>2]<<S;da=U-T|0;f[o>>2]=da;f[p>>2]=ba;ca=32-da|0;ga=(f[ba>>2]|0)>>>ca|_>>>(ca-T|0)}}else{ca=f[p>>2]|0;if((ca|0)==(f[E>>2]|0))ga=0;else{_=f[ca>>2]<<S>>>(32-U|0);ba=S+U|0;f[o>>2]=ba;if((ba|0)!=32){ga=_;break}f[p>>2]=ca+4;f[o>>2]=0;ga=_}}while(0);U=(N>>>1)-ga|0;S=N-U|0;d:do if((U|0)==(S|0)){ha=U;ia=U}else{T=f[F>>2]|0;_=f[H>>2]|0;do if((_|0)!=(f[G>>2]|0)){ca=(f[_>>2]&1<<31-T|0)!=0;ba=T+1|0;f[F>>2]=ba;if((ba|0)==32){f[H>>2]=_+4;f[F>>2]=0;if(ca){ha=U;ia=S;break d}else break}else if(ca){ha=U;ia=S;break d}else break}while(0);ha=S;ia=U}while(0);U=f[v>>2]|0;S=f[U+(Q*12|0)>>2]|0;_=S+(M<<2)|0;f[_>>2]=(f[_>>2]|0)+1;Df(U+(O*12|0)|0,S,f[U+(Q*12|0)+4>>2]|0);if(ha|0){U=f[q>>2]|0;S=f[y>>2]|0;_=U-S|0;T=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((_|0)==0?0:((_>>2)*341|0)+-1|0)|0)==(T|0)){cc(g);ja=(f[B>>2]|0)+(f[z>>2]|0)|0;ka=f[q>>2]|0;la=f[y>>2]|0}else{ja=T;ka=U;la=S}if((ka|0)==(la|0))ma=0;else{S=(ja>>>0)/341|0;ma=(f[la+(S<<2)>>2]|0)+((ja-(S*341|0)|0)*12|0)|0}f[ma>>2]=ha;f[ma+4>>2]=M;f[ma+8>>2]=Q;f[z>>2]=(f[z>>2]|0)+1}if(!ia){R=19;break}S=f[q>>2]|0;U=f[y>>2]|0;T=S-U|0;_=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((T|0)==0?0:((T>>2)*341|0)+-1|0)|0)==(_|0)){cc(g);na=(f[B>>2]|0)+(f[z>>2]|0)|0;oa=f[q>>2]|0;pa=f[y>>2]|0}else{na=_;oa=S;pa=U}if((oa|0)==(pa|0))qa=0;else{U=(na>>>0)/341|0;qa=(f[pa+(U<<2)>>2]|0)+((na-(U*341|0)|0)*12|0)|0}f[qa>>2]=ia;f[qa+4>>2]=M;f[qa+8>>2]=O;U=(f[z>>2]|0)+1|0;f[z>>2]=U;ra=U;break}U=f[x>>2]|0;f[U>>2]=M;S=f[h>>2]|0;if(S>>>0>1){_=1;T=S;ca=M;while(1){ca=(ca|0)==(T+-1|0)?0:ca+1|0;f[U+(_<<2)>>2]=ca;_=_+1|0;ba=f[h>>2]|0;if(_>>>0>=ba>>>0){sa=ba;break}else T=ba}}else sa=S;if(!N)R=19;else{T=0;_=sa;while(1){if(_|0){ca=f[x>>2]|0;U=f[n>>2]|0;O=f[J>>2]|0;ba=0;do{da=ca+(ba<<2)|0;f[U+(f[da>>2]<<2)>>2]=0;Y=f[da>>2]|0;$=(f[a>>2]|0)-(f[O+(Y<<2)>>2]|0)|0;do if($|0){V=U+(Y<<2)|0;ta=f[j>>2]|0;ua=32-ta|0;if(($|0)>(ua|0)){va=f[i>>2]|0;wa=va+4|0;if((wa|0)==(f[l>>2]|0)){f[V>>2]=0;break}else{xa=f[va>>2]<<ta;va=$-ua|0;f[j>>2]=va;f[i>>2]=wa;ya=32-va|0;f[V>>2]=(f[wa>>2]|0)>>>ya|xa>>>(ya-ua|0);break}}ua=f[i>>2]|0;if((ua|0)==(f[l>>2]|0)){f[V>>2]=0;break}f[V>>2]=f[ua>>2]<<ta>>>(32-$|0);ta=(f[j>>2]|0)+$|0;f[j>>2]=ta;if((ta|0)!=32)break;f[i>>2]=ua+4;f[j>>2]=0}while(0);$=f[da>>2]|0;Y=U+($<<2)|0;f[Y>>2]=f[Y>>2]|f[(f[P>>2]|0)+($<<2)>>2];ba=ba+1|0}while(ba>>>0<(f[h>>2]|0)>>>0)}ba=f[k>>2]|0;e:do if((f[r>>2]|0)!=(ba|0)){U=0;O=ba;do{ca=O;$=f[ca+(U*20|0)>>2]|0;Y=ca+(U*20|0)+12|0;ua=ca+(U*20|0)+16|0;ta=(f[n>>2]|0)+(f[ca+(U*20|0)+4>>2]<<2)|0;ca=f[Y>>2]|0;if((ca|0)==4)za=ta;else{if(f[ua>>2]|0){V=f[s>>2]|0;ya=0;xa=ca;while(1){Bf(V|0,ta+(ya<<2)|0,xa|0)|0;ya=ya+1|0;ca=f[Y>>2]|0;if(ya>>>0>=(f[ua>>2]|0)>>>0)break;else{V=V+ca|0;xa=ca}}}za=f[s>>2]|0}xa=f[A>>2]|0;if(!(b[$+84>>0]|0))Aa=f[(f[$+68>>2]|0)+(xa<<2)>>2]|0;else Aa=xa;if(Aa>>>0>=(f[$+80>>2]|0)>>>0)break e;xa=f[$+40>>2]|0;Bf((f[f[$+64>>2]>>2]|0)+(W(Aa,xa)|0)|0,za|0,xa|0)|0;U=U+1|0;O=f[k>>2]|0}while(U>>>0<(((f[r>>2]|0)-O|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;ba=T+1|0;if((ba|0)==(N|0)){R=19;break b}T=ba;_=f[h>>2]|0}}}while(0);if((R|0)==19){R=0;ra=f[z>>2]|0}if(!ra){D=1;break}else I=ra}}while(0);ra=f[y>>2]|0;h=f[B>>2]|0;za=(h>>>0)/341|0;Aa=ra+(za<<2)|0;a=f[q>>2]|0;sa=a;qa=ra;if((a|0)!=(ra|0)?(ia=(f[Aa>>2]|0)+((h-(za*341|0)|0)*12|0)|0,za=(f[z>>2]|0)+h|0,h=(za>>>0)/341|0,na=(f[ra+(h<<2)>>2]|0)+((za-(h*341|0)|0)*12|0)|0,(na|0)!=(ia|0)):0){h=Aa;Aa=ia;while(1){ia=Aa+12|0;if((ia-(f[h>>2]|0)|0)==4092){za=h+4|0;Ba=za;Ca=f[za>>2]|0}else{Ba=h;Ca=ia}Aa=Ca;if((na|0)==(Aa|0))break;else h=Ba}}f[z>>2]=0;z=sa-qa>>2;if(z>>>0>2){qa=ra;do{Ko(f[qa>>2]|0);qa=(f[y>>2]|0)+4|0;f[y>>2]=qa;Da=f[q>>2]|0;Ea=Da-qa>>2}while(Ea>>>0>2);Fa=Ea;Ga=qa;Ha=Da}else{Fa=z;Ga=ra;Ha=a}switch(Fa|0){case 1:{Ia=170;R=110;break}case 2:{Ia=341;R=110;break}default:{}}if((R|0)==110)f[B>>2]=Ia;if((Ga|0)!=(Ha|0)){Ia=Ga;do{Ko(f[Ia>>2]|0);Ia=Ia+4|0}while((Ia|0)!=(Ha|0));Ha=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ha|0))f[q>>2]=y+(~((y+-4-Ha|0)>>>2)<<2)}Ha=f[g>>2]|0;if(!Ha){u=e;return D|0}Ko(Ha);u=e;return D|0}function cb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;e=u;u=u+32|0;g=e;h=a+12|0;i=f[h>>2]|0;f[g>>2]=0;j=g+4|0;f[j>>2]=0;k=g+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(g);else{l=i<<2;m=wk(l)|0;f[g>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+120|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[g>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[g>>2]=0;k=g+4|0;f[k>>2]=0;q=g+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(g);else{t=v<<2;r=wk(t)|0;f[g>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+132|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[g>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=c;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=d+16|0;r=d+20|0;A=d+28|0;w=a+8|0;s=d+12|0;x=a+108|0;t=a+4|0;n=a+96|0;j=a+52|0;i=a+48|0;l=a+40|0;o=a+32|0;p=a+28|0;E=a+20|0;F=a+92|0;G=a+80|0;H=a+88|0;I=C;while(1){J=f[B>>2]|0;K=I+-1|0;L=J+K|0;M=f[y>>2]|0;N=(L>>>0)/341|0;O=f[M+(N<<2)>>2]|0;P=L-(N*341|0)|0;N=f[O+(P*12|0)>>2]|0;L=f[O+(P*12|0)+4>>2]|0;Q=f[O+(P*12|0)+8>>2]|0;f[z>>2]=K;K=f[q>>2]|0;P=K-M|0;if((1-I-J+((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[K+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}K=f[m>>2]|0;P=K+(Q*12|0)|0;if(N>>>0>c>>>0){D=0;break a}J=f[h>>2]|0;M=(J+-1|0)==(L|0)?0:L+1|0;if(M>>>0>=J>>>0){D=0;break a}J=(f[v>>2]|0)+(Q*12|0)|0;L=(f[a>>2]|0)-(f[(f[J>>2]|0)+(M<<2)>>2]|0)|0;b:do if(!L)if(!N)R=19;else{O=0;while(1){S=f[k>>2]|0;c:do if((f[r>>2]|0)!=(S|0)){T=0;U=S;do{V=U;X=f[V+(T*20|0)>>2]|0;Y=V+(T*20|0)+12|0;_=V+(T*20|0)+16|0;$=(f[P>>2]|0)+(f[V+(T*20|0)+4>>2]<<2)|0;V=f[Y>>2]|0;if((V|0)==4)aa=$;else{if(f[_>>2]|0){ba=f[s>>2]|0;ca=0;da=V;while(1){Bf(ba|0,$+(ca<<2)|0,da|0)|0;ca=ca+1|0;V=f[Y>>2]|0;if(ca>>>0>=(f[_>>2]|0)>>>0)break;else{ba=ba+V|0;da=V}}}aa=f[s>>2]|0}da=f[A>>2]|0;if(!(b[X+84>>0]|0))ea=f[(f[X+68>>2]|0)+(da<<2)>>2]|0;else ea=da;if(ea>>>0>=(f[X+80>>2]|0)>>>0)break c;da=f[X+40>>2]|0;Bf((f[f[X+64>>2]>>2]|0)+(W(ea,da)|0)|0,aa|0,da|0)|0;T=T+1|0;U=f[k>>2]|0}while(T>>>0<(((f[r>>2]|0)-U|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;O=O+1|0;if((O|0)==(N|0)){R=19;break}}}else{if(N>>>0>=3){if((f[w>>2]|0)>>>0>(f[t>>2]|0)>>>0){D=0;break a}O=Q+1|0;Df(K+(O*12|0)|0,f[P>>2]|0,f[K+(Q*12|0)+4>>2]|0);S=(f[(f[m>>2]|0)+(O*12|0)>>2]|0)+(M<<2)|0;f[S>>2]=(f[S>>2]|0)+(1<<L+-1);S=(Z(N|0)|0)^31;U=f[o>>2]|0;T=32-U|0;if((S|0)>(T|0)){da=f[p>>2]|0;ba=da+4|0;if((ba|0)==(f[E>>2]|0))fa=0;else{_=f[da>>2]<<U;da=S-T|0;f[o>>2]=da;f[p>>2]=ba;ca=32-da|0;fa=(f[ba>>2]|0)>>>ca|_>>>(ca-T|0)}}else{T=f[p>>2]|0;if((T|0)!=(f[E>>2]|0)){ca=f[T>>2]<<U>>>(32-S|0);_=U+S|0;f[o>>2]=_;if((_|0)==32){f[p>>2]=T+4;f[o>>2]=0;fa=ca}else fa=ca}else fa=0}ca=(N>>>1)-fa|0;T=N-ca|0;d:do if((ca|0)==(T|0)){ga=ca;ha=ca}else{_=f[F>>2]|0;S=f[H>>2]|0;do if((S|0)!=(f[G>>2]|0)){U=(f[S>>2]&1<<31-_|0)!=0;ba=_+1|0;f[F>>2]=ba;if((ba|0)==32){f[H>>2]=S+4;f[F>>2]=0;if(U){ga=ca;ha=T;break d}else break}else if(U){ga=ca;ha=T;break d}else break}while(0);ga=T;ha=ca}while(0);ca=f[v>>2]|0;T=f[ca+(Q*12|0)>>2]|0;S=T+(M<<2)|0;f[S>>2]=(f[S>>2]|0)+1;Df(ca+(O*12|0)|0,T,f[ca+(Q*12|0)+4>>2]|0);if(ga|0){ca=f[q>>2]|0;T=f[y>>2]|0;S=ca-T|0;_=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((S|0)==0?0:((S>>2)*341|0)+-1|0)|0)==(_|0)){cc(g);ia=(f[B>>2]|0)+(f[z>>2]|0)|0;ja=f[q>>2]|0;ka=f[y>>2]|0}else{ia=_;ja=ca;ka=T}if((ja|0)==(ka|0))la=0;else{T=(ia>>>0)/341|0;la=(f[ka+(T<<2)>>2]|0)+((ia-(T*341|0)|0)*12|0)|0}f[la>>2]=ga;f[la+4>>2]=M;f[la+8>>2]=Q;f[z>>2]=(f[z>>2]|0)+1}if(!ha){R=19;break}T=f[q>>2]|0;ca=f[y>>2]|0;_=T-ca|0;S=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((_|0)==0?0:((_>>2)*341|0)+-1|0)|0)==(S|0)){cc(g);ma=(f[B>>2]|0)+(f[z>>2]|0)|0;na=f[q>>2]|0;oa=f[y>>2]|0}else{ma=S;na=T;oa=ca}if((na|0)==(oa|0))pa=0;else{ca=(ma>>>0)/341|0;pa=(f[oa+(ca<<2)>>2]|0)+((ma-(ca*341|0)|0)*12|0)|0}f[pa>>2]=ha;f[pa+4>>2]=M;f[pa+8>>2]=O;ca=(f[z>>2]|0)+1|0;f[z>>2]=ca;qa=ca;break}ca=f[x>>2]|0;f[ca>>2]=M;T=f[h>>2]|0;if(T>>>0>1){S=1;_=T;U=M;while(1){U=(U|0)==(_+-1|0)?0:U+1|0;f[ca+(S<<2)>>2]=U;S=S+1|0;ba=f[h>>2]|0;if(S>>>0>=ba>>>0){ra=ba;break}else _=ba}}else ra=T;if(!N)R=19;else{_=0;S=ra;while(1){if(S|0){U=f[x>>2]|0;ca=f[n>>2]|0;O=f[J>>2]|0;ba=0;do{da=U+(ba<<2)|0;f[ca+(f[da>>2]<<2)>>2]=0;Y=f[da>>2]|0;$=(f[a>>2]|0)-(f[O+(Y<<2)>>2]|0)|0;do if($|0){V=ca+(Y<<2)|0;sa=f[j>>2]|0;ta=32-sa|0;if(($|0)>(ta|0)){ua=f[i>>2]|0;va=ua+4|0;if((va|0)==(f[l>>2]|0)){f[V>>2]=0;break}else{wa=f[ua>>2]<<sa;ua=$-ta|0;f[j>>2]=ua;f[i>>2]=va;xa=32-ua|0;f[V>>2]=(f[va>>2]|0)>>>xa|wa>>>(xa-ta|0);break}}ta=f[i>>2]|0;if((ta|0)==(f[l>>2]|0)){f[V>>2]=0;break}f[V>>2]=f[ta>>2]<<sa>>>(32-$|0);sa=(f[j>>2]|0)+$|0;f[j>>2]=sa;if((sa|0)!=32)break;f[i>>2]=ta+4;f[j>>2]=0}while(0);$=f[da>>2]|0;Y=ca+($<<2)|0;f[Y>>2]=f[Y>>2]|f[(f[P>>2]|0)+($<<2)>>2];ba=ba+1|0}while(ba>>>0<(f[h>>2]|0)>>>0)}ba=f[k>>2]|0;e:do if((f[r>>2]|0)!=(ba|0)){ca=0;O=ba;do{U=O;$=f[U+(ca*20|0)>>2]|0;Y=U+(ca*20|0)+12|0;ta=U+(ca*20|0)+16|0;sa=(f[n>>2]|0)+(f[U+(ca*20|0)+4>>2]<<2)|0;U=f[Y>>2]|0;if((U|0)==4)ya=sa;else{if(f[ta>>2]|0){V=f[s>>2]|0;xa=0;wa=U;while(1){Bf(V|0,sa+(xa<<2)|0,wa|0)|0;xa=xa+1|0;U=f[Y>>2]|0;if(xa>>>0>=(f[ta>>2]|0)>>>0)break;else{V=V+U|0;wa=U}}}ya=f[s>>2]|0}wa=f[A>>2]|0;if(!(b[$+84>>0]|0))za=f[(f[$+68>>2]|0)+(wa<<2)>>2]|0;else za=wa;if(za>>>0>=(f[$+80>>2]|0)>>>0)break e;wa=f[$+40>>2]|0;Bf((f[f[$+64>>2]>>2]|0)+(W(za,wa)|0)|0,ya|0,wa|0)|0;ca=ca+1|0;O=f[k>>2]|0}while(ca>>>0<(((f[r>>2]|0)-O|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;ba=_+1|0;if((ba|0)==(N|0)){R=19;break b}_=ba;S=f[h>>2]|0}}}while(0);if((R|0)==19){R=0;qa=f[z>>2]|0}if(!qa){D=1;break}else I=qa}}while(0);qa=f[y>>2]|0;h=f[B>>2]|0;ya=(h>>>0)/341|0;za=qa+(ya<<2)|0;a=f[q>>2]|0;ra=a;pa=qa;if((a|0)!=(qa|0)?(ha=(f[za>>2]|0)+((h-(ya*341|0)|0)*12|0)|0,ya=(f[z>>2]|0)+h|0,h=(ya>>>0)/341|0,ma=(f[qa+(h<<2)>>2]|0)+((ya-(h*341|0)|0)*12|0)|0,(ma|0)!=(ha|0)):0){h=za;za=ha;while(1){ha=za+12|0;if((ha-(f[h>>2]|0)|0)==4092){ya=h+4|0;Aa=ya;Ba=f[ya>>2]|0}else{Aa=h;Ba=ha}za=Ba;if((ma|0)==(za|0))break;else h=Aa}}f[z>>2]=0;z=ra-pa>>2;if(z>>>0>2){pa=qa;do{Ko(f[pa>>2]|0);pa=(f[y>>2]|0)+4|0;f[y>>2]=pa;Ca=f[q>>2]|0;Da=Ca-pa>>2}while(Da>>>0>2);Ea=Da;Fa=pa;Ga=Ca}else{Ea=z;Fa=qa;Ga=a}switch(Ea|0){case 1:{Ha=170;R=108;break}case 2:{Ha=341;R=108;break}default:{}}if((R|0)==108)f[B>>2]=Ha;if((Fa|0)!=(Ga|0)){Ha=Fa;do{Ko(f[Ha>>2]|0);Ha=Ha+4|0}while((Ha|0)!=(Ga|0));Ga=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ga|0))f[q>>2]=y+(~((y+-4-Ga|0)>>>2)<<2)}Ga=f[g>>2]|0;if(!Ga){u=e;return D|0}Ko(Ga);u=e;return D|0}function db(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;e=u;u=u+32|0;g=e;h=a+12|0;i=f[h>>2]|0;f[g>>2]=0;j=g+4|0;f[j>>2]=0;k=g+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(g);else{l=i<<2;m=wk(l)|0;f[g>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[g>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[g>>2]=0;k=g+4|0;f[k>>2]=0;q=g+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(g);else{t=v<<2;r=wk(t)|0;f[g>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[g>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=c;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=d+16|0;r=d+20|0;A=d+28|0;w=a+8|0;s=d+12|0;x=a+616|0;t=a+4|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;G=(f[v>>2]|0)+(N*12|0)|0;if(K>>>0>c>>>0){D=0;break a}J=tg(a,K,G,I)|0;if(J>>>0>=(f[h>>2]|0)>>>0){D=0;break a}I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;while(1){P=f[k>>2]|0;c:do if((f[r>>2]|0)!=(P|0)){Q=0;R=P;do{S=R;T=f[S+(Q*20|0)>>2]|0;U=S+(Q*20|0)+12|0;V=S+(Q*20|0)+16|0;X=(f[M>>2]|0)+(f[S+(Q*20|0)+4>>2]<<2)|0;S=f[U>>2]|0;if((S|0)==4)Y=X;else{if(f[V>>2]|0){_=f[s>>2]|0;$=0;aa=S;while(1){Bf(_|0,X+($<<2)|0,aa|0)|0;$=$+1|0;S=f[U>>2]|0;if($>>>0>=(f[V>>2]|0)>>>0)break;else{_=_+S|0;aa=S}}}Y=f[s>>2]|0}aa=f[A>>2]|0;if(!(b[T+84>>0]|0))ba=f[(f[T+68>>2]|0)+(aa<<2)>>2]|0;else ba=aa;if(ba>>>0>=(f[T+80>>2]|0)>>>0)break c;aa=f[T+40>>2]|0;Bf((f[f[T+64>>2]>>2]|0)+(W(ba,aa)|0)|0,Y|0,aa|0)|0;Q=Q+1|0;R=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-R|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;L=L+1|0;if((L|0)==(K|0)){O=19;break}}}else{if(K>>>0>=3){if((f[w>>2]|0)>>>0>(f[t>>2]|0)>>>0){D=0;break a}L=N+1|0;P=f[m>>2]|0;R=P+(L*12|0)|0;if((R|0)==(M|0))ca=P;else{Df(R,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);ca=f[m>>2]|0}R=(f[ca+(L*12|0)>>2]|0)+(J<<2)|0;f[R>>2]=(f[R>>2]|0)+(1<<I+-1);R=(Z(K|0)|0)^31;if(!R)da=0;else{P=0;Q=0;while(1){aa=Q<<1|(pi(a+16+(P<<4)|0)|0)&1;P=P+1|0;if((P|0)==(R|0)){da=aa;break}else Q=aa}}Q=(K>>>1)-da|0;R=K-Q|0;d:do if((Q|0)==(R|0)){ea=Q;fa=Q}else{P=f[o>>2]|0;aa=f[E>>2]|0;do if((aa|0)!=(f[p>>2]|0)){_=(f[aa>>2]&1<<31-P|0)!=0;V=P+1|0;f[o>>2]=V;if((V|0)==32){f[E>>2]=aa+4;f[o>>2]=0;if(_){ea=Q;fa=R;break d}else break}else if(_){ea=Q;fa=R;break d}else break}while(0);ea=R;fa=Q}while(0);Q=f[v>>2]|0;R=f[Q+(N*12|0)>>2]|0;aa=R+(J<<2)|0;f[aa>>2]=(f[aa>>2]|0)+1;Df(Q+(L*12|0)|0,R,f[Q+(N*12|0)+4>>2]|0);if(ea|0){Q=f[q>>2]|0;R=f[y>>2]|0;aa=Q-R|0;P=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((aa|0)==0?0:((aa>>2)*341|0)+-1|0)|0)==(P|0)){cc(g);ga=(f[B>>2]|0)+(f[z>>2]|0)|0;ha=f[q>>2]|0;ia=f[y>>2]|0}else{ga=P;ha=Q;ia=R}if((ha|0)==(ia|0))ja=0;else{R=(ga>>>0)/341|0;ja=(f[ia+(R<<2)>>2]|0)+((ga-(R*341|0)|0)*12|0)|0}f[ja>>2]=ea;f[ja+4>>2]=J;f[ja+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!fa){O=19;break}R=f[q>>2]|0;Q=f[y>>2]|0;P=R-Q|0;aa=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)==(aa|0)){cc(g);ka=(f[B>>2]|0)+(f[z>>2]|0)|0;la=f[q>>2]|0;ma=f[y>>2]|0}else{ka=aa;la=R;ma=Q}if((la|0)==(ma|0))na=0;else{Q=(ka>>>0)/341|0;na=(f[ma+(Q<<2)>>2]|0)+((ka-(Q*341|0)|0)*12|0)|0}f[na>>2]=fa;f[na+4>>2]=J;f[na+8>>2]=L;Q=(f[z>>2]|0)+1|0;f[z>>2]=Q;oa=Q;break}Q=f[x>>2]|0;f[Q>>2]=J;R=f[h>>2]|0;if(R>>>0>1){aa=1;P=R;_=J;while(1){_=(_|0)==(P+-1|0)?0:_+1|0;f[Q+(aa<<2)>>2]=_;aa=aa+1|0;V=f[h>>2]|0;if(aa>>>0>=V>>>0){pa=V;break}else P=V}}else pa=R;if(!K)O=19;else{P=0;aa=pa;while(1){if(aa|0){_=f[x>>2]|0;Q=f[n>>2]|0;L=f[G>>2]|0;V=0;do{$=_+(V<<2)|0;f[Q+(f[$>>2]<<2)>>2]=0;U=f[$>>2]|0;X=(f[a>>2]|0)-(f[L+(U<<2)>>2]|0)|0;do if(X|0){S=Q+(U<<2)|0;qa=f[j>>2]|0;ra=32-qa|0;if((X|0)>(ra|0)){sa=f[i>>2]|0;ta=sa+4|0;if((ta|0)==(f[l>>2]|0)){f[S>>2]=0;break}else{ua=f[sa>>2]<<qa;sa=X-ra|0;f[j>>2]=sa;f[i>>2]=ta;va=32-sa|0;f[S>>2]=(f[ta>>2]|0)>>>va|ua>>>(va-ra|0);break}}ra=f[i>>2]|0;if((ra|0)==(f[l>>2]|0)){f[S>>2]=0;break}f[S>>2]=f[ra>>2]<<qa>>>(32-X|0);qa=(f[j>>2]|0)+X|0;f[j>>2]=qa;if((qa|0)!=32)break;f[i>>2]=ra+4;f[j>>2]=0}while(0);X=f[$>>2]|0;U=Q+(X<<2)|0;f[U>>2]=f[U>>2]|f[(f[M>>2]|0)+(X<<2)>>2];V=V+1|0}while(V>>>0<(f[h>>2]|0)>>>0)}V=f[k>>2]|0;e:do if((f[r>>2]|0)!=(V|0)){Q=0;L=V;do{_=L;X=f[_+(Q*20|0)>>2]|0;U=_+(Q*20|0)+12|0;ra=_+(Q*20|0)+16|0;qa=(f[n>>2]|0)+(f[_+(Q*20|0)+4>>2]<<2)|0;_=f[U>>2]|0;if((_|0)==4)wa=qa;else{if(f[ra>>2]|0){S=f[s>>2]|0;va=0;ua=_;while(1){Bf(S|0,qa+(va<<2)|0,ua|0)|0;va=va+1|0;_=f[U>>2]|0;if(va>>>0>=(f[ra>>2]|0)>>>0)break;else{S=S+_|0;ua=_}}}wa=f[s>>2]|0}ua=f[A>>2]|0;if(!(b[X+84>>0]|0))xa=f[(f[X+68>>2]|0)+(ua<<2)>>2]|0;else xa=ua;if(xa>>>0>=(f[X+80>>2]|0)>>>0)break e;ua=f[X+40>>2]|0;Bf((f[f[X+64>>2]>>2]|0)+(W(xa,ua)|0)|0,wa|0,ua|0)|0;Q=Q+1|0;L=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-L|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;V=P+1|0;if((V|0)==(K|0)){O=19;break b}P=V;aa=f[h>>2]|0}}}while(0);if((O|0)==19){O=0;oa=f[z>>2]|0}if(!oa){D=1;break}else F=oa}}while(0);oa=f[y>>2]|0;h=f[B>>2]|0;wa=(h>>>0)/341|0;xa=oa+(wa<<2)|0;a=f[q>>2]|0;pa=a;na=oa;if((a|0)!=(oa|0)?(fa=(f[xa>>2]|0)+((h-(wa*341|0)|0)*12|0)|0,wa=(f[z>>2]|0)+h|0,h=(wa>>>0)/341|0,ka=(f[oa+(h<<2)>>2]|0)+((wa-(h*341|0)|0)*12|0)|0,(ka|0)!=(fa|0)):0){h=xa;xa=fa;while(1){fa=xa+12|0;if((fa-(f[h>>2]|0)|0)==4092){wa=h+4|0;ya=wa;za=f[wa>>2]|0}else{ya=h;za=fa}xa=za;if((ka|0)==(xa|0))break;else h=ya}}f[z>>2]=0;z=pa-na>>2;if(z>>>0>2){na=oa;do{Ko(f[na>>2]|0);na=(f[y>>2]|0)+4|0;f[y>>2]=na;Aa=f[q>>2]|0;Ba=Aa-na>>2}while(Ba>>>0>2);Ca=Ba;Da=na;Ea=Aa}else{Ca=z;Da=oa;Ea=a}switch(Ca|0){case 1:{Fa=170;O=107;break}case 2:{Fa=341;O=107;break}default:{}}if((O|0)==107)f[B>>2]=Fa;if((Da|0)!=(Ea|0)){Fa=Da;do{Ko(f[Fa>>2]|0);Fa=Fa+4|0}while((Fa|0)!=(Ea|0));Ea=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ea|0))f[q>>2]=y+(~((y+-4-Ea|0)>>>2)<<2)}Ea=f[g>>2]|0;if(!Ea){u=e;return D|0}Ko(Ea);u=e;return D|0}function eb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;e=u;u=u+32|0;g=e;h=a+12|0;i=f[h>>2]|0;f[g>>2]=0;j=g+4|0;f[j>>2]=0;k=g+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(g);else{l=i<<2;m=wk(l)|0;f[g>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[g>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[g>>2]=0;k=g+4|0;f[k>>2]=0;q=g+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(g);else{t=v<<2;r=wk(t)|0;f[g>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[g>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=c;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=d+16|0;r=d+20|0;A=d+28|0;w=a+8|0;s=d+12|0;x=a+616|0;t=a+4|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;G=(f[v>>2]|0)+(N*12|0)|0;if(K>>>0>c>>>0){D=0;break a}J=Pk(a,K,G,I)|0;if(J>>>0>=(f[h>>2]|0)>>>0){D=0;break a}I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;while(1){P=f[k>>2]|0;c:do if((f[r>>2]|0)!=(P|0)){Q=0;R=P;do{S=R;T=f[S+(Q*20|0)>>2]|0;U=S+(Q*20|0)+12|0;V=S+(Q*20|0)+16|0;X=(f[M>>2]|0)+(f[S+(Q*20|0)+4>>2]<<2)|0;S=f[U>>2]|0;if((S|0)==4)Y=X;else{if(f[V>>2]|0){_=f[s>>2]|0;$=0;aa=S;while(1){Bf(_|0,X+($<<2)|0,aa|0)|0;$=$+1|0;S=f[U>>2]|0;if($>>>0>=(f[V>>2]|0)>>>0)break;else{_=_+S|0;aa=S}}}Y=f[s>>2]|0}aa=f[A>>2]|0;if(!(b[T+84>>0]|0))ba=f[(f[T+68>>2]|0)+(aa<<2)>>2]|0;else ba=aa;if(ba>>>0>=(f[T+80>>2]|0)>>>0)break c;aa=f[T+40>>2]|0;Bf((f[f[T+64>>2]>>2]|0)+(W(ba,aa)|0)|0,Y|0,aa|0)|0;Q=Q+1|0;R=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-R|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;L=L+1|0;if((L|0)==(K|0)){O=19;break}}}else{if(K>>>0>=3){if((f[w>>2]|0)>>>0>(f[t>>2]|0)>>>0){D=0;break a}L=N+1|0;P=f[m>>2]|0;R=P+(L*12|0)|0;if((R|0)==(M|0))ca=P;else{Df(R,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);ca=f[m>>2]|0}R=(f[ca+(L*12|0)>>2]|0)+(J<<2)|0;f[R>>2]=(f[R>>2]|0)+(1<<I+-1);R=(Z(K|0)|0)^31;if(!R)da=0;else{P=0;Q=0;while(1){aa=Q<<1|(pi(a+16+(P<<4)|0)|0)&1;P=P+1|0;if((P|0)==(R|0)){da=aa;break}else Q=aa}}Q=(K>>>1)-da|0;R=K-Q|0;d:do if((Q|0)==(R|0)){ea=Q;fa=Q}else{P=f[o>>2]|0;aa=f[E>>2]|0;do if((aa|0)!=(f[p>>2]|0)){_=(f[aa>>2]&1<<31-P|0)!=0;V=P+1|0;f[o>>2]=V;if((V|0)==32){f[E>>2]=aa+4;f[o>>2]=0;if(_){ea=Q;fa=R;break d}else break}else if(_){ea=Q;fa=R;break d}else break}while(0);ea=R;fa=Q}while(0);Q=f[v>>2]|0;R=f[Q+(N*12|0)>>2]|0;aa=R+(J<<2)|0;f[aa>>2]=(f[aa>>2]|0)+1;Df(Q+(L*12|0)|0,R,f[Q+(N*12|0)+4>>2]|0);if(ea|0){Q=f[q>>2]|0;R=f[y>>2]|0;aa=Q-R|0;P=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((aa|0)==0?0:((aa>>2)*341|0)+-1|0)|0)==(P|0)){cc(g);ga=(f[B>>2]|0)+(f[z>>2]|0)|0;ha=f[q>>2]|0;ia=f[y>>2]|0}else{ga=P;ha=Q;ia=R}if((ha|0)==(ia|0))ja=0;else{R=(ga>>>0)/341|0;ja=(f[ia+(R<<2)>>2]|0)+((ga-(R*341|0)|0)*12|0)|0}f[ja>>2]=ea;f[ja+4>>2]=J;f[ja+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!fa){O=19;break}R=f[q>>2]|0;Q=f[y>>2]|0;P=R-Q|0;aa=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)==(aa|0)){cc(g);ka=(f[B>>2]|0)+(f[z>>2]|0)|0;la=f[q>>2]|0;ma=f[y>>2]|0}else{ka=aa;la=R;ma=Q}if((la|0)==(ma|0))na=0;else{Q=(ka>>>0)/341|0;na=(f[ma+(Q<<2)>>2]|0)+((ka-(Q*341|0)|0)*12|0)|0}f[na>>2]=fa;f[na+4>>2]=J;f[na+8>>2]=L;Q=(f[z>>2]|0)+1|0;f[z>>2]=Q;oa=Q;break}Q=f[x>>2]|0;f[Q>>2]=J;R=f[h>>2]|0;if(R>>>0>1){aa=1;P=R;_=J;while(1){_=(_|0)==(P+-1|0)?0:_+1|0;f[Q+(aa<<2)>>2]=_;aa=aa+1|0;V=f[h>>2]|0;if(aa>>>0>=V>>>0){pa=V;break}else P=V}}else pa=R;if(!K)O=19;else{P=0;aa=pa;while(1){if(aa|0){_=f[x>>2]|0;Q=f[n>>2]|0;L=f[G>>2]|0;V=0;do{$=_+(V<<2)|0;f[Q+(f[$>>2]<<2)>>2]=0;U=f[$>>2]|0;X=(f[a>>2]|0)-(f[L+(U<<2)>>2]|0)|0;do if(X|0){S=Q+(U<<2)|0;qa=f[j>>2]|0;ra=32-qa|0;if((X|0)>(ra|0)){sa=f[i>>2]|0;ta=sa+4|0;if((ta|0)==(f[l>>2]|0)){f[S>>2]=0;break}else{ua=f[sa>>2]<<qa;sa=X-ra|0;f[j>>2]=sa;f[i>>2]=ta;va=32-sa|0;f[S>>2]=(f[ta>>2]|0)>>>va|ua>>>(va-ra|0);break}}ra=f[i>>2]|0;if((ra|0)==(f[l>>2]|0)){f[S>>2]=0;break}f[S>>2]=f[ra>>2]<<qa>>>(32-X|0);qa=(f[j>>2]|0)+X|0;f[j>>2]=qa;if((qa|0)!=32)break;f[i>>2]=ra+4;f[j>>2]=0}while(0);X=f[$>>2]|0;U=Q+(X<<2)|0;f[U>>2]=f[U>>2]|f[(f[M>>2]|0)+(X<<2)>>2];V=V+1|0}while(V>>>0<(f[h>>2]|0)>>>0)}V=f[k>>2]|0;e:do if((f[r>>2]|0)!=(V|0)){Q=0;L=V;do{_=L;X=f[_+(Q*20|0)>>2]|0;U=_+(Q*20|0)+12|0;ra=_+(Q*20|0)+16|0;qa=(f[n>>2]|0)+(f[_+(Q*20|0)+4>>2]<<2)|0;_=f[U>>2]|0;if((_|0)==4)wa=qa;else{if(f[ra>>2]|0){S=f[s>>2]|0;va=0;ua=_;while(1){Bf(S|0,qa+(va<<2)|0,ua|0)|0;va=va+1|0;_=f[U>>2]|0;if(va>>>0>=(f[ra>>2]|0)>>>0)break;else{S=S+_|0;ua=_}}}wa=f[s>>2]|0}ua=f[A>>2]|0;if(!(b[X+84>>0]|0))xa=f[(f[X+68>>2]|0)+(ua<<2)>>2]|0;else xa=ua;if(xa>>>0>=(f[X+80>>2]|0)>>>0)break e;ua=f[X+40>>2]|0;Bf((f[f[X+64>>2]>>2]|0)+(W(xa,ua)|0)|0,wa|0,ua|0)|0;Q=Q+1|0;L=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-L|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;V=P+1|0;if((V|0)==(K|0)){O=19;break b}P=V;aa=f[h>>2]|0}}}while(0);if((O|0)==19){O=0;oa=f[z>>2]|0}if(!oa){D=1;break}else F=oa}}while(0);oa=f[y>>2]|0;h=f[B>>2]|0;wa=(h>>>0)/341|0;xa=oa+(wa<<2)|0;a=f[q>>2]|0;pa=a;na=oa;if((a|0)!=(oa|0)?(fa=(f[xa>>2]|0)+((h-(wa*341|0)|0)*12|0)|0,wa=(f[z>>2]|0)+h|0,h=(wa>>>0)/341|0,ka=(f[oa+(h<<2)>>2]|0)+((wa-(h*341|0)|0)*12|0)|0,(ka|0)!=(fa|0)):0){h=xa;xa=fa;while(1){fa=xa+12|0;if((fa-(f[h>>2]|0)|0)==4092){wa=h+4|0;ya=wa;za=f[wa>>2]|0}else{ya=h;za=fa}xa=za;if((ka|0)==(xa|0))break;else h=ya}}f[z>>2]=0;z=pa-na>>2;if(z>>>0>2){na=oa;do{Ko(f[na>>2]|0);na=(f[y>>2]|0)+4|0;f[y>>2]=na;Aa=f[q>>2]|0;Ba=Aa-na>>2}while(Ba>>>0>2);Ca=Ba;Da=na;Ea=Aa}else{Ca=z;Da=oa;Ea=a}switch(Ca|0){case 1:{Fa=170;O=107;break}case 2:{Fa=341;O=107;break}default:{}}if((O|0)==107)f[B>>2]=Fa;if((Da|0)!=(Ea|0)){Fa=Da;do{Ko(f[Fa>>2]|0);Fa=Fa+4|0}while((Fa|0)!=(Ea|0));Ea=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ea|0))f[q>>2]=y+(~((y+-4-Ea|0)>>>2)<<2)}Ea=f[g>>2]|0;if(!Ea){u=e;return D|0}Ko(Ea);u=e;return D|0}function fb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;e=u;u=u+32|0;g=e;h=a+12|0;i=f[h>>2]|0;f[g>>2]=0;j=g+4|0;f[j>>2]=0;k=g+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(g);else{l=i<<2;m=wk(l)|0;f[g>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[g>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[g>>2]=0;k=g+4|0;f[k>>2]=0;q=g+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(g);else{t=v<<2;r=wk(t)|0;f[g>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[g>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=c;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=d+16|0;r=d+20|0;A=d+28|0;w=a+8|0;s=d+12|0;x=a+616|0;t=a+4|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;if(K>>>0>c>>>0){D=0;break a}G=f[h>>2]|0;J=(G+-1|0)==(I|0)?0:I+1|0;if(J>>>0>=G>>>0){D=0;break a}G=(f[v>>2]|0)+(N*12|0)|0;I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;while(1){P=f[k>>2]|0;c:do if((f[r>>2]|0)!=(P|0)){Q=0;R=P;do{S=R;T=f[S+(Q*20|0)>>2]|0;U=S+(Q*20|0)+12|0;V=S+(Q*20|0)+16|0;X=(f[M>>2]|0)+(f[S+(Q*20|0)+4>>2]<<2)|0;S=f[U>>2]|0;if((S|0)==4)Y=X;else{if(f[V>>2]|0){_=f[s>>2]|0;$=0;aa=S;while(1){Bf(_|0,X+($<<2)|0,aa|0)|0;$=$+1|0;S=f[U>>2]|0;if($>>>0>=(f[V>>2]|0)>>>0)break;else{_=_+S|0;aa=S}}}Y=f[s>>2]|0}aa=f[A>>2]|0;if(!(b[T+84>>0]|0))ba=f[(f[T+68>>2]|0)+(aa<<2)>>2]|0;else ba=aa;if(ba>>>0>=(f[T+80>>2]|0)>>>0)break c;aa=f[T+40>>2]|0;Bf((f[f[T+64>>2]>>2]|0)+(W(ba,aa)|0)|0,Y|0,aa|0)|0;Q=Q+1|0;R=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-R|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;L=L+1|0;if((L|0)==(K|0)){O=19;break}}}else{if(K>>>0>=3){if((f[w>>2]|0)>>>0>(f[t>>2]|0)>>>0){D=0;break a}L=N+1|0;Df(H+(L*12|0)|0,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);P=(f[(f[m>>2]|0)+(L*12|0)>>2]|0)+(J<<2)|0;f[P>>2]=(f[P>>2]|0)+(1<<I+-1);P=(Z(K|0)|0)^31;if(!P)ca=0;else{R=0;Q=0;while(1){aa=Q<<1|(pi(a+16+(R<<4)|0)|0)&1;R=R+1|0;if((R|0)==(P|0)){ca=aa;break}else Q=aa}}Q=(K>>>1)-ca|0;P=K-Q|0;d:do if((Q|0)==(P|0)){da=Q;ea=Q}else{R=f[o>>2]|0;aa=f[E>>2]|0;do if((aa|0)!=(f[p>>2]|0)){_=(f[aa>>2]&1<<31-R|0)!=0;V=R+1|0;f[o>>2]=V;if((V|0)==32){f[E>>2]=aa+4;f[o>>2]=0;if(_){da=Q;ea=P;break d}else break}else if(_){da=Q;ea=P;break d}else break}while(0);da=P;ea=Q}while(0);Q=f[v>>2]|0;P=f[Q+(N*12|0)>>2]|0;aa=P+(J<<2)|0;f[aa>>2]=(f[aa>>2]|0)+1;Df(Q+(L*12|0)|0,P,f[Q+(N*12|0)+4>>2]|0);if(da|0){Q=f[q>>2]|0;P=f[y>>2]|0;aa=Q-P|0;R=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((aa|0)==0?0:((aa>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);fa=(f[B>>2]|0)+(f[z>>2]|0)|0;ga=f[q>>2]|0;ha=f[y>>2]|0}else{fa=R;ga=Q;ha=P}if((ga|0)==(ha|0))ia=0;else{P=(fa>>>0)/341|0;ia=(f[ha+(P<<2)>>2]|0)+((fa-(P*341|0)|0)*12|0)|0}f[ia>>2]=da;f[ia+4>>2]=J;f[ia+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!ea){O=19;break}P=f[q>>2]|0;Q=f[y>>2]|0;R=P-Q|0;aa=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(aa|0)){cc(g);ja=(f[B>>2]|0)+(f[z>>2]|0)|0;ka=f[q>>2]|0;la=f[y>>2]|0}else{ja=aa;ka=P;la=Q}if((ka|0)==(la|0))ma=0;else{Q=(ja>>>0)/341|0;ma=(f[la+(Q<<2)>>2]|0)+((ja-(Q*341|0)|0)*12|0)|0}f[ma>>2]=ea;f[ma+4>>2]=J;f[ma+8>>2]=L;Q=(f[z>>2]|0)+1|0;f[z>>2]=Q;na=Q;break}Q=f[x>>2]|0;f[Q>>2]=J;P=f[h>>2]|0;if(P>>>0>1){aa=1;R=P;_=J;while(1){_=(_|0)==(R+-1|0)?0:_+1|0;f[Q+(aa<<2)>>2]=_;aa=aa+1|0;V=f[h>>2]|0;if(aa>>>0>=V>>>0){oa=V;break}else R=V}}else oa=P;if(!K)O=19;else{R=0;aa=oa;while(1){if(aa|0){_=f[x>>2]|0;Q=f[n>>2]|0;L=f[G>>2]|0;V=0;do{$=_+(V<<2)|0;f[Q+(f[$>>2]<<2)>>2]=0;U=f[$>>2]|0;X=(f[a>>2]|0)-(f[L+(U<<2)>>2]|0)|0;do if(X|0){S=Q+(U<<2)|0;pa=f[j>>2]|0;qa=32-pa|0;if((X|0)>(qa|0)){ra=f[i>>2]|0;sa=ra+4|0;if((sa|0)==(f[l>>2]|0)){f[S>>2]=0;break}else{ta=f[ra>>2]<<pa;ra=X-qa|0;f[j>>2]=ra;f[i>>2]=sa;ua=32-ra|0;f[S>>2]=(f[sa>>2]|0)>>>ua|ta>>>(ua-qa|0);break}}qa=f[i>>2]|0;if((qa|0)==(f[l>>2]|0)){f[S>>2]=0;break}f[S>>2]=f[qa>>2]<<pa>>>(32-X|0);pa=(f[j>>2]|0)+X|0;f[j>>2]=pa;if((pa|0)!=32)break;f[i>>2]=qa+4;f[j>>2]=0}while(0);X=f[$>>2]|0;U=Q+(X<<2)|0;f[U>>2]=f[U>>2]|f[(f[M>>2]|0)+(X<<2)>>2];V=V+1|0}while(V>>>0<(f[h>>2]|0)>>>0)}V=f[k>>2]|0;e:do if((f[r>>2]|0)!=(V|0)){Q=0;L=V;do{_=L;X=f[_+(Q*20|0)>>2]|0;U=_+(Q*20|0)+12|0;qa=_+(Q*20|0)+16|0;pa=(f[n>>2]|0)+(f[_+(Q*20|0)+4>>2]<<2)|0;_=f[U>>2]|0;if((_|0)==4)va=pa;else{if(f[qa>>2]|0){S=f[s>>2]|0;ua=0;ta=_;while(1){Bf(S|0,pa+(ua<<2)|0,ta|0)|0;ua=ua+1|0;_=f[U>>2]|0;if(ua>>>0>=(f[qa>>2]|0)>>>0)break;else{S=S+_|0;ta=_}}}va=f[s>>2]|0}ta=f[A>>2]|0;if(!(b[X+84>>0]|0))wa=f[(f[X+68>>2]|0)+(ta<<2)>>2]|0;else wa=ta;if(wa>>>0>=(f[X+80>>2]|0)>>>0)break e;ta=f[X+40>>2]|0;Bf((f[f[X+64>>2]>>2]|0)+(W(wa,ta)|0)|0,va|0,ta|0)|0;Q=Q+1|0;L=f[k>>2]|0}while(Q>>>0<(((f[r>>2]|0)-L|0)/20|0)>>>0)}while(0);f[A>>2]=(f[A>>2]|0)+1;f[w>>2]=(f[w>>2]|0)+1;V=R+1|0;if((V|0)==(K|0)){O=19;break b}R=V;aa=f[h>>2]|0}}}while(0);if((O|0)==19){O=0;na=f[z>>2]|0}if(!na){D=1;break}else F=na}}while(0);na=f[y>>2]|0;h=f[B>>2]|0;va=(h>>>0)/341|0;wa=na+(va<<2)|0;a=f[q>>2]|0;oa=a;ma=na;if((a|0)!=(na|0)?(ea=(f[wa>>2]|0)+((h-(va*341|0)|0)*12|0)|0,va=(f[z>>2]|0)+h|0,h=(va>>>0)/341|0,ja=(f[na+(h<<2)>>2]|0)+((va-(h*341|0)|0)*12|0)|0,(ja|0)!=(ea|0)):0){h=wa;wa=ea;while(1){ea=wa+12|0;if((ea-(f[h>>2]|0)|0)==4092){va=h+4|0;xa=va;ya=f[va>>2]|0}else{xa=h;ya=ea}wa=ya;if((ja|0)==(wa|0))break;else h=xa}}f[z>>2]=0;z=oa-ma>>2;if(z>>>0>2){ma=na;do{Ko(f[ma>>2]|0);ma=(f[y>>2]|0)+4|0;f[y>>2]=ma;za=f[q>>2]|0;Aa=za-ma>>2}while(Aa>>>0>2);Ba=Aa;Ca=ma;Da=za}else{Ba=z;Ca=na;Da=a}switch(Ba|0){case 1:{Ea=170;O=105;break}case 2:{Ea=341;O=105;break}default:{}}if((O|0)==105)f[B>>2]=Ea;if((Ca|0)!=(Da|0)){Ea=Ca;do{Ko(f[Ea>>2]|0);Ea=Ea+4|0}while((Ea|0)!=(Da|0));Da=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Da|0))f[q>>2]=y+(~((y+-4-Da|0)>>>2)<<2)}Da=f[g>>2]|0;if(!Da){u=e;return D|0}Ko(Da);u=e;return D|0}function gb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;e=u;u=u+32|0;g=e+8|0;h=e;i=a+12|0;j=f[i>>2]|0;f[g>>2]=0;k=g+4|0;f[k>>2]=0;l=g+8|0;f[l>>2]=0;do if(j)if(j>>>0>1073741823)$n(g);else{m=j<<2;n=wk(m)|0;f[g>>2]=n;o=n+(j<<2)|0;f[l>>2]=o;oh(n|0,0,m|0)|0;f[k>>2]=o;p=o;q=n;break}else{p=0;q=0}while(0);n=a+116|0;o=f[n>>2]|0;m=f[o>>2]|0;if(!m){r=o+8|0;s=o+4|0;t=q;v=p;w=j}else{j=o+4|0;f[j>>2]=m;Ko(m);m=o+8|0;f[m>>2]=0;f[j>>2]=0;f[o>>2]=0;r=m;s=j;t=f[g>>2]|0;v=f[k>>2]|0;w=f[i>>2]|0}f[o>>2]=t;f[s>>2]=v;f[r>>2]=f[l>>2];f[g>>2]=0;l=g+4|0;f[l>>2]=0;r=g+8|0;f[r>>2]=0;do if(w)if(w>>>0>1073741823)$n(g);else{v=w<<2;s=wk(v)|0;f[g>>2]=s;t=s+(w<<2)|0;f[r>>2]=t;oh(s|0,0,v|0)|0;f[l>>2]=t;x=t;y=s;break}else{x=0;y=0}while(0);w=a+128|0;s=f[w>>2]|0;t=f[s>>2]|0;if(!t){z=s+8|0;A=s+4|0;B=y;C=x}else{x=s+4|0;f[x>>2]=t;Ko(t);t=s+8|0;f[t>>2]=0;f[x>>2]=0;f[s>>2]=0;z=t;A=x;B=f[g>>2]|0;C=f[l>>2]|0}f[s>>2]=B;f[A>>2]=C;f[z>>2]=f[r>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;r=g+8|0;z=g+4|0;C=g+16|0;A=g+20|0;cc(g);B=f[z>>2]|0;s=(f[C>>2]|0)+(f[A>>2]|0)|0;if((f[r>>2]|0)==(B|0))D=0;else{l=(s>>>0)/341|0;D=(f[B+(l<<2)>>2]|0)+((s-(l*341|0)|0)*12|0)|0}f[D>>2]=c;f[D+4>>2]=0;f[D+8>>2]=0;D=(f[A>>2]|0)+1|0;f[A>>2]=D;a:do if(!D)E=1;else{l=d+16|0;s=d+20|0;B=d+28|0;x=a+8|0;t=d+12|0;y=a+104|0;v=a+4|0;o=a+92|0;k=a+48|0;j=a+44|0;m=a+36|0;p=a+16|0;q=a+88|0;F=a+76|0;G=a+84|0;H=D;while(1){I=f[C>>2]|0;J=H+-1|0;K=I+J|0;L=f[z>>2]|0;M=(K>>>0)/341|0;N=f[L+(M<<2)>>2]|0;O=K-(M*341|0)|0;M=f[N+(O*12|0)>>2]|0;K=f[N+(O*12|0)+4>>2]|0;P=f[N+(O*12|0)+8>>2]|0;f[A>>2]=J;J=f[r>>2]|0;O=J-L|0;if((1-H-I+((O|0)==0?0:((O>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[J+-4>>2]|0);f[r>>2]=(f[r>>2]|0)+-4}J=f[n>>2]|0;O=J+(P*12|0)|0;I=(f[w>>2]|0)+(P*12|0)|0;if(M>>>0>c>>>0){E=0;break a}L=Pk(a,M,I,K)|0;if(L>>>0>=(f[i>>2]|0)>>>0){E=0;break a}K=(f[a>>2]|0)-(f[(f[I>>2]|0)+(L<<2)>>2]|0)|0;b:do if(!K){if(M|0){N=0;do{Q=f[l>>2]|0;c:do if((f[s>>2]|0)!=(Q|0)){R=0;S=Q;do{T=S;U=f[T+(R*20|0)>>2]|0;V=T+(R*20|0)+12|0;X=T+(R*20|0)+16|0;Y=(f[O>>2]|0)+(f[T+(R*20|0)+4>>2]<<2)|0;T=f[V>>2]|0;if((T|0)==4)_=Y;else{if(f[X>>2]|0){$=f[t>>2]|0;aa=0;ba=T;while(1){Bf($|0,Y+(aa<<2)|0,ba|0)|0;aa=aa+1|0;T=f[V>>2]|0;if(aa>>>0>=(f[X>>2]|0)>>>0)break;else{$=$+T|0;ba=T}}}_=f[t>>2]|0}ba=f[B>>2]|0;if(!(b[U+84>>0]|0))ca=f[(f[U+68>>2]|0)+(ba<<2)>>2]|0;else ca=ba;if(ca>>>0>=(f[U+80>>2]|0)>>>0)break c;ba=f[U+40>>2]|0;Bf((f[f[U+64>>2]>>2]|0)+(W(ca,ba)|0)|0,_|0,ba|0)|0;R=R+1|0;S=f[l>>2]|0}while(R>>>0<(((f[s>>2]|0)-S|0)/20|0)>>>0)}while(0);f[B>>2]=(f[B>>2]|0)+1;f[x>>2]=(f[x>>2]|0)+1;N=N+1|0}while((N|0)!=(M|0))}}else{if(M>>>0>=3){if((f[x>>2]|0)>>>0>(f[v>>2]|0)>>>0){E=0;break a}N=P+1|0;Q=f[n>>2]|0;S=Q+(N*12|0)|0;if((S|0)==(O|0))da=Q;else{Df(S,f[O>>2]|0,f[J+(P*12|0)+4>>2]|0);da=f[n>>2]|0}S=(f[da+(N*12|0)>>2]|0)+(L<<2)|0;f[S>>2]=(f[S>>2]|0)+(1<<K+-1);S=(Z(M|0)|0)^31;f[h>>2]=0;ph(p,S,h);S=(M>>>1)-(f[h>>2]|0)|0;Q=M-S|0;d:do if((S|0)==(Q|0)){ea=S;fa=S}else{R=f[q>>2]|0;ba=f[G>>2]|0;do if((ba|0)!=(f[F>>2]|0)){$=(f[ba>>2]&1<<31-R|0)!=0;X=R+1|0;f[q>>2]=X;if((X|0)==32){f[G>>2]=ba+4;f[q>>2]=0;if($){ea=S;fa=Q;break d}else break}else if($){ea=S;fa=Q;break d}else break}while(0);ea=Q;fa=S}while(0);S=f[w>>2]|0;Q=f[S+(P*12|0)>>2]|0;ba=Q+(L<<2)|0;f[ba>>2]=(f[ba>>2]|0)+1;Df(S+(N*12|0)|0,Q,f[S+(P*12|0)+4>>2]|0);if(ea|0){S=f[r>>2]|0;Q=f[z>>2]|0;ba=S-Q|0;R=(f[A>>2]|0)+(f[C>>2]|0)|0;if((((ba|0)==0?0:((ba>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);ga=(f[C>>2]|0)+(f[A>>2]|0)|0;ha=f[r>>2]|0;ia=f[z>>2]|0}else{ga=R;ha=S;ia=Q}if((ha|0)==(ia|0))ja=0;else{Q=(ga>>>0)/341|0;ja=(f[ia+(Q<<2)>>2]|0)+((ga-(Q*341|0)|0)*12|0)|0}f[ja>>2]=ea;f[ja+4>>2]=L;f[ja+8>>2]=P;f[A>>2]=(f[A>>2]|0)+1}if(fa|0){Q=f[r>>2]|0;S=f[z>>2]|0;R=Q-S|0;ba=(f[A>>2]|0)+(f[C>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(ba|0)){cc(g);ka=(f[C>>2]|0)+(f[A>>2]|0)|0;la=f[r>>2]|0;ma=f[z>>2]|0}else{ka=ba;la=Q;ma=S}if((la|0)==(ma|0))na=0;else{S=(ka>>>0)/341|0;na=(f[ma+(S<<2)>>2]|0)+((ka-(S*341|0)|0)*12|0)|0}f[na>>2]=fa;f[na+4>>2]=L;f[na+8>>2]=N;f[A>>2]=(f[A>>2]|0)+1}break}S=f[y>>2]|0;f[S>>2]=L;Q=f[i>>2]|0;if(Q>>>0>1){ba=1;R=Q;$=L;while(1){$=($|0)==(R+-1|0)?0:$+1|0;f[S+(ba<<2)>>2]=$;ba=ba+1|0;X=f[i>>2]|0;if(ba>>>0>=X>>>0){oa=X;break}else R=X}}else oa=Q;if(M|0){R=0;ba=oa;while(1){if(ba|0){$=f[y>>2]|0;S=f[o>>2]|0;N=f[I>>2]|0;X=0;do{aa=$+(X<<2)|0;f[S+(f[aa>>2]<<2)>>2]=0;V=f[aa>>2]|0;Y=(f[a>>2]|0)-(f[N+(V<<2)>>2]|0)|0;do if(Y|0){T=S+(V<<2)|0;pa=f[k>>2]|0;qa=32-pa|0;if((Y|0)>(qa|0)){ra=f[j>>2]|0;sa=ra+4|0;if((sa|0)==(f[m>>2]|0)){f[T>>2]=0;break}else{ta=f[ra>>2]<<pa;ra=Y-qa|0;f[k>>2]=ra;f[j>>2]=sa;ua=32-ra|0;f[T>>2]=(f[sa>>2]|0)>>>ua|ta>>>(ua-qa|0);break}}qa=f[j>>2]|0;if((qa|0)==(f[m>>2]|0)){f[T>>2]=0;break}f[T>>2]=f[qa>>2]<<pa>>>(32-Y|0);pa=(f[k>>2]|0)+Y|0;f[k>>2]=pa;if((pa|0)!=32)break;f[j>>2]=qa+4;f[k>>2]=0}while(0);Y=f[aa>>2]|0;V=S+(Y<<2)|0;f[V>>2]=f[V>>2]|f[(f[O>>2]|0)+(Y<<2)>>2];X=X+1|0}while(X>>>0<(f[i>>2]|0)>>>0)}X=f[l>>2]|0;e:do if((f[s>>2]|0)!=(X|0)){S=0;N=X;do{$=N;Y=f[$+(S*20|0)>>2]|0;V=$+(S*20|0)+12|0;qa=$+(S*20|0)+16|0;pa=(f[o>>2]|0)+(f[$+(S*20|0)+4>>2]<<2)|0;$=f[V>>2]|0;if(($|0)==4)va=pa;else{if(f[qa>>2]|0){T=f[t>>2]|0;ua=0;ta=$;while(1){Bf(T|0,pa+(ua<<2)|0,ta|0)|0;ua=ua+1|0;$=f[V>>2]|0;if(ua>>>0>=(f[qa>>2]|0)>>>0)break;else{T=T+$|0;ta=$}}}va=f[t>>2]|0}ta=f[B>>2]|0;if(!(b[Y+84>>0]|0))wa=f[(f[Y+68>>2]|0)+(ta<<2)>>2]|0;else wa=ta;if(wa>>>0>=(f[Y+80>>2]|0)>>>0)break e;ta=f[Y+40>>2]|0;Bf((f[f[Y+64>>2]>>2]|0)+(W(wa,ta)|0)|0,va|0,ta|0)|0;S=S+1|0;N=f[l>>2]|0}while(S>>>0<(((f[s>>2]|0)-N|0)/20|0)>>>0)}while(0);f[B>>2]=(f[B>>2]|0)+1;f[x>>2]=(f[x>>2]|0)+1;X=R+1|0;if((X|0)==(M|0))break b;R=X;ba=f[i>>2]|0}}}while(0);H=f[A>>2]|0;if(!H){E=1;break}}}while(0);i=f[z>>2]|0;va=f[C>>2]|0;wa=(va>>>0)/341|0;a=i+(wa<<2)|0;oa=f[r>>2]|0;na=oa;fa=i;if((oa|0)!=(i|0)?(ka=(f[a>>2]|0)+((va-(wa*341|0)|0)*12|0)|0,wa=(f[A>>2]|0)+va|0,va=(wa>>>0)/341|0,ma=(f[i+(va<<2)>>2]|0)+((wa-(va*341|0)|0)*12|0)|0,(ma|0)!=(ka|0)):0){va=a;a=ka;while(1){ka=a+12|0;if((ka-(f[va>>2]|0)|0)==4092){wa=va+4|0;xa=wa;ya=f[wa>>2]|0}else{xa=va;ya=ka}a=ya;if((ma|0)==(a|0))break;else va=xa}}f[A>>2]=0;A=na-fa>>2;if(A>>>0>2){fa=i;do{Ko(f[fa>>2]|0);fa=(f[z>>2]|0)+4|0;f[z>>2]=fa;za=f[r>>2]|0;Aa=za-fa>>2}while(Aa>>>0>2);Ba=Aa;Ca=fa;Da=za}else{Ba=A;Ca=i;Da=oa}switch(Ba|0){case 1:{Ea=170;Fa=104;break}case 2:{Ea=341;Fa=104;break}default:{}}if((Fa|0)==104)f[C>>2]=Ea;if((Ca|0)!=(Da|0)){Ea=Ca;do{Ko(f[Ea>>2]|0);Ea=Ea+4|0}while((Ea|0)!=(Da|0));Da=f[z>>2]|0;z=f[r>>2]|0;if((z|0)!=(Da|0))f[r>>2]=z+(~((z+-4-Da|0)>>>2)<<2)}Da=f[g>>2]|0;if(!Da){u=e;return E|0}Ko(Da);u=e;return E|0}function hb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;e=u;u=u+32|0;g=e+8|0;h=e;i=a+12|0;j=f[i>>2]|0;f[g>>2]=0;k=g+4|0;f[k>>2]=0;l=g+8|0;f[l>>2]=0;do if(j)if(j>>>0>1073741823)$n(g);else{m=j<<2;n=wk(m)|0;f[g>>2]=n;o=n+(j<<2)|0;f[l>>2]=o;oh(n|0,0,m|0)|0;f[k>>2]=o;p=o;q=n;break}else{p=0;q=0}while(0);n=a+116|0;o=f[n>>2]|0;m=f[o>>2]|0;if(!m){r=o+8|0;s=o+4|0;t=q;v=p;w=j}else{j=o+4|0;f[j>>2]=m;Ko(m);m=o+8|0;f[m>>2]=0;f[j>>2]=0;f[o>>2]=0;r=m;s=j;t=f[g>>2]|0;v=f[k>>2]|0;w=f[i>>2]|0}f[o>>2]=t;f[s>>2]=v;f[r>>2]=f[l>>2];f[g>>2]=0;l=g+4|0;f[l>>2]=0;r=g+8|0;f[r>>2]=0;do if(w)if(w>>>0>1073741823)$n(g);else{v=w<<2;s=wk(v)|0;f[g>>2]=s;t=s+(w<<2)|0;f[r>>2]=t;oh(s|0,0,v|0)|0;f[l>>2]=t;x=t;y=s;break}else{x=0;y=0}while(0);w=a+128|0;s=f[w>>2]|0;t=f[s>>2]|0;if(!t){z=s+8|0;A=s+4|0;B=y;C=x}else{x=s+4|0;f[x>>2]=t;Ko(t);t=s+8|0;f[t>>2]=0;f[x>>2]=0;f[s>>2]=0;z=t;A=x;B=f[g>>2]|0;C=f[l>>2]|0}f[s>>2]=B;f[A>>2]=C;f[z>>2]=f[r>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;r=g+8|0;z=g+4|0;C=g+16|0;A=g+20|0;cc(g);B=f[z>>2]|0;s=(f[C>>2]|0)+(f[A>>2]|0)|0;if((f[r>>2]|0)==(B|0))D=0;else{l=(s>>>0)/341|0;D=(f[B+(l<<2)>>2]|0)+((s-(l*341|0)|0)*12|0)|0}f[D>>2]=c;f[D+4>>2]=0;f[D+8>>2]=0;D=(f[A>>2]|0)+1|0;f[A>>2]=D;a:do if(!D)E=1;else{l=d+16|0;s=d+20|0;B=d+28|0;x=a+8|0;t=d+12|0;y=a+104|0;v=a+4|0;o=a+92|0;k=a+48|0;j=a+44|0;m=a+36|0;p=a+16|0;q=a+88|0;F=a+76|0;G=a+84|0;H=D;while(1){I=f[C>>2]|0;J=H+-1|0;K=I+J|0;L=f[z>>2]|0;M=(K>>>0)/341|0;N=f[L+(M<<2)>>2]|0;O=K-(M*341|0)|0;M=f[N+(O*12|0)>>2]|0;K=f[N+(O*12|0)+4>>2]|0;P=f[N+(O*12|0)+8>>2]|0;f[A>>2]=J;J=f[r>>2]|0;O=J-L|0;if((1-H-I+((O|0)==0?0:((O>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[J+-4>>2]|0);f[r>>2]=(f[r>>2]|0)+-4}J=f[n>>2]|0;O=J+(P*12|0)|0;if(M>>>0>c>>>0){E=0;break a}I=f[i>>2]|0;L=(I+-1|0)==(K|0)?0:K+1|0;if(L>>>0>=I>>>0){E=0;break a}I=(f[w>>2]|0)+(P*12|0)|0;K=(f[a>>2]|0)-(f[(f[I>>2]|0)+(L<<2)>>2]|0)|0;b:do if(!K){if(M|0){N=0;do{Q=f[l>>2]|0;c:do if((f[s>>2]|0)!=(Q|0)){R=0;S=Q;do{T=S;U=f[T+(R*20|0)>>2]|0;V=T+(R*20|0)+12|0;X=T+(R*20|0)+16|0;Y=(f[O>>2]|0)+(f[T+(R*20|0)+4>>2]<<2)|0;T=f[V>>2]|0;if((T|0)==4)_=Y;else{if(f[X>>2]|0){$=f[t>>2]|0;aa=0;ba=T;while(1){Bf($|0,Y+(aa<<2)|0,ba|0)|0;aa=aa+1|0;T=f[V>>2]|0;if(aa>>>0>=(f[X>>2]|0)>>>0)break;else{$=$+T|0;ba=T}}}_=f[t>>2]|0}ba=f[B>>2]|0;if(!(b[U+84>>0]|0))ca=f[(f[U+68>>2]|0)+(ba<<2)>>2]|0;else ca=ba;if(ca>>>0>=(f[U+80>>2]|0)>>>0)break c;ba=f[U+40>>2]|0;Bf((f[f[U+64>>2]>>2]|0)+(W(ca,ba)|0)|0,_|0,ba|0)|0;R=R+1|0;S=f[l>>2]|0}while(R>>>0<(((f[s>>2]|0)-S|0)/20|0)>>>0)}while(0);f[B>>2]=(f[B>>2]|0)+1;f[x>>2]=(f[x>>2]|0)+1;N=N+1|0}while((N|0)!=(M|0))}}else{if(M>>>0>=3){if((f[x>>2]|0)>>>0>(f[v>>2]|0)>>>0){E=0;break a}N=P+1|0;Df(J+(N*12|0)|0,f[O>>2]|0,f[J+(P*12|0)+4>>2]|0);Q=(f[(f[n>>2]|0)+(N*12|0)>>2]|0)+(L<<2)|0;f[Q>>2]=(f[Q>>2]|0)+(1<<K+-1);Q=(Z(M|0)|0)^31;f[h>>2]=0;ph(p,Q,h);Q=(M>>>1)-(f[h>>2]|0)|0;S=M-Q|0;d:do if((Q|0)==(S|0)){da=Q;ea=Q}else{R=f[q>>2]|0;ba=f[G>>2]|0;do if((ba|0)!=(f[F>>2]|0)){$=(f[ba>>2]&1<<31-R|0)!=0;X=R+1|0;f[q>>2]=X;if((X|0)==32){f[G>>2]=ba+4;f[q>>2]=0;if($){da=Q;ea=S;break d}else break}else if($){da=Q;ea=S;break d}else break}while(0);da=S;ea=Q}while(0);Q=f[w>>2]|0;S=f[Q+(P*12|0)>>2]|0;ba=S+(L<<2)|0;f[ba>>2]=(f[ba>>2]|0)+1;Df(Q+(N*12|0)|0,S,f[Q+(P*12|0)+4>>2]|0);if(da|0){Q=f[r>>2]|0;S=f[z>>2]|0;ba=Q-S|0;R=(f[A>>2]|0)+(f[C>>2]|0)|0;if((((ba|0)==0?0:((ba>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);fa=(f[C>>2]|0)+(f[A>>2]|0)|0;ga=f[r>>2]|0;ha=f[z>>2]|0}else{fa=R;ga=Q;ha=S}if((ga|0)==(ha|0))ia=0;else{S=(fa>>>0)/341|0;ia=(f[ha+(S<<2)>>2]|0)+((fa-(S*341|0)|0)*12|0)|0}f[ia>>2]=da;f[ia+4>>2]=L;f[ia+8>>2]=P;f[A>>2]=(f[A>>2]|0)+1}if(ea|0){S=f[r>>2]|0;Q=f[z>>2]|0;R=S-Q|0;ba=(f[A>>2]|0)+(f[C>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(ba|0)){cc(g);ja=(f[C>>2]|0)+(f[A>>2]|0)|0;ka=f[r>>2]|0;la=f[z>>2]|0}else{ja=ba;ka=S;la=Q}if((ka|0)==(la|0))ma=0;else{Q=(ja>>>0)/341|0;ma=(f[la+(Q<<2)>>2]|0)+((ja-(Q*341|0)|0)*12|0)|0}f[ma>>2]=ea;f[ma+4>>2]=L;f[ma+8>>2]=N;f[A>>2]=(f[A>>2]|0)+1}break}Q=f[y>>2]|0;f[Q>>2]=L;S=f[i>>2]|0;if(S>>>0>1){ba=1;R=S;$=L;while(1){$=($|0)==(R+-1|0)?0:$+1|0;f[Q+(ba<<2)>>2]=$;ba=ba+1|0;X=f[i>>2]|0;if(ba>>>0>=X>>>0){na=X;break}else R=X}}else na=S;if(M|0){R=0;ba=na;while(1){if(ba|0){$=f[y>>2]|0;Q=f[o>>2]|0;N=f[I>>2]|0;X=0;do{aa=$+(X<<2)|0;f[Q+(f[aa>>2]<<2)>>2]=0;V=f[aa>>2]|0;Y=(f[a>>2]|0)-(f[N+(V<<2)>>2]|0)|0;do if(Y|0){T=Q+(V<<2)|0;oa=f[k>>2]|0;pa=32-oa|0;if((Y|0)>(pa|0)){qa=f[j>>2]|0;ra=qa+4|0;if((ra|0)==(f[m>>2]|0)){f[T>>2]=0;break}else{sa=f[qa>>2]<<oa;qa=Y-pa|0;f[k>>2]=qa;f[j>>2]=ra;ta=32-qa|0;f[T>>2]=(f[ra>>2]|0)>>>ta|sa>>>(ta-pa|0);break}}pa=f[j>>2]|0;if((pa|0)==(f[m>>2]|0)){f[T>>2]=0;break}f[T>>2]=f[pa>>2]<<oa>>>(32-Y|0);oa=(f[k>>2]|0)+Y|0;f[k>>2]=oa;if((oa|0)!=32)break;f[j>>2]=pa+4;f[k>>2]=0}while(0);Y=f[aa>>2]|0;V=Q+(Y<<2)|0;f[V>>2]=f[V>>2]|f[(f[O>>2]|0)+(Y<<2)>>2];X=X+1|0}while(X>>>0<(f[i>>2]|0)>>>0)}X=f[l>>2]|0;e:do if((f[s>>2]|0)!=(X|0)){Q=0;N=X;do{$=N;Y=f[$+(Q*20|0)>>2]|0;V=$+(Q*20|0)+12|0;pa=$+(Q*20|0)+16|0;oa=(f[o>>2]|0)+(f[$+(Q*20|0)+4>>2]<<2)|0;$=f[V>>2]|0;if(($|0)==4)ua=oa;else{if(f[pa>>2]|0){T=f[t>>2]|0;ta=0;sa=$;while(1){Bf(T|0,oa+(ta<<2)|0,sa|0)|0;ta=ta+1|0;$=f[V>>2]|0;if(ta>>>0>=(f[pa>>2]|0)>>>0)break;else{T=T+$|0;sa=$}}}ua=f[t>>2]|0}sa=f[B>>2]|0;if(!(b[Y+84>>0]|0))va=f[(f[Y+68>>2]|0)+(sa<<2)>>2]|0;else va=sa;if(va>>>0>=(f[Y+80>>2]|0)>>>0)break e;sa=f[Y+40>>2]|0;Bf((f[f[Y+64>>2]>>2]|0)+(W(va,sa)|0)|0,ua|0,sa|0)|0;Q=Q+1|0;N=f[l>>2]|0}while(Q>>>0<(((f[s>>2]|0)-N|0)/20|0)>>>0)}while(0);f[B>>2]=(f[B>>2]|0)+1;f[x>>2]=(f[x>>2]|0)+1;X=R+1|0;if((X|0)==(M|0))break b;R=X;ba=f[i>>2]|0}}}while(0);H=f[A>>2]|0;if(!H){E=1;break}}}while(0);i=f[z>>2]|0;ua=f[C>>2]|0;va=(ua>>>0)/341|0;a=i+(va<<2)|0;na=f[r>>2]|0;ma=na;ea=i;if((na|0)!=(i|0)?(ja=(f[a>>2]|0)+((ua-(va*341|0)|0)*12|0)|0,va=(f[A>>2]|0)+ua|0,ua=(va>>>0)/341|0,la=(f[i+(ua<<2)>>2]|0)+((va-(ua*341|0)|0)*12|0)|0,(la|0)!=(ja|0)):0){ua=a;a=ja;while(1){ja=a+12|0;if((ja-(f[ua>>2]|0)|0)==4092){va=ua+4|0;wa=va;xa=f[va>>2]|0}else{wa=ua;xa=ja}a=xa;if((la|0)==(a|0))break;else ua=wa}}f[A>>2]=0;A=ma-ea>>2;if(A>>>0>2){ea=i;do{Ko(f[ea>>2]|0);ea=(f[z>>2]|0)+4|0;f[z>>2]=ea;ya=f[r>>2]|0;za=ya-ea>>2}while(za>>>0>2);Aa=za;Ba=ea;Ca=ya}else{Aa=A;Ba=i;Ca=na}switch(Aa|0){case 1:{Da=170;Ea=102;break}case 2:{Da=341;Ea=102;break}default:{}}if((Ea|0)==102)f[C>>2]=Da;if((Ba|0)!=(Ca|0)){Da=Ba;do{Ko(f[Da>>2]|0);Da=Da+4|0}while((Da|0)!=(Ca|0));Ca=f[z>>2]|0;z=f[r>>2]|0;if((z|0)!=(Ca|0))f[r>>2]=z+(~((z+-4-Ca|0)>>>2)<<2)}Ca=f[g>>2]|0;if(!Ca){u=e;return E|0}Ko(Ca);u=e;return E|0}function ib(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+120|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+132|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+108|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+96|0;j=a+52|0;i=a+48|0;l=a+40|0;o=a+32|0;p=a+28|0;E=a+20|0;F=a+92|0;G=a+80|0;H=a+88|0;I=C;while(1){J=f[B>>2]|0;K=I+-1|0;L=J+K|0;M=f[y>>2]|0;N=(L>>>0)/341|0;O=f[M+(N<<2)>>2]|0;P=L-(N*341|0)|0;N=f[O+(P*12|0)>>2]|0;L=f[O+(P*12|0)+4>>2]|0;Q=f[O+(P*12|0)+8>>2]|0;f[z>>2]=K;K=f[q>>2]|0;P=K-M|0;if((1-I-J+((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[K+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}K=f[m>>2]|0;P=K+(Q*12|0)|0;J=(f[v>>2]|0)+(Q*12|0)|0;if(N>>>0>b>>>0){D=0;break a}M=Pk(a,N,J,L)|0;if(M>>>0>=(f[h>>2]|0)>>>0){D=0;break a}L=(f[a>>2]|0)-(f[(f[J>>2]|0)+(M<<2)>>2]|0)|0;b:do if(!L)if(!N)R=19;else{O=0;do{S=f[P>>2]|0;T=f[S>>2]|0;f[e>>2]=T;f[k>>2]=f[S+4>>2];f[r>>2]=f[S+8>>2];S=f[c>>2]|0;U=S+4|0;V=f[U>>2]|0;if(V>>>0<(f[S+8>>2]|0)>>>0){f[V>>2]=T;f[V+4>>2]=f[k>>2];f[V+8>>2]=f[r>>2];f[U>>2]=V+12}else If(S,e);f[A>>2]=(f[A>>2]|0)+1;O=O+1|0}while(O>>>0<N>>>0);R=19}else{if(N>>>0<3){O=f[w>>2]|0;f[O>>2]=M;S=f[h>>2]|0;if(S>>>0>1){V=1;U=S;T=M;while(1){T=(T|0)==(U+-1|0)?0:T+1|0;f[O+(V<<2)>>2]=T;V=V+1|0;W=f[h>>2]|0;if(V>>>0>=W>>>0){X=W;break}else U=W}}else X=S;if(!N){R=19;break}U=0;V=X;while(1){if(!V)Y=f[n>>2]|0;else{T=f[w>>2]|0;O=f[n>>2]|0;W=f[J>>2]|0;_=0;do{$=T+(_<<2)|0;f[O+(f[$>>2]<<2)>>2]=0;aa=f[$>>2]|0;ba=(f[a>>2]|0)-(f[W+(aa<<2)>>2]|0)|0;do if(ba|0){ca=O+(aa<<2)|0;da=f[j>>2]|0;ea=32-da|0;if((ba|0)>(ea|0)){fa=f[i>>2]|0;ga=fa+4|0;if((ga|0)==(f[l>>2]|0)){f[ca>>2]=0;break}else{ha=f[fa>>2]<<da;fa=ba-ea|0;f[j>>2]=fa;f[i>>2]=ga;ia=32-fa|0;f[ca>>2]=(f[ga>>2]|0)>>>ia|ha>>>(ia-ea|0);break}}ea=f[i>>2]|0;if((ea|0)==(f[l>>2]|0)){f[ca>>2]=0;break}f[ca>>2]=f[ea>>2]<<da>>>(32-ba|0);da=(f[j>>2]|0)+ba|0;f[j>>2]=da;if((da|0)!=32)break;f[i>>2]=ea+4;f[j>>2]=0}while(0);ba=f[$>>2]|0;aa=O+(ba<<2)|0;f[aa>>2]=f[aa>>2]|f[(f[P>>2]|0)+(ba<<2)>>2];_=_+1|0}while(_>>>0<(f[h>>2]|0)>>>0);Y=O}O=f[Y>>2]|0;f[e>>2]=O;f[x>>2]=f[Y+4>>2];f[t>>2]=f[Y+8>>2];_=f[c>>2]|0;W=_+4|0;T=f[W>>2]|0;if(T>>>0<(f[_+8>>2]|0)>>>0){f[T>>2]=O;f[T+4>>2]=f[x>>2];f[T+8>>2]=f[t>>2];f[W>>2]=T+12}else If(_,e);f[A>>2]=(f[A>>2]|0)+1;_=U+1|0;if(_>>>0>=N>>>0){R=19;break b}U=_;V=f[h>>2]|0}}if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}V=Q+1|0;U=f[m>>2]|0;S=U+(V*12|0)|0;if((S|0)==(P|0))ja=U;else{Df(S,f[P>>2]|0,f[K+(Q*12|0)+4>>2]|0);ja=f[m>>2]|0}S=(f[ja+(V*12|0)>>2]|0)+(M<<2)|0;f[S>>2]=(f[S>>2]|0)+(1<<L+-1);S=(Z(N|0)|0)^31;U=f[o>>2]|0;_=32-U|0;if((S|0)>(_|0)){T=f[p>>2]|0;W=T+4|0;if((W|0)==(f[E>>2]|0))ka=0;else{O=f[T>>2]<<U;T=S-_|0;f[o>>2]=T;f[p>>2]=W;ba=32-T|0;ka=(f[W>>2]|0)>>>ba|O>>>(ba-_|0)}}else{_=f[p>>2]|0;if((_|0)!=(f[E>>2]|0)){ba=f[_>>2]<<U>>>(32-S|0);O=U+S|0;f[o>>2]=O;if((O|0)==32){f[p>>2]=_+4;f[o>>2]=0;ka=ba}else ka=ba}else ka=0}ba=(N>>>1)-ka|0;_=N-ba|0;c:do if((ba|0)==(_|0)){la=ba;ma=ba}else{O=f[F>>2]|0;S=f[H>>2]|0;do if((S|0)!=(f[G>>2]|0)){U=(f[S>>2]&1<<31-O|0)!=0;W=O+1|0;f[F>>2]=W;if((W|0)==32){f[H>>2]=S+4;f[F>>2]=0;if(U){la=ba;ma=_;break c}else break}else if(U){la=ba;ma=_;break c}else break}while(0);la=_;ma=ba}while(0);ba=f[v>>2]|0;_=f[ba+(Q*12|0)>>2]|0;S=_+(M<<2)|0;f[S>>2]=(f[S>>2]|0)+1;Df(ba+(V*12|0)|0,_,f[ba+(Q*12|0)+4>>2]|0);if(la|0){ba=f[q>>2]|0;_=f[y>>2]|0;S=ba-_|0;O=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((S|0)==0?0:((S>>2)*341|0)+-1|0)|0)==(O|0)){cc(g);na=(f[B>>2]|0)+(f[z>>2]|0)|0;oa=f[q>>2]|0;pa=f[y>>2]|0}else{na=O;oa=ba;pa=_}if((oa|0)==(pa|0))qa=0;else{_=(na>>>0)/341|0;qa=(f[pa+(_<<2)>>2]|0)+((na-(_*341|0)|0)*12|0)|0}f[qa>>2]=la;f[qa+4>>2]=M;f[qa+8>>2]=Q;f[z>>2]=(f[z>>2]|0)+1}if(!ma)R=19;else{_=f[q>>2]|0;ba=f[y>>2]|0;O=_-ba|0;S=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((O|0)==0?0:((O>>2)*341|0)+-1|0)|0)==(S|0)){cc(g);ra=(f[B>>2]|0)+(f[z>>2]|0)|0;sa=f[q>>2]|0;ta=f[y>>2]|0}else{ra=S;sa=_;ta=ba}if((sa|0)==(ta|0))ua=0;else{ba=(ra>>>0)/341|0;ua=(f[ta+(ba<<2)>>2]|0)+((ra-(ba*341|0)|0)*12|0)|0}f[ua>>2]=ma;f[ua+4>>2]=M;f[ua+8>>2]=V;ba=(f[z>>2]|0)+1|0;f[z>>2]=ba;va=ba}}while(0);if((R|0)==19){R=0;va=f[z>>2]|0}if(!va){D=1;break}else I=va}}while(0);va=f[y>>2]|0;ua=f[B>>2]|0;ma=(ua>>>0)/341|0;ra=va+(ma<<2)|0;ta=f[q>>2]|0;sa=ta;qa=va;if((ta|0)!=(va|0)?(la=(f[ra>>2]|0)+((ua-(ma*341|0)|0)*12|0)|0,ma=(f[z>>2]|0)+ua|0,ua=(ma>>>0)/341|0,na=(f[va+(ua<<2)>>2]|0)+((ma-(ua*341|0)|0)*12|0)|0,(na|0)!=(la|0)):0){ua=ra;ra=la;while(1){la=ra+12|0;if((la-(f[ua>>2]|0)|0)==4092){ma=ua+4|0;wa=ma;xa=f[ma>>2]|0}else{wa=ua;xa=la}ra=xa;if((na|0)==(ra|0))break;else ua=wa}}f[z>>2]=0;z=sa-qa>>2;if(z>>>0>2){qa=va;do{Ko(f[qa>>2]|0);qa=(f[y>>2]|0)+4|0;f[y>>2]=qa;ya=f[q>>2]|0;za=ya-qa>>2}while(za>>>0>2);Aa=za;Ba=qa;Ca=ya}else{Aa=z;Ba=va;Ca=ta}switch(Aa|0){case 1:{Da=170;R=95;break}case 2:{Da=341;R=95;break}default:{}}if((R|0)==95)f[B>>2]=Da;if((Ba|0)!=(Ca|0)){Da=Ba;do{Ko(f[Da>>2]|0);Da=Da+4|0}while((Da|0)!=(Ca|0));Ca=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ca|0))f[q>>2]=y+(~((y+-4-Ca|0)>>>2)<<2)}Ca=f[g>>2]|0;if(!Ca){u=d;return D|0}Ko(Ca);u=d;return D|0}function jb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+120|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+132|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+108|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+96|0;j=a+52|0;i=a+48|0;l=a+40|0;o=a+32|0;p=a+28|0;E=a+20|0;F=a+92|0;G=a+80|0;H=a+88|0;I=C;while(1){J=f[B>>2]|0;K=I+-1|0;L=J+K|0;M=f[y>>2]|0;N=(L>>>0)/341|0;O=f[M+(N<<2)>>2]|0;P=L-(N*341|0)|0;N=f[O+(P*12|0)>>2]|0;L=f[O+(P*12|0)+4>>2]|0;Q=f[O+(P*12|0)+8>>2]|0;f[z>>2]=K;K=f[q>>2]|0;P=K-M|0;if((1-I-J+((P|0)==0?0:((P>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[K+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}K=f[m>>2]|0;P=K+(Q*12|0)|0;if(N>>>0>b>>>0){D=0;break a}J=f[h>>2]|0;M=(J+-1|0)==(L|0)?0:L+1|0;if(M>>>0>=J>>>0){D=0;break a}J=(f[v>>2]|0)+(Q*12|0)|0;L=(f[a>>2]|0)-(f[(f[J>>2]|0)+(M<<2)>>2]|0)|0;b:do if(!L)if(!N)R=19;else{O=0;do{S=f[P>>2]|0;T=f[S>>2]|0;f[e>>2]=T;f[k>>2]=f[S+4>>2];f[r>>2]=f[S+8>>2];S=f[c>>2]|0;U=S+4|0;V=f[U>>2]|0;if(V>>>0<(f[S+8>>2]|0)>>>0){f[V>>2]=T;f[V+4>>2]=f[k>>2];f[V+8>>2]=f[r>>2];f[U>>2]=V+12}else If(S,e);f[A>>2]=(f[A>>2]|0)+1;O=O+1|0}while(O>>>0<N>>>0);R=19}else{if(N>>>0<3){O=f[w>>2]|0;f[O>>2]=M;S=f[h>>2]|0;if(S>>>0>1){V=1;U=S;T=M;while(1){T=(T|0)==(U+-1|0)?0:T+1|0;f[O+(V<<2)>>2]=T;V=V+1|0;W=f[h>>2]|0;if(V>>>0>=W>>>0){X=W;break}else U=W}}else X=S;if(!N){R=19;break}U=0;V=X;while(1){if(!V)Y=f[n>>2]|0;else{T=f[w>>2]|0;O=f[n>>2]|0;W=f[J>>2]|0;_=0;do{$=T+(_<<2)|0;f[O+(f[$>>2]<<2)>>2]=0;aa=f[$>>2]|0;ba=(f[a>>2]|0)-(f[W+(aa<<2)>>2]|0)|0;do if(ba|0){ca=O+(aa<<2)|0;da=f[j>>2]|0;ea=32-da|0;if((ba|0)>(ea|0)){fa=f[i>>2]|0;ga=fa+4|0;if((ga|0)==(f[l>>2]|0)){f[ca>>2]=0;break}else{ha=f[fa>>2]<<da;fa=ba-ea|0;f[j>>2]=fa;f[i>>2]=ga;ia=32-fa|0;f[ca>>2]=(f[ga>>2]|0)>>>ia|ha>>>(ia-ea|0);break}}ea=f[i>>2]|0;if((ea|0)==(f[l>>2]|0)){f[ca>>2]=0;break}f[ca>>2]=f[ea>>2]<<da>>>(32-ba|0);da=(f[j>>2]|0)+ba|0;f[j>>2]=da;if((da|0)!=32)break;f[i>>2]=ea+4;f[j>>2]=0}while(0);ba=f[$>>2]|0;aa=O+(ba<<2)|0;f[aa>>2]=f[aa>>2]|f[(f[P>>2]|0)+(ba<<2)>>2];_=_+1|0}while(_>>>0<(f[h>>2]|0)>>>0);Y=O}O=f[Y>>2]|0;f[e>>2]=O;f[x>>2]=f[Y+4>>2];f[t>>2]=f[Y+8>>2];_=f[c>>2]|0;W=_+4|0;T=f[W>>2]|0;if(T>>>0<(f[_+8>>2]|0)>>>0){f[T>>2]=O;f[T+4>>2]=f[x>>2];f[T+8>>2]=f[t>>2];f[W>>2]=T+12}else If(_,e);f[A>>2]=(f[A>>2]|0)+1;_=U+1|0;if(_>>>0>=N>>>0){R=19;break b}U=_;V=f[h>>2]|0}}if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}V=Q+1|0;Df(K+(V*12|0)|0,f[P>>2]|0,f[K+(Q*12|0)+4>>2]|0);U=(f[(f[m>>2]|0)+(V*12|0)>>2]|0)+(M<<2)|0;f[U>>2]=(f[U>>2]|0)+(1<<L+-1);U=(Z(N|0)|0)^31;S=f[o>>2]|0;_=32-S|0;if((U|0)>(_|0)){T=f[p>>2]|0;W=T+4|0;if((W|0)==(f[E>>2]|0))ja=0;else{O=f[T>>2]<<S;T=U-_|0;f[o>>2]=T;f[p>>2]=W;ba=32-T|0;ja=(f[W>>2]|0)>>>ba|O>>>(ba-_|0)}}else{_=f[p>>2]|0;if((_|0)!=(f[E>>2]|0)){ba=f[_>>2]<<S>>>(32-U|0);O=S+U|0;f[o>>2]=O;if((O|0)==32){f[p>>2]=_+4;f[o>>2]=0;ja=ba}else ja=ba}else ja=0}ba=(N>>>1)-ja|0;_=N-ba|0;c:do if((ba|0)==(_|0)){ka=ba;la=ba}else{O=f[F>>2]|0;U=f[H>>2]|0;do if((U|0)!=(f[G>>2]|0)){S=(f[U>>2]&1<<31-O|0)!=0;W=O+1|0;f[F>>2]=W;if((W|0)==32){f[H>>2]=U+4;f[F>>2]=0;if(S){ka=ba;la=_;break c}else break}else if(S){ka=ba;la=_;break c}else break}while(0);ka=_;la=ba}while(0);ba=f[v>>2]|0;_=f[ba+(Q*12|0)>>2]|0;U=_+(M<<2)|0;f[U>>2]=(f[U>>2]|0)+1;Df(ba+(V*12|0)|0,_,f[ba+(Q*12|0)+4>>2]|0);if(ka|0){ba=f[q>>2]|0;_=f[y>>2]|0;U=ba-_|0;O=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((U|0)==0?0:((U>>2)*341|0)+-1|0)|0)==(O|0)){cc(g);ma=(f[B>>2]|0)+(f[z>>2]|0)|0;na=f[q>>2]|0;oa=f[y>>2]|0}else{ma=O;na=ba;oa=_}if((na|0)==(oa|0))pa=0;else{_=(ma>>>0)/341|0;pa=(f[oa+(_<<2)>>2]|0)+((ma-(_*341|0)|0)*12|0)|0}f[pa>>2]=ka;f[pa+4>>2]=M;f[pa+8>>2]=Q;f[z>>2]=(f[z>>2]|0)+1}if(!la)R=19;else{_=f[q>>2]|0;ba=f[y>>2]|0;O=_-ba|0;U=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((O|0)==0?0:((O>>2)*341|0)+-1|0)|0)==(U|0)){cc(g);qa=(f[B>>2]|0)+(f[z>>2]|0)|0;ra=f[q>>2]|0;sa=f[y>>2]|0}else{qa=U;ra=_;sa=ba}if((ra|0)==(sa|0))ta=0;else{ba=(qa>>>0)/341|0;ta=(f[sa+(ba<<2)>>2]|0)+((qa-(ba*341|0)|0)*12|0)|0}f[ta>>2]=la;f[ta+4>>2]=M;f[ta+8>>2]=V;ba=(f[z>>2]|0)+1|0;f[z>>2]=ba;ua=ba}}while(0);if((R|0)==19){R=0;ua=f[z>>2]|0}if(!ua){D=1;break}else I=ua}}while(0);ua=f[y>>2]|0;ta=f[B>>2]|0;la=(ta>>>0)/341|0;qa=ua+(la<<2)|0;sa=f[q>>2]|0;ra=sa;pa=ua;if((sa|0)!=(ua|0)?(ka=(f[qa>>2]|0)+((ta-(la*341|0)|0)*12|0)|0,la=(f[z>>2]|0)+ta|0,ta=(la>>>0)/341|0,ma=(f[ua+(ta<<2)>>2]|0)+((la-(ta*341|0)|0)*12|0)|0,(ma|0)!=(ka|0)):0){ta=qa;qa=ka;while(1){ka=qa+12|0;if((ka-(f[ta>>2]|0)|0)==4092){la=ta+4|0;va=la;wa=f[la>>2]|0}else{va=ta;wa=ka}qa=wa;if((ma|0)==(qa|0))break;else ta=va}}f[z>>2]=0;z=ra-pa>>2;if(z>>>0>2){pa=ua;do{Ko(f[pa>>2]|0);pa=(f[y>>2]|0)+4|0;f[y>>2]=pa;xa=f[q>>2]|0;ya=xa-pa>>2}while(ya>>>0>2);za=ya;Aa=pa;Ba=xa}else{za=z;Aa=ua;Ba=sa}switch(za|0){case 1:{Ca=170;R=93;break}case 2:{Ca=341;R=93;break}default:{}}if((R|0)==93)f[B>>2]=Ca;if((Aa|0)!=(Ba|0)){Ca=Aa;do{Ko(f[Ca>>2]|0);Ca=Ca+4|0}while((Ca|0)!=(Ba|0));Ba=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(Ba|0))f[q>>2]=y+(~((y+-4-Ba|0)>>>2)<<2)}Ba=f[g>>2]|0;if(!Ba){u=d;return D|0}Ko(Ba);u=d;return D|0}function kb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+616|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;G=(f[v>>2]|0)+(N*12|0)|0;if(K>>>0>b>>>0){D=0;break a}J=tg(a,K,G,I)|0;if(J>>>0>=(f[h>>2]|0)>>>0){D=0;break a}I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;do{P=f[M>>2]|0;Q=f[P>>2]|0;f[e>>2]=Q;f[k>>2]=f[P+4>>2];f[r>>2]=f[P+8>>2];P=f[c>>2]|0;R=P+4|0;S=f[R>>2]|0;if(S>>>0<(f[P+8>>2]|0)>>>0){f[S>>2]=Q;f[S+4>>2]=f[k>>2];f[S+8>>2]=f[r>>2];f[R>>2]=S+12}else If(P,e);f[A>>2]=(f[A>>2]|0)+1;L=L+1|0}while(L>>>0<K>>>0);O=19}else{if(K>>>0<3){L=f[w>>2]|0;f[L>>2]=J;P=f[h>>2]|0;if(P>>>0>1){S=1;R=P;Q=J;while(1){Q=(Q|0)==(R+-1|0)?0:Q+1|0;f[L+(S<<2)>>2]=Q;S=S+1|0;T=f[h>>2]|0;if(S>>>0>=T>>>0){U=T;break}else R=T}}else U=P;if(!K){O=19;break}R=0;S=U;while(1){if(!S)V=f[n>>2]|0;else{Q=f[w>>2]|0;L=f[n>>2]|0;T=f[G>>2]|0;W=0;do{X=Q+(W<<2)|0;f[L+(f[X>>2]<<2)>>2]=0;Y=f[X>>2]|0;_=(f[a>>2]|0)-(f[T+(Y<<2)>>2]|0)|0;do if(_|0){$=L+(Y<<2)|0;aa=f[j>>2]|0;ba=32-aa|0;if((_|0)>(ba|0)){ca=f[i>>2]|0;da=ca+4|0;if((da|0)==(f[l>>2]|0)){f[$>>2]=0;break}else{ea=f[ca>>2]<<aa;ca=_-ba|0;f[j>>2]=ca;f[i>>2]=da;fa=32-ca|0;f[$>>2]=(f[da>>2]|0)>>>fa|ea>>>(fa-ba|0);break}}ba=f[i>>2]|0;if((ba|0)==(f[l>>2]|0)){f[$>>2]=0;break}f[$>>2]=f[ba>>2]<<aa>>>(32-_|0);aa=(f[j>>2]|0)+_|0;f[j>>2]=aa;if((aa|0)!=32)break;f[i>>2]=ba+4;f[j>>2]=0}while(0);_=f[X>>2]|0;Y=L+(_<<2)|0;f[Y>>2]=f[Y>>2]|f[(f[M>>2]|0)+(_<<2)>>2];W=W+1|0}while(W>>>0<(f[h>>2]|0)>>>0);V=L}L=f[V>>2]|0;f[e>>2]=L;f[x>>2]=f[V+4>>2];f[t>>2]=f[V+8>>2];W=f[c>>2]|0;T=W+4|0;Q=f[T>>2]|0;if(Q>>>0<(f[W+8>>2]|0)>>>0){f[Q>>2]=L;f[Q+4>>2]=f[x>>2];f[Q+8>>2]=f[t>>2];f[T>>2]=Q+12}else If(W,e);f[A>>2]=(f[A>>2]|0)+1;W=R+1|0;if(W>>>0>=K>>>0){O=19;break b}R=W;S=f[h>>2]|0}}if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}S=N+1|0;R=f[m>>2]|0;P=R+(S*12|0)|0;if((P|0)==(M|0))ga=R;else{Df(P,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);ga=f[m>>2]|0}P=(f[ga+(S*12|0)>>2]|0)+(J<<2)|0;f[P>>2]=(f[P>>2]|0)+(1<<I+-1);P=(Z(K|0)|0)^31;if(!P)ha=0;else{R=0;W=0;while(1){Q=W<<1|(pi(a+16+(R<<4)|0)|0)&1;R=R+1|0;if((R|0)==(P|0)){ha=Q;break}else W=Q}}W=(K>>>1)-ha|0;P=K-W|0;c:do if((W|0)==(P|0)){ia=W;ja=W}else{R=f[o>>2]|0;Q=f[E>>2]|0;do if((Q|0)!=(f[p>>2]|0)){T=(f[Q>>2]&1<<31-R|0)!=0;L=R+1|0;f[o>>2]=L;if((L|0)==32){f[E>>2]=Q+4;f[o>>2]=0;if(T){ia=W;ja=P;break c}else break}else if(T){ia=W;ja=P;break c}else break}while(0);ia=P;ja=W}while(0);W=f[v>>2]|0;P=f[W+(N*12|0)>>2]|0;Q=P+(J<<2)|0;f[Q>>2]=(f[Q>>2]|0)+1;Df(W+(S*12|0)|0,P,f[W+(N*12|0)+4>>2]|0);if(ia|0){W=f[q>>2]|0;P=f[y>>2]|0;Q=W-P|0;R=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((Q|0)==0?0:((Q>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);ka=(f[B>>2]|0)+(f[z>>2]|0)|0;la=f[q>>2]|0;ma=f[y>>2]|0}else{ka=R;la=W;ma=P}if((la|0)==(ma|0))na=0;else{P=(ka>>>0)/341|0;na=(f[ma+(P<<2)>>2]|0)+((ka-(P*341|0)|0)*12|0)|0}f[na>>2]=ia;f[na+4>>2]=J;f[na+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!ja)O=19;else{P=f[q>>2]|0;W=f[y>>2]|0;R=P-W|0;Q=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(Q|0)){cc(g);oa=(f[B>>2]|0)+(f[z>>2]|0)|0;pa=f[q>>2]|0;qa=f[y>>2]|0}else{oa=Q;pa=P;qa=W}if((pa|0)==(qa|0))ra=0;else{W=(oa>>>0)/341|0;ra=(f[qa+(W<<2)>>2]|0)+((oa-(W*341|0)|0)*12|0)|0}f[ra>>2]=ja;f[ra+4>>2]=J;f[ra+8>>2]=S;W=(f[z>>2]|0)+1|0;f[z>>2]=W;sa=W}}while(0);if((O|0)==19){O=0;sa=f[z>>2]|0}if(!sa){D=1;break}else F=sa}}while(0);sa=f[y>>2]|0;ra=f[B>>2]|0;ja=(ra>>>0)/341|0;oa=sa+(ja<<2)|0;qa=f[q>>2]|0;pa=qa;na=sa;if((qa|0)!=(sa|0)?(ia=(f[oa>>2]|0)+((ra-(ja*341|0)|0)*12|0)|0,ja=(f[z>>2]|0)+ra|0,ra=(ja>>>0)/341|0,ka=(f[sa+(ra<<2)>>2]|0)+((ja-(ra*341|0)|0)*12|0)|0,(ka|0)!=(ia|0)):0){ra=oa;oa=ia;while(1){ia=oa+12|0;if((ia-(f[ra>>2]|0)|0)==4092){ja=ra+4|0;ta=ja;ua=f[ja>>2]|0}else{ta=ra;ua=ia}oa=ua;if((ka|0)==(oa|0))break;else ra=ta}}f[z>>2]=0;z=pa-na>>2;if(z>>>0>2){na=sa;do{Ko(f[na>>2]|0);na=(f[y>>2]|0)+4|0;f[y>>2]=na;va=f[q>>2]|0;wa=va-na>>2}while(wa>>>0>2);xa=wa;ya=na;za=va}else{xa=z;ya=sa;za=qa}switch(xa|0){case 1:{Aa=170;O=92;break}case 2:{Aa=341;O=92;break}default:{}}if((O|0)==92)f[B>>2]=Aa;if((ya|0)!=(za|0)){Aa=ya;do{Ko(f[Aa>>2]|0);Aa=Aa+4|0}while((Aa|0)!=(za|0));za=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(za|0))f[q>>2]=y+(~((y+-4-za|0)>>>2)<<2)}za=f[g>>2]|0;if(!za){u=d;return D|0}Ko(za);u=d;return D|0}function lb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+616|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;G=(f[v>>2]|0)+(N*12|0)|0;if(K>>>0>b>>>0){D=0;break a}J=Pk(a,K,G,I)|0;if(J>>>0>=(f[h>>2]|0)>>>0){D=0;break a}I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;do{P=f[M>>2]|0;Q=f[P>>2]|0;f[e>>2]=Q;f[k>>2]=f[P+4>>2];f[r>>2]=f[P+8>>2];P=f[c>>2]|0;R=P+4|0;S=f[R>>2]|0;if(S>>>0<(f[P+8>>2]|0)>>>0){f[S>>2]=Q;f[S+4>>2]=f[k>>2];f[S+8>>2]=f[r>>2];f[R>>2]=S+12}else If(P,e);f[A>>2]=(f[A>>2]|0)+1;L=L+1|0}while(L>>>0<K>>>0);O=19}else{if(K>>>0<3){L=f[w>>2]|0;f[L>>2]=J;P=f[h>>2]|0;if(P>>>0>1){S=1;R=P;Q=J;while(1){Q=(Q|0)==(R+-1|0)?0:Q+1|0;f[L+(S<<2)>>2]=Q;S=S+1|0;T=f[h>>2]|0;if(S>>>0>=T>>>0){U=T;break}else R=T}}else U=P;if(!K){O=19;break}R=0;S=U;while(1){if(!S)V=f[n>>2]|0;else{Q=f[w>>2]|0;L=f[n>>2]|0;T=f[G>>2]|0;W=0;do{X=Q+(W<<2)|0;f[L+(f[X>>2]<<2)>>2]=0;Y=f[X>>2]|0;_=(f[a>>2]|0)-(f[T+(Y<<2)>>2]|0)|0;do if(_|0){$=L+(Y<<2)|0;aa=f[j>>2]|0;ba=32-aa|0;if((_|0)>(ba|0)){ca=f[i>>2]|0;da=ca+4|0;if((da|0)==(f[l>>2]|0)){f[$>>2]=0;break}else{ea=f[ca>>2]<<aa;ca=_-ba|0;f[j>>2]=ca;f[i>>2]=da;fa=32-ca|0;f[$>>2]=(f[da>>2]|0)>>>fa|ea>>>(fa-ba|0);break}}ba=f[i>>2]|0;if((ba|0)==(f[l>>2]|0)){f[$>>2]=0;break}f[$>>2]=f[ba>>2]<<aa>>>(32-_|0);aa=(f[j>>2]|0)+_|0;f[j>>2]=aa;if((aa|0)!=32)break;f[i>>2]=ba+4;f[j>>2]=0}while(0);_=f[X>>2]|0;Y=L+(_<<2)|0;f[Y>>2]=f[Y>>2]|f[(f[M>>2]|0)+(_<<2)>>2];W=W+1|0}while(W>>>0<(f[h>>2]|0)>>>0);V=L}L=f[V>>2]|0;f[e>>2]=L;f[x>>2]=f[V+4>>2];f[t>>2]=f[V+8>>2];W=f[c>>2]|0;T=W+4|0;Q=f[T>>2]|0;if(Q>>>0<(f[W+8>>2]|0)>>>0){f[Q>>2]=L;f[Q+4>>2]=f[x>>2];f[Q+8>>2]=f[t>>2];f[T>>2]=Q+12}else If(W,e);f[A>>2]=(f[A>>2]|0)+1;W=R+1|0;if(W>>>0>=K>>>0){O=19;break b}R=W;S=f[h>>2]|0}}if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}S=N+1|0;R=f[m>>2]|0;P=R+(S*12|0)|0;if((P|0)==(M|0))ga=R;else{Df(P,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);ga=f[m>>2]|0}P=(f[ga+(S*12|0)>>2]|0)+(J<<2)|0;f[P>>2]=(f[P>>2]|0)+(1<<I+-1);P=(Z(K|0)|0)^31;if(!P)ha=0;else{R=0;W=0;while(1){Q=W<<1|(pi(a+16+(R<<4)|0)|0)&1;R=R+1|0;if((R|0)==(P|0)){ha=Q;break}else W=Q}}W=(K>>>1)-ha|0;P=K-W|0;c:do if((W|0)==(P|0)){ia=W;ja=W}else{R=f[o>>2]|0;Q=f[E>>2]|0;do if((Q|0)!=(f[p>>2]|0)){T=(f[Q>>2]&1<<31-R|0)!=0;L=R+1|0;f[o>>2]=L;if((L|0)==32){f[E>>2]=Q+4;f[o>>2]=0;if(T){ia=W;ja=P;break c}else break}else if(T){ia=W;ja=P;break c}else break}while(0);ia=P;ja=W}while(0);W=f[v>>2]|0;P=f[W+(N*12|0)>>2]|0;Q=P+(J<<2)|0;f[Q>>2]=(f[Q>>2]|0)+1;Df(W+(S*12|0)|0,P,f[W+(N*12|0)+4>>2]|0);if(ia|0){W=f[q>>2]|0;P=f[y>>2]|0;Q=W-P|0;R=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((Q|0)==0?0:((Q>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);ka=(f[B>>2]|0)+(f[z>>2]|0)|0;la=f[q>>2]|0;ma=f[y>>2]|0}else{ka=R;la=W;ma=P}if((la|0)==(ma|0))na=0;else{P=(ka>>>0)/341|0;na=(f[ma+(P<<2)>>2]|0)+((ka-(P*341|0)|0)*12|0)|0}f[na>>2]=ia;f[na+4>>2]=J;f[na+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!ja)O=19;else{P=f[q>>2]|0;W=f[y>>2]|0;R=P-W|0;Q=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(Q|0)){cc(g);oa=(f[B>>2]|0)+(f[z>>2]|0)|0;pa=f[q>>2]|0;qa=f[y>>2]|0}else{oa=Q;pa=P;qa=W}if((pa|0)==(qa|0))ra=0;else{W=(oa>>>0)/341|0;ra=(f[qa+(W<<2)>>2]|0)+((oa-(W*341|0)|0)*12|0)|0}f[ra>>2]=ja;f[ra+4>>2]=J;f[ra+8>>2]=S;W=(f[z>>2]|0)+1|0;f[z>>2]=W;sa=W}}while(0);if((O|0)==19){O=0;sa=f[z>>2]|0}if(!sa){D=1;break}else F=sa}}while(0);sa=f[y>>2]|0;ra=f[B>>2]|0;ja=(ra>>>0)/341|0;oa=sa+(ja<<2)|0;qa=f[q>>2]|0;pa=qa;na=sa;if((qa|0)!=(sa|0)?(ia=(f[oa>>2]|0)+((ra-(ja*341|0)|0)*12|0)|0,ja=(f[z>>2]|0)+ra|0,ra=(ja>>>0)/341|0,ka=(f[sa+(ra<<2)>>2]|0)+((ja-(ra*341|0)|0)*12|0)|0,(ka|0)!=(ia|0)):0){ra=oa;oa=ia;while(1){ia=oa+12|0;if((ia-(f[ra>>2]|0)|0)==4092){ja=ra+4|0;ta=ja;ua=f[ja>>2]|0}else{ta=ra;ua=ia}oa=ua;if((ka|0)==(oa|0))break;else ra=ta}}f[z>>2]=0;z=pa-na>>2;if(z>>>0>2){na=sa;do{Ko(f[na>>2]|0);na=(f[y>>2]|0)+4|0;f[y>>2]=na;va=f[q>>2]|0;wa=va-na>>2}while(wa>>>0>2);xa=wa;ya=na;za=va}else{xa=z;ya=sa;za=qa}switch(xa|0){case 1:{Aa=170;O=92;break}case 2:{Aa=341;O=92;break}default:{}}if((O|0)==92)f[B>>2]=Aa;if((ya|0)!=(za|0)){Aa=ya;do{Ko(f[Aa>>2]|0);Aa=Aa+4|0}while((Aa|0)!=(za|0));za=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(za|0))f[q>>2]=y+(~((y+-4-za|0)>>>2)<<2)}za=f[g>>2]|0;if(!za){u=d;return D|0}Ko(za);u=d;return D|0}function mb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+628|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+640|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+616|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+604|0;j=a+560|0;i=a+556|0;l=a+548|0;o=a+600|0;p=a+588|0;E=a+596|0;F=C;while(1){G=f[B>>2]|0;H=F+-1|0;I=G+H|0;J=f[y>>2]|0;K=(I>>>0)/341|0;L=f[J+(K<<2)>>2]|0;M=I-(K*341|0)|0;K=f[L+(M*12|0)>>2]|0;I=f[L+(M*12|0)+4>>2]|0;N=f[L+(M*12|0)+8>>2]|0;f[z>>2]=H;H=f[q>>2]|0;M=H-J|0;if((1-F-G+((M|0)==0?0:((M>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[H+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}H=f[m>>2]|0;M=H+(N*12|0)|0;if(K>>>0>b>>>0){D=0;break a}G=f[h>>2]|0;J=(G+-1|0)==(I|0)?0:I+1|0;if(J>>>0>=G>>>0){D=0;break a}G=(f[v>>2]|0)+(N*12|0)|0;I=(f[a>>2]|0)-(f[(f[G>>2]|0)+(J<<2)>>2]|0)|0;b:do if(!I)if(!K)O=19;else{L=0;do{P=f[M>>2]|0;Q=f[P>>2]|0;f[e>>2]=Q;f[k>>2]=f[P+4>>2];f[r>>2]=f[P+8>>2];P=f[c>>2]|0;R=P+4|0;S=f[R>>2]|0;if(S>>>0<(f[P+8>>2]|0)>>>0){f[S>>2]=Q;f[S+4>>2]=f[k>>2];f[S+8>>2]=f[r>>2];f[R>>2]=S+12}else If(P,e);f[A>>2]=(f[A>>2]|0)+1;L=L+1|0}while(L>>>0<K>>>0);O=19}else{if(K>>>0>=3){if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}L=N+1|0;Df(H+(L*12|0)|0,f[M>>2]|0,f[H+(N*12|0)+4>>2]|0);P=(f[(f[m>>2]|0)+(L*12|0)>>2]|0)+(J<<2)|0;f[P>>2]=(f[P>>2]|0)+(1<<I+-1);P=(Z(K|0)|0)^31;if(!P)T=0;else{S=0;R=0;while(1){Q=R<<1|(pi(a+16+(S<<4)|0)|0)&1;S=S+1|0;if((S|0)==(P|0)){T=Q;break}else R=Q}}R=(K>>>1)-T|0;P=K-R|0;c:do if((R|0)==(P|0)){U=R;V=R}else{S=f[o>>2]|0;Q=f[E>>2]|0;do if((Q|0)!=(f[p>>2]|0)){W=(f[Q>>2]&1<<31-S|0)!=0;X=S+1|0;f[o>>2]=X;if((X|0)==32){f[E>>2]=Q+4;f[o>>2]=0;if(W){U=R;V=P;break c}else break}else if(W){U=R;V=P;break c}else break}while(0);U=P;V=R}while(0);R=f[v>>2]|0;P=f[R+(N*12|0)>>2]|0;Q=P+(J<<2)|0;f[Q>>2]=(f[Q>>2]|0)+1;Df(R+(L*12|0)|0,P,f[R+(N*12|0)+4>>2]|0);if(U|0){R=f[q>>2]|0;P=f[y>>2]|0;Q=R-P|0;S=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((Q|0)==0?0:((Q>>2)*341|0)+-1|0)|0)==(S|0)){cc(g);Y=(f[B>>2]|0)+(f[z>>2]|0)|0;_=f[q>>2]|0;$=f[y>>2]|0}else{Y=S;_=R;$=P}if((_|0)==($|0))aa=0;else{P=(Y>>>0)/341|0;aa=(f[$+(P<<2)>>2]|0)+((Y-(P*341|0)|0)*12|0)|0}f[aa>>2]=U;f[aa+4>>2]=J;f[aa+8>>2]=N;f[z>>2]=(f[z>>2]|0)+1}if(!V){O=19;break}P=f[q>>2]|0;R=f[y>>2]|0;S=P-R|0;Q=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((S|0)==0?0:((S>>2)*341|0)+-1|0)|0)==(Q|0)){cc(g);ba=(f[B>>2]|0)+(f[z>>2]|0)|0;ca=f[q>>2]|0;da=f[y>>2]|0}else{ba=Q;ca=P;da=R}if((ca|0)==(da|0))ea=0;else{R=(ba>>>0)/341|0;ea=(f[da+(R<<2)>>2]|0)+((ba-(R*341|0)|0)*12|0)|0}f[ea>>2]=V;f[ea+4>>2]=J;f[ea+8>>2]=L;R=(f[z>>2]|0)+1|0;f[z>>2]=R;fa=R;break}R=f[w>>2]|0;f[R>>2]=J;P=f[h>>2]|0;if(P>>>0>1){Q=1;S=P;W=J;while(1){W=(W|0)==(S+-1|0)?0:W+1|0;f[R+(Q<<2)>>2]=W;Q=Q+1|0;X=f[h>>2]|0;if(Q>>>0>=X>>>0){ga=X;break}else S=X}}else ga=P;if(!K)O=19;else{S=0;Q=ga;while(1){if(!Q)ha=f[n>>2]|0;else{W=f[w>>2]|0;R=f[n>>2]|0;L=f[G>>2]|0;X=0;do{ia=W+(X<<2)|0;f[R+(f[ia>>2]<<2)>>2]=0;ja=f[ia>>2]|0;ka=(f[a>>2]|0)-(f[L+(ja<<2)>>2]|0)|0;do if(ka|0){la=R+(ja<<2)|0;ma=f[j>>2]|0;na=32-ma|0;if((ka|0)>(na|0)){oa=f[i>>2]|0;pa=oa+4|0;if((pa|0)==(f[l>>2]|0)){f[la>>2]=0;break}else{qa=f[oa>>2]<<ma;oa=ka-na|0;f[j>>2]=oa;f[i>>2]=pa;ra=32-oa|0;f[la>>2]=(f[pa>>2]|0)>>>ra|qa>>>(ra-na|0);break}}na=f[i>>2]|0;if((na|0)==(f[l>>2]|0)){f[la>>2]=0;break}f[la>>2]=f[na>>2]<<ma>>>(32-ka|0);ma=(f[j>>2]|0)+ka|0;f[j>>2]=ma;if((ma|0)!=32)break;f[i>>2]=na+4;f[j>>2]=0}while(0);ka=f[ia>>2]|0;ja=R+(ka<<2)|0;f[ja>>2]=f[ja>>2]|f[(f[M>>2]|0)+(ka<<2)>>2];X=X+1|0}while(X>>>0<(f[h>>2]|0)>>>0);ha=R}R=f[ha>>2]|0;f[e>>2]=R;f[x>>2]=f[ha+4>>2];f[t>>2]=f[ha+8>>2];X=f[c>>2]|0;L=X+4|0;W=f[L>>2]|0;if(W>>>0<(f[X+8>>2]|0)>>>0){f[W>>2]=R;f[W+4>>2]=f[x>>2];f[W+8>>2]=f[t>>2];f[L>>2]=W+12}else If(X,e);f[A>>2]=(f[A>>2]|0)+1;X=S+1|0;if(X>>>0>=K>>>0){O=19;break b}S=X;Q=f[h>>2]|0}}}while(0);if((O|0)==19){O=0;fa=f[z>>2]|0}if(!fa){D=1;break}else F=fa}}while(0);fa=f[y>>2]|0;h=f[B>>2]|0;e=(h>>>0)/341|0;c=fa+(e<<2)|0;ha=f[q>>2]|0;a=ha;ga=fa;if((ha|0)!=(fa|0)?(ea=(f[c>>2]|0)+((h-(e*341|0)|0)*12|0)|0,e=(f[z>>2]|0)+h|0,h=(e>>>0)/341|0,V=(f[fa+(h<<2)>>2]|0)+((e-(h*341|0)|0)*12|0)|0,(V|0)!=(ea|0)):0){h=c;c=ea;while(1){ea=c+12|0;if((ea-(f[h>>2]|0)|0)==4092){e=h+4|0;sa=e;ta=f[e>>2]|0}else{sa=h;ta=ea}c=ta;if((V|0)==(c|0))break;else h=sa}}f[z>>2]=0;z=a-ga>>2;if(z>>>0>2){ga=fa;do{Ko(f[ga>>2]|0);ga=(f[y>>2]|0)+4|0;f[y>>2]=ga;ua=f[q>>2]|0;va=ua-ga>>2}while(va>>>0>2);wa=va;xa=ga;ya=ua}else{wa=z;xa=fa;ya=ha}switch(wa|0){case 1:{za=170;O=90;break}case 2:{za=341;O=90;break}default:{}}if((O|0)==90)f[B>>2]=za;if((xa|0)!=(ya|0)){za=xa;do{Ko(f[za>>2]|0);za=za+4|0}while((za|0)!=(ya|0));ya=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(ya|0))f[q>>2]=y+(~((y+-4-ya|0)>>>2)<<2)}ya=f[g>>2]|0;if(!ya){u=d;return D|0}Ko(ya);u=d;return D|0}function nb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+116|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+128|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+104|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+92|0;j=a+48|0;i=a+44|0;l=a+36|0;o=a+16|0;p=a+88|0;E=a+76|0;F=a+84|0;G=C;while(1){H=f[B>>2]|0;I=G+-1|0;J=H+I|0;K=f[y>>2]|0;L=(J>>>0)/341|0;M=f[K+(L<<2)>>2]|0;N=J-(L*341|0)|0;L=f[M+(N*12|0)>>2]|0;J=f[M+(N*12|0)+4>>2]|0;O=f[M+(N*12|0)+8>>2]|0;f[z>>2]=I;I=f[q>>2]|0;N=I-K|0;if((1-G-H+((N|0)==0?0:((N>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[I+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}I=f[m>>2]|0;N=I+(O*12|0)|0;H=(f[v>>2]|0)+(O*12|0)|0;if(L>>>0>b>>>0){D=0;break a}K=Pk(a,L,H,J)|0;if(K>>>0>=(f[h>>2]|0)>>>0){D=0;break a}J=(f[a>>2]|0)-(f[(f[H>>2]|0)+(K<<2)>>2]|0)|0;b:do if(!J){if(L|0){M=0;do{P=f[N>>2]|0;Q=f[P>>2]|0;f[e>>2]=Q;f[k>>2]=f[P+4>>2];f[r>>2]=f[P+8>>2];P=f[c>>2]|0;R=P+4|0;S=f[R>>2]|0;if(S>>>0<(f[P+8>>2]|0)>>>0){f[S>>2]=Q;f[S+4>>2]=f[k>>2];f[S+8>>2]=f[r>>2];f[R>>2]=S+12}else If(P,e);f[A>>2]=(f[A>>2]|0)+1;M=M+1|0}while(M>>>0<L>>>0)}}else{if(L>>>0>=3){if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}M=O+1|0;P=f[m>>2]|0;S=P+(M*12|0)|0;if((S|0)==(N|0))T=P;else{Df(S,f[N>>2]|0,f[I+(O*12|0)+4>>2]|0);T=f[m>>2]|0}S=(f[T+(M*12|0)>>2]|0)+(K<<2)|0;f[S>>2]=(f[S>>2]|0)+(1<<J+-1);S=(Z(L|0)|0)^31;f[e>>2]=0;ph(o,S,e);S=(L>>>1)-(f[e>>2]|0)|0;P=L-S|0;c:do if((S|0)==(P|0)){U=S;V=S}else{R=f[p>>2]|0;Q=f[F>>2]|0;do if((Q|0)!=(f[E>>2]|0)){W=(f[Q>>2]&1<<31-R|0)!=0;X=R+1|0;f[p>>2]=X;if((X|0)==32){f[F>>2]=Q+4;f[p>>2]=0;if(W){U=S;V=P;break c}else break}else if(W){U=S;V=P;break c}else break}while(0);U=P;V=S}while(0);S=f[v>>2]|0;P=f[S+(O*12|0)>>2]|0;Q=P+(K<<2)|0;f[Q>>2]=(f[Q>>2]|0)+1;Df(S+(M*12|0)|0,P,f[S+(O*12|0)+4>>2]|0);if(U|0){S=f[q>>2]|0;P=f[y>>2]|0;Q=S-P|0;R=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((Q|0)==0?0:((Q>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);Y=(f[B>>2]|0)+(f[z>>2]|0)|0;_=f[q>>2]|0;$=f[y>>2]|0}else{Y=R;_=S;$=P}if((_|0)==($|0))aa=0;else{P=(Y>>>0)/341|0;aa=(f[$+(P<<2)>>2]|0)+((Y-(P*341|0)|0)*12|0)|0}f[aa>>2]=U;f[aa+4>>2]=K;f[aa+8>>2]=O;f[z>>2]=(f[z>>2]|0)+1}if(V|0){P=f[q>>2]|0;S=f[y>>2]|0;R=P-S|0;Q=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(Q|0)){cc(g);ba=(f[B>>2]|0)+(f[z>>2]|0)|0;ca=f[q>>2]|0;da=f[y>>2]|0}else{ba=Q;ca=P;da=S}if((ca|0)==(da|0))ea=0;else{S=(ba>>>0)/341|0;ea=(f[da+(S<<2)>>2]|0)+((ba-(S*341|0)|0)*12|0)|0}f[ea>>2]=V;f[ea+4>>2]=K;f[ea+8>>2]=M;f[z>>2]=(f[z>>2]|0)+1}break}S=f[w>>2]|0;f[S>>2]=K;P=f[h>>2]|0;if(P>>>0>1){Q=1;R=P;W=K;while(1){W=(W|0)==(R+-1|0)?0:W+1|0;f[S+(Q<<2)>>2]=W;Q=Q+1|0;X=f[h>>2]|0;if(Q>>>0>=X>>>0){fa=X;break}else R=X}}else fa=P;if(L|0){R=0;Q=fa;while(1){if(!Q)ga=f[n>>2]|0;else{W=f[w>>2]|0;S=f[n>>2]|0;M=f[H>>2]|0;X=0;do{ha=W+(X<<2)|0;f[S+(f[ha>>2]<<2)>>2]=0;ia=f[ha>>2]|0;ja=(f[a>>2]|0)-(f[M+(ia<<2)>>2]|0)|0;do if(ja|0){ka=S+(ia<<2)|0;la=f[j>>2]|0;ma=32-la|0;if((ja|0)>(ma|0)){na=f[i>>2]|0;oa=na+4|0;if((oa|0)==(f[l>>2]|0)){f[ka>>2]=0;break}else{pa=f[na>>2]<<la;na=ja-ma|0;f[j>>2]=na;f[i>>2]=oa;qa=32-na|0;f[ka>>2]=(f[oa>>2]|0)>>>qa|pa>>>(qa-ma|0);break}}ma=f[i>>2]|0;if((ma|0)==(f[l>>2]|0)){f[ka>>2]=0;break}f[ka>>2]=f[ma>>2]<<la>>>(32-ja|0);la=(f[j>>2]|0)+ja|0;f[j>>2]=la;if((la|0)!=32)break;f[i>>2]=ma+4;f[j>>2]=0}while(0);ja=f[ha>>2]|0;ia=S+(ja<<2)|0;f[ia>>2]=f[ia>>2]|f[(f[N>>2]|0)+(ja<<2)>>2];X=X+1|0}while(X>>>0<(f[h>>2]|0)>>>0);ga=S}S=f[ga>>2]|0;f[e>>2]=S;f[x>>2]=f[ga+4>>2];f[t>>2]=f[ga+8>>2];X=f[c>>2]|0;M=X+4|0;W=f[M>>2]|0;if(W>>>0<(f[X+8>>2]|0)>>>0){f[W>>2]=S;f[W+4>>2]=f[x>>2];f[W+8>>2]=f[t>>2];f[M>>2]=W+12}else If(X,e);f[A>>2]=(f[A>>2]|0)+1;X=R+1|0;if(X>>>0>=L>>>0)break b;R=X;Q=f[h>>2]|0}}}while(0);G=f[z>>2]|0;if(!G){D=1;break}}}while(0);h=f[y>>2]|0;e=f[B>>2]|0;c=(e>>>0)/341|0;ga=h+(c<<2)|0;a=f[q>>2]|0;fa=a;ea=h;if((a|0)!=(h|0)?(V=(f[ga>>2]|0)+((e-(c*341|0)|0)*12|0)|0,c=(f[z>>2]|0)+e|0,e=(c>>>0)/341|0,ba=(f[h+(e<<2)>>2]|0)+((c-(e*341|0)|0)*12|0)|0,(ba|0)!=(V|0)):0){e=ga;ga=V;while(1){V=ga+12|0;if((V-(f[e>>2]|0)|0)==4092){c=e+4|0;ra=c;sa=f[c>>2]|0}else{ra=e;sa=V}ga=sa;if((ba|0)==(ga|0))break;else e=ra}}f[z>>2]=0;z=fa-ea>>2;if(z>>>0>2){ea=h;do{Ko(f[ea>>2]|0);ea=(f[y>>2]|0)+4|0;f[y>>2]=ea;ta=f[q>>2]|0;ua=ta-ea>>2}while(ua>>>0>2);va=ua;wa=ea;xa=ta}else{va=z;wa=h;xa=a}switch(va|0){case 1:{ya=170;za=89;break}case 2:{ya=341;za=89;break}default:{}}if((za|0)==89)f[B>>2]=ya;if((wa|0)!=(xa|0)){ya=wa;do{Ko(f[ya>>2]|0);ya=ya+4|0}while((ya|0)!=(xa|0));xa=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(xa|0))f[q>>2]=y+(~((y+-4-xa|0)>>>2)<<2)}xa=f[g>>2]|0;if(!xa){u=d;return D|0}Ko(xa);u=d;return D|0}function ob(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,o=0,q=0,r=0,s=Ia,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;if(!g){i=0;return i|0}do switch(f[a+28>>2]|0){case 1:{k=a+24|0;l=b[k>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){m=f[f[a>>2]>>2]|0;o=a+40|0;q=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;r=vl(q|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=m+r|0;if(!(b[a+32>>0]|0)){r=o;m=0;while(1){s=_(b[r>>0]|0);n[g+(m<<2)>>2]=s;m=m+1|0;q=b[k>>0]|0;if((m|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){t=q;break}else r=r+1|0}}else{r=o;m=0;while(1){s=_(_(b[r>>0]|0)/_(127.0));n[g+(m<<2)>>2]=s;m=m+1|0;q=b[k>>0]|0;if((m|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){t=q;break}else r=r+1|0}}}else t=l;r=t<<24>>24;if(t<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(r<<2)|0,0,(e<<24>>24)-r<<2|0)|0;i=1;return i|0}case 2:{r=a+24|0;m=b[r>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0){k=f[f[a>>2]>>2]|0;o=a+40|0;q=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;u=vl(q|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=k+u|0;if(!(b[a+32>>0]|0)){u=o;k=0;while(1){s=_(h[u>>0]|0);n[g+(k<<2)>>2]=s;k=k+1|0;q=b[r>>0]|0;if((k|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){v=q;break}else u=u+1|0}}else{u=o;k=0;while(1){s=_(_(h[u>>0]|0)/_(255.0));n[g+(k<<2)>>2]=s;k=k+1|0;l=b[r>>0]|0;if((k|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){v=l;break}else u=u+1|0}}}else v=m;u=v<<24>>24;if(v<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 3:{u=a+48|0;k=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,k|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;k=b[r>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;l=0;while(1){s=_(d[u>>1]|0);n[g+(l<<2)>>2]=s;l=l+1|0;q=b[r>>0]|0;if((l|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){w=q;break}else u=u+2|0}}else{u=o;l=0;while(1){s=_(_(d[u>>1]|0)/_(32767.0));n[g+(l<<2)>>2]=s;l=l+1|0;m=b[r>>0]|0;if((l|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){w=m;break}else u=u+2|0}}else w=k;u=w<<24>>24;if(w<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 4:{u=a+48|0;l=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,l|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;l=b[r>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;m=0;while(1){s=_(j[u>>1]|0);n[g+(m<<2)>>2]=s;m=m+1|0;q=b[r>>0]|0;if((m|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){x=q;break}else u=u+2|0}}else{u=o;m=0;while(1){s=_(_(j[u>>1]|0)/_(65535.0));n[g+(m<<2)>>2]=s;m=m+1|0;k=b[r>>0]|0;if((m|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){x=k;break}else u=u+2|0}}else x=l;u=x<<24>>24;if(x<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 5:{u=a+48|0;m=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,m|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;m=b[r>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;k=0;while(1){s=_(f[u>>2]|0);n[g+(k<<2)>>2]=s;k=k+1|0;q=b[r>>0]|0;if((k|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){y=q;break}else u=u+4|0}}else{u=o;k=0;while(1){s=_(_(f[u>>2]|0)*_(4.65661287e-10));n[g+(k<<2)>>2]=s;k=k+1|0;l=b[r>>0]|0;if((k|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){y=l;break}else u=u+4|0}}else y=m;u=y<<24>>24;if(y<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 6:{u=a+48|0;k=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,k|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;k=b[r>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;l=0;while(1){s=_((f[u>>2]|0)>>>0);n[g+(l<<2)>>2]=s;l=l+1|0;q=b[r>>0]|0;if((l|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){z=q;break}else u=u+4|0}}else{u=o;l=0;while(1){s=_(_((f[u>>2]|0)>>>0)*_(2.32830644e-10));n[g+(l<<2)>>2]=s;l=l+1|0;m=b[r>>0]|0;if((l|0)>=((m<<24>>24>e<<24>>24?e:m)<<24>>24|0)){z=m;break}else u=u+4|0}}else z=k;u=z<<24>>24;if(z<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 7:{u=a+48|0;l=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,l|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;l=b[r>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;m=0;while(1){q=u;s=_(+((f[q>>2]|0)>>>0)+4294967296.0*+(f[q+4>>2]|0));n[g+(m<<2)>>2]=s;m=m+1|0;q=b[r>>0]|0;if((m|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){A=q;break}else u=u+8|0}}else{u=o;m=0;while(1){k=u;s=_(_(+((f[k>>2]|0)>>>0)+4294967296.0*+(f[k+4>>2]|0))*_(1.08420217e-19));n[g+(m<<2)>>2]=s;m=m+1|0;k=b[r>>0]|0;if((m|0)>=((k<<24>>24>e<<24>>24?e:k)<<24>>24|0)){A=k;break}else u=u+8|0}}else A=l;u=A<<24>>24;if(A<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 8:{u=a+48|0;m=f[u>>2]|0;r=f[u+4>>2]|0;u=a+40|0;o=(vl(Bk(f[u>>2]|0,f[u+4>>2]|0,f[c>>2]|0,0)|0,H|0,m|0,r|0)|0)+(f[f[a>>2]>>2]|0)|0;r=a+24|0;m=b[r>>0]|0;if((m<<24>>24>e<<24>>24?e:m)<<24>>24>0)if(!(b[a+32>>0]|0)){u=o;k=0;while(1){q=u;s=_(+((f[q>>2]|0)>>>0)+4294967296.0*+((f[q+4>>2]|0)>>>0));n[g+(k<<2)>>2]=s;k=k+1|0;q=b[r>>0]|0;if((k|0)>=((q<<24>>24>e<<24>>24?e:q)<<24>>24|0)){B=q;break}else u=u+8|0}}else{u=o;k=0;while(1){l=u;s=_(_(+((f[l>>2]|0)>>>0)+4294967296.0*+((f[l+4>>2]|0)>>>0))*_(5.42101086e-20));n[g+(k<<2)>>2]=s;k=k+1|0;l=b[r>>0]|0;if((k|0)>=((l<<24>>24>e<<24>>24?e:l)<<24>>24|0)){B=l;break}else u=u+8|0}}else B=m;u=B<<24>>24;if(B<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(u<<2)|0,0,(e<<24>>24)-u<<2|0)|0;i=1;return i|0}case 9:{u=a+24|0;k=b[u>>0]|0;if((k<<24>>24>e<<24>>24?e:k)<<24>>24>0){r=f[f[a>>2]>>2]|0;o=a+40|0;l=Bk(f[o>>2]|0,f[o+4>>2]|0,f[c>>2]|0,0)|0;o=a+48|0;q=vl(l|0,H|0,f[o>>2]|0,f[o+4>>2]|0)|0;o=r+q|0;q=0;while(1){f[g+(q<<2)>>2]=f[o>>2];q=q+1|0;r=b[u>>0]|0;if((q|0)>=((r<<24>>24>e<<24>>24?e:r)<<24>>24|0)){C=r;break}else o=o+4|0}}else C=k;o=C<<24>>24;if(C<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(o<<2)|0,0,(e<<24>>24)-o<<2|0)|0;i=1;return i|0}case 10:{o=a+24|0;q=b[o>>0]|0;if((q<<24>>24>e<<24>>24?e:q)<<24>>24>0){u=f[f[a>>2]>>2]|0;m=a+40|0;r=Bk(f[m>>2]|0,f[m+4>>2]|0,f[c>>2]|0,0)|0;m=a+48|0;l=vl(r|0,H|0,f[m>>2]|0,f[m+4>>2]|0)|0;m=u+l|0;l=0;while(1){s=_(+p[m>>3]);n[g+(l<<2)>>2]=s;l=l+1|0;u=b[o>>0]|0;if((l|0)>=((u<<24>>24>e<<24>>24?e:u)<<24>>24|0)){D=u;break}else m=m+8|0}}else D=q;m=D<<24>>24;if(D<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(m<<2)|0,0,(e<<24>>24)-m<<2|0)|0;i=1;return i|0}case 11:{m=a+24|0;l=b[m>>0]|0;if((l<<24>>24>e<<24>>24?e:l)<<24>>24>0){o=f[f[a>>2]>>2]|0;k=a+40|0;u=Bk(f[k>>2]|0,f[k+4>>2]|0,f[c>>2]|0,0)|0;k=a+48|0;r=vl(u|0,H|0,f[k>>2]|0,f[k+4>>2]|0)|0;k=o+r|0;r=0;while(1){s=_((b[k>>0]|0)!=0&1);n[g+(r<<2)>>2]=s;r=r+1|0;o=b[m>>0]|0;if((r|0)>=((o<<24>>24>e<<24>>24?e:o)<<24>>24|0)){E=o;break}else k=k+1|0}}else E=l;k=E<<24>>24;if(E<<24>>24>=e<<24>>24){i=1;return i|0}oh(g+(k<<2)|0,0,(e<<24>>24)-k<<2|0)|0;i=1;return i|0}default:{i=0;return i|0}}while(0);return 0}function pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;d=u;u=u+48|0;e=d+24|0;g=d;h=a+12|0;i=f[h>>2]|0;f[e>>2]=0;j=e+4|0;f[j>>2]=0;k=e+8|0;f[k>>2]=0;do if(i)if(i>>>0>1073741823)$n(e);else{l=i<<2;m=wk(l)|0;f[e>>2]=m;n=m+(i<<2)|0;f[k>>2]=n;oh(m|0,0,l|0)|0;f[j>>2]=n;o=n;p=m;break}else{o=0;p=0}while(0);m=a+116|0;n=f[m>>2]|0;l=f[n>>2]|0;if(!l){q=n+8|0;r=n+4|0;s=p;t=o;v=i}else{i=n+4|0;f[i>>2]=l;Ko(l);l=n+8|0;f[l>>2]=0;f[i>>2]=0;f[n>>2]=0;q=l;r=i;s=f[e>>2]|0;t=f[j>>2]|0;v=f[h>>2]|0}f[n>>2]=s;f[r>>2]=t;f[q>>2]=f[k>>2];f[e>>2]=0;k=e+4|0;f[k>>2]=0;q=e+8|0;f[q>>2]=0;do if(v)if(v>>>0>1073741823)$n(e);else{t=v<<2;r=wk(t)|0;f[e>>2]=r;s=r+(v<<2)|0;f[q>>2]=s;oh(r|0,0,t|0)|0;f[k>>2]=s;w=s;x=r;break}else{w=0;x=0}while(0);v=a+128|0;r=f[v>>2]|0;s=f[r>>2]|0;if(!s){y=r+8|0;z=r+4|0;A=x;B=w}else{w=r+4|0;f[w>>2]=s;Ko(s);s=r+8|0;f[s>>2]=0;f[w>>2]=0;f[r>>2]=0;y=s;z=w;A=f[e>>2]|0;B=f[k>>2]|0}f[r>>2]=A;f[z>>2]=B;f[y>>2]=f[q>>2];f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;f[g+20>>2]=0;q=g+8|0;y=g+4|0;B=g+16|0;z=g+20|0;cc(g);A=f[y>>2]|0;r=(f[B>>2]|0)+(f[z>>2]|0)|0;if((f[q>>2]|0)==(A|0))C=0;else{k=(r>>>0)/341|0;C=(f[A+(k<<2)>>2]|0)+((r-(k*341|0)|0)*12|0)|0}f[C>>2]=b;f[C+4>>2]=0;f[C+8>>2]=0;C=(f[z>>2]|0)+1|0;f[z>>2]=C;a:do if(!C)D=1;else{k=e+4|0;r=e+8|0;A=a+8|0;w=a+104|0;s=a+4|0;x=e+4|0;t=e+8|0;n=a+92|0;j=a+48|0;i=a+44|0;l=a+36|0;o=a+16|0;p=a+88|0;E=a+76|0;F=a+84|0;G=C;while(1){H=f[B>>2]|0;I=G+-1|0;J=H+I|0;K=f[y>>2]|0;L=(J>>>0)/341|0;M=f[K+(L<<2)>>2]|0;N=J-(L*341|0)|0;L=f[M+(N*12|0)>>2]|0;J=f[M+(N*12|0)+4>>2]|0;O=f[M+(N*12|0)+8>>2]|0;f[z>>2]=I;I=f[q>>2]|0;N=I-K|0;if((1-G-H+((N|0)==0?0:((N>>2)*341|0)+-1|0)|0)>>>0>681){Ko(f[I+-4>>2]|0);f[q>>2]=(f[q>>2]|0)+-4}I=f[m>>2]|0;N=I+(O*12|0)|0;if(L>>>0>b>>>0){D=0;break a}H=f[h>>2]|0;K=(H+-1|0)==(J|0)?0:J+1|0;if(K>>>0>=H>>>0){D=0;break a}H=(f[v>>2]|0)+(O*12|0)|0;J=(f[a>>2]|0)-(f[(f[H>>2]|0)+(K<<2)>>2]|0)|0;b:do if(!J){if(L|0){M=0;do{P=f[N>>2]|0;Q=f[P>>2]|0;f[e>>2]=Q;f[k>>2]=f[P+4>>2];f[r>>2]=f[P+8>>2];P=f[c>>2]|0;R=P+4|0;S=f[R>>2]|0;if(S>>>0<(f[P+8>>2]|0)>>>0){f[S>>2]=Q;f[S+4>>2]=f[k>>2];f[S+8>>2]=f[r>>2];f[R>>2]=S+12}else If(P,e);f[A>>2]=(f[A>>2]|0)+1;M=M+1|0}while(M>>>0<L>>>0)}}else{if(L>>>0>=3){if((f[A>>2]|0)>>>0>(f[s>>2]|0)>>>0){D=0;break a}M=O+1|0;Df(I+(M*12|0)|0,f[N>>2]|0,f[I+(O*12|0)+4>>2]|0);P=(f[(f[m>>2]|0)+(M*12|0)>>2]|0)+(K<<2)|0;f[P>>2]=(f[P>>2]|0)+(1<<J+-1);P=(Z(L|0)|0)^31;f[e>>2]=0;ph(o,P,e);P=(L>>>1)-(f[e>>2]|0)|0;S=L-P|0;c:do if((P|0)==(S|0)){T=P;U=P}else{R=f[p>>2]|0;Q=f[F>>2]|0;do if((Q|0)!=(f[E>>2]|0)){V=(f[Q>>2]&1<<31-R|0)!=0;W=R+1|0;f[p>>2]=W;if((W|0)==32){f[F>>2]=Q+4;f[p>>2]=0;if(V){T=P;U=S;break c}else break}else if(V){T=P;U=S;break c}else break}while(0);T=S;U=P}while(0);P=f[v>>2]|0;S=f[P+(O*12|0)>>2]|0;Q=S+(K<<2)|0;f[Q>>2]=(f[Q>>2]|0)+1;Df(P+(M*12|0)|0,S,f[P+(O*12|0)+4>>2]|0);if(T|0){P=f[q>>2]|0;S=f[y>>2]|0;Q=P-S|0;R=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((Q|0)==0?0:((Q>>2)*341|0)+-1|0)|0)==(R|0)){cc(g);X=(f[B>>2]|0)+(f[z>>2]|0)|0;Y=f[q>>2]|0;_=f[y>>2]|0}else{X=R;Y=P;_=S}if((Y|0)==(_|0))$=0;else{S=(X>>>0)/341|0;$=(f[_+(S<<2)>>2]|0)+((X-(S*341|0)|0)*12|0)|0}f[$>>2]=T;f[$+4>>2]=K;f[$+8>>2]=O;f[z>>2]=(f[z>>2]|0)+1}if(U|0){S=f[q>>2]|0;P=f[y>>2]|0;R=S-P|0;Q=(f[z>>2]|0)+(f[B>>2]|0)|0;if((((R|0)==0?0:((R>>2)*341|0)+-1|0)|0)==(Q|0)){cc(g);aa=(f[B>>2]|0)+(f[z>>2]|0)|0;ba=f[q>>2]|0;ca=f[y>>2]|0}else{aa=Q;ba=S;ca=P}if((ba|0)==(ca|0))da=0;else{P=(aa>>>0)/341|0;da=(f[ca+(P<<2)>>2]|0)+((aa-(P*341|0)|0)*12|0)|0}f[da>>2]=U;f[da+4>>2]=K;f[da+8>>2]=M;f[z>>2]=(f[z>>2]|0)+1}break}P=f[w>>2]|0;f[P>>2]=K;S=f[h>>2]|0;if(S>>>0>1){Q=1;R=S;V=K;while(1){V=(V|0)==(R+-1|0)?0:V+1|0;f[P+(Q<<2)>>2]=V;Q=Q+1|0;W=f[h>>2]|0;if(Q>>>0>=W>>>0){ea=W;break}else R=W}}else ea=S;if(L|0){R=0;Q=ea;while(1){if(!Q)fa=f[n>>2]|0;else{V=f[w>>2]|0;P=f[n>>2]|0;M=f[H>>2]|0;W=0;do{ga=V+(W<<2)|0;f[P+(f[ga>>2]<<2)>>2]=0;ha=f[ga>>2]|0;ia=(f[a>>2]|0)-(f[M+(ha<<2)>>2]|0)|0;do if(ia|0){ja=P+(ha<<2)|0;ka=f[j>>2]|0;la=32-ka|0;if((ia|0)>(la|0)){ma=f[i>>2]|0;na=ma+4|0;if((na|0)==(f[l>>2]|0)){f[ja>>2]=0;break}else{oa=f[ma>>2]<<ka;ma=ia-la|0;f[j>>2]=ma;f[i>>2]=na;pa=32-ma|0;f[ja>>2]=(f[na>>2]|0)>>>pa|oa>>>(pa-la|0);break}}la=f[i>>2]|0;if((la|0)==(f[l>>2]|0)){f[ja>>2]=0;break}f[ja>>2]=f[la>>2]<<ka>>>(32-ia|0);ka=(f[j>>2]|0)+ia|0;f[j>>2]=ka;if((ka|0)!=32)break;f[i>>2]=la+4;f[j>>2]=0}while(0);ia=f[ga>>2]|0;ha=P+(ia<<2)|0;f[ha>>2]=f[ha>>2]|f[(f[N>>2]|0)+(ia<<2)>>2];W=W+1|0}while(W>>>0<(f[h>>2]|0)>>>0);fa=P}P=f[fa>>2]|0;f[e>>2]=P;f[x>>2]=f[fa+4>>2];f[t>>2]=f[fa+8>>2];W=f[c>>2]|0;M=W+4|0;V=f[M>>2]|0;if(V>>>0<(f[W+8>>2]|0)>>>0){f[V>>2]=P;f[V+4>>2]=f[x>>2];f[V+8>>2]=f[t>>2];f[M>>2]=V+12}else If(W,e);f[A>>2]=(f[A>>2]|0)+1;W=R+1|0;if(W>>>0>=L>>>0)break b;R=W;Q=f[h>>2]|0}}}while(0);G=f[z>>2]|0;if(!G){D=1;break}}}while(0);h=f[y>>2]|0;e=f[B>>2]|0;c=(e>>>0)/341|0;fa=h+(c<<2)|0;a=f[q>>2]|0;ea=a;da=h;if((a|0)!=(h|0)?(U=(f[fa>>2]|0)+((e-(c*341|0)|0)*12|0)|0,c=(f[z>>2]|0)+e|0,e=(c>>>0)/341|0,aa=(f[h+(e<<2)>>2]|0)+((c-(e*341|0)|0)*12|0)|0,(aa|0)!=(U|0)):0){e=fa;fa=U;while(1){U=fa+12|0;if((U-(f[e>>2]|0)|0)==4092){c=e+4|0;qa=c;ra=f[c>>2]|0}else{qa=e;ra=U}fa=ra;if((aa|0)==(fa|0))break;else e=qa}}f[z>>2]=0;z=ea-da>>2;if(z>>>0>2){da=h;do{Ko(f[da>>2]|0);da=(f[y>>2]|0)+4|0;f[y>>2]=da;sa=f[q>>2]|0;ta=sa-da>>2}while(ta>>>0>2);ua=ta;va=da;wa=sa}else{ua=z;va=h;wa=a}switch(ua|0){case 1:{xa=170;ya=87;break}case 2:{xa=341;ya=87;break}default:{}}if((ya|0)==87)f[B>>2]=xa;if((va|0)!=(wa|0)){xa=va;do{Ko(f[xa>>2]|0);xa=xa+4|0}while((xa|0)!=(wa|0));wa=f[y>>2]|0;y=f[q>>2]|0;if((y|0)!=(wa|0))f[q>>2]=y+(~((y+-4-wa|0)>>>2)<<2)}wa=f[g>>2]|0;if(!wa){u=d;return D|0}Ko(wa);u=d;return D|0}function qb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;g=u;u=u+64|0;d=g+16|0;h=g;i=a+8|0;f[i>>2]=e;j=a+32|0;k=a+36|0;l=f[j>>2]|0;m=(f[k>>2]|0)-l>>2;if(m>>>0>=e>>>0){if(m>>>0>e>>>0)f[k>>2]=l+(e<<2)}else Eg(j,e-m|0);m=d;j=m+48|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(j|0));f[h>>2]=0;if(!e){n=0;o=0}else{Of(d,e,h);n=f[d+12>>2]|0;o=f[d+16>>2]|0}f[h>>2]=0;m=d+16|0;j=o-n>>2;if(j>>>0>=e>>>0){if(j>>>0>e>>>0)f[m>>2]=n+(e<<2)}else Of(d+12|0,e-j|0,h);j=d+24|0;f[h>>2]=0;n=d+28|0;m=f[j>>2]|0;o=(f[n>>2]|0)-m>>2;if(o>>>0>=e>>>0){if(o>>>0>e>>>0)f[n>>2]=m+(e<<2)}else Of(j,e-o|0,h);o=d+36|0;f[h>>2]=0;j=d+40|0;m=f[o>>2]|0;n=(f[j>>2]|0)-m>>2;if(n>>>0>=e>>>0){if(n>>>0>e>>>0)f[j>>2]=m+(e<<2)}else Of(o,e-n|0,h);n=f[d>>2]|0;if((f[i>>2]|0)>0){o=a+16|0;m=a+32|0;j=a+12|0;l=0;do{k=f[n+(l<<2)>>2]|0;p=f[o>>2]|0;do if((k|0)<=(p|0)){q=f[j>>2]|0;r=f[m>>2]|0;s=r+(l<<2)|0;if((k|0)<(q|0)){f[s>>2]=q;t=r;break}else{f[s>>2]=k;t=r;break}}else{r=f[m>>2]|0;f[r+(l<<2)>>2]=p;t=r}while(0);l=l+1|0;v=f[i>>2]|0}while((l|0)<(v|0));if((v|0)>0){v=a+20|0;l=0;do{m=(f[b+(l<<2)>>2]|0)+(f[t+(l<<2)>>2]|0)|0;n=c+(l<<2)|0;f[n>>2]=m;if((m|0)<=(f[o>>2]|0)){if((m|0)<(f[j>>2]|0)){w=(f[v>>2]|0)+m|0;x=19}}else{w=m-(f[v>>2]|0)|0;x=19}if((x|0)==19){x=0;f[n>>2]=w}l=l+1|0}while((l|0)<(f[i>>2]|0))}}l=f[a+48>>2]|0;w=f[a+52>>2]|0;v=wk(16)|0;f[v>>2]=0;f[v+4>>2]=0;f[v+8>>2]=0;f[v+12>>2]=0;f[h>>2]=0;j=h+4|0;f[j>>2]=0;o=h+8|0;f[o>>2]=0;do if(e)if(e>>>0>1073741823)$n(h);else{t=e<<2;n=wk(t)|0;f[h>>2]=n;m=n+(e<<2)|0;f[o>>2]=m;oh(n|0,0,t|0)|0;f[j>>2]=m;y=n;break}else y=0;while(0);o=f[a+56>>2]|0;n=f[o>>2]|0;m=(f[o+4>>2]|0)-n|0;t=m>>2;a:do if((m|0)>4){p=n;k=(e|0)>0;r=l+64|0;s=l+28|0;q=a+16|0;z=a+32|0;A=a+12|0;B=a+20|0;C=e<<2;D=(e|0)==1;E=1;while(1){if(t>>>0<=E>>>0){x=30;break}F=f[p+(E<<2)>>2]|0;do if((F|0)!=-1){G=(((F>>>0)%3|0|0)==0?2:-1)+F|0;H=(G|0)==-1;I=G>>>5;J=1<<(G&31);K=1;L=0;M=F;N=f[l>>2]|0;b:while(1){O=f[d+(L*12|0)>>2]|0;if(((f[N+(M>>>5<<2)>>2]&1<<(M&31)|0)==0?(P=f[(f[(f[r>>2]|0)+12>>2]|0)+(M<<2)>>2]|0,(P|0)!=-1):0)?(Q=f[s>>2]|0,R=f[w>>2]|0,S=f[R+(f[Q+(P<<2)>>2]<<2)>>2]|0,T=P+1|0,U=f[R+(f[Q+((((T>>>0)%3|0|0)==0?P+-2|0:T)<<2)>>2]<<2)>>2]|0,T=f[R+(f[Q+((((P>>>0)%3|0|0)==0?2:-1)+P<<2)>>2]<<2)>>2]|0,(S|0)<(E|0)&(U|0)<(E|0)&(T|0)<(E|0)):0){P=W(S,e)|0;S=W(U,e)|0;U=W(T,e)|0;if(k){T=0;do{f[O+(T<<2)>>2]=(f[c+(T+U<<2)>>2]|0)+(f[c+(T+S<<2)>>2]|0)-(f[c+(T+P<<2)>>2]|0);T=T+1|0}while((T|0)!=(e|0))}T=L+1|0;if((T|0)==4){V=4;break}else X=T}else X=L;do if(K){T=M+1|0;P=((T>>>0)%3|0|0)==0?M+-2|0:T;if((P|0)!=-1){T=f[l>>2]|0;if((f[T+(P>>>5<<2)>>2]&1<<(P&31)|0)==0?(S=f[(f[(f[r>>2]|0)+12>>2]|0)+(P<<2)>>2]|0,P=S+1|0,(S|0)!=-1):0){Y=((P>>>0)%3|0|0)==0?S+-2|0:P;Z=T}else{Y=-1;Z=T}}else{Y=-1;Z=N}}else{T=(((M>>>0)%3|0|0)==0?2:-1)+M|0;if(((T|0)!=-1?(f[N+(T>>>5<<2)>>2]&1<<(T&31)|0)==0:0)?(P=f[(f[(f[r>>2]|0)+12>>2]|0)+(T<<2)>>2]|0,(P|0)!=-1):0)if(!((P>>>0)%3|0)){Y=P+2|0;Z=N;break}else{Y=P+-1|0;Z=N;break}else{Y=-1;Z=N}}while(0);if((Y|0)==(F|0)){x=59;break}P=(Y|0)!=-1;T=P|K^1;do if(!(T|H)){S=f[l>>2]|0;if(f[S+(I<<2)>>2]&J|0){x=59;break b}U=f[(f[(f[r>>2]|0)+12>>2]|0)+(G<<2)>>2]|0;if((U|0)==-1){x=59;break b}if(!((U>>>0)%3|0)){_=0;$=U+2|0;aa=S;break}else{_=0;$=U+-1|0;aa=S;break}}else{_=P&K;$=T?Y:-1;aa=Z}while(0);if(($|0)==-1){x=59;break}else{K=_;L=X;M=$;N=aa}}if((x|0)==59){x=0;if((X|0)>0)V=X;else{x=60;break}}if(k){oh(f[h>>2]|0,0,C|0)|0;N=V+-1|0;M=v+(N<<2)|0;L=a+60+(N*12|0)+4|0;K=a+60+(N*12|0)|0;N=f[h>>2]|0;G=0;J=0;while(1){I=f[M>>2]|0;f[M>>2]=I+1;if((f[L>>2]|0)>>>0<=I>>>0){ba=N;ca=0;break a}if(!(f[(f[K>>2]|0)+(I>>>5<<2)>>2]&1<<(I&31))){I=f[d+(G*12|0)>>2]|0;H=0;do{T=N+(H<<2)|0;f[T>>2]=(f[T>>2]|0)+(f[I+(H<<2)>>2]|0);H=H+1|0}while((H|0)!=(e|0));da=J+1|0}else da=J;G=G+1|0;if((G|0)>=(V|0)){ea=da;break}else J=da}}else{J=V+-1|0;G=v+(J<<2)|0;N=a+60+(J*12|0)|0;K=f[h>>2]|0;L=f[a+60+(J*12|0)+4>>2]|0;J=0;M=0;H=f[G>>2]|0;while(1){I=H;H=H+1|0;f[G>>2]=H;if(L>>>0<=I>>>0){ba=K;ca=0;break a}T=M+((f[(f[N>>2]|0)+(I>>>5<<2)>>2]&1<<(I&31)|0)==0&1)|0;J=J+1|0;if((J|0)>=(V|0)){ea=T;break}else M=T}}M=W(E,e)|0;if(ea){J=f[h>>2]|0;if(k?(f[J>>2]=(f[J>>2]|0)/(ea|0)|0,!D):0){N=1;do{K=J+(N<<2)|0;f[K>>2]=(f[K>>2]|0)/(ea|0)|0;N=N+1|0}while((N|0)!=(e|0))}N=b+(M<<2)|0;K=c+(M<<2)|0;if((f[i>>2]|0)>0){L=0;do{H=f[J+(L<<2)>>2]|0;G=f[q>>2]|0;do if((H|0)<=(G|0)){T=f[A>>2]|0;I=f[z>>2]|0;P=I+(L<<2)|0;if((H|0)<(T|0)){f[P>>2]=T;fa=I;break}else{f[P>>2]=H;fa=I;break}}else{I=f[z>>2]|0;f[I+(L<<2)>>2]=G;fa=I}while(0);L=L+1|0;ga=f[i>>2]|0}while((L|0)<(ga|0));if((ga|0)>0){L=0;do{J=(f[N+(L<<2)>>2]|0)+(f[fa+(L<<2)>>2]|0)|0;G=K+(L<<2)|0;f[G>>2]=J;do if((J|0)>(f[q>>2]|0)){ha=J-(f[B>>2]|0)|0;x=106}else{if((J|0)>=(f[A>>2]|0))break;ha=(f[B>>2]|0)+J|0;x=106}while(0);if((x|0)==106){x=0;f[G>>2]=ha}L=L+1|0}while((L|0)<(f[i>>2]|0))}}}else{ia=M;x=73}}else x=60;while(0);if((x|0)==60){x=0;ia=W(E,e)|0;x=73}if((x|0)==73?(x=0,F=c+((W(E+-1|0,e)|0)<<2)|0,L=b+(ia<<2)|0,K=c+(ia<<2)|0,(f[i>>2]|0)>0):0){N=0;do{J=f[F+(N<<2)>>2]|0;H=f[q>>2]|0;do if((J|0)<=(H|0)){I=f[A>>2]|0;P=f[z>>2]|0;T=P+(N<<2)|0;if((J|0)<(I|0)){f[T>>2]=I;ja=P;break}else{f[T>>2]=J;ja=P;break}}else{P=f[z>>2]|0;f[P+(N<<2)>>2]=H;ja=P}while(0);N=N+1|0;ka=f[i>>2]|0}while((N|0)<(ka|0));if((ka|0)>0){N=0;do{F=(f[L+(N<<2)>>2]|0)+(f[ja+(N<<2)>>2]|0)|0;H=K+(N<<2)|0;f[H>>2]=F;if((F|0)<=(f[q>>2]|0)){if((F|0)<(f[A>>2]|0)){la=(f[B>>2]|0)+F|0;x=87}}else{la=F-(f[B>>2]|0)|0;x=87}if((x|0)==87){x=0;f[H>>2]=la}N=N+1|0}while((N|0)<(f[i>>2]|0))}}E=E+1|0;if((E|0)>=(t|0)){x=110;break}}if((x|0)==30)$n(o);else if((x|0)==110){ba=f[h>>2]|0;ca=1;break}}else{ba=y;ca=1}while(0);if(ba|0){f[j>>2]=ba;Ko(ba)}Ko(v);v=f[d+36>>2]|0;if(v|0){f[d+40>>2]=v;Ko(v)}v=f[d+24>>2]|0;if(v|0){f[d+28>>2]=v;Ko(v)}v=f[d+12>>2]|0;if(v|0){f[d+16>>2]=v;Ko(v)}v=f[d>>2]|0;if(!v){u=g;return ca|0}f[d+4>>2]=v;Ko(v);u=g;return ca|0}function rb(a,c,d,e,g,i){a=a|0;c=+c;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;j=u;u=u+560|0;k=j+8|0;l=j;m=j+524|0;n=m;o=j+512|0;f[l>>2]=0;p=o+12|0;q=em(c)|0;r=H;if((r|0)<0){s=-c;t=em(s)|0;v=s;w=1;x=14101;y=H;z=t}else{v=c;w=(g&2049|0)!=0&1;x=(g&2048|0)==0?((g&1|0)==0?14102:14107):14104;y=r;z=q}do if(0==0&(y&2146435072|0)==2146435072){q=(i&32|0)!=0;z=w+3|0;vi(a,32,d,z,g&-65537);Pm(a,x,w);Pm(a,v!=v|0.0!=0.0?(q?14128:14132):q?14120:14124,3);vi(a,32,d,z,g^8192);A=z}else{c=+oo(v,l)*2.0;z=c!=0.0;if(z)f[l>>2]=(f[l>>2]|0)+-1;q=i|32;if((q|0)==97){r=i&32;t=(r|0)==0?x:x+9|0;B=w|2;C=12-e|0;do if(!(e>>>0>11|(C|0)==0)){s=8.0;D=C;do{D=D+-1|0;s=s*16.0}while((D|0)!=0);if((b[t>>0]|0)==45){E=-(s+(-c-s));break}else{E=c+s-s;break}}else E=c;while(0);C=f[l>>2]|0;D=(C|0)<0?0-C|0:C;F=xh(D,((D|0)<0)<<31>>31,p)|0;if((F|0)==(p|0)){D=o+11|0;b[D>>0]=48;G=D}else G=F;b[G+-1>>0]=(C>>31&2)+43;C=G+-2|0;b[C>>0]=i+15;F=(e|0)<1;D=(g&8|0)==0;I=m;J=E;while(1){K=~~J;L=I+1|0;b[I>>0]=r|h[14136+K>>0];J=(J-+(K|0))*16.0;if((L-n|0)==1?!(D&(F&J==0.0)):0){b[L>>0]=46;M=I+2|0}else M=L;if(!(J!=0.0))break;else I=M}I=M;if((e|0)!=0?(-2-n+I|0)<(e|0):0){F=p;D=C;N=e+2+F-D|0;O=F;P=D}else{D=p;F=C;N=D-n-F+I|0;O=D;P=F}F=N+B|0;vi(a,32,d,F,g);Pm(a,t,B);vi(a,48,d,F,g^65536);D=I-n|0;Pm(a,m,D);I=O-P|0;vi(a,48,N-(D+I)|0,0,0);Pm(a,C,I);vi(a,32,d,F,g^8192);A=F;break}F=(e|0)<0?6:e;if(z){I=(f[l>>2]|0)+-28|0;f[l>>2]=I;Q=c*268435456.0;R=I}else{Q=c;R=f[l>>2]|0}I=(R|0)<0?k:k+288|0;D=I;J=Q;do{r=~~J>>>0;f[D>>2]=r;D=D+4|0;J=(J-+(r>>>0))*1.0e9}while(J!=0.0);if((R|0)>0){z=I;C=D;B=R;while(1){t=(B|0)<29?B:29;r=C+-4|0;if(r>>>0>=z>>>0){L=r;r=0;do{K=rl(f[L>>2]|0,0,t|0)|0;S=vl(K|0,H|0,r|0,0)|0;K=H;r=ln(S|0,K|0,1e9,0)|0;T=Bk(r|0,H|0,1e9,0)|0;U=wl(S|0,K|0,T|0,H|0)|0;f[L>>2]=U;L=L+-4|0}while(L>>>0>=z>>>0);if(r){L=z+-4|0;f[L>>2]=r;V=L}else V=z}else V=z;a:do if(C>>>0>V>>>0){L=C;while(1){U=L+-4|0;if(f[U>>2]|0){X=L;break a}if(U>>>0>V>>>0)L=U;else{X=U;break}}}else X=C;while(0);r=(f[l>>2]|0)-t|0;f[l>>2]=r;if((r|0)>0){z=V;C=X;B=r}else{Y=V;Z=X;_=r;break}}}else{Y=I;Z=D;_=R}if((_|0)<0){B=((F+25|0)/9|0)+1|0;C=(q|0)==102;z=Y;r=Z;L=_;while(1){U=0-L|0;T=(U|0)<9?U:9;if(z>>>0<r>>>0){U=(1<<T)+-1|0;K=1e9>>>T;S=0;$=z;do{aa=f[$>>2]|0;f[$>>2]=(aa>>>T)+S;S=W(aa&U,K)|0;$=$+4|0}while($>>>0<r>>>0);$=(f[z>>2]|0)==0?z+4|0:z;if(!S){ba=r;ca=$}else{f[r>>2]=S;ba=r+4|0;ca=$}}else{ba=r;ca=(f[z>>2]|0)==0?z+4|0:z}$=C?I:ca;K=(ba-$>>2|0)>(B|0)?$+(B<<2)|0:ba;L=(f[l>>2]|0)+T|0;f[l>>2]=L;if((L|0)>=0){da=ca;ea=K;break}else{z=ca;r=K}}}else{da=Y;ea=Z}r=I;if(da>>>0<ea>>>0){z=(r-da>>2)*9|0;L=f[da>>2]|0;if(L>>>0<10)fa=z;else{B=z;z=10;while(1){z=z*10|0;C=B+1|0;if(L>>>0<z>>>0){fa=C;break}else B=C}}}else fa=0;B=(q|0)==103;z=(F|0)!=0;L=F-((q|0)==102?0:fa)+((z&B)<<31>>31)|0;if((L|0)<(((ea-r>>2)*9|0)+-9|0)){C=L+9216|0;L=(C|0)/9|0;D=I+4+(L+-1024<<2)|0;K=C-(L*9|0)|0;if((K|0)<8){L=K;K=10;while(1){C=K*10|0;if((L|0)<7){L=L+1|0;K=C}else{ga=C;break}}}else ga=10;K=f[D>>2]|0;L=(K>>>0)/(ga>>>0)|0;q=K-(W(L,ga)|0)|0;C=(D+4|0)==(ea|0);if(!(C&(q|0)==0)){s=(L&1|0)==0?9007199254740992.0:9007199254740994.0;L=ga>>>1;J=q>>>0<L>>>0?.5:C&(q|0)==(L|0)?1.0:1.5;if(!w){ha=J;ia=s}else{L=(b[x>>0]|0)==45;ha=L?-J:J;ia=L?-s:s}L=K-q|0;f[D>>2]=L;if(ia+ha!=ia){q=L+ga|0;f[D>>2]=q;if(q>>>0>999999999){q=D;L=da;while(1){K=q+-4|0;f[q>>2]=0;if(K>>>0<L>>>0){C=L+-4|0;f[C>>2]=0;ja=C}else ja=L;C=(f[K>>2]|0)+1|0;f[K>>2]=C;if(C>>>0>999999999){q=K;L=ja}else{ka=K;la=ja;break}}}else{ka=D;la=da}L=(r-la>>2)*9|0;q=f[la>>2]|0;if(q>>>0<10){ma=ka;na=L;oa=la}else{K=L;L=10;while(1){L=L*10|0;C=K+1|0;if(q>>>0<L>>>0){ma=ka;na=C;oa=la;break}else K=C}}}else{ma=D;na=fa;oa=da}}else{ma=D;na=fa;oa=da}K=ma+4|0;pa=na;qa=ea>>>0>K>>>0?K:ea;ra=oa}else{pa=fa;qa=ea;ra=da}K=0-pa|0;b:do if(qa>>>0>ra>>>0){L=qa;while(1){q=L+-4|0;if(f[q>>2]|0){sa=L;ta=1;break b}if(q>>>0>ra>>>0)L=q;else{sa=q;ta=0;break}}}else{sa=qa;ta=0}while(0);do if(B){D=F+((z^1)&1)|0;if((D|0)>(pa|0)&(pa|0)>-5){ua=i+-1|0;va=D+-1-pa|0}else{ua=i+-2|0;va=D+-1|0}if(!(g&8)){if(ta?(D=f[sa+-4>>2]|0,(D|0)!=0):0)if(!((D>>>0)%10|0)){L=0;T=10;while(1){T=T*10|0;S=L+1|0;if((D>>>0)%(T>>>0)|0|0){wa=S;break}else L=S}}else wa=0;else wa=9;L=((sa-r>>2)*9|0)+-9|0;if((ua|32|0)==102){T=L-wa|0;D=(T|0)>0?T:0;xa=ua;ya=(va|0)<(D|0)?va:D;break}else{D=L+pa-wa|0;L=(D|0)>0?D:0;xa=ua;ya=(va|0)<(L|0)?va:L;break}}else{xa=ua;ya=va}}else{xa=i;ya=F}while(0);F=(ya|0)!=0;r=F?1:g>>>3&1;z=(xa|32|0)==102;if(z){za=0;Aa=(pa|0)>0?pa:0}else{B=(pa|0)<0?K:pa;L=xh(B,((B|0)<0)<<31>>31,p)|0;B=p;if((B-L|0)<2){D=L;while(1){T=D+-1|0;b[T>>0]=48;if((B-T|0)<2)D=T;else{Ba=T;break}}}else Ba=L;b[Ba+-1>>0]=(pa>>31&2)+43;D=Ba+-2|0;b[D>>0]=xa;za=D;Aa=B-D|0}D=w+1+ya+r+Aa|0;vi(a,32,d,D,g);Pm(a,x,w);vi(a,48,d,D,g^65536);if(z){K=ra>>>0>I>>>0?I:ra;T=m+9|0;S=T;q=m+8|0;C=K;do{$=xh(f[C>>2]|0,0,T)|0;if((C|0)==(K|0))if(($|0)==(T|0)){b[q>>0]=48;Ca=q}else Ca=$;else if($>>>0>m>>>0){oh(m|0,48,$-n|0)|0;U=$;while(1){t=U+-1|0;if(t>>>0>m>>>0)U=t;else{Ca=t;break}}}else Ca=$;Pm(a,Ca,S-Ca|0);C=C+4|0}while(C>>>0<=I>>>0);if(!((g&8|0)==0&(F^1)))Pm(a,14152,1);if(C>>>0<sa>>>0&(ya|0)>0){I=ya;S=C;while(1){q=xh(f[S>>2]|0,0,T)|0;if(q>>>0>m>>>0){oh(m|0,48,q-n|0)|0;K=q;while(1){z=K+-1|0;if(z>>>0>m>>>0)K=z;else{Da=z;break}}}else Da=q;Pm(a,Da,(I|0)<9?I:9);S=S+4|0;K=I+-9|0;if(!(S>>>0<sa>>>0&(I|0)>9)){Ea=K;break}else I=K}}else Ea=ya;vi(a,48,Ea+9|0,9,0)}else{I=ta?sa:ra+4|0;if(ra>>>0<I>>>0&(ya|0)>-1){S=m+9|0;T=(g&8|0)==0;C=S;F=0-n|0;K=m+8|0;$=ya;z=ra;while(1){r=xh(f[z>>2]|0,0,S)|0;if((r|0)==(S|0)){b[K>>0]=48;Fa=K}else Fa=r;do if((z|0)==(ra|0)){r=Fa+1|0;Pm(a,Fa,1);if(T&($|0)<1){Ga=r;break}Pm(a,14152,1);Ga=r}else{if(Fa>>>0<=m>>>0){Ga=Fa;break}oh(m|0,48,Fa+F|0)|0;r=Fa;while(1){B=r+-1|0;if(B>>>0>m>>>0)r=B;else{Ga=B;break}}}while(0);q=C-Ga|0;Pm(a,Ga,($|0)>(q|0)?q:$);r=$-q|0;z=z+4|0;if(!(z>>>0<I>>>0&(r|0)>-1)){Ha=r;break}else $=r}}else Ha=ya;vi(a,48,Ha+18|0,18,0);Pm(a,za,p-za|0)}vi(a,32,d,D,g^8192);A=D}while(0);u=j;return ((A|0)<(d|0)?d:A)|0} +function Wf(a){a=a|0;ym(a);ym(a+16|0);ym(a+32|0);ym(a+48|0);ym(a+64|0);ym(a+80|0);ym(a+96|0);ym(a+112|0);ym(a+128|0);ym(a+144|0);ym(a+160|0);ym(a+176|0);ym(a+192|0);ym(a+208|0);ym(a+224|0);ym(a+240|0);ym(a+256|0);ym(a+272|0);ym(a+288|0);ym(a+304|0);ym(a+320|0);ym(a+336|0);ym(a+352|0);ym(a+368|0);ym(a+384|0);ym(a+400|0);ym(a+416|0);ym(a+432|0);ym(a+448|0);ym(a+464|0);ym(a+480|0);ym(a+496|0);return}function Xf(a,b){a=a|0;b=b|0;var c=0,d=Ia,e=0,g=0,h=0;if((b|0)!=1)if(!(b+-1&b))c=b;else c=Za(b)|0;else c=2;b=f[a+4>>2]|0;if(c>>>0>b>>>0){Hc(a,c);return}if(c>>>0>=b>>>0)return;d=_((f[a+12>>2]|0)>>>0);e=~~_(V(_(d/_(n[a+16>>2]))))>>>0;if(b>>>0>2&(b+-1&b|0)==0){g=1<<32-(Z(e+-1|0)|0);h=e>>>0<2?e:g}else h=Za(e)|0;e=c>>>0<h>>>0?h:c;if(e>>>0>=b>>>0)return;Hc(a,e);return}function Yf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=u;u=u+80|0;g=e;h=e+64|0;oj(g);i=f[(f[a+8>>2]|0)+56>>2]|0;j=W(Bj(5)|0,d)|0;Ih(g,i,0,d&255,5,0,j,((j|0)<0)<<31>>31,0,0);j=wk(96)|0;$i(j,g);b[j+84>>0]=1;f[j+72>>2]=f[j+68>>2];Fh(j,c)|0;f[h>>2]=j;Lh(a,h);a=f[h>>2]|0;f[h>>2]=0;if(!a){u=e;return}h=a+88|0;j=f[h>>2]|0;f[h>>2]=0;if(j|0){h=f[j+8>>2]|0;if(h|0){f[j+12>>2]=h;Ko(h)}Ko(j)}j=f[a+68>>2]|0;if(j|0){f[a+72>>2]=j;Ko(j)}j=a+64|0;h=f[j>>2]|0;f[j>>2]=0;if(h|0){j=f[h>>2]|0;if(j|0){f[h+4>>2]=j;Ko(j)}Ko(h)}Ko(a);u=e;return}function Zf(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=u;u=u+32|0;e=d+16|0;g=d;switch(c<<24>>24){case 0:{c=wk(48)|0;wn(c);f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=c;u=d;return}case 1:{c=wk(52)|0;Am(c);f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=c;u=d;return}default:{c=wk(32)|0;f[g>>2]=c;f[g+8>>2]=-2147483616;f[g+4>>2]=28;h=c;i=11853;j=h+28|0;do{b[h>>0]=b[i>>0]|0;h=h+1|0;i=i+1|0}while((h|0)<(j|0));b[c+28>>0]=0;f[e>>2]=-1;c=e+4|0;Yi(c,g);f[a>>2]=f[e>>2];Yi(a+4|0,c);f[a+16>>2]=0;if((b[c+11>>0]|0)<0)Ko(f[c>>2]|0);if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);u=d;return}}}function _f(a,c){a=a|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a+8|0;g=f[e>>2]|0;h=b[g+24>>0]|0;i=h<<24>>24;j=i<<1;k=Ho(i>>>0>2147483647?-1:i<<1)|0;l=f[a+16>>2]|0;if(!(f[l+80>>2]|0))m=0;else m=(f[f[l>>2]>>2]|0)+(f[l+48>>2]|0)|0;if(!c){Io(k);return}if(h<<24>>24>0){h=0;l=0;a=0;while(1){n=0;o=a;while(1){d[k+(n<<1)>>1]=f[m+(o<<2)>>2];n=n+1|0;if((n|0)==(i|0))break;else o=o+1|0}Bf((f[f[(f[e>>2]|0)+64>>2]>>2]|0)+l|0,k|0,j|0)|0;h=h+1|0;if((h|0)==(c|0))break;else{l=l+j|0;a=a+i|0}}Io(k);return}else{Bf(f[f[g+64>>2]>>2]|0,k|0,j|0)|0;if((c|0)==1){Io(k);return}g=0;i=1;do{g=g+j|0;Bf((f[f[(f[e>>2]|0)+64>>2]>>2]|0)+g|0,k|0,j|0)|0;i=i+1|0}while((i|0)!=(c|0));Io(k);return}}function $f(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=a+8|0;e=f[d>>2]|0;g=b[e+24>>0]|0;h=g<<24>>24;i=h<<2;j=Ho(h>>>0>1073741823?-1:h<<2)|0;k=f[a+16>>2]|0;if(!(f[k+80>>2]|0))l=0;else l=(f[f[k>>2]>>2]|0)+(f[k+48>>2]|0)|0;if(!c){Io(j);return}if(g<<24>>24>0){g=0;k=0;a=0;while(1){m=0;n=a;while(1){f[j+(m<<2)>>2]=f[l+(n<<2)>>2];m=m+1|0;if((m|0)==(h|0))break;else n=n+1|0}Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+k|0,j|0,i|0)|0;g=g+1|0;if((g|0)==(c|0))break;else{k=k+i|0;a=a+h|0}}Io(j);return}else{Bf(f[f[e+64>>2]>>2]|0,j|0,i|0)|0;if((c|0)==1){Io(j);return}e=0;h=1;do{e=e+i|0;Bf((f[f[(f[d>>2]|0)+64>>2]>>2]|0)+e|0,j|0,i|0)|0;h=h+1|0}while((h|0)!=(c|0));Io(j);return}}function ag(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0;c=b+8|0;d=f[c>>2]|0;e=f[c+4>>2]|0;c=b+16|0;g=c;i=f[g>>2]|0;k=f[g+4>>2]|0;g=vl(i|0,k|0,4,0)|0;l=H;if((e|0)<(l|0)|(e|0)==(l|0)&d>>>0<g>>>0){m=0;return m|0}n=(f[b>>2]|0)+i|0;o=h[n>>0]|h[n+1>>0]<<8|h[n+2>>0]<<16|h[n+3>>0]<<24;n=c;f[n>>2]=g;f[n+4>>2]=l;do if((j[b+38>>1]|0)<514){l=vl(i|0,k|0,8,0)|0;n=H;if((e|0)<(n|0)|(e|0)==(n|0)&d>>>0<l>>>0){m=0;return m|0}else{g=c;f[g>>2]=l;f[g+4>>2]=n;break}}while(0);if(!(o&1)){m=0;return m|0}c=(Z(o|0)|0)^31;if((c+-1|0)>>>0>28){m=0;return m|0}f[a+8>>2]=c+1;o=2<<c;f[a+12>>2]=o+-1;c=o+-2|0;f[a+16>>2]=c;f[a+20>>2]=(c|0)/2|0;m=1;return m|0}function bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;d=u;u=u+16|0;e=d;g=f[c>>2]|0;f[c>>2]=0;f[e>>2]=g;Ef(a,b,e);g=f[e>>2]|0;f[e>>2]=0;if(g|0){e=g+88|0;c=f[e>>2]|0;f[e>>2]=0;if(c|0){e=f[c+8>>2]|0;if(e|0){f[c+12>>2]=e;Ko(e)}Ko(c)}c=f[g+68>>2]|0;if(c|0){f[g+72>>2]=c;Ko(c)}c=g+64|0;e=f[c>>2]|0;f[c>>2]=0;if(e|0){c=f[e>>2]|0;if(c|0){f[e+4>>2]=c;Ko(c)}Ko(e)}Ko(g)}g=a+84|0;e=a+88|0;a=f[g>>2]|0;c=(f[e>>2]|0)-a>>2;if((c|0)>(b|0)){u=d;return}h=b+1|0;if(h>>>0>c>>>0){Sf(g,h-c|0);u=d;return}if(h>>>0>=c>>>0){u=d;return}f[e>>2]=a+(h<<2);u=d;return}function cg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=a+8|0;d=f[c>>2]|0;e=a+4|0;g=f[e>>2]|0;if(d-g>>3>>>0>=b>>>0){h=b;i=g;do{j=i;f[j>>2]=0;f[j+4>>2]=0;i=(f[e>>2]|0)+8|0;f[e>>2]=i;h=h+-1|0}while((h|0)!=0);return}h=f[a>>2]|0;i=g-h|0;g=i>>3;j=g+b|0;if(j>>>0>536870911)$n(a);k=d-h|0;d=k>>2;l=k>>3>>>0<268435455?(d>>>0<j>>>0?j:d):536870911;do if(l)if(l>>>0>536870911){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{d=wk(l<<3)|0;m=d;n=d;break}else{m=0;n=0}while(0);oh(m+(g<<3)|0,0,b<<3|0)|0;if((i|0)>0)Bf(n|0,h|0,i|0)|0;f[a>>2]=m;f[e>>2]=m+(j<<3);f[c>>2]=m+(l<<3);if(!h)return;Ko(h);return}function dg(a,b){a=a|0;b=b|0;var c=0,d=Ia,e=0,g=0,h=0;if((b|0)!=1)if(!(b+-1&b))c=b;else c=Za(b)|0;else c=2;b=f[a+4>>2]|0;if(c>>>0>b>>>0){Oc(a,c);return}if(c>>>0>=b>>>0)return;d=_((f[a+12>>2]|0)>>>0);e=~~_(V(_(d/_(n[a+16>>2]))))>>>0;if(b>>>0>2&(b+-1&b|0)==0){g=1<<32-(Z(e+-1|0)|0);h=e>>>0<2?e:g}else h=Za(e)|0;e=c>>>0<h>>>0?h:c;if(e>>>0>=b>>>0)return;Oc(a,e);return}function eg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=a+4|0;e=f[d>>2]|0;g=f[a>>2]|0;h=e-g|0;i=g;a:do if(h>>>0<c>>>0){j=c-h|0;k=a+8|0;l=f[k>>2]|0;if((l-e|0)>>>0>=j>>>0){m=j;n=e;while(1){b[n>>0]=0;n=(f[d>>2]|0)+1|0;f[d>>2]=n;m=m+-1|0;if(!m)break a}}if((c|0)<0)$n(a);m=l-g|0;n=m<<1;o=m>>>0<1073741823?(n>>>0<c>>>0?c:n):2147483647;if(!o)p=0;else p=wk(o)|0;oh(p+h|0,0,j|0)|0;if((h|0)>0)Bf(p|0,i|0,h|0)|0;f[a>>2]=p;f[d>>2]=p+c;f[k>>2]=p+o;if(g|0)Ko(i)}else if(h>>>0>c>>>0)f[d>>2]=i+c;while(0);c=a+24|0;a=c;i=vl(f[a>>2]|0,f[a+4>>2]|0,1,0)|0;a=c;f[a>>2]=i;f[a+4>>2]=H;return}function fg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;f[a>>2]=0;d=a+4|0;f[d>>2]=0;e=a+8|0;f[e>>2]=0;if(!b)return;if(b>>>0>357913941)$n(a);g=wk(b*12|0)|0;f[d>>2]=g;f[a>>2]=g;f[e>>2]=g+(b*12|0);e=c+4|0;a=b;b=g;while(1){f[b>>2]=0;g=b+4|0;f[g>>2]=0;h=b+8|0;f[h>>2]=0;i=(f[e>>2]|0)-(f[c>>2]|0)|0;j=i>>2;if(i|0){if(j>>>0>1073741823){k=7;break}l=wk(i)|0;f[g>>2]=l;f[b>>2]=l;f[h>>2]=l+(j<<2);j=f[c>>2]|0;h=(f[e>>2]|0)-j|0;if((h|0)>0){Bf(l|0,j|0,h|0)|0;f[g>>2]=l+(h>>>2<<2)}}h=(f[d>>2]|0)+12|0;f[d>>2]=h;a=a+-1|0;if(!a){k=11;break}else b=h}if((k|0)==7)$n(b);else if((k|0)==11)return}function gg(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;d=u;u=u+16|0;e=d;if(!c){g=0;u=d;return g|0}h=a+84|0;i=f[h>>2]|0;f[h>>2]=0;f[a+88>>2]=0;f[a+92>>2]=0;if(i|0)Ko(i);i=a+72|0;h=f[i>>2]|0;f[i>>2]=0;f[a+76>>2]=0;f[a+80>>2]=0;if(h|0)Ko(h);h=c+4|0;i=(f[h>>2]|0)-(f[c>>2]|0)>>2;b[e>>0]=0;Gf(a,i,e);i=c+24|0;j=c+28|0;k=(f[j>>2]|0)-(f[i>>2]|0)>>2;b[e>>0]=0;Gf(a+12|0,k,e);nf(a+28|0,(f[h>>2]|0)-(f[c>>2]|0)>>2,3764);Wh(a+52|0,(f[j>>2]|0)-(f[i>>2]|0)>>2);Wh(a+40|0,(f[j>>2]|0)-(f[i>>2]|0)>>2);f[a+64>>2]=c;b[a+24>>0]=1;g=1;u=d;return g|0}function hg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=f[a+40>>2]|0;d=c;e=a+44|0;a=f[e>>2]|0;if((a|0)==(c|0))return;g=d;h=c;while(1){if((f[(f[h>>2]|0)+40>>2]|0)==(b|0))break;i=h+4|0;if((a|0)==(i|0)){j=16;break}else{g=i;h=i}}if((j|0)==16)return;h=c+(g-d>>2<<2)|0;d=h+4|0;if((d|0)!=(a|0)){g=d;d=h;do{c=f[g>>2]|0;f[g>>2]=0;b=f[d>>2]|0;f[d>>2]=c;if(b|0){eh(b);Ko(b)}g=g+4|0;d=d+4|0}while((g|0)!=(a|0));g=f[e>>2]|0;if((g|0)==(d|0))k=d;else{l=d;m=g;j=10}}else{l=h;m=a;j=10}if((j|0)==10){j=m;do{j=j+-4|0;m=f[j>>2]|0;f[j>>2]=0;if(m|0){eh(m);Ko(m)}}while((j|0)!=(l|0));k=l}f[e>>2]=k;return}function ig(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=u;u=u+16|0;d=c;e=f[(f[a>>2]|0)+8>>2]|0;g=a+8|0;h=a+12|0;i=(f[h>>2]|0)-(f[g>>2]|0)>>2;j=f[b>>2]|0;f[b>>2]=0;f[d>>2]=j;Ra[e&15](a,i,d);i=f[d>>2]|0;f[d>>2]=0;if(!i){k=f[h>>2]|0;l=f[g>>2]|0;m=k-l|0;n=m>>2;o=n+-1|0;u=c;return o|0}d=i+88|0;a=f[d>>2]|0;f[d>>2]=0;if(a|0){d=f[a+8>>2]|0;if(d|0){f[a+12>>2]=d;Ko(d)}Ko(a)}a=f[i+68>>2]|0;if(a|0){f[i+72>>2]=a;Ko(a)}a=i+64|0;d=f[a>>2]|0;f[a>>2]=0;if(d|0){a=f[d>>2]|0;if(a|0){f[d+4>>2]=a;Ko(a)}Ko(d)}Ko(i);k=f[h>>2]|0;l=f[g>>2]|0;m=k-l|0;n=m>>2;o=n+-1|0;u=c;return o|0}function jg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;b=a+640|0;c=f[b>>2]|0;if(c|0){d=a+644|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{e=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[e+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}g=a+628|0;c=f[g>>2]|0;if(c|0){d=a+632|0;b=f[d>>2]|0;if((b|0)==(c|0))j=c;else{h=b;do{b=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[b+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));j=f[g>>2]|0}f[d>>2]=c;Ko(j)}j=f[a+616>>2]|0;if(j|0){f[a+620>>2]=j;Ko(j)}j=f[a+604>>2]|0;if(j|0){f[a+608>>2]=j;Ko(j)}zk(a+584|0);zk(a+564|0);zk(a+544|0);Oo(a+16|0);return}function kg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=wk(72)|0;Gk(c);d=c;if((b|0)<0){Pa[f[(f[c>>2]|0)+4>>2]&127](c);e=0;return e|0}c=a+8|0;g=a+12|0;a=f[g>>2]|0;h=f[c>>2]|0;i=a-h>>2;do if((i|0)<=(b|0)){j=b+1|0;k=a;if(j>>>0>i>>>0){Se(c,j-i|0);break}if(j>>>0<i>>>0){l=h+(j<<2)|0;if((l|0)!=(k|0)){j=k;do{j=j+-4|0;k=f[j>>2]|0;f[j>>2]=0;if(k|0)Pa[f[(f[k>>2]|0)+4>>2]&127](k)}while((j|0)!=(l|0))}f[g>>2]=l}}while(0);g=(f[c>>2]|0)+(b<<2)|0;b=f[g>>2]|0;f[g>>2]=d;if(!b){e=1;return e|0}Pa[f[(f[b>>2]|0)+4>>2]&127](b);e=1;return e|0}function lg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=d+16|0;g=f[e>>2]|0;if(!g)if(!(bj(d)|0)){h=f[e>>2]|0;i=5}else j=0;else{h=g;i=5}a:do if((i|0)==5){g=d+20|0;e=f[g>>2]|0;k=e;if((h-e|0)>>>0<c>>>0){j=Ma[f[d+36>>2]&31](d,a,c)|0;break}b:do if((b[d+75>>0]|0)<0|(c|0)==0){l=0;m=a;n=c;o=k}else{e=c;while(1){p=e+-1|0;if((b[a+p>>0]|0)==10)break;if(!p){l=0;m=a;n=c;o=k;break b}else e=p}p=Ma[f[d+36>>2]&31](d,a,e)|0;if(p>>>0<e>>>0){j=p;break a}l=e;m=a+e|0;n=c-e|0;o=f[g>>2]|0}while(0);Bf(o|0,m|0,n|0)|0;f[g>>2]=(f[g>>2]|0)+n;j=l+n|0}while(0);return j|0}function mg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;c=a+60|0;d=f[c>>2]|0;if(!d){e=0;return e|0}f[d+4>>2]=a+48;if(!(Ka[f[(f[d>>2]|0)+12>>2]&127](d)|0)){e=0;return e|0}d=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;a:do if((d|0)>0){g=0;while(1){h=(Ka[f[(f[a>>2]|0)+28>>2]&127](a)|0)+4|0;i=f[h>>2]|0;h=La[f[(f[a>>2]|0)+20>>2]&127](a,g)|0;j=f[c>>2]|0;g=g+1|0;if(!(La[f[(f[j>>2]|0)+8>>2]&127](j,f[(f[i+8>>2]|0)+(h<<2)>>2]|0)|0)){e=0;break}if((g|0)>=(d|0))break a}return e|0}while(0);if(!(La[f[(f[a>>2]|0)+36>>2]&127](a,b)|0)){e=0;return e|0}if(!(La[f[(f[a>>2]|0)+40>>2]&127](a,b)|0)){e=0;return e|0}e=Ka[f[(f[a>>2]|0)+44>>2]&127](a)|0;return e|0}function ng(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a=u;u=u+32|0;e=a+12|0;g=a;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;lh(c,g,e)|0;c=e+11|0;h=b[c>>0]|0;i=h<<24>>24<0?f[e>>2]|0:e;if((b[g+11>>0]|0)<0){Ko(f[g>>2]|0);n=b[c>>0]|0}else n=h;if(n<<24>>24>=0){u=a;return i|0}Ko(f[e>>2]|0);u=a;return i|0}function og(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;c=wk(88)|0;d=c+60|0;e=c;g=e+60|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[d>>2]=c;d=c+64|0;f[d>>2]=0;f[d+4>>2]=0;f[d+8>>2]=0;f[d+12>>2]=0;f[d+16>>2]=0;f[d+20>>2]=0;d=jf(c,b)|0;b=d?0:c;f[a>>2]=d?c:0;if(d)return;a=f[b+76>>2]|0;if(a|0){f[b+80>>2]=a;Ko(a)}a=f[b+64>>2]|0;if(a|0){f[b+68>>2]=a;Ko(a)}a=f[b+48>>2]|0;if(a|0){f[b+52>>2]=a;Ko(a)}a=f[b+24>>2]|0;if(a|0){f[b+28>>2]=a;Ko(a)}a=f[b+12>>2]|0;if(a|0){f[b+16>>2]=a;Ko(a)}a=f[b>>2]|0;if(a|0){f[b+4>>2]=a;Ko(a)}Ko(d?0:c);return}function pg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0;c=a+4|0;if((Ka[f[(f[b>>2]|0)+20>>2]&127](b)|0)<=0){d=1;return d|0}a=0;while(1){e=f[(f[c>>2]|0)+4>>2]|0;g=Kj(e,La[f[(f[b>>2]|0)+24>>2]&127](b,a)|0)|0;if((g|0)==-1){d=0;i=9;break}e=f[c>>2]|0;if(((h[e+36>>0]|0)<<8&65535)<512){if(!(La[f[(f[b>>2]|0)+28>>2]&127](b,f[(f[(f[e+4>>2]|0)+8>>2]|0)+(g<<2)>>2]|0)|0)){d=0;i=9;break}}else{j=Qi(e,g)|0;if(!j){d=0;i=9;break}if(!(La[f[(f[b>>2]|0)+28>>2]&127](b,j)|0)){d=0;i=9;break}}a=a+1|0;if((a|0)>=(Ka[f[(f[b>>2]|0)+20>>2]&127](b)|0)){d=1;i=9;break}}if((i|0)==9)return d|0;return 0}function qg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=(f[b+4>>2]|0)-(f[b>>2]|0)|0;b=d>>2;e=a+8|0;a=f[(f[e>>2]|0)+40>>2]|0;g=Ho((a|0)>-1?a:-1)|0;h=c+8|0;if((d|0)<=0){i=1;Io(g);return i|0}d=c+16|0;j=0;k=0;while(1){l=h;m=f[l>>2]|0;n=f[l+4>>2]|0;l=d;o=f[l>>2]|0;p=vl(o|0,f[l+4>>2]|0,a|0,0)|0;l=H;if((n|0)<(l|0)|(n|0)==(l|0)&m>>>0<p>>>0){i=0;q=5;break}Bf(g|0,(f[c>>2]|0)+o|0,a|0)|0;o=d;f[o>>2]=p;f[o+4>>2]=l;Bf((f[f[(f[e>>2]|0)+64>>2]>>2]|0)+j|0,g|0,a|0)|0;k=k+1|0;if((k|0)>=(b|0)){i=1;q=5;break}else j=j+a|0}if((q|0)==5){Io(g);return i|0}return 0}function rg(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;d=a+216|0;e=a+220|0;g=f[d>>2]|0;if((f[e>>2]|0)==(g|0))return 0;h=a+4|0;a=0;i=g;a:while(1){g=f[i+(a*144|0)>>2]|0;if(((g|0)>=0?(j=f[h>>2]|0,k=f[j+8>>2]|0,(g|0)<((f[j+12>>2]|0)-k>>2|0)):0)?(j=f[k+(g<<2)>>2]|0,(Ka[f[(f[j>>2]|0)+24>>2]&127](j)|0)>0):0){g=0;do{if((La[f[(f[j>>2]|0)+20>>2]&127](j,g)|0)==(c|0)){l=9;break a}g=g+1|0}while((g|0)<(Ka[f[(f[j>>2]|0)+24>>2]&127](j)|0))}j=a+1|0;i=f[d>>2]|0;if(j>>>0>=(((f[e>>2]|0)-i|0)/144|0)>>>0){l=11;break}else a=j}if((l|0)==9){i=f[d>>2]|0;return ((b[i+(a*144|0)+100>>0]|0)==0?0:i+(a*144|0)+4|0)|0}else if((l|0)==11)return 0;return 0}function sg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0;c=b+8|0;d=f[c>>2]|0;e=f[c+4>>2]|0;c=b+16|0;g=c;i=f[g>>2]|0;j=f[g+4>>2]|0;g=vl(i|0,j|0,4,0)|0;k=H;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0<g>>>0){l=0;return l|0}m=(f[b>>2]|0)+i|0;b=h[m>>0]|h[m+1>>0]<<8|h[m+2>>0]<<16|h[m+3>>0]<<24;m=c;f[m>>2]=g;f[m+4>>2]=k;k=vl(i|0,j|0,8,0)|0;j=H;if((e|0)<(j|0)|(e|0)==(j|0)&d>>>0<k>>>0){l=0;return l|0}d=c;f[d>>2]=k;f[d+4>>2]=j;if(!(b&1)){l=0;return l|0}j=(Z(b|0)|0)^31;if((j+-1|0)>>>0>28){l=0;return l|0}f[a+8>>2]=j+1;b=2<<j;f[a+12>>2]=b+-1;j=b+-2|0;f[a+16>>2]=j;f[a+20>>2]=(j|0)/2|0;l=1;return l|0}function tg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;if(b>>>0<64){b=f[a+12>>2]|0;if(b>>>0<=1){e=0;return e|0}d=f[c>>2]|0;c=0;g=1;while(1){h=(f[d+(c<<2)>>2]|0)>>>0>(f[d+(g<<2)>>2]|0)>>>0?g:c;g=g+1|0;if(g>>>0>=b>>>0){e=h;break}else c=h}return e|0}c=a+580|0;b=f[c>>2]|0;g=32-b|0;d=a+576|0;if((g|0)<4){h=f[d>>2]|0;i=h+4|0;if((i|0)==(f[a+568>>2]|0)){e=0;return e|0}j=f[h>>2]<<b;h=4-g|0;f[c>>2]=h;f[d>>2]=i;k=32-h|0;e=(f[i>>2]|0)>>>k|j>>>(k-g|0);return e|0}g=f[d>>2]|0;if((g|0)==(f[a+568>>2]|0)){e=0;return e|0}a=f[g>>2]<<b>>>28;k=b+4|0;f[c>>2]=k;if((k|0)!=32){e=a;return e|0}f[d>>2]=g+4;f[c>>2]=0;e=a;return e|0}function ug(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=a+216|0;d=a+220|0;e=f[c>>2]|0;a:do if((f[d>>2]|0)!=(e|0)){g=a+4|0;h=0;i=e;b:while(1){j=f[i+(h*144|0)>>2]|0;if(((j|0)>=0?(k=f[g>>2]|0,l=f[k+8>>2]|0,(j|0)<((f[k+12>>2]|0)-l>>2|0)):0)?(k=f[l+(j<<2)>>2]|0,(Ka[f[(f[k>>2]|0)+24>>2]&127](k)|0)>0):0){j=0;do{if((La[f[(f[k>>2]|0)+20>>2]&127](k,j)|0)==(b|0))break b;j=j+1|0}while((j|0)<(Ka[f[(f[k>>2]|0)+24>>2]&127](k)|0))}k=h+1|0;i=f[c>>2]|0;if(k>>>0>=(((f[d>>2]|0)-i|0)/144|0)>>>0)break a;else h=k}m=(f[c>>2]|0)+(h*144|0)+104|0;return m|0}while(0);m=a+184|0;return m|0}function vg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=u;u=u+32|0;d=c+16|0;e=c+8|0;g=c;h=a+8|0;if(f[h>>2]<<5>>>0>=b>>>0){u=c;return}f[d>>2]=0;i=d+4|0;f[i>>2]=0;j=d+8|0;f[j>>2]=0;if((b|0)<0)$n(d);k=((b+-1|0)>>>5)+1|0;b=wk(k<<2)|0;f[d>>2]=b;f[i>>2]=0;f[j>>2]=k;k=f[a>>2]|0;f[e>>2]=k;f[e+4>>2]=0;b=a+4|0;l=f[b>>2]|0;f[g>>2]=k+(l>>>5<<2);f[g+4>>2]=l&31;Xe(d,e,g);g=f[a>>2]|0;f[a>>2]=f[d>>2];f[d>>2]=g;d=f[b>>2]|0;f[b>>2]=f[i>>2];f[i>>2]=d;d=f[h>>2]|0;f[h>>2]=f[j>>2];f[j>>2]=d;if(g|0)Ko(g);u=c;return}function wg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=u;u=u+16|0;e=c;do if(((h[(f[a+4>>2]|0)+36>>0]|0)<<8&65535)>511){g=d+8|0;i=f[g+4>>2]|0;j=d+16|0;k=j;l=f[k>>2]|0;m=f[k+4>>2]|0;if((i|0)>(m|0)|((i|0)==(m|0)?(f[g>>2]|0)>>>0>l>>>0:0)){g=b[(f[d>>2]|0)+l>>0]|0;i=vl(l|0,m|0,1,0)|0;m=j;f[m>>2]=i;f[m+4>>2]=H;m=g&255;f[a+24>>2]=m;n=m;break}else{o=0;u=c;return o|0}}else n=f[a+24>>2]|0;while(0);f[e>>2]=1200;f[e+4>>2]=-1;kn(e,n);o=Si(e,f[a+16>>2]|0)|0;u=c;return o|0}function xg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;c=a+4|0;d=f[c>>2]|0;e=f[a>>2]|0;g=d-e>>2;h=d;if(g>>>0<b>>>0){de(a,b-g|0);return}if(g>>>0<=b>>>0)return;g=e+(b<<2)|0;if((g|0)!=(h|0)){b=h;do{b=b+-4|0;h=f[b>>2]|0;f[b>>2]=0;if(h|0){e=h+88|0;a=f[e>>2]|0;f[e>>2]=0;if(a|0){e=f[a+8>>2]|0;if(e|0){f[a+12>>2]=e;Ko(e)}Ko(a)}a=f[h+68>>2]|0;if(a|0){f[h+72>>2]=a;Ko(a)}a=h+64|0;e=f[a>>2]|0;f[a>>2]=0;if(e|0){a=f[e>>2]|0;if(a|0){f[e+4>>2]=a;Ko(a)}Ko(e)}Ko(h)}}while((b|0)!=(g|0))}f[c>>2]=g;return}function yg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=a+4|0;d=f[a>>2]|0;e=(f[c>>2]|0)-d|0;g=(e|0)/12|0;h=g+1|0;if(h>>>0>357913941)$n(a);i=a+8|0;j=((f[i>>2]|0)-d|0)/12|0;k=j<<1;l=j>>>0<178956970?(k>>>0<h>>>0?h:k):357913941;do if(l)if(l>>>0>357913941){k=qa(8)|0;Dm(k,13552);f[k>>2]=4908;ta(k|0,1128,105)}else{m=wk(l*12|0)|0;break}else m=0;while(0);k=m+(g*12|0)|0;f[k>>2]=f[b>>2];f[k+4>>2]=f[b+4>>2];f[k+8>>2]=f[b+8>>2];b=k+(((e|0)/-12|0)*12|0)|0;if((e|0)>0)Bf(b|0,d|0,e|0)|0;f[a>>2]=b;f[c>>2]=k+12;f[i>>2]=m+(l*12|0);if(!d)return;Ko(d);return}function zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;c=u;u=u+16|0;d=c;e=Le(a,d,b)|0;g=f[e>>2]|0;if(g|0){h=g;i=h+28|0;u=c;return i|0}g=wk(40)|0;Yi(g+16|0,b);b=g+28|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;b=f[d>>2]|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=b;f[e>>2]=g;b=f[f[a>>2]>>2]|0;if(!b)j=g;else{f[a>>2]=b;j=f[e>>2]|0}vd(f[a+4>>2]|0,j);j=a+8|0;f[j>>2]=(f[j>>2]|0)+1;h=g;i=h+28|0;u=c;return i|0}function Ag(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=3776;b=f[a+68>>2]|0;if(b|0){f[a+72>>2]=b;Ko(b)}b=f[a+56>>2]|0;if(b|0){f[a+60>>2]=b;Ko(b)}b=f[a+44>>2]|0;if(b|0){f[a+48>>2]=b;Ko(b)}b=f[a+32>>2]|0;if(b|0){f[a+36>>2]=b;Ko(b)}b=f[a+20>>2]|0;if(b|0){f[a+24>>2]=b;Ko(b)}Pg(a+8|0);b=a+4|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=a+40|0;c=f[b>>2]|0;if(c|0){d=a+44|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{h=h+-4|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0){eh(e);Ko(e)}}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}eh(a);Ko(a);return}function Bg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=u;u=u+112|0;d=c+96|0;e=c+16|0;g=c+4|0;h=c;i=e+76|0;j=e;k=j+76|0;do{f[j>>2]=0;j=j+4|0}while((j|0)<(k|0));f[i>>2]=-1;f[g>>2]=0;i=g+4|0;f[i>>2]=0;f[g+8>>2]=0;f[h>>2]=g;f[d>>2]=f[h>>2];if(Pc(e,a,d)|0){d=f[g>>2]|0;Ye(b,d,d+((f[i>>2]|0)-d>>2<<2)|0);l=f[e+68>>2]|0}else l=0;d=f[g>>2]|0;if(!d){hh(e);u=c;return l|0}f[i>>2]=d;Ko(d);hh(e);u=c;return l|0}function Cg(a,c,d,e,g,h,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;k=u;u=u+16|0;l=k;if((-18-c|0)>>>0<d>>>0)$n(a);if((b[a+11>>0]|0)<0)m=f[a>>2]|0;else m=a;if(c>>>0<2147483623){n=d+c|0;d=c<<1;o=n>>>0<d>>>0?d:n;p=o>>>0<11?11:o+16&-16}else p=-17;o=wk(p)|0;if(g|0)um(o,m,g)|0;if(i|0)um(o+g|0,j,i)|0;j=e-h|0;e=j-g|0;if(e|0)um(o+g+i|0,m+g+h|0,e)|0;if((c|0)!=10)Ko(m);f[a>>2]=o;f[a+8>>2]=p|-2147483648;p=j+i|0;f[a+4>>2]=p;b[l>>0]=0;xn(o+p|0,l);u=k;return}function Dg(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;c=a+12|0;d=f[c>>2]|0;f[c>>2]=0;if(d|0){c=f[d+28>>2]|0;if(c|0){e=c;do{c=e;e=f[e>>2]|0;Dg(c+8|0);Ko(c)}while((e|0)!=0)}e=d+20|0;c=f[e>>2]|0;f[e>>2]=0;if(c|0)Ko(c);c=f[d+8>>2]|0;if(c|0){e=c;do{c=e;e=f[e>>2]|0;g=c+8|0;h=f[c+20>>2]|0;if(h|0){f[c+24>>2]=h;Ko(h)}if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);Ko(c)}while((e|0)!=0)}e=f[d>>2]|0;f[d>>2]=0;if(e|0)Ko(e);Ko(d)}if((b[a+11>>0]|0)>=0)return;Ko(f[a>>2]|0);return}function Eg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=a+8|0;d=f[c>>2]|0;e=a+4|0;g=f[e>>2]|0;if(d-g>>2>>>0>=b>>>0){oh(g|0,0,b<<2|0)|0;f[e>>2]=g+(b<<2);return}h=f[a>>2]|0;i=g-h|0;g=i>>2;j=g+b|0;if(j>>>0>1073741823)$n(a);k=d-h|0;d=k>>1;l=k>>2>>>0<536870911?(d>>>0<j>>>0?j:d):1073741823;do if(l)if(l>>>0>1073741823){d=qa(8)|0;Dm(d,13552);f[d>>2]=4908;ta(d|0,1128,105)}else{d=wk(l<<2)|0;m=d;n=d;break}else{m=0;n=0}while(0);d=m+(g<<2)|0;oh(d|0,0,b<<2|0)|0;if((i|0)>0)Bf(n|0,h|0,i|0)|0;f[a>>2]=m;f[e>>2]=d+(b<<2);f[c>>2]=m+(l<<2);if(!h)return;Ko(h);return}function Fg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;a=u;u=u+16|0;e=a;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;g=Dh(d)|0;if(g>>>0>4294967279)$n(e);if(g>>>0<11){b[e+11>>0]=g;if(!g)h=e;else{i=e;j=6}}else{k=g+16&-16;l=wk(k)|0;f[e>>2]=l;f[e+8>>2]=k|-2147483648;f[e+4>>2]=g;i=l;j=6}if((j|0)==6){Bf(i|0,d|0,g|0)|0;h=i}b[h+g>>0]=0;g=(Dc(c,e)|0)!=0;if((b[e+11>>0]|0)>=0){u=a;return g|0}Ko(f[e>>2]|0);u=a;return g|0}function Gg(a){a=a|0;var b=0,c=0,d=0;f[a>>2]=3456;b=a+84|0;c=a+4|0;d=c+80|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+88>>2]=-1;f[a+92>>2]=-1;b=a+152|0;c=a+96|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=1065353216;b=a+212|0;c=a+156|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+216>>2]=0;f[a+220>>2]=0;f[a+224>>2]=0;ak(a+232|0);b=a+380|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[a+400>>2]=-1;f[a+404>>2]=-1;f[a+408>>2]=2;f[a+412>>2]=7;b=a+416|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[b+20>>2]=0;return}function Hg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=u;u=u+32|0;e=a+12|0;g=a;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;h=lh(c,g,e)|0;if((b[g+11>>0]|0)<0)Ko(f[g>>2]|0);if((b[e+11>>0]|0)>=0){u=a;return h|0}Ko(f[e>>2]|0);u=a;return h|0}function Ig(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=u;u=u+16|0;g=e;h=c+11|0;i=b[h>>0]|0;if(i<<24>>24<0)j=f[c+4>>2]|0;else j=i&255;k=j;j=i;while(1){if(j<<24>>24<0)l=f[c>>2]|0;else l=c;f[g>>2]=d;m=Qk(l,k+1|0,16046,g)|0;if((m|0)>-1)if(m>>>0>k>>>0)n=m;else break;else n=k<<1|1;Gh(c,n,0);k=n;j=b[h>>0]|0}Gh(c,m,0);f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];a=0;while(1){if((a|0)==3)break;f[c+(a<<2)>>2]=0;a=a+1|0}u=e;return}function Jg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;b=a+140|0;c=f[b>>2]|0;if((c|0)<=0){d=1;return d|0}e=c<<4;g=Ho(c>>>0>268435455|e>>>0>4294967291?-1:e+4|0)|0;f[g>>2]=c;e=g+4|0;g=e+(c<<4)|0;c=e;do{ym(c);c=c+16|0}while((c|0)!=(g|0));g=a+136|0;c=f[g>>2]|0;f[g>>2]=e;if(c|0){e=c+-4|0;h=f[e>>2]|0;if(h|0){i=c+(h<<4)|0;do i=i+-16|0;while((i|0)!=(c|0))}Io(e)}if((f[b>>2]|0)<=0){d=1;return d|0}e=0;while(1){if(!(rd((f[g>>2]|0)+(e<<4)|0,a)|0)){d=0;j=13;break}e=e+1|0;if((e|0)>=(f[b>>2]|0)){d=1;j=13;break}}if((j|0)==13)return d|0;return 0}function Kg(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=a+4|0;e=f[d>>2]|0;g=f[a>>2]|0;h=e-g|0;i=g;if(h>>>0>=c>>>0){if(h>>>0<=c>>>0)return;f[d>>2]=i+c;return}j=c-h|0;k=a+8|0;l=f[k>>2]|0;if((l-e|0)>>>0>=j>>>0){m=j;n=e;do{b[n>>0]=0;n=(f[d>>2]|0)+1|0;f[d>>2]=n;m=m+-1|0}while((m|0)!=0);return}if((c|0)<0)$n(a);m=l-g|0;l=m<<1;n=m>>>0<1073741823?(l>>>0<c>>>0?c:l):2147483647;if(!n)o=0;else o=wk(n)|0;oh(o+h|0,0,j|0)|0;if((h|0)>0)Bf(o|0,i|0,h|0)|0;f[a>>2]=o;f[d>>2]=o+c;f[k>>2]=o+n;if(!g)return;Ko(i);return}function Lg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=Dc(a,c)|0;if(!e){g=0;return g|0}c=f[e+20>>2]|0;if(((f[e+24>>2]|0)-c|0)!=8){g=0;return g|0}e=c;c=e;a=h[c>>0]|h[c+1>>0]<<8|h[c+2>>0]<<16|h[c+3>>0]<<24;c=e+4|0;e=h[c>>0]|h[c+1>>0]<<8|h[c+2>>0]<<16|h[c+3>>0]<<24;c=d;d=c;b[d>>0]=a;b[d+1>>0]=a>>8;b[d+2>>0]=a>>16;b[d+3>>0]=a>>24;a=c+4|0;b[a>>0]=e;b[a+1>>0]=e>>8;b[a+2>>0]=e>>16;b[a+3>>0]=e>>24;g=1;return g|0}function Mg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;do if(a){if(c>>>0<128){b[a>>0]=c;e=1;break}d=(Eo()|0)+188|0;if(!(f[f[d>>2]>>2]|0))if((c&-128|0)==57216){b[a>>0]=c;e=1;break}else{d=Ro()|0;f[d>>2]=84;e=-1;break}if(c>>>0<2048){b[a>>0]=c>>>6|192;b[a+1>>0]=c&63|128;e=2;break}if(c>>>0<55296|(c&-8192|0)==57344){b[a>>0]=c>>>12|224;b[a+1>>0]=c>>>6&63|128;b[a+2>>0]=c&63|128;e=3;break}if((c+-65536|0)>>>0<1048576){b[a>>0]=c>>>18|240;b[a+1>>0]=c>>>12&63|128;b[a+2>>0]=c>>>6&63|128;b[a+3>>0]=c&63|128;e=4;break}else{d=Ro()|0;f[d>>2]=84;e=-1;break}}else e=1;while(0);return e|0}function Ng(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c=a+4|0;d=f[a>>2]|0;e=(f[c>>2]|0)-d|0;g=e>>2;h=g+1|0;if(h>>>0>1073741823)$n(a);i=a+8|0;j=(f[i>>2]|0)-d|0;k=j>>1;l=j>>2>>>0<536870911?(k>>>0<h>>>0?h:k):1073741823;do if(l)if(l>>>0>1073741823){k=qa(8)|0;Dm(k,13552);f[k>>2]=4908;ta(k|0,1128,105)}else{k=wk(l<<2)|0;m=k;n=k;break}else{m=0;n=0}while(0);k=m+(g<<2)|0;f[k>>2]=f[b>>2];if((e|0)>0)Bf(n|0,d|0,e|0)|0;f[a>>2]=m;f[c>>2]=k+4;f[i>>2]=m+(l<<2);if(!d)return;Ko(d);return}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=f[a+4>>2]|0;c=a+8|0;d=f[c>>2]|0;if((d|0)!=(b|0)){e=d;do{d=e+-4|0;f[c>>2]=d;g=f[d>>2]|0;f[d>>2]=0;if(g|0){d=g+88|0;h=f[d>>2]|0;f[d>>2]=0;if(h|0){d=f[h+8>>2]|0;if(d|0){f[h+12>>2]=d;Ko(d)}Ko(h)}h=f[g+68>>2]|0;if(h|0){f[g+72>>2]=h;Ko(h)}h=g+64|0;d=f[h>>2]|0;f[h>>2]=0;if(d|0){h=f[d>>2]|0;if(h|0){f[d+4>>2]=h;Ko(h)}Ko(d)}Ko(g)}e=f[c>>2]|0}while((e|0)!=(b|0))}b=f[a>>2]|0;if(!b)return;Ko(b);return}function Pg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0;b=f[a>>2]|0;if(!b)return;c=a+4|0;d=f[c>>2]|0;if((d|0)==(b|0))e=b;else{g=d;do{g=g+-4|0;d=f[g>>2]|0;f[g>>2]=0;if(d|0){h=d+88|0;i=f[h>>2]|0;f[h>>2]=0;if(i|0){h=f[i+8>>2]|0;if(h|0){f[i+12>>2]=h;Ko(h)}Ko(i)}i=f[d+68>>2]|0;if(i|0){f[d+72>>2]=i;Ko(i)}i=d+64|0;h=f[i>>2]|0;f[i>>2]=0;if(h|0){i=f[h>>2]|0;if(i|0){f[h+4>>2]=i;Ko(i)}Ko(h)}Ko(d)}}while((g|0)!=(b|0));e=f[a>>2]|0}f[c>>2]=b;Ko(e);return}function Qg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0.0;a=u;u=u+32|0;e=a;g=a+8|0;p[e>>3]=0.0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;Lg(c,g,e)|0;n=+p[e>>3];if((b[g+11>>0]|0)>=0){u=a;return +n}Ko(f[g>>2]|0);u=a;return +n}function Rg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0;d=u;u=u+32|0;c=d;if((h[(f[a+4>>2]|0)+36>>0]<<8&65535)>511?!(Ka[f[(f[a>>2]|0)+52>>2]&127](a)|0):0){e=0;u=d;return e|0}f[c>>2]=1228;f[c+4>>2]=-1;g=c+8|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;kj(c,f[a+24>>2]|0,f[a+28>>2]|0,b[(f[a+8>>2]|0)+24>>0]|0,_(n[a+32>>2]));i=Si(c,f[a+16>>2]|0)|0;f[c>>2]=1228;a=f[g>>2]|0;if(a|0){f[c+12>>2]=a;Ko(a)}e=i;u=d;return e|0}function Sg(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=u;u=u+128|0;h=g+124|0;i=g;j=i;k=4048;l=j+124|0;do{f[j>>2]=f[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));if((c+-1|0)>>>0>2147483646)if(!c){m=h;n=1;o=4}else{h=Ro()|0;f[h>>2]=75;p=-1}else{m=a;n=c;o=4}if((o|0)==4){o=-2-m|0;c=n>>>0>o>>>0?o:n;f[i+48>>2]=c;n=i+20|0;f[n>>2]=m;f[i+44>>2]=m;o=m+c|0;m=i+16|0;f[m>>2]=o;f[i+28>>2]=o;o=Mf(i,d,e)|0;if(!c)p=o;else{c=f[n>>2]|0;b[c+(((c|0)==(f[m>>2]|0))<<31>>31)>>0]=0;p=o}}u=g;return p|0}function Tg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c=a+8|0;d=f[a>>2]|0;e=d;if((((f[c>>2]|0)-d|0)/12|0)>>>0>=b>>>0)return;g=a+4|0;if(b>>>0>357913941){h=qa(8)|0;Dm(h,13552);f[h>>2]=4908;ta(h|0,1128,105)}h=f[g>>2]|0;i=wk(b*12|0)|0;j=i+(((h-d|0)/12|0)*12|0)|0;k=j;l=i+(b*12|0)|0;b=h;if((b|0)==(e|0))m=k;else{h=b;b=j;do{j=b;b=b+-12|0;i=h;h=h+-12|0;f[b>>2]=f[h>>2];f[j+-8>>2]=f[i+-8>>2];f[j+-4>>2]=f[i+-4>>2]}while((h|0)!=(e|0));m=b}f[a>>2]=m;f[g>>2]=k;f[c>>2]=l;if(!d)return;Ko(d);return}function Ug(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=u;u=u+16|0;e=a+12|0;g=a;f[e>>2]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;yh(c,g,e)|0;c=f[e>>2]|0;if((b[g+11>>0]|0)>=0){u=a;return c|0}Ko(f[g>>2]|0);u=a;return c|0}function Vg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=1416;b=a+60|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);c=f[a+48>>2]|0;if(c|0){f[a+52>>2]=c;Ko(c)}c=a+36|0;b=f[c>>2]|0;if(b|0){d=a+40|0;e=f[d>>2]|0;if((e|0)==(b|0))g=b;else{h=e;do{h=h+-4|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0)Pa[f[(f[e>>2]|0)+4>>2]&127](e)}while((h|0)!=(b|0));g=f[c>>2]|0}f[d>>2]=b;Ko(g)}f[a>>2]=1256;g=f[a+16>>2]|0;if(g|0){f[a+20>>2]=g;Ko(g)}g=f[a+4>>2]|0;if(!g){Ko(a);return}f[a+8>>2]=g;Ko(g);Ko(a);return}function Wg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=u;u=u+32|0;e=a;g=a+8|0;p[e>>3]=0.0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;h=Lg(c,g,e)|0;if((b[g+11>>0]|0)>=0){u=a;return h|0}Ko(f[g>>2]|0);u=a;return h|0}function Xg(a){a=a|0;var c=0,d=0,e=0,g=0;c=f[a>>2]|0;f[a>>2]=0;if(!c)return;a=f[c+28>>2]|0;if(a|0){d=a;do{a=d;d=f[d>>2]|0;e=a+8|0;Xg(a+20|0);if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);Ko(a)}while((d|0)!=0)}d=c+20|0;a=f[d>>2]|0;f[d>>2]=0;if(a|0)Ko(a);a=f[c+8>>2]|0;if(a|0){d=a;do{a=d;d=f[d>>2]|0;e=a+8|0;g=f[a+20>>2]|0;if(g|0){f[a+24>>2]=g;Ko(g)}if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);Ko(a)}while((d|0)!=0)}d=f[c>>2]|0;f[c>>2]=0;if(d|0)Ko(d);Ko(c);return}function Yg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=u;u=u+16|0;e=a+12|0;g=a;f[e>>2]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;h=Dh(d)|0;if(h>>>0>4294967279)$n(g);if(h>>>0<11){b[g+11>>0]=h;if(!h)i=g;else{j=g;k=6}}else{l=h+16&-16;m=wk(l)|0;f[g>>2]=m;f[g+8>>2]=l|-2147483648;f[g+4>>2]=h;j=m;k=6}if((k|0)==6){Bf(j|0,d|0,h|0)|0;i=j}b[i+h>>0]=0;h=yh(c,g,e)|0;if((b[g+11>>0]|0)>=0){u=a;return h|0}Ko(f[g>>2]|0);u=a;return h|0}function Zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;c=a+4|0;d=f[c>>2]|0;e=f[a>>2]|0;g=(d-e|0)/144|0;h=d;if(g>>>0<b>>>0){Ad(a,b-g|0);return}if(g>>>0<=b>>>0)return;g=e+(b*144|0)|0;if((g|0)!=(h|0)){b=h;do{h=f[b+-12>>2]|0;if(h|0){f[b+-8>>2]=h;Ko(h)}h=f[b+-28>>2]|0;if(h|0){f[b+-24>>2]=h;Ko(h)}h=f[b+-40>>2]|0;if(h|0){f[b+-36>>2]=h;Ko(h)}di(b+-140|0);b=b+-144|0}while((b|0)!=(g|0))}f[c>>2]=g;return}function _g(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=a+8|0;c=f[b>>2]|0;if((c|0)<0){d=0;return d|0}e=a+4|0;a=f[e>>2]|0;g=a+4|0;h=f[a>>2]|0;i=(f[g>>2]|0)-h>>2;if(c>>>0<=i>>>0)if(c>>>0<i>>>0){f[g>>2]=h+(c<<2);j=c}else j=c;else{Eg(a,c-i|0);j=f[b>>2]|0}if((j|0)<=0){d=1;return d|0}b=f[e>>2]|0;e=f[b>>2]|0;i=(f[b+4>>2]|0)-e>>2;c=e;e=0;while(1){if(i>>>0<=e>>>0){k=9;break}f[c+(e<<2)>>2]=e;e=e+1|0;if((e|0)>=(j|0)){d=1;k=11;break}}if((k|0)==9)$n(b);else if((k|0)==11)return d|0;return 0}function $g(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=1416;b=a+60|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);c=f[a+48>>2]|0;if(c|0){f[a+52>>2]=c;Ko(c)}c=a+36|0;b=f[c>>2]|0;if(b|0){d=a+40|0;e=f[d>>2]|0;if((e|0)==(b|0))g=b;else{h=e;do{h=h+-4|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0)Pa[f[(f[e>>2]|0)+4>>2]&127](e)}while((h|0)!=(b|0));g=f[c>>2]|0}f[d>>2]=b;Ko(g)}f[a>>2]=1256;g=f[a+16>>2]|0;if(g|0){f[a+20>>2]=g;Ko(g)}g=f[a+4>>2]|0;if(!g)return;f[a+8>>2]=g;Ko(g);return}function ah(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=c+8|0;e=f[d+4>>2]|0;g=c+16|0;h=g;i=f[h>>2]|0;j=f[h+4>>2]|0;if(!((e|0)>(j|0)|((e|0)==(j|0)?(f[d>>2]|0)>>>0>i>>>0:0))){k=0;return k|0}d=b[(f[c>>2]|0)+i>>0]|0;e=vl(i|0,j|0,1,0)|0;j=g;f[j>>2]=e;f[j+4>>2]=H;do if(d<<24>>24<0)if(ah(a,c)|0){j=a;e=rl(f[j>>2]|0,f[j+4>>2]|0,7)|0;j=H;g=a;f[g>>2]=e;f[g+4>>2]=j;l=e|d&127;m=j;break}else{k=0;return k|0}else{l=d&255;m=0}while(0);d=a;f[d>>2]=l;f[d+4>>2]=m;k=1;return k|0}function bh(a){a=a|0;var b=0,c=0,d=0;f[a>>2]=3408;b=a+84|0;c=a+4|0;d=c+80|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+88>>2]=-1;f[a+92>>2]=-1;b=a+152|0;c=a+96|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=1065353216;b=a+212|0;c=a+156|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+216>>2]=0;f[a+220>>2]=0;f[a+224>>2]=0;ak(a+232|0);b=a+380|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;ym(a+400|0);f[a+416>>2]=-1;f[a+420>>2]=-1;return}function ch(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0;do if(((h[(f[a+4>>2]|0)+36>>0]|0)<<8&65535)<512){e=d+8|0;g=f[e+4>>2]|0;i=d+16|0;j=i;k=f[j>>2]|0;l=f[j+4>>2]|0;if((g|0)>(l|0)|((g|0)==(l|0)?(f[e>>2]|0)>>>0>k>>>0:0)){e=b[(f[d>>2]|0)+k>>0]|0;g=vl(k|0,l|0,1,0)|0;l=i;f[l>>2]=g;f[l+4>>2]=H;f[a+24>>2]=e&255;break}else{m=0;return m|0}}while(0);m=rc(a,c,d)|0;return m|0}function dh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=u;u=u+16|0;g=e;if(c|0){h=a+11|0;i=b[h>>0]|0;if(i<<24>>24<0){j=f[a+4>>2]|0;k=(f[a+8>>2]&2147483647)+-1|0}else{j=i&255;k=10}if((k-j|0)>>>0<c>>>0){th(a,k,j+c-k|0,j,j,0,0);l=b[h>>0]|0}else l=i;if(l<<24>>24<0)m=f[a>>2]|0;else m=a;ol(m+j|0,c,d)|0;d=j+c|0;if((b[h>>0]|0)<0)f[a+4>>2]=d;else b[h>>0]=d;b[g>>0]=0;xn(m+d|0,g)}u=e;return a|0}function eh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;c=f[a+28>>2]|0;if(c|0){d=c;do{c=d;d=f[d>>2]|0;e=c+8|0;g=c+20|0;h=f[g>>2]|0;f[g>>2]=0;if(h|0){eh(h);Ko(h)}if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);Ko(c)}while((d|0)!=0)}d=a+20|0;c=f[d>>2]|0;f[d>>2]=0;if(c|0)Ko(c);c=f[a+8>>2]|0;if(c|0){d=c;do{c=d;d=f[d>>2]|0;e=c+8|0;h=f[c+20>>2]|0;if(h|0){f[c+24>>2]=h;Ko(h)}if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);Ko(c)}while((d|0)!=0)}d=f[a>>2]|0;f[a>>2]=0;if(!d)return;Ko(d);return}function fh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=u;u=u+16|0;g=e;h=a+11|0;i=b[h>>0]|0;j=i<<24>>24<0;if(j)k=(f[a+8>>2]&2147483647)+-1|0;else k=10;do if(k>>>0>=d>>>0){if(j)l=f[a>>2]|0;else l=a;sm(l,c,d)|0;b[g>>0]=0;xn(l+d|0,g);if((b[h>>0]|0)<0){f[a+4>>2]=d;break}else{b[h>>0]=d;break}}else{if(j)m=f[a+4>>2]|0;else m=i&255;Cg(a,k,d-k|0,m,0,m,d,c)}while(0);u=e;return a|0}function gh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0;b=f[a+196>>2]|0;if(b|0){f[a+200>>2]=b;Ko(b)}b=a+184|0;c=f[b>>2]|0;if(c|0){d=a+188|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{e=h;h=h+-12|0;i=f[h>>2]|0;if(i|0){f[e+-8>>2]=i;Ko(i)}}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}g=f[a+156>>2]|0;if(g|0){f[a+160>>2]=g;Ko(g)}g=a+136|0;a=f[g>>2]|0;f[g>>2]=0;if(!a)return;g=a+-4|0;c=f[g>>2]|0;if(c|0){d=a+(c<<4)|0;do d=d+-16|0;while((d|0)!=(a|0))}Io(g);return}function hh(a){a=a|0;var b=0;b=f[a+56>>2]|0;if(b|0)Ko(b);b=f[a+32>>2]|0;if(b|0){f[a+36>>2]=b;Ko(b)}b=f[a+20>>2]|0;if(b|0){f[a+24>>2]=b;Ko(b)}b=f[a+8>>2]|0;if(b|0){f[a+12>>2]=b;Ko(b)}b=a+4|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=f[a+76>>2]|0;if(b|0){f[a+80>>2]=b;Ko(b)}b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=f[a+24>>2]|0;if(b|0){f[a+28>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0){f[a+16>>2]=b;Ko(b)}b=f[a>>2]|0;if(b|0){f[a+4>>2]=b;Ko(b)}Ko(a);return}function ih(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0;d=u;u=u+80|0;e=d;g=d+56|0;i=d+40|0;j=e;k=c;c=j+40|0;do{f[j>>2]=f[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(c|0));fc(i,e,g);e=f[i>>2]|0;if(!e){k=i+4|0;if((b[k+11>>0]|0)<0)Ko(f[k>>2]|0);k=h[g+7>>0]|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=k;u=d;return}else{f[a>>2]=e;e=i+4|0;Yi(a+4|0,e);if((b[e+11>>0]|0)<0)Ko(f[e>>2]|0);u=d;return}}function jh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0;d=f[a>>2]|0;if(!d){e=0;return e|0}g=f[c>>2]|0;if(!g){e=0;return e|0}h=f[g>>2]|0;yf(d,h,(f[g+4>>2]|0)-h|0,0)|0;b[a+24>>0]=b[c+24>>0]|0;f[a+28>>2]=f[c+28>>2];b[a+32>>0]=b[c+32>>0]|0;h=c+40|0;g=f[h+4>>2]|0;d=a+40|0;f[d>>2]=f[h>>2];f[d+4>>2]=g;g=c+48|0;d=f[g+4>>2]|0;h=a+48|0;f[h>>2]=f[g>>2];f[h+4>>2]=d;f[a+56>>2]=f[c+56>>2];d=c+8|0;c=a+8|0;f[c>>2]=f[d>>2];f[c+4>>2]=f[d+4>>2];f[c+8>>2]=f[d+8>>2];f[c+12>>2]=f[d+12>>2];e=1;return e|0}function kh(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!a){g=1;return g|0}h=d+8|0;i=f[h+4>>2]|0;j=d+16|0;k=j;l=f[k>>2]|0;m=f[k+4>>2]|0;if(!((i|0)>(m|0)|((i|0)==(m|0)?(f[h>>2]|0)>>>0>l>>>0:0))){g=0;return g|0}h=b[(f[d>>2]|0)+l>>0]|0;i=vl(l|0,m|0,1,0)|0;m=j;f[m>>2]=i;f[m+4>>2]=H;switch(h<<24>>24){case 0:{g=Jc(a,c,d,e)|0;return g|0}case 1:{g=fd(a,d,e)|0;return g|0}default:{g=0;return g|0}}return 0}function lh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;d=Dc(a,b)|0;if(!d){e=0;return e|0}b=d+20|0;a=f[b>>2]|0;g=d+24|0;d=f[g>>2]|0;if((a|0)==(d|0)){e=0;return e|0}Gh(c,d-a|0,0);a=gj(c,0)|0;c=f[b>>2]|0;Bf(a|0,c|0,(f[g>>2]|0)-c|0)|0;e=1;return e|0}function mh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=1312;Pg(a+60|0);b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=a+36|0;c=f[b>>2]|0;if(c|0){d=a+40|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{h=h+-24|0;Pa[f[f[h>>2]>>2]&127](h)}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}f[a>>2]=1256;g=f[a+16>>2]|0;if(g|0){f[a+20>>2]=g;Ko(g)}g=f[a+4>>2]|0;if(!g){Ko(a);return}f[a+8>>2]=g;Ko(g);Ko(a);return}function nh(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0;b[c+53>>0]=1;do if((f[c+4>>2]|0)==(e|0)){b[c+52>>0]=1;a=c+16|0;h=f[a>>2]|0;if(!h){f[a>>2]=d;f[c+24>>2]=g;f[c+36>>2]=1;if(!((g|0)==1?(f[c+48>>2]|0)==1:0))break;b[c+54>>0]=1;break}if((h|0)!=(d|0)){h=c+36|0;f[h>>2]=(f[h>>2]|0)+1;b[c+54>>0]=1;break}h=c+24|0;a=f[h>>2]|0;if((a|0)==2){f[h>>2]=g;i=g}else i=a;if((i|0)==1?(f[c+48>>2]|0)==1:0)b[c+54>>0]=1}while(0);return}function oh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;e=a+d|0;c=c&255;if((d|0)>=67){while(a&3){b[a>>0]=c;a=a+1|0}g=e&-4|0;h=g-64|0;i=c|c<<8|c<<16|c<<24;while((a|0)<=(h|0)){f[a>>2]=i;f[a+4>>2]=i;f[a+8>>2]=i;f[a+12>>2]=i;f[a+16>>2]=i;f[a+20>>2]=i;f[a+24>>2]=i;f[a+28>>2]=i;f[a+32>>2]=i;f[a+36>>2]=i;f[a+40>>2]=i;f[a+44>>2]=i;f[a+48>>2]=i;f[a+52>>2]=i;f[a+56>>2]=i;f[a+60>>2]=i;a=a+64|0}while((a|0)<(g|0)){f[a>>2]=i;a=a+4|0}}while((a|0)<(e|0)){b[a>>0]=c;a=a+1|0}return e-d|0}function ph(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!c){e=0;f[d>>2]=e;return}g=a+8|0;i=a+4|0;j=0-(b[a+12>>0]|0)&255;k=c;c=0;l=f[g>>2]|0;while(1){m=c<<1;if(l>>>0<4096?(n=f[i>>2]|0,(n|0)>0):0){o=f[a>>2]|0;p=n+-1|0;f[i>>2]=p;n=l<<8|(h[o+p>>0]|0);f[g>>2]=n;q=n}else q=l;n=q&255;p=W(q>>>8,j)|0;o=n>>>0<j>>>0;l=o?p+n|0:q-j-p|0;f[g>>2]=l;p=m|o&1;k=k+-1|0;if(!k){e=p;break}else c=p}f[d>>2]=e;return}function qh(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0;do if(!(en(a,f[c+8>>2]|0,g)|0)){if(en(a,f[c>>2]|0,g)|0){if((f[c+16>>2]|0)!=(d|0)?(h=c+20|0,(f[h>>2]|0)!=(d|0)):0){f[c+32>>2]=e;f[h>>2]=d;h=c+40|0;f[h>>2]=(f[h>>2]|0)+1;if((f[c+36>>2]|0)==1?(f[c+24>>2]|0)==2:0)b[c+54>>0]=1;f[c+44>>2]=4;break}if((e|0)==1)f[c+32>>2]=1}}else nk(0,c,d,e);while(0);return}function rh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=1312;Pg(a+60|0);b=f[a+48>>2]|0;if(b|0){f[a+52>>2]=b;Ko(b)}b=a+36|0;c=f[b>>2]|0;if(c|0){d=a+40|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{h=h+-24|0;Pa[f[f[h>>2]>>2]&127](h)}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g)}f[a>>2]=1256;g=f[a+16>>2]|0;if(g|0){f[a+20>>2]=g;Ko(g)}g=f[a+4>>2]|0;if(!g)return;f[a+8>>2]=g;Ko(g);return}function sh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=u;u=u+48|0;g=e+4|0;h=e;if((d|0)!=1){f[a>>2]=0;u=e;return}d=f[b+12>>2]|0;i=f[b+4>>2]|0;b=g;j=b+36|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(j|0));Te(h,c,d,i,g);i=f[g+24>>2]|0;if(i|0){f[g+28>>2]=i;Ko(i)}f[a>>2]=f[h>>2];u=e;return}function th(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;if((-17-c|0)>>>0<d>>>0)$n(a);if((b[a+11>>0]|0)<0)j=f[a>>2]|0;else j=a;if(c>>>0<2147483623){k=d+c|0;d=c<<1;l=k>>>0<d>>>0?d:k;m=l>>>0<11?11:l+16&-16}else m=-17;l=wk(m)|0;if(g|0)um(l,j,g)|0;k=e-h-g|0;if(k|0)um(l+g+i|0,j+g+h|0,k)|0;if((c|0)!=10)Ko(j);f[a>>2]=l;f[a+8>>2]=m|-2147483648;return}function uh(a,b){a=a|0;b=b|0;if(!b)return;else{uh(a,f[b>>2]|0);uh(a,f[b+4>>2]|0);Bh(b+20|0,f[b+24>>2]|0);Ko(b);return}}function vh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;e=u;u=u+32|0;g=e+20|0;h=e+16|0;i=e;j=b[a+24>>0]|0;f[i>>2]=f[294];f[i+4>>2]=f[295];f[i+8>>2]=f[296];f[i+12>>2]=f[297];f[h>>2]=c;f[g>>2]=f[h>>2];if(!(ob(a,g,j,i)|0)){k=0;u=e;return k|0}Ye(d,i,i+(j<<24>>24<<2)|0);k=1;u=e;return k|0}function wh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=u;u=u+64|0;e=d;if(!(en(a,b,0)|0))if((b|0)!=0?(g=Pf(b,1072,1056,0)|0,(g|0)!=0):0){b=e+4|0;h=b+52|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(h|0));f[e>>2]=g;f[e+8>>2]=a;f[e+12>>2]=-1;f[e+48>>2]=1;Sa[f[(f[g>>2]|0)+28>>2]&7](g,e,f[c>>2]|0,1);if((f[e+24>>2]|0)==1){f[c>>2]=f[e+16>>2];i=1}else i=0;j=i}else j=0;else j=1;u=d;return j|0}function xh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(c>>>0>0|(c|0)==0&a>>>0>4294967295){e=d;f=a;g=c;do{c=f;f=ln(f|0,g|0,10,0)|0;h=g;g=H;i=Bk(f|0,g|0,10,0)|0;j=wl(c|0,h|0,i|0,H|0)|0;e=e+-1|0;b[e>>0]=j&255|48}while(h>>>0>9|(h|0)==9&c>>>0>4294967295);k=f;l=e}else{k=a;l=d}if(!k)m=l;else{d=k;k=l;while(1){l=d;d=(d>>>0)/10|0;a=k+-1|0;b[a>>0]=l-(d*10|0)|48;if(l>>>0<10){m=a;break}else k=a}}return m|0}function yh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=Dc(a,c)|0;if(!e){g=0;return g|0}c=f[e+20>>2]|0;if(((f[e+24>>2]|0)-c|0)!=4){g=0;return g|0}e=c;c=h[e>>0]|h[e+1>>0]<<8|h[e+2>>0]<<16|h[e+3>>0]<<24;b[d>>0]=c;b[d+1>>0]=c>>8;b[d+2>>0]=c>>16;b[d+3>>0]=c>>24;g=1;return g|0}function zh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c+8|0;e=f[d+4>>2]|0;g=c+16|0;h=g;i=f[h>>2]|0;j=f[h+4>>2]|0;if(!((e|0)>(j|0)|((e|0)==(j|0)?(f[d>>2]|0)>>>0>i>>>0:0))){k=0;return k|0}d=b[(f[c>>2]|0)+i>>0]|0;e=vl(i|0,j|0,1,0)|0;j=g;f[j>>2]=e;f[j+4>>2]=H;j=d&255;do if(j&128)if(zh(a,c)|0){e=f[a>>2]<<7;f[a>>2]=e;l=e|d&127;break}else{k=0;return k|0}else l=j;while(0);f[a>>2]=l;k=1;return k|0}function Ah(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=3180;b=a+48|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);f[a>>2]=3608;c=f[a+20>>2]|0;if(c|0){f[a+24>>2]=c;Ko(c)}c=a+8|0;b=f[c>>2]|0;if(!b){Ko(a);return}d=a+12|0;e=f[d>>2]|0;if((e|0)==(b|0))g=b;else{h=e;do{h=h+-4|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0)Pa[f[(f[e>>2]|0)+4>>2]&127](e)}while((h|0)!=(b|0));g=f[c>>2]|0}f[d>>2]=b;Ko(g);Ko(a);return}function Bh(a,c){a=a|0;c=c|0;var d=0;if(!c)return;Bh(a,f[c>>2]|0);Bh(a,f[c+4>>2]|0);a=c+16|0;d=c+28|0;if((b[d+11>>0]|0)<0)Ko(f[d>>2]|0);if((b[a+11>>0]|0)<0)Ko(f[a>>2]|0);Ko(c);return}function Ch(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;b=f[a>>2]|0;if(!b)return;c=a+4|0;d=f[c>>2]|0;if((d|0)==(b|0))e=b;else{g=d;do{d=f[g+-12>>2]|0;if(d|0){f[g+-8>>2]=d;Ko(d)}d=f[g+-28>>2]|0;if(d|0){f[g+-24>>2]=d;Ko(d)}d=f[g+-40>>2]|0;if(d|0){f[g+-36>>2]=d;Ko(d)}di(g+-140|0);g=g+-144|0}while((g|0)!=(b|0));e=f[a>>2]|0}f[c>>2]=b;Ko(e);return}function Dh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;c=a;a:do if(!(c&3)){d=a;e=5}else{g=a;h=c;while(1){if(!(b[g>>0]|0)){i=h;break a}j=g+1|0;h=j;if(!(h&3)){d=j;e=5;break}else g=j}}while(0);if((e|0)==5){e=d;while(1){k=f[e>>2]|0;if(!((k&-2139062144^-2139062144)&k+-16843009))e=e+4|0;else break}if(!((k&255)<<24>>24))l=e;else{k=e;while(1){e=k+1|0;if(!(b[e>>0]|0)){l=e;break}else k=e}}i=l}return i-c|0}function Eh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;f[a>>2]=3180;b=a+48|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);f[a>>2]=3608;c=f[a+20>>2]|0;if(c|0){f[a+24>>2]=c;Ko(c)}c=a+8|0;b=f[c>>2]|0;if(!b)return;d=a+12|0;a=f[d>>2]|0;if((a|0)==(b|0))e=b;else{g=a;do{g=g+-4|0;a=f[g>>2]|0;f[g>>2]=0;if(a|0)Pa[f[(f[a>>2]|0)+4>>2]&127](a)}while((g|0)!=(b|0));e=f[c>>2]|0}f[d>>2]=b;Ko(e);return}function Fh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=a+64|0;if((f[d>>2]|0)==0?(e=wk(32)|0,Kk(e),g=f[d>>2]|0,f[d>>2]=e,g|0):0){e=f[g>>2]|0;if(e|0){f[g+4>>2]=e;Ko(e)}Ko(g)}g=Bj(f[a+28>>2]|0)|0;e=W(g,b[a+24>>0]|0)|0;g=((e|0)<0)<<31>>31;h=f[d>>2]|0;i=Bk(e|0,g|0,c|0,0)|0;if(!(yf(h,0,i,H)|0)){j=0;return j|0}oi(a,f[d>>2]|0,e,g,0,0);f[a+80>>2]=c;j=1;return j|0}function Gh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;e=u;u=u+16|0;g=e;h=a+11|0;i=b[h>>0]|0;j=i<<24>>24<0;if(j)k=f[a+4>>2]|0;else k=i&255;do if(k>>>0>=c>>>0)if(j){i=(f[a>>2]|0)+c|0;b[g>>0]=0;xn(i,g);f[a+4>>2]=c;break}else{b[g>>0]=0;xn(a+c|0,g);b[h>>0]=c;break}else dh(a,c-k|0,d)|0;while(0);u=e;return}function Hh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(b>>>0>1431655765|(c|b|0)<0){d=0;return d|0}e=b*3|0;nf(a,e,3736);nf(a+12|0,e,3732);Wh(a+24|0,c);c=a+76|0;e=f[c>>2]|0;f[c>>2]=0;f[a+80>>2]=0;f[a+84>>2]=0;if(e|0)Ko(e);e=a+64|0;c=f[e>>2]|0;f[e>>2]=0;f[a+68>>2]=0;f[a+72>>2]=0;if(!c){d=1;return d|0}Ko(c);d=1;return d|0}function Ih(a,c,d,e,g,h,i,j,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0;f[a>>2]=d;if(d|0){m=d+16|0;n=f[m+4>>2]|0;o=a+8|0;f[o>>2]=f[m>>2];f[o+4>>2]=n;n=d+24|0;d=f[n+4>>2]|0;o=a+16|0;f[o>>2]=f[n>>2];f[o+4>>2]=d}b[a+24>>0]=e;f[a+28>>2]=g;b[a+32>>0]=h&1;h=a+40|0;f[h>>2]=i;f[h+4>>2]=j;j=a+48|0;f[j>>2]=k;f[j+4>>2]=l;f[a+56>>2]=c;return}function Jh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;d=u;u=u+16|0;e=d;g=d+4|0;f[e>>2]=c;c=wk(32)|0;f[g>>2]=c;f[g+8>>2]=-2147483616;f[g+4>>2]=24;h=c;i=11931;j=h+24|0;do{b[h>>0]=b[i>>0]|0;h=h+1|0;i=i+1|0}while((h|0)<(j|0));b[c+24>>0]=0;Ph(Fc(a,e)|0,g,1);if((b[g+11>>0]|0)>=0){u=d;return}Ko(f[g>>2]|0);u=d;return}function Kh(a){a=a|0;var b=0,c=0,d=0;f[a>>2]=3240;b=a+84|0;c=a+4|0;d=c+80|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+88>>2]=-1;f[a+92>>2]=-1;b=a+152|0;c=a+96|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=1065353216;b=a+212|0;c=a+156|0;d=c+56|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=-1;f[a+216>>2]=0;f[a+220>>2]=0;f[a+224>>2]=0;ak(a+232|0);return}function Lh(a,b){a=a|0;b=b|0;var c=0;c=a+16|0;a=f[b>>2]|0;f[b>>2]=0;b=f[c>>2]|0;f[c>>2]=a;if(!b)return;a=b+88|0;c=f[a>>2]|0;f[a>>2]=0;if(c|0){a=f[c+8>>2]|0;if(a|0){f[c+12>>2]=a;Ko(a)}Ko(c)}c=f[b+68>>2]|0;if(c|0){f[b+72>>2]=c;Ko(c)}c=b+64|0;a=f[c>>2]|0;f[c>>2]=0;if(a|0){c=f[a>>2]|0;if(c|0){f[a+4>>2]=c;Ko(c)}Ko(a)}Ko(b);return}function Mh(a){a=a|0;var b=0;f[a>>2]=3340;b=f[a+100>>2]|0;if(b|0){f[a+104>>2]=b;Ko(b)}b=f[a+84>>2]|0;if(b|0){f[a+88>>2]=b;Ko(b)}b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+60>>2]|0;if(b|0){f[a+64>>2]=b;Ko(b)}f[a+12>>2]=3364;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b){Ko(a);return}Ko(b);Ko(a);return}function Nh(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=a;while(1){d=c+1|0;if(!(bo(b[c>>0]|0)|0))break;else c=d}a=b[c>>0]|0;switch(a|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:{g=0;h=c;i=a}}if((f|0)==5){g=e;h=d;i=b[d>>0]|0}if(!(to(i)|0))j=0;else{i=0;d=h;while(1){h=(i*10|0)+48-(b[d>>0]|0)|0;d=d+1|0;if(!(to(b[d>>0]|0)|0)){j=h;break}else i=h}}return ((g|0)==0?0-j|0:j)|0}function Oh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,i=0,j=0,k=0;b=f[a+32>>2]|0;c=b+8|0;d=f[c>>2]|0;e=f[c+4>>2]|0;c=b+16|0;g=c;i=f[g>>2]|0;j=vl(i|0,f[g+4>>2]|0,4,0)|0;g=H;if((e|0)<(g|0)|(e|0)==(g|0)&d>>>0<j>>>0){k=0;return k|0}d=(f[b>>2]|0)+i|0;i=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;d=c;f[d>>2]=j;f[d+4>>2]=g;if((i|0)<0){k=0;return k|0}f[(f[a+4>>2]|0)+80>>2]=i;k=1;return k|0}function Ph(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=u;u=u+16|0;g=e;Ti(g,d&1);d=zg(a,c)|0;c=d+11|0;if((b[c>>0]|0)<0){b[f[d>>2]>>0]=0;f[d+4>>2]=0}else{b[d>>0]=0;b[c>>0]=0}xf(d,0);f[d>>2]=f[g>>2];f[d+4>>2]=f[g+4>>2];f[d+8>>2]=f[g+8>>2];u=e;return}function Qh(a){a=a|0;var b=0;f[a>>2]=3340;b=f[a+100>>2]|0;if(b|0){f[a+104>>2]=b;Ko(b)}b=f[a+84>>2]|0;if(b|0){f[a+88>>2]=b;Ko(b)}b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+60>>2]|0;if(b|0){f[a+64>>2]=b;Ko(b)}f[a+12>>2]=3364;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b)return;Ko(b);return}function Rh(a,b){a=+a;b=b|0;var c=0,d=0,e=0,g=0.0,h=0.0,i=0,j=0.0;p[s>>3]=a;c=f[s>>2]|0;d=f[s+4>>2]|0;e=xl(c|0,d|0,52)|0;switch(e&2047){case 0:{if(a!=0.0){g=+Rh(a*18446744073709551616.0,b);h=g;i=(f[b>>2]|0)+-64|0}else{h=a;i=0}f[b>>2]=i;j=h;break}case 2047:{j=a;break}default:{f[b>>2]=(e&2047)+-1022;f[s>>2]=c;f[s+4>>2]=d&-2146435073|1071644672;j=+p[s>>3]}}return +j}function Sh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,i=0,j=0,k=0;b=f[a+32>>2]|0;c=b+8|0;d=f[c>>2]|0;e=f[c+4>>2]|0;c=b+16|0;g=c;i=f[g>>2]|0;j=vl(i|0,f[g+4>>2]|0,4,0)|0;g=H;if((e|0)<(g|0)|(e|0)==(g|0)&d>>>0<j>>>0){k=0;return k|0}d=(f[b>>2]|0)+i|0;i=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;d=c;f[d>>2]=j;f[d+4>>2]=g;f[(f[a+4>>2]|0)+80>>2]=i;k=1;return k|0}function Th(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;f[a>>2]=3608;b=f[a+20>>2]|0;if(b|0){f[a+24>>2]=b;Ko(b)}b=a+8|0;c=f[b>>2]|0;if(!c){Ko(a);return}d=a+12|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{h=h+-4|0;e=f[h>>2]|0;f[h>>2]=0;if(e|0)Pa[f[(f[e>>2]|0)+4>>2]&127](e)}while((h|0)!=(c|0));g=f[b>>2]|0}f[d>>2]=c;Ko(g);Ko(a);return}function Uh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0;d=0;while(1){if((h[14154+d>>0]|0)==(a|0)){e=4;break}g=d+1|0;if((g|0)==87){i=87;e=5;break}else d=g}if((e|0)==4)if(!d)j=14242;else{i=d;e=5}if((e|0)==5){e=14242;d=i;while(1){i=e;do{a=i;i=i+1|0}while((b[a>>0]|0)!=0);d=d+-1|0;if(!d){j=i;break}else e=i}}return ho(j,f[c+20>>2]|0)|0}function Vh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=u;u=u+16|0;g=e;if(d>>>0>4294967279)$n(a);if(d>>>0<11){b[a+11>>0]=d;h=a}else{i=d+16&-16;j=wk(i)|0;f[a>>2]=j;f[a+8>>2]=i|-2147483648;f[a+4>>2]=d;h=j}um(h,c,d)|0;b[g>>0]=0;xn(h+d|0,g);u=e;return}function Wh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;c=a+8|0;d=f[a>>2]|0;if((f[c>>2]|0)-d>>2>>>0>=b>>>0)return;e=a+4|0;if(b>>>0>1073741823){g=qa(8)|0;Dm(g,13552);f[g>>2]=4908;ta(g|0,1128,105)}g=(f[e>>2]|0)-d|0;h=wk(b<<2)|0;if((g|0)>0)Bf(h|0,d|0,g|0)|0;f[a>>2]=h;f[e>>2]=h+(g>>2<<2);f[c>>2]=h+(b<<2);if(!d)return;Ko(d);return}function Xh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;c=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;if((c|0)<=0){d=1;return d|0}e=a+36|0;g=a+48|0;a=0;while(1){h=f[(f[e>>2]|0)+(a<<2)>>2]|0;a=a+1|0;if(!(Ma[f[(f[h>>2]|0)+20>>2]&31](h,g,b)|0)){d=0;i=5;break}if((a|0)>=(c|0)){d=1;i=5;break}}if((i|0)==5)return d|0;return 0}function Yh(a){a=a|0;var b=0,c=0;f[a>>2]=1368;b=a+16|0;a=f[b>>2]|0;f[b>>2]=0;if(!a)return;b=a+88|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0){b=f[c+8>>2]|0;if(b|0){f[c+12>>2]=b;Ko(b)}Ko(c)}c=f[a+68>>2]|0;if(c|0){f[a+72>>2]=c;Ko(c)}c=a+64|0;b=f[c>>2]|0;f[c>>2]=0;if(b|0){c=f[b>>2]|0;if(c|0){f[b+4>>2]=c;Ko(c)}Ko(b)}Ko(a);return}function Zh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c<<24>>24){case 0:{c=wk(20)|0;Jl(c);d=c;break}case 1:{c=wk(24)|0;jm(c);d=c;break}case 2:{c=wk(36)|0;Lk(c);d=c;break}case 3:{c=wk(28)|0;am(c);d=c;break}default:d=0}f[a>>2]=d;return}function _h(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;f[a>>2]=3608;b=f[a+20>>2]|0;if(b|0){f[a+24>>2]=b;Ko(b)}b=a+8|0;c=f[b>>2]|0;if(!c)return;d=a+12|0;a=f[d>>2]|0;if((a|0)==(c|0))e=c;else{g=a;do{g=g+-4|0;a=f[g>>2]|0;f[g>>2]=0;if(a|0)Pa[f[(f[a>>2]|0)+4>>2]&127](a)}while((g|0)!=(c|0));e=f[b>>2]|0}f[d>>2]=c;Ko(e);return}function $h(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;a=f[b+4>>2]|0;if(!a){d=0;return d|0}e=f[(f[(f[b+8>>2]|0)+(c<<2)>>2]|0)+60>>2]|0;c=f[a+40>>2]|0;b=f[a+44>>2]|0;if((c|0)==(b|0)){d=0;return d|0}a=c;while(1){c=f[a>>2]|0;a=a+4|0;if((f[c+40>>2]|0)==(e|0)){d=c;g=6;break}if((a|0)==(b|0)){d=0;g=6;break}}if((g|0)==6)return d|0;return 0}function ai(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;c=Ka[f[(f[a>>2]|0)+24>>2]&127](a)|0;if((c|0)<=0){d=1;return d|0}e=a+36|0;g=a+48|0;a=0;while(1){h=f[(f[e>>2]|0)+(a<<2)>>2]|0;a=a+1|0;if(!(Ma[f[(f[h>>2]|0)+16>>2]&31](h,g,b)|0)){d=0;i=5;break}if((a|0)>=(c|0)){d=1;i=5;break}}if((i|0)==5)return d|0;return 0}function bi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;c=f[b>>2]|0;if(!c){d=0;return d|0}e=a+44|0;g=f[e>>2]|0;if(g>>>0<(f[a+48>>2]|0)>>>0){f[b>>2]=0;f[g>>2]=c;f[e>>2]=(f[e>>2]|0)+4;d=1;return d|0}else{ef(a+40|0,b);d=1;return d|0}return 0}function ci(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;e=Jf(a,c)|0;if((e|0)!=(a+4|0)){a=e+28|0;if((b[a+11>>0]|0)<0)g=f[a>>2]|0;else g=a;a=Nh(g)|0;if((a|0)!=-1){h=(a|0)!=0;return h|0}}h=d;return h|0}function di(a){a=a|0;var b=0;b=f[a+84>>2]|0;if(b|0){f[a+88>>2]=b;Ko(b)}b=f[a+72>>2]|0;if(b|0){f[a+76>>2]=b;Ko(b)}b=f[a+52>>2]|0;if(b|0){f[a+56>>2]=b;Ko(b)}b=f[a+40>>2]|0;if(b|0){f[a+44>>2]=b;Ko(b)}b=f[a+28>>2]|0;if(b|0){f[a+32>>2]=b;Ko(b)}b=f[a+12>>2]|0;if(b|0)Ko(b);b=f[a>>2]|0;if(!b)return;Ko(b);return}function ei(a){a=a|0;var b=0;if(!(f[a+44>>2]|0)){b=0;return b|0}if(!(f[a+48>>2]|0)){b=0;return b|0}if(!(f[a+24>>2]|0)){b=0;return b|0}if(!(f[a+28>>2]|0)){b=0;return b|0}if(!(f[a+32>>2]|0)){b=0;return b|0}if(!(f[a+36>>2]|0)){b=0;return b|0}b=(f[a+72>>2]|0)!=-1;return b|0}function fi(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0;f[c>>2]=2;d=a+4|0;a=c+8|0;e=f[a>>2]|0;g=(f[c+12>>2]|0)-e|0;if(g>>>0<4294967292){eg(a,g+4|0,0);i=f[a>>2]|0}else i=e;e=i+g|0;g=h[d>>0]|h[d+1>>0]<<8|h[d+2>>0]<<16|h[d+3>>0]<<24;b[e>>0]=g;b[e+1>>0]=g>>8;b[e+2>>0]=g>>16;b[e+3>>0]=g>>24;return}function gi(a){a=a|0;var b=0;if(!(f[a+64>>2]|0)){b=0;return b|0}if(!(f[a+68>>2]|0)){b=0;return b|0}if(!(f[a+44>>2]|0)){b=0;return b|0}if(!(f[a+48>>2]|0)){b=0;return b|0}if(!(f[a+52>>2]|0)){b=0;return b|0}if(!(f[a+56>>2]|0)){b=0;return b|0}b=(f[a+92>>2]|0)!=-1;return b|0}function hi(a){a=a|0;var c=0;if(!a)return;c=a+28|0;if((b[c+11>>0]|0)<0)Ko(f[c>>2]|0);uh(a+12|0,f[a+16>>2]|0);Bh(a,f[a+4>>2]|0);Ko(a);return}function ii(a){a=a|0;var b=0;f[a>>2]=2208;b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+84>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0)Ko(b);b=f[a+60>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function ji(a){a=a|0;var b=0;f[a>>2]=1760;b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+84>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0)Ko(b);b=f[a+60>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function ki(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0;a=c+16|0;g=f[a>>2]|0;do if(g){if((g|0)!=(d|0)){h=c+36|0;f[h>>2]=(f[h>>2]|0)+1;f[c+24>>2]=2;b[c+54>>0]=1;break}h=c+24|0;if((f[h>>2]|0)==2)f[h>>2]=e}else{f[a>>2]=d;f[c+24>>2]=e;f[c+36>>2]=1}while(0);return}function li(a){a=a|0;var b=0;f[a>>2]=2208;b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+84>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0)Ko(b);b=f[a+60>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function mi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(((h[(f[a+4>>2]|0)+36>>0]|0)<<8&65535)<512?!(Ka[f[(f[a>>2]|0)+52>>2]&127](a)|0):0){d=0;return d|0}d=rc(a,b,c)|0;return d|0}function ni(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=wl(e^a|0,f^b|0,e|0,f|0)|0;b=H;a=g^e;e=h^f;return wl((Gc(i,b,wl(g^c|0,h^d|0,g|0,h|0)|0,H,0)|0)^a|0,H^e|0,a|0,e|0)|0}function oi(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;f[a>>2]=b;h=b+16|0;i=f[h+4>>2]|0;j=a+8|0;f[j>>2]=f[h>>2];f[j+4>>2]=i;i=b+24|0;b=f[i+4>>2]|0;j=a+16|0;f[j>>2]=f[i>>2];f[j+4>>2]=b;b=a+40|0;f[b>>2]=c;f[b+4>>2]=d;d=a+48|0;f[d>>2]=e;f[d+4>>2]=g;return}function pi(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0;c=b[a+12>>0]|0;d=a+8|0;e=f[d>>2]|0;if(e>>>0<4096?(g=a+4|0,i=f[g>>2]|0,(i|0)>0):0){j=f[a>>2]|0;a=i+-1|0;f[g>>2]=a;g=e<<8|(h[j+a>>0]|0);f[d>>2]=g;k=g}else k=e;e=k&255;g=0-c&255;c=W(k>>>8,g)|0;a=e>>>0<g>>>0;f[d>>2]=a?c+e|0:k-g-c|0;return a|0}function qi(a){a=a|0;var b=0;f[a>>2]=1760;b=f[a+96>>2]|0;if(b|0)Ko(b);b=f[a+84>>2]|0;if(b|0)Ko(b);b=f[a+72>>2]|0;if(b|0)Ko(b);b=f[a+60>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function ri(a){a=a|0;var b=0,c=0;if(!a)return;b=a+88|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0){b=f[c+8>>2]|0;if(b|0){f[c+12>>2]=b;Ko(b)}Ko(c)}c=f[a+68>>2]|0;if(c|0){f[a+72>>2]=c;Ko(c)}c=a+64|0;b=f[c>>2]|0;f[c>>2]=0;if(b|0){c=f[b>>2]|0;if(c|0){f[b+4>>2]=c;Ko(c)}Ko(b)}Ko(a);return}function si(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=u;u=u+16|0;g=e;ne(g,a,c,d);d=a+24|0;f[d>>2]=f[g>>2];c=g+4|0;Hj(a+28|0,c)|0;if((b[c+11>>0]|0)>=0){u=e;return d|0}Ko(f[c>>2]|0);u=e;return d|0}function ti(a){a=a|0;var c=0,d=0,e=0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=0;f[a+20>>2]=0;b[a+24>>0]=1;c=a+68|0;d=a+28|0;e=d+40|0;do{f[d>>2]=0;d=d+4|0}while((d|0)<(e|0));f[c>>2]=a;c=a+72|0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;f[c+16>>2]=0;f[c+20>>2]=0;return}function ui(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=u;u=u+16|0;g=e;se(g,a,c,d);d=a+24|0;f[d>>2]=f[g>>2];c=g+4|0;Hj(a+28|0,c)|0;if((b[c+11>>0]|0)>=0){u=e;return d|0}Ko(f[c>>2]|0);u=e;return d|0}function vi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=u;u=u+256|0;g=f;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;oh(g|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;d=e;do{Pm(a,g,256);d=d+-256|0}while(d>>>0>255);h=b&255}else h=e;Pm(a,g,h)}u=f;return}function wi(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;b=f[a+8>>2]|0;c=f[a+12>>2]|0;if((b|0)==(c|0)){d=1;return d|0}e=a+32|0;a=b;while(1){b=f[a>>2]|0;a=a+4|0;if(!(La[f[(f[b>>2]|0)+16>>2]&127](b,f[e>>2]|0)|0)){d=0;g=5;break}if((a|0)==(c|0)){d=1;g=5;break}}if((g|0)==5)return d|0;return 0}function xi(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=f[a+8>>2]|0;if((b[e+24>>0]|0)<1){g=0;return g|0}if(!(Fh(e,(f[c+4>>2]|0)-(f[c>>2]|0)>>2)|0)){g=0;return g|0}g=Ma[f[(f[a>>2]|0)+32>>2]&31](a,c,d)|0;return g|0}function yi(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0;if(en(a,f[b+8>>2]|0,g)|0)nh(0,b,c,d,e);else{h=f[a+8>>2]|0;Ua[f[(f[h>>2]|0)+20>>2]&3](h,b,c,d,e,g)}return}function zi(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;if(!a)return;c=f[a>>2]|0;if(c|0){d=a+4|0;e=f[d>>2]|0;if((e|0)==(c|0))g=c;else{h=e;do{h=h+-12|0;if((b[h+11>>0]|0)<0)Ko(f[h>>2]|0)}while((h|0)!=(c|0));g=f[a>>2]|0}f[d>>2]=c;Ko(g)}Ko(a);return}function Ai(a){a=a|0;var b=0;f[a>>2]=3292;b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}f[a+12>>2]=3316;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b){Ko(a);return}Ko(b);Ko(a);return}function Bi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;c=f[a+12>>2]|0;d=f[a+8>>2]|0;a=d;if((c|0)==(d|0)){e=0;return e|0}g=c-d>>2;d=0;while(1){c=f[a+(d<<2)>>2]|0;if((f[c+60>>2]|0)==(b|0)){e=c;h=5;break}d=d+1|0;if(d>>>0>=g>>>0){e=0;h=5;break}}if((h|0)==5)return e|0;return 0}function Ci(a){a=a|0;var b=0,c=0;f[a>>2]=2264;b=f[a+76>>2]|0;if(b|0)Ko(b);b=a+68|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1536;c=f[a+32>>2]|0;if(!c){Ko(a);return}f[a+36>>2]=c;Ko(c);Ko(a);return}function Di(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;c=f[a+12>>2]|0;d=f[a+8>>2]|0;a=d;if((c|0)==(d|0)){e=-1;return e|0}g=c-d>>2;d=0;while(1){if((f[(f[a+(d<<2)>>2]|0)+60>>2]|0)==(b|0)){e=d;h=5;break}d=d+1|0;if(d>>>0>=g>>>0){e=-1;h=5;break}}if((h|0)==5)return e|0;return 0}function Ei(a){a=a|0;var b=0;f[a>>2]=3384;b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}f[a+12>>2]=3364;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b){Ko(a);return}Ko(b);Ko(a);return}function Fi(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;a:do if(!d)e=0;else{f=a;g=d;h=c;while(1){i=b[f>>0]|0;j=b[h>>0]|0;if(i<<24>>24!=j<<24>>24)break;g=g+-1|0;if(!g){e=0;break a}else{f=f+1|0;h=h+1|0}}e=(i&255)-(j&255)|0}while(0);return e|0}function Gi(a){a=a|0;var b=0,c=0;f[a>>2]=3052;b=a+28|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1476;c=a+20|0;b=f[c>>2]|0;f[c>>2]=0;if(!b){Yh(a);Ko(a);return}Pa[f[(f[b>>2]|0)+4>>2]&127](b);Yh(a);Ko(a);return}function Hi(a){a=a|0;var b=0,c=0;f[a>>2]=1816;b=f[a+76>>2]|0;if(b|0)Ko(b);b=a+68|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1536;c=f[a+32>>2]|0;if(!c){Ko(a);return}f[a+36>>2]=c;Ko(c);Ko(a);return}function Ii(a){a=a|0;var c=0,d=0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;c=0;while(1){if((c|0)==3)break;f[a+(c<<2)>>2]=0;c=c+1|0}if((b[a+11>>0]|0)<0)d=(f[a+8>>2]&2147483647)+-1|0;else d=10;Gh(a,d,0);return}function Ji(a){a=a|0;var b=0;f[a>>2]=3292;b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}f[a+12>>2]=3316;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b)return;Ko(b);return}function Ki(a){a=a|0;var b=0,c=0;f[a>>2]=2264;b=f[a+76>>2]|0;if(b|0)Ko(b);b=a+68|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1536;c=f[a+32>>2]|0;if(!c)return;f[a+36>>2]=c;Ko(c);return}function Li(a){a=a|0;var b=0;f[a>>2]=3384;b=f[a+64>>2]|0;if(b|0){f[a+68>>2]=b;Ko(b)}f[a+12>>2]=3364;b=f[a+32>>2]|0;if(b|0)Ko(b);b=f[a+20>>2]|0;if(!b)return;Ko(b);return}function Mi(a){a=a|0;var b=0,c=0;f[a>>2]=3052;b=a+28|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1476;c=a+20|0;b=f[c>>2]|0;f[c>>2]=0;if(!b){Yh(a);return}Pa[f[(f[b>>2]|0)+4>>2]&127](b);Yh(a);return}function Ni(a){a=a|0;var b=0,c=0;f[a>>2]=1816;b=f[a+76>>2]|0;if(b|0)Ko(b);b=a+68|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Io(c);f[a>>2]=1536;c=f[a+32>>2]|0;if(!c)return;f[a+36>>2]=c;Ko(c);return}function Oi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(en(a,f[b+8>>2]|0,0)|0)ki(0,b,c,d);else{e=f[a+8>>2]|0;Sa[f[(f[e>>2]|0)+28>>2]&7](e,b,c,d)}return}function Pi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=W(c,b)|0;g=(b|0)==0?0:c;if((f[d+76>>2]|0)>-1){c=(Po(d)|0)==0;h=lg(a,e,d)|0;if(c)i=h;else{Oo(d);i=h}}else i=lg(a,e,d)|0;if((i|0)==(e|0))j=g;else j=(i>>>0)/(b>>>0)|0;return j|0}function Qi(a,b){a=a|0;b=b|0;var c=0,d=0;if((b|0)<0){c=0;return c|0}d=f[a+4>>2]|0;if(((f[d+12>>2]|0)-(f[d+8>>2]|0)>>2|0)<=(b|0)){c=0;return c|0}d=f[(f[a+8>>2]|0)+(f[(f[a+20>>2]|0)+(b<<2)>>2]<<2)>>2]|0;c=La[f[(f[d>>2]|0)+32>>2]&127](d,b)|0;return c|0}function Ri(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0;d=b[a>>0]|0;e=b[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24){f=e;g=d}else{d=c;c=a;do{c=c+1|0;d=d+1|0;a=b[c>>0]|0;e=b[d>>0]|0}while(!(a<<24>>24==0?1:a<<24>>24!=e<<24>>24));f=e;g=a}return (g&255)-(f&255)|0}function Si(a,b){a=a|0;b=b|0;var c=0;c=wk(40)|0;f[c>>2]=-1;Kk(c+8|0);Qa[f[(f[a>>2]|0)+16>>2]&7](a,c);a=b+88|0;b=f[a>>2]|0;f[a>>2]=c;if(!b)return 1;c=f[b+8>>2]|0;if(c|0){f[b+12>>2]=c;Ko(c)}Ko(b);return 1}function Ti(a,b){a=a|0;b=b|0;var c=0,d=0;c=u;u=u+16|0;d=c;Ii(d);Ig(a,d,b);om(d);u=c;return}function Ui(a,b){a=a|0;b=b|0;var c=0,d=0;c=f[a+4>>2]|0;if(c|0?((h[c+36>>0]|0)<<8&65535)<512:0){d=1;return d|0}d=La[f[(f[a>>2]|0)+48>>2]&127](a,(f[b+4>>2]|0)-(f[b>>2]|0)>>2)|0;return d|0}function Vi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;d=u;u=u+32|0;e=d;g=d+20|0;f[e>>2]=f[a+60>>2];f[e+4>>2]=0;f[e+8>>2]=b;f[e+12>>2]=g;f[e+16>>2]=c;if((Ol(xa(140,e|0)|0)|0)<0){f[g>>2]=-1;h=-1}else h=f[g>>2]|0;u=d;return h|0}function Wi(a,b){a=a|0;b=b|0;var c=0,d=0;if((b|0)==-1|(b|0)>4){c=0;return c|0}d=f[a+20+(b*12|0)>>2]|0;if(((f[a+20+(b*12|0)+4>>2]|0)-d|0)<=0){c=0;return c|0}b=f[d>>2]|0;if((b|0)==-1){c=0;return c|0}c=f[(f[a+8>>2]|0)+(b<<2)>>2]|0;return c|0}function Xi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=f[a+16>>2]|0;if(((f[a+20>>2]|0)-c>>2|0)<=(b|0)){d=0;return d|0}e=f[c+(b<<2)>>2]|0;if((e|0)<0){d=0;return d|0}d=Nf(f[(f[a+36>>2]|0)+(e<<2)>>2]|0)|0;return d|0}function Yi(a,c){a=a|0;c=c|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;if((b[c+11>>0]|0)<0)Vh(a,f[c>>2]|0,f[c+4>>2]|0);else{f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2]}return}function Zi(a,b){a=a|0;b=b|0;var c=0;ek(a);f[a>>2]=1416;c=a+36|0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;f[c+16>>2]=0;f[c+20>>2]=0;c=f[b>>2]|0;f[b>>2]=0;f[a+60>>2]=c;return}function _i(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;zc(a,b);if((b|0)<=-1)return;c=a+88|0;d=f[c>>2]|0;e=f[a+84>>2]|0;if((d-e>>2|0)<=(b|0))return;a=e+(b<<2)|0;b=a+4|0;e=d-b|0;if(e|0)Rj(a|0,b|0,e|0)|0;f[c>>2]=a+(e>>2<<2);return}function $i(a,c){a=a|0;c=c|0;var d=0,e=0;d=a;e=c;c=d+64|0;do{f[d>>2]=f[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(c|0));e=a+64|0;f[a+88>>2]=0;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;f[e+12>>2]=0;f[e+16>>2]=0;b[e+20>>0]=0;return}function aj(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if((a|0)==0&(c|0)==0)f=d;else{g=d;d=c;c=a;while(1){a=g+-1|0;b[a>>0]=h[14136+(c&15)>>0]|0|e;c=xl(c|0,d|0,4)|0;d=H;if((c|0)==0&(d|0)==0){f=a;break}else g=a}}return f|0}function bj(a){a=a|0;var c=0,d=0,e=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;d=f[a>>2]|0;if(!(d&8)){f[a+8>>2]=0;f[a+4>>2]=0;c=f[a+44>>2]|0;f[a+28>>2]=c;f[a+20>>2]=c;f[a+16>>2]=c+(f[a+48>>2]|0);e=0}else{f[a>>2]=d|32;e=-1}return e|0}function cj(a){a=a|0;if(!(f[a+60>>2]|0))return 0;if(!(f[a+44>>2]|0))return 0;if(!(f[a+48>>2]|0))return 0;if(!(f[a+52>>2]|0))return 0;else return (f[a+56>>2]|0)!=0|0;return 0}function dj(a,b){a=a|0;b=b|0;var c=0,d=0;c=f[b+88>>2]|0;if(!c){d=0;return d|0}if((f[c>>2]|0)!=2){d=0;return d|0}b=f[c+8>>2]|0;f[a+4>>2]=h[b>>0]|h[b+1>>0]<<8|h[b+2>>0]<<16|h[b+3>>0]<<24;d=1;return d|0}function ej(a){a=a|0;var b=0;if(!(f[a+44>>2]|0)){b=0;return b|0}if(!(f[a+48>>2]|0)){b=0;return b|0}if(!(f[a+52>>2]|0)){b=0;return b|0}b=(f[a+56>>2]|0)!=0;return b|0}function fj(a){a=a|0;var b=0;f[a>>2]=2488;b=f[a+76>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function gj(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0;d=b[a+11>>0]|0;e=d<<24>>24<0;if(e)g=f[a+4>>2]|0;else g=d&255;if(g>>>0<=c>>>0)$n(a);if(e)h=f[a>>2]|0;else h=a;return h+c|0}function hj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;e=u;u=u+32|0;g=e;f[a+36>>2]=15;if((f[a>>2]&64|0)==0?(f[g>>2]=f[a+60>>2],f[g+4>>2]=21523,f[g+8>>2]=e+16,za(54,g|0)|0):0)b[a+75>>0]=-1;g=hf(a,c,d)|0;u=e;return g|0}function ij(a){a=a|0;var b=0;f[a>>2]=2040;b=f[a+76>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function jj(a,b,c){a=a|0;b=b|0;c=c|0;if((b|0)!=0&(c|0)!=0){jc(a,b,c);return}else{qc(a,0,0);return}}function kj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=_(e);f[a+4>>2]=b;Ye(a+8|0,c,c+(d<<2)|0);n[a+20>>2]=e;return}function lj(a,b){a=a|0;b=b|0;var c=0;if(!(La[f[(f[a>>2]|0)+36>>2]&127](a,b)|0)){c=0;return c|0}if(!(La[f[(f[a>>2]|0)+40>>2]&127](a,b)|0)){c=0;return c|0}c=Ka[f[(f[a>>2]|0)+44>>2]&127](a)|0;return c|0}function mj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;d=f[c>>2]|0;c=a;e=b-a>>2;while(1){if(!e)break;a=(e|0)/2|0;b=c+(a<<2)|0;g=(f[b>>2]|0)>>>0<d>>>0;c=g?b+4|0:c;e=g?e+-1-a|0:a}return c|0}function nj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if(!(Wk(a,c,d)|0)){e=0;return e|0}d=f[a+8>>2]|0;if((b[d+24>>0]|0)!=3){e=0;return e|0}e=(f[d+28>>2]|0)==9;return e|0}function oj(a){a=a|0;var c=0;f[a>>2]=0;c=a+8|0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;b[a+24>>0]=1;f[a+28>>2]=9;c=a+40|0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;f[a+56>>2]=-1;f[a+60>>2]=0;return}function pj(a,c){a=a|0;c=c|0;var d=0;if(f[c+56>>2]|0){d=0;return d|0}if((b[c+24>>0]|0)!=3){d=0;return d|0}f[a+44>>2]=c;d=1;return d|0}function qj(a,c){a=a|0;c=c|0;var d=0,e=0;a=u;u=u+32|0;d=a;ih(d,c);c=f[d+16>>2]|0;e=d+4|0;if((b[e+11>>0]|0)>=0){u=a;return c|0}Ko(f[e>>2]|0);u=a;return c|0}function rj(a){a=a|0;var b=0;f[a>>2]=2488;b=f[a+76>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function sj(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;if(!(to(b[f[a>>2]>>0]|0)|0))c=0;else{d=0;while(1){e=f[a>>2]|0;g=(d*10|0)+-48+(b[e>>0]|0)|0;h=e+1|0;f[a>>2]=h;if(!(to(b[h>>0]|0)|0)){c=g;break}else d=g}}return c|0}function tj(a,c){a=a|0;c=c|0;var d=0;if(f[c+56>>2]|0){d=0;return d|0}if((b[c+24>>0]|0)!=3){d=0;return d|0}f[a+64>>2]=c;d=1;return d|0}function uj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!(Wk(a,b,c)|0)){d=0;return d|0}d=(f[(f[(f[(f[b+4>>2]|0)+8>>2]|0)+(c<<2)>>2]|0)+28>>2]|0)==9;return d|0}function vj(a){a=a|0;var b=0,c=0;b=f[r>>2]|0;c=b+a|0;if((a|0)>0&(c|0)<(b|0)|(c|0)<0){da()|0;wa(12);return -1}f[r>>2]=c;if((c|0)>(ca()|0)?(ba()|0)==0:0){f[r>>2]=b;wa(12);return -1}return b|0}function wj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;if((a|0)==0&(c|0)==0)e=d;else{f=d;d=c;c=a;while(1){a=f+-1|0;b[a>>0]=c&7|48;c=xl(c|0,d|0,3)|0;d=H;if((c|0)==0&(d|0)==0){e=a;break}else f=a}}return e|0}function xj(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if(en(a,f[b+8>>2]|0,g)|0)nh(0,b,c,d,e);return}function yj(a){a=a|0;var b=0;f[a>>2]=2040;b=f[a+76>>2]|0;if(b|0)Ko(b);f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function zj(a){a=a|0;var c=0,d=0,e=0,g=0;c=u;u=u+16|0;d=c;e=f[a+4>>2]|0;g=(f[e+56>>2]|0)-(f[e+52>>2]|0)>>2;b[d>>0]=0;Gf(a+20|0,g,d);u=c;return}function Aj(a,c){a=a|0;c=c|0;var d=0;if(((c|0)!=0?(f[c+56>>2]|0)==0:0)?(b[c+24>>0]|0)==3:0){f[a+60>>2]=c;d=1}else d=0;return d|0}function Bj(a){a=a|0;var b=0;switch(a|0){case 11:case 2:case 1:{b=1;break}case 4:case 3:{b=2;break}case 6:case 5:{b=4;break}case 8:case 7:{b=8;break}case 9:{b=4;break}case 10:{b=8;break}default:b=-1}return b|0}function Cj(a){a=a|0;var c=0,d=0,e=0;b[a+36>>0]=0;c=vl(f[a+32>>2]|0,0,7,0)|0;d=xl(c|0,H|0,3)|0;c=a+16|0;a=c;e=vl(d|0,H|0,f[a>>2]|0,f[a+4>>2]|0)|0;a=c;f[a>>2]=e;f[a+4>>2]=H;return}function Dj(a){a=a|0;var c=0,d=0,e=0,g=0;c=u;u=u+16|0;d=c;e=f[a+4>>2]|0;g=(f[e+28>>2]|0)-(f[e+24>>2]|0)>>2;b[d>>0]=0;Gf(a+20|0,g,d);u=c;return}function Ej(a){a=a|0;var b=0,c=0,d=0;b=a+60|0;c=a;d=c+60|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));f[b>>2]=a;b=a+64|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[b+20>>2]=0;return}function Fj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=(f[a+96>>2]|0)+(b*12|0)|0;Ye(c,d,d+12|0);return 1}function Gj(a){a=a|0;var b=0;f[a>>2]=2376;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function Hj(a,c){a=a|0;c=c|0;var d=0,e=0;if((a|0)!=(c|0)){d=b[c+11>>0]|0;e=d<<24>>24<0;fh(a,e?f[c>>2]|0:c,e?f[c+4>>2]|0:d&255)|0}return a|0}function Ij(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=W(d,c)|0;f=a>>>16;a=(e>>>16)+(W(d,f)|0)|0;d=b>>>16;b=W(d,c)|0;return (H=(a>>>16)+(W(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function Jj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Dh(b)|0;d=wk(c+13|0)|0;f[d>>2]=c;f[d+4>>2]=c;f[d+8>>2]=0;e=Fn(d)|0;Bf(e|0,b|0,c+1|0)|0;f[a>>2]=e;return}function Kj(a,b){a=a|0;b=b|0;var c=0,d=0;if((b|0)==-1|(b|0)>4){c=-1;return c|0}d=f[a+20+(b*12|0)>>2]|0;if(((f[a+20+(b*12|0)+4>>2]|0)-d|0)<=0){c=-1;return c|0}c=f[d>>2]|0;return c|0}function Lj(){var a=0,b=0;a=wk(40)|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=1065353216;b=a+20|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[a+36>>2]=1065353216;return a|0}function Mj(a){a=a|0;var b=0;f[a>>2]=1928;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function Nj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f[b+44>>2]=e;Bc(a,b,c,d,e);return}function Oj(a){a=a|0;var b=0;f[a>>2]=3748;b=f[a+96>>2]|0;if(b|0){f[a+100>>2]=b;Ko(b)}b=f[a+84>>2]|0;if(!b){Ag(a);Ko(a);return}f[a+88>>2]=b;Ko(b);Ag(a);Ko(a);return}function Pj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(en(a,f[b+8>>2]|0,0)|0)ki(0,b,c,d);return}function Qj(a){a=a|0;var b=0;f[a>>2]=3608;b=a+4|0;f[a+40>>2]=0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[b+20>>2]=0;f[b+24>>2]=0;f[b+28>>2]=0;d[b+32>>1]=0;return}function Rj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if((c|0)<(a|0)&(a|0)<(c+d|0)){e=a;c=c+d|0;a=a+d|0;while((d|0)>0){a=a-1|0;c=c-1|0;d=d-1|0;b[a>>0]=b[c>>0]|0}a=e}else Bf(a,c,d)|0;return a|0}function Sj(a){a=a|0;var b=0;f[a>>2]=2376;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function Tj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;d=u;u=u+16|0;e=d;f[e>>2]=f[c>>2];g=Ma[f[(f[a>>2]|0)+16>>2]&31](a,b,e)|0;if(g)f[c>>2]=f[e>>2];u=d;return g&1|0}function Uj(a,b){a=a|0;b=b|0;var c=0;if(b>>>0>=2){c=0;return c|0}f[a+28>>2]=b;c=1;return c|0}function Vj(a){a=a|0;var b=0;f[a>>2]=1928;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function Wj(a){a=a|0;var b=0;f[a>>2]=3748;b=f[a+96>>2]|0;if(b|0){f[a+100>>2]=b;Ko(b)}b=f[a+84>>2]|0;if(!b){Ag(a);return}f[a+88>>2]=b;Ko(b);Ag(a);return}function Xj(a){a=a|0;var b=0,c=0;if(no(a)|0?(b=Ln(f[a>>2]|0)|0,a=b+8|0,c=f[a>>2]|0,f[a>>2]=c+-1,(c+-1|0)<0):0)Ko(b);return}function Yj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if((b|0)<=0)return;d=0;do{e=f[a+(d<<2)>>2]|0;f[c+(d<<2)>>2]=e<<31>>31^e>>>1;d=d+1|0}while((d|0)!=(b|0));return}function Zj(a){a=a|0;var c=0;f[a>>2]=0;c=a+8|0;d[a+38>>1]=0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;f[c+16>>2]=0;f[c+20>>2]=0;f[c+24>>2]=0;b[c+28>>0]=0;return}function _j(a){a=a|0;var b=0,c=0;f[a>>2]=1476;b=a+20|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);Yh(a);Ko(a);return}function $j(a,b,c){a=a|0;b=b|0;c=c|0;zb(a,b,c);return}function ak(a){a=a|0;Zj(a);Zj(a+40|0);ym(a+80|0);Zj(a+96|0);f[a+136>>2]=0;f[a+140>>2]=0;f[a+144>>2]=0;return}function bk(a){a=a|0;var b=0,c=0;f[a>>2]=1476;b=a+20|0;c=f[b>>2]|0;f[b>>2]=0;if(c|0)Pa[f[(f[c>>2]|0)+4>>2]&127](c);Yh(a);return}function ck(a,b,c){a=a|0;b=b|0;c=c|0;return md(a,b,5,6,c)|0}function dk(a,b,c){a=a|0;b=b|0;c=c|0;return kd(a,b,3,4,c)|0}function ek(a){a=a|0;var b=0;f[a>>2]=1256;b=a+4|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[b+20>>2]=0;f[b+24>>2]=0;f[b+28>>2]=0;return}function fk(a,b,c){a=a|0;b=b|0;c=c|0;return pd(a,b,1,2,c)|0}function gk(a,b,c){a=a|0;b=b|0;c=c|0;return ld(a,b,3,4,c)|0}function hk(a,b,c){a=a|0;b=b|0;c=c|0;return od(a,b,5,6,c)|0}function ik(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;d=a+20|0;e=f[d>>2]|0;g=(f[a+16>>2]|0)-e|0;a=g>>>0>c>>>0?c:g;Bf(e|0,b|0,a|0)|0;f[d>>2]=(f[d>>2]|0)+a;return c|0}function jk(a,b,c){a=a|0;b=b|0;c=c|0;return qd(a,b,1,2,c)|0}function kk(a){a=a|0;var b=0;f[a>>2]=3316;b=f[a+20>>2]|0;if(b|0)Ko(b);b=f[a+8>>2]|0;if(!b){Ko(a);return}Ko(b);Ko(a);return}function lk(){var a=0,b=0;a=wk(24)|0;f[a>>2]=1228;f[a+4>>2]=-1;b=a+8|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;return a|0}function mk(a){a=a|0;var c=0;oj(a);c=a+64|0;f[a+88>>2]=0;f[c>>2]=0;f[c+4>>2]=0;f[c+8>>2]=0;f[c+12>>2]=0;f[c+16>>2]=0;b[c+20>>0]=0;return}function nk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((f[b+4>>2]|0)==(c|0)?(c=b+28|0,(f[c>>2]|0)!=1):0)f[c>>2]=d;return}function ok(a){a=a|0;var b=0;f[a>>2]=3364;b=f[a+20>>2]|0;if(b|0)Ko(b);b=f[a+8>>2]|0;if(!b){Ko(a);return}Ko(b);Ko(a);return}function pk(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;f[a>>2]=b;b=a+8|0;f[b>>2]=c;f[b+4>>2]=0;d[a+38>>1]=e;e=a+16|0;f[e>>2]=0;f[e+4>>2]=0;return}function qk(a,b,c){a=a|0;b=_(b);c=c|0;var d=0,e=Ia;if((c|0)<1){d=0;return d|0}e=_(_(1.0)/_(c|0));n[a+4>>2]=e;n[a>>2]=b;d=1;return d|0}function rk(a){a=a|0;var b=0;f[a>>2]=1256;b=f[a+16>>2]|0;if(b|0){f[a+20>>2]=b;Ko(b)}b=f[a+4>>2]|0;if(!b)return;f[a+8>>2]=b;Ko(b);return}function sk(a){a=a|0;var b=0;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b){Ko(a);return}f[a+36>>2]=b;Ko(b);Ko(a);return}function tk(a,b,c){a=a|0;b=b|0;c=c|0;f[a+4>>2]=b;f[a+8>>2]=f[(f[(f[b+4>>2]|0)+8>>2]|0)+(c<<2)>>2];f[a+12>>2]=c;return 1}function uk(a){a=a|0;var b=0;mn(a);f[a+16>>2]=0;f[a+20>>2]=0;f[a+12>>2]=a+16;b=a+24|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;return}function vk(a){a=a|0;var b=0;Bl(a);f[a>>2]=3748;b=a+84|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;f[b+16>>2]=0;f[b+20>>2]=0;return}function wk(a){a=a|0;var b=0,c=0;b=(a|0)==0?1:a;while(1){a=Va(b)|0;if(a|0){c=a;break}a=Nn()|0;if(!a){c=0;break}Oa[a&1]()}return c|0}function xk(a){a=a|0;var b=0;f[a>>2]=3316;b=f[a+20>>2]|0;if(b|0)Ko(b);b=f[a+8>>2]|0;if(!b)return;Ko(b);return}function yk(a){a=a|0;var b=0,c=0,d=0;b=u;u=u+16|0;c=b;d=Mo(f[a+60>>2]|0)|0;f[c>>2]=d;d=Ol(Aa(6,c|0)|0)|0;u=b;return d|0}function zk(a){a=a|0;var b=0,c=0;b=f[a>>2]|0;c=a+4|0;f[c>>2]=b;f[a+16>>2]=0;f[a+12>>2]=b;if(!b)return;f[c>>2]=b;Ko(b);return}function Ak(a){a=a|0;var b=0;f[a>>2]=3364;b=f[a+20>>2]|0;if(b|0)Ko(b);b=f[a+8>>2]|0;if(!b)return;Ko(b);return}function Bk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=Ij(e,a)|0;f=H;return (H=(W(b,a)|0)+(W(d,e)|0)+f|f&0,c|0|0)|0}function Ck(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ck(b,c,d)|0}function Dk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return dk(b,c,d)|0}function Ek(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ce(b,c,d)|0}function Fk(a){a=a|0;var b=0;f[a>>2]=1536;b=f[a+32>>2]|0;if(!b)return;f[a+36>>2]=b;Ko(b);return}function Gk(a){a=a|0;var b=0;ek(a);f[a>>2]=1312;b=a+36|0;a=b+36|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function Hk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return fk(b,c,d)|0}function Ik(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return gk(b,c,d)|0}function Jk(a){a=a|0;f[a>>2]=2716;Ko(a);return}function Kk(a){a=a|0;var b=0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;b=a+16|0;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;f[b+12>>2]=0;return}function Lk(a){a=a|0;jm(a);f[a>>2]=3052;f[a+24>>2]=-1;f[a+28>>2]=0;n[a+32>>2]=_(0.0);return}function Mk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return jk(b,c,d)|0}function Nk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return hk(b,c,d)|0}function Ok(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;b=a+8|0;f[b>>2]=c;f[b+4>>2]=0;b=a+16|0;f[b>>2]=0;f[b+4>>2]=0;return}function Pk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (((f[a+12>>2]|0)+-1|0)==(d|0)?0:d+1|0)|0}function Qk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=u;u=u+16|0;g=e;f[g>>2]=d;d=Sg(a,b,c,g)|0;u=e;return d|0}function Rk(a){a=a|0;var b=0;f[a>>2]=1228;b=f[a+8>>2]|0;if(!b){Ko(a);return}f[a+12>>2]=b;Ko(b);Ko(a);return}function Sk(a){a=a|0;f[a>>2]=2800;Ko(a);return}function Tk(a){a=a|0;f[a>>2]=2884;Ko(a);return}function Uk(a){a=a|0;f[a>>2]=2716;return}function Vk(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function Wk(a,b,c){a=a|0;b=b|0;c=c|0;return tk(a,b,c)|0}function Xk(a){a=a|0;var b=0;if(!a)return;b=f[a+8>>2]|0;if(b|0){f[a+12>>2]=b;Ko(b)}Ko(a);return}function Yk(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Na[a&31](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Zk(a){a=a|0;f[a>>2]=2968;Ko(a);return}function _k(a){a=a|0;f[a>>2]=2800;return}function $k(a){a=a|0;f[a>>2]=2884;return}function al(a,b){a=a|0;b=b|0;var c=0;c=f[a+48>>2]|0;return La[f[(f[c>>2]|0)+16>>2]&127](c,b)|0}function bl(a,b,c){a=a|0;b=b|0;c=c|0;return Kj(b,c)|0}function cl(a,b){a=a|0;b=b|0;var c=0;c=f[a+48>>2]|0;return La[f[(f[c>>2]|0)+12>>2]&127](c,b)|0}function dl(a){a=a|0;Pd(a);Ko(a);return}function el(a,b){a=a|0;b=b|0;var c=0;c=f[a+48>>2]|0;return La[f[(f[c>>2]|0)+20>>2]&127](c,b)|0}function fl(a){a=a|0;var c=0,d=0;c=a+4|0;if((b[c+11>>0]|0)<0){d=f[c>>2]|0;return d|0}else{d=c;return d|0}return 0}function gl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ve(b,c,d)|0}function hl(a){a=a|0;me(a);Ko(a);return}function il(a,b){a=a|0;b=b|0;var c=0;if(!b)c=0;else c=Rf(f[b>>2]|0,f[b+4>>2]|0,a)|0;return ((c|0)==0?a:c)|0}function jl(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ua[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function kl(a,b){a=a|0;b=b|0;var c=0,d=0;c=u;u=u+16|0;d=c;f[d>>2]=b;b=Mf(f[980]|0,a,d)|0;u=c;return b|0}function ll(a){a=a|0;var b=0;if(!a)return;b=f[a>>2]|0;if(b|0){f[a+4>>2]=b;Ko(b)}Ko(a);return}function ml(a){a=a|0;if(!(f[a+44>>2]|0))return 0;else return Ka[f[(f[a>>2]|0)+48>>2]&127](a)|0;return 0}function nl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return vh(b,c,d)|0}function ol(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)oh(a|0,(io(c)|0)&255|0,b|0)|0;return a|0}function pl(a){a=a|0;return 4}function ql(a){a=a|0;f[a>>2]=2968;return}function rl(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}H=a<<c-32;return 0}function sl(a){a=a|0;var b=0;f[a>>2]=1228;b=f[a+8>>2]|0;if(!b)return;f[a+12>>2]=b;Ko(b);return}function tl(a){a=a|0;var c=0;if(!a)return;c=a+4|0;if((b[c+11>>0]|0)<0)Ko(f[c>>2]|0);Ko(a);return}function ul(){}function vl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return (H=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0}function wl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return (H=e,a-c>>>0|0)|0}function xl(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}H=0;return b>>>c-32|0}function yl(a,b,c){a=a|0;b=b|0;c=c|0;return si(a,b,c)|0}function zl(a){a=a|0;_d(a);Ko(a);return}function Al(a){a=a|0;return 5}function Bl(a){a=a|0;var b=0;f[a>>2]=3776;b=a+4|0;a=b+80|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function Cl(a){a=a|0;return 6}function Dl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Fj(b,c,d)|0}function El(a,b,c){a=a|0;b=b|0;c=c|0;f[a+28>>2]=b;f[a+32>>2]=c;return 1}function Fl(a,c){a=a|0;c=c|0;b[c+84>>0]=1;f[c+72>>2]=f[c+68>>2];return 1}function Gl(a,b,c){a=a|0;b=b|0;c=c|0;return bl(a,b,c)|0}function Hl(a){a=a|0;var b=0;b=f[a+48>>2]|0;return Ka[f[(f[b>>2]|0)+28>>2]&127](b)|0}function Il(a,b,c){a=a|0;b=b|0;c=c|0;return Bg(b,c)|0}function Jl(a){a=a|0;f[a>>2]=1368;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=-1;f[a+16>>2]=0;return}function Kl(a){a=a|0;var b=0;b=f[a+48>>2]|0;return Ka[f[(f[b>>2]|0)+24>>2]&127](b)|0}function Ll(a,b){a=a|0;b=b|0;Jh(a,b);return}function Ml(a){a=a|0;var b=0;b=f[a+48>>2]|0;return Ka[f[(f[b>>2]|0)+36>>2]&127](b)|0}function Nl(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ta[a&3](b|0,c|0,d|0,e|0,f|0)}function Ol(a){a=a|0;var b=0,c=0;if(a>>>0>4294963200){b=Ro()|0;f[b>>2]=0-a;c=-1}else c=a;return c|0}function Pl(a,b,c){a=a|0;b=b|0;c=c|0;return ui(a,b,c)|0}function Ql(a,b,c){a=a|0;b=b|0;c=c|0;return Hg(a,b,c)|0}function Rl(a,b,c){a=a|0;b=b|0;c=c|0;return Wg(a,b,c)|0}function Sl(a,b,c){a=a|0;b=b|0;c=c|0;return ng(a,b,c)|0}function Tl(a,b,c){a=a|0;b=b|0;c=c|0;return +(+Qg(a,b,c))}function Ul(a,b){a=a|0;b=b|0;return La[f[(f[a>>2]|0)+12>>2]&127](a,b)|0}function Vl(a,b){a=a|0;b=b|0;return La[f[(f[a>>2]|0)+56>>2]&127](a,b)|0}function Wl(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=0;return}function Xl(a,b,c){a=a|0;b=b|0;c=c|0;return $h(a,b,c)|0}function Yl(a,b){a=a|0;b=b|0;f[a+4>>2]=b;return 1}function Zl(a,b,c){a=a|0;b=b|0;c=c|0;return qm(b,c)|0}function _l(a,b,c){a=a|0;b=b|0;c=c|0;return Yg(a,b,c)|0}function $l(a,b,c){a=a|0;b=b|0;c=c|0;return Ug(a,b,c)|0}function am(a){a=a|0;jm(a);f[a>>2]=2544;f[a+24>>2]=-1;return}function bm(a,b){a=a|0;b=b|0;f[a+8>>2]=b;f[a+12>>2]=-1;return 1}function cm(a,b,c){a=a|0;b=b|0;c=c|0;return Uf(a,b,c)|0}function dm(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(b,c)|0}function em(a){a=+a;var b=0;p[s>>3]=a;b=f[s>>2]|0;H=f[s+4>>2]|0;return b|0}function fm(a){a=a|0;f[a+12>>2]=0;f[a+16>>2]=0;f[a>>2]=0;n[a+4>>2]=_(0.0);return}function gm(){var a=0;a=wk(40)|0;f[a>>2]=-1;Kk(a+8|0);return a|0}function hm(){var a=0;a=wk(8)|0;f[a>>2]=1200;f[a+4>>2]=-1;return a|0}function im(a,b,c){a=a|0;b=b|0;c=c|0;return Fg(a,b,c)|0}function jm(a){a=a|0;Jl(a);f[a>>2]=1476;f[a+20>>2]=0;return}function km(a,b){a=a|0;b=b|0;Ll(a,b);return}function lm(a){a=a|0;var b=0;if(!a)b=0;else b=(Pf(a,1072,1160,0)|0)!=0&1;return b|0}function mm(a,b){a=a|0;b=b|0;return _(n[(f[a+8>>2]|0)+(b<<2)>>2])}function nm(a,b){a=a|0;b=b|0;return qj(a,b)|0}function om(a){a=a|0;if((b[a+11>>0]|0)<0)Ko(f[a>>2]|0);return}function pm(a){a=a|0;if(!a)return;Pa[f[(f[a>>2]|0)+4>>2]&127](a);return}function qm(a,b){a=a|0;b=b|0;return Bi(a,b)|0}function rm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Sa[a&7](b|0,c|0,d|0,e|0)}function sm(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Rj(a|0,b|0,c|0)|0;return a|0}function tm(a,b,c){a=a|0;b=b|0;c=c|0;return Em(b,c)|0}function um(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Bf(a|0,b|0,c|0)|0;return a|0}function vm(a,b){a=a|0;b=b|0;return -1}function wm(a){a=a|0;return 3}function xm(a,b){a=a|0;b=b|0;return sn(a,b)|0}function ym(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;b[a+12>>0]=0;return}function zm(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;return}function Am(a){a=a|0;Km(a);f[a>>2]=3180;f[a+48>>2]=0;return}function Bm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ma[a&31](b|0,c|0,d|0)|0}function Cm(a,b,c){a=a|0;b=b|0;c=c|0;Ok(a,b,c);return}function Dm(a,b){a=a|0;b=b|0;f[a>>2]=4888;Jj(a+4|0,b);return}function Em(a,b){a=a|0;b=b|0;return f[(f[a+8>>2]|0)+(b<<2)>>2]|0}function Fm(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=Mg(a,b,0)|0;return c|0}function Gm(a,b){a=a|0;b=b|0;return f[(f[a+4>>2]|0)+(b<<2)>>2]|0}function Hm(){var a=0;a=wk(64)|0;oj(a);return a|0}function Im(a,b){a=a|0;b=b|0;return _(Om(a,b))}function Jm(a){a=a|0;return f[a+8>>2]|0}function Km(a){a=a|0;Qj(a);f[a>>2]=3120;f[a+44>>2]=0;return}function Lm(a){a=a|0;if(!a)return;eh(a);Ko(a);return}function Mm(a,b){a=a|0;b=b|0;return An(a,b)|0}function Nm(a){a=a|0;return b[(f[a+8>>2]|0)+24>>0]|0}function Om(a,b){a=a|0;b=b|0;return _(n[(f[a>>2]|0)+(b<<2)>>2])}function Pm(a,b,c){a=a|0;b=b|0;c=c|0;if(!(f[a>>2]&32))lg(b,c,a)|0;return}function Qm(a){a=a|0;return (f[a+8>>2]|0)-(f[a+4>>2]|0)>>2|0}function Rm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ra[a&15](b|0,c|0,d|0)}function Sm(){var a=0;a=wk(96)|0;mk(a);return a|0}function Tm(a){a=a|0;var b=0;b=u;u=u+a|0;u=u+15&-16;return b|0}function Um(a){a=a|0;var b=0;b=(Eo()|0)+188|0;return Uh(a,f[b>>2]|0)|0}function Vm(a){a=a|0;return ((f[a+100>>2]|0)-(f[a+96>>2]|0)|0)/12|0|0}function Wm(){var a=0;a=wk(16)|0;zm(a);return a|0}function Xm(){var a=0;a=wk(40)|0;Zj(a);return a|0}function Ym(a,b){a=a|0;b=b|0;return 1}function Zm(a,b){a=a|0;b=b|0;return hn(a,b)|0}function _m(a,b){a=a|0;b=b|0;return jn(a,b)|0}function $m(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$(3);return 0}function an(a,b){a=a|0;b=b|0;return yn(a,b)|0}function bn(){var a=0;a=wk(12)|0;qn(a);return a|0}function cn(a){a=a|0;Yh(a);Ko(a);return}function dn(a){a=a|0;n[a>>2]=_(1.0);n[a+4>>2]=_(1.0);return}function en(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function fn(a,b){a=a|0;b=b|0;var c=0;c=vn(a|0)|0;return ((b|0)==0?a:c)|0}function gn(a){a=a|0;return (f[a+12>>2]|0)-(f[a+8>>2]|0)>>2|0}function hn(a,b){a=a|0;b=b|0;return f[(f[a>>2]|0)+(b<<2)>>2]|0}function jn(a,b){a=a|0;b=b|0;return d[(f[a>>2]|0)+(b<<1)>>1]|0}function kn(a,b){a=a|0;b=b|0;f[a+4>>2]=b;return}function ln(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Gc(a,b,c,d,0)|0}function mn(a){a=a|0;f[a+4>>2]=0;f[a+8>>2]=0;f[a>>2]=a+4;return}function nn(){var a=0;a=wk(84)|0;Bl(a);return a|0}function on(a){a=a|0;return (f[a+4>>2]|0)-(f[a>>2]|0)>>2|0}function pn(a){a=a|0;return (f[a+4>>2]|0)-(f[a>>2]|0)>>1|0}function qn(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;return}function rn(a){a=a|0;f[a>>2]=4888;Xj(a+4|0);return}function sn(a,b){a=a|0;b=b|0;return f[b+12>>2]|0}function tn(a,b,c){a=a|0;b=b|0;c=c|0;return La[a&127](b|0,c|0)|0}function un(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$(10)}function vn(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function wn(a){a=a|0;Km(a);f[a>>2]=3524;return}function xn(a,c){a=a|0;c=c|0;b[a>>0]=b[c>>0]|0;return}function yn(a,c){a=a|0;c=c|0;return b[(f[a>>2]|0)+c>>0]|0}function zn(a){a=a|0;return (f[a+4>>2]|0)-(f[a>>2]|0)|0}function An(a,b){a=a|0;b=b|0;return f[b+4>>2]|0}function Bn(a){a=a|0;return _(n[a+20>>2])}function Cn(a){a=a|0;return f[a+4>>2]|0}function Dn(a){a=a|0;if(!a)return;Ko(a);return}function En(a,b){a=a|0;b=b|0;if(!w){w=a;x=b}}function Fn(a){a=a|0;return a+12|0}function Gn(a){a=a|0;return f[a+88>>2]|0}function Hn(a,b,c){a=a|0;b=b|0;c=c|0;Qa[a&7](b|0,c|0)}function In(){var a=0;a=wk(40)|0;uk(a);return a|0}function Jn(){var a=0;a=wk(108)|0;vk(a);return a|0}function Kn(a){a=a|0;return (b[a+32>>0]|0)!=0|0}function Ln(a){a=a|0;return a+-12|0}function Mn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;$(9)}function Nn(){var a=0;a=f[4213]|0;f[4213]=a+0;return a|0}function On(a){a=a|0;return lo(a+4|0)|0}function Pn(a){a=a|0;return f[a+56>>2]|0}function Qn(a){a=a|0;Ag(a);Ko(a);return}function Rn(a){a=a|0;Oo(a);Ko(a);return}function Sn(a){a=a|0;return b[a+24>>0]|0}function Tn(a,b){a=a|0;b=b|0;return 0}function Un(a){a=a|0;return f[a+40>>2]|0}function Vn(a){a=a|0;return f[a+48>>2]|0}function Wn(a){a=a|0;return (a?31-(Z(a^a-1)|0)|0:32)|0}function Xn(a,b){a=a|0;b=b|0;return Ka[a&127](b|0)|0}function Yn(a){a=a|0;return f[a+60>>2]|0}function Zn(a){a=a|0;return f[a+28>>2]|0}function _n(a){a=a|0;rn(a);Ko(a);return}function $n(a){a=a|0;Ba()}function ao(a,b){a=a|0;b=b|0;u=a;v=b}function bo(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function co(a){a=a|0;return (f[a>>2]|0)==0|0}function eo(a){a=a|0;return f[a+80>>2]|0}function fo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(8)}function go(a,b){a=a|0;b=b|0;Pa[a&127](b|0)}function ho(a,b){a=a|0;b=b|0;return il(a,b)|0}function io(a){a=a|0;return a&255|0}function jo(a){a=a|0;f[a>>2]=0;return}function ko(a,b,c){a=a|0;b=b|0;c=c|0;$(2);return 0}function lo(a){a=a|0;return f[a>>2]|0}function mo(a){a=a|0;return 2}function no(a){a=a|0;return 1}function oo(a,b){a=+a;b=b|0;return +(+Rh(a,b))}function po(){return 3}function qo(a,b,c){a=a|0;b=b|0;c=c|0;$(7)}function ro(){return -4}function so(){return 4}function to(a){a=a|0;return (a+-48|0)>>>0<10|0}function uo(){return -3}function vo(){return 1}function wo(){return 2}function xo(){return -5}function yo(a,b){a=a|0;b=b|0;$(1);return 0}function zo(a){a=a|0;Fa()}function Ao(a){a=a|0;Oa[a&1]()}function Bo(){return -2}function Co(){sa()}function Do(){return -1}function Eo(){return Uo()|0}function Fo(a,b){a=a|0;b=b|0;$(6)}function Go(){return 0}function Ho(a){a=a|0;return wk(a)|0}function Io(a){a=a|0;Ko(a);return}function Jo(a){a=a|0;u=a}function Ko(a){a=a|0;Rb(a);return}function Lo(a){a=a|0;H=a}function Mo(a){a=a|0;return a|0}function No(a){a=a|0;$(0);return 0}function Oo(a){a=a|0;return}function Po(a){a=a|0;return 0}function Qo(){return H|0}function Ro(){return 16848}function So(){return u|0}function To(a){a=a|0;$(5)}function Uo(){return 4172}function Vo(){$(4)} + +// EMSCRIPTEN_END_FUNCS +var Ka=[No,mo,no,Qm,Zn,no,Lb,Ic,Nm,Cn,Po,Po,no,Po,no,no,ej,mo,ej,pl,ej,wm,cj,no,Cl,gi,no,Zn,Al,cj,no,no,ej,mo,ej,pl,ej,wm,cj,no,Cl,gi,no,Zn,Al,cj,no,mo,Po,Cn,no,Po,no,mo,Po,Cn,no,Po,no,wm,Cl,ei,no,Zn,Cl,ei,no,Zn,Cl,ei,no,Zn,Cl,ei,no,Zn,qe,no,no,ml,ud,wi,no,Po,Ue,Hl,Ml,Kl,ab,no,Cn,Jm,Me,$d,Oe,_a,no,Cn,Jm,$a,no,Cn,Jm,vb,_g,Po,no,Oh,Sh,yk,On,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No];var La=[yo,dj,Kf,kc,lj,Gm,Tn,Ym,Tb,tb,bm,Ym,pg,Fd,mg,Xi,ai,Xh,Ui,hd,vm,Tn,Hf,pc,Tn,Aj,nd,Tn,tj,fe,Uj,Tn,Aj,zd,pc,Tn,Aj,nd,Tn,tj,fe,Uj,Tn,Aj,zd,Qf,vm,Tn,ag,vm,Tn,sg,Tn,pj,Ne,Uj,Tn,pj,Ne,Uj,Tn,pj,te,Uj,Tn,pj,te,Uj,Vl,he,Tn,Tn,el,cl,al,Yl,rg,ug,Sb,ye,ee,be,Yl,rg,ug,Sb,Yl,rg,ug,Sb,bf,Fl,kg,bf,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo,yo];var Ma=[ko,El,tk,xi,Vk,qg,Wk,ie,rc,nj,wg,ch,uj,Rg,mi,hf,Vi,hj,ik,wh,ko,ko,ko,ko,ko,ko,ko,ko,ko,ko,ko,ko];var Na=[$m,Lc,Xb,Pb,sb,Sc,ec,dd,Yb,Qb,qb,Rc,dc,cd,wf,sf,lc,mc,nc,oc,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m,$m];var Oa=[Vo,Co];var Pa=[To,Oo,Io,sl,Rk,rk,zo,rh,mh,Yh,cn,$g,Vg,bk,_j,Fk,zo,sk,sk,sk,qi,ji,Ni,Hi,zo,Vj,Mj,Oo,zo,Io,yj,ij,sk,sk,li,ii,Ki,Ci,zo,Sj,Gj,Oo,zo,Io,rj,fj,_j,Oo,Io,Io,Uk,Jk,Oo,Io,_k,Sk,Oo,Io,$k,Tk,Oo,Io,ql,Zk,Oo,Io,Mi,Gi,_h,zo,Eh,Ah,_d,zl,Ji,Ai,xk,kk,zj,Qh,Mh,Ak,ok,Dj,Li,Ei,Pd,dl,me,hl,Th,Oo,Io,zo,Th,Th,Wj,Oj,Ag,Qn,Oo,Rn,Oo,Oo,Rn,rn,_n,_n,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To,To];var Qa=[Fo,fi,Je,_i,zc,Fo,Fo,Fo];var Ra=[qo,Zh,Mb,Ob,Ob,Mb,Ob,Mb,bg,Ef,qo,qo,qo,qo,qo,qo];var Sa=[fo,sh,sd,Pj,Oi,fo,fo,fo];var Ta=[Mn,qh,ff,Mn];var Ua=[un,xj,yi,un];return{___cxa_can_catch:Tj,___cxa_is_pointer_type:lm,___divdi3:ni,___muldi3:Bk,___udivdi3:ln,_bitshift64Lshr:xl,_bitshift64Shl:rl,_emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0:hm,_emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1:Ul,_emscripten_bind_AttributeOctahedronTransform___destroy___0:pm,_emscripten_bind_AttributeOctahedronTransform_quantization_bits_0:Cn,_emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0:lk,_emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1:Ul,_emscripten_bind_AttributeQuantizationTransform___destroy___0:pm,_emscripten_bind_AttributeQuantizationTransform_min_value_1:mm,_emscripten_bind_AttributeQuantizationTransform_quantization_bits_0:Cn,_emscripten_bind_AttributeQuantizationTransform_range_0:Bn,_emscripten_bind_AttributeTransformData_AttributeTransformData_0:gm,_emscripten_bind_AttributeTransformData___destroy___0:Xk,_emscripten_bind_AttributeTransformData_transform_type_0:lo,_emscripten_bind_DecoderBuffer_DecoderBuffer_0:Xm,_emscripten_bind_DecoderBuffer_Init_2:Cm,_emscripten_bind_DecoderBuffer___destroy___0:Dn,_emscripten_bind_Decoder_DecodeBufferToMesh_2:Pl,_emscripten_bind_Decoder_DecodeBufferToPointCloud_2:yl,_emscripten_bind_Decoder_Decoder_0:In,_emscripten_bind_Decoder_GetAttributeByUniqueId_2:Zl,_emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3:Ek,_emscripten_bind_Decoder_GetAttributeFloat_3:nl,_emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3:gl,_emscripten_bind_Decoder_GetAttributeIdByName_2:dm,_emscripten_bind_Decoder_GetAttributeId_2:Gl,_emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3:Ik,_emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3:Nk,_emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3:Mk,_emscripten_bind_Decoder_GetAttributeIntForAllPoints_3:Nk,_emscripten_bind_Decoder_GetAttributeMetadata_2:Xl,_emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3:Dk,_emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3:Ck,_emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3:Hk,_emscripten_bind_Decoder_GetAttribute_2:tm,_emscripten_bind_Decoder_GetEncodedGeometryType_1:nm,_emscripten_bind_Decoder_GetFaceFromMesh_3:Dl,_emscripten_bind_Decoder_GetMetadata_1:Mm,_emscripten_bind_Decoder_GetTriangleStripsFromMesh_2:Il,_emscripten_bind_Decoder_SkipAttributeTransform_1:km,_emscripten_bind_Decoder___destroy___0:hi,_emscripten_bind_DracoFloat32Array_DracoFloat32Array_0:bn,_emscripten_bind_DracoFloat32Array_GetValue_1:Im,_emscripten_bind_DracoFloat32Array___destroy___0:ll,_emscripten_bind_DracoFloat32Array_size_0:on,_emscripten_bind_DracoInt16Array_DracoInt16Array_0:bn,_emscripten_bind_DracoInt16Array_GetValue_1:_m,_emscripten_bind_DracoInt16Array___destroy___0:ll,_emscripten_bind_DracoInt16Array_size_0:pn,_emscripten_bind_DracoInt32Array_DracoInt32Array_0:bn,_emscripten_bind_DracoInt32Array_GetValue_1:Zm,_emscripten_bind_DracoInt32Array___destroy___0:ll,_emscripten_bind_DracoInt32Array_size_0:on,_emscripten_bind_DracoInt8Array_DracoInt8Array_0:bn,_emscripten_bind_DracoInt8Array_GetValue_1:an,_emscripten_bind_DracoInt8Array___destroy___0:ll,_emscripten_bind_DracoInt8Array_size_0:zn,_emscripten_bind_DracoUInt16Array_DracoUInt16Array_0:bn,_emscripten_bind_DracoUInt16Array_GetValue_1:_m,_emscripten_bind_DracoUInt16Array___destroy___0:ll,_emscripten_bind_DracoUInt16Array_size_0:pn,_emscripten_bind_DracoUInt32Array_DracoUInt32Array_0:bn,_emscripten_bind_DracoUInt32Array_GetValue_1:Zm,_emscripten_bind_DracoUInt32Array___destroy___0:ll,_emscripten_bind_DracoUInt32Array_size_0:on,_emscripten_bind_DracoUInt8Array_DracoUInt8Array_0:bn,_emscripten_bind_DracoUInt8Array_GetValue_1:an,_emscripten_bind_DracoUInt8Array___destroy___0:ll,_emscripten_bind_DracoUInt8Array_size_0:zn,_emscripten_bind_GeometryAttribute_GeometryAttribute_0:Hm,_emscripten_bind_GeometryAttribute___destroy___0:Dn,_emscripten_bind_Mesh_Mesh_0:Jn,_emscripten_bind_Mesh___destroy___0:pm,_emscripten_bind_Mesh_num_attributes_0:gn,_emscripten_bind_Mesh_num_faces_0:Vm,_emscripten_bind_Mesh_num_points_0:eo,_emscripten_bind_MetadataQuerier_GetDoubleEntry_2:Tl,_emscripten_bind_MetadataQuerier_GetEntryName_2:cm,_emscripten_bind_MetadataQuerier_GetIntEntry_2:$l,_emscripten_bind_MetadataQuerier_GetStringEntry_2:Sl,_emscripten_bind_MetadataQuerier_HasDoubleEntry_2:Rl,_emscripten_bind_MetadataQuerier_HasEntry_2:im,_emscripten_bind_MetadataQuerier_HasIntEntry_2:_l,_emscripten_bind_MetadataQuerier_HasStringEntry_2:Ql,_emscripten_bind_MetadataQuerier_MetadataQuerier_0:Wm,_emscripten_bind_MetadataQuerier_NumEntries_1:xm,_emscripten_bind_MetadataQuerier___destroy___0:zi,_emscripten_bind_Metadata_Metadata_0:Lj,_emscripten_bind_Metadata___destroy___0:Lm,_emscripten_bind_PointAttribute_GetAttributeTransformData_0:Gn,_emscripten_bind_PointAttribute_PointAttribute_0:Sm,_emscripten_bind_PointAttribute___destroy___0:ri,_emscripten_bind_PointAttribute_attribute_type_0:Pn,_emscripten_bind_PointAttribute_byte_offset_0:Vn,_emscripten_bind_PointAttribute_byte_stride_0:Un,_emscripten_bind_PointAttribute_data_type_0:Zn,_emscripten_bind_PointAttribute_normalized_0:Kn,_emscripten_bind_PointAttribute_num_components_0:Sn,_emscripten_bind_PointAttribute_size_0:eo,_emscripten_bind_PointAttribute_unique_id_0:Yn,_emscripten_bind_PointCloud_PointCloud_0:nn,_emscripten_bind_PointCloud___destroy___0:pm,_emscripten_bind_PointCloud_num_attributes_0:gn,_emscripten_bind_PointCloud_num_points_0:eo,_emscripten_bind_Status___destroy___0:tl,_emscripten_bind_Status_code_0:lo,_emscripten_bind_Status_error_msg_0:fl,_emscripten_bind_Status_ok_0:co,_emscripten_bind_VoidPtr___destroy___0:Dn,_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM:Do,_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM:Go,_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM:wo,_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM:vo,_emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE:Do,_emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD:Go,_emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH:vo,_emscripten_enum_draco_GeometryAttribute_Type_COLOR:wo,_emscripten_enum_draco_GeometryAttribute_Type_GENERIC:so,_emscripten_enum_draco_GeometryAttribute_Type_INVALID:Do,_emscripten_enum_draco_GeometryAttribute_Type_NORMAL:vo,_emscripten_enum_draco_GeometryAttribute_Type_POSITION:Go,_emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD:po,_emscripten_enum_draco_StatusCode_ERROR:Do,_emscripten_enum_draco_StatusCode_INVALID_PARAMETER:uo,_emscripten_enum_draco_StatusCode_IO_ERROR:Bo,_emscripten_enum_draco_StatusCode_OK:Go,_emscripten_enum_draco_StatusCode_UNKNOWN_VERSION:xo,_emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION:ro,_emscripten_replace_memory:Ja,_free:Rb,_i64Add:vl,_i64Subtract:wl,_llvm_bswap_i32:vn,_malloc:Va,_memcpy:Bf,_memmove:Rj,_memset:oh,_sbrk:vj,dynCall_ii:Xn,dynCall_iii:tn,dynCall_iiii:Bm,dynCall_iiiiiii:Yk,dynCall_v:Ao,dynCall_vi:go,dynCall_vii:Hn,dynCall_viii:Rm,dynCall_viiii:rm,dynCall_viiiii:Nl,dynCall_viiiiii:jl,establishStackSpace:ao,getTempRet0:Qo,runPostSets:ul,setTempRet0:Lo,setThrew:En,stackAlloc:Tm,stackRestore:Jo,stackSave:So}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var ___divdi3=Module["___divdi3"]=asm["___divdi3"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=Module["_emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0"]=asm["_emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0"];var _emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=Module["_emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1"]=asm["_emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1"];var _emscripten_bind_AttributeOctahedronTransform___destroy___0=Module["_emscripten_bind_AttributeOctahedronTransform___destroy___0"]=asm["_emscripten_bind_AttributeOctahedronTransform___destroy___0"];var _emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=Module["_emscripten_bind_AttributeOctahedronTransform_quantization_bits_0"]=asm["_emscripten_bind_AttributeOctahedronTransform_quantization_bits_0"];var _emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=Module["_emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0"]=asm["_emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0"];var _emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=Module["_emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1"]=asm["_emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1"];var _emscripten_bind_AttributeQuantizationTransform___destroy___0=Module["_emscripten_bind_AttributeQuantizationTransform___destroy___0"]=asm["_emscripten_bind_AttributeQuantizationTransform___destroy___0"];var _emscripten_bind_AttributeQuantizationTransform_min_value_1=Module["_emscripten_bind_AttributeQuantizationTransform_min_value_1"]=asm["_emscripten_bind_AttributeQuantizationTransform_min_value_1"];var _emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=Module["_emscripten_bind_AttributeQuantizationTransform_quantization_bits_0"]=asm["_emscripten_bind_AttributeQuantizationTransform_quantization_bits_0"];var _emscripten_bind_AttributeQuantizationTransform_range_0=Module["_emscripten_bind_AttributeQuantizationTransform_range_0"]=asm["_emscripten_bind_AttributeQuantizationTransform_range_0"];var _emscripten_bind_AttributeTransformData_AttributeTransformData_0=Module["_emscripten_bind_AttributeTransformData_AttributeTransformData_0"]=asm["_emscripten_bind_AttributeTransformData_AttributeTransformData_0"];var _emscripten_bind_AttributeTransformData___destroy___0=Module["_emscripten_bind_AttributeTransformData___destroy___0"]=asm["_emscripten_bind_AttributeTransformData___destroy___0"];var _emscripten_bind_AttributeTransformData_transform_type_0=Module["_emscripten_bind_AttributeTransformData_transform_type_0"]=asm["_emscripten_bind_AttributeTransformData_transform_type_0"];var _emscripten_bind_DecoderBuffer_DecoderBuffer_0=Module["_emscripten_bind_DecoderBuffer_DecoderBuffer_0"]=asm["_emscripten_bind_DecoderBuffer_DecoderBuffer_0"];var _emscripten_bind_DecoderBuffer_Init_2=Module["_emscripten_bind_DecoderBuffer_Init_2"]=asm["_emscripten_bind_DecoderBuffer_Init_2"];var _emscripten_bind_DecoderBuffer___destroy___0=Module["_emscripten_bind_DecoderBuffer___destroy___0"]=asm["_emscripten_bind_DecoderBuffer___destroy___0"];var _emscripten_bind_Decoder_DecodeBufferToMesh_2=Module["_emscripten_bind_Decoder_DecodeBufferToMesh_2"]=asm["_emscripten_bind_Decoder_DecodeBufferToMesh_2"];var _emscripten_bind_Decoder_DecodeBufferToPointCloud_2=Module["_emscripten_bind_Decoder_DecodeBufferToPointCloud_2"]=asm["_emscripten_bind_Decoder_DecodeBufferToPointCloud_2"];var _emscripten_bind_Decoder_Decoder_0=Module["_emscripten_bind_Decoder_Decoder_0"]=asm["_emscripten_bind_Decoder_Decoder_0"];var _emscripten_bind_Decoder_GetAttributeByUniqueId_2=Module["_emscripten_bind_Decoder_GetAttributeByUniqueId_2"]=asm["_emscripten_bind_Decoder_GetAttributeByUniqueId_2"];var _emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeFloat_3=Module["_emscripten_bind_Decoder_GetAttributeFloat_3"]=asm["_emscripten_bind_Decoder_GetAttributeFloat_3"];var _emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=Module["_emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3"]=asm["_emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3"];var _emscripten_bind_Decoder_GetAttributeIdByName_2=Module["_emscripten_bind_Decoder_GetAttributeIdByName_2"]=asm["_emscripten_bind_Decoder_GetAttributeIdByName_2"];var _emscripten_bind_Decoder_GetAttributeId_2=Module["_emscripten_bind_Decoder_GetAttributeId_2"]=asm["_emscripten_bind_Decoder_GetAttributeId_2"];var _emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeIntForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeIntForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeMetadata_2=Module["_emscripten_bind_Decoder_GetAttributeMetadata_2"]=asm["_emscripten_bind_Decoder_GetAttributeMetadata_2"];var _emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=Module["_emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3"]=asm["_emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3"];var _emscripten_bind_Decoder_GetAttribute_2=Module["_emscripten_bind_Decoder_GetAttribute_2"]=asm["_emscripten_bind_Decoder_GetAttribute_2"];var _emscripten_bind_Decoder_GetEncodedGeometryType_1=Module["_emscripten_bind_Decoder_GetEncodedGeometryType_1"]=asm["_emscripten_bind_Decoder_GetEncodedGeometryType_1"];var _emscripten_bind_Decoder_GetFaceFromMesh_3=Module["_emscripten_bind_Decoder_GetFaceFromMesh_3"]=asm["_emscripten_bind_Decoder_GetFaceFromMesh_3"];var _emscripten_bind_Decoder_GetMetadata_1=Module["_emscripten_bind_Decoder_GetMetadata_1"]=asm["_emscripten_bind_Decoder_GetMetadata_1"];var _emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=Module["_emscripten_bind_Decoder_GetTriangleStripsFromMesh_2"]=asm["_emscripten_bind_Decoder_GetTriangleStripsFromMesh_2"];var _emscripten_bind_Decoder_SkipAttributeTransform_1=Module["_emscripten_bind_Decoder_SkipAttributeTransform_1"]=asm["_emscripten_bind_Decoder_SkipAttributeTransform_1"];var _emscripten_bind_Decoder___destroy___0=Module["_emscripten_bind_Decoder___destroy___0"]=asm["_emscripten_bind_Decoder___destroy___0"];var _emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=Module["_emscripten_bind_DracoFloat32Array_DracoFloat32Array_0"]=asm["_emscripten_bind_DracoFloat32Array_DracoFloat32Array_0"];var _emscripten_bind_DracoFloat32Array_GetValue_1=Module["_emscripten_bind_DracoFloat32Array_GetValue_1"]=asm["_emscripten_bind_DracoFloat32Array_GetValue_1"];var _emscripten_bind_DracoFloat32Array___destroy___0=Module["_emscripten_bind_DracoFloat32Array___destroy___0"]=asm["_emscripten_bind_DracoFloat32Array___destroy___0"];var _emscripten_bind_DracoFloat32Array_size_0=Module["_emscripten_bind_DracoFloat32Array_size_0"]=asm["_emscripten_bind_DracoFloat32Array_size_0"];var _emscripten_bind_DracoInt16Array_DracoInt16Array_0=Module["_emscripten_bind_DracoInt16Array_DracoInt16Array_0"]=asm["_emscripten_bind_DracoInt16Array_DracoInt16Array_0"];var _emscripten_bind_DracoInt16Array_GetValue_1=Module["_emscripten_bind_DracoInt16Array_GetValue_1"]=asm["_emscripten_bind_DracoInt16Array_GetValue_1"];var _emscripten_bind_DracoInt16Array___destroy___0=Module["_emscripten_bind_DracoInt16Array___destroy___0"]=asm["_emscripten_bind_DracoInt16Array___destroy___0"];var _emscripten_bind_DracoInt16Array_size_0=Module["_emscripten_bind_DracoInt16Array_size_0"]=asm["_emscripten_bind_DracoInt16Array_size_0"];var _emscripten_bind_DracoInt32Array_DracoInt32Array_0=Module["_emscripten_bind_DracoInt32Array_DracoInt32Array_0"]=asm["_emscripten_bind_DracoInt32Array_DracoInt32Array_0"];var _emscripten_bind_DracoInt32Array_GetValue_1=Module["_emscripten_bind_DracoInt32Array_GetValue_1"]=asm["_emscripten_bind_DracoInt32Array_GetValue_1"];var _emscripten_bind_DracoInt32Array___destroy___0=Module["_emscripten_bind_DracoInt32Array___destroy___0"]=asm["_emscripten_bind_DracoInt32Array___destroy___0"];var _emscripten_bind_DracoInt32Array_size_0=Module["_emscripten_bind_DracoInt32Array_size_0"]=asm["_emscripten_bind_DracoInt32Array_size_0"];var _emscripten_bind_DracoInt8Array_DracoInt8Array_0=Module["_emscripten_bind_DracoInt8Array_DracoInt8Array_0"]=asm["_emscripten_bind_DracoInt8Array_DracoInt8Array_0"];var _emscripten_bind_DracoInt8Array_GetValue_1=Module["_emscripten_bind_DracoInt8Array_GetValue_1"]=asm["_emscripten_bind_DracoInt8Array_GetValue_1"];var _emscripten_bind_DracoInt8Array___destroy___0=Module["_emscripten_bind_DracoInt8Array___destroy___0"]=asm["_emscripten_bind_DracoInt8Array___destroy___0"];var _emscripten_bind_DracoInt8Array_size_0=Module["_emscripten_bind_DracoInt8Array_size_0"]=asm["_emscripten_bind_DracoInt8Array_size_0"];var _emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=Module["_emscripten_bind_DracoUInt16Array_DracoUInt16Array_0"]=asm["_emscripten_bind_DracoUInt16Array_DracoUInt16Array_0"];var _emscripten_bind_DracoUInt16Array_GetValue_1=Module["_emscripten_bind_DracoUInt16Array_GetValue_1"]=asm["_emscripten_bind_DracoUInt16Array_GetValue_1"];var _emscripten_bind_DracoUInt16Array___destroy___0=Module["_emscripten_bind_DracoUInt16Array___destroy___0"]=asm["_emscripten_bind_DracoUInt16Array___destroy___0"];var _emscripten_bind_DracoUInt16Array_size_0=Module["_emscripten_bind_DracoUInt16Array_size_0"]=asm["_emscripten_bind_DracoUInt16Array_size_0"];var _emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=Module["_emscripten_bind_DracoUInt32Array_DracoUInt32Array_0"]=asm["_emscripten_bind_DracoUInt32Array_DracoUInt32Array_0"];var _emscripten_bind_DracoUInt32Array_GetValue_1=Module["_emscripten_bind_DracoUInt32Array_GetValue_1"]=asm["_emscripten_bind_DracoUInt32Array_GetValue_1"];var _emscripten_bind_DracoUInt32Array___destroy___0=Module["_emscripten_bind_DracoUInt32Array___destroy___0"]=asm["_emscripten_bind_DracoUInt32Array___destroy___0"];var _emscripten_bind_DracoUInt32Array_size_0=Module["_emscripten_bind_DracoUInt32Array_size_0"]=asm["_emscripten_bind_DracoUInt32Array_size_0"];var _emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=Module["_emscripten_bind_DracoUInt8Array_DracoUInt8Array_0"]=asm["_emscripten_bind_DracoUInt8Array_DracoUInt8Array_0"];var _emscripten_bind_DracoUInt8Array_GetValue_1=Module["_emscripten_bind_DracoUInt8Array_GetValue_1"]=asm["_emscripten_bind_DracoUInt8Array_GetValue_1"];var _emscripten_bind_DracoUInt8Array___destroy___0=Module["_emscripten_bind_DracoUInt8Array___destroy___0"]=asm["_emscripten_bind_DracoUInt8Array___destroy___0"];var _emscripten_bind_DracoUInt8Array_size_0=Module["_emscripten_bind_DracoUInt8Array_size_0"]=asm["_emscripten_bind_DracoUInt8Array_size_0"];var _emscripten_bind_GeometryAttribute_GeometryAttribute_0=Module["_emscripten_bind_GeometryAttribute_GeometryAttribute_0"]=asm["_emscripten_bind_GeometryAttribute_GeometryAttribute_0"];var _emscripten_bind_GeometryAttribute___destroy___0=Module["_emscripten_bind_GeometryAttribute___destroy___0"]=asm["_emscripten_bind_GeometryAttribute___destroy___0"];var _emscripten_bind_Mesh_Mesh_0=Module["_emscripten_bind_Mesh_Mesh_0"]=asm["_emscripten_bind_Mesh_Mesh_0"];var _emscripten_bind_Mesh___destroy___0=Module["_emscripten_bind_Mesh___destroy___0"]=asm["_emscripten_bind_Mesh___destroy___0"];var _emscripten_bind_Mesh_num_attributes_0=Module["_emscripten_bind_Mesh_num_attributes_0"]=asm["_emscripten_bind_Mesh_num_attributes_0"];var _emscripten_bind_Mesh_num_faces_0=Module["_emscripten_bind_Mesh_num_faces_0"]=asm["_emscripten_bind_Mesh_num_faces_0"];var _emscripten_bind_Mesh_num_points_0=Module["_emscripten_bind_Mesh_num_points_0"]=asm["_emscripten_bind_Mesh_num_points_0"];var _emscripten_bind_MetadataQuerier_GetDoubleEntry_2=Module["_emscripten_bind_MetadataQuerier_GetDoubleEntry_2"]=asm["_emscripten_bind_MetadataQuerier_GetDoubleEntry_2"];var _emscripten_bind_MetadataQuerier_GetEntryName_2=Module["_emscripten_bind_MetadataQuerier_GetEntryName_2"]=asm["_emscripten_bind_MetadataQuerier_GetEntryName_2"];var _emscripten_bind_MetadataQuerier_GetIntEntry_2=Module["_emscripten_bind_MetadataQuerier_GetIntEntry_2"]=asm["_emscripten_bind_MetadataQuerier_GetIntEntry_2"];var _emscripten_bind_MetadataQuerier_GetStringEntry_2=Module["_emscripten_bind_MetadataQuerier_GetStringEntry_2"]=asm["_emscripten_bind_MetadataQuerier_GetStringEntry_2"];var _emscripten_bind_MetadataQuerier_HasDoubleEntry_2=Module["_emscripten_bind_MetadataQuerier_HasDoubleEntry_2"]=asm["_emscripten_bind_MetadataQuerier_HasDoubleEntry_2"];var _emscripten_bind_MetadataQuerier_HasEntry_2=Module["_emscripten_bind_MetadataQuerier_HasEntry_2"]=asm["_emscripten_bind_MetadataQuerier_HasEntry_2"];var _emscripten_bind_MetadataQuerier_HasIntEntry_2=Module["_emscripten_bind_MetadataQuerier_HasIntEntry_2"]=asm["_emscripten_bind_MetadataQuerier_HasIntEntry_2"];var _emscripten_bind_MetadataQuerier_HasStringEntry_2=Module["_emscripten_bind_MetadataQuerier_HasStringEntry_2"]=asm["_emscripten_bind_MetadataQuerier_HasStringEntry_2"];var _emscripten_bind_MetadataQuerier_MetadataQuerier_0=Module["_emscripten_bind_MetadataQuerier_MetadataQuerier_0"]=asm["_emscripten_bind_MetadataQuerier_MetadataQuerier_0"];var _emscripten_bind_MetadataQuerier_NumEntries_1=Module["_emscripten_bind_MetadataQuerier_NumEntries_1"]=asm["_emscripten_bind_MetadataQuerier_NumEntries_1"];var _emscripten_bind_MetadataQuerier___destroy___0=Module["_emscripten_bind_MetadataQuerier___destroy___0"]=asm["_emscripten_bind_MetadataQuerier___destroy___0"];var _emscripten_bind_Metadata_Metadata_0=Module["_emscripten_bind_Metadata_Metadata_0"]=asm["_emscripten_bind_Metadata_Metadata_0"];var _emscripten_bind_Metadata___destroy___0=Module["_emscripten_bind_Metadata___destroy___0"]=asm["_emscripten_bind_Metadata___destroy___0"];var _emscripten_bind_PointAttribute_GetAttributeTransformData_0=Module["_emscripten_bind_PointAttribute_GetAttributeTransformData_0"]=asm["_emscripten_bind_PointAttribute_GetAttributeTransformData_0"];var _emscripten_bind_PointAttribute_PointAttribute_0=Module["_emscripten_bind_PointAttribute_PointAttribute_0"]=asm["_emscripten_bind_PointAttribute_PointAttribute_0"];var _emscripten_bind_PointAttribute___destroy___0=Module["_emscripten_bind_PointAttribute___destroy___0"]=asm["_emscripten_bind_PointAttribute___destroy___0"];var _emscripten_bind_PointAttribute_attribute_type_0=Module["_emscripten_bind_PointAttribute_attribute_type_0"]=asm["_emscripten_bind_PointAttribute_attribute_type_0"];var _emscripten_bind_PointAttribute_byte_offset_0=Module["_emscripten_bind_PointAttribute_byte_offset_0"]=asm["_emscripten_bind_PointAttribute_byte_offset_0"];var _emscripten_bind_PointAttribute_byte_stride_0=Module["_emscripten_bind_PointAttribute_byte_stride_0"]=asm["_emscripten_bind_PointAttribute_byte_stride_0"];var _emscripten_bind_PointAttribute_data_type_0=Module["_emscripten_bind_PointAttribute_data_type_0"]=asm["_emscripten_bind_PointAttribute_data_type_0"];var _emscripten_bind_PointAttribute_normalized_0=Module["_emscripten_bind_PointAttribute_normalized_0"]=asm["_emscripten_bind_PointAttribute_normalized_0"];var _emscripten_bind_PointAttribute_num_components_0=Module["_emscripten_bind_PointAttribute_num_components_0"]=asm["_emscripten_bind_PointAttribute_num_components_0"];var _emscripten_bind_PointAttribute_size_0=Module["_emscripten_bind_PointAttribute_size_0"]=asm["_emscripten_bind_PointAttribute_size_0"];var _emscripten_bind_PointAttribute_unique_id_0=Module["_emscripten_bind_PointAttribute_unique_id_0"]=asm["_emscripten_bind_PointAttribute_unique_id_0"];var _emscripten_bind_PointCloud_PointCloud_0=Module["_emscripten_bind_PointCloud_PointCloud_0"]=asm["_emscripten_bind_PointCloud_PointCloud_0"];var _emscripten_bind_PointCloud___destroy___0=Module["_emscripten_bind_PointCloud___destroy___0"]=asm["_emscripten_bind_PointCloud___destroy___0"];var _emscripten_bind_PointCloud_num_attributes_0=Module["_emscripten_bind_PointCloud_num_attributes_0"]=asm["_emscripten_bind_PointCloud_num_attributes_0"];var _emscripten_bind_PointCloud_num_points_0=Module["_emscripten_bind_PointCloud_num_points_0"]=asm["_emscripten_bind_PointCloud_num_points_0"];var _emscripten_bind_Status___destroy___0=Module["_emscripten_bind_Status___destroy___0"]=asm["_emscripten_bind_Status___destroy___0"];var _emscripten_bind_Status_code_0=Module["_emscripten_bind_Status_code_0"]=asm["_emscripten_bind_Status_code_0"];var _emscripten_bind_Status_error_msg_0=Module["_emscripten_bind_Status_error_msg_0"]=asm["_emscripten_bind_Status_error_msg_0"];var _emscripten_bind_Status_ok_0=Module["_emscripten_bind_Status_ok_0"]=asm["_emscripten_bind_Status_ok_0"];var _emscripten_bind_VoidPtr___destroy___0=Module["_emscripten_bind_VoidPtr___destroy___0"]=asm["_emscripten_bind_VoidPtr___destroy___0"];var _emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=Module["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM"]=asm["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM"];var _emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=Module["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM"]=asm["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM"];var _emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=Module["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM"]=asm["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM"];var _emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=Module["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM"]=asm["_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM"];var _emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=Module["_emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE"]=asm["_emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE"];var _emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=Module["_emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD"]=asm["_emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD"];var _emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=Module["_emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH"]=asm["_emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH"];var _emscripten_enum_draco_GeometryAttribute_Type_COLOR=Module["_emscripten_enum_draco_GeometryAttribute_Type_COLOR"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_COLOR"];var _emscripten_enum_draco_GeometryAttribute_Type_GENERIC=Module["_emscripten_enum_draco_GeometryAttribute_Type_GENERIC"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_GENERIC"];var _emscripten_enum_draco_GeometryAttribute_Type_INVALID=Module["_emscripten_enum_draco_GeometryAttribute_Type_INVALID"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_INVALID"];var _emscripten_enum_draco_GeometryAttribute_Type_NORMAL=Module["_emscripten_enum_draco_GeometryAttribute_Type_NORMAL"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_NORMAL"];var _emscripten_enum_draco_GeometryAttribute_Type_POSITION=Module["_emscripten_enum_draco_GeometryAttribute_Type_POSITION"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_POSITION"];var _emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=Module["_emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD"]=asm["_emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD"];var _emscripten_enum_draco_StatusCode_ERROR=Module["_emscripten_enum_draco_StatusCode_ERROR"]=asm["_emscripten_enum_draco_StatusCode_ERROR"];var _emscripten_enum_draco_StatusCode_INVALID_PARAMETER=Module["_emscripten_enum_draco_StatusCode_INVALID_PARAMETER"]=asm["_emscripten_enum_draco_StatusCode_INVALID_PARAMETER"];var _emscripten_enum_draco_StatusCode_IO_ERROR=Module["_emscripten_enum_draco_StatusCode_IO_ERROR"]=asm["_emscripten_enum_draco_StatusCode_IO_ERROR"];var _emscripten_enum_draco_StatusCode_OK=Module["_emscripten_enum_draco_StatusCode_OK"]=asm["_emscripten_enum_draco_StatusCode_OK"];var _emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=Module["_emscripten_enum_draco_StatusCode_UNKNOWN_VERSION"]=asm["_emscripten_enum_draco_StatusCode_UNKNOWN_VERSION"];var _emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=Module["_emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION"]=asm["_emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];Module["asm"]=asm;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")});function doBrowserLoad(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,(function(){throw"could not load memory initializer "+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run();function WrapperObject(){}WrapperObject.prototype=Object.create(WrapperObject.prototype);WrapperObject.prototype.constructor=WrapperObject;WrapperObject.prototype.__class__=WrapperObject;WrapperObject.__cache__={};Module["WrapperObject"]=WrapperObject;function getCache(__class__){return(__class__||WrapperObject).__cache__}Module["getCache"]=getCache;function wrapPointer(ptr,__class__){var cache=getCache(__class__);var ret=cache[ptr];if(ret)return ret;ret=Object.create((__class__||WrapperObject).prototype);ret.ptr=ptr;return cache[ptr]=ret}Module["wrapPointer"]=wrapPointer;function castObject(obj,__class__){return wrapPointer(obj.ptr,__class__)}Module["castObject"]=castObject;Module["NULL"]=wrapPointer(0);function destroy(obj){if(!obj["__destroy__"])throw"Error: Cannot destroy object. (Did you create it yourself?)";obj["__destroy__"]();delete getCache(obj.__class__)[obj.ptr]}Module["destroy"]=destroy;function compare(obj1,obj2){return obj1.ptr===obj2.ptr}Module["compare"]=compare;function getPointer(obj){return obj.ptr}Module["getPointer"]=getPointer;function getClass(obj){return obj.__class__}Module["getClass"]=getClass;var ensureCache={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:(function(){if(ensureCache.needed){for(var i=0;i<ensureCache.temps.length;i++){Module["_free"](ensureCache.temps[i])}ensureCache.temps.length=0;Module["_free"](ensureCache.buffer);ensureCache.buffer=0;ensureCache.size+=ensureCache.needed;ensureCache.needed=0}if(!ensureCache.buffer){ensureCache.size+=128;ensureCache.buffer=Module["_malloc"](ensureCache.size);assert(ensureCache.buffer)}ensureCache.pos=0}),alloc:(function(array,view){assert(ensureCache.buffer);var bytes=view.BYTES_PER_ELEMENT;var len=array.length*bytes;len=len+7&-8;var ret;if(ensureCache.pos+len>=ensureCache.size){assert(len>0);ensureCache.needed+=len;ret=Module["_malloc"](len);ensureCache.temps.push(ret)}else{ret=ensureCache.buffer+ensureCache.pos;ensureCache.pos+=len}return ret}),copy:(function(array,view,offset){var offsetShifted=offset;var bytes=view.BYTES_PER_ELEMENT;switch(bytes){case 2:offsetShifted>>=1;break;case 4:offsetShifted>>=2;break;case 8:offsetShifted>>=3;break}for(var i=0;i<array.length;i++){view[offsetShifted+i]=array[i]}})};function ensureString(value){if(typeof value==="string"){var intArray=intArrayFromString(value);var offset=ensureCache.alloc(intArray,HEAP8);ensureCache.copy(intArray,HEAP8,offset);return offset}return value}function ensureInt8(value){if(typeof value==="object"){var offset=ensureCache.alloc(value,HEAP8);ensureCache.copy(value,HEAP8,offset);return offset}return value}function Status(){throw"cannot construct a Status, no constructor in IDL"}Status.prototype=Object.create(WrapperObject.prototype);Status.prototype.constructor=Status;Status.prototype.__class__=Status;Status.__cache__={};Module["Status"]=Status;Status.prototype["code"]=Status.prototype.code=(function(){var self=this.ptr;return _emscripten_bind_Status_code_0(self)});Status.prototype["ok"]=Status.prototype.ok=(function(){var self=this.ptr;return!!_emscripten_bind_Status_ok_0(self)});Status.prototype["error_msg"]=Status.prototype.error_msg=(function(){var self=this.ptr;return Pointer_stringify(_emscripten_bind_Status_error_msg_0(self))});Status.prototype["__destroy__"]=Status.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_Status___destroy___0(self)});function DracoUInt16Array(){this.ptr=_emscripten_bind_DracoUInt16Array_DracoUInt16Array_0();getCache(DracoUInt16Array)[this.ptr]=this}DracoUInt16Array.prototype=Object.create(WrapperObject.prototype);DracoUInt16Array.prototype.constructor=DracoUInt16Array;DracoUInt16Array.prototype.__class__=DracoUInt16Array;DracoUInt16Array.__cache__={};Module["DracoUInt16Array"]=DracoUInt16Array;DracoUInt16Array.prototype["GetValue"]=DracoUInt16Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoUInt16Array_GetValue_1(self,arg0)});DracoUInt16Array.prototype["size"]=DracoUInt16Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoUInt16Array_size_0(self)});DracoUInt16Array.prototype["__destroy__"]=DracoUInt16Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoUInt16Array___destroy___0(self)});function PointCloud(){this.ptr=_emscripten_bind_PointCloud_PointCloud_0();getCache(PointCloud)[this.ptr]=this}PointCloud.prototype=Object.create(WrapperObject.prototype);PointCloud.prototype.constructor=PointCloud;PointCloud.prototype.__class__=PointCloud;PointCloud.__cache__={};Module["PointCloud"]=PointCloud;PointCloud.prototype["num_attributes"]=PointCloud.prototype.num_attributes=(function(){var self=this.ptr;return _emscripten_bind_PointCloud_num_attributes_0(self)});PointCloud.prototype["num_points"]=PointCloud.prototype.num_points=(function(){var self=this.ptr;return _emscripten_bind_PointCloud_num_points_0(self)});PointCloud.prototype["__destroy__"]=PointCloud.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_PointCloud___destroy___0(self)});function DracoUInt8Array(){this.ptr=_emscripten_bind_DracoUInt8Array_DracoUInt8Array_0();getCache(DracoUInt8Array)[this.ptr]=this}DracoUInt8Array.prototype=Object.create(WrapperObject.prototype);DracoUInt8Array.prototype.constructor=DracoUInt8Array;DracoUInt8Array.prototype.__class__=DracoUInt8Array;DracoUInt8Array.__cache__={};Module["DracoUInt8Array"]=DracoUInt8Array;DracoUInt8Array.prototype["GetValue"]=DracoUInt8Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoUInt8Array_GetValue_1(self,arg0)});DracoUInt8Array.prototype["size"]=DracoUInt8Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoUInt8Array_size_0(self)});DracoUInt8Array.prototype["__destroy__"]=DracoUInt8Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoUInt8Array___destroy___0(self)});function DracoUInt32Array(){this.ptr=_emscripten_bind_DracoUInt32Array_DracoUInt32Array_0();getCache(DracoUInt32Array)[this.ptr]=this}DracoUInt32Array.prototype=Object.create(WrapperObject.prototype);DracoUInt32Array.prototype.constructor=DracoUInt32Array;DracoUInt32Array.prototype.__class__=DracoUInt32Array;DracoUInt32Array.__cache__={};Module["DracoUInt32Array"]=DracoUInt32Array;DracoUInt32Array.prototype["GetValue"]=DracoUInt32Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoUInt32Array_GetValue_1(self,arg0)});DracoUInt32Array.prototype["size"]=DracoUInt32Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoUInt32Array_size_0(self)});DracoUInt32Array.prototype["__destroy__"]=DracoUInt32Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoUInt32Array___destroy___0(self)});function AttributeOctahedronTransform(){this.ptr=_emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0();getCache(AttributeOctahedronTransform)[this.ptr]=this}AttributeOctahedronTransform.prototype=Object.create(WrapperObject.prototype);AttributeOctahedronTransform.prototype.constructor=AttributeOctahedronTransform;AttributeOctahedronTransform.prototype.__class__=AttributeOctahedronTransform;AttributeOctahedronTransform.__cache__={};Module["AttributeOctahedronTransform"]=AttributeOctahedronTransform;AttributeOctahedronTransform.prototype["InitFromAttribute"]=AttributeOctahedronTransform.prototype.InitFromAttribute=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return!!_emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1(self,arg0)});AttributeOctahedronTransform.prototype["quantization_bits"]=AttributeOctahedronTransform.prototype.quantization_bits=(function(){var self=this.ptr;return _emscripten_bind_AttributeOctahedronTransform_quantization_bits_0(self)});AttributeOctahedronTransform.prototype["__destroy__"]=AttributeOctahedronTransform.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_AttributeOctahedronTransform___destroy___0(self)});function PointAttribute(){this.ptr=_emscripten_bind_PointAttribute_PointAttribute_0();getCache(PointAttribute)[this.ptr]=this}PointAttribute.prototype=Object.create(WrapperObject.prototype);PointAttribute.prototype.constructor=PointAttribute;PointAttribute.prototype.__class__=PointAttribute;PointAttribute.__cache__={};Module["PointAttribute"]=PointAttribute;PointAttribute.prototype["size"]=PointAttribute.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_size_0(self)});PointAttribute.prototype["GetAttributeTransformData"]=PointAttribute.prototype.GetAttributeTransformData=(function(){var self=this.ptr;return wrapPointer(_emscripten_bind_PointAttribute_GetAttributeTransformData_0(self),AttributeTransformData)});PointAttribute.prototype["attribute_type"]=PointAttribute.prototype.attribute_type=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_attribute_type_0(self)});PointAttribute.prototype["data_type"]=PointAttribute.prototype.data_type=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_data_type_0(self)});PointAttribute.prototype["num_components"]=PointAttribute.prototype.num_components=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_num_components_0(self)});PointAttribute.prototype["normalized"]=PointAttribute.prototype.normalized=(function(){var self=this.ptr;return!!_emscripten_bind_PointAttribute_normalized_0(self)});PointAttribute.prototype["byte_stride"]=PointAttribute.prototype.byte_stride=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_byte_stride_0(self)});PointAttribute.prototype["byte_offset"]=PointAttribute.prototype.byte_offset=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_byte_offset_0(self)});PointAttribute.prototype["unique_id"]=PointAttribute.prototype.unique_id=(function(){var self=this.ptr;return _emscripten_bind_PointAttribute_unique_id_0(self)});PointAttribute.prototype["__destroy__"]=PointAttribute.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_PointAttribute___destroy___0(self)});function AttributeTransformData(){this.ptr=_emscripten_bind_AttributeTransformData_AttributeTransformData_0();getCache(AttributeTransformData)[this.ptr]=this}AttributeTransformData.prototype=Object.create(WrapperObject.prototype);AttributeTransformData.prototype.constructor=AttributeTransformData;AttributeTransformData.prototype.__class__=AttributeTransformData;AttributeTransformData.__cache__={};Module["AttributeTransformData"]=AttributeTransformData;AttributeTransformData.prototype["transform_type"]=AttributeTransformData.prototype.transform_type=(function(){var self=this.ptr;return _emscripten_bind_AttributeTransformData_transform_type_0(self)});AttributeTransformData.prototype["__destroy__"]=AttributeTransformData.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_AttributeTransformData___destroy___0(self)});function AttributeQuantizationTransform(){this.ptr=_emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0();getCache(AttributeQuantizationTransform)[this.ptr]=this}AttributeQuantizationTransform.prototype=Object.create(WrapperObject.prototype);AttributeQuantizationTransform.prototype.constructor=AttributeQuantizationTransform;AttributeQuantizationTransform.prototype.__class__=AttributeQuantizationTransform;AttributeQuantizationTransform.__cache__={};Module["AttributeQuantizationTransform"]=AttributeQuantizationTransform;AttributeQuantizationTransform.prototype["InitFromAttribute"]=AttributeQuantizationTransform.prototype.InitFromAttribute=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return!!_emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1(self,arg0)});AttributeQuantizationTransform.prototype["quantization_bits"]=AttributeQuantizationTransform.prototype.quantization_bits=(function(){var self=this.ptr;return _emscripten_bind_AttributeQuantizationTransform_quantization_bits_0(self)});AttributeQuantizationTransform.prototype["min_value"]=AttributeQuantizationTransform.prototype.min_value=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_AttributeQuantizationTransform_min_value_1(self,arg0)});AttributeQuantizationTransform.prototype["range"]=AttributeQuantizationTransform.prototype.range=(function(){var self=this.ptr;return _emscripten_bind_AttributeQuantizationTransform_range_0(self)});AttributeQuantizationTransform.prototype["__destroy__"]=AttributeQuantizationTransform.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_AttributeQuantizationTransform___destroy___0(self)});function DracoInt8Array(){this.ptr=_emscripten_bind_DracoInt8Array_DracoInt8Array_0();getCache(DracoInt8Array)[this.ptr]=this}DracoInt8Array.prototype=Object.create(WrapperObject.prototype);DracoInt8Array.prototype.constructor=DracoInt8Array;DracoInt8Array.prototype.__class__=DracoInt8Array;DracoInt8Array.__cache__={};Module["DracoInt8Array"]=DracoInt8Array;DracoInt8Array.prototype["GetValue"]=DracoInt8Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoInt8Array_GetValue_1(self,arg0)});DracoInt8Array.prototype["size"]=DracoInt8Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoInt8Array_size_0(self)});DracoInt8Array.prototype["__destroy__"]=DracoInt8Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoInt8Array___destroy___0(self)});function MetadataQuerier(){this.ptr=_emscripten_bind_MetadataQuerier_MetadataQuerier_0();getCache(MetadataQuerier)[this.ptr]=this}MetadataQuerier.prototype=Object.create(WrapperObject.prototype);MetadataQuerier.prototype.constructor=MetadataQuerier;MetadataQuerier.prototype.__class__=MetadataQuerier;MetadataQuerier.__cache__={};Module["MetadataQuerier"]=MetadataQuerier;MetadataQuerier.prototype["HasEntry"]=MetadataQuerier.prototype.HasEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return!!_emscripten_bind_MetadataQuerier_HasEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["HasIntEntry"]=MetadataQuerier.prototype.HasIntEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return!!_emscripten_bind_MetadataQuerier_HasIntEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["GetIntEntry"]=MetadataQuerier.prototype.GetIntEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return _emscripten_bind_MetadataQuerier_GetIntEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["HasDoubleEntry"]=MetadataQuerier.prototype.HasDoubleEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return!!_emscripten_bind_MetadataQuerier_HasDoubleEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["GetDoubleEntry"]=MetadataQuerier.prototype.GetDoubleEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return _emscripten_bind_MetadataQuerier_GetDoubleEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["HasStringEntry"]=MetadataQuerier.prototype.HasStringEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return!!_emscripten_bind_MetadataQuerier_HasStringEntry_2(self,arg0,arg1)});MetadataQuerier.prototype["GetStringEntry"]=MetadataQuerier.prototype.GetStringEntry=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return Pointer_stringify(_emscripten_bind_MetadataQuerier_GetStringEntry_2(self,arg0,arg1))});MetadataQuerier.prototype["NumEntries"]=MetadataQuerier.prototype.NumEntries=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_MetadataQuerier_NumEntries_1(self,arg0)});MetadataQuerier.prototype["GetEntryName"]=MetadataQuerier.prototype.GetEntryName=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return Pointer_stringify(_emscripten_bind_MetadataQuerier_GetEntryName_2(self,arg0,arg1))});MetadataQuerier.prototype["__destroy__"]=MetadataQuerier.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_MetadataQuerier___destroy___0(self)});function DracoInt16Array(){this.ptr=_emscripten_bind_DracoInt16Array_DracoInt16Array_0();getCache(DracoInt16Array)[this.ptr]=this}DracoInt16Array.prototype=Object.create(WrapperObject.prototype);DracoInt16Array.prototype.constructor=DracoInt16Array;DracoInt16Array.prototype.__class__=DracoInt16Array;DracoInt16Array.__cache__={};Module["DracoInt16Array"]=DracoInt16Array;DracoInt16Array.prototype["GetValue"]=DracoInt16Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoInt16Array_GetValue_1(self,arg0)});DracoInt16Array.prototype["size"]=DracoInt16Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoInt16Array_size_0(self)});DracoInt16Array.prototype["__destroy__"]=DracoInt16Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoInt16Array___destroy___0(self)});function DracoFloat32Array(){this.ptr=_emscripten_bind_DracoFloat32Array_DracoFloat32Array_0();getCache(DracoFloat32Array)[this.ptr]=this}DracoFloat32Array.prototype=Object.create(WrapperObject.prototype);DracoFloat32Array.prototype.constructor=DracoFloat32Array;DracoFloat32Array.prototype.__class__=DracoFloat32Array;DracoFloat32Array.__cache__={};Module["DracoFloat32Array"]=DracoFloat32Array;DracoFloat32Array.prototype["GetValue"]=DracoFloat32Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoFloat32Array_GetValue_1(self,arg0)});DracoFloat32Array.prototype["size"]=DracoFloat32Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoFloat32Array_size_0(self)});DracoFloat32Array.prototype["__destroy__"]=DracoFloat32Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoFloat32Array___destroy___0(self)});function GeometryAttribute(){this.ptr=_emscripten_bind_GeometryAttribute_GeometryAttribute_0();getCache(GeometryAttribute)[this.ptr]=this}GeometryAttribute.prototype=Object.create(WrapperObject.prototype);GeometryAttribute.prototype.constructor=GeometryAttribute;GeometryAttribute.prototype.__class__=GeometryAttribute;GeometryAttribute.__cache__={};Module["GeometryAttribute"]=GeometryAttribute;GeometryAttribute.prototype["__destroy__"]=GeometryAttribute.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_GeometryAttribute___destroy___0(self)});function DecoderBuffer(){this.ptr=_emscripten_bind_DecoderBuffer_DecoderBuffer_0();getCache(DecoderBuffer)[this.ptr]=this}DecoderBuffer.prototype=Object.create(WrapperObject.prototype);DecoderBuffer.prototype.constructor=DecoderBuffer;DecoderBuffer.prototype.__class__=DecoderBuffer;DecoderBuffer.__cache__={};Module["DecoderBuffer"]=DecoderBuffer;DecoderBuffer.prototype["Init"]=DecoderBuffer.prototype.Init=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(typeof arg0=="object"){arg0=ensureInt8(arg0)}if(arg1&&typeof arg1==="object")arg1=arg1.ptr;_emscripten_bind_DecoderBuffer_Init_2(self,arg0,arg1)});DecoderBuffer.prototype["__destroy__"]=DecoderBuffer.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DecoderBuffer___destroy___0(self)});function Decoder(){this.ptr=_emscripten_bind_Decoder_Decoder_0();getCache(Decoder)[this.ptr]=this}Decoder.prototype=Object.create(WrapperObject.prototype);Decoder.prototype.constructor=Decoder;Decoder.prototype.__class__=Decoder;Decoder.__cache__={};Module["Decoder"]=Decoder;Decoder.prototype["GetEncodedGeometryType"]=Decoder.prototype.GetEncodedGeometryType=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_Decoder_GetEncodedGeometryType_1(self,arg0)});Decoder.prototype["DecodeBufferToPointCloud"]=Decoder.prototype.DecodeBufferToPointCloud=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return wrapPointer(_emscripten_bind_Decoder_DecodeBufferToPointCloud_2(self,arg0,arg1),Status)});Decoder.prototype["DecodeBufferToMesh"]=Decoder.prototype.DecodeBufferToMesh=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return wrapPointer(_emscripten_bind_Decoder_DecodeBufferToMesh_2(self,arg0,arg1),Status)});Decoder.prototype["GetAttributeId"]=Decoder.prototype.GetAttributeId=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return _emscripten_bind_Decoder_GetAttributeId_2(self,arg0,arg1)});Decoder.prototype["GetAttributeIdByName"]=Decoder.prototype.GetAttributeIdByName=(function(arg0,arg1){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);return _emscripten_bind_Decoder_GetAttributeIdByName_2(self,arg0,arg1)});Decoder.prototype["GetAttributeIdByMetadataEntry"]=Decoder.prototype.GetAttributeIdByMetadataEntry=(function(arg0,arg1,arg2){var self=this.ptr;ensureCache.prepare();if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;else arg1=ensureString(arg1);if(arg2&&typeof arg2==="object")arg2=arg2.ptr;else arg2=ensureString(arg2);return _emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttribute"]=Decoder.prototype.GetAttribute=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return wrapPointer(_emscripten_bind_Decoder_GetAttribute_2(self,arg0,arg1),PointAttribute)});Decoder.prototype["GetAttributeByUniqueId"]=Decoder.prototype.GetAttributeByUniqueId=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return wrapPointer(_emscripten_bind_Decoder_GetAttributeByUniqueId_2(self,arg0,arg1),PointAttribute)});Decoder.prototype["GetMetadata"]=Decoder.prototype.GetMetadata=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return wrapPointer(_emscripten_bind_Decoder_GetMetadata_1(self,arg0),Metadata)});Decoder.prototype["GetAttributeMetadata"]=Decoder.prototype.GetAttributeMetadata=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return wrapPointer(_emscripten_bind_Decoder_GetAttributeMetadata_2(self,arg0,arg1),Metadata)});Decoder.prototype["GetFaceFromMesh"]=Decoder.prototype.GetFaceFromMesh=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetFaceFromMesh_3(self,arg0,arg1,arg2)});Decoder.prototype["GetTriangleStripsFromMesh"]=Decoder.prototype.GetTriangleStripsFromMesh=(function(arg0,arg1){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;return _emscripten_bind_Decoder_GetTriangleStripsFromMesh_2(self,arg0,arg1)});Decoder.prototype["GetAttributeFloat"]=Decoder.prototype.GetAttributeFloat=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeFloat_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeFloatForAllPoints"]=Decoder.prototype.GetAttributeFloatForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeIntForAllPoints"]=Decoder.prototype.GetAttributeIntForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeIntForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeInt8ForAllPoints"]=Decoder.prototype.GetAttributeInt8ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeUInt8ForAllPoints"]=Decoder.prototype.GetAttributeUInt8ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeInt16ForAllPoints"]=Decoder.prototype.GetAttributeInt16ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeUInt16ForAllPoints"]=Decoder.prototype.GetAttributeUInt16ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeInt32ForAllPoints"]=Decoder.prototype.GetAttributeInt32ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["GetAttributeUInt32ForAllPoints"]=Decoder.prototype.GetAttributeUInt32ForAllPoints=(function(arg0,arg1,arg2){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;if(arg1&&typeof arg1==="object")arg1=arg1.ptr;if(arg2&&typeof arg2==="object")arg2=arg2.ptr;return!!_emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3(self,arg0,arg1,arg2)});Decoder.prototype["SkipAttributeTransform"]=Decoder.prototype.SkipAttributeTransform=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;_emscripten_bind_Decoder_SkipAttributeTransform_1(self,arg0)});Decoder.prototype["__destroy__"]=Decoder.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_Decoder___destroy___0(self)});function Mesh(){this.ptr=_emscripten_bind_Mesh_Mesh_0();getCache(Mesh)[this.ptr]=this}Mesh.prototype=Object.create(WrapperObject.prototype);Mesh.prototype.constructor=Mesh;Mesh.prototype.__class__=Mesh;Mesh.__cache__={};Module["Mesh"]=Mesh;Mesh.prototype["num_faces"]=Mesh.prototype.num_faces=(function(){var self=this.ptr;return _emscripten_bind_Mesh_num_faces_0(self)});Mesh.prototype["num_attributes"]=Mesh.prototype.num_attributes=(function(){var self=this.ptr;return _emscripten_bind_Mesh_num_attributes_0(self)});Mesh.prototype["num_points"]=Mesh.prototype.num_points=(function(){var self=this.ptr;return _emscripten_bind_Mesh_num_points_0(self)});Mesh.prototype["__destroy__"]=Mesh.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_Mesh___destroy___0(self)});function VoidPtr(){throw"cannot construct a VoidPtr, no constructor in IDL"}VoidPtr.prototype=Object.create(WrapperObject.prototype);VoidPtr.prototype.constructor=VoidPtr;VoidPtr.prototype.__class__=VoidPtr;VoidPtr.__cache__={};Module["VoidPtr"]=VoidPtr;VoidPtr.prototype["__destroy__"]=VoidPtr.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_VoidPtr___destroy___0(self)});function DracoInt32Array(){this.ptr=_emscripten_bind_DracoInt32Array_DracoInt32Array_0();getCache(DracoInt32Array)[this.ptr]=this}DracoInt32Array.prototype=Object.create(WrapperObject.prototype);DracoInt32Array.prototype.constructor=DracoInt32Array;DracoInt32Array.prototype.__class__=DracoInt32Array;DracoInt32Array.__cache__={};Module["DracoInt32Array"]=DracoInt32Array;DracoInt32Array.prototype["GetValue"]=DracoInt32Array.prototype.GetValue=(function(arg0){var self=this.ptr;if(arg0&&typeof arg0==="object")arg0=arg0.ptr;return _emscripten_bind_DracoInt32Array_GetValue_1(self,arg0)});DracoInt32Array.prototype["size"]=DracoInt32Array.prototype.size=(function(){var self=this.ptr;return _emscripten_bind_DracoInt32Array_size_0(self)});DracoInt32Array.prototype["__destroy__"]=DracoInt32Array.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_DracoInt32Array___destroy___0(self)});function Metadata(){this.ptr=_emscripten_bind_Metadata_Metadata_0();getCache(Metadata)[this.ptr]=this}Metadata.prototype=Object.create(WrapperObject.prototype);Metadata.prototype.constructor=Metadata;Metadata.prototype.__class__=Metadata;Metadata.__cache__={};Module["Metadata"]=Metadata;Metadata.prototype["__destroy__"]=Metadata.prototype.__destroy__=(function(){var self=this.ptr;_emscripten_bind_Metadata___destroy___0(self)});((function(){function setupEnums(){Module["OK"]=_emscripten_enum_draco_StatusCode_OK();Module["ERROR"]=_emscripten_enum_draco_StatusCode_ERROR();Module["IO_ERROR"]=_emscripten_enum_draco_StatusCode_IO_ERROR();Module["INVALID_PARAMETER"]=_emscripten_enum_draco_StatusCode_INVALID_PARAMETER();Module["UNSUPPORTED_VERSION"]=_emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION();Module["UNKNOWN_VERSION"]=_emscripten_enum_draco_StatusCode_UNKNOWN_VERSION();Module["INVALID_GEOMETRY_TYPE"]=_emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE();Module["POINT_CLOUD"]=_emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD();Module["TRIANGULAR_MESH"]=_emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH();Module["ATTRIBUTE_INVALID_TRANSFORM"]=_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM();Module["ATTRIBUTE_NO_TRANSFORM"]=_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM();Module["ATTRIBUTE_QUANTIZATION_TRANSFORM"]=_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM();Module["ATTRIBUTE_OCTAHEDRON_TRANSFORM"]=_emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM();Module["INVALID"]=_emscripten_enum_draco_GeometryAttribute_Type_INVALID();Module["POSITION"]=_emscripten_enum_draco_GeometryAttribute_Type_POSITION();Module["NORMAL"]=_emscripten_enum_draco_GeometryAttribute_Type_NORMAL();Module["COLOR"]=_emscripten_enum_draco_GeometryAttribute_Type_COLOR();Module["TEX_COORD"]=_emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD();Module["GENERIC"]=_emscripten_enum_draco_GeometryAttribute_Type_GENERIC()}if(Module["calledRun"])setupEnums();else addOnPreMain(setupEnums)}))();if(typeof Module["onModuleParsed"]==="function"){Module["onModuleParsed"]()} + + + + + + + return DracoDecoderModule; +}; +if (typeof exports === 'object' && typeof module === 'object') + module.exports = DracoDecoderModule; + else if (typeof define === 'function' && define['amd']) + define([], function() { return DracoDecoderModule; }); + else if (typeof exports === 'object') + exports["DracoDecoderModule"] = DracoDecoderModule; + \ No newline at end of file diff --git a/public/lib/Cesium/ThirdParty/Workers/draco_wasm_wrapper.js b/public/lib/Cesium/ThirdParty/Workers/draco_wasm_wrapper.js new file mode 100644 index 0000000..bfc8deb --- /dev/null +++ b/public/lib/Cesium/ThirdParty/Workers/draco_wasm_wrapper.js @@ -0,0 +1,129 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,f,n){d!=Array.prototype&&d!=Object.prototype&&(d[f]=n.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this); +$jscomp.polyfill=function(d,f,n,w){if(f){n=$jscomp.global;d=d.split(".");for(w=0;w<d.length-1;w++){var g=d[w];g in n||(n[g]={});n=n[g]}d=d[d.length-1];w=n[d];f=f(w);f!=w&&null!=f&&$jscomp.defineProperty(n,d,{configurable:!0,writable:!0,value:f})}};$jscomp.polyfill("Math.imul",function(d){return d?d:function(f,d){f=Number(f);d=Number(d);var n=f&65535,g=d&65535;return n*g+((f>>>16&65535)*g+n*(d>>>16&65535)<<16>>>0)|0}},"es6","es3"); +$jscomp.polyfill("Math.clz32",function(d){return d?d:function(f){f=Number(f)>>>0;if(0===f)return 32;var d=0;0===(f&4294901760)&&(f<<=16,d+=16);0===(f&4278190080)&&(f<<=8,d+=8);0===(f&4026531840)&&(f<<=4,d+=4);0===(f&3221225472)&&(f<<=2,d+=2);0===(f&2147483648)&&d++;return d}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3"); +$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(d){return $jscomp.SYMBOL_PREFIX+(d||"")+$jscomp.symbolCounter_++}; +$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var d=$jscomp.global.Symbol.iterator;d||(d=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[d]&&$jscomp.defineProperty(Array.prototype,d,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(d){var f=0;return $jscomp.iteratorPrototype(function(){return f<d.length?{done:!1,value:d[f++]}:{done:!0}})}; +$jscomp.iteratorPrototype=function(d){$jscomp.initSymbolIterator();d={next:d};d[$jscomp.global.Symbol.iterator]=function(){return this};return d};$jscomp.makeIterator=function(d){$jscomp.initSymbolIterator();var f=d[Symbol.iterator];return f?f.call(d):$jscomp.arrayIterator(d)};$jscomp.FORCE_POLYFILL_PROMISE=!1; +$jscomp.polyfill("Promise",function(d){function f(){this.batch_=null}function n(d){return d instanceof g?d:new g(function(f,D){f(d)})}if(d&&!$jscomp.FORCE_POLYFILL_PROMISE)return d;f.prototype.asyncExecute=function(d){null==this.batch_&&(this.batch_=[],this.asyncExecuteBatch_());this.batch_.push(d);return this};f.prototype.asyncExecuteBatch_=function(){var d=this;this.asyncExecuteFunction(function(){d.executeBatch_()})};var w=$jscomp.global.setTimeout;f.prototype.asyncExecuteFunction=function(d){w(d, +0)};f.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var d=this.batch_;this.batch_=[];for(var f=0;f<d.length;++f){var g=d[f];delete d[f];try{g()}catch(la){this.asyncThrow_(la)}}}this.batch_=null};f.prototype.asyncThrow_=function(d){this.asyncExecuteFunction(function(){throw d;})};var g=function(d){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];var f=this.createResolveAndReject_();try{d(f.resolve,f.reject)}catch(u){f.reject(u)}};g.prototype.createResolveAndReject_= +function(){function d(d){return function(D){g||(g=!0,d.call(f,D))}}var f=this,g=!1;return{resolve:d(this.resolveTo_),reject:d(this.reject_)}};g.prototype.resolveTo_=function(d){if(d===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof g)this.settleSameAsPromise_(d);else{a:switch(typeof d){case "object":var f=null!=d;break a;case "function":f=!0;break a;default:f=!1}f?this.resolveToNonPromiseObj_(d):this.fulfill_(d)}};g.prototype.resolveToNonPromiseObj_=function(d){var f= +void 0;try{f=d.then}catch(u){this.reject_(u);return}"function"==typeof f?this.settleSameAsThenable_(f,d):this.fulfill_(d)};g.prototype.reject_=function(d){this.settle_(2,d)};g.prototype.fulfill_=function(d){this.settle_(1,d)};g.prototype.settle_=function(d,f){if(0!=this.state_)throw Error("Cannot settle("+d+", "+f|"): Promise already settled in state"+this.state_);this.state_=d;this.result_=f;this.executeOnSettledCallbacks_()};g.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var d= +this.onSettledCallbacks_,f=0;f<d.length;++f)d[f].call(),d[f]=null;this.onSettledCallbacks_=null}};var ma=new f;g.prototype.settleSameAsPromise_=function(d){var f=this.createResolveAndReject_();d.callWhenSettled_(f.resolve,f.reject)};g.prototype.settleSameAsThenable_=function(d,f){var g=this.createResolveAndReject_();try{d.call(f,g.resolve,g.reject)}catch(la){g.reject(la)}};g.prototype.then=function(d,f){function u(d,f){return"function"==typeof d?function(f){try{n(d(f))}catch(ea){D(ea)}}:f}var n,D, +w=new g(function(d,f){n=d;D=f});this.callWhenSettled_(u(d,n),u(f,D));return w};g.prototype.catch=function(d){return this.then(void 0,d)};g.prototype.callWhenSettled_=function(d,f){function g(){switch(n.state_){case 1:d(n.result_);break;case 2:f(n.result_);break;default:throw Error("Unexpected state: "+n.state_);}}var n=this;null==this.onSettledCallbacks_?ma.asyncExecute(g):this.onSettledCallbacks_.push(function(){ma.asyncExecute(g)})};g.resolve=n;g.reject=function(d){return new g(function(f,g){g(d)})}; +g.race=function(d){return new g(function(f,g){for(var u=$jscomp.makeIterator(d),w=u.next();!w.done;w=u.next())n(w.value).callWhenSettled_(f,g)})};g.all=function(d){var f=$jscomp.makeIterator(d),u=f.next();return u.done?n([]):new g(function(d,g){function w(f){return function(g){D[f]=g;Q--;0==Q&&d(D)}}var D=[],Q=0;do D.push(void 0),Q++,n(u.value).callWhenSettled_(w(D.length-1),g),u=f.next();while(!u.done)})};return g},"es6","es3"); +var DracoDecoderModule=function(d){function f(a,b){a||W("Assertion failed: "+b)}function n(e,b){if(0===b||!e)return"";for(var c=0,l,d=0;;){l=T[e+d>>0];c|=l;if(0==l&&!b)break;d++;if(b&&d==b)break}b||(b=d);l="";if(128>c){for(;0<b;)c=String.fromCharCode.apply(String,T.subarray(e,e+Math.min(b,1024))),l=l?l+c:c,e+=1024,b-=1024;return l}return a.UTF8ToString(e)}function w(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function g(){a:{var e=Error();if(!e.stack){try{throw Error(0); +}catch(b){e=b}if(!e.stack){e="(no stack trace available)";break a}}e=e.stack.toString()}a.extraStackTrace&&(e+="\n"+a.extraStackTrace());return w(e)}function ma(a,b){0<a%b&&(a+=b-a%b);return a}function D(){a.HEAP8=fa=new Int8Array(F);a.HEAP16=za=new Int16Array(F);a.HEAP32=x=new Int32Array(F);a.HEAPU8=T=new Uint8Array(F);a.HEAPU16=Oa=new Uint16Array(F);a.HEAPU32=Pa=new Uint32Array(F);a.HEAPF32=Qa=new Float32Array(F);a.HEAPF64=Ra=new Float64Array(F)}function Ma(){var e=a.usingWasm?Aa:Sa,b=2147483648- +e;if(x[ba>>2]>b)return!1;var c=y;for(y=Math.max(y,ib);y<x[ba>>2];)y=536870912>=y?ma(2*y,e):Math.min(ma((3*y+2147483648)/4,e),b);e=a.reallocBuffer(y);if(!e||e.byteLength!=y)return y=c,!1;a.buffer=F=e;D();return!0}function u(e){for(;0<e.length;){var b=e.shift();if("function"==typeof b)b();else{var c=b.func;"number"===typeof c?void 0===b.arg?a.dynCall_v(c):a.dynCall_vi(c,b.arg):c(void 0===b.arg?null:b.arg)}}}function la(e){ha++;a.monitorRunDependencies&&a.monitorRunDependencies(ha)}function Na(e){ha--; +a.monitorRunDependencies&&a.monitorRunDependencies(ha);0==ha&&(null!==Ba&&(clearInterval(Ba),Ba=null),sa&&(e=sa,sa=null,e()))}function na(){return!!na.uncaught_exception}function qa(){var e=A.last;if(!e)return(m.setTempRet0(0),0)|0;var b=A.infos[e],c=b.type;if(!c)return(m.setTempRet0(0),e)|0;var l=Array.prototype.slice.call(arguments);a.___cxa_is_pointer_type(c);qa.buffer||(qa.buffer=Ta(4));x[qa.buffer>>2]=e;e=qa.buffer;for(var d=0;d<l.length;d++)if(l[d]&&a.___cxa_can_catch(l[d],c,e))return e=x[e>> +2],b.adjusted=e,(m.setTempRet0(l[d]),e)|0;e=x[e>>2];return(m.setTempRet0(c),e)|0}function Q(e,b){v.varargs=b;try{var c=v.get(),l=v.get(),d=v.get();e=0;Q.buffer||(Q.buffers=[null,[],[]],Q.printChar=function(b,c){var e=Q.buffers[b];f(e);if(0===c||10===c){b=1===b?a.print:a.printErr;a:{for(var l=c=0;e[l];)++l;if(16<l-c&&e.subarray&&Ua)c=Ua.decode(e.subarray(c,l));else for(l="";;){var d=e[c++];if(!d){c=l;break a}if(d&128){var g=e[c++]&63;if(192==(d&224))l+=String.fromCharCode((d&31)<<6|g);else{var h=e[c++]& +63;if(224==(d&240))d=(d&15)<<12|g<<6|h;else{var E=e[c++]&63;if(240==(d&248))d=(d&7)<<18|g<<12|h<<6|E;else{var k=e[c++]&63;if(248==(d&252))d=(d&3)<<24|g<<18|h<<12|E<<6|k;else{var ta=e[c++]&63;d=(d&1)<<30|g<<24|h<<18|E<<12|k<<6|ta}}}65536>d?l+=String.fromCharCode(d):(d-=65536,l+=String.fromCharCode(55296|d>>10,56320|d&1023))}}else l+=String.fromCharCode(d)}}b(c);e.length=0}else e.push(c)});for(b=0;b<d;b++){for(var h=x[l+8*b>>2],g=x[l+(8*b+4)>>2],k=0;k<g;k++)Q.printChar(c,T[h+k]);e+=g}return e}catch(Ca){return"undefined"!== +typeof FS&&Ca instanceof FS.ErrnoError||W(Ca),-Ca.errno}}function ra(e,b){ra.seen||(ra.seen={});e in ra.seen||(a.dynCall_v(b),ra.seen[e]=1)}function ea(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}function Da(e){function b(){if(!a.calledRun&&(a.calledRun=!0,!ua)){Va||(Va=!0,u(Wa));u(Xa);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ya.unshift(a.postRun.shift()); +u(Ya)}}null===Za&&(Za=Date.now());if(!(0<ha)){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)$a.unshift(a.preRun.shift());u($a);0<ha||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);b()},1)):b())}}function W(e){if(a.onAbort)a.onAbort(e);void 0!==e?(a.print(e),a.printErr(e),e=JSON.stringify(e)):e="";ua=!0;var b="abort("+e+") at "+g()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information."; +ab&&ab.forEach(function(a){b=a(b,e)});throw b;}function p(){}function t(a){return(a||p).__cache__}function X(a,b){var c=t(b),e=c[a];if(e)return e;e=Object.create((b||p).prototype);e.ptr=a;return c[a]=e}function Y(a){if("string"===typeof a){for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:2097151>=e?b+4:67108863>=e?b+5:b+6}b=Array(b+1);c=0;e=b.length;if(0<e){e=c+e-1;for(var d=0;d<a.length;++d){var f= +a.charCodeAt(d);55296<=f&&57343>=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++d)&1023);if(127>=f){if(c>=e)break;b[c++]=f}else{if(2047>=f){if(c+1>=e)break;b[c++]=192|f>>6}else{if(65535>=f){if(c+2>=e)break;b[c++]=224|f>>12}else{if(2097151>=f){if(c+3>=e)break;b[c++]=240|f>>18}else{if(67108863>=f){if(c+4>=e)break;b[c++]=248|f>>24}else{if(c+5>=e)break;b[c++]=252|f>>30;b[c++]=128|f>>24&63}b[c++]=128|f>>18&63}b[c++]=128|f>>12&63}b[c++]=128|f>>6&63}b[c++]=128|f&63}}b[c]=0}a=k.alloc(b,fa);k.copy(b,fa,a)}return a} +function B(){throw"cannot construct a Status, no constructor in IDL";}function G(){this.ptr=lb();t(G)[this.ptr]=this}function H(){this.ptr=mb();t(H)[this.ptr]=this}function I(){this.ptr=nb();t(I)[this.ptr]=this}function J(){this.ptr=ob();t(J)[this.ptr]=this}function K(){this.ptr=pb();t(K)[this.ptr]=this}function q(){this.ptr=qb();t(q)[this.ptr]=this}function P(){this.ptr=rb();t(P)[this.ptr]=this}function z(){this.ptr=sb();t(z)[this.ptr]=this}function L(){this.ptr=tb();t(L)[this.ptr]=this}function r(){this.ptr= +ub();t(r)[this.ptr]=this}function M(){this.ptr=vb();t(M)[this.ptr]=this}function N(){this.ptr=wb();t(N)[this.ptr]=this}function Z(){this.ptr=xb();t(Z)[this.ptr]=this}function R(){this.ptr=yb();t(R)[this.ptr]=this}function h(){this.ptr=zb();t(h)[this.ptr]=this}function C(){this.ptr=Ab();t(C)[this.ptr]=this}function ca(){throw"cannot construct a VoidPtr, no constructor in IDL";}function O(){this.ptr=Bb();t(O)[this.ptr]=this}function S(){this.ptr=Cb();t(S)[this.ptr]=this}var a=d=d||{},bb=!1,cb=!1;a.onRuntimeInitialized= +function(){bb=!0;if(cb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){cb=!0;if(bb&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3<a.length?!1:1==a[0]&&0<=a[1]&&3>=a[1]?!0:0!=a[0]||10<a[1]?!1:!0};a||(a=("undefined"!==typeof d?d:null)||{});var va={},da;for(da in a)a.hasOwnProperty(da)&&(va[da]=a[da]);var oa=!1,ka=!1,pa=!1,wa=!1;if(a.ENVIRONMENT)if("WEB"=== +a.ENVIRONMENT)oa=!0;else if("WORKER"===a.ENVIRONMENT)ka=!0;else if("NODE"===a.ENVIRONMENT)pa=!0;else if("SHELL"===a.ENVIRONMENT)wa=!0;else throw Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else oa="object"===typeof window,ka="function"===typeof importScripts,pa="object"===typeof process&&"function"===typeof require&&!oa&&!ka,wa=!oa&&!pa&&!ka;if(pa){a.print||(a.print=console.log);a.printErr||(a.printErr=console.warn);var Ea,Fa;a.read=function(a, +b){Ea||(Ea=require("fs"));Fa||(Fa=require("path"));a=Fa.normalize(a);a=Ea.readFileSync(a);return b?a:a.toString()};a.readBinary=function(e){e=a.read(e,!0);e.buffer||(e=new Uint8Array(e));f(e.buffer);return e};a.thisProgram||(a.thisProgram=1<process.argv.length?process.argv[1].replace(/\\/g,"/"):"unknown-program");a.arguments=process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof ea))throw a;});a.inspect=function(){return"[Emscripten Module object]"}}else if(wa)a.print|| +(a.print=print),"undefined"!=typeof printErr&&(a.printErr=printErr),a.read="undefined"!=typeof read?function(a){return read(a)}:function(){throw"no read() available";},a.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");f("object"===typeof a);return a},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(a,b){quit(a)});else if(oa||ka)a.read= +function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ka&&(a.readBinary=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),a.readAsync=function(a,b,c){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)},"undefined"!=typeof arguments&&(a.arguments=arguments), +"undefined"!==typeof console?(a.print||(a.print=function(a){console.log(a)}),a.printErr||(a.printErr=function(a){console.warn(a)})):a.print||(a.print=function(a){}),"undefined"===typeof a.setWindowTitle&&(a.setWindowTitle=function(a){document.title=a});else throw Error("Unknown runtime environment. Where are we?");a.print||(a.print=function(){});a.printErr||(a.printErr=a.print);a.arguments||(a.arguments=[]);a.thisProgram||(a.thisProgram="./this.program");a.quit||(a.quit=function(a,b){throw b;});a.print= +a.print;a.printErr=a.printErr;a.preRun=[];a.postRun=[];for(da in va)va.hasOwnProperty(da)&&(a[da]=va[da]);va=void 0;var m={setTempRet0:function(a){return tempRet0=a},getTempRet0:function(){return tempRet0},stackSave:function(){return U},stackRestore:function(a){U=a},getNativeTypeSize:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;default:return"*"===a[a.length-1]?m.QUANTUM_SIZE:"i"===a[0]? +(a=parseInt(a.substr(1)),f(0===a%8),a/8):0}},getNativeFieldSize:function(a){return Math.max(m.getNativeTypeSize(a),m.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){"double"===b||"i64"===b?a&7&&(f(4===(a&7)),a+=4):f(0===(a&3));return a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?m.getNativeFieldSize(a):0),m.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(e,b,c){return c&&c.length?a["dynCall_"+e].apply(null,[b].concat(c)):a["dynCall_"+e].call(null,b)},functionPointers:[], +addFunction:function(a){for(var b=0;b<m.functionPointers.length;b++)if(!m.functionPointers[b])return m.functionPointers[b]=a,2*(1+b);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";},removeFunction:function(a){m.functionPointers[(a-2)/2]=null},warnOnce:function(e){m.warnOnce.shown||(m.warnOnce.shown={});m.warnOnce.shown[e]||(m.warnOnce.shown[e]=1,a.printErr(e))},funcWrappers:{},getFuncWrapper:function(a,b){if(a){f(b);m.funcWrappers[b]||(m.funcWrappers[b]= +{});var c=m.funcWrappers[b];c[a]||(c[a]=1===b.length?function(){return m.dynCall(b,a)}:2===b.length?function(c){return m.dynCall(b,a,[c])}:function(){return m.dynCall(b,a,Array.prototype.slice.call(arguments))});return c[a]}},getCompilerSetting:function(a){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work";},stackAlloc:function(a){var b=U;U=U+a|0;U=U+15&-16;return b},staticAlloc:function(a){var b=aa;aa=aa+a|0;aa=aa+15& +-16;return b},dynamicAlloc:function(a){var b=x[ba>>2];a=(b+a+15|0)&-16;x[ba>>2]=a;return a>=y&&!Ma()?(x[ba>>2]=b,0):b},alignMemory:function(a,b){return Math.ceil(a/(b?b:16))*(b?b:16)},makeBigInt:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},GLOBAL_BASE:1024,QUANTUM_SIZE:4,__dummy__:0},ua=0,Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var Aa=65536,Sa=16777216,ib=16777216,fa,T,za, +Oa,x,Pa,Qa,Ra,aa,Ga,U,xa,Ha,ba;var Ia=aa=Ga=U=xa=Ha=ba=0;a.reallocBuffer||(a.reallocBuffer=function(a){try{if(ArrayBuffer.transfer)var b=ArrayBuffer.transfer(F,a);else{var c=fa;b=new ArrayBuffer(a);(new Int8Array(b)).set(c)}}catch(l){return!1}return Db(b)?b:!1});try{var Ja=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);Ja(new ArrayBuffer(4))}catch(e){Ja=function(a){return a.byteLength}}var Ka=a.TOTAL_STACK||5242880,y=a.TOTAL_MEMORY||16777216; +y<Ka&&a.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+y+"! (TOTAL_STACK="+Ka+")");if(a.buffer)var F=a.buffer;else"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(a.wasmMemory=new WebAssembly.Memory({initial:y/Aa}),F=a.wasmMemory.buffer):F=new ArrayBuffer(y);D();x[0]=1668509029;za[1]=25459;if(115!==T[2]||99!==T[3])throw"Runtime error: expected the system to be little-endian!";a.HEAP=void 0;a.buffer=F;a.HEAP8=fa;a.HEAP16=za;a.HEAP32=x;a.HEAPU8=T;a.HEAPU16=Oa; +a.HEAPU32=Pa;a.HEAPF32=Qa;a.HEAPF64=Ra;var $a=[],Wa=[],Xa=[],db=[],Ya=[],Va=!1;f(Math.imul&&Math.fround&&Math.clz32&&Math.trunc,"this is a legacy browser, build with LEGACY_VM_SUPPORT");var ha=0,Ba=null,sa=null;a.preloadedImages={};a.preloadedAudios={};var V=null;(function(){function e(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(a.readBinary)return a.readBinary(d);throw"on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)"; +}catch(jb){W(jb)}}function b(){return a.wasmBinary||!oa&&!ka||"function"!==typeof fetch?new Promise(function(a,b){a(e())}):fetch(d,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+d+"'";return a.arrayBuffer()}).catch(function(){return e()})}function c(c,e,l){function f(b,c){h=b.exports;if(h.memory){b=h.memory;c=a.buffer;b.byteLength<c.byteLength&&a.printErr("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"); +c=new Int8Array(c);var e=new Int8Array(b);V||c.set(e.subarray(a.STATIC_BASE,a.STATIC_BASE+a.STATIC_BUMP),a.STATIC_BASE);e.set(c);a.buffer=F=b;D()}a.asm=h;a.usingWasm=!0;Na("wasm-instantiate")}function E(a){f(a.instance,a.module)}function k(c){b().then(function(a){return WebAssembly.instantiate(a,g)}).then(c).catch(function(b){a.printErr("failed to asynchronously prepare wasm: "+b);W(b)})}if("object"!==typeof WebAssembly)return a.printErr("no native wasm support detected"),!1;if(!(a.wasmMemory instanceof +WebAssembly.Memory))return a.printErr("no native wasm Memory in use"),!1;e.memory=a.wasmMemory;g.global={NaN:NaN,Infinity:Infinity};g["global.Math"]=c.Math;g.env=e;la("wasm-instantiate");if(a.instantiateWasm)try{return a.instantiateWasm(g,f)}catch(kb){return a.printErr("Module.instantiateWasm callback failed with error: "+kb),!1}a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||0===d.indexOf("data:")||"function"!==typeof fetch?k(E):WebAssembly.instantiateStreaming(fetch(d,{credentials:"same-origin"}), +g).then(E).catch(function(b){a.printErr("wasm streaming compile failed: "+b);a.printErr("falling back to ArrayBuffer instantiation");k(E)});return{}}var d="draco_decoder.wasm",f="draco_decoder.temp.asm.js";"function"===typeof a.locateFile&&(a.locateFile("draco_decoder.wast"),d=a.locateFile(d),f=a.locateFile(f));var g={global:null,env:null,asm2wasm:{"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},parent:a},h=null;a.asmPreload=a.asm;var k=a.reallocBuffer;a.reallocBuffer=function(b){if("asmjs"=== +m)var c=k(b);else a:{b=ma(b,a.usingWasm?Aa:Sa);var e=a.buffer.byteLength;if(a.usingWasm)try{c=-1!==a.wasmMemory.grow((b-e)/65536)?a.buffer=a.wasmMemory.buffer:null;break a}catch(Jd){c=null;break a}c=void 0}return c};var m="";a.asm=function(b,e,d){if(!e.table){var l=a.wasmTableSize;void 0===l&&(l=1024);var f=a.wasmMaxTableSize;e.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==f?new WebAssembly.Table({initial:l,maximum:f,element:"anyfunc"}):new WebAssembly.Table({initial:l, +element:"anyfunc"}):Array(l);a.wasmTable=e.table}e.memoryBase||(e.memoryBase=a.STATIC_BASE);e.tableBase||(e.tableBase=0);(b=c(b,e,d))||W("no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods");return b}})();Ia=m.GLOBAL_BASE;aa=Ia+19104;Wa.push();V=null;a.STATIC_BASE=Ia;a.STATIC_BUMP=19104;var Eb=aa;aa+=16;var A={last:0,caught:[],infos:{},deAdjust:function(a){if(!a||A.infos[a])return a; +for(var b in A.infos)if(A.infos[b].adjusted===a)return b;return a},addRef:function(a){a&&A.infos[a].refcount++},decRef:function(e){if(e){var b=A.infos[e];f(0<b.refcount);b.refcount--;0!==b.refcount||b.rethrown||(b.destructor&&a.dynCall_vi(b.destructor,e),delete A.infos[e],___cxa_free_exception(e))}},clearRef:function(a){a&&(A.infos[a].refcount=0)}},v={varargs:0,get:function(a){v.varargs+=4;return x[v.varargs-4>>2]},getStr:function(){return n(v.get())},get64:function(){var a=v.get(),b=v.get();0<=a? +f(0===b):f(-1===b);return a},getZero:function(){f(0===v.get())}},ya={},La=1;db.push(function(){var e=a._fflush;e&&e(0);if(e=Q.printChar){var b=Q.buffers;b[1].length&&e(1,10);b[2].length&&e(2,10)}});ba=m.staticAlloc(4);Ga=U=m.alignMemory(aa);xa=Ga+Ka;Ha=m.alignMemory(xa);x[ba>>2]=Ha;a.wasmTableSize=492;a.wasmMaxTableSize=492;a.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array, +Float64Array:Float64Array,NaN:NaN,Infinity:Infinity,byteLength:Ja};a.asmLibraryArg={abort:W,assert:f,enlargeMemory:Ma,getTotalMemory:function(){return y},abortOnCannotGrowMemory:function(){W("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+y+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}, +invoke_ii:function(e,b){try{return a.dynCall_ii(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_iii:function(e,b,c){try{return a.dynCall_iii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_iiii:function(e,b,c,d){try{return a.dynCall_iiii(e,b,c,d)}catch(E){if("number"!==typeof E&&"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_iiiiiii:function(e,b,c,d,f,g,h){try{return a.dynCall_iiiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!== +typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},invoke_v:function(e){try{a.dynCall_v(e)}catch(b){if("number"!==typeof b&&"longjmp"!==b)throw b;a.setThrew(1,0)}},invoke_vi:function(e,b){try{a.dynCall_vi(e,b)}catch(c){if("number"!==typeof c&&"longjmp"!==c)throw c;a.setThrew(1,0)}},invoke_vii:function(e,b,c){try{a.dynCall_vii(e,b,c)}catch(l){if("number"!==typeof l&&"longjmp"!==l)throw l;a.setThrew(1,0)}},invoke_viii:function(e,b,c,d){try{a.dynCall_viii(e,b,c,d)}catch(E){if("number"!==typeof E&& +"longjmp"!==E)throw E;a.setThrew(1,0)}},invoke_viiii:function(e,b,c,d,f){try{a.dynCall_viiii(e,b,c,d,f)}catch(ta){if("number"!==typeof ta&&"longjmp"!==ta)throw ta;a.setThrew(1,0)}},invoke_viiiii:function(e,b,c,d,f,g){try{a.dynCall_viiiii(e,b,c,d,f,g)}catch(ia){if("number"!==typeof ia&&"longjmp"!==ia)throw ia;a.setThrew(1,0)}},invoke_viiiiii:function(e,b,c,d,f,g,h){try{a.dynCall_viiiiii(e,b,c,d,f,g,h)}catch(ja){if("number"!==typeof ja&&"longjmp"!==ja)throw ja;a.setThrew(1,0)}},__ZSt18uncaught_exceptionv:na, +___cxa_allocate_exception:function(a){return Ta(a)},___cxa_begin_catch:function(a){var b=A.infos[a];b&&!b.caught&&(b.caught=!0,na.uncaught_exception--);b&&(b.rethrown=!1);A.caught.push(a);A.addRef(A.deAdjust(a));return a},___cxa_find_matching_catch:qa,___cxa_pure_virtual:function(){ua=!0;throw"Pure virtual function called!";},___cxa_throw:function(a,b,c){A.infos[a]={ptr:a,adjusted:a,type:b,destructor:c,refcount:0,caught:!1,rethrown:!1};A.last=a;"uncaught_exception"in na?na.uncaught_exception++:na.uncaught_exception= +1;throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___gxx_personality_v0:function(){},___resumeException:function(a){A.last||(A.last=a);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___setErrNo:function(e){a.___errno_location&&(x[a.___errno_location()>>2]=e);return e}, +___syscall140:function(a,b){v.varargs=b;try{var c=v.getStreamFromFD();v.get();var e=v.get(),d=v.get(),f=v.get();FS.llseek(c,e,f);x[d>>2]=c.position;c.getdents&&0===e&&0===f&&(c.getdents=null);return 0}catch(ia){return"undefined"!==typeof FS&&ia instanceof FS.ErrnoError||W(ia),-ia.errno}},___syscall146:Q,___syscall54:function(a,b){v.varargs=b;return 0},___syscall6:function(a,b){v.varargs=b;try{var c=v.getStreamFromFD();FS.close(c);return 0}catch(l){return"undefined"!==typeof FS&&l instanceof FS.ErrnoError|| +W(l),-l.errno}},_abort:function(){a.abort()},_emscripten_memcpy_big:function(a,b,c){T.set(T.subarray(b,b+c),a);return a},_pthread_getspecific:function(a){return ya[a]||0},_pthread_key_create:function(a,b){if(0==a)return 22;x[a>>2]=La;ya[La]=0;La++;return 0},_pthread_once:ra,_pthread_setspecific:function(a,b){if(!(a in ya))return 22;ya[a]=b;return 0},DYNAMICTOP_PTR:ba,tempDoublePtr:Eb,ABORT:ua,STACKTOP:U,STACK_MAX:xa};var eb=a.asm(a.asmGlobalArg,a.asmLibraryArg,F);a.asm=eb;a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null, +arguments)};a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)};var pb=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,arguments)},Fb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)}, +Gb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},Hb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,arguments)},sb=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null, +arguments)},Ib=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},Jb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,arguments)},Kb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null, +arguments)},Lb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)},Mb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm._emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,arguments)},rb=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return a.asm._emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null, +arguments)},Nb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm._emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Ob=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm._emscripten_bind_AttributeTransformData_transform_type_0.apply(null,arguments)},yb=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm._emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},Pb=a._emscripten_bind_DecoderBuffer_Init_2= +function(){return a.asm._emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},Qb=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm._emscripten_bind_DecoderBuffer___destroy___0.apply(null,arguments)},Rb=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null,arguments)},Sb=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm._emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null, +arguments)},zb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm._emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},Tb=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},Ub=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Vb=a._emscripten_bind_Decoder_GetAttributeFloat_3= +function(){return a.asm._emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Wb=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},Xb=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,arguments)},Yb=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeId_2.apply(null, +arguments)},Zb=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)},$b=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},ac=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)}, +bc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null,arguments)},cc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm._emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null,arguments)},dc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,arguments)},ec=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3= +function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},fc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},gc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return a.asm._emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},hc=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=function(){return a.asm._emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null, +arguments)},ic=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm._emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},jc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm._emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},kc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,arguments)},lc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm._emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null, +arguments)},mc=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm._emscripten_bind_Decoder___destroy___0.apply(null,arguments)},wb=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null,arguments)},nc=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},oc=a._emscripten_bind_DracoFloat32Array___destroy___0= +function(){return a.asm._emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},pc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm._emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},vb=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm._emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,arguments)},qc=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt16Array_GetValue_1.apply(null, +arguments)},rc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},sc=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},Bb=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm._emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,arguments)},tc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt32Array_GetValue_1.apply(null, +arguments)},uc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},vc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoInt32Array_size_0.apply(null,arguments)},tb=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm._emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,arguments)},wc=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoInt8Array_GetValue_1.apply(null, +arguments)},xc=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoInt8Array___destroy___0.apply(null,arguments)},yc=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},lb=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,arguments)},zc=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt16Array_GetValue_1.apply(null, +arguments)},Ac=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},Bc=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},ob=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,arguments)},Cc=a._emscripten_bind_DracoUInt32Array_GetValue_1= +function(){return a.asm._emscripten_bind_DracoUInt32Array_GetValue_1.apply(null,arguments)},Dc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},Ec=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},nb=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null, +arguments)},Fc=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm._emscripten_bind_DracoUInt8Array_GetValue_1.apply(null,arguments)},Gc=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm._emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},Hc=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm._emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},xb=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm._emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null, +arguments)},Ic=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm._emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},Ab=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm._emscripten_bind_Mesh_Mesh_0.apply(null,arguments)},Jc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm._emscripten_bind_Mesh___destroy___0.apply(null,arguments)},Kc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm._emscripten_bind_Mesh_num_attributes_0.apply(null, +arguments)},Lc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm._emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},Mc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm._emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Nc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},Oc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null, +arguments)},Pc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Qc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},Rc=a._emscripten_bind_MetadataQuerier_HasDoubleEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasDoubleEntry_2.apply(null,arguments)},Sc=a._emscripten_bind_MetadataQuerier_HasEntry_2= +function(){return a.asm._emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Tc=a._emscripten_bind_MetadataQuerier_HasIntEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasIntEntry_2.apply(null,arguments)},Uc=a._emscripten_bind_MetadataQuerier_HasStringEntry_2=function(){return a.asm._emscripten_bind_MetadataQuerier_HasStringEntry_2.apply(null,arguments)},ub=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm._emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null, +arguments)},Vc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm._emscripten_bind_MetadataQuerier_NumEntries_1.apply(null,arguments)},Wc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm._emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},Cb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm._emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Xc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm._emscripten_bind_Metadata___destroy___0.apply(null, +arguments)},Yc=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm._emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},qb=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return a.asm._emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Zc=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm._emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},$c=a._emscripten_bind_PointAttribute_attribute_type_0= +function(){return a.asm._emscripten_bind_PointAttribute_attribute_type_0.apply(null,arguments)},ad=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},bd=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm._emscripten_bind_PointAttribute_byte_stride_0.apply(null,arguments)},cd=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm._emscripten_bind_PointAttribute_data_type_0.apply(null, +arguments)},dd=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm._emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},ed=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm._emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},fd=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm._emscripten_bind_PointAttribute_size_0.apply(null,arguments)},gd=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm._emscripten_bind_PointAttribute_unique_id_0.apply(null, +arguments)},mb=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm._emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},hd=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm._emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},id=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm._emscripten_bind_PointCloud_num_attributes_0.apply(null,arguments)},jd=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm._emscripten_bind_PointCloud_num_points_0.apply(null, +arguments)},kd=a._emscripten_bind_Status___destroy___0=function(){return a.asm._emscripten_bind_Status___destroy___0.apply(null,arguments)},ld=a._emscripten_bind_Status_code_0=function(){return a.asm._emscripten_bind_Status_code_0.apply(null,arguments)},md=a._emscripten_bind_Status_error_msg_0=function(){return a.asm._emscripten_bind_Status_error_msg_0.apply(null,arguments)},nd=a._emscripten_bind_Status_ok_0=function(){return a.asm._emscripten_bind_Status_ok_0.apply(null,arguments)},od=a._emscripten_bind_VoidPtr___destroy___0= +function(){return a.asm._emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},pd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null,arguments)},qd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},rd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM= +function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null,arguments)},sd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},td=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null, +arguments)},ud=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},vd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},wd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},xd= +a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)},yd=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},zd=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},Ad=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION= +function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},Bd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},Cd=a._emscripten_enum_draco_StatusCode_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_ERROR.apply(null,arguments)},Dd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm._emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null, +arguments)},Ed=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm._emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},Fd=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm._emscripten_enum_draco_StatusCode_OK.apply(null,arguments)},Gd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},Hd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return a.asm._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null, +arguments)};a._emscripten_get_global_libc=function(){return a.asm._emscripten_get_global_libc.apply(null,arguments)};var Db=a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)};a._free=function(){return a.asm._free.apply(null,arguments)};a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)};var Ta=a._malloc=function(){return a.asm._malloc.apply(null,arguments)};a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)}; +a._memmove=function(){return a.asm._memmove.apply(null,arguments)};a._memset=function(){return a.asm._memset.apply(null,arguments)};a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)};a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)};a.getTempRet0=function(){return a.asm.getTempRet0.apply(null,arguments)};a.runPostSets=function(){return a.asm.runPostSets.apply(null,arguments)};a.setTempRet0=function(){return a.asm.setTempRet0.apply(null,arguments)}; +a.setThrew=function(){return a.asm.setThrew.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)}; +a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)};a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null, +arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};m.stackAlloc=a.stackAlloc;m.stackSave=a.stackSave;m.stackRestore=a.stackRestore;m.establishStackSpace=a.establishStackSpace;m.setTempRet0=a.setTempRet0;m.getTempRet0=a.getTempRet0;a.asm=eb;if(V)if("function"===typeof a.locateFile?V=a.locateFile(V):a.memoryInitializerPrefixURL&&(V=a.memoryInitializerPrefixURL+V),pa||wa){var Id=a.readBinary(V);T.set(Id,m.GLOBAL_BASE)}else{var gb=function(){a.readAsync(V,fb, +function(){throw"could not load memory initializer "+V;})};la("memory initializer");var fb=function(d){d.byteLength&&(d=new Uint8Array(d));T.set(d,m.GLOBAL_BASE);a.memoryInitializerRequest&&delete a.memoryInitializerRequest.response;Na("memory initializer")};if(a.memoryInitializerRequest){var hb=function(){var d=a.memoryInitializerRequest,b=d.response;200!==d.status&&0!==d.status?(console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+d.status+", retrying "+ +V),gb()):fb(b)};a.memoryInitializerRequest.response?setTimeout(hb,0):a.memoryInitializerRequest.addEventListener("load",hb)}else gb()}a.then=function(d){if(a.calledRun)d(a);else{var b=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){b&&b();d(a)}}return a};ea.prototype=Error();ea.prototype.constructor=ea;var Za=null;sa=function b(){a.calledRun||Da();a.calledRun||(sa=b)};a.run=Da;a.exit=function(b,c){if(!c||!a.noExitRuntime){if(!a.noExitRuntime&&(ua=!0,U=void 0,u(db),a.onExit))a.onExit(b);pa&& +process.exit(b);a.quit(b,new ea(b))}};var ab=[];a.abort=W;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();Da();p.prototype=Object.create(p.prototype);p.prototype.constructor=p;p.prototype.__class__=p;p.__cache__={};a.WrapperObject=p;a.getCache=t;a.wrapPointer=X;a.castObject=function(a,c){return X(a.ptr,c)};a.NULL=X(0);a.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__(); +delete t(a.__class__)[a.ptr]};a.compare=function(a,c){return a.ptr===c.ptr};a.getPointer=function(a){return a.ptr};a.getClass=function(a){return a.__class__};var k={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(k.needed){for(var b=0;b<k.temps.length;b++)a._free(k.temps[b]);k.temps.length=0;a._free(k.buffer);k.buffer=0;k.size+=k.needed;k.needed=0}k.buffer||(k.size+=128,k.buffer=a._malloc(k.size),f(k.buffer));k.pos=0},alloc:function(b,c){f(k.buffer);b=b.length*c.BYTES_PER_ELEMENT;b= +b+7&-8;k.pos+b>=k.size?(f(0<b),k.needed+=b,c=a._malloc(b),k.temps.push(c)):(c=k.buffer+k.pos,k.pos+=b);return c},copy:function(a,c,d){switch(c.BYTES_PER_ELEMENT){case 2:d>>=1;break;case 4:d>>=2;break;case 8:d>>=3}for(var b=0;b<a.length;b++)c[d+b]=a[b]}};B.prototype=Object.create(p.prototype);B.prototype.constructor=B;B.prototype.__class__=B;B.__cache__={};a.Status=B;B.prototype.code=B.prototype.code=function(){return ld(this.ptr)};B.prototype.ok=B.prototype.ok=function(){return!!nd(this.ptr)};B.prototype.error_msg= +B.prototype.error_msg=function(){return n(md(this.ptr))};B.prototype.__destroy__=B.prototype.__destroy__=function(){kd(this.ptr)};G.prototype=Object.create(p.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.DracoUInt16Array=G;G.prototype.GetValue=G.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return zc(b,a)};G.prototype.size=G.prototype.size=function(){return Bc(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){Ac(this.ptr)}; +H.prototype=Object.create(p.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.PointCloud=H;H.prototype.num_attributes=H.prototype.num_attributes=function(){return id(this.ptr)};H.prototype.num_points=H.prototype.num_points=function(){return jd(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){hd(this.ptr)};I.prototype=Object.create(p.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoUInt8Array=I;I.prototype.GetValue= +I.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Fc(b,a)};I.prototype.size=I.prototype.size=function(){return Hc(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Gc(this.ptr)};J.prototype=Object.create(p.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoUInt32Array=J;J.prototype.GetValue=J.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Cc(b,a)};J.prototype.size=J.prototype.size= +function(){return Ec(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Dc(this.ptr)};K.prototype=Object.create(p.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.AttributeOctahedronTransform=K;K.prototype.InitFromAttribute=K.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Fb(b,a)};K.prototype.quantization_bits=K.prototype.quantization_bits=function(){return Hb(this.ptr)};K.prototype.__destroy__=K.prototype.__destroy__= +function(){Gb(this.ptr)};q.prototype=Object.create(p.prototype);q.prototype.constructor=q;q.prototype.__class__=q;q.__cache__={};a.PointAttribute=q;q.prototype.size=q.prototype.size=function(){return fd(this.ptr)};q.prototype.GetAttributeTransformData=q.prototype.GetAttributeTransformData=function(){return X(Yc(this.ptr),P)};q.prototype.attribute_type=q.prototype.attribute_type=function(){return $c(this.ptr)};q.prototype.data_type=q.prototype.data_type=function(){return cd(this.ptr)};q.prototype.num_components= +q.prototype.num_components=function(){return ed(this.ptr)};q.prototype.normalized=q.prototype.normalized=function(){return!!dd(this.ptr)};q.prototype.byte_stride=q.prototype.byte_stride=function(){return bd(this.ptr)};q.prototype.byte_offset=q.prototype.byte_offset=function(){return ad(this.ptr)};q.prototype.unique_id=q.prototype.unique_id=function(){return gd(this.ptr)};q.prototype.__destroy__=q.prototype.__destroy__=function(){Zc(this.ptr)};P.prototype=Object.create(p.prototype);P.prototype.constructor= +P;P.prototype.__class__=P;P.__cache__={};a.AttributeTransformData=P;P.prototype.transform_type=P.prototype.transform_type=function(){return Ob(this.ptr)};P.prototype.__destroy__=P.prototype.__destroy__=function(){Nb(this.ptr)};z.prototype=Object.create(p.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.AttributeQuantizationTransform=z;z.prototype.InitFromAttribute=z.prototype.InitFromAttribute=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return!!Ib(b,a)}; +z.prototype.quantization_bits=z.prototype.quantization_bits=function(){return Lb(this.ptr)};z.prototype.min_value=z.prototype.min_value=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Kb(b,a)};z.prototype.range=z.prototype.range=function(){return Mb(this.ptr)};z.prototype.__destroy__=z.prototype.__destroy__=function(){Jb(this.ptr)};L.prototype=Object.create(p.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt8Array=L;L.prototype.GetValue=L.prototype.GetValue= +function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return wc(b,a)};L.prototype.size=L.prototype.size=function(){return yc(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){xc(this.ptr)};r.prototype=Object.create(p.prototype);r.prototype.constructor=r;r.prototype.__class__=r;r.__cache__={};a.MetadataQuerier=r;r.prototype.HasEntry=r.prototype.HasEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Sc(b, +a,c)};r.prototype.HasIntEntry=r.prototype.HasIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Tc(b,a,c)};r.prototype.GetIntEntry=r.prototype.GetIntEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Pc(b,a,c)};r.prototype.HasDoubleEntry=r.prototype.HasDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"=== +typeof c?c.ptr:Y(c);return!!Rc(b,a,c)};r.prototype.GetDoubleEntry=r.prototype.GetDoubleEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Nc(b,a,c)};r.prototype.HasStringEntry=r.prototype.HasStringEntry=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return!!Uc(b,a,c)};r.prototype.GetStringEntry=r.prototype.GetStringEntry=function(a,c){var b=this.ptr;k.prepare(); +a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return n(Qc(b,a,c))};r.prototype.NumEntries=r.prototype.NumEntries=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return Vc(b,a)};r.prototype.GetEntryName=r.prototype.GetEntryName=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return n(Oc(b,a,c))};r.prototype.__destroy__=r.prototype.__destroy__=function(){Wc(this.ptr)};M.prototype=Object.create(p.prototype);M.prototype.constructor= +M;M.prototype.__class__=M;M.__cache__={};a.DracoInt16Array=M;M.prototype.GetValue=M.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return qc(b,a)};M.prototype.size=M.prototype.size=function(){return sc(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){rc(this.ptr)};N.prototype=Object.create(p.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoFloat32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(a){var b= +this.ptr;a&&"object"===typeof a&&(a=a.ptr);return nc(b,a)};N.prototype.size=N.prototype.size=function(){return pc(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){oc(this.ptr)};Z.prototype=Object.create(p.prototype);Z.prototype.constructor=Z;Z.prototype.__class__=Z;Z.__cache__={};a.GeometryAttribute=Z;Z.prototype.__destroy__=Z.prototype.__destroy__=function(){Ic(this.ptr)};R.prototype=Object.create(p.prototype);R.prototype.constructor=R;R.prototype.__class__=R;R.__cache__={}; +a.DecoderBuffer=R;R.prototype.Init=R.prototype.Init=function(a,c){var b=this.ptr;k.prepare();if("object"==typeof a&&"object"===typeof a){var d=k.alloc(a,fa);k.copy(a,fa,d);a=d}c&&"object"===typeof c&&(c=c.ptr);Pb(b,a,c)};R.prototype.__destroy__=R.prototype.__destroy__=function(){Qb(this.ptr)};h.prototype=Object.create(p.prototype);h.prototype.constructor=h;h.prototype.__class__=h;h.__cache__={};a.Decoder=h;h.prototype.GetEncodedGeometryType=h.prototype.GetEncodedGeometryType=function(a){var b=this.ptr; +a&&"object"===typeof a&&(a=a.ptr);return hc(b,a)};h.prototype.DecodeBufferToPointCloud=h.prototype.DecodeBufferToPointCloud=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Sb(b,a,c),B)};h.prototype.DecodeBufferToMesh=h.prototype.DecodeBufferToMesh=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Rb(b,a,c),B)};h.prototype.GetAttributeId=h.prototype.GetAttributeId=function(a,c){var b=this.ptr; +a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return Yb(b,a,c)};h.prototype.GetAttributeIdByName=h.prototype.GetAttributeIdByName=function(a,c){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);return Xb(b,a,c)};h.prototype.GetAttributeIdByMetadataEntry=h.prototype.GetAttributeIdByMetadataEntry=function(a,c,d){var b=this.ptr;k.prepare();a&&"object"===typeof a&&(a=a.ptr);c=c&&"object"===typeof c?c.ptr:Y(c);d=d&&"object"===typeof d? +d.ptr:Y(d);return Wb(b,a,c,d)};h.prototype.GetAttribute=h.prototype.GetAttribute=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(gc(b,a,c),q)};h.prototype.GetAttributeByUniqueId=h.prototype.GetAttributeByUniqueId=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(Tb(b,a,c),q)};h.prototype.GetMetadata=h.prototype.GetMetadata=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return X(jc(b, +a),S)};h.prototype.GetAttributeMetadata=h.prototype.GetAttributeMetadata=function(a,c){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return X(cc(b,a,c),S)};h.prototype.GetFaceFromMesh=h.prototype.GetFaceFromMesh=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ic(b,a,c,d)};h.prototype.GetTriangleStripsFromMesh=h.prototype.GetTriangleStripsFromMesh=function(a,c){var b=this.ptr; +a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);return kc(b,a,c)};h.prototype.GetAttributeFloat=h.prototype.GetAttributeFloat=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Vb(b,a,c,d)};h.prototype.GetAttributeFloatForAllPoints=h.prototype.GetAttributeFloatForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&& +(d=d.ptr);return!!Ub(b,a,c,d)};h.prototype.GetAttributeIntForAllPoints=h.prototype.GetAttributeIntForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!bc(b,a,c,d)};h.prototype.GetAttributeInt8ForAllPoints=h.prototype.GetAttributeInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ac(b,a,c,d)}; +h.prototype.GetAttributeUInt8ForAllPoints=h.prototype.GetAttributeUInt8ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!fc(b,a,c,d)};h.prototype.GetAttributeInt16ForAllPoints=h.prototype.GetAttributeInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Zb(b,a,c,d)};h.prototype.GetAttributeUInt16ForAllPoints= +h.prototype.GetAttributeUInt16ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!dc(b,a,c,d)};h.prototype.GetAttributeInt32ForAllPoints=h.prototype.GetAttributeInt32ForAllPoints=function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!$b(b,a,c,d)};h.prototype.GetAttributeUInt32ForAllPoints=h.prototype.GetAttributeUInt32ForAllPoints= +function(a,c,d){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!ec(b,a,c,d)};h.prototype.SkipAttributeTransform=h.prototype.SkipAttributeTransform=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);lc(b,a)};h.prototype.__destroy__=h.prototype.__destroy__=function(){mc(this.ptr)};C.prototype=Object.create(p.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Mesh=C;C.prototype.num_faces= +C.prototype.num_faces=function(){return Lc(this.ptr)};C.prototype.num_attributes=C.prototype.num_attributes=function(){return Kc(this.ptr)};C.prototype.num_points=C.prototype.num_points=function(){return Mc(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){Jc(this.ptr)};ca.prototype=Object.create(p.prototype);ca.prototype.constructor=ca;ca.prototype.__class__=ca;ca.__cache__={};a.VoidPtr=ca;ca.prototype.__destroy__=ca.prototype.__destroy__=function(){od(this.ptr)};O.prototype= +Object.create(p.prototype);O.prototype.constructor=O;O.prototype.__class__=O;O.__cache__={};a.DracoInt32Array=O;O.prototype.GetValue=O.prototype.GetValue=function(a){var b=this.ptr;a&&"object"===typeof a&&(a=a.ptr);return tc(b,a)};O.prototype.size=O.prototype.size=function(){return vc(this.ptr)};O.prototype.__destroy__=O.prototype.__destroy__=function(){uc(this.ptr)};S.prototype=Object.create(p.prototype);S.prototype.constructor=S;S.prototype.__class__=S;S.__cache__={};a.Metadata=S;S.prototype.__destroy__= +S.prototype.__destroy__=function(){Xc(this.ptr)};(function(){function b(){a.OK=Fd();a.ERROR=Cd();a.IO_ERROR=Ed();a.INVALID_PARAMETER=Dd();a.UNSUPPORTED_VERSION=Hd();a.UNKNOWN_VERSION=Gd();a.INVALID_GEOMETRY_TYPE=td();a.POINT_CLOUD=ud();a.TRIANGULAR_MESH=vd();a.ATTRIBUTE_INVALID_TRANSFORM=pd();a.ATTRIBUTE_NO_TRANSFORM=qd();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=sd();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=rd();a.INVALID=yd();a.POSITION=Ad();a.NORMAL=zd();a.COLOR=wd();a.TEX_COORD=Bd();a.GENERIC=xd()}a.calledRun? +b():Xa.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();return d};"object"===typeof module&&module.exports&&(module.exports=DracoDecoderModule); diff --git a/public/lib/Cesium/ThirdParty/Workers/inflate.js b/public/lib/Cesium/ThirdParty/Workers/inflate.js new file mode 100644 index 0000000..cf89312 --- /dev/null +++ b/public/lib/Cesium/ThirdParty/Workers/inflate.js @@ -0,0 +1 @@ +!function(t){var L=0,P=1,j=-2,q=-3,u=-4,B=-5,C=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],F=1440,a=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],r=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],x=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],c=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],v=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],D=15;function G(){var s,f,E,S,U,z;function o(i,t,e,n,a,r,_,l,d,s,f){for(var o,b,u,x,w,c,v,h,k,m,y,g,p,A=0,I=e;E[i[t+A]]++,A++,I--,0!==I;);if(E[0]==e)return _[0]=-1,l[0]=0,L;for(v=l[0],w=1;w<=D&&0===E[w];w++);for(v<(c=w)&&(v=w),I=D;0!==I&&0===E[I];I--);for((u=I)<v&&(v=I),l[0]=v,g=1<<w;w<I;w++,g<<=1)if((g-=E[w])<0)return q;if((g-=E[I])<0)return q;for(E[I]+=g,z[1]=w=0,A=1,y=2;0!=--I;)z[y]=w+=E[A],y++,A++;for(I=0,A=0;0!==(w=i[t+A])&&(f[z[w]++]=I),A++,++I<e;);for(e=z[u],z[0]=I=0,x=-1,m=-v,p=k=U[A=0]=0;c<=u;c++)for(o=E[c];0!=o--;){for(;m+v<c;){if(x++,m+=v,p=u-m,p=v<p?v:p,(b=1<<(w=c-m))>o+1&&(b-=o+1,y=c,w<p))for(;++w<p&&!((b<<=1)<=E[++y]);)b-=E[y];if(p=1<<w,s[0]+p>F)return q;U[x]=k=s[0],s[0]+=p,0!==x?(z[x]=I,S[0]=w,w=I>>>m-(S[1]=v),S[2]=k-U[x-1]-w,d.set(S,3*(U[x-1]+w))):_[0]=k}for(S[1]=c-m,e<=A?S[0]=192:f[A]<n?(S[0]=f[A]<256?0:96,S[2]=f[A++]):(S[0]=r[f[A]-n]+16+64,S[2]=a[f[A++]-n]),b=1<<c-m,w=I>>>m;w<p;w+=b)d.set(S,3*(k+w));for(w=1<<c-1;0!=(I&w);w>>>=1)I^=w;for(I^=w,h=(1<<m)-1;(I&h)!=z[x];)x--,h=(1<<(m-=v))-1}return 0!==g&&1!=u?B:L}function b(i){var t;for(s||(s=[],f=[],E=new Int32Array(D+1),S=[],U=new Int32Array(D),z=new Int32Array(D+1)),f.length<i&&(f=[]),t=0;t<i;t++)f[t]=0;for(t=0;t<D+1;t++)E[t]=0;for(t=0;t<3;t++)S[t]=0;U.set(E.subarray(0,D),0),z.set(E.subarray(0,D+1),0)}this.inflate_trees_bits=function(i,t,e,n,a){return b(19),(n=o(i,s[0]=0,19,19,null,null,e,t,n,s,f))==q?a.msg="oversubscribed dynamic bit lengths tree":n!=B&&0!==t[0]||(a.msg="incomplete dynamic bit lengths tree",n=q),n},this.inflate_trees_dynamic=function(i,t,e,n,a,r,_,l,d){return b(288),(r=o(e,s[0]=0,i,257,x,w,r,n,l,s,f))!=L||0===n[0]?(r==q?d.msg="oversubscribed literal/length tree":r!=u&&(d.msg="incomplete literal/length tree",r=q),r):(b(288),(r=o(e,i,t,0,c,v,_,a,l,s,f))!=L||0===a[0]&&257<i?(r==q?d.msg="oversubscribed distance tree":r==B?(d.msg="incomplete distance tree",r=q):r!=u&&(d.msg="empty distance tree with lengths",r=q),r):L)}}G.inflate_trees_fixed=function(i,t,e,n){return i[0]=9,t[0]=5,e[0]=a,n[0]=r,L};var S=0,U=1,z=2,M=3,H=4,J=5,K=6,N=7,O=8,Q=9;function e(){var u,x,w,c,v=0,h=0,k=0,m=0,y=0,g=0,p=0,A=0,I=0,E=0;this.init=function(i,t,e,n,a,r){u=S,p=i,A=t,w=e,I=n,c=a,E=r,x=null},this.proc=function(i,t,e){for(var n,a,r,_,l=0,d=0,s=0,s=t.next_in_index,f=t.avail_in,l=i.bitb,d=i.bitk,o=i.write,b=o<i.read?i.read-o-1:i.end-o;;)switch(u){case S:if(258<=b&&10<=f&&(i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,e=function(i,t,e,n,a,r,_,l){var d,s,f,o,b,u,x,w,c=l.next_in_index,v=l.avail_in,h=_.bitb,k=_.bitk,m=_.write,y=m<_.read?_.read-m-1:_.end-m,g=C[i],p=C[t];do{for(;k<20;)v--,h|=(255&l.read_byte(c++))<<k,k+=8;if(0!==(o=(s=e)[w=3*((f=n)+(d=h&g))]))for(;;){if(h>>=s[w+1],k-=s[w+1],0!=(16&o)){for(o&=15,b=s[w+2]+(h&C[o]),h>>=o,k-=o;k<15;)v--,h|=(255&l.read_byte(c++))<<k,k+=8;for(d=h&p,s=a,f=r,w=3*(f+d),o=s[w];;){if(h>>=s[w+1],k-=s[w+1],0!=(16&o)){for(o&=15;k<o;)v--,h|=(255&l.read_byte(c++))<<k,k+=8;if(u=s[w+2]+(h&C[o]),h>>=o,k-=o,y-=b,u<=m)0<m-(x=m-u)&&m-x<2?(_.window[m++]=_.window[x++],_.window[m++]=_.window[x++]):(_.window.set(_.window.subarray(x,x+2),m),m+=2,x+=2),b-=2;else{for(x=m-u;x+=_.end,x<0;);if((o=_.end-x)<b){if(b-=o,0<m-x&&m-x<o)for(;_.window[m++]=_.window[x++],0!=--o;);else _.window.set(_.window.subarray(x,x+o),m),m+=o,x+=o,o=0;x=0}}if(0<m-x&&m-x<b)for(;_.window[m++]=_.window[x++],0!=--b;);else _.window.set(_.window.subarray(x,x+b),m),m+=b,x+=b,b=0;break}if(0!=(64&o))return l.msg="invalid distance code",v+=b=k>>3<(b=l.avail_in-v)?k>>3:b,c-=b,k-=b<<3,_.bitb=h,_.bitk=k,l.avail_in=v,l.total_in+=c-l.next_in_index,l.next_in_index=c,_.write=m,q;d+=s[w+2],o=s[w=3*(f+(d+=h&C[o]))]}break}if(0!=(64&o))return 0!=(32&o)?(v+=b=k>>3<(b=l.avail_in-v)?k>>3:b,c-=b,k-=b<<3,_.bitb=h,_.bitk=k,l.avail_in=v,l.total_in+=c-l.next_in_index,l.next_in_index=c,_.write=m,P):(l.msg="invalid literal/length code",v+=b=k>>3<(b=l.avail_in-v)?k>>3:b,c-=b,k-=b<<3,_.bitb=h,_.bitk=k,l.avail_in=v,l.total_in+=c-l.next_in_index,l.next_in_index=c,_.write=m,q);if(d+=s[w+2],0===(o=s[w=3*(f+(d+=h&C[o]))])){h>>=s[w+1],k-=s[w+1],_.window[m++]=s[w+2],y--;break}}else h>>=s[w+1],k-=s[w+1],_.window[m++]=s[w+2],y--}while(258<=y&&10<=v);return v+=b=k>>3<(b=l.avail_in-v)?k>>3:b,c-=b,k-=b<<3,_.bitb=h,_.bitk=k,l.avail_in=v,l.total_in+=c-l.next_in_index,l.next_in_index=c,_.write=m,L}(p,A,w,I,c,E,i,t),s=t.next_in_index,f=t.avail_in,l=i.bitb,d=i.bitk,b=(o=i.write)<i.read?i.read-o-1:i.end-o,e!=L)){u=e==P?N:Q;break}k=p,x=w,h=I,u=U;case U:for(n=k;d<n;){if(0===f)return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);e=L,f--,l|=(255&t.read_byte(s++))<<d,d+=8}if(a=3*(h+(l&C[n])),l>>>=x[a+1],d-=x[a+1],0===(r=x[a])){m=x[a+2],u=K;break}if(0!=(16&r)){y=15&r,v=x[a+2],u=z;break}if(0==(64&r)){k=r,h=a/3+x[a+2];break}if(0==(32&r))return u=Q,t.msg="invalid literal/length code",e=q,i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);u=N;break;case z:for(n=y;d<n;){if(0===f)return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);e=L,f--,l|=(255&t.read_byte(s++))<<d,d+=8}v+=l&C[n],l>>=n,d-=n,k=A,x=c,h=E,u=M;case M:for(n=k;d<n;){if(0===f)return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);e=L,f--,l|=(255&t.read_byte(s++))<<d,d+=8}if(a=3*(h+(l&C[n])),l>>=x[a+1],d-=x[a+1],0!=(16&(r=x[a]))){y=15&r,g=x[a+2],u=H;break}if(0!=(64&r))return u=Q,t.msg="invalid distance code",e=q,i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);k=r,h=a/3+x[a+2];break;case H:for(n=y;d<n;){if(0===f)return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);e=L,f--,l|=(255&t.read_byte(s++))<<d,d+=8}g+=l&C[n],l>>=n,d-=n,u=J;case J:for(_=o-g;_<0;)_+=i.end;for(;0!==v;){if(0===b&&(o==i.end&&0!==i.read&&(b=(o=0)<i.read?i.read-o-1:i.end-o),0===b&&(i.write=o,e=i.inflate_flush(t,e),b=(o=i.write)<i.read?i.read-o-1:i.end-o,0===(b=o==i.end&&0!==i.read?(o=0)<i.read?i.read-o-1:i.end-o:b))))return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);i.window[o++]=i.window[_++],b--,_==i.end&&(_=0),v--}u=S;break;case K:if(0===b&&(o==i.end&&0!==i.read&&(b=(o=0)<i.read?i.read-o-1:i.end-o),0===b&&(i.write=o,e=i.inflate_flush(t,e),b=(o=i.write)<i.read?i.read-o-1:i.end-o,0===(b=o==i.end&&0!==i.read?(o=0)<i.read?i.read-o-1:i.end-o:b))))return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);e=L,i.window[o++]=m,b--,u=S;break;case N:if(7<d&&(d-=8,f++,s--),i.write=o,e=i.inflate_flush(t,e),b=(o=i.write)<i.read?i.read-o-1:i.end-o,i.read!=i.write)return i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);u=O;case O:return e=P,i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);case Q:return e=q,i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e);default:return e=j,i.bitb=l,i.bitk=d,t.avail_in=f,t.total_in+=s-t.next_in_index,t.next_in_index=s,i.write=o,i.inflate_flush(t,e)}},this.free=function(){}}var R=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],T=0,V=1,W=2,X=3,Y=4,Z=5,$=6,ii=7,ti=8,ei=9;function n(i,t){var m,y=this,g=T,p=0,A=0,I=0,E=[0],S=[0],U=new e,z=0,D=new Int32Array(3*F),M=new G;y.bitk=0,y.bitb=0,y.window=new Uint8Array(t),y.end=t,y.read=0,y.write=0,y.reset=function(i,t){t&&(t[0]=0),g==$&&U.free(i),g=T,y.bitk=0,y.bitb=0,y.read=y.write=0},y.reset(i,null),y.inflate_flush=function(i,t){var e=i.next_out_index,n=y.read,a=(n<=y.write?y.write:y.end)-n;return 0!==(a=a>i.avail_out?i.avail_out:a)&&t==B&&(t=L),i.avail_out-=a,i.total_out+=a,i.next_out.set(y.window.subarray(n,n+a),e),e+=a,(n+=a)==y.end&&(n=0,y.write==y.end&&(y.write=0),0!==(a=(a=y.write-n)>i.avail_out?i.avail_out:a)&&t==B&&(t=L),i.avail_out-=a,i.total_out+=a,i.next_out.set(y.window.subarray(n,n+a),e),e+=a,n+=a),i.next_out_index=e,y.read=n,t},y.proc=function(i,t){for(var e,n=i.next_in_index,a=i.avail_in,r=y.bitb,_=y.bitk,l=y.write,d=l<y.read?y.read-l-1:y.end-l;;)switch(g){case T:for(;_<3;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}switch(z=1&(w=7&r),w>>>1){case 0:r>>>=3,r>>>=w=7&(_-=3),_-=w,g=V;break;case 1:var s=[],f=[],o=[[]],b=[[]];G.inflate_trees_fixed(s,f,o,b),U.init(s[0],f[0],o[0],0,b[0],0),r>>>=3,_-=3,g=$;break;case 2:r>>>=3,_-=3,g=X;break;case 3:return r>>>=3,_-=3,g=ei,i.msg="invalid block type",t=q,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t)}break;case V:for(;_<32;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}if((~r>>>16&65535)!=(65535&r))return g=ei,i.msg="invalid stored block lengths",t=q,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);p=65535&r,r=_=0,g=0!==p?W:0!==z?ii:T;break;case W:if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);if(0===d&&(l==y.end&&0!==y.read&&(d=(l=0)<y.read?y.read-l-1:y.end-l),0===d&&(y.write=l,t=y.inflate_flush(i,t),d=(l=y.write)<y.read?y.read-l-1:y.end-l,0===(d=l==y.end&&0!==y.read?(l=0)<y.read?y.read-l-1:y.end-l:d))))return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);if(t=L,d<(w=a<(w=p)?a:w)&&(w=d),y.window.set(i.read_buf(n,w),l),n+=w,a-=w,l+=w,d-=w,0!=(p-=w))break;g=0!==z?ii:T;break;case X:for(;_<14;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}if(A=w=16383&r,29<(31&w)||29<(w>>5&31))return g=ei,i.msg="too many length or distance symbols",t=q,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);if(w=258+(31&w)+(w>>5&31),!m||m.length<w)m=[];else for(e=0;e<w;e++)m[e]=0;r>>>=14,_-=14,I=0,g=Y;case Y:for(;I<4+(A>>>10);){for(;_<3;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}m[R[I++]]=7&r,r>>>=3,_-=3}for(;I<19;)m[R[I++]]=0;if(E[0]=7,(w=M.inflate_trees_bits(m,E,S,D,i))!=L)return(t=w)==q&&(m=null,g=ei),y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);I=0,g=Z;case Z:for(;I<258+(31&(w=A))+(w>>5&31);){for(var u,x,w=E[0];_<w;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}if(w=D[3*(S[0]+(r&C[w]))+1],(x=D[3*(S[0]+(r&C[w]))+2])<16)r>>>=w,_-=w,m[I++]=x;else{for(e=18==x?7:x-14,u=18==x?11:3;_<w+e;){if(0===a)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);t=L,a--,r|=(255&i.read_byte(n++))<<_,_+=8}if(_-=w,u+=(r>>>=w)&C[e],r>>>=e,_-=e,258+(31&(w=A))+(w>>5&31)<(e=I)+u||16==x&&e<1)return m=null,g=ei,i.msg="invalid bit length repeat",t=q,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);for(x=16==x?m[e-1]:0;m[e++]=x,0!=--u;);I=e}}S[0]=-1;var c=[],v=[],h=[],k=[];if(c[0]=9,v[0]=6,w=A,(w=M.inflate_trees_dynamic(257+(31&w),1+(w>>5&31),m,c,v,h,k,D,i))!=L)return w==q&&(m=null,g=ei),t=w,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);U.init(c[0],v[0],D,h[0],D,k[0]),g=$;case $:if(y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,(t=U.proc(y,i,t))!=P)return y.inflate_flush(i,t);if(t=L,U.free(i),n=i.next_in_index,a=i.avail_in,r=y.bitb,_=y.bitk,d=(l=y.write)<y.read?y.read-l-1:y.end-l,0===z){g=T;break}g=ii;case ii:if(y.write=l,t=y.inflate_flush(i,t),d=(l=y.write)<y.read?y.read-l-1:y.end-l,y.read!=y.write)return y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);g=ti;case ti:return t=P,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);case ei:return t=q,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t);default:return t=j,y.bitb=r,y.bitk=_,i.avail_in=a,i.total_in+=n-i.next_in_index,i.next_in_index=n,y.write=l,y.inflate_flush(i,t)}},y.free=function(i){y.reset(i,null),y.window=null,D=null},y.set_dictionary=function(i,t,e){y.window.set(i.subarray(t,t+e),0),y.read=y.write=e},y.sync_point=function(){return g==V?1:0}}var _,l=[0,0,255,255];function d(){var e=this;function _(i){return i&&i.istate?(i.total_in=i.total_out=0,i.msg=null,i.istate.mode=7,i.istate.blocks.reset(i,null),L):j}e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0,e.inflateEnd=function(i){return e.blocks&&e.blocks.free(i),e.blocks=null,L},e.inflateInit=function(i,t){return i.msg=null,e.blocks=null,t<8||15<t?(e.inflateEnd(i),j):(e.wbits=t,i.istate.blocks=new n(i,1<<t),_(i),L)},e.inflate=function(i,t){var e,n;if(!i||!i.istate||!i.next_in)return j;for(t=4==t?B:L,e=B;;)switch(i.istate.mode){case 0:if(0===i.avail_in)return e;if(e=t,i.avail_in--,i.total_in++,8!=(15&(i.istate.method=i.read_byte(i.next_in_index++)))){i.istate.mode=13,i.msg="unknown compression method",i.istate.marker=5;break}if(8+(i.istate.method>>4)>i.istate.wbits){i.istate.mode=13,i.msg="invalid window size",i.istate.marker=5;break}i.istate.mode=1;case 1:if(0===i.avail_in)return e;if(e=t,i.avail_in--,i.total_in++,n=255&i.read_byte(i.next_in_index++),((i.istate.method<<8)+n)%31!=0){i.istate.mode=13,i.msg="incorrect header check",i.istate.marker=5;break}if(0==(32&n)){i.istate.mode=7;break}i.istate.mode=2;case 2:if(0===i.avail_in)return e;e=t,i.avail_in--,i.total_in++,i.istate.need=(255&i.read_byte(i.next_in_index++))<<24&4278190080,i.istate.mode=3;case 3:if(0===i.avail_in)return e;e=t,i.avail_in--,i.total_in++,i.istate.need+=(255&i.read_byte(i.next_in_index++))<<16&16711680,i.istate.mode=4;case 4:if(0===i.avail_in)return e;e=t,i.avail_in--,i.total_in++,i.istate.need+=(255&i.read_byte(i.next_in_index++))<<8&65280,i.istate.mode=5;case 5:return 0===i.avail_in?e:(e=t,i.avail_in--,i.total_in++,i.istate.need+=255&i.read_byte(i.next_in_index++),i.istate.mode=6,2);case 6:return i.istate.mode=13,i.msg="need dictionary",i.istate.marker=0,j;case 7:if((e=i.istate.blocks.proc(i,e))==q){i.istate.mode=13,i.istate.marker=0;break}if((e=e==L?t:e)!=P)return e;e=t,i.istate.blocks.reset(i,i.istate.was),i.istate.mode=12;case 12:return P;case 13:return q;default:return j}},e.inflateSetDictionary=function(i,t,e){var n=0,a=e;return i&&i.istate&&6==i.istate.mode?(a>=1<<i.istate.wbits&&(n=e-(a=(1<<i.istate.wbits)-1)),i.istate.blocks.set_dictionary(t,n,a),i.istate.mode=7,L):j},e.inflateSync=function(i){var t,e,n,a,r;if(!i||!i.istate)return j;if(13!=i.istate.mode&&(i.istate.mode=13,i.istate.marker=0),0===(t=i.avail_in))return B;for(e=i.next_in_index,n=i.istate.marker;0!==t&&n<4;)i.read_byte(e)==l[n]?n++:n=0!==i.read_byte(e)?0:4-n,e++,t--;return i.total_in+=e-i.next_in_index,i.next_in_index=e,i.avail_in=t,4!=(i.istate.marker=n)?q:(a=i.total_in,r=i.total_out,_(i),i.total_in=a,i.total_out=r,i.istate.mode=7,L)},e.inflateSyncPoint=function(i){return i&&i.istate&&i.istate.blocks?i.istate.blocks.sync_point():j}}function i(){}function s(){var d=new i,s=new Uint8Array(512),f=!1;d.inflateInit(),d.next_out=s,this.append=function(i,t){var e,n,a=[],r=0,_=0,l=0;if(0!==i.length){d.next_in_index=0,d.next_in=i,d.avail_in=i.length;do{if(d.next_out_index=0,d.avail_out=512,0!==d.avail_in||f||(d.next_in_index=0,f=!0),e=d.inflate(0),f&&e==B)return-1;if(e!=L&&e!=P)throw"inflating: "+d.msg;if((f||e==P)&&d.avail_in==i.length)return-1}while(d.next_out_index&&(512==d.next_out_index?a.push(new Uint8Array(s)):a.push(new Uint8Array(s.subarray(0,d.next_out_index)))),l+=d.next_out_index,t&&0<d.next_in_index&&d.next_in_index!=r&&(t(d.next_in_index),r=d.next_in_index),0<d.avail_in||0===d.avail_out);return n=new Uint8Array(l),a.forEach(function(i){n.set(i,_),_+=i.length}),n}},this.flush=function(){d.inflateEnd()}}i.prototype={inflateInit:function(i){return this.istate=new d,i=i||15,this.istate.inflateInit(this,i)},inflate:function(i){return this.istate?this.istate.inflate(this,i):j},inflateEnd:function(){if(!this.istate)return j;var i=this.istate.inflateEnd(this);return this.istate=null,i},inflateSync:function(){return this.istate?this.istate.inflateSync(this):j},inflateSetDictionary:function(i,t){return this.istate?this.istate.inflateSetDictionary(this,i,t):j},read_byte:function(i){return this.next_in.subarray(i,i+1)[0]},read_buf:function(i,t){return this.next_in.subarray(i,i+t)}},t.zip?t.zip.Inflater=s:(_=new s,t.addEventListener("message",function(i){i=i.data;i.append&&t.postMessage({onappend:!0,data:_.append(i.data,function(i){t.postMessage({progress:!0,current:i})})}),i.flush&&(_.flush(),t.postMessage({onflush:!0}))},!1))}(this); \ No newline at end of file diff --git a/public/lib/Cesium/ThirdParty/draco_decoder.wasm b/public/lib/Cesium/ThirdParty/draco_decoder.wasm new file mode 100644 index 0000000..4b43828 Binary files /dev/null and b/public/lib/Cesium/ThirdParty/draco_decoder.wasm differ diff --git a/public/lib/Cesium/ThirdParty/google-earth-dbroot-parser.js b/public/lib/Cesium/ThirdParty/google-earth-dbroot-parser.js new file mode 100644 index 0000000..a3c559b --- /dev/null +++ b/public/lib/Cesium/ThirdParty/google-earth-dbroot-parser.js @@ -0,0 +1 @@ +window.cesiumGoogleEarthDbRootParser=function(i){"use strict";var e,r,l=i.Reader,s=(i.Writer,i.util),p=[],c=i.roots.default||(i.roots.default={});function t(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function o(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function a(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function n(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function d(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function u(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function b(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function y(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function f(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function h(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function m(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function v(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function g(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function P(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function O(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}return c.keyhole=((r={}).dbroot=((e={}).StringEntryProto=(t.prototype.stringId=0,t.prototype.stringValue="",t.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.StringEntryProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.stringId=e.fixed32();break;case 2:o.stringValue=e.string();break;default:e.skipType(7&a)}}return o},t.verify=function(e){return"object"!=typeof e||null===e?"object expected":s.isInteger(e.stringId)?s.isString(e.stringValue)?null:"stringValue: string expected":"stringId: integer expected"},t.from=t.fromObject=function(e){if(e instanceof c.keyhole.dbroot.StringEntryProto)return e;var r=new c.keyhole.dbroot.StringEntryProto;return void 0!==e.stringId&&null!==e.stringId&&(r.stringId=e.stringId>>>0),void 0!==e.stringValue&&null!==e.stringValue&&(r.stringValue=String(e.stringValue)),r},t.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.stringId=0,t.stringValue=""),void 0!==e.stringId&&null!==e.stringId&&e.hasOwnProperty("stringId")&&(t.stringId=e.stringId),void 0!==e.stringValue&&null!==e.stringValue&&e.hasOwnProperty("stringValue")&&(t.stringValue=e.stringValue),t},t.prototype.toObject=function(e){return this.constructor.toObject(this,e)},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t),e.StringIdOrValueProto=(o.prototype.stringId=0,o.prototype.value="",o.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.StringIdOrValueProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.stringId=e.fixed32();break;case 2:o.value=e.string();break;default:e.skipType(7&a)}}return o},o.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.stringId||s.isInteger(e.stringId)?void 0===e.value||s.isString(e.value)?null:"value: string expected":"stringId: integer expected"},o.from=o.fromObject=function(e){if(e instanceof c.keyhole.dbroot.StringIdOrValueProto)return e;var r=new c.keyhole.dbroot.StringIdOrValueProto;return void 0!==e.stringId&&null!==e.stringId&&(r.stringId=e.stringId>>>0),void 0!==e.value&&null!==e.value&&(r.value=String(e.value)),r},o.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.stringId=0,t.value=""),void 0!==e.stringId&&null!==e.stringId&&e.hasOwnProperty("stringId")&&(t.stringId=e.stringId),void 0!==e.value&&null!==e.value&&e.hasOwnProperty("value")&&(t.value=e.value),t},o.prototype.toObject=function(e){return this.constructor.toObject(this,e)},o.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},o),e.PlanetModelProto=(a.prototype.radius=6378.137,a.prototype.flattening=.00335281066474748,a.prototype.elevationBias=0,a.prototype.negativeAltitudeExponentBias=0,a.prototype.compressedNegativeAltitudeThreshold=0,a.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.PlanetModelProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.radius=e.double();break;case 2:o.flattening=e.double();break;case 4:o.elevationBias=e.double();break;case 5:o.negativeAltitudeExponentBias=e.int32();break;case 6:o.compressedNegativeAltitudeThreshold=e.double();break;default:e.skipType(7&a)}}return o},a.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.radius&&"number"!=typeof e.radius?"radius: number expected":void 0!==e.flattening&&"number"!=typeof e.flattening?"flattening: number expected":void 0!==e.elevationBias&&"number"!=typeof e.elevationBias?"elevationBias: number expected":void 0===e.negativeAltitudeExponentBias||s.isInteger(e.negativeAltitudeExponentBias)?void 0!==e.compressedNegativeAltitudeThreshold&&"number"!=typeof e.compressedNegativeAltitudeThreshold?"compressedNegativeAltitudeThreshold: number expected":null:"negativeAltitudeExponentBias: integer expected"},a.from=a.fromObject=function(e){if(e instanceof c.keyhole.dbroot.PlanetModelProto)return e;var r=new c.keyhole.dbroot.PlanetModelProto;return void 0!==e.radius&&null!==e.radius&&(r.radius=Number(e.radius)),void 0!==e.flattening&&null!==e.flattening&&(r.flattening=Number(e.flattening)),void 0!==e.elevationBias&&null!==e.elevationBias&&(r.elevationBias=Number(e.elevationBias)),void 0!==e.negativeAltitudeExponentBias&&null!==e.negativeAltitudeExponentBias&&(r.negativeAltitudeExponentBias=0|e.negativeAltitudeExponentBias),void 0!==e.compressedNegativeAltitudeThreshold&&null!==e.compressedNegativeAltitudeThreshold&&(r.compressedNegativeAltitudeThreshold=Number(e.compressedNegativeAltitudeThreshold)),r},a.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.radius=6378.137,t.flattening=.00335281066474748,t.elevationBias=0,t.negativeAltitudeExponentBias=0,t.compressedNegativeAltitudeThreshold=0),void 0!==e.radius&&null!==e.radius&&e.hasOwnProperty("radius")&&(t.radius=e.radius),void 0!==e.flattening&&null!==e.flattening&&e.hasOwnProperty("flattening")&&(t.flattening=e.flattening),void 0!==e.elevationBias&&null!==e.elevationBias&&e.hasOwnProperty("elevationBias")&&(t.elevationBias=e.elevationBias),void 0!==e.negativeAltitudeExponentBias&&null!==e.negativeAltitudeExponentBias&&e.hasOwnProperty("negativeAltitudeExponentBias")&&(t.negativeAltitudeExponentBias=e.negativeAltitudeExponentBias),void 0!==e.compressedNegativeAltitudeThreshold&&null!==e.compressedNegativeAltitudeThreshold&&e.hasOwnProperty("compressedNegativeAltitudeThreshold")&&(t.compressedNegativeAltitudeThreshold=e.compressedNegativeAltitudeThreshold),t},a.prototype.toObject=function(e){return this.constructor.toObject(this,e)},a.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},a),e.ProviderInfoProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.providerId=0,e.prototype.copyrightString=null,e.prototype.verticalPixelOffset=-1;var n={1:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ProviderInfoProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.providerId=e.int32();break;case 2:o.copyrightString=n[1].decode(e,e.uint32());break;case 3:o.verticalPixelOffset=e.int32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isInteger(e.providerId))return"providerId: integer expected";if(void 0!==e.copyrightString&&null!==e.copyrightString){var r=n[1].verify(e.copyrightString);if(r)return"copyrightString."+r}return void 0===e.verticalPixelOffset||s.isInteger(e.verticalPixelOffset)?null:"verticalPixelOffset: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ProviderInfoProto)return e;var r=new c.keyhole.dbroot.ProviderInfoProto;if(void 0!==e.providerId&&null!==e.providerId&&(r.providerId=0|e.providerId),void 0!==e.copyrightString&&null!==e.copyrightString){if("object"!=typeof e.copyrightString)throw TypeError(".keyhole.dbroot.ProviderInfoProto.copyrightString: object expected");r.copyrightString=n[1].fromObject(e.copyrightString)}return void 0!==e.verticalPixelOffset&&null!==e.verticalPixelOffset&&(r.verticalPixelOffset=0|e.verticalPixelOffset),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.providerId=0,t.copyrightString=null,t.verticalPixelOffset=-1),void 0!==e.providerId&&null!==e.providerId&&e.hasOwnProperty("providerId")&&(t.providerId=e.providerId),void 0!==e.copyrightString&&null!==e.copyrightString&&e.hasOwnProperty("copyrightString")&&(t.copyrightString=n[1].toObject(e.copyrightString,r)),void 0!==e.verticalPixelOffset&&null!==e.verticalPixelOffset&&e.hasOwnProperty("verticalPixelOffset")&&(t.verticalPixelOffset=e.verticalPixelOffset),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.PopUpProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.isBalloonStyle=!1,e.prototype.text=null,e.prototype.backgroundColorAbgr=4294967295,e.prototype.textColorAbgr=4278190080;var n={1:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.PopUpProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.isBalloonStyle=e.bool();break;case 2:o.text=n[1].decode(e,e.uint32());break;case 3:o.backgroundColorAbgr=e.fixed32();break;case 4:o.textColorAbgr=e.fixed32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.isBalloonStyle&&"boolean"!=typeof e.isBalloonStyle)return"isBalloonStyle: boolean expected";if(void 0!==e.text&&null!==e.text){var r=n[1].verify(e.text);if(r)return"text."+r}return void 0===e.backgroundColorAbgr||s.isInteger(e.backgroundColorAbgr)?void 0===e.textColorAbgr||s.isInteger(e.textColorAbgr)?null:"textColorAbgr: integer expected":"backgroundColorAbgr: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.PopUpProto)return e;var r=new c.keyhole.dbroot.PopUpProto;if(void 0!==e.isBalloonStyle&&null!==e.isBalloonStyle&&(r.isBalloonStyle=Boolean(e.isBalloonStyle)),void 0!==e.text&&null!==e.text){if("object"!=typeof e.text)throw TypeError(".keyhole.dbroot.PopUpProto.text: object expected");r.text=n[1].fromObject(e.text)}return void 0!==e.backgroundColorAbgr&&null!==e.backgroundColorAbgr&&(r.backgroundColorAbgr=e.backgroundColorAbgr>>>0),void 0!==e.textColorAbgr&&null!==e.textColorAbgr&&(r.textColorAbgr=e.textColorAbgr>>>0),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.isBalloonStyle=!1,t.text=null,t.backgroundColorAbgr=4294967295,t.textColorAbgr=4278190080),void 0!==e.isBalloonStyle&&null!==e.isBalloonStyle&&e.hasOwnProperty("isBalloonStyle")&&(t.isBalloonStyle=e.isBalloonStyle),void 0!==e.text&&null!==e.text&&e.hasOwnProperty("text")&&(t.text=n[1].toObject(e.text,r)),void 0!==e.backgroundColorAbgr&&null!==e.backgroundColorAbgr&&e.hasOwnProperty("backgroundColorAbgr")&&(t.backgroundColorAbgr=e.backgroundColorAbgr),void 0!==e.textColorAbgr&&null!==e.textColorAbgr&&e.hasOwnProperty("textColorAbgr")&&(t.textColorAbgr=e.textColorAbgr),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.StyleAttributeProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.styleId="",e.prototype.providerId=0,e.prototype.polyColorAbgr=4294967295,e.prototype.lineColorAbgr=4294967295,e.prototype.lineWidth=1,e.prototype.labelColorAbgr=4294967295,e.prototype.labelScale=1,e.prototype.placemarkIconColorAbgr=4294967295,e.prototype.placemarkIconScale=1,e.prototype.placemarkIconPath=null,e.prototype.placemarkIconX=0,e.prototype.placemarkIconY=0,e.prototype.placemarkIconWidth=32,e.prototype.placemarkIconHeight=32,e.prototype.popUp=null,e.prototype.drawFlag=s.emptyArray;var n={9:"keyhole.dbroot.StringIdOrValueProto",14:"keyhole.dbroot.PopUpProto",15:"keyhole.dbroot.DrawFlagProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.StyleAttributeProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.styleId=e.string();break;case 3:o.providerId=e.int32();break;case 4:o.polyColorAbgr=e.fixed32();break;case 5:o.lineColorAbgr=e.fixed32();break;case 6:o.lineWidth=e.float();break;case 7:o.labelColorAbgr=e.fixed32();break;case 8:o.labelScale=e.float();break;case 9:o.placemarkIconColorAbgr=e.fixed32();break;case 10:o.placemarkIconScale=e.float();break;case 11:o.placemarkIconPath=n[9].decode(e,e.uint32());break;case 12:o.placemarkIconX=e.int32();break;case 13:o.placemarkIconY=e.int32();break;case 14:o.placemarkIconWidth=e.int32();break;case 15:o.placemarkIconHeight=e.int32();break;case 16:o.popUp=n[14].decode(e,e.uint32());break;case 17:o.drawFlag&&o.drawFlag.length||(o.drawFlag=[]),o.drawFlag.push(n[15].decode(e,e.uint32()));break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isString(e.styleId))return"styleId: string expected";if(void 0!==e.providerId&&!s.isInteger(e.providerId))return"providerId: integer expected";if(void 0!==e.polyColorAbgr&&!s.isInteger(e.polyColorAbgr))return"polyColorAbgr: integer expected";if(void 0!==e.lineColorAbgr&&!s.isInteger(e.lineColorAbgr))return"lineColorAbgr: integer expected";if(void 0!==e.lineWidth&&"number"!=typeof e.lineWidth)return"lineWidth: number expected";if(void 0!==e.labelColorAbgr&&!s.isInteger(e.labelColorAbgr))return"labelColorAbgr: integer expected";if(void 0!==e.labelScale&&"number"!=typeof e.labelScale)return"labelScale: number expected";if(void 0!==e.placemarkIconColorAbgr&&!s.isInteger(e.placemarkIconColorAbgr))return"placemarkIconColorAbgr: integer expected";if(void 0!==e.placemarkIconScale&&"number"!=typeof e.placemarkIconScale)return"placemarkIconScale: number expected";if(void 0!==e.placemarkIconPath&&null!==e.placemarkIconPath&&(r=n[9].verify(e.placemarkIconPath)))return"placemarkIconPath."+r;if(void 0!==e.placemarkIconX&&!s.isInteger(e.placemarkIconX))return"placemarkIconX: integer expected";if(void 0!==e.placemarkIconY&&!s.isInteger(e.placemarkIconY))return"placemarkIconY: integer expected";if(void 0!==e.placemarkIconWidth&&!s.isInteger(e.placemarkIconWidth))return"placemarkIconWidth: integer expected";if(void 0!==e.placemarkIconHeight&&!s.isInteger(e.placemarkIconHeight))return"placemarkIconHeight: integer expected";if(void 0!==e.popUp&&null!==e.popUp&&(r=n[14].verify(e.popUp)))return"popUp."+r;if(void 0!==e.drawFlag){if(!Array.isArray(e.drawFlag))return"drawFlag: array expected";for(var r,t=0;t<e.drawFlag.length;++t)if(r=n[15].verify(e.drawFlag[t]))return"drawFlag."+r}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.StyleAttributeProto)return e;var r=new c.keyhole.dbroot.StyleAttributeProto;if(void 0!==e.styleId&&null!==e.styleId&&(r.styleId=String(e.styleId)),void 0!==e.providerId&&null!==e.providerId&&(r.providerId=0|e.providerId),void 0!==e.polyColorAbgr&&null!==e.polyColorAbgr&&(r.polyColorAbgr=e.polyColorAbgr>>>0),void 0!==e.lineColorAbgr&&null!==e.lineColorAbgr&&(r.lineColorAbgr=e.lineColorAbgr>>>0),void 0!==e.lineWidth&&null!==e.lineWidth&&(r.lineWidth=Number(e.lineWidth)),void 0!==e.labelColorAbgr&&null!==e.labelColorAbgr&&(r.labelColorAbgr=e.labelColorAbgr>>>0),void 0!==e.labelScale&&null!==e.labelScale&&(r.labelScale=Number(e.labelScale)),void 0!==e.placemarkIconColorAbgr&&null!==e.placemarkIconColorAbgr&&(r.placemarkIconColorAbgr=e.placemarkIconColorAbgr>>>0),void 0!==e.placemarkIconScale&&null!==e.placemarkIconScale&&(r.placemarkIconScale=Number(e.placemarkIconScale)),void 0!==e.placemarkIconPath&&null!==e.placemarkIconPath){if("object"!=typeof e.placemarkIconPath)throw TypeError(".keyhole.dbroot.StyleAttributeProto.placemarkIconPath: object expected");r.placemarkIconPath=n[9].fromObject(e.placemarkIconPath)}if(void 0!==e.placemarkIconX&&null!==e.placemarkIconX&&(r.placemarkIconX=0|e.placemarkIconX),void 0!==e.placemarkIconY&&null!==e.placemarkIconY&&(r.placemarkIconY=0|e.placemarkIconY),void 0!==e.placemarkIconWidth&&null!==e.placemarkIconWidth&&(r.placemarkIconWidth=0|e.placemarkIconWidth),void 0!==e.placemarkIconHeight&&null!==e.placemarkIconHeight&&(r.placemarkIconHeight=0|e.placemarkIconHeight),void 0!==e.popUp&&null!==e.popUp){if("object"!=typeof e.popUp)throw TypeError(".keyhole.dbroot.StyleAttributeProto.popUp: object expected");r.popUp=n[14].fromObject(e.popUp)}if(e.drawFlag){if(!Array.isArray(e.drawFlag))throw TypeError(".keyhole.dbroot.StyleAttributeProto.drawFlag: array expected");r.drawFlag=[];for(var t=0;t<e.drawFlag.length;++t){if("object"!=typeof e.drawFlag[t])throw TypeError(".keyhole.dbroot.StyleAttributeProto.drawFlag: object expected");r.drawFlag[t]=n[15].fromObject(e.drawFlag[t])}}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.drawFlag=[]),r.defaults&&(t.styleId="",t.providerId=0,t.polyColorAbgr=4294967295,t.lineColorAbgr=4294967295,t.lineWidth=1,t.labelColorAbgr=4294967295,t.labelScale=1,t.placemarkIconColorAbgr=4294967295,t.placemarkIconScale=1,t.placemarkIconPath=null,t.placemarkIconX=0,t.placemarkIconY=0,t.placemarkIconWidth=32,t.placemarkIconHeight=32,t.popUp=null),void 0!==e.styleId&&null!==e.styleId&&e.hasOwnProperty("styleId")&&(t.styleId=e.styleId),void 0!==e.providerId&&null!==e.providerId&&e.hasOwnProperty("providerId")&&(t.providerId=e.providerId),void 0!==e.polyColorAbgr&&null!==e.polyColorAbgr&&e.hasOwnProperty("polyColorAbgr")&&(t.polyColorAbgr=e.polyColorAbgr),void 0!==e.lineColorAbgr&&null!==e.lineColorAbgr&&e.hasOwnProperty("lineColorAbgr")&&(t.lineColorAbgr=e.lineColorAbgr),void 0!==e.lineWidth&&null!==e.lineWidth&&e.hasOwnProperty("lineWidth")&&(t.lineWidth=e.lineWidth),void 0!==e.labelColorAbgr&&null!==e.labelColorAbgr&&e.hasOwnProperty("labelColorAbgr")&&(t.labelColorAbgr=e.labelColorAbgr),void 0!==e.labelScale&&null!==e.labelScale&&e.hasOwnProperty("labelScale")&&(t.labelScale=e.labelScale),void 0!==e.placemarkIconColorAbgr&&null!==e.placemarkIconColorAbgr&&e.hasOwnProperty("placemarkIconColorAbgr")&&(t.placemarkIconColorAbgr=e.placemarkIconColorAbgr),void 0!==e.placemarkIconScale&&null!==e.placemarkIconScale&&e.hasOwnProperty("placemarkIconScale")&&(t.placemarkIconScale=e.placemarkIconScale),void 0!==e.placemarkIconPath&&null!==e.placemarkIconPath&&e.hasOwnProperty("placemarkIconPath")&&(t.placemarkIconPath=n[9].toObject(e.placemarkIconPath,r)),void 0!==e.placemarkIconX&&null!==e.placemarkIconX&&e.hasOwnProperty("placemarkIconX")&&(t.placemarkIconX=e.placemarkIconX),void 0!==e.placemarkIconY&&null!==e.placemarkIconY&&e.hasOwnProperty("placemarkIconY")&&(t.placemarkIconY=e.placemarkIconY),void 0!==e.placemarkIconWidth&&null!==e.placemarkIconWidth&&e.hasOwnProperty("placemarkIconWidth")&&(t.placemarkIconWidth=e.placemarkIconWidth),void 0!==e.placemarkIconHeight&&null!==e.placemarkIconHeight&&e.hasOwnProperty("placemarkIconHeight")&&(t.placemarkIconHeight=e.placemarkIconHeight),void 0!==e.popUp&&null!==e.popUp&&e.hasOwnProperty("popUp")&&(t.popUp=n[14].toObject(e.popUp,r)),void 0!==e.drawFlag&&null!==e.drawFlag&&e.hasOwnProperty("drawFlag")){t.drawFlag=[];for(var o=0;o<e.drawFlag.length;++o)t.drawFlag[o]=n[15].toObject(e.drawFlag[o],r)}return t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.StyleMapProto=(n.prototype.styleMapId=0,n.prototype.channelId=s.emptyArray,n.prototype.normalStyleAttribute=0,n.prototype.highlightStyleAttribute=0,n.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.StyleMapProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.styleMapId=e.int32();break;case 2:if(o.channelId&&o.channelId.length||(o.channelId=[]),2==(7&a))for(var n=e.uint32()+e.pos;e.pos<n;)o.channelId.push(e.int32());else o.channelId.push(e.int32());break;case 3:o.normalStyleAttribute=e.int32();break;case 4:o.highlightStyleAttribute=e.int32();break;default:e.skipType(7&a)}}return o},n.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isInteger(e.styleMapId))return"styleMapId: integer expected";if(void 0!==e.channelId){if(!Array.isArray(e.channelId))return"channelId: array expected";for(var r=0;r<e.channelId.length;++r)if(!s.isInteger(e.channelId[r]))return"channelId: integer[] expected"}return void 0===e.normalStyleAttribute||s.isInteger(e.normalStyleAttribute)?void 0===e.highlightStyleAttribute||s.isInteger(e.highlightStyleAttribute)?null:"highlightStyleAttribute: integer expected":"normalStyleAttribute: integer expected"},n.from=n.fromObject=function(e){if(e instanceof c.keyhole.dbroot.StyleMapProto)return e;var r=new c.keyhole.dbroot.StyleMapProto;if(void 0!==e.styleMapId&&null!==e.styleMapId&&(r.styleMapId=0|e.styleMapId),e.channelId){if(!Array.isArray(e.channelId))throw TypeError(".keyhole.dbroot.StyleMapProto.channelId: array expected");r.channelId=[];for(var t=0;t<e.channelId.length;++t)r.channelId[t]=0|e.channelId[t]}return void 0!==e.normalStyleAttribute&&null!==e.normalStyleAttribute&&(r.normalStyleAttribute=0|e.normalStyleAttribute),void 0!==e.highlightStyleAttribute&&null!==e.highlightStyleAttribute&&(r.highlightStyleAttribute=0|e.highlightStyleAttribute),r},n.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.channelId=[]),r.defaults&&(t.styleMapId=0,t.normalStyleAttribute=0,t.highlightStyleAttribute=0),void 0!==e.styleMapId&&null!==e.styleMapId&&e.hasOwnProperty("styleMapId")&&(t.styleMapId=e.styleMapId),void 0!==e.channelId&&null!==e.channelId&&e.hasOwnProperty("channelId")){t.channelId=[];for(var o=0;o<e.channelId.length;++o)t.channelId[o]=e.channelId[o]}return void 0!==e.normalStyleAttribute&&null!==e.normalStyleAttribute&&e.hasOwnProperty("normalStyleAttribute")&&(t.normalStyleAttribute=e.normalStyleAttribute),void 0!==e.highlightStyleAttribute&&null!==e.highlightStyleAttribute&&e.hasOwnProperty("highlightStyleAttribute")&&(t.highlightStyleAttribute=e.highlightStyleAttribute),t},n.prototype.toObject=function(e){return this.constructor.toObject(this,e)},n.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},n),e.ZoomRangeProto=(d.prototype.minZoom=0,d.prototype.maxZoom=0,d.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ZoomRangeProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.minZoom=e.int32();break;case 2:o.maxZoom=e.int32();break;default:e.skipType(7&a)}}return o},d.verify=function(e){return"object"!=typeof e||null===e?"object expected":s.isInteger(e.minZoom)?s.isInteger(e.maxZoom)?null:"maxZoom: integer expected":"minZoom: integer expected"},d.from=d.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ZoomRangeProto)return e;var r=new c.keyhole.dbroot.ZoomRangeProto;return void 0!==e.minZoom&&null!==e.minZoom&&(r.minZoom=0|e.minZoom),void 0!==e.maxZoom&&null!==e.maxZoom&&(r.maxZoom=0|e.maxZoom),r},d.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.minZoom=0,t.maxZoom=0),void 0!==e.minZoom&&null!==e.minZoom&&e.hasOwnProperty("minZoom")&&(t.minZoom=e.minZoom),void 0!==e.maxZoom&&null!==e.maxZoom&&e.hasOwnProperty("maxZoom")&&(t.maxZoom=e.maxZoom),t},d.prototype.toObject=function(e){return this.constructor.toObject(this,e)},d.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},d),e.DrawFlagProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.drawFlagType=1;var r,o={0:"keyhole.dbroot.DrawFlagProto.DrawFlagType"};return p.push(o),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.DrawFlagProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.drawFlagType=e.uint32():e.skipType(7&a)}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";switch(e.drawFlagType){default:return"drawFlagType: enum value expected";case 1:case 2:case 3:case 4:case 5:}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.DrawFlagProto)return e;var r=new c.keyhole.dbroot.DrawFlagProto;switch(e.drawFlagType){case"TYPE_FILL_ONLY":case 1:r.drawFlagType=1;break;case"TYPE_OUTLINE_ONLY":case 2:r.drawFlagType=2;break;case"TYPE_FILL_AND_OUTLINE":case 3:r.drawFlagType=3;break;case"TYPE_ANTIALIASING":case 4:r.drawFlagType=4;break;case"TYPE_CENTER_LABEL":case 5:r.drawFlagType=5}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.drawFlagType=r.enums===String?"TYPE_FILL_ONLY":1),void 0!==e.drawFlagType&&null!==e.drawFlagType&&e.hasOwnProperty("drawFlagType")&&(t.drawFlagType=r.enums===String?o[0][e.drawFlagType]:e.drawFlagType),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.DrawFlagType=((r=Object.create({})).TYPE_FILL_ONLY=1,r.TYPE_OUTLINE_ONLY=2,r.TYPE_FILL_AND_OUTLINE=3,r.TYPE_ANTIALIASING=4,r.TYPE_CENTER_LABEL=5,r),e}(),e.LayerProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.zoomRange=s.emptyArray,e.prototype.preserveTextLevel=30,e.prototype.lodBeginTransition=!1,e.prototype.lodEndTransition=!1;var n={0:"keyhole.dbroot.ZoomRangeProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.LayerProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.zoomRange&&o.zoomRange.length||(o.zoomRange=[]),o.zoomRange.push(n[0].decode(e,e.uint32()));break;case 2:o.preserveTextLevel=e.int32();break;case 4:o.lodBeginTransition=e.bool();break;case 5:o.lodEndTransition=e.bool();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.zoomRange){if(!Array.isArray(e.zoomRange))return"zoomRange: array expected";for(var r=0;r<e.zoomRange.length;++r){var t=n[0].verify(e.zoomRange[r]);if(t)return"zoomRange."+t}}return void 0===e.preserveTextLevel||s.isInteger(e.preserveTextLevel)?void 0!==e.lodBeginTransition&&"boolean"!=typeof e.lodBeginTransition?"lodBeginTransition: boolean expected":void 0!==e.lodEndTransition&&"boolean"!=typeof e.lodEndTransition?"lodEndTransition: boolean expected":null:"preserveTextLevel: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.LayerProto)return e;var r=new c.keyhole.dbroot.LayerProto;if(e.zoomRange){if(!Array.isArray(e.zoomRange))throw TypeError(".keyhole.dbroot.LayerProto.zoomRange: array expected");r.zoomRange=[];for(var t=0;t<e.zoomRange.length;++t){if("object"!=typeof e.zoomRange[t])throw TypeError(".keyhole.dbroot.LayerProto.zoomRange: object expected");r.zoomRange[t]=n[0].fromObject(e.zoomRange[t])}}return void 0!==e.preserveTextLevel&&null!==e.preserveTextLevel&&(r.preserveTextLevel=0|e.preserveTextLevel),void 0!==e.lodBeginTransition&&null!==e.lodBeginTransition&&(r.lodBeginTransition=Boolean(e.lodBeginTransition)),void 0!==e.lodEndTransition&&null!==e.lodEndTransition&&(r.lodEndTransition=Boolean(e.lodEndTransition)),r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.zoomRange=[]),r.defaults&&(t.preserveTextLevel=30,t.lodBeginTransition=!1,t.lodEndTransition=!1),void 0!==e.zoomRange&&null!==e.zoomRange&&e.hasOwnProperty("zoomRange")){t.zoomRange=[];for(var o=0;o<e.zoomRange.length;++o)t.zoomRange[o]=n[0].toObject(e.zoomRange[o],r)}return void 0!==e.preserveTextLevel&&null!==e.preserveTextLevel&&e.hasOwnProperty("preserveTextLevel")&&(t.preserveTextLevel=e.preserveTextLevel),void 0!==e.lodBeginTransition&&null!==e.lodBeginTransition&&e.hasOwnProperty("lodBeginTransition")&&(t.lodBeginTransition=e.lodBeginTransition),void 0!==e.lodEndTransition&&null!==e.lodEndTransition&&e.hasOwnProperty("lodEndTransition")&&(t.lodEndTransition=e.lodEndTransition),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.FolderProto=(u.prototype.isExpandable=!0,u.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.FolderProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.isExpandable=e.bool():e.skipType(7&a)}return o},u.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.isExpandable&&"boolean"!=typeof e.isExpandable?"isExpandable: boolean expected":null},u.from=u.fromObject=function(e){if(e instanceof c.keyhole.dbroot.FolderProto)return e;var r=new c.keyhole.dbroot.FolderProto;return void 0!==e.isExpandable&&null!==e.isExpandable&&(r.isExpandable=Boolean(e.isExpandable)),r},u.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.isExpandable=!0),void 0!==e.isExpandable&&null!==e.isExpandable&&e.hasOwnProperty("isExpandable")&&(t.isExpandable=e.isExpandable),t},u.prototype.toObject=function(e){return this.constructor.toObject(this,e)},u.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},u),e.RequirementProto=(b.prototype.requiredVram="",b.prototype.requiredClientVer="",b.prototype.probability="",b.prototype.requiredUserAgent="",b.prototype.requiredClientCapabilities="",b.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.RequirementProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 3:o.requiredVram=e.string();break;case 4:o.requiredClientVer=e.string();break;case 5:o.probability=e.string();break;case 6:o.requiredUserAgent=e.string();break;case 7:o.requiredClientCapabilities=e.string();break;default:e.skipType(7&a)}}return o},b.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.requiredVram||s.isString(e.requiredVram)?void 0===e.requiredClientVer||s.isString(e.requiredClientVer)?void 0===e.probability||s.isString(e.probability)?void 0===e.requiredUserAgent||s.isString(e.requiredUserAgent)?void 0===e.requiredClientCapabilities||s.isString(e.requiredClientCapabilities)?null:"requiredClientCapabilities: string expected":"requiredUserAgent: string expected":"probability: string expected":"requiredClientVer: string expected":"requiredVram: string expected"},b.from=b.fromObject=function(e){if(e instanceof c.keyhole.dbroot.RequirementProto)return e;var r=new c.keyhole.dbroot.RequirementProto;return void 0!==e.requiredVram&&null!==e.requiredVram&&(r.requiredVram=String(e.requiredVram)),void 0!==e.requiredClientVer&&null!==e.requiredClientVer&&(r.requiredClientVer=String(e.requiredClientVer)),void 0!==e.probability&&null!==e.probability&&(r.probability=String(e.probability)),void 0!==e.requiredUserAgent&&null!==e.requiredUserAgent&&(r.requiredUserAgent=String(e.requiredUserAgent)),void 0!==e.requiredClientCapabilities&&null!==e.requiredClientCapabilities&&(r.requiredClientCapabilities=String(e.requiredClientCapabilities)),r},b.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.requiredVram="",t.requiredClientVer="",t.probability="",t.requiredUserAgent="",t.requiredClientCapabilities=""),void 0!==e.requiredVram&&null!==e.requiredVram&&e.hasOwnProperty("requiredVram")&&(t.requiredVram=e.requiredVram),void 0!==e.requiredClientVer&&null!==e.requiredClientVer&&e.hasOwnProperty("requiredClientVer")&&(t.requiredClientVer=e.requiredClientVer),void 0!==e.probability&&null!==e.probability&&e.hasOwnProperty("probability")&&(t.probability=e.probability),void 0!==e.requiredUserAgent&&null!==e.requiredUserAgent&&e.hasOwnProperty("requiredUserAgent")&&(t.requiredUserAgent=e.requiredUserAgent),void 0!==e.requiredClientCapabilities&&null!==e.requiredClientCapabilities&&e.hasOwnProperty("requiredClientCapabilities")&&(t.requiredClientCapabilities=e.requiredClientCapabilities),t},b.prototype.toObject=function(e){return this.constructor.toObject(this,e)},b.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},b),e.LookAtProto=(y.prototype.longitude=0,y.prototype.latitude=0,y.prototype.range=0,y.prototype.tilt=0,y.prototype.heading=0,y.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.LookAtProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.longitude=e.float();break;case 2:o.latitude=e.float();break;case 3:o.range=e.float();break;case 4:o.tilt=e.float();break;case 5:o.heading=e.float();break;default:e.skipType(7&a)}}return o},y.verify=function(e){return"object"!=typeof e||null===e?"object expected":"number"!=typeof e.longitude?"longitude: number expected":"number"!=typeof e.latitude?"latitude: number expected":void 0!==e.range&&"number"!=typeof e.range?"range: number expected":void 0!==e.tilt&&"number"!=typeof e.tilt?"tilt: number expected":void 0!==e.heading&&"number"!=typeof e.heading?"heading: number expected":null},y.from=y.fromObject=function(e){if(e instanceof c.keyhole.dbroot.LookAtProto)return e;var r=new c.keyhole.dbroot.LookAtProto;return void 0!==e.longitude&&null!==e.longitude&&(r.longitude=Number(e.longitude)),void 0!==e.latitude&&null!==e.latitude&&(r.latitude=Number(e.latitude)),void 0!==e.range&&null!==e.range&&(r.range=Number(e.range)),void 0!==e.tilt&&null!==e.tilt&&(r.tilt=Number(e.tilt)),void 0!==e.heading&&null!==e.heading&&(r.heading=Number(e.heading)),r},y.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.longitude=0,t.latitude=0,t.range=0,t.tilt=0,t.heading=0),void 0!==e.longitude&&null!==e.longitude&&e.hasOwnProperty("longitude")&&(t.longitude=e.longitude),void 0!==e.latitude&&null!==e.latitude&&e.hasOwnProperty("latitude")&&(t.latitude=e.latitude),void 0!==e.range&&null!==e.range&&e.hasOwnProperty("range")&&(t.range=e.range),void 0!==e.tilt&&null!==e.tilt&&e.hasOwnProperty("tilt")&&(t.tilt=e.tilt),void 0!==e.heading&&null!==e.heading&&e.hasOwnProperty("heading")&&(t.heading=e.heading),t},y.prototype.toObject=function(e){return this.constructor.toObject(this,e)},y.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},y),e.NestedFeatureProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.featureType=1,e.prototype.kmlUrl=null,e.prototype.databaseUrl="",e.prototype.layer=null,e.prototype.folder=null,e.prototype.requirement=null,e.prototype.channelId=0,e.prototype.displayName=null,e.prototype.isVisible=!0,e.prototype.isEnabled=!0,e.prototype.isChecked=!1,e.prototype.layerMenuIconPath="icons/773_l.png",e.prototype.description=null,e.prototype.lookAt=null,e.prototype.assetUuid="",e.prototype.isSaveLocked=!0,e.prototype.children=s.emptyArray,e.prototype.clientConfigScriptName="",e.prototype.dioramaDataChannelBase=-1,e.prototype.replicaDataChannelBase=-1;var r,n={0:"keyhole.dbroot.NestedFeatureProto.FeatureType",1:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.LayerProto",4:"keyhole.dbroot.FolderProto",5:"keyhole.dbroot.RequirementProto",7:"keyhole.dbroot.StringIdOrValueProto",12:"keyhole.dbroot.StringIdOrValueProto",13:"keyhole.dbroot.LookAtProto",16:"keyhole.dbroot.NestedFeatureProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.NestedFeatureProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.featureType=e.uint32();break;case 2:o.kmlUrl=n[1].decode(e,e.uint32());break;case 21:o.databaseUrl=e.string();break;case 3:o.layer=n[3].decode(e,e.uint32());break;case 4:o.folder=n[4].decode(e,e.uint32());break;case 5:o.requirement=n[5].decode(e,e.uint32());break;case 6:o.channelId=e.int32();break;case 7:o.displayName=n[7].decode(e,e.uint32());break;case 8:o.isVisible=e.bool();break;case 9:o.isEnabled=e.bool();break;case 10:o.isChecked=e.bool();break;case 11:o.layerMenuIconPath=e.string();break;case 12:o.description=n[12].decode(e,e.uint32());break;case 13:o.lookAt=n[13].decode(e,e.uint32());break;case 15:o.assetUuid=e.string();break;case 16:o.isSaveLocked=e.bool();break;case 17:o.children&&o.children.length||(o.children=[]),o.children.push(n[16].decode(e,e.uint32()));break;case 18:o.clientConfigScriptName=e.string();break;case 19:o.dioramaDataChannelBase=e.int32();break;case 20:o.replicaDataChannelBase=e.int32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.featureType)switch(e.featureType){default:return"featureType: enum value expected";case 1:case 2:case 3:case 4:}if(void 0!==e.kmlUrl&&null!==e.kmlUrl&&(r=n[1].verify(e.kmlUrl)))return"kmlUrl."+r;if(void 0!==e.databaseUrl&&!s.isString(e.databaseUrl))return"databaseUrl: string expected";if(void 0!==e.layer&&null!==e.layer&&(r=n[3].verify(e.layer)))return"layer."+r;if(void 0!==e.folder&&null!==e.folder&&(r=n[4].verify(e.folder)))return"folder."+r;if(void 0!==e.requirement&&null!==e.requirement&&(r=n[5].verify(e.requirement)))return"requirement."+r;if(!s.isInteger(e.channelId))return"channelId: integer expected";if(void 0!==e.displayName&&null!==e.displayName&&(r=n[7].verify(e.displayName)))return"displayName."+r;if(void 0!==e.isVisible&&"boolean"!=typeof e.isVisible)return"isVisible: boolean expected";if(void 0!==e.isEnabled&&"boolean"!=typeof e.isEnabled)return"isEnabled: boolean expected";if(void 0!==e.isChecked&&"boolean"!=typeof e.isChecked)return"isChecked: boolean expected";if(void 0!==e.layerMenuIconPath&&!s.isString(e.layerMenuIconPath))return"layerMenuIconPath: string expected";if(void 0!==e.description&&null!==e.description&&(r=n[12].verify(e.description)))return"description."+r;if(void 0!==e.lookAt&&null!==e.lookAt&&(r=n[13].verify(e.lookAt)))return"lookAt."+r;if(void 0!==e.assetUuid&&!s.isString(e.assetUuid))return"assetUuid: string expected";if(void 0!==e.isSaveLocked&&"boolean"!=typeof e.isSaveLocked)return"isSaveLocked: boolean expected";if(void 0!==e.children){if(!Array.isArray(e.children))return"children: array expected";for(var r,t=0;t<e.children.length;++t)if(r=n[16].verify(e.children[t]))return"children."+r}return void 0===e.clientConfigScriptName||s.isString(e.clientConfigScriptName)?void 0===e.dioramaDataChannelBase||s.isInteger(e.dioramaDataChannelBase)?void 0===e.replicaDataChannelBase||s.isInteger(e.replicaDataChannelBase)?null:"replicaDataChannelBase: integer expected":"dioramaDataChannelBase: integer expected":"clientConfigScriptName: string expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.NestedFeatureProto)return e;var r=new c.keyhole.dbroot.NestedFeatureProto;switch(e.featureType){case"TYPE_POINT_Z":case 1:r.featureType=1;break;case"TYPE_POLYGON_Z":case 2:r.featureType=2;break;case"TYPE_LINE_Z":case 3:r.featureType=3;break;case"TYPE_TERRAIN":case 4:r.featureType=4}if(void 0!==e.kmlUrl&&null!==e.kmlUrl){if("object"!=typeof e.kmlUrl)throw TypeError(".keyhole.dbroot.NestedFeatureProto.kmlUrl: object expected");r.kmlUrl=n[1].fromObject(e.kmlUrl)}if(void 0!==e.databaseUrl&&null!==e.databaseUrl&&(r.databaseUrl=String(e.databaseUrl)),void 0!==e.layer&&null!==e.layer){if("object"!=typeof e.layer)throw TypeError(".keyhole.dbroot.NestedFeatureProto.layer: object expected");r.layer=n[3].fromObject(e.layer)}if(void 0!==e.folder&&null!==e.folder){if("object"!=typeof e.folder)throw TypeError(".keyhole.dbroot.NestedFeatureProto.folder: object expected");r.folder=n[4].fromObject(e.folder)}if(void 0!==e.requirement&&null!==e.requirement){if("object"!=typeof e.requirement)throw TypeError(".keyhole.dbroot.NestedFeatureProto.requirement: object expected");r.requirement=n[5].fromObject(e.requirement)}if(void 0!==e.channelId&&null!==e.channelId&&(r.channelId=0|e.channelId),void 0!==e.displayName&&null!==e.displayName){if("object"!=typeof e.displayName)throw TypeError(".keyhole.dbroot.NestedFeatureProto.displayName: object expected");r.displayName=n[7].fromObject(e.displayName)}if(void 0!==e.isVisible&&null!==e.isVisible&&(r.isVisible=Boolean(e.isVisible)),void 0!==e.isEnabled&&null!==e.isEnabled&&(r.isEnabled=Boolean(e.isEnabled)),void 0!==e.isChecked&&null!==e.isChecked&&(r.isChecked=Boolean(e.isChecked)),void 0!==e.layerMenuIconPath&&null!==e.layerMenuIconPath&&(r.layerMenuIconPath=String(e.layerMenuIconPath)),void 0!==e.description&&null!==e.description){if("object"!=typeof e.description)throw TypeError(".keyhole.dbroot.NestedFeatureProto.description: object expected");r.description=n[12].fromObject(e.description)}if(void 0!==e.lookAt&&null!==e.lookAt){if("object"!=typeof e.lookAt)throw TypeError(".keyhole.dbroot.NestedFeatureProto.lookAt: object expected");r.lookAt=n[13].fromObject(e.lookAt)}if(void 0!==e.assetUuid&&null!==e.assetUuid&&(r.assetUuid=String(e.assetUuid)),void 0!==e.isSaveLocked&&null!==e.isSaveLocked&&(r.isSaveLocked=Boolean(e.isSaveLocked)),e.children){if(!Array.isArray(e.children))throw TypeError(".keyhole.dbroot.NestedFeatureProto.children: array expected");r.children=[];for(var t=0;t<e.children.length;++t){if("object"!=typeof e.children[t])throw TypeError(".keyhole.dbroot.NestedFeatureProto.children: object expected");r.children[t]=n[16].fromObject(e.children[t])}}return void 0!==e.clientConfigScriptName&&null!==e.clientConfigScriptName&&(r.clientConfigScriptName=String(e.clientConfigScriptName)),void 0!==e.dioramaDataChannelBase&&null!==e.dioramaDataChannelBase&&(r.dioramaDataChannelBase=0|e.dioramaDataChannelBase),void 0!==e.replicaDataChannelBase&&null!==e.replicaDataChannelBase&&(r.replicaDataChannelBase=0|e.replicaDataChannelBase),r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.children=[]),r.defaults&&(t.featureType=r.enums===String?"TYPE_POINT_Z":1,t.kmlUrl=null,t.databaseUrl="",t.layer=null,t.folder=null,t.requirement=null,t.channelId=0,t.displayName=null,t.isVisible=!0,t.isEnabled=!0,t.isChecked=!1,t.layerMenuIconPath="icons/773_l.png",t.description=null,t.lookAt=null,t.assetUuid="",t.isSaveLocked=!0,t.clientConfigScriptName="",t.dioramaDataChannelBase=-1,t.replicaDataChannelBase=-1),void 0!==e.featureType&&null!==e.featureType&&e.hasOwnProperty("featureType")&&(t.featureType=r.enums===String?n[0][e.featureType]:e.featureType),void 0!==e.kmlUrl&&null!==e.kmlUrl&&e.hasOwnProperty("kmlUrl")&&(t.kmlUrl=n[1].toObject(e.kmlUrl,r)),void 0!==e.databaseUrl&&null!==e.databaseUrl&&e.hasOwnProperty("databaseUrl")&&(t.databaseUrl=e.databaseUrl),void 0!==e.layer&&null!==e.layer&&e.hasOwnProperty("layer")&&(t.layer=n[3].toObject(e.layer,r)),void 0!==e.folder&&null!==e.folder&&e.hasOwnProperty("folder")&&(t.folder=n[4].toObject(e.folder,r)),void 0!==e.requirement&&null!==e.requirement&&e.hasOwnProperty("requirement")&&(t.requirement=n[5].toObject(e.requirement,r)),void 0!==e.channelId&&null!==e.channelId&&e.hasOwnProperty("channelId")&&(t.channelId=e.channelId),void 0!==e.displayName&&null!==e.displayName&&e.hasOwnProperty("displayName")&&(t.displayName=n[7].toObject(e.displayName,r)),void 0!==e.isVisible&&null!==e.isVisible&&e.hasOwnProperty("isVisible")&&(t.isVisible=e.isVisible),void 0!==e.isEnabled&&null!==e.isEnabled&&e.hasOwnProperty("isEnabled")&&(t.isEnabled=e.isEnabled),void 0!==e.isChecked&&null!==e.isChecked&&e.hasOwnProperty("isChecked")&&(t.isChecked=e.isChecked),void 0!==e.layerMenuIconPath&&null!==e.layerMenuIconPath&&e.hasOwnProperty("layerMenuIconPath")&&(t.layerMenuIconPath=e.layerMenuIconPath),void 0!==e.description&&null!==e.description&&e.hasOwnProperty("description")&&(t.description=n[12].toObject(e.description,r)),void 0!==e.lookAt&&null!==e.lookAt&&e.hasOwnProperty("lookAt")&&(t.lookAt=n[13].toObject(e.lookAt,r)),void 0!==e.assetUuid&&null!==e.assetUuid&&e.hasOwnProperty("assetUuid")&&(t.assetUuid=e.assetUuid),void 0!==e.isSaveLocked&&null!==e.isSaveLocked&&e.hasOwnProperty("isSaveLocked")&&(t.isSaveLocked=e.isSaveLocked),void 0!==e.children&&null!==e.children&&e.hasOwnProperty("children")){t.children=[];for(var o=0;o<e.children.length;++o)t.children[o]=n[16].toObject(e.children[o],r)}return void 0!==e.clientConfigScriptName&&null!==e.clientConfigScriptName&&e.hasOwnProperty("clientConfigScriptName")&&(t.clientConfigScriptName=e.clientConfigScriptName),void 0!==e.dioramaDataChannelBase&&null!==e.dioramaDataChannelBase&&e.hasOwnProperty("dioramaDataChannelBase")&&(t.dioramaDataChannelBase=e.dioramaDataChannelBase),void 0!==e.replicaDataChannelBase&&null!==e.replicaDataChannelBase&&e.hasOwnProperty("replicaDataChannelBase")&&(t.replicaDataChannelBase=e.replicaDataChannelBase),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.FeatureType=((r=Object.create({})).TYPE_POINT_Z=1,r.TYPE_POLYGON_Z=2,r.TYPE_LINE_Z=3,r.TYPE_TERRAIN=4,r),e}(),e.MfeDomainFeaturesProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.countryCode="",e.prototype.domainName="",e.prototype.supportedFeatures=s.emptyArray;var r,a={2:"keyhole.dbroot.MfeDomainFeaturesProto.SupportedFeature"};return p.push(a),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.MfeDomainFeaturesProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.countryCode=e.string();break;case 2:o.domainName=e.string();break;case 3:if(o.supportedFeatures&&o.supportedFeatures.length||(o.supportedFeatures=[]),2==(7&a))for(var n=e.uint32()+e.pos;e.pos<n;)o.supportedFeatures.push(e.uint32());else o.supportedFeatures.push(e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isString(e.countryCode))return"countryCode: string expected";if(!s.isString(e.domainName))return"domainName: string expected";if(void 0!==e.supportedFeatures){if(!Array.isArray(e.supportedFeatures))return"supportedFeatures: array expected";for(var r=0;r<e.supportedFeatures.length;++r)switch(e.supportedFeatures[r]){default:return"supportedFeatures: enum value[] expected";case 0:case 1:case 2:}}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.MfeDomainFeaturesProto)return e;var r=new c.keyhole.dbroot.MfeDomainFeaturesProto;if(void 0!==e.countryCode&&null!==e.countryCode&&(r.countryCode=String(e.countryCode)),void 0!==e.domainName&&null!==e.domainName&&(r.domainName=String(e.domainName)),e.supportedFeatures){if(!Array.isArray(e.supportedFeatures))throw TypeError(".keyhole.dbroot.MfeDomainFeaturesProto.supportedFeatures: array expected");r.supportedFeatures=[];for(var t=0;t<e.supportedFeatures.length;++t)switch(e.supportedFeatures[t]){default:case"GEOCODING":case 0:r.supportedFeatures[t]=0;break;case"LOCAL_SEARCH":case 1:r.supportedFeatures[t]=1;break;case"DRIVING_DIRECTIONS":case 2:r.supportedFeatures[t]=2}}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.supportedFeatures=[]),r.defaults&&(t.countryCode="",t.domainName=""),void 0!==e.countryCode&&null!==e.countryCode&&e.hasOwnProperty("countryCode")&&(t.countryCode=e.countryCode),void 0!==e.domainName&&null!==e.domainName&&e.hasOwnProperty("domainName")&&(t.domainName=e.domainName),void 0!==e.supportedFeatures&&null!==e.supportedFeatures&&e.hasOwnProperty("supportedFeatures")){t.supportedFeatures=[];for(var o=0;o<e.supportedFeatures.length;++o)t.supportedFeatures[o]=r.enums===String?a[2][e.supportedFeatures[o]]:e.supportedFeatures[o]}return t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.SupportedFeature=((r=Object.create({})).GEOCODING=0,r.LOCAL_SEARCH=1,r.DRIVING_DIRECTIONS=2,r),e}(),e.ClientOptionsProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.disableDiskCache=!1,e.prototype.disableEmbeddedBrowserVista=!1,e.prototype.drawAtmosphere=!0,e.prototype.drawStars=!0,e.prototype.shaderFilePrefix="",e.prototype.useProtobufQuadtreePackets=!1,e.prototype.useExtendedCopyrightIds=!0,e.prototype.precipitationsOptions=null,e.prototype.captureOptions=null,e.prototype.show_2dMapsIcon=!0,e.prototype.disableInternalBrowser=!1,e.prototype.internalBrowserBlacklist="",e.prototype.internalBrowserOriginWhitelist="*",e.prototype.polarTileMergingLevel=0,e.prototype.jsBridgeRequestWhitelist="http://*.google.com/*",e.prototype.mapsOptions=null;var n={7:"keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions",8:"keyhole.dbroot.ClientOptionsProto.CaptureOptions",15:"keyhole.dbroot.ClientOptionsProto.MapsOptions"};function r(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}function t(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ClientOptionsProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.disableDiskCache=e.bool();break;case 2:o.disableEmbeddedBrowserVista=e.bool();break;case 3:o.drawAtmosphere=e.bool();break;case 4:o.drawStars=e.bool();break;case 5:o.shaderFilePrefix=e.string();break;case 6:o.useProtobufQuadtreePackets=e.bool();break;case 7:o.useExtendedCopyrightIds=e.bool();break;case 8:o.precipitationsOptions=n[7].decode(e,e.uint32());break;case 9:o.captureOptions=n[8].decode(e,e.uint32());break;case 10:o.show_2dMapsIcon=e.bool();break;case 11:o.disableInternalBrowser=e.bool();break;case 12:o.internalBrowserBlacklist=e.string();break;case 13:o.internalBrowserOriginWhitelist=e.string();break;case 14:o.polarTileMergingLevel=e.int32();break;case 15:o.jsBridgeRequestWhitelist=e.string();break;case 16:o.mapsOptions=n[15].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.disableDiskCache&&"boolean"!=typeof e.disableDiskCache)return"disableDiskCache: boolean expected";if(void 0!==e.disableEmbeddedBrowserVista&&"boolean"!=typeof e.disableEmbeddedBrowserVista)return"disableEmbeddedBrowserVista: boolean expected";if(void 0!==e.drawAtmosphere&&"boolean"!=typeof e.drawAtmosphere)return"drawAtmosphere: boolean expected";if(void 0!==e.drawStars&&"boolean"!=typeof e.drawStars)return"drawStars: boolean expected";if(void 0!==e.shaderFilePrefix&&!s.isString(e.shaderFilePrefix))return"shaderFilePrefix: string expected";if(void 0!==e.useProtobufQuadtreePackets&&"boolean"!=typeof e.useProtobufQuadtreePackets)return"useProtobufQuadtreePackets: boolean expected";if(void 0!==e.useExtendedCopyrightIds&&"boolean"!=typeof e.useExtendedCopyrightIds)return"useExtendedCopyrightIds: boolean expected";var r;if(void 0!==e.precipitationsOptions&&null!==e.precipitationsOptions&&(r=n[7].verify(e.precipitationsOptions)))return"precipitationsOptions."+r;if(void 0!==e.captureOptions&&null!==e.captureOptions&&(r=n[8].verify(e.captureOptions)))return"captureOptions."+r;if(void 0!==e.show_2dMapsIcon&&"boolean"!=typeof e.show_2dMapsIcon)return"show_2dMapsIcon: boolean expected";if(void 0!==e.disableInternalBrowser&&"boolean"!=typeof e.disableInternalBrowser)return"disableInternalBrowser: boolean expected";if(void 0!==e.internalBrowserBlacklist&&!s.isString(e.internalBrowserBlacklist))return"internalBrowserBlacklist: string expected";if(void 0!==e.internalBrowserOriginWhitelist&&!s.isString(e.internalBrowserOriginWhitelist))return"internalBrowserOriginWhitelist: string expected";if(void 0!==e.polarTileMergingLevel&&!s.isInteger(e.polarTileMergingLevel))return"polarTileMergingLevel: integer expected";if(void 0!==e.jsBridgeRequestWhitelist&&!s.isString(e.jsBridgeRequestWhitelist))return"jsBridgeRequestWhitelist: string expected";if(void 0!==e.mapsOptions&&null!==e.mapsOptions&&(r=n[15].verify(e.mapsOptions)))return"mapsOptions."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ClientOptionsProto)return e;var r=new c.keyhole.dbroot.ClientOptionsProto;if(void 0!==e.disableDiskCache&&null!==e.disableDiskCache&&(r.disableDiskCache=Boolean(e.disableDiskCache)),void 0!==e.disableEmbeddedBrowserVista&&null!==e.disableEmbeddedBrowserVista&&(r.disableEmbeddedBrowserVista=Boolean(e.disableEmbeddedBrowserVista)),void 0!==e.drawAtmosphere&&null!==e.drawAtmosphere&&(r.drawAtmosphere=Boolean(e.drawAtmosphere)),void 0!==e.drawStars&&null!==e.drawStars&&(r.drawStars=Boolean(e.drawStars)),void 0!==e.shaderFilePrefix&&null!==e.shaderFilePrefix&&(r.shaderFilePrefix=String(e.shaderFilePrefix)),void 0!==e.useProtobufQuadtreePackets&&null!==e.useProtobufQuadtreePackets&&(r.useProtobufQuadtreePackets=Boolean(e.useProtobufQuadtreePackets)),void 0!==e.useExtendedCopyrightIds&&null!==e.useExtendedCopyrightIds&&(r.useExtendedCopyrightIds=Boolean(e.useExtendedCopyrightIds)),void 0!==e.precipitationsOptions&&null!==e.precipitationsOptions){if("object"!=typeof e.precipitationsOptions)throw TypeError(".keyhole.dbroot.ClientOptionsProto.precipitationsOptions: object expected");r.precipitationsOptions=n[7].fromObject(e.precipitationsOptions)}if(void 0!==e.captureOptions&&null!==e.captureOptions){if("object"!=typeof e.captureOptions)throw TypeError(".keyhole.dbroot.ClientOptionsProto.captureOptions: object expected");r.captureOptions=n[8].fromObject(e.captureOptions)}if(void 0!==e.show_2dMapsIcon&&null!==e.show_2dMapsIcon&&(r.show_2dMapsIcon=Boolean(e.show_2dMapsIcon)),void 0!==e.disableInternalBrowser&&null!==e.disableInternalBrowser&&(r.disableInternalBrowser=Boolean(e.disableInternalBrowser)),void 0!==e.internalBrowserBlacklist&&null!==e.internalBrowserBlacklist&&(r.internalBrowserBlacklist=String(e.internalBrowserBlacklist)),void 0!==e.internalBrowserOriginWhitelist&&null!==e.internalBrowserOriginWhitelist&&(r.internalBrowserOriginWhitelist=String(e.internalBrowserOriginWhitelist)),void 0!==e.polarTileMergingLevel&&null!==e.polarTileMergingLevel&&(r.polarTileMergingLevel=0|e.polarTileMergingLevel),void 0!==e.jsBridgeRequestWhitelist&&null!==e.jsBridgeRequestWhitelist&&(r.jsBridgeRequestWhitelist=String(e.jsBridgeRequestWhitelist)),void 0!==e.mapsOptions&&null!==e.mapsOptions){if("object"!=typeof e.mapsOptions)throw TypeError(".keyhole.dbroot.ClientOptionsProto.mapsOptions: object expected");r.mapsOptions=n[15].fromObject(e.mapsOptions)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.disableDiskCache=!1,t.disableEmbeddedBrowserVista=!1,t.drawAtmosphere=!0,t.drawStars=!0,t.shaderFilePrefix="",t.useProtobufQuadtreePackets=!1,t.useExtendedCopyrightIds=!0,t.precipitationsOptions=null,t.captureOptions=null,t.show_2dMapsIcon=!0,t.disableInternalBrowser=!1,t.internalBrowserBlacklist="",t.internalBrowserOriginWhitelist="*",t.polarTileMergingLevel=0,t.jsBridgeRequestWhitelist="http://*.google.com/*",t.mapsOptions=null),void 0!==e.disableDiskCache&&null!==e.disableDiskCache&&e.hasOwnProperty("disableDiskCache")&&(t.disableDiskCache=e.disableDiskCache),void 0!==e.disableEmbeddedBrowserVista&&null!==e.disableEmbeddedBrowserVista&&e.hasOwnProperty("disableEmbeddedBrowserVista")&&(t.disableEmbeddedBrowserVista=e.disableEmbeddedBrowserVista),void 0!==e.drawAtmosphere&&null!==e.drawAtmosphere&&e.hasOwnProperty("drawAtmosphere")&&(t.drawAtmosphere=e.drawAtmosphere),void 0!==e.drawStars&&null!==e.drawStars&&e.hasOwnProperty("drawStars")&&(t.drawStars=e.drawStars),void 0!==e.shaderFilePrefix&&null!==e.shaderFilePrefix&&e.hasOwnProperty("shaderFilePrefix")&&(t.shaderFilePrefix=e.shaderFilePrefix),void 0!==e.useProtobufQuadtreePackets&&null!==e.useProtobufQuadtreePackets&&e.hasOwnProperty("useProtobufQuadtreePackets")&&(t.useProtobufQuadtreePackets=e.useProtobufQuadtreePackets),void 0!==e.useExtendedCopyrightIds&&null!==e.useExtendedCopyrightIds&&e.hasOwnProperty("useExtendedCopyrightIds")&&(t.useExtendedCopyrightIds=e.useExtendedCopyrightIds),void 0!==e.precipitationsOptions&&null!==e.precipitationsOptions&&e.hasOwnProperty("precipitationsOptions")&&(t.precipitationsOptions=n[7].toObject(e.precipitationsOptions,r)),void 0!==e.captureOptions&&null!==e.captureOptions&&e.hasOwnProperty("captureOptions")&&(t.captureOptions=n[8].toObject(e.captureOptions,r)),void 0!==e.show_2dMapsIcon&&null!==e.show_2dMapsIcon&&e.hasOwnProperty("show_2dMapsIcon")&&(t.show_2dMapsIcon=e.show_2dMapsIcon),void 0!==e.disableInternalBrowser&&null!==e.disableInternalBrowser&&e.hasOwnProperty("disableInternalBrowser")&&(t.disableInternalBrowser=e.disableInternalBrowser),void 0!==e.internalBrowserBlacklist&&null!==e.internalBrowserBlacklist&&e.hasOwnProperty("internalBrowserBlacklist")&&(t.internalBrowserBlacklist=e.internalBrowserBlacklist),void 0!==e.internalBrowserOriginWhitelist&&null!==e.internalBrowserOriginWhitelist&&e.hasOwnProperty("internalBrowserOriginWhitelist")&&(t.internalBrowserOriginWhitelist=e.internalBrowserOriginWhitelist),void 0!==e.polarTileMergingLevel&&null!==e.polarTileMergingLevel&&e.hasOwnProperty("polarTileMergingLevel")&&(t.polarTileMergingLevel=e.polarTileMergingLevel),void 0!==e.jsBridgeRequestWhitelist&&null!==e.jsBridgeRequestWhitelist&&e.hasOwnProperty("jsBridgeRequestWhitelist")&&(t.jsBridgeRequestWhitelist=e.jsBridgeRequestWhitelist),void 0!==e.mapsOptions&&null!==e.mapsOptions&&e.hasOwnProperty("mapsOptions")&&(t.mapsOptions=n[15].toObject(e.mapsOptions,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.PrecipitationsOptions=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.imageUrl="",e.prototype.imageExpireTime=900,e.prototype.maxColorDistance=20,e.prototype.imageLevel=5,e.prototype.weatherMapping=s.emptyArray,e.prototype.cloudsLayerUrl="",e.prototype.animationDecelerationDelay=20;var n={4:"keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.imageUrl=e.string();break;case 2:o.imageExpireTime=e.int32();break;case 3:o.maxColorDistance=e.int32();break;case 4:o.imageLevel=e.int32();break;case 5:o.weatherMapping&&o.weatherMapping.length||(o.weatherMapping=[]),o.weatherMapping.push(n[4].decode(e,e.uint32()));break;case 6:o.cloudsLayerUrl=e.string();break;case 7:o.animationDecelerationDelay=e.float();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.imageUrl&&!s.isString(e.imageUrl))return"imageUrl: string expected";if(void 0!==e.imageExpireTime&&!s.isInteger(e.imageExpireTime))return"imageExpireTime: integer expected";if(void 0!==e.maxColorDistance&&!s.isInteger(e.maxColorDistance))return"maxColorDistance: integer expected";if(void 0!==e.imageLevel&&!s.isInteger(e.imageLevel))return"imageLevel: integer expected";if(void 0!==e.weatherMapping){if(!Array.isArray(e.weatherMapping))return"weatherMapping: array expected";for(var r=0;r<e.weatherMapping.length;++r){var t=n[4].verify(e.weatherMapping[r]);if(t)return"weatherMapping."+t}}return void 0===e.cloudsLayerUrl||s.isString(e.cloudsLayerUrl)?void 0!==e.animationDecelerationDelay&&"number"!=typeof e.animationDecelerationDelay?"animationDecelerationDelay: number expected":null:"cloudsLayerUrl: string expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions)return e;var r=new c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions;if(void 0!==e.imageUrl&&null!==e.imageUrl&&(r.imageUrl=String(e.imageUrl)),void 0!==e.imageExpireTime&&null!==e.imageExpireTime&&(r.imageExpireTime=0|e.imageExpireTime),void 0!==e.maxColorDistance&&null!==e.maxColorDistance&&(r.maxColorDistance=0|e.maxColorDistance),void 0!==e.imageLevel&&null!==e.imageLevel&&(r.imageLevel=0|e.imageLevel),e.weatherMapping){if(!Array.isArray(e.weatherMapping))throw TypeError(".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: array expected");r.weatherMapping=[];for(var t=0;t<e.weatherMapping.length;++t){if("object"!=typeof e.weatherMapping[t])throw TypeError(".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: object expected");r.weatherMapping[t]=n[4].fromObject(e.weatherMapping[t])}}return void 0!==e.cloudsLayerUrl&&null!==e.cloudsLayerUrl&&(r.cloudsLayerUrl=String(e.cloudsLayerUrl)),void 0!==e.animationDecelerationDelay&&null!==e.animationDecelerationDelay&&(r.animationDecelerationDelay=Number(e.animationDecelerationDelay)),r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.weatherMapping=[]),r.defaults&&(t.imageUrl="",t.imageExpireTime=900,t.maxColorDistance=20,t.imageLevel=5,t.cloudsLayerUrl="",t.animationDecelerationDelay=20),void 0!==e.imageUrl&&null!==e.imageUrl&&e.hasOwnProperty("imageUrl")&&(t.imageUrl=e.imageUrl),void 0!==e.imageExpireTime&&null!==e.imageExpireTime&&e.hasOwnProperty("imageExpireTime")&&(t.imageExpireTime=e.imageExpireTime),void 0!==e.maxColorDistance&&null!==e.maxColorDistance&&e.hasOwnProperty("maxColorDistance")&&(t.maxColorDistance=e.maxColorDistance),void 0!==e.imageLevel&&null!==e.imageLevel&&e.hasOwnProperty("imageLevel")&&(t.imageLevel=e.imageLevel),void 0!==e.weatherMapping&&null!==e.weatherMapping&&e.hasOwnProperty("weatherMapping")){t.weatherMapping=[];for(var o=0;o<e.weatherMapping.length;++o)t.weatherMapping[o]=n[4].toObject(e.weatherMapping[o],r)}return void 0!==e.cloudsLayerUrl&&null!==e.cloudsLayerUrl&&e.hasOwnProperty("cloudsLayerUrl")&&(t.cloudsLayerUrl=e.cloudsLayerUrl),void 0!==e.animationDecelerationDelay&&null!==e.animationDecelerationDelay&&e.hasOwnProperty("animationDecelerationDelay")&&(t.animationDecelerationDelay=e.animationDecelerationDelay),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.WeatherMapping=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.colorAbgr=0,e.prototype.weatherType=0,e.prototype.elongation=1,e.prototype.opacity=0,e.prototype.fogDensity=0,e.prototype.speed0=0,e.prototype.speed1=0,e.prototype.speed2=0,e.prototype.speed3=0;var r,o={1:"keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.WeatherType"};return p.push(o),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.colorAbgr=e.uint32();break;case 2:o.weatherType=e.uint32();break;case 3:o.elongation=e.float();break;case 4:o.opacity=e.float();break;case 5:o.fogDensity=e.float();break;case 6:o.speed0=e.float();break;case 7:o.speed1=e.float();break;case 8:o.speed2=e.float();break;case 9:o.speed3=e.float();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isInteger(e.colorAbgr))return"colorAbgr: integer expected";switch(e.weatherType){default:return"weatherType: enum value expected";case 0:case 1:case 2:}return void 0!==e.elongation&&"number"!=typeof e.elongation?"elongation: number expected":void 0!==e.opacity&&"number"!=typeof e.opacity?"opacity: number expected":void 0!==e.fogDensity&&"number"!=typeof e.fogDensity?"fogDensity: number expected":void 0!==e.speed0&&"number"!=typeof e.speed0?"speed0: number expected":void 0!==e.speed1&&"number"!=typeof e.speed1?"speed1: number expected":void 0!==e.speed2&&"number"!=typeof e.speed2?"speed2: number expected":void 0!==e.speed3&&"number"!=typeof e.speed3?"speed3: number expected":null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping)return e;var r=new c.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping;switch(void 0!==e.colorAbgr&&null!==e.colorAbgr&&(r.colorAbgr=e.colorAbgr>>>0),e.weatherType){case"NO_PRECIPITATION":case 0:r.weatherType=0;break;case"RAIN":case 1:r.weatherType=1;break;case"SNOW":case 2:r.weatherType=2}return void 0!==e.elongation&&null!==e.elongation&&(r.elongation=Number(e.elongation)),void 0!==e.opacity&&null!==e.opacity&&(r.opacity=Number(e.opacity)),void 0!==e.fogDensity&&null!==e.fogDensity&&(r.fogDensity=Number(e.fogDensity)),void 0!==e.speed0&&null!==e.speed0&&(r.speed0=Number(e.speed0)),void 0!==e.speed1&&null!==e.speed1&&(r.speed1=Number(e.speed1)),void 0!==e.speed2&&null!==e.speed2&&(r.speed2=Number(e.speed2)),void 0!==e.speed3&&null!==e.speed3&&(r.speed3=Number(e.speed3)),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.colorAbgr=0,t.weatherType=r.enums===String?"NO_PRECIPITATION":0,t.elongation=1,t.opacity=0,t.fogDensity=0,t.speed0=0,t.speed1=0,t.speed2=0,t.speed3=0),void 0!==e.colorAbgr&&null!==e.colorAbgr&&e.hasOwnProperty("colorAbgr")&&(t.colorAbgr=e.colorAbgr),void 0!==e.weatherType&&null!==e.weatherType&&e.hasOwnProperty("weatherType")&&(t.weatherType=r.enums===String?o[1][e.weatherType]:e.weatherType),void 0!==e.elongation&&null!==e.elongation&&e.hasOwnProperty("elongation")&&(t.elongation=e.elongation),void 0!==e.opacity&&null!==e.opacity&&e.hasOwnProperty("opacity")&&(t.opacity=e.opacity),void 0!==e.fogDensity&&null!==e.fogDensity&&e.hasOwnProperty("fogDensity")&&(t.fogDensity=e.fogDensity),void 0!==e.speed0&&null!==e.speed0&&e.hasOwnProperty("speed0")&&(t.speed0=e.speed0),void 0!==e.speed1&&null!==e.speed1&&e.hasOwnProperty("speed1")&&(t.speed1=e.speed1),void 0!==e.speed2&&null!==e.speed2&&e.hasOwnProperty("speed2")&&(t.speed2=e.speed2),void 0!==e.speed3&&null!==e.speed3&&e.hasOwnProperty("speed3")&&(t.speed3=e.speed3),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.WeatherType=((r=Object.create({})).NO_PRECIPITATION=0,r.RAIN=1,r.SNOW=2,r),e}(),e}(),e.CaptureOptions=(r.prototype.allowSaveAsImage=!0,r.prototype.maxFreeCaptureRes=2400,r.prototype.maxPremiumCaptureRes=4800,r.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ClientOptionsProto.CaptureOptions;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.allowSaveAsImage=e.bool();break;case 2:o.maxFreeCaptureRes=e.int32();break;case 3:o.maxPremiumCaptureRes=e.int32();break;default:e.skipType(7&a)}}return o},r.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.allowSaveAsImage&&"boolean"!=typeof e.allowSaveAsImage?"allowSaveAsImage: boolean expected":void 0===e.maxFreeCaptureRes||s.isInteger(e.maxFreeCaptureRes)?void 0===e.maxPremiumCaptureRes||s.isInteger(e.maxPremiumCaptureRes)?null:"maxPremiumCaptureRes: integer expected":"maxFreeCaptureRes: integer expected"},r.from=r.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ClientOptionsProto.CaptureOptions)return e;var r=new c.keyhole.dbroot.ClientOptionsProto.CaptureOptions;return void 0!==e.allowSaveAsImage&&null!==e.allowSaveAsImage&&(r.allowSaveAsImage=Boolean(e.allowSaveAsImage)),void 0!==e.maxFreeCaptureRes&&null!==e.maxFreeCaptureRes&&(r.maxFreeCaptureRes=0|e.maxFreeCaptureRes),void 0!==e.maxPremiumCaptureRes&&null!==e.maxPremiumCaptureRes&&(r.maxPremiumCaptureRes=0|e.maxPremiumCaptureRes),r},r.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.allowSaveAsImage=!0,t.maxFreeCaptureRes=2400,t.maxPremiumCaptureRes=4800),void 0!==e.allowSaveAsImage&&null!==e.allowSaveAsImage&&e.hasOwnProperty("allowSaveAsImage")&&(t.allowSaveAsImage=e.allowSaveAsImage),void 0!==e.maxFreeCaptureRes&&null!==e.maxFreeCaptureRes&&e.hasOwnProperty("maxFreeCaptureRes")&&(t.maxFreeCaptureRes=e.maxFreeCaptureRes),void 0!==e.maxPremiumCaptureRes&&null!==e.maxPremiumCaptureRes&&e.hasOwnProperty("maxPremiumCaptureRes")&&(t.maxPremiumCaptureRes=e.maxPremiumCaptureRes),t},r.prototype.toObject=function(e){return this.constructor.toObject(this,e)},r.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},r),e.MapsOptions=(t.prototype.enableMaps=!1,t.prototype.docsAutoDownloadEnabled=!1,t.prototype.docsAutoDownloadInterval=0,t.prototype.docsAutoUploadEnabled=!1,t.prototype.docsAutoUploadDelay=0,t.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ClientOptionsProto.MapsOptions;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.enableMaps=e.bool();break;case 2:o.docsAutoDownloadEnabled=e.bool();break;case 3:o.docsAutoDownloadInterval=e.int32();break;case 4:o.docsAutoUploadEnabled=e.bool();break;case 5:o.docsAutoUploadDelay=e.int32();break;default:e.skipType(7&a)}}return o},t.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.enableMaps&&"boolean"!=typeof e.enableMaps?"enableMaps: boolean expected":void 0!==e.docsAutoDownloadEnabled&&"boolean"!=typeof e.docsAutoDownloadEnabled?"docsAutoDownloadEnabled: boolean expected":void 0===e.docsAutoDownloadInterval||s.isInteger(e.docsAutoDownloadInterval)?void 0!==e.docsAutoUploadEnabled&&"boolean"!=typeof e.docsAutoUploadEnabled?"docsAutoUploadEnabled: boolean expected":void 0===e.docsAutoUploadDelay||s.isInteger(e.docsAutoUploadDelay)?null:"docsAutoUploadDelay: integer expected":"docsAutoDownloadInterval: integer expected"},t.from=t.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ClientOptionsProto.MapsOptions)return e;var r=new c.keyhole.dbroot.ClientOptionsProto.MapsOptions;return void 0!==e.enableMaps&&null!==e.enableMaps&&(r.enableMaps=Boolean(e.enableMaps)),void 0!==e.docsAutoDownloadEnabled&&null!==e.docsAutoDownloadEnabled&&(r.docsAutoDownloadEnabled=Boolean(e.docsAutoDownloadEnabled)),void 0!==e.docsAutoDownloadInterval&&null!==e.docsAutoDownloadInterval&&(r.docsAutoDownloadInterval=0|e.docsAutoDownloadInterval),void 0!==e.docsAutoUploadEnabled&&null!==e.docsAutoUploadEnabled&&(r.docsAutoUploadEnabled=Boolean(e.docsAutoUploadEnabled)),void 0!==e.docsAutoUploadDelay&&null!==e.docsAutoUploadDelay&&(r.docsAutoUploadDelay=0|e.docsAutoUploadDelay),r},t.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.enableMaps=!1,t.docsAutoDownloadEnabled=!1,t.docsAutoDownloadInterval=0,t.docsAutoUploadEnabled=!1,t.docsAutoUploadDelay=0),void 0!==e.enableMaps&&null!==e.enableMaps&&e.hasOwnProperty("enableMaps")&&(t.enableMaps=e.enableMaps),void 0!==e.docsAutoDownloadEnabled&&null!==e.docsAutoDownloadEnabled&&e.hasOwnProperty("docsAutoDownloadEnabled")&&(t.docsAutoDownloadEnabled=e.docsAutoDownloadEnabled),void 0!==e.docsAutoDownloadInterval&&null!==e.docsAutoDownloadInterval&&e.hasOwnProperty("docsAutoDownloadInterval")&&(t.docsAutoDownloadInterval=e.docsAutoDownloadInterval),void 0!==e.docsAutoUploadEnabled&&null!==e.docsAutoUploadEnabled&&e.hasOwnProperty("docsAutoUploadEnabled")&&(t.docsAutoUploadEnabled=e.docsAutoUploadEnabled),void 0!==e.docsAutoUploadDelay&&null!==e.docsAutoUploadDelay&&e.hasOwnProperty("docsAutoUploadDelay")&&(t.docsAutoUploadDelay=e.docsAutoUploadDelay),t},t.prototype.toObject=function(e){return this.constructor.toObject(this,e)},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t),e}(),e.FetchingOptionsProto=(f.prototype.maxRequestsPerQuery=1,f.prototype.forceMaxRequestsPerQuery=!1,f.prototype.sortBatches=!1,f.prototype.maxDrawable=2,f.prototype.maxImagery=2,f.prototype.maxTerrain=5,f.prototype.maxQuadtree=5,f.prototype.maxDioramaMetadata=1,f.prototype.maxDioramaData=0,f.prototype.maxConsumerFetchRatio=1,f.prototype.maxProEcFetchRatio=0,f.prototype.safeOverallQps=0,f.prototype.safeImageryQps=0,f.prototype.domainsForHttps="google.com gstatic.com",f.prototype.hostsForHttp="",f.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.FetchingOptionsProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.maxRequestsPerQuery=e.int32();break;case 12:o.forceMaxRequestsPerQuery=e.bool();break;case 13:o.sortBatches=e.bool();break;case 2:o.maxDrawable=e.int32();break;case 3:o.maxImagery=e.int32();break;case 4:o.maxTerrain=e.int32();break;case 5:o.maxQuadtree=e.int32();break;case 6:o.maxDioramaMetadata=e.int32();break;case 7:o.maxDioramaData=e.int32();break;case 8:o.maxConsumerFetchRatio=e.float();break;case 9:o.maxProEcFetchRatio=e.float();break;case 10:o.safeOverallQps=e.float();break;case 11:o.safeImageryQps=e.float();break;case 14:o.domainsForHttps=e.string();break;case 15:o.hostsForHttp=e.string();break;default:e.skipType(7&a)}}return o},f.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.maxRequestsPerQuery||s.isInteger(e.maxRequestsPerQuery)?void 0!==e.forceMaxRequestsPerQuery&&"boolean"!=typeof e.forceMaxRequestsPerQuery?"forceMaxRequestsPerQuery: boolean expected":void 0!==e.sortBatches&&"boolean"!=typeof e.sortBatches?"sortBatches: boolean expected":void 0===e.maxDrawable||s.isInteger(e.maxDrawable)?void 0===e.maxImagery||s.isInteger(e.maxImagery)?void 0===e.maxTerrain||s.isInteger(e.maxTerrain)?void 0===e.maxQuadtree||s.isInteger(e.maxQuadtree)?void 0===e.maxDioramaMetadata||s.isInteger(e.maxDioramaMetadata)?void 0===e.maxDioramaData||s.isInteger(e.maxDioramaData)?void 0!==e.maxConsumerFetchRatio&&"number"!=typeof e.maxConsumerFetchRatio?"maxConsumerFetchRatio: number expected":void 0!==e.maxProEcFetchRatio&&"number"!=typeof e.maxProEcFetchRatio?"maxProEcFetchRatio: number expected":void 0!==e.safeOverallQps&&"number"!=typeof e.safeOverallQps?"safeOverallQps: number expected":void 0!==e.safeImageryQps&&"number"!=typeof e.safeImageryQps?"safeImageryQps: number expected":void 0===e.domainsForHttps||s.isString(e.domainsForHttps)?void 0===e.hostsForHttp||s.isString(e.hostsForHttp)?null:"hostsForHttp: string expected":"domainsForHttps: string expected":"maxDioramaData: integer expected":"maxDioramaMetadata: integer expected":"maxQuadtree: integer expected":"maxTerrain: integer expected":"maxImagery: integer expected":"maxDrawable: integer expected":"maxRequestsPerQuery: integer expected"},f.from=f.fromObject=function(e){if(e instanceof c.keyhole.dbroot.FetchingOptionsProto)return e;var r=new c.keyhole.dbroot.FetchingOptionsProto;return void 0!==e.maxRequestsPerQuery&&null!==e.maxRequestsPerQuery&&(r.maxRequestsPerQuery=0|e.maxRequestsPerQuery),void 0!==e.forceMaxRequestsPerQuery&&null!==e.forceMaxRequestsPerQuery&&(r.forceMaxRequestsPerQuery=Boolean(e.forceMaxRequestsPerQuery)),void 0!==e.sortBatches&&null!==e.sortBatches&&(r.sortBatches=Boolean(e.sortBatches)),void 0!==e.maxDrawable&&null!==e.maxDrawable&&(r.maxDrawable=0|e.maxDrawable),void 0!==e.maxImagery&&null!==e.maxImagery&&(r.maxImagery=0|e.maxImagery),void 0!==e.maxTerrain&&null!==e.maxTerrain&&(r.maxTerrain=0|e.maxTerrain),void 0!==e.maxQuadtree&&null!==e.maxQuadtree&&(r.maxQuadtree=0|e.maxQuadtree),void 0!==e.maxDioramaMetadata&&null!==e.maxDioramaMetadata&&(r.maxDioramaMetadata=0|e.maxDioramaMetadata),void 0!==e.maxDioramaData&&null!==e.maxDioramaData&&(r.maxDioramaData=0|e.maxDioramaData),void 0!==e.maxConsumerFetchRatio&&null!==e.maxConsumerFetchRatio&&(r.maxConsumerFetchRatio=Number(e.maxConsumerFetchRatio)),void 0!==e.maxProEcFetchRatio&&null!==e.maxProEcFetchRatio&&(r.maxProEcFetchRatio=Number(e.maxProEcFetchRatio)),void 0!==e.safeOverallQps&&null!==e.safeOverallQps&&(r.safeOverallQps=Number(e.safeOverallQps)),void 0!==e.safeImageryQps&&null!==e.safeImageryQps&&(r.safeImageryQps=Number(e.safeImageryQps)),void 0!==e.domainsForHttps&&null!==e.domainsForHttps&&(r.domainsForHttps=String(e.domainsForHttps)),void 0!==e.hostsForHttp&&null!==e.hostsForHttp&&(r.hostsForHttp=String(e.hostsForHttp)),r},f.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.maxRequestsPerQuery=1,t.forceMaxRequestsPerQuery=!1,t.sortBatches=!1,t.maxDrawable=2,t.maxImagery=2,t.maxTerrain=5,t.maxQuadtree=5,t.maxDioramaMetadata=1,t.maxDioramaData=0,t.maxConsumerFetchRatio=1,t.maxProEcFetchRatio=0,t.safeOverallQps=0,t.safeImageryQps=0,t.domainsForHttps="google.com gstatic.com",t.hostsForHttp=""),void 0!==e.maxRequestsPerQuery&&null!==e.maxRequestsPerQuery&&e.hasOwnProperty("maxRequestsPerQuery")&&(t.maxRequestsPerQuery=e.maxRequestsPerQuery),void 0!==e.forceMaxRequestsPerQuery&&null!==e.forceMaxRequestsPerQuery&&e.hasOwnProperty("forceMaxRequestsPerQuery")&&(t.forceMaxRequestsPerQuery=e.forceMaxRequestsPerQuery),void 0!==e.sortBatches&&null!==e.sortBatches&&e.hasOwnProperty("sortBatches")&&(t.sortBatches=e.sortBatches),void 0!==e.maxDrawable&&null!==e.maxDrawable&&e.hasOwnProperty("maxDrawable")&&(t.maxDrawable=e.maxDrawable),void 0!==e.maxImagery&&null!==e.maxImagery&&e.hasOwnProperty("maxImagery")&&(t.maxImagery=e.maxImagery),void 0!==e.maxTerrain&&null!==e.maxTerrain&&e.hasOwnProperty("maxTerrain")&&(t.maxTerrain=e.maxTerrain),void 0!==e.maxQuadtree&&null!==e.maxQuadtree&&e.hasOwnProperty("maxQuadtree")&&(t.maxQuadtree=e.maxQuadtree),void 0!==e.maxDioramaMetadata&&null!==e.maxDioramaMetadata&&e.hasOwnProperty("maxDioramaMetadata")&&(t.maxDioramaMetadata=e.maxDioramaMetadata),void 0!==e.maxDioramaData&&null!==e.maxDioramaData&&e.hasOwnProperty("maxDioramaData")&&(t.maxDioramaData=e.maxDioramaData),void 0!==e.maxConsumerFetchRatio&&null!==e.maxConsumerFetchRatio&&e.hasOwnProperty("maxConsumerFetchRatio")&&(t.maxConsumerFetchRatio=e.maxConsumerFetchRatio),void 0!==e.maxProEcFetchRatio&&null!==e.maxProEcFetchRatio&&e.hasOwnProperty("maxProEcFetchRatio")&&(t.maxProEcFetchRatio=e.maxProEcFetchRatio),void 0!==e.safeOverallQps&&null!==e.safeOverallQps&&e.hasOwnProperty("safeOverallQps")&&(t.safeOverallQps=e.safeOverallQps),void 0!==e.safeImageryQps&&null!==e.safeImageryQps&&e.hasOwnProperty("safeImageryQps")&&(t.safeImageryQps=e.safeImageryQps),void 0!==e.domainsForHttps&&null!==e.domainsForHttps&&e.hasOwnProperty("domainsForHttps")&&(t.domainsForHttps=e.domainsForHttps),void 0!==e.hostsForHttp&&null!==e.hostsForHttp&&e.hasOwnProperty("hostsForHttp")&&(t.hostsForHttp=e.hostsForHttp),t},f.prototype.toObject=function(e){return this.constructor.toObject(this,e)},f.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},f),e.TimeMachineOptionsProto=(h.prototype.serverUrl="",h.prototype.isTimemachine=!1,h.prototype.dwellTimeMs=500,h.prototype.discoverabilityAltitudeMeters=15e3,h.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.TimeMachineOptionsProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.serverUrl=e.string();break;case 2:o.isTimemachine=e.bool();break;case 3:o.dwellTimeMs=e.int32();break;case 4:o.discoverabilityAltitudeMeters=e.int32();break;default:e.skipType(7&a)}}return o},h.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.serverUrl||s.isString(e.serverUrl)?void 0!==e.isTimemachine&&"boolean"!=typeof e.isTimemachine?"isTimemachine: boolean expected":void 0===e.dwellTimeMs||s.isInteger(e.dwellTimeMs)?void 0===e.discoverabilityAltitudeMeters||s.isInteger(e.discoverabilityAltitudeMeters)?null:"discoverabilityAltitudeMeters: integer expected":"dwellTimeMs: integer expected":"serverUrl: string expected"},h.from=h.fromObject=function(e){if(e instanceof c.keyhole.dbroot.TimeMachineOptionsProto)return e;var r=new c.keyhole.dbroot.TimeMachineOptionsProto;return void 0!==e.serverUrl&&null!==e.serverUrl&&(r.serverUrl=String(e.serverUrl)),void 0!==e.isTimemachine&&null!==e.isTimemachine&&(r.isTimemachine=Boolean(e.isTimemachine)),void 0!==e.dwellTimeMs&&null!==e.dwellTimeMs&&(r.dwellTimeMs=0|e.dwellTimeMs),void 0!==e.discoverabilityAltitudeMeters&&null!==e.discoverabilityAltitudeMeters&&(r.discoverabilityAltitudeMeters=0|e.discoverabilityAltitudeMeters),r},h.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.serverUrl="",t.isTimemachine=!1,t.dwellTimeMs=500,t.discoverabilityAltitudeMeters=15e3),void 0!==e.serverUrl&&null!==e.serverUrl&&e.hasOwnProperty("serverUrl")&&(t.serverUrl=e.serverUrl),void 0!==e.isTimemachine&&null!==e.isTimemachine&&e.hasOwnProperty("isTimemachine")&&(t.isTimemachine=e.isTimemachine),void 0!==e.dwellTimeMs&&null!==e.dwellTimeMs&&e.hasOwnProperty("dwellTimeMs")&&(t.dwellTimeMs=e.dwellTimeMs),void 0!==e.discoverabilityAltitudeMeters&&null!==e.discoverabilityAltitudeMeters&&e.hasOwnProperty("discoverabilityAltitudeMeters")&&(t.discoverabilityAltitudeMeters=e.discoverabilityAltitudeMeters),t},h.prototype.toObject=function(e){return this.constructor.toObject(this,e)},h.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},h),e.AutopiaOptionsProto=(m.prototype.metadataServerUrl="http://cbk0.google.com/cbk",m.prototype.depthmapServerUrl="http://cbk0.google.com/cbk",m.prototype.coverageOverlayUrl="",m.prototype.maxImageryQps=0,m.prototype.maxMetadataDepthmapQps=0,m.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.AutopiaOptionsProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.metadataServerUrl=e.string();break;case 2:o.depthmapServerUrl=e.string();break;case 3:o.coverageOverlayUrl=e.string();break;case 4:o.maxImageryQps=e.float();break;case 5:o.maxMetadataDepthmapQps=e.float();break;default:e.skipType(7&a)}}return o},m.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.metadataServerUrl||s.isString(e.metadataServerUrl)?void 0===e.depthmapServerUrl||s.isString(e.depthmapServerUrl)?void 0===e.coverageOverlayUrl||s.isString(e.coverageOverlayUrl)?void 0!==e.maxImageryQps&&"number"!=typeof e.maxImageryQps?"maxImageryQps: number expected":void 0!==e.maxMetadataDepthmapQps&&"number"!=typeof e.maxMetadataDepthmapQps?"maxMetadataDepthmapQps: number expected":null:"coverageOverlayUrl: string expected":"depthmapServerUrl: string expected":"metadataServerUrl: string expected"},m.from=m.fromObject=function(e){if(e instanceof c.keyhole.dbroot.AutopiaOptionsProto)return e;var r=new c.keyhole.dbroot.AutopiaOptionsProto;return void 0!==e.metadataServerUrl&&null!==e.metadataServerUrl&&(r.metadataServerUrl=String(e.metadataServerUrl)),void 0!==e.depthmapServerUrl&&null!==e.depthmapServerUrl&&(r.depthmapServerUrl=String(e.depthmapServerUrl)),void 0!==e.coverageOverlayUrl&&null!==e.coverageOverlayUrl&&(r.coverageOverlayUrl=String(e.coverageOverlayUrl)),void 0!==e.maxImageryQps&&null!==e.maxImageryQps&&(r.maxImageryQps=Number(e.maxImageryQps)),void 0!==e.maxMetadataDepthmapQps&&null!==e.maxMetadataDepthmapQps&&(r.maxMetadataDepthmapQps=Number(e.maxMetadataDepthmapQps)),r},m.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.metadataServerUrl="http://cbk0.google.com/cbk",t.depthmapServerUrl="http://cbk0.google.com/cbk",t.coverageOverlayUrl="",t.maxImageryQps=0,t.maxMetadataDepthmapQps=0),void 0!==e.metadataServerUrl&&null!==e.metadataServerUrl&&e.hasOwnProperty("metadataServerUrl")&&(t.metadataServerUrl=e.metadataServerUrl),void 0!==e.depthmapServerUrl&&null!==e.depthmapServerUrl&&e.hasOwnProperty("depthmapServerUrl")&&(t.depthmapServerUrl=e.depthmapServerUrl),void 0!==e.coverageOverlayUrl&&null!==e.coverageOverlayUrl&&e.hasOwnProperty("coverageOverlayUrl")&&(t.coverageOverlayUrl=e.coverageOverlayUrl),void 0!==e.maxImageryQps&&null!==e.maxImageryQps&&e.hasOwnProperty("maxImageryQps")&&(t.maxImageryQps=e.maxImageryQps),void 0!==e.maxMetadataDepthmapQps&&null!==e.maxMetadataDepthmapQps&&e.hasOwnProperty("maxMetadataDepthmapQps")&&(t.maxMetadataDepthmapQps=e.maxMetadataDepthmapQps),t},m.prototype.toObject=function(e){return this.constructor.toObject(this,e)},m.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},m),e.CSIOptionsProto=(v.prototype.samplingPercentage=0,v.prototype.experimentId="",v.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.CSIOptionsProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.samplingPercentage=e.int32();break;case 2:o.experimentId=e.string();break;default:e.skipType(7&a)}}return o},v.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.samplingPercentage||s.isInteger(e.samplingPercentage)?void 0===e.experimentId||s.isString(e.experimentId)?null:"experimentId: string expected":"samplingPercentage: integer expected"},v.from=v.fromObject=function(e){if(e instanceof c.keyhole.dbroot.CSIOptionsProto)return e;var r=new c.keyhole.dbroot.CSIOptionsProto;return void 0!==e.samplingPercentage&&null!==e.samplingPercentage&&(r.samplingPercentage=0|e.samplingPercentage),void 0!==e.experimentId&&null!==e.experimentId&&(r.experimentId=String(e.experimentId)),r},v.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.samplingPercentage=0,t.experimentId=""),void 0!==e.samplingPercentage&&null!==e.samplingPercentage&&e.hasOwnProperty("samplingPercentage")&&(t.samplingPercentage=e.samplingPercentage),void 0!==e.experimentId&&null!==e.experimentId&&e.hasOwnProperty("experimentId")&&(t.experimentId=e.experimentId),t},v.prototype.toObject=function(e){return this.constructor.toObject(this,e)},v.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},v),e.SearchTabProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.isVisible=!1,e.prototype.tabLabel=null,e.prototype.baseUrl="",e.prototype.viewportPrefix="",e.prototype.inputBox=s.emptyArray,e.prototype.requirement=null;var n={1:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.SearchTabProto.InputBoxInfo",5:"keyhole.dbroot.RequirementProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.SearchTabProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.isVisible=e.bool();break;case 2:o.tabLabel=n[1].decode(e,e.uint32());break;case 3:o.baseUrl=e.string();break;case 4:o.viewportPrefix=e.string();break;case 5:o.inputBox&&o.inputBox.length||(o.inputBox=[]),o.inputBox.push(n[4].decode(e,e.uint32()));break;case 6:o.requirement=n[5].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if("boolean"!=typeof e.isVisible)return"isVisible: boolean expected";if(void 0!==e.tabLabel&&null!==e.tabLabel&&(r=n[1].verify(e.tabLabel)))return"tabLabel."+r;if(void 0!==e.baseUrl&&!s.isString(e.baseUrl))return"baseUrl: string expected";if(void 0!==e.viewportPrefix&&!s.isString(e.viewportPrefix))return"viewportPrefix: string expected";if(void 0!==e.inputBox){if(!Array.isArray(e.inputBox))return"inputBox: array expected";for(var r,t=0;t<e.inputBox.length;++t)if(r=n[4].verify(e.inputBox[t]))return"inputBox."+r}if(void 0!==e.requirement&&null!==e.requirement&&(r=n[5].verify(e.requirement)))return"requirement."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.SearchTabProto)return e;var r=new c.keyhole.dbroot.SearchTabProto;if(void 0!==e.isVisible&&null!==e.isVisible&&(r.isVisible=Boolean(e.isVisible)),void 0!==e.tabLabel&&null!==e.tabLabel){if("object"!=typeof e.tabLabel)throw TypeError(".keyhole.dbroot.SearchTabProto.tabLabel: object expected");r.tabLabel=n[1].fromObject(e.tabLabel)}if(void 0!==e.baseUrl&&null!==e.baseUrl&&(r.baseUrl=String(e.baseUrl)),void 0!==e.viewportPrefix&&null!==e.viewportPrefix&&(r.viewportPrefix=String(e.viewportPrefix)),e.inputBox){if(!Array.isArray(e.inputBox))throw TypeError(".keyhole.dbroot.SearchTabProto.inputBox: array expected");r.inputBox=[];for(var t=0;t<e.inputBox.length;++t){if("object"!=typeof e.inputBox[t])throw TypeError(".keyhole.dbroot.SearchTabProto.inputBox: object expected");r.inputBox[t]=n[4].fromObject(e.inputBox[t])}}if(void 0!==e.requirement&&null!==e.requirement){if("object"!=typeof e.requirement)throw TypeError(".keyhole.dbroot.SearchTabProto.requirement: object expected");r.requirement=n[5].fromObject(e.requirement)}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.inputBox=[]),r.defaults&&(t.isVisible=!1,t.tabLabel=null,t.baseUrl="",t.viewportPrefix="",t.requirement=null),void 0!==e.isVisible&&null!==e.isVisible&&e.hasOwnProperty("isVisible")&&(t.isVisible=e.isVisible),void 0!==e.tabLabel&&null!==e.tabLabel&&e.hasOwnProperty("tabLabel")&&(t.tabLabel=n[1].toObject(e.tabLabel,r)),void 0!==e.baseUrl&&null!==e.baseUrl&&e.hasOwnProperty("baseUrl")&&(t.baseUrl=e.baseUrl),void 0!==e.viewportPrefix&&null!==e.viewportPrefix&&e.hasOwnProperty("viewportPrefix")&&(t.viewportPrefix=e.viewportPrefix),void 0!==e.inputBox&&null!==e.inputBox&&e.hasOwnProperty("inputBox")){t.inputBox=[];for(var o=0;o<e.inputBox.length;++o)t.inputBox[o]=n[4].toObject(e.inputBox[o],r)}return void 0!==e.requirement&&null!==e.requirement&&e.hasOwnProperty("requirement")&&(t.requirement=n[5].toObject(e.requirement,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.InputBoxInfo=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.label=null,e.prototype.queryVerb="",e.prototype.queryPrepend="";var n={0:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.SearchTabProto.InputBoxInfo;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.label=n[0].decode(e,e.uint32());break;case 2:o.queryVerb=e.string();break;case 3:o.queryPrepend=e.string();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r=n[0].verify(e.label);return r?"label."+r:s.isString(e.queryVerb)?void 0===e.queryPrepend||s.isString(e.queryPrepend)?null:"queryPrepend: string expected":"queryVerb: string expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.SearchTabProto.InputBoxInfo)return e;var r=new c.keyhole.dbroot.SearchTabProto.InputBoxInfo;if(void 0!==e.label&&null!==e.label){if("object"!=typeof e.label)throw TypeError(".keyhole.dbroot.SearchTabProto.InputBoxInfo.label: object expected");r.label=n[0].fromObject(e.label)}return void 0!==e.queryVerb&&null!==e.queryVerb&&(r.queryVerb=String(e.queryVerb)),void 0!==e.queryPrepend&&null!==e.queryPrepend&&(r.queryPrepend=String(e.queryPrepend)),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.label=null,t.queryVerb="",t.queryPrepend=""),void 0!==e.label&&null!==e.label&&e.hasOwnProperty("label")&&(t.label=n[0].toObject(e.label,r)),void 0!==e.queryVerb&&null!==e.queryVerb&&e.hasOwnProperty("queryVerb")&&(t.queryVerb=e.queryVerb),void 0!==e.queryPrepend&&null!==e.queryPrepend&&e.hasOwnProperty("queryPrepend")&&(t.queryPrepend=e.queryPrepend),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e}(),e.CobrandProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.logoUrl="",e.prototype.xCoord=null,e.prototype.yCoord=null,e.prototype.tiePoint=6,e.prototype.screenSize=0;var r,n={1:"keyhole.dbroot.CobrandProto.Coord",2:"keyhole.dbroot.CobrandProto.Coord",3:"keyhole.dbroot.CobrandProto.TiePoint"};function t(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.CobrandProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.logoUrl=e.string();break;case 2:o.xCoord=n[1].decode(e,e.uint32());break;case 3:o.yCoord=n[2].decode(e,e.uint32());break;case 4:o.tiePoint=e.uint32();break;case 5:o.screenSize=e.double();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isString(e.logoUrl))return"logoUrl: string expected";var r;if(void 0!==e.xCoord&&null!==e.xCoord&&(r=n[1].verify(e.xCoord)))return"xCoord."+r;if(void 0!==e.yCoord&&null!==e.yCoord&&(r=n[2].verify(e.yCoord)))return"yCoord."+r;if(void 0!==e.tiePoint)switch(e.tiePoint){default:return"tiePoint: enum value expected";case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:}return void 0!==e.screenSize&&"number"!=typeof e.screenSize?"screenSize: number expected":null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.CobrandProto)return e;var r=new c.keyhole.dbroot.CobrandProto;if(void 0!==e.logoUrl&&null!==e.logoUrl&&(r.logoUrl=String(e.logoUrl)),void 0!==e.xCoord&&null!==e.xCoord){if("object"!=typeof e.xCoord)throw TypeError(".keyhole.dbroot.CobrandProto.xCoord: object expected");r.xCoord=n[1].fromObject(e.xCoord)}if(void 0!==e.yCoord&&null!==e.yCoord){if("object"!=typeof e.yCoord)throw TypeError(".keyhole.dbroot.CobrandProto.yCoord: object expected");r.yCoord=n[2].fromObject(e.yCoord)}switch(e.tiePoint){case"TOP_LEFT":case 0:r.tiePoint=0;break;case"TOP_CENTER":case 1:r.tiePoint=1;break;case"TOP_RIGHT":case 2:r.tiePoint=2;break;case"MID_LEFT":case 3:r.tiePoint=3;break;case"MID_CENTER":case 4:r.tiePoint=4;break;case"MID_RIGHT":case 5:r.tiePoint=5;break;case"BOTTOM_LEFT":case 6:r.tiePoint=6;break;case"BOTTOM_CENTER":case 7:r.tiePoint=7;break;case"BOTTOM_RIGHT":case 8:r.tiePoint=8}return void 0!==e.screenSize&&null!==e.screenSize&&(r.screenSize=Number(e.screenSize)),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.logoUrl="",t.xCoord=null,t.yCoord=null,t.tiePoint=r.enums===String?"BOTTOM_LEFT":6,t.screenSize=0),void 0!==e.logoUrl&&null!==e.logoUrl&&e.hasOwnProperty("logoUrl")&&(t.logoUrl=e.logoUrl),void 0!==e.xCoord&&null!==e.xCoord&&e.hasOwnProperty("xCoord")&&(t.xCoord=n[1].toObject(e.xCoord,r)),void 0!==e.yCoord&&null!==e.yCoord&&e.hasOwnProperty("yCoord")&&(t.yCoord=n[2].toObject(e.yCoord,r)),void 0!==e.tiePoint&&null!==e.tiePoint&&e.hasOwnProperty("tiePoint")&&(t.tiePoint=r.enums===String?n[3][e.tiePoint]:e.tiePoint),void 0!==e.screenSize&&null!==e.screenSize&&e.hasOwnProperty("screenSize")&&(t.screenSize=e.screenSize),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.Coord=(t.prototype.value=0,t.prototype.isRelative=!1,t.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.CobrandProto.Coord;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.value=e.double();break;case 2:o.isRelative=e.bool();break;default:e.skipType(7&a)}}return o},t.verify=function(e){return"object"!=typeof e||null===e?"object expected":"number"!=typeof e.value?"value: number expected":void 0!==e.isRelative&&"boolean"!=typeof e.isRelative?"isRelative: boolean expected":null},t.from=t.fromObject=function(e){if(e instanceof c.keyhole.dbroot.CobrandProto.Coord)return e;var r=new c.keyhole.dbroot.CobrandProto.Coord;return void 0!==e.value&&null!==e.value&&(r.value=Number(e.value)),void 0!==e.isRelative&&null!==e.isRelative&&(r.isRelative=Boolean(e.isRelative)),r},t.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.value=0,t.isRelative=!1),void 0!==e.value&&null!==e.value&&e.hasOwnProperty("value")&&(t.value=e.value),void 0!==e.isRelative&&null!==e.isRelative&&e.hasOwnProperty("isRelative")&&(t.isRelative=e.isRelative),t},t.prototype.toObject=function(e){return this.constructor.toObject(this,e)},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t),e.TiePoint=((r=Object.create({})).TOP_LEFT=0,r.TOP_CENTER=1,r.TOP_RIGHT=2,r.MID_LEFT=3,r.MID_CENTER=4,r.MID_RIGHT=5,r.BOTTOM_LEFT=6,r.BOTTOM_CENTER=7,r.BOTTOM_RIGHT=8,r),e}(),e.DatabaseDescriptionProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.databaseName=null,e.prototype.databaseUrl="";var n={0:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.DatabaseDescriptionProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.databaseName=n[0].decode(e,e.uint32());break;case 2:o.databaseUrl=e.string();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.databaseName&&null!==e.databaseName){var r=n[0].verify(e.databaseName);if(r)return"databaseName."+r}return s.isString(e.databaseUrl)?null:"databaseUrl: string expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.DatabaseDescriptionProto)return e;var r=new c.keyhole.dbroot.DatabaseDescriptionProto;if(void 0!==e.databaseName&&null!==e.databaseName){if("object"!=typeof e.databaseName)throw TypeError(".keyhole.dbroot.DatabaseDescriptionProto.databaseName: object expected");r.databaseName=n[0].fromObject(e.databaseName)}return void 0!==e.databaseUrl&&null!==e.databaseUrl&&(r.databaseUrl=String(e.databaseUrl)),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.databaseName=null,t.databaseUrl=""),void 0!==e.databaseName&&null!==e.databaseName&&e.hasOwnProperty("databaseName")&&(t.databaseName=n[0].toObject(e.databaseName,r)),void 0!==e.databaseUrl&&null!==e.databaseUrl&&e.hasOwnProperty("databaseUrl")&&(t.databaseUrl=e.databaseUrl),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.ConfigScriptProto=(g.prototype.scriptName="",g.prototype.scriptData="",g.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.ConfigScriptProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.scriptName=e.string();break;case 2:o.scriptData=e.string();break;default:e.skipType(7&a)}}return o},g.verify=function(e){return"object"!=typeof e||null===e?"object expected":s.isString(e.scriptName)?s.isString(e.scriptData)?null:"scriptData: string expected":"scriptName: string expected"},g.from=g.fromObject=function(e){if(e instanceof c.keyhole.dbroot.ConfigScriptProto)return e;var r=new c.keyhole.dbroot.ConfigScriptProto;return void 0!==e.scriptName&&null!==e.scriptName&&(r.scriptName=String(e.scriptName)),void 0!==e.scriptData&&null!==e.scriptData&&(r.scriptData=String(e.scriptData)),r},g.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.scriptName="",t.scriptData=""),void 0!==e.scriptName&&null!==e.scriptName&&e.hasOwnProperty("scriptName")&&(t.scriptName=e.scriptName),void 0!==e.scriptData&&null!==e.scriptData&&e.hasOwnProperty("scriptData")&&(t.scriptData=e.scriptData),t},g.prototype.toObject=function(e){return this.constructor.toObject(this,e)},g.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},g),e.SwoopParamsProto=(P.prototype.startDistInMeters=0,P.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.SwoopParamsProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.startDistInMeters=e.double():e.skipType(7&a)}return o},P.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.startDistInMeters&&"number"!=typeof e.startDistInMeters?"startDistInMeters: number expected":null},P.from=P.fromObject=function(e){if(e instanceof c.keyhole.dbroot.SwoopParamsProto)return e;var r=new c.keyhole.dbroot.SwoopParamsProto;return void 0!==e.startDistInMeters&&null!==e.startDistInMeters&&(r.startDistInMeters=Number(e.startDistInMeters)),r},P.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.startDistInMeters=0),void 0!==e.startDistInMeters&&null!==e.startDistInMeters&&e.hasOwnProperty("startDistInMeters")&&(t.startDistInMeters=e.startDistInMeters),t},P.prototype.toObject=function(e){return this.constructor.toObject(this,e)},P.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},P),e.PostingServerProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.name=null,e.prototype.baseUrl=null,e.prototype.postWizardPath=null,e.prototype.fileSubmitPath=null;var n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.StringIdOrValueProto",2:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.PostingServerProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.name=n[0].decode(e,e.uint32());break;case 2:o.baseUrl=n[1].decode(e,e.uint32());break;case 3:o.postWizardPath=n[2].decode(e,e.uint32());break;case 4:o.fileSubmitPath=n[3].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r;if(void 0!==e.name&&null!==e.name&&(r=n[0].verify(e.name)))return"name."+r;if(void 0!==e.baseUrl&&null!==e.baseUrl&&(r=n[1].verify(e.baseUrl)))return"baseUrl."+r;if(void 0!==e.postWizardPath&&null!==e.postWizardPath&&(r=n[2].verify(e.postWizardPath)))return"postWizardPath."+r;if(void 0!==e.fileSubmitPath&&null!==e.fileSubmitPath&&(r=n[3].verify(e.fileSubmitPath)))return"fileSubmitPath."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.PostingServerProto)return e;var r=new c.keyhole.dbroot.PostingServerProto;if(void 0!==e.name&&null!==e.name){if("object"!=typeof e.name)throw TypeError(".keyhole.dbroot.PostingServerProto.name: object expected");r.name=n[0].fromObject(e.name)}if(void 0!==e.baseUrl&&null!==e.baseUrl){if("object"!=typeof e.baseUrl)throw TypeError(".keyhole.dbroot.PostingServerProto.baseUrl: object expected");r.baseUrl=n[1].fromObject(e.baseUrl)}if(void 0!==e.postWizardPath&&null!==e.postWizardPath){if("object"!=typeof e.postWizardPath)throw TypeError(".keyhole.dbroot.PostingServerProto.postWizardPath: object expected");r.postWizardPath=n[2].fromObject(e.postWizardPath)}if(void 0!==e.fileSubmitPath&&null!==e.fileSubmitPath){if("object"!=typeof e.fileSubmitPath)throw TypeError(".keyhole.dbroot.PostingServerProto.fileSubmitPath: object expected");r.fileSubmitPath=n[3].fromObject(e.fileSubmitPath)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.name=null,t.baseUrl=null,t.postWizardPath=null,t.fileSubmitPath=null),void 0!==e.name&&null!==e.name&&e.hasOwnProperty("name")&&(t.name=n[0].toObject(e.name,r)),void 0!==e.baseUrl&&null!==e.baseUrl&&e.hasOwnProperty("baseUrl")&&(t.baseUrl=n[1].toObject(e.baseUrl,r)),void 0!==e.postWizardPath&&null!==e.postWizardPath&&e.hasOwnProperty("postWizardPath")&&(t.postWizardPath=n[2].toObject(e.postWizardPath,r)),void 0!==e.fileSubmitPath&&null!==e.fileSubmitPath&&e.hasOwnProperty("fileSubmitPath")&&(t.fileSubmitPath=n[3].toObject(e.fileSubmitPath,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.PlanetaryDatabaseProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null,e.prototype.name=null;var n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.PlanetaryDatabaseProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.url=n[0].decode(e,e.uint32());break;case 2:o.name=n[1].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r=n[0].verify(e.url);return r?"url."+r:(r=n[1].verify(e.name))?"name."+r:null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.PlanetaryDatabaseProto)return e;var r=new c.keyhole.dbroot.PlanetaryDatabaseProto;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.PlanetaryDatabaseProto.url: object expected");r.url=n[0].fromObject(e.url)}if(void 0!==e.name&&null!==e.name){if("object"!=typeof e.name)throw TypeError(".keyhole.dbroot.PlanetaryDatabaseProto.name: object expected");r.name=n[1].fromObject(e.name)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null,t.name=null),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),void 0!==e.name&&null!==e.name&&e.hasOwnProperty("name")&&(t.name=n[1].toObject(e.name,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.LogServerProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null,e.prototype.enable=!1,e.prototype.throttlingFactor=1;var n={0:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.LogServerProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.url=n[0].decode(e,e.uint32());break;case 2:o.enable=e.bool();break;case 3:o.throttlingFactor=e.int32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.url&&null!==e.url){var r=n[0].verify(e.url);if(r)return"url."+r}return void 0!==e.enable&&"boolean"!=typeof e.enable?"enable: boolean expected":void 0===e.throttlingFactor||s.isInteger(e.throttlingFactor)?null:"throttlingFactor: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.LogServerProto)return e;var r=new c.keyhole.dbroot.LogServerProto;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.LogServerProto.url: object expected");r.url=n[0].fromObject(e.url)}return void 0!==e.enable&&null!==e.enable&&(r.enable=Boolean(e.enable)),void 0!==e.throttlingFactor&&null!==e.throttlingFactor&&(r.throttlingFactor=0|e.throttlingFactor),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null,t.enable=!1,t.throttlingFactor=1),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),void 0!==e.enable&&null!==e.enable&&e.hasOwnProperty("enable")&&(t.enable=e.enable),void 0!==e.throttlingFactor&&null!==e.throttlingFactor&&e.hasOwnProperty("throttlingFactor")&&(t.throttlingFactor=e.throttlingFactor),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.EndSnippetProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.model=null,e.prototype.authServerUrl=null,e.prototype.disableAuthentication=!1,e.prototype.mfeDomains=s.emptyArray,e.prototype.mfeLangParam="hl=$5Bhl5D",e.prototype.adsUrlPatterns="",e.prototype.reverseGeocoderUrl=null,e.prototype.reverseGeocoderProtocolVersion=3,e.prototype.skyDatabaseIsAvailable=!0,e.prototype.skyDatabaseUrl=null,e.prototype.defaultWebPageIntlUrl=null,e.prototype.numStartUpTips=17,e.prototype.startUpTipsUrl=null,e.prototype.numProStartUpTips=0,e.prototype.proStartUpTipsUrl=null,e.prototype.startupTipsIntlUrl=null,e.prototype.userGuideIntlUrl=null,e.prototype.supportCenterIntlUrl=null,e.prototype.businessListingIntlUrl=null,e.prototype.supportAnswerIntlUrl=null,e.prototype.supportTopicIntlUrl=null,e.prototype.supportRequestIntlUrl=null,e.prototype.earthIntlUrl=null,e.prototype.addContentUrl=null,e.prototype.sketchupNotInstalledUrl=null,e.prototype.sketchupErrorUrl=null,e.prototype.freeLicenseUrl=null,e.prototype.proLicenseUrl=null,e.prototype.tutorialUrl=null,e.prototype.keyboardShortcutsUrl=null,e.prototype.releaseNotesUrl=null,e.prototype.hideUserData=!1,e.prototype.useGeLogo=!0,e.prototype.dioramaDescriptionUrlBase=null,e.prototype.dioramaDefaultColor=4291281607,e.prototype.dioramaBlacklistUrl=null,e.prototype.clientOptions=null,e.prototype.fetchingOptions=null,e.prototype.timeMachineOptions=null,e.prototype.csiOptions=null,e.prototype.searchTab=s.emptyArray,e.prototype.cobrandInfo=s.emptyArray,e.prototype.validDatabase=s.emptyArray,e.prototype.configScript=s.emptyArray,e.prototype.deauthServerUrl=null,e.prototype.swoopParameters=null,e.prototype.bbsServerInfo=null,e.prototype.dataErrorServerInfo=null,e.prototype.planetaryDatabase=s.emptyArray,e.prototype.logServer=null,e.prototype.autopiaOptions=null,e.prototype.searchConfig=null,e.prototype.searchInfo=null,e.prototype.elevationServiceBaseUrl="http://maps.google.com/maps/api/elevation/",e.prototype.elevationProfileQueryDelay=500,e.prototype.proUpgradeUrl=null,e.prototype.earthCommunityUrl=null,e.prototype.googleMapsUrl=null,e.prototype.sharingUrl=null,e.prototype.privacyPolicyUrl=null,e.prototype.doGplusUserCheck=!1,e.prototype.rocktreeDataProto=null,e.prototype.filmstripConfig=s.emptyArray,e.prototype.showSigninButton=!1,e.prototype.proMeasureUpsellUrl=null,e.prototype.proPrintUpsellUrl=null,e.prototype.starDataProto=null,e.prototype.feedbackUrl=null,e.prototype.oauth2LoginUrl=null;var n={0:"keyhole.dbroot.PlanetModelProto",1:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.MfeDomainFeaturesProto",6:"keyhole.dbroot.StringIdOrValueProto",9:"keyhole.dbroot.StringIdOrValueProto",10:"keyhole.dbroot.StringIdOrValueProto",12:"keyhole.dbroot.StringIdOrValueProto",14:"keyhole.dbroot.StringIdOrValueProto",15:"keyhole.dbroot.StringIdOrValueProto",16:"keyhole.dbroot.StringIdOrValueProto",17:"keyhole.dbroot.StringIdOrValueProto",18:"keyhole.dbroot.StringIdOrValueProto",19:"keyhole.dbroot.StringIdOrValueProto",20:"keyhole.dbroot.StringIdOrValueProto",21:"keyhole.dbroot.StringIdOrValueProto",22:"keyhole.dbroot.StringIdOrValueProto",23:"keyhole.dbroot.StringIdOrValueProto",24:"keyhole.dbroot.StringIdOrValueProto",25:"keyhole.dbroot.StringIdOrValueProto",26:"keyhole.dbroot.StringIdOrValueProto",27:"keyhole.dbroot.StringIdOrValueProto",28:"keyhole.dbroot.StringIdOrValueProto",29:"keyhole.dbroot.StringIdOrValueProto",30:"keyhole.dbroot.StringIdOrValueProto",33:"keyhole.dbroot.StringIdOrValueProto",35:"keyhole.dbroot.StringIdOrValueProto",36:"keyhole.dbroot.ClientOptionsProto",37:"keyhole.dbroot.FetchingOptionsProto",38:"keyhole.dbroot.TimeMachineOptionsProto",39:"keyhole.dbroot.CSIOptionsProto",40:"keyhole.dbroot.SearchTabProto",41:"keyhole.dbroot.CobrandProto",42:"keyhole.dbroot.DatabaseDescriptionProto",43:"keyhole.dbroot.ConfigScriptProto",44:"keyhole.dbroot.StringIdOrValueProto",45:"keyhole.dbroot.SwoopParamsProto",46:"keyhole.dbroot.PostingServerProto",47:"keyhole.dbroot.PostingServerProto",48:"keyhole.dbroot.PlanetaryDatabaseProto",49:"keyhole.dbroot.LogServerProto",50:"keyhole.dbroot.AutopiaOptionsProto",51:"keyhole.dbroot.EndSnippetProto.SearchConfigProto",52:"keyhole.dbroot.EndSnippetProto.SearchInfoProto",55:"keyhole.dbroot.StringIdOrValueProto",56:"keyhole.dbroot.StringIdOrValueProto",57:"keyhole.dbroot.StringIdOrValueProto",58:"keyhole.dbroot.StringIdOrValueProto",59:"keyhole.dbroot.StringIdOrValueProto",61:"keyhole.dbroot.EndSnippetProto.RockTreeDataProto",62:"keyhole.dbroot.EndSnippetProto.FilmstripConfigProto",64:"keyhole.dbroot.StringIdOrValueProto",65:"keyhole.dbroot.StringIdOrValueProto",66:"keyhole.dbroot.EndSnippetProto.StarDataProto",67:"keyhole.dbroot.StringIdOrValueProto",68:"keyhole.dbroot.StringIdOrValueProto"};function r(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.model=n[0].decode(e,e.uint32());break;case 2:o.authServerUrl=n[1].decode(e,e.uint32());break;case 3:o.disableAuthentication=e.bool();break;case 4:o.mfeDomains&&o.mfeDomains.length||(o.mfeDomains=[]),o.mfeDomains.push(n[3].decode(e,e.uint32()));break;case 5:o.mfeLangParam=e.string();break;case 6:o.adsUrlPatterns=e.string();break;case 7:o.reverseGeocoderUrl=n[6].decode(e,e.uint32());break;case 8:o.reverseGeocoderProtocolVersion=e.int32();break;case 9:o.skyDatabaseIsAvailable=e.bool();break;case 10:o.skyDatabaseUrl=n[9].decode(e,e.uint32());break;case 11:o.defaultWebPageIntlUrl=n[10].decode(e,e.uint32());break;case 12:o.numStartUpTips=e.int32();break;case 13:o.startUpTipsUrl=n[12].decode(e,e.uint32());break;case 51:o.numProStartUpTips=e.int32();break;case 52:o.proStartUpTipsUrl=n[14].decode(e,e.uint32());break;case 64:o.startupTipsIntlUrl=n[15].decode(e,e.uint32());break;case 14:o.userGuideIntlUrl=n[16].decode(e,e.uint32());break;case 15:o.supportCenterIntlUrl=n[17].decode(e,e.uint32());break;case 16:o.businessListingIntlUrl=n[18].decode(e,e.uint32());break;case 17:o.supportAnswerIntlUrl=n[19].decode(e,e.uint32());break;case 18:o.supportTopicIntlUrl=n[20].decode(e,e.uint32());break;case 19:o.supportRequestIntlUrl=n[21].decode(e,e.uint32());break;case 20:o.earthIntlUrl=n[22].decode(e,e.uint32());break;case 21:o.addContentUrl=n[23].decode(e,e.uint32());break;case 22:o.sketchupNotInstalledUrl=n[24].decode(e,e.uint32());break;case 23:o.sketchupErrorUrl=n[25].decode(e,e.uint32());break;case 24:o.freeLicenseUrl=n[26].decode(e,e.uint32());break;case 25:o.proLicenseUrl=n[27].decode(e,e.uint32());break;case 48:o.tutorialUrl=n[28].decode(e,e.uint32());break;case 49:o.keyboardShortcutsUrl=n[29].decode(e,e.uint32());break;case 50:o.releaseNotesUrl=n[30].decode(e,e.uint32());break;case 26:o.hideUserData=e.bool();break;case 27:o.useGeLogo=e.bool();break;case 28:o.dioramaDescriptionUrlBase=n[33].decode(e,e.uint32());break;case 29:o.dioramaDefaultColor=e.uint32();break;case 53:o.dioramaBlacklistUrl=n[35].decode(e,e.uint32());break;case 30:o.clientOptions=n[36].decode(e,e.uint32());break;case 31:o.fetchingOptions=n[37].decode(e,e.uint32());break;case 32:o.timeMachineOptions=n[38].decode(e,e.uint32());break;case 33:o.csiOptions=n[39].decode(e,e.uint32());break;case 34:o.searchTab&&o.searchTab.length||(o.searchTab=[]),o.searchTab.push(n[40].decode(e,e.uint32()));break;case 35:o.cobrandInfo&&o.cobrandInfo.length||(o.cobrandInfo=[]),o.cobrandInfo.push(n[41].decode(e,e.uint32()));break;case 36:o.validDatabase&&o.validDatabase.length||(o.validDatabase=[]),o.validDatabase.push(n[42].decode(e,e.uint32()));break;case 37:o.configScript&&o.configScript.length||(o.configScript=[]),o.configScript.push(n[43].decode(e,e.uint32()));break;case 38:o.deauthServerUrl=n[44].decode(e,e.uint32());break;case 39:o.swoopParameters=n[45].decode(e,e.uint32());break;case 40:o.bbsServerInfo=n[46].decode(e,e.uint32());break;case 41:o.dataErrorServerInfo=n[47].decode(e,e.uint32());break;case 42:o.planetaryDatabase&&o.planetaryDatabase.length||(o.planetaryDatabase=[]),o.planetaryDatabase.push(n[48].decode(e,e.uint32()));break;case 43:o.logServer=n[49].decode(e,e.uint32());break;case 44:o.autopiaOptions=n[50].decode(e,e.uint32());break;case 54:o.searchConfig=n[51].decode(e,e.uint32());break;case 45:o.searchInfo=n[52].decode(e,e.uint32());break;case 46:o.elevationServiceBaseUrl=e.string();break;case 47:o.elevationProfileQueryDelay=e.int32();break;case 55:o.proUpgradeUrl=n[55].decode(e,e.uint32());break;case 56:o.earthCommunityUrl=n[56].decode(e,e.uint32());break;case 57:o.googleMapsUrl=n[57].decode(e,e.uint32());break;case 58:o.sharingUrl=n[58].decode(e,e.uint32());break;case 59:o.privacyPolicyUrl=n[59].decode(e,e.uint32());break;case 60:o.doGplusUserCheck=e.bool();break;case 61:o.rocktreeDataProto=n[61].decode(e,e.uint32());break;case 62:o.filmstripConfig&&o.filmstripConfig.length||(o.filmstripConfig=[]),o.filmstripConfig.push(n[62].decode(e,e.uint32()));break;case 63:o.showSigninButton=e.bool();break;case 65:o.proMeasureUpsellUrl=n[64].decode(e,e.uint32());break;case 66:o.proPrintUpsellUrl=n[65].decode(e,e.uint32());break;case 67:o.starDataProto=n[66].decode(e,e.uint32());break;case 68:o.feedbackUrl=n[67].decode(e,e.uint32());break;case 69:o.oauth2LoginUrl=n[68].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.model&&null!==e.model&&(t=n[0].verify(e.model)))return"model."+t;if(void 0!==e.authServerUrl&&null!==e.authServerUrl&&(t=n[1].verify(e.authServerUrl)))return"authServerUrl."+t;if(void 0!==e.disableAuthentication&&"boolean"!=typeof e.disableAuthentication)return"disableAuthentication: boolean expected";if(void 0!==e.mfeDomains){if(!Array.isArray(e.mfeDomains))return"mfeDomains: array expected";for(var r=0;r<e.mfeDomains.length;++r)if(t=n[3].verify(e.mfeDomains[r]))return"mfeDomains."+t}if(void 0!==e.mfeLangParam&&!s.isString(e.mfeLangParam))return"mfeLangParam: string expected";if(void 0!==e.adsUrlPatterns&&!s.isString(e.adsUrlPatterns))return"adsUrlPatterns: string expected";if(void 0!==e.reverseGeocoderUrl&&null!==e.reverseGeocoderUrl&&(t=n[6].verify(e.reverseGeocoderUrl)))return"reverseGeocoderUrl."+t;if(void 0!==e.reverseGeocoderProtocolVersion&&!s.isInteger(e.reverseGeocoderProtocolVersion))return"reverseGeocoderProtocolVersion: integer expected";if(void 0!==e.skyDatabaseIsAvailable&&"boolean"!=typeof e.skyDatabaseIsAvailable)return"skyDatabaseIsAvailable: boolean expected";if(void 0!==e.skyDatabaseUrl&&null!==e.skyDatabaseUrl&&(t=n[9].verify(e.skyDatabaseUrl)))return"skyDatabaseUrl."+t;if(void 0!==e.defaultWebPageIntlUrl&&null!==e.defaultWebPageIntlUrl&&(t=n[10].verify(e.defaultWebPageIntlUrl)))return"defaultWebPageIntlUrl."+t;if(void 0!==e.numStartUpTips&&!s.isInteger(e.numStartUpTips))return"numStartUpTips: integer expected";if(void 0!==e.startUpTipsUrl&&null!==e.startUpTipsUrl&&(t=n[12].verify(e.startUpTipsUrl)))return"startUpTipsUrl."+t;if(void 0!==e.numProStartUpTips&&!s.isInteger(e.numProStartUpTips))return"numProStartUpTips: integer expected";if(void 0!==e.proStartUpTipsUrl&&null!==e.proStartUpTipsUrl&&(t=n[14].verify(e.proStartUpTipsUrl)))return"proStartUpTipsUrl."+t;if(void 0!==e.startupTipsIntlUrl&&null!==e.startupTipsIntlUrl&&(t=n[15].verify(e.startupTipsIntlUrl)))return"startupTipsIntlUrl."+t;if(void 0!==e.userGuideIntlUrl&&null!==e.userGuideIntlUrl&&(t=n[16].verify(e.userGuideIntlUrl)))return"userGuideIntlUrl."+t;if(void 0!==e.supportCenterIntlUrl&&null!==e.supportCenterIntlUrl&&(t=n[17].verify(e.supportCenterIntlUrl)))return"supportCenterIntlUrl."+t;if(void 0!==e.businessListingIntlUrl&&null!==e.businessListingIntlUrl&&(t=n[18].verify(e.businessListingIntlUrl)))return"businessListingIntlUrl."+t;if(void 0!==e.supportAnswerIntlUrl&&null!==e.supportAnswerIntlUrl&&(t=n[19].verify(e.supportAnswerIntlUrl)))return"supportAnswerIntlUrl."+t;if(void 0!==e.supportTopicIntlUrl&&null!==e.supportTopicIntlUrl&&(t=n[20].verify(e.supportTopicIntlUrl)))return"supportTopicIntlUrl."+t;if(void 0!==e.supportRequestIntlUrl&&null!==e.supportRequestIntlUrl&&(t=n[21].verify(e.supportRequestIntlUrl)))return"supportRequestIntlUrl."+t;if(void 0!==e.earthIntlUrl&&null!==e.earthIntlUrl&&(t=n[22].verify(e.earthIntlUrl)))return"earthIntlUrl."+t;if(void 0!==e.addContentUrl&&null!==e.addContentUrl&&(t=n[23].verify(e.addContentUrl)))return"addContentUrl."+t;if(void 0!==e.sketchupNotInstalledUrl&&null!==e.sketchupNotInstalledUrl&&(t=n[24].verify(e.sketchupNotInstalledUrl)))return"sketchupNotInstalledUrl."+t;if(void 0!==e.sketchupErrorUrl&&null!==e.sketchupErrorUrl&&(t=n[25].verify(e.sketchupErrorUrl)))return"sketchupErrorUrl."+t;if(void 0!==e.freeLicenseUrl&&null!==e.freeLicenseUrl&&(t=n[26].verify(e.freeLicenseUrl)))return"freeLicenseUrl."+t;if(void 0!==e.proLicenseUrl&&null!==e.proLicenseUrl&&(t=n[27].verify(e.proLicenseUrl)))return"proLicenseUrl."+t;if(void 0!==e.tutorialUrl&&null!==e.tutorialUrl&&(t=n[28].verify(e.tutorialUrl)))return"tutorialUrl."+t;if(void 0!==e.keyboardShortcutsUrl&&null!==e.keyboardShortcutsUrl&&(t=n[29].verify(e.keyboardShortcutsUrl)))return"keyboardShortcutsUrl."+t;if(void 0!==e.releaseNotesUrl&&null!==e.releaseNotesUrl&&(t=n[30].verify(e.releaseNotesUrl)))return"releaseNotesUrl."+t;if(void 0!==e.hideUserData&&"boolean"!=typeof e.hideUserData)return"hideUserData: boolean expected";if(void 0!==e.useGeLogo&&"boolean"!=typeof e.useGeLogo)return"useGeLogo: boolean expected";if(void 0!==e.dioramaDescriptionUrlBase&&null!==e.dioramaDescriptionUrlBase&&(t=n[33].verify(e.dioramaDescriptionUrlBase)))return"dioramaDescriptionUrlBase."+t;if(void 0!==e.dioramaDefaultColor&&!s.isInteger(e.dioramaDefaultColor))return"dioramaDefaultColor: integer expected";if(void 0!==e.dioramaBlacklistUrl&&null!==e.dioramaBlacklistUrl&&(t=n[35].verify(e.dioramaBlacklistUrl)))return"dioramaBlacklistUrl."+t;if(void 0!==e.clientOptions&&null!==e.clientOptions&&(t=n[36].verify(e.clientOptions)))return"clientOptions."+t;if(void 0!==e.fetchingOptions&&null!==e.fetchingOptions&&(t=n[37].verify(e.fetchingOptions)))return"fetchingOptions."+t;if(void 0!==e.timeMachineOptions&&null!==e.timeMachineOptions&&(t=n[38].verify(e.timeMachineOptions)))return"timeMachineOptions."+t;if(void 0!==e.csiOptions&&null!==e.csiOptions&&(t=n[39].verify(e.csiOptions)))return"csiOptions."+t;if(void 0!==e.searchTab){if(!Array.isArray(e.searchTab))return"searchTab: array expected";for(r=0;r<e.searchTab.length;++r)if(t=n[40].verify(e.searchTab[r]))return"searchTab."+t}if(void 0!==e.cobrandInfo){if(!Array.isArray(e.cobrandInfo))return"cobrandInfo: array expected";for(r=0;r<e.cobrandInfo.length;++r)if(t=n[41].verify(e.cobrandInfo[r]))return"cobrandInfo."+t}if(void 0!==e.validDatabase){if(!Array.isArray(e.validDatabase))return"validDatabase: array expected";for(r=0;r<e.validDatabase.length;++r)if(t=n[42].verify(e.validDatabase[r]))return"validDatabase."+t}if(void 0!==e.configScript){if(!Array.isArray(e.configScript))return"configScript: array expected";for(r=0;r<e.configScript.length;++r)if(t=n[43].verify(e.configScript[r]))return"configScript."+t}if(void 0!==e.deauthServerUrl&&null!==e.deauthServerUrl&&(t=n[44].verify(e.deauthServerUrl)))return"deauthServerUrl."+t;if(void 0!==e.swoopParameters&&null!==e.swoopParameters&&(t=n[45].verify(e.swoopParameters)))return"swoopParameters."+t;if(void 0!==e.bbsServerInfo&&null!==e.bbsServerInfo&&(t=n[46].verify(e.bbsServerInfo)))return"bbsServerInfo."+t;if(void 0!==e.dataErrorServerInfo&&null!==e.dataErrorServerInfo&&(t=n[47].verify(e.dataErrorServerInfo)))return"dataErrorServerInfo."+t;if(void 0!==e.planetaryDatabase){if(!Array.isArray(e.planetaryDatabase))return"planetaryDatabase: array expected";for(r=0;r<e.planetaryDatabase.length;++r)if(t=n[48].verify(e.planetaryDatabase[r]))return"planetaryDatabase."+t}if(void 0!==e.logServer&&null!==e.logServer&&(t=n[49].verify(e.logServer)))return"logServer."+t;if(void 0!==e.autopiaOptions&&null!==e.autopiaOptions&&(t=n[50].verify(e.autopiaOptions)))return"autopiaOptions."+t;if(void 0!==e.searchConfig&&null!==e.searchConfig&&(t=n[51].verify(e.searchConfig)))return"searchConfig."+t;if(void 0!==e.searchInfo&&null!==e.searchInfo&&(t=n[52].verify(e.searchInfo)))return"searchInfo."+t;if(void 0!==e.elevationServiceBaseUrl&&!s.isString(e.elevationServiceBaseUrl))return"elevationServiceBaseUrl: string expected";if(void 0!==e.elevationProfileQueryDelay&&!s.isInteger(e.elevationProfileQueryDelay))return"elevationProfileQueryDelay: integer expected";if(void 0!==e.proUpgradeUrl&&null!==e.proUpgradeUrl&&(t=n[55].verify(e.proUpgradeUrl)))return"proUpgradeUrl."+t;if(void 0!==e.earthCommunityUrl&&null!==e.earthCommunityUrl&&(t=n[56].verify(e.earthCommunityUrl)))return"earthCommunityUrl."+t;if(void 0!==e.googleMapsUrl&&null!==e.googleMapsUrl&&(t=n[57].verify(e.googleMapsUrl)))return"googleMapsUrl."+t;if(void 0!==e.sharingUrl&&null!==e.sharingUrl&&(t=n[58].verify(e.sharingUrl)))return"sharingUrl."+t;if(void 0!==e.privacyPolicyUrl&&null!==e.privacyPolicyUrl&&(t=n[59].verify(e.privacyPolicyUrl)))return"privacyPolicyUrl."+t;if(void 0!==e.doGplusUserCheck&&"boolean"!=typeof e.doGplusUserCheck)return"doGplusUserCheck: boolean expected";if(void 0!==e.rocktreeDataProto&&null!==e.rocktreeDataProto&&(t=n[61].verify(e.rocktreeDataProto)))return"rocktreeDataProto."+t;if(void 0!==e.filmstripConfig){if(!Array.isArray(e.filmstripConfig))return"filmstripConfig: array expected";for(var t,r=0;r<e.filmstripConfig.length;++r)if(t=n[62].verify(e.filmstripConfig[r]))return"filmstripConfig."+t}if(void 0!==e.showSigninButton&&"boolean"!=typeof e.showSigninButton)return"showSigninButton: boolean expected";if(void 0!==e.proMeasureUpsellUrl&&null!==e.proMeasureUpsellUrl&&(t=n[64].verify(e.proMeasureUpsellUrl)))return"proMeasureUpsellUrl."+t;if(void 0!==e.proPrintUpsellUrl&&null!==e.proPrintUpsellUrl&&(t=n[65].verify(e.proPrintUpsellUrl)))return"proPrintUpsellUrl."+t;if(void 0!==e.starDataProto&&null!==e.starDataProto&&(t=n[66].verify(e.starDataProto)))return"starDataProto."+t;if(void 0!==e.feedbackUrl&&null!==e.feedbackUrl&&(t=n[67].verify(e.feedbackUrl)))return"feedbackUrl."+t;if(void 0!==e.oauth2LoginUrl&&null!==e.oauth2LoginUrl&&(t=n[68].verify(e.oauth2LoginUrl)))return"oauth2LoginUrl."+t;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto;if(void 0!==e.model&&null!==e.model){if("object"!=typeof e.model)throw TypeError(".keyhole.dbroot.EndSnippetProto.model: object expected");r.model=n[0].fromObject(e.model)}if(void 0!==e.authServerUrl&&null!==e.authServerUrl){if("object"!=typeof e.authServerUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.authServerUrl: object expected");r.authServerUrl=n[1].fromObject(e.authServerUrl)}if(void 0!==e.disableAuthentication&&null!==e.disableAuthentication&&(r.disableAuthentication=Boolean(e.disableAuthentication)),e.mfeDomains){if(!Array.isArray(e.mfeDomains))throw TypeError(".keyhole.dbroot.EndSnippetProto.mfeDomains: array expected");r.mfeDomains=[];for(var t=0;t<e.mfeDomains.length;++t){if("object"!=typeof e.mfeDomains[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.mfeDomains: object expected");r.mfeDomains[t]=n[3].fromObject(e.mfeDomains[t])}}if(void 0!==e.mfeLangParam&&null!==e.mfeLangParam&&(r.mfeLangParam=String(e.mfeLangParam)),void 0!==e.adsUrlPatterns&&null!==e.adsUrlPatterns&&(r.adsUrlPatterns=String(e.adsUrlPatterns)),void 0!==e.reverseGeocoderUrl&&null!==e.reverseGeocoderUrl){if("object"!=typeof e.reverseGeocoderUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.reverseGeocoderUrl: object expected");r.reverseGeocoderUrl=n[6].fromObject(e.reverseGeocoderUrl)}if(void 0!==e.reverseGeocoderProtocolVersion&&null!==e.reverseGeocoderProtocolVersion&&(r.reverseGeocoderProtocolVersion=0|e.reverseGeocoderProtocolVersion),void 0!==e.skyDatabaseIsAvailable&&null!==e.skyDatabaseIsAvailable&&(r.skyDatabaseIsAvailable=Boolean(e.skyDatabaseIsAvailable)),void 0!==e.skyDatabaseUrl&&null!==e.skyDatabaseUrl){if("object"!=typeof e.skyDatabaseUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.skyDatabaseUrl: object expected");r.skyDatabaseUrl=n[9].fromObject(e.skyDatabaseUrl)}if(void 0!==e.defaultWebPageIntlUrl&&null!==e.defaultWebPageIntlUrl){if("object"!=typeof e.defaultWebPageIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.defaultWebPageIntlUrl: object expected");r.defaultWebPageIntlUrl=n[10].fromObject(e.defaultWebPageIntlUrl)}if(void 0!==e.numStartUpTips&&null!==e.numStartUpTips&&(r.numStartUpTips=0|e.numStartUpTips),void 0!==e.startUpTipsUrl&&null!==e.startUpTipsUrl){if("object"!=typeof e.startUpTipsUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.startUpTipsUrl: object expected");r.startUpTipsUrl=n[12].fromObject(e.startUpTipsUrl)}if(void 0!==e.numProStartUpTips&&null!==e.numProStartUpTips&&(r.numProStartUpTips=0|e.numProStartUpTips),void 0!==e.proStartUpTipsUrl&&null!==e.proStartUpTipsUrl){if("object"!=typeof e.proStartUpTipsUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.proStartUpTipsUrl: object expected");r.proStartUpTipsUrl=n[14].fromObject(e.proStartUpTipsUrl)}if(void 0!==e.startupTipsIntlUrl&&null!==e.startupTipsIntlUrl){if("object"!=typeof e.startupTipsIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.startupTipsIntlUrl: object expected");r.startupTipsIntlUrl=n[15].fromObject(e.startupTipsIntlUrl)}if(void 0!==e.userGuideIntlUrl&&null!==e.userGuideIntlUrl){if("object"!=typeof e.userGuideIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.userGuideIntlUrl: object expected");r.userGuideIntlUrl=n[16].fromObject(e.userGuideIntlUrl)}if(void 0!==e.supportCenterIntlUrl&&null!==e.supportCenterIntlUrl){if("object"!=typeof e.supportCenterIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.supportCenterIntlUrl: object expected");r.supportCenterIntlUrl=n[17].fromObject(e.supportCenterIntlUrl)}if(void 0!==e.businessListingIntlUrl&&null!==e.businessListingIntlUrl){if("object"!=typeof e.businessListingIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.businessListingIntlUrl: object expected");r.businessListingIntlUrl=n[18].fromObject(e.businessListingIntlUrl)}if(void 0!==e.supportAnswerIntlUrl&&null!==e.supportAnswerIntlUrl){if("object"!=typeof e.supportAnswerIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.supportAnswerIntlUrl: object expected");r.supportAnswerIntlUrl=n[19].fromObject(e.supportAnswerIntlUrl)}if(void 0!==e.supportTopicIntlUrl&&null!==e.supportTopicIntlUrl){if("object"!=typeof e.supportTopicIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.supportTopicIntlUrl: object expected");r.supportTopicIntlUrl=n[20].fromObject(e.supportTopicIntlUrl)}if(void 0!==e.supportRequestIntlUrl&&null!==e.supportRequestIntlUrl){if("object"!=typeof e.supportRequestIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.supportRequestIntlUrl: object expected");r.supportRequestIntlUrl=n[21].fromObject(e.supportRequestIntlUrl)}if(void 0!==e.earthIntlUrl&&null!==e.earthIntlUrl){if("object"!=typeof e.earthIntlUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.earthIntlUrl: object expected");r.earthIntlUrl=n[22].fromObject(e.earthIntlUrl)}if(void 0!==e.addContentUrl&&null!==e.addContentUrl){if("object"!=typeof e.addContentUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.addContentUrl: object expected");r.addContentUrl=n[23].fromObject(e.addContentUrl)}if(void 0!==e.sketchupNotInstalledUrl&&null!==e.sketchupNotInstalledUrl){if("object"!=typeof e.sketchupNotInstalledUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.sketchupNotInstalledUrl: object expected");r.sketchupNotInstalledUrl=n[24].fromObject(e.sketchupNotInstalledUrl)}if(void 0!==e.sketchupErrorUrl&&null!==e.sketchupErrorUrl){if("object"!=typeof e.sketchupErrorUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.sketchupErrorUrl: object expected");r.sketchupErrorUrl=n[25].fromObject(e.sketchupErrorUrl)}if(void 0!==e.freeLicenseUrl&&null!==e.freeLicenseUrl){if("object"!=typeof e.freeLicenseUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.freeLicenseUrl: object expected");r.freeLicenseUrl=n[26].fromObject(e.freeLicenseUrl)}if(void 0!==e.proLicenseUrl&&null!==e.proLicenseUrl){if("object"!=typeof e.proLicenseUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.proLicenseUrl: object expected");r.proLicenseUrl=n[27].fromObject(e.proLicenseUrl)}if(void 0!==e.tutorialUrl&&null!==e.tutorialUrl){if("object"!=typeof e.tutorialUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.tutorialUrl: object expected");r.tutorialUrl=n[28].fromObject(e.tutorialUrl)}if(void 0!==e.keyboardShortcutsUrl&&null!==e.keyboardShortcutsUrl){if("object"!=typeof e.keyboardShortcutsUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.keyboardShortcutsUrl: object expected");r.keyboardShortcutsUrl=n[29].fromObject(e.keyboardShortcutsUrl)}if(void 0!==e.releaseNotesUrl&&null!==e.releaseNotesUrl){if("object"!=typeof e.releaseNotesUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.releaseNotesUrl: object expected");r.releaseNotesUrl=n[30].fromObject(e.releaseNotesUrl)}if(void 0!==e.hideUserData&&null!==e.hideUserData&&(r.hideUserData=Boolean(e.hideUserData)),void 0!==e.useGeLogo&&null!==e.useGeLogo&&(r.useGeLogo=Boolean(e.useGeLogo)),void 0!==e.dioramaDescriptionUrlBase&&null!==e.dioramaDescriptionUrlBase){if("object"!=typeof e.dioramaDescriptionUrlBase)throw TypeError(".keyhole.dbroot.EndSnippetProto.dioramaDescriptionUrlBase: object expected");r.dioramaDescriptionUrlBase=n[33].fromObject(e.dioramaDescriptionUrlBase)}if(void 0!==e.dioramaDefaultColor&&null!==e.dioramaDefaultColor&&(r.dioramaDefaultColor=e.dioramaDefaultColor>>>0),void 0!==e.dioramaBlacklistUrl&&null!==e.dioramaBlacklistUrl){if("object"!=typeof e.dioramaBlacklistUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.dioramaBlacklistUrl: object expected");r.dioramaBlacklistUrl=n[35].fromObject(e.dioramaBlacklistUrl)}if(void 0!==e.clientOptions&&null!==e.clientOptions){if("object"!=typeof e.clientOptions)throw TypeError(".keyhole.dbroot.EndSnippetProto.clientOptions: object expected");r.clientOptions=n[36].fromObject(e.clientOptions)}if(void 0!==e.fetchingOptions&&null!==e.fetchingOptions){if("object"!=typeof e.fetchingOptions)throw TypeError(".keyhole.dbroot.EndSnippetProto.fetchingOptions: object expected");r.fetchingOptions=n[37].fromObject(e.fetchingOptions)}if(void 0!==e.timeMachineOptions&&null!==e.timeMachineOptions){if("object"!=typeof e.timeMachineOptions)throw TypeError(".keyhole.dbroot.EndSnippetProto.timeMachineOptions: object expected");r.timeMachineOptions=n[38].fromObject(e.timeMachineOptions)}if(void 0!==e.csiOptions&&null!==e.csiOptions){if("object"!=typeof e.csiOptions)throw TypeError(".keyhole.dbroot.EndSnippetProto.csiOptions: object expected");r.csiOptions=n[39].fromObject(e.csiOptions)}if(e.searchTab){if(!Array.isArray(e.searchTab))throw TypeError(".keyhole.dbroot.EndSnippetProto.searchTab: array expected");r.searchTab=[];for(t=0;t<e.searchTab.length;++t){if("object"!=typeof e.searchTab[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.searchTab: object expected");r.searchTab[t]=n[40].fromObject(e.searchTab[t])}}if(e.cobrandInfo){if(!Array.isArray(e.cobrandInfo))throw TypeError(".keyhole.dbroot.EndSnippetProto.cobrandInfo: array expected");r.cobrandInfo=[];for(t=0;t<e.cobrandInfo.length;++t){if("object"!=typeof e.cobrandInfo[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.cobrandInfo: object expected");r.cobrandInfo[t]=n[41].fromObject(e.cobrandInfo[t])}}if(e.validDatabase){if(!Array.isArray(e.validDatabase))throw TypeError(".keyhole.dbroot.EndSnippetProto.validDatabase: array expected");r.validDatabase=[];for(t=0;t<e.validDatabase.length;++t){if("object"!=typeof e.validDatabase[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.validDatabase: object expected");r.validDatabase[t]=n[42].fromObject(e.validDatabase[t])}}if(e.configScript){if(!Array.isArray(e.configScript))throw TypeError(".keyhole.dbroot.EndSnippetProto.configScript: array expected");r.configScript=[];for(t=0;t<e.configScript.length;++t){if("object"!=typeof e.configScript[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.configScript: object expected");r.configScript[t]=n[43].fromObject(e.configScript[t])}}if(void 0!==e.deauthServerUrl&&null!==e.deauthServerUrl){if("object"!=typeof e.deauthServerUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.deauthServerUrl: object expected");r.deauthServerUrl=n[44].fromObject(e.deauthServerUrl)}if(void 0!==e.swoopParameters&&null!==e.swoopParameters){if("object"!=typeof e.swoopParameters)throw TypeError(".keyhole.dbroot.EndSnippetProto.swoopParameters: object expected");r.swoopParameters=n[45].fromObject(e.swoopParameters)}if(void 0!==e.bbsServerInfo&&null!==e.bbsServerInfo){if("object"!=typeof e.bbsServerInfo)throw TypeError(".keyhole.dbroot.EndSnippetProto.bbsServerInfo: object expected");r.bbsServerInfo=n[46].fromObject(e.bbsServerInfo)}if(void 0!==e.dataErrorServerInfo&&null!==e.dataErrorServerInfo){if("object"!=typeof e.dataErrorServerInfo)throw TypeError(".keyhole.dbroot.EndSnippetProto.dataErrorServerInfo: object expected");r.dataErrorServerInfo=n[47].fromObject(e.dataErrorServerInfo)}if(e.planetaryDatabase){if(!Array.isArray(e.planetaryDatabase))throw TypeError(".keyhole.dbroot.EndSnippetProto.planetaryDatabase: array expected");r.planetaryDatabase=[];for(t=0;t<e.planetaryDatabase.length;++t){if("object"!=typeof e.planetaryDatabase[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.planetaryDatabase: object expected");r.planetaryDatabase[t]=n[48].fromObject(e.planetaryDatabase[t])}}if(void 0!==e.logServer&&null!==e.logServer){if("object"!=typeof e.logServer)throw TypeError(".keyhole.dbroot.EndSnippetProto.logServer: object expected");r.logServer=n[49].fromObject(e.logServer)}if(void 0!==e.autopiaOptions&&null!==e.autopiaOptions){if("object"!=typeof e.autopiaOptions)throw TypeError(".keyhole.dbroot.EndSnippetProto.autopiaOptions: object expected");r.autopiaOptions=n[50].fromObject(e.autopiaOptions)}if(void 0!==e.searchConfig&&null!==e.searchConfig){if("object"!=typeof e.searchConfig)throw TypeError(".keyhole.dbroot.EndSnippetProto.searchConfig: object expected");r.searchConfig=n[51].fromObject(e.searchConfig)}if(void 0!==e.searchInfo&&null!==e.searchInfo){if("object"!=typeof e.searchInfo)throw TypeError(".keyhole.dbroot.EndSnippetProto.searchInfo: object expected");r.searchInfo=n[52].fromObject(e.searchInfo)}if(void 0!==e.elevationServiceBaseUrl&&null!==e.elevationServiceBaseUrl&&(r.elevationServiceBaseUrl=String(e.elevationServiceBaseUrl)),void 0!==e.elevationProfileQueryDelay&&null!==e.elevationProfileQueryDelay&&(r.elevationProfileQueryDelay=0|e.elevationProfileQueryDelay),void 0!==e.proUpgradeUrl&&null!==e.proUpgradeUrl){if("object"!=typeof e.proUpgradeUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.proUpgradeUrl: object expected");r.proUpgradeUrl=n[55].fromObject(e.proUpgradeUrl)}if(void 0!==e.earthCommunityUrl&&null!==e.earthCommunityUrl){if("object"!=typeof e.earthCommunityUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.earthCommunityUrl: object expected");r.earthCommunityUrl=n[56].fromObject(e.earthCommunityUrl)}if(void 0!==e.googleMapsUrl&&null!==e.googleMapsUrl){if("object"!=typeof e.googleMapsUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.googleMapsUrl: object expected");r.googleMapsUrl=n[57].fromObject(e.googleMapsUrl)}if(void 0!==e.sharingUrl&&null!==e.sharingUrl){if("object"!=typeof e.sharingUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.sharingUrl: object expected");r.sharingUrl=n[58].fromObject(e.sharingUrl)}if(void 0!==e.privacyPolicyUrl&&null!==e.privacyPolicyUrl){if("object"!=typeof e.privacyPolicyUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.privacyPolicyUrl: object expected");r.privacyPolicyUrl=n[59].fromObject(e.privacyPolicyUrl)}if(void 0!==e.doGplusUserCheck&&null!==e.doGplusUserCheck&&(r.doGplusUserCheck=Boolean(e.doGplusUserCheck)),void 0!==e.rocktreeDataProto&&null!==e.rocktreeDataProto){if("object"!=typeof e.rocktreeDataProto)throw TypeError(".keyhole.dbroot.EndSnippetProto.rocktreeDataProto: object expected");r.rocktreeDataProto=n[61].fromObject(e.rocktreeDataProto)}if(e.filmstripConfig){if(!Array.isArray(e.filmstripConfig))throw TypeError(".keyhole.dbroot.EndSnippetProto.filmstripConfig: array expected");r.filmstripConfig=[];for(t=0;t<e.filmstripConfig.length;++t){if("object"!=typeof e.filmstripConfig[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.filmstripConfig: object expected");r.filmstripConfig[t]=n[62].fromObject(e.filmstripConfig[t])}}if(void 0!==e.showSigninButton&&null!==e.showSigninButton&&(r.showSigninButton=Boolean(e.showSigninButton)),void 0!==e.proMeasureUpsellUrl&&null!==e.proMeasureUpsellUrl){if("object"!=typeof e.proMeasureUpsellUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.proMeasureUpsellUrl: object expected");r.proMeasureUpsellUrl=n[64].fromObject(e.proMeasureUpsellUrl)}if(void 0!==e.proPrintUpsellUrl&&null!==e.proPrintUpsellUrl){if("object"!=typeof e.proPrintUpsellUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.proPrintUpsellUrl: object expected");r.proPrintUpsellUrl=n[65].fromObject(e.proPrintUpsellUrl)}if(void 0!==e.starDataProto&&null!==e.starDataProto){if("object"!=typeof e.starDataProto)throw TypeError(".keyhole.dbroot.EndSnippetProto.starDataProto: object expected");r.starDataProto=n[66].fromObject(e.starDataProto)}if(void 0!==e.feedbackUrl&&null!==e.feedbackUrl){if("object"!=typeof e.feedbackUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.feedbackUrl: object expected");r.feedbackUrl=n[67].fromObject(e.feedbackUrl)}if(void 0!==e.oauth2LoginUrl&&null!==e.oauth2LoginUrl){if("object"!=typeof e.oauth2LoginUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.oauth2LoginUrl: object expected");r.oauth2LoginUrl=n[68].fromObject(e.oauth2LoginUrl)}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.mfeDomains=[],t.searchTab=[],t.cobrandInfo=[],t.validDatabase=[],t.configScript=[],t.planetaryDatabase=[],t.filmstripConfig=[]),r.defaults&&(t.model=null,t.authServerUrl=null,t.disableAuthentication=!1,t.mfeLangParam="hl=$5Bhl5D",t.adsUrlPatterns="",t.reverseGeocoderUrl=null,t.reverseGeocoderProtocolVersion=3,t.skyDatabaseIsAvailable=!0,t.skyDatabaseUrl=null,t.defaultWebPageIntlUrl=null,t.numStartUpTips=17,t.startUpTipsUrl=null,t.numProStartUpTips=0,t.proStartUpTipsUrl=null,t.startupTipsIntlUrl=null,t.userGuideIntlUrl=null,t.supportCenterIntlUrl=null,t.businessListingIntlUrl=null,t.supportAnswerIntlUrl=null,t.supportTopicIntlUrl=null,t.supportRequestIntlUrl=null,t.earthIntlUrl=null,t.addContentUrl=null,t.sketchupNotInstalledUrl=null,t.sketchupErrorUrl=null,t.freeLicenseUrl=null,t.proLicenseUrl=null,t.tutorialUrl=null,t.keyboardShortcutsUrl=null,t.releaseNotesUrl=null,t.hideUserData=!1,t.useGeLogo=!0,t.dioramaDescriptionUrlBase=null,t.dioramaDefaultColor=4291281607,t.dioramaBlacklistUrl=null,t.clientOptions=null,t.fetchingOptions=null,t.timeMachineOptions=null,t.csiOptions=null,t.deauthServerUrl=null,t.swoopParameters=null,t.bbsServerInfo=null,t.dataErrorServerInfo=null,t.logServer=null,t.autopiaOptions=null,t.searchConfig=null,t.searchInfo=null,t.elevationServiceBaseUrl="http://maps.google.com/maps/api/elevation/",t.elevationProfileQueryDelay=500,t.proUpgradeUrl=null,t.earthCommunityUrl=null,t.googleMapsUrl=null,t.sharingUrl=null,t.privacyPolicyUrl=null,t.doGplusUserCheck=!1,t.rocktreeDataProto=null,t.showSigninButton=!1,t.proMeasureUpsellUrl=null,t.proPrintUpsellUrl=null,t.starDataProto=null,t.feedbackUrl=null,t.oauth2LoginUrl=null),void 0!==e.model&&null!==e.model&&e.hasOwnProperty("model")&&(t.model=n[0].toObject(e.model,r)),void 0!==e.authServerUrl&&null!==e.authServerUrl&&e.hasOwnProperty("authServerUrl")&&(t.authServerUrl=n[1].toObject(e.authServerUrl,r)),void 0!==e.disableAuthentication&&null!==e.disableAuthentication&&e.hasOwnProperty("disableAuthentication")&&(t.disableAuthentication=e.disableAuthentication),void 0!==e.mfeDomains&&null!==e.mfeDomains&&e.hasOwnProperty("mfeDomains")){t.mfeDomains=[];for(var o=0;o<e.mfeDomains.length;++o)t.mfeDomains[o]=n[3].toObject(e.mfeDomains[o],r)}if(void 0!==e.mfeLangParam&&null!==e.mfeLangParam&&e.hasOwnProperty("mfeLangParam")&&(t.mfeLangParam=e.mfeLangParam),void 0!==e.adsUrlPatterns&&null!==e.adsUrlPatterns&&e.hasOwnProperty("adsUrlPatterns")&&(t.adsUrlPatterns=e.adsUrlPatterns),void 0!==e.reverseGeocoderUrl&&null!==e.reverseGeocoderUrl&&e.hasOwnProperty("reverseGeocoderUrl")&&(t.reverseGeocoderUrl=n[6].toObject(e.reverseGeocoderUrl,r)),void 0!==e.reverseGeocoderProtocolVersion&&null!==e.reverseGeocoderProtocolVersion&&e.hasOwnProperty("reverseGeocoderProtocolVersion")&&(t.reverseGeocoderProtocolVersion=e.reverseGeocoderProtocolVersion),void 0!==e.skyDatabaseIsAvailable&&null!==e.skyDatabaseIsAvailable&&e.hasOwnProperty("skyDatabaseIsAvailable")&&(t.skyDatabaseIsAvailable=e.skyDatabaseIsAvailable),void 0!==e.skyDatabaseUrl&&null!==e.skyDatabaseUrl&&e.hasOwnProperty("skyDatabaseUrl")&&(t.skyDatabaseUrl=n[9].toObject(e.skyDatabaseUrl,r)),void 0!==e.defaultWebPageIntlUrl&&null!==e.defaultWebPageIntlUrl&&e.hasOwnProperty("defaultWebPageIntlUrl")&&(t.defaultWebPageIntlUrl=n[10].toObject(e.defaultWebPageIntlUrl,r)),void 0!==e.numStartUpTips&&null!==e.numStartUpTips&&e.hasOwnProperty("numStartUpTips")&&(t.numStartUpTips=e.numStartUpTips),void 0!==e.startUpTipsUrl&&null!==e.startUpTipsUrl&&e.hasOwnProperty("startUpTipsUrl")&&(t.startUpTipsUrl=n[12].toObject(e.startUpTipsUrl,r)),void 0!==e.numProStartUpTips&&null!==e.numProStartUpTips&&e.hasOwnProperty("numProStartUpTips")&&(t.numProStartUpTips=e.numProStartUpTips),void 0!==e.proStartUpTipsUrl&&null!==e.proStartUpTipsUrl&&e.hasOwnProperty("proStartUpTipsUrl")&&(t.proStartUpTipsUrl=n[14].toObject(e.proStartUpTipsUrl,r)),void 0!==e.startupTipsIntlUrl&&null!==e.startupTipsIntlUrl&&e.hasOwnProperty("startupTipsIntlUrl")&&(t.startupTipsIntlUrl=n[15].toObject(e.startupTipsIntlUrl,r)),void 0!==e.userGuideIntlUrl&&null!==e.userGuideIntlUrl&&e.hasOwnProperty("userGuideIntlUrl")&&(t.userGuideIntlUrl=n[16].toObject(e.userGuideIntlUrl,r)),void 0!==e.supportCenterIntlUrl&&null!==e.supportCenterIntlUrl&&e.hasOwnProperty("supportCenterIntlUrl")&&(t.supportCenterIntlUrl=n[17].toObject(e.supportCenterIntlUrl,r)),void 0!==e.businessListingIntlUrl&&null!==e.businessListingIntlUrl&&e.hasOwnProperty("businessListingIntlUrl")&&(t.businessListingIntlUrl=n[18].toObject(e.businessListingIntlUrl,r)),void 0!==e.supportAnswerIntlUrl&&null!==e.supportAnswerIntlUrl&&e.hasOwnProperty("supportAnswerIntlUrl")&&(t.supportAnswerIntlUrl=n[19].toObject(e.supportAnswerIntlUrl,r)),void 0!==e.supportTopicIntlUrl&&null!==e.supportTopicIntlUrl&&e.hasOwnProperty("supportTopicIntlUrl")&&(t.supportTopicIntlUrl=n[20].toObject(e.supportTopicIntlUrl,r)),void 0!==e.supportRequestIntlUrl&&null!==e.supportRequestIntlUrl&&e.hasOwnProperty("supportRequestIntlUrl")&&(t.supportRequestIntlUrl=n[21].toObject(e.supportRequestIntlUrl,r)),void 0!==e.earthIntlUrl&&null!==e.earthIntlUrl&&e.hasOwnProperty("earthIntlUrl")&&(t.earthIntlUrl=n[22].toObject(e.earthIntlUrl,r)),void 0!==e.addContentUrl&&null!==e.addContentUrl&&e.hasOwnProperty("addContentUrl")&&(t.addContentUrl=n[23].toObject(e.addContentUrl,r)),void 0!==e.sketchupNotInstalledUrl&&null!==e.sketchupNotInstalledUrl&&e.hasOwnProperty("sketchupNotInstalledUrl")&&(t.sketchupNotInstalledUrl=n[24].toObject(e.sketchupNotInstalledUrl,r)),void 0!==e.sketchupErrorUrl&&null!==e.sketchupErrorUrl&&e.hasOwnProperty("sketchupErrorUrl")&&(t.sketchupErrorUrl=n[25].toObject(e.sketchupErrorUrl,r)),void 0!==e.freeLicenseUrl&&null!==e.freeLicenseUrl&&e.hasOwnProperty("freeLicenseUrl")&&(t.freeLicenseUrl=n[26].toObject(e.freeLicenseUrl,r)),void 0!==e.proLicenseUrl&&null!==e.proLicenseUrl&&e.hasOwnProperty("proLicenseUrl")&&(t.proLicenseUrl=n[27].toObject(e.proLicenseUrl,r)),void 0!==e.tutorialUrl&&null!==e.tutorialUrl&&e.hasOwnProperty("tutorialUrl")&&(t.tutorialUrl=n[28].toObject(e.tutorialUrl,r)),void 0!==e.keyboardShortcutsUrl&&null!==e.keyboardShortcutsUrl&&e.hasOwnProperty("keyboardShortcutsUrl")&&(t.keyboardShortcutsUrl=n[29].toObject(e.keyboardShortcutsUrl,r)),void 0!==e.releaseNotesUrl&&null!==e.releaseNotesUrl&&e.hasOwnProperty("releaseNotesUrl")&&(t.releaseNotesUrl=n[30].toObject(e.releaseNotesUrl,r)),void 0!==e.hideUserData&&null!==e.hideUserData&&e.hasOwnProperty("hideUserData")&&(t.hideUserData=e.hideUserData),void 0!==e.useGeLogo&&null!==e.useGeLogo&&e.hasOwnProperty("useGeLogo")&&(t.useGeLogo=e.useGeLogo),void 0!==e.dioramaDescriptionUrlBase&&null!==e.dioramaDescriptionUrlBase&&e.hasOwnProperty("dioramaDescriptionUrlBase")&&(t.dioramaDescriptionUrlBase=n[33].toObject(e.dioramaDescriptionUrlBase,r)),void 0!==e.dioramaDefaultColor&&null!==e.dioramaDefaultColor&&e.hasOwnProperty("dioramaDefaultColor")&&(t.dioramaDefaultColor=e.dioramaDefaultColor),void 0!==e.dioramaBlacklistUrl&&null!==e.dioramaBlacklistUrl&&e.hasOwnProperty("dioramaBlacklistUrl")&&(t.dioramaBlacklistUrl=n[35].toObject(e.dioramaBlacklistUrl,r)),void 0!==e.clientOptions&&null!==e.clientOptions&&e.hasOwnProperty("clientOptions")&&(t.clientOptions=n[36].toObject(e.clientOptions,r)),void 0!==e.fetchingOptions&&null!==e.fetchingOptions&&e.hasOwnProperty("fetchingOptions")&&(t.fetchingOptions=n[37].toObject(e.fetchingOptions,r)),void 0!==e.timeMachineOptions&&null!==e.timeMachineOptions&&e.hasOwnProperty("timeMachineOptions")&&(t.timeMachineOptions=n[38].toObject(e.timeMachineOptions,r)),void 0!==e.csiOptions&&null!==e.csiOptions&&e.hasOwnProperty("csiOptions")&&(t.csiOptions=n[39].toObject(e.csiOptions,r)),void 0!==e.searchTab&&null!==e.searchTab&&e.hasOwnProperty("searchTab")){t.searchTab=[];for(o=0;o<e.searchTab.length;++o)t.searchTab[o]=n[40].toObject(e.searchTab[o],r)}if(void 0!==e.cobrandInfo&&null!==e.cobrandInfo&&e.hasOwnProperty("cobrandInfo")){t.cobrandInfo=[];for(o=0;o<e.cobrandInfo.length;++o)t.cobrandInfo[o]=n[41].toObject(e.cobrandInfo[o],r)}if(void 0!==e.validDatabase&&null!==e.validDatabase&&e.hasOwnProperty("validDatabase")){t.validDatabase=[];for(o=0;o<e.validDatabase.length;++o)t.validDatabase[o]=n[42].toObject(e.validDatabase[o],r)}if(void 0!==e.configScript&&null!==e.configScript&&e.hasOwnProperty("configScript")){t.configScript=[];for(o=0;o<e.configScript.length;++o)t.configScript[o]=n[43].toObject(e.configScript[o],r)}if(void 0!==e.deauthServerUrl&&null!==e.deauthServerUrl&&e.hasOwnProperty("deauthServerUrl")&&(t.deauthServerUrl=n[44].toObject(e.deauthServerUrl,r)),void 0!==e.swoopParameters&&null!==e.swoopParameters&&e.hasOwnProperty("swoopParameters")&&(t.swoopParameters=n[45].toObject(e.swoopParameters,r)),void 0!==e.bbsServerInfo&&null!==e.bbsServerInfo&&e.hasOwnProperty("bbsServerInfo")&&(t.bbsServerInfo=n[46].toObject(e.bbsServerInfo,r)),void 0!==e.dataErrorServerInfo&&null!==e.dataErrorServerInfo&&e.hasOwnProperty("dataErrorServerInfo")&&(t.dataErrorServerInfo=n[47].toObject(e.dataErrorServerInfo,r)),void 0!==e.planetaryDatabase&&null!==e.planetaryDatabase&&e.hasOwnProperty("planetaryDatabase")){t.planetaryDatabase=[];for(o=0;o<e.planetaryDatabase.length;++o)t.planetaryDatabase[o]=n[48].toObject(e.planetaryDatabase[o],r)}if(void 0!==e.logServer&&null!==e.logServer&&e.hasOwnProperty("logServer")&&(t.logServer=n[49].toObject(e.logServer,r)),void 0!==e.autopiaOptions&&null!==e.autopiaOptions&&e.hasOwnProperty("autopiaOptions")&&(t.autopiaOptions=n[50].toObject(e.autopiaOptions,r)),void 0!==e.searchConfig&&null!==e.searchConfig&&e.hasOwnProperty("searchConfig")&&(t.searchConfig=n[51].toObject(e.searchConfig,r)),void 0!==e.searchInfo&&null!==e.searchInfo&&e.hasOwnProperty("searchInfo")&&(t.searchInfo=n[52].toObject(e.searchInfo,r)),void 0!==e.elevationServiceBaseUrl&&null!==e.elevationServiceBaseUrl&&e.hasOwnProperty("elevationServiceBaseUrl")&&(t.elevationServiceBaseUrl=e.elevationServiceBaseUrl),void 0!==e.elevationProfileQueryDelay&&null!==e.elevationProfileQueryDelay&&e.hasOwnProperty("elevationProfileQueryDelay")&&(t.elevationProfileQueryDelay=e.elevationProfileQueryDelay),void 0!==e.proUpgradeUrl&&null!==e.proUpgradeUrl&&e.hasOwnProperty("proUpgradeUrl")&&(t.proUpgradeUrl=n[55].toObject(e.proUpgradeUrl,r)),void 0!==e.earthCommunityUrl&&null!==e.earthCommunityUrl&&e.hasOwnProperty("earthCommunityUrl")&&(t.earthCommunityUrl=n[56].toObject(e.earthCommunityUrl,r)),void 0!==e.googleMapsUrl&&null!==e.googleMapsUrl&&e.hasOwnProperty("googleMapsUrl")&&(t.googleMapsUrl=n[57].toObject(e.googleMapsUrl,r)),void 0!==e.sharingUrl&&null!==e.sharingUrl&&e.hasOwnProperty("sharingUrl")&&(t.sharingUrl=n[58].toObject(e.sharingUrl,r)),void 0!==e.privacyPolicyUrl&&null!==e.privacyPolicyUrl&&e.hasOwnProperty("privacyPolicyUrl")&&(t.privacyPolicyUrl=n[59].toObject(e.privacyPolicyUrl,r)),void 0!==e.doGplusUserCheck&&null!==e.doGplusUserCheck&&e.hasOwnProperty("doGplusUserCheck")&&(t.doGplusUserCheck=e.doGplusUserCheck),void 0!==e.rocktreeDataProto&&null!==e.rocktreeDataProto&&e.hasOwnProperty("rocktreeDataProto")&&(t.rocktreeDataProto=n[61].toObject(e.rocktreeDataProto,r)),void 0!==e.filmstripConfig&&null!==e.filmstripConfig&&e.hasOwnProperty("filmstripConfig")){t.filmstripConfig=[];for(o=0;o<e.filmstripConfig.length;++o)t.filmstripConfig[o]=n[62].toObject(e.filmstripConfig[o],r)}return void 0!==e.showSigninButton&&null!==e.showSigninButton&&e.hasOwnProperty("showSigninButton")&&(t.showSigninButton=e.showSigninButton),void 0!==e.proMeasureUpsellUrl&&null!==e.proMeasureUpsellUrl&&e.hasOwnProperty("proMeasureUpsellUrl")&&(t.proMeasureUpsellUrl=n[64].toObject(e.proMeasureUpsellUrl,r)),void 0!==e.proPrintUpsellUrl&&null!==e.proPrintUpsellUrl&&e.hasOwnProperty("proPrintUpsellUrl")&&(t.proPrintUpsellUrl=n[65].toObject(e.proPrintUpsellUrl,r)),void 0!==e.starDataProto&&null!==e.starDataProto&&e.hasOwnProperty("starDataProto")&&(t.starDataProto=n[66].toObject(e.starDataProto,r)),void 0!==e.feedbackUrl&&null!==e.feedbackUrl&&e.hasOwnProperty("feedbackUrl")&&(t.feedbackUrl=n[67].toObject(e.feedbackUrl,r)),void 0!==e.oauth2LoginUrl&&null!==e.oauth2LoginUrl&&e.hasOwnProperty("oauth2LoginUrl")&&(t.oauth2LoginUrl=n[68].toObject(e.oauth2LoginUrl,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.SearchConfigProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.searchServer=s.emptyArray,e.prototype.oneboxService=s.emptyArray,e.prototype.kmlSearchUrl=null,e.prototype.kmlRenderUrl=null,e.prototype.searchHistoryUrl=null,e.prototype.errorPageUrl=null;var n={0:"keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer",1:"keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto",2:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.StringIdOrValueProto",5:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.searchServer&&o.searchServer.length||(o.searchServer=[]),o.searchServer.push(n[0].decode(e,e.uint32()));break;case 2:o.oneboxService&&o.oneboxService.length||(o.oneboxService=[]),o.oneboxService.push(n[1].decode(e,e.uint32()));break;case 3:o.kmlSearchUrl=n[2].decode(e,e.uint32());break;case 4:o.kmlRenderUrl=n[3].decode(e,e.uint32());break;case 6:o.searchHistoryUrl=n[4].decode(e,e.uint32());break;case 5:o.errorPageUrl=n[5].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.searchServer){if(!Array.isArray(e.searchServer))return"searchServer: array expected";for(var r=0;r<e.searchServer.length;++r)if(t=n[0].verify(e.searchServer[r]))return"searchServer."+t}if(void 0!==e.oneboxService){if(!Array.isArray(e.oneboxService))return"oneboxService: array expected";for(r=0;r<e.oneboxService.length;++r)if(t=n[1].verify(e.oneboxService[r]))return"oneboxService."+t}var t;if(void 0!==e.kmlSearchUrl&&null!==e.kmlSearchUrl&&(t=n[2].verify(e.kmlSearchUrl)))return"kmlSearchUrl."+t;if(void 0!==e.kmlRenderUrl&&null!==e.kmlRenderUrl&&(t=n[3].verify(e.kmlRenderUrl)))return"kmlRenderUrl."+t;if(void 0!==e.searchHistoryUrl&&null!==e.searchHistoryUrl&&(t=n[4].verify(e.searchHistoryUrl)))return"searchHistoryUrl."+t;if(void 0!==e.errorPageUrl&&null!==e.errorPageUrl&&(t=n[5].verify(e.errorPageUrl)))return"errorPageUrl."+t;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchConfigProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto;if(e.searchServer){if(!Array.isArray(e.searchServer))throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: array expected");r.searchServer=[];for(var t=0;t<e.searchServer.length;++t){if("object"!=typeof e.searchServer[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: object expected");r.searchServer[t]=n[0].fromObject(e.searchServer[t])}}if(e.oneboxService){if(!Array.isArray(e.oneboxService))throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: array expected");r.oneboxService=[];for(t=0;t<e.oneboxService.length;++t){if("object"!=typeof e.oneboxService[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: object expected");r.oneboxService[t]=n[1].fromObject(e.oneboxService[t])}}if(void 0!==e.kmlSearchUrl&&null!==e.kmlSearchUrl){if("object"!=typeof e.kmlSearchUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlSearchUrl: object expected");r.kmlSearchUrl=n[2].fromObject(e.kmlSearchUrl)}if(void 0!==e.kmlRenderUrl&&null!==e.kmlRenderUrl){if("object"!=typeof e.kmlRenderUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlRenderUrl: object expected");r.kmlRenderUrl=n[3].fromObject(e.kmlRenderUrl)}if(void 0!==e.searchHistoryUrl&&null!==e.searchHistoryUrl){if("object"!=typeof e.searchHistoryUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchHistoryUrl: object expected");r.searchHistoryUrl=n[4].fromObject(e.searchHistoryUrl)}if(void 0!==e.errorPageUrl&&null!==e.errorPageUrl){if("object"!=typeof e.errorPageUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.errorPageUrl: object expected");r.errorPageUrl=n[5].fromObject(e.errorPageUrl)}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.searchServer=[],t.oneboxService=[]),r.defaults&&(t.kmlSearchUrl=null,t.kmlRenderUrl=null,t.searchHistoryUrl=null,t.errorPageUrl=null),void 0!==e.searchServer&&null!==e.searchServer&&e.hasOwnProperty("searchServer")){t.searchServer=[];for(var o=0;o<e.searchServer.length;++o)t.searchServer[o]=n[0].toObject(e.searchServer[o],r)}if(void 0!==e.oneboxService&&null!==e.oneboxService&&e.hasOwnProperty("oneboxService")){t.oneboxService=[];for(o=0;o<e.oneboxService.length;++o)t.oneboxService[o]=n[1].toObject(e.oneboxService[o],r)}return void 0!==e.kmlSearchUrl&&null!==e.kmlSearchUrl&&e.hasOwnProperty("kmlSearchUrl")&&(t.kmlSearchUrl=n[2].toObject(e.kmlSearchUrl,r)),void 0!==e.kmlRenderUrl&&null!==e.kmlRenderUrl&&e.hasOwnProperty("kmlRenderUrl")&&(t.kmlRenderUrl=n[3].toObject(e.kmlRenderUrl,r)),void 0!==e.searchHistoryUrl&&null!==e.searchHistoryUrl&&e.hasOwnProperty("searchHistoryUrl")&&(t.searchHistoryUrl=n[4].toObject(e.searchHistoryUrl,r)),void 0!==e.errorPageUrl&&null!==e.errorPageUrl&&e.hasOwnProperty("errorPageUrl")&&(t.errorPageUrl=n[5].toObject(e.errorPageUrl,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.SearchServer=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.name=null,e.prototype.url=null,e.prototype.type=0,e.prototype.htmlTransformUrl=null,e.prototype.kmlTransformUrl=null,e.prototype.supplementalUi=null,e.prototype.suggestion=s.emptyArray,e.prototype.searchlet=s.emptyArray,e.prototype.requirements=null,e.prototype.suggestServer=null;var r,n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.StringIdOrValueProto",2:"keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.ResultType",3:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.StringIdOrValueProto",5:"keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi",6:"keyhole.dbroot.StringIdOrValueProto",7:"keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto",8:"keyhole.dbroot.RequirementProto",9:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.name=n[0].decode(e,e.uint32());break;case 2:o.url=n[1].decode(e,e.uint32());break;case 3:o.type=e.uint32();break;case 4:o.htmlTransformUrl=n[3].decode(e,e.uint32());break;case 5:o.kmlTransformUrl=n[4].decode(e,e.uint32());break;case 6:o.supplementalUi=n[5].decode(e,e.uint32());break;case 9:o.suggestion&&o.suggestion.length||(o.suggestion=[]),o.suggestion.push(n[6].decode(e,e.uint32()));break;case 7:o.searchlet&&o.searchlet.length||(o.searchlet=[]),o.searchlet.push(n[7].decode(e,e.uint32()));break;case 8:o.requirements=n[8].decode(e,e.uint32());break;case 10:o.suggestServer=n[9].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.name&&null!==e.name&&(t=n[0].verify(e.name)))return"name."+t;if(void 0!==e.url&&null!==e.url&&(t=n[1].verify(e.url)))return"url."+t;if(void 0!==e.type)switch(e.type){default:return"type: enum value expected";case 0:case 1:}if(void 0!==e.htmlTransformUrl&&null!==e.htmlTransformUrl&&(t=n[3].verify(e.htmlTransformUrl)))return"htmlTransformUrl."+t;if(void 0!==e.kmlTransformUrl&&null!==e.kmlTransformUrl&&(t=n[4].verify(e.kmlTransformUrl)))return"kmlTransformUrl."+t;if(void 0!==e.supplementalUi&&null!==e.supplementalUi&&(t=n[5].verify(e.supplementalUi)))return"supplementalUi."+t;if(void 0!==e.suggestion){if(!Array.isArray(e.suggestion))return"suggestion: array expected";for(var r=0;r<e.suggestion.length;++r)if(t=n[6].verify(e.suggestion[r]))return"suggestion."+t}if(void 0!==e.searchlet){if(!Array.isArray(e.searchlet))return"searchlet: array expected";for(var t,r=0;r<e.searchlet.length;++r)if(t=n[7].verify(e.searchlet[r]))return"searchlet."+t}if(void 0!==e.requirements&&null!==e.requirements&&(t=n[8].verify(e.requirements)))return"requirements."+t;if(void 0!==e.suggestServer&&null!==e.suggestServer&&(t=n[9].verify(e.suggestServer)))return"suggestServer."+t;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer;if(void 0!==e.name&&null!==e.name){if("object"!=typeof e.name)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.name: object expected");r.name=n[0].fromObject(e.name)}if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.url: object expected");r.url=n[1].fromObject(e.url)}switch(e.type){case"RESULT_TYPE_KML":case 0:r.type=0;break;case"RESULT_TYPE_XML":case 1:r.type=1}if(void 0!==e.htmlTransformUrl&&null!==e.htmlTransformUrl){if("object"!=typeof e.htmlTransformUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.htmlTransformUrl: object expected");r.htmlTransformUrl=n[3].fromObject(e.htmlTransformUrl)}if(void 0!==e.kmlTransformUrl&&null!==e.kmlTransformUrl){if("object"!=typeof e.kmlTransformUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.kmlTransformUrl: object expected");r.kmlTransformUrl=n[4].fromObject(e.kmlTransformUrl)}if(void 0!==e.supplementalUi&&null!==e.supplementalUi){if("object"!=typeof e.supplementalUi)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.supplementalUi: object expected");r.supplementalUi=n[5].fromObject(e.supplementalUi)}if(e.suggestion){if(!Array.isArray(e.suggestion))throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: array expected");r.suggestion=[];for(var t=0;t<e.suggestion.length;++t){if("object"!=typeof e.suggestion[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: object expected");r.suggestion[t]=n[6].fromObject(e.suggestion[t])}}if(e.searchlet){if(!Array.isArray(e.searchlet))throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: array expected");r.searchlet=[];for(t=0;t<e.searchlet.length;++t){if("object"!=typeof e.searchlet[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: object expected");r.searchlet[t]=n[7].fromObject(e.searchlet[t])}}if(void 0!==e.requirements&&null!==e.requirements){if("object"!=typeof e.requirements)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.requirements: object expected");r.requirements=n[8].fromObject(e.requirements)}if(void 0!==e.suggestServer&&null!==e.suggestServer){if("object"!=typeof e.suggestServer)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestServer: object expected");r.suggestServer=n[9].fromObject(e.suggestServer)}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.suggestion=[],t.searchlet=[]),r.defaults&&(t.name=null,t.url=null,t.type=r.enums===String?"RESULT_TYPE_KML":0,t.htmlTransformUrl=null,t.kmlTransformUrl=null,t.supplementalUi=null,t.requirements=null,t.suggestServer=null),void 0!==e.name&&null!==e.name&&e.hasOwnProperty("name")&&(t.name=n[0].toObject(e.name,r)),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[1].toObject(e.url,r)),void 0!==e.type&&null!==e.type&&e.hasOwnProperty("type")&&(t.type=r.enums===String?n[2][e.type]:e.type),void 0!==e.htmlTransformUrl&&null!==e.htmlTransformUrl&&e.hasOwnProperty("htmlTransformUrl")&&(t.htmlTransformUrl=n[3].toObject(e.htmlTransformUrl,r)),void 0!==e.kmlTransformUrl&&null!==e.kmlTransformUrl&&e.hasOwnProperty("kmlTransformUrl")&&(t.kmlTransformUrl=n[4].toObject(e.kmlTransformUrl,r)),void 0!==e.supplementalUi&&null!==e.supplementalUi&&e.hasOwnProperty("supplementalUi")&&(t.supplementalUi=n[5].toObject(e.supplementalUi,r)),void 0!==e.suggestion&&null!==e.suggestion&&e.hasOwnProperty("suggestion")){t.suggestion=[];for(var o=0;o<e.suggestion.length;++o)t.suggestion[o]=n[6].toObject(e.suggestion[o],r)}if(void 0!==e.searchlet&&null!==e.searchlet&&e.hasOwnProperty("searchlet")){t.searchlet=[];for(o=0;o<e.searchlet.length;++o)t.searchlet[o]=n[7].toObject(e.searchlet[o],r)}return void 0!==e.requirements&&null!==e.requirements&&e.hasOwnProperty("requirements")&&(t.requirements=n[8].toObject(e.requirements,r)),void 0!==e.suggestServer&&null!==e.suggestServer&&e.hasOwnProperty("suggestServer")&&(t.suggestServer=n[9].toObject(e.suggestServer,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.ResultType=((r=Object.create({})).RESULT_TYPE_KML=0,r.RESULT_TYPE_XML=1,r),e.SupplementalUi=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null,e.prototype.label=null,e.prototype.height=160;var n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.url=n[0].decode(e,e.uint32());break;case 2:o.label=n[1].decode(e,e.uint32());break;case 3:o.height=e.int32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r;if(void 0!==e.url&&null!==e.url&&(r=n[0].verify(e.url)))return"url."+r;if(void 0!==e.label&&null!==e.label&&(r=n[1].verify(e.label)))return"label."+r;return void 0===e.height||s.isInteger(e.height)?null:"height: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.url: object expected");r.url=n[0].fromObject(e.url)}if(void 0!==e.label&&null!==e.label){if("object"!=typeof e.label)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.label: object expected");r.label=n[1].fromObject(e.label)}return void 0!==e.height&&null!==e.height&&(r.height=0|e.height),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null,t.label=null,t.height=160),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),void 0!==e.label&&null!==e.label&&e.hasOwnProperty("label")&&(t.label=n[1].toObject(e.label,r)),void 0!==e.height&&null!==e.height&&e.hasOwnProperty("height")&&(t.height=e.height),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.SearchletProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null,e.prototype.name=null,e.prototype.requirements=null;var n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.StringIdOrValueProto",2:"keyhole.dbroot.RequirementProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.url=n[0].decode(e,e.uint32());break;case 2:o.name=n[1].decode(e,e.uint32());break;case 3:o.requirements=n[2].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r;if(void 0!==e.url&&null!==e.url&&(r=n[0].verify(e.url)))return"url."+r;if(void 0!==e.name&&null!==e.name&&(r=n[1].verify(e.name)))return"name."+r;if(void 0!==e.requirements&&null!==e.requirements&&(r=n[2].verify(e.requirements)))return"requirements."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.url: object expected");r.url=n[0].fromObject(e.url)}if(void 0!==e.name&&null!==e.name){if("object"!=typeof e.name)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.name: object expected");r.name=n[1].fromObject(e.name)}if(void 0!==e.requirements&&null!==e.requirements){if("object"!=typeof e.requirements)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.requirements: object expected");r.requirements=n[2].fromObject(e.requirements)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null,t.name=null,t.requirements=null),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),void 0!==e.name&&null!==e.name&&e.hasOwnProperty("name")&&(t.name=n[1].toObject(e.name,r)),void 0!==e.requirements&&null!==e.requirements&&e.hasOwnProperty("requirements")&&(t.requirements=n[2].toObject(e.requirements,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e}(),e.OneboxServiceProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.serviceUrl=null,e.prototype.requirements=null;var n={0:"keyhole.dbroot.StringIdOrValueProto",1:"keyhole.dbroot.RequirementProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.serviceUrl=n[0].decode(e,e.uint32());break;case 2:o.requirements=n[1].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";var r;if(void 0!==e.serviceUrl&&null!==e.serviceUrl&&(r=n[0].verify(e.serviceUrl)))return"serviceUrl."+r;if(void 0!==e.requirements&&null!==e.requirements&&(r=n[1].verify(e.requirements)))return"requirements."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto;if(void 0!==e.serviceUrl&&null!==e.serviceUrl){if("object"!=typeof e.serviceUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.serviceUrl: object expected");r.serviceUrl=n[0].fromObject(e.serviceUrl)}if(void 0!==e.requirements&&null!==e.requirements){if("object"!=typeof e.requirements)throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.requirements: object expected");r.requirements=n[1].fromObject(e.requirements)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.serviceUrl=null,t.requirements=null),void 0!==e.serviceUrl&&null!==e.serviceUrl&&e.hasOwnProperty("serviceUrl")&&(t.serviceUrl=n[0].toObject(e.serviceUrl,r)),void 0!==e.requirements&&null!==e.requirements&&e.hasOwnProperty("requirements")&&(t.requirements=n[1].toObject(e.requirements,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e}(),e.SearchInfoProto=(r.prototype.defaultUrl="http://maps.google.com/maps",r.prototype.geocodeParam="q",r.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.SearchInfoProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.defaultUrl=e.string();break;case 2:o.geocodeParam=e.string();break;default:e.skipType(7&a)}}return o},r.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0===e.defaultUrl||s.isString(e.defaultUrl)?void 0===e.geocodeParam||s.isString(e.geocodeParam)?null:"geocodeParam: string expected":"defaultUrl: string expected"},r.from=r.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.SearchInfoProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.SearchInfoProto;return void 0!==e.defaultUrl&&null!==e.defaultUrl&&(r.defaultUrl=String(e.defaultUrl)),void 0!==e.geocodeParam&&null!==e.geocodeParam&&(r.geocodeParam=String(e.geocodeParam)),r},r.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.defaultUrl="http://maps.google.com/maps",t.geocodeParam="q"),void 0!==e.defaultUrl&&null!==e.defaultUrl&&e.hasOwnProperty("defaultUrl")&&(t.defaultUrl=e.defaultUrl),void 0!==e.geocodeParam&&null!==e.geocodeParam&&e.hasOwnProperty("geocodeParam")&&(t.geocodeParam=e.geocodeParam),t},r.prototype.toObject=function(e){return this.constructor.toObject(this,e)},r.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},r),e.RockTreeDataProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null;var n={0:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.RockTreeDataProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.url=n[0].decode(e,e.uint32()):e.skipType(7&a)}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.url&&null!==e.url){e=n[0].verify(e.url);if(e)return"url."+e}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.RockTreeDataProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.RockTreeDataProto;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.EndSnippetProto.RockTreeDataProto.url: object expected");r.url=n[0].fromObject(e.url)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.FilmstripConfigProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.requirements=null,e.prototype.alleycatUrlTemplate=null,e.prototype.fallbackAlleycatUrlTemplate=null,e.prototype.metadataUrlTemplate=null,e.prototype.thumbnailUrlTemplate=null,e.prototype.kmlUrlTemplate=null,e.prototype.featuredToursUrl=null,e.prototype.enableViewportFallback=!1,e.prototype.viewportFallbackDistance=0,e.prototype.imageryType=s.emptyArray;var n={0:"keyhole.dbroot.RequirementProto",1:"keyhole.dbroot.StringIdOrValueProto",2:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.StringIdOrValueProto",5:"keyhole.dbroot.StringIdOrValueProto",6:"keyhole.dbroot.StringIdOrValueProto",9:"keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.requirements=n[0].decode(e,e.uint32());break;case 2:o.alleycatUrlTemplate=n[1].decode(e,e.uint32());break;case 9:o.fallbackAlleycatUrlTemplate=n[2].decode(e,e.uint32());break;case 3:o.metadataUrlTemplate=n[3].decode(e,e.uint32());break;case 4:o.thumbnailUrlTemplate=n[4].decode(e,e.uint32());break;case 5:o.kmlUrlTemplate=n[5].decode(e,e.uint32());break;case 6:o.featuredToursUrl=n[6].decode(e,e.uint32());break;case 7:o.enableViewportFallback=e.bool();break;case 8:o.viewportFallbackDistance=e.uint32();break;case 10:o.imageryType&&o.imageryType.length||(o.imageryType=[]),o.imageryType.push(n[9].decode(e,e.uint32()));break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.requirements&&null!==e.requirements&&(r=n[0].verify(e.requirements)))return"requirements."+r;if(void 0!==e.alleycatUrlTemplate&&null!==e.alleycatUrlTemplate&&(r=n[1].verify(e.alleycatUrlTemplate)))return"alleycatUrlTemplate."+r;if(void 0!==e.fallbackAlleycatUrlTemplate&&null!==e.fallbackAlleycatUrlTemplate&&(r=n[2].verify(e.fallbackAlleycatUrlTemplate)))return"fallbackAlleycatUrlTemplate."+r;if(void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate&&(r=n[3].verify(e.metadataUrlTemplate)))return"metadataUrlTemplate."+r;if(void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate&&(r=n[4].verify(e.thumbnailUrlTemplate)))return"thumbnailUrlTemplate."+r;if(void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate&&(r=n[5].verify(e.kmlUrlTemplate)))return"kmlUrlTemplate."+r;if(void 0!==e.featuredToursUrl&&null!==e.featuredToursUrl&&(r=n[6].verify(e.featuredToursUrl)))return"featuredToursUrl."+r;if(void 0!==e.enableViewportFallback&&"boolean"!=typeof e.enableViewportFallback)return"enableViewportFallback: boolean expected";if(void 0!==e.viewportFallbackDistance&&!s.isInteger(e.viewportFallbackDistance))return"viewportFallbackDistance: integer expected";if(void 0!==e.imageryType){if(!Array.isArray(e.imageryType))return"imageryType: array expected";for(var r,t=0;t<e.imageryType.length;++t)if(r=n[9].verify(e.imageryType[t]))return"imageryType."+r}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto;if(void 0!==e.requirements&&null!==e.requirements){if("object"!=typeof e.requirements)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.requirements: object expected");r.requirements=n[0].fromObject(e.requirements)}if(void 0!==e.alleycatUrlTemplate&&null!==e.alleycatUrlTemplate){if("object"!=typeof e.alleycatUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.alleycatUrlTemplate: object expected");r.alleycatUrlTemplate=n[1].fromObject(e.alleycatUrlTemplate)}if(void 0!==e.fallbackAlleycatUrlTemplate&&null!==e.fallbackAlleycatUrlTemplate){if("object"!=typeof e.fallbackAlleycatUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.fallbackAlleycatUrlTemplate: object expected");r.fallbackAlleycatUrlTemplate=n[2].fromObject(e.fallbackAlleycatUrlTemplate)}if(void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate){if("object"!=typeof e.metadataUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.metadataUrlTemplate: object expected");r.metadataUrlTemplate=n[3].fromObject(e.metadataUrlTemplate)}if(void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate){if("object"!=typeof e.thumbnailUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.thumbnailUrlTemplate: object expected");r.thumbnailUrlTemplate=n[4].fromObject(e.thumbnailUrlTemplate)}if(void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate){if("object"!=typeof e.kmlUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.kmlUrlTemplate: object expected");r.kmlUrlTemplate=n[5].fromObject(e.kmlUrlTemplate)}if(void 0!==e.featuredToursUrl&&null!==e.featuredToursUrl){if("object"!=typeof e.featuredToursUrl)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.featuredToursUrl: object expected");r.featuredToursUrl=n[6].fromObject(e.featuredToursUrl)}if(void 0!==e.enableViewportFallback&&null!==e.enableViewportFallback&&(r.enableViewportFallback=Boolean(e.enableViewportFallback)),void 0!==e.viewportFallbackDistance&&null!==e.viewportFallbackDistance&&(r.viewportFallbackDistance=e.viewportFallbackDistance>>>0),e.imageryType){if(!Array.isArray(e.imageryType))throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: array expected");r.imageryType=[];for(var t=0;t<e.imageryType.length;++t){if("object"!=typeof e.imageryType[t])throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: object expected");r.imageryType[t]=n[9].fromObject(e.imageryType[t])}}return r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.imageryType=[]),r.defaults&&(t.requirements=null,t.alleycatUrlTemplate=null,t.fallbackAlleycatUrlTemplate=null,t.metadataUrlTemplate=null,t.thumbnailUrlTemplate=null,t.kmlUrlTemplate=null,t.featuredToursUrl=null,t.enableViewportFallback=!1,t.viewportFallbackDistance=0),void 0!==e.requirements&&null!==e.requirements&&e.hasOwnProperty("requirements")&&(t.requirements=n[0].toObject(e.requirements,r)),void 0!==e.alleycatUrlTemplate&&null!==e.alleycatUrlTemplate&&e.hasOwnProperty("alleycatUrlTemplate")&&(t.alleycatUrlTemplate=n[1].toObject(e.alleycatUrlTemplate,r)),void 0!==e.fallbackAlleycatUrlTemplate&&null!==e.fallbackAlleycatUrlTemplate&&e.hasOwnProperty("fallbackAlleycatUrlTemplate")&&(t.fallbackAlleycatUrlTemplate=n[2].toObject(e.fallbackAlleycatUrlTemplate,r)),void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate&&e.hasOwnProperty("metadataUrlTemplate")&&(t.metadataUrlTemplate=n[3].toObject(e.metadataUrlTemplate,r)),void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate&&e.hasOwnProperty("thumbnailUrlTemplate")&&(t.thumbnailUrlTemplate=n[4].toObject(e.thumbnailUrlTemplate,r)),void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate&&e.hasOwnProperty("kmlUrlTemplate")&&(t.kmlUrlTemplate=n[5].toObject(e.kmlUrlTemplate,r)),void 0!==e.featuredToursUrl&&null!==e.featuredToursUrl&&e.hasOwnProperty("featuredToursUrl")&&(t.featuredToursUrl=n[6].toObject(e.featuredToursUrl,r)),void 0!==e.enableViewportFallback&&null!==e.enableViewportFallback&&e.hasOwnProperty("enableViewportFallback")&&(t.enableViewportFallback=e.enableViewportFallback),void 0!==e.viewportFallbackDistance&&null!==e.viewportFallbackDistance&&e.hasOwnProperty("viewportFallbackDistance")&&(t.viewportFallbackDistance=e.viewportFallbackDistance),void 0!==e.imageryType&&null!==e.imageryType&&e.hasOwnProperty("imageryType")){t.imageryType=[];for(var o=0;o<e.imageryType.length;++o)t.imageryType[o]=n[9].toObject(e.imageryType[o],r)}return t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.AlleycatImageryTypeProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.imageryTypeId=0,e.prototype.imageryTypeLabel="",e.prototype.metadataUrlTemplate=null,e.prototype.thumbnailUrlTemplate=null,e.prototype.kmlUrlTemplate=null;var n={2:"keyhole.dbroot.StringIdOrValueProto",3:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.imageryTypeId=e.int32();break;case 2:o.imageryTypeLabel=e.string();break;case 3:o.metadataUrlTemplate=n[2].decode(e,e.uint32());break;case 4:o.thumbnailUrlTemplate=n[3].decode(e,e.uint32());break;case 5:o.kmlUrlTemplate=n[4].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.imageryTypeId&&!s.isInteger(e.imageryTypeId))return"imageryTypeId: integer expected";if(void 0!==e.imageryTypeLabel&&!s.isString(e.imageryTypeLabel))return"imageryTypeLabel: string expected";var r;if(void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate&&(r=n[2].verify(e.metadataUrlTemplate)))return"metadataUrlTemplate."+r;if(void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate&&(r=n[3].verify(e.thumbnailUrlTemplate)))return"thumbnailUrlTemplate."+r;if(void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate&&(r=n[4].verify(e.kmlUrlTemplate)))return"kmlUrlTemplate."+r;return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto;if(void 0!==e.imageryTypeId&&null!==e.imageryTypeId&&(r.imageryTypeId=0|e.imageryTypeId),void 0!==e.imageryTypeLabel&&null!==e.imageryTypeLabel&&(r.imageryTypeLabel=String(e.imageryTypeLabel)),void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate){if("object"!=typeof e.metadataUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.metadataUrlTemplate: object expected");r.metadataUrlTemplate=n[2].fromObject(e.metadataUrlTemplate)}if(void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate){if("object"!=typeof e.thumbnailUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.thumbnailUrlTemplate: object expected");r.thumbnailUrlTemplate=n[3].fromObject(e.thumbnailUrlTemplate)}if(void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate){if("object"!=typeof e.kmlUrlTemplate)throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.kmlUrlTemplate: object expected");r.kmlUrlTemplate=n[4].fromObject(e.kmlUrlTemplate)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.imageryTypeId=0,t.imageryTypeLabel="",t.metadataUrlTemplate=null,t.thumbnailUrlTemplate=null,t.kmlUrlTemplate=null),void 0!==e.imageryTypeId&&null!==e.imageryTypeId&&e.hasOwnProperty("imageryTypeId")&&(t.imageryTypeId=e.imageryTypeId),void 0!==e.imageryTypeLabel&&null!==e.imageryTypeLabel&&e.hasOwnProperty("imageryTypeLabel")&&(t.imageryTypeLabel=e.imageryTypeLabel),void 0!==e.metadataUrlTemplate&&null!==e.metadataUrlTemplate&&e.hasOwnProperty("metadataUrlTemplate")&&(t.metadataUrlTemplate=n[2].toObject(e.metadataUrlTemplate,r)),void 0!==e.thumbnailUrlTemplate&&null!==e.thumbnailUrlTemplate&&e.hasOwnProperty("thumbnailUrlTemplate")&&(t.thumbnailUrlTemplate=n[3].toObject(e.thumbnailUrlTemplate,r)),void 0!==e.kmlUrlTemplate&&null!==e.kmlUrlTemplate&&e.hasOwnProperty("kmlUrlTemplate")&&(t.kmlUrlTemplate=n[4].toObject(e.kmlUrlTemplate,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e}(),e.StarDataProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url=null;var n={0:"keyhole.dbroot.StringIdOrValueProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EndSnippetProto.StarDataProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.url=n[0].decode(e,e.uint32()):e.skipType(7&a)}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.url&&null!==e.url){e=n[0].verify(e.url);if(e)return"url."+e}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EndSnippetProto.StarDataProto)return e;var r=new c.keyhole.dbroot.EndSnippetProto.StarDataProto;if(void 0!==e.url&&null!==e.url){if("object"!=typeof e.url)throw TypeError(".keyhole.dbroot.EndSnippetProto.StarDataProto.url: object expected");r.url=n[0].fromObject(e.url)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url=null),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=n[0].toObject(e.url,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e}(),e.DbRootRefProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.url="",e.prototype.isCritical=!1,e.prototype.requirements=null;var n={2:"keyhole.dbroot.RequirementProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.DbRootRefProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 2:o.url=e.string();break;case 1:o.isCritical=e.bool();break;case 3:o.requirements=n[2].decode(e,e.uint32());break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(!s.isString(e.url))return"url: string expected";if(void 0!==e.isCritical&&"boolean"!=typeof e.isCritical)return"isCritical: boolean expected";if(void 0!==e.requirements&&null!==e.requirements){e=n[2].verify(e.requirements);if(e)return"requirements."+e}return null},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.DbRootRefProto)return e;var r=new c.keyhole.dbroot.DbRootRefProto;if(void 0!==e.url&&null!==e.url&&(r.url=String(e.url)),void 0!==e.isCritical&&null!==e.isCritical&&(r.isCritical=Boolean(e.isCritical)),void 0!==e.requirements&&null!==e.requirements){if("object"!=typeof e.requirements)throw TypeError(".keyhole.dbroot.DbRootRefProto.requirements: object expected");r.requirements=n[2].fromObject(e.requirements)}return r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.url="",t.isCritical=!1,t.requirements=null),void 0!==e.url&&null!==e.url&&e.hasOwnProperty("url")&&(t.url=e.url),void 0!==e.isCritical&&null!==e.isCritical&&e.hasOwnProperty("isCritical")&&(t.isCritical=e.isCritical),void 0!==e.requirements&&null!==e.requirements&&e.hasOwnProperty("requirements")&&(t.requirements=n[2].toObject(e.requirements,r)),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.DatabaseVersionProto=(O.prototype.quadtreeVersion=0,O.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.DatabaseVersionProto;e.pos<t;){var a=e.uint32();a>>>3==1?o.quadtreeVersion=e.uint32():e.skipType(7&a)}return o},O.verify=function(e){return"object"!=typeof e||null===e?"object expected":s.isInteger(e.quadtreeVersion)?null:"quadtreeVersion: integer expected"},O.from=O.fromObject=function(e){if(e instanceof c.keyhole.dbroot.DatabaseVersionProto)return e;var r=new c.keyhole.dbroot.DatabaseVersionProto;return void 0!==e.quadtreeVersion&&null!==e.quadtreeVersion&&(r.quadtreeVersion=e.quadtreeVersion>>>0),r},O.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.quadtreeVersion=0),void 0!==e.quadtreeVersion&&null!==e.quadtreeVersion&&e.hasOwnProperty("quadtreeVersion")&&(t.quadtreeVersion=e.quadtreeVersion),t},O.prototype.toObject=function(e){return this.constructor.toObject(this,e)},O.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},O),e.DbRootProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.databaseName=null,e.prototype.imageryPresent=!0,e.prototype.protoImagery=!1,e.prototype.terrainPresent=!1,e.prototype.providerInfo=s.emptyArray,e.prototype.nestedFeature=s.emptyArray,e.prototype.styleAttribute=s.emptyArray,e.prototype.styleMap=s.emptyArray,e.prototype.endSnippet=null,e.prototype.translationEntry=s.emptyArray,e.prototype.language="en",e.prototype.version=5,e.prototype.dbrootReference=s.emptyArray,e.prototype.databaseVersion=null,e.prototype.refreshTimeout=0;var n={0:"keyhole.dbroot.StringIdOrValueProto",4:"keyhole.dbroot.ProviderInfoProto",5:"keyhole.dbroot.NestedFeatureProto",6:"keyhole.dbroot.StyleAttributeProto",7:"keyhole.dbroot.StyleMapProto",8:"keyhole.dbroot.EndSnippetProto",9:"keyhole.dbroot.StringEntryProto",12:"keyhole.dbroot.DbRootRefProto",13:"keyhole.dbroot.DatabaseVersionProto"};return p.push(n),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.DbRootProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 15:o.databaseName=n[0].decode(e,e.uint32());break;case 1:o.imageryPresent=e.bool();break;case 14:o.protoImagery=e.bool();break;case 2:o.terrainPresent=e.bool();break;case 3:o.providerInfo&&o.providerInfo.length||(o.providerInfo=[]),o.providerInfo.push(n[4].decode(e,e.uint32()));break;case 4:o.nestedFeature&&o.nestedFeature.length||(o.nestedFeature=[]),o.nestedFeature.push(n[5].decode(e,e.uint32()));break;case 5:o.styleAttribute&&o.styleAttribute.length||(o.styleAttribute=[]),o.styleAttribute.push(n[6].decode(e,e.uint32()));break;case 6:o.styleMap&&o.styleMap.length||(o.styleMap=[]),o.styleMap.push(n[7].decode(e,e.uint32()));break;case 7:o.endSnippet=n[8].decode(e,e.uint32());break;case 8:o.translationEntry&&o.translationEntry.length||(o.translationEntry=[]),o.translationEntry.push(n[9].decode(e,e.uint32()));break;case 9:o.language=e.string();break;case 10:o.version=e.int32();break;case 11:o.dbrootReference&&o.dbrootReference.length||(o.dbrootReference=[]),o.dbrootReference.push(n[12].decode(e,e.uint32()));break;case 13:o.databaseVersion=n[13].decode(e,e.uint32());break;case 16:o.refreshTimeout=e.int32();break;default:e.skipType(7&a)}}return o},e.verify=function(e){if("object"!=typeof e||null===e)return"object expected";if(void 0!==e.databaseName&&null!==e.databaseName&&(t=n[0].verify(e.databaseName)))return"databaseName."+t;if(void 0!==e.imageryPresent&&"boolean"!=typeof e.imageryPresent)return"imageryPresent: boolean expected";if(void 0!==e.protoImagery&&"boolean"!=typeof e.protoImagery)return"protoImagery: boolean expected";if(void 0!==e.terrainPresent&&"boolean"!=typeof e.terrainPresent)return"terrainPresent: boolean expected";if(void 0!==e.providerInfo){if(!Array.isArray(e.providerInfo))return"providerInfo: array expected";for(var r=0;r<e.providerInfo.length;++r)if(t=n[4].verify(e.providerInfo[r]))return"providerInfo."+t}if(void 0!==e.nestedFeature){if(!Array.isArray(e.nestedFeature))return"nestedFeature: array expected";for(r=0;r<e.nestedFeature.length;++r)if(t=n[5].verify(e.nestedFeature[r]))return"nestedFeature."+t}if(void 0!==e.styleAttribute){if(!Array.isArray(e.styleAttribute))return"styleAttribute: array expected";for(r=0;r<e.styleAttribute.length;++r)if(t=n[6].verify(e.styleAttribute[r]))return"styleAttribute."+t}if(void 0!==e.styleMap){if(!Array.isArray(e.styleMap))return"styleMap: array expected";for(r=0;r<e.styleMap.length;++r)if(t=n[7].verify(e.styleMap[r]))return"styleMap."+t}if(void 0!==e.endSnippet&&null!==e.endSnippet&&(t=n[8].verify(e.endSnippet)))return"endSnippet."+t;if(void 0!==e.translationEntry){if(!Array.isArray(e.translationEntry))return"translationEntry: array expected";for(r=0;r<e.translationEntry.length;++r)if(t=n[9].verify(e.translationEntry[r]))return"translationEntry."+t}if(void 0!==e.language&&!s.isString(e.language))return"language: string expected";if(void 0!==e.version&&!s.isInteger(e.version))return"version: integer expected";if(void 0!==e.dbrootReference){if(!Array.isArray(e.dbrootReference))return"dbrootReference: array expected";for(var t,r=0;r<e.dbrootReference.length;++r)if(t=n[12].verify(e.dbrootReference[r]))return"dbrootReference."+t}if(void 0!==e.databaseVersion&&null!==e.databaseVersion&&(t=n[13].verify(e.databaseVersion)))return"databaseVersion."+t;return void 0===e.refreshTimeout||s.isInteger(e.refreshTimeout)?null:"refreshTimeout: integer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.DbRootProto)return e;var r=new c.keyhole.dbroot.DbRootProto;if(void 0!==e.databaseName&&null!==e.databaseName){if("object"!=typeof e.databaseName)throw TypeError(".keyhole.dbroot.DbRootProto.databaseName: object expected");r.databaseName=n[0].fromObject(e.databaseName)}if(void 0!==e.imageryPresent&&null!==e.imageryPresent&&(r.imageryPresent=Boolean(e.imageryPresent)),void 0!==e.protoImagery&&null!==e.protoImagery&&(r.protoImagery=Boolean(e.protoImagery)),void 0!==e.terrainPresent&&null!==e.terrainPresent&&(r.terrainPresent=Boolean(e.terrainPresent)),e.providerInfo){if(!Array.isArray(e.providerInfo))throw TypeError(".keyhole.dbroot.DbRootProto.providerInfo: array expected");r.providerInfo=[];for(var t=0;t<e.providerInfo.length;++t){if("object"!=typeof e.providerInfo[t])throw TypeError(".keyhole.dbroot.DbRootProto.providerInfo: object expected");r.providerInfo[t]=n[4].fromObject(e.providerInfo[t])}}if(e.nestedFeature){if(!Array.isArray(e.nestedFeature))throw TypeError(".keyhole.dbroot.DbRootProto.nestedFeature: array expected");r.nestedFeature=[];for(t=0;t<e.nestedFeature.length;++t){if("object"!=typeof e.nestedFeature[t])throw TypeError(".keyhole.dbroot.DbRootProto.nestedFeature: object expected");r.nestedFeature[t]=n[5].fromObject(e.nestedFeature[t])}}if(e.styleAttribute){if(!Array.isArray(e.styleAttribute))throw TypeError(".keyhole.dbroot.DbRootProto.styleAttribute: array expected");r.styleAttribute=[];for(t=0;t<e.styleAttribute.length;++t){if("object"!=typeof e.styleAttribute[t])throw TypeError(".keyhole.dbroot.DbRootProto.styleAttribute: object expected");r.styleAttribute[t]=n[6].fromObject(e.styleAttribute[t])}}if(e.styleMap){if(!Array.isArray(e.styleMap))throw TypeError(".keyhole.dbroot.DbRootProto.styleMap: array expected");r.styleMap=[];for(t=0;t<e.styleMap.length;++t){if("object"!=typeof e.styleMap[t])throw TypeError(".keyhole.dbroot.DbRootProto.styleMap: object expected");r.styleMap[t]=n[7].fromObject(e.styleMap[t])}}if(void 0!==e.endSnippet&&null!==e.endSnippet){if("object"!=typeof e.endSnippet)throw TypeError(".keyhole.dbroot.DbRootProto.endSnippet: object expected");r.endSnippet=n[8].fromObject(e.endSnippet)}if(e.translationEntry){if(!Array.isArray(e.translationEntry))throw TypeError(".keyhole.dbroot.DbRootProto.translationEntry: array expected");r.translationEntry=[];for(t=0;t<e.translationEntry.length;++t){if("object"!=typeof e.translationEntry[t])throw TypeError(".keyhole.dbroot.DbRootProto.translationEntry: object expected");r.translationEntry[t]=n[9].fromObject(e.translationEntry[t])}}if(void 0!==e.language&&null!==e.language&&(r.language=String(e.language)),void 0!==e.version&&null!==e.version&&(r.version=0|e.version),e.dbrootReference){if(!Array.isArray(e.dbrootReference))throw TypeError(".keyhole.dbroot.DbRootProto.dbrootReference: array expected");r.dbrootReference=[];for(t=0;t<e.dbrootReference.length;++t){if("object"!=typeof e.dbrootReference[t])throw TypeError(".keyhole.dbroot.DbRootProto.dbrootReference: object expected");r.dbrootReference[t]=n[12].fromObject(e.dbrootReference[t])}}if(void 0!==e.databaseVersion&&null!==e.databaseVersion){if("object"!=typeof e.databaseVersion)throw TypeError(".keyhole.dbroot.DbRootProto.databaseVersion: object expected");r.databaseVersion=n[13].fromObject(e.databaseVersion)}return void 0!==e.refreshTimeout&&null!==e.refreshTimeout&&(r.refreshTimeout=0|e.refreshTimeout),r},e.toObject=function(e,r){var t={};if(((r=r||{}).arrays||r.defaults)&&(t.providerInfo=[],t.nestedFeature=[],t.styleAttribute=[],t.styleMap=[],t.translationEntry=[],t.dbrootReference=[]),r.defaults&&(t.databaseName=null,t.imageryPresent=!0,t.protoImagery=!1,t.terrainPresent=!1,t.endSnippet=null,t.language="en",t.version=5,t.databaseVersion=null,t.refreshTimeout=0),void 0!==e.databaseName&&null!==e.databaseName&&e.hasOwnProperty("databaseName")&&(t.databaseName=n[0].toObject(e.databaseName,r)),void 0!==e.imageryPresent&&null!==e.imageryPresent&&e.hasOwnProperty("imageryPresent")&&(t.imageryPresent=e.imageryPresent),void 0!==e.protoImagery&&null!==e.protoImagery&&e.hasOwnProperty("protoImagery")&&(t.protoImagery=e.protoImagery),void 0!==e.terrainPresent&&null!==e.terrainPresent&&e.hasOwnProperty("terrainPresent")&&(t.terrainPresent=e.terrainPresent),void 0!==e.providerInfo&&null!==e.providerInfo&&e.hasOwnProperty("providerInfo")){t.providerInfo=[];for(var o=0;o<e.providerInfo.length;++o)t.providerInfo[o]=n[4].toObject(e.providerInfo[o],r)}if(void 0!==e.nestedFeature&&null!==e.nestedFeature&&e.hasOwnProperty("nestedFeature")){t.nestedFeature=[];for(o=0;o<e.nestedFeature.length;++o)t.nestedFeature[o]=n[5].toObject(e.nestedFeature[o],r)}if(void 0!==e.styleAttribute&&null!==e.styleAttribute&&e.hasOwnProperty("styleAttribute")){t.styleAttribute=[];for(o=0;o<e.styleAttribute.length;++o)t.styleAttribute[o]=n[6].toObject(e.styleAttribute[o],r)}if(void 0!==e.styleMap&&null!==e.styleMap&&e.hasOwnProperty("styleMap")){t.styleMap=[];for(o=0;o<e.styleMap.length;++o)t.styleMap[o]=n[7].toObject(e.styleMap[o],r)}if(void 0!==e.endSnippet&&null!==e.endSnippet&&e.hasOwnProperty("endSnippet")&&(t.endSnippet=n[8].toObject(e.endSnippet,r)),void 0!==e.translationEntry&&null!==e.translationEntry&&e.hasOwnProperty("translationEntry")){t.translationEntry=[];for(o=0;o<e.translationEntry.length;++o)t.translationEntry[o]=n[9].toObject(e.translationEntry[o],r)}if(void 0!==e.language&&null!==e.language&&e.hasOwnProperty("language")&&(t.language=e.language),void 0!==e.version&&null!==e.version&&e.hasOwnProperty("version")&&(t.version=e.version),void 0!==e.dbrootReference&&null!==e.dbrootReference&&e.hasOwnProperty("dbrootReference")){t.dbrootReference=[];for(o=0;o<e.dbrootReference.length;++o)t.dbrootReference[o]=n[12].toObject(e.dbrootReference[o],r)}return void 0!==e.databaseVersion&&null!==e.databaseVersion&&e.hasOwnProperty("databaseVersion")&&(t.databaseVersion=n[13].toObject(e.databaseVersion,r)),void 0!==e.refreshTimeout&&null!==e.refreshTimeout&&e.hasOwnProperty("refreshTimeout")&&(t.refreshTimeout=e.refreshTimeout),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e}(),e.EncryptedDbRootProto=function(){function e(e){if(e)for(var r=Object.keys(e),t=0;t<r.length;++t)this[r[t]]=e[r[t]]}e.prototype.encryptionType=0,e.prototype.encryptionData=s.newBuffer([]),e.prototype.dbrootData=s.newBuffer([]);var r,o={0:"keyhole.dbroot.EncryptedDbRootProto.EncryptionType"};return p.push(o),e.decode=function(e,r){e instanceof l||(e=l.create(e));for(var t=void 0===r?e.len:e.pos+r,o=new c.keyhole.dbroot.EncryptedDbRootProto;e.pos<t;){var a=e.uint32();switch(a>>>3){case 1:o.encryptionType=e.uint32();break;case 2:o.encryptionData=e.bytes();break;case 3:o.dbrootData=e.bytes();break;default:e.skipType(7&a)}}return o},e.verify=function(e){return"object"!=typeof e||null===e?"object expected":void 0!==e.encryptionType&&0!==e.encryptionType?"encryptionType: enum value expected":void 0===e.encryptionData||e.encryptionData&&"number"==typeof e.encryptionData.length||s.isString(e.encryptionData)?void 0===e.dbrootData||e.dbrootData&&"number"==typeof e.dbrootData.length||s.isString(e.dbrootData)?null:"dbrootData: buffer expected":"encryptionData: buffer expected"},e.from=e.fromObject=function(e){if(e instanceof c.keyhole.dbroot.EncryptedDbRootProto)return e;var r=new c.keyhole.dbroot.EncryptedDbRootProto;switch(e.encryptionType){case"ENCRYPTION_XOR":case 0:r.encryptionType=0}return void 0!==e.encryptionData&&null!==e.encryptionData&&("string"==typeof e.encryptionData?s.base64.decode(e.encryptionData,r.encryptionData=s.newBuffer(s.base64.length(e.encryptionData)),0):e.encryptionData.length&&(r.encryptionData=e.encryptionData)),void 0!==e.dbrootData&&null!==e.dbrootData&&("string"==typeof e.dbrootData?s.base64.decode(e.dbrootData,r.dbrootData=s.newBuffer(s.base64.length(e.dbrootData)),0):e.dbrootData.length&&(r.dbrootData=e.dbrootData)),r},e.toObject=function(e,r){var t={};return(r=r||{}).defaults&&(t.encryptionType=r.enums===String?"ENCRYPTION_XOR":0,t.encryptionData=r.bytes===String?"":[],t.dbrootData=r.bytes===String?"":[]),void 0!==e.encryptionType&&null!==e.encryptionType&&e.hasOwnProperty("encryptionType")&&(t.encryptionType=r.enums===String?o[0][e.encryptionType]:e.encryptionType),void 0!==e.encryptionData&&null!==e.encryptionData&&e.hasOwnProperty("encryptionData")&&(t.encryptionData=r.bytes===String?s.base64.encode(e.encryptionData,0,e.encryptionData.length):r.bytes===Array?Array.prototype.slice.call(e.encryptionData):e.encryptionData),void 0!==e.dbrootData&&null!==e.dbrootData&&e.hasOwnProperty("dbrootData")&&(t.dbrootData=r.bytes===String?s.base64.encode(e.dbrootData,0,e.dbrootData.length):r.bytes===Array?Array.prototype.slice.call(e.dbrootData):e.dbrootData),t},e.prototype.toObject=function(e){return this.constructor.toObject(this,e)},e.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},e.EncryptionType=((r=Object.create({})).ENCRYPTION_XOR=0,r),e}(),e),r),s.lazyResolve(c,p),c.keyhole.dbroot}; \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Animation/Animation.css b/public/lib/Cesium/Widgets/Animation/Animation.css new file mode 100644 index 0000000..31dc246 --- /dev/null +++ b/public/lib/Cesium/Widgets/Animation/Animation.css @@ -0,0 +1 @@ +.cesium-animation-theme{visibility:hidden;display:block;position:absolute;z-index:-100}.cesium-animation-themeNormal{color:#222}.cesium-animation-themeHover{color:#4488b0}.cesium-animation-themeSelect{color:#242}.cesium-animation-themeDisabled{color:#333}.cesium-animation-themeKnob{color:#222}.cesium-animation-themePointer{color:#2e2}.cesium-animation-themeSwoosh{color:#8ac}.cesium-animation-themeSwooshHover{color:#aef}.cesium-animation-svgText{fill:#edffff;font-family:Sans-Serif;font-size:15px;text-anchor:middle}.cesium-animation-blank{fill:#000;fill-opacity:.01;stroke:none}.cesium-animation-rectButton{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-animation-rectButton .cesium-animation-buttonGlow{fill:#fff;stroke:none;display:none}.cesium-animation-rectButton:hover .cesium-animation-buttonGlow{display:block}.cesium-animation-rectButton .cesium-animation-buttonPath{fill:#edffff}.cesium-animation-rectButton .cesium-animation-buttonMain{stroke:#444;stroke-width:1.2}.cesium-animation-rectButton:hover .cesium-animation-buttonMain{stroke:#aef}.cesium-animation-rectButton:active .cesium-animation-buttonMain{fill:#abd6ff}.cesium-animation-buttonDisabled{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-animation-buttonDisabled .cesium-animation-buttonMain{stroke:#555}.cesium-animation-buttonDisabled .cesium-animation-buttonPath{fill:#818181}.cesium-animation-buttonDisabled .cesium-animation-buttonGlow{display:none}.cesium-animation-buttonToggled .cesium-animation-buttonGlow{display:block;fill:#2e2}.cesium-animation-buttonToggled .cesium-animation-buttonMain{stroke:#2e2}.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow{fill:#fff}.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain{stroke:#2e2}.cesium-animation-shuttleRingG{cursor:pointer}.cesium-animation-shuttleRingPointer{cursor:pointer}.cesium-animation-shuttleRingPausePointer{cursor:pointer}.cesium-animation-shuttleRingBack{fill:#181818;fill-opacity:.8;stroke:#333;stroke-width:1.2}.cesium-animation-shuttleRingSwoosh line{stroke:#8ac;stroke-width:3;stroke-opacity:.2;stroke-linecap:round}.cesium-animation-knobOuter{cursor:pointer;stroke:#444;stroke-width:1.2}.cesium-animation-knobInner{cursor:pointer} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Animation/lighter.css b/public/lib/Cesium/Widgets/Animation/lighter.css new file mode 100644 index 0000000..ef35212 --- /dev/null +++ b/public/lib/Cesium/Widgets/Animation/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-animation-themeNormal{color:#e5f2fe}.cesium-lighter .cesium-animation-themeHover{color:#abd6ff}.cesium-lighter .cesium-animation-themeSelect{color:#e5f2fe}.cesium-lighter .cesium-animation-themeDisabled{color:#efefef}.cesium-lighter .cesium-animation-themeKnob{color:#e1e2e3}.cesium-lighter .cesium-animation-themePointer{color:#fa5}.cesium-lighter .cesium-animation-themeSwoosh{color:#ace}.cesium-lighter .cesium-animation-themeSwooshHover{color:#bdf}.cesium-lighter .cesium-animation-svgText{fill:#111}.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonPath{fill:#111}.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonMain{stroke:#759dc0}.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonGlow{fill:#ffaa2a}.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonMain{stroke:#ea0}.cesium-lighter .cesium-animation-rectButton:hover .cesium-animation-buttonMain{stroke:#759dc0}.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow{fill:#fff}.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonMain{stroke:#ea0}.cesium-lighter .cesium-animation-rectButton:active .cesium-animation-buttonMain{fill:#abd6ff}.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonMain{stroke:#d3d3d3}.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonPath{fill:#818181}.cesium-lighter .cesium-animation-shuttleRingBack{fill:#fafafa;fill-opacity:1;stroke:#aeaeae;stroke-width:1.2}.cesium-lighter .cesium-animation-shuttleRingSwoosh line{stroke:#8ac}.cesium-lighter .cesium-animation-knobOuter{stroke:#a5a5a5} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css b/public/lib/Cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css new file mode 100644 index 0000000..24f5470 --- /dev/null +++ b/public/lib/Cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css @@ -0,0 +1 @@ +.cesium-baseLayerPicker-selected{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.cesium-baseLayerPicker-dropDown{display:block;position:absolute;box-sizing:content-box;top:auto;right:0;width:320px;max-height:500px;margin-top:5px;background-color:rgba(38,38,38,.75);border:1px solid #444;padding:6px;overflow:auto;border-radius:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;transform:translate(0,-20%);visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in,transform .2s ease-in}.cesium-baseLayerPicker-dropDown-visible{transform:translate(0,0);visibility:visible;opacity:1;transition:opacity .2s ease-out,transform .2s ease-out}.cesium-baseLayerPicker-sectionTitle{display:block;font-family:sans-serif;font-size:16pt;text-align:left;color:#edffff;margin-bottom:4px}.cesium-baseLayerPicker-choices{margin-bottom:5px}.cesium-baseLayerPicker-categoryTitle{color:#edffff;font-size:11pt}.cesium-baseLayerPicker-choices{display:block;border:1px solid #888;border-radius:5px;padding:5px 0}.cesium-baseLayerPicker-item{display:inline-block;vertical-align:top;margin:2px 5px;width:64px;text-align:center;cursor:pointer}.cesium-baseLayerPicker-itemLabel{display:block;font-family:sans-serif;font-size:8pt;text-align:center;vertical-align:middle;color:#edffff;cursor:pointer;word-wrap:break-word}.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel,.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel{text-decoration:underline}.cesium-baseLayerPicker-itemIcon{display:inline-block;position:relative;width:inherit;height:auto;background-size:100% 100%;border:solid 1px #444;border-radius:9px;color:#edffff;margin:0;padding:0;cursor:pointer;box-sizing:border-box}.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon{border-color:#fff;box-shadow:0 0 8px #fff,0 0 8px #fff}.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel{color:#bdecf8}.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon{border:double 4px #bdecf8} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/BaseLayerPicker/lighter.css b/public/lib/Cesium/Widgets/BaseLayerPicker/lighter.css new file mode 100644 index 0000000..c632455 --- /dev/null +++ b/public/lib/Cesium/Widgets/BaseLayerPicker/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-baseLayerPicker-itemIcon{border-color:#759dc0}.cesium-lighter .cesium-baseLayerPicker-dropDown{background-color:rgba(240,240,240,.75)}.cesium-lighter .cesium-baseLayerPicker-sectionTitle{color:#000}.cesium-lighter .cesium-baseLayerPicker-itemLabel{color:#000}.cesium-lighter .cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon{border-color:#000}.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel{color:#003da8}.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon{border:double 4px #003da8} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css b/public/lib/Cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css new file mode 100644 index 0000000..0e97720 --- /dev/null +++ b/public/lib/Cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css @@ -0,0 +1 @@ +ul.cesium-cesiumInspector-statistics{margin:0;padding-top:3px;padding-bottom:3px}ul.cesium-cesiumInspector-statistics+ul.cesium-cesiumInspector-statistics{border-top:1px solid #aaa}.cesium-cesiumInspector-slider{margin-top:5px}.cesium-cesiumInspector-slider input[type=number]{text-align:left;background-color:#222;outline:0;border:1px solid #444;color:#edffff;width:100px;border-radius:3px;padding:1px;margin-left:10px;cursor:auto}.cesium-cesiumInspector-slider input[type=number]::-webkit-inner-spin-button,.cesium-cesiumInspector-slider input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.cesium-cesiumInspector-slider input[type=range]{margin-left:5px;vertical-align:middle}.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor{display:none}.cesium-cesiumInspector-styleEditor{padding:10px;border-radius:5px;background:rgba(48,51,54,.8);border:1px solid #444}.cesium-cesiumInspector-styleEditor textarea{width:100%;height:300px;background:0 0;color:#edffff;border:none;padding:0;white-space:pre;overflow-wrap:normal;overflow-x:auto}.cesium-3DTilesInspector{width:300px;pointer-events:all}.cesium-3DTilesInspector-statistics{font-size:11px}.cesium-3DTilesInspector div,.cesium-3DTilesInspector input[type=range]{width:100%;box-sizing:border-box}.cesium-cesiumInspector-error{color:#ff9e9e;overflow:auto}.cesium-3DTilesInspector .cesium-cesiumInspector-section{margin-top:3px}.cesium-3DTilesInspector .cesium-cesiumInspector-sectionHeader+.cesium-cesiumInspector-show{border-top:1px solid #fff}input.cesium-cesiumInspector-url{overflow:hidden;white-space:nowrap;overflow-x:scroll;background-color:transparent;color:#fff;outline:0;border:none;height:1em;width:100%}.cesium-cesiumInspector .field-group{display:table}.cesium-cesiumInspector .field-group>label{display:table-cell;font-weight:700}.cesium-cesiumInspector .field-group>.field{display:table-cell;width:100%} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/CesiumInspector/CesiumInspector.css b/public/lib/Cesium/Widgets/CesiumInspector/CesiumInspector.css new file mode 100644 index 0000000..437b1bd --- /dev/null +++ b/public/lib/Cesium/Widgets/CesiumInspector/CesiumInspector.css @@ -0,0 +1 @@ +.cesium-cesiumInspector{border-radius:5px;transition:width ease-in-out .25s;background:rgba(48,51,54,.8);border:1px solid #444;color:#edffff;display:inline-block;position:relative;padding:4px 12px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}.cesium-cesiumInspector-button{text-align:center;font-size:11pt}.cesium-cesiumInspector-visible .cesium-cesiumInspector-button{border-bottom:1px solid #aaa;padding-bottom:3px}.cesium-cesiumInspector input:enabled,.cesium-cesiumInspector-button{cursor:pointer}.cesium-cesiumInspector-visible{width:185px;height:auto}.cesium-cesiumInspector-hidden{width:122px;height:17px}.cesium-cesiumInspector-sectionContent{max-height:500px}.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionContent{max-height:0;padding:0!important;overflow:hidden}.cesium-cesiumInspector-dropDown{margin:5px 0;font-family:sans-serif;font-size:10pt;width:185px}.cesium-cesiumInspector-frustumStatistics{padding-left:10px;padding:5px;background-color:rgba(80,80,80,.75)}.cesium-cesiumInspector-pickButton{background-color:rgba(0,0,0,.3);border:1px solid #444;color:#edffff;border-radius:5px;padding:3px 7px;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;margin:0 auto}.cesium-cesiumInspector-pickButton:focus{outline:0}.cesium-cesiumInspector-pickButton:active,.cesium-cesiumInspector-pickButtonHighlight{color:#000;background:#adf;border-color:#fff;box-shadow:0 0 8px #fff}.cesium-cesiumInspector-center{text-align:center}.cesium-cesiumInspector-sectionHeader{font-weight:700;font-size:10pt;margin:0;cursor:pointer}.cesium-cesiumInspector-pickSection{border:1px solid #aaa;border-radius:5px;padding:3px;margin-bottom:5px}.cesium-cesiumInspector-sectionContent{margin-bottom:10px;transition:max-height .25s}.cesium-cesiumInspector-tileText{padding-bottom:10px;border-bottom:1px solid #aaa}.cesium-cesiumInspector-relativeText{padding-top:10px}.cesium-cesiumInspector-sectionHeader::before{margin-right:5px;content:"-";width:1ch;display:inline-block}.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionHeader::before{content:"+"} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/CesiumWidget/CesiumWidget.css b/public/lib/Cesium/Widgets/CesiumWidget/CesiumWidget.css new file mode 100644 index 0000000..37fb0f0 --- /dev/null +++ b/public/lib/Cesium/Widgets/CesiumWidget/CesiumWidget.css @@ -0,0 +1 @@ +.cesium-widget{position:relative}.cesium-widget,.cesium-widget canvas{width:100%;height:100%;touch-action:none}.cesium-widget-credits{display:block;position:absolute;bottom:0;left:0;color:#fff;font-size:10px;text-shadow:0 0 2px #000;padding-right:5px}.cesium-widget-credits a,.cesium-widget-credits a:visited{color:#fff}.cesium-widget-errorPanel{position:absolute;top:0;right:0;bottom:0;left:0;text-align:center;background:rgba(0,0,0,.7);z-index:99999}.cesium-widget-errorPanel:before{display:inline-block;vertical-align:middle;height:100%;content:""}.cesium-widget-errorPanel-content{width:75%;max-width:500px;display:inline-block;text-align:left;vertical-align:middle;border:1px solid #510c00;border-radius:7px;background-color:#f0d9d5;font-size:14px;color:#510c00}.cesium-widget-errorPanel-content.expanded{max-width:75%}.cesium-widget-errorPanel-header{font-size:18px;font-family:"Open Sans",Verdana,Geneva,sans-serif;background:#d69d93;border-bottom:2px solid #510c00;padding-bottom:10px;border-radius:3px 3px 0 0;padding:15px}.cesium-widget-errorPanel-scroll{overflow:auto;font-family:"Open Sans",Verdana,Geneva,sans-serif;white-space:pre-wrap;padding:0 15px;margin:10px 0 20px 0}.cesium-widget-errorPanel-buttonPanel{padding:0 15px;margin:10px 0 20px 0;text-align:right}.cesium-widget-errorPanel-buttonPanel button{border-color:#510c00;background:#d69d93;color:#202020;margin:0}.cesium-widget-errorPanel-buttonPanel button:focus{border-color:#510c00;background:#f0d9d5;color:#510c00}.cesium-widget-errorPanel-buttonPanel button:hover{border-color:#510c00;background:#f0d9d5;color:#510c00}.cesium-widget-errorPanel-buttonPanel button:active{border-color:#510c00;background:#b17b72;color:#510c00}.cesium-widget-errorPanel-more-details{text-decoration:underline;cursor:pointer}.cesium-widget-errorPanel-more-details:hover{color:#2b0700} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/CesiumWidget/lighter.css b/public/lib/Cesium/Widgets/CesiumWidget/lighter.css new file mode 100644 index 0000000..b3c56c8 --- /dev/null +++ b/public/lib/Cesium/Widgets/CesiumWidget/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-widget-errorPanel{background:rgba(255,255,255,.7)}.cesium-lighter .cesium-widget-errorPanel-content{border:1px solid #526f82;border-radius:7px;background-color:#fff;color:#000}.cesium-lighter .cesium-widget-errorPanel-header{color:#b87d00} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/FullscreenButton/FullscreenButton.css b/public/lib/Cesium/Widgets/FullscreenButton/FullscreenButton.css new file mode 100644 index 0000000..bf64cfa --- /dev/null +++ b/public/lib/Cesium/Widgets/FullscreenButton/FullscreenButton.css @@ -0,0 +1 @@ +.cesium-button.cesium-fullscreenButton{display:block;width:100%;height:100%;margin:0;border-radius:0} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Geocoder/Geocoder.css b/public/lib/Cesium/Widgets/Geocoder/Geocoder.css new file mode 100644 index 0000000..df2a912 --- /dev/null +++ b/public/lib/Cesium/Widgets/Geocoder/Geocoder.css @@ -0,0 +1 @@ +.cesium-viewer-geocoderContainer .cesium-geocoder-input{border:solid 1px #444;background-color:rgba(40,40,40,.7);color:#fff;display:inline-block;vertical-align:middle;width:0;height:32px;margin:0;padding:0 32px 0 0;border-radius:0;box-sizing:border-box;transition:width ease-in-out .25s,background-color .2s ease-in-out;-webkit-appearance:none}.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{border-color:#aef;box-shadow:0 0 8px #fff}.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus{border-color:#ea4;background-color:rgba(15,15,15,.9);box-shadow:none;outline:0}.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide,.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus,.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{padding-left:4px;width:250px}.cesium-viewer-geocoderContainer .search-results{position:absolute;background-color:#000;color:#eee;overflow-y:auto;opacity:.8;width:100%}.cesium-viewer-geocoderContainer .search-results ul{list-style-type:none;margin:0;padding:0}.cesium-viewer-geocoderContainer .search-results ul li{font-size:14px;padding:3px 10px}.cesium-viewer-geocoderContainer .search-results ul li:hover{cursor:pointer}.cesium-viewer-geocoderContainer .search-results ul li.active{background:#48b}.cesium-geocoder-searchButton{background-color:#303336;display:inline-block;position:absolute;cursor:pointer;width:32px;top:1px;right:1px;height:30px;vertical-align:middle;fill:#edffff}.cesium-geocoder-searchButton:hover{background-color:#48b} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Geocoder/lighter.css b/public/lib/Cesium/Widgets/Geocoder/lighter.css new file mode 100644 index 0000000..c9ed136 --- /dev/null +++ b/public/lib/Cesium/Widgets/Geocoder/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-geocoder-input{border:solid 1px #759dc0;background-color:rgba(240,240,240,.9);color:#000}.cesium-lighter .cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{border-color:#aef;box-shadow:0 0 8px #fff}.cesium-lighter .cesium-geocoder-searchButton{background-color:#e2f0ff;fill:#111}.cesium-lighter .cesium-geocoder-searchButton:hover{background-color:#a6d2ff} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerial.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerial.png new file mode 100644 index 0000000..a78a154 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerial.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png new file mode 100644 index 0000000..4cafd40 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/bingRoads.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingRoads.png new file mode 100644 index 0000000..282d6ad Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/bingRoads.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/blueMarble.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/blueMarble.png new file mode 100644 index 0000000..b8b5b7b Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/blueMarble.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/earthAtNight.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/earthAtNight.png new file mode 100644 index 0000000..45e0fc7 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/earthAtNight.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png new file mode 100644 index 0000000..bcfdd0b Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png new file mode 100644 index 0000000..a9429da Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png new file mode 100644 index 0000000..dfbc1f4 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png new file mode 100644 index 0000000..f2eba41 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png new file mode 100644 index 0000000..30ee6db Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxStreets.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxStreets.png new file mode 100644 index 0000000..6eef1fc Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxStreets.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png new file mode 100644 index 0000000..e6bc355 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/naturalEarthII.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/naturalEarthII.png new file mode 100644 index 0000000..50271c7 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/naturalEarthII.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/openStreetMap.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/openStreetMap.png new file mode 100644 index 0000000..84acdb8 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/openStreetMap.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/sentinel-2.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/sentinel-2.png new file mode 100644 index 0000000..775fb38 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/sentinel-2.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenToner.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenToner.png new file mode 100644 index 0000000..af89409 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenToner.png differ diff --git a/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png b/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png new file mode 100644 index 0000000..552130e Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png differ diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/Mouse.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/Mouse.svg new file mode 100644 index 0000000..b71ed51 --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/Mouse.svg @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="29.6875" + height="40.625095" + viewBox="0 0 29.6875 40.625095" + enable-background="new 0 0 64 64" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="Mouse.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="747" + inkscape:window-height="596" + id="namedview17" + showgrid="false" + inkscape:zoom="1.84375" + inkscape:cx="-37.919388" + inkscape:cy="92.305679" + inkscape:window-x="266" + inkscape:window-y="72" + inkscape:window-maximized="0" + inkscape:current-layer="Layer_1" + inkscape:snap-center="false" + inkscape:snap-page="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> +<g + id="g3" + transform="translate(-17.15625,-19.531154)"> + <g + id="g5" + style="fill:#4d4d4d;stroke:#4d4d4d"> + <path + d="M 31.9335,20.041 C 24.639,20.034 17.653,20.318 17.653,44.617 c 0,10.951 8.799,15.032 14.347,15.032 5.545,0 14.347,-4.081 14.347,-15.032 0,-24.27 -7.119,-24.569 -14.4135,-24.576 z m 0.7515,1.358 c 5.643,0.012 10.927,0.236 12.063,16.153 -3.86,1.805 -7.916,2.765 -12.063,2.86 l 0,-2.966 c 0.845,-0.162 1.481,-0.909 1.481,-1.782 l 0,-8.956 c 0,-0.876 -0.637,-1.621 -1.481,-1.784 z m -1.027,4.855 0.685,0 c 0.249,0 0.453,0.205 0.453,0.454 l 0,8.956 c 0,0.249 -0.204,0.449 -0.453,0.449 l -0.685,0 c -0.249,0 -0.452,-0.2 -0.452,-0.449 l 0,-8.956 c 0,-0.249 0.203,-0.454 0.452,-0.454 z m -0.345,-4.855 0,3.525 c -0.845,0.163 -1.479,0.91 -1.479,1.784 l 0,8.956 c 0,0.873 0.634,1.62 1.479,1.782 l 0,2.966 C 25.002,40.264 20.408,38.16 19.25,37.573 20.381,21.633 25.668,21.411 31.313,21.399 z M 32,58.274 c -5.016,0 -12.976,-3.707 -12.976,-13.658 0,-1.983 0.045,-3.853 0.134,-5.563 2.003,0.929 6.696,2.74 12.868,2.74 4.394,0 8.704,-0.934 12.813,-2.771 0.089,1.718 0.135,3.6 0.135,5.595 0,9.95 -7.958,13.657 -12.974,13.657 z" + id="path7" + style="fill:#4d4d4d;stroke:#4d4d4d" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cssscccccssccsssssssssccssccccsscscss" /> + </g> + + +<path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 32.922034,38.950793 c 0,-1.135825 0.114919,-1.458045 0.677966,-1.900938 l 0.677966,-0.533288 0,-5.28078 c 0,-5.271249 -0.0012,-5.282003 -0.677966,-5.958745 -0.557439,-0.557439 -0.677966,-0.940935 -0.677966,-2.157165 l 0,-1.479199 1.535487,0 c 5.657554,0 8.584338,3.728529 9.71855,12.380791 0.498434,3.802265 0.50348,3.525731 -0.0676,3.704572 -0.261017,0.08174 -1.528694,0.512016 -2.817059,0.956167 -2.037206,0.702306 -4.048032,1.113044 -7.488026,1.529528 l -0.881356,0.106707 0,-1.36765 z" + id="path3768" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 31.485081,35.842143 c -0.104591,-0.104591 -0.190166,-2.231347 -0.190166,-4.726123 0,-3.983994 0.05502,-4.557071 0.452127,-4.709456 0.24867,-0.09542 0.556802,-0.06882 0.684738,0.05912 0.127937,0.127936 0.199056,2.296481 0.158043,4.818988 -0.06319,3.886405 -0.13867,4.598683 -0.494572,4.667009 -0.231003,0.04435 -0.505579,-0.0049 -0.61017,-0.109533 l 0,0 z" + id="path3770" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 30.440433,57.945316 c -3.064053,-0.42113 -6.77723,-2.474953 -8.457621,-4.67806 -2.1588,-2.830333 -3.113918,-6.737716 -2.769592,-11.330385 l 0.193121,-2.575872 2.07988,0.735628 c 3.527026,1.247466 6.337701,1.719068 10.215474,1.71405 4.171771,-0.0054 6.642981,-0.38868 10.25836,-1.591058 2.178973,-0.724668 2.692193,-0.815856 2.813444,-0.499883 0.08157,0.21256 0.08664,2.119864 0.01127,4.238453 -0.106217,2.98581 -0.266531,4.212938 -0.712935,5.457208 -1.450217,4.042206 -4.401118,6.844156 -8.437938,8.012017 -2.314747,0.669661 -3.34314,0.772215 -5.193465,0.517902 z" + id="path3772" + inkscape:connector-curvature="0" /></g> +<path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644;stroke-opacity:1" + d="M 11.584306,20.532528 C 9.1265112,20.247533 6.2927846,19.555647 4.1047676,18.706316 c -0.969492,-0.376332 -1.792939,-0.704961 -1.829884,-0.730287 -0.152564,-0.104584 0.766016,-6.242541 1.16801,-7.804656 1.421191,-5.5226316 4.304477,-8.0618496 9.1542404,-8.0618496 l 1.541531,0 0,1.627119 c 0,1.237125 -0.09381,1.627118 -0.391402,1.627118 -0.215271,0 -0.581373,0.271221 -0.813559,0.602714 -0.345889,0.493826 -0.422157,1.5275241 -0.422157,5.7217066 l 0,5.118992 0.813559,0.759978 c 0.675846,0.631335 0.813559,0.971083 0.813559,2.007108 0,0.835921 -0.111771,1.235378 -0.338983,1.211489 -0.18644,-0.0196 -1.18336,-0.133551 -2.215376,-0.25322 l 0,0 z" + id="path3766" + inkscape:connector-curvature="0" /></svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseLeft.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseLeft.svg new file mode 100644 index 0000000..4cb117d --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseLeft.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="64px" + height="64px" + viewBox="0 0 64 64" + enable-background="new 0 0 64 64" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="MouseLeft.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1282" + inkscape:window-height="886" + id="namedview17" + showgrid="false" + inkscape:zoom="3.6875" + inkscape:cx="-10.305085" + inkscape:cy="32" + inkscape:window-x="104" + inkscape:window-y="136" + inkscape:window-maximized="0" + inkscape:current-layer="g3" /> +<g + id="g3"> + <g + id="g5" + style="fill:#4d4d4d;stroke:#4d4d4d"> + <path + fill="#020202" + d="M32.854,20.028c-0.015-1.274,0.576-2.269,1.151-3.236c0.758-1.278,1.543-2.6,0.997-4.417 c-0.555-1.667-1.607-2.485-2.539-3.212c-1.254-0.973-2.159-1.676-1.687-4.343l0.041-0.229l-1.35-0.238L29.427,4.58 c-0.615,3.484,0.878,4.643,2.195,5.666c0.85,0.663,1.653,1.288,2.072,2.542c0.366,1.224-0.18,2.143-0.869,3.306 c-0.641,1.081-1.366,2.3-1.349,3.933c-6.837,0.007-13.823,0.291-13.823,24.59c0,10.951,8.799,15.032,14.347,15.032 c5.545,0,14.347-4.081,14.347-15.032C46.347,20.347,39.228,20.048,32.854,20.028z M32.685,21.399 c5.643,0.012,10.927,0.236,12.063,16.153c-3.86,1.805-7.916,2.765-12.063,2.86v-2.966c0.845-0.162,1.481-0.909,1.481-1.782v-8.956 c0-0.876-0.637-1.621-1.481-1.784V21.399z M31.658,26.254h0.685c0.249,0,0.453,0.205,0.453,0.454v8.956 c0,0.249-0.204,0.449-0.453,0.449h-0.685c-0.249,0-0.452-0.2-0.452-0.449v-8.956C31.206,26.459,31.409,26.254,31.658,26.254z M31.313,21.399v3.525c-0.845,0.163-1.479,0.91-1.479,1.784v8.956c0,0.873,0.634,1.62,1.479,1.782v2.966 c-6.311-0.148-10.905-2.252-12.063-2.839C20.381,21.633,25.668,21.411,31.313,21.399z M32,58.274 c-5.016,0-12.976-3.707-12.976-13.658c0-1.983,0.045-3.853,0.134-5.563c2.003,0.929,6.696,2.74,12.868,2.74 c4.394,0,8.704-0.934,12.813-2.771c0.089,1.718,0.135,3.6,0.135,5.595C44.974,54.567,37.016,58.274,32,58.274z" + id="path7" + style="fill:#4d4d4d;stroke:#4d4d4d" /> + </g> + + +<path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 32.922034,38.950793 c 0,-1.135825 0.114919,-1.458045 0.677966,-1.900938 l 0.677966,-0.533288 0,-5.28078 c 0,-5.271249 -0.0012,-5.282003 -0.677966,-5.958745 -0.557439,-0.557439 -0.677966,-0.940935 -0.677966,-2.157165 l 0,-1.479199 1.535487,0 c 5.657554,0 8.584338,3.728529 9.71855,12.380791 0.498434,3.802265 0.50348,3.525731 -0.0676,3.704572 -0.261017,0.08174 -1.528694,0.512016 -2.817059,0.956167 -2.037206,0.702306 -4.048032,1.113044 -7.488026,1.529528 l -0.881356,0.106707 0,-1.36765 z" + id="path3768" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 31.485081,35.842143 c -0.104591,-0.104591 -0.190166,-2.231347 -0.190166,-4.726123 0,-3.983994 0.05502,-4.557071 0.452127,-4.709456 0.24867,-0.09542 0.556802,-0.06882 0.684738,0.05912 0.127937,0.127936 0.199056,2.296481 0.158043,4.818988 -0.06319,3.886405 -0.13867,4.598683 -0.494572,4.667009 -0.231003,0.04435 -0.505579,-0.0049 -0.61017,-0.109533 l 0,0 z" + id="path3770" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 30.440433,57.945316 c -3.064053,-0.42113 -6.77723,-2.474953 -8.457621,-4.67806 -2.1588,-2.830333 -3.113918,-6.737716 -2.769592,-11.330385 l 0.193121,-2.575872 2.07988,0.735628 c 3.527026,1.247466 6.337701,1.719068 10.215474,1.71405 4.171771,-0.0054 6.642981,-0.38868 10.25836,-1.591058 2.178973,-0.724668 2.692193,-0.815856 2.813444,-0.499883 0.08157,0.21256 0.08664,2.119864 0.01127,4.238453 -0.106217,2.98581 -0.266531,4.212938 -0.712935,5.457208 -1.450217,4.042206 -4.401118,6.844156 -8.437938,8.012017 -2.314747,0.669661 -3.34314,0.772215 -5.193465,0.517902 z" + id="path3772" + inkscape:connector-curvature="0" /></g> +<path + style="fill:#66CCFF;stroke:#66CCFF;stroke-width:0.27118643999999997" + d="m 28.740556,40.063682 c -2.457795,-0.284995 -5.291522,-0.976881 -7.479539,-1.826212 -0.969492,-0.376332 -1.792939,-0.704961 -1.829884,-0.730287 -0.152564,-0.104584 0.766016,-6.242541 1.16801,-7.804656 1.421191,-5.522631 4.304477,-8.061849 9.154241,-8.061849 l 1.541531,0 0,1.627119 c 0,1.237125 -0.09381,1.627118 -0.391402,1.627118 -0.215271,0 -0.581373,0.271221 -0.813559,0.602714 -0.345889,0.493826 -0.422157,1.527524 -0.422157,5.721706 l 0,5.118992 0.813559,0.759978 c 0.675846,0.631335 0.813559,0.971083 0.813559,2.007108 0,0.835921 -0.111771,1.235378 -0.338983,1.211489 -0.18644,-0.0196 -1.18336,-0.133551 -2.215376,-0.25322 l 0,0 z" + id="path3766" + inkscape:connector-curvature="0" /></svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg new file mode 100644 index 0000000..303ab90 --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="64px" + height="64px" + viewBox="0 0 64 64" + enable-background="new 0 0 64 64" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="MouseMiddle.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1282" + inkscape:window-height="886" + id="namedview17" + showgrid="false" + inkscape:zoom="3.6875" + inkscape:cx="-10.305085" + inkscape:cy="32" + inkscape:window-x="31" + inkscape:window-y="15" + inkscape:window-maximized="0" + inkscape:current-layer="g3" /> +<g + id="g3"> + <g + id="g5" + style="stroke:#4d4d4d;fill:#4d4d4d"> + <path + fill="#020202" + d="M32.854,20.028c-0.015-1.274,0.576-2.269,1.151-3.236c0.758-1.278,1.543-2.6,0.997-4.417 c-0.555-1.667-1.607-2.485-2.539-3.212c-1.254-0.973-2.159-1.676-1.687-4.343l0.041-0.229l-1.35-0.238L29.427,4.58 c-0.615,3.484,0.878,4.643,2.195,5.666c0.85,0.663,1.653,1.288,2.072,2.542c0.366,1.224-0.18,2.143-0.869,3.306 c-0.641,1.081-1.366,2.3-1.349,3.933c-6.837,0.007-13.823,0.291-13.823,24.59c0,10.951,8.799,15.032,14.347,15.032 c5.545,0,14.347-4.081,14.347-15.032C46.347,20.347,39.228,20.048,32.854,20.028z M32.685,21.399 c5.643,0.012,10.927,0.236,12.063,16.153c-3.86,1.805-7.916,2.765-12.063,2.86v-2.966c0.845-0.162,1.481-0.909,1.481-1.782v-8.956 c0-0.876-0.637-1.621-1.481-1.784V21.399z M31.658,26.254h0.685c0.249,0,0.453,0.205,0.453,0.454v8.956 c0,0.249-0.204,0.449-0.453,0.449h-0.685c-0.249,0-0.452-0.2-0.452-0.449v-8.956C31.206,26.459,31.409,26.254,31.658,26.254z M31.313,21.399v3.525c-0.845,0.163-1.479,0.91-1.479,1.784v8.956c0,0.873,0.634,1.62,1.479,1.782v2.966 c-6.311-0.148-10.905-2.252-12.063-2.839C20.381,21.633,25.668,21.411,31.313,21.399z M32,58.274 c-5.016,0-12.976-3.707-12.976-13.658c0-1.983,0.045-3.853,0.134-5.563c2.003,0.929,6.696,2.74,12.868,2.74 c4.394,0,8.704-0.934,12.813-2.771c0.089,1.718,0.135,3.6,0.135,5.595C44.974,54.567,37.016,58.274,32,58.274z" + id="path7" + style="stroke:#4d4d4d;fill:#4d4d4d" /> + </g> + + +<path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118643999999997" + d="m 32.922034,38.950793 c 0,-1.135825 0.114919,-1.458045 0.677966,-1.900938 l 0.677966,-0.533288 0,-5.28078 c 0,-5.271249 -0.0012,-5.282003 -0.677966,-5.958745 -0.557439,-0.557439 -0.677966,-0.940935 -0.677966,-2.157165 l 0,-1.479199 1.535487,0 c 5.657554,0 8.584338,3.728529 9.71855,12.380791 0.498434,3.802265 0.50348,3.525731 -0.0676,3.704572 -0.261017,0.08174 -1.528694,0.512016 -2.817059,0.956167 -2.037206,0.702306 -4.048032,1.113044 -7.488026,1.529528 l -0.881356,0.106707 0,-1.36765 z" + id="path3768" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 30.440433,57.945316 c -3.064053,-0.42113 -6.77723,-2.474953 -8.457621,-4.67806 -2.1588,-2.830333 -3.113918,-6.737716 -2.769592,-11.330385 l 0.193121,-2.575872 2.07988,0.735628 c 3.527026,1.247466 6.337701,1.719068 10.215474,1.71405 4.171771,-0.0054 6.642981,-0.38868 10.25836,-1.591058 2.178973,-0.724668 2.692193,-0.815856 2.813444,-0.499883 0.08157,0.21256 0.08664,2.119864 0.01127,4.238453 -0.106217,2.98581 -0.266531,4.212938 -0.712935,5.457208 -1.450217,4.042206 -4.401118,6.844156 -8.437938,8.012017 -2.314747,0.669661 -3.34314,0.772215 -5.193465,0.517902 z" + id="path3772" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 28.740556,40.063682 c -2.457795,-0.284995 -5.291522,-0.976881 -7.479539,-1.826212 -0.969492,-0.376332 -1.792939,-0.704961 -1.829884,-0.730287 -0.152564,-0.104584 0.766016,-6.242541 1.16801,-7.804656 1.421191,-5.522631 4.304477,-8.061849 9.154241,-8.061849 l 1.541531,0 0,1.627119 c 0,1.237125 -0.09381,1.627118 -0.391402,1.627118 -0.215271,0 -0.581373,0.271221 -0.813559,0.602714 -0.345889,0.493826 -0.422157,1.527524 -0.422157,5.721706 l 0,5.118992 0.813559,0.759978 c 0.675846,0.631335 0.813559,0.971083 0.813559,2.007108 0,0.835921 -0.111771,1.235378 -0.338983,1.211489 -0.18644,-0.0196 -1.18336,-0.133551 -2.215376,-0.25322 l 0,0 z" + id="path3778" + inkscape:connector-curvature="0" /><path + style="fill:#ffd800;stroke:#ffd800;stroke-width:0.33870965" + d="m 31.356243,35.809264 c -0.164314,-0.103856 -0.298753,-2.215682 -0.298753,-4.692945 0,-3.956026 0.08644,-4.52508 0.710296,-4.676395 0.390663,-0.09475 0.87474,-0.06834 1.075729,0.0587 0.200991,0.127038 0.312719,2.28036 0.248288,4.785159 -0.09927,3.859122 -0.217853,4.566401 -0.776977,4.634247 -0.362909,0.04404 -0.79427,-0.0049 -0.958583,-0.108765 l 0,0 z" + id="path3770" + inkscape:connector-curvature="0" /></g> +</svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseRight.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseRight.svg new file mode 100644 index 0000000..1c6f34d --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/MouseRight.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="64px" + height="64px" + viewBox="0 0 64 64" + enable-background="new 0 0 64 64" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="MouseRight.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1282" + inkscape:window-height="886" + id="namedview17" + showgrid="false" + inkscape:zoom="3.6875" + inkscape:cx="32" + inkscape:cy="32" + inkscape:window-x="31" + inkscape:window-y="15" + inkscape:window-maximized="0" + inkscape:current-layer="g3" /> +<g + id="g3"> + <g + id="g5" + style="stroke:#4d4d4d;fill:#4d4d4d"> + <path + fill="#020202" + d="M32.854,20.028c-0.015-1.274,0.576-2.269,1.151-3.236c0.758-1.278,1.543-2.6,0.997-4.417 c-0.555-1.667-1.607-2.485-2.539-3.212c-1.254-0.973-2.159-1.676-1.687-4.343l0.041-0.229l-1.35-0.238L29.427,4.58 c-0.615,3.484,0.878,4.643,2.195,5.666c0.85,0.663,1.653,1.288,2.072,2.542c0.366,1.224-0.18,2.143-0.869,3.306 c-0.641,1.081-1.366,2.3-1.349,3.933c-6.837,0.007-13.823,0.291-13.823,24.59c0,10.951,8.799,15.032,14.347,15.032 c5.545,0,14.347-4.081,14.347-15.032C46.347,20.347,39.228,20.048,32.854,20.028z M32.685,21.399 c5.643,0.012,10.927,0.236,12.063,16.153c-3.86,1.805-7.916,2.765-12.063,2.86v-2.966c0.845-0.162,1.481-0.909,1.481-1.782v-8.956 c0-0.876-0.637-1.621-1.481-1.784V21.399z M31.658,26.254h0.685c0.249,0,0.453,0.205,0.453,0.454v8.956 c0,0.249-0.204,0.449-0.453,0.449h-0.685c-0.249,0-0.452-0.2-0.452-0.449v-8.956C31.206,26.459,31.409,26.254,31.658,26.254z M31.313,21.399v3.525c-0.845,0.163-1.479,0.91-1.479,1.784v8.956c0,0.873,0.634,1.62,1.479,1.782v2.966 c-6.311-0.148-10.905-2.252-12.063-2.839C20.381,21.633,25.668,21.411,31.313,21.399z M32,58.274 c-5.016,0-12.976-3.707-12.976-13.658c0-1.983,0.045-3.853,0.134-5.563c2.003,0.929,6.696,2.74,12.868,2.74 c4.394,0,8.704-0.934,12.813-2.771c0.089,1.718,0.135,3.6,0.135,5.595C44.974,54.567,37.016,58.274,32,58.274z" + id="path7" + style="stroke:#4d4d4d;fill:#4d4d4d" /> + </g> + + +<path + style="fill:#65FD00;stroke:#65FD00;stroke-width:0.27118643999999997" + d="m 32.922034,38.950793 c 0,-1.135825 0.114919,-1.458045 0.677966,-1.900938 l 0.677966,-0.533288 0,-5.28078 c 0,-5.271249 -0.0012,-5.282003 -0.677966,-5.958745 -0.557439,-0.557439 -0.677966,-0.940935 -0.677966,-2.157165 l 0,-1.479199 1.535487,0 c 5.657554,0 8.584338,3.728529 9.71855,12.380791 0.498434,3.802265 0.50348,3.525731 -0.0676,3.704572 -0.261017,0.08174 -1.528694,0.512016 -2.817059,0.956167 -2.037206,0.702306 -4.048032,1.113044 -7.488026,1.529528 l -0.881356,0.106707 0,-1.36765 z" + id="path3768" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 31.485081,35.842143 c -0.104591,-0.104591 -0.190166,-2.231347 -0.190166,-4.726123 0,-3.983994 0.05502,-4.557071 0.452127,-4.709456 0.24867,-0.09542 0.556802,-0.06882 0.684738,0.05912 0.127937,0.127936 0.199056,2.296481 0.158043,4.818988 -0.06319,3.886405 -0.13867,4.598683 -0.494572,4.667009 -0.231003,0.04435 -0.505579,-0.0049 -0.61017,-0.109533 l 0,0 z" + id="path3770" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 30.440433,57.945316 c -3.064053,-0.42113 -6.77723,-2.474953 -8.457621,-4.67806 -2.1588,-2.830333 -3.113918,-6.737716 -2.769592,-11.330385 l 0.193121,-2.575872 2.07988,0.735628 c 3.527026,1.247466 6.337701,1.719068 10.215474,1.71405 4.171771,-0.0054 6.642981,-0.38868 10.25836,-1.591058 2.178973,-0.724668 2.692193,-0.815856 2.813444,-0.499883 0.08157,0.21256 0.08664,2.119864 0.01127,4.238453 -0.106217,2.98581 -0.266531,4.212938 -0.712935,5.457208 -1.450217,4.042206 -4.401118,6.844156 -8.437938,8.012017 -2.314747,0.669661 -3.34314,0.772215 -5.193465,0.517902 z" + id="path3772" + inkscape:connector-curvature="0" /><path + style="fill:#ffffff;stroke:#ffffff;stroke-width:0.27118644" + d="m 28.740556,40.063682 c -2.457795,-0.284995 -5.291522,-0.976881 -7.479539,-1.826212 -0.969492,-0.376332 -1.792939,-0.704961 -1.829884,-0.730287 -0.152564,-0.104584 0.766016,-6.242541 1.16801,-7.804656 1.421191,-5.522631 4.304477,-8.061849 9.154241,-8.061849 l 1.541531,0 0,1.627119 c 0,1.237125 -0.09381,1.627118 -0.391402,1.627118 -0.215271,0 -0.581373,0.271221 -0.813559,0.602714 -0.345889,0.493826 -0.422157,1.527524 -0.422157,5.721706 l 0,5.118992 0.813559,0.759978 c 0.675846,0.631335 0.813559,0.971083 0.813559,2.007108 0,0.835921 -0.111771,1.235378 -0.338983,1.211489 -0.18644,-0.0196 -1.18336,-0.133551 -2.215376,-0.25322 l 0,0 z" + id="path3778" + inkscape:connector-curvature="0" /></g> +</svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/Touch.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/Touch.svg new file mode 100644 index 0000000..6e31dbc --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/Touch.svg @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="76.664284" + height="128.25087" + viewBox="0 0 76.664283 128.25086" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="Touch.svg"><metadata + id="metadata3468"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs3466" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="920" + inkscape:window-height="780" + id="namedview3464" + showgrid="false" + inkscape:zoom="1.7688899" + inkscape:cx="-0.07794217" + inkscape:cy="94.239301" + inkscape:window-x="1529" + inkscape:window-y="186" + inkscape:window-maximized="0" + inkscape:current-layer="g3428" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> +<g + id="g3428" + transform="translate(-7.9878665e-4,-5.1661327)"> + + <path + d="M 76.151,80.896 C 77.465,66.89 62.145,65.577 62.145,65.577 57.771,52.885 46.39,59.45 46.39,59.45 40.701,46.758 29.322,55.511 29.322,55.511 27.912,55.092 25.613,11.796 24.414,11.604 23.44,7.068 14.011,-1.728 12.511,14.772 c 0,36.5 -1.135,47.304 -1.135,47.304 C 9.188,67.328 5.31,80.458 5.31,80.458 -3.006,89.649 0.933,96.214 0.933,96.214 c 7.002,12.255 21.385,28.449 21.385,28.449 6.129,5.252 2.627,8.316 2.627,8.316 l 42.455,0.438 2.334,-7.878 c 9.628,-18.382 6.417,-44.643 6.417,-44.643 z" + id="path3432" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccc" + style="fill:#ffffff;fill-opacity:1" /> +</g> +<g + id="g3434" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3436" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3438" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3440" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3442" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3444" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3446" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3448" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3450" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3452" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3454" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3456" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3458" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3460" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +<g + id="g3462" + transform="translate(-7.9878665e-4,-5.1661327)"> +</g> +</svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchDrag.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchDrag.svg new file mode 100644 index 0000000..1d09474 --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchDrag.svg @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="76.664284" + height="133.41701" + viewBox="0 0 76.664283 133.417" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="TouchDrag.svg"><metadata + id="metadata3468"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs3466" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="920" + inkscape:window-height="780" + id="namedview3464" + showgrid="false" + inkscape:zoom="1.7688899" + inkscape:cx="-0.077942171" + inkscape:cy="94.239298" + inkscape:window-x="161" + inkscape:window-y="225" + inkscape:window-maximized="0" + inkscape:current-layer="g3428" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> +<g + id="g3428" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="M 18.653,0 C 12.359,0 7.258,5.102 7.258,11.395 c 0,6.293 5.102,11.395 11.396,11.395 6.293,0 11.395,-5.102 11.395,-11.395 C 30.048,5.102 24.946,0 18.653,0 z m 0,20.43 c -4.989,0 -9.036,-4.046 -9.036,-9.036 0,-4.989 4.047,-9.035 9.036,-9.035 4.989,0 9.035,4.046 9.035,9.035 0,4.99 -4.045,9.036 -9.035,9.036 z" + id="path3430" + inkscape:connector-curvature="0" /> + <path + d="M 76.151,80.896 C 77.465,66.89 62.145,65.577 62.145,65.577 57.771,52.885 46.39,59.45 46.39,59.45 40.701,46.758 29.322,55.511 29.322,55.511 27.912,55.092 25.613,11.796 24.414,11.604 23.44,7.068 14.011,-1.728 12.511,14.772 c 0,36.5 -1.135,47.304 -1.135,47.304 C 9.188,67.328 5.31,80.458 5.31,80.458 -3.006,89.649 0.933,96.214 0.933,96.214 c 7.002,12.255 21.385,28.449 21.385,28.449 6.129,5.252 2.627,8.316 2.627,8.316 l 42.455,0.438 2.334,-7.878 c 9.628,-18.382 6.417,-44.643 6.417,-44.643 z" + id="path3432" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccc" + style="fill:#ffffff;fill-opacity:1" /> +<path + d="m 65.247258,98.823749 c -0.681067,0.71969 -7.149935,7.376421 -7.149935,7.376421 0,0 -0.86404,0.92222 -0.86404,-0.29705 0.0013,-1.22468 0.0013,-3.17039 0.0013,-3.17039 0,0 -0.498094,0.003 -1.261753,0.002 -2.35324,0.002 -6.936466,0.002 -8.692502,0.002 0,0 -0.07751,-0.007 -0.162642,-0.0472 0,0.0378 0,0.0972 0,0.13232 0.01652,0.0891 0.0013,0.16068 0,0.16608 0,0.0149 0,0.0419 0,0.0554 0,0 0.01779,0.077 0,0.17013 0,2.02673 0,6.49066 0,8.99672 0.0013,0.90332 0,1.49203 0,1.49203 0,0 2.283354,0.002 3.229986,0 0.942821,0 0.07751,0.87225 0.07751,0.87225 l -7.121981,7.36157 c 0,0 -0.470139,0.5833 -0.963151,0.0607 -0.677255,-0.72374 -6.941548,-7.59515 -6.941548,-7.59515 0,0 -0.867853,-0.91952 0.280812,-0.91952 1.151207,0.002 2.983481,0.002 2.983481,0.002 0,0 -0.0026,-0.52929 -0.0013,-1.34079 -0.0013,-2.50067 -0.0013,-7.37102 -0.0013,-9.23572 l 0,-0.004 c 0,-0.0567 0,-0.14582 0,-0.21333 -0.08259,0.0392 -0.15883,0.0459 -0.15883,0.0459 -1.756036,0 -6.339262,0 -8.696314,-0.002 -0.759847,0.002 -1.260482,0 -1.260482,0 0,0 0.0026,1.94706 0.0026,3.17039 -0.0013,1.21793 -0.864041,0.29975 -0.864041,0.29975 0,0 -6.467597,-6.655381 -7.147393,-7.377761 -0.493012,-0.52525 0.05464,-1.02484 0.05464,-1.02484 l 6.927571,-7.566801 c 0,0 0.82338,-0.92357 0.82211,0.08236 0.0026,1.004586 0.0026,3.432334 0.0026,3.432334 0,0 0.552732,-0.0014 1.402796,-0.0041 2.439643,0.0041 6.872933,0.0027 8.678524,0.0014 0,0 0.116899,-0.03106 0.23634,0.027 0,-4.084505 0,-8.204115 0.0013,-9.436893 -0.0013,-0.807449 0,-1.339448 0,-1.339448 0,0 -1.832274,0.0027 -2.983481,0.0027 -1.146124,-0.0014 -0.280813,-0.918169 -0.280813,-0.918169 0,0 6.261752,-6.872771 6.942819,-7.596505 0.494283,-0.522547 0.964422,0.05806 0.964422,0.05806 l 7.12071,7.361561 c 0,0 0.869123,0.874963 -0.07624,0.872261 -0.945362,0.0027 -3.229987,0.0027 -3.229987,0.0027 0,0 0.0013,0.587358 0.0038,1.492025 -0.0013,1.284087 -0.0026,5.419901 -0.0026,9.503056 0.120712,-0.06211 0.240153,-0.02835 0.240153,-0.02835 1.804319,0 6.237609,0 8.675982,0 0.851334,-0.0014 1.404066,0 1.404066,0 0,0 0.0013,-2.426399 0,-3.430985 0,-1.003235 0.820838,-0.08236 0.820838,-0.08236 l 6.927572,7.566803 c 0,0.001 0.546378,0.50094 0.05845,1.02484 z" + id="path3238" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccccccccsscccccccccccccccccccccccccccccccc" + style="fill:#66ccff;fill-opacity:1" /></g> +<g + id="g3434" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3436" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3438" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3440" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3442" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3444" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3446" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3448" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3450" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3452" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3454" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3456" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3458" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3460" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +<g + id="g3462" + transform="translate(-7.9878665e-4,-2.9265169e-6)"> +</g> +</svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchRotate.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchRotate.svg new file mode 100644 index 0000000..0b5264f --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchRotate.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="99.001816" + height="101.57817" + viewBox="0 0 99.001814 101.57817" + enable-background="new 0 0 100.775 118.638" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="TouchRotate.svg"><metadata + id="metadata3382"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs3380" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1105" + inkscape:window-height="739" + id="namedview3378" + showgrid="false" + inkscape:zoom="1.9873603" + inkscape:cx="11.856691" + inkscape:cy="15.112094" + inkscape:window-x="67" + inkscape:window-y="152" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + +<path + inkscape:connector-curvature="0" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 48.832974,0 c -5.85006,0 -10.591269,4.862311 -10.591269,10.85967 0,5.997358 4.742138,10.859669 10.592198,10.859669 5.849132,0 10.59127,-4.862311 10.59127,-10.859669 C 59.42425,4.862311 54.682106,0 48.832974,0 z m 0,19.47021 c -4.637107,0 -8.398657,-3.855921 -8.398657,-8.611493 0,-4.754621 3.76155,-8.610543 8.398657,-8.610543 4.637107,0 8.397729,3.855922 8.397729,8.610543 0,4.755572 -3.759691,8.611493 -8.397729,8.611493 z" + id="path3430" /><path + inkscape:connector-curvature="0" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 27.154761,39.321738 c -5.457398,0 -9.88037,4.703155 -9.88037,10.504205 0,5.801049 4.423839,10.504204 9.881237,10.504204 5.456532,0 9.880371,-4.703155 9.880371,-10.504204 -8.67e-4,-5.80105 -4.424707,-10.504205 -9.881238,-10.504205 z m 0,18.8329 c -4.325859,0 -7.834929,-3.729707 -7.834929,-8.329617 0,-4.598989 3.50907,-8.328696 7.834929,-8.328696 4.32586,0 7.834063,3.729707 7.834063,8.328696 0,4.59991 -3.507336,8.329617 -7.834063,8.329617 z" + id="path3430-5" /><path + d="M 93.394891,94.930552 91.5074,101.57817 52.728925,101.21032 c 8.08e-4,-8.5e-4 2.829619,-2.585988 -2.124439,-7.016318 0,0 -10.822746,-5.22596 -18.506953,-18.0968 0,0 -6.310236,-6.742109 -6.091889,-9.206596 -0.583067,-4.408398 -1.209805,-6.954724 -1.715239,-8.534999 -1.063849,-4.039774 -1.553525,-2.844172 -1.553525,-7.228104 2.452812,-14.333817 10.869455,1.810623 12.764445,5.488368 0,0 6.305384,7.578229 9.063029,9.283373 8.851152,-2.291524 3.039071,-22.109494 3.660956,-23.668675 0,0 -1.25024,-10.043558 -2.822341,-23.064577 -3.9949,-15.561935 8.286796,-19.626706 11.636292,-3.093053 1.545414,7.344522 3.686834,19.52689 4.483397,19.774098 0,0 8.395048,-7.385018 12.995707,3.323385 0,0 9.202125,-5.538975 12.741777,5.170273 0,0 12.387573,1.10695 11.326563,12.923992 0,0 2.595085,22.156743 -5.191814,37.665865 z" + id="path3376" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccccc" + style="fill:#ffffff" /><path + d="m 36.857901,10.534807 -5.731265,12.511815 c 0,0 -0.666487,1.516584 -1.19043,0.316343 -0.52908,-1.19559 -1.800413,-4.092683 -1.800413,-4.092683 0,0 -0.774356,0.279126 -1.962218,0.711771 -3.412049,1.225827 -9.61846,3.462323 -12.145716,4.370646 0,0 -0.609983,0.412873 -1.019633,-0.532666 -0.419926,-0.944375 -3.7806092,-8.602891 -4.0798222,-9.279772 -0.294076,-0.674552 0.288938,-0.867615 0.288938,-0.867615 2.4553422,-0.886224 8.8659382,-3.19599 12.1688342,-4.381112 1.05816,-0.382636 1.763171,-0.631523 1.763171,-0.631523 0,0 -1.02734,-2.324887 -1.664289,-3.782156 -0.636951,-1.454944 1.049169,-0.79202 1.049169,-0.79202 0,0 12.534822,4.676522 13.866509,5.195231 0.963131,0.382636 0.457165,1.253741 0.457165,1.253741 z" + id="path9" + style="fill:#d800d8;fill-opacity:1" + inkscape:connector-curvature="0" /><g + id="g2997" + transform="matrix(0,-1,1,0,-0.01316643,45.882166)" + inkscape:transform-center-x="-4.9812271" + inkscape:transform-center-y="-4.2696251"><path + id="path2999" + d="M 6.6614176,0.14173229 19.48819,5.5984253 c 0,0 1.559055,0.6377953 0.354331,1.1338583 -1.240158,0.5314961 -4.181103,1.7716536 -4.181103,1.7716536 0,0 0.283465,0.7440945 0.744095,1.9133858 1.27559,3.259843 3.57874,9.248032 4.535433,11.692914 0,0 0.425197,0.566929 -0.566929,0.992126 -0.956693,0.389764 -8.751969,3.685039 -9.460631,4.003937 -0.673228,0.283464 -0.885827,-0.283465 -0.885827,-0.283465 C 9.1062996,24.448819 6.6968507,18.283465 5.4921262,15.094489 5.0669294,14.066929 4.8188979,13.393701 4.8188979,13.393701 c 0,0 -2.3740159,0.992126 -3.86220494,1.629921 -1.48818905,0.637796 -0.81496067,-0.992126 -0.81496067,-0.992126 0,0 4.71259861,-12.1535432 5.24409471,-13.42913378 0.3897638,-0.95669294 1.2755906,-0.46062993 1.2755906,-0.46062993 z" + style="fill:#d800d8;fill-opacity:1;fill-rule:nonzero;stroke:none" + inkscape:connector-curvature="0" /></g></svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchTilt.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchTilt.svg new file mode 100644 index 0000000..804f836 --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchTilt.svg @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="76.663582" + height="140.44" + viewBox="0 0 76.663581 140.44" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="TouchTilt.svg"><metadata + id="metadata3364"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs3362" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="766" + inkscape:window-height="480" + id="namedview3360" + showgrid="false" + inkscape:zoom="1.6804329" + inkscape:cx="6.1930652" + inkscape:cy="74.717535" + inkscape:window-x="343" + inkscape:window-y="203" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> +<g + id="g3322" + style="fill:#ffffff" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 12.622,5.815 c -6.294,0 -11.396,5.102 -11.396,11.395 0,6.293 5.102,11.395 11.396,11.395 6.293,0 11.395,-5.102 11.395,-11.395 0,-6.293 -5.102,-11.395 -11.395,-11.395 z m 0,20.431 c -4.99,0 -9.036,-4.046 -9.036,-9.036 0,-4.989 4.046,-9.035 9.036,-9.035 4.988,0 9.035,4.046 9.035,9.035 0,4.99 -4.047,9.036 -9.035,9.036 z" + id="path3324" + inkscape:connector-curvature="0" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 43.793,0 c -6.294,0 -11.396,5.102 -11.396,11.395 0,6.293 5.102,11.395 11.396,11.395 6.293,0 11.395,-5.102 11.395,-11.395 C 55.188,5.102 50.086,0 43.793,0 z m 0,20.43 c -4.99,0 -9.036,-4.046 -9.036,-9.036 0,-4.989 4.046,-9.035 9.036,-9.035 4.988,0 9.035,4.046 9.035,9.035 0,4.99 -4.047,9.036 -9.035,9.036 z" + id="path3326" + inkscape:connector-curvature="0" /> + <path + d="M 76.151,87.918 C 77.464,73.913 62.146,72.6 62.146,72.6 57.769,59.907 47.556,66.472 47.556,66.472 c 0,0 2.262,-49.025 1.395,-54.713 -0.51,-3.331 -6.383,-10.562 -9.998,-1.684 -2.137,6.166 -5.59,60.75 -9.465,56.874 C 24.984,62.447 20.611,18.817 19.414,18.626 18.438,14.09 9.011,5.294 7.511,21.794 c 3,39.5 3.865,47.304 3.865,47.304 C 9.187,74.35 5.31,87.481 5.31,87.481 c -8.316,9.191 -4.377,15.756 -4.377,15.756 7.002,12.255 21.385,28.449 21.385,28.449 6.127,5.252 2.625,8.316 2.625,8.316 l 42.455,0.438 2.334,-7.879 c 9.628,-18.382 6.419,-44.643 6.419,-44.643 z" + id="path3328" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccc" + style="fill:#ffffff" /> +</g> +<g + id="g3330" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3332" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3334" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3336" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3338" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3340" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3342" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3344" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3346" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3348" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3350" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3352" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3354" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3356" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<g + id="g3358" + transform="translate(-7.9878665e-4,-3.8214145e-7)"> +</g> +<path + inkscape:connector-curvature="0" + d="m 52.342987,124.78465 -8.980622,9.44613 c 0,0 -0.592129,0.74692 -1.214412,0.0786 -0.853927,-0.92772 -8.753091,-9.74549 -8.753091,-9.74549 0,0 -1.096535,-1.17966 0.352262,-1.17818 1.454279,10e-4 3.762485,10e-4 3.762485,10e-4 0,0 -0.0027,-0.67875 -0.0014,-1.72058 -0.0014,-3.20848 -0.0014,-9.4565 -0.0027,-11.8499 0,0 -0.01233,-0.56315 0.655179,-0.56019 0.672999,0 8.298029,0 9.238308,-0.003 0.937537,0.003 0.774428,0.66985 0.774428,0.66985 0,2.45861 0,8.50359 -0.0027,11.82767 0.0041,1.16039 0.0027,1.91472 0.0027,1.91472 0,0 2.879775,0.003 4.070886,0 1.192483,-10e-4 0.09869,1.11889 0.09869,1.11889 z m -0.09869,-37.828986 c -1.191111,0.003 -4.073627,0.003 -4.073627,0.003 0,0 0.0027,0.752845 0.0041,1.914716 -0.0041,3.327041 -0.0041,9.370556 -0.0014,11.83064 0,0 0.16174,0.66393 -0.774427,0.66096 -0.943021,0.006 -8.563939,0.003 -9.235567,0.004 -0.670257,-0.003 -0.65655,-0.56167 -0.65655,-0.56167 -0.0014,-2.393393 -0.0014,-8.642902 0.0014,-11.855831 -0.0014,-1.034421 0,-1.717613 0,-1.717613 0,0 -2.312318,0.003 -3.762486,0.0044 -1.444685,-0.003 -0.355003,-1.178173 -0.355003,-1.178173 0,0 7.896422,-8.81777 8.755832,-9.745488 0.622284,-0.671338 1.215783,0.07558 1.215783,0.07558 l 8.979252,9.444648 c 0,0 1.096534,1.121857 -0.09732,1.120375 z" + id="path3432" + sodipodi:nodetypes="ccccsccccccccccccccccccccccccc" + style="fill:#ffd800;fill-opacity:1" /></svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchZoom.svg b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchZoom.svg new file mode 100644 index 0000000..84f7e6e --- /dev/null +++ b/public/lib/Cesium/Widgets/Images/NavigationHelp/TouchZoom.svg @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="95.087433" + height="118.43173" + viewBox="0 0 95.087431 118.43173" + enable-background="new 0 0 100.775 118.638" + xml:space="preserve" + inkscape:version="0.48.4 r9939" + sodipodi:docname="TouchZoom.svg"><metadata + id="metadata3382"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs3380" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1105" + inkscape:window-height="739" + id="namedview3378" + showgrid="false" + inkscape:zoom="2.8132167" + inkscape:cx="10.565593" + inkscape:cy="72.192791" + inkscape:window-x="67" + inkscape:window-y="152" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + +<path + d="m 0.0436199,84.941029 c 0,0 -0.2799964,-1.323641 0.578786,-0.720397 0.8621957,0.601498 2.9536375,2.059778 2.9536375,2.059778 0,0 0.3431801,-0.517567 0.8707286,-1.316651 1.521209,-2.28009 4.281925,-6.427623 5.405325,-8.116707 0,0 0.187721,-0.53855 0.863902,-0.06295 0.682926,0.472104 6.206065,4.329377 6.692655,4.668591 0.483157,0.340966 0.220227,0.718649 0.220227,0.718649 -1.094368,1.641877 -3.948985,5.929292 -5.418977,8.132449 -0.469526,0.711655 -0.783654,1.178514 -0.783654,1.178514 0,0 1.678274,1.168023 2.728271,1.900661 1.043172,0.732637 -0.28341,0.987925 -0.28341,0.987925 0,0 -9.7470195,2.05628 -10.7936043,2.25911 -0.756328,0.145111 -0.8468168,-0.666198 -0.8468168,-0.666198 z" + id="path3376-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccccc" + style="fill:#65ff00;fill-opacity:1" /><path + inkscape:connector-curvature="0" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 44.918594,16.853557 c -5.85006,0 -10.591269,4.862311 -10.591269,10.85967 0,5.997358 4.742138,10.859669 10.592198,10.859669 5.849132,0 10.59127,-4.862311 10.59127,-10.859669 -9.23e-4,-5.997359 -4.743067,-10.85967 -10.592199,-10.85967 z m 0,19.47021 c -4.637107,0 -8.398657,-3.855921 -8.398657,-8.611493 0,-4.754621 3.76155,-8.610543 8.398657,-8.610543 4.637107,0 8.397729,3.855922 8.397729,8.610543 0,4.755572 -3.759691,8.611493 -8.397729,8.611493 z" + id="path3430" /><path + inkscape:connector-curvature="0" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd" + d="m 23.240381,56.175295 c -5.457398,0 -9.88037,4.703155 -9.88037,10.504205 0,5.801049 4.423839,10.504204 9.881237,10.504204 5.456532,0 9.880371,-4.703155 9.880371,-10.504204 -8.67e-4,-5.80105 -4.424707,-10.504205 -9.881238,-10.504205 z m 0,18.8329 c -4.325859,0 -7.834929,-3.729707 -7.834929,-8.329617 0,-4.598989 3.50907,-8.328696 7.834929,-8.328696 4.32586,0 7.834063,3.729707 7.834063,8.328696 0,4.59991 -3.507336,8.329617 -7.834063,8.329617 z" + id="path3430-5" /><path + d="m 89.480511,111.78411 -1.887491,6.64762 -38.778475,-0.36785 c 8.08e-4,-8.5e-4 2.829619,-2.58599 -2.124439,-7.01632 0,0 -10.822746,-5.22596 -18.506953,-18.096801 0,0 -6.310236,-6.742109 -6.091889,-9.206596 C 21.508197,79.335765 20.881459,76.789439 20.376025,75.209164 19.312176,71.16939 18.8225,72.364992 18.8225,67.98106 c 2.452812,-14.333817 10.869455,1.810623 12.764445,5.488368 0,0 6.305384,7.578229 9.063029,9.283373 8.851152,-2.291524 3.039071,-22.109494 3.660956,-23.668675 0,0 -1.25024,-10.043558 -2.822341,-23.064577 -3.9949,-15.561935 8.286796,-19.626706 11.636292,-3.093053 1.545414,7.344522 3.686834,19.52689 4.483397,19.774098 0,0 8.395048,-7.385018 12.995707,3.323385 0,0 9.202125,-5.538975 12.741777,5.170273 0,0 12.387573,1.10695 11.326563,12.923992 0,0 2.59509,22.156743 -5.191814,37.665866 z" + id="path3376" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccccc" + style="fill:#ffffff" /><path + d="m 49.854025,14.903508 c 0.696314,0.466948 6.359531,4.268019 6.858144,4.604015 0.491619,0.334273 0.748797,-0.05343 0.748797,-0.05343 1.121449,-1.617954 4.044902,-5.844621 5.545997,-8.013953 0.488115,-0.703007 0.803031,-1.164787 0.803031,-1.164787 0,0 1.714536,1.152726 2.792243,1.876411 1.07596,0.721961 0.813533,-0.620302 0.813533,-0.620302 0,0 -1.732034,-9.8989818 -1.933227,-10.95349441 -0.150463,-0.7615853 -0.939496,-0.5513731 -0.939496,-0.5513731 L 53.458049,1.9374693 c 0,0 -1.336636,0.2136595 -0.454876,0.8046693 0.88876,0.5927325 3.02493,2.0297666 3.02493,2.0297666 0,0 -0.355152,0.5083037 -0.895757,1.2940169 -1.558825,2.2468717 -4.387811,6.3339699 -5.538999,7.9984459 -0.0018,0.0017 -0.433883,0.370456 0.260678,0.83914 z" + id="path3376-7-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccccc" + style="fill:#65ff00;fill-opacity:1" /></svg> \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png b/public/lib/Cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png new file mode 100644 index 0000000..16343ec Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png differ diff --git a/public/lib/Cesium/Widgets/Images/TerrainProviders/Ellipsoid.png b/public/lib/Cesium/Widgets/Images/TerrainProviders/Ellipsoid.png new file mode 100644 index 0000000..a36259b Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/TerrainProviders/Ellipsoid.png differ diff --git a/public/lib/Cesium/Widgets/Images/TimelineIcons.png b/public/lib/Cesium/Widgets/Images/TimelineIcons.png new file mode 100644 index 0000000..e3a0455 Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/TimelineIcons.png differ diff --git a/public/lib/Cesium/Widgets/Images/info-loading.gif b/public/lib/Cesium/Widgets/Images/info-loading.gif new file mode 100644 index 0000000..8df10dd Binary files /dev/null and b/public/lib/Cesium/Widgets/Images/info-loading.gif differ diff --git a/public/lib/Cesium/Widgets/InfoBox/InfoBox.css b/public/lib/Cesium/Widgets/InfoBox/InfoBox.css new file mode 100644 index 0000000..5526dc4 --- /dev/null +++ b/public/lib/Cesium/Widgets/InfoBox/InfoBox.css @@ -0,0 +1 @@ +.cesium-infoBox{display:block;position:absolute;top:50px;right:0;width:40%;max-width:480px;background:rgba(38,38,38,.95);color:#edffff;border:1px solid #444;border-right:none;border-top-left-radius:7px;border-bottom-left-radius:7px;box-shadow:0 0 10px 1px #000;transform:translate(100%,0);visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in,transform .2s ease-in}.cesium-infoBox-visible{transform:translate(0,0);visibility:visible;opacity:1;transition:opacity .2s ease-out,transform .2s ease-out}.cesium-infoBox-title{display:block;height:20px;padding:5px 30px 5px 25px;background:#545454;border-top-left-radius:7px;text-align:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;box-sizing:content-box}.cesium-infoBox-bodyless .cesium-infoBox-title{border-bottom-left-radius:7px}button.cesium-infoBox-camera{display:block;position:absolute;top:4px;left:4px;width:22px;height:22px;background:0 0;border-color:transparent;border-radius:3px;padding:0 5px;margin:0}button.cesium-infoBox-close{display:block;position:absolute;top:5px;right:5px;height:20px;background:0 0;border:none;border-radius:2px;font-weight:700;font-size:16px;padding:0 5px;margin:0;color:#edffff}button.cesium-infoBox-close:focus{background:rgba(238,136,0,.44);outline:0}button.cesium-infoBox-close:hover{background:#888;color:#000}button.cesium-infoBox-close:active{background:#a00;color:#000}.cesium-infoBox-bodyless .cesium-infoBox-iframe{display:none}.cesium-infoBox-iframe{border:none;width:100%;width:calc(100% - 2px)} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/InfoBox/InfoBoxDescription.css b/public/lib/Cesium/Widgets/InfoBox/InfoBoxDescription.css new file mode 100644 index 0000000..93b6e2e --- /dev/null +++ b/public/lib/Cesium/Widgets/InfoBox/InfoBoxDescription.css @@ -0,0 +1 @@ +.cesium-svgPath-svg{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.cesium-button{display:inline-block;position:relative;background:#303336;border:1px solid #444;color:#edffff;fill:#edffff;border-radius:4px;padding:5px 12px;margin:2px 3px;cursor:pointer;overflow:hidden;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-button:focus{color:#fff;fill:#fff;border-color:#ea4;outline:0}.cesium-button:hover{color:#fff;fill:#fff;background:#48b;border-color:#aef;box-shadow:0 0 8px #fff}.cesium-button:active{color:#000;fill:#000;background:#adf;border-color:#fff;box-shadow:0 0 8px #fff}.cesium-button-disabled,.cesium-button-disabled:active,.cesium-button-disabled:focus,.cesium-button-disabled:hover,.cesium-button:disabled{background:#303336;border-color:#444;color:#646464;fill:#646464;box-shadow:none;cursor:default}.cesium-button option{background-color:#000;color:#eee}.cesium-button option:disabled{color:#777}.cesium-button input,.cesium-button label{cursor:pointer}.cesium-button input{vertical-align:sub}.cesium-toolbar-button{box-sizing:border-box;width:32px;height:32px;border-radius:14%;padding:0;vertical-align:middle;z-index:0}.cesium-performanceDisplay-defaultContainer{position:absolute;top:50px;right:10px;text-align:right}.cesium-performanceDisplay{background-color:rgba(40,40,40,.7);padding:7px;border-radius:5px;border:1px solid #444;font:bold 12px sans-serif}.cesium-performanceDisplay-fps{color:#e52}.cesium-performanceDisplay-throttled{color:#a42}.cesium-performanceDisplay-ms{color:#de3}body{margin:0;padding:0}.cesium-infoBox-description{font-family:sans-serif;font-size:13px;padding:4px 10px;margin-right:4px;color:#edffff}.cesium-infoBox-description a:active,.cesium-infoBox-description a:hover,.cesium-infoBox-description a:link,.cesium-infoBox-description a:visited{color:#edffff}.cesium-infoBox-description table{color:#edffff}.cesium-infoBox-defaultTable{width:100%;color:#edffff}.cesium-infoBox-defaultTable tr:nth-child(odd){background-color:rgba(84,84,84,.8)}.cesium-infoBox-defaultTable tr:nth-child(even){background-color:rgba(84,84,84,.25)}.cesium-infoBox-defaultTable th{font-weight:400;padding:3px;vertical-align:middle;text-align:center}.cesium-infoBox-defaultTable td{padding:3px;vertical-align:middle;text-align:left}.cesium-infoBox-description-lighter{color:#000}.cesium-infoBox-description-lighter a:active,.cesium-infoBox-description-lighter a:hover,.cesium-infoBox-description-lighter a:link,.cesium-infoBox-description-lighter a:visited{color:#000}.cesium-infoBox-description-lighter table{color:#000}.cesium-infoBox-defaultTable-lighter{width:100%;color:#000}.cesium-infoBox-defaultTable-lighter tr:nth-child(odd){background-color:rgba(179,179,179,.8)}.cesium-infoBox-defaultTable-lighter tr:nth-child(even){background-color:rgba(179,179,179,.25)}.cesium-infoBox-loadingContainer{margin:5px;text-align:center}.cesium-infoBox-loading{display:inline-block;background-image:url(../Images/info-loading.gif);width:16px;height:11px} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css b/public/lib/Cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css new file mode 100644 index 0000000..2e6a72f --- /dev/null +++ b/public/lib/Cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css @@ -0,0 +1 @@ +.cesium-navigationHelpButton-wrapper{position:relative;display:inline-block}.cesium-navigation-help{visibility:hidden;position:absolute;top:38px;right:2px;width:250px;border-radius:10px;transform:scale(.01);transform-origin:234px -10px;transition:visibility 0s .25s,transform .25s ease-in}.cesium-navigation-help-visible{visibility:visible;transform:scale(1);transition:transform .25s ease-out}.cesium-navigation-help-instructions{border:1px solid #444;background-color:rgba(38,38,38,.75);padding-bottom:5px;border-radius:0 0 10px 10px}.cesium-click-navigation-help{display:none}.cesium-touch-navigation-help{display:none;padding-top:5px}.cesium-click-navigation-help-visible{display:block}.cesium-touch-navigation-help-visible{display:block}.cesium-navigation-help-pan{color:#6cf;font-weight:700}.cesium-navigation-help-zoom{color:#65fd00;font-weight:700}.cesium-navigation-help-rotate{color:#ffd800;font-weight:700}.cesium-navigation-help-tilt{color:#d800d8;font-weight:700}.cesium-navigation-help-details{color:#fff}.cesium-navigation-button{color:#fff;background-color:transparent;border-bottom:none;border-top:1px solid #444;border-right:1px solid #444;margin:0;width:50%;cursor:pointer}.cesium-navigation-button-icon{vertical-align:middle;padding:5px 1px}.cesium-navigation-button:focus{outline:0}.cesium-navigation-button-left{border-radius:10px 0 0 0;border-left:1px solid #444}.cesium-navigation-button-right{border-radius:0 10px 0 0;border-left:none}.cesium-navigation-button-selected{background-color:rgba(38,38,38,.75)}.cesium-navigation-button-unselected{background-color:rgba(0,0,0,.75)}.cesium-navigation-button-unselected:hover{background-color:rgba(76,76,76,.75)} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/NavigationHelpButton/lighter.css b/public/lib/Cesium/Widgets/NavigationHelpButton/lighter.css new file mode 100644 index 0000000..60b4ad5 --- /dev/null +++ b/public/lib/Cesium/Widgets/NavigationHelpButton/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-navigation-help-instructions{border:1px solid #759dc0;background-color:rgba(255,255,255,.9)}.cesium-lighter .cesium-navigation-help-pan{color:#6ce;font-weight:700}.cesium-lighter .cesium-navigation-help-zoom{color:#65ec00;font-weight:700}.cesium-lighter .cesium-navigation-help-rotate{color:#eec722;font-weight:700}.cesium-lighter .cesium-navigation-help-tilt{color:#d800d8;font-weight:700}.cesium-lighter .cesium-navigation-help-details{color:#222}.cesium-lighter .cesium-navigation-button{color:#222;border-top:1px solid #759dc0;border-right:1px solid #759dc0}.cesium-lighter .cesium-navigation-button-selected{background-color:rgba(196,225,255,.9)}.cesium-lighter .cesium-navigation-button-unselected{background-color:rgba(226,240,255,.9)}.cesium-lighter .cesium-navigation-button-unselected:hover{background-color:rgba(166,210,255,.9)} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css b/public/lib/Cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css new file mode 100644 index 0000000..4893be2 --- /dev/null +++ b/public/lib/Cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css @@ -0,0 +1 @@ +.cesium-performance-watchdog-message-area{position:relative;background-color:#ff0;color:#000;padding:10px}.cesium-performance-watchdog-message{margin-right:30px}.cesium-performance-watchdog-message-dismiss{position:absolute;right:0;margin:0 10px 0 0} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/ProjectionPicker/ProjectionPicker.css b/public/lib/Cesium/Widgets/ProjectionPicker/ProjectionPicker.css new file mode 100644 index 0000000..f04f318 --- /dev/null +++ b/public/lib/Cesium/Widgets/ProjectionPicker/ProjectionPicker.css @@ -0,0 +1 @@ +span.cesium-projectionPicker-wrapper{display:inline-block;position:relative;margin:0 3px}.cesium-projectionPicker-visible{visibility:visible;opacity:1;transition:opacity .25s linear}.cesium-projectionPicker-hidden{visibility:hidden;opacity:0;transition:visibility 0s .25s,opacity .25s linear}.cesium-projectionPicker-wrapper .cesium-projectionPicker-none{display:none}.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon{box-sizing:border-box;padding:0;margin:3px 0}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic,.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective{margin:0 0 3px 0}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective .cesium-projectionPicker-iconOrthographic{left:100%}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic .cesium-projectionPicker-iconPerspective{left:-100%}.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected{border-color:#2e2;box-shadow:0 0 8px #fff,0 0 8px #fff} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/SceneModePicker/SceneModePicker.css b/public/lib/Cesium/Widgets/SceneModePicker/SceneModePicker.css new file mode 100644 index 0000000..97ba729 --- /dev/null +++ b/public/lib/Cesium/Widgets/SceneModePicker/SceneModePicker.css @@ -0,0 +1 @@ +span.cesium-sceneModePicker-wrapper{display:inline-block;position:relative;margin:0 3px}.cesium-sceneModePicker-visible{visibility:visible;opacity:1;transition:opacity .25s linear}.cesium-sceneModePicker-hidden{visibility:hidden;opacity:0;transition:visibility 0s .25s,opacity .25s linear}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none{display:none}.cesium-sceneModePicker-slide-svg{transition:left 2s;top:0;left:0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon{box-sizing:border-box;padding:0;margin:3px 0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D,.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D,.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView{margin:0 0 3px 0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-icon2D{left:100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-iconColumbusView{left:200%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon3D{left:-200%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon2D{left:-100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-icon3D{left:-100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-iconColumbusView{left:100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected{border-color:#2e2;box-shadow:0 0 8px #fff,0 0 8px #fff} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/SelectionIndicator/SelectionIndicator.css b/public/lib/Cesium/Widgets/SelectionIndicator/SelectionIndicator.css new file mode 100644 index 0000000..896c1d7 --- /dev/null +++ b/public/lib/Cesium/Widgets/SelectionIndicator/SelectionIndicator.css @@ -0,0 +1 @@ +.cesium-selection-wrapper{position:absolute;width:160px;height:160px;pointer-events:none;visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in}.cesium-selection-wrapper-visible{visibility:visible;opacity:1;transition:opacity .2s ease-out}.cesium-selection-wrapper svg{fill:#2e2;stroke:#000;stroke-width:1.1px} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Timeline/Timeline.css b/public/lib/Cesium/Widgets/Timeline/Timeline.css new file mode 100644 index 0000000..f149aac --- /dev/null +++ b/public/lib/Cesium/Widgets/Timeline/Timeline.css @@ -0,0 +1 @@ +.cesium-timeline-main{position:relative;left:0;bottom:0;overflow:hidden;border:solid 1px #888}.cesium-timeline-trackContainer{width:100%;overflow:auto;border-top:solid 1px #888;position:relative;top:0;left:0}.cesium-timeline-tracks{position:absolute;top:0;left:0;width:100%}.cesium-timeline-needle{position:absolute;left:0;top:1.7em;bottom:0;width:1px;background:red}.cesium-timeline-bar{position:relative;left:0;top:0;overflow:hidden;cursor:pointer;width:100%;height:1.7em;background:linear-gradient(to bottom,rgba(116,117,119,.8) 0,rgba(58,68,82,.8) 11%,rgba(46,50,56,.8) 46%,rgba(53,53,53,.8) 81%,rgba(53,53,53,.8) 100%)}.cesium-timeline-ruler{visibility:hidden;white-space:nowrap;font-size:80%;z-index:-200}.cesium-timeline-highlight{position:absolute;bottom:0;left:0;background:#08f}.cesium-timeline-ticLabel{position:absolute;top:0;left:0;white-space:nowrap;font-size:80%;color:#eee}.cesium-timeline-ticMain{position:absolute;bottom:0;left:0;width:1px;height:50%;background:#eee}.cesium-timeline-ticSub{position:absolute;bottom:0;left:0;width:1px;height:33%;background:#aaa}.cesium-timeline-ticTiny{position:absolute;bottom:0;left:0;width:1px;height:25%;background:#888}.cesium-timeline-icon16{display:block;position:absolute;width:16px;height:16px;background-image:url(../Images/TimelineIcons.png);background-repeat:no-repeat} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Timeline/lighter.css b/public/lib/Cesium/Widgets/Timeline/lighter.css new file mode 100644 index 0000000..f62ae6b --- /dev/null +++ b/public/lib/Cesium/Widgets/Timeline/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-timeline-bar{background:linear-gradient(to bottom,#eee 0,#fff 50%,#fafafa 100%)}.cesium-lighter .cesium-timeline-ticLabel{color:#000}.cesium-lighter .cesium-timeline-ticMain{position:absolute;bottom:0;left:0;width:1px;height:50%;background:#000}.cesium-lighter .cesium-timeline-ticSub{background:#444} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/VRButton/VRButton.css b/public/lib/Cesium/Widgets/VRButton/VRButton.css new file mode 100644 index 0000000..99f95d9 --- /dev/null +++ b/public/lib/Cesium/Widgets/VRButton/VRButton.css @@ -0,0 +1 @@ +.cesium-button.cesium-vrButton{display:block;width:100%;height:100%;margin:0;border-radius:0} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/Viewer/Viewer.css b/public/lib/Cesium/Widgets/Viewer/Viewer.css new file mode 100644 index 0000000..ccb839e --- /dev/null +++ b/public/lib/Cesium/Widgets/Viewer/Viewer.css @@ -0,0 +1 @@ +.cesium-viewer{font-family:sans-serif;font-size:16px;overflow:hidden;display:block;position:relative;top:0;left:0;width:100%;height:100%}.cesium-viewer-cesiumWidgetContainer{width:100%;height:100%}.cesium-viewer-bottom{display:block;position:absolute;bottom:0;left:0;right:0;padding-right:5px}.cesium-viewer .cesium-widget-credits{display:none;position:static;bottom:auto;left:auto;padding-right:0;color:#fff;font-size:10px;text-shadow:0 0 2px #000}.cesium-viewer-timelineContainer{position:absolute;bottom:0;left:169px;right:0;height:27px;padding:0;margin:0;overflow:hidden;font-size:14px}.cesium-viewer-animationContainer{position:absolute;bottom:0;left:0;padding:0;width:169px;height:112px}.cesium-viewer-fullscreenContainer{position:absolute;bottom:0;right:0;padding:0;width:29px;height:29px;overflow:hidden}.cesium-viewer-vrContainer{position:absolute;bottom:0;right:0;padding:0;width:29px;height:29px;overflow:hidden}.cesium-viewer-toolbar{display:block;position:absolute;top:5px;right:5px}.cesium-viewer-cesiumInspectorContainer{display:block;position:absolute;top:50px;right:10px}.cesium-viewer-geocoderContainer{position:relative;display:inline-block;margin:0 3px}.cesium-viewer-cesium3DTilesInspectorContainer{display:block;position:absolute;top:50px;right:10px;max-height:calc(100% - 120px);box-sizing:border-box;overflow-y:auto;overflow-x:hidden} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/lighter.css b/public/lib/Cesium/Widgets/lighter.css new file mode 100644 index 0000000..cb19342 --- /dev/null +++ b/public/lib/Cesium/Widgets/lighter.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-button{color:#111;fill:#111;background:#e2f0ff;border:1px solid #759dc0}.cesium-lighter .cesium-button:focus{color:#000;fill:#000;border-color:#ea4}.cesium-lighter .cesium-button:hover{color:#000;fill:#000;background:#a6d2ff;border-color:#aef;box-shadow:0 0 8px #777}.cesium-lighter .cesium-button:active{color:#fff;fill:#fff;background:#48b;border-color:#ea0}.cesium-lighter .cesium-button-disabled,.cesium-lighter .cesium-button-disabled:active,.cesium-lighter .cesium-button-disabled:focus,.cesium-lighter .cesium-button-disabled:hover,.cesium-lighter .cesium-button:disabled{background:#ccc;border-color:#999;color:#999;fill:#999;box-shadow:none}.cesium-lighter .cesium-performanceDisplay{background-color:#e2f0ff;border-color:#759dc0}.cesium-lighter .cesium-performanceDisplay-fps{color:#e52}.cesium-lighter .cesium-performanceDisplay-ms{color:#ea4}.cesium-lighter .cesium-animation-themeNormal{color:#e5f2fe}.cesium-lighter .cesium-animation-themeHover{color:#abd6ff}.cesium-lighter .cesium-animation-themeSelect{color:#e5f2fe}.cesium-lighter .cesium-animation-themeDisabled{color:#efefef}.cesium-lighter .cesium-animation-themeKnob{color:#e1e2e3}.cesium-lighter .cesium-animation-themePointer{color:#fa5}.cesium-lighter .cesium-animation-themeSwoosh{color:#ace}.cesium-lighter .cesium-animation-themeSwooshHover{color:#bdf}.cesium-lighter .cesium-animation-svgText{fill:#111}.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonPath{fill:#111}.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonMain{stroke:#759dc0}.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonGlow{fill:#ffaa2a}.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonMain{stroke:#ea0}.cesium-lighter .cesium-animation-rectButton:hover .cesium-animation-buttonMain{stroke:#759dc0}.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow{fill:#fff}.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonMain{stroke:#ea0}.cesium-lighter .cesium-animation-rectButton:active .cesium-animation-buttonMain{fill:#abd6ff}.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonMain{stroke:#d3d3d3}.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonPath{fill:#818181}.cesium-lighter .cesium-animation-shuttleRingBack{fill:#fafafa;fill-opacity:1;stroke:#aeaeae;stroke-width:1.2}.cesium-lighter .cesium-animation-shuttleRingSwoosh line{stroke:#8ac}.cesium-lighter .cesium-animation-knobOuter{stroke:#a5a5a5}.cesium-lighter .cesium-baseLayerPicker-itemIcon{border-color:#759dc0}.cesium-lighter .cesium-baseLayerPicker-dropDown{background-color:rgba(240,240,240,.75)}.cesium-lighter .cesium-baseLayerPicker-sectionTitle{color:#000}.cesium-lighter .cesium-baseLayerPicker-itemLabel{color:#000}.cesium-lighter .cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon{border-color:#000}.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel{color:#003da8}.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon{border:double 4px #003da8}.cesium-lighter .cesium-widget-errorPanel{background:rgba(255,255,255,.7)}.cesium-lighter .cesium-widget-errorPanel-content{border:1px solid #526f82;border-radius:7px;background-color:#fff;color:#000}.cesium-lighter .cesium-widget-errorPanel-header{color:#b87d00}.cesium-lighter .cesium-geocoder-input{border:solid 1px #759dc0;background-color:rgba(240,240,240,.9);color:#000}.cesium-lighter .cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{border-color:#aef;box-shadow:0 0 8px #fff}.cesium-lighter .cesium-geocoder-searchButton{background-color:#e2f0ff;fill:#111}.cesium-lighter .cesium-geocoder-searchButton:hover{background-color:#a6d2ff}.cesium-lighter .cesium-timeline-bar{background:linear-gradient(to bottom,#eee 0,#fff 50%,#fafafa 100%)}.cesium-lighter .cesium-timeline-ticLabel{color:#000}.cesium-lighter .cesium-timeline-ticMain{position:absolute;bottom:0;left:0;width:1px;height:50%;background:#000}.cesium-lighter .cesium-timeline-ticSub{background:#444}.cesium-lighter .cesium-navigation-help-instructions{border:1px solid #759dc0;background-color:rgba(255,255,255,.9)}.cesium-lighter .cesium-navigation-help-pan{color:#6ce;font-weight:700}.cesium-lighter .cesium-navigation-help-zoom{color:#65ec00;font-weight:700}.cesium-lighter .cesium-navigation-help-rotate{color:#eec722;font-weight:700}.cesium-lighter .cesium-navigation-help-tilt{color:#d800d8;font-weight:700}.cesium-lighter .cesium-navigation-help-details{color:#222}.cesium-lighter .cesium-navigation-button{color:#222;border-top:1px solid #759dc0;border-right:1px solid #759dc0}.cesium-lighter .cesium-navigation-button-selected{background-color:rgba(196,225,255,.9)}.cesium-lighter .cesium-navigation-button-unselected{background-color:rgba(226,240,255,.9)}.cesium-lighter .cesium-navigation-button-unselected:hover{background-color:rgba(166,210,255,.9)} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/lighterShared.css b/public/lib/Cesium/Widgets/lighterShared.css new file mode 100644 index 0000000..7a3818b --- /dev/null +++ b/public/lib/Cesium/Widgets/lighterShared.css @@ -0,0 +1 @@ +.cesium-lighter .cesium-button{color:#111;fill:#111;background:#e2f0ff;border:1px solid #759dc0}.cesium-lighter .cesium-button:focus{color:#000;fill:#000;border-color:#ea4}.cesium-lighter .cesium-button:hover{color:#000;fill:#000;background:#a6d2ff;border-color:#aef;box-shadow:0 0 8px #777}.cesium-lighter .cesium-button:active{color:#fff;fill:#fff;background:#48b;border-color:#ea0}.cesium-lighter .cesium-button-disabled,.cesium-lighter .cesium-button-disabled:active,.cesium-lighter .cesium-button-disabled:focus,.cesium-lighter .cesium-button-disabled:hover,.cesium-lighter .cesium-button:disabled{background:#ccc;border-color:#999;color:#999;fill:#999;box-shadow:none}.cesium-lighter .cesium-performanceDisplay{background-color:#e2f0ff;border-color:#759dc0}.cesium-lighter .cesium-performanceDisplay-fps{color:#e52}.cesium-lighter .cesium-performanceDisplay-ms{color:#ea4} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/shared.css b/public/lib/Cesium/Widgets/shared.css new file mode 100644 index 0000000..511e15f --- /dev/null +++ b/public/lib/Cesium/Widgets/shared.css @@ -0,0 +1 @@ +.cesium-svgPath-svg{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.cesium-button{display:inline-block;position:relative;background:#303336;border:1px solid #444;color:#edffff;fill:#edffff;border-radius:4px;padding:5px 12px;margin:2px 3px;cursor:pointer;overflow:hidden;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-button:focus{color:#fff;fill:#fff;border-color:#ea4;outline:0}.cesium-button:hover{color:#fff;fill:#fff;background:#48b;border-color:#aef;box-shadow:0 0 8px #fff}.cesium-button:active{color:#000;fill:#000;background:#adf;border-color:#fff;box-shadow:0 0 8px #fff}.cesium-button-disabled,.cesium-button-disabled:active,.cesium-button-disabled:focus,.cesium-button-disabled:hover,.cesium-button:disabled{background:#303336;border-color:#444;color:#646464;fill:#646464;box-shadow:none;cursor:default}.cesium-button option{background-color:#000;color:#eee}.cesium-button option:disabled{color:#777}.cesium-button input,.cesium-button label{cursor:pointer}.cesium-button input{vertical-align:sub}.cesium-toolbar-button{box-sizing:border-box;width:32px;height:32px;border-radius:14%;padding:0;vertical-align:middle;z-index:0}.cesium-performanceDisplay-defaultContainer{position:absolute;top:50px;right:10px;text-align:right}.cesium-performanceDisplay{background-color:rgba(40,40,40,.7);padding:7px;border-radius:5px;border:1px solid #444;font:bold 12px sans-serif}.cesium-performanceDisplay-fps{color:#e52}.cesium-performanceDisplay-throttled{color:#a42}.cesium-performanceDisplay-ms{color:#de3} \ No newline at end of file diff --git a/public/lib/Cesium/Widgets/widgets.css b/public/lib/Cesium/Widgets/widgets.css new file mode 100644 index 0000000..6daea29 --- /dev/null +++ b/public/lib/Cesium/Widgets/widgets.css @@ -0,0 +1 @@ +.cesium-svgPath-svg{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.cesium-button{display:inline-block;position:relative;background:#303336;border:1px solid #444;color:#edffff;fill:#edffff;border-radius:4px;padding:5px 12px;margin:2px 3px;cursor:pointer;overflow:hidden;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-button:focus{color:#fff;fill:#fff;border-color:#ea4;outline:0}.cesium-button:hover{color:#fff;fill:#fff;background:#48b;border-color:#aef;box-shadow:0 0 8px #fff}.cesium-button:active{color:#000;fill:#000;background:#adf;border-color:#fff;box-shadow:0 0 8px #fff}.cesium-button-disabled,.cesium-button-disabled:active,.cesium-button-disabled:focus,.cesium-button-disabled:hover,.cesium-button:disabled{background:#303336;border-color:#444;color:#646464;fill:#646464;box-shadow:none;cursor:default}.cesium-button option{background-color:#000;color:#eee}.cesium-button option:disabled{color:#777}.cesium-button input,.cesium-button label{cursor:pointer}.cesium-button input{vertical-align:sub}.cesium-toolbar-button{box-sizing:border-box;width:32px;height:32px;border-radius:14%;padding:0;vertical-align:middle;z-index:0}.cesium-performanceDisplay-defaultContainer{position:absolute;top:50px;right:10px;text-align:right}.cesium-performanceDisplay{background-color:rgba(40,40,40,.7);padding:7px;border-radius:5px;border:1px solid #444;font:bold 12px sans-serif}.cesium-performanceDisplay-fps{color:#e52}.cesium-performanceDisplay-throttled{color:#a42}.cesium-performanceDisplay-ms{color:#de3}.cesium-animation-theme{visibility:hidden;display:block;position:absolute;z-index:-100}.cesium-animation-themeNormal{color:#222}.cesium-animation-themeHover{color:#4488b0}.cesium-animation-themeSelect{color:#242}.cesium-animation-themeDisabled{color:#333}.cesium-animation-themeKnob{color:#222}.cesium-animation-themePointer{color:#2e2}.cesium-animation-themeSwoosh{color:#8ac}.cesium-animation-themeSwooshHover{color:#aef}.cesium-animation-svgText{fill:#edffff;font-family:Sans-Serif;font-size:15px;text-anchor:middle}.cesium-animation-blank{fill:#000;fill-opacity:.01;stroke:none}.cesium-animation-rectButton{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-animation-rectButton .cesium-animation-buttonGlow{fill:#fff;stroke:none;display:none}.cesium-animation-rectButton:hover .cesium-animation-buttonGlow{display:block}.cesium-animation-rectButton .cesium-animation-buttonPath{fill:#edffff}.cesium-animation-rectButton .cesium-animation-buttonMain{stroke:#444;stroke-width:1.2}.cesium-animation-rectButton:hover .cesium-animation-buttonMain{stroke:#aef}.cesium-animation-rectButton:active .cesium-animation-buttonMain{fill:#abd6ff}.cesium-animation-buttonDisabled{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cesium-animation-buttonDisabled .cesium-animation-buttonMain{stroke:#555}.cesium-animation-buttonDisabled .cesium-animation-buttonPath{fill:#818181}.cesium-animation-buttonDisabled .cesium-animation-buttonGlow{display:none}.cesium-animation-buttonToggled .cesium-animation-buttonGlow{display:block;fill:#2e2}.cesium-animation-buttonToggled .cesium-animation-buttonMain{stroke:#2e2}.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow{fill:#fff}.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain{stroke:#2e2}.cesium-animation-shuttleRingG{cursor:pointer}.cesium-animation-shuttleRingPointer{cursor:pointer}.cesium-animation-shuttleRingPausePointer{cursor:pointer}.cesium-animation-shuttleRingBack{fill:#181818;fill-opacity:.8;stroke:#333;stroke-width:1.2}.cesium-animation-shuttleRingSwoosh line{stroke:#8ac;stroke-width:3;stroke-opacity:.2;stroke-linecap:round}.cesium-animation-knobOuter{cursor:pointer;stroke:#444;stroke-width:1.2}.cesium-animation-knobInner{cursor:pointer}.cesium-baseLayerPicker-selected{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.cesium-baseLayerPicker-dropDown{display:block;position:absolute;box-sizing:content-box;top:auto;right:0;width:320px;max-height:500px;margin-top:5px;background-color:rgba(38,38,38,.75);border:1px solid #444;padding:6px;overflow:auto;border-radius:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;transform:translate(0,-20%);visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in,transform .2s ease-in}.cesium-baseLayerPicker-dropDown-visible{transform:translate(0,0);visibility:visible;opacity:1;transition:opacity .2s ease-out,transform .2s ease-out}.cesium-baseLayerPicker-sectionTitle{display:block;font-family:sans-serif;font-size:16pt;text-align:left;color:#edffff;margin-bottom:4px}.cesium-baseLayerPicker-choices{margin-bottom:5px}.cesium-baseLayerPicker-categoryTitle{color:#edffff;font-size:11pt}.cesium-baseLayerPicker-choices{display:block;border:1px solid #888;border-radius:5px;padding:5px 0}.cesium-baseLayerPicker-item{display:inline-block;vertical-align:top;margin:2px 5px;width:64px;text-align:center;cursor:pointer}.cesium-baseLayerPicker-itemLabel{display:block;font-family:sans-serif;font-size:8pt;text-align:center;vertical-align:middle;color:#edffff;cursor:pointer;word-wrap:break-word}.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel,.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel{text-decoration:underline}.cesium-baseLayerPicker-itemIcon{display:inline-block;position:relative;width:inherit;height:auto;background-size:100% 100%;border:solid 1px #444;border-radius:9px;color:#edffff;margin:0;padding:0;cursor:pointer;box-sizing:border-box}.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon{border-color:#fff;box-shadow:0 0 8px #fff,0 0 8px #fff}.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel{color:#bdecf8}.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon{border:double 4px #bdecf8}.cesium-widget{position:relative}.cesium-widget,.cesium-widget canvas{width:100%;height:100%;touch-action:none}.cesium-widget-credits{display:block;position:absolute;bottom:0;left:0;color:#fff;font-size:10px;text-shadow:0 0 2px #000;padding-right:5px}.cesium-widget-credits a,.cesium-widget-credits a:visited{color:#fff}.cesium-widget-errorPanel{position:absolute;top:0;right:0;bottom:0;left:0;text-align:center;background:rgba(0,0,0,.7);z-index:99999}.cesium-widget-errorPanel:before{display:inline-block;vertical-align:middle;height:100%;content:""}.cesium-widget-errorPanel-content{width:75%;max-width:500px;display:inline-block;text-align:left;vertical-align:middle;border:1px solid #510c00;border-radius:7px;background-color:#f0d9d5;font-size:14px;color:#510c00}.cesium-widget-errorPanel-content.expanded{max-width:75%}.cesium-widget-errorPanel-header{font-size:18px;font-family:"Open Sans",Verdana,Geneva,sans-serif;background:#d69d93;border-bottom:2px solid #510c00;padding-bottom:10px;border-radius:3px 3px 0 0;padding:15px}.cesium-widget-errorPanel-scroll{overflow:auto;font-family:"Open Sans",Verdana,Geneva,sans-serif;white-space:pre-wrap;padding:0 15px;margin:10px 0 20px 0}.cesium-widget-errorPanel-buttonPanel{padding:0 15px;margin:10px 0 20px 0;text-align:right}.cesium-widget-errorPanel-buttonPanel button{border-color:#510c00;background:#d69d93;color:#202020;margin:0}.cesium-widget-errorPanel-buttonPanel button:focus{border-color:#510c00;background:#f0d9d5;color:#510c00}.cesium-widget-errorPanel-buttonPanel button:hover{border-color:#510c00;background:#f0d9d5;color:#510c00}.cesium-widget-errorPanel-buttonPanel button:active{border-color:#510c00;background:#b17b72;color:#510c00}.cesium-widget-errorPanel-more-details{text-decoration:underline;cursor:pointer}.cesium-widget-errorPanel-more-details:hover{color:#2b0700}.cesium-cesiumInspector{border-radius:5px;transition:width ease-in-out .25s;background:rgba(48,51,54,.8);border:1px solid #444;color:#edffff;display:inline-block;position:relative;padding:4px 12px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}.cesium-cesiumInspector-button{text-align:center;font-size:11pt}.cesium-cesiumInspector-visible .cesium-cesiumInspector-button{border-bottom:1px solid #aaa;padding-bottom:3px}.cesium-cesiumInspector input:enabled,.cesium-cesiumInspector-button{cursor:pointer}.cesium-cesiumInspector-visible{width:185px;height:auto}.cesium-cesiumInspector-hidden{width:122px;height:17px}.cesium-cesiumInspector-sectionContent{max-height:500px}.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionContent{max-height:0;padding:0!important;overflow:hidden}.cesium-cesiumInspector-dropDown{margin:5px 0;font-family:sans-serif;font-size:10pt;width:185px}.cesium-cesiumInspector-frustumStatistics{padding-left:10px;padding:5px;background-color:rgba(80,80,80,.75)}.cesium-cesiumInspector-pickButton{background-color:rgba(0,0,0,.3);border:1px solid #444;color:#edffff;border-radius:5px;padding:3px 7px;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;margin:0 auto}.cesium-cesiumInspector-pickButton:focus{outline:0}.cesium-cesiumInspector-pickButton:active,.cesium-cesiumInspector-pickButtonHighlight{color:#000;background:#adf;border-color:#fff;box-shadow:0 0 8px #fff}.cesium-cesiumInspector-center{text-align:center}.cesium-cesiumInspector-sectionHeader{font-weight:700;font-size:10pt;margin:0;cursor:pointer}.cesium-cesiumInspector-pickSection{border:1px solid #aaa;border-radius:5px;padding:3px;margin-bottom:5px}.cesium-cesiumInspector-sectionContent{margin-bottom:10px;transition:max-height .25s}.cesium-cesiumInspector-tileText{padding-bottom:10px;border-bottom:1px solid #aaa}.cesium-cesiumInspector-relativeText{padding-top:10px}.cesium-cesiumInspector-sectionHeader::before{margin-right:5px;content:"-";width:1ch;display:inline-block}.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionHeader::before{content:"+"}ul.cesium-cesiumInspector-statistics{margin:0;padding-top:3px;padding-bottom:3px}ul.cesium-cesiumInspector-statistics+ul.cesium-cesiumInspector-statistics{border-top:1px solid #aaa}.cesium-cesiumInspector-slider{margin-top:5px}.cesium-cesiumInspector-slider input[type=number]{text-align:left;background-color:#222;outline:0;border:1px solid #444;color:#edffff;width:100px;border-radius:3px;padding:1px;margin-left:10px;cursor:auto}.cesium-cesiumInspector-slider input[type=number]::-webkit-inner-spin-button,.cesium-cesiumInspector-slider input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.cesium-cesiumInspector-slider input[type=range]{margin-left:5px;vertical-align:middle}.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor{display:none}.cesium-cesiumInspector-styleEditor{padding:10px;border-radius:5px;background:rgba(48,51,54,.8);border:1px solid #444}.cesium-cesiumInspector-styleEditor textarea{width:100%;height:300px;background:0 0;color:#edffff;border:none;padding:0;white-space:pre;overflow-wrap:normal;overflow-x:auto}.cesium-3DTilesInspector{width:300px;pointer-events:all}.cesium-3DTilesInspector-statistics{font-size:11px}.cesium-3DTilesInspector div,.cesium-3DTilesInspector input[type=range]{width:100%;box-sizing:border-box}.cesium-cesiumInspector-error{color:#ff9e9e;overflow:auto}.cesium-3DTilesInspector .cesium-cesiumInspector-section{margin-top:3px}.cesium-3DTilesInspector .cesium-cesiumInspector-sectionHeader+.cesium-cesiumInspector-show{border-top:1px solid #fff}input.cesium-cesiumInspector-url{overflow:hidden;white-space:nowrap;overflow-x:scroll;background-color:transparent;color:#fff;outline:0;border:none;height:1em;width:100%}.cesium-cesiumInspector .field-group{display:table}.cesium-cesiumInspector .field-group>label{display:table-cell;font-weight:700}.cesium-cesiumInspector .field-group>.field{display:table-cell;width:100%}.cesium-button.cesium-fullscreenButton{display:block;width:100%;height:100%;margin:0;border-radius:0}.cesium-button.cesium-vrButton{display:block;width:100%;height:100%;margin:0;border-radius:0}.cesium-viewer-geocoderContainer .cesium-geocoder-input{border:solid 1px #444;background-color:rgba(40,40,40,.7);color:#fff;display:inline-block;vertical-align:middle;width:0;height:32px;margin:0;padding:0 32px 0 0;border-radius:0;box-sizing:border-box;transition:width ease-in-out .25s,background-color .2s ease-in-out;-webkit-appearance:none}.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{border-color:#aef;box-shadow:0 0 8px #fff}.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus{border-color:#ea4;background-color:rgba(15,15,15,.9);box-shadow:none;outline:0}.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide,.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus,.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input{padding-left:4px;width:250px}.cesium-viewer-geocoderContainer .search-results{position:absolute;background-color:#000;color:#eee;overflow-y:auto;opacity:.8;width:100%}.cesium-viewer-geocoderContainer .search-results ul{list-style-type:none;margin:0;padding:0}.cesium-viewer-geocoderContainer .search-results ul li{font-size:14px;padding:3px 10px}.cesium-viewer-geocoderContainer .search-results ul li:hover{cursor:pointer}.cesium-viewer-geocoderContainer .search-results ul li.active{background:#48b}.cesium-geocoder-searchButton{background-color:#303336;display:inline-block;position:absolute;cursor:pointer;width:32px;top:1px;right:1px;height:30px;vertical-align:middle;fill:#edffff}.cesium-geocoder-searchButton:hover{background-color:#48b}.cesium-infoBox{display:block;position:absolute;top:50px;right:0;width:40%;max-width:480px;background:rgba(38,38,38,.95);color:#edffff;border:1px solid #444;border-right:none;border-top-left-radius:7px;border-bottom-left-radius:7px;box-shadow:0 0 10px 1px #000;transform:translate(100%,0);visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in,transform .2s ease-in}.cesium-infoBox-visible{transform:translate(0,0);visibility:visible;opacity:1;transition:opacity .2s ease-out,transform .2s ease-out}.cesium-infoBox-title{display:block;height:20px;padding:5px 30px 5px 25px;background:#545454;border-top-left-radius:7px;text-align:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;box-sizing:content-box}.cesium-infoBox-bodyless .cesium-infoBox-title{border-bottom-left-radius:7px}button.cesium-infoBox-camera{display:block;position:absolute;top:4px;left:4px;width:22px;height:22px;background:0 0;border-color:transparent;border-radius:3px;padding:0 5px;margin:0}button.cesium-infoBox-close{display:block;position:absolute;top:5px;right:5px;height:20px;background:0 0;border:none;border-radius:2px;font-weight:700;font-size:16px;padding:0 5px;margin:0;color:#edffff}button.cesium-infoBox-close:focus{background:rgba(238,136,0,.44);outline:0}button.cesium-infoBox-close:hover{background:#888;color:#000}button.cesium-infoBox-close:active{background:#a00;color:#000}.cesium-infoBox-bodyless .cesium-infoBox-iframe{display:none}.cesium-infoBox-iframe{border:none;width:100%;width:calc(100% - 2px)}span.cesium-sceneModePicker-wrapper{display:inline-block;position:relative;margin:0 3px}.cesium-sceneModePicker-visible{visibility:visible;opacity:1;transition:opacity .25s linear}.cesium-sceneModePicker-hidden{visibility:hidden;opacity:0;transition:visibility 0s .25s,opacity .25s linear}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none{display:none}.cesium-sceneModePicker-slide-svg{transition:left 2s;top:0;left:0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon{box-sizing:border-box;padding:0;margin:3px 0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D,.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D,.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView{margin:0 0 3px 0}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-icon2D{left:100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-iconColumbusView{left:200%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon3D{left:-200%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon2D{left:-100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-icon3D{left:-100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-iconColumbusView{left:100%}.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected{border-color:#2e2;box-shadow:0 0 8px #fff,0 0 8px #fff}span.cesium-projectionPicker-wrapper{display:inline-block;position:relative;margin:0 3px}.cesium-projectionPicker-visible{visibility:visible;opacity:1;transition:opacity .25s linear}.cesium-projectionPicker-hidden{visibility:hidden;opacity:0;transition:visibility 0s .25s,opacity .25s linear}.cesium-projectionPicker-wrapper .cesium-projectionPicker-none{display:none}.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon{box-sizing:border-box;padding:0;margin:3px 0}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic,.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective{margin:0 0 3px 0}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective .cesium-projectionPicker-iconOrthographic{left:100%}.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic .cesium-projectionPicker-iconPerspective{left:-100%}.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected{border-color:#2e2;box-shadow:0 0 8px #fff,0 0 8px #fff}.cesium-performance-watchdog-message-area{position:relative;background-color:#ff0;color:#000;padding:10px}.cesium-performance-watchdog-message{margin-right:30px}.cesium-performance-watchdog-message-dismiss{position:absolute;right:0;margin:0 10px 0 0}.cesium-navigationHelpButton-wrapper{position:relative;display:inline-block}.cesium-navigation-help{visibility:hidden;position:absolute;top:38px;right:2px;width:250px;border-radius:10px;transform:scale(.01);transform-origin:234px -10px;transition:visibility 0s .25s,transform .25s ease-in}.cesium-navigation-help-visible{visibility:visible;transform:scale(1);transition:transform .25s ease-out}.cesium-navigation-help-instructions{border:1px solid #444;background-color:rgba(38,38,38,.75);padding-bottom:5px;border-radius:0 0 10px 10px}.cesium-click-navigation-help{display:none}.cesium-touch-navigation-help{display:none;padding-top:5px}.cesium-click-navigation-help-visible{display:block}.cesium-touch-navigation-help-visible{display:block}.cesium-navigation-help-pan{color:#6cf;font-weight:700}.cesium-navigation-help-zoom{color:#65fd00;font-weight:700}.cesium-navigation-help-rotate{color:#ffd800;font-weight:700}.cesium-navigation-help-tilt{color:#d800d8;font-weight:700}.cesium-navigation-help-details{color:#fff}.cesium-navigation-button{color:#fff;background-color:transparent;border-bottom:none;border-top:1px solid #444;border-right:1px solid #444;margin:0;width:50%;cursor:pointer}.cesium-navigation-button-icon{vertical-align:middle;padding:5px 1px}.cesium-navigation-button:focus{outline:0}.cesium-navigation-button-left{border-radius:10px 0 0 0;border-left:1px solid #444}.cesium-navigation-button-right{border-radius:0 10px 0 0;border-left:none}.cesium-navigation-button-selected{background-color:rgba(38,38,38,.75)}.cesium-navigation-button-unselected{background-color:rgba(0,0,0,.75)}.cesium-navigation-button-unselected:hover{background-color:rgba(76,76,76,.75)}.cesium-selection-wrapper{position:absolute;width:160px;height:160px;pointer-events:none;visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s ease-in}.cesium-selection-wrapper-visible{visibility:visible;opacity:1;transition:opacity .2s ease-out}.cesium-selection-wrapper svg{fill:#2e2;stroke:#000;stroke-width:1.1px}.cesium-timeline-main{position:relative;left:0;bottom:0;overflow:hidden;border:solid 1px #888}.cesium-timeline-trackContainer{width:100%;overflow:auto;border-top:solid 1px #888;position:relative;top:0;left:0}.cesium-timeline-tracks{position:absolute;top:0;left:0;width:100%}.cesium-timeline-needle{position:absolute;left:0;top:1.7em;bottom:0;width:1px;background:red}.cesium-timeline-bar{position:relative;left:0;top:0;overflow:hidden;cursor:pointer;width:100%;height:1.7em;background:linear-gradient(to bottom,rgba(116,117,119,.8) 0,rgba(58,68,82,.8) 11%,rgba(46,50,56,.8) 46%,rgba(53,53,53,.8) 81%,rgba(53,53,53,.8) 100%)}.cesium-timeline-ruler{visibility:hidden;white-space:nowrap;font-size:80%;z-index:-200}.cesium-timeline-highlight{position:absolute;bottom:0;left:0;background:#08f}.cesium-timeline-ticLabel{position:absolute;top:0;left:0;white-space:nowrap;font-size:80%;color:#eee}.cesium-timeline-ticMain{position:absolute;bottom:0;left:0;width:1px;height:50%;background:#eee}.cesium-timeline-ticSub{position:absolute;bottom:0;left:0;width:1px;height:33%;background:#aaa}.cesium-timeline-ticTiny{position:absolute;bottom:0;left:0;width:1px;height:25%;background:#888}.cesium-timeline-icon16{display:block;position:absolute;width:16px;height:16px;background-image:url(Images/TimelineIcons.png);background-repeat:no-repeat}.cesium-viewer{font-family:sans-serif;font-size:16px;overflow:hidden;display:block;position:relative;top:0;left:0;width:100%;height:100%}.cesium-viewer-cesiumWidgetContainer{width:100%;height:100%}.cesium-viewer-bottom{display:block;position:absolute;bottom:0;left:0;right:0;padding-right:5px}.cesium-viewer .cesium-widget-credits{display:none;position:static;bottom:auto;left:auto;padding-right:0;color:#fff;font-size:10px;text-shadow:0 0 2px #000}.cesium-viewer-timelineContainer{position:absolute;bottom:0;left:169px;right:0;height:27px;padding:0;margin:0;overflow:hidden;font-size:14px}.cesium-viewer-animationContainer{position:absolute;bottom:0;left:0;padding:0;width:169px;height:112px}.cesium-viewer-fullscreenContainer{position:absolute;bottom:0;right:0;padding:0;width:29px;height:29px;overflow:hidden}.cesium-viewer-vrContainer{position:absolute;bottom:0;right:0;padding:0;width:29px;height:29px;overflow:hidden}.cesium-viewer-toolbar{display:block;position:absolute;top:5px;right:5px}.cesium-viewer-cesiumInspectorContainer{display:block;position:absolute;top:50px;right:10px}.cesium-viewer-geocoderContainer{position:relative;display:inline-block;margin:0 3px}.cesium-viewer-cesium3DTilesInspectorContainer{display:block;position:absolute;top:50px;right:10px;max-height:calc(100% - 120px);box-sizing:border-box;overflow-y:auto;overflow-x:hidden} \ No newline at end of file diff --git a/public/lib/Cesium/Workers/ArcType-2b58731c.js b/public/lib/Cesium/Workers/ArcType-2b58731c.js new file mode 100644 index 0000000..bfd92b2 --- /dev/null +++ b/public/lib/Cesium/Workers/ArcType-2b58731c.js @@ -0,0 +1 @@ +define(["exports"],function(e){"use strict";var r=Object.freeze({NONE:0,GEODESIC:1,RHUMB:2});e.ArcType=r}); diff --git a/public/lib/Cesium/Workers/AttributeCompression-a99f24b9.js b/public/lib/Cesium/Workers/AttributeCompression-a99f24b9.js new file mode 100644 index 0000000..eed778a --- /dev/null +++ b/public/lib/Cesium/Workers/AttributeCompression-a99f24b9.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(t,a,o,u,c){"use strict";var i={octEncodeInRange:function(t,o,e){var n;return e.x=t.x/(Math.abs(t.x)+Math.abs(t.y)+Math.abs(t.z)),e.y=t.y/(Math.abs(t.x)+Math.abs(t.y)+Math.abs(t.z)),t.z<0&&(n=e.x,t=e.y,e.x=(1-Math.abs(t))*c.CesiumMath.signNotZero(n),e.y=(1-Math.abs(n))*c.CesiumMath.signNotZero(t)),e.x=c.CesiumMath.toSNorm(e.x,o),e.y=c.CesiumMath.toSNorm(e.y,o),e},octEncode:function(t,o){return i.octEncodeInRange(t,255,o)}},e=new a.Cartesian2,n=new Uint8Array(1);function r(t){return n[0]=t,n[0]}i.octEncodeToCartesian4=function(t,o){return i.octEncodeInRange(t,65535,e),o.x=r(e.x*(1/256)),o.y=r(e.x),o.z=r(e.y*(1/256)),o.w=r(e.y),o},i.octDecodeInRange=function(t,o,e,n){return n.x=c.CesiumMath.fromSNorm(t,e),n.y=c.CesiumMath.fromSNorm(o,e),n.z=1-(Math.abs(n.x)+Math.abs(n.y)),n.z<0&&(e=n.x,n.x=(1-Math.abs(n.y))*c.CesiumMath.signNotZero(e),n.y=(1-Math.abs(e))*c.CesiumMath.signNotZero(n.y)),a.Cartesian3.normalize(n,n)},i.octDecode=function(t,o,e){return i.octDecodeInRange(t,o,255,e)},i.octDecodeFromCartesian4=function(t,o){var e=256*t.x+t.y,t=256*t.z+t.w;return i.octDecodeInRange(e,t,65535,o)},i.octPackFloat=function(t){return 256*t.x+t.y};var s=new a.Cartesian2;function d(t){return t>>1^-(1&t)}i.octEncodeFloat=function(t){return i.octEncode(t,s),i.octPackFloat(s)},i.octDecodeFloat=function(t,o){var e=t/256,t=Math.floor(e),e=256*(e-t);return i.octDecode(t,e,o)},i.octPack=function(t,o,e,n){t=i.octEncodeFloat(t),o=i.octEncodeFloat(o),e=i.octEncode(e,s);return n.x=65536*e.x+t,n.y=65536*e.y+o,n},i.octUnpack=function(t,o,e,n){var a=t.x/65536,c=Math.floor(a),r=65536*(a-c),a=t.y/65536,t=Math.floor(a),a=65536*(a-t);i.octDecodeFloat(r,o),i.octDecodeFloat(a,e),i.octDecode(c,t,n)},i.compressTextureCoordinates=function(t){return 4096*(4095*t.x|0)+(4095*t.y|0)},i.decompressTextureCoordinates=function(t,o){var e=t/4096,e=Math.floor(e);return o.x=e/4095,o.y=(t-4096*e)/4095,o},i.zigZagDeltaDecode=function(t,o,e){for(var n=t.length,a=0,c=0,r=0,i=0;i<n;++i)a+=d(t[i]),c+=d(o[i]),t[i]=a,o[i]=c,u.defined(e)&&(r+=d(e[i]),e[i]=r)},t.AttributeCompression=i}); diff --git a/public/lib/Cesium/Workers/BoundingRectangle-755c152f.js b/public/lib/Cesium/Workers/BoundingRectangle-755c152f.js new file mode 100644 index 0000000..3315697 --- /dev/null +++ b/public/lib/Cesium/Workers/BoundingRectangle-755c152f.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Transforms-5295b227"],function(t,h,e,o,a){"use strict";function c(t,e,n,i){this.x=o.defaultValue(t,0),this.y=o.defaultValue(e,0),this.width=o.defaultValue(n,0),this.height=o.defaultValue(i,0)}c.packedLength=4,c.pack=function(t,e,n){return n=o.defaultValue(n,0),e[n++]=t.x,e[n++]=t.y,e[n++]=t.width,e[n]=t.height,e},c.unpack=function(t,e,n){return e=o.defaultValue(e,0),(n=!o.defined(n)?new c:n).x=t[e++],n.y=t[e++],n.width=t[e++],n.height=t[e],n},c.fromPoints=function(t,e){if(o.defined(e)||(e=new c),!o.defined(t)||0===t.length)return e.x=0,e.y=0,e.width=0,e.height=0,e;for(var n=t.length,i=t[0].x,h=t[0].y,r=t[0].x,a=t[0].y,d=1;d<n;d++)var u=t[d],f=u.x,u=u.y,i=Math.min(f,i),r=Math.max(f,r),h=Math.min(u,h),a=Math.max(u,a);return e.x=i,e.y=h,e.width=r-i,e.height=a-h,e};var r=new a.GeographicProjection,d=new h.Cartographic,u=new h.Cartographic;c.fromRectangle=function(t,e,n){if(o.defined(n)||(n=new c),!o.defined(t))return n.x=0,n.y=0,n.width=0,n.height=0,n;var i=(e=o.defaultValue(e,r)).project(h.Rectangle.southwest(t,d)),t=e.project(h.Rectangle.northeast(t,u));return h.Cartesian2.subtract(t,i,t),n.x=i.x,n.y=i.y,n.width=t.x,n.height=t.y,n},c.clone=function(t,e){if(o.defined(t))return o.defined(e)?(e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height,e):new c(t.x,t.y,t.width,t.height)},c.union=function(t,e,n){o.defined(n)||(n=new c);var i=Math.min(t.x,e.x),h=Math.min(t.y,e.y),r=Math.max(t.x+t.width,e.x+e.width),e=Math.max(t.y+t.height,e.y+e.height);return n.x=i,n.y=h,n.width=r-i,n.height=e-h,n},c.expand=function(t,e,n){n=c.clone(t,n);var i=e.x-n.x,t=e.y-n.y;return i>n.width?n.width=i:i<0&&(n.width-=i,n.x=e.x),t>n.height?n.height=t:t<0&&(n.height-=t,n.y=e.y),n},c.intersect=function(t,e){var n=t.x,i=t.y,h=e.x,r=e.y;return n>h+e.width||n+t.width<h||i+t.height<r||i>r+e.height?a.Intersect.OUTSIDE:a.Intersect.INTERSECTING},c.equals=function(t,e){return t===e||o.defined(t)&&o.defined(e)&&t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height},c.prototype.clone=function(t){return c.clone(this,t)},c.prototype.intersect=function(t){return c.intersect(this,t)},c.prototype.equals=function(t){return c.equals(this,t)},t.BoundingRectangle=c}); diff --git a/public/lib/Cesium/Workers/BoxGeometry-1ec9fd84.js b/public/lib/Cesium/Workers/BoxGeometry-1ec9fd84.js new file mode 100644 index 0000000..e53e0f4 --- /dev/null +++ b/public/lib/Cesium/Workers/BoxGeometry-1ec9fd84.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./VertexFormat-63b3c6da"],function(t,s,y,p,e,x,f,c,A,o){"use strict";var l=new p.Cartesian3;function m(t){var e=(t=f.defaultValue(t,f.defaultValue.EMPTY_OBJECT)).minimum,a=t.maximum,n=f.defaultValue(t.vertexFormat,o.VertexFormat.DEFAULT);this._minimum=p.Cartesian3.clone(e),this._maximum=p.Cartesian3.clone(a),this._vertexFormat=n,this._offsetAttribute=t.offsetAttribute,this._workerName="createBoxGeometry"}m.fromDimensions=function(t){var e=(t=f.defaultValue(t,f.defaultValue.EMPTY_OBJECT)).dimensions,e=p.Cartesian3.multiplyByScalar(e,.5,new p.Cartesian3);return new m({minimum:p.Cartesian3.negate(e,new p.Cartesian3),maximum:e,vertexFormat:t.vertexFormat,offsetAttribute:t.offsetAttribute})},m.fromAxisAlignedBoundingBox=function(t){return new m({minimum:t.minimum,maximum:t.maximum})},m.packedLength=2*p.Cartesian3.packedLength+o.VertexFormat.packedLength+1,m.pack=function(t,e,a){return a=f.defaultValue(a,0),p.Cartesian3.pack(t._minimum,e,a),p.Cartesian3.pack(t._maximum,e,a+p.Cartesian3.packedLength),o.VertexFormat.pack(t._vertexFormat,e,a+2*p.Cartesian3.packedLength),e[a+2*p.Cartesian3.packedLength+o.VertexFormat.packedLength]=f.defaultValue(t._offsetAttribute,-1),e};var a,u=new p.Cartesian3,b=new p.Cartesian3,d=new o.VertexFormat,C={minimum:u,maximum:b,vertexFormat:d,offsetAttribute:void 0};m.unpack=function(t,e,a){e=f.defaultValue(e,0);var n=p.Cartesian3.unpack(t,e,u),r=p.Cartesian3.unpack(t,e+p.Cartesian3.packedLength,b),i=o.VertexFormat.unpack(t,e+2*p.Cartesian3.packedLength,d),e=t[e+2*p.Cartesian3.packedLength+o.VertexFormat.packedLength];return f.defined(a)?(a._minimum=p.Cartesian3.clone(n,a._minimum),a._maximum=p.Cartesian3.clone(r,a._maximum),a._vertexFormat=o.VertexFormat.clone(i,a._vertexFormat),a._offsetAttribute=-1===e?void 0:e,a):(C.offsetAttribute=-1===e?void 0:e,new m(C))},m.createGeometry=function(t){var e=t._minimum,a=t._maximum,n=t._vertexFormat;if(!p.Cartesian3.equals(e,a)){var r,i,o,m=new A.GeometryAttributes;n.position&&(n.st||n.normal||n.tangent||n.bitangent)?(n.position&&((u=new Float64Array(72))[0]=e.x,u[1]=e.y,u[2]=a.z,u[3]=a.x,u[4]=e.y,u[5]=a.z,u[6]=a.x,u[7]=a.y,u[8]=a.z,u[9]=e.x,u[10]=a.y,u[11]=a.z,u[12]=e.x,u[13]=e.y,u[14]=e.z,u[15]=a.x,u[16]=e.y,u[17]=e.z,u[18]=a.x,u[19]=a.y,u[20]=e.z,u[21]=e.x,u[22]=a.y,u[23]=e.z,u[24]=a.x,u[25]=e.y,u[26]=e.z,u[27]=a.x,u[28]=a.y,u[29]=e.z,u[30]=a.x,u[31]=a.y,u[32]=a.z,u[33]=a.x,u[34]=e.y,u[35]=a.z,u[36]=e.x,u[37]=e.y,u[38]=e.z,u[39]=e.x,u[40]=a.y,u[41]=e.z,u[42]=e.x,u[43]=a.y,u[44]=a.z,u[45]=e.x,u[46]=e.y,u[47]=a.z,u[48]=e.x,u[49]=a.y,u[50]=e.z,u[51]=a.x,u[52]=a.y,u[53]=e.z,u[54]=a.x,u[55]=a.y,u[56]=a.z,u[57]=e.x,u[58]=a.y,u[59]=a.z,u[60]=e.x,u[61]=e.y,u[62]=e.z,u[63]=a.x,u[64]=e.y,u[65]=e.z,u[66]=a.x,u[67]=e.y,u[68]=a.z,u[69]=e.x,u[70]=e.y,u[71]=a.z,m.position=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u})),n.normal&&((r=new Float32Array(72))[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,r[12]=0,r[13]=0,r[14]=-1,r[15]=0,r[16]=0,r[17]=-1,r[18]=0,r[19]=0,r[20]=-1,r[21]=0,r[22]=0,r[23]=-1,r[24]=1,r[25]=0,r[26]=0,r[27]=1,r[28]=0,r[29]=0,r[30]=1,r[31]=0,r[32]=0,r[33]=1,r[34]=0,r[35]=0,r[36]=-1,r[37]=0,r[38]=0,r[39]=-1,r[40]=0,r[41]=0,r[42]=-1,r[43]=0,r[44]=0,r[45]=-1,r[46]=0,r[47]=0,r[48]=0,r[49]=1,r[50]=0,r[51]=0,r[52]=1,r[53]=0,r[54]=0,r[55]=1,r[56]=0,r[57]=0,r[58]=1,r[59]=0,r[60]=0,r[61]=-1,r[62]=0,r[63]=0,r[64]=-1,r[65]=0,r[66]=0,r[67]=-1,r[68]=0,r[69]=0,r[70]=-1,r[71]=0,m.normal=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:r})),n.st&&((i=new Float32Array(48))[0]=0,i[1]=0,i[2]=1,i[3]=0,i[4]=1,i[5]=1,i[6]=0,i[7]=1,i[8]=1,i[9]=0,i[10]=0,i[11]=0,i[12]=0,i[13]=1,i[14]=1,i[15]=1,i[16]=0,i[17]=0,i[18]=1,i[19]=0,i[20]=1,i[21]=1,i[22]=0,i[23]=1,i[24]=1,i[25]=0,i[26]=0,i[27]=0,i[28]=0,i[29]=1,i[30]=1,i[31]=1,i[32]=1,i[33]=0,i[34]=0,i[35]=0,i[36]=0,i[37]=1,i[38]=1,i[39]=1,i[40]=0,i[41]=0,i[42]=1,i[43]=0,i[44]=1,i[45]=1,i[46]=0,i[47]=1,m.st=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:i})),n.tangent&&((i=new Float32Array(72))[0]=1,i[1]=0,i[2]=0,i[3]=1,i[4]=0,i[5]=0,i[6]=1,i[7]=0,i[8]=0,i[9]=1,i[10]=0,i[11]=0,i[12]=-1,i[13]=0,i[14]=0,i[15]=-1,i[16]=0,i[17]=0,i[18]=-1,i[19]=0,i[20]=0,i[21]=-1,i[22]=0,i[23]=0,i[24]=0,i[25]=1,i[26]=0,i[27]=0,i[28]=1,i[29]=0,i[30]=0,i[31]=1,i[32]=0,i[33]=0,i[34]=1,i[35]=0,i[36]=0,i[37]=-1,i[38]=0,i[39]=0,i[40]=-1,i[41]=0,i[42]=0,i[43]=-1,i[44]=0,i[45]=0,i[46]=-1,i[47]=0,i[48]=-1,i[49]=0,i[50]=0,i[51]=-1,i[52]=0,i[53]=0,i[54]=-1,i[55]=0,i[56]=0,i[57]=-1,i[58]=0,i[59]=0,i[60]=1,i[61]=0,i[62]=0,i[63]=1,i[64]=0,i[65]=0,i[66]=1,i[67]=0,i[68]=0,i[69]=1,i[70]=0,i[71]=0,m.tangent=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:i})),n.bitangent&&((o=new Float32Array(72))[0]=0,o[1]=1,o[2]=0,o[3]=0,o[4]=1,o[5]=0,o[6]=0,o[7]=1,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=1,o[14]=0,o[15]=0,o[16]=1,o[17]=0,o[18]=0,o[19]=1,o[20]=0,o[21]=0,o[22]=1,o[23]=0,o[24]=0,o[25]=0,o[26]=1,o[27]=0,o[28]=0,o[29]=1,o[30]=0,o[31]=0,o[32]=1,o[33]=0,o[34]=0,o[35]=1,o[36]=0,o[37]=0,o[38]=1,o[39]=0,o[40]=0,o[41]=1,o[42]=0,o[43]=0,o[44]=1,o[45]=0,o[46]=0,o[47]=1,o[48]=0,o[49]=0,o[50]=1,o[51]=0,o[52]=0,o[53]=1,o[54]=0,o[55]=0,o[56]=1,o[57]=0,o[58]=0,o[59]=1,o[60]=0,o[61]=0,o[62]=1,o[63]=0,o[64]=0,o[65]=1,o[66]=0,o[67]=0,o[68]=1,o[69]=0,o[70]=0,o[71]=1,m.bitangent=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:o})),(o=new Uint16Array(36))[0]=0,o[1]=1,o[2]=2,o[3]=0,o[4]=2,o[5]=3,o[6]=6,o[7]=5,o[8]=4,o[9]=7,o[10]=6,o[11]=4,o[12]=8,o[13]=9,o[14]=10,o[15]=8,o[16]=10,o[17]=11,o[18]=14,o[19]=13,o[20]=12,o[21]=15,o[22]=14,o[23]=12,o[24]=18,o[25]=17,o[26]=16,o[27]=19,o[28]=18,o[29]=16,o[30]=20,o[31]=21,o[32]=22,o[33]=20,o[34]=22,o[35]=23):((u=new Float64Array(24))[0]=e.x,u[1]=e.y,u[2]=e.z,u[3]=a.x,u[4]=e.y,u[5]=e.z,u[6]=a.x,u[7]=a.y,u[8]=e.z,u[9]=e.x,u[10]=a.y,u[11]=e.z,u[12]=e.x,u[13]=e.y,u[14]=a.z,u[15]=a.x,u[16]=e.y,u[17]=a.z,u[18]=a.x,u[19]=a.y,u[20]=a.z,u[21]=e.x,u[22]=a.y,u[23]=a.z,m.position=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u}),(o=new Uint16Array(36))[0]=4,o[1]=5,o[2]=6,o[3]=4,o[4]=6,o[5]=7,o[6]=1,o[7]=0,o[8]=3,o[9]=1,o[10]=3,o[11]=2,o[12]=1,o[13]=6,o[14]=5,o[15]=1,o[16]=2,o[17]=6,o[18]=2,o[19]=3,o[20]=7,o[21]=2,o[22]=7,o[23]=6,o[24]=3,o[25]=0,o[26]=4,o[27]=3,o[28]=4,o[29]=7,o[30]=0,o[31]=1,o[32]=5,o[33]=0,o[34]=5,o[35]=4);var u,a=p.Cartesian3.subtract(a,e,l),e=.5*p.Cartesian3.magnitude(a);return f.defined(t._offsetAttribute)&&(a=u.length,u=new Uint8Array(a/3),a=t._offsetAttribute===s.GeometryOffsetAttribute.NONE?0:1,s.arrayFill(u,a),m.applyOffset=new c.GeometryAttribute({componentDatatype:x.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})),new c.Geometry({attributes:m,indices:o,primitiveType:c.PrimitiveType.TRIANGLES,boundingSphere:new y.BoundingSphere(p.Cartesian3.ZERO,e),offsetAttribute:t._offsetAttribute})}},m.getUnitBox=function(){return a=!f.defined(a)?m.createGeometry(m.fromDimensions({dimensions:new p.Cartesian3(1,1,1),vertexFormat:o.VertexFormat.POSITION_ONLY})):a},t.BoxGeometry=m}); diff --git a/public/lib/Cesium/Workers/Cartesian2-5b63e672.js b/public/lib/Cesium/Workers/Cartesian2-5b63e672.js new file mode 100644 index 0000000..4cd83c0 --- /dev/null +++ b/public/lib/Cesium/Workers/Cartesian2-5b63e672.js @@ -0,0 +1 @@ +define(["exports","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(e,i,S,q){"use strict";function O(e,t,n){this.x=S.defaultValue(e,0),this.y=S.defaultValue(t,0),this.z=S.defaultValue(n,0)}O.fromSpherical=function(e,t){S.defined(t)||(t=new O);var n=e.clock,a=e.cone,r=S.defaultValue(e.magnitude,1),e=r*Math.sin(a);return t.x=e*Math.cos(n),t.y=e*Math.sin(n),t.z=r*Math.cos(a),t},O.fromElements=function(e,t,n,a){return S.defined(a)?(a.x=e,a.y=t,a.z=n,a):new O(e,t,n)},O.fromCartesian4=O.clone=function(e,t){if(S.defined(e))return S.defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new O(e.x,e.y,e.z)},O.packedLength=3,O.pack=function(e,t,n){return n=S.defaultValue(n,0),t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t},O.unpack=function(e,t,n){return t=S.defaultValue(t,0),(n=!S.defined(n)?new O:n).x=e[t++],n.y=e[t++],n.z=e[t],n},O.packArray=function(e,t){var n=e.length,a=3*n;if(S.defined(t)){if(!Array.isArray(t)&&t.length!==a)throw new i.DeveloperError("If result is a typed array, it must have exactly array.length * 3 elements");t.length!==a&&(t.length=a)}else t=new Array(a);for(var r=0;r<n;++r)O.pack(e[r],t,3*r);return t},O.unpackArray=function(e,t){var n=e.length;S.defined(t)?t.length=n/3:t=new Array(n/3);for(var a=0;a<n;a+=3){var r=a/3;t[r]=O.unpack(e,a,t[r])}return t},O.fromArray=O.unpack,O.maximumComponent=function(e){return Math.max(e.x,e.y,e.z)},O.minimumComponent=function(e){return Math.min(e.x,e.y,e.z)},O.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n},O.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n},O.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z},O.magnitude=function(e){return Math.sqrt(O.magnitudeSquared(e))};var n=new O;O.distance=function(e,t){return O.subtract(e,t,n),O.magnitude(n)},O.distanceSquared=function(e,t){return O.subtract(e,t,n),O.magnitudeSquared(n)},O.normalize=function(e,t){var n=O.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t},O.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z},O.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n},O.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n},O.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n},O.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n},O.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n},O.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n},O.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t},O.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t};var r=new O;O.lerp=function(e,t,n,a){return O.multiplyByScalar(t,n,r),a=O.multiplyByScalar(e,1-n,a),O.add(r,a,a)};var a=new O,u=new O;O.angleBetween=function(e,t){O.normalize(e,a),O.normalize(t,u);e=O.dot(a,u),t=O.magnitude(O.cross(a,u,a));return Math.atan2(t,e)};var o=new O;O.mostOrthogonalAxis=function(e,t){e=O.normalize(e,o);return O.abs(e,e),t=e.x<=e.y?e.x<=e.z?O.clone(O.UNIT_X,t):O.clone(O.UNIT_Z,t):e.y<=e.z?O.clone(O.UNIT_Y,t):O.clone(O.UNIT_Z,t)},O.projectVector=function(e,t,n){e=O.dot(e,t)/O.dot(t,t);return O.multiplyByScalar(t,e,n)},O.equals=function(e,t){return e===t||S.defined(e)&&S.defined(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z},O.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]},O.equalsEpsilon=function(e,t,n,a){return e===t||S.defined(e)&&S.defined(t)&&q.CesiumMath.equalsEpsilon(e.x,t.x,n,a)&&q.CesiumMath.equalsEpsilon(e.y,t.y,n,a)&&q.CesiumMath.equalsEpsilon(e.z,t.z,n,a)},O.cross=function(e,t,n){var a=e.x,r=e.y,i=e.z,u=t.x,o=t.y,e=t.z,t=r*e-i*o,e=i*u-a*e,u=a*o-r*u;return n.x=t,n.y=e,n.z=u,n},O.midpoint=function(e,t,n){return n.x=.5*(e.x+t.x),n.y=.5*(e.y+t.y),n.z=.5*(e.z+t.z),n},O.fromDegrees=function(e,t,n,a,r){return e=q.CesiumMath.toRadians(e),t=q.CesiumMath.toRadians(t),O.fromRadians(e,t,n,a,r)};var s=new O,d=new O,h=new O(40680631590769,40680631590769,40408299984661.445);O.fromRadians=function(e,t,n,a,r){n=S.defaultValue(n,0);var i=S.defined(a)?a.radiiSquared:h,a=Math.cos(t);s.x=a*Math.cos(e),s.y=a*Math.sin(e),s.z=Math.sin(t),s=O.normalize(s,s),O.multiplyComponents(i,s,d);i=Math.sqrt(O.dot(s,d));return d=O.divideByScalar(d,i,d),s=O.multiplyByScalar(s,n,s),S.defined(r)||(r=new O),O.add(d,s,r)},O.fromDegreesArray=function(e,t,n){var a=e.length;S.defined(n)?n.length=a/2:n=new Array(a/2);for(var r=0;r<a;r+=2){var i=e[r],u=e[r+1],o=r/2;n[o]=O.fromDegrees(i,u,0,t,n[o])}return n},O.fromRadiansArray=function(e,t,n){var a=e.length;S.defined(n)?n.length=a/2:n=new Array(a/2);for(var r=0;r<a;r+=2){var i=e[r],u=e[r+1],o=r/2;n[o]=O.fromRadians(i,u,0,t,n[o])}return n},O.fromDegreesArrayHeights=function(e,t,n){var a=e.length;S.defined(n)?n.length=a/3:n=new Array(a/3);for(var r=0;r<a;r+=3){var i=e[r],u=e[r+1],o=e[r+2],s=r/3;n[s]=O.fromDegrees(i,u,o,t,n[s])}return n},O.fromRadiansArrayHeights=function(e,t,n){var a=e.length;S.defined(n)?n.length=a/3:n=new Array(a/3);for(var r=0;r<a;r+=3){var i=e[r],u=e[r+1],o=e[r+2],s=r/3;n[s]=O.fromRadians(i,u,o,t,n[s])}return n},O.ZERO=Object.freeze(new O(0,0,0)),O.UNIT_X=Object.freeze(new O(1,0,0)),O.UNIT_Y=Object.freeze(new O(0,1,0)),O.UNIT_Z=Object.freeze(new O(0,0,1)),O.prototype.clone=function(e){return O.clone(this,e)},O.prototype.equals=function(e){return O.equals(this,e)},O.prototype.equalsEpsilon=function(e,t,n){return O.equalsEpsilon(this,e,t,n)},O.prototype.toString=function(){return"("+this.x+", "+this.y+", "+this.z+")"};var T=new O,A=new O;function l(e,t,n,a,r){var i=e.x,u=e.y,o=e.z,s=t.x,d=t.y,t=t.z,h=i*i*s*s,l=u*u*d*d,f=o*o*t*t,s=h+l+f,d=Math.sqrt(1/s),t=O.multiplyByScalar(e,d,T);if(s<a)return isFinite(d)?O.clone(t,r):void 0;var c=n.x,m=n.y,y=n.z,n=A;n.x=t.x*c*2,n.y=t.y*m*2,n.z=t.z*y*2;var p=(1-d)*O.magnitude(e)/(.5*O.magnitude(n)),g=0;do{var M,x,w,v,_,C,z,g=(z=h*(v=(M=1/(1+(p-=g)*c))*M)+l*(_=(x=1/(1+p*m))*x)+f*(C=(w=1/(1+p*y))*w)-1)/(-2*(h*(v*M)*c+l*(_*x)*m+f*(C*w)*y))}while(Math.abs(z)>q.CesiumMath.EPSILON12);return S.defined(r)?(r.x=i*M,r.y=u*x,r.z=o*w,r):new O(i*M,u*x,o*w)}function f(e,t,n){this.longitude=S.defaultValue(e,0),this.latitude=S.defaultValue(t,0),this.height=S.defaultValue(n,0)}f.fromRadians=function(e,t,n,a){return n=S.defaultValue(n,0),S.defined(a)?(a.longitude=e,a.latitude=t,a.height=n,a):new f(e,t,n)},f.fromDegrees=function(e,t,n,a){return e=q.CesiumMath.toRadians(e),t=q.CesiumMath.toRadians(t),f.fromRadians(e,t,n,a)};var c=new O,m=new O,y=new O,p=new O(1/6378137,1/6378137,1/6356752.314245179),g=new O(1/40680631590769,1/40680631590769,1/40408299984661.445),M=q.CesiumMath.EPSILON1;function x(e,t,n,a){t=S.defaultValue(t,0),n=S.defaultValue(n,0),a=S.defaultValue(a,0),e._radii=new O(t,n,a),e._radiiSquared=new O(t*t,n*n,a*a),e._radiiToTheFourth=new O(t*t*t*t,n*n*n*n,a*a*a*a),e._oneOverRadii=new O(0===t?0:1/t,0===n?0:1/n,0===a?0:1/a),e._oneOverRadiiSquared=new O(0===t?0:1/(t*t),0===n?0:1/(n*n),0===a?0:1/(a*a)),e._minimumRadius=Math.min(t,n,a),e._maximumRadius=Math.max(t,n,a),e._centerToleranceSquared=q.CesiumMath.EPSILON1,0!==e._radiiSquared.z&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function w(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,x(this,e,t,n)}f.fromCartesian=function(e,t,n){var a=S.defined(t)?t.oneOverRadii:p,r=S.defined(t)?t.oneOverRadiiSquared:g,a=l(e,a,r,S.defined(t)?t._centerToleranceSquared:M,m);if(S.defined(a)){t=O.multiplyComponents(a,r,c),t=O.normalize(t,t),r=O.subtract(e,a,y),a=Math.atan2(t.y,t.x),t=Math.asin(t.z),r=q.CesiumMath.sign(O.dot(r,e))*O.magnitude(r);return S.defined(n)?(n.longitude=a,n.latitude=t,n.height=r,n):new f(a,t,r)}},f.toCartesian=function(e,t,n){return O.fromRadians(e.longitude,e.latitude,e.height,t,n)},f.clone=function(e,t){if(S.defined(e))return S.defined(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new f(e.longitude,e.latitude,e.height)},f.equals=function(e,t){return e===t||S.defined(e)&&S.defined(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height},f.equalsEpsilon=function(e,t,n){return n=S.defaultValue(n,0),e===t||S.defined(e)&&S.defined(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n},f.ZERO=Object.freeze(new f(0,0,0)),f.prototype.clone=function(e){return f.clone(this,e)},f.prototype.equals=function(e){return f.equals(this,e)},f.prototype.equalsEpsilon=function(e,t){return f.equalsEpsilon(this,e,t)},f.prototype.toString=function(){return"("+this.longitude+", "+this.latitude+", "+this.height+")"},Object.defineProperties(w.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}}),w.clone=function(e,t){if(S.defined(e)){var n=e._radii;return S.defined(t)?(O.clone(n,t._radii),O.clone(e._radiiSquared,t._radiiSquared),O.clone(e._radiiToTheFourth,t._radiiToTheFourth),O.clone(e._oneOverRadii,t._oneOverRadii),O.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new w(n.x,n.y,n.z)}},w.fromCartesian3=function(e,t){return S.defined(t)||(t=new w),S.defined(e)&&x(t,e.x,e.y,e.z),t},w.WGS84=Object.freeze(new w(6378137,6378137,6356752.314245179)),w.UNIT_SPHERE=Object.freeze(new w(1,1,1)),w.MOON=Object.freeze(new w(q.CesiumMath.LUNAR_RADIUS,q.CesiumMath.LUNAR_RADIUS,q.CesiumMath.LUNAR_RADIUS)),w.prototype.clone=function(e){return w.clone(this,e)},w.packedLength=O.packedLength,w.pack=function(e,t,n){return n=S.defaultValue(n,0),O.pack(e._radii,t,n),t},w.unpack=function(e,t,n){t=S.defaultValue(t,0);t=O.unpack(e,t);return w.fromCartesian3(t,n)},w.prototype.geocentricSurfaceNormal=O.normalize,w.prototype.geodeticSurfaceNormalCartographic=function(e,t){var n=e.longitude,a=e.latitude,r=Math.cos(a),e=r*Math.cos(n),n=r*Math.sin(n),a=Math.sin(a);return(t=!S.defined(t)?new O:t).x=e,t.y=n,t.z=a,O.normalize(t,t)},w.prototype.geodeticSurfaceNormal=function(e,t){if(!O.equalsEpsilon(e,O.ZERO,q.CesiumMath.EPSILON14))return S.defined(t)||(t=new O),t=O.multiplyComponents(e,this._oneOverRadiiSquared,t),O.normalize(t,t)};var v=new O,_=new O;w.prototype.cartographicToCartesian=function(e,t){var n=v,a=_;this.geodeticSurfaceNormalCartographic(e,n),O.multiplyComponents(this._radiiSquared,n,a);var r=Math.sqrt(O.dot(n,a));return O.divideByScalar(a,r,a),O.multiplyByScalar(n,e.height,n),S.defined(t)||(t=new O),O.add(a,n,t)},w.prototype.cartographicArrayToCartesianArray=function(e,t){var n=e.length;S.defined(t)?t.length=n:t=new Array(n);for(var a=0;a<n;a++)t[a]=this.cartographicToCartesian(e[a],t[a]);return t};var C=new O,z=new O,R=new O;w.prototype.cartesianToCartographic=function(e,t){var n=this.scaleToGeodeticSurface(e,z);if(S.defined(n)){var a=this.geodeticSurfaceNormal(n,C),r=O.subtract(e,n,R),n=Math.atan2(a.y,a.x),a=Math.asin(a.z),r=q.CesiumMath.sign(O.dot(r,e))*O.magnitude(r);return S.defined(t)?(t.longitude=n,t.latitude=a,t.height=r,t):new f(n,a,r)}},w.prototype.cartesianArrayToCartographicArray=function(e,t){var n=e.length;S.defined(t)?t.length=n:t=new Array(n);for(var a=0;a<n;++a)t[a]=this.cartesianToCartographic(e[a],t[a]);return t},w.prototype.scaleToGeodeticSurface=function(e,t){return l(e,this._oneOverRadii,this._oneOverRadiiSquared,this._centerToleranceSquared,t)},w.prototype.scaleToGeocentricSurface=function(e,t){S.defined(t)||(t=new O);var n=e.x,a=e.y,r=e.z,i=this._oneOverRadiiSquared,i=1/Math.sqrt(n*n*i.x+a*a*i.y+r*r*i.z);return O.multiplyByScalar(e,i,t)},w.prototype.transformPositionToScaledSpace=function(e,t){return S.defined(t)||(t=new O),O.multiplyComponents(e,this._oneOverRadii,t)},w.prototype.transformPositionFromScaledSpace=function(e,t){return S.defined(t)||(t=new O),O.multiplyComponents(e,this._radii,t)},w.prototype.equals=function(e){return this===e||S.defined(e)&&O.equals(this._radii,e._radii)},w.prototype.toString=function(){return this._radii.toString()},w.prototype.getSurfaceNormalIntersectionWithZAxis=function(e,t,n){t=S.defaultValue(t,0);var a=this._squaredXOverSquaredZ;if((n=!S.defined(n)?new O:n).x=0,n.y=0,n.z=e.z*(1-a),!(Math.abs(n.z)>=this._radii.z-t))return n};var V=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],b=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function I(e,t,n){for(var a=.5*(t+e),r=.5*(t-e),i=0,u=0;u<5;u++){var o=r*V[u];i+=b[u]*(n(a+o)+n(a-o))}return i*=r}function E(e,t,n,a){this.west=S.defaultValue(e,0),this.south=S.defaultValue(t,0),this.east=S.defaultValue(n,0),this.north=S.defaultValue(a,0)}w.prototype.surfaceArea=function(e){for(var t=e.west,r=e.east,n=e.south,a=e.north;r<t;)r+=q.CesiumMath.TWO_PI;var e=this._radiiSquared,i=e.x,u=e.y,o=e.z,s=i*u;return I(n,a,function(e){var n=Math.cos(e),a=Math.sin(e);return Math.cos(e)*I(t,r,function(e){var t=Math.cos(e),e=Math.sin(e);return Math.sqrt(s*a*a+o*(u*t*t+i*e*e)*n*n)})})},Object.defineProperties(E.prototype,{width:{get:function(){return E.computeWidth(this)}},height:{get:function(){return E.computeHeight(this)}}}),E.packedLength=4,E.pack=function(e,t,n){return n=S.defaultValue(n,0),t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t},E.unpack=function(e,t,n){return t=S.defaultValue(t,0),(n=!S.defined(n)?new E:n).west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n},E.computeWidth=function(e){var t=e.east,e=e.west;return t<e&&(t+=q.CesiumMath.TWO_PI),t-e},E.computeHeight=function(e){return e.north-e.south},E.fromDegrees=function(e,t,n,a,r){return e=q.CesiumMath.toRadians(S.defaultValue(e,0)),t=q.CesiumMath.toRadians(S.defaultValue(t,0)),n=q.CesiumMath.toRadians(S.defaultValue(n,0)),a=q.CesiumMath.toRadians(S.defaultValue(a,0)),S.defined(r)?(r.west=e,r.south=t,r.east=n,r.north=a,r):new E(e,t,n,a)},E.fromRadians=function(e,t,n,a,r){return S.defined(r)?(r.west=S.defaultValue(e,0),r.south=S.defaultValue(t,0),r.east=S.defaultValue(n,0),r.north=S.defaultValue(a,0),r):new E(e,t,n,a)},E.fromCartographicArray=function(e,t){for(var n=Number.MAX_VALUE,a=-Number.MAX_VALUE,r=Number.MAX_VALUE,i=-Number.MAX_VALUE,u=Number.MAX_VALUE,o=-Number.MAX_VALUE,s=0,d=e.length;s<d;s++)var h=e[s],n=Math.min(n,h.longitude),a=Math.max(a,h.longitude),u=Math.min(u,h.latitude),o=Math.max(o,h.latitude),h=0<=h.longitude?h.longitude:h.longitude+q.CesiumMath.TWO_PI,r=Math.min(r,h),i=Math.max(i,h);return i-r<a-n&&(n=r,(a=i)>q.CesiumMath.PI&&(a-=q.CesiumMath.TWO_PI),n>q.CesiumMath.PI&&(n-=q.CesiumMath.TWO_PI)),S.defined(t)?(t.west=n,t.south=u,t.east=a,t.north=o,t):new E(n,u,a,o)},E.fromCartesianArray=function(e,t,n){t=S.defaultValue(t,w.WGS84);for(var a=Number.MAX_VALUE,r=-Number.MAX_VALUE,i=Number.MAX_VALUE,u=-Number.MAX_VALUE,o=Number.MAX_VALUE,s=-Number.MAX_VALUE,d=0,h=e.length;d<h;d++)var l=t.cartesianToCartographic(e[d]),a=Math.min(a,l.longitude),r=Math.max(r,l.longitude),o=Math.min(o,l.latitude),s=Math.max(s,l.latitude),l=0<=l.longitude?l.longitude:l.longitude+q.CesiumMath.TWO_PI,i=Math.min(i,l),u=Math.max(u,l);return u-i<r-a&&(a=i,(r=u)>q.CesiumMath.PI&&(r-=q.CesiumMath.TWO_PI),a>q.CesiumMath.PI&&(a-=q.CesiumMath.TWO_PI)),S.defined(n)?(n.west=a,n.south=o,n.east=r,n.north=s,n):new E(a,o,r,s)},E.clone=function(e,t){if(S.defined(e))return S.defined(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new E(e.west,e.south,e.east,e.north)},E.equalsEpsilon=function(e,t,n){return n=S.defaultValue(n,0),e===t||S.defined(e)&&S.defined(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n},E.prototype.clone=function(e){return E.clone(this,e)},E.prototype.equals=function(e){return E.equals(this,e)},E.equals=function(e,t){return e===t||S.defined(e)&&S.defined(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north},E.prototype.equalsEpsilon=function(e,t){return E.equalsEpsilon(this,e,t)},E.validate=function(e){},E.southwest=function(e,t){return S.defined(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new f(e.west,e.south)},E.northwest=function(e,t){return S.defined(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new f(e.west,e.north)},E.northeast=function(e,t){return S.defined(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new f(e.east,e.north)},E.southeast=function(e,t){return S.defined(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new f(e.east,e.south)},E.center=function(e,t){var n=e.east,a=e.west;n<a&&(n+=q.CesiumMath.TWO_PI);n=q.CesiumMath.negativePiToPi(.5*(a+n)),e=.5*(e.south+e.north);return S.defined(t)?(t.longitude=n,t.latitude=e,t.height=0,t):new f(n,e)},E.intersection=function(e,t,n){var a=e.east,r=e.west,i=t.east,u=t.west;a<r&&0<i?a+=q.CesiumMath.TWO_PI:i<u&&0<a&&(i+=q.CesiumMath.TWO_PI),a<r&&u<0?u+=q.CesiumMath.TWO_PI:i<u&&r<0&&(r+=q.CesiumMath.TWO_PI);u=q.CesiumMath.negativePiToPi(Math.max(r,u)),a=q.CesiumMath.negativePiToPi(Math.min(a,i));if(!((e.west<e.east||t.west<t.east)&&a<=u)){i=Math.max(e.south,t.south),t=Math.min(e.north,t.north);if(!(t<=i))return S.defined(n)?(n.west=u,n.south=i,n.east=a,n.north=t,n):new E(u,i,a,t)}},E.simpleIntersection=function(e,t,n){var a=Math.max(e.west,t.west),r=Math.max(e.south,t.south),i=Math.min(e.east,t.east),t=Math.min(e.north,t.north);if(!(t<=r||i<=a))return S.defined(n)?(n.west=a,n.south=r,n.east=i,n.north=t,n):new E(a,r,i,t)},E.union=function(e,t,n){S.defined(n)||(n=new E);var a=e.east,r=e.west,i=t.east,u=t.west;a<r&&0<i?a+=q.CesiumMath.TWO_PI:i<u&&0<a&&(i+=q.CesiumMath.TWO_PI),a<r&&u<0?u+=q.CesiumMath.TWO_PI:i<u&&r<0&&(r+=q.CesiumMath.TWO_PI);u=q.CesiumMath.convertLongitudeRange(Math.min(r,u)),i=q.CesiumMath.convertLongitudeRange(Math.max(a,i));return n.west=u,n.south=Math.min(e.south,t.south),n.east=i,n.north=Math.max(e.north,t.north),n},E.expand=function(e,t,n){return(n=!S.defined(n)?new E:n).west=Math.min(e.west,t.longitude),n.south=Math.min(e.south,t.latitude),n.east=Math.max(e.east,t.longitude),n.north=Math.max(e.north,t.latitude),n},E.contains=function(e,t){var n=t.longitude,a=t.latitude,r=e.west,t=e.east;return t<r&&(t+=q.CesiumMath.TWO_PI,n<0&&(n+=q.CesiumMath.TWO_PI)),(r<n||q.CesiumMath.equalsEpsilon(n,r,q.CesiumMath.EPSILON14))&&(n<t||q.CesiumMath.equalsEpsilon(n,t,q.CesiumMath.EPSILON14))&&a>=e.south&&a<=e.north};var P=new f;function N(e,t){this.x=S.defaultValue(e,0),this.y=S.defaultValue(t,0)}E.subsample=function(e,t,n,a){t=S.defaultValue(t,w.WGS84),n=S.defaultValue(n,0),S.defined(a)||(a=[]);var r=0,i=e.north,u=e.south,o=e.east,s=e.west,d=P;d.height=n,d.longitude=s,d.latitude=i,a[r]=t.cartographicToCartesian(d,a[r]),r++,d.longitude=o,a[r]=t.cartographicToCartesian(d,a[r]),r++,d.latitude=u,a[r]=t.cartographicToCartesian(d,a[r]),r++,d.longitude=s,a[r]=t.cartographicToCartesian(d,a[r]),r++,d.latitude=i<0?i:0<u?u:0;for(var h=1;h<8;++h)d.longitude=-Math.PI+h*q.CesiumMath.PI_OVER_TWO,E.contains(e,d)&&(a[r]=t.cartographicToCartesian(d,a[r]),r++);return 0===d.latitude&&(d.longitude=s,a[r]=t.cartographicToCartesian(d,a[r]),r++,d.longitude=o,a[r]=t.cartographicToCartesian(d,a[r]),r++),a.length=r,a},E.MAX_VALUE=Object.freeze(new E(-Math.PI,-q.CesiumMath.PI_OVER_TWO,Math.PI,q.CesiumMath.PI_OVER_TWO)),N.fromElements=function(e,t,n){return S.defined(n)?(n.x=e,n.y=t,n):new N(e,t)},N.fromCartesian3=N.clone=function(e,t){if(S.defined(e))return S.defined(t)?(t.x=e.x,t.y=e.y,t):new N(e.x,e.y)},N.fromCartesian4=N.clone,N.packedLength=2,N.pack=function(e,t,n){return n=S.defaultValue(n,0),t[n++]=e.x,t[n]=e.y,t},N.unpack=function(e,t,n){return t=S.defaultValue(t,0),(n=!S.defined(n)?new N:n).x=e[t++],n.y=e[t],n},N.packArray=function(e,t){var n=e.length,a=2*n;if(S.defined(t)){if(!Array.isArray(t)&&t.length!==a)throw new i.DeveloperError("If result is a typed array, it must have exactly array.length * 2 elements");t.length!==a&&(t.length=a)}else t=new Array(a);for(var r=0;r<n;++r)N.pack(e[r],t,2*r);return t},N.unpackArray=function(e,t){var n=e.length;S.defined(t)?t.length=n/2:t=new Array(n/2);for(var a=0;a<n;a+=2){var r=a/2;t[r]=N.unpack(e,a,t[r])}return t},N.fromArray=N.unpack,N.maximumComponent=function(e){return Math.max(e.x,e.y)},N.minimumComponent=function(e){return Math.min(e.x,e.y)},N.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n},N.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n},N.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y},N.magnitude=function(e){return Math.sqrt(N.magnitudeSquared(e))};var U=new N;N.distance=function(e,t){return N.subtract(e,t,U),N.magnitude(U)},N.distanceSquared=function(e,t){return N.subtract(e,t,U),N.magnitudeSquared(U)},N.normalize=function(e,t){var n=N.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t},N.dot=function(e,t){return e.x*t.x+e.y*t.y},N.cross=function(e,t){return e.x*t.y-e.y*t.x},N.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n},N.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n},N.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n},N.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n},N.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n},N.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n},N.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t},N.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t};var L=new N;N.lerp=function(e,t,n,a){return N.multiplyByScalar(t,n,L),a=N.multiplyByScalar(e,1-n,a),N.add(L,a,a)};var W=new N,k=new N;N.angleBetween=function(e,t){return N.normalize(e,W),N.normalize(t,k),q.CesiumMath.acosClamped(N.dot(W,k))};var B=new N;N.mostOrthogonalAxis=function(e,t){e=N.normalize(e,B);return N.abs(e,e),t=e.x<=e.y?N.clone(N.UNIT_X,t):N.clone(N.UNIT_Y,t)},N.equals=function(e,t){return e===t||S.defined(e)&&S.defined(t)&&e.x===t.x&&e.y===t.y},N.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]},N.equalsEpsilon=function(e,t,n,a){return e===t||S.defined(e)&&S.defined(t)&&q.CesiumMath.equalsEpsilon(e.x,t.x,n,a)&&q.CesiumMath.equalsEpsilon(e.y,t.y,n,a)},N.ZERO=Object.freeze(new N(0,0)),N.UNIT_X=Object.freeze(new N(1,0)),N.UNIT_Y=Object.freeze(new N(0,1)),N.prototype.clone=function(e){return N.clone(this,e)},N.prototype.equals=function(e){return N.equals(this,e)},N.prototype.equalsEpsilon=function(e,t,n){return N.equalsEpsilon(this,e,t,n)},N.prototype.toString=function(){return"("+this.x+", "+this.y+")"},e.Cartesian2=N,e.Cartesian3=O,e.Cartographic=f,e.Ellipsoid=w,e.Rectangle=E}); diff --git a/public/lib/Cesium/Workers/Check-64f87f7d.js b/public/lib/Cesium/Workers/Check-64f87f7d.js new file mode 100644 index 0000000..8294ddc --- /dev/null +++ b/public/lib/Cesium/Workers/Check-64f87f7d.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574"],function(e,n){"use strict";function r(e){var t;this.name="DeveloperError",this.message=e;try{throw new Error}catch(e){t=e.stack}this.stack=t}n.defined(Object.create)&&((r.prototype=Object.create(Error.prototype)).constructor=r),r.prototype.toString=function(){var e=this.name+": "+this.message;return n.defined(this.stack)&&(e+="\n"+this.stack.toString()),e},r.throwInstantiationError=function(){throw new r("This function defines an interface and should not be called directly.")};var a={};function o(e,t,n){return"Expected "+n+" to be typeof "+t+", actual typeof was "+e}a.typeOf={},a.defined=function(e,t){if(!n.defined(t))throw new r(e+" is required, actual value was undefined")},a.typeOf.func=function(e,t){if("function"!=typeof t)throw new r(o(typeof t,"function",e))},a.typeOf.string=function(e,t){if("string"!=typeof t)throw new r(o(typeof t,"string",e))},a.typeOf.number=function(e,t){if("number"!=typeof t)throw new r(o(typeof t,"number",e))},a.typeOf.number.lessThan=function(e,t,n){if(a.typeOf.number(e,t),n<=t)throw new r("Expected "+e+" to be less than "+n+", actual value was "+t)},a.typeOf.number.lessThanOrEquals=function(e,t,n){if(a.typeOf.number(e,t),n<t)throw new r("Expected "+e+" to be less than or equal to "+n+", actual value was "+t)},a.typeOf.number.greaterThan=function(e,t,n){if(a.typeOf.number(e,t),t<=n)throw new r("Expected "+e+" to be greater than "+n+", actual value was "+t)},a.typeOf.number.greaterThanOrEquals=function(e,t,n){if(a.typeOf.number(e,t),t<n)throw new r("Expected "+e+" to be greater than or equal to"+n+", actual value was "+t)},a.typeOf.object=function(e,t){if("object"!=typeof t)throw new r(o(typeof t,"object",e))},a.typeOf.bool=function(e,t){if("boolean"!=typeof t)throw new r(o(typeof t,"boolean",e))},a.typeOf.number.equals=function(e,t,n,o){if(a.typeOf.number(e,n),a.typeOf.number(t,o),n!==o)throw new r(e+" must be equal to "+t+", the actual values are "+n+" and "+o)},e.Check=a,e.DeveloperError=r}); diff --git a/public/lib/Cesium/Workers/Color-821fa62a.js b/public/lib/Cesium/Workers/Color-821fa62a.js new file mode 100644 index 0000000..007ee53 --- /dev/null +++ b/public/lib/Cesium/Workers/Color-821fa62a.js @@ -0,0 +1 @@ +define(["exports","./Check-64f87f7d","./when-ca391574","./Transforms-5295b227","./Math-b53708b3"],function(e,r,C,o,a){"use strict";function i(e,r,o){return o<0&&(o+=1),1<o&&--o,6*o<1?e+6*(r-e)*o:2*o<1?r:3*o<2?e+(r-e)*(2/3-o)*6:e}function E(e,r,o,t){this.red=C.defaultValue(e,1),this.green=C.defaultValue(r,1),this.blue=C.defaultValue(o,1),this.alpha=C.defaultValue(t,1)}var t,f;E.fromCartesian4=function(e,r){return C.defined(r)?(r.red=e.x,r.green=e.y,r.blue=e.z,r.alpha=e.w,r):new E(e.x,e.y,e.z,e.w)},E.fromBytes=function(e,r,o,t,f){return e=E.byteToFloat(C.defaultValue(e,255)),r=E.byteToFloat(C.defaultValue(r,255)),o=E.byteToFloat(C.defaultValue(o,255)),t=E.byteToFloat(C.defaultValue(t,255)),C.defined(f)?(f.red=e,f.green=r,f.blue=o,f.alpha=t,f):new E(e,r,o,t)},E.fromAlpha=function(e,r,o){return C.defined(o)?(o.red=e.red,o.green=e.green,o.blue=e.blue,o.alpha=r,o):new E(e.red,e.green,e.blue,r)},o.FeatureDetection.supportsTypedArrays()&&(o=new ArrayBuffer(4),t=new Uint32Array(o),f=new Uint8Array(o)),E.fromRgba=function(e,r){return t[0]=e,E.fromBytes(f[0],f[1],f[2],f[3],r)},E.fromHsl=function(e,r,o,t,f){e=C.defaultValue(e,0)%1,r=C.defaultValue(r,0),o=C.defaultValue(o,0),t=C.defaultValue(t,1);var s=o,n=o,l=o;return 0!==r&&(s=i(r=2*o-(o=o<.5?o*(1+r):o+r-o*r),o,e+1/3),n=i(r,o,e),l=i(r,o,e-1/3)),C.defined(f)?(f.red=s,f.green=n,f.blue=l,f.alpha=t,f):new E(s,n,l,t)},E.fromRandom=function(e,r){var o=(e=C.defaultValue(e,C.defaultValue.EMPTY_OBJECT)).red;C.defined(o)||(t=C.defaultValue(e.minimumRed,0),f=C.defaultValue(e.maximumRed,1),o=t+a.CesiumMath.nextRandomNumber()*(f-t));var t,f=e.green;C.defined(f)||(s=C.defaultValue(e.minimumGreen,0),t=C.defaultValue(e.maximumGreen,1),f=s+a.CesiumMath.nextRandomNumber()*(t-s));var s=e.blue;C.defined(s)||(n=C.defaultValue(e.minimumBlue,0),l=C.defaultValue(e.maximumBlue,1),s=n+a.CesiumMath.nextRandomNumber()*(l-n));var n,l=e.alpha;return C.defined(l)||(n=C.defaultValue(e.minimumAlpha,0),e=C.defaultValue(e.maximumAlpha,1),l=n+a.CesiumMath.nextRandomNumber()*(e-n)),C.defined(r)?(r.red=o,r.green=f,r.blue=s,r.alpha=l,r):new E(o,f,s,l)};var s=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,l=/^rgba?\(\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)(?:\s*,\s*([0-9.]+))?\s*\)$/i,u=/^hsla?\(\s*([0-9.]+)\s*,\s*([0-9.]+%)\s*,\s*([0-9.]+%)(?:\s*,\s*([0-9.]+))?\s*\)$/i;E.fromCssColorString=function(e,r){C.defined(r)||(r=new E);var o=E[(e=e.replace(/\s/g,"")).toUpperCase()];if(C.defined(o))return E.clone(o,r),r;o=s.exec(e);return null!==o?(r.red=parseInt(o[1],16)/15,r.green=parseInt(o[2],16)/15,r.blue=parseInt(o[3],16)/15,r.alpha=parseInt(C.defaultValue(o[4],"f"),16)/15,r):null!==(o=n.exec(e))?(r.red=parseInt(o[1],16)/255,r.green=parseInt(o[2],16)/255,r.blue=parseInt(o[3],16)/255,r.alpha=parseInt(C.defaultValue(o[4],"ff"),16)/255,r):null!==(o=l.exec(e))?(r.red=parseFloat(o[1])/("%"===o[1].substr(-1)?100:255),r.green=parseFloat(o[2])/("%"===o[2].substr(-1)?100:255),r.blue=parseFloat(o[3])/("%"===o[3].substr(-1)?100:255),r.alpha=parseFloat(C.defaultValue(o[4],"1.0")),r):null!==(o=u.exec(e))?E.fromHsl(parseFloat(o[1])/360,parseFloat(o[2])/100,parseFloat(o[3])/100,parseFloat(C.defaultValue(o[4],"1.0")),r):r=void 0},E.packedLength=4,E.pack=function(e,r,o){return o=C.defaultValue(o,0),r[o++]=e.red,r[o++]=e.green,r[o++]=e.blue,r[o]=e.alpha,r},E.unpack=function(e,r,o){return r=C.defaultValue(r,0),(o=!C.defined(o)?new E:o).red=e[r++],o.green=e[r++],o.blue=e[r++],o.alpha=e[r],o},E.byteToFloat=function(e){return e/255},E.floatToByte=function(e){return 1===e?255:256*e|0},E.clone=function(e,r){if(C.defined(e))return C.defined(r)?(r.red=e.red,r.green=e.green,r.blue=e.blue,r.alpha=e.alpha,r):new E(e.red,e.green,e.blue,e.alpha)},E.equals=function(e,r){return e===r||C.defined(e)&&C.defined(r)&&e.red===r.red&&e.green===r.green&&e.blue===r.blue&&e.alpha===r.alpha},E.equalsArray=function(e,r,o){return e.red===r[o]&&e.green===r[o+1]&&e.blue===r[o+2]&&e.alpha===r[o+3]},E.prototype.clone=function(e){return E.clone(this,e)},E.prototype.equals=function(e){return E.equals(this,e)},E.prototype.equalsEpsilon=function(e,r){return this===e||C.defined(e)&&Math.abs(this.red-e.red)<=r&&Math.abs(this.green-e.green)<=r&&Math.abs(this.blue-e.blue)<=r&&Math.abs(this.alpha-e.alpha)<=r},E.prototype.toString=function(){return"("+this.red+", "+this.green+", "+this.blue+", "+this.alpha+")"},E.prototype.toCssColorString=function(){var e=E.floatToByte(this.red),r=E.floatToByte(this.green),o=E.floatToByte(this.blue);return 1===this.alpha?"rgb("+e+","+r+","+o+")":"rgba("+e+","+r+","+o+","+this.alpha+")"},E.prototype.toCssHexString=function(){var e=E.floatToByte(this.red).toString(16);e.length<2&&(e="0"+e);var r=E.floatToByte(this.green).toString(16);r.length<2&&(r="0"+r);var o=E.floatToByte(this.blue).toString(16);if(o.length<2&&(o="0"+o),this.alpha<1){var t=E.floatToByte(this.alpha).toString(16);return"#"+e+r+o+(t=t.length<2?"0"+t:t)}return"#"+e+r+o},E.prototype.toBytes=function(e){var r=E.floatToByte(this.red),o=E.floatToByte(this.green),t=E.floatToByte(this.blue),f=E.floatToByte(this.alpha);return C.defined(e)?(e[0]=r,e[1]=o,e[2]=t,e[3]=f,e):[r,o,t,f]},E.prototype.toRgba=function(){return f[0]=E.floatToByte(this.red),f[1]=E.floatToByte(this.green),f[2]=E.floatToByte(this.blue),f[3]=E.floatToByte(this.alpha),t[0]},E.prototype.brighten=function(e,r){return e=1-e,r.red=1-(1-this.red)*e,r.green=1-(1-this.green)*e,r.blue=1-(1-this.blue)*e,r.alpha=this.alpha,r},E.prototype.darken=function(e,r){return e=1-e,r.red=this.red*e,r.green=this.green*e,r.blue=this.blue*e,r.alpha=this.alpha,r},E.prototype.withAlpha=function(e,r){return E.fromAlpha(this,e,r)},E.add=function(e,r,o){return o.red=e.red+r.red,o.green=e.green+r.green,o.blue=e.blue+r.blue,o.alpha=e.alpha+r.alpha,o},E.subtract=function(e,r,o){return o.red=e.red-r.red,o.green=e.green-r.green,o.blue=e.blue-r.blue,o.alpha=e.alpha-r.alpha,o},E.multiply=function(e,r,o){return o.red=e.red*r.red,o.green=e.green*r.green,o.blue=e.blue*r.blue,o.alpha=e.alpha*r.alpha,o},E.divide=function(e,r,o){return o.red=e.red/r.red,o.green=e.green/r.green,o.blue=e.blue/r.blue,o.alpha=e.alpha/r.alpha,o},E.mod=function(e,r,o){return o.red=e.red%r.red,o.green=e.green%r.green,o.blue=e.blue%r.blue,o.alpha=e.alpha%r.alpha,o},E.lerp=function(e,r,o,t){return t.red=a.CesiumMath.lerp(e.red,r.red,o),t.green=a.CesiumMath.lerp(e.green,r.green,o),t.blue=a.CesiumMath.lerp(e.blue,r.blue,o),t.alpha=a.CesiumMath.lerp(e.alpha,r.alpha,o),t},E.multiplyByScalar=function(e,r,o){return o.red=e.red*r,o.green=e.green*r,o.blue=e.blue*r,o.alpha=e.alpha*r,o},E.divideByScalar=function(e,r,o){return o.red=e.red/r,o.green=e.green/r,o.blue=e.blue/r,o.alpha=e.alpha/r,o},E.ALICEBLUE=Object.freeze(E.fromCssColorString("#F0F8FF")),E.ANTIQUEWHITE=Object.freeze(E.fromCssColorString("#FAEBD7")),E.AQUA=Object.freeze(E.fromCssColorString("#00FFFF")),E.AQUAMARINE=Object.freeze(E.fromCssColorString("#7FFFD4")),E.AZURE=Object.freeze(E.fromCssColorString("#F0FFFF")),E.BEIGE=Object.freeze(E.fromCssColorString("#F5F5DC")),E.BISQUE=Object.freeze(E.fromCssColorString("#FFE4C4")),E.BLACK=Object.freeze(E.fromCssColorString("#000000")),E.BLANCHEDALMOND=Object.freeze(E.fromCssColorString("#FFEBCD")),E.BLUE=Object.freeze(E.fromCssColorString("#0000FF")),E.BLUEVIOLET=Object.freeze(E.fromCssColorString("#8A2BE2")),E.BROWN=Object.freeze(E.fromCssColorString("#A52A2A")),E.BURLYWOOD=Object.freeze(E.fromCssColorString("#DEB887")),E.CADETBLUE=Object.freeze(E.fromCssColorString("#5F9EA0")),E.CHARTREUSE=Object.freeze(E.fromCssColorString("#7FFF00")),E.CHOCOLATE=Object.freeze(E.fromCssColorString("#D2691E")),E.CORAL=Object.freeze(E.fromCssColorString("#FF7F50")),E.CORNFLOWERBLUE=Object.freeze(E.fromCssColorString("#6495ED")),E.CORNSILK=Object.freeze(E.fromCssColorString("#FFF8DC")),E.CRIMSON=Object.freeze(E.fromCssColorString("#DC143C")),E.CYAN=Object.freeze(E.fromCssColorString("#00FFFF")),E.DARKBLUE=Object.freeze(E.fromCssColorString("#00008B")),E.DARKCYAN=Object.freeze(E.fromCssColorString("#008B8B")),E.DARKGOLDENROD=Object.freeze(E.fromCssColorString("#B8860B")),E.DARKGRAY=Object.freeze(E.fromCssColorString("#A9A9A9")),E.DARKGREEN=Object.freeze(E.fromCssColorString("#006400")),E.DARKGREY=E.DARKGRAY,E.DARKKHAKI=Object.freeze(E.fromCssColorString("#BDB76B")),E.DARKMAGENTA=Object.freeze(E.fromCssColorString("#8B008B")),E.DARKOLIVEGREEN=Object.freeze(E.fromCssColorString("#556B2F")),E.DARKORANGE=Object.freeze(E.fromCssColorString("#FF8C00")),E.DARKORCHID=Object.freeze(E.fromCssColorString("#9932CC")),E.DARKRED=Object.freeze(E.fromCssColorString("#8B0000")),E.DARKSALMON=Object.freeze(E.fromCssColorString("#E9967A")),E.DARKSEAGREEN=Object.freeze(E.fromCssColorString("#8FBC8F")),E.DARKSLATEBLUE=Object.freeze(E.fromCssColorString("#483D8B")),E.DARKSLATEGRAY=Object.freeze(E.fromCssColorString("#2F4F4F")),E.DARKSLATEGREY=E.DARKSLATEGRAY,E.DARKTURQUOISE=Object.freeze(E.fromCssColorString("#00CED1")),E.DARKVIOLET=Object.freeze(E.fromCssColorString("#9400D3")),E.DEEPPINK=Object.freeze(E.fromCssColorString("#FF1493")),E.DEEPSKYBLUE=Object.freeze(E.fromCssColorString("#00BFFF")),E.DIMGRAY=Object.freeze(E.fromCssColorString("#696969")),E.DIMGREY=E.DIMGRAY,E.DODGERBLUE=Object.freeze(E.fromCssColorString("#1E90FF")),E.FIREBRICK=Object.freeze(E.fromCssColorString("#B22222")),E.FLORALWHITE=Object.freeze(E.fromCssColorString("#FFFAF0")),E.FORESTGREEN=Object.freeze(E.fromCssColorString("#228B22")),E.FUCHSIA=Object.freeze(E.fromCssColorString("#FF00FF")),E.GAINSBORO=Object.freeze(E.fromCssColorString("#DCDCDC")),E.GHOSTWHITE=Object.freeze(E.fromCssColorString("#F8F8FF")),E.GOLD=Object.freeze(E.fromCssColorString("#FFD700")),E.GOLDENROD=Object.freeze(E.fromCssColorString("#DAA520")),E.GRAY=Object.freeze(E.fromCssColorString("#808080")),E.GREEN=Object.freeze(E.fromCssColorString("#008000")),E.GREENYELLOW=Object.freeze(E.fromCssColorString("#ADFF2F")),E.GREY=E.GRAY,E.HONEYDEW=Object.freeze(E.fromCssColorString("#F0FFF0")),E.HOTPINK=Object.freeze(E.fromCssColorString("#FF69B4")),E.INDIANRED=Object.freeze(E.fromCssColorString("#CD5C5C")),E.INDIGO=Object.freeze(E.fromCssColorString("#4B0082")),E.IVORY=Object.freeze(E.fromCssColorString("#FFFFF0")),E.KHAKI=Object.freeze(E.fromCssColorString("#F0E68C")),E.LAVENDER=Object.freeze(E.fromCssColorString("#E6E6FA")),E.LAVENDAR_BLUSH=Object.freeze(E.fromCssColorString("#FFF0F5")),E.LAWNGREEN=Object.freeze(E.fromCssColorString("#7CFC00")),E.LEMONCHIFFON=Object.freeze(E.fromCssColorString("#FFFACD")),E.LIGHTBLUE=Object.freeze(E.fromCssColorString("#ADD8E6")),E.LIGHTCORAL=Object.freeze(E.fromCssColorString("#F08080")),E.LIGHTCYAN=Object.freeze(E.fromCssColorString("#E0FFFF")),E.LIGHTGOLDENRODYELLOW=Object.freeze(E.fromCssColorString("#FAFAD2")),E.LIGHTGRAY=Object.freeze(E.fromCssColorString("#D3D3D3")),E.LIGHTGREEN=Object.freeze(E.fromCssColorString("#90EE90")),E.LIGHTGREY=E.LIGHTGRAY,E.LIGHTPINK=Object.freeze(E.fromCssColorString("#FFB6C1")),E.LIGHTSEAGREEN=Object.freeze(E.fromCssColorString("#20B2AA")),E.LIGHTSKYBLUE=Object.freeze(E.fromCssColorString("#87CEFA")),E.LIGHTSLATEGRAY=Object.freeze(E.fromCssColorString("#778899")),E.LIGHTSLATEGREY=E.LIGHTSLATEGRAY,E.LIGHTSTEELBLUE=Object.freeze(E.fromCssColorString("#B0C4DE")),E.LIGHTYELLOW=Object.freeze(E.fromCssColorString("#FFFFE0")),E.LIME=Object.freeze(E.fromCssColorString("#00FF00")),E.LIMEGREEN=Object.freeze(E.fromCssColorString("#32CD32")),E.LINEN=Object.freeze(E.fromCssColorString("#FAF0E6")),E.MAGENTA=Object.freeze(E.fromCssColorString("#FF00FF")),E.MAROON=Object.freeze(E.fromCssColorString("#800000")),E.MEDIUMAQUAMARINE=Object.freeze(E.fromCssColorString("#66CDAA")),E.MEDIUMBLUE=Object.freeze(E.fromCssColorString("#0000CD")),E.MEDIUMORCHID=Object.freeze(E.fromCssColorString("#BA55D3")),E.MEDIUMPURPLE=Object.freeze(E.fromCssColorString("#9370DB")),E.MEDIUMSEAGREEN=Object.freeze(E.fromCssColorString("#3CB371")),E.MEDIUMSLATEBLUE=Object.freeze(E.fromCssColorString("#7B68EE")),E.MEDIUMSPRINGGREEN=Object.freeze(E.fromCssColorString("#00FA9A")),E.MEDIUMTURQUOISE=Object.freeze(E.fromCssColorString("#48D1CC")),E.MEDIUMVIOLETRED=Object.freeze(E.fromCssColorString("#C71585")),E.MIDNIGHTBLUE=Object.freeze(E.fromCssColorString("#191970")),E.MINTCREAM=Object.freeze(E.fromCssColorString("#F5FFFA")),E.MISTYROSE=Object.freeze(E.fromCssColorString("#FFE4E1")),E.MOCCASIN=Object.freeze(E.fromCssColorString("#FFE4B5")),E.NAVAJOWHITE=Object.freeze(E.fromCssColorString("#FFDEAD")),E.NAVY=Object.freeze(E.fromCssColorString("#000080")),E.OLDLACE=Object.freeze(E.fromCssColorString("#FDF5E6")),E.OLIVE=Object.freeze(E.fromCssColorString("#808000")),E.OLIVEDRAB=Object.freeze(E.fromCssColorString("#6B8E23")),E.ORANGE=Object.freeze(E.fromCssColorString("#FFA500")),E.ORANGERED=Object.freeze(E.fromCssColorString("#FF4500")),E.ORCHID=Object.freeze(E.fromCssColorString("#DA70D6")),E.PALEGOLDENROD=Object.freeze(E.fromCssColorString("#EEE8AA")),E.PALEGREEN=Object.freeze(E.fromCssColorString("#98FB98")),E.PALETURQUOISE=Object.freeze(E.fromCssColorString("#AFEEEE")),E.PALEVIOLETRED=Object.freeze(E.fromCssColorString("#DB7093")),E.PAPAYAWHIP=Object.freeze(E.fromCssColorString("#FFEFD5")),E.PEACHPUFF=Object.freeze(E.fromCssColorString("#FFDAB9")),E.PERU=Object.freeze(E.fromCssColorString("#CD853F")),E.PINK=Object.freeze(E.fromCssColorString("#FFC0CB")),E.PLUM=Object.freeze(E.fromCssColorString("#DDA0DD")),E.POWDERBLUE=Object.freeze(E.fromCssColorString("#B0E0E6")),E.PURPLE=Object.freeze(E.fromCssColorString("#800080")),E.RED=Object.freeze(E.fromCssColorString("#FF0000")),E.ROSYBROWN=Object.freeze(E.fromCssColorString("#BC8F8F")),E.ROYALBLUE=Object.freeze(E.fromCssColorString("#4169E1")),E.SADDLEBROWN=Object.freeze(E.fromCssColorString("#8B4513")),E.SALMON=Object.freeze(E.fromCssColorString("#FA8072")),E.SANDYBROWN=Object.freeze(E.fromCssColorString("#F4A460")),E.SEAGREEN=Object.freeze(E.fromCssColorString("#2E8B57")),E.SEASHELL=Object.freeze(E.fromCssColorString("#FFF5EE")),E.SIENNA=Object.freeze(E.fromCssColorString("#A0522D")),E.SILVER=Object.freeze(E.fromCssColorString("#C0C0C0")),E.SKYBLUE=Object.freeze(E.fromCssColorString("#87CEEB")),E.SLATEBLUE=Object.freeze(E.fromCssColorString("#6A5ACD")),E.SLATEGRAY=Object.freeze(E.fromCssColorString("#708090")),E.SLATEGREY=E.SLATEGRAY,E.SNOW=Object.freeze(E.fromCssColorString("#FFFAFA")),E.SPRINGGREEN=Object.freeze(E.fromCssColorString("#00FF7F")),E.STEELBLUE=Object.freeze(E.fromCssColorString("#4682B4")),E.TAN=Object.freeze(E.fromCssColorString("#D2B48C")),E.TEAL=Object.freeze(E.fromCssColorString("#008080")),E.THISTLE=Object.freeze(E.fromCssColorString("#D8BFD8")),E.TOMATO=Object.freeze(E.fromCssColorString("#FF6347")),E.TURQUOISE=Object.freeze(E.fromCssColorString("#40E0D0")),E.VIOLET=Object.freeze(E.fromCssColorString("#EE82EE")),E.WHEAT=Object.freeze(E.fromCssColorString("#F5DEB3")),E.WHITE=Object.freeze(E.fromCssColorString("#FFFFFF")),E.WHITESMOKE=Object.freeze(E.fromCssColorString("#F5F5F5")),E.YELLOW=Object.freeze(E.fromCssColorString("#FFFF00")),E.YELLOWGREEN=Object.freeze(E.fromCssColorString("#9ACD32")),E.TRANSPARENT=Object.freeze(new E(0,0,0,0)),e.Color=E}); diff --git a/public/lib/Cesium/Workers/ComponentDatatype-8f71e605.js b/public/lib/Cesium/Workers/ComponentDatatype-8f71e605.js new file mode 100644 index 0000000..5d461db --- /dev/null +++ b/public/lib/Cesium/Workers/ComponentDatatype-8f71e605.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574","./Check-64f87f7d","./WebGLConstants-95ceb4e9"],function(r,a,e,n){"use strict";var E={BYTE:n.WebGLConstants.BYTE,UNSIGNED_BYTE:n.WebGLConstants.UNSIGNED_BYTE,SHORT:n.WebGLConstants.SHORT,UNSIGNED_SHORT:n.WebGLConstants.UNSIGNED_SHORT,INT:n.WebGLConstants.INT,UNSIGNED_INT:n.WebGLConstants.UNSIGNED_INT,FLOAT:n.WebGLConstants.FLOAT,DOUBLE:n.WebGLConstants.DOUBLE,getSizeInBytes:function(r){switch(r){case E.BYTE:return Int8Array.BYTES_PER_ELEMENT;case E.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case E.SHORT:return Int16Array.BYTES_PER_ELEMENT;case E.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case E.INT:return Int32Array.BYTES_PER_ELEMENT;case E.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case E.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case E.DOUBLE:return Float64Array.BYTES_PER_ELEMENT}},fromTypedArray:function(r){return r instanceof Int8Array?E.BYTE:r instanceof Uint8Array?E.UNSIGNED_BYTE:r instanceof Int16Array?E.SHORT:r instanceof Uint16Array?E.UNSIGNED_SHORT:r instanceof Int32Array?E.INT:r instanceof Uint32Array?E.UNSIGNED_INT:r instanceof Float32Array?E.FLOAT:r instanceof Float64Array?E.DOUBLE:void 0},validate:function(r){return a.defined(r)&&(r===E.BYTE||r===E.UNSIGNED_BYTE||r===E.SHORT||r===E.UNSIGNED_SHORT||r===E.INT||r===E.UNSIGNED_INT||r===E.FLOAT||r===E.DOUBLE)},createTypedArray:function(r,e){switch(r){case E.BYTE:return new Int8Array(e);case E.UNSIGNED_BYTE:return new Uint8Array(e);case E.SHORT:return new Int16Array(e);case E.UNSIGNED_SHORT:return new Uint16Array(e);case E.INT:return new Int32Array(e);case E.UNSIGNED_INT:return new Uint32Array(e);case E.FLOAT:return new Float32Array(e);case E.DOUBLE:return new Float64Array(e)}},createArrayBufferView:function(r,e,n,t){switch(n=a.defaultValue(n,0),t=a.defaultValue(t,(e.byteLength-n)/E.getSizeInBytes(r)),r){case E.BYTE:return new Int8Array(e,n,t);case E.UNSIGNED_BYTE:return new Uint8Array(e,n,t);case E.SHORT:return new Int16Array(e,n,t);case E.UNSIGNED_SHORT:return new Uint16Array(e,n,t);case E.INT:return new Int32Array(e,n,t);case E.UNSIGNED_INT:return new Uint32Array(e,n,t);case E.FLOAT:return new Float32Array(e,n,t);case E.DOUBLE:return new Float64Array(e,n,t)}},fromName:function(r){switch(r){case"BYTE":return E.BYTE;case"UNSIGNED_BYTE":return E.UNSIGNED_BYTE;case"SHORT":return E.SHORT;case"UNSIGNED_SHORT":return E.UNSIGNED_SHORT;case"INT":return E.INT;case"UNSIGNED_INT":return E.UNSIGNED_INT;case"FLOAT":return E.FLOAT;case"DOUBLE":return E.DOUBLE}}},n=Object.freeze(E);r.ComponentDatatype=n}); diff --git a/public/lib/Cesium/Workers/CoplanarPolygonGeometryLibrary-f6a57602.js b/public/lib/Cesium/Workers/CoplanarPolygonGeometryLibrary-f6a57602.js new file mode 100644 index 0000000..b83f651 --- /dev/null +++ b/public/lib/Cesium/Workers/CoplanarPolygonGeometryLibrary-f6a57602.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./Transforms-5295b227","./OrientedBoundingBox-e61df120"],function(n,g,t,f,l){"use strict";var e={},i=new g.Cartesian3,x=new g.Cartesian3,B=new g.Cartesian3,P=new g.Cartesian3,M=new l.OrientedBoundingBox;function o(n,t,e,r,a){t=g.Cartesian3.subtract(n,t,i),e=g.Cartesian3.dot(e,t),t=g.Cartesian3.dot(r,t);return g.Cartesian2.fromElements(e,t,a)}e.validOutline=function(n){var t=l.OrientedBoundingBox.fromPoints(n,M).halfAxes,e=f.Matrix3.getColumn(t,0,x),n=f.Matrix3.getColumn(t,1,B),t=f.Matrix3.getColumn(t,2,P),e=g.Cartesian3.magnitude(e),n=g.Cartesian3.magnitude(n),t=g.Cartesian3.magnitude(t);return!(0===e&&(0===n||0===t)||0===n&&0===t)},e.computeProjectTo2DArguments=function(n,t,e,r){var a,i,o=l.OrientedBoundingBox.fromPoints(n,M),u=o.halfAxes,s=f.Matrix3.getColumn(u,0,x),C=f.Matrix3.getColumn(u,1,B),m=f.Matrix3.getColumn(u,2,P),c=g.Cartesian3.magnitude(s),d=g.Cartesian3.magnitude(C),n=g.Cartesian3.magnitude(m),u=Math.min(c,d,n);return(0!==c||0!==d&&0!==n)&&(0!==d||0!==n)&&(u!==d&&u!==n||(a=s),u===c?a=C:u===n&&(i=C),u!==c&&u!==d||(i=m),g.Cartesian3.normalize(a,e),g.Cartesian3.normalize(i,r),g.Cartesian3.clone(o.center,t),!0)},e.createProjectPointsTo2DFunction=function(r,a,i){return function(n){for(var t=new Array(n.length),e=0;e<n.length;e++)t[e]=o(n[e],r,a,i);return t}},e.createProjectPointTo2DFunction=function(e,r,a){return function(n,t){return o(n,e,r,a,t)}},n.CoplanarPolygonGeometryLibrary=e}); diff --git a/public/lib/Cesium/Workers/CorridorGeometryLibrary-c6e83d15.js b/public/lib/Cesium/Workers/CorridorGeometryLibrary-c6e83d15.js new file mode 100644 index 0000000..bb0bd8b --- /dev/null +++ b/public/lib/Cesium/Workers/CorridorGeometryLibrary-c6e83d15.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./PolylineVolumeGeometryLibrary-ec280c2f","./when-ca391574","./Math-b53708b3","./Transforms-5295b227","./PolylinePipeline-00f5e064"],function(a,O,R,s,V,u,Q){"use strict";var e={},U=new O.Cartesian3,d=new O.Cartesian3,p=new O.Cartesian3,m=new O.Cartesian3,G=[new O.Cartesian3,new O.Cartesian3],I=new O.Cartesian3,q=new O.Cartesian3,j=new O.Cartesian3,k=new O.Cartesian3,F=new O.Cartesian3,H=new O.Cartesian3,J=new O.Cartesian3,K=new O.Cartesian3,W=new O.Cartesian3,X=new O.Cartesian3,c=new u.Quaternion,g=new u.Matrix3;function Y(a,e,r,n,t){var i=O.Cartesian3.angleBetween(O.Cartesian3.subtract(e,a,U),O.Cartesian3.subtract(r,a,d)),s=n===R.CornerType.BEVELED?1:Math.ceil(i/V.CesiumMath.toRadians(5))+1,n=3*s,o=new Array(n);o[n-3]=r.x,o[n-2]=r.y,o[n-1]=r.z;var C=t?u.Matrix3.fromQuaternion(u.Quaternion.fromAxisAngle(O.Cartesian3.negate(a,U),i/s,c),g):u.Matrix3.fromQuaternion(u.Quaternion.fromAxisAngle(a,i/s,c),g),l=0;e=O.Cartesian3.clone(e,U);for(var y=0;y<s;y++)e=u.Matrix3.multiplyByVector(C,e,e),o[l++]=e.x,o[l++]=e.y,o[l++]=e.z;return o}function Z(a,e,r,n){var t=U;return[(t=(n||(e=O.Cartesian3.negate(e,e)),O.Cartesian3.add(a,e,t))).x,t.y,t.z,r.x,r.y,r.z]}function $(a,e,r,n){for(var t=new Array(a.length),i=new Array(a.length),s=O.Cartesian3.multiplyByScalar(e,r,U),o=O.Cartesian3.negate(s,d),C=0,l=a.length-1,y=0;y<a.length;y+=3){var u=O.Cartesian3.fromArray(a,y,p),c=O.Cartesian3.add(u,o,m);t[C++]=c.x,t[C++]=c.y,t[C++]=c.z;u=O.Cartesian3.add(u,s,m);i[l--]=u.z,i[l--]=u.y,i[l--]=u.x}return n.push(t,i),n}e.addAttribute=function(a,e,r,n){var t=e.x,i=e.y,e=e.z;s.defined(r)&&(a[r]=t,a[r+1]=i,a[r+2]=e),s.defined(n)&&(a[n]=e,a[n-1]=i,a[n-2]=t)};var _=new O.Cartesian3,aa=new O.Cartesian3;e.computePositions=function(a){var e=a.granularity,r=a.positions,n=a.ellipsoid,t=a.width/2,i=a.cornerType,s=a.saveAttributes,o=I,C=q,l=j,y=k,u=F,c=H,d=J,p=K,m=W,g=X,h=[],f=s?[]:void 0,w=s?[]:void 0,z=r[0],x=r[1],C=O.Cartesian3.normalize(O.Cartesian3.subtract(x,z,C),C),o=n.geodeticSurfaceNormal(z,o),y=O.Cartesian3.normalize(O.Cartesian3.cross(o,C,y),y);s&&(f.push(y.x,y.y,y.z),w.push(o.x,o.y,o.z));for(var P,A,B,b,v,E,S,d=O.Cartesian3.clone(z,d),z=x,l=O.Cartesian3.negate(C,l),D=[],M=r.length,T=1;T<M-1;T++){o=n.geodeticSurfaceNormal(z,o),x=r[T+1],C=O.Cartesian3.normalize(O.Cartesian3.subtract(x,z,C),C),u=O.Cartesian3.normalize(O.Cartesian3.add(C,l,u),u);var N=O.Cartesian3.multiplyByScalar(o,O.Cartesian3.dot(C,o),_);O.Cartesian3.subtract(C,N,N),O.Cartesian3.normalize(N,N);var L=O.Cartesian3.multiplyByScalar(o,O.Cartesian3.dot(l,o),aa);O.Cartesian3.subtract(l,L,L),O.Cartesian3.normalize(L,L),V.CesiumMath.equalsEpsilon(Math.abs(O.Cartesian3.dot(N,L)),1,V.CesiumMath.EPSILON7)||(u=O.Cartesian3.cross(u,o,u),u=O.Cartesian3.cross(o,u,u),u=O.Cartesian3.normalize(u,u),N=t/Math.max(.25,O.Cartesian3.magnitude(O.Cartesian3.cross(u,l,U))),L=R.PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(C,l,z,n),u=O.Cartesian3.multiplyByScalar(u,N,u),L?(p=O.Cartesian3.add(z,u,p),g=O.Cartesian3.add(p,O.Cartesian3.multiplyByScalar(y,t,g),g),m=O.Cartesian3.add(p,O.Cartesian3.multiplyByScalar(y,2*t,m),m),G[0]=O.Cartesian3.clone(d,G[0]),G[1]=O.Cartesian3.clone(g,G[1]),h=$(Q.PolylinePipeline.generateArc({positions:G,granularity:e,ellipsoid:n}),y,t,h),s&&(f.push(y.x,y.y,y.z),w.push(o.x,o.y,o.z)),c=O.Cartesian3.clone(m,c),y=O.Cartesian3.normalize(O.Cartesian3.cross(o,C,y),y),m=O.Cartesian3.add(p,O.Cartesian3.multiplyByScalar(y,2*t,m),m),d=O.Cartesian3.add(p,O.Cartesian3.multiplyByScalar(y,t,d),d),i===R.CornerType.ROUNDED||i===R.CornerType.BEVELED?D.push({leftPositions:Y(p,c,m,i,L)}):D.push({leftPositions:Z(z,O.Cartesian3.negate(u,u),m,L)})):(m=O.Cartesian3.add(z,u,m),g=O.Cartesian3.add(m,O.Cartesian3.negate(O.Cartesian3.multiplyByScalar(y,t,g),g),g),p=O.Cartesian3.add(m,O.Cartesian3.negate(O.Cartesian3.multiplyByScalar(y,2*t,p),p),p),G[0]=O.Cartesian3.clone(d,G[0]),G[1]=O.Cartesian3.clone(g,G[1]),h=$(Q.PolylinePipeline.generateArc({positions:G,granularity:e,ellipsoid:n}),y,t,h),s&&(f.push(y.x,y.y,y.z),w.push(o.x,o.y,o.z)),c=O.Cartesian3.clone(p,c),y=O.Cartesian3.normalize(O.Cartesian3.cross(o,C,y),y),p=O.Cartesian3.add(m,O.Cartesian3.negate(O.Cartesian3.multiplyByScalar(y,2*t,p),p),p),d=O.Cartesian3.add(m,O.Cartesian3.negate(O.Cartesian3.multiplyByScalar(y,t,d),d),d),i===R.CornerType.ROUNDED||i===R.CornerType.BEVELED?D.push({rightPositions:Y(m,c,p,i,L)}):D.push({rightPositions:Z(z,u,p,L)})),l=O.Cartesian3.negate(C,l)),z=x}return o=n.geodeticSurfaceNormal(z,o),G[0]=O.Cartesian3.clone(d,G[0]),G[1]=O.Cartesian3.clone(z,G[1]),h=$(Q.PolylinePipeline.generateArc({positions:G,granularity:e,ellipsoid:n}),y,t,h),s&&(f.push(y.x,y.y,y.z),w.push(o.x,o.y,o.z)),i===R.CornerType.ROUNDED&&(A=I,B=q,b=j,v=(P=h)[1],B=O.Cartesian3.fromArray(P[1],v.length-3,B),b=O.Cartesian3.fromArray(P[0],0,b),E=Y(A=O.Cartesian3.midpoint(B,b,A),B,b,R.CornerType.ROUNDED,!1),S=P.length-1,a=P[S-1],v=P[S],B=O.Cartesian3.fromArray(a,a.length-3,B),b=O.Cartesian3.fromArray(v,0,b),b=[E,Y(A=O.Cartesian3.midpoint(B,b,A),B,b,R.CornerType.ROUNDED,!1)]),{positions:h,corners:D,lefts:f,normals:w,endPositions:b}},a.CorridorGeometryLibrary=e}); diff --git a/public/lib/Cesium/Workers/CylinderGeometry-8d01e756.js b/public/lib/Cesium/Workers/CylinderGeometry-8d01e756.js new file mode 100644 index 0000000..854e27e --- /dev/null +++ b/public/lib/Cesium/Workers/CylinderGeometry-8d01e756.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./ComponentDatatype-8f71e605","./CylinderGeometryLibrary-b260e92f","./when-ca391574","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./VertexFormat-63b3c6da"],function(t,P,k,M,z,E,N,e,I,U,S,B,m){"use strict";var Y=new M.Cartesian2,Z=new M.Cartesian3,J=new M.Cartesian3,W=new M.Cartesian3,j=new M.Cartesian3;function u(t){var e=(t=N.defaultValue(t,N.defaultValue.EMPTY_OBJECT)).length,a=t.topRadius,r=t.bottomRadius,n=N.defaultValue(t.vertexFormat,m.VertexFormat.DEFAULT),o=N.defaultValue(t.slices,128);this._length=e,this._topRadius=a,this._bottomRadius=r,this._vertexFormat=m.VertexFormat.clone(n),this._slices=o,this._offsetAttribute=t.offsetAttribute,this._workerName="createCylinderGeometry"}u.packedLength=m.VertexFormat.packedLength+5,u.pack=function(t,e,a){return a=N.defaultValue(a,0),m.VertexFormat.pack(t._vertexFormat,e,a),a+=m.VertexFormat.packedLength,e[a++]=t._length,e[a++]=t._topRadius,e[a++]=t._bottomRadius,e[a++]=t._slices,e[a]=N.defaultValue(t._offsetAttribute,-1),e};var a,f=new m.VertexFormat,p={vertexFormat:f,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};u.unpack=function(t,e,a){e=N.defaultValue(e,0);var r=m.VertexFormat.unpack(t,e,f);e+=m.VertexFormat.packedLength;var n=t[e++],o=t[e++],i=t[e++],s=t[e++],e=t[e];return N.defined(a)?(a._vertexFormat=m.VertexFormat.clone(r,a._vertexFormat),a._length=n,a._topRadius=o,a._bottomRadius=i,a._slices=s,a._offsetAttribute=-1===e?void 0:e,a):(p.length=n,p.topRadius=o,p.bottomRadius=i,p.slices=s,p.offsetAttribute=-1===e?void 0:e,new u(p))},u.createGeometry=function(t){var e=t._length,a=t._topRadius,r=t._bottomRadius,n=t._vertexFormat,o=t._slices;if(!(e<=0||a<0||r<0||0===a&&0===r)){var i=o+o,s=o+i,m=i+i,u=E.CylinderGeometryLibrary.computePositions(e,a,r,o,!0),f=n.st?new Float32Array(2*m):void 0,p=n.normal?new Float32Array(3*m):void 0,y=n.tangent?new Float32Array(3*m):void 0,d=n.bitangent?new Float32Array(3*m):void 0,l=n.normal||n.tangent||n.bitangent;if(l){var b=n.tangent||n.bitangent,c=0,v=0,A=0,g=Math.atan2(r-a,e),h=Z;h.z=Math.sin(g);for(var x=Math.cos(g),_=W,C=J,F=0;F<o;F++){var w=F/o*B.CesiumMath.TWO_PI,G=x*Math.cos(w),w=x*Math.sin(w);l&&(h.x=G,h.y=w,b&&(_=M.Cartesian3.normalize(M.Cartesian3.cross(M.Cartesian3.UNIT_Z,h,_),_)),n.normal&&(p[c++]=h.x,p[c++]=h.y,p[c++]=h.z,p[c++]=h.x,p[c++]=h.y,p[c++]=h.z),n.tangent&&(y[v++]=_.x,y[v++]=_.y,y[v++]=_.z,y[v++]=_.x,y[v++]=_.y,y[v++]=_.z),n.bitangent&&(C=M.Cartesian3.normalize(M.Cartesian3.cross(h,_,C),C),d[A++]=C.x,d[A++]=C.y,d[A++]=C.z,d[A++]=C.x,d[A++]=C.y,d[A++]=C.z))}for(F=0;F<o;F++)n.normal&&(p[c++]=0,p[c++]=0,p[c++]=-1),n.tangent&&(y[v++]=1,y[v++]=0,y[v++]=0),n.bitangent&&(d[A++]=0,d[A++]=-1,d[A++]=0);for(F=0;F<o;F++)n.normal&&(p[c++]=0,p[c++]=0,p[c++]=1),n.tangent&&(y[v++]=1,y[v++]=0,y[v++]=0),n.bitangent&&(d[A++]=0,d[A++]=1,d[A++]=0)}var g=12*o-12,D=S.IndexDatatype.createTypedArray(m,g),R=0,V=0;for(F=0;F<o-1;F++)D[R++]=V,D[R++]=V+2,D[R++]=V+3,D[R++]=V,D[R++]=V+3,D[R++]=V+1,V+=2;for(D[R++]=i-2,D[R++]=0,D[R++]=1,D[R++]=i-2,D[R++]=1,D[R++]=i-1,F=1;F<o-1;F++)D[R++]=i+F+1,D[R++]=i+F,D[R++]=i;for(F=1;F<o-1;F++)D[R++]=s,D[R++]=s+F,D[R++]=s+F+1;var T=0;if(n.st){var O=Math.max(a,r);for(F=0;F<m;F++){var L=M.Cartesian3.fromArray(u,3*F,j);f[T++]=(L.x+O)/(2*O),f[T++]=(L.y+O)/(2*O)}}g=new U.GeometryAttributes;n.position&&(g.position=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u})),n.normal&&(g.normal=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:p})),n.tangent&&(g.tangent=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:y})),n.bitangent&&(g.bitangent=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:d})),n.st&&(g.st=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:f})),Y.x=.5*e,Y.y=Math.max(r,a);r=new k.BoundingSphere(M.Cartesian3.ZERO,M.Cartesian2.magnitude(Y));return N.defined(t._offsetAttribute)&&(e=u.length,a=new Uint8Array(e/3),e=t._offsetAttribute===P.GeometryOffsetAttribute.NONE?0:1,P.arrayFill(a,e),g.applyOffset=new I.GeometryAttribute({componentDatatype:z.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:a})),new I.Geometry({attributes:g,indices:D,primitiveType:I.PrimitiveType.TRIANGLES,boundingSphere:r,offsetAttribute:t._offsetAttribute})}},u.getUnitCylinder=function(){return a=!N.defined(a)?u.createGeometry(new u({topRadius:1,bottomRadius:1,length:1,vertexFormat:m.VertexFormat.POSITION_ONLY})):a},t.CylinderGeometry=u}); diff --git a/public/lib/Cesium/Workers/CylinderGeometryLibrary-b260e92f.js b/public/lib/Cesium/Workers/CylinderGeometryLibrary-b260e92f.js new file mode 100644 index 0000000..cc7da13 --- /dev/null +++ b/public/lib/Cesium/Workers/CylinderGeometryLibrary-b260e92f.js @@ -0,0 +1 @@ +define(["exports","./Math-b53708b3"],function(r,d){"use strict";var t={computePositions:function(r,t,e,a,i){for(var n=.5*r,o=-n,r=a+a,s=new Float64Array(3*(i?2*r:r)),u=0,c=0,f=i?3*r:0,h=i?3*(r+a):3*a,y=0;y<a;y++){var M=y/a*d.CesiumMath.TWO_PI,b=Math.cos(M),m=Math.sin(M),v=b*e,M=m*e,b=b*t,m=m*t;s[c+f]=v,s[c+f+1]=M,s[c+f+2]=o,s[c+h]=b,s[c+h+1]=m,s[c+h+2]=n,c+=3,i&&(s[u++]=v,s[u++]=M,s[u++]=o,s[u++]=b,s[u++]=m,s[u++]=n)}return s}};r.CylinderGeometryLibrary=t}); diff --git a/public/lib/Cesium/Workers/EllipseGeometry-be7f8268.js b/public/lib/Cesium/Workers/EllipseGeometry-be7f8268.js new file mode 100644 index 0000000..c875516 --- /dev/null +++ b/public/lib/Cesium/Workers/EllipseGeometry-be7f8268.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./when-ca391574","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./VertexFormat-63b3c6da"],function(t,L,R,j,e,k,z,B,Y,H,m,p,y,c,d){"use strict";var U=new j.Cartesian3,Q=new j.Cartesian3,W=new j.Cartesian3,S=new j.Cartesian3,J=new j.Cartesian2,q=new R.Matrix3,Z=new R.Matrix3,K=new R.Quaternion,X=new j.Cartesian3,$=new j.Cartesian3,tt=new j.Cartesian3,et=new j.Cartographic,rt=new j.Cartesian3,at=new j.Cartesian2,it=new j.Cartesian2;function f(t,e,r){var a=e.vertexFormat,i=e.center,n=e.semiMajorAxis,o=e.semiMinorAxis,s=e.ellipsoid,u=e.stRotation,l=r?t.length/3*2:t.length/3,m=e.shadowVolume,p=a.st?new Float32Array(2*l):void 0,y=a.normal?new Float32Array(3*l):void 0,c=a.tangent?new Float32Array(3*l):void 0,d=a.bitangent?new Float32Array(3*l):void 0,f=m?new Float32Array(3*l):void 0,A=0,h=X,x=$,g=tt,_=new R.GeographicProjection(s),b=_.project(s.cartesianToCartographic(i,et),rt),i=s.scaleToGeodeticSurface(i,U);s.geodeticSurfaceNormal(i,i);var C=q,v=Z;v=0!==u?(S=R.Quaternion.fromAxisAngle(i,u,K),C=R.Matrix3.fromQuaternion(S,C),S=R.Quaternion.fromAxisAngle(i,-u,K),R.Matrix3.fromQuaternion(S,v)):(C=R.Matrix3.clone(R.Matrix3.IDENTITY,C),R.Matrix3.clone(R.Matrix3.IDENTITY,v));for(var w=j.Cartesian2.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,at),M=j.Cartesian2.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,it),E=t.length,I=r?E:0,T=I/3*2,G=0;G<E;G+=3){var N,P=G+1,F=G+2,V=j.Cartesian3.fromArray(t,G,U);a.st&&(N=R.Matrix3.multiplyByVector(C,V,Q),N=_.project(s.cartesianToCartographic(N,et),W),j.Cartesian3.subtract(N,b,N),J.x=(N.x+n)/(2*n),J.y=(N.y+o)/(2*o),w.x=Math.min(J.x,w.x),w.y=Math.min(J.y,w.y),M.x=Math.max(J.x,M.x),M.y=Math.max(J.y,M.y),r&&(p[A+T]=J.x,p[A+1+T]=J.y),p[A++]=J.x,p[A++]=J.y),(a.normal||a.tangent||a.bitangent||m)&&(h=s.geodeticSurfaceNormal(V,h),m&&(f[G+I]=-h.x,f[P+I]=-h.y,f[F+I]=-h.z),(a.normal||a.tangent||a.bitangent)&&((a.tangent||a.bitangent)&&(x=j.Cartesian3.normalize(j.Cartesian3.cross(j.Cartesian3.UNIT_Z,h,x),x),R.Matrix3.multiplyByVector(v,x,x)),a.normal&&(y[G]=h.x,y[P]=h.y,y[F]=h.z,r&&(y[G+I]=-h.x,y[P+I]=-h.y,y[F+I]=-h.z)),a.tangent&&(c[G]=x.x,c[P]=x.y,c[F]=x.z,r&&(c[G+I]=-x.x,c[P+I]=-x.y,c[F+I]=-x.z)),a.bitangent&&(g=j.Cartesian3.normalize(j.Cartesian3.cross(h,x,g),g),d[G]=g.x,d[P]=g.y,d[F]=g.z,r&&(d[G+I]=g.x,d[P+I]=g.y,d[F+I]=g.z))))}if(a.st)for(var E=p.length,D=0;D<E;D+=2)p[D]=(p[D]-w.x)/(M.x-w.x),p[D+1]=(p[D+1]-w.y)/(M.y-w.y);var O,S=new H.GeometryAttributes;return a.position&&(O=B.EllipseGeometryLibrary.raisePositionsToHeight(t,e,r),S.position=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:O})),a.st&&(S.st=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:p})),a.normal&&(S.normal=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:y})),a.tangent&&(S.tangent=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:c})),a.bitangent&&(S.bitangent=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:d})),m&&(S.extrudeDirection=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:f})),r&&z.defined(e.offsetAttribute)&&(O=new Uint8Array(l),O=e.offsetAttribute===L.GeometryOffsetAttribute.TOP?L.arrayFill(O,1,0,l/2):(e=e.offsetAttribute===L.GeometryOffsetAttribute.NONE?0:1,L.arrayFill(O,e)),S.applyOffset=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:O})),S}function A(t){for(var e,r,a=new Array(t*(t+1)*12-6),i=0,n=0,o=1,s=0;s<3;s++)a[i++]=o++,a[i++]=n,a[i++]=o;for(s=2;s<t+1;++s){for(o=s*(s+1)-1,n=(s-1)*s-1,a[i++]=o++,a[i++]=n,a[i++]=o,e=2*s,r=0;r<e-1;++r)a[i++]=o,a[i++]=n++,a[i++]=n,a[i++]=o++,a[i++]=n,a[i++]=o;a[i++]=o++,a[i++]=n,a[i++]=o}for(e=2*t,++o,++n,s=0;s<e-1;++s)a[i++]=o,a[i++]=n++,a[i++]=n,a[i++]=o++,a[i++]=n,a[i++]=o;for(a[i++]=o,a[i++]=n++,a[i++]=n,a[i++]=o++,a[i++]=n++,a[i++]=n,++n,s=t-1;1<s;--s){for(a[i++]=n++,a[i++]=n,a[i++]=o,e=2*s,r=0;r<e-1;++r)a[i++]=o,a[i++]=n++,a[i++]=n,a[i++]=o++,a[i++]=n,a[i++]=o;a[i++]=n++,a[i++]=n++,a[i++]=o++}for(s=0;s<3;s++)a[i++]=n++,a[i++]=n,a[i++]=o;return a}var n=new j.Cartesian3;var h=new R.BoundingSphere,x=new R.BoundingSphere;function o(t){var e=t.center,r=t.ellipsoid,a=t.semiMajorAxis,i=j.Cartesian3.multiplyByScalar(r.geodeticSurfaceNormal(e,U),t.height,U);h.center=j.Cartesian3.add(e,i,h.center),h.radius=a,i=j.Cartesian3.multiplyByScalar(r.geodeticSurfaceNormal(e,i),t.extrudedHeight,i),x.center=j.Cartesian3.add(e,i,x.center),x.radius=a;var n=B.EllipseGeometryLibrary.computeEllipsePositions(t,!0,!0),r=n.positions,e=n.numPts,i=n.outerPositions,a=R.BoundingSphere.union(h,x),n=f(r,t,!0),o=(l=A(e)).length;l.length=2*o;for(var s=r.length/3,u=0;u<o;u+=3)l[u+o]=l[u+2]+s,l[u+1+o]=l[u+1]+s,l[u+2+o]=l[u]+s;var r=y.IndexDatatype.createTypedArray(2*s/3,l),r=new Y.Geometry({attributes:n,indices:r,primitiveType:Y.PrimitiveType.TRIANGLES}),t=function(t,e){var r=e.vertexFormat,a=e.center,i=e.semiMajorAxis,n=e.semiMinorAxis,o=e.ellipsoid,s=e.height,u=e.extrudedHeight,l=e.stRotation,m=t.length/3*2,p=new Float64Array(3*m),y=r.st?new Float32Array(2*m):void 0,c=r.normal?new Float32Array(3*m):void 0,d=r.tangent?new Float32Array(3*m):void 0,f=r.bitangent?new Float32Array(3*m):void 0,A=e.shadowVolume,h=A?new Float32Array(3*m):void 0,x=0,g=X,_=$,b=tt,C=new R.GeographicProjection(o),v=C.project(o.cartesianToCartographic(a,et),rt),a=o.scaleToGeodeticSurface(a,U);o.geodeticSurfaceNormal(a,a);for(var a=R.Quaternion.fromAxisAngle(a,l,K),w=R.Matrix3.fromQuaternion(a,q),M=j.Cartesian2.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,at),E=j.Cartesian2.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,it),I=(D=t.length)/3*2,T=0;T<D;T+=3){var G=T+1,N=T+2,P=j.Cartesian3.fromArray(t,T,U);r.st&&(V=R.Matrix3.multiplyByVector(w,P,Q),F=C.project(o.cartesianToCartographic(V,et),W),j.Cartesian3.subtract(F,v,F),J.x=(F.x+i)/(2*i),J.y=(F.y+n)/(2*n),M.x=Math.min(J.x,M.x),M.y=Math.min(J.y,M.y),E.x=Math.max(J.x,E.x),E.y=Math.max(J.y,E.y),y[x+I]=J.x,y[x+1+I]=J.y,y[x++]=J.x,y[x++]=J.y),P=o.scaleToGeodeticSurface(P,P),V=j.Cartesian3.clone(P,Q),g=o.geodeticSurfaceNormal(P,g),A&&(h[T+D]=-g.x,h[G+D]=-g.y,h[N+D]=-g.z);var F=j.Cartesian3.multiplyByScalar(g,s,S),P=j.Cartesian3.add(P,F,P),F=j.Cartesian3.multiplyByScalar(g,u,F),V=j.Cartesian3.add(V,F,V);r.position&&(p[T+D]=V.x,p[G+D]=V.y,p[N+D]=V.z,p[T]=P.x,p[G]=P.y,p[N]=P.z),(r.normal||r.tangent||r.bitangent)&&(b=j.Cartesian3.clone(g,b),F=j.Cartesian3.fromArray(t,(T+3)%D,S),j.Cartesian3.subtract(F,P,F),P=j.Cartesian3.subtract(V,P,W),g=j.Cartesian3.normalize(j.Cartesian3.cross(P,F,g),g),r.normal&&(c[T]=g.x,c[G]=g.y,c[N]=g.z,c[T+D]=g.x,c[G+D]=g.y,c[N+D]=g.z),r.tangent&&(_=j.Cartesian3.normalize(j.Cartesian3.cross(b,g,_),_),d[T]=_.x,d[G]=_.y,d[N]=_.z,d[T+D]=_.x,d[T+1+D]=_.y,d[T+2+D]=_.z),r.bitangent&&(f[T]=b.x,f[G]=b.y,f[N]=b.z,f[T+D]=b.x,f[G+D]=b.y,f[N+D]=b.z))}if(r.st)for(var D=y.length,O=0;O<D;O+=2)y[O]=(y[O]-M.x)/(E.x-M.x),y[O+1]=(y[O+1]-M.y)/(E.y-M.y);return l=new H.GeometryAttributes,r.position&&(l.position=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:p})),r.st&&(l.st=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:y})),r.normal&&(l.normal=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:c})),r.tangent&&(l.tangent=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:d})),r.bitangent&&(l.bitangent=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:f})),A&&(l.extrudeDirection=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:h})),z.defined(e.offsetAttribute)&&(a=new Uint8Array(m),a=e.offsetAttribute===L.GeometryOffsetAttribute.TOP?L.arrayFill(a,1,0,m/2):(e=e.offsetAttribute===L.GeometryOffsetAttribute.NONE?0:1,L.arrayFill(a,e)),l.applyOffset=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:a})),l}(i,t),l=function(t){for(var e=t.length/3,r=y.IndexDatatype.createTypedArray(e,6*e),a=0,i=0;i<e;i++){var n=i+e,o=(i+1)%e,s=o+e;r[a++]=i,r[a++]=n,r[a++]=o,r[a++]=o,r[a++]=n,r[a++]=s}return r}(i),i=y.IndexDatatype.createTypedArray(2*i.length/3,l),i=new Y.Geometry({attributes:t,indices:i,primitiveType:Y.PrimitiveType.TRIANGLES}),i=p.GeometryPipeline.combineInstances([new m.GeometryInstance({geometry:r}),new m.GeometryInstance({geometry:i})]);return{boundingSphere:a,attributes:i[0].attributes,indices:i[0].indices}}function s(t,e,r,a,i,n,o){for(var s=B.EllipseGeometryLibrary.computeEllipsePositions({center:t,semiMajorAxis:e,semiMinorAxis:r,rotation:a,granularity:i},!1,!0).outerPositions,u=s.length/3,l=new Array(u),m=0;m<u;++m)l[m]=j.Cartesian3.fromArray(s,3*m);o=j.Rectangle.fromCartesianArray(l,n,o);return o.width>c.CesiumMath.PI&&(o.north=0<o.north?c.CesiumMath.PI_OVER_TWO-c.CesiumMath.EPSILON7:o.north,o.south=o.south<0?c.CesiumMath.EPSILON7-c.CesiumMath.PI_OVER_TWO:o.south,o.east=c.CesiumMath.PI,o.west=-c.CesiumMath.PI),o}function g(t){var e=(t=z.defaultValue(t,z.defaultValue.EMPTY_OBJECT)).center,r=z.defaultValue(t.ellipsoid,j.Ellipsoid.WGS84),a=t.semiMajorAxis,i=t.semiMinorAxis,n=z.defaultValue(t.granularity,c.CesiumMath.RADIANS_PER_DEGREE),o=z.defaultValue(t.vertexFormat,d.VertexFormat.DEFAULT),s=z.defaultValue(t.height,0),u=z.defaultValue(t.extrudedHeight,s);this._center=j.Cartesian3.clone(e),this._semiMajorAxis=a,this._semiMinorAxis=i,this._ellipsoid=j.Ellipsoid.clone(r),this._rotation=z.defaultValue(t.rotation,0),this._stRotation=z.defaultValue(t.stRotation,0),this._height=Math.max(u,s),this._granularity=n,this._vertexFormat=d.VertexFormat.clone(o),this._extrudedHeight=Math.min(u,s),this._shadowVolume=z.defaultValue(t.shadowVolume,!1),this._workerName="createEllipseGeometry",this._offsetAttribute=t.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}g.packedLength=j.Cartesian3.packedLength+j.Ellipsoid.packedLength+d.VertexFormat.packedLength+9,g.pack=function(t,e,r){return r=z.defaultValue(r,0),j.Cartesian3.pack(t._center,e,r),r+=j.Cartesian3.packedLength,j.Ellipsoid.pack(t._ellipsoid,e,r),r+=j.Ellipsoid.packedLength,d.VertexFormat.pack(t._vertexFormat,e,r),r+=d.VertexFormat.packedLength,e[r++]=t._semiMajorAxis,e[r++]=t._semiMinorAxis,e[r++]=t._rotation,e[r++]=t._stRotation,e[r++]=t._height,e[r++]=t._granularity,e[r++]=t._extrudedHeight,e[r++]=t._shadowVolume?1:0,e[r]=z.defaultValue(t._offsetAttribute,-1),e};var _=new j.Cartesian3,b=new j.Ellipsoid,C=new d.VertexFormat,v={center:_,ellipsoid:b,vertexFormat:C,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};g.unpack=function(t,e,r){e=z.defaultValue(e,0);var a=j.Cartesian3.unpack(t,e,_);e+=j.Cartesian3.packedLength;var i=j.Ellipsoid.unpack(t,e,b);e+=j.Ellipsoid.packedLength;var n=d.VertexFormat.unpack(t,e,C);e+=d.VertexFormat.packedLength;var o=t[e++],s=t[e++],u=t[e++],l=t[e++],m=t[e++],p=t[e++],y=t[e++],c=1===t[e++],e=t[e];return z.defined(r)?(r._center=j.Cartesian3.clone(a,r._center),r._ellipsoid=j.Ellipsoid.clone(i,r._ellipsoid),r._vertexFormat=d.VertexFormat.clone(n,r._vertexFormat),r._semiMajorAxis=o,r._semiMinorAxis=s,r._rotation=u,r._stRotation=l,r._height=m,r._granularity=p,r._extrudedHeight=y,r._shadowVolume=c,r._offsetAttribute=-1===e?void 0:e,r):(v.height=m,v.extrudedHeight=y,v.granularity=p,v.stRotation=l,v.rotation=u,v.semiMajorAxis=o,v.semiMinorAxis=s,v.shadowVolume=c,v.offsetAttribute=-1===e?void 0:e,new g(v))},g.computeRectangle=function(t,e){var r=(t=z.defaultValue(t,z.defaultValue.EMPTY_OBJECT)).center,a=z.defaultValue(t.ellipsoid,j.Ellipsoid.WGS84),i=t.semiMajorAxis,n=t.semiMinorAxis,o=z.defaultValue(t.granularity,c.CesiumMath.RADIANS_PER_DEGREE);return s(r,i,n,z.defaultValue(t.rotation,0),o,a,e)},g.createGeometry=function(t){if(!(t._semiMajorAxis<=0||t._semiMinorAxis<=0)){var e=t._height,r=t._extrudedHeight,a=!c.CesiumMath.equalsEpsilon(e,r,0,c.CesiumMath.EPSILON2);t._center=t._ellipsoid.scaleToGeodeticSurface(t._center,t._center);var i,e={center:t._center,semiMajorAxis:t._semiMajorAxis,semiMinorAxis:t._semiMinorAxis,ellipsoid:t._ellipsoid,rotation:t._rotation,height:e,granularity:t._granularity,vertexFormat:t._vertexFormat,stRotation:t._stRotation};return a?(e.extrudedHeight=r,e.shadowVolume=t._shadowVolume,e.offsetAttribute=t._offsetAttribute,i=o(e)):(i=function(t){var e=t.center;n=j.Cartesian3.multiplyByScalar(t.ellipsoid.geodeticSurfaceNormal(e,n),t.height,n),n=j.Cartesian3.add(e,n,n);var r=new R.BoundingSphere(n,t.semiMajorAxis),e=(a=B.EllipseGeometryLibrary.computeEllipsePositions(t,!0,!1)).positions,a=a.numPts,t=f(e,t,!1),a=A(a);return{boundingSphere:r,attributes:t,indices:a=y.IndexDatatype.createTypedArray(e.length/3,a)}}(e),z.defined(t._offsetAttribute)&&(r=i.attributes.position.values.length,e=new Uint8Array(r/3),r=t._offsetAttribute===L.GeometryOffsetAttribute.NONE?0:1,L.arrayFill(e,r),i.attributes.applyOffset=new Y.GeometryAttribute({componentDatatype:k.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:e}))),new Y.Geometry({attributes:i.attributes,indices:i.indices,primitiveType:Y.PrimitiveType.TRIANGLES,boundingSphere:i.boundingSphere,offsetAttribute:t._offsetAttribute})}},g.createShadowVolume=function(t,e,r){var a=t._granularity,i=t._ellipsoid,e=e(a,i),r=r(a,i);return new g({center:t._center,semiMajorAxis:t._semiMajorAxis,semiMinorAxis:t._semiMinorAxis,ellipsoid:i,rotation:t._rotation,stRotation:t._stRotation,granularity:a,extrudedHeight:e,height:r,vertexFormat:d.VertexFormat.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(g.prototype,{rectangle:{get:function(){return z.defined(this._rectangle)||(this._rectangle=s(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return z.defined(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(t){var e=-t._stRotation;if(0==e)return[0,0,0,1,1,0];for(var r=B.EllipseGeometryLibrary.computeEllipsePositions({center:t._center,semiMajorAxis:t._semiMajorAxis,semiMinorAxis:t._semiMinorAxis,rotation:t._rotation,granularity:t._granularity},!1,!0).outerPositions,a=r.length/3,i=new Array(a),n=0;n<a;++n)i[n]=j.Cartesian3.fromArray(r,3*n);var o=t._ellipsoid,t=t.rectangle;return Y.Geometry._textureCoordinateRotationPoints(i,e,o,t)}(this)),this._textureCoordinateRotationPoints}}}),t.EllipseGeometry=g}); diff --git a/public/lib/Cesium/Workers/EllipseGeometryLibrary-a5f59994.js b/public/lib/Cesium/Workers/EllipseGeometryLibrary-a5f59994.js new file mode 100644 index 0000000..d8c324d --- /dev/null +++ b/public/lib/Cesium/Workers/EllipseGeometryLibrary-a5f59994.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Math-b53708b3","./Transforms-5295b227"],function(a,E,V,y){"use strict";var e={},u=new E.Cartesian3,m=new E.Cartesian3,h=new y.Quaternion,c=new y.Matrix3;function A(a,e,r,t,i,n,s,o,l,C){e=a+e;E.Cartesian3.multiplyByScalar(t,Math.cos(e),u),E.Cartesian3.multiplyByScalar(r,Math.sin(e),m),E.Cartesian3.add(u,m,u);e=Math.cos(a);e*=e;a=Math.sin(a);a*=a;a=n/Math.sqrt(s*e+i*a)/o;return y.Quaternion.fromAxisAngle(u,a,h),y.Matrix3.fromQuaternion(h,c),y.Matrix3.multiplyByVector(c,l,C),E.Cartesian3.normalize(C,C),E.Cartesian3.multiplyByScalar(C,o,C),C}var R=new E.Cartesian3,W=new E.Cartesian3,S=new E.Cartesian3,M=new E.Cartesian3;e.raisePositionsToHeight=function(a,e,r){for(var t=e.ellipsoid,i=e.height,n=e.extrudedHeight,e=r?a.length/3*2:a.length/3,s=new Float64Array(3*e),o=a.length,l=r?o:0,C=0;C<o;C+=3){var y=C+1,u=C+2,m=E.Cartesian3.fromArray(a,C,R);t.scaleToGeodeticSurface(m,m);var h=E.Cartesian3.clone(m,W),c=t.geodeticSurfaceNormal(m,M),x=E.Cartesian3.multiplyByScalar(c,i,S);E.Cartesian3.add(m,x,m),r&&(E.Cartesian3.multiplyByScalar(c,n,x),E.Cartesian3.add(h,x,h),s[C+l]=h.x,s[y+l]=h.y,s[u+l]=h.z),s[C]=m.x,s[y]=m.y,s[u]=m.z}return s};var b=new E.Cartesian3,B=new E.Cartesian3,Q=new E.Cartesian3;e.computeEllipsePositions=function(a,e,r){var t=a.semiMinorAxis,i=a.semiMajorAxis,n=a.rotation,s=a.center,a=8*a.granularity,o=t*t,l=i*i,C=i*t,y=E.Cartesian3.magnitude(s),u=E.Cartesian3.normalize(s,b),m=E.Cartesian3.cross(E.Cartesian3.UNIT_Z,s,B),m=E.Cartesian3.normalize(m,m),h=E.Cartesian3.cross(u,m,Q),c=1+Math.ceil(V.CesiumMath.PI_OVER_TWO/a),x=V.CesiumMath.PI_OVER_TWO/(c-1),M=V.CesiumMath.PI_OVER_TWO-c*x;M<0&&(c-=Math.ceil(Math.abs(M)/x));var z,f,_,O,d,p=e?new Array(3*(c*(c+2)*2)):void 0,w=0,P=R,T=W,a=4*c*3,I=a-1,g=0,v=r?new Array(a):void 0,P=A(M=V.CesiumMath.PI_OVER_TWO,n,h,m,o,C,l,y,u,P);for(e&&(p[w++]=P.x,p[w++]=P.y,p[w++]=P.z),r&&(v[I--]=P.z,v[I--]=P.y,v[I--]=P.x),M=V.CesiumMath.PI_OVER_TWO-x,z=1;z<c+1;++z){if(P=A(M,n,h,m,o,C,l,y,u,P),T=A(Math.PI-M,n,h,m,o,C,l,y,u,T),e){for(p[w++]=P.x,p[w++]=P.y,p[w++]=P.z,_=2*z+2,f=1;f<_-1;++f)O=f/(_-1),d=E.Cartesian3.lerp(P,T,O,S),p[w++]=d.x,p[w++]=d.y,p[w++]=d.z;p[w++]=T.x,p[w++]=T.y,p[w++]=T.z}r&&(v[I--]=P.z,v[I--]=P.y,v[I--]=P.x,v[g++]=T.x,v[g++]=T.y,v[g++]=T.z),M=V.CesiumMath.PI_OVER_TWO-(z+1)*x}for(z=c;1<z;--z){if(P=A(-(M=V.CesiumMath.PI_OVER_TWO-(z-1)*x),n,h,m,o,C,l,y,u,P),T=A(M+Math.PI,n,h,m,o,C,l,y,u,T),e){for(p[w++]=P.x,p[w++]=P.y,p[w++]=P.z,_=2*(z-1)+2,f=1;f<_-1;++f)O=f/(_-1),d=E.Cartesian3.lerp(P,T,O,S),p[w++]=d.x,p[w++]=d.y,p[w++]=d.z;p[w++]=T.x,p[w++]=T.y,p[w++]=T.z}r&&(v[I--]=P.z,v[I--]=P.y,v[I--]=P.x,v[g++]=T.x,v[g++]=T.y,v[g++]=T.z)}P=A(-(M=V.CesiumMath.PI_OVER_TWO),n,h,m,o,C,l,y,u,P);a={};return e&&(p[w++]=P.x,p[w++]=P.y,p[w++]=P.z,a.positions=p,a.numPts=c),r&&(v[I--]=P.z,v[I--]=P.y,v[I--]=P.x,a.outerPositions=v),a},a.EllipseGeometryLibrary=e}); diff --git a/public/lib/Cesium/Workers/EllipseOutlineGeometry-1eb32452.js b/public/lib/Cesium/Workers/EllipseOutlineGeometry-1eb32452.js new file mode 100644 index 0000000..bac22c6 --- /dev/null +++ b/public/lib/Cesium/Workers/EllipseOutlineGeometry-1eb32452.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./ComponentDatatype-8f71e605","./when-ca391574","./Check-64f87f7d","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3"],function(e,f,c,m,h,y,t,b,A,_,g,x){"use strict";var E=new m.Cartesian3,s=new m.Cartesian3;var v=new c.BoundingSphere,M=new c.BoundingSphere;function C(e){var t=(e=y.defaultValue(e,y.defaultValue.EMPTY_OBJECT)).center,i=y.defaultValue(e.ellipsoid,m.Ellipsoid.WGS84),r=e.semiMajorAxis,a=e.semiMinorAxis,n=y.defaultValue(e.granularity,x.CesiumMath.RADIANS_PER_DEGREE),o=y.defaultValue(e.height,0),s=y.defaultValue(e.extrudedHeight,o);this._center=m.Cartesian3.clone(t),this._semiMajorAxis=r,this._semiMinorAxis=a,this._ellipsoid=m.Ellipsoid.clone(i),this._rotation=y.defaultValue(e.rotation,0),this._height=Math.max(s,o),this._granularity=n,this._extrudedHeight=Math.min(s,o),this._numberOfVerticalLines=Math.max(y.defaultValue(e.numberOfVerticalLines,16),0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}C.packedLength=m.Cartesian3.packedLength+m.Ellipsoid.packedLength+8,C.pack=function(e,t,i){return i=y.defaultValue(i,0),m.Cartesian3.pack(e._center,t,i),i+=m.Cartesian3.packedLength,m.Ellipsoid.pack(e._ellipsoid,t,i),i+=m.Ellipsoid.packedLength,t[i++]=e._semiMajorAxis,t[i++]=e._semiMinorAxis,t[i++]=e._rotation,t[i++]=e._height,t[i++]=e._granularity,t[i++]=e._extrudedHeight,t[i++]=e._numberOfVerticalLines,t[i]=y.defaultValue(e._offsetAttribute,-1),t};var G=new m.Cartesian3,L=new m.Ellipsoid,O={center:G,ellipsoid:L,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};C.unpack=function(e,t,i){t=y.defaultValue(t,0);var r=m.Cartesian3.unpack(e,t,G);t+=m.Cartesian3.packedLength;var a=m.Ellipsoid.unpack(e,t,L);t+=m.Ellipsoid.packedLength;var n=e[t++],o=e[t++],s=e[t++],u=e[t++],l=e[t++],d=e[t++],p=e[t++],t=e[t];return y.defined(i)?(i._center=m.Cartesian3.clone(r,i._center),i._ellipsoid=m.Ellipsoid.clone(a,i._ellipsoid),i._semiMajorAxis=n,i._semiMinorAxis=o,i._rotation=s,i._height=u,i._granularity=l,i._extrudedHeight=d,i._numberOfVerticalLines=p,i._offsetAttribute=-1===t?void 0:t,i):(O.height=u,O.extrudedHeight=d,O.granularity=l,O.rotation=s,O.semiMajorAxis=n,O.semiMinorAxis=o,O.numberOfVerticalLines=p,O.offsetAttribute=-1===t?void 0:t,new C(O))},C.createGeometry=function(e){if(!(e._semiMajorAxis<=0||e._semiMinorAxis<=0)){var t=e._height,i=e._extrudedHeight,r=!x.CesiumMath.equalsEpsilon(t,i,0,x.CesiumMath.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);var a,t={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,numberOfVerticalLines:e._numberOfVerticalLines};return r?(t.extrudedHeight=i,t.offsetAttribute=e._offsetAttribute,a=function(e){var t=e.center,i=e.ellipsoid,r=e.semiMajorAxis,a=m.Cartesian3.multiplyByScalar(i.geodeticSurfaceNormal(t,E),e.height,E);v.center=m.Cartesian3.add(t,a,v.center),v.radius=r,a=m.Cartesian3.multiplyByScalar(i.geodeticSurfaceNormal(t,a),e.extrudedHeight,a),M.center=m.Cartesian3.add(t,a,M.center),M.radius=r;var t=b.EllipseGeometryLibrary.computeEllipsePositions(e,!1,!0).outerPositions,t=(a=new _.GeometryAttributes({position:new A.GeometryAttribute({componentDatatype:h.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:b.EllipseGeometryLibrary.raisePositionsToHeight(t,e,!0)})})).position.values,r=c.BoundingSphere.union(v,M),n=t.length/3;y.defined(e.offsetAttribute)&&(o=new Uint8Array(n),o=e.offsetAttribute===f.GeometryOffsetAttribute.TOP?f.arrayFill(o,1,0,n/2):(t=e.offsetAttribute===f.GeometryOffsetAttribute.NONE?0:1,f.arrayFill(o,t)),a.applyOffset=new A.GeometryAttribute({componentDatatype:h.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:o}));var o=y.defaultValue(e.numberOfVerticalLines,16),o=x.CesiumMath.clamp(o,0,n/2),s=g.IndexDatatype.createTypedArray(n,2*n+2*o);n/=2;var u=0;for(p=0;p<n;++p)s[u++]=p,s[u++]=(p+1)%n,s[u++]=p+n,s[u++]=(p+1)%n+n;if(0<o)for(var e=Math.min(o,n),l=Math.round(n/e),d=Math.min(l*o,n),p=0;p<d;p+=l)s[u++]=p,s[u++]=p+n;return{boundingSphere:r,attributes:a,indices:s}}(t)):(a=function(e){var t=e.center;s=m.Cartesian3.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,s),e.height,s),s=m.Cartesian3.add(t,s,s);for(var i=new c.BoundingSphere(s,e.semiMajorAxis),t=b.EllipseGeometryLibrary.computeEllipsePositions(e,!1,!0).outerPositions,e=new _.GeometryAttributes({position:new A.GeometryAttribute({componentDatatype:h.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:b.EllipseGeometryLibrary.raisePositionsToHeight(t,e,!1)})}),r=t.length/3,a=g.IndexDatatype.createTypedArray(r,2*r),n=0,o=0;o<r;++o)a[n++]=o,a[n++]=(o+1)%r;return{boundingSphere:i,attributes:e,indices:a}}(t),y.defined(e._offsetAttribute)&&(i=a.attributes.position.values.length,t=new Uint8Array(i/3),i=e._offsetAttribute===f.GeometryOffsetAttribute.NONE?0:1,f.arrayFill(t,i),a.attributes.applyOffset=new A.GeometryAttribute({componentDatatype:h.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:t}))),new A.Geometry({attributes:a.attributes,indices:a.indices,primitiveType:A.PrimitiveType.LINES,boundingSphere:a.boundingSphere,offsetAttribute:e._offsetAttribute})}},e.EllipseOutlineGeometry=C}); diff --git a/public/lib/Cesium/Workers/EllipsoidGeodesic-bbea0b0a.js b/public/lib/Cesium/Workers/EllipsoidGeodesic-bbea0b0a.js new file mode 100644 index 0000000..d3683fb --- /dev/null +++ b/public/lib/Cesium/Workers/EllipsoidGeodesic-bbea0b0a.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(t,S,a,p,b){"use strict";function U(t,a,i,n,e,s,r){var h,i=(h=t)*(i=i)*(4+h*(4-3*i))/16;return(1-i)*t*a*(n+i*e*(r+i*s*(2*r*r-1)))}var q=new S.Cartesian3,w=new S.Cartesian3;function n(t,a,i,n){var e,s,r,h,o,d,u,c,M,l,g,_,p,f,m,v,C,H,O;S.Cartesian3.normalize(n.cartographicToCartesian(a,w),q),S.Cartesian3.normalize(n.cartographicToCartesian(i,w),w),function(t,a,i,n,e,s,r){var h=(a-i)/a,o=s-n,n=Math.atan((1-h)*Math.tan(e)),e=Math.atan((1-h)*Math.tan(r)),r=Math.cos(n),n=Math.sin(n),d=Math.cos(e),e=Math.sin(e),u=r*d,c=r*e,M=n*e,l=n*d,g=o,_=b.CesiumMath.TWO_PI,p=Math.cos(g),f=Math.sin(g);do{var m,v,C,H,O,p=Math.cos(g),f=Math.sin(g),S=c-l*p,_=g,q=(C=M+u*p)-2*M/(O=0===(v=Math.sqrt(d*d*f*f+S*S))?(m=0,1):1-(m=u*f/v)*m),g=o+U(h,m,O,H=Math.atan2(v,C),v,C,q=!isFinite(q)?0:q)}while(Math.abs(g-_)>b.CesiumMath.EPSILON12);n=i*(1+(e=O*(a*a-i*i)/(i*i))*(4096+e*(e*(320-175*e)-768))/16384)*(H-(n=e*(256+e*(e*(74-47*e)-128))/1024)*v*(q+n*(C*(2*(a=q*q)-1)-n*q*(4*v*v-3)*(4*a-3)/6)/4)),a=Math.atan2(d*f,c-l*p),r=Math.atan2(r*f,c*p-l),t._distance=n,t._startHeading=a,t._endHeading=r,t._uSquared=e}(t,n.maximumRadius,n.minimumRadius,a.longitude,a.latitude,i.longitude,i.latitude),t._start=S.Cartographic.clone(a,t._start),t._end=S.Cartographic.clone(i,t._end),t._start.height=0,t._end.height=0,s=(e=t)._uSquared,r=e._ellipsoid.maximumRadius,h=e._ellipsoid.minimumRadius,o=(r-h)/r,d=Math.cos(e._startHeading),u=Math.sin(e._startHeading),c=(1-o)*Math.tan(e._start.latitude),M=1/Math.sqrt(1+c*c),l=M*c,g=Math.atan2(c,d),f=1-(p=(_=M*u)*_),m=Math.sqrt(f),H=1-3*(v=s/4)+35*(C=v*v)/4,O=1-5*v,s=(i=1+v-3*C/4+5*(n=C*v)/4-175*(a=C*C)/64)*g-(t=1-v+15*C/8-35*n/8)*Math.sin(2*g)*v/2-H*Math.sin(4*g)*C/16-O*Math.sin(6*g)*n/48-5*Math.sin(8*g)*a/512,(e=e._constants).a=r,e.b=h,e.f=o,e.cosineHeading=d,e.sineHeading=u,e.tanU=c,e.cosineU=M,e.sineU=l,e.sigma=g,e.sineAlpha=_,e.sineSquaredAlpha=p,e.cosineSquaredAlpha=f,e.cosineAlpha=m,e.u2Over4=v,e.u4Over16=C,e.u6Over64=n,e.u8Over256=a,e.a0=i,e.a1=t,e.a2=H,e.a3=O,e.distanceRatio=s}function i(t,a,i){i=p.defaultValue(i,S.Ellipsoid.WGS84);this._ellipsoid=i,this._start=new S.Cartographic,this._end=new S.Cartographic,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,p.defined(t)&&p.defined(a)&&n(this,t,a,i)}Object.defineProperties(i.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}}),i.prototype.setEndPoints=function(t,a){n(this,t,a,this._ellipsoid)},i.prototype.interpolateUsingFraction=function(t,a){return this.interpolateUsingSurfaceDistance(this._distance*t,a)},i.prototype.interpolateUsingSurfaceDistance=function(t,a){var i=this._constants,n=i.distanceRatio+t/i.b,e=Math.cos(2*n),s=Math.cos(4*n),r=Math.cos(6*n),h=Math.sin(2*n),o=Math.sin(4*n),d=Math.sin(6*n),u=Math.sin(8*n),c=n*n,M=n*c,l=i.u8Over256,g=i.u2Over4,_=i.u6Over64,t=i.u4Over16,c=2*M*l*e/3+n*(1-g+7*t/4-15*_/4+579*l/64-(t-15*_/4+187*l/16)*e-(5*_/4-115*l/16)*s-29*l*r/16)+(g/2-t+71*_/32-85*l/16)*h+(5*t/16-5*_/4+383*l/96)*o-c*((_-11*l/2)*h+5*l*o/2)+(29*_/96-29*l/16)*d+539*l*u/1536,h=Math.asin(Math.sin(c)*i.cosineAlpha),o=Math.atan(i.a/i.b*Math.tan(h));c-=i.sigma;_=Math.cos(2*i.sigma+c),d=Math.sin(c),l=Math.cos(c),u=i.cosineU*l,h=i.sineU*d,_=Math.atan2(d*i.sineHeading,u-h*i.cosineHeading)-U(i.f,i.sineAlpha,i.cosineSquaredAlpha,c,d,l,_);return p.defined(a)?(a.longitude=this._start.longitude+_,a.latitude=o,a.height=0,a):new S.Cartographic(this._start.longitude+_,o,0)},t.EllipsoidGeodesic=i}); diff --git a/public/lib/Cesium/Workers/EllipsoidGeometry-1cd4036a.js b/public/lib/Cesium/Workers/EllipsoidGeometry-1cd4036a.js new file mode 100644 index 0000000..1cea34b --- /dev/null +++ b/public/lib/Cesium/Workers/EllipsoidGeometry-1cd4036a.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./ComponentDatatype-8f71e605","./when-ca391574","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./VertexFormat-63b3c6da"],function(t,$,tt,et,at,it,e,rt,nt,ot,mt,c){"use strict";var st=new et.Cartesian3,ut=new et.Cartesian3,lt=new et.Cartesian3,ft=new et.Cartesian3,ct=new et.Cartesian3,l=new et.Cartesian3(1,1,1),dt=Math.cos,Ct=Math.sin;function d(t){t=it.defaultValue(t,it.defaultValue.EMPTY_OBJECT);var e=it.defaultValue(t.radii,l),a=it.defaultValue(t.innerRadii,e),i=it.defaultValue(t.minimumClock,0),r=it.defaultValue(t.maximumClock,mt.CesiumMath.TWO_PI),n=it.defaultValue(t.minimumCone,0),o=it.defaultValue(t.maximumCone,mt.CesiumMath.PI),m=Math.round(it.defaultValue(t.stackPartitions,64)),s=Math.round(it.defaultValue(t.slicePartitions,64)),u=it.defaultValue(t.vertexFormat,c.VertexFormat.DEFAULT);this._radii=et.Cartesian3.clone(e),this._innerRadii=et.Cartesian3.clone(a),this._minimumClock=i,this._maximumClock=r,this._minimumCone=n,this._maximumCone=o,this._stackPartitions=m,this._slicePartitions=s,this._vertexFormat=c.VertexFormat.clone(u),this._offsetAttribute=t.offsetAttribute,this._workerName="createEllipsoidGeometry"}d.packedLength=2*et.Cartesian3.packedLength+c.VertexFormat.packedLength+7,d.pack=function(t,e,a){return a=it.defaultValue(a,0),et.Cartesian3.pack(t._radii,e,a),a+=et.Cartesian3.packedLength,et.Cartesian3.pack(t._innerRadii,e,a),a+=et.Cartesian3.packedLength,c.VertexFormat.pack(t._vertexFormat,e,a),a+=c.VertexFormat.packedLength,e[a++]=t._minimumClock,e[a++]=t._maximumClock,e[a++]=t._minimumCone,e[a++]=t._maximumCone,e[a++]=t._stackPartitions,e[a++]=t._slicePartitions,e[a]=it.defaultValue(t._offsetAttribute,-1),e};var a,C=new et.Cartesian3,p=new et.Cartesian3,y=new c.VertexFormat,_={radii:C,innerRadii:p,vertexFormat:y,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};d.unpack=function(t,e,a){e=it.defaultValue(e,0);var i=et.Cartesian3.unpack(t,e,C);e+=et.Cartesian3.packedLength;var r=et.Cartesian3.unpack(t,e,p);e+=et.Cartesian3.packedLength;var n=c.VertexFormat.unpack(t,e,y);e+=c.VertexFormat.packedLength;var o=t[e++],m=t[e++],s=t[e++],u=t[e++],l=t[e++],f=t[e++],e=t[e];return it.defined(a)?(a._radii=et.Cartesian3.clone(i,a._radii),a._innerRadii=et.Cartesian3.clone(r,a._innerRadii),a._vertexFormat=c.VertexFormat.clone(n,a._vertexFormat),a._minimumClock=o,a._maximumClock=m,a._minimumCone=s,a._maximumCone=u,a._stackPartitions=l,a._slicePartitions=f,a._offsetAttribute=-1===e?void 0:e,a):(_.minimumClock=o,_.maximumClock=m,_.minimumCone=s,_.maximumCone=u,_.stackPartitions=l,_.slicePartitions=f,_.offsetAttribute=-1===e?void 0:e,new d(_))},d.createGeometry=function(t){var e=t._radii;if(!(e.x<=0||e.y<=0||e.z<=0)){var a=t._innerRadii;if(!(a.x<=0||a.y<=0||a.z<=0)){var i=t._minimumClock,r=t._maximumClock,n=t._minimumCone,o=t._maximumCone,m=t._vertexFormat,s=t._slicePartitions+1,u=t._stackPartitions+1;(s=Math.round(s*Math.abs(r-i)/mt.CesiumMath.TWO_PI))<2&&(s=2),(u=Math.round(u*Math.abs(o-n)/mt.CesiumMath.PI))<2&&(u=2);var l=0,f=[n],c=[i];for(B=0;B<u;B++)f.push(n+B*(o-n)/(u-1));for(f.push(o),I=0;I<s;I++)c.push(i+I*(r-i)/(s-1));c.push(r);var d=f.length,C=c.length,p=0,y=1,_=a.x!==e.x||a.y!==e.y||a.z!==e.z,h=!1,v=!1,A=!1;_&&(y=2,0<n&&(h=!0,p+=s-1),o<Math.PI&&(v=!0,p+=s-1),(r-i)%mt.CesiumMath.TWO_PI?(A=!0,p+=2*(u-1)+1):p+=1);var x=C*d*y,b=new Float64Array(3*x),k=$.arrayFill(new Array(x),!1),w=$.arrayFill(new Array(x),!1),F=s*u*y,p=6*(F+p+1-(s+u)*y),P=ot.IndexDatatype.createTypedArray(F,p),g=m.normal?new Float32Array(3*x):void 0,V=m.tangent?new Float32Array(3*x):void 0,M=m.bitangent?new Float32Array(3*x):void 0,T=m.st?new Float32Array(2*x):void 0,D=new Array(d),G=new Array(d);for(B=0;B<d;B++)D[B]=Ct(f[B]),G[B]=dt(f[B]);for(var L=new Array(C),O=new Array(C),I=0;I<C;I++)O[I]=dt(c[I]),L[I]=Ct(c[I]);for(B=0;B<d;B++)for(I=0;I<C;I++)b[l++]=e.x*D[B]*O[I],b[l++]=e.y*D[B]*L[I],b[l++]=e.z*G[B];var E,z,N,R,U=x/2;if(_)for(B=0;B<d;B++)for(I=0;I<C;I++)b[l++]=a.x*D[B]*O[I],b[l++]=a.y*D[B]*L[I],b[l++]=a.z*G[B],k[U]=!0,0<B&&B!==d-1&&0!==I&&I!==C-1&&(w[U]=!0),U++;for(l=0,B=1;B<d-2;B++)for(E=B*C,z=(B+1)*C,I=1;I<C-2;I++)P[l++]=z+I,P[l++]=z+I+1,P[l++]=E+I+1,P[l++]=z+I,P[l++]=E+I+1,P[l++]=E+I;if(_)for(var S=d*C,B=1;B<d-2;B++)for(E=S+B*C,z=S+(B+1)*C,I=1;I<C-2;I++)P[l++]=z+I,P[l++]=E+I,P[l++]=E+I+1,P[l++]=z+I,P[l++]=E+I+1,P[l++]=z+I+1;if(_){if(h)for(R=d*C,B=1;B<C-2;B++)P[l++]=B,P[l++]=B+1,P[l++]=R+B+1,P[l++]=B,P[l++]=R+B+1,P[l++]=R+B;if(v)for(N=d*C-C,R=d*C*y-C,B=1;B<C-2;B++)P[l++]=N+B+1,P[l++]=N+B,P[l++]=R+B,P[l++]=N+B+1,P[l++]=R+B,P[l++]=R+B+1}if(A){for(B=1;B<d-2;B++)R=C*d+C*B,N=C*B,P[l++]=R,P[l++]=N+C,P[l++]=N,P[l++]=R,P[l++]=R+C,P[l++]=N+C;for(B=1;B<d-2;B++)R=C*d+C*(B+1)-1,N=C*(B+1)-1,P[l++]=N+C,P[l++]=R,P[l++]=N,P[l++]=N+C,P[l++]=R+C,P[l++]=R}v=new nt.GeometryAttributes;m.position&&(v.position=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:b}));var W=0,Y=0,J=0,X=0,Z=x/2,j=et.Ellipsoid.fromCartesian3(e),q=et.Ellipsoid.fromCartesian3(a);if(m.st||m.normal||m.tangent||m.bitangent){for(B=0;B<x;B++){var H,K=k[B]?q:j,Q=et.Cartesian3.fromArray(b,3*B,st),K=K.geodeticSurfaceNormal(Q,ut);w[B]&&et.Cartesian3.negate(K,K),m.st&&(H=et.Cartesian2.negate(K,ct),T[W++]=Math.atan2(H.y,H.x)/mt.CesiumMath.TWO_PI+.5,T[W++]=Math.asin(K.z)/Math.PI+.5),m.normal&&(g[Y++]=K.x,g[Y++]=K.y,g[Y++]=K.z),(m.tangent||m.bitangent)&&(Q=lt,H=0,k[B]&&(H=Z),H=!h&&H<=B&&B<H+2*C?et.Cartesian3.UNIT_X:et.Cartesian3.UNIT_Z,et.Cartesian3.cross(H,K,Q),et.Cartesian3.normalize(Q,Q),m.tangent&&(V[J++]=Q.x,V[J++]=Q.y,V[J++]=Q.z),m.bitangent&&(Q=et.Cartesian3.cross(K,Q,ft),et.Cartesian3.normalize(Q,Q),M[X++]=Q.x,M[X++]=Q.y,M[X++]=Q.z))}m.st&&(v.st=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:T})),m.normal&&(v.normal=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:g})),m.tangent&&(v.tangent=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:V})),m.bitangent&&(v.bitangent=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:M}))}return it.defined(t._offsetAttribute)&&(y=b.length,A=new Uint8Array(y/3),y=t._offsetAttribute===$.GeometryOffsetAttribute.NONE?0:1,$.arrayFill(A,y),v.applyOffset=new rt.GeometryAttribute({componentDatatype:at.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:A})),new rt.Geometry({attributes:v,indices:P,primitiveType:rt.PrimitiveType.TRIANGLES,boundingSphere:tt.BoundingSphere.fromEllipsoid(j),offsetAttribute:t._offsetAttribute})}}},d.getUnitEllipsoid=function(){return a=!it.defined(a)?d.createGeometry(new d({radii:new et.Cartesian3(1,1,1),vertexFormat:c.VertexFormat.POSITION_ONLY})):a},t.EllipsoidGeometry=d}); diff --git a/public/lib/Cesium/Workers/EllipsoidOutlineGeometry-66fea8ef.js b/public/lib/Cesium/Workers/EllipsoidOutlineGeometry-66fea8ef.js new file mode 100644 index 0000000..9452f66 --- /dev/null +++ b/public/lib/Cesium/Workers/EllipsoidOutlineGeometry-66fea8ef.js @@ -0,0 +1 @@ +define(["exports","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./ComponentDatatype-8f71e605","./when-ca391574","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3"],function(i,D,I,T,z,L,t,R,N,B,S){"use strict";var f=new T.Cartesian3(1,1,1),U=Math.cos,F=Math.sin;function d(i){i=L.defaultValue(i,L.defaultValue.EMPTY_OBJECT);var t=L.defaultValue(i.radii,f),e=L.defaultValue(i.innerRadii,t),a=L.defaultValue(i.minimumClock,0),n=L.defaultValue(i.maximumClock,S.CesiumMath.TWO_PI),r=L.defaultValue(i.minimumCone,0),o=L.defaultValue(i.maximumCone,S.CesiumMath.PI),s=Math.round(L.defaultValue(i.stackPartitions,10)),m=Math.round(L.defaultValue(i.slicePartitions,8)),u=Math.round(L.defaultValue(i.subdivisions,128));this._radii=T.Cartesian3.clone(t),this._innerRadii=T.Cartesian3.clone(e),this._minimumClock=a,this._maximumClock=n,this._minimumCone=r,this._maximumCone=o,this._stackPartitions=s,this._slicePartitions=m,this._subdivisions=u,this._offsetAttribute=i.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}d.packedLength=2*T.Cartesian3.packedLength+8,d.pack=function(i,t,e){return e=L.defaultValue(e,0),T.Cartesian3.pack(i._radii,t,e),e+=T.Cartesian3.packedLength,T.Cartesian3.pack(i._innerRadii,t,e),e+=T.Cartesian3.packedLength,t[e++]=i._minimumClock,t[e++]=i._maximumClock,t[e++]=i._minimumCone,t[e++]=i._maximumCone,t[e++]=i._stackPartitions,t[e++]=i._slicePartitions,t[e++]=i._subdivisions,t[e]=L.defaultValue(i._offsetAttribute,-1),t};var c=new T.Cartesian3,C=new T.Cartesian3,_={radii:c,innerRadii:C,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};d.unpack=function(i,t,e){t=L.defaultValue(t,0);var a=T.Cartesian3.unpack(i,t,c);t+=T.Cartesian3.packedLength;var n=T.Cartesian3.unpack(i,t,C);t+=T.Cartesian3.packedLength;var r=i[t++],o=i[t++],s=i[t++],m=i[t++],u=i[t++],f=i[t++],l=i[t++],t=i[t];return L.defined(e)?(e._radii=T.Cartesian3.clone(a,e._radii),e._innerRadii=T.Cartesian3.clone(n,e._innerRadii),e._minimumClock=r,e._maximumClock=o,e._minimumCone=s,e._maximumCone=m,e._stackPartitions=u,e._slicePartitions=f,e._subdivisions=l,e._offsetAttribute=-1===t?void 0:t,e):(_.minimumClock=r,_.maximumClock=o,_.minimumCone=s,_.maximumCone=m,_.stackPartitions=u,_.slicePartitions=f,_.subdivisions=l,_.offsetAttribute=-1===t?void 0:t,new d(_))},d.createGeometry=function(i){var t=i._radii;if(!(t.x<=0||t.y<=0||t.z<=0)){var e=i._innerRadii;if(!(e.x<=0||e.y<=0||e.z<=0)){var a=i._minimumClock,n=i._maximumClock,r=i._minimumCone,o=i._maximumCone,s=i._subdivisions,m=T.Ellipsoid.fromCartesian3(t),u=i._slicePartitions+1,f=i._stackPartitions+1;(u=Math.round(u*Math.abs(n-a)/S.CesiumMath.TWO_PI))<2&&(u=2),(f=Math.round(f*Math.abs(o-r)/S.CesiumMath.PI))<2&&(f=2);var l=0,d=1,c=e.x!==t.x||e.y!==t.y||e.z!==t.z,C=!1,_=!1;c&&(d=2,0<r&&(C=!0,l+=u),o<Math.PI&&(_=!0,l+=u));for(var h,p,y=s*d*(f+u),b=new Float64Array(3*y),l=2*(y+l-(u+f)*d),v=B.IndexDatatype.createTypedArray(y,l),k=0,A=new Array(f),x=new Array(f),P=0;P<f;P++)p=r+P*(o-r)/(f-1),A[P]=F(p),x[P]=U(p);var w=new Array(s),M=new Array(s);for(P=0;P<s;P++)h=a+P*(n-a)/(s-1),w[P]=F(h),M[P]=U(h);for(P=0;P<f;P++)for(g=0;g<s;g++)b[k++]=t.x*A[P]*M[g],b[k++]=t.y*A[P]*w[g],b[k++]=t.z*x[P];if(c)for(P=0;P<f;P++)for(g=0;g<s;g++)b[k++]=e.x*A[P]*M[g],b[k++]=e.y*A[P]*w[g],b[k++]=e.z*x[P];for(A.length=s,x.length=s,P=0;P<s;P++)p=r+P*(o-r)/(s-1),A[P]=F(p),x[P]=U(p);for(w.length=u,M.length=u,P=0;P<u;P++)h=a+P*(n-a)/(u-1),w[P]=F(h),M[P]=U(h);for(P=0;P<s;P++)for(g=0;g<u;g++)b[k++]=t.x*A[P]*M[g],b[k++]=t.y*A[P]*w[g],b[k++]=t.z*x[P];if(c)for(P=0;P<s;P++)for(g=0;g<u;g++)b[k++]=e.x*A[P]*M[g],b[k++]=e.y*A[P]*w[g],b[k++]=e.z*x[P];for(P=k=0;P<f*d;P++)for(var V=P*s,g=0;g<s-1;g++)v[k++]=V+g,v[k++]=V+g+1;var G=f*s*d;for(P=0;P<u;P++)for(g=0;g<s-1;g++)v[k++]=G+P+g*u,v[k++]=G+P+(g+1)*u;if(c)for(G=f*s*d+u*s,P=0;P<u;P++)for(g=0;g<s-1;g++)v[k++]=G+P+g*u,v[k++]=G+P+(g+1)*u;if(c){var E=f*s*d,O=E+s*u;if(C)for(P=0;P<u;P++)v[k++]=E+P,v[k++]=O+P;if(_)for(E+=s*u-u,O+=s*u-u,P=0;P<u;P++)v[k++]=E+P,v[k++]=O+P}c=new N.GeometryAttributes({position:new R.GeometryAttribute({componentDatatype:z.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:b})});return L.defined(i._offsetAttribute)&&(C=b.length,_=new Uint8Array(C/3),C=i._offsetAttribute===D.GeometryOffsetAttribute.NONE?0:1,D.arrayFill(_,C),c.applyOffset=new R.GeometryAttribute({componentDatatype:z.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})),new R.Geometry({attributes:c,indices:v,primitiveType:R.PrimitiveType.LINES,boundingSphere:I.BoundingSphere.fromEllipsoid(m),offsetAttribute:i._offsetAttribute})}}},i.EllipsoidOutlineGeometry=d}); diff --git a/public/lib/Cesium/Workers/EllipsoidRhumbLine-21029cef.js b/public/lib/Cesium/Workers/EllipsoidRhumbLine-21029cef.js new file mode 100644 index 0000000..e89ea3b --- /dev/null +++ b/public/lib/Cesium/Workers/EllipsoidRhumbLine-21029cef.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(t,M,i,c,m){"use strict";function l(t,i,a){if(0===t)return i*a;var e=t*t,n=e*e,s=n*e,h=s*e,u=h*e,t=u*e,a=a;return i*((1-e/4-3*n/64-5*s/256-175*h/16384-441*u/65536-4851*t/1048576)*a-(3*e/8+3*n/32+45*s/1024+105*h/4096+2205*u/131072+6237*t/524288)*Math.sin(2*a)+(15*n/256+45*s/1024+525*h/16384+1575*u/65536+155925*t/8388608)*Math.sin(4*a)-(35*s/3072+175*h/12288+3675*u/262144+13475*t/1048576)*Math.sin(6*a)+(315*h/131072+2205*u/524288+43659*t/8388608)*Math.sin(8*a)-(693*u/1310720+6237*t/5242880)*Math.sin(10*a)+1001*t/8388608*Math.sin(12*a))}function d(t,i){if(0===t)return Math.log(Math.tan(.5*(m.CesiumMath.PI_OVER_TWO+i)));var a=t*Math.sin(i);return Math.log(Math.tan(.5*(m.CesiumMath.PI_OVER_TWO+i)))-t/2*Math.log((1+a)/(1-a))}var r=new M.Cartesian3,_=new M.Cartesian3;function e(t,i,a,e){M.Cartesian3.normalize(e.cartographicToCartesian(i,_),r),M.Cartesian3.normalize(e.cartographicToCartesian(a,_),_);var n,s=e.maximumRadius,h=e.minimumRadius,u=s*s,o=h*h;t._ellipticitySquared=(u-o)/u,t._ellipticity=Math.sqrt(t._ellipticitySquared),t._start=M.Cartographic.clone(i,t._start),t._start.height=0,t._end=M.Cartographic.clone(a,t._end),t._end.height=0,t._heading=(n=t,s=i.longitude,h=i.latitude,o=a.longitude,u=a.latitude,h=d(n._ellipticity,h),u=d(n._ellipticity,u),Math.atan2(m.CesiumMath.negativePiToPi(o-s),u-h)),t._distance=(o=t,s=e.maximumRadius,u=e.minimumRadius,h=i.longitude,t=i.latitude,e=a.longitude,i=a.latitude,a=o._heading,e-=h,h=0,h=m.CesiumMath.equalsEpsilon(Math.abs(a),m.CesiumMath.PI_OVER_TWO,m.CesiumMath.EPSILON8)?s===u?s*Math.cos(t)*m.CesiumMath.negativePiToPi(e):(u=Math.sin(t),s*Math.cos(t)*m.CesiumMath.negativePiToPi(e)/Math.sqrt(1-o._ellipticitySquared*u*u)):(t=l(o._ellipticity,s,t),(l(o._ellipticity,s,i)-t)/Math.cos(a)),Math.abs(h))}function o(t,i,a,e,n,s){var h,u,o,r=n*n;return o=Math.abs(m.CesiumMath.PI_OVER_TWO-Math.abs(i))>m.CesiumMath.EPSILON8?(h=function(t,i,a){var e=t/a;if(0===i)return e;var n=e*e,s=n*e,h=s*e,u=i*i,o=u*u,r=o*u,l=r*u,d=l*u,M=d*u,c=Math.sin(2*e),m=Math.cos(2*e),_=Math.sin(4*e),g=Math.cos(4*e),p=Math.sin(6*e),C=Math.cos(6*e),t=Math.sin(8*e),a=Math.cos(8*e),i=Math.sin(10*e);return e+e*u/4+7*e*o/64+15*e*r/256+579*e*l/16384+1515*e*d/65536+16837*e*M/1048576+(3*e*o/16+45*e*r/256-e*(32*n-561)*l/4096-e*(232*n-1677)*d/16384+e*(399985-90560*n+512*h)*M/5242880)*m+(21*e*r/256+483*e*l/4096-e*(224*n-1969)*d/16384-e*(33152*n-112599)*M/1048576)*g+(151*e*l/4096+4681*e*d/65536+1479*e*M/16384-453*s*M/32768)*C+(1097*e*d/65536+42783*e*M/1048576)*a+8011*e*M/1048576*Math.cos(10*e)+(3*u/8+3*o/16+213*r/2048-3*n*r/64+255*l/4096-33*n*l/512+20861*d/524288-33*n*d/512+h*d/1024+28273*M/1048576-471*n*M/8192+9*h*M/4096)*c+(21*o/256+21*r/256+533*l/8192-21*n*l/512+197*d/4096-315*n*d/4096+584039*M/16777216-12517*n*M/131072+7*h*M/2048)*_+(151*r/6144+151*l/4096+5019*d/131072-453*n*d/16384+26965*M/786432-8607*n*M/131072)*p+(1097*l/131072+1097*d/65536+225797*M/10485760-1097*n*M/65536)*t+(8011*d/2621440+8011*M/1048576)*i+293393*M/251658240*Math.sin(12*e)}(l(n,e,t.latitude)+a*Math.cos(i),n,e),o=d(n,t.latitude),u=d(n,h),o=Math.tan(i)*(u-o),m.CesiumMath.negativePiToPi(t.longitude+o)):(h=t.latitude,o=a/(0===n?e*Math.cos(t.latitude):(n=Math.sin(t.latitude),e*Math.cos(t.latitude)/Math.sqrt(1-r*n*n))),0<i?m.CesiumMath.negativePiToPi(t.longitude+o):m.CesiumMath.negativePiToPi(t.longitude-o)),c.defined(s)?(s.longitude=o,s.latitude=h,s.height=0,s):new M.Cartographic(o,h,0)}function g(t,i,a){a=c.defaultValue(a,M.Ellipsoid.WGS84);this._ellipsoid=a,this._start=new M.Cartographic,this._end=new M.Cartographic,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,c.defined(t)&&c.defined(i)&&e(this,t,i,a)}Object.defineProperties(g.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return this._heading}}}),g.fromStartHeadingDistance=function(t,i,a,e,n){var s=c.defaultValue(e,M.Ellipsoid.WGS84),h=s.maximumRadius,u=s.minimumRadius,h=h*h,u=u*u,h=Math.sqrt((h-u)/h),h=o(t,i=m.CesiumMath.negativePiToPi(i),a,s.maximumRadius,h);return!c.defined(n)||c.defined(e)&&!e.equals(n.ellipsoid)?new g(t,h,s):(n.setEndPoints(t,h),n)},g.prototype.setEndPoints=function(t,i){e(this,t,i,this._ellipsoid)},g.prototype.interpolateUsingFraction=function(t,i){return this.interpolateUsingSurfaceDistance(t*this._distance,i)},g.prototype.interpolateUsingSurfaceDistance=function(t,i){return o(this._start,this._heading,t,this._ellipsoid.maximumRadius,this._ellipticity,i)},g.prototype.findIntersectionWithLongitude=function(t,i){var a=this._ellipticity,e=this._heading,n=Math.abs(e),s=this._start;if(t=m.CesiumMath.negativePiToPi(t),m.CesiumMath.equalsEpsilon(Math.abs(t),Math.PI,m.CesiumMath.EPSILON14)&&(t=m.CesiumMath.sign(s.longitude)*Math.PI),c.defined(i)||(i=new M.Cartographic),Math.abs(m.CesiumMath.PI_OVER_TWO-n)<=m.CesiumMath.EPSILON8)return i.longitude=t,i.latitude=s.latitude,i.height=0,i;if(m.CesiumMath.equalsEpsilon(Math.abs(m.CesiumMath.PI_OVER_TWO-n),m.CesiumMath.PI_OVER_TWO,m.CesiumMath.EPSILON8))return m.CesiumMath.equalsEpsilon(t,s.longitude,m.CesiumMath.EPSILON12)?void 0:(i.longitude=t,i.latitude=m.CesiumMath.PI_OVER_TWO*m.CesiumMath.sign(m.CesiumMath.PI_OVER_TWO-e),i.height=0,i);var h=s.latitude,n=a*Math.sin(h),u=Math.tan(.5*(m.CesiumMath.PI_OVER_TWO+h))*Math.exp((t-s.longitude)/Math.tan(e)),o=(1+n)/(1-n),r=s.latitude;do{var l=r,d=a*Math.sin(l),d=(1+d)/(1-d),r=2*Math.atan(u*Math.pow(d/o,a/2))-m.CesiumMath.PI_OVER_TWO}while(!m.CesiumMath.equalsEpsilon(r,l,m.CesiumMath.EPSILON12));return i.longitude=t,i.latitude=r,i.height=0,i},g.prototype.findIntersectionWithLatitude=function(t,i){var a=this._ellipticity,e=this._heading,n=this._start;if(!m.CesiumMath.equalsEpsilon(Math.abs(e),m.CesiumMath.PI_OVER_TWO,m.CesiumMath.EPSILON8)){var s=d(a,n.latitude),a=d(a,t),s=Math.tan(e)*(a-s),s=m.CesiumMath.negativePiToPi(n.longitude+s);return c.defined(i)?(i.longitude=s,i.latitude=t,i.height=0,i):new M.Cartographic(s,t,0)}},t.EllipsoidRhumbLine=g}); diff --git a/public/lib/Cesium/Workers/EllipsoidTangentPlane-0fb66b96.js b/public/lib/Cesium/Workers/EllipsoidTangentPlane-0fb66b96.js new file mode 100644 index 0000000..0cbff6e --- /dev/null +++ b/public/lib/Cesium/Workers/EllipsoidTangentPlane-0fb66b96.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Transforms-5295b227","./IntersectionTests-f5111308","./Plane-99b2becd"],function(e,C,n,p,a,i,r){"use strict";function x(e,n,t){this.minimum=C.Cartesian3.clone(p.defaultValue(e,C.Cartesian3.ZERO)),this.maximum=C.Cartesian3.clone(p.defaultValue(n,C.Cartesian3.ZERO)),t=p.defined(t)?C.Cartesian3.clone(t):C.Cartesian3.midpoint(this.minimum,this.maximum,new C.Cartesian3),this.center=t}x.fromPoints=function(e,n){if(p.defined(n)||(n=new x),!p.defined(e)||0===e.length)return n.minimum=C.Cartesian3.clone(C.Cartesian3.ZERO,n.minimum),n.maximum=C.Cartesian3.clone(C.Cartesian3.ZERO,n.maximum),n.center=C.Cartesian3.clone(C.Cartesian3.ZERO,n.center),n;for(var t=e[0].x,i=e[0].y,a=e[0].z,r=e[0].x,s=e[0].y,o=e[0].z,m=e.length,l=1;l<m;l++)var c=e[l],u=c.x,d=c.y,c=c.z,t=Math.min(u,t),r=Math.max(u,r),i=Math.min(d,i),s=Math.max(d,s),a=Math.min(c,a),o=Math.max(c,o);var f=n.minimum;f.x=t,f.y=i,f.z=a;var h=n.maximum;return h.x=r,h.y=s,h.z=o,n.center=C.Cartesian3.midpoint(f,h,n.center),n},x.clone=function(e,n){if(p.defined(e))return p.defined(n)?(n.minimum=C.Cartesian3.clone(e.minimum,n.minimum),n.maximum=C.Cartesian3.clone(e.maximum,n.maximum),n.center=C.Cartesian3.clone(e.center,n.center),n):new x(e.minimum,e.maximum,e.center)},x.equals=function(e,n){return e===n||p.defined(e)&&p.defined(n)&&C.Cartesian3.equals(e.center,n.center)&&C.Cartesian3.equals(e.minimum,n.minimum)&&C.Cartesian3.equals(e.maximum,n.maximum)};var s=new C.Cartesian3;x.intersectPlane=function(e,n){s=C.Cartesian3.subtract(e.maximum,e.minimum,s);var t=C.Cartesian3.multiplyByScalar(s,.5,s),i=n.normal,t=t.x*Math.abs(i.x)+t.y*Math.abs(i.y)+t.z*Math.abs(i.z),n=C.Cartesian3.dot(e.center,i)+n.distance;return 0<n-t?a.Intersect.INSIDE:n+t<0?a.Intersect.OUTSIDE:a.Intersect.INTERSECTING},x.prototype.clone=function(e){return x.clone(this,e)},x.prototype.intersectPlane=function(e){return x.intersectPlane(this,e)},x.prototype.equals=function(e){return x.equals(this,e)};var o=new a.Cartesian4;function t(e,n){e=(n=p.defaultValue(n,C.Ellipsoid.WGS84)).scaleToGeodeticSurface(e);var t=a.Transforms.eastNorthUpToFixedFrame(e,n);this._ellipsoid=n,this._origin=e,this._xAxis=C.Cartesian3.fromCartesian4(a.Matrix4.getColumn(t,0,o)),this._yAxis=C.Cartesian3.fromCartesian4(a.Matrix4.getColumn(t,1,o));t=C.Cartesian3.fromCartesian4(a.Matrix4.getColumn(t,2,o));this._plane=r.Plane.fromPointNormal(e,t)}Object.defineProperties(t.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var m=new x;t.fromPoints=function(e,n){return new t(x.fromPoints(e,m).center,n)};var l=new i.Ray,c=new C.Cartesian3;t.prototype.projectPointOntoPlane=function(e,n){var t=l;t.origin=e,C.Cartesian3.normalize(e,t.direction);e=i.IntersectionTests.rayPlane(t,this._plane,c);if(p.defined(e)||(C.Cartesian3.negate(t.direction,t.direction),e=i.IntersectionTests.rayPlane(t,this._plane,c)),p.defined(e)){t=C.Cartesian3.subtract(e,this._origin,e),e=C.Cartesian3.dot(this._xAxis,t),t=C.Cartesian3.dot(this._yAxis,t);return p.defined(n)?(n.x=e,n.y=t,n):new C.Cartesian2(e,t)}},t.prototype.projectPointsOntoPlane=function(e,n){p.defined(n)||(n=[]);for(var t=0,i=e.length,a=0;a<i;a++){var r=this.projectPointOntoPlane(e[a],n[t]);p.defined(r)&&(n[t]=r,t++)}return n.length=t,n},t.prototype.projectPointToNearestOnPlane=function(e,n){p.defined(n)||(n=new C.Cartesian2);var t=l;t.origin=e,C.Cartesian3.clone(this._plane.normal,t.direction);e=i.IntersectionTests.rayPlane(t,this._plane,c);p.defined(e)||(C.Cartesian3.negate(t.direction,t.direction),e=i.IntersectionTests.rayPlane(t,this._plane,c));t=C.Cartesian3.subtract(e,this._origin,e),e=C.Cartesian3.dot(this._xAxis,t),t=C.Cartesian3.dot(this._yAxis,t);return n.x=e,n.y=t,n},t.prototype.projectPointsToNearestOnPlane=function(e,n){p.defined(n)||(n=[]);var t=e.length;n.length=t;for(var i=0;i<t;i++)n[i]=this.projectPointToNearestOnPlane(e[i],n[i]);return n};var u=new C.Cartesian3;t.prototype.projectPointOntoEllipsoid=function(e,n){p.defined(n)||(n=new C.Cartesian3);var t=this._ellipsoid,i=this._origin,a=this._xAxis,r=this._yAxis,s=u;return C.Cartesian3.multiplyByScalar(a,e.x,s),n=C.Cartesian3.add(i,s,n),C.Cartesian3.multiplyByScalar(r,e.y,s),C.Cartesian3.add(n,s,n),t.scaleToGeocentricSurface(n,n),n},t.prototype.projectPointsOntoEllipsoid=function(e,n){var t=e.length;p.defined(n)?n.length=t:n=new Array(t);for(var i=0;i<t;++i)n[i]=this.projectPointOntoEllipsoid(e[i],n[i]);return n},e.AxisAlignedBoundingBox=x,e.EllipsoidTangentPlane=t}); diff --git a/public/lib/Cesium/Workers/EncodedCartesian3-c36ced29.js b/public/lib/Cesium/Workers/EncodedCartesian3-c36ced29.js new file mode 100644 index 0000000..9f80032 --- /dev/null +++ b/public/lib/Cesium/Workers/EncodedCartesian3-c36ced29.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574"],function(e,n,i,h){"use strict";function a(){this.high=n.Cartesian3.clone(n.Cartesian3.ZERO),this.low=n.Cartesian3.clone(n.Cartesian3.ZERO)}a.encode=function(e,n){var i;return h.defined(n)||(n={high:0,low:0}),0<=e?(i=65536*Math.floor(e/65536),n.high=i,n.low=e-i):(i=65536*Math.floor(-e/65536),n.high=-i,n.low=e+i),n};var r={high:0,low:0};a.fromCartesian=function(e,n){var i=(n=!h.defined(n)?new a:n).high,o=n.low;return a.encode(e.x,r),i.x=r.high,o.x=r.low,a.encode(e.y,r),i.y=r.high,o.y=r.low,a.encode(e.z,r),i.z=r.high,o.z=r.low,n};var t=new a;a.writeElements=function(e,n,i){a.fromCartesian(e,t);var o=t.high,e=t.low;n[i]=o.x,n[i+1]=o.y,n[i+2]=o.z,n[i+3]=e.x,n[i+4]=e.y,n[i+5]=e.z},e.EncodedCartesian3=a}); diff --git a/public/lib/Cesium/Workers/FrustumGeometry-da613b71.js b/public/lib/Cesium/Workers/FrustumGeometry-da613b71.js new file mode 100644 index 0000000..117de9a --- /dev/null +++ b/public/lib/Cesium/Workers/FrustumGeometry-da613b71.js @@ -0,0 +1 @@ +define(["exports","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./Math-b53708b3","./Plane-99b2becd","./VertexFormat-63b3c6da"],function(t,v,g,e,w,x,b,M,i,f,u){"use strict";function h(t){this.planes=x.defaultValue(t,[])}var p=[new g.Cartesian3,new g.Cartesian3,new g.Cartesian3];g.Cartesian3.clone(g.Cartesian3.UNIT_X,p[0]),g.Cartesian3.clone(g.Cartesian3.UNIT_Y,p[1]),g.Cartesian3.clone(g.Cartesian3.UNIT_Z,p[2]);var d=new g.Cartesian3,c=new g.Cartesian3,l=new f.Plane(new g.Cartesian3(1,0,0),0);function r(t){t=x.defaultValue(t,x.defaultValue.EMPTY_OBJECT),this.left=t.left,this._left=void 0,this.right=t.right,this._right=void 0,this.top=t.top,this._top=void 0,this.bottom=t.bottom,this._bottom=void 0,this.near=x.defaultValue(t.near,1),this._near=this.near,this.far=x.defaultValue(t.far,5e8),this._far=this.far,this._cullingVolume=new h,this._orthographicMatrix=new v.Matrix4}function n(t){t.top===t._top&&t.bottom===t._bottom&&t.left===t._left&&t.right===t._right&&t.near===t._near&&t.far===t._far||(t._left=t.left,t._right=t.right,t._top=t.top,t._bottom=t.bottom,t._near=t.near,t._far=t.far,t._orthographicMatrix=v.Matrix4.computeOrthographicOffCenter(t.left,t.right,t.bottom,t.top,t.near,t.far,t._orthographicMatrix))}h.fromBoundingSphere=function(t,e){x.defined(e)||(e=new h);var a=p.length,i=e.planes;i.length=2*a;for(var r=t.center,n=t.radius,o=0,s=0;s<a;++s){var f=p[s],u=i[o],l=i[o+1];x.defined(u)||(u=i[o]=new v.Cartesian4),x.defined(l)||(l=i[o+1]=new v.Cartesian4),g.Cartesian3.multiplyByScalar(f,-n,d),g.Cartesian3.add(r,d,d),u.x=f.x,u.y=f.y,u.z=f.z,u.w=-g.Cartesian3.dot(f,d),g.Cartesian3.multiplyByScalar(f,n,d),g.Cartesian3.add(r,d,d),l.x=-f.x,l.y=-f.y,l.z=-f.z,l.w=-g.Cartesian3.dot(g.Cartesian3.negate(f,c),d),o+=2}return e},h.prototype.computeVisibility=function(t){for(var e=this.planes,a=!1,i=0,r=e.length;i<r;++i){var n=t.intersectPlane(f.Plane.fromCartesian4(e[i],l));if(n===v.Intersect.OUTSIDE)return v.Intersect.OUTSIDE;n===v.Intersect.INTERSECTING&&(a=!0)}return a?v.Intersect.INTERSECTING:v.Intersect.INSIDE},h.prototype.computeVisibilityWithPlaneMask=function(t,e){if(e===h.MASK_OUTSIDE||e===h.MASK_INSIDE)return e;for(var a=h.MASK_INSIDE,i=this.planes,r=0,n=i.length;r<n;++r){var o=r<31?1<<r:0;if(!(r<31&&0==(e&o))){var s=t.intersectPlane(f.Plane.fromCartesian4(i[r],l));if(s===v.Intersect.OUTSIDE)return h.MASK_OUTSIDE;s===v.Intersect.INTERSECTING&&(a|=o)}}return a},h.MASK_OUTSIDE=4294967295,h.MASK_INSIDE=0,h.MASK_INDETERMINATE=2147483647,Object.defineProperties(r.prototype,{projectionMatrix:{get:function(){return n(this),this._orthographicMatrix}}});var m=new g.Cartesian3,C=new g.Cartesian3,_=new g.Cartesian3,y=new g.Cartesian3;function F(t){t=x.defaultValue(t,x.defaultValue.EMPTY_OBJECT),this._offCenterFrustum=new r,this.width=t.width,this._width=void 0,this.aspectRatio=t.aspectRatio,this._aspectRatio=void 0,this.near=x.defaultValue(t.near,1),this._near=this.near,this.far=x.defaultValue(t.far,5e8),this._far=this.far}function o(t){var e,a=t._offCenterFrustum;t.width===t._width&&t.aspectRatio===t._aspectRatio&&t.near===t._near&&t.far===t._far||(t._aspectRatio=t.aspectRatio,t._width=t.width,t._near=t.near,t._far=t.far,e=1/t.aspectRatio,a.right=.5*t.width,a.left=-a.right,a.top=e*a.right,a.bottom=-a.top,a.near=t.near,a.far=t.far)}function s(t){t=x.defaultValue(t,x.defaultValue.EMPTY_OBJECT),this.left=t.left,this._left=void 0,this.right=t.right,this._right=void 0,this.top=t.top,this._top=void 0,this.bottom=t.bottom,this._bottom=void 0,this.near=x.defaultValue(t.near,1),this._near=this.near,this.far=x.defaultValue(t.far,5e8),this._far=this.far,this._cullingVolume=new h,this._perspectiveMatrix=new v.Matrix4,this._infinitePerspective=new v.Matrix4}function V(t){var e=t.top,a=t.bottom,i=t.right,r=t.left,n=t.near,o=t.far;e===t._top&&a===t._bottom&&r===t._left&&i===t._right&&n===t._near&&o===t._far||(t._left=r,t._right=i,t._top=e,t._bottom=a,t._near=n,t._far=o,t._perspectiveMatrix=v.Matrix4.computePerspectiveOffCenter(r,i,a,e,n,o,t._perspectiveMatrix),t._infinitePerspective=v.Matrix4.computeInfinitePerspectiveOffCenter(r,i,a,e,n,t._infinitePerspective))}r.prototype.computeCullingVolume=function(t,e,a){var i=this._cullingVolume.planes,r=this.top,n=this.bottom,o=this.right,s=this.left,f=this.near,u=this.far,l=g.Cartesian3.cross(e,a,m);g.Cartesian3.normalize(l,l);var h=C;g.Cartesian3.multiplyByScalar(e,f,h),g.Cartesian3.add(t,h,h);f=_;g.Cartesian3.multiplyByScalar(l,s,f),g.Cartesian3.add(h,f,f);s=i[0];return(s=!x.defined(s)?i[0]=new v.Cartesian4:s).x=l.x,s.y=l.y,s.z=l.z,s.w=-g.Cartesian3.dot(l,f),g.Cartesian3.multiplyByScalar(l,o,f),g.Cartesian3.add(h,f,f),s=i[1],(s=!x.defined(s)?i[1]=new v.Cartesian4:s).x=-l.x,s.y=-l.y,s.z=-l.z,s.w=-g.Cartesian3.dot(g.Cartesian3.negate(l,y),f),g.Cartesian3.multiplyByScalar(a,n,f),g.Cartesian3.add(h,f,f),s=i[2],(s=!x.defined(s)?i[2]=new v.Cartesian4:s).x=a.x,s.y=a.y,s.z=a.z,s.w=-g.Cartesian3.dot(a,f),g.Cartesian3.multiplyByScalar(a,r,f),g.Cartesian3.add(h,f,f),s=i[3],(s=!x.defined(s)?i[3]=new v.Cartesian4:s).x=-a.x,s.y=-a.y,s.z=-a.z,s.w=-g.Cartesian3.dot(g.Cartesian3.negate(a,y),f),s=i[4],(s=!x.defined(s)?i[4]=new v.Cartesian4:s).x=e.x,s.y=e.y,s.z=e.z,s.w=-g.Cartesian3.dot(e,h),g.Cartesian3.multiplyByScalar(e,u,f),g.Cartesian3.add(t,f,f),s=i[5],(s=!x.defined(s)?i[5]=new v.Cartesian4:s).x=-e.x,s.y=-e.y,s.z=-e.z,s.w=-g.Cartesian3.dot(g.Cartesian3.negate(e,y),f),this._cullingVolume},r.prototype.getPixelDimensions=function(t,e,a,i,r){n(this);t=i*(this.right-this.left)/t,e=i*(this.top-this.bottom)/e;return r.x=t,r.y=e,r},r.prototype.clone=function(t){return(t=!x.defined(t)?new r:t).left=this.left,t.right=this.right,t.top=this.top,t.bottom=this.bottom,t.near=this.near,t.far=this.far,t._left=void 0,t._right=void 0,t._top=void 0,t._bottom=void 0,t._near=void 0,t._far=void 0,t},r.prototype.equals=function(t){return x.defined(t)&&t instanceof r&&this.right===t.right&&this.left===t.left&&this.top===t.top&&this.bottom===t.bottom&&this.near===t.near&&this.far===t.far},r.prototype.equalsEpsilon=function(t,e,a){return t===this||x.defined(t)&&t instanceof r&&i.CesiumMath.equalsEpsilon(this.right,t.right,e,a)&&i.CesiumMath.equalsEpsilon(this.left,t.left,e,a)&&i.CesiumMath.equalsEpsilon(this.top,t.top,e,a)&&i.CesiumMath.equalsEpsilon(this.bottom,t.bottom,e,a)&&i.CesiumMath.equalsEpsilon(this.near,t.near,e,a)&&i.CesiumMath.equalsEpsilon(this.far,t.far,e,a)},F.packedLength=4,F.pack=function(t,e,a){return a=x.defaultValue(a,0),e[a++]=t.width,e[a++]=t.aspectRatio,e[a++]=t.near,e[a]=t.far,e},F.unpack=function(t,e,a){return e=x.defaultValue(e,0),(a=!x.defined(a)?new F:a).width=t[e++],a.aspectRatio=t[e++],a.near=t[e++],a.far=t[e],a},Object.defineProperties(F.prototype,{projectionMatrix:{get:function(){return o(this),this._offCenterFrustum.projectionMatrix}}}),F.prototype.computeCullingVolume=function(t,e,a){return o(this),this._offCenterFrustum.computeCullingVolume(t,e,a)},F.prototype.getPixelDimensions=function(t,e,a,i,r){return o(this),this._offCenterFrustum.getPixelDimensions(t,e,a,i,r)},F.prototype.clone=function(t){return(t=!x.defined(t)?new F:t).aspectRatio=this.aspectRatio,t.width=this.width,t.near=this.near,t.far=this.far,t._aspectRatio=void 0,t._width=void 0,t._near=void 0,t._far=void 0,this._offCenterFrustum.clone(t._offCenterFrustum),t},F.prototype.equals=function(t){return!!(x.defined(t)&&t instanceof F)&&(o(this),o(t),this.width===t.width&&this.aspectRatio===t.aspectRatio&&this._offCenterFrustum.equals(t._offCenterFrustum))},F.prototype.equalsEpsilon=function(t,e,a){return!!(x.defined(t)&&t instanceof F)&&(o(this),o(t),i.CesiumMath.equalsEpsilon(this.width,t.width,e,a)&&i.CesiumMath.equalsEpsilon(this.aspectRatio,t.aspectRatio,e,a)&&this._offCenterFrustum.equalsEpsilon(t._offCenterFrustum,e,a))},Object.defineProperties(s.prototype,{projectionMatrix:{get:function(){return V(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return V(this),this._infinitePerspective}}});var E=new g.Cartesian3,O=new g.Cartesian3,P=new g.Cartesian3,z=new g.Cartesian3;function R(t){t=x.defaultValue(t,x.defaultValue.EMPTY_OBJECT),this._offCenterFrustum=new s,this.fov=t.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=t.aspectRatio,this._aspectRatio=void 0,this.near=x.defaultValue(t.near,1),this._near=this.near,this.far=x.defaultValue(t.far,5e8),this._far=this.far,this.xOffset=x.defaultValue(t.xOffset,0),this._xOffset=this.xOffset,this.yOffset=x.defaultValue(t.yOffset,0),this._yOffset=this.yOffset}function S(t){var e=t._offCenterFrustum;t.fov===t._fov&&t.aspectRatio===t._aspectRatio&&t.near===t._near&&t.far===t._far&&t.xOffset===t._xOffset&&t.yOffset===t._yOffset||(t._aspectRatio=t.aspectRatio,t._fov=t.fov,t._fovy=t.aspectRatio<=1?t.fov:2*Math.atan(Math.tan(.5*t.fov)/t.aspectRatio),t._near=t.near,t._far=t.far,t._sseDenominator=2*Math.tan(.5*t._fovy),t._xOffset=t.xOffset,t._yOffset=t.yOffset,e.top=t.near*Math.tan(.5*t._fovy),e.bottom=-e.top,e.right=t.aspectRatio*e.top,e.left=-e.right,e.near=t.near,e.far=t.far,e.right+=t.xOffset,e.left+=t.xOffset,e.top+=t.yOffset,e.bottom+=t.yOffset)}s.prototype.computeCullingVolume=function(t,e,a){var i=this._cullingVolume.planes,r=this.top,n=this.bottom,o=this.right,s=this.left,f=this.near,u=this.far,l=g.Cartesian3.cross(e,a,E),h=O;g.Cartesian3.multiplyByScalar(e,f,h),g.Cartesian3.add(t,h,h);f=P;g.Cartesian3.multiplyByScalar(e,u,f),g.Cartesian3.add(t,f,f);u=z;g.Cartesian3.multiplyByScalar(l,s,u),g.Cartesian3.add(h,u,u),g.Cartesian3.subtract(u,t,u),g.Cartesian3.normalize(u,u),g.Cartesian3.cross(u,a,u),g.Cartesian3.normalize(u,u);s=i[0];return(s=!x.defined(s)?i[0]=new v.Cartesian4:s).x=u.x,s.y=u.y,s.z=u.z,s.w=-g.Cartesian3.dot(u,t),g.Cartesian3.multiplyByScalar(l,o,u),g.Cartesian3.add(h,u,u),g.Cartesian3.subtract(u,t,u),g.Cartesian3.cross(a,u,u),g.Cartesian3.normalize(u,u),s=i[1],(s=!x.defined(s)?i[1]=new v.Cartesian4:s).x=u.x,s.y=u.y,s.z=u.z,s.w=-g.Cartesian3.dot(u,t),g.Cartesian3.multiplyByScalar(a,n,u),g.Cartesian3.add(h,u,u),g.Cartesian3.subtract(u,t,u),g.Cartesian3.cross(l,u,u),g.Cartesian3.normalize(u,u),s=i[2],(s=!x.defined(s)?i[2]=new v.Cartesian4:s).x=u.x,s.y=u.y,s.z=u.z,s.w=-g.Cartesian3.dot(u,t),g.Cartesian3.multiplyByScalar(a,r,u),g.Cartesian3.add(h,u,u),g.Cartesian3.subtract(u,t,u),g.Cartesian3.cross(u,l,u),g.Cartesian3.normalize(u,u),s=i[3],(s=!x.defined(s)?i[3]=new v.Cartesian4:s).x=u.x,s.y=u.y,s.z=u.z,s.w=-g.Cartesian3.dot(u,t),s=i[4],(s=!x.defined(s)?i[4]=new v.Cartesian4:s).x=e.x,s.y=e.y,s.z=e.z,s.w=-g.Cartesian3.dot(e,h),g.Cartesian3.negate(e,u),s=i[5],(s=!x.defined(s)?i[5]=new v.Cartesian4:s).x=u.x,s.y=u.y,s.z=u.z,s.w=-g.Cartesian3.dot(u,f),this._cullingVolume},s.prototype.getPixelDimensions=function(t,e,a,i,r){V(this);var n=1/this.near,e=2*i*a*(this.top*n)/e,t=2*i*a*(this.right*n)/t;return r.x=t,r.y=e,r},s.prototype.clone=function(t){return(t=!x.defined(t)?new s:t).right=this.right,t.left=this.left,t.top=this.top,t.bottom=this.bottom,t.near=this.near,t.far=this.far,t._left=void 0,t._right=void 0,t._top=void 0,t._bottom=void 0,t._near=void 0,t._far=void 0,t},s.prototype.equals=function(t){return x.defined(t)&&t instanceof s&&this.right===t.right&&this.left===t.left&&this.top===t.top&&this.bottom===t.bottom&&this.near===t.near&&this.far===t.far},s.prototype.equalsEpsilon=function(t,e,a){return t===this||x.defined(t)&&t instanceof s&&i.CesiumMath.equalsEpsilon(this.right,t.right,e,a)&&i.CesiumMath.equalsEpsilon(this.left,t.left,e,a)&&i.CesiumMath.equalsEpsilon(this.top,t.top,e,a)&&i.CesiumMath.equalsEpsilon(this.bottom,t.bottom,e,a)&&i.CesiumMath.equalsEpsilon(this.near,t.near,e,a)&&i.CesiumMath.equalsEpsilon(this.far,t.far,e,a)},R.packedLength=6,R.pack=function(t,e,a){return a=x.defaultValue(a,0),e[a++]=t.fov,e[a++]=t.aspectRatio,e[a++]=t.near,e[a++]=t.far,e[a++]=t.xOffset,e[a]=t.yOffset,e},R.unpack=function(t,e,a){return e=x.defaultValue(e,0),(a=!x.defined(a)?new R:a).fov=t[e++],a.aspectRatio=t[e++],a.near=t[e++],a.far=t[e++],a.xOffset=t[e++],a.yOffset=t[e],a},Object.defineProperties(R.prototype,{projectionMatrix:{get:function(){return S(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return S(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return S(this),this._fovy}},sseDenominator:{get:function(){return S(this),this._sseDenominator}}}),R.prototype.computeCullingVolume=function(t,e,a){return S(this),this._offCenterFrustum.computeCullingVolume(t,e,a)},R.prototype.getPixelDimensions=function(t,e,a,i,r){return S(this),this._offCenterFrustum.getPixelDimensions(t,e,a,i,r)},R.prototype.clone=function(t){return(t=!x.defined(t)?new R:t).aspectRatio=this.aspectRatio,t.fov=this.fov,t.near=this.near,t.far=this.far,t._aspectRatio=void 0,t._fov=void 0,t._near=void 0,t._far=void 0,this._offCenterFrustum.clone(t._offCenterFrustum),t},R.prototype.equals=function(t){return!!(x.defined(t)&&t instanceof R)&&(S(this),S(t),this.fov===t.fov&&this.aspectRatio===t.aspectRatio&&this._offCenterFrustum.equals(t._offCenterFrustum))},R.prototype.equalsEpsilon=function(t,e,a){return!!(x.defined(t)&&t instanceof R)&&(S(this),S(t),i.CesiumMath.equalsEpsilon(this.fov,t.fov,e,a)&&i.CesiumMath.equalsEpsilon(this.aspectRatio,t.aspectRatio,e,a)&&this._offCenterFrustum.equalsEpsilon(t._offCenterFrustum,e,a))};function T(t){var e,a,i=t.frustum,r=t.orientation,n=t.origin,o=x.defaultValue(t.vertexFormat,u.VertexFormat.DEFAULT),t=x.defaultValue(t._drawNearPlane,!0);i instanceof R?(e=0,a=R.packedLength):i instanceof F&&(e=1,a=F.packedLength),this._frustumType=e,this._frustum=i.clone(),this._origin=g.Cartesian3.clone(n),this._orientation=v.Quaternion.clone(r),this._drawNearPlane=t,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+g.Cartesian3.packedLength+v.Quaternion.packedLength+u.VertexFormat.packedLength}T.pack=function(t,e,a){a=x.defaultValue(a,0);var i=t._frustumType,r=t._frustum;return 0===(e[a++]=i)?(R.pack(r,e,a),a+=R.packedLength):(F.pack(r,e,a),a+=F.packedLength),g.Cartesian3.pack(t._origin,e,a),a+=g.Cartesian3.packedLength,v.Quaternion.pack(t._orientation,e,a),a+=v.Quaternion.packedLength,u.VertexFormat.pack(t._vertexFormat,e,a),e[a+=u.VertexFormat.packedLength]=t._drawNearPlane?1:0,e};var k=new R,A=new F,D=new v.Quaternion,I=new g.Cartesian3,q=new u.VertexFormat;function B(t,e,a,i,r,n,o,s){for(var f=t/3*2,u=0;u<4;++u)x.defined(e)&&(e[t]=n.x,e[t+1]=n.y,e[t+2]=n.z),x.defined(a)&&(a[t]=o.x,a[t+1]=o.y,a[t+2]=o.z),x.defined(i)&&(i[t]=s.x,i[t+1]=s.y,i[t+2]=s.z),t+=3;r[f]=0,r[1+f]=0,r[2+f]=1,r[3+f]=0,r[4+f]=1,r[5+f]=1,r[6+f]=0,r[7+f]=1}T.unpack=function(t,e,a){e=x.defaultValue(e,0);var i,r=t[e++];0===r?(i=R.unpack(t,e,k),e+=R.packedLength):(i=F.unpack(t,e,A),e+=F.packedLength);var n=g.Cartesian3.unpack(t,e,I);e+=g.Cartesian3.packedLength;var o=v.Quaternion.unpack(t,e,D);e+=v.Quaternion.packedLength;var s=u.VertexFormat.unpack(t,e,q),t=1===t[e+=u.VertexFormat.packedLength];if(!x.defined(a))return new T({frustum:i,origin:n,orientation:o,vertexFormat:s,_drawNearPlane:t});e=r===a._frustumType?a._frustum:void 0;return a._frustum=i.clone(e),a._frustumType=r,a._origin=g.Cartesian3.clone(n,a._origin),a._orientation=v.Quaternion.clone(o,a._orientation),a._vertexFormat=u.VertexFormat.clone(s,a._vertexFormat),a._drawNearPlane=t,a};var L=new v.Matrix3,N=new v.Matrix4,G=new v.Matrix4,j=new g.Cartesian3,U=new g.Cartesian3,Q=new g.Cartesian3,K=new g.Cartesian3,Y=new g.Cartesian3,J=new g.Cartesian3,W=new Array(3),X=new Array(4);X[0]=new v.Cartesian4(-1,-1,1,1),X[1]=new v.Cartesian4(1,-1,1,1),X[2]=new v.Cartesian4(1,1,1,1),X[3]=new v.Cartesian4(-1,1,1,1);for(var Z=new Array(4),a=0;a<4;++a)Z[a]=new v.Cartesian4;T._computeNearFarPlanes=function(t,e,a,i,r,n,o,s){var e=v.Matrix3.fromQuaternion(e,L),n=x.defaultValue(n,j),o=x.defaultValue(o,U),f=x.defaultValue(s,Q),n=v.Matrix3.getColumn(e,0,n),o=v.Matrix3.getColumn(e,1,o),f=v.Matrix3.getColumn(e,2,f);g.Cartesian3.normalize(n,n),g.Cartesian3.normalize(o,o),g.Cartesian3.normalize(f,f),g.Cartesian3.negate(n,n);var u,l,n=v.Matrix4.computeView(t,f,o,n,N);0===a?(a=i.projectionMatrix,a=v.Matrix4.multiply(a,n,G),l=v.Matrix4.inverse(a,G)):u=v.Matrix4.inverseTransformation(n,G),x.defined(l)?(W[0]=i.near,W[1]=i.far):(W[0]=0,W[1]=i.near,W[2]=i.far);for(var h=0;h<2;++h)for(var p=0;p<4;++p){var d,c,m=v.Cartesian4.clone(X[p],Z[p]);x.defined(l)?(d=1/(m=v.Matrix4.multiplyByVector(l,m,m)).w,g.Cartesian3.multiplyByScalar(m,d,m),g.Cartesian3.subtract(m,t,m),g.Cartesian3.normalize(m,m),c=g.Cartesian3.dot(f,m),g.Cartesian3.multiplyByScalar(m,W[h]/c,m),g.Cartesian3.add(m,t,m)):(x.defined(i._offCenterFrustum)&&(i=i._offCenterFrustum),d=W[h],c=W[h+1],m.x=.5*(m.x*(i.right-i.left)+i.left+i.right),m.y=.5*(m.y*(i.top-i.bottom)+i.bottom+i.top),m.z=.5*(m.z*(d-c)-d-c),m.w=1,v.Matrix4.multiplyByVector(u,m,m)),r[12*h+3*p]=m.x,r[12*h+3*p+1]=m.y,r[12*h+3*p+2]=m.z}},T.createGeometry=function(t){var e=t._frustumType,a=t._frustum,i=t._origin,r=t._orientation,n=t._drawNearPlane,o=t._vertexFormat,s=n?6:5,f=new Float64Array(72);T._computeNearFarPlanes(i,r,e,a,f);var u=24;f[u]=f[12],f[u+1]=f[13],f[u+2]=f[14],f[u+3]=f[0],f[u+4]=f[1],f[u+5]=f[2],f[u+6]=f[9],f[u+7]=f[10],f[u+8]=f[11],f[u+9]=f[21],f[u+10]=f[22],f[u+11]=f[23],f[u+=12]=f[15],f[u+1]=f[16],f[u+2]=f[17],f[u+3]=f[3],f[u+4]=f[4],f[u+5]=f[5],f[u+6]=f[0],f[u+7]=f[1],f[u+8]=f[2],f[u+9]=f[12],f[u+10]=f[13],f[u+11]=f[14],f[u+=12]=f[3],f[u+1]=f[4],f[u+2]=f[5],f[u+3]=f[15],f[u+4]=f[16],f[u+5]=f[17],f[u+6]=f[18],f[u+7]=f[19],f[u+8]=f[20],f[u+9]=f[6],f[u+10]=f[7],f[u+11]=f[8],f[u+=12]=f[6],f[u+1]=f[7],f[u+2]=f[8],f[u+3]=f[18],f[u+4]=f[19],f[u+5]=f[20],f[u+6]=f[21],f[u+7]=f[22],f[u+8]=f[23],f[u+9]=f[9],f[u+10]=f[10],f[u+11]=f[11],n||(f=f.subarray(12));var l,h,p,d,c=new M.GeometryAttributes({position:new b.GeometryAttribute({componentDatatype:w.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:f})});(x.defined(o.normal)||x.defined(o.tangent)||x.defined(o.bitangent)||x.defined(o.st))&&(l=x.defined(o.normal)?new Float32Array(12*s):void 0,h=x.defined(o.tangent)?new Float32Array(12*s):void 0,p=x.defined(o.bitangent)?new Float32Array(12*s):void 0,d=x.defined(o.st)?new Float32Array(8*s):void 0,t=j,i=U,r=Q,e=g.Cartesian3.negate(t,K),a=g.Cartesian3.negate(i,Y),o=g.Cartesian3.negate(r,J),u=0,n&&(B(u,l,h,p,d,o,t,i),u+=12),B(u,l,h,p,d,r,e,i),B(u+=12,l,h,p,d,e,o,i),B(u+=12,l,h,p,d,a,o,e),B(u+=12,l,h,p,d,t,r,i),B(u+=12,l,h,p,d,i,r,e),x.defined(l)&&(c.normal=new b.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:l})),x.defined(h)&&(c.tangent=new b.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:h})),x.defined(p)&&(c.bitangent=new b.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:p})),x.defined(d)&&(c.st=new b.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:d})));for(var m=new Uint16Array(6*s),C=0;C<s;++C){var _=6*C,y=4*C;m[_]=y,m[1+_]=1+y,m[2+_]=2+y,m[3+_]=y,m[4+_]=2+y,m[5+_]=3+y}return new b.Geometry({attributes:c,indices:m,primitiveType:b.PrimitiveType.TRIANGLES,boundingSphere:v.BoundingSphere.fromVertices(f)})},t.FrustumGeometry=T,t.OrthographicFrustum=F,t.PerspectiveFrustum=R}); diff --git a/public/lib/Cesium/Workers/GeometryAttribute-7ef2d452.js b/public/lib/Cesium/Workers/GeometryAttribute-7ef2d452.js new file mode 100644 index 0000000..f50d72b --- /dev/null +++ b/public/lib/Cesium/Workers/GeometryAttribute-7ef2d452.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Transforms-5295b227","./WebGLConstants-95ceb4e9"],function(e,x,t,a,L,n){"use strict";var r=Object.freeze({NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3});function w(e,t,n,r){this[0]=a.defaultValue(e,0),this[1]=a.defaultValue(n,0),this[2]=a.defaultValue(t,0),this[3]=a.defaultValue(r,0)}w.packedLength=4,w.pack=function(e,t,n){return n=a.defaultValue(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t},w.unpack=function(e,t,n){return t=a.defaultValue(t,0),(n=!a.defined(n)?new w:n)[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n},w.clone=function(e,t){if(a.defined(e))return a.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new w(e[0],e[2],e[1],e[3])},w.fromArray=function(e,t,n){return t=a.defaultValue(t,0),(n=!a.defined(n)?new w:n)[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],n},w.fromColumnMajorArray=function(e,t){return w.clone(e,t)},w.fromRowMajorArray=function(e,t){return a.defined(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new w(e[0],e[1],e[2],e[3])},w.fromScale=function(e,t){return a.defined(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new w(e.x,0,0,e.y)},w.fromUniformScale=function(e,t){return a.defined(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new w(e,0,0,e)},w.fromRotation=function(e,t){var n=Math.cos(e),e=Math.sin(e);return a.defined(t)?(t[0]=n,t[1]=e,t[2]=-e,t[3]=n,t):new w(n,-e,e,n)},w.toArray=function(e,t){return a.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]},w.getElementIndex=function(e,t){return 2*e+t},w.getColumn=function(e,t,n){var r=2*t,t=e[r],r=e[1+r];return n.x=t,n.y=r,n},w.setColumn=function(e,t,n,r){t*=2;return(r=w.clone(e,r))[t]=n.x,r[1+t]=n.y,r},w.getRow=function(e,t,n){var r=e[t],t=e[t+2];return n.x=r,n.y=t,n},w.setRow=function(e,t,n,r){return(r=w.clone(e,r))[t]=n.x,r[t+2]=n.y,r};var i=new x.Cartesian2;w.getScale=function(e,t){return t.x=x.Cartesian2.magnitude(x.Cartesian2.fromElements(e[0],e[1],i)),t.y=x.Cartesian2.magnitude(x.Cartesian2.fromElements(e[2],e[3],i)),t};var u=new x.Cartesian2;w.getMaximumScale=function(e){return w.getScale(e,u),x.Cartesian2.maximumComponent(u)},w.multiply=function(e,t,n){var r=e[0]*t[0]+e[2]*t[1],a=e[0]*t[2]+e[2]*t[3],i=e[1]*t[0]+e[3]*t[1],t=e[1]*t[2]+e[3]*t[3];return n[0]=r,n[1]=i,n[2]=a,n[3]=t,n},w.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n},w.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n},w.multiplyByVector=function(e,t,n){var r=e[0]*t.x+e[2]*t.y,t=e[1]*t.x+e[3]*t.y;return n.x=r,n.y=t,n},w.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n},w.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.y,n[3]=e[3]*t.y,n},w.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},w.transpose=function(e,t){var n=e[0],r=e[2],a=e[1],e=e[3];return t[0]=n,t[1]=r,t[2]=a,t[3]=e,t},w.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t},w.equals=function(e,t){return e===t||a.defined(e)&&a.defined(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},w.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]},w.equalsEpsilon=function(e,t,n){return n=a.defaultValue(n,0),e===t||a.defined(e)&&a.defined(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n},w.IDENTITY=Object.freeze(new w(1,0,0,1)),w.ZERO=Object.freeze(new w(0,0,0,0)),w.COLUMN0ROW0=0,w.COLUMN0ROW1=1,w.COLUMN1ROW0=2,w.COLUMN1ROW1=3,Object.defineProperties(w.prototype,{length:{get:function(){return w.packedLength}}}),w.prototype.clone=function(e){return w.clone(this,e)},w.prototype.equals=function(e){return w.equals(this,e)},w.prototype.equalsEpsilon=function(e,t){return w.equalsEpsilon(this,e,t)},w.prototype.toString=function(){return"("+this[0]+", "+this[2]+")\n("+this[1]+", "+this[3]+")"};var o={POINTS:n.WebGLConstants.POINTS,LINES:n.WebGLConstants.LINES,LINE_LOOP:n.WebGLConstants.LINE_LOOP,LINE_STRIP:n.WebGLConstants.LINE_STRIP,TRIANGLES:n.WebGLConstants.TRIANGLES,TRIANGLE_STRIP:n.WebGLConstants.TRIANGLE_STRIP,TRIANGLE_FAN:n.WebGLConstants.TRIANGLE_FAN,validate:function(e){return e===o.POINTS||e===o.LINES||e===o.LINE_LOOP||e===o.LINE_STRIP||e===o.TRIANGLES||e===o.TRIANGLE_STRIP||e===o.TRIANGLE_FAN}},s=Object.freeze(o);function f(e){e=a.defaultValue(e,a.defaultValue.EMPTY_OBJECT),this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=a.defaultValue(e.primitiveType,s.TRIANGLES),this.boundingSphere=e.boundingSphere,this.geometryType=a.defaultValue(e.geometryType,r.NONE),this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}f.computeNumberOfVertices=function(e){var t,n,r=-1;for(t in e.attributes)e.attributes.hasOwnProperty(t)&&a.defined(e.attributes[t])&&a.defined(e.attributes[t].values)&&(r=(n=e.attributes[t]).values.length/n.componentsPerAttribute);return r};var g=new x.Cartographic,S=new x.Cartesian3,A=new L.Matrix4,O=[new x.Cartographic,new x.Cartographic,new x.Cartographic],M=[new x.Cartesian2,new x.Cartesian2,new x.Cartesian2],R=[new x.Cartesian2,new x.Cartesian2,new x.Cartesian2],v=new x.Cartesian3,V=new L.Quaternion,P=new L.Matrix4,G=new w;f._textureCoordinateRotationPoints=function(e,t,n,r){var a=x.Rectangle.center(r,g),i=x.Cartographic.toCartesian(a,n,S),a=L.Transforms.eastNorthUpToFixedFrame(i,n,A),u=L.Matrix4.inverse(a,A),o=M,s=O;s[0].longitude=r.west,s[0].latitude=r.south,s[1].longitude=r.west,s[1].latitude=r.north,s[2].longitude=r.east,s[2].latitude=r.south;for(var f=v,c=0;c<3;c++)x.Cartographic.toCartesian(s[c],n,f),f=L.Matrix4.multiplyByPointAsVector(u,f,f),o[c].x=f.x,o[c].y=f.y;var i=L.Quaternion.fromAxisAngle(x.Cartesian3.UNIT_Z,-t,V),l=L.Matrix3.fromQuaternion(i,P),d=e.length,y=Number.POSITIVE_INFINITY,m=Number.POSITIVE_INFINITY,p=Number.NEGATIVE_INFINITY,h=Number.NEGATIVE_INFINITY;for(c=0;c<d;c++)f=L.Matrix4.multiplyByPointAsVector(u,e[c],f),f=L.Matrix3.multiplyByVector(l,f,f),y=Math.min(y,f.x),m=Math.min(m,f.y),p=Math.max(p,f.x),h=Math.max(h,f.y);var N=w.fromRotation(t,G),I=R;I[0].x=y,I[0].y=m,I[1].x=y,I[1].y=h,I[2].x=p,I[2].y=m;var C=o[0],b=o[2].x-C.x,T=o[1].y-C.y;for(c=0;c<3;c++){var E=I[c];w.multiplyByVector(N,E,E),E.x=(E.x-C.x)/b,E.y=(E.y-C.y)/T}a=I[0],r=I[1],i=I[2],t=new Array(6);return x.Cartesian2.pack(a,t),x.Cartesian2.pack(r,t,2),x.Cartesian2.pack(i,t,4),t},e.Geometry=f,e.GeometryAttribute=function(e){e=a.defaultValue(e,a.defaultValue.EMPTY_OBJECT),this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=a.defaultValue(e.normalize,!1),this.values=e.values},e.GeometryType=r,e.Matrix2=w,e.PrimitiveType=s}); diff --git a/public/lib/Cesium/Workers/GeometryAttributes-a356f820.js b/public/lib/Cesium/Workers/GeometryAttributes-a356f820.js new file mode 100644 index 0000000..087c280 --- /dev/null +++ b/public/lib/Cesium/Workers/GeometryAttributes-a356f820.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574"],function(t,n){"use strict";t.GeometryAttributes=function(t){t=n.defaultValue(t,n.defaultValue.EMPTY_OBJECT),this.position=t.position,this.normal=t.normal,this.st=t.st,this.bitangent=t.bitangent,this.tangent=t.tangent,this.color=t.color}}); diff --git a/public/lib/Cesium/Workers/GeometryInstance-d18842cb.js b/public/lib/Cesium/Workers/GeometryInstance-d18842cb.js new file mode 100644 index 0000000..e1e9b79 --- /dev/null +++ b/public/lib/Cesium/Workers/GeometryInstance-d18842cb.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574","./Check-64f87f7d","./Transforms-5295b227"],function(e,t,i,r){"use strict";e.GeometryInstance=function(e){e=t.defaultValue(e,t.defaultValue.EMPTY_OBJECT),this.geometry=e.geometry,this.modelMatrix=r.Matrix4.clone(t.defaultValue(e.modelMatrix,r.Matrix4.IDENTITY)),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=t.defaultValue(e.attributes,{}),this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0}}); diff --git a/public/lib/Cesium/Workers/GeometryOffsetAttribute-b94750ca.js b/public/lib/Cesium/Workers/GeometryOffsetAttribute-b94750ca.js new file mode 100644 index 0000000..e69dd87 --- /dev/null +++ b/public/lib/Cesium/Workers/GeometryOffsetAttribute-b94750ca.js @@ -0,0 +1 @@ +define(["exports","./Check-64f87f7d","./when-ca391574"],function(e,t,l){"use strict";var f=Object.freeze({NONE:0,TOP:1,ALL:2});e.GeometryOffsetAttribute=f,e.arrayFill=function(e,t,f,a){if("function"==typeof e.fill)return e.fill(t,f,a);for(var r=e.length>>>0,n=(f=l.defaultValue(f,0))<0?Math.max(r+f,0):Math.min(f,r),i=(a=l.defaultValue(a,r))<0?Math.max(r+a,0):Math.min(a,r);n<i;)e[n]=t,n++;return e}}); diff --git a/public/lib/Cesium/Workers/GeometryPipeline-a588d10d.js b/public/lib/Cesium/Workers/GeometryPipeline-a588d10d.js new file mode 100644 index 0000000..c40b4ab --- /dev/null +++ b/public/lib/Cesium/Workers/GeometryPipeline-a588d10d.js @@ -0,0 +1 @@ +define(["exports","./AttributeCompression-a99f24b9","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3","./Transforms-5295b227","./ComponentDatatype-8f71e605","./EncodedCartesian3-c36ced29","./GeometryAttribute-7ef2d452","./IndexDatatype-4e56bcfa","./IntersectionTests-f5111308","./Plane-99b2becd"],function(e,A,R,t,V,L,z,w,d,S,P,D,a){"use strict";var g=new R.Cartesian3,T=new R.Cartesian3,x=new R.Cartesian3;var s={calculateACMR:function(e){var t=(e=V.defaultValue(e,V.defaultValue.EMPTY_OBJECT)).indices,r=e.maximumIndex,a=V.defaultValue(e.cacheSize,24),n=t.length;if(!V.defined(r))for(var r=0,i=0,s=t[i];i<n;)r<s&&(r=s),s=t[++i];for(var o=[],u=0;u<r+1;u++)o[u]=0;for(var p=a+1,d=0;d<n;++d)p-o[t[d]]>a&&(o[t[d]]=p,++p);return(p-a+1)/(n/3)}};s.tipsify=function(e){var t=(e=V.defaultValue(e,V.defaultValue.EMPTY_OBJECT)).indices,r=e.maximumIndex,a=V.defaultValue(e.cacheSize,24);function n(e,t,r,a,n,i,s){for(var o,u=-1,p=-1,d=0;d<r.length;){var l=r[d];a[l].numLiveTriangles&&(o=0,(p<(o=n-a[l].timeStamp+2*a[l].numLiveTriangles<=t?n-a[l].timeStamp:o)||-1===p)&&(p=o,u=l)),++d}return-1===u?function(e,t,r){for(;1<=t.length;){var a=t[t.length-1];if(t.splice(t.length-1,1),0<e[a].numLiveTriangles)return a}for(;v<r;){if(0<e[v].numLiveTriangles)return++v-1;++v}return-1}(a,i,s):u}var e=t.length,i=0,s=t[P=0],o=e;if(V.defined(r))i=r+1;else{for(;P<o;)i<s&&(i=s),s=t[++P];if(-1===i)return 0;++i}for(var u=[],p=0;p<i;p++)u[p]={numLiveTriangles:0,timeStamp:0,vertexTriangles:[]};for(var d=P=0;P<o;)u[t[P]].vertexTriangles.push(d),++u[t[P]].numLiveTriangles,u[t[P+1]].vertexTriangles.push(d),++u[t[P+1]].numLiveTriangles,u[t[P+2]].vertexTriangles.push(d),++u[t[P+2]].numLiveTriangles,++d,P+=3;var l,y=0,f=a+1,v=1,c=[],m=[],C=0,h=[],b=e/3,g=[];for(p=0;p<b;p++)g[p]=!1;for(;-1!==y;){for(var A,c=[],T=(A=u[y]).vertexTriangles.length,x=0;x<T;++x)if(!g[d=A.vertexTriangles[x]]){g[d]=!0;for(var P=d+d+d,w=0;w<3;++w)l=t[P],c.push(l),m.push(l),h[C]=l,++C,--(l=u[l]).numLiveTriangles,f-l.timeStamp>a&&(l.timeStamp=f,++f),++P}y=n(0,a,c,u,f,m,i)}return h};var r={};function o(e,t,r,a,n){e[t++]=r,e[t++]=a,e[t++]=a,e[t++]=n,e[t++]=n,e[t]=r}function v(e){var t,r,a={};for(t in e)e.hasOwnProperty(t)&&V.defined(e[t])&&V.defined(e[t].values)&&(r=e[t],a[t]=new S.GeometryAttribute({componentDatatype:r.componentDatatype,componentsPerAttribute:r.componentsPerAttribute,normalize:r.normalize,values:[]}));return a}r.toWireframe=function(e){var t=e.indices;if(V.defined(t)){switch(e.primitiveType){case S.PrimitiveType.TRIANGLES:e.indices=function(e){for(var t=e.length,r=t/3*6,a=P.IndexDatatype.createTypedArray(t,r),n=0,i=0;i<t;i+=3,n+=6)o(a,n,e[i],e[i+1],e[i+2]);return a}(t);break;case S.PrimitiveType.TRIANGLE_STRIP:e.indices=function(e){var t=e.length;if(3<=t){var r=6*(t-2),a=P.IndexDatatype.createTypedArray(t,r);o(a,0,e[0],e[1],e[2]);for(var n=6,i=3;i<t;++i,n+=6)o(a,n,e[i-1],e[i],e[i-2]);return a}return new Uint16Array}(t);break;case S.PrimitiveType.TRIANGLE_FAN:e.indices=function(e){if(0<e.length){for(var t=e.length-1,r=6*(t-1),a=P.IndexDatatype.createTypedArray(t,r),n=e[0],i=0,s=1;s<t;++s,i+=6)o(a,i,n,e[s],e[s+1]);return a}return new Uint16Array}(t)}e.primitiveType=S.PrimitiveType.LINES}return e},r.createLineSegmentsForVectors=function(e,t,r){t=V.defaultValue(t,"normal"),r=V.defaultValue(r,1e4);for(var a,n=e.attributes.position.values,i=e.attributes[t].values,s=n.length,o=new Float64Array(2*s),u=0,p=0;p<s;p+=3)o[u++]=n[p],o[u++]=n[p+1],o[u++]=n[p+2],o[u++]=n[p]+i[p]*r,o[u++]=n[p+1]+i[p+1]*r,o[u++]=n[p+2]+i[p+2]*r;e=e.boundingSphere;return V.defined(e)&&(a=new z.BoundingSphere(e.center,e.radius+r)),new S.Geometry({attributes:{position:new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:o})},primitiveType:S.PrimitiveType.LINES,boundingSphere:a})},r.createAttributeLocations=function(e){for(var t,r=["position","positionHigh","positionLow","position3DHigh","position3DLow","position2DHigh","position2DLow","pickColor","normal","st","tangent","bitangent","extrudeDirection","compressedAttributes"],a=e.attributes,n={},i=0,s=r.length,o=0;o<s;++o){var u=r[o];V.defined(a[u])&&(n[u]=i++)}for(t in a)a.hasOwnProperty(t)&&!V.defined(n[t])&&(n[t]=i++);return n},r.reorderForPreVertexCache=function(e){var t=S.Geometry.computeNumberOfVertices(e),r=e.indices;if(V.defined(r)){for(var a=new Int32Array(t),n=0;n<t;n++)a[n]=-1;for(var i,s=r,o=s.length,u=P.IndexDatatype.createTypedArray(t,o),p=0,d=0,l=0;p<o;)-1!==(i=a[s[p]])?u[d]=i:(a[i=s[p]]=l,u[d]=l,++l),++p,++d;e.indices=u;var y,f=e.attributes;for(y in f)if(f.hasOwnProperty(y)&&V.defined(f[y])&&V.defined(f[y].values)){for(var v=f[y],c=v.values,m=0,C=v.componentsPerAttribute,h=w.ComponentDatatype.createTypedArray(v.componentDatatype,l*C);m<t;){var b=a[m];if(-1!==b)for(var g=0;g<C;g++)h[C*b+g]=c[C*m+g];++m}v.values=h}}return e},r.reorderForPostVertexCache=function(e,t){var r=e.indices;if(e.primitiveType===S.PrimitiveType.TRIANGLES&&V.defined(r)){for(var a=r.length,n=0,i=0;i<a;i++)r[i]>n&&(n=r[i]);e.indices=s.tipsify({indices:r,maximumIndex:n,cacheSize:t})}return e},r.fitToUnsignedShortIndices=function(e){var t=[],r=S.Geometry.computeNumberOfVertices(e);if(V.defined(e.indices)&&r>=L.CesiumMath.SIXTY_FOUR_KILOBYTES){var a,n=[],i=[],s=0,o=v(e.attributes),u=e.indices,p=u.length;e.primitiveType===S.PrimitiveType.TRIANGLES?a=3:e.primitiveType===S.PrimitiveType.LINES?a=2:e.primitiveType===S.PrimitiveType.POINTS&&(a=1);for(var d=0;d<p;d+=a){for(var l=0;l<a;++l){var y=u[d+l],f=n[y];V.defined(f)||(f=s++,n[y]=f,function(e,t,r){for(var a in t)if(t.hasOwnProperty(a)&&V.defined(t[a])&&V.defined(t[a].values))for(var n=t[a],i=0;i<n.componentsPerAttribute;++i)e[a].values.push(n.values[r*n.componentsPerAttribute+i])}(o,e.attributes,y)),i.push(f)}s+a>=L.CesiumMath.SIXTY_FOUR_KILOBYTES&&(t.push(new S.Geometry({attributes:o,indices:i,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),n=[],i=[],s=0,o=v(e.attributes))}0!==i.length&&t.push(new S.Geometry({attributes:o,indices:i,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var y=new R.Cartesian3,f=new R.Cartographic;r.projectTo2D=function(e,t,r,a,n){for(var i=e.attributes[t],s=(n=V.defined(n)?n:new z.GeographicProjection).ellipsoid,o=i.values,u=new Float64Array(o.length),p=0,d=0;d<o.length;d+=3){var l=R.Cartesian3.fromArray(o,d,y),l=s.cartesianToCartographic(l,f),l=n.project(l,y);u[p++]=l.x,u[p++]=l.y,u[p++]=l.z}return e.attributes[r]=i,e.attributes[a]=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u}),delete e.attributes[t],e};var l={high:0,low:0};r.encodeAttribute=function(e,t,r,a){for(var n=e.attributes[t],i=n.values,s=i.length,o=new Float32Array(s),u=new Float32Array(s),p=0;p<s;++p)d.EncodedCartesian3.encode(i[p],l),o[p]=l.high,u[p]=l.low;n=n.componentsPerAttribute;return e.attributes[r]=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:n,values:o}),e.attributes[a]=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:n,values:u}),delete e.attributes[t],e};var i=new R.Cartesian3;function n(e,t){if(V.defined(t))for(var r=t.values,a=r.length,n=0;n<a;n+=3)R.Cartesian3.unpack(r,n,i),z.Matrix4.multiplyByPoint(e,i,i),R.Cartesian3.pack(i,r,n)}function u(e,t){if(V.defined(t))for(var r=t.values,a=r.length,n=0;n<a;n+=3)R.Cartesian3.unpack(r,n,i),z.Matrix3.multiplyByVector(e,i,i),i=R.Cartesian3.normalize(i,i),R.Cartesian3.pack(i,r,n)}var p=new z.Matrix4,c=new z.Matrix3;r.transformToWorldCoordinates=function(e){var t=e.modelMatrix;if(z.Matrix4.equals(t,z.Matrix4.IDENTITY))return e;var r=e.geometry.attributes;n(t,r.position),n(t,r.prevPosition),n(t,r.nextPosition),(V.defined(r.normal)||V.defined(r.tangent)||V.defined(r.bitangent))&&(z.Matrix4.inverse(t,p),z.Matrix4.transpose(p,p),z.Matrix4.getMatrix3(p,c),u(c,r.normal),u(c,r.tangent),u(c,r.bitangent));r=e.geometry.boundingSphere;return V.defined(r)&&(e.geometry.boundingSphere=z.BoundingSphere.transform(r,t,r)),e.modelMatrix=z.Matrix4.clone(z.Matrix4.IDENTITY),e};var I=new R.Cartesian3;function m(e,t){var r,a,n=e.length;e[0].modelMatrix;var i,s,o,u=V.defined(e[0][t].indices),p=e[0][t].primitiveType,d=function(e,t){var r,a=e.length,n={},i=e[0][t].attributes;for(r in i)if(i.hasOwnProperty(r)&&V.defined(i[r])&&V.defined(i[r].values)){for(var s=i[r],o=s.values.length,u=!0,p=1;p<a;++p){var d=e[p][t].attributes[r];if(!V.defined(d)||s.componentDatatype!==d.componentDatatype||s.componentsPerAttribute!==d.componentsPerAttribute||s.normalize!==d.normalize){u=!1;break}o+=d.values.length}u&&(n[r]=new S.GeometryAttribute({componentDatatype:s.componentDatatype,componentsPerAttribute:s.componentsPerAttribute,normalize:s.normalize,values:w.ComponentDatatype.createTypedArray(s.componentDatatype,o)}))}return n}(e,t);for(r in d)if(d.hasOwnProperty(r))for(i=d[r].values,y=b=0;y<n;++y)for(o=(s=e[y][t].attributes[r].values).length,a=0;a<o;++a)i[b++]=s[a];if(u){for(var l=0,y=0;y<n;++y)l+=e[y][t].indices.length;var f=S.Geometry.computeNumberOfVertices(new S.Geometry({attributes:d,primitiveType:S.PrimitiveType.POINTS})),v=P.IndexDatatype.createTypedArray(f,l),c=0,m=0;for(y=0;y<n;++y){for(var C=e[y][t].indices,h=C.length,b=0;b<h;++b)v[c++]=m+C[b];m+=S.Geometry.computeNumberOfVertices(e[y][t])}f=v}var g=new R.Cartesian3,A=0;for(y=0;y<n;++y){if(T=e[y][t].boundingSphere,!V.defined(T)){g=void 0;break}R.Cartesian3.add(T.center,g,g)}if(V.defined(g))for(R.Cartesian3.divideByScalar(g,n,g),y=0;y<n;++y){var T=e[y][t].boundingSphere,x=R.Cartesian3.magnitude(R.Cartesian3.subtract(T.center,g,I))+T.radius;A<x&&(A=x)}return new S.Geometry({attributes:d,indices:f,primitiveType:p,boundingSphere:V.defined(g)?new z.BoundingSphere(g,A):void 0})}r.combineInstances=function(e){for(var t=[],r=[],a=e.length,n=0;n<a;++n){var i=e[n];V.defined(i.geometry)?t.push(i):V.defined(i.westHemisphereGeometry)&&V.defined(i.eastHemisphereGeometry)&&r.push(i)}var s=[];return 0<t.length&&s.push(m(t,"geometry")),0<r.length&&(s.push(m(r,"westHemisphereGeometry")),s.push(m(r,"eastHemisphereGeometry"))),s};var O=new R.Cartesian3,E=new R.Cartesian3,N=new R.Cartesian3,M=new R.Cartesian3;r.computeNormal=function(e){for(var t=e.indices,r=e.attributes,a=r.position.values,n=r.position.values.length/3,i=t.length,s=new Array(n),o=new Array(i/3),u=new Array(i),p=0;p<n;p++)s[p]={indexOffset:0,count:0,currentCount:0};var d=0;for(p=0;p<i;p+=3){var l=t[p],y=t[p+1],f=t[p+2],v=3*l,c=3*y,m=3*f;E.x=a[v],E.y=a[1+v],E.z=a[2+v],N.x=a[c],N.y=a[1+c],N.z=a[2+c],M.x=a[m],M.y=a[1+m],M.z=a[2+m],s[l].count++,s[y].count++,s[f].count++,R.Cartesian3.subtract(N,E,N),R.Cartesian3.subtract(M,E,M),o[d]=R.Cartesian3.cross(N,M,new R.Cartesian3),d++}var C=0;for(p=0;p<n;p++)s[p].indexOffset+=C,C+=s[p].count;for(p=d=0;p<i;p+=3){var h,b=(h=s[t[p]]).indexOffset+h.currentCount;u[b]=d,h.currentCount++,u[(h=s[t[p+1]]).indexOffset+h.currentCount]=d,h.currentCount++,u[(h=s[t[p+2]]).indexOffset+h.currentCount]=d,h.currentCount++,d++}var g=new Float32Array(3*n);for(p=0;p<n;p++){var A=3*p;if(h=s[p],R.Cartesian3.clone(R.Cartesian3.ZERO,O),0<h.count){for(d=0;d<h.count;d++)R.Cartesian3.add(O,o[u[h.indexOffset+d]],O);R.Cartesian3.equalsEpsilon(R.Cartesian3.ZERO,O,L.CesiumMath.EPSILON10)&&R.Cartesian3.clone(o[u[h.indexOffset]],O)}R.Cartesian3.equalsEpsilon(R.Cartesian3.ZERO,O,L.CesiumMath.EPSILON10)&&(O.z=1),R.Cartesian3.normalize(O,O),g[A]=O.x,g[1+A]=O.y,g[2+A]=O.z}return e.attributes.normal=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:g}),e};var G=new R.Cartesian3,F=new R.Cartesian3,B=new R.Cartesian3;r.computeTangentAndBitangent=function(e){e.attributes;for(var t=e.indices,r=e.attributes.position.values,a=e.attributes.normal.values,n=e.attributes.st.values,i=e.attributes.position.values.length/3,s=t.length,o=new Array(3*i),u=0;u<o.length;u++)o[u]=0;for(u=0;u<s;u+=3){var p,d=t[u],l=t[u+1],y=t[u+2],f=3*l,v=3*y,c=2*d,m=2*l,C=2*y,h=r[p=3*d],b=r[p+1],l=r[p+2],y=n[c],d=n[1+c],c=n[1+m]-d,d=n[1+C]-d,y=1/((n[m]-y)*d-(n[C]-y)*c),h=(d*(r[f]-h)-c*(r[v]-h))*y,b=(d*(r[f+1]-b)-c*(r[v+1]-b))*y,y=(d*(r[f+2]-l)-c*(r[v+2]-l))*y;o[p]+=h,o[p+1]+=b,o[p+2]+=y,o[f]+=h,o[f+1]+=b,o[f+2]+=y,o[v]+=h,o[v+1]+=b,o[v+2]+=y}var g=new Float32Array(3*i),A=new Float32Array(3*i);for(u=0;u<i;u++){f=(p=3*u)+1,v=p+2;var T=R.Cartesian3.fromArray(a,p,G),x=R.Cartesian3.fromArray(o,p,B),P=R.Cartesian3.dot(T,x);R.Cartesian3.multiplyByScalar(T,P,F),R.Cartesian3.normalize(R.Cartesian3.subtract(x,F,x),x),g[p]=x.x,g[f]=x.y,g[v]=x.z,R.Cartesian3.normalize(R.Cartesian3.cross(T,x,x),x),A[p]=x.x,A[f]=x.y,A[v]=x.z}return e.attributes.tangent=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:g}),e.attributes.bitangent=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:A}),e};var k=new R.Cartesian2,_=new R.Cartesian3,q=new R.Cartesian3,U=new R.Cartesian3,Y=new R.Cartesian2;function C(e){switch(e.primitiveType){case S.PrimitiveType.TRIANGLE_FAN:return function(e){var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,3*(t-2));r[0]=1,r[1]=0,r[2]=2;for(var a=3,n=3;n<t;++n)r[a++]=n-1,r[a++]=0,r[a++]=n;return e.indices=r,e.primitiveType=S.PrimitiveType.TRIANGLES,e}(e);case S.PrimitiveType.TRIANGLE_STRIP:return function(e){var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,3*(t-2));r[0]=0,r[1]=1,r[2]=2,3<t&&(r[3]=0,r[4]=2,r[5]=3);for(var a=6,n=3;n<t-1;n+=2)r[a++]=n,r[a++]=n-1,r[a++]=n+1,n+2<t&&(r[a++]=n,r[a++]=n+1,r[a++]=n+2);return e.indices=r,e.primitiveType=S.PrimitiveType.TRIANGLES,e}(e);case S.PrimitiveType.TRIANGLES:return function(e){if(V.defined(e.indices))return e;for(var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,t),a=0;a<t;++a)r[a]=a;return e.indices=r,e}(e);case S.PrimitiveType.LINE_STRIP:return function(e){var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,2*(t-1));r[0]=0,r[1]=1;for(var a=2,n=2;n<t;++n)r[a++]=n-1,r[a++]=n;return e.indices=r,e.primitiveType=S.PrimitiveType.LINES,e}(e);case S.PrimitiveType.LINE_LOOP:return function(e){var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,2*t);r[0]=0,r[1]=1;for(var a=2,n=2;n<t;++n)r[a++]=n-1,r[a++]=n;return r[a++]=t-1,r[a]=0,e.indices=r,e.primitiveType=S.PrimitiveType.LINES,e}(e);case S.PrimitiveType.LINES:return function(e){if(V.defined(e.indices))return e;for(var t=S.Geometry.computeNumberOfVertices(e),r=P.IndexDatatype.createTypedArray(t,t),a=0;a<t;++a)r[a]=a;return e.indices=r,e}(e)}return e}function h(e,t){Math.abs(e.y)<L.CesiumMath.EPSILON6&&(e.y=t?-L.CesiumMath.EPSILON6:L.CesiumMath.EPSILON6)}r.compressVertices=function(e){var t=e.attributes.extrudeDirection;if(V.defined(t)){for(var r=t.values,a=r.length/3,n=new Float32Array(2*a),i=0,s=0;s<a;++s)R.Cartesian3.fromArray(r,3*s,_),R.Cartesian3.equals(_,R.Cartesian3.ZERO)?i+=2:(Y=A.AttributeCompression.octEncodeInRange(_,65535,Y),n[i++]=Y.x,n[i++]=Y.y);return e.attributes.compressedAttributes=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:n}),delete e.attributes.extrudeDirection,e}var o=e.attributes.normal,u=e.attributes.st,p=V.defined(o),d=V.defined(u);if(!p&&!d)return e;var l,y,f,v,c=e.attributes.tangent,t=e.attributes.bitangent,m=V.defined(c),C=V.defined(t);p&&(l=o.values),d&&(y=u.values),m&&(f=c.values),C&&(v=t.values);c=a=(p?l:y).length/(p?3:2),t=d&&p?2:1;c*=t+=m||C?1:0;var h=new Float32Array(c),b=0;for(s=0;s<a;++s){d&&(R.Cartesian2.fromArray(y,2*s,k),h[b++]=A.AttributeCompression.compressTextureCoordinates(k));var g=3*s;p&&V.defined(f)&&V.defined(v)?(R.Cartesian3.fromArray(l,g,_),R.Cartesian3.fromArray(f,g,q),R.Cartesian3.fromArray(v,g,U),A.AttributeCompression.octPack(_,q,U,k),h[b++]=k.x,h[b++]=k.y):(p&&(R.Cartesian3.fromArray(l,g,_),h[b++]=A.AttributeCompression.octEncodeFloat(_)),m&&(R.Cartesian3.fromArray(f,g,_),h[b++]=A.AttributeCompression.octEncodeFloat(_)),C&&(R.Cartesian3.fromArray(v,g,_),h[b++]=A.AttributeCompression.octEncodeFloat(_)))}return e.attributes.compressedAttributes=new S.GeometryAttribute({componentDatatype:w.ComponentDatatype.FLOAT,componentsPerAttribute:t,values:h}),p&&delete e.attributes.normal,d&&delete e.attributes.st,C&&delete e.attributes.bitangent,m&&delete e.attributes.tangent,e};var b=new R.Cartesian3;function Z(e,t,r,a){R.Cartesian3.add(e,R.Cartesian3.multiplyByScalar(R.Cartesian3.subtract(t,e,b),e.y/(e.y-t.y),b),r),R.Cartesian3.clone(r,a),h(r,!0),h(a,!1)}var H=new R.Cartesian3,W=new R.Cartesian3,X=new R.Cartesian3,j=new R.Cartesian3,J={positions:new Array(7),indices:new Array(9)};function K(e,t,r){if(!(0<=e.x||0<=t.x||0<=r.x)){!function(e,t,r){if(0!==e.y&&0!==t.y&&0!==r.y)return h(e,e.y<0),h(t,t.y<0),h(r,r.y<0);var a=Math.abs(e.y),n=Math.abs(t.y),i=Math.abs(r.y),n=n<a?i<a?L.CesiumMath.sign(e.y):L.CesiumMath.sign(r.y):i<n?L.CesiumMath.sign(t.y):L.CesiumMath.sign(r.y);h(e,n=n<0),h(t,n),h(r,n)}(e,t,r);var a=e.y<0,n=t.y<0,i=r.y<0,s=0;s+=a?1:0,s+=n?1:0,s+=i?1:0;var o=J.indices;1==s?(o[1]=3,o[2]=4,o[5]=6,o[7]=6,o[8]=5,a?(Z(e,t,H,X),Z(e,r,W,j),o[0]=0,o[3]=1,o[4]=2,o[6]=1):n?(Z(t,r,H,X),Z(t,e,W,j),o[0]=1,o[3]=2,o[4]=0,o[6]=2):i&&(Z(r,e,H,X),Z(r,t,W,j),o[0]=2,o[3]=0,o[4]=1,o[6]=0)):2==s&&(o[2]=4,o[4]=4,o[5]=3,o[7]=5,o[8]=6,a?n?i||(Z(r,e,H,X),Z(r,t,W,j),o[0]=0,o[1]=1,o[3]=0,o[6]=2):(Z(t,r,H,X),Z(t,e,W,j),o[0]=2,o[1]=0,o[3]=2,o[6]=1):(Z(e,t,H,X),Z(e,r,W,j),o[0]=1,o[1]=2,o[3]=1,o[6]=0));o=J.positions;return o[0]=e,o[1]=t,o[2]=r,o.length=3,1!=s&&2!=s||(o[3]=H,o[4]=W,o[5]=X,o[6]=j,o.length=7),J}}function Q(e,t){var r=e.attributes;if(0!==r.position.values.length){for(var a in r)r.hasOwnProperty(a)&&V.defined(r[a])&&V.defined(r[a].values)&&((a=r[a]).values=w.ComponentDatatype.createTypedArray(a.componentDatatype,a.values));var n=S.Geometry.computeNumberOfVertices(e);return e.indices=P.IndexDatatype.createTypedArray(n,e.indices),t&&(e.boundingSphere=z.BoundingSphere.fromVertices(r.position.values)),e}}function $(e){var t,r,a=e.attributes,n={};for(t in a)a.hasOwnProperty(t)&&V.defined(a[t])&&V.defined(a[t].values)&&(r=a[t],n[t]=new S.GeometryAttribute({componentDatatype:r.componentDatatype,componentsPerAttribute:r.componentsPerAttribute,normalize:r.normalize,values:[]}));return new S.Geometry({attributes:n,indices:[],primitiveType:e.primitiveType})}function ee(e,t,r){var a=V.defined(e.geometry.boundingSphere);t=Q(t,a),r=Q(r,a),V.defined(r)&&!V.defined(t)?e.geometry=r:!V.defined(r)&&V.defined(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=r,e.geometry=void 0)}function te(u,p){var d=new u,l=new u,y=new u;return function(e,t,r,a,n,i,s,o){e=u.fromArray(n,e*p,d),t=u.fromArray(n,t*p,l),r=u.fromArray(n,r*p,y);u.multiplyByScalar(e,a.x,e),u.multiplyByScalar(t,a.y,t),u.multiplyByScalar(r,a.z,r);e=u.add(e,t,e);u.add(e,r,e),o&&u.normalize(e,e),u.pack(e,i,s*p)}}var re=te(z.Cartesian4,4),ae=te(R.Cartesian3,3),ne=te(R.Cartesian2,2),ie=function(e,t,r,a,n,i,s){e=n[e]*a.x,t=n[t]*a.y,a=n[r]*a.z;i[s]=e+t+a>L.CesiumMath.EPSILON6?1:0},se=new R.Cartesian3,oe=new R.Cartesian3,ue=new R.Cartesian3,pe=new R.Cartesian3;function de(e,t,r,a,n,i,s,o,u,p,d,l,y,f,v,c){if(V.defined(i)||V.defined(s)||V.defined(o)||V.defined(u)||V.defined(p)||0!==f){var m,C=function(e,t,r,a,n){var i,s,o,u,p,d,l;if(V.defined(n)||(n=new R.Cartesian3),V.defined(t.z)){if(R.Cartesian3.equalsEpsilon(e,t,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_X,n);if(R.Cartesian3.equalsEpsilon(e,r,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_Y,n);if(R.Cartesian3.equalsEpsilon(e,a,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_Z,n);i=R.Cartesian3.subtract(r,t,g),s=R.Cartesian3.subtract(a,t,T),o=R.Cartesian3.subtract(e,t,x),u=R.Cartesian3.dot(i,i),y=R.Cartesian3.dot(i,s),p=R.Cartesian3.dot(i,o),d=R.Cartesian3.dot(s,s),l=R.Cartesian3.dot(s,o)}else{if(R.Cartesian2.equalsEpsilon(e,t,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_X,n);if(R.Cartesian2.equalsEpsilon(e,r,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_Y,n);if(R.Cartesian2.equalsEpsilon(e,a,L.CesiumMath.EPSILON14))return R.Cartesian3.clone(R.Cartesian3.UNIT_Z,n);i=R.Cartesian2.subtract(r,t,g),s=R.Cartesian2.subtract(a,t,T),o=R.Cartesian2.subtract(e,t,x),u=R.Cartesian2.dot(i,i),y=R.Cartesian2.dot(i,s),p=R.Cartesian2.dot(i,o),d=R.Cartesian2.dot(s,s),l=R.Cartesian2.dot(s,o)}n.y=d*p-y*l,n.z=u*l-y*p;var y=u*d-y*y;return 0!==n.y&&(n.y/=y),0!==n.z&&(n.z/=y),n.x=1-n.y-n.z,n}(a,R.Cartesian3.fromArray(n,3*e,se),R.Cartesian3.fromArray(n,3*t,oe),R.Cartesian3.fromArray(n,3*r,ue),pe);if(V.defined(i)&&ae(e,t,r,C,i,l.normal.values,c,!0),V.defined(p)&&(n=R.Cartesian3.fromArray(p,3*e,se),i=R.Cartesian3.fromArray(p,3*t,oe),p=R.Cartesian3.fromArray(p,3*r,ue),R.Cartesian3.multiplyByScalar(n,C.x,n),R.Cartesian3.multiplyByScalar(i,C.y,i),R.Cartesian3.multiplyByScalar(p,C.z,p),R.Cartesian3.equals(n,R.Cartesian3.ZERO)&&R.Cartesian3.equals(i,R.Cartesian3.ZERO)&&R.Cartesian3.equals(p,R.Cartesian3.ZERO)?((m=se).x=0,m.y=0,m.z=0):(m=R.Cartesian3.add(n,i,n),R.Cartesian3.add(m,p,m),R.Cartesian3.normalize(m,m)),R.Cartesian3.pack(m,l.extrudeDirection.values,3*c)),V.defined(d)&&ie(e,t,r,C,d,l.applyOffset.values,c),V.defined(s)&&ae(e,t,r,C,s,l.tangent.values,c,!0),V.defined(o)&&ae(e,t,r,C,o,l.bitangent.values,c,!0),V.defined(u)&&ne(e,t,r,C,u,l.st.values,c),0<f)for(var h=0;h<f;h++){var b=y[h];!function(e,t,r,a,n,i,s){var o=i.componentsPerAttribute,u=i.values,p=s.values;switch(o){case 4:re(e,t,r,a,u,p,n,!1);break;case 3:ae(e,t,r,a,u,p,n,!1);break;case 2:ne(e,t,r,a,u,p,n,!1);break;default:p[n]=u[e]*a.x+u[t]*a.y+u[r]*a.z}}(e,t,r,C,c,v[b],l[b])}}}function le(e,t,r,a,n,i){var s=e.position.values.length/3;if(-1===n)return e.position.values.push(i.x,i.y,i.z),t.push(s),s;a=a[n],n=r[a];return-1===n?(r[a]=s,e.position.values.push(i.x,i.y,i.z),t.push(s),s):(t.push(n),n)}var ye={position:!0,normal:!0,bitangent:!0,tangent:!0,st:!0,extrudeDirection:!0,applyOffset:!0};function fe(e){var t,r=e.geometry,a=r.attributes,n=a.position.values,i=V.defined(a.normal)?a.normal.values:void 0,s=V.defined(a.bitangent)?a.bitangent.values:void 0,o=V.defined(a.tangent)?a.tangent.values:void 0,u=V.defined(a.st)?a.st.values:void 0,p=V.defined(a.extrudeDirection)?a.extrudeDirection.values:void 0,d=V.defined(a.applyOffset)?a.applyOffset.values:void 0,l=r.indices,y=[];for(t in a)a.hasOwnProperty(t)&&!ye[t]&&V.defined(a[t])&&y.push(t);var f,v,c=y.length,m=$(r),C=$(r),h=[];h.length=n.length/3;var b=[];for(b.length=n.length/3,A=0;A<h.length;++A)h[A]=-1,b[A]=-1;for(var g=l.length,A=0;A<g;A+=3){var T=l[A],x=l[A+1],P=l[A+2],w=R.Cartesian3.fromArray(n,3*T),S=R.Cartesian3.fromArray(n,3*x),I=R.Cartesian3.fromArray(n,3*P),O=K(w,S,I);if(V.defined(O)&&3<O.positions.length)for(var E=O.positions,N=O.indices,L=N.length,z=0;z<L;++z){var D=N[z],M=E[D],G=M.y<0?(f=C.attributes,v=C.indices,h):(f=m.attributes,v=m.indices,b);de(T,x,P,M,n,i,o,s,u,p,d,f,y,c,a,le(f,v,G,l,D<3?A+D:-1,M))}else V.defined(O)&&(w=O.positions[0],S=O.positions[1],I=O.positions[2]),G=w.y<0?(f=C.attributes,v=C.indices,h):(f=m.attributes,v=m.indices,b),de(T,x,P,w,n,i,o,s,u,p,d,f,y,c,a,le(f,v,G,l,A,w)),de(T,x,P,S,n,i,o,s,u,p,d,f,y,c,a,le(f,v,G,l,A+1,S)),de(T,x,P,I,n,i,o,s,u,p,d,f,y,c,a,le(f,v,G,l,A+2,I))}ee(e,C,m)}var ve=a.Plane.fromPointNormal(R.Cartesian3.ZERO,R.Cartesian3.UNIT_Y),ce=new R.Cartesian3,me=new R.Cartesian3;function Ce(e,t,r,a,n,i,s){V.defined(s)&&(a=R.Cartesian3.fromArray(a,3*e,se),R.Cartesian3.equalsEpsilon(a,r,L.CesiumMath.EPSILON10)?i.applyOffset.values[n]=s[e]:i.applyOffset.values[n]=s[t])}function he(e){var t,r=e.geometry,a=r.attributes,n=a.position.values,i=V.defined(a.applyOffset)?a.applyOffset.values:void 0,s=r.indices,o=$(r),u=$(r),p=s.length,d=[];d.length=n.length/3;var l=[];for(l.length=n.length/3,t=0;t<d.length;++t)d[t]=-1,l[t]=-1;for(t=0;t<p;t+=2){var y=s[t],f=s[t+1],v=R.Cartesian3.fromArray(n,3*y,se),c=R.Cartesian3.fromArray(n,3*f,oe);Math.abs(v.y)<L.CesiumMath.EPSILON6&&(v.y<0?v.y=-L.CesiumMath.EPSILON6:v.y=L.CesiumMath.EPSILON6),Math.abs(c.y)<L.CesiumMath.EPSILON6&&(c.y<0?c.y=-L.CesiumMath.EPSILON6:c.y=L.CesiumMath.EPSILON6);var m,C,h,b,g=o.attributes,A=o.indices,T=l,x=u.attributes,P=u.indices,w=d,S=D.IntersectionTests.lineSegmentPlane(v,c,ve,ue);V.defined(S)?(m=R.Cartesian3.multiplyByScalar(R.Cartesian3.UNIT_Y,5*L.CesiumMath.EPSILON9,ce),v.y<0&&(R.Cartesian3.negate(m,m),g=u.attributes,A=u.indices,T=d,x=o.attributes,P=o.indices,w=l),C=R.Cartesian3.add(S,m,me),Ce(y,f,v,n,le(g,A,T,s,t,v),g,i),Ce(y,f,C,n,le(g,A,T,s,-1,C),g,i),R.Cartesian3.negate(m,m),R.Cartesian3.add(S,m,C),Ce(y,f,C,n,le(x,P,w,s,-1,C),x,i),Ce(y,f,c,n,le(x,P,w,s,t+1,c),x,i)):(x=v.y<0?(h=u.attributes,b=u.indices,d):(h=o.attributes,b=o.indices,l),Ce(y,f,v,n,le(h,b,x,s,t,v),h,i),Ce(y,f,c,n,le(h,b,x,s,t+1,c),h,i))}ee(e,u,o)}var be=new R.Cartesian2,ge=new R.Cartesian2,Ae=new R.Cartesian3,Te=new R.Cartesian3,xe=new R.Cartesian3,Pe=new R.Cartesian3,we=new R.Cartesian3,Se=new R.Cartesian3,Ie=new z.Cartesian4;function Oe(e){for(var e=e.attributes,t=e.position.values,r=e.prevPosition.values,a=e.nextPosition.values,n=t.length,i=0;i<n;i+=3){var s,o=R.Cartesian3.unpack(t,i,Ae);0<o.x||(s=R.Cartesian3.unpack(r,i,Te),(o.y<0&&0<s.y||0<o.y&&s.y<0)&&(0<i-3?(r[i]=t[i-3],r[i+1]=t[i-2],r[i+2]=t[i-1]):R.Cartesian3.pack(o,r,i)),s=R.Cartesian3.unpack(a,i,xe),(o.y<0&&0<s.y||0<o.y&&s.y<0)&&(i+3<n?(a[i]=t[i+3],a[i+1]=t[i+4],a[i+2]=t[i+5]):R.Cartesian3.pack(o,a,i)))}}var Ee=5*L.CesiumMath.EPSILON9,Ne=L.CesiumMath.EPSILON6;r.splitLongitude=function(e){var t=e.geometry,r=t.boundingSphere;if(V.defined(r)&&(0<r.center.x-r.radius||z.BoundingSphere.intersectPlane(r,a.Plane.ORIGIN_ZX_PLANE)!==z.Intersect.INTERSECTING))return e;if(t.geometryType!==S.GeometryType.NONE)switch(t.geometryType){case S.GeometryType.POLYLINES:!function(e){for(var t=e.geometry,r=t.attributes,a=r.position.values,n=r.prevPosition.values,i=r.nextPosition.values,s=r.expandAndWidth.values,o=V.defined(r.st)?r.st.values:void 0,u=V.defined(r.color)?r.color.values:void 0,p=$(t),d=$(t),l=!1,y=a.length/3,f=0;f<y;f+=4){var v=f,c=f+2,m=R.Cartesian3.fromArray(a,3*v,Ae),C=R.Cartesian3.fromArray(a,3*c,Te);if(Math.abs(m.y)<Ne)for(m.y=Ne*(C.y<0?-1:1),a[3*f+1]=m.y,a[3*(f+1)+1]=m.y,O=3*v;O<3*v+12;O+=3)n[O]=a[3*f],n[O+1]=a[3*f+1],n[O+2]=a[3*f+2];if(Math.abs(C.y)<Ne)for(C.y=Ne*(m.y<0?-1:1),a[3*(f+2)+1]=C.y,a[3*(f+3)+1]=C.y,O=3*v;O<3*v+12;O+=3)i[O]=a[3*(f+2)],i[O+1]=a[3*(f+2)+1],i[O+2]=a[3*(f+2)+2];var h=p.attributes,b=p.indices,g=d.attributes,A=d.indices,T=D.IntersectionTests.lineSegmentPlane(m,C,ve,Pe);if(V.defined(T)){var l=!0,x=R.Cartesian3.multiplyByScalar(R.Cartesian3.UNIT_Y,Ee,we);m.y<0&&(R.Cartesian3.negate(x,x),h=d.attributes,b=d.indices,g=p.attributes,A=p.indices);var P=R.Cartesian3.add(T,x,Se);h.position.values.push(m.x,m.y,m.z,m.x,m.y,m.z),h.position.values.push(P.x,P.y,P.z),h.position.values.push(P.x,P.y,P.z),h.prevPosition.values.push(n[3*v],n[3*v+1],n[3*v+2]),h.prevPosition.values.push(n[3*v+3],n[3*v+4],n[3*v+5]),h.prevPosition.values.push(m.x,m.y,m.z,m.x,m.y,m.z),h.nextPosition.values.push(P.x,P.y,P.z),h.nextPosition.values.push(P.x,P.y,P.z),h.nextPosition.values.push(P.x,P.y,P.z),h.nextPosition.values.push(P.x,P.y,P.z),R.Cartesian3.negate(x,x),R.Cartesian3.add(T,x,P),g.position.values.push(P.x,P.y,P.z),g.position.values.push(P.x,P.y,P.z),g.position.values.push(C.x,C.y,C.z,C.x,C.y,C.z),g.prevPosition.values.push(P.x,P.y,P.z),g.prevPosition.values.push(P.x,P.y,P.z),g.prevPosition.values.push(P.x,P.y,P.z),g.prevPosition.values.push(P.x,P.y,P.z),g.nextPosition.values.push(C.x,C.y,C.z,C.x,C.y,C.z),g.nextPosition.values.push(i[3*c],i[3*c+1],i[3*c+2]),g.nextPosition.values.push(i[3*c+3],i[3*c+4],i[3*c+5]);var w=R.Cartesian2.fromArray(s,2*v,be),S=Math.abs(w.y);h.expandAndWidth.values.push(-1,S,1,S),h.expandAndWidth.values.push(-1,-S,1,-S),g.expandAndWidth.values.push(-1,S,1,S),g.expandAndWidth.values.push(-1,-S,1,-S);x=R.Cartesian3.magnitudeSquared(R.Cartesian3.subtract(T,m,xe));if(x/=R.Cartesian3.magnitudeSquared(R.Cartesian3.subtract(C,m,xe)),V.defined(u)){for(var P=z.Cartesian4.fromArray(u,4*v,Ie),I=z.Cartesian4.fromArray(u,4*c,Ie),w=L.CesiumMath.lerp(P.x,I.x,x),S=L.CesiumMath.lerp(P.y,I.y,x),T=L.CesiumMath.lerp(P.z,I.z,x),I=L.CesiumMath.lerp(P.w,I.w,x),O=4*v;O<4*v+8;++O)h.color.values.push(u[O]);for(h.color.values.push(w,S,T,I),h.color.values.push(w,S,T,I),g.color.values.push(w,S,T,I),g.color.values.push(w,S,T,I),O=4*c;O<4*c+8;++O)g.color.values.push(u[O])}if(V.defined(o)){var I=R.Cartesian2.fromArray(o,2*v,be),E=R.Cartesian2.fromArray(o,2*(f+3),ge),x=L.CesiumMath.lerp(I.x,E.x,x);for(O=2*v;O<2*v+4;++O)h.st.values.push(o[O]);for(h.st.values.push(x,I.y),h.st.values.push(x,E.y),g.st.values.push(x,I.y),g.st.values.push(x,E.y),O=2*c;O<2*c+4;++O)g.st.values.push(o[O])}E=h.position.values.length/3-4,b.push(E,E+2,E+1),b.push(E+1,E+2,E+3),E=g.position.values.length/3-4,A.push(E,E+2,E+1),A.push(E+1,E+2,E+3)}else{var N,A=m.y<0?(N=d.attributes,d.indices):(N=p.attributes,p.indices);for(N.position.values.push(m.x,m.y,m.z),N.position.values.push(m.x,m.y,m.z),N.position.values.push(C.x,C.y,C.z),N.position.values.push(C.x,C.y,C.z),O=3*f;O<3*f+12;++O)N.prevPosition.values.push(n[O]),N.nextPosition.values.push(i[O]);for(O=2*f;O<2*f+8;++O)N.expandAndWidth.values.push(s[O]),V.defined(o)&&N.st.values.push(o[O]);if(V.defined(u))for(O=4*f;O<4*f+16;++O)N.color.values.push(u[O]);E=N.position.values.length/3-4,A.push(E,E+2,E+1),A.push(E+1,E+2,E+3)}}l&&(Oe(d),Oe(p)),ee(e,d,p)}(e);break;case S.GeometryType.TRIANGLES:fe(e);break;case S.GeometryType.LINES:he(e)}else C(t),t.primitiveType===S.PrimitiveType.TRIANGLES?fe(e):t.primitiveType===S.PrimitiveType.LINES&&he(e);return e},e.GeometryPipeline=r}); diff --git a/public/lib/Cesium/Workers/IndexDatatype-4e56bcfa.js b/public/lib/Cesium/Workers/IndexDatatype-4e56bcfa.js new file mode 100644 index 0000000..6562cdd --- /dev/null +++ b/public/lib/Cesium/Workers/IndexDatatype-4e56bcfa.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574","./Check-64f87f7d","./Math-b53708b3","./WebGLConstants-95ceb4e9"],function(e,r,t,N,n){"use strict";var E={UNSIGNED_BYTE:n.WebGLConstants.UNSIGNED_BYTE,UNSIGNED_SHORT:n.WebGLConstants.UNSIGNED_SHORT,UNSIGNED_INT:n.WebGLConstants.UNSIGNED_INT,getSizeInBytes:function(e){switch(e){case E.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case E.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case E.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}},fromSizeInBytes:function(e){switch(e){case 2:return E.UNSIGNED_SHORT;case 4:return E.UNSIGNED_INT;case 1:return E.UNSIGNED_BYTE}},validate:function(e){return r.defined(e)&&(e===E.UNSIGNED_BYTE||e===E.UNSIGNED_SHORT||e===E.UNSIGNED_INT)},createTypedArray:function(e,r){return new(e>=N.CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(r)},createTypedArrayFromArrayBuffer:function(e,r,t,n){return new(e>=N.CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(r,t,n)}},n=Object.freeze(E);e.IndexDatatype=n}); diff --git a/public/lib/Cesium/Workers/IntersectionTests-f5111308.js b/public/lib/Cesium/Workers/IntersectionTests-f5111308.js new file mode 100644 index 0000000..e37dca8 --- /dev/null +++ b/public/lib/Cesium/Workers/IntersectionTests-f5111308.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./when-ca391574","./Check-64f87f7d","./Transforms-5295b227","./Math-b53708b3"],function(a,O,d,t,x,y){"use strict";var P={};function i(a,t,e){var r=a+t;return y.CesiumMath.sign(a)!==y.CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(a),Math.abs(t)))<e?0:r}P.computeDiscriminant=function(a,t,e){return t*t-4*a*e},P.computeRealRoots=function(a,t,e){if(0===a)return 0===t?[]:[-e/t];if(0===t){if(0===e)return[0,0];var r=Math.abs(e),n=Math.abs(a);if(r<n&&r/n<y.CesiumMath.EPSILON14)return[0,0];if(n<r&&n/r<y.CesiumMath.EPSILON14)return[];if((n=-e/a)<0)return[];r=Math.sqrt(n);return[-r,r]}if(0===e)return(n=-t/a)<0?[n,0]:[0,n];n=i(t*t,-(4*a*e),y.CesiumMath.EPSILON14);if(n<0)return[];n=-.5*i(t,y.CesiumMath.sign(t)*Math.sqrt(n),y.CesiumMath.EPSILON14);return 0<t?[n/a,e/n]:[e/n,n/a]};var g={};function s(a,t,e,r){var n=a,i=t/3,s=e/3,o=r,u=n*s,C=i*o,c=i*i,l=s*s,h=n*s-c,a=n*o-i*s,t=i*o-l,e=4*h*t-a*a;if(e<0){var r=u*l<=c*C?-2*i*(m=h)+(f=n)*a:-(f=o)*a+2*s*(m=t),M=-(r<0?-1:1)*Math.abs(f)*Math.sqrt(-e),f=(d=M-r)/2,f=f<0?-Math.pow(-f,1/3):Math.pow(f,1/3),M=d===M?-f:-m/f,M=m<=0?f+M:-r/(f*f+M*M+m);return u*l<=c*C?[(M-i)/n]:[-o/(M+s)]}var m=h,u=-2*i*h+n*a,l=t,c=-o*a+2*s*t,C=Math.sqrt(e),h=Math.sqrt(3)/2,a=Math.abs(Math.atan2(n*C,-u)/3);M=2*Math.sqrt(-m);t=Math.cos(a);d=M*t;var e=M*(-t/2-h*Math.sin(a)),u=2*i<d+e?d-i:e-i,m=n,n=u/m,a=Math.abs(Math.atan2(o*C,-c)/3),o=-o,a=(d=(M=2*Math.sqrt(-l))*(t=Math.cos(a)))+(e=M*(-t/2-h*Math.sin(a)))<2*s?d+s:e+s,d=o/a,e=-u*a-m*o,a=(s*e-i*(u*o))/(-i*e+s*(m*a));return n<=a?n<=d?a<=d?[n,a,d]:[n,d,a]:[d,n,a]:n<=d?[a,n,d]:a<=d?[a,d,n]:[d,a,n]}g.computeDiscriminant=function(a,t,e,r){var n=t*t,i=e*e;return 18*a*t*e*r+n*i-27*(a*a)*(r*r)-4*(a*i*e+n*t*r)},g.computeRealRoots=function(a,t,e,r){var n;if(0===a)return P.computeRealRoots(t,e,r);if(0!==t)return 0===e?0===r?(i=-t/a)<0?[i,0,0]:[0,0,i]:s(a,t,0,r):0===r?0===(n=P.computeRealRoots(a,t,e)).length?[0]:n[1]<=0?[n[0],n[1],0]:0<=n[0]?[0,n[0],n[1]]:[n[0],0,n[1]]:s(a,t,e,r);if(0!==e)return 0===r?0===(n=P.computeRealRoots(a,0,e)).Length?[0]:[n[0],0,n[1]]:s(a,0,e,r);if(0===r)return[0,0,0];var i=(i=-r/a)<0?-Math.pow(-i,1/3):Math.pow(i,1/3);return[i,i,i]};var b={};function C(a,t,e,r){var n=a*a,i=t-3*n/8,s=e-t*a/2+n*a/8,r=r-e*a/4+t*n/16-3*n*n/256,e=g.computeRealRoots(1,2*i,i*i-4*r,-s*s);if(0<e.length){t=-a/4,n=e[e.length-1];if(Math.abs(n)<y.CesiumMath.EPSILON14){a=P.computeRealRoots(1,i,r);if(2===a.length){var e=a[0],o=a[1];if(0<=e&&0<=o){r=Math.sqrt(e),a=Math.sqrt(o);return[t-a,t-r,t+r,t+a]}if(0<=e&&o<0)return[t-(u=Math.sqrt(e)),t+u];if(e<0&&0<=o)return[t-(u=Math.sqrt(o)),t+u]}return[]}if(0<n){var o=Math.sqrt(n),u=(i+n-s/o)/2,s=(i+n+s/o)/2,u=P.computeRealRoots(1,o,u),s=P.computeRealRoots(1,-o,s);return 0!==u.length?(u[0]+=t,u[1]+=t,0!==s.length?(s[0]+=t,s[1]+=t,u[1]<=s[0]?[u[0],u[1],s[0],s[1]]:s[1]<=u[0]?[s[0],s[1],u[0],u[1]]:u[0]>=s[0]&&u[1]<=s[1]?[s[0],u[0],u[1],s[1]]:s[0]>=u[0]&&s[1]<=u[1]?[u[0],s[0],s[1],u[1]]:u[0]>s[0]&&u[0]<s[1]?[s[0],u[0],s[1],u[1]]:[u[0],s[0],u[1],s[1]]):u):0!==s.length?(s[0]+=t,s[1]+=t,s):[]}}return[]}function c(a,t,e,r){var n=a*a,i=-2*t,s=e*a+t*t-4*r,o=n*r-e*t*a+e*e,u=g.computeRealRoots(1,i,s,o);if(0<u.length){var C,c,l,h,M=u[0],i=t-M,s=i*i,o=a/2,u=i/2,t=s-4*r,i=s+4*Math.abs(r),s=n-4*M,n=n+4*Math.abs(M);c=M<0||t*n<s*i?(C=(s=Math.sqrt(s))/2,0===s?0:(a*u-e)/s):(C=0===(c=Math.sqrt(t))?0:(a*u-e)/c,c/2),0==o&&0===C?h=l=0:y.CesiumMath.sign(o)===y.CesiumMath.sign(C)?h=M/(l=o+C):l=M/(h=o-C),0==u&&0===c?m=f=0:y.CesiumMath.sign(u)===y.CesiumMath.sign(c)?m=r/(f=u+c):f=r/(m=u-c);var f=P.computeRealRoots(1,l,f),m=P.computeRealRoots(1,h,m);if(0!==f.length)return 0!==m.length?f[1]<=m[0]?[f[0],f[1],m[0],m[1]]:m[1]<=f[0]?[m[0],m[1],f[0],f[1]]:f[0]>=m[0]&&f[1]<=m[1]?[m[0],f[0],f[1],m[1]]:m[0]>=f[0]&&m[1]<=f[1]?[f[0],m[0],m[1],f[1]]:f[0]>m[0]&&f[0]<m[1]?[m[0],f[0],m[1],f[1]]:[f[0],m[0],f[1],m[1]]:f;if(0!==m.length)return m}return[]}function e(a,t){t=O.Cartesian3.clone(d.defaultValue(t,O.Cartesian3.ZERO)),O.Cartesian3.equals(t,O.Cartesian3.ZERO)||O.Cartesian3.normalize(t,t),this.origin=O.Cartesian3.clone(d.defaultValue(a,O.Cartesian3.ZERO)),this.direction=t}b.computeDiscriminant=function(a,t,e,r,n){var i=a*a,s=t*t,o=s*t,u=e*e,C=u*e,c=r*r,l=c*r,h=n*n;return s*u*c-4*o*l-4*a*C*c+18*a*t*e*l-27*i*c*c+256*(i*a)*(h*n)+n*(18*o*e*r-4*s*C+16*a*u*u-80*a*t*u*r-6*a*s*c+144*i*e*c)+h*(144*a*s*e-27*s*s-128*i*u-192*i*t*r)},b.computeRealRoots=function(a,t,e,r,n){if(Math.abs(a)<y.CesiumMath.EPSILON15)return g.computeRealRoots(t,e,r,n);var i=t/a,s=e/a,o=r/a,u=n/a,a=i<0?1:0;switch(a+=s<0?a+1:a,a+=o<0?a+1:a,a+=u<0?a+1:a){case 0:return C(i,s,o,u);case 1:case 2:return c(i,s,o,u);case 3:case 4:return C(i,s,o,u);case 5:return c(i,s,o,u);case 6:case 7:return C(i,s,o,u);case 8:return c(i,s,o,u);case 9:case 10:return C(i,s,o,u);case 11:return c(i,s,o,u);case 12:case 13:case 14:case 15:return C(i,s,o,u);default:return}},e.clone=function(a,t){if(d.defined(a))return d.defined(t)?(t.origin=O.Cartesian3.clone(a.origin),t.direction=O.Cartesian3.clone(a.direction),t):new e(a.origin,a.direction)},e.getPoint=function(a,t,e){return d.defined(e)||(e=new O.Cartesian3),e=O.Cartesian3.multiplyByScalar(a.direction,t,e),O.Cartesian3.add(a.origin,e,e)};var l={rayPlane:function(a,t,e){d.defined(e)||(e=new O.Cartesian3);var r=a.origin,n=a.direction,i=t.normal,a=O.Cartesian3.dot(i,n);if(!(Math.abs(a)<y.CesiumMath.EPSILON15)){a=(-t.distance-O.Cartesian3.dot(i,r))/a;if(!(a<0))return e=O.Cartesian3.multiplyByScalar(n,a,e),O.Cartesian3.add(r,e,e)}}},M=new O.Cartesian3,f=new O.Cartesian3,m=new O.Cartesian3,p=new O.Cartesian3,v=new O.Cartesian3;l.rayTriangleParametric=function(a,t,e,r,n){n=d.defaultValue(n,!1);var i,s,o,u=a.origin,C=a.direction,c=O.Cartesian3.subtract(e,t,M),a=O.Cartesian3.subtract(r,t,f),e=O.Cartesian3.cross(C,a,m),r=O.Cartesian3.dot(c,e);if(n){if(r<y.CesiumMath.EPSILON6)return;if(h=O.Cartesian3.subtract(u,t,p),(l=O.Cartesian3.dot(h,e))<0||r<l)return;if(i=O.Cartesian3.cross(h,c,v),(s=O.Cartesian3.dot(C,i))<0||r<l+s)return;o=O.Cartesian3.dot(a,i)/r}else{if(Math.abs(r)<y.CesiumMath.EPSILON6)return;var l,r=1/r,h=O.Cartesian3.subtract(u,t,p);if((l=O.Cartesian3.dot(h,e)*r)<0||1<l)return;if(i=O.Cartesian3.cross(h,c,v),(s=O.Cartesian3.dot(C,i)*r)<0||1<l+s)return;o=O.Cartesian3.dot(a,i)*r}return o},l.rayTriangle=function(a,t,e,r,n,i){n=l.rayTriangleParametric(a,t,e,r,n);if(d.defined(n)&&!(n<0))return d.defined(i)||(i=new O.Cartesian3),O.Cartesian3.multiplyByScalar(a.direction,n,i),O.Cartesian3.add(a.origin,i,i)};var u=new e;l.lineSegmentTriangle=function(a,t,e,r,n,i,s){var o=u;O.Cartesian3.clone(a,o.origin),O.Cartesian3.subtract(t,a,o.direction),O.Cartesian3.normalize(o.direction,o.direction);i=l.rayTriangleParametric(o,e,r,n,i);if(!(!d.defined(i)||i<0||i>O.Cartesian3.distance(a,t)))return d.defined(s)||(s=new O.Cartesian3),O.Cartesian3.multiplyByScalar(o.direction,i,s),O.Cartesian3.add(o.origin,s,s)};var o={root0:0,root1:0};function h(a,t,e){d.defined(e)||(e=new x.Interval);var r=a.origin,n=a.direction,a=t.center,t=t.radius*t.radius,a=O.Cartesian3.subtract(r,a,m),t=function(a,t,e,r){if(!((i=t*t-4*a*e)<0)){if(0<i){var n=1/(2*a),e=Math.sqrt(i),i=(-t+e)*n,n=(-t-e)*n;return i<n?(r.root0=i,r.root1=n):(r.root0=n,r.root1=i),r}a=-t/(2*a);if(0!=a)return r.root0=r.root1=a,r}}(O.Cartesian3.dot(n,n),2*O.Cartesian3.dot(n,a),O.Cartesian3.magnitudeSquared(a)-t,o);if(d.defined(t))return e.start=t.root0,e.stop=t.root1,e}l.raySphere=function(a,t,e){if(e=h(a,t,e),d.defined(e)&&!(e.stop<0))return e.start=Math.max(e.start,0),e};var w=new e;l.lineSegmentSphere=function(a,t,e,r){var n=w;O.Cartesian3.clone(a,n.origin);t=O.Cartesian3.subtract(t,a,n.direction),a=O.Cartesian3.magnitude(t);if(O.Cartesian3.normalize(t,t),r=h(n,e,r),!(!d.defined(r)||r.stop<0||r.start>a))return r.start=Math.max(r.start,0),r.stop=Math.min(r.stop,a),r};var R=new O.Cartesian3,S=new O.Cartesian3;function N(a,t,e){var r=a+t;return y.CesiumMath.sign(a)!==y.CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(a),Math.abs(t)))<e?0:r}l.rayEllipsoid=function(a,t){var e=t.oneOverRadii,r=O.Cartesian3.multiplyComponents(e,a.origin,R),t=O.Cartesian3.multiplyComponents(e,a.direction,S),e=O.Cartesian3.magnitudeSquared(r),a=O.Cartesian3.dot(r,t);if(1<e){if(0<=a)return;var n,i,r=a*a,s=e-1;if(r<(i=(n=O.Cartesian3.magnitudeSquared(t))*s))return;if(i<r){var o,u=a*a-i,C=(o=-a+Math.sqrt(u))/n,r=s/o;return C<r?new x.Interval(C,r):{start:r,stop:C}}C=Math.sqrt(s/n);return new x.Interval(C,C)}return e<1?(s=e-1,u=a*a-(i=(n=O.Cartesian3.magnitudeSquared(t))*s),o=-a+Math.sqrt(u),new x.Interval(0,o/n)):a<0?(n=O.Cartesian3.magnitudeSquared(t),new x.Interval(0,-a/n)):void 0};var q=new O.Cartesian3,L=new O.Cartesian3,I=new O.Cartesian3,E=new O.Cartesian3,z=new O.Cartesian3,T=new x.Matrix3,U=new x.Matrix3,W=new x.Matrix3,B=new x.Matrix3,V=new x.Matrix3,Z=new x.Matrix3,A=new x.Matrix3,D=new O.Cartesian3,k=new O.Cartesian3,F=new O.Cartographic;l.grazingAltitudeLocation=function(a,t){var e=a.origin,r=a.direction;if(!O.Cartesian3.equals(e,O.Cartesian3.ZERO)){var n=t.geodeticSurfaceNormal(e,q);if(0<=O.Cartesian3.dot(r,n))return e}var i=d.defined(this.rayEllipsoid(a,t)),s=t.transformPositionToScaledSpace(r,q),n=O.Cartesian3.normalize(s,s),a=O.Cartesian3.mostOrthogonalAxis(s,E),s=O.Cartesian3.normalize(O.Cartesian3.cross(a,n,L),L),a=O.Cartesian3.normalize(O.Cartesian3.cross(n,s,I),I),o=T;o[0]=n.x,o[1]=n.y,o[2]=n.z,o[3]=s.x,o[4]=s.y,o[5]=s.z,o[6]=a.x,o[7]=a.y,o[8]=a.z;var n=x.Matrix3.transpose(o,U),u=x.Matrix3.fromScale(t.radii,W),s=x.Matrix3.fromScale(t.oneOverRadii,B),a=V;a[0]=0,a[1]=-r.z,a[2]=r.y,a[3]=r.z,a[4]=0,a[5]=-r.x,a[6]=-r.y,a[7]=r.x,a[8]=0;var s=x.Matrix3.multiply(x.Matrix3.multiply(n,s,Z),a,Z),a=x.Matrix3.multiply(x.Matrix3.multiply(s,u,A),o,A),s=x.Matrix3.multiplyByVector(s,e,z),C=function(a,t,e,r,n){var i=r*r,s=n*n,o=(a[x.Matrix3.COLUMN1ROW1]-a[x.Matrix3.COLUMN2ROW2])*s,u=n*(r*N(a[x.Matrix3.COLUMN1ROW0],a[x.Matrix3.COLUMN0ROW1],y.CesiumMath.EPSILON15)+t.y),C=a[x.Matrix3.COLUMN0ROW0]*i+a[x.Matrix3.COLUMN2ROW2]*s+r*t.x+e,c=s*N(a[x.Matrix3.COLUMN2ROW1],a[x.Matrix3.COLUMN1ROW2],y.CesiumMath.EPSILON15),l=n*(r*N(a[x.Matrix3.COLUMN2ROW0],a[x.Matrix3.COLUMN0ROW2])+t.z),h=[];if(0==l&&0==c){if(0===(g=P.computeRealRoots(o,u,C)).length)return h;var M=g[0],f=Math.sqrt(Math.max(1-M*M,0));return h.push(new O.Cartesian3(r,n*M,n*-f)),h.push(new O.Cartesian3(r,n*M,n*f)),2===g.length&&(m=g[1],d=Math.sqrt(Math.max(1-m*m,0)),h.push(new O.Cartesian3(r,n*m,n*-d)),h.push(new O.Cartesian3(r,n*m,n*d))),h}var m=o*o+(M=c*c),d=2*(u*o+(f=l*c)),M=2*C*o+u*u-M+(t=l*l),f=2*(C*u-f),t=C*C-t;if(0==m&&0==d&&0==M&&0==f)return h;var g,p=(g=b.computeRealRoots(m,d,M,f,t)).length;if(0===p)return h;for(var v=0;v<p;++v){var w=g[v],R=w*w,S=Math.max(1-R,0),S=Math.sqrt(S),R=y.CesiumMath.sign(o)===y.CesiumMath.sign(C)?N(o*R+C,u*w,y.CesiumMath.EPSILON12):y.CesiumMath.sign(C)===y.CesiumMath.sign(u*w)?N(o*R,u*w+C,y.CesiumMath.EPSILON12):N(o*R+u*w,C,y.CesiumMath.EPSILON12),R=R*N(c*w,l,y.CesiumMath.EPSILON15);R<0?h.push(new O.Cartesian3(r,n*w,n*S)):0<R?h.push(new O.Cartesian3(r,n*w,n*-S)):0!==S?(h.push(new O.Cartesian3(r,n*w,n*-S)),h.push(new O.Cartesian3(r,n*w,n*S)),++v):h.push(new O.Cartesian3(r,n*w,n*S))}return h}(a,O.Cartesian3.negate(s,q),0,0,1),c=C.length;if(0<c){for(var l=O.Cartesian3.clone(O.Cartesian3.ZERO,k),h=Number.NEGATIVE_INFINITY,M=0;M<c;++M){var f=x.Matrix3.multiplyByVector(u,x.Matrix3.multiplyByVector(o,C[M],D),D),m=O.Cartesian3.normalize(O.Cartesian3.subtract(f,e,E),E),m=O.Cartesian3.dot(m,r);h<m&&(h=m,l=O.Cartesian3.clone(f,l))}a=t.cartesianToCartographic(l,F),h=y.CesiumMath.clamp(h,0,1),s=O.Cartesian3.magnitude(O.Cartesian3.subtract(l,e,E))*Math.sqrt(1-h*h);return s=i?-s:s,a.height=s,t.cartographicToCartesian(a,new O.Cartesian3)}};var G=new O.Cartesian3;l.lineSegmentPlane=function(a,t,e,r){d.defined(r)||(r=new O.Cartesian3);var n=O.Cartesian3.subtract(t,a,G),i=e.normal,t=O.Cartesian3.dot(i,n);if(!(Math.abs(t)<y.CesiumMath.EPSILON6)){i=O.Cartesian3.dot(i,a),t=-(e.distance+i)/t;if(!(t<0||1<t))return O.Cartesian3.multiplyByScalar(n,t,r),O.Cartesian3.add(a,r,r),r}},l.trianglePlaneIntersection=function(a,t,e,r){var n,i,s=r.normal,o=r.distance,u=O.Cartesian3.dot(s,a)+o<0,C=O.Cartesian3.dot(s,t)+o<0,s=O.Cartesian3.dot(s,e)+o<0,o=0;if(o+=u?1:0,o+=C?1:0,1!=(o+=s?1:0)&&2!=o||(n=new O.Cartesian3,i=new O.Cartesian3),1==o){if(u)return l.lineSegmentPlane(a,t,r,n),l.lineSegmentPlane(a,e,r,i),{positions:[a,t,e,n,i],indices:[0,3,4,1,2,4,1,4,3]};if(C)return l.lineSegmentPlane(t,e,r,n),l.lineSegmentPlane(t,a,r,i),{positions:[a,t,e,n,i],indices:[1,3,4,2,0,4,2,4,3]};if(s)return l.lineSegmentPlane(e,a,r,n),l.lineSegmentPlane(e,t,r,i),{positions:[a,t,e,n,i],indices:[2,3,4,0,1,4,0,4,3]}}else if(2==o){if(!u)return l.lineSegmentPlane(t,a,r,n),l.lineSegmentPlane(e,a,r,i),{positions:[a,t,e,n,i],indices:[1,2,4,1,4,3,0,3,4]};if(!C)return l.lineSegmentPlane(e,t,r,n),l.lineSegmentPlane(a,t,r,i),{positions:[a,t,e,n,i],indices:[2,0,4,2,4,3,1,3,4]};if(!s)return l.lineSegmentPlane(a,e,r,n),l.lineSegmentPlane(t,e,r,i),{positions:[a,t,e,n,i],indices:[0,1,4,0,4,3,2,3,4]}}},a.IntersectionTests=l,a.Ray=e}); diff --git a/public/lib/Cesium/Workers/Math-b53708b3.js b/public/lib/Cesium/Workers/Math-b53708b3.js new file mode 100644 index 0000000..7d6a157 --- /dev/null +++ b/public/lib/Cesium/Workers/Math-b53708b3.js @@ -0,0 +1 @@ +define(["exports","./Check-64f87f7d","./when-ca391574"],function(t,n,r){"use strict";function i(t){null==t&&(t=(new Date).getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(t)}i.prototype.init_genrand=function(t){for(this.mt[0]=t>>>0,this.mti=1;this.mti<this.N;this.mti++){t=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30;this.mt[this.mti]=(1812433253*((4294901760&t)>>>16)<<16)+1812433253*(65535&t)+this.mti,this.mt[this.mti]>>>=0}},i.prototype.genrand_int32=function(){var t,n,i=new Array(0,this.MATRIX_A);if(this.mti>=this.N){for(this.mti==this.N+1&&this.init_genrand(5489),n=0;n<this.N-this.M;n++)t=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+this.M]^t>>>1^i[1&t];for(;n<this.N-1;n++)t=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+(this.M-this.N)]^t>>>1^i[1&t];t=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^t>>>1^i[1&t],this.mti=0}return t=this.mt[this.mti++],t^=t>>>11,t^=t<<7&2636928640,t^=t<<15&4022730752,(t^=t>>>18)>>>0},i.prototype.random=function(){return this.genrand_int32()*(1/4294967296)};var h={EPSILON1:.1,EPSILON2:.01,EPSILON3:.001,EPSILON4:1e-4,EPSILON5:1e-5,EPSILON6:1e-6,EPSILON7:1e-7,EPSILON8:1e-8,EPSILON9:1e-9,EPSILON10:1e-10,EPSILON11:1e-11,EPSILON12:1e-12,EPSILON13:1e-13,EPSILON14:1e-14,EPSILON15:1e-15,EPSILON16:1e-16,EPSILON17:1e-17,EPSILON18:1e-18,EPSILON19:1e-19,EPSILON20:1e-20,EPSILON21:1e-21,GRAVITATIONALPARAMETER:3986004418e5,SOLAR_RADIUS:6955e5,LUNAR_RADIUS:1737400,SIXTY_FOUR_KILOBYTES:65536,FOUR_GIGABYTES:4294967296};h.sign=r.defaultValue(Math.sign,function(t){return 0===(t=+t)||t!=t?t:0<t?1:-1}),h.signNotZero=function(t){return t<0?-1:1},h.toSNorm=function(t,n){return n=r.defaultValue(n,255),Math.round((.5*h.clamp(t,-1,1)+.5)*n)},h.fromSNorm=function(t,n){return n=r.defaultValue(n,255),h.clamp(t,0,n)/n*2-1},h.normalize=function(t,n,i){return 0===(i=Math.max(i-n,0))?0:h.clamp((t-n)/i,0,1)},h.sinh=r.defaultValue(Math.sinh,function(t){return(Math.exp(t)-Math.exp(-t))/2}),h.cosh=r.defaultValue(Math.cosh,function(t){return(Math.exp(t)+Math.exp(-t))/2}),h.lerp=function(t,n,i){return(1-i)*t+i*n},h.PI=Math.PI,h.ONE_OVER_PI=1/Math.PI,h.PI_OVER_TWO=Math.PI/2,h.PI_OVER_THREE=Math.PI/3,h.PI_OVER_FOUR=Math.PI/4,h.PI_OVER_SIX=Math.PI/6,h.THREE_PI_OVER_TWO=3*Math.PI/2,h.TWO_PI=2*Math.PI,h.ONE_OVER_TWO_PI=1/(2*Math.PI),h.RADIANS_PER_DEGREE=Math.PI/180,h.DEGREES_PER_RADIAN=180/Math.PI,h.RADIANS_PER_ARCSECOND=h.RADIANS_PER_DEGREE/3600,h.toRadians=function(t){return t*h.RADIANS_PER_DEGREE},h.toDegrees=function(t){return t*h.DEGREES_PER_RADIAN},h.convertLongitudeRange=function(t){var n=h.TWO_PI,t=t-Math.floor(t/n)*n;return t<-Math.PI?t+n:t>=Math.PI?t-n:t},h.clampToLatitudeRange=function(t){return h.clamp(t,-1*h.PI_OVER_TWO,h.PI_OVER_TWO)},h.negativePiToPi=function(t){return t>=-h.PI&&t<=h.PI?t:h.zeroToTwoPi(t+h.PI)-h.PI},h.zeroToTwoPi=function(t){if(0<=t&&t<=h.TWO_PI)return t;var n=h.mod(t,h.TWO_PI);return Math.abs(n)<h.EPSILON14&&Math.abs(t)>h.EPSILON14?h.TWO_PI:n},h.mod=function(t,n){return h.sign(t)===h.sign(n)&&Math.abs(t)<Math.abs(n)?t:(t%n+n)%n},h.equalsEpsilon=function(t,n,i,a){i=r.defaultValue(i,0),a=r.defaultValue(a,i);var e=Math.abs(t-n);return e<=a||e<=i*Math.max(Math.abs(t),Math.abs(n))},h.lessThan=function(t,n,i){return t-n<-i},h.lessThanOrEquals=function(t,n,i){return t-n<i},h.greaterThan=function(t,n,i){return i<t-n},h.greaterThanOrEquals=function(t,n,i){return-i<t-n};var u=[1];h.factorial=function(t){var n=u.length;if(n<=t)for(var i=u[n-1],a=n;a<=t;a++){var e=i*a;u.push(e),i=e}return u[t]},h.incrementWrap=function(t,n,i){return i=r.defaultValue(i,0),t=n<++t?i:t},h.isPowerOfTwo=function(t){return 0!==t&&0==(t&t-1)},h.nextPowerOfTwo=function(t){return--t,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t},h.previousPowerOfTwo=function(t){return t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t=((t|=t>>32)>>>0)-(t>>>1)},h.clamp=function(t,n,i){return t<n?n:i<t?i:t};var a=new i;h.setRandomNumberSeed=function(t){a=new i(t)},h.nextRandomNumber=function(){return a.random()},h.randomBetween=function(t,n){return h.nextRandomNumber()*(n-t)+t},h.acosClamped=function(t){return Math.acos(h.clamp(t,-1,1))},h.asinClamped=function(t){return Math.asin(h.clamp(t,-1,1))},h.chordLength=function(t,n){return 2*n*Math.sin(.5*t)},h.logBase=function(t,n){return Math.log(t)/Math.log(n)},h.cbrt=r.defaultValue(Math.cbrt,function(t){var n=Math.pow(Math.abs(t),1/3);return t<0?-n:n}),h.log2=r.defaultValue(Math.log2,function(t){return Math.log(t)*Math.LOG2E}),h.fog=function(t,n){n*=t;return 1-Math.exp(-n*n)},h.fastApproximateAtan=function(t){return t*(-.1784*Math.abs(t)-.0663*t*t+1.0301)},h.fastApproximateAtan2=function(t,n){var i=Math.abs(t),a=Math.abs(n),e=Math.max(i,a),e=Math.min(i,a)/e,i=h.fastApproximateAtan(e);return i=Math.abs(n)>Math.abs(t)?h.PI_OVER_TWO-i:i,i=t<0?h.PI-i:i,i=n<0?-i:i},t.CesiumMath=h}); diff --git a/public/lib/Cesium/Workers/OrientedBoundingBox-e61df120.js b/public/lib/Cesium/Workers/OrientedBoundingBox-e61df120.js new file mode 100644 index 0000000..67d73eb --- /dev/null +++ b/public/lib/Cesium/Workers/OrientedBoundingBox-e61df120.js @@ -0,0 +1 @@ +define(["exports","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./EllipsoidTangentPlane-0fb66b96","./Math-b53708b3","./Plane-99b2becd"],function(a,y,O,t,P,w,b,N){"use strict";function A(a,t){this.center=O.Cartesian3.clone(P.defaultValue(a,O.Cartesian3.ZERO)),this.halfAxes=y.Matrix3.clone(P.defaultValue(t,y.Matrix3.ZERO))}A.packedLength=O.Cartesian3.packedLength+y.Matrix3.packedLength,A.pack=function(a,t,e){return e=P.defaultValue(e,0),O.Cartesian3.pack(a.center,t,e),y.Matrix3.pack(a.halfAxes,t,e+O.Cartesian3.packedLength),t},A.unpack=function(a,t,e){return t=P.defaultValue(t,0),P.defined(e)||(e=new A),O.Cartesian3.unpack(a,t,e.center),y.Matrix3.unpack(a,t+O.Cartesian3.packedLength,e.halfAxes),e};var T=new O.Cartesian3,R=new O.Cartesian3,I=new O.Cartesian3,E=new O.Cartesian3,L=new O.Cartesian3,z=new O.Cartesian3,S=new y.Matrix3,U={unitary:new y.Matrix3,diagonal:new y.Matrix3};A.fromPoints=function(a,t){if(P.defined(t)||(t=new A),!P.defined(a)||0===a.length)return t.halfAxes=y.Matrix3.ZERO,t.center=O.Cartesian3.ZERO,t;for(var e=a.length,n=O.Cartesian3.clone(a[0],T),r=1;r<e;r++)O.Cartesian3.add(n,a[r],n);var i=1/e;O.Cartesian3.multiplyByScalar(n,i,n);var s,o=0,C=0,c=0,u=0,l=0,d=0;for(r=0;r<e;r++)o+=(s=O.Cartesian3.subtract(a[r],n,R)).x*s.x,C+=s.x*s.y,c+=s.x*s.z,u+=s.y*s.y,l+=s.y*s.z,d+=s.z*s.z;o*=i,C*=i,c*=i,u*=i,l*=i,d*=i;i=S;i[0]=o,i[1]=C,i[2]=c,i[3]=C,i[4]=u,i[5]=l,i[6]=c,i[7]=l,i[8]=d;var i=y.Matrix3.computeEigenDecomposition(i,U),i=y.Matrix3.clone(i.unitary,t.halfAxes),h=y.Matrix3.getColumn(i,0,E),x=y.Matrix3.getColumn(i,1,L),M=y.Matrix3.getColumn(i,2,z),m=-Number.MAX_VALUE,f=-Number.MAX_VALUE,p=-Number.MAX_VALUE,g=Number.MAX_VALUE,w=Number.MAX_VALUE,b=Number.MAX_VALUE;for(r=0;r<e;r++)s=a[r],m=Math.max(O.Cartesian3.dot(h,s),m),f=Math.max(O.Cartesian3.dot(x,s),f),p=Math.max(O.Cartesian3.dot(M,s),p),g=Math.min(O.Cartesian3.dot(h,s),g),w=Math.min(O.Cartesian3.dot(x,s),w),b=Math.min(O.Cartesian3.dot(M,s),b);h=O.Cartesian3.multiplyByScalar(h,.5*(g+m),h),x=O.Cartesian3.multiplyByScalar(x,.5*(w+f),x),M=O.Cartesian3.multiplyByScalar(M,.5*(b+p),M),i=O.Cartesian3.add(h,x,t.center);O.Cartesian3.add(i,M,i);i=I;return i.x=m-g,i.y=f-w,i.z=p-b,O.Cartesian3.multiplyByScalar(i,.5,i),y.Matrix3.multiplyByScale(t.halfAxes,i,t.halfAxes),t};var d=new O.Cartesian3,h=new O.Cartesian3;function V(a,t,e,n,r,i,s,o,C,c,u){var l=(u=!P.defined(u)?new A:u).halfAxes;y.Matrix3.setColumn(l,0,t,l),y.Matrix3.setColumn(l,1,e,l),y.Matrix3.setColumn(l,2,n,l),(e=d).x=(r+i)/2,e.y=(s+o)/2,e.z=(C+c)/2;n=h;n.x=(i-r)/2,n.y=(o-s)/2,n.z=(c-C)/2;C=u.center,e=y.Matrix3.multiplyByVector(l,e,e);return O.Cartesian3.add(a,e,C),y.Matrix3.multiplyByScale(l,n,l),u}var v=new O.Cartographic,B=new O.Cartesian3,_=new O.Cartographic,k=new O.Cartographic,W=new O.Cartographic,D=new O.Cartographic,q=new O.Cartographic,X=new O.Cartesian3,j=new O.Cartesian3,Z=new O.Cartesian3,G=new O.Cartesian3,F=new O.Cartesian3,Y=new O.Cartesian2,H=new O.Cartesian2,J=new O.Cartesian2,K=new O.Cartesian2,Q=new O.Cartesian2,$=new O.Cartesian3,aa=new O.Cartesian3,ta=new O.Cartesian3,ea=new O.Cartesian3,na=new O.Cartesian2,ra=new O.Cartesian3,ia=new O.Cartesian3,sa=new O.Cartesian3,oa=new N.Plane(O.Cartesian3.UNIT_X,0);A.fromRectangle=function(a,t,e,n,r){if(t=P.defaultValue(t,0),e=P.defaultValue(e,0),n=P.defaultValue(n,O.Ellipsoid.WGS84),a.width<=b.CesiumMath.PI){var i=O.Rectangle.center(a,v),s=n.cartographicToCartesian(i,B),o=new w.EllipsoidTangentPlane(s,n),C=o.plane,c=i.longitude,u=a.south<0&&0<a.north?0:i.latitude,l=O.Cartographic.fromRadians(c,a.north,e,_),d=O.Cartographic.fromRadians(a.west,a.north,e,k),h=O.Cartographic.fromRadians(a.west,u,e,W),x=O.Cartographic.fromRadians(a.west,a.south,e,D),M=O.Cartographic.fromRadians(c,a.south,e,q),m=n.cartographicToCartesian(l,X),f=n.cartographicToCartesian(d,j),p=n.cartographicToCartesian(h,Z),g=n.cartographicToCartesian(x,G),s=n.cartographicToCartesian(M,F),i=o.projectPointToNearestOnPlane(m,Y),u=o.projectPointToNearestOnPlane(f,H),c=o.projectPointToNearestOnPlane(p,J),l=o.projectPointToNearestOnPlane(g,K),h=o.projectPointToNearestOnPlane(s,Q),m=-(M=Math.min(u.x,c.x,l.x)),p=Math.max(u.y,i.y),s=Math.min(l.y,h.y);return d.height=x.height=t,f=n.cartographicToCartesian(d,j),g=n.cartographicToCartesian(x,G),c=Math.min(N.Plane.getPointDistance(C,f),N.Plane.getPointDistance(C,g)),u=e,V(o.origin,o.xAxis,o.yAxis,o.zAxis,M,m,s,p,c,u,r)}i=0<a.south,l=a.north<0,h=i?a.south:l?a.north:0,d=O.Rectangle.center(a,v).longitude,x=O.Cartesian3.fromRadians(d,h,e,n,$);x.z=0;f=Math.abs(x.x)<b.CesiumMath.EPSILON10&&Math.abs(x.y)<b.CesiumMath.EPSILON10?O.Cartesian3.UNIT_X:O.Cartesian3.normalize(x,aa),g=O.Cartesian3.UNIT_Z,o=O.Cartesian3.cross(f,g,ta);C=N.Plane.fromPointNormal(x,f,oa);d=O.Cartesian3.fromRadians(d+b.CesiumMath.PI_OVER_TWO,h,e,n,ea);M=-(m=O.Cartesian3.dot(N.Plane.projectPointOntoPlane(C,d,na),o)),p=O.Cartesian3.fromRadians(0,a.north,l?t:e,n,ra).z,s=O.Cartesian3.fromRadians(0,a.south,i?t:e,n,ia).z;n=O.Cartesian3.fromRadians(a.east,h,e,n,sa);return V(x,o,g,f,M,m,s,p,c=N.Plane.getPointDistance(C,n),u=0,r)},A.clone=function(a,t){if(P.defined(a))return P.defined(t)?(O.Cartesian3.clone(a.center,t.center),y.Matrix3.clone(a.halfAxes,t.halfAxes),t):new A(a.center,a.halfAxes)},A.intersectPlane=function(a,t){var e=a.center,n=t.normal,r=a.halfAxes,i=n.x,s=n.y,a=n.z,r=Math.abs(i*r[y.Matrix3.COLUMN0ROW0]+s*r[y.Matrix3.COLUMN0ROW1]+a*r[y.Matrix3.COLUMN0ROW2])+Math.abs(i*r[y.Matrix3.COLUMN1ROW0]+s*r[y.Matrix3.COLUMN1ROW1]+a*r[y.Matrix3.COLUMN1ROW2])+Math.abs(i*r[y.Matrix3.COLUMN2ROW0]+s*r[y.Matrix3.COLUMN2ROW1]+a*r[y.Matrix3.COLUMN2ROW2]),t=O.Cartesian3.dot(n,e)+t.distance;return t<=-r?y.Intersect.OUTSIDE:r<=t?y.Intersect.INSIDE:y.Intersect.INTERSECTING};var x=new O.Cartesian3,M=new O.Cartesian3,m=new O.Cartesian3,c=new O.Cartesian3;A.distanceSquaredTo=function(a,t){var e=O.Cartesian3.subtract(t,a.center,d),n=a.halfAxes,r=y.Matrix3.getColumn(n,0,x),i=y.Matrix3.getColumn(n,1,M),s=y.Matrix3.getColumn(n,2,m),o=O.Cartesian3.magnitude(r),t=O.Cartesian3.magnitude(i),a=O.Cartesian3.magnitude(s);O.Cartesian3.normalize(r,r),O.Cartesian3.normalize(i,i),O.Cartesian3.normalize(s,s);n=c;n.x=O.Cartesian3.dot(e,r),n.y=O.Cartesian3.dot(e,i),n.z=O.Cartesian3.dot(e,s);var C,s=0;return n.x<-o?s+=(C=n.x+o)*C:n.x>o&&(s+=(C=n.x-o)*C),n.y<-t?s+=(C=n.y+t)*C:n.y>t&&(s+=(C=n.y-t)*C),n.z<-a?s+=(C=n.z+a)*C:n.z>a&&(s+=(C=n.z-a)*C),s};var f=new O.Cartesian3,p=new O.Cartesian3;A.computePlaneDistances=function(a,t,e,n){P.defined(n)||(n=new y.Interval);var r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=a.center,o=a.halfAxes,C=y.Matrix3.getColumn(o,0,x),c=y.Matrix3.getColumn(o,1,M),u=y.Matrix3.getColumn(o,2,m),l=O.Cartesian3.add(C,c,f);O.Cartesian3.add(l,u,l),O.Cartesian3.add(l,s,l);a=O.Cartesian3.subtract(l,t,p),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i);return O.Cartesian3.add(s,C,l),O.Cartesian3.add(l,c,l),O.Cartesian3.subtract(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.add(s,C,l),O.Cartesian3.subtract(l,c,l),O.Cartesian3.add(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.add(s,C,l),O.Cartesian3.subtract(l,c,l),O.Cartesian3.subtract(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.subtract(s,C,l),O.Cartesian3.add(l,c,l),O.Cartesian3.add(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.subtract(s,C,l),O.Cartesian3.add(l,c,l),O.Cartesian3.subtract(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.subtract(s,C,l),O.Cartesian3.subtract(l,c,l),O.Cartesian3.add(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),O.Cartesian3.subtract(s,C,l),O.Cartesian3.subtract(l,c,l),O.Cartesian3.subtract(l,u,l),O.Cartesian3.subtract(l,t,a),o=O.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),n.start=r,n.stop=i,n};var e=new y.BoundingSphere;A.isOccluded=function(a,t){a=y.BoundingSphere.fromOrientedBoundingBox(a,e);return!t.isBoundingSphereVisible(a)},A.prototype.intersectPlane=function(a){return A.intersectPlane(this,a)},A.prototype.distanceSquaredTo=function(a){return A.distanceSquaredTo(this,a)},A.prototype.computePlaneDistances=function(a,t,e){return A.computePlaneDistances(this,a,t,e)},A.prototype.isOccluded=function(a){return A.isOccluded(this,a)},A.equals=function(a,t){return a===t||P.defined(a)&&P.defined(t)&&O.Cartesian3.equals(a.center,t.center)&&y.Matrix3.equals(a.halfAxes,t.halfAxes)},A.prototype.clone=function(a){return A.clone(this,a)},A.prototype.equals=function(a){return A.equals(this,a)},a.OrientedBoundingBox=A}); diff --git a/public/lib/Cesium/Workers/Plane-99b2becd.js b/public/lib/Cesium/Workers/Plane-99b2becd.js new file mode 100644 index 0000000..663866c --- /dev/null +++ b/public/lib/Cesium/Workers/Plane-99b2becd.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Transforms-5295b227","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(n,r,i,e,s,a){"use strict";function o(n,e){this.normal=r.Cartesian3.clone(n),this.distance=e}o.fromPointNormal=function(n,e,a){n=-r.Cartesian3.dot(e,n);return s.defined(a)?(r.Cartesian3.clone(e,a.normal),a.distance=n,a):new o(e,n)};var t=new r.Cartesian3;o.fromCartesian4=function(n,e){var a=r.Cartesian3.fromCartesian4(n,t),n=n.w;return s.defined(e)?(r.Cartesian3.clone(a,e.normal),e.distance=n,e):new o(a,n)},o.getPointDistance=function(n,e){return r.Cartesian3.dot(n.normal,e)+n.distance};var c=new r.Cartesian3;o.projectPointOntoPlane=function(n,e,a){s.defined(a)||(a=new r.Cartesian3);var t=o.getPointDistance(n,e),t=r.Cartesian3.multiplyByScalar(n.normal,t,c);return r.Cartesian3.subtract(e,t,a)};var l=new i.Matrix4,C=new i.Cartesian4,f=new r.Cartesian3;o.transform=function(n,e,a){var t=n.normal,n=n.distance,e=i.Matrix4.inverseTranspose(e,l),n=i.Cartesian4.fromElements(t.x,t.y,t.z,n,C),n=i.Matrix4.multiplyByVector(e,n,n),e=r.Cartesian3.fromCartesian4(n,f);return n=i.Cartesian4.divideByScalar(n,r.Cartesian3.magnitude(e),n),o.fromCartesian4(n,a)},o.clone=function(n,e){return s.defined(e)?(r.Cartesian3.clone(n.normal,e.normal),e.distance=n.distance,e):new o(n.normal,n.distance)},o.equals=function(n,e){return n.distance===e.distance&&r.Cartesian3.equals(n.normal,e.normal)},o.ORIGIN_XY_PLANE=Object.freeze(new o(r.Cartesian3.UNIT_Z,0)),o.ORIGIN_YZ_PLANE=Object.freeze(new o(r.Cartesian3.UNIT_X,0)),o.ORIGIN_ZX_PLANE=Object.freeze(new o(r.Cartesian3.UNIT_Y,0)),n.Plane=o}); diff --git a/public/lib/Cesium/Workers/PolygonGeometryLibrary-b3087bff.js b/public/lib/Cesium/Workers/PolygonGeometryLibrary-b3087bff.js new file mode 100644 index 0000000..fbb5b3c --- /dev/null +++ b/public/lib/Cesium/Workers/PolygonGeometryLibrary-b3087bff.js @@ -0,0 +1 @@ +define(["exports","./ArcType-2b58731c","./arrayRemoveDuplicates-fc9e255d","./Cartesian2-5b63e672","./ComponentDatatype-8f71e605","./when-ca391574","./EllipsoidRhumbLine-21029cef","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./Transforms-5295b227","./PolygonPipeline-55053b0a"],function(e,I,x,E,A,P,f,_,G,p,L,M,d,D){"use strict";function S(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(S.prototype,{length:{get:function(){return this._length}}}),S.prototype.enqueue=function(e){this._array.push(e),this._length++},S.prototype.dequeue=function(){if(0!==this._length){var e=this._array,t=this._offset,r=e[t];return e[t]=void 0,10<++t&&2*t>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,r}},S.prototype.peek=function(){if(0!==this._length)return this._array[this._offset]},S.prototype.contains=function(e){return-1!==this._array.indexOf(e)},S.prototype.clear=function(){this._array.length=this._offset=this._length=0},S.prototype.sort=function(e){0<this._offset&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var R={computeHierarchyPackedLength:function(e){for(var t=0,r=[e];0<r.length;){var i=r.pop();if(P.defined(i)){t+=2;var n=i.positions,a=i.holes;if(P.defined(n)&&(t+=n.length*E.Cartesian3.packedLength),P.defined(a))for(var o=a.length,s=0;s<o;++s)r.push(a[s])}}return t},packPolygonHierarchy:function(e,t,r){for(var i=[e];0<i.length;){var n=i.pop();if(P.defined(n)){var a=n.positions,o=n.holes;if(t[r++]=P.defined(a)?a.length:0,t[r++]=P.defined(o)?o.length:0,P.defined(a))for(var s=a.length,u=0;u<s;++u,r+=3)E.Cartesian3.pack(a[u],t,r);if(P.defined(o))for(var l=o.length,h=0;h<l;++h)i.push(o[h])}}return r},unpackPolygonHierarchy:function(e,t){for(var r=e[t++],i=e[t++],n=new Array(r),a=0<i?new Array(i):void 0,o=0;o<r;++o,t+=E.Cartesian3.packedLength)n[o]=E.Cartesian3.unpack(e,t);for(var s=0;s<i;++s)a[s]=R.unpackPolygonHierarchy(e,t),t=a[s].startingIndex,delete a[s].startingIndex;return{positions:n,holes:a,startingIndex:t}}},y=new E.Cartesian3;R.subdivideLineCount=function(e,t,r){r=E.Cartesian3.distance(e,t)/r,r=Math.max(0,Math.ceil(M.CesiumMath.log2(r)));return Math.pow(2,r)};var g=new E.Cartographic,m=new E.Cartographic,v=new E.Cartographic,C=new E.Cartesian3;R.subdivideRhumbLineCount=function(e,t,r,i){t=e.cartesianToCartographic(t,g),r=e.cartesianToCartographic(r,m),i=new f.EllipsoidRhumbLine(t,r,e).surfaceDistance/i,i=Math.max(0,Math.ceil(M.CesiumMath.log2(i)));return Math.pow(2,i)},R.subdivideLine=function(e,t,r,i){var n=R.subdivideLineCount(e,t,r),a=E.Cartesian3.distance(e,t),o=a/n,s=i=!P.defined(i)?[]:i;s.length=3*n;for(var u,l,h,c=0,f=0;f<n;f++){var p=(p=e,u=t,l=f*o,h=a,E.Cartesian3.subtract(u,p,y),E.Cartesian3.multiplyByScalar(y,l/h,y),E.Cartesian3.add(p,y,y),[y.x,y.y,y.z]);s[c++]=p[0],s[c++]=p[1],s[c++]=p[2]}return s},R.subdivideRhumbLine=function(e,t,r,i,n){var t=e.cartesianToCartographic(t,g),r=e.cartesianToCartographic(r,m),a=new f.EllipsoidRhumbLine(t,r,e),i=a.surfaceDistance/i,i=Math.max(0,Math.ceil(M.CesiumMath.log2(i))),o=Math.pow(2,i),s=a.surfaceDistance/o,u=n=!P.defined(n)?[]:n;u.length=3*o;for(var l=0,h=0;h<o;h++){var c=a.interpolateUsingSurfaceDistance(h*s,v),c=e.cartographicToCartesian(c,C);u[l++]=c.x,u[l++]=c.y,u[l++]=c.z}return u};var b=new E.Cartesian3,w=new E.Cartesian3,T=new E.Cartesian3,N=new E.Cartesian3;R.scaleToGeodeticHeightExtruded=function(e,t,r,i,n){i=P.defaultValue(i,E.Ellipsoid.WGS84);var a=b,o=w,s=T,u=N;if(P.defined(e)&&P.defined(e.attributes)&&P.defined(e.attributes.position))for(var l=e.attributes.position.values,h=l.length/2,c=0;c<h;c+=3)E.Cartesian3.fromArray(l,c,s),i.geodeticSurfaceNormal(s,a),u=i.scaleToGeodeticSurface(s,u),o=E.Cartesian3.multiplyByScalar(a,r,o),o=E.Cartesian3.add(u,o,o),l[c+h]=o.x,l[c+1+h]=o.y,l[c+2+h]=o.z,n&&(u=E.Cartesian3.clone(s,u)),o=E.Cartesian3.multiplyByScalar(a,t,o),o=E.Cartesian3.add(u,o,o),l[c]=o.x,l[c+1]=o.y,l[c+2]=o.z;return e},R.polygonOutlinesFromHierarchy=function(e,t,r){var i,n,a=[],o=new S;for(o.enqueue(e);0!==o.length;){var s=o.dequeue(),u=s.positions;if(t)for(n=u.length,h=0;h<n;h++)r.scaleToGeodeticSurface(u[h],u[h]);if(!((u=x.arrayRemoveDuplicates(u,E.Cartesian3.equalsEpsilon,!0)).length<3)){for(var l=s.holes?s.holes.length:0,h=0;h<l;h++){var c=s.holes[h],f=c.positions;if(t)for(n=f.length,i=0;i<n;++i)r.scaleToGeodeticSurface(f[i],f[i]);if(!((f=x.arrayRemoveDuplicates(f,E.Cartesian3.equalsEpsilon,!0)).length<3)){a.push(f);var p=0;for(P.defined(c.holes)&&(p=c.holes.length),i=0;i<p;i++)o.enqueue(c.holes[i])}}a.push(u)}}return a},R.polygonsFromHierarchy=function(e,t,r,i){var n=[],a=[],o=new S;for(o.enqueue(e);0!==o.length;){var s,u=o.dequeue(),l=u.positions,h=u.holes;if(r)for(s=l.length,v=0;v<s;v++)i.scaleToGeodeticSurface(l[v],l[v]);if(!((l=x.arrayRemoveDuplicates(l,E.Cartesian3.equalsEpsilon,!0)).length<3)){var c=t(l);if(P.defined(c)){var f=[],p=D.PolygonPipeline.computeWindingOrder2D(c);p===D.WindingOrder.CLOCKWISE&&(c.reverse(),l=l.slice().reverse());for(var d,y=l.slice(),g=P.defined(h)?h.length:0,m=[],v=0;v<g;v++){var C=h[v],b=C.positions;if(r)for(s=b.length,d=0;d<s;++d)i.scaleToGeodeticSurface(b[d],b[d]);if(!((b=x.arrayRemoveDuplicates(b,E.Cartesian3.equalsEpsilon,!0)).length<3)){var w=t(b);if(P.defined(w)){D.PolygonPipeline.computeWindingOrder2D(w)===D.WindingOrder.CLOCKWISE&&(w.reverse(),b=b.slice().reverse()),m.push(b),f.push(y.length);var y=y.concat(b),c=c.concat(w),T=0;for(P.defined(C.holes)&&(T=C.holes.length),d=0;d<T;d++)o.enqueue(C.holes[d])}}}n.push({outerRing:l,holes:m}),a.push({positions:y,positions2D:c,holes:f})}}}return{hierarchy:n,polygons:a}};var O=new E.Cartesian2,q=new E.Cartesian3,B=new d.Quaternion,H=new d.Matrix3;R.computeBoundingRectangle=function(e,t,r,i,n){for(var i=d.Quaternion.fromAxisAngle(e,i,B),a=d.Matrix3.fromQuaternion(i,H),o=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY,u=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,h=r.length,c=0;c<h;++c){var f=E.Cartesian3.clone(r[c],q);d.Matrix3.multiplyByVector(a,f,f);f=t(f,O);P.defined(f)&&(o=Math.min(o,f.x),s=Math.max(s,f.x),u=Math.min(u,f.y),l=Math.max(l,f.y))}return n.x=o,n.y=u,n.width=s-o,n.height=l-u,n},R.createGeometryFromPositions=function(e,t,r,i,n,a){var o=D.PolygonPipeline.triangulate(t.positions2D,t.holes);o.length<3&&(o=[0,1,2]);var s=t.positions;if(i){for(var u=s.length,l=new Array(3*u),h=0,c=0;c<u;c++){var f=s[c];l[h++]=f.x,l[h++]=f.y,l[h++]=f.z}i=new _.Geometry({attributes:{position:new _.GeometryAttribute({componentDatatype:A.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:l})},indices:o,primitiveType:_.PrimitiveType.TRIANGLES});return n.normal?p.GeometryPipeline.computeNormal(i):i}return a===I.ArcType.GEODESIC?D.PolygonPipeline.computeSubdivision(e,s,o,r):a===I.ArcType.RHUMB?D.PolygonPipeline.computeRhumbLineSubdivision(e,s,o,r):void 0};var k=[],z=new E.Cartesian3,W=new E.Cartesian3;R.computeWallGeometry=function(e,t,r,i,n){var a,o,s,u=e.length,l=0;if(i)for(o=3*u*2,a=new Array(2*o),s=0;s<u;s++)p=e[s],d=e[(s+1)%u],a[l]=a[l+o]=p.x,a[++l]=a[l+o]=p.y,a[++l]=a[l+o]=p.z,a[++l]=a[l+o]=d.x,a[++l]=a[l+o]=d.y,a[++l]=a[l+o]=d.z,++l;else{var h=M.CesiumMath.chordLength(r,t.maximumRadius),c=0;if(n===I.ArcType.GEODESIC)for(s=0;s<u;s++)c+=R.subdivideLineCount(e[s],e[(s+1)%u],h);else if(n===I.ArcType.RHUMB)for(s=0;s<u;s++)c+=R.subdivideRhumbLineCount(t,e[s],e[(s+1)%u],h);for(o=3*(c+u),a=new Array(2*o),s=0;s<u;s++){var f,p=e[s],d=e[(s+1)%u];n===I.ArcType.GEODESIC?f=R.subdivideLine(p,d,h,k):n===I.ArcType.RHUMB&&(f=R.subdivideRhumbLine(t,p,d,h,k));for(var y=f.length,g=0;g<y;++g,++l)a[l]=f[g],a[l+o]=f[g];a[l]=d.x,a[l+o]=d.x,a[++l]=d.y,a[l+o]=d.y,a[++l]=d.z,a[l+o]=d.z,++l}}var u=a.length,m=L.IndexDatatype.createTypedArray(u/3,u-6*e.length),v=0;for(u/=6,s=0;s<u;s++){var C=s,b=C+1,w=C+u,T=w+1;p=E.Cartesian3.fromArray(a,3*C,z),d=E.Cartesian3.fromArray(a,3*b,W),E.Cartesian3.equalsEpsilon(p,d,M.CesiumMath.EPSILON10,M.CesiumMath.EPSILON10)||(m[v++]=C,m[v++]=w,m[v++]=b,m[v++]=b,m[v++]=w,m[v++]=T)}return new _.Geometry({attributes:new G.GeometryAttributes({position:new _.GeometryAttribute({componentDatatype:A.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:a})}),indices:m,primitiveType:_.PrimitiveType.TRIANGLES})},e.PolygonGeometryLibrary=R}); diff --git a/public/lib/Cesium/Workers/PolygonPipeline-55053b0a.js b/public/lib/Cesium/Workers/PolygonPipeline-55053b0a.js new file mode 100644 index 0000000..5fce95e --- /dev/null +++ b/public/lib/Cesium/Workers/PolygonPipeline-55053b0a.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./when-ca391574","./EllipsoidRhumbLine-21029cef","./GeometryAttribute-7ef2d452","./Math-b53708b3","./WebGLConstants-95ceb4e9"],function(e,L,t,D,G,O,T,W,n){"use strict";function r(e,t,n){n=n||2;var r,a,i,u,x,o=t&&t.length,s=o?t[0]*n:e.length,p=v(e,0,s,n,!0),h=[];if(!p||p.next===p.prev)return h;if(o&&(p=function(e,t,n,r){var a,i,u,x,o=[];for(a=0,i=t.length;a<i;a++)u=t[a]*r,x=a<i-1?t[a+1]*r:e.length,(x=v(e,u,x,r,!1))===x.next&&(x.steiner=!0),o.push(function(e){var t=e,n=e;for(;(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next,t!==e;);return n}(x));for(o.sort(m),a=0;a<o.length;a++)!function(e,t){(t=function(e,t){var n,r=t,a=e.x,i=e.y,u=-1/0;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var x=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(x<=a&&u<x){if((u=x)===a){if(i===r.y)return r;if(i===r.next.y)return r.next}n=r.x<r.next.x?r:r.next}}}while(r=r.next,r!==t);if(!n)return null;if(a===u)return n;var o,s=n,p=n.x,h=n.y,f=1/0;r=n;for(;a>=r.x&&r.x>=p&&a!==r.x&&g(i<h?a:u,i,p,h,i<h?u:a,i,r.x,r.y)&&(o=Math.abs(i-r.y)/(a-r.x),w(r,e)&&(o<f||o===f&&(r.x>n.x||r.x===n.x&&function(e,t){return b(e.prev,e,t.prev)<0&&b(t.next,e,e.next)<0}(n,r)))&&(n=r,f=o)),r=r.next,r!==s;);return n}(e,t))&&c(e=E(t,e),e.next)}(o[a],n),n=c(n,n.next);return n}(e,t,p,n)),e.length>80*n){for(var f=r=e[0],l=a=e[1],y=n;y<s;y+=n)(i=e[y])<f&&(f=i),(u=e[y+1])<l&&(l=u),r<i&&(r=i),a<u&&(a=u);x=0!==(x=Math.max(r-f,a-l))?1/x:0}return d(p,h,n,f,l,x),h}function v(e,t,n,r,a){var i,u;if(a===0<M(e,t,n,r))for(i=t;i<n;i+=r)u=x(i,e[i],e[i+1],u);else for(i=n-r;t<=i;i-=r)u=x(i,e[i],e[i+1],u);return u&&p(u,u.next)&&(f(u),u=u.next),u}function c(e,t){if(!e)return e;t=t||e;var n,r=e;do{if(n=!1,r.steiner||!p(r,r.next)&&0!==b(r.prev,r,r.next))r=r.next;else{if(f(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function d(e,t,n,r,a,i,u){if(e){!u&&i&&function(e,t,n,r){var a=e;for(;null===a.z&&(a.z=C(a.x,a.y,t,n,r)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next,a!==e;);a.prevZ.nextZ=null,a.prevZ=null,function(e){var t,n,r,a,i,u,x,o,s=1;do{for(n=e,i=e=null,u=0;n;){for(u++,r=n,t=x=0;t<s&&(x++,r=r.nextZ);t++);for(o=s;0<x||0<o&&r;)0!==x&&(0===o||!r||n.z<=r.z)?(n=(a=n).nextZ,x--):(r=(a=r).nextZ,o--),i?i.nextZ=a:e=a,a.prevZ=i,i=a;n=r}}while(i.nextZ=null,s*=2,1<u)}(a)}(e,r,a,i);for(var x,o,s=e;e.prev!==e.next;)if(x=e.prev,o=e.next,i?function(e,t,n,r){var a=e.prev,i=e,u=e.next;if(0<=b(a,i,u))return!1;var x=(a.x<i.x?a.x<u.x?a:u:i.x<u.x?i:u).x,o=(a.y<i.y?a.y<u.y?a:u:i.y<u.y?i:u).y,s=(a.x>i.x?a.x>u.x?a:u:i.x>u.x?i:u).x,p=(a.y>i.y?a.y>u.y?a:u:i.y>u.y?i:u).y,h=C(x,o,t,n,r),f=C(s,p,t,n,r),l=e.prevZ,y=e.nextZ;for(;l&&l.z>=h&&y&&y.z<=f;){if(l!==e.prev&&l!==e.next&&g(a.x,a.y,i.x,i.y,u.x,u.y,l.x,l.y)&&0<=b(l.prev,l,l.next))return!1;if(l=l.prevZ,y!==e.prev&&y!==e.next&&g(a.x,a.y,i.x,i.y,u.x,u.y,y.x,y.y)&&0<=b(y.prev,y,y.next))return!1;y=y.nextZ}for(;l&&l.z>=h;){if(l!==e.prev&&l!==e.next&&g(a.x,a.y,i.x,i.y,u.x,u.y,l.x,l.y)&&0<=b(l.prev,l,l.next))return!1;l=l.prevZ}for(;y&&y.z<=f;){if(y!==e.prev&&y!==e.next&&g(a.x,a.y,i.x,i.y,u.x,u.y,y.x,y.y)&&0<=b(y.prev,y,y.next))return!1;y=y.nextZ}return!0}(e,r,a,i):function(e){var t=e.prev,n=e,r=e.next;if(0<=b(t,n,r))return!1;var a=e.next.next;for(;a!==e.prev;){if(g(t.x,t.y,n.x,n.y,r.x,r.y,a.x,a.y)&&0<=b(a.prev,a,a.next))return!1;a=a.next}return!0}(e))t.push(x.i/n),t.push(e.i/n),t.push(o.i/n),f(e),e=o.next,s=o.next;else if((e=o)===s){u?1===u?d(e=function(e,t,n){var r=e;do{var a=r.prev,i=r.next.next}while(!p(a,i)&&h(a,r,r.next,i)&&w(a,i)&&w(i,a)&&(t.push(a.i/n),t.push(r.i/n),t.push(i.i/n),f(r),f(r.next),r=e=i),r=r.next,r!==e);return c(r)}(c(e),t,n),t,n,r,a,i,2):2===u&&function(e,t,n,r,a,i){var u=e;do{for(var x=u.next.next;x!==u.prev;){if(u.i!==x.i&&function(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&h(n,n.next,e,t))return!0}while(n=n.next,n!==e);return!1}(e,t)&&(w(e,t)&&w(t,e)&&function(e,t){var n=e,r=!1,a=(e.x+t.x)/2,i=(e.y+t.y)/2;for(;n.y>i!=n.next.y>i&&n.next.y!==n.y&&a<(n.next.x-n.x)*(i-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next,n!==e;);return r}(e,t)&&(b(e.prev,e,t.prev)||b(e,t.prev,t))||p(e,t)&&0<b(e.prev,e,e.next)&&0<b(t.prev,t,t.next))}(u,x)){var o=E(u,x);return u=c(u,u.next),o=c(o,o.next),d(u,t,n,r,a,i),d(o,t,n,r,a,i)}x=x.next}}while(u=u.next,u!==e)}(e,t,n,r,a,i):d(c(e),t,n,r,a,i,1);break}}}function m(e,t){return e.x-t.x}function C(e,t,n,r,a){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*a)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*a)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function g(e,t,n,r,a,i,u,x){return 0<=(a-u)*(t-x)-(e-u)*(i-x)&&0<=(e-u)*(r-x)-(n-u)*(t-x)&&0<=(n-u)*(i-x)-(a-u)*(r-x)}function b(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function p(e,t){return e.x===t.x&&e.y===t.y}function h(e,t,n,r){var a=s(b(e,t,n)),i=s(b(e,t,r)),u=s(b(n,r,e)),x=s(b(n,r,t));return a!==i&&u!==x||(0===a&&o(e,n,t)||(0===i&&o(e,r,t)||(0===u&&o(n,e,r)||!(0!==x||!o(n,t,r)))))}function o(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function s(e){return 0<e?1:e<0?-1:0}function w(e,t){return b(e.prev,e,e.next)<0?0<=b(e,t,e.next)&&0<=b(e,e.prev,t):b(e,t,e.prev)<0||b(e,e.next,t)<0}function E(e,t){var n=new u(e.i,e.x,e.y),r=new u(t.i,t.x,t.y),a=e.next,i=t.prev;return(e.next=t).prev=e,(n.next=a).prev=n,(r.next=n).prev=r,(i.next=r).prev=i,r}function x(e,t,n,r){n=new u(e,t,n);return r?(n.next=r.next,(n.prev=r).next.prev=n,r.next=n):(n.prev=n).next=n,n}function f(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function u(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function M(e,t,n,r){for(var a=0,i=t,u=n-r;i<n;i+=r)a+=(e[u]-e[i])*(e[i+1]+e[u+1]),u=i;return a}r.deviation=function(e,t,n,r){var a=t&&t.length,i=a?t[0]*n:e.length,u=Math.abs(M(e,0,i,n));if(a)for(var x=0,o=t.length;x<o;x++){var s=t[x]*n,p=x<o-1?t[x+1]*n:e.length;u-=Math.abs(M(e,s,p,n))}for(var h=0,x=0;x<r.length;x+=3){var f=r[x]*n,l=r[x+1]*n,y=r[x+2]*n;h+=Math.abs((e[f]-e[y])*(e[1+l]-e[1+f])-(e[f]-e[l])*(e[1+y]-e[1+f]))}return 0===u&&0===h?0:Math.abs((h-u)/u)},r.flatten=function(e){for(var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},r=0,a=0;a<e.length;a++){for(var i=0;i<e[a].length;i++)for(var u=0;u<t;u++)n.vertices.push(e[a][i][u]);0<a&&(r+=e[a-1].length,n.holes.push(r))}return n};var a={CLOCKWISE:n.WebGLConstants.CW,COUNTER_CLOCKWISE:n.WebGLConstants.CCW,validate:function(e){return e===a.CLOCKWISE||e===a.COUNTER_CLOCKWISE}},i=Object.freeze(a),l=new L.Cartesian3,y=new L.Cartesian3,Z={computeArea2D:function(e){for(var t=e.length,n=0,r=t-1,a=0;a<t;r=a++){var i=e[r],u=e[a];n+=i.x*u.y-u.x*i.y}return.5*n},computeWindingOrder2D:function(e){return 0<Z.computeArea2D(e)?i.COUNTER_CLOCKWISE:i.CLOCKWISE},triangulate:function(e,t){return r(L.Cartesian2.packArray(e),t,2)}},P=new L.Cartesian3,I=new L.Cartesian3,B=new L.Cartesian3,S=new L.Cartesian3,A=new L.Cartesian3,z=new L.Cartesian3,N=new L.Cartesian3;Z.computeSubdivision=function(e,t,n,r){r=G.defaultValue(r,W.CesiumMath.RADIANS_PER_DEGREE);for(var a=n.slice(0),i=t.length,u=new Array(3*i),x=0,o=0;o<i;o++){var s=t[o];u[x++]=s.x,u[x++]=s.y,u[x++]=s.z}for(var p=[],h={},f=e.maximumRadius,r=W.CesiumMath.chordLength(r,f),l=r*r;0<a.length;){var y,v,c=a.pop(),d=a.pop(),m=a.pop(),C=L.Cartesian3.fromArray(u,3*m,P),g=L.Cartesian3.fromArray(u,3*d,I),b=L.Cartesian3.fromArray(u,3*c,B),w=L.Cartesian3.multiplyByScalar(L.Cartesian3.normalize(C,S),f,S),E=L.Cartesian3.multiplyByScalar(L.Cartesian3.normalize(g,A),f,A),M=L.Cartesian3.multiplyByScalar(L.Cartesian3.normalize(b,z),f,z),Z=L.Cartesian3.magnitudeSquared(L.Cartesian3.subtract(w,E,N)),E=L.Cartesian3.magnitudeSquared(L.Cartesian3.subtract(E,M,N)),M=L.Cartesian3.magnitudeSquared(L.Cartesian3.subtract(M,w,N)),w=Math.max(Z,E,M);l<w?Z===w?(o=h[y=Math.min(m,d)+" "+Math.max(m,d)],G.defined(o)||(v=L.Cartesian3.add(C,g,N),L.Cartesian3.multiplyByScalar(v,.5,v),u.push(v.x,v.y,v.z),o=u.length/3-1,h[y]=o),a.push(m,o,c),a.push(o,d,c)):E===w?(o=h[y=Math.min(d,c)+" "+Math.max(d,c)],G.defined(o)||(v=L.Cartesian3.add(g,b,N),L.Cartesian3.multiplyByScalar(v,.5,v),u.push(v.x,v.y,v.z),o=u.length/3-1,h[y]=o),a.push(d,o,m),a.push(o,c,m)):M===w&&(o=h[y=Math.min(c,m)+" "+Math.max(c,m)],G.defined(o)||(v=L.Cartesian3.add(b,C,N),L.Cartesian3.multiplyByScalar(v,.5,v),u.push(v.x,v.y,v.z),o=u.length/3-1,h[y]=o),a.push(c,o,d),a.push(o,m,d)):(p.push(m),p.push(d),p.push(c))}return new T.Geometry({attributes:{position:new T.GeometryAttribute({componentDatatype:D.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u})},indices:p,primitiveType:T.PrimitiveType.TRIANGLES})};var U=new L.Cartographic,_=new L.Cartographic,K=new L.Cartographic,V=new L.Cartographic;Z.computeRhumbLineSubdivision=function(e,t,n,r){r=G.defaultValue(r,W.CesiumMath.RADIANS_PER_DEGREE);for(var a=n.slice(0),i=t.length,u=new Array(3*i),x=0,o=0;o<i;o++){var s=t[o];u[x++]=s.x,u[x++]=s.y,u[x++]=s.z}for(var p=[],h={},n=e.maximumRadius,f=W.CesiumMath.chordLength(r,n),l=new O.EllipsoidRhumbLine(void 0,void 0,e),y=new O.EllipsoidRhumbLine(void 0,void 0,e),v=new O.EllipsoidRhumbLine(void 0,void 0,e);0<a.length;){var c=a.pop(),d=a.pop(),m=a.pop(),C=L.Cartesian3.fromArray(u,3*m,P),g=L.Cartesian3.fromArray(u,3*d,I),b=L.Cartesian3.fromArray(u,3*c,B),w=e.cartesianToCartographic(C,U),E=e.cartesianToCartographic(g,_),M=e.cartesianToCartographic(b,K);l.setEndPoints(w,E);var Z=l.surfaceDistance;y.setEndPoints(E,M);C=y.surfaceDistance;v.setEndPoints(M,w);var S,A,z,R,g=v.surfaceDistance,b=Math.max(Z,C,g);f<b?Z===b?(o=h[S=Math.min(m,d)+" "+Math.max(m,d)],G.defined(o)||(A=l.interpolateUsingFraction(.5,V),z=.5*(w.height+E.height),R=L.Cartesian3.fromRadians(A.longitude,A.latitude,z,e,N),u.push(R.x,R.y,R.z),o=u.length/3-1,h[S]=o),a.push(m,o,c),a.push(o,d,c)):C===b?(o=h[S=Math.min(d,c)+" "+Math.max(d,c)],G.defined(o)||(A=y.interpolateUsingFraction(.5,V),z=.5*(E.height+M.height),R=L.Cartesian3.fromRadians(A.longitude,A.latitude,z,e,N),u.push(R.x,R.y,R.z),o=u.length/3-1,h[S]=o),a.push(d,o,m),a.push(o,c,m)):g===b&&(o=h[S=Math.min(c,m)+" "+Math.max(c,m)],G.defined(o)||(A=v.interpolateUsingFraction(.5,V),z=.5*(M.height+w.height),R=L.Cartesian3.fromRadians(A.longitude,A.latitude,z,e,N),u.push(R.x,R.y,R.z),o=u.length/3-1,h[S]=o),a.push(c,o,d),a.push(o,m,d)):(p.push(m),p.push(d),p.push(c))}return new T.Geometry({attributes:{position:new T.GeometryAttribute({componentDatatype:D.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u})},indices:p,primitiveType:T.PrimitiveType.TRIANGLES})},Z.scaleToGeodeticHeight=function(e,t,n,r){n=G.defaultValue(n,L.Ellipsoid.WGS84);var a=l,i=y;if(t=G.defaultValue(t,0),r=G.defaultValue(r,!0),G.defined(e))for(var u=e.length,x=0;x<u;x+=3)L.Cartesian3.fromArray(e,x,i),r&&(i=n.scaleToGeodeticSurface(i,i)),0!==t&&(a=n.geodeticSurfaceNormal(i,a),L.Cartesian3.multiplyByScalar(a,t,a),L.Cartesian3.add(i,a,i)),e[x]=i.x,e[x+1]=i.y,e[x+2]=i.z;return e},e.PolygonPipeline=Z,e.WindingOrder=i}); diff --git a/public/lib/Cesium/Workers/PolylinePipeline-00f5e064.js b/public/lib/Cesium/Workers/PolylinePipeline-00f5e064.js new file mode 100644 index 0000000..75f20f4 --- /dev/null +++ b/public/lib/Cesium/Workers/PolylinePipeline-00f5e064.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./when-ca391574","./Check-64f87f7d","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./IntersectionTests-f5111308","./Math-b53708b3","./Transforms-5295b227","./Plane-99b2becd"],function(a,m,p,e,r,d,v,w,P,T){"use strict";var y={numberOfPoints:function(a,e,r){e=m.Cartesian3.distance(a,e);return Math.ceil(e/r)},numberOfPointsRhumbLine:function(a,e,r){e=Math.pow(a.longitude-e.longitude,2)+Math.pow(a.latitude-e.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(e/(r*r))))}},o=new m.Cartographic;y.extractHeights=function(a,e){for(var r=a.length,t=new Array(r),n=0;n<r;n++){var i=a[n];t[n]=e.cartesianToCartographic(i,o).height}return t};var b=new P.Matrix4,A=new m.Cartesian3,E=new m.Cartesian3,R=new T.Plane(m.Cartesian3.UNIT_X,0),M=new m.Cartesian3,S=new T.Plane(m.Cartesian3.UNIT_X,0),D=new m.Cartesian3,x=new m.Cartesian3,N=[];function G(a,e,r){var t=N;if(t.length=a,e===r){for(i=0;i<a;i++)t[i]=e;return t}for(var n=(r-e)/a,i=0;i<a;i++){var o=e+i*n;t[i]=o}return t}var I=new m.Cartographic,k=new m.Cartographic,V=new m.Cartesian3,L=new m.Cartesian3,_=new m.Cartesian3,O=new r.EllipsoidGeodesic,B=new d.EllipsoidRhumbLine;y.wrapLongitude=function(a,e){var r=[],t=[];if(p.defined(a)&&0<a.length){e=p.defaultValue(e,P.Matrix4.IDENTITY);var n=P.Matrix4.inverseTransformation(e,b),e=P.Matrix4.multiplyByPoint(n,m.Cartesian3.ZERO,A),i=m.Cartesian3.normalize(P.Matrix4.multiplyByPointAsVector(n,m.Cartesian3.UNIT_Y,E),E),o=T.Plane.fromPointNormal(e,i,R),n=m.Cartesian3.normalize(P.Matrix4.multiplyByPointAsVector(n,m.Cartesian3.UNIT_X,M),M),s=T.Plane.fromPointNormal(e,n,S),c=1;r.push(m.Cartesian3.clone(a[0]));for(var l=r[0],u=a.length,h=1;h<u;++h){var f,g,C=a[h];(T.Plane.getPointDistance(s,l)<0||T.Plane.getPointDistance(s,C)<0)&&(f=v.IntersectionTests.lineSegmentPlane(l,C,o,D),p.defined(f)&&(g=m.Cartesian3.multiplyByScalar(i,5e-9,x),T.Plane.getPointDistance(o,l)<0&&m.Cartesian3.negate(g,g),r.push(m.Cartesian3.add(f,g,new m.Cartesian3)),t.push(c+1),m.Cartesian3.negate(g,g),r.push(m.Cartesian3.add(f,g,new m.Cartesian3)),c=1)),r.push(m.Cartesian3.clone(a[h])),c++,l=C}t.push(c)}return{positions:r,lengths:t}},y.generateArc=function(a){var e=(a=!p.defined(a)?{}:a).positions,r=e.length,t=p.defaultValue(a.ellipsoid,m.Ellipsoid.WGS84),n=p.defaultValue(a.height,0),i=Array.isArray(n);if(r<1)return[];if(1===r){var o,s=t.scaleToGeodeticSurface(e[0],L);return 0!==(n=i?n[0]:n)&&(o=t.geodeticSurfaceNormal(s,V),m.Cartesian3.multiplyByScalar(o,n,o),m.Cartesian3.add(s,o,s)),[s.x,s.y,s.z]}var c=a.minDistance;p.defined(c)||(g=p.defaultValue(a.granularity,w.CesiumMath.RADIANS_PER_DEGREE),c=w.CesiumMath.chordLength(g,t.maximumRadius));for(var l=0,u=0;u<r-1;u++)l+=y.numberOfPoints(e[u],e[u+1],c);var a=3*(l+1),h=new Array(a),f=0;for(u=0;u<r-1;u++)f=function(a,e,r,t,n,i,o,s){var c=t.scaleToGeodeticSurface(a,L),l=t.scaleToGeodeticSurface(e,_),u=y.numberOfPoints(a,e,r),c=t.cartesianToCartographic(c,I),l=t.cartesianToCartographic(l,k),h=G(u,n,i);O.setEndPoints(c,l);var f=O.surfaceDistance/u,g=s;c.height=n;var C=t.cartographicToCartesian(c,V);m.Cartesian3.pack(C,o,g),g+=3;for(var p=1;p<u;p++){var d=O.interpolateUsingSurfaceDistance(p*f,k);d.height=h[p],C=t.cartographicToCartesian(d,V),m.Cartesian3.pack(C,o,g),g+=3}return g}(e[u],e[u+1],c,t,i?n[u]:n,i?n[u+1]:n,h,f);N.length=0;var g=e[r-1],g=t.cartesianToCartographic(g,I);g.height=i?n[r-1]:n;g=t.cartographicToCartesian(g,V);return m.Cartesian3.pack(g,h,a-3),h};var U=new m.Cartographic,z=new m.Cartographic;y.generateRhumbArc=function(a){var e=(a=!p.defined(a)?{}:a).positions,r=e.length,t=p.defaultValue(a.ellipsoid,m.Ellipsoid.WGS84),n=p.defaultValue(a.height,0),i=Array.isArray(n);if(r<1)return[];if(1===r){var o,s=t.scaleToGeodeticSurface(e[0],L);return 0!==(n=i?n[0]:n)&&(o=t.geodeticSurfaceNormal(s,V),m.Cartesian3.multiplyByScalar(o,n,o),m.Cartesian3.add(s,o,s)),[s.x,s.y,s.z]}for(var c,l=p.defaultValue(a.granularity,w.CesiumMath.RADIANS_PER_DEGREE),u=0,h=t.cartesianToCartographic(e[0],U),f=0;f<r-1;f++)c=t.cartesianToCartographic(e[f+1],z),u+=y.numberOfPointsRhumbLine(h,c,l),h=m.Cartographic.clone(c,U);var s=3*(u+1),g=new Array(s),C=0;for(f=0;f<r-1;f++)C=function(a,e,r,t,n,i,o,s){var a=t.cartesianToCartographic(a,I),e=t.cartesianToCartographic(e,k),c=y.numberOfPointsRhumbLine(a,e,r);a.height=0,e.height=0;var l=G(c,n,i);(B=!B.ellipsoid.equals(t)?new d.EllipsoidRhumbLine(void 0,void 0,t):B).setEndPoints(a,e);var u=B.surfaceDistance/c,h=s;a.height=n;var f=t.cartographicToCartesian(a,V);m.Cartesian3.pack(f,o,h),h+=3;for(var g=1;g<c;g++){var C=B.interpolateUsingSurfaceDistance(g*u,k);C.height=l[g],f=t.cartographicToCartesian(C,V),m.Cartesian3.pack(f,o,h),h+=3}return h}(e[f],e[f+1],l,t,i?n[f]:n,i?n[f+1]:n,g,C);N.length=0;a=e[r-1],a=t.cartesianToCartographic(a,I);a.height=i?n[r-1]:n;a=t.cartographicToCartesian(a,V);return m.Cartesian3.pack(a,g,s-3),g},y.generateCartesianArc=function(a){for(var e=y.generateArc(a),r=e.length/3,t=new Array(r),n=0;n<r;n++)t[n]=m.Cartesian3.unpack(e,3*n);return t},y.generateCartesianRhumbArc=function(a){for(var e=y.generateRhumbArc(a),r=e.length/3,t=new Array(r),n=0;n<r;n++)t[n]=m.Cartesian3.unpack(e,3*n);return t},a.PolylinePipeline=y}); diff --git a/public/lib/Cesium/Workers/PolylineVolumeGeometryLibrary-ec280c2f.js b/public/lib/Cesium/Workers/PolylineVolumeGeometryLibrary-ec280c2f.js new file mode 100644 index 0000000..7da015a --- /dev/null +++ b/public/lib/Cesium/Workers/PolylineVolumeGeometryLibrary-ec280c2f.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Transforms-5295b227","./EllipsoidTangentPlane-0fb66b96","./Math-b53708b3","./PolylinePipeline-00f5e064"],function(a,O,p,m,N,V){"use strict";var G=Object.freeze({ROUNDED:0,MITERED:1,BEVELED:2}),R=[new O.Cartesian3,new O.Cartesian3],I=new O.Cartesian3,L=new O.Cartesian3,j=new O.Cartesian3,Q=new O.Cartesian3,F=new O.Cartesian3,U=new O.Cartesian3,_=new O.Cartesian3,q=new O.Cartesian3,Y=new O.Cartesian3,Z=new O.Cartesian3,g=new O.Cartesian3,k={},H=new O.Cartographic;function J(a,e,r,n){var t=a[0],a=a[1],a=O.Cartesian3.angleBetween(t,a),i=Math.ceil(a/n),s=new Array(i);if(e===r){for(l=0;l<i;l++)s[l]=e;return s.push(r),s}for(var o=(r-e)/i,l=1;l<i;l++){var C=e+l*o;s[l]=C}return s[0]=e,s.push(r),s}var d=new O.Cartesian3,f=new O.Cartesian3;var w=new O.Cartesian3(-1,0,0),h=new p.Matrix4,v=new p.Matrix4,x=new p.Matrix3,P=p.Matrix3.IDENTITY.clone(),E=new O.Cartesian3,M=new p.Cartesian4,T=new O.Cartesian3;function K(a,e,r,n,t,i,s,o){var l=E,C=M;h=p.Transforms.eastNorthUpToFixedFrame(a,t,h),l=p.Matrix4.multiplyByPointAsVector(h,w,l);var l=O.Cartesian3.normalize(l,l),e=(l=l,e=e,a=a,t=t,t=new m.EllipsoidTangentPlane(a,t),l=t.projectPointOntoPlane(O.Cartesian3.add(a,l,d),d),a=t.projectPointOntoPlane(O.Cartesian3.add(a,e,f),f),e=O.Cartesian2.angleBetween(l,a),0<=a.x*l.y-a.y*l.x?-e:e);x=p.Matrix3.fromRotationZ(e,x),T.z=i,h=p.Matrix4.multiplyTransformation(h,p.Matrix4.fromRotationTranslation(x,T,v),h);var c=P;c[0]=s;for(var u=0;u<o;u++)for(var y=0;y<r.length;y+=3)C=O.Cartesian3.fromArray(r,y,C),C=p.Matrix3.multiplyByVector(c,C,C),C=p.Matrix4.multiplyByPoint(h,C,C),n.push(C.x,C.y,C.z);return n}var l=new O.Cartesian3;function W(a,e,r,n,t,i,s){for(var o=0;o<a.length;o+=3)n=K(O.Cartesian3.fromArray(a,o,l),e,r,n,t,i[o/3],s,1);return n}function X(a,e){for(var r=a.length,n=new Array(3*r),t=0,i=e.x+e.width/2,s=e.y+e.height/2,o=0;o<r;o++)n[t++]=a[o].x-i,n[t++]=0,n[t++]=a[o].y-s;return n}var B=new p.Quaternion,b=new O.Cartesian3,z=new p.Matrix3;function $(a,e,r,n,t,i,s,o,l,C){var c,u=O.Cartesian3.angleBetween(O.Cartesian3.subtract(e,a,Z),O.Cartesian3.subtract(r,a,g)),y=n===G.BEVELED?0:Math.ceil(u/N.CesiumMath.toRadians(5)),m=t?p.Matrix3.fromQuaternion(p.Quaternion.fromAxisAngle(O.Cartesian3.negate(a,Z),u/(y+1),B),z):p.Matrix3.fromQuaternion(p.Quaternion.fromAxisAngle(a,u/(y+1),B),z);if(e=O.Cartesian3.clone(e,b),0<y)for(var d=C?2:1,f=0;f<y;f++)e=p.Matrix3.multiplyByVector(m,e,e),c=O.Cartesian3.subtract(e,a,Z),c=O.Cartesian3.normalize(c,c),t||(c=O.Cartesian3.negate(c,c)),s=K(i.scaleToGeodeticSurface(e,g),c,o,s,i,l,1,d);else c=O.Cartesian3.subtract(e,a,Z),c=O.Cartesian3.normalize(c,c),t||(c=O.Cartesian3.negate(c,c)),s=K(i.scaleToGeodeticSurface(e,g),c,o,s,i,l,1,1),r=O.Cartesian3.clone(r,b),c=O.Cartesian3.subtract(r,a,Z),c=O.Cartesian3.normalize(c,c),t||(c=O.Cartesian3.negate(c,c)),s=K(i.scaleToGeodeticSurface(r,g),c,o,s,i,l,1,1);return s}k.removeDuplicatesFromShape=function(a){for(var e=a.length,r=[],n=e-1,t=0;t<e;n=t++){var i=a[n],s=a[t];O.Cartesian2.equals(i,s)||r.push(s)}return r},k.angleIsGreaterThanPi=function(a,e,r,n){n=new m.EllipsoidTangentPlane(r,n),a=n.projectPointOntoPlane(O.Cartesian3.add(r,a,d),d),e=n.projectPointOntoPlane(O.Cartesian3.add(r,e,f),f);return 0<=e.x*a.y-e.y*a.x};var aa=new O.Cartesian3,ea=new O.Cartesian3;k.computePositions=function(a,e,r,n,t){var i=n._ellipsoid,s=function(a,e){for(var r=new Array(a.length),n=0;n<a.length;n++){var t=a[n];H=e.cartesianToCartographic(t,H),r[n]=H.height,a[n]=e.scaleToGeodeticSurface(t,t)}return r}(a,i),o=n._granularity,l=n._cornerType,C=(t?function(a,e){var r=a.length,n=new Array(6*r),t=0,i=e.x+e.width/2,s=e.y+e.height/2,o=a[0];n[t++]=o.x-i,n[t++]=0,n[t++]=o.y-s;for(var l=1;l<r;l++){var C=(o=a[l]).x-i,c=o.y-s;n[t++]=C,n[t++]=0,n[t++]=c,n[t++]=C,n[t++]=0,n[t++]=c}return o=a[0],n[t++]=o.x-i,n[t++]=0,n[t++]=o.y-s,n}:X)(e,r),e=t?X(e,r):void 0,c=r.height/2,u=r.width/2,y=a.length,m=[],r=t?[]:void 0,d=I,f=L,p=j,g=Q,w=F,h=U,v=_,x=q,P=Y,E=a[0],M=a[1];g=i.geodeticSurfaceNormal(E,g),d=O.Cartesian3.subtract(M,E,d),d=O.Cartesian3.normalize(d,d),x=O.Cartesian3.cross(g,d,x);var T,x=O.Cartesian3.normalize(x,x),B=s[0],b=s[1];t&&(r=K(E,x,e,r,i,B+c,1,1)),P=O.Cartesian3.clone(E,P),E=M,f=O.Cartesian3.negate(d,f);for(var z=1;z<y-1;z++){var S=t?2:1,M=a[z+1],d=O.Cartesian3.subtract(M,E,d);d=O.Cartesian3.normalize(d,d),p=O.Cartesian3.add(d,f,p),p=O.Cartesian3.normalize(p,p);var g=i.geodeticSurfaceNormal(E,g),A=O.Cartesian3.multiplyByScalar(g,O.Cartesian3.dot(d,g),aa);O.Cartesian3.subtract(d,A,A),O.Cartesian3.normalize(A,A);var D=O.Cartesian3.multiplyByScalar(g,O.Cartesian3.dot(f,g),ea);O.Cartesian3.subtract(f,D,D),O.Cartesian3.normalize(D,D),!N.CesiumMath.equalsEpsilon(Math.abs(O.Cartesian3.dot(A,D)),1,N.CesiumMath.EPSILON7)?(p=O.Cartesian3.cross(p,g,p),p=O.Cartesian3.cross(g,p,p),p=O.Cartesian3.normalize(p,p),A=1/Math.max(.25,O.Cartesian3.magnitude(O.Cartesian3.cross(p,f,Z))),(D=k.angleIsGreaterThanPi(d,f,E,i))?(w=O.Cartesian3.add(E,O.Cartesian3.multiplyByScalar(p,A*u,p),w),h=O.Cartesian3.add(w,O.Cartesian3.multiplyByScalar(x,u,h),h),R[0]=O.Cartesian3.clone(P,R[0]),R[1]=O.Cartesian3.clone(h,R[1]),T=J(R,B+c,b+c,o),m=W(V.PolylinePipeline.generateArc({positions:R,granularity:o,ellipsoid:i}),x,C,m,i,T,1),x=O.Cartesian3.cross(g,d,x),x=O.Cartesian3.normalize(x,x),v=O.Cartesian3.add(w,O.Cartesian3.multiplyByScalar(x,u,v),v),l===G.ROUNDED||l===G.BEVELED?$(w,h,v,l,D,i,m,C,b+c,t):m=K(E,p=O.Cartesian3.negate(p,p),C,m,i,b+c,A,S)):(w=O.Cartesian3.add(E,O.Cartesian3.multiplyByScalar(p,A*u,p),w),h=O.Cartesian3.add(w,O.Cartesian3.multiplyByScalar(x,-u,h),h),R[0]=O.Cartesian3.clone(P,R[0]),R[1]=O.Cartesian3.clone(h,R[1]),T=J(R,B+c,b+c,o),m=W(V.PolylinePipeline.generateArc({positions:R,granularity:o,ellipsoid:i}),x,C,m,i,T,1),x=O.Cartesian3.cross(g,d,x),x=O.Cartesian3.normalize(x,x),v=O.Cartesian3.add(w,O.Cartesian3.multiplyByScalar(x,-u,v),v),l===G.ROUNDED||l===G.BEVELED?$(w,h,v,l,D,i,m,C,b+c,t):m=K(E,p,C,m,i,b+c,A,S)),P=O.Cartesian3.clone(v,P),f=O.Cartesian3.negate(d,f)):(m=K(P,x,C,m,i,B+c,1,1),P=E),B=b,b=s[z+1],E=M}R[0]=O.Cartesian3.clone(P,R[0]),R[1]=O.Cartesian3.clone(E,R[1]),T=J(R,B+c,b+c,o),m=W(V.PolylinePipeline.generateArc({positions:R,granularity:o,ellipsoid:i}),x,C,m,i,T,1),t&&(r=K(E,x,e,r,i,b+c,1,1));y=m.length,e=t?y+r.length:y,e=new Float64Array(e);return e.set(m),t&&e.set(r,y),e},a.CornerType=G,a.PolylineVolumeGeometryLibrary=k}); diff --git a/public/lib/Cesium/Workers/PrimitivePipeline-c896ba3a.js b/public/lib/Cesium/Workers/PrimitivePipeline-c896ba3a.js new file mode 100644 index 0000000..25411ca --- /dev/null +++ b/public/lib/Cesium/Workers/PrimitivePipeline-c896ba3a.js @@ -0,0 +1 @@ +define(["exports","./Transforms-5295b227","./ComponentDatatype-8f71e605","./when-ca391574","./Check-64f87f7d","./Cartesian2-5b63e672","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./WebMercatorProjection-e0329e39"],function(e,P,k,y,t,f,C,w,b,A,c){"use strict";function m(e,t,r){e=y.defaultValue(e,0),t=y.defaultValue(t,0),r=y.defaultValue(r,0),this.value=new Float32Array([e,t,r])}function v(e,t){var r=e.attributes,e=r.position,n=e.values.length/e.componentsPerAttribute;r.batchId=new C.GeometryAttribute({componentDatatype:k.ComponentDatatype.FLOAT,componentsPerAttribute:1,values:new Float32Array(n)});for(var i=r.batchId.values,o=0;o<n;++o)i[o]=t}function l(e){var t=e.instances,r=e.projection,n=e.elementIndexUintSupported,i=e.scene3DOnly,o=e.vertexCacheOptimize,a=e.compressVertices,e=e.modelMatrix,s=t.length;for(g=0;g<s;++g)if(y.defined(t[g].geometry)){t[g].geometry.primitiveType;break}if(!function(e,t,r){var n=!r,i=e.length;if(!n&&1<i)for(var o=e[0].modelMatrix,a=1;a<i;++a)if(!P.Matrix4.equals(o,e[a].modelMatrix)){n=!0;break}if(n)for(a=0;a<i;++a)y.defined(e[a].geometry)&&b.GeometryPipeline.transformToWorldCoordinates(e[a]);else P.Matrix4.multiplyTransformation(t,e[0].modelMatrix,t)}(t,e,i),!i)for(g=0;g<s;++g)y.defined(t[g].geometry)&&b.GeometryPipeline.splitLongitude(t[g]);if(!function(e){for(var t=e.length,r=0;r<t;++r){var n=e[r];y.defined(n.geometry)?v(n.geometry,r):y.defined(n.westHemisphereGeometry)&&y.defined(n.eastHemisphereGeometry)&&(v(n.westHemisphereGeometry,r),v(n.eastHemisphereGeometry,r))}}(t),o)for(g=0;g<s;++g){var d=t[g];y.defined(d.geometry)?(b.GeometryPipeline.reorderForPostVertexCache(d.geometry),b.GeometryPipeline.reorderForPreVertexCache(d.geometry)):y.defined(d.westHemisphereGeometry)&&y.defined(d.eastHemisphereGeometry)&&(b.GeometryPipeline.reorderForPostVertexCache(d.westHemisphereGeometry),b.GeometryPipeline.reorderForPreVertexCache(d.westHemisphereGeometry),b.GeometryPipeline.reorderForPostVertexCache(d.eastHemisphereGeometry),b.GeometryPipeline.reorderForPreVertexCache(d.eastHemisphereGeometry))}var p=b.GeometryPipeline.combineInstances(t);for(s=p.length,g=0;g<s;++g){var u,f,c,m,h=(u=p[g]).attributes;if(i)for(f in h)h.hasOwnProperty(f)&&h[f].componentDatatype===k.ComponentDatatype.DOUBLE&&b.GeometryPipeline.encodeAttribute(u,f,f+"3DHigh",f+"3DLow");else for(f in h)h.hasOwnProperty(f)&&h[f].componentDatatype===k.ComponentDatatype.DOUBLE&&(c=f+"3D",m=f+"2D",b.GeometryPipeline.projectTo2D(u,f,c,m,r),y.defined(u.boundingSphere)&&"position"===f&&(u.boundingSphereCV=P.BoundingSphere.fromVertices(u.attributes.position2D.values)),b.GeometryPipeline.encodeAttribute(u,c,c+"High",c+"Low"),b.GeometryPipeline.encodeAttribute(u,m,m+"High",m+"Low"));a&&b.GeometryPipeline.compressVertices(u)}if(!n){for(var l=[],s=p.length,g=0;g<s;++g)u=p[g],l=l.concat(b.GeometryPipeline.fitToUnsignedShortIndices(u));p=l}return p}function g(e,t,r,n){var i,o,a,s=n.length-1;a=0<=s?(i=(s=n[s]).offset+s.count,r[o=s.index].indices.length):r[o=i=0].indices.length;for(var d=e.length,p=0;p<d;++p){var u=e[p][t];y.defined(u)&&(a<i+(u=u.indices.length)&&(i=0,a=r[++o].indices.length),n.push({index:o,offset:i,count:u}),i+=u)}}Object.defineProperties(m.prototype,{componentDatatype:{get:function(){return k.ComponentDatatype.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}}),m.fromCartesian3=function(e){return new m(e.x,e.y,e.z)},m.toValue=function(e,t){return(t=!y.defined(t)?new Float32Array([e.x,e.y,e.z]):t)[0]=e.x,t[1]=e.y,t[2]=e.z,t};var h={};function i(e,t){for(var r=e.length,n=0;n<r;++n)!function(e,t){var r,n,i=e.attributes;for(r in i)i.hasOwnProperty(r)&&(n=i[r],y.defined(n)&&y.defined(n.values)&&t.push(n.values.buffer));y.defined(e.indices)&&t.push(e.indices.buffer)}(e[n],t)}function o(e){var t=e.length,r=1+(P.BoundingSphere.packedLength+1)*t,n=new Float32Array(r),i=0;n[i++]=t;for(var o=0;o<t;++o){var a=e[o];y.defined(a)?(n[i++]=1,P.BoundingSphere.pack(e[o],n,i)):n[i++]=0,i+=P.BoundingSphere.packedLength}return n}function r(e){for(var t=new Array(e[0]),r=0,n=1;n<e.length;)1===e[n++]&&(t[r]=P.BoundingSphere.unpack(e,n)),++r,n+=P.BoundingSphere.packedLength;return t}h.combineGeometry=function(e){var t,r,n,i,o,a,s=e.instances,d=s.length,p=!1;0<d&&(0<(t=l(e)).length&&(r=b.GeometryPipeline.createAttributeLocations(t[0]),e.createPickOffsets&&(g(i=s,"geometry",o=t,a=[]),g(i,"westHemisphereGeometry",o,a),g(i,"eastHemisphereGeometry",o,a),a=a)),y.defined(s[0].attributes)&&y.defined(s[0].attributes.offset)&&(n=new Array(d),p=!0));for(var u=new Array(d),f=new Array(d),c=0;c<d;++c){var m=s[c],h=m.geometry;y.defined(h)&&(u[c]=h.boundingSphere,f[c]=h.boundingSphereCV,p&&(n[c]=m.geometry.offsetAttribute));h=m.eastHemisphereGeometry,m=m.westHemisphereGeometry;y.defined(h)&&y.defined(m)&&(y.defined(h.boundingSphere)&&y.defined(m.boundingSphere)&&(u[c]=P.BoundingSphere.union(h.boundingSphere,m.boundingSphere)),y.defined(h.boundingSphereCV)&&y.defined(m.boundingSphereCV)&&(f[c]=P.BoundingSphere.union(h.boundingSphereCV,m.boundingSphereCV)))}return{geometries:t,modelMatrix:e.modelMatrix,attributeLocations:r,pickOffsets:a,offsetInstanceExtend:n,boundingSpheres:u,boundingSpheresCV:f}},h.packCreateGeometryResults=function(e,t){var r=new Float64Array(function(e){for(var t=1,r=e.length,n=0;n<r;n++){var i=e[n];if(++t,y.defined(i)){var o,a=i.attributes;for(o in t+=7+2*P.BoundingSphere.packedLength+(y.defined(i.indices)?i.indices.length:0),a)a.hasOwnProperty(o)&&y.defined(a[o])&&(t+=5+a[o].values.length)}}return t}(e)),n=[],i={},o=e.length,a=0;r[a++]=o;for(var s=0;s<o;s++){var d=e[s],p=y.defined(d);if(r[a++]=p?1:0,p){r[a++]=d.primitiveType,r[a++]=d.geometryType,r[a++]=y.defaultValue(d.offsetAttribute,-1);p=y.defined(d.boundingSphere)?1:0;(r[a++]=p)&&P.BoundingSphere.pack(d.boundingSphere,r,a),a+=P.BoundingSphere.packedLength;p=y.defined(d.boundingSphereCV)?1:0;(r[a++]=p)&&P.BoundingSphere.pack(d.boundingSphereCV,r,a),a+=P.BoundingSphere.packedLength;var u,f=d.attributes,c=[];for(u in f)f.hasOwnProperty(u)&&y.defined(f[u])&&(c.push(u),y.defined(i[u])||(i[u]=n.length,n.push(u)));r[a++]=c.length;for(var m=0;m<c.length;m++){var h=c[m],l=f[h];r[a++]=i[h],r[a++]=l.componentDatatype,r[a++]=l.componentsPerAttribute,r[a++]=l.normalize?1:0,r[a++]=l.values.length,r.set(l.values,a),a+=l.values.length}p=y.defined(d.indices)?d.indices.length:0;0<(r[a++]=p)&&(r.set(d.indices,a),a+=p)}}return t.push(r.buffer),{stringTable:n,packedData:r}},h.unpackCreateGeometryResults=function(e){for(var t=e.stringTable,r=e.packedData,n=new Array(r[0]),i=0,o=1;o<r.length;)if(1===r[o++]){var a,s,d=r[o++],p=r[o++],u=r[o++];-1===u&&(u=void 0),1===r[o++]&&(a=P.BoundingSphere.unpack(r,o)),o+=P.BoundingSphere.packedLength,1===r[o++]&&(s=P.BoundingSphere.unpack(r,o)),o+=P.BoundingSphere.packedLength;var f=new w.GeometryAttributes,c=r[o++];for(S=0;S<c;S++){for(var m=t[r[o++]],h=r[o++],l=r[o++],g=0!==r[o++],y=r[o++],b=k.ComponentDatatype.createTypedArray(h,y),v=0;v<y;v++)b[v]=r[o++];f[m]=new C.GeometryAttribute({componentDatatype:h,componentsPerAttribute:l,normalize:g,values:b})}if(0<(y=r[o++]))for(var G=b.length/l,x=A.IndexDatatype.createTypedArray(G,y),S=0;S<y;S++)x[S]=r[o++];n[i++]=new C.Geometry({primitiveType:d,geometryType:p,boundingSphere:a,boundingSphereCV:s,indices:x,attributes:f,offsetAttribute:u})}else n[i++]=void 0;return n},h.packCombineGeometryParameters=function(e,t){for(var r=e.createGeometryResults,n=r.length,i=0;i<n;i++)t.push(r[i].packedData.buffer);return{createGeometryResults:e.createGeometryResults,packedInstances:function(e,t){var r=e.length,n=new Float64Array(1+19*r),i=0;n[i++]=r;for(var o=0;o<r;o++){var a=e[o];P.Matrix4.pack(a.modelMatrix,n,i),i+=P.Matrix4.packedLength,y.defined(a.attributes)&&y.defined(a.attributes.offset)&&(a=a.attributes.offset.value,n[i]=a[0],n[i+1]=a[1],n[i+2]=a[2]),i+=3}return t.push(n.buffer),n}(e.instances,t),ellipsoid:e.ellipsoid,isGeographic:e.projection instanceof P.GeographicProjection,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e.createPickOffsets}},h.unpackCombineGeometryParameters=function(e){for(var t=function(e){for(var t=e,r=new Array(t[0]),n=0,i=1;i<t.length;){var o,a=P.Matrix4.unpack(t,i);i+=P.Matrix4.packedLength,y.defined(t[i])&&(o={offset:new m(t[i],t[i+1],t[i+2])}),i+=3,r[n++]={modelMatrix:a,attributes:o}}return r}(e.packedInstances),r=e.createGeometryResults,n=r.length,i=0,o=0;o<n;o++)for(var a=h.unpackCreateGeometryResults(r[o]),s=a.length,d=0;d<s;d++){var p=a[d];t[i].geometry=p,++i}var u=f.Ellipsoid.clone(e.ellipsoid);return{instances:t,ellipsoid:u,projection:new(e.isGeographic?P.GeographicProjection:c.WebMercatorProjection)(u),elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:P.Matrix4.clone(e.modelMatrix),createPickOffsets:e.createPickOffsets}},h.packCombineGeometryResults=function(e,t){y.defined(e.geometries)&&i(e.geometries,t);var r=o(e.boundingSpheres),n=o(e.boundingSpheresCV);return t.push(r.buffer,n.buffer),{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:r,boundingSpheresCV:n}},h.unpackCombineGeometryResults=function(e){return{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:r(e.boundingSpheres),boundingSpheresCV:r(e.boundingSpheresCV)}},e.PrimitivePipeline=h}); diff --git a/public/lib/Cesium/Workers/RectangleGeometryLibrary-8c98c500.js b/public/lib/Cesium/Workers/RectangleGeometryLibrary-8c98c500.js new file mode 100644 index 0000000..2522d8f --- /dev/null +++ b/public/lib/Cesium/Workers/RectangleGeometryLibrary-8c98c500.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./when-ca391574","./Check-64f87f7d","./Transforms-5295b227","./Math-b53708b3","./GeometryAttribute-7ef2d452"],function(t,X,d,n,a,Y,l){"use strict";var w=Math.cos,M=Math.sin,m=Math.sqrt,r={computePosition:function(t,n,a,r,e,o,s){var i=n.radiiSquared,g=t.nwCorner,h=t.boundingRectangle,u=g.latitude-t.granYCos*r+e*t.granXSin,c=w(u),C=M(u),l=i.z*C,S=g.longitude+r*t.granYSin+e*t.granXCos,n=c*w(S),g=c*M(S),c=i.x*n,i=i.y*g,C=m(c*n+i*g+l*C);o.x=c/C,o.y=i/C,o.z=l/C,a&&(a=t.stNwCorner,d.defined(a)?(u=a.latitude-t.stGranYCos*r+e*t.stGranXSin,S=a.longitude+r*t.stGranYSin+e*t.stGranXCos,s.x=(S-t.stWest)*t.lonScalar,s.y=(u-t.stSouth)*t.latScalar):(s.x=(S-h.west)*t.lonScalar,s.y=(u-h.south)*t.latScalar))}},S=new l.Matrix2,p=new X.Cartesian3,f=new X.Cartographic,G=new X.Cartesian3,x=new a.GeographicProjection;function R(t,n,a,r,e,o,s){var i=Math.cos(n),g=r*i,h=a*i,u=Math.sin(n),c=r*u,C=a*u;p=x.project(t,p),p=X.Cartesian3.subtract(p,G,p);i=l.Matrix2.fromRotation(n,S);p=l.Matrix2.multiplyByVector(i,p,p),p=X.Cartesian3.add(p,G,p),--o,--s;r=(t=x.unproject(p,t)).latitude,a=r+o*C,u=r-g*s,n=r-g*s+o*C,i=Math.max(r,a,u,n),r=Math.min(r,a,u,n),a=t.longitude,u=a+o*h,n=a+s*c,o=a+s*c+o*h;return{north:i,south:r,east:Math.max(a,u,n,o),west:Math.min(a,u,n,o),granYCos:g,granYSin:c,granXCos:h,granXSin:C,nwCorner:t}}r.computeOptions=function(t,n,a,r,e,o,s){var i=t.east,g=t.west,h=t.north,u=t.south,c=!1,C=!1;h===Y.CesiumMath.PI_OVER_TWO&&(c=!0),u===-Y.CesiumMath.PI_OVER_TWO&&(C=!0);var l,S=h-u,d=(w=i<g?Y.CesiumMath.TWO_PI-g+i:i-g)/((l=Math.ceil(w/n)+1)-1),w=S/((M=Math.ceil(S/n)+1)-1),S=X.Rectangle.northwest(t,o),n=X.Rectangle.center(t,f);0===a&&0===r||(n.longitude<S.longitude&&(n.longitude+=Y.CesiumMath.TWO_PI),G=x.project(n,G));var M,o=w,n=d,e=X.Rectangle.clone(t,e),C={granYCos:o,granYSin:0,granXCos:n,granXSin:0,nwCorner:S,boundingRectangle:e,width:l,height:M,northCap:c,southCap:C};return 0!==a&&(h=(S=R(S,a,d,w,0,l,M)).north,u=S.south,i=S.east,g=S.west,C.granYCos=S.granYCos,C.granYSin=S.granYSin,C.granXCos=S.granXCos,C.granXSin=S.granXSin,e.north=h,e.south=u,e.east=i,e.west=g),0!==r&&(a-=r,M=R(s=X.Rectangle.northwest(e,s),a,d,w,0,l,M),C.stGranYCos=M.granYCos,C.stGranXCos=M.granXCos,C.stGranYSin=M.granYSin,C.stGranXSin=M.granXSin,C.stNwCorner=s,C.stWest=M.west,C.stSouth=M.south),C},t.RectangleGeometryLibrary=r}); diff --git a/public/lib/Cesium/Workers/RuntimeError-19cb26ba.js b/public/lib/Cesium/Workers/RuntimeError-19cb26ba.js new file mode 100644 index 0000000..24b2255 --- /dev/null +++ b/public/lib/Cesium/Workers/RuntimeError-19cb26ba.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574"],function(t,r){"use strict";function e(t){var r;this.name="RuntimeError",this.message=t;try{throw new Error}catch(t){r=t.stack}this.stack=r}r.defined(Object.create)&&((e.prototype=Object.create(Error.prototype)).constructor=e),e.prototype.toString=function(){var t=this.name+": "+this.message;return r.defined(this.stack)&&(t+="\n"+this.stack.toString()),t},t.RuntimeError=e}); diff --git a/public/lib/Cesium/Workers/TerrainEncoding-0f94e395.js b/public/lib/Cesium/Workers/TerrainEncoding-0f94e395.js new file mode 100644 index 0000000..b0fdeac --- /dev/null +++ b/public/lib/Cesium/Workers/TerrainEncoding-0f94e395.js @@ -0,0 +1 @@ +define(["exports","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./AttributeCompression-a99f24b9","./ComponentDatatype-8f71e605","./Math-b53708b3"],function(t,l,p,e,h,d,o,f){"use strict";function i(t,e){this._ellipsoid=t,this._cameraPosition=new p.Cartesian3,this._cameraPositionInScaledSpace=new p.Cartesian3,this._distanceToLimbInScaledSpaceSquared=0,h.defined(e)&&(this.cameraPosition=e)}Object.defineProperties(i.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(t){var e=this._ellipsoid.transformPositionToScaledSpace(t,this._cameraPositionInScaledSpace),i=p.Cartesian3.magnitudeSquared(e)-1;p.Cartesian3.clone(t,this._cameraPosition),this._cameraPositionInScaledSpace=e,this._distanceToLimbInScaledSpaceSquared=i}}});var r=new p.Cartesian3;i.prototype.isPointVisible=function(t){return S(this._ellipsoid.transformPositionToScaledSpace(t,r),this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)},i.prototype.isScaledSpacePointVisible=function(t){return S(t,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var a=new p.Cartesian3;i.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(t,e){var i,r=this._ellipsoid,e=h.defined(e)&&e<0&&r.minimumRadius>-e?((i=a).x=this._cameraPosition.x/(r.radii.x+e),i.y=this._cameraPosition.y/(r.radii.y+e),i.z=this._cameraPosition.z/(r.radii.z+e),i.x*i.x+i.y*i.y+i.z*i.z-1):(i=this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared);return S(t,i,e)},i.prototype.computeHorizonCullingPoint=function(t,e,i){return u(this._ellipsoid,t,e,i)};var s=p.Ellipsoid.clone(p.Ellipsoid.UNIT_SPHERE);i.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(t,e,i,r){return u(c(this._ellipsoid,i,s),t,e,r)},i.prototype.computeHorizonCullingPointFromVertices=function(t,e,i,r,a){return C(this._ellipsoid,t,e,i,r,a)},i.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(t,e,i,r,a,n){return C(c(this._ellipsoid,a,s),t,e,i,r,n)};var n=[];i.prototype.computeHorizonCullingPointFromRectangle=function(t,e,i){var r=p.Rectangle.subsample(t,e,0,n),t=l.BoundingSphere.fromPoints(r);if(!(p.Cartesian3.magnitude(t.center)<.1*e.minimumRadius))return this.computeHorizonCullingPoint(t.center,r,i)};var m=new p.Cartesian3;function c(t,e,i){return h.defined(e)&&e<0&&t.minimumRadius>-e&&(e=p.Cartesian3.fromElements(t.radii.x+e,t.radii.y+e,t.radii.z+e,m),t=p.Ellipsoid.fromCartesian3(e,i)),t}function u(t,e,i,r){h.defined(r)||(r=new p.Cartesian3);for(var a=P(t,e),n=0,o=0,s=i.length;o<s;++o){var m=M(t,i[o],a);if(m<0)return;n=Math.max(n,m)}return g(a,n,r)}var x=new p.Cartesian3;function C(t,e,i,r,a,n){h.defined(n)||(n=new p.Cartesian3),r=h.defaultValue(r,3),a=h.defaultValue(a,p.Cartesian3.ZERO);for(var o=P(t,e),s=0,m=0,c=i.length;m<c;m+=r){x.x=i[m]+a.x,x.y=i[m+1]+a.y,x.z=i[m+2]+a.z;var u=M(t,x,o);if(u<0)return;s=Math.max(s,u)}return g(o,s,n)}function S(t,e,i){t=p.Cartesian3.subtract(t,e,r),e=-p.Cartesian3.dot(t,e);return!(i<0?0<e:i<e&&e*e/p.Cartesian3.magnitudeSquared(t)>i)}var y=new p.Cartesian3,b=new p.Cartesian3;function M(t,e,i){var r=t.transformPositionToScaledSpace(e,y),t=p.Cartesian3.magnitudeSquared(r),e=Math.sqrt(t),r=p.Cartesian3.divideByScalar(r,e,b),t=Math.max(1,t),e=1/(e=Math.max(1,e));return 1/(p.Cartesian3.dot(r,i)*e-p.Cartesian3.magnitude(p.Cartesian3.cross(r,i,r))*(Math.sqrt(t-1)*e))}function g(t,e,i){if(!(e<=0||e===1/0||e!=e))return p.Cartesian3.multiplyByScalar(t,e,i)}var T=new p.Cartesian3;function P(t,e){return p.Cartesian3.equals(e,p.Cartesian3.ZERO)?e:(t.transformPositionToScaledSpace(e,T),p.Cartesian3.normalize(T,T))}var z=Object.freeze({NONE:0,BITS12:1}),E=new p.Cartesian3,v=new p.Cartesian3,N=new p.Cartesian2,I=new l.Matrix4,B=new l.Matrix4,_=Math.pow(2,12);function w(t,e,i,r,a,n){var o,s,m,c,u,d=z.NONE;h.defined(t)&&h.defined(e)&&h.defined(i)&&h.defined(r)&&(c=t.minimum,s=t.maximum,u=p.Cartesian3.subtract(s,c,v),m=i-e,d=Math.max(p.Cartesian3.maximumComponent(u),m)<_-1?z.BITS12:z.NONE,o=t.center,s=l.Matrix4.inverseTransformation(r,new l.Matrix4),m=p.Cartesian3.negate(c,E),l.Matrix4.multiply(l.Matrix4.fromTranslation(m,I),s,s),(m=E).x=1/u.x,m.y=1/u.y,m.z=1/u.z,l.Matrix4.multiply(l.Matrix4.fromScale(m,I),s,s),m=l.Matrix4.clone(r),l.Matrix4.setTranslation(m,p.Cartesian3.ZERO,m),r=l.Matrix4.clone(r,new l.Matrix4),c=l.Matrix4.fromTranslation(c,I),u=l.Matrix4.fromScale(u,B),u=l.Matrix4.multiply(c,u,I),l.Matrix4.multiply(r,u,r),l.Matrix4.multiply(m,u,m)),this.quantization=d,this.minimumHeight=e,this.maximumHeight=i,this.center=o,this.toScaledENU=s,this.fromScaledENU=r,this.matrix=m,this.hasVertexNormals=a,this.hasWebMercatorT=h.defaultValue(n,!1)}w.prototype.encode=function(t,e,i,r,a,n,o){var s,m,c=r.x,u=r.y;return this.quantization===z.BITS12?((i=l.Matrix4.multiplyByPoint(this.toScaledENU,i,E)).x=f.CesiumMath.clamp(i.x,0,1),i.y=f.CesiumMath.clamp(i.y,0,1),i.z=f.CesiumMath.clamp(i.z,0,1),s=this.maximumHeight-this.minimumHeight,m=f.CesiumMath.clamp((a-this.minimumHeight)/s,0,1),p.Cartesian2.fromElements(i.x,i.y,N),r=d.AttributeCompression.compressTextureCoordinates(N),p.Cartesian2.fromElements(i.z,m,N),s=d.AttributeCompression.compressTextureCoordinates(N),p.Cartesian2.fromElements(c,u,N),m=d.AttributeCompression.compressTextureCoordinates(N),t[e++]=r,t[e++]=s,t[e++]=m,this.hasWebMercatorT&&(p.Cartesian2.fromElements(o,0,N),m=d.AttributeCompression.compressTextureCoordinates(N),t[e++]=m)):(p.Cartesian3.subtract(i,this.center,E),t[e++]=E.x,t[e++]=E.y,t[e++]=E.z,t[e++]=a,t[e++]=c,t[e++]=u,this.hasWebMercatorT&&(t[e++]=o)),this.hasVertexNormals&&(t[e++]=d.AttributeCompression.octPackFloat(n)),e},w.prototype.decodePosition=function(t,e,i){if(h.defined(i)||(i=new p.Cartesian3),e*=this.getStride(),this.quantization!==z.BITS12)return i.x=t[e],i.y=t[e+1],i.z=t[e+2],p.Cartesian3.add(i,this.center,i);var r=d.AttributeCompression.decompressTextureCoordinates(t[e],N);i.x=r.x,i.y=r.y;e=d.AttributeCompression.decompressTextureCoordinates(t[e+1],N);return i.z=e.x,l.Matrix4.multiplyByPoint(this.fromScaledENU,i,i)},w.prototype.decodeTextureCoordinates=function(t,e,i){return h.defined(i)||(i=new p.Cartesian2),e*=this.getStride(),this.quantization===z.BITS12?d.AttributeCompression.decompressTextureCoordinates(t[e+2],i):p.Cartesian2.fromElements(t[e+4],t[e+5],i)},w.prototype.decodeHeight=function(t,e){return e*=this.getStride(),this.quantization!==z.BITS12?t[e+3]:d.AttributeCompression.decompressTextureCoordinates(t[e+1],N).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight},w.prototype.decodeWebMercatorT=function(t,e){return e*=this.getStride(),this.quantization===z.BITS12?d.AttributeCompression.decompressTextureCoordinates(t[e+3],N).x:t[e+6]},w.prototype.getOctEncodedNormal=function(t,e,i){t=t[e=(e+1)*this.getStride()-1]/256,e=Math.floor(t),t=256*(t-e);return p.Cartesian2.fromElements(e,t,i)},w.prototype.getStride=function(){var t=this.quantization===z.BITS12?3:6;return this.hasWebMercatorT&&++t,this.hasVertexNormals&&++t,t};var A={position3DAndHeight:0,textureCoordAndEncodedNormals:1},q={compressed0:0,compressed1:1};w.prototype.getAttributes=function(t){var e,i=o.ComponentDatatype.FLOAT,r=o.ComponentDatatype.getSizeInBytes(i);if(this.quantization===z.NONE){var a=2;return this.hasWebMercatorT&&++a,this.hasVertexNormals&&++a,[{index:A.position3DAndHeight,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:4,offsetInBytes:0,strideInBytes:e=(4+a)*r},{index:A.textureCoordAndEncodedNormals,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:a,offsetInBytes:4*r,strideInBytes:e}]}var n=3,a=0;return(this.hasWebMercatorT||this.hasVertexNormals)&&++n,this.hasWebMercatorT&&this.hasVertexNormals?(++a,[{index:q.compressed0,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:n,offsetInBytes:0,strideInBytes:e=(n+1)*r},{index:q.compressed1,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:1,offsetInBytes:n*r,strideInBytes:e}]):[{index:q.compressed0,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:n}]},w.prototype.getAttributeLocations=function(){return this.quantization===z.NONE?A:q},w.clone=function(t,e){return(e=!h.defined(e)?new w:e).quantization=t.quantization,e.minimumHeight=t.minimumHeight,e.maximumHeight=t.maximumHeight,e.center=p.Cartesian3.clone(t.center),e.toScaledENU=l.Matrix4.clone(t.toScaledENU),e.fromScaledENU=l.Matrix4.clone(t.fromScaledENU),e.matrix=l.Matrix4.clone(t.matrix),e.hasVertexNormals=t.hasVertexNormals,e.hasWebMercatorT=t.hasWebMercatorT,e},t.EllipsoidalOccluder=i,t.TerrainEncoding=w}); diff --git a/public/lib/Cesium/Workers/Transforms-5295b227.js b/public/lib/Cesium/Workers/Transforms-5295b227.js new file mode 100644 index 0000000..6e17515 --- /dev/null +++ b/public/lib/Cesium/Workers/Transforms-5295b227.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3","./RuntimeError-19cb26ba"],function(e,A,o,R,F,L){"use strict";function t(e){this._ellipsoid=R.defaultValue(e,A.Ellipsoid.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(t.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),t.prototype.project=function(e,t){var n=this._semimajorAxis,r=e.longitude*n,n=e.latitude*n,e=e.height;return R.defined(t)?(t.x=r,t.y=n,t.z=e,t):new A.Cartesian3(r,n,e)},t.prototype.unproject=function(e,t){var n=this._oneOverSemimajorAxis,r=e.x*n,n=e.y*n,e=e.z;return R.defined(t)?(t.longitude=r,t.latitude=n,t.height=e,t):new A.Cartographic(r,n,e)};var a=Object.freeze({OUTSIDE:-1,INTERSECTING:0,INSIDE:1});function i(e,t){this.start=R.defaultValue(e,0),this.stop=R.defaultValue(t,0)}function B(e,t,n,r,a,i,s,o,u){this[0]=R.defaultValue(e,0),this[1]=R.defaultValue(r,0),this[2]=R.defaultValue(s,0),this[3]=R.defaultValue(t,0),this[4]=R.defaultValue(a,0),this[5]=R.defaultValue(o,0),this[6]=R.defaultValue(n,0),this[7]=R.defaultValue(i,0),this[8]=R.defaultValue(u,0)}B.packedLength=9,B.pack=function(e,t,n){return n=R.defaultValue(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t},B.unpack=function(e,t,n){return t=R.defaultValue(t,0),(n=!R.defined(n)?new B:n)[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n},B.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):new B(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8])},B.fromArray=function(e,t,n){return t=R.defaultValue(t,0),(n=!R.defined(n)?new B:n)[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],n[4]=e[t+4],n[5]=e[t+5],n[6]=e[t+6],n[7]=e[t+7],n[8]=e[t+8],n},B.fromColumnMajorArray=function(e,t){return B.clone(e,t)},B.fromRowMajorArray=function(e,t){return R.defined(t)?(t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],t):new B(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])},B.fromQuaternion=function(e,t){var n=e.x*e.x,r=e.x*e.y,a=e.x*e.z,i=e.x*e.w,s=e.y*e.y,o=e.y*e.z,u=e.y*e.w,l=e.z*e.z,c=e.z*e.w,d=e.w*e.w,f=n-s-l+d,h=2*(r-c),p=2*(a+u),e=2*(r+c),r=s-n-l+d,c=2*(o-i),u=2*(a-u),i=2*(o+i),d=-n-s+l+d;return R.defined(t)?(t[0]=f,t[1]=e,t[2]=u,t[3]=h,t[4]=r,t[5]=i,t[6]=p,t[7]=c,t[8]=d,t):new B(f,h,p,e,r,c,u,i,d)},B.fromHeadingPitchRoll=function(e,t){var n=Math.cos(-e.pitch),r=Math.cos(-e.heading),a=Math.cos(e.roll),i=Math.sin(-e.pitch),s=Math.sin(-e.heading),o=Math.sin(e.roll),u=n*r,l=-a*s+o*i*r,c=o*s+a*i*r,d=n*s,e=a*r+o*i*s,s=-o*r+a*i*s,i=-i,o=o*n,n=a*n;return R.defined(t)?(t[0]=u,t[1]=d,t[2]=i,t[3]=l,t[4]=e,t[5]=o,t[6]=c,t[7]=s,t[8]=n,t):new B(u,l,c,d,e,s,i,o,n)},B.fromScale=function(e,t){return R.defined(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=e.y,t[5]=0,t[6]=0,t[7]=0,t[8]=e.z,t):new B(e.x,0,0,0,e.y,0,0,0,e.z)},B.fromUniformScale=function(e,t){return R.defined(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=e,t[5]=0,t[6]=0,t[7]=0,t[8]=e,t):new B(e,0,0,0,e,0,0,0,e)},B.fromCrossProduct=function(e,t){return R.defined(t)?(t[0]=0,t[1]=e.z,t[2]=-e.y,t[3]=-e.z,t[4]=0,t[5]=e.x,t[6]=e.y,t[7]=-e.x,t[8]=0,t):new B(0,-e.z,e.y,e.z,0,-e.x,-e.y,e.x,0)},B.fromRotationX=function(e,t){var n=Math.cos(e),e=Math.sin(e);return R.defined(t)?(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=n,t[5]=e,t[6]=0,t[7]=-e,t[8]=n,t):new B(1,0,0,0,n,-e,0,e,n)},B.fromRotationY=function(e,t){var n=Math.cos(e),e=Math.sin(e);return R.defined(t)?(t[0]=n,t[1]=0,t[2]=-e,t[3]=0,t[4]=1,t[5]=0,t[6]=e,t[7]=0,t[8]=n,t):new B(n,0,e,0,1,0,-e,0,n)},B.fromRotationZ=function(e,t){var n=Math.cos(e),e=Math.sin(e);return R.defined(t)?(t[0]=n,t[1]=e,t[2]=0,t[3]=-e,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new B(n,-e,0,e,n,0,0,0,1)},B.toArray=function(e,t){return R.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]]},B.getElementIndex=function(e,t){return 3*e+t},B.getColumn=function(e,t,n){var r=3*t,a=e[r],t=e[1+r],r=e[2+r];return n.x=a,n.y=t,n.z=r,n},B.setColumn=function(e,t,n,r){t*=3;return(r=B.clone(e,r))[t]=n.x,r[1+t]=n.y,r[2+t]=n.z,r},B.getRow=function(e,t,n){var r=e[t],a=e[t+3],t=e[t+6];return n.x=r,n.y=a,n.z=t,n},B.setRow=function(e,t,n,r){return(r=B.clone(e,r))[t]=n.x,r[t+3]=n.y,r[t+6]=n.z,r};var n=new A.Cartesian3;B.getScale=function(e,t){return t.x=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[0],e[1],e[2],n)),t.y=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[3],e[4],e[5],n)),t.z=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[6],e[7],e[8],n)),t};var r=new A.Cartesian3;B.getMaximumScale=function(e){return B.getScale(e,r),A.Cartesian3.maximumComponent(r)},B.multiply=function(e,t,n){var r=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],a=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],i=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],s=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],o=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],u=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],l=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],c=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],t=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];return n[0]=r,n[1]=a,n[2]=i,n[3]=s,n[4]=o,n[5]=u,n[6]=l,n[7]=c,n[8]=t,n},B.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n},B.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n},B.multiplyByVector=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=e[0]*r+e[3]*a+e[6]*i,t=e[1]*r+e[4]*a+e[7]*i,i=e[2]*r+e[5]*a+e[8]*i;return n.x=s,n.y=t,n.z=i,n},B.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n},B.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.x,n[3]=e[3]*t.y,n[4]=e[4]*t.y,n[5]=e[5]*t.y,n[6]=e[6]*t.z,n[7]=e[7]*t.z,n[8]=e[8]*t.z,n},B.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t},B.transpose=function(e,t){var n=e[0],r=e[3],a=e[6],i=e[1],s=e[4],o=e[7],u=e[2],l=e[5],e=e[8];return t[0]=n,t[1]=r,t[2]=a,t[3]=i,t[4]=s,t[5]=o,t[6]=u,t[7]=l,t[8]=e,t};var s=new A.Cartesian3(1,1,1);B.getRotation=function(e,t){var n=A.Cartesian3.divideComponents(s,B.getScale(e,r),r);return t=B.multiplyByScale(e,n,t)};var d=[1,0,0],f=[2,2,1];var u=new B,l=new B;B.computeEigenDecomposition=function(e,t){for(var n=F.CesiumMath.EPSILON20,r=0,a=0,i=(t=!R.defined(t)?{}:t).unitary=B.clone(B.IDENTITY,t.unitary),s=t.diagonal=B.clone(e,t.diagonal),o=n*function(e){for(var t=0,n=0;n<9;++n){var r=e[n];t+=r*r}return Math.sqrt(t)}(s);a<10&&function(e){for(var t=0,n=0;n<3;++n){var r=e[B.getElementIndex(f[n],d[n])];t+=2*r*r}return Math.sqrt(t)}(s)>o;)!function(e,t){for(var n=F.CesiumMath.EPSILON15,r=0,a=1,i=0;i<3;++i){var s=Math.abs(e[B.getElementIndex(f[i],d[i])]);r<s&&(a=i,r=s)}var o=1,u=0,l=d[a],c=f[a];Math.abs(e[B.getElementIndex(c,l)])>n&&(u=(n=(n=(e[B.getElementIndex(c,c)]-e[B.getElementIndex(l,l)])/2/e[B.getElementIndex(c,l)])<0?-1/(-n+Math.sqrt(1+n*n)):1/(n+Math.sqrt(1+n*n)))*(o=1/Math.sqrt(1+n*n))),(t=B.clone(B.IDENTITY,t))[B.getElementIndex(l,l)]=t[B.getElementIndex(c,c)]=o,t[B.getElementIndex(c,l)]=u,t[B.getElementIndex(l,c)]=-u}(s,u),B.transpose(u,l),B.multiply(s,u,s),B.multiply(l,s,s),B.multiply(i,u,i),2<++r&&(++a,r=0);return t},B.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t},B.determinant=function(e){var t=e[0],n=e[3],r=e[6],a=e[1],i=e[4],s=e[7],o=e[2],u=e[5],e=e[8];return t*(i*e-u*s)+a*(u*r-n*e)+o*(n*s-i*r)},B.inverse=function(e,t){var n=e[0],r=e[1],a=e[2],i=e[3],s=e[4],o=e[5],u=e[6],l=e[7],c=e[8],e=B.determinant(e);return t[0]=s*c-l*o,t[1]=l*a-r*c,t[2]=r*o-s*a,t[3]=u*o-i*c,t[4]=n*c-u*a,t[5]=i*a-n*o,t[6]=i*l-u*s,t[7]=u*r-n*l,t[8]=n*s-i*r,B.multiplyByScalar(t,1/e,t)};var c=new B;function W(e,t,n,r){this.x=R.defaultValue(e,0),this.y=R.defaultValue(t,0),this.z=R.defaultValue(n,0),this.w=R.defaultValue(r,0)}B.inverseTranspose=function(e,t){return B.inverse(B.transpose(e,c),t)},B.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]},B.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n},B.IDENTITY=Object.freeze(new B(1,0,0,0,1,0,0,0,1)),B.ZERO=Object.freeze(new B(0,0,0,0,0,0,0,0,0)),B.COLUMN0ROW0=0,B.COLUMN0ROW1=1,B.COLUMN0ROW2=2,B.COLUMN1ROW0=3,B.COLUMN1ROW1=4,B.COLUMN1ROW2=5,B.COLUMN2ROW0=6,B.COLUMN2ROW1=7,B.COLUMN2ROW2=8,Object.defineProperties(B.prototype,{length:{get:function(){return B.packedLength}}}),B.prototype.clone=function(e){return B.clone(this,e)},B.prototype.equals=function(e){return B.equals(this,e)},B.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]},B.prototype.equalsEpsilon=function(e,t){return B.equalsEpsilon(this,e,t)},B.prototype.toString=function(){return"("+this[0]+", "+this[3]+", "+this[6]+")\n("+this[1]+", "+this[4]+", "+this[7]+")\n("+this[2]+", "+this[5]+", "+this[8]+")"},W.fromElements=function(e,t,n,r,a){return R.defined(a)?(a.x=e,a.y=t,a.z=n,a.w=r,a):new W(e,t,n,r)},W.fromColor=function(e,t){return R.defined(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new W(e.red,e.green,e.blue,e.alpha)},W.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new W(e.x,e.y,e.z,e.w)},W.packedLength=4,W.pack=function(e,t,n){return n=R.defaultValue(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t},W.unpack=function(e,t,n){return t=R.defaultValue(t,0),(n=!R.defined(n)?new W:n).x=e[t++],n.y=e[t++],n.z=e[t++],n.w=e[t],n},W.packArray=function(e,t){var n=e.length,r=4*n;if(R.defined(t)){if(!Array.isArray(t)&&t.length!==r)throw new o.DeveloperError("If result is a typed array, it must have exactly array.length * 4 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var a=0;a<n;++a)W.pack(e[a],t,4*a);return t},W.unpackArray=function(e,t){var n=e.length;R.defined(t)?t.length=n/4:t=new Array(n/4);for(var r=0;r<n;r+=4){var a=r/4;t[a]=W.unpack(e,r,t[a])}return t},W.fromArray=W.unpack,W.maximumComponent=function(e){return Math.max(e.x,e.y,e.z,e.w)},W.minimumComponent=function(e){return Math.min(e.x,e.y,e.z,e.w)},W.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n.w=Math.min(e.w,t.w),n},W.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n.w=Math.max(e.w,t.w),n},W.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w},W.magnitude=function(e){return Math.sqrt(W.magnitudeSquared(e))};var h=new W;W.distance=function(e,t){return W.subtract(e,t,h),W.magnitude(h)},W.distanceSquared=function(e,t){return W.subtract(e,t,h),W.magnitudeSquared(h)},W.normalize=function(e,t){var n=W.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t.w=e.w/n,t},W.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},W.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n.w=e.w*t.w,n},W.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n.w=e.w/t.w,n},W.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n},W.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n},W.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n},W.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n},W.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t},W.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t.w=Math.abs(e.w),t};var p=new W;W.lerp=function(e,t,n,r){return W.multiplyByScalar(t,n,p),r=W.multiplyByScalar(e,1-n,r),W.add(p,r,r)};var m=new W;W.mostOrthogonalAxis=function(e,t){e=W.normalize(e,m);return W.abs(e,e),t=e.x<=e.y?e.x<=e.z?e.x<=e.w?W.clone(W.UNIT_X,t):W.clone(W.UNIT_W,t):e.z<=e.w?W.clone(W.UNIT_Z,t):W.clone(W.UNIT_W,t):e.y<=e.z?e.y<=e.w?W.clone(W.UNIT_Y,t):W.clone(W.UNIT_W,t):e.z<=e.w?W.clone(W.UNIT_Z,t):W.clone(W.UNIT_W,t)},W.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w},W.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]&&e.w===t[n+3]},W.equalsEpsilon=function(e,t,n,r){return e===t||R.defined(e)&&R.defined(t)&&F.CesiumMath.equalsEpsilon(e.x,t.x,n,r)&&F.CesiumMath.equalsEpsilon(e.y,t.y,n,r)&&F.CesiumMath.equalsEpsilon(e.z,t.z,n,r)&&F.CesiumMath.equalsEpsilon(e.w,t.w,n,r)},W.ZERO=Object.freeze(new W(0,0,0,0)),W.UNIT_X=Object.freeze(new W(1,0,0,0)),W.UNIT_Y=Object.freeze(new W(0,1,0,0)),W.UNIT_Z=Object.freeze(new W(0,0,1,0)),W.UNIT_W=Object.freeze(new W(0,0,0,1)),W.prototype.clone=function(e){return W.clone(this,e)},W.prototype.equals=function(e){return W.equals(this,e)},W.prototype.equalsEpsilon=function(e,t,n){return W.equalsEpsilon(this,e,t,n)},W.prototype.toString=function(){return"("+this.x+", "+this.y+", "+this.z+", "+this.w+")"};var y=new Float32Array(1),w=new Uint8Array(y.buffer),C=new Uint32Array([287454020]),v=68===new Uint8Array(C.buffer)[0];function j(e,t,n,r,a,i,s,o,u,l,c,d,f,h,p,m){this[0]=R.defaultValue(e,0),this[1]=R.defaultValue(a,0),this[2]=R.defaultValue(u,0),this[3]=R.defaultValue(f,0),this[4]=R.defaultValue(t,0),this[5]=R.defaultValue(i,0),this[6]=R.defaultValue(l,0),this[7]=R.defaultValue(h,0),this[8]=R.defaultValue(n,0),this[9]=R.defaultValue(s,0),this[10]=R.defaultValue(c,0),this[11]=R.defaultValue(p,0),this[12]=R.defaultValue(r,0),this[13]=R.defaultValue(o,0),this[14]=R.defaultValue(d,0),this[15]=R.defaultValue(m,0)}W.packFloat=function(e,t){return R.defined(t)||(t=new W),y[0]=e,v?(t.x=w[0],t.y=w[1],t.z=w[2],t.w=w[3]):(t.x=w[3],t.y=w[2],t.z=w[1],t.w=w[0]),t},W.unpackFloat=function(e){return v?(w[0]=e.x,w[1]=e.y,w[2]=e.z,w[3]=e.w):(w[0]=e.w,w[1]=e.z,w[2]=e.y,w[3]=e.x),y[0]},j.packedLength=16,j.pack=function(e,t,n){return n=R.defaultValue(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t},j.unpack=function(e,t,n){return t=R.defaultValue(t,0),(n=!R.defined(n)?new j:n)[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n},j.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):new j(e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15])},j.fromArray=j.unpack,j.fromColumnMajorArray=function(e,t){return j.clone(e,t)},j.fromRowMajorArray=function(e,t){return R.defined(t)?(t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t):new j(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])},j.fromRotationTranslation=function(e,t,n){return t=R.defaultValue(t,A.Cartesian3.ZERO),R.defined(n)?(n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=0,n[4]=e[3],n[5]=e[4],n[6]=e[5],n[7]=0,n[8]=e[6],n[9]=e[7],n[10]=e[8],n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,n):new j(e[0],e[3],e[6],t.x,e[1],e[4],e[7],t.y,e[2],e[5],e[8],t.z,0,0,0,1)},j.fromTranslationQuaternionRotationScale=function(e,t,n,r){R.defined(r)||(r=new j);var a=n.x,i=n.y,s=n.z,o=t.x*t.x,u=t.x*t.y,l=t.x*t.z,c=t.x*t.w,d=t.y*t.y,f=t.y*t.z,h=t.y*t.w,p=t.z*t.z,m=t.z*t.w,y=t.w*t.w,w=o-d-p+y,C=2*(u-m),n=2*(l+h),t=2*(u+m),u=d-o-p+y,m=2*(f-c),h=2*(l-h),c=2*(f+c),y=-o-d+p+y;return r[0]=w*a,r[1]=t*a,r[2]=h*a,r[3]=0,r[4]=C*i,r[5]=u*i,r[6]=c*i,r[7]=0,r[8]=n*s,r[9]=m*s,r[10]=y*s,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,r},j.fromTranslationRotationScale=function(e,t){return j.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t)},j.fromTranslation=function(e,t){return j.fromRotationTranslation(B.IDENTITY,e,t)},j.fromScale=function(e,t){return R.defined(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e.y,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e.z,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new j(e.x,0,0,0,0,e.y,0,0,0,0,e.z,0,0,0,0,1)},j.fromUniformScale=function(e,t){return R.defined(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new j(e,0,0,0,0,e,0,0,0,0,e,0,0,0,0,1)};var g=new A.Cartesian3,x=new A.Cartesian3,E=new A.Cartesian3;j.fromCamera=function(e,t){var n=e.position,r=e.direction,a=e.up;A.Cartesian3.normalize(r,g),A.Cartesian3.normalize(A.Cartesian3.cross(g,a,x),x),A.Cartesian3.normalize(A.Cartesian3.cross(x,g,E),E);var i=x.x,s=x.y,o=x.z,u=g.x,l=g.y,c=g.z,d=E.x,f=E.y,h=E.z,p=n.x,e=n.y,r=n.z,a=i*-p+s*-e+o*-r,n=d*-p+f*-e+h*-r,r=u*p+l*e+c*r;return R.defined(t)?(t[0]=i,t[1]=d,t[2]=-u,t[3]=0,t[4]=s,t[5]=f,t[6]=-l,t[7]=0,t[8]=o,t[9]=h,t[10]=-c,t[11]=0,t[12]=a,t[13]=n,t[14]=r,t[15]=1,t):new j(i,s,o,a,d,f,h,n,-u,-l,-c,r,0,0,0,1)},j.computePerspectiveFieldOfView=function(e,t,n,r,a){var i=1/Math.tan(.5*e),e=i/t,t=(r+n)/(n-r),r=2*r*n/(n-r);return a[0]=e,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=i,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=t,a[11]=-1,a[12]=0,a[13]=0,a[14]=r,a[15]=0,a},j.computeOrthographicOffCenter=function(e,t,n,r,a,i,s){var o=1/(t-e),u=1/(r-n),l=1/(i-a),e=-(t+e)*o,n=-(r+n)*u,a=-(i+a)*l;return o*=2,u*=2,l*=-2,s[0]=o,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=u,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=l,s[11]=0,s[12]=e,s[13]=n,s[14]=a,s[15]=1,s},j.computePerspectiveOffCenter=function(e,t,n,r,a,i,s){var o=2*a/(t-e),u=2*a/(r-n),e=(t+e)/(t-e),r=(r+n)/(r-n),n=-(i+a)/(i-a),a=-2*i*a/(i-a);return s[0]=o,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=u,s[6]=0,s[7]=0,s[8]=e,s[9]=r,s[10]=n,s[11]=-1,s[12]=0,s[13]=0,s[14]=a,s[15]=0,s},j.computeInfinitePerspectiveOffCenter=function(e,t,n,r,a,i){var s=2*a/(t-e),o=2*a/(r-n),e=(t+e)/(t-e),n=(r+n)/(r-n),a=-2*a;return i[0]=s,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=o,i[6]=0,i[7]=0,i[8]=e,i[9]=n,i[10]=-1,i[11]=-1,i[12]=0,i[13]=0,i[14]=a,i[15]=0,i},j.computeViewportTransformation=function(e,t,n,r){R.defined(r)||(r=new j),e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT);var a=R.defaultValue(e.x,0),i=R.defaultValue(e.y,0),s=R.defaultValue(e.width,0),o=R.defaultValue(e.height,0);t=R.defaultValue(t,0);var u=.5*s,e=.5*o,s=.5*((n=R.defaultValue(n,1))-t),o=e,n=s,a=a+u,e=i+e,s=t+s;return r[0]=u,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=o,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=n,r[11]=0,r[12]=a,r[13]=e,r[14]=s,r[15]=1,r},j.computeView=function(e,t,n,r,a){return a[0]=r.x,a[1]=n.x,a[2]=-t.x,a[3]=0,a[4]=r.y,a[5]=n.y,a[6]=-t.y,a[7]=0,a[8]=r.z,a[9]=n.z,a[10]=-t.z,a[11]=0,a[12]=-A.Cartesian3.dot(r,e),a[13]=-A.Cartesian3.dot(n,e),a[14]=A.Cartesian3.dot(t,e),a[15]=1,a},j.toArray=function(e,t){return R.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]},j.getElementIndex=function(e,t){return 4*e+t},j.getColumn=function(e,t,n){var r=4*t,a=e[r],i=e[1+r],t=e[2+r],r=e[3+r];return n.x=a,n.y=i,n.z=t,n.w=r,n},j.setColumn=function(e,t,n,r){t*=4;return(r=j.clone(e,r))[t]=n.x,r[1+t]=n.y,r[2+t]=n.z,r[3+t]=n.w,r},j.setTranslation=function(e,t,n){return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=e[15],n};var O=new A.Cartesian3;j.setScale=function(e,t,n){var r=j.getScale(e,O),r=A.Cartesian3.divideComponents(t,r,O);return j.multiplyByScale(e,r,n)},j.getRow=function(e,t,n){var r=e[t],a=e[t+4],i=e[t+8],t=e[t+12];return n.x=r,n.y=a,n.z=i,n.w=t,n},j.setRow=function(e,t,n,r){return(r=j.clone(e,r))[t]=n.x,r[t+4]=n.y,r[t+8]=n.z,r[t+12]=n.w,r};var _=new A.Cartesian3;j.getScale=function(e,t){return t.x=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[0],e[1],e[2],_)),t.y=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[4],e[5],e[6],_)),t.z=A.Cartesian3.magnitude(A.Cartesian3.fromElements(e[8],e[9],e[10],_)),t};var S=new A.Cartesian3;j.getMaximumScale=function(e){return j.getScale(e,S),A.Cartesian3.maximumComponent(S)},j.multiply=function(e,t,n){var r=e[0],a=e[1],i=e[2],s=e[3],o=e[4],u=e[5],l=e[6],c=e[7],d=e[8],f=e[9],h=e[10],p=e[11],m=e[12],y=e[13],w=e[14],C=e[15],v=t[0],g=t[1],x=t[2],E=t[3],O=t[4],_=t[5],S=t[6],b=t[7],M=t[8],A=t[9],R=t[10],T=t[11],q=t[12],z=t[13],I=t[14],P=t[15],D=r*v+o*g+d*x+m*E,e=a*v+u*g+f*x+y*E,t=i*v+l*g+h*x+w*E,v=s*v+c*g+p*x+C*E,g=r*O+o*_+d*S+m*b,x=a*O+u*_+f*S+y*b,E=i*O+l*_+h*S+w*b,O=s*O+c*_+p*S+C*b,_=r*M+o*A+d*R+m*T,S=a*M+u*A+f*R+y*T,b=i*M+l*A+h*R+w*T,T=s*M+c*A+p*R+C*T,m=r*q+o*z+d*I+m*P,y=a*q+u*z+f*I+y*P,w=i*q+l*z+h*I+w*P,P=s*q+c*z+p*I+C*P;return n[0]=D,n[1]=e,n[2]=t,n[3]=v,n[4]=g,n[5]=x,n[6]=E,n[7]=O,n[8]=_,n[9]=S,n[10]=b,n[11]=T,n[12]=m,n[13]=y,n[14]=w,n[15]=P,n},j.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n[9]=e[9]+t[9],n[10]=e[10]+t[10],n[11]=e[11]+t[11],n[12]=e[12]+t[12],n[13]=e[13]+t[13],n[14]=e[14]+t[14],n[15]=e[15]+t[15],n},j.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n[9]=e[9]-t[9],n[10]=e[10]-t[10],n[11]=e[11]-t[11],n[12]=e[12]-t[12],n[13]=e[13]-t[13],n[14]=e[14]-t[14],n[15]=e[15]-t[15],n},j.multiplyTransformation=function(e,t,n){var r=e[0],a=e[1],i=e[2],s=e[4],o=e[5],u=e[6],l=e[8],c=e[9],d=e[10],f=e[12],h=e[13],p=e[14],m=t[0],y=t[1],w=t[2],C=t[4],v=t[5],g=t[6],x=t[8],E=t[9],O=t[10],_=t[12],S=t[13],b=t[14],e=r*m+s*y+l*w,t=a*m+o*y+c*w,m=i*m+u*y+d*w,y=r*C+s*v+l*g,w=a*C+o*v+c*g,C=i*C+u*v+d*g,v=r*x+s*E+l*O,g=a*x+o*E+c*O,O=i*x+u*E+d*O,f=r*_+s*S+l*b+f,h=a*_+o*S+c*b+h,p=i*_+u*S+d*b+p;return n[0]=e,n[1]=t,n[2]=m,n[3]=0,n[4]=y,n[5]=w,n[6]=C,n[7]=0,n[8]=v,n[9]=g,n[10]=O,n[11]=0,n[12]=f,n[13]=h,n[14]=p,n[15]=1,n},j.multiplyByMatrix3=function(e,t,n){var r=e[0],a=e[1],i=e[2],s=e[4],o=e[5],u=e[6],l=e[8],c=e[9],d=e[10],f=t[0],h=t[1],p=t[2],m=t[3],y=t[4],w=t[5],C=t[6],v=t[7],g=t[8],x=r*f+s*h+l*p,t=a*f+o*h+c*p,f=i*f+u*h+d*p,h=r*m+s*y+l*w,p=a*m+o*y+c*w,w=i*m+u*y+d*w,l=r*C+s*v+l*g,c=a*C+o*v+c*g,g=i*C+u*v+d*g;return n[0]=x,n[1]=t,n[2]=f,n[3]=0,n[4]=h,n[5]=p,n[6]=w,n[7]=0,n[8]=l,n[9]=c,n[10]=g,n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n},j.multiplyByTranslation=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=r*e[0]+a*e[4]+i*e[8]+e[12],t=r*e[1]+a*e[5]+i*e[9]+e[13],i=r*e[2]+a*e[6]+i*e[10]+e[14];return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=s,n[13]=t,n[14]=i,n[15]=e[15],n};var b=new A.Cartesian3;j.multiplyByUniformScale=function(e,t,n){return b.x=t,b.y=t,b.z=t,j.multiplyByScale(e,b,n)},j.multiplyByScale=function(e,t,n){var r=t.x,a=t.y,t=t.z;return 1===r&&1===a&&1===t?j.clone(e,n):(n[0]=r*e[0],n[1]=r*e[1],n[2]=r*e[2],n[3]=0,n[4]=a*e[4],n[5]=a*e[5],n[6]=a*e[6],n[7]=0,n[8]=t*e[8],n[9]=t*e[9],n[10]=t*e[10],n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=1,n)},j.multiplyByVector=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=t.w,o=e[0]*r+e[4]*a+e[8]*i+e[12]*s,u=e[1]*r+e[5]*a+e[9]*i+e[13]*s,t=e[2]*r+e[6]*a+e[10]*i+e[14]*s,s=e[3]*r+e[7]*a+e[11]*i+e[15]*s;return n.x=o,n.y=u,n.z=t,n.w=s,n},j.multiplyByPointAsVector=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=e[0]*r+e[4]*a+e[8]*i,t=e[1]*r+e[5]*a+e[9]*i,i=e[2]*r+e[6]*a+e[10]*i;return n.x=s,n.y=t,n.z=i,n},j.multiplyByPoint=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=e[0]*r+e[4]*a+e[8]*i+e[12],t=e[1]*r+e[5]*a+e[9]*i+e[13],e=e[2]*r+e[6]*a+e[10]*i+e[14];return n.x=s,n.y=t,n.z=e,n},j.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11]*t,n[12]=e[12]*t,n[13]=e[13]*t,n[14]=e[14]*t,n[15]=e[15]*t,n},j.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t},j.transpose=function(e,t){var n=e[1],r=e[2],a=e[3],i=e[6],s=e[7],o=e[11];return t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=i,t[10]=e[10],t[11]=e[14],t[12]=a,t[13]=s,t[14]=o,t[15]=e[15],t},j.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t[9]=Math.abs(e[9]),t[10]=Math.abs(e[10]),t[11]=Math.abs(e[11]),t[12]=Math.abs(e[12]),t[13]=Math.abs(e[13]),t[14]=Math.abs(e[14]),t[15]=Math.abs(e[15]),t},j.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[3]===t[3]&&e[7]===t[7]&&e[11]===t[11]&&e[15]===t[15]},j.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n&&Math.abs(e[9]-t[9])<=n&&Math.abs(e[10]-t[10])<=n&&Math.abs(e[11]-t[11])<=n&&Math.abs(e[12]-t[12])<=n&&Math.abs(e[13]-t[13])<=n&&Math.abs(e[14]-t[14])<=n&&Math.abs(e[15]-t[15])<=n},j.getTranslation=function(e,t){return t.x=e[12],t.y=e[13],t.z=e[14],t},j.getMatrix3=function(e,t){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t};var k=new B,Y=new B,Z=new W,X=new W(0,0,0,1);j.inverse=function(e,t){var n=e[0],r=e[4],a=e[8],i=e[12],s=e[1],o=e[5],u=e[9],l=e[13],c=e[2],d=e[6],f=e[10],h=e[14],p=e[3],m=e[7],y=e[11],w=e[15],C=f*w,v=h*y,g=d*w,x=h*m,E=d*y,O=f*m,_=c*w,S=h*p,b=c*y,M=f*p,A=c*m,R=d*p,T=C*o+x*u+E*l-(v*o+g*u+O*l),q=v*s+_*u+M*l-(C*s+S*u+b*l),z=g*s+S*o+A*l-(x*s+_*o+R*l),I=O*s+b*o+R*u-(E*s+M*o+A*u),P=v*r+g*a+O*i-(C*r+x*a+E*i),D=C*n+S*a+b*i-(v*n+_*a+M*i),U=x*n+_*r+R*i-(g*n+S*r+A*i),N=E*n+M*r+A*a-(O*n+b*r+R*a),V=(C=a*l)*m+(x=i*o)*y+(E=r*u)*w-((v=i*u)*m+(g=r*l)*y+(O=a*o)*w),u=v*p+(_=n*l)*y+(M=a*s)*w-(C*p+(S=i*s)*y+(b=n*u)*w),w=g*p+S*m+(A=n*o)*w-(x*p+_*m+(R=r*s)*w),m=O*p+b*m+R*y-(E*p+M*m+A*y),y=g*f+O*h+v*d-(E*h+C*d+x*f),v=b*h+C*c+S*f-(_*f+M*h+v*c),S=_*d+R*h+x*c-(A*h+g*c+S*d),c=A*f+E*c+M*d-(b*d+R*f+O*c),i=n*T+r*q+a*z+i*I;if(Math.abs(i)<F.CesiumMath.EPSILON21){if(B.equalsEpsilon(j.getMatrix3(e,k),Y,F.CesiumMath.EPSILON7)&&W.equals(j.getRow(e,3,Z),X))return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=0,t[11]=0,t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=1,t;throw new L.RuntimeError("matrix is not invertible because its determinate is zero.")}return i=1/i,t[0]=T*i,t[1]=q*i,t[2]=z*i,t[3]=I*i,t[4]=P*i,t[5]=D*i,t[6]=U*i,t[7]=N*i,t[8]=V*i,t[9]=u*i,t[10]=w*i,t[11]=m*i,t[12]=y*i,t[13]=v*i,t[14]=S*i,t[15]=c*i,t},j.inverseTransformation=function(e,t){var n=e[0],r=e[1],a=e[2],i=e[4],s=e[5],o=e[6],u=e[8],l=e[9],c=e[10],d=e[12],f=e[13],h=e[14],p=-n*d-r*f-a*h,e=-i*d-s*f-o*h,h=-u*d-l*f-c*h;return t[0]=n,t[1]=i,t[2]=u,t[3]=0,t[4]=r,t[5]=s,t[6]=l,t[7]=0,t[8]=a,t[9]=o,t[10]=c,t[11]=0,t[12]=p,t[13]=e,t[14]=h,t[15]=1,t};var M=new j;function T(e,t){this.center=A.Cartesian3.clone(R.defaultValue(e,A.Cartesian3.ZERO)),this.radius=R.defaultValue(t,0)}j.inverseTranspose=function(e,t){return j.inverse(j.transpose(e,M),t)},j.IDENTITY=Object.freeze(new j(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)),j.ZERO=Object.freeze(new j(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)),j.COLUMN0ROW0=0,j.COLUMN0ROW1=1,j.COLUMN0ROW2=2,j.COLUMN0ROW3=3,j.COLUMN1ROW0=4,j.COLUMN1ROW1=5,j.COLUMN1ROW2=6,j.COLUMN1ROW3=7,j.COLUMN2ROW0=8,j.COLUMN2ROW1=9,j.COLUMN2ROW2=10,j.COLUMN2ROW3=11,j.COLUMN3ROW0=12,j.COLUMN3ROW1=13,j.COLUMN3ROW2=14,j.COLUMN3ROW3=15,Object.defineProperties(j.prototype,{length:{get:function(){return j.packedLength}}}),j.prototype.clone=function(e){return j.clone(this,e)},j.prototype.equals=function(e){return j.equals(this,e)},j.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]&&e[9]===t[n+9]&&e[10]===t[n+10]&&e[11]===t[n+11]&&e[12]===t[n+12]&&e[13]===t[n+13]&&e[14]===t[n+14]&&e[15]===t[n+15]},j.prototype.equalsEpsilon=function(e,t){return j.equalsEpsilon(this,e,t)},j.prototype.toString=function(){return"("+this[0]+", "+this[4]+", "+this[8]+", "+this[12]+")\n("+this[1]+", "+this[5]+", "+this[9]+", "+this[13]+")\n("+this[2]+", "+this[6]+", "+this[10]+", "+this[14]+")\n("+this[3]+", "+this[7]+", "+this[11]+", "+this[15]+")"};var q=new A.Cartesian3,z=new A.Cartesian3,I=new A.Cartesian3,P=new A.Cartesian3,D=new A.Cartesian3,U=new A.Cartesian3,N=new A.Cartesian3,V=new A.Cartesian3,H=new A.Cartesian3,J=new A.Cartesian3,G=new A.Cartesian3,Q=new A.Cartesian3,K=4/3*F.CesiumMath.PI;T.fromPoints=function(e,t){if(R.defined(t)||(t=new T),!R.defined(e)||0===e.length)return t.center=A.Cartesian3.clone(A.Cartesian3.ZERO,t.center),t.radius=0,t;for(var n=A.Cartesian3.clone(e[0],N),r=A.Cartesian3.clone(n,q),a=A.Cartesian3.clone(n,z),i=A.Cartesian3.clone(n,I),s=A.Cartesian3.clone(n,P),o=A.Cartesian3.clone(n,D),u=A.Cartesian3.clone(n,U),l=e.length,c=1;c<l;c++){A.Cartesian3.clone(e[c],n);var d=n.x,f=n.y,h=n.z;d<r.x&&A.Cartesian3.clone(n,r),d>s.x&&A.Cartesian3.clone(n,s),f<a.y&&A.Cartesian3.clone(n,a),f>o.y&&A.Cartesian3.clone(n,o),h<i.z&&A.Cartesian3.clone(n,i),h>u.z&&A.Cartesian3.clone(n,u)}var p=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(s,r,V)),m=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(o,a,V)),y=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(u,i,V)),w=r,C=s,p=p;p<m&&(p=m,w=a,C=o),p<y&&(p=y,w=i,C=u);var v=H;v.x=.5*(w.x+C.x),v.y=.5*(w.y+C.y),v.z=.5*(w.z+C.z);var g=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(C,v,V)),x=Math.sqrt(g),w=J;w.x=r.x,w.y=a.y,w.z=i.z;C=G;C.x=s.x,C.y=o.y,C.z=u.z;var E=A.Cartesian3.midpoint(w,C,Q),O=0;for(c=0;c<l;c++){A.Cartesian3.clone(e[c],n);var _=A.Cartesian3.magnitude(A.Cartesian3.subtract(n,E,V));O<_&&(O=_);var S=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(n,v,V));g<S&&(g=(x=.5*(x+(_=Math.sqrt(S))))*x,S=_-x,v.x=(x*v.x+S*n.x)/_,v.y=(x*v.y+S*n.y)/_,v.z=(x*v.z+S*n.z)/_)}return x<O?(A.Cartesian3.clone(v,t.center),t.radius=x):(A.Cartesian3.clone(E,t.center),t.radius=O),t};var $=new t,ee=new A.Cartesian3,te=new A.Cartesian3,ne=new A.Cartographic,re=new A.Cartographic;T.fromRectangle2D=function(e,t,n){return T.fromRectangleWithHeights2D(e,t,0,0,n)},T.fromRectangleWithHeights2D=function(e,t,n,r,a){if(R.defined(a)||(a=new T),!R.defined(e))return a.center=A.Cartesian3.clone(A.Cartesian3.ZERO,a.center),a.radius=0,a;t=R.defaultValue(t,$),A.Rectangle.southwest(e,ne),ne.height=n,A.Rectangle.northeast(e,re),re.height=r;var i=t.project(ne,ee),n=t.project(re,te),e=n.x-i.x,r=n.y-i.y,t=n.z-i.z;a.radius=.5*Math.sqrt(e*e+r*r+t*t);n=a.center;return n.x=i.x+.5*e,n.y=i.y+.5*r,n.z=i.z+.5*t,a};var ae=[];T.fromRectangle3D=function(e,t,n,r){if(t=R.defaultValue(t,A.Ellipsoid.WGS84),n=R.defaultValue(n,0),R.defined(r)||(r=new T),!R.defined(e))return r.center=A.Cartesian3.clone(A.Cartesian3.ZERO,r.center),r.radius=0,r;n=A.Rectangle.subsample(e,t,n,ae);return T.fromPoints(n,r)},T.fromVertices=function(e,t,n,r){if(R.defined(r)||(r=new T),!R.defined(e)||0===e.length)return r.center=A.Cartesian3.clone(A.Cartesian3.ZERO,r.center),r.radius=0,r;t=R.defaultValue(t,A.Cartesian3.ZERO),n=R.defaultValue(n,3);var a=N;a.x=e[0]+t.x,a.y=e[1]+t.y,a.z=e[2]+t.z;for(var i=A.Cartesian3.clone(a,q),s=A.Cartesian3.clone(a,z),o=A.Cartesian3.clone(a,I),u=A.Cartesian3.clone(a,P),l=A.Cartesian3.clone(a,D),c=A.Cartesian3.clone(a,U),d=e.length,f=0;f<d;f+=n){var h=e[f]+t.x,p=e[f+1]+t.y,m=e[f+2]+t.z;a.x=h,a.y=p,a.z=m,h<i.x&&A.Cartesian3.clone(a,i),h>u.x&&A.Cartesian3.clone(a,u),p<s.y&&A.Cartesian3.clone(a,s),p>l.y&&A.Cartesian3.clone(a,l),m<o.z&&A.Cartesian3.clone(a,o),m>c.z&&A.Cartesian3.clone(a,c)}var y=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(u,i,V)),w=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(l,s,V)),C=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(c,o,V)),v=i,g=u,y=y;y<w&&(y=w,v=s,g=l),y<C&&(y=C,v=o,g=c);var x=H;x.x=.5*(v.x+g.x),x.y=.5*(v.y+g.y),x.z=.5*(v.z+g.z);var E=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(g,x,V)),O=Math.sqrt(E),v=J;v.x=i.x,v.y=s.y,v.z=o.z;g=G;g.x=u.x,g.y=l.y,g.z=c.z;var _=A.Cartesian3.midpoint(v,g,Q),S=0;for(f=0;f<d;f+=n){a.x=e[f]+t.x,a.y=e[f+1]+t.y,a.z=e[f+2]+t.z;var b=A.Cartesian3.magnitude(A.Cartesian3.subtract(a,_,V));S<b&&(S=b);var M=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(a,x,V));E<M&&(E=(O=.5*(O+(b=Math.sqrt(M))))*O,M=b-O,x.x=(O*x.x+M*a.x)/b,x.y=(O*x.y+M*a.y)/b,x.z=(O*x.z+M*a.z)/b)}return O<S?(A.Cartesian3.clone(x,r.center),r.radius=O):(A.Cartesian3.clone(_,r.center),r.radius=S),r},T.fromEncodedCartesianVertices=function(e,t,n){if(R.defined(n)||(n=new T),!R.defined(e)||!R.defined(t)||e.length!==t.length||0===e.length)return n.center=A.Cartesian3.clone(A.Cartesian3.ZERO,n.center),n.radius=0,n;var r=N;r.x=e[0]+t[0],r.y=e[1]+t[1],r.z=e[2]+t[2];for(var a=A.Cartesian3.clone(r,q),i=A.Cartesian3.clone(r,z),s=A.Cartesian3.clone(r,I),o=A.Cartesian3.clone(r,P),u=A.Cartesian3.clone(r,D),l=A.Cartesian3.clone(r,U),c=e.length,d=0;d<c;d+=3){var f=e[d]+t[d],h=e[d+1]+t[d+1],p=e[d+2]+t[d+2];r.x=f,r.y=h,r.z=p,f<a.x&&A.Cartesian3.clone(r,a),f>o.x&&A.Cartesian3.clone(r,o),h<i.y&&A.Cartesian3.clone(r,i),h>u.y&&A.Cartesian3.clone(r,u),p<s.z&&A.Cartesian3.clone(r,s),p>l.z&&A.Cartesian3.clone(r,l)}var m=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(o,a,V)),y=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(u,i,V)),w=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(l,s,V)),C=a,v=o,m=m;m<y&&(m=y,C=i,v=u),m<w&&(m=w,C=s,v=l);var g=H;g.x=.5*(C.x+v.x),g.y=.5*(C.y+v.y),g.z=.5*(C.z+v.z);var x=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(v,g,V)),E=Math.sqrt(x),C=J;C.x=a.x,C.y=i.y,C.z=s.z;v=G;v.x=o.x,v.y=u.y,v.z=l.z;var O=A.Cartesian3.midpoint(C,v,Q),_=0;for(d=0;d<c;d+=3){r.x=e[d]+t[d],r.y=e[d+1]+t[d+1],r.z=e[d+2]+t[d+2];var S=A.Cartesian3.magnitude(A.Cartesian3.subtract(r,O,V));_<S&&(_=S);var b=A.Cartesian3.magnitudeSquared(A.Cartesian3.subtract(r,g,V));x<b&&(x=(E=.5*(E+(S=Math.sqrt(b))))*E,b=S-E,g.x=(E*g.x+b*r.x)/S,g.y=(E*g.y+b*r.y)/S,g.z=(E*g.z+b*r.z)/S)}return E<_?(A.Cartesian3.clone(g,n.center),n.radius=E):(A.Cartesian3.clone(O,n.center),n.radius=_),n},T.fromCornerPoints=function(e,t,n){R.defined(n)||(n=new T);e=A.Cartesian3.midpoint(e,t,n.center);return n.radius=A.Cartesian3.distance(e,t),n},T.fromEllipsoid=function(e,t){return R.defined(t)||(t=new T),A.Cartesian3.clone(A.Cartesian3.ZERO,t.center),t.radius=e.maximumRadius,t};var ie=new A.Cartesian3;T.fromBoundingSpheres=function(e,t){if(R.defined(t)||(t=new T),!R.defined(e)||0===e.length)return t.center=A.Cartesian3.clone(A.Cartesian3.ZERO,t.center),t.radius=0,t;var n=e.length;if(1===n)return T.clone(e[0],t);if(2===n)return T.union(e[0],e[1],t);for(var r=[],a=0;a<n;a++)r.push(e[a].center);var i=(t=T.fromPoints(r,t)).center,s=t.radius;for(a=0;a<n;a++)var o=e[a],s=Math.max(s,A.Cartesian3.distance(i,o.center,ie)+o.radius);return t.radius=s,t};var se=new A.Cartesian3,oe=new A.Cartesian3,ue=new A.Cartesian3;T.fromOrientedBoundingBox=function(e,t){R.defined(t)||(t=new T);var n=e.halfAxes,r=B.getColumn(n,0,se),a=B.getColumn(n,1,oe),n=B.getColumn(n,2,ue);return A.Cartesian3.add(r,a,r),A.Cartesian3.add(r,n,r),t.center=A.Cartesian3.clone(e.center,t.center),t.radius=A.Cartesian3.magnitude(r),t},T.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.center=A.Cartesian3.clone(e.center,t.center),t.radius=e.radius,t):new T(e.center,e.radius)},T.packedLength=4,T.pack=function(e,t,n){n=R.defaultValue(n,0);var r=e.center;return t[n++]=r.x,t[n++]=r.y,t[n++]=r.z,t[n]=e.radius,t},T.unpack=function(e,t,n){t=R.defaultValue(t,0);var r=(n=!R.defined(n)?new T:n).center;return r.x=e[t++],r.y=e[t++],r.z=e[t++],n.radius=e[t],n};var le=new A.Cartesian3,ce=new A.Cartesian3;T.union=function(e,t,n){R.defined(n)||(n=new T);var r=e.center,a=e.radius,i=t.center,s=t.radius,o=A.Cartesian3.subtract(i,r,le),i=A.Cartesian3.magnitude(o);if(i+s<=a)return e.clone(n),n;if(i+a<=s)return t.clone(n),n;s=.5*(a+i+s),i=A.Cartesian3.multiplyByScalar(o,(s-a)/i,ce);return A.Cartesian3.add(i,r,i),A.Cartesian3.clone(i,n.center),n.radius=s,n};var de=new A.Cartesian3;T.expand=function(e,t,n){n=T.clone(e,n);t=A.Cartesian3.magnitude(A.Cartesian3.subtract(t,n.center,de));return t>n.radius&&(n.radius=t),n},T.intersectPlane=function(e,t){var n=e.center,r=e.radius,e=t.normal,t=A.Cartesian3.dot(e,n)+t.distance;return t<-r?a.OUTSIDE:t<r?a.INTERSECTING:a.INSIDE},T.transform=function(e,t,n){return(n=!R.defined(n)?new T:n).center=j.multiplyByPoint(t,e.center,n.center),n.radius=j.getMaximumScale(t)*e.radius,n};var fe=new A.Cartesian3;T.distanceSquaredTo=function(e,t){t=A.Cartesian3.subtract(e.center,t,fe);return A.Cartesian3.magnitudeSquared(t)-e.radius*e.radius},T.transformWithoutScale=function(e,t,n){return(n=!R.defined(n)?new T:n).center=j.multiplyByPoint(t,e.center,n.center),n.radius=e.radius,n};var he=new A.Cartesian3;T.computePlaneDistances=function(e,t,n,r){R.defined(r)||(r=new i);t=A.Cartesian3.subtract(e.center,t,he),t=A.Cartesian3.dot(n,t);return r.start=t-e.radius,r.stop=t+e.radius,r};for(var pe=new A.Cartesian3,me=new A.Cartesian3,ye=new A.Cartesian3,we=new A.Cartesian3,Ce=new A.Cartesian3,ve=new A.Cartographic,ge=new Array(8),xe=0;xe<8;++xe)ge[xe]=new A.Cartesian3;var Ee,Oe=new t;T.projectTo2D=function(e,t,n){var r=(t=R.defaultValue(t,Oe)).ellipsoid,a=e.center,i=e.radius,s=A.Cartesian3.equals(a,A.Cartesian3.ZERO)?A.Cartesian3.clone(A.Cartesian3.UNIT_X,pe):r.geodeticSurfaceNormal(a,pe),o=A.Cartesian3.cross(A.Cartesian3.UNIT_Z,s,me);A.Cartesian3.normalize(o,o);var u=A.Cartesian3.cross(s,o,ye);A.Cartesian3.normalize(u,u),A.Cartesian3.multiplyByScalar(s,i,s),A.Cartesian3.multiplyByScalar(u,i,u),A.Cartesian3.multiplyByScalar(o,i,o);var l=A.Cartesian3.negate(u,Ce),e=A.Cartesian3.negate(o,we),c=ge,i=c[0];A.Cartesian3.add(s,u,i),A.Cartesian3.add(i,o,i),i=c[1],A.Cartesian3.add(s,u,i),A.Cartesian3.add(i,e,i),i=c[2],A.Cartesian3.add(s,l,i),A.Cartesian3.add(i,e,i),i=c[3],A.Cartesian3.add(s,l,i),A.Cartesian3.add(i,o,i),A.Cartesian3.negate(s,s),i=c[4],A.Cartesian3.add(s,u,i),A.Cartesian3.add(i,o,i),i=c[5],A.Cartesian3.add(s,u,i),A.Cartesian3.add(i,e,i),i=c[6],A.Cartesian3.add(s,l,i),A.Cartesian3.add(i,e,i),i=c[7],A.Cartesian3.add(s,l,i),A.Cartesian3.add(i,o,i);for(var d=c.length,f=0;f<d;++f){var h=c[f];A.Cartesian3.add(a,h,h);var p=r.cartesianToCartographic(h,ve);t.project(p,h)}l=(a=(n=T.fromPoints(c,n)).center).x,o=a.y,i=a.z;return a.x=i,a.y=l,a.z=o,n},T.isOccluded=function(e,t){return!t.isBoundingSphereVisible(e)},T.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&A.Cartesian3.equals(e.center,t.center)&&e.radius===t.radius},T.prototype.intersectPlane=function(e){return T.intersectPlane(this,e)},T.prototype.distanceSquaredTo=function(e){return T.distanceSquaredTo(this,e)},T.prototype.computePlaneDistances=function(e,t,n){return T.computePlaneDistances(this,e,t,n)},T.prototype.isOccluded=function(e){return T.isOccluded(this,e)},T.prototype.equals=function(e){return T.equals(this,e)},T.prototype.clone=function(e){return T.clone(this,e)},T.prototype.volume=function(){var e=this.radius;return K*e*e*e};var _e,Se,be,Me,Ae,Re,Te,qe,ze,Ie,Pe,De,Ue,Ne,Ve,Fe,Le,Be={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},We={};function je(e){for(var t=e.split("."),n=0,r=t.length;n<r;++n)t[n]=parseInt(t[n],10);return t}function ke(){var e;return R.defined(Se)||(Se=!1,He()||null!==(e=/ Chrome\/([\.0-9]+)/.exec(_e.userAgent))&&(Se=!0,be=je(e[1]))),Se}function Ye(){var e;return R.defined(Me)||(Me=!1,ke()||He()||!/ Safari\/[\.0-9]+/.test(_e.userAgent)||null!==(e=/ Version\/([\.0-9]+)/.exec(_e.userAgent))&&(Me=!0,Ae=je(e[1]))),Me}function Ze(){var e;return R.defined(Re)||(Re=!1,null!==(e=/ AppleWebKit\/([\.0-9]+)(\+?)/.exec(_e.userAgent))&&(Re=!0,(Te=je(e[1])).isNightly=!!e[2])),Re}function Xe(){var e;return R.defined(qe)||(qe=!1,"Microsoft Internet Explorer"===_e.appName?null!==(e=/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(_e.userAgent))&&(qe=!0,ze=je(e[1])):"Netscape"===_e.appName&&null!==(e=/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(_e.userAgent))&&(qe=!0,ze=je(e[1]))),qe}function He(){var e;return R.defined(Ie)||(Ie=!1,null!==(e=/ Edge\/([\.0-9]+)/.exec(_e.userAgent))&&(Ie=!0,Pe=je(e[1]))),Ie}function Je(){var e;return R.defined(De)||(De=!1,null!==(e=/Firefox\/([\.0-9]+)/.exec(_e.userAgent))&&(De=!0,Ue=je(e[1]))),De}function Ge(){var e;return R.defined(Le)||((e=document.createElement("canvas")).setAttribute("style","image-rendering: -moz-crisp-edges;image-rendering: pixelated;"),e=e.style.imageRendering,(Le=R.defined(e)&&""!==e)&&(Fe=e)),Le}function Qe(){return Qe._result}Object.defineProperties(We,{element:{get:function(){if(We.supportsFullscreen())return document[Be.fullscreenElement]}},changeEventName:{get:function(){if(We.supportsFullscreen())return Be.fullscreenchange}},errorEventName:{get:function(){if(We.supportsFullscreen())return Be.fullscreenerror}},enabled:{get:function(){if(We.supportsFullscreen())return document[Be.fullscreenEnabled]}},fullscreen:{get:function(){if(We.supportsFullscreen())return null!==We.element}}}),We.supportsFullscreen=function(){if(R.defined(Ee))return Ee;Ee=!1;var e=document.body;if("function"==typeof e.requestFullscreen)return Be.requestFullscreen="requestFullscreen",Be.exitFullscreen="exitFullscreen",Be.fullscreenEnabled="fullscreenEnabled",Be.fullscreenElement="fullscreenElement",Be.fullscreenchange="fullscreenchange",Be.fullscreenerror="fullscreenerror",Ee=!0;for(var t=["webkit","moz","o","ms","khtml"],n=0,r=t.length;n<r;++n){var a,i=t[n];"function"!=typeof e[a=i+"RequestFullscreen"]&&"function"!=typeof e[a=i+"RequestFullScreen"]||(Be.requestFullscreen=a,Ee=!0),a=i+"ExitFullscreen","function"==typeof document[a]?Be.exitFullscreen=a:(a=i+"CancelFullScreen","function"==typeof document[a]&&(Be.exitFullscreen=a)),a=i+"FullscreenEnabled",void 0!==document[a]?Be.fullscreenEnabled=a:(a=i+"FullScreenEnabled",void 0!==document[a]&&(Be.fullscreenEnabled=a)),a=i+"FullscreenElement",void 0!==document[a]?Be.fullscreenElement=a:(a=i+"FullScreenElement",void 0!==document[a]&&(Be.fullscreenElement=a)),a=i+"fullscreenchange",void 0!==document["on"+a]&&("ms"===i&&(a="MSFullscreenChange"),Be.fullscreenchange=a),a=i+"fullscreenerror",void 0!==document["on"+a]&&("ms"===i&&(a="MSFullscreenError"),Be.fullscreenerror=a)}return Ee},We.requestFullscreen=function(e,t){We.supportsFullscreen()&&e[Be.requestFullscreen]({vrDisplay:t})},We.exitFullscreen=function(){We.supportsFullscreen()&&document[Be.exitFullscreen]()},We._names=Be,_e="undefined"!=typeof navigator?navigator:{},Qe._promise=void 0,Qe._result=void 0,Qe.initialize=function(){if(R.defined(Qe._promise))return Qe._promise;var e=R.when.defer();if(Qe._promise=e.promise,He())return Qe._result=!1,e.resolve(Qe._result),e.promise;var t=new Image;return t.onload=function(){Qe._result=0<t.width&&0<t.height,e.resolve(Qe._result)},t.onerror=function(){Qe._result=!1,e.resolve(Qe._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.promise},Object.defineProperties(Qe,{initialized:{get:function(){return R.defined(Qe._result)}}});C=[];"undefined"!=typeof ArrayBuffer&&(C.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),"undefined"!=typeof Uint8ClampedArray&&C.push(Uint8ClampedArray),"undefined"!=typeof Uint8ClampedArray&&C.push(Uint8ClampedArray));var Ke={isChrome:ke,chromeVersion:function(){return ke()&&be},isSafari:Ye,safariVersion:function(){return Ye()&&Ae},isWebkit:Ze,webkitVersion:function(){return Ze()&&Te},isInternetExplorer:Xe,internetExplorerVersion:function(){return Xe()&&ze},isEdge:He,edgeVersion:function(){return He()&&Pe},isFirefox:Je,firefoxVersion:function(){return Je()&&Ue},isWindows:function(){return Ne=!R.defined(Ne)?/Windows/i.test(_e.appVersion):Ne},hardwareConcurrency:R.defaultValue(_e.hardwareConcurrency,3),supportsPointerEvents:function(){return Ve=!R.defined(Ve)?!Je()&&"undefined"!=typeof PointerEvent&&(!R.defined(_e.pointerEnabled)||_e.pointerEnabled):Ve},supportsImageRenderingPixelated:Ge,supportsWebP:Qe,imageRenderingValue:function(){return Ge()?Fe:void 0},typedArrayTypes:C};function $e(e,t,n,r){this.x=R.defaultValue(e,0),this.y=R.defaultValue(t,0),this.z=R.defaultValue(n,0),this.w=R.defaultValue(r,0)}Ke.supportsFullscreen=function(){return We.supportsFullscreen()},Ke.supportsTypedArrays=function(){return"undefined"!=typeof ArrayBuffer},Ke.supportsWebWorkers=function(){return"undefined"!=typeof Worker},Ke.supportsWebAssembly=function(){return"undefined"!=typeof WebAssembly&&!Ke.isEdge()};var et=new A.Cartesian3;$e.fromAxisAngle=function(e,t,n){var r=t/2,a=Math.sin(r),t=(et=A.Cartesian3.normalize(e,et)).x*a,e=et.y*a,a=et.z*a,r=Math.cos(r);return R.defined(n)?(n.x=t,n.y=e,n.z=a,n.w=r,n):new $e(t,e,a,r)};var tt=[1,2,0],nt=new Array(3);$e.fromRotationMatrix=function(e,t){var n,r,a,i,s=e[B.COLUMN0ROW0],o=e[B.COLUMN1ROW1],u=e[B.COLUMN2ROW2],l=s+o+u,c=0<l?(a=.5*(i=Math.sqrt(l+1)),i=.5/i,n=(e[B.COLUMN1ROW2]-e[B.COLUMN2ROW1])*i,r=(e[B.COLUMN2ROW0]-e[B.COLUMN0ROW2])*i,(e[B.COLUMN0ROW1]-e[B.COLUMN1ROW0])*i):(o=tt[s=tt[u=s<u&&o<u?2:s<o?1:0]],i=Math.sqrt(e[B.getElementIndex(u,u)]-e[B.getElementIndex(s,s)]-e[B.getElementIndex(o,o)]+1),(c=nt)[u]=.5*i,i=.5/i,a=(e[B.getElementIndex(o,s)]-e[B.getElementIndex(s,o)])*i,c[s]=(e[B.getElementIndex(s,u)]+e[B.getElementIndex(u,s)])*i,c[o]=(e[B.getElementIndex(o,u)]+e[B.getElementIndex(u,o)])*i,n=-c[0],r=-c[1],-c[2]);return R.defined(t)?(t.x=n,t.y=r,t.z=c,t.w=a,t):new $e(n,r,c,a)};var rt=new $e,at=new $e,it=new $e,st=new $e;$e.fromHeadingPitchRoll=function(e,t){return st=$e.fromAxisAngle(A.Cartesian3.UNIT_X,e.roll,rt),it=$e.fromAxisAngle(A.Cartesian3.UNIT_Y,-e.pitch,t),t=$e.multiply(it,st,it),at=$e.fromAxisAngle(A.Cartesian3.UNIT_Z,-e.heading,rt),$e.multiply(at,t,t)};var ot=new A.Cartesian3,ut=new A.Cartesian3,lt=new $e,ct=new $e,dt=new $e;$e.packedLength=4,$e.pack=function(e,t,n){return n=R.defaultValue(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t},$e.unpack=function(e,t,n){return t=R.defaultValue(t,0),(n=!R.defined(n)?new $e:n).x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n},$e.packedInterpolationLength=3,$e.convertPackedArrayForInterpolation=function(e,t,n,r){$e.unpack(e,4*n,dt),$e.conjugate(dt,dt);for(var a=0,i=n-t+1;a<i;a++){var s=3*a;$e.unpack(e,4*(t+a),lt),$e.multiply(lt,dt,lt),lt.w<0&&$e.negate(lt,lt),$e.computeAxis(lt,ot);var o=$e.computeAngle(lt);(r=!R.defined(r)?[]:r)[s]=ot.x*o,r[1+s]=ot.y*o,r[2+s]=ot.z*o}},$e.unpackInterpolationResult=function(e,t,n,r,a){R.defined(a)||(a=new $e),A.Cartesian3.fromArray(e,0,ut);e=A.Cartesian3.magnitude(ut);return $e.unpack(t,4*r,ct),0===e?$e.clone($e.IDENTITY,lt):$e.fromAxisAngle(ut,e,lt),$e.multiply(lt,ct,a)},$e.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new $e(e.x,e.y,e.z,e.w)},$e.conjugate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=e.w,t},$e.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w},$e.magnitude=function(e){return Math.sqrt($e.magnitudeSquared(e))},$e.normalize=function(e,t){var n=1/$e.magnitude(e),r=e.x*n,a=e.y*n,i=e.z*n,n=e.w*n;return t.x=r,t.y=a,t.z=i,t.w=n,t},$e.inverse=function(e,t){var n=$e.magnitudeSquared(e);return t=$e.conjugate(e,t),$e.multiplyByScalar(t,1/n,t)},$e.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n},$e.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n},$e.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t},$e.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},$e.multiply=function(e,t,n){var r=e.x,a=e.y,i=e.z,s=e.w,o=t.x,u=t.y,l=t.z,c=t.w,d=s*o+r*c+a*l-i*u,e=s*u-r*l+a*c+i*o,t=s*l+r*u-a*o+i*c,l=s*c-r*o-a*u-i*l;return n.x=d,n.y=e,n.z=t,n.w=l,n},$e.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n},$e.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n},$e.computeAxis=function(e,t){var n=e.w;if(Math.abs(n-1)<F.CesiumMath.EPSILON6)return t.x=t.y=t.z=0,t;n=1/Math.sqrt(1-n*n);return t.x=e.x*n,t.y=e.y*n,t.z=e.z*n,t},$e.computeAngle=function(e){return Math.abs(e.w-1)<F.CesiumMath.EPSILON6?0:2*Math.acos(e.w)};var ft=new $e;$e.lerp=function(e,t,n,r){return ft=$e.multiplyByScalar(t,n,ft),r=$e.multiplyByScalar(e,1-n,r),$e.add(ft,r,r)};var ht=new $e,pt=new $e,mt=new $e;$e.slerp=function(e,t,n,r){var a=$e.dot(e,t),i=t;if(a<0&&(a=-a,i=ht=$e.negate(t,ht)),1-a<F.CesiumMath.EPSILON6)return $e.lerp(e,i,n,r);a=Math.acos(a);return pt=$e.multiplyByScalar(e,Math.sin((1-n)*a),pt),mt=$e.multiplyByScalar(i,Math.sin(n*a),mt),r=$e.add(pt,mt,r),$e.multiplyByScalar(r,1/Math.sin(a),r)},$e.log=function(e,t){var n=F.CesiumMath.acosClamped(e.w),r=0;return 0!==n&&(r=n/Math.sin(n)),A.Cartesian3.multiplyByScalar(e,r,t)},$e.exp=function(e,t){var n=A.Cartesian3.magnitude(e),r=0;return 0!==n&&(r=Math.sin(n)/n),t.x=e.x*r,t.y=e.y*r,t.z=e.z*r,t.w=Math.cos(n),t};var yt=new A.Cartesian3,wt=new A.Cartesian3,Ct=new $e,vt=new $e;$e.computeInnerQuadrangle=function(e,t,n,r){var a=$e.conjugate(t,Ct);$e.multiply(a,n,vt);n=$e.log(vt,yt);$e.multiply(a,e,vt);e=$e.log(vt,wt);return A.Cartesian3.add(n,e,n),A.Cartesian3.multiplyByScalar(n,.25,n),A.Cartesian3.negate(n,n),$e.exp(n,Ct),$e.multiply(t,Ct,r)},$e.squad=function(e,t,n,r,a,i){t=$e.slerp(e,t,a,Ct),r=$e.slerp(n,r,a,vt);return $e.slerp(t,r,2*a*(1-a),i)};for(var gt=new $e,C=1.9011074535173003,xt=Ke.supportsTypedArrays()?new Float32Array(8):[],Et=Ke.supportsTypedArrays()?new Float32Array(8):[],Ot=Ke.supportsTypedArrays()?new Float32Array(8):[],_t=Ke.supportsTypedArrays()?new Float32Array(8):[],St=0;St<7;++St){var bt=St+1,Mt=2*bt+1;xt[St]=1/(bt*Mt),Et[St]=bt/Mt}function At(e,t,n){for(var r,a,i=0,s=e.length-1;i<=s;)if((a=n(e[r=~~((i+s)/2)],t))<0)i=1+r;else{if(!(0<a))return r;s=r-1}return~(s+1)}function Rt(e,t,n,r,a){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=r,this.ut1MinusUtc=a}function Tt(){function v(e,t,n,r){return n=n||" ",n=e.length>=t?"":Array(1+t-e.length>>>0).join(n),r?e+n:n+e}function g(e,t,n,r,a,i){var s=r-e.length;return e=0<s?n||!a?v(e,r,i,n):e.slice(0,t.length)+v("",s,"0",!0)+e.slice(t.length):e}function x(e,t,n,r,a,i,s){var o=e>>>0;return e=(n=n&&o&&{2:"0b",8:"0",16:"0x"}[t]||"")+v(o.toString(t),i||0,"0",!1),g(e,n,r,a,s)}function E(e,t,n,r,a,i){return null!=r&&(e=e.slice(0,r)),g(e,"",t,n,a,i)}var O=arguments,_=0,e=O[_++];return e.replace(/%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g,function(e,t,n,r,a,i,s){var o,u,l,c,d;if("%%"==e)return"%";for(var f=!1,h="",p=!1,m=!1,y=" ",w=n.length,C=0;n&&C<w;C++)switch(n.charAt(C)){case" ":h=" ";break;case"+":h="+";break;case"-":f=!0;break;case"'":y=n.charAt(C+1);break;case"0":p=!0;break;case"#":m=!0}if((r=r?"*"==r?+O[_++]:"*"==r.charAt(0)?+O[r.slice(1,-1)]:+r:0)<0&&(r=-r,f=!0),!isFinite(r))throw new Error("sprintf: (minimum-)width must be finite");switch(i=i?"*"==i?+O[_++]:"*"==i.charAt(0)?+O[i.slice(1,-1)]:+i:-1<"fFeE".indexOf(s)?6:"d"==s?0:void 0,d=t?O[t.slice(0,-1)]:O[_++],s){case"s":return E(String(d),f,r,i,p,y);case"c":return E(String.fromCharCode(+d),f,r,i,p);case"b":return x(d,2,m,f,r,i,p);case"o":return x(d,8,m,f,r,i,p);case"x":return x(d,16,m,f,r,i,p);case"X":return x(d,16,m,f,r,i,p).toUpperCase();case"u":return x(d,10,m,f,r,i,p);case"i":case"d":return o=+d||0,d=(u=(o=Math.round(o-o%1))<0?"-":h)+v(String(Math.abs(o)),i,"0",!1),g(d,u,f,r,p);case"e":case"E":case"f":case"F":case"g":case"G":return u=(o=+d)<0?"-":h,l=["toExponential","toFixed","toPrecision"]["efg".indexOf(s.toLowerCase())],c=["toString","toUpperCase"]["eEfFgG".indexOf(s)%2],d=u+Math.abs(o)[l](i),g(d,u,f,r,p)[c]();default:return e}})}function qt(e,t,n,r,a,i,s,o){this.year=e,this.month=t,this.day=n,this.hour=r,this.minute=a,this.second=i,this.millisecond=s,this.isLeapSecond=o}function zt(e){return e%4==0&&e%100!=0||e%400==0}function It(e,t){this.julianDate=e,this.offset=t}xt[7]=C/136,Et[7]=8*C/17,$e.fastSlerp=function(e,t,n,r){var a,i=$e.dot(e,t);0<=i?a=1:(a=-1,i=-i);for(var s=i-1,i=1-n,o=n*n,u=i*i,l=7;0<=l;--l)Ot[l]=(xt[l]*o-Et[l])*s,_t[l]=(xt[l]*u-Et[l])*s;n=a*n*(1+Ot[0]*(1+Ot[1]*(1+Ot[2]*(1+Ot[3]*(1+Ot[4]*(1+Ot[5]*(1+Ot[6]*(1+Ot[7])))))))),i*=1+_t[0]*(1+_t[1]*(1+_t[2]*(1+_t[3]*(1+_t[4]*(1+_t[5]*(1+_t[6]*(1+_t[7]))))))),i=$e.multiplyByScalar(e,i,gt);return $e.multiplyByScalar(t,n,r),$e.add(i,r,r)},$e.fastSquad=function(e,t,n,r,a,i){t=$e.fastSlerp(e,t,a,Ct),r=$e.fastSlerp(n,r,a,vt);return $e.fastSlerp(t,r,2*a*(1-a),i)},$e.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w},$e.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n},$e.ZERO=Object.freeze(new $e(0,0,0,0)),$e.IDENTITY=Object.freeze(new $e(0,0,0,1)),$e.prototype.clone=function(e){return $e.clone(this,e)},$e.prototype.equals=function(e){return $e.equals(this,e)},$e.prototype.equalsEpsilon=function(e,t){return $e.equalsEpsilon(this,e,t)},$e.prototype.toString=function(){return"("+this.x+", "+this.y+", "+this.z+", "+this.w+")"};var Pt=Object.freeze({SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:2400000.5}),Dt=Object.freeze({UTC:0,TAI:1}),Ut=new qt,Nt=[31,28,31,30,31,30,31,31,30,31,30,31];function Vt(e,t){return Kt.compare(e.julianDate,t.julianDate)}var Ft=new It;function Lt(e){Ft.julianDate=e;var t=Kt.leapSeconds,n=At(t,Ft,Vt),r=t[n=(n=n<0?~n:n)>=t.length?t.length-1:n].offset;0<n&&r<Kt.secondsDifference(t[n].julianDate,e)&&(r=t[--n].offset),Kt.addSeconds(e,r,e)}function Bt(e,t){Ft.julianDate=e;var n=Kt.leapSeconds,r=At(n,Ft,Vt);if(0===(r=r<0?~r:r))return Kt.addSeconds(e,-n[0].offset,t);if(r>=n.length)return Kt.addSeconds(e,-n[r-1].offset,t);var a=Kt.secondsDifference(n[r].julianDate,e);return 0===a?Kt.addSeconds(e,-n[r].offset,t):a<=1?void 0:Kt.addSeconds(e,-n[--r].offset,t)}function Wt(e,t,n){var r=t/Pt.SECONDS_PER_DAY|0;return e+=r,(t-=Pt.SECONDS_PER_DAY*r)<0&&(e--,t+=Pt.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function jt(e,t,n,r,a,i,s){var o=(t-14)/12|0,e=e+4800+o,n=(1461*e/4|0)+(367*(t-2-12*o)/12|0)-(3*((e+100)/100|0)/4|0)+n-32075;(r-=12)<0&&(r+=24);s=i+(r*Pt.SECONDS_PER_HOUR+a*Pt.SECONDS_PER_MINUTE+s*Pt.SECONDS_PER_MILLISECOND);return 43200<=s&&--n,[n,s]}var kt=/^(\d{4})$/,Yt=/^(\d{4})-(\d{2})$/,Zt=/^(\d{4})-?(\d{3})$/,Xt=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,Ht=/^(\d{4})-?(\d{2})-?(\d{2})$/,C=/([Z+\-])?(\d{2})?:?(\d{2})?$/,Jt=/^(\d{2})(\.\d+)?/.source+C.source,Gt=/^(\d{2}):?(\d{2})(\.\d+)?/.source+C.source,Qt=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+C.source;function Kt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=R.defaultValue(e,0),t=R.defaultValue(t,0),n=R.defaultValue(n,Dt.UTC);var r=0|e;Wt(r,t+=(e-r)*Pt.SECONDS_PER_DAY,this),n===Dt.UTC&&Lt(this)}Kt.fromGregorianDate=function(e,t){e=jt(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return R.defined(t)?(Wt(e[0],e[1],t),Lt(t),t):new Kt(e[0],e[1],Dt.UTC)},Kt.fromDate=function(e,t){e=jt(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return R.defined(t)?(Wt(e[0],e[1],t),Lt(t),t):new Kt(e[0],e[1],Dt.UTC)},Kt.fromIso8601=function(e,t){var n,r,a,i,s,o=(e=e.replace(",",".")).split("T"),u=1,l=1,c=0,d=0,f=0,h=0,p=o[0],e=o[1];if(null!==(o=p.match(Ht))?(a=+o[1],u=+o[2],l=+o[3]):null!==(o=p.match(Yt))?(a=+o[1],u=+o[2]):null!==(o=p.match(kt))?a=+o[1]:(null!==(o=p.match(Zt))?(a=+o[1],i=+o[2],r=zt(a)):null!==(o=p.match(Xt))&&(a=+o[1],i=7*+o[2]+(+o[3]||0)-new Date(Date.UTC(a,0,4)).getUTCDay()-3),(n=new Date(Date.UTC(a,0,1))).setUTCDate(i),u=n.getUTCMonth()+1,l=n.getUTCDate()),r=zt(a),R.defined(e)){null!==(o=e.match(Qt))?(c=+o[1],d=+o[2],f=+o[3],h=1e3*+(o[4]||0),s=5):null!==(o=e.match(Gt))?(c=+o[1],d=+o[2],f=60*+(o[3]||0),s=4):null!==(o=e.match(Jt))&&(c=+o[1],d=60*+(o[2]||0),s=3);var m=o[s],y=+o[s+1],w=+(o[s+2]||0);switch(m){case"+":c-=y,d-=w;break;case"-":c+=y,d+=w;break;case"Z":break;default:d+=new Date(Date.UTC(a,u-1,l,c,d)).getTimezoneOffset()}}m=60===f;for(m&&f--;60<=d;)d-=60,c++;for(;24<=c;)c-=24,l++;for(n=r&&2===u?29:Nt[u-1];n<l;)l-=n,12<++u&&(u-=12,a++),n=r&&2===u?29:Nt[u-1];for(;d<0;)d+=60,c--;for(;c<0;)c+=24,l--;for(;l<1;)--u<1&&(u+=12,a--),l+=n=r&&2===u?29:Nt[u-1];h=jt(a,u,l,c,d,f,h);return R.defined(t)?(Wt(h[0],h[1],t),Lt(t)):t=new Kt(h[0],h[1],Dt.UTC),m&&Kt.addSeconds(t,1,t),t},Kt.now=function(e){return Kt.fromDate(new Date,e)};var $t=new Kt(0,0,Dt.TAI);function en(e){e instanceof en?(this.scheme=e.scheme,this.authority=e.authority,this.path=e.path,this.query=e.query,this.fragment=e.fragment):e&&(e=tn.exec(e),this.scheme=e[1],this.authority=e[2],this.path=e[3],this.query=e[4],this.fragment=e[5])}Kt.toGregorianDate=function(e,t){var n=!1,r=Bt(e,$t);R.defined(r)||(Kt.addSeconds(e,-1,$t),r=Bt($t,$t),n=!0);var a=r.dayNumber,i=r.secondsOfDay;43200<=i&&(a+=1);var s=a+68569|0,o=4*s/146097|0,u=4e3*(1+(s=s-((146097*o+3)/4|0)|0))/1461001|0,e=80*(s=s-(1461*u/4|0)+31|0)/2447|0,r=s-(2447*e/80|0)|0,a=2+e-12*(s=e/11|0)|0,e=100*(o-49)+u+s|0,o=i/Pt.SECONDS_PER_HOUR|0,u=i-o*Pt.SECONDS_PER_HOUR,s=u/Pt.SECONDS_PER_MINUTE|0,i=0|(u-=s*Pt.SECONDS_PER_MINUTE),u=(u-i)/Pt.SECONDS_PER_MILLISECOND;return 23<(o+=12)&&(o-=24),n&&(i+=1),R.defined(t)?(t.year=e,t.month=a,t.day=r,t.hour=o,t.minute=s,t.second=i,t.millisecond=u,t.isLeapSecond=n,t):new qt(e,a,r,o,s,i,u,n)},Kt.toDate=function(e){var t=Kt.toGregorianDate(e,Ut),e=t.second;return t.isLeapSecond&&--e,new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,e,t.millisecond))},Kt.toIso8601=function(e,t){var n=Kt.toGregorianDate(e,Ut),r=n.year,a=n.month,i=n.day,s=n.hour,o=n.minute,e=n.second,n=n.millisecond;return 1e4===r&&1===a&&1===i&&0===s&&0===o&&0===e&&0===n&&(r=9999,a=12,i=31,s=24),R.defined(t)||0===n?R.defined(t)&&0!==t?Tt("%04d-%02d-%02dT%02d:%02d:%02d.%sZ",r,a,i,s,o,e,(.01*n).toFixed(t).replace(".","").slice(0,t)):Tt("%04d-%02d-%02dT%02d:%02d:%02dZ",r,a,i,s,o,e):Tt("%04d-%02d-%02dT%02d:%02d:%02d.%sZ",r,a,i,s,o,e,(.01*n).toString().replace(".",""))},Kt.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new Kt(e.dayNumber,e.secondsOfDay,Dt.TAI)},Kt.compare=function(e,t){var n=e.dayNumber-t.dayNumber;return 0!=n?n:e.secondsOfDay-t.secondsOfDay},Kt.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay},Kt.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(Kt.secondsDifference(e,t))<=n},Kt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/Pt.SECONDS_PER_DAY},Kt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*Pt.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)},Kt.daysDifference=function(e,t){return e.dayNumber-t.dayNumber+(e.secondsOfDay-t.secondsOfDay)/Pt.SECONDS_PER_DAY},Kt.computeTaiMinusUtc=function(e){Ft.julianDate=e;var t=Kt.leapSeconds,e=At(t,Ft,Vt);return e<0&&(e=~e,--e<0&&(e=0)),t[e].offset},Kt.addSeconds=function(e,t,n){return Wt(e.dayNumber,e.secondsOfDay+t,n)},Kt.addMinutes=function(e,t,n){t=e.secondsOfDay+t*Pt.SECONDS_PER_MINUTE;return Wt(e.dayNumber,t,n)},Kt.addHours=function(e,t,n){t=e.secondsOfDay+t*Pt.SECONDS_PER_HOUR;return Wt(e.dayNumber,t,n)},Kt.addDays=function(e,t,n){return Wt(e.dayNumber+t,e.secondsOfDay,n)},Kt.lessThan=function(e,t){return Kt.compare(e,t)<0},Kt.lessThanOrEquals=function(e,t){return Kt.compare(e,t)<=0},Kt.greaterThan=function(e,t){return 0<Kt.compare(e,t)},Kt.greaterThanOrEquals=function(e,t){return 0<=Kt.compare(e,t)},Kt.prototype.clone=function(e){return Kt.clone(this,e)},Kt.prototype.equals=function(e){return Kt.equals(this,e)},Kt.prototype.equalsEpsilon=function(e,t){return Kt.equalsEpsilon(this,e,t)},Kt.prototype.toString=function(){return Kt.toIso8601(this)},Kt.leapSeconds=[new It(new Kt(2441317,43210,Dt.TAI),10),new It(new Kt(2441499,43211,Dt.TAI),11),new It(new Kt(2441683,43212,Dt.TAI),12),new It(new Kt(2442048,43213,Dt.TAI),13),new It(new Kt(2442413,43214,Dt.TAI),14),new It(new Kt(2442778,43215,Dt.TAI),15),new It(new Kt(2443144,43216,Dt.TAI),16),new It(new Kt(2443509,43217,Dt.TAI),17),new It(new Kt(2443874,43218,Dt.TAI),18),new It(new Kt(2444239,43219,Dt.TAI),19),new It(new Kt(2444786,43220,Dt.TAI),20),new It(new Kt(2445151,43221,Dt.TAI),21),new It(new Kt(2445516,43222,Dt.TAI),22),new It(new Kt(2446247,43223,Dt.TAI),23),new It(new Kt(2447161,43224,Dt.TAI),24),new It(new Kt(2447892,43225,Dt.TAI),25),new It(new Kt(2448257,43226,Dt.TAI),26),new It(new Kt(2448804,43227,Dt.TAI),27),new It(new Kt(2449169,43228,Dt.TAI),28),new It(new Kt(2449534,43229,Dt.TAI),29),new It(new Kt(2450083,43230,Dt.TAI),30),new It(new Kt(2450630,43231,Dt.TAI),31),new It(new Kt(2451179,43232,Dt.TAI),32),new It(new Kt(2453736,43233,Dt.TAI),33),new It(new Kt(2454832,43234,Dt.TAI),34),new It(new Kt(2456109,43235,Dt.TAI),35),new It(new Kt(2457204,43236,Dt.TAI),36),new It(new Kt(2457754,43237,Dt.TAI),37)],en.prototype.scheme=null,en.prototype.authority=null,en.prototype.path="",en.prototype.query=null,en.prototype.fragment=null;var tn=new RegExp("^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$");en.prototype.getScheme=function(){return this.scheme},en.prototype.getAuthority=function(){return this.authority},en.prototype.getPath=function(){return this.path},en.prototype.getQuery=function(){return this.query},en.prototype.getFragment=function(){return this.fragment},en.prototype.isAbsolute=function(){return!!this.scheme&&!this.fragment},en.prototype.isSameDocumentAs=function(e){return e.scheme==this.scheme&&e.authority==this.authority&&e.path==this.path&&e.query==this.query},en.prototype.equals=function(e){return this.isSameDocumentAs(e)&&e.fragment==this.fragment},en.prototype.normalize=function(){this.removeDotSegments(),this.scheme&&(this.scheme=this.scheme.toLowerCase()),this.authority&&(this.authority=this.authority.replace(an,on).replace(nn,sn)),this.path&&(this.path=this.path.replace(nn,sn)),this.query&&(this.query=this.query.replace(nn,sn)),this.fragment&&(this.fragment=this.fragment.replace(nn,sn))};var nn=/%[0-9a-z]{2}/gi,rn=/[a-zA-Z0-9\-\._~]/,an=/(.*@)?([^@:]*)(:.*)?/;function sn(e){var t=unescape(e);return rn.test(t)?t:e.toUpperCase()}function on(e,t,n,r){return(t||"")+n.toLowerCase()+(r||"")}function un(e,t){if(null===e||"object"!=typeof e)return e;t=R.defaultValue(t,!1);var n,r,a=new e.constructor;for(n in e)e.hasOwnProperty(n)&&(r=e[n],t&&(r=un(r,t)),a[n]=r);return a}function ln(e,t,n){n=R.defaultValue(n,!1);var r,a,i,s={},o=R.defined(e),u=R.defined(t);if(o)for(r in e)e.hasOwnProperty(r)&&(a=e[r],u&&n&&"object"==typeof a&&t.hasOwnProperty(r)?(i=t[r],s[r]="object"==typeof i?ln(a,i,n):a):s[r]=a);if(u)for(r in t)t.hasOwnProperty(r)&&!s.hasOwnProperty(r)&&(i=t[r],s[r]=i);return s}function cn(e,t){var n;return"undefined"!=typeof document&&(n=document),cn._implementation(e,t,n)}en.prototype.resolve=function(e){var t=new en;return this.scheme?(t.scheme=this.scheme,t.authority=this.authority,t.path=this.path,t.query=this.query):(t.scheme=e.scheme,this.authority?(t.authority=this.authority,t.path=this.path,t.query=this.query):(t.authority=e.authority,""==this.path?(t.path=e.path,t.query=this.query||e.query):("/"==this.path.charAt(0)?t.path=this.path:e.authority&&""==e.path?t.path="/"+this.path:t.path=e.path.substring(0,e.path.lastIndexOf("/")+1)+this.path,t.removeDotSegments(),t.query=this.query))),t.fragment=this.fragment,t},en.prototype.removeDotSegments=function(){var e,t=this.path.split("/"),n=[],r=""==t[0];for(r&&t.shift(),""==t[0]&&t.shift();t.length;)".."==(e=t.shift())?n.pop():"."!=e&&n.push(e);"."!=e&&".."!=e||n.push(""),r&&n.unshift(""),this.path=n.join("/")},en.prototype.toString=function(){var e="";return this.scheme&&(e+=this.scheme+":"),this.authority&&(e+="//"+this.authority),e+=this.path,this.query&&(e+="?"+this.query),this.fragment&&(e+="#"+this.fragment),e},cn._implementation=function(e,t,n){if(!R.defined(t)){if(void 0===n)return e;t=R.defaultValue(n.baseURI,n.location.href)}t=new en(t);return new en(e).resolve(t).toString()};var dn,fn=/^blob:/i;function hn(e){return fn.test(e)}var pn=/^data:/i;function mn(e){return pn.test(e)}var yn=Object.freeze({UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5}),wn=Object.freeze({TERRAIN:0,IMAGERY:1,TILES3D:2,OTHER:3});function Cn(e){e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT);var t=R.defaultValue(e.throttleByServer,!1),n=R.defaultValue(e.throttle,!1);this.url=e.url,this.requestFunction=e.requestFunction,this.cancelFunction=e.cancelFunction,this.priorityFunction=e.priorityFunction,this.priority=R.defaultValue(e.priority,0),this.throttle=n,this.throttleByServer=t,this.type=R.defaultValue(e.type,wn.OTHER),this.serverKey=void 0,this.state=yn.UNISSUED,this.deferred=void 0,this.cancelled=!1}function vn(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,"string"==typeof this.responseHeaders&&(this.responseHeaders=function(e){var t={};if(!e)return t;for(var n=e.split("\r\n"),r=0;r<n.length;++r){var a,i=n[r],s=i.indexOf(": ");0<s&&(a=i.substring(0,s),s=i.substring(s+2),t[a]=s)}return t}(this.responseHeaders))}function gn(){this._listeners=[],this._scopes=[],this._toRemove=[],this._insideRaiseEvent=!1}function xn(e,t){return t-e}function En(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}function On(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}Cn.prototype.cancel=function(){this.cancelled=!0},Cn.prototype.clone=function(e){return R.defined(e)?(e.url=this.url,e.requestFunction=this.requestFunction,e.cancelFunction=this.cancelFunction,e.priorityFunction=this.priorityFunction,e.priority=this.priority,e.throttle=this.throttle,e.throttleByServer=this.throttleByServer,e.type=this.type,e.serverKey=this.serverKey,e.state=this.RequestState.UNISSUED,e.deferred=void 0,e.cancelled=!1,e):new Cn(this)},vn.prototype.toString=function(){var e="Request has failed.";return R.defined(this.statusCode)&&(e+=" Status Code: "+this.statusCode),e},Object.defineProperties(gn.prototype,{numberOfListeners:{get:function(){return this._listeners.length-this._toRemove.length}}}),gn.prototype.addEventListener=function(e,t){this._listeners.push(e),this._scopes.push(t);var n=this;return function(){n.removeEventListener(e,t)}},gn.prototype.removeEventListener=function(e,t){for(var n=this._listeners,r=this._scopes,a=-1,i=0;i<n.length;i++)if(n[i]===e&&r[i]===t){a=i;break}return-1!==a&&(this._insideRaiseEvent?(this._toRemove.push(a),n[a]=void 0,r[a]=void 0):(n.splice(a,1),r.splice(a,1)),!0)},gn.prototype.raiseEvent=function(){this._insideRaiseEvent=!0;for(var e=this._listeners,t=this._scopes,n=e.length,r=0;r<n;r++){var a=e[r];R.defined(a)&&e[r].apply(t[r],arguments)}var i=this._toRemove;if(0<(n=i.length)){for(i.sort(xn),r=0;r<n;r++){var s=i[r];e.splice(s,1),t.splice(s,1)}i.length=0}this._insideRaiseEvent=!1},Object.defineProperties(En.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){var t=this._length;if(e<t){for(var n=this._array,r=e;r<t;++r)n[r]=void 0;this._length=e,n.length=e}this._maximumLength=e}},comparator:{get:function(){return this._comparator}}}),En.prototype.reserve=function(e){e=R.defaultValue(e,this._length),this._array.length=e},En.prototype.heapify=function(e){e=R.defaultValue(e,0);for(var t=this._length,n=this._comparator,r=this._array,a=-1,i=!0;i;){var s=2*(e+1),o=s-1,a=o<t&&n(r[o],r[e])<0?o:e;(a=s<t&&n(r[s],r[a])<0?s:a)!==e?(On(r,a,e),e=a):i=!1}},En.prototype.resort=function(){for(var e=this._length,t=Math.ceil(e/2);0<=t;--t)this.heapify(t)},En.prototype.insert=function(e){var t,n=this._array,r=this._comparator,a=this._maximumLength,i=this._length++;for(i<n.length?n[i]=e:n.push(e);0!==i;){var s=Math.floor((i-1)/2);if(!(r(n[i],n[s])<0))break;On(n,i,s),i=s}return R.defined(a)&&this._length>a&&(t=n[a],this._length=a),t},En.prototype.pop=function(e){if(e=R.defaultValue(e,0),0!==this._length){var t=this._array,n=t[e];return On(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n}};var _n={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},Sn=20,bn=new En({comparator:function(e,t){return e.priority-t.priority}});bn.maximumLength=Sn,bn.reserve(Sn);var Mn=[],An={},Rn="undefined"!=typeof document?new en(document.location.href):new en,Tn=new gn;function qn(){}function zn(e){R.defined(e.priorityFunction)&&(e.priority=e.priorityFunction())}function In(e){var t=R.defaultValue(qn.requestsByServer[e],qn.maximumRequestsPerServer);return An[e]<t}function Pn(e){return e.state===yn.UNISSUED&&(e.state=yn.ISSUED,e.deferred=R.when.defer()),e.deferred.promise}function Dn(e){var t,n,r=Pn(e);return e.state=yn.ACTIVE,Mn.push(e),++_n.numberOfActiveRequests,++_n.numberOfActiveRequestsEver,++An[e.serverKey],e.requestFunction().then((n=e,function(e){var t;n.state!==yn.CANCELLED&&(t=n.deferred,--_n.numberOfActiveRequests,--An[n.serverKey],Tn.raiseEvent(),n.state=yn.RECEIVED,n.deferred=void 0,t.resolve(e))})).otherwise((t=e,function(e){t.state!==yn.CANCELLED&&(++_n.numberOfFailedRequests,--_n.numberOfActiveRequests,--An[t.serverKey],Tn.raiseEvent(e),t.state=yn.FAILED,t.deferred.reject(e))})),r}function Un(e){var t,n=e.state===yn.ACTIVE;e.state=yn.CANCELLED,++_n.numberOfCancelledRequests,R.defined(e.deferred)&&(t=e.deferred,e.deferred=void 0,t.reject()),n&&(--_n.numberOfActiveRequests,--An[e.serverKey],++_n.numberOfCancelledActiveRequests),R.defined(e.cancelFunction)&&e.cancelFunction()}qn.maximumRequests=50,qn.maximumRequestsPerServer=6,qn.requestsByServer={"api.cesium.com:443":18,"assets.cesium.com:443":18},qn.throttleRequests=!0,qn.debugShowStatistics=!1,qn.requestCompletedEvent=Tn,Object.defineProperties(qn,{statistics:{get:function(){return _n}},priorityHeapLength:{get:function(){return Sn},set:function(e){if(e<Sn)for(;bn.length>e;)Un(bn.pop());Sn=e,bn.maximumLength=e,bn.reserve(e)}}}),qn.update=function(){for(var e,t=0,n=Mn.length,r=0;r<n;++r)(e=Mn[r]).cancelled&&Un(e),e.state===yn.ACTIVE?0<t&&(Mn[r-t]=e):++t;Mn.length-=t;var a=bn.internalArray,i=bn.length;for(r=0;r<i;++r)zn(a[r]);bn.resort();for(var s=Math.max(qn.maximumRequests-Mn.length,0),o=0;o<s&&0<bn.length;)!(e=bn.pop()).cancelled&&(!e.throttleByServer||In(e.serverKey))?(Dn(e),++o):Un(e);!function(){if(!qn.debugShowStatistics)return;0===_n.numberOfActiveRequests&&0<_n.lastNumberOfActiveRequests&&(0<_n.numberOfAttemptedRequests&&(console.log("Number of attempted requests: "+_n.numberOfAttemptedRequests),_n.numberOfAttemptedRequests=0),0<_n.numberOfCancelledRequests&&(console.log("Number of cancelled requests: "+_n.numberOfCancelledRequests),_n.numberOfCancelledRequests=0),0<_n.numberOfCancelledActiveRequests&&(console.log("Number of cancelled active requests: "+_n.numberOfCancelledActiveRequests),_n.numberOfCancelledActiveRequests=0),0<_n.numberOfFailedRequests&&(console.log("Number of failed requests: "+_n.numberOfFailedRequests),_n.numberOfFailedRequests=0));_n.lastNumberOfActiveRequests=_n.numberOfActiveRequests}()},qn.getServerKey=function(e){var t=new en(e).resolve(Rn);t.normalize();e=t.authority;/:/.test(e)||(e=e+":"+("https"===t.scheme?"443":"80"));t=An[e];return R.defined(t)||(An[e]=0),e},qn.request=function(e){if(mn(e.url)||hn(e.url))return Tn.raiseEvent(),e.state=yn.RECEIVED,e.requestFunction();if(++_n.numberOfAttemptedRequests,R.defined(e.serverKey)||(e.serverKey=qn.getServerKey(e.url)),!qn.throttleRequests||!e.throttleByServer||In(e.serverKey)){if(!qn.throttleRequests||!e.throttle)return Dn(e);if(!(Mn.length>=qn.maximumRequests)){zn(e);var t=bn.insert(e);if(R.defined(t)){if(t===e)return;Un(t)}return Pn(e)}}},qn.clearForSpecs=function(){for(;0<bn.length;)Un(bn.pop());for(var e=Mn.length,t=0;t<e;++t)Un(Mn[t]);Mn.length=0,An={},_n.numberOfAttemptedRequests=0,_n.numberOfActiveRequests=0,_n.numberOfCancelledRequests=0,_n.numberOfCancelledActiveRequests=0,_n.numberOfFailedRequests=0,_n.numberOfActiveRequestsEver=0,_n.lastNumberOfActiveRequests=0},qn.numberOfActiveRequestsByServer=function(e){return An[e]},qn.requestHeap=bn;var Nn={},Vn={};Nn.add=function(e,t){t=e.toLowerCase()+":"+t;R.defined(Vn[t])||(Vn[t]=!0)},Nn.remove=function(e,t){t=e.toLowerCase()+":"+t;R.defined(Vn[t])&&delete Vn[t]},Nn.contains=function(e){e=function(e){var t=new en(e);if(t.normalize(),e=t.getAuthority(),R.defined(e)){if(-1===(e=-1!==e.indexOf("@")?e.split("@")[1]:e).indexOf(":")){t=t.getScheme();if("http"===(t=!R.defined(t)?(t=window.location.protocol).substring(0,t.length-1):t))e+=":80";else{if("https"!==t)return;e+=":443"}}return e}}(e);return!(!R.defined(e)||!R.defined(Vn[e]))},Nn.clear=function(){Vn={}};var Fn,Ln=function(){try{var e=new XMLHttpRequest;return e.open("GET","#",!0),(e.responseType="blob")===e.responseType}catch(e){return!1}}();function Bn(e,t,n,r){var a,i=e.query;if(!R.defined(i)||0===i.length)return 1;i=-1===i.indexOf("=")?((a={})[i]=void 0,a):function(e){var t={};if(""===e)return t;for(var n=e.replace(/\+/g,"%20").split(/[&;]/),r=0,a=n.length;r<a;++r){var i=n[r].split("="),s=decodeURIComponent(i[0]),o=i[1],o=R.defined(o)?decodeURIComponent(o):"",i=t[s];"string"==typeof i?t[s]=[i,o]:Array.isArray(i)?i.push(o):t[s]=o}return t}(i),t._queryParameters=n?Yn(i,t._queryParameters,r):i,e.query=void 0}function Wn(e,t){var n=t._queryParameters,t=Object.keys(n);1!==t.length||R.defined(n[t[0]])?e.query=function(e){var t,n="";for(t in e)if(e.hasOwnProperty(t)){var r=e[t],a=encodeURIComponent(t)+"=";if(Array.isArray(r))for(var i=0,s=r.length;i<s;++i)n+=a+encodeURIComponent(r[i])+"&";else n+=a+encodeURIComponent(r)+"&"}return n=n.slice(0,-1)}(n):e.query=t[0]}function jn(e,t){return R.defined(e)?R.defined(e.clone)?e.clone():un(e):t}function kn(e){if(e.state===yn.ISSUED||e.state===yn.ACTIVE)throw new L.RuntimeError("The Resource is already being fetched.");e.state=yn.UNISSUED,e.deferred=void 0}function Yn(e,t,n){if(!n)return ln(e,t);var r,a,i,s=un(e,!0);for(r in t)t.hasOwnProperty(r)&&(a=s[r],i=t[r],R.defined(a)?(Array.isArray(a)||(a=s[r]=[a]),s[r]=a.concat(i)):s[r]=Array.isArray(i)?i.slice():i);return s}function Zn(e){"string"==typeof(e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT))&&(e={url:e}),this._url=void 0,this._templateValues=jn(e.templateValues,{}),this._queryParameters=jn(e.queryParameters,{}),this.headers=jn(e.headers,{}),this.request=R.defaultValue(e.request,new Cn),this.proxy=e.proxy,this.retryCallback=e.retryCallback,this.retryAttempts=R.defaultValue(e.retryAttempts,0),this._retryCount=0;e=new en(e.url);Bn(e,this,!0,!0),e.fragment=void 0,this._url=e.toString()}function Xn(e){var n=e.resource,r=e.flipY,a=e.preferImageBitmap,i=n.request;i.url=n.url,i.requestFunction=function(){var e=!1;n.isDataUri||n.isBlobUri||(e=n.isCrossOriginUrl);var t=R.when.defer();return Zn._Implementations.createImage(i,e,t,r,a),t.promise};e=qn.request(i);if(R.defined(e))return e.otherwise(function(t){return i.state!==yn.FAILED?R.when.reject(t):n.retryOnError(t).then(function(e){return e?(i.state=yn.UNISSUED,i.deferred=void 0,Xn({resource:n,flipY:r,preferImageBitmap:a})):R.when.reject(t)})})}Zn.createIfNeeded=function(e){return e instanceof Zn?e.getDerivedResource({request:e.request}):"string"!=typeof e?e:new Zn({url:e})},Zn.supportsImageBitmapOptions=function(){if(R.defined(Fn))return Fn;if("function"!=typeof createImageBitmap)return Fn=R.when.resolve(!1);return Fn=Zn.fetchBlob({url:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg=="}).then(function(e){return createImageBitmap(e,{imageOrientation:"flipY",premultiplyAlpha:"none"})}).then(function(e){return!0}).otherwise(function(){return!1})},Object.defineProperties(Zn,{isBlobSupported:{get:function(){return Ln}}}),Object.defineProperties(Zn.prototype,{queryParameters:{get:function(){return this._queryParameters}},templateValues:{get:function(){return this._templateValues}},url:{get:function(){return this.getUrlComponent(!0,!0)},set:function(e){e=new en(e);Bn(e,this,!1),e.fragment=void 0,this._url=e.toString()}},extension:{get:function(){return e=this._url,(t=new en(e)).normalize(),e=t.path,e=-1===(t=(e=-1!==(t=e.lastIndexOf("/"))?e.substr(t+1):e).lastIndexOf("."))?"":e.substr(t+1);var e,t}},isDataUri:{get:function(){return mn(this._url)}},isBlobUri:{get:function(){return hn(this._url)}},isCrossOriginUrl:{get:function(){return function(e){(dn=!R.defined(dn)?document.createElement("a"):dn).href=window.location.href;var t=dn.host,n=dn.protocol;return dn.href=e,dn.href=dn.href,n!==dn.protocol||t!==dn.host}(this._url)}},hasHeaders:{get:function(){return 0<Object.keys(this.headers).length}}}),Zn.prototype.toString=function(){return this.getUrlComponent(!0,!0)},Zn.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;var n=new en(this._url);e&&Wn(n,this);var n=(n=n.toString().replace(/%7B/g,"{").replace(/%7D/g,"}")).replace(new RegExp("\\+","gm"),"%2B"),r=this._templateValues;return n=n.replace(/{(.*?)}/g,function(e,t){t=r[t];return R.defined(t)?encodeURIComponent(t):e}),n=t&&R.defined(this.proxy)?this.proxy.getURL(n):n},Zn.prototype.setQueryParameters=function(e,t){this._queryParameters=t?Yn(this._queryParameters,e,!1):Yn(e,this._queryParameters,!1)},Zn.prototype.appendQueryParameters=function(e){this._queryParameters=Yn(e,this._queryParameters,!0)},Zn.prototype.setTemplateValues=function(e,t){this._templateValues=t?ln(this._templateValues,e):ln(e,this._templateValues)},Zn.prototype.getDerivedResource=function(e){var t,n=this.clone();return n._retryCount=0,R.defined(e.url)&&(Bn(t=new en(e.url),n,!0,R.defaultValue(e.preserveQueryParameters,!1)),t.fragment=void 0,n._url=t.resolve(new en(cn(this._url))).toString()),R.defined(e.queryParameters)&&(n._queryParameters=ln(e.queryParameters,n._queryParameters)),R.defined(e.templateValues)&&(n._templateValues=ln(e.templateValues,n.templateValues)),R.defined(e.headers)&&(n.headers=ln(e.headers,n.headers)),R.defined(e.proxy)&&(n.proxy=e.proxy),R.defined(e.request)&&(n.request=e.request),R.defined(e.retryCallback)&&(n.retryCallback=e.retryCallback),R.defined(e.retryAttempts)&&(n.retryAttempts=e.retryAttempts),n},Zn.prototype.retryOnError=function(e){var t=this.retryCallback;if("function"!=typeof t||this._retryCount>=this.retryAttempts)return R.when(!1);var n=this;return R.when(t(this,e)).then(function(e){return++n._retryCount,e})},Zn.prototype.clone=function(e){return(e=!R.defined(e)?new Zn({url:this._url}):e)._url=this._url,e._queryParameters=un(this._queryParameters),e._templateValues=un(this._templateValues),e.headers=un(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e},Zn.prototype.getBaseUri=function(e){return t=this.getUrlComponent(e),n=e,r="",-1!==(e=t.lastIndexOf("/"))&&(r=t.substring(0,e+1)),n&&(t=new en(t),R.defined(t.query)&&(r+="?"+t.query),R.defined(t.fragment)&&(r+="#"+t.fragment)),r;var t,n,r},Zn.prototype.appendForwardSlash=function(){var e;this._url=(0!==(e=this._url).length&&"/"===e[e.length-1]||(e+="/"),e)},Zn.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})},Zn.fetchArrayBuffer=function(e){return new Zn(e).fetchArrayBuffer()},Zn.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})},Zn.fetchBlob=function(e){return new Zn(e).fetchBlob()},Zn.prototype.fetchImage=function(e){e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT);var t=R.defaultValue(e.preferImageBitmap,!1),n=R.defaultValue(e.preferBlob,!1),r=R.defaultValue(e.flipY,!1);if(kn(this.request),!Ln||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return Xn({resource:this,flipY:r,preferImageBitmap:t});var a,i,s,o=this.fetchBlob();return R.defined(o)?Zn.supportsImageBitmapOptions().then(function(e){return a=e&&t,o}).then(function(e){if(R.defined(e)){if(s=e,a)return Zn.createImageBitmapFromBlob(e,{flipY:r,premultiplyAlpha:!1});e=window.URL.createObjectURL(e);return Xn({resource:i=new Zn({url:e}),flipY:r,preferImageBitmap:!1})}}).then(function(e){if(R.defined(e))return e.blob=s,a||window.URL.revokeObjectURL(i.url),e}).otherwise(function(e){return R.defined(i)&&window.URL.revokeObjectURL(i.url),e.blob=s,R.when.reject(e)}):void 0},Zn.fetchImage=function(e){return new Zn(e).fetchImage({flipY:e.flipY,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})},Zn.prototype.fetchText=function(){return this.fetch({responseType:"text"})},Zn.fetchText=function(e){return new Zn(e).fetchText()},Zn.prototype.fetchJson=function(){var e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(R.defined(e))return e.then(function(e){if(R.defined(e))return JSON.parse(e)})},Zn.fetchJson=function(e){return new Zn(e).fetchJson()},Zn.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})},Zn.fetchXML=function(e){return new Zn(e).fetchXML()},Zn.prototype.fetchJsonp=function(e){var t;for(e=R.defaultValue(e,"callback"),kn(this.request);t="loadJsonp"+Math.random().toString().substring(2,8),R.defined(window[t]););return function n(r,a,i){var e={};e[a]=i;r.setQueryParameters(e);var s=r.request;s.url=r.url;s.requestFunction=function(){var t=R.when.defer();return window[i]=function(e){t.resolve(e);try{delete window[i]}catch(e){window[i]=void 0}},Zn._Implementations.loadAndExecuteScript(r.url,i,t),t.promise};var e=qn.request(s);if(!R.defined(e))return;return e.otherwise(function(t){return s.state!==yn.FAILED?R.when.reject(t):r.retryOnError(t).then(function(e){return e?(s.state=yn.UNISSUED,s.deferred=void 0,n(r,a,i)):R.when.reject(t)})})}(this,e,t)},Zn.fetchJsonp=function(e){return new Zn(e).fetchJsonp(e.callbackParameterName)},Zn.prototype._makeRequest=function(o){var u=this;kn(u.request);var l=u.request;l.url=u.url,l.requestFunction=function(){var e=o.responseType,t=ln(o.headers,u.headers),n=o.overrideMimeType,r=o.method,a=o.data,i=R.when.defer(),s=Zn._Implementations.loadWithXhr(u.url,e,r,a,t,i,n);return R.defined(s)&&R.defined(s.abort)&&(l.cancelFunction=function(){s.abort()}),i.promise};var e=qn.request(l);if(R.defined(e))return e.then(function(e){return l.cancelFunction=void 0,e}).otherwise(function(t){return l.cancelFunction=void 0,l.state!==yn.FAILED?R.when.reject(t):u.retryOnError(t).then(function(e){return e?(l.state=yn.UNISSUED,l.deferred=void 0,u.fetch(o)):R.when.reject(t)})})};var Hn=/^data:(.*?)(;base64)?,(.*)$/;function Jn(e,t){t=decodeURIComponent(t);return e?atob(t):t}function Gn(e,t){for(var n=Jn(e,t),t=new ArrayBuffer(n.length),r=new Uint8Array(t),a=0;a<n.length;a++)r[a]=n.charCodeAt(a);return t}function Qn(e,t){switch(t){case"text":return e.toString("utf8");case"json":return JSON.parse(e.toString("utf8"));default:return new Uint8Array(e).buffer}}Zn.prototype.fetch=function(e){return(e=jn(e,{})).method="GET",this._makeRequest(e)},Zn.fetch=function(e){return new Zn(e).fetch({responseType:e.responseType,overrideMimeType:e.overrideMimeType})},Zn.prototype.delete=function(e){return(e=jn(e,{})).method="DELETE",this._makeRequest(e)},Zn.delete=function(e){return new Zn(e).delete({responseType:e.responseType,overrideMimeType:e.overrideMimeType,data:e.data})},Zn.prototype.head=function(e){return(e=jn(e,{})).method="HEAD",this._makeRequest(e)},Zn.head=function(e){return new Zn(e).head({responseType:e.responseType,overrideMimeType:e.overrideMimeType})},Zn.prototype.options=function(e){return(e=jn(e,{})).method="OPTIONS",this._makeRequest(e)},Zn.options=function(e){return new Zn(e).options({responseType:e.responseType,overrideMimeType:e.overrideMimeType})},Zn.prototype.post=function(e,t){return o.Check.defined("data",e),(t=jn(t,{})).method="POST",t.data=e,this._makeRequest(t)},Zn.post=function(e){return new Zn(e).post(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})},Zn.prototype.put=function(e,t){return o.Check.defined("data",e),(t=jn(t,{})).method="PUT",t.data=e,this._makeRequest(t)},Zn.put=function(e){return new Zn(e).put(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})},Zn.prototype.patch=function(e,t){return o.Check.defined("data",e),(t=jn(t,{})).method="PATCH",t.data=e,this._makeRequest(t)},Zn.patch=function(e){return new Zn(e).patch(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})},(Zn._Implementations={}).createImage=function(i,s,o,u,l){var c=i.url;Zn.supportsImageBitmapOptions().then(function(e){if(!e||!l)return r=c,e=s,t=o,(n=new Image).onload=function(){t.resolve(n)},n.onerror=function(e){t.reject(e)},e&&(Nn.contains(r)?n.crossOrigin="use-credentials":n.crossOrigin=""),void(n.src=r);var t,n,r=R.when.defer(),a=Zn._Implementations.loadWithXhr(c,"blob","GET",void 0,void 0,r,void 0,void 0,void 0);return R.defined(a)&&R.defined(a.abort)&&(i.cancelFunction=function(){a.abort()}),r.promise.then(function(e){return R.defined(e)?Zn.createImageBitmapFromBlob(e,{flipY:u,premultiplyAlpha:!1}):void o.reject(new L.RuntimeError("Successfully retrieved "+c+" but it contained no content."))}).then(o.resolve)}).otherwise(o.reject)},Zn.createImageBitmapFromBlob=function(e,t){return o.Check.defined("options",t),o.Check.typeOf.bool("options.flipY",t.flipY),o.Check.typeOf.bool("options.premultiplyAlpha",t.premultiplyAlpha),createImageBitmap(e,{imageOrientation:t.flipY?"flipY":"none",premultiplyAlpha:t.premultiplyAlpha?"premultiply":"none"})};var Kn="undefined"==typeof XMLHttpRequest;function $n(e){var t,n;e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT),this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._downloadPromise=void 0,this._dataError=void 0,this._addNewLeapSeconds=R.defaultValue(e.addNewLeapSeconds,!0),R.defined(e.data)?tr(this,e.data):R.defined(e.url)?(t=Zn.createIfNeeded(e.url),(n=this)._downloadPromise=t.fetchJson().then(function(e){tr(n,e)}).otherwise(function(){n._dataError="An error occurred while retrieving the EOP data from the URL "+t.url+"."})):tr(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}function er(e,t){return Kt.compare(e.julianDate,t)}function tr(e,t){if(R.defined(t.columnNames))if(R.defined(t.samples)){var n=t.columnNames.indexOf("modifiedJulianDateUtc"),r=t.columnNames.indexOf("xPoleWanderRadians"),a=t.columnNames.indexOf("yPoleWanderRadians"),i=t.columnNames.indexOf("ut1MinusUtcSeconds"),s=t.columnNames.indexOf("xCelestialPoleOffsetRadians"),o=t.columnNames.indexOf("yCelestialPoleOffsetRadians"),u=t.columnNames.indexOf("taiMinusUtcSeconds");if(n<0||r<0||a<0||i<0||s<0||o<0||u<0)e._dataError="Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns";else{var l,c=e._samples=t.samples,d=e._dates=[];e._dateColumn=n,e._xPoleWanderRadiansColumn=r,e._yPoleWanderRadiansColumn=a,e._ut1MinusUtcSecondsColumn=i,e._xCelestialPoleOffsetRadiansColumn=s,e._yCelestialPoleOffsetRadiansColumn=o,e._taiMinusUtcSecondsColumn=u,e._columnCount=t.columnNames.length,e._lastIndex=void 0;for(var f=e._addNewLeapSeconds,h=0,p=c.length;h<p;h+=e._columnCount){var m,y=c[h+n],w=c[h+u],C=new Kt(y+Pt.MODIFIED_JULIAN_DATE_DIFFERENCE,w,Dt.TAI);d.push(C),f&&(w===l||!R.defined(l)||(y=At(m=Kt.leapSeconds,C,er))<0&&(C=new It(C,w),m.splice(~y,0,C)),l=w)}}}else e._dataError="Error in loaded EOP data: The samples property is required.";else e._dataError="Error in loaded EOP data: The columnNames property is required."}function nr(e,t,n,r,a){r*=n;a.xPoleWander=t[r+e._xPoleWanderRadiansColumn],a.yPoleWander=t[r+e._yPoleWanderRadiansColumn],a.xPoleOffset=t[r+e._xCelestialPoleOffsetRadiansColumn],a.yPoleOffset=t[r+e._yCelestialPoleOffsetRadiansColumn],a.ut1MinusUtc=t[r+e._ut1MinusUtcSecondsColumn]}function rr(e,t,n){return t+e*(n-t)}function ar(e,t,n,r,a,i,s){var o=e._columnCount;if(i>t.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;var u=t[a],l=t[i];if(u.equals(l)||r.equals(u))return nr(e,n,a,o,s),s;if(r.equals(l))return nr(e,n,i,o,s),s;var c=Kt.secondsDifference(r,u)/Kt.secondsDifference(l,u),d=a*o,t=i*o,u=n[d+e._ut1MinusUtcSecondsColumn],a=n[t+e._ut1MinusUtcSecondsColumn],i=a-u;return!(.5<i||i<-.5)||(o=n[d+e._taiMinusUtcSecondsColumn])!==(i=n[t+e._taiMinusUtcSecondsColumn])&&(l.equals(r)?u=a:a-=i-o),s.xPoleWander=rr(c,n[d+e._xPoleWanderRadiansColumn],n[t+e._xPoleWanderRadiansColumn]),s.yPoleWander=rr(c,n[d+e._yPoleWanderRadiansColumn],n[t+e._yPoleWanderRadiansColumn]),s.xPoleOffset=rr(c,n[d+e._xCelestialPoleOffsetRadiansColumn],n[t+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=rr(c,n[d+e._yCelestialPoleOffsetRadiansColumn],n[t+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=rr(c,u,a),s}function ir(e,t,n){this.heading=R.defaultValue(e,0),this.pitch=R.defaultValue(t,0),this.roll=R.defaultValue(n,0)}Zn._Implementations.loadWithXhr=function(e,a,i,t,n,s,r){var o=Hn.exec(e);if(null===o){if(Kn)return u=e,l=a,c=i,d=n,f=s,h=require("url").parse(u),u="https:"===h.protocol?require("https"):require("http"),p=require("zlib"),d={protocol:h.protocol,hostname:h.hostname,port:h.port,path:h.path,query:h.query,method:c,headers:d},void u.request(d).on("response",function(t){var n;t.statusCode<200||300<=t.statusCode?f.reject(new vn(t.statusCode,t,t.headers)):(n=[],t.on("data",function(e){n.push(e)}),t.on("end",function(){var e=Buffer.concat(n);"gzip"===t.headers["content-encoding"]?p.gunzip(e,function(e,t){e?f.reject(new L.RuntimeError("Error decompressing response.")):f.resolve(Qn(t,l))}):f.resolve(Qn(e,l))}))}).on("error",function(e){f.reject(new vn)}).end();var u,l,c,d,f,h,p,m=new XMLHttpRequest;if(Nn.contains(e)&&(m.withCredentials=!0),m.open(i,e,!0),R.defined(r)&&R.defined(m.overrideMimeType)&&m.overrideMimeType(r),R.defined(n))for(var y in n)n.hasOwnProperty(y)&&m.setRequestHeader(y,n[y]);R.defined(a)&&(m.responseType=a);var w=!1;return"string"==typeof e&&(w=0===e.indexOf("file://")||"undefined"!=typeof window&&"file://"===window.location.origin),m.onload=function(){if(!(m.status<200||300<=m.status)||w&&0===m.status){var e=m.response,t=m.responseType;if("HEAD"===i||"OPTIONS"===i){var n=m.getAllResponseHeaders().trim().split(/[\r\n]+/),r={};return n.forEach(function(e){var t=e.split(": "),e=t.shift();r[e]=t.join(": ")}),void s.resolve(r)}if(204===m.status)s.resolve();else if(!R.defined(e)||R.defined(a)&&t!==a)if("json"===a&&"string"==typeof e)try{s.resolve(JSON.parse(e))}catch(e){s.reject(e)}else(""===t||"document"===t)&&R.defined(m.responseXML)&&m.responseXML.hasChildNodes()?s.resolve(m.responseXML):""!==t&&"text"!==t||!R.defined(m.responseText)?s.reject(new L.RuntimeError("Invalid XMLHttpRequest response type.")):s.resolve(m.responseText);else s.resolve(e)}else s.reject(new vn(m.status,m.response,m.getAllResponseHeaders()))},m.onerror=function(e){s.reject(new vn)},m.send(t),m}s.resolve(function(e,t){t=R.defaultValue(t,"");var n=e[1],r=!!e[2],a=e[3];switch(t){case"":case"text":return Jn(r,a);case"arraybuffer":return Gn(r,a);case"blob":var i=Gn(r,a);return new Blob([i],{type:n});case"document":return(new DOMParser).parseFromString(Jn(r,a),n);case"json":return JSON.parse(Jn(r,a))}}(o,a))},Zn._Implementations.loadAndExecuteScript=function(e,t,n){return function(e){var t=R.when.defer(),n=document.createElement("script");n.async=!0,n.src=e;var r=document.getElementsByTagName("head")[0];return n.onload=function(){n.onload=void 0,r.removeChild(n),t.resolve()},n.onerror=function(e){t.reject(e)},r.appendChild(n),t.promise}(e).otherwise(n.reject)},(Zn._DefaultImplementations={}).createImage=Zn._Implementations.createImage,Zn._DefaultImplementations.loadWithXhr=Zn._Implementations.loadWithXhr,Zn._DefaultImplementations.loadAndExecuteScript=Zn._Implementations.loadAndExecuteScript,Zn.DEFAULT=Object.freeze(new Zn({url:"undefined"==typeof document?"":document.location.href.split("?")[0]})),$n.NONE=Object.freeze({getPromiseToLoad:function(){return R.when.resolve()},compute:function(e,t){return R.defined(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new Rt(0,0,0,0,0),t}}),$n.prototype.getPromiseToLoad=function(){return R.when(this._downloadPromise)},$n.prototype.compute=function(e,t){if(R.defined(this._samples)){if(R.defined(t)||(t=new Rt(0,0,0,0,0)),0===this._samples.length)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;var n=this._dates,r=this._lastIndex,a=0,i=0;if(R.defined(r)){var s=n[r],o=n[r+1],u=Kt.lessThanOrEquals(s,e),l=!R.defined(o),s=l||Kt.greaterThanOrEquals(o,e);if(u&&s)return a=r,!l&&o.equals(e)&&++a,i=a+1,ar(this,n,this._samples,e,a,i,t),t}o=At(n,e,Kt.compare,this._dateColumn);return 0<=o?(o<n.length-1&&n[o+1].equals(e)&&++o,i=a=o):(a=(i=~o)-1)<0&&(a=0),this._lastIndex=a,ar(this,n,this._samples,e,a,i,t),t}if(R.defined(this._dataError))throw new L.RuntimeError(this._dataError)},ir.fromQuaternion=function(e,t){R.defined(t)||(t=new ir);var n=2*(e.w*e.y-e.z*e.x),r=1-2*(e.x*e.x+e.y*e.y),a=2*(e.w*e.x+e.y*e.z),i=1-2*(e.y*e.y+e.z*e.z),e=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(e,i),t.roll=Math.atan2(a,r),t.pitch=-F.CesiumMath.asinClamped(n),t},ir.fromDegrees=function(e,t,n,r){return(r=!R.defined(r)?new ir:r).heading=e*F.CesiumMath.RADIANS_PER_DEGREE,r.pitch=t*F.CesiumMath.RADIANS_PER_DEGREE,r.roll=n*F.CesiumMath.RADIANS_PER_DEGREE,r},ir.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new ir(e.heading,e.pitch,e.roll)},ir.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll},ir.equalsEpsilon=function(e,t,n,r){return e===t||R.defined(e)&&R.defined(t)&&F.CesiumMath.equalsEpsilon(e.heading,t.heading,n,r)&&F.CesiumMath.equalsEpsilon(e.pitch,t.pitch,n,r)&&F.CesiumMath.equalsEpsilon(e.roll,t.roll,n,r)},ir.prototype.clone=function(e){return ir.clone(this,e)},ir.prototype.equals=function(e){return ir.equals(this,e)},ir.prototype.equalsEpsilon=function(e,t,n){return ir.equalsEpsilon(this,e,t,n)},ir.prototype.toString=function(){return"("+this.heading+", "+this.pitch+", "+this.roll+")"};var sr,or,ur,lr=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function cr(e){return"undefined"==typeof document?e:((sr=!R.defined(sr)?document.createElement("a"):sr).href=e,sr.href=sr.href,sr.href)}function dr(){if(R.defined(or))return or;var e="undefined"!=typeof CESIUM_BASE_URL?CESIUM_BASE_URL:"object"==typeof define&&R.defined(define.amd)&&!define.amd.toUrlUndefined&&R.defined(require.toUrl)?cn("..",pr("Core/buildModuleUrl.js")):function(){for(var e=document.getElementsByTagName("script"),t=0,n=e.length;t<n;++t){var r=e[t].getAttribute("src"),r=lr.exec(r);if(null!==r)return r[1]}}();return(or=new Zn({url:cr(e)})).appendForwardSlash(),or}function fr(e){return cr(require.toUrl("../"+e))}function hr(e){return dr().getDerivedResource({url:e}).url}function pr(e){return(ur=!R.defined(ur)?"object"==typeof define&&R.defined(define.amd)&&!define.amd.toUrlUndefined&&R.defined(require.toUrl)?fr:hr:ur)(e)}function mr(e,t,n){this.x=e,this.y=t,this.s=n}function yr(e){e=R.defaultValue(e,R.defaultValue.EMPTY_OBJECT),this._xysFileUrlTemplate=Zn.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=R.defaultValue(e.interpolationOrder,9),this._sampleZeroJulianEphemerisDate=R.defaultValue(e.sampleZeroJulianEphemerisDate,2442396.5),this._sampleZeroDateTT=new Kt(this._sampleZeroJulianEphemerisDate,0,Dt.TAI),this._stepSizeDays=R.defaultValue(e.stepSizeDays,1),this._samplesPerXysFile=R.defaultValue(e.samplesPerXysFile,1e3),this._totalSamples=R.defaultValue(e.totalSamples,27426),this._samples=new Array(3*this._totalSamples),this._chunkDownloadsInProgress=[];for(var t=this._interpolationOrder,n=this._denominators=new Array(t+1),r=this._xTable=new Array(t+1),a=Math.pow(this._stepSizeDays,t),i=0;i<=t;++i){n[i]=a,r[i]=i*this._stepSizeDays;for(var s=0;s<=t;++s)s!==i&&(n[i]*=i-s);n[i]=1/n[i]}this._work=new Array(t+1),this._coef=new Array(t+1)}pr._cesiumScriptRegex=lr,pr._buildModuleUrlFromBaseUrl=hr,pr._clearBaseResource=function(){or=void 0},pr.setBaseUrl=function(e){or=Zn.DEFAULT.getDerivedResource({url:e})},pr.getCesiumBaseUrl=dr;var wr=new Kt(0,0,Dt.TAI);function Cr(e,t,n){var r=wr;return r.dayNumber=t,r.secondsOfDay=n,Kt.daysDifference(r,e._sampleZeroDateTT)}function vr(s,o){if(s._chunkDownloadsInProgress[o])return s._chunkDownloadsInProgress[o];var u=R.when.defer();s._chunkDownloadsInProgress[o]=u;var e=s._xysFileUrlTemplate,e=R.defined(e)?e.getDerivedResource({templateValues:{0:o}}):new Zn({url:pr("Assets/IAU2006_XYS/IAU2006_XYS_"+o+".json")});return R.when(e.fetchJson(),function(e){s._chunkDownloadsInProgress[o]=!1;for(var t=s._samples,n=e.samples,r=o*s._samplesPerXysFile*3,a=0,i=n.length;a<i;++a)t[r+a]=n[a];u.resolve()}),u.promise}yr.prototype.preload=function(e,t,n,r){t=Cr(this,e,t),r=Cr(this,n,r),t=t/this._stepSizeDays-this._interpolationOrder/2|0;t<0&&(t=0);r=r/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;r>=this._totalSamples&&(r=this._totalSamples-1);for(var t=t/this._samplesPerXysFile|0,a=r/this._samplesPerXysFile|0,i=[],s=t;s<=a;++s)i.push(vr(this,s));return R.when.all(i)},yr.prototype.computeXysRadians=function(e,t,n){var r=Cr(this,e,t);if(!(r<0)){e=r/this._stepSizeDays|0;if(!(e>=this._totalSamples)){var a=this._interpolationOrder,i=e-(a/2|0),t=(i=i<0?0:i)+a;t>=this._totalSamples&&(i=(t=this._totalSamples-1)-a)<0&&(i=0);var e=!1,s=this._samples;if(R.defined(s[3*i])||(vr(this,i/this._samplesPerXysFile|0),e=!0),R.defined(s[3*t])||(vr(this,t/this._samplesPerXysFile|0),e=!0),!e){R.defined(n)?(n.x=0,n.y=0,n.s=0):n=new mr(0,0,0);for(var o,u=r-i*this._stepSizeDays,l=this._work,c=this._denominators,d=this._coef,f=this._xTable,h=0;h<=a;++h)l[h]=u-f[h];for(h=0;h<=a;++h){for(d[h]=1,o=0;o<=a;++o)o!==h&&(d[h]*=l[o]);d[h]*=c[h];var p=3*(i+h);n.x+=d[h]*s[p++],n.y+=d[h]*s[p++],n.s+=d[h]*s[p]}return n}}}};var gr={},xr={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},Er={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},Or={},_r={east:new A.Cartesian3,north:new A.Cartesian3,up:new A.Cartesian3,west:new A.Cartesian3,south:new A.Cartesian3,down:new A.Cartesian3},Sr=new A.Cartesian3,br=new A.Cartesian3,Mr=new A.Cartesian3;gr.localFrameToFixedFrameGenerator=function(a,i){if(!xr.hasOwnProperty(a)||!xr[a].hasOwnProperty(i))throw new o.DeveloperError("firstAxis and secondAxis must be east, north, up, west, south or down.");var e,s=xr[a][i],t=a+i;return R.defined(Or[t])?e=Or[t]:(e=function(e,t,n){var r;return R.defined(n)||(n=new j),A.Cartesian3.equalsEpsilon(e,A.Cartesian3.ZERO,F.CesiumMath.EPSILON14)?(A.Cartesian3.unpack(Er[a],0,Sr),A.Cartesian3.unpack(Er[i],0,br),A.Cartesian3.unpack(Er[s],0,Mr)):F.CesiumMath.equalsEpsilon(e.x,0,F.CesiumMath.EPSILON14)&&F.CesiumMath.equalsEpsilon(e.y,0,F.CesiumMath.EPSILON14)?(r=F.CesiumMath.sign(e.z),A.Cartesian3.unpack(Er[a],0,Sr),"east"!==a&&"west"!==a&&A.Cartesian3.multiplyByScalar(Sr,r,Sr),A.Cartesian3.unpack(Er[i],0,br),"east"!==i&&"west"!==i&&A.Cartesian3.multiplyByScalar(br,r,br),A.Cartesian3.unpack(Er[s],0,Mr),"east"!==s&&"west"!==s&&A.Cartesian3.multiplyByScalar(Mr,r,Mr)):((t=R.defaultValue(t,A.Ellipsoid.WGS84)).geodeticSurfaceNormal(e,_r.up),r=_r.up,(t=_r.east).x=-e.y,t.y=e.x,t.z=0,A.Cartesian3.normalize(t,_r.east),A.Cartesian3.cross(r,t,_r.north),A.Cartesian3.multiplyByScalar(_r.up,-1,_r.down),A.Cartesian3.multiplyByScalar(_r.east,-1,_r.west),A.Cartesian3.multiplyByScalar(_r.north,-1,_r.south),Sr=_r[a],br=_r[i],Mr=_r[s]),n[0]=Sr.x,n[1]=Sr.y,n[2]=Sr.z,n[3]=0,n[4]=br.x,n[5]=br.y,n[6]=br.z,n[7]=0,n[8]=Mr.x,n[9]=Mr.y,n[10]=Mr.z,n[11]=0,n[12]=e.x,n[13]=e.y,n[14]=e.z,n[15]=1,n},Or[t]=e),e},gr.eastNorthUpToFixedFrame=gr.localFrameToFixedFrameGenerator("east","north"),gr.northEastDownToFixedFrame=gr.localFrameToFixedFrameGenerator("north","east"),gr.northUpEastToFixedFrame=gr.localFrameToFixedFrameGenerator("north","up"),gr.northWestUpToFixedFrame=gr.localFrameToFixedFrameGenerator("north","west");var Ar=new $e,Rr=new A.Cartesian3(1,1,1),Tr=new j;gr.headingPitchRollToFixedFrame=function(e,t,n,r,a){r=R.defaultValue(r,gr.eastNorthUpToFixedFrame);t=$e.fromHeadingPitchRoll(t,Ar),t=j.fromTranslationQuaternionRotationScale(A.Cartesian3.ZERO,t,Rr,Tr);return a=r(e,n,a),j.multiply(a,t,a)};var qr=new j,zr=new B;gr.headingPitchRollQuaternion=function(e,t,n,r,a){r=gr.headingPitchRollToFixedFrame(e,t,n,r,qr),r=j.getMatrix3(r,zr);return $e.fromRotationMatrix(r,a)};var Ir=new A.Cartesian3(1,1,1),Pr=new A.Cartesian3,Dr=new j,Ur=new j,Nr=new B,Vr=new $e;gr.fixedFrameToHeadingPitchRoll=function(e,t,n,r){t=R.defaultValue(t,A.Ellipsoid.WGS84),n=R.defaultValue(n,gr.eastNorthUpToFixedFrame),R.defined(r)||(r=new ir);var a=j.getTranslation(e,Pr);if(A.Cartesian3.equals(a,A.Cartesian3.ZERO))return r.heading=0,r.pitch=0,r.roll=0,r;t=j.inverseTransformation(n(a,t,Dr),Dr),e=j.setScale(e,Ir,Ur),e=j.setTranslation(e,A.Cartesian3.ZERO,e),t=j.multiply(t,e,t),t=$e.fromRotationMatrix(j.getMatrix3(t,Nr),Vr),t=$e.normalize(t,t);return ir.fromQuaternion(t,r)};var Fr=F.CesiumMath.TWO_PI/86400,Lr=new Kt;gr.computeTemeToPseudoFixedMatrix=function(e,t){var n=(Lr=Kt.addSeconds(e,-Kt.computeTaiMinusUtc(e),Lr)).dayNumber,r=Lr.secondsOfDay,e=n-2451545,e=43200<=r?(.5+e)/Pt.DAYS_PER_JULIAN_CENTURY:(e-.5)/Pt.DAYS_PER_JULIAN_CENTURY,n=(24110.54841+e*(8640184.812866+e*(.093104+-62e-7*e)))*Fr%F.CesiumMath.TWO_PI+(72921158553e-15+11772758384668e-32*(n-2451545.5))*((r+.5*Pt.SECONDS_PER_DAY)%Pt.SECONDS_PER_DAY),r=Math.cos(n),n=Math.sin(n);return R.defined(t)?(t[0]=r,t[1]=-n,t[2]=0,t[3]=n,t[4]=r,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new B(r,n,0,-n,r,0,0,0,1)},gr.iau2006XysData=new yr,gr.earthOrientationParameters=$n.NONE;var Br=32.184;gr.preloadIcrfFixed=function(e){var t=e.start.dayNumber,n=e.start.secondsOfDay+Br,r=e.stop.dayNumber,e=e.stop.secondsOfDay+Br,r=gr.iau2006XysData.preload(t,n,r,e),e=gr.earthOrientationParameters.getPromiseToLoad();return R.when.all([r,e])},gr.computeIcrfToFixedMatrix=function(e,t){R.defined(t)||(t=new B);e=gr.computeFixedToIcrfMatrix(e,t);if(R.defined(e))return B.transpose(e,t)};var Wr=new mr(0,0,0),jr=new Rt(0,0,0,0,0),kr=new B,Yr=new B;gr.computeFixedToIcrfMatrix=function(e,t){R.defined(t)||(t=new B);var n=gr.earthOrientationParameters.compute(e,jr);if(R.defined(n)){var r=e.dayNumber,a=e.secondsOfDay+Br,i=gr.iau2006XysData.computeXysRadians(r,a,Wr);if(R.defined(i)){var s=i.x+n.xPoleOffset,o=i.y+n.yPoleOffset,u=1/(1+Math.sqrt(1-s*s-o*o)),l=kr;l[0]=1-u*s*s,l[3]=-u*s*o,l[6]=s,l[1]=-u*s*o,l[4]=1-u*o*o,l[7]=o,l[2]=-s,l[5]=-o,l[8]=1-u*(s*s+o*o);s=B.fromRotationZ(-i.s,Yr),o=B.multiply(l,s,kr),i=e.dayNumber-2451545,l=(e.secondsOfDay-Kt.computeTaiMinusUtc(e)+n.ut1MinusUtc)/Pt.SECONDS_PER_DAY,s=(s=.779057273264+l+.00273781191135448*(i+l))%1*F.CesiumMath.TWO_PI,e=B.fromRotationZ(s,Yr),i=B.multiply(o,e,kr),l=Math.cos(n.xPoleWander),s=Math.cos(n.yPoleWander),o=Math.sin(n.xPoleWander),e=Math.sin(n.yPoleWander),n=r-2451545+a/Pt.SECONDS_PER_DAY,r=-47e-6*(n/=36525)*F.CesiumMath.RADIANS_PER_DEGREE/3600,a=Math.cos(r),n=Math.sin(r),r=Yr;return r[0]=l*a,r[1]=l*n,r[2]=o,r[3]=-s*n+e*o*a,r[4]=s*a+e*o*n,r[5]=-e*l,r[6]=-e*n-s*o*a,r[7]=e*a-s*o*n,r[8]=s*l,B.multiply(i,r,t)}}};var Zr=new W;gr.pointToWindowCoordinates=function(e,t,n,r){return(r=gr.pointToGLWindowCoordinates(e,t,n,r)).y=2*t[5]-r.y,r},gr.pointToGLWindowCoordinates=function(e,t,n,r){R.defined(r)||(r=new A.Cartesian2);var a=Zr;return j.multiplyByVector(e,W.fromElements(n.x,n.y,n.z,1,a),a),W.multiplyByScalar(a,1/a.w,a),j.multiplyByVector(t,a,a),A.Cartesian2.fromCartesian4(a,r)};var Xr=new A.Cartesian3,Hr=new A.Cartesian3,Jr=new A.Cartesian3;gr.rotationMatrixFromPositionVelocity=function(e,t,n,r){n=R.defaultValue(n,A.Ellipsoid.WGS84).geodeticSurfaceNormal(e,Xr),e=A.Cartesian3.cross(t,n,Hr);A.Cartesian3.equalsEpsilon(e,A.Cartesian3.ZERO,F.CesiumMath.EPSILON6)&&(e=A.Cartesian3.clone(A.Cartesian3.UNIT_X,e));n=A.Cartesian3.cross(e,t,Jr);return A.Cartesian3.normalize(n,n),A.Cartesian3.cross(t,n,e),A.Cartesian3.negate(e,e),A.Cartesian3.normalize(e,e),(r=!R.defined(r)?new B:r)[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=e.x,r[4]=e.y,r[5]=e.z,r[6]=n.x,r[7]=n.y,r[8]=n.z,r};var Gr=new j(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),Qr=new A.Cartographic,Kr=new A.Cartesian3,$r=new A.Cartesian3,ea=new B,ta=new j,na=new j;gr.basisTo2D=function(e,t,n){var r=j.getTranslation(t,$r),a=e.ellipsoid,i=a.cartesianToCartographic(r,Qr),i=e.project(i,Kr);A.Cartesian3.fromElements(i.z,i.x,i.y,i);a=gr.eastNorthUpToFixedFrame(r,a,ta),a=j.inverseTransformation(a,na),t=j.getMatrix3(t,ea),t=j.multiplyByMatrix3(a,t,n);return j.multiply(Gr,t,n),j.setTranslation(n,i,n),n},gr.wgs84To2DModelMatrix=function(e,t,n){var r=e.ellipsoid,a=gr.eastNorthUpToFixedFrame(t,r,ta),a=j.inverseTransformation(a,na),t=r.cartesianToCartographic(t,Qr),t=e.project(t,Kr);A.Cartesian3.fromElements(t.z,t.x,t.y,t);t=j.fromTranslation(t,ta);return j.multiply(Gr,a,n),j.multiply(t,n,n),n},e.BoundingSphere=T,e.Cartesian4=W,e.FeatureDetection=Ke,e.GeographicProjection=t,e.Intersect=a,e.Interval=i,e.Matrix3=B,e.Matrix4=j,e.Quaternion=$e,e.Resource=Zn,e.Transforms=gr,e.buildModuleUrl=pr}); diff --git a/public/lib/Cesium/Workers/VertexFormat-63b3c6da.js b/public/lib/Cesium/Workers/VertexFormat-63b3c6da.js new file mode 100644 index 0000000..c4a7924 --- /dev/null +++ b/public/lib/Cesium/Workers/VertexFormat-63b3c6da.js @@ -0,0 +1 @@ +define(["exports","./when-ca391574","./Check-64f87f7d"],function(e,o,t){"use strict";function a(e){e=o.defaultValue(e,o.defaultValue.EMPTY_OBJECT),this.position=o.defaultValue(e.position,!1),this.normal=o.defaultValue(e.normal,!1),this.st=o.defaultValue(e.st,!1),this.bitangent=o.defaultValue(e.bitangent,!1),this.tangent=o.defaultValue(e.tangent,!1),this.color=o.defaultValue(e.color,!1)}a.POSITION_ONLY=Object.freeze(new a({position:!0})),a.POSITION_AND_NORMAL=Object.freeze(new a({position:!0,normal:!0})),a.POSITION_NORMAL_AND_ST=Object.freeze(new a({position:!0,normal:!0,st:!0})),a.POSITION_AND_ST=Object.freeze(new a({position:!0,st:!0})),a.POSITION_AND_COLOR=Object.freeze(new a({position:!0,color:!0})),a.ALL=Object.freeze(new a({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0})),a.DEFAULT=a.POSITION_NORMAL_AND_ST,a.packedLength=6,a.pack=function(e,t,n){return n=o.defaultValue(n,0),t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t},a.unpack=function(e,t,n){return t=o.defaultValue(t,0),(n=!o.defined(n)?new a:n).position=1===e[t++],n.normal=1===e[t++],n.st=1===e[t++],n.tangent=1===e[t++],n.bitangent=1===e[t++],n.color=1===e[t],n},a.clone=function(e,t){if(o.defined(e))return(t=!o.defined(t)?new a:t).position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t},e.VertexFormat=a}); diff --git a/public/lib/Cesium/Workers/WallGeometryLibrary-3a48b1a1.js b/public/lib/Cesium/Workers/WallGeometryLibrary-3a48b1a1.js new file mode 100644 index 0000000..fe5e097 --- /dev/null +++ b/public/lib/Cesium/Workers/WallGeometryLibrary-3a48b1a1.js @@ -0,0 +1 @@ +define(["exports","./arrayRemoveDuplicates-fc9e255d","./Cartesian2-5b63e672","./when-ca391574","./Math-b53708b3","./PolylinePipeline-00f5e064"],function(e,f,A,C,w,P){"use strict";var i={};var b=new A.Cartographic,M=new A.Cartographic;function E(e,i,t,r){var a=(i=f.arrayRemoveDuplicates(i,A.Cartesian3.equalsEpsilon)).length;if(!(a<2)){var n=C.defined(r),o=C.defined(t),l=new Array(a),s=new Array(a),h=new Array(a),g=i[0];l[0]=g;var p=e.cartesianToCartographic(g,b);o&&(p.height=t[0]),s[0]=p.height,h[0]=n?r[0]:0;for(var u,c,d=s[0]===h[0],v=1,y=1;y<a;++y){var m=i[y],P=e.cartesianToCartographic(m,M);o&&(P.height=t[y]),d=d&&0===P.height,u=p,c=P,w.CesiumMath.equalsEpsilon(u.latitude,c.latitude,w.CesiumMath.EPSILON10)&&w.CesiumMath.equalsEpsilon(u.longitude,c.longitude,w.CesiumMath.EPSILON10)?p.height<P.height&&(s[v-1]=P.height):(l[v]=m,s[v]=P.height,h[v]=n?r[y]:0,d=d&&s[v]===h[v],A.Cartographic.clone(P,p),++v)}if(!(d||v<2))return l.length=v,s.length=v,h.length=v,{positions:l,topHeights:s,bottomHeights:h}}}var F=new Array(2),H=new Array(2),L={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};i.computePositions=function(e,i,t,r,a,n){var o=E(e,i,t,r);if(C.defined(o)){i=o.positions,t=o.topHeights,r=o.bottomHeights;var l=i.length,o=l-2,s=w.CesiumMath.chordLength(a,e.maximumRadius),h=L;if(h.minDistance=s,h.ellipsoid=e,n){for(var g=0,p=0;p<l-1;p++)g+=P.PolylinePipeline.numberOfPoints(i[p],i[p+1],s)+1;var u=new Float64Array(3*g),c=new Float64Array(3*g),d=F,v=H;h.positions=d,h.height=v;var y=0;for(p=0;p<l-1;p++){d[0]=i[p],d[1]=i[p+1],v[0]=t[p],v[1]=t[p+1];var m=P.PolylinePipeline.generateArc(h);u.set(m,y),v[0]=r[p],v[1]=r[p+1],c.set(P.PolylinePipeline.generateArc(h),y),y+=m.length}}else h.positions=i,h.height=t,u=new Float64Array(P.PolylinePipeline.generateArc(h)),h.height=r,c=new Float64Array(P.PolylinePipeline.generateArc(h));return{bottomPositions:c,topPositions:u,numCorners:o}}},e.WallGeometryLibrary=i}); diff --git a/public/lib/Cesium/Workers/WebGLConstants-95ceb4e9.js b/public/lib/Cesium/Workers/WebGLConstants-95ceb4e9.js new file mode 100644 index 0000000..bf77972 --- /dev/null +++ b/public/lib/Cesium/Workers/WebGLConstants-95ceb4e9.js @@ -0,0 +1 @@ +define(["exports"],function(E){"use strict";var _=Object.freeze({DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047});E.WebGLConstants=_}); diff --git a/public/lib/Cesium/Workers/WebMercatorProjection-e0329e39.js b/public/lib/Cesium/Workers/WebMercatorProjection-e0329e39.js new file mode 100644 index 0000000..0c3bdbd --- /dev/null +++ b/public/lib/Cesium/Workers/WebMercatorProjection-e0329e39.js @@ -0,0 +1 @@ +define(["exports","./Cartesian2-5b63e672","./when-ca391574","./Check-64f87f7d","./Math-b53708b3"],function(e,a,r,t,i){"use strict";function n(e){this._ellipsoid=r.defaultValue(e,a.Ellipsoid.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(n.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),n.mercatorAngleToGeodeticLatitude=function(e){return i.CesiumMath.PI_OVER_TWO-2*Math.atan(Math.exp(-e))},n.geodeticLatitudeToMercatorAngle=function(e){n.MaximumLatitude<e?e=n.MaximumLatitude:e<-n.MaximumLatitude&&(e=-n.MaximumLatitude);e=Math.sin(e);return.5*Math.log((1+e)/(1-e))},n.MaximumLatitude=n.mercatorAngleToGeodeticLatitude(Math.PI),n.prototype.project=function(e,t){var i=this._semimajorAxis,o=e.longitude*i,i=n.geodeticLatitudeToMercatorAngle(e.latitude)*i,e=e.height;return r.defined(t)?(t.x=o,t.y=i,t.z=e,t):new a.Cartesian3(o,i,e)},n.prototype.unproject=function(e,t){var i=this._oneOverSemimajorAxis,o=e.x*i,i=n.mercatorAngleToGeodeticLatitude(e.y*i),e=e.z;return r.defined(t)?(t.longitude=o,t.latitude=i,t.height=e,t):new a.Cartographic(o,i,e)},e.WebMercatorProjection=n}); diff --git a/public/lib/Cesium/Workers/arrayRemoveDuplicates-fc9e255d.js b/public/lib/Cesium/Workers/arrayRemoveDuplicates-fc9e255d.js new file mode 100644 index 0000000..2d1eadc --- /dev/null +++ b/public/lib/Cesium/Workers/arrayRemoveDuplicates-fc9e255d.js @@ -0,0 +1 @@ +define(["exports","./Check-64f87f7d","./when-ca391574","./Math-b53708b3"],function(e,t,h,r){"use strict";var l=r.CesiumMath.EPSILON10;e.arrayRemoveDuplicates=function(e,t,r){if(h.defined(e)){r=h.defaultValue(r,!1);var n,f,i,a=e.length;if(a<2)return e;for(n=1;n<a&&!t(f=e[n-1],i=e[n],l);++n);if(n===a)return r&&t(e[0],e[e.length-1],l)?e.slice(1):e;for(var u=e.slice(0,n);n<a;++n)t(f,i=e[n],l)||(u.push(i),f=i);return r&&1<u.length&&t(u[0],u[u.length-1],l)&&u.shift(),u}}}); diff --git a/public/lib/Cesium/Workers/cesiumWorkerBootstrapper.js b/public/lib/Cesium/Workers/cesiumWorkerBootstrapper.js new file mode 100644 index 0000000..6458766 --- /dev/null +++ b/public/lib/Cesium/Workers/cesiumWorkerBootstrapper.js @@ -0,0 +1 @@ +function setTimeout(e){e()}var requirejs,require,define;"undefined"==typeof self&&(self={}),self.onmessage=function(e){var t=e.data;require(t.loaderConfig,[t.workerModule],function(e){self.onmessage=e,CESIUM_BASE_URL=t.loaderConfig.baseUrl})},function(global){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.1.20",commentRegExp=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,ap=Array.prototype,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function isFunction(e){return"[object Function]"===ostring.call(e)}function isArray(e){return"[object Array]"===ostring.call(e)}function each(e,t){if(e)for(var i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){if(e)for(var i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));--i);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){for(var i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||"object"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName("script")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split("."),function(e){t=t[e]}),t}function makeError(e,t,i,r){t=new Error(t+"\nhttp://requirejs.org/docs/errors.html#"+e);return t.requireType=e,t.requireModules=r,i&&(t.originalError=i),t}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o=defContextName;return isArray(e)||"string"==typeof e||(n=e,isArray(t)?(e=t,t=i,i=r):e=[]),n&&n.context&&(o=n.context),r=(r=getOwn(contexts,o))||(contexts[o]=req.s.newContext(o)),n&&r.configure(n),r.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require=require||req,req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each(["toUrl","undef","defined","specified"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");return r.type=e.scriptType||"text/javascript",r.charset="utf-8",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return e=req.createNode(n,i,r),n.onNodeCreated&&n.onNodeCreated(e,n,i,r),e.setAttribute("data-requirecontext",t.contextName),e.setAttribute("data-requiremodule",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf("[native code")<0||isOpera?(e.addEventListener("load",t.onScriptLoad,!1),e.addEventListener("error",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent("onreadystatechange",t.onScriptLoad)),e.src=r,currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError("importscripts","importScripts failed for "+i+" at "+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head=head||e.parentNode,dataMain=e.getAttribute("data-main"))return mainScript=dataMain,cfg.baseUrl||(mainScript=(src=mainScript.split("/")).pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,""),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;"string"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?["require"]:["require","exports","module"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e=e||r.getAttribute("data-requiremodule"),n=contexts[r.getAttribute("data-requirecontext")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var t,e,f,c,i,m={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},d={},p={},r={},l=[],h={},n={},g={},x=1,v=1;function b(e,t,i){var r,n,o,a,s,u,c,d,p,f=t&&t.split("/"),l=m.map,h=l&&l["*"];if(e&&(t=(e=e.split("/")).length-1,m.nodeIdCompat&&jsSuffixRegExp.test(e[t])&&(e[t]=e[t].replace(jsSuffixRegExp,"")),function(e){for(var t,i=0;i<e.length;i++)"."===(t=e[i])?(e.splice(i,1),--i):".."===t&&(0===i||1===i&&".."===e[2]||".."===e[i-1]||0<i&&(e.splice(i-1,2),i-=2))}(e="."===e[0].charAt(0)&&f?f.slice(0,f.length-1).concat(e):e),e=e.join("/")),i&&l&&(f||h)){e:for(o=(n=e.split("/")).length;0<o;--o){if(s=n.slice(0,o).join("/"),f)for(a=f.length;0<a;--a)if(r=getOwn(l,f.slice(0,a).join("/")),r=r&&getOwn(r,s)){u=r,c=o;break e}!d&&h&&getOwn(h,s)&&(d=getOwn(h,s),p=o)}!u&&d&&(u=d,c=p),u&&(n.splice(0,c,u),e=n.join("/"))}return getOwn(m.pkgs,e)||e}function q(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute("data-requiremodule")===t&&e.getAttribute("data-requirecontext")===f.contextName)return e.parentNode.removeChild(e),!0})}function E(e){var t=getOwn(m.paths,e);return t&&isArray(t)&&1<t.length&&(t.shift(),f.require.undef(e),f.makeRequire(null,{skipMap:!0})([e]),1)}function w(e){var t,i=e?e.indexOf("!"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function y(e,t,i,r){var n,o,a,s=null,u=t?t.name:null,c=e,d=!0,p="";return e||(d=!1,e="_@r"+(x+=1)),s=(a=w(e))[0],e=a[1],s&&(s=b(s,u,r),o=getOwn(h,s)),e&&(s?p=o&&o.normalize?o.normalize(e,function(e){return b(e,u,r)}):-1===e.indexOf("!")?b(e,u,r):e:(s=(a=w(p=b(e,u,r)))[0],p=a[1],i=!0,n=f.nameToUrl(p))),{prefix:s,name:p,parentMap:t,unnormalized:!!(i=!s||o||i?"":"_unnormalized"+(v+=1)),url:n,originalName:c,isDefine:d,id:(s?s+"!"+p:p)+i}}function S(e){var t=e.id;return getOwn(d,t)||(d[t]=new f.Module(e))}function k(e,t,i){var r=e.id,n=getOwn(d,r);!hasProp(h,r)||n&&!n.defineEmitComplete?(n=S(e)).error&&"error"===t?i(n.error):n.on(t,i):"defined"===t&&i(h[r])}function M(t,e){var i=t.requireModules,r=!1;e?e(t):(each(i,function(e){e=getOwn(d,e);e&&(e.error=t,e.events.error&&(r=!0,e.emit("error",t)))}),r||req.onError(t))}function O(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];"string"==typeof t&&(f.defQueueMap[t]=!0),l.push(e)}),globalDefQueue=[])}function j(e){delete d[e],delete p[e]}function P(){var r,e=1e3*m.waitSeconds,n=e&&f.startTime+e<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!t){if(t=!0,eachProp(p,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)E(i)?s=r=!0:(o.push(i),q(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError("timeout","Load timeout for modules: "+o,null,o)).contextName=f.contextName,M(e),0;u&&each(a,function(e){!function r(n,o,a){var e=n.map.id;n.error?n.emit("error",n.error):(o[e]=!0,each(n.depMaps,function(e,t){var i=e.id,e=getOwn(d,i);!e||n.depMatched[t]||a[i]||(getOwn(o,i)?(n.defineDep(t,h[i]),n.check()):r(e,o,a))}),a[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||i||(i=setTimeout(function(){i=0,P()},50)),t=!1}}function a(e){hasProp(h,e[0])||S(y(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){e=e.currentTarget||e.srcElement;return o(e,f.onScriptLoad,"load","onreadystatechange"),o(e,f.onScriptError,"error"),{node:e,id:e&&e.getAttribute("data-requiremodule")}}function R(){var e;for(O();l.length;){if(null===(e=l.shift())[0])return M(makeError("mismatch","Mismatched anonymous define() module: "+e[e.length-1])),0;a(e)}f.defQueueMap={}}return c={require:function(e){return e.require||(e.require=f.makeRequire(e.map))},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?h[e.map.id]=e.exports:e.exports=h[e.map.id]={}},module:function(e){return e.module||(e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(m.config,e.map.id)||{}},exports:e.exports||(e.exports={})})}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(m.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on("error",i):this.events.error&&(i=bind(this,function(e){this.emit("error",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,--this.depCount,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,f.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();f.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,f.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit("error",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=f.execCb(i,o,r,n)}catch(e){t=e}else n=f.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?"define":"require",M(this.error=t)}else n=o;this.exports=n,this.map.isDefine&&!this.ignore&&(h[i]=n,req.onResourceLoad&&req.onResourceLoad(f,this.map,this.depMaps)),j(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else hasProp(f.defQueueMap,i)||this.fetch()}},callPlugin:function(){var s=this.map,u=s.id,e=y(s.prefix);this.depMaps.push(e),k(e,"defined",bind(this,function(e){var o,t,i=getOwn(g,this.map.id),r=this.map.name,n=this.map.parentMap?this.map.parentMap.name:null,a=f.makeRequire(s.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(r=e.normalize(r,function(e){return b(e,n,!0)})||""),k(t=y(s.prefix+"!"+r,this.map.parentMap),"defined",bind(this,function(e){this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((r=getOwn(d,t.id))&&(this.depMaps.push(t),this.events.error&&r.on("error",bind(this,function(e){this.emit("error",e)})),r.enable()))):i?(this.map.url=f.nameToUrl(i),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[u],eachProp(d,function(e){0===e.map.id.indexOf(u+"_unnormalized")&&j(e.map.id)}),M(e)}),o.fromText=bind(this,function(e,t){var i=s.name,r=y(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),S(r),hasProp(m.config,u)&&(m.config[i]=m.config[u]);try{req.exec(e)}catch(e){return M(makeError("fromtexteval","fromText eval for "+u+" failed: "+e,e,[u]))}n&&(useInteractive=!0),this.depMaps.push(r),f.completeLoad(i),a([i],o)}),void e.load(s.name,a,o,m))})),f.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(p[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r;if("string"==typeof e){if(e=y(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,r=getOwn(c,e.id))return void(this.depExports[t]=r(this));this.depCount+=1,k(e,"defined",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?k(e,"error",bind(this,this.errback)):this.events.error&&k(e,"error",bind(this,function(e){this.emit("error",e)}))}i=e.id,r=d[i],hasProp(c,i)||!r||r.enabled||f.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(d,e.id);t&&!t.enabled&&f.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){(this.events[e]||(this.events[e]=[])).push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),"error"===e&&delete this.events[e]}},(f={config:m,contextName:u,registry:d,defined:h,urlFetched:n,defQueue:l,defQueueMap:{},Module:e,makeModuleMap:y,nextTick:req.nextTick,onError:M,configure:function(e){e.baseUrl&&"/"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+="/");var i=m.shim,r={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){r[t]?(m[t]||(m[t]={}),mixin(m[t],e,!0,!0)):m[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(g[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){!(e=isArray(e)?{deps:e}:e).exports&&!e.init||e.exportsFn||(e.exportsFn=f.makeShimExports(e)),i[t]=e}),m.shim=i),e.packages&&each(e.packages,function(e){var t=(e="string"==typeof e?{name:e}:e).name;e.location&&(m.paths[t]=e.location),m.pkgs[t]=e.name+"/"+(e.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}),eachProp(d,function(e,t){e.inited||e.map.unnormalized||(e.map=y(t,null,!0))}),(e.deps||e.callback)&&f.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return(e=t.init?t.init.apply(global,arguments):e)||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),"string"==typeof e?isFunction(t)?M(makeError("requireargs","Invalid require call"),i):o&&hasProp(c,e)?c[e](d[o.id]):req.get?req.get(f,e,o,s):(r=y(e,o,!1,!0).id,hasProp(h,r)?h[r]:M(makeError("notloaded",'Module name "'+r+'" has not been loaded yet for context: '+u+(o?"":". Use require([])")))):(R(),f.nextTick(function(){R(),(n=S(y(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),P()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf("."),r=e.split("/")[0];return-1!==i&&(!("."===r||".."===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),f.nameToUrl(b(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(h,y(e,o,!1,!0).id)},specified:function(e){return e=y(e,o,!1,!0).id,hasProp(h,e)||hasProp(d,e)}}),o||(s.undef=function(i){O();var e=y(i,o,!0),t=getOwn(d,i);t.undefed=!0,q(i),delete h[i],delete n[e.url],delete r[i],eachReverse(l,function(e,t){e[0]===i&&l.splice(t,1)}),delete f.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),j(i))}),s},enable:function(e){getOwn(d,e.id)&&S(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(m.shim,e)||{},o=n.exports;for(O();l.length;){if(null===(i=l.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(f.defQueueMap={},r=getOwn(d,e),!t&&!hasProp(h,e)&&r&&!r.inited){if(!(!m.enforceDefine||o&&getGlobal(o)))return E(e)?void 0:M(makeError("nodefine","No define call for "+e,null,[e]));a([e,n.deps||[],n.exportsFn])}P()},nameToUrl:function(e,t,i){var r,n,o,a,s,u=getOwn(m.pkgs,e);if(u=getOwn(g,e=u?u:e))return f.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||"");else{for(r=m.paths,o=(n=e.split("/")).length;0<o;--o)if(s=getOwn(r,n.slice(0,o).join("/"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join("/"),a=("/"===(a+=t||(/^data\:|\?/.test(a)||i?"":".js")).charAt(0)||a.match(/^[\w\+\.\-]+:/)?"":m.baseUrl)+a}return m.urlArgs?a+((-1===a.indexOf("?")?"?":"&")+m.urlArgs):a},load:function(e,t){req.load(f,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){"load"!==e.type&&!readyRegExp.test((e.currentTarget||e.srcElement).readyState)||(interactiveScript=null,e=s(e),f.completeLoad(e.id))},onScriptError:function(e){var t=s(e);if(!E(t.id))return M(makeError("scripterror","Script error for: "+t.id,e,[t.id]))}}).require=f.makeRequire(),f}function getInteractiveScript(){return interactiveScript&&"interactive"===interactiveScript.readyState||eachReverse(scripts(),function(e){if("interactive"===e.readyState)return interactiveScript=e}),interactiveScript}}(this); \ No newline at end of file diff --git a/public/lib/Cesium/Workers/combineGeometry.js b/public/lib/Cesium/Workers/combineGeometry.js new file mode 100644 index 0000000..31594db --- /dev/null +++ b/public/lib/Cesium/Workers/combineGeometry.js @@ -0,0 +1 @@ +define(["./PrimitivePipeline-c896ba3a","./createTaskProcessorWorker","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryPipeline-a588d10d","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./IndexDatatype-4e56bcfa","./IntersectionTests-f5111308","./Plane-99b2becd","./WebMercatorProjection-e0329e39"],function(i,e,t,r,n,a,o,c,b,s,m,P,f,p,u,d,y,C,l){"use strict";return e(function(e,t){return e=i.PrimitivePipeline.unpackCombineGeometryParameters(e),e=i.PrimitivePipeline.combineGeometry(e),i.PrimitivePipeline.packCombineGeometryResults(e,t)})}); diff --git a/public/lib/Cesium/Workers/createBoxGeometry.js b/public/lib/Cesium/Workers/createBoxGeometry.js new file mode 100644 index 0000000..d088638 --- /dev/null +++ b/public/lib/Cesium/Workers/createBoxGeometry.js @@ -0,0 +1 @@ +define(["./BoxGeometry-1ec9fd84","./when-ca391574","./GeometryOffsetAttribute-b94750ca","./Check-64f87f7d","./Transforms-5295b227","./Cartesian2-5b63e672","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./VertexFormat-63b3c6da"],function(r,o,e,t,n,a,b,f,c,m,i,u,s){"use strict";return function(e,t){return o.defined(t)&&(e=r.BoxGeometry.unpack(e,t)),r.BoxGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createBoxOutlineGeometry.js b/public/lib/Cesium/Workers/createBoxOutlineGeometry.js new file mode 100644 index 0000000..f05abdc --- /dev/null +++ b/public/lib/Cesium/Workers/createBoxOutlineGeometry.js @@ -0,0 +1 @@ +define(["./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9"],function(u,m,o,e,s,f,c,p,t,a,n){"use strict";var b=new o.Cartesian3;function r(e){var t=(e=f.defaultValue(e,f.defaultValue.EMPTY_OBJECT)).minimum,a=e.maximum;this._min=o.Cartesian3.clone(t),this._max=o.Cartesian3.clone(a),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}r.fromDimensions=function(e){var t=(e=f.defaultValue(e,f.defaultValue.EMPTY_OBJECT)).dimensions,t=o.Cartesian3.multiplyByScalar(t,.5,new o.Cartesian3);return new r({minimum:o.Cartesian3.negate(t,new o.Cartesian3),maximum:t,offsetAttribute:e.offsetAttribute})},r.fromAxisAlignedBoundingBox=function(e){return new r({minimum:e.minimum,maximum:e.maximum})},r.packedLength=2*o.Cartesian3.packedLength+1,r.pack=function(e,t,a){return a=f.defaultValue(a,0),o.Cartesian3.pack(e._min,t,a),o.Cartesian3.pack(e._max,t,a+o.Cartesian3.packedLength),t[a+2*o.Cartesian3.packedLength]=f.defaultValue(e._offsetAttribute,-1),t};var y=new o.Cartesian3,d=new o.Cartesian3,C={minimum:y,maximum:d,offsetAttribute:void 0};return r.unpack=function(e,t,a){t=f.defaultValue(t,0);var n=o.Cartesian3.unpack(e,t,y),i=o.Cartesian3.unpack(e,t+o.Cartesian3.packedLength,d),t=e[t+2*o.Cartesian3.packedLength];return f.defined(a)?(a._min=o.Cartesian3.clone(n,a._min),a._max=o.Cartesian3.clone(i,a._max),a._offsetAttribute=-1===t?void 0:t,a):(C.offsetAttribute=-1===t?void 0:t,new r(C))},r.createGeometry=function(e){var t=e._min,a=e._max;if(!o.Cartesian3.equals(t,a)){var n=new p.GeometryAttributes,i=new Uint16Array(24),r=new Float64Array(24);r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=a.x,r[4]=t.y,r[5]=t.z,r[6]=a.x,r[7]=a.y,r[8]=t.z,r[9]=t.x,r[10]=a.y,r[11]=t.z,r[12]=t.x,r[13]=t.y,r[14]=a.z,r[15]=a.x,r[16]=t.y,r[17]=a.z,r[18]=a.x,r[19]=a.y,r[20]=a.z,r[21]=t.x,r[22]=a.y,r[23]=a.z,n.position=new c.GeometryAttribute({componentDatatype:s.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:r}),i[0]=4,i[1]=5,i[2]=5,i[3]=6,i[4]=6,i[5]=7,i[6]=7,i[7]=4,i[8]=0,i[9]=1,i[10]=1,i[11]=2,i[12]=2,i[13]=3,i[14]=3,i[15]=0,i[16]=0,i[17]=4,i[18]=1,i[19]=5,i[20]=2,i[21]=6,i[22]=3,i[23]=7;a=o.Cartesian3.subtract(a,t,b),t=.5*o.Cartesian3.magnitude(a);return f.defined(e._offsetAttribute)&&(a=r.length,r=new Uint8Array(a/3),a=e._offsetAttribute===u.GeometryOffsetAttribute.NONE?0:1,u.arrayFill(r,a),n.applyOffset=new c.GeometryAttribute({componentDatatype:s.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:r})),new c.Geometry({attributes:n,indices:i,primitiveType:c.PrimitiveType.LINES,boundingSphere:new m.BoundingSphere(o.Cartesian3.ZERO,t),offsetAttribute:e._offsetAttribute})}},function(e,t){return f.defined(t)&&(e=r.unpack(e,t)),r.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCircleGeometry.js b/public/lib/Cesium/Workers/createCircleGeometry.js new file mode 100644 index 0000000..0658661 --- /dev/null +++ b/public/lib/Cesium/Workers/createCircleGeometry.js @@ -0,0 +1 @@ +define(["./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./EllipseGeometry-be7f8268","./VertexFormat-63b3c6da","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./IndexDatatype-4e56bcfa","./IntersectionTests-f5111308","./Plane-99b2becd"],function(r,e,o,n,a,t,i,s,l,d,m,c,u,p,y,_,h,G,x,f,g){"use strict";function b(e){var t=(e=o.defaultValue(e,o.defaultValue.EMPTY_OBJECT)).radius,e={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new n.EllipseGeometry(e),this._workerName="createCircleGeometry"}b.packedLength=n.EllipseGeometry.packedLength,b.pack=function(e,t,i){return n.EllipseGeometry.pack(e._ellipseGeometry,t,i)};var E=new n.EllipseGeometry({center:new r.Cartesian3,semiMajorAxis:1,semiMinorAxis:1}),v={center:new r.Cartesian3,radius:void 0,ellipsoid:r.Ellipsoid.clone(r.Ellipsoid.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new a.VertexFormat,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};return b.unpack=function(e,t,i){t=n.EllipseGeometry.unpack(e,t,E);return v.center=r.Cartesian3.clone(t._center,v.center),v.ellipsoid=r.Ellipsoid.clone(t._ellipsoid,v.ellipsoid),v.height=t._height,v.extrudedHeight=t._extrudedHeight,v.granularity=t._granularity,v.vertexFormat=a.VertexFormat.clone(t._vertexFormat,v.vertexFormat),v.stRotation=t._stRotation,v.shadowVolume=t._shadowVolume,o.defined(i)?(v.semiMajorAxis=t._semiMajorAxis,v.semiMinorAxis=t._semiMinorAxis,i._ellipseGeometry=new n.EllipseGeometry(v),i):(v.radius=t._semiMajorAxis,new b(v))},b.createGeometry=function(e){return n.EllipseGeometry.createGeometry(e._ellipseGeometry)},b.createShadowVolume=function(e,t,i){var r=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,t=t(r,o),i=i(r,o);return new b({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:r,extrudedHeight:t,height:i,vertexFormat:a.VertexFormat.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(b.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}}),function(e,t){return(e=o.defined(t)?b.unpack(e,t):e)._ellipseGeometry._center=r.Cartesian3.clone(e._ellipseGeometry._center),e._ellipseGeometry._ellipsoid=r.Ellipsoid.clone(e._ellipseGeometry._ellipsoid),b.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCircleOutlineGeometry.js b/public/lib/Cesium/Workers/createCircleOutlineGeometry.js new file mode 100644 index 0000000..c629cfa --- /dev/null +++ b/public/lib/Cesium/Workers/createCircleOutlineGeometry.js @@ -0,0 +1 @@ +define(["./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./EllipseOutlineGeometry-1eb32452","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa"],function(r,e,l,n,i,t,s,o,a,u,c,d,m,p){"use strict";function y(e){var i=(e=l.defaultValue(e,l.defaultValue.EMPTY_OBJECT)).radius,e={center:e.center,semiMajorAxis:i,semiMinorAxis:i,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new n.EllipseOutlineGeometry(e),this._workerName="createCircleOutlineGeometry"}y.packedLength=n.EllipseOutlineGeometry.packedLength,y.pack=function(e,i,t){return n.EllipseOutlineGeometry.pack(e._ellipseGeometry,i,t)};var f=new n.EllipseOutlineGeometry({center:new r.Cartesian3,semiMajorAxis:1,semiMinorAxis:1}),G={center:new r.Cartesian3,radius:void 0,ellipsoid:r.Ellipsoid.clone(r.Ellipsoid.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};return y.unpack=function(e,i,t){i=n.EllipseOutlineGeometry.unpack(e,i,f);return G.center=r.Cartesian3.clone(i._center,G.center),G.ellipsoid=r.Ellipsoid.clone(i._ellipsoid,G.ellipsoid),G.height=i._height,G.extrudedHeight=i._extrudedHeight,G.granularity=i._granularity,G.numberOfVerticalLines=i._numberOfVerticalLines,l.defined(t)?(G.semiMajorAxis=i._semiMajorAxis,G.semiMinorAxis=i._semiMinorAxis,t._ellipseGeometry=new n.EllipseOutlineGeometry(G),t):(G.radius=i._semiMajorAxis,new y(G))},y.createGeometry=function(e){return n.EllipseOutlineGeometry.createGeometry(e._ellipseGeometry)},function(e,i){return(e=l.defined(i)?y.unpack(e,i):e)._ellipseGeometry._center=r.Cartesian3.clone(e._ellipseGeometry._center),e._ellipseGeometry._ellipsoid=r.Ellipsoid.clone(e._ellipseGeometry._ellipsoid),y.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCoplanarPolygonGeometry.js b/public/lib/Cesium/Workers/createCoplanarPolygonGeometry.js new file mode 100644 index 0000000..353c274 --- /dev/null +++ b/public/lib/Cesium/Workers/createCoplanarPolygonGeometry.js @@ -0,0 +1 @@ +define(["./arrayRemoveDuplicates-fc9e255d","./BoundingRectangle-755c152f","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./CoplanarPolygonGeometryLibrary-f6a57602","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonGeometryLibrary-b3087bff","./PolygonPipeline-55053b0a","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./OrientedBoundingBox-e61df120","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./ArcType-2b58731c","./EllipsoidRhumbLine-21029cef"],function(h,e,L,E,t,T,f,l,D,_,C,v,k,V,x,R,s,n,a,r,o,i,p,y,c,m,u){"use strict";var I=new E.Cartesian3,P=new e.BoundingRectangle,M=new E.Cartesian2,H=new E.Cartesian2,w=new E.Cartesian3,A=new E.Cartesian3,F=new E.Cartesian3,G=new E.Cartesian3,B=new E.Cartesian3,O=new E.Cartesian3,z=new L.Quaternion,S=new L.Matrix3,N=new L.Matrix3,Q=new E.Cartesian3;function d(e){var t=(e=l.defaultValue(e,l.defaultValue.EMPTY_OBJECT)).polygonHierarchy,n=l.defaultValue(e.vertexFormat,s.VertexFormat.DEFAULT);this._vertexFormat=s.VertexFormat.clone(n),this._polygonHierarchy=t,this._stRotation=l.defaultValue(e.stRotation,0),this._ellipsoid=E.Ellipsoid.clone(l.defaultValue(e.ellipsoid,E.Ellipsoid.WGS84)),this._workerName="createCoplanarPolygonGeometry",this.packedLength=x.PolygonGeometryLibrary.computeHierarchyPackedLength(t)+s.VertexFormat.packedLength+E.Ellipsoid.packedLength+2}d.fromPositions=function(e){return new d({polygonHierarchy:{positions:(e=l.defaultValue(e,l.defaultValue.EMPTY_OBJECT)).positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid})},d.pack=function(e,t,n){return n=l.defaultValue(n,0),n=x.PolygonGeometryLibrary.packPolygonHierarchy(e._polygonHierarchy,t,n),E.Ellipsoid.pack(e._ellipsoid,t,n),n+=E.Ellipsoid.packedLength,s.VertexFormat.pack(e._vertexFormat,t,n),n+=s.VertexFormat.packedLength,t[n++]=e._stRotation,t[n]=e.packedLength,t};var g=E.Ellipsoid.clone(E.Ellipsoid.UNIT_SPHERE),b=new s.VertexFormat,j={polygonHierarchy:{}};return d.unpack=function(e,t,n){t=l.defaultValue(t,0);var a=x.PolygonGeometryLibrary.unpackPolygonHierarchy(e,t);t=a.startingIndex,delete a.startingIndex;var r=E.Ellipsoid.unpack(e,t,g);t+=E.Ellipsoid.packedLength;var o=s.VertexFormat.unpack(e,t,b);t+=s.VertexFormat.packedLength;var i=e[t++],t=e[t];return(n=!l.defined(n)?new d(j):n)._polygonHierarchy=a,n._ellipsoid=E.Ellipsoid.clone(r,n._ellipsoid),n._vertexFormat=s.VertexFormat.clone(o,n._vertexFormat),n._stRotation=i,n.packedLength=t,n},d.createGeometry=function(e){var t=e._vertexFormat,n=e._polygonHierarchy,a=e._stRotation,r=n.positions;if(!((r=h.arrayRemoveDuplicates(r,E.Cartesian3.equalsEpsilon,!0)).length<3)){var o=w,i=A,l=F,s=B,p=O;if(f.CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments(r,G,s,p)){o=E.Cartesian3.cross(s,p,o);o=E.Cartesian3.normalize(o,o),E.Cartesian3.equalsEpsilon(G,E.Cartesian3.ZERO,V.CesiumMath.EPSILON6)||(y=e._ellipsoid.geodeticSurfaceNormal(G,Q),E.Cartesian3.dot(o,y)<0&&(o=E.Cartesian3.negate(o,o),s=E.Cartesian3.negate(s,s)));var y=f.CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction(G,s,p),c=f.CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction(G,s,p);t.tangent&&(i=E.Cartesian3.clone(s,i)),t.bitangent&&(l=E.Cartesian3.clone(p,l));var n=x.PolygonGeometryLibrary.polygonsFromHierarchy(n,y,!1),y=n.hierarchy,m=n.polygons;if(0!==y.length){for(var r=y[0].outerRing,n=L.BoundingSphere.fromPoints(r),u=x.PolygonGeometryLibrary.computeBoundingRectangle(o,c,r,a,P),d=[],g=0;g<m.length;g++){var b=new C.GeometryInstance({geometry:function(e,t,n,a,r,o,i,l){var s=e.positions,p=R.PolygonPipeline.triangulate(e.positions2D,e.holes);p.length<3&&(p=[0,1,2]),(e=k.IndexDatatype.createTypedArray(s.length,p.length)).set(p);var y=S;0!==a?(p=L.Quaternion.fromAxisAngle(o,a,z),y=L.Matrix3.fromQuaternion(p,y),(t.tangent||t.bitangent)&&(p=L.Quaternion.fromAxisAngle(o,-a,z),u=L.Matrix3.fromQuaternion(p,N),i=E.Cartesian3.normalize(L.Matrix3.multiplyByVector(u,i,i),i),t.bitangent&&(l=E.Cartesian3.normalize(E.Cartesian3.cross(o,i,l),l)))):y=L.Matrix3.clone(L.Matrix3.IDENTITY,y);var c=H;t.st&&(c.x=n.x,c.y=n.y);for(var m=s.length,u=3*m,d=new Float64Array(u),g=t.normal?new Float32Array(u):void 0,b=t.tangent?new Float32Array(u):void 0,h=t.bitangent?new Float32Array(u):void 0,f=t.st?new Float32Array(2*m):void 0,C=0,v=0,x=0,P=0,w=0,A=0;A<m;A++){var F,G=s[A];d[C++]=G.x,d[C++]=G.y,d[C++]=G.z,t.st&&(F=r(L.Matrix3.multiplyByVector(y,G,I),M),E.Cartesian2.subtract(F,c,F),G=V.CesiumMath.clamp(F.x/n.width,0,1),F=V.CesiumMath.clamp(F.y/n.height,0,1),f[w++]=G,f[w++]=F),t.normal&&(g[v++]=o.x,g[v++]=o.y,g[v++]=o.z),t.tangent&&(b[P++]=i.x,b[P++]=i.y,b[P++]=i.z),t.bitangent&&(h[x++]=l.x,h[x++]=l.y,h[x++]=l.z)}return u=new _.GeometryAttributes,t.position&&(u.position=new D.GeometryAttribute({componentDatatype:T.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:d})),t.normal&&(u.normal=new D.GeometryAttribute({componentDatatype:T.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:g})),t.tangent&&(u.tangent=new D.GeometryAttribute({componentDatatype:T.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:b})),t.bitangent&&(u.bitangent=new D.GeometryAttribute({componentDatatype:T.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:h})),t.st&&(u.st=new D.GeometryAttribute({componentDatatype:T.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:f})),new D.Geometry({attributes:u,indices:e,primitiveType:D.PrimitiveType.TRIANGLES})}(m[g],t,u,a,c,o,i,l)});d.push(b)}y=v.GeometryPipeline.combineInstances(d)[0];y.attributes.position.values=new Float64Array(y.attributes.position.values),y.indices=k.IndexDatatype.createTypedArray(y.attributes.position.values.length/3,y.indices);r=y.attributes;return t.position||delete r.position,new D.Geometry({attributes:r,indices:y.indices,primitiveType:y.primitiveType,boundingSphere:n})}}}},function(e,t){return l.defined(t)&&(e=d.unpack(e,t)),d.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCoplanarPolygonOutlineGeometry.js b/public/lib/Cesium/Workers/createCoplanarPolygonOutlineGeometry.js new file mode 100644 index 0000000..6fb15b3 --- /dev/null +++ b/public/lib/Cesium/Workers/createCoplanarPolygonOutlineGeometry.js @@ -0,0 +1 @@ +define(["./arrayRemoveDuplicates-fc9e255d","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./CoplanarPolygonGeometryLibrary-f6a57602","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./PolygonGeometryLibrary-b3087bff","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./OrientedBoundingBox-e61df120","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./ArcType-2b58731c","./EllipsoidRhumbLine-21029cef","./PolygonPipeline-55053b0a"],function(a,y,l,e,c,p,o,s,u,d,m,f,b,t,r,n,i,g,h,P,G,v,L,C,T){"use strict";function E(e){e=(e=o.defaultValue(e,o.defaultValue.EMPTY_OBJECT)).polygonHierarchy;this._polygonHierarchy=e,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=b.PolygonGeometryLibrary.computeHierarchyPackedLength(e)+1}E.fromPositions=function(e){return new E({polygonHierarchy:{positions:(e=o.defaultValue(e,o.defaultValue.EMPTY_OBJECT)).positions}})},E.pack=function(e,t,r){return r=o.defaultValue(r,0),t[r=b.PolygonGeometryLibrary.packPolygonHierarchy(e._polygonHierarchy,t,r)]=e.packedLength,t};var k={polygonHierarchy:{}};return E.unpack=function(e,t,r){t=o.defaultValue(t,0);var n=b.PolygonGeometryLibrary.unpackPolygonHierarchy(e,t);t=n.startingIndex,delete n.startingIndex;t=e[t];return(r=!o.defined(r)?new E(k):r)._polygonHierarchy=n,r.packedLength=t,r},E.createGeometry=function(e){var t=e._polygonHierarchy,e=t.positions,e=a.arrayRemoveDuplicates(e,l.Cartesian3.equalsEpsilon,!0);if(!(e.length<3)&&p.CoplanarPolygonGeometryLibrary.validOutline(e)){var r=b.PolygonGeometryLibrary.polygonOutlinesFromHierarchy(t,!1);if(0!==r.length){for(var n=[],o=0;o<r.length;o++){var i=new d.GeometryInstance({geometry:function(e){for(var t=e.length,r=new Float64Array(3*t),n=f.IndexDatatype.createTypedArray(t,2*t),o=0,i=0,a=0;a<t;a++){var y=e[a];r[o++]=y.x,r[o++]=y.y,r[o++]=y.z,n[i++]=a,n[i++]=(a+1)%t}var l=new u.GeometryAttributes({position:new s.GeometryAttribute({componentDatatype:c.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:r})});return new s.Geometry({attributes:l,indices:n,primitiveType:s.PrimitiveType.LINES})}(r[o])});n.push(i)}e=m.GeometryPipeline.combineInstances(n)[0],t=y.BoundingSphere.fromPoints(t.positions);return new s.Geometry({attributes:e.attributes,indices:e.indices,primitiveType:e.primitiveType,boundingSphere:t})}}},function(e,t){return(e=o.defined(t)?E.unpack(e,t):e)._ellipsoid=l.Ellipsoid.clone(e._ellipsoid),E.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCorridorGeometry.js b/public/lib/Cesium/Workers/createCorridorGeometry.js new file mode 100644 index 0000000..5fb66b5 --- /dev/null +++ b/public/lib/Cesium/Workers/createCorridorGeometry.js @@ -0,0 +1 @@ +define(["./GeometryOffsetAttribute-b94750ca","./arrayRemoveDuplicates-fc9e255d","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./PolylineVolumeGeometryLibrary-ec280c2f","./CorridorGeometryLibrary-c6e83d15","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef"],function(E,y,m,rt,t,at,f,it,ot,nt,st,lt,dt,V,F,e,r,a,i,o,n,s,l){"use strict";var ut=new rt.Cartesian3,mt=new rt.Cartesian3,yt=new rt.Cartesian3,ft=new rt.Cartesian3,L=new rt.Cartesian3,pt=new rt.Cartesian3,ct=new rt.Cartesian3,ht=new rt.Cartesian3;function p(t,e){for(var r=0;r<t.length;r++)t[r]=e.scaleToGeodeticSurface(t[r],t[r]);return t}function gt(t,e,r,a,i,o){var n=t.normals,s=t.tangents,l=t.bitangents,t=rt.Cartesian3.normalize(rt.Cartesian3.cross(r,e,ct),ct);o.normal&&it.CorridorGeometryLibrary.addAttribute(n,e,a,i),o.tangent&&it.CorridorGeometryLibrary.addAttribute(s,t,a,i),o.bitangent&&it.CorridorGeometryLibrary.addAttribute(l,r,a,i)}function P(t,e,r){var a,i=t.positions,o=t.corners,n=t.endPositions,s=t.lefts,l=t.normals,d=new st.GeometryAttributes,u=0,m=0,y=0;for(D=0;D<i.length;D+=2)u+=a=i[D].length-3,y+=2*a,m+=i[D+1].length-3;for(u+=3,m+=3,D=0;D<o.length;D++){var f=o[D],p=o[D].leftPositions;ot.defined(p)?u+=a=p.length:m+=a=o[D].rightPositions.length,y+=a}var c,h=ot.defined(n);h&&(u+=c=n[0].length-3,m+=c,y+=6*(c/=3));var g,b,C,v,t=u+m,A=new Float64Array(t),_={normals:e.normal?new Float32Array(t):void 0,tangents:e.tangent?new Float32Array(t):void 0,bitangents:e.bitangent?new Float32Array(t):void 0},w=0,T=t-1,G=ut,E=mt,V=c/2,F=lt.IndexDatatype.createTypedArray(t/3,y),L=0;if(h)for(var P=yt,x=ft,N=n[0],G=rt.Cartesian3.fromArray(l,0,G),E=rt.Cartesian3.fromArray(s,0,E),D=0;D<V;D++)P=rt.Cartesian3.fromArray(N,3*(V-1-D),P),x=rt.Cartesian3.fromArray(N,3*(V+D),x),it.CorridorGeometryLibrary.addAttribute(A,x,w),it.CorridorGeometryLibrary.addAttribute(A,P,void 0,T),gt(_,G,E,w,T,e),v=(b=w/3)+1,C=(g=(T-2)/3)-1,F[L++]=g,F[L++]=b,F[L++]=C,F[L++]=C,F[L++]=b,F[L++]=v,w+=3,T-=3;var M,O,I=0,S=0,R=i[I++],k=i[I++];for(A.set(R,w),A.set(k,T-k.length+1),E=rt.Cartesian3.fromArray(s,S,E),a=k.length-3,D=0;D<a;D+=3)M=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(R,D,ct),ct),O=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(k,a-D,ht),ht),gt(_,G=rt.Cartesian3.normalize(rt.Cartesian3.add(M,O,G),G),E,w,T,e),v=(b=w/3)+1,C=(g=(T-2)/3)-1,F[L++]=g,F[L++]=b,F[L++]=C,F[L++]=C,F[L++]=b,F[L++]=v,w+=3,T-=3;for(M=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(R,a,ct),ct),O=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(k,a,ht),ht),G=rt.Cartesian3.normalize(rt.Cartesian3.add(M,O,G),G),S+=3,D=0;D<o.length;D++){var H,z,U,B=(f=o[D]).leftPositions,Y=f.rightPositions,W=pt,q=yt,J=ft;if(G=rt.Cartesian3.fromArray(l,S,G),ot.defined(B)){for(gt(_,G,E,void 0,T,e),T-=3,z=v,U=C,H=0;H<B.length/3;H++)W=rt.Cartesian3.fromArray(B,3*H,W),F[L++]=z,F[L++]=U-H-1,F[L++]=U-H,it.CorridorGeometryLibrary.addAttribute(A,W,void 0,T),q=rt.Cartesian3.fromArray(A,3*(U-H-1),q),J=rt.Cartesian3.fromArray(A,3*z,J),gt(_,G,E=rt.Cartesian3.normalize(rt.Cartesian3.subtract(q,J,E),E),void 0,T,e),T-=3;W=rt.Cartesian3.fromArray(A,3*z,W),q=rt.Cartesian3.subtract(rt.Cartesian3.fromArray(A,3*U,q),W,q),J=rt.Cartesian3.subtract(rt.Cartesian3.fromArray(A,3*(U-H),J),W,J),gt(_,G,E=rt.Cartesian3.normalize(rt.Cartesian3.add(q,J,E),E),w,void 0,e),w+=3}else{for(gt(_,G,E,w,void 0,e),w+=3,z=C,U=v,H=0;H<Y.length/3;H++)W=rt.Cartesian3.fromArray(Y,3*H,W),F[L++]=z,F[L++]=U+H,F[L++]=U+H+1,it.CorridorGeometryLibrary.addAttribute(A,W,w),q=rt.Cartesian3.fromArray(A,3*z,q),J=rt.Cartesian3.fromArray(A,3*(U+H),J),gt(_,G,E=rt.Cartesian3.normalize(rt.Cartesian3.subtract(q,J,E),E),w,void 0,e),w+=3;W=rt.Cartesian3.fromArray(A,3*z,W),q=rt.Cartesian3.subtract(rt.Cartesian3.fromArray(A,3*(U+H),q),W,q),J=rt.Cartesian3.subtract(rt.Cartesian3.fromArray(A,3*U,J),W,J),gt(_,G,E=rt.Cartesian3.normalize(rt.Cartesian3.negate(rt.Cartesian3.add(J,q,E),E),E),void 0,T,e),T-=3}for(R=i[I++],k=i[I++],R.splice(0,3),k.splice(k.length-3,3),A.set(R,w),A.set(k,T-k.length+1),a=k.length-3,S+=3,E=rt.Cartesian3.fromArray(s,S,E),H=0;H<k.length;H+=3)M=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(R,H,ct),ct),O=r.geodeticSurfaceNormal(rt.Cartesian3.fromArray(k,a-H,ht),ht),gt(_,G=rt.Cartesian3.normalize(rt.Cartesian3.add(M,O,G),G),E,w,T,e),b=(v=w/3)-1,g=(C=(T-2)/3)+1,F[L++]=g,F[L++]=b,F[L++]=C,F[L++]=C,F[L++]=b,F[L++]=v,w+=3,T-=3;w-=3,T+=3}if(gt(_,G=rt.Cartesian3.fromArray(l,l.length-3,G),E,w,T,e),h){w+=3,T-=3,P=yt,x=ft;var j=n[1];for(D=0;D<V;D++)P=rt.Cartesian3.fromArray(j,3*(c-D-1),P),x=rt.Cartesian3.fromArray(j,3*D,x),it.CorridorGeometryLibrary.addAttribute(A,P,void 0,T),it.CorridorGeometryLibrary.addAttribute(A,x,w),gt(_,G,E,w,T,e),b=(v=w/3)-1,g=(C=(T-2)/3)+1,F[L++]=g,F[L++]=b,F[L++]=C,F[L++]=C,F[L++]=b,F[L++]=v,w+=3,T-=3}if(d.position=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:A}),e.st){var K=new Float32Array(t/3*2),Q=0;if(h){u/=3,m/=3;var X,Z=Math.PI/(c+1),$=1/(u-c+1),tt=1/(m-c+1),et=c/2;for(D=1+et;D<c+1;D++)X=dt.CesiumMath.PI_OVER_TWO+Z*D,K[Q++]=tt*(1+Math.cos(X)),K[Q++]=.5*(1+Math.sin(X));for(D=1;D<m-c+1;D++)K[Q++]=D*tt,K[Q++]=0;for(D=c;et<D;D--)X=dt.CesiumMath.PI_OVER_TWO-D*Z,K[Q++]=1-tt*(1+Math.cos(X)),K[Q++]=.5*(1+Math.sin(X));for(D=et;0<D;D--)X=dt.CesiumMath.PI_OVER_TWO-Z*D,K[Q++]=1-$*(1+Math.cos(X)),K[Q++]=.5*(1+Math.sin(X));for(D=u-c;0<D;D--)K[Q++]=D*$,K[Q++]=1;for(D=1;D<1+et;D++)X=dt.CesiumMath.PI_OVER_TWO+Z*D,K[Q++]=$*(1+Math.cos(X)),K[Q++]=.5*(1+Math.sin(X))}else{for($=1/((u/=3)-1),tt=1/((m/=3)-1),D=0;D<m;D++)K[Q++]=D*tt,K[Q++]=0;for(D=u;0<D;D--)K[Q++]=(D-1)*$,K[Q++]=1}d.st=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:K})}return e.normal&&(d.normal=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:_.normals})),e.tangent&&(d.tangent=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:_.tangents})),e.bitangent&&(d.bitangent=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:_.bitangents})),{attributes:d,indices:F}}function x(t,e,r){r[e++]=t[0],r[e++]=t[1],r[e++]=t[2];for(var a=3;a<t.length;a+=3){var i=t[a],o=t[a+1],n=t[a+2];r[e++]=i,r[e++]=o,r[e++]=n,r[e++]=i,r[e++]=o,r[e++]=n}return r[e++]=t[0],r[e++]=t[1],r[e++]=t[2],r}function c(t,e){var r=new F.VertexFormat({position:e.position,normal:e.normal||e.bitangent||t.shadowVolume,tangent:e.tangent,bitangent:e.normal||e.bitangent,st:e.st}),a=t.ellipsoid,i=P(it.CorridorGeometryLibrary.computePositions(t),r,a),o=t.height,n=t.extrudedHeight,s=i.attributes,l=i.indices,d=s.position.values,u=d.length,m=new Float64Array(6*u),r=new Float64Array(u);r.set(d);i=new Float64Array(4*u),i=x(d=V.PolygonPipeline.scaleToGeodeticHeight(d,o,a),0,i);i=x(r=V.PolygonPipeline.scaleToGeodeticHeight(r,n,a),2*u,i),m.set(d),m.set(r,u),m.set(i,2*u),s.position.values=m;var s=function(t,e){if(!(e.normal||e.tangent||e.bitangent||e.st))return t;var r,a=t.position.values;(e.normal||e.bitangent)&&(r=t.normal.values,l=t.bitangent.values);var i=t.position.values.length/18,o=3*i,n=2*i,s=2*o;if(e.normal||e.bitangent||e.tangent){for(var l,d=e.normal?new Float32Array(6*o):void 0,u=e.tangent?new Float32Array(6*o):void 0,m=e.bitangent?new Float32Array(6*o):void 0,y=ut,f=mt,p=yt,c=ft,h=L,g=pt,b=s,C=0;C<o;C+=3){var v=b+s,y=rt.Cartesian3.fromArray(a,C,y),f=rt.Cartesian3.fromArray(a,C+o,f),p=rt.Cartesian3.fromArray(a,(C+3)%o,p);f=rt.Cartesian3.subtract(f,y,f),p=rt.Cartesian3.subtract(p,y,p),c=rt.Cartesian3.normalize(rt.Cartesian3.cross(f,p,c),c),e.normal&&(it.CorridorGeometryLibrary.addAttribute(d,c,v),it.CorridorGeometryLibrary.addAttribute(d,c,v+3),it.CorridorGeometryLibrary.addAttribute(d,c,b),it.CorridorGeometryLibrary.addAttribute(d,c,b+3)),(e.tangent||e.bitangent)&&(g=rt.Cartesian3.fromArray(r,C,g),e.bitangent&&(it.CorridorGeometryLibrary.addAttribute(m,g,v),it.CorridorGeometryLibrary.addAttribute(m,g,v+3),it.CorridorGeometryLibrary.addAttribute(m,g,b),it.CorridorGeometryLibrary.addAttribute(m,g,b+3)),e.tangent&&(h=rt.Cartesian3.normalize(rt.Cartesian3.cross(g,c,h),h),it.CorridorGeometryLibrary.addAttribute(u,h,v),it.CorridorGeometryLibrary.addAttribute(u,h,v+3),it.CorridorGeometryLibrary.addAttribute(u,h,b),it.CorridorGeometryLibrary.addAttribute(u,h,b+3))),b+=6}if(e.normal){for(d.set(r),C=0;C<o;C+=3)d[C+o]=-r[C],d[C+o+1]=-r[C+1],d[C+o+2]=-r[C+2];t.normal.values=d}else t.normal=void 0;e.bitangent?(m.set(l),m.set(l,o),t.bitangent.values=m):t.bitangent=void 0,e.tangent&&(l=t.tangent.values,u.set(l),u.set(l,o),t.tangent.values=u)}if(e.st){var A=t.st.values,_=new Float32Array(6*n);_.set(A),_.set(A,n);for(var w=2*n,T=0;T<2;T++){for(_[w++]=A[0],_[w++]=A[1],C=2;C<n;C+=2){var G=A[C],E=A[C+1];_[w++]=G,_[w++]=E,_[w++]=G,_[w++]=E}_[w++]=A[0],_[w++]=A[1]}t.st.values=_}return t}(s,e),y=u/3;if(t.shadowVolume){for(var f=s.normal.values,u=f.length,i=new Float32Array(6*u),p=0;p<u;p++)f[p]=-f[p];i.set(f,u),i=x(f,4*u,i),s.extrudeDirection=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:i}),e.normal||(s.normal=void 0)}ot.defined(t.offsetAttribute)&&(e=new Uint8Array(6*y),e=t.offsetAttribute===E.GeometryOffsetAttribute.TOP?(e=E.arrayFill(e,1,0,y),E.arrayFill(e,1,2*y,4*y)):(t=t.offsetAttribute===E.GeometryOffsetAttribute.NONE?0:1,E.arrayFill(e,t)),s.applyOffset=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:e}));var c=l.length,h=y+y,g=lt.IndexDatatype.createTypedArray(m.length/3,2*c+3*h);g.set(l);var b,C,v,A,_=c;for(p=0;p<c;p+=3){var w=l[p],T=l[p+1],G=l[p+2];g[_++]=G+y,g[_++]=T+y,g[_++]=w+y}for(p=0;p<h;p+=2)v=(b=p+h)+1,A=(C=b+h)+1,g[_++]=b,g[_++]=C,g[_++]=v,g[_++]=v,g[_++]=C,g[_++]=A;return{attributes:s,indices:g}}var h=new rt.Cartesian3,g=new rt.Cartesian3,b=new rt.Cartographic;function C(t,e,r,a,i,o){var n=rt.Cartesian3.subtract(e,t,h);rt.Cartesian3.normalize(n,n);var s=r.geodeticSurfaceNormal(t,g),l=rt.Cartesian3.cross(n,s,h);rt.Cartesian3.multiplyByScalar(l,a,l);var d=i.latitude,u=i.longitude,e=o.latitude,n=o.longitude;rt.Cartesian3.add(t,l,g),r.cartesianToCartographic(g,b);s=b.latitude,a=b.longitude,d=Math.min(d,s),u=Math.min(u,a),e=Math.max(e,s),n=Math.max(n,a);rt.Cartesian3.subtract(t,l,g),r.cartesianToCartographic(g,b),s=b.latitude,a=b.longitude,d=Math.min(d,s),u=Math.min(u,a),e=Math.max(e,s),n=Math.max(n,a),i.latitude=d,i.longitude=u,o.latitude=e,o.longitude=n}var v=new rt.Cartesian3,A=new rt.Cartesian3,_=new rt.Cartographic,w=new rt.Cartographic;function d(t,e,r,a,i){t=p(t,e);var o=y.arrayRemoveDuplicates(t,rt.Cartesian3.equalsEpsilon),n=o.length;if(n<2||r<=0)return new rt.Rectangle;var s,l,d=.5*r;_.latitude=Number.POSITIVE_INFINITY,_.longitude=Number.POSITIVE_INFINITY,w.latitude=Number.NEGATIVE_INFINITY,w.longitude=Number.NEGATIVE_INFINITY,a===f.CornerType.ROUNDED&&(m=o[0],rt.Cartesian3.subtract(m,o[1],v),rt.Cartesian3.normalize(v,v),rt.Cartesian3.multiplyByScalar(v,d,v),rt.Cartesian3.add(m,v,A),e.cartesianToCartographic(A,b),s=b.latitude,l=b.longitude,_.latitude=Math.min(_.latitude,s),_.longitude=Math.min(_.longitude,l),w.latitude=Math.max(w.latitude,s),w.longitude=Math.max(w.longitude,l));for(var u=0;u<n-1;++u)C(o[u],o[u+1],e,d,_,w);var m=o[n-1];rt.Cartesian3.subtract(m,o[n-2],v),rt.Cartesian3.normalize(v,v),rt.Cartesian3.multiplyByScalar(v,d,v),rt.Cartesian3.add(m,v,A),C(m,A,e,d,_,w),a===f.CornerType.ROUNDED&&(e.cartesianToCartographic(A,b),s=b.latitude,l=b.longitude,_.latitude=Math.min(_.latitude,s),_.longitude=Math.min(_.longitude,l),w.latitude=Math.max(w.latitude,s),w.longitude=Math.max(w.longitude,l));i=ot.defined(i)?i:new rt.Rectangle;return i.north=w.latitude,i.south=_.latitude,i.east=w.longitude,i.west=_.longitude,i}function T(t){var e=(t=ot.defaultValue(t,ot.defaultValue.EMPTY_OBJECT)).positions,r=t.width,a=ot.defaultValue(t.height,0),i=ot.defaultValue(t.extrudedHeight,a);this._positions=e,this._ellipsoid=rt.Ellipsoid.clone(ot.defaultValue(t.ellipsoid,rt.Ellipsoid.WGS84)),this._vertexFormat=F.VertexFormat.clone(ot.defaultValue(t.vertexFormat,F.VertexFormat.DEFAULT)),this._width=r,this._height=Math.max(a,i),this._extrudedHeight=Math.min(a,i),this._cornerType=ot.defaultValue(t.cornerType,f.CornerType.ROUNDED),this._granularity=ot.defaultValue(t.granularity,dt.CesiumMath.RADIANS_PER_DEGREE),this._shadowVolume=ot.defaultValue(t.shadowVolume,!1),this._workerName="createCorridorGeometry",this._offsetAttribute=t.offsetAttribute,this._rectangle=void 0,this.packedLength=1+e.length*rt.Cartesian3.packedLength+rt.Ellipsoid.packedLength+F.VertexFormat.packedLength+7}T.pack=function(t,e,r){r=ot.defaultValue(r,0);var a=t._positions,i=a.length;e[r++]=i;for(var o=0;o<i;++o,r+=rt.Cartesian3.packedLength)rt.Cartesian3.pack(a[o],e,r);return rt.Ellipsoid.pack(t._ellipsoid,e,r),r+=rt.Ellipsoid.packedLength,F.VertexFormat.pack(t._vertexFormat,e,r),r+=F.VertexFormat.packedLength,e[r++]=t._width,e[r++]=t._height,e[r++]=t._extrudedHeight,e[r++]=t._cornerType,e[r++]=t._granularity,e[r++]=t._shadowVolume?1:0,e[r]=ot.defaultValue(t._offsetAttribute,-1),e};var G=rt.Ellipsoid.clone(rt.Ellipsoid.UNIT_SPHERE),N=new F.VertexFormat,D={positions:void 0,ellipsoid:G,vertexFormat:N,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};return T.unpack=function(t,e,r){e=ot.defaultValue(e,0);for(var a=t[e++],i=new Array(a),o=0;o<a;++o,e+=rt.Cartesian3.packedLength)i[o]=rt.Cartesian3.unpack(t,e);var n=rt.Ellipsoid.unpack(t,e,G);e+=rt.Ellipsoid.packedLength;var s=F.VertexFormat.unpack(t,e,N);e+=F.VertexFormat.packedLength;var l=t[e++],d=t[e++],u=t[e++],m=t[e++],y=t[e++],f=1===t[e++],p=t[e];return ot.defined(r)?(r._positions=i,r._ellipsoid=rt.Ellipsoid.clone(n,r._ellipsoid),r._vertexFormat=F.VertexFormat.clone(s,r._vertexFormat),r._width=l,r._height=d,r._extrudedHeight=u,r._cornerType=m,r._granularity=y,r._shadowVolume=f,r._offsetAttribute=-1===p?void 0:p,r):(D.positions=i,D.width=l,D.height=d,D.extrudedHeight=u,D.cornerType=m,D.granularity=y,D.shadowVolume=f,D.offsetAttribute=-1===p?void 0:p,new T(D))},T.computeRectangle=function(t,e){var r=(t=ot.defaultValue(t,ot.defaultValue.EMPTY_OBJECT)).positions,a=t.width;return d(r,ot.defaultValue(t.ellipsoid,rt.Ellipsoid.WGS84),a,ot.defaultValue(t.cornerType,f.CornerType.ROUNDED),e)},T.createGeometry=function(t){var e=t._positions,r=t._width,a=t._ellipsoid,e=p(e,a),i=y.arrayRemoveDuplicates(e,rt.Cartesian3.equalsEpsilon);if(!(i.length<2||r<=0)){var o,n=t._height,s=t._extrudedHeight,l=!dt.CesiumMath.equalsEpsilon(n,s,0,dt.CesiumMath.EPSILON2),e=t._vertexFormat,r={ellipsoid:a,positions:i,width:r,cornerType:t._cornerType,granularity:t._granularity,saveAttributes:!0};l?(r.height=n,r.extrudedHeight=s,r.shadowVolume=t._shadowVolume,r.offsetAttribute=t._offsetAttribute,o=c(r,e)):((o=P(it.CorridorGeometryLibrary.computePositions(r),e,a)).attributes.position.values=V.PolygonPipeline.scaleToGeodeticHeight(o.attributes.position.values,n,a),ot.defined(t._offsetAttribute)&&(d=t._offsetAttribute===E.GeometryOffsetAttribute.NONE?0:1,u=o.attributes.position.values.length,u=new Uint8Array(u/3),E.arrayFill(u,d),o.attributes.applyOffset=new nt.GeometryAttribute({componentDatatype:at.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})));var d=o.attributes,u=m.BoundingSphere.fromVertices(d.position.values,void 0,3);return e.position||(o.attributes.position.values=void 0),new nt.Geometry({attributes:d,indices:o.indices,primitiveType:nt.PrimitiveType.TRIANGLES,boundingSphere:u,offsetAttribute:t._offsetAttribute})}},T.createShadowVolume=function(t,e,r){var a=t._granularity,i=t._ellipsoid,e=e(a,i),r=r(a,i);return new T({positions:t._positions,width:t._width,cornerType:t._cornerType,ellipsoid:i,granularity:a,extrudedHeight:e,height:r,vertexFormat:F.VertexFormat.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(T.prototype,{rectangle:{get:function(){return ot.defined(this._rectangle)||(this._rectangle=d(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}}),function(t,e){return(t=ot.defined(e)?T.unpack(t,e):t)._ellipsoid=rt.Ellipsoid.clone(t._ellipsoid),T.createGeometry(t)}}); diff --git a/public/lib/Cesium/Workers/createCorridorOutlineGeometry.js b/public/lib/Cesium/Workers/createCorridorOutlineGeometry.js new file mode 100644 index 0000000..ec52643 --- /dev/null +++ b/public/lib/Cesium/Workers/createCorridorOutlineGeometry.js @@ -0,0 +1 @@ +define(["./GeometryOffsetAttribute-b94750ca","./arrayRemoveDuplicates-fc9e255d","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./PolylineVolumeGeometryLibrary-ec280c2f","./CorridorGeometryLibrary-c6e83d15","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef"],function(v,u,p,M,e,R,B,U,F,Y,q,W,f,A,t,i,r,o,a,n,s,l){"use strict";var J=new M.Cartesian3,j=new M.Cartesian3,z=new M.Cartesian3;function _(e,t){var i,r=[],o=e.positions,a=e.corners,n=e.endPositions,s=new q.GeometryAttributes,l=0,d=0,u=0;for(L=0;L<o.length;L+=2)l+=i=o[L].length-3,u+=i/3*4,d+=o[L+1].length-3;for(l+=3,d+=3,L=0;L<a.length;L++){var p=a[L],f=a[L].leftPositions;F.defined(f)?l+=i=f.length:d+=i=a[L].rightPositions.length,u+=i/3*2}var h,y=F.defined(n);y&&(l+=h=n[0].length-3,d+=h,u+=4*(h/=3));var c,b,g,m,e=l+d,v=new Float64Array(e),A=0,_=e-1,E=h/2,C=W.IndexDatatype.createTypedArray(e/3,u+4),G=0;if(C[G++]=A/3,C[G++]=(_-2)/3,y){r.push(A/3);for(var T=J,P=j,w=n[0],L=0;L<E;L++)T=M.Cartesian3.fromArray(w,3*(E-1-L),T),P=M.Cartesian3.fromArray(w,3*(E+L),P),U.CorridorGeometryLibrary.addAttribute(v,P,A),U.CorridorGeometryLibrary.addAttribute(v,T,void 0,_),m=(b=A/3)+1,g=(c=(_-2)/3)-1,C[G++]=c,C[G++]=g,C[G++]=b,C[G++]=m,A+=3,_-=3}var D=0,k=o[D++],N=o[D++];for(v.set(k,A),v.set(N,_-N.length+1),i=N.length-3,r.push(A/3,(_-2)/3),L=0;L<i;L+=3)m=(b=A/3)+1,g=(c=(_-2)/3)-1,C[G++]=c,C[G++]=g,C[G++]=b,C[G++]=m,A+=3,_-=3;for(L=0;L<a.length;L++){var O,V,x=(p=a[L]).leftPositions,H=p.rightPositions,I=z;if(F.defined(x)){for(_-=3,V=g,r.push(m),O=0;O<x.length/3;O++)I=M.Cartesian3.fromArray(x,3*O,I),C[G++]=V-O-1,C[G++]=V-O,U.CorridorGeometryLibrary.addAttribute(v,I,void 0,_),_-=3;r.push(V-Math.floor(x.length/6)),t===B.CornerType.BEVELED&&r.push((_-2)/3+1),A+=3}else{for(A+=3,V=m,r.push(g),O=0;O<H.length/3;O++)I=M.Cartesian3.fromArray(H,3*O,I),C[G++]=V+O,C[G++]=V+O+1,U.CorridorGeometryLibrary.addAttribute(v,I,A),A+=3;r.push(V+Math.floor(H.length/6)),t===B.CornerType.BEVELED&&r.push(A/3-1),_-=3}for(k=o[D++],N=o[D++],k.splice(0,3),N.splice(N.length-3,3),v.set(k,A),v.set(N,_-N.length+1),i=N.length-3,O=0;O<N.length;O+=3)b=(m=A/3)-1,c=(g=(_-2)/3)+1,C[G++]=c,C[G++]=g,C[G++]=b,C[G++]=m,A+=3,_-=3;A-=3,_+=3,r.push(A/3,(_-2)/3)}if(y){A+=3,_-=3,T=J,P=j;var S=n[1];for(L=0;L<E;L++)T=M.Cartesian3.fromArray(S,3*(h-L-1),T),P=M.Cartesian3.fromArray(S,3*L,P),U.CorridorGeometryLibrary.addAttribute(v,T,void 0,_),U.CorridorGeometryLibrary.addAttribute(v,P,A),b=(m=A/3)-1,c=(g=(_-2)/3)+1,C[G++]=c,C[G++]=g,C[G++]=b,C[G++]=m,A+=3,_-=3;r.push(A/3)}else r.push(A/3,(_-2)/3);return C[G++]=A/3,C[G++]=(_-2)/3,s.position=new Y.GeometryAttribute({componentDatatype:R.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:v}),{attributes:s,indices:C,wallIndices:r}}function h(e){var t=(e=F.defaultValue(e,F.defaultValue.EMPTY_OBJECT)).positions,i=e.width,r=F.defaultValue(e.height,0),o=F.defaultValue(e.extrudedHeight,r);this._positions=t,this._ellipsoid=M.Ellipsoid.clone(F.defaultValue(e.ellipsoid,M.Ellipsoid.WGS84)),this._width=i,this._height=Math.max(r,o),this._extrudedHeight=Math.min(r,o),this._cornerType=F.defaultValue(e.cornerType,B.CornerType.ROUNDED),this._granularity=F.defaultValue(e.granularity,f.CesiumMath.RADIANS_PER_DEGREE),this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*M.Cartesian3.packedLength+M.Ellipsoid.packedLength+6}h.pack=function(e,t,i){i=F.defaultValue(i,0);var r=e._positions,o=r.length;t[i++]=o;for(var a=0;a<o;++a,i+=M.Cartesian3.packedLength)M.Cartesian3.pack(r[a],t,i);return M.Ellipsoid.pack(e._ellipsoid,t,i),i+=M.Ellipsoid.packedLength,t[i++]=e._width,t[i++]=e._height,t[i++]=e._extrudedHeight,t[i++]=e._cornerType,t[i++]=e._granularity,t[i]=F.defaultValue(e._offsetAttribute,-1),t};var y=M.Ellipsoid.clone(M.Ellipsoid.UNIT_SPHERE),c={positions:void 0,ellipsoid:y,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};return h.unpack=function(e,t,i){t=F.defaultValue(t,0);for(var r=e[t++],o=new Array(r),a=0;a<r;++a,t+=M.Cartesian3.packedLength)o[a]=M.Cartesian3.unpack(e,t);var n=M.Ellipsoid.unpack(e,t,y);t+=M.Ellipsoid.packedLength;var s=e[t++],l=e[t++],d=e[t++],u=e[t++],p=e[t++],f=e[t];return F.defined(i)?(i._positions=o,i._ellipsoid=M.Ellipsoid.clone(n,i._ellipsoid),i._width=s,i._height=l,i._extrudedHeight=d,i._cornerType=u,i._granularity=p,i._offsetAttribute=-1===f?void 0:f,i):(c.positions=o,c.width=s,c.height=l,c.extrudedHeight=d,c.cornerType=u,c.granularity=p,c.offsetAttribute=-1===f?void 0:f,new h(c))},h.createGeometry=function(e){var t=e._positions,i=e._width,r=e._ellipsoid,t=function(e,t){for(var i=0;i<e.length;i++)e[i]=t.scaleToGeodeticSurface(e[i],e[i]);return e}(t,r),o=u.arrayRemoveDuplicates(t,M.Cartesian3.equalsEpsilon);if(!(o.length<2||i<=0)){var a,n=e._height,s=e._extrudedHeight,t=!f.CesiumMath.equalsEpsilon(n,s,0,f.CesiumMath.EPSILON2),i={ellipsoid:r,positions:o,width:i,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1};t?(i.height=n,i.extrudedHeight=s,i.offsetAttribute=e._offsetAttribute,a=function(e){var t=e.ellipsoid,i=(l=_(U.CorridorGeometryLibrary.computePositions(e),e.cornerType)).wallIndices,r=e.height,o=e.extrudedHeight,a=l.attributes,n=l.indices,s=(d=a.position.values).length;(u=new Float64Array(s)).set(d);var l=new Float64Array(2*s),d=A.PolygonPipeline.scaleToGeodeticHeight(d,r,t),u=A.PolygonPipeline.scaleToGeodeticHeight(u,o,t);l.set(d),l.set(u,s),a.position.values=l,s/=3,F.defined(e.offsetAttribute)&&(u=new Uint8Array(2*s),u=e.offsetAttribute===v.GeometryOffsetAttribute.TOP?v.arrayFill(u,1,0,s):(e=e.offsetAttribute===v.GeometryOffsetAttribute.NONE?0:1,v.arrayFill(u,e)),a.applyOffset=new Y.GeometryAttribute({componentDatatype:R.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:u}));var p=n.length,f=W.IndexDatatype.createTypedArray(l.length/3,2*(p+i.length));f.set(n);for(var h,y,c=p,b=0;b<p;b+=2){var g=n[b],m=n[b+1];f[c++]=g+s,f[c++]=m+s}for(b=0;b<i.length;b++)y=(h=i[b])+s,f[c++]=h,f[c++]=y;return{attributes:a,indices:f}}(i)):((a=_(U.CorridorGeometryLibrary.computePositions(i),i.cornerType)).attributes.position.values=A.PolygonPipeline.scaleToGeodeticHeight(a.attributes.position.values,n,r),F.defined(e._offsetAttribute)&&(l=a.attributes.position.values.length,d=new Uint8Array(l/3),l=e._offsetAttribute===v.GeometryOffsetAttribute.NONE?0:1,v.arrayFill(d,l),a.attributes.applyOffset=new Y.GeometryAttribute({componentDatatype:R.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:d})));var l=a.attributes,d=p.BoundingSphere.fromVertices(l.position.values,void 0,3);return new Y.Geometry({attributes:l,indices:a.indices,primitiveType:Y.PrimitiveType.LINES,boundingSphere:d,offsetAttribute:e._offsetAttribute})}},function(e,t){return(e=F.defined(t)?h.unpack(e,t):e)._ellipsoid=M.Ellipsoid.clone(e._ellipsoid),h.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCylinderGeometry.js b/public/lib/Cesium/Workers/createCylinderGeometry.js new file mode 100644 index 0000000..726ad1a --- /dev/null +++ b/public/lib/Cesium/Workers/createCylinderGeometry.js @@ -0,0 +1 @@ +define(["./CylinderGeometry-8d01e756","./when-ca391574","./GeometryOffsetAttribute-b94750ca","./Check-64f87f7d","./Transforms-5295b227","./Cartesian2-5b63e672","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./CylinderGeometryLibrary-b260e92f","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./VertexFormat-63b3c6da"],function(r,n,e,t,a,b,o,i,y,f,c,d,m,u,s){"use strict";return function(e,t){return n.defined(t)&&(e=r.CylinderGeometry.unpack(e,t)),r.CylinderGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createCylinderOutlineGeometry.js b/public/lib/Cesium/Workers/createCylinderOutlineGeometry.js new file mode 100644 index 0000000..f07e445 --- /dev/null +++ b/public/lib/Cesium/Workers/createCylinderOutlineGeometry.js @@ -0,0 +1 @@ +define(["./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./CylinderGeometryLibrary-b260e92f","./when-ca391574","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9"],function(c,p,y,t,_,h,A,v,R,G,e,i,r){"use strict";var O=new y.Cartesian2;function s(t){var e=(t=A.defaultValue(t,A.defaultValue.EMPTY_OBJECT)).length,i=t.topRadius,r=t.bottomRadius,a=A.defaultValue(t.slices,128),n=Math.max(A.defaultValue(t.numberOfVerticalLines,16),0);this._length=e,this._topRadius=i,this._bottomRadius=r,this._slices=a,this._numberOfVerticalLines=n,this._offsetAttribute=t.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}s.packedLength=6,s.pack=function(t,e,i){return i=A.defaultValue(i,0),e[i++]=t._length,e[i++]=t._topRadius,e[i++]=t._bottomRadius,e[i++]=t._slices,e[i++]=t._numberOfVerticalLines,e[i]=A.defaultValue(t._offsetAttribute,-1),e};var f={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};return s.unpack=function(t,e,i){e=A.defaultValue(e,0);var r=t[e++],a=t[e++],n=t[e++],o=t[e++],u=t[e++],e=t[e];return A.defined(i)?(i._length=r,i._topRadius=a,i._bottomRadius=n,i._slices=o,i._numberOfVerticalLines=u,i._offsetAttribute=-1===e?void 0:e,i):(f.length=r,f.topRadius=a,f.bottomRadius=n,f.slices=o,f.numberOfVerticalLines=u,f.offsetAttribute=-1===e?void 0:e,new s(f))},s.createGeometry=function(t){var e=t._length,i=t._topRadius,r=t._bottomRadius,a=t._slices,n=t._numberOfVerticalLines;if(!(e<=0||i<0||r<0||0===i&&0===r)){var o,u,s=2*a,f=h.CylinderGeometryLibrary.computePositions(e,i,r,a,!1),d=2*a;0<n&&(o=Math.min(n,a),u=Math.round(a/o),d+=o);for(var b=G.IndexDatatype.createTypedArray(s,2*d),l=0,m=0;m<a-1;m++)b[l++]=m,b[l++]=m+1,b[l++]=m+a,b[l++]=m+1+a;if(b[l++]=a-1,b[l++]=0,b[l++]=a+a-1,b[l++]=a,0<n)for(m=0;m<a;m+=u)b[l++]=m,b[l++]=m+a;n=new R.GeometryAttributes;n.position=new v.GeometryAttribute({componentDatatype:_.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:f}),O.x=.5*e,O.y=Math.max(r,i);i=new p.BoundingSphere(y.Cartesian3.ZERO,y.Cartesian2.magnitude(O));return A.defined(t._offsetAttribute)&&(e=f.length,f=new Uint8Array(e/3),e=t._offsetAttribute===c.GeometryOffsetAttribute.NONE?0:1,c.arrayFill(f,e),n.applyOffset=new v.GeometryAttribute({componentDatatype:_.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})),new v.Geometry({attributes:n,indices:b,primitiveType:v.PrimitiveType.LINES,boundingSphere:i,offsetAttribute:t._offsetAttribute})}},function(t,e){return A.defined(e)&&(t=s.unpack(t,e)),s.createGeometry(t)}}); diff --git a/public/lib/Cesium/Workers/createEllipseGeometry.js b/public/lib/Cesium/Workers/createEllipseGeometry.js new file mode 100644 index 0000000..505d0fb --- /dev/null +++ b/public/lib/Cesium/Workers/createEllipseGeometry.js @@ -0,0 +1 @@ +define(["./Cartesian2-5b63e672","./when-ca391574","./EllipseGeometry-be7f8268","./Check-64f87f7d","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./IndexDatatype-4e56bcfa","./IntersectionTests-f5111308","./Plane-99b2becd","./VertexFormat-63b3c6da"],function(r,n,a,e,t,i,o,s,c,b,l,d,f,m,p,y,u,G,C,E,A){"use strict";return function(e,t){return(e=n.defined(t)?a.EllipseGeometry.unpack(e,t):e)._center=r.Cartesian3.clone(e._center),e._ellipsoid=r.Ellipsoid.clone(e._ellipsoid),a.EllipseGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createEllipseOutlineGeometry.js b/public/lib/Cesium/Workers/createEllipseOutlineGeometry.js new file mode 100644 index 0000000..9be567e --- /dev/null +++ b/public/lib/Cesium/Workers/createEllipseOutlineGeometry.js @@ -0,0 +1 @@ +define(["./Cartesian2-5b63e672","./when-ca391574","./EllipseOutlineGeometry-1eb32452","./Check-64f87f7d","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./EllipseGeometryLibrary-a5f59994","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa"],function(r,n,i,e,t,a,o,l,s,b,c,f,u,m){"use strict";return function(e,t){return(e=n.defined(t)?i.EllipseOutlineGeometry.unpack(e,t):e)._center=r.Cartesian3.clone(e._center),e._ellipsoid=r.Ellipsoid.clone(e._ellipsoid),i.EllipseOutlineGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createEllipsoidGeometry.js b/public/lib/Cesium/Workers/createEllipsoidGeometry.js new file mode 100644 index 0000000..841feef --- /dev/null +++ b/public/lib/Cesium/Workers/createEllipsoidGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./EllipsoidGeometry-1cd4036a","./GeometryOffsetAttribute-b94750ca","./Check-64f87f7d","./Transforms-5295b227","./Cartesian2-5b63e672","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./VertexFormat-63b3c6da"],function(r,a,e,t,n,o,i,b,c,f,s,d,m,u){"use strict";return function(e,t){return r.defined(t)&&(e=a.EllipsoidGeometry.unpack(e,t)),a.EllipsoidGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createEllipsoidOutlineGeometry.js b/public/lib/Cesium/Workers/createEllipsoidOutlineGeometry.js new file mode 100644 index 0000000..6ef7537 --- /dev/null +++ b/public/lib/Cesium/Workers/createEllipsoidOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./EllipsoidOutlineGeometry-66fea8ef","./GeometryOffsetAttribute-b94750ca","./Check-64f87f7d","./Transforms-5295b227","./Cartesian2-5b63e672","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa"],function(r,n,e,t,i,a,f,o,b,u,s,c,m){"use strict";return function(e,t){return r.defined(e.buffer)&&(e=n.EllipsoidOutlineGeometry.unpack(e,t)),n.EllipsoidOutlineGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createFrustumGeometry.js b/public/lib/Cesium/Workers/createFrustumGeometry.js new file mode 100644 index 0000000..813bef3 --- /dev/null +++ b/public/lib/Cesium/Workers/createFrustumGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./FrustumGeometry-da613b71","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./Plane-99b2becd","./VertexFormat-63b3c6da"],function(r,n,e,t,a,u,b,o,m,c,s,f,i){"use strict";return function(e,t){return r.defined(t)&&(e=n.FrustumGeometry.unpack(e,t)),n.FrustumGeometry.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createFrustumOutlineGeometry.js b/public/lib/Cesium/Workers/createFrustumOutlineGeometry.js new file mode 100644 index 0000000..9105907 --- /dev/null +++ b/public/lib/Cesium/Workers/createFrustumOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./FrustumGeometry-da613b71","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./Plane-99b2becd","./VertexFormat-63b3c6da"],function(o,m,s,e,h,d,f,g,t,r,n,a,u){"use strict";var c=0,i=1;function p(e){var t,r,n=e.frustum,a=e.orientation,u=e.origin,e=o.defaultValue(e._drawNearPlane,!0);n instanceof d.PerspectiveFrustum?(t=c,r=d.PerspectiveFrustum.packedLength):n instanceof d.OrthographicFrustum&&(t=i,r=d.OrthographicFrustum.packedLength),this._frustumType=t,this._frustum=n.clone(),this._origin=s.Cartesian3.clone(u),this._orientation=m.Quaternion.clone(a),this._drawNearPlane=e,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+r+s.Cartesian3.packedLength+m.Quaternion.packedLength}p.pack=function(e,t,r){r=o.defaultValue(r,0);var n=e._frustumType,a=e._frustum;return(t[r++]=n)===c?(d.PerspectiveFrustum.pack(a,t,r),r+=d.PerspectiveFrustum.packedLength):(d.OrthographicFrustum.pack(a,t,r),r+=d.OrthographicFrustum.packedLength),s.Cartesian3.pack(e._origin,t,r),r+=s.Cartesian3.packedLength,m.Quaternion.pack(e._orientation,t,r),t[r+=m.Quaternion.packedLength]=e._drawNearPlane?1:0,t};var _=new d.PerspectiveFrustum,k=new d.OrthographicFrustum,l=new m.Quaternion,y=new s.Cartesian3;return p.unpack=function(e,t,r){t=o.defaultValue(t,0);var n,a=e[t++];a===c?(n=d.PerspectiveFrustum.unpack(e,t,_),t+=d.PerspectiveFrustum.packedLength):(n=d.OrthographicFrustum.unpack(e,t,k),t+=d.OrthographicFrustum.packedLength);var u=s.Cartesian3.unpack(e,t,y);t+=s.Cartesian3.packedLength;var i=m.Quaternion.unpack(e,t,l),e=1===e[t+=m.Quaternion.packedLength];if(!o.defined(r))return new p({frustum:n,origin:u,orientation:i,_drawNearPlane:e});t=a===r._frustumType?r._frustum:void 0;return r._frustum=n.clone(t),r._frustumType=a,r._origin=s.Cartesian3.clone(u,r._origin),r._orientation=m.Quaternion.clone(i,r._orientation),r._drawNearPlane=e,r},p.createGeometry=function(e){var t=e._frustumType,r=e._frustum,n=e._origin,a=e._orientation,u=e._drawNearPlane,e=new Float64Array(24);d.FrustumGeometry._computeNearFarPlanes(n,a,t,r,e);for(var i,o,r=new g.GeometryAttributes({position:new f.GeometryAttribute({componentDatatype:h.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:e})}),s=u?2:1,c=new Uint16Array(8*(1+s)),p=u?0:1;p<2;++p)o=4*p,c[i=u?8*p:0]=o,c[i+1]=o+1,c[i+2]=o+1,c[i+3]=o+2,c[i+4]=o+2,c[i+5]=o+3,c[i+6]=o+3,c[i+7]=o;for(p=0;p<2;++p)o=4*p,c[i=8*(s+p)]=o,c[i+1]=o+4,c[i+2]=o+1,c[i+3]=o+5,c[i+4]=o+2,c[i+5]=o+6,c[i+6]=o+3,c[i+7]=o+7;return new f.Geometry({attributes:r,indices:c,primitiveType:f.PrimitiveType.LINES,boundingSphere:m.BoundingSphere.fromVertices(e)})},function(e,t){return o.defined(t)&&(e=p.unpack(e,t)),p.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createGeometry.js b/public/lib/Cesium/Workers/createGeometry.js new file mode 100644 index 0000000..5c1e540 --- /dev/null +++ b/public/lib/Cesium/Workers/createGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./PrimitivePipeline-c896ba3a","./createTaskProcessorWorker","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./Math-b53708b3","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryPipeline-a588d10d","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./IndexDatatype-4e56bcfa","./IntersectionTests-f5111308","./Plane-99b2becd","./WebMercatorProjection-e0329e39"],function(f,b,e,r,t,n,a,o,i,s,c,u,d,m,p,l,y,P,k){"use strict";var C={};return e(function(e,r){for(var t=e.subTasks,n=t.length,a=new Array(n),o=0;o<n;o++){var i=t[o],s=i.geometry,c=i.moduleName;f.defined(c)?(c=function(e){var r=C[e];return f.defined(r)||("object"==typeof exports?C[r]=r=require("Workers/"+e):require(["Workers/"+e],function(e){C[r=e]=e})),r}(c),a[o]=c(s,i.offset)):a[o]=s}return f.when.all(a,function(e){return b.PrimitivePipeline.packCreateGeometryResults(e,r)})})}); diff --git a/public/lib/Cesium/Workers/createGroundPolylineGeometry.js b/public/lib/Cesium/Workers/createGroundPolylineGeometry.js new file mode 100644 index 0000000..d499f94 --- /dev/null +++ b/public/lib/Cesium/Workers/createGroundPolylineGeometry.js @@ -0,0 +1 @@ +define(["./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./when-ca391574","./Math-b53708b3","./ArcType-2b58731c","./arrayRemoveDuplicates-fc9e255d","./ComponentDatatype-8f71e605","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./EncodedCartesian3-c36ced29","./GeometryAttribute-7ef2d452","./IntersectionTests-f5111308","./Plane-99b2becd","./WebMercatorProjection-e0329e39","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9"],function(be,Oe,e,B,Pe,j,G,ke,M,V,Ae,Le,Y,r,a,t,n){"use strict";function i(e){e=B.defaultValue(e,B.defaultValue.EMPTY_OBJECT),this._ellipsoid=B.defaultValue(e.ellipsoid,Oe.Ellipsoid.WGS84),this._rectangle=B.defaultValue(e.rectangle,Oe.Rectangle.MAX_VALUE),this._projection=new be.GeographicProjection(this._ellipsoid),this._numberOfLevelZeroTilesX=B.defaultValue(e.numberOfLevelZeroTilesX,2),this._numberOfLevelZeroTilesY=B.defaultValue(e.numberOfLevelZeroTilesY,1)}Object.defineProperties(i.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}}),i.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e},i.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e},i.prototype.rectangleToNativeRectangle=function(e,a){var t=Pe.CesiumMath.toDegrees(e.west),n=Pe.CesiumMath.toDegrees(e.south),i=Pe.CesiumMath.toDegrees(e.east),e=Pe.CesiumMath.toDegrees(e.north);return B.defined(a)?(a.west=t,a.south=n,a.east=i,a.north=e,a):new Oe.Rectangle(t,n,i,e)},i.prototype.tileXYToNativeRectangle=function(e,a,t,n){n=this.tileXYToRectangle(e,a,t,n);return n.west=Pe.CesiumMath.toDegrees(n.west),n.south=Pe.CesiumMath.toDegrees(n.south),n.east=Pe.CesiumMath.toDegrees(n.east),n.north=Pe.CesiumMath.toDegrees(n.north),n},i.prototype.tileXYToRectangle=function(e,a,t,n){var i=this._rectangle,r=this.getNumberOfXTilesAtLevel(t),s=this.getNumberOfYTilesAtLevel(t),t=i.width/r,r=e*t+i.west,e=(e+1)*t+i.west,t=i.height/s,s=i.north-a*t,t=i.north-(a+1)*t;return(n=!B.defined(n)?new Oe.Rectangle(r,t,e,s):n).west=r,n.south=t,n.east=e,n.north=s,n},i.prototype.positionToTileXY=function(e,a,t){var n=this._rectangle;if(Oe.Rectangle.contains(n,e)){var i=this.getNumberOfXTilesAtLevel(a),r=this.getNumberOfYTilesAtLevel(a),s=n.width/i,o=n.height/r,a=e.longitude;n.east<n.west&&(a+=Pe.CesiumMath.TWO_PI);s=(a-n.west)/s|0;i<=s&&(s=i-1);o=(n.north-e.latitude)/o|0;return(r<=o&&(o=r-1),B.defined(t))?(t.x=s,t.y=o,t):new Oe.Cartesian2(s,o)}};var s=new Oe.Cartesian3,o=new Oe.Cartesian3,l=new Oe.Cartographic,u=new Oe.Cartesian3,c=new Oe.Cartesian3,C=new be.BoundingSphere,p=new i,h=[new Oe.Cartographic,new Oe.Cartographic,new Oe.Cartographic,new Oe.Cartographic],d=new Oe.Cartesian2,Se={};function g(e){Oe.Cartographic.fromRadians(e.east,e.north,0,h[0]),Oe.Cartographic.fromRadians(e.west,e.north,0,h[1]),Oe.Cartographic.fromRadians(e.east,e.south,0,h[2]),Oe.Cartographic.fromRadians(e.west,e.south,0,h[3]);for(var a=0,t=0,n=0,i=0,r=Se._terrainHeightsMaxLevel,s=0;s<=r;++s){for(var o=!1,l=0;l<4;++l){var u=h[l];if(p.positionToTileXY(u,s,d),0===l)n=d.x,i=d.y;else if(n!==d.x||i!==d.y){o=!0;break}}if(o)break;a=n,t=i}if(0!==s)return{x:a,y:t,level:r<s?r:s-1}}Se.initialize=function(){var e=Se._initPromise;return B.defined(e)?e:(e=be.Resource.fetchJson(be.buildModuleUrl("Assets/approximateTerrainHeights.json")).then(function(e){Se._terrainHeights=e}),Se._initPromise=e)},Se.getMinimumMaximumHeights=function(e,a){a=B.defaultValue(a,Oe.Ellipsoid.WGS84);var t=g(e),n=Se._defaultMinTerrainHeight,i=Se._defaultMaxTerrainHeight;return B.defined(t)&&(t=t.level+"-"+t.x+"-"+t.y,t=Se._terrainHeights[t],B.defined(t)&&(n=t[0],i=t[1]),a.cartographicToCartesian(Oe.Rectangle.northeast(e,l),s),a.cartographicToCartesian(Oe.Rectangle.southwest(e,l),o),Oe.Cartesian3.midpoint(o,s,u),a=a.scaleToGeodeticSurface(u,c),n=B.defined(a)?(a=Oe.Cartesian3.distance(u,a),Math.min(n,-a)):Se._defaultMinTerrainHeight),{minimumTerrainHeight:n=Math.max(Se._defaultMinTerrainHeight,n),maximumTerrainHeight:i}},Se.getBoundingSphere=function(e,a){a=B.defaultValue(a,Oe.Ellipsoid.WGS84);var t=g(e),n=Se._defaultMaxTerrainHeight;B.defined(t)&&(i=t.level+"-"+t.x+"-"+t.y,i=Se._terrainHeights[i],B.defined(i)&&(n=i[1]));var i=be.BoundingSphere.fromRectangle3D(e,a,0);return be.BoundingSphere.fromRectangle3D(e,a,n,C),be.BoundingSphere.union(i,C,i)},Se._terrainHeightsMaxLevel=6,Se._defaultMaxTerrainHeight=9e3,Se._defaultMinTerrainHeight=-1e5,Se._terrainHeights=void 0,Se._initPromise=void 0,Object.defineProperties(Se,{initialized:{get:function(){return B.defined(Se._terrainHeights)}}});var F=[be.GeographicProjection,a.WebMercatorProjection],f=F.length,Ie=Math.cos(Pe.CesiumMath.toRadians(30)),m=Math.cos(Pe.CesiumMath.toRadians(150)),q=0,X=1e3;function w(e){var a=(e=B.defaultValue(e,B.defaultValue.EMPTY_OBJECT)).positions;this.width=B.defaultValue(e.width,1),this._positions=a,this.granularity=B.defaultValue(e.granularity,9999),this.loop=B.defaultValue(e.loop,!1),this.arcType=B.defaultValue(e.arcType,j.ArcType.GEODESIC),this._ellipsoid=Oe.Ellipsoid.WGS84,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(w.prototype,{packedLength:{get:function(){return 1+3*this._positions.length+1+1+1+Oe.Ellipsoid.packedLength+1+1}}}),w.setProjectionAndEllipsoid=function(e,a){for(var t=0,n=0;n<f;n++)if(a instanceof F[n]){t=n;break}e._projectionIndex=t,e._ellipsoid=a.ellipsoid};var y=new Oe.Cartesian3,v=new Oe.Cartesian3,T=new Oe.Cartesian3;function W(e,a,t,n,i){var r=Z(n,e,0,y),t=Z(n,e,t,v),a=Z(n,a,0,T),t=xe(t,r,v),r=xe(a,r,T);return Oe.Cartesian3.cross(r,t,i),Oe.Cartesian3.normalize(i,i)}var E=new Oe.Cartographic,_=new Oe.Cartesian3,b=new Oe.Cartesian3,O=new Oe.Cartesian3;function U(e,a,t,n,i,r,s,o,l,u,c){if(0!==i){var C;r===j.ArcType.GEODESIC?C=new M.EllipsoidGeodesic(e,a,s):r===j.ArcType.RHUMB&&(C=new V.EllipsoidRhumbLine(e,a,s));r=C.surfaceDistance;if(!(r<i))for(var p=W(e,a,n,s,O),i=Math.ceil(r/i),h=r/i,d=h,g=i-1,f=o.length,m=0;m<g;m++){var w=C.interpolateUsingSurfaceDistance(d,E),y=Z(s,w,t,_),v=Z(s,w,n,b);Oe.Cartesian3.pack(p,o,f),Oe.Cartesian3.pack(y,l,f),Oe.Cartesian3.pack(v,u,f),c.push(w.latitude),c.push(w.longitude),f+=3,d+=h}}}var P=new Oe.Cartographic;function Z(e,a,t,n){return Oe.Cartographic.clone(a,P),P.height=t,Oe.Cartographic.toCartesian(P,e,n)}function xe(e,a,t){return Oe.Cartesian3.subtract(e,a,t),Oe.Cartesian3.normalize(t,t),t}function k(e,a,t,n){return n=xe(e,a,n),n=Oe.Cartesian3.cross(n,t,n),n=Oe.Cartesian3.normalize(n,n),n=Oe.Cartesian3.cross(t,n,n)}w.pack=function(e,a,t){var n=B.defaultValue(t,0),i=e._positions,r=i.length;a[n++]=r;for(var s=0;s<r;++s){var o=i[s];Oe.Cartesian3.pack(o,a,n),n+=3}return a[n++]=e.granularity,a[n++]=e.loop?1:0,a[n++]=e.arcType,Oe.Ellipsoid.pack(e._ellipsoid,a,n),n+=Oe.Ellipsoid.packedLength,a[n++]=e._projectionIndex,a[n++]=e._scene3DOnly?1:0,a},w.unpack=function(e,a,t){for(var n=B.defaultValue(a,0),i=e[n++],r=new Array(i),s=0;s<i;s++)r[s]=Oe.Cartesian3.unpack(e,n),n+=3;var o=e[n++],l=1===e[n++],u=e[n++],c=Oe.Ellipsoid.unpack(e,n);n+=Oe.Ellipsoid.packedLength;var C=e[n++],a=1===e[n++];return(t=!B.defined(t)?new w({positions:r}):t)._positions=r,t.granularity=o,t.loop=l,t.arcType=u,t._ellipsoid=c,t._projectionIndex=C,t._scene3DOnly=a,t};var A=new Oe.Cartesian3,L=new Oe.Cartesian3,S=new Oe.Cartesian3,I=new Oe.Cartesian3;function J(e,a,t,n,i){t=xe(t,a,I),e=k(e,a,t,A),a=k(n,a,t,L);if(Pe.CesiumMath.equalsEpsilon(Oe.Cartesian3.dot(e,a),-1,Pe.CesiumMath.EPSILON5))return i=Oe.Cartesian3.cross(t,e,i),i=Oe.Cartesian3.normalize(i,i);i=Oe.Cartesian3.add(a,e,i),i=Oe.Cartesian3.normalize(i,i);t=Oe.Cartesian3.cross(t,i,S);return i=Oe.Cartesian3.dot(a,t)<0?Oe.Cartesian3.negate(i,i):i}var Q=r.Plane.fromPointNormal(Oe.Cartesian3.ZERO,Oe.Cartesian3.UNIT_Y),K=new Oe.Cartesian3,$=new Oe.Cartesian3,ee=new Oe.Cartesian3,ae=new Oe.Cartesian3,te=new Oe.Cartesian3,ne=new Oe.Cartesian3,ie=new Oe.Cartographic,re=new Oe.Cartographic,se=new Oe.Cartographic;w.createGeometry=function(e){var a,t,n,i,r,s=!e._scene3DOnly,o=e.loop,l=e._ellipsoid,u=e.granularity,c=e.arcType,C=new F[e._projectionIndex](l),p=q,h=X,d=e._positions,g=d.length;2===g&&(o=!1);for(var f,m,w,y=new V.EllipsoidRhumbLine(void 0,void 0,l),v=[d[0]],M=0;M<g-1;M++)t=d[M],n=d[M+1],f=Y.IntersectionTests.lineSegmentPlane(t,n,Q,ne),!B.defined(f)||Oe.Cartesian3.equalsEpsilon(f,t,Pe.CesiumMath.EPSILON7)||Oe.Cartesian3.equalsEpsilon(f,n,Pe.CesiumMath.EPSILON7)||(e.arcType===j.ArcType.GEODESIC?v.push(Oe.Cartesian3.clone(f)):e.arcType===j.ArcType.RHUMB&&(w=l.cartesianToCartographic(f,ie).longitude,i=l.cartesianToCartographic(t,ie),r=l.cartesianToCartographic(n,re),y.setEndPoints(i,r),m=y.findIntersectionWithLongitude(w,se),f=l.cartographicToCartesian(m,ne),!B.defined(f)||Oe.Cartesian3.equalsEpsilon(f,t,Pe.CesiumMath.EPSILON7)||Oe.Cartesian3.equalsEpsilon(f,n,Pe.CesiumMath.EPSILON7)||v.push(Oe.Cartesian3.clone(f)))),v.push(n);o&&(t=d[g-1],n=d[0],f=Y.IntersectionTests.lineSegmentPlane(t,n,Q,ne),!B.defined(f)||Oe.Cartesian3.equalsEpsilon(f,t,Pe.CesiumMath.EPSILON7)||Oe.Cartesian3.equalsEpsilon(f,n,Pe.CesiumMath.EPSILON7)||(e.arcType===j.ArcType.GEODESIC?v.push(Oe.Cartesian3.clone(f)):e.arcType===j.ArcType.RHUMB&&(w=l.cartesianToCartographic(f,ie).longitude,i=l.cartesianToCartographic(t,ie),r=l.cartesianToCartographic(n,re),y.setEndPoints(i,r),m=y.findIntersectionWithLongitude(w,se),f=l.cartographicToCartesian(m,ne),!B.defined(f)||Oe.Cartesian3.equalsEpsilon(f,t,Pe.CesiumMath.EPSILON7)||Oe.Cartesian3.equalsEpsilon(f,n,Pe.CesiumMath.EPSILON7)||v.push(Oe.Cartesian3.clone(f)))));var T=v.length,E=new Array(T);for(M=0;M<T;M++){var _=Oe.Cartographic.fromCartesian(v[M],l);_.height=0,E[M]=_}if(!((T=(E=G.arrayRemoveDuplicates(E,Oe.Cartographic.equalsEpsilon)).length)<2)){var b=[],O=[],P=[],k=[],A=K,L=$,S=ee,I=ae,x=te,N=E[0],R=E[1];for(A=Z(l,E[T-1],p,A),I=Z(l,R,p,I),L=Z(l,N,p,L),S=Z(l,N,h,S),x=o?J(A,L,S,I,x):W(N,R,h,l,x),Oe.Cartesian3.pack(x,O,0),Oe.Cartesian3.pack(L,P,0),Oe.Cartesian3.pack(S,k,0),b.push(N.latitude),b.push(N.longitude),U(N,R,p,h,u,c,l,O,P,k,b),M=1;M<T-1;++M){var A=Oe.Cartesian3.clone(L,A),L=Oe.Cartesian3.clone(I,L),D=E[M];Z(l,D,h,S),Z(l,E[M+1],p,I),J(A,L,S,I,x),a=O.length,Oe.Cartesian3.pack(x,O,a),Oe.Cartesian3.pack(L,P,a),Oe.Cartesian3.pack(S,k,a),b.push(D.latitude),b.push(D.longitude),U(E[M],E[M+1],p,h,u,c,l,O,P,k,b)}var z=E[T-1],H=E[T-2];if(L=Z(l,z,p,L),S=Z(l,z,h,S),x=o?(R=E[0],J(A=Z(l,H,p,A),L,S,I=Z(l,R,p,I),x)):W(H,z,h,l,x),a=O.length,Oe.Cartesian3.pack(x,O,a),Oe.Cartesian3.pack(L,P,a),Oe.Cartesian3.pack(S,k,a),b.push(z.latitude),b.push(z.longitude),o){for(U(z,N,p,h,u,c,l,O,P,k,b),a=O.length,M=0;M<3;++M)O[a+M]=O[M],P[a+M]=P[M],k[a+M]=k[M];b.push(N.latitude),b.push(N.longitude)}return function(e,a,t,n,i,r,s){var o,l,u,c,C,p,h=a._ellipsoid,d=t.length/3-1,g=8*d,f=4*g,m=36*d,w=new(65535<g?Uint32Array:Uint16Array)(m),y=new Float64Array(3*g),v=new Float32Array(f),M=new Float32Array(f),T=new Float32Array(f),E=new Float32Array(f),_=new Float32Array(f);s&&(u=new Float32Array(f),c=new Float32Array(f),C=new Float32Array(f),p=new Float32Array(2*g));var b=r.length/2,O=0,P=He;P.height=0;var k=Be;k.height=0;var A=je,L=Ge;if(s)for(l=0,o=1;o<b;o++)P.latitude=r[l],P.longitude=r[l+1],k.latitude=r[l+2],k.longitude=r[l+3],A=a.project(P,A),L=a.project(k,L),O+=Oe.Cartesian3.distance(A,L),l+=2;var S=n.length/3;L=Oe.Cartesian3.unpack(n,0,L);var I,x=0;for(l=3,o=1;o<S;o++)A=Oe.Cartesian3.clone(L,A),L=Oe.Cartesian3.unpack(n,l,L),x+=Oe.Cartesian3.distance(A,L),l+=3;l=3;var N=0,R=0,D=0,z=0,H=!1,B=Oe.Cartesian3.unpack(t,0,Ye),j=Oe.Cartesian3.unpack(n,0,Ge),G=Oe.Cartesian3.unpack(i,0,qe);e&&(_e=Oe.Cartesian3.unpack(t,t.length-6,Ve),Ne(G,_e,B,j)&&(G=Oe.Cartesian3.negate(G,G)));var V,Y,F,q,X,W,U,Z=0,J=0,Q=0;for(o=0;o<d;o++){var K=Oe.Cartesian3.clone(B,Ve),$=Oe.Cartesian3.clone(j,je),ee=Oe.Cartesian3.clone(G,Fe);H&&(ee=Oe.Cartesian3.negate(ee,ee)),B=Oe.Cartesian3.unpack(t,l,Ye),j=Oe.Cartesian3.unpack(n,l,Ge),G=Oe.Cartesian3.unpack(i,l,qe),H=Ne(G,K,B,j),P.latitude=r[N],P.longitude=r[N+1],k.latitude=r[N+2],k.longitude=r[N+3],s&&(Me=function(e,a){var t=Math.abs(e.longitude),n=Math.abs(a.longitude);{if(Pe.CesiumMath.equalsEpsilon(t,Pe.CesiumMath.PI,Pe.CesiumMath.EPSILON11)){var i=Pe.CesiumMath.sign(a.longitude);return e.longitude=i*(t-Pe.CesiumMath.EPSILON11),1}if(Pe.CesiumMath.equalsEpsilon(n,Pe.CesiumMath.PI,Pe.CesiumMath.EPSILON11)){e=Pe.CesiumMath.sign(e.longitude);return a.longitude=e*(n-Pe.CesiumMath.EPSILON11),2}}return 0}(P,k),V=a.project(P,Ke),(pe=xe(Y=a.project(k,$e),V,ca)).y=Math.abs(pe.y),F=ea,q=aa,0===Me||Oe.Cartesian3.dot(pe,Oe.Cartesian3.UNIT_Y)>Ie?(F=Re(a,P,ee,V,ea),q=Re(a,k,G,Y,aa)):1===Me?(q=Re(a,k,G,Y,aa),F.x=0,F.y=Pe.CesiumMath.sign(P.longitude-Math.abs(k.longitude)),F.z=0):(F=Re(a,P,ee,V,ea),q.x=0,q.y=Pe.CesiumMath.sign(P.longitude-k.longitude),q.z=0));var ae=Oe.Cartesian3.distance($,j),te=Ae.EncodedCartesian3.fromCartesian(K,la),ne=Oe.Cartesian3.subtract(B,K,ta),ie=Oe.Cartesian3.normalize(ne,ra),re=Oe.Cartesian3.subtract($,K,na);re=Oe.Cartesian3.normalize(re,re);var se=Oe.Cartesian3.cross(ie,re,ra);se=Oe.Cartesian3.normalize(se,se);var oe=Oe.Cartesian3.cross(re,ee,sa);oe=Oe.Cartesian3.normalize(oe,oe);var le=Oe.Cartesian3.subtract(j,B,ia);le=Oe.Cartesian3.normalize(le,le);var ue=Oe.Cartesian3.cross(G,le,oa);ue=Oe.Cartesian3.normalize(ue,ue);var ce=ae/x,Ce=Z/x,pe=0,he=0,de=0;for(s&&(pe=Oe.Cartesian3.distance(V,Y),X=Ae.EncodedCartesian3.fromCartesian(V,ua),W=Oe.Cartesian3.subtract(Y,V,ca),Te=(U=Oe.Cartesian3.normalize(W,Ca)).x,U.x=U.y,U.y=-Te,he=pe/O,de=J/O),I=0;I<8;I++){var ge=z+4*I,fe=R+2*I,me=ge+3,we=I<4?1:-1,ye=2===I||3===I||6===I||7===I?1:-1;Oe.Cartesian3.pack(te.high,v,ge),v[me]=ne.x,Oe.Cartesian3.pack(te.low,M,ge),M[me]=ne.y,Oe.Cartesian3.pack(oe,T,ge),T[me]=ne.z,Oe.Cartesian3.pack(ue,E,ge),E[me]=ce*we,Oe.Cartesian3.pack(se,_,ge);var ve=Ce*ye;0===ve&&ye<0&&(ve=9),_[me]=ve,s&&(u[ge]=X.high.x,u[ge+1]=X.high.y,u[ge+2]=X.low.x,u[ge+3]=X.low.y,C[ge]=-F.y,C[ge+1]=F.x,C[ge+2]=q.y,C[ge+3]=-q.x,c[ge]=W.x,c[ge+1]=W.y,c[ge+2]=U.x,c[ge+3]=U.y,p[fe]=he*we,0===(ve=de*ye)&&ye<0&&(ve=9),p[fe+1]=ve)}var Me=Je,ie=Qe,re=Ue,ee=Ze,le=Oe.Rectangle.fromCartographicArray(Xe,We),Te=Se.getMinimumMaximumHeights(le,h),le=Te.minimumTerrainHeight,Te=Te.maximumTerrainHeight;Q+=le,Q+=Te,De(K,$,le,Te,Me,re),De(B,j,le,Te,ie,ee);Te=Oe.Cartesian3.multiplyByScalar(se,Pe.CesiumMath.EPSILON5,pa);Oe.Cartesian3.add(Me,Te,Me),Oe.Cartesian3.add(ie,Te,ie),Oe.Cartesian3.add(re,Te,re),Oe.Cartesian3.add(ee,Te,ee),ze(Me,ie),ze(re,ee),Oe.Cartesian3.pack(Me,y,D),Oe.Cartesian3.pack(ie,y,D+3),Oe.Cartesian3.pack(ee,y,D+6),Oe.Cartesian3.pack(re,y,D+9),Te=Oe.Cartesian3.multiplyByScalar(se,-2*Pe.CesiumMath.EPSILON5,pa),Oe.Cartesian3.add(Me,Te,Me),Oe.Cartesian3.add(ie,Te,ie),Oe.Cartesian3.add(re,Te,re),Oe.Cartesian3.add(ee,Te,ee),ze(Me,ie),ze(re,ee),Oe.Cartesian3.pack(Me,y,D+12),Oe.Cartesian3.pack(ie,y,D+15),Oe.Cartesian3.pack(ee,y,D+18),Oe.Cartesian3.pack(re,y,D+21),N+=2,l+=3,R+=16,D+=24,z+=32,Z+=ae,J+=pe}var Ee=l=0;for(o=0;o<d;o++){for(I=0;I<ga;I++)w[l+I]=da[I]+Ee;Ee+=8,l+=ga}e=ha;be.BoundingSphere.fromVertices(t,Oe.Cartesian3.ZERO,3,e[0]),be.BoundingSphere.fromVertices(n,Oe.Cartesian3.ZERO,3,e[1]);var _e=be.BoundingSphere.fromBoundingSpheres(e);_e.radius+=Q/(2*d);e={position:new Le.GeometryAttribute({componentDatatype:ke.ComponentDatatype.DOUBLE,componentsPerAttribute:3,normalize:!1,values:y}),startHiAndForwardOffsetX:fa(v),startLoAndForwardOffsetY:fa(M),startNormalAndForwardOffsetZ:fa(T),endNormalAndTextureCoordinateNormalizationX:fa(E),rightNormalAndTextureCoordinateNormalizationY:fa(_)};s&&(e.startHiLo2D=fa(u),e.offsetAndRight2D=fa(c),e.startEndNormals2D=fa(C),e.texcoordNormalization2D=new Le.GeometryAttribute({componentDatatype:ke.ComponentDatatype.FLOAT,componentsPerAttribute:2,normalize:!1,values:p}));return new Le.Geometry({attributes:e,indices:w,boundingSphere:_e})}(o,C,P,k,O,b,s)}};var x=new Oe.Cartesian3,N=new be.Matrix3,R=new be.Quaternion;function Ne(e,a,t,n){a=xe(t,a,x),a=Oe.Cartesian3.dot(a,e);if(Ie<a||a<m){t=xe(n,t,I),a=a<m?Pe.CesiumMath.PI_OVER_TWO:-Pe.CesiumMath.PI_OVER_TWO,a=be.Quaternion.fromAxisAngle(t,a,R),a=be.Matrix3.fromQuaternion(a,N);return be.Matrix3.multiplyByVector(a,e,e),!0}return!1}var D=new Oe.Cartographic,z=new Oe.Cartesian3,H=new Oe.Cartesian3;function Re(e,a,t,n,i){var r=Oe.Cartographic.toCartesian(a,e._ellipsoid,z),s=Oe.Cartesian3.add(r,t,H),o=!1,l=e._ellipsoid,u=l.cartesianToCartographic(s,D);Math.abs(a.longitude-u.longitude)>Pe.CesiumMath.PI_OVER_TWO&&(o=!0,s=Oe.Cartesian3.subtract(r,t,H),u=l.cartesianToCartographic(s,D)),u.height=0;u=e.project(u,i);return(i=Oe.Cartesian3.subtract(u,n,i)).z=0,i=Oe.Cartesian3.normalize(i,i),o&&Oe.Cartesian3.negate(i,i),i}var oe=new Oe.Cartesian3,le=new Oe.Cartesian3;function De(e,a,t,n,i,r){var s=Oe.Cartesian3.subtract(a,e,oe);Oe.Cartesian3.normalize(s,s);t-=q,t=Oe.Cartesian3.multiplyByScalar(s,t,le);Oe.Cartesian3.add(e,t,i);n-=X,t=Oe.Cartesian3.multiplyByScalar(s,n,le);Oe.Cartesian3.add(a,t,r)}var ue=new Oe.Cartesian3;function ze(e,a){var t=r.Plane.getPointDistance(Q,e),n=r.Plane.getPointDistance(Q,a),i=ue;Pe.CesiumMath.equalsEpsilon(t,0,Pe.CesiumMath.EPSILON2)?(i=xe(a,e,i),Oe.Cartesian3.multiplyByScalar(i,Pe.CesiumMath.EPSILON2,i),Oe.Cartesian3.add(e,i,e)):Pe.CesiumMath.equalsEpsilon(n,0,Pe.CesiumMath.EPSILON2)&&(i=xe(e,a,i),Oe.Cartesian3.multiplyByScalar(i,Pe.CesiumMath.EPSILON2,i),Oe.Cartesian3.add(a,i,a))}var He=new Oe.Cartographic,Be=new Oe.Cartographic,je=new Oe.Cartesian3,Ge=new Oe.Cartesian3,Ve=new Oe.Cartesian3,Ye=new Oe.Cartesian3,Fe=new Oe.Cartesian3,qe=new Oe.Cartesian3,Xe=[He,Be],We=new Oe.Rectangle,Ue=new Oe.Cartesian3,Ze=new Oe.Cartesian3,Je=new Oe.Cartesian3,Qe=new Oe.Cartesian3,Ke=new Oe.Cartesian3,$e=new Oe.Cartesian3,ea=new Oe.Cartesian3,aa=new Oe.Cartesian3,ta=new Oe.Cartesian3,na=new Oe.Cartesian3,ia=new Oe.Cartesian3,ra=new Oe.Cartesian3,sa=new Oe.Cartesian3,oa=new Oe.Cartesian3,la=new Ae.EncodedCartesian3,ua=new Ae.EncodedCartesian3,ca=new Oe.Cartesian3,Ca=new Oe.Cartesian3,pa=new Oe.Cartesian3,ha=[new be.BoundingSphere,new be.BoundingSphere],da=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],ga=da.length;function fa(e){return new Le.GeometryAttribute({componentDatatype:ke.ComponentDatatype.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}return w._projectNormal=Re,function(e,a){return Se.initialize().then(function(){return B.defined(a)&&(e=w.unpack(e,a)),w.createGeometry(e)})}}); diff --git a/public/lib/Cesium/Workers/createPlaneGeometry.js b/public/lib/Cesium/Workers/createPlaneGeometry.js new file mode 100644 index 0000000..cf9afcf --- /dev/null +++ b/public/lib/Cesium/Workers/createPlaneGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./VertexFormat-63b3c6da","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9"],function(n,o,m,e,i,u,p,a,t,r,y){"use strict";function c(e){e=n.defaultValue(e,n.defaultValue.EMPTY_OBJECT);e=n.defaultValue(e.vertexFormat,a.VertexFormat.DEFAULT);this._vertexFormat=e,this._workerName="createPlaneGeometry"}c.packedLength=a.VertexFormat.packedLength,c.pack=function(e,t,r){return r=n.defaultValue(r,0),a.VertexFormat.pack(e._vertexFormat,t,r),t};var s=new a.VertexFormat,b={vertexFormat:s};c.unpack=function(e,t,r){t=n.defaultValue(t,0);t=a.VertexFormat.unpack(e,t,s);return n.defined(r)?(r._vertexFormat=a.VertexFormat.clone(t,r._vertexFormat),r):new c(b)};var A=new m.Cartesian3(-.5,-.5,0),l=new m.Cartesian3(.5,.5,0);return c.createGeometry=function(e){var t,r,n=e._vertexFormat,a=new p.GeometryAttributes;return n.position&&((e=new Float64Array(12))[0]=A.x,e[1]=A.y,e[2]=0,e[3]=l.x,e[4]=A.y,e[5]=0,e[6]=l.x,e[7]=l.y,e[8]=0,e[9]=A.x,e[10]=l.y,e[11]=0,a.position=new u.GeometryAttribute({componentDatatype:i.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:e}),n.normal&&((e=new Float32Array(12))[0]=0,e[1]=0,e[2]=1,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=1,e[9]=0,e[10]=0,e[11]=1,a.normal=new u.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:e})),n.st&&((t=new Float32Array(8))[0]=0,t[1]=0,t[2]=1,t[3]=0,t[4]=1,t[5]=1,t[6]=0,t[7]=1,a.st=new u.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:t})),n.tangent&&((t=new Float32Array(12))[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t[6]=1,t[7]=0,t[8]=0,t[9]=1,t[10]=0,t[11]=0,a.tangent=new u.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:t})),n.bitangent&&((r=new Float32Array(12))[0]=0,r[1]=1,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=1,r[8]=0,r[9]=0,r[10]=1,r[11]=0,a.bitangent=new u.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:r})),(r=new Uint16Array(6))[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3),new u.Geometry({attributes:a,indices:r,primitiveType:u.PrimitiveType.TRIANGLES,boundingSphere:new o.BoundingSphere(m.Cartesian3.ZERO,Math.sqrt(2))})},function(e,t){return n.defined(t)&&(e=c.unpack(e,t)),c.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPlaneOutlineGeometry.js b/public/lib/Cesium/Workers/createPlaneOutlineGeometry.js new file mode 100644 index 0000000..d63b79c --- /dev/null +++ b/public/lib/Cesium/Workers/createPlaneOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Transforms-5295b227","./Cartesian2-5b63e672","./Check-64f87f7d","./ComponentDatatype-8f71e605","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./Math-b53708b3","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9"],function(r,a,i,e,o,u,c,t,n,s){"use strict";function y(){this._workerName="createPlaneOutlineGeometry"}y.packedLength=0,y.pack=function(e,t){return t},y.unpack=function(e,t,n){return r.defined(n)?n:new y};var m=new i.Cartesian3(-.5,-.5,0),p=new i.Cartesian3(.5,.5,0);return y.createGeometry=function(){var e=new c.GeometryAttributes,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=m.x,n[1]=m.y,n[2]=m.z,n[3]=p.x,n[4]=m.y,n[5]=m.z,n[6]=p.x,n[7]=p.y,n[8]=m.z,n[9]=m.x,n[10]=p.y,n[11]=m.z,e.position=new u.GeometryAttribute({componentDatatype:o.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new u.Geometry({attributes:e,indices:t,primitiveType:u.PrimitiveType.LINES,boundingSphere:new a.BoundingSphere(i.Cartesian3.ZERO,Math.sqrt(2))})},function(e,t){return r.defined(t)&&(e=y.unpack(e,t)),y.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPolygonGeometry.js b/public/lib/Cesium/Workers/createPolygonGeometry.js new file mode 100644 index 0000000..28348b6 --- /dev/null +++ b/public/lib/Cesium/Workers/createPolygonGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./ArcType-2b58731c","./GeometryOffsetAttribute-b94750ca","./BoundingRectangle-755c152f","./Transforms-5295b227","./Check-64f87f7d","./ComponentDatatype-8f71e605","./EllipsoidGeodesic-bbea0b0a","./EllipsoidTangentPlane-0fb66b96","./GeometryAttribute-7ef2d452","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonGeometryLibrary-b3087bff","./PolygonPipeline-55053b0a","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./arrayRemoveDuplicates-fc9e255d","./EllipsoidRhumbLine-21029cef","./GeometryAttributes-a356f820"],function(z,W,c,Y,e,U,t,j,y,A,Q,E,G,O,q,V,F,f,r,o,a,i,n,s,l,u,p){"use strict";var K=new W.Cartographic,Z=new W.Cartographic;var D=new e.BoundingRectangle,J=new W.Cartesian3,X=new W.Cartesian3,$=new W.Cartesian3,ee=new W.Cartesian3,te=new W.Cartesian3,re=new W.Cartesian3,oe=new W.Cartesian3,ae=new W.Cartesian3,ie=new W.Cartesian3,ne=new W.Cartesian2,se=new W.Cartesian2,le=new W.Cartesian3,ue=new U.Quaternion,pe=new U.Matrix3,ce=new U.Matrix3;function L(e){var t,r=e.vertexFormat,o=e.geometry,a=e.shadowVolume,i=o.attributes.position.values,n=i.length,s=e.wall,l=e.top||s,u=e.bottom||s;if(r.st||r.normal||r.tangent||r.bitangent||a){var p=e.boundingRectangle,c=e.tangentPlane,y=e.ellipsoid,m=e.stRotation,g=e.perPositionHeight,d=ne;d.x=p.x,d.y=p.y;var h,f=r.st?new Float32Array(n/3*2):void 0;r.normal&&(h=g&&l&&!s?o.attributes.normal.values:new Float32Array(n));var b,_=r.tangent?new Float32Array(n):void 0,v=r.bitangent?new Float32Array(n):void 0,P=a?new Float32Array(n):void 0,C=0,w=0,x=X,T=$,I=ee,A=!0,E=pe,G=ce;G=0!==m?(b=U.Quaternion.fromAxisAngle(c._plane.normal,m,ue),E=U.Matrix3.fromQuaternion(b,E),b=U.Quaternion.fromAxisAngle(c._plane.normal,-m,ue),U.Matrix3.fromQuaternion(b,G)):(E=U.Matrix3.clone(U.Matrix3.IDENTITY,E),U.Matrix3.clone(U.Matrix3.IDENTITY,G));var O=0,V=0;l&&u&&(O=n/2,V=n/3,n/=2);for(var F=0;F<n;F+=3){var D,L,N,H,R,M,S,B,k=W.Cartesian3.fromArray(i,F,le);r.st&&(D=U.Matrix3.multiplyByVector(E,k,J),D=y.scaleToGeodeticSurface(D,D),L=c.projectPointOntoPlane(D,se),W.Cartesian2.subtract(L,d,L),N=q.CesiumMath.clamp(L.x/p.width,0,1),H=q.CesiumMath.clamp(L.y/p.height,0,1),u&&(f[C+V]=N,f[C+1+V]=H),l&&(f[C]=N,f[C+1]=H),C+=2),(r.normal||r.tangent||r.bitangent||a)&&(R=w+1,M=w+2,s?(F+3<n&&(S=W.Cartesian3.fromArray(i,F+3,te),A&&(B=W.Cartesian3.fromArray(i,F+n,re),g&&(t=k,D=S,L=B,N=void 0,N=(H=y).cartesianToCartographic(t,K).height,(t=H.cartesianToCartographic(D,Z)).height=N,H.cartographicToCartesian(t,D),(D=H.cartesianToCartographic(L,Z)).height=N-100,H.cartographicToCartesian(D,L)),W.Cartesian3.subtract(S,k,S),W.Cartesian3.subtract(B,k,B),x=W.Cartesian3.normalize(W.Cartesian3.cross(B,S,x),x),A=!1),W.Cartesian3.equalsEpsilon(S,k,q.CesiumMath.EPSILON10)&&(A=!0)),(r.tangent||r.bitangent)&&(I=y.geodeticSurfaceNormal(k,I),r.tangent&&(T=W.Cartesian3.normalize(W.Cartesian3.cross(I,x,T),T)))):(x=y.geodeticSurfaceNormal(k,x),(r.tangent||r.bitangent)&&(g&&(oe=W.Cartesian3.fromArray(h,w,oe),ae=W.Cartesian3.cross(W.Cartesian3.UNIT_Z,oe,ae),ae=W.Cartesian3.normalize(U.Matrix3.multiplyByVector(G,ae,ae),ae),r.bitangent&&(ie=W.Cartesian3.normalize(W.Cartesian3.cross(oe,ae,ie),ie))),T=W.Cartesian3.cross(W.Cartesian3.UNIT_Z,x,T),T=W.Cartesian3.normalize(U.Matrix3.multiplyByVector(G,T,T),T),r.bitangent&&(I=W.Cartesian3.normalize(W.Cartesian3.cross(x,T,I),I)))),r.normal&&(e.wall?(h[w+O]=x.x,h[R+O]=x.y,h[M+O]=x.z):u&&(h[w+O]=-x.x,h[R+O]=-x.y,h[M+O]=-x.z),(l&&!g||s)&&(h[w]=x.x,h[R]=x.y,h[M]=x.z)),a&&(s&&(x=y.geodeticSurfaceNormal(k,x)),P[w+O]=-x.x,P[R+O]=-x.y,P[M+O]=-x.z),r.tangent&&(e.wall?(_[w+O]=T.x,_[R+O]=T.y,_[M+O]=T.z):u&&(_[w+O]=-T.x,_[R+O]=-T.y,_[M+O]=-T.z),l&&(g?(_[w]=ae.x,_[R]=ae.y,_[M]=ae.z):(_[w]=T.x,_[R]=T.y,_[M]=T.z))),r.bitangent&&(u&&(v[w+O]=I.x,v[R+O]=I.y,v[M+O]=I.z),l&&(g?(v[w]=ie.x,v[R]=ie.y,v[M]=ie.z):(v[w]=I.x,v[R]=I.y,v[M]=I.z))),w+=3)}r.st&&(o.attributes.st=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:f})),r.normal&&(o.attributes.normal=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:h})),r.tangent&&(o.attributes.tangent=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:_})),r.bitangent&&(o.attributes.bitangent=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:v})),a&&(o.attributes.extrudeDirection=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:P}))}return e.extrude&&z.defined(e.offsetAttribute)&&(m=i.length/3,b=new Uint8Array(m),e.offsetAttribute===Y.GeometryOffsetAttribute.TOP?l&&u||s?b=Y.arrayFill(b,1,0,m/2):l&&(b=Y.arrayFill(b,1)):(m=e.offsetAttribute===Y.GeometryOffsetAttribute.NONE?0:1,b=Y.arrayFill(b,m)),o.attributes.applyOffset=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})),o}var m=new W.Cartographic,g=new W.Cartographic,d={westOverIDL:0,eastOverIDL:0},h=new y.EllipsoidGeodesic;function b(e,t,r,o,a){if(a=z.defaultValue(a,new W.Rectangle),!z.defined(e)||e.length<3)return a.west=0,a.north=0,a.south=0,a.east=0,a;if(r===c.ArcType.RHUMB)return W.Rectangle.fromCartesianArray(e,t,a);h.ellipsoid.equals(t)||(h=new y.EllipsoidGeodesic(void 0,void 0,t)),a.west=Number.POSITIVE_INFINITY,a.east=Number.NEGATIVE_INFINITY,a.south=Number.POSITIVE_INFINITY,a.north=Number.NEGATIVE_INFINITY,d.westOverIDL=Number.POSITIVE_INFINITY,d.eastOverIDL=Number.NEGATIVE_INFINITY;for(var i,n=1/q.CesiumMath.chordLength(o,t.maximumRadius),s=e.length,l=t.cartesianToCartographic(e[0],g),u=m,p=1;p<s;p++)i=u,u=l,l=t.cartesianToCartographic(e[p],i),h.setEndPoints(u,l),v(h,n,a,d);return i=u,u=l,l=t.cartesianToCartographic(e[0],i),h.setEndPoints(u,l),v(h,n,a,d),a.east-a.west>d.eastOverIDL-d.westOverIDL&&(a.west=d.westOverIDL,a.east=d.eastOverIDL,a.east>q.CesiumMath.PI&&(a.east=a.east-q.CesiumMath.TWO_PI),a.west>q.CesiumMath.PI&&(a.west=a.west-q.CesiumMath.TWO_PI)),a}var _=new W.Cartographic;function v(e,t,r,o){for(var a=e.surfaceDistance,i=Math.ceil(a*t),n=0<i?a/(i-1):Number.POSITIVE_INFINITY,s=0,l=0;l<i;l++){var u=e.interpolateUsingSurfaceDistance(s,_);s+=n;var p=u.longitude,u=u.latitude;r.west=Math.min(r.west,p),r.east=Math.max(r.east,p),r.south=Math.min(r.south,u),r.north=Math.max(r.north,u);p=0<=p?p:p+q.CesiumMath.TWO_PI;o.westOverIDL=Math.min(o.westOverIDL,p),o.eastOverIDL=Math.max(o.eastOverIDL,p)}}var N=[];function P(e){var t,r=e.polygonHierarchy,o=z.defaultValue(e.vertexFormat,f.VertexFormat.DEFAULT),a=z.defaultValue(e.ellipsoid,W.Ellipsoid.WGS84),i=z.defaultValue(e.granularity,q.CesiumMath.RADIANS_PER_DEGREE),n=z.defaultValue(e.stRotation,0),s=z.defaultValue(e.perPositionHeight,!1),l=s&&z.defined(e.extrudedHeight),u=z.defaultValue(e.height,0),p=z.defaultValue(e.extrudedHeight,u);l||(t=Math.max(u,p),p=Math.min(u,p),u=t),this._vertexFormat=f.VertexFormat.clone(o),this._ellipsoid=W.Ellipsoid.clone(a),this._granularity=i,this._stRotation=n,this._height=u,this._extrudedHeight=p,this._closeTop=z.defaultValue(e.closeTop,!0),this._closeBottom=z.defaultValue(e.closeBottom,!0),this._polygonHierarchy=r,this._perPositionHeight=s,this._perPositionHeightExtrude=l,this._shadowVolume=z.defaultValue(e.shadowVolume,!1),this._workerName="createPolygonGeometry",this._offsetAttribute=e.offsetAttribute,this._arcType=z.defaultValue(e.arcType,c.ArcType.GEODESIC),this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0,this.packedLength=V.PolygonGeometryLibrary.computeHierarchyPackedLength(r)+W.Ellipsoid.packedLength+f.VertexFormat.packedLength+12}P.fromPositions=function(e){return new P({polygonHierarchy:{positions:(e=z.defaultValue(e,z.defaultValue.EMPTY_OBJECT)).positions},height:e.height,extrudedHeight:e.extrudedHeight,vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,closeTop:e.closeTop,closeBottom:e.closeBottom,offsetAttribute:e.offsetAttribute,arcType:e.arcType})},P.pack=function(e,t,r){return r=z.defaultValue(r,0),r=V.PolygonGeometryLibrary.packPolygonHierarchy(e._polygonHierarchy,t,r),W.Ellipsoid.pack(e._ellipsoid,t,r),r+=W.Ellipsoid.packedLength,f.VertexFormat.pack(e._vertexFormat,t,r),r+=f.VertexFormat.packedLength,t[r++]=e._height,t[r++]=e._extrudedHeight,t[r++]=e._granularity,t[r++]=e._stRotation,t[r++]=e._perPositionHeightExtrude?1:0,t[r++]=e._perPositionHeight?1:0,t[r++]=e._closeTop?1:0,t[r++]=e._closeBottom?1:0,t[r++]=e._shadowVolume?1:0,t[r++]=z.defaultValue(e._offsetAttribute,-1),t[r++]=e._arcType,t[r]=e.packedLength,t};var C=W.Ellipsoid.clone(W.Ellipsoid.UNIT_SPHERE),w=new f.VertexFormat,x={polygonHierarchy:{}};return P.unpack=function(e,t,r){t=z.defaultValue(t,0);var o=V.PolygonGeometryLibrary.unpackPolygonHierarchy(e,t);t=o.startingIndex,delete o.startingIndex;var a=W.Ellipsoid.unpack(e,t,C);t+=W.Ellipsoid.packedLength;var i=f.VertexFormat.unpack(e,t,w);t+=f.VertexFormat.packedLength;var n=e[t++],s=e[t++],l=e[t++],u=e[t++],p=1===e[t++],c=1===e[t++],y=1===e[t++],m=1===e[t++],g=1===e[t++],d=e[t++],h=e[t++],t=e[t];return(r=!z.defined(r)?new P(x):r)._polygonHierarchy=o,r._ellipsoid=W.Ellipsoid.clone(a,r._ellipsoid),r._vertexFormat=f.VertexFormat.clone(i,r._vertexFormat),r._height=n,r._extrudedHeight=s,r._granularity=l,r._stRotation=u,r._perPositionHeightExtrude=p,r._perPositionHeight=c,r._closeTop=y,r._closeBottom=m,r._shadowVolume=g,r._offsetAttribute=-1===d?void 0:d,r._arcType=h,r.packedLength=t,r},P.computeRectangle=function(e,t){var r=z.defaultValue(e.granularity,q.CesiumMath.RADIANS_PER_DEGREE),o=z.defaultValue(e.arcType,c.ArcType.GEODESIC),a=e.polygonHierarchy,e=z.defaultValue(e.ellipsoid,W.Ellipsoid.WGS84);return b(a.positions,e,o,r,t)},P.createGeometry=function(e){var t=e._vertexFormat,r=e._ellipsoid,o=e._granularity,a=e._stRotation,i=e._polygonHierarchy,n=e._perPositionHeight,s=e._closeTop,l=e._closeBottom,u=e._arcType;if(!((g=i.positions).length<3)){var p=A.EllipsoidTangentPlane.fromPoints(g,r),i=V.PolygonGeometryLibrary.polygonsFromHierarchy(i,p.projectPointsOntoPlane.bind(p),!n,r),c=i.hierarchy,y=i.polygons;if(0!==c.length){var m,g=c[0].outerRing,g=V.PolygonGeometryLibrary.computeBoundingRectangle(p.plane.normal,p.projectPointOntoPlane.bind(p),g,a,D),d=[],h=e._height,f=e._extrudedHeight,b={perPositionHeight:n,vertexFormat:t,geometry:void 0,tangentPlane:p,boundingRectangle:g,ellipsoid:r,stRotation:a,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:u};if(e._perPositionHeightExtrude||!q.CesiumMath.equalsEpsilon(h,f,0,q.CesiumMath.EPSILON2))for(b.extrude=!0,b.top=s,b.bottom=l,b.shadowVolume=e._shadowVolume,b.offsetAttribute=e._offsetAttribute,m=0;m<y.length;m++){var _,v=function(e,t,r,o,a,i,n,s,l){var u={walls:[]};if(i||n){var p=V.PolygonGeometryLibrary.createGeometryFromPositions(e,t,r,a,s,l),t=p.attributes.position.values,c=p.indices;if(i&&n){var y,i=t.concat(t),m=i.length/3;(y=O.IndexDatatype.createTypedArray(m,2*c.length)).set(c);for(var g=c.length,d=m/2,h=0;h<g;h+=3){var f=y[h]+d,b=y[h+1]+d,_=y[h+2]+d;y[h+g]=_,y[h+1+g]=b,y[h+2+g]=f}p.attributes.position.values=i,a&&s.normal&&(s=p.attributes.normal.values,p.attributes.normal.values=new Float32Array(i.length),p.attributes.normal.values.set(s)),p.indices=y}else if(n){for(m=t.length/3,y=O.IndexDatatype.createTypedArray(m,c.length),h=0;h<c.length;h+=3)y[h]=c[h+2],y[h+1]=c[h+1],y[h+2]=c[h];p.indices=y}u.topAndBottom=new E.GeometryInstance({geometry:p})}var p=o.outerRing,v=A.EllipsoidTangentPlane.fromPoints(p,e).projectPointsOntoPlane(p,N);F.PolygonPipeline.computeWindingOrder2D(v)===F.WindingOrder.CLOCKWISE&&(p=p.slice().reverse());var P=V.PolygonGeometryLibrary.computeWallGeometry(p,e,r,a,l);u.walls.push(new E.GeometryInstance({geometry:P}));var C=o.holes;for(h=0;h<C.length;h++){var w=C[h],v=A.EllipsoidTangentPlane.fromPoints(w,e).projectPointsOntoPlane(w,N);F.PolygonPipeline.computeWindingOrder2D(v)===F.WindingOrder.COUNTER_CLOCKWISE&&(w=w.slice().reverse()),P=V.PolygonGeometryLibrary.computeWallGeometry(w,e,r,a,l),u.walls.push(new E.GeometryInstance({geometry:P}))}return u}(r,y[m],o,c[m],n,s,l,t,u);s&&l?(_=v.topAndBottom,b.geometry=V.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(_.geometry,h,f,r,n)):s?((_=v.topAndBottom).geometry.attributes.position.values=F.PolygonPipeline.scaleToGeodeticHeight(_.geometry.attributes.position.values,h,r,!n),b.geometry=_.geometry):l&&((_=v.topAndBottom).geometry.attributes.position.values=F.PolygonPipeline.scaleToGeodeticHeight(_.geometry.attributes.position.values,f,r,!0),b.geometry=_.geometry),(s||l)&&(b.wall=!1,_.geometry=L(b),d.push(_));var P=v.walls;b.wall=!0;for(var C=0;C<P.length;C++){var w=P[C];b.geometry=V.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(w.geometry,h,f,r,n),w.geometry=L(b),d.push(w)}}else for(m=0;m<y.length;m++){var x,T,I=new E.GeometryInstance({geometry:V.PolygonGeometryLibrary.createGeometryFromPositions(r,y[m],o,n,t,u)});I.geometry.attributes.position.values=F.PolygonPipeline.scaleToGeodeticHeight(I.geometry.attributes.position.values,h,r,!n),b.geometry=I.geometry,I.geometry=L(b),z.defined(e._offsetAttribute)&&(T=I.geometry.attributes.position.values.length,x=new Uint8Array(T/3),T=e._offsetAttribute===Y.GeometryOffsetAttribute.NONE?0:1,Y.arrayFill(x,T),I.geometry.attributes.applyOffset=new Q.GeometryAttribute({componentDatatype:j.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})),d.push(I)}p=G.GeometryPipeline.combineInstances(d)[0];p.attributes.position.values=new Float64Array(p.attributes.position.values),p.indices=O.IndexDatatype.createTypedArray(p.attributes.position.values.length/3,p.indices);g=p.attributes,a=U.BoundingSphere.fromVertices(g.position.values);return t.position||delete g.position,new Q.Geometry({attributes:g,indices:p.indices,primitiveType:p.primitiveType,boundingSphere:a,offsetAttribute:e._offsetAttribute})}}},P.createShadowVolume=function(e,t,r){var o=e._granularity,a=e._ellipsoid,t=t(o,a),r=r(o,a);return new P({polygonHierarchy:e._polygonHierarchy,ellipsoid:a,stRotation:e._stRotation,granularity:o,perPositionHeight:!1,extrudedHeight:t,height:r,vertexFormat:f.VertexFormat.POSITION_ONLY,shadowVolume:!0,arcType:e._arcType})},Object.defineProperties(P.prototype,{rectangle:{get:function(){var e;return z.defined(this._rectangle)||(e=this._polygonHierarchy.positions,this._rectangle=b(e,this._ellipsoid,this._arcType,this._granularity)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return z.defined(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(e){var t=-e._stRotation;if(0==t)return[0,0,0,1,1,0];var r=e._ellipsoid,o=e._polygonHierarchy.positions,e=e.rectangle;return Q.Geometry._textureCoordinateRotationPoints(o,t,r,e)}(this)),this._textureCoordinateRotationPoints}}}),function(e,t){return(e=z.defined(t)?P.unpack(e,t):e)._ellipsoid=W.Ellipsoid.clone(e._ellipsoid),P.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPolygonOutlineGeometry.js b/public/lib/Cesium/Workers/createPolygonOutlineGeometry.js new file mode 100644 index 0000000..f9712af --- /dev/null +++ b/public/lib/Cesium/Workers/createPolygonOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./ArcType-2b58731c","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Check-64f87f7d","./ComponentDatatype-8f71e605","./EllipsoidTangentPlane-0fb66b96","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonGeometryLibrary-b3087bff","./PolygonPipeline-55053b0a","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./arrayRemoveDuplicates-fc9e255d","./EllipsoidRhumbLine-21029cef"],function(m,d,E,b,P,e,A,_,v,G,L,T,H,C,O,D,t,i,r,o,n,a,l,s){"use strict";var x=[],I=[];function c(e){var t,i=e.polygonHierarchy,r=m.defaultValue(e.ellipsoid,d.Ellipsoid.WGS84),o=m.defaultValue(e.granularity,C.CesiumMath.RADIANS_PER_DEGREE),n=m.defaultValue(e.perPositionHeight,!1),a=n&&m.defined(e.extrudedHeight),l=m.defaultValue(e.arcType,E.ArcType.GEODESIC),s=m.defaultValue(e.height,0),y=m.defaultValue(e.extrudedHeight,s);a||(t=Math.max(s,y),y=Math.min(s,y),s=t),this._ellipsoid=d.Ellipsoid.clone(r),this._granularity=o,this._height=s,this._extrudedHeight=y,this._arcType=l,this._polygonHierarchy=i,this._perPositionHeight=n,this._perPositionHeightExtrude=a,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=O.PolygonGeometryLibrary.computeHierarchyPackedLength(i)+d.Ellipsoid.packedLength+8}c.pack=function(e,t,i){return i=m.defaultValue(i,0),i=O.PolygonGeometryLibrary.packPolygonHierarchy(e._polygonHierarchy,t,i),d.Ellipsoid.pack(e._ellipsoid,t,i),i+=d.Ellipsoid.packedLength,t[i++]=e._height,t[i++]=e._extrudedHeight,t[i++]=e._granularity,t[i++]=e._perPositionHeightExtrude?1:0,t[i++]=e._perPositionHeight?1:0,t[i++]=e._arcType,t[i++]=m.defaultValue(e._offsetAttribute,-1),t[i]=e.packedLength,t};var f=d.Ellipsoid.clone(d.Ellipsoid.UNIT_SPHERE),g={polygonHierarchy:{}};return c.unpack=function(e,t,i){t=m.defaultValue(t,0);var r=O.PolygonGeometryLibrary.unpackPolygonHierarchy(e,t);t=r.startingIndex,delete r.startingIndex;var o=d.Ellipsoid.unpack(e,t,f);t+=d.Ellipsoid.packedLength;var n=e[t++],a=e[t++],l=e[t++],s=1===e[t++],y=1===e[t++],u=e[t++],p=e[t++],t=e[t];return(i=!m.defined(i)?new c(g):i)._polygonHierarchy=r,i._ellipsoid=d.Ellipsoid.clone(o,i._ellipsoid),i._height=n,i._extrudedHeight=a,i._granularity=l,i._perPositionHeight=y,i._perPositionHeightExtrude=s,i._arcType=u,i._offsetAttribute=-1===p?void 0:p,i.packedLength=t,i},c.fromPositions=function(e){return new c({polygonHierarchy:{positions:(e=m.defaultValue(e,m.defaultValue.EMPTY_OBJECT)).positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute})},c.createGeometry=function(e){var t=e._ellipsoid,i=e._granularity,r=e._polygonHierarchy,o=e._perPositionHeight,n=e._arcType,a=O.PolygonGeometryLibrary.polygonOutlinesFromHierarchy(r,!o,t);if(0!==a.length){var l,s,y,u,p,d,c=[],f=C.CesiumMath.chordLength(i,t.maximumRadius),g=e._height,h=e._extrudedHeight;if(e._perPositionHeightExtrude||!C.CesiumMath.equalsEpsilon(g,h,0,C.CesiumMath.EPSILON2))for(l=0;l<a.length;l++)(u=function(e,t,i,r,o){var n,a=_.EllipsoidTangentPlane.fromPoints(t,e).projectPointsOntoPlane(t,x);D.PolygonPipeline.computeWindingOrder2D(a)===D.WindingOrder.CLOCKWISE&&(a.reverse(),t=t.slice().reverse());var l=t.length,s=new Array(l),y=0;if(r)for(n=new Float64Array(2*l*3*2),b=0;b<l;++b){s[b]=y/3;var u=t[b],p=t[(b+1)%l];n[y++]=u.x,n[y++]=u.y,n[y++]=u.z,n[y++]=p.x,n[y++]=p.y,n[y++]=p.z}else{var d,c=0;if(o===E.ArcType.GEODESIC)for(b=0;b<l;b++)c+=O.PolygonGeometryLibrary.subdivideLineCount(t[b],t[(b+1)%l],i);else if(o===E.ArcType.RHUMB)for(b=0;b<l;b++)c+=O.PolygonGeometryLibrary.subdivideRhumbLineCount(e,t[b],t[(b+1)%l],i);for(n=new Float64Array(3*c*2),b=0;b<l;++b){s[b]=y/3,o===E.ArcType.GEODESIC?d=O.PolygonGeometryLibrary.subdivideLine(t[b],t[(b+1)%l],i,I):o===E.ArcType.RHUMB&&(d=O.PolygonGeometryLibrary.subdivideRhumbLine(e,t[b],t[(b+1)%l],i,I));for(var f=d.length,g=0;g<f;++g)n[y++]=d[g]}}for(var l=n.length/6,h=s.length,r=2*(2*l+h),m=H.IndexDatatype.createTypedArray(l+h,r),y=0,b=0;b<l;++b)m[y++]=b,m[y++]=(b+1)%l,m[y++]=b+l,m[y++]=(b+1)%l+l;for(b=0;b<h;b++){var P=s[b];m[y++]=P,m[y++]=P+l}return new L.GeometryInstance({geometry:new v.Geometry({attributes:new G.GeometryAttributes({position:new v.GeometryAttribute({componentDatatype:A.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:n})}),indices:m,primitiveType:v.PrimitiveType.LINES})})}(t,a[l],f,o,n)).geometry=O.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(u.geometry,g,h,t,o),m.defined(e._offsetAttribute)&&(s=u.geometry.attributes.position.values.length/3,y=new Uint8Array(s),y=e._offsetAttribute===b.GeometryOffsetAttribute.TOP?b.arrayFill(y,1,0,s/2):(d=e._offsetAttribute===b.GeometryOffsetAttribute.NONE?0:1,b.arrayFill(y,d)),u.geometry.attributes.applyOffset=new v.GeometryAttribute({componentDatatype:A.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})),c.push(u);else for(l=0;l<a.length;l++)(u=function(e,t,i,r,o){var n,a=_.EllipsoidTangentPlane.fromPoints(t,e).projectPointsOntoPlane(t,x);D.PolygonPipeline.computeWindingOrder2D(a)===D.WindingOrder.CLOCKWISE&&(a.reverse(),t=t.slice().reverse());var l=t.length,s=0;if(r)for(n=new Float64Array(2*l*3),h=0;h<l;h++){var y=t[h],u=t[(h+1)%l];n[s++]=y.x,n[s++]=y.y,n[s++]=y.z,n[s++]=u.x,n[s++]=u.y,n[s++]=u.z}else{var p,d=0;if(o===E.ArcType.GEODESIC)for(h=0;h<l;h++)d+=O.PolygonGeometryLibrary.subdivideLineCount(t[h],t[(h+1)%l],i);else if(o===E.ArcType.RHUMB)for(h=0;h<l;h++)d+=O.PolygonGeometryLibrary.subdivideRhumbLineCount(e,t[h],t[(h+1)%l],i);for(n=new Float64Array(3*d),h=0;h<l;h++){o===E.ArcType.GEODESIC?p=O.PolygonGeometryLibrary.subdivideLine(t[h],t[(h+1)%l],i,I):o===E.ArcType.RHUMB&&(p=O.PolygonGeometryLibrary.subdivideRhumbLine(e,t[h],t[(h+1)%l],i,I));for(var c=p.length,f=0;f<c;++f)n[s++]=p[f]}}for(var r=2*(l=n.length/3),g=H.IndexDatatype.createTypedArray(l,r),s=0,h=0;h<l-1;h++)g[s++]=h,g[s++]=h+1;return g[s++]=l-1,g[s++]=0,new L.GeometryInstance({geometry:new v.Geometry({attributes:new G.GeometryAttributes({position:new v.GeometryAttribute({componentDatatype:A.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:n})}),indices:g,primitiveType:v.PrimitiveType.LINES})})}(t,a[l],f,o,n)).geometry.attributes.position.values=D.PolygonPipeline.scaleToGeodeticHeight(u.geometry.attributes.position.values,g,t,!o),m.defined(e._offsetAttribute)&&(p=u.geometry.attributes.position.values.length,p=new Uint8Array(p/3),d=e._offsetAttribute===b.GeometryOffsetAttribute.NONE?0:1,b.arrayFill(p,d),u.geometry.attributes.applyOffset=new v.GeometryAttribute({componentDatatype:A.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:p})),c.push(u);r=T.GeometryPipeline.combineInstances(c)[0],i=P.BoundingSphere.fromVertices(r.attributes.position.values);return new v.Geometry({attributes:r.attributes,indices:r.indices,primitiveType:r.primitiveType,boundingSphere:i,offsetAttribute:e._offsetAttribute})}},function(e,t){return(e=m.defined(t)?c.unpack(e,t):e)._ellipsoid=d.Ellipsoid.clone(e._ellipsoid),c.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPolylineGeometry.js b/public/lib/Cesium/Workers/createPolylineGeometry.js new file mode 100644 index 0000000..d0e85b1 --- /dev/null +++ b/public/lib/Cesium/Workers/createPolylineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./ArcType-2b58731c","./arrayRemoveDuplicates-fc9e255d","./Transforms-5295b227","./Color-821fa62a","./ComponentDatatype-8f71e605","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolylinePipeline-00f5e064","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./IntersectionTests-f5111308","./Plane-99b2becd"],function(Y,q,z,J,j,K,Q,e,X,Z,$,ee,te,y,t,r,a,o,n,i){"use strict";var re=[];function m(e){var t=(e=Y.defaultValue(e,Y.defaultValue.EMPTY_OBJECT)).positions,r=e.colors,a=Y.defaultValue(e.width,1),o=Y.defaultValue(e.colorsPerVertex,!1);this._positions=t,this._colors=r,this._width=a,this._colorsPerVertex=o,this._vertexFormat=y.VertexFormat.clone(Y.defaultValue(e.vertexFormat,y.VertexFormat.DEFAULT)),this._arcType=Y.defaultValue(e.arcType,z.ArcType.GEODESIC),this._granularity=Y.defaultValue(e.granularity,ee.CesiumMath.RADIANS_PER_DEGREE),this._ellipsoid=q.Ellipsoid.clone(Y.defaultValue(e.ellipsoid,q.Ellipsoid.WGS84)),this._workerName="createPolylineGeometry";t=1+t.length*q.Cartesian3.packedLength;t+=Y.defined(r)?1+r.length*K.Color.packedLength:1,this.packedLength=t+q.Ellipsoid.packedLength+y.VertexFormat.packedLength+4}m.pack=function(e,t,r){var a;r=Y.defaultValue(r,0);var o=e._positions,n=o.length;for(t[r++]=n,a=0;a<n;++a,r+=q.Cartesian3.packedLength)q.Cartesian3.pack(o[a],t,r);var i=e._colors,n=Y.defined(i)?i.length:0;for(t[r++]=n,a=0;a<n;++a,r+=K.Color.packedLength)K.Color.pack(i[a],t,r);return q.Ellipsoid.pack(e._ellipsoid,t,r),r+=q.Ellipsoid.packedLength,y.VertexFormat.pack(e._vertexFormat,t,r),r+=y.VertexFormat.packedLength,t[r++]=e._width,t[r++]=e._colorsPerVertex?1:0,t[r++]=e._arcType,t[r]=e._granularity,t};var f=q.Ellipsoid.clone(q.Ellipsoid.UNIT_SPHERE),h=new y.VertexFormat,C={positions:void 0,colors:void 0,ellipsoid:f,vertexFormat:h,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};m.unpack=function(e,t,r){t=Y.defaultValue(t,0);for(var a=e[t++],o=new Array(a),n=0;n<a;++n,t+=q.Cartesian3.packedLength)o[n]=q.Cartesian3.unpack(e,t);var i=0<(a=e[t++])?new Array(a):void 0;for(n=0;n<a;++n,t+=K.Color.packedLength)i[n]=K.Color.unpack(e,t);var l=q.Ellipsoid.unpack(e,t,f);t+=q.Ellipsoid.packedLength;var s=y.VertexFormat.unpack(e,t,h);t+=y.VertexFormat.packedLength;var p=e[t++],c=1===e[t++],d=e[t++],u=e[t];return Y.defined(r)?(r._positions=o,r._colors=i,r._ellipsoid=q.Ellipsoid.clone(l,r._ellipsoid),r._vertexFormat=y.VertexFormat.clone(s,r._vertexFormat),r._width=p,r._colorsPerVertex=c,r._arcType=d,r._granularity=u,r):(C.positions=o,C.colors=i,C.width=p,C.colorsPerVertex=c,C.arcType=d,C.granularity=u,new m(C))};var ae=new q.Cartesian3,oe=new q.Cartesian3,ne=new q.Cartesian3,ie=new q.Cartesian3;return m.createGeometry=function(e){var t=e._width,r=e._vertexFormat,a=e._colors,o=e._colorsPerVertex,n=e._arcType,i=e._granularity,l=e._ellipsoid,s=J.arrayRemoveDuplicates(e._positions,q.Cartesian3.equalsEpsilon);if(!((E=s.length)<2||t<=0)){if(n===z.ArcType.GEODESIC||n===z.ArcType.RHUMB){var p,c=n===z.ArcType.GEODESIC?(p=ee.CesiumMath.chordLength(i,l.maximumRadius),te.PolylinePipeline.numberOfPoints):(p=i,te.PolylinePipeline.numberOfPointsRhumbLine),d=te.PolylinePipeline.extractHeights(s,l);if(Y.defined(a)){for(var u=1,y=0;y<E-1;++y)u+=c(s[y],s[y+1],p);var m=new Array(u),f=0;for(y=0;y<E-1;++y){var h=s[y],C=s[y+1],v=a[y],b=c(h,C,p);if(o&&y<u)for(var g=function(e,t,r){var a=re;a.length=r;var o=e.red,n=e.green,i=e.blue,l=e.alpha,s=t.red,p=t.green,c=t.blue,d=t.alpha;if(K.Color.equals(e,t)){for(h=0;h<r;h++)a[h]=K.Color.clone(e);return a}for(var u=(s-o)/r,y=(p-n)/r,m=(c-i)/r,f=(d-l)/r,h=0;h<r;h++)a[h]=new K.Color(o+h*u,n+h*y,i+h*m,l+h*f);return a}(v,a[y+1],b),_=g.length,A=0;A<_;++A)m[f++]=g[A];else for(A=0;A<b;++A)m[f++]=K.Color.clone(v)}m[f]=K.Color.clone(a[a.length-1]),a=m,re.length=0}s=n===z.ArcType.GEODESIC?te.PolylinePipeline.generateCartesianArc({positions:s,minDistance:p,ellipsoid:l,height:d}):te.PolylinePipeline.generateCartesianRhumbArc({positions:s,granularity:p,ellipsoid:l,height:d})}var E,P,w,T,l=4*(E=s.length)-4,x=new Float64Array(3*l),k=new Float64Array(3*l),D=new Float64Array(3*l),V=new Float32Array(2*l),L=r.st?new Float32Array(2*l):void 0,F=Y.defined(a)?new Uint8Array(4*l):void 0,G=0,O=0,R=0,I=0;for(A=0;A<E;++A){0===A?(P=ae,q.Cartesian3.subtract(s[0],s[1],P),q.Cartesian3.add(s[0],P,P)):P=s[A-1],q.Cartesian3.clone(P,ne),q.Cartesian3.clone(s[A],oe),A===E-1?(P=ae,q.Cartesian3.subtract(s[E-1],s[E-2],P),q.Cartesian3.add(s[E-1],P,P)):P=s[A+1],q.Cartesian3.clone(P,ie),Y.defined(F)&&(w=0===A||o?a[A]:a[A-1],A!==E-1&&(T=a[A]));for(var S=A===E-1?2:4,B=0===A?2:0;B<S;++B){q.Cartesian3.pack(oe,x,G),q.Cartesian3.pack(ne,k,G),q.Cartesian3.pack(ie,D,G),G+=3;var U=B-2<0?-1:1;V[O++]=B%2*2-1,V[O++]=U*t,r.st&&(L[R++]=A/(E-1),L[R++]=Math.max(V[O-2],0)),Y.defined(F)&&(U=B<2?w:T,F[I++]=K.Color.floatToByte(U.red),F[I++]=K.Color.floatToByte(U.green),F[I++]=K.Color.floatToByte(U.blue),F[I++]=K.Color.floatToByte(U.alpha))}}d=new Z.GeometryAttributes;d.position=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:x}),d.prevPosition=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:k}),d.nextPosition=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:D}),d.expandAndWidth=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:V}),r.st&&(d.st=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:L})),Y.defined(F)&&(d.color=new X.GeometryAttribute({componentDatatype:Q.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:4,values:F,normalize:!0}));var N=$.IndexDatatype.createTypedArray(l,6*E-6),M=0,H=0,W=E-1;for(A=0;A<W;++A)N[H++]=M,N[H++]=M+2,N[H++]=M+1,N[H++]=M+1,N[H++]=M+2,N[H++]=M+3,M+=4;return new X.Geometry({attributes:d,indices:N,primitiveType:X.PrimitiveType.TRIANGLES,boundingSphere:j.BoundingSphere.fromPoints(s),geometryType:X.GeometryType.POLYLINES})}},function(e,t){return(e=Y.defined(t)?m.unpack(e,t):e)._ellipsoid=q.Ellipsoid.clone(e._ellipsoid),m.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPolylineVolumeGeometry.js b/public/lib/Cesium/Workers/createPolylineVolumeGeometry.js new file mode 100644 index 0000000..7323e4c --- /dev/null +++ b/public/lib/Cesium/Workers/createPolylineVolumeGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./arrayRemoveDuplicates-fc9e255d","./BoundingRectangle-755c152f","./Transforms-5295b227","./ComponentDatatype-8f71e605","./PolylineVolumeGeometryLibrary-ec280c2f","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29"],function(c,u,r,a,G,A,o,e,R,D,I,O,i,S,g,t,n,l,s,p,d,y,m,h,f){"use strict";var b={};function B(e,t){c.defined(b[e])||(b[e]=!0,console.warn(c.defaultValue(t,e)))}function v(e){var t=(e=c.defaultValue(e,c.defaultValue.EMPTY_OBJECT)).polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=u.Ellipsoid.clone(c.defaultValue(e.ellipsoid,u.Ellipsoid.WGS84)),this._cornerType=c.defaultValue(e.cornerType,o.CornerType.ROUNDED),this._vertexFormat=g.VertexFormat.clone(c.defaultValue(e.vertexFormat,g.VertexFormat.DEFAULT)),this._granularity=c.defaultValue(e.granularity,i.CesiumMath.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeGeometry";t=1+t.length*u.Cartesian3.packedLength;t+=1+n.length*u.Cartesian2.packedLength,this.packedLength=t+u.Ellipsoid.packedLength+g.VertexFormat.packedLength+2}B.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.",B.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored",B.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored",B.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored",v.pack=function(e,t,n){var i;n=c.defaultValue(n,0);var r=e._positions,a=r.length;for(t[n++]=a,i=0;i<a;++i,n+=u.Cartesian3.packedLength)u.Cartesian3.pack(r[i],t,n);var o=e._shape,a=o.length;for(t[n++]=a,i=0;i<a;++i,n+=u.Cartesian2.packedLength)u.Cartesian2.pack(o[i],t,n);return u.Ellipsoid.pack(e._ellipsoid,t,n),n+=u.Ellipsoid.packedLength,g.VertexFormat.pack(e._vertexFormat,t,n),n+=g.VertexFormat.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var E=u.Ellipsoid.clone(u.Ellipsoid.UNIT_SPHERE),P=new g.VertexFormat,_={polylinePositions:void 0,shapePositions:void 0,ellipsoid:E,vertexFormat:P,cornerType:void 0,granularity:void 0};v.unpack=function(e,t,n){t=c.defaultValue(t,0);for(var i=e[t++],r=new Array(i),a=0;a<i;++a,t+=u.Cartesian3.packedLength)r[a]=u.Cartesian3.unpack(e,t);var i=e[t++],o=new Array(i);for(a=0;a<i;++a,t+=u.Cartesian2.packedLength)o[a]=u.Cartesian2.unpack(e,t);var l=u.Ellipsoid.unpack(e,t,E);t+=u.Ellipsoid.packedLength;var s=g.VertexFormat.unpack(e,t,P);t+=g.VertexFormat.packedLength;var p=e[t++],d=e[t];return c.defined(n)?(n._positions=r,n._shape=o,n._ellipsoid=u.Ellipsoid.clone(l,n._ellipsoid),n._vertexFormat=g.VertexFormat.clone(s,n._vertexFormat),n._cornerType=p,n._granularity=d,n):(_.polylinePositions=r,_.shapePositions=o,_.cornerType=p,_.granularity=d,new v(_))};var x=new a.BoundingRectangle;return v.createGeometry=function(e){var t=e._positions,n=r.arrayRemoveDuplicates(t,u.Cartesian3.equalsEpsilon),i=e._shape,i=o.PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(i);if(!(n.length<2||i.length<3)){S.PolygonPipeline.computeWindingOrder2D(i)===S.WindingOrder.CLOCKWISE&&i.reverse();t=a.BoundingRectangle.fromPoints(i,x);return function(e,t,n,i){var r=new D.GeometryAttributes;i.position&&(r.position=new R.GeometryAttribute({componentDatatype:A.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:e}));var a,o,l,s,p,d=t.length,c=e.length/3,u=(c-2*d)/(2*d),g=S.PolygonPipeline.triangulate(t),y=(u-1)*d*6+2*g.length,m=O.IndexDatatype.createTypedArray(c,y),h=2*d,f=0;for(C=0;C<u-1;C++){for(a=0;a<d-1;a++)p=(o=2*a+C*d*2)+h,s=(l=o+1)+h,m[f++]=l,m[f++]=o,m[f++]=s,m[f++]=s,m[f++]=o,m[f++]=p;s=(l=(o=2*d-2+C*d*2)+1)+h,p=o+h,m[f++]=l,m[f++]=o,m[f++]=s,m[f++]=s,m[f++]=o,m[f++]=p}if(i.st||i.tangent||i.bitangent){for(var b,v,E=new Float32Array(2*c),P=1/(u-1),_=1/n.height,x=n.height/2,k=0,C=0;C<u;C++){for(b=C*P,v=_*(t[0].y+x),E[k++]=b,E[k++]=v,a=1;a<d;a++)v=_*(t[a].y+x),E[k++]=b,E[k++]=v,E[k++]=b,E[k++]=v;v=_*(t[0].y+x),E[k++]=b,E[k++]=v}for(a=0;a<d;a++)b=0,v=_*(t[a].y+x),E[k++]=b,E[k++]=v;for(a=0;a<d;a++)b=(u-1)*P,v=_*(t[a].y+x),E[k++]=b,E[k++]=v;r.st=new R.GeometryAttribute({componentDatatype:A.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:new Float32Array(E)})}var V=c-2*d;for(C=0;C<g.length;C+=3){var L=g[C]+V,w=g[C+1]+V,F=g[C+2]+V;m[f++]=L,m[f++]=w,m[f++]=F,m[f++]=F+d,m[f++]=w+d,m[f++]=L+d}var T=new R.Geometry({attributes:r,indices:m,boundingSphere:G.BoundingSphere.fromVertices(e),primitiveType:R.PrimitiveType.TRIANGLES});if(i.normal&&(T=I.GeometryPipeline.computeNormal(T)),i.tangent||i.bitangent){try{T=I.GeometryPipeline.computeTangentAndBitangent(T)}catch(e){B("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(T.attributes.tangent=void 0),i.bitangent||(T.attributes.bitangent=void 0),i.st||(T.attributes.st=void 0)}return T}(o.PolylineVolumeGeometryLibrary.computePositions(n,i,t,e,!0),i,t,e._vertexFormat)}},function(e,t){return(e=c.defined(t)?v.unpack(e,t):e)._ellipsoid=u.Ellipsoid.clone(e._ellipsoid),v.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createPolylineVolumeOutlineGeometry.js b/public/lib/Cesium/Workers/createPolylineVolumeOutlineGeometry.js new file mode 100644 index 0000000..ef16ff2 --- /dev/null +++ b/public/lib/Cesium/Workers/createPolylineVolumeOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./arrayRemoveDuplicates-fc9e255d","./BoundingRectangle-755c152f","./Transforms-5295b227","./ComponentDatatype-8f71e605","./PolylineVolumeGeometryLibrary-ec280c2f","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef"],function(d,c,a,r,u,y,o,e,h,f,g,t,l,i,n,s,p,m,b,E,v){"use strict";function P(e){var i=(e=d.defaultValue(e,d.defaultValue.EMPTY_OBJECT)).polylinePositions,n=e.shapePositions;this._positions=i,this._shape=n,this._ellipsoid=c.Ellipsoid.clone(d.defaultValue(e.ellipsoid,c.Ellipsoid.WGS84)),this._cornerType=d.defaultValue(e.cornerType,o.CornerType.ROUNDED),this._granularity=d.defaultValue(e.granularity,t.CesiumMath.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeOutlineGeometry";i=1+i.length*c.Cartesian3.packedLength;i+=1+n.length*c.Cartesian2.packedLength,this.packedLength=i+c.Ellipsoid.packedLength+2}P.pack=function(e,i,n){var t;n=d.defaultValue(n,0);var a=e._positions,r=a.length;for(i[n++]=r,t=0;t<r;++t,n+=c.Cartesian3.packedLength)c.Cartesian3.pack(a[t],i,n);var o=e._shape,r=o.length;for(i[n++]=r,t=0;t<r;++t,n+=c.Cartesian2.packedLength)c.Cartesian2.pack(o[t],i,n);return c.Ellipsoid.pack(e._ellipsoid,i,n),n+=c.Ellipsoid.packedLength,i[n++]=e._cornerType,i[n]=e._granularity,i};var _=c.Ellipsoid.clone(c.Ellipsoid.UNIT_SPHERE),k={polylinePositions:void 0,shapePositions:void 0,ellipsoid:_,height:void 0,cornerType:void 0,granularity:void 0};P.unpack=function(e,i,n){i=d.defaultValue(i,0);for(var t=e[i++],a=new Array(t),r=0;r<t;++r,i+=c.Cartesian3.packedLength)a[r]=c.Cartesian3.unpack(e,i);var t=e[i++],o=new Array(t);for(r=0;r<t;++r,i+=c.Cartesian2.packedLength)o[r]=c.Cartesian2.unpack(e,i);var l=c.Ellipsoid.unpack(e,i,_);i+=c.Ellipsoid.packedLength;var s=e[i++],p=e[i];return d.defined(n)?(n._positions=a,n._shape=o,n._ellipsoid=c.Ellipsoid.clone(l,n._ellipsoid),n._cornerType=s,n._granularity=p,n):(k.polylinePositions=a,k.shapePositions=o,k.cornerType=s,k.granularity=p,new P(k))};var C=new r.BoundingRectangle;return P.createGeometry=function(e){var i=e._positions,n=a.arrayRemoveDuplicates(i,c.Cartesian3.equalsEpsilon),t=e._shape,t=o.PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(t);if(!(n.length<2||t.length<3)){l.PolygonPipeline.computeWindingOrder2D(t)===l.WindingOrder.CLOCKWISE&&t.reverse();i=r.BoundingRectangle.fromPoints(t,C);return function(e,i){var n=new f.GeometryAttributes;n.position=new h.GeometryAttribute({componentDatatype:y.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:e});var t=i.length,i=n.position.values.length/3,a=e.length/3/t,r=g.IndexDatatype.createTypedArray(i,2*t*(1+a)),o=0,l=0,s=l*t;for(c=0;c<t-1;c++)r[o++]=c+s,r[o++]=c+s+1;for(r[o++]=t-1+s,r[o++]=s,s=(l=a-1)*t,c=0;c<t-1;c++)r[o++]=c+s,r[o++]=c+s+1;for(r[o++]=t-1+s,r[o++]=s,l=0;l<a-1;l++)for(var p=t*l,d=p+t,c=0;c<t;c++)r[o++]=c+p,r[o++]=c+d;return new h.Geometry({attributes:n,indices:g.IndexDatatype.createTypedArray(i,r),boundingSphere:u.BoundingSphere.fromVertices(e),primitiveType:h.PrimitiveType.LINES})}(o.PolylineVolumeGeometryLibrary.computePositions(n,t,i,e,!1),t)}},function(e,i){return(e=d.defined(i)?P.unpack(e,i):e)._ellipsoid=c.Ellipsoid.clone(e._ellipsoid),P.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createRectangleGeometry.js b/public/lib/Cesium/Workers/createRectangleGeometry.js new file mode 100644 index 0000000..43c93ed --- /dev/null +++ b/public/lib/Cesium/Workers/createRectangleGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./Check-64f87f7d","./ComponentDatatype-8f71e605","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./GeometryInstance-d18842cb","./GeometryPipeline-a588d10d","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./RectangleGeometryLibrary-8c98c500","./VertexFormat-63b3c6da","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./AttributeCompression-a99f24b9","./EncodedCartesian3-c36ced29","./IntersectionTests-f5111308","./Plane-99b2becd","./EllipsoidRhumbLine-21029cef"],function(Q,W,J,N,t,j,Z,r,K,$,tt,et,at,S,rt,e,a,n,i,o,s,l){"use strict";var nt=new W.Cartesian3,it=new W.Cartesian3,ot=new W.Cartesian3,st=new W.Cartesian3,p=new W.Rectangle,I=new W.Cartesian2,d=new N.BoundingSphere,g=new N.BoundingSphere;function lt(t,e){var a=new Z.Geometry({attributes:new r.GeometryAttributes,primitiveType:Z.PrimitiveType.TRIANGLES});return a.attributes.position=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:e.positions}),t.normal&&(a.attributes.normal=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:e.normals})),t.tangent&&(a.attributes.tangent=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:e.tangents})),t.bitangent&&(a.attributes.bitangent=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:e.bitangents})),a}var ut=new W.Cartesian3,ct=new W.Cartesian3;function mt(t,e){var a=t._vertexFormat,r=t._ellipsoid,n=e.height,i=e.width,o=e.northCap,s=e.southCap,l=0,u=n,c=n,t=0;o&&(--c,t+=l=1),s&&(--u,--c,t+=1),t+=i*c;for(var m=a.position?new Float64Array(3*t):void 0,p=a.st?new Float32Array(2*t):void 0,d=0,g=0,y=nt,f=I,h=Number.MAX_VALUE,b=Number.MAX_VALUE,v=-Number.MAX_VALUE,_=-Number.MAX_VALUE,A=l;A<u;++A)for(var x=0;x<i;++x)S.RectangleGeometryLibrary.computePosition(e,r,a.st,A,x,y,f),m[d++]=y.x,m[d++]=y.y,m[d++]=y.z,a.st&&(p[g++]=f.x,p[g++]=f.y,h=Math.min(h,f.x),b=Math.min(b,f.y),v=Math.max(v,f.x),_=Math.max(_,f.y));if(o&&(S.RectangleGeometryLibrary.computePosition(e,r,a.st,0,0,y,f),m[d++]=y.x,m[d++]=y.y,m[d++]=y.z,a.st&&(p[g++]=f.x,p[g++]=f.y,h=f.x,b=f.y,v=f.x,_=f.y)),s&&(S.RectangleGeometryLibrary.computePosition(e,r,a.st,n-1,0,y,f),m[d++]=y.x,m[d++]=y.y,m[d]=y.z,a.st&&(p[g++]=f.x,p[g]=f.y,h=Math.min(h,f.x),b=Math.min(b,f.y),v=Math.max(v,f.x),_=Math.max(_,f.y))),a.st&&(h<0||b<0||1<v||1<_))for(var w=0;w<p.length;w+=2)p[w]=(p[w]-h)/(v-h),p[w+1]=(p[w+1]-b)/(_-b);l=function(t,e,a,r){var n=t.length,i=e.normal?new Float32Array(n):void 0,o=e.tangent?new Float32Array(n):void 0,s=e.bitangent?new Float32Array(n):void 0,l=0,u=st,c=ot,m=it;if(e.normal||e.tangent||e.bitangent)for(var p=0;p<n;p+=3){var d=W.Cartesian3.fromArray(t,p,nt),g=l+1,y=l+2,m=a.geodeticSurfaceNormal(d,m);(e.tangent||e.bitangent)&&(W.Cartesian3.cross(W.Cartesian3.UNIT_Z,m,c),N.Matrix3.multiplyByVector(r,c,c),W.Cartesian3.normalize(c,c),e.bitangent&&W.Cartesian3.normalize(W.Cartesian3.cross(m,c,u),u)),e.normal&&(i[l]=m.x,i[g]=m.y,i[y]=m.z),e.tangent&&(o[l]=c.x,o[g]=c.y,o[y]=c.z),e.bitangent&&(s[l]=u.x,s[g]=u.y,s[y]=u.z),l+=3}return lt(e,{positions:t,normals:i,tangents:o,bitangents:s})}(m,a,r,e.tangentRotationMatrix),n=6*(i-1)*(c-1);o&&(n+=3*(i-1)),s&&(n+=3*(i-1));for(var C=tt.IndexDatatype.createTypedArray(t,n),R=0,E=0,F=0;F<c-1;++F){for(var G=0;G<i-1;++G){var P=R+i,V=P+1,L=R+1;C[E++]=R,C[E++]=P,C[E++]=L,C[E++]=L,C[E++]=P,C[E++]=V,++R}++R}if(o||s){var D,M,T=t-1,O=t-1;if(o&&s&&(T=t-2),R=0,o)for(F=0;F<i-1;F++)M=(D=R)+1,C[E++]=T,C[E++]=D,C[E++]=M,++R;if(s)for(R=(c-1)*i,F=0;F<i-1;F++)M=(D=R)+1,C[E++]=D,C[E++]=O,C[E++]=M,++R}return l.indices=C,a.st&&(l.attributes.st=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:p})),l}function pt(t,e,a,r,n){return t[e++]=r[a],t[e++]=r[a+1],t[e++]=r[a+2],t[e++]=n[a],t[e++]=n[a+1],t[e]=n[a+2],t}function dt(t,e,a,r){return t[e++]=r[a],t[e++]=r[a+1],t[e++]=r[a],t[e]=r[a+1],t}var gt=new rt.VertexFormat;function y(t,e){var a=t._shadowVolume,r=t._offsetAttribute,n=t._vertexFormat,i=t._extrudedHeight,o=t._surfaceHeight,s=t._ellipsoid,l=e.height,u=e.width;a&&((b=rt.VertexFormat.clone(n,gt)).normal=!0,t._vertexFormat=b);var c=mt(t,e);a&&(t._vertexFormat=n);var m=at.PolygonPipeline.scaleToGeodeticHeight(c.attributes.position.values,o,s,!1),p=2*(z=(m=new Float64Array(m)).length),d=new Float64Array(p);d.set(m);var g=at.PolygonPipeline.scaleToGeodeticHeight(c.attributes.position.values,i,s);d.set(g,z),c.attributes.position.values=d;var y,f,h,b=n.normal?new Float32Array(p):void 0,t=n.tangent?new Float32Array(p):void 0,o=n.bitangent?new Float32Array(p):void 0,i=n.st?new Float32Array(p/3*2):void 0;if(n.normal){for(f=c.attributes.normal.values,b.set(f),_=0;_<z;_++)f[_]=-f[_];b.set(f,z),c.attributes.normal.values=b}if(a){f=c.attributes.normal.values,n.normal||(c.attributes.normal=void 0);for(var v=new Float32Array(p),_=0;_<z;_++)f[_]=-f[_];v.set(f,z),c.attributes.extrudeDirection=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:v})}d=Q.defined(r);if(d&&(b=z/3*2,v=new Uint8Array(b),v=r===J.GeometryOffsetAttribute.TOP?J.arrayFill(v,1,0,b/2):(h=r===J.GeometryOffsetAttribute.NONE?0:1,J.arrayFill(v,h)),c.attributes.applyOffset=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:v})),n.tangent){var A=c.attributes.tangent.values;for(t.set(A),_=0;_<z;_++)A[_]=-A[_];t.set(A,z),c.attributes.tangent.values=t}n.bitangent&&(E=c.attributes.bitangent.values,o.set(E),o.set(E,z),c.attributes.bitangent.values=o),n.st&&(y=c.attributes.st.values,i.set(y),i.set(y,z/3*2),c.attributes.st.values=i);var x=c.indices,w=x.length,C=z/3,R=tt.IndexDatatype.createTypedArray(p/3,2*w);for(R.set(x),_=0;_<w;_+=3)R[_+w]=x[_+2]+C,R[_+1+w]=x[_+1]+C,R[_+2+w]=x[_]+C;c.indices=R;var t=e.northCap,E=e.southCap,o=l,i=2,p=0,e=4,l=4;t&&(--i,--o,p+=1,e-=2,--l),E&&(--i,--o,p+=1,e-=2,--l);var l=2*((p+=i*u+2*o-e)+l),F=new Float64Array(3*l),G=a?new Float32Array(3*l):void 0,P=d?new Uint8Array(l):void 0,V=n.st?new Float32Array(2*l):void 0,L=r===J.GeometryOffsetAttribute.TOP;d&&!L&&(h=r===J.GeometryOffsetAttribute.ALL?1:0,P=J.arrayFill(P,h));var D=0,M=0,T=0,O=0,N=u*o;for(_=0;_<N;_+=u)F=pt(F,D,I=3*_,m,g),D+=6,n.st&&(V=dt(V,M,2*_,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1);if(E){var S=t?1+N:N,I=3*S;for(_=0;_<2;_++)F=pt(F,D,I,m,g),D+=6,n.st&&(V=dt(V,M,2*S,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1)}else for(_=N-u;_<N;_++)F=pt(F,D,I=3*_,m,g),D+=6,n.st&&(V=dt(V,M,2*_,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1);for(_=N-1;0<_;_-=u)F=pt(F,D,I=3*_,m,g),D+=6,n.st&&(V=dt(V,M,2*_,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1);if(t){var k=N;for(I=3*k,_=0;_<2;_++)F=pt(F,D,I,m,g),D+=6,n.st&&(V=dt(V,M,2*k,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1)}else for(_=u-1;0<=_;_--)F=pt(F,D,I=3*_,m,g),D+=6,n.st&&(V=dt(V,M,2*_,y),M+=4),a&&(T+=3,G[T++]=f[I],G[T++]=f[I+1],G[T++]=f[I+2]),L&&(P[O++]=1,O+=1);s=function(t,e,a){var r=t.length,n=e.normal?new Float32Array(r):void 0,i=e.tangent?new Float32Array(r):void 0,o=e.bitangent?new Float32Array(r):void 0,s=0,l=0,u=0,c=!0,m=st,p=ot,d=it;if(e.normal||e.tangent||e.bitangent)for(var g=0;g<r;g+=6){var y,f=W.Cartesian3.fromArray(t,g,nt),h=W.Cartesian3.fromArray(t,(g+6)%r,ut);c&&(y=W.Cartesian3.fromArray(t,(g+3)%r,ct),W.Cartesian3.subtract(h,f,h),W.Cartesian3.subtract(y,f,y),d=W.Cartesian3.normalize(W.Cartesian3.cross(y,h,d),d),c=!1),W.Cartesian3.equalsEpsilon(h,f,et.CesiumMath.EPSILON10)&&(c=!0),(e.tangent||e.bitangent)&&(m=a.geodeticSurfaceNormal(f,m),e.tangent&&(p=W.Cartesian3.normalize(W.Cartesian3.cross(m,d,p),p))),e.normal&&(n[s++]=d.x,n[s++]=d.y,n[s++]=d.z,n[s++]=d.x,n[s++]=d.y,n[s++]=d.z),e.tangent&&(i[l++]=p.x,i[l++]=p.y,i[l++]=p.z,i[l++]=p.x,i[l++]=p.y,i[l++]=p.z),e.bitangent&&(o[u++]=m.x,o[u++]=m.y,o[u++]=m.z,o[u++]=m.x,o[u++]=m.y,o[u++]=m.z)}return lt(e,{positions:t,normals:n,tangents:i,bitangents:o})}(F,n,s);n.st&&(s.attributes.st=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:V})),a&&(s.attributes.extrudeDirection=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:G})),d&&(s.attributes.applyOffset=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:P}));var H=tt.IndexDatatype.createTypedArray(l,6*p),z=F.length/3,B=0;for(_=0;_<z-1;_+=2){var U,Y=((U=_)+2)%z,q=W.Cartesian3.fromArray(F,3*U,ut),X=W.Cartesian3.fromArray(F,3*Y,ct);W.Cartesian3.equalsEpsilon(q,X,et.CesiumMath.EPSILON10)||(X=(2+(q=(U+1)%z))%z,H[B++]=U,H[B++]=q,H[B++]=Y,H[B++]=Y,H[B++]=q,H[B++]=X)}return s.indices=H,(s=$.GeometryPipeline.combineInstances([new K.GeometryInstance({geometry:c}),new K.GeometryInstance({geometry:s})]))[0]}var u=[new W.Cartesian3,new W.Cartesian3,new W.Cartesian3,new W.Cartesian3],f=new W.Cartographic,h=new W.Cartographic;function c(t,e,a,r,n){if(0===a)return W.Rectangle.clone(t,n);var i=S.RectangleGeometryLibrary.computeOptions(t,e,a,0,p,f),t=i.height,e=i.width,a=u;return S.RectangleGeometryLibrary.computePosition(i,r,!1,0,0,a[0]),S.RectangleGeometryLibrary.computePosition(i,r,!1,0,e-1,a[1]),S.RectangleGeometryLibrary.computePosition(i,r,!1,t-1,0,a[2]),S.RectangleGeometryLibrary.computePosition(i,r,!1,t-1,e-1,a[3]),W.Rectangle.fromCartesianArray(a,r,n)}function b(t){var e=(t=Q.defaultValue(t,Q.defaultValue.EMPTY_OBJECT)).rectangle,a=Q.defaultValue(t.height,0),r=Q.defaultValue(t.extrudedHeight,a);this._rectangle=W.Rectangle.clone(e),this._granularity=Q.defaultValue(t.granularity,et.CesiumMath.RADIANS_PER_DEGREE),this._ellipsoid=W.Ellipsoid.clone(Q.defaultValue(t.ellipsoid,W.Ellipsoid.WGS84)),this._surfaceHeight=Math.max(a,r),this._rotation=Q.defaultValue(t.rotation,0),this._stRotation=Q.defaultValue(t.stRotation,0),this._vertexFormat=rt.VertexFormat.clone(Q.defaultValue(t.vertexFormat,rt.VertexFormat.DEFAULT)),this._extrudedHeight=Math.min(a,r),this._shadowVolume=Q.defaultValue(t.shadowVolume,!1),this._workerName="createRectangleGeometry",this._offsetAttribute=t.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}b.packedLength=W.Rectangle.packedLength+W.Ellipsoid.packedLength+rt.VertexFormat.packedLength+7,b.pack=function(t,e,a){return a=Q.defaultValue(a,0),W.Rectangle.pack(t._rectangle,e,a),a+=W.Rectangle.packedLength,W.Ellipsoid.pack(t._ellipsoid,e,a),a+=W.Ellipsoid.packedLength,rt.VertexFormat.pack(t._vertexFormat,e,a),a+=rt.VertexFormat.packedLength,e[a++]=t._granularity,e[a++]=t._surfaceHeight,e[a++]=t._rotation,e[a++]=t._stRotation,e[a++]=t._extrudedHeight,e[a++]=t._shadowVolume?1:0,e[a]=Q.defaultValue(t._offsetAttribute,-1),e};var v=new W.Rectangle,_=W.Ellipsoid.clone(W.Ellipsoid.UNIT_SPHERE),A={rectangle:v,ellipsoid:_,vertexFormat:gt,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};b.unpack=function(t,e,a){e=Q.defaultValue(e,0);var r=W.Rectangle.unpack(t,e,v);e+=W.Rectangle.packedLength;var n=W.Ellipsoid.unpack(t,e,_);e+=W.Ellipsoid.packedLength;var i=rt.VertexFormat.unpack(t,e,gt);e+=rt.VertexFormat.packedLength;var o=t[e++],s=t[e++],l=t[e++],u=t[e++],c=t[e++],m=1===t[e++],e=t[e];return Q.defined(a)?(a._rectangle=W.Rectangle.clone(r,a._rectangle),a._ellipsoid=W.Ellipsoid.clone(n,a._ellipsoid),a._vertexFormat=rt.VertexFormat.clone(i,a._vertexFormat),a._granularity=o,a._surfaceHeight=s,a._rotation=l,a._stRotation=u,a._extrudedHeight=c,a._shadowVolume=m,a._offsetAttribute=-1===e?void 0:e,a):(A.granularity=o,A.height=s,A.rotation=l,A.stRotation=u,A.extrudedHeight=c,A.shadowVolume=m,A.offsetAttribute=-1===e?void 0:e,new b(A))},b.computeRectangle=function(t,e){var a=(t=Q.defaultValue(t,Q.defaultValue.EMPTY_OBJECT)).rectangle,r=Q.defaultValue(t.granularity,et.CesiumMath.RADIANS_PER_DEGREE),n=Q.defaultValue(t.ellipsoid,W.Ellipsoid.WGS84);return c(a,r,Q.defaultValue(t.rotation,0),n,e)};var x=new N.Matrix3,w=new N.Quaternion,C=new W.Cartographic;b.createGeometry=function(t){if(!et.CesiumMath.equalsEpsilon(t._rectangle.north,t._rectangle.south,et.CesiumMath.EPSILON10)&&!et.CesiumMath.equalsEpsilon(t._rectangle.east,t._rectangle.west,et.CesiumMath.EPSILON10)){var e=t._rectangle,a=t._ellipsoid,r=t._rotation,n=t._stRotation,i=t._vertexFormat,o=S.RectangleGeometryLibrary.computeOptions(e,t._granularity,r,n,p,f,h),s=x;0!==n||0!==r?(c=W.Rectangle.center(e,C),m=a.geodeticSurfaceNormalCartographic(c,ut),N.Quaternion.fromAxisAngle(m,-n,w),N.Matrix3.fromQuaternion(w,s)):N.Matrix3.clone(N.Matrix3.IDENTITY,s);var l,u,c=t._surfaceHeight,m=t._extrudedHeight,n=!et.CesiumMath.equalsEpsilon(c,m,0,et.CesiumMath.EPSILON2);return o.lonScalar=1/t._rectangle.width,o.latScalar=1/t._rectangle.height,o.tangentRotationMatrix=s,e=t._rectangle,c=n?(l=y(t,o),n=N.BoundingSphere.fromRectangle3D(e,a,c,g),u=N.BoundingSphere.fromRectangle3D(e,a,m,d),N.BoundingSphere.union(n,u)):((l=mt(t,o)).attributes.position.values=at.PolygonPipeline.scaleToGeodeticHeight(l.attributes.position.values,c,a,!1),Q.defined(t._offsetAttribute)&&(u=l.attributes.position.values.length,o=new Uint8Array(u/3),u=t._offsetAttribute===J.GeometryOffsetAttribute.NONE?0:1,J.arrayFill(o,u),l.attributes.applyOffset=new Z.GeometryAttribute({componentDatatype:j.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:o})),N.BoundingSphere.fromRectangle3D(e,a,c)),i.position||delete l.attributes.position,new Z.Geometry({attributes:l.attributes,indices:l.indices,primitiveType:l.primitiveType,boundingSphere:c,offsetAttribute:t._offsetAttribute})}},b.createShadowVolume=function(t,e,a){var r=t._granularity,n=t._ellipsoid,e=e(r,n),a=a(r,n);return new b({rectangle:t._rectangle,rotation:t._rotation,ellipsoid:n,stRotation:t._stRotation,granularity:r,extrudedHeight:a,height:e,vertexFormat:rt.VertexFormat.POSITION_ONLY,shadowVolume:!0})};var m=new W.Rectangle,R=[new W.Cartesian2,new W.Cartesian2,new W.Cartesian2],E=new Z.Matrix2,F=new W.Cartographic;return Object.defineProperties(b.prototype,{rectangle:{get:function(){return Q.defined(this._rotatedRectangle)||(this._rotatedRectangle=c(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return Q.defined(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(t){if(0===t._stRotation)return[0,0,0,1,1,0];var e=W.Rectangle.clone(t._rectangle,m),a=t._granularity,r=t._ellipsoid,e=c(e,a,t._rotation-t._stRotation,r,m),n=R;n[0].x=e.west,n[0].y=e.south,n[1].x=e.west,n[1].y=e.north,n[2].x=e.east,n[2].y=e.south;for(var i=t.rectangle,o=Z.Matrix2.fromRotation(t._stRotation,E),s=W.Rectangle.center(i,F),l=0;l<3;++l){var u=n[l];u.x-=s.longitude,u.y-=s.latitude,Z.Matrix2.multiplyByVector(o,u,u),u.x+=s.longitude,u.y+=s.latitude,u.x=(u.x-i.west)/i.width,u.y=(u.y-i.south)/i.height}return a=n[0],r=n[1],e=n[2],t=new Array(6),W.Cartesian2.pack(a,t),W.Cartesian2.pack(r,t,2),W.Cartesian2.pack(e,t,4),t}(this)),this._textureCoordinateRotationPoints}}}),function(t,e){return(t=Q.defined(e)?b.unpack(t,e):t)._ellipsoid=W.Ellipsoid.clone(t._ellipsoid),t._rectangle=W.Rectangle.clone(t._rectangle),b.createGeometry(t)}}); diff --git a/public/lib/Cesium/Workers/createRectangleOutlineGeometry.js b/public/lib/Cesium/Workers/createRectangleOutlineGeometry.js new file mode 100644 index 0000000..54c682d --- /dev/null +++ b/public/lib/Cesium/Workers/createRectangleOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./ComponentDatatype-8f71e605","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolygonPipeline-55053b0a","./RectangleGeometryLibrary-8c98c500","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidRhumbLine-21029cef"],function(p,s,c,d,m,e,_,v,E,f,g,A,t,i,a){"use strict";var h=new d.BoundingSphere,y=new d.BoundingSphere,G=new s.Cartesian3,b=new s.Rectangle;function R(e,t){var i=e._ellipsoid,a=t.height,r=t.width,n=t.northCap,o=t.southCap,l=a,u=2,s=0,e=4;n&&(--u,--l,s+=1,e-=2),o&&(--u,--l,s+=1,e-=2),s+=u*r+2*l-e;var p,c=new Float64Array(3*s),d=0,f=0,g=G;if(n)A.RectangleGeometryLibrary.computePosition(t,i,!1,f,0,g),c[d++]=g.x,c[d++]=g.y,c[d++]=g.z;else for(p=0;p<r;p++)A.RectangleGeometryLibrary.computePosition(t,i,!1,f,p,g),c[d++]=g.x,c[d++]=g.y,c[d++]=g.z;for(p=r-1,f=1;f<a;f++)A.RectangleGeometryLibrary.computePosition(t,i,!1,f,p,g),c[d++]=g.x,c[d++]=g.y,c[d++]=g.z;if(f=a-1,!o)for(p=r-2;0<=p;p--)A.RectangleGeometryLibrary.computePosition(t,i,!1,f,p,g),c[d++]=g.x,c[d++]=g.y,c[d++]=g.z;for(p=0,f=a-2;0<f;f--)A.RectangleGeometryLibrary.computePosition(t,i,!1,f,p,g),c[d++]=g.x,c[d++]=g.y,c[d++]=g.z;for(var o=c.length/3*2,h=E.IndexDatatype.createTypedArray(c.length/3,o),y=0,b=0;b<c.length/3-1;b++)h[y++]=b,h[y++]=b+1;h[y++]=c.length/3-1,h[y++]=0;o=new _.Geometry({attributes:new v.GeometryAttributes,primitiveType:_.PrimitiveType.LINES});return o.attributes.position=new _.GeometryAttribute({componentDatatype:m.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:c}),o.indices=h,o}function P(e){var t=(e=p.defaultValue(e,p.defaultValue.EMPTY_OBJECT)).rectangle,i=p.defaultValue(e.granularity,f.CesiumMath.RADIANS_PER_DEGREE),a=p.defaultValue(e.ellipsoid,s.Ellipsoid.WGS84),r=p.defaultValue(e.rotation,0),n=p.defaultValue(e.height,0),o=p.defaultValue(e.extrudedHeight,n);this._rectangle=s.Rectangle.clone(t),this._granularity=i,this._ellipsoid=a,this._surfaceHeight=Math.max(n,o),this._rotation=r,this._extrudedHeight=Math.min(n,o),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}P.packedLength=s.Rectangle.packedLength+s.Ellipsoid.packedLength+5,P.pack=function(e,t,i){return i=p.defaultValue(i,0),s.Rectangle.pack(e._rectangle,t,i),i+=s.Rectangle.packedLength,s.Ellipsoid.pack(e._ellipsoid,t,i),i+=s.Ellipsoid.packedLength,t[i++]=e._granularity,t[i++]=e._surfaceHeight,t[i++]=e._rotation,t[i++]=e._extrudedHeight,t[i]=p.defaultValue(e._offsetAttribute,-1),t};var w=new s.Rectangle,L=s.Ellipsoid.clone(s.Ellipsoid.UNIT_SPHERE),C={rectangle:w,ellipsoid:L,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};P.unpack=function(e,t,i){t=p.defaultValue(t,0);var a=s.Rectangle.unpack(e,t,w);t+=s.Rectangle.packedLength;var r=s.Ellipsoid.unpack(e,t,L);t+=s.Ellipsoid.packedLength;var n=e[t++],o=e[t++],l=e[t++],u=e[t++],t=e[t];return p.defined(i)?(i._rectangle=s.Rectangle.clone(a,i._rectangle),i._ellipsoid=s.Ellipsoid.clone(r,i._ellipsoid),i._surfaceHeight=o,i._rotation=l,i._extrudedHeight=u,i._offsetAttribute=-1===t?void 0:t,i):(C.granularity=n,C.height=o,C.rotation=l,C.extrudedHeight=u,C.offsetAttribute=-1===t?void 0:t,new P(C))};var D=new s.Cartographic;return P.createGeometry=function(e){var t=e._rectangle,i=e._ellipsoid,a=A.RectangleGeometryLibrary.computeOptions(t,e._granularity,e._rotation,0,b,D);if(!f.CesiumMath.equalsEpsilon(t.north,t.south,f.CesiumMath.EPSILON10)&&!f.CesiumMath.equalsEpsilon(t.east,t.west,f.CesiumMath.EPSILON10)){var r,n,o,l,u=e._surfaceHeight,s=e._extrudedHeight;return u=!f.CesiumMath.equalsEpsilon(u,s,0,f.CesiumMath.EPSILON2)?(n=function(e,t){var i=e._surfaceHeight,a=e._extrudedHeight,r=e._ellipsoid,n=a,o=i,l=R(e,t),a=t.height,i=t.width,u=(e=g.PolygonPipeline.scaleToGeodeticHeight(l.attributes.position.values,o,r,!1)).length;(o=new Float64Array(2*u)).set(e),n=g.PolygonPipeline.scaleToGeodeticHeight(l.attributes.position.values,n,r),o.set(n,u),l.attributes.position.values=o,r=t.northCap,n=t.southCap,t=4,r&&--t,n&&--t;for(var t=2*(o.length/3+t),s=E.IndexDatatype.createTypedArray(o.length/3,t),u=o.length/6,p=0,c=0;c<u-1;c++)s[p++]=c,s[p++]=c+1,s[p++]=c+u,s[p++]=c+u+1;return s[p++]=u-1,s[p++]=0,s[p++]=u+u-1,s[p++]=u,s[p++]=0,s[p++]=u,a=r?a-1:(r=i-1,s[p++]=r,s[p++]=r+u,i+a-2),s[p++]=a,s[p++]=a+u,n||(a=i+a-1,s[p++]=a,s[p]=a+u),l.indices=s,l}(e,a),p.defined(e._offsetAttribute)&&(r=n.attributes.position.values.length/3,o=new Uint8Array(r),o=e._offsetAttribute===c.GeometryOffsetAttribute.TOP?c.arrayFill(o,1,0,r/2):(l=e._offsetAttribute===c.GeometryOffsetAttribute.NONE?0:1,c.arrayFill(o,l)),n.attributes.applyOffset=new _.GeometryAttribute({componentDatatype:m.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:o})),o=d.BoundingSphere.fromRectangle3D(t,i,u,y),s=d.BoundingSphere.fromRectangle3D(t,i,s,h),d.BoundingSphere.union(o,s)):((n=R(e,a)).attributes.position.values=g.PolygonPipeline.scaleToGeodeticHeight(n.attributes.position.values,u,i,!1),p.defined(e._offsetAttribute)&&(a=n.attributes.position.values.length,a=new Uint8Array(a/3),l=e._offsetAttribute===c.GeometryOffsetAttribute.NONE?0:1,c.arrayFill(a,l),n.attributes.applyOffset=new _.GeometryAttribute({componentDatatype:m.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:a})),d.BoundingSphere.fromRectangle3D(t,i,u)),new _.Geometry({attributes:n.attributes,indices:n.indices,primitiveType:_.PrimitiveType.LINES,boundingSphere:u,offsetAttribute:e._offsetAttribute})}},function(e,t){return(e=p.defined(t)?P.unpack(e,t):e)._ellipsoid=s.Ellipsoid.clone(e._ellipsoid),e._rectangle=s.Rectangle.clone(e._rectangle),P.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createSimplePolylineGeometry.js b/public/lib/Cesium/Workers/createSimplePolylineGeometry.js new file mode 100644 index 0000000..fcd5294 --- /dev/null +++ b/public/lib/Cesium/Workers/createSimplePolylineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./ArcType-2b58731c","./Transforms-5295b227","./Color-821fa62a","./ComponentDatatype-8f71e605","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./PolylinePipeline-00f5e064","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./IntersectionTests-f5111308","./Plane-99b2becd"],function(L,V,x,S,I,R,e,O,M,U,N,F,o,t,r,a,l,i){"use strict";function f(e){var o=(e=L.defaultValue(e,L.defaultValue.EMPTY_OBJECT)).positions,t=e.colors,r=L.defaultValue(e.colorsPerVertex,!1);this._positions=o,this._colors=t,this._colorsPerVertex=r,this._arcType=L.defaultValue(e.arcType,x.ArcType.GEODESIC),this._granularity=L.defaultValue(e.granularity,N.CesiumMath.RADIANS_PER_DEGREE),this._ellipsoid=L.defaultValue(e.ellipsoid,V.Ellipsoid.WGS84),this._workerName="createSimplePolylineGeometry";o=1+o.length*V.Cartesian3.packedLength;o+=L.defined(t)?1+t.length*I.Color.packedLength:1,this.packedLength=o+V.Ellipsoid.packedLength+3}f.pack=function(e,o,t){var r;t=L.defaultValue(t,0);var a=e._positions,l=a.length;for(o[t++]=l,r=0;r<l;++r,t+=V.Cartesian3.packedLength)V.Cartesian3.pack(a[r],o,t);var i=e._colors,l=L.defined(i)?i.length:0;for(o[t++]=l,r=0;r<l;++r,t+=I.Color.packedLength)I.Color.pack(i[r],o,t);return V.Ellipsoid.pack(e._ellipsoid,o,t),t+=V.Ellipsoid.packedLength,o[t++]=e._colorsPerVertex?1:0,o[t++]=e._arcType,o[t]=e._granularity,o},f.unpack=function(e,o,t){o=L.defaultValue(o,0);for(var r=e[o++],a=new Array(r),l=0;l<r;++l,o+=V.Cartesian3.packedLength)a[l]=V.Cartesian3.unpack(e,o);var i=0<(r=e[o++])?new Array(r):void 0;for(l=0;l<r;++l,o+=I.Color.packedLength)i[l]=I.Color.unpack(e,o);var n=V.Ellipsoid.unpack(e,o);o+=V.Ellipsoid.packedLength;var s=1===e[o++],p=e[o++],d=e[o];return L.defined(t)?(t._positions=a,t._colors=i,t._ellipsoid=n,t._colorsPerVertex=s,t._arcType=p,t._granularity=d,t):new f({positions:a,colors:i,ellipsoid:n,colorsPerVertex:s,arcType:p,granularity:d})};var H=new Array(2),W=new Array(2),Y={positions:H,height:W,ellipsoid:void 0,minDistance:void 0,granularity:void 0};return f.createGeometry=function(e){var o=e._positions,t=e._colors,r=e._colorsPerVertex,a=e._arcType,l=e._granularity,e=e._ellipsoid,i=N.CesiumMath.chordLength(l,e.maximumRadius),n=L.defined(t)&&!r,s=o.length,p=0;if(a===x.ArcType.GEODESIC||a===x.ArcType.RHUMB){var d,f,y=a===x.ArcType.GEODESIC?(d=N.CesiumMath.chordLength(l,e.maximumRadius),f=F.PolylinePipeline.numberOfPoints,F.PolylinePipeline.generateArc):(d=l,f=F.PolylinePipeline.numberOfPointsRhumbLine,F.PolylinePipeline.generateRhumbArc),c=F.PolylinePipeline.extractHeights(o,e),u=Y;if(a===x.ArcType.GEODESIC?u.minDistance=i:u.granularity=l,u.ellipsoid=e,n){for(var h=0,C=0;C<s-1;C++)h+=f(o[C],o[C+1],d)+1;B=new Float64Array(3*h),A=new Uint8Array(4*h),u.positions=H,u.height=W;var T=0;for(C=0;C<s-1;++C){H[0]=o[C],H[1]=o[C+1],W[0]=c[C],W[1]=c[C+1];var g=y(u);if(L.defined(t))for(var m=g.length/3,b=t[C],P=0;P<m;++P)A[T++]=I.Color.floatToByte(b.red),A[T++]=I.Color.floatToByte(b.green),A[T++]=I.Color.floatToByte(b.blue),A[T++]=I.Color.floatToByte(b.alpha);B.set(g,p),p+=g.length}}else if(u.positions=o,u.height=c,B=new Float64Array(y(u)),L.defined(t)){for(A=new Uint8Array(B.length/3*4),C=0;C<s-1;++C)p=function(e,o,t,r,a,l,i){var n=F.PolylinePipeline.numberOfPoints(e,o,a),s=t.red,p=t.green,d=t.blue,f=t.alpha,y=r.red,e=r.green,o=r.blue,a=r.alpha;if(I.Color.equals(t,r)){for(g=0;g<n;g++)l[i++]=I.Color.floatToByte(s),l[i++]=I.Color.floatToByte(p),l[i++]=I.Color.floatToByte(d),l[i++]=I.Color.floatToByte(f);return i}for(var c=(y-s)/n,u=(e-p)/n,h=(o-d)/n,C=(a-f)/n,T=i,g=0;g<n;g++)l[T++]=I.Color.floatToByte(s+g*c),l[T++]=I.Color.floatToByte(p+g*u),l[T++]=I.Color.floatToByte(d+g*h),l[T++]=I.Color.floatToByte(f+g*C);return T}(o[C],o[C+1],t[C],t[C+1],i,A,p);var _=t[s-1];A[p++]=I.Color.floatToByte(_.red),A[p++]=I.Color.floatToByte(_.green),A[p++]=I.Color.floatToByte(_.blue),A[p++]=I.Color.floatToByte(_.alpha)}}else{var v=n?2*s-2:s,B=new Float64Array(3*v),A=L.defined(t)?new Uint8Array(4*v):void 0,E=0,k=0;for(C=0;C<s;++C){var G=o[C];if(n&&0<C&&(V.Cartesian3.pack(G,B,E),E+=3,b=t[C-1],A[k++]=I.Color.floatToByte(b.red),A[k++]=I.Color.floatToByte(b.green),A[k++]=I.Color.floatToByte(b.blue),A[k++]=I.Color.floatToByte(b.alpha)),n&&C===s-1)break;V.Cartesian3.pack(G,B,E),E+=3,L.defined(t)&&(b=t[C],A[k++]=I.Color.floatToByte(b.red),A[k++]=I.Color.floatToByte(b.green),A[k++]=I.Color.floatToByte(b.blue),A[k++]=I.Color.floatToByte(b.alpha))}}e=new M.GeometryAttributes;e.position=new O.GeometryAttribute({componentDatatype:R.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:B}),L.defined(t)&&(e.color=new O.GeometryAttribute({componentDatatype:R.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:4,values:A,normalize:!0}));var _=2*((v=B.length/3)-1),w=U.IndexDatatype.createTypedArray(v,_),D=0;for(C=0;C<v-1;++C)w[D++]=C,w[D++]=C+1;return new O.Geometry({attributes:e,indices:w,primitiveType:O.PrimitiveType.LINES,boundingSphere:S.BoundingSphere.fromPoints(o)})},function(e,o){return(e=L.defined(o)?f.unpack(e,o):e)._ellipsoid=V.Ellipsoid.clone(e._ellipsoid),f.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createSphereGeometry.js b/public/lib/Cesium/Workers/createSphereGeometry.js new file mode 100644 index 0000000..67e6cd2 --- /dev/null +++ b/public/lib/Cesium/Workers/createSphereGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./Check-64f87f7d","./EllipsoidGeometry-1cd4036a","./VertexFormat-63b3c6da","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa"],function(i,a,e,o,n,t,r,s,c,d,l,m,u,p){"use strict";function y(e){var t=i.defaultValue(e.radius,1),e={radii:new a.Cartesian3(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new o.EllipsoidGeometry(e),this._workerName="createSphereGeometry"}y.packedLength=o.EllipsoidGeometry.packedLength,y.pack=function(e,t,r){return o.EllipsoidGeometry.pack(e._ellipsoidGeometry,t,r)};var G=new o.EllipsoidGeometry,f={radius:void 0,radii:new a.Cartesian3,vertexFormat:new n.VertexFormat,stackPartitions:void 0,slicePartitions:void 0};return y.unpack=function(e,t,r){t=o.EllipsoidGeometry.unpack(e,t,G);return f.vertexFormat=n.VertexFormat.clone(t._vertexFormat,f.vertexFormat),f.stackPartitions=t._stackPartitions,f.slicePartitions=t._slicePartitions,i.defined(r)?(a.Cartesian3.clone(t._radii,f.radii),r._ellipsoidGeometry=new o.EllipsoidGeometry(f),r):(f.radius=t._radii.x,new y(f))},y.createGeometry=function(e){return o.EllipsoidGeometry.createGeometry(e._ellipsoidGeometry)},function(e,t){return i.defined(t)&&(e=y.unpack(e,t)),y.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createSphereOutlineGeometry.js b/public/lib/Cesium/Workers/createSphereOutlineGeometry.js new file mode 100644 index 0000000..f5a59f1 --- /dev/null +++ b/public/lib/Cesium/Workers/createSphereOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./Check-64f87f7d","./EllipsoidOutlineGeometry-66fea8ef","./Math-b53708b3","./GeometryOffsetAttribute-b94750ca","./Transforms-5295b227","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa"],function(r,n,e,s,i,t,o,a,l,d,u,c,m){"use strict";function p(e){var i=r.defaultValue(e.radius,1),e={radii:new n.Cartesian3(i,i,i),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new s.EllipsoidOutlineGeometry(e),this._workerName="createSphereOutlineGeometry"}p.packedLength=s.EllipsoidOutlineGeometry.packedLength,p.pack=function(e,i,t){return s.EllipsoidOutlineGeometry.pack(e._ellipsoidGeometry,i,t)};var f=new s.EllipsoidOutlineGeometry,y={radius:void 0,radii:new n.Cartesian3,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};return p.unpack=function(e,i,t){i=s.EllipsoidOutlineGeometry.unpack(e,i,f);return y.stackPartitions=i._stackPartitions,y.slicePartitions=i._slicePartitions,y.subdivisions=i._subdivisions,r.defined(t)?(n.Cartesian3.clone(i._radii,y.radii),t._ellipsoidGeometry=new s.EllipsoidOutlineGeometry(y),t):(y.radius=i._radii.x,new p(y))},p.createGeometry=function(e){return s.EllipsoidOutlineGeometry.createGeometry(e._ellipsoidGeometry)},function(e,i){return r.defined(i)&&(e=p.unpack(e,i)),p.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createTaskProcessorWorker.js b/public/lib/Cesium/Workers/createTaskProcessorWorker.js new file mode 100644 index 0000000..7d6ede1 --- /dev/null +++ b/public/lib/Cesium/Workers/createTaskProcessorWorker.js @@ -0,0 +1 @@ +define(["./when-ca391574"],function(f){"use strict";return function(r){var o;return function(e){var s=e.data,a=[],i={id:s.id,result:void 0,error:void 0};return f.when(function(e,r,n){try{return e(r,n)}catch(e){return f.when.reject(e)}}(r,s.parameters,a)).then(function(e){i.result=e}).otherwise(function(e){e instanceof Error?i.error={name:e.name,message:e.message,stack:e.stack}:i.error=e}).always(function(){f.defined(o)||(o=f.defaultValue(self.webkitPostMessage,self.postMessage)),s.canTransferArrayBuffer||(a.length=0);try{o(i,a)}catch(e){i.result=void 0,i.error="postMessage failed with error: "+(n=(r=e).name,t=r.message,t=f.defined(n)&&f.defined(t)?n+": "+t:r.toString(),r=r.stack,f.defined(r)&&(t+="\n"+r),t)+"\n with responseMessage: "+JSON.stringify(i),o(i)}var r,n,t})}}}); diff --git a/public/lib/Cesium/Workers/createVectorTileGeometries.js b/public/lib/Cesium/Workers/createVectorTileGeometries.js new file mode 100644 index 0000000..d5455b3 --- /dev/null +++ b/public/lib/Cesium/Workers/createVectorTileGeometries.js @@ -0,0 +1 @@ +define(["./Transforms-5295b227","./BoxGeometry-1ec9fd84","./Cartesian2-5b63e672","./Color-821fa62a","./CylinderGeometry-8d01e756","./when-ca391574","./EllipsoidGeometry-1cd4036a","./IndexDatatype-4e56bcfa","./createTaskProcessorWorker","./Check-64f87f7d","./Math-b53708b3","./RuntimeError-19cb26ba","./GeometryOffsetAttribute-b94750ca","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./VertexFormat-63b3c6da","./CylinderGeometryLibrary-b260e92f"],function(S,k,T,V,M,F,B,w,e,t,n,r,a,i,o,s,d,c,f){"use strict";function R(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var l=new T.Cartesian3,u=S.Matrix4.packedLength+T.Cartesian3.packedLength,h=S.Matrix4.packedLength+2,b=S.Matrix4.packedLength+T.Cartesian3.packedLength,p=T.Cartesian3.packedLength+1,y={modelMatrix:new S.Matrix4,boundingVolume:new S.BoundingSphere};function A(e,t){var n=t*u,t=T.Cartesian3.unpack(e,n,l);n+=T.Cartesian3.packedLength;n=S.Matrix4.unpack(e,n,y.modelMatrix);S.Matrix4.multiplyByScale(n,t,n);n=y.boundingVolume;return T.Cartesian3.clone(T.Cartesian3.ZERO,n.center),n.radius=Math.sqrt(3),y}function O(e,t){var n=t*h,r=e[n++],t=e[n++],t=T.Cartesian3.fromElements(r,r,t,l),n=S.Matrix4.unpack(e,n,y.modelMatrix);S.Matrix4.multiplyByScale(n,t,n);n=y.boundingVolume;return T.Cartesian3.clone(T.Cartesian3.ZERO,n.center),n.radius=Math.sqrt(2),y}function L(e,t){var n=t*b,t=T.Cartesian3.unpack(e,n,l);n+=T.Cartesian3.packedLength;n=S.Matrix4.unpack(e,n,y.modelMatrix);S.Matrix4.multiplyByScale(n,t,n);n=y.boundingVolume;return T.Cartesian3.clone(T.Cartesian3.ZERO,n.center),n.radius=1,y}function E(e,t){var n=t*p,t=e[n++],n=T.Cartesian3.unpack(e,n,l),n=S.Matrix4.fromTranslation(n,y.modelMatrix);S.Matrix4.multiplyByUniformScale(n,t,n);n=y.boundingVolume;return T.Cartesian3.clone(T.Cartesian3.ZERO,n.center),n.radius=1,y}var Z=new T.Cartesian3;function U(e,t,n,r,a){if(F.defined(t)){for(var i=n.length,o=r.attributes.position.values,s=r.indices,d=e.positions,c=e.vertexBatchIds,f=e.indices,l=e.batchIds,u=e.batchTableColors,h=e.batchedIndices,b=e.indexOffsets,p=e.indexCounts,y=e.boundingVolumes,x=e.modelMatrix,g=e.center,C=e.positionOffset,m=e.batchIdIndex,v=e.indexOffset,I=e.batchedIndicesOffset,k=0;k<i;++k){var M=a(t,k),B=M.modelMatrix;S.Matrix4.multiply(x,B,B);for(var w=n[k],A=o.length,O=0;O<A;O+=3){var L=T.Cartesian3.unpack(o,O,Z);S.Matrix4.multiplyByPoint(B,L,L),T.Cartesian3.subtract(L,g,L),T.Cartesian3.pack(L,d,3*C+O),c[m++]=w}for(var E=s.length,U=0;U<E;++U)f[v+U]=s[U]+C;var G=k+I;h[G]=new R({offset:v,count:E,color:V.Color.fromRgba(u[w]),batchIds:[w]}),l[G]=w,b[G]=v,p[G]=E,y[G]=S.BoundingSphere.transform(M.boundingVolume,B),C+=A/3,v+=E}e.positionOffset=C,e.batchIdIndex=m,e.indexOffset=v,e.batchedIndicesOffset+=i}}var G=new T.Cartesian3,D=new S.Matrix4;function P(e,t,n){var r=n.length,a=2+r*S.BoundingSphere.packedLength+1+function(e){for(var t=e.length,n=0,r=0;r<t;++r)n+=V.Color.packedLength+3+e[r].batchIds.length;return n}(t),i=new Float64Array(a),o=0;i[o++]=e,i[o++]=r;for(var s=0;s<r;++s)S.BoundingSphere.pack(n[s],i,o),o+=S.BoundingSphere.packedLength;var d=t.length;i[o++]=d;for(var c=0;c<d;++c){var f=t[c];V.Color.pack(f.color,i,o),o+=V.Color.packedLength,i[o++]=f.offset,i[o++]=f.count;var l=f.batchIds,u=l.length;i[o++]=u;for(var h=0;h<u;++h)i[o++]=l[h]}return i}return e(function(e,t){var n=F.defined(e.boxes)?new Float32Array(e.boxes):void 0,r=F.defined(e.boxBatchIds)?new Uint16Array(e.boxBatchIds):void 0,a=F.defined(e.cylinders)?new Float32Array(e.cylinders):void 0,i=F.defined(e.cylinderBatchIds)?new Uint16Array(e.cylinderBatchIds):void 0,o=F.defined(e.ellipsoids)?new Float32Array(e.ellipsoids):void 0,s=F.defined(e.ellipsoidBatchIds)?new Uint16Array(e.ellipsoidBatchIds):void 0,d=F.defined(e.spheres)?new Float32Array(e.spheres):void 0,c=F.defined(e.sphereBatchIds)?new Uint16Array(e.sphereBatchIds):void 0,f=F.defined(n)?r.length:0,l=F.defined(a)?i.length:0,u=F.defined(o)?s.length:0,h=F.defined(d)?c.length:0,b=k.BoxGeometry.getUnitBox(),p=M.CylinderGeometry.getUnitCylinder(),y=B.EllipsoidGeometry.getUnitEllipsoid(),x=b.attributes.position.values,g=p.attributes.position.values,C=y.attributes.position.values,m=x.length*f;m+=g.length*l,m+=C.length*(u+h);var v=b.indices,I=p.indices,x=y.indices,g=v.length*f;return g+=I.length*l,g+=x.length*(u+h),C=new Float32Array(m),v=new Uint16Array(m/3),I=w.IndexDatatype.createTypedArray(m/3,g),x=f+l+u+h,m=new Uint16Array(x),g=new Array(x),f=new Uint32Array(x),l=new Uint32Array(x),u=new Array(x),h=e.packedBuffer,x=new Float64Array(h),h=0,T.Cartesian3.unpack(x,0,G),h+=T.Cartesian3.packedLength,S.Matrix4.unpack(x,h,D),U(e={batchTableColors:new Uint32Array(e.batchTableColors),positions:C,vertexBatchIds:v,indices:I,batchIds:m,batchedIndices:g,indexOffsets:f,indexCounts:l,boundingVolumes:u,positionOffset:0,batchIdIndex:0,indexOffset:0,batchedIndicesOffset:0,modelMatrix:D,center:G},n,r,b,A),U(e,a,i,p,O),U(e,o,s,y,L),U(e,d,c,y,E),u=P(I.BYTES_PER_ELEMENT,g,u),t.push(C.buffer,v.buffer,I.buffer),t.push(m.buffer,f.buffer,l.buffer),t.push(u.buffer),{positions:C.buffer,vertexBatchIds:v.buffer,indices:I.buffer,indexOffsets:f.buffer,indexCounts:l.buffer,batchIds:m.buffer,packedBuffer:u.buffer}})}); diff --git a/public/lib/Cesium/Workers/createVectorTilePoints.js b/public/lib/Cesium/Workers/createVectorTilePoints.js new file mode 100644 index 0000000..9583e8e --- /dev/null +++ b/public/lib/Cesium/Workers/createVectorTilePoints.js @@ -0,0 +1 @@ +define(["./AttributeCompression-a99f24b9","./Cartesian2-5b63e672","./Math-b53708b3","./createTaskProcessorWorker","./Check-64f87f7d","./when-ca391574"],function(b,g,d,a,e,r){"use strict";var w=32767,k=new g.Cartographic,v=new g.Cartesian3,y=new g.Rectangle,A=new g.Ellipsoid,M={min:void 0,max:void 0};return a(function(a,e){var r=new Uint16Array(a.positions);!function(a){a=new Float64Array(a);var e=0;M.min=a[e++],M.max=a[e++],g.Rectangle.unpack(a,2,y),e+=g.Rectangle.packedLength,g.Ellipsoid.unpack(a,e,A)}(a.packedBuffer);var t=y,n=A,i=M.min,s=M.max,o=r.length/3,c=r.subarray(0,o),u=r.subarray(o,2*o),p=r.subarray(2*o,3*o);b.AttributeCompression.zigZagDeltaDecode(c,u,p);for(var f=new Float64Array(r.length),h=0;h<o;++h){var l=c[h],m=u[h],C=p[h],l=d.CesiumMath.lerp(t.west,t.east,l/w),m=d.CesiumMath.lerp(t.south,t.north,m/w),C=d.CesiumMath.lerp(i,s,C/w),C=g.Cartographic.fromRadians(l,m,C,k),C=n.cartographicToCartesian(C,v);g.Cartesian3.pack(C,f,3*h)}return e.push(f.buffer),{positions:f.buffer}})}); diff --git a/public/lib/Cesium/Workers/createVectorTilePolygons.js b/public/lib/Cesium/Workers/createVectorTilePolygons.js new file mode 100644 index 0000000..f6cdeae --- /dev/null +++ b/public/lib/Cesium/Workers/createVectorTilePolygons.js @@ -0,0 +1 @@ +define(["./AttributeCompression-a99f24b9","./Cartesian2-5b63e672","./Color-821fa62a","./when-ca391574","./IndexDatatype-4e56bcfa","./Math-b53708b3","./OrientedBoundingBox-e61df120","./createTaskProcessorWorker","./Check-64f87f7d","./Transforms-5295b227","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd"],function(ye,Ie,me,we,ve,xe,Ae,e,a,r,n,t,i,o,s){"use strict";var Ee=new Ie.Cartesian3,Ne=new Ie.Ellipsoid,Te=new Ie.Rectangle,ke={min:void 0,max:void 0,indexBytesPerElement:void 0};function Be(e,a,r){var n=a.length,t=2+n*Ae.OrientedBoundingBox.packedLength+1+function(e){for(var a=e.length,r=0,n=0;n<a;++n)r+=me.Color.packedLength+3+e[n].batchIds.length;return r}(r),i=new Float64Array(t),o=0;i[o++]=e,i[o++]=n;for(var s=0;s<n;++s)Ae.OrientedBoundingBox.pack(a[s],i,o),o+=Ae.OrientedBoundingBox.packedLength;var f=r.length;i[o++]=f;for(var d=0;d<f;++d){var c=r[d];me.Color.pack(c.color,i,o),o+=me.Color.packedLength,i[o++]=c.offset,i[o++]=c.count;var u=c.batchIds,h=u.length;i[o++]=h;for(var l=0;l<h;++l)i[o++]=u[l]}return i}var Le=new Ie.Cartesian3,Oe=new Ie.Cartesian3,Ue=new Ie.Cartesian3,Pe=new Ie.Cartesian3,Fe=new Ie.Cartesian3,Se=new Ie.Cartographic,Re=new Ie.Rectangle;return e(function(e,a){var r;t=e.packedBuffer,r=new Float64Array(t),t=0,ke.indexBytesPerElement=r[t++],ke.min=r[t++],ke.max=r[t++],Ie.Cartesian3.unpack(r,3,Ee),t+=Ie.Cartesian3.packedLength,Ie.Ellipsoid.unpack(r,t,Ne),t+=Ie.Ellipsoid.packedLength,Ie.Rectangle.unpack(r,t,Te);var n=new(2===ke.indexBytesPerElement?Uint16Array:Uint32Array)(e.indices),t=new Uint16Array(e.positions),i=new Uint32Array(e.counts),o=new Uint32Array(e.indexCounts),s=new Uint32Array(e.batchIds),f=new Uint32Array(e.batchTableColors),d=new Array(i.length),c=Ee,u=Ne,h=Te,l=ke.min,g=ke.max,b=e.minimumHeights,p=e.maximumHeights;we.defined(b)&&we.defined(p)&&(b=new Float32Array(b),p=new Float32Array(p));var C=t.length/2,y=t.subarray(0,C),I=t.subarray(C,2*C);ye.AttributeCompression.zigZagDeltaDecode(y,I);for(var m=new Float64Array(3*C),w=0;w<C;++w){var v=y[w],x=I[w],v=xe.CesiumMath.lerp(h.west,h.east,v/32767),x=xe.CesiumMath.lerp(h.south,h.north,x/32767),x=Ie.Cartographic.fromRadians(v,x,0,Se),x=u.cartographicToCartesian(x,Le);Ie.Cartesian3.pack(x,m,3*w)}var A=i.length,E=new Array(A),N=new Array(A),T=0,k=0;for(w=0;w<A;++w)E[w]=T,N[w]=k,T+=i[w],k+=o[w];var B=new Float32Array(3*C*2),L=new Uint16Array(2*C),O=new Uint32Array(N.length),U=new Uint32Array(o.length),P=[],F={};for(w=0;w<A;++w)_=f[w],we.defined(F[_])?(F[_].positionLength+=i[w],F[_].indexLength+=o[w],F[_].batchIds.push(w)):F[_]={positionLength:i[w],indexLength:o[w],offset:0,indexOffset:0,batchIds:[w]};var S,R=0,D=0;for(_ in F)F.hasOwnProperty(_)&&((G=F[_]).offset=R,G.indexOffset=D,R+=2*G.positionLength,D+=S=2*G.indexLength+6*G.positionLength,G.indexLength=S);var M=[];for(_ in F)F.hasOwnProperty(_)&&(G=F[_],M.push({color:me.Color.fromRgba(parseInt(_)),offset:G.indexOffset,count:G.indexLength,batchIds:G.batchIds}));for(w=0;w<A;++w){var _,G,Y=(G=F[_=f[w]]).offset,V=3*Y,H=Y,W=E[w],z=i[w],Z=s[w],j=l,q=g;we.defined(b)&&we.defined(p)&&(j=b[w],q=p[w]);for(var J=Number.POSITIVE_INFINITY,K=Number.NEGATIVE_INFINITY,Q=Number.POSITIVE_INFINITY,X=Number.NEGATIVE_INFINITY,$=0;$<z;++$){var ee=Ie.Cartesian3.unpack(m,3*W+3*$,Le);u.scaleToGeodeticSurface(ee,ee);var ae=u.cartesianToCartographic(ee,Se),re=ae.latitude,ne=ae.longitude,J=Math.min(re,J),K=Math.max(re,K),Q=Math.min(ne,Q),X=Math.max(ne,X),ae=u.geodeticSurfaceNormal(ee,Oe),re=Ie.Cartesian3.multiplyByScalar(ae,j,Ue),ne=Ie.Cartesian3.add(ee,re,Pe),re=Ie.Cartesian3.multiplyByScalar(ae,q,re),re=Ie.Cartesian3.add(ee,re,Fe);Ie.Cartesian3.subtract(re,c,re),Ie.Cartesian3.subtract(ne,c,ne),Ie.Cartesian3.pack(re,B,V),Ie.Cartesian3.pack(ne,B,V+3),L[H]=Z,L[H+1]=Z,V+=6,H+=2}(h=Re).west=Q,h.east=X,h.south=J,h.north=K,d[w]=Ae.OrientedBoundingBox.fromRectangle(h,l,g,u);var te=G.indexOffset,ie=N[w],oe=o[w];for(O[w]=te,$=0;$<oe;$+=3){var se=n[ie+$]-W,fe=n[ie+$+1]-W,de=n[ie+$+2]-W;P[te++]=2*se+Y,P[te++]=2*fe+Y,P[te++]=2*de+Y,P[te++]=2*de+1+Y,P[te++]=2*fe+1+Y,P[te++]=2*se+1+Y}for($=0;$<z;++$){var ce=$,ue=($+1)%z;P[te++]=2*ce+1+Y,P[te++]=2*ue+Y,P[te++]=2*ce+Y,P[te++]=2*ce+1+Y,P[te++]=2*ue+1+Y,P[te++]=2*ue+Y}G.offset+=2*z,G.indexOffset=te,U[w]=te-O[w]}for(var P=ve.IndexDatatype.createTypedArray(B.length/3,P),he=M.length,le=0;le<he;++le){for(var ge=M[le].batchIds,be=0,pe=ge.length,Ce=0;Ce<pe;++Ce)be+=U[ge[Ce]];M[le].count=be}return t=Be(2===P.BYTES_PER_ELEMENT?ve.IndexDatatype.UNSIGNED_SHORT:ve.IndexDatatype.UNSIGNED_INT,d,M),a.push(B.buffer,P.buffer,O.buffer,U.buffer,L.buffer,t.buffer),{positions:B.buffer,indices:P.buffer,indexOffsets:O.buffer,indexCounts:U.buffer,batchIds:L.buffer,packedBuffer:t.buffer}})}); diff --git a/public/lib/Cesium/Workers/createVectorTilePolylines.js b/public/lib/Cesium/Workers/createVectorTilePolylines.js new file mode 100644 index 0000000..6636a00 --- /dev/null +++ b/public/lib/Cesium/Workers/createVectorTilePolylines.js @@ -0,0 +1 @@ +define(["./AttributeCompression-a99f24b9","./Cartesian2-5b63e672","./IndexDatatype-4e56bcfa","./Math-b53708b3","./createTaskProcessorWorker","./Check-64f87f7d","./when-ca391574","./WebGLConstants-95ceb4e9"],function(P,L,S,_,a,e,r,n){"use strict";var G=32767,W=new L.Cartographic,B=new L.Cartesian3;var z=new L.Rectangle,H=new L.Ellipsoid,O=new L.Cartesian3,Y={min:void 0,max:void 0};var Z=new L.Cartesian3,j=new L.Cartesian3,q=new L.Cartesian3,J=new L.Cartesian3,K=new L.Cartesian3;return a(function(a,e){var r=new Uint16Array(a.positions),n=new Uint16Array(a.widths),t=new Uint32Array(a.counts),i=new Uint16Array(a.batchIds);!function(a){a=new Float64Array(a);var e=0;Y.min=a[e++],Y.max=a[e++],L.Rectangle.unpack(a,2,z),e+=L.Rectangle.packedLength,L.Ellipsoid.unpack(a,e,H),e+=L.Ellipsoid.packedLength,L.Cartesian3.unpack(a,e,O)}(a.packedBuffer);for(var s=O,u=function(a,e,r,n,t){var i=a.length/3,s=a.subarray(0,i),u=a.subarray(i,2*i),c=a.subarray(2*i,3*i);P.AttributeCompression.zigZagDeltaDecode(s,u,c);for(var o=new Float64Array(a.length),f=0;f<i;++f){var p=s[f],C=u[f],b=c[f],p=_.CesiumMath.lerp(e.west,e.east,p/G),C=_.CesiumMath.lerp(e.south,e.north,C/G),b=_.CesiumMath.lerp(r,n,b/G),b=L.Cartographic.fromRadians(p,C,b,W),b=t.cartographicToCartesian(b,B);L.Cartesian3.pack(b,o,3*f)}return o}(r,z,Y.min,Y.max,H),r=4*(a=u.length/3)-4,c=new Float32Array(3*r),o=new Float32Array(3*r),f=new Float32Array(3*r),p=new Float32Array(2*r),C=new Uint16Array(r),b=0,d=0,w=0,h=0,l=t.length,y=0;y<l;++y){for(var k,v=t[y],A=n[y],g=i[y],m=0;m<v;++m){0===m?(E=L.Cartesian3.unpack(u,3*h,Z),x=L.Cartesian3.unpack(u,3*(h+1),j),k=L.Cartesian3.subtract(E,x,q),L.Cartesian3.add(E,k,k)):k=L.Cartesian3.unpack(u,3*(h+m-1),q);var x,E,D,I=L.Cartesian3.unpack(u,3*(h+m),J);m===v-1?(x=L.Cartesian3.unpack(u,3*(h+v-1),Z),E=L.Cartesian3.unpack(u,3*(h+v-2),j),D=L.Cartesian3.subtract(x,E,K),L.Cartesian3.add(x,D,D)):D=L.Cartesian3.unpack(u,3*(h+m+1),K),L.Cartesian3.subtract(k,s,k),L.Cartesian3.subtract(I,s,I),L.Cartesian3.subtract(D,s,D);for(var T=m===v-1?2:4,U=0===m?2:0;U<T;++U){L.Cartesian3.pack(I,c,b),L.Cartesian3.pack(k,o,b),L.Cartesian3.pack(D,f,b),b+=3;var F=U-2<0?-1:1;p[d++]=U%2*2-1,p[d++]=F*A,C[w++]=g}}h+=v}var N=S.IndexDatatype.createTypedArray(r,6*a-6),R=0,M=0,l=a-1;for(y=0;y<l;++y)N[M++]=R,N[M++]=R+2,N[M++]=R+1,N[M++]=R+1,N[M++]=R+2,N[M++]=R+3,R+=4;return e.push(c.buffer,o.buffer,f.buffer),e.push(p.buffer,C.buffer,N.buffer),{indexDatatype:2===N.BYTES_PER_ELEMENT?S.IndexDatatype.UNSIGNED_SHORT:S.IndexDatatype.UNSIGNED_INT,currentPositions:c.buffer,previousPositions:o.buffer,nextPositions:f.buffer,expandAndWidth:p.buffer,batchIds:C.buffer,indices:N.buffer}})}); diff --git a/public/lib/Cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js b/public/lib/Cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js new file mode 100644 index 0000000..5ffd1e0 --- /dev/null +++ b/public/lib/Cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js @@ -0,0 +1 @@ +define(["./EllipsoidTangentPlane-0fb66b96","./Transforms-5295b227","./Cartesian2-5b63e672","./when-ca391574","./TerrainEncoding-0f94e395","./Math-b53708b3","./OrientedBoundingBox-e61df120","./RuntimeError-19cb26ba","./WebMercatorProjection-e0329e39","./createTaskProcessorWorker","./Check-64f87f7d","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9"],function(Te,fe,Ce,ve,Me,Ne,be,xe,Se,e,t,i,n,r,a,o){"use strict";var we=Uint16Array.BYTES_PER_ELEMENT,Pe=Int32Array.BYTES_PER_ELEMENT,Be=Uint32Array.BYTES_PER_ELEMENT,ye=Float32Array.BYTES_PER_ELEMENT,Ae=Float64Array.BYTES_PER_ELEMENT;function Re(e,t,i){i=ve.defaultValue(i,Ne.CesiumMath);for(var n=e.length,r=0;r<n;++r)if(i.equalsEpsilon(e[r],t,Ne.CesiumMath.EPSILON12))return r;return-1}var _e=new Ce.Cartographic,We=new Ce.Cartesian3,Fe=new Ce.Cartesian3,Oe=new Ce.Cartesian3,Ye=new fe.Matrix4;function ke(e,t,i,n,r,a,o,s,u,h){for(var c=o.length,d=0;d<c;++d){var g=o[d],l=g.cartographic,m=g.index,p=e.length,I=l.longitude,E=l.latitude,E=Ne.CesiumMath.clamp(E,-Ne.CesiumMath.PI_OVER_TWO,Ne.CesiumMath.PI_OVER_TWO),l=l.height-a.skirtHeight;a.hMin=Math.min(a.hMin,l),Ce.Cartographic.fromRadians(I,E,l,_e),u&&(_e.longitude+=s),u?d===c-1?_e.latitude+=h:0===d&&(_e.latitude-=h):_e.latitude+=s;E=a.ellipsoid.cartographicToCartesian(_e);e.push(E),t.push(l),i.push(Ce.Cartesian2.clone(i[m])),0<n.length&&n.push(n[m]),fe.Matrix4.multiplyByPoint(a.toENU,E,We);l=a.minimum,E=a.maximum;Ce.Cartesian3.minimumByComponent(We,l,l),Ce.Cartesian3.maximumByComponent(We,E,E);E=a.lastBorderPoint;ve.defined(E)&&(E=E.index,r.push(E,p-1,p,p,m,E)),a.lastBorderPoint=g}}return e(function(e,t){e.ellipsoid=Ce.Ellipsoid.clone(e.ellipsoid),e.rectangle=Ce.Rectangle.clone(e.rectangle);var i=function(e,t,i,n,r,a,o,s,u,h){var c,d,g,l,m;ce=ve.defined(n)?(c=n.west,d=n.south,g=n.east,l=n.north,m=n.width,n.height):(c=Ne.CesiumMath.toRadians(r.west),d=Ne.CesiumMath.toRadians(r.south),g=Ne.CesiumMath.toRadians(r.east),l=Ne.CesiumMath.toRadians(r.north),m=Ne.CesiumMath.toRadians(n.width),Ne.CesiumMath.toRadians(n.height));var p,I,E=[d,l],T=[c,g],f=fe.Transforms.eastNorthUpToFixedFrame(t,i),C=fe.Matrix4.inverseTransformation(f,Ye);s&&(p=Se.WebMercatorProjection.geodeticLatitudeToMercatorAngle(d),I=1/(Se.WebMercatorProjection.geodeticLatitudeToMercatorAngle(l)-p));var v=new DataView(e),M=Number.POSITIVE_INFINITY,N=Number.NEGATIVE_INFINITY,b=Fe;b.x=Number.POSITIVE_INFINITY,b.y=Number.POSITIVE_INFINITY,b.z=Number.POSITIVE_INFINITY;var x=Oe;x.x=Number.NEGATIVE_INFINITY,x.y=Number.NEGATIVE_INFINITY,x.z=Number.NEGATIVE_INFINITY;var S,w,P=0,B=0,y=0;for(w=0;w<4;++w){var A=P;S=v.getUint32(A,!0),A+=Be;var R=Ne.CesiumMath.toRadians(180*v.getFloat64(A,!0));A+=Ae,-1===Re(T,R)&&T.push(R);R=Ne.CesiumMath.toRadians(180*v.getFloat64(A,!0));A+=Ae,-1===Re(E,R)&&E.push(R),A+=2*Ae;R=v.getInt32(A,!0);A+=Pe,B+=R,R=v.getInt32(A,!0),y+=3*R,P+=S+Be}var _=[],W=[],F=new Array(B),O=new Array(B),Y=new Array(B),k=s?new Array(B):[],U=new Array(y),V=[],H=[],L=[],D=[],G=0,j=0;for(w=P=0;w<4;++w){S=v.getUint32(P,!0);var z=P+=Be,q=Ne.CesiumMath.toRadians(180*v.getFloat64(P,!0));P+=Ae;var J=Ne.CesiumMath.toRadians(180*v.getFloat64(P,!0));P+=Ae;var K=Ne.CesiumMath.toRadians(180*v.getFloat64(P,!0)),Q=.5*K;P+=Ae;var X=Ne.CesiumMath.toRadians(180*v.getFloat64(P,!0)),Z=.5*X;P+=Ae;var $=v.getInt32(P,!0);P+=Pe;var ee=v.getInt32(P,!0);P+=Pe,P+=Pe;for(var te=new Array($),ie=0;ie<$;++ie){var ne=q+v.getUint8(P++)*K;_e.longitude=ne;var re=J+v.getUint8(P++)*X;_e.latitude=re;var ae=v.getFloat32(P,!0);if(P+=ye,0!==ae&&ae<h&&(ae*=-Math.pow(2,u)),ae*=6371010*a,_e.height=ae,-1!==Re(T,ne)||-1!==Re(E,re)){var oe=Re(_,_e,Ce.Cartographic);if(-1!==oe){te[ie]=W[oe];continue}_.push(Ce.Cartographic.clone(_e)),W.push(G)}te[ie]=G,Math.abs(ne-c)<Q?V.push({index:G,cartographic:Ce.Cartographic.clone(_e)}):Math.abs(ne-g)<Q?L.push({index:G,cartographic:Ce.Cartographic.clone(_e)}):Math.abs(re-d)<Z?H.push({index:G,cartographic:Ce.Cartographic.clone(_e)}):Math.abs(re-l)<Z&&D.push({index:G,cartographic:Ce.Cartographic.clone(_e)}),M=Math.min(ae,M),N=Math.max(ae,N),Y[G]=ae;ae=i.cartographicToCartesian(_e);F[G]=ae,s&&(k[G]=(Se.WebMercatorProjection.geodeticLatitudeToMercatorAngle(re)-p)*I),fe.Matrix4.multiplyByPoint(C,ae,We),Ce.Cartesian3.minimumByComponent(We,b,b),Ce.Cartesian3.maximumByComponent(We,x,x);ne=(ne-c)/(g-c);ne=Ne.CesiumMath.clamp(ne,0,1);re=(re-d)/(l-d);re=Ne.CesiumMath.clamp(re,0,1),O[G]=new Ce.Cartesian2(ne,re),++G}for(var se=3*ee,ue=0;ue<se;++ue,++j)U[j]=te[v.getUint16(P,!0)],P+=we;if(S!==P-z)throw new xe.RuntimeError("Invalid terrain tile.")}F.length=G,O.length=G,Y.length=G,s&&(k.length=G);var he=G,r=j,e={hMin:M,lastBorderPoint:void 0,skirtHeight:o,toENU:C,ellipsoid:i,minimum:b,maximum:x};V.sort(function(e,t){return t.cartographic.latitude-e.cartographic.latitude}),H.sort(function(e,t){return e.cartographic.longitude-t.cartographic.longitude}),L.sort(function(e,t){return e.cartographic.latitude-t.cartographic.latitude}),D.sort(function(e,t){return t.cartographic.longitude-e.cartographic.longitude});o=1e-5;{var ce;ke(F,Y,O,k,U,e,V,-o*m,!0,-o*ce),ke(F,Y,O,k,U,e,H,-o*ce,!1),ke(F,Y,O,k,U,e,L,o*m,!0,o*ce),ke(F,Y,O,k,U,e,D,o*ce,!1),0<V.length&&0<D.length&&(ge=V[0].index,le=D[D.length-1].index,ce=F.length-1,U.push(le,ce,he,he,ge,le))}B=F.length;var de,ge=fe.BoundingSphere.fromPoints(F);ve.defined(n)&&(de=be.OrientedBoundingBox.fromRectangle(n,M,N,i));for(var le=new Me.EllipsoidalOccluder(i).computeHorizonCullingPointPossiblyUnderEllipsoid(t,F,M),n=new Te.AxisAlignedBoundingBox(b,x,t),me=new Me.TerrainEncoding(n,e.hMin,N,f,!1,s),pe=new Float32Array(B*me.getStride()),Ie=0,Ee=0;Ee<B;++Ee)Ie=me.encode(pe,Ie,F[Ee],O[Ee],Y[Ee],void 0,k[Ee]);t=V.map(function(e){return e.index}).reverse(),n=H.map(function(e){return e.index}).reverse(),e=L.map(function(e){return e.index}).reverse(),f=D.map(function(e){return e.index}).reverse();return n.unshift(e[e.length-1]),n.push(t[0]),f.unshift(t[t.length-1]),f.push(e[0]),{vertices:pe,indices:new Uint16Array(U),maximumHeight:N,minimumHeight:M,encoding:me,boundingSphere3D:ge,orientedBoundingBox:de,occludeePointInScaledSpace:le,vertexCountWithoutSkirts:he,indexCountWithoutSkirts:r,westIndicesSouthToNorth:t,southIndicesEastToWest:n,eastIndicesNorthToSouth:e,northIndicesWestToEast:f}}(e.buffer,e.relativeToCenter,e.ellipsoid,e.rectangle,e.nativeRectangle,e.exaggeration,e.skirtHeight,e.includeWebMercatorT,e.negativeAltitudeExponentBias,e.negativeElevationThreshold),n=i.vertices;return t.push(n.buffer),e=i.indices,t.push(e.buffer),{vertices:n.buffer,indices:e.buffer,numberOfAttributes:i.encoding.getStride(),minimumHeight:i.minimumHeight,maximumHeight:i.maximumHeight,boundingSphere3D:i.boundingSphere3D,orientedBoundingBox:i.orientedBoundingBox,occludeePointInScaledSpace:i.occludeePointInScaledSpace,encoding:i.encoding,vertexCountWithoutSkirts:i.vertexCountWithoutSkirts,indexCountWithoutSkirts:i.indexCountWithoutSkirts,westIndicesSouthToNorth:i.westIndicesSouthToNorth,southIndicesEastToWest:i.southIndicesEastToWest,eastIndicesNorthToSouth:i.eastIndicesNorthToSouth,northIndicesWestToEast:i.northIndicesWestToEast}})}); diff --git a/public/lib/Cesium/Workers/createVerticesFromHeightmap.js b/public/lib/Cesium/Workers/createVerticesFromHeightmap.js new file mode 100644 index 0000000..092c810 --- /dev/null +++ b/public/lib/Cesium/Workers/createVerticesFromHeightmap.js @@ -0,0 +1 @@ +define(["./Cartesian2-5b63e672","./EllipsoidTangentPlane-0fb66b96","./Transforms-5295b227","./when-ca391574","./Check-64f87f7d","./TerrainEncoding-0f94e395","./Math-b53708b3","./OrientedBoundingBox-e61df120","./WebMercatorProjection-e0329e39","./RuntimeError-19cb26ba","./createTaskProcessorWorker","./IntersectionTests-f5111308","./Plane-99b2becd","./AttributeCompression-a99f24b9","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9"],function(Se,Pe,Ee,Ce,e,Fe,Le,Oe,Ne,n,t,a,i,r,s,l){"use strict";var o=Object.freeze({NONE:0,LERC:1}),ze={};ze.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var Re=new Se.Cartesian3,_e=new Ee.Matrix4,He=new Se.Cartesian3,Ye=new Se.Cartesian3;ze.computeVertices=function(e){var t,a,i,r=Math.cos,n=Math.sin,s=Math.sqrt,l=Math.atan,o=Math.exp,f=Le.CesiumMath.PI_OVER_TWO,u=Le.CesiumMath.toRadians,c=e.heightmap,d=e.width,h=e.height,m=e.skirtHeight,g=Ce.defaultValue(e.isGeographic,!0),p=Ce.defaultValue(e.ellipsoid,Se.Ellipsoid.WGS84),w=1/p.maximumRadius,x=e.nativeRectangle,k=e.rectangle,y=Ce.defined(k)?(t=k.west,a=k.south,i=k.east,k.north):g?(t=u(x.west),a=u(x.south),i=u(x.east),u(x.north)):(t=x.west*w,a=f-2*l(o(-x.south*w)),i=x.east*w,f-2*l(o(-x.north*w))),b=e.relativeToCenter,I=Ce.defined(b),b=I?b:Se.Cartesian3.ZERO,U=Ce.defaultValue(e.exaggeration,1),v=Ce.defaultValue(e.includeWebMercatorT,!1),T=Ce.defaultValue(e.structure,ze.DEFAULT_STRUCTURE),M=Ce.defaultValue(T.heightScale,ze.DEFAULT_STRUCTURE.heightScale),V=Ce.defaultValue(T.heightOffset,ze.DEFAULT_STRUCTURE.heightOffset),A=Ce.defaultValue(T.elementsPerHeight,ze.DEFAULT_STRUCTURE.elementsPerHeight),B=Ce.defaultValue(T.stride,ze.DEFAULT_STRUCTURE.stride),D=Ce.defaultValue(T.elementMultiplier,ze.DEFAULT_STRUCTURE.elementMultiplier),S=Ce.defaultValue(T.isBigEndian,ze.DEFAULT_STRUCTURE.isBigEndian),P=Se.Rectangle.computeWidth(x),E=Se.Rectangle.computeHeight(x),C=P/(d-1),F=E/(h-1);g||(P*=w,E*=w);var L,O,e=p.radiiSquared,N=e.x,z=e.y,R=e.z,_=65536,H=-65536,T=Ee.Transforms.eastNorthUpToFixedFrame(b,p),Y=Ee.Matrix4.inverseTransformation(T,_e);v&&(L=Ne.WebMercatorProjection.geodeticLatitudeToMercatorAngle(a),O=1/(Ne.WebMercatorProjection.geodeticLatitudeToMercatorAngle(y)-L));var W=He;W.x=Number.POSITIVE_INFINITY,W.y=Number.POSITIVE_INFINITY,W.z=Number.POSITIVE_INFINITY;var X=Ye;X.x=Number.NEGATIVE_INFINITY,X.y=Number.NEGATIVE_INFINITY,X.z=Number.NEGATIVE_INFINITY;var Z=Number.POSITIVE_INFINITY,j=d*h,G=j+(0<m?2*d+2*h:0),q=new Array(G),Q=new Array(G),J=new Array(G),K=v?new Array(G):[],$=0,ee=h,te=0,ae=d;0<m&&(--$,++ee,--te,++ae);for(var ie=$;ie<ee;++ie){var re=ie;h<=(re=re<0?0:re)&&(re=h-1);var ne=x.north-F*re,se=((ne=g?u(ne):f-2*l(o(-ne*w)))-a)/(y-a),se=Le.CesiumMath.clamp(se,0,1),le=ie===$,oe=ie===ee-1;0<m&&(le?ne+=1e-5*E:oe&&(ne-=1e-5*E));var fe,ue=r(ne),ce=n(ne),de=R*ce;v&&(fe=(Ne.WebMercatorProjection.geodeticLatitudeToMercatorAngle(ne)-L)*O);for(var he=te;he<ae;++he){var me=he,ge=re*(d*B)+(me=d<=(me=me<0?0:me)?d-1:me)*B;if(1===A)we=c[ge];else{var pe,we=0;if(S)for(pe=0;pe<A;++pe)we=we*D+c[ge+pe];else for(pe=A-1;0<=pe;--pe)we=we*D+c[ge+pe]}we=(we*M+V)*U;var H=Math.max(H,we),_=Math.min(_,we),xe=x.west+C*me;g?xe=u(xe):xe*=w;var ke=(xe-t)/(i-t),ke=Le.CesiumMath.clamp(ke,0,1),ye=re*d+me;if(0<m){var be=he===te,Ie=he===ae-1,Ue=le||oe||be||Ie;if((le||oe)&&(be||Ie))continue;Ue&&(we-=m,be?(ye=h-re-1+j,xe-=1e-5*P):oe?ye=j+h+(d-me-1):Ie?(ye=j+h+d+re,xe+=1e-5*P):le&&(ye=j+h+d+h+me))}var ve=ue*r(xe),Ue=ue*n(xe),be=N*ve,Ie=z*Ue,me=1/s(be*ve+Ie*Ue+de*ce),xe=be*me,be=Ie*me,Ie=de*me,me=new Se.Cartesian3;me.x=xe+ve*we,me.y=be+Ue*we,me.z=Ie+ce*we,q[ye]=me,Q[ye]=we,J[ye]=new Se.Cartesian2(ke,se),v&&(K[ye]=fe),Ee.Matrix4.multiplyByPoint(Y,me,Re),Se.Cartesian3.minimumByComponent(Re,W,W),Se.Cartesian3.maximumByComponent(Re,X,X),Z=Math.min(Z,we)}}var Te,Me,e=Ee.BoundingSphere.fromPoints(q);Ce.defined(k)&&(Te=Oe.OrientedBoundingBox.fromRectangle(k,_,H,p)),I&&(Me=new Fe.EllipsoidalOccluder(p).computeHorizonCullingPointPossiblyUnderEllipsoid(b,q,_));for(var b=new Pe.AxisAlignedBoundingBox(W,X,b),Ve=new Fe.TerrainEncoding(b,Z,H,T,!1,v),Ae=new Float32Array(G*Ve.getStride()),Be=0,De=0;De<G;++De)Be=Ve.encode(Ae,Be,q[De],J[De],Q[De],void 0,K[De]);return{vertices:Ae,maximumHeight:H,minimumHeight:_,encoding:Ve,boundingSphere3D:e,orientedBoundingBox:Te,occludeePointInScaledSpace:Me}};var f,u,c,d,h,B,m,w,x,k,g,p={};f={defaultNoDataValue:-34027999387901484e22,decode:function(e,t){var a=(t=t||{}).encodedMaskData||null===t.encodedMaskData,i=h(e,t.inputOffset||0,a),e=null!==t.noDataValue?t.noDataValue:f.defaultNoDataValue,a=u(i,t.pixelType||Float32Array,t.encodedMaskData,e,t.returnMask),e={width:i.width,height:i.height,pixelData:a.resultPixels,minValue:a.minValue,maxValue:i.pixels.maxValue,noDataValue:e};return a.resultMask&&(e.maskData=a.resultMask),t.returnEncodedMask&&i.mask&&(e.encodedMaskData=i.mask.bitset||null),t.returnFileInfo&&(e.fileInfo=c(i),t.computeUsedBitDepths&&(e.fileInfo.bitDepths=d(i))),e}},u=function(e,t,a,i,r){var n,s,l,o=0,f=e.pixels.numBlocksX,u=e.pixels.numBlocksY,c=Math.floor(e.width/f),d=Math.floor(e.height/u),h=2*e.maxZError,m=Number.MAX_VALUE;a=a||(e.mask?e.mask.bitset:null),s=new t(e.width*e.height),r&&a&&(l=new Uint8Array(e.width*e.height));for(var g,p,w=new Float32Array(c*d),x=0;x<=u;x++){var k=x!==u?d:e.height%u;if(0!==k)for(var y=0;y<=f;y++){var b=y!==f?c:e.width%f;if(0!==b){var I,U,v,T,M=x*e.width*d+y*c,V=e.width-b,A=e.pixels.blocks[o];if(A.encoding<2?(I=0===A.encoding?A.rawData:(B(A.stuffedData,A.bitsPerPixel,A.numValidPixels,A.offset,h,w,e.pixels.maxValue),w),U=0):v=2===A.encoding?0:A.offset,a)for(p=0;p<k;p++){for(7&M&&(T=a[M>>3],T<<=7&M),g=0;g<b;g++)128&(T=!(7&M)?a[M>>3]:T)?(l&&(l[M]=1),m=(n=A.encoding<2?I[U++]:v)<m?n:m,s[M++]=n):(l&&(l[M]=0),s[M++]=i),T<<=1;M+=V}else if(A.encoding<2)for(p=0;p<k;p++){for(g=0;g<b;g++)m=(n=I[U++])<m?n:m,s[M++]=n;M+=V}else for(m=v<m?v:m,p=0;p<k;p++){for(g=0;g<b;g++)s[M++]=v;M+=V}if(1===A.encoding&&U!==A.numValidPixels)throw"Block and Mask do not match";o++}}}return{resultPixels:s,resultMask:l,minValue:m}},c=function(e){return{fileIdentifierString:e.fileIdentifierString,fileVersion:e.fileVersion,imageType:e.imageType,height:e.height,width:e.width,maxZError:e.maxZError,eofOffset:e.eofOffset,mask:e.mask?{numBlocksX:e.mask.numBlocksX,numBlocksY:e.mask.numBlocksY,numBytes:e.mask.numBytes,maxValue:e.mask.maxValue}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,numBytes:e.pixels.numBytes,maxValue:e.pixels.maxValue,noDataValue:e.noDataValue}}},d=function(e){for(var t=e.pixels.numBlocksX*e.pixels.numBlocksY,a={},i=0;i<t;i++){var r=e.pixels.blocks[i];0===r.encoding?a.float32=!0:1===r.encoding?a[r.bitsPerPixel]=!0:a[0]=!0}return Object.keys(a)},h=function(e,t,a){var i={},r=new Uint8Array(e,t,10);if(i.fileIdentifierString=String.fromCharCode.apply(null,r),"CntZImage"!==i.fileIdentifierString.trim())throw"Unexpected file identifier string: "+i.fileIdentifierString;t+=10;var n=new DataView(e,t,24);if(i.fileVersion=n.getInt32(0,!0),i.imageType=n.getInt32(4,!0),i.height=n.getUint32(8,!0),i.width=n.getUint32(12,!0),i.maxZError=n.getFloat64(16,!0),t+=24,!a)if(n=new DataView(e,t,16),i.mask={},i.mask.numBlocksY=n.getUint32(0,!0),i.mask.numBlocksX=n.getUint32(4,!0),i.mask.numBytes=n.getUint32(8,!0),i.mask.maxValue=n.getFloat32(12,!0),t+=16,0<i.mask.numBytes){var s=new Uint8Array(Math.ceil(i.width*i.height/8)),l=(n=new DataView(e,t,i.mask.numBytes)).getInt16(0,!0),o=2,f=0;do{if(0<l)for(;l--;)s[f++]=n.getUint8(o++);else for(var u=n.getUint8(o++),l=-l;l--;)s[f++]=u}while(l=n.getInt16(o,!0),(o+=2)<i.mask.numBytes);if(-32768!==l||f<s.length)throw"Unexpected end of mask RLE encoding";i.mask.bitset=s,t+=i.mask.numBytes}else 0==(i.mask.numBytes|i.mask.numBlocksY|i.mask.maxValue)&&(i.mask.bitset=new Uint8Array(Math.ceil(i.width*i.height/8)));n=new DataView(e,t,16),i.pixels={},i.pixels.numBlocksY=n.getUint32(0,!0),i.pixels.numBlocksX=n.getUint32(4,!0),i.pixels.numBytes=n.getUint32(8,!0),i.pixels.maxValue=n.getFloat32(12,!0),t+=16;var r=i.pixels.numBlocksX,a=i.pixels.numBlocksY,c=r+(0<i.width%r?1:0),d=a+(0<i.height%a?1:0);i.pixels.blocks=new Array(c*d);for(var h=0,m=0;m<d;m++)for(var g=0;g<c;g++){var p=0,w=e.byteLength-t;n=new DataView(e,t,Math.min(10,w));var x={};i.pixels.blocks[h++]=x;var k,w=n.getUint8(0);if(p++,x.encoding=63&w,3<x.encoding)throw"Invalid block encoding ("+x.encoding+")";if(2!==x.encoding){if(0!==w&&2!==w){if(w>>=6,2===(x.offsetType=w))x.offset=n.getInt8(1),p++;else if(1===w)x.offset=n.getInt16(1,!0),p+=2;else{if(0!==w)throw"Invalid block offset type";x.offset=n.getFloat32(1,!0),p+=4}if(1===x.encoding)if(w=n.getUint8(p),p++,x.bitsPerPixel=63&w,w>>=6,2===(x.numValidPixelsType=w))x.numValidPixels=n.getUint8(p),p++;else if(1===w)x.numValidPixels=n.getUint16(p,!0),p+=2;else{if(0!==w)throw"Invalid valid pixel count type";x.numValidPixels=n.getUint32(p,!0),p+=4}}if(t+=p,3!==x.encoding)if(0===x.encoding){var y=(i.pixels.numBytes-1)/4;if(y!==Math.floor(y))throw"uncompressed block has invalid length";k=new ArrayBuffer(4*y),new Uint8Array(k).set(new Uint8Array(e,t,4*y));var b=new Float32Array(k);x.rawData=b,t+=4*y}else 1===x.encoding&&(b=Math.ceil(x.numValidPixels*x.bitsPerPixel/8),y=Math.ceil(b/4),k=new ArrayBuffer(4*y),new Uint8Array(k).set(new Uint8Array(e,t,b)),x.stuffedData=new Uint32Array(k),t+=b)}else t++}return i.eofOffset=t,i},B=function(e,t,a,i,r,n,s){var l,o,f,u,c=(1<<t)-1,d=0,h=0,m=Math.ceil((s-i)/r),g=4*e.length-Math.ceil(t*a/8);for(e[e.length-1]<<=8*g,l=0;l<a;l++)0===h&&(u=e[d++],h=32),t<=h?(f=u>>>h-t&c,h-=t):(f=(u&c)<<(o=t-h)&c,f+=(u=e[d++])>>>(h=32-o)),n[l]=f<m?i+f*r:s;return n},w=f,x=function(){var y=function(e,t,a,i,r,n,s,l){var o,f,u,c,d,h=(1<<a)-1,m=0,g=0,p=4*e.length-Math.ceil(a*i/8);if(e[e.length-1]<<=8*p,r)for(o=0;o<i;o++)0===g&&(u=e[m++],g=32),a<=g?(f=u>>>g-a&h,g-=a):(f=(u&h)<<(c=a-g)&h,f+=(u=e[m++])>>>(g=32-c)),t[o]=r[f];else for(d=Math.ceil((l-n)/s),o=0;o<i;o++)0===g&&(u=e[m++],g=32),a<=g?(f=u>>>g-a&h,g-=a):(f=(u&h)<<(c=a-g)&h,f+=(u=e[m++])>>>(g=32-c)),t[o]=f<d?n+f*s:l},b=function(e,t,a,i,r,n){var s,l,o=(1<<t)-1,f=0,u=0,c=0,d=0,h=[],m=4*e.length-Math.ceil(t*a/8);e[e.length-1]<<=8*m;for(var g=Math.ceil((n-i)/r),u=0;u<a;u++)0===c&&(l=e[f++],c=32),t<=c?(d=l>>>c-t&o,c-=t):(d=(l&o)<<(s=t-c)&o,d+=(l=e[f++])>>>(c=32-s)),h[u]=d<g?i+d*r:n;return h.unshift(i),h},I=function(e,t,a,i,r,n,s,l){var o,f,u,c=(1<<a)-1,d=0,h=0,m=0;if(r)for(p=0;p<i;p++)0===h&&(f=e[d++],h=32,m=0),a<=h?(o=f>>>m&c,h-=a,m+=a):(o=f>>>m&c,h=32-(u=a-h),o|=((f=e[d++])&(1<<u)-1)<<a-u,m=u),t[p]=r[o];else for(var g=Math.ceil((l-n)/s),p=0;p<i;p++)0===h&&(f=e[d++],h=32,m=0),a<=h?(o=f>>>m&c,h-=a,m+=a):(o=f>>>m&c,h=32-(u=a-h),o|=((f=e[d++])&(1<<u)-1)<<a-u,m=u),t[p]=o<g?n+o*s:l;return t},U=function(e,t,a,i,r,n){for(var s,l,o=(1<<t)-1,f=0,u=0,c=0,d=0,h=0,m=[],g=Math.ceil((n-i)/r),u=0;u<a;u++)0===c&&(l=e[f++],c=32,h=0),t<=c?(d=l>>>h&o,c-=t,h+=t):(d=l>>>h&o,c=32-(s=t-c),d|=((l=e[f++])&(1<<s)-1)<<t-s,h=s),m[u]=d<g?i+d*r:n;return m.unshift(i),m},v=function(e,t,a,i){var r,n,s,l,o=(1<<a)-1,f=0,u=0,c=4*e.length-Math.ceil(a*i/8);for(e[e.length-1]<<=8*c,r=0;r<i;r++)0===u&&(s=e[f++],u=32),a<=u?(n=s>>>u-a&o,u-=a):(n=(s&o)<<(l=a-u)&o,n+=(s=e[f++])>>>(u=32-l)),t[r]=n;return t},T=function(e,t,a,i){for(var r,n,s,l=(1<<a)-1,o=0,f=0,u=0,c=0;c<i;c++)0===f&&(n=e[o++],f=32,u=0),a<=f?(r=n>>>u&l,f-=a,u+=a):(r=n>>>u&l,f=32-(s=a-f),r|=((n=e[o++])&(1<<s)-1)<<a-s,u=s),t[c]=r;return t},z={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(e){for(var t=65535,a=65535,i=e.length,r=Math.floor(i/2),n=0;r;){var s=359<=r?359:r;for(r-=s;t+=e[n++]<<8,a+=t+=e[n++],--s;);t=(65535&t)+(t>>>16),a=(65535&a)+(a>>>16)}return 1&i&&(a+=t+=e[n]<<8),((a=(65535&a)+(a>>>16))<<16|(t=(65535&t)+(t>>>16)))>>>0},readHeaderInfo:function(e,t){var a=t.ptr,i=new Uint8Array(e,a,6),r={};if(r.fileIdentifierString=String.fromCharCode.apply(null,i),0!==r.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+r.fileIdentifierString;a+=6;var n=new DataView(e,a,8),i=n.getInt32(0,!0);if(r.fileVersion=i,a+=4,3<=i&&(r.checksum=n.getUint32(4,!0),a+=4),n=new DataView(e,a,12),r.height=n.getUint32(0,!0),r.width=n.getUint32(4,!0),a+=8,4<=i?(r.numDims=n.getUint32(8,!0),a+=4):r.numDims=1,n=new DataView(e,a,40),r.numValidPixel=n.getUint32(0,!0),r.microBlockSize=n.getInt32(4,!0),r.blobSize=n.getInt32(8,!0),r.imageType=n.getInt32(12,!0),r.maxZError=n.getFloat64(16,!0),r.zMin=n.getFloat64(24,!0),r.zMax=n.getFloat64(32,!0),a+=40,t.headerInfo=r,t.ptr=a,3<=i&&(i=4<=i?52:48,this.computeChecksumFletcher32(new Uint8Array(e,a-i,r.blobSize-14))!==r.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(e,t){var a=t.headerInfo,i=this.getDataTypeArray(a.imageType),r=a.numDims*this.getDataTypeSize(a.imageType),n=this.readSubArray(e,t.ptr,i,r),s=this.readSubArray(e,t.ptr+r,i,r);t.ptr+=2*r;for(var l=!0,o=0;o<a.numDims;o++)if(n[o]!==s[o]){l=!1;break}return a.minValues=n,a.maxValues=s,l},readSubArray:function(e,t,a,i){var r=a===Uint8Array?new Uint8Array(e,t,i):(r=new ArrayBuffer(i),new Uint8Array(r).set(new Uint8Array(e,t,i)),new a(r));return r},readMask:function(e,t){var a=t.ptr,i=t.headerInfo,r=i.width*i.height,i=i.numValidPixel,n=new DataView(e,a,4),s={};if(s.numBytes=n.getUint32(0,!0),a+=4,(0===i||r===i)&&0!==s.numBytes)throw"invalid mask";if(0===i)o=new Uint8Array(Math.ceil(r/8)),s.bitset=o,d=new Uint8Array(r),t.pixels.resultMask=d,a+=s.numBytes;else if(0<s.numBytes){var l,o=new Uint8Array(Math.ceil(r/8)),f=(n=new DataView(e,a,s.numBytes)).getInt16(0,!0),u=2,c=0;do{if(0<f)for(;f--;)o[c++]=n.getUint8(u++);else for(l=n.getUint8(u++),f=-f;f--;)o[c++]=l}while(f=n.getInt16(u,!0),(u+=2)<s.numBytes);if(-32768!==f||c<o.length)throw"Unexpected end of mask RLE encoding";for(var d=new Uint8Array(r),h=0,m=0,m=0;m<r;m++)7&m?(h=o[m>>3],h<<=7&m):h=o[m>>3],128&h&&(d[m]=1);t.pixels.resultMask=d,s.bitset=o,a+=s.numBytes}return t.ptr=a,t.mask=s,!0},readDataOneSweep:function(e,t,a){var i=t.ptr,r=t.headerInfo,n=r.numDims,s=r.width*r.height,l=r.imageType,r=r.numValidPixel*z.getDataTypeSize(l)*n,o=t.pixels.resultMask,f=a===Uint8Array?new Uint8Array(e,i,r):(l=new ArrayBuffer(r),new Uint8Array(l).set(new Uint8Array(e,i,r)),new a(l));if(f.length===s*n)t.pixels.resultPixels=f;else{t.pixels.resultPixels=new a(s*n);var u,c=0,d=0,h=0;if(1<n)for(h=0;h<n;h++)for(u=h*s,d=0;d<s;d++)o[d]&&(t.pixels.resultPixels[u+d]=f[c++]);else for(d=0;d<s;d++)o[d]&&(t.pixels.resultPixels[d]=f[c++])}return i+=r,t.ptr=i,!0},readHuffmanTree:function(e,t){var a=this.HUFFMAN_LUT_BITS_MAX,i=new DataView(e,t.ptr,16);if(t.ptr+=16,i.getInt32(0,!0)<2)throw"unsupported Huffman version";var r=i.getInt32(4,!0),n=i.getInt32(8,!0),s=i.getInt32(12,!0);if(s<=n)return!1;var l=new Uint32Array(s-n);z.decodeBits(e,t,l);for(var o,f,u,c=[],d=n;d<s;d++)c[o=d-(d<r?0:r)]={first:l[d-n],second:null};var h=e.byteLength-t.ptr,i=Math.ceil(h/4),i=new ArrayBuffer(4*i);new Uint8Array(i).set(new Uint8Array(e,t.ptr,h));var m=new Uint32Array(i),g=0,p=0,w=m[0];for(d=n;d<s;d++)0<(u=c[o=d-(d<r?0:r)].first)&&(c[o].second=w<<g>>>32-u,u<=32-g?32===(g+=u)&&(g=0,w=m[++p]):(g+=u-32,w=m[++p],c[o].second|=w>>>32-g));var x=0,k=0,y=new V;for(d=0;d<c.length;d++)void 0!==c[d]&&(x=Math.max(x,c[d].first));k=a<=x?a:x,30<=x&&console.log("WARning, large NUM LUT BITS IS "+x);var b,I,U,v,T,M=[];for(d=n;d<s;d++)if(0<(u=c[o=d-(d<r?0:r)].first))if(b=[u,o],u<=k)for(I=c[o].second<<k-u,U=1<<k-u,f=0;f<U;f++)M[I|f]=b;else for(I=c[o].second,T=y,v=u-1;0<=v;v--)T=I>>>v&1?(T.right||(T.right=new V),T.right):(T.left||(T.left=new V),T.left),0!==v||T.val||(T.val=b[1]);return{decodeLut:M,numBitsLUTQick:k,numBitsLUT:x,tree:y,stuffedData:m,srcPtr:p,bitPos:g}},readHuffman:function(e,t,a){var i,r,n,s,l,o,f,u,c,d=t.headerInfo,h=d.numDims,m=t.headerInfo.height,g=t.headerInfo.width,p=g*m,e=this.readHuffmanTree(e,t),w=e.decodeLut,x=e.tree,k=e.stuffedData,y=e.srcPtr,b=e.bitPos,I=e.numBitsLUTQick,U=e.numBitsLUT,v=0===t.headerInfo.imageType?128:0,T=t.pixels.resultMask,M=0;0<b&&(y++,b=0);for(var V=k[y],A=1===t.encodeMode,B=new a(p*h),D=B,S=0;S<d.numDims;S++){if(1<h&&(D=new a(B.buffer,p*S,p),M=0),t.headerInfo.numValidPixel===g*m)for(o=u=0;o<m;o++)for(f=0;f<g;f++,u++){if(r=0,l=s=V<<b>>>32-I,w[l=32-b<I?s|=k[y+1]>>>64-b-I:l])r=w[l][1],b+=w[l][0];else for(l=s=V<<b>>>32-U,32-b<U&&(l=s|=k[y+1]>>>64-b-U),i=x,c=0;c<U;c++)if(!(i=s>>>U-c-1&1?i.right:i.left).left&&!i.right){r=i.val,b=b+c+1;break}32<=b&&(b-=32,V=k[++y]),n=r-v,A?(n+=!(0<f)&&0<o?D[u-g]:M,n&=255,M=D[u]=n):D[u]=n}else for(o=u=0;o<m;o++)for(f=0;f<g;f++,u++)if(T[u]){if(r=0,l=s=V<<b>>>32-I,w[l=32-b<I?s|=k[y+1]>>>64-b-I:l])r=w[l][1],b+=w[l][0];else for(l=s=V<<b>>>32-U,32-b<U&&(l=s|=k[y+1]>>>64-b-U),i=x,c=0;c<U;c++)if(!(i=s>>>U-c-1&1?i.right:i.left).left&&!i.right){r=i.val,b=b+c+1;break}32<=b&&(b-=32,V=k[++y]),n=r-v,A?(!(0<f&&T[u-1])&&0<o&&T[u-g]?n+=D[u-g]:n+=M,n&=255,M=D[u]=n):D[u]=n}t.ptr=t.ptr+4*(y+1)+(0<b?4:0)}t.pixels.resultPixels=B},decodeBits:function(e,t,a,i,r){var n=t.headerInfo,s=n.fileVersion,l=0,o=5<=e.byteLength-t.ptr?5:e.byteLength-t.ptr,f=new DataView(e,t.ptr,o),u=f.getUint8(0);l++;var c=u>>6,d=0==c?4:3-c,o=0<(32&u),c=31&u,u=0;if(1==d)u=f.getUint8(l),l++;else if(2==d)u=f.getUint16(l,!0),l+=2;else{if(4!=d)throw"Invalid valid pixel count type";u=f.getUint32(l,!0),l+=4}var h,m,g,p,w,x,k,d=2*n.maxZError,n=1<n.numDims?n.maxValues[r]:n.zMax;if(o){for(t.counter.lut++,x=f.getUint8(l),l++,p=Math.ceil((x-1)*c/8),w=Math.ceil(p/4),m=new ArrayBuffer(4*w),g=new Uint8Array(m),t.ptr+=l,g.set(new Uint8Array(e,t.ptr,p)),f=new Uint32Array(m),t.ptr+=p,k=0;x-1>>>k;)k++;p=Math.ceil(u*k/8),w=Math.ceil(p/4),m=new ArrayBuffer(4*w),(g=new Uint8Array(m)).set(new Uint8Array(e,t.ptr,p)),h=new Uint32Array(m),t.ptr+=p,f=(3<=s?U:b)(f,c,x-1,i,d,n),(3<=s?I:y)(h,a,k,u,f)}else t.counter.bitstuffer++,k=c,t.ptr+=l,0<k&&(p=Math.ceil(u*k/8),w=Math.ceil(p/4),m=new ArrayBuffer(4*w),(g=new Uint8Array(m)).set(new Uint8Array(e,t.ptr,p)),h=new Uint32Array(m),t.ptr+=p,3<=s?null===i?T(h,a,k,u):I(h,a,k,u,!1,i,d,n):null===i?v(h,a,k,u):y(h,a,k,u,!1,i,d,n))},readTiles:function(e,t,a){var i=t.headerInfo,r=i.width,n=i.height,s=i.microBlockSize,l=i.imageType,o=z.getDataTypeSize(l),f=Math.ceil(r/s),u=Math.ceil(n/s);t.pixels.numBlocksY=u,t.pixels.numBlocksX=f;for(var c,d,h,m,g,p,w,x,k,y,b,I,U,v,T=t.pixels.ptr=0,M=0,V=0,A=0,B=0,D=0,S=0,P=0,E=new a(s*s),C=n%s||s,F=r%s||s,L=i.numDims,O=t.pixels.resultMask,N=t.pixels.resultPixels,V=0;V<u;V++)for(c=V!==u-1?s:C,A=0;A<f;A++)for(B=V*r*s+A*s,p=r-(d=A!==f-1?s:F),v=0;v<L;v++){if(1<L&&(N=new a(t.pixels.resultPixels.buffer,r*n*v*o,r*n)),h=e.byteLength-t.ptr,k={},P=0,P++,g=(m=(x=new DataView(e,t.ptr,Math.min(10,h))).getUint8(0))>>6&255,(m>>2&15)!=(A*s>>3&15))throw"integrity issue";if(3<(b=3&m))throw t.ptr+=P,"Invalid block encoding ("+b+")";if(2!=b)if(0==b){if(t.counter.uncompressed++,t.ptr+=P,D=(D=c*d*o)<(w=e.byteLength-t.ptr)?D:w,I=new ArrayBuffer(D%o==0?D:D+o-D%o),new Uint8Array(I).set(new Uint8Array(e,t.ptr,D)),y=new a(I),S=0,O)for(T=0;T<c;T++){for(M=0;M<d;M++)O[B]&&(N[B]=y[S++]),B++;B+=p}else for(T=0;T<c;T++){for(M=0;M<d;M++)N[B++]=y[S++];B+=p}t.ptr+=S*o}else if(I=z.getDataTypeUsed(l,g),U=z.getOnePixel(k,P,I,x),P+=z.getDataTypeSize(I),3==b)if(t.ptr+=P,t.counter.constantoffset++,O)for(T=0;T<c;T++){for(M=0;M<d;M++)O[B]&&(N[B]=U),B++;B+=p}else for(T=0;T<c;T++){for(M=0;M<d;M++)N[B++]=U;B+=p}else if(t.ptr+=P,z.decodeBits(e,t,E,U,v),P=0,O)for(T=0;T<c;T++){for(M=0;M<d;M++)O[B]&&(N[B]=E[P++]),B++;B+=p}else for(T=0;T<c;T++){for(M=0;M<d;M++)N[B++]=E[P++];B+=p}else t.counter.constant++,t.ptr+=P}},formatFileInfo:function(e){return{fileIdentifierString:e.headerInfo.fileIdentifierString,fileVersion:e.headerInfo.fileVersion,imageType:e.headerInfo.imageType,height:e.headerInfo.height,width:e.headerInfo.width,numValidPixel:e.headerInfo.numValidPixel,microBlockSize:e.headerInfo.microBlockSize,blobSize:e.headerInfo.blobSize,maxZError:e.headerInfo.maxZError,pixelType:z.getPixelType(e.headerInfo.imageType),eofOffset:e.eofOffset,mask:e.mask?{numBytes:e.mask.numBytes}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,maxValue:e.headerInfo.zMax,minValue:e.headerInfo.zMin,noDataValue:e.noDataValue}}},constructConstantSurface:function(e){var t,a=e.headerInfo.zMax,i=e.headerInfo.numDims,r=e.headerInfo.height*e.headerInfo.width,n=r*i,s=0,l=0,o=e.pixels.resultMask;if(o)if(1<i)for(s=0;s<i;s++)for(t=s*r,l=0;l<r;l++)o[l]&&(e.pixels.resultPixels[t+l]=a);else for(l=0;l<r;l++)o[l]&&(e.pixels.resultPixels[l]=a);else if(e.pixels.resultPixels.fill)e.pixels.resultPixels.fill(a);else for(l=0;l<n;l++)e.pixels.resultPixels[l]=a},getDataTypeArray:function(e){var t;switch(e){case 0:t=Int8Array;break;case 1:t=Uint8Array;break;case 2:t=Int16Array;break;case 3:t=Uint16Array;break;case 4:t=Int32Array;break;case 5:t=Uint32Array;break;case 6:t=Float32Array;break;case 7:t=Float64Array;break;default:t=Float32Array}return t},getPixelType:function(e){var t;switch(e){case 0:t="S8";break;case 1:t="U8";break;case 2:t="S16";break;case 3:t="U16";break;case 4:t="S32";break;case 5:t="U32";break;case 6:t="F32";break;case 7:t="F64";break;default:t="F32"}return t},isValidPixelValue:function(e,t){if(null===t)return!1;var a;switch(e){case 0:a=-128<=t&&t<=127;break;case 1:a=0<=t&&t<=255;break;case 2:a=-32768<=t&&t<=32767;break;case 3:a=0<=t&&t<=65536;break;case 4:a=-2147483648<=t&&t<=2147483647;break;case 5:a=0<=t&&t<=4294967296;break;case 6:a=-34027999387901484e22<=t&&t<=34027999387901484e22;break;case 7:a=5e-324<=t&&t<=17976931348623157e292;break;default:a=!1}return a},getDataTypeSize:function(e){var t=0;switch(e){case 0:case 1:t=1;break;case 2:case 3:t=2;break;case 4:case 5:case 6:t=4;break;case 7:t=8;break;default:t=e}return t},getDataTypeUsed:function(e,t){var a=e;switch(e){case 2:case 4:a=e-t;break;case 3:case 5:a=e-2*t;break;case 6:a=0===t?e:1===t?2:1;break;case 7:a=0===t?e:e-2*t+1;break;default:a=e}return a},getOnePixel:function(e,t,a,i){var r=0;switch(a){case 0:r=i.getInt8(t);break;case 1:r=i.getUint8(t);break;case 2:r=i.getInt16(t,!0);break;case 3:r=i.getUint16(t,!0);break;case 4:r=i.getInt32(t,!0);break;case 5:r=i.getUInt32(t,!0);break;case 6:r=i.getFloat32(t,!0);break;case 7:r=i.getFloat64(t,!0);break;default:throw"the decoder does not understand this pixel type"}return r}},V=function(e,t,a){this.val=e,this.left=t,this.right=a};return{decode:function(e,t){var a=(t=t||{}).noDataValue,i=0,r={};if(r.ptr=t.inputOffset||0,r.pixels={},z.readHeaderInfo(e,r)){var n=r.headerInfo,s=n.fileVersion,l=z.getDataTypeArray(n.imageType);z.readMask(e,r),n.numValidPixel===n.width*n.height||r.pixels.resultMask||(r.pixels.resultMask=t.maskData);var o,f=n.width*n.height;if(r.pixels.resultPixels=new l(f*n.numDims),r.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},0!==n.numValidPixel)if(n.zMax===n.zMin)z.constructConstantSurface(r);else if(4<=s&&z.checkMinMaxRanges(e,r))z.constructConstantSurface(r);else{var u=new DataView(e,r.ptr,2),c=u.getUint8(0);if(r.ptr++,c)z.readDataOneSweep(e,r,l);else if(1<s&&n.imageType<=1&&Math.abs(n.maxZError-.5)<1e-5){u=u.getUint8(1);if(r.ptr++,2<(r.encodeMode=u)||s<4&&1<u)throw"Invalid Huffman flag "+u;u?z.readHuffman(e,r,l):z.readTiles(e,r,l)}else z.readTiles(e,r,l)}r.eofOffset=r.ptr,t.inputOffset?(o=r.headerInfo.blobSize+t.inputOffset-r.ptr,1<=Math.abs(o)&&(r.eofOffset=t.inputOffset+r.headerInfo.blobSize)):(o=r.headerInfo.blobSize-r.ptr,1<=Math.abs(o)&&(r.eofOffset=r.headerInfo.blobSize));var d={width:n.width,height:n.height,pixelData:r.pixels.resultPixels,minValue:n.zMin,maxValue:n.zMax,validPixelCount:n.numValidPixel,dimCount:n.numDims,dimStats:{minValues:n.minValues,maxValues:n.maxValues},maskData:r.pixels.resultMask};if(r.pixels.resultMask&&z.isValidPixelValue(n.imageType,a)){for(var h=r.pixels.resultMask,i=0;i<f;i++)h[i]||(d.pixelData[i]=a);d.noDataValue=a}return r.noDataValue=a,t.returnFileInfo&&(d.fileInfo=z.formatFileInfo(r)),d}},getBandCount:function(e){for(var t=0,a=0,i={ptr:0,pixels:{}};a<e.byteLength-58;)z.readHeaderInfo(e,i),a+=i.headerInfo.blobSize,t++,i.ptr=a;return t}}}(),m=new ArrayBuffer(4),g=new Uint8Array(m),k=(new Uint32Array(m)[0]=1)===g[0],g={decode:function(e,t){if(!k)throw"Big endian system is not supported.";var a,i,r=(t=t||{}).inputOffset||0,n=new Uint8Array(e,r,10),n=String.fromCharCode.apply(null,n);if("CntZImage"===n.trim())a=w,i=1;else{if("Lerc2"!==n.substring(0,5))throw"Unexpected file identifier string: "+n;a=x,i=2}for(var s,l,o,f,u,c,d=0,h=e.byteLength-10,m=[],g={width:0,height:0,pixels:[],pixelType:t.pixelType,mask:null,statistics:[]};r<h;){var p=a.decode(e,{inputOffset:r,encodedMaskData:s,maskData:o,returnMask:0===d,returnEncodedMask:0===d,returnFileInfo:!0,pixelType:t.pixelType||null,noDataValue:t.noDataValue||null}),r=p.fileInfo.eofOffset;0===d&&(s=p.encodedMaskData,o=p.maskData,g.width=p.width,g.height=p.height,g.dimCount=p.dimCount||1,g.pixelType=p.pixelType||p.fileInfo.pixelType,g.mask=p.maskData),1<i&&p.fileInfo.mask&&0<p.fileInfo.mask.numBytes&&m.push(p.maskData),d++,g.pixels.push(p.pixelData),g.statistics.push({minValue:p.minValue,maxValue:p.maxValue,noDataValue:p.noDataValue,dimStats:p.dimStats})}if(1<i&&1<m.length){for(c=g.width*g.height,g.bandMasks=m,(o=new Uint8Array(c)).set(m[0]),f=1;f<m.length;f++)for(l=m[f],u=0;u<c;u++)o[u]=o[u]&l[u];g.maskData=o}return g}},p.Lerc=g;var y=p.Lerc;return t(function(e,t){if(e.encoding===o.LERC){var a;try{a=y.decode(e.heightmap)}catch(e){throw new n.RuntimeError(e)}if(a.statistics[0].minValue===Number.MAX_VALUE)throw new n.RuntimeError("Invalid tile data");e.heightmap=a.pixels[0],e.width=a.width,e.height=a.height}e.ellipsoid=Se.Ellipsoid.clone(e.ellipsoid),e.rectangle=Se.Rectangle.clone(e.rectangle);var i=ze.computeVertices(e),r=i.vertices;return t.push(r.buffer),{vertices:r.buffer,numberOfAttributes:i.encoding.getStride(),minimumHeight:i.minimumHeight,maximumHeight:i.maximumHeight,gridWidth:e.width,gridHeight:e.height,boundingSphere3D:i.boundingSphere3D,orientedBoundingBox:i.orientedBoundingBox,occludeePointInScaledSpace:i.occludeePointInScaledSpace,encoding:i.encoding,westIndicesSouthToNorth:i.westIndicesSouthToNorth,southIndicesEastToWest:i.southIndicesEastToWest,eastIndicesNorthToSouth:i.eastIndicesNorthToSouth,northIndicesWestToEast:i.northIndicesWestToEast}})}); diff --git a/public/lib/Cesium/Workers/createVerticesFromQuantizedTerrainMesh.js b/public/lib/Cesium/Workers/createVerticesFromQuantizedTerrainMesh.js new file mode 100644 index 0000000..3b4c261 --- /dev/null +++ b/public/lib/Cesium/Workers/createVerticesFromQuantizedTerrainMesh.js @@ -0,0 +1 @@ +define(["./AttributeCompression-a99f24b9","./EllipsoidTangentPlane-0fb66b96","./Transforms-5295b227","./Cartesian2-5b63e672","./when-ca391574","./TerrainEncoding-0f94e395","./IndexDatatype-4e56bcfa","./Math-b53708b3","./OrientedBoundingBox-e61df120","./Check-64f87f7d","./WebMercatorProjection-e0329e39","./createTaskProcessorWorker","./IntersectionTests-f5111308","./Plane-99b2becd","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9"],function(ie,oe,ae,se,de,ce,ue,he,le,e,Ie,t,r,n,i,o,a){"use strict";function me(){e.DeveloperError.throwInstantiationError()}Object.defineProperties(me.prototype,{errorEvent:{get:e.DeveloperError.throwInstantiationError},credit:{get:e.DeveloperError.throwInstantiationError},tilingScheme:{get:e.DeveloperError.throwInstantiationError},ready:{get:e.DeveloperError.throwInstantiationError},readyPromise:{get:e.DeveloperError.throwInstantiationError},hasWaterMask:{get:e.DeveloperError.throwInstantiationError},hasVertexNormals:{get:e.DeveloperError.throwInstantiationError},availability:{get:e.DeveloperError.throwInstantiationError}});var s=[];me.getRegularGridIndices=function(e,t){var r=s[e];de.defined(r)||(s[e]=r=[]);var n=r[t];return de.defined(n)||m(e,t,n=e*t<he.CesiumMath.SIXTY_FOUR_KILOBYTES?r[t]=new Uint16Array((e-1)*(t-1)*6):r[t]=new Uint32Array((e-1)*(t-1)*6),0),n};var d=[];me.getRegularGridIndicesAndEdgeIndices=function(e,t){var r=d[e];de.defined(r)||(d[e]=r=[]);var n,i,o,a,s=r[t];return de.defined(s)||(n=me.getRegularGridIndices(e,t),i=(a=I(e,t)).westIndicesSouthToNorth,o=a.southIndicesEastToWest,e=a.eastIndicesNorthToSouth,a=a.northIndicesWestToEast,s=r[t]={indices:n,westIndicesSouthToNorth:i,southIndicesEastToWest:o,eastIndicesNorthToSouth:e,northIndicesWestToEast:a}),s};var l=[];function I(e,t){for(var r=new Array(t),n=new Array(e),i=new Array(t),o=new Array(e),a=0;a<e;++a)n[o[a]=a]=e*t-1-a;for(a=0;a<t;++a)i[a]=(a+1)*e-1,r[a]=(t-a-1)*e;return{westIndicesSouthToNorth:r,southIndicesEastToWest:n,eastIndicesNorthToSouth:i,northIndicesWestToEast:o}}function m(e,t,r,n){for(var i=0,o=0;o<t-1;++o){for(var a=0;a<e-1;++a){var s=i+e,d=s+1,c=i+1;r[n++]=i,r[n++]=s,r[n++]=c,r[n++]=c,r[n++]=s,r[n++]=d,++i}++i}}function c(e,t,r,n){for(var i=e[0],o=e.length,a=1;a<o;++a){var s=e[a];r[n++]=i,r[n++]=s,r[n++]=t,r[n++]=t,r[n++]=s,r[n++]=t+1,i=s,++t}return n}me.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){var r=l[e];de.defined(r)||(l[e]=r=[]);var n,i,o,a,s,d,c,u,h=r[t];return de.defined(h)||(o=(n=e*t)+(d=2*e+2*t),u=(i=(e-1)*(t-1)*6)+6*Math.max(0,d-4),a=(c=I(e,t)).westIndicesSouthToNorth,s=c.southIndicesEastToWest,d=c.eastIndicesNorthToSouth,c=c.northIndicesWestToEast,m(e,t,u=ue.IndexDatatype.createTypedArray(o,u),0),me.addSkirtIndices(a,s,d,c,n,u,i),h=r[t]={indices:u,westIndicesSouthToNorth:a,southIndicesEastToWest:s,eastIndicesNorthToSouth:d,northIndicesWestToEast:c,indexCountWithoutSkirts:i}),h},me.addSkirtIndices=function(e,t,r,n,i,o,a){a=c(e,i,o,a),a=c(t,i+=e.length,o,a),a=c(r,i+=t.length,o,a),c(n,i+=r.length,o,a)},me.heightmapTerrainQuality=.25,me.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,r){return 2*e.maximumRadius*Math.PI*me.heightmapTerrainQuality/(t*r)},me.prototype.requestTileGeometry=e.DeveloperError.throwInstantiationError,me.prototype.getLevelMaximumGeometricError=e.DeveloperError.throwInstantiationError,me.prototype.getTileDataAvailable=e.DeveloperError.throwInstantiationError,me.prototype.loadTileDataAvailability=e.DeveloperError.throwInstantiationError;var ge=32767,Te=new se.Cartesian3,pe=new se.Cartesian3,Ee=new se.Cartesian3,fe=new se.Cartographic,ye=new se.Cartesian2,ve=new se.Cartesian3,Ne=new ae.Matrix4,we=new ae.Matrix4;function be(e,t,r,n,i,o,a,s,d){var c=Number.POSITIVE_INFINITY,u=i.north,h=i.south,l=i.east,I=i.west;l<I&&(l+=he.CesiumMath.TWO_PI);for(var m=e.length,g=0;g<m;++g){var T=e[g],p=r[T],T=n[T];fe.longitude=he.CesiumMath.lerp(I,l,T.x),fe.latitude=he.CesiumMath.lerp(h,u,T.y),fe.height=p-t;p=o.cartographicToCartesian(fe,Te);ae.Matrix4.multiplyByPoint(a,p,p),se.Cartesian3.minimumByComponent(p,s,s),se.Cartesian3.maximumByComponent(p,d,d),c=Math.min(c,fe.height)}return c}function xe(e,t,r,n,i,o,a,s,d,c,u,h,l,I,m){var g=de.defined(a),T=d.north,p=d.south,E=d.east,f=d.west;E<f&&(E+=he.CesiumMath.TWO_PI);for(var y=r.length,v=0;v<y;++v){var N=r[v],w=i[N],b=o[N];fe.longitude=he.CesiumMath.lerp(f,E,b.x)+I,fe.latitude=he.CesiumMath.lerp(p,T,b.y)+m,fe.height=w-c;var x,M,C=s.cartographicToCartesian(fe,Te);g&&(x=2*N,ye.x=a[x],ye.y=a[1+x],1!==u&&(w=ie.AttributeCompression.octDecode(ye.x,ye.y,ve),N=ae.Transforms.eastNorthUpToFixedFrame(Te,s,we),x=ae.Matrix4.inverseTransformation(N,Ne),ae.Matrix4.multiplyByPointAsVector(x,w,w),w.z*=u,se.Cartesian3.normalize(w,w),ae.Matrix4.multiplyByPointAsVector(N,w,w),se.Cartesian3.normalize(w,w),ie.AttributeCompression.octEncode(w,ye))),n.hasWebMercatorT&&(M=(Ie.WebMercatorProjection.geodeticLatitudeToMercatorAngle(fe.latitude)-h)*l),t=n.encode(e,t,C,b,fe.height,ye,M)}}function Me(e,t){var r;return"function"==typeof e.slice&&"function"!=typeof(r=e.slice()).sort&&(r=void 0),(r=!de.defined(r)?Array.prototype.slice.call(e):r).sort(t),r}return t(function(e,t){var r,n,i=(ne=e.quantizedVertices).length/3,o=e.octEncodedNormals,a=e.westIndices.length+e.eastIndices.length+e.southIndices.length+e.northIndices.length,s=e.includeWebMercatorT,d=se.Rectangle.clone(e.rectangle),c=d.west,u=d.south,h=d.east,l=d.north,I=se.Ellipsoid.clone(e.ellipsoid),m=e.exaggeration,g=e.minimumHeight*m,T=e.maximumHeight*m,p=e.relativeToCenter,E=ae.Transforms.eastNorthUpToFixedFrame(p,I),f=ae.Matrix4.inverseTransformation(E,new ae.Matrix4);s&&(r=Ie.WebMercatorProjection.geodeticLatitudeToMercatorAngle(u),n=1/(Ie.WebMercatorProjection.geodeticLatitudeToMercatorAngle(l)-r));var y=ne.subarray(0,i),v=ne.subarray(i,2*i),N=ne.subarray(2*i,3*i),w=de.defined(o),b=new Array(i),x=new Array(i),M=new Array(i),C=s?new Array(i):[],S=pe;S.x=Number.POSITIVE_INFINITY,S.y=Number.POSITIVE_INFINITY,S.z=Number.POSITIVE_INFINITY;var A=Ee;A.x=Number.NEGATIVE_INFINITY,A.y=Number.NEGATIVE_INFINITY,A.z=Number.NEGATIVE_INFINITY;for(var P=Number.POSITIVE_INFINITY,W=Number.NEGATIVE_INFINITY,D=Number.POSITIVE_INFINITY,B=Number.NEGATIVE_INFINITY,F=0;F<i;++F){var k=y[F],V=v[F],_=k/ge,H=V/ge,k=he.CesiumMath.lerp(g,T,N[F]/ge);fe.longitude=he.CesiumMath.lerp(c,h,_),fe.latitude=he.CesiumMath.lerp(u,l,H),fe.height=k;P=Math.min(fe.longitude,P),W=Math.max(fe.longitude,W),D=Math.min(fe.latitude,D),B=Math.max(fe.latitude,B),V=I.cartographicToCartesian(fe);b[F]=new se.Cartesian2(_,H),x[F]=k,M[F]=V,s&&(C[F]=(Ie.WebMercatorProjection.geodeticLatitudeToMercatorAngle(fe.latitude)-r)*n),ae.Matrix4.multiplyByPoint(f,V,Te),se.Cartesian3.minimumByComponent(Te,S,S),se.Cartesian3.maximumByComponent(Te,A,A)}var O,G,Y,z=Me(e.westIndices,function(e,t){return b[e].y-b[t].y}),R=Me(e.eastIndices,function(e,t){return b[t].y-b[e].y}),L=Me(e.southIndices,function(e,t){return b[t].x-b[e].x}),U=Me(e.northIndices,function(e,t){return b[e].x-b[t].x});1!==m&&(G=ae.BoundingSphere.fromPoints(M),O=le.OrientedBoundingBox.fromRectangle(d,g,T,I)),(1!==m||g<0)&&(Y=new ce.EllipsoidalOccluder(I).computeHorizonCullingPointPossiblyUnderEllipsoid(p,M,g));var j=g,j=Math.min(j,be(e.westIndices,e.westSkirtHeight,x,b,d,I,f,S,A));j=Math.min(j,be(e.southIndices,e.southSkirtHeight,x,b,d,I,f,S,A)),j=Math.min(j,be(e.eastIndices,e.eastSkirtHeight,x,b,d,I,f,S,A)),j=Math.min(j,be(e.northIndices,e.northSkirtHeight,x,b,d,I,f,S,A));for(var q,Q,K,X=new oe.AxisAlignedBoundingBox(S,A,p),Z=new ce.TerrainEncoding(X,j,T,E,w,s),J=Z.getStride(),$=new Float32Array(i*J+a*J),ee=0,te=0;te<i;++te)w&&(K=2*te,ye.x=o[K],ye.y=o[1+K],1!==m&&(q=ie.AttributeCompression.octDecode(ye.x,ye.y,ve),Q=ae.Transforms.eastNorthUpToFixedFrame(M[te],I,we),K=ae.Matrix4.inverseTransformation(Q,Ne),ae.Matrix4.multiplyByPointAsVector(K,q,q),q.z*=m,se.Cartesian3.normalize(q,q),ae.Matrix4.multiplyByPointAsVector(Q,q,q),se.Cartesian3.normalize(q,q),ie.AttributeCompression.octEncode(q,ye))),ee=Z.encode($,ee,M[te],b[te],x[te],ye,C[te]);var re=Math.max(0,2*(a-4)),ne=e.indices.length+3*re;return(X=ue.IndexDatatype.createTypedArray(i+a,ne)).set(e.indices,0),re=-(j=1e-4*(W-P)),a=j,j=-(ne=E=1e-4*(B-D)),xe($,E=i*J,z,Z,x,b,o,I,d,e.westSkirtHeight,m,r,n,re,0),xe($,E+=e.westIndices.length*J,L,Z,x,b,o,I,d,e.southSkirtHeight,m,r,n,0,j),xe($,E+=e.southIndices.length*J,R,Z,x,b,o,I,d,e.eastSkirtHeight,m,r,n,a,0),xe($,E+=e.eastIndices.length*J,U,Z,x,b,o,I,d,e.northSkirtHeight,m,r,n,0,ne),me.addSkirtIndices(z,L,R,U,i,X,e.indices.length),t.push($.buffer,X.buffer),{vertices:$.buffer,indices:X.buffer,westIndicesSouthToNorth:z,southIndicesEastToWest:L,eastIndicesNorthToSouth:R,northIndicesWestToEast:U,vertexStride:J,center:p,minimumHeight:g,maximumHeight:T,boundingSphere:G,orientedBoundingBox:O,occludeePointInScaledSpace:Y,encoding:Z,indexCountWithoutSkirts:e.indices.length}})}); diff --git a/public/lib/Cesium/Workers/createWallGeometry.js b/public/lib/Cesium/Workers/createWallGeometry.js new file mode 100644 index 0000000..6b8b16b --- /dev/null +++ b/public/lib/Cesium/Workers/createWallGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./Transforms-5295b227","./ComponentDatatype-8f71e605","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./VertexFormat-63b3c6da","./WallGeometryLibrary-3a48b1a1","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./arrayRemoveDuplicates-fc9e255d","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./IntersectionTests-f5111308","./Plane-99b2becd"],function(S,I,N,M,e,W,B,U,q,p,J,t,a,i,n,r,o,s,m){"use strict";var Y=new I.Cartesian3,Z=new I.Cartesian3,j=new I.Cartesian3,K=new I.Cartesian3,Q=new I.Cartesian3,X=new I.Cartesian3,$=new I.Cartesian3;function d(e){var t=(e=S.defaultValue(e,S.defaultValue.EMPTY_OBJECT)).positions,a=e.maximumHeights,i=e.minimumHeights,n=S.defaultValue(e.vertexFormat,p.VertexFormat.DEFAULT),r=S.defaultValue(e.granularity,q.CesiumMath.RADIANS_PER_DEGREE),e=S.defaultValue(e.ellipsoid,I.Ellipsoid.WGS84);this._positions=t,this._minimumHeights=i,this._maximumHeights=a,this._vertexFormat=p.VertexFormat.clone(n),this._granularity=r,this._ellipsoid=I.Ellipsoid.clone(e),this._workerName="createWallGeometry";t=1+t.length*I.Cartesian3.packedLength+2;S.defined(i)&&(t+=i.length),S.defined(a)&&(t+=a.length),this.packedLength=t+I.Ellipsoid.packedLength+p.VertexFormat.packedLength+1}d.pack=function(e,t,a){var i;a=S.defaultValue(a,0);var n=e._positions,r=n.length;for(t[a++]=r,i=0;i<r;++i,a+=I.Cartesian3.packedLength)I.Cartesian3.pack(n[i],t,a);var o=e._minimumHeights,r=S.defined(o)?o.length:0;if(t[a++]=r,S.defined(o))for(i=0;i<r;++i)t[a++]=o[i];var s=e._maximumHeights;if(r=S.defined(s)?s.length:0,t[a++]=r,S.defined(s))for(i=0;i<r;++i)t[a++]=s[i];return I.Ellipsoid.pack(e._ellipsoid,t,a),a+=I.Ellipsoid.packedLength,p.VertexFormat.pack(e._vertexFormat,t,a),t[a+=p.VertexFormat.packedLength]=e._granularity,t};var c=I.Ellipsoid.clone(I.Ellipsoid.UNIT_SPHERE),y=new p.VertexFormat,f={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:c,vertexFormat:y,granularity:void 0};return d.unpack=function(e,t,a){t=S.defaultValue(t,0);for(var i,n,r=e[t++],o=new Array(r),s=0;s<r;++s,t+=I.Cartesian3.packedLength)o[s]=I.Cartesian3.unpack(e,t);if(0<(r=e[t++]))for(i=new Array(r),s=0;s<r;++s)i[s]=e[t++];if(0<(r=e[t++]))for(n=new Array(r),s=0;s<r;++s)n[s]=e[t++];var m=I.Ellipsoid.unpack(e,t,c);t+=I.Ellipsoid.packedLength;var l=p.VertexFormat.unpack(e,t,y),u=e[t+=p.VertexFormat.packedLength];return S.defined(a)?(a._positions=o,a._minimumHeights=i,a._maximumHeights=n,a._ellipsoid=I.Ellipsoid.clone(m,a._ellipsoid),a._vertexFormat=p.VertexFormat.clone(l,a._vertexFormat),a._granularity=u,a):(f.positions=o,f.minimumHeights=i,f.maximumHeights=n,f.granularity=u,new d(f))},d.fromConstantHeights=function(e){var t=(e=S.defaultValue(e,S.defaultValue.EMPTY_OBJECT)).positions,a=e.minimumHeight,i=e.maximumHeight,n=S.defined(a),r=S.defined(i);if(n||r)for(var o=t.length,s=n?new Array(o):void 0,m=r?new Array(o):void 0,l=0;l<o;++l)n&&(s[l]=a),r&&(m[l]=i);return new d({positions:t,maximumHeights:m,minimumHeights:s,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat})},d.createGeometry=function(e){var t=e._positions,a=e._minimumHeights,i=e._maximumHeights,n=e._vertexFormat,r=e._granularity,o=e._ellipsoid,i=J.WallGeometryLibrary.computePositions(o,t,i,a,r,!0);if(S.defined(i)){for(var s=i.bottomPositions,m=i.topPositions,a=i.numCorners,l=m.length,r=2*l,u=n.position?new Float64Array(r):void 0,p=n.normal?new Float32Array(r):void 0,d=n.tangent?new Float32Array(r):void 0,c=n.bitangent?new Float32Array(r):void 0,y=n.st?new Float32Array(r/3*2):void 0,f=0,g=0,h=0,v=0,C=0,b=$,x=X,A=Q,_=!0,E=0,w=1/((l/=3)-a-1),F=0;F<l;++F){var L,k=3*F,H=I.Cartesian3.fromArray(m,k,Y),V=I.Cartesian3.fromArray(s,k,Z);n.position&&(u[f++]=V.x,u[f++]=V.y,u[f++]=V.z,u[f++]=H.x,u[f++]=H.y,u[f++]=H.z),n.st&&(y[C++]=E,y[C++]=0,y[C++]=E,y[C++]=1),(n.normal||n.tangent||n.bitangent)&&(L=I.Cartesian3.clone(I.Cartesian3.ZERO,K),V=I.Cartesian3.subtract(H,o.geodeticSurfaceNormal(H,Z),Z),F+1<l&&(L=I.Cartesian3.fromArray(m,3+k,K)),_&&(k=I.Cartesian3.subtract(L,H,j),V=I.Cartesian3.subtract(V,H,Y),b=I.Cartesian3.normalize(I.Cartesian3.cross(V,k,b),b),_=!1),I.Cartesian3.equalsEpsilon(H,L,q.CesiumMath.EPSILON10)?_=!0:(E+=w,n.tangent&&(x=I.Cartesian3.normalize(I.Cartesian3.subtract(L,H,x),x)),n.bitangent&&(A=I.Cartesian3.normalize(I.Cartesian3.cross(b,x,A),A))),n.normal&&(p[g++]=b.x,p[g++]=b.y,p[g++]=b.z,p[g++]=b.x,p[g++]=b.y,p[g++]=b.z),n.tangent&&(d[v++]=x.x,d[v++]=x.y,d[v++]=x.z,d[v++]=x.x,d[v++]=x.y,d[v++]=x.z),n.bitangent&&(c[h++]=A.x,c[h++]=A.y,c[h++]=A.z,c[h++]=A.x,c[h++]=A.y,c[h++]=A.z))}i=new B.GeometryAttributes;n.position&&(i.position=new W.GeometryAttribute({componentDatatype:M.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:u})),n.normal&&(i.normal=new W.GeometryAttribute({componentDatatype:M.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:p})),n.tangent&&(i.tangent=new W.GeometryAttribute({componentDatatype:M.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:d})),n.bitangent&&(i.bitangent=new W.GeometryAttribute({componentDatatype:M.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:c})),n.st&&(i.st=new W.GeometryAttribute({componentDatatype:M.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:y}));var G=r/3;r-=6*(a+1);var D=U.IndexDatatype.createTypedArray(G,r),P=0;for(F=0;F<G-2;F+=2){var T=F,z=F+2,O=I.Cartesian3.fromArray(u,3*T,Y),R=I.Cartesian3.fromArray(u,3*z,Z);I.Cartesian3.equalsEpsilon(O,R,q.CesiumMath.EPSILON10)||(O=F+1,R=F+3,D[P++]=O,D[P++]=T,D[P++]=R,D[P++]=R,D[P++]=T,D[P++]=z)}return new W.Geometry({attributes:i,indices:D,primitiveType:W.PrimitiveType.TRIANGLES,boundingSphere:new N.BoundingSphere.fromVertices(u)})}},function(e,t){return(e=S.defined(t)?d.unpack(e,t):e)._ellipsoid=I.Ellipsoid.clone(e._ellipsoid),d.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/createWallOutlineGeometry.js b/public/lib/Cesium/Workers/createWallOutlineGeometry.js new file mode 100644 index 0000000..f3b8f84 --- /dev/null +++ b/public/lib/Cesium/Workers/createWallOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-ca391574","./Cartesian2-5b63e672","./Transforms-5295b227","./ComponentDatatype-8f71e605","./Check-64f87f7d","./GeometryAttribute-7ef2d452","./GeometryAttributes-a356f820","./IndexDatatype-4e56bcfa","./Math-b53708b3","./WallGeometryLibrary-3a48b1a1","./RuntimeError-19cb26ba","./WebGLConstants-95ceb4e9","./arrayRemoveDuplicates-fc9e255d","./PolylinePipeline-00f5e064","./EllipsoidGeodesic-bbea0b0a","./EllipsoidRhumbLine-21029cef","./IntersectionTests-f5111308","./Plane-99b2becd"],function(b,v,C,H,e,A,k,w,G,L,i,t,a,n,r,o,s,l){"use strict";var x=new v.Cartesian3,P=new v.Cartesian3;function d(e){var i=(e=b.defaultValue(e,b.defaultValue.EMPTY_OBJECT)).positions,t=e.maximumHeights,a=e.minimumHeights,n=b.defaultValue(e.granularity,G.CesiumMath.RADIANS_PER_DEGREE),e=b.defaultValue(e.ellipsoid,v.Ellipsoid.WGS84);this._positions=i,this._minimumHeights=a,this._maximumHeights=t,this._granularity=n,this._ellipsoid=v.Ellipsoid.clone(e),this._workerName="createWallOutlineGeometry";i=1+i.length*v.Cartesian3.packedLength+2;b.defined(a)&&(i+=a.length),b.defined(t)&&(i+=t.length),this.packedLength=i+v.Ellipsoid.packedLength+1}d.pack=function(e,i,t){var a;t=b.defaultValue(t,0);var n=e._positions,r=n.length;for(i[t++]=r,a=0;a<r;++a,t+=v.Cartesian3.packedLength)v.Cartesian3.pack(n[a],i,t);var o=e._minimumHeights,r=b.defined(o)?o.length:0;if(i[t++]=r,b.defined(o))for(a=0;a<r;++a)i[t++]=o[a];var s=e._maximumHeights;if(r=b.defined(s)?s.length:0,i[t++]=r,b.defined(s))for(a=0;a<r;++a)i[t++]=s[a];return v.Ellipsoid.pack(e._ellipsoid,i,t),i[t+=v.Ellipsoid.packedLength]=e._granularity,i};var u=v.Ellipsoid.clone(v.Ellipsoid.UNIT_SPHERE),p={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:u,granularity:void 0};return d.unpack=function(e,i,t){i=b.defaultValue(i,0);for(var a,n,r=e[i++],o=new Array(r),s=0;s<r;++s,i+=v.Cartesian3.packedLength)o[s]=v.Cartesian3.unpack(e,i);if(0<(r=e[i++]))for(a=new Array(r),s=0;s<r;++s)a[s]=e[i++];if(0<(r=e[i++]))for(n=new Array(r),s=0;s<r;++s)n[s]=e[i++];var l=v.Ellipsoid.unpack(e,i,u),m=e[i+=v.Ellipsoid.packedLength];return b.defined(t)?(t._positions=o,t._minimumHeights=a,t._maximumHeights=n,t._ellipsoid=v.Ellipsoid.clone(l,t._ellipsoid),t._granularity=m,t):(p.positions=o,p.minimumHeights=a,p.maximumHeights=n,p.granularity=m,new d(p))},d.fromConstantHeights=function(e){var i=(e=b.defaultValue(e,b.defaultValue.EMPTY_OBJECT)).positions,t=e.minimumHeight,a=e.maximumHeight,n=b.defined(t),r=b.defined(a);if(n||r)for(var o=i.length,s=n?new Array(o):void 0,l=r?new Array(o):void 0,m=0;m<o;++m)n&&(s[m]=t),r&&(l[m]=a);return new d({positions:i,maximumHeights:l,minimumHeights:s,ellipsoid:e.ellipsoid})},d.createGeometry=function(e){var i=e._positions,t=e._minimumHeights,a=e._maximumHeights,n=e._granularity,e=e._ellipsoid,t=L.WallGeometryLibrary.computePositions(e,i,a,t,n,!1);if(b.defined(t)){var r=t.bottomPositions,o=t.topPositions,s=o.length,n=2*s,l=new Float64Array(n),m=0;for(s/=3,c=0;c<s;++c){var d=3*c,u=v.Cartesian3.fromArray(o,d,x),d=v.Cartesian3.fromArray(r,d,P);l[m++]=d.x,l[m++]=d.y,l[m++]=d.z,l[m++]=u.x,l[m++]=u.y,l[m++]=u.z}for(var t=new k.GeometryAttributes({position:new A.GeometryAttribute({componentDatatype:H.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:l})}),p=n/3,n=2*p-4+p,f=w.IndexDatatype.createTypedArray(p,n),h=0,c=0;c<p-2;c+=2){var g=c,y=c+2,_=v.Cartesian3.fromArray(l,3*g,x),E=v.Cartesian3.fromArray(l,3*y,P);v.Cartesian3.equalsEpsilon(_,E,G.CesiumMath.EPSILON10)||(_=c+1,E=c+3,f[h++]=_,f[h++]=g,f[h++]=_,f[h++]=E,f[h++]=g,f[h++]=y)}return f[h++]=p-2,f[h++]=p-1,new A.Geometry({attributes:t,indices:f,primitiveType:A.PrimitiveType.LINES,boundingSphere:new C.BoundingSphere.fromVertices(l)})}},function(e,i){return(e=b.defined(i)?d.unpack(e,i):e)._ellipsoid=v.Ellipsoid.clone(e._ellipsoid),d.createGeometry(e)}}); diff --git a/public/lib/Cesium/Workers/decodeDraco.js b/public/lib/Cesium/Workers/decodeDraco.js new file mode 100644 index 0000000..f8d91e2 --- /dev/null +++ b/public/lib/Cesium/Workers/decodeDraco.js @@ -0,0 +1 @@ +define(["./ComponentDatatype-8f71e605","./when-ca391574","./IndexDatatype-4e56bcfa","./RuntimeError-19cb26ba","./createTaskProcessorWorker","./Check-64f87f7d","./WebGLConstants-95ceb4e9","./Math-b53708b3"],function(c,d,y,f,t,e,r,n){"use strict";var A;function b(e,t,r){var n,o=e.num_points(),a=r.num_components(),i=new A.AttributeQuantizationTransform;if(i.InitFromAttribute(r)){for(var u=new Array(a),s=0;s<a;++s)u[s]=i.min_value(s);n={quantizationBits:i.quantization_bits(),minValues:u,range:i.range(),octEncoded:!1}}A.destroy(i),(i=new A.AttributeOctahedronTransform).InitFromAttribute(r)&&(n={quantizationBits:i.quantization_bits(),octEncoded:!0}),A.destroy(i);o*=a,t=d.defined(n)?function(e,t,r,n,o){var a,i;n.quantizationBits<=8?(i=new A.DracoUInt8Array,a=new Uint8Array(o),t.GetAttributeUInt8ForAllPoints(e,r,i)):(i=new A.DracoUInt16Array,a=new Uint16Array(o),t.GetAttributeUInt16ForAllPoints(e,r,i));for(var u=0;u<o;++u)a[u]=i.GetValue(u);return A.destroy(i),a}(e,t,r,n,o):function(e,t,r,n){var o,a;switch(r.data_type()){case 1:case 11:a=new A.DracoInt8Array,o=new Int8Array(n),t.GetAttributeInt8ForAllPoints(e,r,a);break;case 2:a=new A.DracoUInt8Array,o=new Uint8Array(n),t.GetAttributeUInt8ForAllPoints(e,r,a);break;case 3:a=new A.DracoInt16Array,o=new Int16Array(n),t.GetAttributeInt16ForAllPoints(e,r,a);break;case 4:a=new A.DracoUInt16Array,o=new Uint16Array(n),t.GetAttributeUInt16ForAllPoints(e,r,a);break;case 5:case 7:a=new A.DracoInt32Array,o=new Int32Array(n),t.GetAttributeInt32ForAllPoints(e,r,a);break;case 6:case 8:a=new A.DracoUInt32Array,o=new Uint32Array(n),t.GetAttributeUInt32ForAllPoints(e,r,a);break;case 9:case 10:a=new A.DracoFloat32Array,o=new Float32Array(n),t.GetAttributeFloatForAllPoints(e,r,a)}for(var i=0;i<n;++i)o[i]=a.GetValue(i);return A.destroy(a),o}(e,t,r,o),o=c.ComponentDatatype.fromTypedArray(t);return{array:t,data:{componentsPerAttribute:a,componentDatatype:o,byteOffset:r.byte_offset(),byteStride:c.ComponentDatatype.getSizeInBytes(o)*a,normalized:r.normalized(),quantization:n}}}function o(e){var t=new A.Decoder,r=["POSITION","NORMAL","COLOR","TEX_COORD"];if(e.dequantizeInShader)for(var n=0;n<r.length;++n)t.SkipAttributeTransform(A[r[n]]);var o=e.bufferView,a=new A.DecoderBuffer;if(a.Init(e.array,o.byteLength),t.GetEncodedGeometryType(a)!==A.TRIANGULAR_MESH)throw new f.RuntimeError("Unsupported draco mesh geometry type.");var i=new A.Mesh,o=t.DecodeBufferToMesh(a,i);if(!o.ok()||0===i.ptr)throw new f.RuntimeError("Error decoding draco mesh geometry: "+o.error_msg());A.destroy(a);var u,s,c={},d=e.compressedAttributes;for(u in d)d.hasOwnProperty(u)&&(s=d[u],s=t.GetAttributeByUniqueId(i,s),c[u]=b(i,t,s));e={indexArray:function(e,t){for(var r=e.num_points(),n=e.num_faces(),o=new A.DracoInt32Array,a=3*n,i=y.IndexDatatype.createTypedArray(r,a),u=0,s=0;s<n;++s)t.GetFaceFromMesh(e,s,o),i[u+0]=o.GetValue(0),i[u+1]=o.GetValue(1),i[u+2]=o.GetValue(2),u+=3;return A.destroy(o),{typedArray:i,numberOfIndices:a}}(i,t),attributeData:c};return A.destroy(i),A.destroy(t),e}function a(e){return(d.defined(e.primitive)?o:function(e){var t=new A.Decoder;e.dequantizeInShader&&(t.SkipAttributeTransform(A.POSITION),t.SkipAttributeTransform(A.NORMAL));var r=new A.DecoderBuffer;if(r.Init(e.buffer,e.buffer.length),t.GetEncodedGeometryType(r)!==A.POINT_CLOUD)throw new f.RuntimeError("Draco geometry type must be POINT_CLOUD.");var n=new A.PointCloud,o=t.DecodeBufferToPointCloud(r,n);if(!o.ok()||0===n.ptr)throw new f.RuntimeError("Error decoding draco point cloud: "+o.error_msg());A.destroy(r);var a,i,u={},s=e.properties;for(a in s)s.hasOwnProperty(a)&&(i=s[a],i=t.GetAttributeByUniqueId(n,i),u[a]=b(n,t,i));return A.destroy(n),A.destroy(t),u})(e)}function i(e){A=e,self.onmessage=t(a),self.postMessage(!0)}return function(e){var t=e.data.webAssemblyConfig;if(d.defined(t))return require([t.modulePath],function(e){d.defined(t.wasmBinaryFile)?(e=!d.defined(e)?self.DracoDecoderModule:e)(t).then(function(e){i(e)}):i(e())})}}); diff --git a/public/lib/Cesium/Workers/decodeGoogleEarthEnterprisePacket.js b/public/lib/Cesium/Workers/decodeGoogleEarthEnterprisePacket.js new file mode 100644 index 0000000..56112b1 --- /dev/null +++ b/public/lib/Cesium/Workers/decodeGoogleEarthEnterprisePacket.js @@ -0,0 +1 @@ +define(["./Check-64f87f7d","./RuntimeError-19cb26ba","./when-ca391574","./createTaskProcessorWorker"],function(e,k,i,t){"use strict";var h=1953029805,c=2917034100;function b(e,t){if(b.passThroughDataForTesting)return t;var i=e.byteLength;if(0===i||i%4!=0)throw new k.RuntimeError("The length of key must be greater than 0 and a multiple of 4.");var n=new DataView(t),r=n.getUint32(0,!0);if(r===h||r===c)return t;for(var a,o=new DataView(e),s=0,f=t.byteLength,l=f-f%8,u=i,d=8;s<l;)for(a=d=(d+8)%24;s<l&&a<u;)n.setUint32(s,n.getUint32(s,!0)^o.getUint32(a,!0),!0),n.setUint32(s+4,n.getUint32(s+4,!0)^o.getUint32(a+4,!0),!0),s+=8,a+=24;if(s<f)for(u<=a&&(a=d=(d+8)%24);s<f;)n.setUint8(s,n.getUint8(s)^o.getUint8(a)),s++,a++}function n(e,t){return 0!=(e&t)}b.passThroughDataForTesting=!1;var r=[1,2,4,8];function _(e,t,i,n,r,a){this._bits=e,this.cnodeVersion=t,this.imageryVersion=i,this.terrainVersion=n,this.imageryProvider=r,this.terrainProvider=a,this.ancestorHasTerrain=!1,this.terrainState=void 0}_.clone=function(e,t){return i.defined(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new _(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t},_.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()},_.prototype.hasSubtree=function(){return n(this._bits,16)},_.prototype.hasImagery=function(){return n(this._bits,64)},_.prototype.hasTerrain=function(){return n(this._bits,128)},_.prototype.hasChildren=function(){return n(this._bits,15)},_.prototype.hasChild=function(e){return n(this._bits,r[e])},_.prototype.getChildBitmask=function(){return 15&this._bits};var o=function n(r,a,o){function s(i,e){if(!a[i]){if(!r[i]){var t="function"==typeof require&&require;if(!e&&t)return t(i,!0);if(f)return f(i,!0);t=new Error("Cannot find module '"+i+"'");throw t.code="MODULE_NOT_FOUND",t}t=a[i]={exports:{}};r[i][0].call(t.exports,function(e){var t=r[i][1][e];return s(t||e)},t,t.exports,n,r,a,o)}return a[i].exports}for(var f="function"==typeof require&&require,e=0;e<o.length;e++)s(o[e]);return s}({1:[function(e,t,i){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;i.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var n in i)i.hasOwnProperty(n)&&(e[n]=i[n])}}return e},i.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,i,n,r){if(t.subarray&&e.subarray)e.set(t.subarray(i,i+n),r);else for(var a=0;a<n;a++)e[r+a]=t[i+a]},flattenChunks:function(e){for(var t,i,n,r=0,a=0,o=e.length;a<o;a++)r+=e[a].length;for(n=new Uint8Array(r),a=t=0,o=e.length;a<o;a++)i=e[a],n.set(i,t),t+=i.length;return n}},a={arraySet:function(e,t,i,n,r){for(var a=0;a<n;a++)e[r+a]=t[i+a]},flattenChunks:function(e){return[].concat.apply([],e)}};i.setTyped=function(e){e?(i.Buf8=Uint8Array,i.Buf16=Uint16Array,i.Buf32=Int32Array,i.assign(i,r)):(i.Buf8=Array,i.Buf16=Array,i.Buf32=Array,i.assign(i,a))},i.setTyped(n)},{}],2:[function(e,t,i){var f=e("./common"),r=!0,a=!0;try{String.fromCharCode.apply(null,[0])}catch(e){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){a=!1}for(var l=new f.Buf8(256),n=0;n<256;n++)l[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function u(e,t){if(t<65537&&(e.subarray&&a||!e.subarray&&r))return String.fromCharCode.apply(null,f.shrinkBuf(e,t));for(var i="",n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i}l[254]=l[254]=1,i.string2buf=function(e){for(var t,i,n,r,a=e.length,o=0,s=0;s<a;s++)55296==(64512&(i=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(n=e.charCodeAt(s+1)))&&(i=65536+(i-55296<<10)+(n-56320),s++),o+=i<128?1:i<2048?2:i<65536?3:4;for(t=new f.Buf8(o),s=r=0;r<o;s++)55296==(64512&(i=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(n=e.charCodeAt(s+1)))&&(i=65536+(i-55296<<10)+(n-56320),s++),i<128?t[r++]=i:(i<2048?t[r++]=192|i>>>6:(i<65536?t[r++]=224|i>>>12:(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63),t[r++]=128|i>>>6&63),t[r++]=128|63&i);return t},i.buf2binstring=function(e){return u(e,e.length)},i.binstring2buf=function(e){for(var t=new f.Buf8(e.length),i=0,n=t.length;i<n;i++)t[i]=e.charCodeAt(i);return t},i.buf2string=function(e,t){for(var i,n,r=t||e.length,a=new Array(2*r),o=0,s=0;s<r;)if((i=e[s++])<128)a[o++]=i;else if(4<(n=l[i]))a[o++]=65533,s+=n-1;else{for(i&=2===n?31:3===n?15:7;1<n&&s<r;)i=i<<6|63&e[s++],n--;1<n?a[o++]=65533:i<65536?a[o++]=i:(i-=65536,a[o++]=55296|i>>10&1023,a[o++]=56320|1023&i)}return u(a,o)},i.utf8border=function(e,t){for(var i=(t=(t=t||e.length)>e.length?e.length:t)-1;0<=i&&128==(192&e[i]);)i--;return!(i<0)&&0!==i&&i+l[e[i]]>t?i:t}},{"./common":1}],3:[function(e,t,i){t.exports=function(e,t,i,n){for(var r=65535&e|0,a=e>>>16&65535|0,o=0;0!==i;){for(o=2e3<i?2e3:i,i-=o;a=a+(r=r+t[n++]|0)|0,--o;);r%=65521,a%=65521}return r|a<<16|0}},{}],4:[function(e,t,i){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(e,t,i){var s=function(){for(var e=[],t=0;t<256;t++){for(var i=t,n=0;n<8;n++)i=1&i?3988292384^i>>>1:i>>>1;e[t]=i}return e}();t.exports=function(e,t,i,n){var r=s,a=n+i;e^=-1;for(var o=n;o<a;o++)e=e>>>8^r[255&(e^t[o])];return-1^e}},{}],6:[function(e,t,i){t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(e,t,i){t.exports=function(e,t){var i,n,r,a,o,s,f=e.state,l=e.next_in,u=e.input,d=l+(e.avail_in-5),h=e.next_out,c=e.output,b=h-(t-e.avail_out),m=h+(e.avail_out-257),w=f.dmax,g=f.wsize,v=f.whave,k=f.wnext,_=f.window,p=f.hold,y=f.bits,x=f.lencode,E=f.distcode,S=(1<<f.lenbits)-1,T=(1<<f.distbits)-1;e:do{y<15&&(p+=u[l++]<<y,y+=8,p+=u[l++]<<y,y+=8),i=x[p&S];t:for(;;){if(p>>>=n=i>>>24,y-=n,0===(n=i>>>16&255))c[h++]=65535&i;else{if(!(16&n)){if(0==(64&n)){i=x[(65535&i)+(p&(1<<n)-1)];continue t}if(32&n){f.mode=12;break e}e.msg="invalid literal/length code",f.mode=30;break e}r=65535&i,(n&=15)&&(y<n&&(p+=u[l++]<<y,y+=8),r+=p&(1<<n)-1,p>>>=n,y-=n),y<15&&(p+=u[l++]<<y,y+=8,p+=u[l++]<<y,y+=8),i=E[p&T];i:for(;;){if(p>>>=n=i>>>24,y-=n,!(16&(n=i>>>16&255))){if(0==(64&n)){i=E[(65535&i)+(p&(1<<n)-1)];continue i}e.msg="invalid distance code",f.mode=30;break e}if(a=65535&i,y<(n&=15)&&(p+=u[l++]<<y,(y+=8)<n&&(p+=u[l++]<<y,y+=8)),w<(a+=p&(1<<n)-1)){e.msg="invalid distance too far back",f.mode=30;break e}if(p>>>=n,y-=n,(n=h-b)<a){if(n=a-n,v<n&&f.sane){e.msg="invalid distance too far back",f.mode=30;break e}if(s=_,(o=0)===k){if(o+=g-n,n<r){for(r-=n;c[h++]=_[o++],--n;);o=h-a,s=c}}else if(k<n){if(o+=g+k-n,(n-=k)<r){for(r-=n;c[h++]=_[o++],--n;);if(o=0,k<r){for(n=k,r-=n;c[h++]=_[o++],--n;);o=h-a,s=c}}}else if(o+=k-n,n<r){for(r-=n;c[h++]=_[o++],--n;);o=h-a,s=c}for(;2<r;)c[h++]=s[o++],c[h++]=s[o++],c[h++]=s[o++],r-=3;r&&(c[h++]=s[o++],1<r&&(c[h++]=s[o++]))}else{for(o=h-a;c[h++]=c[o++],c[h++]=c[o++],c[h++]=c[o++],r-=3,2<r;);r&&(c[h++]=c[o++],1<r&&(c[h++]=c[o++]))}break}}break}}while(l<d&&h<m);l-=r=y>>3,p&=(1<<(y-=r<<3))-1,e.next_in=l,e.next_out=h,e.avail_in=l<d?d-l+5:5-(l-d),e.avail_out=h<m?m-h+257:257-(h-m),f.hold=p,f.bits=y}},{}],8:[function(e,t,i){var B=e("../utils/common"),U=e("./adler32"),Z=e("./crc32"),I=e("./inffast"),D=e("./inftrees"),N=1,O=2,z=0,C=-2,F=1,n=852,r=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function a(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new B.Buf16(320),this.work=new B.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=F,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new B.Buf32(n),t.distcode=t.distdyn=new B.Buf32(r),t.sane=1,t.back=-1,z):C}function s(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,o(e)):C}function f(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?C:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,s(e))):C}function l(e,t){var i;return e?(i=new a,(e.state=i).window=null,(t=f(e,t))!==z&&(e.state=null),t):C}var H,P,M=!0;function V(e,t,i,n){var r=e.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new B.Buf8(r.wsize)),n>=r.wsize?(B.arraySet(r.window,t,i-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(e=r.wsize-r.wnext)&&(e=n),B.arraySet(r.window,t,i-n,e,r.wnext),(n-=e)?(B.arraySet(r.window,t,i-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=e,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=e))),0}i.inflateReset=s,i.inflateReset2=f,i.inflateResetKeep=o,i.inflateInit=function(e){return l(e,15)},i.inflateInit2=l,i.inflate=function(e,t){var i,n,r,a,o,s,f,l,u,d,h,c,b,m,w,g,v,k,_,p,y,x,E,S,T=0,R=new B.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return C;12===(i=e.state).mode&&(i.mode=13),o=e.next_out,r=e.output,f=e.avail_out,a=e.next_in,n=e.input,s=e.avail_in,l=i.hold,u=i.bits,d=s,h=f,x=z;e:for(;;)switch(i.mode){case F:if(0===i.wrap){i.mode=13;break}for(;u<16;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(2&i.wrap&&35615===l){R[i.check=0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0),u=l=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=30;break}if(8!=(15&l)){e.msg="unknown compression method",i.mode=30;break}if(u-=4,y=8+(15&(l>>>=4)),0===i.wbits)i.wbits=y;else if(y>i.wbits){e.msg="invalid window size",i.mode=30;break}i.dmax=1<<y,e.adler=i.check=1,i.mode=512&l?10:12,u=l=0;break;case 2:for(;u<16;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(i.flags=l,8!=(255&i.flags)){e.msg="unknown compression method",i.mode=30;break}if(57344&i.flags){e.msg="unknown header flags set",i.mode=30;break}i.head&&(i.head.text=l>>8&1),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0)),u=l=0,i.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.head&&(i.head.time=l),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,R[2]=l>>>16&255,R[3]=l>>>24&255,i.check=Z(i.check,R,4,0)),u=l=0,i.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.head&&(i.head.xflags=255&l,i.head.os=l>>8),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0)),u=l=0,i.mode=5;case 5:if(1024&i.flags){for(;u<16;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.length=l,i.head&&(i.head.extra_len=l),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0)),u=l=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&((c=s<(c=i.length)?s:c)&&(i.head&&(y=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),B.arraySet(i.head.extra,n,a,c,y)),512&i.flags&&(i.check=Z(i.check,n,c,a)),s-=c,a+=c,i.length-=c),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===s)break e;for(c=0;y=n[a+c++],i.head&&y&&i.length<65536&&(i.head.name+=String.fromCharCode(y)),y&&c<s;);if(512&i.flags&&(i.check=Z(i.check,n,c,a)),s-=c,a+=c,y)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=8;case 8:if(4096&i.flags){if(0===s)break e;for(c=0;y=n[a+c++],i.head&&y&&i.length<65536&&(i.head.comment+=String.fromCharCode(y)),y&&c<s;);if(512&i.flags&&(i.check=Z(i.check,n,c,a)),s-=c,a+=c,y)break e}else i.head&&(i.head.comment=null);i.mode=9;case 9:if(512&i.flags){for(;u<16;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(l!==(65535&i.check)){e.msg="header crc mismatch",i.mode=30;break}u=l=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=12;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}e.adler=i.check=L(l),u=l=0,i.mode=11;case 11:if(0===i.havedict)return e.next_out=o,e.avail_out=f,e.next_in=a,e.avail_in=s,i.hold=l,i.bits=u,2;e.adler=i.check=1,i.mode=12;case 12:if(5===t||6===t)break e;case 13:if(i.last){l>>>=7&u,u-=7&u,i.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}switch(i.last=1&l,--u,3&(l>>>=1)){case 0:i.mode=14;break;case 1:if(!function(e){if(M){var t;for(H=new B.Buf32(512),P=new B.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(D(N,e.lens,0,288,H,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;D(O,e.lens,0,32,P,0,e.work,{bits:5}),M=!1}e.lencode=H,e.lenbits=9,e.distcode=P,e.distbits=5}(i),i.mode=20,6!==t)break;l>>>=2,u-=2;break e;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=30}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",i.mode=30;break}if(i.length=65535&l,u=l=0,i.mode=15,6===t)break e;case 15:i.mode=16;case 16:if(c=i.length){if(0===(c=f<(c=s<c?s:c)?f:c))break e;B.arraySet(r,n,a,c,o),s-=c,a+=c,f-=c,o+=c,i.length-=c;break}i.mode=12;break;case 17:for(;u<14;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(i.nlen=257+(31&l),l>>>=5,u-=5,i.ndist=1+(31&l),l>>>=5,u-=5,i.ncode=4+(15&l),l>>>=4,u-=4,286<i.nlen||30<i.ndist){e.msg="too many length or distance symbols",i.mode=30;break}i.have=0,i.mode=18;case 18:for(;i.have<i.ncode;){for(;u<3;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.lens[A[i.have++]]=7&l,l>>>=3,u-=3}for(;i.have<19;)i.lens[A[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,E={bits:i.lenbits},x=D(0,i.lens,0,19,i.lencode,0,i.work,E),i.lenbits=E.bits,x){e.msg="invalid code lengths set",i.mode=30;break}i.have=0,i.mode=19;case 19:for(;i.have<i.nlen+i.ndist;){for(;g=(T=i.lencode[l&(1<<i.lenbits)-1])>>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(v<16)l>>>=w,u-=w,i.lens[i.have++]=v;else{if(16===v){for(S=w+2;u<S;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(l>>>=w,u-=w,0===i.have){e.msg="invalid bit length repeat",i.mode=30;break}y=i.lens[i.have-1],c=3+(3&l),l>>>=2,u-=2}else if(17===v){for(S=w+3;u<S;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}u-=w,y=0,c=3+(7&(l>>>=w)),l>>>=3,u-=3}else{for(S=w+7;u<S;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}u-=w,y=0,c=11+(127&(l>>>=w)),l>>>=7,u-=7}if(i.have+c>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=30;break}for(;c--;)i.lens[i.have++]=y}}if(30===i.mode)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=30;break}if(i.lenbits=9,E={bits:i.lenbits},x=D(N,i.lens,0,i.nlen,i.lencode,0,i.work,E),i.lenbits=E.bits,x){e.msg="invalid literal/lengths set",i.mode=30;break}if(i.distbits=6,i.distcode=i.distdyn,E={bits:i.distbits},x=D(O,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,E),i.distbits=E.bits,x){e.msg="invalid distances set",i.mode=30;break}if(i.mode=20,6===t)break e;case 20:i.mode=21;case 21:if(6<=s&&258<=f){e.next_out=o,e.avail_out=f,e.next_in=a,e.avail_in=s,i.hold=l,i.bits=u,I(e,h),o=e.next_out,r=e.output,f=e.avail_out,a=e.next_in,n=e.input,s=e.avail_in,l=i.hold,u=i.bits,12===i.mode&&(i.back=-1);break}for(i.back=0;g=(T=i.lencode[l&(1<<i.lenbits)-1])>>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(g&&0==(240&g)){for(k=w,_=g,p=v;g=(T=i.lencode[p+((l&(1<<k+_)-1)>>k)])>>>16&255,v=65535&T,!(k+(w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}l>>>=k,u-=k,i.back+=k}if(l>>>=w,u-=w,i.back+=w,i.length=v,0===g){i.mode=26;break}if(32&g){i.back=-1,i.mode=12;break}if(64&g){e.msg="invalid literal/length code",i.mode=30;break}i.extra=15&g,i.mode=22;case 22:if(i.extra){for(S=i.extra;u<S;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,u-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;g=(T=i.distcode[l&(1<<i.distbits)-1])>>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(0==(240&g)){for(k=w,_=g,p=v;g=(T=i.distcode[p+((l&(1<<k+_)-1)>>k)])>>>16&255,v=65535&T,!(k+(w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}l>>>=k,u-=k,i.back+=k}if(l>>>=w,u-=w,i.back+=w,64&g){e.msg="invalid distance code",i.mode=30;break}i.offset=v,i.extra=15&g,i.mode=24;case 24:if(i.extra){for(S=i.extra;u<S;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,u-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=30;break}i.mode=25;case 25:if(0===f)break e;if(c=h-f,i.offset>c){if(c=i.offset-c,c>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=30;break}b=c>i.wnext?(c-=i.wnext,i.wsize-c):i.wnext-c,c>i.length&&(c=i.length),m=i.window}else m=r,b=o-i.offset,c=i.length;for(f<c&&(c=f),f-=c,i.length-=c;r[o++]=m[b++],--c;);0===i.length&&(i.mode=21);break;case 26:if(0===f)break e;r[o++]=i.length,f--,i.mode=21;break;case 27:if(i.wrap){for(;u<32;){if(0===s)break e;s--,l|=n[a++]<<u,u+=8}if(h-=f,e.total_out+=h,i.total+=h,h&&(e.adler=i.check=(i.flags?Z:U)(i.check,r,h,o-h)),h=f,(i.flags?l:L(l))!==i.check){e.msg="incorrect data check",i.mode=30;break}u=l=0}i.mode=28;case 28:if(i.wrap&&i.flags){for(;u<32;){if(0===s)break e;s--,l+=n[a++]<<u,u+=8}if(l!==(4294967295&i.total)){e.msg="incorrect length check",i.mode=30;break}u=l=0}i.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return C}return e.next_out=o,e.avail_out=f,e.next_in=a,e.avail_in=s,i.hold=l,i.bits=u,(i.wsize||h!==e.avail_out&&i.mode<30&&(i.mode<27||4!==t))&&V(e,e.output,e.next_out,h-e.avail_out),d-=e.avail_in,h-=e.avail_out,e.total_in+=d,e.total_out+=h,i.total+=h,i.wrap&&h&&(e.adler=i.check=(i.flags?Z:U)(i.check,r,h,e.next_out-h)),e.data_type=i.bits+(i.last?64:0)+(12===i.mode?128:0)+(20===i.mode||15===i.mode?256:0),x=(0==d&&0===h||4===t)&&x===z?-5:x},i.inflateEnd=function(e){if(!e||!e.state)return C;var t=e.state;return t.window&&(t.window=null),e.state=null,z},i.inflateGetHeader=function(e,t){return!e||!e.state||0==(2&(e=e.state).wrap)?C:((e.head=t).done=!1,z)},i.inflateSetDictionary=function(e,t){var i,n=t.length;return!e||!e.state||0!==(i=e.state).wrap&&11!==i.mode?C:11===i.mode&&U(1,t,n,0)!==i.check?-3:V(e,t,n,n)?(i.mode=31,-4):(i.havedict=1,z)},i.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":1,"./adler32":3,"./crc32":5,"./inffast":7,"./inftrees":9}],9:[function(e,t,i){var N=e("../utils/common"),O=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],z=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],C=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],F=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,i,n,r,a,o,s){for(var f,l,u,d,h,c,b,m,w,g=s.bits,v=0,k=0,_=0,p=0,y=0,x=0,E=0,S=0,T=0,R=0,A=null,B=0,U=new N.Buf16(16),Z=new N.Buf16(16),I=null,D=0,v=0;v<=15;v++)U[v]=0;for(k=0;k<n;k++)U[t[i+k]]++;for(y=g,p=15;1<=p&&0===U[p];p--);if(p<y&&(y=p),0===p)return r[a++]=20971520,r[a++]=20971520,s.bits=1,0;for(_=1;_<p&&0===U[_];_++);for(y<_&&(y=_),v=S=1;v<=15;v++)if(S<<=1,(S-=U[v])<0)return-1;if(0<S&&(0===e||1!==p))return-1;for(Z[1]=0,v=1;v<15;v++)Z[v+1]=Z[v]+U[v];for(k=0;k<n;k++)0!==t[i+k]&&(o[Z[t[i+k]]++]=k);if(c=0===e?(A=I=o,19):1===e?(A=O,B-=257,I=z,D-=257,256):(A=C,I=F,-1),v=_,h=a,E=k=R=0,u=-1,d=(T=1<<(x=y))-1,1===e&&852<T||2===e&&592<T)return 1;for(;;){for(b=v-E,w=o[k]<c?(m=0,o[k]):o[k]>c?(m=I[D+o[k]],A[B+o[k]]):(m=96,0),f=1<<v-E,l=1<<x,_=l;r[h+(R>>E)+(l-=f)]=b<<24|m<<16|w|0,0!==l;);for(f=1<<v-1;R&f;)f>>=1;if(0!==f?(R&=f-1,R+=f):R=0,k++,0==--U[v]){if(v===p)break;v=t[i+o[k]]}if(y<v&&(R&d)!==u){for(h+=_,S=1<<(x=v-(E=0===E?y:E));x+E<p&&!((S-=U[x+E])<=0);)x++,S<<=1;if(T+=1<<x,1===e&&852<T||2===e&&592<T)return 1;r[u=R&d]=y<<24|x<<16|h-a|0}}return 0!==R&&(r[h+R]=v-E<<24|64<<16|0),s.bits=y,0}},{"../utils/common":1}],10:[function(e,t,i){t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(e,t,i){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],"/lib/inflate.js":[function(e,t,i){var d=e("./zlib/inflate"),h=e("./utils/common"),c=e("./utils/strings"),b=e("./zlib/constants"),n=e("./zlib/messages"),r=e("./zlib/zstream"),a=e("./zlib/gzheader"),m=Object.prototype.toString;function o(e){if(!(this instanceof o))return new o(e);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new r,this.strm.avail_out=0;t=d.inflateInit2(this.strm,t.windowBits);if(t!==b.Z_OK)throw new Error(n[t]);this.header=new a,d.inflateGetHeader(this.strm,this.header)}function s(e,t){t=new o(t);if(t.push(e,!0),t.err)throw t.msg||n[t.err];return t.result}o.prototype.push=function(e,t){var i,n,r,a,o,s=this.strm,f=this.options.chunkSize,l=this.options.dictionary,u=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?b.Z_FINISH:b.Z_NO_FLUSH,"string"==typeof e?s.input=c.binstring2buf(e):"[object ArrayBuffer]"===m.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new h.Buf8(f),s.next_out=0,s.avail_out=f),(i=d.inflate(s,b.Z_NO_FLUSH))===b.Z_NEED_DICT&&l&&(o="string"==typeof l?c.string2buf(l):"[object ArrayBuffer]"===m.call(l)?new Uint8Array(l):l,i=d.inflateSetDictionary(this.strm,o)),i===b.Z_BUF_ERROR&&!0===u&&(i=b.Z_OK,u=!1),i!==b.Z_STREAM_END&&i!==b.Z_OK)return this.onEnd(i),!(this.ended=!0)}while(s.next_out&&(0!==s.avail_out&&i!==b.Z_STREAM_END&&(0!==s.avail_in||n!==b.Z_FINISH&&n!==b.Z_SYNC_FLUSH)||("string"===this.options.to?(r=c.utf8border(s.output,s.next_out),a=s.next_out-r,o=c.buf2string(s.output,r),s.next_out=a,s.avail_out=f-a,a&&h.arraySet(s.output,s.output,r,a,0),this.onData(o)):this.onData(h.shrinkBuf(s.output,s.next_out)))),0===s.avail_in&&0===s.avail_out&&(u=!0),(0<s.avail_in||0===s.avail_out)&&i!==b.Z_STREAM_END);return(n=i===b.Z_STREAM_END?b.Z_FINISH:n)===b.Z_FINISH?(i=d.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===b.Z_OK):n!==b.Z_SYNC_FLUSH||(this.onEnd(b.Z_OK),!(s.avail_out=0))},o.prototype.onData=function(e){this.chunks.push(e)},o.prototype.onEnd=function(e){e===b.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},i.Inflate=o,i.inflate=s,i.inflateRaw=function(e,t){return(t=t||{}).raw=!0,s(e,t)},i.ungzip=s},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js"),p=Uint16Array.BYTES_PER_ELEMENT,y=Int32Array.BYTES_PER_ELEMENT,x=Uint32Array.BYTES_PER_ELEMENT,s={METADATA:0,TERRAIN:1,DBROOT:2};s.fromString=function(e){return"Metadata"===e?s.METADATA:"Terrain"===e?s.TERRAIN:"DbRoot"===e?s.DBROOT:void 0};var E=32301;var f=1953029805,l=2917034100;return t(function(e,t){var i=s.fromString(e.type),n=e.buffer;b(e.key,n);var r=function(e){var t=new DataView(e),i=0,n=t.getUint32(0,!0);if(i+=x,n!==f&&n!==l)throw new k.RuntimeError("Invalid magic");n=t.getUint32(i,n===f);i+=x;i=new Uint8Array(e,i),i=o.inflate(i);if(i.length===n)return i;throw new k.RuntimeError("Size of packet doesn't match header")}(n),n=r.buffer,a=r.length;switch(i){case s.METADATA:return function(e,t,i){var n=new DataView(e),r=0,a=n.getUint32(r,!0);if(r+=x,a!==E)throw new k.RuntimeError("Invalid magic");var o=n.getUint32(r,!0);if(r+=x,1!==o)throw new k.RuntimeError("Invalid data type. Must be 1 for QuadTreePacket");var s=n.getUint32(r,!0);if(r+=x,2!==s)throw new k.RuntimeError("Invalid QuadTreePacket version. Only version 2 is supported.");var f=n.getInt32(r,!0);r+=y;e=n.getInt32(r,!0);if(r+=y,32!==e)throw new k.RuntimeError("Invalid instance size.");a=n.getInt32(r,!0);r+=y;o=n.getInt32(r,!0);r+=y;s=n.getInt32(r,!0);if(a!==f*e+(r+=y))throw new k.RuntimeError("Invalid dataBufferOffset");if(a+o+s!==t)throw new k.RuntimeError("Invalid packet offsets");for(var l=[],u=0;u<f;++u){var d=n.getUint8(r);++r,++r;var h=n.getUint16(r,!0);r+=p;var c=n.getUint16(r,!0);r+=p;var b=n.getUint16(r,!0);r+=p,r+=p,r+=p,r+=y,r+=y,r+=8;var m=n.getUint8(r++),w=n.getUint8(r++);r+=p,l.push(new _(d,h,c,b,m,w))}var g=[],v=0;s=0,t=l[v++];""===i?++s:g[i]=t;return function e(t,i,n){var r=!1;if(4===n){if(i.hasSubtree())return;r=!0}for(var a=0;a<4;++a){var o=t+a.toString();if(r)g[o]=null;else if(n<4)if(i.hasChild(a)){if(v===f)return void console.log("Incorrect number of instances");var s=l[v++];g[o]=s,e(o,s,n+1)}else g[o]=null}}(i,t,s),g}(n,a,e.quadKey);case s.TERRAIN:return function(e,t,i){var n=new DataView(e),r=0,a=[];for(;r<t;){for(var o=r,s=0;s<4;++s){var f=n.getUint32(r,!0);r+=x,r+=f}o=e.slice(o,r);i.push(o),a.push(o)}return a}(n,a,t);case s.DBROOT:return t.push(n),{buffer:n}}})}); diff --git a/public/lib/Cesium/Workers/transcodeCRNToDXT.js b/public/lib/Cesium/Workers/transcodeCRNToDXT.js new file mode 100644 index 0000000..52d3ef4 --- /dev/null +++ b/public/lib/Cesium/Workers/transcodeCRNToDXT.js @@ -0,0 +1 @@ +define(["./when-ca391574","./WebGLConstants-95ceb4e9","./RuntimeError-19cb26ba","./createTaskProcessorWorker"],function(when,WebGLConstants,RuntimeError,createTaskProcessorWorker){"use strict";function CompressedTextureBuffer(e,r,t,n){this._format=e,this._width=r,this._height=t,this._buffer=n}Object.defineProperties(CompressedTextureBuffer.prototype,{internalFormat:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}}}),CompressedTextureBuffer.clone=function(e){if(when.defined(e))return new CompressedTextureBuffer(e._format,e._width,e._height,e._buffer)},CompressedTextureBuffer.prototype.clone=function(){return CompressedTextureBuffer.clone(this)};var PixelDatatype={UNSIGNED_BYTE:WebGLConstants.WebGLConstants.UNSIGNED_BYTE,UNSIGNED_SHORT:WebGLConstants.WebGLConstants.UNSIGNED_SHORT,UNSIGNED_INT:WebGLConstants.WebGLConstants.UNSIGNED_INT,FLOAT:WebGLConstants.WebGLConstants.FLOAT,HALF_FLOAT:WebGLConstants.WebGLConstants.HALF_FLOAT_OES,UNSIGNED_INT_24_8:WebGLConstants.WebGLConstants.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:WebGLConstants.WebGLConstants.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_6_5,toWebGLConstant:function(e,r){switch(e){case PixelDatatype.UNSIGNED_BYTE:return WebGLConstants.WebGLConstants.UNSIGNED_BYTE;case PixelDatatype.UNSIGNED_SHORT:return WebGLConstants.WebGLConstants.UNSIGNED_SHORT;case PixelDatatype.UNSIGNED_INT:return WebGLConstants.WebGLConstants.UNSIGNED_INT;case PixelDatatype.FLOAT:return WebGLConstants.WebGLConstants.FLOAT;case PixelDatatype.HALF_FLOAT:return r.webgl2?WebGLConstants.WebGLConstants.HALF_FLOAT:WebGLConstants.WebGLConstants.HALF_FLOAT_OES;case PixelDatatype.UNSIGNED_INT_24_8:return WebGLConstants.WebGLConstants.UNSIGNED_INT_24_8;case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:return WebGLConstants.WebGLConstants.UNSIGNED_SHORT_4_4_4_4;case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:return WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_5_5_1;case PixelDatatype.UNSIGNED_SHORT_5_6_5:return PixelDatatype.UNSIGNED_SHORT_5_6_5}},isPacked:function(e){return e===PixelDatatype.UNSIGNED_INT_24_8||e===PixelDatatype.UNSIGNED_SHORT_4_4_4_4||e===PixelDatatype.UNSIGNED_SHORT_5_5_5_1||e===PixelDatatype.UNSIGNED_SHORT_5_6_5},sizeInBytes:function(e){switch(e){case PixelDatatype.UNSIGNED_BYTE:return 1;case PixelDatatype.UNSIGNED_SHORT:case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:case PixelDatatype.UNSIGNED_SHORT_5_6_5:case PixelDatatype.HALF_FLOAT:return 2;case PixelDatatype.UNSIGNED_INT:case PixelDatatype.FLOAT:case PixelDatatype.UNSIGNED_INT_24_8:return 4}},validate:function(e){return e===PixelDatatype.UNSIGNED_BYTE||e===PixelDatatype.UNSIGNED_SHORT||e===PixelDatatype.UNSIGNED_INT||e===PixelDatatype.FLOAT||e===PixelDatatype.HALF_FLOAT||e===PixelDatatype.UNSIGNED_INT_24_8||e===PixelDatatype.UNSIGNED_SHORT_4_4_4_4||e===PixelDatatype.UNSIGNED_SHORT_5_5_5_1||e===PixelDatatype.UNSIGNED_SHORT_5_6_5}},PixelDatatype$1=Object.freeze(PixelDatatype),PixelFormat={DEPTH_COMPONENT:WebGLConstants.WebGLConstants.DEPTH_COMPONENT,DEPTH_STENCIL:WebGLConstants.WebGLConstants.DEPTH_STENCIL,ALPHA:WebGLConstants.WebGLConstants.ALPHA,RGB:WebGLConstants.WebGLConstants.RGB,RGBA:WebGLConstants.WebGLConstants.RGBA,LUMINANCE:WebGLConstants.WebGLConstants.LUMINANCE,LUMINANCE_ALPHA:WebGLConstants.WebGLConstants.LUMINANCE_ALPHA,RGB_DXT1:WebGLConstants.WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:WebGLConstants.WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:WebGLConstants.WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:WebGLConstants.WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:WebGLConstants.WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGB_ETC1:WebGLConstants.WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL,componentsLength:function(e){switch(e){case PixelFormat.RGB:return 3;case PixelFormat.RGBA:return 4;case PixelFormat.LUMINANCE_ALPHA:return 2;case PixelFormat.ALPHA:case PixelFormat.LUMINANCE:default:return 1}},validate:function(e){return e===PixelFormat.DEPTH_COMPONENT||e===PixelFormat.DEPTH_STENCIL||e===PixelFormat.ALPHA||e===PixelFormat.RGB||e===PixelFormat.RGBA||e===PixelFormat.LUMINANCE||e===PixelFormat.LUMINANCE_ALPHA||e===PixelFormat.RGB_DXT1||e===PixelFormat.RGBA_DXT1||e===PixelFormat.RGBA_DXT3||e===PixelFormat.RGBA_DXT5||e===PixelFormat.RGB_PVRTC_4BPPV1||e===PixelFormat.RGB_PVRTC_2BPPV1||e===PixelFormat.RGBA_PVRTC_4BPPV1||e===PixelFormat.RGBA_PVRTC_2BPPV1||e===PixelFormat.RGB_ETC1},isColorFormat:function(e){return e===PixelFormat.ALPHA||e===PixelFormat.RGB||e===PixelFormat.RGBA||e===PixelFormat.LUMINANCE||e===PixelFormat.LUMINANCE_ALPHA},isDepthFormat:function(e){return e===PixelFormat.DEPTH_COMPONENT||e===PixelFormat.DEPTH_STENCIL},isCompressedFormat:function(e){return e===PixelFormat.RGB_DXT1||e===PixelFormat.RGBA_DXT1||e===PixelFormat.RGBA_DXT3||e===PixelFormat.RGBA_DXT5||e===PixelFormat.RGB_PVRTC_4BPPV1||e===PixelFormat.RGB_PVRTC_2BPPV1||e===PixelFormat.RGBA_PVRTC_4BPPV1||e===PixelFormat.RGBA_PVRTC_2BPPV1||e===PixelFormat.RGB_ETC1},isDXTFormat:function(e){return e===PixelFormat.RGB_DXT1||e===PixelFormat.RGBA_DXT1||e===PixelFormat.RGBA_DXT3||e===PixelFormat.RGBA_DXT5},isPVRTCFormat:function(e){return e===PixelFormat.RGB_PVRTC_4BPPV1||e===PixelFormat.RGB_PVRTC_2BPPV1||e===PixelFormat.RGBA_PVRTC_4BPPV1||e===PixelFormat.RGBA_PVRTC_2BPPV1},isETC1Format:function(e){return e===PixelFormat.RGB_ETC1},compressedTextureSizeInBytes:function(e,r,t){switch(e){case PixelFormat.RGB_DXT1:case PixelFormat.RGBA_DXT1:case PixelFormat.RGB_ETC1:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*8;case PixelFormat.RGBA_DXT3:case PixelFormat.RGBA_DXT5:return Math.floor((r+3)/4)*Math.floor((t+3)/4)*16;case PixelFormat.RGB_PVRTC_4BPPV1:case PixelFormat.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(r,8)*Math.max(t,8)*4+7)/8);case PixelFormat.RGB_PVRTC_2BPPV1:case PixelFormat.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(r,16)*Math.max(t,8)*2+7)/8);default:return 0}},textureSizeInBytes:function(e,r,t,n){e=PixelFormat.componentsLength(e);return(e=PixelDatatype$1.isPacked(r)?1:e)*PixelDatatype$1.sizeInBytes(r)*t*n},alignmentInBytes:function(e,r,t){t=PixelFormat.textureSizeInBytes(e,r,t,1)%4;return 0==t?4:2==t?2:1},createTypedArray:function(e,r,t,n){var i=PixelDatatype$1.sizeInBytes(r),r=i===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:i===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:i===Float32Array.BYTES_PER_ELEMENT&&r===PixelDatatype$1.FLOAT?Float32Array:Uint32Array;return new r(PixelFormat.componentsLength(e)*t*n)},flipY:function(e,r,t,n,i){if(1===i)return e;for(var a=PixelFormat.createTypedArray(r,t,n,i),o=PixelFormat.componentsLength(r),u=n*o,f=0;f<i;++f)for(var l=f*n*o,s=(i-f-1)*n*o,c=0;c<u;++c)a[s+c]=e[l+c];return a},toInternalFormat:function(e,r,t){if(!t.webgl2)return e;if(e===PixelFormat.DEPTH_STENCIL)return WebGLConstants.WebGLConstants.DEPTH24_STENCIL8;if(e===PixelFormat.DEPTH_COMPONENT){if(r===PixelDatatype$1.UNSIGNED_SHORT)return WebGLConstants.WebGLConstants.DEPTH_COMPONENT16;if(r===PixelDatatype$1.UNSIGNED_INT)return WebGLConstants.WebGLConstants.DEPTH_COMPONENT24}if(r===PixelDatatype$1.FLOAT)switch(e){case PixelFormat.RGBA:return WebGLConstants.WebGLConstants.RGBA32F;case PixelFormat.RGB:return WebGLConstants.WebGLConstants.RGB32F;case PixelFormat.RG:return WebGLConstants.WebGLConstants.RG32F;case PixelFormat.R:return WebGLConstants.WebGLConstants.R32F}if(r===PixelDatatype$1.HALF_FLOAT)switch(e){case PixelFormat.RGBA:return WebGLConstants.WebGLConstants.RGBA16F;case PixelFormat.RGB:return WebGLConstants.WebGLConstants.RGB16F;case PixelFormat.RG:return WebGLConstants.WebGLConstants.RG16F;case PixelFormat.R:return WebGLConstants.WebGLConstants.R16F}return e}},PixelFormat$1=Object.freeze(PixelFormat),Module,Module=Module||((void 0!==Module?Module:null)||{}),moduleOverrides={},key;for(key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1,nodeFS,nodePath,TRY_USE_DUMP,key;if(Module.ENVIRONMENT)if("WEB"===Module.ENVIRONMENT)ENVIRONMENT_IS_WEB=!0;else if("WORKER"===Module.ENVIRONMENT)ENVIRONMENT_IS_WORKER=!0;else if("NODE"===Module.ENVIRONMENT)ENVIRONMENT_IS_NODE=!0;else{if("SHELL"!==Module.ENVIRONMENT)throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");ENVIRONMENT_IS_SHELL=!0}else ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE)Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn),Module.read=function(e,r){nodeFS=nodeFS||require("fs"),e=(nodePath=nodePath||require("path")).normalize(e);e=nodeFS.readFileSync(e);return r?e:e.toString()},Module.readBinary=function(e){e=Module.read(e,!0);return assert((e=!e.buffer?new Uint8Array(e):e).buffer),e},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(1<process.argv.length?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(e){if(!(e instanceof ExitStatus))throw e}),Module.inspect=function(){return"[Emscripten Module object]"};else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(e));e=read(e,"binary");return assert("object"==typeof e),e},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:void 0!==arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(e,r){quit(e)});else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw"Unknown runtime environment. Where are we?";Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=function(){200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)},void 0!==arguments&&(Module.arguments=arguments),"undefined"!=typeof console?(Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)})):(TRY_USE_DUMP=!1,Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(e){dump(e)}:function(e){})),ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),void 0===Module.setWindowTitle&&(Module.setWindowTitle=function(e){document.title=e})}function globalEval(e){eval.call(null,e)}for(key in!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(e,r){throw r}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[],moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);var moduleOverrides=void 0,Runtime={setTempRet0:function(e){return tempRet0=e},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(e){STACKTOP=e},getNativeTypeSize:function(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===e[e.length-1])return Runtime.QUANTUM_SIZE;if("i"!==e[0])return 0;var r=parseInt(e.substr(1));return assert(r%8==0),r/8}},getNativeFieldSize:function(e){return Math.max(Runtime.getNativeTypeSize(e),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(e,r){return"double"===r||"i64"===r?7&e&&(assert(4==(7&e)),e+=4):assert(0==(3&e)),e},getAlignSize:function(e,r,t){return t||"i64"!=e&&"double"!=e?e?Math.min(r||(e?Runtime.getNativeFieldSize(e):0),Runtime.QUANTUM_SIZE):Math.min(r,8):8},dynCall:function(e,r,t){return t&&t.length?Module["dynCall_"+e].apply(null,[r].concat(t)):Module["dynCall_"+e].call(null,r)},functionPointers:[],addFunction:function(e){for(var r=0;r<Runtime.functionPointers.length;r++)if(!Runtime.functionPointers[r])return Runtime.functionPointers[r]=e,2*(1+r);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},removeFunction:function(e){Runtime.functionPointers[(e-2)/2]=null},warnOnce:function(e){Runtime.warnOnce.shown||(Runtime.warnOnce.shown={}),Runtime.warnOnce.shown[e]||(Runtime.warnOnce.shown[e]=1,Module.printErr(e))},funcWrappers:{},getFuncWrapper:function(r,t){assert(t),Runtime.funcWrappers[t]||(Runtime.funcWrappers[t]={});var e=Runtime.funcWrappers[t];return e[r]||(1===t.length?e[r]=function(){return Runtime.dynCall(t,r)}:2===t.length?e[r]=function(e){return Runtime.dynCall(t,r,[e])}:e[r]=function(){return Runtime.dynCall(t,r,Array.prototype.slice.call(arguments))}),e[r]},getCompilerSetting:function(e){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},stackAlloc:function(e){var r=STACKTOP;return STACKTOP=(STACKTOP=STACKTOP+e|0)+15&-16,r},staticAlloc:function(e){var r=STATICTOP;return STATICTOP=(STATICTOP=STATICTOP+e|0)+15&-16,r},dynamicAlloc:function(e){var r=HEAP32[DYNAMICTOP_PTR>>2],e=-16&(r+e+15|0);if((HEAP32[DYNAMICTOP_PTR>>2]=e,TOTAL_MEMORY<=e)&&!enlargeMemory())return HEAP32[DYNAMICTOP_PTR>>2]=r,0;return r},alignMemory:function(e,r){return e=Math.ceil(e/(r||16))*(r||16)},makeBigInt:function(e,r,t){return t?+(e>>>0)+4294967296*(r>>>0):+(e>>>0)+4294967296*(0|r)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,cwrap,ccall;function assert(e,r){e||abort("Assertion failed: "+r)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,r,t,n){switch(t="*"===(t=t||"i8").charAt(t.length-1)?"i32":t){case"i1":case"i8":HEAP8[e>>0]=r;break;case"i16":HEAP16[e>>1]=r;break;case"i32":HEAP32[e>>2]=r;break;case"i64":tempI64=[r>>>0,(tempDouble=r,1<=+Math_abs(tempDouble)?0<tempDouble?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=r;break;case"double":HEAPF64[e>>3]=r;break;default:abort("invalid type for setValue: "+t)}}function getValue(e,r,t){switch(r="*"===(r=r||"i8").charAt(r.length-1)?"i32":r){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+r)}return null}!function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var r=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,r),r},stringToC:function(e){var r,t=0;return null!=e&&0!==e&&(r=1+(e.length<<2),stringToUTF8(e,t=Runtime.stackAlloc(r),r)),t}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,t,n,i){var e=getCFunc(e),a=[],o=0;if(n)for(var u=0;u<n.length;u++){var f=toC[t[u]];f?(0===o&&(o=Runtime.stackSave()),a[u]=f(n[u])):a[u]=n[u]}e=e.apply(null,a);if("string"===r&&(e=Pointer_stringify(e)),0!==o){if(i&&i.async)return void EmterpreterAsync.asyncFinalizers.push(function(){Runtime.stackRestore(o)});Runtime.stackRestore(o)}return e};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(e){e=e.toString().match(sourceRegex).slice(1);return{arguments:e[0],body:e[1],returnValue:e[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource)for(var e in JSsource={},JSfuncs)JSfuncs.hasOwnProperty(e)&&(JSsource[e]=parseJSFunc(JSfuncs[e]))}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every(function(e){return"number"===e}),numericRet="string"!==returnType;if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map(function(e,r){return"$"+r}),funcstr="(function("+argNames.join(",")+") {",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+="var stack = "+JSsource.stackSave.body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i],convertCode;"number"!==type&&(convertCode=JSsource[type+"ToC"],funcstr+="var "+convertCode.arguments+" = "+arg+";",funcstr+=convertCode.body+";",funcstr+=arg+"=("+convertCode.returnValue+");")}}var cfuncname=parseJSFunc(function(){return cfunc}).returnValue,strgfy;return funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");",numericRet||(strgfy=parseJSFunc(function(){return Pointer_stringify}).returnValue,funcstr+="ret = "+strgfy+"(ret);"),numericArgs||(ensureJSsource(),funcstr+=JSsource.stackRestore.body.replace("()","(stack)")+";"),funcstr+="return ret})",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;function allocate(e,r,t,n){var i,a="number"==typeof e?(i=!0,e):(i=!1,e.length),o="string"==typeof r?r:null,u=t==ALLOC_NONE?n:["function"==typeof _malloc?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===t?ALLOC_STATIC:t](Math.max(a,o?1:r.length));if(i){var f,n=u;for(assert(0==(3&u)),f=u+(-4&a);n<f;n+=4)HEAP32[n>>2]=0;for(f=u+a;n<f;)HEAP8[n++>>0]=0;return u}if("i8"===o)return e.subarray||e.slice?HEAPU8.set(e,u):HEAPU8.set(new Uint8Array(e),u),u;for(var l,s,c,_=0;_<a;){var d=e[_];"function"==typeof d&&(d=Runtime.getFunctionIndex(d)),0!==(l=o||r[_])?(setValue(u+_,d,l="i64"==l?"i32":l),c!==l&&(s=Runtime.getNativeTypeSize(l),c=l),_+=s):_++}return u}function getMemory(e){return staticSealed?runtimeInitialized?_malloc(e):Runtime.dynamicAlloc(e):Runtime.staticAlloc(e)}function Pointer_stringify(e,r){if(0===r||!e)return"";for(var t,n=0,i=0;n|=t=HEAPU8[e+i>>0],(0!=t||r)&&(i++,!r||i!=r););r=r||i;var a="";if(n<128){for(var o;0<r;)o=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(r,1024))),a=a?a+o:o,e+=1024,r-=1024;return a}return Module.UTF8ToString(e)}function AsciiToString(e){for(var r="";;){var t=HEAP8[e++>>0];if(!t)return r;r+=String.fromCharCode(t)}}function stringToAscii(e,r){return writeAsciiToMemory(e,r,!1)}Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,r){for(var t=r;e[t];)++t;if(16<t-r&&e.subarray&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(r,t));for(var n,i,a,o,u,f="";;){if(!(o=e[r++]))return f;128&o?(u=63&e[r++],192!=(224&o)?(a=63&e[r++],(o=224==(240&o)?(15&o)<<12|u<<6|a:(n=63&e[r++],240==(248&o)?(7&o)<<18|u<<12|a<<6|n:(i=63&e[r++],248==(252&o)?(3&o)<<24|u<<18|a<<12|n<<6|i:(1&o)<<30|u<<24|a<<18|n<<12|i<<6|63&e[r++])))<65536?f+=String.fromCharCode(o):(i=o-65536,f+=String.fromCharCode(55296|i>>10,56320|1023&i))):f+=String.fromCharCode((31&o)<<6|u)):f+=String.fromCharCode(o)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,r,t,n){if(!(0<n))return 0;for(var i=t,a=t+n-1,o=0;o<e.length;++o){var u=e.charCodeAt(o);if((u=55296<=u&&u<=57343?65536+((1023&u)<<10)|1023&e.charCodeAt(++o):u)<=127){if(a<=t)break;r[t++]=u}else if(u<=2047){if(a<=t+1)break;r[t++]=192|u>>6,r[t++]=128|63&u}else if(u<=65535){if(a<=t+2)break;r[t++]=224|u>>12,r[t++]=128|u>>6&63,r[t++]=128|63&u}else if(u<=2097151){if(a<=t+3)break;r[t++]=240|u>>18,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}else if(u<=67108863){if(a<=t+4)break;r[t++]=248|u>>24,r[t++]=128|u>>18&63,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}else{if(a<=t+5)break;r[t++]=252|u>>30,r[t++]=128|u>>24&63,r[t++]=128|u>>18&63,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}}return r[t]=0,t-i}function stringToUTF8(e,r,t){return stringToUTF8Array(e,HEAPU8,r,t)}function lengthBytesUTF8(e){for(var r=0,t=0;t<e.length;++t){var n=e.charCodeAt(t);(n=55296<=n&&n<=57343?65536+((1023&n)<<10)|1023&e.charCodeAt(++t):n)<=127?++r:r+=n<=2047?2:n<=65535?3:n<=2097151?4:n<=67108863?5:6}return r}function demangle(e){var r=Module.___cxa_demangle||Module.__cxa_demangle;if(r){try{var t=e.substr(1),n=lengthBytesUTF8(t)+1,i=_malloc(n);stringToUTF8(t,i,n);var a=_malloc(4),o=r(i,0,0,a);if(0===getValue(a,"i32")&&o)return Pointer_stringify(o)}catch(e){}finally{i&&_free(i),a&&_free(a),o&&_free(o)}return e}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),e}function demangleAll(e){return e.replace(/__Z[\w\d_]+/g,function(e){var r=demangle(e);return e===r?e:e+" ["+r+"]"})}function jsStackTrace(){var r=new Error;if(!r.stack){try{throw new Error(0)}catch(e){r=e}if(!r.stack)return"(no stack trace available)"}return r.stack.toString()}function stackTrace(){var e=jsStackTrace();return Module.extraStackTrace&&(e+="\n"+Module.extraStackTrace()),demangleAll(e)}Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8,"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le"),Module.stackTrace=stackTrace;var WASM_PAGE_SIZE=65536,ASMJS_PAGE_SIZE=16777216,MIN_TOTAL_MEMORY=16777216,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR,byteLength;function alignUp(e,r){return 0<e%r&&(e+=r-e%r),e}function updateGlobalBuffer(e){Module.buffer=buffer=e}function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){var e=Module.usingWasm?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE,r=2147483648-e;if(HEAP32[DYNAMICTOP_PTR>>2]>r)return!1;var t=TOTAL_MEMORY;for(TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);TOTAL_MEMORY<HEAP32[DYNAMICTOP_PTR>>2];)TOTAL_MEMORY=TOTAL_MEMORY<=536870912?alignUp(2*TOTAL_MEMORY,e):Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,e),r);var n=Module.reallocBuffer(TOTAL_MEMORY);return n&&n.byteLength==TOTAL_MEMORY?(updateGlobalBuffer(n),updateGlobalBufferViews(),!0):(TOTAL_MEMORY=t,!1)}STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1,Module.reallocBuffer||(Module.reallocBuffer=function(e){var r,t;try{ArrayBuffer.transfer?t=ArrayBuffer.transfer(buffer,e):(r=HEAP8,t=new ArrayBuffer(e),new Int8Array(t).set(r))}catch(e){return!1}return!!_emscripten_replace_memory(t)&&t});try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get),byteLength(new ArrayBuffer(4))}catch(e){byteLength=function(e){return e.byteLength}}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||16777216;function getTotalMemory(){return TOTAL_MEMORY}if(TOTAL_MEMORY<TOTAL_STACK&&Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")"),buffer=Module.buffer||new ArrayBuffer(TOTAL_MEMORY),updateGlobalBufferViews(),HEAP32[0]=1668509029,HEAP16[1]=25459,115!==HEAPU8[2]||99!==HEAPU8[3])throw"Runtime error: expected the system to be little-endian!";function callRuntimeCallbacks(e){for(;0<e.length;){var r,t=e.shift();"function"!=typeof t?"number"==typeof(r=t.func)?void 0===t.arg?Module.dynCall_v(r):Module.dynCall_vi(r,t.arg):r(void 0===t.arg?null:t.arg):t()}}Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1;function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__)}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPreMain(e){__ATMAIN__.unshift(e)}function addOnExit(e){__ATEXIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}function intArrayFromString(e,r,t){t=0<t?t:lengthBytesUTF8(e)+1,t=new Array(t),e=stringToUTF8Array(e,t,0,t.length);return r&&(t.length=e),t}function intArrayToString(e){for(var r=[],t=0;t<e.length;t++){var n=e[t];255<n&&(n&=255),r.push(String.fromCharCode(n))}return r.join("")}function writeStringToMemory(e,r,t){var n,i;Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),t&&(i=r+lengthBytesUTF8(e),n=HEAP8[i]),stringToUTF8(e,r,1/0),t&&(HEAP8[i]=n)}function writeArrayToMemory(e,r){HEAP8.set(e,r)}function writeAsciiToMemory(e,r,t){for(var n=0;n<e.length;++n)HEAP8[r++>>0]=e.charCodeAt(n);t||(HEAP8[r>>0]=0)}Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,r){var t=65535&e,n=65535&r;return t*n+((e>>>16)*n+t*(r>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var r=0;r<32;r++)if(e&1<<31-r)return r;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_min=Math.min,runDependencies=0,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){var r;runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&dependenciesFulfilled&&(r=dependenciesFulfilled,dependenciesFulfilled=null,r())}Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={},STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+6192,__ATINIT__.push(),allocate([228,2,0,0,81,16,0,0,12,3,0,0,177,16,0,0,32,0,0,0,0,0,0,0,12,3,0,0,94,16,0,0,48,0,0,0,0,0,0,0,228,2,0,0,127,16,0,0,12,3,0,0,140,16,0,0,16,0,0,0,0,0,0,0,12,3,0,0,183,17,0,0,32,0,0,0,0,0,0,0,12,3,0,0,147,17,0,0,72,0,0,0,0,0,0,0,108,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,32,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,40,20,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,56,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,37,115,40,37,117,41,58,32,65,115,115,101,114,116,105,111,110,32,102,97,105,108,117,114,101,58,32,34,37,115,34,10,0,109,95,115,105,122,101,32,60,61,32,109,95,99,97,112,97,99,105,116,121,0,46,47,105,110,99,92,99,114,110,95,100,101,99,111,109,112,46,104,0,109,105,110,95,110,101,119,95,99,97,112,97,99,105,116,121,32,60,32,40,48,120,55,70,70,70,48,48,48,48,85,32,47,32,101,108,101,109,101,110,116,95,115,105,122,101,41,0,110,101,119,95,99,97,112,97,99,105,116,121,32,38,38,32,40,110,101,119,95,99,97,112,97,99,105,116,121,32,62,32,109,95,99,97,112,97,99,105,116,121,41,0,110,117,109,95,99,111,100,101,115,91,99,93,0,115,111,114,116,101,100,95,112,111,115,32,60,32,116,111,116,97,108,95,117,115,101,100,95,115,121,109,115,0,112,67,111,100,101,115,105,122,101,115,91,115,121,109,95,105,110,100,101,120,93,32,61,61,32,99,111,100,101,115,105,122,101,0,116,32,60,32,40,49,85,32,60,60,32,116,97,98,108,101,95,98,105,116,115,41,0,109,95,108,111,111,107,117,112,91,116,93,32,61,61,32,99,85,73,78,84,51,50,95,77,65,88,0,99,114,110,100,95,109,97,108,108,111,99,58,32,115,105,122,101,32,116,111,111,32,98,105,103,0,99,114,110,100,95,109,97,108,108,111,99,58,32,111,117,116,32,111,102,32,109,101,109,111,114,121,0,40,40,117,105,110,116,51,50,41,112,95,110,101,119,32,38,32,40,67,82,78,68,95,77,73,78,95,65,76,76,79,67,95,65,76,73,71,78,77,69,78,84,32,45,32,49,41,41,32,61,61,32,48,0,99,114,110,100,95,114,101,97,108,108,111,99,58,32,98,97,100,32,112,116,114,0,99,114,110,100,95,102,114,101,101,58,32,98,97,100,32,112,116,114,0,102,97,108,115,101,0,40,116,111,116,97,108,95,115,121,109,115,32,62,61,32,49,41,32,38,38,32,40,116,111,116,97,108,95,115,121,109,115,32,60,61,32,112,114,101,102,105,120,95,99,111,100,105,110,103,58,58,99,77,97,120,83,117,112,112,111,114,116,101,100,83,121,109,115,41,0,17,18,19,20,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15,16,48,0,110,117,109,95,98,105,116,115,32,60,61,32,51,50,85,0,109,95,98,105,116,95,99,111,117,110,116,32,60,61,32,99,66,105,116,66,117,102,83,105,122,101,0,116,32,33,61,32,99,85,73,78,84,51,50,95,77,65,88,0,109,111,100,101,108,46,109,95,99,111,100,101,95,115,105,122,101,115,91,115,121,109,93,32,61,61,32,108,101,110,0,0,2,3,1,0,2,3,4,5,6,7,1,40,108,101,110,32,62,61,32,49,41,32,38,38,32,40,108,101,110,32,60,61,32,99,77,97,120,69,120,112,101,99,116,101,100,67,111,100,101,83,105,122,101,41,0,105,32,60,32,109,95,115,105,122,101,0,110,101,120,116,95,108,101,118,101,108,95,111,102,115,32,62,32,99,117,114,95,108,101,118,101,108,95,111,102,115,0,1,2,2,3,3,3,3,4,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,2,1,2,0,0,0,1,0,2,1,0,2,0,0,1,2,3,110,117,109,32,38,38,32,40,110,117,109,32,61,61,32,126,110,117,109,95,99,104,101,99,107,41,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,83,116,57,101,120,99,101,112,116,105,111,110,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;function _abort(){Module.abort()}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}STATICTOP+=16;var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function(e){if(!e||EXCEPTIONS.infos[e])return e;for(var r in EXCEPTIONS.infos)if(EXCEPTIONS.infos[r].adjusted===e)return r;return e},addRef:function(e){e&&EXCEPTIONS.infos[e].refcount++},decRef:function(e){var r;e&&(assert(0<(r=EXCEPTIONS.infos[e]).refcount),r.refcount--,0!==r.refcount||r.rethrown||(r.destructor&&Module.dynCall_vi(r.destructor,e),delete EXCEPTIONS.infos[e],___cxa_free_exception(e)))},clearRef:function(e){e&&(EXCEPTIONS.infos[e].refcount=0)}};function ___cxa_begin_catch(e){var r=EXCEPTIONS.infos[e];return r&&!r.caught&&(r.caught=!0,__ZSt18uncaught_exceptionv.uncaught_exception--),r&&(r.rethrown=!1),EXCEPTIONS.caught.push(e),EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(e)),e}function _pthread_once(e,r){_pthread_once.seen||(_pthread_once.seen={}),e in _pthread_once.seen||(Module.dynCall_v(r),_pthread_once.seen[e]=1)}function _emscripten_memcpy_big(e,r,t){return HEAPU8.set(HEAPU8.subarray(r,r+t),e),e}var SYSCALLS={varargs:0,get:function(e){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},get64:function(){var e=SYSCALLS.get(),r=SYSCALLS.get();return assert(0<=e?0===r:-1===r),e},getZero:function(){assert(0===SYSCALLS.get())}};function ___syscall6(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.getStreamFromFD();return FS.close(t),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC),PTHREAD_SPECIFIC={};function _pthread_getspecific(e){return PTHREAD_SPECIFIC[e]||0}function ___setErrNo(e){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=e),e}var PTHREAD_SPECIFIC_NEXT_KEY=1,ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(e,r){return 0==e?ERRNO_CODES.EINVAL:(HEAP32[e>>2]=PTHREAD_SPECIFIC_NEXT_KEY,PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0,PTHREAD_SPECIFIC_NEXT_KEY++,0)}function ___resumeException(e){throw EXCEPTIONS.last||(EXCEPTIONS.last=e),e+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){if(!(n=EXCEPTIONS.last))return 0|(Runtime.setTempRet0(0),0);var e=EXCEPTIONS.infos[n],r=e.type;if(!r)return 0|(Runtime.setTempRet0(0),n);var t=Array.prototype.slice.call(arguments);Module.___cxa_is_pointer_type(r),___cxa_find_matching_catch.buffer||(___cxa_find_matching_catch.buffer=_malloc(4)),HEAP32[___cxa_find_matching_catch.buffer>>2]=n;for(var n=___cxa_find_matching_catch.buffer,i=0;i<t.length;i++)if(t[i]&&Module.___cxa_can_catch(t[i],r,n))return n=HEAP32[n>>2],e.adjusted=n,0|(Runtime.setTempRet0(t[i]),n);return n=HEAP32[n>>2],0|(Runtime.setTempRet0(r),n)}function ___gxx_personality_v0(){}function _pthread_setspecific(e,r){return e in PTHREAD_SPECIFIC?(PTHREAD_SPECIFIC[e]=r,0):ERRNO_CODES.EINVAL}function ___syscall140(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.getStreamFromFD(),n=(SYSCALLS.get(),SYSCALLS.get()),i=SYSCALLS.get(),a=SYSCALLS.get(),n=n;return FS.llseek(t,n,a),HEAP32[i>>2]=t.position,t.getdents&&0===n&&0===a&&(t.getdents=null),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall146(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.get(),n=SYSCALLS.get(),i=SYSCALLS.get(),a=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(e,r){var t=___syscall146.buffers[e];assert(t),0===r||10===r?((1===e?Module.print:Module.printErr)(UTF8ArrayToString(t,0)),t.length=0):t.push(r)});for(var o=0;o<i;o++){for(var u=HEAP32[n+8*o>>2],f=HEAP32[n+(8*o+4)>>2],l=0;l<f;l++)___syscall146.printChar(t,HEAPU8[u+l]);a+=f}return a}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall54(e,r){SYSCALLS.varargs=r;try{return 0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function invoke_iiii(e,r,t,n){try{return Module.dynCall_iiii(e,r,t,n)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiiii(e,r,t,n,i,a){try{Module.dynCall_viiiii(e,r,t,n,i,a)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_vi(e,r){try{Module.dynCall_vi(e,r)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_ii(e,r){try{return Module.dynCall_ii(e,r)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viii(e,r,t,n){try{Module.dynCall_viii(e,r,t,n)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_v(e){try{Module.dynCall_v(e)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiiiii(e,r,t,n,i,a,o){try{Module.dynCall_viiiiii(e,r,t,n,i,a,o)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiii(e,r,t,n,i){try{Module.dynCall_viiii(e,r,t,n,i)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}__ATEXIT__.push(function(){var e=Module._fflush;e&&e(0);var r=___syscall146.printChar;r&&((e=___syscall146.buffers)[1].length&&r(1,10),e[2].length&&r(2,10))}),DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC),STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP),STACK_MAX=STACK_BASE+TOTAL_STACK,DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX),HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE,staticSealed=!0,Module.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0,byteLength:byteLength},Module.asmLibraryArg={abort:abort,assert:assert,enlargeMemory:enlargeMemory,getTotalMemory:getTotalMemory,abortOnCannotGrowMemory:abortOnCannotGrowMemory,invoke_iiii:invoke_iiii,invoke_viiiii:invoke_viiiii,invoke_vi:invoke_vi,invoke_ii:invoke_ii,invoke_viii:invoke_viii,invoke_v:invoke_v,invoke_viiiiii:invoke_viiiiii,invoke_viiii:invoke_viiii,_pthread_getspecific:_pthread_getspecific,___syscall54:___syscall54,_pthread_setspecific:_pthread_setspecific,___gxx_personality_v0:___gxx_personality_v0,___syscall6:___syscall6,___setErrNo:___setErrNo,_abort:_abort,___cxa_begin_catch:___cxa_begin_catch,_pthread_once:_pthread_once,_emscripten_memcpy_big:_emscripten_memcpy_big,_pthread_key_create:_pthread_key_create,___syscall140:___syscall140,___resumeException:___resumeException,___cxa_find_matching_catch:___cxa_find_matching_catch,___syscall146:___syscall146,__ZSt18uncaught_exceptionv:__ZSt18uncaught_exceptionv,DYNAMICTOP_PTR:DYNAMICTOP_PTR,tempDoublePtr:tempDoublePtr,ABORT:ABORT,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX,cttz_i8:cttz_i8};var asm=function(e,r,t){var n=e.Int8Array,ce=new n(t),i=e.Int16Array,W=new i(t),a=e.Int32Array,_e=new a(t),o=e.Uint8Array,de=new o(t),u=e.Uint16Array,Ee=new u(t),f=e.Uint32Array;new f(t);var l=e.Float32Array;new l(t);var s=e.Float64Array,k=new s(t),c=e.byteLength,_=0|r.DYNAMICTOP_PTR,g=0|r.tempDoublePtr;r.ABORT;var Te=0|r.STACKTOP;r.STACK_MAX;var d=0|r.cttz_i8;e.NaN,e.Infinity;var L=0;e.Math.floor,e.Math.abs,e.Math.sqrt,e.Math.pow,e.Math.cos,e.Math.sin,e.Math.tan,e.Math.acos,e.Math.asin,e.Math.atan,e.Math.atan2,e.Math.exp,e.Math.log,e.Math.ceil;var ie=e.Math.imul;e.Math.min,e.Math.max;var T=e.Math.clz32,E=r.abort;r.assert;var A=r.enlargeMemory,M=r.getTotalMemory,b=r.abortOnCannotGrowMemory;r.invoke_iiii,r.invoke_viiiii,r.invoke_vi,r.invoke_ii,r.invoke_viii,r.invoke_v,r.invoke_viiiiii,r.invoke_viiii;var m=r._pthread_getspecific,S=r.___syscall54,P=r._pthread_setspecific;r.___gxx_personality_v0;var R=r.___syscall6,h=r.___setErrNo,p=r._abort;r.___cxa_begin_catch;var C=r._pthread_once,N=r._emscripten_memcpy_big,y=r._pthread_key_create,O=r.___syscall140;r.___resumeException,r.___cxa_find_matching_catch;var v=r.___syscall146;function I(e){e|=0;var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,T=0,A=0,M=0,b=0,m=0,S=0,P=Te;Te=Te+16|0,_=P;do{if(e>>>0<245){if(e=(l=e>>>0<11?16:e+11&-8)>>>3,3&(t=(c=0|_e[1144])>>>e)|0)return n=0|_e[(t=(e=4616+((r=(1&t^1)+e|0)<<1<<2)|0)+8|0)>>2],(0|e)==(0|(a=0|_e[(i=n+8|0)>>2]))?_e[1144]=c&~(1<<r):(_e[a+12>>2]=e,_e[t>>2]=a),S=r<<3,_e[n+4>>2]=3|S,_e[(S=n+S+4|0)>>2]=1|_e[S>>2],Te=P,0|(S=i);if((s=0|_e[1146])>>>0<l>>>0){if(0|t)return r=((r=t<<e&((r=2<<e)|0-r))&0-r)-1|0,i=0|_e[(e=(r=4616+((n=((t=(r>>>=o=r>>>12&16)>>>5&8)|o|(i=(r>>>=t)>>>2&4)|(e=(r>>>=i)>>>1&2)|(n=(r>>>=e)>>>1&1))+(r>>>n)|0)<<1<<2)|0)+8|0)>>2],(0|r)==(0|(t=0|_e[(o=i+8|0)>>2]))?(e=c&~(1<<n),_e[1144]=e):(_e[t+12>>2]=r,_e[e>>2]=t,e=c),a=(n<<3)-l|0,_e[i+4>>2]=3|l,_e[(n=i+l|0)+4>>2]=1|a,_e[n+a>>2]=a,0|s&&(i=0|_e[1149],t=4616+((r=s>>>3)<<1<<2)|0,e&(r=1<<r)?r=0|_e[(e=t+8|0)>>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=i,_e[r+12>>2]=i,_e[i+8>>2]=r,_e[i+12>>2]=t),_e[1146]=a,_e[1149]=n,Te=P,0|(S=o);if(u=0|_e[1145]){if(t=(u&0-u)-1|0,e=0|_e[4880+(((a=(t>>>=o=t>>>12&16)>>>5&8)|o|(f=(t>>>=a)>>>2&4)|(n=(t>>>=f)>>>1&2)|(e=(t>>>=n)>>>1&1))+(t>>>e)<<2)>>2],t=(-8&_e[e+4>>2])-l|0,n=0|_e[e+16+((0==(0|_e[e+16>>2])&1)<<2)>>2]){for(;t=(f=(o=(-8&_e[n+4>>2])-l|0)>>>0<t>>>0)?o:t,e=f?n:e,n=0|_e[n+16+((0==(0|_e[n+16>>2])&1)<<2)>>2],0!=(0|n););f=e,a=t}else f=e,a=t;if(f>>>0<(o=f+l|0)>>>0){i=0|_e[f+24>>2],r=0|_e[f+12>>2];do{if((0|r)==(0|f)){if(e=f+20|0,r=0|_e[e>>2],!r&&!(r=0|_e[(e=f+16|0)>>2])){t=0;break}for(;;)if(0|(n=0|_e[(t=r+20|0)>>2]))r=n,e=t;else{if(!(n=0|_e[(t=r+16|0)>>2]))break;r=n,e=t}_e[e>>2]=0,t=r}else t=0|_e[f+8>>2],_e[t+12>>2]=r,_e[r+8>>2]=t,t=r}while(0);do{if(0|i){if(r=0|_e[f+28>>2],(0|f)==(0|_e[(e=4880+(r<<2)|0)>>2])){if(!(_e[e>>2]=t)){_e[1145]=u&~(1<<r);break}}else if(!(_e[i+16+(((0|_e[i+16>>2])!=(0|f)&1)<<2)>>2]=t))break;_e[t+24>>2]=i,0|(r=0|_e[f+16>>2])&&(_e[t+16>>2]=r,_e[r+24>>2]=t),0|(r=0|_e[f+20>>2])&&(_e[t+20>>2]=r,_e[r+24>>2]=t)}}while(0);return a>>>0<16?(S=a+l|0,_e[f+4>>2]=3|S,_e[(S=f+S+4|0)>>2]=1|_e[S>>2]):(_e[f+4>>2]=3|l,_e[o+4>>2]=1|a,_e[o+a>>2]=a,0|s&&(n=0|_e[1149],t=4616+((r=s>>>3)<<1<<2)|0,c&(r=1<<r)?r=0|_e[(e=t+8|0)>>2]:(_e[1144]=c|r,e=(r=t)+8|0),_e[e>>2]=n,_e[r+12>>2]=n,_e[n+8>>2]=r,_e[n+12>>2]=t),_e[1146]=a,_e[1149]=o),Te=P,0|(S=f+8|0)}c=l}else c=l}else c=l}else if(e>>>0<=4294967231)if(l=-8&(e=e+11|0),f=0|_e[1145]){n=0-l|0,u=(e>>>=8)?16777215<l>>>0?31:l>>>((u=14-((s=((m=e<<(c=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|c|(u=((m<<=s)+245760|0)>>>16&2))+(m<<u>>>15)|0)+7|0)&1|u<<1:0,t=0|_e[4880+(u<<2)>>2];e:do{if(t)for(o=l<<(31==((e=0)|u)?0:25-(u>>>1)|0),a=0;;){if((i=(-8&_e[t+4>>2])-l|0)>>>0<n>>>0){if(!i){n=0,i=e=t,m=61;break e}e=t,n=i}if(a=0==(0|(i=0|_e[t+20>>2]))|(0|i)==(0|(t=0|_e[t+16+(o>>>31<<2)>>2]))?a:i,i=0==(0|t)){t=a,m=57;break}o<<=1&(1^i)}else e=t=0,m=57}while(0);if(57==(0|m)){if(0==(0|t)&0==(0|e)){if(!(e=f&((e=2<<u)|0-e))){c=l;break}c=(e&0-e)-1|0,t=(e=0)|_e[4880+(((a=(c>>>=o=c>>>12&16)>>>5&8)|o|(u=(c>>>=a)>>>2&4)|(s=(c>>>=u)>>>1&2)|(t=(c>>>=s)>>>1&1))+(c>>>t)<<2)>>2]}t?(i=t,m=61):(u=e,o=n)}if(61==(0|m))for(;;){if(m=0,t=(c=(t=(-8&_e[i+4>>2])-l|0)>>>0<n>>>0)?t:n,e=c?i:e,!(i=0|_e[i+16+((0==(0|_e[i+16>>2])&1)<<2)>>2])){u=e,o=t;break}n=t,m=61}if(0!=(0|u)&&o>>>0<((0|_e[1146])-l|0)>>>0){if((a=u+l|0)>>>0<=u>>>0)return Te=P,(S=0)|S;i=0|_e[u+24>>2],r=0|_e[u+12>>2];do{if((0|r)==(0|u)){if(e=u+20|0,r=0|_e[e>>2],!r&&!(r=0|_e[(e=u+16|0)>>2])){r=0;break}for(;;)if(0|(n=0|_e[(t=r+20|0)>>2]))r=n,e=t;else{if(!(n=0|_e[(t=r+16|0)>>2]))break;r=n,e=t}_e[e>>2]=0}else S=0|_e[u+8>>2],_e[S+12>>2]=r,_e[r+8>>2]=S}while(0);do{if(i){if(e=0|_e[u+28>>2],(0|u)==(0|_e[(t=4880+(e<<2)|0)>>2])){if(!(_e[t>>2]=r)){n=f&~(1<<e),_e[1145]=n;break}}else if(!(_e[i+16+(((0|_e[i+16>>2])!=(0|u)&1)<<2)>>2]=r)){n=f;break}_e[r+24>>2]=i,0|(e=0|_e[u+16>>2])&&(_e[r+16>>2]=e,_e[e+24>>2]=r),n=((e=0|_e[u+20>>2])&&(_e[r+20>>2]=e,_e[e+24>>2]=r),f)}else n=f}while(0);do{if(16<=o>>>0){if(_e[u+4>>2]=3|l,_e[a+4>>2]=1|o,r=(_e[a+o>>2]=o)>>>3,o>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<<r)?r=0|_e[(e=t+8|0)>>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=a,_e[r+12>>2]=a,_e[a+8>>2]=r,_e[a+12>>2]=t;break}if(t=4880+((r=(r=o>>>8)?16777215<o>>>0?31:o>>>((r=14-((b=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(r=((S<<=b)+245760|0)>>>16&2))+(S<<r>>>15)|0)+7|0)&1|r<<1:0)<<2)|0,_e[a+28>>2]=r,_e[(e=a+16|0)+4>>2]=0,_e[e>>2]=0,!(n&(e=1<<r))){_e[1145]=n|e,_e[t>>2]=a,_e[a+24>>2]=t,_e[a+12>>2]=a,_e[a+8>>2]=a;break}for(e=o<<(31==(0|r)?0:25-(r>>>1)|0),t=0|_e[t>>2];;){if((-8&_e[t+4>>2]|0)==(0|o)){m=97;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=96;break}e<<=1,t=r}if(96==(0|m)){_e[n>>2]=a,_e[a+24>>2]=t,_e[a+12>>2]=a,_e[a+8>>2]=a;break}if(97==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=a,_e[m>>2]=a,_e[a+8>>2]=S,_e[a+12>>2]=t,_e[a+24>>2]=0;break}}else S=o+l|0,_e[u+4>>2]=3|S,_e[(S=u+S+4|0)>>2]=1|_e[S>>2]}while(0);return Te=P,0|(S=u+8|0)}c=l}else c=l;else c=-1}while(0);if(c>>>0<=(t=0|_e[1146])>>>0)return r=t-c|0,e=0|_e[1149],15<r>>>0?(S=e+c|0,_e[1149]=S,_e[1146]=r,_e[S+4>>2]=1|r,_e[S+r>>2]=r,_e[e+4>>2]=3|c):(_e[1146]=0,_e[1149]=0,_e[e+4>>2]=3|t,_e[(S=e+t+4|0)>>2]=1|_e[S>>2]),Te=P,0|(S=e+8|0);if(c>>>0<(o=0|_e[1147])>>>0)return b=o-c|0,_e[1147]=b,m=(S=0|_e[1150])+c|0,_e[1150]=m,_e[m+4>>2]=1|b,_e[S+4>>2]=3|c,Te=P,0|(S=S+8|0);if(u=c+48|0,(l=(a=(e=0|_e[1262]?0|_e[1264]:(_e[1264]=4096,_e[1263]=4096,_e[1265]=-1,_e[1266]=-1,_e[1267]=0,_e[1255]=0,e=-16&_^1431655768,_e[_>>2]=e,_e[1262]=e,4096))+(f=c+47|0)|0)&(i=0-e|0))>>>0<=c>>>0)return Te=P,(S=0)|S;if(0|(e=0|_e[1254])&&(_=(s=0|_e[1252])+l|0)>>>0<=s>>>0|e>>>0<_>>>0)return Te=P,(S=0)|S;e:do{if(4&_e[1255])r=0,m=133;else{t=0|_e[1150];r:do{if(t){for(n=5024;!((e=0|_e[n>>2])>>>0<=t>>>0&&(e+(0|_e[(T=n+4|0)>>2])|0)>>>0>t>>>0);){if(!(e=0|_e[n+8>>2])){m=118;break r}n=e}if((r=a-o&i)>>>0<2147483647)if((0|(e=0|me(0|r)))==((0|_e[n>>2])+(0|_e[T>>2])|0)){if(-1!=(0|e)){o=r,a=e,m=135;break e}}else n=e,m=126;else r=0}else m=118}while(0);do{if(118==(0|m))if(-1!=(0|(t=0|me(0)))&&(r=t,E=(r=(0==((E=(d=0|_e[1263])+-1|0)&r|0)?0:(E+r&0-d)-r|0)+l|0)+(d=0|_e[1252])|0,c>>>0<r>>>0&r>>>0<2147483647)){if(0|(T=0|_e[1254])&&E>>>0<=d>>>0|T>>>0<E>>>0){r=0;break}if((0|(e=0|me(0|r)))==(0|t)){o=r,a=t,m=135;break e}n=e,m=126}else r=0}while(0);do{if(126==(0|m)){if(t=0-r|0,!(r>>>0<u>>>0&r>>>0<2147483647&-1!=(0|n))){if(-1==(0|n)){r=0;break}o=r,a=n,m=135;break e}if(2147483647<=(e=f-r+(e=0|_e[1264])&0-e)>>>0){o=r,a=n,m=135;break e}if(-1==(0|me(0|e))){me(0|t),r=0;break}o=e+r|0,a=n,m=135;break e}}while(0);_e[1255]=4|_e[1255],m=133}}while(0);if(133==(0|m)&&l>>>0<2147483647&&!(-1==(0|(b=0|me(0|l)))|1^(M=(c+40|0)>>>0<(A=(T=0|me(0))-b|0)>>>0)|b>>>0<T>>>0&-1!=(0|b)&-1!=(0|T)^1)&&(o=M?A:r,a=b,m=135),135==(0|m)){r=(0|_e[1252])+o|0,(_e[1252]=r)>>>0>(0|_e[1253])>>>0&&(_e[1253]=r),f=0|_e[1150];do{if(f){for(r=5024;;){if((0|a)==((e=0|_e[r>>2])+(n=0|_e[(t=r+4|0)>>2])|0)){m=145;break}if(!(i=0|_e[r+8>>2]))break;r=i}if(145==(0|m)&&0==(8&_e[r+12>>2]|0)&&f>>>0<a>>>0&e>>>0<=f>>>0){_e[t>>2]=n+o,m=f+(S=0==(7&(S=f+8|0)|0)?0:0-S&7)|0,S=(0|_e[1147])+(o-S)|0,_e[1150]=m,_e[1147]=S,_e[m+4>>2]=1|S,_e[m+S+4>>2]=40,_e[1151]=_e[1266];break}for(a>>>0<(0|_e[1148])>>>0&&(_e[1148]=a),t=a+o|0,r=5024;;){if((0|_e[r>>2])==(0|t)){m=153;break}if(!(e=0|_e[r+8>>2]))break;r=e}if(153==(0|m)&&0==(8&_e[r+12>>2]|0)){_e[r>>2]=a,_e[(s=r+4|0)>>2]=(0|_e[s>>2])+o,l=(s=a+(0==(7&(s=a+8|0)|0)?0:0-s&7)|0)+c|0,u=(r=t+(0==(7&(r=t+8|0)|0)?0:0-r&7)|0)-s-c|0,_e[s+4>>2]=3|c;do{if((0|r)!=(0|f)){if((0|r)==(0|_e[1149])){S=(0|_e[1146])+u|0,_e[1146]=S,_e[1149]=l,_e[l+4>>2]=1|S,_e[l+S>>2]=S;break}if(1==(3&(e=0|_e[r+4>>2])|0)){o=-8&e,n=e>>>3;e:do{if(e>>>0<256){if(e=0|_e[r+8>>2],(0|(t=0|_e[r+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<<n);break}_e[e+12>>2]=t,_e[t+8>>2]=e;break}a=0|_e[r+24>>2],e=0|_e[r+12>>2];do{if((0|e)==(0|r)){if(!(e=0|_e[(t=(n=r+16|0)+4|0)>>2])){if(!(e=0|_e[n>>2])){e=0;break}t=n}for(;;)if(0|(i=0|_e[(n=e+20|0)>>2]))e=i,t=n;else{if(!(i=0|_e[(n=e+16|0)>>2]))break;e=i,t=n}_e[t>>2]=0}else S=0|_e[r+8>>2],_e[S+12>>2]=e,_e[e+8>>2]=S}while(0);if(!a)break;n=4880+((t=0|_e[r+28>>2])<<2)|0;do{if((0|r)==(0|_e[n>>2])){if(0|(_e[n>>2]=e))break;_e[1145]=_e[1145]&~(1<<t);break e}if(!(_e[a+16+(((0|_e[a+16>>2])!=(0|r)&1)<<2)>>2]=e))break e}while(0)}while((_e[e+24>>2]=a,0|(n=0|_e[(t=r+16|0)>>2])&&(_e[e+16>>2]=n,_e[n+24>>2]=e),t=0|_e[t+4>>2])&&(_e[e+20>>2]=t,_e[t+24>>2]=e,0));r=r+o|0,i=o+u|0}else i=u;if(_e[(r=r+4|0)>>2]=-2&_e[r>>2],_e[l+4>>2]=1|i,r=(_e[l+i>>2]=i)>>>3,i>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<<r)?r=0|_e[(e=t+8|0)>>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=l,_e[r+12>>2]=l,_e[l+8>>2]=r,_e[l+12>>2]=t;break}r=i>>>8;do{if(r){if(16777215<i>>>0){r=31;break}r=i>>>((r=14-((b=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(r=((S<<=b)+245760|0)>>>16&2))+(S<<r>>>15)|0)+7|0)&1|r<<1}else r=0}while(0);if(n=4880+(r<<2)|0,_e[l+28>>2]=r,_e[(e=l+16|0)+4>>2]=0,!((e=(_e[e>>2]=0)|_e[1145])&(t=1<<r))){_e[1145]=e|t,_e[n>>2]=l,_e[l+24>>2]=n,_e[l+12>>2]=l,_e[l+8>>2]=l;break}for(e=i<<(31==(0|r)?0:25-(r>>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|i)){m=194;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=193;break}e<<=1,t=r}if(193==(0|m)){_e[n>>2]=l,_e[l+24>>2]=t,_e[l+12>>2]=l,_e[l+8>>2]=l;break}if(194==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=l,_e[m>>2]=l,_e[l+8>>2]=S,_e[l+12>>2]=t,_e[l+24>>2]=0;break}}else S=(0|_e[1147])+u|0,_e[1147]=S,_e[1150]=l,_e[l+4>>2]=1|S}while(0);return Te=P,0|(S=s+8|0)}for(r=5024;!((e=0|_e[r>>2])>>>0<=f>>>0&&f>>>0<(S=e+(0|_e[r+4>>2])|0)>>>0);)r=0|_e[r+8>>2];for(i=S+-47|0,e=i+8|0,e=i+(0==(7&e|0)?0:0-e&7)|0,i=f+16|0,e=e>>>0<i>>>0?f:e,r=e+8|0,t=a+8|0,t=0==(7&t|0)?0:0-t&7,m=a+t|0,t=o+-40-t|0,_e[1150]=m,_e[1147]=t,_e[m+4>>2]=1|t,_e[m+t+4>>2]=40,_e[1151]=_e[1266],t=e+4|0,_e[t>>2]=27,_e[r>>2]=_e[1256],_e[r+4>>2]=_e[1257],_e[r+8>>2]=_e[1258],_e[r+12>>2]=_e[1259],_e[1256]=a,_e[1257]=o,_e[1259]=0,_e[1258]=r,r=e+24|0;_e[(r=(m=r)+4|0)>>2]=7,(m+8|0)>>>0<S>>>0;);if((0|e)!=(0|f)){if(a=e-f|0,_e[t>>2]=-2&_e[t>>2],_e[f+4>>2]=1|a,r=(_e[e>>2]=a)>>>3,a>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<<r)?r=0|_e[(e=t+8|0)>>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=f,_e[r+12>>2]=f,_e[f+8>>2]=r,_e[f+12>>2]=t;break}if(n=4880+((t=(r=a>>>8)?16777215<a>>>0?31:a>>>((t=14-((b=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(t=((S<<=b)+245760|0)>>>16&2))+(S<<t>>>15)|0)+7|0)&1|t<<1:0)<<2)|0,_e[f+28>>2]=t,_e[f+20>>2]=0,!((r=(_e[i>>2]=0)|_e[1145])&(e=1<<t))){_e[1145]=r|e,_e[n>>2]=f,_e[f+24>>2]=n,_e[f+12>>2]=f,_e[f+8>>2]=f;break}for(e=a<<(31==(0|t)?0:25-(t>>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|a)){m=216;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=215;break}e<<=1,t=r}if(215==(0|m)){_e[n>>2]=f,_e[f+24>>2]=t,_e[f+12>>2]=f,_e[f+8>>2]=f;break}if(216==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=f,_e[m>>2]=f,_e[f+8>>2]=S,_e[f+12>>2]=t,_e[f+24>>2]=0;break}}}else{for(S=0|_e[1148],0==(0|S)|a>>>0<S>>>0&&(_e[1148]=a),_e[1256]=a,_e[1257]=o,_e[1259]=0,_e[1153]=_e[1262],_e[1152]=-1,r=0;_e[(S=4616+(r<<1<<2)|0)+12>>2]=S,_e[S+8>>2]=S,r=r+1|0,32!=(0|r););m=a+(S=0==(7&(S=a+8|0)|0)?0:0-S&7)|0,S=o+-40-S|0,_e[1150]=m,_e[1147]=S,_e[m+4>>2]=1|S,_e[m+S+4>>2]=40,_e[1151]=_e[1266]}}while(0);if(c>>>0<(r=0|_e[1147])>>>0)return b=r-c|0,_e[1147]=b,m=(S=0|_e[1150])+c|0,_e[1150]=m,_e[m+4>>2]=1|b,_e[S+4>>2]=3|c,Te=P,0|(S=S+8|0)}return _e[(S=296)>>2]=12,Te=P,(S=0)|S}function D(e,r,t,n,i,a){e|=0,r=+r,t|=0,n|=0,i|=0,a|=0;var o,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,T=0,A=0,M=0,b=0,m=0,S=0,P=0,R=0,h=0,p=0,C=0,N=0,y=0,O=0,v=Te;Te=Te+560|0,l=v+8|0,y=O=(M=v)+524|0,N=(s=v+512|0)+12|(_e[M>>2]=0),ke(r),h=(0|L)<0?(r=-r,p=1,2087):(p=0!=(2049&i|0)&1,0==(2048&i|0)?0==(1&i|0)?2088:2093:2090),ke(r),C=2146435072&L;do{if(C>>>0<2146435072|2146435072==(0|C)&!1){if((u=0!=(E=2*(o=M,+ + +function e(r,t){r=+r;t|=0;var n=0,i=0,a=0;k[g>>3]=r;n=0|_e[g>>2];i=0|_e[g+4>>2];a=0|ye(0|n,0|i,52);switch(2047&a){case 0:n=0!=r?(r=+e(0x10000000000000000*r,t),(0|_e[t>>2])-64|0):0,_e[t>>2]=n;break;case 2047:break;default:_e[t>>2]=(2047&a)-1022,_e[g>>2]=n,_e[g+4>>2]=-2146435073&i|1071644672,r=+k[g>>3]}return+r}(+r,o|=0))))&&(_e[M>>2]=(0|_e[M>>2])-1),97==(0|(m=32|a))){d=0==(0|(T=32&a))?h:h+9|0,_=2|p,u=12-n|0;do{if(!(11<n>>>0|0==(0|u))){for(r=8;u=u+-1|0,r*=16,0!=(0|u););if(45==(0|ce[d>>0])){r=-(r+(-E-r));break}r=E+r-r;break}}while(r=E,0);for(f=0|_e[M>>2],u=(0|f)<0?0-f|0:f,u=0|fe(u,((0|u)<0)<<31>>31,N),(0|u)==(0|N)&&(ce[(u=s+11|0)>>0]=48),ce[u+-1>>0]=43+(f>>31&2),c=u+-2|0,ce[c>>0]=a+15,s=(0|n)<1,l=0==(8&i|0),u=O;C=~~r,f=u+1|0,ce[u>>0]=de[2122+C>>0]|T,r=16*(r-(0|C)),u=1!=(f-y|0)||l&s&0==r?f:(ce[f>>0]=46,u+2|0),0!=r;);C=u-y|0,se(e,32,t,u=(y=N-c|0)+_+(N=0!=(0|n)&(C+-2|0)<(0|n)?n+2|0:C)|0,i),Ie(e,d,_),se(e,48,t,u,65536^i),Ie(e,O,C),se(e,48,N-C|0,0,0),Ie(e,c,y),se(e,32,t,u,8192^i);break}for(f=(0|n)<0?6:n,u?(u=(0|_e[M>>2])-28|0,_e[M>>2]=u,r=268435456*E):(r=E,u=0|_e[M>>2]),C=(0|u)<0?l:l+288|0,l=C;P=~~r>>>0,_e[l>>2]=P,l=l+4|0,r=1e9*(r-(P>>>0)),0!=r;);if(0<(0|u))for(s=C,_=l;;){if(c=(0|u)<29?u:29,s>>>0<=(u=_+-4|0)>>>0){for(l=0;b=0|he(0|(S=0|ge(0|(S=0|Ne(0|_e[u>>2],0,0|c)),0|L,0|l,0)),0|(P=L),1e9,0),_e[u>>2]=b,l=0|Fe(0|S,0|P,1e9,0),u=u+-4|0,s>>>0<=u>>>0;);l&&(_e[(s=s+-4|0)>>2]=l)}for(l=_;!(l>>>0<=s>>>0||0|_e[(u=l+-4|0)>>2]);)l=u;if(u=(0|_e[M>>2])-c|0,!(0<(0|(_e[M>>2]=u))))break;_=l}else s=C;if((0|u)<0){n=1+((f+25|0)/9|0)|0,A=102==(0|m);do{if(T=(0|(T=0-u|0))<9?T:9,s>>>0<l>>>0){for(c=(1<<T)-1|0,_=1e9>>>T,d=0,u=s;P=0|_e[u>>2],_e[u>>2]=(P>>>T)+d,d=0|ie(P&c,_),u=u+4|0,u>>>0<l>>>0;);u=0==(0|_e[s>>2])?s+4|0:s,u=d?(_e[l>>2]=d,s=u,l+4|0):(s=u,l)}else s=0==(0|_e[s>>2])?s+4|0:s,u=l}while(l=(0|n)<(u-(l=A?C:s)>>2|0)?l+(n<<2)|0:u,u=(0|_e[M>>2])+T|0,(0|(_e[M>>2]=u))<0);u=s,n=l}else u=s,n=l;if(P=C,u>>>0<n>>>0){if(l=9*(P-u>>2)|0,10<=(c=0|_e[u>>2])>>>0)for(s=10;s=10*s|0,l=l+1|0,s>>>0<=c>>>0;);}else l=0;if((0|(s=f-(102!=(0|m)?l:0)+(((b=0!=(0|f))&(A=103==(0|m)))<<31>>31)|0))<((9*(n-P>>2)|0)-9|0)){if(T=C+4+(((0|(s=s+9216|0))/9|0)-1024<<2)|0,(0|(s=1+((0|s)%9|0)|0))<9)for(c=10;c=10*c|0,s=s+1|0,9!=(0|s););else c=10;if((s=(T+4|0)==(0|n))&0==(0|(d=((_=0|_e[T>>2])>>>0)%(c>>>0)|0)))s=T;else if(E=0==(1&((_>>>0)/(c>>>0)|0)|0)?9007199254740992:9007199254740994,r=d>>>0<(S=(0|c)/2|0)>>>0?.5:s&(0|d)==(0|S)?1:1.5,p&&(r=(S=45==(0|ce[h>>0]))?-r:r,E=S?-E:E),s=_-d|0,_e[T>>2]=s,E+r!=E){if(S=s+c|0,999999999<(_e[T>>2]=S)>>>0)for(l=T;(s=l+-4|0)>>>(_e[l>>2]=0)<u>>>0&&(_e[(u=u+-4|0)>>2]=0),S=1+(0|_e[s>>2])|0,999999999<(_e[s>>2]=S)>>>0;)l=s;else s=T;if(l=9*(P-u>>2)|0,10<=(_=0|_e[u>>2])>>>0)for(c=10;c=10*c|0,l=l+1|0,c>>>0<=_>>>0;);}else s=T;s=(s=s+4|0)>>>0<n>>>0?s:n,S=u}else s=n,S=u;for(m=s;;){if(m>>>0<=S>>>0){M=0;break}if(0|_e[(u=m+-4|0)>>2]){M=1;break}m=u}n=0-l|0;do{if(A){if(f=(0|l)<(0|(u=(1&(1^b))+f|0))&-5<(0|l)?(c=a+-1|0,u+-1-l|0):(c=a+-2|0,u+-1|0),!(u=8&i)){if(M&&0!=(0|(R=0|_e[m+-4>>2])))if((R>>>0)%10|0)s=0;else for(s=0,u=10;u=10*u|0,s=s+1|0,!((R>>>0)%(u>>>0)|0););else s=9;if(u=(9*(m-P>>2)|0)-9|0,102==(32|c)){f=(0|f)<(0|(T=0<(0|(T=u-s|0))?T:0))?f:T,T=0;break}f=(0|f)<(0|(T=0<(0|(T=u+l-s|0))?T:0))?f:T,T=0;break}T=u}else c=a,T=8&i}while(0);if(_=0!=(0|(A=f|T))&1,d=102==(32|c))u=(b=0)<(0|l)?l:0;else{if(((s=N)-(u=0|fe(u=(0|l)<0?n:l,((0|u)<0)<<31>>31,N))|0)<2)for(;ce[(u=u+-1|0)>>0]=48,(s-u|0)<2;);ce[u+-1>>0]=43+(l>>31&2),ce[(u=u+-2|0)>>0]=c,u=s-(b=u)|0}if(se(e,32,t,u=p+1+f+_+u|0,i),Ie(e,h,p),se(e,48,t,u,65536^i),d){_=T=O+9|0,d=O+8|0,s=c=C>>>0<S>>>0?C:S;do{if(l=0|fe(0|_e[s>>2],0,T),(0|s)==(0|c))(0|l)==(0|T)&&(ce[d>>0]=48,l=d);else if(O>>>0<l>>>0)for(ne(0|O,48,l-y|0);l=l+-1|0,O>>>0<l>>>0;);}while(Ie(e,l,_-l|0),(s=s+4|0)>>>0<=C>>>0);if(0|A&&Ie(e,2138,1),s>>>0<m>>>0&0<(0|f))for(;;){if(O>>>0<(l=0|fe(0|_e[s>>2],0,T))>>>0)for(ne(0|O,48,l-y|0);l=l+-1|0,O>>>0<l>>>0;);if(Ie(e,l,(0|f)<9?f:9),l=f+-9|0,!((s=s+4|0)>>>0<m>>>0&9<(0|f))){f=l;break}f=l}se(e,48,f+9|0,9,0)}else{if(A=M?m:S+4|0,-1<(0|f)){T=0==(0|T),n=M=O+9|0,_=0-y|0,d=O+8|0,c=S;do{(0|(l=0|fe(0|_e[c>>2],0,M)))==(0|M)&&(ce[d>>0]=48,l=d);do{if((0|c)==(0|S)){if(s=l+1|0,Ie(e,l,1),T&(0|f)<1){l=s;break}Ie(e,2138,1),l=s}else{if(l>>>0<=O>>>0)break;for(ne(0|O,48,l+_|0);l=l+-1|0,O>>>0<l>>>0;);}}while(0)}while(Ie(e,l,(0|(y=n-l|0))<(0|f)?y:f),(c=c+4|0)>>>0<A>>>0&-1<(0|(f=f-y|0)))}se(e,48,f+18|0,18,0),Ie(e,b,N-b|0)}se(e,32,t,u,8192^i)}else O=0!=(32&a|0),se(e,32,t,u=p+3|0,-65537&i),Ie(e,h,p),Ie(e,r!=r|!1?O?2114:2118:O?2106:2110,3),se(e,32,t,u,8192^i)}while(0);return Te=v,0|((0|u)<(0|t)?t:u)}function w(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;var a,o,u,f,l,s,c,_,d,E=0,T=0,A=0,M=0,b=0,m=0,S=0,P=0,R=0,h=0,p=0,C=0,N=0,y=Te;Te=Te+64|0,f=(c=y)+24|0,_=y+8|0,d=y+20|0,_e[(s=y+16|0)>>2]=r,a=0!=(0|e),u=o=40+f|0,f=39+f|0,l=4+_|0,m=E=T=0;e:for(;;){do{if(-1<(0|E)){if((2147483647-E|0)<(0|T)){_e[(E=296)>>2]=75,E=-1;break}E=T+E|0;break}}while(0);if(!((T=0|ce[r>>0])<<24>>24)){N=87;break}A=r;r:for(;;){switch(T<<24>>24){case 37:T=A,N=9;break r;case 0:T=A;break r}C=A+1|0,_e[s>>2]=C,T=0|ce[C>>0],A=C}r:do{if(9==(0|N))for(;;){if(37!=((N=0)|ce[A+1>>0]))break r;if(T=T+1|0,A=A+2|0,_e[s>>2]=A,37!=(0|ce[A>>0]))break;N=9}}while(0);if(T=T-r|0,a&&Ie(e,r,T),0|T)r=A;else{(T=(0|ce[(M=A+1|0)>>0])-48|0)>>>0<10?(p=(C=36==(0|ce[A+2>>0]))?T:-1,m=C?1:m,M=C?A+3|0:M):p=-1,_e[s>>2]=M,A=((T=0|ce[M>>0])<<24>>24)-32|0;r:do{if(A>>>0<32)for(b=0,S=T;;){if(!(75913&(T=1<<A))){T=S;break r}if(b|=T,M=M+1|0,_e[s>>2]=M,32<=(A=((T=0|ce[M>>0])<<24>>24)-32|0)>>>0)break;S=T}else b=0}while(0);if(T<<24>>24==42){if((T=(0|ce[(A=M+1|0)>>0])-48|0)>>>0<10&&36==(0|ce[M+2>>0]))_e[i+(T<<2)>>2]=10,T=0|_e[n+((0|ce[A>>0])-48<<3)>>2],m=1,M=M+3|0;else{if(0|m){E=-1;break}M=(m=a?(m=3+(0|_e[t>>2])&-4,T=0|_e[m>>2],_e[t>>2]=m+4,0):T=0,A)}_e[s>>2]=M,T=(C=(0|T)<0)?0-T|0:T,b=C?8192|b:b}else{if((0|(T=0|Se(s)))<0){E=-1;break}M=0|_e[s>>2]}do{if(46==(0|ce[M>>0])){if(42!=(0|ce[M+1>>0])){_e[s>>2]=M+1,A=0|Se(s),M=0|_e[s>>2];break}if((A=(0|ce[(S=M+2|0)>>0])-48|0)>>>0<10&&36==(0|ce[M+3>>0])){_e[i+(A<<2)>>2]=10,A=0|_e[n+((0|ce[S>>0])-48<<3)>>2],M=M+4|0,_e[s>>2]=M;break}if(0|m){E=-1;break e}a?(C=3+(0|_e[t>>2])&-4,A=0|_e[C>>2],_e[t>>2]=C+4):A=0,M=_e[s>>2]=S}else A=-1}while(0);for(h=0;;){if(57<((0|ce[M>>0])-65|0)>>>0){E=-1;break e}if(C=M+1|0,_e[s>>2]=C,!(((P=255&(S=0|ce[(0|ce[M>>0])-65+(1606+(58*h|0))>>0]))+-1|0)>>>0<8))break;h=P,M=C}if(!(S<<24>>24)){E=-1;break}R=-1<(0|p);do{if(S<<24>>24==19){if(R){E=-1;break e}N=49}else{if(R){_e[i+(p<<2)>>2]=P,p=0|_e[(R=n+(p<<3)|0)+4>>2],_e[(N=c)>>2]=_e[R>>2],_e[N+4>>2]=p,N=49;break}if(!a){E=0;break e}H(c,P,t)}}while(0);if(49!=(0|N)||(N=0,a)){M=0!=(0|h)&3==(15&(M=0|ce[M>>0])|0)?-33&M:M,R=-65537&b,p=0==(8192&b|0)?b:R;r:do{switch(0|M){case 110:switch((255&h)<<24>>24){case 0:case 1:_e[_e[c>>2]>>2]=E,T=0,r=C;continue e;case 2:T=0|_e[c>>2],_e[T>>2]=E,_e[T+4>>2]=((0|E)<0)<<31>>31,T=0,r=C;continue e;case 3:W[_e[c>>2]>>1]=E,T=0,r=C;continue e;case 4:ce[_e[c>>2]>>0]=E,T=0,r=C;continue e;case 6:_e[_e[c>>2]>>2]=E,T=0,r=C;continue e;case 7:T=0|_e[c>>2],_e[T>>2]=E,_e[T+4>>2]=((0|E)<0)<<31>>31,T=0,r=C;continue e;default:T=0,r=C;continue e}case 112:M=120,A=8<A>>>0?A:8,r=8|p,N=61;break;case 88:case 120:r=p,N=61;break;case 111:S=2070,A=(b=0)==(8&p|0)|(0|(R=u-(P=0|function(e,r,t){if(t|=0,!(0==(0|(e|=0))&0==(0|(r|=0))))for(;ce[(t=t+-1|0)>>0]=7&e|48,e=0|ye(0|e,0|r,3),r=L,!(0==(0|e)&0==(0|r)););return 0|t}(r=0|_e[(M=c)>>2],M=0|_e[M+4>>2],o))|0))<(0|A)?A:R+1|0,R=p,N=67;break;case 105:case 100:if(r=0|_e[(M=c)>>2],(0|(M=0|_e[M+4>>2]))<0){r=0|ve(0,0,0|r,0|M),M=L,_e[(b=c)>>2]=r,_e[b+4>>2]=M,b=1,S=2070,N=66;break r}b=0!=(2049&p|0)&1,S=0==(2048&p|0)?0==(1&p|0)?2070:2072:2071,N=66;break r;case 117:S=2070,r=(b=0)|_e[(M=c)>>2],M=0|_e[M+4>>2],N=66;break;case 99:ce[f>>0]=_e[c>>2],r=f,b=0,S=2070,P=o,M=1,A=R;break;case 109:M=0|(0|function(e,r){e|=0,r|=0;var t=0,n=0;n=0;for(;;){if((0|de[2140+n>>0])==(0|e)){e=2;break}if(87==(0|(t=n+1|0))){t=2228,n=87,e=5;break}n=t}2==(0|e)&&(n?(t=2228,e=5):t=2228);if(5==(0|e))for(;;){for(;t=(e=t)+1|0,0!=(0|ce[e>>0]););if(!(n=n+-1|0))break;e=5}return 0|function(e,r){return 0|function(e,r){e|=0,r=(r|=0)?0|function(e,r,t){r|=0,t|=0;var n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0;_=1794895138+(0|_e[(e|=0)>>2])|0,a=0|Ge(0|_e[e+8>>2],_),n=0|Ge(0|_e[e+12>>2],_),i=0|Ge(0|_e[e+16>>2],_);t:do{if(a>>>0<r>>>2>>>0&&(c=r-(a<<2)|0,n>>>0<c>>>0&i>>>0<c>>>0)&&0==(3&(i|n)|0)){for(c=n>>>2,s=i>>>2,l=0;;){if(n=0|Ge(0|_e[e+((i=(o=(f=l+(u=a>>>1)|0)<<1)+c|0)<<2)>>2],_),!((i=0|Ge(0|_e[e+(i+1<<2)>>2],_))>>>0<r>>>0&n>>>0<(r-i|0)>>>0)){n=0;break t}if(0|ce[e+(i+n)>>0]){n=0;break t}if(!(n=0|function(e,r){r|=0;var t=0,n=0;if(t=0|ce[(e|=0)>>0],n=0|ce[r>>0],t<<24>>24==0||t<<24>>24!=n<<24>>24)e=n;else{for(;r=r+1|0,t=0|ce[(e=e+1|0)>>0],n=0|ce[r>>0],t<<24>>24!=0&&t<<24>>24==n<<24>>24;);e=n}return(255&t)-(255&e)|0}(t,e+i|0)))break;if(n=(0|n)<0,1==(0|a)){n=0;break t}l=n?l:f,a=n?u:a-u|0}i=0|Ge(0|_e[e+((n=o+s|0)<<2)>>2],_),n=(n=0|Ge(0|_e[e+(n+1<<2)>>2],_))>>>0<r>>>0&i>>>0<(r-n|0)>>>0&&0==(0|ce[e+(n+i)>>0])?e+n|0:0}else n=0}while(0);return 0|n}(0|_e[r>>2],0|_e[r+4>>2],e):0;return 0|(0|r?r:e)}(e|=0,r|=0)}(t,0|_e[r+20>>2])}(0|_e[(M=296)>>2]|0,0|_e[105])),N=71;break;case 115:M=0|(M=0|_e[c>>2])?M:2080,N=71;break;case 67:_e[_>>2]=_e[c>>2],_e[l>>2]=0,P=-1,M=_e[c>>2]=_,N=75;break;case 83:r=0|_e[c>>2],N=A?(P=A,M=r,75):(se(e,32,T,0,p),r=0,84);break;case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:T=0|D(e,+k[c>>3],T,A,p,M),r=C;continue e;default:b=0,S=2070,P=o,M=A,A=p}}while(0);r:do{if(61==(0|N))P=0|function(e,r,t,n){if(t|=0,n|=0,!(0==(0|(e|=0))&0==(0|(r|=0))))for(;ce[(t=t+-1|0)>>0]=0|de[2122+(15&e)>>0]|n,e=0|ye(0|e,0|r,4),r=L,!(0==(0|e)&0==(0|r)););return 0|t}(h=0|_e[(p=c)>>2],p=0|_e[p+4>>2],o,32&M),b=(S=0==(8&r|0)|0==(0|h)&0==(0|p))?0:2,S=S?2070:2070+(M>>4)|0,R=r,r=h,M=p,N=67;else if(66==(0|N))P=0|fe(r,M,o),R=p,N=67;else if(71==(0|N))S=2070,P=(h=(b=N=0)==(0|(p=0|function(e,r,t){e|=0;var n=0,i=0,a=0,o=0;a=255&(r|=0),n=0!=(0|(t|=0));t:do{if(n&0!=(3&e|0))for(i=255&r;;){if((0|ce[e>>0])==i<<24>>24){o=6;break t}if(!((n=0!=(0|(t=t+-1|0)))&0!=(3&(e=e+1|0)|0))){o=5;break}}else o=5}while(0);5==(0|o)&&(n?o=6:t=0);t:do{if(6==(0|o)&&(i=255&r,(0|ce[e>>0])!=i<<24>>24)){n=0|ie(a,16843009);n:do{if(3<t>>>0){for(;!((-2139062144&(a=_e[e>>2]^n)^-2139062144)&a+-16843009|0);)if(e=e+4|0,(t=t+-4|0)>>>0<=3){o=11;break n}}else o=11}while(0);if(11==(0|o)&&!t){t=0;break}for(;;){if((0|ce[e>>0])==i<<24>>24)break t;if(e=e+1|0,!(t=t+-1|0)){t=0;break}}}}while(0);return 0|(0|t?e:0)}(r=M,0,A))))?M+A|0:p,M=h?A:p-M|0,A=R;else if(75==(0|N)){for(S=M,A=r=N=0;(b=0|_e[S>>2])&&!((0|(A=0|De(d,b)))<0|(P-r|0)>>>0<A>>>0)&&(r=A+r|0)>>>0<P>>>0;)S=S+4|0;if((0|A)<0){E=-1;break e}if(se(e,32,T,r,p),r)for(b=0;;){if(!(A=0|_e[M>>2])){N=84;break r}if((0|r)<(0|(b=(A=0|De(d,A))+b|0))){N=84;break r}if(Ie(e,d,A),r>>>0<=b>>>0){N=84;break}M=M+4|0}else r=0,N=84}}while(0);if(67==(0|N))p=(N=0)!=(0|A)|(M=0!=(0|r)|0!=(0|M)),M=u-P+(1&(1^M))|0,r=p?P:o,P=o,M=!p||(0|M)<(0|A)?A:M,A=-1<(0|A)?-65537&R:R;else if(84==(0|N)){N=0,se(e,32,T,r,8192^p),T=(0|r)<(0|T)?T:r,r=C;continue}se(e,32,T=(0|T)<(0|(p=(R=(0|M)<(0|(h=P-r|0))?h:M)+b|0))?p:T,p,A),Ie(e,S,b),se(e,48,T,p,65536^A),se(e,48,R,h,0),Ie(e,r,h),se(e,32,T,p,8192^A),r=C}else T=0,r=C}}e:do{if(87==(0|N)&&!e)if(m){for(E=1;r=0|_e[i+(E<<2)>>2];)if(H(n+(E<<3)|0,r,t),10<=(0|(E=E+1|0))){E=1;break e}for(;;){if(0|_e[i+(E<<2)>>2]){E=-1;break e}if(10<=(0|(E=E+1|0))){E=1;break}}}else E=0}while(0);return Te=y,0|E}function V(e,r){r|=0;var t,n,i,a,o,u,f,l,s,c,_,d,E,T,A=0,M=0,b=0,m=0,S=0,P=0,R=0,h=0,p=0,C=0,N=Te;if(Te=Te+704|0,E=N+144|0,d=N+128|0,_=N+112|0,c=N+96|0,s=N+80|0,l=N+64|0,f=N+48|0,T=N+32|0,t=N+16|0,i=(P=N)+184|0,C=N+160|0,!(a=0|function(e,r){e|=0;var t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+528|0,a=(o=l)+16|0,!(r|=0))return Te=l,(f=0)|f;if(r>>>0<=16)return f=0|Q(e,r),Te=l,0|f;if(u=0|Q(e,r+-16|0),(0|(r=0|_e[(f=e+20|0)>>2]))<16)for(n=e+4|0,i=e+8|0,t=e+16|0;e=(0|(e=0|_e[n>>2]))==(0|_e[i>>2])?0:(_e[n>>2]=e+1,0|de[e>>0]),r=r+8|0,33<=(0|(_e[f>>2]=r))&&(_e[o>>2]=866,_e[o+4>>2]=3208,_e[o+8>>2]=1366,Ce(a,812,o),Me(a),r=0|_e[f>>2]),e=e<<32-r|_e[t>>2],_e[t>>2]=e,(0|r)<16;);else e=0|_e[(t=e=e+16|0)>>2];return _e[t>>2]=e<<16,_e[f>>2]=r+-16,Te=l,0|(f=e>>>16|u<<16)}(e|=0,14)))return function(e){var r=0,t=0,n=0,i=0,a=0,o=0;Te=(o=Te)+544|0,a=o+16|0,i=(n=o)+32|0,(_e[(e|=0)>>2]=0)|(t=0|_e[(r=e+4|0)>>2])&&(7&t?(_e[n>>2]=866,_e[n+4>>2]=2506,_e[n+8>>2]=1232,Ce(i,812,n),Me(i)):ue(t,0,0,1,0),_e[r>>2]=0,_e[e+8>>2]=0,_e[e+12>>2]=0);if(ce[e+16>>0]=0,!(r=0|_e[(e=e+20|0)>>2]))return Te=o;Z(r),7&r?(_e[a>>2]=866,_e[4+a>>2]=2506,_e[8+a>>2]=1232,Ce(i,812,a),Me(i)):ue(r,0,0,1,0);_e[e>>2]=0,Te=o}(r),Te=N,0|(C=1);if(o=r+4|0,(0|(A=0|_e[(u=r+8|0)>>2]))!=(0|a)){if(A>>>0<=a>>>0){do{if((0|_e[r+12>>2])>>>0<a>>>0){if(0|X(o,a,(A+1|0)==(0|a),1,0)){A=0|_e[u>>2];break}return ce[r+16>>0]=1,Te=N,(C=0)|C}}while(0);ne((0|_e[o>>2])+A|0,0,a-A|0)}_e[u>>2]=a}if(ne(0|_e[o>>2],0,0|a),(0|(A=0|_e[(n=e+20|0)>>2]))<5)for(m=e+4|0,S=e+8|0,b=e+16|0;M=(0|(M=0|_e[m>>2]))==(0|_e[S>>2])?0:(_e[m>>2]=M+1,0|de[M>>0]),A=A+8|0,33<=(0|(_e[n>>2]=A))&&(_e[P>>2]=866,_e[P+4>>2]=3208,_e[P+8>>2]=1366,Ce(i,812,P),Me(i),A=0|_e[n>>2]),M=M<<32-A|_e[b>>2],_e[b>>2]=M,(0|A)<5;);else M=0|_e[(b=M=e+16|0)>>2];if(h=M>>>27,_e[b>>2]=M<<5,_e[n>>2]=A+-5,20<(h+-1|0)>>>0)return Te=N,(C=0)|C;_e[C+20>>2]=0,_e[C>>2]=0,_e[C+4>>2]=0,_e[C+8>>2]=0,_e[C+12>>2]=0,A=C+4|(ce[C+16>>0]=0),M=C+8|0;e:do{if(0|X(A,21,0,1,0)){m=0|_e[M>>2],ne((R=0|_e[A>>2])+m|0,0,21-m|0),_e[M>>2]=21,m=e+4|0,S=e+8|0,P=e+16|0,b=0;do{if((0|(A=0|_e[n>>2]))<3)for(;M=(0|(M=0|_e[m>>2]))==(0|_e[S>>2])?0:(_e[m>>2]=M+1,0|de[M>>0]),A=A+8|0,33<=(0|(_e[n>>2]=A))&&(_e[t>>2]=866,_e[4+t>>2]=3208,_e[8+t>>2]=1366,Ce(i,812,t),Me(i),A=0|_e[n>>2]),M=M<<32-A|_e[P>>2],_e[P>>2]=M,(0|A)<3;);else M=0|_e[P>>2]}while(_e[P>>2]=M<<3,_e[n>>2]=A+-3,ce[R+(0|de[1327+b>>0])>>0]=M>>>29,(0|(b=b+1|0))!=(0|h));if(0|$(C)){P=e+4|0,R=e+8|0,h=e+16|0,A=0;r:do{S=a-A|0,b=0|Ae(e,C);t:do{if(b>>>0<17)(0|_e[u>>2])>>>0<=A>>>0&&(_e[T>>2]=866,_e[4+T>>2]=910,_e[8+T>>2]=1497,Ce(i,812,T),Me(i)),ce[(0|_e[o>>2])+A>>0]=b,A=A+1|0;else switch(0|b){case 17:if((0|(M=0|_e[n>>2]))<3)for(;b=(0|(b=0|_e[P>>2]))==(0|_e[R>>2])?0:(_e[P>>2]=b+1,0|de[b>>0]),M=M+8|0,33<=(0|(_e[n>>2]=M))&&(_e[f>>2]=866,_e[4+f>>2]=3208,_e[8+f>>2]=1366,Ce(i,812,f),Me(i),M=0|_e[n>>2]),b=b<<32-M|_e[h>>2],_e[h>>2]=b,(0|M)<3;);else b=0|_e[h>>2];if(_e[h>>2]=b<<3,_e[n>>2]=M+-3,M=S>>>0<(b=3+(b>>>29)|0)>>>0){A=0;break e}A=(M?0:b)+A|0;break t;case 18:if((0|(M=0|_e[n>>2]))<7)for(;b=(0|(b=0|_e[P>>2]))==(0|_e[R>>2])?0:(_e[P>>2]=b+1,0|de[b>>0]),M=M+8|0,33<=(0|(_e[n>>2]=M))&&(_e[l>>2]=866,_e[4+l>>2]=3208,_e[8+l>>2]=1366,Ce(i,812,l),Me(i),M=0|_e[n>>2]),b=b<<32-M|_e[h>>2],_e[h>>2]=b,(0|M)<7;);else b=0|_e[h>>2];if(_e[h>>2]=b<<7,_e[n>>2]=M+-7,M=S>>>0<(b=11+(b>>>25)|0)>>>0){A=0;break e}A=(M?0:b)+A|0;break t;default:if(2<=(b+-19|0)>>>0){p=81;break r}if(M=0|_e[n>>2],19==(0|b)){if((0|M)<2)for(b=M;m=(0|(M=0|_e[P>>2]))==(0|_e[R>>2])?0:(_e[P>>2]=M+1,0|de[M>>0]),M=b+8|0,33<=(0|(_e[n>>2]=M))&&(_e[s>>2]=866,_e[4+s>>2]=3208,_e[8+s>>2]=1366,Ce(i,812,s),Me(i),M=0|_e[n>>2]),b=m<<32-M|_e[h>>2],_e[h>>2]=b,(0|M)<2;)b=M;else b=0|_e[h>>2];_e[h>>2]=b<<2,b>>>=30,m=3,M=M+-2|0}else{if((0|M)<6)for(;b=(0|(b=0|_e[P>>2]))==(0|_e[R>>2])?0:(_e[P>>2]=b+1,0|de[b>>0]),M=M+8|0,33<=(0|(_e[n>>2]=M))&&(_e[c>>2]=866,_e[4+c>>2]=3208,_e[8+c>>2]=1366,Ce(i,812,c),Me(i),M=0|_e[n>>2]),b=b<<32-M|_e[h>>2],_e[h>>2]=b,(0|M)<6;);else b=0|_e[h>>2];_e[h>>2]=b<<6,b>>>=26,m=7,M=M+-6|0}if(_e[n>>2]=M,0==(0|A)|S>>>0<(b=b+m|0)>>>0){A=0;break e}if(M=A+-1|0,(0|_e[u>>2])>>>0<=M>>>0&&(_e[_>>2]=866,_e[4+_>>2]=910,_e[8+_>>2]=1497,Ce(i,812,_),Me(i)),!((m=0|ce[(0|_e[o>>2])+M>>0])<<24>>24)){A=0;break e}if((M=b+A|0)>>>0<=A>>>0)break t;for(;(0|_e[u>>2])>>>0<=A>>>0&&(_e[d>>2]=866,_e[4+d>>2]=910,_e[8+d>>2]=1497,Ce(i,812,d),Me(i)),ce[(0|_e[o>>2])+A>>0]=m,A=A+1|0,(0|A)!=(0|M););A=M}}while(0)}while(A>>>0<a>>>0);if(81==(0|p)){_e[E>>2]=866,_e[4+E>>2]=3149,_e[8+E>>2]=1348,Ce(i,812,E),Me(i),A=0;break}A=(0|a)==(0|A)?0|$(r):0}else A=0}else ce[C+16>>0]=1,A=0}while(0);return re(C),Te=N,0|(C=A)}function G(e,r,t,n){e|=0,t|=0;var i,a,o,u,f,l,s,c,_=0,d=0,E=0,T=0,A=0,M=0,b=0,m=0,S=0,P=0,R=0,h=0,p=0,C=0,N=0,y=0,O=0,v=0,k=0,g=Te;if(Te=Te+880|0,v=g+144|0,c=g+128|0,s=g+112|0,l=g+96|0,y=g+80|0,C=g+64|0,h=g+48|0,p=g+32|0,m=g+16|0,u=(b=g)+360|0,f=g+296|0,k=g+224|0,R=g+156|0,0==(0|(r|=0))|11<(n|=0)>>>0)return Te=g,(k=0)|k;for(_e[e>>2]=r,_=k,d=_+68|0;_=_+4|(_e[_>>2]=0),(0|_)<(0|d););for(_=0;d=k+((255&(O=0|ce[t+_>>0]))<<2)|0,O<<24>>24&&(_e[d>>2]=1+(0|_e[d>>2])),_=_+1|0,(0|_)!=(0|r););for(T=E=d=0,A=-1,M=1;(_=0|_e[k+(M<<2)>>2])?(d=_+(_e[f+((S=M+-1|0)<<2)>>2]=d)|0,O=16-M|0,_e[e+28+(S<<2)>>2]=1+(d+-1<<O|(1<<O)-1),_e[e+96+(S<<2)>>2]=E,S=_+(_e[R+(M<<2)>>2]=E)|0,T=M>>>0<T>>>0?T:M,A=A>>>0<M>>>0?A:M):(_e[e+28+(M+-1<<2)>>2]=0,S=E),17!=(0|(M=M+1|0));)d<<=1,E=S;_e[e+4>>2]=S,d=e+172|0;do{if(S>>>0>(0|_e[d>>2])>>>0){_=(_=S+-1|0)&S?(_|=_>>>16,_|=_>>>8,_|=_>>>4,r>>>0<(_=1+((_|=_>>>2)>>>1|_)|0)>>>0?r:_):S,_e[d>>2]=_,_=0|_e[(E=e+176|0)>>2];do{if(0|_){if(O=0|_e[_+-4>>2],_=_+-8|0,0!=(0|O)&&(0|O)==(0|~_e[_>>2])||(_e[b>>2]=866,_e[b+4>>2]=651,_e[b+8>>2]=1579,Ce(u,812,b),Me(u)),7&_){_e[m>>2]=866,_e[m+4>>2]=2506,_e[m+8>>2]=1232,Ce(u,812,m),Me(u);break}ue(_,0,0,1,0);break}}while(0);if(d=0|te(8+((_=0|(_=0|_e[d>>2])?_:1)<<1)|0,0)){_e[d+4>>2]=_,_e[d>>2]=~_,_e[E>>2]=d+8,P=24;break}n=_e[E>>2]=0;break}}while(P=24,0);e:do{if(24==(0|P)){for(O=e+24|0,ce[O>>0]=A,ce[e+25>>0]=T,E=e+176|0,d=0;_=255&(N=0|ce[t+d>>0]),N<<24>>24&&(0|_e[k+(_<<2)>>2]||(_e[p>>2]=866,_e[p+4>>2]=2276,_e[p+8>>2]=977,Ce(u,812,p),Me(u)),_=0|_e[(N=R+(_<<2)|0)>>2],_e[N>>2]=_+1,S>>>0<=_>>>0&&(_e[h>>2]=866,_e[h+4>>2]=2280,_e[h+8>>2]=990,Ce(u,812,h),Me(u)),W[(0|_e[E>>2])+(_<<1)>>1]=d),d=d+1|0,(0|d)!=(0|r););if(o=(0|de[O>>0])>>>0<n>>>0?n:0,a=0!=(0|(_e[(N=e+8|0)>>2]=o))){i=1<<o,_=e+164|0;do{if(i>>>0>(0|_e[_>>2])>>>0){_e[_>>2]=i,_=0|_e[(E=e+168|0)>>2];do{if(0|_){if(p=0|_e[_+-4>>2],_=_+-8|0,0!=(0|p)&&(0|p)==(0|~_e[_>>2])||(_e[C>>2]=866,_e[C+4>>2]=651,_e[C+8>>2]=1579,Ce(u,812,C),Me(u)),7&_){_e[y>>2]=866,_e[y+4>>2]=2506,_e[y+8>>2]=1232,Ce(u,812,y),Me(u);break}ue(_,0,0,1,0);break}}while(0);if(d=0|te((_=i<<2)+8|0,0)){y=d+8|0,_e[d+4>>2]=i,_e[d>>2]=~i,d=_e[E>>2]=y;break}n=_e[E>>2]=0;break e}}while(_=i<<2,d=0|_e[(E=d=e+168|0)>>2],0);ne(0|d,-1,0|_),h=e+176|0,R=1;do{if(0|_e[k+(R<<2)>>2]&&(C=1<<(p=o-R|0),d=0|_e[f+((_=R+-1|0)<<2)>>2],16<=_>>>0&&(_e[l>>2]=866,_e[4+l>>2]=1960,_e[8+l>>2]=1453,Ce(u,812,l),Me(u)),d>>>0<=(r=0==(0|(r=0|_e[e+28+(_<<2)>>2]))?-1:(r+-1|0)>>>(16-R|0))>>>0)){S=(0|_e[e+96+(_<<2)>>2])-d|0,P=R<<16;do{for(_=0|Ee[(0|_e[h>>2])+(S+d<<1)>>1],(0|de[t+_>>0])!=(0|R)&&(_e[s>>2]=866,_e[4+s>>2]=2322,_e[8+s>>2]=1019,Ce(u,812,s),Me(u)),m=d<<p,M=_|P,A=0;i>>>0<=(b=A+m|0)>>>0&&(_e[c>>2]=866,_e[4+c>>2]=2328,_e[8+c>>2]=1053,Ce(u,812,c),Me(u)),_=0|_e[E>>2],-1!=(0|_e[_+(b<<2)>>2])&&(_e[v>>2]=866,_e[v+4>>2]=2330,_e[v+8>>2]=1076,Ce(u,812,v),Me(u),_=0|_e[E>>2]),_e[_+(b<<2)>>2]=M,A=A+1|0,A>>>0<C>>>0;);}while((d=d+1|0)>>>0<=r>>>0)}}while((R=R+1|0)>>>0<=o>>>0)}_e[(_=e+96|0)>>2]=(0|_e[_>>2])-(0|_e[f>>2]),_e[(_=e+100|0)>>2]=(0|_e[_>>2])-(0|_e[4+f>>2]),_e[(_=e+104|0)>>2]=(0|_e[_>>2])-(0|_e[8+f>>2]),_e[(_=e+108|0)>>2]=(0|_e[_>>2])-(0|_e[12+f>>2]),_e[(_=e+112|0)>>2]=(0|_e[_>>2])-(0|_e[16+f>>2]),_e[(_=e+116|0)>>2]=(0|_e[_>>2])-(0|_e[20+f>>2]),_e[(_=e+120|0)>>2]=(0|_e[_>>2])-(0|_e[24+f>>2]),_e[(_=e+124|0)>>2]=(0|_e[_>>2])-(0|_e[28+f>>2]),_e[(_=e+128|0)>>2]=(0|_e[_>>2])-(0|_e[32+f>>2]),_e[(_=e+132|0)>>2]=(0|_e[_>>2])-(0|_e[36+f>>2]),_e[(_=e+136|0)>>2]=(0|_e[_>>2])-(0|_e[40+f>>2]),_e[(_=e+140|0)>>2]=(0|_e[_>>2])-(0|_e[44+f>>2]),_e[(_=e+144|0)>>2]=(0|_e[_>>2])-(0|_e[48+f>>2]),_e[(_=e+148|0)>>2]=(0|_e[_>>2])-(0|_e[52+f>>2]),_e[(_=e+152|0)>>2]=(0|_e[_>>2])-(0|_e[56+f>>2]),_e[(_=e+156|0)>>2]=(0|_e[_>>2])-(0|_e[60+f>>2]),_e[(_=e+16|0)>>2]=0,_e[(d=e+20|0)>>2]=de[O>>0];r:do{if(a){do{if(!n)break r}while(n=(v=n)+-1|0,!(0|_e[k+(v<<2)>>2]));if(_e[_>>2]=_e[e+28+(n<<2)>>2],n=o+1|0,(_e[d>>2]=n)>>>0<=T>>>0){for(;!(0|_e[k+(n<<2)>>2]);)if(T>>>0<(n=n+1|0)>>>0)break r;_e[d>>2]=n}}}while(0);_e[e+92>>2]=-1,_e[e+160>>2]=1048575,_e[e+12>>2]=32-(0|_e[N>>2]),n=1}}while(0);return Te=g,0|(k=n)}function F(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0;if(e|=0){t=e+-8|0,i=0|_e[1148],f=t+(r=-8&(e=0|_e[e+-4>>2]))|0;do{if(1&e)o=u=t;else{if(n=0|_e[t>>2],!(3&e))return;if(a=n+r|0,(o=t+(0-n)|0)>>>0<i>>>0)return;if((0|o)==(0|_e[1149])){if(3==(3&(r=0|_e[(e=f+4|0)>>2])|0))return _e[1146]=a,_e[e>>2]=-2&r,_e[o+4>>2]=1|a,void(_e[o+a>>2]=a);u=o,r=a;break}if(t=n>>>3,n>>>0<256){if(e=0|_e[o+8>>2],(0|(r=0|_e[o+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<<t),u=o,r=a;break}_e[e+12>>2]=r,_e[r+8>>2]=e,u=o,r=a;break}i=0|_e[o+24>>2],e=0|_e[o+12>>2];do{if((0|e)==(0|o)){if(!(e=0|_e[(r=(t=o+16|0)+4|0)>>2])){if(!(e=0|_e[t>>2])){e=0;break}r=t}for(;;)if(0|(n=0|_e[(t=e+20|0)>>2]))e=n,r=t;else{if(!(n=0|_e[(t=e+16|0)>>2]))break;e=n,r=t}_e[r>>2]=0}else u=0|_e[o+8>>2],_e[u+12>>2]=e,_e[e+8>>2]=u}while(0);if(i){if(r=0|_e[o+28>>2],(0|o)==(0|_e[(t=4880+(r<<2)|0)>>2])){if(!(_e[t>>2]=e)){_e[1145]=_e[1145]&~(1<<r),u=o,r=a;break}}else if(!(_e[i+16+(((0|_e[i+16>>2])!=(0|o)&1)<<2)>>2]=e)){u=o,r=a;break}_e[e+24>>2]=i,0|(t=0|_e[(r=o+16|0)>>2])&&(_e[e+16>>2]=t,_e[t+24>>2]=e),r=(u=((r=0|_e[r+4>>2])&&(_e[e+20>>2]=r,_e[r+24>>2]=e),o),a)}else u=o,r=a}}while(0);if(!(f>>>0<=o>>>0)&&1&(n=0|_e[(e=f+4|0)>>2])){if(2&n)_e[e>>2]=-2&n,_e[u+4>>2]=1|r,i=_e[o+r>>2]=r;else{if(e=0|_e[1149],(0|f)==(0|_e[1150]))return f=(0|_e[1147])+r|0,_e[1147]=f,_e[1150]=u,_e[u+4>>2]=1|f,(0|u)!=(0|e)?void 0:(_e[1149]=0,void(_e[1146]=0));if((0|f)==(0|e))return f=(0|_e[1146])+r|0,_e[1146]=f,_e[1149]=o,_e[u+4>>2]=1|f,void(_e[o+f>>2]=f);i=(-8&n)+r|0,t=n>>>3;do{if(n>>>0<256){if(r=0|_e[f+8>>2],(0|(e=0|_e[f+12>>2]))==(0|r)){_e[1144]=_e[1144]&~(1<<t);break}_e[r+12>>2]=e,_e[e+8>>2]=r;break}a=0|_e[f+24>>2],e=0|_e[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|_e[(r=(t=f+16|0)+4|0)>>2])){if(!(e=0|_e[t>>2])){t=0;break}r=t}for(;;)if(0|(n=0|_e[(t=e+20|0)>>2]))e=n,r=t;else{if(!(n=0|_e[(t=e+16|0)>>2]))break;e=n,r=t}_e[r>>2]=0,t=e}else t=0|_e[f+8>>2],_e[t+12>>2]=e,_e[e+8>>2]=t,t=e}while(0);if(0|a){if(e=0|_e[f+28>>2],(0|f)==(0|_e[(r=4880+(e<<2)|0)>>2])){if(!(_e[r>>2]=t)){_e[1145]=_e[1145]&~(1<<e);break}}else if(!(_e[a+16+(((0|_e[a+16>>2])!=(0|f)&1)<<2)>>2]=t))break;_e[t+24>>2]=a,0|(r=0|_e[(e=f+16|0)>>2])&&(_e[t+16>>2]=r,_e[r+24>>2]=t),0|(e=0|_e[e+4>>2])&&(_e[t+20>>2]=e,_e[e+24>>2]=t)}}while(0);if(_e[u+4>>2]=1|i,_e[o+i>>2]=i,(0|u)==(0|_e[1149]))return void(_e[1146]=i)}if(e=i>>>3,i>>>0<256)return t=4616+(e<<1<<2)|0,(r=0|_e[1144])&(e=1<<e)?e=0|_e[(r=t+8|0)>>2]:(_e[1144]=r|e,r=(e=t)+8|0),_e[r>>2]=u,_e[e+12>>2]=u,_e[u+8>>2]=e,void(_e[u+12>>2]=t);n=4880+((e=(e=i>>>8)?16777215<i>>>0?31:i>>>((e=14-((a=((f=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(e=((f<<=a)+245760|0)>>>16&2))+(f<<e>>>15)|0)+7|0)&1|e<<1:0)<<2)|0,_e[u+28>>2]=e,_e[u+20>>2]=0,r=(_e[u+16>>2]=0)|_e[1145],t=1<<e;do{if(r&t){for(r=i<<(31==(0|e)?0:25-(e>>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|i)){e=73;break}if(!(e=0|_e[(n=t+16+(r>>>31<<2)|0)>>2])){e=72;break}r<<=1,t=e}if(72==(0|e)){_e[n>>2]=u,_e[u+24>>2]=t,_e[u+12>>2]=u,_e[u+8>>2]=u;break}if(73==(0|e)){f=0|_e[(o=t+8|0)>>2],_e[f+12>>2]=u,_e[o>>2]=u,_e[u+8>>2]=f,_e[u+12>>2]=t,_e[u+24>>2]=0;break}}else _e[1145]=r|t,_e[n>>2]=u,_e[u+24>>2]=n,_e[u+12>>2]=u,_e[u+8>>2]=u}while(0);if(f=(0|_e[1152])-1|0,!(_e[1152]=f)){for(e=5032;e=0|_e[e>>2];)e=e+8|0;_e[1152]=-1}}}}function x(e,r){var t=0,n=0,i=0,a=0,o=0,u=0,f=0,f=(e|=0)+(r|=0)|0,t=0|_e[e+4>>2];do{if(1&t)u=e,t=r;else{if(n=0|_e[e>>2],!(3&t))return;if(o=n+r|0,(0|(a=e+(0-n)|0))==(0|_e[1149])){if(3==(3&(t=0|_e[(e=f+4|0)>>2])|0))return _e[1146]=o,_e[e>>2]=-2&t,_e[a+4>>2]=1|o,void(_e[a+o>>2]=o);u=a,t=o;break}if(r=n>>>3,n>>>0<256){if(e=0|_e[a+8>>2],(0|(t=0|_e[a+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<<r),u=a,t=o;break}_e[e+12>>2]=t,_e[t+8>>2]=e,u=a,t=o;break}i=0|_e[a+24>>2],e=0|_e[a+12>>2];do{if((0|e)==(0|a)){if(!(e=0|_e[(t=(r=a+16|0)+4|0)>>2])){if(!(e=0|_e[r>>2])){e=0;break}t=r}for(;;)if(0|(n=0|_e[(r=e+20|0)>>2]))e=n,t=r;else{if(!(n=0|_e[(r=e+16|0)>>2]))break;e=n,t=r}_e[t>>2]=0}else u=0|_e[a+8>>2],_e[u+12>>2]=e,_e[e+8>>2]=u}while(0);if(i){if(t=0|_e[a+28>>2],(0|a)==(0|_e[(r=4880+(t<<2)|0)>>2])){if(!(_e[r>>2]=e)){_e[1145]=_e[1145]&~(1<<t),u=a,t=o;break}}else if(!(_e[i+16+(((0|_e[i+16>>2])!=(0|a)&1)<<2)>>2]=e)){u=a,t=o;break}_e[e+24>>2]=i,0|(r=0|_e[(t=a+16|0)>>2])&&(_e[e+16>>2]=r,_e[r+24>>2]=e),t=(u=((t=0|_e[t+4>>2])&&(_e[e+20>>2]=t,_e[t+24>>2]=e),a),o)}else u=a,t=o}}while(0);if(2&(n=0|_e[(e=f+4|0)>>2]))_e[e>>2]=-2&n,_e[u+4>>2]=1|t,_e[u+t>>2]=t;else{if(e=0|_e[1149],(0|f)==(0|_e[1150]))return f=(0|_e[1147])+t|0,_e[1147]=f,_e[1150]=u,_e[u+4>>2]=1|f,(0|u)==(0|e)&&(_e[1149]=0,void(_e[1146]=0));if((0|f)==(0|e))return f=(0|_e[1146])+t|0,_e[1146]=f,_e[1149]=u,_e[u+4>>2]=1|f,void(_e[u+f>>2]=f);a=(-8&n)+t|0,r=n>>>3;do{if(n>>>0<256){if(t=0|_e[f+8>>2],(0|(e=0|_e[f+12>>2]))==(0|t)){_e[1144]=_e[1144]&~(1<<r);break}_e[t+12>>2]=e,_e[e+8>>2]=t;break}i=0|_e[f+24>>2],e=0|_e[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|_e[(t=(r=f+16|0)+4|0)>>2])){if(!(e=0|_e[r>>2])){r=0;break}t=r}for(;;)if(0|(n=0|_e[(r=e+20|0)>>2]))e=n,t=r;else{if(!(n=0|_e[(r=e+16|0)>>2]))break;e=n,t=r}_e[t>>2]=0,r=e}else r=0|_e[f+8>>2],_e[r+12>>2]=e,_e[e+8>>2]=r,r=e}while(0);if(0|i){if(e=0|_e[f+28>>2],(0|f)==(0|_e[(t=4880+(e<<2)|0)>>2])){if(!(_e[t>>2]=r)){_e[1145]=_e[1145]&~(1<<e);break}}else if(!(_e[i+16+(((0|_e[i+16>>2])!=(0|f)&1)<<2)>>2]=r))break;_e[r+24>>2]=i,0|(t=0|_e[(e=f+16|0)>>2])&&(_e[r+16>>2]=t,_e[t+24>>2]=r),0|(e=0|_e[e+4>>2])&&(_e[r+20>>2]=e,_e[e+24>>2]=r)}}while(0);if(_e[u+4>>2]=1|a,_e[u+a>>2]=a,(0|u)==(0|_e[1149]))return void(_e[1146]=a);t=a}if(e=t>>>3,t>>>0<256)return r=4616+(e<<1<<2)|0,(t=0|_e[1144])&(e=1<<e)?e=0|_e[(t=r+8|0)>>2]:(_e[1144]=t|e,t=(e=r)+8|0),_e[t>>2]=u,_e[e+12>>2]=u,_e[u+8>>2]=e,void(_e[u+12>>2]=r);if(i=4880+((e=(e=t>>>8)?16777215<t>>>0?31:t>>>((e=14-((a=((f=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(e=((f<<=a)+245760|0)>>>16&2))+(f<<e>>>15)|0)+7|0)&1|e<<1:0)<<2)|0,_e[u+28>>2]=e,_e[u+20>>2]=0,!((r=(_e[u+16>>2]=0)|_e[1145])&(n=1<<e)))return _e[1145]=r|n,_e[i>>2]=u,_e[u+24>>2]=i,_e[u+12>>2]=u,void(_e[u+8>>2]=u);for(r=t<<(31==(0|e)?0:25-(e>>>1)|0),n=0|_e[i>>2];;){if((-8&_e[n+4>>2]|0)==(0|t)){e=69;break}if(!(e=0|_e[(i=n+16+(r>>>31<<2)|0)>>2])){e=68;break}r<<=1,n=e}68==(0|e)?(_e[i>>2]=u,_e[u+24>>2]=n,_e[u+12>>2]=u,_e[u+8>>2]=u):69==(0|e)&&(f=0|_e[(o=n+8|0)>>2],_e[f+12>>2]=u,_e[o>>2]=u,_e[u+8>>2]=f,_e[u+12>>2]=n,_e[u+24>>2]=0)}function B(e,r,t,n,i){i|=0;var a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,s=e|=0,o=t|=0,u=_=n|=0;if(!(l=f=r|=0))return a=0!=(0|i),u?(a&&(_e[i>>2]=0|e,_e[i+4>>2]=0&r),(i=_=0)|(L=_,i)):(a&&(_e[i>>2]=(s>>>0)%(o>>>0),_e[i+4>>2]=0),(_=0)|(L=_,i=(s>>>0)/(o>>>0)>>>0));a=0==(0|u);do{if(o){if(!a){if((a=(0|T(0|u))-(0|T(0|l))|0)>>>0<=31){e=s>>>((o=c=a+1|0)>>>0)&(r=a-31>>31)|l<<(u=31-a|0),r&=l>>>(c>>>0),a=0,u=s<<u;break}return i?(_e[i>>2]=0|e,_e[i+4>>2]=f|0&r,(i=_=0)|(L=_,i)):(i=_=0)|(L=_,i)}if((a=o-1|0)&o|0){e=(c=32-(u=33+(0|T(0|o))-(0|T(0|l))|0)|0)-1>>31&l>>>((d=u-32|0)>>>0)|(l<<c|s>>>((o=u)>>>0))&(r=d>>31),r&=l>>>(u>>>0),a=s<<(E=64-u|0)&(f=c>>31),u=(l<<E|s>>>(d>>>0))&f|s<<c&u-33>>31;break}return 0|i&&(_e[i>>2]=a&s,_e[i+4>>2]=0),1==(0|o)?0|(L=d=f|0&r,E=0|e):(E=0|Pe(0|o),0|(L=d=l>>>(E>>>0)|0,E=l<<32-E|s>>>(E>>>0)|0))}if(a)return 0|i&&(_e[i>>2]=(l>>>0)%(o>>>0),_e[i+4>>2]=0),(d=0)|(L=d,E=(l>>>0)/(o>>>0)>>>0);if(!s)return 0|i&&(_e[i>>2]=0,_e[i+4>>2]=(l>>>0)%(u>>>0)),(d=0)|(L=d,E=(l>>>0)/(u>>>0)>>>0);if(!((a=u-1|0)&u))return 0|i&&(_e[i>>2]=0|e,_e[i+4>>2]=a&l|0&r),E=l>>>(((d=0)|Pe(0|u))>>>0),0|(L=d,E);if((a=(0|T(0|u))-(0|T(0|l))|0)>>>0<=30){e=l<<(u=31-a|0)|s>>>((o=r=a+1|0)>>>0),r=l>>>(r>>>0),a=0,u=s<<u;break}return i&&(_e[i>>2]=0|e,_e[i+4>>2]=f|0&r),(E=d=0)|(L=d,E)}while(0);if(o){for(c=0|t,s=_|0&n,l=0|ge(0|c,0|s,-1,-1),t=L,f=u,u=0;f=a>>>31|(n=f)<<1,a=u|a<<1,ve(0|l,0|t,0|(n=e<<1|n>>>31|0),0|(_=e>>>31|r<<1|0)),u=1&(d=(E=L)>>31|((0|E)<0?-1:0)<<1),e=0|ve(0|n,0|_,d&c|0,(((0|E)<0?-1:0)>>31|((0|E)<0?-1:0)<<1)&s|0),r=L,o=o-1|0,0!=(0|o););l=f,f=0}else l=u,u=f=0;return(o=0)|i&&(_e[i>>2]=e,_e[i+4>>2]=r),0|(L=d=(0|a)>>>31|(l|o)<<1|0&(o<<1|a>>>31)|f,E=-2&(a<<1|0)|u)}function Ae(e,r){e|=0;var t,n,i,a,o,u,f,l=0,s=0,c=0,_=0,d=0,E=0,T=Te;Te=Te+576|0,i=T+48|0,o=T+32|0,a=T+16|0,f=(n=T)+64|0,u=0|_e[(r|=0)+20>>2],(0|(t=0|_e[(E=e+20|0)>>2]))<24?(s=(l=0|_e[(d=e+4|0)>>2])>>>0<(c=0|_e[e+8>>2])>>>0,(0|t)<16?(s?(_=(0|de[l>>0])<<8,l=l+1|0):_=0,l>>>0<c>>>0?(c=0|de[l>>0],l=l+1|0):c=0,_e[d>>2]=l,_e[E>>2]=16+t,s=16,l=c|_):(l=s?(_e[d>>2]=l+1,0|de[l>>0]):0,_e[E>>2]=8+t,s=24),c=_e[(d=e+16|0)>>2]|l<<s-t,_e[d>>2]=c):c=0|_e[(d=c=e+16|0)>>2],_=1+(c>>>16)|0;do{if(!(_>>>0<=(0|_e[16+u>>2])>>>0)){for(s=0|_e[20+u>>2];_>>>0>(0|_e[28+u+((l=s+-1|0)<<2)>>2])>>>0;)s=s+1|0;if((l=(c>>>(32-s|0))+(0|_e[96+u+(l<<2)>>2])|0)>>>0<(0|_e[r>>2])>>>0){l=0|Ee[(0|_e[176+u>>2])+(l<<1)>>1];break}return _e[i>>2]=866,_e[4+i>>2]=3275,_e[8+i>>2]=1348,Ce(f,812,i),Me(f),Te=T,(E=0)|E}}while(-1==(0|(s=0|_e[(0|_e[168+u>>2])+(c>>>(32-(0|_e[8+u>>2])|0)<<2)>>2]))&&(_e[n>>2]=866,_e[n+4>>2]=3253,_e[n+8>>2]=1393,Ce(f,812,n),Me(f)),l=65535&s,s>>>=16,(0|_e[r+8>>2])>>>0<=l>>>0&&(_e[a>>2]=866,_e[4+a>>2]=909,_e[8+a>>2]=1497,Ce(f,812,a),Me(f)),(0|de[(0|_e[r+4>>2])+l>>0])!=(0|s)&&(_e[o>>2]=866,_e[4+o>>2]=3257,_e[8+o>>2]=1410,Ce(f,812,o),Me(f)),0);return _e[d>>2]=_e[d>>2]<<s,_e[E>>2]=(0|_e[E>>2])-s,Te=T,0|(E=l)}function U(e){var r,t,n,i,a=0,o=0,u=0,f=Te;if(Te=Te+576|0,u=f+48|0,n=f+32|0,t=f+16|0,i=(r=f)+64|0,(_e[(e|=0)>>2]=0)|(o=0|_e[(a=e+284|0)>>2])&&(7&o?(_e[r>>2]=866,_e[r+4>>2]=2506,_e[r+8>>2]=1232,Ce(i,812,r),Me(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+288>>2]=0,_e[e+292>>2]=0),(ce[e+296>>0]=0)|(o=0|_e[(a=e+268|0)>>2])&&(7&o?(_e[t>>2]=866,_e[4+t>>2]=2506,_e[8+t>>2]=1232,Ce(i,812,t),Me(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+272>>2]=0,_e[e+276>>2]=0),(ce[e+280>>0]=0)|(o=0|_e[(a=e+252|0)>>2])&&(7&o?(_e[n>>2]=866,_e[4+n>>2]=2506,_e[8+n>>2]=1232,Ce(i,812,n),Me(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+256>>2]=0,_e[e+260>>2]=0),!(o=(ce[e+264>>0]=0)|_e[(a=e+236|0)>>2]))return re(u=e+212|(ce[(u=e+248|0)>>0]=0)),re(u=e+188|0),re(u=e+164|0),re(u=e+140|0),re(u=e+116|0),void(Te=f);7&o?(_e[u>>2]=866,_e[u+4>>2]=2506,_e[u+8>>2]=1232,Ce(i,812,u),Me(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+240>>2]=0,_e[e+244>>2]=0,re(u=e+212|(ce[(u=e+248|0)>>0]=0)),re(u=e+188|0),re(u=e+164|0),re(u=e+140|0),re(u=e+116|0),Te=f}function H(e,r,t){e|=0,r|=0,t|=0;var n=0,i=0,a=0;e:do{if(r>>>0<=20){switch(0|r){case 9:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[e>>2]=r;break e;case 10:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[(n=e)>>2]=r,_e[n+4>>2]=((0|r)<0)<<31>>31;break e;case 11:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[(n=e)>>2]=r,_e[n+4>>2]=0;break e;case 12:n=7+(0|_e[t>>2])&-8,i=0|_e[(r=n)>>2],r=0|_e[r+4>>2],_e[t>>2]=n+8,_e[(n=e)>>2]=i,_e[n+4>>2]=r;break e;case 13:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,n=(65535&n)<<16>>16,_e[(i=e)>>2]=n,_e[i+4>>2]=((0|n)<0)<<31>>31;break e;case 14:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,_e[(i=e)>>2]=65535&n,_e[i+4>>2]=0;break e;case 15:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,n=(255&n)<<24>>24,_e[(i=e)>>2]=n,_e[i+4>>2]=((0|n)<0)<<31>>31;break e;case 16:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,_e[(i=e)>>2]=255&n,_e[i+4>>2]=0;break e;case 17:case 18:i=7+(0|_e[t>>2])&-8,a=+k[i>>3],_e[t>>2]=i+8,k[e>>3]=a;break e;default:break e}}}while(0)}function X(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0;var a,o,u,f,l,s=0,c=0,_=0,d=0,E=Te;if(Te=Te+576|0,f=E+48|0,a=E+32|0,c=E+16|0,u=(s=E)+64|0,l=E+60|0,d=(e|=0)+8|0,(0|_e[(o=e+4|0)>>2])>>>0>(0|_e[d>>2])>>>0&&(_e[s>>2]=866,_e[s+4>>2]=2123,_e[s+8>>2]=845,Ce(u,812,s),Me(u)),(2147418112/(n>>>0)|0)>>>0<=r>>>0&&(_e[c>>2]=866,_e[c+4>>2]=2124,_e[c+8>>2]=885,Ce(u,812,c),Me(u)),r>>>0<=(s=0|_e[d>>2])>>>0)return Te=E,0|(d=1);if(10==(0|(t=9==(0|(t=t&&0!=((_=r+-1|0)&r|0)?(r=_>>>16|_,r|=r>>>8,r|=r>>>4,(r=1+((r|=r>>>2)>>>1|r)|0)?9:(r=0,10)):9))&&r>>>0<=s>>>0?10:t))&&(_e[a>>2]=866,_e[4+a>>2]=2133,_e[8+a>>2]=933,Ce(u,812,a),Me(u)),_=0|ie(r,n),i)if(c=0|te(_,l)){Ze[0&i](c,0|_e[e>>2],0|_e[o>>2]),s=0|_e[e>>2];do{if(0|s){if(7&s){_e[f>>2]=866,_e[4+f>>2]=2506,_e[8+f>>2]=1232,Ce(u,812,f),Me(u);break}ue(s,0,0,1,0);break}}while(0);_e[e>>2]=c,t=20}else r=0;else(s=0|function(e,r,t,n){r|=0,t|=0,n|=0;var i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+560|0,f=l+32|0,a=l+16|0,o=(i=l)+48|0,u=l+44|0,7&(e|=0)|0)return _e[i>>2]=866,_e[i+4>>2]=2506,_e[i+8>>2]=1210,Ce(o,812,i),Me(o),Te=l,(f=0)|f;if(2147418112<r>>>0)return _e[a>>2]=866,_e[4+a>>2]=2506,_e[8+a>>2]=1103,Ce(o,812,a),Me(o),Te=l,(f=0)|f;_e[u>>2]=r,e=0|ue(e,r,u,n,0),0|t&&(_e[t>>2]=_e[u>>2]);7&e|0&&(_e[f>>2]=866,_e[f+4>>2]=2558,_e[f+8>>2]=1156,Ce(o,812,f),Me(o));return Te=l,0|(f=e)}(0|_e[e>>2],_,l,1))?(_e[e>>2]=s,t=20):r=0;return 20==(0|t)&&(_>>>0<(s=0|_e[l>>2])>>>0&&(r=(s>>>0)/(n>>>0)|0),_e[d>>2]=r,r=1),Te=E,0|(d=r)}function Y(e,r,t,n,i,a,o){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0;var u,f=0,l=0,s=0|_e[(e|=0)+88>>2];if(f=((1<(f=(de[12+s>>0]<<8|de[13+s>>0])>>>o)>>>0?f:1)+3|0)>>>2,l=((1<(l=(de[14+s>>0]<<8|de[15+s>>0])>>>o)>>>0?l:1)+3|0)>>>2,o=0|ce[(s=18+s|0)>>0],o=0|ie(f,o<<24>>24==0|o<<24>>24==9?8:16),a){if(!(0==(3&a|0)&o>>>0<=a>>>0))return(i=0)|i;o=a}if((0|ie(o,l))>>>0>i>>>0)return(i=0)|i;if(a=(f+1|0)>>>1,u=(l+1|0)>>>1,!t)return(i=0)|i;switch(_e[e+92>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,(_e[e+112>>2]=0)|ce[s>>0]){case 0:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,M,b,m,S,P,R,h,p,C,N,y,O,v,k,g,L,I,D,w,G,F,x,B,U,H,W,V,X,Y,K=0,z=0,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=Te;if(Te=Te+656|0,X=ne+112|0,W=ne+96|0,H=ne+80|0,U=ne+64|0,B=ne+48|0,Y=ne+32|0,V=ne+16|0,G=(x=ne)+144|0,F=ne+128|0,y=0|_e[(N=(e|=0)+240|0)>>2],v=0|_e[(O=e+256|0)>>2],k=255&(w=0|ce[17+(0|_e[e+88>>2])>>0]),!(w<<24>>24))return Te=ne,1;L=0==(0|u),D=(I=o+-1|0)<<4,w=u+-1|0,S=0!=(1&a|0),P=n<<1,R=e+92|0,h=e+116|0,p=e+140|0,C=e+236|0,m=0!=(1&i|0),b=e+188|0,E=e+252|0,T=1+(g=n>>>2)|0,A=2+g|0,M=3+g|0,t=a=ee=0,i=1;do{if(!L)for(q=0|_e[r+(ee<<2)>>2],Q=0;;){if(z=0==(0|(_=1&Q)),c=(_<<5^32)-16|0,_=(_<<1^2)-1|0,d=S&(e=(0|Q)==(0|w)),(0|(K=z?0:I))!=(0|(s=z?o:-1)))for(l=S&e^1,Z=z?q:q+D|0;;){for(1==(0|i)&&(i=512|Ae(R,h)),f=7&i,i>>>=3,z=0|de[1539+f>>0],e=0;t=($=(J=(j=(0|Ae(R,p))+t|0)-y|0)>>31)&j|J&~$,(0|_e[N>>2])>>>0<=t>>>0&&(_e[x>>2]=866,_e[x+4>>2]=910,_e[x+8>>2]=1497,Ce(G,812,x),Me(G)),_e[F+(e<<2)>>2]=_e[(0|_e[C>>2])+(t<<2)>>2],e=e+1|0,e>>>0<z>>>0;);if(d|($=m&(0|K)==(0|I))){J=0;do{e=Z+(0|ie(J,n))|0,j=0==(0|J)|l,z=J<<1,a=(a=(re=(te=(0|Ae(R,b))+a|0)-v|0)>>31)&te|re&~a;do{if($){if(!j){a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a;break}_e[e>>2]=_e[F+((0|de[1547+(f<<2)+z>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[W>>2]=866,_e[4+W>>2]=910,_e[8+W>>2]=1497,Ce(G,812,W),Me(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a}else j&&(_e[e>>2]=_e[F+((0|de[1547+(f<<2)+z>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[H>>2]=866,_e[4+H>>2]=910,_e[8+H>>2]=1497,Ce(G,812,H),Me(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2]),e=e+8|0,a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a,j&&(_e[e>>2]=_e[F+((0|de[1547+(f<<2)+(1|z)>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[X>>2]=866,_e[4+X>>2]=910,_e[8+X>>2]=1497,Ce(G,812,X),Me(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2])}while(0)}while(2!=(0|(J=J+1|0)))}else _e[Z>>2]=_e[F+((0|de[1547+(f<<2)>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[V>>2]=866,_e[4+V>>2]=910,_e[8+V>>2]=1497,Ce(G,812,V),Me(G)),_e[Z+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+8>>2]=_e[F+((0|de[1547+(f<<2)+1>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[Y>>2]=866,_e[4+Y>>2]=910,_e[8+Y>>2]=1497,Ce(G,812,Y),Me(G)),_e[Z+12>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+(g<<2)>>2]=_e[F+((0|de[1547+(f<<2)+2>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[B>>2]=866,_e[4+B>>2]=910,_e[8+B>>2]=1497,Ce(G,812,B),Me(G)),_e[Z+(T<<2)>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+(A<<2)>>2]=_e[F+((0|de[1547+(f<<2)+3>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,b))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[U>>2]=866,_e[4+U>>2]=910,_e[8+U>>2]=1497,Ce(G,812,U),Me(G)),_e[Z+(M<<2)>>2]=_e[(0|_e[E>>2])+(a<<2)>>2];if((0|(K=_+K|0))==(0|s))break;Z=Z+c|0}if((0|(Q=Q+1|0))==(0|u))break;q=q+P|0}}while((0|(ee=ee+1|0))!=(0|k));return Te=ne,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 4:case 6:case 5:case 3:case 2:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,M,b,m,S,P,R,h,p,C,N,y,O,v,k,g,L,I,D,w,G,F,x,B,U,H,W,V,X,Y,K,z,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=0,ie=0,ae=0,oe=0,ue=0,fe=0,le=0,se=Te;if(Te=Te+640|0,Y=se+80|0,X=se+64|0,V=se+48|0,z=se+32|0,K=se+16|0,U=(W=se)+128|0,H=se+112|0,b=se+96|0,S=0|_e[(m=(e|=0)+240|0)>>2],R=0|_e[(P=e+256|0)>>2],p=0|_e[(h=e+272|0)>>2],B=0|_e[e+88>>2],C=(0|de[63+B>>0])<<8|0|de[64+B>>0],N=255&(B=0|ce[17+B>>0]),!(B<<24>>24))return Te=se,1;y=0==(0|u),v=(O=o+-1|0)<<5,k=u+-1|0,g=n<<1,L=e+92|0,I=e+116|0,D=e+164|0,w=e+268|0,G=e+140|0,F=e+236|0,x=e+212|0,B=e+188|0,M=0==(1&i|0),A=0==(1&a|0),E=e+288|0,T=e+284|0,d=e+252|0,t=i=a=e=le=0,j=1;do{if(!y)for(ue=0|_e[r+(le<<2)>>2],fe=0;;){if($=0==(0|(_=1&fe)),c=(_<<6^64)-32|0,_=(_<<1^2)-1|0,(0|(J=$?0:O))!=(0|(l=$?o:-1)))for(s=A|(0|fe)!=(0|k),oe=$?ue:ue+v|0;;){for(1==(0|j)&&(j=512|Ae(L,I)),f=7&j,j>>>=3,Z=0|de[1539+f>>0],$=0;a=(ae=(ie=(ne=(0|Ae(L,D))+a|0)-p|0)>>31)&ne|ie&~ae,(0|_e[h>>2])>>>0<=a>>>0&&(_e[W>>2]=866,_e[W+4>>2]=910,_e[W+8>>2]=1497,Ce(U,812,W),Me(U)),_e[b+($<<2)>>2]=Ee[(0|_e[w>>2])+(a<<1)>>1],$=$+1|0,$>>>0<Z>>>0;);for($=0;t=(ae=(ie=(ne=(0|Ae(L,G))+t|0)-S|0)>>31)&ne|ie&~ae,(0|_e[m>>2])>>>0<=t>>>0&&(_e[K>>2]=866,_e[4+K>>2]=910,_e[8+K>>2]=1497,Ce(U,812,K),Me(U)),_e[H+($<<2)>>2]=_e[(0|_e[F>>2])+(t<<2)>>2],$=$+1|0,$>>>0<Z>>>0;);for(ae=M|(0|J)!=(0|O),ne=0,ie=oe;;){if(ee=s|0==(0|ne),re=ne<<1,ae)for(q=0,Q=ie;e=(e=(Z=(te=(0|Ae(L,x))+e|0)-C|0)>>31)&te|Z&~e,i=(i=(te=(Z=(0|Ae(L,B))+i|0)-R|0)>>31)&Z|te&~i,ee&&($=0|de[q+re+(1547+(f<<2))>>0],Z=3*e|0,(0|_e[E>>2])>>>0<=Z>>>0&&(_e[z>>2]=866,_e[4+z>>2]=910,_e[8+z>>2]=1497,Ce(U,812,z),Me(U)),te=(0|_e[T>>2])+(Z<<1)|0,_e[Q>>2]=(0|Ee[te>>1])<<16|_e[b+($<<2)>>2],_e[Q+4>>2]=(0|Ee[te+4>>1])<<16|0|Ee[te+2>>1],_e[Q+8>>2]=_e[H+($<<2)>>2],(0|_e[P>>2])>>>0<=i>>>0&&(_e[V>>2]=866,_e[4+V>>2]=910,_e[8+V>>2]=1497,Ce(U,812,V),Me(U)),_e[Q+12>>2]=_e[(0|_e[d>>2])+(i<<2)>>2]),2!=(0|(q=q+1|0));)Q=Q+16|0;else for(te=1^ee,ee=1547+(f<<2)+re|0,q=0,Q=ie;e=(e=(Z=(re=(0|Ae(L,x))+e|0)-C|0)>>31)&re|Z&~e,i=(i=(re=(Z=(0|Ae(L,B))+i|0)-R|0)>>31)&Z|re&~i,0!=(0|q)|te||($=0|de[ee>>0],Z=3*e|0,(0|_e[E>>2])>>>0<=Z>>>0&&(_e[X>>2]=866,_e[4+X>>2]=910,_e[8+X>>2]=1497,Ce(U,812,X),Me(U)),re=(0|_e[T>>2])+(Z<<1)|0,_e[Q>>2]=(0|Ee[re>>1])<<16|_e[b+($<<2)>>2],_e[Q+4>>2]=(0|Ee[re+4>>1])<<16|0|Ee[re+2>>1],_e[Q+8>>2]=_e[H+($<<2)>>2],(0|_e[P>>2])>>>0<=i>>>0&&(_e[Y>>2]=866,_e[4+Y>>2]=910,_e[8+Y>>2]=1497,Ce(U,812,Y),Me(U)),_e[Q+12>>2]=_e[(0|_e[d>>2])+(i<<2)>>2]),2!=(0|(q=q+1|0));)Q=Q+16|0;if(2==(0|(ne=ne+1|0)))break;ie=ie+n|0}if((0|(J=_+J|0))==(0|l))break;oe=oe+c|0}if((0|(fe=fe+1|0))==(0|u))break;ue=ue+g|0}}while((0|(le=le+1|0))!=(0|N));return Te=se,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 9:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,M,b,m,S,P,R,h,p,C,N,y,O,v,k,g,L,I,D,w,G,F=0,x=0,B=0,U=0,H=0,W=0,V=0,X=0,Y=0,K=0,z=0,j=0,J=Te;if(Te=Te+592|0,D=J+48|0,G=J+32|0,w=J+16|0,g=(I=J)+80|0,L=J+64|0,b=0|_e[(M=(e|=0)+272|0)>>2],k=0|_e[e+88>>2],m=(0|de[63+k>>0])<<8|0|de[64+k>>0],S=255&(k=0|ce[17+k>>0]),!(k<<24>>24))return Te=J,1;P=0==(0|u),h=(R=o+-1|0)<<4,p=u+-1|0,C=n<<1,N=e+92|0,y=e+116|0,O=e+164|0,v=e+268|0,k=e+212|0,A=0==(1&i|0),T=0==(1&a|0),E=e+288|0,d=e+284|0,t=i=j=0,a=1;do{if(!P)for(K=0|_e[r+(j<<2)>>2],z=0;;){if(F=0==(0|(_=1&z)),c=(_<<5^32)-16|0,_=(_<<1^2)-1|0,(0|(e=F?0:R))!=(0|(l=F?o:-1)))for(s=T|(0|z)!=(0|p),Y=F?K:K+h|0;;){for(1==(0|a)&&(a=512|Ae(N,y)),f=7&a,a>>>=3,x=0|de[1539+f>>0],F=0;t=(X=(V=(W=(0|Ae(N,O))+t|0)-b|0)>>31)&W|V&~X,(0|_e[M>>2])>>>0<=t>>>0&&(_e[I>>2]=866,_e[I+4>>2]=910,_e[I+8>>2]=1497,Ce(g,812,I),Me(g)),_e[L+(F<<2)>>2]=Ee[(0|_e[v>>2])+(t<<1)>>1],F=F+1|0,F>>>0<x>>>0;);for(X=A|(0|e)!=(0|R),W=0,V=Y;H=s|0==(0|W),x=W<<1,U=(U=(B=(F=(0|Ae(N,k))+i|0)-m|0)>>31)&F|B&~U,X?(H&&(i=0|de[1547+(f<<2)+x>>0],F=3*U|0,(0|_e[E>>2])>>>0<=F>>>0&&(_e[w>>2]=866,_e[4+w>>2]=910,_e[8+w>>2]=1497,Ce(g,812,w),Me(g)),B=(0|_e[d>>2])+(F<<1)|0,_e[V>>2]=(0|Ee[B>>1])<<16|_e[L+(i<<2)>>2],_e[V+4>>2]=(0|Ee[B+4>>1])<<16|0|Ee[B+2>>1]),B=V+8|0,i=(i=(U=(F=(0|Ae(N,k))+U|0)-m|0)>>31)&F|U&~i,H&&(F=0|de[1547+(f<<2)+(1|x)>>0],x=3*i|0,(0|_e[E>>2])>>>0<=x>>>0&&(_e[D>>2]=866,_e[4+D>>2]=910,_e[8+D>>2]=1497,Ce(g,812,D),Me(g)),H=(0|_e[d>>2])+(x<<1)|0,_e[B>>2]=(0|Ee[H>>1])<<16|_e[L+(F<<2)>>2],_e[V+12>>2]=(0|Ee[H+4>>1])<<16|0|Ee[H+2>>1])):(H&&(i=0|de[1547+(f<<2)+x>>0],F=3*U|0,(0|_e[E>>2])>>>0<=F>>>0&&(_e[G>>2]=866,_e[4+G>>2]=910,_e[8+G>>2]=1497,Ce(g,812,G),Me(g)),H=(0|_e[d>>2])+(F<<1)|0,_e[V>>2]=(0|Ee[H>>1])<<16|_e[L+(i<<2)>>2],_e[V+4>>2]=(0|Ee[H+4>>1])<<16|0|Ee[H+2>>1]),i=(i=(H=(U=(0|Ae(N,k))+U|0)-m|0)>>31)&U|H&~i),2!=(0|(W=W+1|0));)V=V+n|0;if((0|(e=_+e|0))==(0|l))break;Y=Y+c|0}if((0|(z=z+1|0))==(0|u))break;K=K+C|0}}while((0|(j=j+1|0))!=(0|S));return Te=J,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 8:case 7:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,M,b,m,S,P,R,h,p,C,N,y,O,v,k,g,L,I,D,w,G,F,x,B,U=0,H=0,W=0,V=0,X=0,Y=0,K=0,z=0,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=0,ie=0,ae=Te;if(Te=Te+640|0,F=ae+80|0,G=ae+64|0,w=ae+48|0,B=ae+32|0,x=ae+16|0,L=(D=ae)+128|0,I=ae+112|0,M=ae+96|0,m=0|_e[(b=(e|=0)+272|0)>>2],g=0|_e[e+88>>2],S=(0|de[63+g>>0])<<8|0|de[64+g>>0],P=255&(g=0|ce[17+g>>0]),!(g<<24>>24))return Te=ae,1;R=0==(0|u),p=(h=o+-1|0)<<5,C=u+-1|0,N=n<<1,y=e+92|0,O=e+116|0,v=e+164|0,k=e+268|0,g=e+212|0,A=0==(1&i|0),T=0==(1&a|0),E=e+288|0,d=e+284|0,t=i=a=e=ie=0,U=1;do{if(!R)for(te=0|_e[r+(ie<<2)>>2],ne=0;;){if(W=0==(0|(_=1&ne)),c=(_<<6^64)-32|0,_=(_<<1^2)-1|0,(0|(H=W?0:h))!=(0|(l=W?o:-1)))for(s=T|(0|ne)!=(0|C),re=W?te:te+p|0;;){for(1==(0|U)&&(U=512|Ae(y,O)),f=7&U,U>>>=3,V=0|de[1539+f>>0],W=0;t=(ee=(Q=(q=(0|Ae(y,v))+t|0)-m|0)>>31)&q|Q&~ee,(0|_e[b>>2])>>>0<=t>>>0&&(_e[D>>2]=866,_e[D+4>>2]=910,_e[D+8>>2]=1497,Ce(L,812,D),Me(L)),_e[I+(W<<2)>>2]=Ee[(0|_e[k>>2])+(t<<1)>>1],W=W+1|0,W>>>0<V>>>0;);for(W=0;a=(ee=(Q=(q=(0|Ae(y,v))+a|0)-m|0)>>31)&q|Q&~ee,(0|_e[b>>2])>>>0<=a>>>0&&(_e[x>>2]=866,_e[4+x>>2]=910,_e[8+x>>2]=1497,Ce(L,812,x),Me(L)),_e[M+(W<<2)>>2]=Ee[(0|_e[k>>2])+(a<<1)>>1],W=W+1|0,W>>>0<V>>>0;);for(ee=A|(0|H)!=(0|h),q=0,Q=re;;){if(J=s|0==(0|q),$=q<<1,ee)for(z=0,j=Q;i=(i=(K=(Z=(0|Ae(y,g))+i|0)-S|0)>>31)&Z|K&~i,e=(e=(Z=(K=(0|Ae(y,g))+e|0)-S|0)>>31)&K|Z&~e,J&&(K=0|de[z+$+(1547+(f<<2))>>0],V=3*i|0,(W=0|_e[E>>2])>>>0<=V>>>0&&(_e[B>>2]=866,_e[4+B>>2]=910,_e[8+B>>2]=1497,Ce(L,812,B),Me(L),W=0|_e[E>>2]),V=(X=0|_e[d>>2])+(V<<1)|0,Z=(W=(Y=3*e|0)>>>0<W>>>0?X:(_e[w>>2]=866,_e[4+w>>2]=910,_e[8+w>>2]=1497,Ce(L,812,w),Me(L),0|_e[d>>2]))+(Y<<1)|0,_e[j>>2]=(0|Ee[V>>1])<<16|_e[I+(K<<2)>>2],_e[j+4>>2]=(0|Ee[V+4>>1])<<16|0|Ee[V+2>>1],_e[j+8>>2]=(0|Ee[Z>>1])<<16|_e[M+(K<<2)>>2],_e[j+12>>2]=(0|Ee[Z+4>>1])<<16|0|Ee[Z+2>>1]),2!=(0|(z=z+1|0));)j=j+16|0;else for(Z=1^J,J=1547+(f<<2)+$|0,z=0,j=Q;i=(i=(K=($=(0|Ae(y,g))+i|0)-S|0)>>31)&$|K&~i,e=(e=($=(K=(0|Ae(y,g))+e|0)-S|0)>>31)&K|$&~e,0!=(0|z)|Z||(K=0|de[J>>0],V=3*i|0,(W=0|_e[E>>2])>>>0<=V>>>0&&(_e[G>>2]=866,_e[4+G>>2]=910,_e[8+G>>2]=1497,Ce(L,812,G),Me(L),W=0|_e[E>>2]),V=(X=0|_e[d>>2])+(V<<1)|0,$=(W=(Y=3*e|0)>>>0<W>>>0?X:(_e[F>>2]=866,_e[4+F>>2]=910,_e[8+F>>2]=1497,Ce(L,812,F),Me(L),0|_e[d>>2]))+(Y<<1)|0,_e[j>>2]=(0|Ee[V>>1])<<16|_e[I+(K<<2)>>2],_e[j+4>>2]=(0|Ee[V+4>>1])<<16|0|Ee[V+2>>1],_e[j+8>>2]=(0|Ee[$>>1])<<16|_e[M+(K<<2)>>2],_e[j+12>>2]=(0|Ee[$+4>>1])<<16|0|Ee[$+2>>1]),2!=(0|(z=z+1|0));)j=j+16|0;if(2==(0|(q=q+1|0)))break;Q=Q+n|0}if((0|(H=_+H|0))==(0|l))break;re=re+c|0}if((0|(ne=ne+1|0))==(0|u))break;te=te+N|0}}while((0|(ie=ie+1|0))!=(0|P));return Te=ae,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;default:return(i=0)|i}return 0|(i=1)}function K(e,r,t){e|=0,r|=0;var n,i,a;if(8192<=(0|(t|=0)))return 0|N(0|e,0|r,0|t);if(a=0|e,i=e+t|0,(3&e)==(3&r)){for(;3&e;){if(!t)return 0|a;ce[e>>0]=0|ce[r>>0],e=e+1|0,r=r+1|0,t=t-1|0}for(n=(t=-4&i|0)-64|0;(0|e)<=(0|n);)_e[e>>2]=_e[r>>2],_e[e+4>>2]=_e[r+4>>2],_e[e+8>>2]=_e[r+8>>2],_e[e+12>>2]=_e[r+12>>2],_e[e+16>>2]=_e[r+16>>2],_e[e+20>>2]=_e[r+20>>2],_e[e+24>>2]=_e[r+24>>2],_e[e+28>>2]=_e[r+28>>2],_e[e+32>>2]=_e[r+32>>2],_e[e+36>>2]=_e[r+36>>2],_e[e+40>>2]=_e[r+40>>2],_e[e+44>>2]=_e[r+44>>2],_e[e+48>>2]=_e[r+48>>2],_e[e+52>>2]=_e[r+52>>2],_e[e+56>>2]=_e[r+56>>2],_e[e+60>>2]=_e[r+60>>2],e=e+64|0,r=r+64|0;for(;(0|e)<(0|t);)_e[e>>2]=_e[r>>2],e=e+4|0,r=r+4|0}else for(t=i-4|0;(0|e)<(0|t);)ce[e>>0]=0|ce[r>>0],ce[e+1>>0]=0|ce[r+1>>0],ce[e+2>>0]=0|ce[r+2>>0],ce[e+3>>0]=0|ce[r+3>>0],e=e+4|0,r=r+4|0;for(;(0|e)<(0|i);)ce[e>>0]=0|ce[r>>0],e=e+1|0,r=r+1|0;return 0|a}function z(e,r,t){r|=0,t|=0;var n,i,a,o,u,f=0,l=0,s=0,c=0,_=0,d=Te;Te=Te+48|0,o=d+16|0,l=(s=d)+32|0,f=0|_e[(i=(e|=0)+28|0)>>2],_e[l>>2]=f,f=(0|_e[(a=e+20|0)>>2])-f|0,_e[l+4>>2]=f,_e[l+8>>2]=r,f=f+(_e[l+12>>2]=t)|0,n=e+60|0,_e[s>>2]=_e[n>>2],_e[s+4>>2]=l,_e[s+8>>2]=2,s=0|Le(0|v(146,0|s));e:do{if((0|f)!=(0|s)){for(r=2;!((0|s)<0);)if(f=f-s|0,r=((u=(_=0|_e[l+4>>2])>>>0<s>>>0)<<31>>31)+r|0,_=s-(u?_:0)|0,_e[(l=u?l+8|0:l)>>2]=(0|_e[l>>2])+_,_e[(u=l+4|0)>>2]=(0|_e[u>>2])-_,_e[o>>2]=_e[n>>2],_e[4+o>>2]=l,_e[8+o>>2]=r,(0|f)==(0|(s=0|Le(0|v(146,0|o))))){c=3;break e}_e[e+16>>2]=0,_e[i>>2]=0,_e[a>>2]=0,_e[e>>2]=32|_e[e>>2],t=2==(0|r)?0:t-(0|_e[l+4>>2])|0}else c=3}while(0);return 3==(0|c)&&(_=0|_e[e+44>>2],_e[e+16>>2]=_+(0|_e[e+48>>2]),_e[i>>2]=_,_e[a>>2]=_),Te=d,0|t}function j(e,r,t){e|=0,r|=0,t|=0;var n,i,a,o,u,f,l,s,c,_=0,d=0,E=Te;for(Te=Te+224|0,f=E+120|0,l=E+80|0,s=E,c=E+136|0,_=l,d=_+40|0;_=_+4|(_e[_>>2]=0),(0|_)<(0|d););return _e[f>>2]=_e[t>>2],t=(0|w(0,r,f,s,l))<0?-1:(_e[e+76>>2],u=32&(t=0|_e[e>>2]),(0|ce[e+74>>0])<1&&(_e[e>>2]=-33&t),0|_e[(_=e+48|0)>>2]?t=0|w(e,r,f,s,l):(n=0|_e[(d=e+44|0)>>2],_e[d>>2]=c,_e[(i=e+28|0)>>2]=c,_e[(a=e+20|0)>>2]=c,_e[_>>2]=80,_e[(o=e+16|0)>>2]=80+c,t=0|w(e,r,f,s,l),n&&(ze[7&_e[e+36>>2]](e,0,0),t=0==(0|_e[a>>2])?-1:t,_e[d>>2]=n,_e[_>>2]=0,_e[o>>2]=0,_e[i>>2]=0,_e[a>>2]=0)),_=0|_e[e>>2],_e[e>>2]=_|u,0==(32&_|0)?t:-1),Te=E,0|t}function J(e,r,t,n){e|=0,r|=0,t|=0,n|=0;var i,a,o,u,f,l,s,c=0,_=Te;for(Te=Te+64|0,l=_,f=0|_e[e>>2],s=e+(0|_e[f-8>>2])|0,f=0|_e[f-4>>2],_e[l>>2]=t,_e[l+4>>2]=e,_e[l+8>>2]=r,_e[l+12>>2]=n,e=l+16|0,r=l+20|0,n=l+24|0,i=l+28|0,a=l+32|0,o=l+40|0,c=e,u=c+36|0;c=c+4|(_e[c>>2]=0),(0|c)<(0|u););W[e+36>>1]=0,ce[e+38>>0]=0;e:do{if(0|we(f,t))_e[l+48>>2]=1,Qe[3&_e[20+(0|_e[f>>2])>>2]](f,l,s,s,1,0),e=1==(0|_e[n>>2])?s:0;else{switch(je[3&_e[24+(0|_e[f>>2])>>2]](f,l,s,1,0),0|_e[l+36>>2]){case 0:e=1==(0|_e[o>>2])&1==(0|_e[i>>2])&1==(0|_e[a>>2])?0|_e[r>>2]:0;break e;case 1:break;default:e=0;break e}if(1!=(0|_e[n>>2])&&!(0==(0|_e[o>>2])&1==(0|_e[i>>2])&1==(0|_e[a>>2]))){e=0;break}e=0|_e[e>>2]}}while(0);return Te=_,0|e}function $(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=Te;if(Te=Te+544|0,o=f+16|0,i=(r=f)+32|0,8192<=((t=0|_e[(a=(e|=0)+8|0)>>2])+-1|0)>>>0&&(_e[r>>2]=866,_e[r+4>>2]=3006,_e[r+8>>2]=1257,Ce(i,812,r),Me(i)),_e[e>>2]=t,u=(r=0|_e[(n=e+20|0)>>2])?t:((r=0|te(180,0))?(_e[(u=r+164|0)>>2]=0,_e[u+4>>2]=0,_e[u+8>>2]=0,_e[u+12>>2]=0):r=0,_e[n>>2]=r,0|_e[e>>2]),o=0|_e[a>>2]?u:(_e[o>>2]=866,_e[o+4>>2]=910,_e[o+8>>2]=1497,Ce(i,812,o),Me(i),0|_e[e>>2]),i=0|_e[e+4>>2],!(16<o>>>0))return e=(e=0)|G(r,u,i,e),Te=f,0|e;for(t=o,n=0;a=n+1|0,3<t>>>0;)t>>>=1,n=a;return e=0|G(r,u,i,e=255&((e=n+2+(32!=(0|a)&1<<a>>>0<o>>>0&1)|0)>>>0<11?e:11)),Te=f,0|e}function Z(e){var r,t,n,i,a,o=0,u=0,f=Te;Te=Te+576|0,i=f+48|0,a=f+32|0,t=f+16|0,n=(r=f)+64|0,o=0|_e[(e|=0)+168>>2];do{if(0|o){if(u=0|_e[o+-4>>2],o=o+-8|0,0!=(0|u)&&(0|u)==(0|~_e[o>>2])||(_e[r>>2]=866,_e[r+4>>2]=651,_e[r+8>>2]=1579,Ce(n,812,r),Me(n)),7&o){_e[t>>2]=866,_e[4+t>>2]=2506,_e[8+t>>2]=1232,Ce(n,812,t),Me(n);break}ue(o,0,0,1,0);break}}while(0);Te=((o=0|_e[e+176>>2])&&(u=0|_e[o+-4>>2],o=o+-8|0,0!=(0|u)&&(0|u)==(0|~_e[o>>2])||(_e[a>>2]=866,_e[4+a>>2]=651,_e[8+a>>2]=1579,Ce(n,812,a),Me(n)),7&o?(_e[i>>2]=866,_e[4+i>>2]=2506,_e[8+i>>2]=1232,Ce(n,812,i),Me(n)):ue(o,0,0,1,0)),f)}function q(e,r,t){var n;return!(0!=(0|(e|=0))&73<(r|=0)>>>0&0!=(0|(t|=0)))||40!=(0|_e[t>>2])||18552!=((0|de[e>>0])<<8|0|de[e+1>>0]|0)||((0|de[e+2>>0])<<8|0|de[e+3>>0])>>>0<74||((0|de[e+7>>0])<<16|(0|de[e+6>>0])<<24|(0|de[e+8>>0])<<8|0|de[e+9>>0])>>>0>r>>>0?(t=0)|t:(_e[t+4>>2]=(0|de[e+12>>0])<<8|0|de[e+13>>0],_e[t+8>>2]=(0|de[e+14>>0])<<8|0|de[e+15>>0],_e[t+12>>2]=de[e+16>>0],_e[t+16>>2]=de[e+17>>0],r=e+18|0,_e[(n=t+32|0)>>2]=de[r>>0],r=(_e[4+n>>2]=0)|ce[r>>0],_e[t+20>>2]=r<<24>>24==0|r<<24>>24==9?8:16,_e[t+24>>2]=(0|de[e+26>>0])<<16|(0|de[e+25>>0])<<24|(0|de[e+27>>0])<<8|0|de[e+28>>0],_e[t+28>>2]=(0|de[e+30>>0])<<16|(0|de[e+29>>0])<<24|(0|de[e+31>>0])<<8|0|de[e+32>>0],0|(t=1))}function Q(e,r){e|=0;var t,n,i=0,a=0,o=0,u=0,f=0,l=Te;if(Te=Te+544|0,f=l+16|0,u=(i=l)+32|0,33<=(r|=0)>>>0&&(_e[i>>2]=866,_e[i+4>>2]=3199,_e[i+8>>2]=1350,Ce(u,812,i),Me(u)),(0|r)<=(0|(i=0|_e[(n=e+20|0)>>2])))return u=i,f=(a=0|_e[(o=a=e+16|0)>>2])>>>(f=32-r|0),a<<=r,_e[o>>2]=a,r=u-r|0,_e[n>>2]=r,Te=l,0|f;for(a=e+4|0,o=e+8|0,t=e+16|0;e=(0|(e=0|_e[a>>2]))==(0|_e[o>>2])?0:(_e[a>>2]=e+1,0|de[e>>0]),i=i+8|0,33<=(0|(_e[n>>2]=i))&&(_e[f>>2]=866,_e[f+4>>2]=3208,_e[f+8>>2]=1366,Ce(u,812,f),Me(u),i=0|_e[n>>2]),e=e<<32-i|_e[t>>2],_e[t>>2]=e,(0|i)<(0|r););return f=e>>>(f=32-r|0),u=e<<r,_e[t>>2]=u,r=i-r|0,_e[n>>2]=r,Te=l,0|f}function ee(e,r,t){e|=0,r|=0;var n,i=0,a=0,o=0,u=0;(a=0|_e[(i=(t|=0)+16|0)>>2])?o=5:0|be(t)?i=0:(a=0|_e[i>>2],o=5);e:do{if(5==(0|o)){if((a-(i=u=0|_e[(n=t+20|0)>>2])|0)>>>0<r>>>0){i=0|ze[7&_e[t+36>>2]](t,e,r);break}r:do{if(-1<(0|ce[t+75>>0])){for(u=r;;){if(!u){o=0,a=e;break r}if(10==(0|ce[e+(a=u+-1|0)>>0]))break;u=a}if((i=0|ze[7&_e[t+36>>2]](t,e,u))>>>0<u>>>0)break e;a=e+(o=u)|0,r=r-u|0,i=0|_e[n>>2]}else o=0,a=e}while(0);K(0|i,0|a,0|r),_e[n>>2]=(0|_e[n>>2])+r,i=o+r|0}}while(0);return 0|i}function re(e){var r,t=0,n=0,i=0,a=Te;Te=Te+544|0,i=a+16|0,r=(n=a)+32|0,t=0|_e[(e|=0)+20>>2];do{if(0|t){if(Z(t),7&t){_e[n>>2]=866,_e[n+4>>2]=2506,_e[n+8>>2]=1232,Ce(r,812,n),Me(r);break}ue(t,0,0,1,0);break}}while(0);if(!(n=0|_e[(t=e+4|0)>>2]))return ce[(i=e+16|0)>>0]=0,void(Te=a);7&n?(_e[i>>2]=866,_e[i+4>>2]=2506,_e[i+8>>2]=1232,Ce(r,812,i),Me(r)):ue(n,0,0,1,0),_e[t>>2]=0,_e[e+8>>2]=0,_e[e+12>>2]=0,ce[(i=e+16|0)>>0]=0,Te=a}function te(e,r){r|=0;var t,n,i,a=0,o=0,u=0,f=Te;return Te=Te+560|0,u=f+32|0,i=f+16|0,n=(a=f)+48|0,t=f+44|0,2147418112<(o=0|(o=(e|=0)+3&-4)?o:4)>>>0?(_e[a>>2]=866,_e[a+4>>2]=2506,_e[a+8>>2]=1103,Ce(n,812,a),Me(n),Te=f,(u=0)|u):(e=0|ue(0,_e[t>>2]=o,t,1,0),a=0|_e[t>>2],0|r&&(_e[r>>2]=a),0==(0|e)|a>>>0<o>>>0?(_e[i>>2]=866,_e[4+i>>2]=2506,_e[8+i>>2]=1129,Ce(n,812,i),Me(n),e=0):7&e&&(_e[u>>2]=866,_e[u+4>>2]=2533,_e[u+8>>2]=1156,Ce(n,812,u),Me(n)),Te=f,0|(u=e))}function ne(e,r,t){r|=0;var n,i,a,o=(e|=0)+(t|=0)|0;if(r&=255,67<=(0|t)){for(;3&e;)ce[e>>0]=r,e=e+1|0;for(i=(n=-4&o|0)-64|0,a=r|r<<8|r<<16|r<<24;(0|e)<=(0|i);)_e[e>>2]=a,_e[e+4>>2]=a,_e[e+8>>2]=a,_e[e+12>>2]=a,_e[e+16>>2]=a,_e[e+20>>2]=a,_e[e+24>>2]=a,_e[e+28>>2]=a,_e[e+32>>2]=a,_e[e+36>>2]=a,_e[e+40>>2]=a,_e[e+44>>2]=a,_e[e+48>>2]=a,_e[e+52>>2]=a,_e[e+56>>2]=a,_e[e+60>>2]=a,e=e+64|0;for(;(0|e)<(0|n);)_e[e>>2]=a,e=e+4|0}for(;(0|e)<(0|o);)ce[e>>0]=r,e=e+1|0;return o-t|0}function ae(e,r,t,n,i){e|=0,t|=0,n|=0,i|=0;var a,o,u,f;ce[(r|=0)+53>>0]=1;do{if((0|_e[r+4>>2])==(0|n)){if(ce[r+52>>0]=1,u=r+54|0,f=r+48|0,o=r+24|0,e=r+36|0,!(a=0|_e[(n=r+16|0)>>2])){if(_e[n>>2]=t,_e[o>>2]=i,!((_e[e>>2]=1)==(0|_e[f>>2])&1==(0|i)))break;ce[u>>0]=1;break}if((0|a)!=(0|t)){_e[e>>2]=1+(0|_e[e>>2]),ce[u>>0]=1;break}2==(0|(e=0|_e[o>>2]))&&(e=_e[o>>2]=i),1==(0|_e[f>>2])&1==(0|e)&&(ce[u>>0]=1)}}while(0)}function oe(e,r){e|=0;var t,n,i=0,a=0,o=0,u=0,f=Te;Te=Te+16|0,n=255&(r|=0),ce[(t=f)>>0]=n,(o=0|_e[(a=e+16|0)>>2])?u=4:0|be(e)?i=-1:(o=0|_e[a>>2],u=4);do{if(4==(0|u)){if((a=0|_e[(u=e+20|0)>>2])>>>0<o>>>0&&(0|(i=255&r))!=(0|ce[e+75>>0])){_e[u>>2]=a+1,ce[a>>0]=n;break}i=1==(0|ze[7&_e[e+36>>2]](e,t,1))?0|de[t>>0]:-1}}while(0);return Te=f,0|i}function ue(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;do{if(e){if(!r){if(F(e),!t){r=0;break}r=_e[t>>2]=0;break}n?e=0==(0|(r=0|function(e,r){r|=0;var t=0,n=0;if(!(e|=0))return 0|(r=0|I(r));if(4294967231<r>>>0)return _e[(r=296)>>2]=12,(r=0)|r;if(0|(t=0|function(e,r){r|=0;var t,n,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=(e|=0)+(i=-8&(l=0|_e[(s=e+4|0)>>2]))|0;if(!(3&l))return!(r>>>0<256)&&(r+4|0)>>>0<=i>>>0&&(i-r|0)>>>0<=_e[1264]<<1>>>0?0|e:(e=0)|e;if(r>>>0<=i>>>0)return(i=i-r|0)>>>0<=15||(f=e+r|0,_e[s>>2]=1&l|r|2,_e[f+4>>2]=3|i,_e[(s=f+i+4|0)>>2]=1|_e[s>>2],x(f,i)),0|e;if((0|c)==(0|_e[1150]))return i=(f=(0|_e[1147])+i|0)-r|0,a=e+r|0,f>>>0<=r>>>0?(e=0)|e:(_e[s>>2]=1&l|r|2,_e[a+4>>2]=1|i,_e[1150]=a,_e[1147]=i,0|e);if((0|c)==(0|_e[1149]))return(o=(0|_e[1146])+i|0)>>>0<r>>>0?(e=0)|e:(a=1&l,15<(i=o-r|0)>>>0?(f=(l=e+r|0)+i|0,_e[s>>2]=a|r|2,_e[l+4>>2]=1|i,_e[f>>2]=i,_e[(a=f+4|0)>>2]=-2&_e[a>>2],a=l):(_e[s>>2]=a|o|2,_e[(a=e+o+4|0)>>2]=1|_e[a>>2],i=a=0),_e[1146]=i,_e[1149]=a,0|e);if(2&(a=0|_e[4+c>>2])|0)return(e=0)|e;if((n=(-8&a)+i|0)>>>0<r>>>0)return(e=0)|e;f=n-r|0,o=a>>>3;do{if(a>>>0<256){if(a=0|_e[8+c>>2],(0|(i=0|_e[12+c>>2]))==(0|a)){_e[1144]=_e[1144]&~(1<<o);break}_e[a+12>>2]=i,_e[i+8>>2]=a;break}t=0|_e[24+c>>2],i=0|_e[12+c>>2];do{if((0|i)==(0|c)){if(i=0|_e[(a=(o=16+c|0)+4|0)>>2])u=a;else{if(!(i=0|_e[o>>2])){o=0;break}u=o}for(;;)if(0|(a=0|_e[(o=i+20|0)>>2]))i=a,u=o;else{if(!(o=0|_e[(a=i+16|0)>>2]))break;i=o,u=a}_e[u>>2]=0,o=i}else o=0|_e[8+c>>2],_e[o+12>>2]=i,_e[i+8>>2]=o,o=i}while(0);if(0|t){if(i=0|_e[28+c>>2],(0|c)==(0|_e[(a=4880+(i<<2)|0)>>2])){if(!(_e[a>>2]=o)){_e[1145]=_e[1145]&~(1<<i);break}}else if(!(_e[16+t+(((0|_e[16+t>>2])!=(0|c)&1)<<2)>>2]=o))break;_e[o+24>>2]=t,0|(a=0|_e[(i=16+c|0)>>2])&&(_e[o+16>>2]=a,_e[a+24>>2]=o),0|(i=0|_e[i+4>>2])&&(_e[o+20>>2]=i,_e[i+24>>2]=o)}}while(0);return i=1&l,f>>>0<16?(_e[s>>2]=n|i|2,_e[(s=e+n+4|0)>>2]=1|_e[s>>2]):(l=e+r|0,_e[s>>2]=i|r|2,_e[l+4>>2]=3|f,_e[(s=l+f+4|0)>>2]=1|_e[s>>2],x(l,f)),0|e}(e+-8|0,r>>>0<11?16:r+11&-8)))return 0|(r=t+8|0);return(t=0|I(r))?(n=0|_e[e+-4>>2],K(0|t,0|e,0|((n=(-8&n)-(0==(3&n|0)?8:4)|0)>>>0<r>>>0?n:r)),F(e),0|(r=t)):(r=0)|r}(e,r)))?e:r:r=0,t&&(i=0|pe(e),_e[t>>2]=i)}else r=0|I(r),t&&(e=r?0|pe(r):0,_e[t>>2]=e)}while(0);return 0|r}function fe(e,r,t){t|=0;var n;if(0<(r|=0)>>>0|0==(0|r)&4294967295<(e|=0)>>>0){for(;n=0|he(0|e,0|r,10,0),ce[(t=t+-1|0)>>0]=255&n|48,e=0|Fe(0|(n=e),0|r,10,0),9<r>>>0|9==(0|r)&4294967295<n>>>0;)r=L;r=e}else r=e;if(r)for(;ce[(t=t+-1|0)>>0]=(r>>>0)%10|48,!(r>>>0<10);)r=(r>>>0)/10|0;return 0|t}function le(e,r,t,n){e|=0,t|=0,n|=0;var i=0|_e[(e=(r|=0)+16|0)>>2],a=r+36|0,o=r+24|0;do{if(i){if((0|i)!=(0|t)){_e[a>>2]=1+(0|_e[a>>2]),_e[o>>2]=2,ce[r+54>>0]=1;break}2==(0|_e[o>>2])&&(_e[o>>2]=n)}else _e[e>>2]=t,_e[o>>2]=n,_e[a>>2]=1}while(0)}function Me(e){e|=0;var r=0,t=0,n=0|_e[119];_e[76+n>>2];do{if((0|function(e,r){r|=0;var t=0;return t=0|function(e){var r=0,t=0,n=0,n=e|=0;e:do{if(3&n)for(r=n;;){if(!(0|ce[e>>0])){e=r;break e}if(!(3&(r=e=e+1|0))){t=4;break}}else t=4}while(0);if(4==(0|t)){for(;!((-2139062144&(r=0|_e[e>>2])^-2139062144)&r+-16843009);)e=e+4|0;if((255&r)<<24>>24)for(;e=e+1|0,0!=(0|ce[e>>0]););}return e-n|0}(e=e|0),((0|function(e,r,t,n){e|=0,n|=0;var i=0;i=0|ie(t|=0,r|=0),t=0==(0|r)?0:t,e=(_e[n+76>>2],0|ee(e,i,n));(0|e)!=(0|i)&&(t=(e>>>0)/(r>>>0)|0);return 0|t}(e,1,t,r))!=(0|t))<<31>>31|0}(e,n))<0)e=1;else{if(10!=(0|ce[75+n>>0])&&(t=0|_e[(r=20+n|0)>>2])>>>0<(0|_e[16+n>>2])>>>0){_e[r>>2]=t+1,ce[t>>0]=10,e=0;break}e=(0|oe(n,10))<0}}while(0);return e<<31>>31|0}function se(e,r,t,n,i){e|=0,r|=0;var a,o=Te;if(Te=Te+256|0,a=o,(0|(n|=0))<(0|(t|=0))&0==(73728&(i|=0)|0)){if(ne(0|a,0|r,0|((i=t-n|0)>>>0<256?i:256)),255<i>>>0){for(r=t-n|0;Ie(e,a,256),i=i+-256|0,255<i>>>0;);i=255&r}Ie(e,a,i)}Te=o}function be(e){var r=0,t=0|ce[(r=(e|=0)+74|0)>>0];return ce[r>>0]=255+t|t,0|(e=8&(r=0|_e[e>>2])?(_e[e>>2]=32|r,-1):(_e[e+8>>2]=0,t=(_e[e+4>>2]=0)|_e[e+44>>2],_e[e+28>>2]=t,_e[e+20>>2]=t,_e[e+16>>2]=t+(0|_e[e+48>>2]),0))}function me(e){var r=0,t=0;return 0<(0|(t=(e|=0)+15&-16|0))&(0|(e=(r=0|_e[_>>2])+t|0))<(0|r)|(0|e)<0?(b(),h(12),-1):(0|(_e[_>>2]=e))>(0|M())&&0==(0|A())?(_e[_>>2]=r,h(12),-1):0|r}function Se(e){var r=0,t=0,n=0,t=0|_e[(e|=0)>>2];if((n=(0|ce[t>>0])-48|0)>>>0<10)for(r=0;r=n+(10*r|0)|0,t=t+1|0,_e[e>>2]=t,n=(0|ce[t>>0])-48|0,n>>>0<10;);else r=0;return 0|r}function Pe(e){var r=0;return(0|(r=0|ce[d+(255&(e|=0))>>0]))<8?0|r:(0|(r=0|ce[d+(e>>8&255)>>0]))<8?r+8|0:(0|(r=0|ce[d+(e>>16&255)>>0]))<8?r+16|0:24+(0|ce[d+(e>>>24)>>0])|0}function Re(e,r,t,n){t|=0,n|=0;var i=0;(0|_e[(r|=0)+4>>2])==(0|t)&&1!=(0|_e[(i=r+28|0)>>2])&&(_e[i>>2]=n)}function he(e,r,t,n){var i,a=Te;return Te=Te+16|0,B(e|=0,r|=0,t|=0,n|=0,i=0|a),Te=a,0|(L=0|_e[4+i>>2],0|_e[i>>2])}function pe(e){var r;return(e|=0)?0|(1==(0|(e=3&(r=0|_e[e+-4>>2])))?0:(-8&r)-(0==(0|e)?8:4)|0):0}function Ce(e,r,t){e|=0,r|=0,t|=0;var n=0,i=Te;return Te=Te+16|0,_e[(n=i)>>2]=t,t=0|(e=e,r=r,n=n,0|function(e,r,t,n){e|=0,r|=0,t|=0,n|=0;var i,a=0,o=0,u=0,f=0,l=0,s=Te;for(Te=Te+128|0,a=s+124|0,l=s,o=l,u=604,i=o+124|0;_e[o>>2]=_e[u>>2],o=o+4|0,u=u+4|0,(0|o)<(0|i););return 2147483646<(r+-1|0)>>>0?r?(_e[(r=296)>>2]=75,r=-1):(e=a,r=1,f=4):f=4,4==(0|f)&&(f=(f=-2-e|0)>>>0<r>>>0?f:r,_e[l+48>>2]=f,_e[(a=l+20|0)>>2]=e,r=(_e[l+44>>2]=e)+f|0,_e[(e=l+16|0)>>2]=r,_e[l+28>>2]=r,r=0|j(l,t,n),f&&(l=0|_e[a>>2],ce[l+(((0|l)==(0|_e[e>>2]))<<31>>31)>>0]=0)),Te=s,0|r}(e|=0,2147483647,r|=0,n|=0)),Te=i,0|t}function Ne(e,r,t){return e|=0,r|=0,(0|(t|=0))<32?(L=r<<t|(e&(1<<t)-1<<32-t)>>>32-t,e<<t):(L=e<<t-32,0)}function ye(e,r,t){return e|=0,r|=0,(0|(t|=0))<32?(L=r>>>t,e>>>t|(r&(1<<t)-1)<<32-t):r>>>t-32|(L=0)}function Oe(e,r){e|=0,r|=0;var t=Te;Te=Te+16|0,_e[t>>2]=r,j(r=0|_e[26],e,t),function(e,r){var t=0,n=0,i=0,a=0,o=255&(e|=0),t=255&e;_e[(r|=0)+76>>2],a=3;do{if(3==(0|a)){if((0|t)!=(0|ce[r+75>>0])&&(i=0|_e[(n=r+20|0)>>2])>>>0<(0|_e[r+16>>2])>>>0){_e[n>>2]=i+1,ce[i>>0]=o;break}t=0|oe(r,e)}}while(0)}(10,r),p()}function ve(e,r,t,n){return 0|(L=n=(r|=0)-(n|=0)-((e|=0)>>>0<(t|=0)>>>0|0)>>>0,e-t>>>0|0)}function ke(e){e=+e;var r;return k[g>>3]=e,r=0|_e[g>>2],L=0|_e[g+4>>2],0|r}function ge(e,r,t,n){return 0|(L=(r|=0)+(n|=0)+((t=(e|=0)+(t|=0)>>>0)>>>0<e>>>0|0)>>>0,0|t)}function Le(e){return 4294963200<(e|=0)>>>0&&(_e[74]=0-e,e=-1),0|e}function Ie(e,r,t){r|=0,t|=0,32&_e[(e|=0)>>2]||ee(r,t,e)}function De(e,r){return r|=0,0|(e=(e|=0)?0|function(e,r){e|=0,r|=0;do{if(e){if(r>>>0<128){ce[e>>0]=r,e=1;break}if(!(0|_e[_e[420>>2]>>2])){if(57216==(-128&r|0)){ce[e>>0]=r,e=1;break}_e[(e=296)>>2]=84,e=-1;break}if(r>>>0<2048){ce[e>>0]=r>>>6|192,ce[e+1>>0]=63&r|128,e=2;break}if(r>>>0<55296|57344==(-8192&r|0)){ce[e>>0]=r>>>12|224,ce[e+1>>0]=r>>>6&63|128,ce[e+2>>0]=63&r|128,e=3;break}if((r+-65536|0)>>>0<1048576){ce[e>>0]=r>>>18|240,ce[e+1>>0]=r>>>12&63|128,ce[e+2>>0]=r>>>6&63|128,ce[e+3>>0]=63&r|128,e=4;break}_e[(e=296)>>2]=84,e=-1;break}}while(e=1,0);return 0|e}(e,r):0)}function we(e,r){return(0|(e|=0))==(0|(r|=0))|0}function Ge(e,r){var t=0|xe(0|(e|=0));return 0|(0==(0|(r|=0))?e:t)}function Fe(e,r,t,n){return 0|B(e|=0,r|=0,t|=0,n|=0,0)}function xe(e){return(255&(e|=0))<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function Be(e,r,t,n,i,a){E(6)}function Ue(e,r,t,n,i){E(1)}function He(e){e=e|=0,F(e|=0)}function We(e,r,t,n){E(7)}function Ve(e,r,t){return E(0),0}function Xe(e){}function Ye(e){E(2)}function Ke(){E(5)}r.__ZSt18uncaught_exceptionv;var ze=[Ve,z,function(e,r,t){e|=0,r|=0,t|=0;var n,i,a=Te;return Te=Te+32|0,n=(i=a)+20|0,_e[i>>2]=_e[e+60>>2],_e[i+4>>2]=0,_e[i+8>>2]=r,_e[i+12>>2]=n,_e[i+16>>2]=t,e=(0|Le(0|O(140,0|i)))<0?_e[n>>2]=-1:0|_e[n>>2],Te=a,0|e},function(e,r,t){r|=0,t|=0;var n=0,i=Te;return Te=Te+32|0,n=i,_e[(e|=0)+36>>2]=1,0==(64&_e[e>>2]|0)&&(_e[n>>2]=_e[e+60>>2],_e[n+4>>2]=21523,_e[n+8>>2]=i+16,0|S(54,0|n))&&(ce[e+75>>0]=-1),n=0|z(e,r,t),Te=i,0|n},function(e,r,t){r|=0,t|=0;var n=0,i=0;return K(0|(i=0|_e[(n=(e|=0)+20|0)>>2]),0|r,0|(e=t>>>0<(e=(0|_e[e+16>>2])-i|0)>>>0?t:e)),_e[n>>2]=(0|_e[n>>2])+e,0|t},function(e,r,t){t|=0;var n,i,a=0,o=Te;if(Te=Te+64|0,i=o,0|we(e|=0,r|=0))r=1;else if(0!=(0|r)&&0!=(0|(a=0|J(r,32,16,0)))){for(r=i+4|0,n=r+52|0;r=r+4|(_e[r>>2]=0),(0|r)<(0|n););_e[i>>2]=a,_e[i+8>>2]=e,_e[i+12>>2]=-1,_e[i+48>>2]=1,er[3&_e[28+(0|_e[a>>2])>>2]](a,i,0|_e[t>>2],1),r=1==(0|_e[i+24>>2])?(_e[t>>2]=_e[i+16>>2],1):0}else r=0;return Te=o,0|r},Ve,Ve],je=[Ue,function(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0;var a=0;do{if(0|we(e,0|_e[r+8>>2]))Re(0,r,t,n);else if(0|we(e,0|_e[r>>2])){if(e=r+32|0,(0|_e[r+16>>2])!=(0|t)&&(0|_e[(a=r+20|0)>>2])!=(0|t)){_e[e>>2]=n,_e[a>>2]=t,_e[(n=r+40|0)>>2]=1+(0|_e[n>>2]),1==(0|_e[r+36>>2])&&2==(0|_e[r+24>>2])&&(ce[r+54>>0]=1),_e[r+44>>2]=4;break}1==(0|n)&&(_e[e>>2]=1)}}while(0)},function(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;var a,o=0,u=0,f=0;do{if(0|we(e,0|_e[r+8>>2]))Re(0,r,t,n);else{if(o=e+8|0,!(0|we(e,0|_e[r>>2]))){f=0|_e[o>>2],je[3&_e[24+(0|_e[f>>2])>>2]](f,r,t,n,i);break}if(e=r+32|0,(0|_e[r+16>>2])!=(0|t)&&(0|_e[(u=r+20|0)>>2])!=(0|t)){if(_e[e>>2]=n,4==(0|_e[(n=r+44|0)>>2]))break;ce[(e=r+52|0)>>0]=0,o=(ce[(a=r+53|0)>>0]=0)|_e[o>>2],Qe[3&_e[20+(0|_e[o>>2])>>2]](o,r,t,t,1,i),0|ce[a>>0]?0|ce[e>>0]?e=3:(e=3,f=11):(e=4,f=11),11==(0|f)&&(_e[u>>2]=t,_e[(a=r+40|0)>>2]=1+(0|_e[a>>2]),1==(0|_e[r+36>>2])&&2==(0|_e[r+24>>2])&&(ce[r+54>>0]=1)),_e[n>>2]=e;break}1==(0|n)&&(_e[e>>2]=1)}}while(0)},Ue],Je=[Ye,Xe,He,Xe,Xe,He,function(e){var r=Te;Te=Te+16|0,F(e|=0),0|P(0|_e[1285],0)?Oe(4406,r):Te=r},Ye],$e=[function(e){return E(3),0},function(e){var r,t,n=Te;return Te=Te+16|0,r=n,e=0|(t=0|_e[(e|=0)+60>>2],0|(t|=0)),_e[r>>2]=e,e=0|Le(0|R(6,0|r)),Te=n,0|e}],Ze=[function(e,r,t){E(4)}],qe=[Ke,function(){var e,r,t,n,i=0,a=0,o=0,u=Te;Te=Te+48|0,n=u+32|0,r=u+24|0,o=u+16|0,u=(t=u)+36|0,0|(i=0|function(){var e=0,r=0;{if(Te=(e=Te)+16|0,!(0|C(5136,2)))return r=0|m(0|_e[1285]),Te=e,0|r;Oe(4307,e)}return 0}())&&0|(a=0|_e[i>>2])&&(1126902528==(-256&(e=0|_e[(i=a+48|0)>>2])|0)&1129074247==(0|(i=0|_e[i+4>>2]))||(_e[r>>2]=4168,Oe(4118,r)),i=1126902529==(0|e)&1129074247==(0|i)?0|_e[a+44>>2]:a+80|0,_e[u>>2]=i,a=0|_e[a>>2],i=0|_e[a+4>>2],0|ze[7&_e[16+(0|_e[2])>>2]](8,a,u)?(o=0|_e[u>>2],o=0|$e[1&_e[8+(0|_e[o>>2])>>2]](o),_e[t>>2]=4168,_e[t+4>>2]=i,_e[t+8>>2]=o,Oe(4032,t)):(_e[o>>2]=4168,_e[o+4>>2]=i,Oe(4077,o))),Oe(4156,n)},function(){var e=Te;Te=Te+16|0,0|y(5140,6)?Oe(4356,e):Te=e},Ke],Qe=[Be,function(e,r,t,n,i,a){t|=0,n|=0,i|=0,0|we(e|=0,0|_e[(r|=0)+8>>2])&&ae(0,r,t,n,i)},function(e,r,t,n,i,a){t|=0,n|=0,i|=0,a|=0,0|we(e|=0,0|_e[(r|=0)+8>>2])?ae(0,r,t,n,i):(e=0|_e[e+8>>2],Qe[3&_e[20+(0|_e[e>>2])>>2]](e,r,t,n,i,a))},Be],er=[We,function(e,r,t,n){t|=0,n|=0,0|we(e|=0,0|_e[(r|=0)+8>>2])&&le(0,r,t,n)},function(e,r,t,n){t|=0,n|=0,0|we(e|=0,0|_e[(r|=0)+8>>2])?le(0,r,t,n):(e=0|_e[e+8>>2],er[3&_e[28+(0|_e[e>>2])>>2]](e,r,t,n))},We];return{stackSave:function(){return 0|Te},_i64Subtract:ve,_crn_get_bytes_per_block:function(e,r){e|=0,r|=0;var t,n,i=0,a=Te;switch(Te=Te+576|0,n=a+40|0,t=a+56|0,_e[(i=a)>>2]=40,q(e,r,i),e=0|_e[(r=i+32|0)+4>>2],0|_e[r>>2]){case 0:if(!e)return Te=a,0|(i=8);e=14;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:e=e?14:13;break;case 9:case 10:if(!e)return Te=a,0|(i=8);e=14;break;default:e=14}return 13==(0|e)?(Te=a,0|(i=16)):14==(0|e)?(_e[n>>2]=866,_e[4+n>>2]=2672,_e[8+n>>2]=1251,Ce(t,812,n),Me(t),Te=a,(i=0)|i):0},setThrew:function(e,r){},dynCall_viii:function(e,r,t,n){r|=0,t|=0,n|=0,Ze[0&(e|=0)](0|r,0|t,0|n)},_bitshift64Lshr:ye,_bitshift64Shl:Ne,dynCall_viiii:function(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0,er[3&(e|=0)](0|r,0|t,0|n,0|i)},setTempRet0:function(e){L=e|=0},_crn_decompress:function(e,r,t,n,i,a){e|=0,r|=0,t|=0,n|=0,i|=0,a|=0;var o,u,f,l=0,s=0,c=0,_=0,d=0,E=Te;switch(Te=Te+592|0,f=E+56|0,c=E+40|0,o=E+72|0,u=(d=E)+68|0,_e[d>>2]=40,q(e,r,d),l=(0|_e[d+4>>2])>>>i,s=(0|_e[d+8>>2])>>>i,n=0|_e[(d=d+32|0)+4>>2],0|_e[d>>2]){case 0:n?_=14:d=8;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:_=n?14:13;break;case 9:case 10:n?_=14:d=8;break;default:_=14}13==(0|_)?d=16:14==(0|_)&&(_e[c>>2]=866,_e[c+4>>2]=2672,_e[c+8>>2]=1251,Ce(o,812,c),Me(o),d=0),_e[u>>2]=t,_=0|function(e,r){var t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0;if(Te=(_=Te)+528|0,u=(s=_)+16|0,0==(0|(e|=0))|(r|=0)>>>0<62)return Te=_,(d=0)|d;if(!(f=0|te(300,0)))return Te=_,(d=0)|d;_e[f>>2]=519686845,_e[4+f>>2]=0,_e[8+f>>2]=0,l=88+f|0,t=136+f|0,n=160+f|0,i=184+f|0,a=208+f|0,o=232+f|0,_e[(c=252+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,_e[(c=268+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,_e[(c=284+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,d=44+(c=l)|0;for(;_e[c>>2]=0,c=c+4|0,(0|c)<(0|d););if(ce[44+l>>0]=0,_e[t>>2]=0,_e[4+t>>2]=0,_e[8+t>>2]=0,_e[12+t>>2]=0,_e[16+t>>2]=0,ce[20+t>>0]=0,_e[n>>2]=0,_e[4+n>>2]=0,_e[8+n>>2]=0,_e[12+n>>2]=0,_e[16+n>>2]=0,ce[20+n>>0]=0,_e[i>>2]=0,_e[4+i>>2]=0,_e[8+i>>2]=0,_e[12+i>>2]=0,_e[16+i>>2]=0,ce[20+i>>0]=0,_e[a>>2]=0,_e[4+a>>2]=0,_e[8+a>>2]=0,_e[12+a>>2]=0,_e[16+a>>2]=0,ce[20+a>>0]=0,_e[o>>2]=0,_e[4+o>>2]=0,_e[8+o>>2]=0,_e[12+o>>2]=0,ce[16+o>>0]=0,0|function(e,r,t){e|=0;var n=0,i=0;if(!(0==(0|(r|=0))|(t|=0)>>>0<74||18552!=((0|de[r>>0])<<8|0|de[r+1>>0]|0))&&74<=((0|de[r+2>>0])<<8|0|de[r+3>>0])>>>0&&((0|de[r+7>>0])<<16|(0|de[r+6>>0])<<24|(0|de[r+8>>0])<<8|0|de[r+9>>0])>>>0<=t>>>0){if(_e[(n=e+88|0)>>2]=r,_e[e+4>>2]=r,_e[e+8>>2]=t,!(0|function(e){var r=0,t=0,n=0,i=0;if(i=92+(e|=0)|0,t=0|_e[(n=e+88|0)>>2],r=(0|_e[e+4>>2])+((0|de[68+t>>0])<<8|(0|de[67+t>>0])<<16|0|de[69+t>>0])|0,!(t=(0|de[65+t>>0])<<8|0|de[66+t>>0]))return(i=0)|i;if(_e[i>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,_e[e+112>>2]=0,!(0|V(i,e+116|0)))return(i=0)|i;r=0|_e[n>>2];do{if((0|de[r+39>>0])<<8|0|de[r+40>>0]){if(!(0|V(i,e+140|0)))return(i=0)|i;if(0|V(i,e+188|0)){r=0|_e[n>>2];break}return(i=0)|i}if(!((0|de[r+55>>0])<<8|0|de[r+56>>0]))return(i=0)|i}while(0);if((0|de[r+55>>0])<<8|0|de[r+56>>0]|0){if(!(0|V(i,e+164|0)))return(i=0)|i;if(!(0|V(i,e+212|0)))return(i=0)|i}return 0|(i=1)}(e)))return(i=0)|i;if(r=0|_e[n>>2],(0|de[r+39>>0])<<8|0|de[r+40>>0]?0|function(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0;if(Te=(d=Te)+576|0,i=(o=d)+64|0,_=d+16|0,r=0|_e[(n=88+(e|=0)|0)>>2],c=(0|de[r+39>>0])<<8|0|de[r+40>>0],l=e+236|0,(0|(t=0|_e[(a=e+240|0)>>2]))!=(0|c)){if(t>>>0<=c>>>0){do{if((0|_e[e+244>>2])>>>0<c>>>0){if(0|X(l,c,(t+1|0)==(0|c),4,0)){r=0|_e[a>>2];break}return ce[e+248>>0]=1,Te=d,(_=0)|_}}while(r=t,0);ne((0|_e[l>>2])+(r<<2)|0,0,c-r<<2|0),r=0|_e[n>>2]}_e[a>>2]=c}if(s=e+92|0,t=(0|_e[e+4>>2])+((0|de[r+34>>0])<<8|(0|de[r+33>>0])<<16|0|de[r+35>>0])|0,!(r=(0|de[r+37>>0])<<8|(0|de[r+36>>0])<<16|0|de[r+38>>0]))return Te=d,(_=0)|_;if(_e[s>>2]=t,_e[e+96>>2]=t,_e[e+104>>2]=r,_e[e+100>>2]=t+r,_e[e+108>>2]=0,_e[e+112>>2]=0,u=_+20|0,_e[_>>2]=0,_e[_+4>>2]=0,_e[_+8>>2]=0,_e[_+12>>2]=0,ce[_+16>>0]=0,f=_+24|0,_e[_+44>>2]=0,_e[u>>2]=0,_e[u+4>>2]=0,_e[u+8>>2]=0,_e[u+12>>2]=0,_e[u+16>>2]=0,ce[u+20>>0]=0,0|V(s,_)&&0|V(s,f))if(0|_e[a>>2]||(_e[o>>2]=866,_e[o+4>>2]=910,_e[o+8>>2]=1497,Ce(i,812,o),Me(i)),c)for(t=(u=o=0)|_e[l>>2],a=i=r=e=n=0;;){if(o=(0|Ae(s,_))+o&31,a=(0|Ae(s,f))+a&63,i=(0|Ae(s,_))+i&31,r=(0|Ae(s,_))+r|0,e=(0|Ae(s,f))+e&63,n=(0|Ae(s,_))+n&31,_e[t>>2]=a<<5|o<<11|i|r<<27|e<<21|n<<16,c>>>0<=(u=u+1|0)>>>0){r=1;break}t=t+4|0,r&=31}else r=1;else r=0;return re(_+24|0),re(_),Te=d,0|(_=r)}(e)&&0|function(e){var r,t,n,i,a,o,u,f,l,s,c,_,d,E,T,A,M,b,m,S,P,R,h,p,C,N,y,O,v,k=0,g=0,L=0,I=0,D=0,w=0,G=0,F=0,x=0,B=Te;if(Te=Te+1008|0,D=(w=B)+496|0,F=B+472|0,E=B+276|0,T=B+80|0,A=B+16|0,g=0|_e[(e|=0)+88>>2],_=(0|de[g+47>>0])<<8|0|de[g+48>>0],d=e+92|0,k=(0|_e[e+4>>2])+((0|de[g+42>>0])<<8|(0|de[g+41>>0])<<16|0|de[g+43>>0])|0,!(g=(0|de[g+45>>0])<<8|(0|de[g+44>>0])<<16|0|de[g+46>>0]))return Te=B,(F=0)|F;if(_e[d>>2]=k,_e[e+96>>2]=k,_e[e+104>>2]=g,_e[e+100>>2]=k+g,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[F+20>>2]=0,_e[F>>2]=0,_e[F+4>>2]=0,_e[F+8>>2]=0,_e[F+12>>2]=0,(ce[F+16>>0]=0)|V(d,F)){for(k=0,L=g=-3;_e[E+(k<<2)>>2]=L,_e[T+(k<<2)>>2]=g,I=2<(0|L),49!=(0|(k=k+1|0));)g=(1&I)+g|0,L=I?-3:L+1|0;for(k=A,g=k+64|0;k=k+4|(_e[k>>2]=0),(0|k)<(0|g););L=e+252|0,k=0|_e[(g=e+256|0)>>2];e:do{if((0|k)==(0|_))G=13;else{if(k>>>0<=_>>>0){do{if((0|_e[e+260>>2])>>>0<_>>>0){if(0|X(L,_,(k+1|0)==(0|_),4,0)){k=0|_e[g>>2];break}ce[e+264>>0]=1,k=0;break e}}while(0);ne((0|_e[L>>2])+(k<<2)|0,0,_-k<<2|0)}_e[g>>2]=_,G=13}}while(0);do{if(13==(0|G)){if(!_){_e[w>>2]=866,_e[w+4>>2]=910,_e[w+8>>2]=1497,Ce(D,812,w),Me(D),k=1;break}for(e=4+A|0,D=8+A|0,w=12+A|0,G=16+A|0,r=20+A|0,t=24+A|0,n=28+A|0,i=32+A|0,a=36+A|0,o=40+A|0,u=44+A|0,f=48+A|0,l=52+A|0,s=56+A|0,c=60+A|0,k=(I=0)|_e[L>>2],g=0|_e[e>>2],L=0|_e[A>>2];v=0|Ae(d,F),L=L+(0|_e[E+(v<<2)>>2])&3,g=g+(0|_e[T+(v<<2)>>2])&3,v=0|Ae(d,F),x=(0|_e[D>>2])+(0|_e[E+(v<<2)>>2])&3,_e[D>>2]=x,v=(0|_e[w>>2])+(0|_e[T+(v<<2)>>2])&3,_e[w>>2]=v,y=0|Ae(d,F),O=(0|_e[G>>2])+(0|_e[E+(y<<2)>>2])&3,_e[G>>2]=O,y=(0|_e[r>>2])+(0|_e[T+(y<<2)>>2])&3,_e[r>>2]=y,C=0|Ae(d,F),N=(0|_e[t>>2])+(0|_e[E+(C<<2)>>2])&3,_e[t>>2]=N,C=(0|_e[n>>2])+(0|_e[T+(C<<2)>>2])&3,_e[n>>2]=C,h=0|Ae(d,F),p=(0|_e[i>>2])+(0|_e[E+(h<<2)>>2])&3,_e[i>>2]=p,h=(0|_e[a>>2])+(0|_e[T+(h<<2)>>2])&3,_e[a>>2]=h,P=0|Ae(d,F),R=(0|_e[o>>2])+(0|_e[E+(P<<2)>>2])&3,_e[o>>2]=R,P=(0|_e[u>>2])+(0|_e[T+(P<<2)>>2])&3,_e[u>>2]=P,m=0|Ae(d,F),S=(0|_e[f>>2])+(0|_e[E+(m<<2)>>2])&3,_e[f>>2]=S,m=(0|_e[l>>2])+(0|_e[T+(m<<2)>>2])&3,_e[l>>2]=m,M=0|Ae(d,F),b=(0|_e[s>>2])+(0|_e[E+(M<<2)>>2])&3,_e[s>>2]=b,M=(0|_e[c>>2])+(0|_e[T+(M<<2)>>2])&3,_e[c>>2]=M,_e[k>>2]=(0|de[1441+g>>0])<<2|0|de[1441+L>>0]|(0|de[1441+x>>0])<<4|(0|de[1441+v>>0])<<6|(0|de[1441+O>>0])<<8|(0|de[1441+y>>0])<<10|(0|de[1441+N>>0])<<12|(0|de[1441+C>>0])<<14|(0|de[1441+p>>0])<<16|(0|de[1441+h>>0])<<18|(0|de[1441+R>>0])<<20|(0|de[1441+P>>0])<<22|(0|de[1441+S>>0])<<24|(0|de[1441+m>>0])<<26|(0|de[1441+b>>0])<<28|(0|de[1441+M>>0])<<30,!(_>>>0<=(I=I+1|0)>>>0);)k=k+4|0;_e[A>>2]=L,_e[e>>2]=g,k=1}}while(0)}else k=0;return re(F),Te=B,0|(x=k)}(e)&&(r=0|_e[n>>2],i=11):i=11,11==(0|i)){if(!((0|de[r+55>>0])<<8|0|de[r+56>>0]))return 0|(i=1);if(0|function(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+560|0,n=(i=l)+40|0,f=l+16|0,t=0|_e[88+(e|=0)>>2],o=(0|de[t+55>>0])<<8|0|de[t+56>>0],u=e+92|0,r=(0|_e[e+4>>2])+((0|de[t+50>>0])<<8|(0|de[t+49>>0])<<16|0|de[t+51>>0])|0,!(t=(0|de[t+53>>0])<<8|(0|de[t+52>>0])<<16|0|de[t+54>>0]))return Te=l,(f=0)|f;_e[u>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[f+20>>2]=0,_e[f>>2]=0,_e[f+4>>2]=0,_e[f+8>>2]=0,_e[f+12>>2]=0,ce[f+16>>0]=0;e:do{if(0|V(u,f)){if(a=e+268|0,(0|(r=0|_e[(t=e+272|0)>>2]))!=(0|o)){if(r>>>0<=o>>>0){do{if((0|_e[e+276>>2])>>>0<o>>>0){if(0|X(a,o,(r+1|0)==(0|o),2,0)){r=0|_e[t>>2];break}ce[e+280>>0]=1,r=0;break e}}while(0);ne((0|_e[a>>2])+(r<<1)|0,0,o-r<<1|0)}_e[t>>2]=o}if(!o){_e[i>>2]=866,_e[i+4>>2]=910,_e[i+8>>2]=1497,Ce(n,812,i),Me(n),r=1;break}for(r=(n=e=t=0)|_e[a>>2];;){if(a=0|Ae(u,f),n=a+n&255,e=(0|Ae(u,f))+e&255,W[r>>1]=e<<8|n,o>>>0<=(t=t+1|0)>>>0){r=1;break}r=r+2|0}}else r=0}while(0);return re(f),Te=l,0|(f=r)}(e)&&0|function(e){var r,t,n,i,a,o,u,f,l,s,c,_,d,E,T,A,M,b,m,S,P,R=0,h=0,p=0,C=0,N=0,y=0,O=0,v=0,k=0,g=0,L=0,I=0,D=0,w=0,G=0,F=0,x=0,B=0,U=0,H=Te;if(Te=Te+2416|0,N=(y=H)+1904|0,B=H+1880|0,b=H+980|0,m=H+80|0,S=H+16|0,h=0|_e[(e|=0)+88>>2],A=(0|de[h+63>>0])<<8|0|de[h+64>>0],M=e+92|0,R=(0|_e[e+4>>2])+((0|de[h+58>>0])<<8|(0|de[h+57>>0])<<16|0|de[h+59>>0])|0,!(h=(0|de[h+61>>0])<<8|(0|de[h+60>>0])<<16|0|de[h+62>>0]))return Te=H,(B=0)|B;if(_e[M>>2]=R,_e[e+96>>2]=R,_e[e+104>>2]=h,_e[e+100>>2]=R+h,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[B+20>>2]=0,_e[B>>2]=0,_e[B+4>>2]=0,_e[B+8>>2]=0,_e[B+12>>2]=0,(ce[B+16>>0]=0)|V(M,B)){for(R=0,p=h=-7;_e[b+(R<<2)>>2]=p,_e[m+(R<<2)>>2]=h,C=6<(0|p),225!=(0|(R=R+1|0));)h=(1&C)+h|0,p=C?-7:p+1|0;for(R=S,h=R+64|0;R=R+4|(_e[R>>2]=0),(0|R)<(0|h););C=e+284|0,h=3*A|0,R=0|_e[(p=e+288|0)>>2];e:do{if((0|R)==(0|h))O=13;else{if(R>>>0<=h>>>0){do{if((0|_e[e+292>>2])>>>0<h>>>0){if(0|X(C,h,(R+1|0)==(0|h),2,0)){R=0|_e[p>>2];break}ce[e+296>>0]=1,R=0;break e}}while(0);ne((0|_e[C>>2])+(R<<1)|0,0,h-R<<1|0)}_e[p>>2]=h,O=13}}while(0);do{if(13==(0|O)){if(!A){_e[y>>2]=866,_e[y+4>>2]=910,_e[y+8>>2]=1497,Ce(N,812,y),Me(N),R=1;break}for(r=4+S|0,t=8+S|0,n=12+S|0,i=16+S|0,a=20+S|0,o=24+S|0,u=28+S|0,f=32+S|0,l=36+S|0,s=40+S|0,c=44+S|0,_=48+S|0,d=52+S|0,E=56+S|0,T=60+S|0,R=(x=0)|_e[C>>2],h=0|_e[S>>2],p=0|_e[r>>2],C=0|_e[t>>2],e=0|_e[n>>2],N=0|_e[i>>2],y=0|_e[a>>2],O=0|_e[o>>2],v=0|_e[u>>2],k=0|_e[f>>2],g=0|_e[l>>2],L=0|_e[s>>2],I=0|_e[c>>2],F=G=w=D=0;U=0|Ae(M,B),h=h+(0|_e[b+(U<<2)>>2])&7,p=p+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),C=C+(0|_e[b+(U<<2)>>2])&7,e=e+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),N=N+(0|_e[b+(U<<2)>>2])&7,y=y+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),O=O+(0|_e[b+(U<<2)>>2])&7,v=v+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),k=k+(0|_e[b+(U<<2)>>2])&7,g=g+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),L=L+(0|_e[b+(U<<2)>>2])&7,I=I+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),D=D+(0|_e[b+(U<<2)>>2])&7,w=w+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(M,B),G=G+(0|_e[b+(U<<2)>>2])&7,F=F+(0|_e[m+(U<<2)>>2])&7,U=0|de[1445+y>>0],W[R>>1]=(0|de[1445+p>>0])<<3|0|de[1445+h>>0]|(0|de[1445+C>>0])<<6|(0|de[1445+e>>0])<<9|(0|de[1445+N>>0])<<12|U<<15,P=0|de[1445+L>>0],W[R+2>>1]=(0|de[1445+O>>0])<<2|U>>>1|(0|de[1445+v>>0])<<5|(0|de[1445+k>>0])<<8|(0|de[1445+g>>0])<<11|P<<14,W[R+4>>1]=(0|de[1445+I>>0])<<1|P>>>2|(0|de[1445+D>>0])<<4|(0|de[1445+w>>0])<<7|(0|de[1445+G>>0])<<10|(0|de[1445+F>>0])<<13,!(A>>>0<=(x=x+1|0)>>>0);)R=R+6|0;_e[S>>2]=h,_e[r>>2]=p,_e[t>>2]=C,_e[n>>2]=e,_e[i>>2]=N,_e[a>>2]=y,_e[o>>2]=O,_e[u>>2]=v,_e[f>>2]=k,_e[l>>2]=g,_e[s>>2]=L,_e[c>>2]=I,_e[_>>2]=D,_e[d>>2]=w,_e[E>>2]=G,_e[T>>2]=F,R=1}}while(0)}else R=0;return re(B),Te=H,0|(U=R)}(e))return 0|(i=1)}return(i=0)|i}return _e[e+88>>2]=0,(i=0)|i}(f,e,r))return Te=_,0|(d=f);return U(f),Te=(7&f?(_e[s>>2]=866,_e[s+4>>2]=2506,_e[s+8>>2]=1232,Ce(u,812,s),Me(u)):ue(f,0,0,1,0),_),(d=0)|d}(e,r),r=a+i|0;do{if(i>>>0<r>>>0){if(!_){for(n=t;n=n+(0|ie(0|ie((l+3|0)>>>2,d),(s+3|0)>>>2))|0,(0|(i=i+1|0))!=(0|r);)s>>>=1,l>>>=1;_e[u>>2]=n;break}for(e=s,n=t;s=0|ie((l+3|0)>>>2,d),15<i>>>0|(c=0|ie(s,(e+3|0)>>>2))>>>0<8||519686845!=(0|_e[_>>2])||(function(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0;var a=0,o=0,u=0,f=0,l=0,s=0;Te=(s=Te)+528|0,f=(l=s)+16|0,o=0|_e[88+(e|=0)>>2],u=(0|de[70+o+(i<<2)+1>>0])<<16|(0|de[70+o+(i<<2)>>0])<<24|(0|de[70+o+(i<<2)+2>>0])<<8|0|de[70+o+(i<<2)+3>>0],a=(a=i+1|0)>>>0<(0|de[16+o>>0])>>>0?(0|de[70+o+(a<<2)+1>>0])<<16|(0|de[70+o+(a<<2)>>0])<<24|(0|de[70+o+(a<<2)+2>>0])<<8|0|de[70+o+(a<<2)+3>>0]:0|_e[e+8>>2];if(u>>>0<a>>>0)return f=0|_e[(f=e+4|0)>>2],l=0|Y(e,f=f+u|0,l=a-u|0,r,t,n,i),Te=s;_e[l>>2]=866,_e[l+4>>2]=3694,_e[l+8>>2]=1508,Ce(f,812,l),Me(f),f=0|_e[(f=e+4|0)>>2],l=0|Y(e,f=f+u|0,l=a-u|0,r,t,n,i),Te=s}(_,u,c,s,i),n=0|_e[u>>2]),n=n+c|0,_e[u>>2]=n,(0|(i=i+1|0))!=(0|r);)e>>>=1,l>>>=1}}while(0);Te=(_&&519686845==(0|_e[_>>2])&&(U(_),7&_?(_e[f>>2]=866,_e[4+f>>2]=2506,_e[8+f>>2]=1232,Ce(o,812,f),Me(o)):ue(_,0,0,1,0)),E)},_memset:ne,_sbrk:me,_memcpy:K,stackAlloc:function(e){var r=Te;return Te=(Te=Te+(e|=0)|0)+15&-16,0|r},_crn_get_height:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+8>>2]},dynCall_vi:function(e,r){r|=0,Je[7&(e|=0)](0|r)},getTempRet0:function(){return 0|L},_crn_get_levels:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+12>>2]},_crn_get_uncompressed_size:function(e,r,t){e|=0,r|=0,t|=0;var n,i,a,o,u=0,f=Te;switch(Te=Te+576|0,a=f+40|0,i=f+56|0,_e[(o=f)>>2]=40,q(e,r,o),n=(3+((0|_e[o+4>>2])>>>t)|0)>>>2,r=(3+((0|_e[o+8>>2])>>>t)|0)>>>2,e=0|_e[(t=o+32|0)+4>>2],0|_e[t>>2]){case 0:e?u=14:e=8;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:u=e?14:13;break;case 9:case 10:e?u=14:e=8;break;default:u=14}return 13==(0|u)?e=16:14==(0|u)&&(_e[a>>2]=866,_e[4+a>>2]=2672,_e[8+a>>2]=1251,Ce(i,812,a),Me(i),e=0),o=0|ie(0|ie(r,n),e),Te=f,0|o},_i64Add:ge,dynCall_iiii:function(e,r,t,n){return r|=0,t|=0,n|=0,0|ze[7&(e|=0)](0|r,0|t,0|n)},_emscripten_get_global_libc:function(){return 5072},dynCall_ii:function(e,r){return r|=0,0|$e[1&(e|=0)](0|r)},___udivdi3:Fe,_llvm_bswap_i32:xe,dynCall_viiiii:function(e,r,t,n,i,a){r|=0,t|=0,n|=0,i|=0,a|=0,je[3&(e|=0)](0|r,0|t,0|n,0|i,0|a)},___cxa_can_catch:function(e,r,t){e|=0,r|=0,t|=0;var n,i=Te;return Te=Te+16|0,_e[(n=i)>>2]=_e[t>>2],(e=0|ze[7&_e[16+(0|_e[e>>2])>>2]](e,r,n))&&(_e[t>>2]=_e[n>>2]),Te=i,1&e|0},_free:F,runPostSets:function(){},dynCall_viiiiii:function(e,r,t,n,i,a,o){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,Qe[3&(e|=0)](0|r,0|t,0|n,0|i,0|a,0|o)},establishStackSpace:function(e,r){Te=e|=0},___uremdi3:he,___cxa_is_pointer_type:function(e){return 1&(e=(e|=0)?0!=(0|J(e,32,88,0)):0)|0},stackRestore:function(e){Te=e|=0},_malloc:I,_emscripten_replace_memory:function(e){return!(16777215&c(e)||c(e)<=16777215||2147483648<c(e))&&(ce=new n(e),W=new i(e),_e=new a(e),de=new o(e),Ee=new u(e),new f(e),new l(e),k=new s(e),!0)},dynCall_v:function(e){qe[3&(e|=0)]()},_crn_get_width:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+4>>2]},_crn_get_dxt_format:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+32>>2]}}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module.stackSave=asm.stackSave,Module.getTempRet0=asm.getTempRet0,Module._memset=asm._memset,Module.setThrew=asm.setThrew,Module._bitshift64Lshr=asm._bitshift64Lshr,Module._bitshift64Shl=asm._bitshift64Shl,Module.setTempRet0=asm.setTempRet0,Module._crn_decompress=asm._crn_decompress,Module._crn_get_bytes_per_block=asm._crn_get_bytes_per_block,Module._sbrk=asm._sbrk,Module._memcpy=asm._memcpy,Module.stackAlloc=asm.stackAlloc,Module._crn_get_height=asm._crn_get_height,Module._i64Subtract=asm._i64Subtract,Module._crn_get_levels=asm._crn_get_levels,Module._crn_get_uncompressed_size=asm._crn_get_uncompressed_size,Module._i64Add=asm._i64Add,Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,Module.___udivdi3=asm.___udivdi3,Module._llvm_bswap_i32=asm._llvm_bswap_i32,Module.___cxa_can_catch=asm.___cxa_can_catch;var _free=Module._free=asm._free;Module.runPostSets=asm.runPostSets,Module.establishStackSpace=asm.establishStackSpace,Module.___uremdi3=asm.___uremdi3,Module.___cxa_is_pointer_type=asm.___cxa_is_pointer_type,Module.stackRestore=asm.stackRestore;var _malloc=Module._malloc=asm._malloc,_emscripten_replace_memory=Module._emscripten_replace_memory=asm._emscripten_replace_memory,initialStackTop;function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function run(e){function r(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,0<runDependencies||(preRun(),0<runDependencies||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),r()},1)):r()))}function exit(e,r){r&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(e)),ENVIRONMENT_IS_NODE&&process.exit(e),Module.quit(e,new ExitStatus(e)))}Module._crn_get_width=asm._crn_get_width,Module._crn_get_dxt_format=asm._crn_get_dxt_format,Module.dynCall_iiii=asm.dynCall_iiii,Module.dynCall_viiiii=asm.dynCall_viiiii,Module.dynCall_vi=asm.dynCall_vi,Module.dynCall_ii=asm.dynCall_ii,Module.dynCall_viii=asm.dynCall_viii,Module.dynCall_v=asm.dynCall_v,Module.dynCall_viiiiii=asm.dynCall_viiiiii,Module.dynCall_viiii=asm.dynCall_viiii,Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus,dependenciesFulfilled=function e(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=e)},Module.callMain=Module.callMain=function(e){e=e||[],ensureInitRuntime();var r=e.length+1;function t(){for(var e=0;e<3;e++)n.push(0)}var n=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];t();for(var i=0;i<r-1;i+=1)n.push(allocate(intArrayFromString(e[i]),"i8",ALLOC_NORMAL)),t();n.push(0),n=allocate(n,"i32",ALLOC_NORMAL);try{exit(Module._main(r,n,0),!0)}catch(e){if(e instanceof ExitStatus)return;if("SimulateInfiniteLoop"==e)return void(Module.noExitRuntime=!0);var a=e;e&&"object"==typeof e&&e.stack&&(a=[e,e.stack]),Module.printErr("exception thrown: "+a),Module.quit(1,e)}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];function abort(r){Module.onAbort&&Module.onAbort(r),r=void 0!==r?(Module.print(r),Module.printErr(r),JSON.stringify(r)):"",ABORT=!0;var t="abort("+r+") at "+stackTrace()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw abortDecorators&&abortDecorators.forEach(function(e){t=e(t,r)}),t}if(Module.abort=Module.abort=abort,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);0<Module.preInit.length;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),Module.noExitRuntime=!0,run();var crunch=Module,CRN_FORMAT={cCRNFmtInvalid:-1,cCRNFmtDXT1:0,cCRNFmtDXT3:1,cCRNFmtDXT5:2},DXT_FORMAT_MAP={},dst,dxtData;DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1]=PixelFormat$1.RGB_DXT1,DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3]=PixelFormat$1.RGBA_DXT3,DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5]=PixelFormat$1.RGBA_DXT5;var cachedDstSize=0;function arrayBufferCopy(e,r,t,n){for(var i=t/4,a=n%4,o=new Uint32Array(e.buffer,0,(n-a)/4),u=new Uint32Array(r.buffer),f=0;f<o.length;f++)u[i+f]=o[f];for(f=n-a;f<n;f++)r[t+f]=e[f]}function transcodeCRNToDXT(e,r){var t=e.byteLength,n=new Uint8Array(e),e=crunch._malloc(t);arrayBufferCopy(n,crunch.HEAPU8,e,t);var n=crunch._crn_get_dxt_format(e,t),i=DXT_FORMAT_MAP[n];if(!when.defined(i))throw new RuntimeError.RuntimeError("Unsupported compressed format.");for(var a=crunch._crn_get_levels(e,t),o=crunch._crn_get_width(e,t),u=crunch._crn_get_height(e,t),f=0,l=0;l<a;++l)f+=PixelFormat$1.compressedTextureSizeInBytes(i,o>>l,u>>l);cachedDstSize<f&&(when.defined(dst)&&crunch._free(dst),dst=crunch._malloc(f),dxtData=new Uint8Array(crunch.HEAPU8.buffer,dst,f),cachedDstSize=f),crunch._crn_decompress(e,t,dst,f,0,a),crunch._free(e);t=PixelFormat$1.compressedTextureSizeInBytes(i,o,u),e=dxtData.subarray(0,t),t=new Uint8Array(t);return t.set(e,0),r.push(t.buffer),new CompressedTextureBuffer(i,o,u,t)}var transcodeCRNToDXT$1=createTaskProcessorWorker(transcodeCRNToDXT);return transcodeCRNToDXT$1}); diff --git a/public/lib/Cesium/Workers/transferTypedArrayTest.js b/public/lib/Cesium/Workers/transferTypedArrayTest.js new file mode 100644 index 0000000..0a6642b --- /dev/null +++ b/public/lib/Cesium/Workers/transferTypedArrayTest.js @@ -0,0 +1 @@ +"undefined"==typeof self&&(self={}),self.onmessage=function(e){var s=e.data.array,a=self.webkitPostMessage||self.postMessage;try{a({array:s},[s.buffer])}catch(e){a({})}}; \ No newline at end of file diff --git a/public/lib/Cesium/Workers/upsampleQuantizedTerrainMesh.js b/public/lib/Cesium/Workers/upsampleQuantizedTerrainMesh.js new file mode 100644 index 0000000..e4dc979 --- /dev/null +++ b/public/lib/Cesium/Workers/upsampleQuantizedTerrainMesh.js @@ -0,0 +1 @@ +define(["./AttributeCompression-a99f24b9","./Transforms-5295b227","./Cartesian2-5b63e672","./when-ca391574","./TerrainEncoding-0f94e395","./IndexDatatype-4e56bcfa","./Check-64f87f7d","./Math-b53708b3","./OrientedBoundingBox-e61df120","./createTaskProcessorWorker","./RuntimeError-19cb26ba","./ComponentDatatype-8f71e605","./WebGLConstants-95ceb4e9","./EllipsoidTangentPlane-0fb66b96","./IntersectionTests-f5111308","./Plane-99b2becd"],function(s,oe,ae,c,pe,de,e,fe,le,t,i,n,r,h,u,o){"use strict";var ge={clipTriangleAtAxisAlignedThreshold:function(e,t,i,n,s,r){var h,u;c.defined(r)?r.length=0:r=[];var o,a,p,d,f,l,g=t?(h=i<e,u=n<e,s<e):(h=e<i,u=e<n,e<s),t=h+u+g;return 1===t?h?(o=(e-i)/(n-i),a=(e-i)/(s-i),r.push(1),r.push(2),1!==a&&(r.push(-1),r.push(0),r.push(2),r.push(a)),1!==o&&(r.push(-1),r.push(0),r.push(1),r.push(o))):u?(p=(e-n)/(s-n),d=(e-n)/(i-n),r.push(2),r.push(0),1!==d&&(r.push(-1),r.push(1),r.push(0),r.push(d)),1!==p&&(r.push(-1),r.push(1),r.push(2),r.push(p))):g&&(f=(e-s)/(i-s),l=(e-s)/(n-s),r.push(0),r.push(1),1!==l&&(r.push(-1),r.push(2),r.push(1),r.push(l)),1!==f&&(r.push(-1),r.push(2),r.push(0),r.push(f))):2===t?h||i===e?u||n===e?g||s===e||(a=(e-i)/(s-i),p=(e-n)/(s-n),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(a),r.push(-1),r.push(1),r.push(2),r.push(p)):(l=(e-s)/(n-s),o=(e-i)/(n-i),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(l),r.push(-1),r.push(0),r.push(1),r.push(o)):(d=(e-n)/(i-n),f=(e-s)/(i-s),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(d),r.push(-1),r.push(2),r.push(0),r.push(f)):3!==t&&(r.push(0),r.push(1),r.push(2)),r},computeBarycentricCoordinates:function(e,t,i,n,s,r,h,u,o){var a=i-h,i=h-s,s=r-u,r=n-u,n=1/(s*a+i*r),u=t-u,h=e-h,i=(s*h+i*u)*n,u=(-r*h+a*u)*n,n=1-i-u;return c.defined(o)?(o.x=i,o.y=u,o.z=n,o):new ae.Cartesian3(i,u,n)},computeLineSegmentLineSegmentIntersection:function(e,t,i,n,s,r,h,u,o){var a=(h-s)*(t-r)-(u-r)*(e-s),p=(i-e)*(t-r)-(n-t)*(e-s),s=(u-r)*(i-e)-(h-s)*(n-t);if(0!=s){a=a/s,s=p/s;return 0<=a&&a<=1&&0<=s&&s<=1?((o=!c.defined(o)?new ae.Cartesian2:o).x=e+a*(i-e),o.y=t+a*(n-t),o):void 0}}},ce=32767,me=16383,xe=[],we=[],Ce=[],ve=new ae.Cartographic,ye=new ae.Cartesian3,Be=[],be=[],Ie=[],Ae=[],Te=[],ze=new ae.Cartesian3,Me=new oe.BoundingSphere,Ne=new le.OrientedBoundingBox,Ve=new ae.Cartesian2,Ee=new ae.Cartesian3;function Re(){this.vertexBuffer=void 0,this.index=void 0,this.first=void 0,this.second=void 0,this.ratio=void 0}Re.prototype.clone=function(e){return(e=!c.defined(e)?new Re:e).uBuffer=this.uBuffer,e.vBuffer=this.vBuffer,e.heightBuffer=this.heightBuffer,e.normalBuffer=this.normalBuffer,e.index=this.index,e.first=this.first,e.second=this.second,e.ratio=this.ratio,e},Re.prototype.initializeIndexed=function(e,t,i,n,s){this.uBuffer=e,this.vBuffer=t,this.heightBuffer=i,this.normalBuffer=n,this.index=s,this.first=void 0,this.second=void 0,this.ratio=void 0},Re.prototype.initializeFromClipResult=function(e,t,i){var n=t+1;return-1!==e[t]?i[e[t]].clone(this):(this.vertexBuffer=void 0,this.index=void 0,this.first=i[e[n]],++n,this.second=i[e[n]],++n,this.ratio=e[n],++n),n},Re.prototype.getKey=function(){return this.isIndexed()?this.index:JSON.stringify({first:this.first.getKey(),second:this.second.getKey(),ratio:this.ratio})},Re.prototype.isIndexed=function(){return c.defined(this.index)},Re.prototype.getH=function(){return c.defined(this.index)?this.heightBuffer[this.index]:fe.CesiumMath.lerp(this.first.getH(),this.second.getH(),this.ratio)},Re.prototype.getU=function(){return c.defined(this.index)?this.uBuffer[this.index]:fe.CesiumMath.lerp(this.first.getU(),this.second.getU(),this.ratio)},Re.prototype.getV=function(){return c.defined(this.index)?this.vBuffer[this.index]:fe.CesiumMath.lerp(this.first.getV(),this.second.getV(),this.ratio)};var a=new ae.Cartesian2,p=-1,d=[new ae.Cartesian3,new ae.Cartesian3],f=[new ae.Cartesian3,new ae.Cartesian3];function l(e,t){var i=d[++p],n=f[p],i=s.AttributeCompression.octDecode(e.first.getNormalX(),e.first.getNormalY(),i),n=s.AttributeCompression.octDecode(e.second.getNormalX(),e.second.getNormalY(),n);return ye=ae.Cartesian3.lerp(i,n,e.ratio,ye),ae.Cartesian3.normalize(ye,ye),s.AttributeCompression.octEncode(ye,t),--p,t}Re.prototype.getNormalX=function(){return c.defined(this.index)?this.normalBuffer[2*this.index]:(a=l(this,a)).x},Re.prototype.getNormalY=function(){return c.defined(this.index)?this.normalBuffer[2*this.index+1]:(a=l(this,a)).y};var m=[];function He(e,t,i,n,s,r,h,u,o){if(0!==h.length){for(var a=0,p=0;p<h.length;)p=m[a++].initializeFromClipResult(h,p,u);for(var d=0;d<a;++d){var f,l,g=m[d];g.isIndexed()?(g.newIndex=r[g.index],g.uBuffer=e,g.vBuffer=t,g.heightBuffer=i,o&&(g.normalBuffer=n)):(f=g.getKey(),c.defined(r[f])?g.newIndex=r[f]:(l=e.length,e.push(g.getU()),t.push(g.getV()),i.push(g.getH()),o&&(n.push(g.getNormalX()),n.push(g.getNormalY())),g.newIndex=l,r[f]=l))}3===a?(s.push(m[0].newIndex),s.push(m[1].newIndex),s.push(m[2].newIndex)):4===a&&(s.push(m[0].newIndex),s.push(m[1].newIndex),s.push(m[2].newIndex),s.push(m[0].newIndex),s.push(m[2].newIndex),s.push(m[3].newIndex))}}return m.push(new Re),m.push(new Re),m.push(new Re),m.push(new Re),t(function(e,t){var i=e.isEastChild,n=e.isNorthChild,s=i?me:0,r=i?ce:me,h=n?me:0,u=n?ce:me,o=Be,a=be,p=Ie,d=Te;o.length=0,a.length=0,p.length=0,d.length=0;var f=Ae;f.length=0;for(var l={},g=e.vertices,c=(c=e.indices).subarray(0,e.indexCountWithoutSkirts),m=pe.TerrainEncoding.clone(e.encoding),x=m.hasVertexNormals,w=e.exaggeration,C=0,v=e.vertexCountWithoutSkirts,y=e.minimumHeight,B=e.maximumHeight,b=new Array(v),I=new Array(v),A=new Array(v),T=x?new Array(2*v):void 0,z=0,M=0;z<v;++z,M+=2){var N=m.decodeTextureCoordinates(g,z,Ve),V=m.decodeHeight(g,z)/w,E=fe.CesiumMath.clamp(N.x*ce|0,0,ce),R=fe.CesiumMath.clamp(N.y*ce|0,0,ce);A[z]=fe.CesiumMath.clamp((V-y)/(B-y)*ce|0,0,ce),ce-(E=E<20?0:E)<20&&(E=ce),ce-(R=R<20?0:R)<20&&(R=ce),b[z]=E,I[z]=R,x&&(N=m.getOctEncodedNormal(g,z,Ee),T[M]=N.x,T[M+1]=N.y),(i&&me<=E||!i&&E<=me)&&(n&&me<=R||!n&&R<=me)&&(l[z]=C,o.push(E),a.push(R),p.push(A[z]),x&&(d.push(T[M]),d.push(T[M+1])),++C)}var H=[];H.push(new Re),H.push(new Re),H.push(new Re);var O=[];for(O.push(new Re),O.push(new Re),O.push(new Re),z=0;z<c.length;z+=3){var S=c[z],U=c[z+1],F=c[z+2],P=b[S],k=b[U],D=b[F];H[0].initializeIndexed(b,I,A,T,S),H[1].initializeIndexed(b,I,A,T,U),H[2].initializeIndexed(b,I,A,T,F);k=ge.clipTriangleAtAxisAlignedThreshold(me,i,P,k,D,xe);k.length<=0||(D=O[0].initializeFromClipResult(k,0,H))>=k.length||(D=O[1].initializeFromClipResult(k,D,H))>=k.length||(D=O[2].initializeFromClipResult(k,D,H),He(o,a,p,d,f,l,ge.clipTriangleAtAxisAlignedThreshold(me,n,O[0].getV(),O[1].getV(),O[2].getV(),we),O,x),D<k.length&&(O[2].clone(O[1]),O[2].initializeFromClipResult(k,D,H),He(o,a,p,d,f,l,ge.clipTriangleAtAxisAlignedThreshold(me,n,O[0].getV(),O[1].getV(),O[2].getV(),we),O,x)))}var W=i?-ce:0,X=n?-ce:0,K=[],L=[],Y=[],_=[],G=Number.MAX_VALUE,J=-G,Z=Ce;Z.length=0;var j=ae.Ellipsoid.clone(e.ellipsoid),q=(ue=ae.Rectangle.clone(e.childRectangle)).north,Q=ue.south,$=ue.east,ee=ue.west;for($<ee&&($+=fe.CesiumMath.TWO_PI),z=0;z<o.length;++z)E=(E=Math.round(o[z]))<=s?(K.push(z),0):r<=E?(Y.push(z),ce):2*E+W,o[z]=E,R=(R=Math.round(a[z]))<=h?(L.push(z),0):u<=R?(_.push(z),ce):2*R+X,a[z]=R,(V=fe.CesiumMath.lerp(y,B,p[z]/ce))<G&&(G=V),J<V&&(J=V),p[z]=V,ve.longitude=fe.CesiumMath.lerp(ee,$,E/ce),ve.latitude=fe.CesiumMath.lerp(Q,q,R/ce),ve.height=V,j.cartographicToCartesian(ve,ye),Z.push(ye.x),Z.push(ye.y),Z.push(ye.z);var te=oe.BoundingSphere.fromVertices(Z,ae.Cartesian3.ZERO,3,Me),ie=le.OrientedBoundingBox.fromRectangle(ue,G,J,j,Ne),e=new pe.EllipsoidalOccluder(j).computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(te.center,Z,3,te.center,G,ze),ne=J-G,se=new Uint16Array(o.length+a.length+p.length);for(z=0;z<o.length;++z)se[z]=o[z];var re=o.length;for(z=0;z<a.length;++z)se[re+z]=a[z];for(re+=a.length,z=0;z<p.length;++z)se[re+z]=ce*(p[z]-G)/ne;var he,ue=de.IndexDatatype.createTypedArray(o.length,f);return x?(he=new Uint8Array(d),t.push(se.buffer,ue.buffer,he.buffer),he=he.buffer):t.push(se.buffer,ue.buffer),{vertices:se.buffer,encodedNormals:he,indices:ue.buffer,minimumHeight:G,maximumHeight:J,westIndices:K,southIndices:L,eastIndices:Y,northIndices:_,boundingSphere:te,orientedBoundingBox:ie,horizonOcclusionPoint:e}})}); diff --git a/public/lib/Cesium/Workers/when-ca391574.js b/public/lib/Cesium/Workers/when-ca391574.js new file mode 100644 index 0000000..f33fb7d --- /dev/null +++ b/public/lib/Cesium/Workers/when-ca391574.js @@ -0,0 +1 @@ +define(["exports"],function(n){"use strict";function r(n,r){return null!=n?n:r}var t,e,h;function j(n,r,t,e){return l(n).then(r,t,e)}function l(n){var r,t,n=n instanceof a?n:u(n)?(r=w(),n.then(function(n){r.resolve(n)},function(n){r.reject(n)},function(n){r.progress(n)}),r.promise):(t=n,new a(function(n){try{return l(n?n(t):t)}catch(n){throw n}}));return n}function a(n){this.then=n}function p(t){return new a(function(n,r){try{return r?l(r(t)):p(t)}catch(n){return p(n)}})}function w(){var n=new a(u),i=[],c=[],e=function(r,t,e){var u=w(),o="function"==typeof e?function(n){try{u.progress(e(n))}catch(n){u.progress(n)}}:function(n){u.progress(n)};return i.push(function(n){n.then(r,t).then(u.resolve,u.reject,o)}),c.push(o),u.promise},r=function(n){return v(c,n),n},t=function(n){return n=l(n),e=n.then,t=l,r=m,v(i,n),c=i=h,n};return{then:u,resolve:o,reject:f,progress:s,promise:n,resolver:{resolve:o,reject:f,progress:s}};function u(n,r,t){return e(n,r,t)}function o(n){return t(n)}function f(n){return t(p(n))}function s(n){return r(n)}}function u(n){return n&&"function"==typeof n.then}function o(n,p,v,g,y){return f(2,arguments),j(n,function(n){var r,t,e,u,o=n.length>>>0,i=Math.max(0,Math.min(p,o)),c=[],f=o-i+1,s=[],h=w();if(i)for(e=h.progress,t=function(n){s.push(n),--f||(r=t=m,h.reject(s))},r=function(n){c.push(n),--i||(r=t=m,h.resolve(c))},u=0;u<o;++u)u in n&&j(n[u],a,l,e);else h.resolve(c);return h.then(v,g,y);function l(n){t(n)}function a(n){r(n)}})}function i(n,r,t,e){return f(1,arguments),c(n,s).then(r,t,e)}function c(n,c){return j(n,function(n){var r,t,e,u=r=n.length>>>0,o=[],i=w();if(u)for(t=function(n,r){j(n,c).then(function(n){o[r]=n,--u||i.resolve(o)},i.reject)},e=0;e<r;e++)e in n?t(n[e],e):--u;else i.resolve(o);return i.promise})}function v(n,r){for(var t,e=0;t=n[e++];)t(r)}function f(n,r){for(var t,e=r.length;n<e;)if(null!=(t=r[--e])&&"function"!=typeof t)throw new Error("arg "+e+" must be a function")}function m(){}function s(n){return n}r.EMPTY_OBJECT=Object.freeze({}),j.defer=w,j.resolve=l,j.reject=function(n){return j(n,p)},j.join=function(){return c(arguments,s)},j.all=i,j.map=c,j.reduce=function(n,o){var r=e.call(arguments,1);return j(n,function(n){var u=n.length;return r[0]=function(n,t,e){return j(n,function(r){return j(t,function(n){return o(r,n,e,u)})})},t.apply(n,r)})},j.any=function(n,r,t,e){return o(n,1,function(n){return r?r(n[0]):n[0]},t,e)},j.some=o,j.chain=function(n,r,t){var e=2<arguments.length;return j(n,function(n){return n=e?t:n,r.resolve(n),n},function(n){return r.reject(n),p(n)},r.progress)},j.isPromise=u,a.prototype={always:function(n,r){return this.then(n,n,r)},otherwise:function(n){return this.then(h,n)},yield:function(n){return this.then(function(){return n})},spread:function(r){return this.then(function(n){return i(n,function(n){return r.apply(h,n)})})}},e=[].slice,t=[].reduce||function(n){var r,t=0,e=Object(this),u=e.length>>>0,o=arguments;if(o.length<=1)for(;;){if(t in e){r=e[t++];break}if(++t>=u)throw new TypeError}else r=o[1];for(;t<u;++t)t in e&&(r=n(r,e[t],t,e));return r},n.defaultValue=r,n.defined=function(n){return null!=n},n.when=j}); diff --git a/public/lib/admui/css/index.css b/public/lib/admui/css/index.css new file mode 100644 index 0000000..041f36e --- /dev/null +++ b/public/lib/admui/css/index.css @@ -0,0 +1,9969 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 14px; + line-height: 1.6; + color: #76838f; + background-color: #fff; +} +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #62a8ea; + text-decoration: none; +} +a:hover, a:focus { + color: #89bceb; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 4px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.6; + background-color: #fff; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 22px; + margin-bottom: 22px; + border: 0; + border-top: 1px solid #e4eaec; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +input, button, select, textarea { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; +} +a.text-action { + color: #a3afb7; +} +a.text-action, a.text-action:hover, a.text-action:focus { + text-decoration: none; +} +a.text-action:hover, a.text-action:focus { + color: #ccd5db; +} +a.text-action .icon + span { + margin-left: 3px; +} +a.text-like { + color: #a3afb7 !important; +} +a.text-like, a.text-like:hover, a.text-like:focus { + text-decoration: none; +} +a.text-like.active, a.text-like:hover, a.text-like:focus { + color: #f96868 !important; +} +.text-action + .text-action { + margin-left: 6px; +} +.img-bordered { + padding: 3px; + border: 1px solid #e4eaec; +} +.img-bordered-primary { + border-color: #62a8ea !important; +} +.img-bordered-purple { + border-color: #7c51d1 !important; +} +.img-bordered-red { + border-color: #e9595b !important; +} +.img-bordered-green { + border-color: #7dd3ae !important; +} +.img-bordered-orange { + border-color: #ec9940 !important; +} +html { + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +input, textarea, keygen, select, button { + outline: none; + + text-rendering: optimizeLegibility !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-weight: 500; +} +h1 .icon:first-child, h2 .icon:first-child, h3 .icon:first-child, h4 .icon:first-child, h5 .icon:first-child, h6 .icon:first-child, .h1 .icon:first-child, .h2 .icon:first-child, .h3 .icon:first-child, .h4 .icon:first-child, .h5 .icon:first-child, .h6 .icon:first-child { + margin-right: .5em; +} +mark, .mark { + padding: 1px 3px; + color: #fff; + border-radius: 2px; +} +.drop-cap { + float: left; + padding: 5px; + margin-right: 5px; + font-family: Georgia; + font-size: 60px; + line-height: 50px; + color: #263238; +} +.drop-cap-reversed { + color: #fff; + background-color: #263238; +} +.list-icons { + padding-left: 10px; + margin-left: 0; + list-style: none; +} +.list-icons > li { + margin-top: 6px; +} +.list-icons > li:first-child { + margin-top: 0; +} +.list-icons > li i { + float: left; + width: 1em; + margin: 0 6px 0 0; +} +.text-primary { + color: #62a8ea; +} +a.text-primary:hover, a.text-primary:focus { + color: #358fe4; +} +.text-success { + color: #46be8a; +} +a.text-success:hover, a.text-success:focus { + color: #369b6f; +} +.text-info { + color: #57c7d4; +} +a.text-info:hover, a.text-info:focus { + color: #33b6c5; +} +.text-warning { + color: #f2a654; +} +a.text-warning:hover, a.text-warning:focus { + color: #ee8d25; +} +.text-danger { + color: #f96868; +} +a.text-danger:hover, a.text-danger:focus { + color: #f73737; +} +blockquote { + font-size: 14px; + color: #526069; + border-left-width: 4px; +} +blockquote p { + margin-bottom: 0; +} +blockquote footer, blockquote small, blockquote .small { + font-size: 12px; +} +.blockquote-reverse { + border-right-width: 4px; +} +.blockquote { + padding: 10px 15px; + border-left-width: 4px; + border-radius: 3px; +} +.blockquote.blockquote-reverse { + border-right-width: 4px; +} +.blockquote-success { + background-color: rgba(70, 190, 138, .1); + border-color: #46be8a; +} +.blockquote-info { + background-color: rgba(87, 199, 212, .1); + border-color: #57c7d4; +} +.blockquote-warning { + background-color: rgba(242, 166, 84, .1); + border-color: #f2a654; +} +.blockquote-danger { + background-color: rgba(249, 104, 104, .1); + border-color: #f96868; +} +code { + padding: 1px 2px; + border: 1px solid #bcd8f1; +} +pre code { + border: none; +} +.container { + max-width: 100%; +} +@media (min-width: 1600px) { + .container { + width: 1304px; + } +} +@media (min-width: 1600px) { + .col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12 { + float: left; + } + .col-xlg-12 { + width: 100%; + } + .col-xlg-11 { + width: 91.66666667%; + } + .col-xlg-10 { + width: 83.33333333%; + } + .col-xlg-9 { + width: 75%; + } + .col-xlg-8 { + width: 66.66666667%; + } + .col-xlg-7 { + width: 58.33333333%; + } + .col-xlg-6 { + width: 50%; + } + .col-xlg-5 { + width: 41.66666667%; + } + .col-xlg-4 { + width: 33.33333333%; + } + .col-xlg-3 { + width: 25%; + } + .col-xlg-2 { + width: 16.66666667%; + } + .col-xlg-1 { + width: 8.33333333%; + } + .col-xlg-pull-12 { + right: 100%; + } + .col-xlg-pull-11 { + right: 91.66666667%; + } + .col-xlg-pull-10 { + right: 83.33333333%; + } + .col-xlg-pull-9 { + right: 75%; + } + .col-xlg-pull-8 { + right: 66.66666667%; + } + .col-xlg-pull-7 { + right: 58.33333333%; + } + .col-xlg-pull-6 { + right: 50%; + } + .col-xlg-pull-5 { + right: 41.66666667%; + } + .col-xlg-pull-4 { + right: 33.33333333%; + } + .col-xlg-pull-3 { + right: 25%; + } + .col-xlg-pull-2 { + right: 16.66666667%; + } + .col-xlg-pull-1 { + right: 8.33333333%; + } + .col-xlg-pull-0 { + right: auto; + } + .col-xlg-push-12 { + left: 100%; + } + .col-xlg-push-11 { + left: 91.66666667%; + } + .col-xlg-push-10 { + left: 83.33333333%; + } + .col-xlg-push-9 { + left: 75%; + } + .col-xlg-push-8 { + left: 66.66666667%; + } + .col-xlg-push-7 { + left: 58.33333333%; + } + .col-xlg-push-6 { + left: 50%; + } + .col-xlg-push-5 { + left: 41.66666667%; + } + .col-xlg-push-4 { + left: 33.33333333%; + } + .col-xlg-push-3 { + left: 25%; + } + .col-xlg-push-2 { + left: 16.66666667%; + } + .col-xlg-push-1 { + left: 8.33333333%; + } + .col-xlg-push-0 { + left: auto; + } + .col-xlg-offset-12 { + margin-left: 100%; + } + .col-xlg-offset-11 { + margin-left: 91.66666667%; + } + .col-xlg-offset-10 { + margin-left: 83.33333333%; + } + .col-xlg-offset-9 { + margin-left: 75%; + } + .col-xlg-offset-8 { + margin-left: 66.66666667%; + } + .col-xlg-offset-7 { + margin-left: 58.33333333%; + } + .col-xlg-offset-6 { + margin-left: 50%; + } + .col-xlg-offset-5 { + margin-left: 41.66666667%; + } + .col-xlg-offset-4 { + margin-left: 33.33333333%; + } + .col-xlg-offset-3 { + margin-left: 25%; + } + .col-xlg-offset-2 { + margin-left: 16.66666667%; + } + .col-xlg-offset-1 { + margin-left: 8.33333333%; + } + .col-xlg-offset-0 { + margin-left: 0; + } +} +.col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12 { + position: relative; + min-height: 1px; + padding-right: 12px; + padding-left: 12px; +} +.row.no-space { + margin-right: 0; + margin-left: 0; +} +.row.no-space > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} +.row-lg { + margin-right: -24px; + margin-left: -24px; +} +.row-lg > .col-xs-1, .row-lg > .col-sm-1, .row-lg > .col-md-1, .row-lg > .col-lg-1, .row-lg > .col-xlg-1, .row-lg > .col-xs-2, .row-lg > .col-sm-2, .row-lg > .col-md-2, .row-lg > .col-lg-2, .row-lg > .col-xlg-2, .row-lg > .col-xs-3, .row-lg > .col-sm-3, .row-lg > .col-md-3, .row-lg > .col-lg-3, .row-lg > .col-xlg-3, .row-lg > .col-xs-4, .row-lg > .col-sm-4, .row-lg > .col-md-4, .row-lg > .col-lg-4, .row-lg > .col-xlg-4, .row-lg > .col-xs-5, .row-lg > .col-sm-5, .row-lg > .col-md-5, .row-lg > .col-lg-5, .row-lg > .col-xlg-5, .row-lg > .col-xs-6, .row-lg > .col-sm-6, .row-lg > .col-md-6, .row-lg > .col-lg-6, .row-lg > .col-xlg-6, .row-lg > .col-xs-7, .row-lg > .col-sm-7, .row-lg > .col-md-7, .row-lg > .col-lg-7, .row-lg > .col-xlg-7, .row-lg > .col-xs-8, .row-lg > .col-sm-8, .row-lg > .col-md-8, .row-lg > .col-lg-8, .row-lg > .col-xlg-8, .row-lg > .col-xs-9, .row-lg > .col-sm-9, .row-lg > .col-md-9, .row-lg > .col-lg-9, .row-lg > .col-xlg-9, .row-lg > .col-xs-10, .row-lg > .col-sm-10, .row-lg > .col-md-10, .row-lg > .col-lg-10, .row-lg > .col-xlg-10, .row-lg > .col-xs-11, .row-lg > .col-sm-11, .row-lg > .col-md-11, .row-lg > .col-lg-11, .row-lg > .col-xlg-11, .row-lg > .col-xs-12, .row-lg > .col-sm-12, .row-lg > .col-md-12, .row-lg > .col-lg-12, .row-lg > .col-xlg-12 { + padding-right: 24px; + padding-left: 24px; +} +.table { + color: #76838f; +} +.table > thead > tr > th, .table > tfoot > tr > th { + font-weight: 500; + color: #526069; + vertical-align: middle; + background: rgba(243, 247, 249, .5); +} +.table > thead > tr > th small, .table > tfoot > tr > th small { + font-weight: 300; +} +.table > thead > tr > th { + border-bottom: 1px solid #e4eaec; +} +.table > tbody + tbody { + border-top: 1px solid #e4eaec; +} +.table th > .checkbox-custom:only-child, .table td > .checkbox-custom:only-child { + margin-top: 0; + margin-bottom: 0; + text-align: center; +} +.table .success, .table .warning, .table .danger, .table .info { + color: #fff; +} +.table .success a, .table .warning a, .table .danger a, .table .info a { + color: #fff; +} +.table .disabled { + color: #ccd5db; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.table .disabled a { + color: #ccd5db; +} +.table .cell-30 { + width: 30px; +} +.table .cell-40 { + width: 40px; +} +.table .cell-50 { + width: 50px; +} +.table .cell-60 { + width: 60px; +} +.table .cell-80 { + width: 80px; +} +.table .cell-100 { + width: 100px; +} +.table .cell-120 { + width: 120px; +} +.table .cell-130 { + width: 130px; +} +.table .cell-150 { + width: 150px; +} +.table .cell-180 { + width: 180px; +} +.table .cell-200 { + width: 200px; +} +.table .cell-250 { + width: 250px; +} +.table .cell-300 { + width: 300px; +} +.table-primary thead tr, .table-success thead tr, .table-info thead tr, .table-warning thead tr, .table-danger thead tr, .table-dark thead tr { + color: #fff; +} +.table-default thead tr { + background: #f3f7f9; +} +.table-primary thead tr { + background: #62a8ea; +} +.table-success thead tr { + background: #46be8a; +} +.table-info thead tr { + background: #57c7d4; +} +.table-warning thead tr { + background: #f2a654; +} +.table-danger thead tr { + background: #f96868; +} +.table-dark thead tr { + background: #526069; +} +.table-gray thead tr { + color: #526069; + background: #ccd5db; +} +.table-bordered > thead > tr > th, .table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.table-bordered > thead:first-child > tr:first-child > th { + border: 1px solid #e4eaec; +} +.table-section + tbody { + display: none; +} +.table-section-arrow { + position: relative; + display: inline-block; + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + text-align: center; + -webkit-transition: -webkit-transform .15s; + -o-transition: -o-transform .15s; + transition: -webkit-transform .15s; + transition: transform .15s; + transition: transform .15s, -webkit-transform .15s, -o-transform .15s; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.table-section-arrow:before { + content: "\f181"; +} +.table-section.active tr { + background-color: #f3f7f9; +} +.table-section.active + tbody { + display: table-row-group; +} +.table-section.active .table-section-arrow { + -webkit-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} +.form-control { + -webkit-appearance: none; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + -o-transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear; + transition: border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear; + transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + + -moz-appearance: none; +} +select.form-control { + padding-right: 30px; + background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAFCAYAAABB9hwOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNWZkMzNlMC0zNTcxLTI4NDgtYjA3NC01ZTRhN2RjMWVmNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTUxRUI3MDdEQjk4MTFFNUI1NDA5QTcyNTlFQzRERTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTUxRUI3MDZEQjk4MTFFNUI1NDA5QTcyNTlFQzRERTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZWNiNjQzMjYtNDc1Yi01OTQxLWIxYjItNDVkZjU5YjZlODA2IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6N2RlYzI2YWMtZGI5OC0xMWU1LWIwMjgtY2ZhNDhhOGNjNWY1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+AXTIGgAAAFRJREFUeNpidI1KSWFgYDBlwASngXjOrqWzGcgBTEC8DIjfo4m/h4qTDUAGfwPi+UD8Hyr2H8r/RqnBIHATiPdC2XuhfIoACxJ7PRDzQmmKAUCAAQDxOxHyb4DjOAAAAABJRU5ErkJggg==") no-repeat center right; +} +select[multiple].form-control { + padding-right: 12px; + background: #fff; +} +.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #46be8a; +} +.has-success .form-control { + border-color: #46be8a; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #369b6f; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #91d9ba; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #91d9ba; +} +.has-success .input-group-addon { + color: #46be8a; + background-color: #fff; + border-color: #46be8a; +} +.has-success .form-control-feedback { + color: #46be8a; +} +.has-success .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-success .form-control:focus { + border-color: #46be8a; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 190, 138, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 190, 138, .6); +} +.has-success .form-control.focus, .has-success .form-control:focus { + border-color: #46be8a; + -webkit-box-shadow: none; + box-shadow: none; +} +.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #f2a654; +} +.has-warning .form-control { + border-color: #f2a654; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #ee8d25; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #f9d7b3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #f9d7b3; +} +.has-warning .input-group-addon { + color: #f2a654; + background-color: #fff; + border-color: #f2a654; +} +.has-warning .form-control-feedback { + color: #f2a654; +} +.has-warning .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-warning .form-control:focus { + border-color: #f2a654; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(242, 166, 84, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(242, 166, 84, .6); +} +.has-warning .form-control.focus, .has-warning .form-control:focus { + border-color: #f2a654; + -webkit-box-shadow: none; + box-shadow: none; +} +.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #f96868; +} +.has-error .form-control { + border-color: #f96868; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #f73737; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fdcaca; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fdcaca; +} +.has-error .input-group-addon { + color: #f96868; + background-color: #fff; + border-color: #f96868; +} +.has-error .form-control-feedback { + color: #f96868; +} +.has-error .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-error .form-control:focus { + border-color: #f96868; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(249, 104, 104, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(249, 104, 104, .6); +} +.has-error .form-control.focus, .has-error .form-control:focus { + border-color: #f96868; + -webkit-box-shadow: none; + box-shadow: none; +} +.form-group:last-child { + margin-bottom: 0; +} +.form-group.has-feedback.no-label .form-control-feedback { + top: 0; +} +.form-group.has-feedback.left-feedback .form-control-feedback { + right: auto; + left: 0; +} +.form-group.has-feedback.left-feedback .form-control { + padding-right: 13px; + padding-left: 50px; +} +.form-group .required { + color: #d6494b; +} +.form-control.square { + border-radius: 0; +} +.form-control.round { + border-radius: 200px; +} +textarea.form-control.no-resize { + resize: none; +} +.input-group-file input[type="text"] { + background-color: #fff; +} +.input-group-file .btn-file { + position: relative; + overflow: hidden; +} +.input-group-file .btn-file.btn-outline { + border: 1px solid #e4eaec; + border-left: none; +} +.input-group-file .btn-file.btn-outline:hover { + border-left: none; +} +.input-group-file .btn-file > .icon { + margin: 0 3px; +} +.input-group-file .btn-file input[type="file"] { + position: absolute; + top: 0; + left: 0; + display: block; + min-width: 100%; + min-height: 100%; + text-align: left; + cursor: pointer; + opacity: 0; +} +.help-block { + margin-top: 7px; + margin-bottom: 8px; +} +.help-block > .icon { + margin: 0 5px; +} +label { + font-weight: 400; +} +.input-search-close { + color: #000; + text-shadow: none; + filter: alpha(opacity=20); + opacity: .2; +} +.input-search-close.icon { + font-size: inherit; + line-height: inherit; +} +.input-search-close:hover, .input-search-close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + outline: none; + opacity: .5; +} +button.input-search-close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.input-search { + position: relative; +} +.input-search .form-control { + border-radius: 200px; +} +.input-search .input-search-icon, .input-search .input-search-close { + position: absolute; + top: 50%; + z-index: 1; + width: 32px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.input-search .input-search-close { + right: 8px; +} +.input-search .input-search-icon + .form-control { + padding-left: 38px; +} +.input-search .input-search-icon { + left: 8px; + font-size: 16px; + color: #a3afb7; + text-align: center; + pointer-events: none; +} +.input-search-btn + .form-control { + padding-right: 50px; +} +.input-search-btn { + position: absolute; + top: 0; + right: 0; + height: 100%; + padding: 0 10px; + background: transparent; + border: none; + border-radius: 0 200px 200px 0; +} +.input-search-btn > .icon { + margin: 0 3px; +} +.input-search-dark .input-search-icon { + color: #76838f; +} +.input-search-dark .form-control { + background: #f3f7f9; + -webkit-box-shadow: none; + box-shadow: none; +} +.input-search-dark .form-control:focus { + background-color: transparent; +} +.form-inline .form-group { + margin: 0 20px 10px 0; +} +.form-inline .form-group:last-child { + margin: 0 0 10px 0; +} +.form-inline .control-label { + margin-right: 5px; +} +@media (max-width: 767px) { + .form-inline .form-group { + margin-right: 0; + } + .form-inline .form-group:last-child { + margin: 0; + } +} +/*@btn-floating-xs-padding:10px;*/ +/*@btn-floating-sm-padding:3px;*/ +/*@btn-floating-lg-padding:15px;*/ +.btn { + padding: 4px 12px; + font-size: 14px; + line-height: 1.6; + border-radius: 3px; + -webkit-transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; + -o-transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; + transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; +} +.btn:focus, .btn:active:focus, .btn.active:focus { + outline: 0; +} +.btn:active, .btn.active { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .icon { + width: 1em; + margin: 0 3px; + line-height: inherit; + text-align: center; +} +.btn-block { + white-space: normal; +} +.btn-outline.btn-default { + color: #76838f; + background-color: transparent; +} +.btn-outline.btn-default:hover, .btn-outline.btn-default:focus, .btn-outline.btn-default:active, .btn-outline.btn-default.active, .open > .dropdown-toggle.btn-outline.btn-default { + color: #76838f; + background-color: rgba(118, 131, 143, .1); + border-color: #e4eaec; +} +.btn-outline.btn-default:hover .badge, .btn-outline.btn-default:focus .badge, .btn-outline.btn-default:active .badge, .btn-outline.btn-default.active .badge, .open > .dropdown-toggle.btn-outline.btn-default .badge { + color: #76838f; + background-color: #76838f; +} +.btn-outline.btn-primary { + color: #62a8ea; + background-color: transparent; +} +.btn-outline.btn-primary:hover, .btn-outline.btn-primary:focus, .btn-outline.btn-primary:active, .btn-outline.btn-primary.active, .open > .dropdown-toggle.btn-outline.btn-primary { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.btn-outline.btn-primary:hover .badge, .btn-outline.btn-primary:focus .badge, .btn-outline.btn-primary:active .badge, .btn-outline.btn-primary.active .badge, .open > .dropdown-toggle.btn-outline.btn-primary .badge { + color: #62a8ea; + background-color: #fff; +} +.btn-outline.btn-success { + color: #46be8a; + background-color: transparent; +} +.btn-outline.btn-success:hover, .btn-outline.btn-success:focus, .btn-outline.btn-success:active, .btn-outline.btn-success.active, .open > .dropdown-toggle.btn-outline.btn-success { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.btn-outline.btn-success:hover .badge, .btn-outline.btn-success:focus .badge, .btn-outline.btn-success:active .badge, .btn-outline.btn-success.active .badge, .open > .dropdown-toggle.btn-outline.btn-success .badge { + color: #46be8a; + background-color: #fff; +} +.btn-outline.btn-info { + color: #57c7d4; + background-color: transparent; +} +.btn-outline.btn-info:hover, .btn-outline.btn-info:focus, .btn-outline.btn-info:active, .btn-outline.btn-info.active, .open > .dropdown-toggle.btn-outline.btn-info { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.btn-outline.btn-info:hover .badge, .btn-outline.btn-info:focus .badge, .btn-outline.btn-info:active .badge, .btn-outline.btn-info.active .badge, .open > .dropdown-toggle.btn-outline.btn-info .badge { + color: #57c7d4; + background-color: #fff; +} +.btn-outline.btn-warning { + color: #f2a654; + background-color: transparent; +} +.btn-outline.btn-warning:hover, .btn-outline.btn-warning:focus, .btn-outline.btn-warning:active, .btn-outline.btn-warning.active, .open > .dropdown-toggle.btn-outline.btn-warning { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.btn-outline.btn-warning:hover .badge, .btn-outline.btn-warning:focus .badge, .btn-outline.btn-warning:active .badge, .btn-outline.btn-warning.active .badge, .open > .dropdown-toggle.btn-outline.btn-warning .badge { + color: #f2a654; + background-color: #fff; +} +.btn-outline.btn-danger { + color: #f96868; + background-color: transparent; +} +.btn-outline.btn-danger:hover, .btn-outline.btn-danger:focus, .btn-outline.btn-danger:active, .btn-outline.btn-danger.active, .open > .dropdown-toggle.btn-outline.btn-danger { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.btn-outline.btn-danger:hover .badge, .btn-outline.btn-danger:focus .badge, .btn-outline.btn-danger:active .badge, .btn-outline.btn-danger.active .badge, .open > .dropdown-toggle.btn-outline.btn-danger .badge { + color: #f96868; + background-color: #fff; +} +.btn-outline.btn-dark { + color: #526069; + background-color: transparent; +} +.btn-outline.btn-dark:hover, .btn-outline.btn-dark:focus, .btn-outline.btn-dark:active, .btn-outline.btn-dark.active, .open > .dropdown-toggle.btn-outline.btn-dark { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.btn-outline.btn-dark:hover .badge, .btn-outline.btn-dark:focus .badge, .btn-outline.btn-dark:active .badge, .btn-outline.btn-dark.active .badge, .open > .dropdown-toggle.btn-outline.btn-dark .badge { + color: #526069; + background-color: #fff; +} +.btn-outline.btn-inverse { + color: #fff; + background-color: transparent; +} +.btn-outline.btn-inverse:hover, .btn-outline.btn-inverse:focus, .btn-outline.btn-inverse:active, .btn-outline.btn-inverse.active, .open > .dropdown-toggle.btn-outline.btn-inverse { + color: #76838f; + background-color: #fff; + border-color: #fff; +} +.btn-outline.btn-inverse:hover .badge, .btn-outline.btn-inverse:focus .badge, .btn-outline.btn-inverse:active .badge, .btn-outline.btn-inverse.active .badge, .open > .dropdown-toggle.btn-outline.btn-inverse .badge { + color: #fff; + background-color: #76838f; +} +.btn-lg { + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 4px; +} +.btn-sm { + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} +.btn-xs { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} +.btn-squared { + border-radius: 0; +} +.btn-round { + border-radius: 1000px; +} +.btn-default:hover, .btn-default:focus, .btn-default.focus { + background-color: #f3f7f9; + border-color: #f3f7f9; +} +.btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + background-color: #ccd5db; + border-color: #ccd5db; +} +.btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { + background-color: #ccd5db; + border-color: #ccd5db; +} +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + color: #76838f; + background-color: #f3f7f9; + border-color: #f3f7f9; +} +.btn-default.btn-up:before { + border-bottom-color: #e4eaec; +} +.btn-default.btn-up:hover:before, .btn-default.btn-up:focus:before { + border-bottom-color: #f3f7f9; +} +.btn-default.btn-up:active:before, .btn-default.btn-up.active:before, .open > .dropdown-toggle.btn-default.btn-up:before { + border-bottom-color: #ccd5db; +} +.btn-default.btn-right:before { + border-left-color: #e4eaec; +} +.btn-default.btn-right:hover:before, .btn-default.btn-right:focus:before { + border-left-color: #f3f7f9; +} +.btn-default.btn-right:active:before, .btn-default.btn-right.active:before, .open > .dropdown-toggle.btn-default.btn-right:before { + border-left-color: #ccd5db; +} +.btn-default.btn-bottom:before { + border-top-color: #e4eaec; +} +.btn-default.btn-bottom:hover:before, .btn-default.btn-bottom:focus:before { + border-top-color: #f3f7f9; +} +.btn-default.btn-bottom:active:before, .btn-default.btn-bottom.active:before, .open > .dropdown-toggle.btn-default.btn-bottom:before { + border-top-color: #ccd5db; +} +.btn-default.btn-left:before { + border-right-color: #e4eaec; +} +.btn-default.btn-left:hover:before, .btn-default.btn-left:focus:before { + border-right-color: #f3f7f9; +} +.btn-default.btn-left:active:before, .btn-default.btn-left.active:before, .open > .dropdown-toggle.btn-default.btn-left:before { + border-right-color: #ccd5db; +} +.btn-primary:hover, .btn-primary:focus, .btn-primary.focus { + background-color: #89bceb; + border-color: #89bceb; +} +.btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + background-color: #4e97d9; + border-color: #4e97d9; +} +.btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { + background-color: #4e97d9; + border-color: #4e97d9; +} +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + color: #fff; + background-color: #a2caee; + border-color: #a2caee; +} +.btn-primary.btn-up:before { + border-bottom-color: #62a8ea; +} +.btn-primary.btn-up:hover:before, .btn-primary.btn-up:focus:before { + border-bottom-color: #89bceb; +} +.btn-primary.btn-up:active:before, .btn-primary.btn-up.active:before, .open > .dropdown-toggle.btn-primary.btn-up:before { + border-bottom-color: #4e97d9; +} +.btn-primary.btn-right:before { + border-left-color: #62a8ea; +} +.btn-primary.btn-right:hover:before, .btn-primary.btn-right:focus:before { + border-left-color: #89bceb; +} +.btn-primary.btn-right:active:before, .btn-primary.btn-right.active:before, .open > .dropdown-toggle.btn-primary.btn-right:before { + border-left-color: #4e97d9; +} +.btn-primary.btn-bottom:before { + border-top-color: #62a8ea; +} +.btn-primary.btn-bottom:hover:before, .btn-primary.btn-bottom:focus:before { + border-top-color: #89bceb; +} +.btn-primary.btn-bottom:active:before, .btn-primary.btn-bottom.active:before, .open > .dropdown-toggle.btn-primary.btn-bottom:before { + border-top-color: #4e97d9; +} +.btn-primary.btn-left:before { + border-right-color: #62a8ea; +} +.btn-primary.btn-left:hover:before, .btn-primary.btn-left:focus:before { + border-right-color: #89bceb; +} +.btn-primary.btn-left:active:before, .btn-primary.btn-left.active:before, .open > .dropdown-toggle.btn-primary.btn-left:before { + border-right-color: #4e97d9; +} +.btn-success:hover, .btn-success:focus, .btn-success.focus { + background-color: #5cd29d; + border-color: #5cd29d; +} +.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + background-color: #36ab7a; + border-color: #36ab7a; +} +.btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { + background-color: #36ab7a; + border-color: #36ab7a; +} +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + color: #fff; + background-color: #7dd3ae; + border-color: #7dd3ae; +} +.btn-success.btn-up:before { + border-bottom-color: #46be8a; +} +.btn-success.btn-up:hover:before, .btn-success.btn-up:focus:before { + border-bottom-color: #5cd29d; +} +.btn-success.btn-up:active:before, .btn-success.btn-up.active:before, .open > .dropdown-toggle.btn-success.btn-up:before { + border-bottom-color: #36ab7a; +} +.btn-success.btn-right:before { + border-left-color: #46be8a; +} +.btn-success.btn-right:hover:before, .btn-success.btn-right:focus:before { + border-left-color: #5cd29d; +} +.btn-success.btn-right:active:before, .btn-success.btn-right.active:before, .open > .dropdown-toggle.btn-success.btn-right:before { + border-left-color: #36ab7a; +} +.btn-success.btn-bottom:before { + border-top-color: #46be8a; +} +.btn-success.btn-bottom:hover:before, .btn-success.btn-bottom:focus:before { + border-top-color: #5cd29d; +} +.btn-success.btn-bottom:active:before, .btn-success.btn-bottom.active:before, .open > .dropdown-toggle.btn-success.btn-bottom:before { + border-top-color: #36ab7a; +} +.btn-success.btn-left:before { + border-right-color: #46be8a; +} +.btn-success.btn-left:hover:before, .btn-success.btn-left:focus:before { + border-right-color: #5cd29d; +} +.btn-success.btn-left:active:before, .btn-success.btn-left.active:before, .open > .dropdown-toggle.btn-success.btn-left:before { + border-right-color: #36ab7a; +} +.btn-info:hover, .btn-info:focus, .btn-info.focus { + background-color: #77d6e1; + border-color: #77d6e1; +} +.btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + background-color: #47b8c6; + border-color: #47b8c6; +} +.btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { + background-color: #47b8c6; + border-color: #47b8c6; +} +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + color: #fff; + background-color: #9ae1e9; + border-color: #9ae1e9; +} +.btn-info.btn-up:before { + border-bottom-color: #57c7d4; +} +.btn-info.btn-up:hover:before, .btn-info.btn-up:focus:before { + border-bottom-color: #77d6e1; +} +.btn-info.btn-up:active:before, .btn-info.btn-up.active:before, .open > .dropdown-toggle.btn-info.btn-up:before { + border-bottom-color: #47b8c6; +} +.btn-info.btn-right:before { + border-left-color: #57c7d4; +} +.btn-info.btn-right:hover:before, .btn-info.btn-right:focus:before { + border-left-color: #77d6e1; +} +.btn-info.btn-right:active:before, .btn-info.btn-right.active:before, .open > .dropdown-toggle.btn-info.btn-right:before { + border-left-color: #47b8c6; +} +.btn-info.btn-bottom:before { + border-top-color: #57c7d4; +} +.btn-info.btn-bottom:hover:before, .btn-info.btn-bottom:focus:before { + border-top-color: #77d6e1; +} +.btn-info.btn-bottom:active:before, .btn-info.btn-bottom.active:before, .open > .dropdown-toggle.btn-info.btn-bottom:before { + border-top-color: #47b8c6; +} +.btn-info.btn-left:before { + border-right-color: #57c7d4; +} +.btn-info.btn-left:hover:before, .btn-info.btn-left:focus:before { + border-right-color: #77d6e1; +} +.btn-info.btn-left:active:before, .btn-info.btn-left.active:before, .open > .dropdown-toggle.btn-info.btn-left:before { + border-right-color: #47b8c6; +} +.btn-warning:hover, .btn-warning:focus, .btn-warning.focus { + background-color: #f4b066; + border-color: #f4b066; +} +.btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + background-color: #ec9940; + border-color: #ec9940; +} +.btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { + background-color: #ec9940; + border-color: #ec9940; +} +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + color: #fff; + background-color: #f6be80; + border-color: #f6be80; +} +.btn-warning.btn-up:before { + border-bottom-color: #f2a654; +} +.btn-warning.btn-up:hover:before, .btn-warning.btn-up:focus:before { + border-bottom-color: #f4b066; +} +.btn-warning.btn-up:active:before, .btn-warning.btn-up.active:before, .open > .dropdown-toggle.btn-warning.btn-up:before { + border-bottom-color: #ec9940; +} +.btn-warning.btn-right:before { + border-left-color: #f2a654; +} +.btn-warning.btn-right:hover:before, .btn-warning.btn-right:focus:before { + border-left-color: #f4b066; +} +.btn-warning.btn-right:active:before, .btn-warning.btn-right.active:before, .open > .dropdown-toggle.btn-warning.btn-right:before { + border-left-color: #ec9940; +} +.btn-warning.btn-bottom:before { + border-top-color: #f2a654; +} +.btn-warning.btn-bottom:hover:before, .btn-warning.btn-bottom:focus:before { + border-top-color: #f4b066; +} +.btn-warning.btn-bottom:active:before, .btn-warning.btn-bottom.active:before, .open > .dropdown-toggle.btn-warning.btn-bottom:before { + border-top-color: #ec9940; +} +.btn-warning.btn-left:before { + border-right-color: #f2a654; +} +.btn-warning.btn-left:hover:before, .btn-warning.btn-left:focus:before { + border-right-color: #f4b066; +} +.btn-warning.btn-left:active:before, .btn-warning.btn-left.active:before, .open > .dropdown-toggle.btn-warning.btn-left:before { + border-right-color: #ec9940; +} +.btn-danger:hover, .btn-danger:focus, .btn-danger.focus { + background-color: #fa7a7a; + border-color: #fa7a7a; +} +.btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + background-color: #e9595b; + border-color: #e9595b; +} +.btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { + background-color: #e9595b; + border-color: #e9595b; +} +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + color: #fff; + background-color: #fa9898; + border-color: #fa9898; +} +.btn-danger.btn-up:before { + border-bottom-color: #f96868; +} +.btn-danger.btn-up:hover:before, .btn-danger.btn-up:focus:before { + border-bottom-color: #fa7a7a; +} +.btn-danger.btn-up:active:before, .btn-danger.btn-up.active:before, .open > .dropdown-toggle.btn-danger.btn-up:before { + border-bottom-color: #e9595b; +} +.btn-danger.btn-right:before { + border-left-color: #f96868; +} +.btn-danger.btn-right:hover:before, .btn-danger.btn-right:focus:before { + border-left-color: #fa7a7a; +} +.btn-danger.btn-right:active:before, .btn-danger.btn-right.active:before, .open > .dropdown-toggle.btn-danger.btn-right:before { + border-left-color: #e9595b; +} +.btn-danger.btn-bottom:before { + border-top-color: #f96868; +} +.btn-danger.btn-bottom:hover:before, .btn-danger.btn-bottom:focus:before { + border-top-color: #fa7a7a; +} +.btn-danger.btn-bottom:active:before, .btn-danger.btn-bottom.active:before, .open > .dropdown-toggle.btn-danger.btn-bottom:before { + border-top-color: #e9595b; +} +.btn-danger.btn-left:before { + border-right-color: #f96868; +} +.btn-danger.btn-left:hover:before, .btn-danger.btn-left:focus:before { + border-right-color: #fa7a7a; +} +.btn-danger.btn-left:active:before, .btn-danger.btn-left.active:before, .open > .dropdown-toggle.btn-danger.btn-left:before { + border-right-color: #e9595b; +} +.btn-inverse { + color: #76838f; + background-color: #fff; + border-color: #e4eaec; +} +.btn-inverse:focus, .btn-inverse.focus { + color: #76838f; + background-color: #e6e6e6; + border-color: #99b0b7; +} +.btn-inverse:hover { + color: #76838f; + background-color: #e6e6e6; + border-color: #c0ced3; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + color: #76838f; + background-color: #e6e6e6; + border-color: #c0ced3; +} +.btn-inverse:active:hover, .btn-inverse.active:hover, .open > .dropdown-toggle.btn-inverse:hover, .btn-inverse:active:focus, .btn-inverse.active:focus, .open > .dropdown-toggle.btn-inverse:focus, .btn-inverse:active.focus, .btn-inverse.active.focus, .open > .dropdown-toggle.btn-inverse.focus { + color: #76838f; + background-color: #d4d4d4; + border-color: #99b0b7; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled:hover, .btn-inverse[disabled]:hover, fieldset[disabled] .btn-inverse:hover, .btn-inverse.disabled:focus, .btn-inverse[disabled]:focus, fieldset[disabled] .btn-inverse:focus, .btn-inverse.disabled.focus, .btn-inverse[disabled].focus, fieldset[disabled] .btn-inverse.focus { + background-color: #fff; + border-color: #e4eaec; +} +.btn-inverse .badge { + color: #fff; + background-color: #76838f; +} +.btn-inverse:hover, .btn-inverse:focus, .btn-inverse.focus { + background-color: #fff; + border-color: #f3f7f9; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + background-color: #fff; + border-color: #ccd5db; +} +.btn-inverse:active:hover, .btn-inverse.active:hover, .open > .dropdown-toggle.btn-inverse:hover, .btn-inverse:active:focus, .btn-inverse.active:focus, .open > .dropdown-toggle.btn-inverse:focus, .btn-inverse:active.focus, .btn-inverse.active.focus, .open > .dropdown-toggle.btn-inverse.focus { + background-color: #fff; + border-color: #ccd5db; +} +.btn-inverse.disabled, .btn-inverse[disabled], fieldset[disabled] .btn-inverse, .btn-inverse.disabled:hover, .btn-inverse[disabled]:hover, fieldset[disabled] .btn-inverse:hover, .btn-inverse.disabled:focus, .btn-inverse[disabled]:focus, fieldset[disabled] .btn-inverse:focus, .btn-inverse.disabled.focus, .btn-inverse[disabled].focus, fieldset[disabled] .btn-inverse.focus, .btn-inverse.disabled:active, .btn-inverse[disabled]:active, fieldset[disabled] .btn-inverse:active, .btn-inverse.disabled.active, .btn-inverse[disabled].active, fieldset[disabled] .btn-inverse.active { + color: #ccd5db; + background-color: #fff; + border-color: #a3afb7; +} +.btn-inverse.btn-up:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-up:hover:before, .btn-inverse.btn-up:focus:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-up:active:before, .btn-inverse.btn-up.active:before, .open > .dropdown-toggle.btn-inverse.btn-up:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-right:before { + border-left-color: #fff; +} +.btn-inverse.btn-right:hover:before, .btn-inverse.btn-right:focus:before { + border-left-color: #fff; +} +.btn-inverse.btn-right:active:before, .btn-inverse.btn-right.active:before, .open > .dropdown-toggle.btn-inverse.btn-right:before { + border-left-color: #fff; +} +.btn-inverse.btn-bottom:before { + border-top-color: #fff; +} +.btn-inverse.btn-bottom:hover:before, .btn-inverse.btn-bottom:focus:before { + border-top-color: #fff; +} +.btn-inverse.btn-bottom:active:before, .btn-inverse.btn-bottom.active:before, .open > .dropdown-toggle.btn-inverse.btn-bottom:before { + border-top-color: #fff; +} +.btn-inverse.btn-left:before { + border-right-color: #fff; +} +.btn-inverse.btn-left:hover:before, .btn-inverse.btn-left:focus:before { + border-right-color: #fff; +} +.btn-inverse.btn-left:active:before, .btn-inverse.btn-left.active:before, .open > .dropdown-toggle.btn-inverse.btn-left:before { + border-right-color: #fff; +} +.btn-dark { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.btn-dark:focus, .btn-dark.focus { + color: #fff; + background-color: #3c464c; + border-color: #1a1f21; +} +.btn-dark:hover { + color: #fff; + background-color: #3c464c; + border-color: #374147; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + color: #fff; + background-color: #3c464c; + border-color: #374147; +} +.btn-dark:active:hover, .btn-dark.active:hover, .open > .dropdown-toggle.btn-dark:hover, .btn-dark:active:focus, .btn-dark.active:focus, .open > .dropdown-toggle.btn-dark:focus, .btn-dark:active.focus, .btn-dark.active.focus, .open > .dropdown-toggle.btn-dark.focus { + color: #fff; + background-color: #2c3338; + border-color: #1a1f21; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + background-image: none; +} +.btn-dark.disabled:hover, .btn-dark[disabled]:hover, fieldset[disabled] .btn-dark:hover, .btn-dark.disabled:focus, .btn-dark[disabled]:focus, fieldset[disabled] .btn-dark:focus, .btn-dark.disabled.focus, .btn-dark[disabled].focus, fieldset[disabled] .btn-dark.focus { + background-color: #526069; + border-color: #526069; +} +.btn-dark .badge { + color: #526069; + background-color: #fff; +} +.btn-dark:hover, .btn-dark:focus, .btn-dark.focus { + background-color: #76838f; + border-color: #76838f; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + background-color: #37474f; + border-color: #37474f; +} +.btn-dark:active:hover, .btn-dark.active:hover, .open > .dropdown-toggle.btn-dark:hover, .btn-dark:active:focus, .btn-dark.active:focus, .open > .dropdown-toggle.btn-dark:focus, .btn-dark:active.focus, .btn-dark.active.focus, .open > .dropdown-toggle.btn-dark.focus { + background-color: #37474f; + border-color: #37474f; +} +.btn-dark.disabled, .btn-dark[disabled], fieldset[disabled] .btn-dark, .btn-dark.disabled:hover, .btn-dark[disabled]:hover, fieldset[disabled] .btn-dark:hover, .btn-dark.disabled:focus, .btn-dark[disabled]:focus, fieldset[disabled] .btn-dark:focus, .btn-dark.disabled.focus, .btn-dark[disabled].focus, fieldset[disabled] .btn-dark.focus, .btn-dark.disabled:active, .btn-dark[disabled]:active, fieldset[disabled] .btn-dark:active, .btn-dark.disabled.active, .btn-dark[disabled].active, fieldset[disabled] .btn-dark.active { + color: #fff; + background-color: #a3afb7; + border-color: #a3afb7; +} +.btn-dark.btn-up:before { + border-bottom-color: #526069; +} +.btn-dark.btn-up:hover:before, .btn-dark.btn-up:focus:before { + border-bottom-color: #76838f; +} +.btn-dark.btn-up:active:before, .btn-dark.btn-up.active:before, .open > .dropdown-toggle.btn-dark.btn-up:before { + border-bottom-color: #37474f; +} +.btn-dark.btn-right:before { + border-left-color: #526069; +} +.btn-dark.btn-right:hover:before, .btn-dark.btn-right:focus:before { + border-left-color: #76838f; +} +.btn-dark.btn-right:active:before, .btn-dark.btn-right.active:before, .open > .dropdown-toggle.btn-dark.btn-right:before { + border-left-color: #37474f; +} +.btn-dark.btn-bottom:before { + border-top-color: #526069; +} +.btn-dark.btn-bottom:hover:before, .btn-dark.btn-bottom:focus:before { + border-top-color: #76838f; +} +.btn-dark.btn-bottom:active:before, .btn-dark.btn-bottom.active:before, .open > .dropdown-toggle.btn-dark.btn-bottom:before { + border-top-color: #37474f; +} +.btn-dark.btn-left:before { + border-right-color: #526069; +} +.btn-dark.btn-left:hover:before, .btn-dark.btn-left:focus:before { + border-right-color: #76838f; +} +.btn-dark.btn-left:active:before, .btn-dark.btn-left.active:before, .open > .dropdown-toggle.btn-dark.btn-left:before { + border-right-color: #37474f; +} +.btn-dark:hover, .btn-dark:focus { + color: #fff; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + color: #fff; +} +.btn-dark.btn-flat { + color: #526069; +} +.btn-flat { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-flat.disabled { + color: #a3afb7; +} +.btn-icon, .btn.icon { + padding: 10px; + line-height: 1em; +} +.btn-icon.btn-xs, .btn.icon.btn-xs { + padding: 4px; + font-size: 12px; +} +.btn-icon.btn-sm, .btn.icon.btn-sm { + padding: 8px; + font-size: 14px; +} +.btn-icon.btn-lg, .btn.icon.btn-lg { + padding: 12px; + font-size: 20px; +} +.btn-icon.disabled, .btn.icon.disabled { + color: #a3afb7; +} +.btn-icon { + padding: 8px; +} +.btn-icon .icon { + margin: -13px 0 0; +} +.btn-icon.btn-lg { + padding: 7.5px; +} +.btn-icon.btn-sm { + padding: 5px; +} +.btn-icon.btn-xs { + padding: 4px; +} +.btn-raised { + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .18), 0 2px 4px rgba(0, 0, 0, .21); + box-shadow: 0 0 2px rgba(0, 0, 0, .18), 0 2px 4px rgba(0, 0, 0, .21); + -webkit-transition: -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); + -o-transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1), -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); +} +.btn-raised:hover, .btn-raised:active, .btn-raised.active, .open > .dropdown-toggle.btn-raised { + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15), 0 3px 6px rgba(0, 0, 0, .2); + box-shadow: 0 0 3px rgba(0, 0, 0, .15), 0 3px 6px rgba(0, 0, 0, .2); +} +.btn-raised.disabled, .btn-raised[disabled], fieldset[disabled] .btn-raised { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-floating { + width: 56px; + height: 56px; + padding: 0; + margin: 0; + font-size: 24px; + text-align: center; + border-radius: 100%; + -webkit-box-shadow: 0 6px 10px rgba(0, 0, 0, .15); + box-shadow: 0 6px 10px rgba(0, 0, 0, .15); +} +.btn-floating.btn-xs { + width: 30px; + height: 30px; + padding: 0; + font-size: 13px; +} +.btn-floating.btn-sm { + width: 40px; + height: 40px; + padding: 0; + font-size: 15px; +} +.btn-floating.btn-lg { + width: 70px; + height: 70px; + padding: 0; + font-size: 30px; +} +.btn-floating i { + position: relative; + top: 0; +} +.btn-animate { + position: relative; + overflow: hidden; +} +.btn-animate span { + display: block; + width: 100%; + height: 100%; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.btn-animate-side { + padding: 4px 28px; +} +.btn-animate-side span { + -webkit-transition: -webkit-transform .2s ease-out 0s; + -o-transition: -o-transform .2s ease-out 0s; + transition: -webkit-transform .2s ease-out 0s; + transition: transform .2s ease-out 0s; + transition: transform .2s ease-out 0s, -webkit-transform .2s ease-out 0s, -o-transform .2s ease-out 0s; +} +.btn-animate-side span > .icon { + position: absolute; + top: 50%; + left: 0; + display: block; + margin-top: -1px; + opacity: 0; + -webkit-transition: opacity .2s ease-out 0s; + -o-transition: opacity .2s ease-out 0s; + transition: opacity .2s ease-out 0s; + -webkit-transform: translate(-20px, -50%); + -ms-transform: translate(-20px, -50%); + -o-transform: translate(-20px, -50%); + transform: translate(-20px, -50%); +} +.btn-animate-side:hover span { + -webkit-transform: translate(10px, 0); + -ms-transform: translate(10px, 0); + -o-transform: translate(10px, 0); + transform: translate(10px, 0); +} +.btn-animate-side:hover span > .icon { + opacity: 1; +} +.btn-animate-side.btn-xs { + padding: 1px 14px; +} +.btn-animate-side.btn-xs span > .icon { + left: 5px; +} +.btn-animate-side.btn-xs:hover span { + -webkit-transform: translate(8px, 0); + -ms-transform: translate(8px, 0); + -o-transform: translate(8px, 0); + transform: translate(8px, 0); +} +.btn-animate-side.btn-sm { + padding: 3px 22px; +} +.btn-animate-side.btn-sm span > .icon { + left: 3px; +} +.btn-animate-side.btn-sm:hover span { + -webkit-transform: translate(8px, 0); + -ms-transform: translate(8px, 0); + -o-transform: translate(8px, 0); + transform: translate(8px, 0); +} +.btn-animate-side.btn-lg { + padding: 6px 33px; +} +.btn-animate-side.btn-lg span > .icon { + left: -6px; +} +.btn-animate-side.btn-lg:hover span { + -webkit-transform: translate(14px, 0); + -ms-transform: translate(14px, 0); + -o-transform: translate(14px, 0); + transform: translate(14px, 0); +} +.btn-animate-vertical span { + -webkit-transition: all .2s ease-out 0s; + -o-transition: all .2s ease-out 0s; + transition: all .2s ease-out 0s; +} +.btn-animate-vertical span > .icon { + position: absolute; + top: -3px; + left: 50%; + display: block; + margin-top: 0; + font-size: 24px; + -webkit-transform: translate(-50%, -100%); + -ms-transform: translate(-50%, -100%); + -o-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); +} +.btn-animate-vertical:hover span { + -webkit-transform: translate(0, 150%); + -ms-transform: translate(0, 150%); + -o-transform: translate(0, 150%); + transform: translate(0, 150%); +} +.btn-animate-vertical.btn-xs span > .icon { + top: -5px; + font-size: 16px; +} +.btn-animate-vertical.btn-sm span > .icon { + top: -3px; + font-size: 20px; +} +.btn-animate-vertical.btn-lg span > .icon { + top: -5px; + font-size: 28px; +} +.btn-labeled { + padding: 0; + padding-right: 8px; +} +.btn-labeled .btn-label { + padding: 4px 8px; + margin-right: 5px; +} +.btn-labeled.btn-xs { + padding-right: 5px; +} +.btn-labeled.btn-xs .btn-label { + padding: 1px 4px; + margin-right: 2px; +} +.btn-labeled.btn-sm { + padding-right: 10px; +} +.btn-labeled.btn-sm .btn-label { + padding: 3px 6px; + margin-right: 7px; +} +.btn-labeled.btn-lg { + padding-right: 14px; +} +.btn-labeled.btn-lg .btn-label { + padding: 6px 14px; + margin-right: 11px; +} +.btn-labeled.btn-block { + text-align: left; +} +.btn-label { + display: inline-block; + background-color: rgba(0, 0, 0, .15); + border-radius: 3px 0 0 3px; +} +.btn-pill-left { + border-radius: 500px 0 0 500px; +} +.btn-pill-right { + border-radius: 0 500px 500px 0; +} +.btn-direction { + position: relative; +} +.btn-direction:before { + position: absolute; + line-height: 0; + content: ""; + border: 6px solid transparent; +} +.btn-up:before { + top: -12px; + left: 50%; + margin-left: -6px; + border-bottom-color: #e4eaec; +} +.btn-right:before { + top: 50%; + right: -12px; + margin-top: -6px; + border-left-color: #e4eaec; +} +.btn-bottom:before { + bottom: -12px; + left: 50%; + margin-left: -6px; + border-top-color: #e4eaec; +} +.btn-left:before { + top: 50%; + left: -12px; + margin-top: -6px; + border-right-color: #e4eaec; +} +.btn-pure, .btn-pure:hover, .btn-pure:focus, .btn-pure:active, .btn-pure.active, .open > .dropdown-toggle.btn-pure, .btn-pure[disabled], fieldset[disabled] .btn-pure { + background-color: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-pure:hover, .btn-pure:hover:hover, .btn-pure:focus:hover, .btn-pure:active:hover, .btn-pure.active:hover, .open > .dropdown-toggle.btn-pure:hover, .btn-pure[disabled]:hover, fieldset[disabled] .btn-pure:hover, .btn-pure:focus, .btn-pure:hover:focus, .btn-pure:focus:focus, .btn-pure:active:focus, .btn-pure.active:focus, .open > .dropdown-toggle.btn-pure:focus, .btn-pure[disabled]:focus, fieldset[disabled] .btn-pure:focus, .btn-pure.focus, .btn-pure:hover.focus, .btn-pure:focus.focus, .btn-pure:active.focus, .btn-pure.active.focus, .open > .dropdown-toggle.btn-pure.focus, .btn-pure[disabled].focus, fieldset[disabled] .btn-pure.focus { + background-color: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-pure.btn-default { + color: #a3afb7; +} +.btn-pure.btn-default:hover, .btn-pure.btn-default:focus, .btn-pure.btn-default:active, .btn-pure.btn-default.active, .open > .dropdown-toggle.btn-pure.btn-default { + color: #526069; +} +.btn-pure.btn-default:hover:hover, .btn-pure.btn-default:focus:hover, .btn-pure.btn-default:active:hover, .btn-pure.btn-default.active:hover, .open > .dropdown-toggle.btn-pure.btn-default:hover, .btn-pure.btn-default:hover:focus, .btn-pure.btn-default:focus:focus, .btn-pure.btn-default:active:focus, .btn-pure.btn-default.active:focus, .open > .dropdown-toggle.btn-pure.btn-default:focus, .btn-pure.btn-default:hover.focus, .btn-pure.btn-default:focus.focus, .btn-pure.btn-default:active.focus, .btn-pure.btn-default.active.focus, .open > .dropdown-toggle.btn-pure.btn-default.focus { + color: #526069; +} +.btn-pure.btn-default:hover .badge, .btn-pure.btn-default:focus .badge, .btn-pure.btn-default:active .badge, .btn-pure.btn-default.active .badge, .open > .dropdown-toggle.btn-pure.btn-default .badge { + color: #526069; +} +.btn-pure.btn-primary { + color: #62a8ea; +} +.btn-pure.btn-primary:hover, .btn-pure.btn-primary:focus, .btn-pure.btn-primary:active, .btn-pure.btn-primary.active, .open > .dropdown-toggle.btn-pure.btn-primary { + color: #3583ca; +} +.btn-pure.btn-primary:hover:hover, .btn-pure.btn-primary:focus:hover, .btn-pure.btn-primary:active:hover, .btn-pure.btn-primary.active:hover, .open > .dropdown-toggle.btn-pure.btn-primary:hover, .btn-pure.btn-primary:hover:focus, .btn-pure.btn-primary:focus:focus, .btn-pure.btn-primary:active:focus, .btn-pure.btn-primary.active:focus, .open > .dropdown-toggle.btn-pure.btn-primary:focus, .btn-pure.btn-primary:hover.focus, .btn-pure.btn-primary:focus.focus, .btn-pure.btn-primary:active.focus, .btn-pure.btn-primary.active.focus, .open > .dropdown-toggle.btn-pure.btn-primary.focus { + color: #3583ca; +} +.btn-pure.btn-primary:hover .badge, .btn-pure.btn-primary:focus .badge, .btn-pure.btn-primary:active .badge, .btn-pure.btn-primary.active .badge, .open > .dropdown-toggle.btn-pure.btn-primary .badge { + color: #3583ca; +} +.btn-pure.btn-success { + color: #46be8a; +} +.btn-pure.btn-success:hover, .btn-pure.btn-success:focus, .btn-pure.btn-success:active, .btn-pure.btn-success.active, .open > .dropdown-toggle.btn-pure.btn-success { + color: #279566; +} +.btn-pure.btn-success:hover:hover, .btn-pure.btn-success:focus:hover, .btn-pure.btn-success:active:hover, .btn-pure.btn-success.active:hover, .open > .dropdown-toggle.btn-pure.btn-success:hover, .btn-pure.btn-success:hover:focus, .btn-pure.btn-success:focus:focus, .btn-pure.btn-success:active:focus, .btn-pure.btn-success.active:focus, .open > .dropdown-toggle.btn-pure.btn-success:focus, .btn-pure.btn-success:hover.focus, .btn-pure.btn-success:focus.focus, .btn-pure.btn-success:active.focus, .btn-pure.btn-success.active.focus, .open > .dropdown-toggle.btn-pure.btn-success.focus { + color: #279566; +} +.btn-pure.btn-success:hover .badge, .btn-pure.btn-success:focus .badge, .btn-pure.btn-success:active .badge, .btn-pure.btn-success.active .badge, .open > .dropdown-toggle.btn-pure.btn-success .badge { + color: #279566; +} +.btn-pure.btn-info { + color: #57c7d4; +} +.btn-pure.btn-info:hover, .btn-pure.btn-info:focus, .btn-pure.btn-info:active, .btn-pure.btn-info.active, .open > .dropdown-toggle.btn-pure.btn-info { + color: #37a9b7; +} +.btn-pure.btn-info:hover:hover, .btn-pure.btn-info:focus:hover, .btn-pure.btn-info:active:hover, .btn-pure.btn-info.active:hover, .open > .dropdown-toggle.btn-pure.btn-info:hover, .btn-pure.btn-info:hover:focus, .btn-pure.btn-info:focus:focus, .btn-pure.btn-info:active:focus, .btn-pure.btn-info.active:focus, .open > .dropdown-toggle.btn-pure.btn-info:focus, .btn-pure.btn-info:hover.focus, .btn-pure.btn-info:focus.focus, .btn-pure.btn-info:active.focus, .btn-pure.btn-info.active.focus, .open > .dropdown-toggle.btn-pure.btn-info.focus { + color: #37a9b7; +} +.btn-pure.btn-info:hover .badge, .btn-pure.btn-info:focus .badge, .btn-pure.btn-info:active .badge, .btn-pure.btn-info.active .badge, .open > .dropdown-toggle.btn-pure.btn-info .badge { + color: #37a9b7; +} +.btn-pure.btn-warning { + color: #f2a654; +} +.btn-pure.btn-warning:hover, .btn-pure.btn-warning:focus, .btn-pure.btn-warning:active, .btn-pure.btn-warning.active, .open > .dropdown-toggle.btn-pure.btn-warning { + color: #e98f2e; +} +.btn-pure.btn-warning:hover:hover, .btn-pure.btn-warning:focus:hover, .btn-pure.btn-warning:active:hover, .btn-pure.btn-warning.active:hover, .open > .dropdown-toggle.btn-pure.btn-warning:hover, .btn-pure.btn-warning:hover:focus, .btn-pure.btn-warning:focus:focus, .btn-pure.btn-warning:active:focus, .btn-pure.btn-warning.active:focus, .open > .dropdown-toggle.btn-pure.btn-warning:focus, .btn-pure.btn-warning:hover.focus, .btn-pure.btn-warning:focus.focus, .btn-pure.btn-warning:active.focus, .btn-pure.btn-warning.active.focus, .open > .dropdown-toggle.btn-pure.btn-warning.focus { + color: #e98f2e; +} +.btn-pure.btn-warning:hover .badge, .btn-pure.btn-warning:focus .badge, .btn-pure.btn-warning:active .badge, .btn-pure.btn-warning.active .badge, .open > .dropdown-toggle.btn-pure.btn-warning .badge { + color: #e98f2e; +} +.btn-pure.btn-danger { + color: #f96868; +} +.btn-pure.btn-danger:hover, .btn-pure.btn-danger:focus, .btn-pure.btn-danger:active, .btn-pure.btn-danger.active, .open > .dropdown-toggle.btn-pure.btn-danger { + color: #d6494b; +} +.btn-pure.btn-danger:hover:hover, .btn-pure.btn-danger:focus:hover, .btn-pure.btn-danger:active:hover, .btn-pure.btn-danger.active:hover, .open > .dropdown-toggle.btn-pure.btn-danger:hover, .btn-pure.btn-danger:hover:focus, .btn-pure.btn-danger:focus:focus, .btn-pure.btn-danger:active:focus, .btn-pure.btn-danger.active:focus, .open > .dropdown-toggle.btn-pure.btn-danger:focus, .btn-pure.btn-danger:hover.focus, .btn-pure.btn-danger:focus.focus, .btn-pure.btn-danger:active.focus, .btn-pure.btn-danger.active.focus, .open > .dropdown-toggle.btn-pure.btn-danger.focus { + color: #d6494b; +} +.btn-pure.btn-danger:hover .badge, .btn-pure.btn-danger:focus .badge, .btn-pure.btn-danger:active .badge, .btn-pure.btn-danger.active .badge, .open > .dropdown-toggle.btn-pure.btn-danger .badge { + color: #d6494b; +} +.btn-pure.btn-dark { + color: #526069; +} +.btn-pure.btn-dark:hover, .btn-pure.btn-dark:focus, .btn-pure.btn-dark:active, .btn-pure.btn-dark.active, .open > .dropdown-toggle.btn-pure.btn-dark { + color: #37474f; +} +.btn-pure.btn-dark:hover:hover, .btn-pure.btn-dark:focus:hover, .btn-pure.btn-dark:active:hover, .btn-pure.btn-dark.active:hover, .open > .dropdown-toggle.btn-pure.btn-dark:hover, .btn-pure.btn-dark:hover:focus, .btn-pure.btn-dark:focus:focus, .btn-pure.btn-dark:active:focus, .btn-pure.btn-dark.active:focus, .open > .dropdown-toggle.btn-pure.btn-dark:focus, .btn-pure.btn-dark:hover.focus, .btn-pure.btn-dark:focus.focus, .btn-pure.btn-dark:active.focus, .btn-pure.btn-dark.active.focus, .open > .dropdown-toggle.btn-pure.btn-dark.focus { + color: #37474f; +} +.btn-pure.btn-dark:hover .badge, .btn-pure.btn-dark:focus .badge, .btn-pure.btn-dark:active .badge, .btn-pure.btn-dark.active .badge, .open > .dropdown-toggle.btn-pure.btn-dark .badge { + color: #37474f; +} +.btn-pure.btn-inverse { + color: #fff; +} +.btn-pure.btn-inverse:hover, .btn-pure.btn-inverse:focus, .btn-pure.btn-inverse:active, .btn-pure.btn-inverse.active, .open > .dropdown-toggle.btn-pure.btn-inverse { + color: #fff; +} +.btn-pure.btn-inverse:hover:hover, .btn-pure.btn-inverse:focus:hover, .btn-pure.btn-inverse:active:hover, .btn-pure.btn-inverse.active:hover, .open > .dropdown-toggle.btn-pure.btn-inverse:hover, .btn-pure.btn-inverse:hover:focus, .btn-pure.btn-inverse:focus:focus, .btn-pure.btn-inverse:active:focus, .btn-pure.btn-inverse.active:focus, .open > .dropdown-toggle.btn-pure.btn-inverse:focus, .btn-pure.btn-inverse:hover.focus, .btn-pure.btn-inverse:focus.focus, .btn-pure.btn-inverse:active.focus, .btn-pure.btn-inverse.active.focus, .open > .dropdown-toggle.btn-pure.btn-inverse.focus { + color: #fff; +} +.btn-pure.btn-inverse:hover .badge, .btn-pure.btn-inverse:focus .badge, .btn-pure.btn-inverse:active .badge, .btn-pure.btn-inverse.active .badge, .open > .dropdown-toggle.btn-pure.btn-inverse .badge { + color: #fff; +} +.caret { + border-top: 4px solid; + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; + -webkit-transform: scale(1.001); + -ms-transform: scale(1.001); + -o-transform: scale(1.001); + transform: scale(1.001); +} +.btn-group .btn + .dropdown-toggle .caret { + margin-left: 0; +} +.dropdown-toggle.btn .caret { + margin-left: .3em; +} +.dropdown-toggle.btn.btn-xs .caret { + margin-left: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: .8em; + padding-left: .8em; +} +.dropdown-menu { + padding: 1px 0; + margin-top: 3px; + border-radius: 0; + -webkit-box-shadow: 0 3px 12px rgba(0, 0, 0, .05); + box-shadow: 0 3px 12px rgba(0, 0, 0, .05); + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.dropdown-menu .divider { + margin: 6px 0; +} +.dropdown-menu > li { + padding: 0 3px; + margin: 2px 0; +} +.dropdown-menu > li > a { + padding: 6px 10px; + -webkit-transition: background-color .25s; + -o-transition: background-color .25s; + transition: background-color .25s; +} +.dropdown-menu li .icon:first-child, .dropdown-menu li > a .icon:first-child { + width: 1em; + margin-right: .5em; + text-align: center; +} +.dropdown-menu.bullet { + margin-top: 12px; +} +.dropdown-menu.bullet:before, .dropdown-menu.bullet:after { + position: absolute; + left: 10px; + display: inline-block; + width: 0; + height: 0; + content: ""; + border: 7px solid transparent; + border-top-width: 0; +} +.dropdown-menu.bullet:before { + top: -7px; + border-bottom-color: #e4eaec; +} +.dropdown-menu.bullet:after { + top: -6px; + border-bottom-color: #fff; +} +.dropdown-menu-right.bullet:before, .dropdown-menu-right.bullet:after { + right: 10px; + left: auto; +} +.dropdown-menu.animate { + overflow: hidden; +} +.dropdown-menu.animate > li { + -webkit-animation-name: slide-left; + -o-animation-name: slide-left; + animation-name: slide-left; + -webkit-animation-duration: .5s; + -o-animation-duration: .5s; + animation-duration: .5s; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.dropdown-menu.animate > li:nth-child(1) { + -webkit-animation-delay: .02s; + -o-animation-delay: .02s; + animation-delay: .02s; +} +.dropdown-menu.animate > li:nth-child(2) { + -webkit-animation-delay: .04s; + -o-animation-delay: .04s; + animation-delay: .04s; +} +.dropdown-menu.animate > li:nth-child(3) { + -webkit-animation-delay: .06s; + -o-animation-delay: .06s; + animation-delay: .06s; +} +.dropdown-menu.animate > li:nth-child(4) { + -webkit-animation-delay: .08s; + -o-animation-delay: .08s; + animation-delay: .08s; +} +.dropdown-menu.animate > li:nth-child(5) { + -webkit-animation-delay: .1s; + -o-animation-delay: .1s; + animation-delay: .1s; +} +.dropdown-menu.animate > li:nth-child(6) { + -webkit-animation-delay: .12s; + -o-animation-delay: .12s; + animation-delay: .12s; +} +.dropdown-menu.animate > li:nth-child(7) { + -webkit-animation-delay: .14s; + -o-animation-delay: .14s; + animation-delay: .14s; +} +.dropdown-menu.animate > li:nth-child(8) { + -webkit-animation-delay: .16s; + -o-animation-delay: .16s; + animation-delay: .16s; +} +.dropdown-menu.animate > li:nth-child(9) { + -webkit-animation-delay: .18s; + -o-animation-delay: .18s; + animation-delay: .18s; +} +.dropdown-menu.animate > li:nth-child(10) { + -webkit-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.dropdown-menu.animate > li.divider { + -webkit-animation-name: none; + -o-animation-name: none; + animation-name: none; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(1) { + -webkit-animation-delay: .02s; + -o-animation-delay: .02s; + animation-delay: .02s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(2) { + -webkit-animation-delay: .04s; + -o-animation-delay: .04s; + animation-delay: .04s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(3) { + -webkit-animation-delay: .06s; + -o-animation-delay: .06s; + animation-delay: .06s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(4) { + -webkit-animation-delay: .08s; + -o-animation-delay: .08s; + animation-delay: .08s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(5) { + -webkit-animation-delay: .1s; + -o-animation-delay: .1s; + animation-delay: .1s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(6) { + -webkit-animation-delay: .12s; + -o-animation-delay: .12s; + animation-delay: .12s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(7) { + -webkit-animation-delay: .14s; + -o-animation-delay: .14s; + animation-delay: .14s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(8) { + -webkit-animation-delay: .16s; + -o-animation-delay: .16s; + animation-delay: .16s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(9) { + -webkit-animation-delay: .18s; + -o-animation-delay: .18s; + animation-delay: .18s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(10) { + -webkit-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + margin-bottom: 6px; + -webkit-box-shadow: 0 -3px 12px rgba(0, 0, 0, .05); + box-shadow: 0 -3px 12px rgba(0, 0, 0, .05); +} +.dropup .dropdown-menu.bullet, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet { + margin-bottom: 12px; +} +.dropup .dropdown-menu.bullet:before, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before, .dropup .dropdown-menu.bullet:after, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after { + top: auto; + border-top-width: 7px; + border-bottom-width: 0; +} +.dropup .dropdown-menu.bullet:before, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before { + bottom: -7px; + border-top-color: #e4eaec; +} +.dropup .dropdown-menu.bullet:after, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after { + bottom: -6px; + border-top-color: #fff; +} +.dropdown-menu > .dropdown-header { + padding: 8px 20px 6px; + font-size: 14px; + font-weight: 700; + cursor: default; +} +.dropdown-menu > .dropdown-submenu { + position: relative; +} +.dropdown-menu > .dropdown-submenu > a { + position: relative; +} +.dropdown-menu > .dropdown-submenu > a:after { + position: absolute; + right: 10px; + display: inline-block; + width: 0; + height: 0; + margin-top: 6px; + vertical-align: middle; + content: ""; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px dashed; +} +.dropdown-menu > .dropdown-submenu .dropdown-menu { + left: 100%; + margin: 0; +} +.dropdown-menu > .dropdown-submenu.dropdown-menu-left .dropdown-menu { + left: -100%; +} +.dropdown-menu > .dropdown-submenu:hover .dropdown-menu { + display: block; +} +.dropdown .dropdown-submenu .dropdown-menu { + top: 0; +} +.dropup .dropdown-submenu .dropdown-menu { + bottom: 0; +} +.dropdown-menu-media { + width: 360px; + padding-top: 0; + padding-bottom: 0; +} +.dropdown-menu-media > li { + padding: 0; + margin: 0; +} +.dropdown-menu-media .dropdown-menu-header { + position: relative; + padding: 20px 20px; + background-color: #fff; + border-bottom: 1px solid #e4eaec; +} +.dropdown-menu-media .dropdown-menu-header > h3, .dropdown-menu-media .dropdown-menu-header > h4, .dropdown-menu-media .dropdown-menu-header > h5 { + margin: 0; +} +.dropdown-menu-media .dropdown-menu-header .badge, .dropdown-menu-media .dropdown-menu-header .label { + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.dropdown-menu-media .list-group { + max-height: 270px; + margin: 0; + font-size: 12px; + border-radius: 0; +} +.dropdown-menu-media .list-group-item { + padding: 0 20px; + border: none; + border-radius: 0 !important; +} +.dropdown-menu-media .list-group-item .media { + padding: 15px 0; + border-top: 1px solid #e4eaec; +} +.dropdown-menu-media .list-group-item:first-child .media { + border-top: none; +} +.dropdown-menu-media > .dropdown-menu-footer { + background-color: #f3f7f9; + border-top: 1px solid #e4eaec; +} +.dropdown-menu-media > .dropdown-menu-footer > a { + padding: 15px 20px !important; + color: #a3afb7 !important; +} +.dropdown-menu-media > .dropdown-menu-footer > a:hover { + color: #89bceb !important; + background-color: transparent !important; +} +.dropdown-menu-media > .dropdown-menu-footer > .dropdown-menu-footer-btn { + position: absolute; + right: 0; +} +.dropdown-menu-media > .dropdown-menu-footer > .dropdown-menu-footer-btn:hover { + color: #89bceb !important; + background-color: transparent !important; +} +.dropdown-menu-primary > .active > a, .dropdown-menu-primary > .active > a:hover, .dropdown-menu-primary > .active > a:focus { + color: #fff; + background-color: #62a8ea; +} +.dropdown-menu-success > .active > a, .dropdown-menu-success > .active > a:hover, .dropdown-menu-success > .active > a:focus { + color: #fff; + background-color: #46be8a; +} +.dropdown-menu-info > .active > a, .dropdown-menu-info > .active > a:hover, .dropdown-menu-info > .active > a:focus { + color: #fff; + background-color: #57c7d4; +} +.dropdown-menu-warning > .active > a, .dropdown-menu-warning > .active > a:hover, .dropdown-menu-warning > .active > a:focus { + color: #fff; + background-color: #f2a654; +} +.dropdown-menu-danger > .active > a, .dropdown-menu-danger > .active > a:hover, .dropdown-menu-danger > .active > a:focus { + color: #fff; + background-color: #f96868; +} +.dropdown-menu-dark > .active > a, .dropdown-menu-dark > .active > a:hover, .dropdown-menu-dark > .active > a:focus { + color: #fff; + background-color: #526069; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05); +} +.btn-group:focus .dropdown-toggle { + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.input-group-addon { + -webkit-transition: border .25s linear, color .25s linear, background-color .25s linear; + -o-transition: border .25s linear, color .25s linear, background-color .25s linear; + transition: border .25s linear, color .25s linear, background-color .25s linear; +} +.input-group-btn .btn > .icon { + vertical-align: bottom; +} +.input-group-btn .dropdown-toggle.btn .caret { + margin-left: 2px; +} +.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { + z-index: 1; +} +.nav > li > a { + overflow: hidden; +} +.nav > li > a:focus { + outline: none; +} +.nav > li > a .close { + display: inline-block; + margin-left: 10px; + line-height: .6; +} +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + border-color: transparent; +} +.nav-quick { + padding: 0; + margin-right: 0; + margin-bottom: 22px; + margin-left: 0; + background-color: #fff; + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.nav-quick li { + position: relative; + display: block; + padding: 0; + text-align: center; + list-style: none; +} +.nav-quick a { + display: block; + padding: 16px 0; + color: #76838f; + text-decoration: none; +} +.nav-quick a .icon { + display: block; + margin-bottom: .2em; + font-size: 32px; +} +.nav-quick a:hover { + background-color: #f3f7f9; +} +.nav-quick .label, .nav-quick .badge { + position: absolute; + top: 0; + right: 0; +} +.nav-quick-sm a { + padding: 12px 0; +} +.nav-quick-sm a .icon { + font-size: 24px; +} +.nav-quick-lg a { + padding: 22px 0; +} +.nav-quick-lg a .icon { + font-size: 40px; +} +.nav-quick-bordered { + border-top: 1px solid #e4eaec; + border-left: 1px solid #e4eaec; +} +.nav-quick-bordered li { + border-right: 1px solid #e4eaec; + border-bottom: 1px solid #e4eaec; +} +.nav-pills > li > a { + -webkit-transition: border .2s linear, color .2s linear, background-color .2s linear; + -o-transition: border .2s linear, color .2s linear, background-color .2s linear; + transition: border .2s linear, color .2s linear, background-color .2s linear; +} +.nav-pills-rounded > li > a { + padding-right: 20px; + padding-left: 20px; + margin-right: 5px; + margin-left: 5px; + border-radius: 1000px; +} +.nav-tabs > li > a { + padding: 10px 20px; + line-height: 1.3; + color: #76838f; + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.nav-tabs > li > a > .icon { + width: 1em; + margin-right: .5em; + line-height: 1; +} +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #fff; + background-color: #62a8ea; + border-color: transparent; + border-bottom-color: #62a8ea; +} +.nav-tabs > li .dropdown-menu { + margin-top: 3px; +} +.nav-tabs.nav-justified > li > a { + border-radius: 4px 4px 0 0; +} +.nav-tabs.nav-justified > li.active > a, .nav-tabs.nav-justified > li.active > a:hover, .nav-tabs.nav-justified > li.active > a:focus { + border-color: transparent; + border-bottom-color: #62a8ea; +} +.nav-tabs.nav-tabs-bottom { + border-top: 1px solid #e4eaec; + border-bottom: none; +} +.nav-tabs.nav-tabs-bottom > li { + margin-top: -1px; + margin-bottom: 0; +} +.nav-tabs.nav-tabs-bottom > li > a { + border-radius: 0 0 4px 4px; +} +.nav-tabs.nav-tabs-bottom > li > a:hover, .nav-tabs.nav-tabs-bottom > li > a:focus { + border-top-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs.nav-tabs-bottom.nav-justified { + border-top: none; +} +.nav-tabs.nav-tabs-bottom.nav-justified > li > a { + border-top-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs.nav-tabs-bottom.nav-justified > li.active > a, .nav-tabs.nav-tabs-bottom.nav-justified > li.active > a:hover, .nav-tabs.nav-tabs-bottom.nav-justified > li.active > a:focus { + border-top: 1px solid #62a8ea; +} +.nav-tabs-reverse > li { + float: right; +} +.nav-tabs-reverse > li > a { + margin-right: 0; + margin-left: 2px; +} +.nav-tabs-solid { + border-bottom-color: #f3f7f9; +} +.nav-tabs-solid > li > a:hover { + border-color: transparent; +} +.nav-tabs-solid > li.active > a, .nav-tabs-solid > li.active > a:hover, .nav-tabs-solid > li.active > a:focus { + color: #76838f; + background-color: #f3f7f9; + border-color: transparent; +} +.nav-tabs-solid ~ .tab-content { + padding: 20px; + background-color: #f3f7f9; +} +.nav-tabs-solid.nav-justified > li > a { + border: none; +} +.nav-tabs-solid.nav-justified > li.active > a, .nav-tabs-solid.nav-justified > li.active > a:hover, .nav-tabs-solid.nav-justified > li.active > a:focus { + border: none; +} +.nav-tabs-solid.nav-tabs-bottom > li.active > a, .nav-tabs-solid.nav-tabs-bottom > li.active > a:hover, .nav-tabs-solid.nav-tabs-bottom > li.active > a:focus { + border: none; +} +.nav-tabs-line > li > a { + padding: 10px 20px; + border-bottom: 2px solid transparent; +} +.nav-tabs-line > li > a:hover, .nav-tabs-line > li > a:focus { + background-color: transparent; +} +.nav-tabs-line > li > a:hover { + border-bottom-color: #ccd5db; +} +.nav-tabs-line > li.active > a, .nav-tabs-line > li.active > a:hover, .nav-tabs-line > li.active > a:focus { + color: #62a8ea; + background-color: transparent; + border-bottom: 2px solid #62a8ea; +} +.nav-tabs-line .open > a, .nav-tabs-line .open > a:hover, .nav-tabs-line .open > a:focus { + border-color: transparent; + border-bottom-color: #ccd5db; +} +.nav-tabs-line.nav-tabs-bottom > li > a { + border-top: 2px solid transparent; + border-bottom: none; +} +.nav-tabs-line.nav-tabs-bottom > li > a:hover { + border-top-color: #ccd5db; + border-bottom-color: transparent; +} +.nav-tabs-line.nav-tabs-bottom > li.active > a, .nav-tabs-line.nav-tabs-bottom > li.active > a:hover, .nav-tabs-line.nav-tabs-bottom > li.active > a:focus { + border-top: 2px solid #62a8ea; + border-bottom: none; +} +.nav-tabs-line.nav-justified > li > a { + border-bottom: 2px solid #e4eaec; +} +.nav-tabs-line.nav-justified > li > a:hover { + border-bottom-color: #ccd5db; +} +.nav-tabs-line.nav-justified > li.active > a, .nav-tabs-line.nav-justified > li.active > a:hover, .nav-tabs-line.nav-justified > li.active > a:focus { + border-color: transparent; + border-bottom: 2px solid #62a8ea; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom { + border-top: none; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li > a { + border-top: 2px solid #e4eaec; + border-bottom: none; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li > a:hover { + border-top-color: #ccd5db; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a, .nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a:hover, .nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a:focus { + border-top-color: #62a8ea; + border-bottom: none; +} +.nav-tabs-vertical:before, .nav-tabs-vertical:after { + display: table; + content: " "; +} +.nav-tabs-vertical:after { + clear: both; +} +.nav-tabs-vertical .nav-tabs { + float: left; + border-right: 1px solid #e4eaec; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs > li { + float: none; + margin-right: -1px; + margin-bottom: 0; +} +.nav-tabs-vertical .nav-tabs > li > a { + padding: 10px 20px; + margin-right: 0; + margin-bottom: 2px; + border-radius: 4px 0 0 4px; +} +.nav-tabs-vertical .nav-tabs > li > a:hover { + border-right-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs-vertical .nav-tabs > li.active > a, .nav-tabs-vertical .nav-tabs > li.active > a:focus, .nav-tabs-vertical .nav-tabs > li.active > a:hover { + border-right-color: #62a8ea; +} +.nav-tabs-vertical .nav-tabs-reverse { + float: right; + border-right: none; + border-left: 1px solid #e4eaec; +} +.nav-tabs-vertical .nav-tabs-reverse > li { + margin-right: 0; + margin-left: -1px; +} +.nav-tabs-vertical .nav-tabs-reverse > li > a { + margin-left: 0; + border-radius: 0 4px 4px 0; +} +.nav-tabs-vertical .nav-tabs-reverse > li > a:hover { + border-right-color: transparent; + border-left-color: #e4eaec; +} +.nav-tabs-vertical .nav-tabs-reverse > li.active > a, .nav-tabs-vertical .nav-tabs-reverse > li.active > a:focus, .nav-tabs-vertical .nav-tabs-reverse > li.active > a:hover { + border-left-color: #62a8ea; +} +.nav-tabs-vertical .nav-tabs-solid { + border-right-color: #f3f7f9; +} +.nav-tabs-vertical .nav-tabs-solid > li > a:hover { + border-color: transparent; +} +.nav-tabs-vertical .nav-tabs-solid > li.active > a, .nav-tabs-vertical .nav-tabs-solid > li.active > a:focus, .nav-tabs-vertical .nav-tabs-solid > li.active > a:hover { + border-color: transparent; +} +.nav-tabs-vertical .nav-tabs-solid + .tab-content { + padding: 20px; +} +.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse { + border-left-color: #f3f7f9; +} +.nav-tabs-vertical .nav-tabs-line > li > a { + border-right: 2px solid transparent; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs-line > li > a:hover { + border-right-color: #ccd5db; +} +.nav-tabs-vertical .nav-tabs-line > li.active > a, .nav-tabs-vertical .nav-tabs-line > li.active > a:hover, .nav-tabs-vertical .nav-tabs-line > li.active > a:focus { + border-right: 2px solid #62a8ea; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li > a { + border-right-width: 1px; + border-left: 2px solid transparent; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li > a:hover { + border-color: transparent; + border-left-color: #ccd5db; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a, .nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a:hover, .nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a:focus { + border-right: 1px solid transparent; + border-left: 2px solid #62a8ea; +} +.nav-tabs-vertical .tab-content { + overflow: hidden; +} +.nav-tabs-inverse .nav-tabs-solid { + border-bottom-color: #fff; +} +.nav-tabs-inverse .nav-tabs-solid > li.active > a, .nav-tabs-inverse .nav-tabs-solid > li.active > a:hover, .nav-tabs-inverse .nav-tabs-solid > li.active > a:focus { + color: #76838f; + background-color: #fff; +} +.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid { + border-right-color: #fff; +} +.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse { + border-left-color: #fff; +} +.nav-tabs-inverse .tab-content { + background: #fff; +} +.nav-tabs-animate .tab-content { + overflow: hidden; +} +.nav-tabs-lg > li > a { + padding: 12px 20px; + font-size: 18px; + line-height: 1.3333333; +} +.nav-tabs-sm > li > a { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.navbar-toggle { + height: 60px; + padding: 19px 12px; + margin-top: 13px; + margin-top: 0; + margin-bottom: 13px; + margin-bottom: 0; + line-height: 22px; + background: transparent !important; + -webkit-transition: color .25s linear; + -o-transition: color .25s linear; + transition: color .25s linear; +} +.navbar-toggle .icon { + margin-top: -1px; +} +.navbar-toggle:hover { + background: transparent !important; +} +.navbar-toggle-left { + float: left; + margin-right: 0; + margin-left: 12px; +} +.navbar { + border: none; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px rgba(0, 0, 0, .08); +} +.navbar-fixed-top, .navbar-fixed-bottom { + width: 100%; +} +@media (min-width: 768px) { + .hidden-float { + display: block; + } +} +@media (max-width: 767px) { + .hidden-float { + display: none !important; + } +} +.navbar-brand { + padding: 19px 20px; + font-weight: 700; +} +.navbar-brand > .navbar-brand-logo { + display: inline-block; +} +.navbar-brand-logo { + height: 32px; + margin-top: -5px; + font-size: 1.2em; + font-weight: bold; + color: white; +} +.navbar-brand-logo img { + max-height: 28px; + padding-right:5px; +} + +.navbar-brand-text { + margin-left: 6px; +} +@media (max-width: 767px) { + .navbar-brand-center { + position: absolute; + left: 50%; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + -o-transform: translate(-50%, 0); + transform: translate(-50%, 0); + } +} +@media (min-width: 768px) { + .navbar-mega .container, .navbar-mega .container-fluid { + position: relative; + } +} +.navbar-mega .dropdown-menu { + left: auto; +} +.navbar-mega .dropdown-mega { + position: static; +} +.navbar-mega .mega-content { + padding: 20px 30px; +} +.navbar-mega .mega-menu { + min-width: 150px; + max-width: 100%; +} +.navbar-mega .mega-menu > ul { + padding-left: 0; +} +.navbar-mega .mega-menu .list-icons { + margin-bottom: 6px; +} +.navbar-mega .dropdown.dropdown-fw .dropdown-menu { + right: 5px; + left: 5px; +} +@media (max-width: 767px) { + .navbar-mega .dropdown.dropdown-fw .dropdown-menu { + right: 0; + left: 0; + } +} +.navbar-nav > li > a.navbar-avatar, .navbar-toolbar > li > a.navbar-avatar { + padding-top: 15px; + padding-bottom: 15px; +} +@media (max-width: 767px) { + .navbar-nav > li > a.navbar-avatar { + padding-top: 6px; + padding-bottom: 6px; + } +} +.navbar-avatar .avatar { + width: 30px; +} +.navbar-form .icon { + font-size: 16px; + color: rgba(55, 71, 79, .4); +} +.navbar-form .form-control { + background-color: #f3f7f9; + border: none; + border-radius: 38px; +} +@media (min-width: 768px) { + .navbar-search.collapse { + display: block !important; + height: auto !important; + overflow: visible !important; + visibility: visible !important; + } +} +@media (max-width: 767px) { + .navbar-search { + padding-right: 12px; + padding-left: 12px; + } +} +@media (max-width: 767px) { + .navbar-search .navbar-form { + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } +} +.container > .navbar-search, .container-fluid > .navbar-search { + margin-right: -12px; + margin-left: -12px; +} +@media (min-width: 768px) { + .container > .navbar-search, .container-fluid > .navbar-search { + margin-right: 0; + margin-left: 0; + } +} +.navbar-search-overlap { + position: absolute !important; + top: 0; + right: 0; + left: 0; + background-color: #fff; +} +.navbar-search-overlap .form-group, .navbar-search-overlap .form-control { + display: block !important; + margin: 0; +} +.navbar-search-overlap .form-control { + height: 60px !important; + background-color: transparent !important; + border-radius: 0; +} +.navbar-search-overlap .form-control:focus { + border-color: transparent; +} +.navbar-collapse-toolbar.in { + overflow-y: visible; +} +.navbar-toolbar { + float: left; +} +.navbar-toolbar:before, .navbar-toolbar:after { + display: table; + content: " "; +} +.navbar-toolbar:after { + clear: both; +} +.navbar-toolbar > li { + float: left; +} +.navbar-toolbar > li:before, .navbar-toolbar > li:after { + display: table; + content: " "; +} +.navbar-toolbar > li:after { + clear: both; +} +.navbar-toolbar > li > a { + padding-top: 19px; + padding-bottom: 19px; + line-height: 22px; +} +.navbar-toolbar .dropdown-menu { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -o-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-animation-duration: .3s; + -o-animation-duration: .3s; + animation-duration: .3s; +} +@media (max-width: 767px) { + .navbar-toolbar .dropdown-menu:not(.dropdown-menu-media) { + max-height: 400px; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .navbar-toolbar .open { + position: static; + } + .navbar-toolbar .open .dropdown-menu { + right: 0; + left: 0; + float: none; + width: auto; + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + } +} +@media (max-width: 767px) and (max-device-width: 480px) and (orientation: landscape) { + .navbar-toolbar .dropdown-menu:not(.dropdown-menu-media) { + max-height: 200px; + } +} +@media (max-width: 767px) { + .navbar-toolbar-left { + float: left !important; + } + .navbar-toolbar-right { + float: right !important; + } +} +.icon-fullscreen { + font-family: "Web Icons"; +} +.icon-fullscreen:before { + content: "\f11d"; +} +.icon-fullscreen.active:before { + content: "\f11e"; +} +.icon-menubar { + font-family: "Web Icons"; +} +.icon-menubar:before { + content: "\f119"; +} +.icon-menubar.active:before { + content: "\f119"; +} +.navbar-default .navbar-toolbar > li > a { + color: #76838f; +} +.navbar-default .navbar-toolbar > li > a:hover, .navbar-default .navbar-toolbar > li > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .3); +} +.navbar-default .navbar-toolbar > .active > a, .navbar-default .navbar-toolbar > .active > a:hover, .navbar-default .navbar-toolbar > .active > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); +} +.navbar-default .navbar-toolbar > .disabled > a, .navbar-default .navbar-toolbar > .disabled > a:hover, .navbar-default .navbar-toolbar > .disabled > a:focus { + color: #ccd5db; + background-color: transparent; +} +.navbar-default .navbar-toggle { + color: #76838f; +} +.navbar-default .navbar-toolbar > .open > a, .navbar-default .navbar-toolbar > .open > a:hover, .navbar-default .navbar-toolbar > .open > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); +} +.navbar-inverse .navbar-toolbar > li > a { + color: #fff; +} +.navbar-inverse .navbar-toolbar > li > a:hover, .navbar-inverse .navbar-toolbar > li > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.navbar-inverse .navbar-toolbar > .active > a, .navbar-inverse .navbar-toolbar > .active > a:hover, .navbar-inverse .navbar-toolbar > .active > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.navbar-inverse .navbar-toolbar > .disabled > a, .navbar-inverse .navbar-toolbar > .disabled > a:hover, .navbar-inverse .navbar-toolbar > .disabled > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + color: #fff; +} +.navbar-inverse .navbar-toolbar > .open > a, .navbar-inverse .navbar-toolbar > .open > a:hover, .navbar-inverse .navbar-toolbar > .open > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.breadcrumb { + margin-bottom: 10px; +} +.breadcrumb li + li:before { + padding: 0 5px; +} +.breadcrumb li .icon { + text-decoration: none; +} +.breadcrumb li .icon:before { + margin-right: 10px; +} +.breadcrumb-arrow > li + li:before { + content: "\00bb\00a0"; +} +.pagination { + margin: 0; +} +.pagination li > a, .pagination li > span { + padding: 4px 10px; + -webkit-transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; + -o-transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; + transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; +} +.pagination li > a:hover, .pagination li > span:hover, .pagination li > a:focus, .pagination li > span:focus { + -webkit-transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; + -o-transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; + transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; +} +.pagination li .icon { + margin-top: -1px; +} +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #ccd5db; + cursor: not-allowed; + background-color: transparent; + border-color: #e4eaec; +} +.pagination-gap > li > a { + margin: 0 3px; + border-radius: 3px; +} +.pagination-gap > li > a:hover { + background-color: transparent; + border-color: #62a8ea; +} +.pagination-gap > li:first-child > a, .pagination-gap > li:last-child > a { + border-radius: 3px; +} +.pagination-no-border > li > a { + border: none; +} +.pagination-lg > li > a, .pagination-lg > li > span { + padding: 6px 14px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination-sm > li > a, .pagination-sm > li > span { + padding: 3px 8px; + font-size: 14px; + line-height: 1.3; +} +.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +.pager li > a, .pager li > span { + padding: 4px 15px; + color: #76838f; + -webkit-transition: all .2s ease; + -o-transition: all .2s ease; + transition: all .2s ease; +} +.pager li > a:hover, .pager li > a:focus { + color: #62a8ea; +} +.pager li .icon { + margin-top: -1px; +} +.pager li > a:hover, .pager li > a:focus { + border-color: #62a8ea; +} +.pager li:first-child { + margin-right: 5px; +} +.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { + border-color: #e4eaec; +} +.pager-round li > a, .pager-round li > span { + border-radius: 1000px; +} +.label { + padding: .25em .6em .25em; + font-weight: 400; + border-radius: .3em; +} +.label.label-outline { + color: #f3f7f9; + background-color: transparent; + border-color: #f3f7f9; +} +.label-outline { + border: 1px solid transparent; +} +.label-round { + border-radius: 1em; +} +.label-default { + color: #76838f; + background-color: #e4eaec; +} +.label-default[href]:hover, .label-default[href]:focus { + background-color: #f3f7f9; +} +.label-default.label-outline { + color: #e4eaec; + background-color: transparent; + border-color: #e4eaec; +} +.label-default[href]:hover, .label-default[href]:focus { + color: #a3afb7; +} +.label-default.label-outline { + color: #76838f; +} +.label-primary { + background-color: #62a8ea; +} +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #89bceb; +} +.label-primary.label-outline { + color: #62a8ea; + background-color: transparent; + border-color: #62a8ea; +} +.label-success { + background-color: #46be8a; +} +.label-success[href]:hover, .label-success[href]:focus { + background-color: #5cd29d; +} +.label-success.label-outline { + color: #46be8a; + background-color: transparent; + border-color: #46be8a; +} +.label-info { + background-color: #57c7d4; +} +.label-info[href]:hover, .label-info[href]:focus { + background-color: #77d6e1; +} +.label-info.label-outline { + color: #57c7d4; + background-color: transparent; + border-color: #57c7d4; +} +.label-warning { + background-color: #f2a654; +} +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #f4b066; +} +.label-warning.label-outline { + color: #f2a654; + background-color: transparent; + border-color: #f2a654; +} +.label-danger { + background-color: #f96868; +} +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #fa7a7a; +} +.label-danger.label-outline { + color: #f96868; + background-color: transparent; + border-color: #f96868; +} +.label-dark { + background-color: #526069; +} +.label-dark[href]:hover, .label-dark[href]:focus { + background-color: #76838f; +} +.label-dark.label-outline { + color: #526069; + background-color: transparent; + border-color: #526069; +} +.label-lg { + font-size: 16px; +} +.label-sm { + padding: .1em .5em .1em; + font-size: 10px; +} +.badge { + padding: 2px 6px; +} +.btn .badge { + top: 0; +} +.badge.up { + position: relative; + top: -10px; + margin: 0 -.8em; + border-radius: 15px; +} +.badge.badge-absolute { + position: absolute; + top: -8px; + right: -10px; + z-index: 5; +} +.badge-radius { + border-radius: 3px; +} +.badge-primary { + color: #fff; + background-color: #62a8ea; +} +.badge-primary[href]:hover, .badge-primary[href]:focus { + color: #fff; + background-color: #358fe4; +} +.list-group-item.active > .badge-primary, .nav-pills > .active > a > .badge-primary { + color: #fff; + background-color: #62a8ea; +} +.badge-success { + color: #fff; + background-color: #46be8a; +} +.badge-success[href]:hover, .badge-success[href]:focus { + color: #fff; + background-color: #369b6f; +} +.list-group-item.active > .badge-success, .nav-pills > .active > a > .badge-success { + color: #fff; + background-color: #46be8a; +} +.badge-info { + color: #fff; + background-color: #57c7d4; +} +.badge-info[href]:hover, .badge-info[href]:focus { + color: #fff; + background-color: #33b6c5; +} +.list-group-item.active > .badge-info, .nav-pills > .active > a > .badge-info { + color: #fff; + background-color: #57c7d4; +} +.badge-warning { + color: #fff; + background-color: #f2a654; +} +.badge-warning[href]:hover, .badge-warning[href]:focus { + color: #fff; + background-color: #ee8d25; +} +.list-group-item.active > .badge-warning, .nav-pills > .active > a > .badge-warning { + color: #fff; + background-color: #f2a654; +} +.badge-danger { + color: #fff; + background-color: #f96868; +} +.badge-danger[href]:hover, .badge-danger[href]:focus { + color: #fff; + background-color: #f73737; +} +.list-group-item.active > .badge-danger, .nav-pills > .active > a > .badge-danger { + color: #fff; + background-color: #f96868; +} +.badge-dark { + color: #fff; + background-color: #526069; +} +.badge-dark[href]:hover, .badge-dark[href]:focus { + color: #fff; + background-color: #3c464c; +} +.list-group-item.active > .badge-dark, .nav-pills > .active > a > .badge-dark { + color: #fff; + background-color: #526069; +} +.badge-lg { + padding: 5px 9px; + font-size: 16px; +} +.badge-sm { + padding: 2px 5px; + font-size: 10px; +} +.jumbotron { + padding: 0; + border-radius: 3px; +} +.jumbotron > .jumbotron-photo img { + width: 100%; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.jumbotron-contents { + padding: 20px; +} +.jumbotron .carousel, .jumbotron .carousel-inner, .jumbotron .carousel-inner > .item.active img { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.jumbotron .carousel-inner > .item > a > img, .jumbotron .carousel-inner > .item > img { + width: 100%; +} +.jumbotron h1, .jumbotron .h1 { + font-size: 28px; +} +.jumbotron h2, .jumbotron .h2 { + font-size: 24px; +} +@media screen and (min-width: 768px) { + .jumbotron, .container .jumbotron { + padding: 0; + } + .jumbotron h1, .jumbotron .h1 { + font-size: 28px; + } +} +.thumbnail { + padding: 0; + border: none; + -webkit-transition: all .25s ease-in-out; + -o-transition: all .25s ease-in-out; + transition: all .25s ease-in-out; +} +.thumbnail .caption { + position: relative; + display: block; + padding-right: 0; + padding-left: 0; +} +.alert { + padding-right: 10px; + padding-left: 10px; +} +.alert ul { + padding-left: 17px; +} +.alert ul li { + padding-left: 0; +} +.panel > .alert { + margin: 0; +} +.alert h1, .alert h2, .alert h3, .alert h4, .alert h5, .alert h6 { + margin-bottom: 5px; +} +.alert p:last-child { + margin-bottom: 0; +} +.alert-alt { + color: #76838f; + background-color: rgba(243, 247, 249, .8); + border: none; + border-left: 3px solid transparent; +} +.alert-alt a, .alert-alt .alert-link { + text-decoration: none; +} +.alert-dismissible { + padding-right: 30px; +} +.alert-dismissible .close { + top: -2px; + text-decoration: none; + opacity: .6; +} +.alert-dismissible .close:hover, .alert-dismissible .close:focus { + opacity: 1; +} +.alert-dismissible.alert-alt .close { + color: #a3afb7; + opacity: .6; +} +.alert-dismissible.alert-alt .close:hover, .alert-dismissible.alert-alt .close:focus { + color: #a3afb7; + opacity: 1; +} +.alert-icon { + position: relative; + padding-left: 40px; +} +.alert-icon > .icon { + position: absolute; + top: 13px; + left: 10px; + width: 1em; + font-size: 16px; + text-align: center; +} +.alert-avatar { + position: relative; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 70px; +} +.alert-avatar > .avatar { + position: absolute; + top: 12px; + left: 15px; +} +.page-alert .alert-wrap { + max-height: 0; + padding: 0; + margin: 0; + overflow: hidden; + -webkit-transition: max-height .7s linear 0s; + -o-transition: max-height .7s linear 0s; + transition: max-height .7s linear 0s; +} +.page-alert .alert-wrap.in { + max-height: 500px; + -webkit-transition: max-height 1s linear 0s; + -o-transition: max-height 1s linear 0s; + transition: max-height 1s linear 0s; +} +.page-alert .alert-wrap .alert { + margin: 0; + text-align: left; + border-radius: 0; +} +.alert-primary { + color: #62a8ea; + background-color: rgba(232, 241, 248, .8); + border-color: #e8f1f8; +} +.alert-primary hr { + border-top-color: #d4e5f2; +} +.alert-primary .alert-link { + color: #358fe4; +} +.alert-primary .close { + color: #62a8ea; +} +.alert-primary .close:hover, .alert-primary .close:focus { + color: #62a8ea; +} +.alert-primary .alert-link { + color: #4e97d9; +} +.alert-alt.alert-primary { + border-color: #62a8ea; +} +.alert-alt.alert-primary a, .alert-alt.alert-primary .alert-link { + color: #62a8ea; +} +.alert-success .alert-link { + color: #36ab7a; +} +.alert-alt.alert-success { + border-color: #46be8a; +} +.alert-alt.alert-success a, .alert-alt.alert-success .alert-link { + color: #46be8a; +} +.alert-info .alert-link { + color: #47b8c6; +} +.alert-alt.alert-info { + border-color: #57c7d4; +} +.alert-alt.alert-info a, .alert-alt.alert-info .alert-link { + color: #57c7d4; +} +.alert-warning .alert-link { + color: #ec9940; +} +.alert-alt.alert-warning { + border-color: #f2a654; +} +.alert-alt.alert-warning a, .alert-alt.alert-warning .alert-link { + color: #f2a654; +} +.alert-danger .alert-link { + color: #e9595b; +} +.alert-alt.alert-danger { + border-color: #f96868; +} +.alert-alt.alert-danger a, .alert-alt.alert-danger .alert-link { + color: #f96868; +} +.alert-social { + position: relative; + padding-left: 65px; +} +.alert-social > .icon { + position: absolute; + top: 17px; + bottom: 0; + left: 15px; + width: 1em; + font-size: 30px; + text-align: center; +} +.alert-wechat { + color: #fff; + background-color: #51c332; + border-color: #51c332; +} +.alert-wechat hr { + border-top-color: #49af2d; +} +.alert-wechat .alert-link { + color: #e6e6e6; +} +.alert-wechat .close { + color: #fff; +} +.alert-wechat .close:hover, .alert-wechat .close:focus { + color: #fff; +} +.alert-wechat .alert-link { + font-weight: 700; + color: #fff; +} +.alert-qq { + color: #fff; + background-color: #12b7f5; + border-color: #12b7f5; +} +.alert-qq hr { + border-top-color: #0aa8e4; +} +.alert-qq .alert-link { + color: #e6e6e6; +} +.alert-qq .close { + color: #fff; +} +.alert-qq .close:hover, .alert-qq .close:focus { + color: #fff; +} +.alert-qq .alert-link { + font-weight: 700; + color: #fff; +} +.alert-weibo { + color: #fff; + background-color: #e6624b; + border-color: #e6624b; +} +.alert-weibo hr { + border-top-color: #e34e35; +} +.alert-weibo .alert-link { + color: #e6e6e6; +} +.alert-weibo .close { + color: #fff; +} +.alert-weibo .close:hover, .alert-weibo .close:focus { + color: #fff; +} +.alert-weibo .alert-link { + font-weight: 700; + color: #fff; +} +.alert-facebook { + color: #fff; + background-color: #3b5998; + border-color: #3b5998; +} +.alert-facebook hr { + border-top-color: #344e86; +} +.alert-facebook .alert-link { + color: #e6e6e6; +} +.alert-facebook .close { + color: #fff; +} +.alert-facebook .close:hover, .alert-facebook .close:focus { + color: #fff; +} +.alert-facebook .alert-link { + font-weight: 700; + color: #fff; +} +.alert-twitter { + color: #fff; + background-color: #55acee; + border-color: #55acee; +} +.alert-twitter hr { + border-top-color: #3ea1ec; +} +.alert-twitter .alert-link { + color: #e6e6e6; +} +.alert-twitter .close { + color: #fff; +} +.alert-twitter .close:hover, .alert-twitter .close:focus { + color: #fff; +} +.alert-twitter .alert-link { + font-weight: 700; + color: #fff; +} +.alert-google-plus { + color: #fff; + background-color: #dd4b39; + border-color: #dd4b39; +} +.alert-google-plus hr { + border-top-color: #d73925; +} +.alert-google-plus .alert-link { + color: #e6e6e6; +} +.alert-google-plus .close { + color: #fff; +} +.alert-google-plus .close:hover, .alert-google-plus .close:focus { + color: #fff; +} +.alert-google-plus .alert-link { + font-weight: 700; + color: #fff; +} +.alert-linkedin { + color: #fff; + background-color: #0976b4; + border-color: #0976b4; +} +.alert-linkedin hr { + border-top-color: #08669c; +} +.alert-linkedin .alert-link { + color: #e6e6e6; +} +.alert-linkedin .close { + color: #fff; +} +.alert-linkedin .close:hover, .alert-linkedin .close:focus { + color: #fff; +} +.alert-linkedin .alert-link { + font-weight: 700; + color: #fff; +} +.alert-flickr { + color: #fff; + background-color: #ff0084; + border-color: #ff0084; +} +.alert-flickr hr { + border-top-color: #e60077; +} +.alert-flickr .alert-link { + color: #e6e6e6; +} +.alert-flickr .close { + color: #fff; +} +.alert-flickr .close:hover, .alert-flickr .close:focus { + color: #fff; +} +.alert-flickr .alert-link { + font-weight: 700; + color: #fff; +} +.alert-tumblr { + color: #fff; + background-color: #35465c; + border-color: #35465c; +} +.alert-tumblr hr { + border-top-color: #2c3a4c; +} +.alert-tumblr .alert-link { + color: #e6e6e6; +} +.alert-tumblr .close { + color: #fff; +} +.alert-tumblr .close:hover, .alert-tumblr .close:focus { + color: #fff; +} +.alert-tumblr .alert-link { + font-weight: 700; + color: #fff; +} +.alert-github { + color: #fff; + background-color: #4183c4; + border-color: #4183c4; +} +.alert-github hr { + border-top-color: #3876b4; +} +.alert-github .alert-link { + color: #e6e6e6; +} +.alert-github .close { + color: #fff; +} +.alert-github .close:hover, .alert-github .close:focus { + color: #fff; +} +.alert-github .alert-link { + font-weight: 700; + color: #fff; +} +.alert-dribbble { + color: #fff; + background-color: #c32361; + border-color: #c32361; +} +.alert-dribbble hr { + border-top-color: #ad1f56; +} +.alert-dribbble .alert-link { + color: #e6e6e6; +} +.alert-dribbble .close { + color: #fff; +} +.alert-dribbble .close:hover, .alert-dribbble .close:focus { + color: #fff; +} +.alert-dribbble .alert-link { + font-weight: 700; + color: #fff; +} +.alert-youtube { + color: #fff; + background-color: #b31217; + border-color: #b31217; +} +.alert-youtube hr { + border-top-color: #9c1014; +} +.alert-youtube .alert-link { + color: #e6e6e6; +} +.alert-youtube .close { + color: #fff; +} +.alert-youtube .close:hover, .alert-youtube .close:focus { + color: #fff; +} +.alert-youtube .alert-link { + font-weight: 700; + color: #fff; +} +.alert.dark .alert-link { + font-weight: 700; + color: #fff !important; +} +.alert.dark .alert-left-border { + border: none; + border-left: 3px solid transparent; +} +.alert.dark.alert-dismissible.alert-alt .close { + color: #fff; +} +.alert.dark.alert-dismissible.alert-alt .close:hover, .alert.dark.alert-dismissible.alert-alt .close:focus { + color: #fff; +} +.alert.dark.alert-primary { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.alert.dark.alert-primary hr { + border-top-color: #4c9ce7; +} +.alert.dark.alert-primary .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-primary .close { + color: #fff; +} +.alert.dark.alert-primary .close:hover, .alert.dark.alert-primary .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-primary { + border-color: #2771b4; +} +.alert-alt.alert.dark.alert-primary a, .alert-alt.alert.dark.alert-primary .alert-link { + color: #fff; +} +.alert.dark.alert-success { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.alert.dark.alert-success hr { + border-top-color: #3dae7d; +} +.alert.dark.alert-success .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-success .close { + color: #fff; +} +.alert.dark.alert-success .close:hover, .alert.dark.alert-success .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-success { + border-color: #247151; +} +.alert-alt.alert.dark.alert-success a, .alert-alt.alert.dark.alert-success .alert-link { + color: #fff; +} +.alert.dark.alert-info { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.alert.dark.alert-info hr { + border-top-color: #43c0cf; +} +.alert.dark.alert-info .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-info .close { + color: #fff; +} +.alert.dark.alert-info .close:hover, .alert.dark.alert-info .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-info { + border-color: #2e8893; +} +.alert-alt.alert.dark.alert-info a, .alert-alt.alert.dark.alert-info .alert-link { + color: #fff; +} +.alert.dark.alert-warning { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.alert.dark.alert-warning hr { + border-top-color: #f09a3c; +} +.alert.dark.alert-warning .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-warning .close { + color: #fff; +} +.alert.dark.alert-warning .close:hover, .alert.dark.alert-warning .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-warning { + border-color: #cb7314; +} +.alert-alt.alert.dark.alert-warning a, .alert-alt.alert.dark.alert-warning .alert-link { + color: #fff; +} +.alert.dark.alert-danger { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.alert.dark.alert-danger hr { + border-top-color: #f84f4f; +} +.alert.dark.alert-danger .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-danger .close { + color: #fff; +} +.alert.dark.alert-danger .close:hover, .alert.dark.alert-danger .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-danger { + border-color: #d91d1f; +} +.alert-alt.alert.dark.alert-danger a, .alert-alt.alert.dark.alert-danger .alert-link { + color: #fff; +} +.progress { + height: 12px; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar { + line-height: 12px; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-square { + border-radius: 0; +} +.progress-circle { + border-radius: 1000px; +} +.progress-vertical { + position: relative; + display: inline-block; + width: 12px; + height: 250px; + min-height: 250px; + margin-right: 30px; + margin-bottom: 0; +} +.progress-vertical .progress-bar { + width: 100%; +} +.progress-vertical .progress-label { + display: block; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.progress-bar-indicating.active { + position: relative; + -webkit-animation: none; + -o-animation: none; + animation: none; +} +.progress-bar-indicating.active:before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + content: ""; + background-color: #fff; + border-radius: inherit; + opacity: 0; + -webkit-animation: progress-active 3s ease 0s infinite; + -o-animation: progress-active 3s ease 0s infinite; + animation: progress-active 3s ease 0s infinite; +} +.progress-vertical .progress-bar-indicating.active:before { + -webkit-animation-name: progress-vertical-active; + -o-animation-name: progress-vertical-active; + animation-name: progress-vertical-active; +} +.progress-skill { + position: relative; +} +.progress-skill .progress-bar > span { + position: absolute; + top: 0; + right: 10px; + color: #526069; +} +.progress-lg { + height: 22px; +} +.progress-lg.progress-vertical { + width: 16px; +} +.progress-lg .progress-bar { + line-height: 22px; +} +.progress-sm { + height: 8px; +} +.progress-sm.progress-vertical { + width: 8px; +} +.progress-sm .progress-bar { + line-height: 8px; +} +.progress-xs { + height: 6px; + border-radius: 1px; +} +.progress-xs.progress-vertical { + width: 6px; +} +.progress-xs .progress-bar { + line-height: 6px; +} +.contextual-progress { + margin: 20px 0; +} +.contextual-progress .progress-title { + float: left; +} +.contextual-progress .progress-label { + position: relative; + float: right; +} +.contextual-progress .progress { + height: 2px; + margin: 5px 0; +} +.contextual-progress .progress .progress-label { + display: none; +} +@-webkit-keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@-o-keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@-webkit-keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +@-o-keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +@keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +.media { + padding: 15px 0; + margin-top: 0; + border-bottom: 1px solid #e4eaec; +} +.media-object { + width: 120px; +} +.media-left, .media > .pull-left { + padding-right: 10px; +} +.media-right, .media > .pull-right { + padding-left: 10px; +} +.media-body { + overflow: visible; +} +.media .media { + padding-bottom: 0; + border-bottom: none; +} +.media-meta { + margin-bottom: 3px; + font-size: 12px; + color: #526069; +} +.media-lg .media-object { + width: 160px; +} +.media-lg .media { + margin-left: -110px; +} +.media-sm .media-object { + width: 80px; +} +.media-sm .media { + margin-left: -70px; +} +.media-xs .media-object { + width: 60px; +} +.media-xs .media { + margin-left: -60px; +} +@media screen and (min-width: 768px) { + .media .media { + margin-left: 0; + } +} +.list-group .media { + padding: 2px 0; + border-bottom: 0; +} +.list-group .media .pull-left, .list-group .media .media-left { + padding-right: 20px; +} +.list-group .media .pull-right, .list-group .media .media-right { + padding-left: 20px; +} +.list-group .media .pull-right .status { + margin-top: 15px; + margin-right: 5px; +} +.list-group .media .media-heading { + font-size: 14px; +} +.list-group .media .status { + margin-top: 2px; +} +.list-group-full > .list-group-item { + padding-right: 0; + padding-left: 0; +} +a.list-group-item { + border-radius: 3px; +} +a.list-group-item.disabled, a.list-group-item.disabled:hover, a.list-group-item.disabled:focus { + color: #ccd5db; + background-color: #f3f7f9; +} +a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { + color: #fff; + background-color: #62a8ea; +} +.list-group-item { + padding: 7px 10px; +} +.list-group-item .icon { + margin-right: 10px; +} +.list-group-item .badge { + margin-top: 3px; +} +.list-group.bg-inherit { + border-radius: 3px; +} +.list-group.bg-inherit .list-group-item { + background-color: transparent; + border-bottom-color: rgba(0, 0, 0, .075); +} +.list-group.bg-inherit .list-group-item:last-child { + border-bottom-color: transparent; +} +.list-group.bg-inherit .list-group-item:hover { + background-color: rgba(0, 0, 0, .075); + border-color: transparent; +} +.list-group-bordered .list-group-item { + border-color: #e4eaec; +} +.list-group-bordered .list-group-item.active, .list-group-bordered .list-group-item.active:hover, .list-group-bordered .list-group-item.active:focus { + color: #fff; + background-color: #4e97d9; + border-color: #4e97d9; +} +.list-group-dividered .list-group-item { + border-top-color: #e4eaec; +} +.list-group-dividered .list-group-item.active:hover { + border-top-color: #e4eaec; +} +.list-group-dividered .list-group-item:last-child { + border-bottom-color: #e4eaec; +} +.list-group-dividered .list-group-item:first-child { + border-top-color: transparent; +} +.list-group-dividered .list-group-item:first-child.active:hover { + border-top-color: transparent; +} +.list-group-gap .list-group-item { + margin-bottom: 2px; + border-radius: 3px; +} +.list-group-full .list-group-item { + padding-right: 0; + padding-left: 0; +} +.list-group-item-dark { + color: #fff; + background-color: #526069; +} +a.list-group-item-dark, button.list-group-item-dark { + color: #fff; +} +a.list-group-item-dark .list-group-item-heading, button.list-group-item-dark .list-group-item-heading { + color: inherit; +} +a.list-group-item-dark:hover, button.list-group-item-dark:hover, a.list-group-item-dark:focus, button.list-group-item-dark:focus { + color: #fff; + background-color: #47535b; +} +a.list-group-item-dark.active, button.list-group-item-dark.active, a.list-group-item-dark.active:hover, button.list-group-item-dark.active:hover, a.list-group-item-dark.active:focus, button.list-group-item-dark.active:focus { + color: #fff; + background-color: #fff; + border-color: #fff; +} +.panel { + position: relative; + margin-bottom: 24px; + border: none; +} +.panel > .nav-tabs-vertical .nav-tabs { + margin-left: -1px; +} +.panel > .nav-tabs-vertical .nav-tabs > li > a { + border-left: none; + border-radius: 0; +} +.panel > .nav-tabs-vertical .nav-tabs.nav-tabs-reverse { + margin-right: -1px; +} +.panel > .nav-tabs-vertical .nav-tabs.nav-tabs-reverse > li > a { + border-right: none; + border-radius: 0; +} +.panel:hover .panel-actions .show-on-hover { + display: inline-block; +} +.panel .panel-actions .show-on-hover { + display: none; +} +.panel.is-fullscreen { + position: fixed; + top: 0; + bottom: 0; + left: 0; + z-index: 9999; + width: 100%; + margin-bottom: 0; + border-radius: 0; +} +.panel.is-fullscreen .panel-loading { + border-radius: 0; +} +.panel.is-fullscreen .panel-actions [data-toggle=collapse] { + display: none; +} +.panel.is-fullscreen .panel-body { + max-height: 100%; + overflow: auto; +} +.panel.is-close { + display: none; +} +.panel.is-collapse .panel-body { + display: none; + height: 0; +} +.panel > .alert { + padding-right: 20px; + padding-left: 20px; +} +.panel > .alert-dismissible { + padding-right: 40px; +} +@media screen and (max-width: 480px) { + .panel > .alert { + padding-right: 20px; + padding-left: 20px; + } + .panel > .alert-dismissible { + padding-right: 40px; + } +} +.panel > .table > tr > td:first-child, .panel > .table-responsive > .table > tr > td:first-child, .panel > .table > thead > tr > td:first-child, .panel > .table-responsive > .table > thead > tr > td:first-child, .panel > .table > tbody > tr > td:first-child, .panel > .table-responsive > .table > tbody > tr > td:first-child, .panel > .table > tfoot > tr > td:first-child, .panel > .table-responsive > .table > tfoot > tr > td:first-child, .panel > .table > tr > th:first-child, .panel > .table-responsive > .table > tr > th:first-child, .panel > .table > thead > tr > th:first-child, .panel > .table-responsive > .table > thead > tr > th:first-child, .panel > .table > tbody > tr > th:first-child, .panel > .table-responsive > .table > tbody > tr > th:first-child, .panel > .table > tfoot > tr > th:first-child, .panel > .table-responsive > .table > tfoot > tr > th:first-child { + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel > .table > tr > td:first-child, .panel > .table-responsive > .table > tr > td:first-child, .panel > .table > thead > tr > td:first-child, .panel > .table-responsive > .table > thead > tr > td:first-child, .panel > .table > tbody > tr > td:first-child, .panel > .table-responsive > .table > tbody > tr > td:first-child, .panel > .table > tfoot > tr > td:first-child, .panel > .table-responsive > .table > tfoot > tr > td:first-child, .panel > .table > tr > th:first-child, .panel > .table-responsive > .table > tr > th:first-child, .panel > .table > thead > tr > th:first-child, .panel > .table-responsive > .table > thead > tr > th:first-child, .panel > .table > tbody > tr > th:first-child, .panel > .table-responsive > .table > tbody > tr > th:first-child, .panel > .table > tfoot > tr > th:first-child, .panel > .table-responsive > .table > tfoot > tr > th:first-child { + padding-left: 20px; + } +} +.panel > .table > tr > td:last-child, .panel > .table-responsive > .table > tr > td:last-child, .panel > .table > thead > tr > td:last-child, .panel > .table-responsive > .table > thead > tr > td:last-child, .panel > .table > tbody > tr > td:last-child, .panel > .table-responsive > .table > tbody > tr > td:last-child, .panel > .table > tfoot > tr > td:last-child, .panel > .table-responsive > .table > tfoot > tr > td:last-child, .panel > .table > tr > th:last-child, .panel > .table-responsive > .table > tr > th:last-child, .panel > .table > thead > tr > th:last-child, .panel > .table-responsive > .table > thead > tr > th:last-child, .panel > .table > tbody > tr > th:last-child, .panel > .table-responsive > .table > tbody > tr > th:last-child, .panel > .table > tfoot > tr > th:last-child, .panel > .table-responsive > .table > tfoot > tr > th:last-child { + padding-right: 20px; +} +@media screen and (max-width: 480px) { + .panel > .table > tr > td:last-child, .panel > .table-responsive > .table > tr > td:last-child, .panel > .table > thead > tr > td:last-child, .panel > .table-responsive > .table > thead > tr > td:last-child, .panel > .table > tbody > tr > td:last-child, .panel > .table-responsive > .table > tbody > tr > td:last-child, .panel > .table > tfoot > tr > td:last-child, .panel > .table-responsive > .table > tfoot > tr > td:last-child, .panel > .table > tr > th:last-child, .panel > .table-responsive > .table > tr > th:last-child, .panel > .table > thead > tr > th:last-child, .panel > .table-responsive > .table > thead > tr > th:last-child, .panel > .table > tbody > tr > th:last-child, .panel > .table-responsive > .table > tbody > tr > th:last-child, .panel > .table > tfoot > tr > th:last-child, .panel > .table-responsive > .table > tfoot > tr > th:last-child { + padding-right: 20px; + } +} +.panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { + border-top: 1px solid #e4eaec; +} +.panel > .list-group > .list-group-item { + padding-right: 20px; + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel > .list-group > .list-group-item { + padding-right: 20px; + padding-left: 20px; + } +} +.panel-content > .row { + padding-right: 30px; + padding-left: 30px; +} +.panel-content > .row > [class*="col-"] { + padding-right: 30px; + padding-left: 30px; +} +.panel-heading { + position: relative; + padding: 0; + border-bottom: 1px solid transparent; +} +.panel-heading + .alert { + border-radius: 0; +} +.panel-heading > .nav-tabs { + border-bottom: none; +} +.panel-heading + .nav-tabs { + margin-top: -10px; +} +.panel-body { + position: relative; +} +.panel-heading + .panel-body { + padding-top: 0; +} +.panel-body h1:first-child, .panel-body h2:first-child, .panel-body h3:first-child, .panel-body h4:first-child, .panel-body h5:first-child, .panel-body h6:first-child, .panel-body .h1:first-child, .panel-body .h2:first-child, .panel-body .h3:first-child, .panel-body .h4:first-child, .panel-body .h5:first-child, .panel-body .h6:first-child { + margin-top: 0; +} +.panel-body > *:last-child { + margin-bottom: 0; +} +.panel-body > .list-group-dividered:only-child > .list-group-item:last-child { + border-bottom-color: transparent; +} +.panel-footer { + border-top: 1px solid transparent; +} +.table + .panel-footer { + padding-top: 10px; + border-color: #e4eaec; +} +.panel-title { + display: block; + padding: 16px 20px; + font-size: 16px; + color: #37474f; +} +.panel-title > .icon { + margin-right: 10px; +} +.panel-title > .label { + margin-left: 10px; +} +.panel-title small { + color: #76838f; +} +.panel-desc { + display: block; + padding: 5px 0 0; + margin: 0; + font-size: 14px; + color: #76838f; +} +.panel-actions { + position: absolute; + top: 50%; + right: 20px; + z-index: 1; + margin: auto; + -webkit-transform: translate(0%, -50%); + -ms-transform: translate(0%, -50%); + -o-transform: translate(0%, -50%); + transform: translate(0%, -50%); +} +@media screen and (max-width: 480px) { + .panel-actions { + right: 20px; + } +} +ul.panel-actions { + list-style: none; +} +ul.panel-actions > li { + display: inline-block; + margin-left: 8px; +} +ul.panel-actions > li:first-child { + margin-left: 0; +} +.panel-actions a { + color: inherit; +} +.panel-actions a.dropdown-toggle { + text-decoration: none; +} +.panel-actions .dropdown { + display: inline-block; +} +.panel-actions .dropdown-toggle { + display: inline-block; +} +.panel-actions .panel-action { + display: inline-block; + padding: 8px 10px; + color: #a3afb7; + text-decoration: none; + cursor: pointer; + background-color: transparent; +} +.panel-actions .panel-action:hover { + color: #526069; +} +.panel-actions .panel-action:active { + color: #526069; +} +.panel-actions .panel-action:focus { + outline: none; +} +.panel-actions .progress { + width: 100px; + margin: 0; +} +.panel-actions .pagination { + margin: 0; +} +.panel-toolbar { + padding: 5px 15px; + margin: 0; + background-color: transparent; + border-top: 1px solid #e4eaec; + border-bottom: 1px solid #e4eaec; +} +.panel-bordered .panel-toolbar { + border-top-color: transparent; +} +.panel-toolbar .btn { + padding: 5px 10px; + color: #a3afb7; +} +.panel-toolbar .btn.icon { + width: 1em; + text-align: center; +} +.panel-toolbar .btn:hover, .panel-toolbar .btn:active, .panel-toolbar .btn.active { + color: #76838f; +} +.panel-loading { + position: absolute; + top: 0; + left: 0; + z-index: 6; + display: none; + width: 100%; + height: 100%; + border-radius: 1px; + opacity: .6; +} +.panel-loading .loader { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.panel > *:not(.panel-loading):not(.collapsing) { + -webkit-transition: opacity .3s; + -o-transition: opacity .3s; + transition: opacity .3s; +} +.panel.is-loading > *:not(.panel-loading) { + opacity: .3; +} +.panel.is-loading .panel-loading { + display: block; + opacity: 1; +} +.panel-footer-chart { + padding: 0; +} +.panel-control { + padding: 0; + border: none; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.panel-body.scrollable-vertical { + padding-right: 0 !important; + padding-left: 0 !important; +} +.panel-body.scrollable-vertical > .scrollable-container > .scrollable-content { + padding-right: 20px; + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel-body.scrollable-vertical > .scrollable-container > .scrollable-content { + padding-right: 20px; + padding-left: 20px; + } +} +.panel-body.scrollable-vertical > .scrollable-bar { + height: -webkit-calc(100% - 20px); + height: calc(100% - 20px); + margin-top: 0; + margin-bottom: 20px; + -webkit-transform: translateX(-16px); + -ms-transform: translateX(-16px); + -o-transform: translateX(-16px); + transform: translateX(-16px); +} +.panel-bordered > .panel-body.scrollable-vertical > .scrollable-bar { + height: -webkit-calc(100% - 40px); + height: calc(100% - 40px); + margin-bottom: 20px; +} +.panel-body.scrollable-horizontal { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.panel-body.scrollable-horizontal > .scrollable-container > .scrollable-content { + padding-top: 0; + padding-bottom: 20px; +} +.panel-bordered > .panel-body.scrollable-horizontal > .scrollable-container > .scrollable-content { + padding-top: 20px; + padding-bottom: 20px; +} +.panel-body.scrollable-horizontal > .scrollable-bar { + width: -webkit-calc(100% - 40px); + width: calc(100% - 40px); + margin-right: 20px; + margin-left: 0; + -webkit-transform: translateY(-16px); + -ms-transform: translateY(-16px); + -o-transform: translateY(-16px); + transform: translateY(-16px); +} +@media screen and (max-width: 480px) { + .panel-body.scrollable-horizontal > .scrollable-bar { + width: -webkit-calc(100% - 40px); + width: calc(100% - 40px); + margin-right: 20px; + } +} +.panel-bordered > .panel-body.scrollable-horizontal > .scrollable-bar { + -webkit-transform: translateY(-16px); + -ms-transform: translateY(-16px); + -o-transform: translateY(-16px); + transform: translateY(-16px); +} +.panel-bordered > .panel-heading { + border-bottom: 1px solid #e4eaec; +} +.panel-bordered > .panel-heading > .panel-title { + padding-bottom: 16px; +} +.panel-bordered > .panel-footer { + padding-top: 10px; + border-top: 1px solid #e4eaec; +} +.panel-bordered > .panel-body { + padding-top: 20px; +} +.panel-bordered > .table > tbody:first-child > tr:first-child th, .panel-bordered > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel.is-dragging { + opacity: .8; +} +.panel.is-dragging { + cursor: move; +} +.panel.panel-transparent { + background: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.panel.panel-transparent > .panel-heading, .panel.panel-transparent > .panel-footer { + border-color: transparent; +} +.panel-dark { + border-color: #526069; +} +.panel-dark > .panel-heading { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.panel-dark > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #526069; +} +.panel-dark > .panel-heading .badge { + color: #526069; + background-color: #fff; +} +.panel-dark > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #526069; +} +.panel-primary, .panel-info, .panel-success, .panel-warning, .panel-danger, .panel-dark { + border: none; +} +.panel-primary .panel-heading, .panel-info .panel-heading, .panel-success .panel-heading, .panel-warning .panel-heading, .panel-danger .panel-heading, .panel-dark .panel-heading { + border: none; +} +.panel-primary .panel-title, .panel-info .panel-title, .panel-success .panel-title, .panel-warning .panel-title, .panel-danger .panel-title, .panel-dark .panel-title { + color: #fff; +} +.panel-primary .panel-action, .panel-info .panel-action, .panel-success .panel-action, .panel-warning .panel-action, .panel-danger .panel-action, .panel-dark .panel-action { + color: #fff; +} +@media screen and (max-width: 480px) { + .panel-actions { + right: 20px; + } + .panel-actions .progress { + min-width: 80px; + } + .panel-actions .show-on-hover { + display: none; + } + .panel-title, .panel-body, .panel-footer { + padding-right: 20px; + padding-left: 20px; + } +} +.well { + padding: 20px; +} +.well-lg { + padding: 24px; +} +.well-sm { + padding: 12px; +} +.well { + -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, .02); + box-shadow: inset 0 0 1px rgba(0, 0, 0, .02); +} +.well-primary { + color: #fff; + background-color: #62a8ea; +} +.well-success { + color: #fff; + background-color: #46be8a; +} +.well-info { + color: #fff; + background-color: #57c7d4; +} +.well-warning { + color: #fff; + background-color: #f2a654; +} +.well-danger { + color: #fff; + background-color: #f96868; +} +.close { + font-weight: 300; +} +.close.icon { + font-size: inherit; +} +.modal-content { + border: none; + border-radius: 0; + -webkit-box-shadow: 1px 1px 15px rgba(0, 0, 0, .3); + box-shadow: 1px 1px 15px rgba(0, 0, 0, .3); +} +.modal-content > iframe { + float: left; + width: 100%; + height: 0; + margin: 0; + border: none; +} +.modal-header { + padding: 10px 20px; + background-color: #f3f7f9; +} +.modal-header .close { + margin-top: 1px; +} +.modal-body { + padding: 20px; +} +.modal-body > *:last-child { + margin-bottom: 0; +} +.modal-footer { + padding: 10px 20px 20px; + border-top: none; +} +.modal-top { + margin: 0 auto; +} +.modal-center { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 auto !important; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-bottom { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 auto !important; + + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + -webkit-box-pack: end; + justify-content: flex-end; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-sidebar { + position: absolute; + right: 0; + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 !important; + overflow-y: auto; + background-color: #fff; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-sidebar .modal-content { + position: static; + overflow: auto; + background-color: transparent; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.modal-sidebar .modal-header { + background-color: transparent; + border-bottom: none; +} +.modal-sidebar .modal-footer { + border-top: none; +} +.modal.fade .modal-dialog.modal-sidebar { + -webkit-transform: translate(25%, 0); + -ms-transform: translate(25%, 0); + -o-transform: translate(25%, 0); + transform: translate(25%, 0); +} +.modal.in .modal-dialog.modal-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-fill-in { + background-color: transparent; +} +.modal-fill-in.in { + background-color: rgba(255, 255, 255, .95); + opacity: 1; +} +.modal-fill-in .modal-dialog { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + width: 100%; + height: 100%; + margin: 0 auto; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; + -webkit-align-items: center; + -ms-flex-align: center; + -webkit-box-align: center; + align-items: center; +} +@media (min-width: 768px) { + .modal-fill-in .modal-dialog > * { + width: 500px; + } + .modal-fill-in .modal-dialog.modal-sm > * { + width: 300px; + } + .modal-fill-in .modal-dialog button.close { + position: fixed; + top: 20px; + right: 20px; + z-index: 1; + filter: alpha(opacity=50); + opacity: .5; + -webkit-transform: translate(0%, 0%); + -ms-transform: translate(0%, 0%); + -o-transform: translate(0%, 0%); + transform: translate(0%, 0%); + } +} +@media (min-width: 992px) { + .modal-fill-in .modal-dialog.modal-lg > * { + width: 900px; + } +} +.modal-fill-in .modal-content { + background-color: transparent; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.modal-fill-in .modal-header { + background-color: transparent; + border-bottom: none; +} +.modal-fill-in .modal-footer { + border-top: none; +} +.modal-primary .modal-header { + background-color: #62a8ea; + border-radius: 0 0 0 0; +} +.modal-primary .modal-header * { + color: #fff; +} +.modal-primary .modal-header .close { + opacity: .6; +} +.modal-success .modal-header { + background-color: #46be8a; + border-radius: 0 0 0 0; +} +.modal-success .modal-header * { + color: #fff; +} +.modal-success .modal-header .close { + opacity: .6; +} +.modal-info .modal-header { + background-color: #57c7d4; + border-radius: 0 0 0 0; +} +.modal-info .modal-header * { + color: #fff; +} +.modal-info .modal-header .close { + opacity: .6; +} +.modal-warning .modal-header { + background-color: #f2a654; + border-radius: 0 0 0 0; +} +.modal-warning .modal-header * { + color: #fff; +} +.modal-warning .modal-header .close { + opacity: .6; +} +.modal-danger .modal-header { + background-color: #f96868; + border-radius: 0 0 0 0; +} +.modal-danger .modal-header * { + color: #fff; +} +.modal-danger .modal-header .close { + opacity: .6; +} +.modal.modal-fade-in-scale-up .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(.7); + -ms-transform: scale(.7); + -o-transform: scale(.7); + transform: scale(.7); +} +.modal.modal-fade-in-scale-up.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-slide-in-right .modal-dialog { + opacity: 0; + -webkit-transition: all .3s cubic-bezier(.25, .5, .5, .9); + -o-transition: all .3s cubic-bezier(.25, .5, .5, .9); + transition: all .3s cubic-bezier(.25, .5, .5, .9); + -webkit-transform: translate(20%, 0%); + -ms-transform: translate(20%, 0%); + -o-transform: translate(20%, 0%); + transform: translate(20%, 0%); +} +.modal.modal-slide-in-right.in .modal-dialog { + opacity: 1; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.modal.modal-slide-from-bottom .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: translate(0%, 20%); + -ms-transform: translate(0%, 20%); + -o-transform: translate(0%, 20%); + transform: translate(0%, 20%); +} +.modal.modal-slide-from-bottom.in .modal-dialog { + opacity: 1; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.modal.modal-newspaper .modal-dialog { + opacity: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; + -webkit-transform: scale(0) rotate(720deg); + -ms-transform: scale(0) rotate(720deg); + -o-transform: scale(0) rotate(720deg); + transform: scale(0) rotate(720deg); +} +.modal.modal-newspaper.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1) rotate(0deg); + -ms-transform: scale(1) rotate(0deg); + -o-transform: scale(1) rotate(0deg); + transform: scale(1) rotate(0deg); +} +.modal.modal-fall { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-fall .modal-dialog { + opacity: 0; + -webkit-transform: translateZ(600px) rotateX(20deg); + -ms-transform: translateZ(600px) rotateX(20deg); + transform: translateZ(600px) rotateX(20deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-fall.in .modal-dialog { + opacity: 1; + -webkit-transition: all .3s ease-in 0s; + -o-transition: all .3s ease-in 0s; + transition: all .3s ease-in 0s; + -webkit-transform: translateZ(0px) rotateX(0deg); + -ms-transform: translateZ(0px) rotateX(0deg); + transform: translateZ(0px) rotateX(0deg); +} +.modal.modal-side-fall { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-side-fall .modal-dialog { + -webkit-transform: translate(30%) translateZ(600px) rotate(10deg); + -ms-transform: translate(30%) translateZ(600px) rotate(10deg); + transform: translate(30%) translateZ(600px) rotate(10deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-side-fall.in .modal-dialog { + -webkit-transition: all .3s ease-in 0s; + -o-transition: all .3s ease-in 0s; + transition: all .3s ease-in 0s; + -webkit-transform: translate(0%) translateZ(0px) rotate(0deg); + -ms-transform: translate(0%) translateZ(0px) rotate(0deg); + transform: translate(0%) translateZ(0px) rotate(0deg); +} +.modal.modal-3d-flip-horizontal { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-flip-horizontal .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateY(-70deg); + -ms-transform: rotateY(-70deg); + -o-transform: rotateY(-70deg); + transform: rotateY(-70deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-flip-horizontal.in .modal-dialog { + -webkit-transform: rotateY(0deg); + -ms-transform: rotateY(0deg); + -o-transform: rotateY(0deg); + transform: rotateY(0deg); +} +.modal.modal-3d-flip-vertical { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-flip-vertical .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateX(-70deg); + -ms-transform: rotateX(-70deg); + -o-transform: rotateX(-70deg); + transform: rotateX(-70deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-flip-vertical.in .modal-dialog { + -webkit-transform: rotateX(0deg); + -ms-transform: rotateX(0deg); + -o-transform: rotateX(0deg); + transform: rotateX(0deg); +} +.modal.modal-3d-sign { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-sign .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateX(-60deg); + -ms-transform: rotateX(-60deg); + -o-transform: rotateX(-60deg); + transform: rotateX(-60deg); + -webkit-transform-origin: 50% 0 0; + -moz-transform-origin: 50% 0 0; + -ms-transform-origin: 50% 0 0; + -o-transform-origin: 50% 0 0; + transform-origin: 50% 0 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-sign.in .modal-dialog { + -webkit-transform: rotateX(0deg); + -ms-transform: rotateX(0deg); + -o-transform: rotateX(0deg); + transform: rotateX(0deg); +} +.modal.modal-super-scaled .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(2); + -ms-transform: scale(2); + -o-transform: scale(2); + transform: scale(2); +} +.modal.modal-super-scaled.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-just-me .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(.8); + -ms-transform: scale(.8); + -o-transform: scale(.8); + transform: scale(.8); +} +.modal.modal-just-me .modal-backdrop { + background-color: #fff; +} +.modal.modal-just-me.in { + background: #fff; +} +.modal.modal-just-me.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-just-me.in .modal-backdrop { + opacity: 1; +} +.modal.modal-3d-slit { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-slit .modal-dialog { + opacity: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; + -webkit-transform: translateZ(-3000px) rotateY(90deg); + -ms-transform: translateZ(-3000px) rotateY(90deg); + transform: translateZ(-3000px) rotateY(90deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-slit.in .modal-dialog { + -webkit-animation-name: slit; + -o-animation-name: slit; + animation-name: slit; + -webkit-animation-duration: .7s; + -o-animation-duration: .7s; + animation-duration: .7s; + -webkit-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + + -webkit-animation-fill-mode: forwards; + -o-animation-fill-mode: forwards; + animation-fill-mode: forwards; +} +.modal.modal-rotate-from-bottom { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-rotate-from-bottom .modal-dialog { + -webkit-transition: all .3s ease-out 0s; + -o-transition: all .3s ease-out 0s; + transition: all .3s ease-out 0s; + -webkit-transform: translateY(100%) rotateX(90deg); + -ms-transform: translateY(100%) rotateX(90deg); + transform: translateY(100%) rotateX(90deg); + -webkit-transform-origin: 0 100% 0; + -moz-transform-origin: 0 100% 0; + -ms-transform-origin: 0 100% 0; + -o-transform-origin: 0 100% 0; + transform-origin: 0 100% 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-rotate-from-bottom.in .modal-dialog { + -webkit-transform: translateY(0%) rotateX(0deg); + -ms-transform: translateY(0%) rotateX(0deg); + transform: translateY(0%) rotateX(0deg); +} +.modal.modal-rotate-from-left { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-rotate-from-left .modal-dialog { + -webkit-transition: all .3s ease-out 0s; + -o-transition: all .3s ease-out 0s; + transition: all .3s ease-out 0s; + -webkit-transform: translateZ(100px) translateX(-30%) rotateY(90deg); + -ms-transform: translateZ(100px) translateX(-30%) rotateY(90deg); + transform: translateZ(100px) translateX(-30%) rotateY(90deg); + -webkit-transform-origin: 0 100% 0; + -moz-transform-origin: 0 100% 0; + -ms-transform-origin: 0 100% 0; + -o-transform-origin: 0 100% 0; + transform-origin: 0 100% 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-rotate-from-left.in .modal-dialog { + -webkit-transform: translateZ(0px) translateX(0%) rotateY(0deg); + -ms-transform: translateZ(0px) translateX(0%) rotateY(0deg); + transform: translateZ(0px) translateX(0%) rotateY(0deg); +} +@-webkit-keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@-o-keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@media (min-width: 768px) { + .modal-dialog { + margin: 90px auto; + } +} +.tooltip-inner { + padding: 6px 12px; + white-space: nowrap; +} +.tooltip-primary + .tooltip .tooltip-inner { + color: #fff; + background-color: #62a8ea; +} +.tooltip-primary + .tooltip.top .tooltip-arrow { + border-top-color: #62a8ea; +} +.tooltip-primary + .tooltip.right .tooltip-arrow { + border-right-color: #62a8ea; +} +.tooltip-primary + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #62a8ea; +} +.tooltip-primary + .tooltip.left .tooltip-arrow { + border-left-color: #62a8ea; +} +.tooltip-success + .tooltip .tooltip-inner { + color: #fff; + background-color: #46be8a; +} +.tooltip-success + .tooltip.top .tooltip-arrow { + border-top-color: #46be8a; +} +.tooltip-success + .tooltip.right .tooltip-arrow { + border-right-color: #46be8a; +} +.tooltip-success + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #46be8a; +} +.tooltip-success + .tooltip.left .tooltip-arrow { + border-left-color: #46be8a; +} +.tooltip-info + .tooltip .tooltip-inner { + color: #fff; + background-color: #57c7d4; +} +.tooltip-info + .tooltip.top .tooltip-arrow { + border-top-color: #57c7d4; +} +.tooltip-info + .tooltip.right .tooltip-arrow { + border-right-color: #57c7d4; +} +.tooltip-info + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #57c7d4; +} +.tooltip-info + .tooltip.left .tooltip-arrow { + border-left-color: #57c7d4; +} +.tooltip-warning + .tooltip .tooltip-inner { + color: #fff; + background-color: #f2a654; +} +.tooltip-warning + .tooltip.top .tooltip-arrow { + border-top-color: #f2a654; +} +.tooltip-warning + .tooltip.right .tooltip-arrow { + border-right-color: #f2a654; +} +.tooltip-warning + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #f2a654; +} +.tooltip-warning + .tooltip.left .tooltip-arrow { + border-left-color: #f2a654; +} +.tooltip-danger + .tooltip .tooltip-inner { + color: #fff; + background-color: #f96868; +} +.tooltip-danger + .tooltip.top .tooltip-arrow { + border-top-color: #f96868; +} +.tooltip-danger + .tooltip.right .tooltip-arrow { + border-right-color: #f96868; +} +.tooltip-danger + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #f96868; +} +.tooltip-danger + .tooltip.left .tooltip-arrow { + border-left-color: #f96868; +} +.tooltip-rotate + .tooltip { + opacity: 0; + -webkit-animation: tooltip-rotate3d 1s ease .1s forwards; + -o-animation: tooltip-rotate3d 1s ease .1s forwards; + animation: tooltip-rotate3d 1s ease .1s forwards; +} +@-webkit-keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-o-keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +.tooltip-scale + .tooltip { + -webkit-animation: tooltip-scale3d 1s ease 0s forwards; + -o-animation: tooltip-scale3d 1s ease 0s forwards; + animation: tooltip-scale3d 1s ease 0s forwards; +} +@-webkit-keyframes tooltip-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@-o-keyframes tooltip-scale3d { + 0% { + opacity: 0; + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@keyframes tooltip-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +.popover { + padding: 0; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, .05); + box-shadow: 0 2px 6px rgba(0, 0, 0, .05); +} +.popover.bottom > .arrow:after { + border-bottom-color: #f3f7f9; +} +.popover-content { + padding: 20px; +} +.popover-primary + .popover .popover-title { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.popover-primary + .popover.bottom .arrow { + border-bottom-color: #62a8ea; +} +.popover-primary + .popover.bottom .arrow:after { + border-bottom-color: #62a8ea; +} +.popover-success + .popover .popover-title { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.popover-success + .popover.bottom .arrow { + border-bottom-color: #46be8a; +} +.popover-success + .popover.bottom .arrow:after { + border-bottom-color: #46be8a; +} +.popover-info + .popover .popover-title { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.popover-info + .popover.bottom .arrow { + border-bottom-color: #57c7d4; +} +.popover-info + .popover.bottom .arrow:after { + border-bottom-color: #57c7d4; +} +.popover-warning + .popover .popover-title { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.popover-warning + .popover.bottom .arrow { + border-bottom-color: #f2a654; +} +.popover-warning + .popover.bottom .arrow:after { + border-bottom-color: #f2a654; +} +.popover-danger + .popover .popover-title { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.popover-danger + .popover.bottom .arrow { + border-bottom-color: #f96868; +} +.popover-danger + .popover.bottom .arrow:after { + border-bottom-color: #f96868; +} +.popover-rotate + .popover { + opacity: 0; + -webkit-animation: popover-rotate3d 1s ease .1s forwards; + -o-animation: popover-rotate3d 1s ease .1s forwards; + animation: popover-rotate3d 1s ease .1s forwards; +} +@-webkit-keyframes popover-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-o-keyframes popover-rotate3d { + 0% { + opacity: 0; + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes popover-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +.popover-scale + .popover { + -webkit-animation: popover-scale3d 1s ease 0s forwards; + -o-animation: popover-scale3d 1s ease 0s forwards; + animation: popover-scale3d 1s ease 0s forwards; +} +@-webkit-keyframes popover-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@-o-keyframes popover-scale3d { + 0% { + opacity: 0; + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@keyframes popover-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +.carousel-control { + min-width: 50px; +} +.carousel-control:hover, .carousel-control:focus { + filter: alpha(opacity=40); + opacity: .4; +} +.carousel-control .icon { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + width: 16px; + height: 16px; + margin-top: -8px; +} +.carousel-control.left .icon { + left: 50%; + margin-left: -8px; +} +.carousel-control.right .icon { + right: 50%; + margin-right: -8px; +} +.carousel-caption h1, .carousel-caption h2, .carousel-caption h3, .carousel-caption h4, .carousel-caption h5, .carousel-caption h6 { + color: inherit; +} +.carousel-indicators { + margin-bottom: 0; +} +.carousel-indicators li { + margin: 3px; + background-color: rgba(255, 255, 255, .3); + border: none; +} +.carousel-indicators .active { + width: 10px; + height: 10px; + margin: 3px; +} +.carousel-indicators-scaleup li { + border: none; + -webkit-transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.carousel-indicators-scaleup .active { + -webkit-transform: scale(1.5); + -ms-transform: scale(1.5); + -o-transform: scale(1.5); + transform: scale(1.5); +} +.carousel-indicators-fillin li { + background-color: transparent; + -webkit-box-shadow: 0 0 0 2px #fff inset; + box-shadow: 0 0 0 2px #fff inset; + -webkit-transition: -webkit-box-shadow .3s ease 0s; + -o-transition: box-shadow .3s ease 0s; + transition: -webkit-box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s, -webkit-box-shadow .3s ease 0s; +} +.carousel-indicators-fillin .active { + -webkit-box-shadow: 0 0 0 8px #fff inset; + box-shadow: 0 0 0 8px #fff inset; +} +.carousel-indicators-fall li { + position: relative; + -webkit-transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.carousel-indicators-fall li:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + visibility: hidden; + content: ""; + background-color: rgba(0, 0, 0, .3); + border-radius: 50%; + opacity: 0; + -webkit-transition: opacity .3s ease 0s, visibility 0s ease .3s; + -o-transition: opacity .3s ease 0s, visibility 0s ease .3s; + transition: opacity .3s ease 0s, visibility 0s ease .3s; + -webkit-transform: translate(0%, -200%); + -ms-transform: translate(0%, -200%); + -o-transform: translate(0%, -200%); + transform: translate(0%, -200%); +} +.carousel-indicators-fall .active { + background-color: transparent; + -webkit-transform: translate(0, 200%); + -ms-transform: translate(0, 200%); + -o-transform: translate(0, 200%); + transform: translate(0, 200%); +} +.carousel-indicators-fall .active:after { + visibility: visible; + opacity: 1; + -webkit-transition: opacity .3s ease 0s; + -o-transition: opacity .3s ease 0s; + transition: opacity .3s ease 0s; +} +@media screen and (min-width: 768px) { + .carousel-control .icon { + width: 24px; + height: 24px; + margin-top: -12px; + font-size: 24px; + } + .carousel-control.left .icon { + margin-left: -12px; + } + .carousel-control.right .icon { + margin-right: -12px; + } +} +.vertical-align { + font-size: 0; +} +.vertical-align:before { + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.vertical-align-middle, .vertical-align-bottom { + display: inline-block; + max-width: 100%; + font-size: 14px; +} +.vertical-align-middle { + vertical-align: middle; +} +.vertical-align-bottom { + vertical-align: bottom; +} +.inline { + display: inline !important; +} +.inline-block { + display: inline-block !important; +} +.block { + display: block !important; +} +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + word-wrap: normal; + /* for IE */ + white-space: nowrap; +} +.text-break { + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + word-wrap: break-word; + white-space: normal; + + -ms-hyphens: auto; +} +.text-nowrap { + white-space: nowrap; +} +.text-top { + vertical-align: top !important; +} +.text-middle { + vertical-align: middle !important; +} +.text-bottom { + vertical-align: bottom !important; +} +.text-left { + text-align: left !important; +} +.text-right { + text-align: right !important; +} +.text-center { + text-align: center !important; +} +.text-justify { + text-align: justify !important; +} +.text-lowercase { + text-transform: lowercase !important; +} +.text-uppercase { + text-transform: uppercase !important; +} +.text-capitalize { + text-transform: capitalize !important; +} +.font-weight-unset { + font-weight: unset !important; +} +.font-weight-100 { + font-weight: 100 !important; +} +.font-weight-200 { + font-weight: 200 !important; +} +.font-weight-300 { + font-weight: 300 !important; +} +.font-weight-400 { + font-weight: 400 !important; +} +.font-weight-500 { + font-weight: 500 !important; +} +.font-weight-600 { + font-weight: 600 !important; +} +.font-weight-700 { + font-weight: 700 !important; +} +.font-weight-800 { + font-weight: 800 !important; +} +.font-weight-900 { + font-weight: 900 !important; +} +.font-weight-light { + font-weight: 300 !important; +} +.font-weight-normal { + font-weight: 400 !important; +} +.font-weight-medium { + font-weight: 500 !important; +} +.font-weight-bold { + font-weight: 700 !important; +} +.font-size-0 { + font-size: 0 !important; +} +.font-size-10 { + font-size: 10px !important; +} +.font-size-12 { + font-size: 12px !important; +} +.font-size-14 { + font-size: 14px !important; +} +.font-size-16 { + font-size: 16px !important; +} +.font-size-18 { + font-size: 18px !important; +} +.font-size-20 { + font-size: 20px !important; +} +.font-size-24 { + font-size: 24px !important; +} +.font-size-26 { + font-size: 26px !important; +} +.font-size-30 { + font-size: 30px !important; +} +.font-size-40 { + font-size: 40px !important; +} +.font-size-50 { + font-size: 50px !important; +} +.font-size-60 { + font-size: 60px !important; +} +.font-size-70 { + font-size: 70px !important; +} +.font-size-80 { + font-size: 80px !important; +} +.visible-xlg { + display: none !important; +} +.visible-xlg-block, .visible-xlg-inline, .visible-xlg-inline-block { + display: none !important; +} +@media (min-width: 1600px) { + .visible-xlg { + display: block !important; + } + table.visible-xlg { + display: table !important; + } + tr.visible-xlg { + display: table-row !important; + } + th.visible-xlg, td.visible-xlg { + display: table-cell !important; + } +} +@media (min-width: 1600px) { + .visible-xlg-block { + display: block !important; + } +} +@media (min-width: 1600px) { + .visible-xlg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-xlg-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1600px) { + .hidden-xlg { + display: none !important; + } +} +.site-navbar { + z-index: 1000; + background-color: #4e97d9; +} +.site-navbar .navbar-header { + color: #fff; + background-color: transparent; +} +.site-navbar .navbar-header .navbar-toggle { + color: #fff; +} +.site-navbar .navbar-header .navbar-brand { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + color: #fff; + cursor: pointer; +} +@media (min-width: 768px) { + .site-navbar .navbar-header { + width: 220px; + } +} +.site-navbar .navbar-toolbar.navbar-left { + width: -webkit-calc(100% - 360px); + width: calc(100% - 360px); +} +.site-navbar .navbar-toolbar.navbar-left .navbar-menu { + width: -webkit-calc(100% - 50px); + width: calc(100% - 50px); +} +.site-navbar .navbar-toolbar.navbar-left .navbar-menu.is-load { + height: 61px; + overflow: hidden; +} +@media (max-width: 767px) { + .site-navbar .navbar-toolbar.navbar-left { + width: -webkit-calc(100% - 200px); + width: calc(100% - 200px); + } + .site-navbar .navbar-toolbar.navbar-left .navbar-menu { + position: static; + width: 100%; + } +} +.site-navbar .navbar-toolbar .navbar-message-content .icon.system { + background-color: #f96868; +} +.site-navbar .navbar-toolbar .navbar-message-content .icon.task { + background-color: #46be8a; +} +.site-navbar .navbar-toolbar .navbar-message-content .icon.setting { + background-color: #62a8ea; +} +.site-navbar .navbar-toolbar .navbar-message-content .icon.event { + background-color: #8d6658; +} +.site-navbar .navbar-toolbar .navbar-message-content .icon.other { + background-color: #f2a654; +} +.site-navbar .nav-tabs { + border-bottom: none; +} +.site-navbar .nav-tabs > li { + margin-bottom: 0; +} +.site-navbar .nav-tabs > li > a { + padding: 19px 15px; + margin: 0; + border-bottom: none !important; + border-radius: 0 !important; +} +.site-navbar .nav-tabs > li > a .icon { + margin-right: 0; +} +@media (max-width: 767px) { + .site-navbar .nav-tabs > li > a span { + display: none; + } +} +.site-navbar .navbar-container { + padding-left: 0; + background-color: #fff; +} +@media (max-width: 767px) { + .site-navbar .navbar-container { + padding-left: 12px; + } +} +@media (min-width: 768px) { + .site-navbar .navbar-container { + margin-left: 220px; + } +} +.site-navbar .navbar-container .navbar-collapse { + border-color: rgba(0, 0, 0, .1); +} +.site-navbar.navbar-inverse .navbar-container { + background-color: transparent; +} +.site-menubar-fold .navbar-brand-logo.navbar-logo { + display: none !important; +} +.site-menubar-fold .navbar-brand-logo.navbar-logo-mini { + display: inline-block !important; +} +.site-menubar-unfold .navbar-brand-logo.navbar-logo { + display: inline-block !important; +} +.site-menubar-unfold .navbar-brand-logo.navbar-logo-mini { + display: none !important; +} +.site-page-loading .site-navbar { + z-index: 1700; +} +.site-contabs { + display: none; +} +.site-contabs-open { + position: relative; +} +.site-contabs-open .site-contabs { + position: fixed; + top: 60px; + right: 0; + left: 0; + z-index: 100; + display: block; + height: 40px; + line-height: 40px; + background: #fff; + border-bottom: solid 1px #e4eaec; +} +@media (max-width: 480px) { + .site-contabs-open .site-contabs { + display: none; + } +} +.site-contabs-open .site-contabs .btn { + height: 38px; + background: #fff; + border: none; + border-radius: 0; +} +.site-contabs-open .site-contabs .contabs-scroll { + position: relative; + width: -webkit-calc(100% - 39px); + width: calc(100% - 39px); + height: 40px; + overflow: hidden; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs { + position: absolute; + width: auto; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li { + float: left; + width: 7.5em; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a { + position: relative; + display: block; + padding: 0 28px 0 12px; + overflow: hidden; + color: #76838f; + text-overflow: ellipsis; + white-space: nowrap; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a:hover, .site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a:focus { + background-color: #f3f7f9; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a > .icon { + position: absolute; + top: 12px; + right: 12px; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a > .icon:before { + color: #a3afb7; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li > a > .icon:hover:before { + color: #fff; + background: #f96868; + border-radius: 50%; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li:first-child > a { + padding-right: 13px; + text-align: center; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li.active { + background: #f1f4f5; +} +.site-contabs-open .site-contabs .contabs-scroll .con-tabs > li.active > a { + height: 40px; + background: none !important; + border-right: solid 1px #e4eaec; + border-left: solid 1px #e4eaec; +} +.site-contabs-open .site-contabs .btn + .contabs-scroll { + width: -webkit-calc(100% - 98px); + width: calc(100% - 98px); +} +.site-page-loading .site-contabs { + z-index: 1610; +} +body { + /*padding-top: 60px;*/ + overflow-x: hidden; +} +.site-menubar { + position: fixed; + top: 60px; + z-index: 1030; + height: 100%; + height: -webkit-calc(100% - 60px); + height: calc(100% - 60px); + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + color: rgba(163, 175, 183, .9); + background: #263238; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px rgba(0, 0, 0, .08); +} +.site-menubar-body { + height: 100%; +} +.site-menubar ul { + padding: 0; + margin: 0; + list-style: none; +} +.site-menubar ul.site-menu { + padding-bottom: 20px; +} +.site-menubar a { + outline: none; +} +.site-menubar a:hover, .site-menubar a:focus { + text-decoration: none; +} +.site-menubar.site-menubar-light { + background: #fff; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px rgba(0, 0, 0, .08); +} +.site-menubar.site-menubar-light .scrollable-inverse.scrollable .scrollable-bar-handle { + background: rgba(163, 175, 183, .6); +} +.site-menubar-section { + padding: 0 20px; + margin-top: 30px; + margin-bottom: 30px; +} +.site-menubar-section > h4, .site-menubar-section > h5 { + color: #76838f; +} +.site-menubar-section .progress:last-child { + margin-bottom: 0; +} +.site-menubar-light .site-menubar-footer > a { + background-color: #e4eaec; +} +.site-menubar-light .site-menubar-footer > a:hover, .site-menubar-light .site-menubar-footer > a:focus { + background-color: #d5dee1; +} +.site-menu { + padding-bottom: 20px; + overflow-y: hidden; + font-size: 14px; +} +.site-menu-item > a { + white-space: nowrap; + cursor: pointer; +} +.site-menu-icon { + display: inline-block; + width: 1em; + text-align: center; +} +.site-menu-title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: middle; +} +.site-menu-arrow { + position: relative; + display: inline-block; + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + -webkit-transition: -webkit-transform .15s; + -o-transition: -o-transform .15s; + transition: -webkit-transform .15s; + transition: transform .15s; + transition: transform .15s, -webkit-transform .15s, -o-transform .15s; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.site-menu-arrow:before { + content: "\f17f"; +} +.site-menu-arrow, .site-menu-badge, .site-menu-label { + position: absolute; + right: 20px; + display: inline-block; + vertical-align: middle; +} +.site-menu .badge, .site-menu .label { + padding: 2px 5px 3px; + font-size: 12px; + font-weight: 400; +} +.site-menu-item { + position: relative; + white-space: nowrap; +} +.site-menu-item a { + display: block; + color: rgba(163, 175, 183, .9); +} +.site-menu-item.is-hidden { + opacity: 0; +} +.site-menu-item.is-shown { + opacity: 1; +} +.site-menu > .site-menu-item { + padding: 0; +} +.site-menu > .site-menu-item.open { + background: #242f35; +} +.site-menu > .site-menu-item.open > a { + color: rgba(255, 255, 255, .7); + background: transparent; +} +.site-menu > .site-menu-item.open.hover > a { + background: transparent; +} +.site-menu > .site-menu-item.hover > a, .site-menu > .site-menu-item:hover > a { + color: rgba(255, 255, 255, .8); + background-color: rgba(255, 255, 255, .02); +} +.site-menu > .site-menu-item.active { + background: #242f35; +} +.site-menu > .site-menu-item.active > a { + color: #fff; + background: transparent; +} +.site-menu > .site-menu-item.active.hover > a { + background: transparent; +} +.site-menu .site-menu-sub { + padding: 5px 0; + margin: 0; + font-size: 14px; + background: transparent; +} +.site-menu .site-menu-sub .site-menu-item { + line-height: 36px; + color: rgba(163, 175, 183, .9); + background: transparent; +} +.site-menu .site-menu-sub .site-menu-item.has-sub { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +.site-menu .site-menu-sub .site-menu-item > a { + padding: 0 20px; +} +.site-menu .site-menu-sub .site-menu-item.open { + background: rgba(0, 0, 0, .06); +} +.site-menu .site-menu-sub .site-menu-item.open > a { + color: #fff; +} +.site-menu .site-menu-sub .site-menu-item.open.hover > a { + background-color: transparent; +} +.site-menu .site-menu-sub .site-menu-item.hover > a, .site-menu .site-menu-sub .site-menu-item:hover > a { + color: rgba(255, 255, 255, .8); + background-color: rgba(255, 255, 255, .02); +} +.site-menu .site-menu-sub .site-menu-item.active { + background: rgba(0, 0, 0, .06); +} +.site-menu .site-menu-sub .site-menu-item.active > a { + color: #fff; +} +.site-menu .site-menu-sub .site-menu-item.active.hover > a { + background-color: transparent; +} +.site-menu .site-menu-sub .site-menu-item .site-menu-sub a { + text-indent: .5em; +} +.site-menubar-light .site-menu-item a { + color: rgba(118, 131, 143, .9); +} +.site-menubar-light .site-menu-item.hover > a, .site-menubar-light .site-menu-item:hover > a { + background: transparent; +} +.site-menubar-light .site-menu > .site-menu-item.open { + background: rgba(53, 131, 202, .05); +} +.site-menubar-light .site-menu > .site-menu-item.open > a { + color: #62a8ea; +} +.site-menubar-light .site-menu > .site-menu-item.hover, .site-menubar-light .site-menu > .site-menu-item:hover { + background-color: rgba(53, 131, 202, .05); +} +.site-menubar-light .site-menu > .site-menu-item.hover > a, .site-menubar-light .site-menu > .site-menu-item:hover > a { + color: #62a8ea; +} +.site-menubar-light .site-menu > .site-menu-item.active { + background: rgba(53, 131, 202, .05); +} +.site-menubar-light .site-menu > .site-menu-item.active > a { + color: #62a8ea; +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.open { + background: rgba(53, 131, 202, .03); +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.open > a { + color: #62a8ea; +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.hover, .site-menubar-light .site-menu .site-menu-sub .site-menu-item:hover { + background-color: rgba(53, 131, 202, .03); +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.hover > a, .site-menubar-light .site-menu .site-menu-sub .site-menu-item:hover > a { + color: #62a8ea; +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.hover.open, .site-menubar-light .site-menu .site-menu-sub .site-menu-item:hover.open { + background-color: rgba(53, 131, 202, .03); +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.active { + background: rgba(53, 131, 202, .03); +} +.site-menubar-light .site-menu .site-menu-sub .site-menu-item.active > a { + color: #62a8ea; +} +.site-page { + position: relative; +} +.site-page .page-container { + width: 100%; + -webkit-overflow-scrolling: touch; +} +.site-page .page-container .page-frame { + position: relative; + display: none; + width: 100%; + height: -webkit-calc(100vh - 100px); + height: calc(100vh - 100px); + overflow-x: hidden; +} +.site-page .page-container .page-frame.active { + display: block; +} +.site-page .page-container + .page-loading { + position: absolute; + top: 0; + left: 0; + z-index: 1600; + display: none; + width: 100%; + height: -webkit-calc(100vh - 60px); + height: calc(100vh - 60px); + background-color: rgba(255, 255, 255, .5); +} +.site-page-loading { + overflow: hidden; +} +.site-page-loading .page-loading { + display: block; +} +.site-page-loading .site-page { + overflow: hidden; +} +.site-contabs-open .site-page { + height: -webkit-calc(100% - 80px); + height: calc(100% - 80px); + margin-top: 40px; +} +@media (max-width: 480px) { + .site-contabs-open .site-page { + margin-top: 0; + } +} +.site-contabs-open .site-page .page-frame { + height: -webkit-calc(100vh - 100px); + height: calc(100vh - 100px); +} +.site-contabs-open .site-page .page-loading { + height: -webkit-calc(100vh - 100px); + height: calc(100vh - 100px); +} +@media (max-width: 480px) { + .site-contabs-open .site-page { + margin-top: 0; + } + .site-contabs-open .site-page .page-frame { + height: -webkit-calc(100vh - 60px); + height: calc(100vh - 60px); + } +} +.site-footer { + height: 40px; + padding: 10px 20px; + background-color: rgba(0, 0, 0, .02); + border-top: 1px solid #e4eaec; +} +.site-footer:before, .site-footer:after { + display: table; + content: " "; +} +.site-footer:after { + clear: both; +} +.site-footer-legal { + float: left; +} +.site-footer-actions { + float: right; +} +.site-footer-right { + float: right; +} +.site-footer .scroll-to-top { + color: #76838f; +} +.site-footer .scroll-to-top, .site-footer .scroll-to-top:hover, .site-footer .scroll-to-top:active { + text-decoration: none; +} +@media (max-width: 480px) { + .site-footer { + display: none; + } +} +@media (max-width: 480px) { + .site-footer-legal, .site-footer-right, .site-footer-actions { + display: block; + float: none; + text-align: center; + } +} +.layout-full { + height: 100%; +} +body.layout-full { + padding-top: 0; +} +.layout-full .site-contabs, .layout-full .site-page { + height: 100%; + padding: 0; + margin: 0 !important; + background-color: transparent; +} +.layout-full > .loader { + margin-left: 0 !important; +} +.site-print { + padding-top: 0; +} +.site-print .site-navbar, .site-print .site-menubar, .site-print .site-contabs, .site-print .site-footer { + display: none; +} +.site-print .site-page { + margin: 0 !important; +} +@media (min-width: 768px) { + .site-menubar-fold .site-contabs, .site-menubar-fold .site-page, .site-menubar-fold .site-footer { + margin-left: 90px; + } + .site-menubar-fold.page-aside-fixed .page-aside { + position: fixed; + left: 90px; + } + .site-menubar-fold.page-aside-fixed .site-footer { + margin-left: 310px; + } + .site-menubar-fold .site-navbar .navbar-brand { + float: none; + text-align: center; + } + .site-menubar-fold .site-navbar .navbar-brand-text { + display: none; + } + .site-menubar-fold .site-menu { + overflow: visible; + } + .site-menubar-fold .site-menu-category { + height: 1px; + margin: 0; + color: transparent; + text-shadow: none; + background: #242f35; + } + .site-menubar-fold .site-menu-category:first-child { + visibility: hidden; + } + .site-menubar-fold .site-menu > .site-menu-item { + font-size: 14px; + } + .site-menubar-fold .site-menu > .site-menu-item > a { + height: 60px; + line-height: 60px; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-title, .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-icon { + position: absolute; + top: 0; + left: 0; + width: 90px; + text-align: center; + -webkit-transition: visibility .25s, opacity .25s; + -o-transition: visibility .25s, opacity .25s; + transition: visibility .25s, opacity .25s; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-arrow { + visibility: hidden; + -webkit-transition: visibility; + -o-transition: visibility; + transition: visibility; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-title { + visibility: hidden; + opacity: 0; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-icon { + margin-right: 0; + font-size: 24px; + visibility: visible; + opacity: 1; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-badge { + top: -15px; + left: 50px; + } + .site-menubar-fold .site-menu > .site-menu-item > a .site-menu-label { + display: none; + } + .site-menubar-fold .site-menu > .site-menu-item.active { + border-top: none; + border-bottom: none; + } + .site-menubar-fold .site-menu > .site-menu-item.hover > a .site-menu-icon, .site-menubar-fold .site-menu > .site-menu-item.active > a .site-menu-icon, .site-menubar-fold .site-menu > .site-menu-item.open > a .site-menu-icon { + visibility: hidden; + opacity: 0; + } + .site-menubar-fold .site-menu > .site-menu-item.hover > a .site-menu-title, .site-menubar-fold .site-menu > .site-menu-item.active > a .site-menu-title, .site-menubar-fold .site-menu > .site-menu-item.open > a .site-menu-title { + visibility: visible; + opacity: 1; + } + .site-menubar-fold .site-menu > .site-menu-item.hover > a .site-menu-badge, .site-menubar-fold .site-menu > .site-menu-item.active > a .site-menu-badge, .site-menubar-fold .site-menu > .site-menu-item.open > a .site-menu-badge { + display: none; + } + .site-menubar-fold .site-menu .site-menu-sub .site-menu-sub { + display: none; + } + .site-menubar-fold .site-menu .site-menu-sub .site-menu-item.open > a .site-menu-arrow { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + } + .site-menubar-fold .site-menu .site-menu-sub .site-menu-item.open > .site-menu-sub { + display: block; + } + .site-menubar-fold .site-menu .site-menu-sub .site-menu-item:not(.open) > a .site-menu-arrow { + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; + } + .site-menubar-fold .site-menu .site-menu-sub .site-menu-item:not(.open) > .site-menu-sub { + display: none; + } + .site-menubar-fold .site-menu > .site-menu-item > .site-menu-sub { + position: absolute; + top: 0; + left: 90px; + width: 240px; + overflow-y: auto; + visibility: hidden; + background: #242f35; + opacity: 0; + -webkit-transition: visibility .25s, opacity .25s; + -o-transition: visibility .25s, opacity .25s; + transition: visibility .25s, opacity .25s; + } + .site-menubar-fold .site-menu > .site-menu-item > .site-menu-sub-up { + top: auto; + bottom: 0; + } + .site-menubar-fold .site-menu > .site-menu-item > .site-menu-sub .site-menu-item > a { + padding: 0 30px; + } + .site-menubar-fold .site-menu > .site-menu-item > .site-menu-sub .site-menu-icon { + margin-right: .5em; + } + .site-menubar-fold .site-menu > .site-menu-item.hover > .site-menu-sub { + visibility: visible; + opacity: 1; + } + .site-menubar-fold .site-menubar-light .site-menu-category { + background: rgba(53, 131, 202, .05); + } + .site-menubar-fold .site-menubar-light .site-menu > .site-menu-item > .site-menu-sub { + background: #f3f8fb; + -webkit-box-shadow: 2px 1px 2px rgba(0, 0, 0, .08); + box-shadow: 2px 1px 2px rgba(0, 0, 0, .08); + } + .site-menubar-fold .site-menubar { + width: 90px; + } + .site-menubar-fold .site-menubar-section { + padding: 30px; + margin-top: 0; + border-top: 2px solid #242f35; + border-bottom: 2px solid #242f35; + } + .site-menubar-fold .site-menubar-section > h4, .site-menubar-fold .site-menubar-section > h5 { + display: none; + } + .site-menubar-fold .site-menubar-light .site-menubar-section { + border-top: 2px solid rgba(53, 131, 202, .05); + border-bottom: 2px solid rgba(53, 131, 202, .05); + } + .site-menubar-fold .site-menubar-footer { + width: 90px; + } + .site-menubar-fold .site-menubar-footer > a { + display: none; + } + .site-menubar-fold .site-menubar-footer > a.fold-show { + display: block; + float: none; + width: 100%; + } + .site-menubar-fold.site-menubar-changing .site-menu > .site-menu-item > .site-menu-sub { + display: none; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .site-menubar-fold .site-navbar .navbar-header { + width: 90px; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .site-menubar-fold .site-navbar .navbar-container { + margin-left: 90px; + } +} +@media screen and (min-width: 768px) and (max-width: 1199px) { + .css-menubar .site-contabs, .css-menubar .site-page, .css-menubar .site-footer { + margin-left: 90px; + } + .css-menubar.page-aside-fixed .page-aside { + position: fixed; + left: 90px; + } + .css-menubar.page-aside-fixed .site-footer { + margin-left: 310px; + } + .css-menubar .site-navbar .navbar-brand { + float: none; + text-align: center; + } + .css-menubar .site-navbar .navbar-brand-text { + display: none; + } + .css-menubar .site-menu { + overflow: visible; + } + .css-menubar .site-menu-category { + height: 1px; + margin: 0; + color: transparent; + text-shadow: none; + background: #242f35; + } + .css-menubar .site-menu-category:first-child { + visibility: hidden; + } + .css-menubar .site-menu > .site-menu-item { + font-size: 14px; + } + .css-menubar .site-menu > .site-menu-item > a { + height: 60px; + line-height: 60px; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-title, .css-menubar .site-menu > .site-menu-item > a .site-menu-icon { + position: absolute; + top: 0; + left: 0; + width: 90px; + text-align: center; + -webkit-transition: visibility .25s, opacity .25s; + -o-transition: visibility .25s, opacity .25s; + transition: visibility .25s, opacity .25s; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-arrow { + visibility: hidden; + -webkit-transition: visibility; + -o-transition: visibility; + transition: visibility; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-title { + visibility: hidden; + opacity: 0; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-icon { + margin-right: 0; + font-size: 24px; + visibility: visible; + opacity: 1; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-badge { + top: -15px; + left: 50px; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-label { + display: none; + } + .css-menubar .site-menu > .site-menu-item.active { + border-top: none; + border-bottom: none; + } + .css-menubar .site-menu > .site-menu-item.hover > a .site-menu-icon, .css-menubar .site-menu > .site-menu-item.active > a .site-menu-icon, .css-menubar .site-menu > .site-menu-item.open > a .site-menu-icon { + visibility: hidden; + opacity: 0; + } + .css-menubar .site-menu > .site-menu-item.hover > a .site-menu-title, .css-menubar .site-menu > .site-menu-item.active > a .site-menu-title, .css-menubar .site-menu > .site-menu-item.open > a .site-menu-title { + visibility: visible; + opacity: 1; + } + .css-menubar .site-menu > .site-menu-item.hover > a .site-menu-badge, .css-menubar .site-menu > .site-menu-item.active > a .site-menu-badge, .css-menubar .site-menu > .site-menu-item.open > a .site-menu-badge { + display: none; + } + .css-menubar .site-menu .site-menu-sub .site-menu-sub { + display: none; + } + .css-menubar .site-menu .site-menu-sub .site-menu-item.open > a .site-menu-arrow { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + } + .css-menubar .site-menu .site-menu-sub .site-menu-item.open > .site-menu-sub { + display: block; + } + .css-menubar .site-menu .site-menu-sub .site-menu-item:not(.open) > a .site-menu-arrow { + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; + } + .css-menubar .site-menu .site-menu-sub .site-menu-item:not(.open) > .site-menu-sub { + display: none; + } + .css-menubar .site-menu > .site-menu-item > .site-menu-sub { + position: absolute; + top: 0; + left: 90px; + width: 240px; + overflow-y: auto; + visibility: hidden; + background: #242f35; + opacity: 0; + -webkit-transition: visibility .25s, opacity .25s; + -o-transition: visibility .25s, opacity .25s; + transition: visibility .25s, opacity .25s; + } + .css-menubar .site-menu > .site-menu-item > .site-menu-sub-up { + top: auto; + bottom: 0; + } + .css-menubar .site-menu > .site-menu-item > .site-menu-sub .site-menu-item > a { + padding: 0 30px; + } + .css-menubar .site-menu > .site-menu-item > .site-menu-sub .site-menu-icon { + margin-right: .5em; + } + .css-menubar .site-menu > .site-menu-item.hover > .site-menu-sub { + visibility: visible; + opacity: 1; + } + .css-menubar .site-menubar-light .site-menu-category { + background: rgba(53, 131, 202, .05); + } + .css-menubar .site-menubar-light .site-menu > .site-menu-item > .site-menu-sub { + background: #f3f8fb; + -webkit-box-shadow: 2px 1px 2px rgba(0, 0, 0, .08); + box-shadow: 2px 1px 2px rgba(0, 0, 0, .08); + } + .css-menubar .site-menubar { + width: 90px; + } + .css-menubar .site-menubar-section { + padding: 30px; + margin-top: 0; + border-top: 2px solid #242f35; + border-bottom: 2px solid #242f35; + } + .css-menubar .site-menubar-section > h4, .css-menubar .site-menubar-section > h5 { + display: none; + } + .css-menubar .site-menubar-light .site-menubar-section { + border-top: 2px solid rgba(53, 131, 202, .05); + border-bottom: 2px solid rgba(53, 131, 202, .05); + } + .css-menubar .site-menubar-footer { + width: 90px; + } + .css-menubar .site-menubar-footer > a { + display: none; + } + .css-menubar .site-menubar-footer > a.fold-show { + display: block; + float: none; + width: 100%; + } + .css-menubar .site-menu > .site-menu-item:hover > a .site-menu-icon { + visibility: hidden; + opacity: 0; + } + .css-menubar .site-menu > .site-menu-item:hover > a .site-menu-title { + visibility: visible; + opacity: 1; + } + .css-menubar .site-menu > .site-menu-item:hover > a .site-menu-badge { + display: none; + } + .css-menubar .site-menu-item:hover > .site-menu-sub { + visibility: visible; + opacity: 1; + } +} +@media screen and (min-width: 768px) and (max-width: 1199px) and (min-width: 768px) { + .css-menubar .site-navbar .navbar-header { + width: 90px; + } +} +@media screen and (min-width: 768px) and (max-width: 1199px) and (min-width: 768px) { + .css-menubar .site-navbar .navbar-container { + margin-left: 90px; + } +} +@media screen and (min-width: 768px) and (max-width: 1199px) and (min-width: 768px) { + .site-menubar-fold.page-aside-fixed .site-footer { + margin-left: 310px; + } +} +@media (min-width: 768px) { + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.hover > a, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item:hover > a { + background-color: transparent; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.active, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.open, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.hover { + background: #37474f; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.active > a .site-menu-icon, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.open > a .site-menu-icon, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.hover > a .site-menu-icon { + visibility: visible; + opacity: 1; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.active > a .site-menu-badge, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.open > a .site-menu-badge, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.hover > a .site-menu-badge { + display: inline-block; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.active > a .site-menu-title, .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.open > a .site-menu-title { + visibility: hidden; + opacity: 0; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item.hover > a .site-menu-title { + visibility: visible; + opacity: 1; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item > a .site-menu-title { + left: 90px; + width: 240px; + padding: 0 20px; + font-size: 14px; + text-align: left; + background: #37474f; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item > .site-menu-sub { + top: 60px; + } + .site-menubar-fold.site-menubar-fold-alt .site-menu > .site-menu-item > .site-menu-sub-up { + top: auto; + bottom: 60px; + } + .site-menubar-fold.site-menubar-fold-alt .site-menubar-light .site-menu > .site-menu-item.active, .site-menubar-fold.site-menubar-fold-alt .site-menubar-light .site-menu > .site-menu-item.open, .site-menubar-fold.site-menubar-fold-alt .site-menubar-light .site-menu > .site-menu-item.hover { + background: #e8f1f8; + } + .site-menubar-fold.site-menubar-fold-alt .site-menubar-light .site-menu > .site-menu-item > a .site-menu-title { + background: #e8f1f8; + } + .site-menubar-fold.site-menubar-fold-alt .site-menubar-light .site-menu > .site-menu-item > .site-menu-sub { + -webkit-box-shadow: none; + box-shadow: none; + } +} +@media screen and (max-width: 767px), screen and (min-width: 1200px) { + .css-menubar .site-menu-category { + padding: 0 20px; + margin-top: 18px; + font-size: 12px; + line-height: 36px; + color: #76838f; + text-transform: uppercase; + -webkit-transition: all .25s, font .1s .15s, color .1s .15s; + -o-transition: all .25s, font .1s .15s, color .1s .15s; + transition: all .25s, font .1s .15s, color .1s .15s; + } + .css-menubar .site-menu > .site-menu-item > a .site-menu-title { + font-size: 14px; + } + .css-menubar .site-menu-icon { + margin-right: 7px; + } + .css-menubar .site-menu-title { + display: inline-block; + max-width: 160px; + } + .css-menubar .site-menu-title:first-child { + margin-left: 28px; + } + .css-menubar .site-menu .site-menu-sub { + display: none; + } + .css-menubar .site-menu-item { + line-height: 36px; + -webkit-transition: all .25s, -webkit-transform .1s; + -o-transition: all .25s, -o-transform .1s; + transition: all .25s, -webkit-transform .1s; + transition: transform .1s, all .25s; + transition: transform .1s, all .25s, -webkit-transform .1s, -o-transform .1s; + } + .css-menubar .site-menu-item.open > a .site-menu-arrow { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + } + .css-menubar .site-menu-item.open > .site-menu-sub { + display: block; + } + .css-menubar .site-menu-item:not(.open) > a .site-menu-arrow { + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; + } + .css-menubar .site-menu-item:not(.open) > .site-menu-sub { + display: none; + } + .css-menubar .site-menu > .site-menu-item > a { + padding: 0 20px; + line-height: 36px; + } + .css-menubar.site-menubar-native .site-menubar-body { + overflow-y: scroll; + } + .css-menubar .site-menubar { + width: 220px; + } + .css-menubar .site-menubar-footer { + width: 220px; + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left .hamburger-bar { + border-radius: .2em; + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left.collapsed { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left.collapsed:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left.collapsed .hamburger-bar { + border-radius: .2em; + } + .css-menubar [data-toggle="menubar"] .hamburger-arrow-left.collapsed:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + } + .css-menubar .site-menu-item:hover > .site-menu-sub { + display: block; + } +} +@media screen and (max-width: 767px) and (min-width: 768px), screen and (min-width: 1200px) and (min-width: 768px) { + .css-menubar .site-navbar .navbar-header { + width: 220px; + } +} +@media screen and (max-width: 767px) and (min-width: 768px), screen and (min-width: 1200px) and (min-width: 768px) { + .css-menubar .site-navbar .navbar-container { + margin-left: 220px; + } +} +@media screen and (min-width: 1200px) { + .css-menubar .site-contabs, .css-menubar .site-page, .css-menubar .site-footer { + margin-left: 220px; + } +} +.site-menubar-unfold .site-contabs, .site-menubar-unfold .site-page, .site-menubar-unfold .site-footer { + margin-left: 220px; +} +@media (min-width: 768px) { + .site-menubar-unfold .site-navbar .navbar-header { + width: 220px; + } +} +@media (min-width: 768px) { + .site-menubar-unfold .site-navbar .navbar-container { + margin-left: 220px; + } +} +.site-menubar-unfold .site-menu-category { + padding: 0 20px; + margin-top: 18px; + font-size: 12px; + line-height: 36px; + color: #76838f; + text-transform: uppercase; + -webkit-transition: all .25s, font .1s .15s, color .1s .15s; + -o-transition: all .25s, font .1s .15s, color .1s .15s; + transition: all .25s, font .1s .15s, color .1s .15s; +} +.site-menubar-unfold .site-menu > .site-menu-item > a .site-menu-title { + font-size: 14px; +} +.site-menubar-unfold .site-menu-icon { + margin-right: 7px; +} +.site-menubar-unfold .site-menu-title { + display: inline-block; + max-width: 160px; +} +.site-menubar-unfold .site-menu-title:first-child { + margin-left: 28px; +} +.site-menubar-unfold .site-menu .site-menu-sub { + display: none; +} +.site-menubar-unfold .site-menu-item { + line-height: 36px; + -webkit-transition: all .25s, -webkit-transform .1s; + -o-transition: all .25s, -o-transform .1s; + transition: all .25s, -webkit-transform .1s; + transition: transform .1s, all .25s; + transition: transform .1s, all .25s, -webkit-transform .1s, -o-transform .1s; +} +.site-menubar-unfold .site-menu-item.open > a .site-menu-arrow { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.site-menubar-unfold .site-menu-item.open > .site-menu-sub { + display: block; +} +.site-menubar-unfold .site-menu-item:not(.open) > a .site-menu-arrow { + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; +} +.site-menubar-unfold .site-menu-item:not(.open) > .site-menu-sub { + display: none; +} +.site-menubar-unfold .site-menu > .site-menu-item > a { + padding: 0 20px; + line-height: 36px; +} +.site-menubar-unfold.site-menubar-native .site-menubar-body { + overflow-y: scroll; +} +.site-menubar-unfold .site-menubar { + width: 220px; +} +.site-menubar-unfold .site-menubar-footer { + width: 220px; +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left .hamburger-bar { + border-radius: .2em; +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left.collapsed { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left.collapsed:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left.collapsed .hamburger-bar { + border-radius: .2em; +} +.site-menubar-unfold [data-toggle="menubar"] .hamburger-arrow-left.collapsed:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); +} +@media (max-width: 767px) { + .site-menubar-unfold .site-contabs, .site-menubar-unfold .site-page, .site-menubar-unfold .site-footer { + margin-left: auto; + } + .site-menubar-open .site-contabs, .site-menubar-open .site-page, .site-menubar-open .site-footer { + -webkit-transform: translate3d(220px, 0, 0); + -ms-transform: translate(220px, 0); + -ms-transform: translate3d(220px, 0, 0); + transform: translate3d(220px, 0, 0); + } + .site-menubar-changing { + overflow: hidden; + } + .site-menubar-changing .site-contabs, .site-menubar-changing .site-page, .site-menubar-changing .site-footer { + -webkit-transition: -webkit-transform .25s; + -o-transition: -o-transform .25s; + transition: -webkit-transform .25s; + transition: transform .25s; + transition: transform .25s, -webkit-transform .25s, -o-transform .25s; + } + .site-menubar-hide .site-menubar, .site-menubar-open .site-menubar { + -webkit-transition: top .35s, height .35s, -webkit-transform .25s; + -o-transition: top .35s, height .35s, -o-transform .25s; + transition: top .35s, height .35s, -webkit-transform .25s; + transition: transform .25s, top .35s, height .35s; + transition: transform .25s, top .35s, height .35s, -webkit-transform .25s, -o-transform .25s; + } + .site-menubar-open .site-menubar { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate(0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@media (max-width: 767px) { + .site-navbar-collapsing { + -webkit-transition: padding-top .35s; + -o-transition: padding-top .35s; + transition: padding-top .35s; + } + .site-navbar-collapsing .site-contabs { + -webkit-transition: top .35s; + -o-transition: top .35s; + transition: top .35s; + } + body.site-navbar-collapse-show { + padding-top: 120px; + } + .site-navbar-collapse-show.site-contabs-open .site-contabs { + top: 120px; + } + .site-navbar-collapse-show .slidePanel.slidePanel-right, .site-navbar-collapse-show .slidePanel.slidePanel-left { + top: 120px; + -webkit-transition: top .35s; + -o-transition: top .35s; + transition: top .35s; + } +} +@media (max-width: 767px) { + .site-navbar .brand { + display: none; + } + .site-navbar .brand-mobile { + display: block; + } + .site-menubar { + top: 60px; + height: -webkit-calc(100% - 60px); + height: calc(100% - 60px); + -webkit-transform: translate3d(-220px, 0, 0); + -ms-transform: translate(-220px, 0); + -ms-transform: translate3d(-220px, 0, 0); + transform: translate3d(-220px, 0, 0); + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .site-navbar-collapse-show .site-menubar { + top: 120px; + height: -webkit-calc(100% - 120px); + height: calc(100% - 120px); + } + .site-menubar-footer { + visibility: hidden; + } + .site-menubar-open .site-menubar-footer { + visibility: visible; + } + .disable-scrolling { + height: 100%; + overflow: hidden; + } + body.site-menubar-open { + height: 100%; + overflow: hidden; + } + body.site-menubar-open .site-page { + height: 100%; + overflow: hidden; + } +} +.loader { + position: relative; + display: inline-block; + margin: 0 auto; + font-size: 30px; + text-indent: -9999em; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.loader.loader-default { + width: 1em; + height: 1em; + background-color: #a3afb7; + border-radius: 100%; + -webkit-animation: loader-default 1s infinite ease-in-out; + -o-animation: loader-default 1s infinite ease-in-out; + animation: loader-default 1s infinite ease-in-out; +} +.loader.loader-grill { + width: .25em; + height: .5em; + background: #a3afb7; + -webkit-animation: default-grill 1s infinite ease-in-out; + -o-animation: default-grill 1s infinite ease-in-out; + animation: default-grill 1s infinite ease-in-out; + -webkit-animation-delay: -.16s; + -o-animation-delay: -.16s; + animation-delay: -.16s; +} +.loader.loader-grill:before, .loader.loader-grill:after { + position: absolute; + top: 0; + width: 100%; + height: 100%; + content: ""; + background: #a3afb7; + -webkit-animation: default-grill 1s infinite ease-in-out; + -o-animation: default-grill 1s infinite ease-in-out; + animation: default-grill 1s infinite ease-in-out; +} +.loader.loader-grill:before { + left: -.375em; + -webkit-animation-delay: -.32s; + -o-animation-delay: -.32s; + animation-delay: -.32s; +} +.loader.loader-grill:after { + left: .375em; +} +.loader.loader-circle { + width: 1em; + height: 1em; + border-top: .125em solid rgba(163, 175, 183, .5); + border-right: .125em solid rgba(163, 175, 183, .5); + border-bottom: .125em solid rgba(163, 175, 183, .5); + border-left: .125em solid #a3afb7; + border-radius: 50%; + -webkit-animation: loader-circle 1.1s infinite linear; + -o-animation: loader-circle 1.1s infinite linear; + animation: loader-circle 1.1s infinite linear; +} +.loader.loader-tadpole { + width: 1em; + height: 1em; + border-radius: 50%; + -webkit-animation: loader-tadpole 1.7s infinite ease; + -o-animation: loader-tadpole 1.7s infinite ease; + animation: loader-tadpole 1.7s infinite ease; +} +.loader.loader-ellipsis { + top: -.625em; + width: .625em; + height: .625em; + border-radius: 50%; + -webkit-animation: loader-ellipsis 1.8s infinite ease-in-out; + -o-animation: loader-ellipsis 1.8s infinite ease-in-out; + animation: loader-ellipsis 1.8s infinite ease-in-out; + -webkit-animation-delay: -.16s; + -o-animation-delay: -.16s; + animation-delay: -.16s; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.loader.loader-ellipsis:before, .loader.loader-ellipsis:after { + position: absolute; + top: 0; + width: 100%; + height: 100%; + content: ""; + border-radius: 50%; + -webkit-animation: loader-ellipsis 1.8s infinite ease-in-out; + -o-animation: loader-ellipsis 1.8s infinite ease-in-out; + animation: loader-ellipsis 1.8s infinite ease-in-out; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.loader.loader-ellipsis:before { + left: -.875em; + -webkit-animation-delay: -.32s; + -o-animation-delay: -.32s; + animation-delay: -.32s; +} +.loader.loader-ellipsis:after { + left: .875em; +} +.loader.loader-dot { + width: 2em; + height: 2em; + -webkit-animation: loader-dot-rotate 2s infinite linear; + -o-animation: loader-dot-rotate 2s infinite linear; + animation: loader-dot-rotate 2s infinite linear; +} +.loader.loader-dot:before, .loader.loader-dot:after { + position: absolute; + top: 0; + left: 0; + width: 60%; + height: 60%; + content: ""; + background: #a3afb7; + border-radius: 100%; + -webkit-animation: loader-dot-bounce 2s infinite ease-in-out; + -o-animation: loader-dot-bounce 2s infinite ease-in-out; + animation: loader-dot-bounce 2s infinite ease-in-out; +} +.loader.loader-dot:after { + top: auto; + bottom: 0; + -webkit-animation-delay: -1s; + -o-animation-delay: -1s; + animation-delay: -1s; +} +.loader.loader-bounce { + width: 1.5em; + height: 1.5em; +} +.loader.loader-bounce:before, .loader.loader-bounce:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ""; + background: #a3afb7; + border-radius: 50%; + opacity: .6; + -webkit-animation: loader-bounce 2s infinite ease-in-out; + -o-animation: loader-bounce 2s infinite ease-in-out; + animation: loader-bounce 2s infinite ease-in-out; +} +.loader.loader-bounce:after { + -webkit-animation-delay: -1s; + -o-animation-delay: -1s; + animation-delay: -1s; +} +.side-panel-loading, body > .loader { + position: fixed; + top: 50%; + left: 50%; + margin-top: -20px; +} +.site-menubar-unfold > .loader { + margin-left: 130px; +} +.site-menubar-fold > .loader { + margin-left: 45px; +} +.site-menubar-hide.site-menubar-unfold > .loader { + margin-left: 0; +} +@-webkit-keyframes loader-default { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-default { + 0% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-default { + 0% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + -webkit-box-shadow: 0 0 #a3afb7; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + -webkit-box-shadow: 0 -.25em #a3afb7; + box-shadow: 0 -.25em #a3afb7; + } +} +@-o-keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + box-shadow: 0 -.25em #a3afb7; + } +} +@keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + -webkit-box-shadow: 0 0 #a3afb7; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + -webkit-box-shadow: 0 -.25em #a3afb7; + box-shadow: 0 -.25em #a3afb7; + } +} +@-webkit-keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-tadpole { + 0% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-tadpole { + 0% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-tadpole { + 0% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-ellipsis { + 0%, 80%, 100% { + -webkit-box-shadow: 0 .625em 0 -.325em #a3afb7; + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + -webkit-box-shadow: 0 .625em 0 0 #a3afb7; + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@-o-keyframes loader-ellipsis { + 0%, 80%, 100% { + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@keyframes loader-ellipsis { + 0%, 80%, 100% { + -webkit-box-shadow: 0 .625em 0 -.325em #a3afb7; + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + -webkit-box-shadow: 0 .625em 0 0 #a3afb7; + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@-webkit-keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +[class*=animation-] { + -webkit-animation-duration: .5s; + -o-animation-duration: .5s; + animation-duration: .5s; + -webkit-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} +.animation-hover:not(:hover), .animation-hover:not(:hover) [class*=animation-], .touch .animation-hover:not(.hover), .touch .animation-hover:not(.hover) [class*=animation-] { + -webkit-animation-name: none; + -o-animation-name: none; + animation-name: none; +} +.animation-reverse { + -webkit-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + animation-direction: reverse; +} +.animation-repeat { + -webkit-animation-iteration-count: infinite; + -o-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +.animation-fade { + -webkit-animation-name: fade; + -o-animation-name: fade; + animation-name: fade; + -webkit-animation-duration: .8s; + -o-animation-duration: .8s; + animation-duration: .8s; + -webkit-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; +} +.animation-scale { + -webkit-animation-name: scale-12; + -o-animation-name: scale-12; + animation-name: scale-12; +} +.animation-scale-up { + -webkit-animation-name: fade-scale-02; + -o-animation-name: fade-scale-02; + animation-name: fade-scale-02; +} +.animation-scale-down { + -webkit-animation-name: fade-scale-18; + -o-animation-name: fade-scale-18; + animation-name: fade-scale-18; +} +.animation-slide-top { + -webkit-animation-name: slide-top; + -o-animation-name: slide-top; + animation-name: slide-top; +} +.animation-slide-bottom { + -webkit-animation-name: slide-bottom; + -o-animation-name: slide-bottom; + animation-name: slide-bottom; +} +.animation-slide-left { + -webkit-animation-name: slide-left; + -o-animation-name: slide-left; + animation-name: slide-left; +} +.animation-slide-right { + -webkit-animation-name: slide-right; + -o-animation-name: slide-right; + animation-name: slide-right; +} +.animation-shake { + -webkit-animation-name: shake; + -o-animation-name: shake; + animation-name: shake; +} +.animation-duration-10 { + -webkit-animation-duration: 15s; + -o-animation-duration: 15s; + animation-duration: 15s; +} +.animation-duration-9 { + -webkit-animation-duration: 9s; + -o-animation-duration: 9s; + animation-duration: 9s; +} +.animation-duration-8 { + -webkit-animation-duration: 8s; + -o-animation-duration: 8s; + animation-duration: 8s; +} +.animation-duration-7 { + -webkit-animation-duration: 7s; + -o-animation-duration: 7s; + animation-duration: 7s; +} +.animation-duration-6 { + -webkit-animation-duration: 6s; + -o-animation-duration: 6s; + animation-duration: 6s; +} +.animation-duration-5 { + -webkit-animation-duration: 5s; + -o-animation-duration: 5s; + animation-duration: 5s; +} +.animation-duration-4 { + -webkit-animation-duration: 4s; + -o-animation-duration: 4s; + animation-duration: 4s; +} +.animation-duration-3 { + -webkit-animation-duration: 3s; + -o-animation-duration: 3s; + animation-duration: 3s; +} +.animation-duration-2 { + -webkit-animation-duration: 2s; + -o-animation-duration: 2s; + animation-duration: 2s; +} +.animation-duration-1 { + -webkit-animation-duration: 1s; + -o-animation-duration: 1s; + animation-duration: 1s; +} +.animation-delay-100 { + -webkit-animation-duration: 100ms; + -o-animation-duration: 100ms; + animation-duration: 100ms; +} +.animation-duration-250 { + -webkit-animation-duration: 250ms; + -o-animation-duration: 250ms; + animation-duration: 250ms; +} +.animation-duration-300 { + -webkit-animation-duration: 300ms; + -o-animation-duration: 300ms; + animation-duration: 300ms; +} +.animation-duration-500 { + -webkit-animation-duration: 500ms; + -o-animation-duration: 500ms; + animation-duration: 500ms; +} +.animation-duration-750 { + -webkit-animation-duration: 750ms; + -o-animation-duration: 750ms; + animation-duration: 750ms; +} +.animation-delay-1000 { + -webkit-animation-delay: 1s; + -o-animation-delay: 1s; + animation-delay: 1s; +} +.animation-delay-900 { + -webkit-animation-delay: 900ms; + -o-animation-delay: 900ms; + animation-delay: 900ms; +} +.animation-delay-800 { + -webkit-animation-delay: 800ms; + -o-animation-delay: 800ms; + animation-delay: 800ms; +} +.animation-delay-700 { + -webkit-animation-delay: 700ms; + -o-animation-delay: 700ms; + animation-delay: 700ms; +} +.animation-delay-600 { + -webkit-animation-delay: 600ms; + -o-animation-delay: 600ms; + animation-delay: 600ms; +} +.animation-delay-500 { + -webkit-animation-delay: 500ms; + -o-animation-delay: 500ms; + animation-delay: 500ms; +} +.animation-delay-400 { + -webkit-animation-delay: 400ms; + -o-animation-delay: 400ms; + animation-delay: 400ms; +} +.animation-delay-300 { + -webkit-animation-delay: 300ms; + -o-animation-delay: 300ms; + animation-delay: 300ms; +} +.animation-delay-200 { + -webkit-animation-delay: 200ms; + -o-animation-delay: 200ms; + animation-delay: 200ms; +} +.animation-delay-100 { + -webkit-animation-delay: 100ms; + -o-animation-delay: 100ms; + animation-delay: 100ms; +} +.animation-top-left { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + -o-transform-origin: 0 0; + transform-origin: 0 0; +} +.animation-top-center { + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + -o-transform-origin: 50% 0; + transform-origin: 50% 0; +} +.animation-top-right { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -o-transform-origin: 100% 0; + transform-origin: 100% 0; +} +.animation-middle-left { + -webkit-transform-origin: 0 50%; + -ms-transform-origin: 0 50%; + -o-transform-origin: 0 50%; + transform-origin: 0 50%; +} +.animation-middle-right { + -webkit-transform-origin: 100% 50%; + -ms-transform-origin: 100% 50%; + -o-transform-origin: 100% 50%; + transform-origin: 100% 50%; +} +.animation-bottom-left { + -webkit-transform-origin: 0 100%; + -ms-transform-origin: 0 100%; + -o-transform-origin: 0 100%; + transform-origin: 0 100%; +} +.animation-bottom-center { + -webkit-transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -o-transform-origin: 50% 100%; + transform-origin: 50% 100%; +} +.animation-bottom-right { + -webkit-transform-origin: 100% 100%; + -ms-transform-origin: 100% 100%; + -o-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} +.animation-easing-easeInOut { + -webkit-animation-timing-function: cubic-bezier(.42, 0, .58, 1); + -o-animation-timing-function: cubic-bezier(.42, 0, .58, 1); + animation-timing-function: cubic-bezier(.42, 0, .58, 1); +} +.animation-easing-easeInQuad { + -webkit-animation-timing-function: cubic-bezier(.55, .085, .68, .53); + -o-animation-timing-function: cubic-bezier(.55, .085, .68, .53); + animation-timing-function: cubic-bezier(.55, .085, .68, .53); +} +.animation-easing-easeInCubic { + -webkit-animation-timing-function: cubic-bezier(.55, .055, .675, .19); + -o-animation-timing-function: cubic-bezier(.55, .055, .675, .19); + animation-timing-function: cubic-bezier(.55, .055, .675, .19); +} +.animation-easing-easeInQuart { + -webkit-animation-timing-function: cubic-bezier(.895, .03, .685, .22); + -o-animation-timing-function: cubic-bezier(.895, .03, .685, .22); + animation-timing-function: cubic-bezier(.895, .03, .685, .22); +} +.animation-easing-easeInQuint { + -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06); + -o-animation-timing-function: cubic-bezier(.755, .05, .855, .06); + animation-timing-function: cubic-bezier(.755, .05, .855, .06); +} +.animation-easing-easeInSine { + -webkit-animation-timing-function: cubic-bezier(.47, 0, .745, .715); + -o-animation-timing-function: cubic-bezier(.47, 0, .745, .715); + animation-timing-function: cubic-bezier(.47, 0, .745, .715); +} +.animation-easing-easeInExpo { + -webkit-animation-timing-function: cubic-bezier(.95, .05, .795, .035); + -o-animation-timing-function: cubic-bezier(.95, .05, .795, .035); + animation-timing-function: cubic-bezier(.95, .05, .795, .035); +} +.animation-easing-easeInCirc { + -webkit-animation-timing-function: cubic-bezier(.6, .04, .98, .335); + -o-animation-timing-function: cubic-bezier(.6, .04, .98, .335); + animation-timing-function: cubic-bezier(.6, .04, .98, .335); +} +.animation-easing-easeInBack { + -webkit-animation-timing-function: cubic-bezier(.6, -.28, .735, .045); + -o-animation-timing-function: cubic-bezier(.6, -.28, .735, .045); + animation-timing-function: cubic-bezier(.6, -.28, .735, .045); +} +.animation-easing-eastOutQuad { + -webkit-animation-timing-function: cubic-bezier(.25, .46, .45, .94); + -o-animation-timing-function: cubic-bezier(.25, .46, .45, .94); + animation-timing-function: cubic-bezier(.25, .46, .45, .94); +} +.animation-easing-easeOutCubic { + -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); + -o-animation-timing-function: cubic-bezier(.215, .61, .355, 1); + animation-timing-function: cubic-bezier(.215, .61, .355, 1); +} +.animation-easing-easeOutQuart { + -webkit-animation-timing-function: cubic-bezier(.165, .84, .44, 1); + -o-animation-timing-function: cubic-bezier(.165, .84, .44, 1); + animation-timing-function: cubic-bezier(.165, .84, .44, 1); +} +.animation-easing-easeOutQuint { + -webkit-animation-timing-function: cubic-bezier(.23, 1, .32, 1); + -o-animation-timing-function: cubic-bezier(.23, 1, .32, 1); + animation-timing-function: cubic-bezier(.23, 1, .32, 1); +} +.animation-easing-easeOutSine { + -webkit-animation-timing-function: cubic-bezier(.39, .575, .565, 1); + -o-animation-timing-function: cubic-bezier(.39, .575, .565, 1); + animation-timing-function: cubic-bezier(.39, .575, .565, 1); +} +.animation-easing-easeOutExpo { + -webkit-animation-timing-function: cubic-bezier(.19, 1, .22, 1); + -o-animation-timing-function: cubic-bezier(.19, 1, .22, 1); + animation-timing-function: cubic-bezier(.19, 1, .22, 1); +} +.animation-easing-easeOutCirc { + -webkit-animation-timing-function: cubic-bezier(.075, .82, .165, 1); + -o-animation-timing-function: cubic-bezier(.075, .82, .165, 1); + animation-timing-function: cubic-bezier(.075, .82, .165, 1); +} +.animation-easing-easeOutBack { + -webkit-animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); + -o-animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); + animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); +} +.animation-easing-easeInOutQuad { + -webkit-animation-timing-function: cubic-bezier(.455, .03, .515, .955); + -o-animation-timing-function: cubic-bezier(.455, .03, .515, .955); + animation-timing-function: cubic-bezier(.455, .03, .515, .955); +} +.animation-easing-easeInOutCubic { + -webkit-animation-timing-function: cubic-bezier(.645, .045, .355, 1); + -o-animation-timing-function: cubic-bezier(.645, .045, .355, 1); + animation-timing-function: cubic-bezier(.645, .045, .355, 1); +} +.animation-easing-easeInOutQuart { + -webkit-animation-timing-function: cubic-bezier(.77, 0, .175, 1); + -o-animation-timing-function: cubic-bezier(.77, 0, .175, 1); + animation-timing-function: cubic-bezier(.77, 0, .175, 1); +} +.animation-easing-easeInOutQuint { + -webkit-animation-timing-function: cubic-bezier(.86, 0, .07, 1); + -o-animation-timing-function: cubic-bezier(.86, 0, .07, 1); + animation-timing-function: cubic-bezier(.86, 0, .07, 1); +} +.animation-easing-easeInOutSine { + -webkit-animation-timing-function: cubic-bezier(.445, .05, .55, .95); + -o-animation-timing-function: cubic-bezier(.445, .05, .55, .95); + animation-timing-function: cubic-bezier(.445, .05, .55, .95); +} +.animation-easing-easeInOutExpo { + -webkit-animation-timing-function: cubic-bezier(1, 0, 0, 1); + -o-animation-timing-function: cubic-bezier(1, 0, 0, 1); + animation-timing-function: cubic-bezier(1, 0, 0, 1); +} +.animation-easing-easeInOutCirc { + -webkit-animation-timing-function: cubic-bezier(.785, .135, .15, .86); + -o-animation-timing-function: cubic-bezier(.785, .135, .15, .86); + animation-timing-function: cubic-bezier(.785, .135, .15, .86); +} +.animation-easing-easeInOutBack { + -webkit-animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); + -o-animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); + animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); +} +.animation-easing-easeInOutElastic { + -webkit-animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); + -o-animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); + animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); +} +@-webkit-keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-o-keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes scale-12 { + 0% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes scale-12 { + 0% { + -o-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes scale-12 { + 0% { + -webkit-transform: scale(1.2); + -o-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes fade-scale-02 { + 0% { + opacity: 0; + -webkit-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes fade-scale-02 { + 0% { + opacity: 0; + -o-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes fade-scale-02 { + 0% { + opacity: 0; + -webkit-transform: scale(.2); + -o-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes fade-scale-18 { + 0% { + opacity: 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes fade-scale-18 { + 0% { + opacity: 0; + -o-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes fade-scale-18 { + 0% { + opacity: 0; + -webkit-transform: scale(1.8); + -o-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -webkit-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -webkit-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -webkit-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -webkit-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -webkit-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -webkit-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -webkit-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -webkit-transform: translateX(-1px); + transform: translateX(-1px); + } +} +@-o-keyframes shake { + 0%, 100% { + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -o-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -o-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -o-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -o-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -o-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -o-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -o-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -o-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -o-transform: translateX(-1px); + transform: translateX(-1px); + } +} +@keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-9px); + -o-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -webkit-transform: translateX(8px); + -o-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -webkit-transform: translateX(-7px); + -o-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -webkit-transform: translateX(6px); + -o-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -webkit-transform: translateX(-5px); + -o-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -webkit-transform: translateX(4px); + -o-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -webkit-transform: translateX(-3px); + -o-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -webkit-transform: translateX(2px); + -o-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -webkit-transform: translateX(-1px); + -o-transform: translateX(-1px); + transform: translateX(-1px); + } +} +.primary-100 { + color: #e8f1f8 !important; +} +.primary-200 { + color: #d5e4f1 !important; +} +.primary-300 { + color: #bcd8f1 !important; +} +.primary-400 { + color: #a2caee !important; +} +.primary-500 { + color: #89bceb !important; +} +.primary-600 { + color: #62a8ea !important; +} +.primary-700 { + color: #4e97d9 !important; +} +.primary-800 { + color: #3583ca !important; +} +.blue-100 { + color: #e8f1f8 !important; +} +.blue-200 { + color: #d5e4f1 !important; +} +.blue-300 { + color: #bcd8f1 !important; +} +.blue-400 { + color: #a2caee !important; +} +.blue-500 { + color: #89bceb !important; +} +.blue-600 { + color: #62a8ea !important; +} +.blue-700 { + color: #4e97d9 !important; +} +.blue-800 { + color: #3583ca !important; +} +.red-100 { + color: #ffeaea !important; +} +.red-200 { + color: #fad3d3 !important; +} +.red-300 { + color: #fab4b4 !important; +} +.red-400 { + color: #fa9898 !important; +} +.red-500 { + color: #fa7a7a !important; +} +.red-600 { + color: #f96868 !important; +} +.red-700 { + color: #e9595b !important; +} +.red-800 { + color: #d6494b !important; +} +.pink-100 { + color: #fce4ec !important; +} +.pink-200 { + color: #ffccde !important; +} +.pink-300 { + color: #fba9c6 !important; +} +.pink-400 { + color: #fb8db4 !important; +} +.pink-500 { + color: #f978a6 !important; +} +.pink-600 { + color: #f96197 !important; +} +.pink-700 { + color: #f44c87 !important; +} +.pink-800 { + color: #e53b75 !important; +} +.purple-100 { + color: #f6f2ff !important; +} +.purple-200 { + color: #e3dbf4 !important; +} +.purple-300 { + color: #d2c5ec !important; +} +.purple-400 { + color: #bba7e4 !important; +} +.purple-500 { + color: #a58add !important; +} +.purple-600 { + color: #926dde !important; +} +.purple-700 { + color: #7c51d1 !important; +} +.purple-800 { + color: #6d45bc !important; +} +.indigo-100 { + color: #edeff9 !important; +} +.indigo-200 { + color: #dadef5 !important; +} +.indigo-300 { + color: #bcc5f4 !important; +} +.indigo-400 { + color: #9daaf3 !important; +} +.indigo-500 { + color: #8897ec !important; +} +.indigo-600 { + color: #677ae4 !important; +} +.indigo-700 { + color: #5166d6 !important; +} +.indigo-800 { + color: #465bd4 !important; +} +.cyan-100 { + color: #ecf9fa !important; +} +.cyan-200 { + color: #d3eff2 !important; +} +.cyan-300 { + color: #baeaef !important; +} +.cyan-400 { + color: #9ae1e9 !important; +} +.cyan-500 { + color: #77d6e1 !important; +} +.cyan-600 { + color: #57c7d4 !important; +} +.cyan-700 { + color: #47b8c6 !important; +} +.cyan-800 { + color: #37a9b7 !important; +} +.teal-100 { + color: #ecfdfc !important; +} +.teal-200 { + color: #cdf4f1 !important; +} +.teal-300 { + color: #99e1da !important; +} +.teal-400 { + color: #79d1c9 !important; +} +.teal-500 { + color: #56bfb5 !important; +} +.teal-600 { + color: #3aa99e !important; +} +.teal-700 { + color: #269b8f !important; +} +.teal-800 { + color: #178d81 !important; +} +.green-100 { + color: #e7faf2 !important; +} +.green-200 { + color: #bfedd8 !important; +} +.green-300 { + color: #9fe5c5 !important; +} +.green-400 { + color: #7dd3ae !important; +} +.green-500 { + color: #5cd29d !important; +} +.green-600 { + color: #46be8a !important; +} +.green-700 { + color: #36ab7a !important; +} +.green-800 { + color: #279566 !important; +} +.light-green-100 { + color: #f1f7ea !important; +} +.light-green-200 { + color: #e0ecd1 !important; +} +.light-green-300 { + color: #cadfb1 !important; +} +.light-green-400 { + color: #bad896 !important; +} +.light-green-500 { + color: #acd57c !important; +} +.light-green-600 { + color: #9ece67 !important; +} +.light-green-700 { + color: #83b944 !important; +} +.light-green-800 { + color: #70a532 !important; +} +.yellow-100 { + color: #fffae7 !important; +} +.yellow-200 { + color: #f9eec1 !important; +} +.yellow-300 { + color: #f6e7a9 !important; +} +.yellow-400 { + color: #f8e59b !important; +} +.yellow-500 { + color: #f7e083 !important; +} +.yellow-600 { + color: #f7da64 !important; +} +.yellow-700 { + color: #f9cd48 !important; +} +.yellow-800 { + color: #fbc02d !important; +} +.orange-100 { + color: #fff3e6 !important; +} +.orange-200 { + color: #ffddb9 !important; +} +.orange-300 { + color: #fbce9d !important; +} +.orange-400 { + color: #f6be80 !important; +} +.orange-500 { + color: #f4b066 !important; +} +.orange-600 { + color: #f2a654 !important; +} +.orange-700 { + color: #ec9940 !important; +} +.orange-800 { + color: #e98f2e !important; +} +.brown-100 { + color: #fae6df !important; +} +.brown-200 { + color: #e2bdaf !important; +} +.brown-300 { + color: #d3aa9c !important; +} +.brown-400 { + color: #b98e7e !important; +} +.brown-500 { + color: #a17768 !important; +} +.brown-600 { + color: #8d6658 !important; +} +.brown-700 { + color: #7d5b4f !important; +} +.brown-800 { + color: #715146 !important; +} +.grey-100 { + color: #fafafa !important; +} +.grey-200 { + color: #eee !important; +} +.grey-300 { + color: #e0e0e0 !important; +} +.grey-400 { + color: #bdbdbd !important; +} +.grey-500 { + color: #9e9e9e !important; +} +.grey-600 { + color: #757575 !important; +} +.grey-700 { + color: #616161 !important; +} +.grey-800 { + color: #424242 !important; +} +.blue-grey-100 { + color: #f3f7f9 !important; +} +.blue-grey-200 { + color: #e4eaec !important; +} +.blue-grey-300 { + color: #ccd5db !important; +} +.blue-grey-400 { + color: #a3afb7 !important; +} +.blue-grey-500 { + color: #76838f !important; +} +.blue-grey-600 { + color: #526069 !important; +} +.blue-grey-700 { + color: #37474f !important; +} +.blue-grey-800 { + color: #263238 !important; +} +.bg-primary-100 { + background-color: #e8f1f8 !important; +} +.bg-primary-200 { + background-color: #d5e4f1 !important; +} +.bg-primary-300 { + background-color: #bcd8f1 !important; +} +.bg-primary-400 { + background-color: #a2caee !important; +} +.bg-primary-500 { + background-color: #89bceb !important; +} +.bg-primary-600 { + background-color: #62a8ea !important; +} +.bg-primary-700 { + background-color: #4e97d9 !important; +} +.bg-primary-800 { + background-color: #3583ca !important; +} +.bg-blue-100 { + background-color: #e8f1f8 !important; +} +.bg-blue-200 { + background-color: #d5e4f1 !important; +} +.bg-blue-300 { + background-color: #bcd8f1 !important; +} +.bg-blue-400 { + background-color: #a2caee !important; +} +.bg-blue-500 { + background-color: #89bceb !important; +} +.bg-blue-600 { + background-color: #62a8ea !important; +} +.bg-blue-700 { + background-color: #4e97d9 !important; +} +.bg-blue-800 { + background-color: #3583ca !important; +} +.bg-red-100 { + background-color: #ffeaea !important; +} +.bg-red-200 { + background-color: #fad3d3 !important; +} +.bg-red-300 { + background-color: #fab4b4 !important; +} +.bg-red-400 { + background-color: #fa9898 !important; +} +.bg-red-500 { + background-color: #fa7a7a !important; +} +.bg-red-600 { + background-color: #f96868 !important; +} +.bg-red-700 { + background-color: #e9595b !important; +} +.bg-red-800 { + background-color: #d6494b !important; +} +.bg-pink-100 { + background-color: #fce4ec !important; +} +.bg-pink-200 { + background-color: #ffccde !important; +} +.bg-pink-300 { + background-color: #fba9c6 !important; +} +.bg-pink-400 { + background-color: #fb8db4 !important; +} +.bg-pink-500 { + background-color: #f978a6 !important; +} +.bg-pink-600 { + background-color: #f96197 !important; +} +.bg-pink-700 { + background-color: #f44c87 !important; +} +.bg-pink-800 { + background-color: #e53b75 !important; +} +.bg-purple-100 { + background-color: #f6f2ff !important; +} +.bg-purple-200 { + background-color: #e3dbf4 !important; +} +.bg-purple-300 { + background-color: #d2c5ec !important; +} +.bg-purple-400 { + background-color: #bba7e4 !important; +} +.bg-purple-500 { + background-color: #a58add !important; +} +.bg-purple-600 { + background-color: #926dde !important; +} +.bg-purple-700 { + background-color: #7c51d1 !important; +} +.bg-purple-800 { + background-color: #6d45bc !important; +} +.bg-indigo-100 { + background-color: #edeff9 !important; +} +.bg-indigo-200 { + background-color: #dadef5 !important; +} +.bg-indigo-300 { + background-color: #bcc5f4 !important; +} +.bg-indigo-400 { + background-color: #9daaf3 !important; +} +.bg-indigo-500 { + background-color: #8897ec !important; +} +.bg-indigo-600 { + background-color: #677ae4 !important; +} +.bg-indigo-700 { + background-color: #5166d6 !important; +} +.bg-indigo-800 { + background-color: #465bd4 !important; +} +.bg-cyan-100 { + background-color: #ecf9fa !important; +} +.bg-cyan-200 { + background-color: #d3eff2 !important; +} +.bg-cyan-300 { + background-color: #baeaef !important; +} +.bg-cyan-400 { + background-color: #9ae1e9 !important; +} +.bg-cyan-500 { + background-color: #77d6e1 !important; +} +.bg-cyan-600 { + background-color: #57c7d4 !important; +} +.bg-cyan-700 { + background-color: #47b8c6 !important; +} +.bg-cyan-800 { + background-color: #37a9b7 !important; +} +.bg-teal-100 { + background-color: #ecfdfc !important; +} +.bg-teal-200 { + background-color: #cdf4f1 !important; +} +.bg-teal-300 { + background-color: #99e1da !important; +} +.bg-teal-400 { + background-color: #79d1c9 !important; +} +.bg-teal-500 { + background-color: #56bfb5 !important; +} +.bg-teal-600 { + background-color: #3aa99e !important; +} +.bg-teal-700 { + background-color: #269b8f !important; +} +.bg-teal-800 { + background-color: #178d81 !important; +} +.bg-green-100 { + background-color: #e7faf2 !important; +} +.bg-green-200 { + background-color: #bfedd8 !important; +} +.bg-green-300 { + background-color: #9fe5c5 !important; +} +.bg-green-400 { + background-color: #7dd3ae !important; +} +.bg-green-500 { + background-color: #5cd29d !important; +} +.bg-green-600 { + background-color: #46be8a !important; +} +.bg-green-700 { + background-color: #36ab7a !important; +} +.bg-green-800 { + background-color: #279566 !important; +} +.bg-light-green-100 { + background-color: #f1f7ea !important; +} +.bg-light-green-200 { + background-color: #e0ecd1 !important; +} +.bg-light-green-300 { + background-color: #cadfb1 !important; +} +.bg-light-green-400 { + background-color: #bad896 !important; +} +.bg-light-green-500 { + background-color: #acd57c !important; +} +.bg-light-green-600 { + background-color: #9ece67 !important; +} +.bg-light-green-700 { + background-color: #83b944 !important; +} +.bg-light-green-800 { + background-color: #70a532 !important; +} +.bg-yellow-100 { + background-color: #fffae7 !important; +} +.bg-yellow-200 { + background-color: #f9eec1 !important; +} +.bg-yellow-300 { + background-color: #f6e7a9 !important; +} +.bg-yellow-400 { + background-color: #f8e59b !important; +} +.bg-yellow-500 { + background-color: #f7e083 !important; +} +.bg-yellow-600 { + background-color: #f7da64 !important; +} +.bg-yellow-700 { + background-color: #f9cd48 !important; +} +.bg-yellow-800 { + background-color: #fbc02d !important; +} +.bg-orange-100 { + background-color: #fff3e6 !important; +} +.bg-orange-200 { + background-color: #ffddb9 !important; +} +.bg-orange-300 { + background-color: #fbce9d !important; +} +.bg-orange-400 { + background-color: #f6be80 !important; +} +.bg-orange-500 { + background-color: #f4b066 !important; +} +.bg-orange-600 { + background-color: #f2a654 !important; +} +.bg-orange-700 { + background-color: #ec9940 !important; +} +.bg-orange-800 { + background-color: #e98f2e !important; +} +.bg-brown-100 { + background-color: #fae6df !important; +} +.bg-brown-200 { + background-color: #e2bdaf !important; +} +.bg-brown-300 { + background-color: #d3aa9c !important; +} +.bg-brown-400 { + background-color: #b98e7e !important; +} +.bg-brown-500 { + background-color: #a17768 !important; +} +.bg-brown-600 { + background-color: #8d6658 !important; +} +.bg-brown-700 { + background-color: #7d5b4f !important; +} +.bg-brown-800 { + background-color: #715146 !important; +} +.bg-grey-100 { + background-color: #fafafa !important; +} +.bg-grey-200 { + background-color: #eee !important; +} +.bg-grey-300 { + background-color: #e0e0e0 !important; +} +.bg-grey-400 { + background-color: #bdbdbd !important; +} +.bg-grey-500 { + background-color: #9e9e9e !important; +} +.bg-grey-600 { + background-color: #757575 !important; +} +.bg-grey-700 { + background-color: #616161 !important; +} +.bg-grey-800 { + background-color: #424242 !important; +} +.bg-blue-grey-100 { + background-color: #f3f7f9 !important; +} +.bg-blue-grey-200 { + background-color: #e4eaec !important; +} +.bg-blue-grey-300 { + background-color: #ccd5db !important; +} +.bg-blue-grey-400 { + background-color: #a3afb7 !important; +} +.bg-blue-grey-500 { + background-color: #76838f !important; +} +.bg-blue-grey-600 { + background-color: #526069 !important; +} +.bg-blue-grey-700 { + background-color: #37474f !important; +} +.bg-blue-grey-800 { + background-color: #263238 !important; +} +.black { + color: #000 !important; +} +.white { + color: #fff !important; +} +.bg-white { + color: #76838f; + background-color: #fff; +} +.bg-primary { + color: #fff; + background-color: #62a8ea; +} +.bg-primary:hover { + background-color: #8fc1f0; +} +.bg-primary a, a.bg-primary { + color: #fff; +} +.bg-primary a:hover, a.bg-primary:hover { + color: #fff; +} +.bg-success { + color: #fff; + background-color: #46be8a; +} +.bg-success:hover { + background-color: #6ccba2; +} +.bg-success a, a.bg-success { + color: #fff; +} +.bg-success a:hover, a.bg-success:hover { + color: #fff; +} +.bg-info { + color: #fff; + background-color: #57c7d4; +} +.bg-info:hover { + background-color: #80d5de; +} +.bg-info a, a.bg-info { + color: #fff; +} +.bg-info a:hover, a.bg-info:hover { + color: #fff; +} +.bg-warning { + color: #fff; + background-color: #f2a654; +} +.bg-warning:hover { + background-color: #f6bf83; +} +.bg-warning a, a.bg-warning { + color: #fff; +} +.bg-warning a:hover, a.bg-warning:hover { + color: #fff; +} +.bg-danger { + color: #fff; + background-color: #f96868; +} +.bg-danger:hover { + background-color: #fb9999; +} +.bg-danger a, a.bg-danger { + color: #fff; +} +.bg-danger a:hover, a.bg-danger:hover { + color: #fff; +} +.bg-dark { + color: #fff; + background-color: #526069; +} +.bg-dark:hover { + background-color: #687a86; +} +.bg-dark a, a.bg-dark { + color: #fff; +} +.bg-dark a:hover, a.bg-dark:hover { + color: #fff; +} +.hamburger { + font-size: 20px; + vertical-align: middle; +} +.hamburger, .hamburger:before, .hamburger .hamburger-bar, .hamburger:after { + -webkit-transition: -webkit-transform .2s ease-in-out; + -o-transition: -o-transform .2s ease-in-out; + transition: -webkit-transform .2s ease-in-out; + transition: transform .2s ease-in-out; + transition: transform .2s ease-in-out, -webkit-transform .2s ease-in-out, -o-transform .2s ease-in-out; +} +.hamburger:before, .hamburger:after { + content: ""; +} +.hamburger:before, .hamburger .hamburger-bar, .hamburger:after { + display: block; + width: 1em; + height: .1em; + margin: 0; + background: #76838f; + border-radius: 1px; +} +.navbar-default .hamburger:before, .navbar-default .hamburger .hamburger-bar, .navbar-default .hamburger:after { + background: #76838f; +} +.navbar-inverse .hamburger:before, .navbar-inverse .hamburger .hamburger-bar, .navbar-inverse .hamburger:after { + background: #fff; +} +.hamburger .hamburger-bar { + margin: .2em 0; +} +.hamburger-close:before { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transform-origin: 8%; + -ms-transform-origin: 8%; + -o-transform-origin: 8%; + transform-origin: 8%; +} +.hamburger-close .hamburger-bar { + opacity: 0; +} +.hamburger-close:after { + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 8%; + -ms-transform-origin: 8%; + -o-transform-origin: 8%; + transform-origin: 8%; +} +.hamburger-close.hided:before, .hamburger-close.collapsed:before { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); +} +.hamburger-close.hided .hamburger-bar, .hamburger-close.collapsed .hamburger-bar { + opacity: 1; +} +.hamburger-close.hided:after, .hamburger-close.collapsed:after { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); +} +.hamburger-arrow-left.collapsed { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.hamburger-arrow-left.collapsed:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); +} +.hamburger-arrow-left.collapsed .hamburger-bar { + border-radius: .2em; +} +.hamburger-arrow-left.collapsed:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); +} +.avatar { + position: relative; + display: inline-block; + width: 40px; + white-space: nowrap; + vertical-align: bottom; + border-radius: 1000px; +} +.avatar i { + position: absolute; + right: 0; + bottom: 0; + width: 10px; + height: 10px; + border: 2px solid #fff; + border-radius: 100%; +} +.avatar img { + width: 100%; + max-width: 100%; + height: auto; + border: 0 none; + border-radius: 1000px; +} +.avatar-online i { + background-color: #46be8a; +} +.avatar-off i { + background-color: #526069; +} +.avatar-busy i { + background-color: #f2a654; +} +.avatar-away i { + background-color: #f96868; +} +.avatar-100 { + width: 100px; +} +.avatar-100 i { + width: 20px; + height: 20px; +} +.avatar-lg { + width: 50px; +} +.avatar-lg i { + width: 12px; + height: 12px; +} +.avatar-sm { + width: 30px; +} +.avatar-sm i { + width: 8px; + height: 8px; +} +.avatar-xs { + width: 20px; +} +.avatar-xs i { + width: 7px; + height: 7px; +} +.box { + font-size: 14px; + text-align: center; +} +.icon { + position: relative; + display: inline-block; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon.pull-left { + margin-right: .3em; +} +.icon.pull-right { + margin-left: .3em; +} +.icon.icon-circle { + position: relative; + margin: .5em; +} +.icon.icon-circle:before { + position: relative; + z-index: 1; +} +.icon.icon-circle:after { + position: absolute; + top: 50%; + left: 50%; + z-index: 0; + width: 2em; + height: 2em; + content: ""; + background-color: inherit; + border-radius: 100%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.icon.icon-lg { + font-size: 1.33333333em; + vertical-align: -15%; +} +.icon.icon-2x { + font-size: 2em; +} +.icon.icon-3x { + font-size: 3em; +} +.icon.icon-4x { + font-size: 4em; +} +.icon.icon-5x { + font-size: 5em; +} +.icon.icon-fw { + width: 1.28571429em; + text-align: center; +} +.icon.icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.icon.icon-ul > li { + position: relative; +} +.icon.icon-li { + position: absolute; + top: .14285714em; + left: -2.14285714em; + width: 2.14285714em; + text-align: center; +} +.icon.icon-li.icon-lg { + left: -1.85714286em; +} +.icon.icon-border { + padding: .2em .25em .15em; + border: solid .08em #e4eaec; + border-radius: .1em; +} +.icon.icon-spin { + -webkit-animation: icon-spin 2s infinite linear; + -o-animation: icon-spin 2s infinite linear; + animation: icon-spin 2s infinite linear; +} +.icon.icon-spin-reverse { + -webkit-animation: icon-spin-reverse 2s infinite linear; + -o-animation: icon-spin-reverse 2s infinite linear; + animation: icon-spin-reverse 2s infinite linear; +} +.icon.icon-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.icon.icon-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.icon.icon-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.icon.icon-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.icon.icon-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.icon.icon-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.icon.icon-stack-1x, .icon.icon-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.icon.icon-stack-1x { + line-height: inherit; +} +.icon.icon-stack-2x { + font-size: 2em; +} +.icon.icon-stack-inverse { + color: #fff; +} +.icon-color { + color: rgba(55, 71, 79, .4); +} +.icon-color:hover, .icon-color:focus { + color: rgba(55, 71, 79, .6); +} +.icon-color.active, .icon-color:active { + color: #37474f; +} +.icon-color-alt { + color: rgba(55, 71, 79, .6); +} +.icon-color-alt:hover, .icon-color-alt:focus { + color: rgba(55, 71, 79, .8); +} +.icon-color-alt.active, .icon-color-alt:active { + color: #37474f; +} +@-webkit-keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + -o-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + -o-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +@-o-keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + -o-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +@keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + -o-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +.height-50 { + height: 50px; +} +.height-100 { + height: 100px; +} +.height-120 { + height: 120px; +} +.height-150 { + height: 150px; +} +.height-200 { + height: 200px; +} +.height-250 { + height: 250px; +} +.height-300 { + height: 300px; +} +.height-350 { + height: 350px; +} +.height-400 { + height: 400px; +} +.height-450 { + height: 450px; +} +.height-500 { + height: 500px; +} +.height-full { + height: 100% !important; +} +@media (max-width: 767px) { + .height-xs-50 { + height: 50px; + } + .height-xs-100 { + height: 100px; + } + .height-xs-120 { + height: 120px; + } + .height-xs-150 { + height: 150px; + } + .height-xs-200 { + height: 200px; + } + .height-xs-250 { + height: 250px; + } + .height-xs-300 { + height: 300px; + } + .height-xs-350 { + height: 350px; + } + .height-xs-400 { + height: 400px; + } + .height-xs-450 { + height: 450px; + } + .height-xs-500 { + height: 500px; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .height-sm-50 { + height: 50px; + } + .height-sm-100 { + height: 100px; + } + .height-sm-120 { + height: 120px; + } + .height-sm-150 { + height: 150px; + } + .height-sm-200 { + height: 200px; + } + .height-sm-250 { + height: 250px; + } + .height-sm-300 { + height: 300px; + } + .height-sm-350 { + height: 350px; + } + .height-sm-400 { + height: 400px; + } + .height-sm-450 { + height: 450px; + } + .height-sm-500 { + height: 500px; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .height-md-50 { + height: 50px; + } + .height-md-100 { + height: 100px; + } + .height-md-120 { + height: 120px; + } + .height-md-150 { + height: 150px; + } + .height-md-200 { + height: 200px; + } + .height-md-250 { + height: 250px; + } + .height-md-300 { + height: 300px; + } + .height-md-350 { + height: 350px; + } + .height-md-400 { + height: 400px; + } + .height-md-450 { + height: 450px; + } + .height-md-500 { + height: 500px; + } +} +@media (min-width: 1200px) { + .height-lg-50 { + height: 50px; + } + .height-lg-100 { + height: 100px; + } + .height-lg-120 { + height: 120px; + } + .height-lg-150 { + height: 150px; + } + .height-lg-200 { + height: 200px; + } + .height-lg-250 { + height: 250px; + } + .height-lg-300 { + height: 300px; + } + .height-lg-350 { + height: 350px; + } + .height-lg-400 { + height: 400px; + } + .height-lg-450 { + height: 450px; + } + .height-lg-500 { + height: 500px; + } +} \ No newline at end of file diff --git a/public/lib/admui/css/site.css b/public/lib/admui/css/site.css new file mode 100644 index 0000000..f50cc69 --- /dev/null +++ b/public/lib/admui/css/site.css @@ -0,0 +1,14063 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 14px; + line-height: 1.6; + color: #76838f; + background-color: #fff; +} +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #62a8ea; + text-decoration: none; +} +a:hover, a:focus { + color: #89bceb; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 4px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.6; + background-color: #fff; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 22px; + margin-bottom: 22px; + border: 0; + border-top: 1px solid #e4eaec; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +input, button, select, textarea { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; +} +a.text-action { + color: #a3afb7; +} +a.text-action, a.text-action:hover, a.text-action:focus { + text-decoration: none; +} +a.text-action:hover, a.text-action:focus { + color: #ccd5db; +} +a.text-action .icon + span { + margin-left: 3px; +} +a.text-like { + color: #a3afb7 !important; +} +a.text-like, a.text-like:hover, a.text-like:focus { + text-decoration: none; +} +a.text-like.active, a.text-like:hover, a.text-like:focus { + color: #f96868 !important; +} +.text-action + .text-action { + margin-left: 6px; +} +.img-bordered { + padding: 3px; + border: 1px solid #e4eaec; +} +.img-bordered-primary { + border-color: #62a8ea !important; +} +.img-bordered-purple { + border-color: #7c51d1 !important; +} +.img-bordered-red { + border-color: #e9595b !important; +} +.img-bordered-green { + border-color: #7dd3ae !important; +} +.img-bordered-orange { + border-color: #ec9940 !important; +} +html { + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +input, textarea, keygen, select, button { + outline: none; + + text-rendering: optimizeLegibility !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-weight: 500; +} +h1 .icon:first-child, h2 .icon:first-child, h3 .icon:first-child, h4 .icon:first-child, h5 .icon:first-child, h6 .icon:first-child, .h1 .icon:first-child, .h2 .icon:first-child, .h3 .icon:first-child, .h4 .icon:first-child, .h5 .icon:first-child, .h6 .icon:first-child { + margin-right: .5em; +} +mark, .mark { + padding: 1px 3px; + color: #fff; + border-radius: 2px; +} +.drop-cap { + float: left; + padding: 5px; + margin-right: 5px; + font-family: Georgia; + font-size: 60px; + line-height: 50px; + color: #263238; +} +.drop-cap-reversed { + color: #fff; + background-color: #263238; +} +.list-icons { + padding-left: 10px; + margin-left: 0; + list-style: none; +} +.list-icons > li { + margin-top: 6px; +} +.list-icons > li:first-child { + margin-top: 0; +} +.list-icons > li i { + float: left; + width: 1em; + margin: 0 6px 0 0; +} +.text-primary { + color: #62a8ea; +} +a.text-primary:hover, a.text-primary:focus { + color: #358fe4; +} +.text-success { + color: #46be8a; +} +a.text-success:hover, a.text-success:focus { + color: #369b6f; +} +.text-info { + color: #57c7d4; +} +a.text-info:hover, a.text-info:focus { + color: #33b6c5; +} +.text-warning { + color: #f2a654; +} +a.text-warning:hover, a.text-warning:focus { + color: #ee8d25; +} +.text-danger { + color: #f96868; +} +a.text-danger:hover, a.text-danger:focus { + color: #f73737; +} +blockquote { + font-size: 14px; + color: #526069; + border-left-width: 4px; +} +blockquote p { + margin-bottom: 0; +} +blockquote footer, blockquote small, blockquote .small { + font-size: 12px; +} +.blockquote-reverse { + border-right-width: 4px; +} +.blockquote { + padding: 10px 15px; + border-left-width: 4px; + border-radius: 3px; +} +.blockquote.blockquote-reverse { + border-right-width: 4px; +} +.blockquote-success { + background-color: rgba(70, 190, 138, .1); + border-color: #46be8a; +} +.blockquote-info { + background-color: rgba(87, 199, 212, .1); + border-color: #57c7d4; +} +.blockquote-warning { + background-color: rgba(242, 166, 84, .1); + border-color: #f2a654; +} +.blockquote-danger { + background-color: rgba(249, 104, 104, .1); + border-color: #f96868; +} +code { + padding: 1px 2px; + border: 1px solid #bcd8f1; +} +pre code { + border: none; +} +.container { + max-width: 100%; +} +@media (min-width: 1600px) { + .container { + width: 1304px; + } +} +@media (min-width: 1600px) { + .col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12 { + float: left; + } + .col-xlg-12 { + width: 100%; + } + .col-xlg-11 { + width: 91.66666667%; + } + .col-xlg-10 { + width: 83.33333333%; + } + .col-xlg-9 { + width: 75%; + } + .col-xlg-8 { + width: 66.66666667%; + } + .col-xlg-7 { + width: 58.33333333%; + } + .col-xlg-6 { + width: 50%; + } + .col-xlg-5 { + width: 41.66666667%; + } + .col-xlg-4 { + width: 33.33333333%; + } + .col-xlg-3 { + width: 25%; + } + .col-xlg-2 { + width: 16.66666667%; + } + .col-xlg-1 { + width: 8.33333333%; + } + .col-xlg-pull-12 { + right: 100%; + } + .col-xlg-pull-11 { + right: 91.66666667%; + } + .col-xlg-pull-10 { + right: 83.33333333%; + } + .col-xlg-pull-9 { + right: 75%; + } + .col-xlg-pull-8 { + right: 66.66666667%; + } + .col-xlg-pull-7 { + right: 58.33333333%; + } + .col-xlg-pull-6 { + right: 50%; + } + .col-xlg-pull-5 { + right: 41.66666667%; + } + .col-xlg-pull-4 { + right: 33.33333333%; + } + .col-xlg-pull-3 { + right: 25%; + } + .col-xlg-pull-2 { + right: 16.66666667%; + } + .col-xlg-pull-1 { + right: 8.33333333%; + } + .col-xlg-pull-0 { + right: auto; + } + .col-xlg-push-12 { + left: 100%; + } + .col-xlg-push-11 { + left: 91.66666667%; + } + .col-xlg-push-10 { + left: 83.33333333%; + } + .col-xlg-push-9 { + left: 75%; + } + .col-xlg-push-8 { + left: 66.66666667%; + } + .col-xlg-push-7 { + left: 58.33333333%; + } + .col-xlg-push-6 { + left: 50%; + } + .col-xlg-push-5 { + left: 41.66666667%; + } + .col-xlg-push-4 { + left: 33.33333333%; + } + .col-xlg-push-3 { + left: 25%; + } + .col-xlg-push-2 { + left: 16.66666667%; + } + .col-xlg-push-1 { + left: 8.33333333%; + } + .col-xlg-push-0 { + left: auto; + } + .col-xlg-offset-12 { + margin-left: 100%; + } + .col-xlg-offset-11 { + margin-left: 91.66666667%; + } + .col-xlg-offset-10 { + margin-left: 83.33333333%; + } + .col-xlg-offset-9 { + margin-left: 75%; + } + .col-xlg-offset-8 { + margin-left: 66.66666667%; + } + .col-xlg-offset-7 { + margin-left: 58.33333333%; + } + .col-xlg-offset-6 { + margin-left: 50%; + } + .col-xlg-offset-5 { + margin-left: 41.66666667%; + } + .col-xlg-offset-4 { + margin-left: 33.33333333%; + } + .col-xlg-offset-3 { + margin-left: 25%; + } + .col-xlg-offset-2 { + margin-left: 16.66666667%; + } + .col-xlg-offset-1 { + margin-left: 8.33333333%; + } + .col-xlg-offset-0 { + margin-left: 0; + } +} +.col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12 { + position: relative; + min-height: 1px; + padding-right: 12px; + padding-left: 12px; +} +.row.no-space { + margin-right: 0; + margin-left: 0; +} +.row.no-space > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} +.row-lg { + margin-right: -24px; + margin-left: -24px; +} +.row-lg > .col-xs-1, .row-lg > .col-sm-1, .row-lg > .col-md-1, .row-lg > .col-lg-1, .row-lg > .col-xlg-1, .row-lg > .col-xs-2, .row-lg > .col-sm-2, .row-lg > .col-md-2, .row-lg > .col-lg-2, .row-lg > .col-xlg-2, .row-lg > .col-xs-3, .row-lg > .col-sm-3, .row-lg > .col-md-3, .row-lg > .col-lg-3, .row-lg > .col-xlg-3, .row-lg > .col-xs-4, .row-lg > .col-sm-4, .row-lg > .col-md-4, .row-lg > .col-lg-4, .row-lg > .col-xlg-4, .row-lg > .col-xs-5, .row-lg > .col-sm-5, .row-lg > .col-md-5, .row-lg > .col-lg-5, .row-lg > .col-xlg-5, .row-lg > .col-xs-6, .row-lg > .col-sm-6, .row-lg > .col-md-6, .row-lg > .col-lg-6, .row-lg > .col-xlg-6, .row-lg > .col-xs-7, .row-lg > .col-sm-7, .row-lg > .col-md-7, .row-lg > .col-lg-7, .row-lg > .col-xlg-7, .row-lg > .col-xs-8, .row-lg > .col-sm-8, .row-lg > .col-md-8, .row-lg > .col-lg-8, .row-lg > .col-xlg-8, .row-lg > .col-xs-9, .row-lg > .col-sm-9, .row-lg > .col-md-9, .row-lg > .col-lg-9, .row-lg > .col-xlg-9, .row-lg > .col-xs-10, .row-lg > .col-sm-10, .row-lg > .col-md-10, .row-lg > .col-lg-10, .row-lg > .col-xlg-10, .row-lg > .col-xs-11, .row-lg > .col-sm-11, .row-lg > .col-md-11, .row-lg > .col-lg-11, .row-lg > .col-xlg-11, .row-lg > .col-xs-12, .row-lg > .col-sm-12, .row-lg > .col-md-12, .row-lg > .col-lg-12, .row-lg > .col-xlg-12 { + padding-right: 24px; + padding-left: 24px; +} +.table { + +} +.table > thead > tr > th, .table > tfoot > tr > th { + font-weight: 500; + vertical-align: middle; +} +.table > thead > tr > th small, .table > tfoot > tr > th small { + font-weight: 300; +} +.table > thead > tr > th { + border-bottom: 1px solid #e4eaec; +} +.table > tbody + tbody { + border-top: 1px solid #e4eaec; +} +.table th > .checkbox-custom:only-child, .table td > .checkbox-custom:only-child { + margin-top: 0; + margin-bottom: 0; + text-align: center; +} +.table .success, .table .warning, .table .danger, .table .info { + color: #fff; +} +.table .success a, .table .warning a, .table .danger a, .table .info a { + color: #fff; +} +.table .disabled { + color: #ccd5db; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.table .disabled a { + color: #ccd5db; +} +.table .cell-30 { + width: 30px; +} +.table .cell-40 { + width: 40px; +} +.table .cell-50 { + width: 50px; +} +.table .cell-60 { + width: 60px; +} +.table .cell-80 { + width: 80px; +} +.table .cell-100 { + width: 100px; +} +.table .cell-120 { + width: 120px; +} +.table .cell-130 { + width: 130px; +} +.table .cell-150 { + width: 150px; +} +.table .cell-180 { + width: 180px; +} +.table .cell-200 { + width: 200px; +} +.table .cell-250 { + width: 250px; +} +.table .cell-300 { + width: 300px; +} +.table-primary thead tr, .table-success thead tr, .table-info thead tr, .table-warning thead tr, .table-danger thead tr, .table-dark thead tr { + color: #fff; +} +.table-default thead tr { + background: #f3f7f9; +} +.table-primary thead tr { + background: #62a8ea; +} +.table-success thead tr { + background: #46be8a; +} +.table-info thead tr { + background: #57c7d4; +} +.table-warning thead tr { + background: #f2a654; +} +.table-danger thead tr { + background: #f96868; +} +.table-dark thead tr { + background: #526069; +} +.table-gray thead tr { + color: #526069; + background: #ccd5db; +} +.table-bordered > thead > tr > th, .table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.table-bordered > thead:first-child > tr:first-child > th { + border: 1px solid #e4eaec; +} +.table-section + tbody { + display: none; +} +.table-section-arrow { + position: relative; + display: inline-block; + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + text-align: center; + -webkit-transition: -webkit-transform .15s; + -o-transition: -o-transform .15s; + transition: -webkit-transform .15s; + transition: transform .15s; + transition: transform .15s, -webkit-transform .15s, -o-transform .15s; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.table-section-arrow:before { + content: "\f181"; +} +.table-section.active tr { + background-color: #f3f7f9; +} +.table-section.active + tbody { + display: table-row-group; +} +.table-section.active .table-section-arrow { + -webkit-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} +.form-control { + -webkit-appearance: none; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + -o-transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear; + transition: border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear; + transition: box-shadow .25s linear, border .25s linear, color .25s linear, background-color .25s linear, -webkit-box-shadow .25s linear; + + -moz-appearance: none; +} +select.form-control { + padding-right: 30px; + background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAFCAYAAABB9hwOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNWZkMzNlMC0zNTcxLTI4NDgtYjA3NC01ZTRhN2RjMWVmNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTUxRUI3MDdEQjk4MTFFNUI1NDA5QTcyNTlFQzRERTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTUxRUI3MDZEQjk4MTFFNUI1NDA5QTcyNTlFQzRERTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZWNiNjQzMjYtNDc1Yi01OTQxLWIxYjItNDVkZjU5YjZlODA2IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6N2RlYzI2YWMtZGI5OC0xMWU1LWIwMjgtY2ZhNDhhOGNjNWY1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+AXTIGgAAAFRJREFUeNpidI1KSWFgYDBlwASngXjOrqWzGcgBTEC8DIjfo4m/h4qTDUAGfwPi+UD8Hyr2H8r/RqnBIHATiPdC2XuhfIoACxJ7PRDzQmmKAUCAAQDxOxHyb4DjOAAAAABJRU5ErkJggg==") no-repeat center right; +} +select[multiple].form-control { + padding-right: 12px; + background: #fff; +} +.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #46be8a; +} +.has-success .form-control { + border-color: #46be8a; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #369b6f; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #91d9ba; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #91d9ba; +} +.has-success .input-group-addon { + color: #46be8a; + background-color: #fff; + border-color: #46be8a; +} +.has-success .form-control-feedback { + color: #46be8a; +} +.has-success .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-success .form-control:focus { + border-color: #46be8a; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 190, 138, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 190, 138, .6); +} +.has-success .form-control.focus, .has-success .form-control:focus { + border-color: #46be8a; + -webkit-box-shadow: none; + box-shadow: none; +} +.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #f2a654; +} +.has-warning .form-control { + border-color: #f2a654; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #ee8d25; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #f9d7b3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #f9d7b3; +} +.has-warning .input-group-addon { + color: #f2a654; + background-color: #fff; + border-color: #f2a654; +} +.has-warning .form-control-feedback { + color: #f2a654; +} +.has-warning .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-warning .form-control:focus { + border-color: #f2a654; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(242, 166, 84, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(242, 166, 84, .6); +} +.has-warning .form-control.focus, .has-warning .form-control:focus { + border-color: #f2a654; + -webkit-box-shadow: none; + box-shadow: none; +} +.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #f96868; +} +.has-error .form-control { + border-color: #f96868; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #f73737; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fdcaca; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fdcaca; +} +.has-error .input-group-addon { + color: #f96868; + background-color: #fff; + border-color: #f96868; +} +.has-error .form-control-feedback { + color: #f96868; +} +.has-error .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.has-error .form-control:focus { + border-color: #f96868; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(249, 104, 104, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(249, 104, 104, .6); +} +.has-error .form-control.focus, .has-error .form-control:focus { + border-color: #f96868; + -webkit-box-shadow: none; + box-shadow: none; +} +.form-group:last-child { + margin-bottom: 0; +} +.form-group.has-feedback.no-label .form-control-feedback { + top: 0; +} +.form-group.has-feedback.left-feedback .form-control-feedback { + right: auto; + left: 0; +} +.form-group.has-feedback.left-feedback .form-control { + padding-right: 13px; + padding-left: 50px; +} +.form-group .required { + color: #d6494b; +} +.form-control.square { + border-radius: 0; +} +.form-control.round { + border-radius: 200px; +} +textarea.form-control.no-resize { + resize: none; +} +.input-group-file input[type="text"] { + background-color: #fff; +} +.input-group-file .btn-file { + position: relative; + overflow: hidden; +} +.input-group-file .btn-file.btn-outline { + border: 1px solid #e4eaec; + border-left: none; +} +.input-group-file .btn-file.btn-outline:hover { + border-left: none; +} +.input-group-file .btn-file > .icon { + margin: 0 3px; +} +.input-group-file .btn-file input[type="file"] { + position: absolute; + top: 0; + left: 0; + display: block; + min-width: 100%; + min-height: 100%; + text-align: left; + cursor: pointer; + opacity: 0; +} +.help-block { + margin-top: 7px; + margin-bottom: 8px; +} +.help-block > .icon { + margin: 0 5px; +} +label { + font-weight: 400; +} +.input-search-close { + color: #000; + text-shadow: none; + filter: alpha(opacity=20); + opacity: .2; +} +.input-search-close.icon { + font-size: inherit; + line-height: inherit; +} +.input-search-close:hover, .input-search-close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + outline: none; + opacity: .5; +} +button.input-search-close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.input-search { + position: relative; +} +.input-search .form-control { + border-radius: 200px; +} +.input-search .input-search-icon, .input-search .input-search-close { + position: absolute; + top: 50%; + z-index: 1; + width: 32px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.input-search .input-search-close { + right: 8px; +} +.input-search .input-search-icon + .form-control { + padding-left: 38px; +} +.input-search .input-search-icon { + left: 8px; + font-size: 16px; + color: #a3afb7; + text-align: center; + pointer-events: none; +} +.input-search-btn + .form-control { + padding-right: 50px; +} +.input-search-btn { + position: absolute; + top: 0; + right: 0; + height: 100%; + padding: 0 10px; + background: transparent; + border: none; + border-radius: 0 200px 200px 0; +} +.input-search-btn > .icon { + margin: 0 3px; +} +.input-search-dark .input-search-icon { + color: #76838f; +} +.input-search-dark .form-control { + background: #f3f7f9; + -webkit-box-shadow: none; + box-shadow: none; +} +.input-search-dark .form-control:focus { + background-color: transparent; +} +.form-inline .form-group { + margin: 0 20px 10px 0; +} +.form-inline .form-group:last-child { + margin: 0 0 10px 0; +} +.form-inline .control-label { + margin-right: 5px; +} +@media (max-width: 767px) { + .form-inline .form-group { + margin-right: 0; + } + .form-inline .form-group:last-child { + margin: 0; + } +} +/*@btn-floating-xs-padding:10px;*/ +/*@btn-floating-sm-padding:3px;*/ +/*@btn-floating-lg-padding:15px;*/ +.btn { + padding: 4px 12px; + font-size: 14px; + line-height: 1.6; + border-radius: 3px; + -webkit-transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; + -o-transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; + transition: border .2s linear, color .2s linear, width .2s linear, background-color .2s linear; +} +.btn:focus, .btn:active:focus, .btn.active:focus { + outline: 0; +} +.btn:active, .btn.active { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .icon { + width: 1em; + margin: 0 3px; + line-height: inherit; + text-align: center; +} +.btn-block { + white-space: normal; +} +.btn-outline.btn-default { + color: #76838f; + background-color: transparent; +} +.btn-outline.btn-default:hover, .btn-outline.btn-default:focus, .btn-outline.btn-default:active, .btn-outline.btn-default.active, .open > .dropdown-toggle.btn-outline.btn-default { + color: #76838f; + background-color: rgba(118, 131, 143, .1); + border-color: #e4eaec; +} +.btn-outline.btn-default:hover .badge, .btn-outline.btn-default:focus .badge, .btn-outline.btn-default:active .badge, .btn-outline.btn-default.active .badge, .open > .dropdown-toggle.btn-outline.btn-default .badge { + color: #76838f; + background-color: #76838f; +} +.btn-outline.btn-primary { + color: #62a8ea; + background-color: transparent; +} +.btn-outline.btn-primary:hover, .btn-outline.btn-primary:focus, .btn-outline.btn-primary:active, .btn-outline.btn-primary.active, .open > .dropdown-toggle.btn-outline.btn-primary { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.btn-outline.btn-primary:hover .badge, .btn-outline.btn-primary:focus .badge, .btn-outline.btn-primary:active .badge, .btn-outline.btn-primary.active .badge, .open > .dropdown-toggle.btn-outline.btn-primary .badge { + color: #62a8ea; + background-color: #fff; +} +.btn-outline.btn-success { + color: #46be8a; + background-color: transparent; +} +.btn-outline.btn-success:hover, .btn-outline.btn-success:focus, .btn-outline.btn-success:active, .btn-outline.btn-success.active, .open > .dropdown-toggle.btn-outline.btn-success { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.btn-outline.btn-success:hover .badge, .btn-outline.btn-success:focus .badge, .btn-outline.btn-success:active .badge, .btn-outline.btn-success.active .badge, .open > .dropdown-toggle.btn-outline.btn-success .badge { + color: #46be8a; + background-color: #fff; +} +.btn-outline.btn-info { + color: #57c7d4; + background-color: transparent; +} +.btn-outline.btn-info:hover, .btn-outline.btn-info:focus, .btn-outline.btn-info:active, .btn-outline.btn-info.active, .open > .dropdown-toggle.btn-outline.btn-info { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.btn-outline.btn-info:hover .badge, .btn-outline.btn-info:focus .badge, .btn-outline.btn-info:active .badge, .btn-outline.btn-info.active .badge, .open > .dropdown-toggle.btn-outline.btn-info .badge { + color: #57c7d4; + background-color: #fff; +} +.btn-outline.btn-warning { + color: #f2a654; + background-color: transparent; +} +.btn-outline.btn-warning:hover, .btn-outline.btn-warning:focus, .btn-outline.btn-warning:active, .btn-outline.btn-warning.active, .open > .dropdown-toggle.btn-outline.btn-warning { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.btn-outline.btn-warning:hover .badge, .btn-outline.btn-warning:focus .badge, .btn-outline.btn-warning:active .badge, .btn-outline.btn-warning.active .badge, .open > .dropdown-toggle.btn-outline.btn-warning .badge { + color: #f2a654; + background-color: #fff; +} +.btn-outline.btn-danger { + color: #f96868; + background-color: transparent; +} +.btn-outline.btn-danger:hover, .btn-outline.btn-danger:focus, .btn-outline.btn-danger:active, .btn-outline.btn-danger.active, .open > .dropdown-toggle.btn-outline.btn-danger { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.btn-outline.btn-danger:hover .badge, .btn-outline.btn-danger:focus .badge, .btn-outline.btn-danger:active .badge, .btn-outline.btn-danger.active .badge, .open > .dropdown-toggle.btn-outline.btn-danger .badge { + color: #f96868; + background-color: #fff; +} +.btn-outline.btn-dark { + color: #526069; + background-color: transparent; +} +.btn-outline.btn-dark:hover, .btn-outline.btn-dark:focus, .btn-outline.btn-dark:active, .btn-outline.btn-dark.active, .open > .dropdown-toggle.btn-outline.btn-dark { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.btn-outline.btn-dark:hover .badge, .btn-outline.btn-dark:focus .badge, .btn-outline.btn-dark:active .badge, .btn-outline.btn-dark.active .badge, .open > .dropdown-toggle.btn-outline.btn-dark .badge { + color: #526069; + background-color: #fff; +} +.btn-outline.btn-inverse { + color: #fff; + background-color: transparent; +} +.btn-outline.btn-inverse:hover, .btn-outline.btn-inverse:focus, .btn-outline.btn-inverse:active, .btn-outline.btn-inverse.active, .open > .dropdown-toggle.btn-outline.btn-inverse { + color: #76838f; + background-color: #fff; + border-color: #fff; +} +.btn-outline.btn-inverse:hover .badge, .btn-outline.btn-inverse:focus .badge, .btn-outline.btn-inverse:active .badge, .btn-outline.btn-inverse.active .badge, .open > .dropdown-toggle.btn-outline.btn-inverse .badge { + color: #fff; + background-color: #76838f; +} +.btn-lg { + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 4px; +} +.btn-sm { + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} +.btn-xs { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} +.btn-squared { + border-radius: 0; +} +.btn-round { + border-radius: 1000px; +} +.btn-default:hover, .btn-default:focus, .btn-default.focus { + background-color: #f3f7f9; + border-color: #f3f7f9; +} +.btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + background-color: #ccd5db; + border-color: #ccd5db; +} +.btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { + background-color: #ccd5db; + border-color: #ccd5db; +} +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + color: #76838f; + background-color: #f3f7f9; + border-color: #f3f7f9; +} +.btn-default.btn-up:before { + border-bottom-color: #e4eaec; +} +.btn-default.btn-up:hover:before, .btn-default.btn-up:focus:before { + border-bottom-color: #f3f7f9; +} +.btn-default.btn-up:active:before, .btn-default.btn-up.active:before, .open > .dropdown-toggle.btn-default.btn-up:before { + border-bottom-color: #ccd5db; +} +.btn-default.btn-right:before { + border-left-color: #e4eaec; +} +.btn-default.btn-right:hover:before, .btn-default.btn-right:focus:before { + border-left-color: #f3f7f9; +} +.btn-default.btn-right:active:before, .btn-default.btn-right.active:before, .open > .dropdown-toggle.btn-default.btn-right:before { + border-left-color: #ccd5db; +} +.btn-default.btn-bottom:before { + border-top-color: #e4eaec; +} +.btn-default.btn-bottom:hover:before, .btn-default.btn-bottom:focus:before { + border-top-color: #f3f7f9; +} +.btn-default.btn-bottom:active:before, .btn-default.btn-bottom.active:before, .open > .dropdown-toggle.btn-default.btn-bottom:before { + border-top-color: #ccd5db; +} +.btn-default.btn-left:before { + border-right-color: #e4eaec; +} +.btn-default.btn-left:hover:before, .btn-default.btn-left:focus:before { + border-right-color: #f3f7f9; +} +.btn-default.btn-left:active:before, .btn-default.btn-left.active:before, .open > .dropdown-toggle.btn-default.btn-left:before { + border-right-color: #ccd5db; +} +.btn-primary:hover, .btn-primary:focus, .btn-primary.focus { + background-color: #89bceb; + border-color: #89bceb; +} +.btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + background-color: #4e97d9; + border-color: #4e97d9; +} +.btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { + background-color: #4e97d9; + border-color: #4e97d9; +} +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + color: #fff; + background-color: #a2caee; + border-color: #a2caee; +} +.btn-primary.btn-up:before { + border-bottom-color: #62a8ea; +} +.btn-primary.btn-up:hover:before, .btn-primary.btn-up:focus:before { + border-bottom-color: #89bceb; +} +.btn-primary.btn-up:active:before, .btn-primary.btn-up.active:before, .open > .dropdown-toggle.btn-primary.btn-up:before { + border-bottom-color: #4e97d9; +} +.btn-primary.btn-right:before { + border-left-color: #62a8ea; +} +.btn-primary.btn-right:hover:before, .btn-primary.btn-right:focus:before { + border-left-color: #89bceb; +} +.btn-primary.btn-right:active:before, .btn-primary.btn-right.active:before, .open > .dropdown-toggle.btn-primary.btn-right:before { + border-left-color: #4e97d9; +} +.btn-primary.btn-bottom:before { + border-top-color: #62a8ea; +} +.btn-primary.btn-bottom:hover:before, .btn-primary.btn-bottom:focus:before { + border-top-color: #89bceb; +} +.btn-primary.btn-bottom:active:before, .btn-primary.btn-bottom.active:before, .open > .dropdown-toggle.btn-primary.btn-bottom:before { + border-top-color: #4e97d9; +} +.btn-primary.btn-left:before { + border-right-color: #62a8ea; +} +.btn-primary.btn-left:hover:before, .btn-primary.btn-left:focus:before { + border-right-color: #89bceb; +} +.btn-primary.btn-left:active:before, .btn-primary.btn-left.active:before, .open > .dropdown-toggle.btn-primary.btn-left:before { + border-right-color: #4e97d9; +} +.btn-success:hover, .btn-success:focus, .btn-success.focus { + background-color: #5cd29d; + border-color: #5cd29d; +} +.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + background-color: #36ab7a; + border-color: #36ab7a; +} +.btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { + background-color: #36ab7a; + border-color: #36ab7a; +} +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + color: #fff; + background-color: #7dd3ae; + border-color: #7dd3ae; +} +.btn-success.btn-up:before { + border-bottom-color: #46be8a; +} +.btn-success.btn-up:hover:before, .btn-success.btn-up:focus:before { + border-bottom-color: #5cd29d; +} +.btn-success.btn-up:active:before, .btn-success.btn-up.active:before, .open > .dropdown-toggle.btn-success.btn-up:before { + border-bottom-color: #36ab7a; +} +.btn-success.btn-right:before { + border-left-color: #46be8a; +} +.btn-success.btn-right:hover:before, .btn-success.btn-right:focus:before { + border-left-color: #5cd29d; +} +.btn-success.btn-right:active:before, .btn-success.btn-right.active:before, .open > .dropdown-toggle.btn-success.btn-right:before { + border-left-color: #36ab7a; +} +.btn-success.btn-bottom:before { + border-top-color: #46be8a; +} +.btn-success.btn-bottom:hover:before, .btn-success.btn-bottom:focus:before { + border-top-color: #5cd29d; +} +.btn-success.btn-bottom:active:before, .btn-success.btn-bottom.active:before, .open > .dropdown-toggle.btn-success.btn-bottom:before { + border-top-color: #36ab7a; +} +.btn-success.btn-left:before { + border-right-color: #46be8a; +} +.btn-success.btn-left:hover:before, .btn-success.btn-left:focus:before { + border-right-color: #5cd29d; +} +.btn-success.btn-left:active:before, .btn-success.btn-left.active:before, .open > .dropdown-toggle.btn-success.btn-left:before { + border-right-color: #36ab7a; +} +.btn-info:hover, .btn-info:focus, .btn-info.focus { + background-color: #77d6e1; + border-color: #77d6e1; +} +.btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + background-color: #47b8c6; + border-color: #47b8c6; +} +.btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { + background-color: #47b8c6; + border-color: #47b8c6; +} +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + color: #fff; + background-color: #9ae1e9; + border-color: #9ae1e9; +} +.btn-info.btn-up:before { + border-bottom-color: #57c7d4; +} +.btn-info.btn-up:hover:before, .btn-info.btn-up:focus:before { + border-bottom-color: #77d6e1; +} +.btn-info.btn-up:active:before, .btn-info.btn-up.active:before, .open > .dropdown-toggle.btn-info.btn-up:before { + border-bottom-color: #47b8c6; +} +.btn-info.btn-right:before { + border-left-color: #57c7d4; +} +.btn-info.btn-right:hover:before, .btn-info.btn-right:focus:before { + border-left-color: #77d6e1; +} +.btn-info.btn-right:active:before, .btn-info.btn-right.active:before, .open > .dropdown-toggle.btn-info.btn-right:before { + border-left-color: #47b8c6; +} +.btn-info.btn-bottom:before { + border-top-color: #57c7d4; +} +.btn-info.btn-bottom:hover:before, .btn-info.btn-bottom:focus:before { + border-top-color: #77d6e1; +} +.btn-info.btn-bottom:active:before, .btn-info.btn-bottom.active:before, .open > .dropdown-toggle.btn-info.btn-bottom:before { + border-top-color: #47b8c6; +} +.btn-info.btn-left:before { + border-right-color: #57c7d4; +} +.btn-info.btn-left:hover:before, .btn-info.btn-left:focus:before { + border-right-color: #77d6e1; +} +.btn-info.btn-left:active:before, .btn-info.btn-left.active:before, .open > .dropdown-toggle.btn-info.btn-left:before { + border-right-color: #47b8c6; +} +.btn-warning:hover, .btn-warning:focus, .btn-warning.focus { + background-color: #f4b066; + border-color: #f4b066; +} +.btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + background-color: #ec9940; + border-color: #ec9940; +} +.btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { + background-color: #ec9940; + border-color: #ec9940; +} +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + color: #fff; + background-color: #f6be80; + border-color: #f6be80; +} +.btn-warning.btn-up:before { + border-bottom-color: #f2a654; +} +.btn-warning.btn-up:hover:before, .btn-warning.btn-up:focus:before { + border-bottom-color: #f4b066; +} +.btn-warning.btn-up:active:before, .btn-warning.btn-up.active:before, .open > .dropdown-toggle.btn-warning.btn-up:before { + border-bottom-color: #ec9940; +} +.btn-warning.btn-right:before { + border-left-color: #f2a654; +} +.btn-warning.btn-right:hover:before, .btn-warning.btn-right:focus:before { + border-left-color: #f4b066; +} +.btn-warning.btn-right:active:before, .btn-warning.btn-right.active:before, .open > .dropdown-toggle.btn-warning.btn-right:before { + border-left-color: #ec9940; +} +.btn-warning.btn-bottom:before { + border-top-color: #f2a654; +} +.btn-warning.btn-bottom:hover:before, .btn-warning.btn-bottom:focus:before { + border-top-color: #f4b066; +} +.btn-warning.btn-bottom:active:before, .btn-warning.btn-bottom.active:before, .open > .dropdown-toggle.btn-warning.btn-bottom:before { + border-top-color: #ec9940; +} +.btn-warning.btn-left:before { + border-right-color: #f2a654; +} +.btn-warning.btn-left:hover:before, .btn-warning.btn-left:focus:before { + border-right-color: #f4b066; +} +.btn-warning.btn-left:active:before, .btn-warning.btn-left.active:before, .open > .dropdown-toggle.btn-warning.btn-left:before { + border-right-color: #ec9940; +} +.btn-danger:hover, .btn-danger:focus, .btn-danger.focus { + background-color: #fa7a7a; + border-color: #fa7a7a; +} +.btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + background-color: #e9595b; + border-color: #e9595b; +} +.btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { + background-color: #e9595b; + border-color: #e9595b; +} +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + color: #fff; + background-color: #fa9898; + border-color: #fa9898; +} +.btn-danger.btn-up:before { + border-bottom-color: #f96868; +} +.btn-danger.btn-up:hover:before, .btn-danger.btn-up:focus:before { + border-bottom-color: #fa7a7a; +} +.btn-danger.btn-up:active:before, .btn-danger.btn-up.active:before, .open > .dropdown-toggle.btn-danger.btn-up:before { + border-bottom-color: #e9595b; +} +.btn-danger.btn-right:before { + border-left-color: #f96868; +} +.btn-danger.btn-right:hover:before, .btn-danger.btn-right:focus:before { + border-left-color: #fa7a7a; +} +.btn-danger.btn-right:active:before, .btn-danger.btn-right.active:before, .open > .dropdown-toggle.btn-danger.btn-right:before { + border-left-color: #e9595b; +} +.btn-danger.btn-bottom:before { + border-top-color: #f96868; +} +.btn-danger.btn-bottom:hover:before, .btn-danger.btn-bottom:focus:before { + border-top-color: #fa7a7a; +} +.btn-danger.btn-bottom:active:before, .btn-danger.btn-bottom.active:before, .open > .dropdown-toggle.btn-danger.btn-bottom:before { + border-top-color: #e9595b; +} +.btn-danger.btn-left:before { + border-right-color: #f96868; +} +.btn-danger.btn-left:hover:before, .btn-danger.btn-left:focus:before { + border-right-color: #fa7a7a; +} +.btn-danger.btn-left:active:before, .btn-danger.btn-left.active:before, .open > .dropdown-toggle.btn-danger.btn-left:before { + border-right-color: #e9595b; +} +.btn-inverse { + color: #76838f; + background-color: #fff; + border-color: #e4eaec; +} +.btn-inverse:focus, .btn-inverse.focus { + color: #76838f; + background-color: #e6e6e6; + border-color: #99b0b7; +} +.btn-inverse:hover { + color: #76838f; + background-color: #e6e6e6; + border-color: #c0ced3; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + color: #76838f; + background-color: #e6e6e6; + border-color: #c0ced3; +} +.btn-inverse:active:hover, .btn-inverse.active:hover, .open > .dropdown-toggle.btn-inverse:hover, .btn-inverse:active:focus, .btn-inverse.active:focus, .open > .dropdown-toggle.btn-inverse:focus, .btn-inverse:active.focus, .btn-inverse.active.focus, .open > .dropdown-toggle.btn-inverse.focus { + color: #76838f; + background-color: #d4d4d4; + border-color: #99b0b7; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled:hover, .btn-inverse[disabled]:hover, fieldset[disabled] .btn-inverse:hover, .btn-inverse.disabled:focus, .btn-inverse[disabled]:focus, fieldset[disabled] .btn-inverse:focus, .btn-inverse.disabled.focus, .btn-inverse[disabled].focus, fieldset[disabled] .btn-inverse.focus { + background-color: #fff; + border-color: #e4eaec; +} +.btn-inverse .badge { + color: #fff; + background-color: #76838f; +} +.btn-inverse:hover, .btn-inverse:focus, .btn-inverse.focus { + background-color: #fff; + border-color: #f3f7f9; +} +.btn-inverse:active, .btn-inverse.active, .open > .dropdown-toggle.btn-inverse { + background-color: #fff; + border-color: #ccd5db; +} +.btn-inverse:active:hover, .btn-inverse.active:hover, .open > .dropdown-toggle.btn-inverse:hover, .btn-inverse:active:focus, .btn-inverse.active:focus, .open > .dropdown-toggle.btn-inverse:focus, .btn-inverse:active.focus, .btn-inverse.active.focus, .open > .dropdown-toggle.btn-inverse.focus { + background-color: #fff; + border-color: #ccd5db; +} +.btn-inverse.disabled, .btn-inverse[disabled], fieldset[disabled] .btn-inverse, .btn-inverse.disabled:hover, .btn-inverse[disabled]:hover, fieldset[disabled] .btn-inverse:hover, .btn-inverse.disabled:focus, .btn-inverse[disabled]:focus, fieldset[disabled] .btn-inverse:focus, .btn-inverse.disabled.focus, .btn-inverse[disabled].focus, fieldset[disabled] .btn-inverse.focus, .btn-inverse.disabled:active, .btn-inverse[disabled]:active, fieldset[disabled] .btn-inverse:active, .btn-inverse.disabled.active, .btn-inverse[disabled].active, fieldset[disabled] .btn-inverse.active { + color: #ccd5db; + background-color: #fff; + border-color: #a3afb7; +} +.btn-inverse.btn-up:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-up:hover:before, .btn-inverse.btn-up:focus:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-up:active:before, .btn-inverse.btn-up.active:before, .open > .dropdown-toggle.btn-inverse.btn-up:before { + border-bottom-color: #fff; +} +.btn-inverse.btn-right:before { + border-left-color: #fff; +} +.btn-inverse.btn-right:hover:before, .btn-inverse.btn-right:focus:before { + border-left-color: #fff; +} +.btn-inverse.btn-right:active:before, .btn-inverse.btn-right.active:before, .open > .dropdown-toggle.btn-inverse.btn-right:before { + border-left-color: #fff; +} +.btn-inverse.btn-bottom:before { + border-top-color: #fff; +} +.btn-inverse.btn-bottom:hover:before, .btn-inverse.btn-bottom:focus:before { + border-top-color: #fff; +} +.btn-inverse.btn-bottom:active:before, .btn-inverse.btn-bottom.active:before, .open > .dropdown-toggle.btn-inverse.btn-bottom:before { + border-top-color: #fff; +} +.btn-inverse.btn-left:before { + border-right-color: #fff; +} +.btn-inverse.btn-left:hover:before, .btn-inverse.btn-left:focus:before { + border-right-color: #fff; +} +.btn-inverse.btn-left:active:before, .btn-inverse.btn-left.active:before, .open > .dropdown-toggle.btn-inverse.btn-left:before { + border-right-color: #fff; +} +.btn-dark { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.btn-dark:focus, .btn-dark.focus { + color: #fff; + background-color: #3c464c; + border-color: #1a1f21; +} +.btn-dark:hover { + color: #fff; + background-color: #3c464c; + border-color: #374147; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + color: #fff; + background-color: #3c464c; + border-color: #374147; +} +.btn-dark:active:hover, .btn-dark.active:hover, .open > .dropdown-toggle.btn-dark:hover, .btn-dark:active:focus, .btn-dark.active:focus, .open > .dropdown-toggle.btn-dark:focus, .btn-dark:active.focus, .btn-dark.active.focus, .open > .dropdown-toggle.btn-dark.focus { + color: #fff; + background-color: #2c3338; + border-color: #1a1f21; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + background-image: none; +} +.btn-dark.disabled:hover, .btn-dark[disabled]:hover, fieldset[disabled] .btn-dark:hover, .btn-dark.disabled:focus, .btn-dark[disabled]:focus, fieldset[disabled] .btn-dark:focus, .btn-dark.disabled.focus, .btn-dark[disabled].focus, fieldset[disabled] .btn-dark.focus { + background-color: #526069; + border-color: #526069; +} +.btn-dark .badge { + color: #526069; + background-color: #fff; +} +.btn-dark:hover, .btn-dark:focus, .btn-dark.focus { + background-color: #76838f; + border-color: #76838f; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + background-color: #37474f; + border-color: #37474f; +} +.btn-dark:active:hover, .btn-dark.active:hover, .open > .dropdown-toggle.btn-dark:hover, .btn-dark:active:focus, .btn-dark.active:focus, .open > .dropdown-toggle.btn-dark:focus, .btn-dark:active.focus, .btn-dark.active.focus, .open > .dropdown-toggle.btn-dark.focus { + background-color: #37474f; + border-color: #37474f; +} +.btn-dark.disabled, .btn-dark[disabled], fieldset[disabled] .btn-dark, .btn-dark.disabled:hover, .btn-dark[disabled]:hover, fieldset[disabled] .btn-dark:hover, .btn-dark.disabled:focus, .btn-dark[disabled]:focus, fieldset[disabled] .btn-dark:focus, .btn-dark.disabled.focus, .btn-dark[disabled].focus, fieldset[disabled] .btn-dark.focus, .btn-dark.disabled:active, .btn-dark[disabled]:active, fieldset[disabled] .btn-dark:active, .btn-dark.disabled.active, .btn-dark[disabled].active, fieldset[disabled] .btn-dark.active { + color: #fff; + background-color: #a3afb7; + border-color: #a3afb7; +} +.btn-dark.btn-up:before { + border-bottom-color: #526069; +} +.btn-dark.btn-up:hover:before, .btn-dark.btn-up:focus:before { + border-bottom-color: #76838f; +} +.btn-dark.btn-up:active:before, .btn-dark.btn-up.active:before, .open > .dropdown-toggle.btn-dark.btn-up:before { + border-bottom-color: #37474f; +} +.btn-dark.btn-right:before { + border-left-color: #526069; +} +.btn-dark.btn-right:hover:before, .btn-dark.btn-right:focus:before { + border-left-color: #76838f; +} +.btn-dark.btn-right:active:before, .btn-dark.btn-right.active:before, .open > .dropdown-toggle.btn-dark.btn-right:before { + border-left-color: #37474f; +} +.btn-dark.btn-bottom:before { + border-top-color: #526069; +} +.btn-dark.btn-bottom:hover:before, .btn-dark.btn-bottom:focus:before { + border-top-color: #76838f; +} +.btn-dark.btn-bottom:active:before, .btn-dark.btn-bottom.active:before, .open > .dropdown-toggle.btn-dark.btn-bottom:before { + border-top-color: #37474f; +} +.btn-dark.btn-left:before { + border-right-color: #526069; +} +.btn-dark.btn-left:hover:before, .btn-dark.btn-left:focus:before { + border-right-color: #76838f; +} +.btn-dark.btn-left:active:before, .btn-dark.btn-left.active:before, .open > .dropdown-toggle.btn-dark.btn-left:before { + border-right-color: #37474f; +} +.btn-dark:hover, .btn-dark:focus { + color: #fff; +} +.btn-dark:active, .btn-dark.active, .open > .dropdown-toggle.btn-dark { + color: #fff; +} +.btn-dark.btn-flat { + color: #526069; +} +.btn-flat { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-flat.disabled { + color: #a3afb7; +} +.btn-icon, .btn.icon { + padding: 10px; + line-height: 1em; +} +.btn-icon.btn-xs, .btn.icon.btn-xs { + padding: 4px; + font-size: 12px; +} +.btn-icon.btn-sm, .btn.icon.btn-sm { + padding: 8px; + font-size: 14px; +} +.btn-icon.btn-lg, .btn.icon.btn-lg { + padding: 12px; + font-size: 20px; +} +.btn-icon.disabled, .btn.icon.disabled { + color: #a3afb7; +} +.btn-icon { + padding: 8px; +} +.btn-icon .icon { + margin: -13px 0 0; +} +.btn-icon.btn-lg { + padding: 7.5px; +} +.btn-icon.btn-sm { + padding: 5px; +} +.btn-icon.btn-xs { + padding: 4px; +} +.btn-raised { + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .18), 0 2px 4px rgba(0, 0, 0, .21); + box-shadow: 0 0 2px rgba(0, 0, 0, .18), 0 2px 4px rgba(0, 0, 0, .21); + -webkit-transition: -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); + -o-transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1); + transition: box-shadow .25s cubic-bezier(.4, 0, .2, 1), -webkit-box-shadow .25s cubic-bezier(.4, 0, .2, 1); +} +.btn-raised:hover, .btn-raised:active, .btn-raised.active, .open > .dropdown-toggle.btn-raised { + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15), 0 3px 6px rgba(0, 0, 0, .2); + box-shadow: 0 0 3px rgba(0, 0, 0, .15), 0 3px 6px rgba(0, 0, 0, .2); +} +.btn-raised.disabled, .btn-raised[disabled], fieldset[disabled] .btn-raised { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-floating { + width: 56px; + height: 56px; + padding: 0; + margin: 0; + font-size: 24px; + text-align: center; + border-radius: 100%; + -webkit-box-shadow: 0 6px 10px rgba(0, 0, 0, .15); + box-shadow: 0 6px 10px rgba(0, 0, 0, .15); +} +.btn-floating.btn-xs { + width: 30px; + height: 30px; + padding: 0; + font-size: 13px; +} +.btn-floating.btn-sm { + width: 40px; + height: 40px; + padding: 0; + font-size: 15px; +} +.btn-floating.btn-lg { + width: 70px; + height: 70px; + padding: 0; + font-size: 30px; +} +.btn-floating i { + position: relative; + top: 0; +} +.btn-animate { + position: relative; + overflow: hidden; +} +.btn-animate span { + display: block; + width: 100%; + height: 100%; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.btn-animate-side { + padding: 4px 28px; +} +.btn-animate-side span { + -webkit-transition: -webkit-transform .2s ease-out 0s; + -o-transition: -o-transform .2s ease-out 0s; + transition: -webkit-transform .2s ease-out 0s; + transition: transform .2s ease-out 0s; + transition: transform .2s ease-out 0s, -webkit-transform .2s ease-out 0s, -o-transform .2s ease-out 0s; +} +.btn-animate-side span > .icon { + position: absolute; + top: 50%; + left: 0; + display: block; + margin-top: -1px; + opacity: 0; + -webkit-transition: opacity .2s ease-out 0s; + -o-transition: opacity .2s ease-out 0s; + transition: opacity .2s ease-out 0s; + -webkit-transform: translate(-20px, -50%); + -ms-transform: translate(-20px, -50%); + -o-transform: translate(-20px, -50%); + transform: translate(-20px, -50%); +} +.btn-animate-side:hover span { + -webkit-transform: translate(10px, 0); + -ms-transform: translate(10px, 0); + -o-transform: translate(10px, 0); + transform: translate(10px, 0); +} +.btn-animate-side:hover span > .icon { + opacity: 1; +} +.btn-animate-side.btn-xs { + padding: 1px 14px; +} +.btn-animate-side.btn-xs span > .icon { + left: 5px; +} +.btn-animate-side.btn-xs:hover span { + -webkit-transform: translate(8px, 0); + -ms-transform: translate(8px, 0); + -o-transform: translate(8px, 0); + transform: translate(8px, 0); +} +.btn-animate-side.btn-sm { + padding: 3px 22px; +} +.btn-animate-side.btn-sm span > .icon { + left: 3px; +} +.btn-animate-side.btn-sm:hover span { + -webkit-transform: translate(8px, 0); + -ms-transform: translate(8px, 0); + -o-transform: translate(8px, 0); + transform: translate(8px, 0); +} +.btn-animate-side.btn-lg { + padding: 6px 33px; +} +.btn-animate-side.btn-lg span > .icon { + left: -6px; +} +.btn-animate-side.btn-lg:hover span { + -webkit-transform: translate(14px, 0); + -ms-transform: translate(14px, 0); + -o-transform: translate(14px, 0); + transform: translate(14px, 0); +} +.btn-animate-vertical span { + -webkit-transition: all .2s ease-out 0s; + -o-transition: all .2s ease-out 0s; + transition: all .2s ease-out 0s; +} +.btn-animate-vertical span > .icon { + position: absolute; + top: -3px; + left: 50%; + display: block; + margin-top: 0; + font-size: 24px; + -webkit-transform: translate(-50%, -100%); + -ms-transform: translate(-50%, -100%); + -o-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); +} +.btn-animate-vertical:hover span { + -webkit-transform: translate(0, 150%); + -ms-transform: translate(0, 150%); + -o-transform: translate(0, 150%); + transform: translate(0, 150%); +} +.btn-animate-vertical.btn-xs span > .icon { + top: -5px; + font-size: 16px; +} +.btn-animate-vertical.btn-sm span > .icon { + top: -3px; + font-size: 20px; +} +.btn-animate-vertical.btn-lg span > .icon { + top: -5px; + font-size: 28px; +} +.btn-labeled { + padding: 0; + padding-right: 8px; +} +.btn-labeled .btn-label { + padding: 4px 8px; + margin-right: 5px; +} +.btn-labeled.btn-xs { + padding-right: 5px; +} +.btn-labeled.btn-xs .btn-label { + padding: 1px 4px; + margin-right: 2px; +} +.btn-labeled.btn-sm { + padding-right: 10px; +} +.btn-labeled.btn-sm .btn-label { + padding: 3px 6px; + margin-right: 7px; +} +.btn-labeled.btn-lg { + padding-right: 14px; +} +.btn-labeled.btn-lg .btn-label { + padding: 6px 14px; + margin-right: 11px; +} +.btn-labeled.btn-block { + text-align: left; +} +.btn-label { + display: inline-block; + background-color: rgba(0, 0, 0, .15); + border-radius: 3px 0 0 3px; +} +.btn-pill-left { + border-radius: 500px 0 0 500px; +} +.btn-pill-right { + border-radius: 0 500px 500px 0; +} +.btn-direction { + position: relative; +} +.btn-direction:before { + position: absolute; + line-height: 0; + content: ""; + border: 6px solid transparent; +} +.btn-up:before { + top: -12px; + left: 50%; + margin-left: -6px; + border-bottom-color: #e4eaec; +} +.btn-right:before { + top: 50%; + right: -12px; + margin-top: -6px; + border-left-color: #e4eaec; +} +.btn-bottom:before { + bottom: -12px; + left: 50%; + margin-left: -6px; + border-top-color: #e4eaec; +} +.btn-left:before { + top: 50%; + left: -12px; + margin-top: -6px; + border-right-color: #e4eaec; +} +.btn-pure, .btn-pure:hover, .btn-pure:focus, .btn-pure:active, .btn-pure.active, .open > .dropdown-toggle.btn-pure, .btn-pure[disabled], fieldset[disabled] .btn-pure { + background-color: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-pure:hover, .btn-pure:hover:hover, .btn-pure:focus:hover, .btn-pure:active:hover, .btn-pure.active:hover, .open > .dropdown-toggle.btn-pure:hover, .btn-pure[disabled]:hover, fieldset[disabled] .btn-pure:hover, .btn-pure:focus, .btn-pure:hover:focus, .btn-pure:focus:focus, .btn-pure:active:focus, .btn-pure.active:focus, .open > .dropdown-toggle.btn-pure:focus, .btn-pure[disabled]:focus, fieldset[disabled] .btn-pure:focus, .btn-pure.focus, .btn-pure:hover.focus, .btn-pure:focus.focus, .btn-pure:active.focus, .btn-pure.active.focus, .open > .dropdown-toggle.btn-pure.focus, .btn-pure[disabled].focus, fieldset[disabled] .btn-pure.focus { + background-color: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-pure.btn-default { + color: #a3afb7; +} +.btn-pure.btn-default:hover, .btn-pure.btn-default:focus, .btn-pure.btn-default:active, .btn-pure.btn-default.active, .open > .dropdown-toggle.btn-pure.btn-default { + color: #526069; +} +.btn-pure.btn-default:hover:hover, .btn-pure.btn-default:focus:hover, .btn-pure.btn-default:active:hover, .btn-pure.btn-default.active:hover, .open > .dropdown-toggle.btn-pure.btn-default:hover, .btn-pure.btn-default:hover:focus, .btn-pure.btn-default:focus:focus, .btn-pure.btn-default:active:focus, .btn-pure.btn-default.active:focus, .open > .dropdown-toggle.btn-pure.btn-default:focus, .btn-pure.btn-default:hover.focus, .btn-pure.btn-default:focus.focus, .btn-pure.btn-default:active.focus, .btn-pure.btn-default.active.focus, .open > .dropdown-toggle.btn-pure.btn-default.focus { + color: #526069; +} +.btn-pure.btn-default:hover .badge, .btn-pure.btn-default:focus .badge, .btn-pure.btn-default:active .badge, .btn-pure.btn-default.active .badge, .open > .dropdown-toggle.btn-pure.btn-default .badge { + color: #526069; +} +.btn-pure.btn-primary { + color: #62a8ea; +} +.btn-pure.btn-primary:hover, .btn-pure.btn-primary:focus, .btn-pure.btn-primary:active, .btn-pure.btn-primary.active, .open > .dropdown-toggle.btn-pure.btn-primary { + color: #3583ca; +} +.btn-pure.btn-primary:hover:hover, .btn-pure.btn-primary:focus:hover, .btn-pure.btn-primary:active:hover, .btn-pure.btn-primary.active:hover, .open > .dropdown-toggle.btn-pure.btn-primary:hover, .btn-pure.btn-primary:hover:focus, .btn-pure.btn-primary:focus:focus, .btn-pure.btn-primary:active:focus, .btn-pure.btn-primary.active:focus, .open > .dropdown-toggle.btn-pure.btn-primary:focus, .btn-pure.btn-primary:hover.focus, .btn-pure.btn-primary:focus.focus, .btn-pure.btn-primary:active.focus, .btn-pure.btn-primary.active.focus, .open > .dropdown-toggle.btn-pure.btn-primary.focus { + color: #3583ca; +} +.btn-pure.btn-primary:hover .badge, .btn-pure.btn-primary:focus .badge, .btn-pure.btn-primary:active .badge, .btn-pure.btn-primary.active .badge, .open > .dropdown-toggle.btn-pure.btn-primary .badge { + color: #3583ca; +} +.btn-pure.btn-success { + color: #46be8a; +} +.btn-pure.btn-success:hover, .btn-pure.btn-success:focus, .btn-pure.btn-success:active, .btn-pure.btn-success.active, .open > .dropdown-toggle.btn-pure.btn-success { + color: #279566; +} +.btn-pure.btn-success:hover:hover, .btn-pure.btn-success:focus:hover, .btn-pure.btn-success:active:hover, .btn-pure.btn-success.active:hover, .open > .dropdown-toggle.btn-pure.btn-success:hover, .btn-pure.btn-success:hover:focus, .btn-pure.btn-success:focus:focus, .btn-pure.btn-success:active:focus, .btn-pure.btn-success.active:focus, .open > .dropdown-toggle.btn-pure.btn-success:focus, .btn-pure.btn-success:hover.focus, .btn-pure.btn-success:focus.focus, .btn-pure.btn-success:active.focus, .btn-pure.btn-success.active.focus, .open > .dropdown-toggle.btn-pure.btn-success.focus { + color: #279566; +} +.btn-pure.btn-success:hover .badge, .btn-pure.btn-success:focus .badge, .btn-pure.btn-success:active .badge, .btn-pure.btn-success.active .badge, .open > .dropdown-toggle.btn-pure.btn-success .badge { + color: #279566; +} +.btn-pure.btn-info { + color: #57c7d4; +} +.btn-pure.btn-info:hover, .btn-pure.btn-info:focus, .btn-pure.btn-info:active, .btn-pure.btn-info.active, .open > .dropdown-toggle.btn-pure.btn-info { + color: #37a9b7; +} +.btn-pure.btn-info:hover:hover, .btn-pure.btn-info:focus:hover, .btn-pure.btn-info:active:hover, .btn-pure.btn-info.active:hover, .open > .dropdown-toggle.btn-pure.btn-info:hover, .btn-pure.btn-info:hover:focus, .btn-pure.btn-info:focus:focus, .btn-pure.btn-info:active:focus, .btn-pure.btn-info.active:focus, .open > .dropdown-toggle.btn-pure.btn-info:focus, .btn-pure.btn-info:hover.focus, .btn-pure.btn-info:focus.focus, .btn-pure.btn-info:active.focus, .btn-pure.btn-info.active.focus, .open > .dropdown-toggle.btn-pure.btn-info.focus { + color: #37a9b7; +} +.btn-pure.btn-info:hover .badge, .btn-pure.btn-info:focus .badge, .btn-pure.btn-info:active .badge, .btn-pure.btn-info.active .badge, .open > .dropdown-toggle.btn-pure.btn-info .badge { + color: #37a9b7; +} +.btn-pure.btn-warning { + color: #f2a654; +} +.btn-pure.btn-warning:hover, .btn-pure.btn-warning:focus, .btn-pure.btn-warning:active, .btn-pure.btn-warning.active, .open > .dropdown-toggle.btn-pure.btn-warning { + color: #e98f2e; +} +.btn-pure.btn-warning:hover:hover, .btn-pure.btn-warning:focus:hover, .btn-pure.btn-warning:active:hover, .btn-pure.btn-warning.active:hover, .open > .dropdown-toggle.btn-pure.btn-warning:hover, .btn-pure.btn-warning:hover:focus, .btn-pure.btn-warning:focus:focus, .btn-pure.btn-warning:active:focus, .btn-pure.btn-warning.active:focus, .open > .dropdown-toggle.btn-pure.btn-warning:focus, .btn-pure.btn-warning:hover.focus, .btn-pure.btn-warning:focus.focus, .btn-pure.btn-warning:active.focus, .btn-pure.btn-warning.active.focus, .open > .dropdown-toggle.btn-pure.btn-warning.focus { + color: #e98f2e; +} +.btn-pure.btn-warning:hover .badge, .btn-pure.btn-warning:focus .badge, .btn-pure.btn-warning:active .badge, .btn-pure.btn-warning.active .badge, .open > .dropdown-toggle.btn-pure.btn-warning .badge { + color: #e98f2e; +} +.btn-pure.btn-danger { + color: #f96868; +} +.btn-pure.btn-danger:hover, .btn-pure.btn-danger:focus, .btn-pure.btn-danger:active, .btn-pure.btn-danger.active, .open > .dropdown-toggle.btn-pure.btn-danger { + color: #d6494b; +} +.btn-pure.btn-danger:hover:hover, .btn-pure.btn-danger:focus:hover, .btn-pure.btn-danger:active:hover, .btn-pure.btn-danger.active:hover, .open > .dropdown-toggle.btn-pure.btn-danger:hover, .btn-pure.btn-danger:hover:focus, .btn-pure.btn-danger:focus:focus, .btn-pure.btn-danger:active:focus, .btn-pure.btn-danger.active:focus, .open > .dropdown-toggle.btn-pure.btn-danger:focus, .btn-pure.btn-danger:hover.focus, .btn-pure.btn-danger:focus.focus, .btn-pure.btn-danger:active.focus, .btn-pure.btn-danger.active.focus, .open > .dropdown-toggle.btn-pure.btn-danger.focus { + color: #d6494b; +} +.btn-pure.btn-danger:hover .badge, .btn-pure.btn-danger:focus .badge, .btn-pure.btn-danger:active .badge, .btn-pure.btn-danger.active .badge, .open > .dropdown-toggle.btn-pure.btn-danger .badge { + color: #d6494b; +} +.btn-pure.btn-dark { + color: #526069; +} +.btn-pure.btn-dark:hover, .btn-pure.btn-dark:focus, .btn-pure.btn-dark:active, .btn-pure.btn-dark.active, .open > .dropdown-toggle.btn-pure.btn-dark { + color: #37474f; +} +.btn-pure.btn-dark:hover:hover, .btn-pure.btn-dark:focus:hover, .btn-pure.btn-dark:active:hover, .btn-pure.btn-dark.active:hover, .open > .dropdown-toggle.btn-pure.btn-dark:hover, .btn-pure.btn-dark:hover:focus, .btn-pure.btn-dark:focus:focus, .btn-pure.btn-dark:active:focus, .btn-pure.btn-dark.active:focus, .open > .dropdown-toggle.btn-pure.btn-dark:focus, .btn-pure.btn-dark:hover.focus, .btn-pure.btn-dark:focus.focus, .btn-pure.btn-dark:active.focus, .btn-pure.btn-dark.active.focus, .open > .dropdown-toggle.btn-pure.btn-dark.focus { + color: #37474f; +} +.btn-pure.btn-dark:hover .badge, .btn-pure.btn-dark:focus .badge, .btn-pure.btn-dark:active .badge, .btn-pure.btn-dark.active .badge, .open > .dropdown-toggle.btn-pure.btn-dark .badge { + color: #37474f; +} +.btn-pure.btn-inverse { + color: #fff; +} +.btn-pure.btn-inverse:hover, .btn-pure.btn-inverse:focus, .btn-pure.btn-inverse:active, .btn-pure.btn-inverse.active, .open > .dropdown-toggle.btn-pure.btn-inverse { + color: #fff; +} +.btn-pure.btn-inverse:hover:hover, .btn-pure.btn-inverse:focus:hover, .btn-pure.btn-inverse:active:hover, .btn-pure.btn-inverse.active:hover, .open > .dropdown-toggle.btn-pure.btn-inverse:hover, .btn-pure.btn-inverse:hover:focus, .btn-pure.btn-inverse:focus:focus, .btn-pure.btn-inverse:active:focus, .btn-pure.btn-inverse.active:focus, .open > .dropdown-toggle.btn-pure.btn-inverse:focus, .btn-pure.btn-inverse:hover.focus, .btn-pure.btn-inverse:focus.focus, .btn-pure.btn-inverse:active.focus, .btn-pure.btn-inverse.active.focus, .open > .dropdown-toggle.btn-pure.btn-inverse.focus { + color: #fff; +} +.btn-pure.btn-inverse:hover .badge, .btn-pure.btn-inverse:focus .badge, .btn-pure.btn-inverse:active .badge, .btn-pure.btn-inverse.active .badge, .open > .dropdown-toggle.btn-pure.btn-inverse .badge { + color: #fff; +} +.caret { + border-top: 4px solid; + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; + -webkit-transform: scale(1.001); + -ms-transform: scale(1.001); + -o-transform: scale(1.001); + transform: scale(1.001); +} +.btn-group .btn + .dropdown-toggle .caret { + margin-left: 0; +} +.dropdown-toggle.btn .caret { + margin-left: .3em; +} +.dropdown-toggle.btn.btn-xs .caret { + margin-left: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: .8em; + padding-left: .8em; +} +.dropdown-menu { + padding: 1px 0; + margin-top: 3px; + border-radius: 0; + -webkit-box-shadow: 0 3px 12px rgba(0, 0, 0, .05); + box-shadow: 0 3px 12px rgba(0, 0, 0, .05); + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.dropdown-menu .divider { + margin: 6px 0; +} +.dropdown-menu > li { + padding: 0 3px; + margin: 2px 0; +} +.dropdown-menu > li > a { + padding: 6px 10px; + -webkit-transition: background-color .25s; + -o-transition: background-color .25s; + transition: background-color .25s; +} +.dropdown-menu li .icon:first-child, .dropdown-menu li > a .icon:first-child { + width: 1em; + margin-right: .5em; + text-align: center; +} +.dropdown-menu.bullet { + margin-top: 12px; +} +.dropdown-menu.bullet:before, .dropdown-menu.bullet:after { + position: absolute; + left: 10px; + display: inline-block; + width: 0; + height: 0; + content: ""; + border: 7px solid transparent; + border-top-width: 0; +} +.dropdown-menu.bullet:before { + top: -7px; + border-bottom-color: #e4eaec; +} +.dropdown-menu.bullet:after { + top: -6px; + border-bottom-color: #fff; +} +.dropdown-menu-right.bullet:before, .dropdown-menu-right.bullet:after { + right: 10px; + left: auto; +} +.dropdown-menu.animate { + overflow: hidden; +} +.dropdown-menu.animate > li { + -webkit-animation-name: slide-left; + -o-animation-name: slide-left; + animation-name: slide-left; + -webkit-animation-duration: .5s; + -o-animation-duration: .5s; + animation-duration: .5s; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.dropdown-menu.animate > li:nth-child(1) { + -webkit-animation-delay: .02s; + -o-animation-delay: .02s; + animation-delay: .02s; +} +.dropdown-menu.animate > li:nth-child(2) { + -webkit-animation-delay: .04s; + -o-animation-delay: .04s; + animation-delay: .04s; +} +.dropdown-menu.animate > li:nth-child(3) { + -webkit-animation-delay: .06s; + -o-animation-delay: .06s; + animation-delay: .06s; +} +.dropdown-menu.animate > li:nth-child(4) { + -webkit-animation-delay: .08s; + -o-animation-delay: .08s; + animation-delay: .08s; +} +.dropdown-menu.animate > li:nth-child(5) { + -webkit-animation-delay: .1s; + -o-animation-delay: .1s; + animation-delay: .1s; +} +.dropdown-menu.animate > li:nth-child(6) { + -webkit-animation-delay: .12s; + -o-animation-delay: .12s; + animation-delay: .12s; +} +.dropdown-menu.animate > li:nth-child(7) { + -webkit-animation-delay: .14s; + -o-animation-delay: .14s; + animation-delay: .14s; +} +.dropdown-menu.animate > li:nth-child(8) { + -webkit-animation-delay: .16s; + -o-animation-delay: .16s; + animation-delay: .16s; +} +.dropdown-menu.animate > li:nth-child(9) { + -webkit-animation-delay: .18s; + -o-animation-delay: .18s; + animation-delay: .18s; +} +.dropdown-menu.animate > li:nth-child(10) { + -webkit-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.dropdown-menu.animate > li.divider { + -webkit-animation-name: none; + -o-animation-name: none; + animation-name: none; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(1) { + -webkit-animation-delay: .02s; + -o-animation-delay: .02s; + animation-delay: .02s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(2) { + -webkit-animation-delay: .04s; + -o-animation-delay: .04s; + animation-delay: .04s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(3) { + -webkit-animation-delay: .06s; + -o-animation-delay: .06s; + animation-delay: .06s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(4) { + -webkit-animation-delay: .08s; + -o-animation-delay: .08s; + animation-delay: .08s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(5) { + -webkit-animation-delay: .1s; + -o-animation-delay: .1s; + animation-delay: .1s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(6) { + -webkit-animation-delay: .12s; + -o-animation-delay: .12s; + animation-delay: .12s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(7) { + -webkit-animation-delay: .14s; + -o-animation-delay: .14s; + animation-delay: .14s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(8) { + -webkit-animation-delay: .16s; + -o-animation-delay: .16s; + animation-delay: .16s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(9) { + -webkit-animation-delay: .18s; + -o-animation-delay: .18s; + animation-delay: .18s; +} +.dropdown-menu.animate.animate-reverse > li:nth-last-child(10) { + -webkit-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + margin-bottom: 6px; + -webkit-box-shadow: 0 -3px 12px rgba(0, 0, 0, .05); + box-shadow: 0 -3px 12px rgba(0, 0, 0, .05); +} +.dropup .dropdown-menu.bullet, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet { + margin-bottom: 12px; +} +.dropup .dropdown-menu.bullet:before, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before, .dropup .dropdown-menu.bullet:after, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after { + top: auto; + border-top-width: 7px; + border-bottom-width: 0; +} +.dropup .dropdown-menu.bullet:before, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before { + bottom: -7px; + border-top-color: #e4eaec; +} +.dropup .dropdown-menu.bullet:after, .navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after { + bottom: -6px; + border-top-color: #fff; +} +.dropdown-menu > .dropdown-header { + padding: 8px 20px 6px; + font-size: 14px; + font-weight: 700; + cursor: default; +} +.dropdown-menu > .dropdown-submenu { + position: relative; +} +.dropdown-menu > .dropdown-submenu > a { + position: relative; +} +.dropdown-menu > .dropdown-submenu > a:after { + position: absolute; + right: 10px; + display: inline-block; + width: 0; + height: 0; + margin-top: 6px; + vertical-align: middle; + content: ""; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px dashed; +} +.dropdown-menu > .dropdown-submenu .dropdown-menu { + left: 100%; + margin: 0; +} +.dropdown-menu > .dropdown-submenu.dropdown-menu-left .dropdown-menu { + left: -100%; +} +.dropdown-menu > .dropdown-submenu:hover .dropdown-menu { + display: block; +} +.dropdown .dropdown-submenu .dropdown-menu { + top: 0; +} +.dropup .dropdown-submenu .dropdown-menu { + bottom: 0; +} +.dropdown-menu-media { + width: 360px; + padding-top: 0; + padding-bottom: 0; +} +.dropdown-menu-media > li { + padding: 0; + margin: 0; +} +.dropdown-menu-media .dropdown-menu-header { + position: relative; + padding: 20px 20px; + background-color: #fff; + border-bottom: 1px solid #e4eaec; +} +.dropdown-menu-media .dropdown-menu-header > h3, .dropdown-menu-media .dropdown-menu-header > h4, .dropdown-menu-media .dropdown-menu-header > h5 { + margin: 0; +} +.dropdown-menu-media .dropdown-menu-header .badge, .dropdown-menu-media .dropdown-menu-header .label { + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.dropdown-menu-media .list-group { + max-height: 270px; + margin: 0; + font-size: 12px; + border-radius: 0; +} +.dropdown-menu-media .list-group-item { + padding: 0 20px; + border: none; + border-radius: 0 !important; +} +.dropdown-menu-media .list-group-item .media { + padding: 15px 0; + border-top: 1px solid #e4eaec; +} +.dropdown-menu-media .list-group-item:first-child .media { + border-top: none; +} +.dropdown-menu-media > .dropdown-menu-footer { + background-color: #f3f7f9; + border-top: 1px solid #e4eaec; +} +.dropdown-menu-media > .dropdown-menu-footer > a { + padding: 15px 20px !important; + color: #a3afb7 !important; +} +.dropdown-menu-media > .dropdown-menu-footer > a:hover { + color: #89bceb !important; + background-color: transparent !important; +} +.dropdown-menu-media > .dropdown-menu-footer > .dropdown-menu-footer-btn { + position: absolute; + right: 0; +} +.dropdown-menu-media > .dropdown-menu-footer > .dropdown-menu-footer-btn:hover { + color: #89bceb !important; + background-color: transparent !important; +} +.dropdown-menu-primary > .active > a, .dropdown-menu-primary > .active > a:hover, .dropdown-menu-primary > .active > a:focus { + color: #fff; + background-color: #62a8ea; +} +.dropdown-menu-success > .active > a, .dropdown-menu-success > .active > a:hover, .dropdown-menu-success > .active > a:focus { + color: #fff; + background-color: #46be8a; +} +.dropdown-menu-info > .active > a, .dropdown-menu-info > .active > a:hover, .dropdown-menu-info > .active > a:focus { + color: #fff; + background-color: #57c7d4; +} +.dropdown-menu-warning > .active > a, .dropdown-menu-warning > .active > a:hover, .dropdown-menu-warning > .active > a:focus { + color: #fff; + background-color: #f2a654; +} +.dropdown-menu-danger > .active > a, .dropdown-menu-danger > .active > a:hover, .dropdown-menu-danger > .active > a:focus { + color: #fff; + background-color: #f96868; +} +.dropdown-menu-dark > .active > a, .dropdown-menu-dark > .active > a:hover, .dropdown-menu-dark > .active > a:focus { + color: #fff; + background-color: #526069; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05); +} +.btn-group:focus .dropdown-toggle { + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.input-group-addon { + -webkit-transition: border .25s linear, color .25s linear, background-color .25s linear; + -o-transition: border .25s linear, color .25s linear, background-color .25s linear; + transition: border .25s linear, color .25s linear, background-color .25s linear; +} +.input-group-btn .btn > .icon { + vertical-align: bottom; +} +.input-group-btn .dropdown-toggle.btn .caret { + margin-left: 2px; +} +.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { + z-index: 1; +} +.nav > li > a { + overflow: hidden; +} +.nav > li > a:focus { + outline: none; +} +.nav > li > a .close { + display: inline-block; + margin-left: 10px; + line-height: .6; +} +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + border-color: transparent; +} +.nav-quick { + padding: 0; + margin-right: 0; + margin-bottom: 22px; + margin-left: 0; + background-color: #fff; + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.nav-quick li { + position: relative; + display: block; + padding: 0; + text-align: center; + list-style: none; +} +.nav-quick a { + display: block; + padding: 16px 0; + color: #76838f; + text-decoration: none; +} +.nav-quick a .icon { + display: block; + margin-bottom: .2em; + font-size: 32px; +} +.nav-quick a:hover { + background-color: #f3f7f9; +} +.nav-quick .label, .nav-quick .badge { + position: absolute; + top: 0; + right: 0; +} +.nav-quick-sm a { + padding: 12px 0; +} +.nav-quick-sm a .icon { + font-size: 24px; +} +.nav-quick-lg a { + padding: 22px 0; +} +.nav-quick-lg a .icon { + font-size: 40px; +} +.nav-quick-bordered { + border-top: 1px solid #e4eaec; + border-left: 1px solid #e4eaec; +} +.nav-quick-bordered li { + border-right: 1px solid #e4eaec; + border-bottom: 1px solid #e4eaec; +} +.nav-pills > li > a { + -webkit-transition: border .2s linear, color .2s linear, background-color .2s linear; + -o-transition: border .2s linear, color .2s linear, background-color .2s linear; + transition: border .2s linear, color .2s linear, background-color .2s linear; +} +.nav-pills-rounded > li > a { + padding-right: 20px; + padding-left: 20px; + margin-right: 5px; + margin-left: 5px; + border-radius: 1000px; +} +.nav-tabs > li > a { + padding: 10px 20px; + line-height: 1.3; + color: #76838f; + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; +} +.nav-tabs > li > a > .icon { + width: 1em; + margin-right: .5em; + line-height: 1; +} +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #fff; + background-color: #62a8ea; + border-color: transparent; + border-bottom-color: #62a8ea; +} +.nav-tabs > li .dropdown-menu { + margin-top: 3px; +} +.nav-tabs.nav-justified > li > a { + border-radius: 4px 4px 0 0; +} +.nav-tabs.nav-justified > li.active > a, .nav-tabs.nav-justified > li.active > a:hover, .nav-tabs.nav-justified > li.active > a:focus { + border-color: transparent; + border-bottom-color: #62a8ea; +} +.nav-tabs.nav-tabs-bottom { + border-top: 1px solid #e4eaec; + border-bottom: none; +} +.nav-tabs.nav-tabs-bottom > li { + margin-top: -1px; + margin-bottom: 0; +} +.nav-tabs.nav-tabs-bottom > li > a { + border-radius: 0 0 4px 4px; +} +.nav-tabs.nav-tabs-bottom > li > a:hover, .nav-tabs.nav-tabs-bottom > li > a:focus { + border-top-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs.nav-tabs-bottom.nav-justified { + border-top: none; +} +.nav-tabs.nav-tabs-bottom.nav-justified > li > a { + border-top-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs.nav-tabs-bottom.nav-justified > li.active > a, .nav-tabs.nav-tabs-bottom.nav-justified > li.active > a:hover, .nav-tabs.nav-tabs-bottom.nav-justified > li.active > a:focus { + border-top: 1px solid #62a8ea; +} +.nav-tabs-reverse > li { + float: right; +} +.nav-tabs-reverse > li > a { + margin-right: 0; + margin-left: 2px; +} +.nav-tabs-solid { + border-bottom-color: #f3f7f9; +} +.nav-tabs-solid > li > a:hover { + border-color: transparent; +} +.nav-tabs-solid > li.active > a, .nav-tabs-solid > li.active > a:hover, .nav-tabs-solid > li.active > a:focus { + color: #76838f; + background-color: #f3f7f9; + border-color: transparent; +} +.nav-tabs-solid ~ .tab-content { + padding: 20px; + background-color: #f3f7f9; +} +.nav-tabs-solid.nav-justified > li > a { + border: none; +} +.nav-tabs-solid.nav-justified > li.active > a, .nav-tabs-solid.nav-justified > li.active > a:hover, .nav-tabs-solid.nav-justified > li.active > a:focus { + border: none; +} +.nav-tabs-solid.nav-tabs-bottom > li.active > a, .nav-tabs-solid.nav-tabs-bottom > li.active > a:hover, .nav-tabs-solid.nav-tabs-bottom > li.active > a:focus { + border: none; +} +.nav-tabs-line > li > a { + padding: 10px 20px; + border-bottom: 2px solid transparent; +} +.nav-tabs-line > li > a:hover, .nav-tabs-line > li > a:focus { + background-color: transparent; +} +.nav-tabs-line > li > a:hover { + border-bottom-color: #ccd5db; +} +.nav-tabs-line > li.active > a, .nav-tabs-line > li.active > a:hover, .nav-tabs-line > li.active > a:focus { + color: #62a8ea; + background-color: transparent; + border-bottom: 2px solid #62a8ea; +} +.nav-tabs-line .open > a, .nav-tabs-line .open > a:hover, .nav-tabs-line .open > a:focus { + border-color: transparent; + border-bottom-color: #ccd5db; +} +.nav-tabs-line.nav-tabs-bottom > li > a { + border-top: 2px solid transparent; + border-bottom: none; +} +.nav-tabs-line.nav-tabs-bottom > li > a:hover { + border-top-color: #ccd5db; + border-bottom-color: transparent; +} +.nav-tabs-line.nav-tabs-bottom > li.active > a, .nav-tabs-line.nav-tabs-bottom > li.active > a:hover, .nav-tabs-line.nav-tabs-bottom > li.active > a:focus { + border-top: 2px solid #62a8ea; + border-bottom: none; +} +.nav-tabs-line.nav-justified > li > a { + border-bottom: 2px solid #e4eaec; +} +.nav-tabs-line.nav-justified > li > a:hover { + border-bottom-color: #ccd5db; +} +.nav-tabs-line.nav-justified > li.active > a, .nav-tabs-line.nav-justified > li.active > a:hover, .nav-tabs-line.nav-justified > li.active > a:focus { + border-color: transparent; + border-bottom: 2px solid #62a8ea; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom { + border-top: none; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li > a { + border-top: 2px solid #e4eaec; + border-bottom: none; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li > a:hover { + border-top-color: #ccd5db; +} +.nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a, .nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a:hover, .nav-tabs-line.nav-justified.nav-tabs-bottom > li.active > a:focus { + border-top-color: #62a8ea; + border-bottom: none; +} +.nav-tabs-vertical:before, .nav-tabs-vertical:after { + display: table; + content: " "; +} +.nav-tabs-vertical:after { + clear: both; +} +.nav-tabs-vertical .nav-tabs { + float: left; + border-right: 1px solid #e4eaec; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs > li { + float: none; + margin-right: -1px; + margin-bottom: 0; +} +.nav-tabs-vertical .nav-tabs > li > a { + padding: 10px 20px; + margin-right: 0; + margin-bottom: 2px; + border-radius: 4px 0 0 4px; +} +.nav-tabs-vertical .nav-tabs > li > a:hover { + border-right-color: #e4eaec; + border-bottom-color: transparent; +} +.nav-tabs-vertical .nav-tabs > li.active > a, .nav-tabs-vertical .nav-tabs > li.active > a:focus, .nav-tabs-vertical .nav-tabs > li.active > a:hover { + border-right-color: #62a8ea; +} +.nav-tabs-vertical .nav-tabs-reverse { + float: right; + border-right: none; + border-left: 1px solid #e4eaec; +} +.nav-tabs-vertical .nav-tabs-reverse > li { + margin-right: 0; + margin-left: -1px; +} +.nav-tabs-vertical .nav-tabs-reverse > li > a { + margin-left: 0; + border-radius: 0 4px 4px 0; +} +.nav-tabs-vertical .nav-tabs-reverse > li > a:hover { + border-right-color: transparent; + border-left-color: #e4eaec; +} +.nav-tabs-vertical .nav-tabs-reverse > li.active > a, .nav-tabs-vertical .nav-tabs-reverse > li.active > a:focus, .nav-tabs-vertical .nav-tabs-reverse > li.active > a:hover { + border-left-color: #62a8ea; +} +.nav-tabs-vertical .nav-tabs-solid { + border-right-color: #f3f7f9; +} +.nav-tabs-vertical .nav-tabs-solid > li > a:hover { + border-color: transparent; +} +.nav-tabs-vertical .nav-tabs-solid > li.active > a, .nav-tabs-vertical .nav-tabs-solid > li.active > a:focus, .nav-tabs-vertical .nav-tabs-solid > li.active > a:hover { + border-color: transparent; +} +.nav-tabs-vertical .nav-tabs-solid + .tab-content { + padding: 20px; +} +.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse { + border-left-color: #f3f7f9; +} +.nav-tabs-vertical .nav-tabs-line > li > a { + border-right: 2px solid transparent; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs-line > li > a:hover { + border-right-color: #ccd5db; +} +.nav-tabs-vertical .nav-tabs-line > li.active > a, .nav-tabs-vertical .nav-tabs-line > li.active > a:hover, .nav-tabs-vertical .nav-tabs-line > li.active > a:focus { + border-right: 2px solid #62a8ea; + border-bottom: none; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li > a { + border-right-width: 1px; + border-left: 2px solid transparent; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li > a:hover { + border-color: transparent; + border-left-color: #ccd5db; +} +.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a, .nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a:hover, .nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse > li.active > a:focus { + border-right: 1px solid transparent; + border-left: 2px solid #62a8ea; +} +.nav-tabs-vertical .tab-content { + overflow: hidden; +} +.nav-tabs-inverse .nav-tabs-solid { + border-bottom-color: #fff; +} +.nav-tabs-inverse .nav-tabs-solid > li.active > a, .nav-tabs-inverse .nav-tabs-solid > li.active > a:hover, .nav-tabs-inverse .nav-tabs-solid > li.active > a:focus { + color: #76838f; + background-color: #fff; +} +.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid { + border-right-color: #fff; +} +.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse { + border-left-color: #fff; +} +.nav-tabs-inverse .tab-content { + background: #fff; +} +.nav-tabs-animate .tab-content { + overflow: hidden; +} +.nav-tabs-lg > li > a { + padding: 12px 20px; + font-size: 18px; + line-height: 1.3333333; +} +.nav-tabs-sm > li > a { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.navbar-toggle { + height: 60px; + padding: 19px 12px; + margin-top: 13px; + margin-top: 0; + margin-bottom: 13px; + margin-bottom: 0; + line-height: 22px; + background: transparent !important; + -webkit-transition: color .25s linear; + -o-transition: color .25s linear; + transition: color .25s linear; +} +.navbar-toggle .icon { + margin-top: -1px; +} +.navbar-toggle:hover { + background: transparent !important; +} +.navbar-toggle-left { + float: left; + margin-right: 0; + margin-left: 12px; +} +.navbar { + border: none; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px rgba(0, 0, 0, .08); +} +.navbar-fixed-top, .navbar-fixed-bottom { + width: 100%; +} +@media (min-width: 768px) { + .hidden-float { + display: block; + } +} +@media (max-width: 767px) { + .hidden-float { + display: none !important; + } +} +.navbar-brand { + padding: 19px 20px; + font-weight: 700; +} +.navbar-brand > .navbar-brand-logo { + display: inline-block; +} +.navbar-brand-logo { + height: 32px; + margin-top: -5px; +} +.navbar-brand-text { + margin-left: 6px; +} +@media (max-width: 767px) { + .navbar-brand-center { + position: absolute; + left: 50%; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + -o-transform: translate(-50%, 0); + transform: translate(-50%, 0); + } +} +@media (min-width: 768px) { + .navbar-mega .container, .navbar-mega .container-fluid { + position: relative; + } +} +.navbar-mega .dropdown-menu { + left: auto; +} +.navbar-mega .dropdown-mega { + position: static; +} +.navbar-mega .mega-content { + padding: 20px 30px; +} +.navbar-mega .mega-menu { + min-width: 150px; + max-width: 100%; +} +.navbar-mega .mega-menu > ul { + padding-left: 0; +} +.navbar-mega .mega-menu .list-icons { + margin-bottom: 6px; +} +.navbar-mega .dropdown.dropdown-fw .dropdown-menu { + right: 5px; + left: 5px; +} +@media (max-width: 767px) { + .navbar-mega .dropdown.dropdown-fw .dropdown-menu { + right: 0; + left: 0; + } +} +.navbar-nav > li > a.navbar-avatar, .navbar-toolbar > li > a.navbar-avatar { + padding-top: 15px; + padding-bottom: 15px; +} +@media (max-width: 767px) { + .navbar-nav > li > a.navbar-avatar { + padding-top: 6px; + padding-bottom: 6px; + } +} +.navbar-avatar .avatar { + width: 30px; +} +.navbar-form .icon { + font-size: 16px; + color: rgba(55, 71, 79, .4); +} +.navbar-form .form-control { + background-color: #f3f7f9; + border: none; + border-radius: 38px; +} +@media (min-width: 768px) { + .navbar-search.collapse { + display: block !important; + height: auto !important; + overflow: visible !important; + visibility: visible !important; + } +} +@media (max-width: 767px) { + .navbar-search { + padding-right: 12px; + padding-left: 12px; + } +} +@media (max-width: 767px) { + .navbar-search .navbar-form { + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } +} +.container > .navbar-search, .container-fluid > .navbar-search { + margin-right: -12px; + margin-left: -12px; +} +@media (min-width: 768px) { + .container > .navbar-search, .container-fluid > .navbar-search { + margin-right: 0; + margin-left: 0; + } +} +.navbar-search-overlap { + position: absolute !important; + top: 0; + right: 0; + left: 0; + background-color: #fff; +} +.navbar-search-overlap .form-group, .navbar-search-overlap .form-control { + display: block !important; + margin: 0; +} +.navbar-search-overlap .form-control { + height: 60px !important; + background-color: transparent !important; + border-radius: 0; +} +.navbar-search-overlap .form-control:focus { + border-color: transparent; +} +.navbar-collapse-toolbar.in { + overflow-y: visible; +} +.navbar-toolbar { + float: left; +} +.navbar-toolbar:before, .navbar-toolbar:after { + display: table; + content: " "; +} +.navbar-toolbar:after { + clear: both; +} +.navbar-toolbar > li { + float: left; +} +.navbar-toolbar > li:before, .navbar-toolbar > li:after { + display: table; + content: " "; +} +.navbar-toolbar > li:after { + clear: both; +} +.navbar-toolbar > li > a { + padding-top: 19px; + padding-bottom: 19px; + line-height: 22px; +} +.navbar-toolbar .dropdown-menu { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -o-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-animation-duration: .3s; + -o-animation-duration: .3s; + animation-duration: .3s; +} +@media (max-width: 767px) { + .navbar-toolbar .dropdown-menu:not(.dropdown-menu-media) { + max-height: 400px; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .navbar-toolbar .open { + position: static; + } + .navbar-toolbar .open .dropdown-menu { + right: 0; + left: 0; + float: none; + width: auto; + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + } +} +@media (max-width: 767px) and (max-device-width: 480px) and (orientation: landscape) { + .navbar-toolbar .dropdown-menu:not(.dropdown-menu-media) { + max-height: 200px; + } +} +@media (max-width: 767px) { + .navbar-toolbar-left { + float: left !important; + } + .navbar-toolbar-right { + float: right !important; + } +} +.icon-fullscreen { + font-family: "Web Icons"; +} +.icon-fullscreen:before { + content: "\f11d"; +} +.icon-fullscreen.active:before { + content: "\f11e"; +} +.icon-menubar { + font-family: "Web Icons"; +} +.icon-menubar:before { + content: "\f119"; +} +.icon-menubar.active:before { + content: "\f119"; +} +.navbar-default .navbar-toolbar > li > a { + color: #76838f; +} +.navbar-default .navbar-toolbar > li > a:hover, .navbar-default .navbar-toolbar > li > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .3); +} +.navbar-default .navbar-toolbar > .active > a, .navbar-default .navbar-toolbar > .active > a:hover, .navbar-default .navbar-toolbar > .active > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); +} +.navbar-default .navbar-toolbar > .disabled > a, .navbar-default .navbar-toolbar > .disabled > a:hover, .navbar-default .navbar-toolbar > .disabled > a:focus { + color: #ccd5db; + background-color: transparent; +} +.navbar-default .navbar-toggle { + color: #76838f; +} +.navbar-default .navbar-toolbar > .open > a, .navbar-default .navbar-toolbar > .open > a:hover, .navbar-default .navbar-toolbar > .open > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); +} +.navbar-inverse .navbar-toolbar > li > a { + color: #fff; +} +.navbar-inverse .navbar-toolbar > li > a:hover, .navbar-inverse .navbar-toolbar > li > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.navbar-inverse .navbar-toolbar > .active > a, .navbar-inverse .navbar-toolbar > .active > a:hover, .navbar-inverse .navbar-toolbar > .active > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.navbar-inverse .navbar-toolbar > .disabled > a, .navbar-inverse .navbar-toolbar > .disabled > a:hover, .navbar-inverse .navbar-toolbar > .disabled > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + color: #fff; +} +.navbar-inverse .navbar-toolbar > .open > a, .navbar-inverse .navbar-toolbar > .open > a:hover, .navbar-inverse .navbar-toolbar > .open > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); +} +.breadcrumb { + margin-bottom: 10px; +} +.breadcrumb li + li:before { + padding: 0 5px; +} +.breadcrumb li .icon { + text-decoration: none; +} +.breadcrumb li .icon:before { + margin-right: 10px; +} +.breadcrumb-arrow > li + li:before { + content: "\00bb\00a0"; +} +.pagination { + margin: 0; +} +.pagination li > a, .pagination li > span { + padding: 4px 10px; + -webkit-transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; + -o-transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; + transition: background .2s ease-out, border-color 0s ease-out, color .2s ease-out; +} +.pagination li > a:hover, .pagination li > span:hover, .pagination li > a:focus, .pagination li > span:focus { + -webkit-transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; + -o-transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; + transition: background .2s ease-out, border-color .2s ease-out, color .2s ease-out; +} +.pagination li .icon { + margin-top: -1px; +} +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #ccd5db; + cursor: not-allowed; + background-color: transparent; + border-color: #e4eaec; +} +.pagination-gap > li > a { + margin: 0 3px; + border-radius: 3px; +} +.pagination-gap > li > a:hover { + background-color: transparent; + border-color: #62a8ea; +} +.pagination-gap > li:first-child > a, .pagination-gap > li:last-child > a { + border-radius: 3px; +} +.pagination-no-border > li > a { + border: none; +} +.pagination-lg > li > a, .pagination-lg > li > span { + padding: 6px 14px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination-sm > li > a, .pagination-sm > li > span { + padding: 3px 8px; + font-size: 14px; + line-height: 1.3; +} +.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +.pager li > a, .pager li > span { + padding: 4px 15px; + color: #76838f; + -webkit-transition: all .2s ease; + -o-transition: all .2s ease; + transition: all .2s ease; +} +.pager li > a:hover, .pager li > a:focus { + color: #62a8ea; +} +.pager li .icon { + margin-top: -1px; +} +.pager li > a:hover, .pager li > a:focus { + border-color: #62a8ea; +} +.pager li:first-child { + margin-right: 5px; +} +.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { + border-color: #e4eaec; +} +.pager-round li > a, .pager-round li > span { + border-radius: 1000px; +} +.label { + padding: .25em .6em .25em; + font-weight: 400; + border-radius: .3em; +} +.label.label-outline { + color: #f3f7f9; + background-color: transparent; + border-color: #f3f7f9; +} +.label-outline { + border: 1px solid transparent; +} +.label-round { + border-radius: 1em; +} +.label-default { + color: #76838f; + background-color: #e4eaec; +} +.label-default[href]:hover, .label-default[href]:focus { + background-color: #f3f7f9; +} +.label-default.label-outline { + color: #e4eaec; + background-color: transparent; + border-color: #e4eaec; +} +.label-default[href]:hover, .label-default[href]:focus { + color: #a3afb7; +} +.label-default.label-outline { + color: #76838f; +} +.label-primary { + background-color: #62a8ea; +} +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #89bceb; +} +.label-primary.label-outline { + color: #62a8ea; + background-color: transparent; + border-color: #62a8ea; +} +.label-success { + background-color: #46be8a; +} +.label-success[href]:hover, .label-success[href]:focus { + background-color: #5cd29d; +} +.label-success.label-outline { + color: #46be8a; + background-color: transparent; + border-color: #46be8a; +} +.label-info { + background-color: #57c7d4; +} +.label-info[href]:hover, .label-info[href]:focus { + background-color: #77d6e1; +} +.label-info.label-outline { + color: #57c7d4; + background-color: transparent; + border-color: #57c7d4; +} +.label-warning { + background-color: #f2a654; +} +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #f4b066; +} +.label-warning.label-outline { + color: #f2a654; + background-color: transparent; + border-color: #f2a654; +} +.label-danger { + background-color: #f96868; +} +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #fa7a7a; +} +.label-danger.label-outline { + color: #f96868; + background-color: transparent; + border-color: #f96868; +} +.label-dark { + background-color: #526069; +} +.label-dark[href]:hover, .label-dark[href]:focus { + background-color: #76838f; +} +.label-dark.label-outline { + color: #526069; + background-color: transparent; + border-color: #526069; +} +.label-lg { + font-size: 16px; +} +.label-sm { + padding: .1em .5em .1em; + font-size: 10px; +} +.badge { + padding: 2px 6px; +} +.btn .badge { + top: 0; +} +.badge.up { + position: relative; + top: -10px; + margin: 0 -.8em; + border-radius: 15px; +} +.badge.badge-absolute { + position: absolute; + top: -8px; + right: -10px; + z-index: 5; +} +.badge-radius { + border-radius: 3px; +} +.badge-primary { + color: #fff; + background-color: #62a8ea; +} +.badge-primary[href]:hover, .badge-primary[href]:focus { + color: #fff; + background-color: #358fe4; +} +.list-group-item.active > .badge-primary, .nav-pills > .active > a > .badge-primary { + color: #fff; + background-color: #62a8ea; +} +.badge-success { + color: #fff; + background-color: #46be8a; +} +.badge-success[href]:hover, .badge-success[href]:focus { + color: #fff; + background-color: #369b6f; +} +.list-group-item.active > .badge-success, .nav-pills > .active > a > .badge-success { + color: #fff; + background-color: #46be8a; +} +.badge-info { + color: #fff; + background-color: #57c7d4; +} +.badge-info[href]:hover, .badge-info[href]:focus { + color: #fff; + background-color: #33b6c5; +} +.list-group-item.active > .badge-info, .nav-pills > .active > a > .badge-info { + color: #fff; + background-color: #57c7d4; +} +.badge-warning { + color: #fff; + background-color: #f2a654; +} +.badge-warning[href]:hover, .badge-warning[href]:focus { + color: #fff; + background-color: #ee8d25; +} +.list-group-item.active > .badge-warning, .nav-pills > .active > a > .badge-warning { + color: #fff; + background-color: #f2a654; +} +.badge-danger { + color: #fff; + background-color: #f96868; +} +.badge-danger[href]:hover, .badge-danger[href]:focus { + color: #fff; + background-color: #f73737; +} +.list-group-item.active > .badge-danger, .nav-pills > .active > a > .badge-danger { + color: #fff; + background-color: #f96868; +} +.badge-dark { + color: #fff; + background-color: #526069; +} +.badge-dark[href]:hover, .badge-dark[href]:focus { + color: #fff; + background-color: #3c464c; +} +.list-group-item.active > .badge-dark, .nav-pills > .active > a > .badge-dark { + color: #fff; + background-color: #526069; +} +.badge-lg { + padding: 5px 9px; + font-size: 16px; +} +.badge-sm { + padding: 2px 5px; + font-size: 10px; +} +.jumbotron { + padding: 0; + border-radius: 3px; +} +.jumbotron > .jumbotron-photo img { + width: 100%; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.jumbotron-contents { + padding: 20px; +} +.jumbotron .carousel, .jumbotron .carousel-inner, .jumbotron .carousel-inner > .item.active img { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.jumbotron .carousel-inner > .item > a > img, .jumbotron .carousel-inner > .item > img { + width: 100%; +} +.jumbotron h1, .jumbotron .h1 { + font-size: 28px; +} +.jumbotron h2, .jumbotron .h2 { + font-size: 24px; +} +@media screen and (min-width: 768px) { + .jumbotron, .container .jumbotron { + padding: 0; + } + .jumbotron h1, .jumbotron .h1 { + font-size: 28px; + } +} +.thumbnail { + padding: 0; + border: none; + -webkit-transition: all .25s ease-in-out; + -o-transition: all .25s ease-in-out; + transition: all .25s ease-in-out; +} +.thumbnail .caption { + position: relative; + display: block; + padding-right: 0; + padding-left: 0; +} +.alert { + padding-right: 10px; + padding-left: 10px; +} +.alert ul { + padding-left: 17px; +} +.alert ul li { + padding-left: 0; +} +.panel > .alert { + margin: 0; +} +.alert h1, .alert h2, .alert h3, .alert h4, .alert h5, .alert h6 { + margin-bottom: 5px; +} +.alert p:last-child { + margin-bottom: 0; +} +.alert-alt { + color: #76838f; + background-color: rgba(243, 247, 249, .8); + border: none; + border-left: 3px solid transparent; +} +.alert-alt a, .alert-alt .alert-link { + text-decoration: none; +} +.alert-dismissible { + padding-right: 30px; +} +.alert-dismissible .close { + top: -2px; + text-decoration: none; + opacity: .6; +} +.alert-dismissible .close:hover, .alert-dismissible .close:focus { + opacity: 1; +} +.alert-dismissible.alert-alt .close { + color: #a3afb7; + opacity: .6; +} +.alert-dismissible.alert-alt .close:hover, .alert-dismissible.alert-alt .close:focus { + color: #a3afb7; + opacity: 1; +} +.alert-icon { + position: relative; + padding-left: 40px; +} +.alert-icon > .icon { + position: absolute; + top: 13px; + left: 10px; + width: 1em; + font-size: 16px; + text-align: center; +} +.alert-avatar { + position: relative; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 70px; +} +.alert-avatar > .avatar { + position: absolute; + top: 12px; + left: 15px; +} +.page-alert .alert-wrap { + max-height: 0; + padding: 0; + margin: 0; + overflow: hidden; + -webkit-transition: max-height .7s linear 0s; + -o-transition: max-height .7s linear 0s; + transition: max-height .7s linear 0s; +} +.page-alert .alert-wrap.in { + max-height: 500px; + -webkit-transition: max-height 1s linear 0s; + -o-transition: max-height 1s linear 0s; + transition: max-height 1s linear 0s; +} +.page-alert .alert-wrap .alert { + margin: 0; + text-align: left; + border-radius: 0; +} +.alert-primary { + color: #62a8ea; + background-color: rgba(232, 241, 248, .8); + border-color: #e8f1f8; +} +.alert-primary hr { + border-top-color: #d4e5f2; +} +.alert-primary .alert-link { + color: #358fe4; +} +.alert-primary .close { + color: #62a8ea; +} +.alert-primary .close:hover, .alert-primary .close:focus { + color: #62a8ea; +} +.alert-primary .alert-link { + color: #4e97d9; +} +.alert-alt.alert-primary { + border-color: #62a8ea; +} +.alert-alt.alert-primary a, .alert-alt.alert-primary .alert-link { + color: #62a8ea; +} +.alert-success .alert-link { + color: #36ab7a; +} +.alert-alt.alert-success { + border-color: #46be8a; +} +.alert-alt.alert-success a, .alert-alt.alert-success .alert-link { + color: #46be8a; +} +.alert-info .alert-link { + color: #47b8c6; +} +.alert-alt.alert-info { + border-color: #57c7d4; +} +.alert-alt.alert-info a, .alert-alt.alert-info .alert-link { + color: #57c7d4; +} +.alert-warning .alert-link { + color: #ec9940; +} +.alert-alt.alert-warning { + border-color: #f2a654; +} +.alert-alt.alert-warning a, .alert-alt.alert-warning .alert-link { + color: #f2a654; +} +.alert-danger .alert-link { + color: #e9595b; +} +.alert-alt.alert-danger { + border-color: #f96868; +} +.alert-alt.alert-danger a, .alert-alt.alert-danger .alert-link { + color: #f96868; +} +.alert-social { + position: relative; + padding-left: 65px; +} +.alert-social > .icon { + position: absolute; + top: 17px; + bottom: 0; + left: 15px; + width: 1em; + font-size: 30px; + text-align: center; +} +.alert-wechat { + color: #fff; + background-color: #51c332; + border-color: #51c332; +} +.alert-wechat hr { + border-top-color: #49af2d; +} +.alert-wechat .alert-link { + color: #e6e6e6; +} +.alert-wechat .close { + color: #fff; +} +.alert-wechat .close:hover, .alert-wechat .close:focus { + color: #fff; +} +.alert-wechat .alert-link { + font-weight: 700; + color: #fff; +} +.alert-qq { + color: #fff; + background-color: #12b7f5; + border-color: #12b7f5; +} +.alert-qq hr { + border-top-color: #0aa8e4; +} +.alert-qq .alert-link { + color: #e6e6e6; +} +.alert-qq .close { + color: #fff; +} +.alert-qq .close:hover, .alert-qq .close:focus { + color: #fff; +} +.alert-qq .alert-link { + font-weight: 700; + color: #fff; +} +.alert-weibo { + color: #fff; + background-color: #e6624b; + border-color: #e6624b; +} +.alert-weibo hr { + border-top-color: #e34e35; +} +.alert-weibo .alert-link { + color: #e6e6e6; +} +.alert-weibo .close { + color: #fff; +} +.alert-weibo .close:hover, .alert-weibo .close:focus { + color: #fff; +} +.alert-weibo .alert-link { + font-weight: 700; + color: #fff; +} +.alert-facebook { + color: #fff; + background-color: #3b5998; + border-color: #3b5998; +} +.alert-facebook hr { + border-top-color: #344e86; +} +.alert-facebook .alert-link { + color: #e6e6e6; +} +.alert-facebook .close { + color: #fff; +} +.alert-facebook .close:hover, .alert-facebook .close:focus { + color: #fff; +} +.alert-facebook .alert-link { + font-weight: 700; + color: #fff; +} +.alert-twitter { + color: #fff; + background-color: #55acee; + border-color: #55acee; +} +.alert-twitter hr { + border-top-color: #3ea1ec; +} +.alert-twitter .alert-link { + color: #e6e6e6; +} +.alert-twitter .close { + color: #fff; +} +.alert-twitter .close:hover, .alert-twitter .close:focus { + color: #fff; +} +.alert-twitter .alert-link { + font-weight: 700; + color: #fff; +} +.alert-google-plus { + color: #fff; + background-color: #dd4b39; + border-color: #dd4b39; +} +.alert-google-plus hr { + border-top-color: #d73925; +} +.alert-google-plus .alert-link { + color: #e6e6e6; +} +.alert-google-plus .close { + color: #fff; +} +.alert-google-plus .close:hover, .alert-google-plus .close:focus { + color: #fff; +} +.alert-google-plus .alert-link { + font-weight: 700; + color: #fff; +} +.alert-linkedin { + color: #fff; + background-color: #0976b4; + border-color: #0976b4; +} +.alert-linkedin hr { + border-top-color: #08669c; +} +.alert-linkedin .alert-link { + color: #e6e6e6; +} +.alert-linkedin .close { + color: #fff; +} +.alert-linkedin .close:hover, .alert-linkedin .close:focus { + color: #fff; +} +.alert-linkedin .alert-link { + font-weight: 700; + color: #fff; +} +.alert-flickr { + color: #fff; + background-color: #ff0084; + border-color: #ff0084; +} +.alert-flickr hr { + border-top-color: #e60077; +} +.alert-flickr .alert-link { + color: #e6e6e6; +} +.alert-flickr .close { + color: #fff; +} +.alert-flickr .close:hover, .alert-flickr .close:focus { + color: #fff; +} +.alert-flickr .alert-link { + font-weight: 700; + color: #fff; +} +.alert-tumblr { + color: #fff; + background-color: #35465c; + border-color: #35465c; +} +.alert-tumblr hr { + border-top-color: #2c3a4c; +} +.alert-tumblr .alert-link { + color: #e6e6e6; +} +.alert-tumblr .close { + color: #fff; +} +.alert-tumblr .close:hover, .alert-tumblr .close:focus { + color: #fff; +} +.alert-tumblr .alert-link { + font-weight: 700; + color: #fff; +} +.alert-github { + color: #fff; + background-color: #4183c4; + border-color: #4183c4; +} +.alert-github hr { + border-top-color: #3876b4; +} +.alert-github .alert-link { + color: #e6e6e6; +} +.alert-github .close { + color: #fff; +} +.alert-github .close:hover, .alert-github .close:focus { + color: #fff; +} +.alert-github .alert-link { + font-weight: 700; + color: #fff; +} +.alert-dribbble { + color: #fff; + background-color: #c32361; + border-color: #c32361; +} +.alert-dribbble hr { + border-top-color: #ad1f56; +} +.alert-dribbble .alert-link { + color: #e6e6e6; +} +.alert-dribbble .close { + color: #fff; +} +.alert-dribbble .close:hover, .alert-dribbble .close:focus { + color: #fff; +} +.alert-dribbble .alert-link { + font-weight: 700; + color: #fff; +} +.alert-youtube { + color: #fff; + background-color: #b31217; + border-color: #b31217; +} +.alert-youtube hr { + border-top-color: #9c1014; +} +.alert-youtube .alert-link { + color: #e6e6e6; +} +.alert-youtube .close { + color: #fff; +} +.alert-youtube .close:hover, .alert-youtube .close:focus { + color: #fff; +} +.alert-youtube .alert-link { + font-weight: 700; + color: #fff; +} +.alert.dark .alert-link { + font-weight: 700; + color: #fff !important; +} +.alert.dark .alert-left-border { + border: none; + border-left: 3px solid transparent; +} +.alert.dark.alert-dismissible.alert-alt .close { + color: #fff; +} +.alert.dark.alert-dismissible.alert-alt .close:hover, .alert.dark.alert-dismissible.alert-alt .close:focus { + color: #fff; +} +.alert.dark.alert-primary { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.alert.dark.alert-primary hr { + border-top-color: #4c9ce7; +} +.alert.dark.alert-primary .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-primary .close { + color: #fff; +} +.alert.dark.alert-primary .close:hover, .alert.dark.alert-primary .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-primary { + border-color: #2771b4; +} +.alert-alt.alert.dark.alert-primary a, .alert-alt.alert.dark.alert-primary .alert-link { + color: #fff; +} +.alert.dark.alert-success { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.alert.dark.alert-success hr { + border-top-color: #3dae7d; +} +.alert.dark.alert-success .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-success .close { + color: #fff; +} +.alert.dark.alert-success .close:hover, .alert.dark.alert-success .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-success { + border-color: #247151; +} +.alert-alt.alert.dark.alert-success a, .alert-alt.alert.dark.alert-success .alert-link { + color: #fff; +} +.alert.dark.alert-info { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.alert.dark.alert-info hr { + border-top-color: #43c0cf; +} +.alert.dark.alert-info .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-info .close { + color: #fff; +} +.alert.dark.alert-info .close:hover, .alert.dark.alert-info .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-info { + border-color: #2e8893; +} +.alert-alt.alert.dark.alert-info a, .alert-alt.alert.dark.alert-info .alert-link { + color: #fff; +} +.alert.dark.alert-warning { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.alert.dark.alert-warning hr { + border-top-color: #f09a3c; +} +.alert.dark.alert-warning .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-warning .close { + color: #fff; +} +.alert.dark.alert-warning .close:hover, .alert.dark.alert-warning .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-warning { + border-color: #cb7314; +} +.alert-alt.alert.dark.alert-warning a, .alert-alt.alert.dark.alert-warning .alert-link { + color: #fff; +} +.alert.dark.alert-danger { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.alert.dark.alert-danger hr { + border-top-color: #f84f4f; +} +.alert.dark.alert-danger .alert-link { + color: #e6e6e6; +} +.alert.dark.alert-danger .close { + color: #fff; +} +.alert.dark.alert-danger .close:hover, .alert.dark.alert-danger .close:focus { + color: #fff; +} +.alert-alt.alert.dark.alert-danger { + border-color: #d91d1f; +} +.alert-alt.alert.dark.alert-danger a, .alert-alt.alert.dark.alert-danger .alert-link { + color: #fff; +} +.progress { + height: 12px; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar { + line-height: 12px; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-square { + border-radius: 0; +} +.progress-circle { + border-radius: 1000px; +} +.progress-vertical { + position: relative; + display: inline-block; + width: 12px; + height: 250px; + min-height: 250px; + margin-right: 30px; + margin-bottom: 0; +} +.progress-vertical .progress-bar { + width: 100%; +} +.progress-vertical .progress-label { + display: block; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.progress-bar-indicating.active { + position: relative; + -webkit-animation: none; + -o-animation: none; + animation: none; +} +.progress-bar-indicating.active:before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + content: ""; + background-color: #fff; + border-radius: inherit; + opacity: 0; + -webkit-animation: progress-active 3s ease 0s infinite; + -o-animation: progress-active 3s ease 0s infinite; + animation: progress-active 3s ease 0s infinite; +} +.progress-vertical .progress-bar-indicating.active:before { + -webkit-animation-name: progress-vertical-active; + -o-animation-name: progress-vertical-active; + animation-name: progress-vertical-active; +} +.progress-skill { + position: relative; +} +.progress-skill .progress-bar > span { + position: absolute; + top: 0; + right: 10px; + color: #526069; +} +.progress-lg { + height: 22px; +} +.progress-lg.progress-vertical { + width: 16px; +} +.progress-lg .progress-bar { + line-height: 22px; +} +.progress-sm { + height: 8px; +} +.progress-sm.progress-vertical { + width: 8px; +} +.progress-sm .progress-bar { + line-height: 8px; +} +.progress-xs { + height: 6px; + border-radius: 1px; +} +.progress-xs.progress-vertical { + width: 6px; +} +.progress-xs .progress-bar { + line-height: 6px; +} +.contextual-progress { + margin: 20px 0; +} +.contextual-progress .progress-title { + float: left; +} +.contextual-progress .progress-label { + position: relative; + float: right; +} +.contextual-progress .progress { + height: 2px; + margin: 5px 0; +} +.contextual-progress .progress .progress-label { + display: none; +} +@-webkit-keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@-o-keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@keyframes progress-active { + 0% { + width: 0; + opacity: .4; + } + 100% { + width: 100%; + opacity: 0; + } +} +@-webkit-keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +@-o-keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +@keyframes progress-vertical-active { + 0% { + top: 0; + opacity: 0; + } + 100% { + top: 175px; + opacity: .4; + } +} +.media { + padding: 15px 0; + margin-top: 0; + border-bottom: 1px solid #e4eaec; +} +.media-object { + width: 120px; +} +.media-left, .media > .pull-left { + padding-right: 10px; +} +.media-right, .media > .pull-right { + padding-left: 10px; +} +.media-body { + overflow: visible; +} +.media .media { + padding-bottom: 0; + border-bottom: none; +} +.media-meta { + margin-bottom: 3px; + font-size: 12px; + color: #526069; +} +.media-lg .media-object { + width: 160px; +} +.media-lg .media { + margin-left: -110px; +} +.media-sm .media-object { + width: 80px; +} +.media-sm .media { + margin-left: -70px; +} +.media-xs .media-object { + width: 60px; +} +.media-xs .media { + margin-left: -60px; +} +@media screen and (min-width: 768px) { + .media .media { + margin-left: 0; + } +} +.list-group .media { + padding: 2px 0; + border-bottom: 0; +} +.list-group .media .pull-left, .list-group .media .media-left { + padding-right: 20px; +} +.list-group .media .pull-right, .list-group .media .media-right { + padding-left: 20px; +} +.list-group .media .pull-right .status { + margin-top: 15px; + margin-right: 5px; +} +.list-group .media .media-heading { + font-size: 14px; +} +.list-group .media .status { + margin-top: 2px; +} +.list-group-full > .list-group-item { + padding-right: 0; + padding-left: 0; +} +a.list-group-item { + border-radius: 3px; +} +a.list-group-item.disabled, a.list-group-item.disabled:hover, a.list-group-item.disabled:focus { + color: #ccd5db; + background-color: #f3f7f9; +} +a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { + color: #fff; + background-color: #62a8ea; +} +.list-group-item { + padding: 7px 10px; +} +.list-group-item .icon { + margin-right: 10px; +} +.list-group-item .badge { + margin-top: 3px; +} +.list-group.bg-inherit { + border-radius: 3px; +} +.list-group.bg-inherit .list-group-item { + background-color: transparent; + border-bottom-color: rgba(0, 0, 0, .075); +} +.list-group.bg-inherit .list-group-item:last-child { + border-bottom-color: transparent; +} +.list-group.bg-inherit .list-group-item:hover { + background-color: rgba(0, 0, 0, .075); + border-color: transparent; +} +.list-group-bordered .list-group-item { + border-color: #e4eaec; +} +.list-group-bordered .list-group-item.active, .list-group-bordered .list-group-item.active:hover, .list-group-bordered .list-group-item.active:focus { + color: #fff; + background-color: #4e97d9; + border-color: #4e97d9; +} +.list-group-dividered .list-group-item { + border-top-color: #e4eaec; +} +.list-group-dividered .list-group-item.active:hover { + border-top-color: #e4eaec; +} +.list-group-dividered .list-group-item:last-child { + border-bottom-color: #e4eaec; +} +.list-group-dividered .list-group-item:first-child { + border-top-color: transparent; +} +.list-group-dividered .list-group-item:first-child.active:hover { + border-top-color: transparent; +} +.list-group-gap .list-group-item { + margin-bottom: 2px; + border-radius: 3px; +} +.list-group-full .list-group-item { + padding-right: 0; + padding-left: 0; +} +.list-group-item-dark { + color: #fff; + background-color: #526069; +} +a.list-group-item-dark, button.list-group-item-dark { + color: #fff; +} +a.list-group-item-dark .list-group-item-heading, button.list-group-item-dark .list-group-item-heading { + color: inherit; +} +a.list-group-item-dark:hover, button.list-group-item-dark:hover, a.list-group-item-dark:focus, button.list-group-item-dark:focus { + color: #fff; + background-color: #47535b; +} +a.list-group-item-dark.active, button.list-group-item-dark.active, a.list-group-item-dark.active:hover, button.list-group-item-dark.active:hover, a.list-group-item-dark.active:focus, button.list-group-item-dark.active:focus { + color: #fff; + background-color: #fff; + border-color: #fff; +} +.panel { + position: relative; + margin-bottom: 24px; + border: none; +} +.panel > .nav-tabs-vertical .nav-tabs { + margin-left: -1px; +} +.panel > .nav-tabs-vertical .nav-tabs > li > a { + border-left: none; + border-radius: 0; +} +.panel > .nav-tabs-vertical .nav-tabs.nav-tabs-reverse { + margin-right: -1px; +} +.panel > .nav-tabs-vertical .nav-tabs.nav-tabs-reverse > li > a { + border-right: none; + border-radius: 0; +} +.panel:hover .panel-actions .show-on-hover { + display: inline-block; +} +.panel .panel-actions .show-on-hover { + display: none; +} +.panel.is-fullscreen { + position: fixed; + top: 0; + bottom: 0; + left: 0; + z-index: 9999; + width: 100%; + margin-bottom: 0; + border-radius: 0; +} +.panel.is-fullscreen .panel-loading { + border-radius: 0; +} +.panel.is-fullscreen .panel-actions [data-toggle=collapse] { + display: none; +} +.panel.is-fullscreen .panel-body { + max-height: 100%; + overflow: auto; +} +.panel.is-close { + display: none; +} +.panel.is-collapse .panel-body { + display: none; + height: 0; +} +.panel > .alert { + padding-right: 20px; + padding-left: 20px; +} +.panel > .alert-dismissible { + padding-right: 40px; +} +@media screen and (max-width: 480px) { + .panel > .alert { + padding-right: 20px; + padding-left: 20px; + } + .panel > .alert-dismissible { + padding-right: 40px; + } +} +.panel > .table > tr > td:first-child, .panel > .table-responsive > .table > tr > td:first-child, .panel > .table > thead > tr > td:first-child, .panel > .table-responsive > .table > thead > tr > td:first-child, .panel > .table > tbody > tr > td:first-child, .panel > .table-responsive > .table > tbody > tr > td:first-child, .panel > .table > tfoot > tr > td:first-child, .panel > .table-responsive > .table > tfoot > tr > td:first-child, .panel > .table > tr > th:first-child, .panel > .table-responsive > .table > tr > th:first-child, .panel > .table > thead > tr > th:first-child, .panel > .table-responsive > .table > thead > tr > th:first-child, .panel > .table > tbody > tr > th:first-child, .panel > .table-responsive > .table > tbody > tr > th:first-child, .panel > .table > tfoot > tr > th:first-child, .panel > .table-responsive > .table > tfoot > tr > th:first-child { + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel > .table > tr > td:first-child, .panel > .table-responsive > .table > tr > td:first-child, .panel > .table > thead > tr > td:first-child, .panel > .table-responsive > .table > thead > tr > td:first-child, .panel > .table > tbody > tr > td:first-child, .panel > .table-responsive > .table > tbody > tr > td:first-child, .panel > .table > tfoot > tr > td:first-child, .panel > .table-responsive > .table > tfoot > tr > td:first-child, .panel > .table > tr > th:first-child, .panel > .table-responsive > .table > tr > th:first-child, .panel > .table > thead > tr > th:first-child, .panel > .table-responsive > .table > thead > tr > th:first-child, .panel > .table > tbody > tr > th:first-child, .panel > .table-responsive > .table > tbody > tr > th:first-child, .panel > .table > tfoot > tr > th:first-child, .panel > .table-responsive > .table > tfoot > tr > th:first-child { + padding-left: 20px; + } +} +.panel > .table > tr > td:last-child, .panel > .table-responsive > .table > tr > td:last-child, .panel > .table > thead > tr > td:last-child, .panel > .table-responsive > .table > thead > tr > td:last-child, .panel > .table > tbody > tr > td:last-child, .panel > .table-responsive > .table > tbody > tr > td:last-child, .panel > .table > tfoot > tr > td:last-child, .panel > .table-responsive > .table > tfoot > tr > td:last-child, .panel > .table > tr > th:last-child, .panel > .table-responsive > .table > tr > th:last-child, .panel > .table > thead > tr > th:last-child, .panel > .table-responsive > .table > thead > tr > th:last-child, .panel > .table > tbody > tr > th:last-child, .panel > .table-responsive > .table > tbody > tr > th:last-child, .panel > .table > tfoot > tr > th:last-child, .panel > .table-responsive > .table > tfoot > tr > th:last-child { + padding-right: 20px; +} +@media screen and (max-width: 480px) { + .panel > .table > tr > td:last-child, .panel > .table-responsive > .table > tr > td:last-child, .panel > .table > thead > tr > td:last-child, .panel > .table-responsive > .table > thead > tr > td:last-child, .panel > .table > tbody > tr > td:last-child, .panel > .table-responsive > .table > tbody > tr > td:last-child, .panel > .table > tfoot > tr > td:last-child, .panel > .table-responsive > .table > tfoot > tr > td:last-child, .panel > .table > tr > th:last-child, .panel > .table-responsive > .table > tr > th:last-child, .panel > .table > thead > tr > th:last-child, .panel > .table-responsive > .table > thead > tr > th:last-child, .panel > .table > tbody > tr > th:last-child, .panel > .table-responsive > .table > tbody > tr > th:last-child, .panel > .table > tfoot > tr > th:last-child, .panel > .table-responsive > .table > tfoot > tr > th:last-child { + padding-right: 20px; + } +} +.panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { + border-top: 1px solid #e4eaec; +} +.panel > .list-group > .list-group-item { + padding-right: 20px; + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel > .list-group > .list-group-item { + padding-right: 20px; + padding-left: 20px; + } +} +.panel-content > .row { + padding-right: 30px; + padding-left: 30px; +} +.panel-content > .row > [class*="col-"] { + padding-right: 30px; + padding-left: 30px; +} +.panel-heading { + position: relative; + padding: 0; + border-bottom: 1px solid transparent; +} +.panel-heading + .alert { + border-radius: 0; +} +.panel-heading > .nav-tabs { + border-bottom: none; +} +.panel-heading + .nav-tabs { + margin-top: -10px; +} +.panel-body { + position: relative; +} +.panel-heading + .panel-body { + padding-top: 0; +} +.panel-body h1:first-child, .panel-body h2:first-child, .panel-body h3:first-child, .panel-body h4:first-child, .panel-body h5:first-child, .panel-body h6:first-child, .panel-body .h1:first-child, .panel-body .h2:first-child, .panel-body .h3:first-child, .panel-body .h4:first-child, .panel-body .h5:first-child, .panel-body .h6:first-child { + margin-top: 0; +} +.panel-body > *:last-child { + margin-bottom: 0; +} +.panel-body > .list-group-dividered:only-child > .list-group-item:last-child { + border-bottom-color: transparent; +} +.panel-footer { + border-top: 1px solid transparent; +} +.table + .panel-footer { + padding-top: 10px; + border-color: #e4eaec; +} +.panel-title { + display: block; + padding: 16px 20px; + font-size: 16px; + color: #37474f; +} +.panel-title > .icon { + margin-right: 10px; +} +.panel-title > .label { + margin-left: 10px; +} +.panel-title small { + color: #76838f; +} +.panel-desc { + display: block; + padding: 5px 0 0; + margin: 0; + font-size: 14px; + color: #76838f; +} +.panel-actions { + position: absolute; + top: 50%; + right: 20px; + z-index: 1; + margin: auto; + -webkit-transform: translate(0%, -50%); + -ms-transform: translate(0%, -50%); + -o-transform: translate(0%, -50%); + transform: translate(0%, -50%); +} +@media screen and (max-width: 480px) { + .panel-actions { + right: 20px; + } +} +ul.panel-actions { + list-style: none; +} +ul.panel-actions > li { + display: inline-block; + margin-left: 8px; +} +ul.panel-actions > li:first-child { + margin-left: 0; +} +.panel-actions a { + color: inherit; +} +.panel-actions a.dropdown-toggle { + text-decoration: none; +} +.panel-actions .dropdown { + display: inline-block; +} +.panel-actions .dropdown-toggle { + display: inline-block; +} +.panel-actions .panel-action { + display: inline-block; + padding: 8px 10px; + color: #a3afb7; + text-decoration: none; + cursor: pointer; + background-color: transparent; +} +.panel-actions .panel-action:hover { + color: #526069; +} +.panel-actions .panel-action:active { + color: #526069; +} +.panel-actions .panel-action:focus { + outline: none; +} +.panel-actions .progress { + width: 100px; + margin: 0; +} +.panel-actions .pagination { + margin: 0; +} +.panel-toolbar { + padding: 5px 15px; + margin: 0; + background-color: transparent; + border-top: 1px solid #e4eaec; + border-bottom: 1px solid #e4eaec; +} +.panel-bordered .panel-toolbar { + border-top-color: transparent; +} +.panel-toolbar .btn { + padding: 5px 10px; + color: #a3afb7; +} +.panel-toolbar .btn.icon { + width: 1em; + text-align: center; +} +.panel-toolbar .btn:hover, .panel-toolbar .btn:active, .panel-toolbar .btn.active { + color: #76838f; +} +.panel-loading { + position: absolute; + top: 0; + left: 0; + z-index: 6; + display: none; + width: 100%; + height: 100%; + border-radius: 1px; + opacity: .6; +} +.panel-loading .loader { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.panel > *:not(.panel-loading):not(.collapsing) { + -webkit-transition: opacity .3s; + -o-transition: opacity .3s; + transition: opacity .3s; +} +.panel.is-loading > *:not(.panel-loading) { + opacity: .3; +} +.panel.is-loading .panel-loading { + display: block; + opacity: 1; +} +.panel-footer-chart { + padding: 0; +} +.panel-control { + padding: 0; + border: none; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.panel-body.scrollable-vertical { + padding-right: 0 !important; + padding-left: 0 !important; +} +.panel-body.scrollable-vertical > .scrollable-container > .scrollable-content { + padding-right: 20px; + padding-left: 20px; +} +@media screen and (max-width: 480px) { + .panel-body.scrollable-vertical > .scrollable-container > .scrollable-content { + padding-right: 20px; + padding-left: 20px; + } +} +.panel-body.scrollable-vertical > .scrollable-bar { + height: -webkit-calc(100% - 20px); + height: calc(100% - 20px); + margin-top: 0; + margin-bottom: 20px; + -webkit-transform: translateX(-16px); + -ms-transform: translateX(-16px); + -o-transform: translateX(-16px); + transform: translateX(-16px); +} +.panel-bordered > .panel-body.scrollable-vertical > .scrollable-bar { + height: -webkit-calc(100% - 40px); + height: calc(100% - 40px); + margin-bottom: 20px; +} +.panel-body.scrollable-horizontal { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.panel-body.scrollable-horizontal > .scrollable-container > .scrollable-content { + padding-top: 0; + padding-bottom: 20px; +} +.panel-bordered > .panel-body.scrollable-horizontal > .scrollable-container > .scrollable-content { + padding-top: 20px; + padding-bottom: 20px; +} +.panel-body.scrollable-horizontal > .scrollable-bar { + width: -webkit-calc(100% - 40px); + width: calc(100% - 40px); + margin-right: 20px; + margin-left: 0; + -webkit-transform: translateY(-16px); + -ms-transform: translateY(-16px); + -o-transform: translateY(-16px); + transform: translateY(-16px); +} +@media screen and (max-width: 480px) { + .panel-body.scrollable-horizontal > .scrollable-bar { + width: -webkit-calc(100% - 40px); + width: calc(100% - 40px); + margin-right: 20px; + } +} +.panel-bordered > .panel-body.scrollable-horizontal > .scrollable-bar { + -webkit-transform: translateY(-16px); + -ms-transform: translateY(-16px); + -o-transform: translateY(-16px); + transform: translateY(-16px); +} +.panel-bordered > .panel-heading { + border-bottom: 1px solid #e4eaec; +} +.panel-bordered > .panel-heading > .panel-title { + padding-bottom: 16px; +} +.panel-bordered > .panel-footer { + padding-top: 10px; + border-top: 1px solid #e4eaec; +} +.panel-bordered > .panel-body { + padding-top: 20px; +} +.panel-bordered > .table > tbody:first-child > tr:first-child th, .panel-bordered > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel.is-dragging { + opacity: .8; +} +.panel.is-dragging { + cursor: move; +} +.panel.panel-transparent { + background: transparent; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.panel.panel-transparent > .panel-heading, .panel.panel-transparent > .panel-footer { + border-color: transparent; +} +.panel-dark { + border-color: #526069; +} +.panel-dark > .panel-heading { + color: #fff; + background-color: #526069; + border-color: #526069; +} +.panel-dark > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #526069; +} +.panel-dark > .panel-heading .badge { + color: #526069; + background-color: #fff; +} +.panel-dark > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #526069; +} +.panel-primary, .panel-info, .panel-success, .panel-warning, .panel-danger, .panel-dark { + border: none; +} +.panel-primary .panel-heading, .panel-info .panel-heading, .panel-success .panel-heading, .panel-warning .panel-heading, .panel-danger .panel-heading, .panel-dark .panel-heading { + border: none; +} +.panel-primary .panel-title, .panel-info .panel-title, .panel-success .panel-title, .panel-warning .panel-title, .panel-danger .panel-title, .panel-dark .panel-title { + color: #fff; +} +.panel-primary .panel-action, .panel-info .panel-action, .panel-success .panel-action, .panel-warning .panel-action, .panel-danger .panel-action, .panel-dark .panel-action { + color: #fff; +} +@media screen and (max-width: 480px) { + .panel-actions { + right: 20px; + } + .panel-actions .progress { + min-width: 80px; + } + .panel-actions .show-on-hover { + display: none; + } + .panel-title, .panel-body, .panel-footer { + padding-right: 20px; + padding-left: 20px; + } +} +.well { + padding: 20px; +} +.well-lg { + padding: 24px; +} +.well-sm { + padding: 12px; +} +.well { + -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, .02); + box-shadow: inset 0 0 1px rgba(0, 0, 0, .02); +} +.well-primary { + color: #fff; + background-color: #62a8ea; +} +.well-success { + color: #fff; + background-color: #46be8a; +} +.well-info { + color: #fff; + background-color: #57c7d4; +} +.well-warning { + color: #fff; + background-color: #f2a654; +} +.well-danger { + color: #fff; + background-color: #f96868; +} +.close { + font-weight: 300; +} +.close.icon { + font-size: inherit; +} +.modal-content { + border: none; + border-radius: 0; + -webkit-box-shadow: 1px 1px 15px rgba(0, 0, 0, .3); + box-shadow: 1px 1px 15px rgba(0, 0, 0, .3); +} +.modal-content > iframe { + float: left; + width: 100%; + height: 0; + margin: 0; + border: none; +} +.modal-header { + padding: 10px 20px; + background-color: #f3f7f9; +} +.modal-header .close { + margin-top: 1px; +} +.modal-body { + padding: 20px; +} +.modal-body > *:last-child { + margin-bottom: 0; +} +.modal-footer { + padding: 10px 20px 20px; + border-top: none; +} +.modal-top { + margin: 0 auto; +} +.modal-center { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 auto !important; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-bottom { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 auto !important; + + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + -webkit-box-pack: end; + justify-content: flex-end; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-sidebar { + position: absolute; + right: 0; + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + height: 100%; + margin: 0 !important; + overflow-y: auto; + background-color: #fff; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; +} +.modal-sidebar .modal-content { + position: static; + overflow: auto; + background-color: transparent; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.modal-sidebar .modal-header { + background-color: transparent; + border-bottom: none; +} +.modal-sidebar .modal-footer { + border-top: none; +} +.modal.fade .modal-dialog.modal-sidebar { + -webkit-transform: translate(25%, 0); + -ms-transform: translate(25%, 0); + -o-transform: translate(25%, 0); + transform: translate(25%, 0); +} +.modal.in .modal-dialog.modal-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-fill-in { + background-color: transparent; +} +.modal-fill-in.in { + background-color: rgba(255, 255, 255, .95); + opacity: 1; +} +.modal-fill-in .modal-dialog { + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-box; + display: flex; + width: 100%; + height: 100%; + margin: 0 auto; + + -webkit-justify-content: center; + -ms-flex-pack: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-flow: column nowrap; + -webkit-align-content: stretch; + -ms-flex-line-pack: center; + align-content: center; + -webkit-align-items: center; + -ms-flex-align: center; + -webkit-box-align: center; + align-items: center; +} +@media (min-width: 768px) { + .modal-fill-in .modal-dialog > * { + width: 500px; + } + .modal-fill-in .modal-dialog.modal-sm > * { + width: 300px; + } + .modal-fill-in .modal-dialog button.close { + position: fixed; + top: 20px; + right: 20px; + z-index: 1; + filter: alpha(opacity=50); + opacity: .5; + -webkit-transform: translate(0%, 0%); + -ms-transform: translate(0%, 0%); + -o-transform: translate(0%, 0%); + transform: translate(0%, 0%); + } +} +@media (min-width: 992px) { + .modal-fill-in .modal-dialog.modal-lg > * { + width: 900px; + } +} +.modal-fill-in .modal-content { + background-color: transparent; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.modal-fill-in .modal-header { + background-color: transparent; + border-bottom: none; +} +.modal-fill-in .modal-footer { + border-top: none; +} +.modal-primary .modal-header { + background-color: #62a8ea; + border-radius: 0 0 0 0; +} +.modal-primary .modal-header * { + color: #fff; +} +.modal-primary .modal-header .close { + opacity: .6; +} +.modal-success .modal-header { + background-color: #46be8a; + border-radius: 0 0 0 0; +} +.modal-success .modal-header * { + color: #fff; +} +.modal-success .modal-header .close { + opacity: .6; +} +.modal-info .modal-header { + background-color: #57c7d4; + border-radius: 0 0 0 0; +} +.modal-info .modal-header * { + color: #fff; +} +.modal-info .modal-header .close { + opacity: .6; +} +.modal-warning .modal-header { + background-color: #f2a654; + border-radius: 0 0 0 0; +} +.modal-warning .modal-header * { + color: #fff; +} +.modal-warning .modal-header .close { + opacity: .6; +} +.modal-danger .modal-header { + background-color: #f96868; + border-radius: 0 0 0 0; +} +.modal-danger .modal-header * { + color: #fff; +} +.modal-danger .modal-header .close { + opacity: .6; +} +.modal.modal-fade-in-scale-up .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(.7); + -ms-transform: scale(.7); + -o-transform: scale(.7); + transform: scale(.7); +} +.modal.modal-fade-in-scale-up.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-slide-in-right .modal-dialog { + opacity: 0; + -webkit-transition: all .3s cubic-bezier(.25, .5, .5, .9); + -o-transition: all .3s cubic-bezier(.25, .5, .5, .9); + transition: all .3s cubic-bezier(.25, .5, .5, .9); + -webkit-transform: translate(20%, 0%); + -ms-transform: translate(20%, 0%); + -o-transform: translate(20%, 0%); + transform: translate(20%, 0%); +} +.modal.modal-slide-in-right.in .modal-dialog { + opacity: 1; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.modal.modal-slide-from-bottom .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: translate(0%, 20%); + -ms-transform: translate(0%, 20%); + -o-transform: translate(0%, 20%); + transform: translate(0%, 20%); +} +.modal.modal-slide-from-bottom.in .modal-dialog { + opacity: 1; + -webkit-transform: translate(0px, 0); + -ms-transform: translate(0px, 0); + -o-transform: translate(0px, 0); + transform: translate(0px, 0); +} +.modal.modal-newspaper .modal-dialog { + opacity: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; + -webkit-transform: scale(0) rotate(720deg); + -ms-transform: scale(0) rotate(720deg); + -o-transform: scale(0) rotate(720deg); + transform: scale(0) rotate(720deg); +} +.modal.modal-newspaper.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1) rotate(0deg); + -ms-transform: scale(1) rotate(0deg); + -o-transform: scale(1) rotate(0deg); + transform: scale(1) rotate(0deg); +} +.modal.modal-fall { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-fall .modal-dialog { + opacity: 0; + -webkit-transform: translateZ(600px) rotateX(20deg); + -ms-transform: translateZ(600px) rotateX(20deg); + transform: translateZ(600px) rotateX(20deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-fall.in .modal-dialog { + opacity: 1; + -webkit-transition: all .3s ease-in 0s; + -o-transition: all .3s ease-in 0s; + transition: all .3s ease-in 0s; + -webkit-transform: translateZ(0px) rotateX(0deg); + -ms-transform: translateZ(0px) rotateX(0deg); + transform: translateZ(0px) rotateX(0deg); +} +.modal.modal-side-fall { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-side-fall .modal-dialog { + -webkit-transform: translate(30%) translateZ(600px) rotate(10deg); + -ms-transform: translate(30%) translateZ(600px) rotate(10deg); + transform: translate(30%) translateZ(600px) rotate(10deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-side-fall.in .modal-dialog { + -webkit-transition: all .3s ease-in 0s; + -o-transition: all .3s ease-in 0s; + transition: all .3s ease-in 0s; + -webkit-transform: translate(0%) translateZ(0px) rotate(0deg); + -ms-transform: translate(0%) translateZ(0px) rotate(0deg); + transform: translate(0%) translateZ(0px) rotate(0deg); +} +.modal.modal-3d-flip-horizontal { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-flip-horizontal .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateY(-70deg); + -ms-transform: rotateY(-70deg); + -o-transform: rotateY(-70deg); + transform: rotateY(-70deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-flip-horizontal.in .modal-dialog { + -webkit-transform: rotateY(0deg); + -ms-transform: rotateY(0deg); + -o-transform: rotateY(0deg); + transform: rotateY(0deg); +} +.modal.modal-3d-flip-vertical { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-flip-vertical .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateX(-70deg); + -ms-transform: rotateX(-70deg); + -o-transform: rotateX(-70deg); + transform: rotateX(-70deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-flip-vertical.in .modal-dialog { + -webkit-transform: rotateX(0deg); + -ms-transform: rotateX(0deg); + -o-transform: rotateX(0deg); + transform: rotateX(0deg); +} +.modal.modal-3d-sign { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-sign .modal-dialog { + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: rotateX(-60deg); + -ms-transform: rotateX(-60deg); + -o-transform: rotateX(-60deg); + transform: rotateX(-60deg); + -webkit-transform-origin: 50% 0 0; + -moz-transform-origin: 50% 0 0; + -ms-transform-origin: 50% 0 0; + -o-transform-origin: 50% 0 0; + transform-origin: 50% 0 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-sign.in .modal-dialog { + -webkit-transform: rotateX(0deg); + -ms-transform: rotateX(0deg); + -o-transform: rotateX(0deg); + transform: rotateX(0deg); +} +.modal.modal-super-scaled .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(2); + -ms-transform: scale(2); + -o-transform: scale(2); + transform: scale(2); +} +.modal.modal-super-scaled.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-just-me .modal-dialog { + opacity: 0; + -webkit-transition: all .3s ease 0s; + -o-transition: all .3s ease 0s; + transition: all .3s ease 0s; + -webkit-transform: scale(.8); + -ms-transform: scale(.8); + -o-transform: scale(.8); + transform: scale(.8); +} +.modal.modal-just-me .modal-backdrop { + background-color: #fff; +} +.modal.modal-just-me.in { + background: #fff; +} +.modal.modal-just-me.in .modal-dialog { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.modal.modal-just-me.in .modal-backdrop { + opacity: 1; +} +.modal.modal-3d-slit { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-3d-slit .modal-dialog { + opacity: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; + -webkit-transform: translateZ(-3000px) rotateY(90deg); + -ms-transform: translateZ(-3000px) rotateY(90deg); + transform: translateZ(-3000px) rotateY(90deg); + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-3d-slit.in .modal-dialog { + -webkit-animation-name: slit; + -o-animation-name: slit; + animation-name: slit; + -webkit-animation-duration: .7s; + -o-animation-duration: .7s; + animation-duration: .7s; + -webkit-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + + -webkit-animation-fill-mode: forwards; + -o-animation-fill-mode: forwards; + animation-fill-mode: forwards; +} +.modal.modal-rotate-from-bottom { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-rotate-from-bottom .modal-dialog { + -webkit-transition: all .3s ease-out 0s; + -o-transition: all .3s ease-out 0s; + transition: all .3s ease-out 0s; + -webkit-transform: translateY(100%) rotateX(90deg); + -ms-transform: translateY(100%) rotateX(90deg); + transform: translateY(100%) rotateX(90deg); + -webkit-transform-origin: 0 100% 0; + -moz-transform-origin: 0 100% 0; + -ms-transform-origin: 0 100% 0; + -o-transform-origin: 0 100% 0; + transform-origin: 0 100% 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-rotate-from-bottom.in .modal-dialog { + -webkit-transform: translateY(0%) rotateX(0deg); + -ms-transform: translateY(0%) rotateX(0deg); + transform: translateY(0%) rotateX(0deg); +} +.modal.modal-rotate-from-left { + -webkit-perspective: 1300px; + -moz-perspective: 1300px; + perspective: 1300px; +} +.modal.modal-rotate-from-left .modal-dialog { + -webkit-transition: all .3s ease-out 0s; + -o-transition: all .3s ease-out 0s; + transition: all .3s ease-out 0s; + -webkit-transform: translateZ(100px) translateX(-30%) rotateY(90deg); + -ms-transform: translateZ(100px) translateX(-30%) rotateY(90deg); + transform: translateZ(100px) translateX(-30%) rotateY(90deg); + -webkit-transform-origin: 0 100% 0; + -moz-transform-origin: 0 100% 0; + -ms-transform-origin: 0 100% 0; + -o-transform-origin: 0 100% 0; + transform-origin: 0 100% 0; + + -ms-transform-style: preserve-3d; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.modal.modal-rotate-from-left.in .modal-dialog { + -webkit-transform: translateZ(0px) translateX(0%) rotateY(0deg); + -ms-transform: translateZ(0px) translateX(0%) rotateY(0deg); + transform: translateZ(0px) translateX(0%) rotateY(0deg); +} +@-webkit-keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@-o-keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@keyframes slit { + 50% { + opacity: .5; + -webkit-transform: translateZ(-250px) rotateY(89deg); + -ms-transform: translateZ(-250px) rotateY(89deg); + transform: translateZ(-250px) rotateY(89deg); + } + 100% { + opacity: 1; + -webkit-transform: translateZ(0px) rotateY(0deg); + -ms-transform: translateZ(0px) rotateY(0deg); + transform: translateZ(0px) rotateY(0deg); + } +} +@media (min-width: 768px) { + .modal-dialog { + margin: 90px auto; + } +} +.tooltip-inner { + padding: 6px 12px; + white-space: nowrap; +} +.tooltip-primary + .tooltip .tooltip-inner { + color: #fff; + background-color: #62a8ea; +} +.tooltip-primary + .tooltip.top .tooltip-arrow { + border-top-color: #62a8ea; +} +.tooltip-primary + .tooltip.right .tooltip-arrow { + border-right-color: #62a8ea; +} +.tooltip-primary + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #62a8ea; +} +.tooltip-primary + .tooltip.left .tooltip-arrow { + border-left-color: #62a8ea; +} +.tooltip-success + .tooltip .tooltip-inner { + color: #fff; + background-color: #46be8a; +} +.tooltip-success + .tooltip.top .tooltip-arrow { + border-top-color: #46be8a; +} +.tooltip-success + .tooltip.right .tooltip-arrow { + border-right-color: #46be8a; +} +.tooltip-success + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #46be8a; +} +.tooltip-success + .tooltip.left .tooltip-arrow { + border-left-color: #46be8a; +} +.tooltip-info + .tooltip .tooltip-inner { + color: #fff; + background-color: #57c7d4; +} +.tooltip-info + .tooltip.top .tooltip-arrow { + border-top-color: #57c7d4; +} +.tooltip-info + .tooltip.right .tooltip-arrow { + border-right-color: #57c7d4; +} +.tooltip-info + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #57c7d4; +} +.tooltip-info + .tooltip.left .tooltip-arrow { + border-left-color: #57c7d4; +} +.tooltip-warning + .tooltip .tooltip-inner { + color: #fff; + background-color: #f2a654; +} +.tooltip-warning + .tooltip.top .tooltip-arrow { + border-top-color: #f2a654; +} +.tooltip-warning + .tooltip.right .tooltip-arrow { + border-right-color: #f2a654; +} +.tooltip-warning + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #f2a654; +} +.tooltip-warning + .tooltip.left .tooltip-arrow { + border-left-color: #f2a654; +} +.tooltip-danger + .tooltip .tooltip-inner { + color: #fff; + background-color: #f96868; +} +.tooltip-danger + .tooltip.top .tooltip-arrow { + border-top-color: #f96868; +} +.tooltip-danger + .tooltip.right .tooltip-arrow { + border-right-color: #f96868; +} +.tooltip-danger + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #f96868; +} +.tooltip-danger + .tooltip.left .tooltip-arrow { + border-left-color: #f96868; +} +.tooltip-rotate + .tooltip { + opacity: 0; + -webkit-animation: tooltip-rotate3d 1s ease .1s forwards; + -o-animation: tooltip-rotate3d 1s ease .1s forwards; + animation: tooltip-rotate3d 1s ease .1s forwards; +} +@-webkit-keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-o-keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes tooltip-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +.tooltip-scale + .tooltip { + -webkit-animation: tooltip-scale3d 1s ease 0s forwards; + -o-animation: tooltip-scale3d 1s ease 0s forwards; + animation: tooltip-scale3d 1s ease 0s forwards; +} +@-webkit-keyframes tooltip-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@-o-keyframes tooltip-scale3d { + 0% { + opacity: 0; + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@keyframes tooltip-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +.popover { + padding: 0; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, .05); + box-shadow: 0 2px 6px rgba(0, 0, 0, .05); +} +.popover.bottom > .arrow:after { + border-bottom-color: #f3f7f9; +} +.popover-content { + padding: 20px; +} +.popover-primary + .popover .popover-title { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.popover-primary + .popover.bottom .arrow { + border-bottom-color: #62a8ea; +} +.popover-primary + .popover.bottom .arrow:after { + border-bottom-color: #62a8ea; +} +.popover-success + .popover .popover-title { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} +.popover-success + .popover.bottom .arrow { + border-bottom-color: #46be8a; +} +.popover-success + .popover.bottom .arrow:after { + border-bottom-color: #46be8a; +} +.popover-info + .popover .popover-title { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} +.popover-info + .popover.bottom .arrow { + border-bottom-color: #57c7d4; +} +.popover-info + .popover.bottom .arrow:after { + border-bottom-color: #57c7d4; +} +.popover-warning + .popover .popover-title { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} +.popover-warning + .popover.bottom .arrow { + border-bottom-color: #f2a654; +} +.popover-warning + .popover.bottom .arrow:after { + border-bottom-color: #f2a654; +} +.popover-danger + .popover .popover-title { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} +.popover-danger + .popover.bottom .arrow { + border-bottom-color: #f96868; +} +.popover-danger + .popover.bottom .arrow:after { + border-bottom-color: #f96868; +} +.popover-rotate + .popover { + opacity: 0; + -webkit-animation: popover-rotate3d 1s ease .1s forwards; + -o-animation: popover-rotate3d 1s ease .1s forwards; + animation: popover-rotate3d 1s ease .1s forwards; +} +@-webkit-keyframes popover-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-o-keyframes popover-rotate3d { + 0% { + opacity: 0; + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes popover-rotate3d { + 0% { + opacity: 0; + -webkit-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 100% { + opacity: 1; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +.popover-scale + .popover { + -webkit-animation: popover-scale3d 1s ease 0s forwards; + -o-animation: popover-scale3d 1s ease 0s forwards; + animation: popover-scale3d 1s ease 0s forwards; +} +@-webkit-keyframes popover-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@-o-keyframes popover-scale3d { + 0% { + opacity: 0; + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +@keyframes popover-scale3d { + 0% { + opacity: 0; + -webkit-transform: scale3d(.7, .3, 1) translate(50%, 50%); + transform: scale3d(.7, .3, 1) translate(50%, 50%); + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1) translate(50%, 50%); + transform: scale3d(1, 1, 1) translate(50%, 50%); + } +} +.carousel-control { + min-width: 50px; +} +.carousel-control:hover, .carousel-control:focus { + filter: alpha(opacity=40); + opacity: .4; +} +.carousel-control .icon { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + width: 16px; + height: 16px; + margin-top: -8px; +} +.carousel-control.left .icon { + left: 50%; + margin-left: -8px; +} +.carousel-control.right .icon { + right: 50%; + margin-right: -8px; +} +.carousel-caption h1, .carousel-caption h2, .carousel-caption h3, .carousel-caption h4, .carousel-caption h5, .carousel-caption h6 { + color: inherit; +} +.carousel-indicators { + margin-bottom: 0; +} +.carousel-indicators li { + margin: 3px; + background-color: rgba(255, 255, 255, .3); + border: none; +} +.carousel-indicators .active { + width: 10px; + height: 10px; + margin: 3px; +} +.carousel-indicators-scaleup li { + border: none; + -webkit-transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.carousel-indicators-scaleup .active { + -webkit-transform: scale(1.5); + -ms-transform: scale(1.5); + -o-transform: scale(1.5); + transform: scale(1.5); +} +.carousel-indicators-fillin li { + background-color: transparent; + -webkit-box-shadow: 0 0 0 2px #fff inset; + box-shadow: 0 0 0 2px #fff inset; + -webkit-transition: -webkit-box-shadow .3s ease 0s; + -o-transition: box-shadow .3s ease 0s; + transition: -webkit-box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s, -webkit-box-shadow .3s ease 0s; +} +.carousel-indicators-fillin .active { + -webkit-box-shadow: 0 0 0 8px #fff inset; + box-shadow: 0 0 0 8px #fff inset; +} +.carousel-indicators-fall li { + position: relative; + -webkit-transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.carousel-indicators-fall li:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + visibility: hidden; + content: ""; + background-color: rgba(0, 0, 0, .3); + border-radius: 50%; + opacity: 0; + -webkit-transition: opacity .3s ease 0s, visibility 0s ease .3s; + -o-transition: opacity .3s ease 0s, visibility 0s ease .3s; + transition: opacity .3s ease 0s, visibility 0s ease .3s; + -webkit-transform: translate(0%, -200%); + -ms-transform: translate(0%, -200%); + -o-transform: translate(0%, -200%); + transform: translate(0%, -200%); +} +.carousel-indicators-fall .active { + background-color: transparent; + -webkit-transform: translate(0, 200%); + -ms-transform: translate(0, 200%); + -o-transform: translate(0, 200%); + transform: translate(0, 200%); +} +.carousel-indicators-fall .active:after { + visibility: visible; + opacity: 1; + -webkit-transition: opacity .3s ease 0s; + -o-transition: opacity .3s ease 0s; + transition: opacity .3s ease 0s; +} +@media screen and (min-width: 768px) { + .carousel-control .icon { + width: 24px; + height: 24px; + margin-top: -12px; + font-size: 24px; + } + .carousel-control.left .icon { + margin-left: -12px; + } + .carousel-control.right .icon { + margin-right: -12px; + } +} +.vertical-align { + font-size: 0; +} +.vertical-align:before { + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.vertical-align-middle, .vertical-align-bottom { + display: inline-block; + max-width: 100%; + font-size: 14px; +} +.vertical-align-middle { + vertical-align: middle; +} +.vertical-align-bottom { + vertical-align: bottom; +} +.inline { + display: inline !important; +} +.inline-block { + display: inline-block !important; +} +.block { + display: block !important; +} +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + word-wrap: normal; + /* for IE */ + white-space: nowrap; +} +.text-break { + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + word-wrap: break-word; + white-space: normal; + + -ms-hyphens: auto; +} +.text-nowrap { + white-space: nowrap; +} +.text-top { + vertical-align: top !important; +} +.text-middle { + vertical-align: middle !important; +} +.text-bottom { + vertical-align: bottom !important; +} +.text-left { + text-align: left !important; +} +.text-right { + text-align: right !important; +} +.text-center { + text-align: center !important; +} +.text-justify { + text-align: justify !important; +} +.text-lowercase { + text-transform: lowercase !important; +} +.text-uppercase { + text-transform: uppercase !important; +} +.text-capitalize { + text-transform: capitalize !important; +} +.font-weight-unset { + font-weight: unset !important; +} +.font-weight-100 { + font-weight: 100 !important; +} +.font-weight-200 { + font-weight: 200 !important; +} +.font-weight-300 { + font-weight: 300 !important; +} +.font-weight-400 { + font-weight: 400 !important; +} +.font-weight-500 { + font-weight: 500 !important; +} +.font-weight-600 { + font-weight: 600 !important; +} +.font-weight-700 { + font-weight: 700 !important; +} +.font-weight-800 { + font-weight: 800 !important; +} +.font-weight-900 { + font-weight: 900 !important; +} +.font-weight-light { + font-weight: 300 !important; +} +.font-weight-normal { + font-weight: 400 !important; +} +.font-weight-medium { + font-weight: 500 !important; +} +.font-weight-bold { + font-weight: 700 !important; +} +.font-size-0 { + font-size: 0 !important; +} +.font-size-10 { + font-size: 10px !important; +} +.font-size-12 { + font-size: 12px !important; +} +.font-size-14 { + font-size: 14px !important; +} +.font-size-16 { + font-size: 16px !important; +} +.font-size-18 { + font-size: 18px !important; +} +.font-size-20 { + font-size: 20px !important; +} +.font-size-24 { + font-size: 24px !important; +} +.font-size-26 { + font-size: 26px !important; +} +.font-size-30 { + font-size: 30px !important; +} +.font-size-40 { + font-size: 40px !important; +} +.font-size-50 { + font-size: 50px !important; +} +.font-size-60 { + font-size: 60px !important; +} +.font-size-70 { + font-size: 70px !important; +} +.font-size-80 { + font-size: 80px !important; +} +.visible-xlg { + display: none !important; +} +.visible-xlg-block, .visible-xlg-inline, .visible-xlg-inline-block { + display: none !important; +} +@media (min-width: 1600px) { + .visible-xlg { + display: block !important; + } + table.visible-xlg { + display: table !important; + } + tr.visible-xlg { + display: table-row !important; + } + th.visible-xlg, td.visible-xlg { + display: table-cell !important; + } +} +@media (min-width: 1600px) { + .visible-xlg-block { + display: block !important; + } +} +@media (min-width: 1600px) { + .visible-xlg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-xlg-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1600px) { + .hidden-xlg { + display: none !important; + } +} +body.layout-full { + height: 100vh; + overflow-x: hidden; +} +.page { + position: relative; + min-height: 100vh; + overflow: visible; + background: #f1f4f5; +} +.page-dark.layout-full { + color: #fff; +} +.page-dark.layout-full:before { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + content: ""; + background-position: center top; + -webkit-background-size: cover; + background-size: cover; +} +.page-dark.layout-full:after { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + content: ""; + background-color: rgba(38, 50, 56, .6); +} +.page-dark.layout-full .brand { + margin-bottom: 22px; +} +.page-dark.layout-full .brand-text { + font-size: 18px; + color: #fff; + text-transform: uppercase; +} +.page-nav-tabs { + padding: 0 20px; +} +.page-content { + padding: 20px 20px; +} +.page-content > *:not(script):last-child { + margin-bottom: 0 !important; +} +.page-content-actions { + padding: 0 20px 20px; +} +.page-content-actions .dropdown { + display: inline-block; +} +.page-content-actions:before, .page-content-actions:after { + display: table; + content: " "; +} +.page-content-actions:after { + clear: both; +} +.page-content-table { + max-width: 100%; + padding: 0; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +.page-content-table .table > thead > tr > th, .page-content-table .table > tbody > tr > th, .page-content-table .table > thead > tr > td, .page-content-table .table > tbody > tr > td { + padding-top: 20px; + padding-bottom: 20px; +} +.page-content-table .table > thead > tr > th:first-child, .page-content-table .table > tbody > tr > th:first-child, .page-content-table .table > thead > tr > td:first-child, .page-content-table .table > tbody > tr > td:first-child { + padding-left: 20px; +} +.page-content-table .table > thead > tr > th:last-child, .page-content-table .table > tbody > tr > th:last-child, .page-content-table .table > thead > tr > td:last-child, .page-content-table .table > tbody > tr > td:last-child { + padding-right: 20px; +} +.page-content-table .table > tbody > tr:hover > td { + background-color: #f3f7f9; +} +.page-content-table .table > tbody > tr > td { + cursor: pointer; +} +.page-content-table .table > tbody > tr:last-child td { + border-bottom: 1px solid #e4eaec; +} +.page-content-table .table.is-indent > thead > tr > th.pre-cell, .page-content-table .table.is-indent > tbody > tr > th.pre-cell, .page-content-table .table.is-indent > thead > tr > td.pre-cell, .page-content-table .table.is-indent > tbody > tr > td.pre-cell, .page-content-table .table.is-indent > thead > tr > th.suf-cell, .page-content-table .table.is-indent > tbody > tr > th.suf-cell, .page-content-table .table.is-indent > thead > tr > td.suf-cell, .page-content-table .table.is-indent > tbody > tr > td.suf-cell { + width: 30px; + padding: 0; + border-top: none; + border-bottom: none; +} +.page-content-table .table.is-indent > tbody > tr:first-child td { + border-top: none; +} +.page-content-table .table.is-indent > tbody > tr:last-child td.pre-cell, .page-content-table .table.is-indent > tbody > tr:last-child td.suf-cell { + border-bottom: none; +} +.page-content-table .table.is-indent > tfoot > tr > td { + border-top: none; +} +.page-content-table .pagination { + margin-right: 20px; + margin-left: 20px; +} +.page-copyright { + margin-top: 60px; + font-size: 12px; + color: #37474f; + letter-spacing: 1px; +} +.page-copyright .social a { + margin: 0 10px; + text-decoration: none; +} +.page-copyright .social .icon { + font-size: 16px; + color: rgba(55, 71, 79, .6); +} +.page-copyright .social .icon:hover, .page-copyright .social .icon:focus { + color: rgba(55, 71, 79, .8); +} +.page-copyright .social .icon.active, .page-copyright .social .icon:active { + color: #37474f; +} +.page-copyright-inverse { + color: #fff; +} +.page-copyright-inverse .social .icon { + color: #fff; +} +.page-copyright-inverse .social .icon:hover, .page-copyright-inverse .social .icon:active { + color: rgba(255, 255, 255, .8); +} +.page-header + .page-content { + padding-top: 0; +} +.page-title { + margin-top: 0; + margin-bottom: 0; + font-size: 18px; +} +.page-title > .icon { + margin-right: .3em; +} +.page-description { + margin-top: 6px; + color: #a3afb7; +} +.page-header { + position: relative; + padding: 20px 20px; + margin-top: 0; + margin-bottom: 0; + background: transparent; + border-bottom: none; +} +.page-header-actions { + position: absolute; + top: 50%; + right: 20px; + z-index: 1; + margin: auto; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.page-header-actions .btn-icon { + margin-left: 6px; +} +.page-header-actions > * { + margin-bottom: 0; +} +.page-header .breadcrumb { + padding: 0; + margin: 6px 0 0; +} +.page-header-bordered { + padding-top: 20px; + padding-bottom: 20px; + margin-bottom: 20px; + background-color: #fff; + border-bottom: 1px solid transparent; +} +.page-header-tabs { + padding-bottom: 0; +} +.page-header-tabs .nav-tabs-line { + margin-top: 5px; + border-bottom-color: transparent; +} +.page-header-tabs .nav-tabs-line > li > a { + padding: 5px 20px; +} +.page-aside { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 220px; + overflow-y: hidden; + background: #fff; + border-right: 1px solid #e4eaec; + -webkit-transition: visibility .1s ease, top .3s ease, left .5s ease; + -o-transition: visibility .1s ease, top .3s ease, left .5s ease; + transition: visibility .1s ease, top .3s ease, left .5s ease; +} +.page-aside + .page-main { + height: 100%; + margin-left: 220px; + overflow-y: auto; +} +.page-aside .list-group-item.active, .page-aside .list-group-item.active:focus, .page-aside .list-group-item.active:hover { + z-index: 0; +} +.page-aside-inner { + height: 100%; +} +.page-aside-section { + position: relative; +} +.page-aside-section:first-child { + padding-top: 11px; +} +.page-aside-section:last-child { + margin-bottom: 11px; +} +.page-aside-section:after { + position: relative; + display: block; + margin: 11px; + content: ""; + border-bottom: 1px solid #e4eaec; +} +.page-aside-section:last-child:after { + display: none; +} +.page-aside-switch { + position: absolute; + top: -webkit-calc(50% - 40px); + top: calc(50% - 40px); + left: -webkit-calc(100% - 1px); + left: calc(100% - 1px); + display: none; + padding: 25px 16px 25px 4px; + line-height: 1; + cursor: pointer; + background-color: white; + border-radius: 0 100px 100px 0; + -webkit-box-shadow: 1px 0 3px rgba(0, 0, 0, .2); + box-shadow: 1px 0 3px rgba(0, 0, 0, .2); +} +.page-aside-switch .wb-chevron-right { + display: inline; +} +.page-aside-switch .wb-chevron-left { + display: none; +} +.page-aside-title { + padding: 10px 20px; + overflow: hidden; + font-weight: 400; + color: #526069; + text-overflow: ellipsis; + white-space: nowrap; + cursor: default; +} +.page-aside .list-group { + margin-bottom: 22px; +} +.page-aside .list-group-item { + padding: 13px 20px; + margin-bottom: 1px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border: none; + border-radius: 0; +} +.page-aside .list-group-item .icon { + color: #a3afb7; +} +.page-aside .list-group-item .item-right { + float: right; +} +.page-aside .list-group-item:hover, .page-aside .list-group-item:focus { + color: #62a8ea; + background-color: #f3f7f9; + border: none; +} +.page-aside .list-group-item:hover > .icon, .page-aside .list-group-item:focus > .icon { + color: #62a8ea; +} +.page-aside .list-group-item.active { + color: #62a8ea; + background-color: transparent; +} +.page-aside .list-group-item.active > .icon { + color: #62a8ea; +} +.page-aside .list-group-item.active:hover, .page-aside .list-group-item.active:focus { + color: #62a8ea; + background-color: #f3f7f9; + border: none; +} +.page-aside .list-group-item.active:hover > .icon, .page-aside .list-group-item.active:focus > .icon { + color: #62a8ea; +} +.page-aside .list-group.has-actions .list-group-item { + padding-top: 6px; + padding-bottom: 6px; + line-height: 32px; + cursor: pointer; +} +.page-aside .list-group.has-actions .list-group-item .list-editable { + position: relative; + display: none; +} +.page-aside .list-group.has-actions .list-group-item .list-editable .input-editable-close { + position: absolute; + top: 50%; + right: 0; + z-index: 1; + -webkit-appearance: none; + padding: 0; + margin: 0; + cursor: pointer; + background: 0 0; + border: 0; + outline: none; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.page-aside .list-group.has-actions .list-group-item .list-editable .form-group { + margin: 0; +} +.page-aside .list-group.has-actions .list-group-item .item-actions { + position: absolute; + top: 6px; + right: 20px; + display: none; +} +.page-aside .list-group.has-actions .list-group-item .item-actions .btn-icon { + padding-right: 2px; + padding-left: 2px; + background-color: transparent; +} +.page-aside .list-group.has-actions .list-group-item .item-actions .btn-icon:hover .icon { + color: #62a8ea; +} +.page-aside .list-group.has-actions .list-group-item .item-actions .icon { + margin: 0; +} +.page-aside .list-group.has-actions .list-group-item:hover .item-right { + display: none; +} +.page-aside .list-group.has-actions .list-group-item:hover .item-actions { + display: block; +} +.page-aside .list-group.has-actions .list-group-item:hover .item-actions .icon { + color: #76838f; +} +@media (max-width: 1199px) { + .page-aside { + width: 220px; + } + .page-aside + .page-main { + margin-left: 220px; + } +} +@media (max-width: 767px) { + .page-aside { + position: fixed; + top: 100px; + left: -220px; + z-index: 900; + width: 220px; + height: -webkit-calc(100% - 140px); + height: calc(100% - 140px); + overflow-y: visible; + visibility: visible; + } + .site-navbar-collapse-show .page-aside { + top: 120px; + height: -webkit-calc(100% - 120px); + height: calc(100% - 120px); + } + .site-menubar-changing .page-aside, .site-menubar-open .page-aside { + height: 100%; + } + .page-aside .page-aside-inner { + background-color: white; + } + .page-aside.open { + left: 0; + } + .site-menubar-changing .page-aside.open, .site-menubar-open .page-aside.open { + visibility: hidden; + } + .page-aside.open .page-aside-switch .wb-chevron-right { + display: none; + } + .page-aside.open .page-aside-switch .wb-chevron-left { + display: inline; + } + .page-aside + .page-main { + margin-left: 0; + } + .page-aside-switch { + display: block; + } +} +@media (max-width: 480px) { + .page-aside { + top: 60px; + height: -webkit-calc(100% - 60px); + height: calc(100% - 60px); + } +} +.site-action { + position: fixed; + right: 25px; + bottom: 65px; + z-index: 1290; + z-index: 1030; + -webkit-animation-duration: 3s; + -o-animation-duration: 3s; + animation-duration: 3s; +} +.site-action input { + display: none; +} +.site-action .btn { + -webkit-box-shadow: 0 0 10px 0 rgba(60, 60, 60, .1); + box-shadow: 0 0 10px 0 rgba(60, 60, 60, .1); +} +.site-action .front-icon { + display: block; +} +.site-action .back-icon { + display: none; +} +.site-action-buttons { + position: absolute; + bottom: 56px; + left: 0; + display: none; + width: 100%; + text-align: center; +} +.site-action-buttons .btn { + display: block; + margin: 0 auto; + margin-bottom: 10px; + -webkit-animation-delay: 100ms; + -o-animation-delay: 100ms; + animation-delay: 100ms; +} +.site-action.active .front-icon { + display: none; +} +.site-action.active .back-icon { + display: block; +} +.site-action.active .site-action-buttons { + display: block; +} +@media (max-width: 767px) { + .site-action .btn-floating { + width: 46px; + height: 46px; + padding: 0; + font-size: 16px; + -webkit-box-shadow: 0 6px 6px 0 rgba(60, 60, 60, .1); + box-shadow: 0 6px 6px 0 rgba(60, 60, 60, .1); + } + .site-action-buttons { + bottom: 46px; + } +} +@media (max-width: 480px) { + .site-action { + bottom: 25px; + } +} +.radio-custom, .checkbox-custom { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio-custom label, .checkbox-custom label { + min-height: 22px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} +.radio-custom input[type="radio"], .checkbox-custom input[type="checkbox"] { + position: absolute; + margin-top: 0; + margin-bottom: 0; + margin-left: -20px; +} +.radio-custom.disabled label, .checkbox-custom.disabled label, fieldset[disabled] .radio-custom label, fieldset[disabled] .checkbox-custom label { + cursor: not-allowed; +} +.input-group-addon .radio-custom, .input-group-addon .checkbox-custom { + margin: 0; +} +.checkbox-custom { + padding-left: 20px; +} +.checkbox-custom label { + position: relative; + display: inline-block; + padding-left: 10px; + vertical-align: middle; +} +.checkbox-custom label:empty { + padding-left: 0; +} +.checkbox-custom label::before { + position: absolute; + left: 0; + display: inline-block; + width: 20px; + height: 20px; + margin-left: -20px; + content: ""; + background-color: #fff; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-transition: all .3s ease-in-out 0s; + -o-transition: all .3s ease-in-out 0s; + transition: all .3s ease-in-out 0s; +} +.checkbox-custom label::after { + position: absolute; + top: 0; + left: 0; + display: inline-block; + width: 20px; + height: 20px; + padding-top: 1px; + margin-left: -20px; + font-size: 12px; + line-height: 20px; + color: #76838f; + text-align: center; +} +.checkbox-custom input[type="checkbox"], .checkbox-custom input[type="radio"] { + z-index: 1; + width: 20px; + height: 20px; + opacity: 0; +} +.checkbox-custom input[type="checkbox"]:focus + label::before, .checkbox-custom input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} +.checkbox-custom input[type="checkbox"]:checked + label::before, .checkbox-custom input[type="radio"]:checked + label::before { + border-color: #e4eaec; + border-width: 10px; + -webkit-transition: all 300ms ease-in-out 0s; + -o-transition: all 300ms ease-in-out 0s; + transition: all 300ms ease-in-out 0s; +} +.checkbox-custom input[type="checkbox"]:checked + label::after, .checkbox-custom input[type="radio"]:checked + label::after { + font-family: "Web Icons"; + content: "\f192"; +} +.checkbox-custom input[type="checkbox"]:disabled + label, .checkbox-custom input[type="radio"]:disabled + label { + opacity: .65; +} +.checkbox-custom input[type="checkbox"]:disabled + label::before, .checkbox-custom input[type="radio"]:disabled + label::before { + cursor: not-allowed; + background-color: #f3f7f9; + border-color: #e4eaec; + border-width: 1px; +} +.checkbox-custom.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox-custom.checkbox-inline { + display: inline-block; + margin-top: 0; + margin-bottom: 0; +} +.checkbox-inline + .checkbox-inline { + margin-left: 20px; +} +.checkbox-default input[type="checkbox"]:checked + label::before, .checkbox-default input[type="radio"]:checked + label::before { + background-color: #fff; + border-color: #e4eaec; + border-width: 1px; +} +.checkbox-default input[type="checkbox"]:checked + label::after, .checkbox-default input[type="radio"]:checked + label::after { + color: #62a8ea; +} +.checkbox-primary input[type="checkbox"]:checked + label::before, .checkbox-primary input[type="radio"]:checked + label::before { + background-color: #62a8ea; + border-color: #62a8ea; +} +.checkbox-primary input[type="checkbox"]:checked + label::after, .checkbox-primary input[type="radio"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before, .checkbox-danger input[type="radio"]:checked + label::before { + background-color: #f96868; + border-color: #f96868; +} +.checkbox-danger input[type="checkbox"]:checked + label::after, .checkbox-danger input[type="radio"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before, .checkbox-info input[type="radio"]:checked + label::before { + background-color: #57c7d4; + border-color: #57c7d4; +} +.checkbox-info input[type="checkbox"]:checked + label::after, .checkbox-info input[type="radio"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before, .checkbox-warning input[type="radio"]:checked + label::before { + background-color: #f2a654; + border-color: #f2a654; +} +.checkbox-warning input[type="checkbox"]:checked + label::after, .checkbox-warning input[type="radio"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-success input[type="radio"]:checked + label::before { + background-color: #46be8a; + border-color: #46be8a; +} +.checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-success input[type="radio"]:checked + label::after { + color: #fff; +} +.checkbox-sm { + padding-left: 18px; +} +.checkbox-sm label { + padding-left: 8px; +} +.checkbox-sm label:empty { + padding-left: 0; +} +.checkbox-sm label::before, .checkbox-sm label::after { + width: 18px; + height: 18px; + margin-left: -18px; +} +.checkbox-sm label::after { + font-size: 10px; + line-height: 18px; +} +.checkbox-sm input[type="checkbox"], .checkbox-sm input[type="radio"] { + width: 18px; + height: 18px; +} +.checkbox-sm input[type="checkbox"]:checked + label::before, .checkbox-sm input[type="radio"]:checked + label::before { + border-width: 9px; +} +.checkbox-lg { + padding-left: 24px; +} +.checkbox-lg label { + padding-left: 12px; +} +.checkbox-lg label:empty { + padding-left: 0; +} +.checkbox-lg label::before, .checkbox-lg label::after { + width: 24px; + height: 24px; + margin-left: -24px; +} +.checkbox-lg label::after { + font-size: 14px; + line-height: 24px; +} +.checkbox-lg input[type="checkbox"], .checkbox-lg input[type="radio"] { + width: 24px; + height: 24px; +} +.checkbox-lg input[type="checkbox"]:checked + label::before, .checkbox-lg input[type="radio"]:checked + label::before { + border-width: 12px; +} +.radio-custom { + padding-left: 20px; +} +.radio-custom label { + position: relative; + display: inline-block; + padding-left: 10px; + vertical-align: middle; +} +.radio-custom label:empty { + padding-left: 0; +} +.radio-custom label::before { + position: absolute; + left: 0; + display: inline-block; + width: 20px; + height: 20px; + margin-left: -20px; + content: ""; + background-color: #fff; + border: 1px solid #e4eaec; + border-radius: 50%; + -webkit-transition: border 300ms ease-in-out 0s, color 300ms ease-in-out 0s; + -o-transition: border 300ms ease-in-out 0s, color 300ms ease-in-out 0s; + transition: border 300ms ease-in-out 0s, color 300ms ease-in-out 0s; +} +.radio-custom label::after { + position: absolute; + top: 7px; + left: 7px; + display: inline-block; + width: 6px; + height: 6px; + margin-left: -20px; + content: " "; + background-color: transparent; + border: 2px solid #76838f; + border-radius: 50%; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + + transition-transform: .1s cubic-bezier(.8, -.33, .2, 1.33); +} +.radio-custom input[type="radio"] { + z-index: 1; + width: 20px; + height: 20px; + opacity: 0; +} +.radio-custom input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} +.radio-custom input[type="radio"]:checked + label::before { + border-color: #e4eaec; + border-width: 10px; +} +.radio-custom input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio-custom input[type="radio"]:disabled + label { + opacity: .65; +} +.radio-custom input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio-custom.radio-inline { + display: inline-block; + margin-top: 0; + margin-bottom: 0; +} +.radio-inline + .radio-inline { + margin-left: 20px; +} +.radio-default input[type="radio"]:checked + label::before { + background-color: #fff; + border-color: #e4eaec; + border-width: 1px; +} +.radio-default input[type="radio"]:checked + label::after { + border-color: #62a8ea; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #62a8ea; +} +.radio-primary input[type="radio"]:checked + label::after { + border-color: #fff; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #f96868; +} +.radio-danger input[type="radio"]:checked + label::after { + border-color: #fff; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #57c7d4; +} +.radio-info input[type="radio"]:checked + label::after { + border-color: #fff; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f2a654; +} +.radio-warning input[type="radio"]:checked + label::after { + border-color: #fff; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #46be8a; +} +.radio-success input[type="radio"]:checked + label::after { + border-color: #fff; +} +.radio-sm { + padding-left: 18px; +} +.radio-sm label { + padding-left: 8px; +} +.radio-sm label:empty { + padding-left: 0; +} +.radio-sm label::before { + width: 18px; + height: 18px; + margin-left: -20px; +} +.radio-sm label::after { + top: 7px; + left: 7px; + width: 4px; + height: 4px; + margin-left: -20px; + border-width: 2px; +} +.radio-sm input[type="radio"] { + width: 18px; + height: 18px; +} +.radio-sm input[type="radio"]:checked + label::before { + border-width: 9px; +} +.radio-lg { + padding-left: 24px; +} +.radio-lg label { + padding-left: 12px; +} +.radio-lg label:empty { + padding-left: 0; +} +.radio-lg label::before { + width: 24px; + height: 24px; + margin-left: -20px; +} +.radio-lg label::after { + top: 8px; + left: 8px; + width: 8px; + height: 8px; + margin-left: -20px; + border-width: 2px; +} +.radio-lg input[type="radio"] { + width: 24px; + height: 24px; +} +.radio-lg input[type="radio"]:checked + label::before { + border-width: 12px; +} +@media (min-width: 768px) { + .form-inline .radio-custom, .form-inline .checkbox-custom { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio-custom label, .form-inline .checkbox-custom label { + padding-left: 0; + } + .form-inline .radio-custom input[type="radio"], .form-inline .checkbox-custom input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .radio-custom label { + padding-left: 10px; + } + .form-inline .checkbox-custom label { + padding-left: 10px; + } + .form-inline .checkbox-custom input[type="checkbox"] { + position: absolute; + margin-left: -20px; + } + .form-inline .radio-custom input[type="radio"] { + position: absolute; + margin-left: -20px; + } +} +.form-horizontal .radio-custom, .form-horizontal .checkbox-custom { + padding-top: 5px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio-custom, .form-horizontal .checkbox-custom { + min-height: 27px; +} +.form-horizontal .input-group-addon .radio-custom, .form-horizontal .input-group-addon .checkbox-custom { + padding-top: 0; +} +.form-horizontal .input-group-addon .radio-custom, .form-horizontal .input-group-addon .checkbox-custom { + min-height: 22px; +} +.form-material { + position: relative; +} +.form-material.floating { + margin-top: 20px; + margin-bottom: 20px; +} +.form-material.floating + .form-material.floating { + margin-top: 40px; +} +.form-material .form-control { + padding: 0; + background-color: transparent; + background-color: rgba(0, 0, 0, 0); + background-repeat: no-repeat; + background-position: center bottom, center -webkit-calc(100% - 1px); + background-position: center bottom, center calc(100% - 1px); + -webkit-background-size: 0 2px, 100% 1px; + background-size: 0 2px, 100% 1px; + -webkit-transition: background 0s ease-out; + -o-transition: background 0s ease-out; + transition: background 0s ease-out; +} +.form-material .form-control, .form-material .form-control:focus, .form-material .form-control.focus { + float: none; + background-image: -webkit-gradient(linear, left top, left bottom, from(#62a8ea), to(#62a8ea)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#62a8ea, #62a8ea), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#62a8ea, #62a8ea), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#62a8ea, #62a8ea), linear-gradient(#e4eaec, #e4eaec); + border: 0; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.no-cssgradients .form-material .form-control { + border-bottom: 2px solid #e4eaec; +} +.form-material .form-control::-webkit-input-placeholder { + color: #a3afb7; +} +.form-material .form-control::-moz-placeholder { + color: #a3afb7; +} +.form-material .form-control:-ms-input-placeholder { + color: #a3afb7; +} +.form-material .form-control:disabled::-webkit-input-placeholder { + color: #ccd5db; +} +.form-material .form-control:disabled::-moz-placeholder { + color: #ccd5db; +} +.form-material .form-control:disabled:-ms-input-placeholder { + color: #ccd5db; +} +.form-material .form-control:focus, .form-material .form-control.focus { + -webkit-background-size: 100% 2px, 100% 1px; + background-size: 100% 2px, 100% 1px; + outline: none; + -webkit-transition-duration: .3s; + -o-transition-duration: .3s; + transition-duration: .3s; +} +.no-cssgradients .form-material .form-control:focus, .no-cssgradients .form-material .form-control.focus { + background: transparent; + border-bottom: 2px solid #62a8ea; +} +.form-material .form-control:disabled, .form-material .form-control[disabled], fieldset[disabled] .form-material .form-control { + background: transparent; + background: rgba(0, 0, 0, 0); + border-bottom: 1px dashed #ccd5db; +} +.form-material .form-control:disabled ~ .floating-label, .form-material .form-control[disabled] ~ .floating-label, fieldset[disabled] .form-material .form-control ~ .floating-label { + color: #ccd5db; +} +.form-material .control-label { + margin-bottom: 0; +} +.form-material .floating-label { + position: absolute; + left: 0; + font-size: 14px; + color: #76838f; + pointer-events: none; + -webkit-transition: .3s ease all; + -o-transition: .3s ease all; + transition: .3s ease all; +} +.form-material .floating-label.floating-label-static { + position: relative; + top: auto; + display: block; +} +.form-material [class*="col-"] > .floating-label { + left: 12px; +} +.form-material .form-control ~ .floating-label { + top: 8.4px; + font-size: 14px; +} +.form-material .form-control:focus ~ .floating-label, .form-material .form-control.focus ~ .floating-label, .form-material .form-control:not(.empty) ~ .floating-label { + top: -11.2px; + font-size: 11.2px; +} +.form-material .form-control:-webkit-autofill ~ .floating-label { + top: -11.2px; + font-size: 11.2px; +} +.form-material .form-control.input-sm ~ .floating-label { + top: 6px; + font-size: 12px; +} +.form-material .form-control.input-sm:focus ~ .floating-label, .form-material .form-control.input-sm.focus ~ .floating-label, .form-material .form-control.input-sm:not(.empty) ~ .floating-label { + top: -9.6px; + font-size: 9.6px; +} +.form-material .form-control.input-sm:-webkit-autofill ~ .floating-label { + top: -9.6px; + font-size: 9.6px; +} +.form-material .form-control.input-lg ~ .floating-label { + top: 5.9999994px; + font-size: 18px; +} +.form-material .form-control.input-lg:focus ~ .floating-label, .form-material .form-control.input-lg.focus ~ .floating-label, .form-material .form-control.input-lg:not(.empty) ~ .floating-label { + top: -14.4px; + font-size: 14.4px; +} +.form-material .form-control.input-lg:-webkit-autofill ~ .floating-label { + top: -14.4px; + font-size: 14.4px; +} +.form-material textarea.form-control { + padding-bottom: 4px; + resize: none; +} +.form-material.floating textarea.form-control { + padding-top: 4px; +} +.form-material select.form-control { + border: 0; + border-radius: 0; +} +.form-material:not(.floating) .control-label + select[multiple] { + margin-top: 5px; +} +.form-material .hint { + position: absolute; + display: none; + font-size: 80%; +} +.form-material .form-control:focus ~ .hint, .form-material .form-control.focus ~ .hint { + display: block; +} +.form-material .form-control:not(.empty):invalid ~ .floating-label, .form-material .form-control.focus:invalid ~ .floating-label { + color: #f96868; +} +.form-material .form-control:invalid { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f96868), to(#f96868)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#f96868, #f96868), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#f96868, #f96868), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#f96868, #f96868), linear-gradient(#e4eaec, #e4eaec); +} +.form-material.form-group.has-warning .form-control:focus, .form-material.form-group.has-warning .form-control.focus, .form-material.form-group.has-warning .form-control:not(.empty) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2a654), to(#f2a654)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#f2a654, #f2a654), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#f2a654, #f2a654), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#f2a654, #f2a654), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-warning .form-control:focus, .no-cssgradients .form-material.form-group.has-warning .form-control.focus, .no-cssgradients .form-material.form-group.has-warning .form-control:not(.empty) { + background: transparent; + border-bottom: 2px solid #f2a654; +} +.form-material.form-group.has-warning .form-control:-webkit-autofill { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2a654), to(#f2a654)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#f2a654, #f2a654), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#f2a654, #f2a654), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-warning .form-control:-webkit-autofill { + background: transparent; + border-bottom: 2px solid #f2a654; +} +.form-material.form-group.has-warning .form-control:not(.empty) { + -webkit-background-size: 100% 2px, 100% 1px; + background-size: 100% 2px, 100% 1px; +} +.form-material.form-group.has-warning .control-label { + color: #f2a654; +} +.form-material.form-group.has-warning .form-control:focus ~ .floating-label, .form-material.form-group.has-warning .form-control.focus ~ .floating-label, .form-material.form-group.has-warning .form-control:not(.empty) ~ .floating-label { + color: #f2a654; +} +.form-material.form-group.has-warning .form-control:-webkit-autofill ~ .floating-label { + color: #f2a654; +} +.form-material.form-group.has-error .form-control:focus, .form-material.form-group.has-error .form-control.focus, .form-material.form-group.has-error .form-control:not(.empty) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f96868), to(#f96868)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#f96868, #f96868), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#f96868, #f96868), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#f96868, #f96868), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-error .form-control:focus, .no-cssgradients .form-material.form-group.has-error .form-control.focus, .no-cssgradients .form-material.form-group.has-error .form-control:not(.empty) { + background: transparent; + border-bottom: 2px solid #f96868; +} +.form-material.form-group.has-error .form-control:-webkit-autofill { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f96868), to(#f96868)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#f96868, #f96868), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#f96868, #f96868), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-error .form-control:-webkit-autofill { + background: transparent; + border-bottom: 2px solid #f96868; +} +.form-material.form-group.has-error .form-control:not(.empty) { + -webkit-background-size: 100% 2px, 100% 1px; + background-size: 100% 2px, 100% 1px; +} +.form-material.form-group.has-error .control-label { + color: #f96868; +} +.form-material.form-group.has-error .form-control:focus ~ .floating-label, .form-material.form-group.has-error .form-control.focus ~ .floating-label, .form-material.form-group.has-error .form-control:not(.empty) ~ .floating-label { + color: #f96868; +} +.form-material.form-group.has-error .form-control:-webkit-autofill ~ .floating-label { + color: #f96868; +} +.form-material.form-group.has-success .form-control:focus, .form-material.form-group.has-success .form-control.focus, .form-material.form-group.has-success .form-control:not(.empty) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#46be8a), to(#46be8a)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#46be8a, #46be8a), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#46be8a, #46be8a), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#46be8a, #46be8a), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-success .form-control:focus, .no-cssgradients .form-material.form-group.has-success .form-control.focus, .no-cssgradients .form-material.form-group.has-success .form-control:not(.empty) { + background: transparent; + border-bottom: 2px solid #46be8a; +} +.form-material.form-group.has-success .form-control:-webkit-autofill { + background-image: -webkit-gradient(linear, left top, left bottom, from(#46be8a), to(#46be8a)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#46be8a, #46be8a), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#46be8a, #46be8a), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-success .form-control:-webkit-autofill { + background: transparent; + border-bottom: 2px solid #46be8a; +} +.form-material.form-group.has-success .form-control:not(.empty) { + -webkit-background-size: 100% 2px, 100% 1px; + background-size: 100% 2px, 100% 1px; +} +.form-material.form-group.has-success .control-label { + color: #46be8a; +} +.form-material.form-group.has-success .form-control:focus ~ .floating-label, .form-material.form-group.has-success .form-control.focus ~ .floating-label, .form-material.form-group.has-success .form-control:not(.empty) ~ .floating-label { + color: #46be8a; +} +.form-material.form-group.has-success .form-control:-webkit-autofill ~ .floating-label { + color: #46be8a; +} +.form-material.form-group.has-info .form-control:focus, .form-material.form-group.has-info .form-control.focus, .form-material.form-group.has-info .form-control:not(.empty) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#57c7d4), to(#57c7d4)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#57c7d4, #57c7d4), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: -o-linear-gradient(#57c7d4, #57c7d4), -o-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#57c7d4, #57c7d4), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-info .form-control:focus, .no-cssgradients .form-material.form-group.has-info .form-control.focus, .no-cssgradients .form-material.form-group.has-info .form-control:not(.empty) { + background: transparent; + border-bottom: 2px solid #57c7d4; +} +.form-material.form-group.has-info .form-control:-webkit-autofill { + background-image: -webkit-gradient(linear, left top, left bottom, from(#57c7d4), to(#57c7d4)), -webkit-gradient(linear, left top, left bottom, from(#e4eaec), to(#e4eaec)); + background-image: -webkit-linear-gradient(#57c7d4, #57c7d4), -webkit-linear-gradient(#e4eaec, #e4eaec); + background-image: linear-gradient(#57c7d4, #57c7d4), linear-gradient(#e4eaec, #e4eaec); +} +.no-cssgradients .form-material.form-group.has-info .form-control:-webkit-autofill { + background: transparent; + border-bottom: 2px solid #57c7d4; +} +.form-material.form-group.has-info .form-control:not(.empty) { + -webkit-background-size: 100% 2px, 100% 1px; + background-size: 100% 2px, 100% 1px; +} +.form-material.form-group.has-info .control-label { + color: #57c7d4; +} +.form-material.form-group.has-info .form-control:focus ~ .floating-label, .form-material.form-group.has-info .form-control.focus ~ .floating-label, .form-material.form-group.has-info .form-control:not(.empty) ~ .floating-label { + color: #57c7d4; +} +.form-material.form-group.has-info .form-control:-webkit-autofill ~ .floating-label { + color: #57c7d4; +} +.form-material .input-group .form-control-wrap { + margin-right: 5px; + margin-left: 5px; +} +.form-material .input-group .form-control-wrap .form-control { + float: none; +} +.form-material .input-group .input-group-addon { + background: transparent; + border: 0; +} +.form-material .input-group .input-group-btn .btn { + margin: 0; + border-radius: 4px; +} +.form-material input[type=file] { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 100; + width: 100%; + height: 100%; + opacity: 0; +} +.form-control-wrap { + position: relative; +} +.loader { + position: relative; + display: inline-block; + margin: 0 auto; + font-size: 30px; + text-indent: -9999em; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.loader.loader-default { + width: 1em; + height: 1em; + background-color: #a3afb7; + border-radius: 100%; + -webkit-animation: loader-default 1s infinite ease-in-out; + -o-animation: loader-default 1s infinite ease-in-out; + animation: loader-default 1s infinite ease-in-out; +} +.loader.loader-grill { + width: .25em; + height: .5em; + background: #a3afb7; + -webkit-animation: default-grill 1s infinite ease-in-out; + -o-animation: default-grill 1s infinite ease-in-out; + animation: default-grill 1s infinite ease-in-out; + -webkit-animation-delay: -.16s; + -o-animation-delay: -.16s; + animation-delay: -.16s; +} +.loader.loader-grill:before, .loader.loader-grill:after { + position: absolute; + top: 0; + width: 100%; + height: 100%; + content: ""; + background: #a3afb7; + -webkit-animation: default-grill 1s infinite ease-in-out; + -o-animation: default-grill 1s infinite ease-in-out; + animation: default-grill 1s infinite ease-in-out; +} +.loader.loader-grill:before { + left: -.375em; + -webkit-animation-delay: -.32s; + -o-animation-delay: -.32s; + animation-delay: -.32s; +} +.loader.loader-grill:after { + left: .375em; +} +.loader.loader-circle { + width: 1em; + height: 1em; + border-top: .125em solid rgba(163, 175, 183, .5); + border-right: .125em solid rgba(163, 175, 183, .5); + border-bottom: .125em solid rgba(163, 175, 183, .5); + border-left: .125em solid #a3afb7; + border-radius: 50%; + -webkit-animation: loader-circle 1.1s infinite linear; + -o-animation: loader-circle 1.1s infinite linear; + animation: loader-circle 1.1s infinite linear; +} +.loader.loader-tadpole { + width: 1em; + height: 1em; + border-radius: 50%; + -webkit-animation: loader-tadpole 1.7s infinite ease; + -o-animation: loader-tadpole 1.7s infinite ease; + animation: loader-tadpole 1.7s infinite ease; +} +.loader.loader-ellipsis { + top: -.625em; + width: .625em; + height: .625em; + border-radius: 50%; + -webkit-animation: loader-ellipsis 1.8s infinite ease-in-out; + -o-animation: loader-ellipsis 1.8s infinite ease-in-out; + animation: loader-ellipsis 1.8s infinite ease-in-out; + -webkit-animation-delay: -.16s; + -o-animation-delay: -.16s; + animation-delay: -.16s; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.loader.loader-ellipsis:before, .loader.loader-ellipsis:after { + position: absolute; + top: 0; + width: 100%; + height: 100%; + content: ""; + border-radius: 50%; + -webkit-animation: loader-ellipsis 1.8s infinite ease-in-out; + -o-animation: loader-ellipsis 1.8s infinite ease-in-out; + animation: loader-ellipsis 1.8s infinite ease-in-out; + + -webkit-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +.loader.loader-ellipsis:before { + left: -.875em; + -webkit-animation-delay: -.32s; + -o-animation-delay: -.32s; + animation-delay: -.32s; +} +.loader.loader-ellipsis:after { + left: .875em; +} +.loader.loader-dot { + width: 2em; + height: 2em; + -webkit-animation: loader-dot-rotate 2s infinite linear; + -o-animation: loader-dot-rotate 2s infinite linear; + animation: loader-dot-rotate 2s infinite linear; +} +.loader.loader-dot:before, .loader.loader-dot:after { + position: absolute; + top: 0; + left: 0; + width: 60%; + height: 60%; + content: ""; + background: #a3afb7; + border-radius: 100%; + -webkit-animation: loader-dot-bounce 2s infinite ease-in-out; + -o-animation: loader-dot-bounce 2s infinite ease-in-out; + animation: loader-dot-bounce 2s infinite ease-in-out; +} +.loader.loader-dot:after { + top: auto; + bottom: 0; + -webkit-animation-delay: -1s; + -o-animation-delay: -1s; + animation-delay: -1s; +} +.loader.loader-bounce { + width: 1.5em; + height: 1.5em; +} +.loader.loader-bounce:before, .loader.loader-bounce:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ""; + background: #a3afb7; + border-radius: 50%; + opacity: .6; + -webkit-animation: loader-bounce 2s infinite ease-in-out; + -o-animation: loader-bounce 2s infinite ease-in-out; + animation: loader-bounce 2s infinite ease-in-out; +} +.loader.loader-bounce:after { + -webkit-animation-delay: -1s; + -o-animation-delay: -1s; + animation-delay: -1s; +} +.side-panel-loading, body > .loader { + position: fixed; + top: 50%; + left: 50%; + margin-top: -20px; +} +.site-menubar-unfold > .loader { + margin-left: 130px; +} +.site-menubar-fold > .loader { + margin-left: 45px; +} +.site-menubar-hide.site-menubar-unfold > .loader { + margin-left: 0; +} +@-webkit-keyframes loader-default { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-default { + 0% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-default { + 0% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 100% { + opacity: 0; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + -webkit-box-shadow: 0 0 #a3afb7; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + -webkit-box-shadow: 0 -.25em #a3afb7; + box-shadow: 0 -.25em #a3afb7; + } +} +@-o-keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + box-shadow: 0 -.25em #a3afb7; + } +} +@keyframes default-grill { + 0%, 80%, 100% { + height: 1em; + -webkit-box-shadow: 0 0 #a3afb7; + box-shadow: 0 0 #a3afb7; + } + 40% { + height: 1.2em; + -webkit-box-shadow: 0 -.25em #a3afb7; + box-shadow: 0 -.25em #a3afb7; + } +} +@-webkit-keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-circle { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-tadpole { + 0% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-tadpole { + 0% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-tadpole { + 0% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 5%, 95% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + } + 10%, 59% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.087em -.825em 0 -.42em #a3afb7, -.173em -.812em 0 -.44em #a3afb7, -.256em -.789em 0 -.46em #a3afb7, -.297em -.775em 0 -.477em #a3afb7; + } + 20% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.338em -.758em 0 -.42em #a3afb7, -.555em -.617em 0 -.44em #a3afb7, -.671em -.488em 0 -.46em #a3afb7, -.749em -.34em 0 -.477em #a3afb7; + } + 38% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, -.377em -.74em 0 -.42em #a3afb7, -.645em -.522em 0 -.44em #a3afb7, -.775em -.297em 0 -.46em #a3afb7, -.82em -.09em 0 -.477em #a3afb7; + } + 100% { + -webkit-box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + box-shadow: 0 -.83em 0 -.4em #a3afb7, 0 -.83em 0 -.42em #a3afb7, 0 -.83em 0 -.44em #a3afb7, 0 -.83em 0 -.46em #a3afb7, 0 -.83em 0 -.477em #a3afb7; + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-ellipsis { + 0%, 80%, 100% { + -webkit-box-shadow: 0 .625em 0 -.325em #a3afb7; + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + -webkit-box-shadow: 0 .625em 0 0 #a3afb7; + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@-o-keyframes loader-ellipsis { + 0%, 80%, 100% { + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@keyframes loader-ellipsis { + 0%, 80%, 100% { + -webkit-box-shadow: 0 .625em 0 -.325em #a3afb7; + box-shadow: 0 .625em 0 -.325em #a3afb7; + } + 40% { + -webkit-box-shadow: 0 .625em 0 0 #a3afb7; + box-shadow: 0 .625em 0 0 #a3afb7; + } +} +@-webkit-keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loader-dot-rotate { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-dot-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes loader-bounce { + 0%, 100% { + -webkit-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +[class*=animation-] { + -webkit-animation-duration: .5s; + -o-animation-duration: .5s; + animation-duration: .5s; + -webkit-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} +.animation-hover:not(:hover), .animation-hover:not(:hover) [class*=animation-], .touch .animation-hover:not(.hover), .touch .animation-hover:not(.hover) [class*=animation-] { + -webkit-animation-name: none; + -o-animation-name: none; + animation-name: none; +} +.animation-reverse { + -webkit-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + animation-direction: reverse; +} +.animation-repeat { + -webkit-animation-iteration-count: infinite; + -o-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +.animation-fade { + -webkit-animation-name: fade; + -o-animation-name: fade; + animation-name: fade; + -webkit-animation-duration: .8s; + -o-animation-duration: .8s; + animation-duration: .8s; + -webkit-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; +} +.animation-scale { + -webkit-animation-name: scale-12; + -o-animation-name: scale-12; + animation-name: scale-12; +} +.animation-scale-up { + -webkit-animation-name: fade-scale-02; + -o-animation-name: fade-scale-02; + animation-name: fade-scale-02; +} +.animation-scale-down { + -webkit-animation-name: fade-scale-18; + -o-animation-name: fade-scale-18; + animation-name: fade-scale-18; +} +.animation-slide-top { + -webkit-animation-name: slide-top; + -o-animation-name: slide-top; + animation-name: slide-top; +} +.animation-slide-bottom { + -webkit-animation-name: slide-bottom; + -o-animation-name: slide-bottom; + animation-name: slide-bottom; +} +.animation-slide-left { + -webkit-animation-name: slide-left; + -o-animation-name: slide-left; + animation-name: slide-left; +} +.animation-slide-right { + -webkit-animation-name: slide-right; + -o-animation-name: slide-right; + animation-name: slide-right; +} +.animation-shake { + -webkit-animation-name: shake; + -o-animation-name: shake; + animation-name: shake; +} +.animation-duration-10 { + -webkit-animation-duration: 15s; + -o-animation-duration: 15s; + animation-duration: 15s; +} +.animation-duration-9 { + -webkit-animation-duration: 9s; + -o-animation-duration: 9s; + animation-duration: 9s; +} +.animation-duration-8 { + -webkit-animation-duration: 8s; + -o-animation-duration: 8s; + animation-duration: 8s; +} +.animation-duration-7 { + -webkit-animation-duration: 7s; + -o-animation-duration: 7s; + animation-duration: 7s; +} +.animation-duration-6 { + -webkit-animation-duration: 6s; + -o-animation-duration: 6s; + animation-duration: 6s; +} +.animation-duration-5 { + -webkit-animation-duration: 5s; + -o-animation-duration: 5s; + animation-duration: 5s; +} +.animation-duration-4 { + -webkit-animation-duration: 4s; + -o-animation-duration: 4s; + animation-duration: 4s; +} +.animation-duration-3 { + -webkit-animation-duration: 3s; + -o-animation-duration: 3s; + animation-duration: 3s; +} +.animation-duration-2 { + -webkit-animation-duration: 2s; + -o-animation-duration: 2s; + animation-duration: 2s; +} +.animation-duration-1 { + -webkit-animation-duration: 1s; + -o-animation-duration: 1s; + animation-duration: 1s; +} +.animation-delay-100 { + -webkit-animation-duration: 100ms; + -o-animation-duration: 100ms; + animation-duration: 100ms; +} +.animation-duration-250 { + -webkit-animation-duration: 250ms; + -o-animation-duration: 250ms; + animation-duration: 250ms; +} +.animation-duration-300 { + -webkit-animation-duration: 300ms; + -o-animation-duration: 300ms; + animation-duration: 300ms; +} +.animation-duration-500 { + -webkit-animation-duration: 500ms; + -o-animation-duration: 500ms; + animation-duration: 500ms; +} +.animation-duration-750 { + -webkit-animation-duration: 750ms; + -o-animation-duration: 750ms; + animation-duration: 750ms; +} +.animation-delay-1000 { + -webkit-animation-delay: 1s; + -o-animation-delay: 1s; + animation-delay: 1s; +} +.animation-delay-900 { + -webkit-animation-delay: 900ms; + -o-animation-delay: 900ms; + animation-delay: 900ms; +} +.animation-delay-800 { + -webkit-animation-delay: 800ms; + -o-animation-delay: 800ms; + animation-delay: 800ms; +} +.animation-delay-700 { + -webkit-animation-delay: 700ms; + -o-animation-delay: 700ms; + animation-delay: 700ms; +} +.animation-delay-600 { + -webkit-animation-delay: 600ms; + -o-animation-delay: 600ms; + animation-delay: 600ms; +} +.animation-delay-500 { + -webkit-animation-delay: 500ms; + -o-animation-delay: 500ms; + animation-delay: 500ms; +} +.animation-delay-400 { + -webkit-animation-delay: 400ms; + -o-animation-delay: 400ms; + animation-delay: 400ms; +} +.animation-delay-300 { + -webkit-animation-delay: 300ms; + -o-animation-delay: 300ms; + animation-delay: 300ms; +} +.animation-delay-200 { + -webkit-animation-delay: 200ms; + -o-animation-delay: 200ms; + animation-delay: 200ms; +} +.animation-delay-100 { + -webkit-animation-delay: 100ms; + -o-animation-delay: 100ms; + animation-delay: 100ms; +} +.animation-top-left { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + -o-transform-origin: 0 0; + transform-origin: 0 0; +} +.animation-top-center { + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + -o-transform-origin: 50% 0; + transform-origin: 50% 0; +} +.animation-top-right { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -o-transform-origin: 100% 0; + transform-origin: 100% 0; +} +.animation-middle-left { + -webkit-transform-origin: 0 50%; + -ms-transform-origin: 0 50%; + -o-transform-origin: 0 50%; + transform-origin: 0 50%; +} +.animation-middle-right { + -webkit-transform-origin: 100% 50%; + -ms-transform-origin: 100% 50%; + -o-transform-origin: 100% 50%; + transform-origin: 100% 50%; +} +.animation-bottom-left { + -webkit-transform-origin: 0 100%; + -ms-transform-origin: 0 100%; + -o-transform-origin: 0 100%; + transform-origin: 0 100%; +} +.animation-bottom-center { + -webkit-transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -o-transform-origin: 50% 100%; + transform-origin: 50% 100%; +} +.animation-bottom-right { + -webkit-transform-origin: 100% 100%; + -ms-transform-origin: 100% 100%; + -o-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} +.animation-easing-easeInOut { + -webkit-animation-timing-function: cubic-bezier(.42, 0, .58, 1); + -o-animation-timing-function: cubic-bezier(.42, 0, .58, 1); + animation-timing-function: cubic-bezier(.42, 0, .58, 1); +} +.animation-easing-easeInQuad { + -webkit-animation-timing-function: cubic-bezier(.55, .085, .68, .53); + -o-animation-timing-function: cubic-bezier(.55, .085, .68, .53); + animation-timing-function: cubic-bezier(.55, .085, .68, .53); +} +.animation-easing-easeInCubic { + -webkit-animation-timing-function: cubic-bezier(.55, .055, .675, .19); + -o-animation-timing-function: cubic-bezier(.55, .055, .675, .19); + animation-timing-function: cubic-bezier(.55, .055, .675, .19); +} +.animation-easing-easeInQuart { + -webkit-animation-timing-function: cubic-bezier(.895, .03, .685, .22); + -o-animation-timing-function: cubic-bezier(.895, .03, .685, .22); + animation-timing-function: cubic-bezier(.895, .03, .685, .22); +} +.animation-easing-easeInQuint { + -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06); + -o-animation-timing-function: cubic-bezier(.755, .05, .855, .06); + animation-timing-function: cubic-bezier(.755, .05, .855, .06); +} +.animation-easing-easeInSine { + -webkit-animation-timing-function: cubic-bezier(.47, 0, .745, .715); + -o-animation-timing-function: cubic-bezier(.47, 0, .745, .715); + animation-timing-function: cubic-bezier(.47, 0, .745, .715); +} +.animation-easing-easeInExpo { + -webkit-animation-timing-function: cubic-bezier(.95, .05, .795, .035); + -o-animation-timing-function: cubic-bezier(.95, .05, .795, .035); + animation-timing-function: cubic-bezier(.95, .05, .795, .035); +} +.animation-easing-easeInCirc { + -webkit-animation-timing-function: cubic-bezier(.6, .04, .98, .335); + -o-animation-timing-function: cubic-bezier(.6, .04, .98, .335); + animation-timing-function: cubic-bezier(.6, .04, .98, .335); +} +.animation-easing-easeInBack { + -webkit-animation-timing-function: cubic-bezier(.6, -.28, .735, .045); + -o-animation-timing-function: cubic-bezier(.6, -.28, .735, .045); + animation-timing-function: cubic-bezier(.6, -.28, .735, .045); +} +.animation-easing-eastOutQuad { + -webkit-animation-timing-function: cubic-bezier(.25, .46, .45, .94); + -o-animation-timing-function: cubic-bezier(.25, .46, .45, .94); + animation-timing-function: cubic-bezier(.25, .46, .45, .94); +} +.animation-easing-easeOutCubic { + -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1); + -o-animation-timing-function: cubic-bezier(.215, .61, .355, 1); + animation-timing-function: cubic-bezier(.215, .61, .355, 1); +} +.animation-easing-easeOutQuart { + -webkit-animation-timing-function: cubic-bezier(.165, .84, .44, 1); + -o-animation-timing-function: cubic-bezier(.165, .84, .44, 1); + animation-timing-function: cubic-bezier(.165, .84, .44, 1); +} +.animation-easing-easeOutQuint { + -webkit-animation-timing-function: cubic-bezier(.23, 1, .32, 1); + -o-animation-timing-function: cubic-bezier(.23, 1, .32, 1); + animation-timing-function: cubic-bezier(.23, 1, .32, 1); +} +.animation-easing-easeOutSine { + -webkit-animation-timing-function: cubic-bezier(.39, .575, .565, 1); + -o-animation-timing-function: cubic-bezier(.39, .575, .565, 1); + animation-timing-function: cubic-bezier(.39, .575, .565, 1); +} +.animation-easing-easeOutExpo { + -webkit-animation-timing-function: cubic-bezier(.19, 1, .22, 1); + -o-animation-timing-function: cubic-bezier(.19, 1, .22, 1); + animation-timing-function: cubic-bezier(.19, 1, .22, 1); +} +.animation-easing-easeOutCirc { + -webkit-animation-timing-function: cubic-bezier(.075, .82, .165, 1); + -o-animation-timing-function: cubic-bezier(.075, .82, .165, 1); + animation-timing-function: cubic-bezier(.075, .82, .165, 1); +} +.animation-easing-easeOutBack { + -webkit-animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); + -o-animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); + animation-timing-function: cubic-bezier(.175, .885, .32, 1.275); +} +.animation-easing-easeInOutQuad { + -webkit-animation-timing-function: cubic-bezier(.455, .03, .515, .955); + -o-animation-timing-function: cubic-bezier(.455, .03, .515, .955); + animation-timing-function: cubic-bezier(.455, .03, .515, .955); +} +.animation-easing-easeInOutCubic { + -webkit-animation-timing-function: cubic-bezier(.645, .045, .355, 1); + -o-animation-timing-function: cubic-bezier(.645, .045, .355, 1); + animation-timing-function: cubic-bezier(.645, .045, .355, 1); +} +.animation-easing-easeInOutQuart { + -webkit-animation-timing-function: cubic-bezier(.77, 0, .175, 1); + -o-animation-timing-function: cubic-bezier(.77, 0, .175, 1); + animation-timing-function: cubic-bezier(.77, 0, .175, 1); +} +.animation-easing-easeInOutQuint { + -webkit-animation-timing-function: cubic-bezier(.86, 0, .07, 1); + -o-animation-timing-function: cubic-bezier(.86, 0, .07, 1); + animation-timing-function: cubic-bezier(.86, 0, .07, 1); +} +.animation-easing-easeInOutSine { + -webkit-animation-timing-function: cubic-bezier(.445, .05, .55, .95); + -o-animation-timing-function: cubic-bezier(.445, .05, .55, .95); + animation-timing-function: cubic-bezier(.445, .05, .55, .95); +} +.animation-easing-easeInOutExpo { + -webkit-animation-timing-function: cubic-bezier(1, 0, 0, 1); + -o-animation-timing-function: cubic-bezier(1, 0, 0, 1); + animation-timing-function: cubic-bezier(1, 0, 0, 1); +} +.animation-easing-easeInOutCirc { + -webkit-animation-timing-function: cubic-bezier(.785, .135, .15, .86); + -o-animation-timing-function: cubic-bezier(.785, .135, .15, .86); + animation-timing-function: cubic-bezier(.785, .135, .15, .86); +} +.animation-easing-easeInOutBack { + -webkit-animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); + -o-animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); + animation-timing-function: cubic-bezier(.68, -.55, .265, 1.55); +} +.animation-easing-easeInOutElastic { + -webkit-animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); + -o-animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); + animation-timing-function: cubic-bezier(1, -.56, 0, 1.455); +} +@-webkit-keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-o-keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes scale-12 { + 0% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes scale-12 { + 0% { + -o-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes scale-12 { + 0% { + -webkit-transform: scale(1.2); + -o-transform: scale(1.2); + transform: scale(1.2); + } + 100% { + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes fade-scale-02 { + 0% { + opacity: 0; + -webkit-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes fade-scale-02 { + 0% { + opacity: 0; + -o-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes fade-scale-02 { + 0% { + opacity: 0; + -webkit-transform: scale(.2); + -o-transform: scale(.2); + transform: scale(.2); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes fade-scale-18 { + 0% { + opacity: 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes fade-scale-18 { + 0% { + opacity: 0; + -o-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -o-transform: scale(1); + transform: scale(1); + } +} +@keyframes fade-scale-18 { + 0% { + opacity: 0; + -webkit-transform: scale(1.8); + -o-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-top { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-bottom { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-left { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes slide-right { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + 100% { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -webkit-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -webkit-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -webkit-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -webkit-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -webkit-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -webkit-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -webkit-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -webkit-transform: translateX(-1px); + transform: translateX(-1px); + } +} +@-o-keyframes shake { + 0%, 100% { + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -o-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -o-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -o-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -o-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -o-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -o-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -o-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -o-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -o-transform: translateX(-1px); + transform: translateX(-1px); + } +} +@keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-9px); + -o-transform: translateX(-9px); + transform: translateX(-9px); + } + 20% { + -webkit-transform: translateX(8px); + -o-transform: translateX(8px); + transform: translateX(8px); + } + 30% { + -webkit-transform: translateX(-7px); + -o-transform: translateX(-7px); + transform: translateX(-7px); + } + 40% { + -webkit-transform: translateX(6px); + -o-transform: translateX(6px); + transform: translateX(6px); + } + 50% { + -webkit-transform: translateX(-5px); + -o-transform: translateX(-5px); + transform: translateX(-5px); + } + 60% { + -webkit-transform: translateX(4px); + -o-transform: translateX(4px); + transform: translateX(4px); + } + 70% { + -webkit-transform: translateX(-3px); + -o-transform: translateX(-3px); + transform: translateX(-3px); + } + 80% { + -webkit-transform: translateX(2px); + -o-transform: translateX(2px); + transform: translateX(2px); + } + 90% { + -webkit-transform: translateX(-1px); + -o-transform: translateX(-1px); + transform: translateX(-1px); + } +} +.primary-100 { + color: #e8f1f8 !important; +} +.primary-200 { + color: #d5e4f1 !important; +} +.primary-300 { + color: #bcd8f1 !important; +} +.primary-400 { + color: #a2caee !important; +} +.primary-500 { + color: #89bceb !important; +} +.primary-600 { + color: #62a8ea !important; +} +.primary-700 { + color: #4e97d9 !important; +} +.primary-800 { + color: #3583ca !important; +} +.blue-100 { + color: #e8f1f8 !important; +} +.blue-200 { + color: #d5e4f1 !important; +} +.blue-300 { + color: #bcd8f1 !important; +} +.blue-400 { + color: #a2caee !important; +} +.blue-500 { + color: #89bceb !important; +} +.blue-600 { + color: #62a8ea !important; +} +.blue-700 { + color: #4e97d9 !important; +} +.blue-800 { + color: #3583ca !important; +} +.red-100 { + color: #ffeaea !important; +} +.red-200 { + color: #fad3d3 !important; +} +.red-300 { + color: #fab4b4 !important; +} +.red-400 { + color: #fa9898 !important; +} +.red-500 { + color: #fa7a7a !important; +} +.red-600 { + color: #f96868 !important; +} +.red-700 { + color: #e9595b !important; +} +.red-800 { + color: #d6494b !important; +} +.pink-100 { + color: #fce4ec !important; +} +.pink-200 { + color: #ffccde !important; +} +.pink-300 { + color: #fba9c6 !important; +} +.pink-400 { + color: #fb8db4 !important; +} +.pink-500 { + color: #f978a6 !important; +} +.pink-600 { + color: #f96197 !important; +} +.pink-700 { + color: #f44c87 !important; +} +.pink-800 { + color: #e53b75 !important; +} +.purple-100 { + color: #f6f2ff !important; +} +.purple-200 { + color: #e3dbf4 !important; +} +.purple-300 { + color: #d2c5ec !important; +} +.purple-400 { + color: #bba7e4 !important; +} +.purple-500 { + color: #a58add !important; +} +.purple-600 { + color: #926dde !important; +} +.purple-700 { + color: #7c51d1 !important; +} +.purple-800 { + color: #6d45bc !important; +} +.indigo-100 { + color: #edeff9 !important; +} +.indigo-200 { + color: #dadef5 !important; +} +.indigo-300 { + color: #bcc5f4 !important; +} +.indigo-400 { + color: #9daaf3 !important; +} +.indigo-500 { + color: #8897ec !important; +} +.indigo-600 { + color: #677ae4 !important; +} +.indigo-700 { + color: #5166d6 !important; +} +.indigo-800 { + color: #465bd4 !important; +} +.cyan-100 { + color: #ecf9fa !important; +} +.cyan-200 { + color: #d3eff2 !important; +} +.cyan-300 { + color: #baeaef !important; +} +.cyan-400 { + color: #9ae1e9 !important; +} +.cyan-500 { + color: #77d6e1 !important; +} +.cyan-600 { + color: #57c7d4 !important; +} +.cyan-700 { + color: #47b8c6 !important; +} +.cyan-800 { + color: #37a9b7 !important; +} +.teal-100 { + color: #ecfdfc !important; +} +.teal-200 { + color: #cdf4f1 !important; +} +.teal-300 { + color: #99e1da !important; +} +.teal-400 { + color: #79d1c9 !important; +} +.teal-500 { + color: #56bfb5 !important; +} +.teal-600 { + color: #3aa99e !important; +} +.teal-700 { + color: #269b8f !important; +} +.teal-800 { + color: #178d81 !important; +} +.green-100 { + color: #e7faf2 !important; +} +.green-200 { + color: #bfedd8 !important; +} +.green-300 { + color: #9fe5c5 !important; +} +.green-400 { + color: #7dd3ae !important; +} +.green-500 { + color: #5cd29d !important; +} +.green-600 { + color: #46be8a !important; +} +.green-700 { + color: #36ab7a !important; +} +.green-800 { + color: #279566 !important; +} +.light-green-100 { + color: #f1f7ea !important; +} +.light-green-200 { + color: #e0ecd1 !important; +} +.light-green-300 { + color: #cadfb1 !important; +} +.light-green-400 { + color: #bad896 !important; +} +.light-green-500 { + color: #acd57c !important; +} +.light-green-600 { + color: #9ece67 !important; +} +.light-green-700 { + color: #83b944 !important; +} +.light-green-800 { + color: #70a532 !important; +} +.yellow-100 { + color: #fffae7 !important; +} +.yellow-200 { + color: #f9eec1 !important; +} +.yellow-300 { + color: #f6e7a9 !important; +} +.yellow-400 { + color: #f8e59b !important; +} +.yellow-500 { + color: #f7e083 !important; +} +.yellow-600 { + color: #f7da64 !important; +} +.yellow-700 { + color: #f9cd48 !important; +} +.yellow-800 { + color: #fbc02d !important; +} +.orange-100 { + color: #fff3e6 !important; +} +.orange-200 { + color: #ffddb9 !important; +} +.orange-300 { + color: #fbce9d !important; +} +.orange-400 { + color: #f6be80 !important; +} +.orange-500 { + color: #f4b066 !important; +} +.orange-600 { + color: #f2a654 !important; +} +.orange-700 { + color: #ec9940 !important; +} +.orange-800 { + color: #e98f2e !important; +} +.brown-100 { + color: #fae6df !important; +} +.brown-200 { + color: #e2bdaf !important; +} +.brown-300 { + color: #d3aa9c !important; +} +.brown-400 { + color: #b98e7e !important; +} +.brown-500 { + color: #a17768 !important; +} +.brown-600 { + color: #8d6658 !important; +} +.brown-700 { + color: #7d5b4f !important; +} +.brown-800 { + color: #715146 !important; +} +.grey-100 { + color: #fafafa !important; +} +.grey-200 { + color: #eee !important; +} +.grey-300 { + color: #e0e0e0 !important; +} +.grey-400 { + color: #bdbdbd !important; +} +.grey-500 { + color: #9e9e9e !important; +} +.grey-600 { + color: #757575 !important; +} +.grey-700 { + color: #616161 !important; +} +.grey-800 { + color: #424242 !important; +} +.blue-grey-100 { + color: #f3f7f9 !important; +} +.blue-grey-200 { + color: #e4eaec !important; +} +.blue-grey-300 { + color: #ccd5db !important; +} +.blue-grey-400 { + color: #a3afb7 !important; +} +.blue-grey-500 { + color: #76838f !important; +} +.blue-grey-600 { + color: #526069 !important; +} +.blue-grey-700 { + color: #37474f !important; +} +.blue-grey-800 { + color: #263238 !important; +} +.bg-primary-100 { + background-color: #e8f1f8 !important; +} +.bg-primary-200 { + background-color: #d5e4f1 !important; +} +.bg-primary-300 { + background-color: #bcd8f1 !important; +} +.bg-primary-400 { + background-color: #a2caee !important; +} +.bg-primary-500 { + background-color: #89bceb !important; +} +.bg-primary-600 { + background-color: #62a8ea !important; +} +.bg-primary-700 { + background-color: #4e97d9 !important; +} +.bg-primary-800 { + background-color: #3583ca !important; +} +.bg-blue-100 { + background-color: #e8f1f8 !important; +} +.bg-blue-200 { + background-color: #d5e4f1 !important; +} +.bg-blue-300 { + background-color: #bcd8f1 !important; +} +.bg-blue-400 { + background-color: #a2caee !important; +} +.bg-blue-500 { + background-color: #89bceb !important; +} +.bg-blue-600 { + background-color: #62a8ea !important; +} +.bg-blue-700 { + background-color: #4e97d9 !important; +} +.bg-blue-800 { + background-color: #3583ca !important; +} +.bg-red-100 { + background-color: #ffeaea !important; +} +.bg-red-200 { + background-color: #fad3d3 !important; +} +.bg-red-300 { + background-color: #fab4b4 !important; +} +.bg-red-400 { + background-color: #fa9898 !important; +} +.bg-red-500 { + background-color: #fa7a7a !important; +} +.bg-red-600 { + background-color: #f96868 !important; +} +.bg-red-700 { + background-color: #e9595b !important; +} +.bg-red-800 { + background-color: #d6494b !important; +} +.bg-pink-100 { + background-color: #fce4ec !important; +} +.bg-pink-200 { + background-color: #ffccde !important; +} +.bg-pink-300 { + background-color: #fba9c6 !important; +} +.bg-pink-400 { + background-color: #fb8db4 !important; +} +.bg-pink-500 { + background-color: #f978a6 !important; +} +.bg-pink-600 { + background-color: #f96197 !important; +} +.bg-pink-700 { + background-color: #f44c87 !important; +} +.bg-pink-800 { + background-color: #e53b75 !important; +} +.bg-purple-100 { + background-color: #f6f2ff !important; +} +.bg-purple-200 { + background-color: #e3dbf4 !important; +} +.bg-purple-300 { + background-color: #d2c5ec !important; +} +.bg-purple-400 { + background-color: #bba7e4 !important; +} +.bg-purple-500 { + background-color: #a58add !important; +} +.bg-purple-600 { + background-color: #926dde !important; +} +.bg-purple-700 { + background-color: #7c51d1 !important; +} +.bg-purple-800 { + background-color: #6d45bc !important; +} +.bg-indigo-100 { + background-color: #edeff9 !important; +} +.bg-indigo-200 { + background-color: #dadef5 !important; +} +.bg-indigo-300 { + background-color: #bcc5f4 !important; +} +.bg-indigo-400 { + background-color: #9daaf3 !important; +} +.bg-indigo-500 { + background-color: #8897ec !important; +} +.bg-indigo-600 { + background-color: #677ae4 !important; +} +.bg-indigo-700 { + background-color: #5166d6 !important; +} +.bg-indigo-800 { + background-color: #465bd4 !important; +} +.bg-cyan-100 { + background-color: #ecf9fa !important; +} +.bg-cyan-200 { + background-color: #d3eff2 !important; +} +.bg-cyan-300 { + background-color: #baeaef !important; +} +.bg-cyan-400 { + background-color: #9ae1e9 !important; +} +.bg-cyan-500 { + background-color: #77d6e1 !important; +} +.bg-cyan-600 { + background-color: #57c7d4 !important; +} +.bg-cyan-700 { + background-color: #47b8c6 !important; +} +.bg-cyan-800 { + background-color: #37a9b7 !important; +} +.bg-teal-100 { + background-color: #ecfdfc !important; +} +.bg-teal-200 { + background-color: #cdf4f1 !important; +} +.bg-teal-300 { + background-color: #99e1da !important; +} +.bg-teal-400 { + background-color: #79d1c9 !important; +} +.bg-teal-500 { + background-color: #56bfb5 !important; +} +.bg-teal-600 { + background-color: #3aa99e !important; +} +.bg-teal-700 { + background-color: #269b8f !important; +} +.bg-teal-800 { + background-color: #178d81 !important; +} +.bg-green-100 { + background-color: #e7faf2 !important; +} +.bg-green-200 { + background-color: #bfedd8 !important; +} +.bg-green-300 { + background-color: #9fe5c5 !important; +} +.bg-green-400 { + background-color: #7dd3ae !important; +} +.bg-green-500 { + background-color: #5cd29d !important; +} +.bg-green-600 { + background-color: #46be8a !important; +} +.bg-green-700 { + background-color: #36ab7a !important; +} +.bg-green-800 { + background-color: #279566 !important; +} +.bg-light-green-100 { + background-color: #f1f7ea !important; +} +.bg-light-green-200 { + background-color: #e0ecd1 !important; +} +.bg-light-green-300 { + background-color: #cadfb1 !important; +} +.bg-light-green-400 { + background-color: #bad896 !important; +} +.bg-light-green-500 { + background-color: #acd57c !important; +} +.bg-light-green-600 { + background-color: #9ece67 !important; +} +.bg-light-green-700 { + background-color: #83b944 !important; +} +.bg-light-green-800 { + background-color: #70a532 !important; +} +.bg-yellow-100 { + background-color: #fffae7 !important; +} +.bg-yellow-200 { + background-color: #f9eec1 !important; +} +.bg-yellow-300 { + background-color: #f6e7a9 !important; +} +.bg-yellow-400 { + background-color: #f8e59b !important; +} +.bg-yellow-500 { + background-color: #f7e083 !important; +} +.bg-yellow-600 { + background-color: #f7da64 !important; +} +.bg-yellow-700 { + background-color: #f9cd48 !important; +} +.bg-yellow-800 { + background-color: #fbc02d !important; +} +.bg-orange-100 { + background-color: #fff3e6 !important; +} +.bg-orange-200 { + background-color: #ffddb9 !important; +} +.bg-orange-300 { + background-color: #fbce9d !important; +} +.bg-orange-400 { + background-color: #f6be80 !important; +} +.bg-orange-500 { + background-color: #f4b066 !important; +} +.bg-orange-600 { + background-color: #f2a654 !important; +} +.bg-orange-700 { + background-color: #ec9940 !important; +} +.bg-orange-800 { + background-color: #e98f2e !important; +} +.bg-brown-100 { + background-color: #fae6df !important; +} +.bg-brown-200 { + background-color: #e2bdaf !important; +} +.bg-brown-300 { + background-color: #d3aa9c !important; +} +.bg-brown-400 { + background-color: #b98e7e !important; +} +.bg-brown-500 { + background-color: #a17768 !important; +} +.bg-brown-600 { + background-color: #8d6658 !important; +} +.bg-brown-700 { + background-color: #7d5b4f !important; +} +.bg-brown-800 { + background-color: #715146 !important; +} +.bg-grey-100 { + background-color: #fafafa !important; +} +.bg-grey-200 { + background-color: #eee !important; +} +.bg-grey-300 { + background-color: #e0e0e0 !important; +} +.bg-grey-400 { + background-color: #bdbdbd !important; +} +.bg-grey-500 { + background-color: #9e9e9e !important; +} +.bg-grey-600 { + background-color: #757575 !important; +} +.bg-grey-700 { + background-color: #616161 !important; +} +.bg-grey-800 { + background-color: #424242 !important; +} +.bg-blue-grey-100 { + background-color: #f3f7f9 !important; +} +.bg-blue-grey-200 { + background-color: #e4eaec !important; +} +.bg-blue-grey-300 { + background-color: #ccd5db !important; +} +.bg-blue-grey-400 { + background-color: #a3afb7 !important; +} +.bg-blue-grey-500 { + background-color: #76838f !important; +} +.bg-blue-grey-600 { + background-color: #526069 !important; +} +.bg-blue-grey-700 { + background-color: #37474f !important; +} +.bg-blue-grey-800 { + background-color: #263238 !important; +} +.black { + color: #000 !important; +} +.white { + color: #fff !important; +} +.bg-white { + color: #76838f; + background-color: #fff; +} +.bg-primary { + color: #fff; + background-color: #62a8ea; +} +.bg-primary:hover { + background-color: #8fc1f0; +} +.bg-primary a, a.bg-primary { + color: #fff; +} +.bg-primary a:hover, a.bg-primary:hover { + color: #fff; +} +.bg-success { + color: #fff; + background-color: #46be8a; +} +.bg-success:hover { + background-color: #6ccba2; +} +.bg-success a, a.bg-success { + color: #fff; +} +.bg-success a:hover, a.bg-success:hover { + color: #fff; +} +.bg-info { + color: #fff; + background-color: #57c7d4; +} +.bg-info:hover { + background-color: #80d5de; +} +.bg-info a, a.bg-info { + color: #fff; +} +.bg-info a:hover, a.bg-info:hover { + color: #fff; +} +.bg-warning { + color: #fff; + background-color: #f2a654; +} +.bg-warning:hover { + background-color: #f6bf83; +} +.bg-warning a, a.bg-warning { + color: #fff; +} +.bg-warning a:hover, a.bg-warning:hover { + color: #fff; +} +.bg-danger { + color: #fff; + background-color: #f96868; +} +.bg-danger:hover { + background-color: #fb9999; +} +.bg-danger a, a.bg-danger { + color: #fff; +} +.bg-danger a:hover, a.bg-danger:hover { + color: #fff; +} +.bg-dark { + color: #fff; + background-color: #526069; +} +.bg-dark:hover { + background-color: #687a86; +} +.bg-dark a, a.bg-dark { + color: #fff; +} +.bg-dark a:hover, a.bg-dark:hover { + color: #fff; +} +.social-wechat { + color: #fff; + background-color: #51c332 !important; +} +.social-wechat:hover, .social-wechat:focus { + color: #fff; + background-color: #70d355 !important; +} +.social-wechat:active, .social-wechat.active { + color: #fff; + background-color: #409a28 !important; +} +.bg-wechat { + background-color: #51c332; +} +.social-qq { + color: #fff; + background-color: #12b7f5 !important; +} +.social-qq:hover, .social-qq:focus { + color: #fff; + background-color: #43c6f7 !important; +} +.social-qq:active, .social-qq.active { + color: #fff; + background-color: #0996cb !important; +} +.bg-qq { + background-color: #12b7f5; +} +.social-weibo { + color: #fff; + background-color: #e6624b !important; +} +.social-weibo:hover, .social-weibo:focus { + color: #fff; + background-color: #ec8978 !important; +} +.social-weibo:active, .social-weibo.active { + color: #fff; + background-color: #df3b1f !important; +} +.bg-weibo { + background-color: #e6624b; +} +.social-facebook { + color: #fff; + background-color: #3b5998 !important; +} +.social-facebook:hover, .social-facebook:focus { + color: #fff; + background-color: #4c70ba !important; +} +.social-facebook:active, .social-facebook.active { + color: #fff; + background-color: #2d4373 !important; +} +.bg-facebook { + background-color: #3b5998; +} +.social-twitter { + color: #fff; + background-color: #55acee !important; +} +.social-twitter:hover, .social-twitter:focus { + color: #fff; + background-color: #83c3f3 !important; +} +.social-twitter:active, .social-twitter.active { + color: #fff; + background-color: #2795e9 !important; +} +.bg-twitter { + background-color: #55acee; +} +.social-google-plus { + color: #fff; + background-color: #dd4b39 !important; +} +.social-google-plus:hover, .social-google-plus:focus { + color: #fff; + background-color: #e47365 !important; +} +.social-google-plus:active, .social-google-plus.active { + color: #fff; + background-color: #c23321 !important; +} +.bg-google-plus { + background-color: #dd4b39; +} +.social-linkedin { + color: #fff; + background-color: #0976b4 !important; +} +.social-linkedin:hover, .social-linkedin:focus { + color: #fff; + background-color: #0b96e5 !important; +} +.social-linkedin:active, .social-linkedin.active { + color: #fff; + background-color: #075683 !important; +} +.bg-linkedin { + background-color: #0976b4; +} +.social-flickr { + color: #fff; + background-color: #ff0084 !important; +} +.social-flickr:hover, .social-flickr:focus { + color: #fff; + background-color: #ff339d !important; +} +.social-flickr:active, .social-flickr.active { + color: #fff; + background-color: #cc006a !important; +} +.bg-flickr { + background-color: #ff0084; +} +.social-tumblr { + color: #fff; + background-color: #35465c !important; +} +.social-tumblr:hover, .social-tumblr:focus { + color: #fff; + background-color: #485f7c !important; +} +.social-tumblr:active, .social-tumblr.active { + color: #fff; + background-color: #222d3c !important; +} +.bg-tumblr { + background-color: #35465c; +} +.social-xing { + color: #fff; + background-color: #024b4d !important; +} +.social-xing:hover, .social-xing:focus { + color: #fff; + background-color: #037b7f !important; +} +.social-xing:active, .social-xing.active { + color: #fff; + background-color: #011b1b !important; +} +.bg-xing { + background-color: #024b4d; +} +.social-github { + color: #fff; + background-color: #4183c4 !important; +} +.social-github:hover, .social-github:focus { + color: #fff; + background-color: #689cd0 !important; +} +.social-github:active, .social-github.active { + color: #fff; + background-color: #3269a0 !important; +} +.bg-github { + background-color: #4183c4; +} +.social-html5 { + color: #fff; + background-color: #e44f26 !important; +} +.social-html5:hover, .social-html5:focus { + color: #fff; + background-color: #ea7453 !important; +} +.social-html5:active, .social-html5.active { + color: #fff; + background-color: #bf3c18 !important; +} +.bg-html5 { + background-color: #e44f26; +} +.social-openid { + color: #fff; + background-color: #f67d28 !important; +} +.social-openid:hover, .social-openid:focus { + color: #fff; + background-color: #f89b59 !important; +} +.social-openid:active, .social-openid.active { + color: #fff; + background-color: #e26309 !important; +} +.bg-openid { + background-color: #f67d28; +} +.social-stack-overflow { + color: #fff; + background-color: #f86c01 !important; +} +.social-stack-overflow:hover, .social-stack-overflow:focus { + color: #fff; + background-color: #fe882e !important; +} +.social-stack-overflow:active, .social-stack-overflow.active { + color: #fff; + background-color: #c55601 !important; +} +.bg-stack-overflow { + background-color: #f86c01; +} +.social-css3 { + color: #fff; + background-color: #1572b6 !important; +} +.social-css3:hover, .social-css3:focus { + color: #fff; + background-color: #1a8fe4 !important; +} +.social-css3:active, .social-css3.active { + color: #fff; + background-color: #105588 !important; +} +.bg-css3 { + background-color: #1572b6; +} +.social-youtube { + color: #fff; + background-color: #b31217 !important; +} +.social-youtube:hover, .social-youtube:focus { + color: #fff; + background-color: #e1171d !important; +} +.social-youtube:active, .social-youtube.active { + color: #fff; + background-color: #850d11 !important; +} +.bg-youtube { + background-color: #b31217; +} +.social-dribbble { + color: #fff; + background-color: #c32361 !important; +} +.social-dribbble:hover, .social-dribbble:focus { + color: #fff; + background-color: #dc3d7b !important; +} +.social-dribbble:active, .social-dribbble.active { + color: #fff; + background-color: #981b4b !important; +} +.bg-dribbble { + background-color: #c32361; +} +.social-instagram { + color: #fff; + background-color: #3f729b !important; +} +.social-instagram:hover, .social-instagram:focus { + color: #fff; + background-color: #548cb9 !important; +} +.social-instagram:active, .social-instagram.active { + color: #fff; + background-color: #305777 !important; +} +.bg-instagram { + background-color: #3f729b; +} +.social-pinterest { + color: #fff; + background-color: #cc2127 !important; +} +.social-pinterest:hover, .social-pinterest:focus { + color: #fff; + background-color: #e04046 !important; +} +.social-pinterest:active, .social-pinterest.active { + color: #fff; + background-color: #a01a1f !important; +} +.bg-pinterest { + background-color: #cc2127; +} +.social-vk { + color: #fff; + background-color: #3d5a7d !important; +} +.social-vk:hover, .social-vk:focus { + color: #fff; + background-color: #4e739f !important; +} +.social-vk:active, .social-vk.active { + color: #fff; + background-color: #2c415b !important; +} +.bg-vk { + background-color: #3d5a7d; +} +.social-yahoo { + color: #fff; + background-color: #350178 !important; +} +.social-yahoo:hover, .social-yahoo:focus { + color: #fff; + background-color: #4b01ab !important; +} +.social-yahoo:active, .social-yahoo.active { + color: #fff; + background-color: #1f0145 !important; +} +.bg-yahoo { + background-color: #350178; +} +.social-behance { + color: #fff; + background-color: #1769ff !important; +} +.social-behance:hover, .social-behance:focus { + color: #fff; + background-color: #4a8aff !important; +} +.social-behance:active, .social-behance.active { + color: #fff; + background-color: #0050e3 !important; +} +.bg-behance { + background-color: #024b4d; +} +.social-dropbox { + color: #fff; + background-color: #007ee5 !important; +} +.social-dropbox:hover, .social-dropbox:focus { + color: #fff; + background-color: #1998ff !important; +} +.social-dropbox:active, .social-dropbox.active { + color: #fff; + background-color: #0062b2 !important; +} +.bg-dropbox { + background-color: #007ee5; +} +.social-reddit { + color: #fff; + background-color: #ff4500 !important; +} +.social-reddit:hover, .social-reddit:focus { + color: #fff; + background-color: #ff6a33 !important; +} +.social-reddit:active, .social-reddit.active { + color: #fff; + background-color: #cc3700 !important; +} +.bg-reddit { + background-color: #ff4500; +} +.social-spotify { + color: #fff; + background-color: #7ab800 !important; +} +.social-spotify:hover, .social-spotify:focus { + color: #fff; + background-color: #9ceb00 !important; +} +.social-spotify:active, .social-spotify.active { + color: #fff; + background-color: #588500 !important; +} +.bg-spotify { + background-color: #7ab800; +} +.social-vine { + color: #fff; + background-color: #00b488 !important; +} +.social-vine:hover, .social-vine:focus { + color: #fff; + background-color: #00e7af !important; +} +.social-vine:active, .social-vine.active { + color: #fff; + background-color: #008161 !important; +} +.bg-vine { + background-color: #00b488; +} +.social-foursquare { + color: #fff; + background-color: #0cbadf !important; +} +.social-foursquare:hover, .social-foursquare:focus { + color: #fff; + background-color: #2ad0f4 !important; +} +.social-foursquare:active, .social-foursquare.active { + color: #fff; + background-color: #0992af !important; +} +.bg-foursquare { + background-color: #0cbadf; +} +.social-vimeo { + color: #fff; + background-color: #1ab7ea !important; +} +.social-vimeo:hover, .social-vimeo:focus { + color: #fff; + background-color: #49c6ee !important; +} +.social-vimeo:active, .social-vimeo.active { + color: #fff; + background-color: #1295bf !important; +} +.bg-vimeo { + background-color: #1ab7ea; +} +.social-skype { + color: #fff; + background-color: #77bcfd !important; +} +.social-skype:hover, .social-skype:focus { + color: #fff; + background-color: #a9d5fe !important; +} +.social-skype:active, .social-skype.active { + color: #fff; + background-color: #45a3fc !important; +} +.bg-skype { + background-color: #77bcfd; +} +a:focus { + outline: none; +} +.blocks, [class*="blocks-"] { + padding: 0; + margin: 0; + margin-right: -12px; + margin-left: -12px; + list-style: none; +} +.blocks:before, [class*="blocks-"]:before, .blocks:after, [class*="blocks-"]:after { + display: table; + content: " "; +} +.blocks:after, [class*="blocks-"]:after { + clear: both; +} +.blocks > li, [class*="blocks-"] > li { + position: relative; + float: left; + min-height: 1px; + padding-right: 12px; + padding-left: 12px; + margin-bottom: 0; +} +.blocks.no-space, [class*="blocks-"].no-space { + margin: 0; +} +.blocks.no-space > li, [class*="blocks-"].no-space > li { + padding-right: 0; + padding-left: 0; + margin-bottom: 0; +} +.blocks-2 > li:nth-child(2n+3), .blocks-3 > li:nth-child(3n+4), .blocks-4 > li:nth-child(4n+5), .blocks-5 > li:nth-child(5n+6), .blocks-6 > li:nth-child(6n+7), .block-first { + clear: both; +} +.blocks-100 > li { + width: 100%; +} +.blocks-2 > li { + width: 50%; +} +.blocks-3 > li { + width: 33.33333333%; +} +.blocks-4 > li { + width: 25%; +} +.blocks-5 > li { + width: 20%; +} +.blocks-6 > li { + width: 16.66666667%; +} +@media (min-width: 480px) { + .blocks-xs-100 > li { + width: 100%; + } +} +@media (min-width: 480px) { + .blocks-xs-2 > li { + width: 50%; + } +} +@media (min-width: 480px) { + .blocks-xs-3 > li { + width: 33.33333333%; + } +} +@media (min-width: 480px) { + .blocks-xs-4 > li { + width: 25%; + } +} +@media (min-width: 480px) { + .blocks-xs-5 > li { + width: 20%; + } +} +@media (min-width: 480px) { + .blocks-xs-6 > li { + width: 16.66666667%; + } +} +@media (min-width: 768px) { + .blocks-sm-100 > li { + width: 100%; + } +} +@media (min-width: 768px) { + .blocks-sm-2 > li { + width: 50%; + } +} +@media (min-width: 768px) { + .blocks-sm-3 > li { + width: 33.33333333%; + } +} +@media (min-width: 768px) { + .blocks-sm-4 > li { + width: 25%; + } +} +@media (min-width: 768px) { + .blocks-sm-5 > li { + width: 20%; + } +} +@media (min-width: 768px) { + .blocks-sm-6 > li { + width: 16.66666667%; + } +} +@media (min-width: 992px) { + .blocks-md-100 > li { + width: 100%; + } +} +@media (min-width: 992px) { + .blocks-md-2 > li { + width: 50%; + } +} +@media (min-width: 992px) { + .blocks-md-3 > li { + width: 33.33333333%; + } +} +@media (min-width: 992px) { + .blocks-md-4 > li { + width: 25%; + } +} +@media (min-width: 992px) { + .blocks-md-5 > li { + width: 20%; + } +} +@media (min-width: 992px) { + .blocks-md-6 > li { + width: 16.66666667%; + } +} +@media (min-width: 1200px) { + .blocks-lg-100 > li { + width: 100%; + } +} +@media (min-width: 1200px) { + .blocks-lg-2 > li { + width: 50%; + } +} +@media (min-width: 1200px) { + .blocks-lg-3 > li { + width: 33.33333333%; + } +} +@media (min-width: 1200px) { + .blocks-lg-4 > li { + width: 25%; + } +} +@media (min-width: 1200px) { + .blocks-lg-5 > li { + width: 20%; + } +} +@media (min-width: 1200px) { + .blocks-lg-6 > li { + width: 16.66666667%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-100 > li { + width: 100%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-2 > li { + width: 50%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-3 > li { + width: 33.33333333%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-4 > li { + width: 25%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-5 > li { + width: 20%; + } +} +@media (min-width: 1600px) { + .blocks-xlg-6 > li { + width: 16.66666667%; + } +} +.avatar { + position: relative; + display: inline-block; + width: 40px; + white-space: nowrap; + vertical-align: bottom; + border-radius: 1000px; +} +.avatar i { + position: absolute; + right: 0; + bottom: 0; + width: 10px; + height: 10px; + border: 2px solid #fff; + border-radius: 100%; +} +.avatar img { + width: 100%; + max-width: 100%; + height: auto; + border: 0 none; + border-radius: 1000px; +} +.avatar-online i { + background-color: #46be8a; +} +.avatar-off i { + background-color: #526069; +} +.avatar-busy i { + background-color: #f2a654; +} +.avatar-away i { + background-color: #f96868; +} +.avatar-100 { + width: 100px; +} +.avatar-100 i { + width: 20px; + height: 20px; +} +.avatar-lg { + width: 50px; +} +.avatar-lg i { + width: 12px; + height: 12px; +} +.avatar-sm { + width: 30px; +} +.avatar-sm i { + width: 8px; + height: 8px; +} +.avatar-xs { + width: 20px; +} +.avatar-xs i { + width: 7px; + height: 7px; +} +.box { + font-size: 14px; + text-align: center; +} +.status { + display: block; + width: 10px; + height: 10px; + border: 2px solid #fff; + border-radius: 100%; +} +.status-online { + background-color: #46be8a; +} +.status-off { + background-color: #526069; +} +.status-busy { + background-color: #f2a654; +} +.status-away { + background-color: #f96868; +} +.status-lg { + width: 14px; + height: 14px; +} +.status-md { + width: 10px; + height: 10px; +} +.status-sm { + width: 8px; + height: 8px; +} +.status-xs { + width: 7px; + height: 7px; +} +.icon { + position: relative; + display: inline-block; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon.pull-left { + margin-right: .3em; +} +.icon.pull-right { + margin-left: .3em; +} +.icon.icon-circle { + position: relative; + margin: .5em; +} +.icon.icon-circle:before { + position: relative; + z-index: 1; +} +.icon.icon-circle:after { + position: absolute; + top: 50%; + left: 50%; + z-index: 0; + width: 2em; + height: 2em; + content: ""; + background-color: inherit; + border-radius: 100%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.icon.icon-lg { + font-size: 1.33333333em; + vertical-align: -15%; +} +.icon.icon-2x { + font-size: 2em; +} +.icon.icon-3x { + font-size: 3em; +} +.icon.icon-4x { + font-size: 4em; +} +.icon.icon-5x { + font-size: 5em; +} +.icon.icon-fw { + width: 1.28571429em; + text-align: center; +} +.icon.icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.icon.icon-ul > li { + position: relative; +} +.icon.icon-li { + position: absolute; + top: .14285714em; + left: -2.14285714em; + width: 2.14285714em; + text-align: center; +} +.icon.icon-li.icon-lg { + left: -1.85714286em; +} +.icon.icon-border { + padding: .2em .25em .15em; + border: solid .08em #e4eaec; + border-radius: .1em; +} +.icon.icon-spin { + -webkit-animation: icon-spin 2s infinite linear; + -o-animation: icon-spin 2s infinite linear; + animation: icon-spin 2s infinite linear; +} +.icon.icon-spin-reverse { + -webkit-animation: icon-spin-reverse 2s infinite linear; + -o-animation: icon-spin-reverse 2s infinite linear; + animation: icon-spin-reverse 2s infinite linear; +} +.icon.icon-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.icon.icon-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.icon.icon-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.icon.icon-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.icon.icon-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.icon.icon-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.icon.icon-stack-1x, .icon.icon-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.icon.icon-stack-1x { + line-height: inherit; +} +.icon.icon-stack-2x { + font-size: 2em; +} +.icon.icon-stack-inverse { + color: #fff; +} +.icon-color { + color: rgba(55, 71, 79, .4); +} +.icon-color:hover, .icon-color:focus { + color: rgba(55, 71, 79, .6); +} +.icon-color.active, .icon-color:active { + color: #37474f; +} +.icon-color-alt { + color: rgba(55, 71, 79, .6); +} +.icon-color-alt:hover, .icon-color-alt:focus { + color: rgba(55, 71, 79, .8); +} +.icon-color-alt.active, .icon-color-alt:active { + color: #37474f; +} +@-webkit-keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + -o-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + -o-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +@-o-keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + -o-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +@keyframes icon-spin-reverse { + 0% { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(-359deg); + -o-transform: rotate(-359deg); + transform: rotate(-359deg); + } +} +.hamburger { + font-size: 20px; + vertical-align: middle; +} +.hamburger, .hamburger:before, .hamburger .hamburger-bar, .hamburger:after { + -webkit-transition: -webkit-transform .2s ease-in-out; + -o-transition: -o-transform .2s ease-in-out; + transition: -webkit-transform .2s ease-in-out; + transition: transform .2s ease-in-out; + transition: transform .2s ease-in-out, -webkit-transform .2s ease-in-out, -o-transform .2s ease-in-out; +} +.hamburger:before, .hamburger:after { + content: ""; +} +.hamburger:before, .hamburger .hamburger-bar, .hamburger:after { + display: block; + width: 1em; + height: .1em; + margin: 0; + background: #76838f; + border-radius: 1px; +} +.navbar-default .hamburger:before, .navbar-default .hamburger .hamburger-bar, .navbar-default .hamburger:after { + background: #76838f; +} +.navbar-inverse .hamburger:before, .navbar-inverse .hamburger .hamburger-bar, .navbar-inverse .hamburger:after { + background: #fff; +} +.hamburger .hamburger-bar { + margin: .2em 0; +} +.hamburger-close:before { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transform-origin: 8%; + -ms-transform-origin: 8%; + -o-transform-origin: 8%; + transform-origin: 8%; +} +.hamburger-close .hamburger-bar { + opacity: 0; +} +.hamburger-close:after { + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 8%; + -ms-transform-origin: 8%; + -o-transform-origin: 8%; + transform-origin: 8%; +} +.hamburger-close.hided:before, .hamburger-close.collapsed:before { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); +} +.hamburger-close.hided .hamburger-bar, .hamburger-close.collapsed .hamburger-bar { + opacity: 1; +} +.hamburger-close.hided:after, .hamburger-close.collapsed:after { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); +} +.hamburger-arrow-left.collapsed { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.hamburger-arrow-left.collapsed:before { + width: .6em; + -webkit-transform: translate3d(.45em, .1em, 0) rotate(45deg); + transform: translate3d(.45em, .1em, 0) rotate(45deg); +} +.hamburger-arrow-left.collapsed .hamburger-bar { + border-radius: .2em; +} +.hamburger-arrow-left.collapsed:after { + width: .6em; + -webkit-transform: translate3d(.45em, -.1em, 0) rotate(-45deg); + transform: translate3d(.45em, -.1em, 0) rotate(-45deg); +} +.counter { + text-align: center; +} +.counter > .counter-number, .counter .counter-number-group { + font-size: 20px; + color: #37474f; +} +.counter-label { + display: block; +} +.counter-icon { + font-size: 20px; +} +.counter-lg > .counter-number, .counter-lg .counter-number-group { + font-size: 40px; +} +.counter-lg .counter-icon { + font-size: 40px; +} +.counter-md > .counter-number, .counter-md .counter-number-group { + font-size: 30px; +} +.counter-md .counter-icon { + font-size: 30px; +} +.counter-sm > .counter-number, .counter-sm .counter-number-group { + font-size: 14px; +} +.counter-sm .counter-icon { + font-size: 14px; +} +.counter-sm .counter-number-related + .counter-number, .counter-sm .counter-number + .counter-number-related { + margin-left: 0; +} +.counter-inverse { + color: #fff; +} +.counter-inverse > .counter-number, .counter-inverse .counter-number-group { + color: #fff; +} +.counter-inverse .counter-icon { + color: #fff; +} +.widget { + position: relative; + margin-bottom: 24px; + background-color: #fff; +} +.widget .cover { + width: 100%; +} +[class*="blocks-"] > li > .widget { + margin-bottom: 0; +} +.widget-shadow { + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.widget { + border-radius: 3px; +} +.widget .widget-header { + border-radius: 3px 3px 0 0; +} +.widget .widget-header:last-child { + border-radius: inherit; +} +.widget .widget-body:last-child { + border-radius: 0 0 3px 3px; +} +.widget .widget-body:last-child .widget-body-footer { + border-radius: 0 0 3px 3px; +} +.widget .widget-footer { + border-radius: 0 0 3px 3px; +} +.widget .widget-footer:first-child { + border-radiu: inherit; +} +.widget-body { + position: relative; + padding: 30px 25px; +} +.widget-body-footer { + margin-top: 30px; +} +.widget-body-footer:before, .widget-body-footer:after { + display: table; + content: " "; +} +.widget-body-footer:after { + clear: both; +} +.widget-content ul { + padding: 0; + margin: 0; +} +.widget-content li { + list-style: none; +} +.widget-title { + margin-top: 0; + color: #37474f; + text-transform: capitalize; +} +div.widget-title { + font-size: 22px; +} +.overlay-panel .widget-title { + color: #fff; +} +.widget > .widget-title { + padding: 12px 20px; +} +.widget-metas { + font-size: 12px; + color: #a3afb7; +} +.widget-metas.type-link > a { + position: relative; + display: inline-block; + padding: 3px 5px; + color: #a3afb7; +} +.widget-metas.type-link > a:first-child { + padding-left: 0; +} +.widget-metas.type-link > a:hover { + color: #ccd5db; +} +.widget-metas.type-link > a + a:before { + position: absolute; + top: 10px; + left: -2px; + width: 3px; + height: 3px; + content: ""; + background-color: #a3afb7; + border-radius: 50%; +} +.overlay-background .widget-time { + color: #fff; + opacity: .8; +} +.widget-category { + font-size: 16px; +} +.widget-actions { + margin-top: 10px; + text-align: right; +} +.widget-actions a { + display: inline-block; + margin-right: 10px; + color: #a3afb7; + vertical-align: middle; +} +.widget-actions a.icon, .widget-actions a .icon { + text-decoration: none; +} +.widget-actions a.icon + span, .widget-actions a .icon + span { + margin-left: 2px; +} +.widget-actions a.active, .widget-actions a:hover, .widget-actions a:focus { + color: #ccd5db; + text-decoration: none; +} +.widget-actions a:last-child { + margin-right: 0; +} +.widget-actions-sidebar { + position: absolute; + top: 20px; + left: 20px; + width: 60px; +} +.widget-actions-sidebar a { + display: inline-block; + width: 100%; + height: 60px; + margin-right: 0; + text-align: center; + border-right: 1px solid #e4eaec; +} +.widget-actions-sidebar a:before { + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.widget-actions-sidebar a + a { + border-top: 1px solid #e4eaec; +} +.widget-actions-sidebar + .widget-content { + margin-left: 80px; +} +.widget-watermark { + position: absolute; + right: 0; + bottom: 0; + line-height: 1; + opacity: .1; +} +.widget-watermark.darker { + color: black; +} +.widget-watermark.lighter { + color: white; +} +.widget-divider:after { + display: block; + width: 20px; + height: 2px; + margin: 15px auto; + content: ""; + background-color: #fff; +} +.widget-left { + position: absolute; + top: 0; + left: 0; + width: 40%; + height: 100%; +} +.widget-left + .widget-body { + width: 60%; + margin-left: 40%; +} +@media (max-width: 767px) { + .widget-left { + position: relative; + width: 100%; + height: 320px; + } + .widget-left + .widget-body { + width: 100%; + margin-left: 0; + } +} +.panel-group .panel { + -webkit-box-shadow: none; + box-shadow: none; +} +.panel-group .panel-title { + position: relative; + padding: 15px 30px; + font-size: 14px; +} +.panel-group .panel-title:before, .panel-group .panel-title:after { + position: absolute; + top: 15px; + right: 30px; + font-family: "Web Icons"; + -webkit-transition: all 300ms linear 0s; + -o-transition: all 300ms linear 0s; + transition: all 300ms linear 0s; +} +.panel-group .panel-title:before { + content: "\f197"; +} +.panel-group .panel-title:after { + content: "\f199"; +} +.panel-group .panel-title[aria-expanded="false"]:before { + opacity: .4; +} +.panel-group .panel-title[aria-expanded="false"]:after { + opacity: 0; + -webkit-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} +.panel-group .panel-title[aria-expanded="true"]:before { + opacity: 0; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.panel-group .panel-title[aria-expanded="true"]:after { + opacity: 1; +} +.panel-group .panel-title:hover, .panel-group .panel-title:focus { + color: #76838f; + text-decoration: none; +} +.panel-group .panel-title:focus { + outline: none; +} +.panel-group .panel-heading + .panel-collapse { + margin: 0; +} +.panel-group .panel-collapse .panel-body { + padding: 15px 30px; +} +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top-color: transparent; +} +.panel-group .panel + .panel { + margin-top: 10px; +} +.panel-group-continuous .panel { + border-radius: 0; +} +.panel-group-continuous .panel:first-child { + border-radius: 1px 1px 0 0; +} +.panel-group-continuous .panel:last-child { + border-radius: 0 0 1px 1px; +} +.panel-group-continuous .panel + .panel { + margin-top: 0; + border-top: 1px solid #e4eaec; +} +.panel-group-simple .panel { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.panel-group-simple .panel-title { + padding-bottom: 10px; + padding-left: 0; +} +.panel-group-simple .panel-title:before, .panel-group-simple .panel-title:after { + right: 5px; +} +.panel-group-simple .panel-collapse .panel-body { + padding-top: 10px; + padding-right: 0; + padding-left: 0; +} +.panel-group-simple .panel + .panel { + margin-top: 0; +} +.cover { + overflow: hidden; +} +.cover-background { + height: 100%; + background-repeat: no-repeat; + background-position: center; + -webkit-background-size: cover; + background-size: cover; +} +.cover-image { + width: 100%; +} +.cover-quote { + position: relative; + padding-left: 35px; + margin-bottom: 0; + border-left: none; +} +.cover-quote:before, .cover-quote:after { + position: absolute; + top: -20px; + font-size: 4em; +} +.cover-quote:before { + left: 0; + content: open-quote; +} +.cover-quote:after { + right: 0; + visibility: hidden; + content: close-quote; +} +.cover-quote.blockquote-reverse { + padding-right: 35px; + padding-left: 20px; + border-right: none; +} +.cover-quote.blockquote-reverse:before { + right: 0; + left: auto; + content: close-quote; +} +.cover-gallery .carousel-inner img { + width: 100%; +} +.cover-iframe { + width: 100%; + border: 0 none; +} +.overlay { + position: relative; + display: inline-block; + width: 100%; + max-width: 100%; + margin: 0; + overflow: hidden; + vertical-align: middle; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} +.overlay > :first-child, .overlay .overlay-figure { + width: 100%; + max-width: 100%; + margin-bottom: 0; +} +.overlay-panel { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 20px; + color: #fff; +} +.overlay-panel a:not([class]) { + color: inherit; + text-decoration: underline; +} +.overlay-panel > :last-child { + margin-bottom: 0; +} +.overlay-panel h1, .overlay-panel h2, .overlay-panel h3, .overlay-panel h4, .overlay-panel h5, .overlay-panel h6 { + color: inherit; +} +.overlay-hover:not(:hover) .overlay-panel:not(.overlay-background-fixed) { + opacity: 0; +} +.overlay-background { + background: rgba(0, 0, 0, .5); +} +.overlay-image { + width: 100%; + max-width: 100%; + padding: 0; +} +.overlay-shade { + background: rgba(0, 0, 0, 0) -webkit-gradient(linear, left top, left bottom, color-stop(50%, rgba(255, 255, 255, 0)), color-stop(90%, rgba(255, 255, 255, .87)), to(#fff)) repeat scroll 0 0; + background: rgba(0, 0, 0, 0) -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, .87) 90%, #fff 100%) repeat scroll 0 0; + background: rgba(0, 0, 0, 0) -o-linear-gradient(top, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, .87) 90%, #fff 100%) repeat scroll 0 0; + background: rgba(0, 0, 0, 0) linear-gradient(to bottom, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, .87) 90%, #fff 100%) repeat scroll 0 0; +} +/* Position modifiers + ========================================================================== */ +.overlay-top { + bottom: auto; +} +.overlay-bottom { + top: auto; +} +.overlay-left { + right: auto; +} +.overlay-right { + left: auto; +} +/* Sub-object `overlay-icon` + ========================================================================== */ +.overlay-icon { + font-size: 0; + text-align: center; +} +.overlay-icon:before { + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.overlay-icon .icon { + display: inline-block; + width: 32px; + height: 32px; + margin-right: 10px; + margin-left: 10px; + font-size: 32px; + line-height: 1; + color: #fff; + text-decoration: none; +} +.overlay-anchor { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.overlay-fade, .overlay-scale, .overlay-spin, .overlay-grayscale, .overlay-blur, [class*="overlay-slide"] { + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + -webkit-transition-duration: .3s; + -o-transition-duration: .3s; + transition-duration: .3s; + -webkit-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; +} +.overlay-fade { + opacity: .7; +} +.overlay-hover:hover .overlay-fade { + opacity: 1; +} +.overlay-scale { + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.overlay-hover:hover .overlay-scale { + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); +} +.overlay-spin { + -webkit-transform: scale(1) rotate(0deg); + -ms-transform: scale(1) rotate(0deg); + -o-transform: scale(1) rotate(0deg); + transform: scale(1) rotate(0deg); +} +.overlay-hover:hover .overlay-spin { + -webkit-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); +} +.overlay-grayscale { + filter: grayscale(100%); + + -webkit-filter: grayscale(100%); +} +.overlay-hover:hover .overlay-grayscale { + filter: grayscale(0%); + + -webkit-filter: grayscale(0%); +} +[class*="overlay-slide"] { + opacity: 0; +} +.overlay-slide-top { + -webkit-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.overlay-slide-bottom { + -webkit-transform: translateY(100%); + -ms-transform: translateY(100%); + -o-transform: translateY(100%); + transform: translateY(100%); +} +.overlay-slide-left { + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + -o-transform: translateX(-100%); + transform: translateX(-100%); +} +.overlay-slide-right { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + -o-transform: translateX(100%); + transform: translateX(100%); +} +.overlay-hover:hover [class*="overlay-slide"] { + opacity: 1; + -webkit-transform: translateX(0) translateY(0); + -ms-transform: translateX(0) translateY(0); + -o-transform: translateX(0) translateY(0); + transform: translateX(0) translateY(0); +} +.comments { + padding: 0; + margin: 0; +} +.comments .comment { + border: none; + border-bottom: 1px solid #e4eaec; +} +.comments .comment .comment:first-child { + border-top: 1px solid #e4eaec; +} +.comments .comment .comment:last-child { + border-bottom: none; +} +.comment { + padding: 15px 0; + margin: 0; +} +.comment .comment { + padding-bottom: 15px; + margin-top: 15px; +} +.comment .comment:last-child { + padding-bottom: 0; +} +.comment-author, .comment-author:hover, .comment-author:focus { + color: #37474f; +} +.comment-meta { + display: inline-block; + margin-left: 5px; + font-size: 12px; + color: #a3afb7; +} +.comment-content { + margin-top: 5px; +} +.comment-content p { + margin-bottom: 10px; +} +.comment-actions { + margin-top: 10px; + text-align: right; +} +.comment-actions a { + display: inline-block; + margin-right: 10px; + vertical-align: middle; +} +.comment-actions a.icon { + text-decoration: none; +} +.comment-actions a:last-child { + margin-right: 0; +} +.comment-reply { + margin: 10px 0 10px; +} +.comment-reply .form-group:last-child { + margin-bottom: 0; +} +.chat-box { + width: 100%; + height: 100%; + overflow: hidden; + background-color: #fff; +} +.chats { + padding: 30px 15px; +} +.chat-avatar { + float: right; +} +.chat-avatar .avatar { + width: 30px; +} +.chat-body { + display: block; + margin: 10px 30px 0 0; + overflow: hidden; +} +.chat-body:first-child { + margin-top: 0; +} +.chat-content { + position: relative; + display: block; + float: right; + padding: 5px 10px; + margin: 0 20px 10px 0; + clear: both; + color: #fff; + background-color: #62a8ea; + border-radius: 4px; +} +.chat-content:before { + position: absolute; + top: 10px; + right: -10px; + width: 0; + height: 0; + content: ""; + border: 5px solid transparent; + border-left-color: #62a8ea; +} +.chat-content > p { + margin: 0; +} +.chat-content + .chat-content:before { + border-color: transparent; +} +.chat-time { + display: block; + font-size: 8px; + color: rgba(255, 255, 255, .6); +} +.chat-left .chat-avatar { + float: left; +} +.chat-left .chat-body { + margin-right: 0; + margin-left: 30px; +} +.chat-left .chat-content { + float: left; + margin: 0 0 10px 20px; + color: #76838f; + background-color: #dfe9ef; +} +.chat-left .chat-content:before { + right: auto; + left: -10px; + border-right-color: #dfe9ef; + border-left-color: transparent; +} +.chat-left .chat-content + .chat-content:before { + border-color: transparent; +} +.chat-left .chat-time { + color: #a3afb7; +} +.steps { + margin-bottom: 22px; +} +.steps.row { + display: block; + margin-right: 0; + margin-left: 0; +} +.step { + position: relative; + padding: 10px 15px; + margin: 0; + font-size: inherit; + color: #a3afb7; + vertical-align: top; + background-color: #f3f7f9; + border-radius: 0; +} +.step-icon { + float: left; + margin-top: 4px; + margin-right: .5em; + font-size: 16px; +} +.step-number { + position: absolute; + top: 50%; + left: 15px; + width: 32px; + height: 32px; + font-size: 20px; + line-height: 32px; + color: #fff; + text-align: center; + background: #e4eaec; + border-radius: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} +.step-number ~ .step-desc { + min-height: 32px; + margin-left: 42px; +} +.step-title { + margin-bottom: 0; + font-size: 16px; + color: #526069; +} +.step-desc { + text-align: left; +} +.step-desc p { + margin-bottom: 0; +} +.steps-vertical .step { + display: block; + padding: 12px 15px; +} +.steps-vertical .step[class*="col-"] { + float: none; + width: 100%; +} +.step.current { + color: #fff; + background-color: #62a8ea; +} +.step.current .step-title { + color: #fff; +} +.step.current .step-number { + color: #62a8ea; + background-color: #fff; +} +.step.disabled { + color: #ccd5db; + pointer-events: none; + cursor: auto; +} +.step.disabled .step-title { + color: #ccd5db; +} +.step.disabled .step-number { + background-color: #ccd5db; +} +.step.error { + color: #fff; + background-color: #f96868; +} +.step.error .step-title { + color: #fff; +} +.step.error .step-number { + color: #f96868; + background-color: #fff; +} +.step.done { + color: #fff; + background-color: #46be8a; +} +.step.done .step-title { + color: #fff; +} +.step.done .step-number { + color: #46be8a; + background-color: #fff; +} +.steps-lg .step { + padding: 15px 15px; + font-size: 14px; +} +.steps-lg .step-icon { + font-size: 18px; +} +.steps-lg .step-title { + font-size: 18px; +} +.steps-lg .step-number { + width: 46px; + height: 46px; + font-size: 28px; + line-height: 46px; +} +.steps-lg .step-number ~ .step-desc { + min-height: 46px; + margin-left: 56px; +} +.steps-sm .step { + font-size: 12px; +} +.steps-sm .step-icon { + font-size: 18px; +} +.steps-sm .step-title { + font-size: 18px; +} +.steps-sm .step-number { + width: 30px; + height: 30px; + font-size: 24px; + line-height: 30px; +} +.steps-sm .step-number ~ .step-desc { + min-height: 30px; + margin-left: 40px; +} +.steps-sm .step-icon { + margin-top: 3px; +} +.steps-xs .step { + font-size: 12px; +} +.steps-xs .step-icon { + font-size: 16px; +} +.steps-xs .step-title { + font-size: 16px; +} +.steps-xs .step-number { + width: 24px; + height: 24px; + font-size: 20px; + line-height: 24px; +} +.steps-xs .step-number ~ .step-desc { + min-height: 24px; + margin-left: 34px; +} +.steps-xs .step-icon { + margin-top: 3px; +} +.pearls { + margin-bottom: 22px; +} +.pearls.row { + display: block; +} +.pearl { + position: relative; + padding: 0; + margin: 0; + text-align: center; +} +.pearl:before, .pearl:after { + position: absolute; + top: 18px; + z-index: 0; + width: 50%; + height: 4px; + content: ""; + background-color: #f3f7f9; +} +.pearl:before { + left: 0; +} +.pearl:after { + right: 0; +} +.pearl:first-child:before, .pearl:last-child:after { + display: none !important; +} +.pearl-number, .pearl-icon { + position: relative; + z-index: 1; + display: inline-block; + width: 36px; + height: 36px; + line-height: 32px; + color: #fff; + text-align: center; + background: #ccd5db; + border: 2px solid #ccd5db; + border-radius: 50%; +} +.pearl-number { + font-size: 18px; +} +.pearl-icon { + font-size: 18px; +} +.pearl-title { + display: block; + margin-top: .5em; + margin-bottom: 0; + /* for IE */ + overflow: hidden; + font-size: 16px; + color: #526069; + text-overflow: ellipsis; + word-wrap: normal; + /* for IE */ + white-space: nowrap; +} +.pearl.current:before, .pearl.current:after { + background-color: #62a8ea; +} +.pearl.current .pearl-number, .pearl.current .pearl-icon { + color: #62a8ea; + background-color: #fff; + border-color: #62a8ea; + -webkit-transform: scale(1.3); + -ms-transform: scale(1.3); + -o-transform: scale(1.3); + transform: scale(1.3); +} +.pearl.disabled { + pointer-events: none; + cursor: auto; +} +.pearl.disabled:before, .pearl.disabled:after { + background-color: #f3f7f9; +} +.pearl.disabled .pearl-number, .pearl.disabled .pearl-icon { + color: #fff; + background-color: #ccd5db; + border-color: #ccd5db; +} +.pearl.error:before { + background-color: #62a8ea; +} +.pearl.error:after { + background-color: #f3f7f9; +} +.pearl.error .pearl-number, .pearl.error .pearl-icon { + color: #f96868; + background-color: #fff; + border-color: #f96868; +} +.pearl.done:before, .pearl.done:after { + background-color: #62a8ea; +} +.pearl.done .pearl-number, .pearl.done .pearl-icon { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; +} +.pearls-lg .pearl:before, .pearls-lg .pearl:after { + top: 20px; +} +.pearls-lg .pearl-title { + font-size: 18px; +} +.pearls-lg .pearl-number, .pearls-lg .pearl-icon { + width: 40px; + height: 40px; + line-height: 36px; +} +.pearls-lg .pearl-icon { + font-size: 20px; +} +.pearls-lg .pearl-number { + font-size: 20px; +} +.pearls-sm .pearl:before, .pearls-sm .pearl:after { + top: 16px; +} +.pearls-sm .pearl-title { + font-size: 14px; +} +.pearls-sm .pearl-number, .pearls-sm .pearl-icon { + width: 32px; + height: 32px; + line-height: 28px; +} +.pearls-sm .pearl-number { + font-size: 16px; +} +.pearls-sm .pearl-icon { + font-size: 14px; +} +.pearls-xs .pearl:before, .pearls-xs .pearl:after { + top: 12px; + height: 2px; +} +.pearls-xs .pearl-title { + font-size: 12px; +} +.pearls-xs .pearl-number, .pearls-xs .pearl-icon { + width: 24px; + height: 24px; + line-height: 20px; +} +.pearls-xs .pearl-number { + font-size: 12px; +} +.pearls-xs .pearl-icon { + font-size: 12px; +} +.timeline { + position: relative; + padding: 0; + margin-bottom: 22px; + list-style: none; + background: transparent; +} +.timeline:before { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + width: 2px; + margin-left: -1px; + content: ""; + background-color: #e4eaec; +} +.timeline:after { + display: table; + content: ""; +} +.timeline:after { + clear: both; +} +.timeline > li { + position: relative; + display: block; + float: left; + width: 50%; + padding-right: 40px; + margin-bottom: 60px; +} +.timeline > li:not(.timeline-period):before, .timeline > li:not(.timeline-period):after { + display: table; + content: " "; +} +.timeline > li:not(.timeline-period):after { + clear: both; +} +.timeline > li.timeline-period { + position: relative; + z-index: 6; + display: block; + float: none; + width: 200px; + padding: 25px 10px; + margin: 20px auto 30px; + clear: both; + font-size: 26px; + text-align: center; + text-transform: uppercase; + background: #f1f4f5; +} +.timeline > li.timeline-reverse { + float: right; + padding-right: 0; + padding-left: 40px; +} +.timeline > li:last-child { + margin-bottom: 0; +} +.timeline:not(.timeline-single) > li:not(.timeline-period):first-child + .timeline-item, .timeline:not(.timeline-single) > li.timeline-period + .timeline-item + .timeline-item { + margin-top: 90px; +} +.timeline-content { + float: left; + width: 100%; + overflow: hidden; + clear: left; +} +.timeline-reverse .timeline-content { + float: right; + clear: right; +} +.timeline-content > .widget { + margin: 0; +} +.timeline-dot { + position: absolute; + top: 7.5px; + right: 0; + z-index: 11; + color: #fff; + text-align: center; + cursor: pointer; + background-color: #62a8ea; + border-radius: 50%; +} +.timeline-reverse .timeline-dot { + right: auto; + left: 0; + margin-right: 0; +} +.timeline .timeline-dot { + width: 14px; + height: 14px; + margin-right: -7px; + line-height: 14px; +} +.timeline .timeline-reverse .timeline-dot { + margin-left: -7px; +} +.timeline.timeline-single { + margin-left: 7px; +} +.timeline.timeline-single .timeline-dot { + margin-left: -7px; +} +@media screen and (max-width: 767px) { + .timeline { + margin-left: 7px; + } + .timeline .timeline-dot { + margin-left: -7px; + } +} +.timeline-info { + float: right; + padding: 0 20px; + margin-bottom: 22px; + line-height: 28px; + text-align: center; + background: #e4eaec; + border: 1px solid #e4eaec; + border-radius: 20px; +} +.timeline-reverse .timeline-info { + float: left; +} +.timeline-footer { + position: absolute; + right: 0; + bottom: -30px; + margin-right: 55px; +} +.timeline-footer .icon { + margin-right: .3em; +} +.timeline-reverse .timeline-footer { + right: auto; + left: 0; + margin-right: 0; + margin-left: 55px; +} +.timeline-reverse + .timeline-reverse { + margin-top: 0; +} +@media screen and (max-width: 767px) { + .timeline:before { + left: 0; + } + .timeline > li, .timeline li.timeline-reverse { + float: none; + width: 100%; + padding-right: 0; + padding-left: 40px; + margin-top: 0; + margin-bottom: 60px; + } + .timeline-content { + float: none; + } + .timeline-dot { + right: auto; + left: 0; + margin-right: 0; + margin-left: -7px; + } + .timeline-info { + display: inline-block; + float: none; + } + .timeline-footer { + right: auto; + bottom: -26px; + left: 0; + margin-right: 0; + margin-left: 40px; + } +} +.timeline-single:before { + left: 0; +} +.timeline-single > li { + float: none; + width: 100%; + padding-right: 0; + padding-left: 40px; + margin-bottom: 60px; +} +.timeline-single .timeline-content { + float: none; +} +.timeline-single .timeline-dot { + right: auto; + left: 0; + margin-right: 0; + margin-left: -7px; +} +.timeline-single .timeline-info { + float: left; +} +.timeline-single .timeline-footer { + right: auto; + bottom: -26px; + left: 0; + margin-right: 0; + margin-left: 40px; +} +.timeline-icon .timeline-dot { + width: 40px; + height: 40px; + margin-right: -20px; + line-height: 40px; +} +.timeline-icon .timeline-reverse .timeline-dot { + margin-left: -20px; +} +.timeline-icon.timeline-single { + margin-left: 20px; +} +.timeline-icon.timeline-single .timeline-dot { + margin-left: -20px; +} +@media screen and (max-width: 767px) { + .timeline-icon { + margin-left: 20px; + } + .timeline-icon .timeline-dot { + margin-left: -20px; + } +} +.timeline-icon .timeline-dot { + top: -5.5px; +} +.timeline-avatar .timeline-dot { + width: 40px; + height: 40px; + margin-right: -20px; + line-height: 40px; +} +.timeline-avatar .timeline-reverse .timeline-dot { + margin-left: -20px; +} +.timeline-avatar.timeline-single { + margin-left: 20px; +} +.timeline-avatar.timeline-single .timeline-dot { + margin-left: -20px; +} +@media screen and (max-width: 767px) { + .timeline-avatar { + margin-left: 20px; + } + .timeline-avatar .timeline-dot { + margin-left: -20px; + } +} +.timeline-avatar-sm .timeline-dot { + width: 30px; + height: 30px; + margin-right: -15px; + line-height: 30px; +} +.timeline-avatar-sm .timeline-reverse .timeline-dot { + margin-left: -15px; +} +.timeline-avatar-sm.timeline-single { + margin-left: 15px; +} +.timeline-avatar-sm.timeline-single .timeline-dot { + margin-left: -15px; +} +@media screen and (max-width: 767px) { + .timeline-avatar-sm { + margin-left: 15px; + } + .timeline-avatar-sm .timeline-dot { + margin-left: -15px; + } +} +.timeline-avatar-lg .timeline-dot { + width: 50px; + height: 50px; + margin-right: -25px; + line-height: 50px; +} +.timeline-avatar-lg .timeline-reverse .timeline-dot { + margin-left: -25px; +} +.timeline-avatar-lg.timeline-single { + margin-left: 25px; +} +.timeline-avatar-lg.timeline-single .timeline-dot { + margin-left: -25px; +} +@media screen and (max-width: 767px) { + .timeline-avatar-lg { + margin-left: 25px; + } + .timeline-avatar-lg .timeline-dot { + margin-left: -25px; + } +} +.timeline-simple .timeline-dot { + top: 0; + margin-top: 10px; +} +.timeline-feed .timeline-dot { + width: 30px; + height: 30px; + margin-right: -15px; + line-height: 30px; +} +.timeline-feed .timeline-reverse .timeline-dot { + margin-left: -15px; +} +.timeline-feed.timeline-single { + margin-left: 15px; +} +.timeline-feed.timeline-single .timeline-dot { + margin-left: -15px; +} +@media screen and (max-width: 767px) { + .timeline-feed { + margin-left: 15px; + } + .timeline-feed .timeline-dot { + margin-left: -15px; + } +} +.timeline-feed.timeline-simple .timeline-dot { + margin-top: 5px; +} +.timeline-feed > li { + padding-right: 30px; + margin-bottom: 22px; +} +.timeline-feed > li.timeline-reverse { + padding-left: 30px; +} +.timeline-feed.timeline-single > li { + padding-left: 30px; +} +@media screen and (max-width: 767px) { + .timeline-feed > li { + padding-right: 30px; + margin-bottom: 22px; + } +} +@media screen and (max-width: 767px) { +} +.testimonial { + margin: 3px 3px 22px; +} +.testimonial-ul { + padding: 0; + margin: 0; + list-style: none; +} +.testimonial-item { + float: left; + padding: 0 15px 30px; + margin: 0; +} +.testimonial-content { + position: relative; + padding: 15px 20px; + margin-top: 10px; + margin-bottom: 25px; + background-color: #f3f7f9; + border-radius: 3px; +} +.testimonial-content:before { + position: absolute; + bottom: -7px; + left: 33px; + display: block; + width: 14px; + height: 14px; + content: ""; + background-color: #f3f7f9; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.testimonial-content > p:last-child { + margin-bottom: 0; +} +.testimonial-image { + position: relative; + float: left; + margin-top: 5px; + margin-left: 20px; +} +.testimonial-author { + display: block; + margin-left: 75px; + font-size: 18px; +} +.testimonial-company { + display: block; + margin-left: 75px; + font-size: 12px; + opacity: .8; +} +.testimonial-control a { + color: #ccd5db; +} +.testimonial-control a:hover { + color: #89bceb; + text-decoration: none; +} +.testimonial-reverse .testimonial-content:before { + right: 33px; + left: auto; +} +.testimonial-reverse .testimonial-image { + float: right; + margin-right: 20px; + margin-left: 0; +} +.testimonial-reverse .testimonial-author, .testimonial-reverse .testimonial-company { + margin-right: 75px; + margin-left: 0; + text-align: right; +} +.testimonial-top .testimonial-item { + padding: 30px 15px 0; +} +.testimonial-top .testimonial-content { + margin-top: 30px; + margin-bottom: 10px; +} +.testimonial-top .testimonial-content:before { + top: -7px; + bottom: auto; +} +.testimonial.carousel { + position: relative; + width: 100%; + overflow: hidden; +} +.testimonial.carousel .testimonial-item { + position: relative; + display: none; + width: 100%; + padding: 10px; + -webkit-transition: left .6s ease-in-out 0s; + -o-transition: left .6s ease-in-out 0s; + transition: left .6s ease-in-out 0s; +} +.testimonial.carousel .testimonial-item.active, .testimonial.carousel .testimonial-item.next, .testimonial.carousel .testimonial-item.prev { + display: block; +} +.testimonial.carousel .testimonial-item.next, .testimonial.carousel .testimonial-item.prev { + position: absolute; + top: 0; + width: 100%; +} +.testimonial.carousel .testimonial-item.next { + left: 100%; +} +.testimonial.carousel .testimonial-item.prev { + left: -100%; +} +.testimonial.carousel .testimonial-item.next.left, .testimonial.carousel .testimonial-item.prev.right { + left: 0; +} +.testimonial.carousel .testimonial-item.active { + left: 0; +} +.testimonial.carousel .testimonial-item.active.left { + left: -100%; +} +.testimonial.carousel .testimonial-item.active.right { + left: 100%; +} +.testimonial.carousel .testimonial-content { + padding: 10px; +} +.testimonial.carousel .testimonial-control { + position: absolute; + right: 10px; + bottom: 20px; +} +.testimonial.carousel .testimonial-control > * { + margin-left: 10px; +} +.testimonial.carousel.testimonial-reverse .testimonial-control { + right: auto; + left: 10px; +} +.testimonial.carousel.testimonial-reverse .testimonial-control > * { + margin-right: 10px; + margin-left: 0; +} +.testimonial.carousel.testimonial-top .testimonial-control { + top: 20px; + bottom: auto; +} +.pricing-list { + margin-bottom: 22px; + text-align: center; + border: 1px solid #e4eaec; + border-radius: 3px; +} +.pricing-list [class^="bg-"], .pricing-list [class*="bg-"], .pricing-list [class^="bg-"] *, .pricing-list [class*="bg-"] * { + color: #fff; +} +.pricing-list .pricing-header { + border-bottom: 1px solid #e4eaec; + border-radius: 3px 3px 0 0; +} +.pricing-list .pricing-title { + padding: 15px 30px; + font-size: 14px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 2px; + border-radius: 3px 3px 0 0; +} +.pricing-list .pricing-price { + padding: 20px 30px; + margin: 0; + font-size: 33px; + font-weight: 700; + color: #37474f; +} +.pricing-list .pricing-period { + font-size: 14px; + font-weight: 400; +} +.pricing-list .pricing-features { + padding: 0 18px; + margin: 0; +} +.pricing-list .pricing-features li { + display: block; + padding: 15px; + list-style: none; + border-top: 1px dashed #e4eaec; +} +.pricing-list .pricing-features li:first-child { + border-top: none; +} +.pricing-list .pricing-footer { + padding: 30px; + border-radius: 0 0 3px 3px; +} +.pricing-table { + padding-top: 30px; + text-align: center; +} +.pricing-table:before, .pricing-table:after { + display: table; + content: " "; +} +.pricing-table:after { + clear: both; +} +.pricing-table [class*="pricing-column"] { + float: left; + width: 100%; + margin-bottom: 30px; + background-color: #f3f7f9; + border: 1px solid #e4eaec; + border-right: none; +} +.pricing-table [class*="pricing-column"]:last-child { + border-right: 1px solid #e4eaec; +} +.pricing-table [class*="pricing-column"].featured { + position: relative; + margin-right: -1px; + background-color: #fff; + border-right: 1px solid #e4eaec; +} +.pricing-table .pricing-header { + padding-bottom: 24px; + margin: 30px 30px 25px; + border-bottom: 1px solid #e4eaec; +} +.pricing-table .pricing-price { + font-size: 48px; +} +.pricing-table .pricing-currency { + display: inline-block; + margin-top: 10px; + margin-right: -10px; + font-size: 20px; + vertical-align: top; +} +.pricing-table .pricing-period { + font-size: 16px; +} +.pricing-table .pricing-title { + font-size: 20px; + text-transform: uppercase; + letter-spacing: 2px; +} +.pricing-table .pricing-features { + padding: 0; + margin: 0; +} +.pricing-table .pricing-features li { + display: block; + margin-bottom: 20px; + font-size: 14px; + list-style: none; +} +.pricing-table .pricing-footer { + padding: 20px 0; + margin: 25px 30px 30px; +} +@media screen and (min-width: 768px) { + .pricing-table .pricing-column-three { + width: 33.33%; + } + .pricing-table .pricing-column-three.featured { + top: -30px; + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: -30px; + } + .pricing-table .pricing-column-four { + width: 50%; + } + .pricing-table .pricing-column-five { + width: 50%; + } +} +@media screen and (min-width: 1200px) { + .pricing-table .pricing-column-four { + width: 25%; + } + .pricing-table .pricing-column-five { + width: 20%; + } + .pricing-table .pricing-column-four.featured, .pricing-table .pricing-column-five.featured { + top: -30px; + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: -30px; + } +} +.rating { + display: inline-block; + margin: 0 .5rem 0 0; + font-size: 0; + vertical-align: middle; +} +.rating:before { + display: block; + height: 0; + clear: both; + visibility: hidden; + content: ""; +} +.rating.hover .icon.active { + opacity: .5; +} +.rating .icon { + width: 1em; + height: auto; + padding: 0; + margin: 0 10px 0 0; + font-size: 14px; + color: #ccd5db; + vertical-align: middle; + cursor: pointer; +} +.rating .icon:before { + -webkit-transition: color .3s ease, + opacity .3s ease; + -o-transition: color .3s ease, + opacity .3s ease; + transition: color .3s ease, + opacity .3s ease; +} +.rating .icon.active { + color: #f2a654 !important; +} +.rating .icon.active.hover { + color: #f2a654 !important; + opacity: 1; +} +.rating .icon.hover { + color: #f2a654 !important; + opacity: 1; +} +.rating .icon:last-child { + margin-right: 0; +} +.rating-disabled .icon { + cursor: default; +} +.rating-sm .icon { + font-size: 12px; +} +.rating-lg .icon { + font-size: 18px; +} +.ribbon { + position: absolute; + top: -3px; + left: -3px; + width: 150px; + height: 150px; + text-align: center; + background-color: transparent; +} +.ribbon-inner { + position: absolute; + top: 16px; + left: 0; + display: inline-block; + height: 30px; + padding-right: 20px; + padding-left: 20px; + line-height: 30px; + color: #fff; + white-space: nowrap; + background-color: #526069; +} +.ribbon-inner .icon { + font-size: 16px; +} +.ribbon-lg .ribbon-inner { + height: 38px; + font-size: 18px; + line-height: 38px; +} +.ribbon-sm .ribbon-inner { + height: 26px; + font-size: 12px; + line-height: 26px; +} +.ribbon-xs .ribbon-inner { + height: 22px; + font-size: 12px; + line-height: 22px; +} +.ribbon-vertical .ribbon-inner { + top: 0; + left: 16px; + width: 30px; + height: 60px; + padding: 15px 0; +} +.ribbon-vertical.ribbon-xs .ribbon-inner { + width: 22px; + height: 50px; +} +.ribbon-vertical.ribbon-sm .ribbon-inner { + width: 26px; + height: 55px; +} +.ribbon-vertical.ribbon-lg .ribbon-inner { + width: 38px; + height: 70px; +} +.ribbon-reverse { + right: -3px; + left: auto; +} +.ribbon-reverse .ribbon-inner { + right: 0; + left: auto; +} +.ribbon-reverse.ribbon-vertical .ribbon-inner { + right: 16px; +} +.ribbon-bookmark .ribbon-inner { + -webkit-box-shadow: none; + box-shadow: none; +} +.ribbon-bookmark .ribbon-inner:before { + position: absolute; + top: 0; + left: 100%; + display: block; + width: 0; + height: 0; + content: ""; + border: 15px solid #526069; + border-right: 10px solid transparent; +} +.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + top: 100%; + left: 0; + margin-top: -15px; + border-right: 15px solid #526069; + border-bottom: 10px solid transparent; +} +.ribbon-bookmark.ribbon-vertical.ribbon-xs .ribbon-inner:before { + margin-top: -11px; +} +.ribbon-bookmark.ribbon-vertical.ribbon-sm .ribbon-inner:before { + margin-top: -13px; +} +.ribbon-bookmark.ribbon-vertical.ribbon-lg .ribbon-inner:before { + margin-top: -19px; +} +.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + right: 100%; + left: auto; + border-right: 15px solid #526069; + border-left: 10px solid transparent; +} +.ribbon-bookmark.ribbon-reverse.ribbon-vertical .ribbon-inner:before { + right: auto; + left: 0; + border-right-color: #526069; + border-bottom-color: transparent; + border-left: 15px solid #526069; +} +.ribbon-bookmark.ribbon-xs .ribbon-inner:before { + border-width: 11px; +} +.ribbon-bookmark.ribbon-sm .ribbon-inner:before { + border-width: 13px; +} +.ribbon-bookmark.ribbon-lg .ribbon-inner:before { + border-width: 19px; +} +.ribbon-badge { + top: -2px; + left: -2px; + overflow: hidden; +} +.ribbon-badge .ribbon-inner { + left: -40px; + width: 100%; + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.ribbon-badge.ribbon-reverse { + right: -2px; + left: auto; +} +.ribbon-badge.ribbon-reverse .ribbon-inner { + right: -40px; + left: auto; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.ribbon-badge.ribbon-bottom { + top: auto; + bottom: -2px; +} +.ribbon-badge.ribbon-bottom .ribbon-inner { + top: auto; + bottom: 16px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.ribbon-badge.ribbon-bottom.ribbon-reverse .ribbon-inner { + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.ribbon-corner { + top: 0; + left: 0; + overflow: hidden; +} +.ribbon-corner .ribbon-inner { + top: 0; + left: 0; + width: 40px; + height: 35px; + padding: 0; + line-height: 35px; + background-color: transparent; +} +.ribbon-corner .ribbon-inner:before { + position: absolute; + top: 0; + left: 0; + width: 0; + height: 0; + content: ""; + border: 30px solid transparent; + border-top-color: #526069; + border-left-color: #526069; +} +.ribbon-corner.ribbon-reverse { + right: 0; + left: auto; +} +.ribbon-corner.ribbon-reverse .ribbon-inner { + right: 0; + left: auto; +} +.ribbon-corner.ribbon-reverse .ribbon-inner:before { + right: 0; + left: auto; + border-right-color: #526069; + border-left-color: transparent; +} +.ribbon-corner.ribbon-bottom { + top: auto; + bottom: 0; +} +.ribbon-corner.ribbon-bottom .ribbon-inner { + top: auto; + bottom: 0; +} +.ribbon-corner.ribbon-bottom .ribbon-inner:before { + top: auto; + bottom: 0; + border-top-color: transparent; + border-bottom-color: #526069; +} +.ribbon-corner.ribbon-xs .ribbon-inner { + width: 28px; + height: 26px; + line-height: 26px; +} +.ribbon-corner.ribbon-xs .ribbon-inner:before { + border-width: 22px; +} +.ribbon-corner.ribbon-xs .ribbon-inner > .icon { + font-size: 12px; +} +.ribbon-corner.ribbon-sm .ribbon-inner { + width: 34px; + height: 32px; + line-height: 32px; +} +.ribbon-corner.ribbon-sm .ribbon-inner:before { + border-width: 26px; +} +.ribbon-corner.ribbon-sm .ribbon-inner > .icon { + font-size: 12px; +} +.ribbon-corner.ribbon-lg .ribbon-inner { + width: 46px; + height: 44px; + line-height: 44px; +} +.ribbon-corner.ribbon-lg .ribbon-inner:before { + border-width: 36px; +} +.ribbon-corner.ribbon-lg .ribbon-inner > .icon { + font-size: 18px; +} +.ribbon-clip { + left: -14px; +} +.ribbon-clip .ribbon-inner { + padding-left: 23px; + border-radius: 0 5px 5px 0; +} +.ribbon-clip .ribbon-inner:after { + position: absolute; + bottom: -14px; + left: 0; + width: 0; + height: 0; + content: ""; + border: 7px solid transparent; + border-top-color: #37474f; + border-right-color: #37474f; +} +.ribbon-clip.ribbon-reverse { + right: -14px; + left: auto; +} +.ribbon-clip.ribbon-reverse .ribbon-inner { + padding-right: 23px; + padding-left: 15px; + border-radius: 5px 0 0 5px; +} +.ribbon-clip.ribbon-reverse .ribbon-inner:after { + right: 0; + left: auto; + border-right-color: transparent; + border-left-color: #37474f; +} +.ribbon-clip.ribbon-bottom { + top: auto; + bottom: -3px; +} +.ribbon-clip.ribbon-bottom .ribbon-inner { + top: auto; + bottom: 16px; +} +.ribbon-clip.ribbon-bottom .ribbon-inner:after { + top: -14px; + bottom: auto; + border-top-color: transparent; + border-bottom-color: #37474f; +} +.ribbon-primary .ribbon-inner { + background-color: #62a8ea; +} +.ribbon-primary.ribbon-bookmark .ribbon-inner:before { + border-color: #62a8ea; + border-right-color: transparent; +} +.ribbon-primary.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + border-right-color: #62a8ea; + border-left-color: transparent; +} +.ribbon-primary.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + border-right-color: #62a8ea; + border-bottom-color: transparent; +} +.ribbon-primary.ribbon-bookmark.ribbon-vertical.ribbon-reverse .ribbon-inner:before { + border-right-color: #62a8ea; + border-bottom-color: transparent; + border-left-color: #62a8ea; +} +.ribbon-primary.ribbon-corner .ribbon-inner { + background-color: transparent; +} +.ribbon-primary.ribbon-corner .ribbon-inner:before { + border-top-color: #62a8ea; + border-left-color: #62a8ea; +} +.ribbon-primary.ribbon-corner.ribbon-reverse .ribbon-inner:before { + border-right-color: #62a8ea; + border-left-color: transparent; +} +.ribbon-primary.ribbon-corner.ribbon-bottom .ribbon-inner:before { + border-top-color: transparent; + border-bottom-color: #62a8ea; +} +.ribbon-primary .ribbon-inner:after { + border-top-color: #4e97d9; + border-right-color: #4e97d9; +} +.ribbon-primary.ribbon-reverse .ribbon-inner:after { + border-right-color: transparent; + border-left-color: #4e97d9; +} +.ribbon-primary.ribbon-bottom .ribbon-inner:after { + border-top-color: transparent; + border-bottom-color: #4e97d9; +} +.ribbon-success .ribbon-inner { + background-color: #46be8a; +} +.ribbon-success.ribbon-bookmark .ribbon-inner:before { + border-color: #46be8a; + border-right-color: transparent; +} +.ribbon-success.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + border-right-color: #46be8a; + border-left-color: transparent; +} +.ribbon-success.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + border-right-color: #46be8a; + border-bottom-color: transparent; +} +.ribbon-success.ribbon-bookmark.ribbon-vertical.ribbon-reverse .ribbon-inner:before { + border-right-color: #46be8a; + border-bottom-color: transparent; + border-left-color: #46be8a; +} +.ribbon-success.ribbon-corner .ribbon-inner { + background-color: transparent; +} +.ribbon-success.ribbon-corner .ribbon-inner:before { + border-top-color: #46be8a; + border-left-color: #46be8a; +} +.ribbon-success.ribbon-corner.ribbon-reverse .ribbon-inner:before { + border-right-color: #46be8a; + border-left-color: transparent; +} +.ribbon-success.ribbon-corner.ribbon-bottom .ribbon-inner:before { + border-top-color: transparent; + border-bottom-color: #46be8a; +} +.ribbon-success .ribbon-inner:after { + border-top-color: #36ab7a; + border-right-color: #36ab7a; +} +.ribbon-success.ribbon-reverse .ribbon-inner:after { + border-right-color: transparent; + border-left-color: #36ab7a; +} +.ribbon-success.ribbon-bottom .ribbon-inner:after { + border-top-color: transparent; + border-bottom-color: #36ab7a; +} +.ribbon-info .ribbon-inner { + background-color: #57c7d4; +} +.ribbon-info.ribbon-bookmark .ribbon-inner:before { + border-color: #57c7d4; + border-right-color: transparent; +} +.ribbon-info.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + border-right-color: #57c7d4; + border-left-color: transparent; +} +.ribbon-info.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + border-right-color: #57c7d4; + border-bottom-color: transparent; +} +.ribbon-info.ribbon-bookmark.ribbon-vertical.ribbon-reverse .ribbon-inner:before { + border-right-color: #57c7d4; + border-bottom-color: transparent; + border-left-color: #57c7d4; +} +.ribbon-info.ribbon-corner .ribbon-inner { + background-color: transparent; +} +.ribbon-info.ribbon-corner .ribbon-inner:before { + border-top-color: #57c7d4; + border-left-color: #57c7d4; +} +.ribbon-info.ribbon-corner.ribbon-reverse .ribbon-inner:before { + border-right-color: #57c7d4; + border-left-color: transparent; +} +.ribbon-info.ribbon-corner.ribbon-bottom .ribbon-inner:before { + border-top-color: transparent; + border-bottom-color: #57c7d4; +} +.ribbon-info .ribbon-inner:after { + border-top-color: #47b8c6; + border-right-color: #47b8c6; +} +.ribbon-info.ribbon-reverse .ribbon-inner:after { + border-right-color: transparent; + border-left-color: #47b8c6; +} +.ribbon-info.ribbon-bottom .ribbon-inner:after { + border-top-color: transparent; + border-bottom-color: #47b8c6; +} +.ribbon-warning .ribbon-inner { + background-color: #f2a654; +} +.ribbon-warning.ribbon-bookmark .ribbon-inner:before { + border-color: #f2a654; + border-right-color: transparent; +} +.ribbon-warning.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + border-right-color: #f2a654; + border-left-color: transparent; +} +.ribbon-warning.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + border-right-color: #f2a654; + border-bottom-color: transparent; +} +.ribbon-warning.ribbon-bookmark.ribbon-vertical.ribbon-reverse .ribbon-inner:before { + border-right-color: #f2a654; + border-bottom-color: transparent; + border-left-color: #f2a654; +} +.ribbon-warning.ribbon-corner .ribbon-inner { + background-color: transparent; +} +.ribbon-warning.ribbon-corner .ribbon-inner:before { + border-top-color: #f2a654; + border-left-color: #f2a654; +} +.ribbon-warning.ribbon-corner.ribbon-reverse .ribbon-inner:before { + border-right-color: #f2a654; + border-left-color: transparent; +} +.ribbon-warning.ribbon-corner.ribbon-bottom .ribbon-inner:before { + border-top-color: transparent; + border-bottom-color: #f2a654; +} +.ribbon-warning .ribbon-inner:after { + border-top-color: #ec9940; + border-right-color: #ec9940; +} +.ribbon-warning.ribbon-reverse .ribbon-inner:after { + border-right-color: transparent; + border-left-color: #ec9940; +} +.ribbon-warning.ribbon-bottom .ribbon-inner:after { + border-top-color: transparent; + border-bottom-color: #ec9940; +} +.ribbon-danger .ribbon-inner { + background-color: #f96868; +} +.ribbon-danger.ribbon-bookmark .ribbon-inner:before { + border-color: #f96868; + border-right-color: transparent; +} +.ribbon-danger.ribbon-bookmark.ribbon-reverse .ribbon-inner:before { + border-right-color: #f96868; + border-left-color: transparent; +} +.ribbon-danger.ribbon-bookmark.ribbon-vertical .ribbon-inner:before { + border-right-color: #f96868; + border-bottom-color: transparent; +} +.ribbon-danger.ribbon-bookmark.ribbon-vertical.ribbon-reverse .ribbon-inner:before { + border-right-color: #f96868; + border-bottom-color: transparent; + border-left-color: #f96868; +} +.ribbon-danger.ribbon-corner .ribbon-inner { + background-color: transparent; +} +.ribbon-danger.ribbon-corner .ribbon-inner:before { + border-top-color: #f96868; + border-left-color: #f96868; +} +.ribbon-danger.ribbon-corner.ribbon-reverse .ribbon-inner:before { + border-right-color: #f96868; + border-left-color: transparent; +} +.ribbon-danger.ribbon-corner.ribbon-bottom .ribbon-inner:before { + border-top-color: transparent; + border-bottom-color: #f96868; +} +.ribbon-danger .ribbon-inner:after { + border-top-color: #e9595b; + border-right-color: #e9595b; +} +.ribbon-danger.ribbon-reverse .ribbon-inner:after { + border-right-color: transparent; + border-left-color: #e9595b; +} +.ribbon-danger.ribbon-bottom .ribbon-inner:after { + border-top-color: transparent; + border-bottom-color: #e9595b; +} +.dotnav { + padding: 0; + margin: 0; + text-align: center; + list-style: none; +} +.dotnav > li { + position: relative; + display: inline-block; + width: 16px; + height: 16px; + margin: 0 16px; + vertical-align: top; + list-style: none; +} +.dotnav > li > a { + display: inline-block; + width: 100%; + height: 100%; + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + cursor: pointer; + background-color: rgba(255, 255, 255, .3); + border-radius: 50%; +} +.dotnav > li > a:focus { + outline: none; +} +.dotnav > li.active > a, .dotnav > li:hover > a, .dotnav > li:focus > a { + background-color: #fff; +} +.dotnav-scaleup > li > a { + -webkit-transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.dotnav-scaleup > li.active > a { + -webkit-transform: scale(1.5); + -ms-transform: scale(1.5); + -o-transform: scale(1.5); + transform: scale(1.5); +} +.dotnav-stroke > li > a { + border: 2px solid transparent; + -webkit-transition: border .3s ease 0s, background-color .3s ease 0s; + -o-transition: border .3s ease 0s, background-color .3s ease 0s; + transition: border .3s ease 0s, background-color .3s ease 0s; +} +.dotnav-stroke > li.active > a { + background-color: transparent; + border-color: #fff; + -webkit-transform: scale(1.3); + -ms-transform: scale(1.3); + -o-transform: scale(1.3); + transform: scale(1.3); +} +.dotnav-fillin > li > a { + background-color: transparent; + -webkit-box-shadow: 0 0 0 2px #fff inset; + box-shadow: 0 0 0 2px #fff inset; + -webkit-transition: -webkit-box-shadow .3s ease 0s; + -o-transition: box-shadow .3s ease 0s; + transition: -webkit-box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s, -webkit-box-shadow .3s ease 0s; +} +.dotnav-fillin > li:hover > a, .dotnav-fillin > li:focus > a { + background-color: transparent; + -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, .6) inset; + box-shadow: 0 0 0 2px rgba(255, 255, 255, .6) inset; +} +.dotnav-fillin > li.active > a { + -webkit-box-shadow: 0 0 0 8px #fff inset; + box-shadow: 0 0 0 8px #fff inset; +} +.dotnav-dotstroke > li > a { + -webkit-box-shadow: 0 0 0 8px rgba(255, 255, 255, .5) inset; + box-shadow: 0 0 0 8px rgba(255, 255, 255, .5) inset; + -webkit-transition: -webkit-box-shadow .3s ease 0s; + -o-transition: box-shadow .3s ease 0s; + transition: -webkit-box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s; + transition: box-shadow .3s ease 0s, -webkit-box-shadow .3s ease 0s; +} +.dotnav-dotstroke > li.active > a { + background-color: rgba(255, 255, 255, .3); + -webkit-box-shadow: 0 0 0 2px #fff inset; + box-shadow: 0 0 0 2px #fff inset; +} +.dotnav-fall > li:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + visibility: hidden; + content: ""; + background-color: rgba(0, 0, 0, .3); + border-radius: 50%; + opacity: 0; + -webkit-transition: opacity .3s ease 0s, visibility 0s ease .3s, -webkit-transform .3s ease 0s; + -o-transition: opacity .3s ease 0s, visibility 0s ease .3s, -o-transform .3s ease 0s; + transition: opacity .3s ease 0s, visibility 0s ease .3s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, opacity .3s ease 0s, visibility 0s ease .3s; + transition: transform .3s ease 0s, opacity .3s ease 0s, visibility 0s ease .3s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; + -webkit-transform: translate(0%, -200%); + -ms-transform: translate(0%, -200%); + -o-transform: translate(0%, -200%); + transform: translate(0%, -200%); +} +.dotnav-fall > li > a { + -webkit-transition: opacity .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: opacity .3s ease 0s, background-color .3s ease 0s, -o-transform .3s ease 0s; + transition: opacity .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, opacity .3s ease 0s, background-color .3s ease 0s; + transition: transform .3s ease 0s, opacity .3s ease 0s, background-color .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; +} +.dotnav-fall > li.active:after { + visibility: visible; + opacity: 1; + -webkit-transition: opacity .3s ease 0s, -webkit-transform .3s ease 0s; + -o-transition: opacity .3s ease 0s, -o-transform .3s ease 0s; + transition: opacity .3s ease 0s, -webkit-transform .3s ease 0s; + transition: transform .3s ease 0s, opacity .3s ease 0s; + transition: transform .3s ease 0s, opacity .3s ease 0s, -webkit-transform .3s ease 0s, -o-transform .3s ease 0s; + -webkit-transform: translate(0%, 0%); + -ms-transform: translate(0%, 0%); + -o-transform: translate(0%, 0%); + transform: translate(0%, 0%); +} +.dotnav-fall > li.active > a { + opacity: 0; + -webkit-transform: translate(0, 200%); + -ms-transform: translate(0, 200%); + -o-transform: translate(0, 200%); + transform: translate(0, 200%); +} +.color-selector { + padding: 0; + margin: 0; + list-style: none; +} +.color-selector > li { + position: relative; + display: inline-block; + width: 24px; + height: 24px; + margin: 0 5px 0 0; + background-color: #62a8ea; + border-radius: 100%; +} +.color-selector > li:hover { + opacity: .8; +} +.color-selector > li:before { + position: absolute; + top: 0; + left: 0; + display: inline-block; + width: inherit; + height: inherit; + content: ""; + background: inherit; + border: 1px solid rgba(0, 0, 0, .1); + border-radius: inherit; +} +.color-selector > li input[type="radio"] { + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: inherit; + height: inherit; + cursor: pointer; + border-radius: inherit; + opacity: 0; +} +.color-selector > li input[type="radio"]:disabled { + cursor: not-allowed; +} +.color-selector > li label { + position: relative; + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; +} +.color-selector > li input[type="radio"]:checked + label:after { + position: absolute; + top: 0; + left: 5px; + display: inline-block; + margin-top: -5px; + font-size: 14px; + line-height: 1; + color: #fff; + content: "\f192"; +} +.color-selector > li.color-selector-disabled { + background-color: #ccd5db !important; +} +.color-selector > li.color-selector-disabled input[type="radio"]:disabled { + cursor: not-allowed; +} +.width-50 { + width: 50px; +} +.width-100 { + width: 100px; +} +.width-150 { + width: 150px; +} +.width-200 { + width: 200px; +} +.width-250 { + width: 250px; +} +.width-300 { + width: 300px; +} +.width-350 { + width: 350px; +} +.width-400 { + width: 400px; +} +.width-450 { + width: 450px; +} +.width-500 { + width: 500px; +} +.width-full { + width: 100% !important; +} +@media (max-width: 767px) { + .width-xs-50 { + width: 50px; + } + .width-xs-100 { + width: 100px; + } + .width-xs-150 { + width: 150px; + } + .width-xs-200 { + width: 200px; + } + .width-xs-250 { + width: 250px; + } + .width-xs-300 { + width: 300px; + } + .width-xs-350 { + width: 350px; + } + .width-xs-400 { + width: 400px; + } + .width-xs-450 { + width: 450px; + } + .width-xs-500 { + width: 500px; + } + .width-xs-100pc { + width: 100%; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .width-sm-50 { + width: 50px; + } + .width-sm-100 { + width: 100px; + } + .width-sm-150 { + width: 150px; + } + .width-sm-200 { + width: 200px; + } + .width-sm-250 { + width: 250px; + } + .width-sm-300 { + width: 300px; + } + .width-sm-350 { + width: 350px; + } + .width-sm-400 { + width: 400px; + } + .width-sm-450 { + width: 450px; + } + .width-sm-500 { + width: 500px; + } + .width-sm-100pc { + width: 100%; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .width-md-50 { + width: 50px; + } + .width-md-100 { + width: 100px; + } + .width-md-150 { + width: 150px; + } + .width-md-200 { + width: 200px; + } + .width-md-250 { + width: 250px; + } + .width-md-300 { + width: 300px; + } + .width-md-350 { + width: 350px; + } + .width-md-400 { + width: 400px; + } + .width-md-450 { + width: 450px; + } + .width-md-500 { + width: 500px; + } +} +@media (min-width: 1200px) { + .width-lg-50 { + width: 50px; + } + .width-lg-100 { + width: 100px; + } + .width-lg-150 { + width: 150px; + } + .width-lg-200 { + width: 200px; + } + .width-lg-250 { + width: 250px; + } + .width-lg-300 { + width: 300px; + } + .width-lg-350 { + width: 350px; + } + .width-lg-400 { + width: 400px; + } + .width-lg-450 { + width: 450px; + } + .width-lg-500 { + width: 500px; + } +} +.height-50 { + height: 50px; +} +.height-100 { + height: 100px; +} +.height-120 { + height: 120px; +} +.height-150 { + height: 150px; +} +.height-200 { + height: 200px; +} +.height-250 { + height: 250px; +} +.height-300 { + height: 300px; +} +.height-350 { + height: 350px; +} +.height-400 { + height: 400px; +} +.height-450 { + height: 450px; +} +.height-500 { + height: 500px; +} +.height-full { + height: 100% !important; +} +@media (max-width: 767px) { + .height-xs-50 { + height: 50px; + } + .height-xs-100 { + height: 100px; + } + .height-xs-120 { + height: 120px; + } + .height-xs-150 { + height: 150px; + } + .height-xs-200 { + height: 200px; + } + .height-xs-250 { + height: 250px; + } + .height-xs-300 { + height: 300px; + } + .height-xs-350 { + height: 350px; + } + .height-xs-400 { + height: 400px; + } + .height-xs-450 { + height: 450px; + } + .height-xs-500 { + height: 500px; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .height-sm-50 { + height: 50px; + } + .height-sm-100 { + height: 100px; + } + .height-sm-120 { + height: 120px; + } + .height-sm-150 { + height: 150px; + } + .height-sm-200 { + height: 200px; + } + .height-sm-250 { + height: 250px; + } + .height-sm-300 { + height: 300px; + } + .height-sm-350 { + height: 350px; + } + .height-sm-400 { + height: 400px; + } + .height-sm-450 { + height: 450px; + } + .height-sm-500 { + height: 500px; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .height-md-50 { + height: 50px; + } + .height-md-100 { + height: 100px; + } + .height-md-120 { + height: 120px; + } + .height-md-150 { + height: 150px; + } + .height-md-200 { + height: 200px; + } + .height-md-250 { + height: 250px; + } + .height-md-300 { + height: 300px; + } + .height-md-350 { + height: 350px; + } + .height-md-400 { + height: 400px; + } + .height-md-450 { + height: 450px; + } + .height-md-500 { + height: 500px; + } +} +@media (min-width: 1200px) { + .height-lg-50 { + height: 50px; + } + .height-lg-100 { + height: 100px; + } + .height-lg-120 { + height: 120px; + } + .height-lg-150 { + height: 150px; + } + .height-lg-200 { + height: 200px; + } + .height-lg-250 { + height: 250px; + } + .height-lg-300 { + height: 300px; + } + .height-lg-350 { + height: 350px; + } + .height-lg-400 { + height: 400px; + } + .height-lg-450 { + height: 450px; + } + .height-lg-500 { + height: 500px; + } +} +.margin-0 { + margin: 0 !important; +} +.margin-3 { + margin: 3px !important; +} +.margin-5 { + margin: 5px !important; +} +.margin-10 { + margin: 10px !important; +} +.margin-15 { + margin: 15px !important; +} +.margin-20 { + margin: 20px !important; +} +.margin-25 { + margin: 25px !important; +} +.margin-30 { + margin: 30px !important; +} +.margin-35 { + margin: 35px !important; +} +.margin-40 { + margin: 40px !important; +} +.margin-45 { + margin: 45px !important; +} +.margin-50 { + margin: 50px !important; +} +.margin-60 { + margin: 60px !important; +} +.margin-70 { + margin: 70px !important; +} +.margin-80 { + margin: 80px !important; +} +.margin-vertical-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.margin-vertical-3 { + margin-top: 3px !important; + margin-bottom: 3px !important; +} +.margin-vertical-5 { + margin-top: 5px !important; + margin-bottom: 5px !important; +} +.margin-vertical-10 { + margin-top: 10px !important; + margin-bottom: 10px !important; +} +.margin-vertical-15 { + margin-top: 15px !important; + margin-bottom: 15px !important; +} +.margin-vertical-20 { + margin-top: 20px !important; + margin-bottom: 20px !important; +} +.margin-vertical-25 { + margin-top: 25px !important; + margin-bottom: 25px !important; +} +.margin-vertical-30 { + margin-top: 30px !important; + margin-bottom: 30px !important; +} +.margin-vertical-35 { + margin-top: 35px !important; + margin-bottom: 35px !important; +} +.margin-vertical-40 { + margin-top: 40px !important; + margin-bottom: 40px !important; +} +.margin-vertical-45 { + margin-top: 45px !important; + margin-bottom: 45px !important; +} +.margin-vertical-50 { + margin-top: 50px !important; + margin-bottom: 50px !important; +} +.margin-vertical-60 { + margin-top: 60px !important; + margin-bottom: 60px !important; +} +.margin-vertical-70 { + margin-top: 70px !important; + margin-bottom: 70px !important; +} +.margin-vertical-80 { + margin-top: 80px !important; + margin-bottom: 80px !important; +} +.margin-horizontal-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.margin-horizontal-3 { + margin-right: 3px !important; + margin-left: 3px !important; +} +.margin-horizontal-5 { + margin-right: 5px !important; + margin-left: 5px !important; +} +.margin-horizontal-10 { + margin-right: 10px !important; + margin-left: 10px !important; +} +.margin-horizontal-15 { + margin-right: 15px !important; + margin-left: 15px !important; +} +.margin-horizontal-20 { + margin-right: 20px !important; + margin-left: 20px !important; +} +.margin-horizontal-25 { + margin-right: 25px !important; + margin-left: 25px !important; +} +.margin-horizontal-30 { + margin-right: 30px !important; + margin-left: 30px !important; +} +.margin-horizontal-35 { + margin-right: 35px !important; + margin-left: 35px !important; +} +.margin-horizontal-40 { + margin-right: 40px !important; + margin-left: 40px !important; +} +.margin-horizontal-45 { + margin-right: 45px !important; + margin-left: 45px !important; +} +.margin-horizontal-50 { + margin-right: 50px !important; + margin-left: 50px !important; +} +.margin-horizontal-60 { + margin-right: 60px !important; + margin-left: 60px !important; +} +.margin-horizontal-70 { + margin-right: 70px !important; + margin-left: 70px !important; +} +.margin-horizontal-80 { + margin-right: 80px !important; + margin-left: 80px !important; +} +.margin-top-0 { + margin-top: 0 !important; +} +.margin-top-3 { + margin-top: 3px !important; +} +.margin-top-5 { + margin-top: 5px !important; +} +.margin-top-10 { + margin-top: 10px !important; +} +.margin-top-15 { + margin-top: 15px !important; +} +.margin-top-20 { + margin-top: 20px !important; +} +.margin-top-25 { + margin-top: 25px !important; +} +.margin-top-30 { + margin-top: 30px !important; +} +.margin-top-35 { + margin-top: 35px !important; +} +.margin-top-40 { + margin-top: 40px !important; +} +.margin-top-45 { + margin-top: 45px !important; +} +.margin-top-50 { + margin-top: 50px !important; +} +.margin-top-60 { + margin-top: 60px !important; +} +.margin-top-70 { + margin-top: 70px !important; +} +.margin-top-80 { + margin-top: 80px !important; +} +.margin-bottom-0 { + margin-bottom: 0 !important; +} +.margin-bottom-3 { + margin-bottom: 3px !important; +} +.margin-bottom-5 { + margin-bottom: 5px !important; +} +.margin-bottom-10 { + margin-bottom: 10px !important; +} +.margin-bottom-15 { + margin-bottom: 15px !important; +} +.margin-bottom-20 { + margin-bottom: 20px !important; +} +.margin-bottom-25 { + margin-bottom: 25px !important; +} +.margin-bottom-30 { + margin-bottom: 30px !important; +} +.margin-bottom-35 { + margin-bottom: 35px !important; +} +.margin-bottom-40 { + margin-bottom: 40px !important; +} +.margin-bottom-45 { + margin-bottom: 45px !important; +} +.margin-bottom-50 { + margin-bottom: 50px !important; +} +.margin-bottom-60 { + margin-bottom: 60px !important; +} +.margin-bottom-70 { + margin-bottom: 70px !important; +} +.margin-bottom-80 { + margin-bottom: 80px !important; +} +.margin-left-0 { + margin-left: 0 !important; +} +.margin-left-3 { + margin-left: 3px !important; +} +.margin-left-5 { + margin-left: 5px !important; +} +.margin-left-10 { + margin-left: 10px !important; +} +.margin-left-15 { + margin-left: 15px !important; +} +.margin-left-20 { + margin-left: 20px !important; +} +.margin-left-25 { + margin-left: 25px !important; +} +.margin-left-30 { + margin-left: 30px !important; +} +.margin-left-35 { + margin-left: 35px !important; +} +.margin-left-40 { + margin-left: 40px !important; +} +.margin-left-45 { + margin-left: 45px !important; +} +.margin-left-50 { + margin-left: 50px !important; +} +.margin-left-60 { + margin-left: 60px !important; +} +.margin-left-70 { + margin-left: 70px !important; +} +.margin-left-80 { + margin-left: 80px !important; +} +.margin-right-0 { + margin-right: 0 !important; +} +.margin-right-3 { + margin-right: 3px !important; +} +.margin-right-5 { + margin-right: 5px !important; +} +.margin-right-10 { + margin-right: 10px !important; +} +.margin-right-15 { + margin-right: 15px !important; +} +.margin-right-20 { + margin-right: 20px !important; +} +.margin-right-25 { + margin-right: 25px !important; +} +.margin-right-30 { + margin-right: 30px !important; +} +.margin-right-35 { + margin-right: 35px !important; +} +.margin-right-40 { + margin-right: 40px !important; +} +.margin-right-45 { + margin-right: 45px !important; +} +.margin-right-50 { + margin-right: 50px !important; +} +.margin-right-60 { + margin-right: 60px !important; +} +.margin-right-70 { + margin-right: 70px !important; +} +.margin-right-80 { + margin-right: 80px !important; +} +@media (max-width: 767px) { + .margin-xs-0 { + margin: 0 !important; + } +} +@media (min-width: 768px) { + .margin-sm-0 { + margin: 0 !important; + } +} +@media (min-width: 992px) { + .margin-md-0 { + margin: 0 !important; + } +} +@media (min-width: 1200px) { + .margin-lg-0 { + margin: 0 !important; + } +} +.padding-0 { + padding: 0 !important; +} +.padding-3 { + padding: 3px !important; +} +.padding-5 { + padding: 5px !important; +} +.padding-10 { + padding: 10px !important; +} +.padding-15 { + padding: 15px !important; +} +.padding-20 { + padding: 20px !important; +} +.padding-25 { + padding: 25px !important; +} +.padding-30 { + padding: 30px !important; +} +.padding-35 { + padding: 35px !important; +} +.padding-40 { + padding: 40px !important; +} +.padding-45 { + padding: 45px !important; +} +.padding-50 { + padding: 50px !important; +} +.padding-60 { + padding: 60px !important; +} +.padding-70 { + padding: 70px !important; +} +.padding-80 { + padding: 80px !important; +} +.padding-vertical-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.padding-vertical-3 { + padding-top: 3px !important; + padding-bottom: 3px !important; +} +.padding-vertical-5 { + padding-top: 5px !important; + padding-bottom: 5px !important; +} +.padding-vertical-10 { + padding-top: 10px !important; + padding-bottom: 10px !important; +} +.padding-vertical-15 { + padding-top: 15px !important; + padding-bottom: 15px !important; +} +.padding-vertical-20 { + padding-top: 20px !important; + padding-bottom: 20px !important; +} +.padding-vertical-25 { + padding-top: 25px !important; + padding-bottom: 25px !important; +} +.padding-vertical-30 { + padding-top: 30px !important; + padding-bottom: 30px !important; +} +.padding-vertical-35 { + padding-top: 35px !important; + padding-bottom: 35px !important; +} +.padding-vertical-40 { + padding-top: 40px !important; + padding-bottom: 40px !important; +} +.padding-vertical-45 { + padding-top: 45px !important; + padding-bottom: 45px !important; +} +.padding-vertical-50 { + padding-top: 50px !important; + padding-bottom: 50px !important; +} +.padding-vertical-60 { + padding-top: 60px !important; + padding-bottom: 60px !important; +} +.padding-vertical-70 { + padding-top: 70px !important; + padding-bottom: 70px !important; +} +.padding-vertical-80 { + padding-top: 80px !important; + padding-bottom: 80px !important; +} +.padding-horizontal-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} +.padding-horizontal-3 { + padding-right: 3px !important; + padding-left: 3px !important; +} +.padding-horizontal-5 { + padding-right: 5px !important; + padding-left: 5px !important; +} +.padding-horizontal-10 { + padding-right: 10px !important; + padding-left: 10px !important; +} +.padding-horizontal-15 { + padding-right: 15px !important; + padding-left: 15px !important; +} +.padding-horizontal-20 { + padding-right: 20px !important; + padding-left: 20px !important; +} +.padding-horizontal-25 { + padding-right: 25px !important; + padding-left: 25px !important; +} +.padding-horizontal-30 { + padding-right: 30px !important; + padding-left: 30px !important; +} +.padding-horizontal-35 { + padding-right: 35px !important; + padding-left: 35px !important; +} +.padding-horizontal-40 { + padding-right: 40px !important; + padding-left: 40px !important; +} +.padding-horizontal-45 { + padding-right: 45px !important; + padding-left: 45px !important; +} +.padding-horizontal-50 { + padding-right: 50px !important; + padding-left: 50px !important; +} +.padding-horizontal-60 { + padding-right: 60px !important; + padding-left: 60px !important; +} +.padding-horizontal-70 { + padding-right: 70px !important; + padding-left: 70px !important; +} +.padding-horizontal-80 { + padding-right: 80px !important; + padding-left: 80px !important; +} +.padding-top-0 { + padding-top: 0 !important; +} +.padding-top-3 { + padding-top: 3px !important; +} +.padding-top-5 { + padding-top: 5px !important; +} +.padding-top-10 { + padding-top: 10px !important; +} +.padding-top-15 { + padding-top: 15px !important; +} +.padding-top-20 { + padding-top: 20px !important; +} +.padding-top-25 { + padding-top: 25px !important; +} +.padding-top-30 { + padding-top: 30px !important; +} +.padding-top-35 { + padding-top: 35px !important; +} +.padding-top-40 { + padding-top: 40px !important; +} +.padding-top-45 { + padding-top: 45px !important; +} +.padding-top-50 { + padding-top: 50px !important; +} +.padding-top-60 { + padding-top: 60px !important; +} +.padding-top-70 { + padding-top: 70px !important; +} +.padding-top-80 { + padding-top: 80px !important; +} +.padding-bottom-0 { + padding-bottom: 0 !important; +} +.padding-bottom-3 { + padding-bottom: 3px !important; +} +.padding-bottom-5 { + padding-bottom: 5px !important; +} +.padding-bottom-10 { + padding-bottom: 10px !important; +} +.padding-bottom-15 { + padding-bottom: 15px !important; +} +.padding-bottom-20 { + padding-bottom: 20px !important; +} +.padding-bottom-25 { + padding-bottom: 25px !important; +} +.padding-bottom-30 { + padding-bottom: 30px !important; +} +.padding-bottom-35 { + padding-bottom: 35px !important; +} +.padding-bottom-40 { + padding-bottom: 40px !important; +} +.padding-bottom-45 { + padding-bottom: 45px !important; +} +.padding-bottom-50 { + padding-bottom: 50px !important; +} +.padding-bottom-60 { + padding-bottom: 60px !important; +} +.padding-bottom-70 { + padding-bottom: 70px !important; +} +.padding-bottom-80 { + padding-bottom: 80px !important; +} +.padding-left-0 { + padding-left: 0 !important; +} +.padding-left-3 { + padding-left: 3px !important; +} +.padding-left-5 { + padding-left: 5px !important; +} +.padding-left-10 { + padding-left: 10px !important; +} +.padding-left-15 { + padding-left: 15px !important; +} +.padding-left-20 { + padding-left: 20px !important; +} +.padding-left-25 { + padding-left: 25px !important; +} +.padding-left-30 { + padding-left: 30px !important; +} +.padding-left-35 { + padding-left: 35px !important; +} +.padding-left-40 { + padding-left: 40px !important; +} +.padding-left-45 { + padding-left: 45px !important; +} +.padding-left-50 { + padding-left: 50px !important; +} +.padding-left-60 { + padding-left: 60px !important; +} +.padding-left-70 { + padding-left: 70px !important; +} +.padding-left-80 { + padding-left: 80px !important; +} +.padding-right-0 { + padding-right: 0 !important; +} +.padding-right-3 { + padding-right: 3px !important; +} +.padding-right-5 { + padding-right: 5px !important; +} +.padding-right-10 { + padding-right: 10px !important; +} +.padding-right-15 { + padding-right: 15px !important; +} +.padding-right-20 { + padding-right: 20px !important; +} +.padding-right-25 { + padding-right: 25px !important; +} +.padding-right-30 { + padding-right: 30px !important; +} +.padding-right-35 { + padding-right: 35px !important; +} +.padding-right-40 { + padding-right: 40px !important; +} +.padding-right-45 { + padding-right: 45px !important; +} +.padding-right-50 { + padding-right: 50px !important; +} +.padding-right-60 { + padding-right: 60px !important; +} +.padding-right-70 { + padding-right: 70px !important; +} +.padding-right-80 { + padding-right: 80px !important; +} +@media (max-width: 767px) { + .padding-xs-0 { + padding: 0 !important; + } +} +@media (min-width: 768px) { + .padding-sm-0 { + padding: 0 !important; + } +} +@media (min-width: 992px) { + .padding-md-0 { + padding: 0 !important; + } +} +@media (min-width: 1200px) { + .padding-lg-0 { + padding: 0 !important; + } +} +.example-wrap { + margin-bottom: 30px; +} +.example-wrap .example-wrap { + margin-bottom: 0; +} +.example { + margin-top: 20px; + margin-bottom: 20px; +} +.example:before, .example:after { + display: table; + content: " "; +} +.example:after { + clear: both; +} +.example-title { + text-transform: uppercase; +} +.example-title, h4.example-title { + font-size: 14px; +} +.panel-body > .example-wrap:last-child { + margin-bottom: 0; +} +.panel-body > .row:last-child > [class*="col-"]:last-child .example-wrap:last-child { + margin-bottom: 0; +} +.example-well { + position: relative; + margin-bottom: 30px; + background-color: #f3f7f9; +} +.example-well .center { + position: absolute; + top: 50%; + left: 50%; + display: inline-block; + max-width: 100%; + max-height: 100%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.example-dropdown .dropdown:before, .example-dropdown .dropup:before, .example-dropdown .dropdown:after, .example-dropdown .dropup:after { + display: table; + content: " "; +} +.example-dropdown .dropdown:after, .example-dropdown .dropup:after { + clear: both; +} +.example-dropdown .dropdown > .dropdown-toggle, .example-dropdown .dropup > .dropdown-toggle { + float: left; +} +.example-dropdown .dropdown > .dropdown-menu, .example-dropdown .dropup > .dropdown-menu { + position: static; + display: block; + clear: left; +} +.example-dropdown .dropdown > .dropdown-menu-right, .example-dropdown .dropup > .dropdown-menu-right { + float: right; + clear: right; +} +.example-tooltip { + position: relative; + z-index: 1; + display: inline-block; +} +.example-tooltip .tooltip { + position: relative; + margin-right: 25px; + opacity: 1; +} +.example-grid .example-col, .example-blocks .example-col { + min-height: 0; + padding: 10px 15px 12px; + background-color: #f3f7f9; + border-radius: 0; +} +.example-grid .example-col { + margin-bottom: 20px; +} +.example-grid .example-col .example-col { + margin-top: 20px; + margin-bottom: 0; + background-color: #e2ecf1; +} +.example-popover { + position: relative; + z-index: 1; + display: inline-block; +} +.example-popover .popover { + position: relative; + display: block; + margin-right: 25px; +} +.example-buttons .btn, .example-buttons .btn-group, .example-buttons .btn-group-vertical { + margin: 0 10px 10px 0; +} +.example-buttons .btn-group-vertical .btn, .example-buttons .btn-group .btn { + margin-right: 0; + margin-bottom: 0; +} +.example-buttons .modal .btn { + margin: inherit; +} +.example-box { + position: relative; + padding: 45px 15px 15px; + margin-right: 0; + margin-left: 0; + border: 1px solid #e4eaec; +} +.example-box:after { + position: absolute; + top: 15px; + left: 15px; + font-size: 12px; + color: #959595; + text-transform: uppercase; + letter-spacing: 1px; + content: "示例"; +} +.example-avatars .avatar { + margin-right: 20px; + margin-bottom: 20px; +} +.example-avatars .avatar:last-child { + margin-right: 20px; +} +.example-typography { + position: relative; + padding-left: 25%; +} +.example-typography .heading-note, .example-typography .text-note { + position: absolute; + bottom: 2px; + left: 0; + display: block; + width: 260px; + font-size: 13px; + font-weight: 400; + line-height: 13px; + color: #aab2bd; +} +.example-typography .text-note { + top: 10px; + bottom: auto; +} +.example-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .example-responsive { + width: 100%; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + } +} +.example-well .page-header { + padding: 30px 20px; +} \ No newline at end of file diff --git a/public/lib/admui/js/app.js b/public/lib/admui/js/app.js new file mode 100644 index 0000000..8544179 --- /dev/null +++ b/public/lib/admui/js/app.js @@ -0,0 +1,137 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + // 父级dom节点 + $.parentFrame = $(window.parent.document); + + // 父级方法&属性 + var parentFrame = window.parentFrame = window.parent; + + // 项目名称 + $.ctx = parentFrame.$.ctx; + + // 配置颜色获取方法 + $.colors = parentFrame.$.colors; + + // 注册组件默认配置参数获取方法 + $.po = parentFrame.$.po; + + // 本地存储对象操作 + $.storage = parentFrame.$.storage; + $.sessionStorage = parentFrame.$.sessionStorage; + + // 网址基础设置对象 + $.site = parentFrame.$.site; + if ($.site && $.site.contentTabs) + $.site.contentTabs.ifameTabs(document); + + // 配置信息存储管理 + $.configs = parentFrame.$.configs; + + // 注册组件初始化 + if (parentFrame.$.components) + parentFrame.$.components.init(document, window); + + // 公用对象 + window.Breakpoints = parentFrame.Breakpoints; + window.toastr = parentFrame.toastr; + window.layer = parentFrame.layer; + window.haoutil = parentFrame.haoutil; + window.notifyFn = parentFrame.$.notifyFn; + + // 自定义扩展对象 + var _objExtend = _objExtend || {}; + + $.extend(_objExtend, { + _queue: { + prepare: [], + run: [], + complete: [] + }, + run: function () { + var self = this; + this._dequeue('prepare', function () { + self._trigger('before.run', self); + }); + + this._dequeue('run', function () { + self._dequeue('complete', function () { + self._trigger('after.run', self); + }); + }); + }, + _dequeue: function (name, done) { // 队列当前状态离队,进行下一步操作 + var self = this, + queue = this._getQueue(name), + fn = queue.shift(), + next = function () { + self._dequeue(name, done); + }; + + if (fn) { + fn.call(this, next); + } else if ($.isFunction(done)) { + done.call(this); + } + }, + _getQueue: function (name) { // 获取队列状态信息 + if (!$.isArray(this._queue[name])) { + this._queue[name] = []; + } + + return this._queue[name]; + }, + extend: function (obj) { // 公用模块对象扩展方法 + $.each(this._queue, function (name, queue) { + if ($.isFunction(obj[name])) { + queue.unshift(obj[name]); + + delete obj[name]; + } + }); + $.extend(this, obj); + return this; + }, + _trigger: function (name, data, $el) { // 离队状态执行动作 + + if (typeof name === 'undefined') { + return; + } + if (typeof $el === 'undefined') { + $el = $("#admui-pageContent"); + } + + $el.trigger(name + '.app', data); + } + }); + + // 通用功能对象(可配置增加,也可扩展) + var _app = { + pageAside: function () { // 小屏幕下侧边栏(展开&收起)操作 + var pageAside = $(".page-aside"), + isOpen = pageAside.hasClass('open'); + + pageAside.toggleClass('open', !isOpen); + }, + run: function (next) { + var self = this; + + // 侧边栏开关 + $(document).on('click', '.page-aside-switch', function (e) { + self.pageAside(); + e.stopPropagation(); + }); + + next(); + } + }; + + window.App = $.extend({}, _objExtend); + App.extend(_app); + +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/global/components.js b/public/lib/admui/js/global/components.js new file mode 100644 index 0000000..9cedf88 --- /dev/null +++ b/public/lib/admui/js/global/components.js @@ -0,0 +1,2117 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + $.components.register("ace", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var ace = (iframe && iframe.ace) ? iframe.ace : window.ace, iframe$; + + if (typeof ace === "undefined") { + return; + } + + iframe$ = iframe ? iframe.$ : $; + + //ace.config.set("themePath", "../theme"); + ace.config.loadModule("ace/ext/language_tools"); + + $('[data-plugin="ace"]', context).each(function () { + var id = $(this).attr("id"), + mode = $(this).data("mode", iframe$), + theme = $(this).data("theme", iframe$), + editor = ace.edit(id); + + editor.container.style.opacity = ""; + if (mode) { + editor.session.setMode("ace/mode/" + mode); + } + if (theme) { + editor.setTheme("ace/theme/" + theme); + } + + editor.setOption("maxLines", 40); + editor.setAutoScrollEditorIntoView(true); + + ace.config.loadModule("ace/ext/language_tools", function () { + editor.setOptions({ + enableSnippets: true, + enableBasicAutocompletion: true + }); + }); + }); + } + }); + +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("animate-list", { + mode: 'init', + + defaults: { + child: '.panel', + duration: 250, + delay: 50, + animate: 'scale-up', + fill: 'backwards' + }, + + init: function (context, iframe) { + var self = this, + iframe$ = iframe ? iframe.$ : $; + + $('[data-plugin="animateList"]', context).each(function () { + var $this = $(this), + options = $.extend({}, self.defaults, $this.data(iframe$), true); + + var animatedBox = function ($el, opts) { + this.options = opts; + this.$children = $el.find(opts.child); + this.$children.addClass('animation-' + opts.animate); + this.$children.css('animation-fill-mode', opts.fill); + this.$children.css('animation-duration', opts.duration + 'ms'); + + var delay = 0, + self = this; + + this.$children.each(function () { + + $(this).css('animation-delay', delay + 'ms'); + delay += self.options.delay; + }); + }; + + animatedBox.prototype = { + run: function (type) { + var self = this; + this.$children.removeClass('animation-' + this.options.animate); + if (typeof type !== 'undefined') { + this.options.animate = type; + } + setTimeout(function () { + self.$children.addClass('animation-' + self.options.animate); + }, 0); + } + }; + + $this.data('animateList', new animatedBox($this, options), iframe$); + }); + } + }); + +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("colorpicker", { + defaults: {}, + mode: "default" + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("datepicker", { + mode: "default", + defaults: { + autoclose: true + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("daterangepicker", { + defaults: { + "locale": { + "format": "YYYY-MM-DD", + "separator": " 至 ", + "applyLabel": "确定", + "cancelLabel": "取消", + "fromLabel": "从", + "toLabel": "到", + "customRangeLabel": "自定义", + "weekLabel": "W", + "daysOfWeek": ["日", "一", "二", "三", "四", "五", "六"], + "monthNames": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + "firstDay": 1 + }, + // "parentEl": "#admui-pageContent > .page", + "alwaysShowCalendars": true + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, + moment = iframe ? iframe.moment : moment, + defaults, defaults_ranges; + + if (!iframe$.fn.daterangepicker) { + return; + } + + defaults = $.components.getDefaults("daterangepicker"); + defaults_ranges = { + ranges: { + '今天': [moment(), moment()], + '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + '最近7天': [moment().subtract(6, 'days'), moment()], + '最近30天': [moment().subtract(29, 'days'), moment()], + '本月': [moment().startOf('month'), moment().endOf('month')], + '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] + } + }; + + $('[data-plugin="daterangepicker"]', context).each(function () { + var options = $.extend(true, {}, defaults, defaults_ranges, $(this).data(iframe$)); + + iframe$(this).daterangepicker(options); + }); + } + }); +})(window, document, jQuery); + +(function(window, document, $){ + "use strict"; + + $.components.register("maxlength", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("markdown", { + mode: "init", + defaults: { + autofocus: false, + savable: false, + language: 'zh' + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.markdown) { + return; + } + + defaults = this.defaults; + + $('textarea[data-plugin="markdown"]', context).each(function () { + var options = $.extend(true, {}, defaults, $(this).data(iframe$)); + + iframe$(this).markdown(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("selectpicker", { + mode: "default", + defaults: { + noneSelectedText: '没有选中任何项', + noneResultsText: '没有找到匹配项', + countSelectedText: '已选中{1}项中的{0}项', + maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'], + selectAllText: '选择全部', + deselectAllText: '取消全部选择', + doneButtonText: '关闭', + style: "btn-select", + iconBase: "icon", + tickIcon: "wb-check" + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("bootstrapSlider", { + defaults: {}, + mode: "default" + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("tagsinput", { + defaults: { + tagClass: "label label-default" + }, + mode: "default" + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("tokenfield", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("TouchSpin", { + mode: "default", + defaults: { + verticalupclass: "wb-plus", + verticaldownclass: "wb-minus", + buttondown_class: "btn btn-outline btn-default", + buttonup_class: "btn btn-outline btn-default" + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("buttons", { + mode: "api", + defaults: {}, + api: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + $(context).on('click.site.loading', '[data-loading-text]', function () { + var $btn = $(this), + text = $btn.text(), + i = 20, + loadingText = $btn.data('loadingText', iframe$); + + $btn.text(loadingText + '(' + i + ')').css('opacity', '.6'); + + var timeout = setInterval(function () { + $btn.text(loadingText + '(' + (--i) + ')'); + if (i === 0) { + clearInterval(timeout); + $btn.text(text).css('opacity', '1'); + } + }, 1000); + }); + + $(context).on('click.site.morebutton', '[data-more]', function () { + var $target = $($(this).data('more', iframe$)); + $target.toggleClass('show'); + }); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("card", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.card) { + return; + } + + defaults = $.components.getDefaults("card"); + + $('[data-plugin="card"]', context).each(function () { + var options = $.extend({}, defaults, $(this).data(iframe$)); + + if (options.target) { + options.container = iframe$(options.target); + } + + iframe$(this).card(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("clockpicker", { + mode: "default" + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("dataTable", { + defaults: { + responsive: true, + dom: "<'row'<'col-xs-6'<'hidden-xs'l>><'col-xs-6'f>>" + "<'row'<'col-xs-12'tr>>" + "<'row'<'col-sm-5'i><'col-sm-7'p>>", + language: { + "sSearchPlaceholder": "快速查找", + "lengthMenu": "每页显示 _MENU_ 条", + "search": "_INPUT_", + "info": "第 _START_ 至 _END_ 项,共 _TOTAL_ 项", + "infoEmpty": "共 0 项", + "emptyTable": "无数据", + "zeroRecords": "抱歉,没有找到符合条件的记录", + "sInfoFiltered": "(从 _MAX_ 条记录中查找)", + "loadingRecords": "加载中,请稍后…", + "processing": "正在处理,请稍后…", + "paginate": { + "first": "第一页", + "last": "最后一页", + "previous": '<i class="icon wb-chevron-left-mini"></i>', + "next": '<i class="icon wb-chevron-right-mini"></i>' + }, + "aria": { + "sortAscending": "升序排列", + "sortDescending": "降序排列" + } + } + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.dataTable) { + return; + } + + defaults = this.defaults; + + $('[data-plugin="dataTable"]', context).each(function () { + var options = $.extend(true, {}, defaults, $(this).data(iframe$)); + + iframe$(this).dataTable(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("datepair", { + mode: "default", + defaults: { + startClass: 'datepair-start', + endClass: 'datepair-end', + timeClass: 'datepair-time', + dateClass: 'datepair-date' + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("dropify", { + mode: "default", + defaults: { + messages: { + 'default': '单击或直接拖动需要上传的文件到此处', + 'replace': '将文件拖放到此处或单击此处替换', + 'remove': '移除', + 'error': '出错了…' + }, + error: { + 'fileSize': '文件大小超出限制(文件大小不能超过{{ value }})。', + 'minWidth': '图片宽度太小(不能小于{{ value }}}px)。', + 'maxWidth': '图片宽度太大(不能大于{{ value }}}px)。', + 'minHeight': '图片高度太小(不能小于{{ value }}}px)。', + 'maxHeight': '图片高度太大(不能大于{{ value }}px)。', + 'imageFormat': '图片格式不支持(允许的格式为:{{ value }})。' + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("editableTable", { + mode: "init", + init: function (context, iframe) { + var ifaram$ = iframe ? iframe.$ : $, defaults; + + if (!ifaram$.fn.editableTableWidget) { + return; + } + + defaults = $.components.getDefaults("editableTable"); + + $('[data-plugin="editableTable"]', context).each(function () { + var options = $.extend(true, {}, defaults, $(this).data(ifaram$)); + + ifaram$(this).editableTableWidget(options); + }); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("filterable", { + mode: "init", + defaults: { + animationOptions: { + duration: 750, + easing: 'linear', + queue: false + } + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, + _window = iframe ? iframe : window, defaults, callback; + + if (typeof iframe$.fn.isotope === "undefined") { + return; + } + + defaults = $.components.getDefaults('filterable'); + + callback = function () { + $('[data-filterable]', context).each(function () { + var $this = iframe$(this); + + var options = $.extend(true, {}, defaults, $this.data(), { + filter: '*' + }); + + $this.isotope(options); + }); + + $('[data-filter]', context).click(function (e) { + var $this = $(this), + target = $this.data('target', iframe$), + $li = $this.parent('li'), $list, filter; + + if (!target) { + target = $this.attr('href'); + target = target && target.replace(/.*(?=#[^\s]*$)/, ''); + } + + $li.siblings('.active').each(function () { + $(this).find('a').attr('aria-expanded', false); + $(this).removeClass('active'); + }); + + $li.addClass('active'); + $this.attr('aria-expanded', true); + + $list = iframe$(target, context); + filter = $this.attr('data-filter'); + + if (filter !== '*') { + filter = '[data-type="' + filter + '"]'; + } + + $list.isotope({ + filter: filter + }); + + e.preventDefault(); + }); + }; + + if (context !== document) { + callback(); + } else { + $(_window).on('load', function () { + callback(); + }); + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("iconpicker", { + mode: "default", + defaults: { + fullClassFormatter: function(value) { + return "icon " + value; + }, + templates: { + popover: '<div class="iconpicker-popover popover"><div class="arrow"></div>' + '<div class="popover-title"></div><div class="popover-content"></div></div>', + footer: '<div class="popover-footer"></div>', + buttons: '<button class="iconpicker-btn iconpicker-btn-cancel btn btn-default btn-sm">取消</button>' + ' <button class="iconpicker-btn iconpicker-btn-accept btn btn-primary btn-sm">确认</button>', + search: '<input type="search" class="form-control iconpicker-search" placeholder="查找图标">', + iconpicker: '<div class="iconpicker"><div class="iconpicker-items"></div></div>', + iconpickerItem: '<a role="button" href="#" class="iconpicker-item"><i></i></a>' + }, + icons: ["fa-adjust", "fa-anchor", "fa-archive", "fa-area-chart", "fa-arrows", "fa-arrows-h", "fa-arrows-v", "fa-asterisk", "fa-at", "fa-automobile", "fa-ban", "fa-bank", "fa-bar-chart", "fa-bar-chart-o", "fa-barcode", "fa-bars", "fa-bed", "fa-beer", "fa-bell", "fa-bell-o", "fa-bell-slash", "fa-bell-slash-o", "fa-bicycle", "fa-binoculars", "fa-birthday-cake", "fa-bolt", "fa-bomb", "fa-book", "fa-bookmark", "fa-bookmark-o", "fa-briefcase", "fa-bug", "fa-building", "fa-building-o", "fa-bullhorn", "fa-bullseye", "fa-bus", "fa-cab", "fa-calculator", "fa-calendar", "fa-calendar-o", "fa-camera", "fa-camera-retro", "fa-car", "fa-caret-square-o-down", "fa-caret-square-o-left", "fa-caret-square-o-right", "fa-caret-square-o-up", "fa-cart-arrow-down", "fa-cart-plus", "fa-cc", "fa-certificate", "fa-check", "fa-check-circle", "fa-check-circle-o", "fa-check-square", "fa-check-square-o", "fa-child", "fa-circle", "fa-circle-o", "fa-circle-o-notch", "fa-circle-thin", "fa-clock-o", "fa-close", "fa-cloud", "fa-cloud-download", "fa-cloud-upload", "fa-code", "fa-code-fork", "fa-coffee", "fa-cog", "fa-cogs", "fa-comment", "fa-comment-o", "fa-comments", "fa-comments-o", "fa-compass", "fa-copyright", "fa-credit-card", "fa-crop", "fa-crosshairs", "fa-cube", "fa-cubes", "fa-cutlery", "fa-dashboard", "fa-database", "fa-desktop", "fa-diamond", "fa-dot-circle-o", "fa-download", "fa-edit", "fa-ellipsis-h", "fa-ellipsis-v", "fa-envelope", "fa-envelope-o", "fa-envelope-square", "fa-eraser", "fa-exchange", "fa-exclamation", "fa-exclamation-circle", "fa-exclamation-triangle", "fa-external-link", "fa-external-link-square", "fa-eye", "fa-eye-slash", "fa-eyedropper", "fa-fax", "fa-female", "fa-fighter-jet", "fa-file-archive-o", "fa-file-audio-o", "fa-file-code-o", "fa-file-excel-o", "fa-file-image-o", "fa-file-movie-o", "fa-file-pdf-o", "fa-file-photo-o", "fa-file-picture-o", "fa-file-powerpoint-o", "fa-file-sound-o", "fa-file-video-o", "fa-file-word-o", "fa-file-zip-o", "fa-film", "fa-filter", "fa-fire", "fa-fire-extinguisher", "fa-flag", "fa-flag-checkered", "fa-flag-o", "fa-flash", "fa-flask", "fa-folder", "fa-folder-o", "fa-folder-open", "fa-folder-open-o", "fa-frown-o", "fa-futbol-o", "fa-gamepad", "fa-gavel", "fa-gear", "fa-gears", "fa-genderless", "fa-gift", "fa-glass", "fa-globe", "fa-graduation-cap", "fa-group", "fa-hdd-o", "fa-headphones", "fa-heart", "fa-heart-o", "fa-heartbeat", "fa-history", "fa-home", "fa-hotel", "fa-image", "fa-inbox", "fa-info", "fa-info-circle", "fa-institution", "fa-key", "fa-keyboard-o", "fa-language", "fa-laptop", "fa-leaf", "fa-legal", "fa-lemon-o", "fa-level-down", "fa-level-up", "fa-life-bouy", "fa-life-buoy", "fa-life-ring", "fa-life-saver", "fa-lightbulb-o", "fa-line-chart", "fa-location-arrow", "fa-lock", "fa-magic", "fa-magnet", "fa-mail-forward", "fa-mail-reply", "fa-mail-reply-all", "fa-male", "fa-map-marker", "fa-meh-o", "fa-microphone", "fa-microphone-slash", "fa-minus", "fa-minus-circle", "fa-minus-square", "fa-minus-square-o", "fa-mobile", "fa-mobile-phone", "fa-money", "fa-moon-o", "fa-mortar-board", "fa-motorcycle", "fa-music", "fa-navicon", "fa-newspaper-o", "fa-paint-brush", "fa-paper-plane", "fa-paper-plane-o", "fa-paw", "fa-pencil", "fa-pencil-square", "fa-pencil-square-o", "fa-phone", "fa-phone-square", "fa-photo", "fa-picture-o", "fa-pie-chart", "fa-plane", "fa-plug", "fa-plus", "fa-plus-circle", "fa-plus-square", "fa-plus-square-o", "fa-power-off", "fa-print", "fa-puzzle-piece", "fa-qrcode", "fa-question", "fa-question-circle", "fa-quote-left", "fa-quote-right", "fa-random", "fa-recycle", "fa-refresh", "fa-remove", "fa-reorder", "fa-reply", "fa-reply-all", "fa-retweet", "fa-road", "fa-rocket", "fa-rss", "fa-rss-square", "fa-search", "fa-search-minus", "fa-search-plus", "fa-send", "fa-send-o", "fa-server", "fa-share", "fa-share-alt", "fa-share-alt-square", "fa-share-square", "fa-share-square-o", "fa-shield", "fa-ship", "fa-shopping-cart", "fa-sign-in", "fa-sign-out", "fa-signal", "fa-sitemap", "fa-sliders", "fa-smile-o", "fa-soccer-ball-o", "fa-sort", "fa-sort-alpha-asc", "fa-sort-alpha-desc", "fa-sort-amount-asc", "fa-sort-amount-desc", "fa-sort-asc", "fa-sort-desc", "fa-sort-down", "fa-sort-numeric-asc", "fa-sort-numeric-desc", "fa-sort-up", "fa-space-shuttle", "fa-spinner", "fa-spoon", "fa-square", "fa-square-o", "fa-star", "fa-star-half", "fa-star-half-empty", "fa-star-half-full", "fa-star-half-o", "fa-star-o", "fa-street-view", "fa-suitcase", "fa-sun-o", "fa-support", "fa-tablet", "fa-tachometer", "fa-tag", "fa-tags", "fa-tasks", "fa-taxi", "fa-terminal", "fa-thumb-tack", "fa-thumbs-down", "fa-thumbs-o-down", "fa-thumbs-o-up", "fa-thumbs-up", "fa-ticket", "fa-times", "fa-times-circle", "fa-times-circle-o", "fa-tint", "fa-toggle-down", "fa-toggle-left", "fa-toggle-off", "fa-toggle-on", "fa-toggle-right", "fa-toggle-up", "fa-trash", "fa-trash-o", "fa-tree", "fa-trophy", "fa-truck", "fa-tty", "fa-umbrella", "fa-university", "fa-unlock", "fa-unlock-alt", "fa-unsorted", "fa-upload", "fa-user", "fa-user-plus", "fa-user-secret", "fa-user-times", "fa-users", "fa-video-camera", "fa-volume-down", "fa-volume-off", "fa-volume-up", "fa-warning", "fa-wheelchair", "fa-wifi", "fa-wrench", "fa-ambulance", "fa-subway", "fa-train", "fa-mars", "fa-mars-double", "fa-mars-stroke", "fa-mars-stroke-h", "fa-mars-stroke-v", "fa-mercury", "fa-neuter", "fa-transgender", "fa-transgender-alt", "fa-venus", "fa-venus-double", "fa-venus-mars", "fa-file", "fa-file-o", "fa-file-text", "fa-file-text-o", "fa-cc-amex", "fa-cc-discover", "fa-cc-mastercard", "fa-cc-paypal", "fa-cc-stripe", "fa-cc-visa", "fa-google-wallet", "fa-paypal", "fa-bitcoin", "fa-btc", "fa-cny", "fa-dollar", "fa-eur", "fa-euro", "fa-gbp", "fa-ils", "fa-inr", "fa-jpy", "fa-krw", "fa-rmb", "fa-rouble", "fa-rub", "fa-ruble", "fa-rupee", "fa-shekel", "fa-sheqel", "fa-try", "fa-turkish-lira", "fa-usd", "fa-won", "fa-yen", "fa-align-center", "fa-align-justify", "fa-align-left", "fa-align-right", "fa-bold", "fa-chain", "fa-chain-broken", "fa-clipboard", "fa-columns", "fa-copy", "fa-cut", "fa-dedent", "fa-files-o", "fa-floppy-o", "fa-font", "fa-header", "fa-indent", "fa-italic", "fa-link", "fa-list", "fa-list-alt", "fa-list-ol", "fa-list-ul", "fa-outdent", "fa-paperclip", "fa-paragraph", "fa-paste", "fa-repeat", "fa-rotate-left", "fa-rotate-right", "fa-save", "fa-scissors", "fa-strikethrough", "fa-subscript", "fa-superscript", "fa-table", "fa-text-height", "fa-text-width", "fa-th", "fa-th-large", "fa-th-list", "fa-underline", "fa-undo", "fa-unlink", "fa-angle-double-down", "fa-angle-double-left", "fa-angle-double-right", "fa-angle-double-up", "fa-angle-down", "fa-angle-left", "fa-angle-right", "fa-angle-up", "fa-arrow-circle-down", "fa-arrow-circle-left", "fa-arrow-circle-o-down", "fa-arrow-circle-o-left", "fa-arrow-circle-o-right", "fa-arrow-circle-o-up", "fa-arrow-circle-right", "fa-arrow-circle-up", "fa-arrow-down", "fa-arrow-left", "fa-arrow-right", "fa-arrow-up", "fa-arrows-alt", "fa-caret-down", "fa-caret-left", "fa-caret-right", "fa-caret-up", "fa-chevron-circle-down", "fa-chevron-circle-left", "fa-chevron-circle-right", "fa-chevron-circle-up", "fa-chevron-down", "fa-chevron-left", "fa-chevron-right", "fa-chevron-up", "fa-hand-o-down", "fa-hand-o-left", "fa-hand-o-right", "fa-hand-o-up", "fa-long-arrow-down", "fa-long-arrow-left", "fa-long-arrow-right", "fa-long-arrow-up", "fa-backward", "fa-compress", "fa-eject", "fa-expand", "fa-fast-backward", "fa-fast-forward", "fa-forward", "fa-pause", "fa-play", "fa-play-circle", "fa-play-circle-o", "fa-step-backward", "fa-step-forward", "fa-stop", "fa-youtube-play", "fa-adn", "fa-android", "fa-angellist", "fa-apple", "fa-behance", "fa-behance-square", "fa-bitbucket", "fa-bitbucket-square", "fa-buysellads", "fa-codepen", "fa-connectdevelop", "fa-css3", "fa-dashcube", "fa-delicious", "fa-deviantart", "fa-digg", "fa-dribbble", "fa-dropbox", "fa-drupal", "fa-empire", "fa-facebook", "fa-facebook-f", "fa-facebook-official", "fa-facebook-square", "fa-flickr", "fa-forumbee", "fa-foursquare", "fa-ge", "fa-git", "fa-git-square", "fa-github", "fa-github-alt", "fa-github-square", "fa-gittip", "fa-google", "fa-google-plus", "fa-google-plus-square", "fa-gratipay", "fa-hacker-news", "fa-html5", "fa-instagram", "fa-ioxhost", "fa-joomla", "fa-jsfiddle", "fa-lastfm", "fa-lastfm-square", "fa-leanpub", "fa-linkedin", "fa-linkedin-square", "fa-linux", "fa-maxcdn", "fa-meanpath", "fa-medium", "fa-openid", "fa-pagelines", "fa-pied-piper", "fa-pied-piper-alt", "fa-pinterest", "fa-pinterest-p", "fa-pinterest-square", "fa-qq", "fa-ra", "fa-rebel", "fa-reddit", "fa-reddit-square", "fa-renren", "fa-sellsy", "fa-shirtsinbulk", "fa-simplybuilt", "fa-skyatlas", "fa-skype", "fa-slack", "fa-slideshare", "fa-soundcloud", "fa-spotify", "fa-stack-exchange", "fa-stack-overflow", "fa-steam", "fa-steam-square", "fa-stumbleupon", "fa-stumbleupon-circle", "fa-tencent-weibo", "fa-trello", "fa-tumblr", "fa-tumblr-square", "fa-twitch", "fa-twitter", "fa-twitter-square", "fa-viacoin", "fa-vimeo-square", "fa-vine", "fa-vk", "fa-wechat", "fa-weibo", "fa-weixin", "fa-whatsapp", "fa-windows", "fa-wordpress", "fa-xing", "fa-xing-square", "fa-yahoo", "fa-yelp", "fa-youtube", "fa-youtube-square", "fa-h-square", "fa-hospital-o", "fa-medkit", "fa-stethoscope", "fa-user-md"] + } + }); + + $.components.register("iconpickerWb", { + mode: "default", + defaults: { + fullClassFormatter: function(value) { + return "icon " + value; + }, + templates: { + popover: '<div class="iconpicker-popover popover"><div class="arrow"></div>' + '<div class="popover-title"></div><div class="popover-content"></div></div>', + footer: '<div class="popover-footer"></div>', + buttons: '<button class="iconpicker-btn iconpicker-btn-cancel btn btn-default btn-sm">取消</button>' + ' <button class="iconpicker-btn iconpicker-btn-accept btn btn-primary btn-sm">确认</button>', + search: '<input type="search" class="form-control iconpicker-search" placeholder="查找图标">', + iconpicker: '<div class="iconpicker"><div class="iconpicker-items"></div></div>', + iconpickerItem: '<a role="button" href="#" class="iconpicker-item"><i></i></a>' + }, + icons: ["wb-dashboard","wb-inbox","wb-cloud","wb-bell","wb-book","wb-bookmark","wb-tag","wb-library","wb-share","wb-reply","wb-refresh","wb-move","wb-chat","wb-chat-working","wb-chat-text","wb-chat-group","wb-envelope","wb-envelope-open","wb-user","wb-user-circle","wb-users","wb-user-add","wb-grid-9","wb-grid-4","wb-menu","wb-layout","wb-fullscreen","wb-fullscreen-exit","wb-expand","wb-contract","wb-arrow-expand","wb-arrow-shrink","wb-desktop","wb-mobile","wb-signal","wb-power","wb-more-horizontal","wb-more-vertical","wb-globe","wb-map","wb-flag","wb-pie-chart","wb-stats-bars","wb-pluse","wb-home","wb-shopping-cart","wb-payment","wb-briefcase","wb-search","wb-zoom-in","wb-zoom-out","wb-download","wb-upload","wb-sort-asc","wb-sort-des","wb-graph-up","wb-graph-down","wb-replay","wb-edit","wb-pencil","wb-rubber","wb-crop","wb-eye","wb-eye-close","wb-image","wb-gallery","wb-video","wb-camera","wb-folder","wb-clipboard","wb-order","wb-file","wb-copy","wb-add-file","wb-print","wb-calendar","wb-time","wb-trash","wb-plugin","wb-extension","wb-memory","wb-settings","wb-scissor","wb-wrench","wb-hammer","wb-lock","wb-unlock","wb-volume-low","wb-volume-high","wb-volume-off","wb-pause","wb-play","wb-stop","wb-musical","wb-random","wb-reload","wb-loop","wb-text","wb-bold","wb-italic","wb-underline","wb-format-clear","wb-text-type","wb-table","wb-attach-file","wb-paperclip","wb-link-intact","wb-link","wb-link-broken","wb-indent-increase","wb-indent-decrease","wb-align-justify","wb-align-left","wb-align-center","wb-align-right","wb-list-numbered","wb-list-bulleted","wb-list","wb-emoticon","wb-quote-right","wb-code","wb-code-working","wb-code-unfold","wb-chevron-right","wb-chevron-left","wb-chevron-left-mini","wb-chevron-right-mini","wb-chevron-up","wb-chevron-down","wb-chevron-up-mini","wb-chevron-down-mini","wb-arrow-left","wb-arrow-right","wb-arrow-up","wb-arrow-down","wb-dropdown","wb-dropup","wb-dropright","wb-dropleft","wb-sort-vertical","wb-triangle-left","wb-triangle-right","wb-triangle-down","wb-triangle-up","wb-check-circle","wb-check","wb-check-mini","wb-close","wb-close-mini","wb-plus-circle","wb-plus","wb-minus-circle","wb-minus","wb-alert-circle","wb-alert","wb-help-circle","wb-help","wb-info-circle","wb-info","wb-warning","wb-heart","wb-heart-outline","wb-star","wb-star-half","wb-star-outline","wb-thumb-up","wb-thumb-down","wb-small-point","wb-medium-point","wb-large-point"] + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("formatter", { + mode: "init", + defaults: { + persistent: true + }, + + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.formatter) { + return; + } + + var defaults = $.components.getDefaults("formatter"), + browserName = navigator.userAgent.toLowerCase(), + ieOptions; + + if (/msie/i.test(browserName) && !/opera/.test(browserName)) { + ieOptions = { + persistent: false + }; + } else { + ieOptions = {}; + } + + $('[data-plugin="formatter"]', context).each(function () { + var options = $.extend({}, defaults, ieOptions, $(this).data(iframe$)); + + if (options.pattern) { + options.pattern = options.pattern.replace(/\[\[/g, '{{').replace(/\]\]/g, '}}'); + } + + iframe$(this).formatter(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("formValidation", { + mode: "default", + defaults: { + locale:'zh_CN', + framework: 'bootstrap', + excluded: ':disabled', + icon: { + valid: 'icon wb-check', + invalid: 'icon wb-close', + validating: 'icon wb-refresh' + } + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("gauge", { + mode: "init", + defaults: { + lines: 12, + angle: 0.12, + lineWidth: 0.4, + pointer: { + length: 0.68, + strokeWidth: 0.03, + color: $.colors("blue-grey", 400) + }, + limitMax: true, + colorStart: $.colors("blue-grey", 200), + colorStop: $.colors("blue-grey", 200), + strokeColor: $.colors("purple", 500), + generateGradient: true + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, Gauge = (iframe && iframe.Gauge) ? iframe.Gauge : window.Gauge, defaults; + + if (typeof Gauge === undefined) { + return; + } + + defaults = $.components.getDefaults("gauge"); + + $('[data-plugin="gauge"]', context).each(function () { + var $this = $(this), + options = $this.data(iframe$), + $text = $this.find('.gauge-label'), + $canvas = $this.find("canvas"); + + options = $.extend(true, {}, defaults, options); + + if ($canvas.length === 0) { + return; + } + + var gauge = new Gauge($canvas[0]).setOptions(options); + + $this.data("gauge", gauge, iframe$); + + gauge.animationSpeed = 50; + gauge.maxValue = $this.data('max-value', iframe$); + + gauge.set($this.data("value", iframe$)); + + if ($text.length > 0) { + gauge.setTextField($text[0]); + } + }); + } + }); + + $.components.register("donut", { + mode: "init", + defaults: { + lines: 12, + angle: 0.3, + lineWidth: 0.08, + pointer: { + length: 0.9, + strokeWidth: 0.035, + color: $.colors("blue-grey", 400) + }, + limitMax: false, // If true, the pointer will not go past the end of the gauge + colorStart: $.colors("blue-grey", 200), + colorStop: $.colors("blue-grey", 200), + strokeColor: $.colors("purple", 500), + generateGradient: true + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, Donut = (iframe && iframe.Donut) ? iframe.Donut : window.Donut, defaults; + + if (typeof Donut === undefined) { + return; + } + + defaults = $.components.getDefaults("donut"); + + $('[data-plugin="donut"]', context).each(function () { + var $this = $(this), + options = $this.data(iframe$), + $text = $this.find('.donut-label'), + $canvas = $this.find("canvas"); + + options = $.extend(true, {}, defaults, options); + + if ($canvas.length === 0) { + return; + } + + var donut = new Donut($canvas[0]).setOptions(options); + + $this.data("donut", donut, iframe$); + + donut.animationSpeed = 50; + donut.maxValue = $this.data('max-value', iframe$); + + donut.set($this.data("value", iframe$)); + + if ($text.length > 0) { + donut.setTextField($text[0]); + } + }); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("gridstack", { + mode: "init", + defaults: { + cellHeight: 80, + verticalMargin: 20 + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.gridstack) { + return; + } + + var defaults = $.components.getDefaults("gridstack"); + + $('[data-plugin="gridstack"]', context).each(function () { + var options = $.extend(true, {}, defaults, $(this).data(iframe$)); + + iframe$(this).gridstack(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("highlight", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var hljs = (iframe && iframe. hljs) ? iframe.hljs : window.hljs; + + if (typeof hljs === "undefined") { + return; + } + + $('[data-plugin="highlight"]', context).each(function (i, block) { + hljs.highlightBlock(block); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("sortable", { + defaults: {}, + mode: "default" + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("iCheck", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("input-group-file", { + api: function (context) { + $(context).on("change", ".input-group-file [type=file]", function () { + var $this = $(this), + $text = $(this).parents('.input-group-file').find('.form-control'), value = ""; + + $.each($this[0].files, function (i, file) { + value += file.name + ", "; + }); + value = value.substring(0, value.length - 2); + + $text.val(value); + }); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("isotope", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, + _window = iframe ? iframe : window, defaults; + + if (typeof iframe$.fn.isotope === "undefined") { + return; + } + defaults = $.components.getDefaults('isotope'); + + var callback = function () { + $('[data-plugin="isotope"]', context).each(function () { + var $this = iframe$(this), + options = $.extend(true, {}, defaults, $this.data()); + + $this.isotope(options); + }); + }; + if (context !== document) { + callback(); + } else { + $(_window).on('load', function () { + callback(); + }); + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("appear", { + defaults: {}, + api: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.appear) { + return; + } + + iframe$(context).on("appear", '[data-plugin="appear"]', function () { + var $item = $(this), + animate = $item.data("animate", iframe$); + + if ($item.hasClass('appear-no-repeat')) { + return; + } + $item.removeClass("invisible").addClass('animation-' + animate); + + if ($item.data("repeat") === false) { + $item.addClass('appear-no-repeat'); + } + }); + + iframe$(context).on("disappear", '[data-plugin="appear"]', function () { + var $item = $(this), + animate = $item.data("animate", iframe$); + + if ($item.hasClass('appear-no-repeat')) { + return; + } + + $item.addClass("invisible").removeClass('animation-' + animate); + }); + }, + + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.appear) { + return; + } + var defaults = $.components.getDefaults("appear"); + + iframe$('[data-plugin="appear"]', context).appear(defaults); + iframe$('[data-plugin="appear"]', context).not(':appeared').addClass("invisible"); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("knob", { + mode: "default", + defaults: { + min: -50, + max: 50, + width: 120, + height: 120, + thickness: ".1" + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("labelauty", { + mode: "default", + defaults: { + same_width: true, + checked_label: "选中", + unchecked_label: "未选中" + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("strength", { + mode: "default", + defaults: { + showMeter: true, + showToggle: false, + + templates: { + toggle: '<div class="checkbox-custom checkbox-primary show-password-wrap"><input type="checkbox" class="{toggleClass}" title="显示/隐藏密码" id="show_password" /><label for="show_password">显示密码</label></div>', + meter: '<div class="{meterClass}">{score}</div>', + score: '<div class="{scoreClass}"></div>', + main: '<div class="{containerClass}">{input}{meter}{toggle}</div>' + }, + + classes: { + container: 'strength-container', + status: 'strength-{status}', + input: 'strength-input', + toggle: 'strength-toggle', + meter: 'strength-meter', + score: 'strength-score' + }, + + scoreLables: { + invalid: 'Invalid', + weak: 'Weak', + good: 'Good', + strong: 'Strong' + }, + + scoreClasses: { + invalid: 'strength-invalid', + weak: 'strength-weak', + good: 'strength-good', + strong: 'strength-strong' + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("treegrid", { + mode: "default", + defaults: { + expanderExpandedClass: 'icon wb-triangle-down', + expanderCollapsedClass: 'icon wb-triangle-right' + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("wizard", { + mode: "default", + defaults: { + step: ".steps .step, .pearls .pearl", + buttonLabels:{ + back:'上一步', + next:'下一步', + finish:'完成' + }, + templates: { + buttons: function () { + var options = this.options; + + return '<div class="wizard-buttons">' + + '<a class="btn btn-default btn-outline" href="#' + this.id + '" data-wizard="back" role="button">' + options.buttonLabels.back + '</a>' + + '<a class="btn btn-primary btn-outline pull-right" href="#' + this.id + '" data-wizard="next" role="button">' + options.buttonLabels.next + '</a>' + + '<a class="btn btn-success btn-outline pull-right" href="#' + this.id + '" data-wizard="finish" role="button">' + options.buttonLabels.finish + '</a>' + + '</div>'; + } + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("jstree", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("timepicker", { + mode: "default", + defaults: { + lang: { + am: '上午', + pm: '下午', + AM: '上午', + PM: '下午', + decimal: '.', + mins: '分钟', + hr: '小时', + hrs: '小时' + }, + timeFormat: 'ag:i' + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("ladda", { + mode: "init", + defaults: { + timeout: 2000 + }, + init: function (context, iframe) { + var Ladda = (iframe && iframe.Ladda) ? iframe.Ladda : window.Ladda, defaults; + + if (typeof Ladda === "undefined") { + return; + } + + defaults = $.components.getDefaults("ladda"); + + Ladda.bind('[data-plugin="ladda"]', defaults); + } + }); + + $.components.register("laddaProgress", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var Ladda = (iframe && iframe.Ladda) ? iframe.Ladda : window.Ladda, defaults, options; + + if (typeof Ladda === 'undefined') { + return; + } + + defaults = $.components.getDefaults("laddaProgress"); + options = $.extend({}, defaults, { + callback: function (instance) { + var progress = 0; + var interval = setInterval(function () { + progress = Math.min(progress + Math.random() * 0.1, 1); + instance.setProgress(progress); + + if (progress === 1) { + instance.stop(); + clearInterval(interval); + } + }, 300); + } + }); + Ladda.bind('[data-plugin="laddaProgress"]', options); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("layer", { + mode: 'init', + defaults: { + target: 'parent', + confirmBtn: ['确认', '取消'], + prompt:1 + }, + init: function (context, iframe) { + var result = (iframe && iframe.layer), + layer = result ? iframe.layer : window.layer, iframe$, defaults; + + if (typeof layer === 'undefined') { + return; + } + + iframe$ = iframe ? iframe.$ : $; + defaults = this.defaults; + + $(context).on('click.site.layer', '[data-plugin="layer"]', function () { + var $this = iframe$(this), + options = $.extend(true, {}, defaults, $this.data()); + + if(options.target === 'self'){ + if(!result){ + return console.error('您在当前页面还没有引入layer插件'); + } + layer = iframe.layer; + }else{ + layer = result ? window.layer : layer; + } + + switch (options.type) { + case "alert": + layer.alert(options.message); + break; + case "msg": + layer.msg(options.message); + break; + case "confirm": + layer.confirm(options.title, { + btn: options.confirmBtn + },function () { + layer.msg(options.successMessage); + }, function () { + layer.msg(options.cancelMessage); + }); + break; + case "prompt": + layer.prompt({title:options.title, formType: options.prompt}, function (text, index) { + layer.close(index); + layer.msg(options.message); + }); + break; + case "tips": + layer.tips(options.message, $this); + break; + case "load": + layer.load(options.style, {time:options.time}); + break; + } + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("masonry", { + mode: "init", + defaults: { + itemSelector: ".masonry-item" + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (typeof iframe$.fn.masonry === "undefined") { + return; + } + + defaults = $.components.getDefaults('masonry'); + + $('[data-plugin="masonry"]', context).each(function () { + var $this = iframe$(this), + options = $.extend(true, {}, defaults, $this.data()); + + $this.masonry(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("matchHeight", { + mode: "init", + defaults: {}, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (typeof iframe$.fn.matchHeight === "undefined") { + return; + } + defaults = $.components.getDefaults('matchHeight'); + + $('[data-plugin="matchHeight"]', context).each(function () { + var $this = iframe$(this), + options = $.extend(true, {}, defaults, $this.data()), + matchSelector = $this.data('matchSelector'); + + if (matchSelector) { + $this.find(matchSelector).matchHeight(options); + } else { + $this.children().matchHeight(options); + } + + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("material", { + init: function (context, iframe) { + $('.form-material', context).each(function () { + var $this = $(this), iframe$ = iframe ? iframe.$ : $, $control; + + if ($this.data('material', iframe$) === true) { + return; + } + + $control = $this.find('.form-control'); + + // Add hint label if required + if ($control.attr("data-hint")) { + $control.after("<div class=hint>" + $control.attr("data-hint") + "</div>"); + } + + if ($this.hasClass("floating")) { + // Add floating label if required + if ($control.hasClass("floating-label")) { + var placeholder = $control.attr("placeholder"); + $control.attr("placeholder", null).removeClass("floating-label"); + $control.after("<div class=floating-label>" + placeholder + "</div>"); + } + + // Set as empty if is empty + if ($control.val() === null || $control.val() === "undefined" || $control.val() === "") { + $control.addClass("empty"); + } + } + + // Support for file input + if ($control.next().is("[type=file]")) { + $this.addClass('form-material-file'); + } + + $this.data('material', true, iframe$); + }); + }, + api: function (context) { + function _isChar(e) { + if (typeof e.which === "undefined") { + return true; + } else if (typeof e.which === "number" && e.which > 0) { + return !e.ctrlKey && !e.metaKey && !e.altKey && e.which !== 8 && e.which !== 9; + } + return false; + } + + $(context).on("keydown.site.material paste.site.material", ".form-control", function (e) { + if (_isChar(e)) { + $(this).removeClass("empty"); + } + }).on("keyup.site.material change.site.material", ".form-control", function () { + var $this = $(this); + if ($this.val() === "" && (typeof $this[0].checkValidity !== "undefined" && $this[0].checkValidity())) { + $this.addClass("empty"); + } else { + $this.removeClass("empty"); + } + }).on("focus", ".form-material-file", function () { + $(this).find("input").addClass("focus"); + }) + .on("blur", ".form-material-file", function () { + $(this).find("input").removeClass("focus"); + }) + .on("change", ".form-material-file [type=file]", function () { + var $this = $(this); + var value = ""; + $.each($this[0].files, function (i, file) { + value += file.name + ", "; + }); + value = value.substring(0, value.length - 2); + if (value) { + $this.prev().removeClass("empty"); + } else { + $this.prev().addClass("empty"); + } + $this.prev().val(value); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("multiSelect", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("nestable", { + mode: "default", + defaults: {} + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("nprogress", { + mode: "init", + defaults: { + minimum: 0.15, + trickleRate: 0.07, + trickleSpeed: 360, + showSpinner: false, + template: '<div class="bar" role="bar"></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>' + }, + init: function (context, iframe) { + var NProgress = (iframe && iframe.NProgress) ? iframe.NProgress : window.NProgress; + + if (typeof NProgress === "undefined") { + return; + } + + NProgress.configure(this.defaults); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("owlCarousel", { + mode: "default", + defaults: { + loop: true, + nav: true, + dots: false, + dotsClass: "owl-dots owl-dots-fall", + responsive: { + 0: { + items: 1 + }, + 600: { + items: 3 + } + } + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("panel", { + api: function (context, iframe) { + var $doc = $(context), iframe$ = iframe ? iframe.$ : $, + _window = iframe ? iframe : window; + + $doc.off('click.site.panel'); + + $doc.on('click.site.panel', '[data-toggle="panel-fullscreen"]', function (e) { + e.preventDefault(); + var $this = $(this), + $panel = $this.closest('.panel'); + + var api = $panel.data('panel-api', iframe$); + api.toggleFullscreen(); + }); + + $doc.on('click.site.panel', '[data-toggle="panel-collapse"]', function (e) { + e.preventDefault(); + var $this = $(this), + $panel = $this.closest('.panel'); + + var api = $panel.data('panel-api', iframe$); + api.toggleContent(); + }); + + $doc.on('click.site.panel', '[data-toggle="panel-close"]', function (e) { + e.preventDefault(); + var $this = $(this), + $panel = $this.closest('.panel'); + + var api = $panel.data('panel-api', iframe$); + api.close(); + }); + + $doc.on('click.site.panel', '[data-toggle="panel-refresh"]', function (e) { + e.preventDefault(); + var $this = $(this); + var $panel = $this.closest('.panel'); + + var api = $panel.data('panel-api', iframe$); + var callback = $this.data('loadCallback', iframe$); + + if ($.isFunction(_window[callback])) { + api.load(_window[callback]); + } else { + api.load(); + } + }); + }, + + init: function (context, iframe) { + /* + * 这里所能触发的自定义事件仅为统一和frame中的。父级无法触发子级自定义事件 + * */ + var iframe$ = iframe ? iframe.$ : $; + + $('.panel', context).each(function () { + var $this = $(this); + + var isFullscreen = false; + var isClose = false; + var isCollapse = false; + var isLoading = false; + + var $fullscreen = $this.find('[data-toggle="panel-fullscreen"]'); + var $collapse = $this.find('[data-toggle="panel-collapse"]'); + var $loading; + var self = this; + + if ($this.hasClass('is-collapse')) { + isCollapse = true; + } + + var api = { + load: function (callback) { + var type = $this.data('loader-type', iframe$); + if (!type) { + type = 'default'; + } + + $loading = $('<div class="panel-loading">' + + '<div class="loader loader-' + type + '"></div>' + + '</div>'); + + $loading.appendTo($this); + + $this.addClass('is-loading'); + $this.trigger('loading.uikit.panel'); + isLoading = true; + + if ($.isFunction(callback)) { + callback.call(self, this.done); + } + }, + done: function () { + if (isLoading === true) { + $loading.remove(); + $this.removeClass('is-loading'); + $this.trigger('loading.done.uikit.panel'); + } + }, + toggleContent: function () { + if (isCollapse) { + this.showContent(); + } else { + this.hideContent(); + } + }, + + showContent: function () { + if (isCollapse !== false) { + $this.removeClass('is-collapse'); + + if ($collapse.hasClass('wb-plus')) { + $collapse.removeClass('wb-plus').addClass('wb-minus'); + } + + $this.trigger('shown.uikit.panel'); + + isCollapse = false; + } + }, + + hideContent: function () { + if (isCollapse !== true) { + $this.addClass('is-collapse'); + + if ($collapse.hasClass('wb-minus')) { + $collapse.removeClass('wb-minus').addClass('wb-plus'); + } + + $this.trigger('hidden.uikit.panel'); + isCollapse = true; + } + }, + + toggleFullscreen: function () { + if (isFullscreen) { + this.leaveFullscreen(); + } else { + this.enterFullscreen(); + } + }, + enterFullscreen: function () { + if (isFullscreen !== true) { + $this.addClass('is-fullscreen'); + + if ($fullscreen.hasClass('wb-expand')) { + $fullscreen.removeClass('wb-expand').addClass('wb-contract'); + } + + $this.trigger('enter.fullscreen.uikit.panel'); + isFullscreen = true; + } + }, + leaveFullscreen: function () { + if (isFullscreen !== false) { + $this.removeClass('is-fullscreen'); + + if ($fullscreen.hasClass('wb-contract')) { + $fullscreen.removeClass('wb-contract').addClass('wb-expand'); + } + + $this.trigger('leave.fullscreen.uikit.panel'); + isFullscreen = false; + } + }, + toggle: function () { + if (isClose) { + this.open(); + } else { + this.close(); + } + }, + open: function () { + $this.on('open.uikit.panel', function () { + var $that = $(this); + + if($that.siblings().length){ + $that.show(); + }else{ + $that.parent().show(); + } + }); + + if (isClose !== false) { + $this.removeClass('is-close'); + $this.trigger('open.uikit.panel'); + + isClose = false; + } + }, + close: function () { + $this.on('close.uikit.panel', function () { + var $that = $(this); + + if($that.siblings().length){ + $that.hide(); + }else{ + $that.parent().hide(); + } + }); + + if (isClose !== true) { + + $this.addClass('is-close'); + $this.trigger('close.uikit.panel'); + + isClose = true; + } + } + }; + + $this.data('panel-api', api, iframe$); + }); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("peityBar", { + mode: "init", + defaults: { + delimiter: ",", + fill: [$.colors("purple", 400)], + height: 18, + max: null, + min: 0, + padding: 0.1, + width: 44 + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.peity) { + return; + } + + defaults = $.components.getDefaults("peityBar"); + + $('[data-plugin="peityBar"]', context).each(function () { + var $this = iframe$(this), + options = $this.data(); + + if (options.skin) { + if ($.colors(options.skin)) { + var skinColors = $.colors(options.skin); + defaults.fill = [skinColors[400]]; + } + } + + options = $.extend(true, {}, defaults, options); + + $this.peity('bar', options); + }); + } + }); + + $.components.register("peityDonut", { + mode: "init", + defaults: { + delimiter: null, + fill: [$.colors("purple", 700), $.colors("purple", 400), $.colors("purple", 200)], + height: null, + innerRadius: null, + radius: 11, + width: null + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.peity) { + return; + } + + defaults = $.components.getDefaults("peityDonut"); + + $('[data-plugin="peityDonut"]', context).each(function () { + var $this = iframe$(this), + options = $this.data(); + + if (options.skin) { + if ($.colors(options.skin)) { + var skinColors = $.colors(options.skin); + defaults.fill = [skinColors[700], skinColors[400], skinColors[200]]; + } + } + + options = $.extend(true, {}, defaults, options); + + $this.peity('donut', options); + }); + } + }); + + $.components.register("peityLine", { + mode: "init", + defaults: { + delimiter: ",", + fill: [$.colors("purple", 200)], + height: 18, + max: null, + min: 0, + stroke: $.colors("purple", 600), + strokeWidth: 1, + width: 44 + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.peity) { + return; + } + + defaults = $.components.getDefaults("peityLine"); + + $('[data-plugin="peityLine"]', context).each(function () { + var $this = iframe$(this), + options = $this.data(); + + if (options.skin) { + if ($.colors(options.skin)) { + var skinColors = $.colors(options.skin); + defaults.fill = [skinColors[200]]; + defaults.stroke = skinColors[600]; + } + } + + options = $.extend(true, {}, defaults, options); + + $this.peity('line', options); + }); + } + }); + + $.components.register("peityPie", { + mode: "init", + defaults: { + delimiter: null, + fill: [$.colors("purple", 700), $.colors("purple", 400), $.colors("purple", 200)], + height: null, + radius: 11, + width: null + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.peity) { + return; + } + + defaults = $.components.getDefaults("peityPie"); + + $('[data-plugin="peityPie"]', context).each(function () { + var $this = iframe$(this), + options = $this.data(); + + if (options.skin) { + if ($.colors(options.skin)) { + var skinColors = $.colors(options.skin); + defaults.fill = [skinColors[700], skinColors[400], skinColors[200]]; + } + } + + options = $.extend(true, {}, defaults, options); + + $this.peity('pie', options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("plyr", { + mode: "init", + default: { + i18n: { + restart: "重新开始", + rewind: "向后 {seektime} 秒", + play: "播放", + pause: "暂停", + forward: "向前 {seektime} 秒", + buffered: "缓冲", + currentTime: "当前时间", + duration: "持续时间", + volume: "声音", + toggleMute: "切换静音", + toggleCaptions: "切换字幕", + toggleFullscreen: "切换全屏" + } + }, + init: function (context, iframe) { + var plyr = (iframe && iframe.plyr) ? iframe.plyr : window.plyr; + + if (typeof plyr === "undefined") { + return; + } + + (function (d, u) { + var a = new XMLHttpRequest(), + b = d.body; + + // Check for CORS support + if ("withCredentials" in a) { + a.open("GET", u, true); + a.send(); + a.onload = function () { + var c = d.createElement("div"); + c.style.display = "none"; + c.innerHTML = a.responseText; + b.insertBefore(c, b.childNodes[0]); + }; + } + })(context, "https://cdn.plyr.io/1.1.5/sprite.svg"); + + plyr.setup(); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("rating", { + mode: "init", + defaults: { + targetKeep: true, + icon: "font", + starType: "i", + starOff: "icon wb-star", + starOn: "icon wb-star orange-600", + cancelOff: "icon wb-minus-circle", + cancelOn: "icon wb-minus-circle orange-600", + starHalf: "icon wb-star-half orange-500", + cancelHint: '取消评分', + hints: ['很差', '差', '一般', '好', '非常好'] + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.raty) { + return; + } + + var defaults = this.defaults; + + $('[data-plugin="rating"]', context).each(function () { + var $this = iframe$(this); + + var options = $.extend(true, {}, defaults, $this.data()); + + + if (options.hints && typeof options.hints === 'string') { + options.hints = options.hints.split(','); + } + + $this.raty(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("select2", { + mode: "default", + defaults: { + width: "style", + language: "zh-CN" + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("selectable", { + mode: "init", + defaults: { + allSelector: '.selectable-all', + itemSelector: '.selectable-item', + rowSelector: 'tr', + rowSelectable: false, + rowActiveClass: 'active', + onChange: null + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.asSelectable) { + return; + } + + defaults = $.components.getDefaults('selectable'); + + $('[data-plugin="selectable"], [data-selectable="selectable"]', context).each(function () { + var options = $.extend({}, defaults, $(this).data(iframe$)); + iframe$(this).asSelectable(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("slidePanel", { + mode: "manual", + defaults: { + closeSelector: '.slidePanel-close', + mouseDragHandler: '.slidePanel-handler', + loading: { + template: function (options) { + return '<div class="' + options.classes.loading + '">' + + '<div class="loader loader-default"></div>' + + '</div>'; + }, + showCallback: function (options) { + this.$el.addClass(options.classes.loading + '-show'); + }, + hideCallback: function (options) { + this.$el.removeClass(options.classes.loading + '-show'); + } + } + } + }); +})(window, document, jQuery); + +(function (window, document, $) { + "use strict"; + + $.components.register("slimScroll", { + mode: "default", + defaults: { + height : '100%', + size : '4px', + color: $.configs.colors['blue-grey']['500'], + position : 'right', + distance : '1px', + railVisible : true, + railColor : $.configs.colors['blue-grey']['300'], + railOpacity : 0.1, + railDraggable : true, + wheelStep : 15, + borderRadius: '4px', + railBorderRadius : '4px' + } + }); + +})(window, document, jQuery); + +(function(window, document, $){ + "use strict"; + + $.components.register("summernote", { + mode: "default", + defaults: { + height: 300 + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("switchery", { + mode: "init", + defaults: { + color: $.colors("purple", 600) + }, + init: function (context, iframe) { + var Switchery = (iframe && iframe.Switchery) ? iframe.Switchery : window.Switchery, + iframe$ = iframe ? iframe.$ : $, defaults; + + if (typeof Switchery === "undefined") { + return; + } + + defaults = $.components.getDefaults("switchery"); + + $('[data-plugin="switchery"]', context).each(function () { + var options = $.extend({}, defaults, $(this).data(iframe$)); + + new Switchery(this, options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("table", { + mode: "api", + api: function (context) { + var touch = typeof context.ontouchstart !== 'undefined', + type = 'click'; + + if (touch) { + type = 'touchstart'; + } + + $(context).on(type, '.table-section', function (e) { + if ("checkbox" !== e.target.type && "button" !== e.target.type && "a" !== e.target.tagName.toLowerCase() && !$(e.target).parent("div.checkbox-custom").length) { + if ($(this).hasClass("active")) { + $(this).removeClass("active"); + } else { + $(this).siblings('.table-section').removeClass("active"); + $(this).addClass("active"); + } + } + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("verticalTab", { + mode: "init", + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $; + + if (!iframe$.fn.matchHeight) { + return; + } + + $('.nav-tabs-vertical', context).each(function () { + iframe$(this).children().matchHeight(); + }); + } + }); + + $.components.register("horizontalTab", { + mode: "init", + init: function (context,iframe) { + var iframe$ = iframe ? iframe.$ : $, $nav; + + if (!iframe$.fn.responsiveHorizontalTabs) { + return; + } + + $nav = $('[data-approve="nav-tabs"]', context); + $nav.each(function () { + var $item = iframe$(this), + options = $.extend(true, {}, $item.data()); + + $item.responsiveHorizontalTabs(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("taskList", { + mode: "api", + api: function (context) { + $(context).on('change.site.task', '[data-role="task"]', function () { + var $list = $(this), + $checkbox = $list.find('[type="checkbox"]'); + if ($checkbox.is(':checked')) { + $list.addClass('task-done'); + } else { + $list.removeClass('task-done'); + } + }); + + $('[data-role="task"]').trigger('change.site.task'); + } + }); +})(window, document, jQuery); +(function (window, document, $) { + "use strict"; + + $.components.register("toastr", { + mode: "api", + defaults: {}, + api: function (context, iframe) { + var toastr = (iframe && iframe.toastr) ? iframe.toastr : window.toastr, + iframe$ = iframe ? iframe.$ : $, defaults; + + if (typeof toastr === "undefined") { + return; + } + defaults = $.components.getDefaults("toastr"); + + $(context).on('click.site.toastr', '[data-plugin="toastr"]', function (e) { + e.preventDefault(); + + var $this = $(this), + options = $.extend(true, {}, defaults, $this.data(iframe$)), + message = options.message || '', + type = options.type || "info", + title = options.title || undefined; + + switch (type) { + case "success": + toastr.success(message, title, options); + break; + case "warning": + toastr.warning(message, title, options); + break; + case "error": + toastr.error(message, title, options); + break; + case "info": + toastr.info(message, title, options); + break; + default: + toastr.info(message, title, options); + } + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("toolbar", { + mode: "init", + defaults: { + adjustment: 15, + zIndex:1900 + }, + init: function (context, iframe) { + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn.toolbar) { + return; + } + + defaults = $.components.getDefaults("toolbar"); + + $('[data-plugin="toolbar"]', context).each(function () { + var $this = iframe$(this); + var content = $this.data("toolbar"); + + var options = $.extend(true, {}, defaults); + + if (content) { + options.content = content; + } + + $this.toolbar(options); + }); + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("twbsPagination", { + mode: "default", + defaults: { + first: '<span class="icon fa-angle-double-left" title="第一页"></span>', + prev: '<span class="icon fa-angle-left" title="上一页"></span>', + next: '<span class="icon fa-angle-right" title="下一页"></span>', + last: '<span class="icon fa-angle-double-right" title="最后一页"></span>' + } + }); +})(window, document, jQuery); +(function(window, document, $){ + "use strict"; + + $.components.register("webuiPopover", { + mode: "default", + defaults: { + trigger: "click", + width: 320, + multi: true, + cloaseable: false, + style: "", + delay: 300, + padding: true + } + }); +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/global/configs/site-configs.js b/public/lib/admui/js/global/configs/site-configs.js new file mode 100644 index 0000000..a5909a0 --- /dev/null +++ b/public/lib/admui/js/global/configs/site-configs.js @@ -0,0 +1,174 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, $) { + "use strict"; + + /* global layer */ + + $.configs.set('site', { + fontFamily: '"Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif' + }); + + $.configs.colors = { + "red": { + "100": "#ffeaea", + "200": "#fad3d3", + "300": "#fab4b4", + "400": "#fa9898", + "500": "#fa7a7a", + "600": "#f96868", + "700": "#e9595b", + "800": "#d6494b" + }, + "pink": { + "100": "#fce4ec", + "200": "#ffccde", + "300": "#fba9c6", + "400": "#fb8db4", + "500": "#f978a6", + "600": "#f96197", + "700": "#f44c87", + "800": "#e53b75" + }, + "purple": { + "100": "#f6f2ff", + "200": "#e3dbf4", + "300": "#d2c5ec", + "400": "#bba7e4", + "500": "#a58add", + "600": "#926dde", + "700": "#7c51d1", + "800": "#6d45bc" + }, + "indigo": { + "100": "#edeff9", + "200": "#dadef5", + "300": "#bcc5f4", + "400": "#9daaf3", + "500": "#8897ec", + "600": "#677ae4", + "700": "#5166d6", + "800": "#465bd4" + }, + "blue": { + "100": "#e8f1f8", + "200": "#d5e4f1", + "300": "#bcd8f1", + "400": "#a2caee", + "500": "#89bceb", + "600": "#62a8ea", + "700": "#4e97d9", + "800": "#3583ca" + }, + "cyan": { + "100": "#ecf9fa", + "200": "#d3eff2", + "300": "#baeaef", + "400": "#9ae1e9", + "500": "#77d6e1", + "600": "#57c7d4", + "700": "#47b8c6", + "800": "#37a9b7" + }, + "teal": { + "100": "#ecfdfc", + "200": "#cdf4f1", + "300": "#99e1da", + "400": "#79d1c9", + "500": "#56bfb5", + "600": "#3aa99e", + "700": "#269b8f", + "800": "#178d81" + }, + "green": { + "100": "#e7faf2", + "200": "#bfedd8", + "300": "#9fe5c5", + "400": "#7dd3ae", + "500": "#5cd29d", + "600": "#46be8a", + "700": "#36ab7a", + "800": "#279566" + }, + "light-green": { + "100": "#f1f7ea", + "200": "#e0ecd1", + "300": "#cadfb1", + "400": "#bad896", + "500": "#acd57c", + "600": "#9ece67", + "700": "#83b944", + "800": "#70a532" + }, + "yellow": { + "100": "#fffae7", + "200": "#f9eec1", + "300": "#f6e7a9", + "400": "#f8e59b", + "500": "#f7e083", + "600": "#f7da64", + "700": "#f9cd48", + "800": "#fbc02d" + }, + "orange": { + "100": "#fff3e6", + "200": "#ffddb9", + "300": "#fbce9d", + "400": "#f6be80", + "500": "#f4b066", + "600": "#f2a654", + "700": "#ec9940", + "800": "#e98f2e" + }, + "brown": { + "100": "#fae6df", + "200": "#e2bdaf", + "300": "#d3aa9c", + "400": "#b98e7e", + "500": "#a17768", + "600": "#8d6658", + "700": "#7d5b4f", + "800": "#715146" + }, + "grey": { + "100": "#fafafa", + "200": "#eeeeee", + "300": "#e0e0e0", + "400": "#bdbdbd", + "500": "#9e9e9e", + "600": "#757575", + "700": "#616161", + "800": "#424242" + }, + "blue-grey": { + "100": "#f3f7f9", + "200": "#e4eaec", + "300": "#ccd5db", + "400": "#a3afb7", + "500": "#76838f", + "600": "#526069", + "700": "#37474f", + "800": "#263238" + } + }; + + // 检查IE,在IE环境下设置ajax禁止缓存 + var isIE = (function () { + return !!window.ActiveXObject || "ActiveXObject" in window; + }); + + if(isIE){ + $.ajaxSetup({cache: false}); + } + + //// layer 弹层组件配置 + //if(typeof layer !== 'undefined'){ + // layer.config({ + // extend: '../retina.css' + // }); + //} + +})(window, $); \ No newline at end of file diff --git a/public/lib/admui/js/global/core.js b/public/lib/admui/js/global/core.js new file mode 100644 index 0000000..285fd90 --- /dev/null +++ b/public/lib/admui/js/global/core.js @@ -0,0 +1,359 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + // 项目名称 + $.ctx = location.pathname.substring(0,location.pathname.lastIndexOf("/")+1); + + + // 获取颜色配置信息 + $.colors = function (name, level) { + if (!$.configs.colors && typeof $.configs.colors[name] === 'undefined') { + return null; + } + + if (level && typeof $.configs.colors[name][level] !== 'undefined') { + return $.configs.colors[name][level]; + } else { + return $.configs.colors[name]; + } + }; + + // 3rd调用参数 + $.po = function (name, options) { + var defaults = $.components.getDefaults(name); + return $.extend(true, {}, defaults, options); + }; + + // 配置信息存储管理 + $.configs = $.configs || {}; + + $.extend($.configs, { + _data: {}, + get: function () { + var data = this._data, name, + _argLen = arguments.length; + + if (_argLen === 0) { + return; + } + for (var i = 0; i < _argLen; i++) { + name = arguments[i]; + + data = data[name]; + } + + return data; + }, + set: function (name, value) { + if (this.get(name)) { + console.error('configs:' + name + '对象已经存在了'); + } else { + this._data[name] = value; + } + }, + extend: function (name, options) { + return $.extend(true, this.get(name), options); + } + }); + + // 实现插件的提前检测和调用 + $.components = $.components || {}; + + $.extend($.components, { + _components: {}, + register: function (name, obj) { + this._components[name] = obj; + }, + init: function (context, iframe, name, args) { + var self = this, obj; + args = args || true; + + if (typeof name === 'undefined') { + $.each(this._components, function (name) { + self.init(context, iframe, name, args); + }); + } else { + context = context || document; + + obj = this.get(name); + + if (!obj) { + return; + } + + switch (obj.mode) { + case 'default': + return this._initDefault(name, context, iframe); + case 'init': + return this._initComponent(obj, context, iframe); + case 'api': + return this._initApi(obj, context, args, iframe); + default: + this._initApi(obj, context, args, iframe); + this._initComponent(obj, context, iframe); + return; + } + } + }, + _initDefault: function (name, context, iframe) { // jquery 3rd的基本用法 + var iframe$ = iframe ? iframe.$ : $, defaults; + + if (!iframe$.fn[name]) { + return; + } + + defaults = this.getDefaults(name); + + $('[data-plugin=' + name + ']', context).each(function () { + var $this = iframe$(this), + options = $.extend(true, {}, defaults, $this.data()); + + $this[name](options); + }); + }, + _initComponent: function (obj, context, iframe) { // jquery 3rd的高级用法 + if ($.isFunction(obj.init)) { + obj.init.call(obj, context, iframe); + } + }, + _initApi: function (obj, context, args, iframe) { // 其他处理 + if (args && $.isFunction(obj.api)) { + obj.api.call(obj, context, iframe); + } + }, + getDefaults: function (name) { + var component = this.get(name); + + return component && typeof component.defaults !== "undefined" ? component.defaults : {}; + }, + get: function (name) { + if (typeof this._components[name] !== "undefined") { + return this._components[name]; + } else { + console.error('component:' + name + ' 脚本文件没有注册任何信息!'); + return undefined; + } + } + }); + + // 本地存储对象操作 localStorage + $.storage = $.storage || {}; + + $.extend($.storage, { + set: function (key, value, time) { //存入缓存 + var cacheExpireDate, cacheVal; + + if (!localStorage) { + console.error('该浏览器不支持localStorage对象'); + } + + if (!key || !value) { + return null; + } + + // 定时情况 + if (!time || isNaN(time)) { + cacheExpireDate = null; + } else { + cacheExpireDate = (new Date() - 1) + time * 1000 * 60; + } + + cacheVal = {val: value, exp: cacheExpireDate}; + + if (typeof value === "object") { + cacheVal = JSON.stringify(cacheVal); + } + + localStorage.setItem(key, cacheVal); + }, + get: function (key) { // 获取存储内容 + var value, now, exp; + + if (!localStorage) { + console.error('该浏览器不支持localStorage对象'); + } + + value = localStorage.getItem(key); + + if (!value) { + return null; + } + + if (typeof value === 'string') { + value = JSON.parse(value); + } + + now = new Date() - 1; + exp = value.exp; + + if (exp && now > exp) { // 缓存内容已过期 + this.remove(key); + return null; + } + + return value.val; + }, + remove: function (key) { // 删除指定缓存 + if (!localStorage) { + console.error('该浏览器不支持localStorage对象'); + } + + localStorage.removeItem(key); + } + }); + + // 本地存储对象操作 sessionStorage + $.sessionStorage = $.sessionStorage || {}; + + $.extend($.sessionStorage, { + set: function (key, value) { //存入缓存 + if (!sessionStorage) { + console.error('该浏览器不支持sessionStorage对象'); + } + + if (!key || !value) { + return null; + } + + if (typeof value === "object") { + value = JSON.stringify(value); + } + + sessionStorage.setItem(key, value); + }, + get: function (key) { // 获取存储内容 + var value; + + if (!sessionStorage) { + console.error('该浏览器不支持sessionStorage对象'); + } + + value = sessionStorage.getItem(key); + + if (!value) { + return null; + } + + if (typeof value === 'string') { + value = JSON.parse(value); + } + + return value; + }, + remove: function (key) { // 删除指定缓存 + if (!sessionStorage) { + console.error('该浏览器不支持sessionStorage对象'); + } + + sessionStorage.removeItem(key); + } + }); + + // 网站基础设置 + $.site = $.site || {}; + + function dataAttr(elem, key, data, iJquery) { + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if (data === undefined && elem.nodeType === 1) { + + var name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase(); + + data = elem.getAttribute(name); + + if (typeof data === "string") { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test(data) ? $.parseJSON(data) : + data; + } catch (e) { + } + + // Make sure we set the data so it isn't changed later + iJquery.data(elem, key, data); + + } else { + data = undefined; + } + } + + return data; + } + + $.fn.extend({ + data: function (key, value, iJquery) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if (key === undefined || $.isFunction(key)) { + iJquery = key || $; + + if (this.length) { + data = iJquery.data(elem); + + if (elem.nodeType === 1 && !iJquery._data(elem, "parsedAttrs")) { + i = attrs.length; + while (i--) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if (attrs[i]) { + name = attrs[i].name; + if (name.indexOf("data-") === 0) { + name = iJquery.camelCase(name.slice(5)); + dataAttr(elem, name, data[name], iJquery); + } + } + } + iJquery._data(elem, "parsedAttrs", true); + } + } + + return data; + } + + if($.isFunction(value) && value.fn.jquery){ + return elem ? dataAttr(elem, key, value.data(elem, key), value) : undefined; + } + + // Sets multiple values + if (typeof key === "object") { + return this.each(function () { + value && value.data(this, key); + }); + } + + iJquery = iJquery || $; + + return arguments.length > 1 ? + + // Sets one value + this.each(function () { + iJquery.data(this, key, value); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr(elem, key, iJquery.data(elem, key), iJquery) : undefined; + } + }); + +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/index.js b/public/lib/admui/js/index.js new file mode 100644 index 0000000..208184a --- /dev/null +++ b/public/lib/admui/js/index.js @@ -0,0 +1,359 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (docuemnt, window, $) { + 'use strict'; + + /* globals Breakpoints, screenfull*/ + + $.extend($.site, { + theme: function () { // 主题渲染 + var $body = $('body'), + settingsName = 'admui.base.skinTools', + $parentLink = $('#admui-siteStyle', $('head')), + settings = localStorage.getItem(settingsName), + parentEtx = $parentLink.prop('href').indexOf('?v=') === -1 ? '' : '.min', themeColor, sidebar, navbar, + menuDisplay, menuTxtIcon; + + if (!settings) { + return; + } + + settings = JSON.parse(settings).val; + themeColor = this.themeColor = settings.themeColor; + sidebar = settings.sidebar; + navbar = settings.navbar; + menuDisplay = settings.menuDisplay; + menuTxtIcon = settings.menuTxtIcon; + + // 在前端渲染主题不是最优雅体验最好的,建议通过后端渲染 + if (themeColor && themeColor !== 'primary') { + setTimeout(function () { + $parentLink.attr('href', 'lib/admui/skins/' + themeColor + '/index' + parentEtx + '.css'); + }, 130); + } + + if (sidebar && sidebar === 'site-menubar-light') { + $('#admui-siteMenubar').addClass('site-menubar-light'); + } + + if (navbar && navbar !== '') { + $('.site-navbar').addClass(navbar); + } + + if (settings.navbarInverse === '') { + $('.site-navbar').removeClass('navbar-inverse'); + } + + if (menuDisplay && menuDisplay === 'site-menubar-fold') { + $.site.menubar.fold(); + + if (menuTxtIcon && menuTxtIcon === 'site-menubar-keep') { + $body.addClass('site-menubar-keep'); + } else { + $body.addClass('site-menubar-fold-alt'); + } + } + + if (settings.tabFlag === '') { + $body.removeClass('site-contabs-open'); + } + + }, + iframeTheme: function () { // 子框架主体内容部分主题 + var $iframeLink = $('#admui-siteStyle', this.iframeDocument), + iframeEtx = $iframeLink.prop('href').indexOf('?v=') === -1 ? '' : '.min', + themeColor = this.themeColor; + + if (themeColor && themeColor !== 'primary') { + $iframeLink.attr('href', 'lib/admui/skins/' + this.themeColor + '/site' + iframeEtx + '.css'); + } + }, + _tabsDraw: function () { // 标签页重绘 + var self = this, + settingsName = 'admui.base.contentTabs', + settings = $.sessionStorage.get(settingsName), + tab, checkedTabId, checkedTabUrl, tabTpl, tabUrl, tabName, tabIframe, + locationUrl = location.hash.substring(2), + $conTabs = $('.con-tabs'), + contentTabs = $.site.contentTabs, + callback = function (key, tabId, url) { + var $firstIframe = self.$content.find('iframe:first'); + + if (key === tabId || !locationUrl) { + checkedTabUrl = url; + + $conTabs.find('li:first').addClass('active'); + $firstIframe.attr('src', url); + self.iframeEvents($firstIframe); + }else{ + $firstIframe.removeClass('active'); + } + }; + + checkedTabId = settings.checked; + + for (var key in settings) { + tab = settings[key]; + + if (key === 'checked' || key === 'tabId') { + continue; + } else if (key === 'iframe-0') { + callback(key, checkedTabId, tab.url); + continue; + } + + tabUrl = tab.url; + tabName = tab.name; + tabTpl = '<a href="' + tabUrl + '" ' + 'target="' + key + '"' + + '" title="' + tabName + '' + '" rel="contents"><span>' + tabName + '</span><i class="icon' + + ' wb-close-mini">' + '</i></a></li>'; + + if (key === checkedTabId && locationUrl) { + checkedTabUrl = tabUrl; + tabTpl = '<li class="active">' + tabTpl; + tabIframe = '<iframe src="' + tabUrl + '" frameborder="0" name="' + key + '" class="page-frame animation-fade active"></iframe>'; + } else { + tabTpl = '<li>' + tabTpl; + tabIframe = '<iframe src="" frameborder="0" name="' + key + '" class="page-frame animation-fade"></iframe>'; + } + + $conTabs.append(tabTpl); + self.$content.append(tabIframe); + } + + if (locationUrl !== checkedTabUrl && locationUrl) { + this._urlRequest(locationUrl); + } + + contentTabs.enable($conTabs.find('.active')); + + if (Object.keys(settings).length >= 19) { + contentTabs.tabSize(); + contentTabs.tabEvent($conTabs, 'media'); + } + }, + _urlRequest: function (url) { // 处理存储信息中没有的页面访问(创建新的标签页) + var title = '未知页面'; + + $('.site-menu a').each(function () { + var $item = $(this); + + if ($item.attr('href') === url) { + title = $.trim($item.attr('title') || $item.text()); + + return false; + } + }); + + $.site.contentTabs.buildTab({name: title, url: url}); + }, + _hideNavbar: function () { // 隐藏导航条 + var $body = $('body'); + + $body.addClass('site-navbar-collapsing'); + $('#admui-navbarCollapse').collapse('hide'); + + setTimeout(function () { + $body.removeClass('site-navbar-collapsing'); + }, 10); + + $body.removeClass('site-navbar-collapse-show'); + }, + iframeEvents: function ($el) { // 子框架主体内容事件处理 + var self = this, _callback = function (obj) { + $('#admui-siteStyle', obj).load(function () { + self.iframeTheme(); + }); + }; + + /* + * 菜单收起 + * 导航条收起 + * */ + $el.load(function () { + var iframeDocument = self.iframeDocument = $.content.document(); + + $(iframeDocument).on('click', function () { + // 小屏下收起顶部导航条和左侧菜单 + if (Breakpoints.is('xs') && $('body').hasClass('site-menubar-open')) { + $.site.menubar.hide(); + + self._hideNavbar(); + } + + // 核心框架中下拉菜单切换操作 + $('[data-toggle="dropdown"]').parent().removeClass('open'); + }); + + _callback(iframeDocument); + }); + }, + run: function () { + var self = this, + $content = this.$content = $('#admui-pageContent'); + + // 获取iframe框架中变量&方法 + $.content = $.content || {}; + + $.extend($.content, { + window: function () { + var name = $content.find('iframe.active').attr('name'); + return window.frames[name]; + }, + document: function () { // 获取iframe框架中document + var name = $content.find('iframe.active').attr('name'); + return window.frames[name].document; + } + }); + + // 当前iframe框架document + this.iframeDocument = null; + + // 项目名称获取 + $.ctx = $('#admui-signOut').data('ctx') || $.ctx; + + if (typeof $.site.menu !== 'undefined') { + $.site.menu.init(); + } + + if (typeof $.site.contentTabs !== 'undefined') { + $.site.contentTabs.init(); + } + + // 导航条响应式 + $('#admui-navbar').responsiveHorizontalTabs({ + tabParentSelector: '#admui-navTabs', + fnCallback: function (el) { + if ($('#admui-navbar').is(':visible')) { + el.removeClass('is-load'); + } + } + }); + + // 导航条&菜单的响应式工作 + if (typeof $.site.menubar !== 'undefined') { + $('#admui-siteMenubar').on('changing.site.menubar', function () { + var $menubar = $('[data-toggle="menubar"]'); + + $menubar.toggleClass('hided', !$.site.menubar.opened); + $menubar.toggleClass('unfolded', !$.site.menubar.folded); + }); + + $.site.menubar.init(); + + Breakpoints.on('change', function () { + $.site.menubar.change(); + }); + + /* + * 小屏幕下导航条展开 | 收起按钮 + * 搜索按钮(href) + * */ + $(document).on('click', '[data-toggle="collapse"]', function (e) { + var $trigger = $(e.target), + href, target, $target; + + if (!$trigger.is('[data-toggle="collapse"]')) { + $trigger = $trigger.parents('[data-toggle="collapse"]'); + } + + target = $trigger.attr('data-target') || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''); + $target = $(target); + + if ($target.hasClass('navbar-search-overlap')) { + $target.find('input').focus(); + + e.preventDefault(); + } else if ($target.attr('id') === 'admui-navbarCollapse') { + var isOpen = !$trigger.hasClass('collapsed'), + $body = $(document.body); + + $body.addClass('site-navbar-collapsing'); + $body.toggleClass('site-navbar-collapse-show', isOpen); + + $('#admui-navbar').responsiveHorizontalTabs({ + tabParentSelector: '#admui-navTabs', + fnCallback: function (el) { + el.removeClass('is-load'); + } + }); + + setTimeout(function () { + $body.removeClass('site-navbar-collapsing'); + }, 350); + } + }); + + $(document).on('click', '[data-toggle="menubar"]', function () { // 菜单展开|收起控制按钮 + if (Breakpoints.is('xs') && $('body').hasClass('site-menubar-open')) { + self._hideNavbar(); + } + + $.site.menubar.toggle(); + }); + + // 图标对应菜单展开 + $('#admui-navbar >.nav-tabs >li:not(.no-menu)').on('click', function (e) { + if ($(e.target).closest('li').is('.dropdown')) { + return; + } + + if (Breakpoints.is('xs')) { + $.site.menubar.open(); + } + }); + } + + // 全屏模式操作 + if (typeof screenfull !== 'undefined') { + $(document).on('click', '[data-toggle="fullscreen"]', function () { + if (screenfull.enabled) { + screenfull.toggle(); + } + + return false; + }); + + if (screenfull.enabled) { + document.addEventListener(screenfull.raw.fullscreenchange, function () { + $('[data-toggle="fullscreen"]').toggleClass('active', screenfull.isFullscreen); + }); + } + } + + // 对下拉列表的其他功能 + $(document).on('show.bs.dropdown', function (e) { + var $target = $(e.target), $menu, + $trigger = e.relatedTarget ? $(e.relatedTarget) : $target.children('[data-toggle="dropdown"]'), + animation = $trigger.data('animation'); + + if (animation) { + $menu = $target.children('.dropdown-menu'); + + $menu.addClass('animation-' + animation); + + $menu.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () { + $menu.removeClass('animation-' + animation); + }); + } + }); + + // 父框架工具提示和弹框初始化 + $('[data-toggle="tooltip"]').tooltip({trigger: 'hover'}); + $('[data-toggle="popover"]').popover(); + + if (window.localStorage) { + this.theme(); + this._tabsDraw(); + } + + $.components.init(); + } + }); + + $.site.run(); + +})(document, window, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/sections/content-tabs.js b/public/lib/admui/js/sections/content-tabs.js new file mode 100644 index 0000000..ce0d6c3 --- /dev/null +++ b/public/lib/admui/js/sections/content-tabs.js @@ -0,0 +1,490 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + $.site.contentTabs = { + $instance: $('#admui-navTabs .site-menu'), + $content: $('#admui-pageContent'), + storageKey: 'admui.base.contentTabs', + tabId: 0, + relative: 0, + tabTimeout: 30, + init: function () { + this.bind(); + this._defaultTab(); + }, + bind: function () { + var self = this, + $navContabs = $("#admui-siteConTabs"), + $navContent = $navContabs.find("ul.con-tabs"); + + this.tabWidth = $navContent.find("li").width(); + this.view = $navContabs.find(".contabs-scroll").width(); + + this.ifameTabs(); + + // 标签页的左右移动 && 关闭单个标签页 && 切换标签页 + $navContabs + .on('click.site.contabs', 'button.pull-left', function () { + self.tabPosition($navContent, self.tabWidth, "right"); + }) + .on('click.site.contabs', '.pull-right>.btn-icon', function () { + var content = $navContent.width(); + + self.tabPosition($navContent, self.tabWidth, "left", self.view, content); + }) + .on('click.site.contabs', 'ul.con-tabs>li', function (e) { + var $target = $(e.target), $item = $(this); + + if ($target.is("i.wb-close-mini")) { // 关闭 + self.closeTab($item); + } else if (!$item.is(".active")) { // 切换 + $item.siblings("li").removeClass("active"); + $item.addClass("active"); + + self._checkoutTab($item.find('a')); + self.enable($item); + } + e.preventDefault(); + }); + + // 刷新当前页 && 关闭其他 && 所有标签页 + $navContabs + .on('click.site.contabs', '.pull-right li.reload-page', function () { + var $navLi = $navContabs.find('ul.con-tabs>li.active>a'), + tabUrl = $navLi.attr('href'); + + // 刷新当前页 + self.$content.children('[src="' + tabUrl + '"]').attr('src', tabUrl); + + }) + .on('click.site.contabs', '.pull-right li.close-other', function () { + var $navLis = $navContabs.find('ul.con-tabs>li'); + + $navLis.each(function () { + var $that = $(this), tabId; + + if (!$that.is('.active') && $that.index() !== 0) { + tabId = $that.find('a').attr('target'); + $that.remove(); + self.$content.children('[name="' + tabId + '"]').remove(); + self._updateSetting(tabId); + } + }); + + $navContent.animate({left: 0}, 100); + + self.btnView('hide'); + }) + .on('click.site.contabs', '.pull-right li.close-all', function () { + var $tabs = $navContabs.find('ul.con-tabs>li'), + $checked = $tabs.eq(0); + + $tabs.each(function () { + var $that = $(this), tabId; + + if ($that.index() !== 0) { + tabId = $that.find('a').attr('target'); + $that.remove(); + self._updateSetting(tabId); + } + }); + + $navContent.animate({left: 0}, 100); + + self.btnView('hide'); + + $checked.addClass('active'); + self.enable($tabs.eq(0)); + self._checkoutTab($checked.find('a')); + + // 关闭所有 + self.$content.children(':not(:first)').remove(); + + self.tabSize(); + }); + + // 登出清楚标签页缓存 + $(document).on('click', '#admui-signOut', function () { + $.sessionStorage.remove(self.storageKey); + }); + + // 浏览器窗口大小改变,标签页的对应状态 + $(window).on('resize', this.resize); + }, + ifameTabs: function (el) { // 为当前doc对象中的a[data-iframe]标签绑定创建标签页功能 + var self = this, + doc = el === undefined ? document : el; + + // 新建标签页 + $(doc).on('click', 'a[data-iframe]', function (e) { + var $item = $(this), urlResult, + url = $item.attr('href'), + title = $.trim($item.text()) || $.trim($item.attr('title')), + iframeContent = $item.data('iframe') || '#admui-pageContent', + tabResult = $item.is('[target="_blank"]'); + + urlResult = new RegExp(/^([a-zA-z]+:|#|javascript|www\.)/); // 不执行新建标签页操作的地址 + + if (urlResult.test(url)) { + return; + } + + if (tabResult && iframeContent === '#admui-pageContent') { + window.history.replaceState(null, '', '#!' + url); + self.tabType = true; + self.buildTab({name: title, url: url}); + + if (!self.$instance.find($item).length) { + self.enable($item.parent()); + } + } else if (!tabResult) { + $(iframeContent).find('iframe.active').attr('src', url); + } + + e.preventDefault(); + }); + }, + _checkoutTab: function (tab) { // 标签页的切换 + var $content = this.$content, + tabId = tab.attr('target'), + tabTitle = $.trim(tab.attr('title')), + tabUrl = tab.attr('href'), + $checkedTab = $content.children('iframe[name="' + tabId + '"]'); + + $('title').text(tabTitle); + + if (!this.tabType) { + window.history.replaceState(null, '', '#!' + tabUrl); + } + + if (!$checkedTab.attr('src')) { + $checkedTab.attr('src', tabUrl); + } + + $content.children('.active').removeClass('active'); + $checkedTab.addClass('active'); + + $.site.iframeEvents($checkedTab); + this._updateSetting('checked', tabId); + this.tabType = false; + }, + _defaultTab: function () { // 存储默认标签的信息 + var $defaultTab = $('#admui-siteConTabs').find('li:first > a'), settings; + + settings = this.settings = $.sessionStorage.get(this.storageKey); + + if (settings === null) { + settings = $.extend(true, {}, { + 'iframe-0': { + 'url': $defaultTab.attr('href'), + 'name': $defaultTab.text() + }, + 'checked': $defaultTab.attr('target'), + 'tabId': this.tabId + }); + + this._updateSetting(settings); + } else { + this.tabId = settings.tabId; + } + }, + _updateSetting: function (item, value) { + var settings = $.sessionStorage.get(this.storageKey); + settings = settings ? settings : {}; + + if (typeof item === 'object') { + $.extend(true, settings, item); + } else if (!value) { + delete settings[item]; + } else { + settings[item] = value; + } + + $.sessionStorage.set(this.storageKey, settings, this.tabTimeout); + }, + resize: function () { + var self = $.site.contentTabs, + $navContabs = $(".site-contabs"), + $navContent = $navContabs.find("ul.con-tabs"); + + self._throttle(function () { + self.view = $navContabs.find(".contabs-scroll").width(); + self.tabEvent($navContent, 'media'); + }, 200)(); + }, + enable: function ($el) { // 左侧菜单定位 + var $instance = this.$instance, + href = $.trim($el.find('a').attr('href')), + _result = href.indexOf('#'), + tabUrl = _result > 0 ? href.substring(0, _result) : href, + $current = $instance.find('a[href="' + tabUrl + '"]'), + $currentParents, $currentLi, $currentHasSub, $instanceLi, checkedId, currentId; + + if ($current.length === 0) { + $.site.menu.refresh(); + return; + } + + checkedId = $.trim($instance.closest('div.tab-pane.active').attr('id')); + currentId = $.trim($current.closest('div.tab-pane').attr('id')); + + if (checkedId !== currentId) { + $('#admui-navbar a[href="#' + currentId + '"]').tab('show'); + } + + $currentLi = $current.closest('li').siblings('li.open'); + $currentParents = $current.parents('li.has-sub'); + $currentHasSub = $current.closest('li.has-sub').siblings('li.open'); + $instanceLi = $instance.find('li.open'); + + $instance.find('li.active').trigger('deactive.site.menu'); + $current.closest('li').trigger('active.site.menu'); + + if ($currentLi.length) { + $currentLi.trigger('close.site.menu'); + } + + if (!$current.closest('li.has-sub').hasClass('open')) { + if ($currentHasSub.length) { + $currentHasSub.trigger('close.site.menu'); + } + + if ($instanceLi.length) { + $instanceLi.not($currentParents).trigger('close.site.menu'); + } + + $currentParents.trigger('open.site.menu'); + } + }, + buildTab: function (opt) { // 新建标签页 + var $tabNav = $(".con-tabs"), tabName, obj = {}, tabId, + _url = opt.url, + _result = _url.indexOf('#'), + tabUrl = _result > 0 ? _url.substring(0, _result) : _url; + + if (this._checkTabs($tabNav, tabUrl)) { // 标签查重 + return; + } + + tabId = ++this.tabId; + tabName = 'iframe-' + tabId; + + // 修改当前选中的标签页 + $tabNav.find("li.active").removeClass("active"); + $tabNav.append('<li class="active"><a href="' + tabUrl + '" target="' + tabName + + '" title="' + opt.name + '' + '" rel="contents"><span>' + opt.name + '</span><i class="icon' + + ' wb-close-mini">' + '</i></a></li>'); + + obj[tabName] = { + 'url': tabUrl, + 'name': opt.name + }; + + $.extend(obj, { + 'checked': tabName, + 'tabId': tabId + }); + + this._updateSetting(obj); + + // 修改页面标题 + opt.name = opt.name === '' ? '无标题' : opt.name; + $('title').text($.trim(opt.name)); + + this.buildIframe(_url); + this.tabSize(); + this.tabEvent($tabNav, 'media'); + this.tabType = false; + }, + _checkTabs: function (doc, url) { // 标签查重 + var x, prevAll, nextAll, contentW, + _view = this.view, _tab = this.tabWidth, + $currenttab = doc.find("a[href='" + url + "']").closest('li'); + + if ($currenttab.hasClass('active')) { // 标签存在&已选中 + return true; + } + + if ($currenttab.size() <= 0) { // 标签不存在 + return false; + } + + // 标签存在未选中 + doc.find("li.active").removeClass("active"); + $currenttab.addClass("active"); + + // 切换标签页 + this._checkoutTab($currenttab.find('a')); + + // 标签位移到可视界面显示 + x = doc.position().left; + contentW = doc.width(); + prevAll = $currenttab.prevAll('li').size() * _tab; + nextAll = $currenttab.nextAll('li').size() * _tab; + + if (-prevAll < x) { + if (prevAll + x < _view) { + return true; + } + + x = -(prevAll - _view + _tab); + } else { + if (-x < contentW - nextAll) { + return true; + } + + x = -(contentW - nextAll - _tab); + } + + doc.animate({ + left: x + }, 100); + + return true; + }, + buildIframe: function (url) { // 创建iframe窗口 + var $content = this.$content, + iframeName = 'iframe-' + this.tabId, $checkedIframe; + + $content.children('.active').removeClass('active'); + $content.append('<iframe src="' + url + '" frameborder="0" name="' + iframeName + '" class="page-frame animation-fade active"></iframe>'); + + $checkedIframe = $content.find('iframe[name="' + iframeName + '"]'); + + $.site.iframeEvents($checkedIframe); + }, + tabSize: function () { // 修改标签页盒子尺寸 + var content, $tabNav = $(".con-tabs"), + _num = $tabNav.find("li").size(); + + content = this.tabWidth * _num; + $tabNav.css("width", content); + }, + tabEvent: function (doc, media) { // 增删标签页的对应状态 + var content = $(".con-tabs").width(), + _view = this.view, _tab = this.tabWidth; + + if (content > this.view) { + this.tabPosition(doc, _tab, "left", _view, content, media); + this.btnView('visible'); + } else { + this.btnView('hide'); + } + + if (this.currentView < _view || this.currentContent > content) { + this.tabPosition(doc, _tab, "right", _view, content, media); + } + this.currentView = _view; + this.currentContent = content; + }, + tabPosition: function (doc, width, dir, view, content, media) { // 标签页的位移 + var self = this, + x = doc.position().left, + callback = function (x) { + var flag = x + width; + + if (flag > 0) { + self.relative = x; + return 0; + } else { + return x; + } + }; + + if (dir === "left") { + if (x <= view - content) { + return false; + } + if (typeof media !== 'undefined') { + x = view - content; + } else { + x = this.relative !== 0 ? x - width + this.relative : x - width; + this.relative = 0; + } + } else if (dir === "right") { + if (x === 0) { + return false; + } + + if (typeof media !== 'undefined') { + x = content <= view ? 0 : view - content; + } else { + x = callback(x + width); + } + } + + doc.animate({ + left: x + }, 100); + }, + _throttle: function (fn, interval) { // 函数节流操作 + var _fn = fn, + timer, + firstTime = true; + return function () { + var args = arguments, + self = this; + + if (firstTime) { + _fn.apply(self, args); + firstTime = false; + } + + if (timer) { + return false; + } + + timer = setTimeout(function () { + clearTimeout(timer); + timer = null; + _fn.apply(self, args); + }, interval || 500); + }; + }, + closeTab: function ($item) { + var checkedTabId = $item.children('a').attr('target'), $checked = '', + $nextLi = $item.next('li'), + $content = this.$content; + + if ($item.is('.active')) { // 关闭选中标签 + if ($nextLi.size() > 0) { + $checked = $nextLi; + } else { + $checked = $item.prev('li'); + } + + $checked.addClass("active"); + + this.enable($checked); + this._checkoutTab($checked.find('a')); + } + + $item.remove(); + $content.children('[name="' + checkedTabId + '"]').remove(); + this._updateSetting(checkedTabId); + + this.tabSize(); + this.tabEvent($(".con-tabs"), 'media'); + + }, + btnView: function (status) { // 标签页左右移动按钮状态 + var $siteContabs = $('.site-contabs'), + $contabsLeftBtn = $siteContabs.children('button.pull-left'), + $contabsRightBtn = $siteContabs.find('.pull-right > button.btn-icon'); + + if (status === 'visible') { + $contabsLeftBtn.removeClass('hide'); + $contabsRightBtn.removeClass('hide'); + } else if (status === 'hide') { + $contabsLeftBtn.addClass('hide'); + $contabsRightBtn.addClass('hide'); + } + } + }; + +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/sections/media-menu.js b/public/lib/admui/js/sections/media-menu.js new file mode 100644 index 0000000..57bbd88 --- /dev/null +++ b/public/lib/admui/js/sections/media-menu.js @@ -0,0 +1,304 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + /*** + * 左侧菜单响应式操作 + * + * **/ + + $.site.menubar = { + opened: null, + folded: null, + top: false, + foldAlt: false, + auto: true, + init: function () { + var self = this, + $body = this.$body = $('body'), + $html = this.$html = $('html'), + $instance = this.$instance = $("#admui-navTabs"); + + $html.removeClass('css-menubar').addClass('js-menubar'); + + this.tabId = $('#admui-navbar').find('li.active > a').attr('href'); + + if (this.tabId === '#') { + this.tabId = $('.nav-tabs li.active').find('ul>li.active>a').attr('href'); + } + + if (!$instance.length) { + return; + } + + // 鼠标经过左侧菜单显示图标 + if ($body.is('.site-menubar-fold-alt')) { + this.foldAlt = true; + } + + // 鼠标经过左侧菜单显示文字 + if ($body.is('.site-menubar-keep')) { + if ($body.hasClass('site-menubar-fold')) { // 收起 + this.auto = 'fold'; + } else if ($body.hasClass('site-menubar-unfold')) { //展开 + this.auto = 'unfold'; + } + } + + $instance.on('changed.site.menubar', function () { + self.update(); + }); + + $('.nav-tabs li:not(.no-menu)').on('shown.bs.tab', function (event) { + var tabId = self.tabId = $(event.target).attr('href'); + + if ($body.hasClass('site-menubar-fold')) { + self.hoverscroll.enable(tabId); + } else if ($body.hasClass('site-menubar-unfold')) { + self.slimScroll.enable(); + } + }); + + this.change(); + }, + change: function () { + var breakpoint = Breakpoints.current(); + + if (this.auto !== true) { + switch (this.auto) { + case 'fold': + this.reset(); + if (breakpoint.name === 'xs') { + this.hide(); + } else { + this.fold(); + } + return; + case 'unfold': + this.reset(); + if (breakpoint.name === 'xs') { + this.hide(); + } else { + this.unfold(); + } + return; + } + } + + this.reset(); + + if (breakpoint) { + switch (breakpoint.name) { + case 'lg': + this.unfold(); + break; + case 'md': + case 'sm': + this.fold(); + break; + case 'xs': + this.hide(); + break; + } + } + Breakpoints.on('xs', 'leave', function () { + $('#admui-navbar').responsiveHorizontalTabs({ + tabParentSelector: '#admui-navTabs', + fnCallback: function (el) { + if ($('#admui-navbar').is(':visible')) { + el.removeClass('is-load'); + } + } + }); + }); + }, + animate: function (doing, callback) { + var self = this, + $body = self.$body; + + $body.addClass('site-menubar-changing'); + + doing.call(self); + this.$instance.trigger('changing.site.menubar'); + + callback.call(self); + $body.removeClass('site-menubar-changing'); + + self.$instance.trigger('changed.site.menubar'); + }, + reset: function () { + this.opened = null; + this.folded = null; + this.$body.removeClass('site-menubar-hide site-menubar-open site-menubar-fold site-menubar-unfold'); + this.$html.removeClass('disable-scrolling'); + }, + open: function () { + if (this.opened !== true) { + this.animate(function () { + this.$body.removeClass('site-menubar-hide').addClass('site-menubar-open site-menubar-unfold'); + this.opened = true; + + this.$html.addClass('disable-scrolling'); + + }, function () { + this.slimScroll.enable(); + }); + } + }, + hide: function () { + this.hoverscroll.disable(); + + if (this.opened !== false) { + this.animate(function () { + + this.$html.removeClass('disable-scrolling'); + this.$body.removeClass('site-menubar-open').addClass('site-menubar-hide site-menubar-unfold'); + this.opened = false; + + }, function () { + this.slimScroll.enable(); + }); + } + }, + unfold: function () { + this.hoverscroll.disable(); + + if (this.folded !== false) { + this.animate(function () { + this.$body.removeClass('site-menubar-fold').addClass('site-menubar-unfold'); + this.folded = false; + + }, function () { + this.slimScroll.enable(); + }); + } + }, + fold: function () { + this.slimScroll.destroy(); + + if (this.folded !== true) { + this.animate(function () { + this.$body.removeClass('site-menubar-unfold').addClass('site-menubar-fold'); + this.folded = true; + + }, function () { + this.hoverscroll.enable(this.tabId); + }); + } + }, + toggle: function () { + var breakpoint = Breakpoints.current(), + folded = this.folded, + opened = this.opened; + + switch (breakpoint.name) { + case 'lg': + if (folded === null || folded === false) { + this.fold(); + } else { + this.unfold(); + } + break; + case 'md': + case 'sm': + if (folded === null || folded === true) { + this.unfold(); + } else { + this.fold(); + } + + $('#admui-navbar').responsiveHorizontalTabs({ + tabParentSelector: '#admui-navTabs' + }); + break; + case 'xs': + if (opened === null || opened === false) { + this.open(); + } else { + this.hide(); + } + break; + } + }, + update: function () { + this.hoverscroll.update(); + }, + slimScroll: { + api: null, + native: false, + init: function () { + // if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { + // this.native = true; + // $body.addClass('site-menubar-native'); + // return; + // } + + if ($('body').is('.site-menubar-native')) { + this.native = true; + return; + } + + $.site.menubar.$instance.slimScroll($.po('slimScroll')); + }, + enable: function () { + if (this.native) { + return; + } + this.init(); + }, + destroy: function () { + $.site.menubar.$instance.slimScroll({destroy: true}); + $.site.menubar.$instance.removeAttr('style'); + } + }, + hoverscroll: { + api: null, + init: function (tabId) { + $.site.menubar.$instance.find(tabId).children('div').attr('style', ''); + + this.api = $.site.menubar.$instance.find(tabId).asHoverScroll({ + namespace: 'hoverscorll', + direction: 'vertical', + list: '.site-menu', + item: '> li', + exception: '.site-menu-sub', + fixed: false, + boundary: 100, + onEnter: function () { + //$(this).siblings().removeClass('hover'); + //$(this).addClass('hover'); + }, + onLeave: function () { + //$(this).removeClass('hover'); + } + }).data('asHoverScroll'); + }, + + update: function () { + if (this.api) { + this.api.update(); + } + }, + + enable: function (tabId) { + if (tabId !== this.tabId) { + this.tabId = tabId; + this.init(tabId); + } else { + this.api.enable(); + } + }, + + disable: function () { + if (this.api) { + this.api.disable(); + } + } + } + }; + +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/admui/js/sections/menu.js b/public/lib/admui/js/sections/menu.js new file mode 100644 index 0000000..5ad47b4 --- /dev/null +++ b/public/lib/admui/js/sections/menu.js @@ -0,0 +1,191 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +(function (window, document, $) { + 'use strict'; + + /*** + * 左侧菜单相关事件功能(默认为折叠效果) + * + * 提供了多个可触发事件: + * deactive.site.menu : 取消菜单选中项 + * active.site.menu : 设置菜单选中项 + * open.site.menu : 展开子菜单 + * close.site.menu : 收起子菜单 + * + * 可自定义事件: + * expanded.site.menu : 子菜单展开后动作 + * collapsed.site.menu : 子菜单收起后动作 + * **/ + + $.site.menu = { + speed: 250, + accordion: true, // 手风琴效果标识 + init: function () { + var $siteMenubar = this.$siteMenubar = $('#admui-navTabs .site-menu'); + + if (!$siteMenubar.length) { + return; + } + + this._bind(); + }, + _bind: function () { + var self = this, + $body = $('body'), + $siteMenubar = this.$siteMenubar; + + $siteMenubar + .on('mouseenter.site.menu', '.site-menu-item', function () { + var $item = $(this), + folded = $body.hasClass('site-menubar-fold'); + + if (folded === true && $item.is('.has-sub') && $item.parent('.site-menu').length) { + self.position($item, $item.children('.site-menu-sub')); + } + + $item.addClass('hover'); + }) + .on('mouseleave.site.menu', '.site-menu-item', function () { + var $item = $(this), + folded = $body.hasClass('site-menubar-fold'); + + if (folded === true && $item.is('.has-sub') && $item.parent('.site-menu').length) { + $item.children('.site-menu-sub').css("max-height", ""); + } + + $item.removeClass('hover'); + }) + .on('deactive.site.menu', '.site-menu-item.active', function () { + $(this).removeClass('active'); + }) + .on('active.site.menu', '.site-menu-item', function () { + $(this).addClass('active'); + }) + .on('open.site.menu', '.site-menu-item', function (e) { + var $item = $(this); + + self._expand($item, function () { + $item.addClass('open'); + }); + + if (self.accordion && $item.closest('li.has-sub').length <= 1) { + $item.siblings('.open').trigger('close.site.menu'); + } + + e.stopPropagation(); + }) + .on('close.site.menu', '.site-menu-item.open', function (e) { + var $item = $(this); + + self._collapse($item, function () { + $item.removeClass('open'); + }); + + e.stopPropagation(); + }) + .on('click.site.menu ', '.site-menu-item > a', function () { + var $item = $(this), + $parent = $item.parent(); + + if ($parent.is('.has-sub')) { + if ($parent.is('.open')) { + $parent.trigger('close.site.menu'); + } else { + $parent.trigger('open.site.menu'); + } + } else { + $item.closest('li').siblings('.open').trigger('close.site.menu'); + $item.closest('li.has-sub').siblings('.open').trigger('close.site.menu'); + $item.parents('div.tab-pane').siblings().find('li.open').trigger('close.site.menu'); + + $siteMenubar.find('li.active').trigger('deactive.site.menu'); + $parent.trigger('active.site.menu'); + } + }) + //.on('tap.site.menu', '> .site-menu-item > a', function () { // 左侧菜单在移动设备下事件操作 + /*var link = $(this).attr('href'); + + if (link) { + window.location = link; + }*/ + // }) + .on('touchend.site.menu', '> .site-menu-item > a', function () { + var $item = $(this).parent('.site-menu-item'), + folded = $body.hasClass('site-menubar-fold'); + + if (!folded) { + return; + } + + if ($item.is('.has-sub') && $item.parent('.site-menu').length) { + $item.siblings('.hover').removeClass('hover'); + + if ($item.is('.hover')) { + $item.removeClass('hover'); + } else { + $item.addClass('hover'); + } + } + }) + .on('scroll.site.menu', '.site-menu-sub', function (e) { + e.stopPropagation(); + }); + }, + _collapse: function ($item, callback) { // 子菜单的收起动作 + var self = this; + + $item.children('.site-menu-sub').slideUp(self.speed, function () { + if (callback) { + callback(); + } + + // 触发该元素上绑定的'collapsed.site.menu'事件 + self.$siteMenubar.trigger('collapsed.site.menu'); + }); + }, + _expand: function ($item, callback) { // 子菜单的展开动作 + var self = this; + + $item.children('.site-menu-sub').slideDown(self.speed, function () { + if (callback) { + callback(); + } + + // 触发该元素上绑定的'expanded.site.menu'事件 + self.$siteMenubar.trigger('expanded.site.menu'); + }); + }, + refresh: function () { // 重置左侧菜单状态 + var $siteMenubar = this.$siteMenubar; + + $siteMenubar.find('li.open').trigger('close.site.menu'); + $siteMenubar.find('li.active').trigger('deactive.site.menu'); + }, + position: function ($item, $dropdown) { // 窗口 | 在小屏幕设备上,左侧系统菜单的下拉列表的位置操作功能 + var offsetTop = $item.position().top, + menubarHeight = $("#admui-navTabs").outerHeight(), + itemHeight = $item.find("> a").outerHeight(); + + $dropdown.removeClass('site-menu-sub-up').css('max-height', ""); + + if (offsetTop > menubarHeight / 2) { + $dropdown.addClass('site-menu-sub-up'); + + if ($.site.menubar.foldAlt) { + offsetTop = offsetTop - itemHeight; + } + $dropdown.css('max-height', offsetTop + itemHeight); + } else { + if ($.site.menubar.foldAlt) { + offsetTop = offsetTop + itemHeight; + } + $dropdown.removeClass('site-menu-sub-up'); + $dropdown.css('max-height', menubarHeight - offsetTop); + } + } + }; + +})(window, document, jQuery); \ No newline at end of file diff --git a/public/lib/bootstrap/README.md b/public/lib/bootstrap/README.md new file mode 100644 index 0000000..3c25cef --- /dev/null +++ b/public/lib/bootstrap/README.md @@ -0,0 +1,14 @@ +#bootstrap + 是目前最流行的 HTML, CSS 和 JavaScript 框架,用于开发响应式,移动端先行的 web 项目。 + +github地址:https://github.com/twbs/bootstrap +中文文档:http://www.bootcss.com/ + +本地版本: 3.3.7 +更新日期: + +介绍: + Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。 + + + 基于bootstrop的插件放在当前目录下面 diff --git a/public/lib/bootstrap/bootstrap-checkbox/awesome-bootstrap-checkbox.css b/public/lib/bootstrap/bootstrap-checkbox/awesome-bootstrap-checkbox.css new file mode 100644 index 0000000..bb67207 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-checkbox/awesome-bootstrap-checkbox.css @@ -0,0 +1,327 @@ +.checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + vertical-align: middle; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 0; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; + line-height: 1.4; +} +.checkbox input[type="checkbox"], +.checkbox input[type="radio"] { + opacity: 0; + z-index: 1; + cursor: pointer; +} +.checkbox input[type="checkbox"]:focus + label::before, +.checkbox input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after, +.checkbox input[type="radio"]:checked + label::after { + font-family: "FontAwesome"; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:indeterminate + label::after, +.checkbox input[type="radio"]:indeterminate + label::after { + display: block; + content: ""; + width: 10px; + height: 3px; + background-color: #555555; + border-radius: 2px; + margin-left: -16.5px; + margin-top: 7px; +} +.checkbox input[type="checkbox"]:disabled, +.checkbox input[type="radio"]:disabled { + cursor: not-allowed; +} +.checkbox input[type="checkbox"]:disabled + label, +.checkbox input[type="radio"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before, +.checkbox input[type="radio"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} + +.checkbox-primary input[type="checkbox"]:checked + label::before, +.checkbox-primary input[type="radio"]:checked + label::before { + background-color: #337ab7; + border-color: #337ab7; +} +.checkbox-primary input[type="checkbox"]:checked + label::after, +.checkbox-primary input[type="radio"]:checked + label::after { + color: #fff; +} + +.checkbox-danger input[type="checkbox"]:checked + label::before, +.checkbox-danger input[type="radio"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after, +.checkbox-danger input[type="radio"]:checked + label::after { + color: #fff; +} + +.checkbox-info input[type="checkbox"]:checked + label::before, +.checkbox-info input[type="radio"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after, +.checkbox-info input[type="radio"]:checked + label::after { + color: #fff; +} + +.checkbox-warning input[type="checkbox"]:checked + label::before, +.checkbox-warning input[type="radio"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after, +.checkbox-warning input[type="radio"]:checked + label::after { + color: #fff; +} + +.checkbox-success input[type="checkbox"]:checked + label::before, +.checkbox-success input[type="radio"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after, +.checkbox-success input[type="radio"]:checked + label::after { + color: #fff; +} + +.checkbox-primary input[type="checkbox"]:indeterminate + label::before, +.checkbox-primary input[type="radio"]:indeterminate + label::before { + background-color: #337ab7; + border-color: #337ab7; +} + +.checkbox-primary input[type="checkbox"]:indeterminate + label::after, +.checkbox-primary input[type="radio"]:indeterminate + label::after { + background-color: #fff; +} + +.checkbox-danger input[type="checkbox"]:indeterminate + label::before, +.checkbox-danger input[type="radio"]:indeterminate + label::before { + background-color: #d9534f; + border-color: #d9534f; +} + +.checkbox-danger input[type="checkbox"]:indeterminate + label::after, +.checkbox-danger input[type="radio"]:indeterminate + label::after { + background-color: #fff; +} + +.checkbox-info input[type="checkbox"]:indeterminate + label::before, +.checkbox-info input[type="radio"]:indeterminate + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.checkbox-info input[type="checkbox"]:indeterminate + label::after, +.checkbox-info input[type="radio"]:indeterminate + label::after { + background-color: #fff; +} + +.checkbox-warning input[type="checkbox"]:indeterminate + label::before, +.checkbox-warning input[type="radio"]:indeterminate + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.checkbox-warning input[type="checkbox"]:indeterminate + label::after, +.checkbox-warning input[type="radio"]:indeterminate + label::after { + background-color: #fff; +} + +.checkbox-success input[type="checkbox"]:indeterminate + label::before, +.checkbox-success input[type="radio"]:indeterminate + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.checkbox-success input[type="checkbox"]:indeterminate + label::after, +.checkbox-success input[type="radio"]:indeterminate + label::after { + background-color: #fff; +} + +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + vertical-align: middle; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; + z-index: 1; + cursor: pointer; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled { + cursor: not-allowed; +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} + +.radio-primary input[type="radio"] + label::after { + background-color: #337ab7; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #337ab7; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #337ab7; +} + +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} + +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} + +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} + +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} + +input[type="checkbox"].styled:checked + label:after, +input[type="radio"].styled:checked + label:after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +input[type="checkbox"] .styled:checked + label::before, +input[type="radio"] .styled:checked + label::before { + color: #fff; +} +input[type="checkbox"] .styled:checked + label::after, +input[type="radio"] .styled:checked + label::after { + color: #fff; +} diff --git a/public/lib/bootstrap/bootstrap-checkbox/demo/index.html b/public/lib/bootstrap/bootstrap-checkbox/demo/index.html new file mode 100644 index 0000000..473c97e --- /dev/null +++ b/public/lib/bootstrap/bootstrap-checkbox/demo/index.html @@ -0,0 +1,263 @@ +<!DOCTYPE html> +<html> +<head lang="en"> + <meta charset="UTF-8"> + <title>awesome bootstrap checkbox demo + + + + + + + +
+

Checkboxes

+
+
+
+
+ + Basic + +

+ Supports bootstrap brand colors: .checkbox-primary, .checkbox-info etc. +

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+

Checkboxes without label text

+
+ + +
+
+ + +
+

Checkboxes with indeterminate state

+
+ + +
+

Inline checkboxes

+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ + Circled + +

+ .checkbox-circle for roundness. +

+
+ + +
+
+ + +
+
+
+
+
+ + Disabled + +

+ Disabled state also supported. +

+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+

Radios

+
+
+
+
+ + Basic + +

+ Supports bootstrap brand colors: .radio-primary, .radio-danger etc. +

+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+

Radios without label text

+
+ + +
+
+ + +
+

Inline radios

+
+ + +
+
+ + +
+
+
+
+
+ + Disabled + +

+ Disabled state also supported. +

+
+ + +
+
+ + +
+
+
+
+
+ + As Checkboxes + +

+ Radios can be made to look like checkboxes. +

+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + + diff --git a/public/lib/bootstrap/bootstrap-select/bootstrap-select.css b/public/lib/bootstrap/bootstrap-select/bootstrap-select.css new file mode 100644 index 0000000..c2c5f41 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-select/bootstrap-select.css @@ -0,0 +1,300 @@ +/** + * Admui-iframe v1.0.0 + * Copyright 2015-2017 Admui Team + * Licensed under the Muyao License 1.0 + */ +.btn-select { + height: 32px; + padding: 4px 12px; + font-size: 14px; + line-height: 1.6; + color: #76838f; + background-color: #fff; + background-image: none; + border: 1px solid #e4eaec; + border-radius: 3px; +} +.btn-group.open .btn-select, .btn-select:focus { + border-color: #62a8ea !important; + -webkit-box-shadow: none; + box-shadow: none; +} +select.bs-select-hidden, select.selectpicker { + display: none !important; +} +.bootstrap-select { + z-index:19910501; + width: 220px; +} +.bootstrap-select > .dropdown-toggle { + z-index: 1; + width: 100%; + padding-right: 25px; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, .bootstrap-select > .dropdown-toggle.bs-placeholder:hover, .bootstrap-select > .dropdown-toggle.bs-placeholder:focus, .bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: #a3afb7; +} +.bootstrap-select > select { + position: absolute; + bottom: 0; + left: 50%; + display: block !important; + width: .5px !important; + height: 100% !important; + padding: 0 !important; + border: none; + opacity: 0 !important; +} +.bootstrap-select > select.mobile-device { + position: absolute !important; + top: 0; + left: 0; + z-index: 2; + display: block !important; + width: 100%; + height: 100% !important; + opacity: 0; +} +.bootstrap-select .icon { + width: 1em; + text-align: center; +} +.has-error .bootstrap-select .dropdown-toggle, .error .bootstrap-select .dropdown-toggle { + border-color: #f85974 !important; +} +.has-success .bootstrap-select .dropdown-toggle { + border-color: #3dae6a; +} +.bootstrap-select.fit-width { + width: auto !important; +} +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 220px; +} +.bootstrap-select.form-control { + padding: 0; + margin-bottom: 0; + border: none; +} +.bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.bootstrap-select.form-control.input-group-btn { + z-index: auto; +} +.bootstrap-select.btn-group:not(.input-group-btn), .bootstrap-select.btn-group[class*="col-"] { + display: inline-block; + float: none; + margin-left: 0; +} +.bootstrap-select.btn-group.dropdown-menu-right, .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right, .row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { + float: right; +} +.form-inline .bootstrap-select.btn-group, .form-horizontal .bootstrap-select.btn-group, .form-group .bootstrap-select.btn-group { + margin-bottom: 0; +} +.form-group-lg .bootstrap-select.btn-group.form-control, .form-group-sm .bootstrap-select.btn-group.form-control { + padding: 0; +} +.form-inline .bootstrap-select.btn-group .form-control { + width: 100%; +} +.bootstrap-select.btn-group.disabled, .bootstrap-select.btn-group > .disabled { + cursor: not-allowed; +} +.bootstrap-select.btn-group.disabled:focus, .bootstrap-select.btn-group > .disabled:focus { + outline: none !important; +} +.bootstrap-select.btn-group.bs-container { + position: absolute; +} +.bootstrap-select.btn-group.bs-container .dropdown-menu { + z-index: 1450; +} +.bootstrap-select.btn-group .dropdown-toggle .filter-option { + display: inline-block; + width: 100%; + overflow: hidden; + text-align: left; +} +.bootstrap-select.btn-group .dropdown-toggle .filter-option > .icon { + margin-right: .3em; +} +.bootstrap-select.btn-group .dropdown-toggle .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} +.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle { + width: 100%; +} +.bootstrap-select.btn-group .dropdown-menu { + min-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select.btn-group .dropdown-menu.inner { + position: static; + float: none; + padding: 0; + margin: 0; + border: 0; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-select.btn-group .dropdown-menu li { + position: relative; +} +.bootstrap-select.btn-group .dropdown-menu li.active small { + color: #fff; +} +.bootstrap-select.btn-group .dropdown-menu li.disabled a { + cursor: not-allowed; +} +.bootstrap-select.btn-group .dropdown-menu li a { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bootstrap-select.btn-group .dropdown-menu li a > .icon { + margin-right: .3em; +} +.bootstrap-select.btn-group .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; +} +.bootstrap-select.btn-group .dropdown-menu li a span.check-mark { + display: none; +} +.bootstrap-select.btn-group .dropdown-menu li a span.text { + display: inline-block; +} +.bootstrap-select.btn-group .dropdown-menu li small { + padding-left: .5em; +} +.bootstrap-select.btn-group .dropdown-menu .notify { + position: absolute; + bottom: 6px; + width: 94%; + min-height: 26px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 3px 5px; + margin: 0 3%; + color: #76838f; + pointer-events: none; + background-color: #f3f7f9; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + opacity: .9; +} +.bootstrap-select.btn-group .no-results { + padding: 5px 10px; + margin: 0 8px 3px; + color: #76838f; + white-space: nowrap; + background-color: #f3f7f9; + border-radius: 3px; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option { + position: static; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret { + position: static; + top: auto; + margin-top: -1px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { + position: absolute; + right: 15px; + display: inline-block; + margin-top: 5px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle { + z-index: 1451; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:before { + position: absolute; + bottom: -9px; + left: 9px; + display: none; + content: ""; + border-right: 8px solid transparent; + border-bottom: 8px solid #e4eaec; + border-left: 8px solid transparent; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:after { + position: absolute; + bottom: -9px; + left: 10px; + display: none; + content: ""; + border-right: 7px solid transparent; + border-bottom: 7px solid white; + border-left: 7px solid transparent; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { + top: -8px; + bottom: auto; + border-top: 8px solid #e4eaec; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { + top: -8px; + bottom: auto; + border-top: 7px solid white; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { + right: 13px; + left: auto; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, .bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { + display: block; +} +.bs-searchbox, .bs-actionsbox, .bs-donebutton { + padding: 4px 8px; +} +.bs-actionsbox { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-actionsbox .btn-group button { + width: 50%; +} +.bs-donebutton { + float: left; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-donebutton .btn-group button { + width: 100%; +} +.bs-searchbox + .bs-actionsbox { + padding: 0 8px 4px; +} +.bs-searchbox input.form-control { + float: none; + width: 100%; + margin-bottom: 0; +} \ No newline at end of file diff --git a/public/lib/bootstrap/bootstrap-select/bootstrap-select.js b/public/lib/bootstrap/bootstrap-select/bootstrap-select.js new file mode 100644 index 0000000..45c3e74 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-select/bootstrap-select.js @@ -0,0 +1,1829 @@ +/*! + * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2016 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(jQuery); + } +}(this, function (jQuery) { + +(function ($) { + 'use strict'; + + // + if (!String.prototype.includes) { + (function () { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var toString = {}.toString; + var defineProperty = (function () { + // IE 8 only supports `Object.defineProperty` on DOM elements + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }()); + var indexOf = ''.indexOf; + var includes = function (search) { + if (this == null) { + throw new TypeError(); + } + var string = String(this); + if (search && toString.call(search) == '[object RegExp]') { + throw new TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + // `ToInteger` + var pos = position ? Number(position) : 0; + if (pos != pos) { // better `isNaN` + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + // Avoid the `indexOf` call if no match is possible + if (searchLength + start > stringLength) { + return false; + } + return indexOf.call(string, searchString, pos) != -1; + }; + if (defineProperty) { + defineProperty(String.prototype, 'includes', { + 'value': includes, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.includes = includes; + } + }()); + } + + if (!String.prototype.startsWith) { + (function () { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var defineProperty = (function () { + // IE 8 only supports `Object.defineProperty` on DOM elements + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }()); + var toString = {}.toString; + var startsWith = function (search) { + if (this == null) { + throw new TypeError(); + } + var string = String(this); + if (search && toString.call(search) == '[object RegExp]') { + throw new TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + // `ToInteger` + var pos = position ? Number(position) : 0; + if (pos != pos) { // better `isNaN` + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + // Avoid the `indexOf` call if no match is possible + if (searchLength + start > stringLength) { + return false; + } + var index = -1; + while (++index < searchLength) { + if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { + return false; + } + } + return true; + }; + if (defineProperty) { + defineProperty(String.prototype, 'startsWith', { + 'value': startsWith, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.startsWith = startsWith; + } + }()); + } + + if (!Object.keys) { + Object.keys = function ( + o, // object + k, // key + r // result array + ){ + // initialize object and result + r=[]; + // iterate over object keys + for (k in o) + // fill result array with non-prototypical keys + r.hasOwnProperty.call(o, k) && r.push(k); + // return result + return r; + }; + } + + $.fn.triggerNative = function (eventName) { + var el = this[0], + event; + + if (el.dispatchEvent) { + if (typeof Event === 'function') { + // For modern browsers + event = new Event(eventName, { + bubbles: true + }); + } else { + // For IE since it doesn't support Event constructor + event = document.createEvent('Event'); + event.initEvent(eventName, true, false); + } + + el.dispatchEvent(event); + } else { + if (el.fireEvent) { + event = document.createEventObject(); + event.eventType = eventName; + el.fireEvent('on' + eventName, event); + } + + this.trigger(eventName); + } + }; + // + + // Case insensitive contains search + $.expr[':'].icontains = function (obj, index, meta) { + var $obj = $(obj); + var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase(); + return haystack.includes(meta[3].toUpperCase()); + }; + + // Case insensitive begins search + $.expr[':'].ibegins = function (obj, index, meta) { + var $obj = $(obj); + var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase(); + return haystack.startsWith(meta[3].toUpperCase()); + }; + + // Case and accent insensitive contains search + $.expr[':'].aicontains = function (obj, index, meta) { + var $obj = $(obj); + var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase(); + return haystack.includes(meta[3].toUpperCase()); + }; + + // Case and accent insensitive begins search + $.expr[':'].aibegins = function (obj, index, meta) { + var $obj = $(obj); + var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase(); + return haystack.startsWith(meta[3].toUpperCase()); + }; + + /** + * Remove all diatrics from the given text. + * @access private + * @param {String} text + * @returns {String} + */ + function normalizeToBase(text) { + var rExps = [ + {re: /[\xC0-\xC6]/g, ch: "A"}, + {re: /[\xE0-\xE6]/g, ch: "a"}, + {re: /[\xC8-\xCB]/g, ch: "E"}, + {re: /[\xE8-\xEB]/g, ch: "e"}, + {re: /[\xCC-\xCF]/g, ch: "I"}, + {re: /[\xEC-\xEF]/g, ch: "i"}, + {re: /[\xD2-\xD6]/g, ch: "O"}, + {re: /[\xF2-\xF6]/g, ch: "o"}, + {re: /[\xD9-\xDC]/g, ch: "U"}, + {re: /[\xF9-\xFC]/g, ch: "u"}, + {re: /[\xC7-\xE7]/g, ch: "c"}, + {re: /[\xD1]/g, ch: "N"}, + {re: /[\xF1]/g, ch: "n"} + ]; + $.each(rExps, function () { + text = text.replace(this.re, this.ch); + }); + return text; + } + + + function htmlEscape(html) { + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var source = '(?:' + Object.keys(escapeMap).join('|') + ')', + testRegexp = new RegExp(source), + replaceRegexp = new RegExp(source, 'g'), + string = html == null ? '' : '' + html; + return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) { + return escapeMap[match]; + }) : string; + } + + var Selectpicker = function (element, options, e) { + if (e) { + e.stopPropagation(); + e.preventDefault(); + } + + this.$element = $(element); + this.$newElement = null; + this.$button = null; + this.$menu = null; + this.$lis = null; + this.options = options; + + // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a + // data-attribute) + if (this.options.title === null) { + this.options.title = this.$element.attr('title'); + } + + //Expose public methods + this.val = Selectpicker.prototype.val; + this.render = Selectpicker.prototype.render; + this.refresh = Selectpicker.prototype.refresh; + this.setStyle = Selectpicker.prototype.setStyle; + this.selectAll = Selectpicker.prototype.selectAll; + this.deselectAll = Selectpicker.prototype.deselectAll; + this.destroy = Selectpicker.prototype.destroy; + this.remove = Selectpicker.prototype.remove; + this.show = Selectpicker.prototype.show; + this.hide = Selectpicker.prototype.hide; + + this.init(); + }; + + Selectpicker.VERSION = '1.10.0'; + + // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. + Selectpicker.DEFAULTS = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results matched {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', + (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' + ]; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + doneButton: false, + doneButtonText: 'Close', + multipleSeparator: ', ', + styleBase: 'btn', + style: 'btn-default', + size: 'auto', + title: null, + selectedTextFormat: 'values', + width: false, + container: false, + hideDisabled: false, + showSubtext: false, + showIcon: true, + showContent: true, + dropupAuto: true, + header: false, + liveSearch: false, + liveSearchPlaceholder: null, + liveSearchNormalize: false, + liveSearchStyle: 'contains', + actionsBox: false, + iconBase: 'glyphicon', + tickIcon: 'glyphicon-ok', + showTick: false, + template: { + caret: '' + }, + maxOptions: false, + mobile: false, + selectOnTab: false, + dropdownAlignRight: false + }; + + Selectpicker.prototype = { + + constructor: Selectpicker, + + init: function () { + var that = this, + id = this.$element.attr('id'); + + this.$element.addClass('bs-select-hidden'); + + // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility + // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]') + this.liObj = {}; + this.multiple = this.$element.prop('multiple'); + this.autofocus = this.$element.prop('autofocus'); + this.$newElement = this.createView(); + this.$element + .after(this.$newElement) + .appendTo(this.$newElement); + this.$button = this.$newElement.children('button'); + this.$menu = this.$newElement.children('.dropdown-menu'); + this.$menuInner = this.$menu.children('.inner'); + this.$searchbox = this.$menu.find('input'); + + this.$element.removeClass('bs-select-hidden'); + + if (this.options.dropdownAlignRight === true) this.$menu.addClass('dropdown-menu-right'); + + if (typeof id !== 'undefined') { + this.$button.attr('data-id', id); + $('label[for="' + id + '"]').click(function (e) { + e.preventDefault(); + that.$button.focus(); + }); + } + + this.checkDisabled(); + this.clickListener(); + if (this.options.liveSearch) this.liveSearchListener(); + this.render(); + this.setStyle(); + this.setWidth(); + if (this.options.container) this.selectPosition(); + this.$menu.data('this', this); + this.$newElement.data('this', this); + if (this.options.mobile) this.mobile(); + + this.$newElement.on({ + 'hide.bs.dropdown': function (e) { + that.$element.trigger('hide.bs.select', e); + }, + 'hidden.bs.dropdown': function (e) { + that.$element.trigger('hidden.bs.select', e); + }, + 'show.bs.dropdown': function (e) { + that.$element.trigger('show.bs.select', e); + }, + 'shown.bs.dropdown': function (e) { + that.$element.trigger('shown.bs.select', e); + } + }); + + if (that.$element[0].hasAttribute('required')) { + this.$element.on('invalid', function () { + that.$button + .addClass('bs-invalid') + .focus(); + + that.$element.on({ + 'focus.bs.select': function () { + that.$button.focus(); + that.$element.off('focus.bs.select'); + }, + 'shown.bs.select': function () { + that.$element + .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened + .off('shown.bs.select'); + }, + 'rendered.bs.select': function () { + // if select is no longer invalid, remove the bs-invalid class + if (this.validity.valid) that.$button.removeClass('bs-invalid'); + that.$element.off('rendered.bs.select'); + } + }); + + }); + } + + setTimeout(function () { + that.$element.trigger('loaded.bs.select'); + }); + }, + + createDropdown: function () { + // Options + // If we are multiple or showTick option is set, then add the show-tick class + var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '', + inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '', + autofocus = this.autofocus ? ' autofocus' : ''; + // Elements + var header = this.options.header ? '
' + this.options.header + '
' : ''; + var searchbox = this.options.liveSearch ? + '' + : ''; + var actionsbox = this.multiple && this.options.actionsBox ? + '
' + + '
' + + '' + + '' + + '
' + + '
' + : ''; + var donebutton = this.multiple && this.options.doneButton ? + '
' + + '
' + + '' + + '
' + + '
' + : ''; + var drop = + '
' + + '' + + '' + + '
'; + + return $(drop); + }, + + createView: function () { + var $drop = this.createDropdown(), + li = this.createLi(); + + $drop.find('ul')[0].innerHTML = li; + return $drop; + }, + + reloadLi: function () { + //Remove all children. + this.destroyLi(); + //Re build + var li = this.createLi(); + this.$menuInner[0].innerHTML = li; + }, + + destroyLi: function () { + this.$menu.find('li').remove(); + }, + + createLi: function () { + var that = this, + _li = [], + optID = 0, + titleOption = document.createElement('option'), + liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure liObj is correct + + // Helper functions + /** + * @param content + * @param [index] + * @param [classes] + * @param [optgroup] + * @returns {string} + */ + var generateLI = function (content, index, classes, optgroup) { + return '' + content + '
  • '; + }; + + /** + * @param text + * @param [classes] + * @param [inline] + * @param [tokens] + * @returns {string} + */ + var generateA = function (text, classes, inline, tokens) { + return '' + text + + '' + + ''; + }; + + if (this.options.title && !this.multiple) { + // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased + // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended + liIndex--; + + if (!this.$element.find('.bs-title-option').length) { + // Use native JS to prepend option (faster) + var element = this.$element[0]; + titleOption.className = 'bs-title-option'; + titleOption.appendChild(document.createTextNode(this.options.title)); + titleOption.value = ''; + element.insertBefore(titleOption, element.firstChild); + // Check if selected attribute is already set on an option. If not, select the titleOption option. + // attr gets the 'default' selected option (from markup), prop gets the 'current' selected option + // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs + var $opt = $(element.options[element.selectedIndex]); + if ($opt.attr('selected') === undefined && $opt.prop('selected') === false) { + titleOption.selected = true; + } + } + } + + this.$element.find('option').each(function (index) { + var $this = $(this); + + liIndex++; + + if ($this.hasClass('bs-title-option')) return; + + // Get the class and text for the option + var optionClass = this.className || '', + inline = this.style.cssText, + text = $this.data('content') ? $this.data('content') : $this.html(), + tokens = $this.data('tokens') ? $this.data('tokens') : null, + subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', + icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', + isOptgroup = this.parentNode.tagName === 'OPTGROUP', + isDisabled = this.disabled || (isOptgroup && this.parentNode.disabled); + + if (icon !== '' && isDisabled) { + icon = '' + icon + ''; + } + + if (that.options.hideDisabled && (isDisabled && !isOptgroup || this.parentNode.disabled && isOptgroup)) { + liIndex--; + return; + } + + if (!$this.data('content')) { + // Prepend any icon and append any subtext to the main text. + text = icon + '' + text + subtext + ''; + } + + if (isOptgroup && $this.data('divider') !== true) { + var optGroupClass = ' ' + this.parentNode.className || ''; + + if ($this.index() === 0) { // Is it the first option of the optgroup? + optID += 1; + + // Get the opt group label + var label = this.parentNode.label, + labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '', + labelIcon = $this.parent().data('icon') ? ' ' : ''; + + label = labelIcon + '' + label + labelSubtext + ''; + + if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? + liIndex++; + _li.push(generateLI('', null, 'divider', optID + 'div')); + } + liIndex++; + _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID)); + } + + if (that.options.hideDisabled && isDisabled) { + liIndex--; + return; + } + + _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID)); + } else if ($this.data('divider') === true) { + _li.push(generateLI('', index, 'divider')); + } else if ($this.data('hidden') === true) { + _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden')); + } else { + var showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP'; + + // if previous element is not an optgroup and hideDisabled is true + if (!showDivider && that.options.hideDisabled) { + // get previous elements + var $prev = $(this).prevAll(); + + for (var i = 0; i < $prev.length; i++) { + // find the first element in the previous elements that is an optgroup + if ($prev[i].tagName === 'OPTGROUP') { + var optGroupDistance = 0; + + // loop through the options in between the current option and the optgroup + // and check if they are hidden or disabled + for (var d = 0; d < i; d++) { + var prevOption = $prev[d]; + if (prevOption.disabled || $(prevOption).data('hidden') === true) optGroupDistance++; + } + + // if all of the options between the current option and the optgroup are hidden or disabled, show the divider + if (optGroupDistance === i) showDivider = true; + + break; + } + } + } + + if (showDivider) { + liIndex++; + _li.push(generateLI('', null, 'divider', optID + 'div')); + } + _li.push(generateLI(generateA(text, optionClass, inline, tokens), index)); + } + + that.liObj[index] = liIndex; + }); + + //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button + if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) { + this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected'); + } + + return _li.join(''); + }, + + findLis: function () { + if (this.$lis == null) this.$lis = this.$menu.find('li'); + return this.$lis; + }, + + /** + * @param [updateLi] defaults to true + */ + render: function (updateLi) { + var that = this, + notDisabled; + + //Update the LI to match the SELECT + if (updateLi !== false) { + this.$element.find('option').each(function (index) { + var $lis = that.findLis().eq(that.liObj[index]); + + that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis); + that.setSelected(index, this.selected, $lis); + }); + + this.togglePlaceholder(); + } + + this.tabIndex(); + + var selectedItems = this.$element.find('option').map(function () { + if (this.selected) { + if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return; + + var $this = $(this), + icon = $this.data('icon') && that.options.showIcon ? ' ' : '', + subtext; + + if (that.options.showSubtext && $this.data('subtext') && !that.multiple) { + subtext = ' ' + $this.data('subtext') + ''; + } else { + subtext = ''; + } + if (typeof $this.attr('title') !== 'undefined') { + return $this.attr('title'); + } else if ($this.data('content') && that.options.showContent) { + return $this.data('content'); + } else { + return icon + $this.html() + subtext; + } + } + }).toArray(); + + //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled + //Convert all the values into a comma delimited string + var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator); + + //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc.. + if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) { + var max = this.options.selectedTextFormat.split('>'); + if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { + notDisabled = this.options.hideDisabled ? ', [disabled]' : ''; + var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length, + tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; + title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); + } + } + + if (this.options.title == undefined) { + this.options.title = this.$element.attr('title'); + } + + if (this.options.selectedTextFormat == 'static') { + title = this.options.title; + } + + //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text + if (!title) { + title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; + } + + //strip all html-tags and trim the result + this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, ''))); + this.$button.children('.filter-option').html(title); + + this.$element.trigger('rendered.bs.select'); + }, + + /** + * @param [style] + * @param [status] + */ + setStyle: function (style, status) { + if (this.$element.attr('class')) { + this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); + } + + var buttonClass = style ? style : this.options.style; + + if (status == 'add') { + this.$button.addClass(buttonClass); + } else if (status == 'remove') { + this.$button.removeClass(buttonClass); + } else { + this.$button.removeClass(this.options.style); + this.$button.addClass(buttonClass); + } + }, + + liHeight: function (refresh) { + if (!refresh && (this.options.size === false || this.sizeInfo)) return; + + var newElement = document.createElement('div'), + menu = document.createElement('div'), + menuInner = document.createElement('ul'), + divider = document.createElement('li'), + li = document.createElement('li'), + a = document.createElement('a'), + text = document.createElement('span'), + header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null, + search = this.options.liveSearch ? document.createElement('div') : null, + actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, + doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null; + + text.className = 'text'; + newElement.className = this.$menu[0].parentNode.className + ' open'; + menu.className = 'dropdown-menu open'; + menuInner.className = 'dropdown-menu inner'; + divider.className = 'divider'; + + text.appendChild(document.createTextNode('Inner text')); + a.appendChild(text); + li.appendChild(a); + menuInner.appendChild(li); + menuInner.appendChild(divider); + if (header) menu.appendChild(header); + if (search) { + // create a span instead of input as creating an input element is slower + var input = document.createElement('span'); + search.className = 'bs-searchbox'; + input.className = 'form-control'; + search.appendChild(input); + menu.appendChild(search); + } + if (actions) menu.appendChild(actions); + menu.appendChild(menuInner); + if (doneButton) menu.appendChild(doneButton); + newElement.appendChild(menu); + + document.body.appendChild(newElement); + + var liHeight = a.offsetHeight, + headerHeight = header ? header.offsetHeight : 0, + searchHeight = search ? search.offsetHeight : 0, + actionsHeight = actions ? actions.offsetHeight : 0, + doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, + dividerHeight = $(divider).outerHeight(true), + // fall back to jQuery if getComputedStyle is not supported + menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false, + $menu = menuStyle ? null : $(menu), + menuPadding = { + vert: parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + + parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + + parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + + parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), + horiz: parseInt(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + + parseInt(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + + parseInt(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + + parseInt(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth')) + }, + menuExtras = { + vert: menuPadding.vert + + parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + + parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2, + horiz: menuPadding.horiz + + parseInt(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + + parseInt(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2 + } + + document.body.removeChild(newElement); + + this.sizeInfo = { + liHeight: liHeight, + headerHeight: headerHeight, + searchHeight: searchHeight, + actionsHeight: actionsHeight, + doneButtonHeight: doneButtonHeight, + dividerHeight: dividerHeight, + menuPadding: menuPadding, + menuExtras: menuExtras + }; + }, + + setSize: function () { + this.findLis(); + this.liHeight(); + + if (this.options.header) this.$menu.css('padding-top', 0); + if (this.options.size === false) return; + + var that = this, + $menu = this.$menu, + $menuInner = this.$menuInner, + $window = $(window), + selectHeight = this.$newElement[0].offsetHeight, + selectWidth = this.$newElement[0].offsetWidth, + liHeight = this.sizeInfo['liHeight'], + headerHeight = this.sizeInfo['headerHeight'], + searchHeight = this.sizeInfo['searchHeight'], + actionsHeight = this.sizeInfo['actionsHeight'], + doneButtonHeight = this.sizeInfo['doneButtonHeight'], + divHeight = this.sizeInfo['dividerHeight'], + menuPadding = this.sizeInfo['menuPadding'], + menuExtras = this.sizeInfo['menuExtras'], + notDisabled = this.options.hideDisabled ? '.disabled' : '', + menuHeight, + menuWidth, + getHeight, + getWidth, + selectOffsetTop, + selectOffsetBot, + selectOffsetLeft, + selectOffsetRight, + getPos = function() { + var pos = that.$newElement.offset(); + selectOffsetTop = pos.top - $window.scrollTop(); + selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; + selectOffsetLeft = pos.left - $window.scrollLeft(); + selectOffsetRight = $window.width() - selectOffsetLeft - selectWidth; + }; + + getPos(); + + if (this.options.size === 'auto') { + var getSize = function () { + var minHeight, + hasClass = function (className, include) { + return function (element) { + if (include) { + return (element.classList ? element.classList.contains(className) : $(element).hasClass(className)); + } else { + return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className)); + } + }; + }, + lis = that.$menuInner[0].getElementsByTagName('li'), + lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'), + optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header'); + + getPos(); + menuHeight = selectOffsetBot - menuExtras.vert; + menuWidth = selectOffsetRight - menuExtras.horiz; + + if (that.options.container) { + if (!$menu.data('height')) $menu.data('height', $menu.height()); + getHeight = $menu.data('height'); + + if (!$menu.data('width')) $menu.data('width', $menu.width()); + getWidth = $menu.data('width'); + } else { + getHeight = $menu.height(); + getWidth = $menu.width(); + } + + if (that.options.dropupAuto) { + that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight); + } + + if (that.$newElement.hasClass('dropup')) { + menuHeight = selectOffsetTop - menuExtras.vert; + } + + if (that.options.dropdownAlignRight === 'auto') { + $menu.toggleClass('dropdown-menu-right', selectOffsetLeft > selectOffsetRight && (menuWidth - menuExtras.horiz) < (getWidth - selectWidth)); + } + + if ((lisVisible.length + optGroup.length) > 3) { + minHeight = liHeight * 3 + menuExtras.vert - 2; + } else { + minHeight = 0; + } + + $menu.css({ + 'max-height': menuHeight + 'px', + 'overflow': 'hidden', + 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px' + }); + $menuInner.css({ + 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert + 'px', + 'overflow-y': 'auto', + 'min-height': Math.max(minHeight - menuPadding.vert, 0) + 'px' + }); + }; + getSize(); + this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize); + $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize); + } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) { + var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(), + divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; + menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert; + + if (that.options.container) { + if (!$menu.data('height')) $menu.data('height', $menu.height()); + getHeight = $menu.data('height'); + } else { + getHeight = $menu.height(); + } + + if (that.options.dropupAuto) { + //noinspection JSUnusedAssignment + this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight); + } + $menu.css({ + 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px', + 'overflow': 'hidden', + 'min-height': '' + }); + $menuInner.css({ + 'max-height': menuHeight - menuPadding.vert + 'px', + 'overflow-y': 'auto', + 'min-height': '' + }); + } + }, + + setWidth: function () { + if (this.options.width === 'auto') { + this.$menu.css('min-width', '0'); + + // Get correct width if element is hidden + var $selectClone = this.$menu.parent().clone().appendTo('body'), + $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone, + ulWidth = $selectClone.children('.dropdown-menu').outerWidth(), + btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth(); + + $selectClone.remove(); + $selectClone2.remove(); + + // Set width to whatever's larger, button title or longest option + this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px'); + } else if (this.options.width === 'fit') { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', '').addClass('fit-width'); + } else if (this.options.width) { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', this.options.width); + } else { + // Remove inline min-width/width so width can be changed + this.$menu.css('min-width', ''); + this.$newElement.css('width', ''); + } + // Remove fit-width class if width is changed programmatically + if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { + this.$newElement.removeClass('fit-width'); + } + }, + + selectPosition: function () { + this.$bsContainer = $('
    '); + + var that = this, + pos, + actualHeight, + getPlacement = function ($element) { + that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup')); + pos = $element.offset(); + actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight; + that.$bsContainer.css({ + 'top': pos.top + actualHeight, + 'left': pos.left, + 'width': $element[0].offsetWidth + }); + }; + + this.$button.on('click', function () { + var $this = $(this); + + if (that.isDisabled()) { + return; + } + + getPlacement(that.$newElement); + + that.$bsContainer + .appendTo(that.options.container) + .toggleClass('open', !$this.hasClass('open')) + .append(that.$menu); + }); + + $(window).on('resize scroll', function () { + getPlacement(that.$newElement); + }); + + this.$element.on('hide.bs.select', function () { + that.$menu.data('height', that.$menu.height()); + that.$bsContainer.detach(); + }); + }, + + /** + * @param {number} index - the index of the option that is being changed + * @param {boolean} selected - true if the option is being selected, false if being deselected + * @param {JQuery} $lis - the 'li' element that is being modified + */ + setSelected: function (index, selected, $lis) { + if (!$lis) { + this.togglePlaceholder(); // check if setSelected is being called by changing the value of the select + $lis = this.findLis().eq(this.liObj[index]); + } + + $lis.toggleClass('selected', selected); + }, + + /** + * @param {number} index - the index of the option that is being disabled + * @param {boolean} disabled - true if the option is being disabled, false if being enabled + * @param {JQuery} $lis - the 'li' element that is being modified + */ + setDisabled: function (index, disabled, $lis) { + if (!$lis) { + $lis = this.findLis().eq(this.liObj[index]); + } + + if (disabled) { + $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1); + } else { + $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0); + } + }, + + isDisabled: function () { + return this.$element[0].disabled; + }, + + checkDisabled: function () { + var that = this; + + if (this.isDisabled()) { + this.$newElement.addClass('disabled'); + this.$button.addClass('disabled').attr('tabindex', -1); + } else { + if (this.$button.hasClass('disabled')) { + this.$newElement.removeClass('disabled'); + this.$button.removeClass('disabled'); + } + + if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { + this.$button.removeAttr('tabindex'); + } + } + + this.$button.click(function () { + return !that.isDisabled(); + }); + }, + + togglePlaceholder: function () { + var value = this.$element.val(); + this.$button.toggleClass('bs-placeholder', value === null || value === ''); + }, + + tabIndex: function () { + if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && + (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) { + this.$element.data('tabindex', this.$element.attr('tabindex')); + this.$button.attr('tabindex', this.$element.data('tabindex')); + } + + this.$element.attr('tabindex', -98); + }, + + clickListener: function () { + var that = this, + $document = $(document); + + this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) { + e.stopPropagation(); + }); + + $document.data('spaceSelect', false); + + this.$button.on('keyup', function (e) { + if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { + e.preventDefault(); + $document.data('spaceSelect', false); + } + }); + + this.$button.on('click', function () { + that.setSize(); + }); + + this.$element.on('shown.bs.select', function () { + if (!that.options.liveSearch && !that.multiple) { + that.$menuInner.find('.selected a').focus(); + } else if (!that.multiple) { + var selectedIndex = that.liObj[that.$element[0].selectedIndex]; + + if (typeof selectedIndex !== 'number' || that.options.size === false) return; + + // scroll to selected option + var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop; + offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2; + that.$menuInner[0].scrollTop = offset; + } + }); + + this.$menuInner.on('click', 'li a', function (e) { + var $this = $(this), + clickedIndex = $this.parent().data('originalIndex'), + prevValue = that.$element.val(), + prevIndex = that.$element.prop('selectedIndex'), + triggerChange = true; + + // Don't close on multi choice menu + if (that.multiple && that.options.maxOptions !== 1) { + e.stopPropagation(); + } + + e.preventDefault(); + + //Don't run if we have been disabled + if (!that.isDisabled() && !$this.parent().hasClass('disabled')) { + var $options = that.$element.find('option'), + $option = $options.eq(clickedIndex), + state = $option.prop('selected'), + $optgroup = $option.parent('optgroup'), + maxOptions = that.options.maxOptions, + maxOptionsGrp = $optgroup.data('maxOptions') || false; + + if (!that.multiple) { // Deselect all others if not multi select box + $options.prop('selected', false); + $option.prop('selected', true); + that.$menuInner.find('.selected').removeClass('selected'); + that.setSelected(clickedIndex, true); + } else { // Toggle the one we have chosen if we are multi select. + $option.prop('selected', !state); + that.setSelected(clickedIndex, !state); + $this.blur(); + + if (maxOptions !== false || maxOptionsGrp !== false) { + var maxReached = maxOptions < $options.filter(':selected').length, + maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; + + if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { + if (maxOptions && maxOptions == 1) { + $options.prop('selected', false); + $option.prop('selected', true); + that.$menuInner.find('.selected').removeClass('selected'); + that.setSelected(clickedIndex, true); + } else if (maxOptionsGrp && maxOptionsGrp == 1) { + $optgroup.find('option:selected').prop('selected', false); + $option.prop('selected', true); + var optgroupID = $this.parent().data('optgroup'); + that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected'); + that.setSelected(clickedIndex, true); + } else { + var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText, + maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText, + maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), + maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), + $notify = $('
    '); + // If {var} is set in array, replace it + /** @deprecated */ + if (maxOptionsArr[2]) { + maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); + maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); + } + + $option.prop('selected', false); + + that.$menu.append($notify); + + if (maxOptions && maxReached) { + $notify.append($('
    ' + maxTxt + '
    ')); + triggerChange = false; + that.$element.trigger('maxReached.bs.select'); + } + + if (maxOptionsGrp && maxReachedGrp) { + $notify.append($('
    ' + maxTxtGrp + '
    ')); + triggerChange = false; + that.$element.trigger('maxReachedGrp.bs.select'); + } + + setTimeout(function () { + that.setSelected(clickedIndex, false); + }, 10); + + $notify.delay(750).fadeOut(300, function () { + $(this).remove(); + }); + } + } + } + } + + if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) { + that.$button.focus(); + } else if (that.options.liveSearch) { + that.$searchbox.focus(); + } + + // Trigger select 'change' + if (triggerChange) { + if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { + // $option.prop('selected') is current option state (selected/unselected). state is previous option state. + that.$element + .trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]) + .triggerNative('change'); + } + } + } + }); + + this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { + if (e.currentTarget == this) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch && !$(e.target).hasClass('close')) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + } + }); + + this.$menuInner.on('click', '.divider, .dropdown-header', function (e) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + }); + + this.$menu.on('click', '.popover-title .close', function () { + that.$button.click(); + }); + + this.$searchbox.on('click', function (e) { + e.stopPropagation(); + }); + + this.$menu.on('click', '.actions-btn', function (e) { + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + + e.preventDefault(); + e.stopPropagation(); + + if ($(this).hasClass('bs-select-all')) { + that.selectAll(); + } else { + that.deselectAll(); + } + }); + + this.$element.change(function () { + that.render(false); + }); + }, + + liveSearchListener: function () { + var that = this, + $no_results = $('
  • '); + + this.$button.on('click.dropdown.data-api touchstart.dropdown.data-api', function () { + that.$menuInner.find('.active').removeClass('active'); + if (!!that.$searchbox.val()) { + that.$searchbox.val(''); + that.$lis.not('.is-hidden').removeClass('hidden'); + if (!!$no_results.parent().length) $no_results.remove(); + } + if (!that.multiple) that.$menuInner.find('.selected').addClass('active'); + setTimeout(function () { + that.$searchbox.focus(); + }, 10); + }); + + this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) { + e.stopPropagation(); + }); + + this.$searchbox.on('input propertychange', function () { + if (that.$searchbox.val()) { + var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a'); + if (that.options.liveSearchNormalize) { + $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")'); + } else { + $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")'); + } + $searchBase.parent().addClass('hidden'); + + that.$lis.filter('.dropdown-header').each(function () { + var $this = $(this), + optgroup = $this.data('optgroup'); + + if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) { + $this.addClass('hidden'); + that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden'); + } + }); + + var $lisVisible = that.$lis.not('.hidden'); + + // hide divider if first or last visible, or if followed by another divider + $lisVisible.each(function (index) { + var $this = $(this); + + if ($this.hasClass('divider') && ( + $this.index() === $lisVisible.first().index() || + $this.index() === $lisVisible.last().index() || + $lisVisible.eq(index + 1).hasClass('divider'))) { + $this.addClass('hidden'); + } + }); + + if (!that.$lis.not('.hidden, .no-results').length) { + if (!!$no_results.parent().length) { + $no_results.remove(); + } + $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show(); + that.$menuInner.append($no_results); + } else if (!!$no_results.parent().length) { + $no_results.remove(); + } + } else { + that.$lis.not('.is-hidden').removeClass('hidden'); + if (!!$no_results.parent().length) { + $no_results.remove(); + } + } + + that.$lis.filter('.active').removeClass('active'); + if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus(); + $(this).focus(); + }); + }, + + _searchStyle: function () { + var styles = { + begins: 'ibegins', + startsWith: 'ibegins' + }; + + return styles[this.options.liveSearchStyle] || 'icontains'; + }, + + val: function (value) { + if (typeof value !== 'undefined') { + this.$element.val(value); + this.render(); + + return this.$element; + } else { + return this.$element.val(); + } + }, + + changeAll: function (status) { + if (typeof status === 'undefined') status = true; + + this.findLis(); + + var $options = this.$element.find('option'), + $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden'), + lisVisLen = $lisVisible.length, + selectedOptions = []; + + if (status) { + if ($lisVisible.filter('.selected').length === $lisVisible.length) return; + } else { + if ($lisVisible.filter('.selected').length === 0) return; + } + + $lisVisible.toggleClass('selected', status); + + for (var i = 0; i < lisVisLen; i++) { + var origIndex = $lisVisible[i].getAttribute('data-original-index'); + selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0]; + } + + $(selectedOptions).prop('selected', status); + + this.render(false); + + this.togglePlaceholder(); + + this.$element + .trigger('changed.bs.select') + .triggerNative('change'); + }, + + selectAll: function () { + return this.changeAll(true); + }, + + deselectAll: function () { + return this.changeAll(false); + }, + + toggle: function (e) { + e = e || window.event; + + if (e) e.stopPropagation(); + + this.$button.trigger('click'); + }, + + keydown: function (e) { + var $this = $(this), + $parent = $this.is('input') ? $this.parent().parent() : $this.parent(), + $items, + that = $parent.data('this'), + index, + next, + first, + last, + prev, + nextPrev, + prevIndex, + isActive, + selector = ':not(.disabled, .hidden, .dropdown-header, .divider)', + keyCodeMap = { + 32: ' ', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 59: ';', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9' + }; + + if (that.options.liveSearch) $parent = $this.parent().parent(); + + if (that.options.container) $parent = that.$menu; + + $items = $('[role=menu] li', $parent); + + isActive = that.$newElement.hasClass('open'); + + if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) { + if (!that.options.container) { + that.setSize(); + that.$menu.parent().addClass('open'); + isActive = true; + } else { + that.$button.trigger('click'); + } + that.$searchbox.focus(); + return; + } + + if (that.options.liveSearch) { + if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) { + e.preventDefault(); + that.$menu.parent().removeClass('open'); + if (that.options.container) that.$newElement.removeClass('open'); + that.$button.focus(); + } + // $items contains li elements when liveSearch is enabled + $items = $('[role=menu] li' + selector, $parent); + if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) { + if ($items.filter('.active').length === 0) { + $items = that.$menuInner.find('li'); + if (that.options.liveSearchNormalize) { + $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')'); + } else { + $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')'); + } + } + } + } + + if (!$items.length) return; + + if (/(38|40)/.test(e.keyCode.toString(10))) { + index = $items.index($items.find('a').filter(':focus').parent()); + first = $items.filter(selector).first().index(); + last = $items.filter(selector).last().index(); + next = $items.eq(index).nextAll(selector).eq(0).index(); + prev = $items.eq(index).prevAll(selector).eq(0).index(); + nextPrev = $items.eq(next).prevAll(selector).eq(0).index(); + + if (that.options.liveSearch) { + $items.each(function (i) { + if (!$(this).hasClass('disabled')) { + $(this).data('index', i); + } + }); + index = $items.index($items.filter('.active')); + first = $items.first().data('index'); + last = $items.last().data('index'); + next = $items.eq(index).nextAll().eq(0).data('index'); + prev = $items.eq(index).prevAll().eq(0).data('index'); + nextPrev = $items.eq(next).prevAll().eq(0).data('index'); + } + + prevIndex = $this.data('prevIndex'); + + if (e.keyCode == 38) { + if (that.options.liveSearch) index--; + if (index != nextPrev && index > prev) index = prev; + if (index < first) index = first; + if (index == prevIndex) index = last; + } else if (e.keyCode == 40) { + if (that.options.liveSearch) index++; + if (index == -1) index = 0; + if (index != nextPrev && index < next) index = next; + if (index > last) index = last; + if (index == prevIndex) index = first; + } + + $this.data('prevIndex', index); + + if (!that.options.liveSearch) { + $items.eq(index).children('a').focus(); + } else { + e.preventDefault(); + if (!$this.hasClass('dropdown-toggle')) { + $items.removeClass('active').eq(index).addClass('active').children('a').focus(); + $this.focus(); + } + } + + } else if (!$this.is('input')) { + var keyIndex = [], + count, + prevKey; + + $items.each(function () { + if (!$(this).hasClass('disabled')) { + if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) { + keyIndex.push($(this).index()); + } + } + }); + + count = $(document).data('keycount'); + count++; + $(document).data('keycount', count); + + prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1); + + if (prevKey != keyCodeMap[e.keyCode]) { + count = 1; + $(document).data('keycount', count); + } else if (count >= keyIndex.length) { + $(document).data('keycount', 0); + if (count > keyIndex.length) count = 1; + } + + $items.eq(keyIndex[count - 1]).children('a').focus(); + } + + // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. + if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) { + if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault(); + if (!that.options.liveSearch) { + var elem = $(':focus'); + elem.click(); + // Bring back focus for multiselects + elem.focus(); + // Prevent screen from scrolling if the user hit the spacebar + e.preventDefault(); + // Fixes spacebar selection of dropdown items in FF & IE + $(document).data('spaceSelect', true); + } else if (!/(32)/.test(e.keyCode.toString(10))) { + that.$menuInner.find('.active a').click(); + $this.focus(); + } + $(document).data('keycount', 0); + } + + if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) { + that.$menu.parent().removeClass('open'); + if (that.options.container) that.$newElement.removeClass('open'); + that.$button.focus(); + } + }, + + mobile: function () { + this.$element.addClass('mobile-device'); + }, + + refresh: function () { + this.$lis = null; + this.liObj = {}; + this.reloadLi(); + this.render(); + this.checkDisabled(); + this.liHeight(true); + this.setStyle(); + this.setWidth(); + if (this.$lis) this.$searchbox.trigger('propertychange'); + + this.$element.trigger('refreshed.bs.select'); + }, + + hide: function () { + this.$newElement.hide(); + }, + + show: function () { + this.$newElement.show(); + }, + + remove: function () { + this.$newElement.remove(); + this.$element.remove(); + }, + + destroy: function () { + this.$newElement.before(this.$element).remove(); + + if (this.$bsContainer) { + this.$bsContainer.remove(); + } else { + this.$menu.remove(); + } + + this.$element + .off('.bs.select') + .removeData('selectpicker') + .removeClass('bs-select-hidden selectpicker'); + } + }; + + // SELECTPICKER PLUGIN DEFINITION + // ============================== + function Plugin(option, event) { + // get the args of the outer function.. + var args = arguments; + // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them + // to get lost/corrupted in android 2.3 and IE9 #715 #775 + var _option = option, + _event = event; + [].shift.apply(args); + + var value; + var chain = this.each(function () { + var $this = $(this); + if ($this.is('select')) { + var data = $this.data('selectpicker'), + options = typeof _option == 'object' && _option; + + if (!data) { + var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); + config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template); + $this.data('selectpicker', (data = new Selectpicker(this, config, _event))); + } else if (options) { + for (var i in options) { + if (options.hasOwnProperty(i)) { + data.options[i] = options[i]; + } + } + } + + if (typeof _option == 'string') { + if (data[_option] instanceof Function) { + value = data[_option].apply(data, args); + } else { + value = data.options[_option]; + } + } + } + }); + + if (typeof value !== 'undefined') { + //noinspection JSUnusedAssignment + return value; + } else { + return chain; + } + } + + var old = $.fn.selectpicker; + $.fn.selectpicker = Plugin; + $.fn.selectpicker.Constructor = Selectpicker; + + // SELECTPICKER NO CONFLICT + // ======================== + $.fn.selectpicker.noConflict = function () { + $.fn.selectpicker = old; + return this; + }; + + $(document) + .data('keycount', 0) + .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown) + .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) { + e.stopPropagation(); + }); + + // SELECTPICKER DATA-API + // ===================== + $(window).on('load.bs.select.data-api', function () { + $('.selectpicker').each(function () { + var $selectpicker = $(this); + Plugin.call($selectpicker, $selectpicker.data()); + }) + }); +})(jQuery); + + +})); diff --git a/public/lib/bootstrap/bootstrap-select/bootstrap-select.min.js b/public/lib/bootstrap/bootstrap-select/bootstrap-select.min.js new file mode 100644 index 0000000..eb068d4 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-select/bootstrap-select.min.js @@ -0,0 +1,9 @@ +/*! + * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2016 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select")){var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);k.template=a.extend({},e.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,i.template),b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return g+j>e?!1:-1!=c.call(d,f,i)};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1},e.prototype={constructor:e,init:function(){var b=this,c=this.$element.attr("id");this.$element.addClass("bs-select-hidden"),this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement).appendTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$element.removeClass("bs-select-hidden"),this.options.dropdownAlignRight===!0&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),b.$element[0].hasAttribute("required")&&this.$element.on("invalid",function(){b.$button.addClass("bs-invalid").focus(),b.$element.on({"focus.bs.select":function(){b.$button.focus(),b.$element.off("focus.bs.select")},"shown.bs.select":function(){b.$element.val(b.$element.val()).off("shown.bs.select")},"rendered.bs.select":function(){this.validity.valid&&b.$button.removeClass("bs-invalid"),b.$element.off("rendered.bs.select")}})}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=this.multiple||this.options.showTick?" show-tick":"",d=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.options.header?'
    '+this.options.header+"
    ":"",g=this.options.liveSearch?'":"",h=this.multiple&&this.options.actionsBox?'
    ":"",i=this.multiple&&this.options.doneButton?'
    ":"",j='
    ";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return""+a+""},j=function(a,e,f,g){return'"+a+''};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild);var l=a(k.options[k.selectedIndex]);void 0===l.attr("selected")&&l.prop("selected")===!1&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subtext")?''+c.data("subtext")+"":"",o="undefined"!=typeof c.data("icon")?' ':"",p="OPTGROUP"===this.parentNode.tagName,q=this.disabled||p&&this.parentNode.disabled;if(""!==o&&q&&(o=""+o+""),d.options.hideDisabled&&(q&&!p||this.parentNode.disabled&&p))return void h--;if(c.data("content")||(l=o+''+l+n+""),p&&c.data("divider")!==!0){var r=" "+this.parentNode.className||"";if(0===c.index()){f+=1;var s=this.parentNode.label,t="undefined"!=typeof c.parent().data("subtext")?''+c.parent().data("subtext")+"":"",u=c.parent().data("icon")?' ':"";s=u+''+s+t+"",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(s,null,"dropdown-header"+r,f))}if(d.options.hideDisabled&&q)return void h--;e.push(i(j(l,"opt "+g+r,k,m),b,"",f))}else if(c.data("divider")===!0)e.push(i("",b,"divider"));else if(c.data("hidden")===!0)e.push(i(j(l,g,k,m),b,"hidden is-hidden"));else{var v=this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName;if(!v&&d.options.hideDisabled)for(var w=a(this).prevAll(),x=0;xz;z++){var A=w[z];(A.disabled||a(A).data("hidden")===!0)&&y++}y===x&&(v=!0);break}v&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b))}d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&(this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.togglePlaceholder()),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?' ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' '+c.data("subtext")+"":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header&&this.$menu.find(".popover-title").length>0?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple&&this.$menu.find(".bs-actionsbox").length>0?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple&&this.$menu.find(".bs-donebutton").length>0?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("span");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle?getComputedStyle(d):!1,v=u?null:a(d),w={vert:parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),horiz:parseInt(u?u.paddingLeft:v.css("paddingLeft"))+parseInt(u?u.paddingRight:v.css("paddingRight"))+parseInt(u?u.borderLeftWidth:v.css("borderLeftWidth"))+parseInt(u?u.borderRightWidth:v.css("borderRightWidth"))},x={vert:w.vert+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2,horiz:w.horiz+parseInt(u?u.marginLeft:v.css("marginLeft"))+parseInt(u?u.marginRight:v.css("marginRight"))+2};document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f,g,h,i,j=this,k=this.$menu,l=this.$menuInner,m=a(window),n=this.$newElement[0].offsetHeight,o=this.$newElement[0].offsetWidth,p=this.sizeInfo.liHeight,q=this.sizeInfo.headerHeight,r=this.sizeInfo.searchHeight,s=this.sizeInfo.actionsHeight,t=this.sizeInfo.doneButtonHeight,u=this.sizeInfo.dividerHeight,v=this.sizeInfo.menuPadding,w=this.sizeInfo.menuExtras,x=this.options.hideDisabled?".disabled":"",y=function(){var a=j.$newElement.offset();f=a.top-m.scrollTop(),g=m.height()-f-n,h=a.left-m.scrollLeft(),i=m.width()-h-o};if(y(),"auto"===this.options.size){var z=function(){var m,n=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},u=j.$menuInner[0].getElementsByTagName("li"),x=Array.prototype.filter?Array.prototype.filter.call(u,n("hidden",!1)):j.$lis.not(".hidden"),z=Array.prototype.filter?Array.prototype.filter.call(x,n("dropdown-header",!0)):x.filter(".dropdown-header");y(),b=g-w.vert,c=i-w.horiz,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height"),k.data("width")||k.data("width",k.width()),e=k.data("width")):(d=k.height(),e=k.width()),j.options.dropupAuto&&j.$newElement.toggleClass("dropup",f>g&&b-w.verti&&c-w.horiz3?3*p+w.vert-2:0,k.css({"max-height":b+"px",overflow:"hidden","min-height":m+q+r+s+t+"px"}),l.css({"max-height":b-q-r-s-t-v.vert+"px","overflow-y":"auto","min-height":Math.max(m-v.vert,0)+"px"})};z(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",z),m.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",z)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(x).length>this.options.size){var A=this.$lis.not(".divider").not(x).children().slice(0,this.options.size).last().parent().index(),B=this.$lis.slice(0,A+1).filter(".divider").length;b=p*this.options.size+B*u+v.vert,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height")):d=k.height(),j.options.dropupAuto&&this.$newElement.toggleClass("dropup",f>g&&b-w.vert');var b,c,d=this,e=function(a){d.$bsContainer.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,d.$bsContainer.css({top:b.top+c,left:b.left,width:a[0].offsetWidth})};this.$button.on("click",function(){var b=a(this);d.isDisabled()||(e(d.$newElement),d.$bsContainer.appendTo(d.options.container).toggleClass("open",!b.hasClass("open")).append(d.$menu))}),a(window).on("resize scroll",function(){e(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),d.$bsContainer.detach()})},setSelected:function(a,b,c){c||(this.togglePlaceholder(),c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},togglePlaceholder:function(){var a=this.$element.val();this.$button.toggleClass("bs-placeholder",null===a||""===a)},tabIndex:function(){this.$element.data("tabindex")!==this.$element.attr("tabindex")&&-98!==this.$element.attr("tabindex")&&"-98"!==this.$element.attr("tabindex")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex"))),this.$element.attr("tabindex",-98)},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$button.on("click",function(){b.setSize()}),this.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()}),this.$menuInner.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex"),h=!0;if(b.multiple&&1!==b.options.maxOptions&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var i=b.$element.find("option"),j=i.eq(e),k=j.prop("selected"),l=j.parent("optgroup"),m=b.options.maxOptions,n=l.data("maxOptions")||!1;if(b.multiple){if(j.prop("selected",!k),b.setSelected(e,!k),d.blur(),m!==!1||n!==!1){var o=m');s[2]&&(t=t.replace("{var}",s[2][m>1?0:1]),u=u.replace("{var}",s[2][n>1?0:1])),j.prop("selected",!1),b.$menu.append(v),m&&o&&(v.append(a("
    "+t+"
    ")),h=!1,b.$element.trigger("maxReached.bs.select")),n&&p&&(v.append(a("
    "+u+"
    ")),h=!1,b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),v.delay(750).fadeOut(300,function(){a(this).remove()})}}}else i.prop("selected",!1),j.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);!b.multiple||b.multiple&&1===b.options.maxOptions?b.$button.focus():b.options.liveSearch&&b.$searchbox.focus(),h&&(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&b.$element.trigger("changed.bs.select",[e,j.prop("selected"),k]).triggerNative("change")}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var d=this,e=a('
  • ');this.$button.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup="+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.first().index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},changeAll:function(b){"undefined"==typeof b&&(b=!0),this.findLis();var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden"),e=d.length,f=[];if(b){if(d.filter(".selected").length===d.length)return}else if(0===d.filter(".selected").length)return;d.toggleClass("selected",b);for(var g=0;e>g;g++){var h=d[g].getAttribute("data-original-index");f[f.length]=c.eq(h)[0]}a(f).prop("selected",b),this.render(!1),this.togglePlaceholder(),this.$element.trigger("changed.bs.select").triggerNative("change")},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},toggle:function(a){a=a||window.event,a&&a.stopPropagation(),this.$button.trigger("click")},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li",n),l=o.$newElement.hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=96&&c.keyCode<=105||c.keyCode>=65&&c.keyCode<=90))return o.options.container?o.$button.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),void o.$searchbox.focus();if(o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li"+p,n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$menuInner.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.find("a").filter(":focus").parent()),g=d.filter(p).first().index(),h=d.filter(p).last().index(),f=d.eq(e).nextAll(p).eq(0).index(),i=d.eq(e).prevAll(p).eq(0).index(),j=d.eq(f).prevAll(p).eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&e--,e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&e++,-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).children("a").focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).hasClass("disabled")||a.trim(a(this).children("a").text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).children("a").focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menuInner.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device")},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(), +this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(".bs.select").removeData("selectpicker").removeClass("bs-select-hidden selectpicker")}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown.bs.select",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(a)}); +//# sourceMappingURL=bootstrap-select.js.map \ No newline at end of file diff --git a/public/lib/bootstrap/bootstrap-table/README.md b/public/lib/bootstrap/bootstrap-table/README.md new file mode 100644 index 0000000..48d64c0 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/README.md @@ -0,0 +1,4 @@ +#bootstrap-table + +API文档:https://bootstrap-table.com/docs/api/table-options/ + \ No newline at end of file diff --git a/public/lib/bootstrap/bootstrap-table/bootstrap-table.css b/public/lib/bootstrap/bootstrap-table/bootstrap-table.css new file mode 100644 index 0000000..601612a --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/bootstrap-table.css @@ -0,0 +1,319 @@ +/** + * @author zhixin wen + * version: 1.12.1 + * https://github.com/wenzhixin/bootstrap-table/ + */ + +.bootstrap-table .table { + margin-bottom: 0 !important; + border-bottom: 1px solid #dddddd; + border-collapse: collapse !important; + border-radius: 1px; +} + +.bootstrap-table .table:not(.table-condensed), +.bootstrap-table .table:not(.table-condensed) > tbody > tr > th, +.bootstrap-table .table:not(.table-condensed) > tfoot > tr > th, +.bootstrap-table .table:not(.table-condensed) > thead > tr > td, +.bootstrap-table .table:not(.table-condensed) > tbody > tr > td, +.bootstrap-table .table:not(.table-condensed) > tfoot > tr > td { + padding: 8px; + word-break: break-word; +} + +.bootstrap-table .table.table-no-bordered > thead > tr > th, +.bootstrap-table .table.table-no-bordered > tbody > tr > td { + border-right: 2px solid transparent; +} + +.bootstrap-table .table.table-no-bordered > tbody > tr > td:last-child { + border-right: none; +} + +.fixed-table-container { + position: relative; + clear: both; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.fixed-table-container.table-no-bordered { + border: 1px solid transparent; +} + +.fixed-table-footer, +.fixed-table-header { + overflow: hidden; +} + +.fixed-table-footer { + border-top: 1px solid #dddddd; +} + +.fixed-table-body { + overflow-x: auto; + overflow-y: auto; + height: 100%; +} + +.fixed-table-container table { + width: 100%; +} + +.fixed-table-container thead th { + height: 0; + padding: 0; + margin: 0; + border-left: 1px solid #dddddd; +} + +.fixed-table-container thead th:focus { + outline: 0 solid transparent; +} + +.fixed-table-container thead th:first-child:not([data-not-first-th]) { + border-left: none; + border-top-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.fixed-table-container thead th .th-inner, +.fixed-table-container tbody td .th-inner { + padding: 8px; + line-height: 24px; + vertical-align: top; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.fixed-table-container thead th .sortable { + cursor: pointer; + background-position: right; + background-repeat: no-repeat; + padding-right: 30px; +} + +.fixed-table-container thead th .both { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); +} + +.fixed-table-container thead th .asc { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); +} + +.fixed-table-container thead th .desc { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= '); +} + +.fixed-table-container th.detail { + width: 30px; +} + +.fixed-table-container tbody td { + border-left: 1px solid #dddddd; +} + +.fixed-table-container tbody tr:first-child td { + border-top: none; +} + +.fixed-table-container tbody td:first-child { + border-left: none; +} + +/* the same color with .active */ +.fixed-table-container tbody .selected td { + background-color: #f5f5f5; +} + +.fixed-table-container .bs-checkbox { + text-align: center; +} + +.fixed-table-container input[type="radio"], +.fixed-table-container input[type="checkbox"] { + margin: 0 auto !important; +} + +.fixed-table-container .no-records-found { + text-align: center; +} + +.fixed-table-pagination div.pagination, +.fixed-table-pagination .pagination-detail { + margin-top: 3px; + margin-bottom: 3px; +} + +.fixed-table-pagination div.pagination .pagination { + margin: 0; +} + +.fixed-table-pagination .pagination a { + padding: 6px 12px; + line-height: 1.428571429; +} + +.fixed-table-pagination .pagination-info { + /*line-height: 34px;*/ + margin-right: 5px; +} + +.fixed-table-pagination .btn-group { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.fixed-table-pagination .dropup .dropdown-menu { + margin-bottom: 0; +} + +.fixed-table-pagination .page-list { + display: inline-block; +} + +.fixed-table-toolbar .columns-left { + margin-right: 5px; +} + +.fixed-table-toolbar .columns-right { + margin-left: 5px; +} + +.fixed-table-toolbar .columns label { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; +} + +.fixed-table-toolbar .bs-bars, +.fixed-table-toolbar .search, +.fixed-table-toolbar .columns { + position: relative; + margin-top: 3px; + margin-bottom: 3px; + line-height: 34px; +} + +.fixed-table-pagination li.disabled a { + pointer-events: none; + cursor: default; +} + +.fixed-table-loading { + display: none; + position: absolute; + top: 42px; + right: 0; + bottom: 0; + left: 0; + z-index: 99; + background-color: rgba(63, 72, 84, 1); + text-align: center; +} + +.fixed-table-body .card-view .title { + font-weight: bold; + display: inline-block; + min-width: 30%; + text-align: left !important; +} + +/* support bootstrap 2 */ +.fixed-table-body thead th .th-inner { + box-sizing: border-box; +} + +.table th, .table td { + vertical-align: middle; + box-sizing: border-box; +} + +.fixed-table-toolbar .dropdown-menu { + text-align: left; + max-height: 300px; + overflow: auto; +} + +.fixed-table-toolbar .btn-group > .btn-group { + display: inline-block; + margin-left: -1px !important; +} + +.fixed-table-toolbar .btn-group > .btn-group > .btn { + border-radius: 0; +} + +.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.bootstrap-table .table > thead > tr > th { + vertical-align: bottom; + border-bottom: 1px solid #ddd; +} + +/* support bootstrap 3 */ +.bootstrap-table .table thead > tr > th { + padding: 0; + margin: 0; +} + +.bootstrap-table .fixed-table-footer tbody > tr > td { + padding: 0 !important; +} + +.bootstrap-table .fixed-table-footer .table { + border-bottom: none; + border-radius: 0; + padding: 0 !important; +} + +.bootstrap-table .pull-right .dropdown-menu { + right: 0; + left: auto; +} + +/* calculate scrollbar width */ +p.fixed-table-scroll-inner { + width: 100%; + height: 200px; +} + +div.fixed-table-scroll-outer { + top: 0; + left: 0; + visibility: hidden; + width: 200px; + height: 150px; + overflow: hidden; +} + +/* for get correct heights */ +.fixed-table-toolbar:after, .fixed-table-pagination:after { + content: ""; + display: block; + clear: both; +} + +.fullscreen { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100%!important; + background: #FFF; +} diff --git a/public/lib/bootstrap/bootstrap-table/bootstrap-table.js b/public/lib/bootstrap/bootstrap-table/bootstrap-table.js new file mode 100644 index 0000000..102274d --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/bootstrap-table.js @@ -0,0 +1,3295 @@ +/** + * @author zhixin wen + * version: 1.12.1 + * https://github.com/wenzhixin/bootstrap-table/ + */ + +(function ($) { + 'use strict'; + + // TOOLS DEFINITION + // ====================== + + var bootstrapVersion = 3; + try { + bootstrapVersion = parseInt($.fn.dropdown.Constructor.VERSION, 10); + } catch (e) {} + var bs = { + 3: { + buttonsClass: 'default', + iconsPrefix: 'glyphicon', + icons: { + paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down', + paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up', + refresh: 'glyphicon-refresh icon-refresh', + toggleOff: 'glyphicon-list-alt icon-list-alt', + toggleOn: 'glyphicon-list-alt icon-list-alt', + columns: 'glyphicon-th icon-th', + detailOpen: 'glyphicon-plus icon-plus', + detailClose: 'glyphicon-minus icon-minus', + fullscreen: 'glyphicon-fullscreen' + }, + pullClass: 'pull', + toobarDropdowHtml: [''], + toobarDropdowItemHtml: '
  • ', + pageDropdownHtml: [''], + pageDropdownItemHtml: '' + }, + 4: { + buttonsClass: 'secondary', + iconsPrefix: 'fa', + icons: { + paginationSwitchDown: 'fa-toggle-down', + paginationSwitchUp: 'fa-toggle-up', + refresh: 'fa-refresh', + toggleOff: 'fa-toggle-off', + toggleOn: 'fa-toggle-on', + columns: 'fa-th-list', + detailOpen: 'fa-plus', + detailClose: 'fa-minus', + fullscreen: 'fa-arrows-alt' + }, + pullClass: 'float', + toobarDropdowHtml: [''], + toobarDropdowItemHtml: '', + pageDropdownHtml: [''], + pageDropdownItemHtml: '%s' + } + }[bootstrapVersion]; + + var cachedWidth = null; + + // it only does '%s', and return '' when arguments are undefined + var sprintf = function (str) { + var args = arguments, + flag = true, + i = 1; + + str = str.replace(/%s/g, function () { + var arg = args[i++]; + + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; + }; + + var getPropertyFromOther = function (list, from, to, value) { + var result = ''; + $.each(list, function (i, item) { + if (item[from] === value) { + result = item[to]; + return false; + } + return true; + }); + return result; + }; + + // http://jsfiddle.net/wenyi/47nz7ez9/3/ + var setFieldIndex = function (columns) { + var i, j, k, + totalCol = 0, + flag = []; + + for (i = 0; i < columns[0].length; i++) { + totalCol += columns[0][i].colspan || 1; + } + + for (i = 0; i < columns.length; i++) { + flag[i] = []; + for (j = 0; j < totalCol; j++) { + flag[i][j] = false; + } + } + + for (i = 0; i < columns.length; i++) { + for (j = 0; j < columns[i].length; j++) { + var r = columns[i][j], + rowspan = r.rowspan || 1, + colspan = r.colspan || 1, + index = $.inArray(false, flag[i]); + + if (colspan === 1) { + r.fieldIndex = index; + // when field is undefined, use index instead + if (typeof r.field === 'undefined') { + r.field = index; + } + } + + for (k = 0; k < rowspan; k++) { + flag[i + k][index] = true; + } + for (k = 0; k < colspan; k++) { + flag[i][index + k] = true; + } + } + } + }; + + var getScrollBarWidth = function () { + if (cachedWidth === null) { + var inner = $('

    ').addClass('fixed-table-scroll-inner'), + outer = $('

    ').addClass('fixed-table-scroll-outer'), + w1, w2; + + outer.append(inner); + $('body').append(outer); + + w1 = inner[0].offsetWidth; + outer.css('overflow', 'scroll'); + w2 = inner[0].offsetWidth; + + if (w1 === w2) { + w2 = outer[0].clientWidth; + } + + outer.remove(); + cachedWidth = w1 - w2; + } + return cachedWidth; + }; + + var calculateObjectValue = function (self, name, args, defaultValue) { + var func = name; + + if (typeof name === 'string') { + // support obj.func1.func2 + var names = name.split('.'); + + if (names.length > 1) { + func = window; + $.each(names, function (i, f) { + func = func[f]; + }); + } else { + func = window[name]; + } + } + if (typeof func === 'object') { + return func; + } + if (typeof func === 'function') { + return func.apply(self, args || []); + } + if (!func && typeof name === 'string' && sprintf.apply(this, [name].concat(args))) { + return sprintf.apply(this, [name].concat(args)); + } + return defaultValue; + }; + + var compareObjects = function (objectA, objectB, compareLength) { + // Create arrays of property names + var getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) { + var arr = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + arr.push(k); + } + } + return arr; + }; + var objectAProperties = getOwnPropertyNames(objectA), + objectBProperties = getOwnPropertyNames(objectB), + propName = ''; + + if (compareLength) { + // If number of properties is different, objects are not equivalent + if (objectAProperties.length !== objectBProperties.length) { + return false; + } + } + + for (var i = 0; i < objectAProperties.length; i++) { + propName = objectAProperties[i]; + + // If the property is not in the object B properties, continue with the next property + if ($.inArray(propName, objectBProperties) > -1) { + // If values of same property are not equal, objects are not equivalent + if (objectA[propName] !== objectB[propName]) { + return false; + } + } + } + + // If we made it this far, objects are considered equivalent + return true; + }; + + var escapeHTML = function (text) { + if (typeof text === 'string') { + return text + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/`/g, '`'); + } + return text; + }; + + var getRealDataAttr = function (dataAttr) { + for (var attr in dataAttr) { + var auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase(); + if (auxAttr !== attr) { + dataAttr[auxAttr] = dataAttr[attr]; + delete dataAttr[attr]; + } + } + + return dataAttr; + }; + + var getItemField = function (item, field, escape) { + var value = item; + + if (typeof field !== 'string' || item.hasOwnProperty(field)) { + return escape ? escapeHTML(item[field]) : item[field]; + } + var props = field.split('.'); + for (var p in props) { + if (props.hasOwnProperty(p)) { + value = value && value[props[p]]; + } + } + return escape ? escapeHTML(value) : value; + }; + + var isIEBrowser = function () { + return !!(navigator.userAgent.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)); + }; + + var objectKeys = function () { + // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys + if (!Object.keys) { + Object.keys = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'), + dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ], + dontEnumsLength = dontEnums.length; + + return function(obj) { + if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { + throw new TypeError('Object.keys called on non-object'); + } + + var result = [], prop, i; + + for (prop in obj) { + if (hasOwnProperty.call(obj, prop)) { + result.push(prop); + } + } + + if (hasDontEnumBug) { + for (i = 0; i < dontEnumsLength; i++) { + if (hasOwnProperty.call(obj, dontEnums[i])) { + result.push(dontEnums[i]); + } + } + } + return result; + }; + }()); + } + }; + + // BOOTSTRAP TABLE CLASS DEFINITION + // ====================== + + var BootstrapTable = function (el, options) { + this.options = options; + this.$el = $(el); + this.$el_ = this.$el.clone(); + this.timeoutId_ = 0; + this.timeoutFooter_ = 0; + + this.init(); + }; + + BootstrapTable.DEFAULTS = { + classes: 'table table-hover', + sortClass: undefined, + locale: undefined, + height: undefined, + undefinedText: '-', + sortName: undefined, + sortOrder: 'asc', + sortStable: false, + rememberOrder: false, + striped: false, + columns: [[]], + data: [], + totalField: 'total', + dataField: 'rows', + method: 'get', + url: undefined, + ajax: undefined, + cache: true, + contentType: 'application/json', + dataType: 'json', + ajaxOptions: {}, + queryParams: function (params) { + return params; + }, + queryParamsType: 'limit', // undefined + responseHandler: function (res) { + return res; + }, + pagination: false, + onlyInfoPagination: false, + paginationLoop: true, + sidePagination: 'client', // client or server + totalRows: 0, // server side need to set + pageNumber: 1, + pageSize: 10, + pageList: [10, 25, 50, 100], + paginationHAlign: 'right', //right, left + paginationVAlign: 'bottom', //bottom, top, both + paginationDetailHAlign: 'left', //right, left + paginationPreText: '‹', + paginationNextText: '›', + search: false, + searchOnEnterKey: false, + strictSearch: false, + searchAlign: 'right', + selectItemName: 'btSelectItem', + showHeader: true, + showFooter: false, + showColumns: false, + showPaginationSwitch: false, + showRefresh: false, + showToggle: false, + showFullscreen: false, + smartDisplay: true, + escape: false, + minimumCountColumns: 1, + idField: undefined, + uniqueId: undefined, + cardView: false, + detailView: false, + detailFormatter: function (index, row) { + return ''; + }, + detailFilter: function (index, row) { + return true; + }, + trimOnSearch: true, + clickToSelect: false, + singleSelect: false, + toolbar: undefined, + toolbarAlign: 'left', + buttonsToolbar: undefined, + buttonsAlign: 'right', + checkboxHeader: true, + sortable: true, + silentSort: true, + maintainSelected: false, + searchTimeOut: 500, + searchText: '', + iconSize: undefined, + buttonsClass: bs.buttonsClass, + iconsPrefix: bs.iconsPrefix, // glyphicon or fa (font awesome) + icons: bs.icons, + + customSearch: $.noop, + + customSort: $.noop, + + ignoreClickToSelectOn: function (element) { + return $.inArray(element.tagName, ['A', 'BUTTON']); + }, + + rowStyle: function (row, index) { + return {}; + }, + + rowAttributes: function (row, index) { + return {}; + }, + + footerStyle: function (row, index) { + return {}; + }, + + onAll: function (name, args) { + return false; + }, + onClickCell: function (field, value, row, $element) { + return false; + }, + onDblClickCell: function (field, value, row, $element) { + return false; + }, + onClickRow: function (item, $element) { + return false; + }, + onDblClickRow: function (item, $element) { + return false; + }, + onSort: function (name, order) { + return false; + }, + onCheck: function (row) { + return false; + }, + onUncheck: function (row) { + return false; + }, + onCheckAll: function (rows) { + return false; + }, + onUncheckAll: function (rows) { + return false; + }, + onCheckSome: function (rows) { + return false; + }, + onUncheckSome: function (rows) { + return false; + }, + onLoadSuccess: function (data) { + return false; + }, + onLoadError: function (status) { + return false; + }, + onColumnSwitch: function (field, checked) { + return false; + }, + onPageChange: function (number, size) { + return false; + }, + onSearch: function (text) { + return false; + }, + onToggle: function (cardView) { + return false; + }, + onPreBody: function (data) { + return false; + }, + onPostBody: function () { + return false; + }, + onPostHeader: function () { + return false; + }, + onExpandRow: function (index, row, $detail) { + return false; + }, + onCollapseRow: function (index, row) { + return false; + }, + onRefreshOptions: function (options) { + return false; + }, + onRefresh: function (params) { + return false; + }, + onResetView: function () { + return false; + }, + onScrollBody: function () { + return false; + } + }; + + BootstrapTable.LOCALES = {}; + + BootstrapTable.LOCALES['en-US'] = BootstrapTable.LOCALES.en = { + formatLoadingMessage: function () { + return 'Loading, please wait...'; + }, + formatRecordsPerPage: function (pageNumber) { + return sprintf('%s rows per page', pageNumber); + }, + formatShowingRows: function (pageFrom, pageTo, totalRows) { + return sprintf('Showing %s to %s of %s rows', pageFrom, pageTo, totalRows); + }, + formatDetailPagination: function (totalRows) { + return sprintf('Showing %s rows', totalRows); + }, + formatSearch: function () { + return 'Search'; + }, + formatNoMatches: function () { + return 'No matching records found'; + }, + formatPaginationSwitch: function () { + return 'Hide/Show pagination'; + }, + formatRefresh: function () { + return 'Refresh'; + }, + formatToggle: function () { + return 'Toggle'; + }, + formatFullscreen: function () { + return 'Fullscreen'; + }, + formatColumns: function () { + return 'Columns'; + }, + formatAllRows: function () { + return 'All'; + } + }; + + $.extend(BootstrapTable.DEFAULTS, BootstrapTable.LOCALES['en-US']); + + BootstrapTable.COLUMN_DEFAULTS = { + radio: false, + checkbox: false, + checkboxEnabled: true, + field: undefined, + title: undefined, + titleTooltip: undefined, + 'class': undefined, + align: undefined, // left, right, center + halign: undefined, // left, right, center + falign: undefined, // left, right, center + valign: undefined, // top, middle, bottom + width: undefined, + sortable: false, + order: 'asc', // asc, desc + visible: true, + switchable: true, + clickToSelect: true, + formatter: undefined, + footerFormatter: undefined, + events: undefined, + sorter: undefined, + sortName: undefined, + cellStyle: undefined, + searchable: true, + searchFormatter: true, + cardVisible: true, + escape: false, + showSelectTitle: false + }; + + BootstrapTable.EVENTS = { + 'all.bs.table': 'onAll', + 'click-cell.bs.table': 'onClickCell', + 'dbl-click-cell.bs.table': 'onDblClickCell', + 'click-row.bs.table': 'onClickRow', + 'dbl-click-row.bs.table': 'onDblClickRow', + 'sort.bs.table': 'onSort', + 'check.bs.table': 'onCheck', + 'uncheck.bs.table': 'onUncheck', + 'check-all.bs.table': 'onCheckAll', + 'uncheck-all.bs.table': 'onUncheckAll', + 'check-some.bs.table': 'onCheckSome', + 'uncheck-some.bs.table': 'onUncheckSome', + 'load-success.bs.table': 'onLoadSuccess', + 'load-error.bs.table': 'onLoadError', + 'column-switch.bs.table': 'onColumnSwitch', + 'page-change.bs.table': 'onPageChange', + 'search.bs.table': 'onSearch', + 'toggle.bs.table': 'onToggle', + 'pre-body.bs.table': 'onPreBody', + 'post-body.bs.table': 'onPostBody', + 'post-header.bs.table': 'onPostHeader', + 'expand-row.bs.table': 'onExpandRow', + 'collapse-row.bs.table': 'onCollapseRow', + 'refresh-options.bs.table': 'onRefreshOptions', + 'reset-view.bs.table': 'onResetView', + 'refresh.bs.table': 'onRefresh', + 'scroll-body.bs.table': 'onScrollBody' + }; + + BootstrapTable.prototype.init = function () { + this.initLocale(); + this.initContainer(); + this.initTable(); + this.initHeader(); + this.initData(); + this.initHiddenRows(); + this.initFooter(); + this.initToolbar(); + this.initPagination(); + this.initBody(); + this.initSearchText(); + this.initServer(); + }; + + BootstrapTable.prototype.initLocale = function () { + if (this.options.locale) { + var parts = this.options.locale.split(/-|_/); + parts[0].toLowerCase(); + if (parts[1]) { + parts[1].toUpperCase(); + } + if ($.fn.bootstrapTable.locales[this.options.locale]) { + // locale as requested + $.extend(this.options, $.fn.bootstrapTable.locales[this.options.locale]); + } else if ($.fn.bootstrapTable.locales[parts.join('-')]) { + // locale with sep set to - (in case original was specified with _) + $.extend(this.options, $.fn.bootstrapTable.locales[parts.join('-')]); + } else if ($.fn.bootstrapTable.locales[parts[0]]) { + // short locale language code (i.e. 'en') + $.extend(this.options, $.fn.bootstrapTable.locales[parts[0]]); + } + } + }; + + BootstrapTable.prototype.initContainer = function () { + this.$container = $([ + '
    ', + '
    ', + this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ? + '
    ' : + '', + '
    ', + '
    ', + '
    ', + '
    ', + this.options.formatLoadingMessage(), + '
    ', + '
    ', + '', + '
    ', + this.options.paginationVAlign === 'bottom' || this.options.paginationVAlign === 'both' ? + '
    ' : + '', + '
    ' + ].join('')); + + this.$container.insertAfter(this.$el); + this.$tableContainer = this.$container.find('.fixed-table-container'); + this.$tableHeader = this.$container.find('.fixed-table-header'); + this.$tableBody = this.$container.find('.fixed-table-body'); + this.$tableLoading = this.$container.find('.fixed-table-loading'); + this.$tableFooter = this.$container.find('.fixed-table-footer'); + // checking if custom table-toolbar exists or not + if (this.options.buttonsToolbar) { + this.$toolbar = $('body').find(this.options.buttonsToolbar); + } else { + this.$toolbar = this.$container.find('.fixed-table-toolbar'); + } + this.$pagination = this.$container.find('.fixed-table-pagination'); + + this.$tableBody.append(this.$el); + this.$container.after('
    '); + + this.$el.addClass(this.options.classes); + if (this.options.striped) { + this.$el.addClass('table-striped'); + } + if ($.inArray('table-no-bordered', this.options.classes.split(' ')) !== -1) { + this.$tableContainer.addClass('table-no-bordered'); + } + }; + + BootstrapTable.prototype.initTable = function () { + var that = this, + columns = [], + data = []; + + this.$header = this.$el.find('>thead'); + if (!this.$header.length) { + this.$header = $('').appendTo(this.$el); + } + this.$header.find('tr').each(function () { + var column = []; + + $(this).find('th').each(function () { + // Fix #2014 - getFieldIndex and elsewhere assume this is string, causes issues if not + if (typeof $(this).data('field') !== 'undefined') { + $(this).data('field', $(this).data('field') + ''); + } + column.push($.extend({}, { + title: $(this).html(), + 'class': $(this).attr('class'), + titleTooltip: $(this).attr('title'), + rowspan: $(this).attr('rowspan') ? +$(this).attr('rowspan') : undefined, + colspan: $(this).attr('colspan') ? +$(this).attr('colspan') : undefined + }, $(this).data())); + }); + columns.push(column); + }); + if (!$.isArray(this.options.columns[0])) { + this.options.columns = [this.options.columns]; + } + this.options.columns = $.extend(true, [], columns, this.options.columns); + this.columns = []; + this.fieldsColumnsIndex = []; + + setFieldIndex(this.options.columns); + $.each(this.options.columns, function (i, columns) { + $.each(columns, function (j, column) { + column = $.extend({}, BootstrapTable.COLUMN_DEFAULTS, column); + + if (typeof column.fieldIndex !== 'undefined') { + that.columns[column.fieldIndex] = column; + that.fieldsColumnsIndex[column.field] = column.fieldIndex; + } + + that.options.columns[i][j] = column; + }); + }); + + // if options.data is setting, do not process tbody data + if (this.options.data.length) { + return; + } + + var m = []; + this.$el.find('>tbody>tr').each(function (y) { + var row = {}; + + // save tr's id, class and data-* attributes + row._id = $(this).attr('id'); + row._class = $(this).attr('class'); + row._data = getRealDataAttr($(this).data()); + + $(this).find('>td').each(function (x) { + var $this = $(this), + cspan = +$this.attr('colspan') || 1, + rspan = +$this.attr('rowspan') || 1, + tx, + ty; + + // skip already occupied cells in current row + for (; m[y] && m[y][x]; x++); + + for (tx = x; tx < x + cspan; tx++) { //mark matrix elements occupied by current cell with true + for (ty = y; ty < y + rspan; ty++) { + if (!m[ty]) { //fill missing rows + m[ty] = []; + } + m[ty][tx] = true; + } + } + + var field = that.columns[x].field; + + row[field] = $(this).html(); + // save td's id, class and data-* attributes + row['_' + field + '_id'] = $(this).attr('id'); + row['_' + field + '_class'] = $(this).attr('class'); + row['_' + field + '_rowspan'] = $(this).attr('rowspan'); + row['_' + field + '_colspan'] = $(this).attr('colspan'); + row['_' + field + '_title'] = $(this).attr('title'); + row['_' + field + '_data'] = getRealDataAttr($(this).data()); + }); + data.push(row); + }); + this.options.data = data; + if (data.length) this.fromHtml = true; + }; + + BootstrapTable.prototype.initHeader = function () { + var that = this, + visibleColumns = {}, + html = []; + + this.header = { + fields: [], + styles: [], + classes: [], + formatters: [], + events: [], + sorters: [], + sortNames: [], + cellStyles: [], + searchables: [] + }; + + $.each(this.options.columns, function (i, columns) { + html.push(''); + + if (i === 0 && !that.options.cardView && that.options.detailView) { + html.push(sprintf('
    ', + that.options.columns.length)); + } + + $.each(columns, function (j, column) { + var text = '', + halign = '', // header align style + align = '', // body align style + style = '', + class_ = sprintf(' class="%s"', column['class']), + order = that.options.sortOrder || column.order, + unitWidth = 'px', + width = column.width; + + if (column.width !== undefined && (!that.options.cardView)) { + if (typeof column.width === 'string') { + if (column.width.indexOf('%') !== -1) { + unitWidth = '%'; + } + } + } + if (column.width && typeof column.width === 'string') { + width = column.width.replace('%', '').replace('px', ''); + } + + halign = sprintf('text-align: %s; ', column.halign ? column.halign : column.align); + align = sprintf('text-align: %s; ', column.align); + style = sprintf('vertical-align: %s; ', column.valign); + style += sprintf('width: %s; ', (column.checkbox || column.radio) && !width ? + (!column.showSelectTitle ? '36px' : undefined) : + (width ? width + unitWidth : undefined)); + + if (typeof column.fieldIndex !== 'undefined') { + that.header.fields[column.fieldIndex] = column.field; + that.header.styles[column.fieldIndex] = align + style; + that.header.classes[column.fieldIndex] = class_; + that.header.formatters[column.fieldIndex] = column.formatter; + that.header.events[column.fieldIndex] = column.events; + that.header.sorters[column.fieldIndex] = column.sorter; + that.header.sortNames[column.fieldIndex] = column.sortName; + that.header.cellStyles[column.fieldIndex] = column.cellStyle; + that.header.searchables[column.fieldIndex] = column.searchable; + + if (!column.visible) { + return; + } + + if (that.options.cardView && (!column.cardVisible)) { + return; + } + + visibleColumns[column.field] = column; + } + + html.push(''); + + html.push(sprintf('
    ', that.options.sortable && column.sortable ? + 'sortable both' : '')); + + text = that.options.escape ? escapeHTML(column.title) : column.title; + + var title = text; + if (column.checkbox) { + text = ''; + if (!that.options.singleSelect && that.options.checkboxHeader) { + text = ''; + } + that.header.stateField = column.field; + } + if (column.radio) { + text = ''; + that.header.stateField = column.field; + that.options.singleSelect = true; + } + if (!text && column.showSelectTitle) { + text += title; + } + + html.push(text); + html.push('
    '); + html.push('
    '); + html.push('
    '); + html.push(''); + }); + html.push(''); + }); + + this.$header.html(html.join('')); + this.$header.find('th[data-field]').each(function (i) { + $(this).data(visibleColumns[$(this).data('field')]); + }); + this.$container.off('click', '.th-inner').on('click', '.th-inner', function (event) { + var $this = $(this); + + if (that.options.detailView && !$this.parent().hasClass('bs-checkbox')) { + if ($this.closest('.bootstrap-table')[0] !== that.$container[0]) { + return false; + } + } + + if (that.options.sortable && $this.parent().data().sortable) { + that.onSort(event); + } + }); + + this.$header.children().children().off('keypress').on('keypress', function (event) { + if (that.options.sortable && $(this).data().sortable) { + var code = event.keyCode || event.which; + if (code == 13) { //Enter keycode + that.onSort(event); + } + } + }); + + $(window).off('resize.bootstrap-table'); + if (!this.options.showHeader || this.options.cardView) { + this.$header.hide(); + this.$tableHeader.hide(); + this.$tableLoading.css('top', 0); + } else { + this.$header.show(); + this.$tableHeader.show(); + this.$tableLoading.css('top', this.$header.outerHeight() + 1); + // Assign the correct sortable arrow + this.getCaret(); + $(window).on('resize.bootstrap-table', $.proxy(this.resetWidth, this)); + } + + this.$selectAll = this.$header.find('[name="btSelectAll"]'); + this.$selectAll.off('click').on('click', function () { + var checked = $(this).prop('checked'); + that[checked ? 'checkAll' : 'uncheckAll'](); + that.updateSelected(); + }); + }; + + BootstrapTable.prototype.initFooter = function () { + if (!this.options.showFooter || this.options.cardView) { + this.$tableFooter.hide(); + } else { + this.$tableFooter.show(); + } + }; + + /** + * @param data + * @param type: append / prepend + */ + BootstrapTable.prototype.initData = function (data, type) { + if (type === 'append') { + this.options.data = this.options.data.concat(data); + } else if (type === 'prepend') { + this.options.data = [].concat(data).concat(this.options.data); + } else { + this.options.data = data || this.options.data; + } + + this.data = this.options.data; + + if (this.options.sidePagination === 'server') { + return; + } + this.initSort(); + }; + + BootstrapTable.prototype.initSort = function () { + var that = this, + name = this.options.sortName, + order = this.options.sortOrder === 'desc' ? -1 : 1, + index = $.inArray(this.options.sortName, this.header.fields), + timeoutId = 0; + + if (this.options.customSort !== $.noop) { + this.options.customSort.apply(this, [this.options.sortName, this.options.sortOrder]); + return; + } + + if (index !== -1) { + if (this.options.sortStable) { + $.each(this.data, function (i, row) { + row._position = i; + }); + } + + this.data.sort(function (a, b) { + if (that.header.sortNames[index]) { + name = that.header.sortNames[index]; + } + var aa = getItemField(a, name, that.options.escape), + bb = getItemField(b, name, that.options.escape), + value = calculateObjectValue(that.header, that.header.sorters[index], [aa, bb, a, b]); + + if (value !== undefined) { + if (that.options.sortStable && value === 0) { + return a._position - b._position; + } + return order * value; + } + + // Fix #161: undefined or null string sort bug. + if (aa === undefined || aa === null) { + aa = ''; + } + if (bb === undefined || bb === null) { + bb = ''; + } + + if (that.options.sortStable && aa === bb) { + aa = a._position; + bb = b._position; + return a._position - b._position; + } + + // IF both values are numeric, do a numeric comparison + if ($.isNumeric(aa) && $.isNumeric(bb)) { + // Convert numerical values form string to float. + aa = parseFloat(aa); + bb = parseFloat(bb); + if (aa < bb) { + return order * -1; + } + return order; + } + + if (aa === bb) { + return 0; + } + + // If value is not a string, convert to string + if (typeof aa !== 'string') { + aa = aa.toString(); + } + + if (aa.localeCompare(bb) === -1) { + return order * -1; + } + + return order; + }); + + if (this.options.sortClass !== undefined) { + clearTimeout(timeoutId); + timeoutId = setTimeout(function () { + that.$el.removeClass(that.options.sortClass); + var index = that.$header.find(sprintf('[data-field="%s"]', + that.options.sortName).index() + 1); + that.$el.find(sprintf('tr td:nth-child(%s)', index)) + .addClass(that.options.sortClass); + }, 250); + } + } + }; + + BootstrapTable.prototype.onSort = function (event) { + var $this = event.type === "keypress" ? $(event.currentTarget) : $(event.currentTarget).parent(), + $this_ = this.$header.find('th').eq($this.index()); + + this.$header.add(this.$header_).find('span.order').remove(); + + if (this.options.sortName === $this.data('field')) { + this.options.sortOrder = this.options.sortOrder === 'asc' ? 'desc' : 'asc'; + } else { + this.options.sortName = $this.data('field'); + if (this.options.rememberOrder) { + this.options.sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc'; + } else { + this.options.sortOrder = this.columns[this.fieldsColumnsIndex[$this.data('field')]].order; + } + } + this.trigger('sort', this.options.sortName, this.options.sortOrder); + + $this.add($this_).data('order', this.options.sortOrder); + + // Assign the correct sortable arrow + this.getCaret(); + + if (this.options.sidePagination === 'server') { + this.initServer(this.options.silentSort); + return; + } + + this.initSort(); + this.initBody(); + }; + + BootstrapTable.prototype.initToolbar = function () { + var that = this, + html = [], + timeoutId = 0, + $keepOpen, + $search, + switchableCount = 0; + + if (this.$toolbar.find('.bs-bars').children().length) { + $('body').append($(this.options.toolbar)); + } + this.$toolbar.html(''); + + if (typeof this.options.toolbar === 'string' || typeof this.options.toolbar === 'object') { + $(sprintf('
    ', bs.pullClass, this.options.toolbarAlign)) + .appendTo(this.$toolbar) + .append($(this.options.toolbar)); + } + + // showColumns, showToggle, showRefresh + html = [sprintf('
    ', + this.options.buttonsAlign, bs.pullClass, this.options.buttonsAlign)]; + + if (typeof this.options.icons === 'string') { + this.options.icons = calculateObjectValue(null, this.options.icons); + } + + if (this.options.showPaginationSwitch) { + html.push(sprintf(''); + } + + if (this.options.showFullscreen) { + this.$toolbar.find('button[name="fullscreen"]') + .off('click').on('click', $.proxy(this.toggleFullscreen, this)); + } + + if (this.options.showRefresh) { + html.push(sprintf(''); + } + + if (this.options.showToggle) { + html.push(sprintf(''); + } + + if (this.options.showFullscreen) { + html.push(sprintf(''); + } + + if (this.options.showColumns) { + html.push(sprintf('
    ', + this.options.formatColumns()), + '', + bs.toobarDropdowHtml[0]); + + $.each(this.columns, function (i, column) { + if (column.radio || column.checkbox) { + return; + } + + if (that.options.cardView && !column.cardVisible) { + return; + } + + var checked = column.visible ? ' checked="checked"' : ''; + + if (column.switchable) { + html.push(sprintf(bs.toobarDropdowItemHtml, + sprintf(' %s', + column.field, i, checked, column.title))); + switchableCount++; + } + }); + html.push(bs.toobarDropdowHtml[1], '
    '); + } + + html.push('
    '); + + // Fix #188: this.showToolbar is for extensions + if (this.showToolbar || html.length > 2) { + this.$toolbar.append(html.join('')); + } + + if (this.options.showPaginationSwitch) { + this.$toolbar.find('button[name="paginationSwitch"]') + .off('click').on('click', $.proxy(this.togglePagination, this)); + } + + if (this.options.showRefresh) { + this.$toolbar.find('button[name="refresh"]') + .off('click').on('click', $.proxy(this.refresh, this)); + } + + if (this.options.showToggle) { + this.$toolbar.find('button[name="toggle"]') + .off('click').on('click', function () { + that.toggleView(); + }); + } + + if (this.options.showColumns) { + $keepOpen = this.$toolbar.find('.keep-open'); + + if (switchableCount <= this.options.minimumCountColumns) { + $keepOpen.find('input').prop('disabled', true); + } + + $keepOpen.find('li').off('click').on('click', function (event) { + event.stopImmediatePropagation(); + }); + $keepOpen.find('input').off('click').on('click', function () { + var $this = $(this); + + that.toggleColumn($(this).val(), $this.prop('checked'), false); + that.trigger('column-switch', $(this).data('field'), $this.prop('checked')); + }); + } + + if (this.options.search) { + html = []; + html.push( + sprintf(''); + + this.$toolbar.append(html.join('')); + $search = this.$toolbar.find('.search input'); + $search.off('keyup drop blur').on('keyup drop blur', function (event) { + if (that.options.searchOnEnterKey && event.keyCode !== 13) { + return; + } + + if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) { + return; + } + + clearTimeout(timeoutId); // doesn't matter if it's 0 + timeoutId = setTimeout(function () { + that.onSearch(event); + }, that.options.searchTimeOut); + }); + + if (isIEBrowser()) { + $search.off('mouseup').on('mouseup', function (event) { + clearTimeout(timeoutId); // doesn't matter if it's 0 + timeoutId = setTimeout(function () { + that.onSearch(event); + }, that.options.searchTimeOut); + }); + } + } + }; + + BootstrapTable.prototype.onSearch = function (event) { + var text = $.trim($(event.currentTarget).val()); + + // trim search input + if (this.options.trimOnSearch && $(event.currentTarget).val() !== text) { + $(event.currentTarget).val(text); + } + + if (text === this.searchText) { + return; + } + this.searchText = text; + this.options.searchText = text; + + this.options.pageNumber = 1; + this.initSearch(); + if (event.firedByInitSearchText) { + if (this.options.sidePagination === 'client') { + this.updatePagination(); + } + } else { + this.updatePagination(); + } + this.trigger('search', text); + }; + + BootstrapTable.prototype.initSearch = function () { + var that = this; + + if (this.options.sidePagination !== 'server') { + if (this.options.customSearch !== $.noop) { + window[this.options.customSearch].apply(this, [this.searchText]); + return; + } + + var s = this.searchText && (this.options.escape ? + escapeHTML(this.searchText) : this.searchText).toLowerCase(); + var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns; + + // Check filter + this.data = f ? $.grep(this.options.data, function (item, i) { + for (var key in f) { + if ($.isArray(f[key]) && $.inArray(item[key], f[key]) === -1 || + !$.isArray(f[key]) && item[key] !== f[key]) { + return false; + } + } + return true; + }) : this.options.data; + + this.data = s ? $.grep(this.data, function (item, i) { + for (var j = 0; j < that.header.fields.length; j++) { + + if (!that.header.searchables[j]) { + continue; + } + + var key = $.isNumeric(that.header.fields[j]) ? parseInt(that.header.fields[j], 10) : that.header.fields[j]; + var column = that.columns[that.fieldsColumnsIndex[key]]; + var value; + + if (typeof key === 'string') { + value = item; + var props = key.split('.'); + for (var prop_index = 0; prop_index < props.length; prop_index++) { + if (value[props[prop_index]] != null) { + value = value[props[prop_index]]; + } + } + + // Fix #142: respect searchForamtter boolean + if (column && column.searchFormatter) { + value = calculateObjectValue(column, + that.header.formatters[j], [value, item, i], value); + } + } else { + value = item[key]; + } + + if (typeof value === 'string' || typeof value === 'number') { + if (that.options.strictSearch) { + if ((value + '').toLowerCase() === s) { + return true; + } + } else { + if ((value + '').toLowerCase().indexOf(s) !== -1) { + return true; + } + } + } + } + return false; + }) : this.data; + } + }; + + BootstrapTable.prototype.initPagination = function () { + if (!this.options.pagination) { + this.$pagination.hide(); + return; + } else { + this.$pagination.show(); + } + + var that = this, + html = [], + $allSelected = false, + i, from, to, + $pageList, + $pre, + $next, + $number, + data = this.getData(), + pageList = this.options.pageList; + + if (this.options.sidePagination !== 'server') { + this.options.totalRows = data.length; + } + + this.totalPages = 0; + if (this.options.totalRows) { + if (this.options.pageSize === this.options.formatAllRows()) { + this.options.pageSize = this.options.totalRows; + $allSelected = true; + } else if (this.options.pageSize === this.options.totalRows) { + // Fix #667 Table with pagination, + // multiple pages and a search that matches to one page throws exception + var pageLst = typeof this.options.pageList === 'string' ? + this.options.pageList.replace('[', '').replace(']', '') + .replace(/ /g, '').toLowerCase().split(',') : this.options.pageList; + if ($.inArray(this.options.formatAllRows().toLowerCase(), pageLst) > -1) { + $allSelected = true; + } + } + + this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1; + + this.options.totalPages = this.totalPages; + } + if (this.totalPages > 0 && this.options.pageNumber > this.totalPages) { + this.options.pageNumber = this.totalPages; + } + + this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1; + this.pageTo = this.options.pageNumber * this.options.pageSize; + if (this.pageTo > this.options.totalRows) { + this.pageTo = this.options.totalRows; + } + + html.push( + sprintf('
    ', bs.pullClass, this.options.paginationDetailHAlign), + '', + this.options.onlyInfoPagination ? this.options.formatDetailPagination(this.options.totalRows) : + this.options.formatShowingRows(this.pageFrom, this.pageTo, this.options.totalRows), + ''); + + if (!this.options.onlyInfoPagination) { + html.push(''); + + var pageNumber = [ + sprintf('', + this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ? + 'dropdown' : 'dropup'), + '', + bs.pageDropdownHtml[0] + ]; + + if (typeof this.options.pageList === 'string') { + var list = this.options.pageList.replace('[', '').replace(']', '') + .replace(/ /g, '').split(','); + + pageList = []; + $.each(list, function (i, value) { + pageList.push((value.toUpperCase() === that.options.formatAllRows().toUpperCase() || value.toUpperCase() === "UNLIMITED") ? + that.options.formatAllRows() : +value); + }); + } + + $.each(pageList, function (i, page) { + if (!that.options.smartDisplay || i === 0 || pageList[i - 1] < that.options.totalRows) { + var active; + if ($allSelected) { + active = page === that.options.formatAllRows() ? 'active' : ''; + } else { + active = page === that.options.pageSize ? 'active' : ''; + } + pageNumber.push(sprintf(bs.pageDropdownItemHtml, active, page)); + } + }); + pageNumber.push(bs.pageDropdownHtml[1] + ''); + + html.push(this.options.formatRecordsPerPage(pageNumber.join(''))); + html.push(''); + + html.push('
    ', + sprintf(''); + } + this.$pagination.html(html.join('')); + + if (!this.options.onlyInfoPagination) { + $pageList = this.$pagination.find('.page-list a'); + $pre = this.$pagination.find('.page-pre'); + $next = this.$pagination.find('.page-next'); + $number = this.$pagination.find('.page-item').not('.page-next, .page-pre'); + + if (this.options.smartDisplay) { + if (this.totalPages <= 1) { + this.$pagination.find('div.pagination').hide(); + } + if (pageList.length < 2 || this.options.totalRows <= pageList[0]) { + this.$pagination.find('span.page-list').hide(); + } + + // when data is empty, hide the pagination + this.$pagination[this.getData().length ? 'show' : 'hide'](); + } + + if (!this.options.paginationLoop) { + if (this.options.pageNumber === 1) { + $pre.addClass('disabled'); + } + if (this.options.pageNumber === this.totalPages) { + $next.addClass('disabled'); + } + } + + if ($allSelected) { + this.options.pageSize = this.options.formatAllRows(); + } + // removed the events for last and first, onPageNumber executeds the same logic + $pageList.off('click').on('click', $.proxy(this.onPageListChange, this)); + $pre.off('click').on('click', $.proxy(this.onPagePre, this)); + $next.off('click').on('click', $.proxy(this.onPageNext, this)); + $number.off('click').on('click', $.proxy(this.onPageNumber, this)); + } + }; + + BootstrapTable.prototype.updatePagination = function (event) { + // Fix #171: IE disabled button can be clicked bug. + if (event && $(event.currentTarget).hasClass('disabled')) { + return; + } + + if (!this.options.maintainSelected) { + this.resetRows(); + } + + this.initPagination(); + if (this.options.sidePagination === 'server') { + this.initServer(); + } else { + this.initBody(); + } + + this.trigger('page-change', this.options.pageNumber, this.options.pageSize); + }; + + BootstrapTable.prototype.onPageListChange = function (event) { + event.preventDefault(); + var $this = $(event.currentTarget); + + $this.parent().addClass('active').siblings().removeClass('active'); + this.options.pageSize = $this.text().toUpperCase() === this.options.formatAllRows().toUpperCase() ? + this.options.formatAllRows() : +$this.text(); + this.$toolbar.find('.page-size').text(this.options.pageSize); + + this.updatePagination(event); + return false; + }; + + BootstrapTable.prototype.onPagePre = function (event) { + event.preventDefault(); + if ((this.options.pageNumber - 1) === 0) { + this.options.pageNumber = this.options.totalPages; + } else { + this.options.pageNumber--; + } + this.updatePagination(event); + return false; + }; + + BootstrapTable.prototype.onPageNext = function (event) { + event.preventDefault(); + if ((this.options.pageNumber + 1) > this.options.totalPages) { + this.options.pageNumber = 1; + } else { + this.options.pageNumber++; + } + this.updatePagination(event); + return false; + }; + + BootstrapTable.prototype.onPageNumber = function (event) { + event.preventDefault(); + if (this.options.pageNumber === +$(event.currentTarget).text()) { + return; + } + this.options.pageNumber = +$(event.currentTarget).text(); + this.updatePagination(event); + return false; + }; + + BootstrapTable.prototype.initRow = function(item, i, data, parentDom) { + var that=this, + key, + html = [], + style = {}, + csses = [], + data_ = '', + attributes = {}, + htmlAttributes = []; + + if ($.inArray(item, this.hiddenRows) > -1) { + return; + } + + style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style); + + if (style && style.css) { + for (key in style.css) { + csses.push(key + ': ' + style.css[key]); + } + } + + attributes = calculateObjectValue(this.options, + this.options.rowAttributes, [item, i], attributes); + + if (attributes) { + for (key in attributes) { + htmlAttributes.push(sprintf('%s="%s"', key, escapeHTML(attributes[key]))); + } + } + + if (item._data && !$.isEmptyObject(item._data)) { + $.each(item._data, function(k, v) { + // ignore data-index + if (k === 'index') { + return; + } + data_ += sprintf(' data-%s="%s"', k, v); + }); + } + + html.push('' + ); + + if (this.options.cardView) { + html.push(sprintf('
    ', this.header.fields.length)); + } + + if (!this.options.cardView && this.options.detailView) { + html.push(''); + + if (calculateObjectValue(null, this.options.detailFilter, [i, item])) { + html.push('', + sprintf('', this.options.iconsPrefix, this.options.icons.detailOpen), + ''); + } + + html.push(''); + } + + $.each(this.header.fields, function(j, field) { + var text = '', + value_ = getItemField(item, field, that.options.escape), + value = '', + type = '', + cellStyle = {}, + id_ = '', + class_ = that.header.classes[j], + data_ = '', + rowspan_ = '', + colspan_ = '', + title_ = '', + column = that.columns[j]; + + if (that.fromHtml && typeof value_ === 'undefined') { + if((!column.checkbox) && (!column.radio)) { + return; + } + } + + if (!column.visible) { + return; + } + + if (that.options.cardView && (!column.cardVisible)) { + return; + } + + if (column.escape) { + value_ = escapeHTML(value_); + } + + style = sprintf('style="%s"', csses.concat(that.header.styles[j]).join('; ')); + + // handle td's id and class + if (item['_' + field + '_id']) { + id_ = sprintf(' id="%s"', item['_' + field + '_id']); + } + if (item['_' + field + '_class']) { + class_ = sprintf(' class="%s"', item['_' + field + '_class']); + } + if (item['_' + field + '_rowspan']) { + rowspan_ = sprintf(' rowspan="%s"', item['_' + field + '_rowspan']); + } + if (item['_' + field + '_colspan']) { + colspan_ = sprintf(' colspan="%s"', item['_' + field + '_colspan']); + } + if (item['_' + field + '_title']) { + title_ = sprintf(' title="%s"', item['_' + field + '_title']); + } + cellStyle = calculateObjectValue(that.header, + that.header.cellStyles[j], [value_, item, i, field], cellStyle); + if (cellStyle.classes) { + class_ = sprintf(' class="%s"', cellStyle.classes); + } + if (cellStyle.css) { + var csses_ = []; + for (var key in cellStyle.css) { + csses_.push(key + ': ' + cellStyle.css[key]); + } + style = sprintf('style="%s"', csses_.concat(that.header.styles[j]).join('; ')); + } + + value = calculateObjectValue(column, + that.header.formatters[j], [value_, item, i, field], value_); + + if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) { + $.each(item['_' + field + '_data'], function(k, v) { + // ignore data-index + if (k === 'index') { + return; + } + data_ += sprintf(' data-%s="%s"', k, v); + }); + } + + if (column.checkbox || column.radio) { + type = column.checkbox ? 'checkbox' : type; + type = column.radio ? 'radio' : type; + + text = [sprintf(that.options.cardView ? + '
    ' : '', column['class'] || ''), + '', + that.header.formatters[j] && typeof value === 'string' ? value : '', + that.options.cardView ? '
    ' : '' + ].join(''); + + item[that.header.stateField] = value === true || (!!value_ || value && value.checked); + } else { + value = typeof value === 'undefined' || value === null ? + that.options.undefinedText : value; + + text = that.options.cardView ? ['
    ', + that.options.showHeader ? sprintf('%s', style, + getPropertyFromOther(that.columns, 'field', 'title', field)) : '', + sprintf('%s', value), + '
    ' + ].join('') : [sprintf('', + id_, class_, style, data_, rowspan_, colspan_, title_), + value, + '' + ].join(''); + + // Hide empty data on Card view when smartDisplay is set to true. + if (that.options.cardView && that.options.smartDisplay && value === '') { + // Should set a placeholder for event binding correct fieldIndex + text = '
    '; + } + } + + html.push(text); + }); + + if (this.options.cardView) { + html.push('
    '); + } + html.push(''); + + return html.join(' '); + }; + + BootstrapTable.prototype.initBody = function (fixedScroll) { + var that = this, + html = [], + data = this.getData(); + + this.trigger('pre-body', data); + + this.$body = this.$el.find('>tbody'); + if (!this.$body.length) { + this.$body = $('').appendTo(this.$el); + } + + //Fix #389 Bootstrap-table-flatJSON is not working + + if (!this.options.pagination || this.options.sidePagination === 'server') { + this.pageFrom = 1; + this.pageTo = data.length; + } + + var trFragments = $(document.createDocumentFragment()); + var hasTr; + + for (var i = this.pageFrom - 1; i < this.pageTo; i++) { + var item = data[i]; + var tr = this.initRow(item, i, data, trFragments); + hasTr = hasTr || !!tr; + if (tr&&tr!==true) { + trFragments.append(tr); + } + } + + // show no records + if (!hasTr) { + trFragments.append('' + + sprintf('%s', + this.$header.find('th').length, + this.options.formatNoMatches()) + + ''); + } + + this.$body.html(trFragments); + + if (!fixedScroll) { + this.scrollTo(0); + } + + // click to select by column + this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick', function (e) { + var $td = $(this), + $tr = $td.parent(), + item = that.data[$tr.data('index')], + index = $td[0].cellIndex, + fields = that.getVisibleFields(), + field = fields[that.options.detailView && !that.options.cardView ? index - 1 : index], + column = that.columns[that.fieldsColumnsIndex[field]], + value = getItemField(item, field, that.options.escape); + + if ($td.find('.detail-icon').length) { + return; + } + + that.trigger(e.type === 'click' ? 'click-cell' : 'dbl-click-cell', field, value, item, $td); + that.trigger(e.type === 'click' ? 'click-row' : 'dbl-click-row', item, $tr, field); + + // if click to select - then trigger the checkbox/radio click + if (e.type === 'click' && that.options.clickToSelect && column.clickToSelect && that.options.ignoreClickToSelectOn(e.target)) { + var $selectItem = $tr.find(sprintf('[name="%s"]', that.options.selectItemName)); + if ($selectItem.length) { + $selectItem[0].click(); // #144: .trigger('click') bug + } + } + }); + + this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click', function (e) { + e.preventDefault(); + + var $this = $(this), + $tr = $this.parent().parent(), + index = $tr.data('index'), + row = data[index]; // Fix #980 Detail view, when searching, returns wrong row + + // remove and update + if ($tr.next().is('tr.detail-view')) { + $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailOpen)); + that.trigger('collapse-row', index, row, $tr.next()); + $tr.next().remove(); + } else { + $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailClose)); + $tr.after(sprintf('', $tr.find('td').length)); + var $element = $tr.next().find('td'); + var content = calculateObjectValue(that.options, that.options.detailFormatter, [index, row, $element], ''); + if ($element.length === 1) { + $element.append(content); + } + that.trigger('expand-row', index, row, $element); + } + that.resetView(); + return false; + }); + + this.$selectItem = this.$body.find(sprintf('[name="%s"]', this.options.selectItemName)); + this.$selectItem.off('click').on('click', function (event) { + event.stopImmediatePropagation(); + + var $this = $(this), + checked = $this.prop('checked'), + row = that.data[$this.data('index')]; + + if ($(this).is(':radio') || that.options.singleSelect) { + $.each(that.options.data, function (i, row) { + row[that.header.stateField] = false; + }); + } + + row[that.header.stateField] = checked; + + if (that.options.singleSelect) { + that.$selectItem.not(this).each(function () { + that.data[$(this).data('index')][that.header.stateField] = false; + }); + that.$selectItem.filter(':checked').not(this).prop('checked', false); + } + + that.updateSelected(); + that.trigger(checked ? 'check' : 'uncheck', row, $this); + }); + + $.each(this.header.events, function (i, events) { + if (!events) { + return; + } + // fix bug, if events is defined with namespace + if (typeof events === 'string') { + events = calculateObjectValue(null, events); + } + + var field = that.header.fields[i], + fieldIndex = $.inArray(field, that.getVisibleFields()); + + if (fieldIndex === -1) { + return; + } + + if (that.options.detailView && !that.options.cardView) { + fieldIndex += 1; + } + + for (var key in events) { + that.$body.find('>tr:not(.no-records-found)').each(function () { + var $tr = $(this), + $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(fieldIndex), + index = key.indexOf(' '), + name = key.substring(0, index), + el = key.substring(index + 1), + func = events[key]; + + $td.find(el).off(name).on(name, function (e) { + var index = $tr.data('index'), + row = that.data[index], + value = row[field]; + + func.apply(this, [e, value, row, index]); + }); + }); + } + }); + + this.updateSelected(); + this.resetView(); + + this.trigger('post-body', data); + }; + + BootstrapTable.prototype.initServer = function (silent, query, url) { + var that = this, + data = {}, + index = $.inArray(this.options.sortName, this.header.fields), + params = { + searchText: this.searchText, + sortName: this.options.sortName, + sortOrder: this.options.sortOrder + }, + request; + + if (this.header.sortNames[index]) { + params.sortName = this.header.sortNames[index]; + } + + if (this.options.pagination && this.options.sidePagination === 'server') { + params.pageSize = this.options.pageSize === this.options.formatAllRows() ? + this.options.totalRows : this.options.pageSize; + params.pageNumber = this.options.pageNumber; + } + + if (!(url || this.options.url) && !this.options.ajax) { + return; + } + + if (this.options.queryParamsType === 'limit') { + params = { + search: params.searchText, + sort: params.sortName, + order: params.sortOrder + }; + + if (this.options.pagination && this.options.sidePagination === 'server') { + params.offset = this.options.pageSize === this.options.formatAllRows() ? + 0 : this.options.pageSize * (this.options.pageNumber - 1); + params.limit = this.options.pageSize === this.options.formatAllRows() ? + this.options.totalRows : this.options.pageSize; + if (params.limit === 0) { + delete params.limit; + } + } + } + + if (!($.isEmptyObject(this.filterColumnsPartial))) { + params.filter = JSON.stringify(this.filterColumnsPartial, null); + } + + data = calculateObjectValue(this.options, this.options.queryParams, [params], data); + + $.extend(data, query || {}); + + // false to stop request + if (data === false) { + return; + } + + if (!silent) { + this.$tableLoading.show(); + } + request = $.extend({}, calculateObjectValue(null, this.options.ajaxOptions), { + type: this.options.method, + url: url || this.options.url, + data: this.options.contentType === 'application/json' && this.options.method === 'post' ? + JSON.stringify(data) : data, + cache: this.options.cache, + contentType: this.options.contentType, + dataType: this.options.dataType, + success: function (res) { + res = calculateObjectValue(that.options, that.options.responseHandler, [res], res); + + that.load(res); + that.trigger('load-success', res); + if (!silent) that.$tableLoading.hide(); + }, + error: function (res) { + var data = []; + if (that.options.sidePagination === 'server') { + data = {}; + data[that.options.totalField] = 0; + data[that.options.dataField] = []; + } + that.load(data); + that.trigger('load-error', res.status, res); + if (!silent) that.$tableLoading.hide(); + } + }); + + if (this.options.ajax) { + calculateObjectValue(this, this.options.ajax, [request], null); + } else { + if (this._xhr && this._xhr.readyState !== 4) { + this._xhr.abort(); + } + this._xhr = $.ajax(request); + } + }; + + BootstrapTable.prototype.initSearchText = function () { + if (this.options.search) { + this.searchText = ''; + if (this.options.searchText !== '') { + var $search = this.$toolbar.find('.search input'); + $search.val(this.options.searchText); + this.onSearch({currentTarget: $search, firedByInitSearchText: true}); + } + } + }; + + BootstrapTable.prototype.getCaret = function () { + var that = this; + + $.each(this.$header.find('th'), function (i, th) { + $(th).find('.sortable').removeClass('desc asc').addClass($(th).data('field') === that.options.sortName ? that.options.sortOrder : 'both'); + }); + }; + + BootstrapTable.prototype.updateSelected = function () { + var checkAll = this.$selectItem.filter(':enabled').length && + this.$selectItem.filter(':enabled').length === + this.$selectItem.filter(':enabled').filter(':checked').length; + + this.$selectAll.add(this.$selectAll_).prop('checked', checkAll); + + this.$selectItem.each(function () { + $(this).closest('tr')[$(this).prop('checked') ? 'addClass' : 'removeClass']('selected'); + }); + }; + + BootstrapTable.prototype.updateRows = function () { + var that = this; + + this.$selectItem.each(function () { + that.data[$(this).data('index')][that.header.stateField] = $(this).prop('checked'); + }); + }; + + BootstrapTable.prototype.resetRows = function () { + var that = this; + + $.each(this.data, function (i, row) { + that.$selectAll.prop('checked', false); + that.$selectItem.prop('checked', false); + if (that.header.stateField) { + row[that.header.stateField] = false; + } + }); + this.initHiddenRows(); + }; + + BootstrapTable.prototype.trigger = function (name) { + var args = Array.prototype.slice.call(arguments, 1); + + name += '.bs.table'; + this.options[BootstrapTable.EVENTS[name]].apply(this.options, args); + this.$el.trigger($.Event(name), args); + + this.options.onAll(name, args); + this.$el.trigger($.Event('all.bs.table'), [name, args]); + }; + + BootstrapTable.prototype.resetHeader = function () { + // fix #61: the hidden table reset header bug. + // fix bug: get $el.css('width') error sometime (height = 500) + clearTimeout(this.timeoutId_); + this.timeoutId_ = setTimeout($.proxy(this.fitHeader, this), this.$el.is(':hidden') ? 100 : 0); + }; + + BootstrapTable.prototype.fitHeader = function () { + var that = this, + fixedBody, + scrollWidth, + focused, + focusedTemp; + + if (that.$el.is(':hidden')) { + that.timeoutId_ = setTimeout($.proxy(that.fitHeader, that), 100); + return; + } + fixedBody = this.$tableBody.get(0); + + scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth && + fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.outerHeight() ? + getScrollBarWidth() : 0; + + this.$el.css('margin-top', -this.$header.outerHeight()); + + focused = $(':focus'); + if (focused.length > 0) { + var $th = focused.parents('th'); + if ($th.length > 0) { + var dataField = $th.attr('data-field'); + if (dataField !== undefined) { + var $headerTh = this.$header.find("[data-field='" + dataField + "']"); + if ($headerTh.length > 0) { + $headerTh.find(":input").addClass("focus-temp"); + } + } + } + } + + this.$header_ = this.$header.clone(true, true); + this.$selectAll_ = this.$header_.find('[name="btSelectAll"]'); + this.$tableHeader.css({ + 'margin-right': scrollWidth + }).find('table').css('width', this.$el.outerWidth()) + .html('').attr('class', this.$el.attr('class')) + .append(this.$header_); + + focusedTemp = $('.focus-temp:visible:eq(0)'); + if (focusedTemp.length > 0) { + focusedTemp.focus(); + this.$header.find('.focus-temp').removeClass('focus-temp'); + } + + // fix bug: $.data() is not working as expected after $.append() + this.$header.find('th[data-field]').each(function (i) { + that.$header_.find(sprintf('th[data-field="%s"]', $(this).data('field'))).data($(this).data()); + }); + + var visibleFields = this.getVisibleFields(), + $ths = this.$header_.find('th'); + + this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) { + var $this = $(this), + index = i; + + if (that.options.detailView && !that.options.cardView) { + if (i === 0) { + that.$header_.find('th.detail').find('.fht-cell').width($this.innerWidth()); + } + index = i - 1; + } + + if (index === -1) { + return; + } + + var $th = that.$header_.find(sprintf('th[data-field="%s"]', visibleFields[index])); + if ($th.length > 1) { + $th = $($ths[$this[0].cellIndex]); + } + + var zoomWidth = $th.width() - $th.find('.fht-cell').width(); + $th.find('.fht-cell').width($this.innerWidth() - zoomWidth); + }); + + this.horizontalScroll(); + this.trigger('post-header'); + }; + + BootstrapTable.prototype.resetFooter = function () { + var that = this, + data = that.getData(), + html = []; + + if (!this.options.showFooter || this.options.cardView) { //do nothing + return; + } + + if (!this.options.cardView && this.options.detailView) { + html.push('
     
    '); + } + + $.each(this.columns, function (i, column) { + var key, + falign = '', // footer align style + valign = '', + csses = [], + style = {}, + class_ = sprintf(' class="%s"', column['class']); + + if (!column.visible) { + return; + } + + if (that.options.cardView && (!column.cardVisible)) { + return; + } + + falign = sprintf('text-align: %s; ', column.falign ? column.falign : column.align); + valign = sprintf('vertical-align: %s; ', column.valign); + + style = calculateObjectValue(null, that.options.footerStyle); + + if (style && style.css) { + for (key in style.css) { + csses.push(key + ': ' + style.css[key]); + } + } + + html.push(''); + html.push('
    '); + + html.push(calculateObjectValue(column, column.footerFormatter, [data], ' ') || ' '); + + html.push('
    '); + html.push('
    '); + html.push(''); + html.push(''); + }); + + this.$tableFooter.find('tr').html(html.join('')); + this.$tableFooter.show(); + clearTimeout(this.timeoutFooter_); + this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this), + this.$el.is(':hidden') ? 100 : 0); + }; + + BootstrapTable.prototype.fitFooter = function () { + var that = this, + $footerTd, + elWidth, + scrollWidth; + + clearTimeout(this.timeoutFooter_); + if (this.$el.is(':hidden')) { + this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this), 100); + return; + } + + elWidth = this.$el.css('width'); + scrollWidth = elWidth > this.$tableBody.width() ? getScrollBarWidth() : 0; + + this.$tableFooter.css({ + 'margin-right': scrollWidth + }).find('table').css('width', elWidth) + .attr('class', this.$el.attr('class')); + + $footerTd = this.$tableFooter.find('td'); + + this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) { + var $this = $(this); + + $footerTd.eq(i).find('.fht-cell').width($this.innerWidth()); + }); + + this.horizontalScroll(); + }; + + BootstrapTable.prototype.horizontalScroll = function () { + var that = this; + // horizontal scroll event + // TODO: it's probably better improving the layout than binding to scroll event + + that.trigger('scroll-body'); + this.$tableBody.off('scroll').on('scroll', function () { + if (that.options.showHeader && that.options.height) { + that.$tableHeader.scrollLeft($(this).scrollLeft()); + } + + if (that.options.showFooter && !that.options.cardView) { + that.$tableFooter.scrollLeft($(this).scrollLeft()); + } + }); + }; + + BootstrapTable.prototype.toggleColumn = function (index, checked, needUpdate) { + if (index === -1) { + return; + } + this.columns[index].visible = checked; + this.initHeader(); + this.initSearch(); + this.initPagination(); + this.initBody(); + + if (this.options.showColumns) { + var $items = this.$toolbar.find('.keep-open input').prop('disabled', false); + + if (needUpdate) { + $items.filter(sprintf('[value="%s"]', index)).prop('checked', checked); + } + + if ($items.filter(':checked').length <= this.options.minimumCountColumns) { + $items.filter(':checked').prop('disabled', true); + } + } + }; + + BootstrapTable.prototype.getVisibleFields = function () { + var that = this, + visibleFields = []; + + $.each(this.header.fields, function (j, field) { + var column = that.columns[that.fieldsColumnsIndex[field]]; + + if (!column.visible) { + return; + } + visibleFields.push(field); + }); + return visibleFields; + }; + + // PUBLIC FUNCTION DEFINITION + // ======================= + + BootstrapTable.prototype.resetView = function (params) { + var padding = 0; + + if (params && params.height) { + this.options.height = params.height; + } + + this.$selectAll.prop('checked', this.$selectItem.length > 0 && + this.$selectItem.length === this.$selectItem.filter(':checked').length); + + if (this.options.height) { + var toolbarHeight = this.$toolbar.outerHeight(true), + paginationHeight = this.$pagination.outerHeight(true), + height = this.options.height - toolbarHeight - paginationHeight; + + this.$tableContainer.css('height', height + 'px'); + } + + if (this.options.cardView) { + // remove the element css + this.$el.css('margin-top', '0'); + this.$tableContainer.css('padding-bottom', '0'); + this.$tableFooter.hide(); + return; + } + + if (this.options.showHeader && this.options.height) { + this.$tableHeader.show(); + this.resetHeader(); + padding += this.$header.outerHeight(); + } else { + this.$tableHeader.hide(); + this.trigger('post-header'); + } + + if (this.options.showFooter) { + this.resetFooter(); + if (this.options.height) { + padding += this.$tableFooter.outerHeight() + 1; + } + } + + // Assign the correct sortable arrow + this.getCaret(); + this.$tableContainer.css('padding-bottom', padding + 'px'); + this.trigger('reset-view'); + }; + + BootstrapTable.prototype.getData = function (useCurrentPage) { + var data = this.options.data; + if (this.searchText || this.options.sortName || !$.isEmptyObject(this.filterColumns) || !$.isEmptyObject(this.filterColumnsPartial)) { + data = this.data; + } + + if (useCurrentPage) { + return data.slice(this.pageFrom - 1, this.pageTo); + } + + return data; + }; + + BootstrapTable.prototype.load = function (data) { + var fixedScroll = false; + + // #431: support pagination + if (this.options.pagination && this.options.sidePagination === 'server') { + this.options.totalRows = data[this.options.totalField]; + fixedScroll = data.fixedScroll; + data = data[this.options.dataField]; + } else if (!$.isArray(data)) { // support fixedScroll + fixedScroll = data.fixedScroll; + data = data.data; + } + + this.initData(data); + this.initSearch(); + this.initPagination(); + this.initBody(fixedScroll); + }; + + BootstrapTable.prototype.append = function (data) { + this.initData(data, 'append'); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.prepend = function (data) { + this.initData(data, 'prepend'); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.remove = function (params) { + var len = this.options.data.length, + i, row; + + if (!params.hasOwnProperty('field') || !params.hasOwnProperty('values')) { + return; + } + + for (i = len - 1; i >= 0; i--) { + row = this.options.data[i]; + + if (!row.hasOwnProperty(params.field)) { + continue; + } + if ($.inArray(row[params.field], params.values) !== -1) { + this.options.data.splice(i, 1); + if (this.options.sidePagination === 'server') { + this.options.totalRows -= 1; + } + } + } + + if (len === this.options.data.length) { + return; + } + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.removeAll = function () { + if (this.options.data.length > 0) { + this.options.data.splice(0, this.options.data.length); + this.initSearch(); + this.initPagination(); + this.initBody(true); + } + }; + + BootstrapTable.prototype.getRowByUniqueId = function (id) { + var uniqueId = this.options.uniqueId, + len = this.options.data.length, + dataRow = null, + i, row, rowUniqueId; + + for (i = len - 1; i >= 0; i--) { + row = this.options.data[i]; + + if (row.hasOwnProperty(uniqueId)) { // uniqueId is a column + rowUniqueId = row[uniqueId]; + } else if(row._data.hasOwnProperty(uniqueId)) { // uniqueId is a row data property + rowUniqueId = row._data[uniqueId]; + } else { + continue; + } + + if (typeof rowUniqueId === 'string') { + id = id.toString(); + } else if (typeof rowUniqueId === 'number') { + if ((Number(rowUniqueId) === rowUniqueId) && (rowUniqueId % 1 === 0)) { + id = parseInt(id); + } else if ((rowUniqueId === Number(rowUniqueId)) && (rowUniqueId !== 0)) { + id = parseFloat(id); + } + } + + if (rowUniqueId === id) { + dataRow = row; + break; + } + } + + return dataRow; + }; + + BootstrapTable.prototype.removeByUniqueId = function (id) { + var len = this.options.data.length, + row = this.getRowByUniqueId(id); + + if (row) { + this.options.data.splice(this.options.data.indexOf(row), 1); + } + + if (len === this.options.data.length) { + return; + } + + this.initSearch(); + this.initPagination(); + this.initBody(true); + }; + + BootstrapTable.prototype.updateByUniqueId = function (params) { + var that = this; + var allParams = $.isArray(params) ? params : [ params ]; + + $.each(allParams, function(i, params) { + var rowId; + + if (!params.hasOwnProperty('id') || !params.hasOwnProperty('row')) { + return; + } + + rowId = $.inArray(that.getRowByUniqueId(params.id), that.options.data); + + if (rowId === -1) { + return; + } + $.extend(that.options.data[rowId], params.row); + }); + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.refreshColumnTitle = function (params) { + if (!params.hasOwnProperty('field') || !params.hasOwnProperty('title')) { + return; + } + + this.columns[this.fieldsColumnsIndex[params.field]].title = + this.options.escape ? escapeHTML(params.title) : params.title; + + if (this.columns[this.fieldsColumnsIndex[params.field]].visible) { + var header = this.options.height !== undefined ? this.$tableHeader : this.$header; + header.find('th[data-field]').each(function (i) { + if ($(this).data('field') === params.field) { + $($(this).find(".th-inner")[0]).text(params.title); + return false; + } + }); + } + }; + + BootstrapTable.prototype.insertRow = function (params) { + if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) { + return; + } + this.options.data.splice(params.index, 0, params.row); + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.updateRow = function (params) { + var that = this; + var allParams = $.isArray(params) ? params : [ params ]; + + $.each(allParams, function(i, params) { + if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) { + return; + } + $.extend(that.options.data[params.index], params.row); + }); + + this.initSearch(); + this.initPagination(); + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.initHiddenRows = function () { + this.hiddenRows = []; + }; + + BootstrapTable.prototype.showRow = function (params) { + this.toggleRow(params, true); + }; + + BootstrapTable.prototype.hideRow = function (params) { + this.toggleRow(params, false); + }; + + BootstrapTable.prototype.toggleRow = function (params, visible) { + var row, index; + + if (params.hasOwnProperty('index')) { + row = this.getData()[params.index]; + } else if (params.hasOwnProperty('uniqueId')) { + row = this.getRowByUniqueId(params.uniqueId); + } + + if (!row) { + return; + } + + index = $.inArray(row, this.hiddenRows); + + if (!visible && index === -1) { + this.hiddenRows.push(row); + } else if (visible && index > -1) { + this.hiddenRows.splice(index, 1); + } + this.initBody(true); + }; + + BootstrapTable.prototype.getHiddenRows = function (show) { + var that = this, + data = this.getData(), + rows = []; + + $.each(data, function (i, row) { + if ($.inArray(row, that.hiddenRows) > -1) { + rows.push(row); + } + }); + this.hiddenRows = rows; + return rows; + }; + + BootstrapTable.prototype.mergeCells = function (options) { + var row = options.index, + col = $.inArray(options.field, this.getVisibleFields()), + rowspan = options.rowspan || 1, + colspan = options.colspan || 1, + i, j, + $tr = this.$body.find('>tr'), + $td; + + if (this.options.detailView && !this.options.cardView) { + col += 1; + } + + $td = $tr.eq(row).find('>td').eq(col); + + if (row < 0 || col < 0 || row >= this.data.length) { + return; + } + + for (i = row; i < row + rowspan; i++) { + for (j = col; j < col + colspan; j++) { + $tr.eq(i).find('>td').eq(j).hide(); + } + } + + $td.attr('rowspan', rowspan).attr('colspan', colspan).show(); + }; + + BootstrapTable.prototype.updateCell = function (params) { + if (!params.hasOwnProperty('index') || + !params.hasOwnProperty('field') || + !params.hasOwnProperty('value')) { + return; + } + this.data[params.index][params.field] = params.value; + + if (params.reinit === false) { + return; + } + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.updateCellById = function (params) { + var that = this; + if (!params.hasOwnProperty('id') || + !params.hasOwnProperty('field') || + !params.hasOwnProperty('value')) { + return; + } + var allParams = $.isArray(params) ? params : [ params ]; + + $.each(allParams, function(i, params) { + var rowId; + + rowId = $.inArray(that.getRowByUniqueId(params.id), that.options.data); + + if (rowId === -1) { + return; + } + that.data[rowId][params.field] = params.value; + }); + + if (params.reinit === false) { + return; + } + this.initSort(); + this.initBody(true); + }; + + BootstrapTable.prototype.getOptions = function () { + //Deep copy + return $.extend(true, {}, this.options); + }; + + BootstrapTable.prototype.getSelections = function () { + var that = this; + + return $.grep(this.options.data, function (row) { + // fix #2424: from html with checkbox + return row[that.header.stateField] === true; + }); + }; + + BootstrapTable.prototype.getAllSelections = function () { + var that = this; + + return $.grep(this.options.data, function (row) { + return row[that.header.stateField]; + }); + }; + + BootstrapTable.prototype.checkAll = function () { + this.checkAll_(true); + }; + + BootstrapTable.prototype.uncheckAll = function () { + this.checkAll_(false); + }; + + BootstrapTable.prototype.checkInvert = function () { + var that = this; + var rows = that.$selectItem.filter(':enabled'); + var checked = rows.filter(':checked'); + rows.each(function() { + $(this).prop('checked', !$(this).prop('checked')); + }); + that.updateRows(); + that.updateSelected(); + that.trigger('uncheck-some', checked); + checked = that.getSelections(); + that.trigger('check-some', checked); + }; + + BootstrapTable.prototype.checkAll_ = function (checked) { + var rows; + if (!checked) { + rows = this.getSelections(); + } + this.$selectAll.add(this.$selectAll_).prop('checked', checked); + this.$selectItem.filter(':enabled').prop('checked', checked); + this.updateRows(); + if (checked) { + rows = this.getSelections(); + } + this.trigger(checked ? 'check-all' : 'uncheck-all', rows); + }; + + BootstrapTable.prototype.check = function (index) { + this.check_(true, index); + }; + + BootstrapTable.prototype.uncheck = function (index) { + this.check_(false, index); + }; + + BootstrapTable.prototype.check_ = function (checked, index) { + var $el = this.$selectItem.filter(sprintf('[data-index="%s"]', index)).prop('checked', checked); + this.data[index][this.header.stateField] = checked; + this.updateSelected(); + this.trigger(checked ? 'check' : 'uncheck', this.data[index], $el); + }; + + BootstrapTable.prototype.checkBy = function (obj) { + this.checkBy_(true, obj); + }; + + BootstrapTable.prototype.uncheckBy = function (obj) { + this.checkBy_(false, obj); + }; + + BootstrapTable.prototype.checkBy_ = function (checked, obj) { + if (!obj.hasOwnProperty('field') || !obj.hasOwnProperty('values')) { + return; + } + + var that = this, + rows = []; + $.each(this.options.data, function (index, row) { + if (!row.hasOwnProperty(obj.field)) { + return false; + } + if ($.inArray(row[obj.field], obj.values) !== -1) { + var $el = that.$selectItem.filter(':enabled') + .filter(sprintf('[data-index="%s"]', index)).prop('checked', checked); + row[that.header.stateField] = checked; + rows.push(row); + that.trigger(checked ? 'check' : 'uncheck', row, $el); + } + }); + this.updateSelected(); + this.trigger(checked ? 'check-some' : 'uncheck-some', rows); + }; + + BootstrapTable.prototype.destroy = function () { + this.$el.insertBefore(this.$container); + $(this.options.toolbar).insertBefore(this.$el); + this.$container.next().remove(); + this.$container.remove(); + this.$el.html(this.$el_.html()) + .css('margin-top', '0') + .attr('class', this.$el_.attr('class') || ''); // reset the class + }; + + BootstrapTable.prototype.showLoading = function () { + this.$tableLoading.show(); + }; + + BootstrapTable.prototype.hideLoading = function () { + this.$tableLoading.hide(); + }; + + BootstrapTable.prototype.togglePagination = function () { + this.options.pagination = !this.options.pagination; + var button = this.$toolbar.find('button[name="paginationSwitch"] i'); + if (this.options.pagination) { + button.attr("class", this.options.iconsPrefix + " " + this.options.icons.paginationSwitchDown); + } else { + button.attr("class", this.options.iconsPrefix + " " + this.options.icons.paginationSwitchUp); + } + this.updatePagination(); + }; + + BootstrapTable.prototype.toggleFullscreen = function () { + this.$el.closest('.bootstrap-table').toggleClass('fullscreen'); + }; + + BootstrapTable.prototype.refresh = function (params) { + if (params && params.url) { + this.options.url = params.url; + } + if (params && params.pageNumber) { + this.options.pageNumber = params.pageNumber; + } + if (params && params.pageSize) { + this.options.pageSize = params.pageSize; + } + this.initServer(params && params.silent, + params && params.query, params && params.url); + this.trigger('refresh', params); + }; + + BootstrapTable.prototype.resetWidth = function () { + if (this.options.showHeader && this.options.height) { + this.fitHeader(); + } + if (this.options.showFooter && !this.options.cardView) { + this.fitFooter(); + } + }; + + BootstrapTable.prototype.showColumn = function (field) { + this.toggleColumn(this.fieldsColumnsIndex[field], true, true); + }; + + BootstrapTable.prototype.hideColumn = function (field) { + this.toggleColumn(this.fieldsColumnsIndex[field], false, true); + }; + + BootstrapTable.prototype.getHiddenColumns = function () { + return $.grep(this.columns, function (column) { + return !column.visible; + }); + }; + + BootstrapTable.prototype.getVisibleColumns = function () { + return $.grep(this.columns, function (column) { + return column.visible; + }); + }; + + BootstrapTable.prototype.toggleAllColumns = function (visible) { + var that = this; + $.each(this.columns, function (i, column) { + that.columns[i].visible = visible; + }); + + this.initHeader(); + this.initSearch(); + this.initPagination(); + this.initBody(); + if (this.options.showColumns) { + var $items = this.$toolbar.find('.keep-open input').prop('disabled', false); + + if ($items.filter(':checked').length <= this.options.minimumCountColumns) { + $items.filter(':checked').prop('disabled', true); + } + } + }; + + BootstrapTable.prototype.showAllColumns = function () { + this.toggleAllColumns(true); + }; + + BootstrapTable.prototype.hideAllColumns = function () { + this.toggleAllColumns(false); + }; + + BootstrapTable.prototype.filterBy = function (columns) { + this.filterColumns = $.isEmptyObject(columns) ? {} : columns; + this.options.pageNumber = 1; + this.initSearch(); + this.updatePagination(); + }; + + BootstrapTable.prototype.scrollTo = function (value) { + if (typeof value === 'string') { + value = value === 'bottom' ? this.$tableBody[0].scrollHeight : 0; + } + if (typeof value === 'number') { + this.$tableBody.scrollTop(value); + } + if (typeof value === 'undefined') { + return this.$tableBody.scrollTop(); + } + }; + + BootstrapTable.prototype.getScrollPosition = function () { + return this.scrollTo(); + }; + + BootstrapTable.prototype.selectPage = function (page) { + if (page > 0 && page <= this.options.totalPages) { + this.options.pageNumber = page; + this.updatePagination(); + } + }; + + BootstrapTable.prototype.prevPage = function () { + if (this.options.pageNumber > 1) { + this.options.pageNumber--; + this.updatePagination(); + } + }; + + BootstrapTable.prototype.nextPage = function () { + if (this.options.pageNumber < this.options.totalPages) { + this.options.pageNumber++; + this.updatePagination(); + } + }; + + BootstrapTable.prototype.toggleView = function () { + this.options.cardView = !this.options.cardView; + this.initHeader(); + // Fixed remove toolbar when click cardView button. + //that.initToolbar(); + var $icon = this.$toolbar.find('button[name="toggle"] i'); + if (this.options.cardView) { + $icon.removeClass(this.options.icons.toggleOff); + $icon.addClass(this.options.icons.toggleOn); + } else { + $icon.removeClass(this.options.icons.toggleOn); + $icon.addClass(this.options.icons.toggleOff); + } + this.initBody(); + this.trigger('toggle', this.options.cardView); + }; + + BootstrapTable.prototype.refreshOptions = function (options) { + //If the objects are equivalent then avoid the call of destroy / init methods + if (compareObjects(this.options, options, true)) { + return; + } + this.options = $.extend(this.options, options); + this.trigger('refresh-options', this.options); + this.destroy(); + this.init(); + }; + + BootstrapTable.prototype.resetSearch = function (text) { + var $search = this.$toolbar.find('.search input'); + $search.val(text || ''); + this.onSearch({currentTarget: $search}); + }; + + BootstrapTable.prototype.expandRow_ = function (expand, index) { + var $tr = this.$body.find(sprintf('> tr[data-index="%s"]', index)); + if ($tr.next().is('tr.detail-view') === (expand ? false : true)) { + $tr.find('> td > .detail-icon').click(); + } + }; + + BootstrapTable.prototype.expandRow = function (index) { + this.expandRow_(true, index); + }; + + BootstrapTable.prototype.collapseRow = function (index) { + this.expandRow_(false, index); + }; + + BootstrapTable.prototype.expandAllRows = function (isSubTable) { + if (isSubTable) { + var $tr = this.$body.find(sprintf('> tr[data-index="%s"]', 0)), + that = this, + detailIcon = null, + executeInterval = false, + idInterval = -1; + + if (!$tr.next().is('tr.detail-view')) { + $tr.find('> td > .detail-icon').click(); + executeInterval = true; + } else if (!$tr.next().next().is('tr.detail-view')) { + $tr.next().find(".detail-icon").click(); + executeInterval = true; + } + + if (executeInterval) { + try { + idInterval = setInterval(function () { + detailIcon = that.$body.find("tr.detail-view").last().find(".detail-icon"); + if (detailIcon.length > 0) { + detailIcon.click(); + } else { + clearInterval(idInterval); + } + }, 1); + } catch (ex) { + clearInterval(idInterval); + } + } + } else { + var trs = this.$body.children(); + for (var i = 0; i < trs.length; i++) { + this.expandRow_(true, $(trs[i]).data("index")); + } + } + }; + + BootstrapTable.prototype.collapseAllRows = function (isSubTable) { + if (isSubTable) { + this.expandRow_(false, 0); + } else { + var trs = this.$body.children(); + for (var i = 0; i < trs.length; i++) { + this.expandRow_(false, $(trs[i]).data("index")); + } + } + }; + + BootstrapTable.prototype.updateFormatText = function (name, text) { + if (this.options[sprintf('format%s', name)]) { + if (typeof text === 'string') { + this.options[sprintf('format%s', name)] = function () { + return text; + }; + } else if (typeof text === 'function') { + this.options[sprintf('format%s', name)] = text; + } + } + this.initToolbar(); + this.initPagination(); + this.initBody(); + }; + + // BOOTSTRAP TABLE PLUGIN DEFINITION + // ======================= + + var allowedMethods = [ + 'getOptions', + 'getSelections', 'getAllSelections', 'getData', + 'load', 'append', 'prepend', 'remove', 'removeAll', + 'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId', + 'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows', + 'mergeCells', 'refreshColumnTitle', + 'checkAll', 'uncheckAll', 'checkInvert', + 'check', 'uncheck', + 'checkBy', 'uncheckBy', + 'refresh', + 'resetView', + 'resetWidth', + 'destroy', + 'showLoading', 'hideLoading', + 'showColumn', 'hideColumn', 'getHiddenColumns', 'getVisibleColumns', + 'showAllColumns', 'hideAllColumns', + 'filterBy', + 'scrollTo', + 'getScrollPosition', + 'selectPage', 'prevPage', 'nextPage', + 'togglePagination', + 'toggleView', + 'refreshOptions', + 'resetSearch', + 'expandRow', 'collapseRow', 'expandAllRows', 'collapseAllRows', + 'updateFormatText', 'updateCellById' + ]; + + $.fn.bootstrapTable = function (option) { + var value, + args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var $this = $(this), + data = $this.data('bootstrap.table'), + options = $.extend({}, BootstrapTable.DEFAULTS, $this.data(), + typeof option === 'object' && option); + + if (typeof option === 'string') { + if ($.inArray(option, allowedMethods) < 0) { + throw new Error("Unknown method: " + option); + } + + if (!data) { + return; + } + + value = data[option].apply(data, args); + + if (option === 'destroy') { + $this.removeData('bootstrap.table'); + } + } + + if (!data) { + $this.data('bootstrap.table', (data = new BootstrapTable(this, options))); + } + }); + + return typeof value === 'undefined' ? this : value; + }; + + $.fn.bootstrapTable.Constructor = BootstrapTable; + $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS; + $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS; + $.fn.bootstrapTable.locales = BootstrapTable.LOCALES; + $.fn.bootstrapTable.methods = allowedMethods; + $.fn.bootstrapTable.utils = { + bootstrapVersion: bootstrapVersion, + sprintf: sprintf, + compareObjects: compareObjects, + calculateObjectValue: calculateObjectValue, + getItemField: getItemField, + objectKeys: objectKeys, + isIEBrowser: isIEBrowser + }; + + // BOOTSTRAP TABLE INIT + // ======================= + + $(function () { + $('[data-toggle="table"]').bootstrapTable(); + }); +})(jQuery); diff --git a/public/lib/bootstrap/bootstrap-table/bootstrap-table.min.js b/public/lib/bootstrap/bootstrap-table/bootstrap-table.min.js new file mode 100644 index 0000000..ae407d4 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/bootstrap-table.min.js @@ -0,0 +1,9 @@ +/* +* bootstrap-table - v1.12.1 - 2018-03-12 +* https://github.com/wenzhixin/bootstrap-table +* Copyright (c) 2018 zhixin wen +* Licensed MIT License +*/ +!function(a){"use strict";var b=3;try{b=parseInt(a.fn.dropdown.Constructor.VERSION,10)}catch(c){}var d={3:{buttonsClass:"default",iconsPrefix:"glyphicon",icons:{paginationSwitchDown:"glyphicon-collapse-down icon-chevron-down",paginationSwitchUp:"glyphicon-collapse-up icon-chevron-up",refresh:"glyphicon-refresh icon-refresh",toggleOff:"glyphicon-list-alt icon-list-alt",toggleOn:"glyphicon-list-alt icon-list-alt",columns:"glyphicon-th icon-th",detailOpen:"glyphicon-plus icon-plus",detailClose:"glyphicon-minus icon-minus",fullscreen:"glyphicon-fullscreen"},pullClass:"pull",toobarDropdowHtml:['"],toobarDropdowItemHtml:'
  • ',pageDropdownHtml:['"],pageDropdownItemHtml:''},4:{buttonsClass:"secondary",iconsPrefix:"fa",icons:{paginationSwitchDown:"fa-toggle-down",paginationSwitchUp:"fa-toggle-up",refresh:"fa-refresh",toggleOff:"fa-toggle-off",toggleOn:"fa-toggle-on",columns:"fa-th-list",detailOpen:"fa-plus",detailClose:"fa-minus",fullscreen:"fa-arrows-alt"},pullClass:"float",toobarDropdowHtml:['"],toobarDropdowItemHtml:'',pageDropdownHtml:['"],pageDropdownItemHtml:'%s'}}[b],e=null,f=function(a){var b=arguments,c=!0,d=1;return a=a.replace(/%s/g,function(){var a=b[d++];return"undefined"==typeof a?(c=!1,""):a}),c?a:""},g=function(b,c,d,e){var f="";return a.each(b,function(a,b){return b[c]===e?(f=b[d],!1):!0}),f},h=function(b){var c,d,e,f=0,g=[];for(c=0;cd;d++)g[c][d]=!1;for(c=0;ce;e++)g[c+e][k]=!0;for(e=0;j>e;e++)g[c][k+e]=!0}},i=function(){if(null===e){var b,c,d=a("

    ").addClass("fixed-table-scroll-inner"),f=a("

    ").addClass("fixed-table-scroll-outer");f.append(d),a("body").append(f),b=d[0].offsetWidth,f.css("overflow","scroll"),c=d[0].offsetWidth,b===c&&(c=f[0].clientWidth),f.remove(),e=b-c}return e},j=function(b,c,d,e){var g=c;if("string"==typeof c){var h=c.split(".");h.length>1?(g=window,a.each(h,function(a,b){g=g[b]})):g=window[c]}return"object"==typeof g?g:"function"==typeof g?g.apply(b,d||[]):!g&&"string"==typeof c&&f.apply(this,[c].concat(d))?f.apply(this,[c].concat(d)):e},k=function(b,c,d){var e=Object.getOwnPropertyNames||function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},f=e(b),g=e(c),h="";if(d&&f.length!==g.length)return!1;for(var i=0;i-1&&b[h]!==c[h])return!1;return!0},l=function(a){return"string"==typeof a?a.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/`/g,"`"):a},m=function(a){for(var b in a){var c=b.split(/(?=[A-Z])/).join("-").toLowerCase();c!==b&&(a[c]=a[b],delete a[b])}return a},n=function(a,b,c){var d=a;if("string"!=typeof b||a.hasOwnProperty(b))return c?l(a[b]):a[b];var e=b.split(".");for(var f in e)e.hasOwnProperty(f)&&(d=d&&d[e[f]]);return c?l(d):d},o=function(){return!!(navigator.userAgent.indexOf("MSIE ")>0||navigator.userAgent.match(/Trident.*rv\:11\./))},p=function(){Object.keys||(Object.keys=function(){var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=c.length;return function(e){if("object"!=typeof e&&("function"!=typeof e||null===e))throw new TypeError("Object.keys called on non-object");var f,g,h=[];for(f in e)a.call(e,f)&&h.push(f);if(b)for(g=0;d>g;g++)a.call(e,c[g])&&h.push(c[g]);return h}}())},q=function(b,c){this.options=c,this.$el=a(b),this.$el_=this.$el.clone(),this.timeoutId_=0,this.timeoutFooter_=0,this.init()};q.DEFAULTS={classes:"table table-hover",sortClass:void 0,locale:void 0,height:void 0,undefinedText:"-",sortName:void 0,sortOrder:"asc",sortStable:!1,rememberOrder:!1,striped:!1,columns:[[]],data:[],totalField:"total",dataField:"rows",method:"get",url:void 0,ajax:void 0,cache:!0,contentType:"application/json",dataType:"json",ajaxOptions:{},queryParams:function(a){return a},queryParamsType:"limit",responseHandler:function(a){return a},pagination:!1,onlyInfoPagination:!1,paginationLoop:!0,sidePagination:"client",totalRows:0,pageNumber:1,pageSize:10,pageList:[10,25,50,100],paginationHAlign:"right",paginationVAlign:"bottom",paginationDetailHAlign:"left",paginationPreText:"‹",paginationNextText:"›",search:!1,searchOnEnterKey:!1,strictSearch:!1,searchAlign:"right",selectItemName:"btSelectItem",showHeader:!0,showFooter:!1,showColumns:!1,showPaginationSwitch:!1,showRefresh:!1,showToggle:!1,showFullscreen:!1,smartDisplay:!0,escape:!1,minimumCountColumns:1,idField:void 0,uniqueId:void 0,cardView:!1,detailView:!1,detailFormatter:function(){return""},detailFilter:function(){return!0},trimOnSearch:!0,clickToSelect:!1,singleSelect:!1,toolbar:void 0,toolbarAlign:"left",buttonsToolbar:void 0,buttonsAlign:"right",checkboxHeader:!0,sortable:!0,silentSort:!0,maintainSelected:!1,searchTimeOut:500,searchText:"",iconSize:void 0,buttonsClass:d.buttonsClass,iconsPrefix:d.iconsPrefix,icons:d.icons,customSearch:a.noop,customSort:a.noop,ignoreClickToSelectOn:function(b){return a.inArray(b.tagName,["A","BUTTON"])},rowStyle:function(){return{}},rowAttributes:function(){return{}},footerStyle:function(){return{}},onAll:function(){return!1},onClickCell:function(){return!1},onDblClickCell:function(){return!1},onClickRow:function(){return!1},onDblClickRow:function(){return!1},onSort:function(){return!1},onCheck:function(){return!1},onUncheck:function(){return!1},onCheckAll:function(){return!1},onUncheckAll:function(){return!1},onCheckSome:function(){return!1},onUncheckSome:function(){return!1},onLoadSuccess:function(){return!1},onLoadError:function(){return!1},onColumnSwitch:function(){return!1},onPageChange:function(){return!1},onSearch:function(){return!1},onToggle:function(){return!1},onPreBody:function(){return!1},onPostBody:function(){return!1},onPostHeader:function(){return!1},onExpandRow:function(){return!1},onCollapseRow:function(){return!1},onRefreshOptions:function(){return!1},onRefresh:function(){return!1},onResetView:function(){return!1},onScrollBody:function(){return!1}},q.LOCALES={},q.LOCALES["en-US"]=q.LOCALES.en={formatLoadingMessage:function(){return"Loading, please wait..."},formatRecordsPerPage:function(a){return f("%s rows per page",a)},formatShowingRows:function(a,b,c){return f("Showing %s to %s of %s rows",a,b,c)},formatDetailPagination:function(a){return f("Showing %s rows",a)},formatSearch:function(){return"Search"},formatNoMatches:function(){return"No matching records found"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatRefresh:function(){return"Refresh"},formatToggle:function(){return"Toggle"},formatFullscreen:function(){return"Fullscreen"},formatColumns:function(){return"Columns"},formatAllRows:function(){return"All"}},a.extend(q.DEFAULTS,q.LOCALES["en-US"]),q.COLUMN_DEFAULTS={radio:!1,checkbox:!1,checkboxEnabled:!0,field:void 0,title:void 0,titleTooltip:void 0,"class":void 0,align:void 0,halign:void 0,falign:void 0,valign:void 0,width:void 0,sortable:!1,order:"asc",visible:!0,switchable:!0,clickToSelect:!0,formatter:void 0,footerFormatter:void 0,events:void 0,sorter:void 0,sortName:void 0,cellStyle:void 0,searchable:!0,searchFormatter:!0,cardVisible:!0,escape:!1,showSelectTitle:!1},q.EVENTS={"all.bs.table":"onAll","click-cell.bs.table":"onClickCell","dbl-click-cell.bs.table":"onDblClickCell","click-row.bs.table":"onClickRow","dbl-click-row.bs.table":"onDblClickRow","sort.bs.table":"onSort","check.bs.table":"onCheck","uncheck.bs.table":"onUncheck","check-all.bs.table":"onCheckAll","uncheck-all.bs.table":"onUncheckAll","check-some.bs.table":"onCheckSome","uncheck-some.bs.table":"onUncheckSome","load-success.bs.table":"onLoadSuccess","load-error.bs.table":"onLoadError","column-switch.bs.table":"onColumnSwitch","page-change.bs.table":"onPageChange","search.bs.table":"onSearch","toggle.bs.table":"onToggle","pre-body.bs.table":"onPreBody","post-body.bs.table":"onPostBody","post-header.bs.table":"onPostHeader","expand-row.bs.table":"onExpandRow","collapse-row.bs.table":"onCollapseRow","refresh-options.bs.table":"onRefreshOptions","reset-view.bs.table":"onResetView","refresh.bs.table":"onRefresh","scroll-body.bs.table":"onScrollBody"},q.prototype.init=function(){this.initLocale(),this.initContainer(),this.initTable(),this.initHeader(),this.initData(),this.initHiddenRows(),this.initFooter(),this.initToolbar(),this.initPagination(),this.initBody(),this.initSearchText(),this.initServer()},q.prototype.initLocale=function(){if(this.options.locale){var b=this.options.locale.split(/-|_/);b[0].toLowerCase(),b[1]&&b[1].toUpperCase(),a.fn.bootstrapTable.locales[this.options.locale]?a.extend(this.options,a.fn.bootstrapTable.locales[this.options.locale]):a.fn.bootstrapTable.locales[b.join("-")]?a.extend(this.options,a.fn.bootstrapTable.locales[b.join("-")]):a.fn.bootstrapTable.locales[b[0]]&&a.extend(this.options,a.fn.bootstrapTable.locales[b[0]])}},q.prototype.initContainer=function(){this.$container=a(['
    ','
    ',"top"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?'
    ':"",'
    ','
    ','
    ','
    ',this.options.formatLoadingMessage(),"
    ","
    ",'',"
    ","bottom"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?'
    ':"","
    "].join("")),this.$container.insertAfter(this.$el),this.$tableContainer=this.$container.find(".fixed-table-container"),this.$tableHeader=this.$container.find(".fixed-table-header"),this.$tableBody=this.$container.find(".fixed-table-body"),this.$tableLoading=this.$container.find(".fixed-table-loading"),this.$tableFooter=this.$container.find(".fixed-table-footer"),this.$toolbar=this.options.buttonsToolbar?a("body").find(this.options.buttonsToolbar):this.$container.find(".fixed-table-toolbar"),this.$pagination=this.$container.find(".fixed-table-pagination"),this.$tableBody.append(this.$el),this.$container.after('
    '),this.$el.addClass(this.options.classes),this.options.striped&&this.$el.addClass("table-striped"),-1!==a.inArray("table-no-bordered",this.options.classes.split(" "))&&this.$tableContainer.addClass("table-no-bordered")},q.prototype.initTable=function(){var b=this,c=[],d=[];if(this.$header=this.$el.find(">thead"),this.$header.length||(this.$header=a("").appendTo(this.$el)),this.$header.find("tr").each(function(){var b=[];a(this).find("th").each(function(){"undefined"!=typeof a(this).data("field")&&a(this).data("field",a(this).data("field")+""),b.push(a.extend({},{title:a(this).html(),"class":a(this).attr("class"),titleTooltip:a(this).attr("title"),rowspan:a(this).attr("rowspan")?+a(this).attr("rowspan"):void 0,colspan:a(this).attr("colspan")?+a(this).attr("colspan"):void 0},a(this).data()))}),c.push(b)}),a.isArray(this.options.columns[0])||(this.options.columns=[this.options.columns]),this.options.columns=a.extend(!0,[],c,this.options.columns),this.columns=[],this.fieldsColumnsIndex=[],h(this.options.columns),a.each(this.options.columns,function(c,d){a.each(d,function(d,e){e=a.extend({},q.COLUMN_DEFAULTS,e),"undefined"!=typeof e.fieldIndex&&(b.columns[e.fieldIndex]=e,b.fieldsColumnsIndex[e.field]=e.fieldIndex),b.options.columns[c][d]=e})}),!this.options.data.length){var e=[];this.$el.find(">tbody>tr").each(function(c){var f={};f._id=a(this).attr("id"),f._class=a(this).attr("class"),f._data=m(a(this).data()),a(this).find(">td").each(function(d){for(var g,h,i=a(this),j=+i.attr("colspan")||1,k=+i.attr("rowspan")||1;e[c]&&e[c][d];d++);for(g=d;d+j>g;g++)for(h=c;c+k>h;h++)e[h]||(e[h]=[]),e[h][g]=!0;var l=b.columns[d].field;f[l]=a(this).html(),f["_"+l+"_id"]=a(this).attr("id"),f["_"+l+"_class"]=a(this).attr("class"),f["_"+l+"_rowspan"]=a(this).attr("rowspan"),f["_"+l+"_colspan"]=a(this).attr("colspan"),f["_"+l+"_title"]=a(this).attr("title"),f["_"+l+"_data"]=m(a(this).data())}),d.push(f)}),this.options.data=d,d.length&&(this.fromHtml=!0)}},q.prototype.initHeader=function(){var b=this,c={},d=[];this.header={fields:[],styles:[],classes:[],formatters:[],events:[],sorters:[],sortNames:[],cellStyles:[],searchables:[]},a.each(this.options.columns,function(e,g){d.push(""),0===e&&!b.options.cardView&&b.options.detailView&&d.push(f('
    ',b.options.columns.length)),a.each(g,function(a,e){var g="",h="",i="",j="",k=f(' class="%s"',e["class"]),m=(b.options.sortOrder||e.order,"px"),n=e.width;if(void 0===e.width||b.options.cardView||"string"==typeof e.width&&-1!==e.width.indexOf("%")&&(m="%"),e.width&&"string"==typeof e.width&&(n=e.width.replace("%","").replace("px","")),h=f("text-align: %s; ",e.halign?e.halign:e.align),i=f("text-align: %s; ",e.align),j=f("vertical-align: %s; ",e.valign),j+=f("width: %s; ",!e.checkbox&&!e.radio||n?n?n+m:void 0:e.showSelectTitle?void 0:"36px"),"undefined"!=typeof e.fieldIndex){if(b.header.fields[e.fieldIndex]=e.field,b.header.styles[e.fieldIndex]=i+j,b.header.classes[e.fieldIndex]=k,b.header.formatters[e.fieldIndex]=e.formatter,b.header.events[e.fieldIndex]=e.events,b.header.sorters[e.fieldIndex]=e.sorter,b.header.sortNames[e.fieldIndex]=e.sortName,b.header.cellStyles[e.fieldIndex]=e.cellStyle,b.header.searchables[e.fieldIndex]=e.searchable,!e.visible)return;if(b.options.cardView&&!e.cardVisible)return;c[e.field]=e}d.push(""),d.push(f('
    ',b.options.sortable&&e.sortable?"sortable both":"")),g=b.options.escape?l(e.title):e.title;var o=g;e.checkbox&&(g="",!b.options.singleSelect&&b.options.checkboxHeader&&(g=''),b.header.stateField=e.field),e.radio&&(g="",b.header.stateField=e.field,b.options.singleSelect=!0),!g&&e.showSelectTitle&&(g+=o),d.push(g),d.push("
    "),d.push('
    '),d.push("
    "),d.push("")}),d.push("")}),this.$header.html(d.join("")),this.$header.find("th[data-field]").each(function(){a(this).data(c[a(this).data("field")])}),this.$container.off("click",".th-inner").on("click",".th-inner",function(c){var d=a(this);return b.options.detailView&&!d.parent().hasClass("bs-checkbox")&&d.closest(".bootstrap-table")[0]!==b.$container[0]?!1:void(b.options.sortable&&d.parent().data().sortable&&b.onSort(c))}),this.$header.children().children().off("keypress").on("keypress",function(c){if(b.options.sortable&&a(this).data().sortable){var d=c.keyCode||c.which;13==d&&b.onSort(c)}}),a(window).off("resize.bootstrap-table"),!this.options.showHeader||this.options.cardView?(this.$header.hide(),this.$tableHeader.hide(),this.$tableLoading.css("top",0)):(this.$header.show(),this.$tableHeader.show(),this.$tableLoading.css("top",this.$header.outerHeight()+1),this.getCaret(),a(window).on("resize.bootstrap-table",a.proxy(this.resetWidth,this))),this.$selectAll=this.$header.find('[name="btSelectAll"]'),this.$selectAll.off("click").on("click",function(){var c=a(this).prop("checked");b[c?"checkAll":"uncheckAll"](),b.updateSelected()})},q.prototype.initFooter=function(){!this.options.showFooter||this.options.cardView?this.$tableFooter.hide():this.$tableFooter.show()},q.prototype.initData=function(a,b){this.options.data="append"===b?this.options.data.concat(a):"prepend"===b?[].concat(a).concat(this.options.data):a||this.options.data,this.data=this.options.data,"server"!==this.options.sidePagination&&this.initSort()},q.prototype.initSort=function(){var b=this,c=this.options.sortName,d="desc"===this.options.sortOrder?-1:1,e=a.inArray(this.options.sortName,this.header.fields),g=0;return this.options.customSort!==a.noop?void this.options.customSort.apply(this,[this.options.sortName,this.options.sortOrder]):void(-1!==e&&(this.options.sortStable&&a.each(this.data,function(a,b){b._position=a}),this.data.sort(function(f,g){b.header.sortNames[e]&&(c=b.header.sortNames[e]);var h=n(f,c,b.options.escape),i=n(g,c,b.options.escape),k=j(b.header,b.header.sorters[e],[h,i,f,g]);return void 0!==k?b.options.sortStable&&0===k?f._position-g._position:d*k:((void 0===h||null===h)&&(h=""),(void 0===i||null===i)&&(i=""),b.options.sortStable&&h===i?(h=f._position,i=g._position,f._position-g._position):a.isNumeric(h)&&a.isNumeric(i)?(h=parseFloat(h),i=parseFloat(i),i>h?-1*d:d):h===i?0:("string"!=typeof h&&(h=h.toString()),-1===h.localeCompare(i)?-1*d:d))}),void 0!==this.options.sortClass&&(clearTimeout(g),g=setTimeout(function(){b.$el.removeClass(b.options.sortClass);var a=b.$header.find(f('[data-field="%s"]',b.options.sortName).index()+1);b.$el.find(f("tr td:nth-child(%s)",a)).addClass(b.options.sortClass)},250))))},q.prototype.onSort=function(b){var c="keypress"===b.type?a(b.currentTarget):a(b.currentTarget).parent(),d=this.$header.find("th").eq(c.index());return this.$header.add(this.$header_).find("span.order").remove(),this.options.sortName===c.data("field")?this.options.sortOrder="asc"===this.options.sortOrder?"desc":"asc":(this.options.sortName=c.data("field"),this.options.sortOrder=this.options.rememberOrder?"asc"===c.data("order")?"desc":"asc":this.columns[this.fieldsColumnsIndex[c.data("field")]].order),this.trigger("sort",this.options.sortName,this.options.sortOrder),c.add(d).data("order",this.options.sortOrder),this.getCaret(),"server"===this.options.sidePagination?void this.initServer(this.options.silentSort):(this.initSort(),void this.initBody())},q.prototype.initToolbar=function(){var b,c,e=this,g=[],h=0,i=0;this.$toolbar.find(".bs-bars").children().length&&a("body").append(a(this.options.toolbar)),this.$toolbar.html(""),("string"==typeof this.options.toolbar||"object"==typeof this.options.toolbar)&&a(f('
    ',d.pullClass,this.options.toolbarAlign)).appendTo(this.$toolbar).append(a(this.options.toolbar)),g=[f('
    ',this.options.buttonsAlign,d.pullClass,this.options.buttonsAlign)],"string"==typeof this.options.icons&&(this.options.icons=j(null,this.options.icons)),this.options.showPaginationSwitch&&g.push(f('"),this.options.showFullscreen&&this.$toolbar.find('button[name="fullscreen"]').off("click").on("click",a.proxy(this.toggleFullscreen,this)),this.options.showRefresh&&g.push(f('"),this.options.showToggle&&g.push(f('"),this.options.showFullscreen&&g.push(f('"),this.options.showColumns&&(g.push(f('
    ',this.options.formatColumns()),'",d.toobarDropdowHtml[0]),a.each(this.columns,function(a,b){if(!(b.radio||b.checkbox||e.options.cardView&&!b.cardVisible)){var c=b.visible?' checked="checked"':"";b.switchable&&(g.push(f(d.toobarDropdowItemHtml,f(' %s',b.field,a,c,b.title))),i++)}}),g.push(d.toobarDropdowHtml[1],"
    ")),g.push("
    "),(this.showToolbar||g.length>2)&&this.$toolbar.append(g.join("")),this.options.showPaginationSwitch&&this.$toolbar.find('button[name="paginationSwitch"]').off("click").on("click",a.proxy(this.togglePagination,this)),this.options.showRefresh&&this.$toolbar.find('button[name="refresh"]').off("click").on("click",a.proxy(this.refresh,this)),this.options.showToggle&&this.$toolbar.find('button[name="toggle"]').off("click").on("click",function(){e.toggleView()}),this.options.showColumns&&(b=this.$toolbar.find(".keep-open"),i<=this.options.minimumCountColumns&&b.find("input").prop("disabled",!0),b.find("li").off("click").on("click",function(a){a.stopImmediatePropagation()}),b.find("input").off("click").on("click",function(){var b=a(this);e.toggleColumn(a(this).val(),b.prop("checked"),!1),e.trigger("column-switch",a(this).data("field"),b.prop("checked"))})),this.options.search&&(g=[],g.push(f('"),this.$toolbar.append(g.join("")),c=this.$toolbar.find(".search input"),c.off("keyup drop blur").on("keyup drop blur",function(b){e.options.searchOnEnterKey&&13!==b.keyCode||a.inArray(b.keyCode,[37,38,39,40])>-1||(clearTimeout(h),h=setTimeout(function(){e.onSearch(b)},e.options.searchTimeOut))}),o()&&c.off("mouseup").on("mouseup",function(a){clearTimeout(h),h=setTimeout(function(){e.onSearch(a)},e.options.searchTimeOut)}))},q.prototype.onSearch=function(b){var c=a.trim(a(b.currentTarget).val());this.options.trimOnSearch&&a(b.currentTarget).val()!==c&&a(b.currentTarget).val(c),c!==this.searchText&&(this.searchText=c,this.options.searchText=c,this.options.pageNumber=1,this.initSearch(),b.firedByInitSearchText?"client"===this.options.sidePagination&&this.updatePagination():this.updatePagination(),this.trigger("search",c))},q.prototype.initSearch=function(){var b=this;if("server"!==this.options.sidePagination){if(this.options.customSearch!==a.noop)return void window[this.options.customSearch].apply(this,[this.searchText]);var c=this.searchText&&(this.options.escape?l(this.searchText):this.searchText).toLowerCase(),d=a.isEmptyObject(this.filterColumns)?null:this.filterColumns;this.data=d?a.grep(this.options.data,function(b){for(var c in d)if(a.isArray(d[c])&&-1===a.inArray(b[c],d[c])||!a.isArray(d[c])&&b[c]!==d[c])return!1;return!0}):this.options.data,this.data=c?a.grep(this.data,function(d,e){for(var f=0;f-1&&(m=!0)}this.totalPages=~~((this.options.totalRows-1)/this.options.pageSize)+1,this.options.totalPages=this.totalPages}if(this.totalPages>0&&this.options.pageNumber>this.totalPages&&(this.options.pageNumber=this.totalPages),this.pageFrom=(this.options.pageNumber-1)*this.options.pageSize+1,this.pageTo=this.options.pageNumber*this.options.pageSize,this.pageTo>this.options.totalRows&&(this.pageTo=this.options.totalRows),l.push(f('
    ',d.pullClass,this.options.paginationDetailHAlign),'',this.options.onlyInfoPagination?this.options.formatDetailPagination(this.options.totalRows):this.options.formatShowingRows(this.pageFrom,this.pageTo,this.options.totalRows),""),!this.options.onlyInfoPagination){l.push('');var q=[f('',"top"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?"dropdown":"dropup"),'",d.pageDropdownHtml[0]];if("string"==typeof this.options.pageList){var r=this.options.pageList.replace("[","").replace("]","").replace(/ /g,"").split(",");o=[],a.each(r,function(a,b){o.push(b.toUpperCase()===k.options.formatAllRows().toUpperCase()||"UNLIMITED"===b.toUpperCase()?k.options.formatAllRows():+b)})}for(a.each(o,function(a,b){if(!k.options.smartDisplay||0===a||o[a-1]"),l.push(this.options.formatRecordsPerPage(q.join(""))),l.push(""),l.push("
    ",f('")}this.$pagination.html(l.join("")),this.options.onlyInfoPagination||(g=this.$pagination.find(".page-list a"),h=this.$pagination.find(".page-pre"),i=this.$pagination.find(".page-next"),j=this.$pagination.find(".page-item").not(".page-next, .page-pre"),this.options.smartDisplay&&(this.totalPages<=1&&this.$pagination.find("div.pagination").hide(),(o.length<2||this.options.totalRows<=o[0])&&this.$pagination.find("span.page-list").hide(),this.$pagination[this.getData().length?"show":"hide"]()),this.options.paginationLoop||(1===this.options.pageNumber&&h.addClass("disabled"),this.options.pageNumber===this.totalPages&&i.addClass("disabled")),m&&(this.options.pageSize=this.options.formatAllRows()),g.off("click").on("click",a.proxy(this.onPageListChange,this)),h.off("click").on("click",a.proxy(this.onPagePre,this)),i.off("click").on("click",a.proxy(this.onPageNext,this)),j.off("click").on("click",a.proxy(this.onPageNumber,this)))},q.prototype.updatePagination=function(b){b&&a(b.currentTarget).hasClass("disabled")||(this.options.maintainSelected||this.resetRows(),this.initPagination(),"server"===this.options.sidePagination?this.initServer():this.initBody(),this.trigger("page-change",this.options.pageNumber,this.options.pageSize))},q.prototype.onPageListChange=function(b){b.preventDefault();var c=a(b.currentTarget);return c.parent().addClass("active").siblings().removeClass("active"),this.options.pageSize=c.text().toUpperCase()===this.options.formatAllRows().toUpperCase()?this.options.formatAllRows():+c.text(),this.$toolbar.find(".page-size").text(this.options.pageSize),this.updatePagination(b),!1},q.prototype.onPagePre=function(a){return a.preventDefault(),this.options.pageNumber-1===0?this.options.pageNumber=this.options.totalPages:this.options.pageNumber--,this.updatePagination(a),!1},q.prototype.onPageNext=function(a){return a.preventDefault(),this.options.pageNumber+1>this.options.totalPages?this.options.pageNumber=1:this.options.pageNumber++,this.updatePagination(a),!1},q.prototype.onPageNumber=function(b){return b.preventDefault(),this.options.pageNumber!==+a(b.currentTarget).text()?(this.options.pageNumber=+a(b.currentTarget).text(),this.updatePagination(b),!1):void 0},q.prototype.initRow=function(b,c){var d,e=this,h=[],i={},k=[],m="",o={},p=[];if(!(a.inArray(b,this.hiddenRows)>-1)){if(i=j(this.options,this.options.rowStyle,[b,c],i),i&&i.css)for(d in i.css)k.push(d+": "+i.css[d]);if(o=j(this.options,this.options.rowAttributes,[b,c],o))for(d in o)p.push(f('%s="%s"',d,l(o[d])));return b._data&&!a.isEmptyObject(b._data)&&a.each(b._data,function(a,b){"index"!==a&&(m+=f(' data-%s="%s"',a,b))}),h.push(""),this.options.cardView&&h.push(f('
    ',this.header.fields.length)),!this.options.cardView&&this.options.detailView&&(h.push(""),j(null,this.options.detailFilter,[c,b])&&h.push('',f('',this.options.iconsPrefix,this.options.icons.detailOpen),""),h.push("")),a.each(this.header.fields,function(d,m){var o="",p=n(b,m,e.options.escape),q="",r="",s={},t="",u=e.header.classes[d],v="",w="",x="",y="",z=e.columns[d]; + +if((!e.fromHtml||"undefined"!=typeof p||z.checkbox||z.radio)&&z.visible&&(!e.options.cardView||z.cardVisible)){if(z.escape&&(p=l(p)),i=f('style="%s"',k.concat(e.header.styles[d]).join("; ")),b["_"+m+"_id"]&&(t=f(' id="%s"',b["_"+m+"_id"])),b["_"+m+"_class"]&&(u=f(' class="%s"',b["_"+m+"_class"])),b["_"+m+"_rowspan"]&&(w=f(' rowspan="%s"',b["_"+m+"_rowspan"])),b["_"+m+"_colspan"]&&(x=f(' colspan="%s"',b["_"+m+"_colspan"])),b["_"+m+"_title"]&&(y=f(' title="%s"',b["_"+m+"_title"])),s=j(e.header,e.header.cellStyles[d],[p,b,c,m],s),s.classes&&(u=f(' class="%s"',s.classes)),s.css){var A=[];for(var B in s.css)A.push(B+": "+s.css[B]);i=f('style="%s"',A.concat(e.header.styles[d]).join("; "))}q=j(z,e.header.formatters[d],[p,b,c,m],p),b["_"+m+"_data"]&&!a.isEmptyObject(b["_"+m+"_data"])&&a.each(b["_"+m+"_data"],function(a,b){"index"!==a&&(v+=f(' data-%s="%s"',a,b))}),z.checkbox||z.radio?(r=z.checkbox?"checkbox":r,r=z.radio?"radio":r,o=[f(e.options.cardView?'
    ':'',z["class"]||""),"",e.header.formatters[d]&&"string"==typeof q?q:"",e.options.cardView?"
    ":""].join(""),b[e.header.stateField]=q===!0||!!p||q&&q.checked):(q="undefined"==typeof q||null===q?e.options.undefinedText:q,o=e.options.cardView?['
    ',e.options.showHeader?f('%s',i,g(e.columns,"field","title",m)):"",f('%s',q),"
    "].join(""):[f("",t,u,i,v,w,x,y),q,""].join(""),e.options.cardView&&e.options.smartDisplay&&""===q&&(o='
    ')),h.push(o)}}),this.options.cardView&&h.push("
    "),h.push(""),h.join(" ")}},q.prototype.initBody=function(b){var c=this,d=this.getData();this.trigger("pre-body",d),this.$body=this.$el.find(">tbody"),this.$body.length||(this.$body=a("").appendTo(this.$el)),this.options.pagination&&"server"!==this.options.sidePagination||(this.pageFrom=1,this.pageTo=d.length);for(var e,g=a(document.createDocumentFragment()),h=this.pageFrom-1;h'+f('%s',this.$header.find("th").length,this.options.formatNoMatches())+""),this.$body.html(g),b||this.scrollTo(0),this.$body.find("> tr[data-index] > td").off("click dblclick").on("click dblclick",function(b){var d=a(this),e=d.parent(),g=c.data[e.data("index")],h=d[0].cellIndex,i=c.getVisibleFields(),j=i[c.options.detailView&&!c.options.cardView?h-1:h],k=c.columns[c.fieldsColumnsIndex[j]],l=n(g,j,c.options.escape);if(!d.find(".detail-icon").length&&(c.trigger("click"===b.type?"click-cell":"dbl-click-cell",j,l,g,d),c.trigger("click"===b.type?"click-row":"dbl-click-row",g,e,j),"click"===b.type&&c.options.clickToSelect&&k.clickToSelect&&c.options.ignoreClickToSelectOn(b.target))){var m=e.find(f('[name="%s"]',c.options.selectItemName));m.length&&m[0].click()}}),this.$body.find("> tr[data-index] > td > .detail-icon").off("click").on("click",function(b){b.preventDefault();var e=a(this),g=e.parent().parent(),h=g.data("index"),i=d[h];if(g.next().is("tr.detail-view"))e.find("i").attr("class",f("%s %s",c.options.iconsPrefix,c.options.icons.detailOpen)),c.trigger("collapse-row",h,i,g.next()),g.next().remove();else{e.find("i").attr("class",f("%s %s",c.options.iconsPrefix,c.options.icons.detailClose)),g.after(f('',g.find("td").length));var k=g.next().find("td"),l=j(c.options,c.options.detailFormatter,[h,i,k],"");1===k.length&&k.append(l),c.trigger("expand-row",h,i,k)}return c.resetView(),!1}),this.$selectItem=this.$body.find(f('[name="%s"]',this.options.selectItemName)),this.$selectItem.off("click").on("click",function(b){b.stopImmediatePropagation();var d=a(this),e=d.prop("checked"),f=c.data[d.data("index")];(a(this).is(":radio")||c.options.singleSelect)&&a.each(c.options.data,function(a,b){b[c.header.stateField]=!1}),f[c.header.stateField]=e,c.options.singleSelect&&(c.$selectItem.not(this).each(function(){c.data[a(this).data("index")][c.header.stateField]=!1}),c.$selectItem.filter(":checked").not(this).prop("checked",!1)),c.updateSelected(),c.trigger(e?"check":"uncheck",f,d)}),a.each(this.header.events,function(b,d){if(d){"string"==typeof d&&(d=j(null,d));var e=c.header.fields[b],f=a.inArray(e,c.getVisibleFields());if(-1!==f){c.options.detailView&&!c.options.cardView&&(f+=1);for(var g in d)c.$body.find(">tr:not(.no-records-found)").each(function(){var b=a(this),h=b.find(c.options.cardView?".card-view":"td").eq(f),i=g.indexOf(" "),j=g.substring(0,i),k=g.substring(i+1),l=d[g];h.find(k).off(j).on(j,function(a){var d=b.data("index"),f=c.data[d],g=f[e];l.apply(this,[a,g,f,d])})})}}}),this.updateSelected(),this.resetView(),this.trigger("post-body",d)},q.prototype.initServer=function(b,c,d){var e,f=this,g={},h=a.inArray(this.options.sortName,this.header.fields),i={searchText:this.searchText,sortName:this.options.sortName,sortOrder:this.options.sortOrder};this.header.sortNames[h]&&(i.sortName=this.header.sortNames[h]),this.options.pagination&&"server"===this.options.sidePagination&&(i.pageSize=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,i.pageNumber=this.options.pageNumber),(d||this.options.url||this.options.ajax)&&("limit"===this.options.queryParamsType&&(i={search:i.searchText,sort:i.sortName,order:i.sortOrder},this.options.pagination&&"server"===this.options.sidePagination&&(i.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1),i.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,0===i.limit&&delete i.limit)),a.isEmptyObject(this.filterColumnsPartial)||(i.filter=JSON.stringify(this.filterColumnsPartial,null)),g=j(this.options,this.options.queryParams,[i],g),a.extend(g,c||{}),g!==!1&&(b||this.$tableLoading.show(),e=a.extend({},j(null,this.options.ajaxOptions),{type:this.options.method,url:d||this.options.url,data:"application/json"===this.options.contentType&&"post"===this.options.method?JSON.stringify(g):g,cache:this.options.cache,contentType:this.options.contentType,dataType:this.options.dataType,success:function(a){a=j(f.options,f.options.responseHandler,[a],a),f.load(a),f.trigger("load-success",a),b||f.$tableLoading.hide()},error:function(a){var c=[];"server"===f.options.sidePagination&&(c={},c[f.options.totalField]=0,c[f.options.dataField]=[]),f.load(c),f.trigger("load-error",a.status,a),b||f.$tableLoading.hide()}}),this.options.ajax?j(this,this.options.ajax,[e],null):(this._xhr&&4!==this._xhr.readyState&&this._xhr.abort(),this._xhr=a.ajax(e))))},q.prototype.initSearchText=function(){if(this.options.search&&(this.searchText="",""!==this.options.searchText)){var a=this.$toolbar.find(".search input");a.val(this.options.searchText),this.onSearch({currentTarget:a,firedByInitSearchText:!0})}},q.prototype.getCaret=function(){var b=this;a.each(this.$header.find("th"),function(c,d){a(d).find(".sortable").removeClass("desc asc").addClass(a(d).data("field")===b.options.sortName?b.options.sortOrder:"both")})},q.prototype.updateSelected=function(){var b=this.$selectItem.filter(":enabled").length&&this.$selectItem.filter(":enabled").length===this.$selectItem.filter(":enabled").filter(":checked").length;this.$selectAll.add(this.$selectAll_).prop("checked",b),this.$selectItem.each(function(){a(this).closest("tr")[a(this).prop("checked")?"addClass":"removeClass"]("selected")})},q.prototype.updateRows=function(){var b=this;this.$selectItem.each(function(){b.data[a(this).data("index")][b.header.stateField]=a(this).prop("checked")})},q.prototype.resetRows=function(){var b=this;a.each(this.data,function(a,c){b.$selectAll.prop("checked",!1),b.$selectItem.prop("checked",!1),b.header.stateField&&(c[b.header.stateField]=!1)}),this.initHiddenRows()},q.prototype.trigger=function(b){var c=Array.prototype.slice.call(arguments,1);b+=".bs.table",this.options[q.EVENTS[b]].apply(this.options,c),this.$el.trigger(a.Event(b),c),this.options.onAll(b,c),this.$el.trigger(a.Event("all.bs.table"),[b,c])},q.prototype.resetHeader=function(){clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(a.proxy(this.fitHeader,this),this.$el.is(":hidden")?100:0)},q.prototype.fitHeader=function(){var b,c,d,e,g=this;if(g.$el.is(":hidden"))return void(g.timeoutId_=setTimeout(a.proxy(g.fitHeader,g),100));if(b=this.$tableBody.get(0),c=b.scrollWidth>b.clientWidth&&b.scrollHeight>b.clientHeight+this.$header.outerHeight()?i():0,this.$el.css("margin-top",-this.$header.outerHeight()),d=a(":focus"),d.length>0){var h=d.parents("th");if(h.length>0){var j=h.attr("data-field");if(void 0!==j){var k=this.$header.find("[data-field='"+j+"']");k.length>0&&k.find(":input").addClass("focus-temp")}}}this.$header_=this.$header.clone(!0,!0),this.$selectAll_=this.$header_.find('[name="btSelectAll"]'),this.$tableHeader.css({"margin-right":c}).find("table").css("width",this.$el.outerWidth()).html("").attr("class",this.$el.attr("class")).append(this.$header_),e=a(".focus-temp:visible:eq(0)"),e.length>0&&(e.focus(),this.$header.find(".focus-temp").removeClass("focus-temp")),this.$header.find("th[data-field]").each(function(){g.$header_.find(f('th[data-field="%s"]',a(this).data("field"))).data(a(this).data())});var l=this.getVisibleFields(),m=this.$header_.find("th");this.$body.find(">tr:first-child:not(.no-records-found) > *").each(function(b){var c=a(this),d=b;if(g.options.detailView&&!g.options.cardView&&(0===b&&g.$header_.find("th.detail").find(".fht-cell").width(c.innerWidth()),d=b-1),-1!==d){var e=g.$header_.find(f('th[data-field="%s"]',l[d]));e.length>1&&(e=a(m[c[0].cellIndex]));var h=e.width()-e.find(".fht-cell").width();e.find(".fht-cell").width(c.innerWidth()-h)}}),this.horizontalScroll(),this.trigger("post-header")},q.prototype.resetFooter=function(){var b=this,c=b.getData(),d=[];this.options.showFooter&&!this.options.cardView&&(!this.options.cardView&&this.options.detailView&&d.push('
     
    '),a.each(this.columns,function(a,e){var g,h="",i="",k=[],l={},m=f(' class="%s"',e["class"]);if(e.visible&&(!b.options.cardView||e.cardVisible)){if(h=f("text-align: %s; ",e.falign?e.falign:e.align),i=f("vertical-align: %s; ",e.valign),l=j(null,b.options.footerStyle),l&&l.css)for(g in l.css)k.push(g+": "+l.css[g]);d.push(""),d.push('
    '),d.push(j(e,e.footerFormatter,[c]," ")||" "),d.push("
    "),d.push('
    '),d.push(""),d.push("")}}),this.$tableFooter.find("tr").html(d.join("")),this.$tableFooter.show(),clearTimeout(this.timeoutFooter_),this.timeoutFooter_=setTimeout(a.proxy(this.fitFooter,this),this.$el.is(":hidden")?100:0))},q.prototype.fitFooter=function(){var b,c,d;return clearTimeout(this.timeoutFooter_),this.$el.is(":hidden")?void(this.timeoutFooter_=setTimeout(a.proxy(this.fitFooter,this),100)):(c=this.$el.css("width"),d=c>this.$tableBody.width()?i():0,this.$tableFooter.css({"margin-right":d}).find("table").css("width",c).attr("class",this.$el.attr("class")),b=this.$tableFooter.find("td"),this.$body.find(">tr:first-child:not(.no-records-found) > *").each(function(c){var d=a(this);b.eq(c).find(".fht-cell").width(d.innerWidth())}),void this.horizontalScroll())},q.prototype.horizontalScroll=function(){var b=this;b.trigger("scroll-body"),this.$tableBody.off("scroll").on("scroll",function(){b.options.showHeader&&b.options.height&&b.$tableHeader.scrollLeft(a(this).scrollLeft()),b.options.showFooter&&!b.options.cardView&&b.$tableFooter.scrollLeft(a(this).scrollLeft())})},q.prototype.toggleColumn=function(a,b,c){if(-1!==a&&(this.columns[a].visible=b,this.initHeader(),this.initSearch(),this.initPagination(),this.initBody(),this.options.showColumns)){var d=this.$toolbar.find(".keep-open input").prop("disabled",!1);c&&d.filter(f('[value="%s"]',a)).prop("checked",b),d.filter(":checked").length<=this.options.minimumCountColumns&&d.filter(":checked").prop("disabled",!0)}},q.prototype.getVisibleFields=function(){var b=this,c=[];return a.each(this.header.fields,function(a,d){var e=b.columns[b.fieldsColumnsIndex[d]];e.visible&&c.push(d)}),c},q.prototype.resetView=function(a){var b=0;if(a&&a.height&&(this.options.height=a.height),this.$selectAll.prop("checked",this.$selectItem.length>0&&this.$selectItem.length===this.$selectItem.filter(":checked").length),this.options.height){var c=this.$toolbar.outerHeight(!0),d=this.$pagination.outerHeight(!0),e=this.options.height-c-d;this.$tableContainer.css("height",e+"px")}return this.options.cardView?(this.$el.css("margin-top","0"),this.$tableContainer.css("padding-bottom","0"),void this.$tableFooter.hide()):(this.options.showHeader&&this.options.height?(this.$tableHeader.show(),this.resetHeader(),b+=this.$header.outerHeight()):(this.$tableHeader.hide(),this.trigger("post-header")),this.options.showFooter&&(this.resetFooter(),this.options.height&&(b+=this.$tableFooter.outerHeight()+1)),this.getCaret(),this.$tableContainer.css("padding-bottom",b+"px"),void this.trigger("reset-view"))},q.prototype.getData=function(b){var c=this.options.data;return(this.searchText||this.options.sortName||!a.isEmptyObject(this.filterColumns)||!a.isEmptyObject(this.filterColumnsPartial))&&(c=this.data),b?c.slice(this.pageFrom-1,this.pageTo):c},q.prototype.load=function(b){var c=!1;this.options.pagination&&"server"===this.options.sidePagination?(this.options.totalRows=b[this.options.totalField],c=b.fixedScroll,b=b[this.options.dataField]):a.isArray(b)||(c=b.fixedScroll,b=b.data),this.initData(b),this.initSearch(),this.initPagination(),this.initBody(c)},q.prototype.append=function(a){this.initData(a,"append"),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)},q.prototype.prepend=function(a){this.initData(a,"prepend"),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)},q.prototype.remove=function(b){var c,d,e=this.options.data.length;if(b.hasOwnProperty("field")&&b.hasOwnProperty("values")){for(c=e-1;c>=0;c--)d=this.options.data[c],d.hasOwnProperty(b.field)&&-1!==a.inArray(d[b.field],b.values)&&(this.options.data.splice(c,1),"server"===this.options.sidePagination&&(this.options.totalRows-=1));e!==this.options.data.length&&(this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0))}},q.prototype.removeAll=function(){this.options.data.length>0&&(this.options.data.splice(0,this.options.data.length),this.initSearch(),this.initPagination(),this.initBody(!0))},q.prototype.getRowByUniqueId=function(a){var b,c,d,e=this.options.uniqueId,f=this.options.data.length,g=null;for(b=f-1;b>=0;b--){if(c=this.options.data[b],c.hasOwnProperty(e))d=c[e];else{if(!c._data.hasOwnProperty(e))continue;d=c._data[e]}if("string"==typeof d?a=a.toString():"number"==typeof d&&(Number(d)===d&&d%1===0?a=parseInt(a):d===Number(d)&&0!==d&&(a=parseFloat(a))),d===a){g=c;break}}return g},q.prototype.removeByUniqueId=function(a){var b=this.options.data.length,c=this.getRowByUniqueId(a);c&&this.options.data.splice(this.options.data.indexOf(c),1),b!==this.options.data.length&&(this.initSearch(),this.initPagination(),this.initBody(!0))},q.prototype.updateByUniqueId=function(b){var c=this,d=a.isArray(b)?b:[b];a.each(d,function(b,d){var e;d.hasOwnProperty("id")&&d.hasOwnProperty("row")&&(e=a.inArray(c.getRowByUniqueId(d.id),c.options.data),-1!==e&&a.extend(c.options.data[e],d.row))}),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)},q.prototype.refreshColumnTitle=function(b){if(b.hasOwnProperty("field")&&b.hasOwnProperty("title")&&(this.columns[this.fieldsColumnsIndex[b.field]].title=this.options.escape?l(b.title):b.title,this.columns[this.fieldsColumnsIndex[b.field]].visible)){var c=void 0!==this.options.height?this.$tableHeader:this.$header;c.find("th[data-field]").each(function(){return a(this).data("field")===b.field?(a(a(this).find(".th-inner")[0]).text(b.title),!1):void 0})}},q.prototype.insertRow=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("row")&&(this.options.data.splice(a.index,0,a.row),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0))},q.prototype.updateRow=function(b){var c=this,d=a.isArray(b)?b:[b];a.each(d,function(b,d){d.hasOwnProperty("index")&&d.hasOwnProperty("row")&&a.extend(c.options.data[d.index],d.row)}),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)},q.prototype.initHiddenRows=function(){this.hiddenRows=[]},q.prototype.showRow=function(a){this.toggleRow(a,!0)},q.prototype.hideRow=function(a){this.toggleRow(a,!1)},q.prototype.toggleRow=function(b,c){var d,e;b.hasOwnProperty("index")?d=this.getData()[b.index]:b.hasOwnProperty("uniqueId")&&(d=this.getRowByUniqueId(b.uniqueId)),d&&(e=a.inArray(d,this.hiddenRows),c||-1!==e?c&&e>-1&&this.hiddenRows.splice(e,1):this.hiddenRows.push(d),this.initBody(!0))},q.prototype.getHiddenRows=function(){var b=this,c=this.getData(),d=[];return a.each(c,function(c,e){a.inArray(e,b.hiddenRows)>-1&&d.push(e)}),this.hiddenRows=d,d},q.prototype.mergeCells=function(b){var c,d,e,f=b.index,g=a.inArray(b.field,this.getVisibleFields()),h=b.rowspan||1,i=b.colspan||1,j=this.$body.find(">tr");if(this.options.detailView&&!this.options.cardView&&(g+=1),e=j.eq(f).find(">td").eq(g),!(0>f||0>g||f>=this.data.length)){for(c=f;f+h>c;c++)for(d=g;g+i>d;d++)j.eq(c).find(">td").eq(d).hide();e.attr("rowspan",h).attr("colspan",i).show()}},q.prototype.updateCell=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("field")&&a.hasOwnProperty("value")&&(this.data[a.index][a.field]=a.value,a.reinit!==!1&&(this.initSort(),this.initBody(!0)))},q.prototype.updateCellById=function(b){var c=this;if(b.hasOwnProperty("id")&&b.hasOwnProperty("field")&&b.hasOwnProperty("value")){var d=a.isArray(b)?b:[b];a.each(d,function(b,d){var e;e=a.inArray(c.getRowByUniqueId(d.id),c.options.data),-1!==e&&(c.data[e][d.field]=d.value)}),b.reinit!==!1&&(this.initSort(),this.initBody(!0))}},q.prototype.getOptions=function(){return a.extend(!0,{},this.options)},q.prototype.getSelections=function(){var b=this;return a.grep(this.options.data,function(a){return a[b.header.stateField]===!0})},q.prototype.getAllSelections=function(){var b=this;return a.grep(this.options.data,function(a){return a[b.header.stateField]})},q.prototype.checkAll=function(){this.checkAll_(!0)},q.prototype.uncheckAll=function(){this.checkAll_(!1)},q.prototype.checkInvert=function(){var b=this,c=b.$selectItem.filter(":enabled"),d=c.filter(":checked");c.each(function(){a(this).prop("checked",!a(this).prop("checked"))}),b.updateRows(),b.updateSelected(),b.trigger("uncheck-some",d),d=b.getSelections(),b.trigger("check-some",d)},q.prototype.checkAll_=function(a){var b;a||(b=this.getSelections()),this.$selectAll.add(this.$selectAll_).prop("checked",a),this.$selectItem.filter(":enabled").prop("checked",a),this.updateRows(),a&&(b=this.getSelections()),this.trigger(a?"check-all":"uncheck-all",b)},q.prototype.check=function(a){this.check_(!0,a)},q.prototype.uncheck=function(a){this.check_(!1,a)},q.prototype.check_=function(a,b){var c=this.$selectItem.filter(f('[data-index="%s"]',b)).prop("checked",a);this.data[b][this.header.stateField]=a,this.updateSelected(),this.trigger(a?"check":"uncheck",this.data[b],c)},q.prototype.checkBy=function(a){this.checkBy_(!0,a)},q.prototype.uncheckBy=function(a){this.checkBy_(!1,a)},q.prototype.checkBy_=function(b,c){if(c.hasOwnProperty("field")&&c.hasOwnProperty("values")){var d=this,e=[];a.each(this.options.data,function(g,h){if(!h.hasOwnProperty(c.field))return!1;if(-1!==a.inArray(h[c.field],c.values)){var i=d.$selectItem.filter(":enabled").filter(f('[data-index="%s"]',g)).prop("checked",b);h[d.header.stateField]=b,e.push(h),d.trigger(b?"check":"uncheck",h,i)}}),this.updateSelected(),this.trigger(b?"check-some":"uncheck-some",e)}},q.prototype.destroy=function(){this.$el.insertBefore(this.$container),a(this.options.toolbar).insertBefore(this.$el),this.$container.next().remove(),this.$container.remove(),this.$el.html(this.$el_.html()).css("margin-top","0").attr("class",this.$el_.attr("class")||"")},q.prototype.showLoading=function(){this.$tableLoading.show()},q.prototype.hideLoading=function(){this.$tableLoading.hide()},q.prototype.togglePagination=function(){this.options.pagination=!this.options.pagination;var a=this.$toolbar.find('button[name="paginationSwitch"] i');this.options.pagination?a.attr("class",this.options.iconsPrefix+" "+this.options.icons.paginationSwitchDown):a.attr("class",this.options.iconsPrefix+" "+this.options.icons.paginationSwitchUp),this.updatePagination()},q.prototype.toggleFullscreen=function(){this.$el.closest(".bootstrap-table").toggleClass("fullscreen")},q.prototype.refresh=function(a){a&&a.url&&(this.options.url=a.url),a&&a.pageNumber&&(this.options.pageNumber=a.pageNumber),a&&a.pageSize&&(this.options.pageSize=a.pageSize),this.initServer(a&&a.silent,a&&a.query,a&&a.url),this.trigger("refresh",a)},q.prototype.resetWidth=function(){this.options.showHeader&&this.options.height&&this.fitHeader(),this.options.showFooter&&!this.options.cardView&&this.fitFooter()},q.prototype.showColumn=function(a){this.toggleColumn(this.fieldsColumnsIndex[a],!0,!0)},q.prototype.hideColumn=function(a){this.toggleColumn(this.fieldsColumnsIndex[a],!1,!0)},q.prototype.getHiddenColumns=function(){return a.grep(this.columns,function(a){return!a.visible})},q.prototype.getVisibleColumns=function(){return a.grep(this.columns,function(a){return a.visible})},q.prototype.toggleAllColumns=function(b){var c=this;if(a.each(this.columns,function(a){c.columns[a].visible=b}),this.initHeader(),this.initSearch(),this.initPagination(),this.initBody(),this.options.showColumns){var d=this.$toolbar.find(".keep-open input").prop("disabled",!1);d.filter(":checked").length<=this.options.minimumCountColumns&&d.filter(":checked").prop("disabled",!0)}},q.prototype.showAllColumns=function(){this.toggleAllColumns(!0)},q.prototype.hideAllColumns=function(){this.toggleAllColumns(!1)},q.prototype.filterBy=function(b){this.filterColumns=a.isEmptyObject(b)?{}:b,this.options.pageNumber=1,this.initSearch(),this.updatePagination()},q.prototype.scrollTo=function(a){return"string"==typeof a&&(a="bottom"===a?this.$tableBody[0].scrollHeight:0),"number"==typeof a&&this.$tableBody.scrollTop(a),"undefined"==typeof a?this.$tableBody.scrollTop():void 0},q.prototype.getScrollPosition=function(){return this.scrollTo()},q.prototype.selectPage=function(a){a>0&&a<=this.options.totalPages&&(this.options.pageNumber=a,this.updatePagination())},q.prototype.prevPage=function(){this.options.pageNumber>1&&(this.options.pageNumber--,this.updatePagination())},q.prototype.nextPage=function(){this.options.pageNumber tr[data-index="%s"]',b));c.next().is("tr.detail-view")===(a?!1:!0)&&c.find("> td > .detail-icon").click()},q.prototype.expandRow=function(a){this.expandRow_(!0,a)},q.prototype.collapseRow=function(a){this.expandRow_(!1,a)},q.prototype.expandAllRows=function(b){if(b){var c=this.$body.find(f('> tr[data-index="%s"]',0)),d=this,e=null,g=!1,h=-1;if(c.next().is("tr.detail-view")?c.next().next().is("tr.detail-view")||(c.next().find(".detail-icon").click(),g=!0):(c.find("> td > .detail-icon").click(),g=!0),g)try{h=setInterval(function(){e=d.$body.find("tr.detail-view").last().find(".detail-icon"),e.length>0?e.click():clearInterval(h)},1)}catch(i){clearInterval(h)}}else for(var j=this.$body.children(),k=0;k + * extensions: https://github.com/kayalshri/tableExport.jquery.plugin + */ + +(function ($) { + 'use strict'; + var sprintf = $.fn.bootstrapTable.utils.sprintf; + + var TYPE_NAME = { + json: 'JSON', + xml: 'XML', + png: 'PNG', + csv: 'CSV', + txt: 'TXT', + sql: 'SQL', + doc: 'Word文档', + excel: 'Excel文档', + xlsx: 'MS-Excel (OpenXML)', + powerpoint: 'MS-Powerpoint', + pdf: 'PDF' + }; + + $.extend($.fn.bootstrapTable.defaults, { + showExport: false, + exportDataType: 'basic', // basic, all, selected + // 'json', 'xml', 'png', 'csv', 'txt', 'sql', 'doc', 'excel', 'powerpoint', 'pdf' + exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel'], + exportOptions: {} + }); + + $.extend($.fn.bootstrapTable.defaults.icons, { + export: ' fa-download icon-share' + }); + + $.extend($.fn.bootstrapTable.locales, { + formatExport: function () { + return '导出数据'; + } + }); + $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales); + + var BootstrapTable = $.fn.bootstrapTable.Constructor, + _initToolbar = BootstrapTable.prototype.initToolbar; + + BootstrapTable.prototype.initToolbar = function () { + this.showToolbar = this.showToolbar || this.options.showExport; + + _initToolbar.apply(this, Array.prototype.slice.apply(arguments)); + + if (this.options.showExport) { + var that = this, + $btnGroup = this.$toolbar.find('>.btn-group'), + $export = $btnGroup.find('div.export'); + + if (!$export.length) { + $export = $([ + '
    ', + '', + '', + '
    '].join('')).appendTo($btnGroup); + + var $menu = $export.find('.dropdown-menu'), + exportTypes = this.options.exportTypes; + + if (typeof this.options.exportTypes === 'string') { + var types = this.options.exportTypes.slice(1, -1).replace(/ /g, '').split(','); + + exportTypes = []; + $.each(types, function (i, value) { + exportTypes.push(value.slice(1, -1)); + }); + } + $.each(exportTypes, function (i, type) { + if (TYPE_NAME.hasOwnProperty(type)) { + $menu.append(['
  • ', + '', + TYPE_NAME[type], + '', + '
  • '].join('')); + } + }); + + $menu.find('li').click(function () { + var type = $(this).data('type'), + doExport = function () { + + if (!!that.options.exportFooter) { + var data = that.getData(); + var $footerRow = that.$tableFooter.find("tr").first(); + + var footerData = { }; + var footerHtml = []; + + $.each($footerRow.children(), function (index, footerCell) { + + var footerCellHtml = $(footerCell).children(".th-inner").first().html(); + footerData[that.columns[index].field] = footerCellHtml == ' ' ? null : footerCellHtml; + + // grab footer cell text into cell index-based array + footerHtml.push(footerCellHtml); + }); + + that.append(footerData); + + var $lastTableRow = that.$body.children().last(); + + $.each($lastTableRow.children(), function (index, lastTableRowCell) { + + $(lastTableRowCell).html(footerHtml[index]); + }); + } + + that.$el.tableExport($.extend({}, that.options.exportOptions, { + type: type, + escape: false + })); + + if (!!that.options.exportFooter) { + that.load(data); + } + }; + + var stateField = that.header.stateField; + + if (that.options.exportDataType === 'all' && that.options.pagination) { + that.$el.one(that.options.sidePagination === 'server' ? 'post-body.bs.table' : 'page-change.bs.table', function () { + if (stateField) { + that.hideColumn(stateField); + } + doExport(); + that.togglePagination(); + }); + that.togglePagination(); + } else if (that.options.exportDataType === 'selected') { + var data = that.getData(), + selectedData = that.getSelections(); + if (!selectedData.length) { + return; + } + + if (that.options.sidePagination === 'server') { + var dataServer = {total: that.options.totalRows}; + dataServer[that.options.dataField] = data; + data = dataServer; + var selectedDataServer = {total: selectedData.length}; + selectedDataServer[that.options.dataField] = selectedData; + selectedData = selectedDataServer; + } + + that.load(selectedData); + if (stateField) { + that.hideColumn(stateField); + } + doExport(); + that.load(data); + } else { + if (stateField) { + that.hideColumn(stateField); + } + doExport(); + } + if (stateField) { + that.showColumn(stateField); + } + }); + } + } + }; +})(jQuery); diff --git a/public/lib/bootstrap/bootstrap-table/extensions/export/tableExport.js b/public/lib/bootstrap/bootstrap-table/extensions/export/tableExport.js new file mode 100644 index 0000000..b066356 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/extensions/export/tableExport.js @@ -0,0 +1,2348 @@ +/** + * @preserve tableExport.jquery.plugin + * + * Version 1.9.14 + * + * Copyright (c) 2015-2018 hhurz, https://github.com/hhurz + * + * Original Work Copyright (c) 2014 Giri Raj + * + * Licensed under the MIT License + **/ + +'use strict'; + +(function ($) { + $.fn.tableExport = function (options) { + var defaults = { + csvEnclosure: '"', + csvSeparator: ',', + csvUseBOM: true, + displayTableName: false, + escape: false, + exportHiddenCells: false, // true = speed up export of large tables with hidden cells (hidden cells will be exported !) + fileName: 'tableExport', + htmlContent: false, + ignoreColumn: [], + ignoreRow: [], + jsonScope: 'all', // head, data, all + jspdf: { // jsPDF / jsPDF-AutoTable related options + orientation: 'p', + unit: 'pt', + format: 'a4', // One of jsPDF page formats or 'bestfit' for autmatic paper format selection + margins: {left: 20, right: 10, top: 10, bottom: 10}, + onDocCreated: null, + autotable: { + styles: { + cellPadding: 2, + rowHeight: 12, + fontSize: 8, + fillColor: 255, // Color value or 'inherit' to use css background-color from html table + textColor: 50, // Color value or 'inherit' to use css color from html table + fontStyle: 'normal', // normal, bold, italic, bolditalic or 'inherit' to use css font-weight and fonst-style from html table + overflow: 'ellipsize', // visible, hidden, ellipsize or linebreak + halign: 'inherit', // left, center, right or 'inherit' to use css horizontal cell alignment from html table + valign: 'middle' // top, middle, bottom + }, + headerStyles: { + fillColor: [52, 73, 94], + textColor: 255, + fontStyle: 'bold', + halign: 'inherit', // left, center, right or 'inherit' to use css horizontal header cell alignment from html table + valign: 'middle' // top, middle, bottom + }, + alternateRowStyles: { + fillColor: 245 + }, + tableExport: { + doc: null, // jsPDF doc object. If set, an already created doc will be used to export to + onAfterAutotable: null, + onBeforeAutotable: null, + onAutotableText: null, + onTable: null, + outputImages: true + } + } + }, + maxNestedTables: 1, // Max number of nested tables that will be exported. 0 = export all. Default = 1 + mso: { // MS Excel and MS Word related options + fileFormat: 'xlshtml', // xlshtml = Excel 2000 html format + // xmlss = XML Spreadsheet 2003 file format (XMLSS) + // xlsx = Excel 2007 Office Open XML format + onMsoNumberFormat: null, // Excel 2000 html format only. See readme.md for more information about msonumberformat + pageFormat: 'a4', // Page format used for page orientation + pageOrientation: 'portrait', // portrait, landscape (xlshtml format only) + rtl: false, // true = Set worksheet option 'DisplayRightToLeft' + styles: [], // E.g. ['border-bottom', 'border-top', 'border-left', 'border-right'] + worksheetName: '' + }, + numbers: { + html: { + decimalMark: '.', + thousandsSeparator: ',' + }, + output: { // Use 'output: false' to keep number format in exported output + decimalMark: '.', + thousandsSeparator: ',' + } + }, + onCellData: null, + onCellHtmlData: null, + onIgnoreRow: null, // onIgnoreRow($tr, rowIndex): function should return true to not export a row + outputMode: 'file', // 'file', 'string', 'base64' or 'window' (experimental) + pdfmake: { + enabled: false, // true: use pdfmake instead of jspdf and jspdf-autotable (experimental) + docDefinition: { + pageOrientation: 'portrait', // 'portrait' or 'landscape' + defaultStyle: { + font: 'Roboto' // Default is 'Roboto', for arabic font set this option to 'Mirza' and include mirza_fonts.js + } + }, + fonts: {} + }, + preserve: { + leadingWS: false, // preserve leading white spaces + trailingWS: false // preserve trailing white spaces + }, + preventInjection: true, + tbodySelector: 'tr', + tfootSelector: 'tr', // Set empty ('') to prevent export of tfoot rows + theadSelector: 'tr', + tableName: 'Table', + type: 'csv' // 'csv', 'tsv', 'txt', 'sql', 'json', 'xml', 'excel', 'doc', 'png' or 'pdf' + }; + + var pageFormats = { // Size in pt of various paper formats. Adopted from jsPDF. + 'a0': [2383.94, 3370.39], 'a1': [1683.78, 2383.94], 'a2': [1190.55, 1683.78], + 'a3': [841.89, 1190.55], 'a4': [595.28, 841.89], 'a5': [419.53, 595.28], + 'a6': [297.64, 419.53], 'a7': [209.76, 297.64], 'a8': [147.40, 209.76], + 'a9': [104.88, 147.40], 'a10': [73.70, 104.88], + 'b0': [2834.65, 4008.19], 'b1': [2004.09, 2834.65], 'b2': [1417.32, 2004.09], + 'b3': [1000.63, 1417.32], 'b4': [708.66, 1000.63], 'b5': [498.90, 708.66], + 'b6': [354.33, 498.90], 'b7': [249.45, 354.33], 'b8': [175.75, 249.45], + 'b9': [124.72, 175.75], 'b10': [87.87, 124.72], + 'c0': [2599.37, 3676.54], + 'c1': [1836.85, 2599.37], 'c2': [1298.27, 1836.85], 'c3': [918.43, 1298.27], + 'c4': [649.13, 918.43], 'c5': [459.21, 649.13], 'c6': [323.15, 459.21], + 'c7': [229.61, 323.15], 'c8': [161.57, 229.61], 'c9': [113.39, 161.57], + 'c10': [79.37, 113.39], + 'dl': [311.81, 623.62], + 'letter': [612, 792], 'government-letter': [576, 756], 'legal': [612, 1008], + 'junior-legal': [576, 360], 'ledger': [1224, 792], 'tabloid': [792, 1224], + 'credit-card': [153, 243] + }; + var FONT_ROW_RATIO = 1.15; + var el = this; + var DownloadEvt = null; + var $hrows = []; + var $rows = []; + var rowIndex = 0; + var trData = ''; + var colNames = []; + var ranges = []; + var blob; + var $hiddenTableElements = []; + var checkCellVisibilty = false; + + $.extend(true, defaults, options); + + // Adopt deprecated options + if (defaults.type === 'xlsx') { + defaults.mso.fileFormat = defaults.type; + defaults.type = 'excel'; + } + if (typeof defaults.excelFileFormat !== 'undefined' && defaults.mso.fileFormat === 'undefined') + defaults.mso.fileFormat = defaults.excelFileFormat; + if (typeof defaults.excelPageFormat !== 'undefined' && defaults.mso.pageFormat === 'undefined') + defaults.mso.pageFormat = defaults.excelPageFormat; + if (typeof defaults.excelPageOrientation !== 'undefined' && defaults.mso.pageOrientation === 'undefined') + defaults.mso.pageOrientation = defaults.excelPageOrientation; + if (typeof defaults.excelRTL !== 'undefined' && defaults.mso.rtl === 'undefined') + defaults.mso.rtl = defaults.excelRTL; + if (typeof defaults.excelstyles !== 'undefined' && defaults.mso.styles === 'undefined') + defaults.mso.styles = defaults.excelstyles; + if (typeof defaults.onMsoNumberFormat !== 'undefined' && defaults.mso.onMsoNumberFormat === 'undefined') + defaults.mso.onMsoNumberFormat = defaults.onMsoNumberFormat; + if (typeof defaults.worksheetName !== 'undefined' && defaults.mso.worksheetName === 'undefined') + defaults.mso.worksheetName = defaults.worksheetName; + + // Check values of some options + defaults.mso.pageOrientation = (defaults.mso.pageOrientation.substr(0, 1) === 'l') ? 'landscape' : 'portrait'; + defaults.maxNestedTables = (defaults.maxNestedTables >= 0 ? defaults.maxNestedTables : 1); + + colNames = GetColumnNames(el); + + if ( defaults.type === 'csv' || defaults.type === 'tsv' || defaults.type === 'txt' ) { + + var csvData = ""; + var rowlength = 0; + ranges = []; + rowIndex = 0; + + var csvString = function (cell, rowIndex, colIndex) { + var result = ''; + + if ( cell !== null ) { + var dataString = parseString(cell, rowIndex, colIndex); + + var csvValue = (dataString === null || dataString === '') ? '' : dataString.toString(); + + if ( defaults.type === 'tsv' ) { + if ( dataString instanceof Date ) + dataString.toLocaleString(); + + // According to http://www.iana.org/assignments/media-types/text/tab-separated-values + // are fields that contain tabs not allowable in tsv encoding + result = replaceAll(csvValue, '\t', ' '); + } + else { + // Takes a string and encapsulates it (by default in double-quotes) if it + // contains the csv field separator, spaces, or linebreaks. + if ( dataString instanceof Date ) + result = defaults.csvEnclosure + dataString.toLocaleString() + defaults.csvEnclosure; + else { + result = preventInjection(csvValue); + result = replaceAll(result, defaults.csvEnclosure, defaults.csvEnclosure + defaults.csvEnclosure); + + if ( result.indexOf(defaults.csvSeparator) >= 0 || /[\r\n ]/g.test(result) ) + result = defaults.csvEnclosure + result + defaults.csvEnclosure; + } + } + } + + return result; + }; + + var CollectCsvData = function ($rows, rowselector, length) { + + $rows.each(function () { + trData = ""; + ForEachVisibleCell(this, rowselector, rowIndex, length + $rows.length, + function (cell, row, col) { + trData += csvString(cell, row, col) + (defaults.type === 'tsv' ? '\t' : defaults.csvSeparator); + }); + trData = $.trim(trData).substring(0, trData.length - 1); + if ( trData.length > 0 ) { + + if ( csvData.length > 0 ) + csvData += "\n"; + + csvData += trData; + } + rowIndex++; + }); + + return $rows.length; + }; + + rowlength += CollectCsvData($(el).find('thead').first().find(defaults.theadSelector), 'th,td', rowlength); + findTablePart($(el),'tbody').each(function () { + rowlength += CollectCsvData(findRows($(this), defaults.tbodySelector), 'td,th', rowlength); + }); + if ( defaults.tfootSelector.length ) + CollectCsvData($(el).find('tfoot').first().find(defaults.tfootSelector), 'td,th', rowlength); + + csvData += "\n"; + + //output + if ( defaults.outputMode === 'string' ) + return csvData; + + if ( defaults.outputMode === 'base64' ) + return base64encode(csvData); + + if ( defaults.outputMode === 'window' ) { + downloadFile(false, 'data:text/' + (defaults.type === 'csv' ? 'csv' : 'plain') + ';charset=utf-8,', csvData); + return; + } + + try { + blob = new Blob([csvData], {type: "text/" + (defaults.type === 'csv' ? 'csv' : 'plain') + ";charset=utf-8"}); + saveAs(blob, defaults.fileName + '.' + defaults.type, (defaults.type !== 'csv' || defaults.csvUseBOM === false)); + } + catch (e) { + downloadFile(defaults.fileName + '.' + defaults.type, + 'data:text/' + (defaults.type === 'csv' ? 'csv' : 'plain') + ';charset=utf-8,' + ((defaults.type === 'csv' && defaults.csvUseBOM) ? '\ufeff' : ''), + csvData); + } + + } else if ( defaults.type === 'sql' ) { + + // Header + rowIndex = 0; + ranges = []; + var tdData = "INSERT INTO `" + defaults.tableName + "` ("; + $hrows = $(el).find('thead').first().find(defaults.theadSelector); + $hrows.each(function () { + ForEachVisibleCell(this, 'th,td', rowIndex, $hrows.length, + function (cell, row, col) { + tdData += "'" + parseString(cell, row, col) + "',"; + }); + rowIndex++; + tdData = $.trim(tdData).substring(0, tdData.length - 1); + }); + tdData += ") VALUES "; + + // Data + $rows = collectRows ($(el)); + $($rows).each(function () { + trData = ""; + ForEachVisibleCell(this, 'td,th', rowIndex, $hrows.length + $rows.length, + function (cell, row, col) { + trData += "'" + parseString(cell, row, col) + "',"; + }); + if ( trData.length > 3 ) { + tdData += "(" + trData; + tdData = $.trim(tdData).substring(0, tdData.length - 1); + tdData += "),"; + } + rowIndex++; + }); + + tdData = $.trim(tdData).substring(0, tdData.length - 1); + tdData += ";"; + + // Output + if ( defaults.outputMode === 'string' ) + return tdData; + + if ( defaults.outputMode === 'base64' ) + return base64encode(tdData); + + try { + blob = new Blob([tdData], {type: "text/plain;charset=utf-8"}); + saveAs(blob, defaults.fileName + '.sql'); + } + catch (e) { + downloadFile(defaults.fileName + '.sql', + 'data:application/sql;charset=utf-8,', + tdData); + } + + } else if ( defaults.type === 'json' ) { + var jsonHeaderArray = []; + ranges = []; + $hrows = $(el).find('thead').first().find(defaults.theadSelector); + $hrows.each(function () { + var jsonArrayTd = []; + + ForEachVisibleCell(this, 'th,td', rowIndex, $hrows.length, + function (cell, row, col) { + jsonArrayTd.push(parseString(cell, row, col)); + }); + jsonHeaderArray.push(jsonArrayTd); + }); + + // Data + var jsonArray = []; + + $rows = collectRows ($(el)); + $($rows).each(function () { + var jsonObjectTd = {}; + var colIndex = 0; + + ForEachVisibleCell(this, 'td,th', rowIndex, $hrows.length + $rows.length, + function (cell, row, col) { + if ( jsonHeaderArray.length ) { + jsonObjectTd[jsonHeaderArray[jsonHeaderArray.length - 1][colIndex]] = parseString(cell, row, col); + } else { + jsonObjectTd[colIndex] = parseString(cell, row, col); + } + colIndex++; + }); + if ( $.isEmptyObject(jsonObjectTd) === false ) + jsonArray.push(jsonObjectTd); + + rowIndex++; + }); + + var sdata = ""; + + if ( defaults.jsonScope === 'head' ) + sdata = JSON.stringify(jsonHeaderArray); + else if ( defaults.jsonScope === 'data' ) + sdata = JSON.stringify(jsonArray); + else // all + sdata = JSON.stringify({header: jsonHeaderArray, data: jsonArray}); + + if ( defaults.outputMode === 'string' ) + return sdata; + + if ( defaults.outputMode === 'base64' ) + return base64encode(sdata); + + try { + blob = new Blob([sdata], {type: "application/json;charset=utf-8"}); + saveAs(blob, defaults.fileName + '.json'); + } + catch (e) { + downloadFile(defaults.fileName + '.json', + 'data:application/json;charset=utf-8;base64,', + sdata); + } + + } else if ( defaults.type === 'xml' ) { + rowIndex = 0; + ranges = []; + var xml = ''; + xml += ''; + + // Header + $hrows = $(el).find('thead').first().find(defaults.theadSelector); + $hrows.each(function () { + + ForEachVisibleCell(this, 'th,td', rowIndex, $hrows.length, + function (cell, row, col) { + xml += "" + parseString(cell, row, col) + ""; + }); + rowIndex++; + }); + xml += ''; + + // Data + var rowCount = 1; + + $rows = collectRows ($(el)); + $($rows).each(function () { + var colCount = 1; + trData = ""; + ForEachVisibleCell(this, 'td,th', rowIndex, $hrows.length + $rows.length, + function (cell, row, col) { + trData += "" + parseString(cell, row, col) + ""; + colCount++; + }); + if ( trData.length > 0 && trData !== "" ) { + xml += '' + trData + ''; + rowCount++; + } + + rowIndex++; + }); + xml += ''; + + // Output + if ( defaults.outputMode === 'string' ) + return xml; + + if ( defaults.outputMode === 'base64' ) + return base64encode(xml); + + try { + blob = new Blob([xml], {type: "application/xml;charset=utf-8"}); + saveAs(blob, defaults.fileName + '.xml'); + } + catch (e) { + downloadFile(defaults.fileName + '.xml', + 'data:application/xml;charset=utf-8;base64,', + xml); + } + } + else if ( defaults.type === 'excel' && defaults.mso.fileFormat === 'xmlss' ) { + var docDatas = []; + var docNames = []; + + $(el).filter(function () { + return isVisible($(this)); + }).each(function () { + var $table = $(this); + + var ssName = ''; + if ( typeof defaults.mso.worksheetName === 'string' && defaults.mso.worksheetName.length ) + ssName = defaults.mso.worksheetName + ' ' + (docNames.length + 1); + else if ( typeof defaults.mso.worksheetName[docNames.length] !== 'undefined' ) + ssName = defaults.mso.worksheetName[docNames.length]; + if ( ! ssName.length ) + ssName = $table.find('caption').text() || ''; + if ( ! ssName.length ) + ssName = 'Table ' + (docNames.length + 1); + ssName = $.trim(ssName.replace(/[\\\/[\]*:?'"]/g,'').substring(0,31)); + + docNames.push($('
    ').text(ssName).html()); + + if ( defaults.exportHiddenCells === false ) { + $hiddenTableElements = $table.find("tr, th, td").filter(":hidden"); + checkCellVisibilty = $hiddenTableElements.length > 0; + } + + rowIndex = 0; + colNames = GetColumnNames(this); + docData = '\r'; + + function CollectXmlssData ($rows, rowselector, length) { + var spans = []; + + $($rows).each(function () { + var ssIndex = 0; + var nCols = 0; + trData = ""; + + ForEachVisibleCell(this, 'td,th', rowIndex, length + $rows.length, + function (cell, row, col) { + if ( cell !== null ) { + var style = ""; + var data = parseString(cell, row, col); + var type = "String"; + + if ( jQuery.isNumeric(data) !== false ) { + type = "Number"; + } + else { + var number = parsePercent(data); + if ( number !== false ) { + data = number; + type = "Number"; + style += ' ss:StyleID="pct1"'; + } + } + + if ( type !== "Number" ) + data = data.replace(/\n/g, '
    '); + + var colspan = getColspan (cell); + var rowspan = getRowspan (cell); + + // Skip spans + $.each(spans, function () { + var range = this; + if ( rowIndex >= range.s.r && rowIndex <= range.e.r && nCols >= range.s.c && nCols <= range.e.c ) { + for ( var i = 0; i <= range.e.c - range.s.c; ++i ) { + nCols++; + ssIndex++; + } + } + }); + + // Handle Row Span + if ( rowspan || colspan ) { + rowspan = rowspan || 1; + colspan = colspan || 1; + spans.push({ + s: {r: rowIndex, c: nCols}, + e: {r: rowIndex + rowspan - 1, c: nCols + colspan - 1} + }); + } + + // Handle Colspan + if ( colspan > 1 ) { + style += ' ss:MergeAcross="' + (colspan-1) + '"'; + nCols += (colspan - 1); + } + + if ( rowspan > 1 ) { + style += ' ss:MergeDown="' + (rowspan-1) + '" ss:StyleID="rsp1"'; + } + + if ( ssIndex > 0 ) { + style += ' ss:Index="' + (nCols+1) + '"'; + ssIndex = 0; + } + + trData += '' + + $('
    ').text(data).html() + + '\r'; + nCols++; + } + }); + if ( trData.length > 0 ) + docData += '\r' + trData + '\r'; + rowIndex++; + }); + + return $rows.length; + } + + var rowLength = 0; + rowLength += CollectXmlssData ($table.find('thead').first().find(defaults.theadSelector), 'th,td', rowLength); + CollectXmlssData (collectRows ($table), 'td,th', rowLength); + + docData += '
    \r'; + docDatas.push(docData); + }); + + var count = {}; + var firstOccurences = {}; + var item, itemCount; + for (var n = 0, c = docNames.length; n < c; n++) + { + item = docNames[n]; + itemCount = count[item]; + itemCount = count[item] = (itemCount == null ? 1 : itemCount + 1); + + if( itemCount === 2 ) + docNames[firstOccurences[item]] = docNames[firstOccurences[item]].substring(0,29) + "-1"; + if( count[ item ] > 1 ) + docNames[n] = docNames[n].substring(0,29) + "-" + count[item]; + else + firstOccurences[item] = n; + } + + var CreationDate = new Date().toISOString(); + var xmlssDocFile = '\r' + + '\r' + + '\r' + + '\r' + + ' ' + CreationDate + '\r' + + '\r' + + '\r' + + ' \r' + + '\r' + + '\r' + + ' 9000\r' + + ' 13860\r' + + ' 0\r' + + ' 0\r' + + ' False\r' + + ' False\r' + + '\r' + + '\r' + + ' \r' + + ' \r' + + ' \r' + + '\r'; + + for ( var j = 0; j < docDatas.length; j++ ) { + xmlssDocFile += '\r' + + docDatas[j]; + if (defaults.mso.rtl) { + xmlssDocFile += '\r' + + '\r' + + '\r'; + } + else + xmlssDocFile += '\r'; + xmlssDocFile += '\r'; + } + + xmlssDocFile += '\r'; + + if ( defaults.outputMode === 'string' ) + return xmlssDocFile; + + if ( defaults.outputMode === 'base64' ) + return base64encode(xmlssDocFile); + + try { + blob = new Blob([xmlssDocFile], {type: "application/xml;charset=utf-8"}); + saveAs(blob, defaults.fileName + '.xml'); + } + catch (e) { + downloadFile(defaults.fileName + '.xml', + 'data:application/xml;charset=utf-8;base64,', + xmlssDocFile); + } + } + else if ( defaults.type === 'excel' && defaults.mso.fileFormat === 'xlsx' ) { + + var data = []; + var spans = []; + rowIndex = 0; + + $rows = $(el).find('thead').first().find(defaults.theadSelector).toArray(); + $rows.push.apply($rows, collectRows ($(el))); + + $($rows).each(function () { + var cols = []; + ForEachVisibleCell(this, 'th,td', rowIndex, $rows.length, + function (cell, row, col) { + if ( typeof cell !== 'undefined' && cell !== null ) { + + var cellValue = parseString(cell, row, col); + + var colspan = getColspan (cell); + var rowspan = getRowspan (cell); + + // Skip span ranges + $.each(spans, function () { + var range = this; + if ( rowIndex >= range.s.r && rowIndex <= range.e.r && cols.length >= range.s.c && cols.length <= range.e.c ) { + for ( var i = 0; i <= range.e.c - range.s.c; ++i ) + cols.push(null); + } + }); + + // Handle Row Span + if ( rowspan || colspan ) { + rowspan = rowspan || 1; + colspan = colspan || 1; + spans.push({ + s: {r: rowIndex, c: cols.length}, + e: {r: rowIndex + rowspan - 1, c: cols.length + colspan - 1} + }); + } + + // Handle Value + if ( typeof defaults.onCellData !== 'function' ) { + + // Type conversion + if ( cellValue !== "" && cellValue === +cellValue ) + cellValue = +cellValue; + } + cols.push(cellValue !== "" ? cellValue : null); + + // Handle Colspan + if ( colspan ) + for ( var k = 0; k < colspan - 1; ++k ) + cols.push(null); + } + }); + data.push(cols); + rowIndex++; + }); + + //noinspection JSPotentiallyInvalidConstructorUsage + var wb = new jx_Workbook(), + ws = jx_createSheet(data); + + // add span ranges to worksheet + ws['!merges'] = spans; + + // add worksheet to workbook + //wb.SheetNames.push(defaults.mso.worksheetName); + //wb.Sheets[defaults.mso.worksheetName] = ws; + XLSX.utils.book_append_sheet(wb, ws, defaults.mso.worksheetName); + + var wbout = XLSX.write(wb, {type: 'binary', bookType: defaults.mso.fileFormat, bookSST: false}); + + try { + blob = new Blob([jx_s2ab(wbout)], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'}); + saveAs(blob, defaults.fileName + '.' + defaults.mso.fileFormat); + } + catch (e) { + downloadFile(defaults.fileName + '.' + defaults.mso.fileFormat, + 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8,', + jx_s2ab(wbout)); + } + } + else if ( defaults.type === 'excel' || defaults.type === 'xls' || defaults.type === 'word' || defaults.type === 'doc' ) { + + var MSDocType = (defaults.type === 'excel' || defaults.type === 'xls') ? 'excel' : 'word'; + var MSDocExt = (MSDocType === 'excel') ? 'xls' : 'doc'; + var MSDocSchema = 'xmlns:x="urn:schemas-microsoft-com:office:' + MSDocType + '"'; + var docData = ''; + var docName = ''; + + $(el).filter(function () { + return isVisible($(this)); + }).each(function () { + var $table = $(this); + + if (docName === '') { + docName = defaults.mso.worksheetName || $table.find('caption').text() || 'Table'; + docName = $.trim(docName.replace(/[\\\/[\]*:?'"]/g, '').substring(0, 31)); + } + + if ( defaults.exportHiddenCells === false ) { + $hiddenTableElements = $table.find("tr, th, td").filter(":hidden"); + checkCellVisibilty = $hiddenTableElements.length > 0; + } + + rowIndex = 0; + ranges = []; + colNames = GetColumnNames(this); + + // Header + docData += ''; + $hrows = $table.find('thead').first().find(defaults.theadSelector); + $hrows.each(function () { + trData = ""; + ForEachVisibleCell(this, 'th,td', rowIndex, $hrows.length, + function (cell, row, col) { + if ( cell !== null ) { + var thstyle = ''; + trData += ' 0 ) + trData += ' colspan="' + tdcolspan + '"'; + + var tdrowspan = getRowspan (cell); + if ( tdrowspan > 0 ) + trData += ' rowspan="' + tdrowspan + '"'; + + trData += '>' + parseString(cell, row, col) + ''; + } + }); + if ( trData.length > 0 ) + docData += '' + trData + ''; + rowIndex++; + }); + docData += ''; + + // Data + $rows = collectRows ($table); + $($rows).each(function () { + var $row = $(this); + trData = ""; + ForEachVisibleCell(this, 'td,th', rowIndex, $hrows.length + $rows.length, + function (cell, row, col) { + if ( cell !== null ) { + var tdvalue = parseString(cell, row, col); + var tdstyle = ''; + var tdcss = $(cell).data("tableexport-msonumberformat"); + + if ( typeof tdcss === 'undefined' && typeof defaults.mso.onMsoNumberFormat === 'function' ) + tdcss = defaults.mso.onMsoNumberFormat(cell, row, col); + + if ( typeof tdcss !== 'undefined' && tdcss !== '' ) + tdstyle = 'style="mso-number-format:\'' + tdcss + '\''; + + for ( var cssStyle in defaults.mso.styles ) { + if ( defaults.mso.styles.hasOwnProperty(cssStyle) ) { + tdcss = $(cell).css(defaults.mso.styles[cssStyle]); + if ( tdcss === '' ) + tdcss = $row.css(defaults.mso.styles[cssStyle]); + + if ( tdcss !== '' && tdcss !== '0px none rgb(0, 0, 0)' && tdcss !== 'rgba(0, 0, 0, 0)' ) { + tdstyle += (tdstyle === '') ? 'style="' : ';'; + tdstyle += defaults.mso.styles[cssStyle] + ':' + tdcss; + } + } + } + trData += ' 0 ) + trData += ' colspan="' + tdcolspan + '"'; + + var tdrowspan = getRowspan (cell); + if ( tdrowspan > 0 ) + trData += ' rowspan="' + tdrowspan + '"'; + + if ( typeof tdvalue === 'string' && tdvalue !== '' ) { + tdvalue = preventInjection(tdvalue); + tdvalue = tdvalue.replace(/\n/g, '
    '); + } + + trData += '>' + tdvalue + ''; + } + }); + if ( trData.length > 0 ) + docData += '
    ' + trData + ''; + rowIndex++; + }); + + if ( defaults.displayTableName ) + docData += ''; + + docData += '
    ' + parseString($('

    ' + defaults.tableName + '

    ')) + '
    '; + }); + + //noinspection XmlUnusedNamespaceDeclaration + var docFile = ''; + docFile += ''; + docFile += ""; + if (MSDocType === 'excel') { + docFile += ""; + } + docFile += ""; + docFile += ""; + docFile += ""; + docFile += "
    "; + docFile += docData; + docFile += "
    "; + docFile += ""; + docFile += ""; + + if ( defaults.outputMode === 'string' ) + return docFile; + + if ( defaults.outputMode === 'base64' ) + return base64encode(docFile); + + try { + blob = new Blob([docFile], {type: 'application/vnd.ms-' + defaults.type}); + saveAs(blob, defaults.fileName + '.' + MSDocExt); + } + catch (e) { + downloadFile(defaults.fileName + '.' + MSDocExt, + 'data:application/vnd.ms-' + MSDocType + ';base64,', + docFile); + } + } + else if ( defaults.type === 'png' ) { + //html2canvas($(el)[0], { + // onrendered: function (canvas) { + html2canvas($(el)[0]).then( + function (canvas) { + + var image = canvas.toDataURL(); + var byteString = atob(image.substring(22)); // remove data stuff + var buffer = new ArrayBuffer(byteString.length); + var intArray = new Uint8Array(buffer); + + for ( var i = 0; i < byteString.length; i++ ) + intArray[i] = byteString.charCodeAt(i); + + if ( defaults.outputMode === 'string' ) + return byteString; + + if ( defaults.outputMode === 'base64' ) + return base64encode(image); + + if ( defaults.outputMode === 'window' ) { + window.open(image); + return; + } + + try { + blob = new Blob([buffer], {type: "image/png"}); + saveAs(blob, defaults.fileName + '.png'); + } + catch (e) { + downloadFile(defaults.fileName + '.png', 'data:image/png,', blob); + } + //} + }); + + } else if ( defaults.type === 'pdf' ) { + + if ( defaults.pdfmake.enabled === true ) { + // pdf output using pdfmake + // https://github.com/bpampuch/pdfmake + + var widths = []; + var body = []; + rowIndex = 0; + ranges = []; + + /** + * @return {number} + */ + var CollectPdfmakeData = function ($rows, colselector, length) { + var rlength = 0; + + $($rows).each(function () { + var r = []; + + ForEachVisibleCell(this, colselector, rowIndex, length, + function (cell, row, col) { + if ( typeof cell !== 'undefined' && cell !== null ) { + + var colspan = getColspan (cell); + var rowspan = getRowspan (cell); + + var cellValue = parseString(cell, row, col) || " "; + + if ( colspan > 1 || rowspan > 1 ) { + colspan = colspan || 1; + rowspan = rowspan || 1; + r.push({colSpan: colspan, rowSpan: rowspan, text: cellValue}); + } + else + r.push(cellValue); + } + else + r.push(" "); + }); + + if ( r.length ) + body.push(r); + + if ( rlength < r.length ) + rlength = r.length; + + rowIndex++; + }); + + return rlength; + }; + + $hrows = $(this).find('thead').first().find(defaults.theadSelector); + + var colcount = CollectPdfmakeData($hrows, 'th,td', $hrows.length); + + for ( var i = widths.length; i < colcount; i++ ) + widths.push("*"); + + // Data + $rows = collectRows ($(this)); + + CollectPdfmakeData($rows, 'th,td', $hrows.length + $rows.length); + + var docDefinition = { + content: [{ + table: { + headerRows: $hrows.length, + widths: widths, + body: body + } + }] + }; + + $.extend(true, docDefinition, defaults.pdfmake.docDefinition); + + pdfMake.fonts = { + Roboto: { + normal: 'Roboto-Regular.ttf', + bold: 'Roboto-Medium.ttf', + italics: 'Roboto-Italic.ttf', + bolditalics: 'Roboto-MediumItalic.ttf' + } + }; + + $.extend(true, pdfMake.fonts, defaults.pdfmake.fonts); + + pdfMake.createPdf(docDefinition).getBuffer(function (buffer) { + + try { + var blob = new Blob([buffer], {type: "application/pdf"}); + saveAs(blob, defaults.fileName + '.pdf'); + } + catch (e) { + downloadFile(defaults.fileName + '.pdf', + 'data:application/pdf;base64,', + buffer); + } + }); + + } + else if ( defaults.jspdf.autotable === false ) { + // pdf output using jsPDF's core html support + + var addHtmlOptions = { + dim: { + w: getPropertyUnitValue($(el).first().get(0), 'width', 'mm'), + h: getPropertyUnitValue($(el).first().get(0), 'height', 'mm') + }, + pagesplit: false + }; + + var doc = new jsPDF(defaults.jspdf.orientation, defaults.jspdf.unit, defaults.jspdf.format); + doc.addHTML($(el).first(), + defaults.jspdf.margins.left, + defaults.jspdf.margins.top, + addHtmlOptions, + function () { + jsPdfOutput(doc, false); + }); + //delete doc; + } + else { + // pdf output using jsPDF AutoTable plugin + // https://github.com/simonbengtsson/jsPDF-AutoTable + + var teOptions = defaults.jspdf.autotable.tableExport; + + // When setting jspdf.format to 'bestfit' tableExport tries to choose + // the minimum required paper format and orientation in which the table + // (or tables in multitable mode) completely fits without column adjustment + if ( typeof defaults.jspdf.format === 'string' && defaults.jspdf.format.toLowerCase() === 'bestfit' ) { + var rk = '', ro = ''; + var mw = 0; + + $(el).each(function () { + if ( isVisible($(this)) ) { + var w = getPropertyUnitValue($(this).get(0), 'width', 'pt'); + + if ( w > mw ) { + if ( w > pageFormats.a0[0] ) { + rk = 'a0'; + ro = 'l'; + } + for ( var key in pageFormats ) { + if ( pageFormats.hasOwnProperty(key) ) { + if ( pageFormats[key][1] > w ) { + rk = key; + ro = 'l'; + if ( pageFormats[key][0] > w ) + ro = 'p'; + } + } + } + mw = w; + } + } + }); + defaults.jspdf.format = (rk === '' ? 'a4' : rk); + defaults.jspdf.orientation = (ro === '' ? 'w' : ro); + } + + // The jsPDF doc object is stored in defaults.jspdf.autotable.tableExport, + // thus it can be accessed from any callback function + if ( teOptions.doc == null ) { + teOptions.doc = new jsPDF(defaults.jspdf.orientation, + defaults.jspdf.unit, + defaults.jspdf.format); + + if ( typeof defaults.jspdf.onDocCreated === 'function' ) + defaults.jspdf.onDocCreated(teOptions.doc); + } + + if ( teOptions.outputImages === true ) + teOptions.images = {}; + + if ( typeof teOptions.images !== 'undefined' ) { + $(el).filter(function () { + return isVisible($(this)); + }).each(function () { + var rowCount = 0; + ranges = []; + + if ( defaults.exportHiddenCells === false ) { + $hiddenTableElements = $(this).find("tr, th, td").filter(":hidden"); + checkCellVisibilty = $hiddenTableElements.length > 0; + } + + $hrows = $(this).find('thead').find(defaults.theadSelector); + $rows = collectRows ($(this)); + + $($rows).each(function () { + ForEachVisibleCell(this, 'td,th', $hrows.length + rowCount, $hrows.length + $rows.length, + function (cell) { + if ( typeof cell !== 'undefined' && cell !== null ) { + var kids = $(cell).children(); + if ( typeof kids !== 'undefined' && kids.length > 0 ) + collectImages(cell, kids, teOptions); + } + }); + rowCount++; + }); + }); + + $hrows = []; + $rows = []; + } + + loadImages(teOptions, function () { + $(el).filter(function () { + return isVisible($(this)); + }).each(function () { + var colKey; + rowIndex = 0; + ranges = []; + + if ( defaults.exportHiddenCells === false ) { + $hiddenTableElements = $(this).find("tr, th, td").filter(":hidden"); + checkCellVisibilty = $hiddenTableElements.length > 0; + } + + colNames = GetColumnNames(this); + + teOptions.columns = []; + teOptions.rows = []; + teOptions.rowoptions = {}; + + // onTable: optional callback function for every matching table that can be used + // to modify the tableExport options or to skip the output of a particular table + // if the table selector targets multiple tables + if ( typeof teOptions.onTable === 'function' ) + if ( teOptions.onTable($(this), defaults) === false ) + return true; // continue to next iteration step (table) + + // each table works with an own copy of AutoTable options + defaults.jspdf.autotable.tableExport = null; // avoid deep recursion error + var atOptions = $.extend(true, {}, defaults.jspdf.autotable); + defaults.jspdf.autotable.tableExport = teOptions; + + atOptions.margin = {}; + $.extend(true, atOptions.margin, defaults.jspdf.margins); + atOptions.tableExport = teOptions; + + // Fix jsPDF Autotable's row height calculation + if ( typeof atOptions.beforePageContent !== 'function' ) { + atOptions.beforePageContent = function (data) { + if ( data.pageCount === 1 ) { + var all = data.table.rows.concat(data.table.headerRow); + $.each(all, function () { + var row = this; + if ( row.height > 0 ) { + row.height += (2 - FONT_ROW_RATIO) / 2 * row.styles.fontSize; + data.table.height += (2 - FONT_ROW_RATIO) / 2 * row.styles.fontSize; + } + }); + } + }; + } + + if ( typeof atOptions.createdHeaderCell !== 'function' ) { + // apply some original css styles to pdf header cells + atOptions.createdHeaderCell = function (cell, data) { + + // jsPDF AutoTable plugin v2.0.14 fix: each cell needs its own styles object + cell.styles = $.extend({}, data.row.styles); + + if ( typeof teOptions.columns [data.column.dataKey] !== 'undefined' ) { + var col = teOptions.columns [data.column.dataKey]; + + if ( typeof col.rect !== 'undefined' ) { + var rh; + + cell.contentWidth = col.rect.width; + + if ( typeof teOptions.heightRatio === 'undefined' || teOptions.heightRatio === 0 ) { + if ( data.row.raw [data.column.dataKey].rowspan ) + rh = data.row.raw [data.column.dataKey].rect.height / data.row.raw [data.column.dataKey].rowspan; + else + rh = data.row.raw [data.column.dataKey].rect.height; + + teOptions.heightRatio = cell.styles.rowHeight / rh; + } + + rh = data.row.raw [data.column.dataKey].rect.height * teOptions.heightRatio; + if ( rh > cell.styles.rowHeight ) + cell.styles.rowHeight = rh; + } + + cell.styles.halign = (atOptions.headerStyles.halign === 'inherit') ? 'center' : atOptions.headerStyles.halign; + cell.styles.valign = atOptions.headerStyles.valign; + + if ( typeof col.style !== 'undefined' && col.style.hidden !== true ) { + if ( atOptions.headerStyles.halign === 'inherit' ) + cell.styles.halign = col.style.align; + if ( atOptions.styles.fillColor === 'inherit' ) + cell.styles.fillColor = col.style.bcolor; + if ( atOptions.styles.textColor === 'inherit' ) + cell.styles.textColor = col.style.color; + if ( atOptions.styles.fontStyle === 'inherit' ) + cell.styles.fontStyle = col.style.fstyle; + } + } + }; + } + + if ( typeof atOptions.createdCell !== 'function' ) { + // apply some original css styles to pdf table cells + atOptions.createdCell = function (cell, data) { + var rowopt = teOptions.rowoptions [data.row.index + ":" + data.column.dataKey]; + + cell.styles.halign = (atOptions.styles.halign === 'inherit') ? 'center' : atOptions.styles.halign; + cell.styles.valign = atOptions.styles.valign; + + if ( typeof rowopt !== 'undefined' && typeof rowopt.style !== 'undefined' && rowopt.style.hidden !== true ) { + if ( atOptions.styles.halign === 'inherit' ) + cell.styles.halign = rowopt.style.align; + if ( atOptions.styles.fillColor === 'inherit' ) + cell.styles.fillColor = rowopt.style.bcolor; + if ( atOptions.styles.textColor === 'inherit' ) + cell.styles.textColor = rowopt.style.color; + if ( atOptions.styles.fontStyle === 'inherit' ) + cell.styles.fontStyle = rowopt.style.fstyle; + } + }; + } + + if ( typeof atOptions.drawHeaderCell !== 'function' ) { + atOptions.drawHeaderCell = function (cell, data) { + var colopt = teOptions.columns [data.column.dataKey]; + + if ( (colopt.style.hasOwnProperty("hidden") !== true || colopt.style.hidden !== true) && + colopt.rowIndex >= 0 ) + return prepareAutoTableText(cell, data, colopt); + else + return false; // cell is hidden + }; + } + + if ( typeof atOptions.drawCell !== 'function' ) { + atOptions.drawCell = function (cell, data) { + var rowopt = teOptions.rowoptions [data.row.index + ":" + data.column.dataKey]; + if ( prepareAutoTableText(cell, data, rowopt) ) { + + teOptions.doc.rect(cell.x, cell.y, cell.width, cell.height, cell.styles.fillStyle); + + if ( typeof rowopt !== 'undefined' && typeof rowopt.kids !== 'undefined' && rowopt.kids.length > 0 ) { + + var dh = cell.height / rowopt.rect.height; + if ( dh > teOptions.dh || typeof teOptions.dh === 'undefined' ) + teOptions.dh = dh; + teOptions.dw = cell.width / rowopt.rect.width; + + var y = cell.textPos.y; + drawAutotableElements(cell, rowopt.kids, teOptions); + cell.textPos.y = y; + drawAutotableText(cell, rowopt.kids, teOptions); + } + else + drawAutotableText(cell, {}, teOptions); + } + return false; + }; + } + + // collect header and data rows + teOptions.headerrows = []; + $hrows = $(this).find('thead').find(defaults.theadSelector); + $hrows.each(function () { + colKey = 0; + teOptions.headerrows[rowIndex] = []; + + ForEachVisibleCell(this, 'th,td', rowIndex, $hrows.length, + function (cell, row, col) { + var obj = getCellStyles(cell); + obj.title = parseString(cell, row, col); + obj.key = colKey++; + obj.rowIndex = rowIndex; + teOptions.headerrows[rowIndex].push(obj); + }); + rowIndex++; + }); + + if ( rowIndex > 0 ) { + // iterate through last row + var lastrow = rowIndex - 1; + while ( lastrow >= 0 ) { + $.each(teOptions.headerrows[lastrow], function () { + var obj = this; + + if ( lastrow > 0 && this.rect === null ) + obj = teOptions.headerrows[lastrow - 1][this.key]; + + if ( obj !== null && obj.rowIndex >= 0 && + (obj.style.hasOwnProperty("hidden") !== true || obj.style.hidden !== true) ) + teOptions.columns.push(obj); + }); + + lastrow = (teOptions.columns.length > 0) ? -1 : lastrow - 1; + } + } + + var rowCount = 0; + $rows = []; + $rows = collectRows ($(this)); + $($rows).each(function () { + var rowData = []; + colKey = 0; + + ForEachVisibleCell(this, 'td,th', rowIndex, $hrows.length + $rows.length, + function (cell, row, col) { + var obj; + + if ( typeof teOptions.columns[colKey] === 'undefined' ) { + // jsPDF-Autotable needs columns. Thus define hidden ones for tables without thead + obj = { + title: '', + key: colKey, + style: { + hidden: true + } + }; + teOptions.columns.push(obj); + } + if ( typeof cell !== 'undefined' && cell !== null ) { + obj = getCellStyles(cell); + obj.kids = $(cell).children(); + teOptions.rowoptions [rowCount + ":" + colKey++] = obj; + } + else { + obj = $.extend(true, {}, teOptions.rowoptions [rowCount + ":" + (colKey - 1)]); + obj.colspan = -1; + teOptions.rowoptions [rowCount + ":" + colKey++] = obj; + } + + rowData.push(parseString(cell, row, col)); + }); + if ( rowData.length ) { + teOptions.rows.push(rowData); + rowCount++; + } + rowIndex++; + }); + + // onBeforeAutotable: optional callback function before calling + // jsPDF AutoTable that can be used to modify the AutoTable options + if ( typeof teOptions.onBeforeAutotable === 'function' ) + teOptions.onBeforeAutotable($(this), teOptions.columns, teOptions.rows, atOptions); + + teOptions.doc.autoTable(teOptions.columns, teOptions.rows, atOptions); + + // onAfterAutotable: optional callback function after returning + // from jsPDF AutoTable that can be used to modify the AutoTable options + if ( typeof teOptions.onAfterAutotable === 'function' ) + teOptions.onAfterAutotable($(this), atOptions); + + // set the start position for the next table (in case there is one) + defaults.jspdf.autotable.startY = teOptions.doc.autoTableEndPosY() + atOptions.margin.top; + + }); + + jsPdfOutput(teOptions.doc, (typeof teOptions.images !== 'undefined' && jQuery.isEmptyObject(teOptions.images) === false)); + + if ( typeof teOptions.headerrows !== 'undefined' ) + teOptions.headerrows.length = 0; + if ( typeof teOptions.columns !== 'undefined' ) + teOptions.columns.length = 0; + if ( typeof teOptions.rows !== 'undefined' ) + teOptions.rows.length = 0; + delete teOptions.doc; + teOptions.doc = null; + }); + } + } + + /* + function FindColObject (objects, colIndex, rowIndex) { + var result = null; + $.each(objects, function () { + if ( this.rowIndex == rowIndex && this.key == colIndex ) { + result = this; + return false; + } + }); + return result; + } + */ + function collectRows ($table) { + var result = []; + findTablePart($table,'tbody').each(function () { + result.push.apply(result, findRows($(this), defaults.tbodySelector).toArray()); + }); + if ( defaults.tfootSelector.length ) { + findTablePart($table,'tfoot').each(function () { + result.push.apply(result, findRows($(this), defaults.tfootSelector).toArray()); + }); + } + return result; + } + + function findTablePart ($table, type) { + var tl = $table.parents('table').length; + return $table.find(type).filter (function () { + return $(this).closest('table').parents('table').length === tl; + }); + } + + function findRows ($tpart, rowSelector) { + return $tpart.find(rowSelector).filter (function () { + return (defaults.maxNestedTables === 0 || + ($(this).find('table').length < defaults.maxNestedTables && + $(this).parents('table').length <= defaults.maxNestedTables)); + }); + } + + function GetColumnNames (table) { + var result = []; + $(table).find('thead').first().find('th').each(function (index, el) { + if ( $(el).attr("data-field") !== undefined ) + result[index] = $(el).attr("data-field"); + else + result[index] = index.toString(); + }); + return result; + } + + function isVisible ($element) { + var isCell = typeof $element[0].cellIndex !== 'undefined'; + var isRow = typeof $element[0].rowIndex !== 'undefined'; + var isElementVisible = (isCell || isRow) ? isTableElementVisible($element) : $element.is(':visible'); + var tableexportDisplay = $element.data("tableexport-display"); + + if (isCell && tableexportDisplay !== 'none' && tableexportDisplay !== 'always') { + $element = $($element[0].parentNode); + isRow = typeof $element[0].rowIndex !== 'undefined'; + tableexportDisplay = $element.data("tableexport-display"); + } + if (isRow && tableexportDisplay !== 'none' && tableexportDisplay !== 'always') { + tableexportDisplay = $element.closest('table').data("tableexport-display"); + } + + return tableexportDisplay !== 'none' && (isElementVisible === true || tableexportDisplay === 'always'); + } + + function isTableElementVisible ($element) { + var hiddenEls = []; + + if ( checkCellVisibilty ) { + hiddenEls = $hiddenTableElements.filter (function () { + var found = false; + + if (this.nodeType === $element[0].nodeType) { + if (typeof this.rowIndex !== 'undefined' && this.rowIndex === $element[0].rowIndex) + found = true; + else if (typeof this.cellIndex !== 'undefined' && this.cellIndex === $element[0].cellIndex && + typeof this.parentNode.rowIndex !== 'undefined' && + typeof $element[0].parentNode.rowIndex !== 'undefined' && + this.parentNode.rowIndex === $element[0].parentNode.rowIndex) + found = true; + } + return found; + }); + } + return (checkCellVisibilty === false || hiddenEls.length === 0); + } + + function isColumnIgnored ($cell, rowLength, colIndex) { + var result = false; + + if (isVisible($cell)) { + if ( defaults.ignoreColumn.length > 0 ) { + if ( $.inArray(colIndex, defaults.ignoreColumn) !== -1 || + $.inArray(colIndex - rowLength, defaults.ignoreColumn) !== -1 || + (colNames.length > colIndex && typeof colNames[colIndex] !== 'undefined' && + $.inArray(colNames[colIndex], defaults.ignoreColumn) !== -1) ) + result = true; + } + } + else + result = true; + + return result; + } + + function ForEachVisibleCell (tableRow, selector, rowIndex, rowCount, cellcallback) { + if ( typeof (cellcallback) === 'function' ) { + var ignoreRow = false; + + if (typeof defaults.onIgnoreRow === 'function') + ignoreRow = defaults.onIgnoreRow($(tableRow), rowIndex); + + if (ignoreRow === false && + $.inArray(rowIndex, defaults.ignoreRow) === -1 && + $.inArray(rowIndex - rowCount, defaults.ignoreRow) === -1 && + isVisible($(tableRow))) { + + var $cells = $(tableRow).find(selector); + var cellCount = 0; + + $cells.each(function (colIndex) { + var $cell = $(this); + var c; + var colspan = getColspan (this); + var rowspan = getRowspan (this); + + // Skip ranges + $.each(ranges, function () { + var range = this; + if ( rowIndex >= range.s.r && rowIndex <= range.e.r && cellCount >= range.s.c && cellCount <= range.e.c ) { + for ( c = 0; c <= range.e.c - range.s.c; ++c ) + cellcallback(null, rowIndex, cellCount++); + } + }); + + if ( isColumnIgnored($cell, $cells.length, colIndex) === false ) { + // Handle Row Span + if ( rowspan || colspan ) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({ + s: {r: rowIndex, c: cellCount}, + e: {r: rowIndex + rowspan - 1, c: cellCount + colspan - 1} + }); + } + + // Handle Value + cellcallback(this, rowIndex, cellCount++); + } + + // Handle Colspan + if ( colspan ) + for ( c = 0; c < colspan - 1; ++c ) + cellcallback(null, rowIndex, cellCount++); + }); + + // Skip ranges + $.each(ranges, function () { + var range = this; + if ( rowIndex >= range.s.r && rowIndex <= range.e.r && cellCount >= range.s.c && cellCount <= range.e.c ) { + for ( c = 0; c <= range.e.c - range.s.c; ++c ) + cellcallback(null, rowIndex, cellCount++); + } + }); + } + } + } + + function jsPdfOutput (doc, hasimages) { + if ( defaults.outputMode === 'string' ) + return doc.output(); + + if ( defaults.outputMode === 'base64' ) + return base64encode(doc.output()); + + if ( defaults.outputMode === 'window' ) { + window.URL = window.URL || window.webkitURL; + window.open(window.URL.createObjectURL(doc.output("blob"))); + return; + } + + try { + var blob = doc.output('blob'); + saveAs(blob, defaults.fileName + '.pdf'); + } + catch (e) { + downloadFile(defaults.fileName + '.pdf', + 'data:application/pdf' + (hasimages ? '' : ';base64') + ',', + hasimages ? doc.output('blob') : doc.output()); + } + } + + function prepareAutoTableText (cell, data, cellopt) { + var cs = 0; + if ( typeof cellopt !== 'undefined' ) + cs = cellopt.colspan; + + if ( cs >= 0 ) { + // colspan handling + var cellWidth = cell.width; + var textPosX = cell.textPos.x; + var i = data.table.columns.indexOf(data.column); + + for ( var c = 1; c < cs; c++ ) { + var column = data.table.columns[i + c]; + cellWidth += column.width; + } + + if ( cs > 1 ) { + if ( cell.styles.halign === 'right' ) + textPosX = cell.textPos.x + cellWidth - cell.width; + else if ( cell.styles.halign === 'center' ) + textPosX = cell.textPos.x + (cellWidth - cell.width) / 2; + } + + cell.width = cellWidth; + cell.textPos.x = textPosX; + + if ( typeof cellopt !== 'undefined' && cellopt.rowspan > 1 ) + cell.height = cell.height * cellopt.rowspan; + + // fix jsPDF's calculation of text position + if ( cell.styles.valign === 'middle' || cell.styles.valign === 'bottom' ) { + var splittedText = typeof cell.text === 'string' ? cell.text.split(/\r\n|\r|\n/g) : cell.text; + var lineCount = splittedText.length || 1; + if ( lineCount > 2 ) + cell.textPos.y -= ((2 - FONT_ROW_RATIO) / 2 * data.row.styles.fontSize) * (lineCount - 2) / 3; + } + return true; + } + else + return false; // cell is hidden (colspan = -1), don't draw it + } + + function collectImages (cell, elements, teOptions) { + if ( typeof teOptions.images !== 'undefined' ) { + elements.each(function () { + var kids = $(this).children(); + + if ( $(this).is("img") ) { + var hash = strHashCode(this.src); + + teOptions.images[hash] = { + url: this.src, + src: this.src + }; + } + + if ( typeof kids !== 'undefined' && kids.length > 0 ) + collectImages(cell, kids, teOptions); + }); + } + } + + function loadImages (teOptions, callback) { + var i; + var imageCount = 0; + var x = 0; + + function done () { + callback(imageCount); + } + + function loadImage (image) { + if ( !image.url ) + return; + var img = new Image(); + imageCount = ++x; + img.crossOrigin = 'Anonymous'; + img.onerror = img.onload = function () { + if ( img.complete ) { + + if ( img.src.indexOf('data:image/') === 0 ) { + img.width = image.width || img.width || 0; + img.height = image.height || img.height || 0; + } + + if ( img.width + img.height ) { + var canvas = document.createElement("canvas"); + var ctx = canvas.getContext("2d"); + + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); + + image.src = canvas.toDataURL("image/jpeg"); + } + } + if ( !--x ) + done(); + }; + img.src = image.url; + } + + if ( typeof teOptions.images !== 'undefined' ) { + for ( i in teOptions.images ) + if ( teOptions.images.hasOwnProperty(i) ) + loadImage(teOptions.images[i]); + } + + return x || done(); + } + + function drawAutotableElements (cell, elements, teOptions) { + elements.each(function () { + var kids = $(this).children(); + var uy = 0; + + if ( $(this).is("div") ) { + var bcolor = rgb2array(getStyle(this, 'background-color'), [255, 255, 255]); + var lcolor = rgb2array(getStyle(this, 'border-top-color'), [0, 0, 0]); + var lwidth = getPropertyUnitValue(this, 'border-top-width', defaults.jspdf.unit); + + var r = this.getBoundingClientRect(); + var ux = this.offsetLeft * teOptions.dw; + uy = this.offsetTop * teOptions.dh; + var uw = r.width * teOptions.dw; + var uh = r.height * teOptions.dh; + + teOptions.doc.setDrawColor.apply(undefined, lcolor); + teOptions.doc.setFillColor.apply(undefined, bcolor); + teOptions.doc.setLineWidth(lwidth); + teOptions.doc.rect(cell.x + ux, cell.y + uy, uw, uh, lwidth ? "FD" : "F"); + } + else if ( $(this).is("img") ) { + if ( typeof teOptions.images !== 'undefined' ) { + var hash = strHashCode(this.src); + var image = teOptions.images[hash]; + + if ( typeof image !== 'undefined' ) { + + var arCell = cell.width / cell.height; + var arImg = this.width / this.height; + var imgWidth = cell.width; + var imgHeight = cell.height; + var px2pt = 0.264583 * 72 / 25.4; + + if ( arImg <= arCell ) { + imgHeight = Math.min(cell.height, this.height); + imgWidth = this.width * imgHeight / this.height; + } + else if ( arImg > arCell ) { + imgWidth = Math.min(cell.width, this.width); + imgHeight = this.height * imgWidth / this.width; + } + + imgWidth *= px2pt; + imgHeight *= px2pt; + + if ( imgHeight < cell.height ) + uy = (cell.height - imgHeight) / 2; + + try { + teOptions.doc.addImage(image.src, cell.textPos.x, cell.y + uy, imgWidth, imgHeight); + } + catch (e) { + // TODO: IE -> convert png to jpeg + } + cell.textPos.x += imgWidth; + } + } + } + + if ( typeof kids !== 'undefined' && kids.length > 0 ) + drawAutotableElements(cell, kids, teOptions); + }); + } + + function drawAutotableText (cell, texttags, teOptions) { + if ( typeof teOptions.onAutotableText === 'function' ) { + teOptions.onAutotableText(teOptions.doc, cell, texttags); + } + else { + var x = cell.textPos.x; + var y = cell.textPos.y; + var style = {halign: cell.styles.halign, valign: cell.styles.valign}; + + if ( texttags.length ) { + var tag = texttags[0]; + while ( tag.previousSibling ) + tag = tag.previousSibling; + + var b = false, i = false; + + while ( tag ) { + var txt = tag.innerText || tag.textContent || ""; + var leadingspace = (txt.length && txt[0] === " ") ? " " : ""; + var trailingspace = (txt.length > 1 && txt[txt.length - 1] === " ") ? " " : ""; + + if (defaults.preserve.leadingWS !== true) + txt = leadingspace + trimLeft(txt); + if (defaults.preserve.trailingWS !== true) + txt = trimRight(txt) + trailingspace; + + if ( $(tag).is("br") ) { + x = cell.textPos.x; + y += teOptions.doc.internal.getFontSize(); + } + + if ( $(tag).is("b") ) + b = true; + else if ( $(tag).is("i") ) + i = true; + + if ( b || i ) + teOptions.doc.setFontType((b && i) ? "bolditalic" : b ? "bold" : "italic"); + + var w = teOptions.doc.getStringUnitWidth(txt) * teOptions.doc.internal.getFontSize(); + + if ( w ) { + if ( cell.styles.overflow === 'linebreak' && + x > cell.textPos.x && (x + w) > (cell.textPos.x + cell.width) ) { + var chars = ".,!%*;:=-"; + if ( chars.indexOf(txt.charAt(0)) >= 0 ) { + var s = txt.charAt(0); + w = teOptions.doc.getStringUnitWidth(s) * teOptions.doc.internal.getFontSize(); + if ( (x + w) <= (cell.textPos.x + cell.width) ) { + teOptions.doc.autoTableText(s, x, y, style); + txt = txt.substring(1, txt.length); + } + w = teOptions.doc.getStringUnitWidth(txt) * teOptions.doc.internal.getFontSize(); + } + x = cell.textPos.x; + y += teOptions.doc.internal.getFontSize(); + } + + if ( cell.styles.overflow !== 'visible' ) { + while ( txt.length && (x + w) > (cell.textPos.x + cell.width) ) { + txt = txt.substring(0, txt.length - 1); + w = teOptions.doc.getStringUnitWidth(txt) * teOptions.doc.internal.getFontSize(); + } + } + + teOptions.doc.autoTableText(txt, x, y, style); + x += w; + } + + if ( b || i ) { + if ( $(tag).is("b") ) + b = false; + else if ( $(tag).is("i") ) + i = false; + + teOptions.doc.setFontType((!b && !i) ? "normal" : b ? "bold" : "italic"); + } + + tag = tag.nextSibling; + } + cell.textPos.x = x; + cell.textPos.y = y; + } + else { + teOptions.doc.autoTableText(cell.text, cell.textPos.x, cell.textPos.y, style); + } + } + } + + function escapeRegExp (string) { + return string == null ? "" : string.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); + } + + function replaceAll (string, find, replace) { + return string == null ? "" : string.toString().replace(new RegExp(escapeRegExp(find), 'g'), replace); + } + + function trimLeft (string) { + return string == null ? "" : string.toString().replace(/^\s+/, ""); + } + + function trimRight (string) { + return string == null ? "" : string.toString().replace(/\s+$/, ""); + } + + function parseNumber (value) { + value = value || "0"; + value = replaceAll(value, defaults.numbers.html.thousandsSeparator, ''); + value = replaceAll(value, defaults.numbers.html.decimalMark, '.'); + + return typeof value === "number" || jQuery.isNumeric(value) !== false ? value : false; + } + + function parsePercent (value) { + if ( value.indexOf("%") > -1 ) { + value = parseNumber(value.replace(/%/g, "")); + if ( value !== false ) + value = value / 100; + } + else + value = false; + return value; + } + + function parseString (cell, rowIndex, colIndex) { + var result = ''; + + if ( cell !== null ) { + var $cell = $(cell); + var htmlData; + + if ( $cell[0].hasAttribute("data-tableexport-value") ) { + htmlData = $cell.data("tableexport-value"); + htmlData = htmlData ? htmlData + '' : '' + } + else { + htmlData = $cell.html(); + + if ( typeof defaults.onCellHtmlData === 'function' ) + htmlData = defaults.onCellHtmlData($cell, rowIndex, colIndex, htmlData); + else if ( htmlData !== '' ) { + var html = $.parseHTML(htmlData); + var inputidx = 0; + var selectidx = 0; + + htmlData = ''; + $.each(html, function () { + if ( $(this).is("input") ) + htmlData += $cell.find('input').eq(inputidx++).val(); + else if ( $(this).is("select") ) + htmlData += $cell.find('select option:selected').eq(selectidx++).text(); + else { + if ( typeof $(this).html() === 'undefined' ) + htmlData += $(this).text(); + else if ( jQuery().bootstrapTable === undefined || + ($(this).hasClass('filterControl') !== true && + $(cell).parents('.detail-view').length === 0) ) + htmlData += $(this).html(); + } + }); + } + } + + if ( defaults.htmlContent === true ) { + result = $.trim(htmlData); + } + else if ( htmlData && htmlData !== '' ) { + var cellFormat = $(cell).data("tableexport-cellformat"); + + if ( cellFormat !== '' ) { + var text = htmlData.replace(/\n/g, '\u2028').replace(//gi, '\u2060'); + var obj = $('
    ').html(text).contents(); + var number = false; + text = ''; + + $.each(obj.text().split("\u2028"), function (i, v) { + if ( i > 0 ) + text += " "; + + if (defaults.preserve.leadingWS !== true) + v = trimLeft(v); + text += (defaults.preserve.trailingWS !== true) ? trimRight(v) : v; + }); + + $.each(text.split("\u2060"), function (i, v) { + if ( i > 0 ) + result += "\n"; + + if (defaults.preserve.leadingWS !== true) + v = trimLeft(v); + if (defaults.preserve.trailingWS !== true) + v = trimRight(v); + result += v.replace(/\u00AD/g, ""); // remove soft hyphens + }); + + result = result.replace(/\u00A0/g, " "); // replace nbsp's with spaces + + if ( defaults.type === 'json' || + (defaults.type === 'excel' && defaults.mso.fileFormat === 'xmlss') || + defaults.numbers.output === false ) { + number = parseNumber(result); + + if ( number !== false ) + result = Number(number); + } + else if ( defaults.numbers.html.decimalMark !== defaults.numbers.output.decimalMark || + defaults.numbers.html.thousandsSeparator !== defaults.numbers.output.thousandsSeparator ) { + number = parseNumber(result); + + if ( number !== false ) { + var frac = ("" + number.substr(number < 0 ? 1 : 0)).split('.'); + if ( frac.length === 1 ) + frac[1] = ""; + var mod = frac[0].length > 3 ? frac[0].length % 3 : 0; + + result = (number < 0 ? "-" : "") + + (defaults.numbers.output.thousandsSeparator ? ((mod ? frac[0].substr(0, mod) + defaults.numbers.output.thousandsSeparator : "") + frac[0].substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + defaults.numbers.output.thousandsSeparator)) : frac[0]) + + (frac[1].length ? defaults.numbers.output.decimalMark + frac[1] : ""); + } + } + } + else + result = htmlData; + } + + if ( defaults.escape === true ) { + //noinspection JSDeprecatedSymbols + result = escape(result); + } + + if ( typeof defaults.onCellData === 'function' ) { + result = defaults.onCellData($cell, rowIndex, colIndex, result); + } + } + + return result; + } + + function preventInjection (string) { + if ( string.length > 0 && defaults.preventInjection === true ) { + var chars = "=+-@"; + if ( chars.indexOf(string.charAt(0)) >= 0 ) + return ( "'" + string ); + } + return string; + } + + //noinspection JSUnusedLocalSymbols + function hyphenate (a, b, c) { + return b + "-" + c.toLowerCase(); + } + + function rgb2array (rgb_string, default_result) { + var re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/; + var bits = re.exec(rgb_string); + var result = default_result; + if ( bits ) + result = [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])]; + return result; + } + + function getCellStyles (cell) { + var a = getStyle(cell, 'text-align'); + var fw = getStyle(cell, 'font-weight'); + var fs = getStyle(cell, 'font-style'); + var f = ''; + if ( a === 'start' ) + a = getStyle(cell, 'direction') === 'rtl' ? 'right' : 'left'; + if ( fw >= 700 ) + f = 'bold'; + if ( fs === 'italic' ) + f += fs; + if ( f === '' ) + f = 'normal'; + + var result = { + style: { + align: a, + bcolor: rgb2array(getStyle(cell, 'background-color'), [255, 255, 255]), + color: rgb2array(getStyle(cell, 'color'), [0, 0, 0]), + fstyle: f + }, + colspan: getColspan (cell), + rowspan: getRowspan (cell) + }; + + if ( cell !== null ) { + var r = cell.getBoundingClientRect(); + result.rect = { + width: r.width, + height: r.height + }; + } + + return result; + } + + function getColspan (cell) { + var result = $(cell).data("tableexport-colspan"); + if ( typeof result === 'undefined' && $(cell).is("[colspan]") ) + result = $(cell).attr('colspan'); + + return (parseInt(result) || 0); + } + + function getRowspan (cell) { + var result = $(cell).data("tableexport-rowspan"); + if ( typeof result === 'undefined' && $(cell).is("[rowspan]") ) + result = $(cell).attr('rowspan'); + + return (parseInt(result) || 0); + } + + // get computed style property + function getStyle (target, prop) { + try { + if ( window.getComputedStyle ) { // gecko and webkit + prop = prop.replace(/([a-z])([A-Z])/, hyphenate); // requires hyphenated, not camel + return window.getComputedStyle(target, null).getPropertyValue(prop); + } + if ( target.currentStyle ) { // ie + return target.currentStyle[prop]; + } + return target.style[prop]; + } + catch (e) { + } + return ""; + } + + function getUnitValue (parent, value, unit) { + var baseline = 100; // any number serves + + var temp = document.createElement("div"); // create temporary element + temp.style.overflow = "hidden"; // in case baseline is set too low + temp.style.visibility = "hidden"; // no need to show it + + parent.appendChild(temp); // insert it into the parent for em, ex and % + + temp.style.width = baseline + unit; + var factor = baseline / temp.offsetWidth; + + parent.removeChild(temp); // clean up + + return (value * factor); + } + + function getPropertyUnitValue (target, prop, unit) { + var value = getStyle(target, prop); // get the computed style value + + var numeric = value.match(/\d+/); // get the numeric component + if ( numeric !== null ) { + numeric = numeric[0]; // get the string + + return getUnitValue(target.parentElement, numeric, unit); + } + return 0; + } + + function jx_Workbook () { + if ( !(this instanceof jx_Workbook) ) { + //noinspection JSPotentiallyInvalidConstructorUsage + return new jx_Workbook(); + } + this.SheetNames = []; + this.Sheets = {}; + } + + function jx_s2ab (s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for ( var i = 0; i !== s.length; ++i ) view[i] = s.charCodeAt(i) & 0xFF; + return buf; + } + + function jx_datenum (v, date1904) { + if ( date1904 ) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); + } + + function jx_createSheet (data) { + var ws = {}; + var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}}; + for ( var R = 0; R !== data.length; ++R ) { + for ( var C = 0; C !== data[R].length; ++C ) { + if ( range.s.r > R ) range.s.r = R; + if ( range.s.c > C ) range.s.c = C; + if ( range.e.r < R ) range.e.r = R; + if ( range.e.c < C ) range.e.c = C; + var cell = {v: data[R][C]}; + if ( cell.v === null ) continue; + var cell_ref = XLSX.utils.encode_cell({c: C, r: R}); + + if ( typeof cell.v === 'number' ) cell.t = 'n'; + else if ( typeof cell.v === 'boolean' ) cell.t = 'b'; + else if ( cell.v instanceof Date ) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = jx_datenum(cell.v); + } + else cell.t = 's'; + ws[cell_ref] = cell; + } + } + + if ( range.s.c < 10000000 ) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; + } + + function strHashCode (str) { + var hash = 0, i, chr, len; + if ( str.length === 0 ) return hash; + for ( i = 0, len = str.length; i < len; i++ ) { + chr = str.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; + } + + function downloadFile (filename, header, data) { + var ua = window.navigator.userAgent; + if ( filename !== false && window.navigator.msSaveOrOpenBlob ) { + //noinspection JSUnresolvedFunction + window.navigator.msSaveOrOpenBlob(new Blob([data]), filename); + } + else if ( filename !== false && (ua.indexOf("MSIE ") > 0 || !!ua.match(/Trident.*rv\:11\./)) ) { + // Internet Explorer (<= 9) workaround by Darryl (https://github.com/dawiong/tableExport.jquery.plugin) + // based on sampopes answer on http://stackoverflow.com/questions/22317951 + // ! Not working for json and pdf format ! + var frame = document.createElement("iframe"); + + if ( frame ) { + document.body.appendChild(frame); + frame.setAttribute("style", "display:none"); + frame.contentDocument.open("txt/plain", "replace"); + frame.contentDocument.write(data); + frame.contentDocument.close(); + frame.contentDocument.focus(); + + var extension = filename.substr((filename.lastIndexOf('.') +1)); + switch(extension) { + case 'doc': case 'json': case 'png': case 'pdf': case 'xls': case 'xlsx': + filename += ".txt"; + break; + } + frame.contentDocument.execCommand("SaveAs", true, filename); + document.body.removeChild(frame); + } + } + else { + var DownloadLink = document.createElement('a'); + + if ( DownloadLink ) { + var blobUrl = null; + + DownloadLink.style.display = 'none'; + if ( filename !== false ) + DownloadLink.download = filename; + else + DownloadLink.target = '_blank'; + + if ( typeof data === 'object' ) { + window.URL = window.URL || window.webkitURL; + blobUrl = window.URL.createObjectURL(data); + DownloadLink.href = blobUrl; + } + else if ( header.toLowerCase().indexOf("base64,") >= 0 ) + DownloadLink.href = header + base64encode(data); + else + DownloadLink.href = header + encodeURIComponent(data); + + document.body.appendChild(DownloadLink); + + if ( document.createEvent ) { + if ( DownloadEvt === null ) + DownloadEvt = document.createEvent('MouseEvents'); + + DownloadEvt.initEvent('click', true, false); + DownloadLink.dispatchEvent(DownloadEvt); + } + else if ( document.createEventObject ) + DownloadLink.fireEvent('onclick'); + else if ( typeof DownloadLink.onclick === 'function' ) + DownloadLink.onclick(); + + setTimeout(function(){ + if ( blobUrl ) + window.URL.revokeObjectURL(blobUrl); + document.body.removeChild(DownloadLink); + }, 100); + } + } + } + + function utf8Encode (text) { + if (typeof text === 'string') { + text = text.replace(/\x0d\x0a/g, "\x0a"); + var utftext = ""; + for ( var n = 0; n < text.length; n++ ) { + var c = text.charCodeAt(n); + if ( c < 128 ) { + utftext += String.fromCharCode(c); + } + else if ( (c > 127) && (c < 2048) ) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + return utftext; + } + return text; + } + + function base64encode (input) { + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var output = ""; + var i = 0; + input = utf8Encode(input); + while ( i < input.length ) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if ( isNaN(chr2) ) { + enc3 = enc4 = 64; + } else if ( isNaN(chr3) ) { + enc4 = 64; + } + output = output + + keyStr.charAt(enc1) + keyStr.charAt(enc2) + + keyStr.charAt(enc3) + keyStr.charAt(enc4); + } + return output; + } + + return this; + } +})(jQuery); diff --git a/public/lib/bootstrap/bootstrap-table/locale/bootstrap-table-zh-CN.js b/public/lib/bootstrap/bootstrap-table/locale/bootstrap-table-zh-CN.js new file mode 100644 index 0000000..ca28871 --- /dev/null +++ b/public/lib/bootstrap/bootstrap-table/locale/bootstrap-table-zh-CN.js @@ -0,0 +1,47 @@ +/** + * Bootstrap Table Chinese translation + * Author: Zhixin Wen + */ +(function ($) { + 'use strict'; + + $.fn.bootstrapTable.locales['zh-CN'] = { + formatLoadingMessage: function () { + return '正在努力地加载数据中,请稍候……'; + }, + formatRecordsPerPage: function (pageNumber) { + return '每页 ' + pageNumber + ' 个'; + }, + formatShowingRows: function (pageFrom, pageTo, totalRows) { + //return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录'; + return '共 ' + totalRows + ' 个'; + }, + formatSearch: function () { + return '搜索'; + }, + formatNoMatches: function () { + return '没有找到匹配的记录'; + }, + formatPaginationSwitch: function () { + return '隐藏/显示分页'; + }, + formatRefresh: function () { + return '刷新'; + }, + formatToggle: function () { + return '切换'; + }, + formatColumns: function () { + return '列'; + }, + formatExport: function () { + return '导出数据'; + }, + formatClearFilters: function () { + return '清空过滤'; + } + }; + + $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']); + +})(jQuery); diff --git a/public/lib/bootstrap/bootstrap.css b/public/lib/bootstrap/bootstrap.css new file mode 100644 index 0000000..5c54efa --- /dev/null +++ b/public/lib/bootstrap/bootstrap.css @@ -0,0 +1,6247 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block; +} + +audio, canvas, progress, video { + display: inline-block; + vertical-align: baseline; +} + + audio:not([controls]) { + display: none; + height: 0; + } + +[hidden], template { + display: none; +} + +a { + background-color: transparent; +} + + a:active, a:hover { + outline: 0; + } + +abbr[title] { + border-bottom: 1px dotted; +} + +b, strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + margin: .67em 0; + font-size: 2em; +} + +mark { + color: #000; + background: #ff0; +} + +small { + font-size: 80%; +} + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -.5em; +} + +sub { + bottom: -.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +pre { + overflow: auto; +} + +code, kbd, pre, samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, input, optgroup, select, textarea { + margin: 0; + font: inherit; + color: inherit; +} + +button { + overflow: visible; +} + +button, select { + text-transform: none; +} + +button, html input[type="button"], input[type="reset"], input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + + button[disabled], html input[disabled] { + cursor: default; + } + + button::-moz-focus-inner, input::-moz-focus-inner { + padding: 0; + border: 0; + } + +input { + line-height: normal; +} + + input[type="checkbox"], input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + } + + input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { + height: auto; + } + + input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; + } + + input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td, th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, *:before, *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + + a, a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + a[href^="#"]:after, a[href^="javascript:"]:after { + content: ""; + } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + tr, img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, h2, h3 { + orphans: 3; + widows: 3; + } + + h2, h3 { + page-break-after: avoid; + } + + .navbar { + display: none; + } + + .btn > .caret, .dropup > .btn > .caret { + border-top-color: #000 !important; + } + + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + } + + .table td, .table th { + background-color: #fff !important; + } + + .table-bordered th, .table-bordered td { + border: 1px solid #ddd !important; + } +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + + *:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 14px; + line-height: 1.43; + color: #76838f; + background-color: rgba(63, 72, 84, 1); +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #62a8ea; + text-decoration: none; +} + + a:hover, a:focus { + color: #89bceb; + text-decoration: underline; + } + + a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; + } + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +.img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: 4px; +} + +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.43; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #e4eaec; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +[role="button"] { + cursor: pointer; +} + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-weight: 500; + line-height: 1.2; + color: inherit; +} + + h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { + font-weight: normal; + line-height: 1; + color: #a3afb7; + } + +h1, .h1, h2, .h2, h3, .h3 { + margin-top: 20px; + margin-bottom: 10px; +} + + h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small { + font-size: 65%; + } + +h4, .h4, h5, .h5, h6, .h6 { + margin-top: 11px; + margin-bottom: 11px; +} + + h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small { + font-size: 75%; + } + +h1, .h1 { + font-size: 22px; +} + +h2, .h2 { + font-size: 20px; +} + +h3, .h3 { + font-size: 18px; +} + +h4, .h4 { + font-size: 16px; +} + +h5, .h5 { + font-size: 14px; +} + +h6, .h6 { + font-size: 12px; +} + +p { + margin: 0 0 11px; +} + +.lead { + margin-bottom: 22px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small, .small { + font-size: 85%; +} + +mark, .mark { + padding: .2em; + background-color: #f2a654; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-nowrap { + white-space: nowrap; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-muted { + color: #526069; +} + +.text-primary { + color: #62a8ea; +} + +a.text-primary:hover, a.text-primary:focus { + color: #358fe4; +} + +.text-success { + color: #fff; +} + +a.text-success:hover, a.text-success:focus { + color: #e6e6e6; +} + +.text-info { + color: #fff; +} + +a.text-info:hover, a.text-info:focus { + color: #e6e6e6; +} + +.text-warning { + color: #fff; +} + +a.text-warning:hover, a.text-warning:focus { + color: #e6e6e6; +} + +.text-danger { + color: #fff; +} + +a.text-danger:hover, a.text-danger:focus { + color: #e6e6e6; +} + +.bg-primary { + color: #fff; + background-color: #62a8ea; +} + +a.bg-primary:hover, a.bg-primary:focus { + background-color: #358fe4; +} + +.bg-success { + background-color: #46be8a; +} + +a.bg-success:hover, a.bg-success:focus { + background-color: #369b6f; +} + +.bg-info { + background-color: #57c7d4; +} + +a.bg-info:hover, a.bg-info:focus { + background-color: #33b6c5; +} + +.bg-warning { + background-color: #f2a654; +} + +a.bg-warning:hover, a.bg-warning:focus { + background-color: #ee8d25; +} + +.bg-danger { + background-color: #f96868; +} + +a.bg-danger:hover, a.bg-danger:focus { + background-color: #f73737; +} + +.page-header { + padding-bottom: 10px; + margin: 44px 0 22px; + border-bottom: 1px solid transparent; +} + +ul, ol { + margin-top: 0; + margin-bottom: 11px; +} + + ul ul, ol ul, ul ol, ol ol { + margin-bottom: 0; + } + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} + + .list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; + } + +dl { + margin-top: 0; + margin-bottom: 22px; +} + +dt, dd { + line-height: 1.6; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + + .dl-horizontal dd { + margin-left: 180px; + } +} + +abbr[title], abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #e4eaec; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 11px 22px; + margin: 0 0 22px; + font-size: 17.5px; + border-left: 5px solid #e4eaec; +} + + blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child { + margin-bottom: 0; + } + + blockquote footer, blockquote small, blockquote .small { + display: block; + font-size: 80%; + line-height: 1.6; + color: #a3afb7; + } + + blockquote footer:before, blockquote small:before, blockquote .small:before { + content: "\2014 \00A0"; + } + + .blockquote-reverse, blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #e4eaec; + border-left: 0; + } + + .blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { + content: ""; + } + + .blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after { + content: "\00A0 \2014"; + } + +address { + margin-bottom: 22px; + font-style: normal; + line-height: 1.6; +} + +code, kbd, pre, samp { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #5683ad; + background-color: rgba(232, 241, 248, .1); + border-radius: 3px; +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #62a8ea; + border-radius: 2px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} + + kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; + } + +pre { + display: block; + padding: 10.5px; + margin: 0 0 11px; + font-size: 13px; + line-height: 1.6; + color: inherit; + word-break: break-all; + word-wrap: break-word; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #ecf5fc; + border-radius: 3px; +} + + pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 12px; + padding-left: 12px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 768px) { + .container { + width: 744px; + } +} + +@media (min-width: 992px) { + .container { + width: 964px; + } +} + +@media (min-width: 1200px) { + .container { + width: 1164px; + } +} + +.container-fluid { + padding-right: 12px; + padding-left: 12px; + margin-right: auto; + margin-left: auto; +} + +.row { + margin-right: -12px; + margin-left: -12px; +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 12px; + padding-left: 12px; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-11 { + width: 91.66666667%; +} + +.col-xs-10 { + width: 83.33333333%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-8 { + width: 66.66666667%; +} + +.col-xs-7 { + width: 58.33333333%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-5 { + width: 41.66666667%; +} + +.col-xs-4 { + width: 33.33333333%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-2 { + width: 16.66666667%; +} + +.col-xs-1 { + width: 8.33333333%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-pull-11 { + right: 91.66666667%; +} + +.col-xs-pull-10 { + right: 83.33333333%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-8 { + right: 66.66666667%; +} + +.col-xs-pull-7 { + right: 58.33333333%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-5 { + right: 41.66666667%; +} + +.col-xs-pull-4 { + right: 33.33333333%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-2 { + right: 16.66666667%; +} + +.col-xs-pull-1 { + right: 8.33333333%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-push-11 { + left: 91.66666667%; +} + +.col-xs-push-10 { + left: 83.33333333%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-8 { + left: 66.66666667%; +} + +.col-xs-push-7 { + left: 58.33333333%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-5 { + left: 41.66666667%; +} + +.col-xs-push-4 { + left: 33.33333333%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-2 { + left: 16.66666667%; +} + +.col-xs-push-1 { + left: 8.33333333%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +.col-xs-offset-11 { + margin-left: 91.66666667%; +} + +.col-xs-offset-10 { + margin-left: 83.33333333%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-8 { + margin-left: 66.66666667%; +} + +.col-xs-offset-7 { + margin-left: 58.33333333%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-5 { + margin-left: 41.66666667%; +} + +.col-xs-offset-4 { + margin-left: 33.33333333%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-2 { + margin-left: 16.66666667%; +} + +.col-xs-offset-1 { + margin-left: 8.33333333%; +} + +.col-xs-offset-0 { + margin-left: 0; +} + +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + + .col-sm-12 { + width: 100%; + } + + .col-sm-11 { + width: 91.66666667%; + } + + .col-sm-10 { + width: 83.33333333%; + } + + .col-sm-9 { + width: 75%; + } + + .col-sm-8 { + width: 66.66666667%; + } + + .col-sm-7 { + width: 58.33333333%; + } + + .col-sm-6 { + width: 50%; + } + + .col-sm-5 { + width: 41.66666667%; + } + + .col-sm-4 { + width: 33.33333333%; + } + + .col-sm-3 { + width: 25%; + } + + .col-sm-2 { + width: 16.66666667%; + } + + .col-sm-1 { + width: 8.33333333%; + } + + .col-sm-pull-12 { + right: 100%; + } + + .col-sm-pull-11 { + right: 91.66666667%; + } + + .col-sm-pull-10 { + right: 83.33333333%; + } + + .col-sm-pull-9 { + right: 75%; + } + + .col-sm-pull-8 { + right: 66.66666667%; + } + + .col-sm-pull-7 { + right: 58.33333333%; + } + + .col-sm-pull-6 { + right: 50%; + } + + .col-sm-pull-5 { + right: 41.66666667%; + } + + .col-sm-pull-4 { + right: 33.33333333%; + } + + .col-sm-pull-3 { + right: 25%; + } + + .col-sm-pull-2 { + right: 16.66666667%; + } + + .col-sm-pull-1 { + right: 8.33333333%; + } + + .col-sm-pull-0 { + right: auto; + } + + .col-sm-push-12 { + left: 100%; + } + + .col-sm-push-11 { + left: 91.66666667%; + } + + .col-sm-push-10 { + left: 83.33333333%; + } + + .col-sm-push-9 { + left: 75%; + } + + .col-sm-push-8 { + left: 66.66666667%; + } + + .col-sm-push-7 { + left: 58.33333333%; + } + + .col-sm-push-6 { + left: 50%; + } + + .col-sm-push-5 { + left: 41.66666667%; + } + + .col-sm-push-4 { + left: 33.33333333%; + } + + .col-sm-push-3 { + left: 25%; + } + + .col-sm-push-2 { + left: 16.66666667%; + } + + .col-sm-push-1 { + left: 8.33333333%; + } + + .col-sm-push-0 { + left: auto; + } + + .col-sm-offset-12 { + margin-left: 100%; + } + + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + + .col-sm-offset-9 { + margin-left: 75%; + } + + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + + .col-sm-offset-6 { + margin-left: 50%; + } + + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + + .col-sm-offset-3 { + margin-left: 25%; + } + + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + + .col-sm-offset-0 { + margin-left: 0; + } +} + +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + + .col-md-12 { + width: 100%; + } + + .col-md-11 { + width: 91.66666667%; + } + + .col-md-10 { + width: 83.33333333%; + } + + .col-md-9 { + width: 75%; + } + + .col-md-8 { + width: 66.66666667%; + } + + .col-md-7 { + width: 58.33333333%; + } + + .col-md-6 { + width: 50%; + } + + .col-md-5 { + width: 41.66666667%; + } + + .col-md-4 { + width: 33.33333333%; + } + + .col-md-3 { + width: 25%; + } + + .col-md-2 { + width: 16.66666667%; + } + + .col-md-1 { + width: 8.33333333%; + } + + .col-md-pull-12 { + right: 100%; + } + + .col-md-pull-11 { + right: 91.66666667%; + } + + .col-md-pull-10 { + right: 83.33333333%; + } + + .col-md-pull-9 { + right: 75%; + } + + .col-md-pull-8 { + right: 66.66666667%; + } + + .col-md-pull-7 { + right: 58.33333333%; + } + + .col-md-pull-6 { + right: 50%; + } + + .col-md-pull-5 { + right: 41.66666667%; + } + + .col-md-pull-4 { + right: 33.33333333%; + } + + .col-md-pull-3 { + right: 25%; + } + + .col-md-pull-2 { + right: 16.66666667%; + } + + .col-md-pull-1 { + right: 8.33333333%; + } + + .col-md-pull-0 { + right: auto; + } + + .col-md-push-12 { + left: 100%; + } + + .col-md-push-11 { + left: 91.66666667%; + } + + .col-md-push-10 { + left: 83.33333333%; + } + + .col-md-push-9 { + left: 75%; + } + + .col-md-push-8 { + left: 66.66666667%; + } + + .col-md-push-7 { + left: 58.33333333%; + } + + .col-md-push-6 { + left: 50%; + } + + .col-md-push-5 { + left: 41.66666667%; + } + + .col-md-push-4 { + left: 33.33333333%; + } + + .col-md-push-3 { + left: 25%; + } + + .col-md-push-2 { + left: 16.66666667%; + } + + .col-md-push-1 { + left: 8.33333333%; + } + + .col-md-push-0 { + left: auto; + } + + .col-md-offset-12 { + margin-left: 100%; + } + + .col-md-offset-11 { + margin-left: 91.66666667%; + } + + .col-md-offset-10 { + margin-left: 83.33333333%; + } + + .col-md-offset-9 { + margin-left: 75%; + } + + .col-md-offset-8 { + margin-left: 66.66666667%; + } + + .col-md-offset-7 { + margin-left: 58.33333333%; + } + + .col-md-offset-6 { + margin-left: 50%; + } + + .col-md-offset-5 { + margin-left: 41.66666667%; + } + + .col-md-offset-4 { + margin-left: 33.33333333%; + } + + .col-md-offset-3 { + margin-left: 25%; + } + + .col-md-offset-2 { + margin-left: 16.66666667%; + } + + .col-md-offset-1 { + margin-left: 8.33333333%; + } + + .col-md-offset-0 { + margin-left: 0; + } +} + +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + + .col-lg-12 { + width: 100%; + } + + .col-lg-11 { + width: 91.66666667%; + } + + .col-lg-10 { + width: 83.33333333%; + } + + .col-lg-9 { + width: 75%; + } + + .col-lg-8 { + width: 66.66666667%; + } + + .col-lg-7 { + width: 58.33333333%; + } + + .col-lg-6 { + width: 50%; + } + + .col-lg-5 { + width: 41.66666667%; + } + + .col-lg-4 { + width: 33.33333333%; + } + + .col-lg-3 { + width: 25%; + } + + .col-lg-2 { + width: 16.66666667%; + } + + .col-lg-1 { + width: 8.33333333%; + } + + .col-lg-pull-12 { + right: 100%; + } + + .col-lg-pull-11 { + right: 91.66666667%; + } + + .col-lg-pull-10 { + right: 83.33333333%; + } + + .col-lg-pull-9 { + right: 75%; + } + + .col-lg-pull-8 { + right: 66.66666667%; + } + + .col-lg-pull-7 { + right: 58.33333333%; + } + + .col-lg-pull-6 { + right: 50%; + } + + .col-lg-pull-5 { + right: 41.66666667%; + } + + .col-lg-pull-4 { + right: 33.33333333%; + } + + .col-lg-pull-3 { + right: 25%; + } + + .col-lg-pull-2 { + right: 16.66666667%; + } + + .col-lg-pull-1 { + right: 8.33333333%; + } + + .col-lg-pull-0 { + right: auto; + } + + .col-lg-push-12 { + left: 100%; + } + + .col-lg-push-11 { + left: 91.66666667%; + } + + .col-lg-push-10 { + left: 83.33333333%; + } + + .col-lg-push-9 { + left: 75%; + } + + .col-lg-push-8 { + left: 66.66666667%; + } + + .col-lg-push-7 { + left: 58.33333333%; + } + + .col-lg-push-6 { + left: 50%; + } + + .col-lg-push-5 { + left: 41.66666667%; + } + + .col-lg-push-4 { + left: 33.33333333%; + } + + .col-lg-push-3 { + left: 25%; + } + + .col-lg-push-2 { + left: 16.66666667%; + } + + .col-lg-push-1 { + left: 8.33333333%; + } + + .col-lg-push-0 { + left: auto; + } + + .col-lg-offset-12 { + margin-left: 100%; + } + + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + + .col-lg-offset-9 { + margin-left: 75%; + } + + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + + .col-lg-offset-6 { + margin-left: 50%; + } + + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + + .col-lg-offset-3 { + margin-left: 25%; + } + + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + + .col-lg-offset-0 { + margin-left: 0; + } +} + +table { + background-color: transparent; +} + +caption { + padding-top: 6px; + padding-bottom: 6px; + color: #526069; + text-align: left; +} + +th { + text-align: left; +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 22px; +} + + .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { + padding: 6px; + line-height: 1.6; + vertical-align: top; + border-top: 1px solid #e4eaec; + } + + .table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #e4eaec; + } + + .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + .table > tbody + tbody { + border-top: 2px solid #e4eaec; + } + + .table .table { + background-color: rgba(63, 72, 84, 1); + } + +.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #e4eaec; +} + + .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { + border: 1px solid #e4eaec; + } + + .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { + border-bottom-width: 2px; + } + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: rgba(243, 247, 249, .3); +} + +.table-hover > tbody > tr:hover { + background-color: rgba(63, 72, 84, 1); +} + +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} + +table td[class*="col-"], table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { + background-color: rgba(63, 72, 84, 1); +} + +.table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { + background-color: #e2ecf1; +} + +.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { + background-color: #46be8a; +} + +.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { + background-color: #3dae7d; +} + +.table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { + background-color: #57c7d4; +} + +.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { + background-color: #43c0cf; +} + +.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { + background-color: #f2a654; +} + +.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { + background-color: #f09a3c; +} + +.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { + background-color: #f96868; +} + +.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { + background-color: #f84f4f; +} + +.table-responsive { + min-height: .01%; + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 16.5px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #e4eaec; + } + + .table-responsive > .table { + margin-bottom: 0; + } + + .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + + .table-responsive > .table-bordered { + border: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 22px; + font-size: 21px; + line-height: inherit; + color: inherit; + border: 0; + border-bottom: 1px solid transparent; +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} + +input[type="file"] { + display: block; +} + +input[type="range"] { + display: block; + width: 100%; +} + +select[multiple], select[size] { + height: auto; +} + +input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; +} + +output { + display: block; + padding-top: 5px; + font-size: 14px; + line-height: 1.6; + color: #76838f; +} + +.form-control { + /*display: block;*/ + width: 100%; + height: 32px; + padding: 4px 12px; + font-size: 14px; + line-height: 1.6; + color: #76838f; + background-color: rgba(63, 72, 84, 1); + background-image: none; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; +} + + .form-control:focus { + border-color: #62a8ea; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(98, 168, 234, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(98, 168, 234, .6); + } + + .form-control.focus, .form-control:focus { + border-color: #62a8ea; + -webkit-box-shadow: none; + box-shadow: none; + } + + .form-control::-moz-placeholder { + color: #a3afb7; + opacity: 1; + } + + .form-control:-ms-input-placeholder { + color: #a3afb7; + } + + .form-control::-webkit-input-placeholder { + color: #a3afb7; + } + + .form-control::-ms-expand { + background-color: transparent; + border: 0; + } + + .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: rgba(63, 72, 84, 1); + opacity: 1; + } + + .form-control[disabled], fieldset[disabled] .form-control { + cursor: not-allowed; + } + +textarea.form-control { + height: auto; +} + +input[type="search"] { + -webkit-appearance: none; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, input[type="time"].form-control, input[type="datetime-local"].form-control, input[type="month"].form-control { + line-height: 32px; + } + + input[type="date"].input-sm, input[type="time"].input-sm, input[type="datetime-local"].input-sm, input[type="month"].input-sm, .input-group-sm input[type="date"], .input-group-sm input[type="time"], .input-group-sm input[type="datetime-local"], .input-group-sm input[type="month"] { + line-height: 26px; + } + + input[type="date"].input-lg, input[type="time"].input-lg, input[type="datetime-local"].input-lg, input[type="month"].input-lg, .input-group-lg input[type="date"], .input-group-lg input[type="time"], .input-group-lg input[type="datetime-local"], .input-group-lg input[type="month"] { + line-height: 38px; + } +} + +.form-group { + margin-bottom: 12px; +} + +.radio, .checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + + .radio label, .checkbox label { + min-height: 22px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } + + .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; + } + + .radio + .radio, .checkbox + .checkbox { + margin-top: -5px; + } + +.radio-inline, .checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + + .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; + } + +input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"].disabled, input[type="checkbox"].disabled, fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} + +.radio-inline.disabled, .checkbox-inline.disabled, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.radio.disabled label, .checkbox.disabled label, fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { + cursor: not-allowed; +} + +.form-control-static { + min-height: 36px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; +} + + .form-control-static.input-lg, .form-control-static.input-sm { + padding-right: 0; + padding-left: 0; + } + +.input-sm { + height: 26px; + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} + +select.input-sm { + height: 26px; + line-height: 26px; +} + +textarea.input-sm, select[multiple] .input-sm { + height: auto; +} + +select.input-sm { + padding-top: 0; + padding-bottom: 0; +} + +.form-group-sm .form-control { + height: 26px; + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} + +.form-group-sm select.form-control { + height: 26px; + line-height: 26px; +} + +.form-group-sm textarea.form-control, .form-group-sm select[multiple].form-control { + height: auto; +} + +.form-group-sm .form-control-static { + height: 26px; + min-height: 34px; + padding: 4px 10px; + font-size: 12px; + line-height: 1.5; +} + +.input-lg { + height: 38px; + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 4px; +} + +select.input-lg { + height: 38px; + line-height: 38px; +} + +textarea.input-lg, select[multiple] .input-lg { + height: auto; +} + +select.input-lg { + padding-top: 0; + padding-bottom: 0; +} + +.form-group-lg .form-control { + height: 38px; + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 4px; +} + +.form-group-lg select.form-control { + height: 38px; + line-height: 38px; +} + +.form-group-lg textarea.form-control, .form-group-lg select[multiple].form-control { + height: auto; +} + +.form-group-lg .form-control-static { + height: 38px; + min-height: 40px; + padding: 7px 18px; + font-size: 18px; + line-height: 1.3333333; +} + +.has-feedback { + position: relative; +} + + .has-feedback .form-control { + padding-right: 40px; + } + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 32px; + height: 32px; + line-height: 32px; + text-align: center; + pointer-events: none; +} + +.input-lg + .form-control-feedback, .input-group-lg + .form-control-feedback, .form-group-lg .form-control + .form-control-feedback { + width: 38px; + height: 38px; + line-height: 38px; +} + +.input-sm + .form-control-feedback, .input-group-sm + .form-control-feedback, .form-group-sm .form-control + .form-control-feedback { + width: 26px; + height: 26px; + line-height: 26px; +} + +.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #fff; +} + +.has-success .form-control { + border-color: #fff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} + + .has-success .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + } + +.has-success .input-group-addon { + color: #fff; + background-color: #46be8a; + border-color: #fff; +} + +.has-success .form-control-feedback { + color: #fff; +} + +.has-success .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} + + .has-success .form-control:focus { + border-color: #fff; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + } + + .has-success .form-control.focus, .has-success .form-control:focus { + border-color: #fff; + -webkit-box-shadow: none; + box-shadow: none; + } + +.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #fff; +} + +.has-warning .form-control { + border-color: #fff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} + + .has-warning .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + } + +.has-warning .input-group-addon { + color: #fff; + background-color: #f2a654; + border-color: #fff; +} + +.has-warning .form-control-feedback { + color: #fff; +} + +.has-warning .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} + + .has-warning .form-control:focus { + border-color: #fff; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + } + + .has-warning .form-control.focus, .has-warning .form-control:focus { + border-color: #fff; + -webkit-box-shadow: none; + box-shadow: none; + } + +.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #fff; +} + +.has-error .form-control { + border-color: #fff; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} + + .has-error .form-control:focus { + border-color: #e6e6e6; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #fff; + } + +.has-error .input-group-addon { + color: #fff; + background-color: #f96868; + border-color: #fff; +} + +.has-error .form-control-feedback { + color: #fff; +} + +.has-error .form-control { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} + + .has-error .form-control:focus { + border-color: #fff; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(255, 255, 255, .6); + } + + .has-error .form-control.focus, .has-error .form-control:focus { + border-color: #fff; + -webkit-box-shadow: none; + box-shadow: none; + } + +.has-feedback label ~ .form-control-feedback { + top: 27px; +} + +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #bcc2c8; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .form-inline .form-control-static { + display: inline-block; + } + + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + + .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { + width: auto; + } + + .form-inline .input-group > .form-control { + width: 100%; + } + + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio, .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio label, .form-inline .checkbox label { + padding-left: 0; + } + + .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + padding-top: 5px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .radio, .form-horizontal .checkbox { + min-height: 27px; +} + +.form-horizontal .form-group { + margin-right: -12px; + margin-left: -12px; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 5px; + margin-bottom: 0; + text-align: right; + } +} + +.form-horizontal .has-feedback .form-control-feedback { + right: 12px; +} + +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 7px; + font-size: 18px; + } +} + +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 4px; + font-size: 12px; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 3px; + outline:none; +} + + .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline: none; + outline-offset: -2px; + } + + .btn:hover, .btn:focus, .btn.focus { + color: #76838f; + text-decoration: none; + } + + .btn:active, .btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + } + + .btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; + } + +a.btn.disabled, fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-default { + color: #76838f; + background-color: #e4eaec; + border-color: #e4eaec; +} + + .btn-default:focus, .btn-default.focus { + color: #76838f; + background-color: #c6d3d7; + border-color: #99b0b7; + } + + .btn-default:hover { + color: #76838f; + background-color: #c6d3d7; + border-color: #c0ced3; + } + + .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + color: #76838f; + background-color: #c6d3d7; + border-color: #c0ced3; + } + + .btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { + color: #76838f; + background-color: #b1c2c8; + border-color: #99b0b7; + } + + .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + background-image: none; + } + + .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus { + background-color: #e4eaec; + border-color: #e4eaec; + } + + .btn-default .badge { + color: #e4eaec; + background-color: #76838f; + } + +.btn-primary { + color: #fff; + background-color: #20a0ff; + border-color: #20a0ff; +} + + .btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #4db3ff; + border-color: #4db3ff; + } + + .btn-primary:hover { + color: #fff; + background-color: #4db3ff; + border-color: #4db3ff; + } + + .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #4db3ff; + border-color: #4db3ff; + } + + .btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #4db3ff; + border-color: #4db3ff; + } + + .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + background-image: none; + } + + .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus { + background-color: #eef1f6; + border-color: #d1dbe5; + color: #bfcbd9; + } + + .btn-primary .badge { + color: #4db3ff; + background-color: rgba(63, 72, 84, 1); + } + +.btn-success { + color: #fff; + background-color: #46be8a; + border-color: #46be8a; +} + + .btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #369b6f; + border-color: #226246; + } + + .btn-success:hover { + color: #fff; + background-color: #369b6f; + border-color: #34936a; + } + + .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #369b6f; + border-color: #34936a; + } + + .btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #2d805c; + border-color: #226246; + } + + .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + background-image: none; + } + + .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus { + background-color: #46be8a; + border-color: #46be8a; + } + + .btn-success .badge { + color: #46be8a; + background-color: rgba(63, 72, 84, 1); + } + +.btn-info { + color: #fff; + background-color: #57c7d4; + border-color: #57c7d4; +} + + .btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #33b6c5; + border-color: #237e89; + } + + .btn-info:hover { + color: #fff; + background-color: #33b6c5; + border-color: #30afbd; + } + + .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #33b6c5; + border-color: #30afbd; + } + + .btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #2b9ca9; + border-color: #237e89; + } + + .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + background-image: none; + } + + .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus { + background-color: #57c7d4; + border-color: #57c7d4; + } + + .btn-info .badge { + color: #57c7d4; + background-color: rgba(63, 72, 84, 1); + } + +.btn-warning { + color: #fff; + background-color: #f2a654; + border-color: #f2a654; +} + + .btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #ee8d25; + border-color: #b8660e; + } + + .btn-warning:hover { + color: #fff; + background-color: #ee8d25; + border-color: #ee881b; + } + + .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ee8d25; + border-color: #ee881b; + } + + .btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #de7c11; + border-color: #b8660e; + } + + .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + background-image: none; + } + + .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus { + background-color: #f2a654; + border-color: #f2a654; + } + + .btn-warning .badge { + color: #f2a654; + background-color: rgba(63, 72, 84, 1); + } + +.btn-danger { + color: #fff; + background-color: #f96868; + border-color: #f96868; +} + + .btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #f73737; + border-color: #d90909; + } + + .btn-danger:hover { + color: #fff; + background-color: #f73737; + border-color: #f72d2d; + } + + .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #f73737; + border-color: #f72d2d; + } + + .btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #f61515; + border-color: #d90909; + } + + .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + background-image: none; + } + + .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus { + background-color: #f96868; + border-color: #f96868; + } + + .btn-danger .badge { + color: #f96868; + background-color: rgba(63, 72, 84, 1); + } + +.btn-link { + font-weight: normal; + color: #62a8ea; + border-radius: 0; +} + + .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + } + + .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent; + } + + .btn-link:hover, .btn-link:focus { + color: #89bceb; + text-decoration: underline; + background-color: transparent; + } + + .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { + color: #a3afb7; + text-decoration: none; + } + +.btn-lg, .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; +} + + .btn-block + .btn-block { + margin-top: 5px; + } + +input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} + + .fade.in { + opacity: 1; + } + +.collapse { + display: none; +} + + .collapse.in { + display: block; + } + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.dropup, .dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1200; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: rgba(63, 72, 84, 1); + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} + + .dropdown-menu.pull-right { + right: 0; + left: auto; + } + + .dropdown-menu .divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e4eaec; + } + + .dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.6; + color: #76838f; + white-space: nowrap; + } + + .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + color: #76838f; + text-decoration: none; + background-color: rgba(63, 72, 84, 1); + } + + .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #76838f; + text-decoration: none; + background-color: rgba(63, 72, 84, 1); + outline: 0; + } + + .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #ccd5db; + } + + .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + } + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.6; + color: #37474f; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1190; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, .navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} + +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} + +.btn-group, .btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + + .btn-group > .btn, .btn-group-vertical > .btn { + position: relative; + float: left; + } + + .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { + z-index: 2; + } + + .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { + margin-left: -1px; + } + +.btn-toolbar { + margin-left: -5px; +} + + .btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { + float: left; + } + + .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { + margin-left: 5px; + } + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + + .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + +.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + + .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; + } + + .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} + + .btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; + } + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + + .btn-group-vertical > .btn-group > .btn { + float: none; + } + + .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } + + .btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; + } + + .btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + + .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; + } + + .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} + + .btn-group-justified > .btn, .btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; + } + + .btn-group-justified > .btn-group .btn { + width: 100%; + } + + .btn-group-justified > .btn-group .dropdown-menu { + left: auto; + } + +[data-toggle="buttons"] > .btn input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + + .input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; + } + + .input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; + } + + .input-group .form-control:focus { + z-index: 3; + } + +.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { + height: 38px; + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 4px; +} + +select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { + height: 38px; + line-height: 38px; +} + +textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple] .input-group-lg > .form-control, select[multiple] .input-group-lg > .input-group-addon, select[multiple] .input-group-lg > .input-group-btn > .btn { + height: auto; +} + +select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { + padding-top: 0; + padding-bottom: 0; +} + +.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { + height: 26px; + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 2px; +} + +select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { + height: 26px; + line-height: 26px; +} + +textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple] .input-group-sm > .form-control, select[multiple] .input-group-sm > .input-group-addon, select[multiple] .input-group-sm > .input-group-btn > .btn { + height: auto; +} + +select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { + padding-top: 0; + padding-bottom: 0; +} + +.input-group-addon, .input-group-btn, .input-group .form-control { + display: table-cell; +} + + .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; + } + +.input-group-addon, .input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 4px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #76838f; + text-align: center; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #e4eaec; + border-radius: 3px; +} + + .input-group-addon.input-sm { + padding: 3px 10px; + font-size: 12px; + border-radius: 2px; + } + + .input-group-addon.input-lg { + padding: 6px 18px; + font-size: 18px; + border-radius: 4px; + } + + .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { + margin-top: 0; + } + + .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .input-group-addon:first-child { + border-right: 0; + } + + .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .input-group-addon:last-child { + border-left: 0; + } + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + + .input-group-btn > .btn { + position: relative; + } + + .input-group-btn > .btn + .btn { + margin-left: -1px; + } + + .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { + z-index: 2; + } + + .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { + margin-right: -1px; + } + + .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; + } + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + + .nav > li { + position: relative; + display: block; + } + + .nav > li > a { + position: relative; + display: block; + padding: 10px 15px; + } + + .nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: rgba(63, 72, 84, 1); + } + + .nav > li.disabled > a { + color: #a3afb7; + } + + .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #a3afb7; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + } + + .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: rgba(63, 72, 84, 1); + border-color: #62a8ea; + } + + .nav .nav-divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e5e5e5; + } + + .nav > li > a > img { + max-width: none; + } + +.nav-tabs { + border-bottom: 1px solid #e4eaec; +} + + .nav-tabs > li { + float: left; + margin-bottom: -1px; + } + + .nav-tabs > li > a { + margin-right: 2px; + line-height: 1.6; + border: 1px solid transparent; + border-radius: 3px 3px 0 0; + } + + .nav-tabs > li > a:hover { + border-color: transparent transparent #e4eaec; + } + + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #4e97d9; + cursor: default; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #e4eaec; + border-bottom-color: transparent; + } + + .nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; + } + + .nav-tabs.nav-justified > li { + float: none; + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; + } + + .nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 3px; +} + +.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #e4eaec; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #e4eaec; + border-radius: 3px 3px 0 0; + } + + .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} + +.nav-pills > li { + float: left; +} + + .nav-pills > li > a { + border-radius: 3px; + } + + .nav-pills > li + li { + margin-left: 2px; + } + + .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #62a8ea; + } + +.nav-stacked > li { + float: none; +} + + .nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; + } + +.nav-justified { + width: 100%; +} + + .nav-justified > li { + float: none; + } + + .nav-justified > li > a { + margin-bottom: 5px; + text-align: center; + } + + .nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + + .nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 3px; + } + + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { + border: 1px solid #e4eaec; + } + +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #e4eaec; + border-radius: 3px 3px 0 0; + } + + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar { + position: relative; + min-height:45px; + margin-bottom: 22px; + border: 1px solid transparent; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 3px; + } +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + padding-right: 12px; + padding-left: 12px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} + + .navbar-collapse.in { + overflow-y: auto; + } + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + + .navbar-collapse.in { + overflow-y: visible; + } + + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} + +.navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} + +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} + +.container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { + margin-right: -12px; + margin-left: -12px; +} + +@media (min-width: 768px) { + .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + z-index: 1200; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, .navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} + +@media (min-width: 768px) { + .navbar-fixed-top, .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +.navbar-brand { + float: left; + height: 60px; + padding: 19px 12px; + font-size: 18px; + line-height: 22px; +} + + .navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; + } + + .navbar-brand > img { + display: block; + } + +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { + margin-left: -12px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 13px; + margin-right: 12px; + margin-bottom: 13px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 3px; +} + + .navbar-toggle:focus { + outline: 0; + } + + .navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; + } + + .navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; + } + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 9.5px -12px; +} + + .navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + } + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + + .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 22px; + } + + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + + .navbar-nav > li { + float: left; + } + + .navbar-nav > li > a { + padding-top: 19px; + padding-bottom: 19px; + } +} + +.navbar-form { + padding: 10px 12px; + margin-top: 14px; + margin-right: -12px; + margin-bottom: 14px; + margin-left: -12px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .navbar-form .form-control-static { + display: inline-block; + } + + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + + .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { + width: auto; + } + + .navbar-form .input-group > .form-control { + width: 100%; + } + + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio, .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio label, .navbar-form .checkbox label { + padding-left: 0; + } + + .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-btn { + margin-top: 14px; + margin-bottom: 14px; +} + + .navbar-btn.btn-sm { + margin-top: 17px; + margin-bottom: 17px; + } + + .navbar-btn.btn-xs { + margin-top: 19px; + margin-bottom: 19px; + } + +.navbar-text { + margin-top: 19px; + margin-bottom: 19px; +} + +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 12px; + margin-left: 12px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + + .navbar-right { + float: right !important; + margin-right: -12px; + } + + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} + +.navbar-default { + background-color: rgba(63, 72, 84, 1); + border-color: #e4eaec; +} + + .navbar-default .navbar-brand { + color: #37474f; + } + + .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #37474f; + background-color: transparent; + } + + .navbar-default .navbar-text { + color: #76838f; + } + + .navbar-default .navbar-nav > li > a { + color: #76838f; + } + + .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .3); + } + + .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); + } + + .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { + color: #ccd5db; + background-color: transparent; + } + + .navbar-default .navbar-toggle { + border-color: transparent; + } + + .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: rgba(243, 247, 249, .3); + } + + .navbar-default .navbar-toggle .icon-bar { + background-color: #76838f; + } + + .navbar-default .navbar-collapse, .navbar-default .navbar-form { + border-color: #e4eaec; + } + + .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); + } + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #76838f; + } + + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .3); + } + + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #526069; + background-color: rgba(243, 247, 249, .6); + } + + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccd5db; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #76838f; +} + + .navbar-default .navbar-link:hover { + color: #526069; + } + +.navbar-default .btn-link { + color: #76838f; +} + + .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { + color: #526069; + } + + .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccd5db; + } + +.navbar-inverse { + background-color: #62a8ea; + border-color: rgba(0, 0, 0, .1); +} + + .navbar-inverse .navbar-brand { + color: #fff; + } + + .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; + } + + .navbar-inverse .navbar-text { + color: #fff; + } + + .navbar-inverse .navbar-nav > li > a { + color: #fff; + } + + .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #fff; + background-color: transparent; + } + + .navbar-inverse .navbar-toggle { + border-color: transparent; + } + + .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-toggle .icon-bar { + background-color: rgba(63, 72, 84, 1); + } + + .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { + border-color: #4397e6; + } + + .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); + } + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #fff; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: rgba(0, 0, 0, .1); + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #fff; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #fff; +} + + .navbar-inverse .navbar-link:hover { + color: #fff; + } + +.navbar-inverse .btn-link { + color: #fff; +} + + .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { + color: #fff; + } + + .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #fff; + } + +.breadcrumb { + padding: 8px 10px; + margin-bottom: 22px; + list-style: none; + background-color: transparent; + border-radius: 3px; +} + + .breadcrumb > li { + display: inline-block; + } + + .breadcrumb > li + li:before { + padding: 0 5px; + color: #62a8ea; + content: "/\00a0"; + } + + .breadcrumb > .active { + color: #76838f; + } + +.pagination { + display: inline-block; + padding-left: 0; + margin: 22px 0; + border-radius: 3px; +} + + .pagination > li { + display: inline; + } + + .pagination > li > a, .pagination > li > span { + position: relative; + float: left; + padding: 4px 12px; + margin-left: -1px; + line-height: 1.6; + color: #76838f; + text-decoration: none; + background-color: transparent; + border: 1px solid #e4eaec; + } + + .pagination > li:first-child > a, .pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + .pagination > li:last-child > a, .pagination > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + .pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { + z-index: 2; + color: #fff; + background-color: #37474f; + border-color: #e4eaec; + } + + .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #37474f; + border-color: #e4eaec; + } + + .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #ccd5db; + pointer-events: none; + cursor: not-allowed; + background-color: transparent; + border-color: #e4eaec; + } + +.pagination-lg > li > a, .pagination-lg > li > span { + padding: 6px 18px; + font-size: 18px; + line-height: 1.3333333; +} + +.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination-sm > li > a, .pagination-sm > li > span { + padding: 3px 10px; + font-size: 12px; + line-height: 1.5; +} + +.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +.pager { + padding-left: 0; + margin: 22px 0; + text-align: center; + list-style: none; +} + + .pager li { + display: inline; + } + + .pager li > a, .pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: transparent; + border: 1px solid #e4eaec; + border-radius: 3px; + } + + .pager li > a:hover, .pager li > a:focus { + text-decoration: none; + background-color: rgba(63, 72, 84, 1); + } + + .pager .next > a, .pager .next > span { + float: right; + } + + .pager .previous > a, .pager .previous > span { + float: left; + } + + .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { + color: #ccd5db; + pointer-events: none; + cursor: not-allowed; + background-color: transparent; + } + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +a.label:hover, a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.btn .label { + position: relative; + top: -1px; +} + +.label-default { + background-color: #e4eaec; +} + + .label-default[href]:hover, .label-default[href]:focus { + background-color: #c6d3d7; + } + +.label-primary { + background-color: #62a8ea; +} + + .label-primary[href]:hover, .label-primary[href]:focus { + background-color: #358fe4; + } + +.label-success { + background-color: #46be8a; +} + + .label-success[href]:hover, .label-success[href]:focus { + background-color: #369b6f; + } + +.label-info { + background-color: #57c7d4; +} + + .label-info[href]:hover, .label-info[href]:focus { + background-color: #33b6c5; + } + +.label-warning { + background-color: #f2a654; +} + + .label-warning[href]:hover, .label-warning[href]:focus { + background-color: #ee8d25; + } + +.label-danger { + background-color: #f96868; +} + + .label-danger[href]:hover, .label-danger[href]:focus { + background-color: #f73737; + } + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: 500; + line-height: 1; + color: #76838f; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #e4eaec; + border-radius: 15px; +} + + .badge:empty { + display: none; + } + +.btn .badge { + position: relative; + top: -1px; +} + +.btn-xs .badge, .btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} + +a.badge:hover, a.badge:focus { + color: #a3afb7; + text-decoration: none; + cursor: pointer; +} + +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #526069; + background-color: #e4eaec; +} + +.list-group-item > .badge { + float: right; +} + + .list-group-item > .badge + .badge { + margin-right: 5px; + } + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding-top: 20px; + padding-bottom: 20px; + margin-bottom: 20px; + color: inherit; + background-color: #e4eaec; +} + + .jumbotron h1, .jumbotron .h1 { + color: inherit; + } + + .jumbotron p { + margin-bottom: 10px; + font-size: 21px; + font-weight: 200; + } + + .jumbotron > hr { + border-top-color: #c6d3d7; + } + +.container .jumbotron, .container-fluid .jumbotron { + padding-right: 12px; + padding-left: 12px; + border-radius: 4px; +} + +.jumbotron .container { + max-width: 100%; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 32px; + padding-bottom: 32px; + } + + .container .jumbotron, .container-fluid .jumbotron { + padding-right: 40px; + padding-left: 40px; + } + + .jumbotron h1, .jumbotron .h1 { + font-size: 63px; + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 22px; + line-height: 1.6; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} + + .thumbnail > img, .thumbnail a > img { + margin-right: auto; + margin-left: auto; + } + +a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { + border-color: #62a8ea; +} + +.thumbnail .caption { + padding: 9px; + color: #76838f; +} + +.alert { + padding: 10px; + margin-bottom: 22px; + border: 1px solid transparent; + border-radius: 3px; +} + + .alert h4 { + margin-top: 0; + color: inherit; + } + + .alert .alert-link { + font-weight: 700; + } + + .alert > p, .alert > ul { + margin-bottom: 0; + } + + .alert > p + p { + margin-top: 5px; + } + +.alert-dismissable, .alert-dismissible { + padding-right: 30px; +} + + .alert-dismissable .close, .alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } + +.alert-success { + color: #46be8a; + background-color: rgba(231, 250, 242, .8); + border-color: #e7faf2; +} + + .alert-success hr { + border-top-color: #d2f6e7; + } + + .alert-success .alert-link { + color: #369b6f; + } + +.alert-info { + color: #57c7d4; + background-color: rgba(236, 249, 250, .8); + border-color: #ecf9fa; +} + + .alert-info hr { + border-top-color: #d8f3f5; + } + + .alert-info .alert-link { + color: #33b6c5; + } + +.alert-warning { + color: #f2a654; + background-color: rgba(255, 243, 230, .8); + border-color: #fff3e6; +} + + .alert-warning hr { + border-top-color: #ffe7cc; + } + + .alert-warning .alert-link { + color: #ee8d25; + } + +.alert-danger { + color: #f96868; + background-color: rgba(255, 234, 234, .8); + border-color: #ffeaea; +} + + .alert-danger hr { + border-top-color: #ffd0d0; + } + + .alert-danger .alert-link { + color: #f73737; + } + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +.progress { + height: 22px; + margin-bottom: 22px; + overflow: hidden; + background-color: #e4eaec; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 22px; + color: #fff; + text-align: center; + background-color: #62a8ea; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} + +.progress-striped .progress-bar, .progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .progress-bar, .progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #46be8a; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #57c7d4; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f2a654; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #f96868; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} + +.media { + margin-top: 15px; +} + + .media:first-child { + margin-top: 0; + } + +.media, .media-body { + overflow: hidden; + zoom: 1; +} + +.media-body { + width: 10000px; +} + +.media-object { + display: block; +} + + .media-object.img-thumbnail { + max-width: none; + } + +.media-right, .media > .pull-right { + padding-left: 10px; +} + +.media-left, .media > .pull-left { + padding-right: 10px; +} + +.media-left, .media-right, .media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: rgba(63, 72, 84, 1); + border: 1px solid transparent; +} + + .list-group-item:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + } + + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + +a.list-group-item, button.list-group-item { + color: #76838f; +} + + a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { + color: #37474f; + } + + a.list-group-item:hover, button.list-group-item:hover, a.list-group-item:focus, button.list-group-item:focus { + color: #76838f; + text-decoration: none; + background-color: rgba(63, 72, 84, 1); + } + +button.list-group-item { + width: 100%; + text-align: left; +} + +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { + color: #ccd5db; + cursor: not-allowed; + background-color: transparent; +} + + .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { + color: inherit; + } + + .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { + color: #ccd5db; + } + +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + z-index: 2; + color: #62a8ea; + background-color: transparent; + border-color: transparent; +} + + .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active .list-group-item-heading > small, .list-group-item.active:hover .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; + } + + .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { + color: #fff; + } + +.list-group-item-success { + color: #fff; + background-color: #46be8a; +} + +a.list-group-item-success, button.list-group-item-success { + color: #fff; +} + + a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { + color: inherit; + } + + a.list-group-item-success:hover, button.list-group-item-success:hover, a.list-group-item-success:focus, button.list-group-item-success:focus { + color: #fff; + background-color: #3dae7d; + } + + a.list-group-item-success.active, button.list-group-item-success.active, a.list-group-item-success.active:hover, button.list-group-item-success.active:hover, a.list-group-item-success.active:focus, button.list-group-item-success.active:focus { + color: #fff; + background-color: rgba(63, 72, 84, 1); + border-color: #fff; + } + +.list-group-item-info { + color: #fff; + background-color: #57c7d4; +} + +a.list-group-item-info, button.list-group-item-info { + color: #fff; +} + + a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { + color: inherit; + } + + a.list-group-item-info:hover, button.list-group-item-info:hover, a.list-group-item-info:focus, button.list-group-item-info:focus { + color: #fff; + background-color: #43c0cf; + } + + a.list-group-item-info.active, button.list-group-item-info.active, a.list-group-item-info.active:hover, button.list-group-item-info.active:hover, a.list-group-item-info.active:focus, button.list-group-item-info.active:focus { + color: #fff; + background-color: rgba(63, 72, 84, 1); + border-color: #fff; + } + +.list-group-item-warning { + color: #fff; + background-color: #f2a654; +} + +a.list-group-item-warning, button.list-group-item-warning { + color: #fff; +} + + a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { + color: inherit; + } + + a.list-group-item-warning:hover, button.list-group-item-warning:hover, a.list-group-item-warning:focus, button.list-group-item-warning:focus { + color: #fff; + background-color: #f09a3c; + } + + a.list-group-item-warning.active, button.list-group-item-warning.active, a.list-group-item-warning.active:hover, button.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, button.list-group-item-warning.active:focus { + color: #fff; + background-color: rgba(63, 72, 84, 1); + border-color: #fff; + } + +.list-group-item-danger { + color: #fff; + background-color: #f96868; +} + +a.list-group-item-danger, button.list-group-item-danger { + color: #fff; +} + + a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { + color: inherit; + } + + a.list-group-item-danger:hover, button.list-group-item-danger:hover, a.list-group-item-danger:focus, button.list-group-item-danger:focus { + color: #fff; + background-color: #f84f4f; + } + + a.list-group-item-danger.active, button.list-group-item-danger.active, a.list-group-item-danger.active:hover, button.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, button.list-group-item-danger.active:focus { + color: #fff; + background-color: rgba(63, 72, 84, 1); + border-color: #fff; + } + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 22px; + background-color: rgba(63, 72, 84, 1); + border: 1px solid transparent; + border-radius: 1px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} + +.panel-body { + padding: 20px; +} + +.panel-heading { + padding: 16px 20px; + border-bottom: 1px solid transparent; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + + .panel-heading > .dropdown .dropdown-toggle { + color: inherit; + } + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} + + .panel-title > a, .panel-title > small, .panel-title > .small, .panel-title > small > a, .panel-title > .small > a { + color: inherit; + } + +.panel-footer { + padding: 0 20px 10px; + background-color: transparent; + border-top: 1px solid #e4eaec; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.panel > .list-group, .panel > .panel-collapse > .list-group { + margin-bottom: 0; +} + + .panel > .list-group .list-group-item, .panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; + } + + .panel > .list-group:first-child .list-group-item:first-child, .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .panel > .list-group:last-child .list-group-item:last-child, .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.list-group + .panel-footer { + border-top-width: 0; +} + +.panel > .table, .panel > .table-responsive > .table, .panel > .panel-collapse > .table { + margin-bottom: 0; +} + + .panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption { + padding-right: 20px; + padding-left: 20px; + } + + .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .panel > .table:first-child > thead:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 0; + } + + .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 0; + } + + .panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .panel > .table:last-child > tbody:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 0; + } + + .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 0; + } + + .panel > .panel-body + .table, .panel > .panel-body + .table-responsive, .panel > .table + .panel-body, .panel > .table-responsive + .panel-body { + border-top: 1px solid #e4eaec; + } + + .panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; + } + +.panel > .table-bordered, .panel > .table-responsive > .table-bordered { + border: 0; +} + + .panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; + } + + .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; + } + +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} + +.panel-group { + margin-bottom: 22px; +} + + .panel-group .panel { + margin-bottom: 0; + border-radius: 1px; + } + + .panel-group .panel + .panel { + margin-top: 5px; + } + + .panel-group .panel-heading { + border-bottom: 0; + } + + .panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #e4eaec; + } + + .panel-group .panel-footer { + border-top: 0; + } + + .panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #e4eaec; + } + +.panel-default { + border-color: #e4eaec; +} + + .panel-default > .panel-heading { + color: #76838f; + background-color: #e4eaec; + border-color: #e4eaec; + } + + .panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #e4eaec; + } + + .panel-default > .panel-heading .badge { + color: #e4eaec; + background-color: #76838f; + } + + .panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #e4eaec; + } + +.panel-primary { + border-color: #62a8ea; +} + + .panel-primary > .panel-heading { + color: #fff; + background-color: #62a8ea; + border-color: #62a8ea; + } + + .panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #62a8ea; + } + + .panel-primary > .panel-heading .badge { + color: #62a8ea; + background-color: rgba(63, 72, 84, 1); + } + + .panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #62a8ea; + } + +.panel-success { + border-color: #3dae6a; +} + + .panel-success > .panel-heading { + color: #fff; + background-color: #46be8a; + border-color: #3dae6a; + } + + .panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #3dae6a; + } + + .panel-success > .panel-heading .badge { + color: #46be8a; + background-color: rgba(63, 72, 84, 1); + } + + .panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #3dae6a; + } + +.panel-info { + border-color: #3bcdc4; +} + + .panel-info > .panel-heading { + color: #fff; + background-color: #57c7d4; + border-color: #3bcdc4; + } + + .panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #3bcdc4; + } + + .panel-info > .panel-heading .badge { + color: #57c7d4; + background-color: rgba(63, 72, 84, 1); + } + + .panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #3bcdc4; + } + +.panel-warning { + border-color: #f18246; +} + + .panel-warning > .panel-heading { + color: #fff; + background-color: #f2a654; + border-color: #f18246; + } + + .panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #f18246; + } + + .panel-warning > .panel-heading .badge { + color: #f2a654; + background-color: rgba(63, 72, 84, 1); + } + + .panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #f18246; + } + +.panel-danger { + border-color: #f85974; +} + + .panel-danger > .panel-heading { + color: #fff; + background-color: #f96868; + border-color: #f85974; + } + + .panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #f85974; + } + + .panel-danger > .panel-heading .badge { + color: #f96868; + background-color: rgba(63, 72, 84, 1); + } + + .panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #f85974; + } + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} + + .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; + } + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: rgba(63, 72, 84, 1); + border: 1px solid #e4eaec; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} + + .well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); + } + +.well-lg { + padding: 24px; + border-radius: 4px; +} + +.well-sm { + padding: 9px; + border-radius: 2px; +} + +.close { + float: right; + font-size: 21px; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: none; + filter: alpha(opacity=20); + opacity: .2; +} + + .close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; + } + +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} + + .modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -moz-transition: -moz-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: -webkit-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + } + + .modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + } + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: rgba(63, 72, 84, 1); + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid transparent; + border-radius: 4px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + + .modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; + } + + .modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; + } + +.modal-header { + padding: 10px 20px; + border-bottom: 1px solid #e4eaec; +} + + .modal-header .close { + margin-top: -2px; + } + +.modal-title { + margin: 0; + line-height: 1.6; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 20px; + text-align: right; + border-top: 1px solid #e4eaec; +} + + .modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; + } + + .modal-footer .btn-group .btn + .btn { + margin-left: -1px; + } + + .modal-footer .btn-block + .btn-block { + margin-left: 0; + } + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 768px) { + .modal-dialog { + width: 500px; + margin: 30px auto; + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + + .modal-sm { + width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} + +.tooltip { + position: absolute; + z-index: 1900; + display: block; + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + line-break: auto; +} + + .tooltip.in { + filter: alpha(opacity=90); + opacity: .9; + } + + .tooltip.top { + padding: 4px 0; + margin-top: -3px; + } + + .tooltip.right { + padding: 0 4px; + margin-left: 3px; + } + + .tooltip.bottom { + padding: 4px 0; + margin-top: 3px; + } + + .tooltip.left { + padding: 0 4px; + margin-left: -3px; + } + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: rgba(0, 0, 0, .8); + border-radius: 3px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -4px; + border-width: 4px 4px 0; + border-top-color: rgba(0, 0, 0, .8); +} + +.tooltip.top-left .tooltip-arrow { + right: 4px; + bottom: 0; + margin-bottom: -4px; + border-width: 4px 4px 0; + border-top-color: rgba(0, 0, 0, .8); +} + +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 4px; + margin-bottom: -4px; + border-width: 4px 4px 0; + border-top-color: rgba(0, 0, 0, .8); +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -4px; + border-width: 4px 4px 4px 0; + border-right-color: rgba(0, 0, 0, .8); +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -4px; + border-width: 4px 0 4px 4px; + border-left-color: rgba(0, 0, 0, .8); +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -4px; + border-width: 0 4px 4px; + border-bottom-color: rgba(0, 0, 0, .8); +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 4px; + margin-top: -4px; + border-width: 0 4px 4px; + border-bottom-color: rgba(0, 0, 0, .8); +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 4px; + margin-top: -4px; + border-width: 0 4px 4px; + border-bottom-color: rgba(0, 0, 0, .8); +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1800; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: rgba(63, 72, 84, 1); + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #e4eaec; + border: 1px solid rgba(204, 213, 219, .8); + border-radius: 4px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + line-break: auto; +} + + .popover.top { + margin-top: -6px; + } + + .popover.right { + margin-left: 6px; + } + + .popover.bottom { + margin-top: 6px; + } + + .popover.left { + margin-left: -6px; + } + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: rgba(63, 72, 84, 1); + border-bottom: 1px solid #e2ecf1; + border-radius: 3px 3px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover > .arrow { + border-width: 7px; +} + + .popover > .arrow:after { + content: ""; + border-width: 6px; + } + +.popover.top > .arrow { + bottom: -7px; + left: 50%; + margin-left: -7px; + border-top-color: #a8bbc2; + border-top-color: rgba(204, 213, 219, .85); + border-bottom-width: 0; +} + + .popover.top > .arrow:after { + bottom: 1px; + margin-left: -6px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; + } + +.popover.right > .arrow { + top: 50%; + left: -7px; + margin-top: -7px; + border-right-color: #a8bbc2; + border-right-color: rgba(204, 213, 219, .85); + border-left-width: 0; +} + + .popover.right > .arrow:after { + bottom: -6px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; + } + +.popover.bottom > .arrow { + top: -7px; + left: 50%; + margin-left: -7px; + border-top-width: 0; + border-bottom-color: #a8bbc2; + border-bottom-color: rgba(204, 213, 219, .85); +} + + .popover.bottom > .arrow:after { + top: 1px; + margin-left: -6px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; + } + +.popover.left > .arrow { + top: 50%; + right: -7px; + margin-top: -7px; + border-right-width: 0; + border-left-color: #a8bbc2; + border-left-color: rgba(204, 213, 219, .85); +} + + .popover.left > .arrow:after { + right: 1px; + bottom: -6px; + content: " "; + border-right-width: 0; + border-left-color: #fff; + } + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + + .carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; + } + + .carousel-inner > .item > img, .carousel-inner > .item > a > img { + line-height: 1; + } + +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: -webkit-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + -moz-perspective: 1000px; + perspective: 1000px; + } + + .carousel-inner > .item.next, .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + .carousel-inner > .item.prev, .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, .carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + + .carousel-inner > .next.left, .carousel-inner > .prev.right { + left: 0; + } + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 16px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=0); + opacity: 0; +} + + .carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; + } + + .carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; + } + + .carousel-control:hover, .carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; + } + + .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; + } + + .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + + .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + + .carousel-control .icon-prev, .carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; + } + + .carousel-control .icon-prev:before { + content: "\2039"; + } + + .carousel-control .icon-next:before { + content: "\203a"; + } + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + + .carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; + } + + .carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: rgba(63, 72, 84, 1); + } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} + + .carousel-caption .btn { + text-shadow: none; + } + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { + width: 24px; + height: 24px; + margin-top: -8px; + font-size: 24px; + } + + .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { + margin-left: -8px; + } + + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { + margin-right: -8px; + } + + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, .clearfix:after, .dl-horizontal dd:before, .dl-horizontal dd:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .modal-header:before, .modal-header:after, .modal-footer:before, .modal-footer:after { + display: table; + content: " "; +} + +.clearfix:after, .dl-horizontal dd:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .modal-header:after, .modal-footer:after { + clear: both; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.hidden { + display: none !important; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +.visible-xs, .visible-sm, .visible-md, .visible-lg { + display: none !important; +} + +.visible-xs-block, .visible-xs-inline, .visible-xs-inline-block, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + + table.visible-xs { + display: table !important; + } + + tr.visible-xs { + display: table-row !important; + } + + th.visible-xs, td.visible-xs { + display: table-cell !important; + } +} + +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + + table.visible-sm { + display: table !important; + } + + tr.visible-sm { + display: table-row !important; + } + + th.visible-sm, td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + + table.visible-md { + display: table !important; + } + + tr.visible-md { + display: table-row !important; + } + + th.visible-md, td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + + table.visible-lg { + display: table !important; + } + + tr.visible-lg { + display: table-row !important; + } + + th.visible-lg, td.visible-lg { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + + table.visible-print { + display: table !important; + } + + tr.visible-print { + display: table-row !important; + } + + th.visible-print, td.visible-print { + display: table-cell !important; + } +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/public/lib/bootstrap/bootstrap.js b/public/lib/bootstrap/bootstrap.js new file mode 100644 index 0000000..80c5b38 --- /dev/null +++ b/public/lib/bootstrap/bootstrap.js @@ -0,0 +1,2421 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery'); +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.'); + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3'); + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.6 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap'); + + var transEndEventNames = { + WebkitTransition: 'webkitTransitionEnd', + MozTransition: 'transitionend', + OTransition: 'oTransitionEnd otransitionend', + transition: 'transitionend' + }; + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return {end: transEndEventNames[name]}; + } + } + + return false; // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false; + var $el = this; + $(this).one('bsTransitionEnd', function () { + called = true; + }); + var callback = function () { + if (!called) $($el).trigger($.support.transition.end); + }; + setTimeout(callback, duration); + return this; + }; + + $(function () { + $.support.transition = transitionEnd(); + + if (!$.support.transition) return; + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments); + } + }; + }); + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.6 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]'; + var Alert = function (el) { + $(el).on('click', dismiss, this.close); + }; + + Alert.VERSION = '3.3.6'; + + Alert.TRANSITION_DURATION = 150; + + Alert.prototype.close = function (e) { + var $this = $(this); + var selector = $this.attr('data-target'); + + if (!selector) { + selector = $this.attr('href'); + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, ''); // strip for ie7 + } + + var $parent = $(selector); + + if (e) e.preventDefault(); + + if (!$parent.length) { + $parent = $this.closest('.alert'); + } + + $parent.trigger(e = $.Event('close.bs.alert')); + + if (e.isDefaultPrevented()) return; + + $parent.removeClass('in'); + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove(); + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement(); + }; + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.alert'); + + if (!data) $this.data('bs.alert', (data = new Alert(this))); + if (typeof option == 'string') data[option].call($this); + }); + } + + var old = $.fn.alert; + + $.fn.alert = Plugin; + $.fn.alert.Constructor = Alert; + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old; + return this; + }; + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close); + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.6 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element); + this.options = $.extend({}, Button.DEFAULTS, options); + this.isLoading = false; + }; + + Button.VERSION = '3.3.6'; + + Button.DEFAULTS = { + loadingText: 'loading...' + }; + + Button.prototype.setState = function (state) { + var d = 'disabled'; + var $el = this.$element; + var val = $el.is('input') ? 'val' : 'html'; + var data = $el.data(); + + state += 'Text'; + + if (data.resetText == null) $el.data('resetText', $el[val]()); + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]); + + if (state == 'loadingText') { + this.isLoading = true; + $el.addClass(d).attr(d, d); + } else if (this.isLoading) { + this.isLoading = false; + $el.removeClass(d).removeAttr(d); + } + }, this), 0); + }; + + Button.prototype.toggle = function () { + var changed = true; + var $parent = this.$element.closest('[data-toggle="buttons"]'); + + if ($parent.length) { + var $input = this.$element.find('input'); + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false; + $parent.find('.active').removeClass('active'); + this.$element.addClass('active'); + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false; + this.$element.toggleClass('active'); + } + $input.prop('checked', this.$element.hasClass('active')); + if (changed) $input.trigger('change'); + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')); + this.$element.toggleClass('active'); + } + }; + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.button'); + var options = typeof option == 'object' && option; + + if (!data) $this.data('bs.button', (data = new Button(this, options))); + + if (option == 'toggle') data.toggle(); + else if (option) data.setState(option); + }); + } + + var old = $.fn.button; + + $.fn.button = Plugin; + $.fn.button.Constructor = Button; + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old; + return this; + }; + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn'); + Plugin.call($btn, 'toggle'); + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault(); + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus'); + else $btn.find('input:visible,button:visible').first().trigger('focus'); + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)); + }); + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.6 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element); + this.$indicators = this.$element.find('.carousel-indicators'); + this.options = options; + this.paused = null; + this.sliding = null; + this.interval = null; + this.$active = null; + this.$items = null; + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)); + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)); + }; + + Carousel.VERSION = '3.3.6'; + + Carousel.TRANSITION_DURATION = 600; + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + }; + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return; + switch (e.which) { + case 37: + this.prev(); + break; + case 39: + this.next(); + break; + default: + return; + } + + e.preventDefault(); + }; + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false); + + this.interval && clearInterval(this.interval); + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)); + + return this; + }; + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item'); + return this.$items.index(item || this.$active); + }; + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active); + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)); + if (willWrap && !this.options.wrap) return active; + var delta = direction == 'prev' ? -1 : 1; + var itemIndex = (activeIndex + delta) % this.$items.length; + return this.$items.eq(itemIndex); + }; + + Carousel.prototype.to = function (pos) { + var that = this; + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')); + + if (pos > (this.$items.length - 1) || pos < 0) return; + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { + that.to(pos) + }); // yes, "slid" + if (activeIndex == pos) return this.pause().cycle(); + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)); + }; + + Carousel.prototype.pause = function (e) { + e || (this.paused = true); + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end); + this.cycle(true); + } + + this.interval = clearInterval(this.interval); + + return this; + }; + + Carousel.prototype.next = function () { + if (this.sliding) return; + return this.slide('next'); + }; + + Carousel.prototype.prev = function () { + if (this.sliding) return; + return this.slide('prev'); + }; + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active'); + var $next = next || this.getItemForDirection(type, $active); + var isCycling = this.interval; + var direction = type == 'next' ? 'left' : 'right'; + var that = this; + + if ($next.hasClass('active')) return (this.sliding = false); + + var relatedTarget = $next[0]; + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }); + this.$element.trigger(slideEvent); + if (slideEvent.isDefaultPrevented()) return; + + this.sliding = true; + + isCycling && this.pause(); + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active'); + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]); + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', {relatedTarget: relatedTarget, direction: direction}); // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type); + $next[0].offsetWidth; // force reflow + $active.addClass(direction); + $next.addClass(direction); + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active'); + $active.removeClass(['active', direction].join(' ')); + that.sliding = false; + setTimeout(function () { + that.$element.trigger(slidEvent); + }, 0); + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION); + } else { + $active.removeClass('active'); + $next.addClass('active'); + this.sliding = false; + this.$element.trigger(slidEvent); + } + + isCycling && this.cycle(); + + return this; + }; + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.carousel'); + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option); + var action = typeof option == 'string' ? option : options.slide; + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))); + if (typeof option == 'number') data.to(option); + else if (action) data[action](); + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel; + + $.fn.carousel = Plugin; + $.fn.carousel.Constructor = Carousel; + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old; + return this + }; + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href; + var $this = $(this); + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')); // strip for ie7 + if (!$target.hasClass('carousel')) return; + var options = $.extend({}, $target.data(), $this.data()); + var slideIndex = $this.attr('data-slide-to'); + if (slideIndex) options.interval = false; + + Plugin.call($target, options); + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }; + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler); + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this); + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.6 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + +/* jshint latedef: false */ + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element); + this.options = $.extend({}, Collapse.DEFAULTS, options); + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]'); + this.transitioning = null; + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle(); + }; + + Collapse.VERSION = '3.3.6'; + + Collapse.TRANSITION_DURATION = 350; + + Collapse.DEFAULTS = { + toggle: true + }; + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width'); + return hasWidth ? 'width' : 'height' + }; + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return; + + var activesData; + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing'); + + if (actives && actives.length) { + activesData = actives.data('bs.collapse'); + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse'); + this.$element.trigger(startEvent); + if (startEvent.isDefaultPrevented()) return; + + if (actives && actives.length) { + Plugin.call(actives, 'hide'); + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension(); + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true); + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true); + + this.transitioning = 1; + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension](''); + this.transitioning = 0; + this.$element + .trigger('shown.bs.collapse') + }; + + if (!$.support.transition) return complete.call(this); + + var scrollSize = $.camelCase(['scroll', dimension].join('-')); + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + }; + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return; + + var startEvent = $.Event('hide.bs.collapse'); + this.$element.trigger(startEvent); + if (startEvent.isDefaultPrevented()) return; + + var dimension = this.dimension(); + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight; + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false); + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false); + + this.transitioning = 1; + + var complete = function () { + this.transitioning = 0; + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + }; + + if (!$.support.transition) return complete.call(this); + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + }; + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + }; + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element); + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + }; + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in'); + + $element.attr('aria-expanded', isOpen); + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + }; + + function getTargetFromTrigger($trigger) { + var href; + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''); // strip for ie7 + + return $(target) + } + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.collapse'); + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option); + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false; + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse; + + $.fn.collapse = Plugin; + $.fn.collapse.Constructor = Collapse; + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old; + return this + }; + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this); + + if (!$this.attr('data-target')) e.preventDefault(); + + var $target = getTargetFromTrigger($this); + var data = $target.data('bs.collapse'); + var option = data ? 'toggle' : $this.data(); + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.6 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop'; + var toggle = '[data-toggle="dropdown"]'; + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + }; + + Dropdown.VERSION = '3.3.6'; + + function getParent($this) { + var selector = $this.attr('data-target'); + + if (!selector) { + selector = $this.attr('href'); + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector); + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return; + $(backdrop).remove(); + $(toggle).each(function () { + var $this = $(this); + var $parent = getParent($this); + var relatedTarget = {relatedTarget: this}; + + if (!$parent.hasClass('open')) return; + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return; + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)); + + if (e.isDefaultPrevented()) return; + + $this.attr('aria-expanded', 'false'); + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this); + + if ($this.is('.disabled, :disabled')) return; + + var $parent = getParent($this); + var isActive = $parent.hasClass('open'); + + clearMenus(); + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = {relatedTarget: this}; + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)); + + if (e.isDefaultPrevented()) return; + + $this + .trigger('focus') + .attr('aria-expanded', 'true'); + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + }; + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return; + + var $this = $(this); + + e.preventDefault(); + e.stopPropagation(); + + if ($this.is('.disabled, :disabled')) return; + + var $parent = getParent($this); + var isActive = $parent.hasClass('open'); + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus'); + return $this.trigger('click'); + } + + var desc = ' li:not(.disabled):visible a'; + var $items = $parent.find('.dropdown-menu' + desc); + + if (!$items.length) return; + + var index = $items.index(e.target); + + if (e.which == 38 && index > 0) index--; // up + if (e.which == 40 && index < $items.length - 1) index++; // down + if (!~index) index = 0; + + $items.eq(index).trigger('focus') + }; + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.dropdown'); + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))); + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown; + + $.fn.dropdown = Plugin; + $.fn.dropdown.Constructor = Dropdown; + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old; + return this + }; + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { + e.stopPropagation() + }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.6 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + var page, $element, self = this; + + this.options = options; + this.$body = $(document.body); + $element = this.$element = $(element); + this.$dialog = this.$element.find('.modal-dialog'); + this.$backdrop = null; + this.isShown = null; + this.originalBodyPad = null; + this.scrollbarWidth = 0; + this.ignoreBackdropClick = false; + + if (this.options.remote) { + $element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + + page = this.options.page; + + if (!/#/.test(page) && page) { + $element.find('.modal-content').append(''); + $element.find('iframe.modal-iframe').load(function () { + $(this).css('height', self.options.pageHeight); + $.proxy(function () { + $element.trigger('loaded.bs.modal') + }, this) + }); + } + }; + + Modal.VERSION = '3.3.6'; + + //Modal.TRANSITION_DURATION = 300; + // Modal.BACKDROP_TRANSITION_DURATION = 150; + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + }; + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget); + }; + + Modal.prototype.show = function (_relatedTarget) { + var that = this, + page = that.options.page, + result = !/#/.test(page) && page; + var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget}); + + this.$element.trigger(e); + + if (this.isShown || e.isDefaultPrevented()) return; + + this.isShown = true; + + this.checkScrollbar(); + this.setScrollbar(); + this.$body.addClass('modal-open'); + + this.escape(); + this.resize(); + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }); + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade'); + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + if (!that.flag) { + that.$element + .show() + .scrollTop(0) + } else { + var currentId = that.$element.attr('id'); + that.$element.after('
    '); + that.$element.appendTo(that.$body).show().scrollTop(0) + } + + if(result){ + that.$element.find('iframe').one('load', function () { + var _document = $(this).prop('contentWindow').document; + $(_document).on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(that.hide, that)); + }); + }else{ + that.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(that.hide, that)); + } + + that.adjustDialog(); + + if (transition) { + that.$element[0].offsetWidth; // force reflow + } + + that.$element.addClass('in'); + + that.enforceFocus(); + + var e = $.Event('shown.bs.modal', {relatedTarget: _relatedTarget}), + _callback = function () { + that.$dialog.find('iframe').one('load', function(){ + that.$element.trigger('focus').trigger(e); + }); + }; + + if(transition){ + if(result){ + _callback(); + }else{ + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION); + } + }else{ + if(result){ + _callback(); + }else{ + that.$element.trigger('focus').trigger(e) + } + } + }) + }; + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault(); + + e = $.Event('hide.bs.modal'); + + this.$element.trigger(e); + + if (!this.isShown || e.isDefaultPrevented()) return; + + this.isShown = false; + + this.escape(); + this.resize(); + + $(document).off('focusin.bs.modal'); + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal'); + + this.$dialog.off('mousedown.dismiss.bs.modal'); + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + }; + + Modal.prototype.enforceFocus = function () { + var _document = this._document; + + $(_document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (_document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + }; + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + }; + + Modal.prototype.resize = function () { + var global = this.global; + + if (this.isShown) { + $(global).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(global).off('resize.bs.modal') + } + }; + + Modal.prototype.iframeAuto = function (){ + var page = this.options.page, iframe; + + if(!/#/.test(page) && page && this.isShown){ + iframe = this.$element.find('iframe'); + iframe.css({height: iframe.contents().find('html').outerHeight()}); + } + }; + + Modal.prototype.hideModal = function () { + var that = this, + currentId = that.$element.attr('id'); + + that.$element.hide(); + + if (that.flag) { + $('#' + currentId + '-admui').before(that.$element).remove(); + } + + this.backdrop(function () { + that.$body.removeClass('modal-open'); + that.resetAdjustments(); + that.resetScrollbar(); + that.$element.trigger('hidden.bs.modal') + }) + }; + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove(); + this.$backdrop = null; + }; + + Modal.prototype.backdrop = function (callback) { + var that = this; + var animate = this.$element.hasClass('fade') ? 'fade' : ''; + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate; + + this.$backdrop = $(that._document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body); + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false; + } + if (e.target !== e.currentTarget) return; + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)); + + if (doAnimate) this.$backdrop[0].offsetWidth; // force reflow + + this.$backdrop.addClass('in'); + + if (!callback) return; + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in'); + + var callbackRemove = function () { + that.removeBackdrop(); + callback && callback() + }; + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove): + callbackRemove() + + } else if (callback) { + callback() + } + }; + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog(); + this.iframeAuto(); + }; + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > this._document.documentElement.clientHeight; + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + }; + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + }; + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = this.global.innerWidth; + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect(); + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = this._document.body.clientWidth < fullWindowWidth; + this.scrollbarWidth = this.measureScrollbar() + }; + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10); + this.originalBodyPad = this._document.body.style.paddingRight || ''; + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + }; + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + }; + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = this._document.createElement('div'); + scrollDiv.className = 'modal-scrollbar-measure'; + this.$body.append(scrollDiv); + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; + this.$body[0].removeChild(scrollDiv); + return scrollbarWidth + }; + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + var that = this; + + return that.each(function () { + var $this = $(this); + var data = $this.data('bs.modal'); + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option); + var frame, global, _document; + + if (!data) { + $this.data('bs.modal', (data = new Modal(this, options))); + frame = options.global; + frame = typeof frame === 'undefined' ? true : frame; + + global = data.global = frame ? parent : window; + _document = data._document = global.document; + data.$body = $(_document.body); + data.flag = frame; + } + + if (typeof option == 'string') data[option](_relatedTarget); + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal; + + $.fn.modal = Plugin; + $.fn.modal.Constructor = Modal; + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old; + return this + }; + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this); + var href = $this.attr('href'); + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))); // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({remote: !/#/.test(href) && href}, $target.data(), $this.data()); + + if ($this.is('a')) e.preventDefault(); + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return; // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }); + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.6 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null; + this.options = null; + this.enabled = null; + this.timeout = null; + this.hoverState = null; + this.$element = null; + this.inState = null; + + this.init('tooltip', element, options) + }; + + Tooltip.VERSION = '3.3.6'; + + Tooltip.TRANSITION_DURATION = 150; + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + }; + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true; + this.type = type; + this.$element = $(element); + this.options = this.getOptions(options); + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)); + this.inState = {click: false, hover: false, focus: false}; + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' '); + + for (var i = triggers.length; i--;) { + var trigger = triggers[i]; + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'; + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'; + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)); + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) : + this.fixTitle() + }; + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + }; + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options); + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + }; + + Tooltip.prototype.getDelegateOptions = function () { + var options = {}; + var defaults = this.getDefaults(); + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }); + + return options + }; + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type); + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()); + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in'; + return + } + + clearTimeout(self.timeout); + + self.hoverState = 'in'; + + if (!self.options.delay || !self.options.delay.show) return self.show(); + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + }; + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + }; + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type); + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()); + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return; + + clearTimeout(self.timeout); + + self.hoverState = 'out'; + + if (!self.options.delay || !self.options.delay.hide) return self.hide(); + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + }; + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type); + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e); + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]); + if (e.isDefaultPrevented() || !inDom) return; + var that = this; + + var $tip = this.tip(); + + var tipId = this.getUID(this.type); + + this.setContent(); + $tip.attr('id', tipId); + this.$element.attr('aria-describedby', tipId); + + if (this.options.animation) $tip.addClass('fade'); + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement; + + var autoToken = /\s?auto?\s?/i; + var autoPlace = autoToken.test(placement); + if (autoPlace) placement = placement.replace(autoToken, '') || 'top'; + + $tip + .detach() + .css({top: 0, left: 0, display: 'block'}) + .addClass(placement) + .data('bs.' + this.type, this); + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element); + this.$element.trigger('inserted.bs.' + this.type); + + var pos = this.getPosition(); + var actualWidth = $tip[0].offsetWidth; + var actualHeight = $tip[0].offsetHeight; + + if (autoPlace) { + var orgPlacement = placement; + var viewportDim = this.getPosition(this.$viewport); + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement; + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight); + + this.applyPlacement(calculatedOffset, placement); + + var complete = function () { + var prevHoverState = that.hoverState; + that.$element.trigger('shown.bs.' + that.type); + that.hoverState = null; + + if (prevHoverState == 'out') that.leave(that) + }; + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + }; + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip(); + var width = $tip[0].offsetWidth; + var height = $tip[0].offsetHeight; + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10); + var marginLeft = parseInt($tip.css('margin-left'), 10); + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0; + if (isNaN(marginLeft)) marginLeft = 0; + + offset.top += marginTop; + offset.left += marginLeft; + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0); + + $tip.addClass('in'); + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth; + var actualHeight = $tip[0].offsetHeight; + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight); + + if (delta.left) offset.left += delta.left; + else offset.top += delta.top; + + var isVertical = /top|bottom/.test(placement); + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight; + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'; + + $tip.offset(offset); + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + }; + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + }; + + Tooltip.prototype.setContent = function () { + var $tip = this.tip(); + var title = this.getTitle(); + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title); + $tip.removeClass('fade in top bottom left right') + }; + + Tooltip.prototype.hide = function (callback) { + var that = this; + var $tip = $(this.$tip); + var e = $.Event('hide.bs.' + this.type); + + function complete() { + if (that.hoverState != 'in') $tip.detach(); + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type); + callback && callback() + } + + this.$element.trigger(e); + + if (e.isDefaultPrevented()) return; + + $tip.removeClass('in'); + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete(); + + this.hoverState = null; + + return this + }; + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element; + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + }; + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + }; + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element; + + var el = $element[0]; + var isBody = el.tagName == 'BODY'; + + var elRect = el.getBoundingClientRect(); + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, {width: elRect.right - elRect.left, height: elRect.bottom - elRect.top}) + } + var elOffset = isBody ? {top: 0, left: 0} : $element.offset(); + var scroll = {scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop()}; + var outerDims = isBody ? {width: $(window).width(), height: $(window).height()} : null; + + return $.extend({}, elRect, scroll, outerDims, elOffset) + }; + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} : + placement == 'top' ? {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} : + placement == 'left' ? {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} : + /* placement == 'right' */ { + top: pos.top + pos.height / 2 - actualHeight / 2, + left: pos.left + pos.width + } + + }; + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = {top: 0, left: 0}; + if (!this.$viewport) return delta; + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0; + var viewportDimensions = this.getPosition(this.$viewport); + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll; + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight; + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding; + var rightEdgeOffset = pos.left + viewportPadding + actualWidth; + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + }; + + Tooltip.prototype.getTitle = function () { + var title; + var $e = this.$element; + var o = this.options; + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title); + + return title + }; + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000); + while (document.getElementById(prefix)); + return prefix; + }; + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template); + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + }; + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + }; + + Tooltip.prototype.enable = function () { + this.enabled = true + }; + + Tooltip.prototype.disable = function () { + this.enabled = false + }; + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + }; + + Tooltip.prototype.toggle = function (e) { + var self = this; + if (e) { + self = $(e.currentTarget).data('bs.' + this.type); + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()); + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click; + if (self.isInStateTrue()) self.enter(self); + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + }; + + Tooltip.prototype.destroy = function () { + var that = this; + clearTimeout(this.timeout); + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type); + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null; + that.$arrow = null; + that.$viewport = null; + }) + }; + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.tooltip'); + var options = typeof option == 'object' && option; + + if (!data && /destroy|hide/.test(option)) return; + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip; + + $.fn.tooltip = Plugin; + $.fn.tooltip.Constructor = Tooltip; + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old; + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.6 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + }; + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js'); + + Popover.VERSION = '3.3.6'; + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }); + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype); + + Popover.prototype.constructor = Popover; + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + }; + + Popover.prototype.setContent = function () { + var $tip = this.tip(); + var title = this.getTitle(); + var content = this.getContent(); + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title); + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content); + + $tip.removeClass('fade top bottom left right in'); + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + }; + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + }; + + Popover.prototype.getContent = function () { + var $e = this.$element; + var o = this.options; + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + }; + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + }; + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.popover'); + var options = typeof option == 'object' && option; + + if (!data && /destroy|hide/.test(option)) return; + if (!data) $this.data('bs.popover', (data = new Popover(this, options))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover; + + $.fn.popover = Plugin; + $.fn.popover.Constructor = Popover; + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old; + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.6 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body); + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element); + this.options = $.extend({}, ScrollSpy.DEFAULTS, options); + this.selector = (this.options.target || '') + ' .nav li > a'; + this.offsets = []; + this.targets = []; + this.activeTarget = null; + this.scrollHeight = 0; + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)); + this.refresh(); + this.process() + } + + ScrollSpy.VERSION = '3.3.6'; + + ScrollSpy.DEFAULTS = { + offset: 10 + }; + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + }; + + ScrollSpy.prototype.refresh = function () { + var that = this; + var offsetMethod = 'offset'; + var offsetBase = 0; + + this.offsets = []; + this.targets = []; + this.scrollHeight = this.getScrollHeight(); + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position'; + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this); + var href = $el.data('target') || $el.attr('href'); + var $href = /^#./.test(href) && $(href); + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { + return a[0] - b[0] + }) + .each(function () { + that.offsets.push(this[0]); + that.targets.push(this[1]) + }) + }; + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset; + var scrollHeight = this.getScrollHeight(); + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height(); + var offsets = this.offsets; + var targets = this.targets; + var activeTarget = this.activeTarget; + var i; + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null; + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + }; + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target; + + this.clear(); + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]'; + + var active = $(selector) + .parents('li') + .addClass('active'); + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + }; + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + }; + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.scrollspy'); + var options = typeof option == 'object' && option; + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy; + + $.fn.scrollspy = Plugin; + $.fn.scrollspy.Constructor = ScrollSpy; + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old; + return this + }; + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this); + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.6 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + }; + + Tab.VERSION = '3.3.6'; + + Tab.TRANSITION_DURATION = 150; + + Tab.prototype.show = function () { + var $this = this.element; + var $ul = $this.closest('ul:not(.dropdown-menu)'); + var selector = $this.data('target'); + + if (!selector) { + selector = $this.attr('href'); + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return; + + var $previous = $ul.find('.active:last a'); + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }); + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }); + + $previous.trigger(hideEvent); + $this.trigger(showEvent); + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return; + + var $target = $(selector); + + this.activate($this.closest('li'), $ul); + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }); + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + }; + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active'); + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length); + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false); + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true); + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next(); + + $active.removeClass('in') + }; + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.tab'); + + if (!data) $this.data('bs.tab', (data = new Tab(this))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab; + + $.fn.tab = Plugin; + $.fn.tab.Constructor = Tab; + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old; + return this + }; + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault(); + Plugin.call($(this), 'show') + }; + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.6 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options); + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)); + + this.$element = $(element); + this.affixed = null; + this.unpin = null; + this.pinnedOffset = null; + + this.checkPosition() + }; + + Affix.VERSION = '3.3.6'; + + Affix.RESET = 'affix affix-top affix-bottom'; + + Affix.DEFAULTS = { + offset: 0, + target: window + }; + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop(); + var position = this.$element.offset(); + var targetHeight = this.$target.height(); + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false; + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'; + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null; + var colliderTop = initializing ? scrollTop : position.top; + var colliderHeight = initializing ? targetHeight : height; + + if (offsetTop != null && scrollTop <= offsetTop) return 'top'; + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'; + + return false + }; + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset; + this.$element.removeClass(Affix.RESET).addClass('affix'); + var scrollTop = this.$target.scrollTop(); + var position = this.$element.offset(); + return (this.pinnedOffset = position.top - scrollTop) + }; + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + }; + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return; + + var height = this.$element.height(); + var offset = this.options.offset; + var offsetTop = offset.top; + var offsetBottom = offset.bottom; + var scrollHeight = Math.max($(document).height(), $(document.body).height()); + + if (typeof offset != 'object') offsetBottom = offsetTop = offset; + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element); + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element); + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom); + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', ''); + + var affixType = 'affix' + (affix ? '-' + affix : ''); + var e = $.Event(affixType + '.bs.affix'); + + this.$element.trigger(e); + + if (e.isDefaultPrevented()) return; + + this.affixed = affix; + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null; + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + }; + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var data = $this.data('bs.affix'); + var options = typeof option == 'object' && option; + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))); + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix; + + $.fn.affix = Plugin; + $.fn.affix.Constructor = Affix; + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old; + return this + }; + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this); + var data = $spy.data(); + + data.offset = data.offset || {}; + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom; + if (data.offsetTop != null) data.offset.top = data.offsetTop; + + Plugin.call($spy, data) + }) + }) + +}(jQuery); \ No newline at end of file diff --git a/public/lib/bootstrap/bootstrap.min.js b/public/lib/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..3f21635 --- /dev/null +++ b/public/lib/bootstrap/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if(typeof jQuery==='undefined'){throw new Error('Bootstrap\'s JavaScript requires jQuery')}+function($){'use strict';var version=$.fn.jquery.split(' ')[0].split('.');if((version[0]<2&&version[1]<9)||(version[0]==1&&version[1]==9&&version[2]<1)||(version[0]>2)){throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')}}(jQuery);+function($){'use strict';function transitionEnd(){var el=document.createElement('bootstrap');var transEndEventNames={WebkitTransition:'webkitTransitionEnd',MozTransition:'transitionend',OTransition:'oTransitionEnd otransitionend',transition:'transitionend'};for(var name in transEndEventNames){if(el.style[name]!==undefined){return{end:transEndEventNames[name]}}}return false;}$.fn.emulateTransitionEnd=function(duration){var called=false;var $el=this;$(this).one('bsTransitionEnd',function(){called=true});var callback=function(){if(!called)$($el).trigger($.support.transition.end)};setTimeout(callback,duration);return this};$(function(){$.support.transition=transitionEnd();if(!$.support.transition)return;$.event.special.bsTransitionEnd={bindType:$.support.transition.end,delegateType:$.support.transition.end,handle:function(e){if($(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}})}(jQuery);+function($){'use strict';var dismiss='[data-dismiss="alert"]';var Alert=function(el){$(el).on('click',dismiss,this.close)};Alert.VERSION='3.3.6';Alert.TRANSITION_DURATION=150;Alert.prototype.close=function(e){var $this=$(this);var selector=$this.attr('data-target');if(!selector){selector=$this.attr('href');selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'');}var $parent=$(selector);if(e)e.preventDefault();if(!$parent.length){$parent=$this.closest('.alert')}$parent.trigger(e=$.Event('close.bs.alert'));if(e.isDefaultPrevented())return;$parent.removeClass('in');function removeElement(){$parent.detach().trigger('closed.bs.alert').remove()}$.support.transition&&$parent.hasClass('fade')?$parent.one('bsTransitionEnd',removeElement).emulateTransitionEnd(Alert.TRANSITION_DURATION):removeElement()};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.alert');if(!data)$this.data('bs.alert',(data=new Alert(this)));if(typeof option=='string')data[option].call($this)})}var old=$.fn.alert;$.fn.alert=Plugin;$.fn.alert.Constructor=Alert;$.fn.alert.noConflict=function(){$.fn.alert=old;return this};$(document).on('click.bs.alert.data-api',dismiss,Alert.prototype.close)}(jQuery);+function($){'use strict';var Button=function(element,options){this.$element=$(element);this.options=$.extend({},Button.DEFAULTS,options);this.isLoading=false};Button.VERSION='3.3.6';Button.DEFAULTS={loadingText:'loading...'};Button.prototype.setState=function(state){var d='disabled';var $el=this.$element;var val=$el.is('input')?'val':'html';var data=$el.data();state+='Text';if(data.resetText==null)$el.data('resetText',$el[val]());setTimeout($.proxy(function(){$el[val](data[state]==null?this.options[state]:data[state]);if(state=='loadingText'){this.isLoading=true;$el.addClass(d).attr(d,d)}else if(this.isLoading){this.isLoading=false;$el.removeClass(d).removeAttr(d)}},this),0)};Button.prototype.toggle=function(){var changed=true;var $parent=this.$element.closest('[data-toggle="buttons"]');if($parent.length){var $input=this.$element.find('input');if($input.prop('type')=='radio'){if($input.prop('checked'))changed=false;$parent.find('.active').removeClass('active');this.$element.addClass('active')}else if($input.prop('type')=='checkbox'){if(($input.prop('checked'))!==this.$element.hasClass('active'))changed=false;this.$element.toggleClass('active')}$input.prop('checked',this.$element.hasClass('active'));if(changed)$input.trigger('change')}else{this.$element.attr('aria-pressed',!this.$element.hasClass('active'));this.$element.toggleClass('active')}};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.button');var options=typeof option=='object'&&option;if(!data)$this.data('bs.button',(data=new Button(this,options)));if(option=='toggle')data.toggle();else if(option)data.setState(option)})}var old=$.fn.button;$.fn.button=Plugin;$.fn.button.Constructor=Button;$.fn.button.noConflict=function(){$.fn.button=old;return this};$(document).on('click.bs.button.data-api','[data-toggle^="button"]',function(e){var $btn=$(e.target).closest('.btn');Plugin.call($btn,'toggle');if(!($(e.target).is('input[type="radio"]')||$(e.target).is('input[type="checkbox"]'))){e.preventDefault();if($btn.is('input,button'))$btn.trigger('focus');else $btn.find('input:visible,button:visible').first().trigger('focus')}}).on('focus.bs.button.data-api blur.bs.button.data-api','[data-toggle^="button"]',function(e){$(e.target).closest('.btn').toggleClass('focus',/^focus(in)?$/.test(e.type))})}(jQuery);+function($){'use strict';var Carousel=function(element,options){this.$element=$(element);this.$indicators=this.$element.find('.carousel-indicators');this.options=options;this.paused=null;this.sliding=null;this.interval=null;this.$active=null;this.$items=null;this.options.keyboard&&this.$element.on('keydown.bs.carousel',$.proxy(this.keydown,this));this.options.pause=='hover'&&!('ontouchstart'in document.documentElement)&&this.$element.on('mouseenter.bs.carousel',$.proxy(this.pause,this)).on('mouseleave.bs.carousel',$.proxy(this.cycle,this))};Carousel.VERSION='3.3.6';Carousel.TRANSITION_DURATION=600;Carousel.DEFAULTS={interval:5000,pause:'hover',wrap:true,keyboard:true};Carousel.prototype.keydown=function(e){if(/input|textarea/i.test(e.target.tagName))return;switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()};Carousel.prototype.cycle=function(e){e||(this.paused=false);this.interval&&clearInterval(this.interval);this.options.interval&&!this.paused&&(this.interval=setInterval($.proxy(this.next,this),this.options.interval));return this};Carousel.prototype.getItemIndex=function(item){this.$items=item.parent().children('.item');return this.$items.index(item||this.$active)};Carousel.prototype.getItemForDirection=function(direction,active){var activeIndex=this.getItemIndex(active);var willWrap=(direction=='prev'&&activeIndex===0)||(direction=='next'&&activeIndex==(this.$items.length-1));if(willWrap&&!this.options.wrap)return active;var delta=direction=='prev'?-1:1;var itemIndex=(activeIndex+delta)%this.$items.length;return this.$items.eq(itemIndex)};Carousel.prototype.to=function(pos){var that=this;var activeIndex=this.getItemIndex(this.$active=this.$element.find('.item.active'));if(pos>(this.$items.length-1)||pos<0)return;if(this.sliding)return this.$element.one('slid.bs.carousel',function(){that.to(pos)});if(activeIndex==pos)return this.pause().cycle();return this.slide(pos>activeIndex?'next':'prev',this.$items.eq(pos))};Carousel.prototype.pause=function(e){e||(this.paused=true);if(this.$element.find('.next, .prev').length&&$.support.transition){this.$element.trigger($.support.transition.end);this.cycle(true)}this.interval=clearInterval(this.interval);return this};Carousel.prototype.next=function(){if(this.sliding)return;return this.slide('next')};Carousel.prototype.prev=function(){if(this.sliding)return;return this.slide('prev')};Carousel.prototype.slide=function(type,next){var $active=this.$element.find('.item.active');var $next=next||this.getItemForDirection(type,$active);var isCycling=this.interval;var direction=type=='next'?'left':'right';var that=this;if($next.hasClass('active'))return(this.sliding=false);var relatedTarget=$next[0];var slideEvent=$.Event('slide.bs.carousel',{relatedTarget:relatedTarget,direction:direction});this.$element.trigger(slideEvent);if(slideEvent.isDefaultPrevented())return;this.sliding=true;isCycling&&this.pause();if(this.$indicators.length){this.$indicators.find('.active').removeClass('active');var $nextIndicator=$(this.$indicators.children()[this.getItemIndex($next)]);$nextIndicator&&$nextIndicator.addClass('active')}var slidEvent=$.Event('slid.bs.carousel',{relatedTarget:relatedTarget,direction:direction});if($.support.transition&&this.$element.hasClass('slide')){$next.addClass(type);$next[0].offsetWidth;$active.addClass(direction);$next.addClass(direction);$active.one('bsTransitionEnd',function(){$next.removeClass([type,direction].join(' ')).addClass('active');$active.removeClass(['active',direction].join(' '));that.sliding=false;setTimeout(function(){that.$element.trigger(slidEvent)},0)}).emulateTransitionEnd(Carousel.TRANSITION_DURATION)}else{$active.removeClass('active');$next.addClass('active');this.sliding=false;this.$element.trigger(slidEvent)}isCycling&&this.cycle();return this};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.carousel');var options=$.extend({},Carousel.DEFAULTS,$this.data(),typeof option=='object'&&option);var action=typeof option=='string'?option:options.slide;if(!data)$this.data('bs.carousel',(data=new Carousel(this,options)));if(typeof option=='number')data.to(option);else if(action)data[action]();else if(options.interval)data.pause().cycle()})}var old=$.fn.carousel;$.fn.carousel=Plugin;$.fn.carousel.Constructor=Carousel;$.fn.carousel.noConflict=function(){$.fn.carousel=old;return this};var clickHandler=function(e){var href;var $this=$(this);var $target=$($this.attr('data-target')||(href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,''));if(!$target.hasClass('carousel'))return;var options=$.extend({},$target.data(),$this.data());var slideIndex=$this.attr('data-slide-to');if(slideIndex)options.interval=false;Plugin.call($target,options);if(slideIndex){$target.data('bs.carousel').to(slideIndex)}e.preventDefault()};$(document).on('click.bs.carousel.data-api','[data-slide]',clickHandler).on('click.bs.carousel.data-api','[data-slide-to]',clickHandler);$(window).on('load',function(){$('[data-ride="carousel"]').each(function(){var $carousel=$(this);Plugin.call($carousel,$carousel.data())})})}(jQuery);+function($){'use strict';var Collapse=function(element,options){this.$element=$(element);this.options=$.extend({},Collapse.DEFAULTS,options);this.$trigger=$('[data-toggle="collapse"][href="#'+element.id+'"],'+'[data-toggle="collapse"][data-target="#'+element.id+'"]');this.transitioning=null;if(this.options.parent){this.$parent=this.getParent()}else{this.addAriaAndCollapsedClass(this.$element,this.$trigger)}if(this.options.toggle)this.toggle()};Collapse.VERSION='3.3.6';Collapse.TRANSITION_DURATION=350;Collapse.DEFAULTS={toggle:true};Collapse.prototype.dimension=function(){var hasWidth=this.$element.hasClass('width');return hasWidth?'width':'height'};Collapse.prototype.show=function(){if(this.transitioning||this.$element.hasClass('in'))return;var activesData;var actives=this.$parent&&this.$parent.children('.panel').children('.in, .collapsing');if(actives&&actives.length){activesData=actives.data('bs.collapse');if(activesData&&activesData.transitioning)return}var startEvent=$.Event('show.bs.collapse');this.$element.trigger(startEvent);if(startEvent.isDefaultPrevented())return;if(actives&&actives.length){Plugin.call(actives,'hide');activesData||actives.data('bs.collapse',null)}var dimension=this.dimension();this.$element.removeClass('collapse').addClass('collapsing')[dimension](0).attr('aria-expanded',true);this.$trigger.removeClass('collapsed').attr('aria-expanded',true);this.transitioning=1;var complete=function(){this.$element.removeClass('collapsing').addClass('collapse in')[dimension]('');this.transitioning=0;this.$element.trigger('shown.bs.collapse')};if(!$.support.transition)return complete.call(this);var scrollSize=$.camelCase(['scroll',dimension].join('-'));this.$element.one('bsTransitionEnd',$.proxy(complete,this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])};Collapse.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass('in'))return;var startEvent=$.Event('hide.bs.collapse');this.$element.trigger(startEvent);if(startEvent.isDefaultPrevented())return;var dimension=this.dimension();this.$element[dimension](this.$element[dimension]())[0].offsetHeight;this.$element.addClass('collapsing').removeClass('collapse in').attr('aria-expanded',false);this.$trigger.addClass('collapsed').attr('aria-expanded',false);this.transitioning=1;var complete=function(){this.transitioning=0;this.$element.removeClass('collapsing').addClass('collapse').trigger('hidden.bs.collapse')};if(!$.support.transition)return complete.call(this);this.$element[dimension](0).one('bsTransitionEnd',$.proxy(complete,this)).emulateTransitionEnd(Collapse.TRANSITION_DURATION)};Collapse.prototype.toggle=function(){this[this.$element.hasClass('in')?'hide':'show']()};Collapse.prototype.getParent=function(){return $(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each($.proxy(function(i,element){var $element=$(element);this.addAriaAndCollapsedClass(getTargetFromTrigger($element),$element)},this)).end()};Collapse.prototype.addAriaAndCollapsedClass=function($element,$trigger){var isOpen=$element.hasClass('in');$element.attr('aria-expanded',isOpen);$trigger.toggleClass('collapsed',!isOpen).attr('aria-expanded',isOpen)};function getTargetFromTrigger($trigger){var href;var target=$trigger.attr('data-target')||(href=$trigger.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,'');return $(target)}function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.collapse');var options=$.extend({},Collapse.DEFAULTS,$this.data(),typeof option=='object'&&option);if(!data&&options.toggle&&/show|hide/.test(option))options.toggle=false;if(!data)$this.data('bs.collapse',(data=new Collapse(this,options)));if(typeof option=='string')data[option]()})}var old=$.fn.collapse;$.fn.collapse=Plugin;$.fn.collapse.Constructor=Collapse;$.fn.collapse.noConflict=function(){$.fn.collapse=old;return this};$(document).on('click.bs.collapse.data-api','[data-toggle="collapse"]',function(e){var $this=$(this);if(!$this.attr('data-target'))e.preventDefault();var $target=getTargetFromTrigger($this);var data=$target.data('bs.collapse');var option=data?'toggle':$this.data();Plugin.call($target,option)})}(jQuery);+function($){'use strict';var backdrop='.dropdown-backdrop';var toggle='[data-toggle="dropdown"]';var Dropdown=function(element){$(element).on('click.bs.dropdown',this.toggle)};Dropdown.VERSION='3.3.6';function getParent($this){var selector=$this.attr('data-target');if(!selector){selector=$this.attr('href');selector=selector&&/#[A-Za-z]/.test(selector)&&selector.replace(/.*(?=#[^\s]*$)/,'')}var $parent=selector&&$(selector);return $parent&&$parent.length?$parent:$this.parent()}function clearMenus(e){if(e&&e.which===3)return;$(backdrop).remove();$(toggle).each(function(){var $this=$(this);var $parent=getParent($this);var relatedTarget={relatedTarget:this};if(!$parent.hasClass('open'))return;if(e&&e.type=='click'&&/input|textarea/i.test(e.target.tagName)&&$.contains($parent[0],e.target))return;$parent.trigger(e=$.Event('hide.bs.dropdown',relatedTarget));if(e.isDefaultPrevented())return;$this.attr('aria-expanded','false');$parent.removeClass('open').trigger($.Event('hidden.bs.dropdown',relatedTarget))})}Dropdown.prototype.toggle=function(e){var $this=$(this);if($this.is('.disabled, :disabled'))return;var $parent=getParent($this);var isActive=$parent.hasClass('open');clearMenus();if(!isActive){if('ontouchstart'in document.documentElement&&!$parent.closest('.navbar-nav').length){$(document.createElement('div')).addClass('dropdown-backdrop').insertAfter($(this)).on('click',clearMenus)}var relatedTarget={relatedTarget:this};$parent.trigger(e=$.Event('show.bs.dropdown',relatedTarget));if(e.isDefaultPrevented())return;$this.trigger('focus').attr('aria-expanded','true');$parent.toggleClass('open').trigger($.Event('shown.bs.dropdown',relatedTarget))}return false};Dropdown.prototype.keydown=function(e){if(!/(38|40|27|32)/.test(e.which)||/input|textarea/i.test(e.target.tagName))return;var $this=$(this);e.preventDefault();e.stopPropagation();if($this.is('.disabled, :disabled'))return;var $parent=getParent($this);var isActive=$parent.hasClass('open');if(!isActive&&e.which!=27||isActive&&e.which==27){if(e.which==27)$parent.find(toggle).trigger('focus');return $this.trigger('click')}var desc=' li:not(.disabled):visible a';var $items=$parent.find('.dropdown-menu'+desc);if(!$items.length)return;var index=$items.index(e.target);if(e.which==38&&index>0)index--;if(e.which==40&&index<$items.length-1)index++;if(!~index)index=0;$items.eq(index).trigger('focus')};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.dropdown');if(!data)$this.data('bs.dropdown',(data=new Dropdown(this)));if(typeof option=='string')data[option].call($this)})}var old=$.fn.dropdown;$.fn.dropdown=Plugin;$.fn.dropdown.Constructor=Dropdown;$.fn.dropdown.noConflict=function(){$.fn.dropdown=old;return this};$(document).on('click.bs.dropdown.data-api',clearMenus).on('click.bs.dropdown.data-api','.dropdown form',function(e){e.stopPropagation()}).on('click.bs.dropdown.data-api',toggle,Dropdown.prototype.toggle).on('keydown.bs.dropdown.data-api',toggle,Dropdown.prototype.keydown).on('keydown.bs.dropdown.data-api','.dropdown-menu',Dropdown.prototype.keydown)}(jQuery);+function($){'use strict';var Modal=function(element,options){var page,$element,self=this;this.options=options;this.$body=$(document.body);$element=this.$element=$(element);this.$dialog=this.$element.find('.modal-dialog');this.$backdrop=null;this.isShown=null;this.originalBodyPad=null;this.scrollbarWidth=0;this.ignoreBackdropClick=false;if(this.options.remote){$element.find('.modal-content').load(this.options.remote,$.proxy(function(){this.$element.trigger('loaded.bs.modal')},this))}page=this.options.page;if(!/#/.test(page)&&page){$element.find('.modal-content').append('');$element.find('iframe.modal-iframe').load(function(){$(this).css('height',self.options.pageHeight);$.proxy(function(){$element.trigger('loaded.bs.modal')},this)})}};Modal.VERSION='3.3.6';Modal.DEFAULTS={backdrop:true,keyboard:true,show:true};Modal.prototype.toggle=function(_relatedTarget){return this.isShown?this.hide():this.show(_relatedTarget)};Modal.prototype.show=function(_relatedTarget){var that=this,page=that.options.page,result=!/#/.test(page)&&page;var e=$.Event('show.bs.modal',{relatedTarget:_relatedTarget});this.$element.trigger(e);if(this.isShown||e.isDefaultPrevented())return;this.isShown=true;this.checkScrollbar();this.setScrollbar();this.$body.addClass('modal-open');this.escape();this.resize();this.$dialog.on('mousedown.dismiss.bs.modal',function(){that.$element.one('mouseup.dismiss.bs.modal',function(e){if($(e.target).is(that.$element))that.ignoreBackdropClick=true})});this.backdrop(function(){var transition=$.support.transition&&that.$element.hasClass('fade');if(!that.$element.parent().length){that.$element.appendTo(that.$body)}if(!that.flag){that.$element.show().scrollTop(0)}else{var currentId=that.$element.attr('id');that.$element.after('
    ');that.$element.appendTo(that.$body).show().scrollTop(0)}if(result){that.$element.find('iframe').one('load',function(){var _document=$(this).prop('contentWindow').document;$(_document).on('click.dismiss.bs.modal','[data-dismiss="modal"]',$.proxy(that.hide,that))})}else{that.$element.on('click.dismiss.bs.modal','[data-dismiss="modal"]',$.proxy(that.hide,that))}that.adjustDialog();if(transition){that.$element[0].offsetWidth;}that.$element.addClass('in');that.enforceFocus();var e=$.Event('shown.bs.modal',{relatedTarget:_relatedTarget}),_callback=function(){that.$dialog.find('iframe').one('load',function(){that.$element.trigger('focus').trigger(e)})};if(transition){if(result){_callback()}else{that.$dialog.one('bsTransitionEnd',function(){that.$element.trigger('focus').trigger(e)}).emulateTransitionEnd(Modal.TRANSITION_DURATION)}}else{if(result){_callback()}else{that.$element.trigger('focus').trigger(e)}}})};Modal.prototype.hide=function(e){if(e)e.preventDefault();e=$.Event('hide.bs.modal');this.$element.trigger(e);if(!this.isShown||e.isDefaultPrevented())return;this.isShown=false;this.escape();this.resize();$(document).off('focusin.bs.modal');this.$element.removeClass('in').off('click.dismiss.bs.modal').off('mouseup.dismiss.bs.modal');this.$dialog.off('mousedown.dismiss.bs.modal');$.support.transition&&this.$element.hasClass('fade')?this.$element.one('bsTransitionEnd',$.proxy(this.hideModal,this)).emulateTransitionEnd(Modal.TRANSITION_DURATION):this.hideModal()};Modal.prototype.enforceFocus=function(){var _document=this._document;$(_document).off('focusin.bs.modal').on('focusin.bs.modal',$.proxy(function(e){if(_document!==e.target&&this.$element[0]!==e.target&&!this.$element.has(e.target).length){this.$element.trigger('focus')}},this))};Modal.prototype.escape=function(){if(this.isShown&&this.options.keyboard){this.$element.on('keydown.dismiss.bs.modal',$.proxy(function(e){e.which==27&&this.hide()},this))}else if(!this.isShown){this.$element.off('keydown.dismiss.bs.modal')}};Modal.prototype.resize=function(){var global=this.global;if(this.isShown){$(global).on('resize.bs.modal',$.proxy(this.handleUpdate,this))}else{$(global).off('resize.bs.modal')}};Modal.prototype.iframeAuto=function(){var page=this.options.page,iframe;if(!/#/.test(page)&&page&&this.isShown){iframe=this.$element.find('iframe');iframe.css({height:iframe.contents().find('html').outerHeight()})}};Modal.prototype.hideModal=function(){var that=this,currentId=that.$element.attr('id');that.$element.hide();if(that.flag){$('#'+currentId+'-admui').before(that.$element).remove()}this.backdrop(function(){that.$body.removeClass('modal-open');that.resetAdjustments();that.resetScrollbar();that.$element.trigger('hidden.bs.modal')})};Modal.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove();this.$backdrop=null};Modal.prototype.backdrop=function(callback){var that=this;var animate=this.$element.hasClass('fade')?'fade':'';if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate;this.$backdrop=$(that._document.createElement('div')).addClass('modal-backdrop '+animate).appendTo(this.$body);this.$element.on('click.dismiss.bs.modal',$.proxy(function(e){if(this.ignoreBackdropClick){this.ignoreBackdropClick=false}if(e.target!==e.currentTarget)return;this.options.backdrop=='static'?this.$element[0].focus():this.hide()},this));if(doAnimate)this.$backdrop[0].offsetWidth;this.$backdrop.addClass('in');if(!callback)return;doAnimate?this.$backdrop.one('bsTransitionEnd',callback):callback()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass('in');var callbackRemove=function(){that.removeBackdrop();callback&&callback()};$.support.transition&&this.$element.hasClass('fade')?this.$backdrop.one('bsTransitionEnd',callbackRemove):callbackRemove()}else if(callback){callback()}};Modal.prototype.handleUpdate=function(){this.adjustDialog();this.iframeAuto()};Modal.prototype.adjustDialog=function(){var modalIsOverflowing=this.$element[0].scrollHeight>this._document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&modalIsOverflowing?this.scrollbarWidth:'',paddingRight:this.bodyIsOverflowing&&!modalIsOverflowing?this.scrollbarWidth:''})};Modal.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:'',paddingRight:''})};Modal.prototype.checkScrollbar=function(){var fullWindowWidth=this.global.innerWidth;if(!fullWindowWidth){var documentElementRect=document.documentElement.getBoundingClientRect();fullWindowWidth=documentElementRect.right-Math.abs(documentElementRect.left)}this.bodyIsOverflowing=this._document.body.clientWidth
    ',trigger:'hover focus',title:'',delay:0,html:false,container:false,viewport:{selector:'body',padding:0}};Tooltip.prototype.init=function(type,element,options){this.enabled=true;this.type=type;this.$element=$(element);this.options=this.getOptions(options);this.$viewport=this.options.viewport&&$($.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):(this.options.viewport.selector||this.options.viewport));this.inState={click:false,hover:false,focus:false};if(this.$element[0]instanceof document.constructor&&!this.options.selector){throw new Error('`selector` option must be specified when initializing '+this.type+' on the window.document object!')}var triggers=this.options.trigger.split(' ');for(var i=triggers.length;i--;){var trigger=triggers[i];if(trigger=='click'){this.$element.on('click.'+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(trigger!='manual'){var eventIn=trigger=='hover'?'mouseenter':'focusin';var eventOut=trigger=='hover'?'mouseleave':'focusout';this.$element.on(eventIn+'.'+this.type,this.options.selector,$.proxy(this.enter,this));this.$element.on(eventOut+'.'+this.type,this.options.selector,$.proxy(this.leave,this))}}this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()};Tooltip.prototype.getDefaults=function(){return Tooltip.DEFAULTS};Tooltip.prototype.getOptions=function(options){options=$.extend({},this.getDefaults(),this.$element.data(),options);if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}}return options};Tooltip.prototype.getDelegateOptions=function(){var options={};var defaults=this.getDefaults();this._options&&$.each(this._options,function(key,value){if(defaults[key]!=value)options[key]=value});return options};Tooltip.prototype.enter=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data('bs.'+this.type);if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions());$(obj.currentTarget).data('bs.'+this.type,self)}if(obj instanceof $.Event){self.inState[obj.type=='focusin'?'focus':'hover']=true}if(self.tip().hasClass('in')||self.hoverState=='in'){self.hoverState='in';return}clearTimeout(self.timeout);self.hoverState='in';if(!self.options.delay||!self.options.delay.show)return self.show();self.timeout=setTimeout(function(){if(self.hoverState=='in')self.show()},self.options.delay.show)};Tooltip.prototype.isInStateTrue=function(){for(var key in this.inState){if(this.inState[key])return true}return false};Tooltip.prototype.leave=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data('bs.'+this.type);if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions());$(obj.currentTarget).data('bs.'+this.type,self)}if(obj instanceof $.Event){self.inState[obj.type=='focusout'?'focus':'hover']=false}if(self.isInStateTrue())return;clearTimeout(self.timeout);self.hoverState='out';if(!self.options.delay||!self.options.delay.hide)return self.hide();self.timeout=setTimeout(function(){if(self.hoverState=='out')self.hide()},self.options.delay.hide)};Tooltip.prototype.show=function(){var e=$.Event('show.bs.'+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var inDom=$.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!inDom)return;var that=this;var $tip=this.tip();var tipId=this.getUID(this.type);this.setContent();$tip.attr('id',tipId);this.$element.attr('aria-describedby',tipId);if(this.options.animation)$tip.addClass('fade');var placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement;var autoToken=/\s?auto?\s?/i;var autoPlace=autoToken.test(placement);if(autoPlace)placement=placement.replace(autoToken,'')||'top';$tip.detach().css({top:0,left:0,display:'block'}).addClass(placement).data('bs.'+this.type,this);this.options.container?$tip.appendTo(this.options.container):$tip.insertAfter(this.$element);this.$element.trigger('inserted.bs.'+this.type);var pos=this.getPosition();var actualWidth=$tip[0].offsetWidth;var actualHeight=$tip[0].offsetHeight;if(autoPlace){var orgPlacement=placement;var viewportDim=this.getPosition(this.$viewport);placement=placement=='bottom'&&pos.bottom+actualHeight>viewportDim.bottom?'top':placement=='top'&&pos.top-actualHeightviewportDim.width?'left':placement=='left'&&pos.left-actualWidthviewportDimensions.top+viewportDimensions.height){delta.top=viewportDimensions.top+viewportDimensions.height-bottomEdgeOffset}}else{var leftEdgeOffset=pos.left-viewportPadding;var rightEdgeOffset=pos.left+viewportPadding+actualWidth;if(leftEdgeOffsetviewportDimensions.right){delta.left=viewportDimensions.left+viewportDimensions.width-rightEdgeOffset}}return delta};Tooltip.prototype.getTitle=function(){var title;var $e=this.$element;var o=this.options;title=$e.attr('data-original-title')||(typeof o.title=='function'?o.title.call($e[0]):o.title);return title};Tooltip.prototype.getUID=function(prefix){do prefix+=~~(Math.random()*1000000);while(document.getElementById(prefix));return prefix};Tooltip.prototype.tip=function(){if(!this.$tip){this.$tip=$(this.options.template);if(this.$tip.length!=1){throw new Error(this.type+' `template` option must consist of exactly 1 top-level element!')}}return this.$tip};Tooltip.prototype.arrow=function(){return(this.$arrow=this.$arrow||this.tip().find('.tooltip-arrow'))};Tooltip.prototype.enable=function(){this.enabled=true};Tooltip.prototype.disable=function(){this.enabled=false};Tooltip.prototype.toggleEnabled=function(){this.enabled=!this.enabled};Tooltip.prototype.toggle=function(e){var self=this;if(e){self=$(e.currentTarget).data('bs.'+this.type);if(!self){self=new this.constructor(e.currentTarget,this.getDelegateOptions());$(e.currentTarget).data('bs.'+this.type,self)}}if(e){self.inState.click=!self.inState.click;if(self.isInStateTrue())self.enter(self);else self.leave(self)}else{self.tip().hasClass('in')?self.leave(self):self.enter(self)}};Tooltip.prototype.destroy=function(){var that=this;clearTimeout(this.timeout);this.hide(function(){that.$element.off('.'+that.type).removeData('bs.'+that.type);if(that.$tip){that.$tip.detach()}that.$tip=null;that.$arrow=null;that.$viewport=null})};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.tooltip');var options=typeof option=='object'&&option;if(!data&&/destroy|hide/.test(option))return;if(!data)$this.data('bs.tooltip',(data=new Tooltip(this,options)));if(typeof option=='string')data[option]()})}var old=$.fn.tooltip;$.fn.tooltip=Plugin;$.fn.tooltip.Constructor=Tooltip;$.fn.tooltip.noConflict=function(){$.fn.tooltip=old;return this}}(jQuery);+function($){'use strict';var Popover=function(element,options){this.init('popover',element,options)};if(!$.fn.tooltip)throw new Error('Popover requires tooltip.js');Popover.VERSION='3.3.6';Popover.DEFAULTS=$.extend({},$.fn.tooltip.Constructor.DEFAULTS,{placement:'right',trigger:'click',content:'',template:''});Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype);Popover.prototype.constructor=Popover;Popover.prototype.getDefaults=function(){return Popover.DEFAULTS};Popover.prototype.setContent=function(){var $tip=this.tip();var title=this.getTitle();var content=this.getContent();$tip.find('.popover-title')[this.options.html?'html':'text'](title);$tip.find('.popover-content').children().detach().end()[this.options.html?(typeof content=='string'?'html':'append'):'text'](content);$tip.removeClass('fade top bottom left right in');if(!$tip.find('.popover-title').html())$tip.find('.popover-title').hide()};Popover.prototype.hasContent=function(){return this.getTitle()||this.getContent()};Popover.prototype.getContent=function(){var $e=this.$element;var o=this.options;return $e.attr('data-content')||(typeof o.content=='function'?o.content.call($e[0]):o.content)};Popover.prototype.arrow=function(){return(this.$arrow=this.$arrow||this.tip().find('.arrow'))};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.popover');var options=typeof option=='object'&&option;if(!data&&/destroy|hide/.test(option))return;if(!data)$this.data('bs.popover',(data=new Popover(this,options)));if(typeof option=='string')data[option]()})}var old=$.fn.popover;$.fn.popover=Plugin;$.fn.popover.Constructor=Popover;$.fn.popover.noConflict=function(){$.fn.popover=old;return this}}(jQuery);+function($){'use strict';function ScrollSpy(element,options){this.$body=$(document.body);this.$scrollElement=$(element).is(document.body)?$(window):$(element);this.options=$.extend({},ScrollSpy.DEFAULTS,options);this.selector=(this.options.target||'')+' .nav li > a';this.offsets=[];this.targets=[];this.activeTarget=null;this.scrollHeight=0;this.$scrollElement.on('scroll.bs.scrollspy',$.proxy(this.process,this));this.refresh();this.process()}ScrollSpy.VERSION='3.3.6';ScrollSpy.DEFAULTS={offset:10};ScrollSpy.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)};ScrollSpy.prototype.refresh=function(){var that=this;var offsetMethod='offset';var offsetBase=0;this.offsets=[];this.targets=[];this.scrollHeight=this.getScrollHeight();if(!$.isWindow(this.$scrollElement[0])){offsetMethod='position';offsetBase=this.$scrollElement.scrollTop()}this.$body.find(this.selector).map(function(){var $el=$(this);var href=$el.data('target')||$el.attr('href');var $href=/^#./.test(href)&&$(href);return($href&&$href.length&&$href.is(':visible')&&[[$href[offsetMethod]().top+offsetBase,href]])||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){that.offsets.push(this[0]);that.targets.push(this[1])})};ScrollSpy.prototype.process=function(){var scrollTop=this.$scrollElement.scrollTop()+this.options.offset;var scrollHeight=this.getScrollHeight();var maxScroll=this.options.offset+scrollHeight-this.$scrollElement.height();var offsets=this.offsets;var targets=this.targets;var activeTarget=this.activeTarget;var i;if(this.scrollHeight!=scrollHeight){this.refresh()}if(scrollTop>=maxScroll){return activeTarget!=(i=targets[targets.length-1])&&this.activate(i)}if(activeTarget&&scrollTop=offsets[i]&&(offsets[i+1]===undefined||scrollTop .active');var transition=callback&&$.support.transition&&($active.length&&$active.hasClass('fade')||!!container.find('> .fade').length);function next(){$active.removeClass('active').find('> .dropdown-menu > .active').removeClass('active').end().find('[data-toggle="tab"]').attr('aria-expanded',false);element.addClass('active').find('[data-toggle="tab"]').attr('aria-expanded',true);if(transition){element[0].offsetWidthelement.addClass('in')}else{element.removeClass('fade')}if(element.parent('.dropdown-menu').length){element.closest('li.dropdown').addClass('active').end().find('[data-toggle="tab"]').attr('aria-expanded',true)}callback&&callback()}$active.length&&transition?$active.one('bsTransitionEnd',next).emulateTransitionEnd(Tab.TRANSITION_DURATION):next();$active.removeClass('in')};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.tab');if(!data)$this.data('bs.tab',(data=new Tab(this)));if(typeof option=='string')data[option]()})}var old=$.fn.tab;$.fn.tab=Plugin;$.fn.tab.Constructor=Tab;$.fn.tab.noConflict=function(){$.fn.tab=old;return this};var clickHandler=function(e){e.preventDefault();Plugin.call($(this),'show')};$(document).on('click.bs.tab.data-api','[data-toggle="tab"]',clickHandler).on('click.bs.tab.data-api','[data-toggle="pill"]',clickHandler)}(jQuery);+function($){'use strict';var Affix=function(element,options){this.options=$.extend({},Affix.DEFAULTS,options);this.$target=$(this.options.target).on('scroll.bs.affix.data-api',$.proxy(this.checkPosition,this)).on('click.bs.affix.data-api',$.proxy(this.checkPositionWithEventLoop,this));this.$element=$(element);this.affixed=null;this.unpin=null;this.pinnedOffset=null;this.checkPosition()};Affix.VERSION='3.3.6';Affix.RESET='affix affix-top affix-bottom';Affix.DEFAULTS={offset:0,target:window};Affix.prototype.getState=function(scrollHeight,height,offsetTop,offsetBottom){var scrollTop=this.$target.scrollTop();var position=this.$element.offset();var targetHeight=this.$target.height();if(offsetTop!=null&&this.affixed=='top')return scrollTop=scrollHeight-offsetBottom))return'bottom';return false};Affix.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(Affix.RESET).addClass('affix');var scrollTop=this.$target.scrollTop();var position=this.$element.offset();return(this.pinnedOffset=position.top-scrollTop)};Affix.prototype.checkPositionWithEventLoop=function(){setTimeout($.proxy(this.checkPosition,this),1)};Affix.prototype.checkPosition=function(){if(!this.$element.is(':visible'))return;var height=this.$element.height();var offset=this.options.offset;var offsetTop=offset.top;var offsetBottom=offset.bottom;var scrollHeight=Math.max($(document).height(),$(document.body).height());if(typeof offset!='object')offsetBottom=offsetTop=offset;if(typeof offsetTop=='function')offsetTop=offset.top(this.$element);if(typeof offsetBottom=='function')offsetBottom=offset.bottom(this.$element);var affix=this.getState(scrollHeight,height,offsetTop,offsetBottom);if(this.affixed!=affix){if(this.unpin!=null)this.$element.css('top','');var affixType='affix'+(affix?'-'+affix:'');var e=$.Event(affixType+'.bs.affix');this.$element.trigger(e);if(e.isDefaultPrevented())return;this.affixed=affix;this.unpin=affix=='bottom'?this.getPinnedOffset():null;this.$element.removeClass(Affix.RESET).addClass(affixType).trigger(affixType.replace('affix','affixed')+'.bs.affix')}if(affix=='bottom'){this.$element.offset({top:scrollHeight-height-offsetBottom})}};function Plugin(option){return this.each(function(){var $this=$(this);var data=$this.data('bs.affix');var options=typeof option=='object'&&option;if(!data)$this.data('bs.affix',(data=new Affix(this,options)));if(typeof option=='string')data[option]()})}var old=$.fn.affix;$.fn.affix=Plugin;$.fn.affix.Constructor=Affix;$.fn.affix.noConflict=function(){$.fn.affix=old;return this};$(window).on('load',function(){$('[data-spy="affix"]').each(function(){var $spy=$(this);var data=$spy.data();data.offset=data.offset||{};if(data.offsetBottom!=null)data.offset.bottom=data.offsetBottom;if(data.offsetTop!=null)data.offset.top=data.offsetTop;Plugin.call($spy,data)})})}(jQuery); \ No newline at end of file diff --git a/public/lib/dom2img/dom-to-image.js b/public/lib/dom2img/dom-to-image.js new file mode 100644 index 0000000..1e53667 --- /dev/null +++ b/public/lib/dom2img/dom-to-image.js @@ -0,0 +1,782 @@ +(function (global) { + 'use strict'; + + var util = newUtil(); + var inliner = newInliner(); + var fontFaces = newFontFaces(); + var images = newImages(); + + // Default impl options + var defaultOptions = { + // Default is to fail on error, no placeholder + imagePlaceholder: undefined, + // Default cache bust is false, it will use the cache + cacheBust: false + }; + + var domtoimage = { + toSvg: toSvg, + toPng: toPng, + toJpeg: toJpeg, + toBlob: toBlob, + toPixelData: toPixelData, + impl: { + fontFaces: fontFaces, + images: images, + util: util, + inliner: inliner, + options: {} + } + }; + + + global.domtoimage = domtoimage; + + + /** + * @param {Node} node - The DOM Node object to render + * @param {Object} options - Rendering options + * @param {Function} options.filter - Should return true if passed node should be included in the output + * (excluding node means excluding it's children as well). Not called on the root node. + * @param {String} options.bgcolor - color for the background, any valid CSS color value. + * @param {Number} options.width - width to be applied to node before rendering. + * @param {Number} options.height - height to be applied to node before rendering. + * @param {Object} options.style - an object whose properties to be copied to node's style before rendering. + * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only), + defaults to 1.0. + * @param {String} options.imagePlaceholder - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch + * @param {Boolean} options.cacheBust - set to true to cache bust by appending the time to the request url + * @return {Promise} - A promise that is fulfilled with a SVG image data URL + * */ + function toSvg(node, options) { + options = options || {}; + copyOptions(options); + return Promise.resolve(node) + .then(function (node) { + return cloneNode(node, options.filter, true); + }) + .then(embedFonts) + .then(inlineImages) + .then(applyOptions) + .then(function (clone) { + return makeSvgDataUri(clone, + options.width || util.width(node), + options.height || util.height(node) + ); + }); + + function applyOptions(clone) { + if (options.bgcolor) clone.style.backgroundColor = options.bgcolor; + + if (options.width) clone.style.width = options.width + 'px'; + if (options.height) clone.style.height = options.height + 'px'; + + if (options.style) + Object.keys(options.style).forEach(function (property) { + clone.style[property] = options.style[property]; + }); + + return clone; + } + } + + /** + * @param {Node} node - The DOM Node object to render + * @param {Object} options - Rendering options, @see {@link toSvg} + * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data. + * */ + function toPixelData(node, options) { + return draw(node, options || {}) + .then(function (canvas) { + return canvas.getContext('2d').getImageData( + 0, + 0, + util.width(node), + util.height(node) + ).data; + }); + } + + /** + * @param {Node} node - The DOM Node object to render + * @param {Object} options - Rendering options, @see {@link toSvg} + * @return {Promise} - A promise that is fulfilled with a PNG image data URL + * */ + function toPng(node, options) { + return draw(node, options || {}) + .then(function (canvas) { + return canvas.toDataURL(); + }); + } + + /** + * @param {Node} node - The DOM Node object to render + * @param {Object} options - Rendering options, @see {@link toSvg} + * @return {Promise} - A promise that is fulfilled with a JPEG image data URL + * */ + function toJpeg(node, options) { + options = options || {}; + return draw(node, options) + .then(function (canvas) { + return canvas.toDataURL('image/jpeg', options.quality || 1.0); + }); + } + + /** + * @param {Node} node - The DOM Node object to render + * @param {Object} options - Rendering options, @see {@link toSvg} + * @return {Promise} - A promise that is fulfilled with a PNG image blob + * */ + function toBlob(node, options) { + return draw(node, options || {}) + .then(util.canvasToBlob); + } + + function copyOptions(options) { + // Copy options to impl options for use in impl + if (typeof (options.imagePlaceholder) === 'undefined') { + domtoimage.impl.options.imagePlaceholder = defaultOptions.imagePlaceholder; + } else { + domtoimage.impl.options.imagePlaceholder = options.imagePlaceholder; + } + + if (typeof (options.cacheBust) === 'undefined') { + domtoimage.impl.options.cacheBust = defaultOptions.cacheBust; + } else { + domtoimage.impl.options.cacheBust = options.cacheBust; + } + } + + function draw(domNode, options) { + return toSvg(domNode, options) + .then(util.makeImage) + .then(util.delay(100)) + .then(function (image) { + var canvas = newCanvas(domNode); + canvas.getContext('2d').drawImage(image, 0, 0); + return canvas; + }); + + function newCanvas(domNode) { + var canvas = document.createElement('canvas'); + canvas.width = options.width || util.width(domNode); + canvas.height = options.height || util.height(domNode); + + if (options.bgcolor) { + var ctx = canvas.getContext('2d'); + ctx.fillStyle = options.bgcolor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + } + + return canvas; + } + } + + function cloneNode(node, filter, root) { + if (!root && filter && !filter(node)) return Promise.resolve(); + + return Promise.resolve(node) + .then(makeNodeCopy) + .then(function (clone) { + return cloneChildren(node, clone, filter); + }) + .then(function (clone) { + return processClone(node, clone); + }); + + function makeNodeCopy(node) { + if (node instanceof HTMLCanvasElement) return util.makeImage(node.toDataURL()); + return node.cloneNode(false); + } + + function cloneChildren(original, clone, filter) { + var children = original.childNodes; + if (children.length === 0) return Promise.resolve(clone); + + return cloneChildrenInOrder(clone, util.asArray(children), filter) + .then(function () { + return clone; + }); + + function cloneChildrenInOrder(parent, children, filter) { + var done = Promise.resolve(); + children.forEach(function (child) { + done = done + .then(function () { + return cloneNode(child, filter); + }) + .then(function (childClone) { + if (childClone) parent.appendChild(childClone); + }); + }); + return done; + } + } + + function processClone(original, clone) { + if (!(clone instanceof Element)) return clone; + + return Promise.resolve() + .then(cloneStyle) + .then(clonePseudoElements) + .then(copyUserInput) + .then(fixSvg) + .then(function () { + return clone; + }); + + function cloneStyle() { + copyStyle(window.getComputedStyle(original), clone.style); + + function copyStyle(source, target) { + if (source.cssText) target.cssText = source.cssText; + else copyProperties(source, target); + + function copyProperties(source, target) { + util.asArray(source).forEach(function (name) { + target.setProperty( + name, + source.getPropertyValue(name), + source.getPropertyPriority(name) + ); + }); + } + } + } + + function clonePseudoElements() { + [':before', ':after'].forEach(function (element) { + clonePseudoElement(element); + }); + + function clonePseudoElement(element) { + var style = window.getComputedStyle(original, element); + var content = style.getPropertyValue('content'); + + if (content === '' || content === 'none') return; + + var className = util.uid(); + clone.className = clone.className + ' ' + className; + var styleElement = document.createElement('style'); + styleElement.appendChild(formatPseudoElementStyle(className, element, style)); + clone.appendChild(styleElement); + + function formatPseudoElementStyle(className, element, style) { + var selector = '.' + className + ':' + element; + var cssText = style.cssText ? formatCssText(style) : formatCssProperties(style); + return document.createTextNode(selector + '{' + cssText + '}'); + + function formatCssText(style) { + var content = style.getPropertyValue('content'); + return style.cssText + ' content: ' + content + ';'; + } + + function formatCssProperties(style) { + + return util.asArray(style) + .map(formatProperty) + .join('; ') + ';'; + + function formatProperty(name) { + return name + ': ' + + style.getPropertyValue(name) + + (style.getPropertyPriority(name) ? ' !important' : ''); + } + } + } + } + } + + function copyUserInput() { + if (original instanceof HTMLTextAreaElement) clone.innerHTML = original.value; + if (original instanceof HTMLInputElement) clone.setAttribute("value", original.value); + } + + function fixSvg() { + if (!(clone instanceof SVGElement)) return; + clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + + if (!(clone instanceof SVGRectElement)) return; + ['width', 'height'].forEach(function (attribute) { + var value = clone.getAttribute(attribute); + if (!value) return; + + clone.style.setProperty(attribute, value); + }); + } + } + } + + function embedFonts(node) { + return fontFaces.resolveAll() + .then(function (cssText) { + var styleNode = document.createElement('style'); + node.appendChild(styleNode); + styleNode.appendChild(document.createTextNode(cssText)); + return node; + }); + } + + function inlineImages(node) { + return images.inlineAll(node) + .then(function () { + return node; + }); + } + + function makeSvgDataUri(node, width, height) { + return Promise.resolve(node) + .then(function (node) { + node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); + return new XMLSerializer().serializeToString(node); + }) + .then(util.escapeXhtml) + .then(function (xhtml) { + return '' + xhtml + ''; + }) + .then(function (foreignObject) { + return '' + + foreignObject + ''; + }) + .then(function (svg) { + return 'data:image/svg+xml;charset=utf-8,' + svg; + }); + } + + function newUtil() { + return { + escape: escape, + parseExtension: parseExtension, + mimeType: mimeType, + dataAsUrl: dataAsUrl, + isDataUrl: isDataUrl, + canvasToBlob: canvasToBlob, + resolveUrl: resolveUrl, + getAndEncode: getAndEncode, + uid: uid(), + delay: delay, + asArray: asArray, + escapeXhtml: escapeXhtml, + makeImage: makeImage, + width: width, + height: height + }; + + function mimes() { + /* + * Only WOFF and EOT mime types for fonts are 'real' + * see http://www.iana.org/assignments/media-types/media-types.xhtml + */ + var WOFF = 'application/font-woff'; + var JPEG = 'image/jpeg'; + + return { + 'woff': WOFF, + 'woff2': WOFF, + 'ttf': 'application/font-truetype', + 'eot': 'application/vnd.ms-fontobject', + 'png': 'image/png', + 'jpg': JPEG, + 'jpeg': JPEG, + 'gif': 'image/gif', + 'tiff': 'image/tiff', + 'svg': 'image/svg+xml' + }; + } + + function parseExtension(url) { + var match = /\.([^\.\/]*?)$/g.exec(url); + if (match) return match[1]; + else return ''; + } + + function mimeType(url) { + var extension = parseExtension(url).toLowerCase(); + return mimes()[extension] || ''; + } + + function isDataUrl(url) { + return url.search(/^(data:)/) !== -1; + } + + function toBlob(canvas) { + return new Promise(function (resolve) { + var binaryString = window.atob(canvas.toDataURL().split(',')[1]); + var length = binaryString.length; + var binaryArray = new Uint8Array(length); + + for (var i = 0; i < length; i++) + binaryArray[i] = binaryString.charCodeAt(i); + + resolve(new Blob([binaryArray], { + type: 'image/png' + })); + }); + } + + function canvasToBlob(canvas) { + if (canvas.toBlob) + return new Promise(function (resolve) { + canvas.toBlob(resolve); + }); + + return toBlob(canvas); + } + + function resolveUrl(url, baseUrl) { + var doc = document.implementation.createHTMLDocument(); + var base = doc.createElement('base'); + doc.head.appendChild(base); + var a = doc.createElement('a'); + doc.body.appendChild(a); + base.href = baseUrl; + a.href = url; + return a.href; + } + + function uid() { + var index = 0; + + return function () { + return 'u' + fourRandomChars() + index++; + + function fourRandomChars() { + /* see http://stackoverflow.com/a/6248722/2519373 */ + return ('0000' + (Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4); + } + }; + } + + function makeImage(uri) { + return new Promise(function (resolve, reject) { + var image = new Image(); + image.crossOrigin = "*"; + image.onload = function () { + resolve(image); + }; + image.onerror = reject; + image.src = uri; + }); + } + + function getAndEncode(url) { + var TIMEOUT = 100000; + if (domtoimage.impl.options.cacheBust) { + // Cache bypass so we dont have CORS issues with cached images + // Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache + url += ((/\?/).test(url) ? "&" : "?") + (new Date()).getTime(); + } + + //走代理,瓦片地图导出需要服务允许跨域 + if (url.startsWith("http") && url.indexOf(location.hostname) == -1) { + if (domtoimage.proxy) { + url = domtoimage.proxy(url); //回调方法,在该方法内部处理逻辑 + } + else if (domtoimage.preUrl) { + url = domtoimage.preUrl + url; + } + } + + + + + return new Promise(function (resolve) { + var request = new XMLHttpRequest(); + request.onreadystatechange = done; + request.ontimeout = timeout; + + request.responseType = 'blob'; + request.timeout = TIMEOUT; + request.open('GET', url, true); + //request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + request.send(); + + var placeholder; + if (domtoimage.impl.options.imagePlaceholder) { + var split = domtoimage.impl.options.imagePlaceholder.split(/,/); + if (split && split[1]) { + placeholder = split[1]; + } + } + + function done() { + if (request.readyState !== 4) return; + + if (request.status !== 200) {//404错误 + if (placeholder) { + resolve(placeholder); + } else { + fail('无法获取资源: ' + url + ', 状态: ' + request.status); + } + } + else { + var encoder = new FileReader(); + encoder.onloadend = function () { + var content = encoder.result.split(/,/)[1]; + resolve(content); + }; + encoder.readAsDataURL(request.response); + } + } + + function timeout() { + if (placeholder) { + resolve(placeholder); + } else { + fail('抓取资源时发生超时(' + TIMEOUT + 'ms): ' + url); + } + } + + function fail(message) { + console.log(message); + resolve('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMwAov9iAAKCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg=='); + } + }); + } + + function dataAsUrl(content, type) { + return 'data:' + type + ';base64,' + content; + } + + function escape(string) { + return string.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1'); + } + + function delay(ms) { + return function (arg) { + return new Promise(function (resolve) { + setTimeout(function () { + resolve(arg); + }, ms); + }); + }; + } + + function asArray(arrayLike) { + var array = []; + var length = arrayLike.length; + for (var i = 0; i < length; i++) array.push(arrayLike[i]); + return array; + } + + function escapeXhtml(string) { + return string.replace(/#/g, '%23').replace(/\n/g, '%0A'); + } + + function width(node) { + var leftBorder = px(node, 'border-left-width'); + var rightBorder = px(node, 'border-right-width'); + + return node.scrollWidth + leftBorder + rightBorder; + } + + function height(node) { + var topBorder = px(node, 'border-top-width'); + var bottomBorder = px(node, 'border-bottom-width'); + return node.scrollHeight + topBorder + bottomBorder; + } + + function px(node, styleProperty) { + var value = window.getComputedStyle(node).getPropertyValue(styleProperty); + return parseFloat(value.replace('px', '')); + } + } + + function newInliner() { + var URL_REGEX = /url\(['"]?([^'"]+?)['"]?\)/g; + + return { + inlineAll: inlineAll, + shouldProcess: shouldProcess, + impl: { + readUrls: readUrls, + inline: inline + } + }; + + function shouldProcess(string) { + return string.search(URL_REGEX) !== -1; + } + + function readUrls(string) { + var result = []; + var match; + while ((match = URL_REGEX.exec(string)) !== null) { + result.push(match[1]); + } + return result.filter(function (url) { + return !util.isDataUrl(url); + }); + } + + function inline(string, url, baseUrl, get) { + return Promise.resolve(url) + .then(function (url) { + return baseUrl ? util.resolveUrl(url, baseUrl) : url; + }) + .then(get || util.getAndEncode) + .then(function (data) { + return util.dataAsUrl(data, util.mimeType(url)); + }) + .then(function (dataUrl) { + return string.replace(urlAsRegex(url), '$1' + dataUrl + '$3'); + }); + + function urlAsRegex(url) { + return new RegExp('(url\\([\'"]?)(' + util.escape(url) + ')([\'"]?\\))', 'g'); + } + } + + function inlineAll(string, baseUrl, get) { + if (nothingToInline()) return Promise.resolve(string); + + return Promise.resolve(string) + .then(readUrls) + .then(function (urls) { + var done = Promise.resolve(string); + urls.forEach(function (url) { + done = done.then(function (string) { + return inline(string, url, baseUrl, get); + }); + }); + return done; + }); + + function nothingToInline() { + return !shouldProcess(string); + } + } + } + + function newFontFaces() { + return { + resolveAll: resolveAll, + impl: { + readAll: readAll + } + }; + + function resolveAll() { + return readAll(document) + .then(function (webFonts) { + return Promise.all( + webFonts.map(function (webFont) { + return webFont.resolve(); + }) + ); + }) + .then(function (cssStrings) { + return cssStrings.join('\n'); + }); + } + + function readAll() { + return Promise.resolve(util.asArray(document.styleSheets)) + .then(getCssRules) + .then(selectWebFontRules) + .then(function (rules) { + return rules.map(newWebFont); + }); + + function selectWebFontRules(cssRules) { + return cssRules + .filter(function (rule) { + return rule.type === CSSRule.FONT_FACE_RULE; + }) + .filter(function (rule) { + return inliner.shouldProcess(rule.style.getPropertyValue('src')); + }); + } + + function getCssRules(styleSheets) { + var cssRules = []; + styleSheets.forEach(function (sheet) { + try { + util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules)); + } catch (e) { + console.log('Error while reading CSS rules from ' + sheet.href, e.toString()); + } + }); + return cssRules; + } + + function newWebFont(webFontRule) { + return { + resolve: function resolve() { + var baseUrl = (webFontRule.parentStyleSheet || {}).href; + return inliner.inlineAll(webFontRule.cssText, baseUrl); + }, + src: function () { + return webFontRule.style.getPropertyValue('src'); + } + }; + } + } + } + + function newImages() { + return { + inlineAll: inlineAll, + impl: { + newImage: newImage + } + }; + + function newImage(element) { + return { + inline: inline + }; + + function inline(get) { + if (util.isDataUrl(element.src)) return Promise.resolve(); + + return Promise.resolve(element.src) + .then(get || util.getAndEncode) + .then(function (data) { + return util.dataAsUrl(data, util.mimeType(element.src)); + }) + .then(function (dataUrl) { + return new Promise(function (resolve, reject) { + element.onload = resolve; + element.onerror = reject; + element.src = dataUrl; + }); + }); + } + } + + function inlineAll(node) { + if (!(node instanceof Element)) return Promise.resolve(node); + + return inlineBackground(node) + .then(function () { + if (node instanceof HTMLImageElement) + return newImage(node).inline(); + else + return Promise.all( + util.asArray(node.childNodes).map(function (child) { + return inlineAll(child); + }) + ); + }); + + function inlineBackground(node) { + var background = node.style.getPropertyValue('background'); + + if (!background) return Promise.resolve(node); + + return inliner.inlineAll(background) + .then(function (inlined) { + node.style.setProperty( + 'background', + inlined, + node.style.getPropertyPriority('background') + ); + }) + .then(function () { + return node; + }); + } + } + } +})(window); diff --git a/public/lib/echarts/README.md b/public/lib/echarts/README.md new file mode 100644 index 0000000..ab73523 --- /dev/null +++ b/public/lib/echarts/README.md @@ -0,0 +1,11 @@ +#echarts 百度团队开发的一款商业级数据图表 + + +github地址:https://github.com/ecomfe/echarts +中文文档:http://echarts.baidu.com/index.html + +本地版本: 3 +更新日期: + +介绍: + 提供商业产品常用图表库,底层基于ZRender,创建了坐标系,图例,提示,工具箱等基础组件,并在此上构出折线图(区域图),柱状图(条状图),散点图(气泡图),饼图(环形图),K线图,地图,和弦图以及力导向布局图,同时支持任意维度的堆积和多图表混合展现。 \ No newline at end of file diff --git a/public/lib/echarts/dark.js b/public/lib/echarts/dark.js new file mode 100644 index 0000000..6220436 --- /dev/null +++ b/public/lib/echarts/dark.js @@ -0,0 +1,518 @@ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + }; + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + echarts.registerTheme('dark', { + "color": [ + "rgba(14,227,247,1)", + "#ff715e", + "#ffee51", + "#54e66b", + "#715c87" + ], + "backgroundColor": "rgba(64,64,64,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#ffaf51" + }, + "subtextStyle": { + "color": "#eeeeee" + } + }, + "line": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "3" + } + }, + "symbolSize": "8", + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z", + "smooth": false + }, + "radar": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "3" + } + }, + "symbolSize": "8", + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z", + "smooth": false + }, + "bar": { + "itemStyle": { + "normal": { + "barBorderWidth": "0", + "barBorderColor": "#ccc" + }, + "emphasis": { + "barBorderWidth": "0", + "barBorderColor": "#ccc" + } + } + }, + "pie": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "scatter": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "boxplot": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "parallel": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "sankey": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "funnel": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "gauge": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z" + }, + "candlestick": { + "itemStyle": { + "normal": { + "color": "#ffee51", + "color0": "#ffffff", + "borderColor": "#ff715e", + "borderColor0": "#797fba", + "borderWidth": "1" + } + } + }, + "graph": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#ccc" + } + }, + "lineStyle": { + "normal": { + "width": "1", + "color": "#888888" + } + }, + "symbolSize": "8", + "symbol": "path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z", + "smooth": false, + "color": [ + "rgba(14,227,247,1)", + "#ff715e", + "#ffee51", + "#54e66b", + "#715c87" + ], + "label": { + "normal": { + "textStyle": { + "color": "#333333" + } + } + } + }, + "map": { + "itemStyle": { + "normal": { + "areaColor": "#555555", + "borderColor": "#999999", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "rgba(255,175,81,0.5)", + "borderColor": "#ffaf51", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#ffffff" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(255,238,81)" + } + } + } + }, + "geo": { + "itemStyle": { + "normal": { + "areaColor": "#555555", + "borderColor": "#999999", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "rgba(255,175,81,0.5)", + "borderColor": "#ffaf51", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#ffffff" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(255,238,81)" + } + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#666666" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#eeeeee" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#555555" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#666666" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#eeeeee" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#555555" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#666666" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#eeeeee" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#555555" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#666666" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#eeeeee" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#555555" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "normal": { + "borderColor": "#999999" + }, + "emphasis": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#cccccc" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#ffaf51", + "width": 1 + }, + "itemStyle": { + "normal": { + "color": "#ffaf51", + "borderWidth": 1 + }, + "emphasis": { + "color": "#ffaf51" + } + }, + "controlStyle": { + "normal": { + "color": "#ffaf51", + "borderColor": "#ffaf51", + "borderWidth": 0.5 + }, + "emphasis": { + "color": "#ffaf51", + "borderColor": "#ffaf51", + "borderWidth": 0.5 + } + }, + "checkpointStyle": { + "color": "#ff715e", + "borderColor": "rgba(255,113,94,0.4)" + }, + "label": { + "normal": { + "textStyle": { + "color": "#ff715e" + } + }, + "emphasis": { + "textStyle": { + "color": "#ff715e" + } + } + } + }, + "visualMap": { + "color": [ + "#ff715e", + "#ffee51", + "#797fba" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(255,255,255,0)", + "dataBackgroundColor": "rgba(222,222,222,1)", + "fillerColor": "rgba(255,113,94,0.2)", + "handleColor": "#cccccc", + "handleSize": "100%", + "textStyle": { + "color": "#999999" + } + }, + "markPoint": { + "label": { + "normal": { + "textStyle": { + "color": "#333333" + } + }, + "emphasis": { + "textStyle": { + "color": "#333333" + } + } + } + } + }); +})); diff --git a/public/lib/echarts/echarts-gl.min.js b/public/lib/echarts/echarts-gl.min.js new file mode 100644 index 0000000..8d6fd8f --- /dev/null +++ b/public/lib/echarts/echarts-gl.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("echarts")):"function"==typeof define&&define.amd?define(["echarts"],t):"object"==typeof exports?exports["echarts-gl"]=t(require("echarts")):e["echarts-gl"]=t(e.echarts)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=106)}([function(t,r){t.exports=e},function(e,t,r){"use strict";function n(e){return!e||"none"===e}function i(e){return e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof Image}function a(e){return e.getZr&&e.setOption}function o(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}function s(e){if((e.wrapS===c.a.REPEAT||e.wrapT===c.a.REPEAT)&&e.image){var t=o(e.width),r=o(e.height);if(t!==e.width||r!==e.height){var n=document.createElement("canvas");n.width=t,n.height=r;n.getContext("2d").drawImage(e.image,0,0,t,r),e.image=n}}}var u=r(40),l=r(52),h=r(5),c=r(4),d=r(8),f=r(19),p=r(35),m=r(15),g=r(0),_=r.n(g),v=r(36),y=r(60),x=r.n(y),T=r(61),b=r(124),w=r(125),E=r(129),S=r(130),A=r(2),M=r(132),C=r(43),L=r(76),D=r(133),N=r(134),R=r(135),P=r(136),I=r(41),O=r(37),F=r(26),B=r(3),U=r(137),z=r(56),G=r(138),H=r(139),V=r(140),k=r(9),W=r(74),j=r(54),X=r(18),q=r(59),Z=r(141),Y=r(146),K=r(71),Q=r(147),J=r(148),$=r(149),ee=r(150),te=r(151),re=r(152);_.a.util.extend(p.a.prototype,Z.a),d.a.import(Y.a),d.a.import(K.a),d.a.import(Q.a),d.a.import(J.a),d.a.import($.a),d.a.import(ee.a),d.a.import(te.a),d.a.import(re.a);var ne=v.a.prototype.addToScene,ie=v.a.prototype.removeFromScene;v.a.prototype.addToScene=function(e){if(ne.call(this,e),this.__zr){var t=this.__zr;e.traverse(function(e){e.__zr=t,e.addAnimatorsToZr&&e.addAnimatorsToZr(t)})}},v.a.prototype.removeFromScene=function(e){ie.call(this,e),e.traverse(function(e){var t=e.__zr;e.__zr=null,t&&e.removeAnimatorsFromZr&&e.removeAnimatorsFromZr(t)})},f.a.prototype.setTextureImage=function(e,t,r,i){if(this.shader){var a,o=r.getZr(),s=this;return s.autoUpdateTextureStatus=!1,s.disableTexture(e),n(t)||(a=ae.loadTexture(t,r,i,function(t){s.enableTexture(e),o&&o.refresh()}),s.set(e,a)),a}};var ae={};ae.Renderer=l.a,ae.Node=p.a,ae.Mesh=u.a,ae.Shader=d.a,ae.Material=f.a,ae.Texture=c.a,ae.Texture2D=h.a,ae.Geometry=m.a,ae.SphereGeometry=M.a,ae.PlaneGeometry=C.a,ae.CubeGeometry=L.a,ae.AmbientLight=D.a,ae.DirectionalLight=N.a,ae.PointLight=R.a,ae.SpotLight=P.a,ae.PerspectiveCamera=I.a,ae.OrthographicCamera=O.a,ae.Vector2=F.a,ae.Vector3=B.a,ae.Vector4=U.a,ae.Quaternion=z.a,ae.Matrix2=G.a,ae.Matrix2d=H.a,ae.Matrix3=V.a,ae.Matrix4=k.a,ae.Plane=W.a,ae.Ray=j.a,ae.BoundingBox=X.a,ae.Frustum=q.a;var oe=T.a.createBlank("rgba(255,255,255,0)").image;ae.loadTexture=function(e,t,r,n){"function"==typeof r&&(n=r,r={}),r=r||{};for(var o=Object.keys(r).sort(),u="",l=0;l3?t[3]=e[3]:t[3]=1,t):(t=_.a.color.parse(e||"#000",t)||[0,0,0,0],t[0]/=255,t[1]/=255,t[2]/=255,t)},ae.directionFromAlphaBeta=function(e,t){var r=e/180*Math.PI+Math.PI/2,n=-t/180*Math.PI+Math.PI/2,i=[],a=Math.sin(r);return i[0]=a*Math.cos(n),i[1]=-Math.cos(r),i[2]=a*Math.sin(n),i},ae.getShadowResolution=function(e){var t=1024;switch(e){case"low":t=512;break;case"medium":break;case"high":t=2048;break;case"ultra":t=4096}return t},ae.COMMON_SHADERS=["lambert","color","realistic","hatching"],ae.createShader=function(e){var t=d.a.source(e+".vertex"),r=d.a.source(e+".fragment");t||console.error("Vertex shader of '%s' not exits",e),r||console.error("Fragment shader of '%s' not exits",e);var n=new d.a(t,r);return n.name=e,n},ae.createMaterial=function(e,t){t instanceof Array||(t=[t]);var r=ae.createShader(e),n=new f.a({shader:r});return t.forEach(function(e){"string"==typeof e&&n.define(e)}),n},ae.setMaterialFromModel=function(e,t,r,n){t.autoUpdateTextureStatus=!1;var i=r.getModel(e+"Material"),a=i.get("detailTexture"),o=A.a.firstNotNull(i.get("textureTiling"),1),s=A.a.firstNotNull(i.get("textureOffset"),0);"number"==typeof o&&(o=[o,o]),"number"==typeof s&&(s=[s,s]);var u=o[0]>1||o[1]>1?ae.Texture.REPEAT:ae.Texture.CLAMP_TO_EDGE,l={anisotropic:8,wrapS:u,wrapT:u};if("realistic"===e){var h=i.get("roughness"),c=i.get("metalness");null!=c?isNaN(c)&&(t.setTextureImage("metalnessMap",c,n,l),c=A.a.firstNotNull(i.get("metalnessAdjust"),.5)):c=0,null!=h?isNaN(h)&&(t.setTextureImage("roughnessMap",h,n,l),h=A.a.firstNotNull(i.get("roughnessAdjust"),.5)):h=.5;var d=i.get("normalTexture");t.setTextureImage("detailMap",a,n,l),t.setTextureImage("normalMap",d,n,l),t.set({roughness:h,metalness:c,detailUvRepeat:o,detailUvOffset:s})}else if("lambert"===e)t.setTextureImage("detailMap",a,n,l),t.set({detailUvRepeat:o,detailUvOffset:s});else if("color"===e)t.setTextureImage("detailMap",a,n,l),t.set({detailUvRepeat:o,detailUvOffset:s});else if("hatching"===e){for(var f=i.get("hatchingTextures")||[],p=0;p<6;p++)t.setTextureImage("hatch"+(p+1),f[p],n,{anisotropic:8,wrapS:ae.Texture.REPEAT,wrapT:ae.Texture.REPEAT});t.set({detailUvRepeat:o,detailUvOffset:s})}},ae.updateVertexAnimation=function(e,t,r,n){var i=n.get("animation"),a=n.get("animationDurationUpdate"),o=n.get("animationEasingUpdate"),s=r.shadowDepthMaterial;if(i&&t&&a>0&&t.geometry.vertexCount===r.geometry.vertexCount){r.material.define("vertex","VERTEX_ANIMATION"),r.ignorePreZ=!0,s&&s.define("vertex","VERTEX_ANIMATION");for(var u=0;ur?r:e}var i=r(12),a=function(e,t,r){e=e||0,t=t||0,r=r||0,this.array=i.a.fromValues(e,t,r),this._dirty=!0};a.prototype={constructor:a,add:function(e){return i.a.add(this.array,this.array,e.array),this._dirty=!0,this},set:function(e,t,r){return this.array[0]=e,this.array[1]=t,this.array[2]=r,this._dirty=!0,this},setArray:function(e){return this.array[0]=e[0],this.array[1]=e[1],this.array[2]=e[2],this._dirty=!0,this},clone:function(){return new a(this.x,this.y,this.z)},copy:function(e){return i.a.copy(this.array,e.array),this._dirty=!0,this},cross:function(e,t){return i.a.cross(this.array,e.array,t.array),this._dirty=!0,this},dist:function(e){return i.a.dist(this.array,e.array)},distance:function(e){return i.a.distance(this.array,e.array)},div:function(e){return i.a.div(this.array,this.array,e.array),this._dirty=!0,this},divide:function(e){return i.a.divide(this.array,this.array,e.array),this._dirty=!0,this},dot:function(e){return i.a.dot(this.array,e.array)},len:function(){return i.a.len(this.array)},length:function(){return i.a.length(this.array)},lerp:function(e,t,r){return i.a.lerp(this.array,e.array,t.array,r),this._dirty=!0,this},min:function(e){return i.a.min(this.array,this.array,e.array),this._dirty=!0,this},max:function(e){return i.a.max(this.array,this.array,e.array),this._dirty=!0,this},mul:function(e){return i.a.mul(this.array,this.array,e.array),this._dirty=!0,this},multiply:function(e){return i.a.multiply(this.array,this.array,e.array),this._dirty=!0,this},negate:function(){return i.a.negate(this.array,this.array),this._dirty=!0,this},normalize:function(){return i.a.normalize(this.array,this.array),this._dirty=!0,this},random:function(e){return i.a.random(this.array,e),this._dirty=!0,this},scale:function(e){return i.a.scale(this.array,this.array,e),this._dirty=!0,this},scaleAndAdd:function(e,t){return i.a.scaleAndAdd(this.array,this.array,e.array,t),this._dirty=!0,this},sqrDist:function(e){return i.a.sqrDist(this.array,e.array)},squaredDistance:function(e){return i.a.squaredDistance(this.array,e.array)},sqrLen:function(){return i.a.sqrLen(this.array)},squaredLength:function(){return i.a.squaredLength(this.array)},sub:function(e){return i.a.sub(this.array,this.array,e.array),this._dirty=!0,this},subtract:function(e){return i.a.subtract(this.array,this.array,e.array),this._dirty=!0,this},transformMat3:function(e){return i.a.transformMat3(this.array,this.array,e.array),this._dirty=!0,this},transformMat4:function(e){return i.a.transformMat4(this.array,this.array,e.array),this._dirty=!0,this},transformQuat:function(e){return i.a.transformQuat(this.array,this.array,e.array),this._dirty=!0,this},applyProjection:function(e){var t=this.array;if(e=e.array,0===e[15]){var r=-1/t[2];t[0]=e[0]*t[0]*r,t[1]=e[5]*t[1]*r,t[2]=(e[10]*t[2]+e[14])*r}else t[0]=e[0]*t[0]+e[12],t[1]=e[5]*t[1]+e[13],t[2]=e[10]*t[2]+e[14];return this._dirty=!0,this},eulerFromQuat:function(e,t){a.eulerFromQuat(this,e,t)},eulerFromMat3:function(e,t){a.eulerFromMat3(this,e,t)},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}};var o=Object.defineProperty;if(o){var s=a.prototype;o(s,"x",{get:function(){return this.array[0]},set:function(e){this.array[0]=e,this._dirty=!0}}),o(s,"y",{get:function(){return this.array[1]},set:function(e){this.array[1]=e,this._dirty=!0}}),o(s,"z",{get:function(){return this.array[2]},set:function(e){this.array[2]=e,this._dirty=!0}})}a.add=function(e,t,r){return i.a.add(e.array,t.array,r.array),e._dirty=!0,e},a.set=function(e,t,r,n){i.a.set(e.array,t,r,n),e._dirty=!0},a.copy=function(e,t){return i.a.copy(e.array,t.array),e._dirty=!0,e},a.cross=function(e,t,r){return i.a.cross(e.array,t.array,r.array),e._dirty=!0,e},a.dist=function(e,t){return i.a.distance(e.array,t.array)},a.distance=a.dist,a.div=function(e,t,r){return i.a.divide(e.array,t.array,r.array),e._dirty=!0,e},a.divide=a.div,a.dot=function(e,t){return i.a.dot(e.array,t.array)},a.len=function(e){return i.a.length(e.array)},a.lerp=function(e,t,r,n){return i.a.lerp(e.array,t.array,r.array,n),e._dirty=!0,e},a.min=function(e,t,r){return i.a.min(e.array,t.array,r.array),e._dirty=!0,e},a.max=function(e,t,r){return i.a.max(e.array,t.array,r.array),e._dirty=!0,e},a.mul=function(e,t,r){return i.a.multiply(e.array,t.array,r.array),e._dirty=!0,e},a.multiply=a.mul,a.negate=function(e,t){return i.a.negate(e.array,t.array),e._dirty=!0,e},a.normalize=function(e,t){return i.a.normalize(e.array,t.array),e._dirty=!0,e},a.random=function(e,t){return i.a.random(e.array,t),e._dirty=!0,e},a.scale=function(e,t,r){return i.a.scale(e.array,t.array,r),e._dirty=!0,e},a.scaleAndAdd=function(e,t,r,n){return i.a.scaleAndAdd(e.array,t.array,r.array,n),e._dirty=!0,e},a.sqrDist=function(e,t){return i.a.sqrDist(e.array,t.array)},a.squaredDistance=a.sqrDist,a.sqrLen=function(e){return i.a.sqrLen(e.array)},a.squaredLength=a.sqrLen,a.sub=function(e,t,r){return i.a.subtract(e.array,t.array,r.array),e._dirty=!0,e},a.subtract=a.sub,a.transformMat3=function(e,t,r){return i.a.transformMat3(e.array,t.array,r.array),e._dirty=!0,e},a.transformMat4=function(e,t,r){return i.a.transformMat4(e.array,t.array,r.array),e._dirty=!0,e},a.transformQuat=function(e,t,r){return i.a.transformQuat(e.array,t.array,r.array),e._dirty=!0,e};var u=Math.atan2,l=Math.asin,h=Math.abs;a.eulerFromQuat=function(e,t,r){e._dirty=!0,t=t.array;var i=e.array,a=t[0],o=t[1],s=t[2],h=t[3],c=a*a,d=o*o,f=s*s,p=h*h,r=(r||"XYZ").toUpperCase();switch(r){case"XYZ":i[0]=u(2*(a*h-o*s),p-c-d+f),i[1]=l(n(2*(a*s+o*h),-1,1)),i[2]=u(2*(s*h-a*o),p+c-d-f);break;case"YXZ":i[0]=l(n(2*(a*h-o*s),-1,1)),i[1]=u(2*(a*s+o*h),p-c-d+f),i[2]=u(2*(a*o+s*h),p-c+d-f);break;case"ZXY":i[0]=l(n(2*(a*h+o*s),-1,1)),i[1]=u(2*(o*h-s*a),p-c-d+f),i[2]=u(2*(s*h-a*o),p-c+d-f);break;case"ZYX":i[0]=u(2*(a*h+s*o),p-c-d+f),i[1]=l(n(2*(o*h-a*s),-1,1)),i[2]=u(2*(a*o+s*h),p+c-d-f);break;case"YZX":i[0]=u(2*(a*h-s*o),p-c+d-f),i[1]=u(2*(o*h-a*s),p+c-d-f),i[2]=l(n(2*(a*o+s*h),-1,1));break;case"XZY":i[0]=u(2*(a*h+o*s),p-c+d-f),i[1]=u(2*(a*s+o*h),p+c-d-f),i[2]=l(n(2*(s*h-a*o),-1,1));break;default:console.warn("Unkown order: "+r)}return e},a.eulerFromMat3=function(e,t,r){var i=t.array,a=i[0],o=i[3],s=i[6],c=i[1],d=i[4],f=i[7],p=i[2],m=i[5],g=i[8],_=e.array,r=(r||"XYZ").toUpperCase();switch(r){case"XYZ":_[1]=l(n(s,-1,1)),h(s)<.99999?(_[0]=u(-f,g),_[2]=u(-o,a)):(_[0]=u(m,d),_[2]=0);break;case"YXZ":_[0]=l(-n(f,-1,1)),h(f)<.99999?(_[1]=u(s,g),_[2]=u(c,d)):(_[1]=u(-p,a),_[2]=0);break;case"ZXY":_[0]=l(n(m,-1,1)),h(m)<.99999?(_[1]=u(-p,g),_[2]=u(-o,d)):(_[1]=0,_[2]=u(c,a));break;case"ZYX":_[1]=l(-n(p,-1,1)),h(p)<.99999?(_[0]=u(m,g),_[2]=u(c,a)):(_[0]=0,_[2]=u(-o,d));break;case"YZX":_[2]=l(n(c,-1,1)),h(c)<.99999?(_[0]=u(-f,d),_[1]=u(-p,a)):(_[0]=0,_[1]=u(s,g));break;case"XZY":_[2]=l(-n(o,-1,1)),h(o)<.99999?(_[0]=u(m,d),_[1]=u(s,a)):(_[0]=u(-f,g),_[1]=0);break;default:console.warn("Unkown order: "+r)}return e._dirty=!0,e},Object.defineProperties(a,{POSITIVE_X:{get:function(){return new a(1,0,0)}},NEGATIVE_X:{get:function(){return new a(-1,0,0)}},POSITIVE_Y:{get:function(){return new a(0,1,0)}},NEGATIVE_Y:{get:function(){return new a(0,-1,0)}},POSITIVE_Z:{get:function(){return new a(0,0,1)}},NEGATIVE_Z:{get:function(){return new a(0,0,-1)}},UP:{get:function(){return new a(0,1,0)}},ZERO:{get:function(){return new a}}}),t.a=a},function(e,t,r){"use strict";var n=r(7),i=r(11),a=r(57),o=n.a.extend({width:512,height:512,type:i.a.UNSIGNED_BYTE,format:i.a.RGBA,wrapS:i.a.REPEAT,wrapT:i.a.REPEAT,minFilter:i.a.LINEAR_MIPMAP_LINEAR,magFilter:i.a.LINEAR,useMipmap:!0,anisotropic:1,flipY:!0,sRGB:!0,unpackAlignment:4,premultiplyAlpha:!1,dynamic:!1,NPOT:!1,__used:0},function(){this._cache=new a.a},{getWebGLTexture:function(e){var t=e.gl,r=this._cache;return r.use(e.__uid__),r.miss("webgl_texture")&&r.put("webgl_texture",t.createTexture()),this.dynamic?this.update(e):r.isDirty()&&(this.update(e),r.fresh()),r.get("webgl_texture")},bind:function(){},unbind:function(){},dirty:function(){this._cache&&this._cache.dirtyAll()},update:function(e){},updateCommon:function(e){var t=e.gl;t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,this.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,this.unpackAlignment),this.format===i.a.DEPTH_COMPONENT&&(this.useMipmap=!1);var r=e.getGLExtension("EXT_sRGB");this.format!==o.SRGB||r||(this.format=o.RGB),this.format!==o.SRGB_ALPHA||r||(this.format=o.RGBA),this.NPOT=!this.isPowerOfTwo()},getAvailableWrapS:function(){return this.NPOT?i.a.CLAMP_TO_EDGE:this.wrapS},getAvailableWrapT:function(){return this.NPOT?i.a.CLAMP_TO_EDGE:this.wrapT},getAvailableMinFilter:function(){var e=this.minFilter;return this.NPOT||!this.useMipmap?e===i.a.NEAREST_MIPMAP_NEAREST||e===i.a.NEAREST_MIPMAP_LINEAR?i.a.NEAREST:e===i.a.LINEAR_MIPMAP_LINEAR||e===i.a.LINEAR_MIPMAP_NEAREST?i.a.LINEAR:e:e},getAvailableMagFilter:function(){return this.magFilter},nextHighestPowerOfTwo:function(e){--e;for(var t=1;t<32;t<<=1)e|=e>>t;return e+1},dispose:function(e){var t=this._cache;t.use(e.__uid__);var r=t.get("webgl_texture");r&&e.gl.deleteTexture(r),t.deleteContext(e.__uid__)},isRenderable:function(){},isPowerOfTwo:function(){}});Object.defineProperty(o.prototype,"width",{get:function(){return this._width},set:function(e){this._width=e}}),Object.defineProperty(o.prototype,"height",{get:function(){return this._height},set:function(e){this._height=e}}),o.BYTE=i.a.BYTE,o.UNSIGNED_BYTE=i.a.UNSIGNED_BYTE,o.SHORT=i.a.SHORT,o.UNSIGNED_SHORT=i.a.UNSIGNED_SHORT,o.INT=i.a.INT,o.UNSIGNED_INT=i.a.UNSIGNED_INT,o.FLOAT=i.a.FLOAT,o.HALF_FLOAT=36193,o.UNSIGNED_INT_24_8_WEBGL=34042,o.DEPTH_COMPONENT=i.a.DEPTH_COMPONENT,o.DEPTH_STENCIL=i.a.DEPTH_STENCIL,o.ALPHA=i.a.ALPHA,o.RGB=i.a.RGB,o.RGBA=i.a.RGBA,o.LUMINANCE=i.a.LUMINANCE,o.LUMINANCE_ALPHA=i.a.LUMINANCE_ALPHA,o.SRGB=35904,o.SRGB_ALPHA=35906,o.COMPRESSED_RGB_S3TC_DXT1_EXT=33776,o.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777,o.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778,o.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779,o.NEAREST=i.a.NEAREST,o.LINEAR=i.a.LINEAR,o.NEAREST_MIPMAP_NEAREST=i.a.NEAREST_MIPMAP_NEAREST,o.LINEAR_MIPMAP_NEAREST=i.a.LINEAR_MIPMAP_NEAREST,o.NEAREST_MIPMAP_LINEAR=i.a.NEAREST_MIPMAP_LINEAR,o.LINEAR_MIPMAP_LINEAR=i.a.LINEAR_MIPMAP_LINEAR,o.REPEAT=i.a.REPEAT,o.CLAMP_TO_EDGE=i.a.CLAMP_TO_EDGE,o.MIRRORED_REPEAT=i.a.MIRRORED_REPEAT,t.a=o},function(e,t,r){"use strict";function n(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))}function i(e,t){var r=n(e.width),i=n(e.height);return t=t||document.createElement("canvas"),t.width=r,t.height=i,t.getContext("2d").drawImage(e.image,0,0,r,i),t}var a=r(4),o=r(11),s=r(14),u=r(73),l=u.a.isPowerOfTwo,h=a.a.extend(function(){return{image:null,pixels:null,mipmaps:[],convertToPOT:!1}},{textureType:"texture2D",update:function(e){var t=e.gl;t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(e);var r=this.format,n=this.type,i=!(!this.convertToPOT||this.mipmaps.length||!this.image||this.wrapS!==a.a.REPEAT&&this.wrapT!==a.a.REPEAT||!this.NPOT);t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,i?this.wrapS:this.getAvailableWrapS()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,i?this.wrapT:this.getAvailableWrapT()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,i?this.magFilter:this.getAvailableMagFilter()),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,i?this.minFilter:this.getAvailableMinFilter());var s=e.getGLExtension("EXT_texture_filter_anisotropic");if(s&&this.anisotropic>1&&t.texParameterf(t.TEXTURE_2D,s.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){e.getGLExtension("OES_texture_half_float")||(n=o.a.FLOAT)}if(this.mipmaps.length)for(var u=this.width,l=this.height,h=0;h=a.a.COMPRESSED_RGB_S3TC_DXT1_EXT?e.compressedTexImage2D(e.TEXTURE_2D,r,s,n,o,0,t.pixels):e.texImage2D(e.TEXTURE_2D,r,s,n,o,0,s,u,t.pixels)},generateMipmap:function(e){var t=e.gl;this.useMipmap&&!this.NPOT&&(t.bindTexture(t.TEXTURE_2D,this._cache.get("webgl_texture")),t.generateMipmap(t.TEXTURE_2D))},isPowerOfTwo:function(){return l(this.width)&&l(this.height)},isRenderable:function(){return this.image?"CANVAS"===this.image.nodeName||"VIDEO"===this.image.nodeName||this.image.complete:!(!this.width||!this.height)},bind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,this.getWebGLTexture(e))},unbind:function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},load:function(e,t){var r=s.a.createImage();t&&(r.crossOrigin=t);var n=this;return r.onload=function(){n.dirty(),n.trigger("success",n),r.onload=null},r.onerror=function(){n.trigger("error",n),r.onerror=null},r.src=e,this.image=r,this}});Object.defineProperty(h.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(e){this.image?console.warn("Texture from image can't set width"):(this._width!==e&&this.dirty(),this._width=e)}}),Object.defineProperty(h.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(e){this.image?console.warn("Texture from image can't set height"):(this._height!==e&&this.dirty(),this._height=e)}}),t.a=h},function(e,t,r){"use strict";var n=r(161);t.a=n.a},function(e,t,r){"use strict";var n=r(110),i=r(53),a=r(23),o=function(){this.__uid__=a.a.genGUID()};o.__initializers__=[function(e){a.a.extend(this,e)}],a.a.extend(o,n.a),a.a.extend(o.prototype,i.a),t.a=o},function(e,t,r){"use strict";function n(e){for(var t=[],r=0;r=0){if(1!==l&&4!==l){o();break}l=2,d=[]}else if(1!==l)if(4!==l)r(f),l=0;else{var p=f;g.indexOf(p)>=0||_.indexOf(p)>=0||v.indexOf(p)>=0?c[u].semantic=p:"ignore"===p||"unconfigurable"===p?c[u].ignore=!0:c[u].value="bool"===e?"true"===p:parseFloat(p)}else c[u].value="bool"===e?"true"===f:parseFloat(f),d=null;else{if(2!==l){o();break}if(!(d instanceof Array)){o();break}d.push(+i[++s])}else c[u].value=new h.a.Float32Array(d),d=null,l=5;else if(2===l){if(!(d instanceof Array)){o();break}d.push(+i[++s])}else l=5;else l=4;else{if(0!==l&&3!==l){o();break}l=1}}return c}function u(e,t){"object"==typeof e&&(t=e.fragment,e=e.vertex),e=a(e),t=a(t),this._shaderID=i(e,t),this._vertexCode=u.parseImport(e),this._fragmentCode=u.parseImport(t),this.attributeSemantics={},this.matrixSemantics={},this.uniformSemantics={},this.matrixSemanticKeys=[],this.uniformTemplates={},this.attributes={},this.textures={},this.vertexDefines={},this.fragmentDefines={},this._parseAttributes(),this._parseUniforms(),this._parseDefines()}var l=r(23),h=r(14),c=/uniform\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\s+([\s\S]*?);/g,d=/attribute\s+(float|int|vec2|vec3|vec4)\s+([\s\S]*?);/g,f=/#define\s+(\w+)?(\s+[\d-.]+)?\s*;?\s*\n/g,p={bool:"1i",int:"1i",sampler2D:"t",samplerCube:"t",float:"1f",vec2:"2f",vec3:"3f",vec4:"4f",ivec2:"2i",ivec3:"3i",ivec4:"4i",mat2:"m2",mat3:"m3",mat4:"m4"},m={bool:function(){return!0},int:function(){return 0},float:function(){return 0},sampler2D:function(){return null},samplerCube:function(){return null},vec2:function(){return n(2)},vec3:function(){return n(3)},vec4:function(){return n(4)},ivec2:function(){return n(2)},ivec3:function(){return n(3)},ivec4:function(){return n(4)},mat2:function(){return n(4)},mat3:function(){return n(9)},mat4:function(){return n(16)},array:function(){return[]}},g=["POSITION","NORMAL","BINORMAL","TANGENT","TEXCOORD","TEXCOORD_0","TEXCOORD_1","COLOR","JOINT","WEIGHT"],_=["SKIN_MATRIX","VIEWPORT_SIZE","VIEWPORT","DEVICEPIXELRATIO","WINDOW_SIZE","NEAR","FAR","TIME"],v=["WORLD","VIEW","PROJECTION","WORLDVIEW","VIEWPROJECTION","WORLDVIEWPROJECTION","WORLDINVERSE","VIEWINVERSE","PROJECTIONINVERSE","WORLDVIEWINVERSE","VIEWPROJECTIONINVERSE","WORLDVIEWPROJECTIONINVERSE","WORLDTRANSPOSE","VIEWTRANSPOSE","PROJECTIONTRANSPOSE","WORLDVIEWTRANSPOSE","VIEWPROJECTIONTRANSPOSE","WORLDVIEWPROJECTIONTRANSPOSE","WORLDINVERSETRANSPOSE","VIEWINVERSETRANSPOSE","PROJECTIONINVERSETRANSPOSE","WORLDVIEWINVERSETRANSPOSE","VIEWPROJECTIONINVERSETRANSPOSE","WORLDVIEWPROJECTIONINVERSETRANSPOSE"],y={vec4:4,vec3:3,vec2:2,float:1},x={},T={};u.prototype={constructor:u,createUniforms:function(){var e={};for(var t in this.uniformTemplates){var r=this.uniformTemplates[t];e[t]={type:r.type,value:r.value()}}return e},_parseImport:function(){this._vertexCode=u.parseImport(this.vertex),this._fragmentCode=u.parseImport(this.fragment)},_addSemanticUniform:function(e,t,r){if(g.indexOf(r)>=0)this.attributeSemantics[r]={symbol:e,type:t};else if(v.indexOf(r)>=0){var n=!1,i=r;r.match(/TRANSPOSE$/)&&(n=!0,i=r.slice(0,-9)),this.matrixSemantics[r]={symbol:e,type:t,isTranspose:n,semanticNoTranspose:i}}else _.indexOf(r)>=0&&(this.uniformSemantics[r]={symbol:e,type:t})},_addMaterialUniform:function(e,t,r,n,i,a){a[e]={type:r,value:i?m.array:n||m[t],semantic:null}},_parseUniforms:function(){function e(e){return null!=e?function(){return e}:null}function t(t,a,o){var u=s(a,o),l=[];for(var h in u){var c=u[h],d=c.semantic,f=h,m=p[a],g=e(u[h].value);u[h].isArray&&(f+="["+u[h].arraySize+"]",m+="v"),l.push(f),n._uniformList.push(h),c.ignore||("sampler2D"!==a&&"samplerCube"!==a||(n.textures[h]={shaderType:i,type:a}),d?n._addSemanticUniform(h,m,d):n._addMaterialUniform(h,a,m,g,u[h].isArray,r))}return l.length>0?"uniform "+a+" "+l.join(",")+";\n":""}var r={},n=this,i="vertex";this._uniformList=[],this._vertexCode=this._vertexCode.replace(c,t),i="fragment",this._fragmentCode=this._fragmentCode.replace(c,t),n.matrixSemanticKeys=Object.keys(this.matrixSemantics),this.uniformTemplates=r},_parseAttributes:function(){function e(e,n,i){var a=s(n,i),o=y[n]||1,u=[];for(var l in a){var h=a[l].semantic;if(t[l]={type:"float",size:o,semantic:h||null},h){if(g.indexOf(h)<0)throw new Error('Unkown semantic "'+h+'"');r.attributeSemantics[h]={symbol:l,type:n}}u.push(l)}return"attribute "+n+" "+u.join(",")+";\n"}var t={},r=this;this._vertexCode=this._vertexCode.replace(d,e),this.attributes=t},_parseDefines:function(){function e(e,n,i){var a="vertex"===r?t.vertexDefines:t.fragmentDefines;return a[n]||(a[n]="false"!==i&&("true"===i||(i?isNaN(parseFloat(i))?i.trim():parseFloat(i):null))),""}var t=this,r="vertex";this._vertexCode=this._vertexCode.replace(f,e),r="fragment",this._fragmentCode=this._fragmentCode.replace(f,e)},clone:function(){var e=T[this._shaderID];return new u(e.vertex,e.fragment)}},Object.defineProperty&&(Object.defineProperty(u.prototype,"shaderID",{get:function(){return this._shaderID}}),Object.defineProperty(u.prototype,"vertex",{get:function(){return this._vertexCode}}),Object.defineProperty(u.prototype,"fragment",{get:function(){return this._fragmentCode}}),Object.defineProperty(u.prototype,"uniforms",{get:function(){return this._uniformList}}));var b=/(@import)\s*([0-9a-zA-Z_\-\.]*)/g;u.parseImport=function(e){return e=e.replace(b,function(e,t,r){var e=u.source(r);return e?u.parseImport(e):(console.error('Shader chunk "'+r+'" not existed in library'),"")})};var w=/(@export)\s*([0-9a-zA-Z_\-\.]*)\s*\n([\s\S]*?)@end/g;u.import=function(e){e.replace(w,function(e,t,r,n){var n=n.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g,"");if(n){for(var i,a=r.split("."),o=u.codes,s=0;s0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a),e},i.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},i.cross=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=r[0],s=r[1],u=r[2];return e[0]=i*u-a*s,e[1]=a*o-n*u,e[2]=n*s-i*o,e},i.lerp=function(e,t,r,n){var i=t[0],a=t[1],o=t[2];return e[0]=i+n*(r[0]-i),e[1]=a+n*(r[1]-a),e[2]=o+n*(r[2]-o),e},i.random=function(e,t){t=t||1;var r=2*Object(n.c)()*Math.PI,i=2*Object(n.c)()-1,a=Math.sqrt(1-i*i)*t;return e[0]=Math.cos(r)*a,e[1]=Math.sin(r)*a,e[2]=i*t,e},i.transformMat4=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,e[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,e[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,e[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,e},i.transformMat3=function(e,t,r){var n=t[0],i=t[1],a=t[2];return e[0]=n*r[0]+i*r[3]+a*r[6],e[1]=n*r[1]+i*r[4]+a*r[7],e[2]=n*r[2]+i*r[5]+a*r[8],e},i.transformQuat=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=r[0],s=r[1],u=r[2],l=r[3],h=l*n+s*a-u*i,c=l*i+u*n-o*a,d=l*a+o*i-s*n,f=-o*n-s*i-u*a;return e[0]=h*l+f*-o+c*-u-d*-s,e[1]=c*l+f*-s+d*-o-h*-u,e[2]=d*l+f*-u+h*-s-c*-o,e},i.rotateX=function(e,t,r,n){var i=[],a=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},i.rotateY=function(e,t,r,n){var i=[],a=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},i.rotateZ=function(e,t,r,n){var i=[],a=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],e[0]=a[0]+r[0],e[1]=a[1]+r[1],e[2]=a[2]+r[2],e},i.forEach=function(){var e=i.create();return function(t,r,n,i,a,o){var s,u;for(r||(r=3),n||(n=0),u=i?Math.min(i*r+n,t.length):t.length,s=n;s1?0:Math.acos(a)},t.a=i},function(e,t){function r(e,t){"createCanvas"===e&&(J=null),K[e]=t}function n(e){if(null==e||"object"!=typeof e)return e;var t=e,r=k.call(e);if("[object Array]"===r){if(!F(e)){t=[];for(var i=0,a=e.length;is[0]&&(s[0]=l),h>s[1]&&(s[1]=h),c>s[2]&&(s[2]=c)}r._dirty=!0,n._dirty=!0}},generateVertexNormals:function(){if(this.vertexCount){var e=this.indices,t=this.attributes,r=t.position.value,a=t.normal.value;if(a&&a.length===r.length)for(var o=0;o65535&&(this.indices=new n.a.Uint32Array(this.indices));for(var e=this.attributes,t=this.indices,r=this.getEnabledAttributes(),i={},a=0;a=r.COLOR_ATTACHMENT0&&a<=r.COLOR_ATTACHMENT0+8&&i.push(a);n.drawBuffersEXT(i)}}this.trigger("beforerender",this,e);var o=this.clearDepth?r.DEPTH_BUFFER_BIT:0;if(r.depthMask(!0),this.clearColor){o|=r.COLOR_BUFFER_BIT,r.colorMask(!0,!0,!0,!0);var s=this.clearColor;Array.isArray(s)&&r.clearColor(s[0],s[1],s[2],s[3])}r.clear(o),this.blendWithPrevious?(r.enable(r.BLEND),this.material.transparent=!0):(r.disable(r.BLEND),this.material.transparent=!1),this.renderQuad(e),this.trigger("afterrender",this,e),t&&this.unbind(e,t)},renderQuad:function(e){d.material=this.material,e.renderPass([d],f)},dispose:function(e){}});t.a=p},function(e,t,r){"use strict";t.a=function(e,t,r){return{seriesType:e,reset:function(e,t){function r(e,t){var r=e.getItemModel(t),n=r.get(i,!0);null!=n&&e.setItemVisual(t,"opacity",n)}var n=e.getData(),i=e.visualColorAccessPath.split(".");i[i.length-1]="opacity";var a=e.get(i);return n.setVisual("opacity",null==a?1:a),{dataEach:n.hasItemOption?r:null}}}}},function(e,t,r){"use strict";var n=r(3),i=r(12),a=i.a.set,o=i.a.copy,s=function(e,t){this.min=e||new n.a(1/0,1/0,1/0),this.max=t||new n.a(-1/0,-1/0,-1/0),this.vertices=null};s.prototype={constructor:s,updateFromVertices:function(e){if(e.length>0){var t=this.min,r=this.max,n=t.array,i=r.array;o(n,e[0]),o(i,e[0]);for(var a=1;ai[0]&&(i[0]=s[0]),s[1]>i[1]&&(i[1]=s[1]),s[2]>i[2]&&(i[2]=s[2])}t._dirty=!0,r._dirty=!0}},union:function(e){var t=this.min,r=this.max;return i.a.min(t.array,t.array,e.min.array),i.a.max(r.array,r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},intersection:function(e){var t=this.min,r=this.max;return i.a.max(t.array,t.array,e.min.array),i.a.min(r.array,r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},intersectBoundingBox:function(e){var t=this.min.array,r=this.max.array,n=e.min.array,i=e.max.array;return!(t[0]>i[0]||t[1]>i[1]||t[2]>i[2]||r[0]=i[0]&&r[1]>=i[1]&&r[2]>=i[2]},containPoint:function(e){var t=this.min.array,r=this.max.array,n=e.array;return t[0]<=n[0]&&t[1]<=n[1]&&t[2]<=n[2]&&r[0]>=n[0]&&r[1]>=n[1]&&r[2]>=n[2]},isFinite:function(){var e=this.min.array,t=this.max.array;return isFinite(e[0])&&isFinite(e[1])&&isFinite(e[2])&&isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])},applyTransform:function(e){this.transformFrom(this,e)},transformFrom:function(){var e=i.a.create(),t=i.a.create(),r=i.a.create(),n=i.a.create(),a=i.a.create(),o=i.a.create();return function(i,s){var u=i.min.array,l=i.max.array,h=s.array;return e[0]=h[0]*u[0],e[1]=h[1]*u[0],e[2]=h[2]*u[0],t[0]=h[0]*l[0],t[1]=h[1]*l[0],t[2]=h[2]*l[0],r[0]=h[4]*u[1],r[1]=h[5]*u[1],r[2]=h[6]*u[1],n[0]=h[4]*l[1],n[1]=h[5]*l[1],n[2]=h[6]*l[1],a[0]=h[8]*u[2],a[1]=h[9]*u[2],a[2]=h[10]*u[2],o[0]=h[8]*l[2],o[1]=h[9]*l[2],o[2]=h[10]*l[2],u=this.min.array,l=this.max.array,u[0]=Math.min(e[0],t[0])+Math.min(r[0],n[0])+Math.min(a[0],o[0])+h[12],u[1]=Math.min(e[1],t[1])+Math.min(r[1],n[1])+Math.min(a[1],o[1])+h[13],u[2]=Math.min(e[2],t[2])+Math.min(r[2],n[2])+Math.min(a[2],o[2])+h[14],l[0]=Math.max(e[0],t[0])+Math.max(r[0],n[0])+Math.max(a[0],o[0])+h[12],l[1]=Math.max(e[1],t[1])+Math.max(r[1],n[1])+Math.max(a[1],o[1])+h[13],l[2]=Math.max(e[2],t[2])+Math.max(r[2],n[2])+Math.max(a[2],o[2])+h[14],this.min._dirty=!0,this.max._dirty=!0,this}}(),applyProjection:function(e){var t=this.min.array,r=this.max.array,n=e.array,i=t[0],a=t[1],o=t[2],s=r[0],u=r[1],l=t[2],h=r[0],c=r[1],d=r[2];if(1===n[15])t[0]=n[0]*i+n[12],t[1]=n[5]*a+n[13],r[2]=n[10]*o+n[14],r[0]=n[0]*h+n[12],r[1]=n[5]*c+n[13],t[2]=n[10]*d+n[14];else{var f=-1/o;t[0]=n[0]*i*f,t[1]=n[5]*a*f,r[2]=(n[10]*o+n[14])*f,f=-1/l,r[0]=n[0]*s*f,r[1]=n[5]*u*f,f=-1/d,t[2]=(n[10]*d+n[14])*f}return this.min._dirty=!0,this.max._dirty=!0,this},updateVertices:function(){var e=this.vertices;if(!e){e=[];for(var t=0;t<8;t++)e[t]=i.a.fromValues(0,0,0);this.vertices=e}var r=this.min.array,n=this.max.array;return a(e[0],r[0],r[1],r[2]),a(e[1],r[0],n[1],r[2]),a(e[2],n[0],r[1],r[2]),a(e[3],n[0],n[1],r[2]),a(e[4],r[0],r[1],n[2]),a(e[5],r[0],n[1],n[2]),a(e[6],n[0],r[1],n[2]),a(e[7],n[0],n[1],n[2]),this},copy:function(e){var t=this.min,r=this.max;return o(t.array,e.min.array),o(r.array,e.max.array),t._dirty=!0,r._dirty=!0,this},clone:function(){var e=new s;return e.copy(this),e}},t.a=s},function(e,t,r){"use strict";function n(e){var t=Object.keys(e);t.sort();for(var r=[],n=0;n=0},getEnabledUniforms:function(){return this._enabledUniforms},getTextureUniforms:function(){return this._textureUniforms},set:function(e,t){if("object"==typeof e)for(var r in e){var n=e[r];this.setUniform(r,n)}else this.setUniform(e,t)},get:function(e){var t=this.uniforms[e];if(t)return t.value},attachShader:function(e,t){var r=this.uniforms;this.uniforms=e.createUniforms(),this.shader=e;var n=this.uniforms;this._enabledUniforms=Object.keys(n),this._enabledUniforms.sort(),this._textureUniforms=this._enabledUniforms.filter(function(e){var t=this.uniforms[e].type;return"t"===t||"tv"===t},this);var i=this.vertexDefines,a=this.fragmentDefines;if(this.vertexDefines=o.a.clone(e.vertexDefines),this.fragmentDefines=o.a.clone(e.fragmentDefines),t){for(var s in r)n[s]&&(n[s].value=r[s].value);o.a.defaults(this.vertexDefines,i),o.a.defaults(this.fragmentDefines,a)}var u={};for(var l in e.textures)u[l]={shaderType:e.textures[l].shaderType,type:e.textures[l].type,enabled:!(!t||!this._textureStatus[l])&&this._textureStatus[l].enabled};this._textureStatus=u,this._programKey=""},clone:function(){var e=new this.constructor({name:this.name,shader:this.shader});for(var t in this.uniforms)e.uniforms[t].value=this.uniforms[t].value;return e.depthTest=this.depthTest,e.depthMask=this.depthMask,e.transparent=this.transparent,e.blend=this.blend,e.vertexDefines=o.a.clone(this.vertexDefines),e.fragmentDefines=o.a.clone(this.fragmentDefines),e.enableTexture(this.getEnabledTextures()),e.precision=this.precision,e},define:function(e,t,r){var n=this.vertexDefines,i=this.fragmentDefines;"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<3&&(r=t,t=e,e="both"),r=null!=r?r:null,"vertex"!==e&&"both"!==e||n[t]!==r&&(n[t]=r,this._programKey=""),"fragment"!==e&&"both"!==e||i[t]!==r&&(i[t]=r,"both"!==e&&(this._programKey=""))},undefine:function(e,t){"vertex"!==e&&"fragment"!==e&&"both"!==e&&arguments.length<2&&(t=e,e="both"),"vertex"!==e&&"both"!==e||this.isDefined("vertex",t)&&(delete this.vertexDefines[t],this._programKey=""),"fragment"!==e&&"both"!==e||this.isDefined("fragment",t)&&(delete this.fragmentDefines[t],"both"!==e&&(this._programKey=""))},isDefined:function(e,t){switch(e){case"vertex":return void 0!==this.vertexDefines[t];case"fragment":return void 0!==this.fragmentDefines[t]}},getDefine:function(e,t){switch(e){case"vertex":return this.vertexDefines[t];case"fragment":return this.fragmentDefines[t]}},enableTexture:function(e){if(Array.isArray(e))for(var t=0;t=r.x&&t>=r.y&&e<=r.x+r.width&&t<=r.y+r.height};var _=new d.a;n.prototype.castRay=function(e,t,r){var n=this.layer.renderer,i=n.viewport;return n.viewport=this.viewport,n.screenToNDC(e,t,_),this.camera.castRay(_,r),n.viewport=i,r},n.prototype.prepareRender=function(){this.scene.update(),this.camera.update(),this.scene.updateLights();var e=this.scene.updateRenderList(this.camera);this._needsSortProgressively=!1;for(var t=0;t30},n.prototype._doRender=function(e,t,r){var n=this.scene,i=this.camera;r=r||0,this._updateTransparent(e,n,i,r),t||(this._shadowMapPass.kernelPCF=this._pcfKernels[0],this._shadowMapPass.render(e,n,i,!0)),this._updateShadowPCFKernel(r);var a=e.clearColor;if(e.gl.clearColor(a[0],a[1],a[2],a[3]),this._enablePostEffect&&(this.needsTemporalSS()&&this._temporalSS.jitterProjection(e,i),this._compositor.updateNormal(e,n,i,this._temporalSS.getFrame())),this._updateSSAO(e,n,i,this._temporalSS.getFrame()),this._enablePostEffect){var o=this._compositor.getSourceFrameBuffer();o.bind(e),e.gl.clear(e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT),e.render(n,i,!0,!0),o.unbind(e),this.needsTemporalSS()&&t?(this._compositor.composite(e,n,i,this._temporalSS.getSourceFrameBuffer(),this._temporalSS.getFrame()),e.setViewport(this.viewport),this._temporalSS.render(e)):(e.setViewport(this.viewport),this._compositor.composite(e,n,i,null,0))}else if(this.needsTemporalSS()&&t){var o=this._temporalSS.getSourceFrameBuffer();o.bind(e),e.saveClear(),e.clearBit=e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT,e.render(n,i,!0,!0),e.restoreClear(),o.unbind(e),e.setViewport(this.viewport),this._temporalSS.render(e)}else e.setViewport(this.viewport),e.render(n,i,!0,!0)},n.prototype._updateTransparent=function(e,t,r,n){for(var i=new c.a,a=new h.a,o=r.getWorldPosition(),s=t.getRenderList(r).transparent,u=0;uthis.camera.far||e65535?this.indices instanceof Uint16Array&&(this.indices=new Uint32Array(this.indices)):this.indices instanceof Uint32Array&&(this.indices=new Uint16Array(this.indices)))},setTriangleCount:function(e){this.triangleCount!==e&&(this.indices=0===e?null:this.vertexCount>65535?new Uint32Array(3*e):new Uint16Array(3*e))},_getCubicCurveApproxStep:function(e,t,r,n){return 1/(u.dist(e,t)+u.dist(r,t)+u.dist(n,r)+1)*this.segmentScale},getCubicCurveVertexCount:function(e,t,r,n){var i=this._getCubicCurveApproxStep(e,t,r,n),a=Math.ceil(1/i);return this.useNativeLine?2*a:2*a+2},getCubicCurveTriangleCount:function(e,t,r,n){var i=this._getCubicCurveApproxStep(e,t,r,n),a=Math.ceil(1/i);return this.useNativeLine?0:2*a},getLineVertexCount:function(){return this.getPolylineVertexCount(l)},getLineTriangleCount:function(){return this.getPolylineTriangleCount(l)},getPolylineVertexCount:function(e){var t;if("number"==typeof e)t=e;else{t="number"!=typeof e[0]?e.length:e.length/3}return this.useNativeLine?2*(t-1):2*(t-1)+2},getPolylineTriangleCount:function(e){var t;if("number"==typeof e)t=e;else{t="number"!=typeof e[0]?e.length:e.length/3}return this.useNativeLine?0:2*Math.max(t-1,0)},addCubicCurve:function(e,t,r,n,i,a){null==a&&(a=1);for(var o=e[0],s=e[1],u=e[2],l=t[0],h=t[1],c=t[2],d=r[0],f=r[1],p=r[2],m=n[0],g=n[1],_=n[2],v=this._getCubicCurveApproxStep(e,t,r,n),y=v*v,x=y*v,T=3*v,b=3*y,w=6*y,E=6*x,S=o-2*l+d,A=s-2*h+f,M=u-2*c+p,C=3*(l-d)-o+m,L=3*(h-f)-s+g,D=3*(c-p)-u+_,N=o,R=s,P=u,I=(l-o)*T+S*b+C*x,O=(h-s)*T+A*b+L*x,F=(c-u)*T+M*b+D*x,B=S*w+C*E,U=A*w+L*E,z=M*w+D*E,G=C*E,H=L*E,V=D*E,k=0,W=0,j=Math.ceil(1/v),X=new Float32Array(3*(j+1)),X=[],q=0,W=0;W1&&(N=I>0?Math.min(N,m):Math.max(N,m),R=O>0?Math.min(R,g):Math.max(R,g),P=F>0?Math.min(P,_):Math.max(P,_));return this.addPolyline(X,i,a)},addLine:function(e,t,r,n){return this.addPolyline([e,t],r,n)},addPolyline:function(e,t,r,n,i){if(e.length){var a="number"!=typeof e[0];if(null==i&&(i=a?e.length:e.length/3),!(i<2)){null==n&&(n=0),null==r&&(r=1),this._itemVertexOffsets.push(this._vertexOffset);var o,s,a="number"!=typeof e[0],u=a?"number"!=typeof t[0]:t.length/4===i,l=this.attributes.position,h=this.attributes.positionPrev,c=this.attributes.positionNext,d=this.attributes.color,f=this.attributes.offset,p=this.indices,m=this._vertexOffset;r=Math.max(r,.01);for(var g=n;g1&&(l.copy(m,m-1),d.copy(m,m-1),m++):(g0&&(c.set(m-2,o),c.set(m-1,o)),l.set(m,o),l.set(m+1,o),d.set(m,s),d.set(m+1,s),f.set(m,r/2),f.set(m+1,-r/2),m+=2),this.useNativeLine)d.set(m,s),l.set(m,o),m++;else if(g>0){var y=3*this._triangleOffset,p=this.indices;p[y]=m-4,p[y+1]=m-3,p[y+2]=m-2,p[y+3]=m-3,p[y+4]=m-1,p[y+5]=m-2,this._triangleOffset+=2}}if(!this.useNativeLine){var x=this._vertexOffset,T=this._vertexOffset+2*i;h.copy(x,x+2),h.copy(x+1,x+3),c.copy(T-1,T-3),c.copy(T-2,T-4)}return this._vertexOffset=m,this._vertexOffset}}},setItemColor:function(e,t){for(var r=this._itemVertexOffsets[e],n=e1&&t.texParameterf(t.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){e.getGLExtension("OES_texture_half_float")||(n=a.a.FLOAT)}if(this.mipmaps.length)for(var o=this.width,s=this.height,u=0;u0&&(o=1/Math.sqrt(o),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e[3]=t[3]*o),e},i.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},i.lerp=function(e,t,r,n){var i=t[0],a=t[1],o=t[2],s=t[3];return e[0]=i+n*(r[0]-i),e[1]=a+n*(r[1]-a),e[2]=o+n*(r[2]-o),e[3]=s+n*(r[3]-s),e},i.random=function(e,t){return t=t||1,e[0]=Object(n.c)(),e[1]=Object(n.c)(),e[2]=Object(n.c)(),e[3]=Object(n.c)(),i.normalize(e,e),i.scale(e,e,t),e},i.transformMat4=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=t[3];return e[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,e[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,e[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,e[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,e},i.transformQuat=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=r[0],s=r[1],u=r[2],l=r[3],h=l*n+s*a-u*i,c=l*i+u*n-o*a,d=l*a+o*i-s*n,f=-o*n-s*i-u*a;return e[0]=h*l+f*-o+c*-u-d*-s,e[1]=c*l+f*-s+d*-o-h*-u,e[2]=d*l+f*-u+h*-s-c*-o,e},i.forEach=function(){var e=i.create();return function(t,r,n,i,a,o){var s,u;for(r||(r=4),n||(n=0),u=i?Math.min(i*r+n,t.length):t.length,s=n;s0&&console.warn("Found multiple camera in one scene. Use the fist one."),this._cameraList.push(e)):e instanceof s.a&&this.lights.push(e),e.name&&(this._nodeRepository[e.name]=e)},removeFromScene:function(e){var t;e instanceof u.a?(t=this._cameraList.indexOf(e))>=0&&this._cameraList.splice(t,1):e instanceof s.a&&(t=this.lights.indexOf(e))>=0&&this.lights.splice(t,1),e.name&&delete this._nodeRepository[e.name]},getNode:function(e){return this._nodeRepository[e]},setMainCamera:function(e){var t=this._cameraList.indexOf(e);t>=0&&this._cameraList.splice(t,1),this._cameraList.unshift(e)},getMainCamera:function(){return this._cameraList[0]},getLights:function(){return this.lights},updateLights:function(){var e=this.lights;this._previousLightNumber=this._lightNumber;for(var t={},r=0;r0&&this._doUpdateRenderList(o,t,r,n,i)}},isFrustumCulled:function(){var e=new l.a,t=new f.a;return function(r,n,i){var a=r.boundingBox;if(a||(a=r.skeleton&&r.skeleton.boundingBox?r.skeleton.boundingBox:r.geometry.boundingBox),!a)return!1;if(t.array=i,e.transformFrom(a,t),r.castShadow&&this.viewBoundingBoxLastFrame.union(e),r.frustumCulling){if(!e.intersectBoundingBox(n.frustum.boundingBox))return!0;t.array=n.projectionMatrix.array,e.max.array[2]>0&&e.min.array[2]<0&&(e.max.array[2]=-1e-20),e.applyProjection(t);var o=e.min.array,s=e.max.array;if(s[0]<-1||o[0]>1||s[1]<-1||o[1]>1||s[2]<-1||o[2]>1)return!0}return!1}}(),_updateLightUniforms:function(){var e=this.lights;e.sort(a);var t=this._lightUniforms;for(var r in t)for(var n in t[r])t[r][n].value.length=0;for(var i=0;i0?e[t].value=new Float32Array(e[t].value):e[t].value=null;this.indices&&this.indices.length>0&&(this.indices=this.vertexCount>65535?new Uint32Array(this.indices):new Uint16Array(this.indices)),this.dirty()}}},function(e,t,r){"use strict";function n(e,t){var r=[];return a.a.util.each(e.dimensions,function(n){var i=e.getDimensionInfo(n),a=i.otherDims,o=a[t];null!=o&&!1!==o&&(r[o]=i.name)}),r}var i=r(0),a=r.n(i);t.a=function(e,t,r){var i=e.getData(),o=e.getRawValue(t),s=a.a.util.isArray(o)?function(e){function o(e,t){var n=i.getDimensionInfo(t);if(n&&!1!==n.otherDims.tooltip){var o=n.type,l=(s?"- "+(n.tooltipName||n.name)+": ":"")+("ordinal"===o?e+"":"time"===o?r?"":a.a.format.formatTime("yyyy/MM/dd hh:mm:ss",e):a.a.format.addCommas(e));l&&u.push(a.a.format.encodeHTML(l))}}var s=!0,u=[],l=n(i,"tooltip");return l.length?a.a.util.each(l,function(e){o(i.get(e,t),e)}):a.a.util.each(e,o),(s?"
    ":"")+u.join(s?"
    ":", ")}(o):a.a.format.encodeHTML(a.a.format.addCommas(o)),u=i.getName(t),l=i.getItemVisual(t,"color");a.a.util.isObject(l)&&l.colorStops&&(l=(l.colorStops[0]||{}).color),l=l||"transparent";var h=a.a.format.getTooltipMarker(l),c=e.name;return"\0-"===c&&(c=""),c=c?a.a.format.encodeHTML(c)+(r?": ":"
    "):"",r?h+c+s:c+h+(u?a.a.format.encodeHTML(u)+": "+s:s)}},function(e,t,r){"use strict";var n=r(72),i=r(11),a=n.a.extend({skeleton:null,joints:null,useSkinMatricesTexture:!1},function(){this.joints||(this.joints=[])},{isSkinnedMesh:function(){return!!(this.skeleton&&this.joints&&this.joints.length>0)},clone:function(){var e=n.a.prototype.clone.call(this);return e.skeleton=this.skeleton,this.joints&&(e.joints=this.joints.slice()),e}});a.POINTS=i.a.POINTS,a.LINES=i.a.LINES,a.LINE_LOOP=i.a.LINE_LOOP,a.LINE_STRIP=i.a.LINE_STRIP,a.TRIANGLES=i.a.TRIANGLES,a.TRIANGLE_STRIP=i.a.TRIANGLE_STRIP,a.TRIANGLE_FAN=i.a.TRIANGLE_FAN,a.BACK=i.a.BACK,a.FRONT=i.a.FRONT,a.FRONT_AND_BACK=i.a.FRONT_AND_BACK,a.CW=i.a.CW,a.CCW=i.a.CCW,t.a=a},function(e,t,r){"use strict";var n=r(58),i=n.a.extend({fov:50,aspect:1,near:.1,far:2e3},{updateProjectionMatrix:function(){var e=this.fov/180*Math.PI;this.projectionMatrix.perspective(e,this.aspect,this.near,this.far)},decomposeProjectionMatrix:function(){var e=this.projectionMatrix.array,t=2*Math.atan(1/e[5]);this.fov=t/Math.PI*180,this.aspect=e[5]/e[0],this.near=e[14]/(e[10]-1),this.far=e[14]/(e[10]+1)},clone:function(){var e=n.a.prototype.clone.call(this);return e.fov=this.fov,e.aspect=this.aspect,e.near=this.near,e.far=this.far,e}});t.a=i},function(e,t,r){"use strict";var n=r(40),i=r(76),a=r(8),o=r(19),s=r(4),u=r(121);a.a.import(u.a);var l=n.a.extend(function(){var e=new a.a({vertex:a.a.source("clay.skybox.vertex"),fragment:a.a.source("clay.skybox.fragment")}),t=new o.a({shader:e,depthMask:!1});return{scene:null,geometry:new i.a,material:t,environmentMap:null,culling:!1}},function(){var e=this.scene;e&&this.attachScene(e),this.environmentMap&&this.setEnvironmentMap(this.environmentMap)},{attachScene:function(e){this.scene&&this.detachScene(),e.skybox=this,this.scene=e,e.on("beforerender",this._beforeRenderScene,this)},detachScene:function(){this.scene&&(this.scene.off("beforerender",this._beforeRenderScene),this.scene.skybox=null),this.scene=null},dispose:function(e){this.detachScene(),this.geometry.dispose(e)},setEnvironmentMap:function(e){"texture2D"===e.textureType?(this.material.define("EQUIRECTANGULAR"),e.minFilter=s.a.LINEAR):this.material.undefine("EQUIRECTANGULAR"),this.material.set("environmentMap",e)},getEnvironmentMap:function(){return this.material.get("environmentMap")},_beforeRenderScene:function(e,t,r){this.renderSkybox(e,r)},renderSkybox:function(e,t){this.position.copy(t.getWorldPosition()),this.update(),e.gl.disable(e.gl.BLEND),this.material.get("lod")>0?this.material.define("fragment","LOD"):this.material.undefine("fragment","LOD"),e.renderPass([this],t)}});t.a=l},function(e,t,r){"use strict";var n=r(15),i=r(18),a=n.a.extend({dynamic:!1,widthSegments:1,heightSegments:1},function(){this.build()},{build:function(){for(var e=this.heightSegments,t=this.widthSegments,r=this.attributes,n=[],a=[],o=[],s=[],u=0;u<=e;u++)for(var l=u/e,h=0;h<=t;h++){var c=h/t;if(n.push([2*c-1,2*l-1,0]),a&&a.push([c,l]),o&&o.push([0,0,1]),h0&&this._notFirst?this.animateTo({alpha:h,beta:c,center:d,distance:a,targetOrthographicSize:o,easing:l.animationEasingUpdate,duration:l.animationDurationUpdate}):(this.setDistance(a),this.setAlpha(h),this.setBeta(c),this.setCenter(d),this.setOrthographicSize(o)),this._notFirst=!0,this._validateProperties()},_validateProperties:function(){},animateTo:function(e){var t=this.zr,r=this,n={},i={};return null!=e.distance&&(n.distance=this.getDistance(),i.distance=e.distance),null!=e.orthographicSize&&(n.orthographicSize=this.getOrthographicSize(),i.orthographicSize=e.orthographicSize),null!=e.alpha&&(n.alpha=this.getAlpha(),i.alpha=e.alpha),null!=e.beta&&(n.beta=this.getBeta(),i.beta=e.beta),null!=e.center&&(n.center=this.getCenter(),i.center=e.center),this._addAnimator(t.animation.animate(n).when(e.duration||1e3,i).during(function(){null!=n.alpha&&r.setAlpha(n.alpha),null!=n.beta&&r.setBeta(n.beta),null!=n.distance&&r.setDistance(n.distance),null!=n.center&&r.setCenter(n.center),null!=n.orthographicSize&&r.setOrthographicSize(n.orthographicSize),r._needsUpdate=!0})).start(e.easing||"linear")},stopAllAnimation:function(){for(var e=0;e0},_update:function(e){if(this._rotating){var t=("cw"===this.autoRotateDirection?1:-1)*this.autoRotateSpeed/180*Math.PI;this._phi-=t*e/1e3,this._needsUpdate=!0}else this._rotateVelocity.len()>0&&(this._needsUpdate=!0);(Math.abs(this._zoomSpeed)>.1||this._panVelocity.len()>0)&&(this._needsUpdate=!0),this._needsUpdate&&(e=Math.min(e,50),this._updateDistanceOrSize(e),this._updatePan(e),this._updateRotate(e),this._updateTransform(),this.getCamera().update(),this.zr&&this.zr.refresh(),this.trigger("update"),this._needsUpdate=!1)},_updateRotate:function(e){var t=this._rotateVelocity;this._phi=t.y*e/20+this._phi,this._theta=t.x*e/20+this._theta,this.setAlpha(this.getAlpha()),this.setBeta(this.getBeta()),this._vectorDamping(t,Math.pow(this.damping,e/16))},_updateDistanceOrSize:function(e){"perspective"===this._projection?this._setDistance(this._distance+this._zoomSpeed*e/20):this._setOrthoSize(this._orthoSize+this._zoomSpeed*e/20),this._zoomSpeed*=Math.pow(this.damping,e/16)},_setDistance:function(e){this._distance=Math.max(Math.min(e,this.maxDistance),this.minDistance)},_setOrthoSize:function(e){this._orthoSize=Math.max(Math.min(e,this.maxOrthographicSize),this.minOrthographicSize);var t=this.getCamera(),r=this._orthoSize,n=r/this.viewGL.viewport.height*this.viewGL.viewport.width;t.left=-n/2,t.right=n/2,t.top=r/2,t.bottom=-r/2},_updatePan:function(e){var t=this._panVelocity,r=this._distance,n=this.getCamera(),i=n.worldTransform.y,a=n.worldTransform.x;this._center.scaleAndAdd(a,-t.x*r/200).scaleAndAdd(i,-t.y*r/200),this._vectorDamping(t,0)},_updateTransform:function(){var e=this.getCamera(),t=new o.a,r=this._theta+Math.PI/2,n=this._phi+Math.PI/2,i=Math.sin(r);t.x=i*Math.cos(n),t.y=-Math.cos(r),t.z=i*Math.sin(n),e.position.copy(this._center).scaleAndAdd(t,this._distance),e.rotation.identity().rotateY(-this._phi).rotateX(-this._theta)},_startCountingStill:function(){clearTimeout(this._stillTimeout);var e=this.autoRotateAfterStill,t=this;!isNaN(e)&&e>0&&(this._stillTimeout=setTimeout(function(){t._rotating=!0},1e3*e))},_vectorDamping:function(e,t){var r=e.len();r*=t,r<1e-4&&(r=0),e.normalize().scale(r)},_decomposeTransform:function(){if(this.getCamera()){this.getCamera().updateWorldTransform();var e=this.getCamera().worldTransform.z,t=Math.asin(e.y),r=Math.atan2(e.x,e.z);this._theta=t,this._phi=-r,this.setBeta(this.getBeta()),this.setAlpha(this.getAlpha()),this.getCamera().aspect?this._setDistance(this.getCamera().position.dist(this._center)):this._setOrthoSize(this.getCamera().top-this.getCamera().bottom)}},_mouseDownHandler:function(e){if(!e.target&&!this._isAnimating()){var t=e.offsetX,r=e.offsetY;this.viewGL&&!this.viewGL.containPoint(t,r)||(this.zr.on("mousemove",this._mouseMoveHandler),this.zr.on("mouseup",this._mouseUpHandler),e.event.targetTouches?1===e.event.targetTouches.length&&(this._mode="rotate"):e.event.button===l[this.rotateMouseButton]?this._mode="rotate":e.event.button===l[this.panMouseButton]?this._mode="pan":this._mode="",this._rotateVelocity.set(0,0),this._rotating=!1,this.autoRotate&&this._startCountingStill(),this._mouseX=e.offsetX,this._mouseY=e.offsetY)}},_mouseMoveHandler:function(e){if(!(e.target&&e.target.__isGLToZRProxy||this._isAnimating())){var t=n(this.panSensitivity),r=n(this.rotateSensitivity);"rotate"===this._mode?(this._rotateVelocity.y=(e.offsetX-this._mouseX)/this.zr.getHeight()*2*r[0],this._rotateVelocity.x=(e.offsetY-this._mouseY)/this.zr.getWidth()*2*r[1]):"pan"===this._mode&&(this._panVelocity.x=(e.offsetX-this._mouseX)/this.zr.getWidth()*t[0]*400,this._panVelocity.y=(-e.offsetY+this._mouseY)/this.zr.getHeight()*t[1]*400),this._mouseX=e.offsetX,this._mouseY=e.offsetY,e.event.preventDefault()}},_mouseWheelHandler:function(e){if(!this._isAnimating()){var t=e.event.wheelDelta||-e.event.detail;this._zoomHandler(e,t)}},_pinchHandler:function(e){this._isAnimating()||(this._zoomHandler(e,e.pinchScale>1?1:-1),this._mode="")},_zoomHandler:function(e,t){if(0!==t){var r=e.offsetX,n=e.offsetY;if(!this.viewGL||this.viewGL.containPoint(r,n)){var i;i="perspective"===this._projection?Math.max(Math.max(Math.min(this._distance-this.minDistance,this.maxDistance-this._distance))/20,.5):Math.max(Math.max(Math.min(this._orthoSize-this.minOrthographicSize,this.maxOrthographicSize-this._orthoSize))/20,.5),this._zoomSpeed=(t>0?-1:1)*i*this.zoomSensitivity,this._rotating=!1,this.autoRotate&&"rotate"===this._mode&&this._startCountingStill(),e.event.preventDefault()}}},_mouseUpHandler:function(){this.zr.off("mousemove",this._mouseMoveHandler),this.zr.off("mouseup",this._mouseUpHandler)},_isRightMouseButtonUsed:function(){return"right"===this.rotateMouseButton||"right"===this.panMouseButton},_contextMenuHandler:function(e){this._isRightMouseButtonUsed()&&e.preventDefault()},_addAnimator:function(e){var t=this._animators;return t.push(e),e.done(function(){var r=t.indexOf(e);r>=0&&t.splice(r,1)}),e}});Object.defineProperty(h.prototype,"autoRotate",{get:function(e){return this._autoRotate},set:function(e){this._autoRotate=e,this._rotating=e}}),t.a=h},function(e,t,r){"use strict";t.a="@export ecgl.lines3D.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec3 position: POSITION;\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n\nvoid main()\n{\n gl_Position = worldViewProjection * vec4(position, 1.0);\n v_Color = a_Color;\n}\n\n@end\n\n@export ecgl.lines3D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color * v_Color);\n#else\n gl_FragColor = color * v_Color;\n#endif\n}\n@end\n\n\n\n@export ecgl.lines3D.clipNear\n\nvec4 clipNear(vec4 p1, vec4 p2) {\n float n = (p1.w - near) / (p1.w - p2.w);\n return vec4(mix(p1.xy, p2.xy, n), -near, near);\n}\n\n@end\n\n@export ecgl.lines3D.expandLine\n#ifdef VERTEX_ANIMATION\n vec4 prevProj = worldViewProjection * vec4(mix(prevPositionPrev, positionPrev, percent), 1.0);\n vec4 currProj = worldViewProjection * vec4(mix(prevPosition, position, percent), 1.0);\n vec4 nextProj = worldViewProjection * vec4(mix(prevPositionNext, positionNext, percent), 1.0);\n#else\n vec4 prevProj = worldViewProjection * vec4(positionPrev, 1.0);\n vec4 currProj = worldViewProjection * vec4(position, 1.0);\n vec4 nextProj = worldViewProjection * vec4(positionNext, 1.0);\n#endif\n\n if (currProj.w < 0.0) {\n if (nextProj.w > 0.0) {\n currProj = clipNear(currProj, nextProj);\n }\n else if (prevProj.w > 0.0) {\n currProj = clipNear(currProj, prevProj);\n }\n }\n\n vec2 prevScreen = (prevProj.xy / abs(prevProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 currScreen = (currProj.xy / abs(currProj.w) + 1.0) * 0.5 * viewport.zw;\n vec2 nextScreen = (nextProj.xy / abs(nextProj.w) + 1.0) * 0.5 * viewport.zw;\n\n vec2 dir;\n float len = offset;\n if (position == positionPrev) {\n dir = normalize(nextScreen - currScreen);\n }\n else if (position == positionNext) {\n dir = normalize(currScreen - prevScreen);\n }\n else {\n vec2 dirA = normalize(currScreen - prevScreen);\n vec2 dirB = normalize(nextScreen - currScreen);\n\n vec2 tanget = normalize(dirA + dirB);\n\n float miter = 1.0 / max(dot(tanget, dirA), 0.5);\n len *= miter;\n dir = tanget;\n }\n\n dir = vec2(-dir.y, dir.x) * len;\n currScreen += dir;\n\n currProj.xy = (currScreen / viewport.zw - 0.5) * 2.0 * abs(currProj.w);\n@end\n\n\n@export ecgl.meshLines3D.vertex\n\nattribute vec3 position: POSITION;\nattribute vec3 positionPrev;\nattribute vec3 positionNext;\nattribute float offset;\nattribute vec4 a_Color : COLOR;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevPositionPrev;\nattribute vec3 prevPositionNext;\nuniform float percent : 1.0;\n#endif\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\nuniform float near : NEAR;\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.vertexHeader\n\n@import ecgl.lines3D.clipNear\n\nvoid main()\n{\n @import ecgl.lines3D.expandLine\n\n gl_Position = currProj;\n\n v_Color = a_Color;\n\n @import ecgl.common.wireframe.vertexMain\n}\n@end\n\n\n@export ecgl.meshLines3D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color * v_Color);\n#else\n gl_FragColor = color * v_Color;\n#endif\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"},function(e,t,r){function n(e,t,r,n,i){var a=0,o=0;null==n&&(n=1/0),null==i&&(i=1/0);var s=0;t.eachChild(function(u,l){var h,c,d=u.position,f=u.getBoundingRect(),p=t.childAt(l+1),m=p&&p.getBoundingRect();if("horizontal"===e){var g=f.width+(m?-m.x+f.x:0);h=a+g,h>n||u.newline?(a=0,h=g,o+=s+r,s=f.height):s=Math.max(s,f.height)}else{var _=f.height+(m?-m.y+f.y:0);c=o+_,c>i||u.newline?(a+=s+r,o=0,c=_,s=f.width):s=Math.max(s,f.width)}u.newline||(d[0]=a,d[1]=o,"horizontal"===e?a=h+r:o=c+r)})}function i(e,t,r){var n=t.width,i=t.height,a=p(e.x,n),o=p(e.y,i),s=p(e.x2,n),u=p(e.y2,i);return(isNaN(a)||isNaN(parseFloat(e.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(e.x2)))&&(s=n),(isNaN(o)||isNaN(parseFloat(e.y)))&&(o=0),(isNaN(u)||isNaN(parseFloat(e.y2)))&&(u=i),r=m.normalizeCssArray(r||0),{width:Math.max(s-a-r[1]-r[3],0),height:Math.max(u-o-r[0]-r[2],0)}}function a(e,t,r){r=m.normalizeCssArray(r||0);var n=t.width,i=t.height,a=p(e.left,n),o=p(e.top,i),s=p(e.right,n),u=p(e.bottom,i),l=p(e.width,n),h=p(e.height,i),c=r[2]+r[0],f=r[1]+r[3],g=e.aspect;switch(isNaN(l)&&(l=n-s-f-a),isNaN(h)&&(h=i-u-c-o),null!=g&&(isNaN(l)&&isNaN(h)&&(g>n/i?l=.8*n:h=.8*i),isNaN(l)&&(l=g*h),isNaN(h)&&(h=l/g)),isNaN(a)&&(a=n-s-l-f),isNaN(o)&&(o=i-u-h-c),e.left||e.right){case"center":a=n/2-l/2-r[3];break;case"right":a=n-l-f}switch(e.top||e.bottom){case"middle":case"center":o=i/2-h/2-r[0];break;case"bottom":o=i-h-c}a=a||0,o=o||0,isNaN(l)&&(l=n-f-a-(s||0)),isNaN(h)&&(h=i-c-o-(u||0));var _=new d(a+r[3],o+r[0],l,h);return _.margin=r,_}function o(e,t,r,n,i){var o=!i||!i.hv||i.hv[0],s=!i||!i.hv||i.hv[1],u=i&&i.boundingMode||"all";if(o||s){var l;if("raw"===u)l="group"===e.type?new d(0,0,+t.width||0,+t.height||0):e.getBoundingRect();else if(l=e.getBoundingRect(),e.needLocalTransform()){var h=e.getLocalTransform();l=l.clone(),l.applyTransform(h)}t=a(c.defaults({width:l.width,height:l.height},t),r,n);var f=e.position,p=o?t.x-l.x:0,m=s?t.y-l.y:0;e.attr("position","raw"===u?[p,m]:[f[0]+p,f[1]+m])}}function s(e,t){return null!=e[v[t][0]]||null!=e[v[t][1]]&&null!=e[v[t][2]]}function u(e,t,r){function n(r,n){var o={},u=0,l={},h=0;if(g(r,function(t){l[t]=e[t]}),g(r,function(e){i(t,e)&&(o[e]=l[e]=t[e]),a(o,e)&&u++,a(l,e)&&h++}),s[n])return a(t,r[1])?l[r[2]]=null:a(t,r[2])&&(l[r[1]]=null),l;if(2!==h&&u){if(u>=2)return o;for(var c=0;c0){var t=this.outputs[e];t.keepLastFrame?(this._prevOutputTextures[e]&&this._compositor.releaseTexture(this._prevOutputTextures[e]),this._prevOutputTextures[e]=this._outputTextures[e]):this._compositor.releaseTexture(this._outputTextures[e])}}});t.a=i},function(e,t,r){"use strict";function n(e,t){for(var r=0,n=1/t,i=e;i>0;)r+=n*(i%t),i=Math.floor(i/t),n/=t;return r}t.a=n},function(e,t,r){"use strict";var n=r(0),i=r.n(n);t.a=function(e,t,r){r=r||e.getSource();var n=t||i.a.getCoordinateSystemDimensions(e.get("coordinateSystem"))||["x","y","z"],a=i.a.helper.createDimensions(r,{dimensionsDefine:r.dimensionsDefine||e.get("dimensions"),encodeDefine:r.encodeDefine||e.get("encode"),coordDimensions:n.map(function(t){var r=e.getReferringComponents(t+"Axis3D")[0];return{type:r&&"category"===r.get("type")?"ordinal":"float",name:t}})});"cartesian3D"===e.get("coordinateSystem")&&a.forEach(function(t){if(n.indexOf(t.coordDim)>=0){var r=e.getReferringComponents(t.coordDim+"Axis3D")[0];r&&"category"===r.get("type")&&(t.ordinalMeta=r.getOrdinalMeta())}});var o=i.a.helper.dataStack.enableDataStack(e,a,{byIndex:!0,stackedCoordDimension:"z"}),s=new i.a.List(a,e);return s.setCalculationInfo(o),s.initData(r),s}},function(e,t){function r(e,t,r){return{seriesType:e,performRawSeries:!0,reset:function(e,n,i){function a(t,r){if("function"==typeof u){var n=e.getRawValue(r),i=e.getDataParams(r);t.setItemVisual(r,"symbolSize",u(n,i))}if(t.hasItemOption){var a=t.getItemModel(r),o=a.getShallow("symbol",!0),s=a.getShallow("symbolSize",!0),l=a.getShallow("symbolKeepAspect",!0);null!=o&&t.setItemVisual(r,"symbol",o),null!=s&&t.setItemVisual(r,"symbolSize",s),null!=l&&t.setItemVisual(r,"symbolKeepAspect",l)}}var o=e.getData(),s=e.get("symbol")||t,u=e.get("symbolSize"),l=e.get("symbolKeepAspect");if(o.setVisual({legendSymbol:r||s,symbol:s,symbolSize:u,symbolKeepAspect:l}),!n.isSeriesFiltered(e)){var h="function"==typeof u;return{dataEach:o.hasItemOption||h?a:null}}}}}e.exports=r},function(e,t,r){"use strict";function n(e){return e.material}function i(e,t,r){return t.uniforms[r].value}function a(e,t,r,n){return r!==n}function o(e){return!0}function s(){}function u(e,t,r){this.availableAttributes=e,this.availableAttributeSymbols=t,this.indicesBuffer=r,this.vao=null}function l(e){var t,r;this.bind=function(e){t||(t=f.a.createCanvas(),t.width=t.height=1,t.getContext("2d"));var n=e.gl,i=!r;i&&(r=n.createTexture()),n.bindTexture(n.TEXTURE_2D,r),i&&n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,t)},this.unbind=function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},this.isRenderable=function(){return!0}}var h=r(7),c=r(111),d=r(11),f=r(14),p=r(19),m=r(26),g=r(115),_=r(8),v=r(71),y=r(21),x=r(12);_.a.import(v.a);var T=y.a.create,b={},w={float:d.a.FLOAT,byte:d.a.BYTE,ubyte:d.a.UNSIGNED_BYTE,short:d.a.SHORT,ushort:d.a.UNSIGNED_SHORT},E=h.a.extend(function(){return{canvas:null,_width:100,_height:100,devicePixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,clearColor:[0,0,0,0],clearBit:17664,alpha:!0,depth:!0,stencil:!1,antialias:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,throwError:!0,gl:null,viewport:{},__currentFrameBuffer:null,_viewportStack:[],_clearStack:[],_sceneRendering:null}},function(){this.canvas||(this.canvas=f.a.createCanvas());var e=this.canvas;try{var t={alpha:this.alpha,depth:this.depth,stencil:this.stencil,antialias:this.antialias,premultipliedAlpha:this.premultipliedAlpha,preserveDrawingBuffer:this.preserveDrawingBuffer};if(this.gl=e.getContext("webgl",t)||e.getContext("experimental-webgl",t),!this.gl)throw new Error;this._glinfo=new c.a(this.gl),this.gl.targetRenderer&&console.error("Already created a renderer"),this.gl.targetRenderer=this,this.resize()}catch(e){throw"Error creating WebGL Context "+e}this._programMgr=new g.a(this),this._placeholderTexture=new l(this)},{resize:function(e,t){var r=this.canvas,n=this.devicePixelRatio;null!=e?(r.style.width=e+"px",r.style.height=t+"px",r.width=e*n,r.height=t*n,this._width=e,this._height=t):(this._width=r.width/n,this._height=r.height/n),this.setViewport(0,0,this._width,this._height)},getWidth:function(){return this._width},getHeight:function(){return this._height},getViewportAspect:function(){var e=this.viewport;return e.width/e.height},setDevicePixelRatio:function(e){this.devicePixelRatio=e,this.resize(this._width,this._height)},getDevicePixelRatio:function(){return this.devicePixelRatio},getGLExtension:function(e){return this._glinfo.getExtension(e)},getGLParameter:function(e){return this._glinfo.getParameter(e)},setViewport:function(e,t,r,n,i){if("object"==typeof e){var a=e;e=a.x,t=a.y,r=a.width,n=a.height,i=a.devicePixelRatio}i=i||this.devicePixelRatio,this.gl.viewport(e*i,t*i,r*i,n*i),this.viewport={x:e,y:t,width:r,height:n,devicePixelRatio:i}},saveViewport:function(){this._viewportStack.push(this.viewport)},restoreViewport:function(){this._viewportStack.length>0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var e=this._clearStack.pop();this.clearColor=e.clearColor,this.clearBit=e.clearBit}},bindSceneRendering:function(e){this._sceneRendering=e},render:function(e,t,r,n){var i=this.gl,a=this.clearColor;if(this.clearBit){i.colorMask(!0,!0,!0,!0),i.depthMask(!0);var o=this.viewport,s=!1,u=o.devicePixelRatio;(o.width!==this._width||o.height!==this._height||u&&u!==this.devicePixelRatio||o.x||o.y)&&(s=!0,i.enable(i.SCISSOR_TEST),i.scissor(o.x*u,o.y*u,o.width*u,o.height*u)),i.clearColor(a[0],a[1],a[2],a[3]),i.clear(this.clearBit),s&&i.disable(i.SCISSOR_TEST)}if(r||e.update(!1),e.updateLights(),!(t=t||e.getMainCamera()))return void console.error("Can't find camera in the scene.");t.update();var l=e.updateRenderList(t,!0);this._sceneRendering=e;var h=l.opaque,c=l.transparent,d=e.material;e.trigger("beforerender",this,e,t,l),n?(this.renderPreZ(h,e,t),i.depthFunc(i.LEQUAL)):i.depthFunc(i.LESS);for(var f=T(),p=x.a.create(),m=0;m0){var u=e[a-1],l=u.joints?u.joints.length:0;if((o.joints?o.joints.length:0)===l&&o.material===u.material&&o.lightGroup===u.lightGroup){o.__program=u.__program;continue}}var h=this._programMgr.getProgram(o,s,t);this.validateProgram(h),o.__program=h}},renderPass:function(e,t,r){this.trigger("beforerenderpass",this,e,t,r),r=r||{},r.getMaterial=r.getMaterial||n,r.getUniform=r.getUniform||i,r.isMaterialChanged=r.isMaterialChanged||a,r.beforeRender=r.beforeRender||s,r.afterRender=r.afterRender||s;var u=r.ifRender||o;this.updatePrograms(e,this._sceneRendering,r),r.sortCompare&&e.sort(r.sortCompare);var l=this.viewport,h=l.devicePixelRatio,c=[l.x*h,l.y*h,l.width*h,l.height*h],d=this.devicePixelRatio,f=this.__currentFrameBuffer?[this.__currentFrameBuffer.getTextureWidth(),this.__currentFrameBuffer.getTextureHeight()]:[this._width*d,this._height*d],p=[c[2],c[3]],m=Date.now();t?(y.a.copy(S.VIEW,t.viewMatrix.array),y.a.copy(S.PROJECTION,t.projectionMatrix.array),y.a.copy(S.VIEWINVERSE,t.worldTransform.array)):(y.a.identity(S.VIEW),y.a.identity(S.PROJECTION),y.a.identity(S.VIEWINVERSE)),y.a.multiply(S.VIEWPROJECTION,S.PROJECTION,S.VIEW),y.a.invert(S.PROJECTIONINVERSE,S.PROJECTION),y.a.invert(S.VIEWPROJECTIONINVERSE,S.VIEWPROJECTION);for(var g,_,v,x,T,b,w,E,A,M,C,L,D=this.gl,N=this._sceneRendering,R=this.getGLExtension("OES_vertex_array_object"),P=0;Pthis._glinfo.getMaxJointNumber()){var a=i.getSubSkinMatricesTexture(e.__uid__,e.joints);t.useTextureSlot(this,a,r),t.setUniform(n,"1i","skinMatricesTexture",r),t.setUniform(n,"1f","skinMatricesTextureSize",a.width)}else{var o=i.getSubSkinMatrices(e.__uid__,e.joints);t.setUniformOfSemantic(n,"SKIN_MATRIX",o)}},_renderObject:function(e,t){var r=this.gl,n=e.geometry,i=e.mode;if(null==i&&(i=4),t.indicesBuffer){var a=this.getGLExtension("OES_element_index_uint"),o=a&&n.indices instanceof Uint32Array,s=o?r.UNSIGNED_INT:r.UNSIGNED_SHORT;r.drawElements(i,t.indicesBuffer.count,s,0)}else r.drawArrays(i,0,n.vertexCount)},_bindMaterial:function(e,t,r,n,i,a,o){for(var s=this.gl,u=a===r,l=r.currentTextureSlot(),h=t.getEnabledUniforms(),c=t.getTextureUniforms(),d=this._placeholderTexture,f=0;fc)){var d=Math.sqrt(c-h),f=u-d,p=u+d;return a||(a=new n.a),f<0?p<0?null:(i.a.scaleAndAdd(a.array,o,s,p),a):(i.a.scaleAndAdd(a.array,o,s,f),a)}}}(),intersectBoundingBox:function(e,t){var r,a,o,s,u,l,h=this.direction.array,c=this.origin.array,d=e.min.array,f=e.max.array,p=1/h[0],m=1/h[1],g=1/h[2];if(p>=0?(r=(d[0]-c[0])*p,a=(f[0]-c[0])*p):(a=(d[0]-c[0])*p,r=(f[0]-c[0])*p),m>=0?(o=(d[1]-c[1])*m,s=(f[1]-c[1])*m):(s=(d[1]-c[1])*m,o=(f[1]-c[1])*m),r>s||o>a)return null;if((o>r||r!==r)&&(r=o),(s=0?(u=(d[2]-c[2])*g,l=(f[2]-c[2])*g):(l=(d[2]-c[2])*g,u=(f[2]-c[2])*g),r>l||u>a)return null;if((u>r||r!==r)&&(r=u),(l=0?r:a;return t||(t=new n.a),i.a.scaleAndAdd(t.array,c,h,_),t},intersectTriangle:function(){var e=i.a.create(),t=i.a.create(),r=i.a.create(),a=i.a.create();return function(o,s,u,l,h,c){var d=this.direction.array,f=this.origin.array;o=o.array,s=s.array,u=u.array,i.a.sub(e,s,o),i.a.sub(t,u,o),i.a.cross(a,t,d);var p=i.a.dot(e,a);if(l){if(p>-1e-5)return null}else if(p>-1e-5&&p<1e-5)return null;i.a.sub(r,f,o);var m=i.a.dot(a,r)/p;if(m<0||m>1)return null;i.a.cross(a,e,r);var g=i.a.dot(d,a)/p;if(g<0||g>1||m+g>1)return null;i.a.cross(a,e,t);var _=-i.a.dot(r,a)/p;return _<0?null:(h||(h=new n.a),c&&n.a.set(c,1-m-g,m,g),i.a.scaleAndAdd(h.array,f,d,_),h)}}(),applyTransform:function(e){n.a.add(this.direction,this.direction,this.origin),n.a.transformMat4(this.origin,this.origin,e),n.a.transformMat4(this.direction,this.direction,e),n.a.sub(this.direction,this.direction,this.origin),n.a.normalize(this.direction,this.direction)},copy:function(e){n.a.copy(this.origin,e.origin),n.a.copy(this.direction,e.direction)},clone:function(){var e=new a;return e.copy(this),e}},t.a=a},function(e,t,r){"use strict";var n=r(20),i=r(12),a=r(33),o=r(34),s={};s.create=function(){var e=new n.a(4);return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},s.rotationTo=function(){var e=i.a.create(),t=i.a.fromValues(1,0,0),r=i.a.fromValues(0,1,0);return function(n,a,o){var u=i.a.dot(a,o);return u<-.999999?(i.a.cross(e,t,a),i.a.length(e)<1e-6&&i.a.cross(e,r,a),i.a.normalize(e,e),s.setAxisAngle(n,e,Math.PI),n):u>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(i.a.cross(e,a,o),n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=1+u,s.normalize(n,n))}}(),s.setAxes=function(){var e=o.a.create();return function(t,r,n,i){return e[0]=n[0],e[3]=n[1],e[6]=n[2],e[1]=i[0],e[4]=i[1],e[7]=i[2],e[2]=-r[0],e[5]=-r[1],e[8]=-r[2],s.normalize(t,s.fromMat3(t,e))}}(),s.clone=a.a.clone,s.fromValues=a.a.fromValues,s.copy=a.a.copy,s.set=a.a.set,s.identity=function(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},s.setAxisAngle=function(e,t,r){r*=.5;var n=Math.sin(r);return e[0]=n*t[0],e[1]=n*t[1],e[2]=n*t[2],e[3]=Math.cos(r),e},s.add=a.a.add,s.multiply=function(e,t,r){var n=t[0],i=t[1],a=t[2],o=t[3],s=r[0],u=r[1],l=r[2],h=r[3];return e[0]=n*h+o*s+i*l-a*u,e[1]=i*h+o*u+a*s-n*l,e[2]=a*h+o*l+n*u-i*s,e[3]=o*h-n*s-i*u-a*l,e},s.mul=s.multiply,s.scale=a.a.scale,s.rotateX=function(e,t,r){r*=.5;var n=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(r),u=Math.cos(r);return e[0]=n*u+o*s,e[1]=i*u+a*s,e[2]=a*u-i*s,e[3]=o*u-n*s,e},s.rotateY=function(e,t,r){r*=.5;var n=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(r),u=Math.cos(r);return e[0]=n*u-a*s,e[1]=i*u+o*s,e[2]=a*u+n*s,e[3]=o*u-i*s,e},s.rotateZ=function(e,t,r){r*=.5;var n=t[0],i=t[1],a=t[2],o=t[3],s=Math.sin(r),u=Math.cos(r);return e[0]=n*u+i*s,e[1]=i*u-n*s,e[2]=a*u+o*s,e[3]=o*u-a*s,e},s.calculateW=function(e,t){var r=t[0],n=t[1],i=t[2];return e[0]=r,e[1]=n,e[2]=i,e[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),e},s.dot=a.a.dot,s.lerp=a.a.lerp,s.slerp=function(e,t,r,n){var i,a,o,s,u,l=t[0],h=t[1],c=t[2],d=t[3],f=r[0],p=r[1],m=r[2],g=r[3];return a=l*f+h*p+c*m+d*g,a<0&&(a=-a,f=-f,p=-p,m=-m,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,u=Math.sin(n*i)/o):(s=1-n,u=n),e[0]=s*l+u*f,e[1]=s*h+u*p,e[2]=s*c+u*m,e[3]=s*d+u*g,e},s.invert=function(e,t){var r=t[0],n=t[1],i=t[2],a=t[3],o=r*r+n*n+i*i+a*a,s=o?1/o:0;return e[0]=-r*s,e[1]=-n*s,e[2]=-i*s,e[3]=a*s,e},s.conjugate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e},s.length=a.a.length,s.len=s.length,s.squaredLength=a.a.squaredLength,s.sqrLen=s.squaredLength,s.normalize=a.a.normalize,s.fromMat3=function(e,t){var r,n=t[0]+t[4]+t[8];if(n>0)r=Math.sqrt(n+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{var i=0;t[4]>t[0]&&(i=1),t[8]>t[3*i+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;r=Math.sqrt(t[3*i+i]-t[3*a+a]-t[3*o+o]+1),e[i]=.5*r,r=.5/r,e[3]=(t[3*a+o]-t[3*o+a])*r,e[a]=(t[3*a+i]+t[3*i+a])*r,e[o]=(t[3*o+i]+t[3*i+o])*r}return e},t.a=s},function(e,t,r){"use strict";var n=r(55),i=r(34),a=function(e,t,r,i){e=e||0,t=t||0,r=r||0,i=void 0===i?1:i,this.array=n.a.fromValues(e,t,r,i),this._dirty=!0};a.prototype={constructor:a,add:function(e){return n.a.add(this.array,this.array,e.array),this._dirty=!0,this},calculateW:function(){return n.a.calculateW(this.array,this.array),this._dirty=!0,this},set:function(e,t,r,n){return this.array[0]=e,this.array[1]=t,this.array[2]=r,this.array[3]=n,this._dirty=!0,this},setArray:function(e){return this.array[0]=e[0],this.array[1]=e[1],this.array[2]=e[2],this.array[3]=e[3],this._dirty=!0,this},clone:function(){return new a(this.x,this.y,this.z,this.w)},conjugate:function(){return n.a.conjugate(this.array,this.array),this._dirty=!0,this},copy:function(e){return n.a.copy(this.array,e.array),this._dirty=!0,this},dot:function(e){return n.a.dot(this.array,e.array)},fromMat3:function(e){return n.a.fromMat3(this.array,e.array),this._dirty=!0,this},fromMat4:function(){var e=i.a.create();return function(t){return i.a.fromMat4(e,t.array),i.a.transpose(e,e),n.a.fromMat3(this.array,e),this._dirty=!0,this}}(),identity:function(){return n.a.identity(this.array),this._dirty=!0,this},invert:function(){return n.a.invert(this.array,this.array),this._dirty=!0,this},len:function(){return n.a.len(this.array)},length:function(){return n.a.length(this.array)},lerp:function(e,t,r){return n.a.lerp(this.array,e.array,t.array,r),this._dirty=!0,this},mul:function(e){return n.a.mul(this.array,this.array,e.array),this._dirty=!0,this},mulLeft:function(e){return n.a.multiply(this.array,e.array,this.array),this._dirty=!0,this},multiply:function(e){return n.a.multiply(this.array,this.array,e.array),this._dirty=!0,this},multiplyLeft:function(e){return n.a.multiply(this.array,e.array,this.array),this._dirty=!0,this},normalize:function(){return n.a.normalize(this.array,this.array),this._dirty=!0,this},rotateX:function(e){return n.a.rotateX(this.array,this.array,e),this._dirty=!0,this},rotateY:function(e){return n.a.rotateY(this.array,this.array,e),this._dirty=!0,this},rotateZ:function(e){return n.a.rotateZ(this.array,this.array,e),this._dirty=!0,this},rotationTo:function(e,t){return n.a.rotationTo(this.array,e.array,t.array),this._dirty=!0,this},setAxes:function(e,t,r){return n.a.setAxes(this.array,e.array,t.array,r.array),this._dirty=!0,this},setAxisAngle:function(e,t){return n.a.setAxisAngle(this.array,e.array,t),this._dirty=!0,this},slerp:function(e,t,r){return n.a.slerp(this.array,e.array,t.array,r),this._dirty=!0,this},sqrLen:function(){return n.a.sqrLen(this.array)},squaredLength:function(){return n.a.squaredLength(this.array)},fromEuler:function(e,t){return a.fromEuler(this,e,t)},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}};var o=Object.defineProperty;if(o){var s=a.prototype;o(s,"x",{get:function(){return this.array[0]},set:function(e){this.array[0]=e,this._dirty=!0}}),o(s,"y",{get:function(){return this.array[1]},set:function(e){this.array[1]=e,this._dirty=!0}}),o(s,"z",{get:function(){return this.array[2]},set:function(e){this.array[2]=e,this._dirty=!0}}),o(s,"w",{get:function(){return this.array[3]},set:function(e){this.array[3]=e,this._dirty=!0}})}a.add=function(e,t,r){return n.a.add(e.array,t.array,r.array),e._dirty=!0,e},a.set=function(e,t,r,i,a){n.a.set(e.array,t,r,i,a),e._dirty=!0},a.copy=function(e,t){return n.a.copy(e.array,t.array),e._dirty=!0,e},a.calculateW=function(e,t){return n.a.calculateW(e.array,t.array),e._dirty=!0,e},a.conjugate=function(e,t){return n.a.conjugate(e.array,t.array),e._dirty=!0,e},a.identity=function(e){return n.a.identity(e.array),e._dirty=!0,e},a.invert=function(e,t){return n.a.invert(e.array,t.array),e._dirty=!0,e},a.dot=function(e,t){return n.a.dot(e.array,t.array)},a.len=function(e){return n.a.length(e.array)},a.lerp=function(e,t,r,i){return n.a.lerp(e.array,t.array,r.array,i),e._dirty=!0,e},a.slerp=function(e,t,r,i){return n.a.slerp(e.array,t.array,r.array,i),e._dirty=!0,e},a.mul=function(e,t,r){return n.a.multiply(e.array,t.array,r.array),e._dirty=!0,e},a.multiply=a.mul,a.rotateX=function(e,t,r){return n.a.rotateX(e.array,t.array,r),e._dirty=!0,e},a.rotateY=function(e,t,r){return n.a.rotateY(e.array,t.array,r),e._dirty=!0,e},a.rotateZ=function(e,t,r){return n.a.rotateZ(e.array,t.array,r),e._dirty=!0,e},a.setAxisAngle=function(e,t,r){return n.a.setAxisAngle(e.array,t.array,r),e._dirty=!0,e},a.normalize=function(e,t){return n.a.normalize(e.array,t.array),e._dirty=!0,e},a.sqrLen=function(e){return n.a.sqrLen(e.array)},a.squaredLength=a.sqrLen,a.fromMat3=function(e,t){return n.a.fromMat3(e.array,t.array),e._dirty=!0,e},a.setAxes=function(e,t,r,i){return n.a.setAxes(e.array,t.array,r.array,i.array),e._dirty=!0,e},a.rotationTo=function(e,t,r){return n.a.rotationTo(e.array,t.array,r.array),e._dirty=!0,e},a.fromEuler=function(e,t,r){e._dirty=!0,t=t.array;var n=e.array,i=Math.cos(t[0]/2),a=Math.cos(t[1]/2),o=Math.cos(t[2]/2),s=Math.sin(t[0]/2),u=Math.sin(t[1]/2),l=Math.sin(t[2]/2),r=(r||"XYZ").toUpperCase();switch(r){case"XYZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"YXZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"ZXY":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"ZYX":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"YZX":n[0]=s*a*o+i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o-s*u*l;break;case"XZY":n[0]=s*a*o-i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o+s*u*l}},t.a=a},function(e,t,r){"use strict";var n=function(){this._contextId=0,this._caches=[],this._context={}};n.prototype={use:function(e,t){var r=this._caches;r[e]||(r[e]={},t&&(r[e]=t())),this._contextId=e,this._context=r[e]},put:function(e,t){this._context[e]=t},get:function(e){return this._context[e]},dirty:function(e){e=e||"";var t="__dt__"+e;this.put(t,!0)},dirtyAll:function(e){e=e||"";for(var t="__dt__"+e,r=this._caches,n=0;n=this._maxSize&&o>0){var u=r.head;r.remove(u),delete n[u.key],a=u.value,this._lastRemovedEntry=u}s?s.value=t:s=new i(t),s.key=e,r.insertEntry(s),n[e]=s}return a},o.get=function(e){var t=this._map[e],r=this._list;if(null!=t)return t!==r.tail&&(r.remove(t),r.insertEntry(t)),t.value},o.clear=function(){this._list.clear(),this._map={}};var s=a;e.exports=s},function(e,t,r){"use strict";var n=r(5),i=r(27),a=r(14),o=r(62),s=r(75),u=r(36),l=r(122),h=r(123),c={loadTexture:function(e,t,r,a){var o;if("function"==typeof t?(r=t,a=r,t={}):t=t||{},"string"==typeof e){if(e.match(/.hdr$/)||"hdr"===t.fileType)return o=new n.a({width:0,height:0,sRGB:!1}),c._fetchTexture(e,function(e){h.a.parseRGBE(e,o,t.exposure),o.dirty(),r&&r(o)},a),o;e.match(/.dds$/)||"dds"===t.fileType?(o=new n.a({width:0,height:0}),c._fetchTexture(e,function(e){l.a.parse(e,o),o.dirty(),r&&r(o)},a)):(o=new n.a,o.load(e),o.success(r),o.error(a))}else"object"==typeof e&&void 0!==e.px&&(o=new i.a,o.load(e),o.success(r),o.error(a));return o},loadPanorama:function(e,t,r,n,i,a){var o=this;"function"==typeof n?(i=n,a=i,n={}):n=n||{},c.loadTexture(t,n,function(t){t.flipY=n.flipY||!1,o.panoramaToCubeMap(e,t,r,n),t.dispose(e),i&&i(r)},a)},panoramaToCubeMap:function(e,t,r,n){var i=new o.a,a=new s.a({scene:new u.a});return a.setEnvironmentMap(t),n=n||{},n.encodeRGBM&&a.material.define("fragment","RGBM_ENCODE"),r.sRGB=t.sRGB,i.texture=r,i.render(e,a.scene),i.texture=null,i.dispose(e),r},heightToNormal:function(e,t){var r=document.createElement("canvas"),n=r.width=e.width,i=r.height=e.height,a=r.getContext("2d");a.drawImage(e,0,0,n,i),t=t||!1;for(var o=a.getImageData(0,0,n,i),s=a.createImageData(n,i),u=0;u20)return console.warn("Given image is not a height map"),e}var d,f,p,m;u%(4*n)==0?(d=o.data[u],p=o.data[u+4]):u%(4*n)==4*(n-1)?(d=o.data[u-4],p=o.data[u]):(d=o.data[u-4],p=o.data[u+4]),u<4*n?(f=o.data[u],m=o.data[u+4*n]):u>n*(i-1)*4?(f=o.data[u-4*n],m=o.data[u]):(f=o.data[u-4*n],m=o.data[u+4*n]),s.data[u]=d-p+127,s.data[u+1]=f-m+127,s.data[u+2]=255,s.data[u+3]=255}return a.putImageData(s,0,0),r},isHeightImage:function(e,t,r){if(!e||!e.width||!e.height)return!1;var n=document.createElement("canvas"),i=n.getContext("2d"),a=t||32;r=r||20,n.width=n.height=a,i.drawImage(e,0,0,a,a);for(var o=i.getImageData(0,0,a,a),s=0;sr)return!1}return!0},_fetchTexture:function(e,t,r){a.a.request.get({url:e,responseType:"arraybuffer",onload:t,onerror:r})},createChessboard:function(e,t,r,i){e=e||512,t=t||64,r=r||"black",i=i||"white";var a=Math.ceil(e/t),o=document.createElement("canvas");o.width=e,o.height=e;var s=o.getContext("2d");s.fillStyle=i,s.fillRect(0,0,e,e),s.fillStyle=r;for(var u=0;u65535?new Uint32Array(3*s):new Uint16Array(3*s),f.material.shader!==t&&f.material.attachShader(t,!0),o.a.setMaterialFromModel(t.__shading,f.material,e,r),u>0&&(this._linesMesh.geometry.resetOffset(),this._linesMesh.geometry.setVertexCount(u),this._linesMesh.geometry.setTriangleCount(l)),this._dataIndexOfVertex=new Uint32Array(a),this._vertexRangeOfDataIndex=new Uint32Array(2*(i-n))},_updateRegionMesh:function(e,t,r,n){for(var i=e.getData(),a=0,s=0,u=!1,h=this._polygonMesh,c=this._linesMesh,d=r;d0;E&&(w*=t.getDevicePixelRatio(),this._updateLinesGeometry(c.geometry,e,d,x,w,e.coordinateSystem.transform)),c.invisible=!E,c.material.set({color:v})}var h=this._polygonMesh;h.material.transparent=u,h.material.depthMask=!u,h.geometry.updateBoundingBox(),h.frontFace=this.extrudeY?o.a.Mesh.CCW:o.a.Mesh.CW,h.material.get("normalMap")&&h.geometry.generateTangents(),h.seriesIndex=e.seriesIndex,h.on("mousemove",this._onmousemove,this),h.on("mouseout",this._onmouseout,this)},_updateDebugWireframe:function(e){var t=e.getModel("debug.wireframe");if(t.get("show")){var r=o.a.parseColor(t.get("lineStyle.color")||"rgba(0,0,0,0.5)"),n=l.a.firstNotNull(t.get("lineStyle.width"),1),i=this._polygonMesh;i.geometry.generateBarycentric(),i.material.define("both","WIREFRAME_TRIANGLE"),i.material.set("wireframeLineColor",r),i.material.set("wireframeLineWidth",n)}},_onmousemove:function(e){var t=this._dataIndexOfVertex[e.triangle[0]];null==t&&(t=-1),t!==this._lastHoverDataIndex&&(this.downplay(this._lastHoverDataIndex),this.highlight(t),this._labelsBuilder.updateLabels([t])),this._lastHoverDataIndex=t,this._polygonMesh.dataIndex=t},_onmouseout:function(e){e.target&&(this.downplay(this._lastHoverDataIndex),this._lastHoverDataIndex=-1,this._polygonMesh.dataIndex=-1),this._labelsBuilder.updateLabels([])},_updateGroundPlane:function(e,t,r){var n=e.getModel("groundPlane",e);if(this._groundMesh.invisible=!n.get("show",!0),!this._groundMesh.invisible){var i=e.get("shading"),a=this._groundMaterials[i];a||(a=this._groundMaterials.lambert),o.a.setMaterialFromModel(i,a,n,r),a.get("normalMap")&&this._groundMesh.geometry.generateTangents(),this._groundMesh.material=a,this._groundMesh.material.set("color",o.a.parseColor(n.get("color"))),this._groundMesh.scale.set(t.size[0],t.size[2],1)}},_triangulation:function(e,t,r){this._triangulationResults=[];for(var n=[1/0,1/0,1/0],i=[-1/0,-1/0,-1/0],a=e.coordinateSystem,o=t;o1?n:0,R[V][y]=C.points[W+2],h.set(i+V,R[V]),l?(F[0]=(C.points[W]*x[0]-T[0])/w,F[1]=(C.points[W+2]*x[y]-T[y])/w):(F[0]=(k?B:B+H)/w,F[1]=(R[V][v]*x[v]-T[v])/w),d.set(i+V,F)}p.sub(P,R[1],R[0]),p.sub(I,R[3],R[0]),p.cross(O,P,I),p.normalize(O,O);for(var V=0;V<4;V++)c.set(i+V,O),g&&f.set(i+V,o);for(var V=0;V<6;V++)_[3*a+V]=N[V]+i;i+=4,a+=2,B+=H}}return t.dirty(),{vertexOffset:i,triangleOffset:a}},_getRegionLinesInfo:function(e,t,r){var n=0,i=0;t.getRegionModel(e).getModel("itemStyle").get("borderWidth")>0&&t.getRegionPolygonCoords(e).forEach(function(e){var t=e.exterior,a=e.interiors;n+=r.getPolylineVertexCount(t),i+=r.getPolylineTriangleCount(t);for(var o=0;othis._endIndex)){t-=this._startIndex;for(var n=this._vertexRangeOfDataIndex[2*t];n=2e4},doSortTriangles:function(e,t){var r=this.indices;if(0===t){var n=this.attributes.position,e=e.array;this._triangleZList&&this._triangleZList.length===this.triangleCount||(this._triangleZList=new Float32Array(this.triangleCount),this._sortedTriangleIndices=new Uint32Array(this.triangleCount),this._indicesTmp=new r.constructor(r.length),this._triangleZListTmp=new Float32Array(this.triangleCount));for(var i,l=0,h=0;h0,r={},n=0;n2?(g=this._updateSymbolSprite(e,p,d,f),u.enableTexture("sprite")):u.disableTexture("sprite"),c.position.init(i-n);var _=[];if(m){u.undefine("VERTEX_SIZE"),u.undefine("VERTEX_COLOR");var v=o.getVisual("color"),y=o.getVisual("opacity");s.a.parseColor(v,_),_[3]*=y,u.set({color:_,u_Size:d.maxSize*this._sizeScale})}else u.set({color:[1,1,1,1]}),u.define("VERTEX_SIZE"),u.define("VERTEX_COLOR"),c.size.init(i-n),c.color.init(i-n),this._originalOpacity=new Float32Array(i-n);for(var x=o.getLayout("points"),T=c.position.value,b=0;b1?(a[0]=r.maxSize,a[1]=r.maxSize/r.aspect):(a[1]=r.maxSize,a[0]=r.maxSize*r.aspect),a[0]=a[0]||1,a[1]=a[1]||1,this._symbolType===r.type&&n(this._symbolSize,a)&&this._lineWidth===t.lineWidth||(u.a.createSymbolSprite(r.type,a,{fill:"#fff",lineWidth:t.lineWidth,stroke:"transparent",shadowColor:"transparent",minMargin:Math.min(a[0]/2,10)},this._spriteImageCanvas),u.a.createSDFFromCanvas(this._spriteImageCanvas,Math.min(this._spriteImageCanvas.width,32),20,this._mesh.material.get("sprite").image),this._symbolType=r.type,this._symbolSize=a,this._lineWidth=t.lineWidth),this._spriteImageCanvas.width/r.maxSize*i},_updateMaterial:function(e,t){var r="lighter"===e.get("blendMode")?s.a.additiveBlend:null,n=this._mesh.material;n.blend=r,n.set("lineWidth",t.lineWidth/20);var i=s.a.parseColor(t.stroke);n.set("strokeColor",i),n.transparent=!0,n.depthMask=!1,n.depthTest=!this.is2D,n.sortVertices=!this.is2D},_updateLabelBuilder:function(e,t,r){var n=e.getData(),i=this._mesh.geometry,a=i.attributes.position.value,t=this._startDataIndex,o=this._mesh.sizeScale;this._labelsBuilder.updateData(n,t,r),this._labelsBuilder.getLabelPosition=function(e,r,n){var i=3*(e-t);return[a[i],a[i+1],a[i+2]]},this._labelsBuilder.getLabelDistance=function(e,r,n){return i.attributes.size.get(e-t)/o/2+n},this._labelsBuilder.updateLabels()},_updateAnimation:function(e){s.a.updateVertexAnimation([["prevPosition","position"],["prevSize","size"]],this._prevMesh,this._mesh,e)},_updateHandler:function(e,t,r){var n,i=e.getData(),a=this._mesh,o=this,s=-1,u=e.coordinateSystem&&"cartesian3D"===e.coordinateSystem.type;u&&(n=e.coordinateSystem.model),a.seriesIndex=e.seriesIndex,a.off("mousemove"),a.off("mouseout"),a.on("mousemove",function(t){var l=t.vertexIndex+o._startDataIndex;l!==s&&(this.highlightOnMouseover&&(this.downplay(i,s),this.highlight(i,l),this._labelsBuilder.updateLabels([l])),u&&r.dispatchAction({type:"grid3DShowAxisPointer",value:[i.get(e.coordDimToDataDim("x")[0],l),i.get(e.coordDimToDataDim("y")[0],l),i.get(e.coordDimToDataDim("z")[0],l)],grid3DIndex:n.componentIndex})),a.dataIndex=l,s=l},this),a.on("mouseout",function(e){var t=e.vertexIndex+o._startDataIndex;this.highlightOnMouseover&&(this.downplay(i,t),this._labelsBuilder.updateLabels()),s=-1,a.dataIndex=-1,u&&r.dispatchAction({type:"grid3DHideAxisPointer",grid3DIndex:n.componentIndex})},this)},updateLayout:function(e,t,r){var n=e.getData();if(this._mesh){var i=this._mesh.geometry.attributes.position.value,a=n.getLayout("points");if(this.is2D)for(var o=0;othis._endDataIndex||tthis._endDataIndex||t=this._maxSize&&r>0){var n=this._list.head;this._list.remove(n),delete this._map[n.key]}var i=this._list.insert(t);i.key=e,this._map[e]=i}},i.prototype.get=function(e){var t=this._map[e];if(this._map.hasOwnProperty(e))return t!==this._list.tail&&(this._list.remove(t),this._list.insertEntry(t)),t.value},i.prototype.remove=function(e){var t=this._map[e];void 0!==t&&(delete this._map[e],this._list.remove(t))},i.prototype.clear=function(){this._list.clear(),this._map={}},t.a=i},function(e,t,r){"use strict";var n=r(20),i={};i.create=function(){var e=new n.a(2);return e[0]=0,e[1]=0,e},i.clone=function(e){var t=new n.a(2);return t[0]=e[0],t[1]=e[1],t},i.fromValues=function(e,t){var r=new n.a(2);return r[0]=e,r[1]=t,r},i.copy=function(e,t){return e[0]=t[0],e[1]=t[1],e},i.set=function(e,t,r){return e[0]=t,e[1]=r,e},i.add=function(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e},i.subtract=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e},i.sub=i.subtract,i.multiply=function(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e},i.mul=i.multiply,i.divide=function(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e},i.div=i.divide,i.min=function(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e},i.max=function(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e},i.scale=function(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e},i.scaleAndAdd=function(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e},i.distance=function(e,t){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)},i.dist=i.distance,i.squaredDistance=function(e,t){var r=t[0]-e[0],n=t[1]-e[1];return r*r+n*n},i.sqrDist=i.squaredDistance,i.length=function(e){var t=e[0],r=e[1];return Math.sqrt(t*t+r*r)},i.len=i.length,i.squaredLength=function(e){var t=e[0],r=e[1];return t*t+r*r},i.sqrLen=i.squaredLength,i.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e},i.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e},i.normalize=function(e,t){var r=t[0],n=t[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),e[0]=t[0]*i,e[1]=t[1]*i),e},i.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},i.cross=function(e,t,r){var n=t[0]*r[1]-t[1]*r[0];return e[0]=e[1]=0,e[2]=n,e},i.lerp=function(e,t,r,n){var i=t[0],a=t[1];return e[0]=i+n*(r[0]-i),e[1]=a+n*(r[1]-a),e},i.random=function(e,t){t=t||1;var r=2*GLMAT_RANDOM()*Math.PI;return e[0]=Math.cos(r)*t,e[1]=Math.sin(r)*t,e},i.transformMat2=function(e,t,r){var n=t[0],i=t[1];return e[0]=r[0]*n+r[2]*i,e[1]=r[1]*n+r[3]*i,e},i.transformMat2d=function(e,t,r){var n=t[0],i=t[1];return e[0]=r[0]*n+r[2]*i+r[4],e[1]=r[1]*n+r[3]*i+r[5],e},i.transformMat3=function(e,t,r){var n=t[0],i=t[1];return e[0]=r[0]*n+r[3]*i+r[6],e[1]=r[1]*n+r[4]*i+r[7],e},i.transformMat4=function(e,t,r){var n=t[0],i=t[1];return e[0]=r[0]*n+r[4]*i+r[12],e[1]=r[1]*n+r[5]*i+r[13],e},i.forEach=function(){var e=i.create();return function(t,r,n,i,a,o){var s,u;for(r||(r=2),n||(n=0),u=i?Math.min(i*r+n,t.length):t.length,s=n;s0},beforeRender:function(e){},afterRender:function(e,t){},getBoundingBox:function(e,t){return t=n.a.prototype.getBoundingBox.call(this,e,t),this.geometry&&this.geometry.boundingBox&&t.union(this.geometry.boundingBox),t},clone:function(){var e=["castShadow","receiveShadow","mode","culling","cullFace","frontFace","frustumCulling","renderOrder","lineWidth","ignorePicking","ignorePreZ","ignoreGBuffer"];return function(){var t=n.a.prototype.clone.call(this);t.geometry=this.geometry,t.material=this.material;for(var r=0;r>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},n.nearestPowerOfTwo=function(e){return Math.pow(2,Math.round(Math.log(e)/Math.LN2))},t.a=n},function(e,t,r){"use strict";var n=r(3),i=r(21),a=r(12),o=r(33),s=function(e,t){this.normal=e||new n.a(0,1,0),this.distance=t||0};s.prototype={constructor:s,distanceToPoint:function(e){return a.a.dot(e.array,this.normal.array)-this.distance},projectPoint:function(e,t){t||(t=new n.a);var r=this.distanceToPoint(e);return a.a.scaleAndAdd(t.array,e.array,this.normal.array,-r),t._dirty=!0,t},normalize:function(){var e=1/a.a.len(this.normal.array);a.a.scale(this.normal.array,e),this.distance*=e},intersectFrustum:function(e){for(var t=e.vertices,r=this.normal.array,n=a.a.dot(t[0].array,r)>this.distance,i=1;i<8;i++)if(a.a.dot(t[i].array,r)>this.distance!=n)return!0},intersectLine:function(){var e=a.a.create();return function(t,r,i){var o=this.distanceToPoint(t),s=this.distanceToPoint(r);if(o>0&&s>0||o<0&&s<0)return null;var u=this.normal.array,l=this.distance,h=t.array;a.a.sub(e,r.array,t.array),a.a.normalize(e,e);var c=a.a.dot(u,e);if(0===c)return null;i||(i=new n.a);var d=(a.a.dot(u,h)-l)/c;return a.a.scaleAndAdd(i.array,h,e,-d),i._dirty=!0,i}}(),applyTransform:function(){var e=i.a.create(),t=o.a.create(),r=o.a.create();return r[3]=1,function(n){n=n.array,a.a.scale(r,this.normal.array,this.distance),o.a.transformMat4(r,r,n),this.distance=a.a.dot(r,this.normal.array),i.a.invert(e,n),i.a.transpose(e,e),t[3]=0,a.a.copy(t,this.normal.array),o.a.transformMat4(t,t,e),a.a.copy(this.normal.array,t)}}(),copy:function(e){a.a.copy(this.normal.array,e.normal.array),this.normal._dirty=!0,this.distance=e.distance},clone:function(){var e=new s;return e.copy(this),e}},t.a=s},function(e,t,r){"use strict";var n=r(42);t.a=n.a},function(e,t,r){"use strict";function n(e,t,r){h.identity();var n=new a.a({widthSegments:t,heightSegments:r});switch(e){case"px":o.a.translate(h,h,s.a.POSITIVE_X),o.a.rotateY(h,h,Math.PI/2);break;case"nx":o.a.translate(h,h,s.a.NEGATIVE_X),o.a.rotateY(h,h,-Math.PI/2);break;case"py":o.a.translate(h,h,s.a.POSITIVE_Y),o.a.rotateX(h,h,-Math.PI/2);break;case"ny":o.a.translate(h,h,s.a.NEGATIVE_Y),o.a.rotateX(h,h,Math.PI/2);break;case"pz":o.a.translate(h,h,s.a.POSITIVE_Z);break;case"nz":o.a.translate(h,h,s.a.NEGATIVE_Z),o.a.rotateY(h,h,Math.PI)}return n.applyTransform(h),n}var i=r(15),a=r(43),o=r(9),s=r(3),u=r(18),l=r(14),h=new o.a,c=i.a.extend({dynamic:!1,widthSegments:1,heightSegments:1,depthSegments:1,inside:!1},function(){this.build()},{build:function(){var e={px:n("px",this.depthSegments,this.heightSegments),nx:n("nx",this.depthSegments,this.heightSegments),py:n("py",this.widthSegments,this.depthSegments),ny:n("ny",this.widthSegments,this.depthSegments),pz:n("pz",this.widthSegments,this.heightSegments),nz:n("nz",this.widthSegments,this.heightSegments)},t=["position","texcoord0","normal"],r=0,i=0;for(var a in e)r+=e[a].vertexCount,i+=e[a].indices.length;for(var o=0;o>>16)>>>0;c=((1431655765&c)<<1|(2863311530&c)>>>1)>>>0,c=((858993459&c)<<2|(3435973836&c)>>>2)>>>0,c=((252645135&c)<<4|(4042322160&c)>>>4)>>>0,c=(((16711935&c)<<8|(4278255360&c)>>>8)>>>0)/4294967296;var d=Math.sqrt((1-c)/(1+(l*l-1)*c));o[h]=d}for(var h=0;ho&&(i=this._x=0,a+=this._rowHeight+u,this._y=a,this._rowHeight=0),this._x+=t+u,this._rowHeight=Math.max(this._rowHeight,r),a+r+u>s)return null;e.position[0]+=this.offsetX*this.dpr+i,e.position[1]+=this.offsetY*this.dpr+a,this._zr.add(e);var l=[this.offsetX/this.width,this.offsetY/this.height];return[[i/o+l[0],a/s+l[1]],[(i+t)/o+l[0],(a+r)/s+l[1]]]},_fitElement:function(e,t,r){var n=e.getBoundingRect(),i=t/n.width,a=r/n.height;e.position=[-n.x*i,-n.y*a],e.scale=[i,a],e.update()}},i.prototype={clear:function(){for(var e=0;e=e)){var o=(i+this._nodeWidth)*this._dpr,s=(a+this._nodeHeight)*this._dpr;try{this._zr.resize({width:o,height:s})}catch(e){this._canvas.width=o,this._canvas.height=s}var u=new n(this._zr,i,a,this._nodeWidth,this._nodeHeight,this._gap,this._dpr);return this._textureAtlasNodes.push(u),u}},add:function(e,t,r){if(this._coords[e.id])return this._coords[e.id];var n=this._getCurrentNode().add(e,t,r);if(!n){var i=this._expand();if(!i)return;n=i.add(e,t,r)}return this._coords[e.id]=n,n},getCoordsScale:function(){var e=this._dpr;return[this._nodeWidth/this._canvas.width*e,this._nodeHeight/this._canvas.height*e]},getCoords:function(e){return this._coords[e]}},t.a=i},function(e,t,r){function n(e,t,r,n){r<0&&(e+=r,r=-r),n<0&&(t+=n,n=-n),this.x=e,this.y=t,this.width=r,this.height=n}var i=r(83),a=r(84),o=i.applyTransform,s=Math.min,u=Math.max;n.prototype={constructor:n,union:function(e){var t=s(e.x,this.x),r=s(e.y,this.y);this.width=u(e.x+e.width,this.x+this.width)-t,this.height=u(e.y+e.height,this.y+this.height)-r,this.x=t,this.y=r},applyTransform:function(){var e=[],t=[],r=[],n=[];return function(i){if(i){e[0]=r[0]=this.x,e[1]=n[1]=this.y,t[0]=n[0]=this.x+this.width,t[1]=r[1]=this.y+this.height,o(e,e,i),o(t,t,i),o(r,r,i),o(n,n,i),this.x=s(e[0],t[0],r[0],n[0]),this.y=s(e[1],t[1],r[1],n[1]);var a=u(e[0],t[0],r[0],n[0]),l=u(e[1],t[1],r[1],n[1]);this.width=a-this.x,this.height=l-this.y}}}(),calculateTransform:function(e){var t=this,r=e.width/t.width,n=e.height/t.height,i=a.create();return a.translate(i,i,[-t.x,-t.y]),a.scale(i,i,[r,n]),a.translate(i,i,[e.x,e.y]),i},intersect:function(e){if(!e)return!1;e instanceof n||(e=n.create(e));var t=this,r=t.x,i=t.x+t.width,a=t.y,o=t.y+t.height,s=e.x,u=e.x+e.width,l=e.y,h=e.y+e.height;return!(i=r.x&&e<=r.x+r.width&&t>=r.y&&t<=r.y+r.height},clone:function(){return new n(this.x,this.y,this.width,this.height)},copy:function(e){this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},n.create=function(e){return new n(e.x,e.y,e.width,e.height)};var l=n;e.exports=l},function(e,t){function r(e,t){var r=new w(2);return null==e&&(e=0),null==t&&(t=0),r[0]=e,r[1]=t,r}function n(e,t){return e[0]=t[0],e[1]=t[1],e}function i(e){var t=new w(2);return t[0]=e[0],t[1]=e[1],t}function a(e,t,r){return e[0]=t,e[1]=r,e}function o(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e}function s(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e}function u(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e}function l(e){return Math.sqrt(h(e))}function h(e){return e[0]*e[0]+e[1]*e[1]}function c(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e}function d(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e}function f(e,t){return e[0]*t[0]+e[1]*t[1]}function p(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e}function m(e,t){var r=l(t);return 0===r?(e[0]=0,e[1]=0):(e[0]=t[0]/r,e[1]=t[1]/r),e}function g(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))}function _(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])}function v(e,t){return e[0]=-t[0],e[1]=-t[1],e}function y(e,t,r,n){return e[0]=t[0]+n*(r[0]-t[0]),e[1]=t[1]+n*(r[1]-t[1]),e}function x(e,t,r){var n=t[0],i=t[1];return e[0]=r[0]*n+r[2]*i+r[4],e[1]=r[1]*n+r[3]*i+r[5],e}function T(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e}function b(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e}var w="undefined"==typeof Float32Array?Array:Float32Array,E=l,S=h,A=g,M=_;t.create=r,t.copy=n,t.clone=i,t.set=a,t.add=o,t.scaleAndAdd=s,t.sub=u,t.len=l,t.length=E,t.lenSquare=h,t.lengthSquare=S,t.mul=c,t.div=d,t.dot=f,t.scale=p,t.normalize=m,t.distance=g,t.dist=A,t.distanceSquare=_,t.distSquare=M,t.negate=v,t.lerp=y,t.applyTransform=x,t.min=T,t.max=b},function(e,t){function r(){var e=new c(6);return n(e),e}function n(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e}function i(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function a(e,t,r){var n=t[0]*r[0]+t[2]*r[1],i=t[1]*r[0]+t[3]*r[1],a=t[0]*r[2]+t[2]*r[3],o=t[1]*r[2]+t[3]*r[3],s=t[0]*r[4]+t[2]*r[5]+t[4],u=t[1]*r[4]+t[3]*r[5]+t[5];return e[0]=n,e[1]=i,e[2]=a,e[3]=o,e[4]=s,e[5]=u,e}function o(e,t,r){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+r[0],e[5]=t[5]+r[1],e}function s(e,t,r){var n=t[0],i=t[2],a=t[4],o=t[1],s=t[3],u=t[5],l=Math.sin(r),h=Math.cos(r);return e[0]=n*h+o*l,e[1]=-n*l+o*h,e[2]=i*h+s*l,e[3]=-i*l+h*s,e[4]=h*a+l*u,e[5]=h*u-l*a,e}function u(e,t,r){var n=r[0],i=r[1];return e[0]=t[0]*n,e[1]=t[1]*i,e[2]=t[2]*n,e[3]=t[3]*i,e[4]=t[4]*n,e[5]=t[5]*i,e}function l(e,t){var r=t[0],n=t[2],i=t[4],a=t[1],o=t[3],s=t[5],u=r*o-a*n;return u?(u=1/u,e[0]=o*u,e[1]=-a*u,e[2]=-n*u,e[3]=r*u,e[4]=(n*s-o*i)*u,e[5]=(a*i-r*s)*u,e):null}function h(e){var t=r();return i(t,e),t}var c="undefined"==typeof Float32Array?Array:Float32Array;t.create=r,t.identity=n,t.copy=i,t.mul=a,t.translate=o,t.rotate=s,t.scale=u,t.invert=l,t.clone=h},function(e,t,r){function n(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function i(e,t,r,n){var i=t[1]-t[0],a=r[1]-r[0];if(0===i)return 0===a?r[0]:(r[0]+r[1])/2;if(n)if(i>0){if(e<=t[0])return r[0];if(e>=t[1])return r[1]}else{if(e>=t[0])return r[0];if(e<=t[1])return r[1]}else{if(e===t[0])return r[0];if(e===t[1])return r[1]}return(e-t[0])/i*a+r[0]}function a(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%"}return"string"==typeof e?n(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):null==e?NaN:+e}function o(e,t,r){return null==t&&(t=10),t=Math.min(Math.max(0,t),20),e=(+e).toFixed(t),r?e:+e}function s(e){return e.sort(function(e,t){return e-t}),e}function u(e){if(e=+e,isNaN(e))return 0;for(var t=1,r=0;Math.round(e*t)/t!==e;)t*=10,r++;return r}function l(e){var t=e.toString(),r=t.indexOf("e");if(r>0){var n=+t.slice(r+1);return n<0?-n:0}var i=t.indexOf(".");return i<0?0:t.length-1-i}function h(e,t){var r=Math.log,n=Math.LN10,i=Math.floor(r(e[1]-e[0])/n),a=Math.round(r(Math.abs(t[1]-t[0]))/n),o=Math.min(Math.max(-i+a,0),20);return isFinite(o)?o:20}function c(e,t,r){if(!e[t])return 0;var n=x.reduce(e,function(e,t){return e+(isNaN(t)?0:t)},0);if(0===n)return 0;for(var i=Math.pow(10,r),a=x.map(e,function(e){return(isNaN(e)?0:e)/n*i*100}),o=100*i,s=x.map(a,function(e){return Math.floor(e)}),u=x.reduce(s,function(e,t){return e+t},0),l=x.map(a,function(e,t){return e-s[t]});uh&&(h=l[d],c=d);++s[c],l[c]=0,++u}return s[t]/i}function d(e){var t=2*Math.PI;return(e%t+t)%t}function f(e){return e>-T&&e=-20?+e.toFixed(n<0?-n:0):e}function v(e){function t(e,r,n){return e.interval[n]=0}var x=r(13),T=1e-4,b=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;t.linearMap=i,t.parsePercent=a,t.round=o,t.asc=s,t.getPrecision=u,t.getPrecisionSafe=l,t.getPixelPrecision=h,t.getPercentWithPrecision=c,t.MAX_SAFE_INTEGER=9007199254740991,t.remRadian=d,t.isRadianAroundZero=f,t.parseDate=p,t.quantity=m,t.nice=_,t.reformIntervals=v,t.isNumeric=y},function(e,t,r){"use strict";function n(e){u.a.defaultsWithPropList(e,h,c),i(e);for(var t="",r=0;rh&&l.push({pivot:Math.floor((c+h)/2),left:h,right:c});var h=s[u].pivot+1,c=s[u].right;c>h&&l.push({pivot:Math.floor((c+h)/2),left:h,right:c})}s=this._parts=l}else for(var u=0;u50&&(s=1e3);var u=[];a.perspective(u,o,this.width/this.height,1,s),this.viewGL.camera.projectionMatrix.setArray(u),this.viewGL.camera.decomposeProjectionMatrix();var u=a.identity([]),l=this.dataToPoint(this.center);a.scale(u,u,[1,-1,1]),a.translate(u,u,[0,0,-e]),a.rotateX(u,u,t),a.rotateZ(u,u,-this.bearing/180*Math.PI),a.translate(u,u,[-l[0]*this.getScale()*.1,-l[1]*this.getScale()*.1,0]),this.viewGL.camera.viewMatrix.array=u;var h=[];a.invert(h,u),this.viewGL.camera.worldTransform.array=h,this.viewGL.camera.decomposeWorldTransform();var c,d=512*this.getScale();if(this.altitudeExtent&&!isNaN(this.boxHeight)){var f=this.altitudeExtent[1]-this.altitudeExtent[0];c=this.boxHeight/f*this.getScale()/Math.pow(2,this._initialZoom-this.zoomOffset)}else c=d/(2*Math.PI*6378e3*Math.abs(Math.cos(this.center[1]*(Math.PI/180))))*this.altitudeScale*.1;this.viewGL.rootNode.scale.set(.1*this.getScale(),.1*this.getScale(),c)}},getScale:function(){return Math.pow(2,this.zoom-this.zoomOffset)},projectOnTile:function(e,t){return this.projectOnTileWithScale(e,512*this.getScale(),t)},projectOnTileWithScale:function(e,t,r){var n=e[0],i=e[1],a=n*s/180,o=i*s/180,u=t*(a+s)/(2*s),l=t*(s-Math.log(Math.tan(s/4+.5*o)))/(2*s);return r=r||[],r[0]=u,r[1]=l,r},unprojectFromTile:function(e,t){return this.unprojectOnTileWithScale(e,512*this.getScale(),t)},unprojectOnTileWithScale:function(e,t,r){var n=e[0],i=e[1],a=n/t*(2*s)-s,o=2*(Math.atan(Math.exp(s-i/t*(2*s)))-s/4);return r=r||[],r[0]=180*a/s,r[1]=180*o/s,r},dataToPoint:function(e,t){return t=this.projectOnTileWithScale(e,512,t),t[0]-=this._origin[0],t[1]-=this._origin[1],t[2]=isNaN(e[2])?0:e[2],isNaN(e[2])||(t[2]=e[2],this.altitudeExtent&&(t[2]-=this.altitudeExtent[0])),t}},t.a=n},function(e,t,r){"use strict";var n=r(2),i=r(1),a=r(22);t.a=function(e,t,r){function o(e,t){var r=t.getWidth(),n=t.getHeight(),i=t.getDevicePixelRatio();this.viewGL.setViewport(0,0,r,n,i),this.width=r,this.height=n,this.altitudeScale=e.get("altitudeScale"),this.boxHeight=e.get("boxHeight")}function s(e,t){if("auto"!==this.model.get("boxHeight")){var r=[1/0,-1/0];e.eachSeries(function(e){if(e.coordinateSystem===this){var t=e.getData(),n=e.coordDimToDataDim("alt")[0];if(n){var i=t.getDataExtent(n,!0);r[0]=Math.min(r[0],i[0]),r[1]=Math.max(r[1],i[1])}}},this),r&&isFinite(r[1]-r[0])&&(this.altitudeExtent=r)}}return{dimensions:t.prototype.dimensions,create:function(u,l){var h=[];return u.eachComponent(e,function(e){var r=e.__viewGL;r||(r=e.__viewGL=new a.a,r.setRootNode(new i.a.Node));var n=new t;n.viewGL=e.__viewGL,n.resize=o,n.resize(e,l),h.push(n),e.coordinateSystem=n,n.model=e,n.update=s}),u.eachSeries(function(t){if(t.get("coordinateSystem")===e){var r=t.getReferringComponents(e)[0];if(r||(r=u.getComponent(e)),!r)throw new Error(e+' "'+n.a.firstNotNull(t.get(e+"Index"),t.get(e+"Id"),0)+'" not found');t.coordinateSystem=r.coordinateSystem}}),r&&r(h,u,l),h}}}},function(e,t,r){"use strict";t.a="\n@export ecgl.displayShadow.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\nvarying vec3 v_WorldPosition;\n\nvarying vec3 v_Normal;\n\nvoid main()\n{\n @import ecgl.common.uv.main\n v_Normal = normalize((worldInverseTranspose * vec4(normal, 0.0)).xyz);\n\n v_WorldPosition = (world * vec4(position, 1.0)).xyz;\n gl_Position = worldViewProjection * vec4(position, 1.0);\n}\n\n@end\n\n\n@export ecgl.displayShadow.fragment\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform float roughness: 0.2;\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n@import ecgl.common.ssaoMap.header\n\n@import clay.plugin.compute_shadow_map\n\nvoid main()\n{\n float shadow = 1.0;\n\n @import ecgl.common.ssaoMap.main\n\n#if defined(DIRECTIONAL_LIGHT_COUNT) && defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n for (int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++) {\n shadow = min(shadow, shadowContribsDir[i] * 0.5 + 0.5);\n }\n#endif\n\n shadow *= 0.5 + ao * 0.5;\n shadow = clamp(shadow, 0.0, 1.0);\n\n gl_FragColor = vec4(vec3(0.0), 1.0 - shadow);\n}\n\n@end"},function(e,t,r){"use strict";function n(e){this.viewGL=e}var i=r(84),a=r.n(i),o=r(83),s=r.n(o);n.prototype.reset=function(e,t){this._updateCamera(t.getWidth(),t.getHeight(),t.getDevicePixelRatio()),this._viewTransform=a.a.create(),this.updateTransform(e,t)},n.prototype.updateTransform=function(e,t){var r=e.coordinateSystem;r.getRoamTransform&&(a.a.invert(this._viewTransform,r.getRoamTransform()),this._setCameraTransform(this._viewTransform),t.getZr().refresh())},n.prototype.dataToPoint=function(e,t,r){r=e.dataToPoint(t,null,r);var n=this._viewTransform;n&&s.a.applyTransform(r,r,n)},n.prototype.removeTransformInPoint=function(e){return this._viewTransform&&s.a.applyTransform(e,e,this._viewTransform),e},n.prototype.getZoom=function(){if(this._viewTransform){var e=this._viewTransform;return 1/Math.max(Math.sqrt(e[0]*e[0]+e[1]*e[1]),Math.sqrt(e[2]*e[2]+e[3]*e[3]))}return 1},n.prototype._setCameraTransform=function(e){var t=this.viewGL.camera;t.position.set(e[4],e[5],0),t.scale.set(Math.sqrt(e[0]*e[0]+e[1]*e[1]),Math.sqrt(e[2]*e[2]+e[3]*e[3]),1)},n.prototype._updateCamera=function(e,t,r){this.viewGL.setViewport(0,0,e,t,r);var n=this.viewGL.camera;n.left=n.top=0,n.bottom=t,n.right=e,n.near=0,n.far=100},t.a=n},function(e,t,r){(function(e){var r;"undefined"!=typeof window?r=window.__DEV__:void 0!==e&&(r=e.__DEV__),void 0===r&&(r=!0);var n=r;t.__DEV__=n}).call(t,r(68))},function(e,t,r){"use strict";var n=r(15),i=r(0),a=r.n(i),o=r(38),s=r(6),u=s.a.vec2,l=[[0,0],[1,1]],h=n.a.extend(function(){return{segmentScale:4,dynamic:!0,useNativeLine:!0,attributes:{position:new n.a.Attribute("position","float",2,"POSITION"),normal:new n.a.Attribute("normal","float",2),offset:new n.a.Attribute("offset","float",1),color:new n.a.Attribute("color","float",4,"COLOR")}}},{resetOffset:function(){this._vertexOffset=0,this._faceOffset=0,this._itemVertexOffsets=[]},setVertexCount:function(e){var t=this.attributes;this.vertexCount!==e&&(t.position.init(e),t.color.init(e),this.useNativeLine||(t.offset.init(e),t.normal.init(e)),e>65535?this.indices instanceof Uint16Array&&(this.indices=new Uint32Array(this.indices)):this.indices instanceof Uint32Array&&(this.indices=new Uint16Array(this.indices)))},setTriangleCount:function(e){this.triangleCount!==e&&(this.indices=0===e?null:this.vertexCount>65535?new Uint32Array(3*e):new Uint16Array(3*e))},_getCubicCurveApproxStep:function(e,t,r,n){return 1/(u.dist(e,t)+u.dist(r,t)+u.dist(n,r)+1)*this.segmentScale},getCubicCurveVertexCount:function(e,t,r,n){var i=this._getCubicCurveApproxStep(e,t,r,n),a=Math.ceil(1/i);return this.useNativeLine?2*a:2*a+2},getCubicCurveTriangleCount:function(e,t,r,n){var i=this._getCubicCurveApproxStep(e,t,r,n),a=Math.ceil(1/i);return this.useNativeLine?0:2*a},getLineVertexCount:function(){return this.getPolylineVertexCount(l)},getLineTriangleCount:function(){return this.getPolylineTriangleCount(l)},getPolylineVertexCount:function(e){var t;if("number"==typeof e)t=e;else{t="number"!=typeof e[0]?e.length:e.length/2}return this.useNativeLine?2*(t-1):2*(t-1)+2},getPolylineTriangleCount:function(e){var t;if("number"==typeof e)t=e;else{t="number"!=typeof e[0]?e.length:e.length/2}return this.useNativeLine?0:2*(t-1)},addCubicCurve:function(e,t,r,n,i,a){null==a&&(a=1);for(var o=e[0],s=e[1],u=t[0],l=t[1],h=r[0],c=r[1],d=n[0],f=n[1],p=this._getCubicCurveApproxStep(e,t,r,n),m=p*p,g=m*p,_=3*p,v=3*m,y=6*m,x=6*g,T=o-2*u+h,b=s-2*l+c,w=3*(u-h)-o+d,E=3*(l-c)-s+f,S=o,A=s,M=(u-o)*_+T*v+w*g,C=(l-s)*_+b*v+E*g,L=T*y+w*x,D=b*y+E*x,N=w*x,R=E*x,P=0,I=0,O=Math.ceil(1/p),F=new Float32Array(3*(O+1)),F=[],B=0,I=0;I1&&(S=M>0?Math.min(S,d):Math.max(S,d),A=C>0?Math.min(A,f):Math.max(A,f));this.addPolyline(F,i,a)},addLine:function(e,t,r,n){this.addPolyline([e,t],r,n)},addPolyline:function(){var e=u.create(),t=u.create(),r=u.create(),n=u.create(),i=[],a=[],o=[];return function(s,l,h,c,d){if(s.length){var f="number"!=typeof s[0];if(null==d&&(d=f?s.length:s.length/2),!(d<2)){null==c&&(c=0),null==h&&(h=1),this._itemVertexOffsets.push(this._vertexOffset);for(var p,m=f?"number"!=typeof l[0]:l.length/4===d,g=this.attributes.position,_=this.attributes.color,v=this.attributes.offset,y=this.attributes.normal,x=this.indices,T=this._vertexOffset,b=0;b1&&(g.copy(T,T-1),_.copy(T,T-1),T++);else{var S;if(b0){u.sub(e,i,o),u.sub(t,a,i),u.normalize(e,e),u.normalize(t,t),u.add(n,e,t),u.normalize(n,n);var A=h/2*Math.min(1/u.dot(e,n),2);r[0]=-n[1],r[1]=n[0],S=A}else u.sub(e,a,i),u.normalize(e,e),r[0]=-e[1],r[1]=e[0],S=h/2}else u.sub(e,i,o),u.normalize(e,e),r[0]=-e[1],r[1]=e[0],S=h/2;y.set(T,r),y.set(T+1,r),v.set(T,S),v.set(T+1,-S),u.copy(o,i),g.set(T,i),g.set(T+1,i),_.set(T,p),_.set(T+1,p),T+=2}if(this.useNativeLine)_.set(T,p),g.set(T,i),T++;else if(b>0){var M=3*this._faceOffset,x=this.indices;x[M]=T-4,x[M+1]=T-3,x[M+2]=T-2,x[M+3]=T-3,x[M+4]=T-1,x[M+5]=T-2,this._faceOffset+=2}}this._vertexOffset=T}}}}(),setItemColor:function(e,t){for(var r=this._itemVertexOffsets[e],n=ee&&o=0&&this._viewsToDispose.splice(t,1),this.views.push(e),e.layer=this;var r=this.zr;e.scene.traverse(function(e){e.__zr=r,e.addAnimatorsToZr&&e.addAnimatorsToZr(r)})}},_.prototype.removeView=function(e){if(e.layer===this){var t=this.views.indexOf(e);t>=0&&(this.views.splice(t,1),e.scene.traverse(n,this),e.layer=null,this._viewsToDispose.push(e))}},_.prototype.removeViewsAll=function(){this.views.forEach(function(e){e.scene.traverse(n,this),e.layer=null,this._viewsToDispose.push(e)},this),this.views.length=0},_.prototype.resize=function(e,t){this.renderer.resize(e,t)},_.prototype.clear=function(){var e=this.renderer.gl,t=this._backgroundColor||[0,0,0,0];e.clearColor(t[0],t[1],t[2],t[3]),e.depthMask(!0),e.colorMask(!0,!0,!0,!0),e.clear(e.DEPTH_BUFFER_BIT|e.COLOR_BUFFER_BIT)},_.prototype.clearDepth=function(){var e=this.renderer.gl;e.clear(e.DEPTH_BUFFER_BIT)},_.prototype.clearColor=function(){var e=this.renderer.gl;e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)},_.prototype.needsRefresh=function(){this.zr.refresh()},_.prototype.refresh=function(e){this._backgroundColor=e?f.a.parseColor(e):[0,0,0,0],this.renderer.clearColor=this._backgroundColor;for(var t=0;t20)){e=e.event;var n=this.pickObject(e.offsetX,e.offsetY);n&&(this._dispatchEvent(e.type,e,n),this._dispatchDataEvent(e.type,e,n));var i=this._clickToSetFocusPoint(e);if(i){i.view.setDOFFocusOnPoint(i.distance)&&this.zr.refresh()}}}},_.prototype._clickToSetFocusPoint=function(e){for(var t=this.renderer,r=t.viewport,n=this.views.length-1;n>=0;n--){var i=this.views[n];if(i.hasDOF()&&i.containPoint(e.offsetX,e.offsetY)){this._picking.scene=i.scene,this._picking.camera=i.camera,t.viewport=i.viewport;var a=this._picking.pick(e.offsetX,e.offsetY,!0);if(a)return a.view=i,a}}t.viewport=r},_.prototype.onglobalout=function(e){var t=this._hovered;t&&this._dispatchEvent("mouseout",e,{target:t.target})},_.prototype.pickObject=function(e,t){for(var r=[],n=this.renderer,i=n.viewport,a=0;a=0&&(u.dataIndex=this._lastDataIndex,u.seriesIndex=this._lastSeriesIndex,this.zr.handler.dispatchToElement(l,"mouseout",t)),s=!0):null!=o&&o!==this._lastEventData&&(null!=this._lastEventData&&(u.eventData=this._lastEventData,this.zr.handler.dispatchToElement(l,"mouseout",t)),s=!0),this._lastEventData=o,this._lastDataIndex=i,this._lastSeriesIndex=a),u.eventData=o,u.dataIndex=i,u.seriesIndex=a,(null!=o||parseInt(i,10)>=0&&parseInt(a,10)>=0)&&(this.zr.handler.dispatchToElement(l,e,t),s&&this.zr.handler.dispatchToElement(l,"mouseover",t))},_.prototype._dispatchToView=function(e,t){for(var r=0;r=400?e.onerror&&e.onerror():e.onload&&e.onload(t.response)},e.onerror&&(t.onerror=e.onerror),t.send(null)}t.a={get:n}},function(e,t,r){"use strict";function n(e){return e=Math.round(e),e<0?0:e>255?255:e}function i(e){return e=Math.round(e),e<0?0:e>360?360:e}function a(e){return e<0?0:e>1?1:e}function o(e){return n(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100*255:parseInt(e,10))}function s(e){return a(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100:parseFloat(e))}function u(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}function l(e,t,r){return e+(t-e)*r}function h(e,t,r,n,i){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e}function c(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function d(e,t){y&&c(y,t),y=v.put(e,y||t.slice())}function f(e,t){var r=(parseFloat(e[0])%360+360)%360/360,i=s(e[1]),a=s(e[2]),o=a<=.5?a*(i+1):a+i-a*i,l=2*a-o;return t=t||[],h(t,n(255*u(l,o,r+1/3)),n(255*u(l,o,r)),n(255*u(l,o,r-1/3)),1),4===e.length&&(t[3]=e[3]),t}function p(e){if(e){var t,r,n=e[0]/255,i=e[1]/255,a=e[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),u=s-o,l=(s+o)/2;if(0===u)t=0,r=0;else{r=l<.5?u/(s+o):u/(2-s-o);var h=((s-n)/6+u/2)/u,c=((s-i)/6+u/2)/u,d=((s-a)/6+u/2)/u;n===s?t=d-c:i===s?t=1/3+h-d:a===s&&(t=2/3+c-h),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,r,l];return null!=e[3]&&f.push(e[3]),f}}var m=r(69),g={},_={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},v=new m.a(20),y=null;g.parse=function(e,t){if(e){t=t||[];var r=v.get(e);if(r)return c(t,r);e+="";var n=e.replace(/ /g,"").toLowerCase();if(n in _)return c(t,_[n]),d(e,t),t;if("#"!==n.charAt(0)){var i=n.indexOf("("),a=n.indexOf(")");if(-1!==i&&a+1===n.length){var u=n.substr(0,i),l=n.substr(i+1,a-(i+1)).split(","),p=1;switch(u){case"rgba":if(4!==l.length)return void h(t,0,0,0,1);p=s(l.pop());case"rgb":return 3!==l.length?void h(t,0,0,0,1):(h(t,o(l[0]),o(l[1]),o(l[2]),p),d(e,t),t);case"hsla":return 4!==l.length?void h(t,0,0,0,1):(l[3]=s(l[3]),f(l,t),d(e,t),t);case"hsl":return 3!==l.length?void h(t,0,0,0,1):(f(l,t),d(e,t),t);default:return}}h(t,0,0,0,1)}else{if(4===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=4095?(h(t,(3840&m)>>4|(3840&m)>>8,240&m|(240&m)>>4,15&m|(15&m)<<4,1),d(e,t),t):void h(t,0,0,0,1)}if(7===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=16777215?(h(t,(16711680&m)>>16,(65280&m)>>8,255&m,1),d(e,t),t):void h(t,0,0,0,1)}}}},g.parseToFloat=function(e,t){if(t=g.parse(e,t))return t[0]/=255,t[1]/=255,t[2]/=255,t},g.lift=function(e,t){var r=g.parse(e);if(r){for(var n=0;n<3;n++)r[n]=t<0?r[n]*(1-t)|0:(255-r[n])*t+r[n]|0;return g.stringify(r,4===r.length?"rgba":"rgb")}},g.toHex=function(e){var t=g.parse(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)},g.fastLerp=function(e,t,r){if(t&&t.length&&e>=0&&e<=1){r=r||[];var i=e*(t.length-1),o=Math.floor(i),s=Math.ceil(i),u=t[o],h=t[s],c=i-o;return r[0]=n(l(u[0],h[0],c)),r[1]=n(l(u[1],h[1],c)),r[2]=n(l(u[2],h[2],c)),r[3]=a(l(u[3],h[3],c)),r}},g.fastMapToColor=g.fastLerp,g.lerp=function(e,t,r){if(t&&t.length&&e>=0&&e<=1){var i=e*(t.length-1),o=Math.floor(i),s=Math.ceil(i),u=g.parse(t[o]),h=g.parse(t[s]),c=i-o,d=g.stringify([n(l(u[0],h[0],c)),n(l(u[1],h[1],c)),n(l(u[2],h[2],c)),a(l(u[3],h[3],c))],"rgba");return r?{color:d,leftIndex:o,rightIndex:s,value:i}:d}},g.mapToColor=g.lerp,g.modifyHSL=function(e,t,r,n){if(e=g.parse(e))return e=p(e),null!=t&&(e[0]=i(t)),null!=r&&(e[1]=s(r)),null!=n&&(e[2]=s(n)),g.stringify(f(e),"rgba")},g.modifyAlpha=function(e,t){if((e=g.parse(e))&&null!=t)return e[3]=a(t),g.stringify(e,"rgba")},g.stringify=function(e,t){if(e&&e.length){var r=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(r+=","+e[3]),t+"("+r+")"}},t.a=g},function(e,t,r){"use strict";var n=function(){this.head=null,this.tail=null,this._length=0};n.prototype.insert=function(e){var t=new n.Entry(e);return this.insertEntry(t),t},n.prototype.insertAt=function(e,t){if(!(e<0)){for(var r=this.head,i=0;r&&i!=e;)r=r.next,i++;if(r){var a=new n.Entry(t),o=r.prev;o?(o.next=a,a.prev=o):this.head=a,a.next=r,r.prev=a}else this.insert(t)}},n.prototype.insertBeforeEntry=function(e,t){var r=new n.Entry(e),i=t.prev;i?(i.next=r,r.prev=i):this.head=r,r.next=t,t.prev=r,this._length++},n.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,this.tail=e):this.head=this.tail=e,this._length++},n.prototype.remove=function(e){var t=e.prev,r=e.next;t?t.next=r:this.head=r,r?r.prev=t:this.tail=t,e.next=e.prev=null,this._length--},n.prototype.removeAt=function(e){if(!(e<0)){for(var t=this.head,r=0;t&&r!=e;)t=t.next,r++;return t?(this.remove(t),t.value):void 0}},n.prototype.getHead=function(){if(this.head)return this.head.value},n.prototype.getTail=function(){if(this.tail)return this.tail.value},n.prototype.getAt=function(e){if(!(e<0)){for(var t=this.head,r=0;t&&r!=e;)t=t.next,r++;return t.value}},n.prototype.indexOf=function(e){for(var t=this.head,r=0;t;){if(t.value===e)return r;t=t.next,r++}},n.prototype.length=function(){return this._length},n.prototype.isEmpty=function(){return 0===this._length},n.prototype.forEach=function(e,t){for(var r=this.head,n=0,i=void 0!==t;r;)i?e.call(t,r.value,n):e(r.value,n),r=r.next,n++},n.prototype.clear=function(){this.tail=this.head=null,this._length=0},n.Entry=function(e){this.value=e,this.next=null,this.prev=null},t.a=n},function(e,t,r){"use strict";function n(e,t,r){function n(e,r,n,a){var o="";isNaN(r)&&(r=r in t?t[r]:i[r]),isNaN(n)&&(n=n in t?t[n]:i[n]);for(var s=parseInt(r);s0&&n.push("#define "+i.toUpperCase()+"_COUNT "+a)}if(r)for(var o=0;of.getMaxJointNumber()&&(_.USE_SKIN_MATRICES_TEXTURE=null),g="\n"+i(_)+"\n"}var v=g+i(t.vertexDefines,d,m),y=g+i(t.fragmentDefines,d,m),x=v+"\n"+t.shader.vertex,T=["OES_standard_derivatives","EXT_shader_texture_lod"].filter(function(e){return null!=f.getGLExtension(e)});T.indexOf("EXT_shader_texture_lod")>=0&&(y+="\n#define SUPPORT_TEXTURE_LOD"),T.indexOf("OES_standard_derivatives")>=0&&(y+="\n#define SUPPORT_STANDARD_DERIVATIVES");var b=a(T)+"\n"+o(t.precision)+"\n"+y+"\n"+t.shader.fragment,w=n(x,t.vertexDefines,d),E=n(b,t.fragmentDefines,d),c=new u.a;c.uniformSemantics=t.shader.uniformSemantics,c.attributes=t.shader.attributes;var S=c.buildProgram(p,t.shader,w,E);return c.__error=S,s[h]=c,c},t.a=s},function(e,t,r){"use strict";function n(e){for(var t=e.split("\n"),r=0,n=t.length;r=0&&A[E]>1e-4&&(h.a.transformMat4(L,S,b[M[E]]),h.a.scaleAndAdd(C,C,L,A[E]));D.set(w,C)}}for(var w=0;w=0){t||(t=[]);var r=this.indices;return t[0]=r[3*e],t[1]=r[3*e+1],t[2]=r[3*e+2],t}},setTriangleIndices:function(e,t){var r=this.indices;r[3*e]=t[0],r[3*e+1]=t[1],r[3*e+2]=t[2]},isUseIndices:function(){return!!this.indices},initIndicesFromArray:function(e){var t,r=this.vertexCount>65535?c.a.Uint32Array:c.a.Uint16Array;if(e[0]&&e[0].length){var n=0;t=new r(3*e.length);for(var i=0;i=0&&(t.splice(r,1),delete this.attributes[e],!0)},getAttribute:function(e){return this.attributes[e]},getEnabledAttributes:function(){var e=this._enabledAttributes,t=this._attributeList;if(e)return e;for(var r=[],n=this.vertexCount,i=0;i0){var i=Math.pow(2,e[3]-128-8+n);t[r+0]=e[0]*i,t[r+1]=e[1]*i,t[r+2]=e[2]*i}else t[r+0]=0,t[r+1]=0,t[r+2]=0;return t[r+3]=1,t}function i(e,t,r){for(var n="",i=t;i0;)if(e[o][0]=t[r++],e[o][1]=t[r++],e[o][2]=t[r++],e[o][3]=t[r++],1===e[o][0]&&1===e[o][1]&&1===e[o][2]){for(var u=e[o][3]<>>0;u>0;u--)a(e[o-1],e[o]),o++,s--;i+=8}else o++,s--,i=0;return r}function s(e,t,r,n){if(nd)return o(e,t,r,n);var i=t[r++];if(2!=i)return o(e,t,r-1,n);if(e[0][1]=t[r++],e[0][2]=t[r++],i=t[r++],(e[0][2]<<8>>>0|i)>>>0!==n)return null;for(var i=0;i<4;i++)for(var a=0;a128){s=(127&s)>>>0;for(var u=t[r++];s--;)e[a++][i]=u}else for(;s--;)e[a++][i]=t[r++]}return r}var u=r(4),l=r(5),h=String.fromCharCode,c=8,d=32767,f={parseRGBE:function(e,t,r){null==r&&(r=0);var a=new Uint8Array(e),o=a.length;if("#?"===i(a,0,2)){for(var c=2;c=o)){c+=2;for(var d="";c=0||(s.forEach(function(t){e.on(t,this[n(t)],this)},this),this._meshes.push(e))},detachFromMesh:function(e){var t=this._meshes.indexOf(e);t>=0&&this._meshes.splice(t,1),s.forEach(function(t){e.off(t,this[n(t)])},this)},dispose:function(){this._meshes.forEach(function(e){this.detachFromMesh(e)},this)}},t.a=u},function(e,t,r){"use strict";var n=r(24),i=r(77),a=n.a.extend({cubemap:null,castShadow:!1,_normalDistribution:null,_brdfLookup:null},{type:"AMBIENT_CUBEMAP_LIGHT",prefilter:function(e,t){if(!e.getGLExtension("EXT_shader_texture_lod"))return void console.warn("Device not support textureCubeLodEXT");this._brdfLookup||(this._normalDistribution=i.a.generateNormalDistribution(),this._brdfLookup=i.a.integrateBRDF(e,this._normalDistribution));var r=this.cubemap;if(!r.__prefiltered){var n=i.a.prefilterEnvironmentMap(e,r,{encodeRGBM:!0,width:t,height:t},this._normalDistribution,this._brdfLookup);this.cubemap=n.environmentMap,this.cubemap.__prefiltered=!0,r.dispose(e)}},getBRDFLookup:function(){return this._brdfLookup},uniformTemplates:{ambientCubemapLightColor:{type:"3f",value:function(e){var t=e.color,r=e.intensity;return[t[0]*r,t[1]*r,t[2]*r]}},ambientCubemapLightCubemap:{type:"t",value:function(e){return e.cubemap}},ambientCubemapLightBRDFLookup:{type:"t",value:function(e){return e._brdfLookup}}}});t.a=a},function(e,t,r){"use strict";t.a="\n@export clay.compositor.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = worldViewProjection * vec4(position, 1.0);\n}\n@end"},function(e,t,r){"use strict";t.a="#define SAMPLE_NUMBER 1024\n#define PI 3.14159265358979\nuniform sampler2D normalDistribution;\nuniform vec2 viewportSize : [512, 256];\nconst vec3 N = vec3(0.0, 0.0, 1.0);\nconst float fSampleNumber = float(SAMPLE_NUMBER);\nvec3 importanceSampleNormal(float i, float roughness, vec3 N) {\n vec3 H = texture2D(normalDistribution, vec2(roughness, i)).rgb;\n vec3 upVector = abs(N.y) > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nfloat G_Smith(float roughness, float NoV, float NoL) {\n float k = roughness * roughness / 2.0;\n float G1V = NoV / (NoV * (1.0 - k) + k);\n float G1L = NoL / (NoL * (1.0 - k) + k);\n return G1L * G1V;\n}\nvoid main() {\n vec2 uv = gl_FragCoord.xy / viewportSize;\n float NoV = uv.x;\n float roughness = uv.y;\n vec3 V;\n V.x = sqrt(1.0 - NoV * NoV);\n V.y = 0.0;\n V.z = NoV;\n float A = 0.0;\n float B = 0.0;\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(L.z, 0.0, 1.0);\n float NoH = clamp(H.z, 0.0, 1.0);\n float VoH = clamp(dot(V, H), 0.0, 1.0);\n if (NoL > 0.0) {\n float G = G_Smith(roughness, NoV, NoL);\n float G_Vis = G * VoH / (NoH * NoV);\n float Fc = pow(1.0 - VoH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n gl_FragColor = vec4(vec2(A, B) / fSampleNumber, 0.0, 1.0);\n}\n"},function(e,t,r){"use strict";t.a="#define SHADER_NAME prefilter\n#define SAMPLE_NUMBER 1024\n#define PI 3.14159265358979\nuniform mat4 viewInverse : VIEWINVERSE;\nuniform samplerCube environmentMap;\nuniform sampler2D normalDistribution;\nuniform float roughness : 0.5;\nvarying vec2 v_Texcoord;\nvarying vec3 v_WorldPosition;\n@import clay.util.rgbm\nvec3 importanceSampleNormal(float i, float roughness, vec3 N) {\n vec3 H = texture2D(normalDistribution, vec2(roughness, i)).rgb;\n vec3 upVector = abs(N.y) > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nvoid main() {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(v_WorldPosition - eyePos);\n vec3 N = V;\n vec3 prefilteredColor = vec3(0.0);\n float totalWeight = 0.0;\n float fMaxSampleNumber = float(SAMPLE_NUMBER);\n for (int i = 0; i < SAMPLE_NUMBER; i++) {\n vec3 H = importanceSampleNormal(float(i) / fMaxSampleNumber, roughness, N);\n vec3 L = reflect(-V, H);\n float NoL = clamp(dot(N, L), 0.0, 1.0);\n if (NoL > 0.0) {\n prefilteredColor += decodeHDR(textureCube(environmentMap, L)).rgb * NoL;\n totalWeight += NoL;\n }\n }\n gl_FragColor = encodeHDR(vec4(prefilteredColor / totalWeight, 1.0));\n}\n"},function(e,t,r){"use strict";var n=r(24),i=r(14),a=n.a.extend({castShadow:!1,coefficients:[]},function(){this._coefficientsTmpArr=new i.a.Float32Array(27)},{type:"AMBIENT_SH_LIGHT",uniformTemplates:{ambientSHLightColor:{type:"3f",value:function(e){var t=e.color,r=e.intensity;return[t[0]*r,t[1]*r,t[2]*r]}},ambientSHLightCoefficients:{type:"3f",value:function(e){for(var t=e._coefficientsTmpArr,r=0;r65535?Uint32Array:Uint16Array,m=this.indices=new p(t*e*6),g=this.radius,_=this.phiStart,v=this.phiLength,y=this.thetaStart,x=this.thetaLength,g=this.radius,T=[],b=[],w=0,E=1/g;for(f=0;f<=e;f++)for(d=0;d<=t;d++)h=d/t,c=f/e,s=-g*Math.cos(_+h*v)*Math.sin(y+c*x),u=g*Math.cos(y+c*x),l=g*Math.sin(_+h*v)*Math.sin(y+c*x),T[0]=s,T[1]=u,T[2]=l,b[0]=h,b[1]=c,r.set(w,T),n.set(w,b),T[0]*=E,T[1]*=E,T[2]*=E,a.set(w,T),w++;var S,A,M,C,L=t+1,D=0;for(f=0;f=0&&l.splice(e,1)}),l.push(h),this.__zr&&this.__zr.animation.addAnimator(h),h},stopAnimation:function(e){this._animators=this._animators||[];for(var t=this._animators,r=t.length,n=0;n.5?t:e}function s(e,t,r,n,i){var o=e.length;if(1==i)for(var s=0;si)e.length=i;else for(var a=n;a=0&&!(C[r]<=t);r--);r=Math.min(r,T-2)}else{for(r=V;rt);r++);r=Math.min(r-1,T-2)}V=r,k=t;var n=C[r+1]-C[r];if(0!==n)if(B=(t-C[r])/n,x)if(z=L[r],U=L[0===r?r:r-1],G=L[r>T-2?T-1:r+1],H=L[r>T-3?T-1:r+2],E)h(U,z,G,H,B,B*B,B*B*B,m(e,i),M);else{var u;if(S)u=h(U,z,G,H,B,B*B,B*B*B,W,1),u=f(W);else{if(A)return o(z,G,B);u=c(U,z,G,H,B,B*B,B*B*B)}v(e,i,u)}else if(E)s(L[r],L[r+1],B,m(e,i),M);else{var u;if(S)s(L[r],L[r+1],B,W,1),u=f(W);else{if(A)return o(L[r],L[r+1],B);u=a(L[r],L[r+1],B)}v(e,i,u)}},X=new g({target:e._target,life:b,loop:e._loop,delay:e._delay,onframe:j,ondestroy:r});return t&&"spline"!==t&&(X.easing=t),X}}}var g=r(143),_=r(145),v=r(13),y=v.isArrayLike,x=Array.prototype.slice,T=function(e,t,r,a){this._tracks={},this._target=e,this._loop=t||!1,this._getter=r||n,this._setter=a||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};T.prototype={when:function(e,t){var r=this._tracks;for(var n in t)if(t.hasOwnProperty(n)){if(!r[n]){r[n]=[];var i=this._getter(this._target,n);if(null==i)continue;0!==e&&r[n].push({time:0,value:d(i)})}r[n].push({time:e,value:t[n]})}return this},during:function(e){return this._onframeList.push(e),this},pause:function(){for(var e=0;e255?255:e}function i(e){return e=Math.round(e),e<0?0:e>360?360:e}function a(e){return e<0?0:e>1?1:e}function o(e){return n(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100*255:parseInt(e,10))}function s(e){return a(e.length&&"%"===e.charAt(e.length-1)?parseFloat(e)/100:parseFloat(e))}function u(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}function l(e,t,r){return e+(t-e)*r}function h(e,t,r,n,i){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e}function c(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function d(e,t){A&&c(A,t),A=S.put(e,A||t.slice())}function f(e,t){if(e){t=t||[];var r=S.get(e);if(r)return c(t,r);e+="";var n=e.replace(/ /g,"").toLowerCase();if(n in E)return c(t,E[n]),d(e,t),t;if("#"!==n.charAt(0)){var i=n.indexOf("("),a=n.indexOf(")");if(-1!==i&&a+1===n.length){var u=n.substr(0,i),l=n.substr(i+1,a-(i+1)).split(","),f=1;switch(u){case"rgba":if(4!==l.length)return void h(t,0,0,0,1);f=s(l.pop());case"rgb":return 3!==l.length?void h(t,0,0,0,1):(h(t,o(l[0]),o(l[1]),o(l[2]),f),d(e,t),t);case"hsla":return 4!==l.length?void h(t,0,0,0,1):(l[3]=s(l[3]),p(l,t),d(e,t),t);case"hsl":return 3!==l.length?void h(t,0,0,0,1):(p(l,t),d(e,t),t);default:return}}h(t,0,0,0,1)}else{if(4===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=4095?(h(t,(3840&m)>>4|(3840&m)>>8,240&m|(240&m)>>4,15&m|(15&m)<<4,1),d(e,t),t):void h(t,0,0,0,1)}if(7===n.length){var m=parseInt(n.substr(1),16);return m>=0&&m<=16777215?(h(t,(16711680&m)>>16,(65280&m)>>8,255&m,1),d(e,t),t):void h(t,0,0,0,1)}}}}function p(e,t){var r=(parseFloat(e[0])%360+360)%360/360,i=s(e[1]),a=s(e[2]),o=a<=.5?a*(i+1):a+i-a*i,l=2*a-o;return t=t||[],h(t,n(255*u(l,o,r+1/3)),n(255*u(l,o,r)),n(255*u(l,o,r-1/3)),1),4===e.length&&(t[3]=e[3]),t}function m(e){if(e){var t,r,n=e[0]/255,i=e[1]/255,a=e[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),u=s-o,l=(s+o)/2;if(0===u)t=0,r=0;else{r=l<.5?u/(s+o):u/(2-s-o);var h=((s-n)/6+u/2)/u,c=((s-i)/6+u/2)/u,d=((s-a)/6+u/2)/u;n===s?t=d-c:i===s?t=1/3+h-d:a===s&&(t=2/3+c-h),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,r,l];return null!=e[3]&&f.push(e[3]),f}}function g(e,t){var r=f(e);if(r){for(var n=0;n<3;n++)r[n]=t<0?r[n]*(1-t)|0:(255-r[n])*t+r[n]|0,r[n]>255?r[n]=255:e[n]<0&&(r[n]=0);return b(r,4===r.length?"rgba":"rgb")}}function _(e){var t=f(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)}function v(e,t,r){if(t&&t.length&&e>=0&&e<=1){r=r||[];var i=e*(t.length-1),o=Math.floor(i),s=Math.ceil(i),u=t[o],h=t[s],c=i-o;return r[0]=n(l(u[0],h[0],c)),r[1]=n(l(u[1],h[1],c)),r[2]=n(l(u[2],h[2],c)),r[3]=a(l(u[3],h[3],c)),r}}function y(e,t,r){if(t&&t.length&&e>=0&&e<=1){var i=e*(t.length-1),o=Math.floor(i),s=Math.ceil(i),u=f(t[o]),h=f(t[s]),c=i-o,d=b([n(l(u[0],h[0],c)),n(l(u[1],h[1],c)),n(l(u[2],h[2],c)),a(l(u[3],h[3],c))],"rgba");return r?{color:d,leftIndex:o,rightIndex:s,value:i}:d}}function x(e,t,r,n){if(e=f(e))return e=m(e),null!=t&&(e[0]=i(t)),null!=r&&(e[1]=s(r)),null!=n&&(e[2]=s(n)),b(p(e),"rgba")}function T(e,t){if((e=f(e))&&null!=t)return e[3]=a(t),b(e,"rgba")}function b(e,t){if(e&&e.length){var r=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(r+=","+e[3]),t+"("+r+")"}}var w=r(60),E={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},S=new w(20),A=null,M=v,C=y;t.parse=f,t.lift=g,t.toHex=_,t.fastLerp=v,t.fastMapToColor=M,t.lerp=y,t.mapToColor=C,t.modifyHSL=x,t.modifyAlpha=T,t.stringify=b},function(e,t,r){"use strict";t.a="\n@export clay.util.rand\nhighp float rand(vec2 uv) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot(uv.xy, vec2(a,b)), sn = mod(dt, 3.141592653589793);\n return fract(sin(sn) * c);\n}\n@end\n@export clay.util.calculate_attenuation\nuniform float attenuationFactor : 5.0;\nfloat lightAttenuation(float dist, float range)\n{\n float attenuation = 1.0;\n attenuation = dist*dist/(range*range+1.0);\n float att_s = attenuationFactor;\n attenuation = 1.0/(attenuation*att_s+1.0);\n att_s = 1.0/(att_s+1.0);\n attenuation = attenuation - att_s;\n attenuation /= 1.0 - att_s;\n return clamp(attenuation, 0.0, 1.0);\n}\n@end\n@export clay.util.edge_factor\n#ifdef SUPPORT_STANDARD_DERIVATIVES\nfloat edgeFactor(float width)\n{\n vec3 d = fwidth(v_Barycentric);\n vec3 a3 = smoothstep(vec3(0.0), d * width, v_Barycentric);\n return min(min(a3.x, a3.y), a3.z);\n}\n#else\nfloat edgeFactor(float width)\n{\n return 1.0;\n}\n#endif\n@end\n@export clay.util.encode_float\nvec4 encodeFloat(const in float depth)\n{\n const vec4 bitShifts = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0);\n const vec4 bit_mask = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);\n vec4 res = fract(depth * bitShifts);\n res -= res.xxyz * bit_mask;\n return res;\n}\n@end\n@export clay.util.decode_float\nfloat decodeFloat(const in vec4 color)\n{\n const vec4 bitShifts = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0);\n return dot(color, bitShifts);\n}\n@end\n@export clay.util.float\n@import clay.util.encode_float\n@import clay.util.decode_float\n@end\n@export clay.util.rgbm_decode\nvec3 RGBMDecode(vec4 rgbm, float range) {\n return range * rgbm.rgb * rgbm.a;\n}\n@end\n@export clay.util.rgbm_encode\nvec4 RGBMEncode(vec3 color, float range) {\n if (dot(color, color) == 0.0) {\n return vec4(0.0);\n }\n vec4 rgbm;\n color /= range;\n rgbm.a = clamp(max(max(color.r, color.g), max(color.b, 1e-6)), 0.0, 1.0);\n rgbm.a = ceil(rgbm.a * 255.0) / 255.0;\n rgbm.rgb = color / rgbm.a;\n return rgbm;\n}\n@end\n@export clay.util.rgbm\n@import clay.util.rgbm_decode\n@import clay.util.rgbm_encode\nvec4 decodeHDR(vec4 color)\n{\n#if defined(RGBM_DECODE) || defined(RGBM)\n return vec4(RGBMDecode(color, 8.12), 1.0);\n#else\n return color;\n#endif\n}\nvec4 encodeHDR(vec4 color)\n{\n#if defined(RGBM_ENCODE) || defined(RGBM)\n return RGBMEncode(color.xyz, 8.12);\n#else\n return color;\n#endif\n}\n@end\n@export clay.util.srgb\nvec4 sRGBToLinear(in vec4 value) {\n return vec4(mix(pow(value.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), value.rgb * 0.0773993808, vec3(lessThanEqual(value.rgb, vec3(0.04045)))), value.w);\n}\nvec4 linearTosRGB(in vec4 value) {\n return vec4(mix(pow(value.rgb, vec3(0.41666)) * 1.055 - vec3(0.055), value.rgb * 12.92, vec3(lessThanEqual(value.rgb, vec3(0.0031308)))), value.w);\n}\n@end\n@export clay.chunk.skinning_header\n#ifdef SKINNING\nattribute vec3 weight : WEIGHT;\nattribute vec4 joint : JOINT;\n#ifdef USE_SKIN_MATRICES_TEXTURE\nuniform sampler2D skinMatricesTexture : ignore;\nuniform float skinMatricesTextureSize: ignore;\nmat4 getSkinMatrix(sampler2D tex, float idx) {\n float j = idx * 4.0;\n float x = mod(j, skinMatricesTextureSize);\n float y = floor(j / skinMatricesTextureSize) + 0.5;\n vec2 scale = vec2(skinMatricesTextureSize);\n return mat4(\n texture2D(tex, vec2(x + 0.5, y) / scale),\n texture2D(tex, vec2(x + 1.5, y) / scale),\n texture2D(tex, vec2(x + 2.5, y) / scale),\n texture2D(tex, vec2(x + 3.5, y) / scale)\n );\n}\nmat4 getSkinMatrix(float idx) {\n return getSkinMatrix(skinMatricesTexture, idx);\n}\n#else\nuniform mat4 skinMatrix[JOINT_COUNT] : SKIN_MATRIX;\nmat4 getSkinMatrix(float idx) {\n return skinMatrix[int(idx)];\n}\n#endif\n#endif\n@end\n@export clay.chunk.skin_matrix\nmat4 skinMatrixWS = getSkinMatrix(joint.x) * weight.x;\nif (weight.y > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.y) * weight.y;\n}\nif (weight.z > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.z) * weight.z;\n}\nfloat weightW = 1.0-weight.x-weight.y-weight.z;\nif (weightW > 1e-4)\n{\n skinMatrixWS += getSkinMatrix(joint.w) * weightW;\n}\n@end\n@export clay.util.parallax_correct\nvec3 parallaxCorrect(in vec3 dir, in vec3 pos, in vec3 boxMin, in vec3 boxMax) {\n vec3 first = (boxMax - pos) / dir;\n vec3 second = (boxMin - pos) / dir;\n vec3 further = max(first, second);\n float dist = min(further.x, min(further.y, further.z));\n vec3 fixedPos = pos + dir * dist;\n vec3 boxCenter = (boxMax + boxMin) * 0.5;\n return normalize(fixedPos - boxCenter);\n}\n@end\n@export clay.util.clamp_sample\nvec4 clampSample(const in sampler2D texture, const in vec2 coord)\n{\n#ifdef STEREO\n float eye = step(0.5, coord.x) * 0.5;\n vec2 coordClamped = clamp(coord, vec2(eye, 0.0), vec2(0.5 + eye, 1.0));\n#else\n vec2 coordClamped = clamp(coord, vec2(0.0), vec2(1.0));\n#endif\n return texture2D(texture, coordClamped);\n}\n@end\n@export clay.util.ACES\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n@end"},function(e,t,r){"use strict";t.a="\n@export ecgl.common.transformUniforms\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\n@end\n\n@export ecgl.common.attributes\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 normal : NORMAL;\n@end\n\n@export ecgl.common.uv.header\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nuniform vec2 detailUvRepeat : [1.0, 1.0];\nuniform vec2 detailUvOffset : [0.0, 0.0];\n\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n@export ecgl.common.uv.main\nv_Texcoord = texcoord * uvRepeat + uvOffset;\nv_DetailTexcoord = texcoord * detailUvRepeat + detailUvOffset;\n@end\n\n@export ecgl.common.uv.fragmentHeader\nvarying vec2 v_Texcoord;\nvarying vec2 v_DetailTexcoord;\n@end\n\n\n@export ecgl.common.albedo.main\n\n vec4 albedoTexel = vec4(1.0);\n#ifdef DIFFUSEMAP_ENABLED\n albedoTexel = texture2D(diffuseMap, v_Texcoord);\n #ifdef SRGB_DECODE\n albedoTexel = sRGBToLinear(albedoTexel);\n #endif\n#endif\n\n#ifdef DETAILMAP_ENABLED\n vec4 detailTexel = texture2D(detailMap, v_DetailTexcoord);\n #ifdef SRGB_DECODE\n detailTexel = sRGBToLinear(detailTexel);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, detailTexel.rgb, detailTexel.a);\n albedoTexel.a = detailTexel.a + (1.0 - detailTexel.a) * albedoTexel.a;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexHeader\n\n#ifdef WIREFRAME_QUAD\nattribute vec4 barycentric;\nvarying vec4 v_Barycentric;\n#elif defined(WIREFRAME_TRIANGLE)\nattribute vec3 barycentric;\nvarying vec3 v_Barycentric;\n#endif\n\n@end\n\n@export ecgl.common.wireframe.vertexMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n v_Barycentric = barycentric;\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentHeader\n\nuniform float wireframeLineWidth : 1;\nuniform vec4 wireframeLineColor: [0, 0, 0, 0.5];\n\n#ifdef WIREFRAME_QUAD\nvarying vec4 v_Barycentric;\nfloat edgeFactor () {\n vec4 d = fwidth(v_Barycentric);\n vec4 a4 = smoothstep(vec4(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(min(a4.x, a4.y), a4.z), a4.w);\n}\n#elif defined(WIREFRAME_TRIANGLE)\nvarying vec3 v_Barycentric;\nfloat edgeFactor () {\n vec3 d = fwidth(v_Barycentric);\n vec3 a3 = smoothstep(vec3(0.0), d * wireframeLineWidth, v_Barycentric);\n return min(min(a3.x, a3.y), a3.z);\n}\n#endif\n\n@end\n\n\n@export ecgl.common.wireframe.fragmentMain\n\n#if defined(WIREFRAME_QUAD) || defined(WIREFRAME_TRIANGLE)\n if (wireframeLineWidth > 0.) {\n vec4 lineColor = wireframeLineColor;\n#ifdef SRGB_DECODE\n lineColor = sRGBToLinear(lineColor);\n#endif\n\n gl_FragColor.rgb = mix(gl_FragColor.rgb, lineColor.rgb, (1.0 - edgeFactor()) * lineColor.a);\n }\n#endif\n@end\n\n\n\n\n@export ecgl.common.bumpMap.header\n\n#ifdef BUMPMAP_ENABLED\nuniform sampler2D bumpMap;\nuniform float bumpScale : 1.0;\n\n\nvec3 bumpNormal(vec3 surfPos, vec3 surfNormal, vec3 baseNormal)\n{\n vec2 dSTdx = dFdx(v_Texcoord);\n vec2 dSTdy = dFdy(v_Texcoord);\n\n float Hll = bumpScale * texture2D(bumpMap, v_Texcoord).x;\n float dHx = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdx).x - Hll;\n float dHy = bumpScale * texture2D(bumpMap, v_Texcoord + dSTdy).x - Hll;\n\n vec3 vSigmaX = dFdx(surfPos);\n vec3 vSigmaY = dFdy(surfPos);\n vec3 vN = surfNormal;\n\n vec3 R1 = cross(vSigmaY, vN);\n vec3 R2 = cross(vN, vSigmaX);\n\n float fDet = dot(vSigmaX, R1);\n\n vec3 vGrad = sign(fDet) * (dHx * R1 + dHy * R2);\n return normalize(abs(fDet) * baseNormal - vGrad);\n\n}\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexHeader\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.vertexMain\n\n#ifdef NORMALMAP_ENABLED\n if (dot(tangent, tangent) > 0.0) {\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n }\n#endif\n\n@end\n\n\n@export ecgl.common.normalMap.fragmentHeader\n\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@end\n\n@export ecgl.common.normalMap.fragmentMain\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, v_DetailTexcoord).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n N = normalize(tbn * N);\n }\n }\n#endif\n@end\n\n\n\n@export ecgl.common.vertexAnimation.header\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute vec3 prevNormal;\nuniform float percent;\n#endif\n\n@end\n\n@export ecgl.common.vertexAnimation.main\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n vec3 norm = mix(prevNormal, normal, percent);\n#else\n vec3 pos = position;\n vec3 norm = normal;\n#endif\n\n@end\n\n\n@export ecgl.common.ssaoMap.header\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n@end\n\n@export ecgl.common.ssaoMap.main\n float ao = 1.0;\n#ifdef SSAOMAP_ENABLED\n ao = texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r;\n#endif\n@end\n\n\n\n\n@export ecgl.common.diffuseLayer.header\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\nuniform float layerDiffuseIntensity[LAYER_DIFFUSEMAP_COUNT];\nuniform sampler2D layerDiffuseMap[LAYER_DIFFUSEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.header\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\nuniform float layerEmissionIntensity[LAYER_EMISSIVEMAP_COUNT];\nuniform sampler2D layerEmissiveMap[LAYER_EMISSIVEMAP_COUNT];\n#endif\n\n@end\n\n@export ecgl.common.layers.header\n@import ecgl.common.diffuseLayer.header\n@import ecgl.common.emissiveLayer.header\n@end\n\n@export ecgl.common.diffuseLayer.main\n\n#if (LAYER_DIFFUSEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_DIFFUSEMAP_COUNT; _idx_++) {{\n float intensity = layerDiffuseIntensity[_idx_];\n vec4 texel2 = texture2D(layerDiffuseMap[_idx_], v_Texcoord);\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n albedoTexel.rgb = mix(albedoTexel.rgb, texel2.rgb * intensity, texel2.a);\n albedoTexel.a = texel2.a + (1.0 - texel2.a) * albedoTexel.a;\n }}\n#endif\n\n@end\n\n@export ecgl.common.emissiveLayer.main\n\n#if (LAYER_EMISSIVEMAP_COUNT > 0)\n for (int _idx_ = 0; _idx_ < LAYER_EMISSIVEMAP_COUNT; _idx_++)\n {{\n vec4 texel2 = texture2D(layerEmissiveMap[_idx_], v_Texcoord) * layerEmissionIntensity[_idx_];\n #ifdef SRGB_DECODE\n texel2 = sRGBToLinear(texel2);\n #endif\n float intensity = layerEmissionIntensity[_idx_];\n gl_FragColor.rgb += texel2.rgb * texel2.a * intensity;\n }}\n#endif\n\n@end\n"},function(e,t,r){"use strict";t.a="@export ecgl.color.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\n@import ecgl.common.uv.header\n\nattribute vec2 texcoord : TEXCOORD_0;\nattribute vec3 position: POSITION;\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\nvoid main()\n{\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n @import ecgl.common.uv.main\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n@export ecgl.color.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.layers.header\n\n@import ecgl.common.uv.fragmentHeader\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.util.srgb\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n\n}\n@end"},function(e,t,r){"use strict";t.a="/**\n * http: */\n\n@export ecgl.lambert.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n\n@import ecgl.common.attributes\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.vertexAnimation.header\n\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n}\n\n@end\n\n\n@export ecgl.lambert.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\nuniform sampler2D detailMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(color);\n#else\n gl_FragColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n gl_FragColor *= sRGBToLinear(v_Color);\n #else\n gl_FragColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n gl_FragColor *= albedoTexel;\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseColor = vec3(0.0, 0.0, 0.0);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n diffuseColor += ambientLightColor[i] * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseColor += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n vec3 lightColor = directionalLightColor[i];\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n diffuseColor += lightColor * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor.rgb *= diffuseColor;\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"},function(e,t,r){"use strict";t.a="@export ecgl.realistic.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\n\n@import ecgl.common.wireframe.vertexHeader\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\nattribute vec4 tangent : TANGENT;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n\n@import ecgl.common.vertexAnimation.header\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nvoid main()\n{\n\n @import ecgl.common.uv.main\n\n @import ecgl.common.vertexAnimation.main\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n v_Normal = normalize((worldInverseTranspose * vec4(norm, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n\n#ifdef NORMALMAP_ENABLED\n v_Tangent = normalize((worldInverseTranspose * vec4(tangent.xyz, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n\n @import ecgl.common.wireframe.vertexMain\n\n}\n\n@end\n\n\n\n@export ecgl.realistic.fragment\n\n#define LAYER_DIFFUSEMAP_COUNT 0\n#define LAYER_EMISSIVEMAP_COUNT 0\n#define PI 3.14159265358979\n#define ROUGHNESS_CHANEL 0\n#define METALNESS_CHANEL 1\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform sampler2D diffuseMap;\n\nuniform sampler2D detailMap;\nuniform sampler2D metalnessMap;\nuniform sampler2D roughnessMap;\n\n@import ecgl.common.layers.header\n\nuniform float emissionIntensity: 1.0;\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nuniform float metalness : 0.0;\nuniform float roughness : 0.5;\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n@import ecgl.common.normalMap.fragmentHeader\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import clay.util.rgbm\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\n\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\n\nvoid main()\n{\n vec4 albedoColor = color;\n\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n albedoColor *= sRGBToLinear(v_Color);\n #else\n albedoColor *= v_Color;\n #endif\n#endif\n\n @import ecgl.common.albedo.main\n\n @import ecgl.common.diffuseLayer.main\n\n albedoColor *= albedoTexel;\n\n float m = metalness;\n\n#ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, v_DetailTexcoord)[METALNESS_CHANEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 specFactor = mix(vec3(0.04), baseColor, m);\n\n float g = 1.0 - roughness;\n\n#ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, v_DetailTexcoord)[ROUGHNESS_CHANEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n#endif\n\n vec3 N = v_Normal;\n\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n@import ecgl.common.normalMap.fragmentMain\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n vec3 diffuseTerm = vec3(0.0);\n vec3 specularTerm = vec3(0.0);\n\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, specFactor);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_] * ambientFactor * ao;\n }}\n#endif\n\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_] * ao;\n }}\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -directionalLightDirection[_idx_];\n vec3 lc = directionalLightColor[_idx_];\n\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, normalize(L)), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n\n vec3 li = lc * ndl * shadowContrib;\n\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n\n\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n L = vec3(L.x, L[NORMAL_UP_AXIS], L[NORMAL_FRONT_AXIS]);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = specFactor * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n specularTerm += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2 * ao;\n }}\n#endif\n\n gl_FragColor.rgb = albedoColor.rgb * diffuseTerm + specularTerm;\n gl_FragColor.a = albedoColor.a;\n\n#ifdef SRGB_ENCODE\n gl_FragColor = linearTosRGB(gl_FragColor);\n#endif\n\n @import ecgl.common.emissiveLayer.main\n\n @import ecgl.common.wireframe.fragmentMain\n}\n\n@end"},function(e,t,r){"use strict";t.a="@export ecgl.hatching.vertex\n\n@import ecgl.realistic.vertex\n\n@end\n\n\n@export ecgl.hatching.fragment\n\n#define NORMAL_UP_AXIS 1\n#define NORMAL_FRONT_AXIS 2\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform vec4 color : [0.0, 0.0, 0.0, 1.0];\nuniform vec4 paperColor : [1.0, 1.0, 1.0, 1.0];\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\n\n@import ecgl.common.ssaoMap.header\n\n@import ecgl.common.bumpMap.header\n\n@import clay.util.srgb\n\n@import ecgl.common.wireframe.fragmentHeader\n\n@import clay.plugin.compute_shadow_map\n\nuniform sampler2D hatch1;\nuniform sampler2D hatch2;\nuniform sampler2D hatch3;\nuniform sampler2D hatch4;\nuniform sampler2D hatch5;\nuniform sampler2D hatch6;\n\nfloat shade(in float tone) {\n vec4 c = vec4(1. ,1., 1., 1.);\n float step = 1. / 6.;\n vec2 uv = v_DetailTexcoord;\n if (tone <= step / 2.0) {\n c = mix(vec4(0.), texture2D(hatch6, uv), 12. * tone);\n }\n else if (tone <= step) {\n c = mix(texture2D(hatch6, uv), texture2D(hatch5, uv), 6. * tone);\n }\n if(tone > step && tone <= 2. * step){\n c = mix(texture2D(hatch5, uv), texture2D(hatch4, uv) , 6. * (tone - step));\n }\n if(tone > 2. * step && tone <= 3. * step){\n c = mix(texture2D(hatch4, uv), texture2D(hatch3, uv), 6. * (tone - 2. * step));\n }\n if(tone > 3. * step && tone <= 4. * step){\n c = mix(texture2D(hatch3, uv), texture2D(hatch2, uv), 6. * (tone - 3. * step));\n }\n if(tone > 4. * step && tone <= 5. * step){\n c = mix(texture2D(hatch2, uv), texture2D(hatch1, uv), 6. * (tone - 4. * step));\n }\n if(tone > 5. * step){\n c = mix(texture2D(hatch1, uv), vec4(1.), 6. * (tone - 5. * step));\n }\n\n return c.r;\n}\n\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n\nvoid main()\n{\n#ifdef SRGB_DECODE\n vec4 inkColor = sRGBToLinear(color);\n#else\n vec4 inkColor = color;\n#endif\n\n#ifdef VERTEX_COLOR\n #ifdef SRGB_DECODE\n inkColor *= sRGBToLinear(v_Color);\n #else\n inkColor *= v_Color;\n #endif\n#endif\n\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n\n float tone = 0.0;\n\n float ambientFactor = 1.0;\n\n#ifdef BUMPMAP_ENABLED\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n ambientFactor = dot(v_Normal, N);\n#endif\n\n vec3 N2 = vec3(N.x, N[NORMAL_UP_AXIS], N[NORMAL_FRONT_AXIS]);\n\n @import ecgl.common.ssaoMap.main\n\n#ifdef AMBIENT_LIGHT_COUNT\n for(int i = 0; i < AMBIENT_LIGHT_COUNT; i++)\n {\n tone += dot(ambientLightColor[i], w) * ambientFactor * ao;\n }\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n tone += dot(calcAmbientSHLight(_idx_, N2) * ambientSHLightColor[_idx_], w) * ao;\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int i = 0; i < DIRECTIONAL_LIGHT_COUNT; i++)\n {\n vec3 lightDirection = -directionalLightDirection[i];\n float lightTone = dot(directionalLightColor[i], w);\n\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsDir[i];\n }\n#endif\n\n float ndl = dot(N, normalize(lightDirection)) * shadowContrib;\n\n tone += lightTone * clamp(ndl, 0.0, 1.0);\n }\n#endif\n\n gl_FragColor = mix(inkColor, paperColor, shade(clamp(tone, 0.0, 1.0)));\n }\n@end\n"},function(e,t,r){"use strict";t.a="@export ecgl.sm.depth.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nuniform float percent : 1.0;\n#endif\n\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\n\nvoid main(){\n\n#ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n#else\n vec3 pos = position;\n#endif\n\n v_ViewPosition = worldViewProjection * vec4(pos, 1.0);\n gl_Position = v_ViewPosition;\n\n v_Texcoord = texcoord;\n\n}\n@end\n\n\n\n@export ecgl.sm.depth.fragment\n\n@import clay.sm.depth.fragment\n\n@end"},function(e,t,r){"use strict";function n(e,t){if(e&&e[t]&&(e[t].normal||e[t].emphasis)){var r=e[t].normal,n=e[t].emphasis;r&&(e[t]=r),n&&(e.emphasis=e.emphasis||{},e.emphasis[t]=n)}}function i(e){n(e,"itemStyle"),n(e,"lineStyle"),n(e,"areaStyle"),n(e,"label")}function a(e){e&&(e instanceof Array||(e=[e]),s.a.util.each(e,function(e){if(e.axisLabel){var t=e.axisLabel;s.a.util.extend(t,t.textStyle),t.textStyle=null}}))}var o=r(0),s=r.n(o),u=["bar3D","line3D","map3D","scatter3D","surface","lines3D","scatterGL","scatter3D"];t.a=function(e){s.a.util.each(e.series,function(t){s.a.util.indexOf(u,t.type)>=0&&(i(t),"mapbox"===t.coordinateSystem&&(t.coordinateSystem="mapbox3D",e.mapbox3D=e.mapbox))}),a(e.xAxis3D),a(e.yAxis3D),a(e.zAxis3D),a(e.grid3D),n(e.geo3D)}},function(e,t,r){"use strict";var n=(r(155),r(159),r(160),r(167),r(0)),i=r.n(n);i.a.registerAction({type:"grid3DChangeCamera",event:"grid3dcamerachanged",update:"series:updateCamera"},function(e,t){t.eachComponent({mainType:"grid3D",query:e},function(t){t.setView(e)})}),i.a.registerAction({type:"grid3DShowAxisPointer",event:"grid3dshowaxispointer",update:"grid3D:showAxisPointer"},function(e,t){}),i.a.registerAction({type:"grid3DHideAxisPointer",event:"grid3dhideaxispointer",update:"grid3D:hideAxisPointer"},function(e,t){})},function(e,t,r){"use strict";function n(e,t){return t.type||(t.data?"category":"value")}var i=r(0),a=r.n(i),o=r(156),s=a.a.extendComponentModel({type:"cartesian3DAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid3D",index:this.option.gridIndex,id:this.option.gridId})[0]}});a.a.helper.mixinAxisModelCommonMethods(s),Object(o.a)("x",s,n,{name:"X"}),Object(o.a)("y",s,n,{name:"Y"}),Object(o.a)("z",s,n,{name:"Z"})},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(157),o=r(158),s=r.n(o),u=["value","category","time","log"];t.a=function(e,t,r,n){i.a.util.each(u,function(o){t.extend({type:e+"Axis3D."+o,__ordinalMeta:null,mergeDefaultAndTheme:function(t,n){var a=n.getTheme();i.a.util.merge(t,a.get(o+"Axis3D")),i.a.util.merge(t,this.getDefaultOption()),t.type=r(e,t)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=s.a.createByAxisModel(this))},getCategories:function(){if("category"===this.option.type)return this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:i.a.util.merge(i.a.util.clone(a.a[o+"Axis3D"]),n||{},!0)})}),t.superClass.registerSubTypeDefaulter(e+"Axis3D",i.a.util.curry(r,e))}},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a={show:!0,grid3DIndex:0,inverse:!1,name:"",nameLocation:"middle",nameTextStyle:{fontSize:16},nameGap:20,axisPointer:{},axisLine:{},axisTick:{},axisLabel:{},splitArea:{}},o=i.a.util.merge({boundaryGap:!0,axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"},axisPointer:{label:{show:!1}}},a),s=i.a.util.merge({boundaryGap:[0,0],splitNumber:5,axisPointer:{label:{}}},a),u=i.a.util.defaults({scale:!0,min:"dataMin",max:"dataMax"},s),l=i.a.util.defaults({logBase:10},s);l.scale=!0,t.a={categoryAxis3D:o,valueAxis3D:s,timeAxis3D:u,logAxis3D:l}},function(e,t,r){function n(e){this.categories=e.categories||[],this._needCollect=e.needCollect,this._deduplication=e.deduplication,this._map}function i(e){return e._map||(e._map=s(e.categories))}function a(e){return u(e)&&null!=e.value?e.value:e+""}var o=r(13),s=o.createHashMap,u=o.isObject,l=o.map;n.createByAxisModel=function(e){var t=e.option,r=t.data,i=r&&l(r,a);return new n({categories:i,needCollect:!i,deduplication:!1!==t.dedplication})};var h=n.prototype;h.getOrdinal=function(e){return i(this).get(e)},h.parseAndCollect=function(e){var t,r=this._needCollect;if("string"!=typeof e&&!r)return e;if(r&&!this._deduplication)return t=this.categories.length,this.categories[t]=e,t;var n=i(this);return t=n.get(e),null==t&&(r?(t=this.categories.length,this.categories[t]=e,n.set(e,t)):t=NaN),t};var c=n;e.exports=c},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(44),o=r(28),s=r(29),u=i.a.extendComponentModel({type:"grid3D",dependencies:["xAxis3D","yAxis3D","zAxis3D"],defaultOption:{show:!0,zlevel:-10,left:0,top:0,width:"100%",height:"100%",environment:"auto",boxWidth:100,boxHeight:100,boxDepth:100,axisPointer:{show:!0,lineStyle:{color:"rgba(0, 0, 0, 0.8)",width:1},label:{show:!0,formatter:null,margin:8,textStyle:{fontSize:14,color:"#fff",backgroundColor:"rgba(0,0,0,0.5)",padding:3,borderRadius:3}}},axisLine:{show:!0,lineStyle:{color:"#333",width:2,type:"solid"}},axisTick:{show:!0,inside:!1,length:3,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,margin:8,textStyle:{fontSize:12}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},light:{main:{alpha:30,beta:40},ambient:{intensity:.4}},viewControl:{alpha:20,beta:40,autoRotate:!1,distance:200,minDistance:40,maxDistance:400}}});i.a.util.merge(u.prototype,a.a),i.a.util.merge(u.prototype,o.a),i.a.util.merge(u.prototype,s.a)},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(1),o=r(45),s=r(25),u=r(2),l=r(81),h=r(30),c=r(162),d=r(164),f=r(63),p=r(46),m=u.a.firstNotNull;a.a.Shader.import(p.a),["x","y","z"].forEach(function(e){i.a.extendComponentView({type:e+"Axis3D"})});var g={x:0,y:2,z:1};i.a.extendComponentView({type:"grid3D",__ecgl__:!0,init:function(e,t){var r=[["y","z","x",-1,"left"],["y","z","x",1,"right"],["x","y","z",-1,"bottom"],["x","y","z",1,"top"],["x","z","y",-1,"far"],["x","z","y",1,"near"]],n=["x","y","z"],i=new a.a.Material({shader:a.a.createShader("ecgl.color"),depthMask:!1,transparent:!0}),u=new a.a.Material({shader:a.a.createShader("ecgl.meshLines3D"),depthMask:!1,transparent:!0});i.define("fragment","DOUBLE_SIDED"),i.define("both","VERTEX_COLOR"),this.groupGL=new a.a.Node,this._control=new o.a({zr:t.getZr()}),this._control.init(),this._faces=r.map(function(e){var t=new c.a(e,u,i);return this.groupGL.add(t.rootNode),t},this),this._axes=n.map(function(e){var t=new d.a(e,u);return this.groupGL.add(t.rootNode),t},this);var p=t.getDevicePixelRatio();this._axisLabelSurface=new l.a({width:256,height:256,devicePixelRatio:p}),this._axisLabelSurface.onupdate=function(){t.getZr().refresh()},this._axisPointerLineMesh=new a.a.Mesh({geometry:new s.a({useNativeLine:!1}),material:u,castShadow:!1,ignorePicking:!0,renderOrder:3}),this.groupGL.add(this._axisPointerLineMesh),this._axisPointerLabelsSurface=new l.a({width:128,height:128,devicePixelRatio:p}),this._axisPointerLabelsMesh=new f.a({ignorePicking:!0,renderOrder:4,castShadow:!1}),this._axisPointerLabelsMesh.material.set("textureAtlas",this._axisPointerLabelsSurface.getTexture()),this.groupGL.add(this._axisPointerLabelsMesh),this._lightRoot=new a.a.Node,this._sceneHelper=new h.a,this._sceneHelper.initLight(this._lightRoot)},render:function(e,t,r){this._model=e,this._api=r;var n=e.coordinateSystem;n.viewGL.add(this._lightRoot),e.get("show")?n.viewGL.add(this.groupGL):n.viewGL.remove(this.groupGL);var i=this._control;i.setViewGL(n.viewGL);var a=e.getModel("viewControl");i.setFromViewControlModel(a,0),this._axisLabelSurface.clear(),i.off("update"),e.get("show")&&(this._faces.forEach(function(n){n.update(e,t,r)},this),this._axes.forEach(function(t){t.update(e,this._axisLabelSurface,r)},this)),i.on("update",this._onCameraChange.bind(this,e,r),this),this._sceneHelper.setScene(n.viewGL.scene),this._sceneHelper.updateLight(e),n.viewGL.setPostEffect(e.getModel("postEffect"),r),n.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._initMouseHandler(e)},afterRender:function(e,t,r,n){var i=n.renderer;this._sceneHelper.updateAmbientCubemap(i,e,r),this._sceneHelper.updateSkybox(i,e,r)},showAxisPointer:function(e,t,r,n){this._doShowAxisPointer(),this._updateAxisPointer(n.value)},hideAxisPointer:function(e,t,r,n){this._doHideAxisPointer()},_initMouseHandler:function(e){var t=e.coordinateSystem,r=t.viewGL;e.get("show")&&e.get("axisPointer.show")?r.on("mousemove",this._updateAxisPointerOnMousePosition,this):r.off("mousemove",this._updateAxisPointerOnMousePosition)},_updateAxisPointerOnMousePosition:function(e){if(!e.target){for(var t,r=this._model,n=r.coordinateSystem,i=n.viewGL,o=i.castRay(e.offsetX,e.offsetY,new a.a.Ray),s=0;sn[1]?0:1,s=this._faces[2*r+o],u=this._faces[2*r+1-o];s.rootNode.invisible=!0,u.rootNode.invisible=!1}},_updateAxisLinePosition:function(){var e=this._model.coordinateSystem,t=e.getAxis("x"),r=e.getAxis("y"),n=e.getAxis("z"),i=n.getExtentMax(),a=n.getExtentMin(),o=t.getExtentMin(),s=t.getExtentMax(),u=r.getExtentMax(),l=r.getExtentMin(),h=this._axes[0].rootNode,c=this._axes[1].rootNode,d=this._axes[2].rootNode,f=this._faces,p=f[4].rootNode.invisible?l:u,m=f[2].rootNode.invisible?i:a,g=f[0].rootNode.invisible?o:s,_=f[2].rootNode.invisible?i:a,v=f[0].rootNode.invisible?s:o,y=f[4].rootNode.invisible?l:u;h.rotation.identity(),c.rotation.identity(),d.rotation.identity(),f[4].rootNode.invisible&&(this._axes[0].flipped=!0,h.rotation.rotateX(Math.PI)),f[0].rootNode.invisible&&(this._axes[1].flipped=!0,c.rotation.rotateZ(Math.PI)),f[4].rootNode.invisible&&(this._axes[2].flipped=!0,d.rotation.rotateY(Math.PI)),h.position.set(0,m,p),c.position.set(g,_,0),d.position.set(v,0,y),h.update(),c.update(),d.update(),this._updateAxisLabelAlign()},_updateAxisLabelAlign:function(){var e=this._control.getCamera(),t=[new a.a.Vector4,new a.a.Vector4],r=new a.a.Vector4;this.groupGL.getWorldPosition(r),r.w=1,r.transformMat4(e.viewMatrix).transformMat4(e.projectionMatrix),r.x/=r.w,r.y/=r.w,this._axes.forEach(function(n){for(var i=n.axisLineCoords,a=(n.labelsMesh.geometry,0);ar.y?"bottom":"top"):(s="middle",o=h>r.x?"left":"right"),n.setSpriteAlign(o,s,this._api)},this)},_doShowAxisPointer:function(){this._axisPointerLineMesh.invisible&&(this._axisPointerLineMesh.invisible=!1,this._axisPointerLabelsMesh.invisible=!1,this._api.getZr().refresh())},_doHideAxisPointer:function(){this._axisPointerLineMesh.invisible||(this._axisPointerLineMesh.invisible=!0,this._axisPointerLabelsMesh.invisible=!0,this._api.getZr().refresh())},_updateAxisPointer:function(e){function t(e){return u.a.firstNotNull(e.model.get("axisPointer.show"),l.get("show"))}function r(e){var t=e.model.getModel("axisPointer",l),r=t.getModel("lineStyle"),n=a.a.parseColor(r.get("color")),i=m(r.get("width"),1),o=m(r.get("opacity"),1);return n[3]*=o,{color:n,lineWidth:i}}var n=this._model.coordinateSystem,i=n.dataToPoint(e),o=this._axisPointerLineMesh,s=o.geometry,l=this._model.getModel("axisPointer"),h=this._api.getDevicePixelRatio();s.convertToDynamicArray(!0);for(var c=0;c0&&e.rotation.rotateY(Math.PI),t.normal.z=-n)}function i(e,t,r){this.rootNode=new s.a.Node;var n=new s.a.Mesh({geometry:new l.a({useNativeLine:!1}),material:t,castShadow:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:1}),i=new s.a.Mesh({geometry:new h.a,material:r,castShadow:!1,culling:!1,ignorePicking:!0,$ignorePicking:!0,renderOrder:0});this.rootNode.add(i),this.rootNode.add(n),this.faceInfo=e,this.plane=new s.a.Plane,this.linesMesh=n,this.quadsMesh=i}var a=r(0),o=r.n(a),s=r(1),u=r(2),l=r(25),h=r(163),c=u.a.firstNotNull,d={x:0,y:2,z:1};i.prototype.update=function(e,t,r){var i=e.coordinateSystem,a=[i.getAxis(this.faceInfo[0]),i.getAxis(this.faceInfo[1])],o=this.linesMesh.geometry,s=this.quadsMesh.geometry;o.convertToDynamicArray(!0),s.convertToDynamicArray(!0),this._updateSplitLines(o,a,e,r),this._udpateSplitAreas(s,a,e,r),o.convertToTypedArray(),s.convertToTypedArray();var u=i.getAxis(this.faceInfo[2]);n(this.rootNode,this.plane,u,this.faceInfo[3])},i.prototype._updateSplitLines=function(e,t,r,n){var i=n.getDevicePixelRatio();t.forEach(function(n,a){var u=n.model,l=t[1-a].getExtent();if(!n.scale.isBlank()){var h=u.getModel("splitLine",r.getModel("splitLine"));if(h.get("show")){var d=h.getModel("lineStyle"),f=d.get("color"),p=c(d.get("opacity"),1),m=c(d.get("width"),1);f=o.a.util.isArray(f)?f:[f];for(var g=n.getTicksCoords({tickModel:h}),_=0,v=0;v65535?new Uint32Array(3*n):new Uint16Array(3*n))},getQuadVertexCount:function(){return 4},getQuadTriangleCount:function(){return 2},addQuad:function(){var e=u.create(),t=u.create(),r=u.create(),n=[0,3,1,3,2,1];return function(i,a){var o=this.attributes.position,s=this.attributes.normal,l=this.attributes.color;u.sub(e,i[1],i[0]),u.sub(t,i[2],i[1]),u.cross(r,e,t),u.normalize(r,r);for(var h=0;h<4;h++)o.set(this._vertexOffset+h,i[h]),l.set(this._vertexOffset+h,a),s.set(this._vertexOffset+h,r);for(var c=3*this._faceOffset,h=0;h<6;h++)this.indices[c+h]=n[h]+this._vertexOffset;this._vertexOffset+=4,this._faceOffset+=2}}()});a.a.util.defaults(l.prototype,o.a),t.a=l},function(e,t,r){"use strict";function n(e,t){var r=new o.a.Mesh({geometry:new s.a({useNativeLine:!1}),material:t,castShadow:!1,ignorePicking:!0,renderOrder:2}),n=new l.a;n.material.depthMask=!1;var i=new o.a.Node;i.add(r),i.add(n),this.rootNode=i,this.dim=e,this.linesMesh=r,this.labelsMesh=n,this.axisLineCoords=null,this.labelElements=[]}var i=r(0),a=r.n(i),o=r(1),s=r(25),u=r(2),l=r(63),h=u.a.firstNotNull,c={x:0,y:2,z:1},d={x:"y",y:"x",z:"y"};n.prototype.update=function(e,t,r){var n=e.coordinateSystem,i=n.getAxis(this.dim),s=this.linesMesh.geometry,u=this.labelsMesh.geometry;s.convertToDynamicArray(!0),u.convertToDynamicArray(!0);var l=i.model,f=i.getExtent(),p=r.getDevicePixelRatio(),m=l.getModel("axisLine",e.getModel("axisLine")),g=l.getModel("axisTick",e.getModel("axisTick")),_=l.getModel("axisLabel",e.getModel("axisLabel")),v=m.get("lineStyle.color");if(m.get("show")){var y=m.getModel("lineStyle"),x=[0,0,0],T=[0,0,0],b=c[i.dim];x[b]=f[0],T[b]=f[1],this.axisLineCoords=[x,T];var w=o.a.parseColor(v),E=h(y.get("width"),1),S=h(y.get("opacity"),1);w[3]*=S,s.addLine(x,T,w,E*p)}if(g.get("show")){var A=g.getModel("lineStyle"),M=o.a.parseColor(h(A.get("color"),v)),E=h(A.get("width"),1);M[3]*=h(A.get("opacity"),1);for(var C=i.getTicksCoords(),L=g.get("length"),D=0;D65535?new Uint32Array(3*r):new Uint16Array(3*r))},setSpriteAlign:function(e,t,r,n,i){null==r&&(r="left"),null==n&&(n="top");var a,o,s,u;switch(i=i||0,r){case"left":a=i,s=t[0]+i;break;case"center":case"middle":a=-t[0]/2,s=t[0]/2;break;case"right":a=-t[0]-i,s=-i}switch(n){case"bottom":o=i,u=t[1]+i;break;case"middle":o=-t[1]/2,u=t[1]/2;break;case"top":o=-t[1]-i,u=-i}var l=4*e,h=this.attributes.offset;h.set(l,[a,u]),h.set(l+1,[s,u]),h.set(l+2,[s,o]),h.set(l+3,[a,o])},addSprite:function(e,t,r,n,i,a){var o=this._vertexOffset;this.setSprite(this._vertexOffset/4,e,t,r,n,i,a);for(var u=0;u1?"."+e[1]:""))}function i(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,function(e,t){return t.toUpperCase()}),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}function a(e){return null==e?"":(e+"").replace(g,function(e,t){return _[t]})}function o(e,t,r){d.isArray(t)||(t=[t]);var n=t.length;if(!n)return"";for(var i=t[0].$vars||[],o=0;o':'':""}function l(e,t){return e+="","0000".substr(0,t-e.length)+e}function h(e,t,r){"week"!==e&&"month"!==e&&"quarter"!==e&&"half-year"!==e&&"year"!==e||(e="MM-dd\nyyyy");var n=p.parseDate(t),i=r?"UTC":"",a=n["get"+i+"FullYear"](),o=n["get"+i+"Month"]()+1,s=n["get"+i+"Date"](),u=n["get"+i+"Hours"](),h=n["get"+i+"Minutes"](),c=n["get"+i+"Seconds"](),d=n["get"+i+"Milliseconds"]();return e=e.replace("MM",l(o,2)).replace("M",o).replace("yyyy",a).replace("yy",a%100).replace("dd",l(s,2)).replace("d",s).replace("hh",l(u,2)).replace("h",u).replace("mm",l(h,2)).replace("m",h).replace("ss",l(c,2)).replace("s",c).replace("SSS",l(d,3))}function c(e){return e?e.charAt(0).toUpperCase()+e.substr(1):e}var d=r(13),f=r(172),p=r(85),m=d.normalizeCssArray,g=/([&<>"'])/g,_={"&":"&","<":"<",">":">",'"':""","'":"'"},v=["a","b","c","d","e","f","g"],y=function(e,t){return"{"+e+(null==t?"":t)+"}"},x=f.truncateText,T=f.getBoundingRect;t.addCommas=n,t.toCamelCase=i,t.normalizeCssArray=m,t.encodeHTML=a,t.formatTpl=o,t.formatTplSimple=s,t.getTooltipMarker=u,t.formatTime=h,t.capitalFirst=c,t.truncateText=x,t.getTextRect=T},function(e,t,r){function n(e,t){I[e]=t}function i(e,t){t=t||P;var r=e+":"+t;if(L[r])return L[r];for(var n=(e+"").split("\n"),i=0,a=0,o=n.length;aN&&(D=0,L={}),D++,L[r]=i,i}function a(e,t,r,n,i,a,u){return a?s(e,t,r,n,i,a,u):o(e,t,r,n,i,u)}function o(e,t,r,n,a,o){var s=_(e,t,a,o),h=i(e,t);a&&(h+=a[1]+a[3]);var c=s.outerHeight,d=u(0,h,r),f=l(0,c,n),p=new T(d,f,h,c);return p.lineHeight=s.lineHeight,p}function s(e,t,r,n,i,a,o){var s=v(e,{rich:a,truncate:o,font:t,textAlign:r,textPadding:i}),h=s.outerWidth,c=s.outerHeight,d=u(0,h,r),f=l(0,c,n);return new T(d,f,h,c)}function u(e,t,r){return"right"===r?e-=t:"center"===r&&(e-=t/2),e}function l(e,t,r){return"middle"===r?e-=t/2:"bottom"===r&&(e-=t),e}function h(e,t,r){var n=t.x,i=t.y,a=t.height,o=t.width,s=a/2,u="left",l="top";switch(e){case"left":n-=r,i+=s,u="right",l="middle";break;case"right":n+=r+o,i+=s,l="middle";break;case"top":n+=o/2,i-=r,u="center",l="bottom";break;case"bottom":n+=o/2,i+=a+r,u="center";break;case"inside":n+=o/2,i+=s,u="center",l="middle";break;case"insideLeft":n+=r,i+=s,l="middle";break;case"insideRight":n+=o-r,i+=s,u="right",l="middle";break;case"insideTop":n+=o/2,i+=r,u="center";break;case"insideBottom":n+=o/2,i+=a-r,u="center",l="bottom";break;case"insideTopLeft":n+=r,i+=r;break;case"insideTopRight":n+=o-r,i+=r,u="right";break;case"insideBottomLeft":n+=r,i+=a-r,l="bottom";break;case"insideBottomRight":n+=o-r,i+=a-r,u="right",l="bottom"}return{x:n,y:i,textAlign:u,textVerticalAlign:l}}function c(e,t,r,n,i){if(!t)return"";var a=(e+"").split("\n");i=d(t,r,n,i);for(var o=0,s=a.length;o=o;u++)s-=o;var l=i(r);return l>s&&(r="",l=0),s=e-l,n.ellipsis=r,n.ellipsisWidth=l,n.contentWidth=s,n.containerWidth=e,n}function f(e,t){var r=t.containerWidth,n=t.font,a=t.contentWidth;if(!r)return"";var o=i(e,n);if(o<=r)return e;for(var s=0;;s++){if(o<=a||s>=t.maxIterations){e+=t.ellipsis;break}var u=0===s?p(e,a,t.ascCharWidth,t.cnCharWidth):o>0?Math.floor(e.length*a/o):0;e=e.substr(0,u),o=i(e,n)}return""===e&&(e=t.placeholder),e}function p(e,t,r,n){for(var i=0,a=0,o=e.length;au)e="",a=[];else if(null!=l)for(var h=d(l-(r?r[1]+r[3]:0),t,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),c=0,p=a.length;ca&&y(r,e.substring(a,o)),y(r,n[2],n[1]),a=R.lastIndex}ag)return{lines:[],width:0,height:0};E.textWidth=i(E.text,L);var N=S.textWidth,P=null==N||"auto"===N;if("string"==typeof N&&"%"===N.charAt(N.length-1))E.percentWidth=N,h.push(E),N=0;else{if(P){N=E.textWidth;var I=S.textBackgroundColor,O=I&&I.image;O&&(O=b.findExistImage(O),b.isImageReady(O)&&(N=Math.max(N,O.width*D/O.height)))}var F=C?C[1]+C[3]:0;N+=F;var B=null!=p?p-T:null;null!=B&&B4){console.warn("Support at most 4 cascade");continue}m.shadowCascade>1&&(s=m),this.renderDirectionalLightShadow(e,t,r,m,d,c,h)}else"SPOT_LIGHT"===m.type?this.renderSpotLightShadow(e,t,m,l,u):"POINT_LIGHT"===m.type&&this.renderPointLightShadow(e,t,m,f);this._shadowMapNumber[m.type]++}for(var g in this._shadowMapNumber)for(var _=this._shadowMapNumber[g],v=g+"_SHADOWMAP_COUNT",p=0;p0?x.define("fragment",v,_):x.isDefined("fragment",v)&&x.undefine("fragment",v))}for(var p=0;p0){var b=h.map(i);if(T.directionalLightShadowMaps={value:h,type:"tv"},T.directionalLightMatrices={value:c,type:"m4v"},T.directionalLightShadowMapSizes={value:b,type:"1fv"},s){var w=d.slice(),E=d.slice();w.pop(),E.shift(),w.reverse(),E.reverse(),c.reverse(),T.shadowCascadeClipsNear={value:w,type:"1fv"},T.shadowCascadeClipsFar={value:E,type:"1fv"}}}if(u.length>0){var S=u.map(i),T=t.shadowUniforms;T.spotLightShadowMaps={value:u,type:"tv"},T.spotLightMatrices={value:l,type:"m4v"},T.spotLightShadowMapSizes={value:S,type:"1fv"}}f.length>0&&(T.pointLightShadowMaps={value:f,type:"tv"})}},renderDirectionalLightShadow:function(){var e=new l.a,t=new h.a,r=new u.a,a=new h.a,o=new h.a,s=new h.a,d=new h.a;return function(u,l,f,p,m,g,_){var y=this._getDepthMaterial(p),x={getMaterial:function(e){return e.shadowDepthMaterial||y},isMaterialChanged:i,getUniform:n,ifRender:function(e){return e.castShadow},sortCompare:c.a.opaqueSortCompare};if(!l.viewBoundingBoxLastFrame.isFinite()){var T=l.getBoundingBox();l.viewBoundingBoxLastFrame.copy(T).applyTransform(f.viewMatrix)}var w=Math.min(-l.viewBoundingBoxLastFrame.min.z,f.far),E=Math.max(-l.viewBoundingBoxLastFrame.max.z,f.near),A=this._getDirectionalLightCamera(p,l,f),M=s.array;d.copy(A.projectionMatrix),b.a.invert(o.array,A.worldTransform.array),b.a.multiply(o.array,o.array,f.worldTransform.array),b.a.multiply(M,d.array,o.array);for(var C=[],L=f instanceof v.a,D=(f.near+f.far)/(f.near-f.far),N=2*f.near*f.far/(f.near-f.far),R=0;R<=p.shadowCascade;R++){var P=E*Math.pow(w/E,R/p.shadowCascade),I=E+(w-E)*R/p.shadowCascade,O=P*p.cascadeSplitLogFactor+I*(1-p.cascadeSplitLogFactor);C.push(O),m.push(-(-O*D+N)/-O)}var F=this._getTexture(p,p.shadowCascade);_.push(F);var B=u.viewport,U=u.gl;this._frameBuffer.attach(F),this._frameBuffer.bind(u),U.clear(U.COLOR_BUFFER_BIT|U.DEPTH_BUFFER_BIT);for(var R=0;Ru?s>l?v[i>0?"px":"nx"]=!0:v[o>0?"pz":"nz"]=!0:u>l?v[a>0?"py":"ny"]=!0:v[o>0?"pz":"nz"]=!0}for(var r=0;r=0||(this.nodes.push(e),this._dirty=!0)},removeNode:function(e){"string"==typeof e&&(e=this.getNodeByName(e));var t=this.nodes.indexOf(e);t>=0&&(this.nodes.splice(t,1),this._dirty=!0)},getNodeByName:function(e){for(var t=0;t=t.COLOR_ATTACHMENT0&&l<=t.COLOR_ATTACHMENT0+8&&c.push(l);h.drawBuffersEXT(c)}e.saveClear(),e.clearBit=i.a.DEPTH_BUFFER_BIT|i.a.COLOR_BUFFER_BIT,r=e.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ),e.restoreClear(),n.unbind(e)}else r=e.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ);this.trigger("afterrender",r),this._rendering=!1,this._rendered=!0}});t.a=o},function(e,t,r){"use strict";var n=r(48),i=n.a.extend(function(){return{texture:null,outputs:{color:{}}}},function(){},{getOutput:function(e,t){return this.texture},beforeFrame:function(){},afterFrame:function(){}});t.a=i},function(e,t,r){"use strict";var n=r(16),i=r(48),a=i.a.extend(function(){return{name:"",inputs:{},outputs:null,shader:"",inputLinks:{},outputLinks:{},pass:null,_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}},function(){var e=new n.a({fragment:this.shader});this.pass=e},{render:function(e,t){this.trigger("beforerender",e),this._rendering=!0;var r=e.gl;for(var n in this.inputLinks){var i=this.inputLinks[n],a=i.node.getOutput(e,i.pin);this.pass.setUniform(n,a)}if(this.outputs){this.pass.outputs={};var o={};for(var s in this.outputs){var u=this.updateParameter(s,e);isNaN(u.width)&&this.updateParameter(s,e);var l=this.outputs[s],h=this._compositor.allocateTexture(u);this._outputTextures[s]=h;var c=l.attachment||r.COLOR_ATTACHMENT0;"string"==typeof c&&(c=r[c]),o[c]=h}this._compositor.getFrameBuffer().bind(e);for(var c in o)this._compositor.getFrameBuffer().attach(o[c],c);this.pass.render(e),this._compositor.getFrameBuffer().updateMipmap(e)}else this.pass.outputs=null,this._compositor.getFrameBuffer().unbind(e),this.pass.render(e,t);for(var n in this.inputLinks){var i=this.inputLinks[n];i.node.removeReference(i.pin)}this._rendering=!1,this._rendered=!0,this.trigger("afterrender",e)},updateParameter:function(e,t){var r=this.outputs[e],n=r.parameters,i=r._parametersCopy;if(i||(i=r._parametersCopy={}),n)for(var a in n)"width"!==a&&"height"!==a&&(i[a]=n[a]);var o,s;return o=n.width instanceof Function?n.width.call(this,t):n.width,s=n.height instanceof Function?n.height.call(this,t):n.height,o=Math.ceil(o),s=Math.ceil(s),i.width===o&&i.height===s||this._outputTextures[e]&&this._outputTextures[e].dispose(t),i.width=o,i.height=s,i},setParameter:function(e,t){this.pass.setUniform(e,t)},getParameter:function(e){return this.pass.getUniform(e)},setParameters:function(e){for(var t in e)this.setParameter(t,e[t])},define:function(e,t){this.pass.material.define("fragment",e,t)},undefine:function(e){this.pass.material.undefine("fragment",e)},removeReference:function(e){if(0===--this._outputReferences[e]){this.outputs[e].keepLastFrame?(this._prevOutputTextures[e]&&this._compositor.releaseTexture(this._prevOutputTextures[e]),this._prevOutputTextures[e]=this._outputTextures[e]):this._compositor.releaseTexture(this._outputTextures[e])}},clear:function(){i.a.prototype.clear.call(this),this.pass.material.disableTexturesAll()}});t.a=a},function(e,t,r){"use strict";function n(e){e.import(i.a),e.import(a.a),e.import(o.a),e.import(s.a),e.import(u.a),e.import(l.a),e.import(h.a),e.import(c.a),e.import(d.a),e.import(f.a),e.import(p.a),e.import(m.a),e.import(g.a)}t.a=n;var i=r(185),a=r(87),o=r(186),s=r(88),u=r(187),l=r(89),h=r(90),c=r(91),d=r(92),f=r(93),p=r(188),m=r(94),g=r(95)},function(e,t,r){"use strict";t.a="@export clay.compositor.coloradjust\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float exposure : 0.0;\nuniform float gamma : 1.0;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = clamp(tex.rgb + vec3(brightness), 0.0, 1.0);\n color = clamp( (color-vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n color = clamp( color * pow(2.0, exposure), 0.0, 1.0);\n color = clamp( pow(color, vec3(gamma)), 0.0, 1.0);\n float luminance = dot( color, w );\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.brightness\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = tex.rgb + vec3(brightness);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.contrast\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float contrast : 1.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = (tex.rgb-vec3(0.5))*contrast+vec3(0.5);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.exposure\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float exposure : 0.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb * pow(2.0, exposure);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.gamma\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float gamma : 1.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = pow(tex.rgb, vec3(gamma));\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.saturation\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb;\n float luminance = dot(color, w);\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end"},function(e,t,r){"use strict";t.a="@export clay.compositor.hdr.log_lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n float luminance = dot(tex.rgb, w);\n luminance = log(luminance + 0.001);\n gl_FragColor = encodeHDR(vec4(vec3(luminance), 1.0));\n}\n@end\n@export clay.compositor.hdr.lum_adaption\nvarying vec2 v_Texcoord;\nuniform sampler2D adaptedLum;\nuniform sampler2D currentLum;\nuniform float frameTime : 0.02;\n@import clay.util.rgbm\nvoid main()\n{\n float fAdaptedLum = decodeHDR(texture2D(adaptedLum, vec2(0.5, 0.5))).r;\n float fCurrentLum = exp(encodeHDR(texture2D(currentLum, vec2(0.5, 0.5))).r);\n fAdaptedLum += (fCurrentLum - fAdaptedLum) * (1.0 - pow(0.98, 30.0 * frameTime));\n gl_FragColor = encodeHDR(vec4(vec3(fAdaptedLum), 1.0));\n}\n@end\n@export clay.compositor.lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord );\n float luminance = dot(tex.rgb, w);\n gl_FragColor = vec4(vec3(luminance), 1.0);\n}\n@end"},function(e,t,r){"use strict";t.a="@export clay.compositor.vignette\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float darkness: 1;\nuniform float offset: 1;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = texel.rgb;\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(offset);\n gl_FragColor = encodeHDR(vec4(mix(texel.rgb, vec3(1.0 - darkness), dot(uv, uv)), texel.a));\n}\n@end"},function(e,t,r){"use strict";t.a="@export clay.compositor.lensflare\n#define SAMPLE_NUMBER 8\nuniform sampler2D texture;\nuniform sampler2D lenscolor;\nuniform vec2 textureSize : [512, 512];\nuniform float dispersal : 0.3;\nuniform float haloWidth : 0.4;\nuniform float distortion : 1.0;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvec4 textureDistorted(\n in vec2 texcoord,\n in vec2 direction,\n in vec3 distortion\n) {\n return vec4(\n decodeHDR(texture2D(texture, texcoord + direction * distortion.r)).r,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.g)).g,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.b)).b,\n 1.0\n );\n}\nvoid main()\n{\n vec2 texcoord = -v_Texcoord + vec2(1.0); vec2 textureOffset = 1.0 / textureSize;\n vec2 ghostVec = (vec2(0.5) - texcoord) * dispersal;\n vec2 haloVec = normalize(ghostVec) * haloWidth;\n vec3 distortion = vec3(-textureOffset.x * distortion, 0.0, textureOffset.x * distortion);\n vec4 result = vec4(0.0);\n for (int i = 0; i < SAMPLE_NUMBER; i++)\n {\n vec2 offset = fract(texcoord + ghostVec * float(i));\n float weight = length(vec2(0.5) - offset) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n }\n result *= texture2D(lenscolor, vec2(length(vec2(0.5) - texcoord)) / length(vec2(0.5)));\n float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n vec2 offset = fract(texcoord + haloVec);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n gl_FragColor = result;\n}\n@end"},function(e,t,r){"use strict";function n(e){for(var t=new Uint8Array(e*e*4),r=0,n=new u.a,i=0;i=1?.95:0,weight2:n>=1?.05:1}),p.render(e)),h.attach(u),d.setUniform("texture",this._physicallyCorrect?this._currentTexture:s),d.render(e),h.attach(l),f.setUniform("texture",u),f.render(e),h.unbind(e),this._physicallyCorrect){var v=this._prevTexture;this._prevTexture=this._currentTexture,this._currentTexture=v}},n.prototype.getTargetTexture=function(){return this._texture3},n.prototype.setParameter=function(e,t){"maxIteration"===e?this._ssrPass.material.define("fragment","MAX_ITERATION",t):this._ssrPass.setUniform(e,t)},n.prototype.setPhysicallyCorrect=function(e){e?(this._normalDistribution||(this._normalDistribution=h.a.generateNormalDistribution(64,this._totalSamples)),this._ssrPass.material.define("fragment","PHYSICALLY_CORRECT"),this._ssrPass.material.set("normalDistribution",this._normalDistribution),this._ssrPass.material.set("normalDistributionSize",[64,this._totalSamples])):this._ssrPass.material.undefine("fragment","PHYSICALLY_CORRECT"),this._physicallyCorrect=e},n.prototype.setSSAOTexture=function(e){var t=this._blurPass2;e?(t.material.enableTexture("ssaoTex"),t.material.set("ssaoTex",e)):t.material.disableTexture("ssaoTex")},n.prototype.isFinished=function(e){return!this._physicallyCorrect||e>this._totalSamples/this._samplePerFrame},n.prototype.dispose=function(e){this._ssrTexture.dispose(e),this._texture2.dispose(e),this._texture3.dispose(e),this._prevTexture.dispose(e),this._currentTexture.dispose(e),this._frameBuffer.dispose(e)},t.a=n},function(e,t,r){"use strict";t.a="@export ecgl.ssr.main\n\n#define SHADER_NAME SSR\n#define MAX_ITERATION 20;\n#define SAMPLE_PER_FRAME 5;\n#define TOTAL_SAMPLES 128;\n\nuniform sampler2D sourceTexture;\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform sampler2D gBufferTexture3;\nuniform samplerCube specularCubemap;\nuniform float specularIntensity: 1;\n\nuniform mat4 projection;\nuniform mat4 projectionInv;\nuniform mat4 toViewSpace;\nuniform mat4 toWorldSpace;\n\nuniform float maxRayDistance: 200;\n\nuniform float pixelStride: 16;\nuniform float pixelStrideZCutoff: 50; \nuniform float screenEdgeFadeStart: 0.9; \nuniform float eyeFadeStart : 0.2; uniform float eyeFadeEnd: 0.8; \nuniform float minGlossiness: 0.2; uniform float zThicknessThreshold: 1;\n\nuniform float nearZ;\nuniform vec2 viewportSize : VIEWPORT_SIZE;\n\nuniform float jitterOffset: 0;\n\nvarying vec2 v_Texcoord;\n\n#ifdef DEPTH_DECODE\n@import clay.util.decode_float\n#endif\n\n#ifdef PHYSICALLY_CORRECT\nuniform sampler2D normalDistribution;\nuniform float sampleOffset: 0;\nuniform vec2 normalDistributionSize;\n\nvec3 transformNormal(vec3 H, vec3 N) {\n vec3 upVector = N.y > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\n vec3 tangentX = normalize(cross(N, upVector));\n vec3 tangentZ = cross(N, tangentX);\n return normalize(tangentX * H.x + N * H.y + tangentZ * H.z);\n}\nvec3 importanceSampleNormalGGX(float i, float roughness, vec3 N) {\n float p = fract((i + sampleOffset) / float(TOTAL_SAMPLES));\n vec3 H = texture2D(normalDistribution,vec2(roughness, p)).rgb;\n return transformNormal(H, N);\n}\nfloat G_Smith(float g, float ndv, float ndl) {\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\n#endif\n\nfloat fetchDepth(sampler2D depthTexture, vec2 uv)\n{\n vec4 depthTexel = texture2D(depthTexture, uv);\n return depthTexel.r * 2.0 - 1.0;\n}\n\nfloat linearDepth(float depth)\n{\n if (projection[3][3] == 0.0) {\n return projection[3][2] / (depth * projection[2][3] - projection[2][2]);\n }\n else {\n return (depth - projection[3][2]) / projection[2][2];\n }\n}\n\nbool rayIntersectDepth(float rayZNear, float rayZFar, vec2 hitPixel)\n{\n if (rayZFar > rayZNear)\n {\n float t = rayZFar; rayZFar = rayZNear; rayZNear = t;\n }\n float cameraZ = linearDepth(fetchDepth(gBufferTexture2, hitPixel));\n return rayZFar <= cameraZ && rayZNear >= cameraZ - zThicknessThreshold;\n}\n\n\nbool traceScreenSpaceRay(\n vec3 rayOrigin, vec3 rayDir, float jitter,\n out vec2 hitPixel, out vec3 hitPoint, out float iterationCount\n)\n{\n float rayLength = ((rayOrigin.z + rayDir.z * maxRayDistance) > -nearZ)\n ? (-nearZ - rayOrigin.z) / rayDir.z : maxRayDistance;\n\n vec3 rayEnd = rayOrigin + rayDir * rayLength;\n\n vec4 H0 = projection * vec4(rayOrigin, 1.0);\n vec4 H1 = projection * vec4(rayEnd, 1.0);\n\n float k0 = 1.0 / H0.w, k1 = 1.0 / H1.w;\n\n vec3 Q0 = rayOrigin * k0, Q1 = rayEnd * k1;\n\n vec2 P0 = (H0.xy * k0 * 0.5 + 0.5) * viewportSize;\n vec2 P1 = (H1.xy * k1 * 0.5 + 0.5) * viewportSize;\n\n P1 += dot(P1 - P0, P1 - P0) < 0.0001 ? 0.01 : 0.0;\n vec2 delta = P1 - P0;\n\n bool permute = false;\n if (abs(delta.x) < abs(delta.y)) {\n permute = true;\n delta = delta.yx;\n P0 = P0.yx;\n P1 = P1.yx;\n }\n float stepDir = sign(delta.x);\n float invdx = stepDir / delta.x;\n\n vec3 dQ = (Q1 - Q0) * invdx;\n float dk = (k1 - k0) * invdx;\n\n vec2 dP = vec2(stepDir, delta.y * invdx);\n\n float strideScaler = 1.0 - min(1.0, -rayOrigin.z / pixelStrideZCutoff);\n float pixStride = 1.0 + strideScaler * pixelStride;\n\n dP *= pixStride; dQ *= pixStride; dk *= pixStride;\n\n vec4 pqk = vec4(P0, Q0.z, k0);\n vec4 dPQK = vec4(dP, dQ.z, dk);\n\n pqk += dPQK * jitter;\n float rayZFar = (dPQK.z * 0.5 + pqk.z) / (dPQK.w * 0.5 + pqk.w);\n float rayZNear;\n\n bool intersect = false;\n\n vec2 texelSize = 1.0 / viewportSize;\n\n iterationCount = 0.0;\n\n for (int i = 0; i < MAX_ITERATION; i++)\n {\n pqk += dPQK;\n\n rayZNear = rayZFar;\n rayZFar = (dPQK.z * 0.5 + pqk.z) / (dPQK.w * 0.5 + pqk.w);\n\n hitPixel = permute ? pqk.yx : pqk.xy;\n hitPixel *= texelSize;\n\n intersect = rayIntersectDepth(rayZNear, rayZFar, hitPixel);\n\n iterationCount += 1.0;\n\n dPQK *= 1.2;\n\n if (intersect) {\n break;\n }\n }\n\n Q0.xy += dQ.xy * iterationCount;\n Q0.z = pqk.z;\n hitPoint = Q0 / pqk.w;\n\n return intersect;\n}\n\nfloat calculateAlpha(\n float iterationCount, float reflectivity,\n vec2 hitPixel, vec3 hitPoint, float dist, vec3 rayDir\n)\n{\n float alpha = clamp(reflectivity, 0.0, 1.0);\n alpha *= 1.0 - (iterationCount / float(MAX_ITERATION));\n vec2 hitPixelNDC = hitPixel * 2.0 - 1.0;\n float maxDimension = min(1.0, max(abs(hitPixelNDC.x), abs(hitPixelNDC.y)));\n alpha *= 1.0 - max(0.0, maxDimension - screenEdgeFadeStart) / (1.0 - screenEdgeFadeStart);\n\n float _eyeFadeStart = eyeFadeStart;\n float _eyeFadeEnd = eyeFadeEnd;\n if (_eyeFadeStart > _eyeFadeEnd) {\n float tmp = _eyeFadeEnd;\n _eyeFadeEnd = _eyeFadeStart;\n _eyeFadeStart = tmp;\n }\n\n float eyeDir = clamp(rayDir.z, _eyeFadeStart, _eyeFadeEnd);\n alpha *= 1.0 - (eyeDir - _eyeFadeStart) / (_eyeFadeEnd - _eyeFadeStart);\n\n alpha *= 1.0 - clamp(dist / maxRayDistance, 0.0, 1.0);\n\n return alpha;\n}\n\n@import clay.util.rand\n\n@import clay.util.rgbm\n\nvoid main()\n{\n vec4 normalAndGloss = texture2D(gBufferTexture1, v_Texcoord);\n\n if (dot(normalAndGloss.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n\n float g = normalAndGloss.a;\n#if !defined(PHYSICALLY_CORRECT)\n if (g <= minGlossiness) {\n discard;\n }\n#endif\n\n float reflectivity = (g - minGlossiness) / (1.0 - minGlossiness);\n\n vec3 N = normalize(normalAndGloss.rgb * 2.0 - 1.0);\n N = normalize((toViewSpace * vec4(N, 0.0)).xyz);\n\n vec4 projectedPos = vec4(v_Texcoord * 2.0 - 1.0, fetchDepth(gBufferTexture2, v_Texcoord), 1.0);\n vec4 pos = projectionInv * projectedPos;\n vec3 rayOrigin = pos.xyz / pos.w;\n vec3 V = -normalize(rayOrigin);\n\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float iterationCount;\n float jitter = rand(fract(v_Texcoord + jitterOffset));\n\n#ifdef PHYSICALLY_CORRECT\n vec4 color = vec4(vec3(0.0), 1.0);\n vec4 albedoMetalness = texture2D(gBufferTexture3, v_Texcoord);\n vec3 albedo = albedoMetalness.rgb;\n float m = albedoMetalness.a;\n vec3 diffuseColor = albedo * (1.0 - m);\n vec3 spec = mix(vec3(0.04), albedo, m);\n\n float jitter2 = rand(fract(v_Texcoord)) * float(TOTAL_SAMPLES);\n\n for (int i = 0; i < SAMPLE_PER_FRAME; i++) {\n vec3 H = importanceSampleNormalGGX(float(i) + jitter2, 1.0 - g, N);\n vec3 rayDir = normalize(reflect(-V, H));\n#else\n vec3 rayDir = normalize(reflect(-V, N));\n#endif\n vec2 hitPixel;\n vec3 hitPoint;\n\n bool intersect = traceScreenSpaceRay(rayOrigin, rayDir, jitter, hitPixel, hitPoint, iterationCount);\n\n float dist = distance(rayOrigin, hitPoint);\n\n vec3 hitNormal = texture2D(gBufferTexture1, hitPixel).rgb * 2.0 - 1.0;\n hitNormal = normalize((toViewSpace * vec4(hitNormal, 0.0)).xyz);\n#ifdef PHYSICALLY_CORRECT\n float ndl = clamp(dot(N, rayDir), 0.0, 1.0);\n float vdh = clamp(dot(V, H), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n vec3 litTexel = vec3(0.0);\n if (dot(hitNormal, rayDir) < 0.0 && intersect) {\n litTexel = texture2D(sourceTexture, hitPixel).rgb;\n litTexel *= pow(clamp(1.0 - dist / 200.0, 0.0, 1.0), 3.0);\n\n }\n else {\n #ifdef SPECULARCUBEMAP_ENABLED\n vec3 rayDirW = normalize(toWorldSpace * vec4(rayDir, 0.0)).rgb;\n litTexel = RGBMDecode(textureCubeLodEXT(specularCubemap, rayDirW, 0.0), 8.12).rgb * specularIntensity;\n#endif\n }\n color.rgb += ndl * litTexel * (\n F_Schlick(ndl, spec) * G_Smith(g, ndv, ndl) * vdh / (ndh * ndv + 0.001)\n );\n }\n color.rgb /= float(SAMPLE_PER_FRAME);\n#else\n #if !defined(SPECULARCUBEMAP_ENABLED)\n if (dot(hitNormal, rayDir) >= 0.0) {\n discard;\n }\n if (!intersect) {\n discard;\n }\n#endif\n float alpha = clamp(calculateAlpha(iterationCount, reflectivity, hitPixel, hitPoint, dist, rayDir), 0.0, 1.0);\n vec4 color = texture2D(sourceTexture, hitPixel);\n color.rgb *= alpha;\n\n#ifdef SPECULARCUBEMAP_ENABLED\n vec3 rayDirW = normalize(toWorldSpace * vec4(rayDir, 0.0)).rgb;\n alpha = alpha * (intersect ? 1.0 : 0.0);\n float bias = (1.0 -g) * 5.0;\n color.rgb += (1.0 - alpha)\n * RGBMDecode(textureCubeLodEXT(specularCubemap, rayDirW, bias), 8.12).rgb\n * specularIntensity;\n#endif\n\n#endif\n\n gl_FragColor = encodeHDR(color);\n}\n@end\n\n@export ecgl.ssr.blur\n\nuniform sampler2D texture;\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform mat4 projection;\nuniform float depthRange : 0.05;\n\nvarying vec2 v_Texcoord;\n\nuniform vec2 textureSize;\nuniform float blurSize : 1.0;\n\n#ifdef BLEND\n #ifdef SSAOTEX_ENABLED\nuniform sampler2D ssaoTex;\n #endif\nuniform sampler2D sourceTexture;\n#endif\n\nfloat getLinearDepth(vec2 coord)\n{\n float depth = texture2D(gBufferTexture2, coord).r * 2.0 - 1.0;\n return projection[3][2] / (depth * projection[2][3] - projection[2][2]);\n}\n\n@import clay.util.rgbm\n\n\nvoid main()\n{\n @import clay.compositor.kernel.gaussian_9\n\n vec4 centerNTexel = texture2D(gBufferTexture1, v_Texcoord);\n float g = centerNTexel.a;\n float maxBlurSize = clamp(1.0 - g, 0.0, 1.0) * blurSize;\n#ifdef VERTICAL\n vec2 off = vec2(0.0, maxBlurSize / textureSize.y);\n#else\n vec2 off = vec2(maxBlurSize / textureSize.x, 0.0);\n#endif\n\n vec2 coord = v_Texcoord;\n\n vec4 sum = vec4(0.0);\n float weightAll = 0.0;\n\n vec3 cN = centerNTexel.rgb * 2.0 - 1.0;\n float cD = getLinearDepth(v_Texcoord);\n for (int i = 0; i < 9; i++) {\n vec2 coord = clamp((float(i) - 4.0) * off + v_Texcoord, vec2(0.0), vec2(1.0));\n float w = gaussianKernel[i]\n * clamp(dot(cN, texture2D(gBufferTexture1, coord).rgb * 2.0 - 1.0), 0.0, 1.0);\n float d = getLinearDepth(coord);\n w *= (1.0 - smoothstep(abs(cD - d) / depthRange, 0.0, 1.0));\n\n weightAll += w;\n sum += decodeHDR(texture2D(texture, coord)) * w;\n }\n\n#ifdef BLEND\n float aoFactor = 1.0;\n #ifdef SSAOTEX_ENABLED\n aoFactor = texture2D(ssaoTex, v_Texcoord).r;\n #endif\n gl_FragColor = encodeHDR(\n sum / weightAll * aoFactor + decodeHDR(texture2D(sourceTexture, v_Texcoord))\n );\n#else\n gl_FragColor = encodeHDR(sum / weightAll);\n#endif\n}\n\n@end"},function(e,t,r){"use strict";t.a=[0,0,-.321585265978,-.154972575841,.458126042375,.188473391593,.842080129861,.527766490688,.147304551086,-.659453822776,-.331943915203,-.940619700594,.0479226680259,.54812163202,.701581552186,-.709825561388,-.295436780218,.940589268233,-.901489676764,.237713156085,.973570876096,-.109899459384,-.866792314779,-.451805525005,.330975007087,.800048655954,-.344275183665,.381779221166,-.386139432542,-.437418421534,-.576478634965,-.0148463392551,.385798197415,-.262426961053,-.666302061145,.682427250835,-.628010632582,-.732836215494,.10163141741,-.987658134403,.711995289051,-.320024291314,.0296005138058,.950296523438,.0130612307608,-.351024443122,-.879596633704,-.10478487883,.435712737232,.504254490347,.779203817497,.206477676721,.388264289969,-.896736162545,-.153106280781,-.629203242522,-.245517550697,.657969239148,.126830499058,.26862328493,-.634888119007,-.302301223431,.617074219636,.779817204925]},function(e,t,r){"use strict";function n(e,t,r,n,i){var a=e.gl;t.setUniform(a,"1i",r,i),a.activeTexture(a.TEXTURE0+i),n.isRenderable()?n.bind(e):n.unbind(e)}function i(e,t,r,i,a){var o,s,u,l,h=e.gl;return function(a,c,d){if(!l||l.material!==a.material){var f=a.material,p=a.__program,m=f.get("roughness");null==m&&(m=1);var g=f.get("normalMap")||t,_=f.get("roughnessMap"),v=f.get("bumpMap"),y=f.get("uvRepeat"),x=f.get("uvOffset"),T=f.get("detailUvRepeat"),b=f.get("detailUvOffset"),w=!!v&&f.isTextureEnabled("bumpMap"),E=!!_&&f.isTextureEnabled("roughnessMap"),S=f.isDefined("fragment","DOUBLE_SIDED");v=v||r,_=_||i,d!==c?(c.set("normalMap",g),c.set("bumpMap",v),c.set("roughnessMap",_),c.set("useBumpMap",w),c.set("useRoughnessMap",E),c.set("doubleSide",S),null!=y&&c.set("uvRepeat",y),null!=x&&c.set("uvOffset",x),null!=T&&c.set("detailUvRepeat",T),null!=b&&c.set("detailUvOffset",b),c.set("roughness",m)):(p.setUniform(h,"1f","roughness",m),o!==g&&n(e,p,"normalMap",g,0),s!==v&&v&&n(e,p,"bumpMap",v,1),u!==_&&_&&n(e,p,"roughnessMap",_,2),null!=y&&p.setUniform(h,"2f","uvRepeat",y),null!=x&&p.setUniform(h,"2f","uvOffset",x),null!=T&&p.setUniform(h,"2f","detailUvRepeat",T),null!=b&&p.setUniform(h,"2f","detailUvOffset",b),p.setUniform(h,"1i","useBumpMap",+w),p.setUniform(h,"1i","useRoughnessMap",+E),p.setUniform(h,"1i","doubleSide",+S)),o=g,s=v,u=_,l=a}}}function a(e){e=e||{},this._depthTex=new o.a({format:s.a.DEPTH_COMPONENT,type:s.a.UNSIGNED_INT}),this._normalTex=new o.a({type:s.a.HALF_FLOAT}),this._framebuffer=new l.a,this._framebuffer.attach(this._normalTex),this._framebuffer.attach(this._depthTex,l.a.DEPTH_ATTACHMENT),this._normalMaterial=new h.a({shader:new u.a(u.a.source("ecgl.normal.vertex"),u.a.source("ecgl.normal.fragment"))}),this._normalMaterial.enableTexture(["normalMap","bumpMap","roughnessMap"]),this._defaultNormalMap=d.a.createBlank("#000"),this._defaultBumpMap=d.a.createBlank("#000"),this._defaultRoughessMap=d.a.createBlank("#000"),this._debugPass=new c.a({fragment:u.a.source("clay.compositor.output")}),this._debugPass.setUniform("texture",this._normalTex),this._debugPass.material.undefine("fragment","OUTPUT_ALPHA")}var o=r(5),s=r(4),u=r(8),l=r(10),h=r(19),c=r(16),d=r(61),f=r(195);u.a.import(f.a),a.prototype.getDepthTexture=function(){return this._depthTex},a.prototype.getNormalTexture=function(){return this._normalTex},a.prototype.update=function(e,t,r){var n=e.getWidth(),a=e.getHeight(),o=this._depthTex,s=this._normalTex,u=this._normalMaterial;o.width=n,o.height=a,s.width=n,s.height=a;var l=t.getRenderList(r).opaque;this._framebuffer.bind(e),e.gl.clearColor(0,0,0,0),e.gl.clear(e.gl.COLOR_BUFFER_BIT|e.gl.DEPTH_BUFFER_BIT),e.gl.disable(e.gl.BLEND),e.renderPass(l,r,{getMaterial:function(){return u},ifRender:function(e){return e.renderNormal},beforeRender:i(e,this._defaultNormalMap,this._defaultBumpMap,this._defaultRoughessMap,this._normalMaterial),sort:e.opaqueSortCompare}),this._framebuffer.unbind(e)},a.prototype.renderDebug=function(e){this._debugPass.render(e)},a.prototype.dispose=function(e){this._depthTex.dispose(e),this._normalTex.dispose(e)},t.a=a},function(e,t,r){"use strict";t.a="@export ecgl.normal.vertex\n\n@import ecgl.common.transformUniforms\n\n@import ecgl.common.uv.header\n\n@import ecgl.common.attributes\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\n@import ecgl.common.normalMap.vertexHeader\n\n@import ecgl.common.vertexAnimation.header\n\nvoid main()\n{\n\n @import ecgl.common.vertexAnimation.main\n\n @import ecgl.common.uv.main\n\n v_Normal = normalize((worldInverseTranspose * vec4(normal, 0.0)).xyz);\n v_WorldPosition = (world * vec4(pos, 1.0)).xyz;\n\n @import ecgl.common.normalMap.vertexMain\n\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n\n}\n\n\n@end\n\n\n@export ecgl.normal.fragment\n\n#define ROUGHNESS_CHANEL 0\n\nuniform bool useBumpMap;\nuniform bool useRoughnessMap;\nuniform bool doubleSide;\nuniform float roughness;\n\n@import ecgl.common.uv.fragmentHeader\n\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n\nuniform mat4 viewInverse : VIEWINVERSE;\n\n@import ecgl.common.normalMap.fragmentHeader\n@import ecgl.common.bumpMap.header\n\nuniform sampler2D roughnessMap;\n\nvoid main()\n{\n vec3 N = v_Normal;\n \n bool flipNormal = false;\n if (doubleSide) {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n\n if (dot(N, V) < 0.0) {\n flipNormal = true;\n }\n }\n\n @import ecgl.common.normalMap.fragmentMain\n\n if (useBumpMap) {\n N = bumpNormal(v_WorldPosition, v_Normal, N);\n }\n\n float g = 1.0 - roughness;\n\n if (useRoughnessMap) {\n float g2 = 1.0 - texture2D(roughnessMap, v_DetailTexcoord)[ROUGHNESS_CHANEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n }\n\n if (flipNormal) {\n N = -N;\n }\n\n gl_FragColor.rgb = (N.xyz + 1.0) * 0.5;\n gl_FragColor.a = g;\n}\n@end"},function(e,t,r){"use strict";function n(e){e=e||{},this._edgePass=new o.a({fragment:s.a.source("ecgl.edge")}),this._edgePass.setUniform("normalTexture",e.normalTexture),this._edgePass.setUniform("depthTexture",e.depthTexture),this._targetTexture=new i.a({type:a.a.HALF_FLOAT}),this._frameBuffer=new u.a,this._frameBuffer.attach(this._targetTexture)}var i=(r(9),r(3),r(5)),a=r(4),o=r(16),s=r(8),u=r(10);n.prototype.update=function(e,t,r,n){var i=e.getWidth(),a=e.getHeight(),o=this._targetTexture;o.width=i,o.height=a;var s=this._frameBuffer;s.bind(e),this._edgePass.setUniform("projectionInv",t.invProjectionMatrix.array),this._edgePass.setUniform("textureSize",[i,a]),this._edgePass.setUniform("texture",r),this._edgePass.render(e),s.unbind(e)},n.prototype.getTargetTexture=function(){return this._targetTexture},n.prototype.setParameter=function(e,t){this._edgePass.setUniform(e,t)},n.prototype.dispose=function(e){this._targetTexture.dispose(e),this._frameBuffer.dispose(e)},t.a=n},function(e,t,r){"use strict";t.a={type:"compositor",nodes:[{name:"source",type:"texture",outputs:{color:{}}},{name:"source_half",shader:"#source(clay.compositor.downsample)",inputs:{texture:"source"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"bright",shader:"#source(clay.compositor.bright)",inputs:{texture:"source_half"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{threshold:2,scale:4,textureSize:"expr([width * 1.0 / 2, height / 2])"}},{name:"bright_downsample_4",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 2, height / 2] )"}},{name:"bright_downsample_8",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_4"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 4, height / 4] )"}},{name:"bright_downsample_16",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_8"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 8, height / 8] )"}},{name:"bright_downsample_32",shader:"#source(clay.compositor.downsample)",inputs:{texture:"bright_downsample_16"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 32)",height:"expr(height * 1.0 / 32)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0 / 16, height / 16] )"}},{name:"bright_upsample_16_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_32"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 32, height / 32] )"}},{name:"bright_upsample_16_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_16_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 16)",height:"expr(height * 1.0 / 16)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 16, height * 1.0 / 16] )"}},{name:"bright_upsample_8_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_16"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 16, height * 1.0 / 16] )"}},{name:"bright_upsample_8_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_8_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 8, height * 1.0 / 8] )"}},{name:"bright_upsample_8_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_8_blur_v",texture2:"bright_upsample_16_blur_v"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 8)",height:"expr(height * 1.0 / 8)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_4_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_8"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 8, height * 1.0 / 8] )"}},{name:"bright_upsample_4_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_4_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 4, height * 1.0 / 4] )"}},{name:"bright_upsample_4_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_4_blur_v",texture2:"bright_upsample_8_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 4)",height:"expr(height * 1.0 / 4)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_2_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_downsample_4"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 4, height * 1.0 / 4] )"}},{name:"bright_upsample_2_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_2_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0 / 2, height * 1.0 / 2] )"}},{name:"bright_upsample_2_blend",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_2_blur_v",texture2:"bright_upsample_4_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0 / 2)",height:"expr(height * 1.0 / 2)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"bright_upsample_full_blur_h",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:0,textureSize:"expr( [width * 1.0 / 2, height * 1.0 / 2] )"}},{name:"bright_upsample_full_blur_v",shader:"#source(clay.compositor.gaussian_blur)",inputs:{texture:"bright_upsample_full_blur_h"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{blurSize:1,blurDir:1,textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"bloom_composite",shader:"#source(clay.compositor.blend)",inputs:{texture1:"bright_upsample_full_blur_v",texture2:"bright_upsample_2_blend"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{weight1:.3,weight2:.7}},{name:"coc",shader:"#source(ecgl.dof.coc)",outputs:{color:{parameters:{minFilter:"NEAREST",magFilter:"NEAREST",width:"expr(width * 1.0)",height:"expr(height * 1.0)"}}},parameters:{focalDist:50,focalRange:30}},{name:"dof_far_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"source",coc:"coc"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"}},{name:"dof_near_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"source",coc:"coc"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"},defines:{BLUR_NEARFIELD:null}},{name:"dof_coc_blur",shader:"#source(ecgl.dof.diskBlur)",inputs:{texture:"coc"},outputs:{color:{parameters:{minFilter:"NEAREST",magFilter:"NEAREST",width:"expr(width * 1.0)",height:"expr(height * 1.0)"}}},parameters:{textureSize:"expr( [width * 1.0, height * 1.0] )"},defines:{BLUR_COC:null}},{name:"dof_composite",shader:"#source(ecgl.dof.composite)",inputs:{original:"source",blurred:"dof_far_blur",nearfield:"dof_near_blur",coc:"coc",nearcoc:"dof_coc_blur"},outputs:{color:{parameters:{width:"expr(width * 1.0)",height:"expr(height * 1.0)",type:"HALF_FLOAT"}}}},{name:"composite",shader:"#source(clay.compositor.hdr.composite)",inputs:{texture:"source",bloom:"bloom_composite"},defines:{}},{name:"FXAA",shader:"#source(clay.compositor.fxaa)",inputs:{texture:"composite"}}]}},function(e,t,r){"use strict";t.a="@export ecgl.dof.coc\n\nuniform sampler2D depth;\n\nuniform float zNear: 0.1;\nuniform float zFar: 2000;\n\nuniform float focalDistance: 3;\nuniform float focalRange: 1;\nuniform float focalLength: 30;\nuniform float fstop: 2.8;\n\nvarying vec2 v_Texcoord;\n\n@import clay.util.encode_float\n\nvoid main()\n{\n float z = texture2D(depth, v_Texcoord).r * 2.0 - 1.0;\n\n float dist = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));\n\n float aperture = focalLength / fstop;\n\n float coc;\n\n float uppper = focalDistance + focalRange;\n float lower = focalDistance - focalRange;\n if (dist <= uppper && dist >= lower) {\n coc = 0.5;\n }\n else {\n float focalAdjusted = dist > uppper ? uppper : lower;\n\n coc = abs(aperture * (focalLength * (dist - focalAdjusted)) / (dist * (focalAdjusted - focalLength)));\n coc = clamp(coc, 0.0, 2.0) / 2.00001;\n\n if (dist < lower) {\n coc = -coc;\n }\n coc = coc * 0.5 + 0.5;\n }\n\n gl_FragColor = encodeFloat(coc);\n}\n@end\n\n\n@export ecgl.dof.composite\n\n#define DEBUG 0\n\nuniform sampler2D original;\nuniform sampler2D blurred;\nuniform sampler2D nearfield;\nuniform sampler2D coc;\nuniform sampler2D nearcoc;\nvarying vec2 v_Texcoord;\n\n@import clay.util.rgbm\n@import clay.util.float\n\nvoid main()\n{\n vec4 blurredColor = texture2D(blurred, v_Texcoord);\n vec4 originalColor = texture2D(original, v_Texcoord);\n\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord));\n\n fCoc = abs(fCoc * 2.0 - 1.0);\n\n float weight = smoothstep(0.0, 1.0, fCoc);\n \n#ifdef NEARFIELD_ENABLED\n vec4 nearfieldColor = texture2D(nearfield, v_Texcoord);\n float fNearCoc = decodeFloat(texture2D(nearcoc, v_Texcoord));\n fNearCoc = abs(fNearCoc * 2.0 - 1.0);\n\n gl_FragColor = encodeHDR(\n mix(\n nearfieldColor, mix(originalColor, blurredColor, weight),\n pow(1.0 - fNearCoc, 4.0)\n )\n );\n#else\n gl_FragColor = encodeHDR(mix(originalColor, blurredColor, weight));\n#endif\n\n}\n\n@end\n\n\n\n@export ecgl.dof.diskBlur\n\n#define POISSON_KERNEL_SIZE 16;\n\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\n\nuniform float blurRadius : 10.0;\nuniform vec2 textureSize : [512.0, 512.0];\n\nuniform vec2 poissonKernel[POISSON_KERNEL_SIZE];\n\nuniform float percent;\n\nfloat nrand(const in vec2 n) {\n return fract(sin(dot(n.xy ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\n@import clay.util.rgbm\n@import clay.util.float\n\n\nvoid main()\n{\n vec2 offset = blurRadius / textureSize;\n\n float rnd = 6.28318 * nrand(v_Texcoord + 0.07 * percent );\n float cosa = cos(rnd);\n float sina = sin(rnd);\n vec4 basis = vec4(cosa, -sina, sina, cosa);\n\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n\n#ifdef BLUR_COC\n float cocSum = 0.0;\n#else\n vec4 color = vec4(0.0);\n#endif\n\n\n float weightSum = 0.0;\n\n for (int i = 0; i < POISSON_KERNEL_SIZE; i++) {\n vec2 ofs = poissonKernel[i];\n\n ofs = vec2(dot(ofs, basis.xy), dot(ofs, basis.zw));\n\n vec2 uv = v_Texcoord + ofs * offset;\n vec4 texel = texture2D(texture, uv);\n\n float w = 1.0;\n#ifdef BLUR_COC\n float fCoc = decodeFloat(texel) * 2.0 - 1.0;\n cocSum += clamp(fCoc, -1.0, 0.0) * w;\n#else\n texel = texel;\n #if !defined(BLUR_NEARFIELD)\n float fCoc = decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0;\n w *= abs(fCoc);\n #endif\n texel.rgb *= texel.a;\n color += texel * w;\n#endif\n\n weightSum += w;\n }\n\n#ifdef BLUR_COC\n gl_FragColor = encodeFloat(clamp(cocSum / weightSum, -1.0, 0.0) * 0.5 + 0.5);\n#else\n color /= weightSum;\n color.rgb /= (color.a + 0.0001);\n gl_FragColor = color;\n#endif\n}\n\n@end"},function(e,t,r){"use strict";t.a="@export ecgl.edge\n\nuniform sampler2D texture;\n\nuniform sampler2D normalTexture;\nuniform sampler2D depthTexture;\n\nuniform mat4 projectionInv;\n\nuniform vec2 textureSize;\n\nuniform vec4 edgeColor: [0,0,0,0.8];\n\nvarying vec2 v_Texcoord;\n\nvec3 packColor(vec2 coord) {\n float z = texture2D(depthTexture, coord).r * 2.0 - 1.0;\n vec4 p = vec4(v_Texcoord * 2.0 - 1.0, z, 1.0);\n vec4 p4 = projectionInv * p;\n\n return vec3(\n texture2D(normalTexture, coord).rg,\n -p4.z / p4.w / 5.0\n );\n}\n\nvoid main() {\n vec2 cc = v_Texcoord;\n vec3 center = packColor(cc);\n\n float size = clamp(1.0 - (center.z - 10.0) / 100.0, 0.0, 1.0) * 0.5;\n float dx = size / textureSize.x;\n float dy = size / textureSize.y;\n\n vec2 coord;\n vec3 topLeft = packColor(cc+vec2(-dx, -dy));\n vec3 top = packColor(cc+vec2(0.0, -dy));\n vec3 topRight = packColor(cc+vec2(dx, -dy));\n vec3 left = packColor(cc+vec2(-dx, 0.0));\n vec3 right = packColor(cc+vec2(dx, 0.0));\n vec3 bottomLeft = packColor(cc+vec2(-dx, dy));\n vec3 bottom = packColor(cc+vec2(0.0, dy));\n vec3 bottomRight = packColor(cc+vec2(dx, dy));\n\n vec3 v = -topLeft-2.0*top-topRight+bottomLeft+2.0*bottom+bottomRight;\n vec3 h = -bottomLeft-2.0*left-topLeft+bottomRight+2.0*right+topRight;\n\n float edge = sqrt(dot(h, h) + dot(v, v));\n\n edge = smoothstep(0.8, 1.0, edge);\n\n gl_FragColor = mix(texture2D(texture, v_Texcoord), vec4(edgeColor.rgb, 1.0), edgeColor.a * edge);\n}\n@end"},function(e,t,r){"use strict";function n(e){for(var t=[],r=0;r<30;r++)t.push([Object(i.a)(r,2),Object(i.a)(r,3)]);this._haltonSequence=t,this._frame=0,this._sourceTex=new s.a,this._sourceFb=new o.a,this._sourceFb.attach(this._sourceTex),this._prevFrameTex=new s.a,this._outputTex=new s.a;var n=this._blendPass=new a.a({fragment:u.a.source("clay.compositor.blend")});n.material.disableTexturesAll(),n.material.enableTexture(["texture1","texture2"]),this._blendFb=new o.a({depthBuffer:!1}),this._outputPass=new a.a({fragment:u.a.source("clay.compositor.output"),blendWithPrevious:!0}),this._outputPass.material.define("fragment","OUTPUT_ALPHA"),this._outputPass.material.blend=function(e){e.blendEquationSeparate(e.FUNC_ADD,e.FUNC_ADD),e.blendFuncSeparate(e.ONE,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}}var i=r(49),a=r(16),o=r(10),s=r(5),u=r(8),l=r(9);n.prototype={constructor:n,jitterProjection:function(e,t){var r=e.viewport,n=r.devicePixelRatio||e.getDevicePixelRatio(),i=r.width*n,a=r.height*n,o=this._haltonSequence[this._frame%this._haltonSequence.length],s=new l.a;s.array[12]=(2*o[0]-1)/i,s.array[13]=(2*o[1]-1)/a,l.a.mul(t.projectionMatrix,s,t.projectionMatrix),l.a.invert(t.invProjectionMatrix,t.projectionMatrix)},resetFrame:function(){this._frame=0},getFrame:function(){return this._frame},getSourceFrameBuffer:function(){return this._sourceFb},getOutputTexture:function(){return this._outputTex},resize:function(e,t){this._prevFrameTex.width=e,this._prevFrameTex.height=t,this._outputTex.width=e,this._outputTex.height=t,this._sourceTex.width=e,this._sourceTex.height=t,this._prevFrameTex.dirty(),this._outputTex.dirty(),this._sourceTex.dirty()},isFinished:function(){return this._frame>=this._haltonSequence.length},render:function(e,t,r){var n=this._blendPass;0===this._frame?(n.setUniform("weight1",0),n.setUniform("weight2",1)):(n.setUniform("weight1",.9),n.setUniform("weight2",.1)),n.setUniform("texture1",this._prevFrameTex),n.setUniform("texture2",t||this._sourceTex),this._blendFb.attach(this._outputTex),this._blendFb.bind(e),n.render(e),this._blendFb.unbind(e),r||(this._outputPass.setUniform("texture",this._outputTex),this._outputPass.render(e));var i=this._prevFrameTex;this._prevFrameTex=this._outputTex,this._outputTex=i,this._frame++},dispose:function(e){this._sourceFb.dispose(e),this._blendFb.dispose(e),this._prevFrameTex.dispose(e),this._outputTex.dispose(e),this._sourceTex.dispose(e),this._outputPass.dispose(e),this._blendPass.dispose(e)}},t.a=n},function(e,t,r){"use strict";var n=r(0),i=r.n(n);r(202),r(203),r(98);i.a.registerAction({type:"geo3DChangeCamera",event:"geo3dcamerachanged",update:"series:updateCamera"},function(e,t){t.eachComponent({mainType:"geo3D",query:e},function(t){t.setView(e)})})},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(44),o=r(28),s=r(29),u=r(31),l=r(96),h=i.a.extendComponentModel({type:"geo3D",layoutMode:"box",coordinateSystem:null,optionUpdated:function(){var e=this.option;e.regions=this.getFilledRegions(e.regions,e.map);var t=i.a.helper.completeDimensions(["value"],e.data,{encodeDef:this.get("encode"),dimsDef:this.get("dimensions")}),r=new i.a.List(t,this);r.initData(e.regions);var n={};r.each(function(e){var t=r.getName(e),i=r.getItemModel(e);n[t]=i}),this._regionModelMap=n,this._data=r},getData:function(){return this._data},getRegionModel:function(e){var t=this.getData().getName(e);return this._regionModelMap[t]||new i.a.Model(null,this)},getRegionPolygonCoords:function(e){var t=this.getData().getName(e),r=this.coordinateSystem.getRegion(t);return r?r.geometries:[]},getFormattedLabel:function(e,t){var r=this._data.getName(e),n=this.getRegionModel(r),i=n.get("normal"===t?["label","formatter"]:["emphasis","label","formatter"]);null==i&&(i=n.get(["label","formatter"]));var a={name:r};if("function"==typeof i)return a.status=t,i(a);if("string"==typeof i){var o=a.seriesName;return i.replace("{a}",null!=o?o:"")}return r},defaultOption:{regions:[]}});i.a.util.merge(h.prototype,l.a),i.a.util.merge(h.prototype,a.a),i.a.util.merge(h.prototype,o.a),i.a.util.merge(h.prototype,s.a),i.a.util.merge(h.prototype,u.a)},function(e,t,r){"use strict";var n=r(64),i=r(0),a=r.n(i),o=r(1),s=r(45),u=r(30);a.a.extendComponentView({type:"geo3D",__ecgl__:!0,init:function(e,t){this._geo3DBuilder=new n.a(t),this.groupGL=new o.a.Node,this._lightRoot=new o.a.Node,this._sceneHelper=new u.a(this._lightRoot),this._sceneHelper.initLight(this._lightRoot),this._control=new s.a({zr:t.getZr()}),this._control.init()},render:function(e,t,r){this.groupGL.add(this._geo3DBuilder.rootNode);var n=e.coordinateSystem;if(n&&n.viewGL){n.viewGL.add(this._lightRoot),e.get("show")?n.viewGL.add(this.groupGL):n.viewGL.remove(this.groupGL);var i=this._control;i.setViewGL(n.viewGL);var a=e.getModel("viewControl");i.setFromViewControlModel(a,0),this._sceneHelper.setScene(n.viewGL.scene),this._sceneHelper.updateLight(e),n.viewGL.setPostEffect(e.getModel("postEffect"),r),n.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._geo3DBuilder.update(e,t,r,0,e.getData().count());var o=n.viewGL.isLinearSpace()?"define":"undefine";this._geo3DBuilder.rootNode.traverse(function(e){e.material&&e.material[o]("fragment","SRGB_DECODE")}),i.off("update"),i.on("update",function(){r.dispatchAction({type:"geo3DChangeCamera",alpha:i.getAlpha(),beta:i.getBeta(),distance:i.getDistance(),center:i.getCenter(),from:this.uid,geo3DId:e.id})}),i.update()}},afterRender:function(e,t,r,n){var i=n.renderer;this._sceneHelper.updateAmbientCubemap(i,e,r),this._sceneHelper.updateSkybox(i,e,r)},dispose:function(){this._control.dispose()}})},function(e,t,r){"use strict";function n(e,t,r){r=r||2;var n=t&&t.length,a=n?t[0]*r:e.length,s=i(e,0,a,r,!0),u=[];if(!s)return u;var l,h,d,f,p,m,g;if(n&&(s=c(e,t,s,r)),e.length>80*r){l=d=e[0],h=f=e[1];for(var _=r;_d&&(d=p),m>f&&(f=m);g=Math.max(d-l,f-h)}return o(s,u,r,l,h,g),u}function i(e,t,r,n,i){var a,o;if(i===N(e,t,r,n)>0)for(a=t;a=t;a-=n)o=C(a,e[a],e[a+1],o);return o&&b(o,o.next)&&(L(o),o=o.next),o}function a(e,t){if(!e)return e;t||(t=e);var r,n=e;do{if(r=!1,n.steiner||!b(n,n.next)&&0!==T(n.prev,n,n.next))n=n.next;else{if(L(n),(n=t=n.prev)===n.next)return null;r=!0}}while(r||n!==t);return t}function o(e,t,r,n,i,c,d){if(e){!d&&c&&m(e,n,i,c);for(var f,p,g=e;e.prev!==e.next;)if(f=e.prev,p=e.next,c?u(e,n,i,c):s(e))t.push(f.i/r),t.push(e.i/r),t.push(p.i/r),L(e),e=p.next,g=p.next;else if((e=p)===g){d?1===d?(e=l(e,t,r),o(e,t,r,n,i,c,2)):2===d&&h(e,t,r,n,i,c):o(a(e),t,r,n,i,c,1);break}}}function s(e){var t=e.prev,r=e,n=e.next;if(T(t,r,n)>=0)return!1;for(var i=e.next.next;i!==e.prev;){if(y(t.x,t.y,r.x,r.y,n.x,n.y,i.x,i.y)&&T(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function u(e,t,r,n){var i=e.prev,a=e,o=e.next;if(T(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,h=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,c=_(s,u,t,r,n),d=_(l,h,t,r,n),f=e.nextZ;f&&f.z<=d;){if(f!==e.prev&&f!==e.next&&y(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&T(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(f=e.prevZ;f&&f.z>=c;){if(f!==e.prev&&f!==e.next&&y(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&T(f.prev,f,f.next)>=0)return!1;f=f.prevZ}return!0}function l(e,t,r){var n=e;do{var i=n.prev,a=n.next.next;!b(i,a)&&w(i,n,n.next,a)&&S(i,a)&&S(a,i)&&(t.push(i.i/r),t.push(n.i/r),t.push(a.i/r),L(n),L(n.next),n=e=a),n=n.next}while(n!==e);return n}function h(e,t,r,n,i,s){var u=e;do{for(var l=u.next.next;l!==u.prev;){if(u.i!==l.i&&x(u,l)){var h=M(u,l);return u=a(u,u.next),h=a(h,h.next),o(u,t,r,n,i,s),void o(h,t,r,n,i,s)}l=l.next}u=u.next}while(u!==e)}function c(e,t,r,n){var o,s,u,l,h,c=[];for(o=0,s=t.length;o=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x=n.x&&n.x>=h&&i!==n.x&&y(ar.x)&&S(n,e)&&(r=n,d=u),n=n.next;return r}function m(e,t,r,n){var i=e;do{null===i.z&&(i.z=_(i.x,i.y,t,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,g(i)}function g(e){var t,r,n,i,a,o,s,u,l=1;do{for(r=e,e=null,a=null,o=0;r;){for(o++,n=r,s=0,t=0;t0||u>0&&n;)0!==s&&(0===u||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,u--),a?a.nextZ=i:e=i,i.prevZ=a,a=i;r=n}a.nextZ=null,l*=2}while(o>1);return e}function _(e,t,r,n,i){return e=32767*(e-r)/i,t=32767*(t-n)/i,e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e|t<<1}function v(e){var t=e,r=e;do{t.x=0&&(e-o)*(n-s)-(r-o)*(t-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function x(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!E(e,t)&&S(e,t)&&S(t,e)&&A(e,t)}function T(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function b(e,t){return e.x===t.x&&e.y===t.y}function w(e,t,r,n){return!!(b(e,t)&&b(r,n)||b(e,n)&&b(r,t))||T(e,t,r)>0!=T(e,t,n)>0&&T(r,n,e)>0!=T(r,n,t)>0}function E(e,t){var r=e;do{if(r.i!==e.i&&r.next.i!==e.i&&r.i!==t.i&&r.next.i!==t.i&&w(r,r.next,e,t))return!0;r=r.next}while(r!==e);return!1}function S(e,t){return T(e.prev,e,e.next)<0?T(e,t,e.next)>=0&&T(e,e.prev,t)>=0:T(e,t,e.prev)<0||T(e,e.next,t)<0}function A(e,t){var r=e,n=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==e);return n}function M(e,t){var r=new D(e.i,e.x,e.y),n=new D(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function C(e,t,r,n){var i=new D(e,t,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function L(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function D(e,t,r){this.i=e,this.x=t,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function N(e,t,r,n){for(var i=0,a=t,o=r-n;a0},_displacementChanged:!0,_displacementScale:0,updateDisplacementHash:function(){var e=this.getDisplacementTexture(),t=this.getDisplacemenScale();this._displacementChanged=this._displacementTexture!==e||this._displacementScale!==t,this._displacementTexture=e,this._displacementScale=t},isDisplacementChanged:function(){return this._displacementChanged}});a.a.util.merge(h.prototype,o.a),a.a.util.merge(h.prototype,s.a),a.a.util.merge(h.prototype,u.a),a.a.util.merge(h.prototype,l.a)},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(1),o=r(45),s=r(30),u=r(210),l=r(2);i.a.extendComponentView({type:"globe",__ecgl__:!0,_displacementScale:0,init:function(e,t){this.groupGL=new a.a.Node,this._sphereGeometry=new a.a.SphereGeometry({widthSegments:200,heightSegments:100,dynamic:!0}),this._overlayGeometry=new a.a.SphereGeometry({widthSegments:80,heightSegments:40}),this._planeGeometry=new a.a.PlaneGeometry,this._earthMesh=new a.a.Mesh({renderNormal:!0}),this._lightRoot=new a.a.Node,this._sceneHelper=new s.a,this._sceneHelper.initLight(this._lightRoot),this.groupGL.add(this._earthMesh),this._control=new o.a({zr:t.getZr()}),this._control.init(),this._layerMeshes={}},render:function(e,t,r){var n=e.coordinateSystem,i=e.get("shading");n.viewGL.add(this._lightRoot),e.get("show")?n.viewGL.add(this.groupGL):n.viewGL.remove(this.groupGL),this._sceneHelper.setScene(n.viewGL.scene),n.viewGL.setPostEffect(e.getModel("postEffect"),r),n.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling"));var o=this._earthMesh;o.geometry=this._sphereGeometry;var s="ecgl."+i;o.material&&o.material.shader.name===s||(o.material=a.a.createMaterial(s)),a.a.setMaterialFromModel(i,o.material,e,r),["roughnessMap","metalnessMap","detailMap","normalMap"].forEach(function(e){var t=o.material.get(e);t&&(t.flipY=!1)}),o.material.set("color",a.a.parseColor(e.get("baseColor")));var u=.99*n.radius;o.scale.set(u,u,u);var l=o.material.setTextureImage("diffuseMap",e.get("baseTexture"),r,{flipY:!1,anisotropic:8});l&&l.surface&&l.surface.attachToMesh(o);var h=o.material.setTextureImage("bumpMap",e.get("heightTexture"),r,{flipY:!1,anisotropic:8});h&&h.surface&&h.surface.attachToMesh(o),o.material[e.get("postEffect.enable")?"define":"undefine"]("fragment","SRGB_DECODE"),this._updateLight(e,r),this._displaceVertices(e,r),this._updateViewControl(e,r),this._updateLayers(e,r)},afterRender:function(e,t,r,n){var i=n.renderer;this._sceneHelper.updateAmbientCubemap(i,e,r),this._sceneHelper.updateSkybox(i,e,r)},_updateLayers:function(e,t){var r=e.coordinateSystem,n=e.get("layers"),o=r.radius,s=[],u=[],h=[],c=[];i.a.util.each(n,function(e){var n=new i.a.Model(e),d=n.get("type"),f=a.a.loadTexture(n.get("texture"),t,{flipY:!1,anisotropic:8});if(f.surface&&f.surface.attachToMesh(this._earthMesh),"blend"===d){var p=n.get("blendTo"),m=l.a.firstNotNull(n.get("intensity"),1);"emission"===p?(h.push(f),c.push(m)):(s.push(f),u.push(m))}else{var g=n.get("id"),_=this._layerMeshes[g];_||(_=this._layerMeshes[g]=new a.a.Mesh({geometry:this._overlayGeometry,castShadow:!1,ignorePicking:!0}));"lambert"===n.get("shading")?(_.material=_.__lambertMaterial||new a.a.Material({autoUpdateTextureStatus:!1,shader:a.a.createShader("ecgl.lambert"),transparent:!0,depthMask:!1}),_.__lambertMaterial=_.material):(_.material=_.__colorMaterial||new a.a.Material({autoUpdateTextureStatus:!1,shader:a.a.createShader("ecgl.color"),transparent:!0,depthMask:!1}),_.__colorMaterial=_.material),_.material.enableTexture("diffuseMap");var v=n.get("distance"),y=o+(null==v?r.radius/100:v);_.scale.set(y,y,y),o=y;var x=this._blankTexture||(this._blankTexture=a.a.createBlankTexture("rgba(255, 255, 255, 0)"));_.material.set("diffuseMap",x),a.a.loadTexture(n.get("texture"),t,{flipY:!1,anisotropic:8},function(e){e.surface&&e.surface.attachToMesh(_),_.material.set("diffuseMap",e),t.getZr().refresh()}),n.get("show")?this.groupGL.add(_):this.groupGL.remove(_)}},this);var d=this._earthMesh.material;d.define("fragment","LAYER_DIFFUSEMAP_COUNT",s.length),d.define("fragment","LAYER_EMISSIVEMAP_COUNT",h.length),d.set("layerDiffuseMap",s),d.set("layerDiffuseIntensity",u),d.set("layerEmissiveMap",h),d.set("layerEmissionIntensity",c);var f=e.getModel("debug.wireframe");if(f.get("show")){d.define("both","WIREFRAME_TRIANGLE");var p=a.a.parseColor(f.get("lineStyle.color")||"rgba(0,0,0,0.5)"),m=l.a.firstNotNull(f.get("lineStyle.width"),1);d.set("wireframeLineWidth",m),d.set("wireframeLineColor",p)}else d.undefine("both","WIREFRAME_TRIANGLE")},_updateViewControl:function(e,t){function r(){return{type:"globeChangeCamera",alpha:o.getAlpha(),beta:o.getBeta(),distance:o.getDistance()-n.radius,center:o.getCenter(),from:a.uid,globeId:e.id}}var n=e.coordinateSystem,i=e.getModel("viewControl"),a=(n.viewGL.camera,this),o=this._control;o.setViewGL(n.viewGL);var s,u,l=i.get("targetCoord");null!=l&&(u=l[0]+90,s=l[1]),o.setFromViewControlModel(i,{baseDistance:n.radius,alpha:s,beta:u}),o.off("update"),o.on("update",function(){t.dispatchAction(r())})},_displaceVertices:function(e,t){var r=e.get("displacementQuality"),n=e.get("debug.wireframe.show"),i=e.coordinateSystem;if(e.isDisplacementChanged()||r!==this._displacementQuality||n!==this._showDebugWireframe){this._displacementQuality=r,this._showDebugWireframe=n;var a=this._sphereGeometry,o={low:100,medium:200,high:400,ultra:800}[r]||200,s=o/2;(a.widthSegments!==o||n)&&(a.widthSegments=o,a.heightSegments=s,a.build()),this._doDisplaceVertices(a,i),n&&a.generateBarycentric()}},_doDisplaceVertices:function(e,t){var r=e.attributes.position.value,n=e.attributes.texcoord0.value,i=e.__originalPosition;i&&i.length===r.length||(i=new Float32Array(r.length),i.set(r),e.__originalPosition=i);for(var a=t.displacementWidth,o=t.displacementHeight,s=t.displacementData,u=0;uOpenStreetMap contributors, © CARTO',center:[0,0],zoom:0,pitch:0,bearing:0,light:{main:{alpha:20,beta:30}},altitudeScale:1,boxHeight:"auto"},getMaptalksCameraOption:function(){var e=this;return s.reduce(function(t,r){return t[r]=e.get(r),t},{})},setMaptalksCameraOption:function(e){null!=e&&s.forEach(function(t){null!=e[t]&&(this.option[t]=e[t])},this)},getMaptalks:function(){return this._maptalks},setMaptalks:function(e){this._maptalks=e}});i.a.util.merge(u.prototype,a.a),i.a.util.merge(u.prototype,o.a)},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(224),o=r(30),s=r(1),u=r(102);s.a.Shader.import(u.a);i.a.extendComponentView({type:"maptalks3D",__ecgl__:!0,init:function(e,t){this._groundMesh=new s.a.Mesh({geometry:new s.a.PlaneGeometry,material:new s.a.Material({shader:new s.a.Shader({vertex:s.a.Shader.source("ecgl.displayShadow.vertex"),fragment:s.a.Shader.source("ecgl.displayShadow.fragment")}),depthMask:!1}),renderOrder:-100,culling:!1,castShadow:!1,$ignorePicking:!0,renderNormal:!0})},_initMaptalksLayer:function(e,t){var r=t.getZr();this._zrLayer=new a.a("maptalks3D",r,e.get("center"),e.get("zoom")),r.painter.insertLayer(-1e3,this._zrLayer),this._lightRoot=new s.a.Node,this._sceneHelper=new o.a(this._lightRoot),this._sceneHelper.initLight(this._lightRoot);var n=this._zrLayer.getMaptalks(),i=this._dispatchInteractAction.bind(this,t,n);["zoomend","zooming","zoomstart","dragrotating","pitch","pitchend","movestart","moving","moveend","resize","touchstart","touchmove","touchend"].forEach(function(e){n.on(e,i)})},render:function(e,t,r){this._zrLayer||this._initMaptalksLayer(e,r);var n=this._zrLayer.getMaptalks(),i=e.get("urlTemplate"),a=n.getBaseLayer();i!==this._oldUrlTemplate&&(a?a.setOptions({urlTemplate:i,attribution:e.get("attribution")}):(a=new maptalks.TileLayer("maptalks-echarts-gl-baselayer",{urlTemplate:i,subdomains:["a","b","c"],attribution:e.get("attribution")}),n.setBaseLayer(a))),this._oldUrlTemplate=i,n.setCenter(e.get("center")),n.setZoom(e.get("zoom"),{animation:!1}),n.setPitch(e.get("pitch")),n.setBearing(e.get("bearing")),e.setMaptalks(n);var o=e.coordinateSystem;o.viewGL.scene.add(this._lightRoot),o.viewGL.add(this._groundMesh),this._updateGroundMesh(),this._sceneHelper.setScene(o.viewGL.scene),this._sceneHelper.updateLight(e),o.viewGL.setPostEffect(e.getModel("postEffect"),r),o.viewGL.setTemporalSuperSampling(e.getModel("temporalSuperSampling")),this._maptalks3DModel=e},afterRender:function(e,t,r,n){var i=n.renderer;this._sceneHelper.updateAmbientCubemap(i,e,r),this._sceneHelper.updateSkybox(i,e,r),e.coordinateSystem.viewGL.scene.traverse(function(e){e.material&&(e.material.define("fragment","NORMAL_UP_AXIS",2),e.material.define("fragment","NORMAL_FRONT_AXIS",1))})},updateCamera:function(e,t,r,n){e.coordinateSystem.setCameraOption(n),this._updateGroundMesh(),r.getZr().refresh()},_dispatchInteractAction:function(e,t,r){e.dispatchAction({type:"maptalks3DChangeCamera",pitch:t.getPitch(),zoom:t.getZoom(),center:t.getCenter().toArray(),bearing:t.getBearing(),maptalks3DId:this._maptalks3DModel&&this._maptalks3DModel.id})},_updateGroundMesh:function(){if(this._maptalks3DModel){var e=this._maptalks3DModel.coordinateSystem,t=e.dataToPoint(e.center);this._groundMesh.position.set(t[0],t[1],-.001);var r=new s.a.Plane(new s.a.Vector3(0,0,1),0),n=e.viewGL.camera.castRay(new s.a.Vector2(-1,-1)),i=e.viewGL.camera.castRay(new s.a.Vector2(1,1)),a=n.intersectPlane(r),o=i.intersectPlane(r),u=a.dist(o)/e.viewGL.rootNode.scale.x;this._groundMesh.scale.set(u,u,1)}},dispose:function(e,t){this._zrLayer&&this._zrLayer.dispose(),t.getZr().painter.delLayer(-1e3)}})},function(e,t,r){"use strict";function n(e,t,r,n){if(this.id=e,this.zr=t,this.dom=document.createElement("div"),this.dom.style.cssText="position:absolute;left:0;right:0;top:0;bottom:0;",!maptalks)throw new Error("Maptalks library must be included. See https://maptalks.org");this._maptalks=new maptalks.Map(this.dom,{center:r,zoom:n,fog:!1}),this._initEvents()}n.prototype.resize=function(){this._maptalks.checkSize()},n.prototype.getMaptalks=function(){return this._maptalks},n.prototype.clear=function(){},n.prototype.refresh=function(){this._maptalks.checkSize()};var i=["mousedown","mouseup","click","dblclick","mousemove","mousewheel","DOMMouseScroll","touchstart","touchend","touchmove","touchcancel"];n.prototype._initEvents=function(){var e=this.dom;this._handlers=this._handlers||{contextmenu:function(e){return e.preventDefault(),!1}},i.forEach(function(t){this._handlers[t]=function(r){var n={};for(var i in r)n[i]=r[i];n.bubbles=!1;var a=new r.constructor(r.type,n);"mousewheel"===t||"DOMMouseScroll"===t?e.dispatchEvent(a):e.firstElementChild.dispatchEvent(a)},this.zr.dom.addEventListener(t,this._handlers[t])},this),this.zr.dom.addEventListener("contextmenu",this._handlers.contextmenu)},n.prototype.dispose=function(){i.forEach(function(e){this.zr.dom.removeEventListener(e,this._handlers[e])},this),this._maptalks.remove()},t.a=n},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=(r(226),r(229),r(231),r(17));i.a.registerVisual(Object(a.a)("bar3D")),i.a.registerProcessor(function(e,t){e.eachSeriesByType("bar3d",function(e){var t=e.getData();t.filterSelf(function(e){return t.hasValue(e)})})})},function(e,t,r){"use strict";function n(e,t){var r=e.getData(),n=e.get("minHeight")||0,i=e.get("barSize"),a=["lng","lat","alt"].map(function(t){return e.coordDimToDataDim(t)[0]});if(null==i){var s=t.radius*Math.PI,h=Object(d.a)(r,a[0],a[1]);i=[s/Math.sqrt(r.count()/h),s/Math.sqrt(r.count()/h)]}else u.a.util.isArray(i)||(i=[i,i]);var c=o(r,a);r.each(a,function(e,a,o,s){var u=r.get(c.dimension,s),l=c.isStacked?u-o:t.altitudeAxis.scale.getExtent()[0],h=Math.max(t.altitudeAxis.dataToCoord(o),n),d=t.dataToPoint([e,a,l]),p=t.dataToPoint([e,a,u]),m=f.sub([],p,d);f.normalize(m,m);var g=[i[0],h,i[1]];r.setItemLayout(s,[d,m,g])}),r.setLayout("orient",l.a.UP.array)}function i(e,t){var r=e.getData(),n=e.get("barSize"),i=e.get("minHeight")||0,a=["lng","lat","alt"].map(function(t){return e.coordDimToDataDim(t)[0]});if(null==n){var s=Math.min(t.size[0],t.size[2]),l=Object(d.a)(r,a[0],a[1]);n=[s/Math.sqrt(r.count()/l),s/Math.sqrt(r.count()/l)]}else u.a.util.isArray(n)||(n=[n,n]);var h=[0,1,0],c=o(r,a);r.each(a,function(e,a,o,s){var u=r.get(c.dimension,s),l=c.isStacked?u-o:t.altitudeAxis.scale.getExtent()[0],d=Math.max(t.altitudeAxis.dataToCoord(o),i),f=t.dataToPoint([e,a,l]),p=[n[0],d,n[1]];r.setItemLayout(s,[f,h,p])}),r.setLayout("orient",[1,0,0])}function a(e,t){var r=e.getData(),n=e.coordDimToDataDim("lng")[0],i=e.coordDimToDataDim("lat")[0],a=e.coordDimToDataDim("alt")[0],s=e.get("barSize"),l=e.get("minHeight")||0;if(null==s){var h=r.getDataExtent(n),c=r.getDataExtent(i),f=t.dataToPoint([h[0],c[0]]),p=t.dataToPoint([h[1],c[1]]),m=Math.min(Math.abs(f[0]-p[0]),Math.abs(f[1]-p[1]))||1,g=Object(d.a)(r,n,i);s=[m/Math.sqrt(r.count()/g),m/Math.sqrt(r.count()/g)]}else u.a.util.isArray(s)||(s=[s,s]),s[0]/=t.getScale()/16,s[1]/=t.getScale()/16;var _=[0,0,1],v=[n,i,a],y=o(r,v);r.each(v,function(e,n,i,a){var o=r.get(y.dimension,a),u=y.isStacked?o-i:0,h=t.dataToPoint([e,n,u]),c=t.dataToPoint([e,n,o]),d=Math.max(c[2]-h[2],l),f=[s[0],d,s[1]];r.setItemLayout(a,[h,_,f])}),r.setLayout("orient",[1,0,0])}function o(e,t){var r=p(e,t[2]);return{dimension:r?e.getCalculationInfo("stackResultDimension"):t[2],isStacked:r}}var s=r(0),u=r.n(s),l=r(3),h=r(6),c=r(227),d=r(228),f=h.a.vec3,p=u.a.helper.dataStack.isDimensionStacked;u.a.registerLayout(function(e,t){e.eachSeriesByType("bar3D",function(e){var t=e.coordinateSystem,r=t&&t.type;"globe"===r?n(e,t):"cartesian3D"===r?Object(c.a)(e,t):"geo3D"===r?i(e,t):"mapbox3D"!==r&&"maptalks3D"!==r||a(e,t)})})},function(e,t,r){"use strict";function n(e){var t=e[0],r=e[1];return!(t>0&&r>0||t<0&&r<0)}function i(e,t){var r=e.getData(),i=e.get("barSize");if(null==i){var a,s,h=t.size,c=t.getAxis("x"),d=t.getAxis("y");a="category"===c.type?.7*c.getBandWidth():.6*Math.round(h[0]/Math.sqrt(r.count())),s="category"===d.type?.7*d.getBandWidth():.6*Math.round(h[1]/Math.sqrt(r.count())),i=[a,s]}else o.a.util.isArray(i)||(i=[i,i]);var f=t.getAxis("z").scale.getExtent(),p=n(f),m=["x","y","z"].map(function(t){return e.coordDimToDataDim(t)[0]}),g=l(r,m[2]),_=g?r.getCalculationInfo("stackResultDimension"):m[2];r.each(m,function(e,n,a,o){var s=r.get(_,o),l=g?s-a:p?0:f[0],h=t.dataToPoint([e,n,l]),c=t.dataToPoint([e,n,s]),d=u.dist(h,c),m=[0,c[1]0&&(p++,c[3]<.99&&(m=!0))}}),s.geometry.setBarCount(p);var g=r.getLayout("orient"),_=this._barIndexOfData=new Int32Array(r.count()),p=0;r.each(function(e){if(!r.hasValue(e))return void(_[e]=-1);var t=r.getItemLayout(e),n=t[0],i=t[1],a=t[2],s=4*e;c[0]=d[s++],c[1]=d[s++],c[2]=d[s++],c[3]=d[s++],c[3]>0&&(o._barMesh.geometry.addBar(n,i,g,a,c,e),_[e]=p++)}),s.geometry.dirty(),s.geometry.updateBoundingBox();var v=s.material;v.transparent=m,v.depthMask=!m,s.geometry.sortTriangles=m,this._initHandler(e,t)},_initHandler:function(e,t){var r=e.getData(),n=this._barMesh,i="cartesian3D"===e.coordinateSystem.type;n.seriesIndex=e.seriesIndex;var a=-1;n.off("mousemove"),n.off("mouseout"),n.on("mousemove",function(e){var o=n.geometry.getDataIndexOfVertex(e.triangle[0]);o!==a&&(this._downplay(a),this._highlight(o),this._labelsBuilder.updateLabels([o]),i&&t.dispatchAction({type:"grid3DShowAxisPointer",value:[r.get("x",o),r.get("y",o),r.get("z",o,!0)]})),a=o,n.dataIndex=o},this),n.on("mouseout",function(e){this._downplay(a),this._labelsBuilder.updateLabels(),a=-1,n.dataIndex=-1,i&&t.dispatchAction({type:"grid3DHideAxisPointer"})},this)},_highlight:function(e){var t=this._data;if(t){var r=this._barIndexOfData[e];if(!(r<0)){var n=t.getItemModel(e),o=n.getModel("emphasis.itemStyle"),s=o.get("color"),u=o.get("opacity");if(null==s){var l=t.getItemVisual(e,"color");s=i.a.color.lift(l,-.4)}null==u&&(u=t.getItemVisual(e,"opacity"));var h=a.a.parseColor(s);h[3]*=u,this._barMesh.geometry.setColor(r,h),this._api.getZr().refresh()}}},_downplay:function(e){var t=this._data;if(t){var r=this._barIndexOfData[e];if(!(r<0)){var n=t.getItemVisual(e,"color"),i=t.getItemVisual(e,"opacity"),o=a.a.parseColor(n);o[3]*=i,this._barMesh.geometry.setColor(r,o),this._api.getZr().refresh()}}},highlight:function(e,t,r,n){this._toggleStatus("highlight",e,t,r,n)},downplay:function(e,t,r,n){this._toggleStatus("downplay",e,t,r,n)},_toggleStatus:function(e,t,r,n,a){var u=t.getData(),l=o.a.queryDataIndex(u,a),h=this;null!=l?i.a.util.each(s.a.normalizeToArray(l),function(t){"highlight"===e?this._highlight(t):this._downplay(t)},this):u.each(function(t){"highlight"===e?h._highlight(t):h._downplay(t)})},remove:function(){this.groupGL.removeAll()},dispose:function(){this.groupGL.removeAll()}})},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(38),o=r(65),s=r(15),u=r(6),l=u.a.vec3,h=u.a.mat3,c=s.a.extend(function(){return{attributes:{position:new s.a.Attribute("position","float",3,"POSITION"),normal:new s.a.Attribute("normal","float",3,"NORMAL"),color:new s.a.Attribute("color","float",4,"COLOR"),prevPosition:new s.a.Attribute("prevPosition","float",3),prevNormal:new s.a.Attribute("prevNormal","float",3)},dynamic:!0,enableNormal:!1,bevelSize:1,bevelSegments:0,_dataIndices:null,_vertexOffset:0,_triangleOffset:0}},{resetOffset:function(){this._vertexOffset=0,this._triangleOffset=0},setBarCount:function(e){var t=this.enableNormal,r=this.getBarVertexCount()*e,n=this.getBarTriangleCount()*e;this.vertexCount!==r&&(this.attributes.position.init(r),t?this.attributes.normal.init(r):this.attributes.normal.value=null,this.attributes.color.init(r)),this.triangleCount!==n&&(this.indices=r>65535?new Uint32Array(3*n):new Uint16Array(3*n),this._dataIndices=new Uint32Array(r))},getBarVertexCount:function(){var e=this.bevelSize>0?this.bevelSegments:0;return e>0?this._getBevelBarVertexCount(e):this.enableNormal?24:8},getBarTriangleCount:function(){var e=this.bevelSize>0?this.bevelSegments:0;return e>0?this._getBevelBarTriangleCount(e):12},_getBevelBarVertexCount:function(e){return 4*(e+1)*(e+1)*2},_getBevelBarTriangleCount:function(e){return(4*e+3+1)*(2*e+1)*2+4},setColor:function(e,t){for(var r=this.getBarVertexCount(),n=r*e,i=r*(e+1),a=n;a0&&this.bevelSegments>0)this._addBevelBar(e,d,g,_,this.bevelSize,this.bevelSegments,v);else{l.copy(i,d),l.normalize(i,i),l.cross(a,g,i),l.normalize(a,a),l.cross(n,i,a),l.normalize(a,a),l.negate(o,n),l.negate(s,i),l.negate(u,a),t(h[0],e,n,_[0]/2),t(h[0],h[0],a,_[2]/2),t(h[1],e,n,_[0]/2),t(h[1],h[1],u,_[2]/2),t(h[2],e,o,_[0]/2),t(h[2],h[2],u,_[2]/2),t(h[3],e,o,_[0]/2),t(h[3],h[3],a,_[2]/2),t(r,e,i,_[1]),t(h[4],r,n,_[0]/2),t(h[4],h[4],a,_[2]/2),t(h[5],r,n,_[0]/2),t(h[5],h[5],u,_[2]/2),t(h[6],r,o,_[0]/2),t(h[6],h[6],u,_[2]/2),t(h[7],r,o,_[0]/2),t(h[7],h[7],a,_[2]/2);var T=this.attributes;if(this.enableNormal){c[0]=n,c[1]=o,c[2]=i,c[3]=s,c[4]=a,c[5]=u;for(var b=this._vertexOffset,w=0;w=0){var T=3*h,b=new l.a(this._points[T],this._points[T+1],this._points[T+2]);a.push({dataIndex:h,point:b,pointWorld:b.clone(),target:this._line3DMesh,distance:this._camera.getWorldPosition().dist(b)})}},remove:function(){this.groupGL.removeAll()},dispose:function(){this.groupGL.removeAll()}})},function(e,t){function r(e,t,r,n,i,a,o){if(0===i)return!1;var s=i,u=0,l=e;if(o>t+s&&o>n+s||oe+s&&a>r+s||ao?l.position[1]+=(h-o)/2:l.position[0]+=(h-a)/2;var c=l.getBoundingRect();return l.position[0]-=c.x,l.position[1]-=c.y,l.setStyle(r),l.update(),l.__size=h,l}function a(e,t,r){function n(e){return e<128?1:-1}for(var i=t.width,a=t.height,o=e.canvas.width,s=e.canvas.height,u=i/o,l=a/s,h=e.createImageData(o,s),c=0;c=0;c--){var d;d=this.geometry.indices?this.geometry.indices[c]:c;var f=s[2*d],p=s[2*d+1],m=this.geometry.attributes.size.get(d)/this.sizeScale,g=m/2;if(e>f-g*l&&ep-g*h&&t=2e4},doSortVertices:function(e,t){var r=this.indices,n=a.create();if(!r){r=this.indices=this.vertexCount>65535?new Uint32Array(this.vertexCount):new Uint16Array(this.vertexCount);for(var i=0;i.05);else for(var i=0;i<3;i++)this._progressiveQuickSort(3*t+i);this.dirtyIndices()},_simpleSort:function(e){function t(e,t){return r[t]-r[e]}var r=this._zList,i=this.indices;e?Array.prototype.sort.call(i,t):n.a.sort(i,t,0,i.length-1)},_progressiveQuickSort:function(e){var t=this._zList,r=this.indices;this._quickSort=this._quickSort||new n.a,this._quickSort.step(r,function(e,r){return t[r]-t[e]},e)}}},function(e,t,r){"use strict";t.a="@export ecgl.sdfSprite.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform float elapsedTime : 0;\n\nattribute vec3 position : POSITION;\n\n#ifdef VERTEX_SIZE\nattribute float size;\n#else\nuniform float u_Size;\n#endif\n\n#ifdef VERTEX_COLOR\nattribute vec4 a_FillColor: COLOR;\nvarying vec4 v_Color;\n#endif\n\n#ifdef VERTEX_ANIMATION\nattribute vec3 prevPosition;\nattribute float prevSize;\nuniform float percent : 1.0;\n#endif\n\n\n#ifdef POSITIONTEXTURE_ENABLED\nuniform sampler2D positionTexture;\n#endif\n\nvarying float v_Size;\n\nvoid main()\n{\n\n#ifdef POSITIONTEXTURE_ENABLED\n gl_Position = worldViewProjection * vec4(texture2D(positionTexture, position.xy).xy, -10.0, 1.0);\n#else\n\n #ifdef VERTEX_ANIMATION\n vec3 pos = mix(prevPosition, position, percent);\n #else\n vec3 pos = position;\n #endif\n gl_Position = worldViewProjection * vec4(pos, 1.0);\n#endif\n\n#ifdef VERTEX_SIZE\n#ifdef VERTEX_ANIMATION\n v_Size = mix(prevSize, size, percent);\n#else\n v_Size = size;\n#endif\n#else\n v_Size = u_Size;\n#endif\n\n#ifdef VERTEX_COLOR\n v_Color = a_FillColor;\n #endif\n\n gl_PointSize = v_Size;\n}\n\n@end\n\n@export ecgl.sdfSprite.fragment\n\nuniform vec4 color: [1, 1, 1, 1];\nuniform vec4 strokeColor: [1, 1, 1, 1];\nuniform float smoothing: 0.07;\n\nuniform float lineWidth: 0.0;\n\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n\nvarying float v_Size;\n\nuniform sampler2D sprite;\n\n@import clay.util.srgb\n\nvoid main()\n{\n gl_FragColor = color;\n\n vec4 _strokeColor = strokeColor;\n\n#ifdef VERTEX_COLOR\n gl_FragColor *= v_Color;\n #endif\n\n#ifdef SPRITE_ENABLED\n float d = texture2D(sprite, gl_PointCoord).r;\n gl_FragColor.a *= smoothstep(0.5 - smoothing, 0.5 + smoothing, d);\n\n if (lineWidth > 0.0) {\n float sLineWidth = lineWidth / 2.0;\n\n float outlineMaxValue0 = 0.5 + sLineWidth;\n float outlineMaxValue1 = 0.5 + sLineWidth + smoothing;\n float outlineMinValue0 = 0.5 - sLineWidth - smoothing;\n float outlineMinValue1 = 0.5 - sLineWidth;\n\n if (d <= outlineMaxValue1 && d >= outlineMinValue0) {\n float a = _strokeColor.a;\n if (d <= outlineMinValue1) {\n a = a * smoothstep(outlineMinValue0, outlineMinValue1, d);\n }\n else {\n a = a * smoothstep(outlineMaxValue1, outlineMaxValue0, d);\n }\n gl_FragColor.rgb = mix(gl_FragColor.rgb * gl_FragColor.a, _strokeColor.rgb, a);\n gl_FragColor.a = gl_FragColor.a * (1.0 - a) + a;\n }\n }\n#endif\n\n#ifdef SRGB_DECODE\n gl_FragColor = sRGBToLinear(gl_FragColor);\n#endif\n}\n@end"},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=(r(244),r(245),r(248),r(17));i.a.registerVisual(Object(a.a)("lines3D")),i.a.registerAction({type:"lines3DPauseEffect",event:"lines3deffectpaused",update:"series.lines3D:pauseEffect"},function(){}),i.a.registerAction({type:"lines3DResumeEffect",event:"lines3deffectresumed",update:"series.lines3D:resumeEffect"},function(){}),i.a.registerAction({type:"lines3DToggleEffect",event:"lines3deffectchanged",update:"series.lines3D:toggleEffect"},function(){})},function(e,t,r){"use strict";function n(e,t){f.copy(w,e[0]),f.copy(E,e[1]);var r=[],n=r[0]=v(),i=r[1]=v(),a=r[2]=v(),o=r[3]=v();t.dataToPoint(w,n),t.dataToPoint(E,o),p(y,n),g(x,o,n),p(x,x),m(T,x,y),p(T,T),m(x,y,T),_(i,y,x),p(i,i),p(y,o),g(x,n,o),p(x,x),m(T,x,y),p(T,T),m(x,y,T),_(a,y,x),p(a,a),_(b,n,o),p(b,b);var s=d.dot(n,b),u=d.dot(b,i),l=(Math.max(d.len(n),d.len(o))-s)/u*2;return d.scaleAndAdd(i,n,i,l),d.scaleAndAdd(a,o,a,l),r}function i(e,t,r){var n=[],i=n[0]=d.create(),a=n[1]=d.create(),o=n[2]=d.create(),s=n[3]=d.create();t.dataToPoint(e[0],i),t.dataToPoint(e[1],s);var u=d.dist(i,s);return d.lerp(a,i,s,.3),d.lerp(o,i,s,.3),d.scaleAndAdd(a,a,r,Math.min(.1*u,10)),d.scaleAndAdd(o,o,r,Math.min(.1*u,10)),n}function a(e,t){for(var r=new Float32Array(3*e.length),n=0,i=[],a=0;a0?1:-1}var i=r(0),a=(r.n(i),r(1)),o=r(6),s=r(25),u=r(247),l=o.a.vec3;a.a.Shader.import(u.a),t.a=a.a.Mesh.extend(function(){var e=new a.a.Material({shader:new a.a.Shader(a.a.Shader.source("ecgl.trail2.vertex"),a.a.Shader.source("ecgl.trail2.fragment")),transparent:!0,depthMask:!1}),t=new s.a({dynamic:!0});return t.createAttribute("dist","float",1),t.createAttribute("distAll","float",1),t.createAttribute("start","float",1),{geometry:t,material:e,culling:!1,$ignorePicking:!0}},{updateData:function(e,t,r){var i=e.hostModel,o=this.geometry,s=i.getModel("effect"),u=s.get("trailWidth")*t.getDevicePixelRatio(),h=s.get("trailLength"),c=i.get("effect.constantSpeed"),d=1e3*i.get("effect.period"),f=null!=c;f?this.material.set("speed",c/1e3):this.material.set("period",d),this.material[f?"define":"undefine"]("vertex","CONSTANT_SPEED");var p=i.get("polyline");o.trailLength=h,this.material.set("trailLength",h),o.resetOffset(),["position","positionPrev","positionNext"].forEach(function(e){o.attributes[e].value=r.attributes[e].value}),["dist","distAll","start","offset","color"].forEach(function(e){o.attributes[e].init(o.vertexCount)}),o.indices=r.indices;var m=[],g=s.get("trailColor"),_=s.get("trailOpacity"),v=null!=g,y=null!=_;this.updateWorldTransform();var x=this.worldTransform.x.len(),T=this.worldTransform.y.len(),b=this.worldTransform.z.len(),w=0,E=0;e.each(function(t){var i=e.getItemLayout(t),s=y?_:e.getItemVisual(t,"opacity"),h=e.getItemVisual(t,"color");null==s&&(s=1),m=a.a.parseColor(v?g:h,m),m[3]*=s;for(var c=p?r.getPolylineVertexCount(i):r.getCubicCurveVertexCount(i[0],i[1],i[2],i[3]),S=0,A=[],M=[],C=w;Cw&&(S+=l.dist(A,M)),o.attributes.dist.set(C,S),l.copy(M,A);E=Math.max(E,S);for(var L=Math.random()*(f?S:d),C=w;C0;this._updateSurfaceMesh(this._surfaceMesh,e,c,p);var m=this._surfaceMesh.material;p?(m.define("WIREFRAME_QUAD"),m.set("wireframeLineWidth",f),m.set("wireframeLineColor",o.a.parseColor(d.get("lineStyle.color")))):m.undefine("WIREFRAME_QUAD"),this._initHandler(e,r),this._updateAnimation(e)},_updateAnimation:function(e){o.a.updateVertexAnimation([["prevPosition","position"],["prevNormal","normal"]],this._prevSurfaceMesh,this._surfaceMesh,e)},_createSurfaceMesh:function(){var e=new o.a.Mesh({geometry:new o.a.Geometry({dynamic:!0,sortTriangles:!0}),shadowDepthMaterial:new o.a.Material({shader:new o.a.Shader(o.a.Shader.source("ecgl.sm.depth.vertex"),o.a.Shader.source("ecgl.sm.depth.fragment"))}),culling:!1,renderOrder:10,renderNormal:!0});return e.geometry.createAttribute("barycentric","float",4),e.geometry.createAttribute("prevPosition","float",3),e.geometry.createAttribute("prevNormal","float",3),a.a.util.extend(e.geometry,u.a),e},_initHandler:function(e,t){function r(e,t){for(var r=1/0,n=-1,a=[],o=0;o=0){var u=[];i.geometry.attributes.position.get(s,u);for(var h=a.pointToData(u),c=1/0,d=-1,f=[],p=0;p65535?Uint32Array:Uint16Array)((_-1)*(v-1)*6),S=function(e,t,r){r[1]=e*v+t,r[0]=e*v+t+1,r[3]=(e+1)*v+t+1,r[2]=(e+1)*v+t},A=!1;if(c){var M=[],C=[],L=0;x?f.init(a.vertexCount):f.value=null;for(var D=[[],[],[]],N=[],R=[],P=l.create(),I=function(e,t,r){var n=3*t;return r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],r},O=new Float32Array(u.length),F=new Float32Array(u.length/3*4),B=0;B ")),a.value&&(h+=" : "+i.a.format.encodeHTML(a.value)),h}return s.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var e=(this.option.categories||[]).map(function(e){return null!=e.value?e:i.a.util.extend({value:0},e)}),t=new i.a.List(["value"],this);t.initData(e),this._categoriesData=t,this._categoriesModels=t.mapArray(function(e){return t.getItemModel(e,!0)})},setView:function(e){null!=e.zoom&&(this.option.zoom=e.zoom),null!=e.offset&&(this.option.offset=e.offset)},setNodePosition:function(e){for(var t=0;t "+g)),f++)}var _,v=i.a.helper.completeDimensions(["value"],e);_=new i.a.List(v,r),_.initData(e);var y=new i.a.List(["value"],r);return y.initData(d,c),a&&a(_,y),u()({mainData:_,struct:s,structAttr:"graph",datas:{node:_,edge:y},datasAttr:{node:"data",edge:"edgeData"}}),s.update(),s}},function(e,t,r){function n(e){return"_EC_"+e}function i(e,t){this.id=null==e?"":e,this.inEdges=[],this.outEdges=[],this.edges=[],this.hostGraph,this.dataIndex=null==t?-1:t}function a(e,t,r){this.node1=e,this.node2=t,this.dataIndex=null==r?-1:r}var o=r(104),s=(o.__DEV__,r(13)),u=r(266),l=u.enableClassCheck,h=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this.data,this.edgeData},c=h.prototype;c.type="graph",c.isDirected=function(){return this._directed},c.addNode=function(e,t){e=e||""+t;var r=this._nodesMap;if(!r[n(e)]){var a=new i(e,t);return a.hostGraph=this,this.nodes.push(a),r[n(e)]=a,a}},c.getNodeByIndex=function(e){var t=this.data.getRawIndex(e);return this.nodes[t]},c.getNodeById=function(e){return this._nodesMap[n(e)]},c.addEdge=function(e,t,r){var o=this._nodesMap,s=this._edgesMap;if("number"==typeof e&&(e=this.nodes[e]),"number"==typeof t&&(t=this.nodes[t]),i.isInstance(e)||(e=o[n(e)]),i.isInstance(t)||(t=o[n(t)]),e&&t){var u=e.id+"-"+t.id;if(!s[u]){var l=new a(e,t,r);return l.hostGraph=this,this._directed&&(e.outEdges.push(l),t.inEdges.push(l)),e.edges.push(l),e!==t&&t.edges.push(l),this.edges.push(l),s[u]=l,l}}},c.getEdgeByIndex=function(e){var t=this.edgeData.getRawIndex(e);return this.edges[t]},c.getEdge=function(e,t){i.isInstance(e)&&(e=e.id),i.isInstance(t)&&(t=t.id);var r=this._edgesMap;return this._directed?r[e+"-"+t]:r[e+"-"+t]||r[t+"-"+e]},c.eachNode=function(e,t){for(var r=this.nodes,n=r.length,i=0;i=0&&e.call(t,r[i],i)},c.eachEdge=function(e,t){for(var r=this.edges,n=r.length,i=0;i=0&&r[i].node1.dataIndex>=0&&r[i].node2.dataIndex>=0&&e.call(t,r[i],i)},c.breadthFirstTraverse=function(e,t,r,a){if(i.isInstance(t)||(t=this._nodesMap[n(t)]),t){for(var o="out"===r?"outEdges":"in"===r?"inEdges":"edges",s=0;s=0&&r.node2.dataIndex>=0});for(var i=0,a=n.length;i=0&&this[e][t].setItemVisual(this.dataIndex,r,n)},getVisual:function(r,n){return this[e][t].getItemVisual(this.dataIndex,r,n)},setLayout:function(r,n){this.dataIndex>=0&&this[e][t].setItemLayout(this.dataIndex,r,n)},getLayout:function(){return this[e][t].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[e][t].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[e][t].getRawIndex(this.dataIndex)}}};s.mixin(i,d("hostGraph","data")),s.mixin(a,d("hostGraph","edgeData")),h.Node=i,h.Edge=a,l(i),l(a);var f=h;e.exports=f},function(e,t,r){function n(e){var t={main:"",sub:""};return e&&(e=e.split(f),t.main=e[0]||"",t.sub=e[1]||""),t}function i(e){d.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(e),'componentType "'+e+'" illegal')}function a(e,t){e.$constructor=e,e.extend=function(e){var t=this,r=function(){e.$constructor?e.$constructor.apply(this,arguments):t.apply(this,arguments)};return d.extend(r.prototype,e),r.extend=this.extend,r.superCall=s,r.superApply=u,d.inherits(r,this),r.superClass=t,r}}function o(e){var t=["__\0is_clz",m++,Math.random().toFixed(3)].join("_");e.prototype[t]=!0,e.isInstance=function(e){return!(!e||!e[t])}}function s(e,t){var r=d.slice(arguments,2);return this.superClass.prototype[t].apply(e,r)}function u(e,t,r){return this.superClass.prototype[t].apply(e,r)}function l(e,t){function r(e){var t=a[e.main];return t&&t[p]||(t=a[e.main]={},t[p]=!0),t}t=t||{};var a={};if(e.registerClass=function(e,t){if(t)if(i(t),t=n(t),t.sub){if(t.sub!==p){var o=r(t);o[t.sub]=e}}else a[t.main]=e;return e},e.getClass=function(e,t,r){var n=a[e];if(n&&n[p]&&(n=t?n[t]:null),r&&!n)throw new Error(t?"Component "+e+"."+(t||"")+" not exists. Load it first.":e+".type should be specified.");return n},e.getClassesByMainType=function(e){e=n(e);var t=[],r=a[e.main];return r&&r[p]?d.each(r,function(e,r){r!==p&&t.push(e)}):t.push(r),t},e.hasClass=function(e){return e=n(e),!!a[e.main]},e.getAllClassMainTypes=function(){var e=[];return d.each(a,function(t,r){e.push(r)}),e},e.hasSubTypes=function(e){e=n(e);var t=a[e.main];return t&&t[p]},e.parseClassType=n,t.registerWhenExtend){var o=e.extend;o&&(e.extend=function(t){var r=o.call(this,t);return e.registerClass(r,t.type)})}return e}function h(e,t){}var c=r(104),d=(c.__DEV__,r(13)),f=".",p="___EC__COMPONENT__CONTAINER___",m=0;t.parseClassType=n,t.enableClassExtend=a,t.enableClassCheck=o,t.enableClassManagement=l,t.setReadOnly=h},function(e,t,r){function n(e){var t=e.mainData,r=e.datas;r||(r={main:t},e.datasAttr={main:"data"}),e.datas=e.mainData=null,l(t,r,e),d(r,function(r){d(t.TRANSFERABLE_METHODS,function(t){r.wrapMethod(t,c.curry(i,e))})}),t.wrapMethod("cloneShallow",c.curry(o,e)),d(t.CHANGABLE_METHODS,function(r){t.wrapMethod(r,c.curry(a,e))}),c.assert(r[t.dataType]===t)}function i(e,t){if(u(this)){var r=c.extend({},this[f]);r[this.dataType]=t,l(t,r,e)}else h(t,this.dataType,this[p],e);return t}function a(e,t){return e.struct&&e.struct.update(this),t}function o(e,t){return d(t[f],function(r,n){r!==t&&h(r.cloneShallow(),n,t,e)}),t}function s(e){var t=this[p];return null==e||null==t?t:t[f][e]}function u(e){return e[p]===e}function l(e,t,r){e[f]={},d(t,function(t,n){h(t,n,e,r)})}function h(e,t,r,n){r[f][t]=e,e[p]=r,e.dataType=t,n.struct&&(e[n.structAttr]=n.struct,n.struct[n.datasAttr[t]]=e),e.getLinkedData=s}var c=r(13),d=c.each,f="\0__link_datas",p="\0__link_mainData",m=n;e.exports=m},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(47),o=r.n(a),s=r(1),u=r(22),l=r(105),h=r(2),c=r(269),d=r(271),f=r(80),p=r.n(f),m=r(6),g=r(273),_=r(67),v=r(274),y=m.a.vec2;s.a.Shader.import(v.a);var x=1;i.a.extendChartView({type:"graphGL",__ecgl__:!0,init:function(e,t){this.groupGL=new s.a.Node,this.viewGL=new u.a("orthographic"),this.viewGL.camera.left=this.viewGL.camera.right=0,this.viewGL.add(this.groupGL),this._pointsBuilder=new _.a(!0,t),this._forceEdgesMesh=new s.a.Mesh({material:new s.a.Material({shader:s.a.createShader("ecgl.forceAtlas2.edges"),transparent:!0,depthMask:!1,depthTest:!1}),$ignorePicking:!0,geometry:new s.a.Geometry({attributes:{node:new s.a.Geometry.Attribute("node","float",2),color:new s.a.Geometry.Attribute("color","float",4,"COLOR")},dynamic:!0,mainAttribute:"node"}),renderOrder:-1,mode:s.a.Mesh.LINES}),this._edgesMesh=new s.a.Mesh({material:new s.a.Material({shader:s.a.createShader("ecgl.meshLines2D"),transparent:!0,depthMask:!1,depthTest:!1}),$ignorePicking:!0,geometry:new l.a({useNativeLine:!1,dynamic:!0}),renderOrder:-1,culling:!1}),this._layoutId=0,this._control=new g.a({zr:t.getZr(),viewGL:this.viewGL}),this._control.setTarget(this.groupGL),this._control.init(),this._clickHandler=this._clickHandler.bind(this)},render:function(e,t,r){this.groupGL.add(this._pointsBuilder.rootNode),this._model=e,this._api=r,this._initLayout(e,t,r),this._pointsBuilder.update(e,t,r),this._forceLayoutInstance instanceof c.a||this.groupGL.remove(this._forceEdgesMesh),this._updateCamera(e,r),this._control.off("update"),this._control.on("update",function(){r.dispatchAction({type:"graphGLRoam",seriesId:e.id,zoom:this._control.getZoom(),offset:this._control.getOffset()}),this._pointsBuilder.updateView(this.viewGL.camera)},this),this._control.setZoom(h.a.firstNotNull(e.get("zoom"),1)),this._control.setOffset(e.get("offset")||[0,0]);var n=this._pointsBuilder.getPointsMesh();if(n.off("mousemove",this._mousemoveHandler),n.off("mouseout",this._mouseOutHandler,this),r.getZr().off("click",this._clickHandler),this._pointsBuilder.highlightOnMouseover=!0,e.get("focusNodeAdjacency")){var i=e.get("focusNodeAdjacencyOn");"click"===i?r.getZr().on("click",this._clickHandler):"mouseover"===i&&(n.on("mousemove",this._mousemoveHandler,this),n.on("mouseout",this._mouseOutHandler,this),this._pointsBuilder.highlightOnMouseover=!1)}this._lastMouseOverDataIndex=-1},_clickHandler:function(e){if(!this._layouting){var t=this._pointsBuilder.getPointsMesh().dataIndex;t>=0?this._api.dispatchAction({type:"graphGLFocusNodeAdjacency",seriesId:this._model.id,dataIndex:t}):this._api.dispatchAction({type:"graphGLUnfocusNodeAdjacency",seriesId:this._model.id})}},_mousemoveHandler:function(e){if(!this._layouting){var t=this._pointsBuilder.getPointsMesh().dataIndex;t>=0?t!==this._lastMouseOverDataIndex&&this._api.dispatchAction({type:"graphGLFocusNodeAdjacency",seriesId:this._model.id,dataIndex:t}):this._mouseOutHandler(e),this._lastMouseOverDataIndex=t}},_mouseOutHandler:function(e){this._layouting||(this._api.dispatchAction({type:"graphGLUnfocusNodeAdjacency",seriesId:this._model.id}),this._lastMouseOverDataIndex=-1)},_updateForceEdgesGeometry:function(e,t){var r=this._forceEdgesMesh.geometry,n=t.getEdgeData(),i=0,a=this._forceLayoutInstance,o=2*n.count();r.attributes.node.init(o),r.attributes.color.init(o),n.each(function(t){var o=e[t];r.attributes.node.set(i,a.getNodeUV(o.node1)),r.attributes.node.set(i+1,a.getNodeUV(o.node2));var u=n.getItemVisual(o.dataIndex,"color"),l=s.a.parseColor(u);l[3]*=h.a.firstNotNull(n.getItemVisual(o.dataIndex,"opacity"),1),r.attributes.color.set(i,l),r.attributes.color.set(i+1,l),i+=2}),r.dirty()},_updateMeshLinesGeometry:function(){var e=this._model.getEdgeData(),t=this._edgesMesh.geometry,e=this._model.getEdgeData(),r=this._model.getData().getLayout("points");t.resetOffset(),t.setVertexCount(e.count()*t.getLineVertexCount()),t.setTriangleCount(e.count()*t.getLineTriangleCount());var n=[],i=[],a=["lineStyle","width"];this._originalEdgeColors=new Float32Array(4*e.count()),this._edgeIndicesMap=new Float32Array(e.count()),e.each(function(o){var u=e.graph.getEdgeByIndex(o),l=2*u.node1.dataIndex,c=2*u.node2.dataIndex;n[0]=r[l],n[1]=r[l+1],i[0]=r[c],i[1]=r[c+1];var d=e.getItemVisual(u.dataIndex,"color"),f=s.a.parseColor(d);f[3]*=h.a.firstNotNull(e.getItemVisual(u.dataIndex,"opacity"),1);var p=e.getItemModel(u.dataIndex),m=h.a.firstNotNull(p.get(a),1)*this._api.getDevicePixelRatio();t.addLine(n,i,f,m);for(var g=0;g<4;g++)this._originalEdgeColors[4*u.dataIndex+g]=f[g];this._edgeIndicesMap[u.dataIndex]=o},this),t.dirty()},_updateForceNodesGeometry:function(e){for(var t=this._pointsBuilder.getPointsMesh(),r=[],n=0;n=f&&(u._syncNodePosition(e),d=0),r.getZr().refresh(),p()(function(){m(t)})})};p()(function(){u._forceLayoutInstanceToDispose&&(u._forceLayoutInstanceToDispose.dispose(i.layer.renderer),u._forceLayoutInstanceToDispose=null),m(l)}),this._layouting=!0}}},stopLayout:function(e,t,r,n){n&&null!=n.from&&n.from!==this.uid||(this._layoutId=0,this.groupGL.remove(this._forceEdgesMesh),this.groupGL.add(this._edgesMesh),this._forceLayoutInstance&&this.viewGL.layer&&(n&&n.beforeLayout||(this._syncNodePosition(e),this._updateAfterLayout(e,t,r)),this._api.getZr().refresh(),this._layouting=!1))},_syncNodePosition:function(e){var t=this._forceLayoutInstance.getNodePosition(this.viewGL.layer.renderer);e.getData().setLayout("points",t),e.setNodePosition(t)},_updateAfterLayout:function(e,t,r){this._updateMeshLinesGeometry(),this._pointsBuilder.removePositionTexture(),this._pointsBuilder.updateLayout(e,t,r),this._pointsBuilder.updateView(this.viewGL.camera),this._pointsBuilder.updateLabels(),this._pointsBuilder.showLabels()},focusNodeAdjacency:function(e,t,r,n){var i=this._model.getData();this._downplayAll();var a=n.dataIndex,o=i.graph,s=[],u=o.getNodeByIndex(a);s.push(u),u.edges.forEach(function(e){e.dataIndex<0||(e.node1!==u&&s.push(e.node1),e.node2!==u&&s.push(e.node2))},this),this._pointsBuilder.fadeOutAll(.05),this._fadeOutEdgesAll(.05),s.forEach(function(e){this._pointsBuilder.highlight(i,e.dataIndex)},this),this._pointsBuilder.updateLabels(s.map(function(e){return e.dataIndex}));var l=[];u.edges.forEach(function(e){e.dataIndex>=0&&(this._highlightEdge(e.dataIndex),l.push(e))},this),this._focusNodes=s,this._focusEdges=l},unfocusNodeAdjacency:function(e,t,r,n){this._downplayAll(),this._pointsBuilder.fadeInAll(),this._fadeInEdgesAll(),this._pointsBuilder.updateLabels()},_highlightEdge:function(e){var t=this._model.getEdgeData().getItemModel(e),r=s.a.parseColor(t.get("emphasis.lineStyle.color")||t.get("lineStyle.color")),n=h.a.firstNotNull(t.get("emphasis.lineStyle.opacity"),t.get("lineStyle.opacity"),1);r[3]*=n,this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[e],r)},_downplayAll:function(){this._focusNodes&&this._focusNodes.forEach(function(e){this._pointsBuilder.downplay(this._model.getData(),e.dataIndex)},this),this._focusEdges&&this._focusEdges.forEach(function(e){this._downplayEdge(e.dataIndex)},this)},_downplayEdge:function(e){var t=this._getColor(e,[]);this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[e],t)},_setEdgeFade:function(){var e=[];return function(t,r){this._getColor(t,e),e[3]*=r,this._edgesMesh.geometry.setItemColor(this._edgeIndicesMap[t],e)}}(),_getColor:function(e,t){for(var r=0;r<4;r++)t[r]=this._originalEdgeColors[4*e+r];return t},_fadeOutEdgesAll:function(e){this._model.getData().graph.eachEdge(function(t){this._setEdgeFade(t.dataIndex,e)},this)},_fadeInEdgesAll:function(){this._fadeOutEdgesAll(1)},_updateCamera:function(e,t){this.viewGL.setViewport(0,0,t.getWidth(),t.getHeight(),t.getDevicePixelRatio());for(var r=this.viewGL.camera,n=e.getData(),i=n.getLayout("points"),a=y.create(1/0,1/0),o=y.create(-1/0,-1/0),s=[],u=0;ur.left&&hr.top)){var c=Math.max(o[0]-a[0],10),d=c/t.getWidth()*t.getHeight();c*=1.4,d*=1.4,a[0]-=.2*c,r.left=a[0],r.top=l-d/2,r.bottom=l+d/2,r.right=c+a[0],r.near=0,r.far=100}},dispose:function(){var e=this.viewGL.layer.renderer;this._forceLayoutInstance&&this._forceLayoutInstance.dispose(e),this.groupGL.removeAll(),this._layoutId=-1},remove:function(){this.groupGL.removeAll(),this._control.dispose()}})},function(e,t,r){"use strict";function n(e){var t={type:o.a.Texture.FLOAT,minFilter:o.a.Texture.NEAREST,magFilter:o.a.Texture.NEAREST};this._positionSourceTex=new o.a.Texture2D(t),this._positionSourceTex.flipY=!1,this._positionTex=new o.a.Texture2D(t),this._positionPrevTex=new o.a.Texture2D(t),this._forceTex=new o.a.Texture2D(t),this._forcePrevTex=new o.a.Texture2D(t),this._weightedSumTex=new o.a.Texture2D(t),this._weightedSumTex.width=this._weightedSumTex.height=1,this._globalSpeedTex=new o.a.Texture2D(t),this._globalSpeedPrevTex=new o.a.Texture2D(t),this._globalSpeedTex.width=this._globalSpeedTex.height=1,this._globalSpeedPrevTex.width=this._globalSpeedPrevTex.height=1,this._nodeRepulsionPass=new s.a({fragment:o.a.Shader.source("ecgl.forceAtlas2.updateNodeRepulsion")}),this._positionPass=new s.a({fragment:o.a.Shader.source("ecgl.forceAtlas2.updatePosition")}),this._globalSpeedPass=new s.a({fragment:o.a.Shader.source("ecgl.forceAtlas2.calcGlobalSpeed")}),this._copyPass=new s.a({fragment:o.a.Shader.source("clay.compositor.output")});var r=function(e){e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ONE)};this._edgeForceMesh=new o.a.Mesh({geometry:new o.a.Geometry({attributes:{node1:new o.a.Geometry.Attribute("node1","float",2),node2:new o.a.Geometry.Attribute("node2","float",2),weight:new o.a.Geometry.Attribute("weight","float",1)},dynamic:!0,mainAttribute:"node1"}),material:new o.a.Material({transparent:!0,shader:o.a.createShader("ecgl.forceAtlas2.updateEdgeAttraction"),blend:r,depthMask:!1,depthText:!1}),mode:o.a.Mesh.POINTS}),this._weightedSumMesh=new o.a.Mesh({geometry:new o.a.Geometry({attributes:{node:new o.a.Geometry.Attribute("node","float",2)},dynamic:!0,mainAttribute:"node"}),material:new o.a.Material({transparent:!0,shader:o.a.createShader("ecgl.forceAtlas2.calcWeightedSum"),blend:r,depthMask:!1,depthText:!1}),mode:o.a.Mesh.POINTS}),this._framebuffer=new u.a({depthBuffer:!1}),this._dummyCamera=new o.a.OrthographicCamera({left:-1,right:1,top:1,bottom:-1,near:0,far:100}),this._globalSpeed=0}var i=r(0),a=r.n(i),o=r(1),s=r(16),u=r(10),l=r(270);o.a.Shader.import(l.a);var h={repulsionByDegree:!0,linLogMode:!1,strongGravityMode:!1,gravity:1,scaling:1,edgeWeightInfluence:1,jitterTolerence:.1,preventOverlap:!1,dissuadeHubs:!1,gravityCenter:null};n.prototype.updateOption=function(e){for(var t in h)this[t]=h[t];var r=this._nodes.length;if(this.jitterTolerence=r>5e4?10:r>5e3?1:.1,this.scaling=r>100?2:10,e)for(var t in h)null!=e[t]&&(this[t]=e[t]);if(this.repulsionByDegree)for(var n=this._positionSourceTex.pixels,i=0;ie},n.prototype._swapTexture=function(){var e=this._positionPrevTex;this._positionPrevTex=this._positionTex,this._positionTex=e;var e=this._forcePrevTex;this._forcePrevTex=this._forceTex,this._forceTex=e;var e=this._globalSpeedPrevTex;this._globalSpeedPrevTex=this._globalSpeedTex,this._globalSpeedTex=e},n.prototype._initFromSource=function(e){this._framebuffer.attach(this._positionPrevTex),this._framebuffer.bind(e),this._copyPass.setUniform("texture",this._positionSourceTex),this._copyPass.render(e),e.gl.clearColor(0,0,0,0),this._framebuffer.attach(this._forcePrevTex),e.gl.clear(e.gl.COLOR_BUFFER_BIT),this._framebuffer.attach(this._globalSpeedPrevTex),e.gl.clear(e.gl.COLOR_BUFFER_BIT),this._framebuffer.unbind(e)},n.prototype._resize=function(e,t){["_positionSourceTex","_positionTex","_positionPrevTex","_forceTex","_forcePrevTex"].forEach(function(r){this[r].width=e,this[r].height=t,this[r].dirty()},this)},n.prototype.dispose=function(e){this._framebuffer.dispose(e),this._copyPass.dispose(e),this._nodeRepulsionPass.dispose(e),this._positionPass.dispose(e),this._globalSpeedPass.dispose(e),this._edgeForceMesh.geometry.dispose(e),this._weightedSumMesh.geometry.dispose(e),this._positionSourceTex.dispose(e),this._positionTex.dispose(e),this._positionPrevTex.dispose(e),this._forceTex.dispose(e),this._forcePrevTex.dispose(e),this._weightedSumTex.dispose(e),this._globalSpeedTex.dispose(e),this._globalSpeedPrevTex.dispose(e)},a.a.ForceAtlas2GPU=n,t.a=n},function(e,t,r){"use strict";t.a="@export ecgl.forceAtlas2.updateNodeRepulsion\n\n#define NODE_COUNT 0\n\nuniform sampler2D positionTex;\n\nuniform vec2 textureSize;\nuniform float gravity;\nuniform float scaling;\nuniform vec2 gravityCenter;\n\nuniform bool strongGravityMode;\nuniform bool preventOverlap;\n\nvarying vec2 v_Texcoord;\n\nvoid main() {\n\n vec4 n0 = texture2D(positionTex, v_Texcoord);\n\n vec2 force = vec2(0.0);\n for (int i = 0; i < NODE_COUNT; i++) {\n vec2 uv = vec2(\n mod(float(i), textureSize.x) / (textureSize.x - 1.0),\n floor(float(i) / textureSize.x) / (textureSize.y - 1.0)\n );\n vec4 n1 = texture2D(positionTex, uv);\n\n vec2 dir = n0.xy - n1.xy;\n float d2 = dot(dir, dir);\n\n if (d2 > 0.0) {\n float factor = 0.0;\n if (preventOverlap) {\n float d = sqrt(d2);\n d = d - n0.w - n1.w;\n if (d > 0.0) {\n factor = scaling * n0.z * n1.z / (d * d);\n }\n else if (d < 0.0) {\n factor = scaling * 100.0 * n0.z * n1.z;\n }\n }\n else {\n factor = scaling * n0.z * n1.z / d2;\n }\n force += dir * factor;\n }\n }\n\n vec2 dir = gravityCenter - n0.xy;\n float d = 1.0;\n if (!strongGravityMode) {\n d = length(dir);\n }\n\n force += dir * n0.z * gravity / (d + 1.0);\n\n gl_FragColor = vec4(force, 0.0, 1.0);\n}\n@end\n\n@export ecgl.forceAtlas2.updateEdgeAttraction.vertex\n\nattribute vec2 node1;\nattribute vec2 node2;\nattribute float weight;\n\nuniform sampler2D positionTex;\nuniform float edgeWeightInfluence;\nuniform bool preventOverlap;\nuniform bool linLogMode;\n\nuniform vec2 windowSize: WINDOW_SIZE;\n\nvarying vec2 v_Force;\n\nvoid main() {\n\n vec4 n0 = texture2D(positionTex, node1);\n vec4 n1 = texture2D(positionTex, node2);\n\n vec2 dir = n1.xy - n0.xy;\n float d = length(dir);\n float w;\n if (edgeWeightInfluence == 0.0) {\n w = 1.0;\n }\n else if (edgeWeightInfluence == 1.0) {\n w = weight;\n }\n else {\n w = pow(weight, edgeWeightInfluence);\n }\n vec2 offset = vec2(1.0 / windowSize.x, 1.0 / windowSize.y);\n vec2 scale = vec2((windowSize.x - 1.0) / windowSize.x, (windowSize.y - 1.0) / windowSize.y);\n vec2 pos = node1 * scale * 2.0 - 1.0;\n gl_Position = vec4(pos + offset, 0.0, 1.0);\n gl_PointSize = 1.0;\n\n float factor;\n if (preventOverlap) {\n d = d - n1.w - n0.w;\n }\n if (d <= 0.0) {\n v_Force = vec2(0.0);\n return;\n }\n\n if (linLogMode) {\n factor = w * log(d) / d;\n }\n else {\n factor = w;\n }\n v_Force = dir * factor;\n}\n@end\n\n@export ecgl.forceAtlas2.updateEdgeAttraction.fragment\n\nvarying vec2 v_Force;\n\nvoid main() {\n gl_FragColor = vec4(v_Force, 0.0, 0.0);\n}\n@end\n\n@export ecgl.forceAtlas2.calcWeightedSum.vertex\n\nattribute vec2 node;\n\nvarying vec2 v_NodeUv;\n\nvoid main() {\n\n v_NodeUv = node;\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n gl_PointSize = 1.0;\n}\n@end\n\n@export ecgl.forceAtlas2.calcWeightedSum.fragment\n\nvarying vec2 v_NodeUv;\n\nuniform sampler2D positionTex;\nuniform sampler2D forceTex;\nuniform sampler2D forcePrevTex;\n\nvoid main() {\n vec2 force = texture2D(forceTex, v_NodeUv).rg;\n vec2 forcePrev = texture2D(forcePrevTex, v_NodeUv).rg;\n\n float mass = texture2D(positionTex, v_NodeUv).z;\n float swing = length(force - forcePrev) * mass;\n float traction = length(force + forcePrev) * 0.5 * mass;\n\n gl_FragColor = vec4(swing, traction, 0.0, 0.0);\n}\n@end\n\n@export ecgl.forceAtlas2.calcGlobalSpeed\n\nuniform sampler2D globalSpeedPrevTex;\nuniform sampler2D weightedSumTex;\nuniform float jitterTolerence;\n\nvoid main() {\n vec2 weightedSum = texture2D(weightedSumTex, vec2(0.5)).xy;\n float prevGlobalSpeed = texture2D(globalSpeedPrevTex, vec2(0.5)).x;\n float globalSpeed = jitterTolerence * jitterTolerence\n * weightedSum.y / weightedSum.x;\n if (prevGlobalSpeed > 0.0) {\n globalSpeed = min(globalSpeed / prevGlobalSpeed, 1.5) * prevGlobalSpeed;\n }\n gl_FragColor = vec4(globalSpeed, 0.0, 0.0, 1.0);\n}\n@end\n\n@export ecgl.forceAtlas2.updatePosition\n\nuniform sampler2D forceTex;\nuniform sampler2D forcePrevTex;\nuniform sampler2D positionTex;\nuniform sampler2D globalSpeedTex;\n\nvarying vec2 v_Texcoord;\n\nvoid main() {\n vec2 force = texture2D(forceTex, v_Texcoord).xy;\n vec2 forcePrev = texture2D(forcePrevTex, v_Texcoord).xy;\n vec4 node = texture2D(positionTex, v_Texcoord);\n\n float globalSpeed = texture2D(globalSpeedTex, vec2(0.5)).r;\n float swing = length(force - forcePrev);\n float speed = 0.1 * globalSpeed / (0.1 + globalSpeed * sqrt(swing));\n\n float df = length(force);\n if (df > 0.0) {\n speed = min(df * speed, 10.0) / df;\n\n gl_FragColor = vec4(node.xy + speed * force, node.zw);\n }\n else {\n gl_FragColor = node;\n }\n}\n@end\n\n@export ecgl.forceAtlas2.edges.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec2 node;\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n\nuniform sampler2D positionTex;\n\nvoid main()\n{\n gl_Position = worldViewProjection * vec4(\n texture2D(positionTex, node).xy, -10.0, 1.0\n );\n v_Color = a_Color;\n}\n@end\n\n@export ecgl.forceAtlas2.edges.fragment\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nvarying vec4 v_Color;\nvoid main() {\n gl_FragColor = color * v_Color;\n}\n@end"},function(e,t,r){"use strict";var n=r(5),i=r(4),a=r(272),o=a.a.toString();o=o.slice(o.indexOf("{")+1,o.lastIndexOf("}"));var s={barnesHutOptimize:!0,barnesHutTheta:1.5,repulsionByDegree:!0,linLogMode:!1,strongGravityMode:!1,gravity:1,scaling:1,edgeWeightInfluence:1,jitterTolerence:.1,preventOverlap:!1,dissuadeHubs:!1,gravityCenter:null},u=function(e){for(var t in s)this[t]=s[t];if(e)for(var t in e)this[t]=e[t];this._nodes=[],this._edges=[],this._disposed=!1,this._positionTex=new n.a({type:i.a.FLOAT,flipY:!1,minFilter:i.a.NEAREST,magFilter:i.a.NEAREST})};u.prototype.initData=function(e,t){var r=new Blob([o]),n=window.URL.createObjectURL(r);this._worker=new Worker(n),this._worker.onmessage=this._$onupdate.bind(this),this._nodes=e,this._edges=t,this._frame=0;for(var i=e.length,a=t.length,s=new Float32Array(2*i),u=new Float32Array(i),l=new Float32Array(i),h=new Float32Array(2*a),c=new Float32Array(a),d=0;d5e4?10:a>5e3?1:.1,t.scaling=a>100?2:10,t.barnesHutOptimize=a>1e3,e)for(var r in s)null!=e[r]&&(t[r]=e[r]);if(!t.gravityCenter){for(var o=[1/0,1/0],u=[-1/0,-1/0],l=0;le},u.prototype.getNodePosition=function(e,t){if(t||(t=new Float32Array(2*this._nodes.length)),this._positionArr)for(var r=0;r0&&(i=1/Math.sqrt(i),e[0]=t[0]*i,e[1]=t[1]*i),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,r){return e[0]=t,e[1]=r,e}},a=e.prototype;a.beforeUpdate=function(){for(var e=0;e=e&&this.bbox[1]<=t&&this.bbox[3]>=t},a.setBBox=function(e,t,r,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=r,this.bbox[3]=n,this.size=(r-e+n-t)/2},a._newSubRegion=function(){var t=this.subRegions[this.nSubRegions];return t||(t=new e,this.subRegions[this.nSubRegions]=t),this.nSubRegions++,t},a._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),r=this.bbox;if(!t){var n=(r[0]+r[2])/2,i=(r[1]+r[3])/2,a=(r[2]-r[0])/2,o=(r[3]-r[1])/2,s=e.position[0]>=n?1:0,u=e.position[1]>=i?1:0,t=this._newSubRegion();t.setBBox(s*a+r[0],u*o+r[1],(s+1)*a+r[0],(u+1)*o+r[1])}t.addNode(e)},a._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=new Float32Array(2));var t=this.centerOfMass[0]*this.mass,r=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,r+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=r/this.mass};var o=n.prototype;o.initNodes=function(e,r,n){var i=r.length;this.nodes.length=0;for(var a=void 0!==n,o=0;o0&&(this.strongGravityMode?this.applyNodeStrongGravity(n):this.applyNodeGravity(n))}for(var t=0;t0&&(c=Math.min(c/this._globalSpeed,1.5)*this._globalSpeed),this._globalSpeed=c;for(var t=0;t0&&(d=Math.min(f*d,10)/f,i.scaleAndAdd(r.position,r.position,r.force,d))}},o.applyRegionToNodeRepulsion=function(){var e=i.create();return function(t,r){if(t.node)this.applyNodeToNodeRepulsion(t.node,r,!0);else{i.sub(e,r.position,t.centerOfMass);var n=e[0]*e[0]+e[1]*e[1];if(n>this.barnesHutTheta*t.size*t.size){var a=this.scaling*r.mass*t.mass/n;i.scaleAndAdd(r.force,r.force,e,a)}else for(var o=0;o0)o=this.scaling*t.mass*r.mass/(s*s);else{if(!(s<0))return;o=100*this.scaling*t.mass*r.mass}}else o=this.scaling*t.mass*r.mass/a;i.scaleAndAdd(t.force,t.force,e,o),i.scaleAndAdd(r.force,r.force,e,-o)}}}}(),o.applyEdgeAttraction=function(){var e=i.create();return function(t){var r=t.source,n=t.target;i.sub(e,r.position,n.position);var a,o=i.len(e);a=0===this.edgeWeightInfluence?1:1===this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;this.preventOverlap&&(o=o-r.size-n.size)<=0||(s=this.linLogMode?-a*Math.log(o+1)/(o+1):-a,i.scaleAndAdd(r.force,r.force,e,s),i.scaleAndAdd(n.force,n.force,e,-s))}}(),o.applyNodeGravity=function(){var e=i.create();return function(t){i.sub(e,this.gravityCenter,t.position);var r=i.len(e);i.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(r+1))}}(),o.applyNodeStrongGravity=function(){var e=i.create();return function(t){i.sub(e,this.gravityCenter,t.position),i.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass)}}(),o.updateBBox=function(){for(var e=1/0,t=1/0,r=-1/0,n=-1/0,i=0;i0?1.1:.9,a=Math.max(Math.min(this._zoom*i,this.maxZoom),this.minZoom);i=a/this._zoom;var o=this._convertPos(r,n),s=(o.x-this._dx)*(i-1),u=(o.y-this._dy)*(i-1);this._dx-=s,this._dy-=u,this._zoom=a,this._needsUpdate=!0}}},dispose:function(){var e=this.zr;e.off("mousedown",this._mouseDownHandler),e.off("mousemove",this._mouseMoveHandler),e.off("mouseup",this._mouseUpHandler),e.off("mousewheel",this._mouseWheelHandler),e.off("globalout",this._mouseUpHandler),e.animation.off("frame",this._update)}}));t.a=i},function(e,t,r){"use strict";t.a="@export ecgl.lines2D.vertex\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nattribute vec2 position: POSITION;\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n\n#ifdef POSITIONTEXTURE_ENABLED\nuniform sampler2D positionTexture;\n#endif\n\nvoid main()\n{\n gl_Position = worldViewProjection * vec4(position, -10.0, 1.0);\n\n v_Color = a_Color;\n}\n\n@end\n\n@export ecgl.lines2D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\n\nvoid main()\n{\n gl_FragColor = color * v_Color;\n}\n@end\n\n\n@export ecgl.meshLines2D.vertex\n\nattribute vec2 position: POSITION;\nattribute vec2 normal;\nattribute float offset;\nattribute vec4 a_Color : COLOR;\n\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform vec4 viewport : VIEWPORT;\n\nvarying vec4 v_Color;\nvarying float v_Miter;\n\nvoid main()\n{\n vec4 p2 = worldViewProjection * vec4(position + normal, -10.0, 1.0);\n gl_Position = worldViewProjection * vec4(position, -10.0, 1.0);\n\n p2.xy /= p2.w;\n gl_Position.xy /= gl_Position.w;\n\n vec2 N = normalize(p2.xy - gl_Position.xy);\n gl_Position.xy += N * offset / viewport.zw * 2.0;\n\n gl_Position.xy *= gl_Position.w;\n\n v_Color = a_Color;\n}\n@end\n\n\n@export ecgl.meshLines2D.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\n\nvarying vec4 v_Color;\nvarying float v_Miter;\n\nvoid main()\n{\n gl_FragColor = color * v_Color;\n}\n\n@end"},function(e,t,r){"use strict";var n=r(0);r.n(n),r(276),r(280)},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(1),o=r(2),s=r(22),u=r(277);i.a.extendChartView({type:"flowGL",__ecgl__:!0,init:function(e,t){this.viewGL=new s.a("orthographic"),this.groupGL=new a.a.Node,this.viewGL.add(this.groupGL),this._particleSurface=new u.a;var r=new a.a.Mesh({geometry:new a.a.PlaneGeometry,material:new a.a.Material({shader:new a.a.Shader({vertex:a.a.Shader.source("ecgl.color.vertex"),fragment:a.a.Shader.source("ecgl.color.fragment")}),transparent:!0})});r.material.enableTexture("diffuseMap"),this.groupGL.add(r),this._planeMesh=r},render:function(e,t,r){var n=this._particleSurface;n.setParticleType(e.get("particleType")),n.setSupersampling(e.get("supersampling")),this._updateData(e,r),this._updateCamera(r.getWidth(),r.getHeight(),r.getDevicePixelRatio());var i=o.a.firstNotNull(e.get("particleDensity"),128);n.setParticleDensity(i,i);var s=this._planeMesh,u=+new Date,l=this,h=!0;s.__percent=0,s.stopAnimation(),s.animate("",{loop:!0}).when(1e5,{__percent:1}).during(function(){var e=+new Date,t=Math.min(e-u,20);u+=t,l._renderer&&(n.update(l._renderer,r,t/1e3,h),s.material.set("diffuseMap",n.getSurfaceTexture())),h=!1}).start();var c=e.getModel("itemStyle"),d=a.a.parseColor(c.get("color"));d[3]*=o.a.firstNotNull(c.get("opacity"),1),s.material.set("color",d),n.setColorTextureImage(e.get("colorTexture"),r),n.setParticleSize(e.get("particleSize")),n.particleSpeedScaling=e.get("particleSpeed"),n.motionBlurFactor=1-Math.pow(.1,e.get("particleTrail"))},updateTransform:function(e,t,r){this._updateData(e,r)},afterRender:function(e,t,r,n){var i=n.renderer;this._renderer=i},_updateData:function(e,t){var r=e.coordinateSystem,n=r.dimensions.map(function(t){return e.coordDimToDataDim(t)[0]}),i=e.getData(),a=i.getDataExtent(n[0]),o=i.getDataExtent(n[1]),s=e.get("gridWidth"),u=e.get("gridHeight");if(null==s||"auto"===s){var l=(a[1]-a[0])/(o[1]-o[0]);s=Math.round(Math.sqrt(l*i.count()))}null!=u&&"auto"!==u||(u=Math.ceil(i.count()/s));var h=this._particleSurface.vectorFieldTexture,c=h.pixels;if(c&&c.length===u*s*4)for(var d=0;d=359&&(i[0]>0&&(i[0]=0),a[0]0?e[e.length-1]:this._lastFrameTexture},setRegion:function(e){this._particlePass.setUniform("region",e)},resize:function(e,t){this._lastFrameTexture.width=e*this._supersampling,this._lastFrameTexture.height=t*this._supersampling,this._thisFrameTexture.width=e*this._supersampling,this._thisFrameTexture.height=t*this._supersampling,this._width=e,this._height=t},setParticleSize:function(e){var t=this._getParticleMesh();if(e<=2)return t.material.disableTexture("spriteTexture"),void(t.material.transparent=!1);this._spriteTexture||(this._spriteTexture=new l.a),this._spriteTexture.image&&this._spriteTexture.image.width===e||(this._spriteTexture.image=n(e),this._spriteTexture.dirty()),t.material.transparent=!0,t.material.enableTexture("spriteTexture"),t.material.set("spriteTexture",this._spriteTexture),this._particleSize=e},setGradientTexture:function(e){var t=this._getParticleMesh().material;t[e?"enableTexture":"disableTexture"]("gradientTexture"),t.setUniform("gradientTexture",e)},setColorTextureImage:function(e,t){this._getParticleMesh().material.setTextureImage("colorTexture",e,t,{flipY:!0})},setParticleType:function(e){this._particleType=e},clearFrame:function(e){var t=this._frameBuffer;t.attach(this._lastFrameTexture),t.bind(e),e.gl.clear(e.gl.DEPTH_BUFFER_BIT|e.gl.COLOR_BUFFER_BIT),t.unbind(e)},setSupersampling:function(e){this._supersampling=e,this.resize(this._width,this._height)},_updateDownsampleTextures:function(e,t){for(var r=this._downsampleTextures,n=Math.max(Math.floor(Math.log(this._supersampling/t.getDevicePixelRatio())/Math.log(2)),0),i=2,a=this._width*this._supersampling,o=this._height*this._supersampling,s=0;s65535?new Uint32Array(3*n):new Uint16Array(3*n))},addLine:function(e){var t=this._vertexOffset;this.attributes.position.set(t,[e[0],e[1],1]),this.attributes.position.set(t+1,[e[0],e[1],-1]),this.attributes.position.set(t+2,[e[0],e[1],2]),this.attributes.position.set(t+3,[e[0],e[1],-2]),this.setTriangleIndices(this._faceOffset++,[t,t+1,t+2]),this.setTriangleIndices(this._faceOffset++,[t+1,t+2,t+3]),this._vertexOffset+=4}}));t.a=a},function(e,t,r){"use strict";t.a="@export ecgl.vfParticle.particle.fragment\n\nuniform sampler2D particleTexture;\nuniform sampler2D spawnTexture;\nuniform sampler2D velocityTexture;\n\nuniform float deltaTime;\nuniform float elapsedTime;\n\nuniform float speedScaling : 1.0;\n\nuniform vec2 textureSize;\nuniform vec4 region : [0, 0, 1, 1];\nuniform float firstFrameTime;\n\nvarying vec2 v_Texcoord;\n\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, v_Texcoord);\n bool spawn = false;\n if (p.w <= 0.0) {\n p = texture2D(spawnTexture, fract(v_Texcoord + elapsedTime / 10.0));\n p.w -= firstFrameTime;\n spawn = true;\n }\n vec2 v = texture2D(velocityTexture, fract(p.xy * region.zw + region.xy)).xy;\n v = (v - 0.5) * 2.0;\n p.z = length(v);\n p.xy += v * deltaTime / 10.0 * speedScaling;\n p.w -= deltaTime;\n\n if (spawn || p.xy != fract(p.xy)) {\n p.z = 0.0;\n }\n p.xy = fract(p.xy);\n\n gl_FragColor = p;\n}\n@end\n\n@export ecgl.vfParticle.renderPoints.vertex\n\n#define PI 3.1415926\n\nattribute vec2 texcoord : TEXCOORD_0;\n\nuniform sampler2D particleTexture;\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nuniform float size : 1.0;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, texcoord);\n\n if (p.w > 0.0 && p.z > 1e-5) {\n gl_Position = worldViewProjection * vec4(p.xy * 2.0 - 1.0, 0.0, 1.0);\n }\n else {\n gl_Position = vec4(100000.0, 100000.0, 100000.0, 1.0);\n }\n\n v_Mag = p.z;\n v_Uv = p.xy;\n\n gl_PointSize = size;\n}\n\n@end\n\n@export ecgl.vfParticle.renderPoints.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nuniform sampler2D gradientTexture;\nuniform sampler2D colorTexture;\nuniform sampler2D spriteTexture;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n gl_FragColor = color;\n#ifdef SPRITETEXTURE_ENABLED\n gl_FragColor *= texture2D(spriteTexture, gl_PointCoord);\n if (color.a == 0.0) {\n discard;\n }\n#endif\n#ifdef GRADIENTTEXTURE_ENABLED\n gl_FragColor *= texture2D(gradientTexture, vec2(v_Mag, 0.5));\n#endif\n#ifdef COLORTEXTURE_ENABLED\n gl_FragColor *= texture2D(colorTexture, v_Uv);\n#endif\n}\n\n@end\n\n@export ecgl.vfParticle.renderLines.vertex\n\n#define PI 3.1415926\n\nattribute vec3 position : POSITION;\n\nuniform sampler2D particleTexture;\nuniform sampler2D prevParticleTexture;\n\nuniform float size : 1.0;\nuniform vec4 vp: VIEWPORT;\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\n@import clay.util.rand\n\nvoid main()\n{\n vec4 p = texture2D(particleTexture, position.xy);\n vec4 p2 = texture2D(prevParticleTexture, position.xy);\n\n p.xy = p.xy * 2.0 - 1.0;\n p2.xy = p2.xy * 2.0 - 1.0;\n\n if (p.w > 0.0 && p.z > 1e-5) {\n vec2 dir = normalize(p.xy - p2.xy);\n vec2 norm = vec2(dir.y / vp.z, -dir.x / vp.w) * sign(position.z) * size;\n if (abs(position.z) == 2.0) {\n gl_Position = vec4(p.xy + norm, 0.0, 1.0);\n v_Uv = p.xy;\n v_Mag = p.z;\n }\n else {\n gl_Position = vec4(p2.xy + norm, 0.0, 1.0);\n v_Mag = p2.z;\n v_Uv = p2.xy;\n }\n gl_Position = worldViewProjection * gl_Position;\n }\n else {\n gl_Position = vec4(100000.0, 100000.0, 100000.0, 1.0);\n }\n}\n\n@end\n\n@export ecgl.vfParticle.renderLines.fragment\n\nuniform vec4 color : [1.0, 1.0, 1.0, 1.0];\nuniform sampler2D gradientTexture;\nuniform sampler2D colorTexture;\n\nvarying float v_Mag;\nvarying vec2 v_Uv;\n\nvoid main()\n{\n gl_FragColor = color;\n #ifdef GRADIENTTEXTURE_ENABLED\n gl_FragColor *= texture2D(gradientTexture, vec2(v_Mag, 0.5));\n#endif\n#ifdef COLORTEXTURE_ENABLED\n gl_FragColor *= texture2D(colorTexture, v_Uv);\n#endif\n}\n\n@end\n"},function(e,t,r){"use strict";var n=r(0),i=r.n(n);i.a.extendSeriesModel({type:"series.flowGL",dependencies:["geo","grid","bmap"],visualColorAccessPath:"itemStyle.color",getInitialData:function(e,t){var r=i.a.getCoordinateSystemDimensions(this.get("coordinateSystem"))||["x","y"];r.push("vx","vy");var n=i.a.helper.completeDimensions(r,this.getSource(),{encodeDef:this.get("encode"),dimsDef:this.get("dimensions")}),a=new i.a.List(n,this);return a.initData(this.getSource()),a},defaultOption:{coordinateSystem:"cartesian2d",zlevel:10,supersampling:1,particleType:"point",particleDensity:128,particleSize:1,particleSpeed:1,particleTrail:2,colorTexture:null,gridWidth:"auto",gridHeight:"auto",itemStyle:{color:"#fff",opacity:.8}}})},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=(r(282),r(283),r(17));i.a.registerVisual(Object(a.a)("linesGL"))},function(e,t,r){"use strict";var n=r(0),i=r.n(n),a=r(13),o=(r.n(a),i.a.extendSeriesModel({type:"series.linesGL",dependencies:["grid","geo"],visualColorAccessPath:"lineStyle.color",streamEnabled:!0,init:function(e){var t=this._processFlatCoordsArray(e.data);this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset,t.flatCoords&&(e.data=new Float32Array(t.count)),o.superApply(this,"init",arguments)},mergeOption:function(e){var t=this._processFlatCoordsArray(e.data);this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset,t.flatCoords&&(e.data=new Float32Array(t.count)),o.superApply(this,"mergeOption",arguments)},appendData:function(e){var t=this._processFlatCoordsArray(e.data);t.flatCoords&&(this._flatCoords?(this._flatCoords=Object(a.concatArray)(this._flatCoords,t.flatCoords),this._flatCoordsOffset=Object(a.concatArray)(this._flatCoordsOffset,t.flatCoordsOffset)):(this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset),e.data=new Float32Array(t.count)),this.getRawData().appendData(e.data)},_getCoordsFromItemModel:function(e){var t=this.getData().getItemModel(e),r=t.option instanceof Array?t.option:t.getShallow("coords");return r},getLineCoordsCount:function(e){return this._flatCoordsOffset?this._flatCoordsOffset[2*e+1]:this._getCoordsFromItemModel(e).length},getLineCoords:function(e,t){if(this._flatCoordsOffset){for(var r=this._flatCoordsOffset[2*e],n=this._flatCoordsOffset[2*e+1],i=0;i1?(t.material.shader!==this._meshLinesShader&&t.material.attachShader(this._meshLinesShader),t.mode=a.a.Mesh.TRIANGLES):(t.material.shader!==this._nativeLinesShader&&t.material.attachShader(this._nativeLinesShader),t.mode=a.a.Mesh.LINES),r=r||0,n=n||o.count(),h.resetOffset();var f=0,p=0,m=[],g=[],_=[],v=[],y=[],x=.3,T=.7;if(u||0!==s)for(var b=r;b. + pointerEventsSupported: 'onpointerdown' in window + // Firefox supports pointer but not by default, only MS browsers are reliable on pointer + // events currently. So we dont use that on other browsers unless tested sufficiently. + // Although IE 10 supports pointer event, it use old style and is different from the + // standard. So we exclude that. (IE 10 is hardly used on touch device) + && (browser.edge || (browser.ie && browser.version >= 11)), + // passiveSupported: detectPassiveSupport() + domSupported: typeof document !== 'undefined' + }; +} + +// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection +// function detectPassiveSupport() { +// // Test via a getter in the options object to see if the passive property is accessed +// var supportsPassive = false; +// try { +// var opts = Object.defineProperty({}, 'passive', { +// get: function() { +// supportsPassive = true; +// } +// }); +// window.addEventListener('testPassive', function() {}, opts); +// } catch (e) { +// } +// return supportsPassive; +// } + +/** + * @module zrender/core/util + */ + +// 用于处理merge时无法遍历Date等对象的问题 +var BUILTIN_OBJECT = { + '[object Function]': 1, + '[object RegExp]': 1, + '[object Date]': 1, + '[object Error]': 1, + '[object CanvasGradient]': 1, + '[object CanvasPattern]': 1, + // For node-canvas + '[object Image]': 1, + '[object Canvas]': 1 +}; + +var TYPED_ARRAY = { + '[object Int8Array]': 1, + '[object Uint8Array]': 1, + '[object Uint8ClampedArray]': 1, + '[object Int16Array]': 1, + '[object Uint16Array]': 1, + '[object Int32Array]': 1, + '[object Uint32Array]': 1, + '[object Float32Array]': 1, + '[object Float64Array]': 1 +}; + +var objToString = Object.prototype.toString; + +var arrayProto = Array.prototype; +var nativeForEach = arrayProto.forEach; +var nativeFilter = arrayProto.filter; +var nativeSlice = arrayProto.slice; +var nativeMap = arrayProto.map; +var nativeReduce = arrayProto.reduce; + +// Avoid assign to an exported variable, for transforming to cjs. +var methods = {}; + +function $override(name, fn) { + // Clear ctx instance for different environment + if (name === 'createCanvas') { + _ctx = null; + } + + methods[name] = fn; +} + +/** + * Those data types can be cloned: + * Plain object, Array, TypedArray, number, string, null, undefined. + * Those data types will be assgined using the orginal data: + * BUILTIN_OBJECT + * Instance of user defined class will be cloned to a plain object, without + * properties in prototype. + * Other data types is not supported (not sure what will happen). + * + * Caution: do not support clone Date, for performance consideration. + * (There might be a large number of date in `series.data`). + * So date should not be modified in and out of echarts. + * + * @param {*} source + * @return {*} new + */ +function clone(source) { + if (source == null || typeof source != 'object') { + return source; + } + + var result = source; + var typeStr = objToString.call(source); + + if (typeStr === '[object Array]') { + if (!isPrimitive(source)) { + result = []; + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + } + else if (TYPED_ARRAY[typeStr]) { + if (!isPrimitive(source)) { + var Ctor = source.constructor; + if (source.constructor.from) { + result = Ctor.from(source); + } + else { + result = new Ctor(source.length); + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + } + } + else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) { + result = {}; + for (var key in source) { + if (source.hasOwnProperty(key)) { + result[key] = clone(source[key]); + } + } + } + + return result; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} target + * @param {*} source + * @param {boolean} [overwrite=false] + */ +function merge(target, source, overwrite) { + // We should escapse that source is string + // and enter for ... in ... + if (!isObject$1(source) || !isObject$1(target)) { + return overwrite ? clone(source) : target; + } + + for (var key in source) { + if (source.hasOwnProperty(key)) { + var targetProp = target[key]; + var sourceProp = source[key]; + + if (isObject$1(sourceProp) + && isObject$1(targetProp) + && !isArray(sourceProp) + && !isArray(targetProp) + && !isDom(sourceProp) + && !isDom(targetProp) + && !isBuiltInObject(sourceProp) + && !isBuiltInObject(targetProp) + && !isPrimitive(sourceProp) + && !isPrimitive(targetProp) + ) { + // 如果需要递归覆盖,就递归调用merge + merge(targetProp, sourceProp, overwrite); + } + else if (overwrite || !(key in target)) { + // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况 + // NOTE,在 target[key] 不存在的时候也是直接覆盖 + target[key] = clone(source[key], true); + } + } + } + + return target; +} + +/** + * @param {Array} targetAndSources The first item is target, and the rests are source. + * @param {boolean} [overwrite=false] + * @return {*} target + */ +function mergeAll(targetAndSources, overwrite) { + var result = targetAndSources[0]; + for (var i = 1, len = targetAndSources.length; i < len; i++) { + result = merge(result, targetAndSources[i], overwrite); + } + return result; +} + +/** + * @param {*} target + * @param {*} source + * @memberOf module:zrender/core/util + */ +function extend(target, source) { + for (var key in source) { + if (source.hasOwnProperty(key)) { + target[key] = source[key]; + } + } + return target; +} + +/** + * @param {*} target + * @param {*} source + * @param {boolean} [overlay=false] + * @memberOf module:zrender/core/util + */ +function defaults(target, source, overlay) { + for (var key in source) { + if (source.hasOwnProperty(key) + && (overlay ? source[key] != null : target[key] == null) + ) { + target[key] = source[key]; + } + } + return target; +} + +var createCanvas = function () { + return methods.createCanvas(); +}; + +methods.createCanvas = function () { + return document.createElement('canvas'); +}; + +// FIXME +var _ctx; + +function getContext() { + if (!_ctx) { + // Use util.createCanvas instead of createCanvas + // because createCanvas may be overwritten in different environment + _ctx = createCanvas().getContext('2d'); + } + return _ctx; +} + +/** + * 查询数组中元素的index + * @memberOf module:zrender/core/util + */ +function indexOf(array, value) { + if (array) { + if (array.indexOf) { + return array.indexOf(value); + } + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + } + return -1; +} + +/** + * 构造类继承关系 + * + * @memberOf module:zrender/core/util + * @param {Function} clazz 源类 + * @param {Function} baseClazz 基类 + */ +function inherits(clazz, baseClazz) { + var clazzPrototype = clazz.prototype; + function F() {} + F.prototype = baseClazz.prototype; + clazz.prototype = new F(); + + for (var prop in clazzPrototype) { + clazz.prototype[prop] = clazzPrototype[prop]; + } + clazz.prototype.constructor = clazz; + clazz.superClass = baseClazz; +} + +/** + * @memberOf module:zrender/core/util + * @param {Object|Function} target + * @param {Object|Function} sorce + * @param {boolean} overlay + */ +function mixin(target, source, overlay) { + target = 'prototype' in target ? target.prototype : target; + source = 'prototype' in source ? source.prototype : source; + + defaults(target, source, overlay); +} + +/** + * Consider typed array. + * @param {Array|TypedArray} data + */ +function isArrayLike(data) { + if (! data) { + return; + } + if (typeof data == 'string') { + return false; + } + return typeof data.length == 'number'; +} + +/** + * 数组或对象遍历 + * @memberOf module:zrender/core/util + * @param {Object|Array} obj + * @param {Function} cb + * @param {*} [context] + */ +function each$1(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.forEach && obj.forEach === nativeForEach) { + obj.forEach(cb, context); + } + else if (obj.length === +obj.length) { + for (var i = 0, len = obj.length; i < len; i++) { + cb.call(context, obj[i], i, obj); + } + } + else { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + cb.call(context, obj[key], key, obj); + } + } + } +} + +/** + * 数组映射 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {Array} + */ +function map(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.map && obj.map === nativeMap) { + return obj.map(cb, context); + } + else { + var result = []; + for (var i = 0, len = obj.length; i < len; i++) { + result.push(cb.call(context, obj[i], i, obj)); + } + return result; + } +} + +/** + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {Object} [memo] + * @param {*} [context] + * @return {Array} + */ +function reduce(obj, cb, memo, context) { + if (!(obj && cb)) { + return; + } + if (obj.reduce && obj.reduce === nativeReduce) { + return obj.reduce(cb, memo, context); + } + else { + for (var i = 0, len = obj.length; i < len; i++) { + memo = cb.call(context, memo, obj[i], i, obj); + } + return memo; + } +} + +/** + * 数组过滤 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {Array} + */ +function filter(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.filter && obj.filter === nativeFilter) { + return obj.filter(cb, context); + } + else { + var result = []; + for (var i = 0, len = obj.length; i < len; i++) { + if (cb.call(context, obj[i], i, obj)) { + result.push(obj[i]); + } + } + return result; + } +} + +/** + * 数组项查找 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {*} + */ +function find(obj, cb, context) { + if (!(obj && cb)) { + return; + } + for (var i = 0, len = obj.length; i < len; i++) { + if (cb.call(context, obj[i], i, obj)) { + return obj[i]; + } + } +} + +/** + * @memberOf module:zrender/core/util + * @param {Function} func + * @param {*} context + * @return {Function} + */ +function bind(func, context) { + var args = nativeSlice.call(arguments, 2); + return function () { + return func.apply(context, args.concat(nativeSlice.call(arguments))); + }; +} + +/** + * @memberOf module:zrender/core/util + * @param {Function} func + * @return {Function} + */ +function curry(func) { + var args = nativeSlice.call(arguments, 1); + return function () { + return func.apply(this, args.concat(nativeSlice.call(arguments))); + }; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isArray(value) { + return objToString.call(value) === '[object Array]'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isFunction$1(value) { + return typeof value === 'function'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isString(value) { + return objToString.call(value) === '[object String]'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isObject$1(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return type === 'function' || (!!value && type == 'object'); +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isBuiltInObject(value) { + return !!BUILTIN_OBJECT[objToString.call(value)]; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isTypedArray(value) { + return !!TYPED_ARRAY[objToString.call(value)]; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isDom(value) { + return typeof value === 'object' + && typeof value.nodeType === 'number' + && typeof value.ownerDocument === 'object'; +} + +/** + * Whether is exactly NaN. Notice isNaN('a') returns true. + * @param {*} value + * @return {boolean} + */ +function eqNaN(value) { + return value !== value; +} + +/** + * If value1 is not null, then return value1, otherwise judget rest of values. + * Low performance. + * @memberOf module:zrender/core/util + * @return {*} Final value + */ +function retrieve(values) { + for (var i = 0, len = arguments.length; i < len; i++) { + if (arguments[i] != null) { + return arguments[i]; + } + } +} + +function retrieve2(value0, value1) { + return value0 != null + ? value0 + : value1; +} + +function retrieve3(value0, value1, value2) { + return value0 != null + ? value0 + : value1 != null + ? value1 + : value2; +} + +/** + * @memberOf module:zrender/core/util + * @param {Array} arr + * @param {number} startIndex + * @param {number} endIndex + * @return {Array} + */ +function slice() { + return Function.call.apply(nativeSlice, arguments); +} + +/** + * Normalize css liked array configuration + * e.g. + * 3 => [3, 3, 3, 3] + * [4, 2] => [4, 2, 4, 2] + * [4, 3, 2] => [4, 3, 2, 3] + * @param {number|Array.} val + * @return {Array.} + */ +function normalizeCssArray(val) { + if (typeof (val) === 'number') { + return [val, val, val, val]; + } + var len = val.length; + if (len === 2) { + // vertical | horizontal + return [val[0], val[1], val[0], val[1]]; + } + else if (len === 3) { + // top | horizontal | bottom + return [val[0], val[1], val[2], val[1]]; + } + return val; +} + +/** + * @memberOf module:zrender/core/util + * @param {boolean} condition + * @param {string} message + */ +function assert$1(condition, message) { + if (!condition) { + throw new Error(message); + } +} + +/** + * @memberOf module:zrender/core/util + * @param {string} str string to be trimed + * @return {string} trimed string + */ +function trim(str) { + if (str == null) { + return null; + } + else if (typeof str.trim === 'function') { + return str.trim(); + } + else { + return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } +} + +var primitiveKey = '__ec_primitive__'; +/** + * Set an object as primitive to be ignored traversing children in clone or merge + */ +function setAsPrimitive(obj) { + obj[primitiveKey] = true; +} + +function isPrimitive(obj) { + return obj[primitiveKey]; +} + +/** + * @constructor + * @param {Object} obj Only apply `ownProperty`. + */ +function HashMap(obj) { + var isArr = isArray(obj); + // Key should not be set on this, otherwise + // methods get/set/... may be overrided. + this.data = {}; + var thisMap = this; + + (obj instanceof HashMap) + ? obj.each(visit) + : (obj && each$1(obj, visit)); + + function visit(value, key) { + isArr ? thisMap.set(value, key) : thisMap.set(key, value); + } +} + +HashMap.prototype = { + constructor: HashMap, + // Do not provide `has` method to avoid defining what is `has`. + // (We usually treat `null` and `undefined` as the same, different + // from ES6 Map). + get: function (key) { + return this.data.hasOwnProperty(key) ? this.data[key] : null; + }, + set: function (key, value) { + // Comparing with invocation chaining, `return value` is more commonly + // used in this case: `var someVal = map.set('a', genVal());` + return (this.data[key] = value); + }, + // Although util.each can be performed on this hashMap directly, user + // should not use the exposed keys, who are prefixed. + each: function (cb, context) { + context !== void 0 && (cb = bind(cb, context)); + for (var key in this.data) { + this.data.hasOwnProperty(key) && cb(this.data[key], key); + } + }, + // Do not use this method if performance sensitive. + removeKey: function (key) { + delete this.data[key]; + } +}; + +function createHashMap(obj) { + return new HashMap(obj); +} + +function concatArray(a, b) { + var newArray = new a.constructor(a.length + b.length); + for (var i = 0; i < a.length; i++) { + newArray[i] = a[i]; + } + var offset = a.length; + for (i = 0; i < b.length; i++) { + newArray[i + offset] = b[i]; + } + return newArray; +} + + +function noop() {} + + +var zrUtil = (Object.freeze || Object)({ + $override: $override, + clone: clone, + merge: merge, + mergeAll: mergeAll, + extend: extend, + defaults: defaults, + createCanvas: createCanvas, + getContext: getContext, + indexOf: indexOf, + inherits: inherits, + mixin: mixin, + isArrayLike: isArrayLike, + each: each$1, + map: map, + reduce: reduce, + filter: filter, + find: find, + bind: bind, + curry: curry, + isArray: isArray, + isFunction: isFunction$1, + isString: isString, + isObject: isObject$1, + isBuiltInObject: isBuiltInObject, + isTypedArray: isTypedArray, + isDom: isDom, + eqNaN: eqNaN, + retrieve: retrieve, + retrieve2: retrieve2, + retrieve3: retrieve3, + slice: slice, + normalizeCssArray: normalizeCssArray, + assert: assert$1, + trim: trim, + setAsPrimitive: setAsPrimitive, + isPrimitive: isPrimitive, + createHashMap: createHashMap, + concatArray: concatArray, + noop: noop +}); + +var ArrayCtor = typeof Float32Array === 'undefined' + ? Array + : Float32Array; + +/** + * 创建一个向量 + * @param {number} [x=0] + * @param {number} [y=0] + * @return {Vector2} + */ +function create(x, y) { + var out = new ArrayCtor(2); + if (x == null) { + x = 0; + } + if (y == null) { + y = 0; + } + out[0] = x; + out[1] = y; + return out; +} + +/** + * 复制向量数据 + * @param {Vector2} out + * @param {Vector2} v + * @return {Vector2} + */ +function copy(out, v) { + out[0] = v[0]; + out[1] = v[1]; + return out; +} + +/** + * 克隆一个向量 + * @param {Vector2} v + * @return {Vector2} + */ +function clone$1(v) { + var out = new ArrayCtor(2); + out[0] = v[0]; + out[1] = v[1]; + return out; +} + +/** + * 设置向量的两个项 + * @param {Vector2} out + * @param {number} a + * @param {number} b + * @return {Vector2} 结果 + */ +function set(out, a, b) { + out[0] = a; + out[1] = b; + return out; +} + +/** + * 向量相加 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function add(out, v1, v2) { + out[0] = v1[0] + v2[0]; + out[1] = v1[1] + v2[1]; + return out; +} + +/** + * 向量缩放后相加 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + * @param {number} a + */ +function scaleAndAdd(out, v1, v2, a) { + out[0] = v1[0] + v2[0] * a; + out[1] = v1[1] + v2[1] * a; + return out; +} + +/** + * 向量相减 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function sub(out, v1, v2) { + out[0] = v1[0] - v2[0]; + out[1] = v1[1] - v2[1]; + return out; +} + +/** + * 向量长度 + * @param {Vector2} v + * @return {number} + */ +function len(v) { + return Math.sqrt(lenSquare(v)); +} +var length = len; // jshint ignore:line + +/** + * 向量长度平方 + * @param {Vector2} v + * @return {number} + */ +function lenSquare(v) { + return v[0] * v[0] + v[1] * v[1]; +} +var lengthSquare = lenSquare; + +/** + * 向量乘法 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function mul(out, v1, v2) { + out[0] = v1[0] * v2[0]; + out[1] = v1[1] * v2[1]; + return out; +} + +/** + * 向量除法 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function div(out, v1, v2) { + out[0] = v1[0] / v2[0]; + out[1] = v1[1] / v2[1]; + return out; +} + +/** + * 向量点乘 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function dot(v1, v2) { + return v1[0] * v2[0] + v1[1] * v2[1]; +} + +/** + * 向量缩放 + * @param {Vector2} out + * @param {Vector2} v + * @param {number} s + */ +function scale(out, v, s) { + out[0] = v[0] * s; + out[1] = v[1] * s; + return out; +} + +/** + * 向量归一化 + * @param {Vector2} out + * @param {Vector2} v + */ +function normalize(out, v) { + var d = len(v); + if (d === 0) { + out[0] = 0; + out[1] = 0; + } + else { + out[0] = v[0] / d; + out[1] = v[1] / d; + } + return out; +} + +/** + * 计算向量间距离 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function distance(v1, v2) { + return Math.sqrt( + (v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1]) + ); +} +var dist = distance; + +/** + * 向量距离平方 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function distanceSquare(v1, v2) { + return (v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1]); +} +var distSquare = distanceSquare; + +/** + * 求负向量 + * @param {Vector2} out + * @param {Vector2} v + */ +function negate(out, v) { + out[0] = -v[0]; + out[1] = -v[1]; + return out; +} + +/** + * 插值两个点 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + * @param {number} t + */ +function lerp(out, v1, v2, t) { + out[0] = v1[0] + t * (v2[0] - v1[0]); + out[1] = v1[1] + t * (v2[1] - v1[1]); + return out; +} + +/** + * 矩阵左乘向量 + * @param {Vector2} out + * @param {Vector2} v + * @param {Vector2} m + */ +function applyTransform(out, v, m) { + var x = v[0]; + var y = v[1]; + out[0] = m[0] * x + m[2] * y + m[4]; + out[1] = m[1] * x + m[3] * y + m[5]; + return out; +} + +/** + * 求两个向量最小值 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function min(out, v1, v2) { + out[0] = Math.min(v1[0], v2[0]); + out[1] = Math.min(v1[1], v2[1]); + return out; +} + +/** + * 求两个向量最大值 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function max(out, v1, v2) { + out[0] = Math.max(v1[0], v2[0]); + out[1] = Math.max(v1[1], v2[1]); + return out; +} + + +var vector = (Object.freeze || Object)({ + create: create, + copy: copy, + clone: clone$1, + set: set, + add: add, + scaleAndAdd: scaleAndAdd, + sub: sub, + len: len, + length: length, + lenSquare: lenSquare, + lengthSquare: lengthSquare, + mul: mul, + div: div, + dot: dot, + scale: scale, + normalize: normalize, + distance: distance, + dist: dist, + distanceSquare: distanceSquare, + distSquare: distSquare, + negate: negate, + lerp: lerp, + applyTransform: applyTransform, + min: min, + max: max +}); + +// TODO Draggable for group +// FIXME Draggable on element which has parent rotation or scale +function Draggable() { + + this.on('mousedown', this._dragStart, this); + this.on('mousemove', this._drag, this); + this.on('mouseup', this._dragEnd, this); + this.on('globalout', this._dragEnd, this); + // this._dropTarget = null; + // this._draggingTarget = null; + + // this._x = 0; + // this._y = 0; +} + +Draggable.prototype = { + + constructor: Draggable, + + _dragStart: function (e) { + var draggingTarget = e.target; + if (draggingTarget && draggingTarget.draggable) { + this._draggingTarget = draggingTarget; + draggingTarget.dragging = true; + this._x = e.offsetX; + this._y = e.offsetY; + + this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event); + } + }, + + _drag: function (e) { + var draggingTarget = this._draggingTarget; + if (draggingTarget) { + + var x = e.offsetX; + var y = e.offsetY; + + var dx = x - this._x; + var dy = y - this._y; + this._x = x; + this._y = y; + + draggingTarget.drift(dx, dy, e); + this.dispatchToElement(param(draggingTarget, e), 'drag', e.event); + + var dropTarget = this.findHover(x, y, draggingTarget).target; + var lastDropTarget = this._dropTarget; + this._dropTarget = dropTarget; + + if (draggingTarget !== dropTarget) { + if (lastDropTarget && dropTarget !== lastDropTarget) { + this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event); + } + if (dropTarget && dropTarget !== lastDropTarget) { + this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event); + } + } + } + }, + + _dragEnd: function (e) { + var draggingTarget = this._draggingTarget; + + if (draggingTarget) { + draggingTarget.dragging = false; + } + + this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event); + + if (this._dropTarget) { + this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event); + } + + this._draggingTarget = null; + this._dropTarget = null; + } + +}; + +function param(target, e) { + return {target: target, topTarget: e && e.topTarget}; +} + +/** + * Event Mixin + * @module zrender/mixin/Eventful + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + * pissang (https://www.github.com/pissang) + */ + +var arrySlice = Array.prototype.slice; + +/** + * Event dispatcher. + * + * @alias module:zrender/mixin/Eventful + * @constructor + * @param {Object} [eventProcessor] The object eventProcessor is the scope when + * `eventProcessor.xxx` called. + * @param {Function} [eventProcessor.normalizeQuery] + * param: {string|Object} Raw query. + * return: {string|Object} Normalized query. + * @param {Function} [eventProcessor.filter] Event will be dispatched only + * if it returns `true`. + * param: {string} eventType + * param: {string|Object} query + * return: {boolean} + * @param {Function} [eventProcessor.afterTrigger] Call after all handlers called. + * param: {string} eventType + */ +var Eventful = function (eventProcessor) { + this._$handlers = {}; + this._$eventProcessor = eventProcessor; +}; + +Eventful.prototype = { + + constructor: Eventful, + + /** + * The handler can only be triggered once, then removed. + * + * @param {string} event The event name. + * @param {string|Object} [query] Condition used on event filter. + * @param {Function} handler The event handler. + * @param {Object} context + */ + one: function (event, query, handler, context) { + var _h = this._$handlers; + + if (typeof query === 'function') { + context = handler; + handler = query; + query = null; + } + + if (!handler || !event) { + return this; + } + + query = normalizeQuery(this, query); + + if (!_h[event]) { + _h[event] = []; + } + + for (var i = 0; i < _h[event].length; i++) { + if (_h[event][i].h === handler) { + return this; + } + } + + _h[event].push({ + h: handler, + one: true, + query: query, + ctx: context || this + }); + + return this; + }, + + /** + * Bind a handler. + * + * @param {string} event The event name. + * @param {string|Object} [query] Condition used on event filter. + * @param {Function} handler The event handler. + * @param {Object} [context] + */ + on: function (event, query, handler, context) { + var _h = this._$handlers; + + if (typeof query === 'function') { + context = handler; + handler = query; + query = null; + } + + if (!handler || !event) { + return this; + } + + query = normalizeQuery(this, query); + + if (!_h[event]) { + _h[event] = []; + } + + for (var i = 0; i < _h[event].length; i++) { + if (_h[event][i].h === handler) { + return this; + } + } + + _h[event].push({ + h: handler, + one: false, + query: query, + ctx: context || this + }); + + return this; + }, + + /** + * Whether any handler has bound. + * + * @param {string} event + * @return {boolean} + */ + isSilent: function (event) { + var _h = this._$handlers; + return _h[event] && _h[event].length; + }, + + /** + * Unbind a event. + * + * @param {string} event The event name. + * @param {Function} [handler] The event handler. + */ + off: function (event, handler) { + var _h = this._$handlers; + + if (!event) { + this._$handlers = {}; + return this; + } + + if (handler) { + if (_h[event]) { + var newList = []; + for (var i = 0, l = _h[event].length; i < l; i++) { + if (_h[event][i].h !== handler) { + newList.push(_h[event][i]); + } + } + _h[event] = newList; + } + + if (_h[event] && _h[event].length === 0) { + delete _h[event]; + } + } + else { + delete _h[event]; + } + + return this; + }, + + /** + * Dispatch a event. + * + * @param {string} type The event name. + */ + trigger: function (type) { + var _h = this._$handlers[type]; + var eventProcessor = this._$eventProcessor; + + if (_h) { + var args = arguments; + var argLen = args.length; + + if (argLen > 3) { + args = arrySlice.call(args, 1); + } + + var len = _h.length; + for (var i = 0; i < len;) { + var hItem = _h[i]; + if (eventProcessor + && eventProcessor.filter + && hItem.query != null + && !eventProcessor.filter(type, hItem.query) + ) { + i++; + continue; + } + + // Optimize advise from backbone + switch (argLen) { + case 1: + hItem.h.call(hItem.ctx); + break; + case 2: + hItem.h.call(hItem.ctx, args[1]); + break; + case 3: + hItem.h.call(hItem.ctx, args[1], args[2]); + break; + default: + // have more than 2 given arguments + hItem.h.apply(hItem.ctx, args); + break; + } + + if (hItem.one) { + _h.splice(i, 1); + len--; + } + else { + i++; + } + } + } + + eventProcessor && eventProcessor.afterTrigger + && eventProcessor.afterTrigger(type); + + return this; + }, + + /** + * Dispatch a event with context, which is specified at the last parameter. + * + * @param {string} type The event name. + */ + triggerWithContext: function (type) { + var _h = this._$handlers[type]; + var eventProcessor = this._$eventProcessor; + + if (_h) { + var args = arguments; + var argLen = args.length; + + if (argLen > 4) { + args = arrySlice.call(args, 1, args.length - 1); + } + var ctx = args[args.length - 1]; + + var len = _h.length; + for (var i = 0; i < len;) { + var hItem = _h[i]; + if (eventProcessor + && eventProcessor.filter + && hItem.query != null + && !eventProcessor.filter(type, hItem.query) + ) { + i++; + continue; + } + + // Optimize advise from backbone + switch (argLen) { + case 1: + hItem.h.call(ctx); + break; + case 2: + hItem.h.call(ctx, args[1]); + break; + case 3: + hItem.h.call(ctx, args[1], args[2]); + break; + default: + // have more than 2 given arguments + hItem.h.apply(ctx, args); + break; + } + + if (hItem.one) { + _h.splice(i, 1); + len--; + } + else { + i++; + } + } + } + + eventProcessor && eventProcessor.afterTrigger + && eventProcessor.afterTrigger(type); + + return this; + } +}; + +function normalizeQuery(host, query) { + var eventProcessor = host._$eventProcessor; + if (query != null && eventProcessor && eventProcessor.normalizeQuery) { + query = eventProcessor.normalizeQuery(query); + } + return query; +} + +/** + * 事件辅助类 + * @module zrender/core/event + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + */ + +var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener; + +var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/; + +function getBoundingClientRect(el) { + // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect + return el.getBoundingClientRect ? el.getBoundingClientRect() : {left: 0, top: 0}; +} + +// `calculate` is optional, default false +function clientToLocal(el, e, out, calculate) { + out = out || {}; + + // According to the W3C Working Draft, offsetX and offsetY should be relative + // to the padding edge of the target element. The only browser using this convention + // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does + // not support the properties. + // (see http://www.jacklmoore.com/notes/mouse-position/) + // In zr painter.dom, padding edge equals to border edge. + + // FIXME + // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and + // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y + // is too complex. So css-transfrom dont support in this case temporarily. + if (calculate || !env$1.canvasSupported) { + defaultGetZrXY(el, e, out); + } + // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned + // ancestor element, so we should make sure el is positioned (e.g., not position:static). + // BTW1, Webkit don't return the same results as FF in non-simple cases (like add + // zoom-factor, overflow / opacity layers, transforms ...) + // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d. + // + // BTW3, In ff, offsetX/offsetY is always 0. + else if (env$1.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) { + out.zrX = e.layerX; + out.zrY = e.layerY; + } + // For IE6+, chrome, safari, opera. (When will ff support offsetX?) + else if (e.offsetX != null) { + out.zrX = e.offsetX; + out.zrY = e.offsetY; + } + // For some other device, e.g., IOS safari. + else { + defaultGetZrXY(el, e, out); + } + + return out; +} + +function defaultGetZrXY(el, e, out) { + // This well-known method below does not support css transform. + var box = getBoundingClientRect(el); + out.zrX = e.clientX - box.left; + out.zrY = e.clientY - box.top; +} + +/** + * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标. + * `calculate` is optional, default false. + */ +function normalizeEvent(el, e, calculate) { + + e = e || window.event; + + if (e.zrX != null) { + return e; + } + + var eventType = e.type; + var isTouch = eventType && eventType.indexOf('touch') >= 0; + + if (!isTouch) { + clientToLocal(el, e, e, calculate); + e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3; + } + else { + var touch = eventType != 'touchend' + ? e.targetTouches[0] + : e.changedTouches[0]; + touch && clientToLocal(el, touch, e, calculate); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0; + // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js + // If e.which has been defined, if may be readonly, + // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which + var button = e.button; + if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) { + e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0))); + } + + return e; +} + +/** + * @param {HTMLElement} el + * @param {string} name + * @param {Function} handler + */ +function addEventListener(el, name, handler) { + if (isDomLevel2) { + // Reproduct the console warning: + // [Violation] Added non-passive event listener to a scroll-blocking event. + // Consider marking event handler as 'passive' to make the page more responsive. + // Just set console log level: verbose in chrome dev tool. + // then the warning log will be printed when addEventListener called. + // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md + // We have not yet found a neat way to using passive. Because in zrender the dom event + // listener delegate all of the upper events of element. Some of those events need + // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts. + // Before passive can be adopted, these issues should be considered: + // (1) Whether and how a zrender user specifies an event listener passive. And by default, + // passive or not. + // (2) How to tread that some zrender event listener is passive, and some is not. If + // we use other way but not preventDefault of mousewheel and touchmove, browser + // compatibility should be handled. + + // var opts = (env.passiveSupported && name === 'mousewheel') + // ? {passive: true} + // // By default, the third param of el.addEventListener is `capture: false`. + // : void 0; + // el.addEventListener(name, handler /* , opts */); + el.addEventListener(name, handler); + } + else { + el.attachEvent('on' + name, handler); + } +} + +function removeEventListener(el, name, handler) { + if (isDomLevel2) { + el.removeEventListener(name, handler); + } + else { + el.detachEvent('on' + name, handler); + } +} + +/** + * preventDefault and stopPropagation. + * Notice: do not do that in zrender. Upper application + * do that if necessary. + * + * @memberOf module:zrender/core/event + * @method + * @param {Event} e : event对象 + */ +var stop = isDomLevel2 + ? function (e) { + e.preventDefault(); + e.stopPropagation(); + e.cancelBubble = true; + } + : function (e) { + e.returnValue = false; + e.cancelBubble = true; + }; + +function notLeftMouse(e) { + // If e.which is undefined, considered as left mouse event. + return e.which > 1; +} + +var SILENT = 'silent'; + +function makeEventPacket(eveType, targetInfo, event) { + return { + type: eveType, + event: event, + // target can only be an element that is not silent. + target: targetInfo.target, + // topTarget can be a silent element. + topTarget: targetInfo.topTarget, + cancelBubble: false, + offsetX: event.zrX, + offsetY: event.zrY, + gestureEvent: event.gestureEvent, + pinchX: event.pinchX, + pinchY: event.pinchY, + pinchScale: event.pinchScale, + wheelDelta: event.zrDelta, + zrByTouch: event.zrByTouch, + which: event.which, + stop: stopEvent + }; +} + +function stopEvent(event) { + stop(this.event); +} + +function EmptyProxy () {} +EmptyProxy.prototype.dispose = function () {}; + +var handlerNames = [ + 'click', 'dblclick', 'mousewheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' +]; +/** + * @alias module:zrender/Handler + * @constructor + * @extends module:zrender/mixin/Eventful + * @param {module:zrender/Storage} storage Storage instance. + * @param {module:zrender/Painter} painter Painter instance. + * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance. + * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()). + */ +var Handler = function(storage, painter, proxy, painterRoot) { + Eventful.call(this); + + this.storage = storage; + + this.painter = painter; + + this.painterRoot = painterRoot; + + proxy = proxy || new EmptyProxy(); + + /** + * Proxy of event. can be Dom, WebGLSurface, etc. + */ + this.proxy = null; + + /** + * {target, topTarget, x, y} + * @private + * @type {Object} + */ + this._hovered = {}; + + /** + * @private + * @type {Date} + */ + this._lastTouchMoment; + + /** + * @private + * @type {number} + */ + this._lastX; + + /** + * @private + * @type {number} + */ + this._lastY; + + + Draggable.call(this); + + this.setHandlerProxy(proxy); +}; + +Handler.prototype = { + + constructor: Handler, + + setHandlerProxy: function (proxy) { + if (this.proxy) { + this.proxy.dispose(); + } + + if (proxy) { + each$1(handlerNames, function (name) { + proxy.on && proxy.on(name, this[name], this); + }, this); + // Attach handler + proxy.handler = this; + } + this.proxy = proxy; + }, + + mousemove: function (event) { + var x = event.zrX; + var y = event.zrY; + + var lastHovered = this._hovered; + var lastHoveredTarget = lastHovered.target; + + // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call + // (like 'setOption' or 'dispatchAction') in event handlers, we should find + // lastHovered again here. Otherwise 'mouseout' can not be triggered normally. + // See #6198. + if (lastHoveredTarget && !lastHoveredTarget.__zr) { + lastHovered = this.findHover(lastHovered.x, lastHovered.y); + lastHoveredTarget = lastHovered.target; + } + + var hovered = this._hovered = this.findHover(x, y); + var hoveredTarget = hovered.target; + + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); + + // Mouse out on previous hovered element + if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(lastHovered, 'mouseout', event); + } + + // Mouse moving on one element + this.dispatchToElement(hovered, 'mousemove', event); + + // Mouse over on a new element + if (hoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(hovered, 'mouseover', event); + } + }, + + mouseout: function (event) { + this.dispatchToElement(this._hovered, 'mouseout', event); + + // There might be some doms created by upper layer application + // at the same level of painter.getViewportRoot() (e.g., tooltip + // dom created by echarts), where 'globalout' event should not + // be triggered when mouse enters these doms. (But 'mouseout' + // should be triggered at the original hovered element as usual). + var element = event.toElement || event.relatedTarget; + var innerDom; + do { + element = element && element.parentNode; + } + while (element && element.nodeType != 9 && !( + innerDom = element === this.painterRoot + )); + + !innerDom && this.trigger('globalout', {event: event}); + }, + + /** + * Resize + */ + resize: function (event) { + this._hovered = {}; + }, + + /** + * Dispatch event + * @param {string} eventName + * @param {event=} eventArgs + */ + dispatch: function (eventName, eventArgs) { + var handler = this[eventName]; + handler && handler.call(this, eventArgs); + }, + + /** + * Dispose + */ + dispose: function () { + + this.proxy.dispose(); + + this.storage = + this.proxy = + this.painter = null; + }, + + /** + * 设置默认的cursor style + * @param {string} [cursorStyle='default'] 例如 crosshair + */ + setCursorStyle: function (cursorStyle) { + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(cursorStyle); + }, + + /** + * 事件分发代理 + * + * @private + * @param {Object} targetInfo {target, topTarget} 目标图形元素 + * @param {string} eventName 事件名称 + * @param {Object} event 事件对象 + */ + dispatchToElement: function (targetInfo, eventName, event) { + targetInfo = targetInfo || {}; + var el = targetInfo.target; + if (el && el.silent) { + return; + } + var eventHandler = 'on' + eventName; + var eventPacket = makeEventPacket(eventName, targetInfo, event); + + while (el) { + el[eventHandler] + && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket)); + + el.trigger(eventName, eventPacket); + + el = el.parent; + + if (eventPacket.cancelBubble) { + break; + } + } + + if (!eventPacket.cancelBubble) { + // 冒泡到顶级 zrender 对象 + this.trigger(eventName, eventPacket); + // 分发事件到用户自定义层 + // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在 + this.painter && this.painter.eachOtherLayer(function (layer) { + if (typeof(layer[eventHandler]) == 'function') { + layer[eventHandler].call(layer, eventPacket); + } + if (layer.trigger) { + layer.trigger(eventName, eventPacket); + } + }); + } + }, + + /** + * @private + * @param {number} x + * @param {number} y + * @param {module:zrender/graphic/Displayable} exclude + * @return {model:zrender/Element} + * @method + */ + findHover: function(x, y, exclude) { + var list = this.storage.getDisplayList(); + var out = {x: x, y: y}; + + for (var i = list.length - 1; i >= 0 ; i--) { + var hoverCheckResult; + if (list[i] !== exclude + // getDisplayList may include ignored item in VML mode + && !list[i].ignore + && (hoverCheckResult = isHover(list[i], x, y)) + ) { + !out.topTarget && (out.topTarget = list[i]); + if (hoverCheckResult !== SILENT) { + out.target = list[i]; + break; + } + } + } + + return out; + } +}; + +// Common handlers +each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { + Handler.prototype[name] = function (event) { + // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover + var hovered = this.findHover(event.zrX, event.zrY); + var hoveredTarget = hovered.target; + + if (name === 'mousedown') { + this._downEl = hoveredTarget; + this._downPoint = [event.zrX, event.zrY]; + // In case click triggered before mouseup + this._upEl = hoveredTarget; + } + else if (name === 'mouseup') { + this._upEl = hoveredTarget; + } + else if (name === 'click') { + if (this._downEl !== this._upEl + // Original click event is triggered on the whole canvas element, + // including the case that `mousedown` - `mousemove` - `mouseup`, + // which should be filtered, otherwise it will bring trouble to + // pan and zoom. + || !this._downPoint + // Arbitrary value + || dist(this._downPoint, [event.zrX, event.zrY]) > 4 + ) { + return; + } + this._downPoint = null; + } + + this.dispatchToElement(hovered, name, event); + }; +}); + +function isHover(displayable, x, y) { + if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) { + var el = displayable; + var isSilent; + while (el) { + // If clipped by ancestor. + // FIXME: If clipPath has neither stroke nor fill, + // el.clipPath.contain(x, y) will always return false. + if (el.clipPath && !el.clipPath.contain(x, y)) { + return false; + } + if (el.silent) { + isSilent = true; + } + el = el.parent; + } + return isSilent ? SILENT : true; + } + + return false; +} + +mixin(Handler, Eventful); +mixin(Handler, Draggable); + +/** + * 3x2矩阵操作类 + * @exports zrender/tool/matrix + */ + +var ArrayCtor$1 = typeof Float32Array === 'undefined' + ? Array + : Float32Array; + +/** + * Create a identity matrix. + * @return {Float32Array|Array.} + */ +function create$1() { + var out = new ArrayCtor$1(6); + identity(out); + + return out; +} + +/** + * 设置矩阵为单位矩阵 + * @param {Float32Array|Array.} out + */ +function identity(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + out[4] = 0; + out[5] = 0; + return out; +} + +/** + * 复制矩阵 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} m + */ +function copy$1(out, m) { + out[0] = m[0]; + out[1] = m[1]; + out[2] = m[2]; + out[3] = m[3]; + out[4] = m[4]; + out[5] = m[5]; + return out; +} + +/** + * 矩阵相乘 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} m1 + * @param {Float32Array|Array.} m2 + */ +function mul$1(out, m1, m2) { + // Consider matrix.mul(m, m2, m); + // where out is the same as m2. + // So use temp variable to escape error. + var out0 = m1[0] * m2[0] + m1[2] * m2[1]; + var out1 = m1[1] * m2[0] + m1[3] * m2[1]; + var out2 = m1[0] * m2[2] + m1[2] * m2[3]; + var out3 = m1[1] * m2[2] + m1[3] * m2[3]; + var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4]; + var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5]; + out[0] = out0; + out[1] = out1; + out[2] = out2; + out[3] = out3; + out[4] = out4; + out[5] = out5; + return out; +} + +/** + * 平移变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {Float32Array|Array.} v + */ +function translate(out, a, v) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4] + v[0]; + out[5] = a[5] + v[1]; + return out; +} + +/** + * 旋转变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {number} rad + */ +function rotate(out, a, rad) { + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + var st = Math.sin(rad); + var ct = Math.cos(rad); + + out[0] = aa * ct + ab * st; + out[1] = -aa * st + ab * ct; + out[2] = ac * ct + ad * st; + out[3] = -ac * st + ct * ad; + out[4] = ct * atx + st * aty; + out[5] = ct * aty - st * atx; + return out; +} + +/** + * 缩放变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {Float32Array|Array.} v + */ +function scale$1(out, a, v) { + var vx = v[0]; + var vy = v[1]; + out[0] = a[0] * vx; + out[1] = a[1] * vy; + out[2] = a[2] * vx; + out[3] = a[3] * vy; + out[4] = a[4] * vx; + out[5] = a[5] * vy; + return out; +} + +/** + * 求逆矩阵 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + */ +function invert(out, a) { + + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + + var det = aa * ad - ab * ac; + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = ad * det; + out[1] = -ab * det; + out[2] = -ac * det; + out[3] = aa * det; + out[4] = (ac * aty - ad * atx) * det; + out[5] = (ab * atx - aa * aty) * det; + return out; +} + +/** + * Clone a new matrix. + * @param {Float32Array|Array.} a + */ +function clone$2(a) { + var b = create$1(); + copy$1(b, a); + return b; +} + +var matrix = (Object.freeze || Object)({ + create: create$1, + identity: identity, + copy: copy$1, + mul: mul$1, + translate: translate, + rotate: rotate, + scale: scale$1, + invert: invert, + clone: clone$2 +}); + +/** + * 提供变换扩展 + * @module zrender/mixin/Transformable + * @author pissang (https://www.github.com/pissang) + */ + +var mIdentity = identity; + +var EPSILON = 5e-5; + +function isNotAroundZero(val) { + return val > EPSILON || val < -EPSILON; +} + +/** + * @alias module:zrender/mixin/Transformable + * @constructor + */ +var Transformable = function (opts) { + opts = opts || {}; + // If there are no given position, rotation, scale + if (!opts.position) { + /** + * 平移 + * @type {Array.} + * @default [0, 0] + */ + this.position = [0, 0]; + } + if (opts.rotation == null) { + /** + * 旋转 + * @type {Array.} + * @default 0 + */ + this.rotation = 0; + } + if (!opts.scale) { + /** + * 缩放 + * @type {Array.} + * @default [1, 1] + */ + this.scale = [1, 1]; + } + /** + * 旋转和缩放的原点 + * @type {Array.} + * @default null + */ + this.origin = this.origin || null; +}; + +var transformableProto = Transformable.prototype; +transformableProto.transform = null; + +/** + * 判断是否需要有坐标变换 + * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵 + */ +transformableProto.needLocalTransform = function () { + return isNotAroundZero(this.rotation) + || isNotAroundZero(this.position[0]) + || isNotAroundZero(this.position[1]) + || isNotAroundZero(this.scale[0] - 1) + || isNotAroundZero(this.scale[1] - 1); +}; + +var scaleTmp = []; +transformableProto.updateTransform = function () { + var parent = this.parent; + var parentHasTransform = parent && parent.transform; + var needLocalTransform = this.needLocalTransform(); + + var m = this.transform; + if (!(needLocalTransform || parentHasTransform)) { + m && mIdentity(m); + return; + } + + m = m || create$1(); + + if (needLocalTransform) { + this.getLocalTransform(m); + } + else { + mIdentity(m); + } + + // 应用父节点变换 + if (parentHasTransform) { + if (needLocalTransform) { + mul$1(m, parent.transform, m); + } + else { + copy$1(m, parent.transform); + } + } + // 保存这个变换矩阵 + this.transform = m; + + var globalScaleRatio = this.globalScaleRatio; + if (globalScaleRatio != null && globalScaleRatio !== 1) { + this.getGlobalScale(scaleTmp); + var relX = scaleTmp[0] < 0 ? -1 : 1; + var relY = scaleTmp[1] < 0 ? -1 : 1; + var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0; + var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0; + + m[0] *= sx; + m[1] *= sx; + m[2] *= sy; + m[3] *= sy; + } + + this.invTransform = this.invTransform || create$1(); + invert(this.invTransform, m); +}; + +transformableProto.getLocalTransform = function (m) { + return Transformable.getLocalTransform(this, m); +}; + +/** + * 将自己的transform应用到context上 + * @param {CanvasRenderingContext2D} ctx + */ +transformableProto.setTransform = function (ctx) { + var m = this.transform; + var dpr = ctx.dpr || 1; + if (m) { + ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]); + } + else { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + } +}; + +transformableProto.restoreTransform = function (ctx) { + var dpr = ctx.dpr || 1; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); +}; + +var tmpTransform = []; +var originTransform = create$1(); + +transformableProto.setLocalTransform = function (m) { + if (!m) { + // TODO return or set identity? + return; + } + var sx = m[0] * m[0] + m[1] * m[1]; + var sy = m[2] * m[2] + m[3] * m[3]; + var position = this.position; + var scale$$1 = this.scale; + if (isNotAroundZero(sx - 1)) { + sx = Math.sqrt(sx); + } + if (isNotAroundZero(sy - 1)) { + sy = Math.sqrt(sy); + } + if (m[0] < 0) { + sx = -sx; + } + if (m[3] < 0) { + sy = -sy; + } + + position[0] = m[4]; + position[1] = m[5]; + scale$$1[0] = sx; + scale$$1[1] = sy; + this.rotation = Math.atan2(-m[1] / sy, m[0] / sx); +}; +/** + * 分解`transform`矩阵到`position`, `rotation`, `scale` + */ +transformableProto.decomposeTransform = function () { + if (!this.transform) { + return; + } + var parent = this.parent; + var m = this.transform; + if (parent && parent.transform) { + // Get local transform and decompose them to position, scale, rotation + mul$1(tmpTransform, parent.invTransform, m); + m = tmpTransform; + } + var origin = this.origin; + if (origin && (origin[0] || origin[1])) { + originTransform[4] = origin[0]; + originTransform[5] = origin[1]; + mul$1(tmpTransform, m, originTransform); + tmpTransform[4] -= origin[0]; + tmpTransform[5] -= origin[1]; + m = tmpTransform; + } + + this.setLocalTransform(m); +}; + +/** + * Get global scale + * @return {Array.} + */ +transformableProto.getGlobalScale = function (out) { + var m = this.transform; + out = out || []; + if (!m) { + out[0] = 1; + out[1] = 1; + return out; + } + out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]); + out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]); + if (m[0] < 0) { + out[0] = -out[0]; + } + if (m[3] < 0) { + out[1] = -out[1]; + } + return out; +}; +/** + * 变换坐标位置到 shape 的局部坐标空间 + * @method + * @param {number} x + * @param {number} y + * @return {Array.} + */ +transformableProto.transformCoordToLocal = function (x, y) { + var v2 = [x, y]; + var invTransform = this.invTransform; + if (invTransform) { + applyTransform(v2, v2, invTransform); + } + return v2; +}; + +/** + * 变换局部坐标位置到全局坐标空间 + * @method + * @param {number} x + * @param {number} y + * @return {Array.} + */ +transformableProto.transformCoordToGlobal = function (x, y) { + var v2 = [x, y]; + var transform = this.transform; + if (transform) { + applyTransform(v2, v2, transform); + } + return v2; +}; + +/** + * @static + * @param {Object} target + * @param {Array.} target.origin + * @param {number} target.rotation + * @param {Array.} target.position + * @param {Array.} [m] + */ +Transformable.getLocalTransform = function (target, m) { + m = m || []; + mIdentity(m); + + var origin = target.origin; + var scale$$1 = target.scale || [1, 1]; + var rotation = target.rotation || 0; + var position = target.position || [0, 0]; + + if (origin) { + // Translate to origin + m[4] -= origin[0]; + m[5] -= origin[1]; + } + scale$1(m, m, scale$$1); + if (rotation) { + rotate(m, m, rotation); + } + if (origin) { + // Translate back from origin + m[4] += origin[0]; + m[5] += origin[1]; + } + + m[4] += position[0]; + m[5] += position[1]; + + return m; +}; + +/** + * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js + * @see http://sole.github.io/tween.js/examples/03_graphs.html + * @exports zrender/animation/easing + */ +var easing = { + /** + * @param {number} k + * @return {number} + */ + linear: function (k) { + return k; + }, + + /** + * @param {number} k + * @return {number} + */ + quadraticIn: function (k) { + return k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quadraticOut: function (k) { + return k * (2 - k); + }, + /** + * @param {number} k + * @return {number} + */ + quadraticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k; + } + return -0.5 * (--k * (k - 2) - 1); + }, + + // 三次方的缓动(t^3) + /** + * @param {number} k + * @return {number} + */ + cubicIn: function (k) { + return k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + cubicOut: function (k) { + return --k * k * k + 1; + }, + /** + * @param {number} k + * @return {number} + */ + cubicInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k; + } + return 0.5 * ((k -= 2) * k * k + 2); + }, + + // 四次方的缓动(t^4) + /** + * @param {number} k + * @return {number} + */ + quarticIn: function (k) { + return k * k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quarticOut: function (k) { + return 1 - (--k * k * k * k); + }, + /** + * @param {number} k + * @return {number} + */ + quarticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k; + } + return -0.5 * ((k -= 2) * k * k * k - 2); + }, + + // 五次方的缓动(t^5) + /** + * @param {number} k + * @return {number} + */ + quinticIn: function (k) { + return k * k * k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quinticOut: function (k) { + return --k * k * k * k * k + 1; + }, + /** + * @param {number} k + * @return {number} + */ + quinticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k * k; + } + return 0.5 * ((k -= 2) * k * k * k * k + 2); + }, + + // 正弦曲线的缓动(sin(t)) + /** + * @param {number} k + * @return {number} + */ + sinusoidalIn: function (k) { + return 1 - Math.cos(k * Math.PI / 2); + }, + /** + * @param {number} k + * @return {number} + */ + sinusoidalOut: function (k) { + return Math.sin(k * Math.PI / 2); + }, + /** + * @param {number} k + * @return {number} + */ + sinusoidalInOut: function (k) { + return 0.5 * (1 - Math.cos(Math.PI * k)); + }, + + // 指数曲线的缓动(2^t) + /** + * @param {number} k + * @return {number} + */ + exponentialIn: function (k) { + return k === 0 ? 0 : Math.pow(1024, k - 1); + }, + /** + * @param {number} k + * @return {number} + */ + exponentialOut: function (k) { + return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); + }, + /** + * @param {number} k + * @return {number} + */ + exponentialInOut: function (k) { + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if ((k *= 2) < 1) { + return 0.5 * Math.pow(1024, k - 1); + } + return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); + }, + + // 圆形曲线的缓动(sqrt(1-t^2)) + /** + * @param {number} k + * @return {number} + */ + circularIn: function (k) { + return 1 - Math.sqrt(1 - k * k); + }, + /** + * @param {number} k + * @return {number} + */ + circularOut: function (k) { + return Math.sqrt(1 - (--k * k)); + }, + /** + * @param {number} k + * @return {number} + */ + circularInOut: function (k) { + if ((k *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - k * k) - 1); + } + return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); + }, + + // 创建类似于弹簧在停止前来回振荡的动画 + /** + * @param {number} k + * @return {number} + */ + elasticIn: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return -(a * Math.pow(2, 10 * (k -= 1)) * + Math.sin((k - s) * (2 * Math.PI) / p)); + }, + /** + * @param {number} k + * @return {number} + */ + elasticOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return (a * Math.pow(2, -10 * k) * + Math.sin((k - s) * (2 * Math.PI) / p) + 1); + }, + /** + * @param {number} k + * @return {number} + */ + elasticInOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + if ((k *= 2) < 1) { + return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p)); + } + return a * Math.pow(2, -10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; + + }, + + // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动 + /** + * @param {number} k + * @return {number} + */ + backIn: function (k) { + var s = 1.70158; + return k * k * ((s + 1) * k - s); + }, + /** + * @param {number} k + * @return {number} + */ + backOut: function (k) { + var s = 1.70158; + return --k * k * ((s + 1) * k + s) + 1; + }, + /** + * @param {number} k + * @return {number} + */ + backInOut: function (k) { + var s = 1.70158 * 1.525; + if ((k *= 2) < 1) { + return 0.5 * (k * k * ((s + 1) * k - s)); + } + return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); + }, + + // 创建弹跳效果 + /** + * @param {number} k + * @return {number} + */ + bounceIn: function (k) { + return 1 - easing.bounceOut(1 - k); + }, + /** + * @param {number} k + * @return {number} + */ + bounceOut: function (k) { + if (k < (1 / 2.75)) { + return 7.5625 * k * k; + } + else if (k < (2 / 2.75)) { + return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; + } + else if (k < (2.5 / 2.75)) { + return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; + } + else { + return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; + } + }, + /** + * @param {number} k + * @return {number} + */ + bounceInOut: function (k) { + if (k < 0.5) { + return easing.bounceIn(k * 2) * 0.5; + } + return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5; + } +}; + +/** + * 动画主控制器 + * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件 + * @config life(1000) 动画时长 + * @config delay(0) 动画延迟时间 + * @config loop(true) + * @config gap(0) 循环的间隔时间 + * @config onframe + * @config easing(optional) + * @config ondestroy(optional) + * @config onrestart(optional) + * + * TODO pause + */ + +function Clip(options) { + + this._target = options.target; + + // 生命周期 + this._life = options.life || 1000; + // 延时 + this._delay = options.delay || 0; + // 开始时间 + // this._startTime = new Date().getTime() + this._delay;// 单位毫秒 + this._initialized = false; + + // 是否循环 + this.loop = options.loop == null ? false : options.loop; + + this.gap = options.gap || 0; + + this.easing = options.easing || 'Linear'; + + this.onframe = options.onframe; + this.ondestroy = options.ondestroy; + this.onrestart = options.onrestart; + + this._pausedTime = 0; + this._paused = false; +} + +Clip.prototype = { + + constructor: Clip, + + step: function (globalTime, deltaTime) { + // Set startTime on first step, or _startTime may has milleseconds different between clips + // PENDING + if (!this._initialized) { + this._startTime = globalTime + this._delay; + this._initialized = true; + } + + if (this._paused) { + this._pausedTime += deltaTime; + return; + } + + var percent = (globalTime - this._startTime - this._pausedTime) / this._life; + + // 还没开始 + if (percent < 0) { + return; + } + + percent = Math.min(percent, 1); + + var easing$$1 = this.easing; + var easingFunc = typeof easing$$1 == 'string' ? easing[easing$$1] : easing$$1; + var schedule = typeof easingFunc === 'function' + ? easingFunc(percent) + : percent; + + this.fire('frame', schedule); + + // 结束 + if (percent == 1) { + if (this.loop) { + this.restart (globalTime); + // 重新开始周期 + // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件 + return 'restart'; + } + + // 动画完成将这个控制器标识为待删除 + // 在Animation.update中进行批量删除 + this._needsRemove = true; + return 'destroy'; + } + + return null; + }, + + restart: function (globalTime) { + var remainder = (globalTime - this._startTime - this._pausedTime) % this._life; + this._startTime = globalTime - remainder + this.gap; + this._pausedTime = 0; + + this._needsRemove = false; + }, + + fire: function (eventType, arg) { + eventType = 'on' + eventType; + if (this[eventType]) { + this[eventType](this._target, arg); + } + }, + + pause: function () { + this._paused = true; + }, + + resume: function () { + this._paused = false; + } +}; + +// Simple LRU cache use doubly linked list +// @module zrender/core/LRU + +/** + * Simple double linked list. Compared with array, it has O(1) remove operation. + * @constructor + */ +var LinkedList = function () { + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.head = null; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.tail = null; + + this._len = 0; +}; + +var linkedListProto = LinkedList.prototype; +/** + * Insert a new value at the tail + * @param {} val + * @return {module:zrender/core/LRU~Entry} + */ +linkedListProto.insert = function (val) { + var entry = new Entry(val); + this.insertEntry(entry); + return entry; +}; + +/** + * Insert an entry at the tail + * @param {module:zrender/core/LRU~Entry} entry + */ +linkedListProto.insertEntry = function (entry) { + if (!this.head) { + this.head = this.tail = entry; + } + else { + this.tail.next = entry; + entry.prev = this.tail; + entry.next = null; + this.tail = entry; + } + this._len++; +}; + +/** + * Remove entry. + * @param {module:zrender/core/LRU~Entry} entry + */ +linkedListProto.remove = function (entry) { + var prev = entry.prev; + var next = entry.next; + if (prev) { + prev.next = next; + } + else { + // Is head + this.head = next; + } + if (next) { + next.prev = prev; + } + else { + // Is tail + this.tail = prev; + } + entry.next = entry.prev = null; + this._len--; +}; + +/** + * @return {number} + */ +linkedListProto.len = function () { + return this._len; +}; + +/** + * Clear list + */ +linkedListProto.clear = function () { + this.head = this.tail = null; + this._len = 0; +}; + +/** + * @constructor + * @param {} val + */ +var Entry = function (val) { + /** + * @type {} + */ + this.value = val; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.next; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.prev; +}; + +/** + * LRU Cache + * @constructor + * @alias module:zrender/core/LRU + */ +var LRU = function (maxSize) { + + this._list = new LinkedList(); + + this._map = {}; + + this._maxSize = maxSize || 10; + + this._lastRemovedEntry = null; +}; + +var LRUProto = LRU.prototype; + +/** + * @param {string} key + * @param {} value + * @return {} Removed value + */ +LRUProto.put = function (key, value) { + var list = this._list; + var map = this._map; + var removed = null; + if (map[key] == null) { + var len = list.len(); + // Reuse last removed entry + var entry = this._lastRemovedEntry; + + if (len >= this._maxSize && len > 0) { + // Remove the least recently used + var leastUsedEntry = list.head; + list.remove(leastUsedEntry); + delete map[leastUsedEntry.key]; + + removed = leastUsedEntry.value; + this._lastRemovedEntry = leastUsedEntry; + } + + if (entry) { + entry.value = value; + } + else { + entry = new Entry(value); + } + entry.key = key; + list.insertEntry(entry); + map[key] = entry; + } + + return removed; +}; + +/** + * @param {string} key + * @return {} + */ +LRUProto.get = function (key) { + var entry = this._map[key]; + var list = this._list; + if (entry != null) { + // Put the latest used entry in the tail + if (entry !== list.tail) { + list.remove(entry); + list.insertEntry(entry); + } + + return entry.value; + } +}; + +/** + * Clear the cache + */ +LRUProto.clear = function () { + this._list.clear(); + this._map = {}; +}; + +var kCSSColorTable = { + 'transparent': [0,0,0,0], 'aliceblue': [240,248,255,1], + 'antiquewhite': [250,235,215,1], 'aqua': [0,255,255,1], + 'aquamarine': [127,255,212,1], 'azure': [240,255,255,1], + 'beige': [245,245,220,1], 'bisque': [255,228,196,1], + 'black': [0,0,0,1], 'blanchedalmond': [255,235,205,1], + 'blue': [0,0,255,1], 'blueviolet': [138,43,226,1], + 'brown': [165,42,42,1], 'burlywood': [222,184,135,1], + 'cadetblue': [95,158,160,1], 'chartreuse': [127,255,0,1], + 'chocolate': [210,105,30,1], 'coral': [255,127,80,1], + 'cornflowerblue': [100,149,237,1], 'cornsilk': [255,248,220,1], + 'crimson': [220,20,60,1], 'cyan': [0,255,255,1], + 'darkblue': [0,0,139,1], 'darkcyan': [0,139,139,1], + 'darkgoldenrod': [184,134,11,1], 'darkgray': [169,169,169,1], + 'darkgreen': [0,100,0,1], 'darkgrey': [169,169,169,1], + 'darkkhaki': [189,183,107,1], 'darkmagenta': [139,0,139,1], + 'darkolivegreen': [85,107,47,1], 'darkorange': [255,140,0,1], + 'darkorchid': [153,50,204,1], 'darkred': [139,0,0,1], + 'darksalmon': [233,150,122,1], 'darkseagreen': [143,188,143,1], + 'darkslateblue': [72,61,139,1], 'darkslategray': [47,79,79,1], + 'darkslategrey': [47,79,79,1], 'darkturquoise': [0,206,209,1], + 'darkviolet': [148,0,211,1], 'deeppink': [255,20,147,1], + 'deepskyblue': [0,191,255,1], 'dimgray': [105,105,105,1], + 'dimgrey': [105,105,105,1], 'dodgerblue': [30,144,255,1], + 'firebrick': [178,34,34,1], 'floralwhite': [255,250,240,1], + 'forestgreen': [34,139,34,1], 'fuchsia': [255,0,255,1], + 'gainsboro': [220,220,220,1], 'ghostwhite': [248,248,255,1], + 'gold': [255,215,0,1], 'goldenrod': [218,165,32,1], + 'gray': [128,128,128,1], 'green': [0,128,0,1], + 'greenyellow': [173,255,47,1], 'grey': [128,128,128,1], + 'honeydew': [240,255,240,1], 'hotpink': [255,105,180,1], + 'indianred': [205,92,92,1], 'indigo': [75,0,130,1], + 'ivory': [255,255,240,1], 'khaki': [240,230,140,1], + 'lavender': [230,230,250,1], 'lavenderblush': [255,240,245,1], + 'lawngreen': [124,252,0,1], 'lemonchiffon': [255,250,205,1], + 'lightblue': [173,216,230,1], 'lightcoral': [240,128,128,1], + 'lightcyan': [224,255,255,1], 'lightgoldenrodyellow': [250,250,210,1], + 'lightgray': [211,211,211,1], 'lightgreen': [144,238,144,1], + 'lightgrey': [211,211,211,1], 'lightpink': [255,182,193,1], + 'lightsalmon': [255,160,122,1], 'lightseagreen': [32,178,170,1], + 'lightskyblue': [135,206,250,1], 'lightslategray': [119,136,153,1], + 'lightslategrey': [119,136,153,1], 'lightsteelblue': [176,196,222,1], + 'lightyellow': [255,255,224,1], 'lime': [0,255,0,1], + 'limegreen': [50,205,50,1], 'linen': [250,240,230,1], + 'magenta': [255,0,255,1], 'maroon': [128,0,0,1], + 'mediumaquamarine': [102,205,170,1], 'mediumblue': [0,0,205,1], + 'mediumorchid': [186,85,211,1], 'mediumpurple': [147,112,219,1], + 'mediumseagreen': [60,179,113,1], 'mediumslateblue': [123,104,238,1], + 'mediumspringgreen': [0,250,154,1], 'mediumturquoise': [72,209,204,1], + 'mediumvioletred': [199,21,133,1], 'midnightblue': [25,25,112,1], + 'mintcream': [245,255,250,1], 'mistyrose': [255,228,225,1], + 'moccasin': [255,228,181,1], 'navajowhite': [255,222,173,1], + 'navy': [0,0,128,1], 'oldlace': [253,245,230,1], + 'olive': [128,128,0,1], 'olivedrab': [107,142,35,1], + 'orange': [255,165,0,1], 'orangered': [255,69,0,1], + 'orchid': [218,112,214,1], 'palegoldenrod': [238,232,170,1], + 'palegreen': [152,251,152,1], 'paleturquoise': [175,238,238,1], + 'palevioletred': [219,112,147,1], 'papayawhip': [255,239,213,1], + 'peachpuff': [255,218,185,1], 'peru': [205,133,63,1], + 'pink': [255,192,203,1], 'plum': [221,160,221,1], + 'powderblue': [176,224,230,1], 'purple': [128,0,128,1], + 'red': [255,0,0,1], 'rosybrown': [188,143,143,1], + 'royalblue': [65,105,225,1], 'saddlebrown': [139,69,19,1], + 'salmon': [250,128,114,1], 'sandybrown': [244,164,96,1], + 'seagreen': [46,139,87,1], 'seashell': [255,245,238,1], + 'sienna': [160,82,45,1], 'silver': [192,192,192,1], + 'skyblue': [135,206,235,1], 'slateblue': [106,90,205,1], + 'slategray': [112,128,144,1], 'slategrey': [112,128,144,1], + 'snow': [255,250,250,1], 'springgreen': [0,255,127,1], + 'steelblue': [70,130,180,1], 'tan': [210,180,140,1], + 'teal': [0,128,128,1], 'thistle': [216,191,216,1], + 'tomato': [255,99,71,1], 'turquoise': [64,224,208,1], + 'violet': [238,130,238,1], 'wheat': [245,222,179,1], + 'white': [255,255,255,1], 'whitesmoke': [245,245,245,1], + 'yellow': [255,255,0,1], 'yellowgreen': [154,205,50,1] +}; + +function clampCssByte(i) { // Clamp to integer 0 .. 255. + i = Math.round(i); // Seems to be what Chrome does (vs truncation). + return i < 0 ? 0 : i > 255 ? 255 : i; +} + +function clampCssAngle(i) { // Clamp to integer 0 .. 360. + i = Math.round(i); // Seems to be what Chrome does (vs truncation). + return i < 0 ? 0 : i > 360 ? 360 : i; +} + +function clampCssFloat(f) { // Clamp to float 0.0 .. 1.0. + return f < 0 ? 0 : f > 1 ? 1 : f; +} + +function parseCssInt(str) { // int or percentage. + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssByte(parseFloat(str) / 100 * 255); + } + return clampCssByte(parseInt(str, 10)); +} + +function parseCssFloat(str) { // float or percentage. + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssFloat(parseFloat(str) / 100); + } + return clampCssFloat(parseFloat(str)); +} + +function cssHueToRgb(m1, m2, h) { + if (h < 0) { + h += 1; + } + else if (h > 1) { + h -= 1; + } + + if (h * 6 < 1) { + return m1 + (m2 - m1) * h * 6; + } + if (h * 2 < 1) { + return m2; + } + if (h * 3 < 2) { + return m1 + (m2 - m1) * (2/3 - h) * 6; + } + return m1; +} + +function lerpNumber(a, b, p) { + return a + (b - a) * p; +} + +function setRgba(out, r, g, b, a) { + out[0] = r; out[1] = g; out[2] = b; out[3] = a; + return out; +} +function copyRgba(out, a) { + out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; + return out; +} + +var colorCache = new LRU(20); +var lastRemovedArr = null; + +function putToCache(colorStr, rgbaArr) { + // Reuse removed array + if (lastRemovedArr) { + copyRgba(lastRemovedArr, rgbaArr); + } + lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); +} + +/** + * @param {string} colorStr + * @param {Array.} out + * @return {Array.} + * @memberOf module:zrender/util/color + */ +function parse(colorStr, rgbaArr) { + if (!colorStr) { + return; + } + rgbaArr = rgbaArr || []; + + var cached = colorCache.get(colorStr); + if (cached) { + return copyRgba(rgbaArr, cached); + } + + // colorStr may be not string + colorStr = colorStr + ''; + // Remove all whitespace, not compliant, but should just be more accepting. + var str = colorStr.replace(/ /g, '').toLowerCase(); + + // Color keywords (and transparent) lookup. + if (str in kCSSColorTable) { + copyRgba(rgbaArr, kCSSColorTable[str]); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + + // #abc and #abc123 syntax. + if (str.charAt(0) === '#') { + if (str.length === 4) { + var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. + if (!(iv >= 0 && iv <= 0xfff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; // Covers NaN. + } + setRgba(rgbaArr, + ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), + (iv & 0xf0) | ((iv & 0xf0) >> 4), + (iv & 0xf) | ((iv & 0xf) << 4), + 1 + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + else if (str.length === 7) { + var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. + if (!(iv >= 0 && iv <= 0xffffff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; // Covers NaN. + } + setRgba(rgbaArr, + (iv & 0xff0000) >> 16, + (iv & 0xff00) >> 8, + iv & 0xff, + 1 + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + + return; + } + var op = str.indexOf('('), ep = str.indexOf(')'); + if (op !== -1 && ep + 1 === str.length) { + var fname = str.substr(0, op); + var params = str.substr(op + 1, ep - (op + 1)).split(','); + var alpha = 1; // To allow case fallthrough. + switch (fname) { + case 'rgba': + if (params.length !== 4) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + alpha = parseCssFloat(params.pop()); // jshint ignore:line + // Fall through. + case 'rgb': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + setRgba(rgbaArr, + parseCssInt(params[0]), + parseCssInt(params[1]), + parseCssInt(params[2]), + alpha + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsla': + if (params.length !== 4) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + params[3] = parseCssFloat(params[3]); + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsl': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + default: + return; + } + } + + setRgba(rgbaArr, 0, 0, 0, 1); + return; +} + +/** + * @param {Array.} hsla + * @param {Array.} rgba + * @return {Array.} rgba + */ +function hsla2rgba(hsla, rgba) { + var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360; // 0 .. 1 + // NOTE(deanm): According to the CSS spec s/l should only be + // percentages, but we don't bother and let float or percentage. + var s = parseCssFloat(hsla[1]); + var l = parseCssFloat(hsla[2]); + var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; + var m1 = l * 2 - m2; + + rgba = rgba || []; + setRgba(rgba, + clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), + clampCssByte(cssHueToRgb(m1, m2, h) * 255), + clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), + 1 + ); + + if (hsla.length === 4) { + rgba[3] = hsla[3]; + } + + return rgba; +} + +/** + * @param {Array.} rgba + * @return {Array.} hsla + */ +function rgba2hsla(rgba) { + if (!rgba) { + return; + } + + // RGB from 0 to 255 + var R = rgba[0] / 255; + var G = rgba[1] / 255; + var B = rgba[2] / 255; + + var vMin = Math.min(R, G, B); // Min. value of RGB + var vMax = Math.max(R, G, B); // Max. value of RGB + var delta = vMax - vMin; // Delta RGB value + + var L = (vMax + vMin) / 2; + var H; + var S; + // HSL results from 0 to 1 + if (delta === 0) { + H = 0; + S = 0; + } + else { + if (L < 0.5) { + S = delta / (vMax + vMin); + } + else { + S = delta / (2 - vMax - vMin); + } + + var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta; + var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta; + var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta; + + if (R === vMax) { + H = deltaB - deltaG; + } + else if (G === vMax) { + H = (1 / 3) + deltaR - deltaB; + } + else if (B === vMax) { + H = (2 / 3) + deltaG - deltaR; + } + + if (H < 0) { + H += 1; + } + + if (H > 1) { + H -= 1; + } + } + + var hsla = [H * 360, S, L]; + + if (rgba[3] != null) { + hsla.push(rgba[3]); + } + + return hsla; +} + +/** + * @param {string} color + * @param {number} level + * @return {string} + * @memberOf module:zrender/util/color + */ +function lift(color, level) { + var colorArr = parse(color); + if (colorArr) { + for (var i = 0; i < 3; i++) { + if (level < 0) { + colorArr[i] = colorArr[i] * (1 - level) | 0; + } + else { + colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0; + } + if (colorArr[i] > 255) { + colorArr[i] = 255; + } + else if (color[i] < 0) { + colorArr[i] = 0; + } + } + return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb'); + } +} + +/** + * @param {string} color + * @return {string} + * @memberOf module:zrender/util/color + */ +function toHex(color) { + var colorArr = parse(color); + if (colorArr) { + return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1); + } +} + +/** + * Map value to color. Faster than lerp methods because color is represented by rgba array. + * @param {number} normalizedValue A float between 0 and 1. + * @param {Array.>} colors List of rgba color array + * @param {Array.} [out] Mapped gba color array + * @return {Array.} will be null/undefined if input illegal. + */ +function fastLerp(normalizedValue, colors, out) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1) + ) { + return; + } + + out = out || []; + + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = colors[leftIndex]; + var rightColor = colors[rightIndex]; + var dv = value - leftIndex; + out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); + out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); + out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); + out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); + + return out; +} + +/** + * @deprecated + */ +var fastMapToColor = fastLerp; + +/** + * @param {number} normalizedValue A float between 0 and 1. + * @param {Array.} colors Color list. + * @param {boolean=} fullOutput Default false. + * @return {(string|Object)} Result color. If fullOutput, + * return {color: ..., leftIndex: ..., rightIndex: ..., value: ...}, + * @memberOf module:zrender/util/color + */ +function lerp$1(normalizedValue, colors, fullOutput) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1) + ) { + return; + } + + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = parse(colors[leftIndex]); + var rightColor = parse(colors[rightIndex]); + var dv = value - leftIndex; + + var color = stringify( + [ + clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), + clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), + clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), + clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) + ], + 'rgba' + ); + + return fullOutput + ? { + color: color, + leftIndex: leftIndex, + rightIndex: rightIndex, + value: value + } + : color; +} + +/** + * @deprecated + */ +var mapToColor = lerp$1; + +/** + * @param {string} color + * @param {number=} h 0 ~ 360, ignore when null. + * @param {number=} s 0 ~ 1, ignore when null. + * @param {number=} l 0 ~ 1, ignore when null. + * @return {string} Color string in rgba format. + * @memberOf module:zrender/util/color + */ +function modifyHSL(color, h, s, l) { + color = parse(color); + + if (color) { + color = rgba2hsla(color); + h != null && (color[0] = clampCssAngle(h)); + s != null && (color[1] = parseCssFloat(s)); + l != null && (color[2] = parseCssFloat(l)); + + return stringify(hsla2rgba(color), 'rgba'); + } +} + +/** + * @param {string} color + * @param {number=} alpha 0 ~ 1 + * @return {string} Color string in rgba format. + * @memberOf module:zrender/util/color + */ +function modifyAlpha(color, alpha) { + color = parse(color); + + if (color && alpha != null) { + color[3] = clampCssFloat(alpha); + return stringify(color, 'rgba'); + } +} + +/** + * @param {Array.} arrColor like [12,33,44,0.4] + * @param {string} type 'rgba', 'hsva', ... + * @return {string} Result color. (If input illegal, return undefined). + */ +function stringify(arrColor, type) { + if (!arrColor || !arrColor.length) { + return; + } + var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2]; + if (type === 'rgba' || type === 'hsva' || type === 'hsla') { + colorStr += ',' + arrColor[3]; + } + return type + '(' + colorStr + ')'; +} + + +var color = (Object.freeze || Object)({ + parse: parse, + lift: lift, + toHex: toHex, + fastLerp: fastLerp, + fastMapToColor: fastMapToColor, + lerp: lerp$1, + mapToColor: mapToColor, + modifyHSL: modifyHSL, + modifyAlpha: modifyAlpha, + stringify: stringify +}); + +/** + * @module echarts/animation/Animator + */ + +var arraySlice = Array.prototype.slice; + +function defaultGetter(target, key) { + return target[key]; +} + +function defaultSetter(target, key, value) { + target[key] = value; +} + +/** + * @param {number} p0 + * @param {number} p1 + * @param {number} percent + * @return {number} + */ +function interpolateNumber(p0, p1, percent) { + return (p1 - p0) * percent + p0; +} + +/** + * @param {string} p0 + * @param {string} p1 + * @param {number} percent + * @return {string} + */ +function interpolateString(p0, p1, percent) { + return percent > 0.5 ? p1 : p0; +} + +/** + * @param {Array} p0 + * @param {Array} p1 + * @param {number} percent + * @param {Array} out + * @param {number} arrDim + */ +function interpolateArray(p0, p1, percent, out, arrDim) { + var len = p0.length; + if (arrDim == 1) { + for (var i = 0; i < len; i++) { + out[i] = interpolateNumber(p0[i], p1[i], percent); + } + } + else { + var len2 = len && p0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + out[i][j] = interpolateNumber( + p0[i][j], p1[i][j], percent + ); + } + } + } +} + +// arr0 is source array, arr1 is target array. +// Do some preprocess to avoid error happened when interpolating from arr0 to arr1 +function fillArr(arr0, arr1, arrDim) { + var arr0Len = arr0.length; + var arr1Len = arr1.length; + if (arr0Len !== arr1Len) { + // FIXME Not work for TypedArray + var isPreviousLarger = arr0Len > arr1Len; + if (isPreviousLarger) { + // Cut the previous + arr0.length = arr1Len; + } + else { + // Fill the previous + for (var i = arr0Len; i < arr1Len; i++) { + arr0.push( + arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]) + ); + } + } + } + // Handling NaN value + var len2 = arr0[0] && arr0[0].length; + for (var i = 0; i < arr0.length; i++) { + if (arrDim === 1) { + if (isNaN(arr0[i])) { + arr0[i] = arr1[i]; + } + } + else { + for (var j = 0; j < len2; j++) { + if (isNaN(arr0[i][j])) { + arr0[i][j] = arr1[i][j]; + } + } + } + } +} + +/** + * @param {Array} arr0 + * @param {Array} arr1 + * @param {number} arrDim + * @return {boolean} + */ +function isArraySame(arr0, arr1, arrDim) { + if (arr0 === arr1) { + return true; + } + var len = arr0.length; + if (len !== arr1.length) { + return false; + } + if (arrDim === 1) { + for (var i = 0; i < len; i++) { + if (arr0[i] !== arr1[i]) { + return false; + } + } + } + else { + var len2 = arr0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + if (arr0[i][j] !== arr1[i][j]) { + return false; + } + } + } + } + return true; +} + +/** + * Catmull Rom interpolate array + * @param {Array} p0 + * @param {Array} p1 + * @param {Array} p2 + * @param {Array} p3 + * @param {number} t + * @param {number} t2 + * @param {number} t3 + * @param {Array} out + * @param {number} arrDim + */ +function catmullRomInterpolateArray( + p0, p1, p2, p3, t, t2, t3, out, arrDim +) { + var len = p0.length; + if (arrDim == 1) { + for (var i = 0; i < len; i++) { + out[i] = catmullRomInterpolate( + p0[i], p1[i], p2[i], p3[i], t, t2, t3 + ); + } + } + else { + var len2 = p0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + out[i][j] = catmullRomInterpolate( + p0[i][j], p1[i][j], p2[i][j], p3[i][j], + t, t2, t3 + ); + } + } + } +} + +/** + * Catmull Rom interpolate number + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @param {number} t2 + * @param {number} t3 + * @return {number} + */ +function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; +} + +function cloneValue(value) { + if (isArrayLike(value)) { + var len = value.length; + if (isArrayLike(value[0])) { + var ret = []; + for (var i = 0; i < len; i++) { + ret.push(arraySlice.call(value[i])); + } + return ret; + } + + return arraySlice.call(value); + } + + return value; +} + +function rgba2String(rgba) { + rgba[0] = Math.floor(rgba[0]); + rgba[1] = Math.floor(rgba[1]); + rgba[2] = Math.floor(rgba[2]); + + return 'rgba(' + rgba.join(',') + ')'; +} + +function getArrayDim(keyframes) { + var lastValue = keyframes[keyframes.length - 1].value; + return isArrayLike(lastValue && lastValue[0]) ? 2 : 1; +} + +function createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) { + var getter = animator._getter; + var setter = animator._setter; + var useSpline = easing === 'spline'; + + var trackLen = keyframes.length; + if (!trackLen) { + return; + } + // Guess data type + var firstVal = keyframes[0].value; + var isValueArray = isArrayLike(firstVal); + var isValueColor = false; + var isValueString = false; + + // For vertices morphing + var arrDim = isValueArray ? getArrayDim(keyframes) : 0; + + var trackMaxTime; + // Sort keyframe as ascending + keyframes.sort(function(a, b) { + return a.time - b.time; + }); + + trackMaxTime = keyframes[trackLen - 1].time; + // Percents of each keyframe + var kfPercents = []; + // Value of each keyframe + var kfValues = []; + var prevValue = keyframes[0].value; + var isAllValueEqual = true; + for (var i = 0; i < trackLen; i++) { + kfPercents.push(keyframes[i].time / trackMaxTime); + // Assume value is a color when it is a string + var value = keyframes[i].value; + + // Check if value is equal, deep check if value is array + if (!((isValueArray && isArraySame(value, prevValue, arrDim)) + || (!isValueArray && value === prevValue))) { + isAllValueEqual = false; + } + prevValue = value; + + // Try converting a string to a color array + if (typeof value == 'string') { + var colorArray = parse(value); + if (colorArray) { + value = colorArray; + isValueColor = true; + } + else { + isValueString = true; + } + } + kfValues.push(value); + } + if (!forceAnimate && isAllValueEqual) { + return; + } + + var lastValue = kfValues[trackLen - 1]; + // Polyfill array and NaN value + for (var i = 0; i < trackLen - 1; i++) { + if (isValueArray) { + fillArr(kfValues[i], lastValue, arrDim); + } + else { + if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) { + kfValues[i] = lastValue; + } + } + } + isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); + + // Cache the key of last frame to speed up when + // animation playback is sequency + var lastFrame = 0; + var lastFramePercent = 0; + var start; + var w; + var p0; + var p1; + var p2; + var p3; + + if (isValueColor) { + var rgba = [0, 0, 0, 0]; + } + + var onframe = function (target, percent) { + // Find the range keyframes + // kf1-----kf2---------current--------kf3 + // find kf2 and kf3 and do interpolation + var frame; + // In the easing function like elasticOut, percent may less than 0 + if (percent < 0) { + frame = 0; + } + else if (percent < lastFramePercent) { + // Start from next key + // PENDING start from lastFrame ? + start = Math.min(lastFrame + 1, trackLen - 1); + for (frame = start; frame >= 0; frame--) { + if (kfPercents[frame] <= percent) { + break; + } + } + // PENDING really need to do this ? + frame = Math.min(frame, trackLen - 2); + } + else { + for (frame = lastFrame; frame < trackLen; frame++) { + if (kfPercents[frame] > percent) { + break; + } + } + frame = Math.min(frame - 1, trackLen - 2); + } + lastFrame = frame; + lastFramePercent = percent; + + var range = (kfPercents[frame + 1] - kfPercents[frame]); + if (range === 0) { + return; + } + else { + w = (percent - kfPercents[frame]) / range; + } + if (useSpline) { + p1 = kfValues[frame]; + p0 = kfValues[frame === 0 ? frame : frame - 1]; + p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1]; + p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2]; + if (isValueArray) { + catmullRomInterpolateArray( + p0, p1, p2, p3, w, w * w, w * w * w, + getter(target, propName), + arrDim + ); + } + else { + var value; + if (isValueColor) { + value = catmullRomInterpolateArray( + p0, p1, p2, p3, w, w * w, w * w * w, + rgba, 1 + ); + value = rgba2String(rgba); + } + else if (isValueString) { + // String is step(0.5) + return interpolateString(p1, p2, w); + } + else { + value = catmullRomInterpolate( + p0, p1, p2, p3, w, w * w, w * w * w + ); + } + setter( + target, + propName, + value + ); + } + } + else { + if (isValueArray) { + interpolateArray( + kfValues[frame], kfValues[frame + 1], w, + getter(target, propName), + arrDim + ); + } + else { + var value; + if (isValueColor) { + interpolateArray( + kfValues[frame], kfValues[frame + 1], w, + rgba, 1 + ); + value = rgba2String(rgba); + } + else if (isValueString) { + // String is step(0.5) + return interpolateString(kfValues[frame], kfValues[frame + 1], w); + } + else { + value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w); + } + setter( + target, + propName, + value + ); + } + } + }; + + var clip = new Clip({ + target: animator._target, + life: trackMaxTime, + loop: animator._loop, + delay: animator._delay, + onframe: onframe, + ondestroy: oneTrackDone + }); + + if (easing && easing !== 'spline') { + clip.easing = easing; + } + + return clip; +} + +/** + * @alias module:zrender/animation/Animator + * @constructor + * @param {Object} target + * @param {boolean} loop + * @param {Function} getter + * @param {Function} setter + */ +var Animator = function(target, loop, getter, setter) { + this._tracks = {}; + this._target = target; + + this._loop = loop || false; + + this._getter = getter || defaultGetter; + this._setter = setter || defaultSetter; + + this._clipCount = 0; + + this._delay = 0; + + this._doneList = []; + + this._onframeList = []; + + this._clipList = []; +}; + +Animator.prototype = { + /** + * 设置动画关键帧 + * @param {number} time 关键帧时间,单位是ms + * @param {Object} props 关键帧的属性值,key-value表示 + * @return {module:zrender/animation/Animator} + */ + when: function(time /* ms */, props) { + var tracks = this._tracks; + for (var propName in props) { + if (!props.hasOwnProperty(propName)) { + continue; + } + + if (!tracks[propName]) { + tracks[propName] = []; + // Invalid value + var value = this._getter(this._target, propName); + if (value == null) { + // zrLog('Invalid property ' + propName); + continue; + } + // If time is 0 + // Then props is given initialize value + // Else + // Initialize value from current prop value + if (time !== 0) { + tracks[propName].push({ + time: 0, + value: cloneValue(value) + }); + } + } + tracks[propName].push({ + time: time, + value: props[propName] + }); + } + return this; + }, + /** + * 添加动画每一帧的回调函数 + * @param {Function} callback + * @return {module:zrender/animation/Animator} + */ + during: function (callback) { + this._onframeList.push(callback); + return this; + }, + + pause: function () { + for (var i = 0; i < this._clipList.length; i++) { + this._clipList[i].pause(); + } + this._paused = true; + }, + + resume: function () { + for (var i = 0; i < this._clipList.length; i++) { + this._clipList[i].resume(); + } + this._paused = false; + }, + + isPaused: function () { + return !!this._paused; + }, + + _doneCallback: function () { + // Clear all tracks + this._tracks = {}; + // Clear all clips + this._clipList.length = 0; + + var doneList = this._doneList; + var len = doneList.length; + for (var i = 0; i < len; i++) { + doneList[i].call(this); + } + }, + /** + * 开始执行动画 + * @param {string|Function} [easing] + * 动画缓动函数,详见{@link module:zrender/animation/easing} + * @param {boolean} forceAnimate + * @return {module:zrender/animation/Animator} + */ + start: function (easing, forceAnimate) { + + var self = this; + var clipCount = 0; + + var oneTrackDone = function() { + clipCount--; + if (!clipCount) { + self._doneCallback(); + } + }; + + var lastClip; + for (var propName in this._tracks) { + if (!this._tracks.hasOwnProperty(propName)) { + continue; + } + var clip = createTrackClip( + this, easing, oneTrackDone, + this._tracks[propName], propName, forceAnimate + ); + if (clip) { + this._clipList.push(clip); + clipCount++; + + // If start after added to animation + if (this.animation) { + this.animation.addClip(clip); + } + + lastClip = clip; + } + } + + // Add during callback on the last clip + if (lastClip) { + var oldOnFrame = lastClip.onframe; + lastClip.onframe = function (target, percent) { + oldOnFrame(target, percent); + + for (var i = 0; i < self._onframeList.length; i++) { + self._onframeList[i](target, percent); + } + }; + } + + // This optimization will help the case that in the upper application + // the view may be refreshed frequently, where animation will be + // called repeatly but nothing changed. + if (!clipCount) { + this._doneCallback(); + } + return this; + }, + /** + * 停止动画 + * @param {boolean} forwardToLast If move to last frame before stop + */ + stop: function (forwardToLast) { + var clipList = this._clipList; + var animation = this.animation; + for (var i = 0; i < clipList.length; i++) { + var clip = clipList[i]; + if (forwardToLast) { + // Move to last frame before stop + clip.onframe(this._target, 1); + } + animation && animation.removeClip(clip); + } + clipList.length = 0; + }, + /** + * 设置动画延迟开始的时间 + * @param {number} time 单位ms + * @return {module:zrender/animation/Animator} + */ + delay: function (time) { + this._delay = time; + return this; + }, + /** + * 添加动画结束的回调 + * @param {Function} cb + * @return {module:zrender/animation/Animator} + */ + done: function(cb) { + if (cb) { + this._doneList.push(cb); + } + return this; + }, + + /** + * @return {Array.} + */ + getClips: function () { + return this._clipList; + } +}; + +var dpr = 1; + +// If in browser environment +if (typeof window !== 'undefined') { + dpr = Math.max(window.devicePixelRatio || 1, 1); +} + +/** + * config默认配置项 + * @exports zrender/config + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + */ + +/** + * debug日志选项:catchBrushException为true下有效 + * 0 : 不生成debug数据,发布用 + * 1 : 异常抛出,调试用 + * 2 : 控制台输出,调试用 + */ +var debugMode = 0; + +// retina 屏幕优化 +var devicePixelRatio = dpr; + +var log = function () { +}; + +if (debugMode === 1) { + log = function () { + for (var k in arguments) { + throw new Error(arguments[k]); + } + }; +} +else if (debugMode > 1) { + log = function () { + for (var k in arguments) { + console.log(arguments[k]); + } + }; +} + +var zrLog = log; + +/** + * @alias modue:zrender/mixin/Animatable + * @constructor + */ +var Animatable = function () { + + /** + * @type {Array.} + * @readOnly + */ + this.animators = []; +}; + +Animatable.prototype = { + + constructor: Animatable, + + /** + * 动画 + * + * @param {string} path The path to fetch value from object, like 'a.b.c'. + * @param {boolean} [loop] Whether to loop animation. + * @return {module:zrender/animation/Animator} + * @example: + * el.animate('style', false) + * .when(1000, {x: 10} ) + * .done(function(){ // Animation done }) + * .start() + */ + animate: function (path, loop) { + var target; + var animatingShape = false; + var el = this; + var zr = this.__zr; + if (path) { + var pathSplitted = path.split('.'); + var prop = el; + // If animating shape + animatingShape = pathSplitted[0] === 'shape'; + for (var i = 0, l = pathSplitted.length; i < l; i++) { + if (!prop) { + continue; + } + prop = prop[pathSplitted[i]]; + } + if (prop) { + target = prop; + } + } + else { + target = el; + } + + if (!target) { + zrLog( + 'Property "' + + path + + '" is not existed in element ' + + el.id + ); + return; + } + + var animators = el.animators; + + var animator = new Animator(target, loop); + + animator.during(function (target) { + el.dirty(animatingShape); + }) + .done(function () { + // FIXME Animator will not be removed if use `Animator#stop` to stop animation + animators.splice(indexOf(animators, animator), 1); + }); + + animators.push(animator); + + // If animate after added to the zrender + if (zr) { + zr.animation.addAnimator(animator); + } + + return animator; + }, + + /** + * 停止动画 + * @param {boolean} forwardToLast If move to last frame before stop + */ + stopAnimation: function (forwardToLast) { + var animators = this.animators; + var len = animators.length; + for (var i = 0; i < len; i++) { + animators[i].stop(forwardToLast); + } + animators.length = 0; + + return this; + }, + + /** + * Caution: this method will stop previous animation. + * So do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * @param {Object} target + * @param {number} [time=500] Time in ms + * @param {string} [easing='linear'] + * @param {number} [delay=0] + * @param {Function} [callback] + * @param {Function} [forceAnimate] Prevent stop animation and callback + * immediently when target values are the same as current values. + * + * @example + * // Animate position + * el.animateTo({ + * position: [10, 10] + * }, function () { // done }) + * + * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing + * el.animateTo({ + * shape: { + * width: 500 + * }, + * style: { + * fill: 'red' + * } + * position: [10, 10] + * }, 100, 100, 'cubicOut', function () { // done }) + */ + // TODO Return animation key + animateTo: function (target, time, delay, easing, callback, forceAnimate) { + animateTo(this, target, time, delay, easing, callback, forceAnimate); + }, + + /** + * Animate from the target state to current state. + * The params and the return value are the same as `this.animateTo`. + */ + animateFrom: function (target, time, delay, easing, callback, forceAnimate) { + animateTo(this, target, time, delay, easing, callback, forceAnimate, true); + } +}; + +function animateTo(animatable, target, time, delay, easing, callback, forceAnimate, reverse) { + // animateTo(target, time, easing, callback); + if (isString(delay)) { + callback = easing; + easing = delay; + delay = 0; + } + // animateTo(target, time, delay, callback); + else if (isFunction$1(easing)) { + callback = easing; + easing = 'linear'; + delay = 0; + } + // animateTo(target, time, callback); + else if (isFunction$1(delay)) { + callback = delay; + delay = 0; + } + // animateTo(target, callback) + else if (isFunction$1(time)) { + callback = time; + time = 500; + } + // animateTo(target) + else if (!time) { + time = 500; + } + // Stop all previous animations + animatable.stopAnimation(); + animateToShallow(animatable, '', animatable, target, time, delay, reverse); + + // Animators may be removed immediately after start + // if there is nothing to animate + var animators = animatable.animators.slice(); + var count = animators.length; + function done() { + count--; + if (!count) { + callback && callback(); + } + } + + // No animators. This should be checked before animators[i].start(), + // because 'done' may be executed immediately if no need to animate. + if (!count) { + callback && callback(); + } + // Start after all animators created + // Incase any animator is done immediately when all animation properties are not changed + for (var i = 0; i < animators.length; i++) { + animators[i] + .done(done) + .start(easing, forceAnimate); + } +} + +/** + * @param {string} path='' + * @param {Object} source=animatable + * @param {Object} target + * @param {number} [time=500] + * @param {number} [delay=0] + * @param {boolean} [reverse] If `true`, animate + * from the `target` to current state. + * + * @example + * // Animate position + * el._animateToShallow({ + * position: [10, 10] + * }) + * + * // Animate shape, style and position in 100ms, delayed 100ms + * el._animateToShallow({ + * shape: { + * width: 500 + * }, + * style: { + * fill: 'red' + * } + * position: [10, 10] + * }, 100, 100) + */ +function animateToShallow(animatable, path, source, target, time, delay, reverse) { + var objShallow = {}; + var propertyCount = 0; + for (var name in target) { + if (!target.hasOwnProperty(name)) { + continue; + } + + if (source[name] != null) { + if (isObject$1(target[name]) && !isArrayLike(target[name])) { + animateToShallow( + animatable, + path ? path + '.' + name : name, + source[name], + target[name], + time, + delay, + reverse + ); + } + else { + if (reverse) { + objShallow[name] = source[name]; + setAttrByPath(animatable, path, name, target[name]); + } + else { + objShallow[name] = target[name]; + } + propertyCount++; + } + } + else if (target[name] != null && !reverse) { + setAttrByPath(animatable, path, name, target[name]); + } + } + + if (propertyCount > 0) { + animatable.animate(path, false) + .when(time == null ? 500 : time, objShallow) + .delay(delay || 0); + } +} + +function setAttrByPath(el, path, name, value) { + // Attr directly if not has property + // FIXME, if some property not needed for element ? + if (!path) { + el.attr(name, value); + } + else { + // Only support set shape or style + var props = {}; + props[path] = {}; + props[path][name] = value; + el.attr(props); + } +} + +/** + * @alias module:zrender/Element + * @constructor + * @extends {module:zrender/mixin/Animatable} + * @extends {module:zrender/mixin/Transformable} + * @extends {module:zrender/mixin/Eventful} + */ +var Element = function (opts) { // jshint ignore:line + + Transformable.call(this, opts); + Eventful.call(this, opts); + Animatable.call(this, opts); + + /** + * 画布元素ID + * @type {string} + */ + this.id = opts.id || guid(); +}; + +Element.prototype = { + + /** + * 元素类型 + * Element type + * @type {string} + */ + type: 'element', + + /** + * 元素名字 + * Element name + * @type {string} + */ + name: '', + + /** + * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值 + * ZRender instance will be assigned when element is associated with zrender + * @name module:/zrender/Element#__zr + * @type {module:zrender/ZRender} + */ + __zr: null, + + /** + * 图形是否忽略,为true时忽略图形的绘制以及事件触发 + * If ignore drawing and events of the element object + * @name module:/zrender/Element#ignore + * @type {boolean} + * @default false + */ + ignore: false, + + /** + * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪 + * 该路径会继承被裁减对象的变换 + * @type {module:zrender/graphic/Path} + * @see http://www.w3.org/TR/2dcontext/#clipping-region + * @readOnly + */ + clipPath: null, + + /** + * 是否是 Group + * @type {boolean} + */ + isGroup: false, + + /** + * Drift element + * @param {number} dx dx on the global space + * @param {number} dy dy on the global space + */ + drift: function (dx, dy) { + switch (this.draggable) { + case 'horizontal': + dy = 0; + break; + case 'vertical': + dx = 0; + break; + } + + var m = this.transform; + if (!m) { + m = this.transform = [1, 0, 0, 1, 0, 0]; + } + m[4] += dx; + m[5] += dy; + + this.decomposeTransform(); + this.dirty(false); + }, + + /** + * Hook before update + */ + beforeUpdate: function () {}, + /** + * Hook after update + */ + afterUpdate: function () {}, + /** + * Update each frame + */ + update: function () { + this.updateTransform(); + }, + + /** + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) {}, + + /** + * @protected + */ + attrKV: function (key, value) { + if (key === 'position' || key === 'scale' || key === 'origin') { + // Copy the array + if (value) { + var target = this[key]; + if (!target) { + target = this[key] = []; + } + target[0] = value[0]; + target[1] = value[1]; + } + } + else { + this[key] = value; + } + }, + + /** + * Hide the element + */ + hide: function () { + this.ignore = true; + this.__zr && this.__zr.refresh(); + }, + + /** + * Show the element + */ + show: function () { + this.ignore = false; + this.__zr && this.__zr.refresh(); + }, + + /** + * @param {string|Object} key + * @param {*} value + */ + attr: function (key, value) { + if (typeof key === 'string') { + this.attrKV(key, value); + } + else if (isObject$1(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.attrKV(name, key[name]); + } + } + } + + this.dirty(false); + + return this; + }, + + /** + * @param {module:zrender/graphic/Path} clipPath + */ + setClipPath: function (clipPath) { + var zr = this.__zr; + if (zr) { + clipPath.addSelfToZr(zr); + } + + // Remove previous clip path + if (this.clipPath && this.clipPath !== clipPath) { + this.removeClipPath(); + } + + this.clipPath = clipPath; + clipPath.__zr = zr; + clipPath.__clipTarget = this; + + this.dirty(false); + }, + + /** + */ + removeClipPath: function () { + var clipPath = this.clipPath; + if (clipPath) { + if (clipPath.__zr) { + clipPath.removeSelfFromZr(clipPath.__zr); + } + + clipPath.__zr = null; + clipPath.__clipTarget = null; + this.clipPath = null; + + this.dirty(false); + } + }, + + /** + * Add self from zrender instance. + * Not recursively because it will be invoked when element added to storage. + * @param {module:zrender/ZRender} zr + */ + addSelfToZr: function (zr) { + this.__zr = zr; + // 添加动画 + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.addAnimator(animators[i]); + } + } + + if (this.clipPath) { + this.clipPath.addSelfToZr(zr); + } + }, + + /** + * Remove self from zrender instance. + * Not recursively because it will be invoked when element added to storage. + * @param {module:zrender/ZRender} zr + */ + removeSelfFromZr: function (zr) { + this.__zr = null; + // 移除动画 + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.removeAnimator(animators[i]); + } + } + + if (this.clipPath) { + this.clipPath.removeSelfFromZr(zr); + } + } +}; + +mixin(Element, Animatable); +mixin(Element, Transformable); +mixin(Element, Eventful); + +/** + * @module echarts/core/BoundingRect + */ + +var v2ApplyTransform = applyTransform; +var mathMin = Math.min; +var mathMax = Math.max; + +/** + * @alias module:echarts/core/BoundingRect + */ +function BoundingRect(x, y, width, height) { + + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + + /** + * @type {number} + */ + this.x = x; + /** + * @type {number} + */ + this.y = y; + /** + * @type {number} + */ + this.width = width; + /** + * @type {number} + */ + this.height = height; +} + +BoundingRect.prototype = { + + constructor: BoundingRect, + + /** + * @param {module:echarts/core/BoundingRect} other + */ + union: function (other) { + var x = mathMin(other.x, this.x); + var y = mathMin(other.y, this.y); + + this.width = mathMax( + other.x + other.width, + this.x + this.width + ) - x; + this.height = mathMax( + other.y + other.height, + this.y + this.height + ) - y; + this.x = x; + this.y = y; + }, + + /** + * @param {Array.} m + * @methods + */ + applyTransform: (function () { + var lt = []; + var rb = []; + var lb = []; + var rt = []; + return function (m) { + // In case usage like this + // el.getBoundingRect().applyTransform(el.transform) + // And element has no transform + if (!m) { + return; + } + lt[0] = lb[0] = this.x; + lt[1] = rt[1] = this.y; + rb[0] = rt[0] = this.x + this.width; + rb[1] = lb[1] = this.y + this.height; + + v2ApplyTransform(lt, lt, m); + v2ApplyTransform(rb, rb, m); + v2ApplyTransform(lb, lb, m); + v2ApplyTransform(rt, rt, m); + + this.x = mathMin(lt[0], rb[0], lb[0], rt[0]); + this.y = mathMin(lt[1], rb[1], lb[1], rt[1]); + var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]); + var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]); + this.width = maxX - this.x; + this.height = maxY - this.y; + }; + })(), + + /** + * Calculate matrix of transforming from self to target rect + * @param {module:zrender/core/BoundingRect} b + * @return {Array.} + */ + calculateTransform: function (b) { + var a = this; + var sx = b.width / a.width; + var sy = b.height / a.height; + + var m = create$1(); + + // 矩阵右乘 + translate(m, m, [-a.x, -a.y]); + scale$1(m, m, [sx, sy]); + translate(m, m, [b.x, b.y]); + + return m; + }, + + /** + * @param {(module:echarts/core/BoundingRect|Object)} b + * @return {boolean} + */ + intersect: function (b) { + if (!b) { + return false; + } + + if (!(b instanceof BoundingRect)) { + // Normalize negative width/height. + b = BoundingRect.create(b); + } + + var a = this; + var ax0 = a.x; + var ax1 = a.x + a.width; + var ay0 = a.y; + var ay1 = a.y + a.height; + + var bx0 = b.x; + var bx1 = b.x + b.width; + var by0 = b.y; + var by1 = b.y + b.height; + + return ! (ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0); + }, + + contain: function (x, y) { + var rect = this; + return x >= rect.x + && x <= (rect.x + rect.width) + && y >= rect.y + && y <= (rect.y + rect.height); + }, + + /** + * @return {module:echarts/core/BoundingRect} + */ + clone: function () { + return new BoundingRect(this.x, this.y, this.width, this.height); + }, + + /** + * Copy from another rect + */ + copy: function (other) { + this.x = other.x; + this.y = other.y; + this.width = other.width; + this.height = other.height; + }, + + plain: function () { + return { + x: this.x, + y: this.y, + width: this.width, + height: this.height + }; + } +}; + +/** + * @param {Object|module:zrender/core/BoundingRect} rect + * @param {number} rect.x + * @param {number} rect.y + * @param {number} rect.width + * @param {number} rect.height + * @return {module:zrender/core/BoundingRect} + */ +BoundingRect.create = function (rect) { + return new BoundingRect(rect.x, rect.y, rect.width, rect.height); +}; + +/** + * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上 + * @module zrender/graphic/Group + * @example + * var Group = require('zrender/container/Group'); + * var Circle = require('zrender/graphic/shape/Circle'); + * var g = new Group(); + * g.position[0] = 100; + * g.position[1] = 100; + * g.add(new Circle({ + * style: { + * x: 100, + * y: 100, + * r: 20, + * } + * })); + * zr.add(g); + */ + +/** + * @alias module:zrender/graphic/Group + * @constructor + * @extends module:zrender/mixin/Transformable + * @extends module:zrender/mixin/Eventful + */ +var Group = function (opts) { + + opts = opts || {}; + + Element.call(this, opts); + + for (var key in opts) { + if (opts.hasOwnProperty(key)) { + this[key] = opts[key]; + } + } + + this._children = []; + + this.__storage = null; + + this.__dirty = true; +}; + +Group.prototype = { + + constructor: Group, + + isGroup: true, + + /** + * @type {string} + */ + type: 'group', + + /** + * 所有子孙元素是否响应鼠标事件 + * @name module:/zrender/container/Group#silent + * @type {boolean} + * @default false + */ + silent: false, + + /** + * @return {Array.} + */ + children: function () { + return this._children.slice(); + }, + + /** + * 获取指定 index 的儿子节点 + * @param {number} idx + * @return {module:zrender/Element} + */ + childAt: function (idx) { + return this._children[idx]; + }, + + /** + * 获取指定名字的儿子节点 + * @param {string} name + * @return {module:zrender/Element} + */ + childOfName: function (name) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + if (children[i].name === name) { + return children[i]; + } + } + }, + + /** + * @return {number} + */ + childCount: function () { + return this._children.length; + }, + + /** + * 添加子节点到最后 + * @param {module:zrender/Element} child + */ + add: function (child) { + if (child && child !== this && child.parent !== this) { + + this._children.push(child); + + this._doAdd(child); + } + + return this; + }, + + /** + * 添加子节点在 nextSibling 之前 + * @param {module:zrender/Element} child + * @param {module:zrender/Element} nextSibling + */ + addBefore: function (child, nextSibling) { + if (child && child !== this && child.parent !== this + && nextSibling && nextSibling.parent === this) { + + var children = this._children; + var idx = children.indexOf(nextSibling); + + if (idx >= 0) { + children.splice(idx, 0, child); + this._doAdd(child); + } + } + + return this; + }, + + _doAdd: function (child) { + if (child.parent) { + child.parent.remove(child); + } + + child.parent = this; + + var storage = this.__storage; + var zr = this.__zr; + if (storage && storage !== child.__storage) { + + storage.addToStorage(child); + + if (child instanceof Group) { + child.addChildrenToStorage(storage); + } + } + + zr && zr.refresh(); + }, + + /** + * 移除子节点 + * @param {module:zrender/Element} child + */ + remove: function (child) { + var zr = this.__zr; + var storage = this.__storage; + var children = this._children; + + var idx = indexOf(children, child); + if (idx < 0) { + return this; + } + children.splice(idx, 1); + + child.parent = null; + + if (storage) { + + storage.delFromStorage(child); + + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + + zr && zr.refresh(); + + return this; + }, + + /** + * 移除所有子节点 + */ + removeAll: function () { + var children = this._children; + var storage = this.__storage; + var child; + var i; + for (i = 0; i < children.length; i++) { + child = children[i]; + if (storage) { + storage.delFromStorage(child); + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + child.parent = null; + } + children.length = 0; + + return this; + }, + + /** + * 遍历所有子节点 + * @param {Function} cb + * @param {} context + */ + eachChild: function (cb, context) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + cb.call(context, child, i); + } + return this; + }, + + /** + * 深度优先遍历所有子孙节点 + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + cb.call(context, child); + + if (child.type === 'group') { + child.traverse(cb, context); + } + } + return this; + }, + + addChildrenToStorage: function (storage) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + storage.addToStorage(child); + if (child instanceof Group) { + child.addChildrenToStorage(storage); + } + } + }, + + delChildrenFromStorage: function (storage) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + storage.delFromStorage(child); + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + }, + + dirty: function () { + this.__dirty = true; + this.__zr && this.__zr.refresh(); + return this; + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function (includeChildren) { + // TODO Caching + var rect = null; + var tmpRect = new BoundingRect(0, 0, 0, 0); + var children = includeChildren || this._children; + var tmpMat = []; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.ignore || child.invisible) { + continue; + } + + var childRect = child.getBoundingRect(); + var transform = child.getLocalTransform(tmpMat); + // TODO + // The boundingRect cacluated by transforming original + // rect may be bigger than the actual bundingRect when rotation + // is used. (Consider a circle rotated aginst its center, where + // the actual boundingRect should be the same as that not be + // rotated.) But we can not find better approach to calculate + // actual boundingRect yet, considering performance. + if (transform) { + tmpRect.copy(childRect); + tmpRect.applyTransform(transform); + rect = rect || tmpRect.clone(); + rect.union(tmpRect); + } + else { + rect = rect || childRect.clone(); + rect.union(childRect); + } + } + return rect || tmpRect; + } +}; + +inherits(Group, Element); + +// https://github.com/mziccard/node-timsort +var DEFAULT_MIN_MERGE = 32; + +var DEFAULT_MIN_GALLOPING = 7; + +function minRunLength(n) { + var r = 0; + + while (n >= DEFAULT_MIN_MERGE) { + r |= n & 1; + n >>= 1; + } + + return n + r; +} + +function makeAscendingRun(array, lo, hi, compare) { + var runHi = lo + 1; + + if (runHi === hi) { + return 1; + } + + if (compare(array[runHi++], array[lo]) < 0) { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) { + runHi++; + } + + reverseRun(array, lo, runHi); + } + else { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) { + runHi++; + } + } + + return runHi - lo; +} + +function reverseRun(array, lo, hi) { + hi--; + + while (lo < hi) { + var t = array[lo]; + array[lo++] = array[hi]; + array[hi--] = t; + } +} + +function binaryInsertionSort(array, lo, hi, start, compare) { + if (start === lo) { + start++; + } + + for (; start < hi; start++) { + var pivot = array[start]; + + var left = lo; + var right = start; + var mid; + + while (left < right) { + mid = left + right >>> 1; + + if (compare(pivot, array[mid]) < 0) { + right = mid; + } + else { + left = mid + 1; + } + } + + var n = start - left; + + switch (n) { + case 3: + array[left + 3] = array[left + 2]; + + case 2: + array[left + 2] = array[left + 1]; + + case 1: + array[left + 1] = array[left]; + break; + default: + while (n > 0) { + array[left + n] = array[left + n - 1]; + n--; + } + } + + array[left] = pivot; + } +} + +function gallopLeft(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + + if (compare(value, array[start + hint]) > 0) { + maxOffset = length - hint; + + while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + lastOffset += hint; + offset += hint; + } + else { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + + if (compare(value, array[start + m]) > 0) { + lastOffset = m + 1; + } + else { + offset = m; + } + } + return offset; +} + +function gallopRight(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + + if (compare(value, array[start + hint]) < 0) { + maxOffset = hint + 1; + + while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + else { + maxOffset = length - hint; + + while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + lastOffset += hint; + offset += hint; + } + + lastOffset++; + + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + + if (compare(value, array[start + m]) < 0) { + offset = m; + } + else { + lastOffset = m + 1; + } + } + + return offset; +} + +function TimSort(array, compare) { + var minGallop = DEFAULT_MIN_GALLOPING; + var runStart; + var runLength; + var stackSize = 0; + + var tmp = []; + + runStart = []; + runLength = []; + + function pushRun(_runStart, _runLength) { + runStart[stackSize] = _runStart; + runLength[stackSize] = _runLength; + stackSize += 1; + } + + function mergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + + if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) { + if (runLength[n - 1] < runLength[n + 1]) { + n--; + } + } + else if (runLength[n] > runLength[n + 1]) { + break; + } + mergeAt(n); + } + } + + function forceMergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + + if (n > 0 && runLength[n - 1] < runLength[n + 1]) { + n--; + } + + mergeAt(n); + } + } + + function mergeAt(i) { + var start1 = runStart[i]; + var length1 = runLength[i]; + var start2 = runStart[i + 1]; + var length2 = runLength[i + 1]; + + runLength[i] = length1 + length2; + + if (i === stackSize - 3) { + runStart[i + 1] = runStart[i + 2]; + runLength[i + 1] = runLength[i + 2]; + } + + stackSize--; + + var k = gallopRight(array[start2], array, start1, length1, 0, compare); + start1 += k; + length1 -= k; + + if (length1 === 0) { + return; + } + + length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); + + if (length2 === 0) { + return; + } + + if (length1 <= length2) { + mergeLow(start1, length1, start2, length2); + } + else { + mergeHigh(start1, length1, start2, length2); + } + } + + function mergeLow(start1, length1, start2, length2) { + var i = 0; + + for (i = 0; i < length1; i++) { + tmp[i] = array[start1 + i]; + } + + var cursor1 = 0; + var cursor2 = start2; + var dest = start1; + + array[dest++] = array[cursor2++]; + + if (--length2 === 0) { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + return; + } + + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + return; + } + + var _minGallop = minGallop; + var count1, count2, exit; + + while (1) { + count1 = 0; + count2 = 0; + exit = false; + + do { + if (compare(array[cursor2], tmp[cursor1]) < 0) { + array[dest++] = array[cursor2++]; + count2++; + count1 = 0; + + if (--length2 === 0) { + exit = true; + break; + } + } + else { + array[dest++] = tmp[cursor1++]; + count1++; + count2 = 0; + if (--length1 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + + if (exit) { + break; + } + + do { + count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); + + if (count1 !== 0) { + for (i = 0; i < count1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + + dest += count1; + cursor1 += count1; + length1 -= count1; + if (length1 <= 1) { + exit = true; + break; + } + } + + array[dest++] = array[cursor2++]; + + if (--length2 === 0) { + exit = true; + break; + } + + count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); + + if (count2 !== 0) { + for (i = 0; i < count2; i++) { + array[dest + i] = array[cursor2 + i]; + } + + dest += count2; + cursor2 += count2; + length2 -= count2; + + if (length2 === 0) { + exit = true; + break; + } + } + array[dest++] = tmp[cursor1++]; + + if (--length1 === 1) { + exit = true; + break; + } + + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + + if (exit) { + break; + } + + if (_minGallop < 0) { + _minGallop = 0; + } + + _minGallop += 2; + } + + minGallop = _minGallop; + + minGallop < 1 && (minGallop = 1); + + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + } + else if (length1 === 0) { + throw new Error(); + // throw new Error('mergeLow preconditions were not respected'); + } + else { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + } + } + + function mergeHigh (start1, length1, start2, length2) { + var i = 0; + + for (i = 0; i < length2; i++) { + tmp[i] = array[start2 + i]; + } + + var cursor1 = start1 + length1 - 1; + var cursor2 = length2 - 1; + var dest = start2 + length2 - 1; + var customCursor = 0; + var customDest = 0; + + array[dest--] = array[cursor1--]; + + if (--length1 === 0) { + customCursor = dest - (length2 - 1); + + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + + return; + } + + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + array[dest] = tmp[cursor2]; + return; + } + + var _minGallop = minGallop; + + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + + do { + if (compare(tmp[cursor2], array[cursor1]) < 0) { + array[dest--] = array[cursor1--]; + count1++; + count2 = 0; + if (--length1 === 0) { + exit = true; + break; + } + } + else { + array[dest--] = tmp[cursor2--]; + count2++; + count1 = 0; + if (--length2 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + + if (exit) { + break; + } + + do { + count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); + + if (count1 !== 0) { + dest -= count1; + cursor1 -= count1; + length1 -= count1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = count1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + if (length1 === 0) { + exit = true; + break; + } + } + + array[dest--] = tmp[cursor2--]; + + if (--length2 === 1) { + exit = true; + break; + } + + count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); + + if (count2 !== 0) { + dest -= count2; + cursor2 -= count2; + length2 -= count2; + customDest = dest + 1; + customCursor = cursor2 + 1; + + for (i = 0; i < count2; i++) { + array[customDest + i] = tmp[customCursor + i]; + } + + if (length2 <= 1) { + exit = true; + break; + } + } + + array[dest--] = array[cursor1--]; + + if (--length1 === 0) { + exit = true; + break; + } + + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + + if (exit) { + break; + } + + if (_minGallop < 0) { + _minGallop = 0; + } + + _minGallop += 2; + } + + minGallop = _minGallop; + + if (minGallop < 1) { + minGallop = 1; + } + + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + array[dest] = tmp[cursor2]; + } + else if (length2 === 0) { + throw new Error(); + // throw new Error('mergeHigh preconditions were not respected'); + } + else { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + } + } + + this.mergeRuns = mergeRuns; + this.forceMergeRuns = forceMergeRuns; + this.pushRun = pushRun; +} + +function sort(array, compare, lo, hi) { + if (!lo) { + lo = 0; + } + if (!hi) { + hi = array.length; + } + + var remaining = hi - lo; + + if (remaining < 2) { + return; + } + + var runLength = 0; + + if (remaining < DEFAULT_MIN_MERGE) { + runLength = makeAscendingRun(array, lo, hi, compare); + binaryInsertionSort(array, lo, hi, lo + runLength, compare); + return; + } + + var ts = new TimSort(array, compare); + + var minRun = minRunLength(remaining); + + do { + runLength = makeAscendingRun(array, lo, hi, compare); + if (runLength < minRun) { + var force = remaining; + if (force > minRun) { + force = minRun; + } + + binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); + runLength = force; + } + + ts.pushRun(lo, runLength); + ts.mergeRuns(); + + remaining -= runLength; + lo += runLength; + } while (remaining !== 0); + + ts.forceMergeRuns(); +} + +// Use timsort because in most case elements are partially sorted +// https://jsfiddle.net/pissang/jr4x7mdm/8/ +function shapeCompareFunc(a, b) { + if (a.zlevel === b.zlevel) { + if (a.z === b.z) { + // if (a.z2 === b.z2) { + // // FIXME Slow has renderidx compare + // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement + // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012 + // return a.__renderidx - b.__renderidx; + // } + return a.z2 - b.z2; + } + return a.z - b.z; + } + return a.zlevel - b.zlevel; +} +/** + * 内容仓库 (M) + * @alias module:zrender/Storage + * @constructor + */ +var Storage = function () { // jshint ignore:line + this._roots = []; + + this._displayList = []; + + this._displayListLen = 0; +}; + +Storage.prototype = { + + constructor: Storage, + + /** + * @param {Function} cb + * + */ + traverse: function (cb, context) { + for (var i = 0; i < this._roots.length; i++) { + this._roots[i].traverse(cb, context); + } + }, + + /** + * 返回所有图形的绘制队列 + * @param {boolean} [update=false] 是否在返回前更新该数组 + * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效 + * + * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList} + * @return {Array.} + */ + getDisplayList: function (update, includeIgnore) { + includeIgnore = includeIgnore || false; + if (update) { + this.updateDisplayList(includeIgnore); + } + return this._displayList; + }, + + /** + * 更新图形的绘制队列。 + * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中, + * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列 + * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组 + */ + updateDisplayList: function (includeIgnore) { + this._displayListLen = 0; + + var roots = this._roots; + var displayList = this._displayList; + for (var i = 0, len = roots.length; i < len; i++) { + this._updateAndAddDisplayable(roots[i], null, includeIgnore); + } + + displayList.length = this._displayListLen; + + env$1.canvasSupported && sort(displayList, shapeCompareFunc); + }, + + _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) { + + if (el.ignore && !includeIgnore) { + return; + } + + el.beforeUpdate(); + + if (el.__dirty) { + + el.update(); + + } + + el.afterUpdate(); + + var userSetClipPath = el.clipPath; + if (userSetClipPath) { + + // FIXME 效率影响 + if (clipPaths) { + clipPaths = clipPaths.slice(); + } + else { + clipPaths = []; + } + + var currentClipPath = userSetClipPath; + var parentClipPath = el; + // Recursively add clip path + while (currentClipPath) { + // clipPath 的变换是基于使用这个 clipPath 的元素 + currentClipPath.parent = parentClipPath; + currentClipPath.updateTransform(); + + clipPaths.push(currentClipPath); + + parentClipPath = currentClipPath; + currentClipPath = currentClipPath.clipPath; + } + } + + if (el.isGroup) { + var children = el._children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + // Force to mark as dirty if group is dirty + // FIXME __dirtyPath ? + if (el.__dirty) { + child.__dirty = true; + } + + this._updateAndAddDisplayable(child, clipPaths, includeIgnore); + } + + // Mark group clean here + el.__dirty = false; + + } + else { + el.__clipPaths = clipPaths; + + this._displayList[this._displayListLen++] = el; + } + }, + + /** + * 添加图形(Shape)或者组(Group)到根节点 + * @param {module:zrender/Element} el + */ + addRoot: function (el) { + if (el.__storage === this) { + return; + } + + if (el instanceof Group) { + el.addChildrenToStorage(this); + } + + this.addToStorage(el); + this._roots.push(el); + }, + + /** + * 删除指定的图形(Shape)或者组(Group) + * @param {string|Array.} [el] 如果为空清空整个Storage + */ + delRoot: function (el) { + if (el == null) { + // 不指定el清空 + for (var i = 0; i < this._roots.length; i++) { + var root = this._roots[i]; + if (root instanceof Group) { + root.delChildrenFromStorage(this); + } + } + + this._roots = []; + this._displayList = []; + this._displayListLen = 0; + + return; + } + + if (el instanceof Array) { + for (var i = 0, l = el.length; i < l; i++) { + this.delRoot(el[i]); + } + return; + } + + + var idx = indexOf(this._roots, el); + if (idx >= 0) { + this.delFromStorage(el); + this._roots.splice(idx, 1); + if (el instanceof Group) { + el.delChildrenFromStorage(this); + } + } + }, + + addToStorage: function (el) { + if (el) { + el.__storage = this; + el.dirty(false); + } + return this; + }, + + delFromStorage: function (el) { + if (el) { + el.__storage = null; + } + + return this; + }, + + /** + * 清空并且释放Storage + */ + dispose: function () { + this._renderList = + this._roots = null; + }, + + displayableSortFunc: shapeCompareFunc +}; + +var SHADOW_PROPS = { + 'shadowBlur': 1, + 'shadowOffsetX': 1, + 'shadowOffsetY': 1, + 'textShadowBlur': 1, + 'textShadowOffsetX': 1, + 'textShadowOffsetY': 1, + 'textBoxShadowBlur': 1, + 'textBoxShadowOffsetX': 1, + 'textBoxShadowOffsetY': 1 +}; + +var fixShadow = function (ctx, propName, value) { + if (SHADOW_PROPS.hasOwnProperty(propName)) { + return value *= ctx.dpr; + } + return value; +}; + +var STYLE_COMMON_PROPS = [ + ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'], + ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10] +]; + +// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4); +// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4); + +var Style = function (opts) { + this.extendFrom(opts, false); +}; + +function createLinearGradient(ctx, obj, rect) { + var x = obj.x == null ? 0 : obj.x; + var x2 = obj.x2 == null ? 1 : obj.x2; + var y = obj.y == null ? 0 : obj.y; + var y2 = obj.y2 == null ? 0 : obj.y2; + + if (!obj.global) { + x = x * rect.width + rect.x; + x2 = x2 * rect.width + rect.x; + y = y * rect.height + rect.y; + y2 = y2 * rect.height + rect.y; + } + + // Fix NaN when rect is Infinity + x = isNaN(x) ? 0 : x; + x2 = isNaN(x2) ? 1 : x2; + y = isNaN(y) ? 0 : y; + y2 = isNaN(y2) ? 0 : y2; + + var canvasGradient = ctx.createLinearGradient(x, y, x2, y2); + + return canvasGradient; +} + +function createRadialGradient(ctx, obj, rect) { + var width = rect.width; + var height = rect.height; + var min = Math.min(width, height); + + var x = obj.x == null ? 0.5 : obj.x; + var y = obj.y == null ? 0.5 : obj.y; + var r = obj.r == null ? 0.5 : obj.r; + if (!obj.global) { + x = x * width + rect.x; + y = y * height + rect.y; + r = r * min; + } + + var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); + + return canvasGradient; +} + + +Style.prototype = { + + constructor: Style, + + /** + * @type {string} + */ + fill: '#000', + + /** + * @type {string} + */ + stroke: null, + + /** + * @type {number} + */ + opacity: 1, + + /** + * @type {number} + */ + fillOpacity: null, + + /** + * @type {number} + */ + strokeOpacity: null, + + /** + * @type {Array.} + */ + lineDash: null, + + /** + * @type {number} + */ + lineDashOffset: 0, + + /** + * @type {number} + */ + shadowBlur: 0, + + /** + * @type {number} + */ + shadowOffsetX: 0, + + /** + * @type {number} + */ + shadowOffsetY: 0, + + /** + * @type {number} + */ + lineWidth: 1, + + /** + * If stroke ignore scale + * @type {Boolean} + */ + strokeNoScale: false, + + // Bounding rect text configuration + // Not affected by element transform + /** + * @type {string} + */ + text: null, + + /** + * If `fontSize` or `fontFamily` exists, `font` will be reset by + * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`. + * So do not visit it directly in upper application (like echarts), + * but use `contain/text#makeFont` instead. + * @type {string} + */ + font: null, + + /** + * The same as font. Use font please. + * @deprecated + * @type {string} + */ + textFont: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontStyle: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontWeight: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * Should be 12 but not '12px'. + * @type {number} + */ + fontSize: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontFamily: null, + + /** + * Reserved for special functinality, like 'hr'. + * @type {string} + */ + textTag: null, + + /** + * @type {string} + */ + textFill: '#000', + + /** + * @type {string} + */ + textStroke: null, + + /** + * @type {number} + */ + textWidth: null, + + /** + * Only for textBackground. + * @type {number} + */ + textHeight: null, + + /** + * textStroke may be set as some color as a default + * value in upper applicaion, where the default value + * of textStrokeWidth should be 0 to make sure that + * user can choose to do not use text stroke. + * @type {number} + */ + textStrokeWidth: 0, + + /** + * @type {number} + */ + textLineHeight: null, + + /** + * 'inside', 'left', 'right', 'top', 'bottom' + * [x, y] + * Based on x, y of rect. + * @type {string|Array.} + * @default 'inside' + */ + textPosition: 'inside', + + /** + * If not specified, use the boundingRect of a `displayable`. + * @type {Object} + */ + textRect: null, + + /** + * [x, y] + * @type {Array.} + */ + textOffset: null, + + /** + * @type {string} + */ + textAlign: null, + + /** + * @type {string} + */ + textVerticalAlign: null, + + /** + * @type {number} + */ + textDistance: 5, + + /** + * @type {string} + */ + textShadowColor: 'transparent', + + /** + * @type {number} + */ + textShadowBlur: 0, + + /** + * @type {number} + */ + textShadowOffsetX: 0, + + /** + * @type {number} + */ + textShadowOffsetY: 0, + + /** + * @type {string} + */ + textBoxShadowColor: 'transparent', + + /** + * @type {number} + */ + textBoxShadowBlur: 0, + + /** + * @type {number} + */ + textBoxShadowOffsetX: 0, + + /** + * @type {number} + */ + textBoxShadowOffsetY: 0, + + /** + * Whether transform text. + * Only useful in Path and Image element + * @type {boolean} + */ + transformText: false, + + /** + * Text rotate around position of Path or Image + * Only useful in Path and Image element and transformText is false. + */ + textRotation: 0, + + /** + * Text origin of text rotation, like [10, 40]. + * Based on x, y of rect. + * Useful in label rotation of circular symbol. + * By default, this origin is textPosition. + * Can be 'center'. + * @type {string|Array.} + */ + textOrigin: null, + + /** + * @type {string} + */ + textBackgroundColor: null, + + /** + * @type {string} + */ + textBorderColor: null, + + /** + * @type {number} + */ + textBorderWidth: 0, + + /** + * @type {number} + */ + textBorderRadius: 0, + + /** + * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]` + * @type {number|Array.} + */ + textPadding: null, + + /** + * Text styles for rich text. + * @type {Object} + */ + rich: null, + + /** + * {outerWidth, outerHeight, ellipsis, placeholder} + * @type {Object} + */ + truncate: null, + + /** + * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation + * @type {string} + */ + blend: null, + + /** + * @param {CanvasRenderingContext2D} ctx + */ + bind: function (ctx, el, prevEl) { + var style = this; + var prevStyle = prevEl && prevEl.style; + var firstDraw = !prevStyle; + + for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { + var prop = STYLE_COMMON_PROPS[i]; + var styleName = prop[0]; + + if (firstDraw || style[styleName] !== prevStyle[styleName]) { + // FIXME Invalid property value will cause style leak from previous element. + ctx[styleName] = + fixShadow(ctx, styleName, style[styleName] || prop[1]); + } + } + + if ((firstDraw || style.fill !== prevStyle.fill)) { + ctx.fillStyle = style.fill; + } + if ((firstDraw || style.stroke !== prevStyle.stroke)) { + ctx.strokeStyle = style.stroke; + } + if ((firstDraw || style.opacity !== prevStyle.opacity)) { + ctx.globalAlpha = style.opacity == null ? 1 : style.opacity; + } + + if ((firstDraw || style.blend !== prevStyle.blend)) { + ctx.globalCompositeOperation = style.blend || 'source-over'; + } + if (this.hasStroke()) { + var lineWidth = style.lineWidth; + ctx.lineWidth = lineWidth / ( + (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1 + ); + } + }, + + hasFill: function () { + var fill = this.fill; + return fill != null && fill !== 'none'; + }, + + hasStroke: function () { + var stroke = this.stroke; + return stroke != null && stroke !== 'none' && this.lineWidth > 0; + }, + + /** + * Extend from other style + * @param {zrender/graphic/Style} otherStyle + * @param {boolean} overwrite true: overwrirte any way. + * false: overwrite only when !target.hasOwnProperty + * others: overwrite when property is not null/undefined. + */ + extendFrom: function (otherStyle, overwrite) { + if (otherStyle) { + for (var name in otherStyle) { + if (otherStyle.hasOwnProperty(name) + && (overwrite === true + || ( + overwrite === false + ? !this.hasOwnProperty(name) + : otherStyle[name] != null + ) + ) + ) { + this[name] = otherStyle[name]; + } + } + } + }, + + /** + * Batch setting style with a given object + * @param {Object|string} obj + * @param {*} [obj] + */ + set: function (obj, value) { + if (typeof obj === 'string') { + this[obj] = value; + } + else { + this.extendFrom(obj, true); + } + }, + + /** + * Clone + * @return {zrender/graphic/Style} [description] + */ + clone: function () { + var newStyle = new this.constructor(); + newStyle.extendFrom(this, true); + return newStyle; + }, + + getGradient: function (ctx, obj, rect) { + var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient; + var canvasGradient = method(ctx, obj, rect); + var colorStops = obj.colorStops; + for (var i = 0; i < colorStops.length; i++) { + canvasGradient.addColorStop( + colorStops[i].offset, colorStops[i].color + ); + } + return canvasGradient; + } + +}; + +var styleProto = Style.prototype; +for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { + var prop = STYLE_COMMON_PROPS[i]; + if (!(prop[0] in styleProto)) { + styleProto[prop[0]] = prop[1]; + } +} + +// Provide for others +Style.getGradient = styleProto.getGradient; + +var Pattern = function (image, repeat) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {image: ...}`, where this constructor will not be called. + + this.image = image; + this.repeat = repeat; + + // Can be cloned + this.type = 'pattern'; +}; + +Pattern.prototype.getCanvasPattern = function (ctx) { + return ctx.createPattern(this.image, this.repeat || 'repeat'); +}; + +/** + * @module zrender/Layer + * @author pissang(https://www.github.com/pissang) + */ + +function returnFalse() { + return false; +} + +/** + * 创建dom + * + * @inner + * @param {string} id dom id 待用 + * @param {Painter} painter painter instance + * @param {number} number + */ +function createDom(id, painter, dpr) { + var newDom = createCanvas(); + var width = painter.getWidth(); + var height = painter.getHeight(); + + var newDomStyle = newDom.style; + if (newDomStyle) { // In node or some other non-browser environment + newDomStyle.position = 'absolute'; + newDomStyle.left = 0; + newDomStyle.top = 0; + newDomStyle.width = width + 'px'; + newDomStyle.height = height + 'px'; + + newDom.setAttribute('data-zr-dom-id', id); + } + + newDom.width = width * dpr; + newDom.height = height * dpr; + + return newDom; +} + +/** + * @alias module:zrender/Layer + * @constructor + * @extends module:zrender/mixin/Transformable + * @param {string} id + * @param {module:zrender/Painter} painter + * @param {number} [dpr] + */ +var Layer = function(id, painter, dpr) { + var dom; + dpr = dpr || devicePixelRatio; + if (typeof id === 'string') { + dom = createDom(id, painter, dpr); + } + // Not using isDom because in node it will return false + else if (isObject$1(id)) { + dom = id; + id = dom.id; + } + this.id = id; + this.dom = dom; + + var domStyle = dom.style; + if (domStyle) { // Not in node + dom.onselectstart = returnFalse; // 避免页面选中的尴尬 + domStyle['-webkit-user-select'] = 'none'; + domStyle['user-select'] = 'none'; + domStyle['-webkit-touch-callout'] = 'none'; + domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)'; + domStyle['padding'] = 0; + domStyle['margin'] = 0; + domStyle['border-width'] = 0; + } + + this.domBack = null; + this.ctxBack = null; + + this.painter = painter; + + this.config = null; + + // Configs + /** + * 每次清空画布的颜色 + * @type {string} + * @default 0 + */ + this.clearColor = 0; + /** + * 是否开启动态模糊 + * @type {boolean} + * @default false + */ + this.motionBlur = false; + /** + * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 + * @type {number} + * @default 0.7 + */ + this.lastFrameAlpha = 0.7; + + /** + * Layer dpr + * @type {number} + */ + this.dpr = dpr; +}; + +Layer.prototype = { + + constructor: Layer, + + __dirty: true, + + __used: false, + + __drawIndex: 0, + __startIndex: 0, + __endIndex: 0, + + incremental: false, + + getElementCount: function () { + return this.__endIndex - this.__startIndex; + }, + + initContext: function () { + this.ctx = this.dom.getContext('2d'); + this.ctx.dpr = this.dpr; + }, + + createBackBuffer: function () { + var dpr = this.dpr; + + this.domBack = createDom('back-' + this.id, this.painter, dpr); + this.ctxBack = this.domBack.getContext('2d'); + + if (dpr != 1) { + this.ctxBack.scale(dpr, dpr); + } + }, + + /** + * @param {number} width + * @param {number} height + */ + resize: function (width, height) { + var dpr = this.dpr; + + var dom = this.dom; + var domStyle = dom.style; + var domBack = this.domBack; + + if (domStyle) { + domStyle.width = width + 'px'; + domStyle.height = height + 'px'; + } + + dom.width = width * dpr; + dom.height = height * dpr; + + if (domBack) { + domBack.width = width * dpr; + domBack.height = height * dpr; + + if (dpr != 1) { + this.ctxBack.scale(dpr, dpr); + } + } + }, + + /** + * 清空该层画布 + * @param {boolean} [clearAll]=false Clear all with out motion blur + * @param {Color} [clearColor] + */ + clear: function (clearAll, clearColor) { + var dom = this.dom; + var ctx = this.ctx; + var width = dom.width; + var height = dom.height; + + var clearColor = clearColor || this.clearColor; + var haveMotionBLur = this.motionBlur && !clearAll; + var lastFrameAlpha = this.lastFrameAlpha; + + var dpr = this.dpr; + + if (haveMotionBLur) { + if (!this.domBack) { + this.createBackBuffer(); + } + + this.ctxBack.globalCompositeOperation = 'copy'; + this.ctxBack.drawImage( + dom, 0, 0, + width / dpr, + height / dpr + ); + } + + ctx.clearRect(0, 0, width, height); + if (clearColor && clearColor !== 'transparent') { + var clearColorGradientOrPattern; + // Gradient + if (clearColor.colorStops) { + // Cache canvas gradient + clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, { + x: 0, + y: 0, + width: width, + height: height + }); + + clearColor.__canvasGradient = clearColorGradientOrPattern; + } + // Pattern + else if (clearColor.image) { + clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx); + } + ctx.save(); + ctx.fillStyle = clearColorGradientOrPattern || clearColor; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + } + + if (haveMotionBLur) { + var domBack = this.domBack; + ctx.save(); + ctx.globalAlpha = lastFrameAlpha; + ctx.drawImage(domBack, 0, 0, width, height); + ctx.restore(); + } + } +}; + +var requestAnimationFrame = ( + typeof window !== 'undefined' + && ( + (window.requestAnimationFrame && window.requestAnimationFrame.bind(window)) + // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809 + || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window)) + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + ) +) || function (func) { + setTimeout(func, 16); +}; + +var globalImageCache = new LRU(50); + +/** + * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc + * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image + */ +function findExistImage(newImageOrSrc) { + if (typeof newImageOrSrc === 'string') { + var cachedImgObj = globalImageCache.get(newImageOrSrc); + return cachedImgObj && cachedImgObj.image; + } + else { + return newImageOrSrc; + } +} + +/** + * Caution: User should cache loaded images, but not just count on LRU. + * Consider if required images more than LRU size, will dead loop occur? + * + * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc + * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image. + * @param {module:zrender/Element} [hostEl] For calling `dirty`. + * @param {Function} [cb] params: (image, cbPayload) + * @param {Object} [cbPayload] Payload on cb calling. + * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image + */ +function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) { + if (!newImageOrSrc) { + return image; + } + else if (typeof newImageOrSrc === 'string') { + + // Image should not be loaded repeatly. + if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) { + return image; + } + + // Only when there is no existent image or existent image src + // is different, this method is responsible for load. + var cachedImgObj = globalImageCache.get(newImageOrSrc); + + var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload}; + + if (cachedImgObj) { + image = cachedImgObj.image; + !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); + } + else { + !image && (image = new Image()); + image.onload = image.onerror = imageOnLoad; + + globalImageCache.put( + newImageOrSrc, + image.__cachedImgObj = { + image: image, + pending: [pendingWrap] + } + ); + + image.src = image.__zrImageSrc = newImageOrSrc; + } + + return image; + } + // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas + else { + return newImageOrSrc; + } +} + +function imageOnLoad() { + var cachedImgObj = this.__cachedImgObj; + this.onload = this.onerror = this.__cachedImgObj = null; + + for (var i = 0; i < cachedImgObj.pending.length; i++) { + var pendingWrap = cachedImgObj.pending[i]; + var cb = pendingWrap.cb; + cb && cb(this, pendingWrap.cbPayload); + pendingWrap.hostEl.dirty(); + } + cachedImgObj.pending.length = 0; +} + +function isImageReady(image) { + return image && image.width && image.height; +} + +var textWidthCache = {}; +var textWidthCacheCounter = 0; + +var TEXT_CACHE_MAX = 5000; +var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g; + +var DEFAULT_FONT = '12px sans-serif'; + +// Avoid assign to an exported variable, for transforming to cjs. +var methods$1 = {}; + +function $override$1(name, fn) { + methods$1[name] = fn; +} + +/** + * @public + * @param {string} text + * @param {string} font + * @return {number} width + */ +function getWidth(text, font) { + font = font || DEFAULT_FONT; + var key = text + ':' + font; + if (textWidthCache[key]) { + return textWidthCache[key]; + } + + var textLines = (text + '').split('\n'); + var width = 0; + + for (var i = 0, l = textLines.length; i < l; i++) { + // textContain.measureText may be overrided in SVG or VML + width = Math.max(measureText(textLines[i], font).width, width); + } + + if (textWidthCacheCounter > TEXT_CACHE_MAX) { + textWidthCacheCounter = 0; + textWidthCache = {}; + } + textWidthCacheCounter++; + textWidthCache[key] = width; + + return width; +} + +/** + * @public + * @param {string} text + * @param {string} font + * @param {string} [textAlign='left'] + * @param {string} [textVerticalAlign='top'] + * @param {Array.} [textPadding] + * @param {Object} [rich] + * @param {Object} [truncate] + * @return {Object} {x, y, width, height, lineHeight} + */ +function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) { + return rich + ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) + : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate); +} + +function getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate) { + var contentBlock = parsePlainText(text, font, textPadding, truncate); + var outerWidth = getWidth(text, font); + if (textPadding) { + outerWidth += textPadding[1] + textPadding[3]; + } + var outerHeight = contentBlock.outerHeight; + + var x = adjustTextX(0, outerWidth, textAlign); + var y = adjustTextY(0, outerHeight, textVerticalAlign); + + var rect = new BoundingRect(x, y, outerWidth, outerHeight); + rect.lineHeight = contentBlock.lineHeight; + + return rect; +} + +function getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) { + var contentBlock = parseRichText(text, { + rich: rich, + truncate: truncate, + font: font, + textAlign: textAlign, + textPadding: textPadding + }); + var outerWidth = contentBlock.outerWidth; + var outerHeight = contentBlock.outerHeight; + + var x = adjustTextX(0, outerWidth, textAlign); + var y = adjustTextY(0, outerHeight, textVerticalAlign); + + return new BoundingRect(x, y, outerWidth, outerHeight); +} + +/** + * @public + * @param {number} x + * @param {number} width + * @param {string} [textAlign='left'] + * @return {number} Adjusted x. + */ +function adjustTextX(x, width, textAlign) { + // FIXME Right to left language + if (textAlign === 'right') { + x -= width; + } + else if (textAlign === 'center') { + x -= width / 2; + } + return x; +} + +/** + * @public + * @param {number} y + * @param {number} height + * @param {string} [textVerticalAlign='top'] + * @return {number} Adjusted y. + */ +function adjustTextY(y, height, textVerticalAlign) { + if (textVerticalAlign === 'middle') { + y -= height / 2; + } + else if (textVerticalAlign === 'bottom') { + y -= height; + } + return y; +} + +/** + * @public + * @param {stirng} textPosition + * @param {Object} rect {x, y, width, height} + * @param {number} distance + * @return {Object} {x, y, textAlign, textVerticalAlign} + */ +function adjustTextPositionOnRect(textPosition, rect, distance) { + + var x = rect.x; + var y = rect.y; + + var height = rect.height; + var width = rect.width; + var halfHeight = height / 2; + + var textAlign = 'left'; + var textVerticalAlign = 'top'; + + switch (textPosition) { + case 'left': + x -= distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'right': + x += distance + width; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'top': + x += width / 2; + y -= distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'bottom': + x += width / 2; + y += height + distance; + textAlign = 'center'; + break; + case 'inside': + x += width / 2; + y += halfHeight; + textAlign = 'center'; + textVerticalAlign = 'middle'; + break; + case 'insideLeft': + x += distance; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'insideRight': + x += width - distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'insideTop': + x += width / 2; + y += distance; + textAlign = 'center'; + break; + case 'insideBottom': + x += width / 2; + y += height - distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'insideTopLeft': + x += distance; + y += distance; + break; + case 'insideTopRight': + x += width - distance; + y += distance; + textAlign = 'right'; + break; + case 'insideBottomLeft': + x += distance; + y += height - distance; + textVerticalAlign = 'bottom'; + break; + case 'insideBottomRight': + x += width - distance; + y += height - distance; + textAlign = 'right'; + textVerticalAlign = 'bottom'; + break; + } + + return { + x: x, + y: y, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +/** + * Show ellipsis if overflow. + * + * @public + * @param {string} text + * @param {string} containerWidth + * @param {string} font + * @param {number} [ellipsis='...'] + * @param {Object} [options] + * @param {number} [options.maxIterations=3] + * @param {number} [options.minChar=0] If truncate result are less + * then minChar, ellipsis will not show, which is + * better for user hint in some cases. + * @param {number} [options.placeholder=''] When all truncated, use the placeholder. + * @return {string} + */ +function truncateText(text, containerWidth, font, ellipsis, options) { + if (!containerWidth) { + return ''; + } + + var textLines = (text + '').split('\n'); + options = prepareTruncateOptions(containerWidth, font, ellipsis, options); + + // FIXME + // It is not appropriate that every line has '...' when truncate multiple lines. + for (var i = 0, len = textLines.length; i < len; i++) { + textLines[i] = truncateSingleLine(textLines[i], options); + } + + return textLines.join('\n'); +} + +function prepareTruncateOptions(containerWidth, font, ellipsis, options) { + options = extend({}, options); + + options.font = font; + var ellipsis = retrieve2(ellipsis, '...'); + options.maxIterations = retrieve2(options.maxIterations, 2); + var minChar = options.minChar = retrieve2(options.minChar, 0); + // FIXME + // Other languages? + options.cnCharWidth = getWidth('国', font); + // FIXME + // Consider proportional font? + var ascCharWidth = options.ascCharWidth = getWidth('a', font); + options.placeholder = retrieve2(options.placeholder, ''); + + // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'. + // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'. + var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap. + for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) { + contentWidth -= ascCharWidth; + } + + var ellipsisWidth = getWidth(ellipsis); + if (ellipsisWidth > contentWidth) { + ellipsis = ''; + ellipsisWidth = 0; + } + + contentWidth = containerWidth - ellipsisWidth; + + options.ellipsis = ellipsis; + options.ellipsisWidth = ellipsisWidth; + options.contentWidth = contentWidth; + options.containerWidth = containerWidth; + + return options; +} + +function truncateSingleLine(textLine, options) { + var containerWidth = options.containerWidth; + var font = options.font; + var contentWidth = options.contentWidth; + + if (!containerWidth) { + return ''; + } + + var lineWidth = getWidth(textLine, font); + + if (lineWidth <= containerWidth) { + return textLine; + } + + for (var j = 0;; j++) { + if (lineWidth <= contentWidth || j >= options.maxIterations) { + textLine += options.ellipsis; + break; + } + + var subLength = j === 0 + ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) + : lineWidth > 0 + ? Math.floor(textLine.length * contentWidth / lineWidth) + : 0; + + textLine = textLine.substr(0, subLength); + lineWidth = getWidth(textLine, font); + } + + if (textLine === '') { + textLine = options.placeholder; + } + + return textLine; +} + +function estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) { + var width = 0; + var i = 0; + for (var len = text.length; i < len && width < contentWidth; i++) { + var charCode = text.charCodeAt(i); + width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth; + } + return i; +} + +/** + * @public + * @param {string} font + * @return {number} line height + */ +function getLineHeight(font) { + // FIXME A rough approach. + return getWidth('国', font); +} + +/** + * @public + * @param {string} text + * @param {string} font + * @return {Object} width + */ +function measureText(text, font) { + return methods$1.measureText(text, font); +} + +// Avoid assign to an exported variable, for transforming to cjs. +methods$1.measureText = function (text, font) { + var ctx = getContext(); + ctx.font = font || DEFAULT_FONT; + return ctx.measureText(text); +}; + +/** + * @public + * @param {string} text + * @param {string} font + * @param {Object} [truncate] + * @return {Object} block: {lineHeight, lines, height, outerHeight} + * Notice: for performance, do not calculate outerWidth util needed. + */ +function parsePlainText(text, font, padding, truncate) { + text != null && (text += ''); + + var lineHeight = getLineHeight(font); + var lines = text ? text.split('\n') : []; + var height = lines.length * lineHeight; + var outerHeight = height; + + if (padding) { + outerHeight += padding[0] + padding[2]; + } + + if (text && truncate) { + var truncOuterHeight = truncate.outerHeight; + var truncOuterWidth = truncate.outerWidth; + if (truncOuterHeight != null && outerHeight > truncOuterHeight) { + text = ''; + lines = []; + } + else if (truncOuterWidth != null) { + var options = prepareTruncateOptions( + truncOuterWidth - (padding ? padding[1] + padding[3] : 0), + font, + truncate.ellipsis, + {minChar: truncate.minChar, placeholder: truncate.placeholder} + ); + + // FIXME + // It is not appropriate that every line has '...' when truncate multiple lines. + for (var i = 0, len = lines.length; i < len; i++) { + lines[i] = truncateSingleLine(lines[i], options); + } + } + } + + return { + lines: lines, + height: height, + outerHeight: outerHeight, + lineHeight: lineHeight + }; +} + +/** + * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx' + * Also consider 'bbbb{a|xxx\nzzz}xxxx\naaaa'. + * + * @public + * @param {string} text + * @param {Object} style + * @return {Object} block + * { + * width, + * height, + * lines: [{ + * lineHeight, + * width, + * tokens: [[{ + * styleName, + * text, + * width, // include textPadding + * height, // include textPadding + * textWidth, // pure text width + * textHeight, // pure text height + * lineHeihgt, + * font, + * textAlign, + * textVerticalAlign + * }], [...], ...] + * }, ...] + * } + * If styleName is undefined, it is plain text. + */ +function parseRichText(text, style) { + var contentBlock = {lines: [], width: 0, height: 0}; + + text != null && (text += ''); + if (!text) { + return contentBlock; + } + + var lastIndex = STYLE_REG.lastIndex = 0; + var result; + while ((result = STYLE_REG.exec(text)) != null) { + var matchedIndex = result.index; + if (matchedIndex > lastIndex) { + pushTokens(contentBlock, text.substring(lastIndex, matchedIndex)); + } + pushTokens(contentBlock, result[2], result[1]); + lastIndex = STYLE_REG.lastIndex; + } + + if (lastIndex < text.length) { + pushTokens(contentBlock, text.substring(lastIndex, text.length)); + } + + var lines = contentBlock.lines; + var contentHeight = 0; + var contentWidth = 0; + // For `textWidth: 100%` + var pendingList = []; + + var stlPadding = style.textPadding; + + var truncate = style.truncate; + var truncateWidth = truncate && truncate.outerWidth; + var truncateHeight = truncate && truncate.outerHeight; + if (stlPadding) { + truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]); + truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]); + } + + // Calculate layout info of tokens. + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var lineHeight = 0; + var lineWidth = 0; + + for (var j = 0; j < line.tokens.length; j++) { + var token = line.tokens[j]; + var tokenStyle = token.styleName && style.rich[token.styleName] || {}; + // textPadding should not inherit from style. + var textPadding = token.textPadding = tokenStyle.textPadding; + + // textFont has been asigned to font by `normalizeStyle`. + var font = token.font = tokenStyle.font || style.font; + + // textHeight can be used when textVerticalAlign is specified in token. + var tokenHeight = token.textHeight = retrieve2( + // textHeight should not be inherited, consider it can be specified + // as box height of the block. + tokenStyle.textHeight, getLineHeight(font) + ); + textPadding && (tokenHeight += textPadding[0] + textPadding[2]); + token.height = tokenHeight; + token.lineHeight = retrieve3( + tokenStyle.textLineHeight, style.textLineHeight, tokenHeight + ); + + token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign; + token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle'; + + if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) { + return {lines: [], width: 0, height: 0}; + } + + token.textWidth = getWidth(token.text, font); + var tokenWidth = tokenStyle.textWidth; + var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; + + // Percent width, can be `100%`, can be used in drawing separate + // line when box width is needed to be auto. + if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') { + token.percentWidth = tokenWidth; + pendingList.push(token); + tokenWidth = 0; + // Do not truncate in this case, because there is no user case + // and it is too complicated. + } + else { + if (tokenWidthNotSpecified) { + tokenWidth = token.textWidth; + + // FIXME: If image is not loaded and textWidth is not specified, calling + // `getBoundingRect()` will not get correct result. + var textBackgroundColor = tokenStyle.textBackgroundColor; + var bgImg = textBackgroundColor && textBackgroundColor.image; + + // Use cases: + // (1) If image is not loaded, it will be loaded at render phase and call + // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded + // image, and then the right size will be calculated here at the next tick. + // See `graphic/helper/text.js`. + // (2) If image loaded, and `textBackgroundColor.image` is image src string, + // use `imageHelper.findExistImage` to find cached image. + // `imageHelper.findExistImage` will always be called here before + // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText` + // which ensures that image will not be rendered before correct size calcualted. + if (bgImg) { + bgImg = findExistImage(bgImg); + if (isImageReady(bgImg)) { + tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height); + } + } + } + + var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0; + tokenWidth += paddingW; + + var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null; + + if (remianTruncWidth != null && remianTruncWidth < tokenWidth) { + if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) { + token.text = ''; + token.textWidth = tokenWidth = 0; + } + else { + token.text = truncateText( + token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, + {minChar: truncate.minChar} + ); + token.textWidth = getWidth(token.text, font); + tokenWidth = token.textWidth + paddingW; + } + } + } + + lineWidth += (token.width = tokenWidth); + tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight)); + } + + line.width = lineWidth; + line.lineHeight = lineHeight; + contentHeight += lineHeight; + contentWidth = Math.max(contentWidth, lineWidth); + } + + contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth); + contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight); + + if (stlPadding) { + contentBlock.outerWidth += stlPadding[1] + stlPadding[3]; + contentBlock.outerHeight += stlPadding[0] + stlPadding[2]; + } + + for (var i = 0; i < pendingList.length; i++) { + var token = pendingList[i]; + var percentWidth = token.percentWidth; + // Should not base on outerWidth, because token can not be placed out of padding. + token.width = parseInt(percentWidth, 10) / 100 * contentWidth; + } + + return contentBlock; +} + +function pushTokens(block, str, styleName) { + var isEmptyStr = str === ''; + var strs = str.split('\n'); + var lines = block.lines; + + for (var i = 0; i < strs.length; i++) { + var text = strs[i]; + var token = { + styleName: styleName, + text: text, + isLineHolder: !text && !isEmptyStr + }; + + // The first token should be appended to the last line. + if (!i) { + var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens; + + // Consider cases: + // (1) ''.split('\n') => ['', '\n', ''], the '' at the first item + // (which is a placeholder) should be replaced by new token. + // (2) A image backage, where token likes {a|}. + // (3) A redundant '' will affect textAlign in line. + // (4) tokens with the same tplName should not be merged, because + // they should be displayed in different box (with border and padding). + var tokensLen = tokens.length; + (tokensLen === 1 && tokens[0].isLineHolder) + ? (tokens[0] = token) + // Consider text is '', only insert when it is the "lineHolder" or + // "emptyStr". Otherwise a redundant '' will affect textAlign in line. + : ((text || !tokensLen || isEmptyStr) && tokens.push(token)); + } + // Other tokens always start a new line. + else { + // If there is '', insert it as a placeholder. + lines.push({tokens: [token]}); + } + } +} + +function makeFont(style) { + // FIXME in node-canvas fontWeight is before fontStyle + // Use `fontSize` `fontFamily` to check whether font properties are defined. + var font = (style.fontSize || style.fontFamily) && [ + style.fontStyle, + style.fontWeight, + (style.fontSize || 12) + 'px', + // If font properties are defined, `fontFamily` should not be ignored. + style.fontFamily || 'sans-serif' + ].join(' '); + return font && trim(font) || style.textFont || style.font; +} + +function buildPath(ctx, shape) { + var x = shape.x; + var y = shape.y; + var width = shape.width; + var height = shape.height; + var r = shape.r; + var r1; + var r2; + var r3; + var r4; + + // Convert width and height to positive for better borderRadius + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + + if (typeof r === 'number') { + r1 = r2 = r3 = r4 = r; + } + else if (r instanceof Array) { + if (r.length === 1) { + r1 = r2 = r3 = r4 = r[0]; + } + else if (r.length === 2) { + r1 = r3 = r[0]; + r2 = r4 = r[1]; + } + else if (r.length === 3) { + r1 = r[0]; + r2 = r4 = r[1]; + r3 = r[2]; + } + else { + r1 = r[0]; + r2 = r[1]; + r3 = r[2]; + r4 = r[3]; + } + } + else { + r1 = r2 = r3 = r4 = 0; + } + + var total; + if (r1 + r2 > width) { + total = r1 + r2; + r1 *= width / total; + r2 *= width / total; + } + if (r3 + r4 > width) { + total = r3 + r4; + r3 *= width / total; + r4 *= width / total; + } + if (r2 + r3 > height) { + total = r2 + r3; + r2 *= height / total; + r3 *= height / total; + } + if (r1 + r4 > height) { + total = r1 + r4; + r1 *= height / total; + r4 *= height / total; + } + ctx.moveTo(x + r1, y); + ctx.lineTo(x + width - r2, y); + r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0); + ctx.lineTo(x + width, y + height - r3); + r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2); + ctx.lineTo(x + r4, y + height); + r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI); + ctx.lineTo(x, y + r1); + r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5); +} + +// TODO: Have not support 'start', 'end' yet. +var VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1}; +var VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1}; +// Different from `STYLE_COMMON_PROPS` of `graphic/Style`, +// the default value of shadowColor is `'transparent'`. +var SHADOW_STYLE_COMMON_PROPS = [ + ['textShadowBlur', 'shadowBlur', 0], + ['textShadowOffsetX', 'shadowOffsetX', 0], + ['textShadowOffsetY', 'shadowOffsetY', 0], + ['textShadowColor', 'shadowColor', 'transparent'] +]; + +/** + * @param {module:zrender/graphic/Style} style + * @return {module:zrender/graphic/Style} The input style. + */ +function normalizeTextStyle(style) { + normalizeStyle(style); + each$1(style.rich, normalizeStyle); + return style; +} + +function normalizeStyle(style) { + if (style) { + + style.font = makeFont(style); + + var textAlign = style.textAlign; + textAlign === 'middle' && (textAlign = 'center'); + style.textAlign = ( + textAlign == null || VALID_TEXT_ALIGN[textAlign] + ) ? textAlign : 'left'; + + // Compatible with textBaseline. + var textVerticalAlign = style.textVerticalAlign || style.textBaseline; + textVerticalAlign === 'center' && (textVerticalAlign = 'middle'); + style.textVerticalAlign = ( + textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] + ) ? textVerticalAlign : 'top'; + + var textPadding = style.textPadding; + if (textPadding) { + style.textPadding = normalizeCssArray(style.textPadding); + } + } +} + +/** + * @param {CanvasRenderingContext2D} ctx + * @param {string} text + * @param {module:zrender/graphic/Style} style + * @param {Object|boolean} [rect] {x, y, width, height} + * If set false, rect text is not used. + * @param {Element} [prevEl] For ctx prop cache. + */ +function renderText(hostEl, ctx, text, style, rect, prevEl) { + style.rich + ? renderRichText(hostEl, ctx, text, style, rect) + : renderPlainText(hostEl, ctx, text, style, rect, prevEl); +} + +// Avoid setting to ctx according to prevEl if possible for +// performance in scenarios of large amount text. +function renderPlainText(hostEl, ctx, text, style, rect, prevEl) { + 'use strict'; + + var prevStyle = prevEl && prevEl.style; + // Some cache only available on textEl. + var isPrevTextEl = prevStyle && prevEl.type === 'text'; + + var styleFont = style.font || DEFAULT_FONT; + if (!isPrevTextEl || styleFont !== (prevStyle.font || DEFAULT_FONT)) { + ctx.font = styleFont; + } + // Use the final font from context-2d, because the final + // font might not be the style.font when it is illegal. + // But get `ctx.font` might be time consuming. + var computedFont = hostEl.__computedFont; + if (hostEl.__styleFont !== styleFont) { + hostEl.__styleFont = styleFont; + computedFont = hostEl.__computedFont = ctx.font; + } + + var textPadding = style.textPadding; + + var contentBlock = hostEl.__textCotentBlock; + if (!contentBlock || hostEl.__dirtyText) { + contentBlock = hostEl.__textCotentBlock = parsePlainText( + text, computedFont, textPadding, style.truncate + ); + } + + var outerHeight = contentBlock.outerHeight; + + var textLines = contentBlock.lines; + var lineHeight = contentBlock.lineHeight; + + var boxPos = getBoxPosition(outerHeight, style, rect); + var baseX = boxPos.baseX; + var baseY = boxPos.baseY; + var textAlign = boxPos.textAlign || 'left'; + var textVerticalAlign = boxPos.textVerticalAlign; + + // Origin of textRotation should be the base point of text drawing. + applyTextRotation(ctx, style, rect, baseX, baseY); + + var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); + var textX = baseX; + var textY = boxY; + + var needDrawBg = needDrawBackground(style); + if (needDrawBg || textPadding) { + // Consider performance, do not call getTextWidth util necessary. + var textWidth = getWidth(text, computedFont); + var outerWidth = textWidth; + textPadding && (outerWidth += textPadding[1] + textPadding[3]); + var boxX = adjustTextX(baseX, outerWidth, textAlign); + + needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight); + + if (textPadding) { + textX = getTextXForPadding(baseX, textAlign, textPadding); + textY += textPadding[0]; + } + } + + // Always set textAlign and textBase line, because it is difficute to calculate + // textAlign from prevEl, and we dont sure whether textAlign will be reset if + // font set happened. + ctx.textAlign = textAlign; + // Force baseline to be "middle". Otherwise, if using "top", the + // text will offset downward a little bit in font "Microsoft YaHei". + ctx.textBaseline = 'middle'; + + // Always set shadowBlur and shadowOffset to avoid leak from displayable. + for (var i = 0; i < SHADOW_STYLE_COMMON_PROPS.length; i++) { + var propItem = SHADOW_STYLE_COMMON_PROPS[i]; + var styleProp = propItem[0]; + var ctxProp = propItem[1]; + var val = style[styleProp]; + if (!isPrevTextEl || val !== prevStyle[styleProp]) { + ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]); + } + } + + // `textBaseline` is set as 'middle'. + textY += lineHeight / 2; + + var textStrokeWidth = style.textStrokeWidth; + var textStrokeWidthPrev = isPrevTextEl ? prevStyle.textStrokeWidth : null; + var strokeWidthChanged = !isPrevTextEl || textStrokeWidth !== textStrokeWidthPrev; + var strokeChanged = !isPrevTextEl || strokeWidthChanged || style.textStroke !== prevStyle.textStroke; + var textStroke = getStroke(style.textStroke, textStrokeWidth); + var textFill = getFill(style.textFill); + + if (textStroke) { + if (strokeWidthChanged) { + ctx.lineWidth = textStrokeWidth; + } + if (strokeChanged) { + ctx.strokeStyle = textStroke; + } + } + if (textFill) { + if (!isPrevTextEl || style.textFill !== prevStyle.textFill || prevStyle.textBackgroundColor) { + ctx.fillStyle = textFill; + } + } + + // Optimize simply, in most cases only one line exists. + if (textLines.length === 1) { + // Fill after stroke so the outline will not cover the main part. + textStroke && ctx.strokeText(textLines[0], textX, textY); + textFill && ctx.fillText(textLines[0], textX, textY); + } + else { + for (var i = 0; i < textLines.length; i++) { + // Fill after stroke so the outline will not cover the main part. + textStroke && ctx.strokeText(textLines[i], textX, textY); + textFill && ctx.fillText(textLines[i], textX, textY); + textY += lineHeight; + } + } +} + +function renderRichText(hostEl, ctx, text, style, rect) { + var contentBlock = hostEl.__textCotentBlock; + + if (!contentBlock || hostEl.__dirtyText) { + contentBlock = hostEl.__textCotentBlock = parseRichText(text, style); + } + + drawRichText(hostEl, ctx, contentBlock, style, rect); +} + +function drawRichText(hostEl, ctx, contentBlock, style, rect) { + var contentWidth = contentBlock.width; + var outerWidth = contentBlock.outerWidth; + var outerHeight = contentBlock.outerHeight; + var textPadding = style.textPadding; + + var boxPos = getBoxPosition(outerHeight, style, rect); + var baseX = boxPos.baseX; + var baseY = boxPos.baseY; + var textAlign = boxPos.textAlign; + var textVerticalAlign = boxPos.textVerticalAlign; + + // Origin of textRotation should be the base point of text drawing. + applyTextRotation(ctx, style, rect, baseX, baseY); + + var boxX = adjustTextX(baseX, outerWidth, textAlign); + var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); + var xLeft = boxX; + var lineTop = boxY; + if (textPadding) { + xLeft += textPadding[3]; + lineTop += textPadding[0]; + } + var xRight = xLeft + contentWidth; + + needDrawBackground(style) && drawBackground( + hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight + ); + + for (var i = 0; i < contentBlock.lines.length; i++) { + var line = contentBlock.lines[i]; + var tokens = line.tokens; + var tokenCount = tokens.length; + var lineHeight = line.lineHeight; + var usedWidth = line.width; + + var leftIndex = 0; + var lineXLeft = xLeft; + var lineXRight = xRight; + var rightIndex = tokenCount - 1; + var token; + + while ( + leftIndex < tokenCount + && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left') + ) { + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left'); + usedWidth -= token.width; + lineXLeft += token.width; + leftIndex++; + } + + while ( + rightIndex >= 0 + && (token = tokens[rightIndex], token.textAlign === 'right') + ) { + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right'); + usedWidth -= token.width; + lineXRight -= token.width; + rightIndex--; + } + + // The other tokens are placed as textAlign 'center' if there is enough space. + lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2; + while (leftIndex <= rightIndex) { + token = tokens[leftIndex]; + // Consider width specified by user, use 'center' rather than 'left'. + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center'); + lineXLeft += token.width; + leftIndex++; + } + + lineTop += lineHeight; + } +} + +function applyTextRotation(ctx, style, rect, x, y) { + // textRotation only apply in RectText. + if (rect && style.textRotation) { + var origin = style.textOrigin; + if (origin === 'center') { + x = rect.width / 2 + rect.x; + y = rect.height / 2 + rect.y; + } + else if (origin) { + x = origin[0] + rect.x; + y = origin[1] + rect.y; + } + + ctx.translate(x, y); + // Positive: anticlockwise + ctx.rotate(-style.textRotation); + ctx.translate(-x, -y); + } +} + +function placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) { + var tokenStyle = style.rich[token.styleName] || {}; + tokenStyle.text = token.text; + + // 'ctx.textBaseline' is always set as 'middle', for sake of + // the bias of "Microsoft YaHei". + var textVerticalAlign = token.textVerticalAlign; + var y = lineTop + lineHeight / 2; + if (textVerticalAlign === 'top') { + y = lineTop + token.height / 2; + } + else if (textVerticalAlign === 'bottom') { + y = lineTop + lineHeight - token.height / 2; + } + + !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground( + hostEl, + ctx, + tokenStyle, + textAlign === 'right' + ? x - token.width + : textAlign === 'center' + ? x - token.width / 2 + : x, + y - token.height / 2, + token.width, + token.height + ); + + var textPadding = token.textPadding; + if (textPadding) { + x = getTextXForPadding(x, textAlign, textPadding); + y -= token.height / 2 - textPadding[2] - token.textHeight / 2; + } + + setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0)); + setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent'); + setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0)); + setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0)); + + setCtx(ctx, 'textAlign', textAlign); + // Force baseline to be "middle". Otherwise, if using "top", the + // text will offset downward a little bit in font "Microsoft YaHei". + setCtx(ctx, 'textBaseline', 'middle'); + + setCtx(ctx, 'font', token.font || DEFAULT_FONT); + + var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth); + var textFill = getFill(tokenStyle.textFill || style.textFill); + var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth); + + // Fill after stroke so the outline will not cover the main part. + if (textStroke) { + setCtx(ctx, 'lineWidth', textStrokeWidth); + setCtx(ctx, 'strokeStyle', textStroke); + ctx.strokeText(token.text, x, y); + } + if (textFill) { + setCtx(ctx, 'fillStyle', textFill); + ctx.fillText(token.text, x, y); + } +} + +function needDrawBackground(style) { + return style.textBackgroundColor + || (style.textBorderWidth && style.textBorderColor); +} + +// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text} +// shape: {x, y, width, height} +function drawBackground(hostEl, ctx, style, x, y, width, height) { + var textBackgroundColor = style.textBackgroundColor; + var textBorderWidth = style.textBorderWidth; + var textBorderColor = style.textBorderColor; + var isPlainBg = isString(textBackgroundColor); + + setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0); + setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent'); + setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0); + setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0); + + if (isPlainBg || (textBorderWidth && textBorderColor)) { + ctx.beginPath(); + var textBorderRadius = style.textBorderRadius; + if (!textBorderRadius) { + ctx.rect(x, y, width, height); + } + else { + buildPath(ctx, { + x: x, y: y, width: width, height: height, r: textBorderRadius + }); + } + ctx.closePath(); + } + + if (isPlainBg) { + setCtx(ctx, 'fillStyle', textBackgroundColor); + + if (style.fillOpacity != null) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.fillOpacity * style.opacity; + ctx.fill(); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + ctx.fill(); + } + } + else if (isFunction$1(textBackgroundColor)) { + setCtx(ctx, 'fillStyle', textBackgroundColor(style)); + ctx.fill(); + } + else if (isObject$1(textBackgroundColor)) { + var image = textBackgroundColor.image; + + image = createOrUpdateImage( + image, null, hostEl, onBgImageLoaded, textBackgroundColor + ); + if (image && isImageReady(image)) { + ctx.drawImage(image, x, y, width, height); + } + } + + if (textBorderWidth && textBorderColor) { + setCtx(ctx, 'lineWidth', textBorderWidth); + setCtx(ctx, 'strokeStyle', textBorderColor); + + if (style.strokeOpacity != null) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.strokeOpacity * style.opacity; + ctx.stroke(); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + ctx.stroke(); + } + } +} + +function onBgImageLoaded(image, textBackgroundColor) { + // Replace image, so that `contain/text.js#parseRichText` + // will get correct result in next tick. + textBackgroundColor.image = image; +} + +function getBoxPosition(blockHeiht, style, rect) { + var baseX = style.x || 0; + var baseY = style.y || 0; + var textAlign = style.textAlign; + var textVerticalAlign = style.textVerticalAlign; + + // Text position represented by coord + if (rect) { + var textPosition = style.textPosition; + if (textPosition instanceof Array) { + // Percent + baseX = rect.x + parsePercent(textPosition[0], rect.width); + baseY = rect.y + parsePercent(textPosition[1], rect.height); + } + else { + var res = adjustTextPositionOnRect( + textPosition, rect, style.textDistance + ); + baseX = res.x; + baseY = res.y; + // Default align and baseline when has textPosition + textAlign = textAlign || res.textAlign; + textVerticalAlign = textVerticalAlign || res.textVerticalAlign; + } + + // textOffset is only support in RectText, otherwise + // we have to adjust boundingRect for textOffset. + var textOffset = style.textOffset; + if (textOffset) { + baseX += textOffset[0]; + baseY += textOffset[1]; + } + } + + return { + baseX: baseX, + baseY: baseY, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +function setCtx(ctx, prop, value) { + ctx[prop] = fixShadow(ctx, prop, value); + return ctx[prop]; +} + +/** + * @param {string} [stroke] If specified, do not check style.textStroke. + * @param {string} [lineWidth] If specified, do not check style.textStroke. + * @param {number} style + */ +function getStroke(stroke, lineWidth) { + return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none') + ? null + // TODO pattern and gradient? + : (stroke.image || stroke.colorStops) + ? '#000' + : stroke; +} + +function getFill(fill) { + return (fill == null || fill === 'none') + ? null + // TODO pattern and gradient? + : (fill.image || fill.colorStops) + ? '#000' + : fill; +} + +function parsePercent(value, maxValue) { + if (typeof value === 'string') { + if (value.lastIndexOf('%') >= 0) { + return parseFloat(value) / 100 * maxValue; + } + return parseFloat(value); + } + return value; +} + +function getTextXForPadding(x, textAlign, textPadding) { + return textAlign === 'right' + ? (x - textPadding[1]) + : textAlign === 'center' + ? (x + textPadding[3] / 2 - textPadding[1] / 2) + : (x + textPadding[3]); +} + +/** + * @param {string} text + * @param {module:zrender/Style} style + * @return {boolean} + */ +function needDrawText(text, style) { + return text != null + && (text + || style.textBackgroundColor + || (style.textBorderWidth && style.textBorderColor) + || style.textPadding + ); +} + +/** + * Mixin for drawing text in a element bounding rect + * @module zrender/mixin/RectText + */ + +var tmpRect$1 = new BoundingRect(); + +var RectText = function () {}; + +RectText.prototype = { + + constructor: RectText, + + /** + * Draw text in a rect with specified position. + * @param {CanvasRenderingContext2D} ctx + * @param {Object} rect Displayable rect + */ + drawRectText: function (ctx, rect) { + var style = this.style; + + rect = style.textRect || rect; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + + // Convert to string + text != null && (text += ''); + + if (!needDrawText(text, style)) { + return; + } + + // FIXME + // Do not provide prevEl to `textHelper.renderText` for ctx prop cache, + // but use `ctx.save()` and `ctx.restore()`. Because the cache for rect + // text propably break the cache for its host elements. + ctx.save(); + + // Transform rect to view space + var transform = this.transform; + if (!style.transformText) { + if (transform) { + tmpRect$1.copy(rect); + tmpRect$1.applyTransform(transform); + rect = tmpRect$1; + } + } + else { + this.setTransform(ctx); + } + + // transformText and textRotation can not be used at the same time. + renderText(this, ctx, text, style, rect); + + ctx.restore(); + } +}; + +/** + * 可绘制的图形基类 + * Base class of all displayable graphic objects + * @module zrender/graphic/Displayable + */ + + +/** + * @alias module:zrender/graphic/Displayable + * @extends module:zrender/Element + * @extends module:zrender/graphic/mixin/RectText + */ +function Displayable(opts) { + + opts = opts || {}; + + Element.call(this, opts); + + // Extend properties + for (var name in opts) { + if ( + opts.hasOwnProperty(name) && + name !== 'style' + ) { + this[name] = opts[name]; + } + } + + /** + * @type {module:zrender/graphic/Style} + */ + this.style = new Style(opts.style, this); + + this._rect = null; + // Shapes for cascade clipping. + this.__clipPaths = []; + + // FIXME Stateful must be mixined after style is setted + // Stateful.call(this, opts); +} + +Displayable.prototype = { + + constructor: Displayable, + + type: 'displayable', + + /** + * Displayable 是否为脏,Painter 中会根据该标记判断是否需要是否需要重新绘制 + * Dirty flag. From which painter will determine if this displayable object needs brush + * @name module:zrender/graphic/Displayable#__dirty + * @type {boolean} + */ + __dirty: true, + + /** + * 图形是否可见,为true时不绘制图形,但是仍能触发鼠标事件 + * If ignore drawing of the displayable object. Mouse event will still be triggered + * @name module:/zrender/graphic/Displayable#invisible + * @type {boolean} + * @default false + */ + invisible: false, + + /** + * @name module:/zrender/graphic/Displayable#z + * @type {number} + * @default 0 + */ + z: 0, + + /** + * @name module:/zrender/graphic/Displayable#z + * @type {number} + * @default 0 + */ + z2: 0, + + /** + * z层level,决定绘画在哪层canvas中 + * @name module:/zrender/graphic/Displayable#zlevel + * @type {number} + * @default 0 + */ + zlevel: 0, + + /** + * 是否可拖拽 + * @name module:/zrender/graphic/Displayable#draggable + * @type {boolean} + * @default false + */ + draggable: false, + + /** + * 是否正在拖拽 + * @name module:/zrender/graphic/Displayable#draggable + * @type {boolean} + * @default false + */ + dragging: false, + + /** + * 是否相应鼠标事件 + * @name module:/zrender/graphic/Displayable#silent + * @type {boolean} + * @default false + */ + silent: false, + + /** + * If enable culling + * @type {boolean} + * @default false + */ + culling: false, + + /** + * Mouse cursor when hovered + * @name module:/zrender/graphic/Displayable#cursor + * @type {string} + */ + cursor: 'pointer', + + /** + * If hover area is bounding rect + * @name module:/zrender/graphic/Displayable#rectHover + * @type {string} + */ + rectHover: false, + + /** + * Render the element progressively when the value >= 0, + * usefull for large data. + * @type {boolean} + */ + progressive: false, + + /** + * @type {boolean} + */ + incremental: false, + /** + * Scale ratio for global scale. + * @type {boolean} + */ + globalScaleRatio: 1, + + beforeBrush: function (ctx) {}, + + afterBrush: function (ctx) {}, + + /** + * 图形绘制方法 + * @param {CanvasRenderingContext2D} ctx + */ + // Interface + brush: function (ctx, prevEl) {}, + + /** + * 获取最小包围盒 + * @return {module:zrender/core/BoundingRect} + */ + // Interface + getBoundingRect: function () {}, + + /** + * 判断坐标 x, y 是否在图形上 + * If displayable element contain coord x, y + * @param {number} x + * @param {number} y + * @return {boolean} + */ + contain: function (x, y) { + return this.rectContain(x, y); + }, + + /** + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) { + cb.call(context, this); + }, + + /** + * 判断坐标 x, y 是否在图形的包围盒上 + * If bounding rect of element contain coord x, y + * @param {number} x + * @param {number} y + * @return {boolean} + */ + rectContain: function (x, y) { + var coord = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + return rect.contain(coord[0], coord[1]); + }, + + /** + * 标记图形元素为脏,并且在下一帧重绘 + * Mark displayable element dirty and refresh next frame + */ + dirty: function () { + this.__dirty = this.__dirtyText = true; + + this._rect = null; + + this.__zr && this.__zr.refresh(); + }, + + /** + * 图形是否会触发事件 + * If displayable object binded any event + * @return {boolean} + */ + // TODO, 通过 bind 绑定的事件 + // isSilent: function () { + // return !( + // this.hoverable || this.draggable + // || this.onmousemove || this.onmouseover || this.onmouseout + // || this.onmousedown || this.onmouseup || this.onclick + // || this.ondragenter || this.ondragover || this.ondragleave + // || this.ondrop + // ); + // }, + /** + * Alias for animate('style') + * @param {boolean} loop + */ + animateStyle: function (loop) { + return this.animate('style', loop); + }, + + attrKV: function (key, value) { + if (key !== 'style') { + Element.prototype.attrKV.call(this, key, value); + } + else { + this.style.set(value); + } + }, + + /** + * @param {Object|string} key + * @param {*} value + */ + setStyle: function (key, value) { + this.style.set(key, value); + this.dirty(false); + return this; + }, + + /** + * Use given style object + * @param {Object} obj + */ + useStyle: function (obj) { + this.style = new Style(obj, this); + this.dirty(false); + return this; + } +}; + +inherits(Displayable, Element); + +mixin(Displayable, RectText); + +/** + * @alias zrender/graphic/Image + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +function ZImage(opts) { + Displayable.call(this, opts); +} + +ZImage.prototype = { + + constructor: ZImage, + + type: 'image', + + brush: function (ctx, prevEl) { + var style = this.style; + var src = style.image; + + // Must bind each time + style.bind(ctx, this, prevEl); + + var image = this._image = createOrUpdateImage( + src, + this._image, + this, + this.onload + ); + + if (!image || !isImageReady(image)) { + return; + } + + // 图片已经加载完成 + // if (image.nodeName.toUpperCase() == 'IMG') { + // if (!image.complete) { + // return; + // } + // } + // Else is canvas + + var x = style.x || 0; + var y = style.y || 0; + var width = style.width; + var height = style.height; + var aspect = image.width / image.height; + if (width == null && height != null) { + // Keep image/height ratio + width = height * aspect; + } + else if (height == null && width != null) { + height = width / aspect; + } + else if (width == null && height == null) { + width = image.width; + height = image.height; + } + + // 设置transform + this.setTransform(ctx); + + if (style.sWidth && style.sHeight) { + var sx = style.sx || 0; + var sy = style.sy || 0; + ctx.drawImage( + image, + sx, sy, style.sWidth, style.sHeight, + x, y, width, height + ); + } + else if (style.sx && style.sy) { + var sx = style.sx; + var sy = style.sy; + var sWidth = width - sx; + var sHeight = height - sy; + ctx.drawImage( + image, + sx, sy, sWidth, sHeight, + x, y, width, height + ); + } + else { + ctx.drawImage(image, x, y, width, height); + } + + // Draw rect text + if (style.text != null) { + // Only restore transform when needs draw text. + this.restoreTransform(ctx); + this.drawRectText(ctx, this.getBoundingRect()); + } + }, + + getBoundingRect: function () { + var style = this.style; + if (! this._rect) { + this._rect = new BoundingRect( + style.x || 0, style.y || 0, style.width || 0, style.height || 0 + ); + } + return this._rect; + } +}; + +inherits(ZImage, Displayable); + +var HOVER_LAYER_ZLEVEL = 1e5; +var CANVAS_ZLEVEL = 314159; + +var EL_AFTER_INCREMENTAL_INC = 0.01; +var INCREMENTAL_INC = 0.001; + +function parseInt10(val) { + return parseInt(val, 10); +} + +function isLayerValid(layer) { + if (!layer) { + return false; + } + + if (layer.__builtin__) { + return true; + } + + if (typeof(layer.resize) !== 'function' + || typeof(layer.refresh) !== 'function' + ) { + return false; + } + + return true; +} + +var tmpRect = new BoundingRect(0, 0, 0, 0); +var viewRect = new BoundingRect(0, 0, 0, 0); +function isDisplayableCulled(el, width, height) { + tmpRect.copy(el.getBoundingRect()); + if (el.transform) { + tmpRect.applyTransform(el.transform); + } + viewRect.width = width; + viewRect.height = height; + return !tmpRect.intersect(viewRect); +} + +function isClipPathChanged(clipPaths, prevClipPaths) { + if (clipPaths == prevClipPaths) { // Can both be null or undefined + return false; + } + + if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) { + return true; + } + for (var i = 0; i < clipPaths.length; i++) { + if (clipPaths[i] !== prevClipPaths[i]) { + return true; + } + } +} + +function doClip(clipPaths, ctx) { + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + + clipPath.setTransform(ctx); + ctx.beginPath(); + clipPath.buildPath(ctx, clipPath.shape); + ctx.clip(); + // Transform back + clipPath.restoreTransform(ctx); + } +} + +function createRoot(width, height) { + var domRoot = document.createElement('div'); + + // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬 + domRoot.style.cssText = [ + 'position:relative', + 'overflow:hidden', + 'width:' + width + 'px', + 'height:' + height + 'px', + 'padding:0', + 'margin:0', + 'border-width:0' + ].join(';') + ';'; + + return domRoot; +} + + +/** + * @alias module:zrender/Painter + * @constructor + * @param {HTMLElement} root 绘图容器 + * @param {module:zrender/Storage} storage + * @param {Object} opts + */ +var Painter = function (root, storage, opts) { + + this.type = 'canvas'; + + // In node environment using node-canvas + var singleCanvas = !root.nodeName // In node ? + || root.nodeName.toUpperCase() === 'CANVAS'; + + this._opts = opts = extend({}, opts || {}); + + /** + * @type {number} + */ + this.dpr = opts.devicePixelRatio || devicePixelRatio; + /** + * @type {boolean} + * @private + */ + this._singleCanvas = singleCanvas; + /** + * 绘图容器 + * @type {HTMLElement} + */ + this.root = root; + + var rootStyle = root.style; + + if (rootStyle) { + rootStyle['-webkit-tap-highlight-color'] = 'transparent'; + rootStyle['-webkit-user-select'] = + rootStyle['user-select'] = + rootStyle['-webkit-touch-callout'] = 'none'; + + root.innerHTML = ''; + } + + /** + * @type {module:zrender/Storage} + */ + this.storage = storage; + + /** + * @type {Array.} + * @private + */ + var zlevelList = this._zlevelList = []; + + /** + * @type {Object.} + * @private + */ + var layers = this._layers = {}; + + /** + * @type {Object.} + * @private + */ + this._layerConfig = {}; + + /** + * zrender will do compositing when root is a canvas and have multiple zlevels. + */ + this._needsManuallyCompositing = false; + + if (!singleCanvas) { + this._width = this._getSize(0); + this._height = this._getSize(1); + + var domRoot = this._domRoot = createRoot( + this._width, this._height + ); + root.appendChild(domRoot); + } + else { + var width = root.width; + var height = root.height; + + if (opts.width != null) { + width = opts.width; + } + if (opts.height != null) { + height = opts.height; + } + this.dpr = opts.devicePixelRatio || 1; + + // Use canvas width and height directly + root.width = width * this.dpr; + root.height = height * this.dpr; + + this._width = width; + this._height = height; + + // Create layer if only one given canvas + // Device can be specified to create a high dpi image. + var mainLayer = new Layer(root, this, this.dpr); + mainLayer.__builtin__ = true; + mainLayer.initContext(); + // FIXME Use canvas width and height + // mainLayer.resize(width, height); + layers[CANVAS_ZLEVEL] = mainLayer; + mainLayer.zlevel = CANVAS_ZLEVEL; + // Not use common zlevel. + zlevelList.push(CANVAS_ZLEVEL); + + this._domRoot = root; + } + + /** + * @type {module:zrender/Layer} + * @private + */ + this._hoverlayer = null; + + this._hoverElements = []; +}; + +Painter.prototype = { + + constructor: Painter, + + getType: function () { + return 'canvas'; + }, + + /** + * If painter use a single canvas + * @return {boolean} + */ + isSingleCanvas: function () { + return this._singleCanvas; + }, + /** + * @return {HTMLDivElement} + */ + getViewportRoot: function () { + return this._domRoot; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + /** + * 刷新 + * @param {boolean} [paintAll=false] 强制绘制所有displayable + */ + refresh: function (paintAll) { + + var list = this.storage.getDisplayList(true); + + var zlevelList = this._zlevelList; + + this._redrawId = Math.random(); + + this._paintList(list, paintAll, this._redrawId); + + // Paint custum layers + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = this._layers[z]; + if (!layer.__builtin__ && layer.refresh) { + var clearColor = i === 0 ? this._backgroundColor : null; + layer.refresh(clearColor); + } + } + + this.refreshHover(); + + return this; + }, + + addHover: function (el, hoverStyle) { + if (el.__hoverMir) { + return; + } + var elMirror = new el.constructor({ + style: el.style, + shape: el.shape, + z: el.z, + z2: el.z2, + silent: el.silent + }); + elMirror.__from = el; + el.__hoverMir = elMirror; + hoverStyle && elMirror.setStyle(hoverStyle); + this._hoverElements.push(elMirror); + + return elMirror; + }, + + removeHover: function (el) { + var elMirror = el.__hoverMir; + var hoverElements = this._hoverElements; + var idx = indexOf(hoverElements, elMirror); + if (idx >= 0) { + hoverElements.splice(idx, 1); + } + el.__hoverMir = null; + }, + + clearHover: function (el) { + var hoverElements = this._hoverElements; + for (var i = 0; i < hoverElements.length; i++) { + var from = hoverElements[i].__from; + if (from) { + from.__hoverMir = null; + } + } + hoverElements.length = 0; + }, + + refreshHover: function () { + var hoverElements = this._hoverElements; + var len = hoverElements.length; + var hoverLayer = this._hoverlayer; + hoverLayer && hoverLayer.clear(); + + if (!len) { + return; + } + sort(hoverElements, this.storage.displayableSortFunc); + + // Use a extream large zlevel + // FIXME? + if (!hoverLayer) { + hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL); + } + + var scope = {}; + hoverLayer.ctx.save(); + for (var i = 0; i < len;) { + var el = hoverElements[i]; + var originalEl = el.__from; + // Original el is removed + // PENDING + if (!(originalEl && originalEl.__zr)) { + hoverElements.splice(i, 1); + originalEl.__hoverMir = null; + len--; + continue; + } + i++; + + // Use transform + // FIXME style and shape ? + if (!originalEl.invisible) { + el.transform = originalEl.transform; + el.invTransform = originalEl.invTransform; + el.__clipPaths = originalEl.__clipPaths; + // el. + this._doPaintEl(el, hoverLayer, true, scope); + } + } + + hoverLayer.ctx.restore(); + }, + + getHoverLayer: function () { + return this.getLayer(HOVER_LAYER_ZLEVEL); + }, + + _paintList: function (list, paintAll, redrawId) { + if (this._redrawId !== redrawId) { + return; + } + + paintAll = paintAll || false; + + this._updateLayerStatus(list); + + var finished = this._doPaintList(list, paintAll); + + if (this._needsManuallyCompositing) { + this._compositeManually(); + } + + if (!finished) { + var self = this; + requestAnimationFrame(function () { + self._paintList(list, paintAll, redrawId); + }); + } + }, + + _compositeManually: function () { + var ctx = this.getLayer(CANVAS_ZLEVEL).ctx; + var width = this._domRoot.width; + var height = this._domRoot.height; + ctx.clearRect(0, 0, width, height); + // PENDING, If only builtin layer? + this.eachBuiltinLayer(function (layer) { + if (layer.virtual) { + ctx.drawImage(layer.dom, 0, 0, width, height); + } + }); + }, + + _doPaintList: function (list, paintAll) { + var layerList = []; + for (var zi = 0; zi < this._zlevelList.length; zi++) { + var zlevel = this._zlevelList[zi]; + var layer = this._layers[zlevel]; + if (layer.__builtin__ + && layer !== this._hoverlayer + && (layer.__dirty || paintAll) + ) { + layerList.push(layer); + } + } + + var finished = true; + + for (var k = 0; k < layerList.length; k++) { + var layer = layerList[k]; + var ctx = layer.ctx; + var scope = {}; + ctx.save(); + + var start = paintAll ? layer.__startIndex : layer.__drawIndex; + + var useTimer = !paintAll && layer.incremental && Date.now; + var startTime = useTimer && Date.now(); + + var clearColor = layer.zlevel === this._zlevelList[0] + ? this._backgroundColor : null; + // All elements in this layer are cleared. + if (layer.__startIndex === layer.__endIndex) { + layer.clear(false, clearColor); + } + else if (start === layer.__startIndex) { + var firstEl = list[start]; + if (!firstEl.incremental || !firstEl.notClear || paintAll) { + layer.clear(false, clearColor); + } + } + if (start === -1) { + console.error('For some unknown reason. drawIndex is -1'); + start = layer.__startIndex; + } + for (var i = start; i < layer.__endIndex; i++) { + var el = list[i]; + this._doPaintEl(el, layer, paintAll, scope); + el.__dirty = el.__dirtyText = false; + + if (useTimer) { + // Date.now can be executed in 13,025,305 ops/second. + var dTime = Date.now() - startTime; + // Give 15 millisecond to draw. + // The rest elements will be drawn in the next frame. + if (dTime > 15) { + break; + } + } + } + + layer.__drawIndex = i; + + if (layer.__drawIndex < layer.__endIndex) { + finished = false; + } + + if (scope.prevElClipPaths) { + // Needs restore the state. If last drawn element is in the clipping area. + ctx.restore(); + } + + ctx.restore(); + } + + if (env$1.wxa) { + // Flush for weixin application + each$1(this._layers, function (layer) { + if (layer && layer.ctx && layer.ctx.draw) { + layer.ctx.draw(); + } + }); + } + + return finished; + }, + + _doPaintEl: function (el, currentLayer, forcePaint, scope) { + var ctx = currentLayer.ctx; + var m = el.transform; + if ( + (currentLayer.__dirty || forcePaint) + // Ignore invisible element + && !el.invisible + // Ignore transparent element + && el.style.opacity !== 0 + // Ignore scale 0 element, in some environment like node-canvas + // Draw a scale 0 element can cause all following draw wrong + // And setTransform with scale 0 will cause set back transform failed. + && !(m && !m[0] && !m[3]) + // Ignore culled element + && !(el.culling && isDisplayableCulled(el, this._width, this._height)) + ) { + + var clipPaths = el.__clipPaths; + + // Optimize when clipping on group with several elements + if (!scope.prevElClipPaths + || isClipPathChanged(clipPaths, scope.prevElClipPaths) + ) { + // If has previous clipping state, restore from it + if (scope.prevElClipPaths) { + currentLayer.ctx.restore(); + scope.prevElClipPaths = null; + + // Reset prevEl since context has been restored + scope.prevEl = null; + } + // New clipping state + if (clipPaths) { + ctx.save(); + doClip(clipPaths, ctx); + scope.prevElClipPaths = clipPaths; + } + } + el.beforeBrush && el.beforeBrush(ctx); + + el.brush(ctx, scope.prevEl || null); + scope.prevEl = el; + + el.afterBrush && el.afterBrush(ctx); + } + }, + + /** + * 获取 zlevel 所在层,如果不存在则会创建一个新的层 + * @param {number} zlevel + * @param {boolean} virtual Virtual layer will not be inserted into dom. + * @return {module:zrender/Layer} + */ + getLayer: function (zlevel, virtual) { + if (this._singleCanvas && !this._needsManuallyCompositing) { + zlevel = CANVAS_ZLEVEL; + } + var layer = this._layers[zlevel]; + if (!layer) { + // Create a new layer + layer = new Layer('zr_' + zlevel, this, this.dpr); + layer.zlevel = zlevel; + layer.__builtin__ = true; + + if (this._layerConfig[zlevel]) { + merge(layer, this._layerConfig[zlevel], true); + } + + if (virtual) { + layer.virtual = virtual; + } + + this.insertLayer(zlevel, layer); + + // Context is created after dom inserted to document + // Or excanvas will get 0px clientWidth and clientHeight + layer.initContext(); + } + + return layer; + }, + + insertLayer: function (zlevel, layer) { + + var layersMap = this._layers; + var zlevelList = this._zlevelList; + var len = zlevelList.length; + var prevLayer = null; + var i = -1; + var domRoot = this._domRoot; + + if (layersMap[zlevel]) { + zrLog('ZLevel ' + zlevel + ' has been used already'); + return; + } + // Check if is a valid layer + if (!isLayerValid(layer)) { + zrLog('Layer of zlevel ' + zlevel + ' is not valid'); + return; + } + + if (len > 0 && zlevel > zlevelList[0]) { + for (i = 0; i < len - 1; i++) { + if ( + zlevelList[i] < zlevel + && zlevelList[i + 1] > zlevel + ) { + break; + } + } + prevLayer = layersMap[zlevelList[i]]; + } + zlevelList.splice(i + 1, 0, zlevel); + + layersMap[zlevel] = layer; + + // Vitual layer will not directly show on the screen. + // (It can be a WebGL layer and assigned to a ZImage element) + // But it still under management of zrender. + if (!layer.virtual) { + if (prevLayer) { + var prevDom = prevLayer.dom; + if (prevDom.nextSibling) { + domRoot.insertBefore( + layer.dom, + prevDom.nextSibling + ); + } + else { + domRoot.appendChild(layer.dom); + } + } + else { + if (domRoot.firstChild) { + domRoot.insertBefore(layer.dom, domRoot.firstChild); + } + else { + domRoot.appendChild(layer.dom); + } + } + } + }, + + // Iterate each layer + eachLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + cb.call(context, this._layers[z], z); + } + }, + + // Iterate each buildin layer + eachBuiltinLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var layer; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + layer = this._layers[z]; + if (layer.__builtin__) { + cb.call(context, layer, z); + } + } + }, + + // Iterate each other layer except buildin layer + eachOtherLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var layer; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + layer = this._layers[z]; + if (!layer.__builtin__) { + cb.call(context, layer, z); + } + } + }, + + /** + * 获取所有已创建的层 + * @param {Array.} [prevLayer] + */ + getLayers: function () { + return this._layers; + }, + + _updateLayerStatus: function (list) { + + this.eachBuiltinLayer(function (layer, z) { + layer.__dirty = layer.__used = false; + }); + + function updatePrevLayer(idx) { + if (prevLayer) { + if (prevLayer.__endIndex !== idx) { + prevLayer.__dirty = true; + } + prevLayer.__endIndex = idx; + } + } + + if (this._singleCanvas) { + for (var i = 1; i < list.length; i++) { + var el = list[i]; + if (el.zlevel !== list[i - 1].zlevel || el.incremental) { + this._needsManuallyCompositing = true; + break; + } + } + } + + var prevLayer = null; + var incrementalLayerCount = 0; + for (var i = 0; i < list.length; i++) { + var el = list[i]; + var zlevel = el.zlevel; + var layer; + // PENDING If change one incremental element style ? + // TODO Where there are non-incremental elements between incremental elements. + if (el.incremental) { + layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing); + layer.incremental = true; + incrementalLayerCount = 1; + } + else { + layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing); + } + + if (!layer.__builtin__) { + zrLog('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id); + } + + if (layer !== prevLayer) { + layer.__used = true; + if (layer.__startIndex !== i) { + layer.__dirty = true; + } + layer.__startIndex = i; + if (!layer.incremental) { + layer.__drawIndex = i; + } + else { + // Mark layer draw index needs to update. + layer.__drawIndex = -1; + } + updatePrevLayer(i); + prevLayer = layer; + } + if (el.__dirty) { + layer.__dirty = true; + if (layer.incremental && layer.__drawIndex < 0) { + // Start draw from the first dirty element. + layer.__drawIndex = i; + } + } + } + + updatePrevLayer(i); + + this.eachBuiltinLayer(function (layer, z) { + // Used in last frame but not in this frame. Needs clear + if (!layer.__used && layer.getElementCount() > 0) { + layer.__dirty = true; + layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0; + } + // For incremental layer. In case start index changed and no elements are dirty. + if (layer.__dirty && layer.__drawIndex < 0) { + layer.__drawIndex = layer.__startIndex; + } + }); + }, + + /** + * 清除hover层外所有内容 + */ + clear: function () { + this.eachBuiltinLayer(this._clearLayer); + return this; + }, + + _clearLayer: function (layer) { + layer.clear(); + }, + + setBackgroundColor: function (backgroundColor) { + this._backgroundColor = backgroundColor; + }, + + /** + * 修改指定zlevel的绘制参数 + * + * @param {string} zlevel + * @param {Object} config 配置对象 + * @param {string} [config.clearColor=0] 每次清空画布的颜色 + * @param {string} [config.motionBlur=false] 是否开启动态模糊 + * @param {number} [config.lastFrameAlpha=0.7] + * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 + */ + configLayer: function (zlevel, config) { + if (config) { + var layerConfig = this._layerConfig; + if (!layerConfig[zlevel]) { + layerConfig[zlevel] = config; + } + else { + merge(layerConfig[zlevel], config, true); + } + + for (var i = 0; i < this._zlevelList.length; i++) { + var _zlevel = this._zlevelList[i]; + if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) { + var layer = this._layers[_zlevel]; + merge(layer, layerConfig[zlevel], true); + } + } + } + }, + + /** + * 删除指定层 + * @param {number} zlevel 层所在的zlevel + */ + delLayer: function (zlevel) { + var layers = this._layers; + var zlevelList = this._zlevelList; + var layer = layers[zlevel]; + if (!layer) { + return; + } + layer.dom.parentNode.removeChild(layer.dom); + delete layers[zlevel]; + + zlevelList.splice(indexOf(zlevelList, zlevel), 1); + }, + + /** + * 区域大小变化后重绘 + */ + resize: function (width, height) { + if (!this._domRoot.style) { // Maybe in node or worker + if (width == null || height == null) { + return; + } + this._width = width; + this._height = height; + + this.getLayer(CANVAS_ZLEVEL).resize(width, height); + } + else { + var domRoot = this._domRoot; + // FIXME Why ? + domRoot.style.display = 'none'; + + // Save input w/h + var opts = this._opts; + width != null && (opts.width = width); + height != null && (opts.height = height); + + width = this._getSize(0); + height = this._getSize(1); + + domRoot.style.display = ''; + + // 优化没有实际改变的resize + if (this._width != width || height != this._height) { + domRoot.style.width = width + 'px'; + domRoot.style.height = height + 'px'; + + for (var id in this._layers) { + if (this._layers.hasOwnProperty(id)) { + this._layers[id].resize(width, height); + } + } + each$1(this._progressiveLayers, function (layer) { + layer.resize(width, height); + }); + + this.refresh(true); + } + + this._width = width; + this._height = height; + + } + return this; + }, + + /** + * 清除单独的一个层 + * @param {number} zlevel + */ + clearLayer: function (zlevel) { + var layer = this._layers[zlevel]; + if (layer) { + layer.clear(); + } + }, + + /** + * 释放 + */ + dispose: function () { + this.root.innerHTML = ''; + + this.root = + this.storage = + + this._domRoot = + this._layers = null; + }, + + /** + * Get canvas which has all thing rendered + * @param {Object} opts + * @param {string} [opts.backgroundColor] + * @param {number} [opts.pixelRatio] + */ + getRenderedCanvas: function (opts) { + opts = opts || {}; + if (this._singleCanvas && !this._compositeManually) { + return this._layers[CANVAS_ZLEVEL].dom; + } + + var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr); + imageLayer.initContext(); + imageLayer.clear(false, opts.backgroundColor || this._backgroundColor); + + if (opts.pixelRatio <= this.dpr) { + this.refresh(); + + var width = imageLayer.dom.width; + var height = imageLayer.dom.height; + var ctx = imageLayer.ctx; + this.eachLayer(function (layer) { + if (layer.__builtin__) { + ctx.drawImage(layer.dom, 0, 0, width, height); + } + else if (layer.renderToCanvas) { + imageLayer.ctx.save(); + layer.renderToCanvas(imageLayer.ctx); + imageLayer.ctx.restore(); + } + }); + } + else { + // PENDING, echarts-gl and incremental rendering. + var scope = {}; + var displayList = this.storage.getDisplayList(true); + for (var i = 0; i < displayList.length; i++) { + var el = displayList[i]; + this._doPaintEl(el, imageLayer, true, scope); + } + } + + return imageLayer.dom; + }, + /** + * 获取绘图区域宽度 + */ + getWidth: function () { + return this._width; + }, + + /** + * 获取绘图区域高度 + */ + getHeight: function () { + return this._height; + }, + + _getSize: function (whIdx) { + var opts = this._opts; + var wh = ['width', 'height'][whIdx]; + var cwh = ['clientWidth', 'clientHeight'][whIdx]; + var plt = ['paddingLeft', 'paddingTop'][whIdx]; + var prb = ['paddingRight', 'paddingBottom'][whIdx]; + + if (opts[wh] != null && opts[wh] !== 'auto') { + return parseFloat(opts[wh]); + } + + var root = this.root; + // IE8 does not support getComputedStyle, but it use VML. + var stl = document.defaultView.getComputedStyle(root); + + return ( + (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) + - (parseInt10(stl[plt]) || 0) + - (parseInt10(stl[prb]) || 0) + ) | 0; + }, + + pathToImage: function (path, dpr) { + dpr = dpr || this.dpr; + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + var rect = path.getBoundingRect(); + var style = path.style; + var shadowBlurSize = style.shadowBlur * dpr; + var shadowOffsetX = style.shadowOffsetX * dpr; + var shadowOffsetY = style.shadowOffsetY * dpr; + var lineWidth = style.hasStroke() ? style.lineWidth : 0; + + var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize); + var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize); + var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize); + var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize); + var width = rect.width + leftMargin + rightMargin; + var height = rect.height + topMargin + bottomMargin; + + canvas.width = width * dpr; + canvas.height = height * dpr; + + ctx.scale(dpr, dpr); + ctx.clearRect(0, 0, width, height); + ctx.dpr = dpr; + + var pathTransform = { + position: path.position, + rotation: path.rotation, + scale: path.scale + }; + path.position = [leftMargin - rect.x, topMargin - rect.y]; + path.rotation = 0; + path.scale = [1, 1]; + path.updateTransform(); + if (path) { + path.brush(ctx); + } + + var ImageShape = ZImage; + var imgShape = new ImageShape({ + style: { + x: 0, + y: 0, + image: canvas + } + }); + + if (pathTransform.position != null) { + imgShape.position = path.position = pathTransform.position; + } + + if (pathTransform.rotation != null) { + imgShape.rotation = path.rotation = pathTransform.rotation; + } + + if (pathTransform.scale != null) { + imgShape.scale = path.scale = pathTransform.scale; + } + + return imgShape; + } +}; + +/** + * 动画主类, 调度和管理所有动画控制器 + * + * @module zrender/animation/Animation + * @author pissang(https://github.com/pissang) + */ +// TODO Additive animation +// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/ +// https://developer.apple.com/videos/wwdc2014/#236 + +/** + * @typedef {Object} IZRenderStage + * @property {Function} update + */ + +/** + * @alias module:zrender/animation/Animation + * @constructor + * @param {Object} [options] + * @param {Function} [options.onframe] + * @param {IZRenderStage} [options.stage] + * @example + * var animation = new Animation(); + * var obj = { + * x: 100, + * y: 100 + * }; + * animation.animate(node.position) + * .when(1000, { + * x: 500, + * y: 500 + * }) + * .when(2000, { + * x: 100, + * y: 100 + * }) + * .start('spline'); + */ +var Animation = function (options) { + + options = options || {}; + + this.stage = options.stage || {}; + + this.onframe = options.onframe || function() {}; + + // private properties + this._clips = []; + + this._running = false; + + this._time; + + this._pausedTime; + + this._pauseStart; + + this._paused = false; + + Eventful.call(this); +}; + +Animation.prototype = { + + constructor: Animation, + /** + * 添加 clip + * @param {module:zrender/animation/Clip} clip + */ + addClip: function (clip) { + this._clips.push(clip); + }, + /** + * 添加 animator + * @param {module:zrender/animation/Animator} animator + */ + addAnimator: function (animator) { + animator.animation = this; + var clips = animator.getClips(); + for (var i = 0; i < clips.length; i++) { + this.addClip(clips[i]); + } + }, + /** + * 删除动画片段 + * @param {module:zrender/animation/Clip} clip + */ + removeClip: function(clip) { + var idx = indexOf(this._clips, clip); + if (idx >= 0) { + this._clips.splice(idx, 1); + } + }, + + /** + * 删除动画片段 + * @param {module:zrender/animation/Animator} animator + */ + removeAnimator: function (animator) { + var clips = animator.getClips(); + for (var i = 0; i < clips.length; i++) { + this.removeClip(clips[i]); + } + animator.animation = null; + }, + + _update: function() { + var time = new Date().getTime() - this._pausedTime; + var delta = time - this._time; + var clips = this._clips; + var len = clips.length; + + var deferredEvents = []; + var deferredClips = []; + for (var i = 0; i < len; i++) { + var clip = clips[i]; + var e = clip.step(time, delta); + // Throw out the events need to be called after + // stage.update, like destroy + if (e) { + deferredEvents.push(e); + deferredClips.push(clip); + } + } + + // Remove the finished clip + for (var i = 0; i < len;) { + if (clips[i]._needsRemove) { + clips[i] = clips[len - 1]; + clips.pop(); + len--; + } + else { + i++; + } + } + + len = deferredEvents.length; + for (var i = 0; i < len; i++) { + deferredClips[i].fire(deferredEvents[i]); + } + + this._time = time; + + this.onframe(delta); + + // 'frame' should be triggered before stage, because upper application + // depends on the sequence (e.g., echarts-stream and finish + // event judge) + this.trigger('frame', delta); + + if (this.stage.update) { + this.stage.update(); + } + }, + + _startLoop: function () { + var self = this; + + this._running = true; + + function step() { + if (self._running) { + + requestAnimationFrame(step); + + !self._paused && self._update(); + } + } + + requestAnimationFrame(step); + }, + + /** + * Start animation. + */ + start: function () { + + this._time = new Date().getTime(); + this._pausedTime = 0; + + this._startLoop(); + }, + + /** + * Stop animation. + */ + stop: function () { + this._running = false; + }, + + /** + * Pause animation. + */ + pause: function () { + if (!this._paused) { + this._pauseStart = new Date().getTime(); + this._paused = true; + } + }, + + /** + * Resume animation. + */ + resume: function () { + if (this._paused) { + this._pausedTime += (new Date().getTime()) - this._pauseStart; + this._paused = false; + } + }, + + /** + * Clear animation. + */ + clear: function () { + this._clips = []; + }, + + /** + * Whether animation finished. + */ + isFinished: function () { + return !this._clips.length; + }, + + /** + * Creat animator for a target, whose props can be animated. + * + * @param {Object} target + * @param {Object} options + * @param {boolean} [options.loop=false] Whether loop animation. + * @param {Function} [options.getter=null] Get value from target. + * @param {Function} [options.setter=null] Set value to target. + * @return {module:zrender/animation/Animation~Animator} + */ + // TODO Gap + animate: function (target, options) { + options = options || {}; + + var animator = new Animator( + target, + options.loop, + options.getter, + options.setter + ); + + this.addAnimator(animator); + + return animator; + } +}; + +mixin(Animation, Eventful); + +/** + * Only implements needed gestures for mobile. + */ + +var GestureMgr = function () { + + /** + * @private + * @type {Array.} + */ + this._track = []; +}; + +GestureMgr.prototype = { + + constructor: GestureMgr, + + recognize: function (event, target, root) { + this._doTrack(event, target, root); + return this._recognize(event); + }, + + clear: function () { + this._track.length = 0; + return this; + }, + + _doTrack: function (event, target, root) { + var touches = event.touches; + + if (!touches) { + return; + } + + var trackItem = { + points: [], + touches: [], + target: target, + event: event + }; + + for (var i = 0, len = touches.length; i < len; i++) { + var touch = touches[i]; + var pos = clientToLocal(root, touch, {}); + trackItem.points.push([pos.zrX, pos.zrY]); + trackItem.touches.push(touch); + } + + this._track.push(trackItem); + }, + + _recognize: function (event) { + for (var eventName in recognizers) { + if (recognizers.hasOwnProperty(eventName)) { + var gestureInfo = recognizers[eventName](this._track, event); + if (gestureInfo) { + return gestureInfo; + } + } + } + } +}; + +function dist$1(pointPair) { + var dx = pointPair[1][0] - pointPair[0][0]; + var dy = pointPair[1][1] - pointPair[0][1]; + + return Math.sqrt(dx * dx + dy * dy); +} + +function center(pointPair) { + return [ + (pointPair[0][0] + pointPair[1][0]) / 2, + (pointPair[0][1] + pointPair[1][1]) / 2 + ]; +} + +var recognizers = { + + pinch: function (track, event) { + var trackLen = track.length; + + if (!trackLen) { + return; + } + + var pinchEnd = (track[trackLen - 1] || {}).points; + var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd; + + if (pinchPre + && pinchPre.length > 1 + && pinchEnd + && pinchEnd.length > 1 + ) { + var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre); + !isFinite(pinchScale) && (pinchScale = 1); + + event.pinchScale = pinchScale; + + var pinchCenter = center(pinchEnd); + event.pinchX = pinchCenter[0]; + event.pinchY = pinchCenter[1]; + + return { + type: 'pinch', + target: track[0].target, + event: event + }; + } + } + + // Only pinch currently. +}; + +var TOUCH_CLICK_DELAY = 300; + +var mouseHandlerNames = [ + 'click', 'dblclick', 'mousewheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' +]; + +var touchHandlerNames = [ + 'touchstart', 'touchend', 'touchmove' +]; + +var pointerEventNames = { + pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 +}; + +var pointerHandlerNames = map(mouseHandlerNames, function (name) { + var nm = name.replace('mouse', 'pointer'); + return pointerEventNames[nm] ? nm : name; +}); + +function eventNameFix(name) { + return (name === 'mousewheel' && env$1.browser.firefox) ? 'DOMMouseScroll' : name; +} + +function processGesture(proxy, event, stage) { + var gestureMgr = proxy._gestureMgr; + + stage === 'start' && gestureMgr.clear(); + + var gestureInfo = gestureMgr.recognize( + event, + proxy.handler.findHover(event.zrX, event.zrY, null).target, + proxy.dom + ); + + stage === 'end' && gestureMgr.clear(); + + // Do not do any preventDefault here. Upper application do that if necessary. + if (gestureInfo) { + var type = gestureInfo.type; + event.gestureEvent = type; + + proxy.handler.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event); + } +} + +// function onMSGestureChange(proxy, event) { +// if (event.translationX || event.translationY) { +// // mousemove is carried by MSGesture to reduce the sensitivity. +// proxy.handler.dispatchToElement(event.target, 'mousemove', event); +// } +// if (event.scale !== 1) { +// event.pinchX = event.offsetX; +// event.pinchY = event.offsetY; +// event.pinchScale = event.scale; +// proxy.handler.dispatchToElement(event.target, 'pinch', event); +// } +// } + +/** + * Prevent mouse event from being dispatched after Touch Events action + * @see + * 1. Mobile browsers dispatch mouse events 300ms after touchend. + * 2. Chrome for Android dispatch mousedown for long-touch about 650ms + * Result: Blocking Mouse Events for 700ms. + */ +function setTouchTimer(instance) { + instance._touching = true; + clearTimeout(instance._touchTimer); + instance._touchTimer = setTimeout(function () { + instance._touching = false; + }, 700); +} + + +var domHandlers = { + /** + * Mouse move handler + * @inner + * @param {Event} event + */ + mousemove: function (event) { + event = normalizeEvent(this.dom, event); + + this.trigger('mousemove', event); + }, + + /** + * Mouse out handler + * @inner + * @param {Event} event + */ + mouseout: function (event) { + event = normalizeEvent(this.dom, event); + + var element = event.toElement || event.relatedTarget; + if (element != this.dom) { + while (element && element.nodeType != 9) { + // 忽略包含在root中的dom引起的mouseOut + if (element === this.dom) { + return; + } + + element = element.parentNode; + } + } + + this.trigger('mouseout', event); + }, + + /** + * Touch开始响应函数 + * @inner + * @param {Event} event + */ + touchstart: function (event) { + // Default mouse behaviour should not be disabled here. + // For example, page may needs to be slided. + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + this._lastTouchMoment = new Date(); + + processGesture(this, event, 'start'); + + // In touch device, trigger `mousemove`(`mouseover`) should + // be triggered, and must before `mousedown` triggered. + domHandlers.mousemove.call(this, event); + + domHandlers.mousedown.call(this, event); + + setTouchTimer(this); + }, + + /** + * Touch移动响应函数 + * @inner + * @param {Event} event + */ + touchmove: function (event) { + + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + processGesture(this, event, 'change'); + + // Mouse move should always be triggered no matter whether + // there is gestrue event, because mouse move and pinch may + // be used at the same time. + domHandlers.mousemove.call(this, event); + + setTouchTimer(this); + }, + + /** + * Touch结束响应函数 + * @inner + * @param {Event} event + */ + touchend: function (event) { + + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + processGesture(this, event, 'end'); + + domHandlers.mouseup.call(this, event); + + // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is + // triggered in `touchstart`. This seems to be illogical, but by this mechanism, + // we can conveniently implement "hover style" in both PC and touch device just + // by listening to `mouseover` to add "hover style" and listening to `mouseout` + // to remove "hover style" on an element, without any additional code for + // compatibility. (`mouseout` will not be triggered in `touchend`, so "hover + // style" will remain for user view) + + // click event should always be triggered no matter whether + // there is gestrue event. System click can not be prevented. + if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) { + domHandlers.click.call(this, event); + } + + setTouchTimer(this); + }, + + pointerdown: function (event) { + domHandlers.mousedown.call(this, event); + + // if (useMSGuesture(this, event)) { + // this._msGesture.addPointer(event.pointerId); + // } + }, + + pointermove: function (event) { + // FIXME + // pointermove is so sensitive that it always triggered when + // tap(click) on touch screen, which affect some judgement in + // upper application. So, we dont support mousemove on MS touch + // device yet. + if (!isPointerFromTouch(event)) { + domHandlers.mousemove.call(this, event); + } + }, + + pointerup: function (event) { + domHandlers.mouseup.call(this, event); + }, + + pointerout: function (event) { + // pointerout will be triggered when tap on touch screen + // (IE11+/Edge on MS Surface) after click event triggered, + // which is inconsistent with the mousout behavior we defined + // in touchend. So we unify them. + // (check domHandlers.touchend for detailed explanation) + if (!isPointerFromTouch(event)) { + domHandlers.mouseout.call(this, event); + } + } +}; + +function isPointerFromTouch(event) { + var pointerType = event.pointerType; + return pointerType === 'pen' || pointerType === 'touch'; +} + +// function useMSGuesture(handlerProxy, event) { +// return isPointerFromTouch(event) && !!handlerProxy._msGesture; +// } + +// Common handlers +each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { + domHandlers[name] = function (event) { + event = normalizeEvent(this.dom, event); + this.trigger(name, event); + }; +}); + +/** + * 为控制类实例初始化dom 事件处理函数 + * + * @inner + * @param {module:zrender/Handler} instance 控制类实例 + */ +function initDomHandler(instance) { + each$1(touchHandlerNames, function (name) { + instance._handlers[name] = bind(domHandlers[name], instance); + }); + + each$1(pointerHandlerNames, function (name) { + instance._handlers[name] = bind(domHandlers[name], instance); + }); + + each$1(mouseHandlerNames, function (name) { + instance._handlers[name] = makeMouseHandler(domHandlers[name], instance); + }); + + function makeMouseHandler(fn, instance) { + return function () { + if (instance._touching) { + return; + } + return fn.apply(instance, arguments); + }; + } +} + + +function HandlerDomProxy(dom) { + Eventful.call(this); + + this.dom = dom; + + /** + * @private + * @type {boolean} + */ + this._touching = false; + + /** + * @private + * @type {number} + */ + this._touchTimer; + + /** + * @private + * @type {module:zrender/core/GestureMgr} + */ + this._gestureMgr = new GestureMgr(); + + this._handlers = {}; + + initDomHandler(this); + + if (env$1.pointerEventsSupported) { // Only IE11+/Edge + // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240), + // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event + // at the same time. + // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on + // screen, which do not occurs in pointer event. + // So we use pointer event to both detect touch gesture and mouse behavior. + mountHandlers(pointerHandlerNames, this); + + // FIXME + // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable, + // which does not prevent defuault behavior occasionally (which may cause view port + // zoomed in but use can not zoom it back). And event.preventDefault() does not work. + // So we have to not to use MSGesture and not to support touchmove and pinch on MS + // touch screen. And we only support click behavior on MS touch screen now. + + // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+. + // We dont support touch on IE on win7. + // See + // if (typeof MSGesture === 'function') { + // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line + // dom.addEventListener('MSGestureChange', onMSGestureChange); + // } + } + else { + if (env$1.touchEventsSupported) { + mountHandlers(touchHandlerNames, this); + // Handler of 'mouseout' event is needed in touch mode, which will be mounted below. + // addEventListener(root, 'mouseout', this._mouseoutHandler); + } + + // 1. Considering some devices that both enable touch and mouse event (like on MS Surface + // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise + // mouse event can not be handle in those devices. + // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent + // mouseevent after touch event triggered, see `setTouchTimer`. + mountHandlers(mouseHandlerNames, this); + } + + function mountHandlers(handlerNames, instance) { + each$1(handlerNames, function (name) { + addEventListener(dom, eventNameFix(name), instance._handlers[name]); + }, instance); + } +} + +var handlerDomProxyProto = HandlerDomProxy.prototype; +handlerDomProxyProto.dispose = function () { + var handlerNames = mouseHandlerNames.concat(touchHandlerNames); + + for (var i = 0; i < handlerNames.length; i++) { + var name = handlerNames[i]; + removeEventListener(this.dom, eventNameFix(name), this._handlers[name]); + } +}; + +handlerDomProxyProto.setCursor = function (cursorStyle) { + this.dom.style && (this.dom.style.cursor = cursorStyle || 'default'); +}; + +mixin(HandlerDomProxy, Eventful); + +/*! +* ZRender, a high performance 2d drawing library. +* +* Copyright (c) 2013, Baidu Inc. +* All rights reserved. +* +* LICENSE +* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt +*/ + +var useVML = !env$1.canvasSupported; + +var painterCtors = { + canvas: Painter +}; + +var instances$1 = {}; // ZRender实例map索引 + +/** + * @type {string} + */ +var version$1 = '4.0.5'; + +/** + * Initializing a zrender instance + * @param {HTMLElement} dom + * @param {Object} opts + * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' + * @param {number} [opts.devicePixelRatio] + * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) + * @return {module:zrender/ZRender} + */ +function init$1(dom, opts) { + var zr = new ZRender(guid(), dom, opts); + instances$1[zr.id] = zr; + return zr; +} + +/** + * Dispose zrender instance + * @param {module:zrender/ZRender} zr + */ +function dispose$1(zr) { + if (zr) { + zr.dispose(); + } + else { + for (var key in instances$1) { + if (instances$1.hasOwnProperty(key)) { + instances$1[key].dispose(); + } + } + instances$1 = {}; + } + + return this; +} + +/** + * Get zrender instance by id + * @param {string} id zrender instance id + * @return {module:zrender/ZRender} + */ +function getInstance(id) { + return instances$1[id]; +} + +function registerPainter(name, Ctor) { + painterCtors[name] = Ctor; +} + +function delInstance(id) { + delete instances$1[id]; +} + +/** + * @module zrender/ZRender + */ +/** + * @constructor + * @alias module:zrender/ZRender + * @param {string} id + * @param {HTMLElement} dom + * @param {Object} opts + * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' + * @param {number} [opts.devicePixelRatio] + * @param {number} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Can be 'auto' (the same as null/undefined) + */ +var ZRender = function (id, dom, opts) { + + opts = opts || {}; + + /** + * @type {HTMLDomElement} + */ + this.dom = dom; + + /** + * @type {string} + */ + this.id = id; + + var self = this; + var storage = new Storage(); + + var rendererType = opts.renderer; + // TODO WebGL + if (useVML) { + if (!painterCtors.vml) { + throw new Error('You need to require \'zrender/vml/vml\' to support IE8'); + } + rendererType = 'vml'; + } + else if (!rendererType || !painterCtors[rendererType]) { + rendererType = 'canvas'; + } + var painter = new painterCtors[rendererType](dom, storage, opts, id); + + this.storage = storage; + this.painter = painter; + + var handerProxy = (!env$1.node && !env$1.worker) ? new HandlerDomProxy(painter.getViewportRoot()) : null; + this.handler = new Handler(storage, painter, handerProxy, painter.root); + + /** + * @type {module:zrender/animation/Animation} + */ + this.animation = new Animation({ + stage: { + update: bind(this.flush, this) + } + }); + this.animation.start(); + + /** + * @type {boolean} + * @private + */ + this._needsRefresh; + + // 修改 storage.delFromStorage, 每次删除元素之前删除动画 + // FIXME 有点ugly + var oldDelFromStorage = storage.delFromStorage; + var oldAddToStorage = storage.addToStorage; + + storage.delFromStorage = function (el) { + oldDelFromStorage.call(storage, el); + + el && el.removeSelfFromZr(self); + }; + + storage.addToStorage = function (el) { + oldAddToStorage.call(storage, el); + + el.addSelfToZr(self); + }; +}; + +ZRender.prototype = { + + constructor: ZRender, + /** + * 获取实例唯一标识 + * @return {string} + */ + getId: function () { + return this.id; + }, + + /** + * 添加元素 + * @param {module:zrender/Element} el + */ + add: function (el) { + this.storage.addRoot(el); + this._needsRefresh = true; + }, + + /** + * 删除元素 + * @param {module:zrender/Element} el + */ + remove: function (el) { + this.storage.delRoot(el); + this._needsRefresh = true; + }, + + /** + * Change configuration of layer + * @param {string} zLevel + * @param {Object} config + * @param {string} [config.clearColor=0] Clear color + * @param {string} [config.motionBlur=false] If enable motion blur + * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer + */ + configLayer: function (zLevel, config) { + if (this.painter.configLayer) { + this.painter.configLayer(zLevel, config); + } + this._needsRefresh = true; + }, + + /** + * Set background color + * @param {string} backgroundColor + */ + setBackgroundColor: function (backgroundColor) { + if (this.painter.setBackgroundColor) { + this.painter.setBackgroundColor(backgroundColor); + } + this._needsRefresh = true; + }, + + /** + * Repaint the canvas immediately + */ + refreshImmediately: function () { + // var start = new Date(); + // Clear needsRefresh ahead to avoid something wrong happens in refresh + // Or it will cause zrender refreshes again and again. + this._needsRefresh = false; + this.painter.refresh(); + /** + * Avoid trigger zr.refresh in Element#beforeUpdate hook + */ + this._needsRefresh = false; + // var end = new Date(); + // var log = document.getElementById('log'); + // if (log) { + // log.innerHTML = log.innerHTML + '
    ' + (end - start); + // } + }, + + /** + * Mark and repaint the canvas in the next frame of browser + */ + refresh: function() { + this._needsRefresh = true; + }, + + /** + * Perform all refresh + */ + flush: function () { + var triggerRendered; + + if (this._needsRefresh) { + triggerRendered = true; + this.refreshImmediately(); + } + if (this._needsRefreshHover) { + triggerRendered = true; + this.refreshHoverImmediately(); + } + + triggerRendered && this.trigger('rendered'); + }, + + /** + * Add element to hover layer + * @param {module:zrender/Element} el + * @param {Object} style + */ + addHover: function (el, style) { + if (this.painter.addHover) { + var elMirror = this.painter.addHover(el, style); + this.refreshHover(); + return elMirror; + } + }, + + /** + * Add element from hover layer + * @param {module:zrender/Element} el + */ + removeHover: function (el) { + if (this.painter.removeHover) { + this.painter.removeHover(el); + this.refreshHover(); + } + }, + + /** + * Clear all hover elements in hover layer + * @param {module:zrender/Element} el + */ + clearHover: function () { + if (this.painter.clearHover) { + this.painter.clearHover(); + this.refreshHover(); + } + }, + + /** + * Refresh hover in next frame + */ + refreshHover: function () { + this._needsRefreshHover = true; + }, + + /** + * Refresh hover immediately + */ + refreshHoverImmediately: function () { + this._needsRefreshHover = false; + this.painter.refreshHover && this.painter.refreshHover(); + }, + + /** + * Resize the canvas. + * Should be invoked when container size is changed + * @param {Object} [opts] + * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) + */ + resize: function(opts) { + opts = opts || {}; + this.painter.resize(opts.width, opts.height); + this.handler.resize(); + }, + + /** + * Stop and clear all animation immediately + */ + clearAnimation: function () { + this.animation.clear(); + }, + + /** + * Get container width + */ + getWidth: function() { + return this.painter.getWidth(); + }, + + /** + * Get container height + */ + getHeight: function() { + return this.painter.getHeight(); + }, + + /** + * Export the canvas as Base64 URL + * @param {string} type + * @param {string} [backgroundColor='#fff'] + * @return {string} Base64 URL + */ + // toDataURL: function(type, backgroundColor) { + // return this.painter.getRenderedCanvas({ + // backgroundColor: backgroundColor + // }).toDataURL(type); + // }, + + /** + * Converting a path to image. + * It has much better performance of drawing image rather than drawing a vector path. + * @param {module:zrender/graphic/Path} e + * @param {number} width + * @param {number} height + */ + pathToImage: function(e, dpr) { + return this.painter.pathToImage(e, dpr); + }, + + /** + * Set default cursor + * @param {string} [cursorStyle='default'] 例如 crosshair + */ + setCursorStyle: function (cursorStyle) { + this.handler.setCursorStyle(cursorStyle); + }, + + /** + * Find hovered element + * @param {number} x + * @param {number} y + * @return {Object} {target, topTarget} + */ + findHover: function (x, y) { + return this.handler.findHover(x, y); + }, + + /** + * Bind event + * + * @param {string} eventName Event name + * @param {Function} eventHandler Handler function + * @param {Object} [context] Context object + */ + on: function(eventName, eventHandler, context) { + this.handler.on(eventName, eventHandler, context); + }, + + /** + * Unbind event + * @param {string} eventName Event name + * @param {Function} [eventHandler] Handler function + */ + off: function(eventName, eventHandler) { + this.handler.off(eventName, eventHandler); + }, + + /** + * Trigger event manually + * + * @param {string} eventName Event name + * @param {event=} event Event object + */ + trigger: function (eventName, event) { + this.handler.trigger(eventName, event); + }, + + + /** + * Clear all objects and the canvas. + */ + clear: function () { + this.storage.delRoot(); + this.painter.clear(); + }, + + /** + * Dispose self. + */ + dispose: function () { + this.animation.stop(); + + this.clear(); + this.storage.dispose(); + this.painter.dispose(); + this.handler.dispose(); + + this.animation = + this.storage = + this.painter = + this.handler = null; + + delInstance(this.id); + } +}; + + + +var zrender = (Object.freeze || Object)({ + version: version$1, + init: init$1, + dispose: dispose$1, + getInstance: getInstance, + registerPainter: registerPainter +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$2 = each$1; +var isObject$2 = isObject$1; +var isArray$1 = isArray; + +/** + * Make the name displayable. But we should + * make sure it is not duplicated with user + * specified name, so use '\0'; + */ +var DUMMY_COMPONENT_NAME_PREFIX = 'series\0'; + +/** + * If value is not array, then translate it to array. + * @param {*} value + * @return {Array} [value] or value + */ +function normalizeToArray(value) { + return value instanceof Array + ? value + : value == null + ? [] + : [value]; +} + +/** + * Sync default option between normal and emphasis like `position` and `show` + * In case some one will write code like + * label: { + * show: false, + * position: 'outside', + * fontSize: 18 + * }, + * emphasis: { + * label: { show: true } + * } + * @param {Object} opt + * @param {string} key + * @param {Array.} subOpts + */ +function defaultEmphasis(opt, key, subOpts) { + // Caution: performance sensitive. + if (opt) { + opt[key] = opt[key] || {}; + opt.emphasis = opt.emphasis || {}; + opt.emphasis[key] = opt.emphasis[key] || {}; + + // Default emphasis option from normal + for (var i = 0, len = subOpts.length; i < len; i++) { + var subOptName = subOpts[i]; + if (!opt.emphasis[key].hasOwnProperty(subOptName) + && opt[key].hasOwnProperty(subOptName) + ) { + opt.emphasis[key][subOptName] = opt[key][subOptName]; + } + } + } +} + +var TEXT_STYLE_OPTIONS = [ + 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily', + 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', + 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', + 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', + 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', + 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding' +]; + +// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([ +// 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter', +// 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily', +// // FIXME: deprecated, check and remove it. +// 'textStyle' +// ]); + +/** + * The method do not ensure performance. + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method retieves value from data. + * @param {string|number|Date|Array|Object} dataItem + * @return {number|string|Date|Array.} + */ +function getDataItemValue(dataItem) { + return (isObject$2(dataItem) && !isArray$1(dataItem) && !(dataItem instanceof Date)) + ? dataItem.value : dataItem; +} + +/** + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method determine if dataItem has extra option besides value + * @param {string|number|Date|Array|Object} dataItem + */ +function isDataItemOption(dataItem) { + return isObject$2(dataItem) + && !(dataItem instanceof Array); + // // markLine data can be array + // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array)); +} + +/** + * Mapping to exists for merge. + * + * @public + * @param {Array.|Array.} exists + * @param {Object|Array.} newCptOptions + * @return {Array.} Result, like [{exist: ..., option: ...}, {}], + * index of which is the same as exists. + */ +function mappingToExists(exists, newCptOptions) { + // Mapping by the order by original option (but not order of + // new option) in merge mode. Because we should ensure + // some specified index (like xAxisIndex) is consistent with + // original option, which is easy to understand, espatially in + // media query. And in most case, merge option is used to + // update partial option but not be expected to change order. + newCptOptions = (newCptOptions || []).slice(); + + var result = map(exists || [], function (obj, index) { + return {exist: obj}; + }); + + // Mapping by id or name if specified. + each$2(newCptOptions, function (cptOption, index) { + if (!isObject$2(cptOption)) { + return; + } + + // id has highest priority. + for (var i = 0; i < result.length; i++) { + if (!result[i].option // Consider name: two map to one. + && cptOption.id != null + && result[i].exist.id === cptOption.id + '' + ) { + result[i].option = cptOption; + newCptOptions[index] = null; + return; + } + } + + for (var i = 0; i < result.length; i++) { + var exist = result[i].exist; + if (!result[i].option // Consider name: two map to one. + // Can not match when both ids exist but different. + && (exist.id == null || cptOption.id == null) + && cptOption.name != null + && !isIdInner(cptOption) + && !isIdInner(exist) + && exist.name === cptOption.name + '' + ) { + result[i].option = cptOption; + newCptOptions[index] = null; + return; + } + } + }); + + // Otherwise mapping by index. + each$2(newCptOptions, function (cptOption, index) { + if (!isObject$2(cptOption)) { + return; + } + + var i = 0; + for (; i < result.length; i++) { + var exist = result[i].exist; + if (!result[i].option + // Existing model that already has id should be able to + // mapped to (because after mapping performed model may + // be assigned with a id, whish should not affect next + // mapping), except those has inner id. + && !isIdInner(exist) + // Caution: + // Do not overwrite id. But name can be overwritten, + // because axis use name as 'show label text'. + // 'exist' always has id and name and we dont + // need to check it. + && cptOption.id == null + ) { + result[i].option = cptOption; + break; + } + } + + if (i >= result.length) { + result.push({option: cptOption}); + } + }); + + return result; +} + +/** + * Make id and name for mapping result (result of mappingToExists) + * into `keyInfo` field. + * + * @public + * @param {Array.} Result, like [{exist: ..., option: ...}, {}], + * which order is the same as exists. + * @return {Array.} The input. + */ +function makeIdAndName(mapResult) { + // We use this id to hash component models and view instances + // in echarts. id can be specified by user, or auto generated. + + // The id generation rule ensures new view instance are able + // to mapped to old instance when setOption are called in + // no-merge mode. So we generate model id by name and plus + // type in view id. + + // name can be duplicated among components, which is convenient + // to specify multi components (like series) by one name. + + // Ensure that each id is distinct. + var idMap = createHashMap(); + + each$2(mapResult, function (item, index) { + var existCpt = item.exist; + existCpt && idMap.set(existCpt.id, item); + }); + + each$2(mapResult, function (item, index) { + var opt = item.option; + + assert$1( + !opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, + 'id duplicates: ' + (opt && opt.id) + ); + + opt && opt.id != null && idMap.set(opt.id, item); + !item.keyInfo && (item.keyInfo = {}); + }); + + // Make name and id. + each$2(mapResult, function (item, index) { + var existCpt = item.exist; + var opt = item.option; + var keyInfo = item.keyInfo; + + if (!isObject$2(opt)) { + return; + } + + // name can be overwitten. Consider case: axis.name = '20km'. + // But id generated by name will not be changed, which affect + // only in that case: setOption with 'not merge mode' and view + // instance will be recreated, which can be accepted. + keyInfo.name = opt.name != null + ? opt.name + '' + : existCpt + ? existCpt.name + // Avoid diffferent series has the same name, + // because name may be used like in color pallet. + : DUMMY_COMPONENT_NAME_PREFIX + index; + + if (existCpt) { + keyInfo.id = existCpt.id; + } + else if (opt.id != null) { + keyInfo.id = opt.id + ''; + } + else { + // Consider this situatoin: + // optionA: [{name: 'a'}, {name: 'a'}, {..}] + // optionB [{..}, {name: 'a'}, {name: 'a'}] + // Series with the same name between optionA and optionB + // should be mapped. + var idNum = 0; + do { + keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++; + } + while (idMap.get(keyInfo.id)); + } + + idMap.set(keyInfo.id, item); + }); +} + +function isNameSpecified(componentModel) { + var name = componentModel.name; + // Is specified when `indexOf` get -1 or > 0. + return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX)); +} + +/** + * @public + * @param {Object} cptOption + * @return {boolean} + */ +function isIdInner(cptOption) { + return isObject$2(cptOption) + && cptOption.id + && (cptOption.id + '').indexOf('\0_ec_\0') === 0; +} + +/** + * A helper for removing duplicate items between batchA and batchB, + * and in themselves, and categorize by series. + * + * @param {Array.} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @param {Array.} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @return {Array., Array.>} result: [resultBatchA, resultBatchB] + */ +function compressBatches(batchA, batchB) { + var mapA = {}; + var mapB = {}; + + makeMap(batchA || [], mapA); + makeMap(batchB || [], mapB, mapA); + + return [mapToArray(mapA), mapToArray(mapB)]; + + function makeMap(sourceBatch, map$$1, otherMap) { + for (var i = 0, len = sourceBatch.length; i < len; i++) { + var seriesId = sourceBatch[i].seriesId; + var dataIndices = normalizeToArray(sourceBatch[i].dataIndex); + var otherDataIndices = otherMap && otherMap[seriesId]; + + for (var j = 0, lenj = dataIndices.length; j < lenj; j++) { + var dataIndex = dataIndices[j]; + + if (otherDataIndices && otherDataIndices[dataIndex]) { + otherDataIndices[dataIndex] = null; + } + else { + (map$$1[seriesId] || (map$$1[seriesId] = {}))[dataIndex] = 1; + } + } + } + } + + function mapToArray(map$$1, isData) { + var result = []; + for (var i in map$$1) { + if (map$$1.hasOwnProperty(i) && map$$1[i] != null) { + if (isData) { + result.push(+i); + } + else { + var dataIndices = mapToArray(map$$1[i], true); + dataIndices.length && result.push({seriesId: i, dataIndex: dataIndices}); + } + } + } + return result; + } +} + +/** + * @param {module:echarts/data/List} data + * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name + * each of which can be Array or primary type. + * @return {number|Array.} dataIndex If not found, return undefined/null. + */ +function queryDataIndex(data, payload) { + if (payload.dataIndexInside != null) { + return payload.dataIndexInside; + } + else if (payload.dataIndex != null) { + return isArray(payload.dataIndex) + ? map(payload.dataIndex, function (value) { + return data.indexOfRawIndex(value); + }) + : data.indexOfRawIndex(payload.dataIndex); + } + else if (payload.name != null) { + return isArray(payload.name) + ? map(payload.name, function (value) { + return data.indexOfName(value); + }) + : data.indexOfName(payload.name); + } +} + +/** + * Enable property storage to any host object. + * Notice: Serialization is not supported. + * + * For example: + * var inner = zrUitl.makeInner(); + * + * function some1(hostObj) { + * inner(hostObj).someProperty = 1212; + * ... + * } + * function some2() { + * var fields = inner(this); + * fields.someProperty1 = 1212; + * fields.someProperty2 = 'xx'; + * ... + * } + * + * @return {Function} + */ +function makeInner() { + // Consider different scope by es module import. + var key = '__\0ec_inner_' + innerUniqueIndex++ + '_' + Math.random().toFixed(5); + return function (hostObj) { + return hostObj[key] || (hostObj[key] = {}); + }; +} +var innerUniqueIndex = 0; + +/** + * @param {module:echarts/model/Global} ecModel + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex, seriesId, seriesName, + * geoIndex, geoId, geoName, + * bmapIndex, bmapId, bmapName, + * xAxisIndex, xAxisId, xAxisName, + * yAxisIndex, yAxisId, yAxisName, + * gridIndex, gridId, gridName, + * ... (can be extended) + * } + * Each properties can be number|string|Array.|Array. + * For example, a finder could be + * { + * seriesIndex: 3, + * geoId: ['aa', 'cc'], + * gridName: ['xx', 'rr'] + * } + * xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify) + * If nothing or null/undefined specified, return nothing. + * @param {Object} [opt] + * @param {string} [opt.defaultMainType] + * @param {Array.} [opt.includeMainTypes] + * @return {Object} result like: + * { + * seriesModels: [seriesModel1, seriesModel2], + * seriesModel: seriesModel1, // The first model + * geoModels: [geoModel1, geoModel2], + * geoModel: geoModel1, // The first model + * ... + * } + */ +function parseFinder(ecModel, finder, opt) { + if (isString(finder)) { + var obj = {}; + obj[finder + 'Index'] = 0; + finder = obj; + } + + var defaultMainType = opt && opt.defaultMainType; + if (defaultMainType + && !has(finder, defaultMainType + 'Index') + && !has(finder, defaultMainType + 'Id') + && !has(finder, defaultMainType + 'Name') + ) { + finder[defaultMainType + 'Index'] = 0; + } + + var result = {}; + + each$2(finder, function (value, key) { + var value = finder[key]; + + // Exclude 'dataIndex' and other illgal keys. + if (key === 'dataIndex' || key === 'dataIndexInside') { + result[key] = value; + return; + } + + var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || []; + var mainType = parsedKey[1]; + var queryType = (parsedKey[2] || '').toLowerCase(); + + if (!mainType + || !queryType + || value == null + || (queryType === 'index' && value === 'none') + || (opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) + ) { + return; + } + + var queryParam = {mainType: mainType}; + if (queryType !== 'index' || value !== 'all') { + queryParam[queryType] = value; + } + + var models = ecModel.queryComponents(queryParam); + result[mainType + 'Models'] = models; + result[mainType + 'Model'] = models[0]; + }); + + return result; +} + +function has(obj, prop) { + return obj && obj.hasOwnProperty(prop); +} + +function setAttribute(dom, key, value) { + dom.setAttribute + ? dom.setAttribute(key, value) + : (dom[key] = value); +} + +function getAttribute(dom, key) { + return dom.getAttribute + ? dom.getAttribute(key) + : dom[key]; +} + +function getTooltipRenderMode(renderModeOption) { + if (renderModeOption === 'auto') { + // Using html when `document` exists, use richText otherwise + return env$1.domSupported ? 'html' : 'richText'; + } + else { + return renderModeOption || 'html'; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var TYPE_DELIMITER = '.'; +var IS_CONTAINER = '___EC__COMPONENT__CONTAINER___'; + +/** + * Notice, parseClassType('') should returns {main: '', sub: ''} + * @public + */ +function parseClassType$1(componentType) { + var ret = {main: '', sub: ''}; + if (componentType) { + componentType = componentType.split(TYPE_DELIMITER); + ret.main = componentType[0] || ''; + ret.sub = componentType[1] || ''; + } + return ret; +} + +/** + * @public + */ +function checkClassType(componentType) { + assert$1( + /^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), + 'componentType "' + componentType + '" illegal' + ); +} + +/** + * @public + */ +function enableClassExtend(RootClass, mandatoryMethods) { + + RootClass.$constructor = RootClass; + RootClass.extend = function (proto) { + + if (__DEV__) { + each$1(mandatoryMethods, function (method) { + if (!proto[method]) { + console.warn( + 'Method `' + method + '` should be implemented' + + (proto.type ? ' in ' + proto.type : '') + '.' + ); + } + }); + } + + var superClass = this; + var ExtendedClass = function () { + if (!proto.$constructor) { + superClass.apply(this, arguments); + } + else { + proto.$constructor.apply(this, arguments); + } + }; + + extend(ExtendedClass.prototype, proto); + + ExtendedClass.extend = this.extend; + ExtendedClass.superCall = superCall; + ExtendedClass.superApply = superApply; + inherits(ExtendedClass, this); + ExtendedClass.superClass = superClass; + + return ExtendedClass; + }; +} + +var classBase = 0; + +/** + * Can not use instanceof, consider different scope by + * cross domain or es module import in ec extensions. + * Mount a method "isInstance()" to Clz. + */ +function enableClassCheck(Clz) { + var classAttr = ['__\0is_clz', classBase++, Math.random().toFixed(3)].join('_'); + Clz.prototype[classAttr] = true; + + if (__DEV__) { + assert$1(!Clz.isInstance, 'The method "is" can not be defined.'); + } + + Clz.isInstance = function (obj) { + return !!(obj && obj[classAttr]); + }; +} + +// superCall should have class info, which can not be fetch from 'this'. +// Consider this case: +// class A has method f, +// class B inherits class A, overrides method f, f call superApply('f'), +// class C inherits class B, do not overrides method f, +// then when method of class C is called, dead loop occured. +function superCall(context, methodName) { + var args = slice(arguments, 2); + return this.superClass.prototype[methodName].apply(context, args); +} + +function superApply(context, methodName, args) { + return this.superClass.prototype[methodName].apply(context, args); +} + +/** + * @param {Object} entity + * @param {Object} options + * @param {boolean} [options.registerWhenExtend] + * @public + */ +function enableClassManagement(entity, options) { + options = options || {}; + + /** + * Component model classes + * key: componentType, + * value: + * componentClass, when componentType is 'xxx' + * or Object., when componentType is 'xxx.yy' + * @type {Object} + */ + var storage = {}; + + entity.registerClass = function (Clazz, componentType) { + if (componentType) { + checkClassType(componentType); + componentType = parseClassType$1(componentType); + + if (!componentType.sub) { + if (__DEV__) { + if (storage[componentType.main]) { + console.warn(componentType.main + ' exists.'); + } + } + storage[componentType.main] = Clazz; + } + else if (componentType.sub !== IS_CONTAINER) { + var container = makeContainer(componentType); + container[componentType.sub] = Clazz; + } + } + return Clazz; + }; + + entity.getClass = function (componentMainType, subType, throwWhenNotFound) { + var Clazz = storage[componentMainType]; + + if (Clazz && Clazz[IS_CONTAINER]) { + Clazz = subType ? Clazz[subType] : null; + } + + if (throwWhenNotFound && !Clazz) { + throw new Error( + !subType + ? componentMainType + '.' + 'type should be specified.' + : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.' + ); + } + + return Clazz; + }; + + entity.getClassesByMainType = function (componentType) { + componentType = parseClassType$1(componentType); + + var result = []; + var obj = storage[componentType.main]; + + if (obj && obj[IS_CONTAINER]) { + each$1(obj, function (o, type) { + type !== IS_CONTAINER && result.push(o); + }); + } + else { + result.push(obj); + } + + return result; + }; + + entity.hasClass = function (componentType) { + // Just consider componentType.main. + componentType = parseClassType$1(componentType); + return !!storage[componentType.main]; + }; + + /** + * @return {Array.} Like ['aa', 'bb'], but can not be ['aa.xx'] + */ + entity.getAllClassMainTypes = function () { + var types = []; + each$1(storage, function (obj, type) { + types.push(type); + }); + return types; + }; + + /** + * If a main type is container and has sub types + * @param {string} mainType + * @return {boolean} + */ + entity.hasSubTypes = function (componentType) { + componentType = parseClassType$1(componentType); + var obj = storage[componentType.main]; + return obj && obj[IS_CONTAINER]; + }; + + entity.parseClassType = parseClassType$1; + + function makeContainer(componentType) { + var container = storage[componentType.main]; + if (!container || !container[IS_CONTAINER]) { + container = storage[componentType.main] = {}; + container[IS_CONTAINER] = true; + } + return container; + } + + if (options.registerWhenExtend) { + var originalExtend = entity.extend; + if (originalExtend) { + entity.extend = function (proto) { + var ExtendedClass = originalExtend.call(this, proto); + return entity.registerClass(ExtendedClass, proto.type); + }; + } + } + + return entity; +} + +/** + * @param {string|Array.} properties + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO Parse shadow style +// TODO Only shallow path support +var makeStyleMapper = function (properties) { + // Normalize + for (var i = 0; i < properties.length; i++) { + if (!properties[i][1]) { + properties[i][1] = properties[i][0]; + } + } + return function (model, excludes, includes) { + var style = {}; + for (var i = 0; i < properties.length; i++) { + var propName = properties[i][1]; + if ((excludes && indexOf(excludes, propName) >= 0) + || (includes && indexOf(includes, propName) < 0) + ) { + continue; + } + var val = model.getShallow(propName); + if (val != null) { + style[properties[i][0]] = val; + } + } + return style; + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var getLineStyle = makeStyleMapper( + [ + ['lineWidth', 'width'], + ['stroke', 'color'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] + ] +); + +var lineStyleMixin = { + getLineStyle: function (excludes) { + var style = getLineStyle(this, excludes); + var lineDash = this.getLineDash(style.lineWidth); + lineDash && (style.lineDash = lineDash); + return style; + }, + + getLineDash: function (lineWidth) { + if (lineWidth == null) { + lineWidth = 1; + } + var lineType = this.get('type'); + var dotSize = Math.max(lineWidth, 2); + var dashSize = lineWidth * 4; + return (lineType === 'solid' || lineType == null) ? null + : (lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize]); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var getAreaStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['opacity'], + ['shadowColor'] + ] +); + +var areaStyleMixin = { + getAreaStyle: function (excludes, includes) { + return getAreaStyle(this, excludes, includes); + } +}; + +/** + * 曲线辅助模块 + * @module zrender/core/curve + * @author pissang(https://www.github.com/pissang) + */ + +var mathPow = Math.pow; +var mathSqrt$2 = Math.sqrt; + +var EPSILON$1 = 1e-8; +var EPSILON_NUMERIC = 1e-4; + +var THREE_SQRT = mathSqrt$2(3); +var ONE_THIRD = 1 / 3; + +// 临时变量 +var _v0 = create(); +var _v1 = create(); +var _v2 = create(); + +function isAroundZero(val) { + return val > -EPSILON$1 && val < EPSILON$1; +} +function isNotAroundZero$1(val) { + return val > EPSILON$1 || val < -EPSILON$1; +} +/** + * 计算三次贝塞尔值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @return {number} + */ +function cubicAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return onet * onet * (onet * p0 + 3 * t * p1) + + t * t * (t * p3 + 3 * onet * p2); +} + +/** + * 计算三次贝塞尔导数值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @return {number} + */ +function cubicDerivativeAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return 3 * ( + ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + + (p3 - p2) * t * t + ); +} + +/** + * 计算三次贝塞尔方程根,使用盛金公式 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} val + * @param {Array.} roots + * @return {number} 有效根数目 + */ +function cubicRootAt(p0, p1, p2, p3, val, roots) { + // Evaluate roots of cubic functions + var a = p3 + 3 * (p1 - p2) - p0; + var b = 3 * (p2 - p1 * 2 + p0); + var c = 3 * (p1 - p0); + var d = p0 - val; + + var A = b * b - 3 * a * c; + var B = b * c - 9 * a * d; + var C = c * c - 3 * b * d; + + var n = 0; + + if (isAroundZero(A) && isAroundZero(B)) { + if (isAroundZero(b)) { + roots[0] = 0; + } + else { + var t1 = -c / b; //t1, t2, t3, b is not zero + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = B * B - 4 * A * C; + + if (isAroundZero(disc)) { + var K = B / A; + var t1 = -b / a + K; // t1, a is not zero + var t2 = -K / 2; // t2, t3 + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var Y1 = A * b + 1.5 * a * (-B + discSqrt); + var Y2 = A * b + 1.5 * a * (-B - discSqrt); + if (Y1 < 0) { + Y1 = -mathPow(-Y1, ONE_THIRD); + } + else { + Y1 = mathPow(Y1, ONE_THIRD); + } + if (Y2 < 0) { + Y2 = -mathPow(-Y2, ONE_THIRD); + } + else { + Y2 = mathPow(Y2, ONE_THIRD); + } + var t1 = (-b - (Y1 + Y2)) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else { + var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$2(A * A * A)); + var theta = Math.acos(T) / 3; + var ASqrt = mathSqrt$2(A); + var tmp = Math.cos(theta); + + var t1 = (-b - 2 * ASqrt * tmp) / (3 * a); + var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a); + var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + if (t3 >= 0 && t3 <= 1) { + roots[n++] = t3; + } + } + } + return n; +} + +/** + * 计算三次贝塞尔方程极限值的位置 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {Array.} extrema + * @return {number} 有效数目 + */ +function cubicExtrema(p0, p1, p2, p3, extrema) { + var b = 6 * p2 - 12 * p1 + 6 * p0; + var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2; + var c = 3 * p1 - 3 * p0; + + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <=1) { + extrema[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + extrema[0] = -b / (2 * a); + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + extrema[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + extrema[n++] = t2; + } + } + } + return n; +} + +/** + * 细分三次贝塞尔曲线 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @param {Array.} out + */ +function cubicSubdivide(p0, p1, p2, p3, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p23 = (p3 - p2) * t + p2; + + var p012 = (p12 - p01) * t + p01; + var p123 = (p23 - p12) * t + p12; + + var p0123 = (p123 - p012) * t + p012; + // Seg0 + out[0] = p0; + out[1] = p01; + out[2] = p012; + out[3] = p0123; + // Seg1 + out[4] = p0123; + out[5] = p123; + out[6] = p23; + out[7] = p3; +} + +/** + * 投射点到三次贝塞尔曲线上,返回投射距离。 + * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {number} x + * @param {number} y + * @param {Array.} [out] 投射点 + * @return {number} + */ +function cubicProjectPoint( + x0, y0, x1, y1, x2, y2, x3, y3, + x, y, out +) { + // http://pomax.github.io/bezierinfo/#projections + var t; + var interval = 0.005; + var d = Infinity; + var prev; + var next; + var d1; + var d2; + + _v0[0] = x; + _v0[1] = y; + + // 先粗略估计一下可能的最小距离的 t 值 + // PENDING + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = cubicAt(x0, x1, x2, x3, _t); + _v1[1] = cubicAt(y0, y1, y2, y3, _t); + d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + + // At most 32 iteration + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + prev = t - interval; + next = t + interval; + // t - interval + _v1[0] = cubicAt(x0, x1, x2, x3, prev); + _v1[1] = cubicAt(y0, y1, y2, y3, prev); + + d1 = distSquare(_v1, _v0); + + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + // t + interval + _v2[0] = cubicAt(x0, x1, x2, x3, next); + _v2[1] = cubicAt(y0, y1, y2, y3, next); + d2 = distSquare(_v2, _v0); + + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + // t + if (out) { + out[0] = cubicAt(x0, x1, x2, x3, t); + out[1] = cubicAt(y0, y1, y2, y3, t); + } + // console.log(interval, i); + return mathSqrt$2(d); +} + +/** + * 计算二次方贝塞尔值 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @return {number} + */ +function quadraticAt(p0, p1, p2, t) { + var onet = 1 - t; + return onet * (onet * p0 + 2 * t * p1) + t * t * p2; +} + +/** + * 计算二次方贝塞尔导数值 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @return {number} + */ +function quadraticDerivativeAt(p0, p1, p2, t) { + return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1)); +} + +/** + * 计算二次方贝塞尔方程根 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @param {Array.} roots + * @return {number} 有效根数目 + */ +function quadraticRootAt(p0, p1, p2, val, roots) { + var a = p0 - 2 * p1 + p2; + var b = 2 * (p1 - p0); + var c = p0 - val; + + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + var t1 = -b / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + } + return n; +} + +/** + * 计算二次贝塞尔方程极限值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @return {number} + */ +function quadraticExtremum(p0, p1, p2) { + var divider = p0 + p2 - 2 * p1; + if (divider === 0) { + // p1 is center of p0 and p2 + return 0.5; + } + else { + return (p0 - p1) / divider; + } +} + +/** + * 细分二次贝塞尔曲线 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @param {Array.} out + */ +function quadraticSubdivide(p0, p1, p2, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p012 = (p12 - p01) * t + p01; + + // Seg0 + out[0] = p0; + out[1] = p01; + out[2] = p012; + + // Seg1 + out[3] = p012; + out[4] = p12; + out[5] = p2; +} + +/** + * 投射点到二次贝塞尔曲线上,返回投射距离。 + * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x + * @param {number} y + * @param {Array.} out 投射点 + * @return {number} + */ +function quadraticProjectPoint( + x0, y0, x1, y1, x2, y2, + x, y, out +) { + // http://pomax.github.io/bezierinfo/#projections + var t; + var interval = 0.005; + var d = Infinity; + + _v0[0] = x; + _v0[1] = y; + + // 先粗略估计一下可能的最小距离的 t 值 + // PENDING + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = quadraticAt(x0, x1, x2, _t); + _v1[1] = quadraticAt(y0, y1, y2, _t); + var d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + + // At most 32 iteration + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + var prev = t - interval; + var next = t + interval; + // t - interval + _v1[0] = quadraticAt(x0, x1, x2, prev); + _v1[1] = quadraticAt(y0, y1, y2, prev); + + var d1 = distSquare(_v1, _v0); + + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + // t + interval + _v2[0] = quadraticAt(x0, x1, x2, next); + _v2[1] = quadraticAt(y0, y1, y2, next); + var d2 = distSquare(_v2, _v0); + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + // t + if (out) { + out[0] = quadraticAt(x0, x1, x2, t); + out[1] = quadraticAt(y0, y1, y2, t); + } + // console.log(interval, i); + return mathSqrt$2(d); +} + +/** + * @author Yi Shen(https://github.com/pissang) + */ + +var mathMin$3 = Math.min; +var mathMax$3 = Math.max; +var mathSin$2 = Math.sin; +var mathCos$2 = Math.cos; +var PI2 = Math.PI * 2; + +var start = create(); +var end = create(); +var extremity = create(); + +/** + * 从顶点数组中计算出最小包围盒,写入`min`和`max`中 + * @module zrender/core/bbox + * @param {Array} points 顶点数组 + * @param {number} min + * @param {number} max + */ +function fromPoints(points, min$$1, max$$1) { + if (points.length === 0) { + return; + } + var p = points[0]; + var left = p[0]; + var right = p[0]; + var top = p[1]; + var bottom = p[1]; + var i; + + for (i = 1; i < points.length; i++) { + p = points[i]; + left = mathMin$3(left, p[0]); + right = mathMax$3(right, p[0]); + top = mathMin$3(top, p[1]); + bottom = mathMax$3(bottom, p[1]); + } + + min$$1[0] = left; + min$$1[1] = top; + max$$1[0] = right; + max$$1[1] = bottom; +} + +/** + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {Array.} min + * @param {Array.} max + */ +function fromLine(x0, y0, x1, y1, min$$1, max$$1) { + min$$1[0] = mathMin$3(x0, x1); + min$$1[1] = mathMin$3(y0, y1); + max$$1[0] = mathMax$3(x0, x1); + max$$1[1] = mathMax$3(y0, y1); +} + +var xDim = []; +var yDim = []; +/** + * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中 + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {Array.} min + * @param {Array.} max + */ +function fromCubic( + x0, y0, x1, y1, x2, y2, x3, y3, min$$1, max$$1 +) { + var cubicExtrema$$1 = cubicExtrema; + var cubicAt$$1 = cubicAt; + var i; + var n = cubicExtrema$$1(x0, x1, x2, x3, xDim); + min$$1[0] = Infinity; + min$$1[1] = Infinity; + max$$1[0] = -Infinity; + max$$1[1] = -Infinity; + + for (i = 0; i < n; i++) { + var x = cubicAt$$1(x0, x1, x2, x3, xDim[i]); + min$$1[0] = mathMin$3(x, min$$1[0]); + max$$1[0] = mathMax$3(x, max$$1[0]); + } + n = cubicExtrema$$1(y0, y1, y2, y3, yDim); + for (i = 0; i < n; i++) { + var y = cubicAt$$1(y0, y1, y2, y3, yDim[i]); + min$$1[1] = mathMin$3(y, min$$1[1]); + max$$1[1] = mathMax$3(y, max$$1[1]); + } + + min$$1[0] = mathMin$3(x0, min$$1[0]); + max$$1[0] = mathMax$3(x0, max$$1[0]); + min$$1[0] = mathMin$3(x3, min$$1[0]); + max$$1[0] = mathMax$3(x3, max$$1[0]); + + min$$1[1] = mathMin$3(y0, min$$1[1]); + max$$1[1] = mathMax$3(y0, max$$1[1]); + min$$1[1] = mathMin$3(y3, min$$1[1]); + max$$1[1] = mathMax$3(y3, max$$1[1]); +} + +/** + * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中 + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {Array.} min + * @param {Array.} max + */ +function fromQuadratic(x0, y0, x1, y1, x2, y2, min$$1, max$$1) { + var quadraticExtremum$$1 = quadraticExtremum; + var quadraticAt$$1 = quadraticAt; + // Find extremities, where derivative in x dim or y dim is zero + var tx = + mathMax$3( + mathMin$3(quadraticExtremum$$1(x0, x1, x2), 1), 0 + ); + var ty = + mathMax$3( + mathMin$3(quadraticExtremum$$1(y0, y1, y2), 1), 0 + ); + + var x = quadraticAt$$1(x0, x1, x2, tx); + var y = quadraticAt$$1(y0, y1, y2, ty); + + min$$1[0] = mathMin$3(x0, x2, x); + min$$1[1] = mathMin$3(y0, y2, y); + max$$1[0] = mathMax$3(x0, x2, x); + max$$1[1] = mathMax$3(y0, y2, y); +} + +/** + * 从圆弧中计算出最小包围盒,写入`min`和`max`中 + * @method + * @memberOf module:zrender/core/bbox + * @param {number} x + * @param {number} y + * @param {number} rx + * @param {number} ry + * @param {number} startAngle + * @param {number} endAngle + * @param {number} anticlockwise + * @param {Array.} min + * @param {Array.} max + */ +function fromArc( + x, y, rx, ry, startAngle, endAngle, anticlockwise, min$$1, max$$1 +) { + var vec2Min = min; + var vec2Max = max; + + var diff = Math.abs(startAngle - endAngle); + + + if (diff % PI2 < 1e-4 && diff > 1e-4) { + // Is a circle + min$$1[0] = x - rx; + min$$1[1] = y - ry; + max$$1[0] = x + rx; + max$$1[1] = y + ry; + return; + } + + start[0] = mathCos$2(startAngle) * rx + x; + start[1] = mathSin$2(startAngle) * ry + y; + + end[0] = mathCos$2(endAngle) * rx + x; + end[1] = mathSin$2(endAngle) * ry + y; + + vec2Min(min$$1, start, end); + vec2Max(max$$1, start, end); + + // Thresh to [0, Math.PI * 2] + startAngle = startAngle % (PI2); + if (startAngle < 0) { + startAngle = startAngle + PI2; + } + endAngle = endAngle % (PI2); + if (endAngle < 0) { + endAngle = endAngle + PI2; + } + + if (startAngle > endAngle && !anticlockwise) { + endAngle += PI2; + } + else if (startAngle < endAngle && anticlockwise) { + startAngle += PI2; + } + if (anticlockwise) { + var tmp = endAngle; + endAngle = startAngle; + startAngle = tmp; + } + + // var number = 0; + // var step = (anticlockwise ? -Math.PI : Math.PI) / 2; + for (var angle = 0; angle < endAngle; angle += Math.PI / 2) { + if (angle > startAngle) { + extremity[0] = mathCos$2(angle) * rx + x; + extremity[1] = mathSin$2(angle) * ry + y; + + vec2Min(min$$1, extremity, min$$1); + vec2Max(max$$1, extremity, max$$1); + } + } +} + +/** + * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中 + * 可以用于 isInsidePath 判断以及获取boundingRect + * + * @module zrender/core/PathProxy + * @author Yi Shen (http://www.github.com/pissang) + */ + +// TODO getTotalLength, getPointAtLength + +var CMD = { + M: 1, + L: 2, + C: 3, + Q: 4, + A: 5, + Z: 6, + // Rect + R: 7 +}; + +// var CMD_MEM_SIZE = { +// M: 3, +// L: 3, +// C: 7, +// Q: 5, +// A: 9, +// R: 5, +// Z: 1 +// }; + +var min$1 = []; +var max$1 = []; +var min2 = []; +var max2 = []; +var mathMin$2 = Math.min; +var mathMax$2 = Math.max; +var mathCos$1 = Math.cos; +var mathSin$1 = Math.sin; +var mathSqrt$1 = Math.sqrt; +var mathAbs = Math.abs; + +var hasTypedArray = typeof Float32Array != 'undefined'; + +/** + * @alias module:zrender/core/PathProxy + * @constructor + */ +var PathProxy = function (notSaveData) { + + this._saveData = !(notSaveData || false); + + if (this._saveData) { + /** + * Path data. Stored as flat array + * @type {Array.} + */ + this.data = []; + } + + this._ctx = null; +}; + +/** + * 快速计算Path包围盒(并不是最小包围盒) + * @return {Object} + */ +PathProxy.prototype = { + + constructor: PathProxy, + + _xi: 0, + _yi: 0, + + _x0: 0, + _y0: 0, + // Unit x, Unit y. Provide for avoiding drawing that too short line segment + _ux: 0, + _uy: 0, + + _len: 0, + + _lineDash: null, + + _dashOffset: 0, + + _dashIdx: 0, + + _dashSum: 0, + + /** + * @readOnly + */ + setScale: function (sx, sy) { + this._ux = mathAbs(1 / devicePixelRatio / sx) || 0; + this._uy = mathAbs(1 / devicePixelRatio / sy) || 0; + }, + + getContext: function () { + return this._ctx; + }, + + /** + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + beginPath: function (ctx) { + + this._ctx = ctx; + + ctx && ctx.beginPath(); + + ctx && (this.dpr = ctx.dpr); + + // Reset + if (this._saveData) { + this._len = 0; + } + + if (this._lineDash) { + this._lineDash = null; + + this._dashOffset = 0; + } + + return this; + }, + + /** + * @param {number} x + * @param {number} y + * @return {module:zrender/core/PathProxy} + */ + moveTo: function (x, y) { + this.addData(CMD.M, x, y); + this._ctx && this._ctx.moveTo(x, y); + + // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用 + // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。 + // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要 + // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持 + this._x0 = x; + this._y0 = y; + + this._xi = x; + this._yi = y; + + return this; + }, + + /** + * @param {number} x + * @param {number} y + * @return {module:zrender/core/PathProxy} + */ + lineTo: function (x, y) { + var exceedUnit = mathAbs(x - this._xi) > this._ux + || mathAbs(y - this._yi) > this._uy + // Force draw the first segment + || this._len < 5; + + this.addData(CMD.L, x, y); + + if (this._ctx && exceedUnit) { + this._needsDash() ? this._dashedLineTo(x, y) + : this._ctx.lineTo(x, y); + } + if (exceedUnit) { + this._xi = x; + this._yi = y; + } + + return this; + }, + + /** + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @return {module:zrender/core/PathProxy} + */ + bezierCurveTo: function (x1, y1, x2, y2, x3, y3) { + this.addData(CMD.C, x1, y1, x2, y2, x3, y3); + if (this._ctx) { + this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) + : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); + } + this._xi = x3; + this._yi = y3; + return this; + }, + + /** + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @return {module:zrender/core/PathProxy} + */ + quadraticCurveTo: function (x1, y1, x2, y2) { + this.addData(CMD.Q, x1, y1, x2, y2); + if (this._ctx) { + this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) + : this._ctx.quadraticCurveTo(x1, y1, x2, y2); + } + this._xi = x2; + this._yi = y2; + return this; + }, + + /** + * @param {number} cx + * @param {number} cy + * @param {number} r + * @param {number} startAngle + * @param {number} endAngle + * @param {boolean} anticlockwise + * @return {module:zrender/core/PathProxy} + */ + arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) { + this.addData( + CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1 + ); + this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); + + this._xi = mathCos$1(endAngle) * r + cx; + this._yi = mathSin$1(endAngle) * r + cy; + return this; + }, + + // TODO + arcTo: function (x1, y1, x2, y2, radius) { + if (this._ctx) { + this._ctx.arcTo(x1, y1, x2, y2, radius); + } + return this; + }, + + // TODO + rect: function (x, y, w, h) { + this._ctx && this._ctx.rect(x, y, w, h); + this.addData(CMD.R, x, y, w, h); + return this; + }, + + /** + * @return {module:zrender/core/PathProxy} + */ + closePath: function () { + this.addData(CMD.Z); + + var ctx = this._ctx; + var x0 = this._x0; + var y0 = this._y0; + if (ctx) { + this._needsDash() && this._dashedLineTo(x0, y0); + ctx.closePath(); + } + + this._xi = x0; + this._yi = y0; + return this; + }, + + /** + * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。 + * stroke 同样 + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + fill: function (ctx) { + ctx && ctx.fill(); + this.toStatic(); + }, + + /** + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + stroke: function (ctx) { + ctx && ctx.stroke(); + this.toStatic(); + }, + + /** + * 必须在其它绘制命令前调用 + * Must be invoked before all other path drawing methods + * @return {module:zrender/core/PathProxy} + */ + setLineDash: function (lineDash) { + if (lineDash instanceof Array) { + this._lineDash = lineDash; + + this._dashIdx = 0; + + var lineDashSum = 0; + for (var i = 0; i < lineDash.length; i++) { + lineDashSum += lineDash[i]; + } + this._dashSum = lineDashSum; + } + return this; + }, + + /** + * 必须在其它绘制命令前调用 + * Must be invoked before all other path drawing methods + * @return {module:zrender/core/PathProxy} + */ + setLineDashOffset: function (offset) { + this._dashOffset = offset; + return this; + }, + + /** + * + * @return {boolean} + */ + len: function () { + return this._len; + }, + + /** + * 直接设置 Path 数据 + */ + setData: function (data) { + + var len$$1 = data.length; + + if (! (this.data && this.data.length == len$$1) && hasTypedArray) { + this.data = new Float32Array(len$$1); + } + + for (var i = 0; i < len$$1; i++) { + this.data[i] = data[i]; + } + + this._len = len$$1; + }, + + /** + * 添加子路径 + * @param {module:zrender/core/PathProxy|Array.} path + */ + appendPath: function (path) { + if (!(path instanceof Array)) { + path = [path]; + } + var len$$1 = path.length; + var appendSize = 0; + var offset = this._len; + for (var i = 0; i < len$$1; i++) { + appendSize += path[i].len(); + } + if (hasTypedArray && (this.data instanceof Float32Array)) { + this.data = new Float32Array(offset + appendSize); + } + for (var i = 0; i < len$$1; i++) { + var appendPathData = path[i].data; + for (var k = 0; k < appendPathData.length; k++) { + this.data[offset++] = appendPathData[k]; + } + } + this._len = offset; + }, + + /** + * 填充 Path 数据。 + * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。 + */ + addData: function (cmd) { + if (!this._saveData) { + return; + } + + var data = this.data; + if (this._len + arguments.length > data.length) { + // 因为之前的数组已经转换成静态的 Float32Array + // 所以不够用时需要扩展一个新的动态数组 + this._expandData(); + data = this.data; + } + for (var i = 0; i < arguments.length; i++) { + data[this._len++] = arguments[i]; + } + + this._prevCmd = cmd; + }, + + _expandData: function () { + // Only if data is Float32Array + if (!(this.data instanceof Array)) { + var newData = []; + for (var i = 0; i < this._len; i++) { + newData[i] = this.data[i]; + } + this.data = newData; + } + }, + + /** + * If needs js implemented dashed line + * @return {boolean} + * @private + */ + _needsDash: function () { + return this._lineDash; + }, + + _dashedLineTo: function (x1, y1) { + var dashSum = this._dashSum; + var offset = this._dashOffset; + var lineDash = this._lineDash; + var ctx = this._ctx; + + var x0 = this._xi; + var y0 = this._yi; + var dx = x1 - x0; + var dy = y1 - y0; + var dist$$1 = mathSqrt$1(dx * dx + dy * dy); + var x = x0; + var y = y0; + var dash; + var nDash = lineDash.length; + var idx; + dx /= dist$$1; + dy /= dist$$1; + + if (offset < 0) { + // Convert to positive offset + offset = dashSum + offset; + } + offset %= dashSum; + x -= offset * dx; + y -= offset * dy; + + while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1) + || (dx == 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) { + idx = this._dashIdx; + dash = lineDash[idx]; + x += dx * dash; + y += dy * dash; + this._dashIdx = (idx + 1) % nDash; + // Skip positive offset + if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) { + continue; + } + ctx[idx % 2 ? 'moveTo' : 'lineTo']( + dx >= 0 ? mathMin$2(x, x1) : mathMax$2(x, x1), + dy >= 0 ? mathMin$2(y, y1) : mathMax$2(y, y1) + ); + } + // Offset for next lineTo + dx = x - x1; + dy = y - y1; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }, + + // Not accurate dashed line to + _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) { + var dashSum = this._dashSum; + var offset = this._dashOffset; + var lineDash = this._lineDash; + var ctx = this._ctx; + + var x0 = this._xi; + var y0 = this._yi; + var t; + var dx; + var dy; + var cubicAt$$1 = cubicAt; + var bezierLen = 0; + var idx = this._dashIdx; + var nDash = lineDash.length; + + var x; + var y; + + var tmpLen = 0; + + if (offset < 0) { + // Convert to positive offset + offset = dashSum + offset; + } + offset %= dashSum; + // Bezier approx length + for (t = 0; t < 1; t += 0.1) { + dx = cubicAt$$1(x0, x1, x2, x3, t + 0.1) + - cubicAt$$1(x0, x1, x2, x3, t); + dy = cubicAt$$1(y0, y1, y2, y3, t + 0.1) + - cubicAt$$1(y0, y1, y2, y3, t); + bezierLen += mathSqrt$1(dx * dx + dy * dy); + } + + // Find idx after add offset + for (; idx < nDash; idx++) { + tmpLen += lineDash[idx]; + if (tmpLen > offset) { + break; + } + } + t = (tmpLen - offset) / bezierLen; + + while (t <= 1) { + + x = cubicAt$$1(x0, x1, x2, x3, t); + y = cubicAt$$1(y0, y1, y2, y3, t); + + // Use line to approximate dashed bezier + // Bad result if dash is long + idx % 2 ? ctx.moveTo(x, y) + : ctx.lineTo(x, y); + + t += lineDash[idx] / bezierLen; + + idx = (idx + 1) % nDash; + } + + // Finish the last segment and calculate the new offset + (idx % 2 !== 0) && ctx.lineTo(x3, y3); + dx = x3 - x; + dy = y3 - y; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }, + + _dashedQuadraticTo: function (x1, y1, x2, y2) { + // Convert quadratic to cubic using degree elevation + var x3 = x2; + var y3 = y2; + x2 = (x2 + 2 * x1) / 3; + y2 = (y2 + 2 * y1) / 3; + x1 = (this._xi + 2 * x1) / 3; + y1 = (this._yi + 2 * y1) / 3; + + this._dashedBezierTo(x1, y1, x2, y2, x3, y3); + }, + + /** + * 转成静态的 Float32Array 减少堆内存占用 + * Convert dynamic array to static Float32Array + */ + toStatic: function () { + var data = this.data; + if (data instanceof Array) { + data.length = this._len; + if (hasTypedArray) { + this.data = new Float32Array(data); + } + } + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function () { + min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE; + max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE; + + var data = this.data; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = data[i]; + yi = data[i + 1]; + + x0 = xi; + y0 = yi; + } + + switch (cmd) { + case CMD.M: + // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 + // 在 closePath 的时候使用 + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + min2[0] = x0; + min2[1] = y0; + max2[0] = x0; + max2[1] = y0; + break; + case CMD.L: + fromLine(xi, yi, data[i], data[i + 1], min2, max2); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.C: + fromCubic( + xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + min2, max2 + ); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.Q: + fromQuadratic( + xi, yi, data[i++], data[i++], data[i], data[i + 1], + min2, max2 + ); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.A: + // TODO Arc 判断的开销比较大 + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++]; + var endAngle = data[i++] + startAngle; + // TODO Arc 旋转 + var psi = data[i++]; + var anticlockwise = 1 - data[i++]; + + if (i == 1) { + // 直接使用 arc 命令 + // 第一个命令起点还未定义 + x0 = mathCos$1(startAngle) * rx + cx; + y0 = mathSin$1(startAngle) * ry + cy; + } + + fromArc( + cx, cy, rx, ry, startAngle, endAngle, + anticlockwise, min2, max2 + ); + + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + // Use fromLine + fromLine(x0, y0, x0 + width, y0 + height, min2, max2); + break; + case CMD.Z: + xi = x0; + yi = y0; + break; + } + + // Union + min(min$1, min$1, min2); + max(max$1, max$1, max2); + } + + // No data + if (i === 0) { + min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0; + } + + return new BoundingRect( + min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1] + ); + }, + + /** + * Rebuild path from current data + * Rebuild path will not consider javascript implemented line dash. + * @param {CanvasRenderingContext2D} ctx + */ + rebuildPath: function (ctx) { + var d = this.data; + var x0, y0; + var xi, yi; + var x, y; + var ux = this._ux; + var uy = this._uy; + var len$$1 = this._len; + for (var i = 0; i < len$$1;) { + var cmd = d[i++]; + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = d[i]; + yi = d[i + 1]; + + x0 = xi; + y0 = yi; + } + switch (cmd) { + case CMD.M: + x0 = xi = d[i++]; + y0 = yi = d[i++]; + ctx.moveTo(xi, yi); + break; + case CMD.L: + x = d[i++]; + y = d[i++]; + // Not draw too small seg between + if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len$$1 - 1) { + ctx.lineTo(x, y); + xi = x; + yi = y; + } + break; + case CMD.C: + ctx.bezierCurveTo( + d[i++], d[i++], d[i++], d[i++], d[i++], d[i++] + ); + xi = d[i - 2]; + yi = d[i - 1]; + break; + case CMD.Q: + ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]); + xi = d[i - 2]; + yi = d[i - 1]; + break; + case CMD.A: + var cx = d[i++]; + var cy = d[i++]; + var rx = d[i++]; + var ry = d[i++]; + var theta = d[i++]; + var dTheta = d[i++]; + var psi = d[i++]; + var fs = d[i++]; + var r = (rx > ry) ? rx : ry; + var scaleX = (rx > ry) ? 1 : rx / ry; + var scaleY = (rx > ry) ? ry / rx : 1; + var isEllipse = Math.abs(rx - ry) > 1e-3; + var endAngle = theta + dTheta; + if (isEllipse) { + ctx.translate(cx, cy); + ctx.rotate(psi); + ctx.scale(scaleX, scaleY); + ctx.arc(0, 0, r, theta, endAngle, 1 - fs); + ctx.scale(1 / scaleX, 1 / scaleY); + ctx.rotate(-psi); + ctx.translate(-cx, -cy); + } + else { + ctx.arc(cx, cy, r, theta, endAngle, 1 - fs); + } + + if (i == 1) { + // 直接使用 arc 命令 + // 第一个命令起点还未定义 + x0 = mathCos$1(theta) * rx + cx; + y0 = mathSin$1(theta) * ry + cy; + } + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = d[i]; + y0 = yi = d[i + 1]; + ctx.rect(d[i++], d[i++], d[i++], d[i++]); + break; + case CMD.Z: + ctx.closePath(); + xi = x0; + yi = y0; + } + } + } +}; + +PathProxy.CMD = CMD; + +/** + * 线段包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$1(x0, y0, x1, y1, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + var _a = 0; + var _b = x0; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l) + || (y < y0 - _l && y < y1 - _l) + || (x > x0 + _l && x > x1 + _l) + || (x < x0 - _l && x < x1 - _l) + ) { + return false; + } + + if (x0 !== x1) { + _a = (y0 - y1) / (x0 - x1); + _b = (x0 * y1 - x1 * y0) / (x0 - x1) ; + } + else { + return Math.abs(x - x0) <= _l / 2; + } + var tmp = _a * x - y + _b; + var _s = tmp * tmp / (_a * _a + 1); + return _s <= _l / 2 * _l / 2; +} + +/** + * 三次贝塞尔曲线描边包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$2(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) + ) { + return false; + } + var d = cubicProjectPoint( + x0, y0, x1, y1, x2, y2, x3, y3, + x, y, null + ); + return d <= _l / 2; +} + +/** + * 二次贝塞尔曲线描边包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$3(x0, y0, x1, y1, x2, y2, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l && y > y2 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l) + ) { + return false; + } + var d = quadraticProjectPoint( + x0, y0, x1, y1, x2, y2, + x, y, null + ); + return d <= _l / 2; +} + +var PI2$3 = Math.PI * 2; + +function normalizeRadian(angle) { + angle %= PI2$3; + if (angle < 0) { + angle += PI2$3; + } + return angle; +} + +var PI2$2 = Math.PI * 2; + +/** + * 圆弧描边包含判断 + * @param {number} cx + * @param {number} cy + * @param {number} r + * @param {number} startAngle + * @param {number} endAngle + * @param {boolean} anticlockwise + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {Boolean} + */ +function containStroke$4( + cx, cy, r, startAngle, endAngle, anticlockwise, + lineWidth, x, y +) { + + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + + x -= cx; + y -= cy; + var d = Math.sqrt(x * x + y * y); + + if ((d - _l > r) || (d + _l < r)) { + return false; + } + if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) { + // Is a circle + return true; + } + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + if (startAngle > endAngle) { + endAngle += PI2$2; + } + + var angle = Math.atan2(y, x); + if (angle < 0) { + angle += PI2$2; + } + return (angle >= startAngle && angle <= endAngle) + || (angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle); +} + +function windingLine(x0, y0, x1, y1, x, y) { + if ((y > y0 && y > y1) || (y < y0 && y < y1)) { + return 0; + } + // Ignore horizontal line + if (y1 === y0) { + return 0; + } + var dir = y1 < y0 ? 1 : -1; + var t = (y - y0) / (y1 - y0); + + // Avoid winding error when intersection point is the connect point of two line of polygon + if (t === 1 || t === 0) { + dir = y1 < y0 ? 0.5 : -0.5; + } + + var x_ = t * (x1 - x0) + x0; + + // If (x, y) on the line, considered as "contain". + return x_ === x ? Infinity : x_ > x ? dir : 0; +} + +var CMD$1 = PathProxy.CMD; +var PI2$1 = Math.PI * 2; + +var EPSILON$2 = 1e-4; + +function isAroundEqual(a, b) { + return Math.abs(a - b) < EPSILON$2; +} + +// 临时数组 +var roots = [-1, -1, -1]; +var extrema = [-1, -1]; + +function swapExtrema() { + var tmp = extrema[0]; + extrema[0] = extrema[1]; + extrema[1] = tmp; +} + +function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) { + // Quick reject + if ( + (y > y0 && y > y1 && y > y2 && y > y3) + || (y < y0 && y < y1 && y < y2 && y < y3) + ) { + return 0; + } + var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var w = 0; + var nExtrema = -1; + var y0_, y1_; + for (var i = 0; i < nRoots; i++) { + var t = roots[i]; + + // Avoid winding error when intersection point is the connect point of two line of polygon + var unit = (t === 0 || t === 1) ? 0.5 : 1; + + var x_ = cubicAt(x0, x1, x2, x3, t); + if (x_ < x) { // Quick reject + continue; + } + if (nExtrema < 0) { + nExtrema = cubicExtrema(y0, y1, y2, y3, extrema); + if (extrema[1] < extrema[0] && nExtrema > 1) { + swapExtrema(); + } + y0_ = cubicAt(y0, y1, y2, y3, extrema[0]); + if (nExtrema > 1) { + y1_ = cubicAt(y0, y1, y2, y3, extrema[1]); + } + } + if (nExtrema == 2) { + // 分成三段单调函数 + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else if (t < extrema[1]) { + w += y1_ < y0_ ? unit : -unit; + } + else { + w += y3 < y1_ ? unit : -unit; + } + } + else { + // 分成两段单调函数 + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else { + w += y3 < y0_ ? unit : -unit; + } + } + } + return w; + } +} + +function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) { + // Quick reject + if ( + (y > y0 && y > y1 && y > y2) + || (y < y0 && y < y1 && y < y2) + ) { + return 0; + } + var nRoots = quadraticRootAt(y0, y1, y2, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var t = quadraticExtremum(y0, y1, y2); + if (t >= 0 && t <= 1) { + var w = 0; + var y_ = quadraticAt(y0, y1, y2, t); + for (var i = 0; i < nRoots; i++) { + // Remove one endpoint. + var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1; + + var x_ = quadraticAt(x0, x1, x2, roots[i]); + if (x_ < x) { // Quick reject + continue; + } + if (roots[i] < t) { + w += y_ < y0 ? unit : -unit; + } + else { + w += y2 < y_ ? unit : -unit; + } + } + return w; + } + else { + // Remove one endpoint. + var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1; + + var x_ = quadraticAt(x0, x1, x2, roots[0]); + if (x_ < x) { // Quick reject + return 0; + } + return y2 < y0 ? unit : -unit; + } + } +} + +// TODO +// Arc 旋转 +function windingArc( + cx, cy, r, startAngle, endAngle, anticlockwise, x, y +) { + y -= cy; + if (y > r || y < -r) { + return 0; + } + var tmp = Math.sqrt(r * r - y * y); + roots[0] = -tmp; + roots[1] = tmp; + + var diff = Math.abs(startAngle - endAngle); + if (diff < 1e-4) { + return 0; + } + if (diff % PI2$1 < 1e-4) { + // Is a circle + startAngle = 0; + endAngle = PI2$1; + var dir = anticlockwise ? 1 : -1; + if (x >= roots[0] + cx && x <= roots[1] + cx) { + return dir; + } else { + return 0; + } + } + + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } + else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + if (startAngle > endAngle) { + endAngle += PI2$1; + } + + var w = 0; + for (var i = 0; i < 2; i++) { + var x_ = roots[i]; + if (x_ + cx > x) { + var angle = Math.atan2(y, x_); + var dir = anticlockwise ? 1 : -1; + if (angle < 0) { + angle = PI2$1 + angle; + } + if ( + (angle >= startAngle && angle <= endAngle) + || (angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle) + ) { + if (angle > Math.PI / 2 && angle < Math.PI * 1.5) { + dir = -dir; + } + w += dir; + } + } + } + return w; +} + +function containPath(data, lineWidth, isStroke, x, y) { + var w = 0; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + // Begin a new subpath + if (cmd === CMD$1.M && i > 1) { + // Close previous subpath + if (!isStroke) { + w += windingLine(xi, yi, x0, y0, x, y); + } + // 如果被任何一个 subpath 包含 + // if (w !== 0) { + // return true; + // } + } + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = data[i]; + yi = data[i + 1]; + + x0 = xi; + y0 = yi; + } + + switch (cmd) { + case CMD$1.M: + // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 + // 在 closePath 的时候使用 + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + break; + case CMD$1.L: + if (isStroke) { + if (containStroke$1(xi, yi, data[i], data[i + 1], lineWidth, x, y)) { + return true; + } + } + else { + // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN + w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.C: + if (isStroke) { + if (containStroke$2(xi, yi, + data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + lineWidth, x, y + )) { + return true; + } + } + else { + w += windingCubic( + xi, yi, + data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + x, y + ) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.Q: + if (isStroke) { + if (containStroke$3(xi, yi, + data[i++], data[i++], data[i], data[i + 1], + lineWidth, x, y + )) { + return true; + } + } + else { + w += windingQuadratic( + xi, yi, + data[i++], data[i++], data[i], data[i + 1], + x, y + ) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.A: + // TODO Arc 判断的开销比较大 + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; + // TODO Arc 旋转 + var psi = data[i++]; + var anticlockwise = 1 - data[i++]; + var x1 = Math.cos(theta) * rx + cx; + var y1 = Math.sin(theta) * ry + cy; + // 不是直接使用 arc 命令 + if (i > 1) { + w += windingLine(xi, yi, x1, y1, x, y); + } + else { + // 第一个命令起点还未定义 + x0 = x1; + y0 = y1; + } + // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放 + var _x = (x - cx) * ry / rx + cx; + if (isStroke) { + if (containStroke$4( + cx, cy, ry, theta, theta + dTheta, anticlockwise, + lineWidth, _x, y + )) { + return true; + } + } + else { + w += windingArc( + cx, cy, ry, theta, theta + dTheta, anticlockwise, + _x, y + ); + } + xi = Math.cos(theta + dTheta) * rx + cx; + yi = Math.sin(theta + dTheta) * ry + cy; + break; + case CMD$1.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + var x1 = x0 + width; + var y1 = y0 + height; + if (isStroke) { + if (containStroke$1(x0, y0, x1, y0, lineWidth, x, y) + || containStroke$1(x1, y0, x1, y1, lineWidth, x, y) + || containStroke$1(x1, y1, x0, y1, lineWidth, x, y) + || containStroke$1(x0, y1, x0, y0, lineWidth, x, y) + ) { + return true; + } + } + else { + // FIXME Clockwise ? + w += windingLine(x1, y0, x1, y1, x, y); + w += windingLine(x0, y1, x0, y0, x, y); + } + break; + case CMD$1.Z: + if (isStroke) { + if (containStroke$1( + xi, yi, x0, y0, lineWidth, x, y + )) { + return true; + } + } + else { + // Close a subpath + w += windingLine(xi, yi, x0, y0, x, y); + // 如果被任何一个 subpath 包含 + // FIXME subpaths may overlap + // if (w !== 0) { + // return true; + // } + } + xi = x0; + yi = y0; + break; + } + } + if (!isStroke && !isAroundEqual(yi, y0)) { + w += windingLine(xi, yi, x0, y0, x, y) || 0; + } + return w !== 0; +} + +function contain(pathData, x, y) { + return containPath(pathData, 0, false, x, y); +} + +function containStroke(pathData, lineWidth, x, y) { + return containPath(pathData, lineWidth, true, x, y); +} + +var getCanvasPattern = Pattern.prototype.getCanvasPattern; + +var abs = Math.abs; + +var pathProxyForDraw = new PathProxy(true); +/** + * @alias module:zrender/graphic/Path + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +function Path(opts) { + Displayable.call(this, opts); + + /** + * @type {module:zrender/core/PathProxy} + * @readOnly + */ + this.path = null; +} + +Path.prototype = { + + constructor: Path, + + type: 'path', + + __dirtyPath: true, + + strokeContainThreshold: 5, + + brush: function (ctx, prevEl) { + var style = this.style; + var path = this.path || pathProxyForDraw; + var hasStroke = style.hasStroke(); + var hasFill = style.hasFill(); + var fill = style.fill; + var stroke = style.stroke; + var hasFillGradient = hasFill && !!(fill.colorStops); + var hasStrokeGradient = hasStroke && !!(stroke.colorStops); + var hasFillPattern = hasFill && !!(fill.image); + var hasStrokePattern = hasStroke && !!(stroke.image); + + style.bind(ctx, this, prevEl); + this.setTransform(ctx); + + if (this.__dirty) { + var rect; + // Update gradient because bounding rect may changed + if (hasFillGradient) { + rect = rect || this.getBoundingRect(); + this._fillGradient = style.getGradient(ctx, fill, rect); + } + if (hasStrokeGradient) { + rect = rect || this.getBoundingRect(); + this._strokeGradient = style.getGradient(ctx, stroke, rect); + } + } + // Use the gradient or pattern + if (hasFillGradient) { + // PENDING If may have affect the state + ctx.fillStyle = this._fillGradient; + } + else if (hasFillPattern) { + ctx.fillStyle = getCanvasPattern.call(fill, ctx); + } + if (hasStrokeGradient) { + ctx.strokeStyle = this._strokeGradient; + } + else if (hasStrokePattern) { + ctx.strokeStyle = getCanvasPattern.call(stroke, ctx); + } + + var lineDash = style.lineDash; + var lineDashOffset = style.lineDashOffset; + + var ctxLineDash = !!ctx.setLineDash; + + // Update path sx, sy + var scale = this.getGlobalScale(); + path.setScale(scale[0], scale[1]); + + // Proxy context + // Rebuild path in following 2 cases + // 1. Path is dirty + // 2. Path needs javascript implemented lineDash stroking. + // In this case, lineDash information will not be saved in PathProxy + if (this.__dirtyPath + || (lineDash && !ctxLineDash && hasStroke) + ) { + path.beginPath(ctx); + + // Setting line dash before build path + if (lineDash && !ctxLineDash) { + path.setLineDash(lineDash); + path.setLineDashOffset(lineDashOffset); + } + + this.buildPath(path, this.shape, false); + + // Clear path dirty flag + if (this.path) { + this.__dirtyPath = false; + } + } + else { + // Replay path building + ctx.beginPath(); + this.path.rebuildPath(ctx); + } + + if (hasFill) { + if (style.fillOpacity != null) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.fillOpacity * style.opacity; + path.fill(ctx); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + path.fill(ctx); + } + } + + if (lineDash && ctxLineDash) { + ctx.setLineDash(lineDash); + ctx.lineDashOffset = lineDashOffset; + } + + if (hasStroke) { + if (style.strokeOpacity != null) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.strokeOpacity * style.opacity; + path.stroke(ctx); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + path.stroke(ctx); + } + } + + if (lineDash && ctxLineDash) { + // PENDING + // Remove lineDash + ctx.setLineDash([]); + } + + // Draw rect text + if (style.text != null) { + // Only restore transform when needs draw text. + this.restoreTransform(ctx); + this.drawRectText(ctx, this.getBoundingRect()); + } + }, + + // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath + // Like in circle + buildPath: function (ctx, shapeCfg, inBundle) {}, + + createPathProxy: function () { + this.path = new PathProxy(); + }, + + getBoundingRect: function () { + var rect = this._rect; + var style = this.style; + var needsUpdateRect = !rect; + if (needsUpdateRect) { + var path = this.path; + if (!path) { + // Create path on demand. + path = this.path = new PathProxy(); + } + if (this.__dirtyPath) { + path.beginPath(); + this.buildPath(path, this.shape, false); + } + rect = path.getBoundingRect(); + } + this._rect = rect; + + if (style.hasStroke()) { + // Needs update rect with stroke lineWidth when + // 1. Element changes scale or lineWidth + // 2. Shape is changed + var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone()); + if (this.__dirty || needsUpdateRect) { + rectWithStroke.copy(rect); + // FIXME Must after updateTransform + var w = style.lineWidth; + // PENDING, Min line width is needed when line is horizontal or vertical + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + + // Only add extra hover lineWidth when there are no fill + if (!style.hasFill()) { + w = Math.max(w, this.strokeContainThreshold || 4); + } + // Consider line width + // Line scale can't be 0; + if (lineScale > 1e-10) { + rectWithStroke.width += w / lineScale; + rectWithStroke.height += w / lineScale; + rectWithStroke.x -= w / lineScale / 2; + rectWithStroke.y -= w / lineScale / 2; + } + } + + // Return rect with stroke + return rectWithStroke; + } + + return rect; + }, + + contain: function (x, y) { + var localPos = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + var style = this.style; + x = localPos[0]; + y = localPos[1]; + + if (rect.contain(x, y)) { + var pathData = this.path.data; + if (style.hasStroke()) { + var lineWidth = style.lineWidth; + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + // Line scale can't be 0; + if (lineScale > 1e-10) { + // Only add extra hover lineWidth when there are no fill + if (!style.hasFill()) { + lineWidth = Math.max(lineWidth, this.strokeContainThreshold); + } + if (containStroke( + pathData, lineWidth / lineScale, x, y + )) { + return true; + } + } + } + if (style.hasFill()) { + return contain(pathData, x, y); + } + } + return false; + }, + + /** + * @param {boolean} dirtyPath + */ + dirty: function (dirtyPath) { + if (dirtyPath == null) { + dirtyPath = true; + } + // Only mark dirty, not mark clean + if (dirtyPath) { + this.__dirtyPath = dirtyPath; + this._rect = null; + } + + this.__dirty = this.__dirtyText = true; + + this.__zr && this.__zr.refresh(); + + // Used as a clipping path + if (this.__clipTarget) { + this.__clipTarget.dirty(); + } + }, + + /** + * Alias for animate('shape') + * @param {boolean} loop + */ + animateShape: function (loop) { + return this.animate('shape', loop); + }, + + // Overwrite attrKV + attrKV: function (key, value) { + // FIXME + if (key === 'shape') { + this.setShape(value); + this.__dirtyPath = true; + this._rect = null; + } + else { + Displayable.prototype.attrKV.call(this, key, value); + } + }, + + /** + * @param {Object|string} key + * @param {*} value + */ + setShape: function (key, value) { + var shape = this.shape; + // Path from string may not have shape + if (shape) { + if (isObject$1(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + shape[name] = key[name]; + } + } + } + else { + shape[key] = value; + } + this.dirty(true); + } + return this; + }, + + getLineScale: function () { + var m = this.transform; + // Get the line scale. + // Determinant of `m` means how much the area is enlarged by the + // transformation. So its square root can be used as a scale factor + // for width. + return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 + ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) + : 1; + } +}; + +/** + * 扩展一个 Path element, 比如星形,圆等。 + * Extend a path element + * @param {Object} props + * @param {string} props.type Path type + * @param {Function} props.init Initialize + * @param {Function} props.buildPath Overwrite buildPath method + * @param {Object} [props.style] Extended default style config + * @param {Object} [props.shape] Extended default shape config + */ +Path.extend = function (defaults$$1) { + var Sub = function (opts) { + Path.call(this, opts); + + if (defaults$$1.style) { + // Extend default style + this.style.extendFrom(defaults$$1.style, false); + } + + // Extend default shape + var defaultShape = defaults$$1.shape; + if (defaultShape) { + this.shape = this.shape || {}; + var thisShape = this.shape; + for (var name in defaultShape) { + if ( + ! thisShape.hasOwnProperty(name) + && defaultShape.hasOwnProperty(name) + ) { + thisShape[name] = defaultShape[name]; + } + } + } + + defaults$$1.init && defaults$$1.init.call(this, opts); + }; + + inherits(Sub, Path); + + // FIXME 不能 extend position, rotation 等引用对象 + for (var name in defaults$$1) { + // Extending prototype values and methods + if (name !== 'style' && name !== 'shape') { + Sub.prototype[name] = defaults$$1[name]; + } + } + + return Sub; +}; + +inherits(Path, Displayable); + +var CMD$2 = PathProxy.CMD; + +var points = [[], [], []]; +var mathSqrt$3 = Math.sqrt; +var mathAtan2 = Math.atan2; + +var transformPath = function (path, m) { + var data = path.data; + var cmd; + var nPoint; + var i; + var j; + var k; + var p; + + var M = CMD$2.M; + var C = CMD$2.C; + var L = CMD$2.L; + var R = CMD$2.R; + var A = CMD$2.A; + var Q = CMD$2.Q; + + for (i = 0, j = 0; i < data.length;) { + cmd = data[i++]; + j = i; + nPoint = 0; + + switch (cmd) { + case M: + nPoint = 1; + break; + case L: + nPoint = 1; + break; + case C: + nPoint = 3; + break; + case Q: + nPoint = 2; + break; + case A: + var x = m[4]; + var y = m[5]; + var sx = mathSqrt$3(m[0] * m[0] + m[1] * m[1]); + var sy = mathSqrt$3(m[2] * m[2] + m[3] * m[3]); + var angle = mathAtan2(-m[1] / sy, m[0] / sx); + // cx + data[i] *= sx; + data[i++] += x; + // cy + data[i] *= sy; + data[i++] += y; + // Scale rx and ry + // FIXME Assume psi is 0 here + data[i++] *= sx; + data[i++] *= sy; + + // Start angle + data[i++] += angle; + // end angle + data[i++] += angle; + // FIXME psi + i += 2; + j = i; + break; + case R: + // x0, y0 + p[0] = data[i++]; + p[1] = data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + // x1, y1 + p[0] += data[i++]; + p[1] += data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + } + + for (k = 0; k < nPoint; k++) { + var p = points[k]; + p[0] = data[i++]; + p[1] = data[i++]; + + applyTransform(p, p, m); + // Write back + data[j++] = p[0]; + data[j++] = p[1]; + } + } +}; + +// command chars +// var cc = [ +// 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', +// 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A' +// ]; + +var mathSqrt = Math.sqrt; +var mathSin = Math.sin; +var mathCos = Math.cos; +var PI = Math.PI; + +var vMag = function(v) { + return Math.sqrt(v[0] * v[0] + v[1] * v[1]); +}; +var vRatio = function(u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)); +}; +var vAngle = function(u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) + * Math.acos(vRatio(u, v)); +}; + +function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) { + var psi = psiDeg * (PI / 180.0); + var xp = mathCos(psi) * (x1 - x2) / 2.0 + + mathSin(psi) * (y1 - y2) / 2.0; + var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 + + mathCos(psi) * (y1 - y2) / 2.0; + + var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry); + + if (lambda > 1) { + rx *= mathSqrt(lambda); + ry *= mathSqrt(lambda); + } + + var f = (fa === fs ? -1 : 1) + * mathSqrt((((rx * rx) * (ry * ry)) + - ((rx * rx) * (yp * yp)) + - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp) + + (ry * ry) * (xp * xp)) + ) || 0; + + var cxp = f * rx * yp / ry; + var cyp = f * -ry * xp / rx; + + var cx = (x1 + x2) / 2.0 + + mathCos(psi) * cxp + - mathSin(psi) * cyp; + var cy = (y1 + y2) / 2.0 + + mathSin(psi) * cxp + + mathCos(psi) * cyp; + + var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]); + var u = [ (xp - cxp) / rx, (yp - cyp) / ry ]; + var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ]; + var dTheta = vAngle(u, v); + + if (vRatio(u, v) <= -1) { + dTheta = PI; + } + if (vRatio(u, v) >= 1) { + dTheta = 0; + } + if (fs === 0 && dTheta > 0) { + dTheta = dTheta - 2 * PI; + } + if (fs === 1 && dTheta < 0) { + dTheta = dTheta + 2 * PI; + } + + path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs); +} + + +var commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig; +// Consider case: +// (1) delimiter can be comma or space, where continuous commas +// or spaces should be seen as one comma. +// (2) value can be like: +// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983', +// 'l-.5E1,54', '121-23-44-11' (no delimiter) +var numberReg = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; +// var valueSplitReg = /[\s,]+/; + +function createPathProxyFromString(data) { + if (!data) { + return new PathProxy(); + } + + // var data = data.replace(/-/g, ' -') + // .replace(/ /g, ' ') + // .replace(/ /g, ',') + // .replace(/,,/g, ','); + + // var n; + // create pipes so that we can split the data + // for (n = 0; n < cc.length; n++) { + // cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]); + // } + + // data = data.replace(/-/g, ',-'); + + // create array + // var arr = cs.split('|'); + // init context point + var cpx = 0; + var cpy = 0; + var subpathX = cpx; + var subpathY = cpy; + var prevCmd; + + var path = new PathProxy(); + var CMD = PathProxy.CMD; + + // commandReg.lastIndex = 0; + // var cmdResult; + // while ((cmdResult = commandReg.exec(data)) != null) { + // var cmdStr = cmdResult[1]; + // var cmdContent = cmdResult[2]; + + var cmdList = data.match(commandReg); + for (var l = 0; l < cmdList.length; l++) { + var cmdText = cmdList[l]; + var cmdStr = cmdText.charAt(0); + + var cmd; + + // String#split is faster a little bit than String#replace or RegExp#exec. + // var p = cmdContent.split(valueSplitReg); + // var pLen = 0; + // for (var i = 0; i < p.length; i++) { + // // '' and other invalid str => NaN + // var val = parseFloat(p[i]); + // !isNaN(val) && (p[pLen++] = val); + // } + + var p = cmdText.match(numberReg) || []; + var pLen = p.length; + for (var i = 0; i < pLen; i++) { + p[i] = parseFloat(p[i]); + } + + var off = 0; + while (off < pLen) { + var ctlPtx; + var ctlPty; + + var rx; + var ry; + var psi; + var fa; + var fs; + + var x1 = cpx; + var y1 = cpy; + + // convert l, H, h, V, and v to L + switch (cmdStr) { + case 'l': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'L': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'm': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.M; + path.addData(cmd, cpx, cpy); + subpathX = cpx; + subpathY = cpy; + cmdStr = 'l'; + break; + case 'M': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.M; + path.addData(cmd, cpx, cpy); + subpathX = cpx; + subpathY = cpy; + cmdStr = 'L'; + break; + case 'h': + cpx += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'H': + cpx = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'v': + cpy += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'V': + cpy = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'C': + cmd = CMD.C; + path.addData( + cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++] + ); + cpx = p[off - 2]; + cpy = p[off - 1]; + break; + case 'c': + cmd = CMD.C; + path.addData( + cmd, + p[off++] + cpx, p[off++] + cpy, + p[off++] + cpx, p[off++] + cpy, + p[off++] + cpx, p[off++] + cpy + ); + cpx += p[off - 2]; + cpy += p[off - 1]; + break; + case 'S': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD.C; + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 's': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD.C; + x1 = cpx + p[off++]; + y1 = cpy + p[off++]; + cpx += p[off++]; + cpy += p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 'Q': + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'q': + x1 = p[off++] + cpx; + y1 = p[off++] + cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'T': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 't': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 'A': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + + x1 = cpx, y1 = cpy; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.A; + processArc( + x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path + ); + break; + case 'a': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + + x1 = cpx, y1 = cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.A; + processArc( + x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path + ); + break; + } + } + + if (cmdStr === 'z' || cmdStr === 'Z') { + cmd = CMD.Z; + path.addData(cmd); + // z may be in the middle of the path. + cpx = subpathX; + cpy = subpathY; + } + + prevCmd = cmd; + } + + path.toStatic(); + + return path; +} + +// TODO Optimize double memory cost problem +function createPathOptions(str, opts) { + var pathProxy = createPathProxyFromString(str); + opts = opts || {}; + opts.buildPath = function (path) { + if (path.setData) { + path.setData(pathProxy.data); + // Svg and vml renderer don't have context + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx); + } + } + else { + var ctx = path; + pathProxy.rebuildPath(ctx); + } + }; + + opts.applyTransform = function (m) { + transformPath(pathProxy, m); + this.dirty(true); + }; + + return opts; +} + +/** + * Create a Path object from path string data + * http://www.w3.org/TR/SVG/paths.html#PathData + * @param {Object} opts Other options + */ +function createFromString(str, opts) { + return new Path(createPathOptions(str, opts)); +} + +/** + * Create a Path class from path string data + * @param {string} str + * @param {Object} opts Other options + */ +function extendFromString(str, opts) { + return Path.extend(createPathOptions(str, opts)); +} + +/** + * Merge multiple paths + */ +// TODO Apply transform +// TODO stroke dash +// TODO Optimize double memory cost problem +function mergePath$1(pathEls, opts) { + var pathList = []; + var len = pathEls.length; + for (var i = 0; i < len; i++) { + var pathEl = pathEls[i]; + if (!pathEl.path) { + pathEl.createPathProxy(); + } + if (pathEl.__dirtyPath) { + pathEl.buildPath(pathEl.path, pathEl.shape, true); + } + pathList.push(pathEl.path); + } + + var pathBundle = new Path(opts); + // Need path proxy. + pathBundle.createPathProxy(); + pathBundle.buildPath = function (path) { + path.appendPath(pathList); + // Svg and vml renderer don't have context + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx); + } + }; + + return pathBundle; +} + +/** + * @alias zrender/graphic/Text + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +var Text = function (opts) { // jshint ignore:line + Displayable.call(this, opts); +}; + +Text.prototype = { + + constructor: Text, + + type: 'text', + + brush: function (ctx, prevEl) { + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + // Use props with prefix 'text'. + style.fill = style.stroke = style.shadowBlur = style.shadowColor = + style.shadowOffsetX = style.shadowOffsetY = null; + + var text = style.text; + // Convert to string + text != null && (text += ''); + + // Do not apply style.bind in Text node. Because the real bind job + // is in textHelper.renderText, and performance of text render should + // be considered. + // style.bind(ctx, this, prevEl); + + if (!needDrawText(text, style)) { + return; + } + + this.setTransform(ctx); + + renderText(this, ctx, text, style, null, prevEl); + + this.restoreTransform(ctx); + }, + + getBoundingRect: function () { + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + if (!this._rect) { + var text = style.text; + text != null ? (text += '') : (text = ''); + + var rect = getBoundingRect( + style.text + '', + style.font, + style.textAlign, + style.textVerticalAlign, + style.textPadding, + style.rich + ); + + rect.x += style.x || 0; + rect.y += style.y || 0; + + if (getStroke(style.textStroke, style.textStrokeWidth)) { + var w = style.textStrokeWidth; + rect.x -= w / 2; + rect.y -= w / 2; + rect.width += w; + rect.height += w; + } + + this._rect = rect; + } + + return this._rect; + } +}; + +inherits(Text, Displayable); + +/** + * 圆形 + * @module zrender/shape/Circle + */ + +var Circle = Path.extend({ + + type: 'circle', + + shape: { + cx: 0, + cy: 0, + r: 0 + }, + + + buildPath: function (ctx, shape, inBundle) { + // Better stroking in ShapeBundle + // Always do it may have performence issue ( fill may be 2x more cost) + if (inBundle) { + ctx.moveTo(shape.cx + shape.r, shape.cy); + } + // else { + // if (ctx.allocate && !ctx.data.length) { + // ctx.allocate(ctx.CMD_MEM_SIZE.A); + // } + // } + // Better stroking in ShapeBundle + // ctx.moveTo(shape.cx + shape.r, shape.cy); + ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true); + } +}); + +// Fix weird bug in some version of IE11 (like 11.0.9600.178**), +// where exception "unexpected call to method or property access" +// might be thrown when calling ctx.fill or ctx.stroke after a path +// whose area size is zero is drawn and ctx.clip() is called and +// shadowBlur is set. See #4572, #3112, #5777. +// (e.g., +// ctx.moveTo(10, 10); +// ctx.lineTo(20, 10); +// ctx.closePath(); +// ctx.clip(); +// ctx.shadowBlur = 10; +// ... +// ctx.fill(); +// ) + +var shadowTemp = [ + ['shadowBlur', 0], + ['shadowColor', '#000'], + ['shadowOffsetX', 0], + ['shadowOffsetY', 0] +]; + +var fixClipWithShadow = function (orignalBrush) { + + // version string can be: '11.0' + return (env$1.browser.ie && env$1.browser.version >= 11) + + ? function () { + var clipPaths = this.__clipPaths; + var style = this.style; + var modified; + + if (clipPaths) { + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + var shape = clipPath && clipPath.shape; + var type = clipPath && clipPath.type; + + if (shape && ( + (type === 'sector' && shape.startAngle === shape.endAngle) + || (type === 'rect' && (!shape.width || !shape.height)) + )) { + for (var j = 0; j < shadowTemp.length; j++) { + // It is save to put shadowTemp static, because shadowTemp + // will be all modified each item brush called. + shadowTemp[j][2] = style[shadowTemp[j][0]]; + style[shadowTemp[j][0]] = shadowTemp[j][1]; + } + modified = true; + break; + } + } + } + + orignalBrush.apply(this, arguments); + + if (modified) { + for (var j = 0; j < shadowTemp.length; j++) { + style[shadowTemp[j][0]] = shadowTemp[j][2]; + } + } + } + + : orignalBrush; +}; + +/** + * 扇形 + * @module zrender/graphic/shape/Sector + */ + +var Sector = Path.extend({ + + type: 'sector', + + shape: { + + cx: 0, + + cy: 0, + + r0: 0, + + r: 0, + + startAngle: 0, + + endAngle: Math.PI * 2, + + clockwise: true + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + + var x = shape.cx; + var y = shape.cy; + var r0 = Math.max(shape.r0 || 0, 0); + var r = Math.max(shape.r, 0); + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + + var unitX = Math.cos(startAngle); + var unitY = Math.sin(startAngle); + + ctx.moveTo(unitX * r0 + x, unitY * r0 + y); + + ctx.lineTo(unitX * r + x, unitY * r + y); + + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + + ctx.lineTo( + Math.cos(endAngle) * r0 + x, + Math.sin(endAngle) * r0 + y + ); + + if (r0 !== 0) { + ctx.arc(x, y, r0, endAngle, startAngle, clockwise); + } + + ctx.closePath(); + } +}); + +/** + * 圆环 + * @module zrender/graphic/shape/Ring + */ + +var Ring = Path.extend({ + + type: 'ring', + + shape: { + cx: 0, + cy: 0, + r: 0, + r0: 0 + }, + + buildPath: function (ctx, shape) { + var x = shape.cx; + var y = shape.cy; + var PI2 = Math.PI * 2; + ctx.moveTo(x + shape.r, y); + ctx.arc(x, y, shape.r, 0, PI2, false); + ctx.moveTo(x + shape.r0, y); + ctx.arc(x, y, shape.r0, 0, PI2, true); + } +}); + +/** + * Catmull-Rom spline 插值折线 + * @module zrender/shape/util/smoothSpline + * @author pissang (https://www.github.com/pissang) + * Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + */ + +/** + * @inner + */ +function interpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; +} + +/** + * @alias module:zrender/shape/util/smoothSpline + * @param {Array} points 线段顶点数组 + * @param {boolean} isLoop + * @return {Array} + */ +var smoothSpline = function (points, isLoop) { + var len$$1 = points.length; + var ret = []; + + var distance$$1 = 0; + for (var i = 1; i < len$$1; i++) { + distance$$1 += distance(points[i - 1], points[i]); + } + + var segs = distance$$1 / 2; + segs = segs < len$$1 ? len$$1 : segs; + for (var i = 0; i < segs; i++) { + var pos = i / (segs - 1) * (isLoop ? len$$1 : len$$1 - 1); + var idx = Math.floor(pos); + + var w = pos - idx; + + var p0; + var p1 = points[idx % len$$1]; + var p2; + var p3; + if (!isLoop) { + p0 = points[idx === 0 ? idx : idx - 1]; + p2 = points[idx > len$$1 - 2 ? len$$1 - 1 : idx + 1]; + p3 = points[idx > len$$1 - 3 ? len$$1 - 1 : idx + 2]; + } + else { + p0 = points[(idx - 1 + len$$1) % len$$1]; + p2 = points[(idx + 1) % len$$1]; + p3 = points[(idx + 2) % len$$1]; + } + + var w2 = w * w; + var w3 = w * w2; + + ret.push([ + interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3), + interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3) + ]); + } + return ret; +}; + +/** + * 贝塞尔平滑曲线 + * @module zrender/shape/util/smoothBezier + * @author pissang (https://www.github.com/pissang) + * Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + */ + +/** + * 贝塞尔平滑曲线 + * @alias module:zrender/shape/util/smoothBezier + * @param {Array} points 线段顶点数组 + * @param {number} smooth 平滑等级, 0-1 + * @param {boolean} isLoop + * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内 + * 比如 [[0, 0], [100, 100]], 这个包围盒会与 + * 整个折线的包围盒做一个并集用来约束控制点。 + * @param {Array} 计算出来的控制点数组 + */ +var smoothBezier = function (points, smooth, isLoop, constraint) { + var cps = []; + + var v = []; + var v1 = []; + var v2 = []; + var prevPoint; + var nextPoint; + + var min$$1, max$$1; + if (constraint) { + min$$1 = [Infinity, Infinity]; + max$$1 = [-Infinity, -Infinity]; + for (var i = 0, len$$1 = points.length; i < len$$1; i++) { + min(min$$1, min$$1, points[i]); + max(max$$1, max$$1, points[i]); + } + // 与指定的包围盒做并集 + min(min$$1, min$$1, constraint[0]); + max(max$$1, max$$1, constraint[1]); + } + + for (var i = 0, len$$1 = points.length; i < len$$1; i++) { + var point = points[i]; + + if (isLoop) { + prevPoint = points[i ? i - 1 : len$$1 - 1]; + nextPoint = points[(i + 1) % len$$1]; + } + else { + if (i === 0 || i === len$$1 - 1) { + cps.push(clone$1(points[i])); + continue; + } + else { + prevPoint = points[i - 1]; + nextPoint = points[i + 1]; + } + } + + sub(v, nextPoint, prevPoint); + + // use degree to scale the handle length + scale(v, v, smooth); + + var d0 = distance(point, prevPoint); + var d1 = distance(point, nextPoint); + var sum = d0 + d1; + if (sum !== 0) { + d0 /= sum; + d1 /= sum; + } + + scale(v1, v, -d0); + scale(v2, v, d1); + var cp0 = add([], point, v1); + var cp1 = add([], point, v2); + if (constraint) { + max(cp0, cp0, min$$1); + min(cp0, cp0, max$$1); + max(cp1, cp1, min$$1); + min(cp1, cp1, max$$1); + } + cps.push(cp0); + cps.push(cp1); + } + + if (isLoop) { + cps.push(cps.shift()); + } + + return cps; +}; + +function buildPath$1(ctx, shape, closePath) { + var points = shape.points; + var smooth = shape.smooth; + if (points && points.length >= 2) { + if (smooth && smooth !== 'spline') { + var controlPoints = smoothBezier( + points, smooth, closePath, shape.smoothConstraint + ); + + ctx.moveTo(points[0][0], points[0][1]); + var len = points.length; + for (var i = 0; i < (closePath ? len : len - 1); i++) { + var cp1 = controlPoints[i * 2]; + var cp2 = controlPoints[i * 2 + 1]; + var p = points[(i + 1) % len]; + ctx.bezierCurveTo( + cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1] + ); + } + } + else { + if (smooth === 'spline') { + points = smoothSpline(points, closePath); + } + + ctx.moveTo(points[0][0], points[0][1]); + for (var i = 1, l = points.length; i < l; i++) { + ctx.lineTo(points[i][0], points[i][1]); + } + } + + closePath && ctx.closePath(); + } +} + +/** + * 多边形 + * @module zrender/shape/Polygon + */ + +var Polygon = Path.extend({ + + type: 'polygon', + + shape: { + points: null, + + smooth: false, + + smoothConstraint: null + }, + + buildPath: function (ctx, shape) { + buildPath$1(ctx, shape, true); + } +}); + +/** + * @module zrender/graphic/shape/Polyline + */ + +var Polyline = Path.extend({ + + type: 'polyline', + + shape: { + points: null, + + smooth: false, + + smoothConstraint: null + }, + + style: { + stroke: '#000', + + fill: null + }, + + buildPath: function (ctx, shape) { + buildPath$1(ctx, shape, false); + } +}); + +/** + * 矩形 + * @module zrender/graphic/shape/Rect + */ + +var Rect = Path.extend({ + + type: 'rect', + + shape: { + // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4 + // r缩写为1 相当于 [1, 1, 1, 1] + // r缩写为[1] 相当于 [1, 1, 1, 1] + // r缩写为[1, 2] 相当于 [1, 2, 1, 2] + // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2] + r: 0, + + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (ctx, shape) { + var x = shape.x; + var y = shape.y; + var width = shape.width; + var height = shape.height; + if (!shape.r) { + ctx.rect(x, y, width, height); + } + else { + buildPath(ctx, shape); + } + ctx.closePath(); + return; + } +}); + +/** + * 直线 + * @module zrender/graphic/shape/Line + */ + +var Line = Path.extend({ + + type: 'line', + + shape: { + // Start point + x1: 0, + y1: 0, + // End point + x2: 0, + y2: 0, + + percent: 1 + }, + + style: { + stroke: '#000', + fill: null + }, + + buildPath: function (ctx, shape) { + var x1 = shape.x1; + var y1 = shape.y1; + var x2 = shape.x2; + var y2 = shape.y2; + var percent = shape.percent; + + if (percent === 0) { + return; + } + + ctx.moveTo(x1, y1); + + if (percent < 1) { + x2 = x1 * (1 - percent) + x2 * percent; + y2 = y1 * (1 - percent) + y2 * percent; + } + ctx.lineTo(x2, y2); + }, + + /** + * Get point at percent + * @param {number} percent + * @return {Array.} + */ + pointAt: function (p) { + var shape = this.shape; + return [ + shape.x1 * (1 - p) + shape.x2 * p, + shape.y1 * (1 - p) + shape.y2 * p + ]; + } +}); + +/** + * 贝塞尔曲线 + * @module zrender/shape/BezierCurve + */ + +var out = []; + +function someVectorAt(shape, t, isTangent) { + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + if (cpx2 === null || cpy2 === null) { + return [ + (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), + (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t) + ]; + } + else { + return [ + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t) + ]; + } +} + +var BezierCurve = Path.extend({ + + type: 'bezier-curve', + + shape: { + x1: 0, + y1: 0, + x2: 0, + y2: 0, + cpx1: 0, + cpy1: 0, + // cpx2: 0, + // cpy2: 0 + + // Curve show percent, for animating + percent: 1 + }, + + style: { + stroke: '#000', + fill: null + }, + + buildPath: function (ctx, shape) { + var x1 = shape.x1; + var y1 = shape.y1; + var x2 = shape.x2; + var y2 = shape.y2; + var cpx1 = shape.cpx1; + var cpy1 = shape.cpy1; + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + var percent = shape.percent; + if (percent === 0) { + return; + } + + ctx.moveTo(x1, y1); + + if (cpx2 == null || cpy2 == null) { + if (percent < 1) { + quadraticSubdivide( + x1, cpx1, x2, percent, out + ); + cpx1 = out[1]; + x2 = out[2]; + quadraticSubdivide( + y1, cpy1, y2, percent, out + ); + cpy1 = out[1]; + y2 = out[2]; + } + + ctx.quadraticCurveTo( + cpx1, cpy1, + x2, y2 + ); + } + else { + if (percent < 1) { + cubicSubdivide( + x1, cpx1, cpx2, x2, percent, out + ); + cpx1 = out[1]; + cpx2 = out[2]; + x2 = out[3]; + cubicSubdivide( + y1, cpy1, cpy2, y2, percent, out + ); + cpy1 = out[1]; + cpy2 = out[2]; + y2 = out[3]; + } + ctx.bezierCurveTo( + cpx1, cpy1, + cpx2, cpy2, + x2, y2 + ); + } + }, + + /** + * Get point at percent + * @param {number} t + * @return {Array.} + */ + pointAt: function (t) { + return someVectorAt(this.shape, t, false); + }, + + /** + * Get tangent at percent + * @param {number} t + * @return {Array.} + */ + tangentAt: function (t) { + var p = someVectorAt(this.shape, t, true); + return normalize(p, p); + } +}); + +/** + * 圆弧 + * @module zrender/graphic/shape/Arc + */ + +var Arc = Path.extend({ + + type: 'arc', + + shape: { + + cx: 0, + + cy: 0, + + r: 0, + + startAngle: 0, + + endAngle: Math.PI * 2, + + clockwise: true + }, + + style: { + + stroke: '#000', + + fill: null + }, + + buildPath: function (ctx, shape) { + + var x = shape.cx; + var y = shape.cy; + var r = Math.max(shape.r, 0); + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + + var unitX = Math.cos(startAngle); + var unitY = Math.sin(startAngle); + + ctx.moveTo(unitX * r + x, unitY * r + y); + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + } +}); + +// CompoundPath to improve performance + +var CompoundPath = Path.extend({ + + type: 'compound', + + shape: { + + paths: null + }, + + _updatePathDirty: function () { + var dirtyPath = this.__dirtyPath; + var paths = this.shape.paths; + for (var i = 0; i < paths.length; i++) { + // Mark as dirty if any subpath is dirty + dirtyPath = dirtyPath || paths[i].__dirtyPath; + } + this.__dirtyPath = dirtyPath; + this.__dirty = this.__dirty || dirtyPath; + }, + + beforeBrush: function () { + this._updatePathDirty(); + var paths = this.shape.paths || []; + var scale = this.getGlobalScale(); + // Update path scale + for (var i = 0; i < paths.length; i++) { + if (!paths[i].path) { + paths[i].createPathProxy(); + } + paths[i].path.setScale(scale[0], scale[1]); + } + }, + + buildPath: function (ctx, shape) { + var paths = shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].buildPath(ctx, paths[i].shape, true); + } + }, + + afterBrush: function () { + var paths = this.shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].__dirtyPath = false; + } + }, + + getBoundingRect: function () { + this._updatePathDirty(); + return Path.prototype.getBoundingRect.call(this); + } +}); + +/** + * @param {Array.} colorStops + */ +var Gradient = function (colorStops) { + + this.colorStops = colorStops || []; + +}; + +Gradient.prototype = { + + constructor: Gradient, + + addColorStop: function (offset, color) { + this.colorStops.push({ + + offset: offset, + + color: color + }); + } + +}; + +/** + * x, y, x2, y2 are all percent from 0 to 1 + * @param {number} [x=0] + * @param {number} [y=0] + * @param {number} [x2=1] + * @param {number} [y2=0] + * @param {Array.} colorStops + * @param {boolean} [globalCoord=false] + */ +var LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {type: 'linear', colorStops: ...}`, where + // this constructor will not be called. + + this.x = x == null ? 0 : x; + + this.y = y == null ? 0 : y; + + this.x2 = x2 == null ? 1 : x2; + + this.y2 = y2 == null ? 0 : y2; + + // Can be cloned + this.type = 'linear'; + + // If use global coord + this.global = globalCoord || false; + + Gradient.call(this, colorStops); +}; + +LinearGradient.prototype = { + + constructor: LinearGradient +}; + +inherits(LinearGradient, Gradient); + +/** + * x, y, r are all percent from 0 to 1 + * @param {number} [x=0.5] + * @param {number} [y=0.5] + * @param {number} [r=0.5] + * @param {Array.} [colorStops] + * @param {boolean} [globalCoord=false] + */ +var RadialGradient = function (x, y, r, colorStops, globalCoord) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {type: 'radial', colorStops: ...}`, where + // this constructor will not be called. + + this.x = x == null ? 0.5 : x; + + this.y = y == null ? 0.5 : y; + + this.r = r == null ? 0.5 : r; + + // Can be cloned + this.type = 'radial'; + + // If use global coord + this.global = globalCoord || false; + + Gradient.call(this, colorStops); +}; + +RadialGradient.prototype = { + + constructor: RadialGradient +}; + +inherits(RadialGradient, Gradient); + +/** + * Displayable for incremental rendering. It will be rendered in a separate layer + * IncrementalDisplay have too main methods. `clearDisplayables` and `addDisplayables` + * addDisplayables will render the added displayables incremetally. + * + * It use a not clearFlag to tell the painter don't clear the layer if it's the first element. + */ +// TODO Style override ? +function IncrementalDisplayble(opts) { + + Displayable.call(this, opts); + + this._displayables = []; + + this._temporaryDisplayables = []; + + this._cursor = 0; + + this.notClear = true; +} + +IncrementalDisplayble.prototype.incremental = true; + +IncrementalDisplayble.prototype.clearDisplaybles = function () { + this._displayables = []; + this._temporaryDisplayables = []; + this._cursor = 0; + this.dirty(); + + this.notClear = false; +}; + +IncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) { + if (notPersistent) { + this._temporaryDisplayables.push(displayable); + } + else { + this._displayables.push(displayable); + } + this.dirty(); +}; + +IncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) { + notPersistent = notPersistent || false; + for (var i = 0; i < displayables.length; i++) { + this.addDisplayable(displayables[i], notPersistent); + } +}; + +IncrementalDisplayble.prototype.eachPendingDisplayable = function (cb) { + for (var i = this._cursor; i < this._displayables.length; i++) { + cb && cb(this._displayables[i]); + } + for (var i = 0; i < this._temporaryDisplayables.length; i++) { + cb && cb(this._temporaryDisplayables[i]); + } +}; + +IncrementalDisplayble.prototype.update = function () { + this.updateTransform(); + for (var i = this._cursor; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + // PENDING + displayable.parent = this; + displayable.update(); + displayable.parent = null; + } + for (var i = 0; i < this._temporaryDisplayables.length; i++) { + var displayable = this._temporaryDisplayables[i]; + // PENDING + displayable.parent = this; + displayable.update(); + displayable.parent = null; + } +}; + +IncrementalDisplayble.prototype.brush = function (ctx, prevEl) { + // Render persistant displayables. + for (var i = this._cursor; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + displayable.beforeBrush && displayable.beforeBrush(ctx); + displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]); + displayable.afterBrush && displayable.afterBrush(ctx); + } + this._cursor = i; + // Render temporary displayables. + for (var i = 0; i < this._temporaryDisplayables.length; i++) { + var displayable = this._temporaryDisplayables[i]; + displayable.beforeBrush && displayable.beforeBrush(ctx); + displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]); + displayable.afterBrush && displayable.afterBrush(ctx); + } + + this._temporaryDisplayables = []; + + this.notClear = true; +}; + +var m = []; +IncrementalDisplayble.prototype.getBoundingRect = function () { + if (!this._rect) { + var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity); + for (var i = 0; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + var childRect = displayable.getBoundingRect().clone(); + if (displayable.needLocalTransform()) { + childRect.applyTransform(displayable.getLocalTransform(m)); + } + rect.union(childRect); + } + this._rect = rect; + } + return this._rect; +}; + +IncrementalDisplayble.prototype.contain = function (x, y) { + var localPos = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + + if (rect.contain(localPos[0], localPos[1])) { + for (var i = 0; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + if (displayable.contain(x, y)) { + return true; + } + } + } + return false; +}; + +inherits(IncrementalDisplayble, Displayable); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var round = Math.round; +var mathMax$1 = Math.max; +var mathMin$1 = Math.min; + +var EMPTY_OBJ = {}; + +/** + * Extend shape with parameters + */ +function extendShape(opts) { + return Path.extend(opts); +} + +/** + * Extend path + */ +function extendPath(pathData, opts) { + return extendFromString(pathData, opts); +} + +/** + * Create a path element from path data string + * @param {string} pathData + * @param {Object} opts + * @param {module:zrender/core/BoundingRect} rect + * @param {string} [layout=cover] 'center' or 'cover' + */ +function makePath(pathData, opts, rect, layout) { + var path = createFromString(pathData, opts); + if (rect) { + if (layout === 'center') { + rect = centerGraphic(rect, path.getBoundingRect()); + } + resizePath(path, rect); + } + return path; +} + +/** + * Create a image element from image url + * @param {string} imageUrl image url + * @param {Object} opts options + * @param {module:zrender/core/BoundingRect} rect constrain rect + * @param {string} [layout=cover] 'center' or 'cover' + */ +function makeImage(imageUrl, rect, layout) { + var path = new ZImage({ + style: { + image: imageUrl, + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + onload: function (img) { + if (layout === 'center') { + var boundingRect = { + width: img.width, + height: img.height + }; + path.setStyle(centerGraphic(rect, boundingRect)); + } + } + }); + return path; +} + +/** + * Get position of centered element in bounding box. + * + * @param {Object} rect element local bounding box + * @param {Object} boundingRect constraint bounding box + * @return {Object} element position containing x, y, width, and height + */ +function centerGraphic(rect, boundingRect) { + // Set rect to center, keep width / height ratio. + var aspect = boundingRect.width / boundingRect.height; + var width = rect.height * aspect; + var height; + if (width <= rect.width) { + height = rect.height; + } + else { + width = rect.width; + height = width / aspect; + } + var cx = rect.x + rect.width / 2; + var cy = rect.y + rect.height / 2; + + return { + x: cx - width / 2, + y: cy - height / 2, + width: width, + height: height + }; +} + +var mergePath = mergePath$1; + +/** + * Resize a path to fit the rect + * @param {module:zrender/graphic/Path} path + * @param {Object} rect + */ +function resizePath(path, rect) { + if (!path.applyTransform) { + return; + } + + var pathRect = path.getBoundingRect(); + + var m = pathRect.calculateTransform(rect); + + path.applyTransform(m); +} + +/** + * Sub pixel optimize line for canvas + * + * @param {Object} param + * @param {Object} [param.shape] + * @param {number} [param.shape.x1] + * @param {number} [param.shape.y1] + * @param {number} [param.shape.x2] + * @param {number} [param.shape.y2] + * @param {Object} [param.style] + * @param {number} [param.style.lineWidth] + * @return {Object} Modified param + */ +function subPixelOptimizeLine(param) { + var shape = param.shape; + var lineWidth = param.style.lineWidth; + + if (round(shape.x1 * 2) === round(shape.x2 * 2)) { + shape.x1 = shape.x2 = subPixelOptimize(shape.x1, lineWidth, true); + } + if (round(shape.y1 * 2) === round(shape.y2 * 2)) { + shape.y1 = shape.y2 = subPixelOptimize(shape.y1, lineWidth, true); + } + return param; +} + +/** + * Sub pixel optimize rect for canvas + * + * @param {Object} param + * @param {Object} [param.shape] + * @param {number} [param.shape.x] + * @param {number} [param.shape.y] + * @param {number} [param.shape.width] + * @param {number} [param.shape.height] + * @param {Object} [param.style] + * @param {number} [param.style.lineWidth] + * @return {Object} Modified param + */ +function subPixelOptimizeRect(param) { + var shape = param.shape; + var lineWidth = param.style.lineWidth; + var originX = shape.x; + var originY = shape.y; + var originWidth = shape.width; + var originHeight = shape.height; + shape.x = subPixelOptimize(shape.x, lineWidth, true); + shape.y = subPixelOptimize(shape.y, lineWidth, true); + shape.width = Math.max( + subPixelOptimize(originX + originWidth, lineWidth, false) - shape.x, + originWidth === 0 ? 0 : 1 + ); + shape.height = Math.max( + subPixelOptimize(originY + originHeight, lineWidth, false) - shape.y, + originHeight === 0 ? 0 : 1 + ); + return param; +} + +/** + * Sub pixel optimize for canvas + * + * @param {number} position Coordinate, such as x, y + * @param {number} lineWidth Should be nonnegative integer. + * @param {boolean=} positiveOrNegative Default false (negative). + * @return {number} Optimized position. + */ +function subPixelOptimize(position, lineWidth, positiveOrNegative) { + // Assure that (position + lineWidth / 2) is near integer edge, + // otherwise line will be fuzzy in canvas. + var doubledPosition = round(position * 2); + return (doubledPosition + round(lineWidth)) % 2 === 0 + ? doubledPosition / 2 + : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2; +} + +function hasFillOrStroke(fillOrStroke) { + return fillOrStroke != null && fillOrStroke !== 'none'; +} + +// Most lifted color are duplicated. +var liftedColorMap = createHashMap(); +var liftedColorCount = 0; + +function liftColor(color) { + if (typeof color !== 'string') { + return color; + } + var liftedColor = liftedColorMap.get(color); + if (!liftedColor) { + liftedColor = lift(color, -0.1); + if (liftedColorCount < 10000) { + liftedColorMap.set(color, liftedColor); + liftedColorCount++; + } + } + return liftedColor; +} + +function cacheElementStl(el) { + if (!el.__hoverStlDirty) { + return; + } + el.__hoverStlDirty = false; + + var hoverStyle = el.__hoverStl; + if (!hoverStyle) { + el.__normalStl = null; + return; + } + + var normalStyle = el.__normalStl = {}; + var elStyle = el.style; + + for (var name in hoverStyle) { + // See comment in `doSingleEnterHover`. + if (hoverStyle[name] != null) { + normalStyle[name] = elStyle[name]; + } + } + + // Always cache fill and stroke to normalStyle for lifting color. + normalStyle.fill = elStyle.fill; + normalStyle.stroke = elStyle.stroke; +} + +function doSingleEnterHover(el) { + var hoverStl = el.__hoverStl; + + if (!hoverStl || el.__highlighted) { + return; + } + + var useHoverLayer = el.useHoverLayer; + el.__highlighted = useHoverLayer ? 'layer' : 'plain'; + + var zr = el.__zr; + if (!zr && useHoverLayer) { + return; + } + + var elTarget = el; + var targetStyle = el.style; + + if (useHoverLayer) { + elTarget = zr.addHover(el); + targetStyle = elTarget.style; + } + + // Consider case: only `position: 'top'` is set on emphasis, then text + // color should be returned to `autoColor`, rather than remain '#fff'. + // So we should rollback then apply again after style merging. + rollbackDefaultTextStyle(targetStyle); + + if (!useHoverLayer) { + cacheElementStl(elTarget); + } + + // styles can be: + // { + // label: { + // show: false, + // position: 'outside', + // fontSize: 18 + // }, + // emphasis: { + // label: { + // show: true + // } + // } + // }, + // where properties of `emphasis` may not appear in `normal`. We previously use + // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`. + // But consider rich text and setOption in merge mode, it is impossible to cover + // all properties in merge. So we use merge mode when setting style here, where + // only properties that is not `null/undefined` can be set. The disadventage: + // null/undefined can not be used to remove style any more in `emphasis`. + targetStyle.extendFrom(hoverStl); + + setDefaultHoverFillStroke(targetStyle, hoverStl, 'fill'); + setDefaultHoverFillStroke(targetStyle, hoverStl, 'stroke'); + + applyDefaultTextStyle(targetStyle); + + if (!useHoverLayer) { + el.dirty(false); + el.z2 += 1; + } +} + +function setDefaultHoverFillStroke(targetStyle, hoverStyle, prop) { + if (!hasFillOrStroke(hoverStyle[prop]) && hasFillOrStroke(targetStyle[prop])) { + targetStyle[prop] = liftColor(targetStyle[prop]); + } +} + +function doSingleLeaveHover(el) { + if (el.__highlighted) { + doSingleRestoreHoverStyle(el); + el.__highlighted = false; + } +} + +function doSingleRestoreHoverStyle(el) { + var highlighted = el.__highlighted; + + if (highlighted === 'layer') { + el.__zr && el.__zr.removeHover(el); + } + else if (highlighted) { + var style = el.style; + var normalStl = el.__normalStl; + + if (normalStl) { + rollbackDefaultTextStyle(style); + + // Consider null/undefined value, should use + // `setStyle` but not `extendFrom(stl, true)`. + el.setStyle(normalStl); + + applyDefaultTextStyle(style); + + el.z2 -= 1; + } + } +} + +function traverseCall(el, method) { + el.isGroup + ? el.traverse(function (child) { + !child.isGroup && method(child); + }) + : method(el); +} + +/** + * Set hover style of element. + * + * @param {module:zrender/Element} el Should not be `zrender/container/Group`. + * @param {Object|boolean} [hoverStl] The specified hover style. + * If set as `false`, disable the hover style. + * Similarly, The `el.hoverStyle` can alse be set + * as `false` to disable the hover style. + * Otherwise, use the default hover style if not provided. + * @param {Object} [opt] + * @param {boolean} [opt.hoverSilentOnTouch=false] See `graphic.setAsHoverStyleTrigger` + */ +function setElementHoverStyle(el, hoverStl) { + hoverStl = el.__hoverStl = hoverStl !== false && (hoverStl || {}); + el.__hoverStlDirty = true; + + if (el.__highlighted) { + doSingleLeaveHover(el); + doSingleEnterHover(el); + } +} + +/** + * Emphasis (called by API) has higher priority than `mouseover`. + * When element has been called to be entered emphasis, mouse over + * should not trigger the highlight effect (for example, animation + * scale) again, and `mouseout` should not downplay the highlight + * effect. So the listener of `mouseover` and `mouseout` should + * check `isInEmphasis`. + * + * @param {module:zrender/Element} el + * @return {boolean} + */ +function isInEmphasis(el) { + return el && el.__isEmphasisEntered; +} + +function onElementMouseOver(e) { + if (this.__hoverSilentOnTouch && e.zrByTouch) { + return; + } + + // Only if element is not in emphasis status + !this.__isEmphasisEntered && traverseCall(this, doSingleEnterHover); +} + +function onElementMouseOut(e) { + if (this.__hoverSilentOnTouch && e.zrByTouch) { + return; + } + + // Only if element is not in emphasis status + !this.__isEmphasisEntered && traverseCall(this, doSingleLeaveHover); +} + +function enterEmphasis() { + this.__isEmphasisEntered = true; + traverseCall(this, doSingleEnterHover); +} + +function leaveEmphasis() { + this.__isEmphasisEntered = false; + traverseCall(this, doSingleLeaveHover); +} + +/** + * Set hover style of element. + * + * [Caveat]: + * This method can be called repeatly and achieve the same result. + * + * [Usage]: + * Call the method for a "root" element once. Do not call it for each descendants. + * If the descendants elemenets of a group has itself hover style different from the + * root group, we can simply mount the style on `el.hoverStyle` for them, but should + * not call this method for them. + * + * @param {module:zrender/Element} el + * @param {Object|boolean} [hoverStyle] See `graphic.setElementHoverStyle`. + * @param {Object} [opt] + * @param {boolean} [opt.hoverSilentOnTouch=false] See `graphic.setAsHoverStyleTrigger`. + */ +function setHoverStyle(el, hoverStyle, opt) { + el.isGroup + ? el.traverse(function (child) { + // If element has sepcified hoverStyle, then use it instead of given hoverStyle + // Often used when item group has a label element and it's hoverStyle is different + !child.isGroup && setElementHoverStyle(child, child.hoverStyle || hoverStyle); + }) + : setElementHoverStyle(el, el.hoverStyle || hoverStyle); + + setAsHoverStyleTrigger(el, opt); +} + +/** + * @param {Object|boolean} [opt] If `false`, means disable trigger. + * @param {boolean} [opt.hoverSilentOnTouch=false] + * In touch device, mouseover event will be trigger on touchstart event + * (see module:zrender/dom/HandlerProxy). By this mechanism, we can + * conveniently use hoverStyle when tap on touch screen without additional + * code for compatibility. + * But if the chart/component has select feature, which usually also use + * hoverStyle, there might be conflict between 'select-highlight' and + * 'hover-highlight' especially when roam is enabled (see geo for example). + * In this case, hoverSilentOnTouch should be used to disable hover-highlight + * on touch device. + */ +function setAsHoverStyleTrigger(el, opt) { + var disable = opt === false; + el.__hoverSilentOnTouch = opt != null && opt.hoverSilentOnTouch; + + // Simple optimize, since this method might be + // called for each elements of a group in some cases. + if (!disable || el.__hoverStyleTrigger) { + var method = disable ? 'off' : 'on'; + + // Duplicated function will be auto-ignored, see Eventful.js. + el[method]('mouseover', onElementMouseOver)[method]('mouseout', onElementMouseOut); + // Emphasis, normal can be triggered manually + el[method]('emphasis', enterEmphasis)[method]('normal', leaveEmphasis); + + el.__hoverStyleTrigger = !disable; + } +} + +/** + * @param {Object|module:zrender/graphic/Style} normalStyle + * @param {Object} emphasisStyle + * @param {module:echarts/model/Model} normalModel + * @param {module:echarts/model/Model} emphasisModel + * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props. + * @param {string|Function} [opt.defaultText] + * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by + * `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by + * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by + * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {Object} [normalSpecified] + * @param {Object} [emphasisSpecified] + */ +function setLabelStyle( + normalStyle, emphasisStyle, + normalModel, emphasisModel, + opt, + normalSpecified, emphasisSpecified +) { + opt = opt || EMPTY_OBJ; + var labelFetcher = opt.labelFetcher; + var labelDataIndex = opt.labelDataIndex; + var labelDimIndex = opt.labelDimIndex; + + // This scenario, `label.normal.show = true; label.emphasis.show = false`, + // is not supported util someone requests. + + var showNormal = normalModel.getShallow('show'); + var showEmphasis = emphasisModel.getShallow('show'); + + // Consider performance, only fetch label when necessary. + // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set, + // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`. + var baseText; + if (showNormal || showEmphasis) { + if (labelFetcher) { + baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex); + } + if (baseText == null) { + baseText = isFunction$1(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText; + } + } + var normalStyleText = showNormal ? baseText : null; + var emphasisStyleText = showEmphasis + ? retrieve2( + labelFetcher + ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex) + : null, + baseText + ) + : null; + + // Optimize: If style.text is null, text will not be drawn. + if (normalStyleText != null || emphasisStyleText != null) { + // Always set `textStyle` even if `normalStyle.text` is null, because default + // values have to be set on `normalStyle`. + // If we set default values on `emphasisStyle`, consider case: + // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);` + // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);` + // Then the 'red' will not work on emphasis. + setTextStyle(normalStyle, normalModel, normalSpecified, opt); + setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true); + } + + normalStyle.text = normalStyleText; + emphasisStyle.text = emphasisStyleText; +} + +/** + * Set basic textStyle properties. + * @param {Object|module:zrender/graphic/Style} textStyle + * @param {module:echarts/model/Model} model + * @param {Object} [specifiedTextStyle] Can be overrided by settings in model. + * @param {Object} [opt] See `opt` of `setTextStyleCommon`. + * @param {boolean} [isEmphasis] + */ +function setTextStyle( + textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis +) { + setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis); + specifiedTextStyle && extend(textStyle, specifiedTextStyle); + // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false); + + return textStyle; +} + +/** + * Set text option in the style. + * @deprecated + * @param {Object} textStyle + * @param {module:echarts/model/Model} labelModel + * @param {string|boolean} defaultColor Default text color. + * If set as false, it will be processed as a emphasis style. + */ +function setText(textStyle, labelModel, defaultColor) { + var opt = {isRectText: true}; + var isEmphasis; + + if (defaultColor === false) { + isEmphasis = true; + } + else { + // Support setting color as 'auto' to get visual color. + opt.autoColor = defaultColor; + } + setTextStyleCommon(textStyle, labelModel, opt, isEmphasis); + // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false); +} + +/** + * { + * disableBox: boolean, Whether diable drawing box of block (outer most). + * isRectText: boolean, + * autoColor: string, specify a color when color is 'auto', + * for textFill, textStroke, textBackgroundColor, and textBorderColor. + * If autoColor specified, it is used as default textFill. + * useInsideStyle: + * `true`: Use inside style (textFill, textStroke, textStrokeWidth) + * if `textFill` is not specified. + * `false`: Do not use inside style. + * `null/undefined`: use inside style if `isRectText` is true and + * `textFill` is not specified and textPosition contains `'inside'`. + * forceRich: boolean + * } + */ +function setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) { + // Consider there will be abnormal when merge hover style to normal style if given default value. + opt = opt || EMPTY_OBJ; + + if (opt.isRectText) { + var textPosition = textStyleModel.getShallow('position') + || (isEmphasis ? null : 'inside'); + // 'outside' is not a valid zr textPostion value, but used + // in bar series, and magric type should be considered. + textPosition === 'outside' && (textPosition = 'top'); + textStyle.textPosition = textPosition; + textStyle.textOffset = textStyleModel.getShallow('offset'); + var labelRotate = textStyleModel.getShallow('rotate'); + labelRotate != null && (labelRotate *= Math.PI / 180); + textStyle.textRotation = labelRotate; + textStyle.textDistance = retrieve2( + textStyleModel.getShallow('distance'), isEmphasis ? null : 5 + ); + } + + var ecModel = textStyleModel.ecModel; + var globalTextStyle = ecModel && ecModel.option.textStyle; + + // Consider case: + // { + // data: [{ + // value: 12, + // label: { + // rich: { + // // no 'a' here but using parent 'a'. + // } + // } + // }], + // rich: { + // a: { ... } + // } + // } + var richItemNames = getRichItemNames(textStyleModel); + var richResult; + if (richItemNames) { + richResult = {}; + for (var name in richItemNames) { + if (richItemNames.hasOwnProperty(name)) { + // Cascade is supported in rich. + var richTextStyle = textStyleModel.getModel(['rich', name]); + // In rich, never `disableBox`. + setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis); + } + } + } + textStyle.rich = richResult; + + setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true); + + if (opt.forceRich && !opt.textStyle) { + opt.textStyle = {}; + } + + return textStyle; +} + +// Consider case: +// { +// data: [{ +// value: 12, +// label: { +// rich: { +// // no 'a' here but using parent 'a'. +// } +// } +// }], +// rich: { +// a: { ... } +// } +// } +function getRichItemNames(textStyleModel) { + // Use object to remove duplicated names. + var richItemNameMap; + while (textStyleModel && textStyleModel !== textStyleModel.ecModel) { + var rich = (textStyleModel.option || EMPTY_OBJ).rich; + if (rich) { + richItemNameMap = richItemNameMap || {}; + for (var name in rich) { + if (rich.hasOwnProperty(name)) { + richItemNameMap[name] = 1; + } + } + } + textStyleModel = textStyleModel.parentModel; + } + return richItemNameMap; +} + +function setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) { + // In merge mode, default value should not be given. + globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ; + + textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt) + || globalTextStyle.color; + textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt) + || globalTextStyle.textBorderColor; + textStyle.textStrokeWidth = retrieve2( + textStyleModel.getShallow('textBorderWidth'), + globalTextStyle.textBorderWidth + ); + + // Save original textPosition, because style.textPosition will be repalced by + // real location (like [10, 30]) in zrender. + textStyle.insideRawTextPosition = textStyle.textPosition; + + if (!isEmphasis) { + if (isBlock) { + textStyle.insideRollbackOpt = opt; + applyDefaultTextStyle(textStyle); + } + + // Set default finally. + if (textStyle.textFill == null) { + textStyle.textFill = opt.autoColor; + } + } + + // Do not use `getFont` here, because merge should be supported, where + // part of these properties may be changed in emphasis style, and the + // others should remain their original value got from normal style. + textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle; + textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight; + textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize; + textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily; + + textStyle.textAlign = textStyleModel.getShallow('align'); + textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign') + || textStyleModel.getShallow('baseline'); + + textStyle.textLineHeight = textStyleModel.getShallow('lineHeight'); + textStyle.textWidth = textStyleModel.getShallow('width'); + textStyle.textHeight = textStyleModel.getShallow('height'); + textStyle.textTag = textStyleModel.getShallow('tag'); + + if (!isBlock || !opt.disableBox) { + textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt); + textStyle.textPadding = textStyleModel.getShallow('padding'); + textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt); + textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth'); + textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius'); + + textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor'); + textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur'); + textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX'); + textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY'); + } + + textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor') + || globalTextStyle.textShadowColor; + textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur') + || globalTextStyle.textShadowBlur; + textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX') + || globalTextStyle.textShadowOffsetX; + textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY') + || globalTextStyle.textShadowOffsetY; +} + +function getAutoColor(color, opt) { + return color !== 'auto' ? color : (opt && opt.autoColor) ? opt.autoColor : null; +} + +// When text position is `inside` and `textFill` not specified, we +// provide a mechanism to auto make text border for better view. But +// text position changing when hovering or being emphasis should be +// considered, where the `insideRollback` enables to restore the style. +function applyDefaultTextStyle(textStyle) { + var opt = textStyle.insideRollbackOpt; + + // Only insideRollbackOpt create (setTextStyleCommon used), + // applyDefaultTextStyle works. + if (!opt || textStyle.textFill != null) { + return; + } + + var useInsideStyle = opt.useInsideStyle; + var textPosition = textStyle.insideRawTextPosition; + var insideRollback; + var autoColor = opt.autoColor; + + if (useInsideStyle !== false + && (useInsideStyle === true + || (opt.isRectText + && textPosition + // textPosition can be [10, 30] + && typeof textPosition === 'string' + && textPosition.indexOf('inside') >= 0 + ) + ) + ) { + insideRollback = { + textFill: null, + textStroke: textStyle.textStroke, + textStrokeWidth: textStyle.textStrokeWidth + }; + textStyle.textFill = '#fff'; + // Consider text with #fff overflow its container. + if (textStyle.textStroke == null) { + textStyle.textStroke = autoColor; + textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2); + } + } + else if (autoColor != null) { + insideRollback = {textFill: null}; + textStyle.textFill = autoColor; + } + + // Always set `insideRollback`, for clearing previous. + if (insideRollback) { + textStyle.insideRollback = insideRollback; + } +} + +function rollbackDefaultTextStyle(style) { + var insideRollback = style.insideRollback; + if (insideRollback) { + style.textFill = insideRollback.textFill; + style.textStroke = insideRollback.textStroke; + style.textStrokeWidth = insideRollback.textStrokeWidth; + style.insideRollback = null; + } +} + +function getFont(opt, ecModel) { + // ecModel or default text style model. + var gTextStyleModel = ecModel || ecModel.getModel('textStyle'); + return trim([ + // FIXME in node-canvas fontWeight is before fontStyle + opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', + opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', + (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', + opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif' + ].join(' ')); +} + +function animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) { + if (typeof dataIndex === 'function') { + cb = dataIndex; + dataIndex = null; + } + // Do not check 'animation' property directly here. Consider this case: + // animation model is an `itemModel`, whose does not have `isAnimationEnabled` + // but its parent model (`seriesModel`) does. + var animationEnabled = animatableModel && animatableModel.isAnimationEnabled(); + + if (animationEnabled) { + var postfix = isUpdate ? 'Update' : ''; + var duration = animatableModel.getShallow('animationDuration' + postfix); + var animationEasing = animatableModel.getShallow('animationEasing' + postfix); + var animationDelay = animatableModel.getShallow('animationDelay' + postfix); + if (typeof animationDelay === 'function') { + animationDelay = animationDelay( + dataIndex, + animatableModel.getAnimationDelayParams + ? animatableModel.getAnimationDelayParams(el, dataIndex) + : null + ); + } + if (typeof duration === 'function') { + duration = duration(dataIndex); + } + + duration > 0 + ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb) + : (el.stopAnimation(), el.attr(props), cb && cb()); + } + else { + el.stopAnimation(); + el.attr(props); + cb && cb(); + } +} + +/** + * Update graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So if do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * + * @param {module:zrender/Element} el + * @param {Object} props + * @param {module:echarts/model/Model} [animatableModel] + * @param {number} [dataIndex] + * @param {Function} [cb] + * @example + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, dataIndex, function () { console.log('Animation done!'); }); + * // Or + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, function () { console.log('Animation done!'); }); + */ +function updateProps(el, props, animatableModel, dataIndex, cb) { + animateOrSetProps(true, el, props, animatableModel, dataIndex, cb); +} + +/** + * Init graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So if do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * + * @param {module:zrender/Element} el + * @param {Object} props + * @param {module:echarts/model/Model} [animatableModel] + * @param {number} [dataIndex] + * @param {Function} cb + */ +function initProps(el, props, animatableModel, dataIndex, cb) { + animateOrSetProps(false, el, props, animatableModel, dataIndex, cb); +} + +/** + * Get transform matrix of target (param target), + * in coordinate of its ancestor (param ancestor) + * + * @param {module:zrender/mixin/Transformable} target + * @param {module:zrender/mixin/Transformable} [ancestor] + */ +function getTransform(target, ancestor) { + var mat = identity([]); + + while (target && target !== ancestor) { + mul$1(mat, target.getLocalTransform(), mat); + target = target.parent; + } + + return mat; +} + +/** + * Apply transform to an vertex. + * @param {Array.} target [x, y] + * @param {Array.|TypedArray.|Object} transform Can be: + * + Transform matrix: like [1, 0, 0, 1, 0, 0] + * + {position, rotation, scale}, the same as `zrender/Transformable`. + * @param {boolean=} invert Whether use invert matrix. + * @return {Array.} [x, y] + */ +function applyTransform$1(target, transform, invert$$1) { + if (transform && !isArrayLike(transform)) { + transform = Transformable.getLocalTransform(transform); + } + + if (invert$$1) { + transform = invert([], transform); + } + return applyTransform([], target, transform); +} + +/** + * @param {string} direction 'left' 'right' 'top' 'bottom' + * @param {Array.} transform Transform matrix: like [1, 0, 0, 1, 0, 0] + * @param {boolean=} invert Whether use invert matrix. + * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom' + */ +function transformDirection(direction, transform, invert$$1) { + + // Pick a base, ensure that transform result will not be (0, 0). + var hBase = (transform[4] === 0 || transform[5] === 0 || transform[0] === 0) + ? 1 : Math.abs(2 * transform[4] / transform[0]); + var vBase = (transform[4] === 0 || transform[5] === 0 || transform[2] === 0) + ? 1 : Math.abs(2 * transform[4] / transform[2]); + + var vertex = [ + direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, + direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0 + ]; + + vertex = applyTransform$1(vertex, transform, invert$$1); + + return Math.abs(vertex[0]) > Math.abs(vertex[1]) + ? (vertex[0] > 0 ? 'right' : 'left') + : (vertex[1] > 0 ? 'bottom' : 'top'); +} + +/** + * Apply group transition animation from g1 to g2. + * If no animatableModel, no animation. + */ +function groupTransition(g1, g2, animatableModel, cb) { + if (!g1 || !g2) { + return; + } + + function getElMap(g) { + var elMap = {}; + g.traverse(function (el) { + if (!el.isGroup && el.anid) { + elMap[el.anid] = el; + } + }); + return elMap; + } + function getAnimatableProps(el) { + var obj = { + position: clone$1(el.position), + rotation: el.rotation + }; + if (el.shape) { + obj.shape = extend({}, el.shape); + } + return obj; + } + var elMap1 = getElMap(g1); + + g2.traverse(function (el) { + if (!el.isGroup && el.anid) { + var oldEl = elMap1[el.anid]; + if (oldEl) { + var newProp = getAnimatableProps(el); + el.attr(getAnimatableProps(oldEl)); + updateProps(el, newProp, animatableModel, el.dataIndex); + } + // else { + // if (el.previousProps) { + // graphic.updateProps + // } + // } + } + }); +} + +/** + * @param {Array.>} points Like: [[23, 44], [53, 66], ...] + * @param {Object} rect {x, y, width, height} + * @return {Array.>} A new clipped points. + */ +function clipPointsByRect(points, rect) { + // FIXME: this way migth be incorrect when grpahic clipped by a corner. + // and when element have border. + return map(points, function (point) { + var x = point[0]; + x = mathMax$1(x, rect.x); + x = mathMin$1(x, rect.x + rect.width); + var y = point[1]; + y = mathMax$1(y, rect.y); + y = mathMin$1(y, rect.y + rect.height); + return [x, y]; + }); +} + +/** + * @param {Object} targetRect {x, y, width, height} + * @param {Object} rect {x, y, width, height} + * @return {Object} A new clipped rect. If rect size are negative, return undefined. + */ +function clipRectByRect(targetRect, rect) { + var x = mathMax$1(targetRect.x, rect.x); + var x2 = mathMin$1(targetRect.x + targetRect.width, rect.x + rect.width); + var y = mathMax$1(targetRect.y, rect.y); + var y2 = mathMin$1(targetRect.y + targetRect.height, rect.y + rect.height); + + // If the total rect is cliped, nothing, including the border, + // should be painted. So return undefined. + if (x2 >= x && y2 >= y) { + return { + x: x, + y: y, + width: x2 - x, + height: y2 - y + }; + } +} + +/** + * @param {string} iconStr Support 'image://' or 'path://' or direct svg path. + * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`. + * @param {Object} [rect] {x, y, width, height} + * @return {module:zrender/Element} Icon path or image element. + */ +function createIcon(iconStr, opt, rect) { + opt = extend({rectHover: true}, opt); + var style = opt.style = {strokeNoScale: true}; + rect = rect || {x: -1, y: -1, width: 2, height: 2}; + + if (iconStr) { + return iconStr.indexOf('image://') === 0 + ? ( + style.image = iconStr.slice(8), + defaults(style, rect), + new ZImage(opt) + ) + : ( + makePath( + iconStr.replace('path://', ''), + opt, + rect, + 'center' + ) + ); + } +} + + + + +var graphic = (Object.freeze || Object)({ + extendShape: extendShape, + extendPath: extendPath, + makePath: makePath, + makeImage: makeImage, + mergePath: mergePath, + resizePath: resizePath, + subPixelOptimizeLine: subPixelOptimizeLine, + subPixelOptimizeRect: subPixelOptimizeRect, + subPixelOptimize: subPixelOptimize, + setElementHoverStyle: setElementHoverStyle, + isInEmphasis: isInEmphasis, + setHoverStyle: setHoverStyle, + setAsHoverStyleTrigger: setAsHoverStyleTrigger, + setLabelStyle: setLabelStyle, + setTextStyle: setTextStyle, + setText: setText, + getFont: getFont, + updateProps: updateProps, + initProps: initProps, + getTransform: getTransform, + applyTransform: applyTransform$1, + transformDirection: transformDirection, + groupTransition: groupTransition, + clipPointsByRect: clipPointsByRect, + clipRectByRect: clipRectByRect, + createIcon: createIcon, + Group: Group, + Image: ZImage, + Text: Text, + Circle: Circle, + Sector: Sector, + Ring: Ring, + Polygon: Polygon, + Polyline: Polyline, + Rect: Rect, + Line: Line, + BezierCurve: BezierCurve, + Arc: Arc, + IncrementalDisplayable: IncrementalDisplayble, + CompoundPath: CompoundPath, + LinearGradient: LinearGradient, + RadialGradient: RadialGradient, + BoundingRect: BoundingRect +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PATH_COLOR = ['textStyle', 'color']; + +var textStyleMixin = { + /** + * Get color property or get color from option.textStyle.color + * @param {boolean} [isEmphasis] + * @return {string} + */ + getTextColor: function (isEmphasis) { + var ecModel = this.ecModel; + return this.getShallow('color') + || ( + (!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null + ); + }, + + /** + * Create font string from fontStyle, fontWeight, fontSize, fontFamily + * @return {string} + */ + getFont: function () { + return getFont({ + fontStyle: this.getShallow('fontStyle'), + fontWeight: this.getShallow('fontWeight'), + fontSize: this.getShallow('fontSize'), + fontFamily: this.getShallow('fontFamily') + }, this.ecModel); + }, + + getTextRect: function (text) { + return getBoundingRect( + text, + this.getFont(), + this.getShallow('align'), + this.getShallow('verticalAlign') || this.getShallow('baseline'), + this.getShallow('padding'), + this.getShallow('rich'), + this.getShallow('truncateText') + ); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var getItemStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['stroke', 'borderColor'], + ['lineWidth', 'borderWidth'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'], + ['textPosition'], + ['textAlign'] + ] +); + +var itemStyleMixin = { + getItemStyle: function (excludes, includes) { + var style = getItemStyle(this, excludes, includes); + var lineDash = this.getBorderLineDash(); + lineDash && (style.lineDash = lineDash); + return style; + }, + + getBorderLineDash: function () { + var lineType = this.get('borderType'); + return (lineType === 'solid' || lineType == null) ? null + : (lineType === 'dashed' ? [5, 5] : [1, 1]); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/model/Model + */ + +var mixin$1 = mixin; +var inner = makeInner(); + +/** + * @alias module:echarts/model/Model + * @constructor + * @param {Object} option + * @param {module:echarts/model/Model} [parentModel] + * @param {module:echarts/model/Global} [ecModel] + */ +function Model(option, parentModel, ecModel) { + /** + * @type {module:echarts/model/Model} + * @readOnly + */ + this.parentModel = parentModel; + + /** + * @type {module:echarts/model/Global} + * @readOnly + */ + this.ecModel = ecModel; + + /** + * @type {Object} + * @protected + */ + this.option = option; + + // Simple optimization + // if (this.init) { + // if (arguments.length <= 4) { + // this.init(option, parentModel, ecModel, extraOpt); + // } + // else { + // this.init.apply(this, arguments); + // } + // } +} + +Model.prototype = { + + constructor: Model, + + /** + * Model 的初始化函数 + * @param {Object} option + */ + init: null, + + /** + * 从新的 Option merge + */ + mergeOption: function (option) { + merge(this.option, option, true); + }, + + /** + * @param {string|Array.} path + * @param {boolean} [ignoreParent=false] + * @return {*} + */ + get: function (path, ignoreParent) { + if (path == null) { + return this.option; + } + + return doGet( + this.option, + this.parsePath(path), + !ignoreParent && getParent(this, path) + ); + }, + + /** + * @param {string} key + * @param {boolean} [ignoreParent=false] + * @return {*} + */ + getShallow: function (key, ignoreParent) { + var option = this.option; + + var val = option == null ? option : option[key]; + var parentModel = !ignoreParent && getParent(this, key); + if (val == null && parentModel) { + val = parentModel.getShallow(key); + } + return val; + }, + + /** + * @param {string|Array.} [path] + * @param {module:echarts/model/Model} [parentModel] + * @return {module:echarts/model/Model} + */ + getModel: function (path, parentModel) { + var obj = path == null + ? this.option + : doGet(this.option, path = this.parsePath(path)); + + var thisParentModel; + parentModel = parentModel || ( + (thisParentModel = getParent(this, path)) + && thisParentModel.getModel(path) + ); + + return new Model(obj, parentModel, this.ecModel); + }, + + /** + * If model has option + */ + isEmpty: function () { + return this.option == null; + }, + + restoreData: function () {}, + + // Pending + clone: function () { + var Ctor = this.constructor; + return new Ctor(clone(this.option)); + }, + + setReadOnly: function (properties) { + // clazzUtil.setReadOnly(this, properties); + }, + + // If path is null/undefined, return null/undefined. + parsePath: function (path) { + if (typeof path === 'string') { + path = path.split('.'); + } + return path; + }, + + /** + * @param {Function} getParentMethod + * param {Array.|string} path + * return {module:echarts/model/Model} + */ + customizeGetParent: function (getParentMethod) { + inner(this).getParent = getParentMethod; + }, + + isAnimationEnabled: function () { + if (!env$1.node) { + if (this.option.animation != null) { + return !!this.option.animation; + } + else if (this.parentModel) { + return this.parentModel.isAnimationEnabled(); + } + } + } + +}; + +function doGet(obj, pathArr, parentModel) { + for (var i = 0; i < pathArr.length; i++) { + // Ignore empty + if (!pathArr[i]) { + continue; + } + // obj could be number/string/... (like 0) + obj = (obj && typeof obj === 'object') ? obj[pathArr[i]] : null; + if (obj == null) { + break; + } + } + if (obj == null && parentModel) { + obj = parentModel.get(pathArr); + } + return obj; +} + +// `path` can be null/undefined +function getParent(model, path) { + var getParentMethod = inner(model).getParent; + return getParentMethod ? getParentMethod.call(model, path) : model.parentModel; +} + +// Enable Model.extend. +enableClassExtend(Model); +enableClassCheck(Model); + +mixin$1(Model, lineStyleMixin); +mixin$1(Model, areaStyleMixin); +mixin$1(Model, textStyleMixin); +mixin$1(Model, itemStyleMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var base = 0; + +/** + * @public + * @param {string} type + * @return {string} + */ +function getUID(type) { + // Considering the case of crossing js context, + // use Math.random to make id as unique as possible. + return [(type || ''), base++, Math.random().toFixed(5)].join('_'); +} + +/** + * @inner + */ +function enableSubTypeDefaulter(entity) { + + var subTypeDefaulters = {}; + + entity.registerSubTypeDefaulter = function (componentType, defaulter) { + componentType = parseClassType$1(componentType); + subTypeDefaulters[componentType.main] = defaulter; + }; + + entity.determineSubType = function (componentType, option) { + var type = option.type; + if (!type) { + var componentTypeMain = parseClassType$1(componentType).main; + if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) { + type = subTypeDefaulters[componentTypeMain](option); + } + } + return type; + }; + + return entity; +} + +/** + * Topological travel on Activity Network (Activity On Vertices). + * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis']. + * + * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology. + * + * If there is circle dependencey, Error will be thrown. + * + */ +function enableTopologicalTravel(entity, dependencyGetter) { + + /** + * @public + * @param {Array.} targetNameList Target Component type list. + * Can be ['aa', 'bb', 'aa.xx'] + * @param {Array.} fullNameList By which we can build dependency graph. + * @param {Function} callback Params: componentType, dependencies. + * @param {Object} context Scope of callback. + */ + entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) { + if (!targetNameList.length) { + return; + } + + var result = makeDepndencyGraph(fullNameList); + var graph = result.graph; + var stack = result.noEntryList; + + var targetNameSet = {}; + each$1(targetNameList, function (name) { + targetNameSet[name] = true; + }); + + while (stack.length) { + var currComponentType = stack.pop(); + var currVertex = graph[currComponentType]; + var isInTargetNameSet = !!targetNameSet[currComponentType]; + if (isInTargetNameSet) { + callback.call(context, currComponentType, currVertex.originalDeps.slice()); + delete targetNameSet[currComponentType]; + } + each$1( + currVertex.successor, + isInTargetNameSet ? removeEdgeAndAdd : removeEdge + ); + } + + each$1(targetNameSet, function () { + throw new Error('Circle dependency may exists'); + }); + + function removeEdge(succComponentType) { + graph[succComponentType].entryCount--; + if (graph[succComponentType].entryCount === 0) { + stack.push(succComponentType); + } + } + + // Consider this case: legend depends on series, and we call + // chart.setOption({series: [...]}), where only series is in option. + // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will + // not be called, but only sereis.mergeOption is called. Thus legend + // have no chance to update its local record about series (like which + // name of series is available in legend). + function removeEdgeAndAdd(succComponentType) { + targetNameSet[succComponentType] = true; + removeEdge(succComponentType); + } + }; + + /** + * DepndencyGraph: {Object} + * key: conponentType, + * value: { + * successor: [conponentTypes...], + * originalDeps: [conponentTypes...], + * entryCount: {number} + * } + */ + function makeDepndencyGraph(fullNameList) { + var graph = {}; + var noEntryList = []; + + each$1(fullNameList, function (name) { + + var thisItem = createDependencyGraphItem(graph, name); + var originalDeps = thisItem.originalDeps = dependencyGetter(name); + + var availableDeps = getAvailableDependencies(originalDeps, fullNameList); + thisItem.entryCount = availableDeps.length; + if (thisItem.entryCount === 0) { + noEntryList.push(name); + } + + each$1(availableDeps, function (dependentName) { + if (indexOf(thisItem.predecessor, dependentName) < 0) { + thisItem.predecessor.push(dependentName); + } + var thatItem = createDependencyGraphItem(graph, dependentName); + if (indexOf(thatItem.successor, dependentName) < 0) { + thatItem.successor.push(name); + } + }); + }); + + return {graph: graph, noEntryList: noEntryList}; + } + + function createDependencyGraphItem(graph, name) { + if (!graph[name]) { + graph[name] = {predecessor: [], successor: []}; + } + return graph[name]; + } + + function getAvailableDependencies(originalDeps, fullNameList) { + var availableDeps = []; + each$1(originalDeps, function (dep) { + indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep); + }); + return availableDeps; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var RADIAN_EPSILON = 1e-4; + +function _trim(str) { + return str.replace(/^\s+/, '').replace(/\s+$/, ''); +} + +/** + * Linear mapping a value from domain to range + * @memberOf module:echarts/util/number + * @param {(number|Array.)} val + * @param {Array.} domain Domain extent domain[0] can be bigger than domain[1] + * @param {Array.} range Range extent range[0] can be bigger than range[1] + * @param {boolean} clamp + * @return {(number|Array.} + */ +function linearMap(val, domain, range, clamp) { + var subDomain = domain[1] - domain[0]; + var subRange = range[1] - range[0]; + + if (subDomain === 0) { + return subRange === 0 + ? range[0] + : (range[0] + range[1]) / 2; + } + + // Avoid accuracy problem in edge, such as + // 146.39 - 62.83 === 83.55999999999999. + // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError + // It is a little verbose for efficiency considering this method + // is a hotspot. + if (clamp) { + if (subDomain > 0) { + if (val <= domain[0]) { + return range[0]; + } + else if (val >= domain[1]) { + return range[1]; + } + } + else { + if (val >= domain[0]) { + return range[0]; + } + else if (val <= domain[1]) { + return range[1]; + } + } + } + else { + if (val === domain[0]) { + return range[0]; + } + if (val === domain[1]) { + return range[1]; + } + } + + return (val - domain[0]) / subDomain * subRange + range[0]; +} + +/** + * Convert a percent string to absolute number. + * Returns NaN if percent is not a valid string or number + * @memberOf module:echarts/util/number + * @param {string|number} percent + * @param {number} all + * @return {number} + */ +function parsePercent$1(percent, all) { + switch (percent) { + case 'center': + case 'middle': + percent = '50%'; + break; + case 'left': + case 'top': + percent = '0%'; + break; + case 'right': + case 'bottom': + percent = '100%'; + break; + } + if (typeof percent === 'string') { + if (_trim(percent).match(/%$/)) { + return parseFloat(percent) / 100 * all; + } + + return parseFloat(percent); + } + + return percent == null ? NaN : +percent; +} + +/** + * (1) Fix rounding error of float numbers. + * (2) Support return string to avoid scientific notation like '3.5e-7'. + * + * @param {number} x + * @param {number} [precision] + * @param {boolean} [returnStr] + * @return {number|string} + */ +function round$1(x, precision, returnStr) { + if (precision == null) { + precision = 10; + } + // Avoid range error + precision = Math.min(Math.max(0, precision), 20); + x = (+x).toFixed(precision); + return returnStr ? x : +x; +} + +function asc(arr) { + arr.sort(function (a, b) { + return a - b; + }); + return arr; +} + +/** + * Get precision + * @param {number} val + */ +function getPrecision(val) { + val = +val; + if (isNaN(val)) { + return 0; + } + // It is much faster than methods converting number to string as follows + // var tmp = val.toString(); + // return tmp.length - 1 - tmp.indexOf('.'); + // especially when precision is low + var e = 1; + var count = 0; + while (Math.round(val * e) / e !== val) { + e *= 10; + count++; + } + return count; +} + +/** + * @param {string|number} val + * @return {number} + */ +function getPrecisionSafe(val) { + var str = val.toString(); + + // Consider scientific notation: '3.4e-12' '3.4e+12' + var eIndex = str.indexOf('e'); + if (eIndex > 0) { + var precision = +str.slice(eIndex + 1); + return precision < 0 ? -precision : 0; + } + else { + var dotIndex = str.indexOf('.'); + return dotIndex < 0 ? 0 : str.length - 1 - dotIndex; + } +} + +/** + * Minimal dicernible data precisioin according to a single pixel. + * + * @param {Array.} dataExtent + * @param {Array.} pixelExtent + * @return {number} precision + */ +function getPixelPrecision(dataExtent, pixelExtent) { + var log = Math.log; + var LN10 = Math.LN10; + var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10); + var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); + // toFixed() digits argument must be between 0 and 20. + var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20); + return !isFinite(precision) ? 20 : precision; +} + +/** + * Get a data of given precision, assuring the sum of percentages + * in valueList is 1. + * The largest remainer method is used. + * https://en.wikipedia.org/wiki/Largest_remainder_method + * + * @param {Array.} valueList a list of all data + * @param {number} idx index of the data to be processed in valueList + * @param {number} precision integer number showing digits of precision + * @return {number} percent ranging from 0 to 100 + */ +function getPercentWithPrecision(valueList, idx, precision) { + if (!valueList[idx]) { + return 0; + } + + var sum = reduce(valueList, function (acc, val) { + return acc + (isNaN(val) ? 0 : val); + }, 0); + if (sum === 0) { + return 0; + } + + var digits = Math.pow(10, precision); + var votesPerQuota = map(valueList, function (val) { + return (isNaN(val) ? 0 : val) / sum * digits * 100; + }); + var targetSeats = digits * 100; + + var seats = map(votesPerQuota, function (votes) { + // Assign automatic seats. + return Math.floor(votes); + }); + var currentSum = reduce(seats, function (acc, val) { + return acc + val; + }, 0); + + var remainder = map(votesPerQuota, function (votes, idx) { + return votes - seats[idx]; + }); + + // Has remainding votes. + while (currentSum < targetSeats) { + // Find next largest remainder. + var max = Number.NEGATIVE_INFINITY; + var maxId = null; + for (var i = 0, len = remainder.length; i < len; ++i) { + if (remainder[i] > max) { + max = remainder[i]; + maxId = i; + } + } + + // Add a vote to max remainder. + ++seats[maxId]; + remainder[maxId] = 0; + ++currentSum; + } + + return seats[idx] / digits; +} + +// Number.MAX_SAFE_INTEGER, ie do not support. +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * To 0 - 2 * PI, considering negative radian. + * @param {number} radian + * @return {number} + */ +function remRadian(radian) { + var pi2 = Math.PI * 2; + return (radian % pi2 + pi2) % pi2; +} + +/** + * @param {type} radian + * @return {boolean} + */ +function isRadianAroundZero(val) { + return val > -RADIAN_EPSILON && val < RADIAN_EPSILON; +} + +/* eslint-disable */ +var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; // jshint ignore:line +/* eslint-enable */ + +/** + * @param {string|Date|number} value These values can be accepted: + * + An instance of Date, represent a time in its own time zone. + * + Or string in a subset of ISO 8601, only including: + * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06', + * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123', + * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00', + * all of which will be treated as local time if time zone is not specified + * (see ). + * + Or other string format, including (all of which will be treated as loacal time): + * '2012', '2012-3-1', '2012/3/1', '2012/03/01', + * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123' + * + a timestamp, which represent a time in UTC. + * @return {Date} date + */ +function parseDate(value) { + if (value instanceof Date) { + return value; + } + else if (typeof value === 'string') { + // Different browsers parse date in different way, so we parse it manually. + // Some other issues: + // new Date('1970-01-01') is UTC, + // new Date('1970/01/01') and new Date('1970-1-01') is local. + // See issue #3623 + var match = TIME_REG.exec(value); + + if (!match) { + // return Invalid Date. + return new Date(NaN); + } + + // Use local time when no timezone offset specifed. + if (!match[8]) { + // match[n] can only be string or undefined. + // But take care of '12' + 1 => '121'. + return new Date( + +match[1], + +(match[2] || 1) - 1, + +match[3] || 1, + +match[4] || 0, + +(match[5] || 0), + +match[6] || 0, + +match[7] || 0 + ); + } + // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time, + // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment). + // For example, system timezone is set as "Time Zone: America/Toronto", + // then these code will get different result: + // `new Date(1478411999999).getTimezoneOffset(); // get 240` + // `new Date(1478412000000).getTimezoneOffset(); // get 300` + // So we should not use `new Date`, but use `Date.UTC`. + else { + var hour = +match[4] || 0; + if (match[8].toUpperCase() !== 'Z') { + hour -= match[8].slice(0, 3); + } + return new Date(Date.UTC( + +match[1], + +(match[2] || 1) - 1, + +match[3] || 1, + hour, + +(match[5] || 0), + +match[6] || 0, + +match[7] || 0 + )); + } + } + else if (value == null) { + return new Date(NaN); + } + + return new Date(Math.round(value)); +} + +/** + * Quantity of a number. e.g. 0.1, 1, 10, 100 + * + * @param {number} val + * @return {number} + */ +function quantity(val) { + return Math.pow(10, quantityExponent(val)); +} + +function quantityExponent(val) { + return Math.floor(Math.log(val) / Math.LN10); +} + +/** + * find a “nice” number approximately equal to x. Round the number if round = true, + * take ceiling if round = false. The primary observation is that the “nicest” + * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers. + * + * See "Nice Numbers for Graph Labels" of Graphic Gems. + * + * @param {number} val Non-negative value. + * @param {boolean} round + * @return {number} + */ +function nice(val, round) { + var exponent = quantityExponent(val); + var exp10 = Math.pow(10, exponent); + var f = val / exp10; // 1 <= f < 10 + var nf; + if (round) { + if (f < 1.5) { + nf = 1; + } + else if (f < 2.5) { + nf = 2; + } + else if (f < 4) { + nf = 3; + } + else if (f < 7) { + nf = 5; + } + else { + nf = 10; + } + } + else { + if (f < 1) { + nf = 1; + } + else if (f < 2) { + nf = 2; + } + else if (f < 3) { + nf = 3; + } + else if (f < 5) { + nf = 5; + } + else { + nf = 10; + } + } + val = nf * exp10; + + // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754). + // 20 is the uppper bound of toFixed. + return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val; +} + +/** + * BSD 3-Clause + * + * Copyright (c) 2010-2015, Michael Bostock + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * The name Michael Bostock may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @see + * @see + * @param {Array.} ascArr + */ +function quantile(ascArr, p) { + var H = (ascArr.length - 1) * p + 1; + var h = Math.floor(H); + var v = +ascArr[h - 1]; + var e = H - h; + return e ? v + e * (ascArr[h] - v) : v; +} + +/** + * Order intervals asc, and split them when overlap. + * expect(numberUtil.reformIntervals([ + * {interval: [18, 62], close: [1, 1]}, + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [1, 1]}, + * {interval: [62, 150], close: [1, 1]}, + * {interval: [106, 150], close: [1, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ])).toEqual([ + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [0, 1]}, + * {interval: [18, 62], close: [0, 1]}, + * {interval: [62, 150], close: [0, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ]); + * @param {Array.} list, where `close` mean open or close + * of the interval, and Infinity can be used. + * @return {Array.} The origin list, which has been reformed. + */ +function reformIntervals(list) { + list.sort(function (a, b) { + return littleThan(a, b, 0) ? -1 : 1; + }); + + var curr = -Infinity; + var currClose = 1; + for (var i = 0; i < list.length;) { + var interval = list[i].interval; + var close = list[i].close; + + for (var lg = 0; lg < 2; lg++) { + if (interval[lg] <= curr) { + interval[lg] = curr; + close[lg] = !lg ? 1 - currClose : 1; + } + curr = interval[lg]; + currClose = close[lg]; + } + + if (interval[0] === interval[1] && close[0] * close[1] !== 1) { + list.splice(i, 1); + } + else { + i++; + } + } + + return list; + + function littleThan(a, b, lg) { + return a.interval[lg] < b.interval[lg] + || ( + a.interval[lg] === b.interval[lg] + && ( + (a.close[lg] - b.close[lg] === (!lg ? 1 : -1)) + || (!lg && littleThan(a, b, 1)) + ) + ); + } +} + +/** + * parseFloat NaNs numeric-cast false positives (null|true|false|"") + * ...but misinterprets leading-number strings, particularly hex literals ("0x...") + * subtraction forces infinities to NaN + * + * @param {*} v + * @return {boolean} + */ +function isNumeric(v) { + return v - parseFloat(v) >= 0; +} + + +var number = (Object.freeze || Object)({ + linearMap: linearMap, + parsePercent: parsePercent$1, + round: round$1, + asc: asc, + getPrecision: getPrecision, + getPrecisionSafe: getPrecisionSafe, + getPixelPrecision: getPixelPrecision, + getPercentWithPrecision: getPercentWithPrecision, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER, + remRadian: remRadian, + isRadianAroundZero: isRadianAroundZero, + parseDate: parseDate, + quantity: quantity, + nice: nice, + quantile: quantile, + reformIntervals: reformIntervals, + isNumeric: isNumeric +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// import Text from 'zrender/src/graphic/Text'; + +/** + * 每三位默认加,格式化 + * @param {string|number} x + * @return {string} + */ +function addCommas(x) { + if (isNaN(x)) { + return '-'; + } + x = (x + '').split('.'); + return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + + (x.length > 1 ? ('.' + x[1]) : ''); +} + +/** + * @param {string} str + * @param {boolean} [upperCaseFirst=false] + * @return {string} str + */ +function toCamelCase(str, upperCaseFirst) { + str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) { + return group1.toUpperCase(); + }); + + if (upperCaseFirst && str) { + str = str.charAt(0).toUpperCase() + str.slice(1); + } + + return str; +} + +var normalizeCssArray$1 = normalizeCssArray; + + +var replaceReg = /([&<>"'])/g; +var replaceMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''' +}; + +function encodeHTML(source) { + return source == null + ? '' + : (source + '').replace(replaceReg, function (str, c) { + return replaceMap[c]; + }); +} + +var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; + +var wrapVar = function (varName, seriesIdx) { + return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}'; +}; + +/** + * Template formatter + * @param {string} tpl + * @param {Array.|Object} paramsList + * @param {boolean} [encode=false] + * @return {string} + */ +function formatTpl(tpl, paramsList, encode) { + if (!isArray(paramsList)) { + paramsList = [paramsList]; + } + var seriesLen = paramsList.length; + if (!seriesLen) { + return ''; + } + + var $vars = paramsList[0].$vars || []; + for (var i = 0; i < $vars.length; i++) { + var alias = TPL_VAR_ALIAS[i]; + tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0)); + } + for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) { + for (var k = 0; k < $vars.length; k++) { + var val = paramsList[seriesIdx][$vars[k]]; + tpl = tpl.replace( + wrapVar(TPL_VAR_ALIAS[k], seriesIdx), + encode ? encodeHTML(val) : val + ); + } + } + + return tpl; +} + +/** + * simple Template formatter + * + * @param {string} tpl + * @param {Object} param + * @param {boolean} [encode=false] + * @return {string} + */ +function formatTplSimple(tpl, param, encode) { + each$1(param, function (value, key) { + tpl = tpl.replace( + '{' + key + '}', + encode ? encodeHTML(value) : value + ); + }); + return tpl; +} + +/** + * @param {Object|string} [opt] If string, means color. + * @param {string} [opt.color] + * @param {string} [opt.extraCssText] + * @param {string} [opt.type='item'] 'item' or 'subItem' + * @param {string} [opt.renderMode='html'] render mode of tooltip, 'html' or 'richText' + * @param {string} [opt.markerId='X'] id name for marker. If only one marker is in a rich text, this can be omitted. + * @return {string} + */ +function getTooltipMarker(opt, extraCssText) { + opt = isString(opt) ? {color: opt, extraCssText: extraCssText} : (opt || {}); + var color = opt.color; + var type = opt.type; + var extraCssText = opt.extraCssText; + var renderMode = opt.renderMode || 'html'; + var markerId = opt.markerId || 'X'; + + if (!color) { + return ''; + } + + if (renderMode === 'html') { + return type === 'subItem' + ? '' + : ''; + } + else { + // Space for rich element marker + return { + renderMode: renderMode, + content: '{marker' + markerId + '|} ', + style: { + color: color + } + }; + } +} + +function pad(str, len) { + str += ''; + return '0000'.substr(0, len - str.length) + str; +} + + +/** + * ISO Date format + * @param {string} tpl + * @param {number} value + * @param {boolean} [isUTC=false] Default in local time. + * see `module:echarts/scale/Time` + * and `module:echarts/util/number#parseDate`. + * @inner + */ +function formatTime(tpl, value, isUTC) { + if (tpl === 'week' + || tpl === 'month' + || tpl === 'quarter' + || tpl === 'half-year' + || tpl === 'year' + ) { + tpl = 'MM-dd\nyyyy'; + } + + var date = parseDate(value); + var utc = isUTC ? 'UTC' : ''; + var y = date['get' + utc + 'FullYear'](); + var M = date['get' + utc + 'Month']() + 1; + var d = date['get' + utc + 'Date'](); + var h = date['get' + utc + 'Hours'](); + var m = date['get' + utc + 'Minutes'](); + var s = date['get' + utc + 'Seconds'](); + var S = date['get' + utc + 'Milliseconds'](); + + tpl = tpl.replace('MM', pad(M, 2)) + .replace('M', M) + .replace('yyyy', y) + .replace('yy', y % 100) + .replace('dd', pad(d, 2)) + .replace('d', d) + .replace('hh', pad(h, 2)) + .replace('h', h) + .replace('mm', pad(m, 2)) + .replace('m', m) + .replace('ss', pad(s, 2)) + .replace('s', s) + .replace('SSS', pad(S, 3)); + + return tpl; +} + +/** + * Capital first + * @param {string} str + * @return {string} + */ +function capitalFirst(str) { + return str ? str.charAt(0).toUpperCase() + str.substr(1) : str; +} + +var truncateText$1 = truncateText; + +var getTextRect = getBoundingRect; + + +var format = (Object.freeze || Object)({ + addCommas: addCommas, + toCamelCase: toCamelCase, + normalizeCssArray: normalizeCssArray$1, + encodeHTML: encodeHTML, + formatTpl: formatTpl, + formatTplSimple: formatTplSimple, + getTooltipMarker: getTooltipMarker, + formatTime: formatTime, + capitalFirst: capitalFirst, + truncateText: truncateText$1, + getTextRect: getTextRect +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Layout helpers for each component positioning + +var each$3 = each$1; + +/** + * @public + */ +var LOCATION_PARAMS = [ + 'left', 'right', 'top', 'bottom', 'width', 'height' +]; + +/** + * @public + */ +var HV_NAMES = [ + ['width', 'left', 'right'], + ['height', 'top', 'bottom'] +]; + +function boxLayout(orient, group, gap, maxWidth, maxHeight) { + var x = 0; + var y = 0; + + if (maxWidth == null) { + maxWidth = Infinity; + } + if (maxHeight == null) { + maxHeight = Infinity; + } + var currentLineMaxSize = 0; + + group.eachChild(function (child, idx) { + var position = child.position; + var rect = child.getBoundingRect(); + var nextChild = group.childAt(idx + 1); + var nextChildRect = nextChild && nextChild.getBoundingRect(); + var nextX; + var nextY; + + if (orient === 'horizontal') { + var moveX = rect.width + (nextChildRect ? (-nextChildRect.x + rect.x) : 0); + nextX = x + moveX; + // Wrap when width exceeds maxWidth or meet a `newline` group + // FIXME compare before adding gap? + if (nextX > maxWidth || child.newline) { + x = 0; + nextX = moveX; + y += currentLineMaxSize + gap; + currentLineMaxSize = rect.height; + } + else { + // FIXME: consider rect.y is not `0`? + currentLineMaxSize = Math.max(currentLineMaxSize, rect.height); + } + } + else { + var moveY = rect.height + (nextChildRect ? (-nextChildRect.y + rect.y) : 0); + nextY = y + moveY; + // Wrap when width exceeds maxHeight or meet a `newline` group + if (nextY > maxHeight || child.newline) { + x += currentLineMaxSize + gap; + y = 0; + nextY = moveY; + currentLineMaxSize = rect.width; + } + else { + currentLineMaxSize = Math.max(currentLineMaxSize, rect.width); + } + } + + if (child.newline) { + return; + } + + position[0] = x; + position[1] = y; + + orient === 'horizontal' + ? (x = nextX + gap) + : (y = nextY + gap); + }); +} + +/** + * VBox or HBox layouting + * @param {string} orient + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var box = boxLayout; + +/** + * VBox layouting + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var vbox = curry(boxLayout, 'vertical'); + +/** + * HBox layouting + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var hbox = curry(boxLayout, 'horizontal'); + +/** + * If x or x2 is not specified or 'center' 'left' 'right', + * the width would be as long as possible. + * If y or y2 is not specified or 'middle' 'top' 'bottom', + * the height would be as long as possible. + * + * @param {Object} positionInfo + * @param {number|string} [positionInfo.x] + * @param {number|string} [positionInfo.y] + * @param {number|string} [positionInfo.x2] + * @param {number|string} [positionInfo.y2] + * @param {Object} containerRect {width, height} + * @param {string|number} margin + * @return {Object} {width, height} + */ +function getAvailableSize(positionInfo, containerRect, margin) { + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + + var x = parsePercent$1(positionInfo.x, containerWidth); + var y = parsePercent$1(positionInfo.y, containerHeight); + var x2 = parsePercent$1(positionInfo.x2, containerWidth); + var y2 = parsePercent$1(positionInfo.y2, containerHeight); + + (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0); + (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth); + (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0); + (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight); + + margin = normalizeCssArray$1(margin || 0); + + return { + width: Math.max(x2 - x - margin[1] - margin[3], 0), + height: Math.max(y2 - y - margin[0] - margin[2], 0) + }; +} + +/** + * Parse position info. + * + * @param {Object} positionInfo + * @param {number|string} [positionInfo.left] + * @param {number|string} [positionInfo.top] + * @param {number|string} [positionInfo.right] + * @param {number|string} [positionInfo.bottom] + * @param {number|string} [positionInfo.width] + * @param {number|string} [positionInfo.height] + * @param {number|string} [positionInfo.aspect] Aspect is width / height + * @param {Object} containerRect + * @param {string|number} [margin] + * + * @return {module:zrender/core/BoundingRect} + */ +function getLayoutRect( + positionInfo, containerRect, margin +) { + margin = normalizeCssArray$1(margin || 0); + + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + + var left = parsePercent$1(positionInfo.left, containerWidth); + var top = parsePercent$1(positionInfo.top, containerHeight); + var right = parsePercent$1(positionInfo.right, containerWidth); + var bottom = parsePercent$1(positionInfo.bottom, containerHeight); + var width = parsePercent$1(positionInfo.width, containerWidth); + var height = parsePercent$1(positionInfo.height, containerHeight); + + var verticalMargin = margin[2] + margin[0]; + var horizontalMargin = margin[1] + margin[3]; + var aspect = positionInfo.aspect; + + // If width is not specified, calculate width from left and right + if (isNaN(width)) { + width = containerWidth - right - horizontalMargin - left; + } + if (isNaN(height)) { + height = containerHeight - bottom - verticalMargin - top; + } + + if (aspect != null) { + // If width and height are not given + // 1. Graph should not exceeds the container + // 2. Aspect must be keeped + // 3. Graph should take the space as more as possible + // FIXME + // Margin is not considered, because there is no case that both + // using margin and aspect so far. + if (isNaN(width) && isNaN(height)) { + if (aspect > containerWidth / containerHeight) { + width = containerWidth * 0.8; + } + else { + height = containerHeight * 0.8; + } + } + + // Calculate width or height with given aspect + if (isNaN(width)) { + width = aspect * height; + } + if (isNaN(height)) { + height = width / aspect; + } + } + + // If left is not specified, calculate left from right and width + if (isNaN(left)) { + left = containerWidth - right - width - horizontalMargin; + } + if (isNaN(top)) { + top = containerHeight - bottom - height - verticalMargin; + } + + // Align left and top + switch (positionInfo.left || positionInfo.right) { + case 'center': + left = containerWidth / 2 - width / 2 - margin[3]; + break; + case 'right': + left = containerWidth - width - horizontalMargin; + break; + } + switch (positionInfo.top || positionInfo.bottom) { + case 'middle': + case 'center': + top = containerHeight / 2 - height / 2 - margin[0]; + break; + case 'bottom': + top = containerHeight - height - verticalMargin; + break; + } + // If something is wrong and left, top, width, height are calculated as NaN + left = left || 0; + top = top || 0; + if (isNaN(width)) { + // Width may be NaN if only one value is given except width + width = containerWidth - horizontalMargin - left - (right || 0); + } + if (isNaN(height)) { + // Height may be NaN if only one value is given except height + height = containerHeight - verticalMargin - top - (bottom || 0); + } + + var rect = new BoundingRect(left + margin[3], top + margin[0], width, height); + rect.margin = margin; + return rect; +} + + +/** + * Position a zr element in viewport + * Group position is specified by either + * {left, top}, {right, bottom} + * If all properties exists, right and bottom will be igonred. + * + * Logic: + * 1. Scale (against origin point in parent coord) + * 2. Rotate (against origin point in parent coord) + * 3. Traslate (with el.position by this method) + * So this method only fixes the last step 'Traslate', which does not affect + * scaling and rotating. + * + * If be called repeatly with the same input el, the same result will be gotten. + * + * @param {module:zrender/Element} el Should have `getBoundingRect` method. + * @param {Object} positionInfo + * @param {number|string} [positionInfo.left] + * @param {number|string} [positionInfo.top] + * @param {number|string} [positionInfo.right] + * @param {number|string} [positionInfo.bottom] + * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw' + * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw' + * @param {Object} containerRect + * @param {string|number} margin + * @param {Object} [opt] + * @param {Array.} [opt.hv=[1,1]] Only horizontal or only vertical. + * @param {Array.} [opt.boundingMode='all'] + * Specify how to calculate boundingRect when locating. + * 'all': Position the boundingRect that is transformed and uioned + * both itself and its descendants. + * This mode simplies confine the elements in the bounding + * of their container (e.g., using 'right: 0'). + * 'raw': Position the boundingRect that is not transformed and only itself. + * This mode is useful when you want a element can overflow its + * container. (Consider a rotated circle needs to be located in a corner.) + * In this mode positionInfo.width/height can only be number. + */ +function positionElement(el, positionInfo, containerRect, margin, opt) { + var h = !opt || !opt.hv || opt.hv[0]; + var v = !opt || !opt.hv || opt.hv[1]; + var boundingMode = opt && opt.boundingMode || 'all'; + + if (!h && !v) { + return; + } + + var rect; + if (boundingMode === 'raw') { + rect = el.type === 'group' + ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) + : el.getBoundingRect(); + } + else { + rect = el.getBoundingRect(); + if (el.needLocalTransform()) { + var transform = el.getLocalTransform(); + // Notice: raw rect may be inner object of el, + // which should not be modified. + rect = rect.clone(); + rect.applyTransform(transform); + } + } + + // The real width and height can not be specified but calculated by the given el. + positionInfo = getLayoutRect( + defaults( + {width: rect.width, height: rect.height}, + positionInfo + ), + containerRect, + margin + ); + + // Because 'tranlate' is the last step in transform + // (see zrender/core/Transformable#getLocalTransform), + // we can just only modify el.position to get final result. + var elPos = el.position; + var dx = h ? positionInfo.x - rect.x : 0; + var dy = v ? positionInfo.y - rect.y : 0; + + el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]); +} + +/** + * @param {Object} option Contains some of the properties in HV_NAMES. + * @param {number} hvIdx 0: horizontal; 1: vertical. + */ +function sizeCalculable(option, hvIdx) { + return option[HV_NAMES[hvIdx][0]] != null + || (option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null); +} + +/** + * Consider Case: + * When defulat option has {left: 0, width: 100}, and we set {right: 0} + * through setOption or media query, using normal zrUtil.merge will cause + * {right: 0} does not take effect. + * + * @example + * ComponentModel.extend({ + * init: function () { + * ... + * var inputPositionParams = layout.getLayoutParams(option); + * this.mergeOption(inputPositionParams); + * }, + * mergeOption: function (newOption) { + * newOption && zrUtil.merge(thisOption, newOption, true); + * layout.mergeLayoutParam(thisOption, newOption); + * } + * }); + * + * @param {Object} targetOption + * @param {Object} newOption + * @param {Object|string} [opt] + * @param {boolean|Array.} [opt.ignoreSize=false] Used for the components + * that width (or height) should not be calculated by left and right (or top and bottom). + */ +function mergeLayoutParam(targetOption, newOption, opt) { + !isObject$1(opt) && (opt = {}); + + var ignoreSize = opt.ignoreSize; + !isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]); + + var hResult = merge$$1(HV_NAMES[0], 0); + var vResult = merge$$1(HV_NAMES[1], 1); + + copy(HV_NAMES[0], targetOption, hResult); + copy(HV_NAMES[1], targetOption, vResult); + + function merge$$1(names, hvIdx) { + var newParams = {}; + var newValueCount = 0; + var merged = {}; + var mergedValueCount = 0; + var enoughParamNumber = 2; + + each$3(names, function (name) { + merged[name] = targetOption[name]; + }); + each$3(names, function (name) { + // Consider case: newOption.width is null, which is + // set by user for removing width setting. + hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]); + hasValue(newParams, name) && newValueCount++; + hasValue(merged, name) && mergedValueCount++; + }); + + if (ignoreSize[hvIdx]) { + // Only one of left/right is premitted to exist. + if (hasValue(newOption, names[1])) { + merged[names[2]] = null; + } + else if (hasValue(newOption, names[2])) { + merged[names[1]] = null; + } + return merged; + } + + // Case: newOption: {width: ..., right: ...}, + // or targetOption: {right: ...} and newOption: {width: ...}, + // There is no conflict when merged only has params count + // little than enoughParamNumber. + if (mergedValueCount === enoughParamNumber || !newValueCount) { + return merged; + } + // Case: newOption: {width: ..., right: ...}, + // Than we can make sure user only want those two, and ignore + // all origin params in targetOption. + else if (newValueCount >= enoughParamNumber) { + return newParams; + } + else { + // Chose another param from targetOption by priority. + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (!hasProp(newParams, name) && hasProp(targetOption, name)) { + newParams[name] = targetOption[name]; + break; + } + } + return newParams; + } + } + + function hasProp(obj, name) { + return obj.hasOwnProperty(name); + } + + function hasValue(obj, name) { + return obj[name] != null && obj[name] !== 'auto'; + } + + function copy(names, target, source) { + each$3(names, function (name) { + target[name] = source[name]; + }); + } +} + +/** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + * @param {Object} source + * @return {Object} Result contains those props. + */ +function getLayoutParams(source) { + return copyLayoutParams({}, source); +} + +/** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + * @param {Object} source + * @return {Object} Result contains those props. + */ +function copyLayoutParams(target, source) { + source && target && each$3(LOCATION_PARAMS, function (name) { + source.hasOwnProperty(name) && (target[name] = source[name]); + }); + return target; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var boxLayoutMixin = { + getBoxLayoutParams: function () { + return { + left: this.get('left'), + top: this.get('top'), + right: this.get('right'), + bottom: this.get('bottom'), + width: this.get('width'), + height: this.get('height') + }; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Component model + * + * @module echarts/model/Component + */ + +var inner$1 = makeInner(); + +/** + * @alias module:echarts/model/Component + * @constructor + * @param {Object} option + * @param {module:echarts/model/Model} parentModel + * @param {module:echarts/model/Model} ecModel + */ +var ComponentModel = Model.extend({ + + type: 'component', + + /** + * @readOnly + * @type {string} + */ + id: '', + + /** + * Because simplified concept is probably better, series.name (or component.name) + * has been having too many resposibilities: + * (1) Generating id (which requires name in option should not be modified). + * (2) As an index to mapping series when merging option or calling API (a name + * can refer to more then one components, which is convinient is some case). + * (3) Display. + * @readOnly + */ + name: '', + + /** + * @readOnly + * @type {string} + */ + mainType: '', + + /** + * @readOnly + * @type {string} + */ + subType: '', + + /** + * @readOnly + * @type {number} + */ + componentIndex: 0, + + /** + * @type {Object} + * @protected + */ + defaultOption: null, + + /** + * @type {module:echarts/model/Global} + * @readOnly + */ + ecModel: null, + + /** + * key: componentType + * value: Component model list, can not be null. + * @type {Object.>} + * @readOnly + */ + dependentModels: [], + + /** + * @type {string} + * @readOnly + */ + uid: null, + + /** + * Support merge layout params. + * Only support 'box' now (left/right/top/bottom/width/height). + * @type {string|Object} Object can be {ignoreSize: true} + * @readOnly + */ + layoutMode: null, + + $constructor: function (option, parentModel, ecModel, extraOpt) { + Model.call(this, option, parentModel, ecModel, extraOpt); + + this.uid = getUID('ec_cpt_model'); + }, + + init: function (option, parentModel, ecModel, extraOpt) { + this.mergeDefaultAndTheme(option, ecModel); + }, + + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(this.mainType)); + merge(option, this.getDefaultOption()); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + mergeOption: function (option, extraOpt) { + merge(this.option, option, true); + + var layoutMode = this.layoutMode; + if (layoutMode) { + mergeLayoutParam(this.option, option, layoutMode); + } + }, + + // Hooker after init or mergeOption + optionUpdated: function (newCptOption, isInit) {}, + + getDefaultOption: function () { + var fields = inner$1(this); + if (!fields.defaultOption) { + var optList = []; + var Class = this.constructor; + while (Class) { + var opt = Class.prototype.defaultOption; + opt && optList.push(opt); + Class = Class.superClass; + } + + var defaultOption = {}; + for (var i = optList.length - 1; i >= 0; i--) { + defaultOption = merge(defaultOption, optList[i], true); + } + fields.defaultOption = defaultOption; + } + return fields.defaultOption; + }, + + getReferringComponents: function (mainType) { + return this.ecModel.queryComponents({ + mainType: mainType, + index: this.get(mainType + 'Index', true), + id: this.get(mainType + 'Id', true) + }); + } + +}); + +// Reset ComponentModel.extend, add preConstruct. +// clazzUtil.enableClassExtend( +// ComponentModel, +// function (option, parentModel, ecModel, extraOpt) { +// // Set dependentModels, componentIndex, name, id, mainType, subType. +// zrUtil.extend(this, extraOpt); + +// this.uid = componentUtil.getUID('componentModel'); + +// // this.setReadOnly([ +// // 'type', 'id', 'uid', 'name', 'mainType', 'subType', +// // 'dependentModels', 'componentIndex' +// // ]); +// } +// ); + +// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement( + ComponentModel, {registerWhenExtend: true} +); +enableSubTypeDefaulter(ComponentModel); + +// Add capability of ComponentModel.topologicalTravel. +enableTopologicalTravel(ComponentModel, getDependencies); + +function getDependencies(componentType) { + var deps = []; + each$1(ComponentModel.getClassesByMainType(componentType), function (Clazz) { + deps = deps.concat(Clazz.prototype.dependencies || []); + }); + + // Ensure main type. + deps = map(deps, function (type) { + return parseClassType$1(type).main; + }); + + // Hack dataset for convenience. + if (componentType !== 'dataset' && indexOf(deps, 'dataset') <= 0) { + deps.unshift('dataset'); + } + + return deps; +} + +mixin(ComponentModel, boxLayoutMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var platform = ''; +// Navigator not exists in node +if (typeof navigator !== 'undefined') { + platform = navigator.platform || ''; +} + +var globalDefault = { + // backgroundColor: 'rgba(0,0,0,0)', + + // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization + // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'], + // Light colors: + // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'], + // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'], + // Dark colors: + color: [ + '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', + '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3' + ], + + gradientColor: ['#f6efa6', '#d88273', '#bf444c'], + + // If xAxis and yAxis declared, grid is created by default. + // grid: {}, + + textStyle: { + // color: '#000', + // decoration: 'none', + // PENDING + fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif', + // fontFamily: 'Arial, Verdana, sans-serif', + fontSize: 12, + fontStyle: 'normal', + fontWeight: 'normal' + }, + + // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/ + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation + // Default is source-over + blendMode: null, + + animation: 'auto', + animationDuration: 1000, + animationDurationUpdate: 300, + animationEasing: 'exponentialOut', + animationEasingUpdate: 'cubicOut', + + animationThreshold: 2000, + // Configuration for progressive/incremental rendering + progressiveThreshold: 3000, + progressive: 400, + + // Threshold of if use single hover layer to optimize. + // It is recommended that `hoverLayerThreshold` is equivalent to or less than + // `progressiveThreshold`, otherwise hover will cause restart of progressive, + // which is unexpected. + // see example . + hoverLayerThreshold: 3000, + + // See: module:echarts/scale/Time + useUTC: false +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$2 = makeInner(); + +function getNearestColorPalette(colors, requestColorNum) { + var paletteNum = colors.length; + // TODO colors must be in order + for (var i = 0; i < paletteNum; i++) { + if (colors[i].length > requestColorNum) { + return colors[i]; + } + } + return colors[paletteNum - 1]; +} + +var colorPaletteMixin = { + clearColorPalette: function () { + inner$2(this).colorIdx = 0; + inner$2(this).colorNameMap = {}; + }, + + /** + * @param {string} name MUST NOT be null/undefined. Otherwise call this function + * twise with the same parameters will get different result. + * @param {Object} [scope=this] + * @param {Object} [requestColorNum] + * @return {string} color string. + */ + getColorFromPalette: function (name, scope, requestColorNum) { + scope = scope || this; + var scopeFields = inner$2(scope); + var colorIdx = scopeFields.colorIdx || 0; + var colorNameMap = scopeFields.colorNameMap = scopeFields.colorNameMap || {}; + // Use `hasOwnProperty` to avoid conflict with Object.prototype. + if (colorNameMap.hasOwnProperty(name)) { + return colorNameMap[name]; + } + var defaultColorPalette = normalizeToArray(this.get('color', true)); + var layeredColorPalette = this.get('colorLayer', true); + var colorPalette = ((requestColorNum == null || !layeredColorPalette) + ? defaultColorPalette : getNearestColorPalette(layeredColorPalette, requestColorNum)); + + // In case can't find in layered color palette. + colorPalette = colorPalette || defaultColorPalette; + + if (!colorPalette || !colorPalette.length) { + return; + } + + var color = colorPalette[colorIdx]; + if (name) { + colorNameMap[name] = color; + } + scopeFields.colorIdx = (colorIdx + 1) % colorPalette.length; + + return color; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Helper for model references. + * There are many manners to refer axis/coordSys. + */ + +// TODO +// merge relevant logic to this file? +// check: "modelHelper" of tooltip and "BrushTargetManager". + +/** + * @return {Object} For example: + * { + * coordSysName: 'cartesian2d', + * coordSysDims: ['x', 'y', ...], + * axisMap: HashMap({ + * x: xAxisModel, + * y: yAxisModel + * }), + * categoryAxisMap: HashMap({ + * x: xAxisModel, + * y: undefined + * }), + * // It also indicate that whether there is category axis. + * firstCategoryDimIndex: 1, + * // To replace user specified encode. + * } + */ +function getCoordSysDefineBySeries(seriesModel) { + var coordSysName = seriesModel.get('coordinateSystem'); + var result = { + coordSysName: coordSysName, + coordSysDims: [], + axisMap: createHashMap(), + categoryAxisMap: createHashMap() + }; + var fetch = fetchers[coordSysName]; + if (fetch) { + fetch(seriesModel, result, result.axisMap, result.categoryAxisMap); + return result; + } +} + +var fetchers = { + + cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) { + var xAxisModel = seriesModel.getReferringComponents('xAxis')[0]; + var yAxisModel = seriesModel.getReferringComponents('yAxis')[0]; + + if (__DEV__) { + if (!xAxisModel) { + throw new Error('xAxis "' + retrieve( + seriesModel.get('xAxisIndex'), + seriesModel.get('xAxisId'), + 0 + ) + '" not found'); + } + if (!yAxisModel) { + throw new Error('yAxis "' + retrieve( + seriesModel.get('xAxisIndex'), + seriesModel.get('yAxisId'), + 0 + ) + '" not found'); + } + } + + result.coordSysDims = ['x', 'y']; + axisMap.set('x', xAxisModel); + axisMap.set('y', yAxisModel); + + if (isCategory(xAxisModel)) { + categoryAxisMap.set('x', xAxisModel); + result.firstCategoryDimIndex = 0; + } + if (isCategory(yAxisModel)) { + categoryAxisMap.set('y', yAxisModel); + result.firstCategoryDimIndex = 1; + } + }, + + singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) { + var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0]; + + if (__DEV__) { + if (!singleAxisModel) { + throw new Error('singleAxis should be specified.'); + } + } + + result.coordSysDims = ['single']; + axisMap.set('single', singleAxisModel); + + if (isCategory(singleAxisModel)) { + categoryAxisMap.set('single', singleAxisModel); + result.firstCategoryDimIndex = 0; + } + }, + + polar: function (seriesModel, result, axisMap, categoryAxisMap) { + var polarModel = seriesModel.getReferringComponents('polar')[0]; + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + + if (__DEV__) { + if (!angleAxisModel) { + throw new Error('angleAxis option not found'); + } + if (!radiusAxisModel) { + throw new Error('radiusAxis option not found'); + } + } + + result.coordSysDims = ['radius', 'angle']; + axisMap.set('radius', radiusAxisModel); + axisMap.set('angle', angleAxisModel); + + if (isCategory(radiusAxisModel)) { + categoryAxisMap.set('radius', radiusAxisModel); + result.firstCategoryDimIndex = 0; + } + if (isCategory(angleAxisModel)) { + categoryAxisMap.set('angle', angleAxisModel); + result.firstCategoryDimIndex = 1; + } + }, + + geo: function (seriesModel, result, axisMap, categoryAxisMap) { + result.coordSysDims = ['lng', 'lat']; + }, + + parallel: function (seriesModel, result, axisMap, categoryAxisMap) { + var ecModel = seriesModel.ecModel; + var parallelModel = ecModel.getComponent( + 'parallel', seriesModel.get('parallelIndex') + ); + var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice(); + + each$1(parallelModel.parallelAxisIndex, function (axisIndex, index) { + var axisModel = ecModel.getComponent('parallelAxis', axisIndex); + var axisDim = coordSysDims[index]; + axisMap.set(axisDim, axisModel); + + if (isCategory(axisModel) && result.firstCategoryDimIndex == null) { + categoryAxisMap.set(axisDim, axisModel); + result.firstCategoryDimIndex = index; + } + }); + } +}; + +function isCategory(axisModel) { + return axisModel.get('type') === 'category'; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Avoid typo. +var SOURCE_FORMAT_ORIGINAL = 'original'; +var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows'; +var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows'; +var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns'; +var SOURCE_FORMAT_UNKNOWN = 'unknown'; +// ??? CHANGE A NAME +var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray'; + +var SERIES_LAYOUT_BY_COLUMN = 'column'; +var SERIES_LAYOUT_BY_ROW = 'row'; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * [sourceFormat] + * + * + "original": + * This format is only used in series.data, where + * itemStyle can be specified in data item. + * + * + "arrayRows": + * [ + * ['product', 'score', 'amount'], + * ['Matcha Latte', 89.3, 95.8], + * ['Milk Tea', 92.1, 89.4], + * ['Cheese Cocoa', 94.4, 91.2], + * ['Walnut Brownie', 85.4, 76.9] + * ] + * + * + "objectRows": + * [ + * {product: 'Matcha Latte', score: 89.3, amount: 95.8}, + * {product: 'Milk Tea', score: 92.1, amount: 89.4}, + * {product: 'Cheese Cocoa', score: 94.4, amount: 91.2}, + * {product: 'Walnut Brownie', score: 85.4, amount: 76.9} + * ] + * + * + "keyedColumns": + * { + * 'product': ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'], + * 'count': [823, 235, 1042, 988], + * 'score': [95.8, 81.4, 91.2, 76.9] + * } + * + * + "typedArray" + * + * + "unknown" + */ + +/** + * @constructor + * @param {Object} fields + * @param {string} fields.sourceFormat + * @param {Array|Object} fields.fromDataset + * @param {Array|Object} [fields.data] + * @param {string} [seriesLayoutBy='column'] + * @param {Array.} [dimensionsDefine] + * @param {Objet|HashMap} [encodeDefine] + * @param {number} [startIndex=0] + * @param {number} [dimensionsDetectCount] + */ +function Source(fields) { + + /** + * @type {boolean} + */ + this.fromDataset = fields.fromDataset; + + /** + * Not null/undefined. + * @type {Array|Object} + */ + this.data = fields.data || ( + fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : [] + ); + + /** + * See also "detectSourceFormat". + * Not null/undefined. + * @type {string} + */ + this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN; + + /** + * 'row' or 'column' + * Not null/undefined. + * @type {string} seriesLayoutBy + */ + this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN; + + /** + * dimensions definition in option. + * can be null/undefined. + * @type {Array.} + */ + this.dimensionsDefine = fields.dimensionsDefine; + + /** + * encode definition in option. + * can be null/undefined. + * @type {Objet|HashMap} + */ + this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine); + + /** + * Not null/undefined, uint. + * @type {number} + */ + this.startIndex = fields.startIndex || 0; + + /** + * Can be null/undefined (when unknown), uint. + * @type {number} + */ + this.dimensionsDetectCount = fields.dimensionsDetectCount; +} + +/** + * Wrap original series data for some compatibility cases. + */ +Source.seriesDataToSource = function (data) { + return new Source({ + data: data, + sourceFormat: isTypedArray(data) + ? SOURCE_FORMAT_TYPED_ARRAY + : SOURCE_FORMAT_ORIGINAL, + fromDataset: false + }); +}; + +enableClassCheck(Source); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$3 = makeInner(); + +/** + * @see {module:echarts/data/Source} + * @param {module:echarts/component/dataset/DatasetModel} datasetModel + * @return {string} sourceFormat + */ +function detectSourceFormat(datasetModel) { + var data = datasetModel.option.source; + var sourceFormat = SOURCE_FORMAT_UNKNOWN; + + if (isTypedArray(data)) { + sourceFormat = SOURCE_FORMAT_TYPED_ARRAY; + } + else if (isArray(data)) { + // FIXME Whether tolerate null in top level array? + if (data.length === 0) { + sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; + } + + for (var i = 0, len = data.length; i < len; i++) { + var item = data[i]; + + if (item == null) { + continue; + } + else if (isArray(item)) { + sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; + break; + } + else if (isObject$1(item)) { + sourceFormat = SOURCE_FORMAT_OBJECT_ROWS; + break; + } + } + } + else if (isObject$1(data)) { + for (var key in data) { + if (data.hasOwnProperty(key) && isArrayLike(data[key])) { + sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS; + break; + } + } + } + else if (data != null) { + throw new Error('Invalid data'); + } + + inner$3(datasetModel).sourceFormat = sourceFormat; +} + +/** + * [Scenarios]: + * (1) Provide source data directly: + * series: { + * encode: {...}, + * dimensions: [...] + * seriesLayoutBy: 'row', + * data: [[...]] + * } + * (2) Refer to datasetModel. + * series: [{ + * encode: {...} + * // Ignore datasetIndex means `datasetIndex: 0` + * // and the dimensions defination in dataset is used + * }, { + * encode: {...}, + * seriesLayoutBy: 'column', + * datasetIndex: 1 + * }] + * + * Get data from series itself or datset. + * @return {module:echarts/data/Source} source + */ +function getSource(seriesModel) { + return inner$3(seriesModel).source; +} + +/** + * MUST be called before mergeOption of all series. + * @param {module:echarts/model/Global} ecModel + */ +function resetSourceDefaulter(ecModel) { + // `datasetMap` is used to make default encode. + inner$3(ecModel).datasetMap = createHashMap(); +} + +/** + * [Caution]: + * MUST be called after series option merged and + * before "series.getInitailData()" called. + * + * [The rule of making default encode]: + * Category axis (if exists) alway map to the first dimension. + * Each other axis occupies a subsequent dimension. + * + * [Why make default encode]: + * Simplify the typing of encode in option, avoiding the case like that: + * series: [{encode: {x: 0, y: 1}}, {encode: {x: 0, y: 2}}, {encode: {x: 0, y: 3}}], + * where the "y" have to be manually typed as "1, 2, 3, ...". + * + * @param {module:echarts/model/Series} seriesModel + */ +function prepareSource(seriesModel) { + var seriesOption = seriesModel.option; + + var data = seriesOption.data; + var sourceFormat = isTypedArray(data) + ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL; + var fromDataset = false; + + var seriesLayoutBy = seriesOption.seriesLayoutBy; + var sourceHeader = seriesOption.sourceHeader; + var dimensionsDefine = seriesOption.dimensions; + + var datasetModel = getDatasetModel(seriesModel); + if (datasetModel) { + var datasetOption = datasetModel.option; + + data = datasetOption.source; + sourceFormat = inner$3(datasetModel).sourceFormat; + fromDataset = true; + + // These settings from series has higher priority. + seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy; + sourceHeader == null && (sourceHeader = datasetOption.sourceHeader); + dimensionsDefine = dimensionsDefine || datasetOption.dimensions; + } + + var completeResult = completeBySourceData( + data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine + ); + + // Note: dataset option does not have `encode`. + var encodeDefine = seriesOption.encode; + if (!encodeDefine && datasetModel) { + encodeDefine = makeDefaultEncode( + seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult + ); + } + + inner$3(seriesModel).source = new Source({ + data: data, + fromDataset: fromDataset, + seriesLayoutBy: seriesLayoutBy, + sourceFormat: sourceFormat, + dimensionsDefine: completeResult.dimensionsDefine, + startIndex: completeResult.startIndex, + dimensionsDetectCount: completeResult.dimensionsDetectCount, + encodeDefine: encodeDefine + }); +} + +// return {startIndex, dimensionsDefine, dimensionsCount} +function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) { + if (!data) { + return {dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)}; + } + + var dimensionsDetectCount; + var startIndex; + var findPotentialName; + + if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) { + // Rule: Most of the first line are string: it is header. + // Caution: consider a line with 5 string and 1 number, + // it still can not be sure it is a head, because the + // 5 string may be 5 values of category columns. + if (sourceHeader === 'auto' || sourceHeader == null) { + arrayRowsTravelFirst(function (val) { + // '-' is regarded as null/undefined. + if (val != null && val !== '-') { + if (isString(val)) { + startIndex == null && (startIndex = 1); + } + else { + startIndex = 0; + } + } + // 10 is an experience number, avoid long loop. + }, seriesLayoutBy, data, 10); + } + else { + startIndex = sourceHeader ? 1 : 0; + } + + if (!dimensionsDefine && startIndex === 1) { + dimensionsDefine = []; + arrayRowsTravelFirst(function (val, index) { + dimensionsDefine[index] = val != null ? val : ''; + }, seriesLayoutBy, data); + } + + dimensionsDetectCount = dimensionsDefine + ? dimensionsDefine.length + : seriesLayoutBy === SERIES_LAYOUT_BY_ROW + ? data.length + : data[0] + ? data[0].length + : null; + } + else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) { + if (!dimensionsDefine) { + dimensionsDefine = objectRowsCollectDimensions(data); + findPotentialName = true; + } + } + else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) { + if (!dimensionsDefine) { + dimensionsDefine = []; + findPotentialName = true; + each$1(data, function (colArr, key) { + dimensionsDefine.push(key); + }); + } + } + else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { + var value0 = getDataItemValue(data[0]); + dimensionsDetectCount = isArray(value0) && value0.length || 1; + } + else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { + if (__DEV__) { + assert$1(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.'); + } + } + + var potentialNameDimIndex; + if (findPotentialName) { + each$1(dimensionsDefine, function (dim, idx) { + if ((isObject$1(dim) ? dim.name : dim) === 'name') { + potentialNameDimIndex = idx; + } + }); + } + + return { + startIndex: startIndex, + dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine), + dimensionsDetectCount: dimensionsDetectCount, + potentialNameDimIndex: potentialNameDimIndex + // TODO: potentialIdDimIdx + }; +} + +// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'], +// which is reasonable. But dimension name is duplicated. +// Returns undefined or an array contains only object without null/undefiend or string. +function normalizeDimensionsDefine(dimensionsDefine) { + if (!dimensionsDefine) { + // The meaning of null/undefined is different from empty array. + return; + } + var nameMap = createHashMap(); + return map(dimensionsDefine, function (item, index) { + item = extend({}, isObject$1(item) ? item : {name: item}); + + // User can set null in dimensions. + // We dont auto specify name, othewise a given name may + // cause it be refered unexpectedly. + if (item.name == null) { + return item; + } + + // Also consider number form like 2012. + item.name += ''; + // User may also specify displayName. + // displayName will always exists except user not + // specified or dim name is not specified or detected. + // (A auto generated dim name will not be used as + // displayName). + if (item.displayName == null) { + item.displayName = item.name; + } + + var exist = nameMap.get(item.name); + if (!exist) { + nameMap.set(item.name, {count: 1}); + } + else { + item.name += '-' + exist.count++; + } + + return item; + }); +} + +function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) { + maxLoop == null && (maxLoop = Infinity); + if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) { + for (var i = 0; i < data.length && i < maxLoop; i++) { + cb(data[i] ? data[i][0] : null, i); + } + } + else { + var value0 = data[0] || []; + for (var i = 0; i < value0.length && i < maxLoop; i++) { + cb(value0[i], i); + } + } +} + +function objectRowsCollectDimensions(data) { + var firstIndex = 0; + var obj; + while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line + if (obj) { + var dimensions = []; + each$1(obj, function (value, key) { + dimensions.push(key); + }); + return dimensions; + } +} + +// ??? TODO merge to completedimensions, where also has +// default encode making logic. And the default rule +// should depends on series? consider 'map'. +function makeDefaultEncode( + seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult +) { + var coordSysDefine = getCoordSysDefineBySeries(seriesModel); + var encode = {}; + // var encodeTooltip = []; + // var encodeLabel = []; + var encodeItemName = []; + var encodeSeriesName = []; + var seriesType = seriesModel.subType; + + // ??? TODO refactor: provide by series itself. + // Consider the case: 'map' series is based on geo coordSys, + // 'graph', 'heatmap' can be based on cartesian. But can not + // give default rule simply here. + var nSeriesMap = createHashMap(['pie', 'map', 'funnel']); + var cSeriesMap = createHashMap([ + 'line', 'bar', 'pictorialBar', 'scatter', 'effectScatter', 'candlestick', 'boxplot' + ]); + + // Usually in this case series will use the first data + // dimension as the "value" dimension, or other default + // processes respectively. + if (coordSysDefine && cSeriesMap.get(seriesType) != null) { + var ecModel = seriesModel.ecModel; + var datasetMap = inner$3(ecModel).datasetMap; + var key = datasetModel.uid + '_' + seriesLayoutBy; + var datasetRecord = datasetMap.get(key) + || datasetMap.set(key, {categoryWayDim: 1, valueWayDim: 0}); + + // TODO + // Auto detect first time axis and do arrangement. + each$1(coordSysDefine.coordSysDims, function (coordDim) { + // In value way. + if (coordSysDefine.firstCategoryDimIndex == null) { + var dataDim = datasetRecord.valueWayDim++; + encode[coordDim] = dataDim; + + // ??? TODO give a better default series name rule? + // especially when encode x y specified. + // consider: when mutiple series share one dimension + // category axis, series name should better use + // the other dimsion name. On the other hand, use + // both dimensions name. + + encodeSeriesName.push(dataDim); + // encodeTooltip.push(dataDim); + // encodeLabel.push(dataDim); + } + // In category way, category axis. + else if (coordSysDefine.categoryAxisMap.get(coordDim)) { + encode[coordDim] = 0; + encodeItemName.push(0); + } + // In category way, non-category axis. + else { + var dataDim = datasetRecord.categoryWayDim++; + encode[coordDim] = dataDim; + // encodeTooltip.push(dataDim); + // encodeLabel.push(dataDim); + encodeSeriesName.push(dataDim); + } + }); + } + // Do not make a complex rule! Hard to code maintain and not necessary. + // ??? TODO refactor: provide by series itself. + // [{name: ..., value: ...}, ...] like: + else if (nSeriesMap.get(seriesType) != null) { + // Find the first not ordinal. (5 is an experience value) + var firstNotOrdinal; + for (var i = 0; i < 5 && firstNotOrdinal == null; i++) { + if (!doGuessOrdinal( + data, sourceFormat, seriesLayoutBy, + completeResult.dimensionsDefine, completeResult.startIndex, i + )) { + firstNotOrdinal = i; + } + } + if (firstNotOrdinal != null) { + encode.value = firstNotOrdinal; + var nameDimIndex = completeResult.potentialNameDimIndex + || Math.max(firstNotOrdinal - 1, 0); + // By default, label use itemName in charts. + // So we dont set encodeLabel here. + encodeSeriesName.push(nameDimIndex); + encodeItemName.push(nameDimIndex); + // encodeTooltip.push(firstNotOrdinal); + } + } + + // encodeTooltip.length && (encode.tooltip = encodeTooltip); + // encodeLabel.length && (encode.label = encodeLabel); + encodeItemName.length && (encode.itemName = encodeItemName); + encodeSeriesName.length && (encode.seriesName = encodeSeriesName); + + return encode; +} + +/** + * If return null/undefined, indicate that should not use datasetModel. + */ +function getDatasetModel(seriesModel) { + var option = seriesModel.option; + // Caution: consider the scenario: + // A dataset is declared and a series is not expected to use the dataset, + // and at the beginning `setOption({series: { noData })` (just prepare other + // option but no data), then `setOption({series: {data: [...]}); In this case, + // the user should set an empty array to avoid that dataset is used by default. + var thisData = option.data; + if (!thisData) { + return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0); + } +} + +/** + * The rule should not be complex, otherwise user might not + * be able to known where the data is wrong. + * The code is ugly, but how to make it neat? + * + * @param {module:echars/data/Source} source + * @param {number} dimIndex + * @return {boolean} Whether ordinal. + */ +function guessOrdinal(source, dimIndex) { + return doGuessOrdinal( + source.data, + source.sourceFormat, + source.seriesLayoutBy, + source.dimensionsDefine, + source.startIndex, + dimIndex + ); +} + +// dimIndex may be overflow source data. +function doGuessOrdinal( + data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex +) { + var result; + // Experience value. + var maxLoop = 5; + + if (isTypedArray(data)) { + return false; + } + + // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine + // always exists in source. + var dimName; + if (dimensionsDefine) { + dimName = dimensionsDefine[dimIndex]; + dimName = isObject$1(dimName) ? dimName.name : dimName; + } + + if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) { + if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) { + var sample = data[dimIndex]; + for (var i = 0; i < (sample || []).length && i < maxLoop; i++) { + if ((result = detectValue(sample[startIndex + i])) != null) { + return result; + } + } + } + else { + for (var i = 0; i < data.length && i < maxLoop; i++) { + var row = data[startIndex + i]; + if (row && (result = detectValue(row[dimIndex])) != null) { + return result; + } + } + } + } + else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) { + if (!dimName) { + return; + } + for (var i = 0; i < data.length && i < maxLoop; i++) { + var item = data[i]; + if (item && (result = detectValue(item[dimName])) != null) { + return result; + } + } + } + else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) { + if (!dimName) { + return; + } + var sample = data[dimName]; + if (!sample || isTypedArray(sample)) { + return false; + } + for (var i = 0; i < sample.length && i < maxLoop; i++) { + if ((result = detectValue(sample[i])) != null) { + return result; + } + } + } + else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { + for (var i = 0; i < data.length && i < maxLoop; i++) { + var item = data[i]; + var val = getDataItemValue(item); + if (!isArray(val)) { + return false; + } + if ((result = detectValue(val[dimIndex])) != null) { + return result; + } + } + } + + function detectValue(val) { + // Consider usage convenience, '1', '2' will be treated as "number". + // `isFinit('')` get `true`. + if (val != null && isFinite(val) && val !== '') { + return false; + } + else if (isString(val) && val !== '-') { + return true; + } + } + + return false; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * ECharts global model + * + * @module {echarts/model/Global} + */ + + +/** + * Caution: If the mechanism should be changed some day, these cases + * should be considered: + * + * (1) In `merge option` mode, if using the same option to call `setOption` + * many times, the result should be the same (try our best to ensure that). + * (2) In `merge option` mode, if a component has no id/name specified, it + * will be merged by index, and the result sequence of the components is + * consistent to the original sequence. + * (3) `reset` feature (in toolbox). Find detailed info in comments about + * `mergeOption` in module:echarts/model/OptionManager. + */ + +var OPTION_INNER_KEY = '\0_ec_inner'; + +/** + * @alias module:echarts/model/Global + * + * @param {Object} option + * @param {module:echarts/model/Model} parentModel + * @param {Object} theme + */ +var GlobalModel = Model.extend({ + + init: function (option, parentModel, theme, optionManager) { + theme = theme || {}; + + this.option = null; // Mark as not initialized. + + /** + * @type {module:echarts/model/Model} + * @private + */ + this._theme = new Model(theme); + + /** + * @type {module:echarts/model/OptionManager} + */ + this._optionManager = optionManager; + }, + + setOption: function (option, optionPreprocessorFuncs) { + assert$1( + !(OPTION_INNER_KEY in option), + 'please use chart.getOption()' + ); + + this._optionManager.setOption(option, optionPreprocessorFuncs); + + this.resetOption(null); + }, + + /** + * @param {string} type null/undefined: reset all. + * 'recreate': force recreate all. + * 'timeline': only reset timeline option + * 'media': only reset media query option + * @return {boolean} Whether option changed. + */ + resetOption: function (type) { + var optionChanged = false; + var optionManager = this._optionManager; + + if (!type || type === 'recreate') { + var baseOption = optionManager.mountOption(type === 'recreate'); + + if (!this.option || type === 'recreate') { + initBase.call(this, baseOption); + } + else { + this.restoreData(); + this.mergeOption(baseOption); + } + optionChanged = true; + } + + if (type === 'timeline' || type === 'media') { + this.restoreData(); + } + + if (!type || type === 'recreate' || type === 'timeline') { + var timelineOption = optionManager.getTimelineOption(this); + timelineOption && (this.mergeOption(timelineOption), optionChanged = true); + } + + if (!type || type === 'recreate' || type === 'media') { + var mediaOptions = optionManager.getMediaOption(this, this._api); + if (mediaOptions.length) { + each$1(mediaOptions, function (mediaOption) { + this.mergeOption(mediaOption, optionChanged = true); + }, this); + } + } + + return optionChanged; + }, + + /** + * @protected + */ + mergeOption: function (newOption) { + var option = this.option; + var componentsMap = this._componentsMap; + var newCptTypes = []; + + resetSourceDefaulter(this); + + // If no component class, merge directly. + // For example: color, animaiton options, etc. + each$1(newOption, function (componentOption, mainType) { + if (componentOption == null) { + return; + } + + if (!ComponentModel.hasClass(mainType)) { + // globalSettingTask.dirty(); + option[mainType] = option[mainType] == null + ? clone(componentOption) + : merge(option[mainType], componentOption, true); + } + else if (mainType) { + newCptTypes.push(mainType); + } + }); + + ComponentModel.topologicalTravel( + newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this + ); + + function visitComponent(mainType, dependencies) { + + var newCptOptionList = normalizeToArray(newOption[mainType]); + + var mapResult = mappingToExists( + componentsMap.get(mainType), newCptOptionList + ); + + makeIdAndName(mapResult); + + // Set mainType and complete subType. + each$1(mapResult, function (item, index) { + var opt = item.option; + if (isObject$1(opt)) { + item.keyInfo.mainType = mainType; + item.keyInfo.subType = determineSubType(mainType, opt, item.exist); + } + }); + + var dependentModels = getComponentsByTypes( + componentsMap, dependencies + ); + + option[mainType] = []; + componentsMap.set(mainType, []); + + each$1(mapResult, function (resultItem, index) { + var componentModel = resultItem.exist; + var newCptOption = resultItem.option; + + assert$1( + isObject$1(newCptOption) || componentModel, + 'Empty component definition' + ); + + // Consider where is no new option and should be merged using {}, + // see removeEdgeAndAdd in topologicalTravel and + // ComponentModel.getAllClassMainTypes. + if (!newCptOption) { + componentModel.mergeOption({}, this); + componentModel.optionUpdated({}, false); + } + else { + var ComponentModelClass = ComponentModel.getClass( + mainType, resultItem.keyInfo.subType, true + ); + + if (componentModel && componentModel instanceof ComponentModelClass) { + componentModel.name = resultItem.keyInfo.name; + // componentModel.settingTask && componentModel.settingTask.dirty(); + componentModel.mergeOption(newCptOption, this); + componentModel.optionUpdated(newCptOption, false); + } + else { + // PENDING Global as parent ? + var extraOpt = extend( + { + dependentModels: dependentModels, + componentIndex: index + }, + resultItem.keyInfo + ); + componentModel = new ComponentModelClass( + newCptOption, this, this, extraOpt + ); + extend(componentModel, extraOpt); + componentModel.init(newCptOption, this, this, extraOpt); + + // Call optionUpdated after init. + // newCptOption has been used as componentModel.option + // and may be merged with theme and default, so pass null + // to avoid confusion. + componentModel.optionUpdated(null, true); + } + } + + componentsMap.get(mainType)[index] = componentModel; + option[mainType][index] = componentModel.option; + }, this); + + // Backup series for filtering. + if (mainType === 'series') { + createSeriesIndices(this, componentsMap.get('series')); + } + } + + this._seriesIndicesMap = createHashMap( + this._seriesIndices = this._seriesIndices || [] + ); + }, + + /** + * Get option for output (cloned option and inner info removed) + * @public + * @return {Object} + */ + getOption: function () { + var option = clone(this.option); + + each$1(option, function (opts, mainType) { + if (ComponentModel.hasClass(mainType)) { + var opts = normalizeToArray(opts); + for (var i = opts.length - 1; i >= 0; i--) { + // Remove options with inner id. + if (isIdInner(opts[i])) { + opts.splice(i, 1); + } + } + option[mainType] = opts; + } + }); + + delete option[OPTION_INNER_KEY]; + + return option; + }, + + /** + * @return {module:echarts/model/Model} + */ + getTheme: function () { + return this._theme; + }, + + /** + * @param {string} mainType + * @param {number} [idx=0] + * @return {module:echarts/model/Component} + */ + getComponent: function (mainType, idx) { + var list = this._componentsMap.get(mainType); + if (list) { + return list[idx || 0]; + } + }, + + /** + * If none of index and id and name used, return all components with mainType. + * @param {Object} condition + * @param {string} condition.mainType + * @param {string} [condition.subType] If ignore, only query by mainType + * @param {number|Array.} [condition.index] Either input index or id or name. + * @param {string|Array.} [condition.id] Either input index or id or name. + * @param {string|Array.} [condition.name] Either input index or id or name. + * @return {Array.} + */ + queryComponents: function (condition) { + var mainType = condition.mainType; + if (!mainType) { + return []; + } + + var index = condition.index; + var id = condition.id; + var name = condition.name; + + var cpts = this._componentsMap.get(mainType); + + if (!cpts || !cpts.length) { + return []; + } + + var result; + + if (index != null) { + if (!isArray(index)) { + index = [index]; + } + result = filter(map(index, function (idx) { + return cpts[idx]; + }), function (val) { + return !!val; + }); + } + else if (id != null) { + var isIdArray = isArray(id); + result = filter(cpts, function (cpt) { + return (isIdArray && indexOf(id, cpt.id) >= 0) + || (!isIdArray && cpt.id === id); + }); + } + else if (name != null) { + var isNameArray = isArray(name); + result = filter(cpts, function (cpt) { + return (isNameArray && indexOf(name, cpt.name) >= 0) + || (!isNameArray && cpt.name === name); + }); + } + else { + // Return all components with mainType + result = cpts.slice(); + } + + return filterBySubType(result, condition); + }, + + /** + * The interface is different from queryComponents, + * which is convenient for inner usage. + * + * @usage + * var result = findComponents( + * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}} + * ); + * var result = findComponents( + * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}} + * ); + * var result = findComponents( + * {mainType: 'series'}, + * function (model, index) {...} + * ); + * // result like [component0, componnet1, ...] + * + * @param {Object} condition + * @param {string} condition.mainType Mandatory. + * @param {string} [condition.subType] Optional. + * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName}, + * where xxx is mainType. + * If query attribute is null/undefined or has no index/id/name, + * do not filtering by query conditions, which is convenient for + * no-payload situations or when target of action is global. + * @param {Function} [condition.filter] parameter: component, return boolean. + * @return {Array.} + */ + findComponents: function (condition) { + var query = condition.query; + var mainType = condition.mainType; + + var queryCond = getQueryCond(query); + var result = queryCond + ? this.queryComponents(queryCond) + : this._componentsMap.get(mainType); + + return doFilter(filterBySubType(result, condition)); + + function getQueryCond(q) { + var indexAttr = mainType + 'Index'; + var idAttr = mainType + 'Id'; + var nameAttr = mainType + 'Name'; + return q && ( + q[indexAttr] != null + || q[idAttr] != null + || q[nameAttr] != null + ) + ? { + mainType: mainType, + // subType will be filtered finally. + index: q[indexAttr], + id: q[idAttr], + name: q[nameAttr] + } + : null; + } + + function doFilter(res) { + return condition.filter + ? filter(res, condition.filter) + : res; + } + }, + + /** + * @usage + * eachComponent('legend', function (legendModel, index) { + * ... + * }); + * eachComponent(function (componentType, model, index) { + * // componentType does not include subType + * // (componentType is 'xxx' but not 'xxx.aa') + * }); + * eachComponent( + * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}, + * function (model, index) {...} + * ); + * eachComponent( + * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}, + * function (model, index) {...} + * ); + * + * @param {string|Object=} mainType When mainType is object, the definition + * is the same as the method 'findComponents'. + * @param {Function} cb + * @param {*} context + */ + eachComponent: function (mainType, cb, context) { + var componentsMap = this._componentsMap; + + if (typeof mainType === 'function') { + context = cb; + cb = mainType; + componentsMap.each(function (components, componentType) { + each$1(components, function (component, index) { + cb.call(context, componentType, component, index); + }); + }); + } + else if (isString(mainType)) { + each$1(componentsMap.get(mainType), cb, context); + } + else if (isObject$1(mainType)) { + var queryResult = this.findComponents(mainType); + each$1(queryResult, cb, context); + } + }, + + /** + * @param {string} name + * @return {Array.} + */ + getSeriesByName: function (name) { + var series = this._componentsMap.get('series'); + return filter(series, function (oneSeries) { + return oneSeries.name === name; + }); + }, + + /** + * @param {number} seriesIndex + * @return {module:echarts/model/Series} + */ + getSeriesByIndex: function (seriesIndex) { + return this._componentsMap.get('series')[seriesIndex]; + }, + + /** + * Get series list before filtered by type. + * FIXME: rename to getRawSeriesByType? + * + * @param {string} subType + * @return {Array.} + */ + getSeriesByType: function (subType) { + var series = this._componentsMap.get('series'); + return filter(series, function (oneSeries) { + return oneSeries.subType === subType; + }); + }, + + /** + * @return {Array.} + */ + getSeries: function () { + return this._componentsMap.get('series').slice(); + }, + + /** + * @return {number} + */ + getSeriesCount: function () { + return this._componentsMap.get('series').length; + }, + + /** + * After filtering, series may be different + * frome raw series. + * + * @param {Function} cb + * @param {*} context + */ + eachSeries: function (cb, context) { + assertSeriesInitialized(this); + each$1(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + cb.call(context, series, rawSeriesIndex); + }, this); + }, + + /** + * Iterate raw series before filtered. + * + * @param {Function} cb + * @param {*} context + */ + eachRawSeries: function (cb, context) { + each$1(this._componentsMap.get('series'), cb, context); + }, + + /** + * After filtering, series may be different. + * frome raw series. + * + * @parma {string} subType + * @param {Function} cb + * @param {*} context + */ + eachSeriesByType: function (subType, cb, context) { + assertSeriesInitialized(this); + each$1(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + if (series.subType === subType) { + cb.call(context, series, rawSeriesIndex); + } + }, this); + }, + + /** + * Iterate raw series before filtered of given type. + * + * @parma {string} subType + * @param {Function} cb + * @param {*} context + */ + eachRawSeriesByType: function (subType, cb, context) { + return each$1(this.getSeriesByType(subType), cb, context); + }, + + /** + * @param {module:echarts/model/Series} seriesModel + */ + isSeriesFiltered: function (seriesModel) { + assertSeriesInitialized(this); + return this._seriesIndicesMap.get(seriesModel.componentIndex) == null; + }, + + /** + * @return {Array.} + */ + getCurrentSeriesIndices: function () { + return (this._seriesIndices || []).slice(); + }, + + /** + * @param {Function} cb + * @param {*} context + */ + filterSeries: function (cb, context) { + assertSeriesInitialized(this); + var filteredSeries = filter( + this._componentsMap.get('series'), cb, context + ); + createSeriesIndices(this, filteredSeries); + }, + + restoreData: function (payload) { + var componentsMap = this._componentsMap; + + createSeriesIndices(this, componentsMap.get('series')); + + var componentTypes = []; + componentsMap.each(function (components, componentType) { + componentTypes.push(componentType); + }); + + ComponentModel.topologicalTravel( + componentTypes, + ComponentModel.getAllClassMainTypes(), + function (componentType, dependencies) { + each$1(componentsMap.get(componentType), function (component) { + (componentType !== 'series' || !isNotTargetSeries(component, payload)) + && component.restoreData(); + }); + } + ); + } + +}); + +function isNotTargetSeries(seriesModel, payload) { + if (payload) { + var index = payload.seiresIndex; + var id = payload.seriesId; + var name = payload.seriesName; + return (index != null && seriesModel.componentIndex !== index) + || (id != null && seriesModel.id !== id) + || (name != null && seriesModel.name !== name); + } +} + +/** + * @inner + */ +function mergeTheme(option, theme) { + // PENDING + // NOT use `colorLayer` in theme if option has `color` + var notMergeColorLayer = option.color && !option.colorLayer; + + each$1(theme, function (themeItem, name) { + if (name === 'colorLayer' && notMergeColorLayer) { + return; + } + // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理 + if (!ComponentModel.hasClass(name)) { + if (typeof themeItem === 'object') { + option[name] = !option[name] + ? clone(themeItem) + : merge(option[name], themeItem, false); + } + else { + if (option[name] == null) { + option[name] = themeItem; + } + } + } + }); +} + +function initBase(baseOption) { + baseOption = baseOption; + + // Using OPTION_INNER_KEY to mark that this option can not be used outside, + // i.e. `chart.setOption(chart.getModel().option);` is forbiden. + this.option = {}; + this.option[OPTION_INNER_KEY] = 1; + + /** + * Init with series: [], in case of calling findSeries method + * before series initialized. + * @type {Object.>} + * @private + */ + this._componentsMap = createHashMap({series: []}); + + /** + * Mapping between filtered series list and raw series list. + * key: filtered series indices, value: raw series indices. + * @type {Array.} + * @private + */ + this._seriesIndices; + + this._seriesIndicesMap; + + mergeTheme(baseOption, this._theme.option); + + // TODO Needs clone when merging to the unexisted property + merge(baseOption, globalDefault, false); + + this.mergeOption(baseOption); +} + +/** + * @inner + * @param {Array.|string} types model types + * @return {Object} key: {string} type, value: {Array.} models + */ +function getComponentsByTypes(componentsMap, types) { + if (!isArray(types)) { + types = types ? [types] : []; + } + + var ret = {}; + each$1(types, function (type) { + ret[type] = (componentsMap.get(type) || []).slice(); + }); + + return ret; +} + +/** + * @inner + */ +function determineSubType(mainType, newCptOption, existComponent) { + var subType = newCptOption.type + ? newCptOption.type + : existComponent + ? existComponent.subType + // Use determineSubType only when there is no existComponent. + : ComponentModel.determineSubType(mainType, newCptOption); + + // tooltip, markline, markpoint may always has no subType + return subType; +} + +/** + * @inner + */ +function createSeriesIndices(ecModel, seriesModels) { + ecModel._seriesIndicesMap = createHashMap( + ecModel._seriesIndices = map(seriesModels, function (series) { + return series.componentIndex; + }) || [] + ); +} + +/** + * @inner + */ +function filterBySubType(components, condition) { + // Using hasOwnProperty for restrict. Consider + // subType is undefined in user payload. + return condition.hasOwnProperty('subType') + ? filter(components, function (cpt) { + return cpt.subType === condition.subType; + }) + : components; +} + +/** + * @inner + */ +function assertSeriesInitialized(ecModel) { + // Components that use _seriesIndices should depends on series component, + // which make sure that their initialization is after series. + if (__DEV__) { + if (!ecModel._seriesIndices) { + throw new Error('Option should contains series.'); + } + } +} + +mixin(GlobalModel, colorPaletteMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var echartsAPIList = [ + 'getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed', + 'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption', + 'getViewOfComponentModel', 'getViewOfSeriesModel' +]; +// And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js + +function ExtensionAPI(chartInstance) { + each$1(echartsAPIList, function (name) { + this[name] = bind(chartInstance[name], chartInstance); + }, this); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var coordinateSystemCreators = {}; + +function CoordinateSystemManager() { + + this._coordinateSystems = []; +} + +CoordinateSystemManager.prototype = { + + constructor: CoordinateSystemManager, + + create: function (ecModel, api) { + var coordinateSystems = []; + each$1(coordinateSystemCreators, function (creater, type) { + var list = creater.create(ecModel, api); + coordinateSystems = coordinateSystems.concat(list || []); + }); + + this._coordinateSystems = coordinateSystems; + }, + + update: function (ecModel, api) { + each$1(this._coordinateSystems, function (coordSys) { + coordSys.update && coordSys.update(ecModel, api); + }); + }, + + getCoordinateSystems: function () { + return this._coordinateSystems.slice(); + } +}; + +CoordinateSystemManager.register = function (type, coordinateSystemCreator) { + coordinateSystemCreators[type] = coordinateSystemCreator; +}; + +CoordinateSystemManager.get = function (type) { + return coordinateSystemCreators[type]; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * ECharts option manager + * + * @module {echarts/model/OptionManager} + */ + + +var each$4 = each$1; +var clone$3 = clone; +var map$1 = map; +var merge$1 = merge; + +var QUERY_REG = /^(min|max)?(.+)$/; + +/** + * TERM EXPLANATIONS: + * + * [option]: + * + * An object that contains definitions of components. For example: + * var option = { + * title: {...}, + * legend: {...}, + * visualMap: {...}, + * series: [ + * {data: [...]}, + * {data: [...]}, + * ... + * ] + * }; + * + * [rawOption]: + * + * An object input to echarts.setOption. 'rawOption' may be an + * 'option', or may be an object contains multi-options. For example: + * var option = { + * baseOption: { + * title: {...}, + * legend: {...}, + * series: [ + * {data: [...]}, + * {data: [...]}, + * ... + * ] + * }, + * timeline: {...}, + * options: [ + * {title: {...}, series: {data: [...]}}, + * {title: {...}, series: {data: [...]}}, + * ... + * ], + * media: [ + * { + * query: {maxWidth: 320}, + * option: {series: {x: 20}, visualMap: {show: false}} + * }, + * { + * query: {minWidth: 320, maxWidth: 720}, + * option: {series: {x: 500}, visualMap: {show: true}} + * }, + * { + * option: {series: {x: 1200}, visualMap: {show: true}} + * } + * ] + * }; + * + * @alias module:echarts/model/OptionManager + * @param {module:echarts/ExtensionAPI} api + */ +function OptionManager(api) { + + /** + * @private + * @type {module:echarts/ExtensionAPI} + */ + this._api = api; + + /** + * @private + * @type {Array.} + */ + this._timelineOptions = []; + + /** + * @private + * @type {Array.} + */ + this._mediaList = []; + + /** + * @private + * @type {Object} + */ + this._mediaDefault; + + /** + * -1, means default. + * empty means no media. + * @private + * @type {Array.} + */ + this._currentMediaIndices = []; + + /** + * @private + * @type {Object} + */ + this._optionBackup; + + /** + * @private + * @type {Object} + */ + this._newBaseOption; +} + +// timeline.notMerge is not supported in ec3. Firstly there is rearly +// case that notMerge is needed. Secondly supporting 'notMerge' requires +// rawOption cloned and backuped when timeline changed, which does no +// good to performance. What's more, that both timeline and setOption +// method supply 'notMerge' brings complex and some problems. +// Consider this case: +// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false); +// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false); + +OptionManager.prototype = { + + constructor: OptionManager, + + /** + * @public + * @param {Object} rawOption Raw option. + * @param {module:echarts/model/Global} ecModel + * @param {Array.} optionPreprocessorFuncs + * @return {Object} Init option + */ + setOption: function (rawOption, optionPreprocessorFuncs) { + if (rawOption) { + // That set dat primitive is dangerous if user reuse the data when setOption again. + each$1(normalizeToArray(rawOption.series), function (series) { + series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data); + }); + } + + // Caution: some series modify option data, if do not clone, + // it should ensure that the repeat modify correctly + // (create a new object when modify itself). + rawOption = clone$3(rawOption, true); + + // FIXME + // 如果 timeline options 或者 media 中设置了某个属性,而baseOption中没有设置,则进行警告。 + + var oldOptionBackup = this._optionBackup; + var newParsedOption = parseRawOption.call( + this, rawOption, optionPreprocessorFuncs, !oldOptionBackup + ); + this._newBaseOption = newParsedOption.baseOption; + + // For setOption at second time (using merge mode); + if (oldOptionBackup) { + // Only baseOption can be merged. + mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption); + + // For simplicity, timeline options and media options do not support merge, + // that is, if you `setOption` twice and both has timeline options, the latter + // timeline opitons will not be merged to the formers, but just substitude them. + if (newParsedOption.timelineOptions.length) { + oldOptionBackup.timelineOptions = newParsedOption.timelineOptions; + } + if (newParsedOption.mediaList.length) { + oldOptionBackup.mediaList = newParsedOption.mediaList; + } + if (newParsedOption.mediaDefault) { + oldOptionBackup.mediaDefault = newParsedOption.mediaDefault; + } + } + else { + this._optionBackup = newParsedOption; + } + }, + + /** + * @param {boolean} isRecreate + * @return {Object} + */ + mountOption: function (isRecreate) { + var optionBackup = this._optionBackup; + + // TODO + // 如果没有reset功能则不clone。 + + this._timelineOptions = map$1(optionBackup.timelineOptions, clone$3); + this._mediaList = map$1(optionBackup.mediaList, clone$3); + this._mediaDefault = clone$3(optionBackup.mediaDefault); + this._currentMediaIndices = []; + + return clone$3(isRecreate + // this._optionBackup.baseOption, which is created at the first `setOption` + // called, and is merged into every new option by inner method `mergeOption` + // each time `setOption` called, can be only used in `isRecreate`, because + // its reliability is under suspicion. In other cases option merge is + // performed by `model.mergeOption`. + ? optionBackup.baseOption : this._newBaseOption + ); + }, + + /** + * @param {module:echarts/model/Global} ecModel + * @return {Object} + */ + getTimelineOption: function (ecModel) { + var option; + var timelineOptions = this._timelineOptions; + + if (timelineOptions.length) { + // getTimelineOption can only be called after ecModel inited, + // so we can get currentIndex from timelineModel. + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel) { + option = clone$3( + timelineOptions[timelineModel.getCurrentIndex()], + true + ); + } + } + + return option; + }, + + /** + * @param {module:echarts/model/Global} ecModel + * @return {Array.} + */ + getMediaOption: function (ecModel) { + var ecWidth = this._api.getWidth(); + var ecHeight = this._api.getHeight(); + var mediaList = this._mediaList; + var mediaDefault = this._mediaDefault; + var indices = []; + var result = []; + + // No media defined. + if (!mediaList.length && !mediaDefault) { + return result; + } + + // Multi media may be applied, the latter defined media has higher priority. + for (var i = 0, len = mediaList.length; i < len; i++) { + if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) { + indices.push(i); + } + } + + // FIXME + // 是否mediaDefault应该强制用户设置,否则可能修改不能回归。 + if (!indices.length && mediaDefault) { + indices = [-1]; + } + + if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) { + result = map$1(indices, function (index) { + return clone$3( + index === -1 ? mediaDefault.option : mediaList[index].option + ); + }); + } + // Otherwise return nothing. + + this._currentMediaIndices = indices; + + return result; + } +}; + +function parseRawOption(rawOption, optionPreprocessorFuncs, isNew) { + var timelineOptions = []; + var mediaList = []; + var mediaDefault; + var baseOption; + + // Compatible with ec2. + var timelineOpt = rawOption.timeline; + + if (rawOption.baseOption) { + baseOption = rawOption.baseOption; + } + + // For timeline + if (timelineOpt || rawOption.options) { + baseOption = baseOption || {}; + timelineOptions = (rawOption.options || []).slice(); + } + + // For media query + if (rawOption.media) { + baseOption = baseOption || {}; + var media = rawOption.media; + each$4(media, function (singleMedia) { + if (singleMedia && singleMedia.option) { + if (singleMedia.query) { + mediaList.push(singleMedia); + } + else if (!mediaDefault) { + // Use the first media default. + mediaDefault = singleMedia; + } + } + }); + } + + // For normal option + if (!baseOption) { + baseOption = rawOption; + } + + // Set timelineOpt to baseOption in ec3, + // which is convenient for merge option. + if (!baseOption.timeline) { + baseOption.timeline = timelineOpt; + } + + // Preprocess. + each$4([baseOption].concat(timelineOptions) + .concat(map(mediaList, function (media) { + return media.option; + })), + function (option) { + each$4(optionPreprocessorFuncs, function (preProcess) { + preProcess(option, isNew); + }); + } + ); + + return { + baseOption: baseOption, + timelineOptions: timelineOptions, + mediaDefault: mediaDefault, + mediaList: mediaList + }; +} + +/** + * @see + * Support: width, height, aspectRatio + * Can use max or min as prefix. + */ +function applyMediaQuery(query, ecWidth, ecHeight) { + var realMap = { + width: ecWidth, + height: ecHeight, + aspectratio: ecWidth / ecHeight // lowser case for convenientce. + }; + + var applicatable = true; + + each$1(query, function (value, attr) { + var matched = attr.match(QUERY_REG); + + if (!matched || !matched[1] || !matched[2]) { + return; + } + + var operator = matched[1]; + var realAttr = matched[2].toLowerCase(); + + if (!compare(realMap[realAttr], value, operator)) { + applicatable = false; + } + }); + + return applicatable; +} + +function compare(real, expect, operator) { + if (operator === 'min') { + return real >= expect; + } + else if (operator === 'max') { + return real <= expect; + } + else { // Equals + return real === expect; + } +} + +function indicesEquals(indices1, indices2) { + // indices is always order by asc and has only finite number. + return indices1.join(',') === indices2.join(','); +} + +/** + * Consider case: + * `chart.setOption(opt1);` + * Then user do some interaction like dataZoom, dataView changing. + * `chart.setOption(opt2);` + * Then user press 'reset button' in toolbox. + * + * After doing that all of the interaction effects should be reset, the + * chart should be the same as the result of invoke + * `chart.setOption(opt1); chart.setOption(opt2);`. + * + * Although it is not able ensure that + * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to + * `chart.setOption(merge(opt1, opt2));` exactly, + * this might be the only simple way to implement that feature. + * + * MEMO: We've considered some other approaches: + * 1. Each model handle its self restoration but not uniform treatment. + * (Too complex in logic and error-prone) + * 2. Use a shadow ecModel. (Performace expensive) + */ +function mergeOption(oldOption, newOption) { + newOption = newOption || {}; + + each$4(newOption, function (newCptOpt, mainType) { + if (newCptOpt == null) { + return; + } + + var oldCptOpt = oldOption[mainType]; + + if (!ComponentModel.hasClass(mainType)) { + oldOption[mainType] = merge$1(oldCptOpt, newCptOpt, true); + } + else { + newCptOpt = normalizeToArray(newCptOpt); + oldCptOpt = normalizeToArray(oldCptOpt); + + var mapResult = mappingToExists(oldCptOpt, newCptOpt); + + oldOption[mainType] = map$1(mapResult, function (item) { + return (item.option && item.exist) + ? merge$1(item.exist, item.option, true) + : (item.exist || item.option); + }); + } + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$5 = each$1; +var isObject$3 = isObject$1; + +var POSSIBLE_STYLES = [ + 'areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', + 'chordStyle', 'label', 'labelLine' +]; + +function compatEC2ItemStyle(opt) { + var itemStyleOpt = opt && opt.itemStyle; + if (!itemStyleOpt) { + return; + } + for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) { + var styleName = POSSIBLE_STYLES[i]; + var normalItemStyleOpt = itemStyleOpt.normal; + var emphasisItemStyleOpt = itemStyleOpt.emphasis; + if (normalItemStyleOpt && normalItemStyleOpt[styleName]) { + opt[styleName] = opt[styleName] || {}; + if (!opt[styleName].normal) { + opt[styleName].normal = normalItemStyleOpt[styleName]; + } + else { + merge(opt[styleName].normal, normalItemStyleOpt[styleName]); + } + normalItemStyleOpt[styleName] = null; + } + if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) { + opt[styleName] = opt[styleName] || {}; + if (!opt[styleName].emphasis) { + opt[styleName].emphasis = emphasisItemStyleOpt[styleName]; + } + else { + merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]); + } + emphasisItemStyleOpt[styleName] = null; + } + } +} + +function convertNormalEmphasis(opt, optType, useExtend) { + if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) { + var normalOpt = opt[optType].normal; + var emphasisOpt = opt[optType].emphasis; + + if (normalOpt) { + // Timeline controlStyle has other properties besides normal and emphasis + if (useExtend) { + opt[optType].normal = opt[optType].emphasis = null; + defaults(opt[optType], normalOpt); + } + else { + opt[optType] = normalOpt; + } + } + if (emphasisOpt) { + opt.emphasis = opt.emphasis || {}; + opt.emphasis[optType] = emphasisOpt; + } + } +} +function removeEC3NormalStatus(opt) { + convertNormalEmphasis(opt, 'itemStyle'); + convertNormalEmphasis(opt, 'lineStyle'); + convertNormalEmphasis(opt, 'areaStyle'); + convertNormalEmphasis(opt, 'label'); + convertNormalEmphasis(opt, 'labelLine'); + // treemap + convertNormalEmphasis(opt, 'upperLabel'); + // graph + convertNormalEmphasis(opt, 'edgeLabel'); +} + +function compatTextStyle(opt, propName) { + // Check whether is not object (string\null\undefined ...) + var labelOptSingle = isObject$3(opt) && opt[propName]; + var textStyle = isObject$3(labelOptSingle) && labelOptSingle.textStyle; + if (textStyle) { + for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) { + var propName = TEXT_STYLE_OPTIONS[i]; + if (textStyle.hasOwnProperty(propName)) { + labelOptSingle[propName] = textStyle[propName]; + } + } + } +} + +function compatEC3CommonStyles(opt) { + if (opt) { + removeEC3NormalStatus(opt); + compatTextStyle(opt, 'label'); + opt.emphasis && compatTextStyle(opt.emphasis, 'label'); + } +} + +function processSeries(seriesOpt) { + if (!isObject$3(seriesOpt)) { + return; + } + + compatEC2ItemStyle(seriesOpt); + removeEC3NormalStatus(seriesOpt); + + compatTextStyle(seriesOpt, 'label'); + // treemap + compatTextStyle(seriesOpt, 'upperLabel'); + // graph + compatTextStyle(seriesOpt, 'edgeLabel'); + if (seriesOpt.emphasis) { + compatTextStyle(seriesOpt.emphasis, 'label'); + // treemap + compatTextStyle(seriesOpt.emphasis, 'upperLabel'); + // graph + compatTextStyle(seriesOpt.emphasis, 'edgeLabel'); + } + + var markPoint = seriesOpt.markPoint; + if (markPoint) { + compatEC2ItemStyle(markPoint); + compatEC3CommonStyles(markPoint); + } + + var markLine = seriesOpt.markLine; + if (markLine) { + compatEC2ItemStyle(markLine); + compatEC3CommonStyles(markLine); + } + + var markArea = seriesOpt.markArea; + if (markArea) { + compatEC3CommonStyles(markArea); + } + + var data = seriesOpt.data; + + // Break with ec3: if `setOption` again, there may be no `type` in option, + // then the backward compat based on option type will not be performed. + + if (seriesOpt.type === 'graph') { + data = data || seriesOpt.nodes; + var edgeData = seriesOpt.links || seriesOpt.edges; + if (edgeData && !isTypedArray(edgeData)) { + for (var i = 0; i < edgeData.length; i++) { + compatEC3CommonStyles(edgeData[i]); + } + } + each$1(seriesOpt.categories, function (opt) { + removeEC3NormalStatus(opt); + }); + } + + if (data && !isTypedArray(data)) { + for (var i = 0; i < data.length; i++) { + compatEC3CommonStyles(data[i]); + } + } + + // mark point data + var markPoint = seriesOpt.markPoint; + if (markPoint && markPoint.data) { + var mpData = markPoint.data; + for (var i = 0; i < mpData.length; i++) { + compatEC3CommonStyles(mpData[i]); + } + } + // mark line data + var markLine = seriesOpt.markLine; + if (markLine && markLine.data) { + var mlData = markLine.data; + for (var i = 0; i < mlData.length; i++) { + if (isArray(mlData[i])) { + compatEC3CommonStyles(mlData[i][0]); + compatEC3CommonStyles(mlData[i][1]); + } + else { + compatEC3CommonStyles(mlData[i]); + } + } + } + + // Series + if (seriesOpt.type === 'gauge') { + compatTextStyle(seriesOpt, 'axisLabel'); + compatTextStyle(seriesOpt, 'title'); + compatTextStyle(seriesOpt, 'detail'); + } + else if (seriesOpt.type === 'treemap') { + convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle'); + each$1(seriesOpt.levels, function (opt) { + removeEC3NormalStatus(opt); + }); + } + else if (seriesOpt.type === 'tree') { + removeEC3NormalStatus(seriesOpt.leaves); + } + // sunburst starts from ec4, so it does not need to compat levels. +} + +function toArr(o) { + return isArray(o) ? o : o ? [o] : []; +} + +function toObj(o) { + return (isArray(o) ? o[0] : o) || {}; +} + +var compatStyle = function (option, isTheme) { + each$5(toArr(option.series), function (seriesOpt) { + isObject$3(seriesOpt) && processSeries(seriesOpt); + }); + + var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar']; + isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis'); + + each$5( + axes, + function (axisName) { + each$5(toArr(option[axisName]), function (axisOpt) { + if (axisOpt) { + compatTextStyle(axisOpt, 'axisLabel'); + compatTextStyle(axisOpt.axisPointer, 'label'); + } + }); + } + ); + + each$5(toArr(option.parallel), function (parallelOpt) { + var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault; + compatTextStyle(parallelAxisDefault, 'axisLabel'); + compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label'); + }); + + each$5(toArr(option.calendar), function (calendarOpt) { + convertNormalEmphasis(calendarOpt, 'itemStyle'); + compatTextStyle(calendarOpt, 'dayLabel'); + compatTextStyle(calendarOpt, 'monthLabel'); + compatTextStyle(calendarOpt, 'yearLabel'); + }); + + // radar.name.textStyle + each$5(toArr(option.radar), function (radarOpt) { + compatTextStyle(radarOpt, 'name'); + }); + + each$5(toArr(option.geo), function (geoOpt) { + if (isObject$3(geoOpt)) { + compatEC3CommonStyles(geoOpt); + each$5(toArr(geoOpt.regions), function (regionObj) { + compatEC3CommonStyles(regionObj); + }); + } + }); + + each$5(toArr(option.timeline), function (timelineOpt) { + compatEC3CommonStyles(timelineOpt); + convertNormalEmphasis(timelineOpt, 'label'); + convertNormalEmphasis(timelineOpt, 'itemStyle'); + convertNormalEmphasis(timelineOpt, 'controlStyle', true); + + var data = timelineOpt.data; + isArray(data) && each$1(data, function (item) { + if (isObject$1(item)) { + convertNormalEmphasis(item, 'label'); + convertNormalEmphasis(item, 'itemStyle'); + } + }); + }); + + each$5(toArr(option.toolbox), function (toolboxOpt) { + convertNormalEmphasis(toolboxOpt, 'iconStyle'); + each$5(toolboxOpt.feature, function (featureOpt) { + convertNormalEmphasis(featureOpt, 'iconStyle'); + }); + }); + + compatTextStyle(toObj(option.axisPointer), 'label'); + compatTextStyle(toObj(option.tooltip).axisPointer, 'label'); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Compatitable with 2.0 + +function get(opt, path) { + path = path.split(','); + var obj = opt; + for (var i = 0; i < path.length; i++) { + obj = obj && obj[path[i]]; + if (obj == null) { + break; + } + } + return obj; +} + +function set$1(opt, path, val, overwrite) { + path = path.split(','); + var obj = opt; + var key; + for (var i = 0; i < path.length - 1; i++) { + key = path[i]; + if (obj[key] == null) { + obj[key] = {}; + } + obj = obj[key]; + } + if (overwrite || obj[path[i]] == null) { + obj[path[i]] = val; + } +} + +function compatLayoutProperties(option) { + each$1(LAYOUT_PROPERTIES, function (prop) { + if (prop[0] in option && !(prop[1] in option)) { + option[prop[1]] = option[prop[0]]; + } + }); +} + +var LAYOUT_PROPERTIES = [ + ['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom'] +]; + +var COMPATITABLE_COMPONENTS = [ + 'grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline' +]; + +var backwardCompat = function (option, isTheme) { + compatStyle(option, isTheme); + + // Make sure series array for model initialization. + option.series = normalizeToArray(option.series); + + each$1(option.series, function (seriesOpt) { + if (!isObject$1(seriesOpt)) { + return; + } + + var seriesType = seriesOpt.type; + + if (seriesType === 'pie' || seriesType === 'gauge') { + if (seriesOpt.clockWise != null) { + seriesOpt.clockwise = seriesOpt.clockWise; + } + } + if (seriesType === 'gauge') { + var pointerColor = get(seriesOpt, 'pointer.color'); + pointerColor != null + && set$1(seriesOpt, 'itemStyle.normal.color', pointerColor); + } + + compatLayoutProperties(seriesOpt); + }); + + // dataRange has changed to visualMap + if (option.dataRange) { + option.visualMap = option.dataRange; + } + + each$1(COMPATITABLE_COMPONENTS, function (componentName) { + var options = option[componentName]; + if (options) { + if (!isArray(options)) { + options = [options]; + } + each$1(options, function (option) { + compatLayoutProperties(option); + }); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// (1) [Caution]: the logic is correct based on the premises: +// data processing stage is blocked in stream. +// See +// (2) Only register once when import repeatly. +// Should be executed before after series filtered and before stack calculation. +var dataStack = function (ecModel) { + var stackInfoMap = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var stack = seriesModel.get('stack'); + // Compatibal: when `stack` is set as '', do not stack. + if (stack) { + var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []); + var data = seriesModel.getData(); + + var stackInfo = { + // Used for calculate axis extent automatically. + stackResultDimension: data.getCalculationInfo('stackResultDimension'), + stackedOverDimension: data.getCalculationInfo('stackedOverDimension'), + stackedDimension: data.getCalculationInfo('stackedDimension'), + stackedByDimension: data.getCalculationInfo('stackedByDimension'), + isStackedByIndex: data.getCalculationInfo('isStackedByIndex'), + data: data, + seriesModel: seriesModel + }; + + // If stacked on axis that do not support data stack. + if (!stackInfo.stackedDimension + || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension) + ) { + return; + } + + stackInfoList.length && data.setCalculationInfo( + 'stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel + ); + + stackInfoList.push(stackInfo); + } + }); + + stackInfoMap.each(calculateStack); +}; + +function calculateStack(stackInfoList) { + each$1(stackInfoList, function (targetStackInfo, idxInStack) { + var resultVal = []; + var resultNaN = [NaN, NaN]; + var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension]; + var targetData = targetStackInfo.data; + var isStackedByIndex = targetStackInfo.isStackedByIndex; + + // Should not write on raw data, because stack series model list changes + // depending on legend selection. + var newData = targetData.map(dims, function (v0, v1, dataIndex) { + var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); + + // Consider `connectNulls` of line area, if value is NaN, stackedOver + // should also be NaN, to draw a appropriate belt area. + if (isNaN(sum)) { + return resultNaN; + } + + var byValue; + var stackedDataRawIndex; + + if (isStackedByIndex) { + stackedDataRawIndex = targetData.getRawIndex(dataIndex); + } + else { + byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex); + } + + // If stackOver is NaN, chart view will render point on value start. + var stackedOver = NaN; + + for (var j = idxInStack - 1; j >= 0; j--) { + var stackInfo = stackInfoList[j]; + + // Has been optimized by inverted indices on `stackedByDimension`. + if (!isStackedByIndex) { + stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue); + } + + if (stackedDataRawIndex >= 0) { + var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex); + + // Considering positive stack, negative stack and empty data + if ((sum >= 0 && val > 0) // Positive stack + || (sum <= 0 && val < 0) // Negative stack + ) { + sum += val; + stackedOver = val; + break; + } + } + } + + resultVal[0] = sum; + resultVal[1] = stackedOver; + + return resultVal; + }); + + targetData.hostModel.setData(newData); + // Update for consequent calculation + targetStackInfo.data = newData; + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO +// ??? refactor? check the outer usage of data provider. +// merge with defaultDimValueGetter? + +/** + * If normal array used, mutable chunk size is supported. + * If typed array used, chunk size must be fixed. + */ +function DefaultDataProvider(source, dimSize) { + if (!Source.isInstance(source)) { + source = Source.seriesDataToSource(source); + } + this._source = source; + + var data = this._data = source.data; + var sourceFormat = source.sourceFormat; + + // Typed array. TODO IE10+? + if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { + if (__DEV__) { + if (dimSize == null) { + throw new Error('Typed array data must specify dimension size'); + } + } + this._offset = 0; + this._dimSize = dimSize; + this._data = data; + } + + var methods = providerMethods[ + sourceFormat === SOURCE_FORMAT_ARRAY_ROWS + ? sourceFormat + '_' + source.seriesLayoutBy + : sourceFormat + ]; + + if (__DEV__) { + assert$1(methods, 'Invalide sourceFormat: ' + sourceFormat); + } + + extend(this, methods); +} + +var providerProto = DefaultDataProvider.prototype; +// If data is pure without style configuration +providerProto.pure = false; +// If data is persistent and will not be released after use. +providerProto.persistent = true; + +// ???! FIXME legacy data provider do not has method getSource +providerProto.getSource = function () { + return this._source; +}; + +var providerMethods = { + + 'arrayRows_column': { + pure: true, + count: function () { + return Math.max(0, this._data.length - this._source.startIndex); + }, + getItem: function (idx) { + return this._data[idx + this._source.startIndex]; + }, + appendData: appendDataSimply + }, + + 'arrayRows_row': { + pure: true, + count: function () { + var row = this._data[0]; + return row ? Math.max(0, row.length - this._source.startIndex) : 0; + }, + getItem: function (idx) { + idx += this._source.startIndex; + var item = []; + var data = this._data; + for (var i = 0; i < data.length; i++) { + var row = data[i]; + item.push(row ? row[idx] : null); + } + return item; + }, + appendData: function () { + throw new Error('Do not support appendData when set seriesLayoutBy: "row".'); + } + }, + + 'objectRows': { + pure: true, + count: countSimply, + getItem: getItemSimply, + appendData: appendDataSimply + }, + + 'keyedColumns': { + pure: true, + count: function () { + var dimName = this._source.dimensionsDefine[0].name; + var col = this._data[dimName]; + return col ? col.length : 0; + }, + getItem: function (idx) { + var item = []; + var dims = this._source.dimensionsDefine; + for (var i = 0; i < dims.length; i++) { + var col = this._data[dims[i].name]; + item.push(col ? col[idx] : null); + } + return item; + }, + appendData: function (newData) { + var data = this._data; + each$1(newData, function (newCol, key) { + var oldCol = data[key] || (data[key] = []); + for (var i = 0; i < (newCol || []).length; i++) { + oldCol.push(newCol[i]); + } + }); + } + }, + + 'original': { + count: countSimply, + getItem: getItemSimply, + appendData: appendDataSimply + }, + + 'typedArray': { + persistent: false, + pure: true, + count: function () { + return this._data ? (this._data.length / this._dimSize) : 0; + }, + getItem: function (idx, out) { + idx = idx - this._offset; + out = out || []; + var offset = this._dimSize * idx; + for (var i = 0; i < this._dimSize; i++) { + out[i] = this._data[offset + i]; + } + return out; + }, + appendData: function (newData) { + if (__DEV__) { + assert$1( + isTypedArray(newData), + 'Added data must be TypedArray if data in initialization is TypedArray' + ); + } + + this._data = newData; + }, + + // Clean self if data is already used. + clean: function () { + // PENDING + this._offset += this.count(); + this._data = null; + } + } +}; + +function countSimply() { + return this._data.length; +} +function getItemSimply(idx) { + return this._data[idx]; +} +function appendDataSimply(newData) { + for (var i = 0; i < newData.length; i++) { + this._data.push(newData[i]); + } +} + + + +var rawValueGetters = { + + arrayRows: getRawValueSimply, + + objectRows: function (dataItem, dataIndex, dimIndex, dimName) { + return dimIndex != null ? dataItem[dimName] : dataItem; + }, + + keyedColumns: getRawValueSimply, + + original: function (dataItem, dataIndex, dimIndex, dimName) { + // FIXME + // In some case (markpoint in geo (geo-map.html)), dataItem + // is {coord: [...]} + var value = getDataItemValue(dataItem); + return (dimIndex == null || !(value instanceof Array)) + ? value + : value[dimIndex]; + }, + + typedArray: getRawValueSimply +}; + +function getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) { + return dimIndex != null ? dataItem[dimIndex] : dataItem; +} + + +var defaultDimValueGetters = { + + arrayRows: getDimValueSimply, + + objectRows: function (dataItem, dimName, dataIndex, dimIndex) { + return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]); + }, + + keyedColumns: getDimValueSimply, + + original: function (dataItem, dimName, dataIndex, dimIndex) { + // Performance sensitive, do not use modelUtil.getDataItemValue. + // If dataItem is an plain object with no value field, the var `value` + // will be assigned with the object, but it will be tread correctly + // in the `convertDataValue`. + var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value); + + // If any dataItem is like { value: 10 } + if (!this._rawData.pure && isDataItemOption(dataItem)) { + this.hasItemOption = true; + } + return converDataValue( + (value instanceof Array) + ? value[dimIndex] + // If value is a single number or something else not array. + : value, + this._dimensionInfos[dimName] + ); + }, + + typedArray: function (dataItem, dimName, dataIndex, dimIndex) { + return dataItem[dimIndex]; + } + +}; + +function getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) { + return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]); +} + +/** + * This helper method convert value in data. + * @param {string|number|Date} value + * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'. + * If "dimInfo.ordinalParseAndSave", ordinal value can be parsed. + */ +function converDataValue(value, dimInfo) { + // Performance sensitive. + var dimType = dimInfo && dimInfo.type; + if (dimType === 'ordinal') { + // If given value is a category string + var ordinalMeta = dimInfo && dimInfo.ordinalMeta; + return ordinalMeta + ? ordinalMeta.parseAndCollect(value) + : value; + } + + if (dimType === 'time' + // spead up when using timestamp + && typeof value !== 'number' + && value != null + && value !== '-' + ) { + value = +parseDate(value); + } + + // dimType defaults 'number'. + // If dimType is not ordinal and value is null or undefined or NaN or '-', + // parse to NaN. + return (value == null || value === '') + ? NaN + // If string (like '-'), using '+' parse to NaN + // If object, also parse to NaN + : +value; +} + +// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem, +// Consider persistent. +// Caution: why use raw value to display on label or tooltip? +// A reason is to avoid format. For example time value we do not know +// how to format is expected. More over, if stack is used, calculated +// value may be 0.91000000001, which have brings trouble to display. +// TODO: consider how to treat null/undefined/NaN when display? +/** + * @param {module:echarts/data/List} data + * @param {number} dataIndex + * @param {string|number} [dim] dimName or dimIndex + * @return {Array.|string|number} can be null/undefined. + */ +function retrieveRawValue(data, dataIndex, dim) { + if (!data) { + return; + } + + // Consider data may be not persistent. + var dataItem = data.getRawDataItem(dataIndex); + + if (dataItem == null) { + return; + } + + var sourceFormat = data.getProvider().getSource().sourceFormat; + var dimName; + var dimIndex; + + var dimInfo = data.getDimensionInfo(dim); + if (dimInfo) { + dimName = dimInfo.name; + dimIndex = dimInfo.index; + } + + return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName); +} + +/** + * Compatible with some cases (in pie, map) like: + * data: [{name: 'xx', value: 5, selected: true}, ...] + * where only sourceFormat is 'original' and 'objectRows' supported. + * + * ??? TODO + * Supported detail options in data item when using 'arrayRows'. + * + * @param {module:echarts/data/List} data + * @param {number} dataIndex + * @param {string} attr like 'selected' + */ +function retrieveRawAttr(data, dataIndex, attr) { + if (!data) { + return; + } + + var sourceFormat = data.getProvider().getSource().sourceFormat; + + if (sourceFormat !== SOURCE_FORMAT_ORIGINAL + && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS + ) { + return; + } + + var dataItem = data.getRawDataItem(dataIndex); + if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject$1(dataItem)) { + dataItem = null; + } + if (dataItem) { + return dataItem[attr]; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var DIMENSION_LABEL_REG = /\{@(.+?)\}/g; + +// PENDING A little ugly +var dataFormatMixin = { + /** + * Get params for formatter + * @param {number} dataIndex + * @param {string} [dataType] + * @return {Object} + */ + getDataParams: function (dataIndex, dataType) { + var data = this.getData(dataType); + var rawValue = this.getRawValue(dataIndex, dataType); + var rawDataIndex = data.getRawIndex(dataIndex); + var name = data.getName(dataIndex); + var itemOpt = data.getRawDataItem(dataIndex); + var color = data.getItemVisual(dataIndex, 'color'); + var tooltipModel = this.ecModel.getComponent('tooltip'); + var renderModeOption = tooltipModel && tooltipModel.get('renderMode'); + var renderMode = getTooltipRenderMode(renderModeOption); + var mainType = this.mainType; + var isSeries = mainType === 'series'; + + return { + componentType: mainType, + componentSubType: this.subType, + componentIndex: this.componentIndex, + seriesType: isSeries ? this.subType : null, + seriesIndex: this.seriesIndex, + seriesId: isSeries ? this.id : null, + seriesName: isSeries ? this.name : null, + name: name, + dataIndex: rawDataIndex, + data: itemOpt, + dataType: dataType, + value: rawValue, + color: color, + marker: getTooltipMarker({ + color: color, + renderMode: renderMode + }), + + // Param name list for mapping `a`, `b`, `c`, `d`, `e` + $vars: ['seriesName', 'name', 'value'] + }; + }, + + /** + * Format label + * @param {number} dataIndex + * @param {string} [status='normal'] 'normal' or 'emphasis' + * @param {string} [dataType] + * @param {number} [dimIndex] + * @param {string} [labelProp='label'] + * @return {string} If not formatter, return null/undefined + */ + getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) { + status = status || 'normal'; + var data = this.getData(dataType); + var itemModel = data.getItemModel(dataIndex); + + var params = this.getDataParams(dataIndex, dataType); + if (dimIndex != null && (params.value instanceof Array)) { + params.value = params.value[dimIndex]; + } + + var formatter = itemModel.get( + status === 'normal' + ? [labelProp || 'label', 'formatter'] + : [status, labelProp || 'label', 'formatter'] + ); + + if (typeof formatter === 'function') { + params.status = status; + return formatter(params); + } + else if (typeof formatter === 'string') { + var str = formatTpl(formatter, params); + + // Support 'aaa{@[3]}bbb{@product}ccc'. + // Do not support '}' in dim name util have to. + return str.replace(DIMENSION_LABEL_REG, function (origin, dim) { + var len = dim.length; + if (dim.charAt(0) === '[' && dim.charAt(len - 1) === ']') { + dim = +dim.slice(1, len - 1); // Also: '[]' => 0 + } + return retrieveRawValue(data, dataIndex, dim); + }); + } + }, + + /** + * Get raw value in option + * @param {number} idx + * @param {string} [dataType] + * @return {Array|number|string} + */ + getRawValue: function (idx, dataType) { + return retrieveRawValue(this.getData(dataType), idx); + }, + + /** + * Should be implemented. + * @param {number} dataIndex + * @param {boolean} [multipleSeries=false] + * @param {number} [dataType] + * @return {string} tooltip string + */ + formatTooltip: function () { + // Empty function + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {Object} define + * @return See the return of `createTask`. + */ +function createTask(define) { + return new Task(define); +} + +/** + * @constructor + * @param {Object} define + * @param {Function} define.reset Custom reset + * @param {Function} [define.plan] Returns 'reset' indicate reset immediately. + * @param {Function} [define.count] count is used to determin data task. + * @param {Function} [define.onDirty] count is used to determin data task. + */ +function Task(define) { + define = define || {}; + + this._reset = define.reset; + this._plan = define.plan; + this._count = define.count; + this._onDirty = define.onDirty; + + this._dirty = true; + + // Context must be specified implicitly, to + // avoid miss update context when model changed. + this.context; +} + +var taskProto = Task.prototype; + +/** + * @param {Object} performArgs + * @param {number} [performArgs.step] Specified step. + * @param {number} [performArgs.skip] Skip customer perform call. + * @param {number} [performArgs.modBy] Sampling window size. + * @param {number} [performArgs.modDataCount] Sampling count. + */ +taskProto.perform = function (performArgs) { + var upTask = this._upstream; + var skip = performArgs && performArgs.skip; + + // TODO some refactor. + // Pull data. Must pull data each time, because context.data + // may be updated by Series.setData. + if (this._dirty && upTask) { + var context = this.context; + context.data = context.outputData = upTask.context.outputData; + } + + if (this.__pipeline) { + this.__pipeline.currentTask = this; + } + + var planResult; + if (this._plan && !skip) { + planResult = this._plan(this.context); + } + + // Support sharding by mod, which changes the render sequence and makes the rendered graphic + // elements uniformed distributed when progress, especially when moving or zooming. + var lastModBy = normalizeModBy(this._modBy); + var lastModDataCount = this._modDataCount || 0; + var modBy = normalizeModBy(performArgs && performArgs.modBy); + var modDataCount = performArgs && performArgs.modDataCount || 0; + if (lastModBy !== modBy || lastModDataCount !== modDataCount) { + planResult = 'reset'; + } + + function normalizeModBy(val) { + !(val >= 1) && (val = 1); // jshint ignore:line + return val; + } + + var forceFirstProgress; + if (this._dirty || planResult === 'reset') { + this._dirty = false; + forceFirstProgress = reset(this, skip); + } + + this._modBy = modBy; + this._modDataCount = modDataCount; + + var step = performArgs && performArgs.step; + + if (upTask) { + + if (__DEV__) { + assert$1(upTask._outputDueEnd != null); + } + this._dueEnd = upTask._outputDueEnd; + } + // DataTask or overallTask + else { + if (__DEV__) { + assert$1(!this._progress || this._count); + } + this._dueEnd = this._count ? this._count(this.context) : Infinity; + } + + // Note: Stubs, that its host overall task let it has progress, has progress. + // If no progress, pass index from upstream to downstream each time plan called. + if (this._progress) { + var start = this._dueIndex; + var end = Math.min( + step != null ? this._dueIndex + step : Infinity, + this._dueEnd + ); + + if (!skip && (forceFirstProgress || start < end)) { + var progress = this._progress; + if (isArray(progress)) { + for (var i = 0; i < progress.length; i++) { + doProgress(this, progress[i], start, end, modBy, modDataCount); + } + } + else { + doProgress(this, progress, start, end, modBy, modDataCount); + } + } + + this._dueIndex = end; + // If no `outputDueEnd`, assume that output data and + // input data is the same, so use `dueIndex` as `outputDueEnd`. + var outputDueEnd = this._settedOutputEnd != null + ? this._settedOutputEnd : end; + + if (__DEV__) { + // ??? Can not rollback. + assert$1(outputDueEnd >= this._outputDueEnd); + } + + this._outputDueEnd = outputDueEnd; + } + else { + // (1) Some overall task has no progress. + // (2) Stubs, that its host overall task do not let it has progress, has no progress. + // This should always be performed so it can be passed to downstream. + this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null + ? this._settedOutputEnd : this._dueEnd; + } + + return this.unfinished(); +}; + +var iterator = (function () { + + var end; + var current; + var modBy; + var modDataCount; + var winCount; + + var it = { + reset: function (s, e, sStep, sCount) { + current = s; + end = e; + + modBy = sStep; + modDataCount = sCount; + winCount = Math.ceil(modDataCount / modBy); + + it.next = (modBy > 1 && modDataCount > 0) ? modNext : sequentialNext; + } + }; + + return it; + + function sequentialNext() { + return current < end ? current++ : null; + } + + function modNext() { + var dataIndex = (current % winCount) * modBy + Math.ceil(current / winCount); + var result = current >= end + ? null + : dataIndex < modDataCount + ? dataIndex + // If modDataCount is smaller than data.count() (consider `appendData` case), + // Use normal linear rendering mode. + : current; + current++; + return result; + } +})(); + +taskProto.dirty = function () { + this._dirty = true; + this._onDirty && this._onDirty(this.context); +}; + +function doProgress(taskIns, progress, start, end, modBy, modDataCount) { + iterator.reset(start, end, modBy, modDataCount); + taskIns._callingProgress = progress; + taskIns._callingProgress({ + start: start, end: end, count: end - start, next: iterator.next + }, taskIns.context); +} + +function reset(taskIns, skip) { + taskIns._dueIndex = taskIns._outputDueEnd = taskIns._dueEnd = 0; + taskIns._settedOutputEnd = null; + + var progress; + var forceFirstProgress; + + if (!skip && taskIns._reset) { + progress = taskIns._reset(taskIns.context); + if (progress && progress.progress) { + forceFirstProgress = progress.forceFirstProgress; + progress = progress.progress; + } + // To simplify no progress checking, array must has item. + if (isArray(progress) && !progress.length) { + progress = null; + } + } + + taskIns._progress = progress; + taskIns._modBy = taskIns._modDataCount = null; + + var downstream = taskIns._downstream; + downstream && downstream.dirty(); + + return forceFirstProgress; +} + +/** + * @return {boolean} + */ +taskProto.unfinished = function () { + return this._progress && this._dueIndex < this._dueEnd; +}; + +/** + * @param {Object} downTask The downstream task. + * @return {Object} The downstream task. + */ +taskProto.pipe = function (downTask) { + if (__DEV__) { + assert$1(downTask && !downTask._disposed && downTask !== this); + } + + // If already downstream, do not dirty downTask. + if (this._downstream !== downTask || this._dirty) { + this._downstream = downTask; + downTask._upstream = this; + downTask.dirty(); + } +}; + +taskProto.dispose = function () { + if (this._disposed) { + return; + } + + this._upstream && (this._upstream._downstream = null); + this._downstream && (this._downstream._upstream = null); + + this._dirty = false; + this._disposed = true; +}; + +taskProto.getUpstream = function () { + return this._upstream; +}; + +taskProto.getDownstream = function () { + return this._downstream; +}; + +taskProto.setOutputEnd = function (end) { + // This only happend in dataTask, dataZoom, map, currently. + // where dataZoom do not set end each time, but only set + // when reset. So we should record the setted end, in case + // that the stub of dataZoom perform again and earse the + // setted end by upstream. + this._outputDueEnd = this._settedOutputEnd = end; +}; + + +/////////////////////////////////////////////////////////// +// For stream debug (Should be commented out after used!) +// Usage: printTask(this, 'begin'); +// Usage: printTask(this, null, {someExtraProp}); +// function printTask(task, prefix, extra) { +// window.ecTaskUID == null && (window.ecTaskUID = 0); +// task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`); +// task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`); +// var props = []; +// if (task.__pipeline) { +// var val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`; +// props.push({text: 'idx', value: val}); +// } else { +// var stubCount = 0; +// task.agentStubMap.each(() => stubCount++); +// props.push({text: 'idx', value: `overall (stubs: ${stubCount})`}); +// } +// props.push({text: 'uid', value: task.uidDebug}); +// if (task.__pipeline) { +// props.push({text: 'pid', value: task.__pipeline.id}); +// task.agent && props.push( +// {text: 'stubFor', value: task.agent.uidDebug} +// ); +// } +// props.push( +// {text: 'dirty', value: task._dirty}, +// {text: 'dueIndex', value: task._dueIndex}, +// {text: 'dueEnd', value: task._dueEnd}, +// {text: 'outputDueEnd', value: task._outputDueEnd} +// ); +// if (extra) { +// Object.keys(extra).forEach(key => { +// props.push({text: key, value: extra[key]}); +// }); +// } +// var args = ['color: blue']; +// var msg = `%c[${prefix || 'T'}] %c` + props.map(item => ( +// args.push('color: black', 'color: red'), +// `${item.text}: %c${item.value}` +// )).join('%c, '); +// console.log.apply(console, [msg].concat(args)); +// // console.log(this); +// } + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$4 = makeInner(); + +var SeriesModel = ComponentModel.extend({ + + type: 'series.__base__', + + /** + * @readOnly + */ + seriesIndex: 0, + + // coodinateSystem will be injected in the echarts/CoordinateSystem + coordinateSystem: null, + + /** + * @type {Object} + * @protected + */ + defaultOption: null, + + /** + * Data provided for legend + * @type {Function} + */ + // PENDING + legendDataProvider: null, + + /** + * Access path of color for visual + */ + visualColorAccessPath: 'itemStyle.color', + + /** + * Support merge layout params. + * Only support 'box' now (left/right/top/bottom/width/height). + * @type {string|Object} Object can be {ignoreSize: true} + * @readOnly + */ + layoutMode: null, + + init: function (option, parentModel, ecModel, extraOpt) { + + /** + * @type {number} + * @readOnly + */ + this.seriesIndex = this.componentIndex; + + this.dataTask = createTask({ + count: dataTaskCount, + reset: dataTaskReset + }); + this.dataTask.context = {model: this}; + + this.mergeDefaultAndTheme(option, ecModel); + + prepareSource(this); + + + var data = this.getInitialData(option, ecModel); + wrapData(data, this); + this.dataTask.context.data = data; + + if (__DEV__) { + assert$1(data, 'getInitialData returned invalid data.'); + } + + /** + * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph} + * @private + */ + inner$4(this).dataBeforeProcessed = data; + + // If we reverse the order (make data firstly, and then make + // dataBeforeProcessed by cloneShallow), cloneShallow will + // cause data.graph.data !== data when using + // module:echarts/data/Graph or module:echarts/data/Tree. + // See module:echarts/data/helper/linkList + + // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model + // init or merge stage, because the data can be restored. So we do not `restoreData` + // and `setData` here, which forbids calling `seriesModel.getData()` in this stage. + // Call `seriesModel.getRawData()` instead. + // this.restoreData(); + + autoSeriesName(this); + }, + + /** + * Util for merge default and theme to option + * @param {Object} option + * @param {module:echarts/model/Global} ecModel + */ + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + // Backward compat: using subType on theme. + // But if name duplicate between series subType + // (for example: parallel) add component mainType, + // add suffix 'Series'. + var themeSubType = this.subType; + if (ComponentModel.hasClass(themeSubType)) { + themeSubType += 'Series'; + } + merge( + option, + ecModel.getTheme().get(this.subType) + ); + merge(option, this.getDefaultOption()); + + // Default label emphasis `show` + defaultEmphasis(option, 'label', ['show']); + + this.fillDataTextStyle(option.data); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + mergeOption: function (newSeriesOption, ecModel) { + // this.settingTask.dirty(); + + newSeriesOption = merge(this.option, newSeriesOption, true); + this.fillDataTextStyle(newSeriesOption.data); + + var layoutMode = this.layoutMode; + if (layoutMode) { + mergeLayoutParam(this.option, newSeriesOption, layoutMode); + } + + prepareSource(this); + + var data = this.getInitialData(newSeriesOption, ecModel); + wrapData(data, this); + this.dataTask.dirty(); + this.dataTask.context.data = data; + + inner$4(this).dataBeforeProcessed = data; + + autoSeriesName(this); + }, + + fillDataTextStyle: function (data) { + // Default data label emphasis `show` + // FIXME Tree structure data ? + // FIXME Performance ? + if (data && !isTypedArray(data)) { + var props = ['show']; + for (var i = 0; i < data.length; i++) { + if (data[i] && data[i].label) { + defaultEmphasis(data[i], 'label', props); + } + } + } + }, + + /** + * Init a data structure from data related option in series + * Must be overwritten + */ + getInitialData: function () {}, + + /** + * Append data to list + * @param {Object} params + * @param {Array|TypedArray} params.data + */ + appendData: function (params) { + // FIXME ??? + // (1) If data from dataset, forbidden append. + // (2) support append data of dataset. + var data = this.getRawData(); + data.appendData(params.data); + }, + + /** + * Consider some method like `filter`, `map` need make new data, + * We should make sure that `seriesModel.getData()` get correct + * data in the stream procedure. So we fetch data from upstream + * each time `task.perform` called. + * @param {string} [dataType] + * @return {module:echarts/data/List} + */ + getData: function (dataType) { + var task = getCurrentTask(this); + if (task) { + var data = task.context.data; + return dataType == null ? data : data.getLinkedData(dataType); + } + else { + // When series is not alive (that may happen when click toolbox + // restore or setOption with not merge mode), series data may + // be still need to judge animation or something when graphic + // elements want to know whether fade out. + return inner$4(this).data; + } + }, + + /** + * @param {module:echarts/data/List} data + */ + setData: function (data) { + var task = getCurrentTask(this); + if (task) { + var context = task.context; + // Consider case: filter, data sample. + if (context.data !== data && task.modifyOutputEnd) { + task.setOutputEnd(data.count()); + } + context.outputData = data; + // Caution: setData should update context.data, + // Because getData may be called multiply in a + // single stage and expect to get the data just + // set. (For example, AxisProxy, x y both call + // getData and setDate sequentially). + // So the context.data should be fetched from + // upstream each time when a stage starts to be + // performed. + if (task !== this.dataTask) { + context.data = data; + } + } + inner$4(this).data = data; + }, + + /** + * @see {module:echarts/data/helper/sourceHelper#getSource} + * @return {module:echarts/data/Source} source + */ + getSource: function () { + return getSource(this); + }, + + /** + * Get data before processed + * @return {module:echarts/data/List} + */ + getRawData: function () { + return inner$4(this).dataBeforeProcessed; + }, + + /** + * Get base axis if has coordinate system and has axis. + * By default use coordSys.getBaseAxis(); + * Can be overrided for some chart. + * @return {type} description + */ + getBaseAxis: function () { + var coordSys = this.coordinateSystem; + return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis(); + }, + + // FIXME + /** + * Default tooltip formatter + * + * @param {number} dataIndex + * @param {boolean} [multipleSeries=false] + * @param {number} [dataType] + * @param {string} [renderMode='html'] valid values: 'html' and 'richText'. + * 'html' is used for rendering tooltip in extra DOM form, and the result + * string is used as DOM HTML content. + * 'richText' is used for rendering tooltip in rich text form, for those where + * DOM operation is not supported. + * @return {Object} formatted tooltip with `html` and `markers` + */ + formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) { + + var series = this; + renderMode = renderMode || 'html'; + var newLine = renderMode === 'html' ? '
    ' : '\n'; + var isRichText = renderMode === 'richText'; + var markers = {}; + var markerId = 0; + + function formatArrayValue(value) { + // ??? TODO refactor these logic. + // check: category-no-encode-has-axis-data in dataset.html + var vertially = reduce(value, function (vertially, val, idx) { + var dimItem = data.getDimensionInfo(idx); + return vertially |= dimItem && dimItem.tooltip !== false && dimItem.displayName != null; + }, 0); + + var result = []; + + tooltipDims.length + ? each$1(tooltipDims, function (dim) { + setEachItem(retrieveRawValue(data, dataIndex, dim), dim); + }) + // By default, all dims is used on tooltip. + : each$1(value, setEachItem); + + function setEachItem(val, dim) { + var dimInfo = data.getDimensionInfo(dim); + // If `dimInfo.tooltip` is not set, show tooltip. + if (!dimInfo || dimInfo.otherDims.tooltip === false) { + return; + } + var dimType = dimInfo.type; + var markName = 'sub' + series.seriesIndex + 'at' + markerId; + var dimHead = getTooltipMarker({ + color: color, + type: 'subItem', + renderMode: renderMode, + markerId: markName + }); + + var dimHeadStr = typeof dimHead === 'string' ? dimHead : dimHead.content; + var valStr = (vertially + ? dimHeadStr + encodeHTML(dimInfo.displayName || '-') + ': ' + : '' + ) + // FIXME should not format time for raw data? + + encodeHTML(dimType === 'ordinal' + ? val + '' + : dimType === 'time' + ? (multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val)) + : addCommas(val) + ); + valStr && result.push(valStr); + + if (isRichText) { + markers[markName] = color; + ++markerId; + } + } + + var newLine = vertially ? (isRichText ? '\n' : '
    ') : ''; + var content = newLine + result.join(newLine || ', '); + return { + renderMode: renderMode, + content: content, + style: markers + }; + } + + function formatSingleValue(val) { + // return encodeHTML(addCommas(val)); + return { + renderMode: renderMode, + content: encodeHTML(addCommas(val)), + style: markers + }; + } + + var data = this.getData(); + var tooltipDims = data.mapDimension('defaultedTooltip', true); + var tooltipDimLen = tooltipDims.length; + var value = this.getRawValue(dataIndex); + var isValueArr = isArray(value); + + var color = data.getItemVisual(dataIndex, 'color'); + if (isObject$1(color) && color.colorStops) { + color = (color.colorStops[0] || {}).color; + } + color = color || 'transparent'; + + // Complicated rule for pretty tooltip. + var formattedValue = (tooltipDimLen > 1 || (isValueArr && !tooltipDimLen)) + ? formatArrayValue(value) + : tooltipDimLen + ? formatSingleValue(retrieveRawValue(data, dataIndex, tooltipDims[0])) + : formatSingleValue(isValueArr ? value[0] : value); + var content = formattedValue.content; + + var markName = series.seriesIndex + 'at' + markerId; + var colorEl = getTooltipMarker({ + color: color, + type: 'item', + renderMode: renderMode, + markerId: markName + }); + markers[markName] = color; + ++markerId; + + var name = data.getName(dataIndex); + + var seriesName = this.name; + if (!isNameSpecified(this)) { + seriesName = ''; + } + seriesName = seriesName + ? encodeHTML(seriesName) + (!multipleSeries ? newLine : ': ') + : ''; + + var colorStr = typeof colorEl === 'string' ? colorEl : colorEl.content; + var html = !multipleSeries + ? seriesName + colorStr + + (name + ? encodeHTML(name) + ': ' + content + : content + ) + : colorStr + seriesName + content; + + return { + html: html, + markers: markers + }; + }, + + /** + * @return {boolean} + */ + isAnimationEnabled: function () { + if (env$1.node) { + return false; + } + + var animationEnabled = this.getShallow('animation'); + if (animationEnabled) { + if (this.getData().count() > this.getShallow('animationThreshold')) { + animationEnabled = false; + } + } + return animationEnabled; + }, + + restoreData: function () { + this.dataTask.dirty(); + }, + + getColorFromPalette: function (name, scope, requestColorNum) { + var ecModel = this.ecModel; + // PENDING + var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope, requestColorNum); + if (!color) { + color = ecModel.getColorFromPalette(name, scope, requestColorNum); + } + return color; + }, + + /** + * Use `data.mapDimension(coordDim, true)` instead. + * @deprecated + */ + coordDimToDataDim: function (coordDim) { + return this.getRawData().mapDimension(coordDim, true); + }, + + /** + * Get progressive rendering count each step + * @return {number} + */ + getProgressive: function () { + return this.get('progressive'); + }, + + /** + * Get progressive rendering count each step + * @return {number} + */ + getProgressiveThreshold: function () { + return this.get('progressiveThreshold'); + }, + + /** + * Get data indices for show tooltip content. See tooltip. + * @abstract + * @param {Array.|string} dim + * @param {Array.} value + * @param {module:echarts/coord/single/SingleAxis} baseAxis + * @return {Object} {dataIndices, nestestValue}. + */ + getAxisTooltipData: null, + + /** + * See tooltip. + * @abstract + * @param {number} dataIndex + * @return {Array.} Point of tooltip. null/undefined can be returned. + */ + getTooltipPosition: null, + + /** + * @see {module:echarts/stream/Scheduler} + */ + pipeTask: null, + + /** + * Convinient for override in extended class. + * @protected + * @type {Function} + */ + preventIncremental: null, + + /** + * @public + * @readOnly + * @type {Object} + */ + pipelineContext: null + +}); + + +mixin(SeriesModel, dataFormatMixin); +mixin(SeriesModel, colorPaletteMixin); + +/** + * MUST be called after `prepareSource` called + * Here we need to make auto series, especially for auto legend. But we + * do not modify series.name in option to avoid side effects. + */ +function autoSeriesName(seriesModel) { + // User specified name has higher priority, otherwise it may cause + // series can not be queried unexpectedly. + var name = seriesModel.name; + if (!isNameSpecified(seriesModel)) { + seriesModel.name = getSeriesAutoName(seriesModel) || name; + } +} + +function getSeriesAutoName(seriesModel) { + var data = seriesModel.getRawData(); + var dataDims = data.mapDimension('seriesName', true); + var nameArr = []; + each$1(dataDims, function (dataDim) { + var dimInfo = data.getDimensionInfo(dataDim); + dimInfo.displayName && nameArr.push(dimInfo.displayName); + }); + return nameArr.join(' '); +} + +function dataTaskCount(context) { + return context.model.getRawData().count(); +} + +function dataTaskReset(context) { + var seriesModel = context.model; + seriesModel.setData(seriesModel.getRawData().cloneShallow()); + return dataTaskProgress; +} + +function dataTaskProgress(param, context) { + // Avoid repead cloneShallow when data just created in reset. + if (param.end > context.outputData.count()) { + context.model.getRawData().cloneShallow(context.outputData); + } +} + +// TODO refactor +function wrapData(data, seriesModel) { + each$1(data.CHANGABLE_METHODS, function (methodName) { + data.wrapMethod(methodName, curry(onDataSelfChange, seriesModel)); + }); +} + +function onDataSelfChange(seriesModel) { + var task = getCurrentTask(seriesModel); + if (task) { + // Consider case: filter, selectRange + task.setOutputEnd(this.count()); + } +} + +function getCurrentTask(seriesModel) { + var scheduler = (seriesModel.ecModel || {}).scheduler; + var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid); + + if (pipeline) { + // When pipline finished, the currrentTask keep the last + // task (renderTask). + var task = pipeline.currentTask; + if (task) { + var agentStubMap = task.agentStubMap; + if (agentStubMap) { + task = agentStubMap.get(seriesModel.uid); + } + } + return task; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var Component = function () { + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * @type {string} + * @readOnly + */ + this.uid = getUID('viewComponent'); +}; + +Component.prototype = { + + constructor: Component, + + init: function (ecModel, api) {}, + + render: function (componentModel, ecModel, api, payload) {}, + + dispose: function () {}, + + /** + * @param {string} eventType + * @param {Object} query + * @param {module:zrender/Element} targetEl + * @param {Object} packedEvent + * @return {boolen} Pass only when return `true`. + */ + filterForExposedEvent: null + +}; + +var componentProto = Component.prototype; +componentProto.updateView + = componentProto.updateLayout + = componentProto.updateVisual + = function (seriesModel, ecModel, api, payload) { + // Do nothing; + }; +// Enable Component.extend. +enableClassExtend(Component); + +// Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement(Component, {registerWhenExtend: true}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @return {string} If large mode changed, return string 'reset'; + */ +var createRenderPlanner = function () { + var inner = makeInner(); + + return function (seriesModel) { + var fields = inner(seriesModel); + var pipelineContext = seriesModel.pipelineContext; + + var originalLarge = fields.large; + var originalProgressive = fields.progressiveRender; + + var large = fields.large = pipelineContext.large; + var progressive = fields.progressiveRender = pipelineContext.progressiveRender; + + return !!((originalLarge ^ large) || (originalProgressive ^ progressive)) && 'reset'; + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$5 = makeInner(); +var renderPlanner = createRenderPlanner(); + +function Chart() { + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * @type {string} + * @readOnly + */ + this.uid = getUID('viewChart'); + + this.renderTask = createTask({ + plan: renderTaskPlan, + reset: renderTaskReset + }); + this.renderTask.context = {view: this}; +} + +Chart.prototype = { + + type: 'chart', + + /** + * Init the chart. + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + init: function (ecModel, api) {}, + + /** + * Render the chart. + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + render: function (seriesModel, ecModel, api, payload) {}, + + /** + * Highlight series or specified data item. + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + highlight: function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'emphasis'); + }, + + /** + * Downplay series or specified data item. + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + downplay: function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'normal'); + }, + + /** + * Remove self. + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + remove: function (ecModel, api) { + this.group.removeAll(); + }, + + /** + * Dispose self. + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + dispose: function () {}, + + /** + * Rendering preparation in progressive mode. + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + incrementalPrepareRender: null, + + /** + * Render in progressive mode. + * @param {Object} params See taskParams in `stream/task.js` + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + incrementalRender: null, + + /** + * Update transform directly. + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + * @return {Object} {update: true} + */ + updateTransform: null, + + /** + * The view contains the given point. + * @interface + * @param {Array.} point + * @return {boolean} + */ + // containPoint: function () {} + + /** + * @param {string} eventType + * @param {Object} query + * @param {module:zrender/Element} targetEl + * @param {Object} packedEvent + * @return {boolen} Pass only when return `true`. + */ + filterForExposedEvent: null + +}; + +var chartProto = Chart.prototype; +chartProto.updateView + = chartProto.updateLayout + = chartProto.updateVisual + = function (seriesModel, ecModel, api, payload) { + this.render(seriesModel, ecModel, api, payload); + }; + +/** + * Set state of single element + * @param {module:zrender/Element} el + * @param {string} state + */ +function elSetState(el, state) { + if (el) { + el.trigger(state); + if (el.type === 'group') { + for (var i = 0; i < el.childCount(); i++) { + elSetState(el.childAt(i), state); + } + } + } +} +/** + * @param {module:echarts/data/List} data + * @param {Object} payload + * @param {string} state 'normal'|'emphasis' + */ +function toggleHighlight(data, payload, state) { + var dataIndex = queryDataIndex(data, payload); + + if (dataIndex != null) { + each$1(normalizeToArray(dataIndex), function (dataIdx) { + elSetState(data.getItemGraphicEl(dataIdx), state); + }); + } + else { + data.eachItemGraphicEl(function (el) { + elSetState(el, state); + }); + } +} + +// Enable Chart.extend. +enableClassExtend(Chart, ['dispose']); + +// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement(Chart, {registerWhenExtend: true}); + +Chart.markUpdateMethod = function (payload, methodName) { + inner$5(payload).updateMethod = methodName; +}; + +function renderTaskPlan(context) { + return renderPlanner(context.model); +} + +function renderTaskReset(context) { + var seriesModel = context.model; + var ecModel = context.ecModel; + var api = context.api; + var payload = context.payload; + // ???! remove updateView updateVisual + var progressiveRender = seriesModel.pipelineContext.progressiveRender; + var view = context.view; + + var updateMethod = payload && inner$5(payload).updateMethod; + var methodName = progressiveRender + ? 'incrementalPrepareRender' + : (updateMethod && view[updateMethod]) + ? updateMethod + // `appendData` is also supported when data amount + // is less than progressive threshold. + : 'render'; + + if (methodName !== 'render') { + view[methodName](seriesModel, ecModel, api, payload); + } + + return progressMethodMap[methodName]; +} + +var progressMethodMap = { + incrementalPrepareRender: { + progress: function (params, context) { + context.view.incrementalRender( + params, context.model, context.ecModel, context.api, context.payload + ); + } + }, + render: { + // Put view.render in `progress` to support appendData. But in this case + // view.render should not be called in reset, otherwise it will be called + // twise. Use `forceFirstProgress` to make sure that view.render is called + // in any cases. + forceFirstProgress: true, + progress: function (params, context) { + context.view.render( + context.model, context.ecModel, context.api, context.payload + ); + } + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var ORIGIN_METHOD = '\0__throttleOriginMethod'; +var RATE = '\0__throttleRate'; +var THROTTLE_TYPE = '\0__throttleType'; + +/** + * @public + * @param {(Function)} fn + * @param {number} [delay=0] Unit: ms. + * @param {boolean} [debounce=false] + * true: If call interval less than `delay`, only the last call works. + * false: If call interval less than `delay, call works on fixed rate. + * @return {(Function)} throttled fn. + */ +function throttle(fn, delay, debounce) { + + var currCall; + var lastCall = 0; + var lastExec = 0; + var timer = null; + var diff; + var scope; + var args; + var debounceNextCall; + + delay = delay || 0; + + function exec() { + lastExec = (new Date()).getTime(); + timer = null; + fn.apply(scope, args || []); + } + + var cb = function () { + currCall = (new Date()).getTime(); + scope = this; + args = arguments; + var thisDelay = debounceNextCall || delay; + var thisDebounce = debounceNextCall || debounce; + debounceNextCall = null; + diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay; + + clearTimeout(timer); + + // Here we should make sure that: the `exec` SHOULD NOT be called later + // than a new call of `cb`, that is, preserving the command order. Consider + // calculating "scale rate" when roaming as an example. When a call of `cb` + // happens, either the `exec` is called dierectly, or the call is delayed. + // But the delayed call should never be later than next call of `cb`. Under + // this assurance, we can simply update view state each time `dispatchAction` + // triggered by user roaming, but not need to add extra code to avoid the + // state being "rolled-back". + if (thisDebounce) { + timer = setTimeout(exec, thisDelay); + } + else { + if (diff >= 0) { + exec(); + } + else { + timer = setTimeout(exec, -diff); + } + } + + lastCall = currCall; + }; + + /** + * Clear throttle. + * @public + */ + cb.clear = function () { + if (timer) { + clearTimeout(timer); + timer = null; + } + }; + + /** + * Enable debounce once. + */ + cb.debounceNextCall = function (debounceDelay) { + debounceNextCall = debounceDelay; + }; + + return cb; +} + +/** + * Create throttle method or update throttle rate. + * + * @example + * ComponentView.prototype.render = function () { + * ... + * throttle.createOrUpdate( + * this, + * '_dispatchAction', + * this.model.get('throttle'), + * 'fixRate' + * ); + * }; + * ComponentView.prototype.remove = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * ComponentView.prototype.dispose = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * + * @public + * @param {Object} obj + * @param {string} fnAttr + * @param {number} [rate] + * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce' + * @return {Function} throttled function. + */ +function createOrUpdate(obj, fnAttr, rate, throttleType) { + var fn = obj[fnAttr]; + + if (!fn) { + return; + } + + var originFn = fn[ORIGIN_METHOD] || fn; + var lastThrottleType = fn[THROTTLE_TYPE]; + var lastRate = fn[RATE]; + + if (lastRate !== rate || lastThrottleType !== throttleType) { + if (rate == null || !throttleType) { + return (obj[fnAttr] = originFn); + } + + fn = obj[fnAttr] = throttle( + originFn, rate, throttleType === 'debounce' + ); + fn[ORIGIN_METHOD] = originFn; + fn[THROTTLE_TYPE] = throttleType; + fn[RATE] = rate; + } + + return fn; +} + +/** + * Clear throttle. Example see throttle.createOrUpdate. + * + * @public + * @param {Object} obj + * @param {string} fnAttr + */ +function clear(obj, fnAttr) { + var fn = obj[fnAttr]; + if (fn && fn[ORIGIN_METHOD]) { + obj[fnAttr] = fn[ORIGIN_METHOD]; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var seriesColor = { + createOnAllSeries: true, + performRawSeries: true, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.'); + var color = seriesModel.get(colorAccessPath) // Set in itemStyle + || seriesModel.getColorFromPalette( + // TODO series count changed. + seriesModel.name, null, ecModel.getSeriesCount() + ); // Default color + + // FIXME Set color function or use the platte color + data.setVisual('color', color); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + if (typeof color === 'function' && !(color instanceof Gradient)) { + data.each(function (idx) { + data.setItemVisual( + idx, 'color', color(seriesModel.getDataParams(idx)) + ); + }); + } + + // itemStyle in each data item + var dataEach = function (data, idx) { + var itemModel = data.getItemModel(idx); + var color = itemModel.get(colorAccessPath, true); + if (color != null) { + data.setItemVisual(idx, 'color', color); + } + }; + + return { dataEach: data.hasItemOption ? dataEach : null }; + } + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var lang = { + toolbox: { + brush: { + title: { + rect: '矩形选择', + polygon: '圈选', + lineX: '横向选择', + lineY: '纵向选择', + keep: '保持选择', + clear: '清除选择' + } + }, + dataView: { + title: '数据视图', + lang: ['数据视图', '关闭', '刷新'] + }, + dataZoom: { + title: { + zoom: '区域缩放', + back: '区域缩放还原' + } + }, + magicType: { + title: { + line: '切换为折线图', + bar: '切换为柱状图', + stack: '切换为堆叠', + tiled: '切换为平铺' + } + }, + restore: { + title: '还原' + }, + saveAsImage: { + title: '保存为图片', + lang: ['右键另存为图片'] + } + }, + series: { + typeNames: { + pie: '饼图', + bar: '柱状图', + line: '折线图', + scatter: '散点图', + effectScatter: '涟漪散点图', + radar: '雷达图', + tree: '树图', + treemap: '矩形树图', + boxplot: '箱型图', + candlestick: 'K线图', + k: 'K线图', + heatmap: '热力图', + map: '地图', + parallel: '平行坐标图', + lines: '线图', + graph: '关系图', + sankey: '桑基图', + funnel: '漏斗图', + gauge: '仪表盘图', + pictorialBar: '象形柱图', + themeRiver: '主题河流图', + sunburst: '旭日图' + } + }, + aria: { + general: { + withTitle: '这是一个关于“{title}”的图表。', + withoutTitle: '这是一个图表,' + }, + series: { + single: { + prefix: '', + withName: '图表类型是{seriesType},表示{seriesName}。', + withoutName: '图表类型是{seriesType}。' + }, + multiple: { + prefix: '它由{seriesCount}个图表系列组成。', + withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},', + withoutName: '第{seriesId}个系列是一个{seriesType},', + separator: { + middle: ';', + end: '。' + } + } + }, + data: { + allData: '其数据是——', + partialData: '其中,前{displayCnt}项是——', + withName: '{name}的数据是{value}', + withoutName: '{value}', + separator: { + middle: ',', + end: '' + } + } + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var aria = function (dom, ecModel) { + var ariaModel = ecModel.getModel('aria'); + if (!ariaModel.get('show')) { + return; + } + else if (ariaModel.get('description')) { + dom.setAttribute('aria-label', ariaModel.get('description')); + return; + } + + var seriesCnt = 0; + ecModel.eachSeries(function (seriesModel, idx) { + ++seriesCnt; + }, this); + + var maxDataCnt = ariaModel.get('data.maxCount') || 10; + var maxSeriesCnt = ariaModel.get('series.maxCount') || 10; + var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt); + + var ariaLabel; + if (seriesCnt < 1) { + // No series, no aria label + return; + } + else { + var title = getTitle(); + if (title) { + ariaLabel = replace(getConfig('general.withTitle'), { + title: title + }); + } + else { + ariaLabel = getConfig('general.withoutTitle'); + } + + var seriesLabels = []; + var prefix = seriesCnt > 1 + ? 'series.multiple.prefix' + : 'series.single.prefix'; + ariaLabel += replace(getConfig(prefix), { seriesCount: seriesCnt }); + + ecModel.eachSeries(function (seriesModel, idx) { + if (idx < displaySeriesCnt) { + var seriesLabel; + + var seriesName = seriesModel.get('name'); + var seriesTpl = 'series.' + + (seriesCnt > 1 ? 'multiple' : 'single') + '.'; + seriesLabel = getConfig(seriesName + ? seriesTpl + 'withName' + : seriesTpl + 'withoutName'); + + seriesLabel = replace(seriesLabel, { + seriesId: seriesModel.seriesIndex, + seriesName: seriesModel.get('name'), + seriesType: getSeriesTypeName(seriesModel.subType) + }); + + var data = seriesModel.getData(); + window.data = data; + if (data.count() > maxDataCnt) { + // Show part of data + seriesLabel += replace(getConfig('data.partialData'), { + displayCnt: maxDataCnt + }); + } + else { + seriesLabel += getConfig('data.allData'); + } + + var dataLabels = []; + for (var i = 0; i < data.count(); i++) { + if (i < maxDataCnt) { + var name = data.getName(i); + var value = retrieveRawValue(data, i); + dataLabels.push( + replace( + name + ? getConfig('data.withName') + : getConfig('data.withoutName'), + { + name: name, + value: value + } + ) + ); + } + } + seriesLabel += dataLabels + .join(getConfig('data.separator.middle')) + + getConfig('data.separator.end'); + + seriesLabels.push(seriesLabel); + } + }); + + ariaLabel += seriesLabels + .join(getConfig('series.multiple.separator.middle')) + + getConfig('series.multiple.separator.end'); + + dom.setAttribute('aria-label', ariaLabel); + } + + function replace(str, keyValues) { + if (typeof str !== 'string') { + return str; + } + + var result = str; + each$1(keyValues, function (value, key) { + result = result.replace( + new RegExp('\\{\\s*' + key + '\\s*\\}', 'g'), + value + ); + }); + return result; + } + + function getConfig(path) { + var userConfig = ariaModel.get(path); + if (userConfig == null) { + var pathArr = path.split('.'); + var result = lang.aria; + for (var i = 0; i < pathArr.length; ++i) { + result = result[pathArr[i]]; + } + return result; + } + else { + return userConfig; + } + } + + function getTitle() { + var title = ecModel.getModel('title').option; + if (title && title.length) { + title = title[0]; + } + return title && title.text; + } + + function getSeriesTypeName(type) { + return lang.series.typeNames[type] || '自定义图'; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PI$1 = Math.PI; + +/** + * @param {module:echarts/ExtensionAPI} api + * @param {Object} [opts] + * @param {string} [opts.text] + * @param {string} [opts.color] + * @param {string} [opts.textColor] + * @return {module:zrender/Element} + */ +var loadingDefault = function (api, opts) { + opts = opts || {}; + defaults(opts, { + text: 'loading', + color: '#c23531', + textColor: '#000', + maskColor: 'rgba(255, 255, 255, 0.8)', + zlevel: 0 + }); + var mask = new Rect({ + style: { + fill: opts.maskColor + }, + zlevel: opts.zlevel, + z: 10000 + }); + var arc = new Arc({ + shape: { + startAngle: -PI$1 / 2, + endAngle: -PI$1 / 2 + 0.1, + r: 10 + }, + style: { + stroke: opts.color, + lineCap: 'round', + lineWidth: 5 + }, + zlevel: opts.zlevel, + z: 10001 + }); + var labelRect = new Rect({ + style: { + fill: 'none', + text: opts.text, + textPosition: 'right', + textDistance: 10, + textFill: opts.textColor + }, + zlevel: opts.zlevel, + z: 10001 + }); + + arc.animateShape(true) + .when(1000, { + endAngle: PI$1 * 3 / 2 + }) + .start('circularInOut'); + arc.animateShape(true) + .when(1000, { + startAngle: PI$1 * 3 / 2 + }) + .delay(300) + .start('circularInOut'); + + var group = new Group(); + group.add(arc); + group.add(labelRect); + group.add(mask); + // Inject resize + group.resize = function () { + var cx = api.getWidth() / 2; + var cy = api.getHeight() / 2; + arc.setShape({ + cx: cx, + cy: cy + }); + var r = arc.shape.r; + labelRect.setShape({ + x: cx - r, + y: cy - r, + width: r * 2, + height: r * 2 + }); + + mask.setShape({ + x: 0, + y: 0, + width: api.getWidth(), + height: api.getHeight() + }); + }; + group.resize(); + return group; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/stream/Scheduler + */ + +/** + * @constructor + */ +function Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) { + this.ecInstance = ecInstance; + this.api = api; + this.unfinished; + + // Fix current processors in case that in some rear cases that + // processors might be registered after echarts instance created. + // Register processors incrementally for a echarts instance is + // not supported by this stream architecture. + var dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice(); + var visualHandlers = this._visualHandlers = visualHandlers.slice(); + this._allHandlers = dataProcessorHandlers.concat(visualHandlers); + + /** + * @private + * @type { + * [handlerUID: string]: { + * seriesTaskMap?: { + * [seriesUID: string]: Task + * }, + * overallTask?: Task + * } + * } + */ + this._stageTaskMap = createHashMap(); +} + +var proto = Scheduler.prototype; + +/** + * @param {module:echarts/model/Global} ecModel + * @param {Object} payload + */ +proto.restoreData = function (ecModel, payload) { + // TODO: Only restroe needed series and components, but not all components. + // Currently `restoreData` of all of the series and component will be called. + // But some independent components like `title`, `legend`, `graphic`, `toolbox`, + // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`, + // and some components like coordinate system, axes, dataZoom, visualMap only + // need their target series refresh. + // (1) If we are implementing this feature some day, we should consider these cases: + // if a data processor depends on a component (e.g., dataZoomProcessor depends + // on the settings of `dataZoom`), it should be re-performed if the component + // is modified by `setOption`. + // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`, + // it should be re-performed when the result array of `getTargetSeries` changed. + // We use `dependencies` to cover these issues. + // (3) How to update target series when coordinate system related components modified. + + // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty, + // and this case all of the tasks will be set as dirty. + + ecModel.restoreData(payload); + + // Theoretically an overall task not only depends on each of its target series, but also + // depends on all of the series. + // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks + // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure + // that the overall task is set as dirty and to be performed, otherwise it probably cause + // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it + // probably cause state chaos (consider `dataZoomProcessor`). + this._stageTaskMap.each(function (taskRecord) { + var overallTask = taskRecord.overallTask; + overallTask && overallTask.dirty(); + }); +}; + +// If seriesModel provided, incremental threshold is check by series data. +proto.getPerformArgs = function (task, isBlock) { + // For overall task + if (!task.__pipeline) { + return; + } + + var pipeline = this._pipelineMap.get(task.__pipeline.id); + var pCtx = pipeline.context; + var incremental = !isBlock + && pipeline.progressiveEnabled + && (!pCtx || pCtx.progressiveRender) + && task.__idxInPipeline > pipeline.blockIndex; + + var step = incremental ? pipeline.step : null; + var modDataCount = pCtx && pCtx.modDataCount; + var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null; + + return {step: step, modBy: modBy, modDataCount: modDataCount}; +}; + +proto.getPipeline = function (pipelineId) { + return this._pipelineMap.get(pipelineId); +}; + +/** + * Current, progressive rendering starts from visual and layout. + * Always detect render mode in the same stage, avoiding that incorrect + * detection caused by data filtering. + * Caution: + * `updateStreamModes` use `seriesModel.getData()`. + */ +proto.updateStreamModes = function (seriesModel, view) { + var pipeline = this._pipelineMap.get(seriesModel.uid); + var data = seriesModel.getData(); + var dataLen = data.count(); + + // `progressiveRender` means that can render progressively in each + // animation frame. Note that some types of series do not provide + // `view.incrementalPrepareRender` but support `chart.appendData`. We + // use the term `incremental` but not `progressive` to describe the + // case that `chart.appendData`. + var progressiveRender = pipeline.progressiveEnabled + && view.incrementalPrepareRender + && dataLen >= pipeline.threshold; + + var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold'); + + // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint. + // see `test/candlestick-large3.html` + var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null; + + seriesModel.pipelineContext = pipeline.context = { + progressiveRender: progressiveRender, + modDataCount: modDataCount, + large: large + }; +}; + +proto.restorePipelines = function (ecModel) { + var scheduler = this; + var pipelineMap = scheduler._pipelineMap = createHashMap(); + + ecModel.eachSeries(function (seriesModel) { + var progressive = seriesModel.getProgressive(); + var pipelineId = seriesModel.uid; + + pipelineMap.set(pipelineId, { + id: pipelineId, + head: null, + tail: null, + threshold: seriesModel.getProgressiveThreshold(), + progressiveEnabled: progressive + && !(seriesModel.preventIncremental && seriesModel.preventIncremental()), + blockIndex: -1, + step: Math.round(progressive || 700), + count: 0 + }); + + pipe(scheduler, seriesModel, seriesModel.dataTask); + }); +}; + +proto.prepareStageTasks = function () { + var stageTaskMap = this._stageTaskMap; + var ecModel = this.ecInstance.getModel(); + var api = this.api; + + each$1(this._allHandlers, function (handler) { + var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, []); + + handler.reset && createSeriesStageTask(this, handler, record, ecModel, api); + handler.overallReset && createOverallStageTask(this, handler, record, ecModel, api); + }, this); +}; + +proto.prepareView = function (view, model, ecModel, api) { + var renderTask = view.renderTask; + var context = renderTask.context; + + context.model = model; + context.ecModel = ecModel; + context.api = api; + + renderTask.__block = !view.incrementalPrepareRender; + + pipe(this, model, renderTask); +}; + + +proto.performDataProcessorTasks = function (ecModel, payload) { + // If we do not use `block` here, it should be considered when to update modes. + performStageTasks(this, this._dataProcessorHandlers, ecModel, payload, {block: true}); +}; + +// opt +// opt.visualType: 'visual' or 'layout' +// opt.setDirty +proto.performVisualTasks = function (ecModel, payload, opt) { + performStageTasks(this, this._visualHandlers, ecModel, payload, opt); +}; + +function performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) { + opt = opt || {}; + var unfinished; + + each$1(stageHandlers, function (stageHandler, idx) { + if (opt.visualType && opt.visualType !== stageHandler.visualType) { + return; + } + + var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid); + var seriesTaskMap = stageHandlerRecord.seriesTaskMap; + var overallTask = stageHandlerRecord.overallTask; + + if (overallTask) { + var overallNeedDirty; + var agentStubMap = overallTask.agentStubMap; + agentStubMap.each(function (stub) { + if (needSetDirty(opt, stub)) { + stub.dirty(); + overallNeedDirty = true; + } + }); + overallNeedDirty && overallTask.dirty(); + updatePayload(overallTask, payload); + var performArgs = scheduler.getPerformArgs(overallTask, opt.block); + // Execute stubs firstly, which may set the overall task dirty, + // then execute the overall task. And stub will call seriesModel.setData, + // which ensures that in the overallTask seriesModel.getData() will not + // return incorrect data. + agentStubMap.each(function (stub) { + stub.perform(performArgs); + }); + unfinished |= overallTask.perform(performArgs); + } + else if (seriesTaskMap) { + seriesTaskMap.each(function (task, pipelineId) { + if (needSetDirty(opt, task)) { + task.dirty(); + } + var performArgs = scheduler.getPerformArgs(task, opt.block); + performArgs.skip = !stageHandler.performRawSeries + && ecModel.isSeriesFiltered(task.context.model); + updatePayload(task, payload); + unfinished |= task.perform(performArgs); + }); + } + }); + + function needSetDirty(opt, task) { + return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id)); + } + + scheduler.unfinished |= unfinished; +} + +proto.performSeriesTasks = function (ecModel) { + var unfinished; + + ecModel.eachSeries(function (seriesModel) { + // Progress to the end for dataInit and dataRestore. + unfinished |= seriesModel.dataTask.perform(); + }); + + this.unfinished |= unfinished; +}; + +proto.plan = function () { + // Travel pipelines, check block. + this._pipelineMap.each(function (pipeline) { + var task = pipeline.tail; + do { + if (task.__block) { + pipeline.blockIndex = task.__idxInPipeline; + break; + } + task = task.getUpstream(); + } + while (task); + }); +}; + +var updatePayload = proto.updatePayload = function (task, payload) { + payload !== 'remain' && (task.context.payload = payload); +}; + +function createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) { + var seriesTaskMap = stageHandlerRecord.seriesTaskMap + || (stageHandlerRecord.seriesTaskMap = createHashMap()); + var seriesType = stageHandler.seriesType; + var getTargetSeries = stageHandler.getTargetSeries; + + // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily, + // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`, + // it works but it may cause other irrelevant charts blocked. + if (stageHandler.createOnAllSeries) { + ecModel.eachRawSeries(create); + } + else if (seriesType) { + ecModel.eachRawSeriesByType(seriesType, create); + } + else if (getTargetSeries) { + getTargetSeries(ecModel, api).each(create); + } + + function create(seriesModel) { + var pipelineId = seriesModel.uid; + + // Init tasks for each seriesModel only once. + // Reuse original task instance. + var task = seriesTaskMap.get(pipelineId) + || seriesTaskMap.set(pipelineId, createTask({ + plan: seriesTaskPlan, + reset: seriesTaskReset, + count: seriesTaskCount + })); + task.context = { + model: seriesModel, + ecModel: ecModel, + api: api, + useClearVisual: stageHandler.isVisual && !stageHandler.isLayout, + plan: stageHandler.plan, + reset: stageHandler.reset, + scheduler: scheduler + }; + pipe(scheduler, seriesModel, task); + } + + // Clear unused series tasks. + var pipelineMap = scheduler._pipelineMap; + seriesTaskMap.each(function (task, pipelineId) { + if (!pipelineMap.get(pipelineId)) { + task.dispose(); + seriesTaskMap.removeKey(pipelineId); + } + }); +} + +function createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) { + var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask + // For overall task, the function only be called on reset stage. + || createTask({reset: overallTaskReset}); + + overallTask.context = { + ecModel: ecModel, + api: api, + overallReset: stageHandler.overallReset, + scheduler: scheduler + }; + + // Reuse orignal stubs. + var agentStubMap = overallTask.agentStubMap = overallTask.agentStubMap || createHashMap(); + + var seriesType = stageHandler.seriesType; + var getTargetSeries = stageHandler.getTargetSeries; + var overallProgress = true; + var modifyOutputEnd = stageHandler.modifyOutputEnd; + + // An overall task with seriesType detected or has `getTargetSeries`, we add + // stub in each pipelines, it will set the overall task dirty when the pipeline + // progress. Moreover, to avoid call the overall task each frame (too frequent), + // we set the pipeline block. + if (seriesType) { + ecModel.eachRawSeriesByType(seriesType, createStub); + } + else if (getTargetSeries) { + getTargetSeries(ecModel, api).each(createStub); + } + // Otherwise, (usually it is legancy case), the overall task will only be + // executed when upstream dirty. Otherwise the progressive rendering of all + // pipelines will be disabled unexpectedly. But it still needs stubs to receive + // dirty info from upsteam. + else { + overallProgress = false; + each$1(ecModel.getSeries(), createStub); + } + + function createStub(seriesModel) { + var pipelineId = seriesModel.uid; + var stub = agentStubMap.get(pipelineId); + if (!stub) { + stub = agentStubMap.set(pipelineId, createTask( + {reset: stubReset, onDirty: stubOnDirty} + )); + // When the result of `getTargetSeries` changed, the overallTask + // should be set as dirty and re-performed. + overallTask.dirty(); + } + stub.context = { + model: seriesModel, + overallProgress: overallProgress, + modifyOutputEnd: modifyOutputEnd + }; + stub.agent = overallTask; + stub.__block = overallProgress; + + pipe(scheduler, seriesModel, stub); + } + + // Clear unused stubs. + var pipelineMap = scheduler._pipelineMap; + agentStubMap.each(function (stub, pipelineId) { + if (!pipelineMap.get(pipelineId)) { + stub.dispose(); + // When the result of `getTargetSeries` changed, the overallTask + // should be set as dirty and re-performed. + overallTask.dirty(); + agentStubMap.removeKey(pipelineId); + } + }); +} + +function overallTaskReset(context) { + context.overallReset( + context.ecModel, context.api, context.payload + ); +} + +function stubReset(context, upstreamContext) { + return context.overallProgress && stubProgress; +} + +function stubProgress() { + this.agent.dirty(); + this.getDownstream().dirty(); +} + +function stubOnDirty() { + this.agent && this.agent.dirty(); +} + +function seriesTaskPlan(context) { + return context.plan && context.plan( + context.model, context.ecModel, context.api, context.payload + ); +} + +function seriesTaskReset(context) { + if (context.useClearVisual) { + context.data.clearAllVisual(); + } + var resetDefines = context.resetDefines = normalizeToArray(context.reset( + context.model, context.ecModel, context.api, context.payload + )); + return resetDefines.length > 1 + ? map(resetDefines, function (v, idx) { + return makeSeriesTaskProgress(idx); + }) + : singleSeriesTaskProgress; +} + +var singleSeriesTaskProgress = makeSeriesTaskProgress(0); + +function makeSeriesTaskProgress(resetDefineIdx) { + return function (params, context) { + var data = context.data; + var resetDefine = context.resetDefines[resetDefineIdx]; + + if (resetDefine && resetDefine.dataEach) { + for (var i = params.start; i < params.end; i++) { + resetDefine.dataEach(data, i); + } + } + else if (resetDefine && resetDefine.progress) { + resetDefine.progress(params, data); + } + }; +} + +function seriesTaskCount(context) { + return context.data.count(); +} + +function pipe(scheduler, seriesModel, task) { + var pipelineId = seriesModel.uid; + var pipeline = scheduler._pipelineMap.get(pipelineId); + !pipeline.head && (pipeline.head = task); + pipeline.tail && pipeline.tail.pipe(task); + pipeline.tail = task; + task.__idxInPipeline = pipeline.count++; + task.__pipeline = pipeline; +} + +Scheduler.wrapStageHandler = function (stageHandler, visualType) { + if (isFunction$1(stageHandler)) { + stageHandler = { + overallReset: stageHandler, + seriesType: detectSeriseType(stageHandler) + }; + } + + stageHandler.uid = getUID('stageHandler'); + visualType && (stageHandler.visualType = visualType); + + return stageHandler; +}; + + + +/** + * Only some legacy stage handlers (usually in echarts extensions) are pure function. + * To ensure that they can work normally, they should work in block mode, that is, + * they should not be started util the previous tasks finished. So they cause the + * progressive rendering disabled. We try to detect the series type, to narrow down + * the block range to only the series type they concern, but not all series. + */ +function detectSeriseType(legacyFunc) { + seriesType = null; + try { + // Assume there is no async when calling `eachSeriesByType`. + legacyFunc(ecModelMock, apiMock); + } + catch (e) { + } + return seriesType; +} + +var ecModelMock = {}; +var apiMock = {}; +var seriesType; + +mockMethods(ecModelMock, GlobalModel); +mockMethods(apiMock, ExtensionAPI); +ecModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) { + seriesType = type; +}; +ecModelMock.eachComponent = function (cond) { + if (cond.mainType === 'series' && cond.subType) { + seriesType = cond.subType; + } +}; + +function mockMethods(target, Clz) { + /* eslint-disable */ + for (var name in Clz.prototype) { + // Do not use hasOwnProperty + target[name] = noop; + } + /* eslint-enable */ +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var colorAll = [ + '#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f', + '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF' +]; + +var lightTheme = { + + color: colorAll, + + colorLayer: [ + ['#37A2DA', '#ffd85c', '#fd7b5f'], + ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'], + ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'], + colorAll + ] +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var contrastColor = '#eee'; +var axisCommon = function () { + return { + axisLine: { + lineStyle: { + color: contrastColor + } + }, + axisTick: { + lineStyle: { + color: contrastColor + } + }, + axisLabel: { + textStyle: { + color: contrastColor + } + }, + splitLine: { + lineStyle: { + type: 'dashed', + color: '#aaa' + } + }, + splitArea: { + areaStyle: { + color: contrastColor + } + } + }; +}; + +var colorPalette = [ + '#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53', + '#eedd78', '#73a373', '#73b9bc', '#7289ab', '#91ca8c', '#f49f42' +]; +var theme = { + color: colorPalette, + backgroundColor: '#333', + tooltip: { + axisPointer: { + lineStyle: { + color: contrastColor + }, + crossStyle: { + color: contrastColor + } + } + }, + legend: { + textStyle: { + color: contrastColor + } + }, + textStyle: { + color: contrastColor + }, + title: { + textStyle: { + color: contrastColor + } + }, + toolbox: { + iconStyle: { + normal: { + borderColor: contrastColor + } + } + }, + dataZoom: { + textStyle: { + color: contrastColor + } + }, + visualMap: { + textStyle: { + color: contrastColor + } + }, + timeline: { + lineStyle: { + color: contrastColor + }, + itemStyle: { + normal: { + color: colorPalette[1] + } + }, + label: { + normal: { + textStyle: { + color: contrastColor + } + } + }, + controlStyle: { + normal: { + color: contrastColor, + borderColor: contrastColor + } + } + }, + timeAxis: axisCommon(), + logAxis: axisCommon(), + valueAxis: axisCommon(), + categoryAxis: axisCommon(), + + line: { + symbol: 'circle' + }, + graph: { + color: colorPalette + }, + gauge: { + title: { + textStyle: { + color: contrastColor + } + } + }, + candlestick: { + itemStyle: { + normal: { + color: '#FD1050', + color0: '#0CF49B', + borderColor: '#FD1050', + borderColor0: '#0CF49B' + } + } + } +}; +theme.categoryAxis.splitLine.show = false; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * This module is imported by echarts directly. + * + * Notice: + * Always keep this file exists for backward compatibility. + * Because before 4.1.0, dataset is an optional component, + * some users may import this module manually. + */ + +ComponentModel.extend({ + + type: 'dataset', + + /** + * @protected + */ + defaultOption: { + + // 'row', 'column' + seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, + + // null/'auto': auto detect header, see "module:echarts/data/helper/sourceHelper" + sourceHeader: null, + + dimensions: null, + + source: null + }, + + optionUpdated: function () { + detectSourceFormat(this); + } + +}); + +Component.extend({ + + type: 'dataset' + +}); + +/** + * 椭圆形状 + * @module zrender/graphic/shape/Ellipse + */ + +var Ellipse = Path.extend({ + + type: 'ellipse', + + shape: { + cx: 0, cy: 0, + rx: 0, ry: 0 + }, + + buildPath: function (ctx, shape) { + var k = 0.5522848; + var x = shape.cx; + var y = shape.cy; + var a = shape.rx; + var b = shape.ry; + var ox = a * k; // 水平控制点偏移量 + var oy = b * k; // 垂直控制点偏移量 + // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线 + ctx.moveTo(x - a, y); + ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b); + ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y); + ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b); + ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y); + ctx.closePath(); + } +}); + +// import RadialGradient from '../graphic/RadialGradient'; +// import Pattern from '../graphic/Pattern'; +// import * as vector from '../core/vector'; +// Most of the values can be separated by comma and/or white space. +var DILIMITER_REG = /[\s,]+/; + +/** + * For big svg string, this method might be time consuming. + * + * @param {string} svg xml string + * @return {Object} xml root. + */ +function parseXML(svg) { + if (isString(svg)) { + var parser = new DOMParser(); + svg = parser.parseFromString(svg, 'text/xml'); + } + + // Document node. If using $.get, doc node may be input. + if (svg.nodeType === 9) { + svg = svg.firstChild; + } + // nodeName of is also 'svg'. + while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) { + svg = svg.nextSibling; + } + + return svg; +} + +function SVGParser() { + this._defs = {}; + this._root = null; + + this._isDefine = false; + this._isText = false; +} + +SVGParser.prototype.parse = function (xml, opt) { + opt = opt || {}; + + var svg = parseXML(xml); + + if (!svg) { + throw new Error('Illegal svg'); + } + + var root = new Group(); + this._root = root; + // parse view port + var viewBox = svg.getAttribute('viewBox') || ''; + + // If width/height not specified, means "100%" of `opt.width/height`. + // TODO: Other percent value not supported yet. + var width = parseFloat(svg.getAttribute('width') || opt.width); + var height = parseFloat(svg.getAttribute('height') || opt.height); + // If width/height not specified, set as null for output. + isNaN(width) && (width = null); + isNaN(height) && (height = null); + + // Apply inline style on svg element. + parseAttributes(svg, root, null, true); + + var child = svg.firstChild; + while (child) { + this._parseNode(child, root); + child = child.nextSibling; + } + + var viewBoxRect; + var viewBoxTransform; + + if (viewBox) { + var viewBoxArr = trim(viewBox).split(DILIMITER_REG); + // Some invalid case like viewBox: 'none'. + if (viewBoxArr.length >= 4) { + viewBoxRect = { + x: parseFloat(viewBoxArr[0] || 0), + y: parseFloat(viewBoxArr[1] || 0), + width: parseFloat(viewBoxArr[2]), + height: parseFloat(viewBoxArr[3]) + }; + } + } + + if (viewBoxRect && width != null && height != null) { + viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height); + + if (!opt.ignoreViewBox) { + // If set transform on the output group, it probably bring trouble when + // some users only intend to show the clipped content inside the viewBox, + // but not intend to transform the output group. So we keep the output + // group no transform. If the user intend to use the viewBox as a + // camera, just set `opt.ignoreViewBox` as `true` and set transfrom + // manually according to the viewBox info in the output of this method. + var elRoot = root; + root = new Group(); + root.add(elRoot); + elRoot.scale = viewBoxTransform.scale.slice(); + elRoot.position = viewBoxTransform.position.slice(); + } + } + + // Some shapes might be overflow the viewport, which should be + // clipped despite whether the viewBox is used, as the SVG does. + if (!opt.ignoreRootClip && width != null && height != null) { + root.setClipPath(new Rect({ + shape: {x: 0, y: 0, width: width, height: height} + })); + } + + // Set width/height on group just for output the viewport size. + return { + root: root, + width: width, + height: height, + viewBoxRect: viewBoxRect, + viewBoxTransform: viewBoxTransform + }; +}; + +SVGParser.prototype._parseNode = function (xmlNode, parentGroup) { + + var nodeName = xmlNode.nodeName.toLowerCase(); + + // TODO + // support in svg, where nodeName is 'style', + // CSS classes is defined globally wherever the style tags are declared. + + if (nodeName === 'defs') { + // define flag + this._isDefine = true; + } + else if (nodeName === 'text') { + this._isText = true; + } + + var el; + if (this._isDefine) { + var parser = defineParsers[nodeName]; + if (parser) { + var def = parser.call(this, xmlNode); + var id = xmlNode.getAttribute('id'); + if (id) { + this._defs[id] = def; + } + } + } + else { + var parser = nodeParsers[nodeName]; + if (parser) { + el = parser.call(this, xmlNode, parentGroup); + parentGroup.add(el); + } + } + + var child = xmlNode.firstChild; + while (child) { + if (child.nodeType === 1) { + this._parseNode(child, el); + } + // Is text + if (child.nodeType === 3 && this._isText) { + this._parseText(child, el); + } + child = child.nextSibling; + } + + // Quit define + if (nodeName === 'defs') { + this._isDefine = false; + } + else if (nodeName === 'text') { + this._isText = false; + } +}; + +SVGParser.prototype._parseText = function (xmlNode, parentGroup) { + if (xmlNode.nodeType === 1) { + var dx = xmlNode.getAttribute('dx') || 0; + var dy = xmlNode.getAttribute('dy') || 0; + this._textX += parseFloat(dx); + this._textY += parseFloat(dy); + } + + var text = new Text({ + style: { + text: xmlNode.textContent, + transformText: true + }, + position: [this._textX || 0, this._textY || 0] + }); + + inheritStyle(parentGroup, text); + parseAttributes(xmlNode, text, this._defs); + + var fontSize = text.style.fontSize; + if (fontSize && fontSize < 9) { + // PENDING + text.style.fontSize = 9; + text.scale = text.scale || [1, 1]; + text.scale[0] *= fontSize / 9; + text.scale[1] *= fontSize / 9; + } + + var rect = text.getBoundingRect(); + this._textX += rect.width; + + parentGroup.add(text); + + return text; +}; + +var nodeParsers = { + 'g': function (xmlNode, parentGroup) { + var g = new Group(); + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defs); + + return g; + }, + 'rect': function (xmlNode, parentGroup) { + var rect = new Rect(); + inheritStyle(parentGroup, rect); + parseAttributes(xmlNode, rect, this._defs); + + rect.setShape({ + x: parseFloat(xmlNode.getAttribute('x') || 0), + y: parseFloat(xmlNode.getAttribute('y') || 0), + width: parseFloat(xmlNode.getAttribute('width') || 0), + height: parseFloat(xmlNode.getAttribute('height') || 0) + }); + + // console.log(xmlNode.getAttribute('transform')); + // console.log(rect.transform); + + return rect; + }, + 'circle': function (xmlNode, parentGroup) { + var circle = new Circle(); + inheritStyle(parentGroup, circle); + parseAttributes(xmlNode, circle, this._defs); + + circle.setShape({ + cx: parseFloat(xmlNode.getAttribute('cx') || 0), + cy: parseFloat(xmlNode.getAttribute('cy') || 0), + r: parseFloat(xmlNode.getAttribute('r') || 0) + }); + + return circle; + }, + 'line': function (xmlNode, parentGroup) { + var line = new Line(); + inheritStyle(parentGroup, line); + parseAttributes(xmlNode, line, this._defs); + + line.setShape({ + x1: parseFloat(xmlNode.getAttribute('x1') || 0), + y1: parseFloat(xmlNode.getAttribute('y1') || 0), + x2: parseFloat(xmlNode.getAttribute('x2') || 0), + y2: parseFloat(xmlNode.getAttribute('y2') || 0) + }); + + return line; + }, + 'ellipse': function (xmlNode, parentGroup) { + var ellipse = new Ellipse(); + inheritStyle(parentGroup, ellipse); + parseAttributes(xmlNode, ellipse, this._defs); + + ellipse.setShape({ + cx: parseFloat(xmlNode.getAttribute('cx') || 0), + cy: parseFloat(xmlNode.getAttribute('cy') || 0), + rx: parseFloat(xmlNode.getAttribute('rx') || 0), + ry: parseFloat(xmlNode.getAttribute('ry') || 0) + }); + return ellipse; + }, + 'polygon': function (xmlNode, parentGroup) { + var points = xmlNode.getAttribute('points'); + if (points) { + points = parsePoints(points); + } + var polygon = new Polygon({ + shape: { + points: points || [] + } + }); + + inheritStyle(parentGroup, polygon); + parseAttributes(xmlNode, polygon, this._defs); + + return polygon; + }, + 'polyline': function (xmlNode, parentGroup) { + var path = new Path(); + inheritStyle(parentGroup, path); + parseAttributes(xmlNode, path, this._defs); + + var points = xmlNode.getAttribute('points'); + if (points) { + points = parsePoints(points); + } + var polyline = new Polyline({ + shape: { + points: points || [] + } + }); + + return polyline; + }, + 'image': function (xmlNode, parentGroup) { + var img = new ZImage(); + inheritStyle(parentGroup, img); + parseAttributes(xmlNode, img, this._defs); + + img.setStyle({ + image: xmlNode.getAttribute('xlink:href'), + x: xmlNode.getAttribute('x'), + y: xmlNode.getAttribute('y'), + width: xmlNode.getAttribute('width'), + height: xmlNode.getAttribute('height') + }); + + return img; + }, + 'text': function (xmlNode, parentGroup) { + var x = xmlNode.getAttribute('x') || 0; + var y = xmlNode.getAttribute('y') || 0; + var dx = xmlNode.getAttribute('dx') || 0; + var dy = xmlNode.getAttribute('dy') || 0; + + this._textX = parseFloat(x) + parseFloat(dx); + this._textY = parseFloat(y) + parseFloat(dy); + + var g = new Group(); + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defs); + + return g; + }, + 'tspan': function (xmlNode, parentGroup) { + var x = xmlNode.getAttribute('x'); + var y = xmlNode.getAttribute('y'); + if (x != null) { + // new offset x + this._textX = parseFloat(x); + } + if (y != null) { + // new offset y + this._textY = parseFloat(y); + } + var dx = xmlNode.getAttribute('dx') || 0; + var dy = xmlNode.getAttribute('dy') || 0; + + var g = new Group(); + + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defs); + + + this._textX += dx; + this._textY += dy; + + return g; + }, + 'path': function (xmlNode, parentGroup) { + // TODO svg fill rule + // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule + // path.style.globalCompositeOperation = 'xor'; + var d = xmlNode.getAttribute('d') || ''; + + // Performance sensitive. + + var path = createFromString(d); + + inheritStyle(parentGroup, path); + parseAttributes(xmlNode, path, this._defs); + + return path; + } +}; + +var defineParsers = { + + 'lineargradient': function (xmlNode) { + var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10); + var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10); + var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10); + var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10); + + var gradient = new LinearGradient(x1, y1, x2, y2); + + _parseGradientColorStops(xmlNode, gradient); + + return gradient; + }, + + 'radialgradient': function (xmlNode) { + + } +}; + +function _parseGradientColorStops(xmlNode, gradient) { + + var stop = xmlNode.firstChild; + + while (stop) { + if (stop.nodeType === 1) { + var offset = stop.getAttribute('offset'); + if (offset.indexOf('%') > 0) { // percentage + offset = parseInt(offset, 10) / 100; + } + else if (offset) { // number from 0 to 1 + offset = parseFloat(offset); + } + else { + offset = 0; + } + + var stopColor = stop.getAttribute('stop-color') || '#000000'; + + gradient.addColorStop(offset, stopColor); + } + stop = stop.nextSibling; + } +} + +function inheritStyle(parent, child) { + if (parent && parent.__inheritedStyle) { + if (!child.__inheritedStyle) { + child.__inheritedStyle = {}; + } + defaults(child.__inheritedStyle, parent.__inheritedStyle); + } +} + +function parsePoints(pointsString) { + var list = trim(pointsString).split(DILIMITER_REG); + var points = []; + + for (var i = 0; i < list.length; i += 2) { + var x = parseFloat(list[i]); + var y = parseFloat(list[i + 1]); + points.push([x, y]); + } + return points; +} + +var attributesMap = { + 'fill': 'fill', + 'stroke': 'stroke', + 'stroke-width': 'lineWidth', + 'opacity': 'opacity', + 'fill-opacity': 'fillOpacity', + 'stroke-opacity': 'strokeOpacity', + 'stroke-dasharray': 'lineDash', + 'stroke-dashoffset': 'lineDashOffset', + 'stroke-linecap': 'lineCap', + 'stroke-linejoin': 'lineJoin', + 'stroke-miterlimit': 'miterLimit', + 'font-family': 'fontFamily', + 'font-size': 'fontSize', + 'font-style': 'fontStyle', + 'font-weight': 'fontWeight', + + 'text-align': 'textAlign', + 'alignment-baseline': 'textBaseline' +}; + +function parseAttributes(xmlNode, el, defs, onlyInlineStyle) { + var zrStyle = el.__inheritedStyle || {}; + var isTextEl = el.type === 'text'; + + // TODO Shadow + if (xmlNode.nodeType === 1) { + parseTransformAttribute(xmlNode, el); + + extend(zrStyle, parseStyleAttribute(xmlNode)); + + if (!onlyInlineStyle) { + for (var svgAttrName in attributesMap) { + if (attributesMap.hasOwnProperty(svgAttrName)) { + var attrValue = xmlNode.getAttribute(svgAttrName); + if (attrValue != null) { + zrStyle[attributesMap[svgAttrName]] = attrValue; + } + } + } + } + } + + var elFillProp = isTextEl ? 'textFill' : 'fill'; + var elStrokeProp = isTextEl ? 'textStroke' : 'stroke'; + + el.style = el.style || new Style(); + var elStyle = el.style; + + zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs)); + zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs)); + + each$1([ + 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize' + ], function (propName) { + var elPropName = (propName === 'lineWidth' && isTextEl) ? 'textStrokeWidth' : propName; + zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName])); + }); + + if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') { + zrStyle.textBaseline = 'alphabetic'; + } + if (zrStyle.textBaseline === 'alphabetic') { + zrStyle.textBaseline = 'bottom'; + } + if (zrStyle.textAlign === 'start') { + zrStyle.textAlign = 'left'; + } + if (zrStyle.textAlign === 'end') { + zrStyle.textAlign = 'right'; + } + + each$1(['lineDashOffset', 'lineCap', 'lineJoin', + 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline' + ], function (propName) { + zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]); + }); + + if (zrStyle.lineDash) { + el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG); + } + + if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') { + // enable stroke + el[elStrokeProp] = true; + } + + el.__inheritedStyle = zrStyle; +} + + +var urlRegex = /url\(\s*#(.*?)\)/; +function getPaint(str, defs) { + // if (str === 'none') { + // return; + // } + var urlMatch = defs && str && str.match(urlRegex); + if (urlMatch) { + var url = trim(urlMatch[1]); + var def = defs[url]; + return def; + } + return str; +} + +var transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g; + +function parseTransformAttribute(xmlNode, node) { + var transform = xmlNode.getAttribute('transform'); + if (transform) { + transform = transform.replace(/,/g, ' '); + var m = null; + var transformOps = []; + transform.replace(transformRegex, function (str, type, value) { + transformOps.push(type, value); + }); + for (var i = transformOps.length - 1; i > 0; i -= 2) { + var value = transformOps[i]; + var type = transformOps[i - 1]; + m = m || create$1(); + switch (type) { + case 'translate': + value = trim(value).split(DILIMITER_REG); + translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]); + break; + case 'scale': + value = trim(value).split(DILIMITER_REG); + scale$1(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]); + break; + case 'rotate': + value = trim(value).split(DILIMITER_REG); + rotate(m, m, parseFloat(value[0])); + break; + case 'skew': + value = trim(value).split(DILIMITER_REG); + console.warn('Skew transform is not supported yet'); + break; + case 'matrix': + var value = trim(value).split(DILIMITER_REG); + m[0] = parseFloat(value[0]); + m[1] = parseFloat(value[1]); + m[2] = parseFloat(value[2]); + m[3] = parseFloat(value[3]); + m[4] = parseFloat(value[4]); + m[5] = parseFloat(value[5]); + break; + } + } + } + node.setLocalTransform(m); + +} + +// Value may contain space. +var styleRegex = /([^\s:;]+)\s*:\s*([^:;]+)/g; +function parseStyleAttribute(xmlNode) { + var style = xmlNode.getAttribute('style'); + var result = {}; + + if (!style) { + return result; + } + + var styleList = {}; + styleRegex.lastIndex = 0; + var styleRegResult; + while ((styleRegResult = styleRegex.exec(style)) != null) { + styleList[styleRegResult[1]] = styleRegResult[2]; + } + + for (var svgAttrName in attributesMap) { + if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) { + result[attributesMap[svgAttrName]] = styleList[svgAttrName]; + } + } + + return result; +} + +/** + * @param {Array.} viewBoxRect + * @param {number} width + * @param {number} height + * @return {Object} {scale, position} + */ +function makeViewBoxTransform(viewBoxRect, width, height) { + var scaleX = width / viewBoxRect.width; + var scaleY = height / viewBoxRect.height; + var scale = Math.min(scaleX, scaleY); + // preserveAspectRatio 'xMidYMid' + var viewBoxScale = [scale, scale]; + var viewBoxPosition = [ + -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2, + -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2 + ]; + + return { + scale: viewBoxScale, + position: viewBoxPosition + }; +} + +/** + * @param {string|XMLElement} xml + * @param {Object} [opt] + * @param {number} [opt.width] Default width if svg width not specified or is a percent value. + * @param {number} [opt.height] Default height if svg height not specified or is a percent value. + * @param {boolean} [opt.ignoreViewBox] + * @param {boolean} [opt.ignoreRootClip] + * @return {Object} result: + * { + * root: Group, The root of the the result tree of zrender shapes, + * width: number, the viewport width of the SVG, + * height: number, the viewport height of the SVG, + * viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists, + * viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists. + * } + */ +function parseSVG(xml, opt) { + var parser = new SVGParser(); + return parser.parse(xml, opt); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var storage = createHashMap(); + +// For minimize the code size of common echarts package, +// do not put too much logic in this module. + +var mapDataStorage = { + + // The format of record: see `echarts.registerMap`. + // Compatible with previous `echarts.registerMap`. + registerMap: function (mapName, rawGeoJson, rawSpecialAreas) { + + var records; + + if (isArray(rawGeoJson)) { + records = rawGeoJson; + } + else if (rawGeoJson.svg) { + records = [{ + type: 'svg', + source: rawGeoJson.svg, + specialAreas: rawGeoJson.specialAreas + }]; + } + else { + // Backward compatibility. + if (rawGeoJson.geoJson && !rawGeoJson.features) { + rawSpecialAreas = rawGeoJson.specialAreas; + rawGeoJson = rawGeoJson.geoJson; + } + records = [{ + type: 'geoJSON', + source: rawGeoJson, + specialAreas: rawSpecialAreas + }]; + } + + each$1(records, function (record) { + var type = record.type; + type === 'geoJson' && (type = record.type = 'geoJSON'); + + var parse = parsers[type]; + + if (__DEV__) { + assert$1(parse, 'Illegal map type: ' + type); + } + + parse(record); + }); + + return storage.set(mapName, records); + }, + + retrieveMap: function (mapName) { + return storage.get(mapName); + } + +}; + +var parsers = { + + geoJSON: function (record) { + var source = record.source; + record.geoJSON = !isString(source) + ? source + : (typeof JSON !== 'undefined' && JSON.parse) + ? JSON.parse(source) + : (new Function('return (' + source + ');'))(); + }, + + // Only perform parse to XML object here, which might be time + // consiming for large SVG. + // Although convert XML to zrender element is also time consiming, + // if we do it here, the clone of zrender elements has to be + // required. So we do it once for each geo instance, util real + // performance issues call for optimizing it. + svg: function (record) { + record.svgXML = parseXML(record.source); + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ +var assert = assert$1; +var each = each$1; +var isFunction = isFunction$1; +var isObject = isObject$1; +var parseClassType = ComponentModel.parseClassType; + +var version = '4.2.0'; + +var dependencies = { + zrender: '4.0.5' +}; + +var TEST_FRAME_REMAIN_TIME = 1; + +var PRIORITY_PROCESSOR_FILTER = 1000; +var PRIORITY_PROCESSOR_STATISTIC = 5000; + +var PRIORITY_VISUAL_LAYOUT = 1000; +var PRIORITY_VISUAL_GLOBAL = 2000; +var PRIORITY_VISUAL_CHART = 3000; +var PRIORITY_VISUAL_COMPONENT = 4000; +// FIXME +// necessary? +var PRIORITY_VISUAL_BRUSH = 5000; + +var PRIORITY = { + PROCESSOR: { + FILTER: PRIORITY_PROCESSOR_FILTER, + STATISTIC: PRIORITY_PROCESSOR_STATISTIC + }, + VISUAL: { + LAYOUT: PRIORITY_VISUAL_LAYOUT, + GLOBAL: PRIORITY_VISUAL_GLOBAL, + CHART: PRIORITY_VISUAL_CHART, + COMPONENT: PRIORITY_VISUAL_COMPONENT, + BRUSH: PRIORITY_VISUAL_BRUSH + } +}; + +// Main process have three entries: `setOption`, `dispatchAction` and `resize`, +// where they must not be invoked nestedly, except the only case: invoke +// dispatchAction with updateMethod "none" in main process. +// This flag is used to carry out this rule. +// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]). +var IN_MAIN_PROCESS = '__flagInMainProcess'; +var OPTION_UPDATED = '__optionUpdated'; +var ACTION_REG = /^[a-zA-Z0-9_]+$/; + + +function createRegisterEventWithLowercaseName(method) { + return function (eventName, handler, context) { + // Event name is all lowercase + eventName = eventName && eventName.toLowerCase(); + Eventful.prototype[method].call(this, eventName, handler, context); + }; +} + +/** + * @module echarts~MessageCenter + */ +function MessageCenter() { + Eventful.call(this); +} +MessageCenter.prototype.on = createRegisterEventWithLowercaseName('on'); +MessageCenter.prototype.off = createRegisterEventWithLowercaseName('off'); +MessageCenter.prototype.one = createRegisterEventWithLowercaseName('one'); +mixin(MessageCenter, Eventful); + +/** + * @module echarts~ECharts + */ +function ECharts(dom, theme$$1, opts) { + opts = opts || {}; + + // Get theme by name + if (typeof theme$$1 === 'string') { + theme$$1 = themeStorage[theme$$1]; + } + + /** + * @type {string} + */ + this.id; + + /** + * Group id + * @type {string} + */ + this.group; + + /** + * @type {HTMLElement} + * @private + */ + this._dom = dom; + + var defaultRenderer = 'canvas'; + if (__DEV__) { + defaultRenderer = ( + typeof window === 'undefined' ? global : window + ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer; + } + + /** + * @type {module:zrender/ZRender} + * @private + */ + var zr = this._zr = init$1(dom, { + renderer: opts.renderer || defaultRenderer, + devicePixelRatio: opts.devicePixelRatio, + width: opts.width, + height: opts.height + }); + + /** + * Expect 60 pfs. + * @type {Function} + * @private + */ + this._throttledZrFlush = throttle(bind(zr.flush, zr), 17); + + var theme$$1 = clone(theme$$1); + theme$$1 && backwardCompat(theme$$1, true); + /** + * @type {Object} + * @private + */ + this._theme = theme$$1; + + /** + * @type {Array.} + * @private + */ + this._chartsViews = []; + + /** + * @type {Object.} + * @private + */ + this._chartsMap = {}; + + /** + * @type {Array.} + * @private + */ + this._componentsViews = []; + + /** + * @type {Object.} + * @private + */ + this._componentsMap = {}; + + /** + * @type {module:echarts/CoordinateSystem} + * @private + */ + this._coordSysMgr = new CoordinateSystemManager(); + + /** + * @type {module:echarts/ExtensionAPI} + * @private + */ + var api = this._api = createExtensionAPI(this); + + // Sort on demand + function prioritySortFunc(a, b) { + return a.__prio - b.__prio; + } + sort(visualFuncs, prioritySortFunc); + sort(dataProcessorFuncs, prioritySortFunc); + + /** + * @type {module:echarts/stream/Scheduler} + */ + this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs); + + Eventful.call(this, this._ecEventProcessor = new EventProcessor()); + + /** + * @type {module:echarts~MessageCenter} + * @private + */ + this._messageCenter = new MessageCenter(); + + // Init mouse events + this._initEvents(); + + // In case some people write `window.onresize = chart.resize` + this.resize = bind(this.resize, this); + + // Can't dispatch action during rendering procedure + this._pendingActions = []; + + zr.animation.on('frame', this._onframe, this); + + bindRenderedEvent(zr, this); + + // ECharts instance can be used as value. + setAsPrimitive(this); +} + +var echartsProto = ECharts.prototype; + +echartsProto._onframe = function () { + if (this._disposed) { + return; + } + + var scheduler = this._scheduler; + + // Lazy update + if (this[OPTION_UPDATED]) { + var silent = this[OPTION_UPDATED].silent; + + this[IN_MAIN_PROCESS] = true; + + prepare(this); + updateMethods.update.call(this); + + this[IN_MAIN_PROCESS] = false; + + this[OPTION_UPDATED] = false; + + flushPendingActions.call(this, silent); + + triggerUpdatedEvent.call(this, silent); + } + // Avoid do both lazy update and progress in one frame. + else if (scheduler.unfinished) { + // Stream progress. + var remainTime = TEST_FRAME_REMAIN_TIME; + var ecModel = this._model; + var api = this._api; + scheduler.unfinished = false; + do { + var startTime = +new Date(); + + scheduler.performSeriesTasks(ecModel); + + // Currently dataProcessorFuncs do not check threshold. + scheduler.performDataProcessorTasks(ecModel); + + updateStreamModes(this, ecModel); + + // Do not update coordinate system here. Because that coord system update in + // each frame is not a good user experience. So we follow the rule that + // the extent of the coordinate system is determin in the first frame (the + // frame is executed immedietely after task reset. + // this._coordSysMgr.update(ecModel, api); + + // console.log('--- ec frame visual ---', remainTime); + scheduler.performVisualTasks(ecModel); + + renderSeries(this, this._model, api, 'remain'); + + remainTime -= (+new Date() - startTime); + } + while (remainTime > 0 && scheduler.unfinished); + + // Call flush explicitly for trigger finished event. + if (!scheduler.unfinished) { + this._zr.flush(); + } + // Else, zr flushing be ensue within the same frame, + // because zr flushing is after onframe event. + } +}; + +/** + * @return {HTMLElement} + */ +echartsProto.getDom = function () { + return this._dom; +}; + +/** + * @return {module:zrender~ZRender} + */ +echartsProto.getZr = function () { + return this._zr; +}; + +/** + * Usage: + * chart.setOption(option, notMerge, lazyUpdate); + * chart.setOption(option, { + * notMerge: ..., + * lazyUpdate: ..., + * silent: ... + * }); + * + * @param {Object} option + * @param {Object|boolean} [opts] opts or notMerge. + * @param {boolean} [opts.notMerge=false] + * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently. + */ +echartsProto.setOption = function (option, notMerge, lazyUpdate) { + if (__DEV__) { + assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.'); + } + + var silent; + if (isObject(notMerge)) { + lazyUpdate = notMerge.lazyUpdate; + silent = notMerge.silent; + notMerge = notMerge.notMerge; + } + + this[IN_MAIN_PROCESS] = true; + + if (!this._model || notMerge) { + var optionManager = new OptionManager(this._api); + var theme$$1 = this._theme; + var ecModel = this._model = new GlobalModel(null, null, theme$$1, optionManager); + ecModel.scheduler = this._scheduler; + ecModel.init(null, null, theme$$1, optionManager); + } + + this._model.setOption(option, optionPreprocessorFuncs); + + if (lazyUpdate) { + this[OPTION_UPDATED] = {silent: silent}; + this[IN_MAIN_PROCESS] = false; + } + else { + prepare(this); + + updateMethods.update.call(this); + + // Ensure zr refresh sychronously, and then pixel in canvas can be + // fetched after `setOption`. + this._zr.flush(); + + this[OPTION_UPDATED] = false; + this[IN_MAIN_PROCESS] = false; + + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + } +}; + +/** + * @DEPRECATED + */ +echartsProto.setTheme = function () { + console.error('ECharts#setTheme() is DEPRECATED in ECharts 3.0'); +}; + +/** + * @return {module:echarts/model/Global} + */ +echartsProto.getModel = function () { + return this._model; +}; + +/** + * @return {Object} + */ +echartsProto.getOption = function () { + return this._model && this._model.getOption(); +}; + +/** + * @return {number} + */ +echartsProto.getWidth = function () { + return this._zr.getWidth(); +}; + +/** + * @return {number} + */ +echartsProto.getHeight = function () { + return this._zr.getHeight(); +}; + +/** + * @return {number} + */ +echartsProto.getDevicePixelRatio = function () { + return this._zr.painter.dpr || window.devicePixelRatio || 1; +}; + +/** + * Get canvas which has all thing rendered + * @param {Object} opts + * @param {string} [opts.backgroundColor] + * @return {string} + */ +echartsProto.getRenderedCanvas = function (opts) { + if (!env$1.canvasSupported) { + return; + } + opts = opts || {}; + opts.pixelRatio = opts.pixelRatio || 1; + opts.backgroundColor = opts.backgroundColor + || this._model.get('backgroundColor'); + var zr = this._zr; + // var list = zr.storage.getDisplayList(); + // Stop animations + // Never works before in init animation, so remove it. + // zrUtil.each(list, function (el) { + // el.stopAnimation(true); + // }); + return zr.painter.getRenderedCanvas(opts); +}; + +/** + * Get svg data url + * @return {string} + */ +echartsProto.getSvgDataUrl = function () { + if (!env$1.svgSupported) { + return; + } + + var zr = this._zr; + var list = zr.storage.getDisplayList(); + // Stop animations + each$1(list, function (el) { + el.stopAnimation(true); + }); + + return zr.painter.pathToDataUrl(); +}; + +/** + * @return {string} + * @param {Object} opts + * @param {string} [opts.type='png'] + * @param {string} [opts.pixelRatio=1] + * @param {string} [opts.backgroundColor] + * @param {string} [opts.excludeComponents] + */ +echartsProto.getDataURL = function (opts) { + opts = opts || {}; + var excludeComponents = opts.excludeComponents; + var ecModel = this._model; + var excludesComponentViews = []; + var self = this; + + each(excludeComponents, function (componentType) { + ecModel.eachComponent({ + mainType: componentType + }, function (component) { + var view = self._componentsMap[component.__viewId]; + if (!view.group.ignore) { + excludesComponentViews.push(view); + view.group.ignore = true; + } + }); + }); + + var url = this._zr.painter.getType() === 'svg' + ? this.getSvgDataUrl() + : this.getRenderedCanvas(opts).toDataURL( + 'image/' + (opts && opts.type || 'png') + ); + + each(excludesComponentViews, function (view) { + view.group.ignore = false; + }); + + return url; +}; + + +/** + * @return {string} + * @param {Object} opts + * @param {string} [opts.type='png'] + * @param {string} [opts.pixelRatio=1] + * @param {string} [opts.backgroundColor] + */ +echartsProto.getConnectedDataURL = function (opts) { + if (!env$1.canvasSupported) { + return; + } + var groupId = this.group; + var mathMin = Math.min; + var mathMax = Math.max; + var MAX_NUMBER = Infinity; + if (connectedGroups[groupId]) { + var left = MAX_NUMBER; + var top = MAX_NUMBER; + var right = -MAX_NUMBER; + var bottom = -MAX_NUMBER; + var canvasList = []; + var dpr = (opts && opts.pixelRatio) || 1; + + each$1(instances, function (chart, id) { + if (chart.group === groupId) { + var canvas = chart.getRenderedCanvas( + clone(opts) + ); + var boundingRect = chart.getDom().getBoundingClientRect(); + left = mathMin(boundingRect.left, left); + top = mathMin(boundingRect.top, top); + right = mathMax(boundingRect.right, right); + bottom = mathMax(boundingRect.bottom, bottom); + canvasList.push({ + dom: canvas, + left: boundingRect.left, + top: boundingRect.top + }); + } + }); + + left *= dpr; + top *= dpr; + right *= dpr; + bottom *= dpr; + var width = right - left; + var height = bottom - top; + var targetCanvas = createCanvas(); + targetCanvas.width = width; + targetCanvas.height = height; + var zr = init$1(targetCanvas); + + each(canvasList, function (item) { + var img = new ZImage({ + style: { + x: item.left * dpr - left, + y: item.top * dpr - top, + image: item.dom + } + }); + zr.add(img); + }); + zr.refreshImmediately(); + + return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png')); + } + else { + return this.getDataURL(opts); + } +}; + +/** + * Convert from logical coordinate system to pixel coordinate system. + * See CoordinateSystem#convertToPixel. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId, geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName, + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {Array|number} result + */ +echartsProto.convertToPixel = curry(doConvertPixel, 'convertToPixel'); + +/** + * Convert from pixel coordinate system to logical coordinate system. + * See CoordinateSystem#convertFromPixel. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId / geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {Array|number} result + */ +echartsProto.convertFromPixel = curry(doConvertPixel, 'convertFromPixel'); + +function doConvertPixel(methodName, finder, value) { + var ecModel = this._model; + var coordSysList = this._coordSysMgr.getCoordinateSystems(); + var result; + + finder = parseFinder(ecModel, finder); + + for (var i = 0; i < coordSysList.length; i++) { + var coordSys = coordSysList[i]; + if (coordSys[methodName] + && (result = coordSys[methodName](ecModel, finder, value)) != null + ) { + return result; + } + } + + if (__DEV__) { + console.warn( + 'No coordinate system that supports ' + methodName + ' found by the given finder.' + ); + } +} + +/** + * Is the specified coordinate systems or components contain the given pixel point. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId / geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName, + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {boolean} result + */ +echartsProto.containPixel = function (finder, value) { + var ecModel = this._model; + var result; + + finder = parseFinder(ecModel, finder); + + each$1(finder, function (models, key) { + key.indexOf('Models') >= 0 && each$1(models, function (model) { + var coordSys = model.coordinateSystem; + if (coordSys && coordSys.containPoint) { + result |= !!coordSys.containPoint(value); + } + else if (key === 'seriesModels') { + var view = this._chartsMap[model.__viewId]; + if (view && view.containPoint) { + result |= view.containPoint(value, model); + } + else { + if (__DEV__) { + console.warn(key + ': ' + (view + ? 'The found component do not support containPoint.' + : 'No view mapping to the found component.' + )); + } + } + } + else { + if (__DEV__) { + console.warn(key + ': containPoint is not supported'); + } + } + }, this); + }, this); + + return !!result; +}; + +/** + * Get visual from series or data. + * @param {string|Object} finder + * If string, e.g., 'series', means {seriesIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * dataIndex / dataIndexInside + * } + * If dataIndex is not specified, series visual will be fetched, + * but not data item visual. + * If all of seriesIndex, seriesId, seriesName are not specified, + * visual will be fetched from first series. + * @param {string} visualType 'color', 'symbol', 'symbolSize' + */ +echartsProto.getVisual = function (finder, visualType) { + var ecModel = this._model; + + finder = parseFinder(ecModel, finder, {defaultMainType: 'series'}); + + var seriesModel = finder.seriesModel; + + if (__DEV__) { + if (!seriesModel) { + console.warn('There is no specified seires model'); + } + } + + var data = seriesModel.getData(); + + var dataIndexInside = finder.hasOwnProperty('dataIndexInside') + ? finder.dataIndexInside + : finder.hasOwnProperty('dataIndex') + ? data.indexOfRawIndex(finder.dataIndex) + : null; + + return dataIndexInside != null + ? data.getItemVisual(dataIndexInside, visualType) + : data.getVisual(visualType); +}; + +/** + * Get view of corresponding component model + * @param {module:echarts/model/Component} componentModel + * @return {module:echarts/view/Component} + */ +echartsProto.getViewOfComponentModel = function (componentModel) { + return this._componentsMap[componentModel.__viewId]; +}; + +/** + * Get view of corresponding series model + * @param {module:echarts/model/Series} seriesModel + * @return {module:echarts/view/Chart} + */ +echartsProto.getViewOfSeriesModel = function (seriesModel) { + return this._chartsMap[seriesModel.__viewId]; +}; + +var updateMethods = { + + prepareAndUpdate: function (payload) { + prepare(this); + updateMethods.update.call(this, payload); + }, + + /** + * @param {Object} payload + * @private + */ + update: function (payload) { + // console.profile && console.profile('update'); + + var ecModel = this._model; + var api = this._api; + var zr = this._zr; + var coordSysMgr = this._coordSysMgr; + var scheduler = this._scheduler; + + // update before setOption + if (!ecModel) { + return; + } + + scheduler.restoreData(ecModel, payload); + + scheduler.performSeriesTasks(ecModel); + + // TODO + // Save total ecModel here for undo/redo (after restoring data and before processing data). + // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call. + + // Create new coordinate system each update + // In LineView may save the old coordinate system and use it to get the orignal point + coordSysMgr.create(ecModel, api); + + scheduler.performDataProcessorTasks(ecModel, payload); + + // Current stream render is not supported in data process. So we can update + // stream modes after data processing, where the filtered data is used to + // deteming whether use progressive rendering. + updateStreamModes(this, ecModel); + + // We update stream modes before coordinate system updated, then the modes info + // can be fetched when coord sys updating (consider the barGrid extent fix). But + // the drawback is the full coord info can not be fetched. Fortunately this full + // coord is not requied in stream mode updater currently. + coordSysMgr.update(ecModel, api); + + clearColorPalette(ecModel); + scheduler.performVisualTasks(ecModel, payload); + + render(this, ecModel, api, payload); + + // Set background + var backgroundColor = ecModel.get('backgroundColor') || 'transparent'; + + // In IE8 + if (!env$1.canvasSupported) { + var colorArr = parse(backgroundColor); + backgroundColor = stringify(colorArr, 'rgb'); + if (colorArr[3] === 0) { + backgroundColor = 'transparent'; + } + } + else { + zr.setBackgroundColor(backgroundColor); + } + + performPostUpdateFuncs(ecModel, api); + + // console.profile && console.profileEnd('update'); + }, + + /** + * @param {Object} payload + * @private + */ + updateTransform: function (payload) { + var ecModel = this._model; + var ecIns = this; + var api = this._api; + + // update before setOption + if (!ecModel) { + return; + } + + // ChartView.markUpdateMethod(payload, 'updateTransform'); + + var componentDirtyList = []; + ecModel.eachComponent(function (componentType, componentModel) { + var componentView = ecIns.getViewOfComponentModel(componentModel); + if (componentView && componentView.__alive) { + if (componentView.updateTransform) { + var result = componentView.updateTransform(componentModel, ecModel, api, payload); + result && result.update && componentDirtyList.push(componentView); + } + else { + componentDirtyList.push(componentView); + } + } + }); + + var seriesDirtyMap = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var chartView = ecIns._chartsMap[seriesModel.__viewId]; + if (chartView.updateTransform) { + var result = chartView.updateTransform(seriesModel, ecModel, api, payload); + result && result.update && seriesDirtyMap.set(seriesModel.uid, 1); + } + else { + seriesDirtyMap.set(seriesModel.uid, 1); + } + }); + + clearColorPalette(ecModel); + // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true); + this._scheduler.performVisualTasks( + ecModel, payload, {setDirty: true, dirtyMap: seriesDirtyMap} + ); + + // Currently, not call render of components. Geo render cost a lot. + // renderComponents(ecIns, ecModel, api, payload, componentDirtyList); + renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap); + + performPostUpdateFuncs(ecModel, this._api); + }, + + /** + * @param {Object} payload + * @private + */ + updateView: function (payload) { + var ecModel = this._model; + + // update before setOption + if (!ecModel) { + return; + } + + Chart.markUpdateMethod(payload, 'updateView'); + + clearColorPalette(ecModel); + + // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true}); + + render(this, this._model, this._api, payload); + + performPostUpdateFuncs(ecModel, this._api); + }, + + /** + * @param {Object} payload + * @private + */ + updateVisual: function (payload) { + updateMethods.update.call(this, payload); + + // var ecModel = this._model; + + // // update before setOption + // if (!ecModel) { + // return; + // } + + // ChartView.markUpdateMethod(payload, 'updateVisual'); + + // clearColorPalette(ecModel); + + // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + // this._scheduler.performVisualTasks(ecModel, payload, {visualType: 'visual', setDirty: true}); + + // render(this, this._model, this._api, payload); + + // performPostUpdateFuncs(ecModel, this._api); + }, + + /** + * @param {Object} payload + * @private + */ + updateLayout: function (payload) { + updateMethods.update.call(this, payload); + + // var ecModel = this._model; + + // // update before setOption + // if (!ecModel) { + // return; + // } + + // ChartView.markUpdateMethod(payload, 'updateLayout'); + + // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + // // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true); + // this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true}); + + // render(this, this._model, this._api, payload); + + // performPostUpdateFuncs(ecModel, this._api); + } +}; + +function prepare(ecIns) { + var ecModel = ecIns._model; + var scheduler = ecIns._scheduler; + + scheduler.restorePipelines(ecModel); + + scheduler.prepareStageTasks(); + + prepareView(ecIns, 'component', ecModel, scheduler); + + prepareView(ecIns, 'chart', ecModel, scheduler); + + scheduler.plan(); +} + +/** + * @private + */ +function updateDirectly(ecIns, method, payload, mainType, subType) { + var ecModel = ecIns._model; + + // broadcast + if (!mainType) { + // FIXME + // Chart will not be update directly here, except set dirty. + // But there is no such scenario now. + each(ecIns._componentsViews.concat(ecIns._chartsViews), callView); + return; + } + + var query = {}; + query[mainType + 'Id'] = payload[mainType + 'Id']; + query[mainType + 'Index'] = payload[mainType + 'Index']; + query[mainType + 'Name'] = payload[mainType + 'Name']; + + var condition = {mainType: mainType, query: query}; + subType && (condition.subType = subType); // subType may be '' by parseClassType; + + var excludeSeriesId = payload.excludeSeriesId; + if (excludeSeriesId != null) { + excludeSeriesId = createHashMap(normalizeToArray(excludeSeriesId)); + } + + // If dispatchAction before setOption, do nothing. + ecModel && ecModel.eachComponent(condition, function (model) { + if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) { + callView(ecIns[ + mainType === 'series' ? '_chartsMap' : '_componentsMap' + ][model.__viewId]); + } + }, ecIns); + + function callView(view) { + view && view.__alive && view[method] && view[method]( + view.__model, ecModel, ecIns._api, payload + ); + } +} + +/** + * Resize the chart + * @param {Object} opts + * @param {number} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Can be 'auto' (the same as null/undefined) + * @param {boolean} [opts.silent=false] + */ +echartsProto.resize = function (opts) { + if (__DEV__) { + assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.'); + } + + this._zr.resize(opts); + + var ecModel = this._model; + + // Resize loading effect + this._loadingFX && this._loadingFX.resize(); + + if (!ecModel) { + return; + } + + var optionChanged = ecModel.resetOption('media'); + + var silent = opts && opts.silent; + + this[IN_MAIN_PROCESS] = true; + + optionChanged && prepare(this); + updateMethods.update.call(this); + + this[IN_MAIN_PROCESS] = false; + + flushPendingActions.call(this, silent); + + triggerUpdatedEvent.call(this, silent); +}; + +function updateStreamModes(ecIns, ecModel) { + var chartsMap = ecIns._chartsMap; + var scheduler = ecIns._scheduler; + ecModel.eachSeries(function (seriesModel) { + scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]); + }); +} + +/** + * Show loading effect + * @param {string} [name='default'] + * @param {Object} [cfg] + */ +echartsProto.showLoading = function (name, cfg) { + if (isObject(name)) { + cfg = name; + name = ''; + } + name = name || 'default'; + + this.hideLoading(); + if (!loadingEffects[name]) { + if (__DEV__) { + console.warn('Loading effects ' + name + ' not exists.'); + } + return; + } + var el = loadingEffects[name](this._api, cfg); + var zr = this._zr; + this._loadingFX = el; + + zr.add(el); +}; + +/** + * Hide loading effect + */ +echartsProto.hideLoading = function () { + this._loadingFX && this._zr.remove(this._loadingFX); + this._loadingFX = null; +}; + +/** + * @param {Object} eventObj + * @return {Object} + */ +echartsProto.makeActionFromEvent = function (eventObj) { + var payload = extend({}, eventObj); + payload.type = eventActionMap[eventObj.type]; + return payload; +}; + +/** + * @pubilc + * @param {Object} payload + * @param {string} [payload.type] Action type + * @param {Object|boolean} [opt] If pass boolean, means opt.silent + * @param {boolean} [opt.silent=false] Whether trigger events. + * @param {boolean} [opt.flush=undefined] + * true: Flush immediately, and then pixel in canvas can be fetched + * immediately. Caution: it might affect performance. + * false: Not not flush. + * undefined: Auto decide whether perform flush. + */ +echartsProto.dispatchAction = function (payload, opt) { + if (!isObject(opt)) { + opt = {silent: !!opt}; + } + + if (!actions[payload.type]) { + return; + } + + // Avoid dispatch action before setOption. Especially in `connect`. + if (!this._model) { + return; + } + + // May dispatchAction in rendering procedure + if (this[IN_MAIN_PROCESS]) { + this._pendingActions.push(payload); + return; + } + + doDispatchAction.call(this, payload, opt.silent); + + if (opt.flush) { + this._zr.flush(true); + } + else if (opt.flush !== false && env$1.browser.weChat) { + // In WeChat embeded browser, `requestAnimationFrame` and `setInterval` + // hang when sliding page (on touch event), which cause that zr does not + // refresh util user interaction finished, which is not expected. + // But `dispatchAction` may be called too frequently when pan on touch + // screen, which impacts performance if do not throttle them. + this._throttledZrFlush(); + } + + flushPendingActions.call(this, opt.silent); + + triggerUpdatedEvent.call(this, opt.silent); +}; + +function doDispatchAction(payload, silent) { + var payloadType = payload.type; + var escapeConnect = payload.escapeConnect; + var actionWrap = actions[payloadType]; + var actionInfo = actionWrap.actionInfo; + + var cptType = (actionInfo.update || 'update').split(':'); + var updateMethod = cptType.pop(); + cptType = cptType[0] != null && parseClassType(cptType[0]); + + this[IN_MAIN_PROCESS] = true; + + var payloads = [payload]; + var batched = false; + // Batch action + if (payload.batch) { + batched = true; + payloads = map(payload.batch, function (item) { + item = defaults(extend({}, item), payload); + item.batch = null; + return item; + }); + } + + var eventObjBatch = []; + var eventObj; + var isHighDown = payloadType === 'highlight' || payloadType === 'downplay'; + + each(payloads, function (batchItem) { + // Action can specify the event by return it. + eventObj = actionWrap.action(batchItem, this._model, this._api); + // Emit event outside + eventObj = eventObj || extend({}, batchItem); + // Convert type to eventType + eventObj.type = actionInfo.event || eventObj.type; + eventObjBatch.push(eventObj); + + // light update does not perform data process, layout and visual. + if (isHighDown) { + // method, payload, mainType, subType + updateDirectly(this, updateMethod, batchItem, 'series'); + } + else if (cptType) { + updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub); + } + }, this); + + if (updateMethod !== 'none' && !isHighDown && !cptType) { + // Still dirty + if (this[OPTION_UPDATED]) { + // FIXME Pass payload ? + prepare(this); + updateMethods.update.call(this, payload); + this[OPTION_UPDATED] = false; + } + else { + updateMethods[updateMethod].call(this, payload); + } + } + + // Follow the rule of action batch + if (batched) { + eventObj = { + type: actionInfo.event || payloadType, + escapeConnect: escapeConnect, + batch: eventObjBatch + }; + } + else { + eventObj = eventObjBatch[0]; + } + + this[IN_MAIN_PROCESS] = false; + + !silent && this._messageCenter.trigger(eventObj.type, eventObj); +} + +function flushPendingActions(silent) { + var pendingActions = this._pendingActions; + while (pendingActions.length) { + var payload = pendingActions.shift(); + doDispatchAction.call(this, payload, silent); + } +} + +function triggerUpdatedEvent(silent) { + !silent && this.trigger('updated'); +} + +/** + * Event `rendered` is triggered when zr + * rendered. It is useful for realtime + * snapshot (reflect animation). + * + * Event `finished` is triggered when: + * (1) zrender rendering finished. + * (2) initial animation finished. + * (3) progressive rendering finished. + * (4) no pending action. + * (5) no delayed setOption needs to be processed. + */ +function bindRenderedEvent(zr, ecIns) { + zr.on('rendered', function () { + + ecIns.trigger('rendered'); + + // The `finished` event should not be triggered repeatly, + // so it should only be triggered when rendering indeed happend + // in zrender. (Consider the case that dipatchAction is keep + // triggering when mouse move). + if ( + // Although zr is dirty if initial animation is not finished + // and this checking is called on frame, we also check + // animation finished for robustness. + zr.animation.isFinished() + && !ecIns[OPTION_UPDATED] + && !ecIns._scheduler.unfinished + && !ecIns._pendingActions.length + ) { + ecIns.trigger('finished'); + } + }); +} + +/** + * @param {Object} params + * @param {number} params.seriesIndex + * @param {Array|TypedArray} params.data + */ +echartsProto.appendData = function (params) { + var seriesIndex = params.seriesIndex; + var ecModel = this.getModel(); + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + + if (__DEV__) { + assert(params.data && seriesModel); + } + + seriesModel.appendData(params); + + // Note: `appendData` does not support that update extent of coordinate + // system, util some scenario require that. In the expected usage of + // `appendData`, the initial extent of coordinate system should better + // be fixed by axis `min`/`max` setting or initial data, otherwise if + // the extent changed while `appendData`, the location of the painted + // graphic elements have to be changed, which make the usage of + // `appendData` meaningless. + + this._scheduler.unfinished = true; +}; + +/** + * Register event + * @method + */ +echartsProto.on = createRegisterEventWithLowercaseName('on'); +echartsProto.off = createRegisterEventWithLowercaseName('off'); +echartsProto.one = createRegisterEventWithLowercaseName('one'); + +/** + * Prepare view instances of charts and components + * @param {module:echarts/model/Global} ecModel + * @private + */ +function prepareView(ecIns, type, ecModel, scheduler) { + var isComponent = type === 'component'; + var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews; + var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap; + var zr = ecIns._zr; + var api = ecIns._api; + + for (var i = 0; i < viewList.length; i++) { + viewList[i].__alive = false; + } + + isComponent + ? ecModel.eachComponent(function (componentType, model) { + componentType !== 'series' && doPrepare(model); + }) + : ecModel.eachSeries(doPrepare); + + function doPrepare(model) { + // Consider: id same and type changed. + var viewId = '_ec_' + model.id + '_' + model.type; + var view = viewMap[viewId]; + if (!view) { + var classType = parseClassType(model.type); + var Clazz = isComponent + ? Component.getClass(classType.main, classType.sub) + : Chart.getClass(classType.sub); + + if (__DEV__) { + assert(Clazz, classType.sub + ' does not exist.'); + } + + view = new Clazz(); + view.init(ecModel, api); + viewMap[viewId] = view; + viewList.push(view); + zr.add(view.group); + } + + model.__viewId = view.__id = viewId; + view.__alive = true; + view.__model = model; + view.group.__ecComponentInfo = { + mainType: model.mainType, + index: model.componentIndex + }; + !isComponent && scheduler.prepareView(view, model, ecModel, api); + } + + for (var i = 0; i < viewList.length;) { + var view = viewList[i]; + if (!view.__alive) { + !isComponent && view.renderTask.dispose(); + zr.remove(view.group); + view.dispose(ecModel, api); + viewList.splice(i, 1); + delete viewMap[view.__id]; + view.__id = view.group.__ecComponentInfo = null; + } + else { + i++; + } + } +} + +// /** +// * Encode visual infomation from data after data processing +// * +// * @param {module:echarts/model/Global} ecModel +// * @param {object} layout +// * @param {boolean} [layoutFilter] `true`: only layout, +// * `false`: only not layout, +// * `null`/`undefined`: all. +// * @param {string} taskBaseTag +// * @private +// */ +// function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) { +// each(visualFuncs, function (visual, index) { +// var isLayout = visual.isLayout; +// if (layoutFilter == null +// || (layoutFilter === false && !isLayout) +// || (layoutFilter === true && isLayout) +// ) { +// visual.func(ecModel, api, payload); +// } +// }); +// } + +function clearColorPalette(ecModel) { + ecModel.clearColorPalette(); + ecModel.eachSeries(function (seriesModel) { + seriesModel.clearColorPalette(); + }); +} + +function render(ecIns, ecModel, api, payload) { + + renderComponents(ecIns, ecModel, api, payload); + + each(ecIns._chartsViews, function (chart) { + chart.__alive = false; + }); + + renderSeries(ecIns, ecModel, api, payload); + + // Remove groups of unrendered charts + each(ecIns._chartsViews, function (chart) { + if (!chart.__alive) { + chart.remove(ecModel, api); + } + }); +} + +function renderComponents(ecIns, ecModel, api, payload, dirtyList) { + each(dirtyList || ecIns._componentsViews, function (componentView) { + var componentModel = componentView.__model; + componentView.render(componentModel, ecModel, api, payload); + + updateZ(componentModel, componentView); + }); +} + +/** + * Render each chart and component + * @private + */ +function renderSeries(ecIns, ecModel, api, payload, dirtyMap) { + // Render all charts + var scheduler = ecIns._scheduler; + var unfinished; + ecModel.eachSeries(function (seriesModel) { + var chartView = ecIns._chartsMap[seriesModel.__viewId]; + chartView.__alive = true; + + var renderTask = chartView.renderTask; + scheduler.updatePayload(renderTask, payload); + + if (dirtyMap && dirtyMap.get(seriesModel.uid)) { + renderTask.dirty(); + } + + unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask)); + + chartView.group.silent = !!seriesModel.get('silent'); + + updateZ(seriesModel, chartView); + + updateBlend(seriesModel, chartView); + }); + scheduler.unfinished |= unfinished; + + // If use hover layer + updateHoverLayerStatus(ecIns._zr, ecModel); + + // Add aria + aria(ecIns._zr.dom, ecModel); +} + +function performPostUpdateFuncs(ecModel, api) { + each(postUpdateFuncs, function (func) { + func(ecModel, api); + }); +} + + +var MOUSE_EVENT_NAMES = [ + 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', + 'mousedown', 'mouseup', 'globalout', 'contextmenu' +]; + +/** + * @private + */ +echartsProto._initEvents = function () { + each(MOUSE_EVENT_NAMES, function (eveName) { + this._zr.on(eveName, function (e) { + var ecModel = this.getModel(); + var el = e.target; + var params; + var isGlobalOut = eveName === 'globalout'; + + // no e.target when 'globalout'. + if (isGlobalOut) { + params = {}; + } + else if (el && el.dataIndex != null) { + var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex); + params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType, el) || {}; + } + // If element has custom eventData of components + else if (el && el.eventData) { + params = extend({}, el.eventData); + } + + // Contract: if params prepared in mouse event, + // these properties must be specified: + // { + // componentType: string (component main type) + // componentIndex: number + // } + // Otherwise event query can not work. + + if (params) { + var componentType = params.componentType; + var componentIndex = params.componentIndex; + // Special handling for historic reason: when trigger by + // markLine/markPoint/markArea, the componentType is + // 'markLine'/'markPoint'/'markArea', but we should better + // enable them to be queried by seriesIndex, since their + // option is set in each series. + if (componentType === 'markLine' + || componentType === 'markPoint' + || componentType === 'markArea' + ) { + componentType = 'series'; + componentIndex = params.seriesIndex; + } + var model = componentType && componentIndex != null + && ecModel.getComponent(componentType, componentIndex); + var view = model && this[ + model.mainType === 'series' ? '_chartsMap' : '_componentsMap' + ][model.__viewId]; + + if (__DEV__) { + // `event.componentType` and `event[componentTpype + 'Index']` must not + // be missed, otherwise there is no way to distinguish source component. + // See `dataFormat.getDataParams`. + if (!isGlobalOut && !(model && view)) { + console.warn('model or view can not be found by params'); + } + } + + params.event = e; + params.type = eveName; + + this._ecEventProcessor.eventInfo = { + targetEl: el, + packedEvent: params, + model: model, + view: view + }; + + this.trigger(eveName, params); + } + + }, this); + }, this); + + each(eventActionMap, function (actionType, eventType) { + this._messageCenter.on(eventType, function (event) { + this.trigger(eventType, event); + }, this); + }, this); +}; + +/** + * @return {boolean} + */ +echartsProto.isDisposed = function () { + return this._disposed; +}; + +/** + * Clear + */ +echartsProto.clear = function () { + this.setOption({ series: [] }, true); +}; + +/** + * Dispose instance + */ +echartsProto.dispose = function () { + if (this._disposed) { + if (__DEV__) { + console.warn('Instance ' + this.id + ' has been disposed'); + } + return; + } + this._disposed = true; + + setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, ''); + + var api = this._api; + var ecModel = this._model; + + each(this._componentsViews, function (component) { + component.dispose(ecModel, api); + }); + each(this._chartsViews, function (chart) { + chart.dispose(ecModel, api); + }); + + // Dispose after all views disposed + this._zr.dispose(); + + delete instances[this.id]; +}; + +mixin(ECharts, Eventful); + +function updateHoverLayerStatus(zr, ecModel) { + var storage = zr.storage; + var elCount = 0; + storage.traverse(function (el) { + if (!el.isGroup) { + elCount++; + } + }); + if (elCount > ecModel.get('hoverLayerThreshold') && !env$1.node) { + storage.traverse(function (el) { + if (!el.isGroup) { + // Don't switch back. + el.useHoverLayer = true; + } + }); + } +} + +/** + * Update chart progressive and blend. + * @param {module:echarts/model/Series|module:echarts/model/Component} model + * @param {module:echarts/view/Component|module:echarts/view/Chart} view + */ +function updateBlend(seriesModel, chartView) { + var blendMode = seriesModel.get('blendMode') || null; + if (__DEV__) { + if (!env$1.canvasSupported && blendMode && blendMode !== 'source-over') { + console.warn('Only canvas support blendMode'); + } + } + chartView.group.traverse(function (el) { + // FIXME marker and other components + if (!el.isGroup) { + // Only set if blendMode is changed. In case element is incremental and don't wan't to rerender. + if (el.style.blend !== blendMode) { + el.setStyle('blend', blendMode); + } + } + if (el.eachPendingDisplayable) { + el.eachPendingDisplayable(function (displayable) { + displayable.setStyle('blend', blendMode); + }); + } + }); +} + +/** + * @param {module:echarts/model/Series|module:echarts/model/Component} model + * @param {module:echarts/view/Component|module:echarts/view/Chart} view + */ +function updateZ(model, view) { + var z = model.get('z'); + var zlevel = model.get('zlevel'); + // Set z and zlevel + view.group.traverse(function (el) { + if (el.type !== 'group') { + z != null && (el.z = z); + zlevel != null && (el.zlevel = zlevel); + } + }); +} + +function createExtensionAPI(ecInstance) { + var coordSysMgr = ecInstance._coordSysMgr; + return extend(new ExtensionAPI(ecInstance), { + // Inject methods + getCoordinateSystems: bind( + coordSysMgr.getCoordinateSystems, coordSysMgr + ), + getComponentByElement: function (el) { + while (el) { + var modelInfo = el.__ecComponentInfo; + if (modelInfo != null) { + return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index); + } + el = el.parent; + } + } + }); +} + + +/** + * @class + * Usage of query: + * `chart.on('click', query, handler);` + * The `query` can be: + * + The component type query string, only `mainType` or `mainType.subType`, + * like: 'xAxis', 'series', 'xAxis.category' or 'series.line'. + * + The component query object, like: + * `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`, + * `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`. + * + The data query object, like: + * `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`. + * + The other query object (cmponent customized query), like: + * `{element: 'some'}` (only available in custom series). + * + * Caveat: If a prop in the `query` object is `null/undefined`, it is the + * same as there is no such prop in the `query` object. + */ +function EventProcessor() { + // These info required: targetEl, packedEvent, model, view + this.eventInfo; +} +EventProcessor.prototype = { + constructor: EventProcessor, + + normalizeQuery: function (query) { + var cptQuery = {}; + var dataQuery = {}; + var otherQuery = {}; + + // `query` is `mainType` or `mainType.subType` of component. + if (isString(query)) { + var condCptType = parseClassType(query); + // `.main` and `.sub` may be ''. + cptQuery.mainType = condCptType.main || null; + cptQuery.subType = condCptType.sub || null; + } + // `query` is an object, convert to {mainType, index, name, id}. + else { + // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved, + // can not be used in `compomentModel.filterForExposedEvent`. + var suffixes = ['Index', 'Name', 'Id']; + var dataKeys = {name: 1, dataIndex: 1, dataType: 1}; + each$1(query, function (val, key) { + var reserved = false; + for (var i = 0; i < suffixes.length; i++) { + var propSuffix = suffixes[i]; + var suffixPos = key.lastIndexOf(propSuffix); + if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) { + var mainType = key.slice(0, suffixPos); + // Consider `dataIndex`. + if (mainType !== 'data') { + cptQuery.mainType = mainType; + cptQuery[propSuffix.toLowerCase()] = val; + reserved = true; + } + } + } + if (dataKeys.hasOwnProperty(key)) { + dataQuery[key] = val; + reserved = true; + } + if (!reserved) { + otherQuery[key] = val; + } + }); + } + + return { + cptQuery: cptQuery, + dataQuery: dataQuery, + otherQuery: otherQuery + }; + }, + + filter: function (eventType, query, args) { + // They should be assigned before each trigger call. + var eventInfo = this.eventInfo; + + if (!eventInfo) { + return true; + } + + var targetEl = eventInfo.targetEl; + var packedEvent = eventInfo.packedEvent; + var model = eventInfo.model; + var view = eventInfo.view; + + // For event like 'globalout'. + if (!model || !view) { + return true; + } + + var cptQuery = query.cptQuery; + var dataQuery = query.dataQuery; + + return check(cptQuery, model, 'mainType') + && check(cptQuery, model, 'subType') + && check(cptQuery, model, 'index', 'componentIndex') + && check(cptQuery, model, 'name') + && check(cptQuery, model, 'id') + && check(dataQuery, packedEvent, 'name') + && check(dataQuery, packedEvent, 'dataIndex') + && check(dataQuery, packedEvent, 'dataType') + && (!view.filterForExposedEvent || view.filterForExposedEvent( + eventType, query.otherQuery, targetEl, packedEvent + )); + + function check(query, host, prop, propOnHost) { + return query[prop] == null || host[propOnHost || prop] === query[prop]; + } + }, + + afterTrigger: function () { + // Make sure the eventInfo wont be used in next trigger. + this.eventInfo = null; + } +}; + + +/** + * @type {Object} key: actionType. + * @inner + */ +var actions = {}; + +/** + * Map eventType to actionType + * @type {Object} + */ +var eventActionMap = {}; + +/** + * Data processor functions of each stage + * @type {Array.>} + * @inner + */ +var dataProcessorFuncs = []; + +/** + * @type {Array.} + * @inner + */ +var optionPreprocessorFuncs = []; + +/** + * @type {Array.} + * @inner + */ +var postUpdateFuncs = []; + +/** + * Visual encoding functions of each stage + * @type {Array.>} + */ +var visualFuncs = []; + +/** + * Theme storage + * @type {Object.} + */ +var themeStorage = {}; +/** + * Loading effects + */ +var loadingEffects = {}; + +var instances = {}; +var connectedGroups = {}; + +var idBase = new Date() - 0; +var groupIdBase = new Date() - 0; +var DOM_ATTRIBUTE_KEY = '_echarts_instance_'; + +function enableConnect(chart) { + var STATUS_PENDING = 0; + var STATUS_UPDATING = 1; + var STATUS_UPDATED = 2; + var STATUS_KEY = '__connectUpdateStatus'; + + function updateConnectedChartsStatus(charts, status) { + for (var i = 0; i < charts.length; i++) { + var otherChart = charts[i]; + otherChart[STATUS_KEY] = status; + } + } + + each(eventActionMap, function (actionType, eventType) { + chart._messageCenter.on(eventType, function (event) { + if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) { + if (event && event.escapeConnect) { + return; + } + + var action = chart.makeActionFromEvent(event); + var otherCharts = []; + + each(instances, function (otherChart) { + if (otherChart !== chart && otherChart.group === chart.group) { + otherCharts.push(otherChart); + } + }); + + updateConnectedChartsStatus(otherCharts, STATUS_PENDING); + each(otherCharts, function (otherChart) { + if (otherChart[STATUS_KEY] !== STATUS_UPDATING) { + otherChart.dispatchAction(action); + } + }); + updateConnectedChartsStatus(otherCharts, STATUS_UPDATED); + } + }); + }); +} + +/** + * @param {HTMLElement} dom + * @param {Object} [theme] + * @param {Object} opts + * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default + * @param {string} [opts.renderer] Currently only 'canvas' is supported. + * @param {number} [opts.width] Use clientWidth of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Use clientHeight of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + */ +function init(dom, theme$$1, opts) { + if (__DEV__) { + // Check version + if ((version$1.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) { + throw new Error( + 'zrender/src ' + version$1 + + ' is too old for ECharts ' + version + + '. Current version need ZRender ' + + dependencies.zrender + '+' + ); + } + + if (!dom) { + throw new Error('Initialize failed: invalid dom.'); + } + } + + var existInstance = getInstanceByDom(dom); + if (existInstance) { + if (__DEV__) { + console.warn('There is a chart instance already initialized on the dom.'); + } + return existInstance; + } + + if (__DEV__) { + if (isDom(dom) + && dom.nodeName.toUpperCase() !== 'CANVAS' + && ( + (!dom.clientWidth && (!opts || opts.width == null)) + || (!dom.clientHeight && (!opts || opts.height == null)) + ) + ) { + console.warn('Can\'t get dom width or height'); + } + } + + var chart = new ECharts(dom, theme$$1, opts); + chart.id = 'ec_' + idBase++; + instances[chart.id] = chart; + + setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id); + + enableConnect(chart); + + return chart; +} + +/** + * @return {string|Array.} groupId + */ +function connect(groupId) { + // Is array of charts + if (isArray(groupId)) { + var charts = groupId; + groupId = null; + // If any chart has group + each(charts, function (chart) { + if (chart.group != null) { + groupId = chart.group; + } + }); + groupId = groupId || ('g_' + groupIdBase++); + each(charts, function (chart) { + chart.group = groupId; + }); + } + connectedGroups[groupId] = true; + return groupId; +} + +/** + * @DEPRECATED + * @return {string} groupId + */ +function disConnect(groupId) { + connectedGroups[groupId] = false; +} + +/** + * @return {string} groupId + */ +var disconnect = disConnect; + +/** + * Dispose a chart instance + * @param {module:echarts~ECharts|HTMLDomElement|string} chart + */ +function dispose(chart) { + if (typeof chart === 'string') { + chart = instances[chart]; + } + else if (!(chart instanceof ECharts)) { + // Try to treat as dom + chart = getInstanceByDom(chart); + } + if ((chart instanceof ECharts) && !chart.isDisposed()) { + chart.dispose(); + } +} + +/** + * @param {HTMLElement} dom + * @return {echarts~ECharts} + */ +function getInstanceByDom(dom) { + return instances[getAttribute(dom, DOM_ATTRIBUTE_KEY)]; +} + +/** + * @param {string} key + * @return {echarts~ECharts} + */ +function getInstanceById(key) { + return instances[key]; +} + +/** + * Register theme + */ +function registerTheme(name, theme$$1) { + themeStorage[name] = theme$$1; +} + +/** + * Register option preprocessor + * @param {Function} preprocessorFunc + */ +function registerPreprocessor(preprocessorFunc) { + optionPreprocessorFuncs.push(preprocessorFunc); +} + +/** + * @param {number} [priority=1000] + * @param {Object|Function} processor + */ +function registerProcessor(priority, processor) { + normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER); +} + +/** + * Register postUpdater + * @param {Function} postUpdateFunc + */ +function registerPostUpdate(postUpdateFunc) { + postUpdateFuncs.push(postUpdateFunc); +} + +/** + * Usage: + * registerAction('someAction', 'someEvent', function () { ... }); + * registerAction('someAction', function () { ... }); + * registerAction( + * {type: 'someAction', event: 'someEvent', update: 'updateView'}, + * function () { ... } + * ); + * + * @param {(string|Object)} actionInfo + * @param {string} actionInfo.type + * @param {string} [actionInfo.event] + * @param {string} [actionInfo.update] + * @param {string} [eventName] + * @param {Function} action + */ +function registerAction(actionInfo, eventName, action) { + if (typeof eventName === 'function') { + action = eventName; + eventName = ''; + } + var actionType = isObject(actionInfo) + ? actionInfo.type + : ([actionInfo, actionInfo = { + event: eventName + }][0]); + + // Event name is all lowercase + actionInfo.event = (actionInfo.event || actionType).toLowerCase(); + eventName = actionInfo.event; + + // Validate action type and event name. + assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName)); + + if (!actions[actionType]) { + actions[actionType] = {action: action, actionInfo: actionInfo}; + } + eventActionMap[eventName] = actionType; +} + +/** + * @param {string} type + * @param {*} CoordinateSystem + */ +function registerCoordinateSystem(type, CoordinateSystem$$1) { + CoordinateSystemManager.register(type, CoordinateSystem$$1); +} + +/** + * Get dimensions of specified coordinate system. + * @param {string} type + * @return {Array.} + */ +function getCoordinateSystemDimensions(type) { + var coordSysCreator = CoordinateSystemManager.get(type); + if (coordSysCreator) { + return coordSysCreator.getDimensionsInfo + ? coordSysCreator.getDimensionsInfo() + : coordSysCreator.dimensions.slice(); + } +} + +/** + * Layout is a special stage of visual encoding + * Most visual encoding like color are common for different chart + * But each chart has it's own layout algorithm + * + * @param {number} [priority=1000] + * @param {Function} layoutTask + */ +function registerLayout(priority, layoutTask) { + normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout'); +} + +/** + * @param {number} [priority=3000] + * @param {module:echarts/stream/Task} visualTask + */ +function registerVisual(priority, visualTask) { + normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual'); +} + +/** + * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset} + */ +function normalizeRegister(targetList, priority, fn, defaultPriority, visualType) { + if (isFunction(priority) || isObject(priority)) { + fn = priority; + priority = defaultPriority; + } + + if (__DEV__) { + if (isNaN(priority) || priority == null) { + throw new Error('Illegal priority'); + } + // Check duplicate + each(targetList, function (wrap) { + assert(wrap.__raw !== fn); + }); + } + + var stageHandler = Scheduler.wrapStageHandler(fn, visualType); + + stageHandler.__prio = priority; + stageHandler.__raw = fn; + targetList.push(stageHandler); + + return stageHandler; +} + +/** + * @param {string} name + */ +function registerLoading(name, loadingFx) { + loadingEffects[name] = loadingFx; +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendComponentModel(opts/*, superClass*/) { + // var Clazz = ComponentModel; + // if (superClass) { + // var classType = parseClassType(superClass); + // Clazz = ComponentModel.getClass(classType.main, classType.sub, true); + // } + return ComponentModel.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendComponentView(opts/*, superClass*/) { + // var Clazz = ComponentView; + // if (superClass) { + // var classType = parseClassType(superClass); + // Clazz = ComponentView.getClass(classType.main, classType.sub, true); + // } + return Component.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendSeriesModel(opts/*, superClass*/) { + // var Clazz = SeriesModel; + // if (superClass) { + // superClass = 'series.' + superClass.replace('series.', ''); + // var classType = parseClassType(superClass); + // Clazz = ComponentModel.getClass(classType.main, classType.sub, true); + // } + return SeriesModel.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendChartView(opts/*, superClass*/) { + // var Clazz = ChartView; + // if (superClass) { + // superClass = superClass.replace('series.', ''); + // var classType = parseClassType(superClass); + // Clazz = ChartView.getClass(classType.main, true); + // } + return Chart.extend(opts); +} + +/** + * ZRender need a canvas context to do measureText. + * But in node environment canvas may be created by node-canvas. + * So we need to specify how to create a canvas instead of using document.createElement('canvas') + * + * Be careful of using it in the browser. + * + * @param {Function} creator + * @example + * var Canvas = require('canvas'); + * var echarts = require('echarts'); + * echarts.setCanvasCreator(function () { + * // Small size is enough. + * return new Canvas(32, 32); + * }); + */ +function setCanvasCreator(creator) { + $override('createCanvas', creator); +} + +/** + * @param {string} mapName + * @param {Array.|Object|string} geoJson + * @param {Object} [specialAreas] + * + * @example GeoJSON + * $.get('USA.json', function (geoJson) { + * echarts.registerMap('USA', geoJson); + * // Or + * echarts.registerMap('USA', { + * geoJson: geoJson, + * specialAreas: {} + * }) + * }); + * + * $.get('airport.svg', function (svg) { + * echarts.registerMap('airport', { + * svg: svg + * } + * }); + * + * echarts.registerMap('eu', [ + * {svg: eu-topographic.svg}, + * {geoJSON: eu.json} + * ]) + */ +function registerMap(mapName, geoJson, specialAreas) { + mapDataStorage.registerMap(mapName, geoJson, specialAreas); +} + +/** + * @param {string} mapName + * @return {Object} + */ +function getMap(mapName) { + // For backward compatibility, only return the first one. + var records = mapDataStorage.retrieveMap(mapName); + return records && records[0] && { + geoJson: records[0].geoJSON, + specialAreas: records[0].specialAreas + }; +} + +registerVisual(PRIORITY_VISUAL_GLOBAL, seriesColor); +registerPreprocessor(backwardCompat); +registerProcessor(PRIORITY_PROCESSOR_STATISTIC, dataStack); +registerLoading('default', loadingDefault); + +// Default actions + +registerAction({ + type: 'highlight', + event: 'highlight', + update: 'highlight' +}, noop); + +registerAction({ + type: 'downplay', + event: 'downplay', + update: 'downplay' +}, noop); + +// Default theme +registerTheme('light', lightTheme); +registerTheme('dark', theme); + +// For backward compatibility, where the namespace `dataTool` will +// be mounted on `echarts` is the extension `dataTool` is imported. +var dataTool = {}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +function defaultKeyGetter(item) { + return item; +} + +/** + * @param {Array} oldArr + * @param {Array} newArr + * @param {Function} oldKeyGetter + * @param {Function} newKeyGetter + * @param {Object} [context] Can be visited by this.context in callback. + */ +function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) { + this._old = oldArr; + this._new = newArr; + + this._oldKeyGetter = oldKeyGetter || defaultKeyGetter; + this._newKeyGetter = newKeyGetter || defaultKeyGetter; + + this.context = context; +} + +DataDiffer.prototype = { + + constructor: DataDiffer, + + /** + * Callback function when add a data + */ + add: function (func) { + this._add = func; + return this; + }, + + /** + * Callback function when update a data + */ + update: function (func) { + this._update = func; + return this; + }, + + /** + * Callback function when remove a data + */ + remove: function (func) { + this._remove = func; + return this; + }, + + execute: function () { + var oldArr = this._old; + var newArr = this._new; + + var oldDataIndexMap = {}; + var newDataIndexMap = {}; + var oldDataKeyArr = []; + var newDataKeyArr = []; + var i; + + initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this); + initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this); + + // Travel by inverted order to make sure order consistency + // when duplicate keys exists (consider newDataIndex.pop() below). + // For performance consideration, these code below do not look neat. + for (i = 0; i < oldArr.length; i++) { + var key = oldDataKeyArr[i]; + var idx = newDataIndexMap[key]; + + // idx can never be empty array here. see 'set null' logic below. + if (idx != null) { + // Consider there is duplicate key (for example, use dataItem.name as key). + // We should make sure every item in newArr and oldArr can be visited. + var len = idx.length; + if (len) { + len === 1 && (newDataIndexMap[key] = null); + idx = idx.unshift(); + } + else { + newDataIndexMap[key] = null; + } + this._update && this._update(idx, i); + } + else { + this._remove && this._remove(i); + } + } + + for (var i = 0; i < newDataKeyArr.length; i++) { + var key = newDataKeyArr[i]; + if (newDataIndexMap.hasOwnProperty(key)) { + var idx = newDataIndexMap[key]; + if (idx == null) { + continue; + } + // idx can never be empty array here. see 'set null' logic above. + if (!idx.length) { + this._add && this._add(idx); + } + else { + for (var j = 0, len = idx.length; j < len; j++) { + this._add && this._add(idx[j]); + } + } + } + } + } +}; + +function initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) { + for (var i = 0; i < arr.length; i++) { + // Add prefix to avoid conflict with Object.prototype. + var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i); + var existence = map[key]; + if (existence == null) { + keyArr.push(key); + map[key] = i; + } + else { + if (!existence.length) { + map[key] = existence = [existence]; + } + existence.push(i); + } + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var OTHER_DIMENSIONS = createHashMap([ + 'tooltip', 'label', 'itemName', 'itemId', 'seriesName' +]); + +function summarizeDimensions(data) { + var summary = {}; + var encode = summary.encode = {}; + var notExtraCoordDimMap = createHashMap(); + var defaultedLabel = []; + var defaultedTooltip = []; + + each$1(data.dimensions, function (dimName) { + var dimItem = data.getDimensionInfo(dimName); + + var coordDim = dimItem.coordDim; + if (coordDim) { + if (__DEV__) { + assert$1(OTHER_DIMENSIONS.get(coordDim) == null); + } + var coordDimArr = encode[coordDim]; + if (!encode.hasOwnProperty(coordDim)) { + coordDimArr = encode[coordDim] = []; + } + coordDimArr[dimItem.coordDimIndex] = dimName; + + if (!dimItem.isExtraCoord) { + notExtraCoordDimMap.set(coordDim, 1); + + // Use the last coord dim (and label friendly) as default label, + // because when dataset is used, it is hard to guess which dimension + // can be value dimension. If both show x, y on label is not look good, + // and conventionally y axis is focused more. + if (mayLabelDimType(dimItem.type)) { + defaultedLabel[0] = dimName; + } + } + if (dimItem.defaultTooltip) { + defaultedTooltip.push(dimName); + } + } + + OTHER_DIMENSIONS.each(function (v, otherDim) { + var otherDimArr = encode[otherDim]; + if (!encode.hasOwnProperty(otherDim)) { + otherDimArr = encode[otherDim] = []; + } + + var dimIndex = dimItem.otherDims[otherDim]; + if (dimIndex != null && dimIndex !== false) { + otherDimArr[dimIndex] = dimItem.name; + } + }); + }); + + var dataDimsOnCoord = []; + var encodeFirstDimNotExtra = {}; + + notExtraCoordDimMap.each(function (v, coordDim) { + var dimArr = encode[coordDim]; + // ??? FIXME extra coord should not be set in dataDimsOnCoord. + // But should fix the case that radar axes: simplify the logic + // of `completeDimension`, remove `extraPrefix`. + encodeFirstDimNotExtra[coordDim] = dimArr[0]; + // Not necessary to remove duplicate, because a data + // dim canot on more than one coordDim. + dataDimsOnCoord = dataDimsOnCoord.concat(dimArr); + }); + + summary.dataDimsOnCoord = dataDimsOnCoord; + summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra; + + var encodeLabel = encode.label; + // FIXME `encode.label` is not recommanded, because formatter can not be set + // in this way. Use label.formatter instead. May be remove this approach someday. + if (encodeLabel && encodeLabel.length) { + defaultedLabel = encodeLabel.slice(); + } + + var encodeTooltip = encode.tooltip; + if (encodeTooltip && encodeTooltip.length) { + defaultedTooltip = encodeTooltip.slice(); + } + else if (!defaultedTooltip.length) { + defaultedTooltip = defaultedLabel.slice(); + } + + encode.defaultedLabel = defaultedLabel; + encode.defaultedTooltip = defaultedTooltip; + + return summary; +} + +function getDimensionTypeByAxis(axisType) { + return axisType === 'category' + ? 'ordinal' + : axisType === 'time' + ? 'time' + : 'float'; +} + +function mayLabelDimType(dimType) { + // In most cases, ordinal and time do not suitable for label. + // Ordinal info can be displayed on axis. Time is too long. + return !(dimType === 'ordinal' || dimType === 'time'); +} + +// function findTheLastDimMayLabel(data) { +// // Get last value dim +// var dimensions = data.dimensions.slice(); +// var valueType; +// var valueDim; +// while (dimensions.length && ( +// valueDim = dimensions.pop(), +// valueType = data.getDimensionInfo(valueDim).type, +// valueType === 'ordinal' || valueType === 'time' +// )) {} // jshint ignore:line +// return valueDim; +// } + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float64Array, Int32Array, Uint32Array, Uint16Array */ + +/** + * List for data storage + * @module echarts/data/List + */ + +var isObject$4 = isObject$1; + +var UNDEFINED = 'undefined'; + +// Use prefix to avoid index to be the same as otherIdList[idx], +// which will cause weird udpate animation. +var ID_PREFIX = 'e\0\0'; + +var dataCtors = { + 'float': typeof Float64Array === UNDEFINED + ? Array : Float64Array, + 'int': typeof Int32Array === UNDEFINED + ? Array : Int32Array, + // Ordinal data type can be string or int + 'ordinal': Array, + 'number': Array, + 'time': Array +}; + +// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is +// different from the Ctor of typed array. +var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array; +var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array; + +function getIndicesCtor(list) { + // The possible max value in this._indicies is always this._rawCount despite of filtering. + return list._rawCount > 65535 ? CtorUint32Array : CtorUint16Array; +} + +function cloneChunk(originalChunk) { + var Ctor = originalChunk.constructor; + // Only shallow clone is enough when Array. + return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk); +} + +var TRANSFERABLE_PROPERTIES = [ + 'hasItemOption', '_nameList', '_idList', '_invertedIndicesMap', + '_rawData', '_chunkSize', '_chunkCount', '_dimValueGetter', + '_count', '_rawCount', '_nameDimIdx', '_idDimIdx' +]; +var CLONE_PROPERTIES = [ + '_extent', '_approximateExtent', '_rawExtent' +]; + +function transferProperties(target, source) { + each$1(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) { + if (source.hasOwnProperty(propName)) { + target[propName] = source[propName]; + } + }); + + target.__wrappedMethods = source.__wrappedMethods; + + each$1(CLONE_PROPERTIES, function (propName) { + target[propName] = clone(source[propName]); + }); + + target._calculationInfo = extend(source._calculationInfo); +} + + + + + +/** + * @constructor + * @alias module:echarts/data/List + * + * @param {Array.} dimensions + * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...]. + * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius + * Spetial fields: { + * ordinalMeta: + * createInvertedIndices: + * } + * @param {module:echarts/model/Model} hostModel + */ +var List = function (dimensions, hostModel) { + + dimensions = dimensions || ['x', 'y']; + + var dimensionInfos = {}; + var dimensionNames = []; + var invertedIndicesMap = {}; + + for (var i = 0; i < dimensions.length; i++) { + // Use the original dimensions[i], where other flag props may exists. + var dimensionInfo = dimensions[i]; + + if (isString(dimensionInfo)) { + dimensionInfo = {name: dimensionInfo}; + } + + var dimensionName = dimensionInfo.name; + dimensionInfo.type = dimensionInfo.type || 'float'; + if (!dimensionInfo.coordDim) { + dimensionInfo.coordDim = dimensionName; + dimensionInfo.coordDimIndex = 0; + } + + dimensionInfo.otherDims = dimensionInfo.otherDims || {}; + dimensionNames.push(dimensionName); + dimensionInfos[dimensionName] = dimensionInfo; + + dimensionInfo.index = i; + + if (dimensionInfo.createInvertedIndices) { + invertedIndicesMap[dimensionName] = []; + } + } + + /** + * @readOnly + * @type {Array.} + */ + this.dimensions = dimensionNames; + + /** + * Infomation of each data dimension, like data type. + * @type {Object} + */ + this._dimensionInfos = dimensionInfos; + + /** + * @type {module:echarts/model/Model} + */ + this.hostModel = hostModel; + + /** + * @type {module:echarts/model/Model} + */ + this.dataType; + + /** + * Indices stores the indices of data subset after filtered. + * This data subset will be used in chart. + * @type {Array.} + * @readOnly + */ + this._indices = null; + + this._count = 0; + this._rawCount = 0; + + /** + * Data storage + * @type {Object.>} + * @private + */ + this._storage = {}; + + /** + * @type {Array.} + */ + this._nameList = []; + /** + * @type {Array.} + */ + this._idList = []; + + /** + * Models of data option is stored sparse for optimizing memory cost + * @type {Array.} + * @private + */ + this._optionModels = []; + + /** + * Global visual properties after visual coding + * @type {Object} + * @private + */ + this._visual = {}; + + /** + * Globel layout properties. + * @type {Object} + * @private + */ + this._layout = {}; + + /** + * Item visual properties after visual coding + * @type {Array.} + * @private + */ + this._itemVisuals = []; + + /** + * Key: visual type, Value: boolean + * @type {Object} + * @readOnly + */ + this.hasItemVisual = {}; + + /** + * Item layout properties after layout + * @type {Array.} + * @private + */ + this._itemLayouts = []; + + /** + * Graphic elemnents + * @type {Array.} + * @private + */ + this._graphicEls = []; + + /** + * Max size of each chunk. + * @type {number} + * @private + */ + this._chunkSize = 1e5; + + /** + * @type {number} + * @private + */ + this._chunkCount = 0; + + /** + * @type {Array.} + * @private + */ + this._rawData; + + /** + * Raw extent will not be cloned, but only transfered. + * It will not be calculated util needed. + * key: dim, + * value: {end: number, extent: Array.} + * @type {Object} + * @private + */ + this._rawExtent = {}; + + /** + * @type {Object} + * @private + */ + this._extent = {}; + + /** + * key: dim + * value: extent + * @type {Object} + * @private + */ + this._approximateExtent = {}; + + /** + * Cache summary info for fast visit. See "dimensionHelper". + * @type {Object} + * @private + */ + this._dimensionsSummary = summarizeDimensions(this); + + /** + * @type {Object.} + * @private + */ + this._invertedIndicesMap = invertedIndicesMap; + + /** + * @type {Object} + * @private + */ + this._calculationInfo = {}; +}; + +var listProto = List.prototype; + +listProto.type = 'list'; + +/** + * If each data item has it's own option + * @type {boolean} + */ +listProto.hasItemOption = true; + +/** + * Get dimension name + * @param {string|number} dim + * Dimension can be concrete names like x, y, z, lng, lat, angle, radius + * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' + * @return {string} Concrete dim name. + */ +listProto.getDimension = function (dim) { + if (!isNaN(dim)) { + dim = this.dimensions[dim] || dim; + } + return dim; +}; + +/** + * Get type and calculation info of particular dimension + * @param {string|number} dim + * Dimension can be concrete names like x, y, z, lng, lat, angle, radius + * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' + */ +listProto.getDimensionInfo = function (dim) { + // Do not clone, because there may be categories in dimInfo. + return this._dimensionInfos[this.getDimension(dim)]; +}; + +/** + * @return {Array.} concrete dimension name list on coord. + */ +listProto.getDimensionsOnCoord = function () { + return this._dimensionsSummary.dataDimsOnCoord.slice(); +}; + +/** + * @param {string} coordDim + * @param {number} [idx] A coordDim may map to more than one data dim. + * If idx is `true`, return a array of all mapped dims. + * If idx is not specified, return the first dim not extra. + * @return {string|Array.} concrete data dim. + * If idx is number, and not found, return null/undefined. + * If idx is `true`, and not found, return empty array (always return array). + */ +listProto.mapDimension = function (coordDim, idx) { + var dimensionsSummary = this._dimensionsSummary; + + if (idx == null) { + return dimensionsSummary.encodeFirstDimNotExtra[coordDim]; + } + + var dims = dimensionsSummary.encode[coordDim]; + return idx === true + // always return array if idx is `true` + ? (dims || []).slice() + : (dims && dims[idx]); +}; + +/** + * Initialize from data + * @param {Array.} data source or data or data provider. + * @param {Array.} [nameLIst] The name of a datum is used on data diff and + * defualt label/tooltip. + * A name can be specified in encode.itemName, + * or dataItem.name (only for series option data), + * or provided in nameList from outside. + * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number + */ +listProto.initData = function (data, nameList, dimValueGetter) { + + var notProvider = Source.isInstance(data) || isArrayLike(data); + if (notProvider) { + data = new DefaultDataProvider(data, this.dimensions.length); + } + + if (__DEV__) { + if (!notProvider && (typeof data.getItem !== 'function' || typeof data.count !== 'function')) { + throw new Error('Inavlid data provider.'); + } + } + + this._rawData = data; + + // Clear + this._storage = {}; + this._indices = null; + + this._nameList = nameList || []; + + this._idList = []; + + this._nameRepeatCount = {}; + + if (!dimValueGetter) { + this.hasItemOption = false; + } + + /** + * @readOnly + */ + this.defaultDimValueGetter = defaultDimValueGetters[ + this._rawData.getSource().sourceFormat + ]; + + // Default dim value getter + this._dimValueGetter = dimValueGetter = dimValueGetter + || this.defaultDimValueGetter; + + // Reset raw extent. + this._rawExtent = {}; + + this._initDataFromProvider(0, data.count()); + + // If data has no item option. + if (data.pure) { + this.hasItemOption = false; + } +}; + +listProto.getProvider = function () { + return this._rawData; +}; + +listProto.appendData = function (data) { + if (__DEV__) { + assert$1(!this._indices, 'appendData can only be called on raw data.'); + } + + var rawData = this._rawData; + var start = this.count(); + rawData.appendData(data); + var end = rawData.count(); + if (!rawData.persistent) { + end += start; + } + this._initDataFromProvider(start, end); +}; + +listProto._initDataFromProvider = function (start, end) { + // Optimize. + if (start >= end) { + return; + } + + var chunkSize = this._chunkSize; + var rawData = this._rawData; + var storage = this._storage; + var dimensions = this.dimensions; + var dimLen = dimensions.length; + var dimensionInfoMap = this._dimensionInfos; + var nameList = this._nameList; + var idList = this._idList; + var rawExtent = this._rawExtent; + var nameRepeatCount = this._nameRepeatCount = {}; + var nameDimIdx; + + var chunkCount = this._chunkCount; + var lastChunkIndex = chunkCount - 1; + for (var i = 0; i < dimLen; i++) { + var dim = dimensions[i]; + if (!rawExtent[dim]) { + rawExtent[dim] = getInitialExtent(); + } + + var dimInfo = dimensionInfoMap[dim]; + if (dimInfo.otherDims.itemName === 0) { + nameDimIdx = this._nameDimIdx = i; + } + if (dimInfo.otherDims.itemId === 0) { + this._idDimIdx = i; + } + var DataCtor = dataCtors[dimInfo.type]; + + if (!storage[dim]) { + storage[dim] = []; + } + var resizeChunkArray = storage[dim][lastChunkIndex]; + if (resizeChunkArray && resizeChunkArray.length < chunkSize) { + var newStore = new DataCtor(Math.min(end - lastChunkIndex * chunkSize, chunkSize)); + // The cost of the copy is probably inconsiderable + // within the initial chunkSize. + for (var j = 0; j < resizeChunkArray.length; j++) { + newStore[j] = resizeChunkArray[j]; + } + storage[dim][lastChunkIndex] = newStore; + } + + // Create new chunks. + for (var k = chunkCount * chunkSize; k < end; k += chunkSize) { + storage[dim].push(new DataCtor(Math.min(end - k, chunkSize))); + } + this._chunkCount = storage[dim].length; + } + + var dataItem = new Array(dimLen); + for (var idx = start; idx < end; idx++) { + // NOTICE: Try not to write things into dataItem + dataItem = rawData.getItem(idx, dataItem); + // Each data item is value + // [1, 2] + // 2 + // Bar chart, line chart which uses category axis + // only gives the 'y' value. 'x' value is the indices of category + // Use a tempValue to normalize the value to be a (x, y) value + var chunkIndex = Math.floor(idx / chunkSize); + var chunkOffset = idx % chunkSize; + + // Store the data by dimensions + for (var k = 0; k < dimLen; k++) { + var dim = dimensions[k]; + var dimStorage = storage[dim][chunkIndex]; + // PENDING NULL is empty or zero + var val = this._dimValueGetter(dataItem, dim, idx, k); + dimStorage[chunkOffset] = val; + + var dimRawExtent = rawExtent[dim]; + if (val < dimRawExtent[0]) { + dimRawExtent[0] = val; + } + if (val > dimRawExtent[1]) { + dimRawExtent[1] = val; + } + } + + // ??? FIXME not check by pure but sourceFormat? + // TODO refactor these logic. + if (!rawData.pure) { + var name = nameList[idx]; + + if (dataItem && name == null) { + // If dataItem is {name: ...}, it has highest priority. + // That is appropriate for many common cases. + if (dataItem.name != null) { + // There is no other place to persistent dataItem.name, + // so save it to nameList. + nameList[idx] = name = dataItem.name; + } + else if (nameDimIdx != null) { + var nameDim = dimensions[nameDimIdx]; + var nameDimChunk = storage[nameDim][chunkIndex]; + if (nameDimChunk) { + name = nameDimChunk[chunkOffset]; + var ordinalMeta = dimensionInfoMap[nameDim].ordinalMeta; + if (ordinalMeta && ordinalMeta.categories.length) { + name = ordinalMeta.categories[name]; + } + } + } + } + + // Try using the id in option + // id or name is used on dynamical data, mapping old and new items. + var id = dataItem == null ? null : dataItem.id; + + if (id == null && name != null) { + // Use name as id and add counter to avoid same name + nameRepeatCount[name] = nameRepeatCount[name] || 0; + id = name; + if (nameRepeatCount[name] > 0) { + id += '__ec__' + nameRepeatCount[name]; + } + nameRepeatCount[name]++; + } + id != null && (idList[idx] = id); + } + } + + if (!rawData.persistent && rawData.clean) { + // Clean unused data if data source is typed array. + rawData.clean(); + } + + this._rawCount = this._count = end; + + // Reset data extent + this._extent = {}; + + prepareInvertedIndex(this); +}; + +function prepareInvertedIndex(list) { + var invertedIndicesMap = list._invertedIndicesMap; + each$1(invertedIndicesMap, function (invertedIndices, dim) { + var dimInfo = list._dimensionInfos[dim]; + + // Currently, only dimensions that has ordinalMeta can create inverted indices. + var ordinalMeta = dimInfo.ordinalMeta; + if (ordinalMeta) { + invertedIndices = invertedIndicesMap[dim] = new CtorUint32Array( + ordinalMeta.categories.length + ); + // The default value of TypedArray is 0. To avoid miss + // mapping to 0, we should set it as NaN. + for (var i = 0; i < invertedIndices.length; i++) { + invertedIndices[i] = NaN; + } + for (var i = 0; i < list._count; i++) { + // Only support the case that all values are distinct. + invertedIndices[list.get(dim, i)] = i; + } + } + }); +} + +function getRawValueFromStore(list, dimIndex, rawIndex) { + var val; + if (dimIndex != null) { + var chunkSize = list._chunkSize; + var chunkIndex = Math.floor(rawIndex / chunkSize); + var chunkOffset = rawIndex % chunkSize; + var dim = list.dimensions[dimIndex]; + var chunk = list._storage[dim][chunkIndex]; + if (chunk) { + val = chunk[chunkOffset]; + var ordinalMeta = list._dimensionInfos[dim].ordinalMeta; + if (ordinalMeta && ordinalMeta.categories.length) { + val = ordinalMeta.categories[val]; + } + } + } + return val; +} + +/** + * @return {number} + */ +listProto.count = function () { + return this._count; +}; + +listProto.getIndices = function () { + var newIndices; + + var indices = this._indices; + if (indices) { + var Ctor = indices.constructor; + var thisCount = this._count; + // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`. + if (Ctor === Array) { + newIndices = new Ctor(thisCount); + for (var i = 0; i < thisCount; i++) { + newIndices[i] = indices[i]; + } + } + else { + newIndices = new Ctor(indices.buffer, 0, thisCount); + } + } + else { + var Ctor = getIndicesCtor(this); + var newIndices = new Ctor(this.count()); + for (var i = 0; i < newIndices.length; i++) { + newIndices[i] = i; + } + } + + return newIndices; +}; + +/** + * Get value. Return NaN if idx is out of range. + * @param {string} dim Dim must be concrete name. + * @param {number} idx + * @param {boolean} stack + * @return {number} + */ +listProto.get = function (dim, idx /*, stack */) { + if (!(idx >= 0 && idx < this._count)) { + return NaN; + } + var storage = this._storage; + if (!storage[dim]) { + // TODO Warn ? + return NaN; + } + + idx = this.getRawIndex(idx); + + var chunkIndex = Math.floor(idx / this._chunkSize); + var chunkOffset = idx % this._chunkSize; + + var chunkStore = storage[dim][chunkIndex]; + var value = chunkStore[chunkOffset]; + // FIXME ordinal data type is not stackable + // if (stack) { + // var dimensionInfo = this._dimensionInfos[dim]; + // if (dimensionInfo && dimensionInfo.stackable) { + // var stackedOn = this.stackedOn; + // while (stackedOn) { + // // Get no stacked data of stacked on + // var stackedValue = stackedOn.get(dim, idx); + // // Considering positive stack, negative stack and empty data + // if ((value >= 0 && stackedValue > 0) // Positive stack + // || (value <= 0 && stackedValue < 0) // Negative stack + // ) { + // value += stackedValue; + // } + // stackedOn = stackedOn.stackedOn; + // } + // } + // } + + return value; +}; + +/** + * @param {string} dim concrete dim + * @param {number} rawIndex + * @return {number|string} + */ +listProto.getByRawIndex = function (dim, rawIdx) { + if (!(rawIdx >= 0 && rawIdx < this._rawCount)) { + return NaN; + } + var dimStore = this._storage[dim]; + if (!dimStore) { + // TODO Warn ? + return NaN; + } + + var chunkIndex = Math.floor(rawIdx / this._chunkSize); + var chunkOffset = rawIdx % this._chunkSize; + var chunkStore = dimStore[chunkIndex]; + return chunkStore[chunkOffset]; +}; + +/** + * FIXME Use `get` on chrome maybe slow(in filterSelf and selectRange). + * Hack a much simpler _getFast + * @private + */ +listProto._getFast = function (dim, rawIdx) { + var chunkIndex = Math.floor(rawIdx / this._chunkSize); + var chunkOffset = rawIdx % this._chunkSize; + var chunkStore = this._storage[dim][chunkIndex]; + return chunkStore[chunkOffset]; +}; + +/** + * Get value for multi dimensions. + * @param {Array.} [dimensions] If ignored, using all dimensions. + * @param {number} idx + * @return {number} + */ +listProto.getValues = function (dimensions, idx /*, stack */) { + var values = []; + + if (!isArray(dimensions)) { + // stack = idx; + idx = dimensions; + dimensions = this.dimensions; + } + + for (var i = 0, len = dimensions.length; i < len; i++) { + values.push(this.get(dimensions[i], idx /*, stack */)); + } + + return values; +}; + +/** + * If value is NaN. Inlcuding '-' + * Only check the coord dimensions. + * @param {string} dim + * @param {number} idx + * @return {number} + */ +listProto.hasValue = function (idx) { + var dataDimsOnCoord = this._dimensionsSummary.dataDimsOnCoord; + var dimensionInfos = this._dimensionInfos; + for (var i = 0, len = dataDimsOnCoord.length; i < len; i++) { + if ( + // Ordinal type can be string or number + dimensionInfos[dataDimsOnCoord[i]].type !== 'ordinal' + // FIXME check ordinal when using index? + && isNaN(this.get(dataDimsOnCoord[i], idx)) + ) { + return false; + } + } + return true; +}; + +/** + * Get extent of data in one dimension + * @param {string} dim + * @param {boolean} stack + */ +listProto.getDataExtent = function (dim /*, stack */) { + // Make sure use concrete dim as cache name. + dim = this.getDimension(dim); + var dimData = this._storage[dim]; + var initialExtent = getInitialExtent(); + + // stack = !!((stack || false) && this.getCalculationInfo(dim)); + + if (!dimData) { + return initialExtent; + } + + // Make more strict checkings to ensure hitting cache. + var currEnd = this.count(); + // var cacheName = [dim, !!stack].join('_'); + // var cacheName = dim; + + // Consider the most cases when using data zoom, `getDataExtent` + // happened before filtering. We cache raw extent, which is not + // necessary to be cleared and recalculated when restore data. + var useRaw = !this._indices; // && !stack; + var dimExtent; + + if (useRaw) { + return this._rawExtent[dim].slice(); + } + dimExtent = this._extent[dim]; + if (dimExtent) { + return dimExtent.slice(); + } + dimExtent = initialExtent; + + var min = dimExtent[0]; + var max = dimExtent[1]; + + for (var i = 0; i < currEnd; i++) { + // var value = stack ? this.get(dim, i, true) : this._getFast(dim, this.getRawIndex(i)); + var value = this._getFast(dim, this.getRawIndex(i)); + value < min && (min = value); + value > max && (max = value); + } + + dimExtent = [min, max]; + + this._extent[dim] = dimExtent; + + return dimExtent; +}; + +/** + * Optimize for the scenario that data is filtered by a given extent. + * Consider that if data amount is more than hundreds of thousand, + * extent calculation will cost more than 10ms and the cache will + * be erased because of the filtering. + */ +listProto.getApproximateExtent = function (dim /*, stack */) { + dim = this.getDimension(dim); + return this._approximateExtent[dim] || this.getDataExtent(dim /*, stack */); +}; + +listProto.setApproximateExtent = function (extent, dim /*, stack */) { + dim = this.getDimension(dim); + this._approximateExtent[dim] = extent.slice(); +}; + +/** + * @param {string} key + * @return {*} + */ +listProto.getCalculationInfo = function (key) { + return this._calculationInfo[key]; +}; + +/** + * @param {string|Object} key or k-v object + * @param {*} [value] + */ +listProto.setCalculationInfo = function (key, value) { + isObject$4(key) + ? extend(this._calculationInfo, key) + : (this._calculationInfo[key] = value); +}; + +/** + * Get sum of data in one dimension + * @param {string} dim + */ +listProto.getSum = function (dim /*, stack */) { + var dimData = this._storage[dim]; + var sum = 0; + if (dimData) { + for (var i = 0, len = this.count(); i < len; i++) { + var value = this.get(dim, i /*, stack */); + if (!isNaN(value)) { + sum += value; + } + } + } + return sum; +}; + +/** + * Get median of data in one dimension + * @param {string} dim + */ +listProto.getMedian = function (dim /*, stack */) { + var dimDataArray = []; + // map all data of one dimension + this.each(dim, function (val, idx) { + if (!isNaN(val)) { + dimDataArray.push(val); + } + }); + + // TODO + // Use quick select? + + // immutability & sort + var sortedDimDataArray = [].concat(dimDataArray).sort(function (a, b) { + return a - b; + }); + var len = this.count(); + // calculate median + return len === 0 + ? 0 + : len % 2 === 1 + ? sortedDimDataArray[(len - 1) / 2] + : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2; +}; + +// /** +// * Retreive the index with given value +// * @param {string} dim Concrete dimension. +// * @param {number} value +// * @return {number} +// */ +// Currently incorrect: should return dataIndex but not rawIndex. +// Do not fix it until this method is to be used somewhere. +// FIXME Precision of float value +// listProto.indexOf = function (dim, value) { +// var storage = this._storage; +// var dimData = storage[dim]; +// var chunkSize = this._chunkSize; +// if (dimData) { +// for (var i = 0, len = this.count(); i < len; i++) { +// var chunkIndex = Math.floor(i / chunkSize); +// var chunkOffset = i % chunkSize; +// if (dimData[chunkIndex][chunkOffset] === value) { +// return i; +// } +// } +// } +// return -1; +// }; + +/** + * Only support the dimension which inverted index created. + * Do not support other cases until required. + * @param {string} concrete dim + * @param {number|string} value + * @return {number} rawIndex + */ +listProto.rawIndexOf = function (dim, value) { + var invertedIndices = dim && this._invertedIndicesMap[dim]; + if (__DEV__) { + if (!invertedIndices) { + throw new Error('Do not supported yet'); + } + } + var rawIndex = invertedIndices[value]; + if (rawIndex == null || isNaN(rawIndex)) { + return -1; + } + return rawIndex; +}; + +/** + * Retreive the index with given name + * @param {number} idx + * @param {number} name + * @return {number} + */ +listProto.indexOfName = function (name) { + for (var i = 0, len = this.count(); i < len; i++) { + if (this.getName(i) === name) { + return i; + } + } + + return -1; +}; + +/** + * Retreive the index with given raw data index + * @param {number} idx + * @param {number} name + * @return {number} + */ +listProto.indexOfRawIndex = function (rawIndex) { + if (!this._indices) { + return rawIndex; + } + + if (rawIndex >= this._rawCount || rawIndex < 0) { + return -1; + } + + // Indices are ascending + var indices = this._indices; + + // If rawIndex === dataIndex + var rawDataIndex = indices[rawIndex]; + if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) { + return rawIndex; + } + + var left = 0; + var right = this._count - 1; + while (left <= right) { + var mid = (left + right) / 2 | 0; + if (indices[mid] < rawIndex) { + left = mid + 1; + } + else if (indices[mid] > rawIndex) { + right = mid - 1; + } + else { + return mid; + } + } + return -1; +}; + +/** + * Retreive the index of nearest value + * @param {string} dim + * @param {number} value + * @param {number} [maxDistance=Infinity] + * @return {Array.} Considere multiple points has the same value. + */ +listProto.indicesOfNearest = function (dim, value, maxDistance) { + var storage = this._storage; + var dimData = storage[dim]; + var nearestIndices = []; + + if (!dimData) { + return nearestIndices; + } + + if (maxDistance == null) { + maxDistance = Infinity; + } + + var minDist = Number.MAX_VALUE; + var minDiff = -1; + for (var i = 0, len = this.count(); i < len; i++) { + var diff = value - this.get(dim, i /*, stack */); + var dist = Math.abs(diff); + if (diff <= maxDistance && dist <= minDist) { + // For the case of two data are same on xAxis, which has sequence data. + // Show the nearest index + // https://github.com/ecomfe/echarts/issues/2869 + if (dist < minDist || (diff >= 0 && minDiff < 0)) { + minDist = dist; + minDiff = diff; + nearestIndices.length = 0; + } + nearestIndices.push(i); + } + } + return nearestIndices; +}; + +/** + * Get raw data index + * @param {number} idx + * @return {number} + */ +listProto.getRawIndex = getRawIndexWithoutIndices; + +function getRawIndexWithoutIndices(idx) { + return idx; +} + +function getRawIndexWithIndices(idx) { + if (idx < this._count && idx >= 0) { + return this._indices[idx]; + } + return -1; +} + +/** + * Get raw data item + * @param {number} idx + * @return {number} + */ +listProto.getRawDataItem = function (idx) { + if (!this._rawData.persistent) { + var val = []; + for (var i = 0; i < this.dimensions.length; i++) { + var dim = this.dimensions[i]; + val.push(this.get(dim, idx)); + } + return val; + } + else { + return this._rawData.getItem(this.getRawIndex(idx)); + } +}; + +/** + * @param {number} idx + * @param {boolean} [notDefaultIdx=false] + * @return {string} + */ +listProto.getName = function (idx) { + var rawIndex = this.getRawIndex(idx); + return this._nameList[rawIndex] + || getRawValueFromStore(this, this._nameDimIdx, rawIndex) + || ''; +}; + +/** + * @param {number} idx + * @param {boolean} [notDefaultIdx=false] + * @return {string} + */ +listProto.getId = function (idx) { + return getId(this, this.getRawIndex(idx)); +}; + +function getId(list, rawIndex) { + var id = list._idList[rawIndex]; + if (id == null) { + id = getRawValueFromStore(list, list._idDimIdx, rawIndex); + } + if (id == null) { + // FIXME Check the usage in graph, should not use prefix. + id = ID_PREFIX + rawIndex; + } + return id; +} + +function normalizeDimensions(dimensions) { + if (!isArray(dimensions)) { + dimensions = [dimensions]; + } + return dimensions; +} + +function validateDimensions(list, dims) { + for (var i = 0; i < dims.length; i++) { + // stroage may be empty when no data, so use + // dimensionInfos to check. + if (!list._dimensionInfos[dims[i]]) { + console.error('Unkown dimension ' + dims[i]); + } + } +} + +/** + * Data iteration + * @param {string|Array.} + * @param {Function} cb + * @param {*} [context=this] + * + * @example + * list.each('x', function (x, idx) {}); + * list.each(['x', 'y'], function (x, y, idx) {}); + * list.each(function (idx) {}) + */ +listProto.each = function (dims, cb, context, contextCompat) { + 'use strict'; + + if (!this._count) { + return; + } + + if (typeof dims === 'function') { + contextCompat = context; + context = cb; + cb = dims; + dims = []; + } + + // contextCompat just for compat echarts3 + context = context || contextCompat || this; + + dims = map(normalizeDimensions(dims), this.getDimension, this); + + if (__DEV__) { + validateDimensions(this, dims); + } + + var dimSize = dims.length; + + for (var i = 0; i < this.count(); i++) { + // Simple optimization + switch (dimSize) { + case 0: + cb.call(context, i); + break; + case 1: + cb.call(context, this.get(dims[0], i), i); + break; + case 2: + cb.call(context, this.get(dims[0], i), this.get(dims[1], i), i); + break; + default: + var k = 0; + var value = []; + for (; k < dimSize; k++) { + value[k] = this.get(dims[k], i); + } + // Index + value[k] = i; + cb.apply(context, value); + } + } +}; + +/** + * Data filter + * @param {string|Array.} + * @param {Function} cb + * @param {*} [context=this] + */ +listProto.filterSelf = function (dimensions, cb, context, contextCompat) { + 'use strict'; + + if (!this._count) { + return; + } + + if (typeof dimensions === 'function') { + contextCompat = context; + context = cb; + cb = dimensions; + dimensions = []; + } + + // contextCompat just for compat echarts3 + context = context || contextCompat || this; + + dimensions = map( + normalizeDimensions(dimensions), this.getDimension, this + ); + + if (__DEV__) { + validateDimensions(this, dimensions); + } + + + var count = this.count(); + var Ctor = getIndicesCtor(this); + var newIndices = new Ctor(count); + var value = []; + var dimSize = dimensions.length; + + var offset = 0; + var dim0 = dimensions[0]; + + for (var i = 0; i < count; i++) { + var keep; + var rawIdx = this.getRawIndex(i); + // Simple optimization + if (dimSize === 0) { + keep = cb.call(context, i); + } + else if (dimSize === 1) { + var val = this._getFast(dim0, rawIdx); + keep = cb.call(context, val, i); + } + else { + for (var k = 0; k < dimSize; k++) { + value[k] = this._getFast(dim0, rawIdx); + } + value[k] = i; + keep = cb.apply(context, value); + } + if (keep) { + newIndices[offset++] = rawIdx; + } + } + + // Set indices after filtered. + if (offset < count) { + this._indices = newIndices; + } + this._count = offset; + // Reset data extent + this._extent = {}; + + this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices; + + return this; +}; + +/** + * Select data in range. (For optimization of filter) + * (Manually inline code, support 5 million data filtering in data zoom.) + */ +listProto.selectRange = function (range) { + 'use strict'; + + if (!this._count) { + return; + } + + var dimensions = []; + for (var dim in range) { + if (range.hasOwnProperty(dim)) { + dimensions.push(dim); + } + } + + if (__DEV__) { + validateDimensions(this, dimensions); + } + + var dimSize = dimensions.length; + if (!dimSize) { + return; + } + + var originalCount = this.count(); + var Ctor = getIndicesCtor(this); + var newIndices = new Ctor(originalCount); + + var offset = 0; + var dim0 = dimensions[0]; + + var min = range[dim0][0]; + var max = range[dim0][1]; + + var quickFinished = false; + if (!this._indices) { + // Extreme optimization for common case. About 2x faster in chrome. + var idx = 0; + if (dimSize === 1) { + var dimStorage = this._storage[dimensions[0]]; + for (var k = 0; k < this._chunkCount; k++) { + var chunkStorage = dimStorage[k]; + var len = Math.min(this._count - k * this._chunkSize, this._chunkSize); + for (var i = 0; i < len; i++) { + var val = chunkStorage[i]; + // NaN will not be filtered. Consider the case, in line chart, empty + // value indicates the line should be broken. But for the case like + // scatter plot, a data item with empty value will not be rendered, + // but the axis extent may be effected if some other dim of the data + // item has value. Fortunately it is not a significant negative effect. + if ( + (val >= min && val <= max) || isNaN(val) + ) { + newIndices[offset++] = idx; + } + idx++; + } + } + quickFinished = true; + } + else if (dimSize === 2) { + var dimStorage = this._storage[dim0]; + var dimStorage2 = this._storage[dimensions[1]]; + var min2 = range[dimensions[1]][0]; + var max2 = range[dimensions[1]][1]; + for (var k = 0; k < this._chunkCount; k++) { + var chunkStorage = dimStorage[k]; + var chunkStorage2 = dimStorage2[k]; + var len = Math.min(this._count - k * this._chunkSize, this._chunkSize); + for (var i = 0; i < len; i++) { + var val = chunkStorage[i]; + var val2 = chunkStorage2[i]; + // Do not filter NaN, see comment above. + if (( + (val >= min && val <= max) || isNaN(val) + ) + && ( + (val2 >= min2 && val2 <= max2) || isNaN(val2) + ) + ) { + newIndices[offset++] = idx; + } + idx++; + } + } + quickFinished = true; + } + } + if (!quickFinished) { + if (dimSize === 1) { + for (var i = 0; i < originalCount; i++) { + var rawIndex = this.getRawIndex(i); + var val = this._getFast(dim0, rawIndex); + // Do not filter NaN, see comment above. + if ( + (val >= min && val <= max) || isNaN(val) + ) { + newIndices[offset++] = rawIndex; + } + } + } + else { + for (var i = 0; i < originalCount; i++) { + var keep = true; + var rawIndex = this.getRawIndex(i); + for (var k = 0; k < dimSize; k++) { + var dimk = dimensions[k]; + var val = this._getFast(dim, rawIndex); + // Do not filter NaN, see comment above. + if (val < range[dimk][0] || val > range[dimk][1]) { + keep = false; + } + } + if (keep) { + newIndices[offset++] = this.getRawIndex(i); + } + } + } + } + + // Set indices after filtered. + if (offset < originalCount) { + this._indices = newIndices; + } + this._count = offset; + // Reset data extent + this._extent = {}; + + this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices; + + return this; +}; + +/** + * Data mapping to a plain array + * @param {string|Array.} [dimensions] + * @param {Function} cb + * @param {*} [context=this] + * @return {Array} + */ +listProto.mapArray = function (dimensions, cb, context, contextCompat) { + 'use strict'; + + if (typeof dimensions === 'function') { + contextCompat = context; + context = cb; + cb = dimensions; + dimensions = []; + } + + // contextCompat just for compat echarts3 + context = context || contextCompat || this; + + var result = []; + this.each(dimensions, function () { + result.push(cb && cb.apply(this, arguments)); + }, context); + return result; +}; + +// Data in excludeDimensions is copied, otherwise transfered. +function cloneListForMapAndSample(original, excludeDimensions) { + var allDimensions = original.dimensions; + var list = new List( + map(allDimensions, original.getDimensionInfo, original), + original.hostModel + ); + // FIXME If needs stackedOn, value may already been stacked + transferProperties(list, original); + + var storage = list._storage = {}; + var originalStorage = original._storage; + + // Init storage + for (var i = 0; i < allDimensions.length; i++) { + var dim = allDimensions[i]; + if (originalStorage[dim]) { + // Notice that we do not reset invertedIndicesMap here, becuase + // there is no scenario of mapping or sampling ordinal dimension. + if (indexOf(excludeDimensions, dim) >= 0) { + storage[dim] = cloneDimStore(originalStorage[dim]); + list._rawExtent[dim] = getInitialExtent(); + list._extent[dim] = null; + } + else { + // Direct reference for other dimensions + storage[dim] = originalStorage[dim]; + } + } + } + return list; +} + +function cloneDimStore(originalDimStore) { + var newDimStore = new Array(originalDimStore.length); + for (var j = 0; j < originalDimStore.length; j++) { + newDimStore[j] = cloneChunk(originalDimStore[j]); + } + return newDimStore; +} + +function getInitialExtent() { + return [Infinity, -Infinity]; +} + +/** + * Data mapping to a new List with given dimensions + * @param {string|Array.} dimensions + * @param {Function} cb + * @param {*} [context=this] + * @return {Array} + */ +listProto.map = function (dimensions, cb, context, contextCompat) { + 'use strict'; + + // contextCompat just for compat echarts3 + context = context || contextCompat || this; + + dimensions = map( + normalizeDimensions(dimensions), this.getDimension, this + ); + + if (__DEV__) { + validateDimensions(this, dimensions); + } + + var list = cloneListForMapAndSample(this, dimensions); + + // Following properties are all immutable. + // So we can reference to the same value + list._indices = this._indices; + list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices; + + var storage = list._storage; + + var tmpRetValue = []; + var chunkSize = this._chunkSize; + var dimSize = dimensions.length; + var dataCount = this.count(); + var values = []; + var rawExtent = list._rawExtent; + + for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) { + for (var dimIndex = 0; dimIndex < dimSize; dimIndex++) { + values[dimIndex] = this.get(dimensions[dimIndex], dataIndex /*, stack */); + } + values[dimSize] = dataIndex; + + var retValue = cb && cb.apply(context, values); + if (retValue != null) { + // a number or string (in oridinal dimension)? + if (typeof retValue !== 'object') { + tmpRetValue[0] = retValue; + retValue = tmpRetValue; + } + + var rawIndex = this.getRawIndex(dataIndex); + var chunkIndex = Math.floor(rawIndex / chunkSize); + var chunkOffset = rawIndex % chunkSize; + + for (var i = 0; i < retValue.length; i++) { + var dim = dimensions[i]; + var val = retValue[i]; + var rawExtentOnDim = rawExtent[dim]; + + var dimStore = storage[dim]; + if (dimStore) { + dimStore[chunkIndex][chunkOffset] = val; + } + + if (val < rawExtentOnDim[0]) { + rawExtentOnDim[0] = val; + } + if (val > rawExtentOnDim[1]) { + rawExtentOnDim[1] = val; + } + } + } + } + + return list; +}; + +/** + * Large data down sampling on given dimension + * @param {string} dimension + * @param {number} rate + * @param {Function} sampleValue + * @param {Function} sampleIndex Sample index for name and id + */ +listProto.downSample = function (dimension, rate, sampleValue, sampleIndex) { + var list = cloneListForMapAndSample(this, [dimension]); + var targetStorage = list._storage; + + var frameValues = []; + var frameSize = Math.floor(1 / rate); + + var dimStore = targetStorage[dimension]; + var len = this.count(); + var chunkSize = this._chunkSize; + var rawExtentOnDim = list._rawExtent[dimension]; + + var newIndices = new (getIndicesCtor(this))(len); + + var offset = 0; + for (var i = 0; i < len; i += frameSize) { + // Last frame + if (frameSize > len - i) { + frameSize = len - i; + frameValues.length = frameSize; + } + for (var k = 0; k < frameSize; k++) { + var dataIdx = this.getRawIndex(i + k); + var originalChunkIndex = Math.floor(dataIdx / chunkSize); + var originalChunkOffset = dataIdx % chunkSize; + frameValues[k] = dimStore[originalChunkIndex][originalChunkOffset]; + } + var value = sampleValue(frameValues); + var sampleFrameIdx = this.getRawIndex( + Math.min(i + sampleIndex(frameValues, value) || 0, len - 1) + ); + var sampleChunkIndex = Math.floor(sampleFrameIdx / chunkSize); + var sampleChunkOffset = sampleFrameIdx % chunkSize; + // Only write value on the filtered data + dimStore[sampleChunkIndex][sampleChunkOffset] = value; + + if (value < rawExtentOnDim[0]) { + rawExtentOnDim[0] = value; + } + if (value > rawExtentOnDim[1]) { + rawExtentOnDim[1] = value; + } + + newIndices[offset++] = sampleFrameIdx; + } + + list._count = offset; + list._indices = newIndices; + + list.getRawIndex = getRawIndexWithIndices; + + return list; +}; + +/** + * Get model of one data item. + * + * @param {number} idx + */ +// FIXME Model proxy ? +listProto.getItemModel = function (idx) { + var hostModel = this.hostModel; + return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel); +}; + +/** + * Create a data differ + * @param {module:echarts/data/List} otherList + * @return {module:echarts/data/DataDiffer} + */ +listProto.diff = function (otherList) { + var thisList = this; + + return new DataDiffer( + otherList ? otherList.getIndices() : [], + this.getIndices(), + function (idx) { + return getId(otherList, idx); + }, + function (idx) { + return getId(thisList, idx); + } + ); +}; +/** + * Get visual property. + * @param {string} key + */ +listProto.getVisual = function (key) { + var visual = this._visual; + return visual && visual[key]; +}; + +/** + * Set visual property + * @param {string|Object} key + * @param {*} [value] + * + * @example + * setVisual('color', color); + * setVisual({ + * 'color': color + * }); + */ +listProto.setVisual = function (key, val) { + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.setVisual(name, key[name]); + } + } + return; + } + this._visual = this._visual || {}; + this._visual[key] = val; +}; + +/** + * Set layout property. + * @param {string|Object} key + * @param {*} [val] + */ +listProto.setLayout = function (key, val) { + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.setLayout(name, key[name]); + } + } + return; + } + this._layout[key] = val; +}; + +/** + * Get layout property. + * @param {string} key. + * @return {*} + */ +listProto.getLayout = function (key) { + return this._layout[key]; +}; + +/** + * Get layout of single data item + * @param {number} idx + */ +listProto.getItemLayout = function (idx) { + return this._itemLayouts[idx]; +}; + +/** + * Set layout of single data item + * @param {number} idx + * @param {Object} layout + * @param {boolean=} [merge=false] + */ +listProto.setItemLayout = function (idx, layout, merge$$1) { + this._itemLayouts[idx] = merge$$1 + ? extend(this._itemLayouts[idx] || {}, layout) + : layout; +}; + +/** + * Clear all layout of single data item + */ +listProto.clearItemLayouts = function () { + this._itemLayouts.length = 0; +}; + +/** + * Get visual property of single data item + * @param {number} idx + * @param {string} key + * @param {boolean} [ignoreParent=false] + */ +listProto.getItemVisual = function (idx, key, ignoreParent) { + var itemVisual = this._itemVisuals[idx]; + var val = itemVisual && itemVisual[key]; + if (val == null && !ignoreParent) { + // Use global visual property + return this.getVisual(key); + } + return val; +}; + +/** + * Set visual property of single data item + * + * @param {number} idx + * @param {string|Object} key + * @param {*} [value] + * + * @example + * setItemVisual(0, 'color', color); + * setItemVisual(0, { + * 'color': color + * }); + */ +listProto.setItemVisual = function (idx, key, value) { + var itemVisual = this._itemVisuals[idx] || {}; + var hasItemVisual = this.hasItemVisual; + this._itemVisuals[idx] = itemVisual; + + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + itemVisual[name] = key[name]; + hasItemVisual[name] = true; + } + } + return; + } + itemVisual[key] = value; + hasItemVisual[key] = true; +}; + +/** + * Clear itemVisuals and list visual. + */ +listProto.clearAllVisual = function () { + this._visual = {}; + this._itemVisuals = []; + this.hasItemVisual = {}; +}; + +var setItemDataAndSeriesIndex = function (child) { + child.seriesIndex = this.seriesIndex; + child.dataIndex = this.dataIndex; + child.dataType = this.dataType; +}; +/** + * Set graphic element relative to data. It can be set as null + * @param {number} idx + * @param {module:zrender/Element} [el] + */ +listProto.setItemGraphicEl = function (idx, el) { + var hostModel = this.hostModel; + + if (el) { + // Add data index and series index for indexing the data by element + // Useful in tooltip + el.dataIndex = idx; + el.dataType = this.dataType; + el.seriesIndex = hostModel && hostModel.seriesIndex; + if (el.type === 'group') { + el.traverse(setItemDataAndSeriesIndex, el); + } + } + + this._graphicEls[idx] = el; +}; + +/** + * @param {number} idx + * @return {module:zrender/Element} + */ +listProto.getItemGraphicEl = function (idx) { + return this._graphicEls[idx]; +}; + +/** + * @param {Function} cb + * @param {*} context + */ +listProto.eachItemGraphicEl = function (cb, context) { + each$1(this._graphicEls, function (el, idx) { + if (el) { + cb && cb.call(context, el, idx); + } + }); +}; + +/** + * Shallow clone a new list except visual and layout properties, and graph elements. + * New list only change the indices. + */ +listProto.cloneShallow = function (list) { + if (!list) { + var dimensionInfoList = map(this.dimensions, this.getDimensionInfo, this); + list = new List(dimensionInfoList, this.hostModel); + } + + // FIXME + list._storage = this._storage; + + transferProperties(list, this); + + // Clone will not change the data extent and indices + if (this._indices) { + var Ctor = this._indices.constructor; + list._indices = new Ctor(this._indices); + } + else { + list._indices = null; + } + list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices; + + return list; +}; + +/** + * Wrap some method to add more feature + * @param {string} methodName + * @param {Function} injectFunction + */ +listProto.wrapMethod = function (methodName, injectFunction) { + var originalMethod = this[methodName]; + if (typeof originalMethod !== 'function') { + return; + } + this.__wrappedMethods = this.__wrappedMethods || []; + this.__wrappedMethods.push(methodName); + this[methodName] = function () { + var res = originalMethod.apply(this, arguments); + return injectFunction.apply(this, [res].concat(slice(arguments))); + }; +}; + +// Methods that create a new list based on this list should be listed here. +// Notice that those method should `RETURN` the new list. +listProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map']; +// Methods that change indices of this list should be listed here. +listProto.CHANGABLE_METHODS = ['filterSelf', 'selectRange']; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @deprecated + * Use `echarts/data/helper/createDimensions` instead. + */ + +/** + * @see {module:echarts/test/ut/spec/data/completeDimensions} + * + * Complete the dimensions array, by user defined `dimension` and `encode`, + * and guessing from the data structure. + * If no 'value' dimension specified, the first no-named dimension will be + * named as 'value'. + * + * @param {Array.} sysDims Necessary dimensions, like ['x', 'y'], which + * provides not only dim template, but also default order. + * properties: 'name', 'type', 'displayName'. + * `name` of each item provides default coord name. + * [{dimsDef: [string|Object, ...]}, ...] dimsDef of sysDim item provides default dim name, and + * provide dims count that the sysDim required. + * [{ordinalMeta}] can be specified. + * @param {module:echarts/data/Source|Array|Object} source or data (for compatibal with pervious) + * @param {Object} [opt] + * @param {Array.} [opt.dimsDef] option.series.dimensions User defined dimensions + * For example: ['asdf', {name, type}, ...]. + * @param {Object|HashMap} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3} + * @param {string} [opt.generateCoord] Generate coord dim with the given name. + * If not specified, extra dim names will be: + * 'value', 'value0', 'value1', ... + * @param {number} [opt.generateCoordCount] By default, the generated dim name is `generateCoord`. + * If `generateCoordCount` specified, the generated dim names will be: + * `generateCoord` + 0, `generateCoord` + 1, ... + * can be Infinity, indicate that use all of the remain columns. + * @param {number} [opt.dimCount] If not specified, guess by the first data item. + * @param {number} [opt.encodeDefaulter] If not specified, auto find the next available data dim. + * @return {Array.} [{ + * name: string mandatory, + * displayName: string, the origin name in dimsDef, see source helper. + * If displayName given, the tooltip will displayed vertically. + * coordDim: string mandatory, + * coordDimIndex: number mandatory, + * type: string optional, + * otherDims: { never null/undefined + * tooltip: number optional, + * label: number optional, + * itemName: number optional, + * seriesName: number optional, + * }, + * isExtraCoord: boolean true if coord is generated + * (not specified in encode and not series specified) + * other props ... + * }] + */ +function completeDimensions(sysDims, source, opt) { + if (!Source.isInstance(source)) { + source = Source.seriesDataToSource(source); + } + + opt = opt || {}; + sysDims = (sysDims || []).slice(); + var dimsDef = (opt.dimsDef || []).slice(); + var encodeDef = createHashMap(opt.encodeDef); + var dataDimNameMap = createHashMap(); + var coordDimNameMap = createHashMap(); + // var valueCandidate; + var result = []; + + var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount); + + // Apply user defined dims (`name` and `type`) and init result. + for (var i = 0; i < dimCount; i++) { + var dimDefItem = dimsDef[i] = extend( + {}, isObject$1(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]} + ); + var userDimName = dimDefItem.name; + var resultItem = result[i] = {otherDims: {}}; + // Name will be applied later for avoiding duplication. + if (userDimName != null && dataDimNameMap.get(userDimName) == null) { + // Only if `series.dimensions` is defined in option + // displayName, will be set, and dimension will be diplayed vertically in + // tooltip by default. + resultItem.name = resultItem.displayName = userDimName; + dataDimNameMap.set(userDimName, i); + } + dimDefItem.type != null && (resultItem.type = dimDefItem.type); + dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName); + } + + // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`. + encodeDef.each(function (dataDims, coordDim) { + dataDims = normalizeToArray(dataDims).slice(); + + // Note: It is allowed that `dataDims.length` is `0`, e.g., options is + // `{encode: {x: -1, y: 1}}`. Should not filter anything in + // this case. + if (dataDims.length === 1 && dataDims[0] < 0) { + encodeDef.set(coordDim, false); + return; + } + + var validDataDims = encodeDef.set(coordDim, []); + each$1(dataDims, function (resultDimIdx, idx) { + // The input resultDimIdx can be dim name or index. + isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx)); + if (resultDimIdx != null && resultDimIdx < dimCount) { + validDataDims[idx] = resultDimIdx; + applyDim(result[resultDimIdx], coordDim, idx); + } + }); + }); + + // Apply templetes and default order from `sysDims`. + var availDimIdx = 0; + each$1(sysDims, function (sysDimItem, sysDimIndex) { + var coordDim; + var sysDimItem; + var sysDimItemDimsDef; + var sysDimItemOtherDims; + if (isString(sysDimItem)) { + coordDim = sysDimItem; + sysDimItem = {}; + } + else { + coordDim = sysDimItem.name; + var ordinalMeta = sysDimItem.ordinalMeta; + sysDimItem.ordinalMeta = null; + sysDimItem = clone(sysDimItem); + sysDimItem.ordinalMeta = ordinalMeta; + // `coordDimIndex` should not be set directly. + sysDimItemDimsDef = sysDimItem.dimsDef; + sysDimItemOtherDims = sysDimItem.otherDims; + sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex + = sysDimItem.dimsDef = sysDimItem.otherDims = null; + } + + var dataDims = encodeDef.get(coordDim); + + // negative resultDimIdx means no need to mapping. + if (dataDims === false) { + return; + } + + var dataDims = normalizeToArray(dataDims); + + // dimensions provides default dim sequences. + if (!dataDims.length) { + for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) { + while (availDimIdx < result.length && result[availDimIdx].coordDim != null) { + availDimIdx++; + } + availDimIdx < result.length && dataDims.push(availDimIdx++); + } + } + + // Apply templates. + each$1(dataDims, function (resultDimIdx, coordDimIndex) { + var resultItem = result[resultDimIdx]; + applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex); + if (resultItem.name == null && sysDimItemDimsDef) { + var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex]; + !isObject$1(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {name: sysDimItemDimsDefItem}); + resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name; + resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip; + } + // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}} + sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims); + }); + }); + + function applyDim(resultItem, coordDim, coordDimIndex) { + if (OTHER_DIMENSIONS.get(coordDim) != null) { + resultItem.otherDims[coordDim] = coordDimIndex; + } + else { + resultItem.coordDim = coordDim; + resultItem.coordDimIndex = coordDimIndex; + coordDimNameMap.set(coordDim, true); + } + } + + // Make sure the first extra dim is 'value'. + var generateCoord = opt.generateCoord; + var generateCoordCount = opt.generateCoordCount; + var fromZero = generateCoordCount != null; + generateCoordCount = generateCoord ? (generateCoordCount || 1) : 0; + var extra = generateCoord || 'value'; + + // Set dim `name` and other `coordDim` and other props. + for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) { + var resultItem = result[resultDimIdx] = result[resultDimIdx] || {}; + var coordDim = resultItem.coordDim; + + if (coordDim == null) { + resultItem.coordDim = genName( + extra, coordDimNameMap, fromZero + ); + resultItem.coordDimIndex = 0; + if (!generateCoord || generateCoordCount <= 0) { + resultItem.isExtraCoord = true; + } + generateCoordCount--; + } + + resultItem.name == null && (resultItem.name = genName( + resultItem.coordDim, + dataDimNameMap + )); + + if (resultItem.type == null && guessOrdinal(source, resultDimIdx, resultItem.name)) { + resultItem.type = 'ordinal'; + } + } + + return result; +} + +// ??? TODO +// Originally detect dimCount by data[0]. Should we +// optimize it to only by sysDims and dimensions and encode. +// So only necessary dims will be initialized. +// But +// (1) custom series should be considered. where other dims +// may be visited. +// (2) sometimes user need to calcualte bubble size or use visualMap +// on other dimensions besides coordSys needed. +// So, dims that is not used by system, should be shared in storage? +function getDimCount(source, sysDims, dimsDef, optDimCount) { + // Note that the result dimCount should not small than columns count + // of data, otherwise `dataDimNameMap` checking will be incorrect. + var dimCount = Math.max( + source.dimensionsDetectCount || 1, + sysDims.length, + dimsDef.length, + optDimCount || 0 + ); + each$1(sysDims, function (sysDimItem) { + var sysDimItemDimsDef = sysDimItem.dimsDef; + sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length)); + }); + return dimCount; +} + +function genName(name, map$$1, fromZero) { + if (fromZero || map$$1.get(name) != null) { + var i = 0; + while (map$$1.get(name + i) != null) { + i++; + } + name += i; + } + map$$1.set(name, true); + return name; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Substitute `completeDimensions`. + * `completeDimensions` is to be deprecated. + */ +/** + * @param {module:echarts/data/Source|module:echarts/data/List} source or data. + * @param {Object|Array} [opt] + * @param {Array.} [opt.coordDimensions=[]] + * @param {number} [opt.dimensionsCount] + * @param {string} [opt.generateCoord] + * @param {string} [opt.generateCoordCount] + * @param {Array.} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define. + * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define. + * @return {Array.} dimensionsInfo + */ +var createDimensions = function (source, opt) { + opt = opt || {}; + return completeDimensions(opt.coordDimensions || [], source, { + dimsDef: opt.dimensionsDefine || source.dimensionsDefine, + encodeDef: opt.encodeDefine || source.encodeDefine, + dimCount: opt.dimensionsCount, + generateCoord: opt.generateCoord, + generateCoordCount: opt.generateCoordCount + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Note that it is too complicated to support 3d stack by value + * (have to create two-dimension inverted index), so in 3d case + * we just support that stacked by index. + * + * @param {module:echarts/model/Series} seriesModel + * @param {Array.} dimensionInfoList The same as the input of . + * The input dimensionInfoList will be modified. + * @param {Object} [opt] + * @param {boolean} [opt.stackedCoordDimension=''] Specify a coord dimension if needed. + * @param {boolean} [opt.byIndex=false] + * @return {Object} calculationInfo + * { + * stackedDimension: string + * stackedByDimension: string + * isStackedByIndex: boolean + * stackedOverDimension: string + * stackResultDimension: string + * } + */ +function enableDataStack(seriesModel, dimensionInfoList, opt) { + opt = opt || {}; + var byIndex = opt.byIndex; + var stackedCoordDimension = opt.stackedCoordDimension; + + // Compatibal: when `stack` is set as '', do not stack. + var mayStack = !!(seriesModel && seriesModel.get('stack')); + var stackedByDimInfo; + var stackedDimInfo; + var stackResultDimension; + var stackedOverDimension; + + each$1(dimensionInfoList, function (dimensionInfo, index) { + if (isString(dimensionInfo)) { + dimensionInfoList[index] = dimensionInfo = {name: dimensionInfo}; + } + + if (mayStack && !dimensionInfo.isExtraCoord) { + // Find the first ordinal dimension as the stackedByDimInfo. + if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) { + stackedByDimInfo = dimensionInfo; + } + // Find the first stackable dimension as the stackedDimInfo. + if (!stackedDimInfo + && dimensionInfo.type !== 'ordinal' + && dimensionInfo.type !== 'time' + && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim) + ) { + stackedDimInfo = dimensionInfo; + } + } + }); + + if (stackedDimInfo && !byIndex && !stackedByDimInfo) { + // Compatible with previous design, value axis (time axis) only stack by index. + // It may make sense if the user provides elaborately constructed data. + byIndex = true; + } + + // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`. + // That put stack logic in List is for using conveniently in echarts extensions, but it + // might not be a good way. + if (stackedDimInfo) { + // Use a weird name that not duplicated with other names. + stackResultDimension = '__\0ecstackresult'; + stackedOverDimension = '__\0ecstackedover'; + + // Create inverted index to fast query index by value. + if (stackedByDimInfo) { + stackedByDimInfo.createInvertedIndices = true; + } + + var stackedDimCoordDim = stackedDimInfo.coordDim; + var stackedDimType = stackedDimInfo.type; + var stackedDimCoordIndex = 0; + + each$1(dimensionInfoList, function (dimensionInfo) { + if (dimensionInfo.coordDim === stackedDimCoordDim) { + stackedDimCoordIndex++; + } + }); + + dimensionInfoList.push({ + name: stackResultDimension, + coordDim: stackedDimCoordDim, + coordDimIndex: stackedDimCoordIndex, + type: stackedDimType, + isExtraCoord: true, + isCalculationCoord: true + }); + + stackedDimCoordIndex++; + + dimensionInfoList.push({ + name: stackedOverDimension, + // This dimension contains stack base (generally, 0), so do not set it as + // `stackedDimCoordDim` to avoid extent calculation, consider log scale. + coordDim: stackedOverDimension, + coordDimIndex: stackedDimCoordIndex, + type: stackedDimType, + isExtraCoord: true, + isCalculationCoord: true + }); + } + + return { + stackedDimension: stackedDimInfo && stackedDimInfo.name, + stackedByDimension: stackedByDimInfo && stackedByDimInfo.name, + isStackedByIndex: byIndex, + stackedOverDimension: stackedOverDimension, + stackResultDimension: stackResultDimension + }; +} + +/** + * @param {module:echarts/data/List} data + * @param {string} stackedDim + */ +function isDimensionStacked(data, stackedDim /*, stackedByDim*/) { + // Each single series only maps to one pair of axis. So we do not need to + // check stackByDim, whatever stacked by a dimension or stacked by index. + return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension'); + // && ( + // stackedByDim != null + // ? stackedByDim === data.getCalculationInfo('stackedByDimension') + // : data.getCalculationInfo('isStackedByIndex') + // ); +} + +/** + * @param {module:echarts/data/List} data + * @param {string} targetDim + * @param {string} [stackedByDim] If not input this parameter, check whether + * stacked by index. + * @return {string} dimension + */ +function getStackedDimension(data, targetDim) { + return isDimensionStacked(data, targetDim) + ? data.getCalculationInfo('stackResultDimension') + : targetDim; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/data/Source|Array} source Or raw data. + * @param {module:echarts/model/Series} seriesModel + * @param {Object} [opt] + * @param {string} [opt.generateCoord] + */ +function createListFromArray(source, seriesModel, opt) { + opt = opt || {}; + + if (!Source.isInstance(source)) { + source = Source.seriesDataToSource(source); + } + + var coordSysName = seriesModel.get('coordinateSystem'); + var registeredCoordSys = CoordinateSystemManager.get(coordSysName); + + var coordSysDefine = getCoordSysDefineBySeries(seriesModel); + + var coordSysDimDefs; + + if (coordSysDefine) { + coordSysDimDefs = map(coordSysDefine.coordSysDims, function (dim) { + var dimInfo = {name: dim}; + var axisModel = coordSysDefine.axisMap.get(dim); + if (axisModel) { + var axisType = axisModel.get('type'); + dimInfo.type = getDimensionTypeByAxis(axisType); + // dimInfo.stackable = isStackable(axisType); + } + return dimInfo; + }); + } + + if (!coordSysDimDefs) { + // Get dimensions from registered coordinate system + coordSysDimDefs = (registeredCoordSys && ( + registeredCoordSys.getDimensionsInfo + ? registeredCoordSys.getDimensionsInfo() + : registeredCoordSys.dimensions.slice() + )) || ['x', 'y']; + } + + var dimInfoList = createDimensions(source, { + coordDimensions: coordSysDimDefs, + generateCoord: opt.generateCoord + }); + + var firstCategoryDimIndex; + var hasNameEncode; + coordSysDefine && each$1(dimInfoList, function (dimInfo, dimIndex) { + var coordDim = dimInfo.coordDim; + var categoryAxisModel = coordSysDefine.categoryAxisMap.get(coordDim); + if (categoryAxisModel) { + if (firstCategoryDimIndex == null) { + firstCategoryDimIndex = dimIndex; + } + dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta(); + } + if (dimInfo.otherDims.itemName != null) { + hasNameEncode = true; + } + }); + if (!hasNameEncode && firstCategoryDimIndex != null) { + dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0; + } + + var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList); + + var list = new List(dimInfoList, seriesModel); + + list.setCalculationInfo(stackCalculationInfo); + + var dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source)) + ? function (itemOpt, dimName, dataIndex, dimIndex) { + // Use dataIndex as ordinal value in categoryAxis + return dimIndex === firstCategoryDimIndex + ? dataIndex + : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex); + } + : null; + + list.hasItemOption = false; + list.initData(source, null, dimValueGetter); + + return list; +} + +function isNeedCompleteOrdinalData(source) { + if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) { + var sampleItem = firstDataNotNull(source.data || []); + return sampleItem != null + && !isArray(getDataItemValue(sampleItem)); + } +} + +function firstDataNotNull(data) { + var i = 0; + while (i < data.length && data[i] == null) { + i++; + } + return data[i]; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * // Scale class management + * @module echarts/scale/Scale + */ + +/** + * @param {Object} [setting] + */ +function Scale(setting) { + this._setting = setting || {}; + + /** + * Extent + * @type {Array.} + * @protected + */ + this._extent = [Infinity, -Infinity]; + + /** + * Step is calculated in adjustExtent + * @type {Array.} + * @protected + */ + this._interval = 0; + + this.init && this.init.apply(this, arguments); +} + +/** + * Parse input val to valid inner number. + * @param {*} val + * @return {number} + */ +Scale.prototype.parse = function (val) { + // Notice: This would be a trap here, If the implementation + // of this method depends on extent, and this method is used + // before extent set (like in dataZoom), it would be wrong. + // Nevertheless, parse does not depend on extent generally. + return val; +}; + +Scale.prototype.getSetting = function (name) { + return this._setting[name]; +}; + +Scale.prototype.contain = function (val) { + var extent = this._extent; + return val >= extent[0] && val <= extent[1]; +}; + +/** + * Normalize value to linear [0, 1], return 0.5 if extent span is 0 + * @param {number} val + * @return {number} + */ +Scale.prototype.normalize = function (val) { + var extent = this._extent; + if (extent[1] === extent[0]) { + return 0.5; + } + return (val - extent[0]) / (extent[1] - extent[0]); +}; + +/** + * Scale normalized value + * @param {number} val + * @return {number} + */ +Scale.prototype.scale = function (val) { + var extent = this._extent; + return val * (extent[1] - extent[0]) + extent[0]; +}; + +/** + * Set extent from data + * @param {Array.} other + */ +Scale.prototype.unionExtent = function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); + // not setExtent because in log axis it may transformed to power + // this.setExtent(extent[0], extent[1]); +}; + +/** + * Set extent from data + * @param {module:echarts/data/List} data + * @param {string} dim + */ +Scale.prototype.unionExtentFromData = function (data, dim) { + this.unionExtent(data.getApproximateExtent(dim)); +}; + +/** + * Get extent + * @return {Array.} + */ +Scale.prototype.getExtent = function () { + return this._extent.slice(); +}; + +/** + * Set extent + * @param {number} start + * @param {number} end + */ +Scale.prototype.setExtent = function (start, end) { + var thisExtent = this._extent; + if (!isNaN(start)) { + thisExtent[0] = start; + } + if (!isNaN(end)) { + thisExtent[1] = end; + } +}; + +/** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ +Scale.prototype.isBlank = function () { + return this._isBlank; +}, + +/** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ +Scale.prototype.setBlank = function (isBlank) { + this._isBlank = isBlank; +}; + +/** + * @abstract + * @param {*} tick + * @return {string} label of the tick. + */ +Scale.prototype.getLabel = null; + + +enableClassExtend(Scale); +enableClassManagement(Scale, { + registerWhenExtend: true +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @constructor + * @param {Object} [opt] + * @param {Object} [opt.categories=[]] + * @param {Object} [opt.needCollect=false] + * @param {Object} [opt.deduplication=false] + */ +function OrdinalMeta(opt) { + + /** + * @readOnly + * @type {Array.} + */ + this.categories = opt.categories || []; + + /** + * @private + * @type {boolean} + */ + this._needCollect = opt.needCollect; + + /** + * @private + * @type {boolean} + */ + this._deduplication = opt.deduplication; + + /** + * @private + * @type {boolean} + */ + this._map; +} + +/** + * @param {module:echarts/model/Model} axisModel + * @return {module:echarts/data/OrdinalMeta} + */ +OrdinalMeta.createByAxisModel = function (axisModel) { + var option = axisModel.option; + var data = option.data; + var categories = data && map(data, getName); + + return new OrdinalMeta({ + categories: categories, + needCollect: !categories, + // deduplication is default in axis. + deduplication: option.dedplication !== false + }); +}; + +var proto$1 = OrdinalMeta.prototype; + +/** + * @param {string} category + * @return {number} ordinal + */ +proto$1.getOrdinal = function (category) { + return getOrCreateMap(this).get(category); +}; + +/** + * @param {*} category + * @return {number} The ordinal. If not found, return NaN. + */ +proto$1.parseAndCollect = function (category) { + var index; + var needCollect = this._needCollect; + + // The value of category dim can be the index of the given category set. + // This feature is only supported when !needCollect, because we should + // consider a common case: a value is 2017, which is a number but is + // expected to be tread as a category. This case usually happen in dataset, + // where it happent to be no need of the index feature. + if (typeof category !== 'string' && !needCollect) { + return category; + } + + // Optimize for the scenario: + // category is ['2012-01-01', '2012-01-02', ...], where the input + // data has been ensured not duplicate and is large data. + // Notice, if a dataset dimension provide categroies, usually echarts + // should remove duplication except user tell echarts dont do that + // (set axis.deduplication = false), because echarts do not know whether + // the values in the category dimension has duplication (consider the + // parallel-aqi example) + if (needCollect && !this._deduplication) { + index = this.categories.length; + this.categories[index] = category; + return index; + } + + var map$$1 = getOrCreateMap(this); + index = map$$1.get(category); + + if (index == null) { + if (needCollect) { + index = this.categories.length; + this.categories[index] = category; + map$$1.set(category, index); + } + else { + index = NaN; + } + } + + return index; +}; + +// Consider big data, do not create map until needed. +function getOrCreateMap(ordinalMeta) { + return ordinalMeta._map || ( + ordinalMeta._map = createHashMap(ordinalMeta.categories) + ); +} + +function getName(obj) { + if (isObject$1(obj) && obj.value != null) { + return obj.value; + } + else { + return obj + ''; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Linear continuous scale + * @module echarts/coord/scale/Ordinal + * + * http://en.wikipedia.org/wiki/Level_of_measurement + */ + +// FIXME only one data + +var scaleProto = Scale.prototype; + +var OrdinalScale = Scale.extend({ + + type: 'ordinal', + + /** + * @param {module:echarts/data/OrdianlMeta|Array.} ordinalMeta + */ + init: function (ordinalMeta, extent) { + // Caution: Should not use instanceof, consider ec-extensions using + // import approach to get OrdinalMeta class. + if (!ordinalMeta || isArray(ordinalMeta)) { + ordinalMeta = new OrdinalMeta({categories: ordinalMeta}); + } + this._ordinalMeta = ordinalMeta; + this._extent = extent || [0, ordinalMeta.categories.length - 1]; + }, + + parse: function (val) { + return typeof val === 'string' + ? this._ordinalMeta.getOrdinal(val) + // val might be float. + : Math.round(val); + }, + + contain: function (rank) { + rank = this.parse(rank); + return scaleProto.contain.call(this, rank) + && this._ordinalMeta.categories[rank] != null; + }, + + /** + * Normalize given rank or name to linear [0, 1] + * @param {number|string} [val] + * @return {number} + */ + normalize: function (val) { + return scaleProto.normalize.call(this, this.parse(val)); + }, + + scale: function (val) { + return Math.round(scaleProto.scale.call(this, val)); + }, + + /** + * @return {Array} + */ + getTicks: function () { + var ticks = []; + var extent = this._extent; + var rank = extent[0]; + + while (rank <= extent[1]) { + ticks.push(rank); + rank++; + } + + return ticks; + }, + + /** + * Get item on rank n + * @param {number} n + * @return {string} + */ + getLabel: function (n) { + if (!this.isBlank()) { + // Note that if no data, ordinalMeta.categories is an empty array. + return this._ordinalMeta.categories[n]; + } + }, + + /** + * @return {number} + */ + count: function () { + return this._extent[1] - this._extent[0] + 1; + }, + + /** + * @override + */ + unionExtentFromData: function (data, dim) { + this.unionExtent(data.getApproximateExtent(dim)); + }, + + getOrdinalMeta: function () { + return this._ordinalMeta; + }, + + niceTicks: noop, + niceExtent: noop +}); + +/** + * @return {module:echarts/scale/Time} + */ +OrdinalScale.create = function () { + return new OrdinalScale(); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * For testable. + */ + +var roundNumber$1 = round$1; + +/** + * @param {Array.} extent Both extent[0] and extent[1] should be valid number. + * Should be extent[0] < extent[1]. + * @param {number} splitNumber splitNumber should be >= 1. + * @param {number} [minInterval] + * @param {number} [maxInterval] + * @return {Object} {interval, intervalPrecision, niceTickExtent} + */ +function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) { + var result = {}; + var span = extent[1] - extent[0]; + + var interval = result.interval = nice(span / splitNumber, true); + if (minInterval != null && interval < minInterval) { + interval = result.interval = minInterval; + } + if (maxInterval != null && interval > maxInterval) { + interval = result.interval = maxInterval; + } + // Tow more digital for tick. + var precision = result.intervalPrecision = getIntervalPrecision(interval); + // Niced extent inside original extent + var niceTickExtent = result.niceTickExtent = [ + roundNumber$1(Math.ceil(extent[0] / interval) * interval, precision), + roundNumber$1(Math.floor(extent[1] / interval) * interval, precision) + ]; + + fixExtent(niceTickExtent, extent); + + return result; +} + +/** + * @param {number} interval + * @return {number} interval precision + */ +function getIntervalPrecision(interval) { + // Tow more digital for tick. + return getPrecisionSafe(interval) + 2; +} + +function clamp(niceTickExtent, idx, extent) { + niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]); +} + +// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent. +function fixExtent(niceTickExtent, extent) { + !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]); + !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]); + clamp(niceTickExtent, 0, extent); + clamp(niceTickExtent, 1, extent); + if (niceTickExtent[0] > niceTickExtent[1]) { + niceTickExtent[0] = niceTickExtent[1]; + } +} + +function intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) { + var ticks = []; + + // If interval is 0, return []; + if (!interval) { + return ticks; + } + + // Consider this case: using dataZoom toolbox, zoom and zoom. + var safeLimit = 10000; + + if (extent[0] < niceTickExtent[0]) { + ticks.push(extent[0]); + } + var tick = niceTickExtent[0]; + + while (tick <= niceTickExtent[1]) { + ticks.push(tick); + // Avoid rounding error + tick = roundNumber$1(tick + interval, intervalPrecision); + if (tick === ticks[ticks.length - 1]) { + // Consider out of safe float point, e.g., + // -3711126.9907707 + 2e-10 === -3711126.9907707 + break; + } + if (ticks.length > safeLimit) { + return []; + } + } + // Consider this case: the last item of ticks is smaller + // than niceTickExtent[1] and niceTickExtent[1] === extent[1]. + if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) { + ticks.push(extent[1]); + } + + return ticks; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Interval scale + * @module echarts/scale/Interval + */ + + +var roundNumber = round$1; + +/** + * @alias module:echarts/coord/scale/Interval + * @constructor + */ +var IntervalScale = Scale.extend({ + + type: 'interval', + + _interval: 0, + + _intervalPrecision: 2, + + setExtent: function (start, end) { + var thisExtent = this._extent; + //start,end may be a Number like '25',so... + if (!isNaN(start)) { + thisExtent[0] = parseFloat(start); + } + if (!isNaN(end)) { + thisExtent[1] = parseFloat(end); + } + }, + + unionExtent: function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); + + // unionExtent may called by it's sub classes + IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]); + }, + /** + * Get interval + */ + getInterval: function () { + return this._interval; + }, + + /** + * Set interval + */ + setInterval: function (interval) { + this._interval = interval; + // Dropped auto calculated niceExtent and use user setted extent + // We assume user wan't to set both interval, min, max to get a better result + this._niceExtent = this._extent.slice(); + + this._intervalPrecision = getIntervalPrecision(interval); + }, + + /** + * @return {Array.} + */ + getTicks: function () { + return intervalScaleGetTicks( + this._interval, this._extent, this._niceExtent, this._intervalPrecision + ); + }, + + /** + * @param {number} data + * @param {Object} [opt] + * @param {number|string} [opt.precision] If 'auto', use nice presision. + * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2. + * @return {string} + */ + getLabel: function (data, opt) { + if (data == null) { + return ''; + } + + var precision = opt && opt.precision; + + if (precision == null) { + precision = getPrecisionSafe(data) || 0; + } + else if (precision === 'auto') { + // Should be more precise then tick. + precision = this._intervalPrecision; + } + + // (1) If `precision` is set, 12.005 should be display as '12.00500'. + // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'. + data = roundNumber(data, precision, true); + + return addCommas(data); + }, + + /** + * Update interval and extent of intervals for nice ticks + * + * @param {number} [splitNumber = 5] Desired number of ticks + * @param {number} [minInterval] + * @param {number} [maxInterval] + */ + niceTicks: function (splitNumber, minInterval, maxInterval) { + splitNumber = splitNumber || 5; + var extent = this._extent; + var span = extent[1] - extent[0]; + if (!isFinite(span)) { + return; + } + // User may set axis min 0 and data are all negative + // FIXME If it needs to reverse ? + if (span < 0) { + span = -span; + extent.reverse(); + } + + var result = intervalScaleNiceTicks( + extent, splitNumber, minInterval, maxInterval + ); + + this._intervalPrecision = result.intervalPrecision; + this._interval = result.interval; + this._niceExtent = result.niceTickExtent; + }, + + /** + * Nice extent. + * @param {Object} opt + * @param {number} [opt.splitNumber = 5] Given approx tick number + * @param {boolean} [opt.fixMin=false] + * @param {boolean} [opt.fixMax=false] + * @param {boolean} [opt.minInterval] + * @param {boolean} [opt.maxInterval] + */ + niceExtent: function (opt) { + var extent = this._extent; + // If extent start and end are same, expand them + if (extent[0] === extent[1]) { + if (extent[0] !== 0) { + // Expand extent + var expandSize = extent[0]; + // In the fowllowing case + // Axis has been fixed max 100 + // Plus data are all 100 and axis extent are [100, 100]. + // Extend to the both side will cause expanded max is larger than fixed max. + // So only expand to the smaller side. + if (!opt.fixMax) { + extent[1] += expandSize / 2; + extent[0] -= expandSize / 2; + } + else { + extent[0] -= expandSize / 2; + } + } + else { + extent[1] = 1; + } + } + var span = extent[1] - extent[0]; + // If there are no data and extent are [Infinity, -Infinity] + if (!isFinite(span)) { + extent[0] = 0; + extent[1] = 1; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); + + // var extent = this._extent; + var interval = this._interval; + + if (!opt.fixMin) { + extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval); + } + if (!opt.fixMax) { + extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval); + } + } +}); + +/** + * @return {module:echarts/scale/Time} + */ +IntervalScale.create = function () { + return new IntervalScale(); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float32Array */ + +var STACK_PREFIX = '__ec_stack_'; +var LARGE_BAR_MIN_WIDTH = 0.5; + +var LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array; + +function getSeriesStackId(seriesModel) { + return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex; +} + +function getAxisKey(axis) { + return axis.dim + axis.index; +} + +/** + * @param {Object} opt + * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently. + * @param {number} opt.count Positive interger. + * @param {number} [opt.barWidth] + * @param {number} [opt.barMaxWidth] + * @param {number} [opt.barGap] + * @param {number} [opt.barCategoryGap] + * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined. + */ +function getLayoutOnAxis(opt) { + var params = []; + var baseAxis = opt.axis; + var axisKey = 'axis0'; + + if (baseAxis.type !== 'category') { + return; + } + var bandWidth = baseAxis.getBandWidth(); + + for (var i = 0; i < opt.count || 0; i++) { + params.push(defaults({ + bandWidth: bandWidth, + axisKey: axisKey, + stackId: STACK_PREFIX + i + }, opt)); + } + var widthAndOffsets = doCalBarWidthAndOffset(params); + + var result = []; + for (var i = 0; i < opt.count; i++) { + var item = widthAndOffsets[axisKey][STACK_PREFIX + i]; + item.offsetCenter = item.offset + item.width / 2; + result.push(item); + } + + return result; +} + +function prepareLayoutBarSeries(seriesType, ecModel) { + var seriesModels = []; + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + // Check series coordinate, do layout for cartesian2d only + if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) { + seriesModels.push(seriesModel); + } + }); + return seriesModels; +} + +function makeColumnLayout(barSeries) { + var seriesInfoList = []; + each$1(barSeries, function (seriesModel) { + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var axisExtent = baseAxis.getExtent(); + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count()); + + var barWidth = parsePercent$1( + seriesModel.get('barWidth'), bandWidth + ); + var barMaxWidth = parsePercent$1( + seriesModel.get('barMaxWidth'), bandWidth + ); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + + seriesInfoList.push({ + bandWidth: bandWidth, + barWidth: barWidth, + barMaxWidth: barMaxWidth, + barGap: barGap, + barCategoryGap: barCategoryGap, + axisKey: getAxisKey(baseAxis), + stackId: getSeriesStackId(seriesModel) + }); + }); + + return doCalBarWidthAndOffset(seriesInfoList); +} + +function doCalBarWidthAndOffset(seriesInfoList) { + // Columns info on each category axis. Key is cartesian name + var columnsMap = {}; + + each$1(seriesInfoList, function (seriesInfo, idx) { + var axisKey = seriesInfo.axisKey; + var bandWidth = seriesInfo.bandWidth; + var columnsOnAxis = columnsMap[axisKey] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: '20%', + gap: '30%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[axisKey] = columnsOnAxis; + + var stackId = seriesInfo.stackId; + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; + + // Caution: In a single coordinate system, these barGrid attributes + // will be shared by series. Consider that they have default values, + // only the attributes set on the last series will work. + // Do not change this fact unless there will be a break change. + + // TODO + var barWidth = seriesInfo.barWidth; + if (barWidth && !stacks[stackId].width) { + // See #6312, do not restrict width. + stacks[stackId].width = barWidth; + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + columnsOnAxis.remainedWidth -= barWidth; + } + + var barMaxWidth = seriesInfo.barMaxWidth; + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + var barGap = seriesInfo.barGap; + (barGap != null) && (columnsOnAxis.gap = barGap); + var barCategoryGap = seriesInfo.barCategoryGap; + (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap); + }); + + var result = {}; + + each$1(columnsMap, function (columnsOnAxis, coordSysName) { + + result[coordSysName] = {}; + + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + // Find if any auto calculated bar exceeded maxBarWidth + each$1(stacks, function (column, stack) { + var maxWidth = column.maxWidth; + if (maxWidth && maxWidth < autoWidth) { + maxWidth = Math.min(maxWidth, remainedWidth); + if (column.width) { + maxWidth = Math.min(maxWidth, column.width); + } + remainedWidth -= maxWidth; + column.width = maxWidth; + autoWidthCount--; + } + }); + + // Recalculate width again + autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + var widthSum = 0; + var lastColumn; + each$1(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each$1(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + offset: offset, + width: column.width + }; + + offset += column.width * (1 + barGapPercent); + }); + }); + + return result; +} + +/** + * @param {Object} barWidthAndOffset The result of makeColumnLayout + * @param {module:echarts/coord/Axis} axis + * @param {module:echarts/model/Series} [seriesModel] If not provided, return all. + * @return {Object} {stackId: {offset, width}} or {offset, width} if seriesModel provided. + */ +function retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) { + if (barWidthAndOffset && axis) { + var result = barWidthAndOffset[getAxisKey(axis)]; + if (result != null && seriesModel != null) { + result = result[getSeriesStackId(seriesModel)]; + } + return result; + } +} + +/** + * @param {string} seriesType + * @param {module:echarts/model/Global} ecModel + */ +function layout(seriesType, ecModel) { + + var seriesModels = prepareLayoutBarSeries(seriesType, ecModel); + var barWidthAndOffset = makeColumnLayout(seriesModels); + + var lastStackCoords = {}; + each$1(seriesModels, function (seriesModel) { + + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + + var stackId = getSeriesStackId(seriesModel); + var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = cartesian.getOtherAxis(baseAxis); + + var barMinHeight = seriesModel.get('barMinHeight') || 0; + + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + data.setLayout({ + offset: columnOffset, + size: columnWidth + }); + + var valueDim = data.mapDimension(valueAxis.dim); + var baseDim = data.mapDimension(baseAxis.dim); + var stacked = isDimensionStacked(data, valueDim /*, baseDim*/); + var isValueAxisH = valueAxis.isHorizontal(); + + var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked); + + for (var idx = 0, len = data.count(); idx < len; idx++) { + var value = data.get(valueDim, idx); + var baseValue = data.get(baseDim, idx); + + if (isNaN(value)) { + continue; + } + + var sign = value >= 0 ? 'p' : 'n'; + var baseCoord = valueAxisStart; + + // Because of the barMinHeight, we can not use the value in + // stackResultDimension directly. + if (stacked) { + // Only ordinal axis can be stacked. + if (!lastStackCoords[stackId][baseValue]) { + lastStackCoords[stackId][baseValue] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + } + // Should also consider #4243 + baseCoord = lastStackCoords[stackId][baseValue][sign]; + } + + var x; + var y; + var width; + var height; + + if (isValueAxisH) { + var coord = cartesian.dataToPoint([value, baseValue]); + x = baseCoord; + y = coord[1] + columnOffset; + width = coord[0] - valueAxisStart; + height = columnWidth; + + if (Math.abs(width) < barMinHeight) { + width = (width < 0 ? -1 : 1) * barMinHeight; + } + stacked && (lastStackCoords[stackId][baseValue][sign] += width); + } + else { + var coord = cartesian.dataToPoint([baseValue, value]); + x = coord[0] + columnOffset; + y = baseCoord; + width = columnWidth; + height = coord[1] - valueAxisStart; + + if (Math.abs(height) < barMinHeight) { + // Include zero to has a positive bar + height = (height <= 0 ? -1 : 1) * barMinHeight; + } + stacked && (lastStackCoords[stackId][baseValue][sign] += height); + } + + data.setItemLayout(idx, { + x: x, + y: y, + width: width, + height: height + }); + } + + }, this); +} + +// TODO: Do not support stack in large mode yet. +var largeLayout = { + + seriesType: 'bar', + + plan: createRenderPlanner(), + + reset: function (seriesModel) { + if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) { + return; + } + + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var valueAxis = cartesian.getOtherAxis(baseAxis); + var valueDim = data.mapDimension(valueAxis.dim); + var baseDim = data.mapDimension(baseAxis.dim); + var valueAxisHorizontal = valueAxis.isHorizontal(); + var valueDimIdx = valueAxisHorizontal ? 0 : 1; + + var barWidth = retrieveColumnLayout( + makeColumnLayout([seriesModel]), baseAxis, seriesModel + ).width; + if (!(barWidth > LARGE_BAR_MIN_WIDTH)) { // jshint ignore:line + barWidth = LARGE_BAR_MIN_WIDTH; + } + + return {progress: progress}; + + function progress(params, data) { + var largePoints = new LargeArr(params.count * 2); + var dataIndex; + var coord = []; + var valuePair = []; + var offset = 0; + + while ((dataIndex = params.next()) != null) { + valuePair[valueDimIdx] = data.get(valueDim, dataIndex); + valuePair[1 - valueDimIdx] = data.get(baseDim, dataIndex); + + coord = cartesian.dataToPoint(valuePair, null, coord); + largePoints[offset++] = coord[0]; + largePoints[offset++] = coord[1]; + } + + data.setLayout({ + largePoints: largePoints, + barWidth: barWidth, + valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false), + valueAxisHorizontal: valueAxisHorizontal + }); + } + } +}; + +function isOnCartesian(seriesModel) { + return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d'; +} + +function isInLargeMode(seriesModel) { + return seriesModel.pipelineContext && seriesModel.pipelineContext.large; +} + +// See cases in `test/bar-start.html` and `#7412`, `#8747`. +function getValueAxisStart(baseAxis, valueAxis, stacked) { + var extent = valueAxis.getGlobalExtent(); + var min; + var max; + if (extent[0] > extent[1]) { + min = extent[1]; + max = extent[0]; + } + else { + min = extent[0]; + max = extent[1]; + } + + var valueStart = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)); + valueStart < min && (valueStart = min); + valueStart > max && (valueStart = max); + + return valueStart; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* The `scaleLevels` references to d3.js. The use of the source +* code of this file is also subject to the terms and consitions +* of its license (BSD-3Clause, see ). +*/ + +// [About UTC and local time zone]: +// In most cases, `number.parseDate` will treat input data string as local time +// (except time zone is specified in time string). And `format.formateTime` returns +// local time by default. option.useUTC is false by default. This design have +// concidered these common case: +// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed +// in local time by default. +// (2) By default, the input data string (e.g., '2011-01-02') should be displayed +// as its original time, without any time difference. + +var intervalScaleProto = IntervalScale.prototype; + +var mathCeil = Math.ceil; +var mathFloor = Math.floor; +var ONE_SECOND = 1000; +var ONE_MINUTE = ONE_SECOND * 60; +var ONE_HOUR = ONE_MINUTE * 60; +var ONE_DAY = ONE_HOUR * 24; + +// FIXME 公用? +var bisect = function (a, x, lo, hi) { + while (lo < hi) { + var mid = lo + hi >>> 1; + if (a[mid][1] < x) { + lo = mid + 1; + } + else { + hi = mid; + } + } + return lo; +}; + +/** + * @alias module:echarts/coord/scale/Time + * @constructor + */ +var TimeScale = IntervalScale.extend({ + type: 'time', + + /** + * @override + */ + getLabel: function (val) { + var stepLvl = this._stepLvl; + + var date = new Date(val); + + return formatTime(stepLvl[0], date, this.getSetting('useUTC')); + }, + + /** + * @override + */ + niceExtent: function (opt) { + var extent = this._extent; + // If extent start and end are same, expand them + if (extent[0] === extent[1]) { + // Expand extent + extent[0] -= ONE_DAY; + extent[1] += ONE_DAY; + } + // If there are no data and extent are [Infinity, -Infinity] + if (extent[1] === -Infinity && extent[0] === Infinity) { + var d = new Date(); + extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate()); + extent[0] = extent[1] - ONE_DAY; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); + + // var extent = this._extent; + var interval = this._interval; + + if (!opt.fixMin) { + extent[0] = round$1(mathFloor(extent[0] / interval) * interval); + } + if (!opt.fixMax) { + extent[1] = round$1(mathCeil(extent[1] / interval) * interval); + } + }, + + /** + * @override + */ + niceTicks: function (approxTickNum, minInterval, maxInterval) { + approxTickNum = approxTickNum || 10; + + var extent = this._extent; + var span = extent[1] - extent[0]; + var approxInterval = span / approxTickNum; + + if (minInterval != null && approxInterval < minInterval) { + approxInterval = minInterval; + } + if (maxInterval != null && approxInterval > maxInterval) { + approxInterval = maxInterval; + } + + var scaleLevelsLen = scaleLevels.length; + var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen); + + var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)]; + var interval = level[1]; + // Same with interval scale if span is much larger than 1 year + if (level[0] === 'year') { + var yearSpan = span / interval; + + // From "Nice Numbers for Graph Labels" of Graphic Gems + // var niceYearSpan = numberUtil.nice(yearSpan, false); + var yearStep = nice(yearSpan / approxTickNum, true); + + interval *= yearStep; + } + + var timezoneOffset = this.getSetting('useUTC') + ? 0 : (new Date(+extent[0] || +extent[1])).getTimezoneOffset() * 60 * 1000; + var niceExtent = [ + Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset), + Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset) + ]; + + fixExtent(niceExtent, extent); + + this._stepLvl = level; + // Interval will be used in getTicks + this._interval = interval; + this._niceExtent = niceExtent; + }, + + parse: function (val) { + // val might be float. + return +parseDate(val); + } +}); + +each$1(['contain', 'normalize'], function (methodName) { + TimeScale.prototype[methodName] = function (val) { + return intervalScaleProto[methodName].call(this, this.parse(val)); + }; +}); + +// Steps from d3, see the license statement at the top of this file. +var scaleLevels = [ + // Format interval + ['hh:mm:ss', ONE_SECOND], // 1s + ['hh:mm:ss', ONE_SECOND * 5], // 5s + ['hh:mm:ss', ONE_SECOND * 10], // 10s + ['hh:mm:ss', ONE_SECOND * 15], // 15s + ['hh:mm:ss', ONE_SECOND * 30], // 30s + ['hh:mm\nMM-dd', ONE_MINUTE], // 1m + ['hh:mm\nMM-dd', ONE_MINUTE * 5], // 5m + ['hh:mm\nMM-dd', ONE_MINUTE * 10], // 10m + ['hh:mm\nMM-dd', ONE_MINUTE * 15], // 15m + ['hh:mm\nMM-dd', ONE_MINUTE * 30], // 30m + ['hh:mm\nMM-dd', ONE_HOUR], // 1h + ['hh:mm\nMM-dd', ONE_HOUR * 2], // 2h + ['hh:mm\nMM-dd', ONE_HOUR * 6], // 6h + ['hh:mm\nMM-dd', ONE_HOUR * 12], // 12h + ['MM-dd\nyyyy', ONE_DAY], // 1d + ['MM-dd\nyyyy', ONE_DAY * 2], // 2d + ['MM-dd\nyyyy', ONE_DAY * 3], // 3d + ['MM-dd\nyyyy', ONE_DAY * 4], // 4d + ['MM-dd\nyyyy', ONE_DAY * 5], // 5d + ['MM-dd\nyyyy', ONE_DAY * 6], // 6d + ['week', ONE_DAY * 7], // 7d + ['MM-dd\nyyyy', ONE_DAY * 10], // 10d + ['week', ONE_DAY * 14], // 2w + ['week', ONE_DAY * 21], // 3w + ['month', ONE_DAY * 31], // 1M + ['week', ONE_DAY * 42], // 6w + ['month', ONE_DAY * 62], // 2M + ['week', ONE_DAY * 70], // 10w + ['quarter', ONE_DAY * 95], // 3M + ['month', ONE_DAY * 31 * 4], // 4M + ['month', ONE_DAY * 31 * 5], // 5M + ['half-year', ONE_DAY * 380 / 2], // 6M + ['month', ONE_DAY * 31 * 8], // 8M + ['month', ONE_DAY * 31 * 10], // 10M + ['year', ONE_DAY * 380] // 1Y +]; + +/** + * @param {module:echarts/model/Model} + * @return {module:echarts/scale/Time} + */ +TimeScale.create = function (model) { + return new TimeScale({useUTC: model.ecModel.get('useUTC')}); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Log scale + * @module echarts/scale/Log + */ + +// Use some method of IntervalScale +var scaleProto$1 = Scale.prototype; +var intervalScaleProto$1 = IntervalScale.prototype; + +var getPrecisionSafe$1 = getPrecisionSafe; +var roundingErrorFix = round$1; + +var mathFloor$1 = Math.floor; +var mathCeil$1 = Math.ceil; +var mathPow$1 = Math.pow; + +var mathLog = Math.log; + +var LogScale = Scale.extend({ + + type: 'log', + + base: 10, + + $constructor: function () { + Scale.apply(this, arguments); + this._originalScale = new IntervalScale(); + }, + + /** + * @return {Array.} + */ + getTicks: function () { + var originalScale = this._originalScale; + var extent = this._extent; + var originalExtent = originalScale.getExtent(); + + return map(intervalScaleProto$1.getTicks.call(this), function (val) { + var powVal = round$1(mathPow$1(this.base, val)); + + // Fix #4158 + powVal = (val === extent[0] && originalScale.__fixMin) + ? fixRoundingError(powVal, originalExtent[0]) + : powVal; + powVal = (val === extent[1] && originalScale.__fixMax) + ? fixRoundingError(powVal, originalExtent[1]) + : powVal; + + return powVal; + }, this); + }, + + /** + * @param {number} val + * @return {string} + */ + getLabel: intervalScaleProto$1.getLabel, + + /** + * @param {number} val + * @return {number} + */ + scale: function (val) { + val = scaleProto$1.scale.call(this, val); + return mathPow$1(this.base, val); + }, + + /** + * @param {number} start + * @param {number} end + */ + setExtent: function (start, end) { + var base = this.base; + start = mathLog(start) / mathLog(base); + end = mathLog(end) / mathLog(base); + intervalScaleProto$1.setExtent.call(this, start, end); + }, + + /** + * @return {number} end + */ + getExtent: function () { + var base = this.base; + var extent = scaleProto$1.getExtent.call(this); + extent[0] = mathPow$1(base, extent[0]); + extent[1] = mathPow$1(base, extent[1]); + + // Fix #4158 + var originalScale = this._originalScale; + var originalExtent = originalScale.getExtent(); + originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0])); + originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1])); + + return extent; + }, + + /** + * @param {Array.} extent + */ + unionExtent: function (extent) { + this._originalScale.unionExtent(extent); + + var base = this.base; + extent[0] = mathLog(extent[0]) / mathLog(base); + extent[1] = mathLog(extent[1]) / mathLog(base); + scaleProto$1.unionExtent.call(this, extent); + }, + + /** + * @override + */ + unionExtentFromData: function (data, dim) { + // TODO + // filter value that <= 0 + this.unionExtent(data.getApproximateExtent(dim)); + }, + + /** + * Update interval and extent of intervals for nice ticks + * @param {number} [approxTickNum = 10] Given approx tick number + */ + niceTicks: function (approxTickNum) { + approxTickNum = approxTickNum || 10; + var extent = this._extent; + var span = extent[1] - extent[0]; + if (span === Infinity || span <= 0) { + return; + } + + var interval = quantity(span); + var err = approxTickNum / span * interval; + + // Filter ticks to get closer to the desired count. + if (err <= 0.5) { + interval *= 10; + } + + // Interval should be integer + while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) { + interval *= 10; + } + + var niceExtent = [ + round$1(mathCeil$1(extent[0] / interval) * interval), + round$1(mathFloor$1(extent[1] / interval) * interval) + ]; + + this._interval = interval; + this._niceExtent = niceExtent; + }, + + /** + * Nice extent. + * @override + */ + niceExtent: function (opt) { + intervalScaleProto$1.niceExtent.call(this, opt); + + var originalScale = this._originalScale; + originalScale.__fixMin = opt.fixMin; + originalScale.__fixMax = opt.fixMax; + } + +}); + +each$1(['contain', 'normalize'], function (methodName) { + LogScale.prototype[methodName] = function (val) { + val = mathLog(val) / mathLog(this.base); + return scaleProto$1[methodName].call(this, val); + }; +}); + +LogScale.create = function () { + return new LogScale(); +}; + +function fixRoundingError(val, originalVal) { + return roundingErrorFix(val, getPrecisionSafe$1(originalVal)); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Get axis scale extent before niced. + * Item of returned array can only be number (including Infinity and NaN). + */ +function getScaleExtent(scale, model) { + var scaleType = scale.type; + + var min = model.getMin(); + var max = model.getMax(); + var fixMin = min != null; + var fixMax = max != null; + var originalExtent = scale.getExtent(); + + var axisDataLen; + var boundaryGap; + var span; + if (scaleType === 'ordinal') { + axisDataLen = model.getCategories().length; + } + else { + boundaryGap = model.get('boundaryGap'); + if (!isArray(boundaryGap)) { + boundaryGap = [boundaryGap || 0, boundaryGap || 0]; + } + if (typeof boundaryGap[0] === 'boolean') { + if (__DEV__) { + console.warn('Boolean type for boundaryGap is only ' + + 'allowed for ordinal axis. Please use string in ' + + 'percentage instead, e.g., "20%". Currently, ' + + 'boundaryGap is set to be 0.'); + } + boundaryGap = [0, 0]; + } + boundaryGap[0] = parsePercent$1(boundaryGap[0], 1); + boundaryGap[1] = parsePercent$1(boundaryGap[1], 1); + span = (originalExtent[1] - originalExtent[0]) + || Math.abs(originalExtent[0]); + } + + // Notice: When min/max is not set (that is, when there are null/undefined, + // which is the most common case), these cases should be ensured: + // (1) For 'ordinal', show all axis.data. + // (2) For others: + // + `boundaryGap` is applied (if min/max set, boundaryGap is + // disabled). + // + If `needCrossZero`, min/max should be zero, otherwise, min/max should + // be the result that originalExtent enlarged by boundaryGap. + // (3) If no data, it should be ensured that `scale.setBlank` is set. + + // FIXME + // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used? + // (2) When `needCrossZero` and all data is positive/negative, should it be ensured + // that the results processed by boundaryGap are positive/negative? + + if (min == null) { + min = scaleType === 'ordinal' + ? (axisDataLen ? 0 : NaN) + : originalExtent[0] - boundaryGap[0] * span; + } + if (max == null) { + max = scaleType === 'ordinal' + ? (axisDataLen ? axisDataLen - 1 : NaN) + : originalExtent[1] + boundaryGap[1] * span; + } + + if (min === 'dataMin') { + min = originalExtent[0]; + } + else if (typeof min === 'function') { + min = min({ + min: originalExtent[0], + max: originalExtent[1] + }); + } + + if (max === 'dataMax') { + max = originalExtent[1]; + } + else if (typeof max === 'function') { + max = max({ + min: originalExtent[0], + max: originalExtent[1] + }); + } + + (min == null || !isFinite(min)) && (min = NaN); + (max == null || !isFinite(max)) && (max = NaN); + + scale.setBlank( + eqNaN(min) + || eqNaN(max) + || (scaleType === 'ordinal' && !scale.getOrdinalMeta().categories.length) + ); + + // Evaluate if axis needs cross zero + if (model.getNeedCrossZero()) { + // Axis is over zero and min is not set + if (min > 0 && max > 0 && !fixMin) { + min = 0; + } + // Axis is under zero and max is not set + if (min < 0 && max < 0 && !fixMax) { + max = 0; + } + } + + // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis + // is base axis + // FIXME + // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly. + // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent? + // Should not depend on series type `bar`? + // (3) Fix that might overlap when using dataZoom. + // (4) Consider other chart types using `barGrid`? + // See #6728, #4862, `test/bar-overflow-time-plot.html` + var ecModel = model.ecModel; + if (ecModel && (scaleType === 'time' /*|| scaleType === 'interval' */)) { + var barSeriesModels = prepareLayoutBarSeries('bar', ecModel); + var isBaseAxisAndHasBarSeries; + + each$1(barSeriesModels, function (seriesModel) { + isBaseAxisAndHasBarSeries |= seriesModel.getBaseAxis() === model.axis; + }); + + if (isBaseAxisAndHasBarSeries) { + // Calculate placement of bars on axis + var barWidthAndOffset = makeColumnLayout(barSeriesModels); + + // Adjust axis min and max to account for overflow + var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset); + min = adjustedScale.min; + max = adjustedScale.max; + } + } + + return [min, max]; +} + +function adjustScaleForOverflow(min, max, model, barWidthAndOffset) { + + // Get Axis Length + var axisExtent = model.axis.getExtent(); + var axisLength = axisExtent[1] - axisExtent[0]; + + // Get bars on current base axis and calculate min and max overflow + var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis); + if (barsOnCurrentAxis === undefined) { + return {min: min, max: max}; + } + + var minOverflow = Infinity; + each$1(barsOnCurrentAxis, function (item) { + minOverflow = Math.min(item.offset, minOverflow); + }); + var maxOverflow = -Infinity; + each$1(barsOnCurrentAxis, function (item) { + maxOverflow = Math.max(item.offset + item.width, maxOverflow); + }); + minOverflow = Math.abs(minOverflow); + maxOverflow = Math.abs(maxOverflow); + var totalOverFlow = minOverflow + maxOverflow; + + // Calulate required buffer based on old range and overflow + var oldRange = max - min; + var oldRangePercentOfNew = (1 - (minOverflow + maxOverflow) / axisLength); + var overflowBuffer = ((oldRange / oldRangePercentOfNew) - oldRange); + + max += overflowBuffer * (maxOverflow / totalOverFlow); + min -= overflowBuffer * (minOverflow / totalOverFlow); + + return {min: min, max: max}; +} + +function niceScaleExtent(scale, model) { + var extent = getScaleExtent(scale, model); + var fixMin = model.getMin() != null; + var fixMax = model.getMax() != null; + var splitNumber = model.get('splitNumber'); + + if (scale.type === 'log') { + scale.base = model.get('logBase'); + } + + var scaleType = scale.type; + scale.setExtent(extent[0], extent[1]); + scale.niceExtent({ + splitNumber: splitNumber, + fixMin: fixMin, + fixMax: fixMax, + minInterval: (scaleType === 'interval' || scaleType === 'time') + ? model.get('minInterval') : null, + maxInterval: (scaleType === 'interval' || scaleType === 'time') + ? model.get('maxInterval') : null + }); + + // If some one specified the min, max. And the default calculated interval + // is not good enough. He can specify the interval. It is often appeared + // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard + // to be 60. + // FIXME + var interval = model.get('interval'); + if (interval != null) { + scale.setInterval && scale.setInterval(interval); + } +} + +/** + * @param {module:echarts/model/Model} model + * @param {string} [axisType] Default retrieve from model.type + * @return {module:echarts/scale/*} + */ +function createScaleByModel(model, axisType) { + axisType = axisType || model.get('type'); + if (axisType) { + switch (axisType) { + // Buildin scale + case 'category': + return new OrdinalScale( + model.getOrdinalMeta + ? model.getOrdinalMeta() + : model.getCategories(), + [Infinity, -Infinity] + ); + case 'value': + return new IntervalScale(); + // Extended scale, like time and log + default: + return (Scale.getClass(axisType) || IntervalScale).create(model); + } + } +} + +/** + * Check if the axis corss 0 + */ +function ifAxisCrossZero(axis) { + var dataExtent = axis.scale.getExtent(); + var min = dataExtent[0]; + var max = dataExtent[1]; + return !((min > 0 && max > 0) || (min < 0 && max < 0)); +} + +/** + * @param {module:echarts/coord/Axis} axis + * @return {Function} Label formatter function. + * param: {number} tickValue, + * param: {number} idx, the index in all ticks. + * If category axis, this param is not requied. + * return: {string} label string. + */ +function makeLabelFormatter(axis) { + var labelFormatter = axis.getLabelModel().get('formatter'); + var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null; + + if (typeof labelFormatter === 'string') { + labelFormatter = (function (tpl) { + return function (val) { + // For category axis, get raw value; for numeric axis, + // get foramtted label like '1,333,444'. + val = axis.scale.getLabel(val); + return tpl.replace('{value}', val != null ? val : ''); + }; + })(labelFormatter); + // Consider empty array + return labelFormatter; + } + else if (typeof labelFormatter === 'function') { + return function (tickValue, idx) { + // The original intention of `idx` is "the index of the tick in all ticks". + // But the previous implementation of category axis do not consider the + // `axisLabel.interval`, which cause that, for example, the `interval` is + // `1`, then the ticks "name5", "name7", "name9" are displayed, where the + // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep + // the definition here for back compatibility. + if (categoryTickStart != null) { + idx = tickValue - categoryTickStart; + } + return labelFormatter(getAxisRawValue(axis, tickValue), idx); + }; + } + else { + return function (tick) { + return axis.scale.getLabel(tick); + }; + } +} + +function getAxisRawValue(axis, value) { + // In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + return axis.type === 'category' ? axis.scale.getLabel(value) : value; +} + +/** + * @param {module:echarts/coord/Axis} axis + * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels. + */ +function estimateLabelUnionRect(axis) { + var axisModel = axis.model; + var scale = axis.scale; + + if (!axisModel.get('axisLabel.show') || scale.isBlank()) { + return; + } + + var isCategory = axis.type === 'category'; + + var realNumberScaleTicks; + var tickCount; + var categoryScaleExtent = scale.getExtent(); + + // Optimize for large category data, avoid call `getTicks()`. + if (isCategory) { + tickCount = scale.count(); + } + else { + realNumberScaleTicks = scale.getTicks(); + tickCount = realNumberScaleTicks.length; + } + + var axisLabelModel = axis.getLabelModel(); + var labelFormatter = makeLabelFormatter(axis); + + var rect; + var step = 1; + // Simple optimization for large amount of labels + if (tickCount > 40) { + step = Math.ceil(tickCount / 40); + } + for (var i = 0; i < tickCount; i += step) { + var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i; + var label = labelFormatter(tickValue); + var unrotatedSingleRect = axisLabelModel.getTextRect(label); + var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0); + + rect ? rect.union(singleRect) : (rect = singleRect); + } + + return rect; +} + +function rotateTextRect(textRect, rotate) { + var rotateRadians = rotate * Math.PI / 180; + var boundingBox = textRect.plain(); + var beforeWidth = boundingBox.width; + var beforeHeight = boundingBox.height; + var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians); + var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians); + var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight); + + return rotatedRect; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// import * as axisHelper from './axisHelper'; + +var axisModelCommonMixin = { + + /** + * @param {boolean} origin + * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN + */ + getMin: function (origin) { + var option = this.option; + var min = (!origin && option.rangeStart != null) + ? option.rangeStart : option.min; + + if (this.axis + && min != null + && min !== 'dataMin' + && typeof min !== 'function' + && !eqNaN(min) + ) { + min = this.axis.scale.parse(min); + } + return min; + }, + + /** + * @param {boolean} origin + * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN + */ + getMax: function (origin) { + var option = this.option; + var max = (!origin && option.rangeEnd != null) + ? option.rangeEnd : option.max; + + if (this.axis + && max != null + && max !== 'dataMax' + && typeof max !== 'function' + && !eqNaN(max) + ) { + max = this.axis.scale.parse(max); + } + return max; + }, + + /** + * @return {boolean} + */ + getNeedCrossZero: function () { + var option = this.option; + return (option.rangeStart != null || option.rangeEnd != null) + ? false : !option.scale; + }, + + /** + * Should be implemented by each axis model if necessary. + * @return {module:echarts/model/Component} coordinate system model + */ + getCoordSysModel: noop, + + /** + * @param {number} rangeStart Can only be finite number or null/undefined or NaN. + * @param {number} rangeEnd Can only be finite number or null/undefined or NaN. + */ + setRange: function (rangeStart, rangeEnd) { + this.option.rangeStart = rangeStart; + this.option.rangeEnd = rangeEnd; + }, + + /** + * Reset range + */ + resetRange: function () { + // rangeStart and rangeEnd is readonly. + this.option.rangeStart = this.option.rangeEnd = null; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Symbol factory + +/** + * Triangle shape + * @inner + */ +var Triangle = extendShape({ + type: 'triangle', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy + height); + path.lineTo(cx - width, cy + height); + path.closePath(); + } +}); + +/** + * Diamond shape + * @inner + */ +var Diamond = extendShape({ + type: 'diamond', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy); + path.lineTo(cx, cy + height); + path.lineTo(cx - width, cy); + path.closePath(); + } +}); + +/** + * Pin shape + * @inner + */ +var Pin = extendShape({ + type: 'pin', + shape: { + // x, y on the cusp + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (path, shape) { + var x = shape.x; + var y = shape.y; + var w = shape.width / 5 * 3; + // Height must be larger than width + var h = Math.max(w, shape.height); + var r = w / 2; + + // Dist on y with tangent point and circle center + var dy = r * r / (h - r); + var cy = y - h + r + dy; + var angle = Math.asin(dy / r); + // Dist on x with tangent point and circle center + var dx = Math.cos(angle) * r; + + var tanX = Math.sin(angle); + var tanY = Math.cos(angle); + + var cpLen = r * 0.6; + var cpLen2 = r * 0.7; + + path.moveTo(x - dx, cy + dy); + + path.arc( + x, cy, r, + Math.PI - angle, + Math.PI * 2 + angle + ); + path.bezierCurveTo( + x + dx - tanX * cpLen, cy + dy + tanY * cpLen, + x, y - cpLen2, + x, y + ); + path.bezierCurveTo( + x, y - cpLen2, + x - dx + tanX * cpLen, cy + dy + tanY * cpLen, + x - dx, cy + dy + ); + path.closePath(); + } +}); + +/** + * Arrow shape + * @inner + */ +var Arrow = extendShape({ + + type: 'arrow', + + shape: { + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (ctx, shape) { + var height = shape.height; + var width = shape.width; + var x = shape.x; + var y = shape.y; + var dx = width / 3 * 2; + ctx.moveTo(x, y); + ctx.lineTo(x + dx, y + height); + ctx.lineTo(x, y + height / 4 * 3); + ctx.lineTo(x - dx, y + height); + ctx.lineTo(x, y); + ctx.closePath(); + } +}); + +/** + * Map of path contructors + * @type {Object.} + */ +var symbolCtors = { + + line: Line, + + rect: Rect, + + roundRect: Rect, + + square: Rect, + + circle: Circle, + + diamond: Diamond, + + pin: Pin, + + arrow: Arrow, + + triangle: Triangle +}; + +var symbolShapeMakers = { + + line: function (x, y, w, h, shape) { + // FIXME + shape.x1 = x; + shape.y1 = y + h / 2; + shape.x2 = x + w; + shape.y2 = y + h / 2; + }, + + rect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + }, + + roundRect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + shape.r = Math.min(w, h) / 4; + }, + + square: function (x, y, w, h, shape) { + var size = Math.min(w, h); + shape.x = x; + shape.y = y; + shape.width = size; + shape.height = size; + }, + + circle: function (x, y, w, h, shape) { + // Put circle in the center of square + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.r = Math.min(w, h) / 2; + }, + + diamond: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + }, + + pin: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + + arrow: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + + triangle: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + } +}; + +var symbolBuildProxies = {}; +each$1(symbolCtors, function (Ctor, name) { + symbolBuildProxies[name] = new Ctor(); +}); + +var SymbolClz = extendShape({ + + type: 'symbol', + + shape: { + symbolType: '', + x: 0, + y: 0, + width: 0, + height: 0 + }, + + beforeBrush: function () { + var style = this.style; + var shape = this.shape; + // FIXME + if (shape.symbolType === 'pin' && style.textPosition === 'inside') { + style.textPosition = ['50%', '40%']; + style.textAlign = 'center'; + style.textVerticalAlign = 'middle'; + } + }, + + buildPath: function (ctx, shape, inBundle) { + var symbolType = shape.symbolType; + var proxySymbol = symbolBuildProxies[symbolType]; + if (shape.symbolType !== 'none') { + if (!proxySymbol) { + // Default rect + symbolType = 'rect'; + proxySymbol = symbolBuildProxies[symbolType]; + } + symbolShapeMakers[symbolType]( + shape.x, shape.y, shape.width, shape.height, proxySymbol.shape + ); + proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle); + } + } +}); + +// Provide setColor helper method to avoid determine if set the fill or stroke outside +function symbolPathSetColor(color, innerColor) { + if (this.type !== 'image') { + var symbolStyle = this.style; + var symbolShape = this.shape; + if (symbolShape && symbolShape.symbolType === 'line') { + symbolStyle.stroke = color; + } + else if (this.__isEmptyBrush) { + symbolStyle.stroke = color; + symbolStyle.fill = innerColor || '#fff'; + } + else { + // FIXME 判断图形默认是填充还是描边,使用 onlyStroke ? + symbolStyle.fill && (symbolStyle.fill = color); + symbolStyle.stroke && (symbolStyle.stroke = color); + } + this.dirty(false); + } +} + +/** + * Create a symbol element with given symbol configuration: shape, x, y, width, height, color + * @param {string} symbolType + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {string} color + * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h, + * for path and image only. + */ +function createSymbol(symbolType, x, y, w, h, color, keepAspect) { + // TODO Support image object, DynamicImage. + + var isEmpty = symbolType.indexOf('empty') === 0; + if (isEmpty) { + symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6); + } + var symbolPath; + + if (symbolType.indexOf('image://') === 0) { + symbolPath = makeImage( + symbolType.slice(8), + new BoundingRect(x, y, w, h), + keepAspect ? 'center' : 'cover' + ); + } + else if (symbolType.indexOf('path://') === 0) { + symbolPath = makePath( + symbolType.slice(7), + {}, + new BoundingRect(x, y, w, h), + keepAspect ? 'center' : 'cover' + ); + } + else { + symbolPath = new SymbolClz({ + shape: { + symbolType: symbolType, + x: x, + y: y, + width: w, + height: h + } + }); + } + + symbolPath.__isEmptyBrush = isEmpty; + + symbolPath.setColor = symbolPathSetColor; + + symbolPath.setColor(color); + + return symbolPath; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge'; +/** + * Create a muti dimension List structure from seriesModel. + * @param {module:echarts/model/Model} seriesModel + * @return {module:echarts/data/List} list + */ +function createList(seriesModel) { + return createListFromArray(seriesModel.getSource(), seriesModel); +} + +var dataStack$1 = { + isDimensionStacked: isDimensionStacked, + enableDataStack: enableDataStack, + getStackedDimension: getStackedDimension +}; + +/** + * Create scale + * @param {Array.} dataExtent + * @param {Object|module:echarts/Model} option + */ +function createScale(dataExtent, option) { + var axisModel = option; + if (!Model.isInstance(option)) { + axisModel = new Model(option); + mixin(axisModel, axisModelCommonMixin); + } + + var scale = createScaleByModel(axisModel); + scale.setExtent(dataExtent[0], dataExtent[1]); + + niceScaleExtent(scale, axisModel); + return scale; +} + +/** + * Mixin common methods to axis model, + * + * Inlcude methods + * `getFormattedLabels() => Array.` + * `getCategories() => Array.` + * `getMin(origin: boolean) => number` + * `getMax(origin: boolean) => number` + * `getNeedCrossZero() => boolean` + * `setRange(start: number, end: number)` + * `resetRange()` + */ +function mixinAxisModelCommonMethods(Model$$1) { + mixin(Model$$1, axisModelCommonMixin); +} + +var helper = (Object.freeze || Object)({ + createList: createList, + getLayoutRect: getLayoutRect, + dataStack: dataStack$1, + createScale: createScale, + mixinAxisModelCommonMethods: mixinAxisModelCommonMethods, + completeDimensions: completeDimensions, + createDimensions: createDimensions, + createSymbol: createSymbol +}); + +var EPSILON$3 = 1e-8; + +function isAroundEqual$1(a, b) { + return Math.abs(a - b) < EPSILON$3; +} + +function contain$1(points, x, y) { + var w = 0; + var p = points[0]; + + if (!p) { + return false; + } + + for (var i = 1; i < points.length; i++) { + var p2 = points[i]; + w += windingLine(p[0], p[1], p2[0], p2[1], x, y); + p = p2; + } + + // Close polygon + var p0 = points[0]; + if (!isAroundEqual$1(p[0], p0[0]) || !isAroundEqual$1(p[1], p0[1])) { + w += windingLine(p[0], p[1], p0[0], p0[1], x, y); + } + + return w !== 0; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/coord/geo/Region + */ + +/** + * @param {string|Region} name + * @param {Array} geometries + * @param {Array.} cp + */ +function Region(name, geometries, cp) { + + /** + * @type {string} + * @readOnly + */ + this.name = name; + + /** + * @type {Array.} + * @readOnly + */ + this.geometries = geometries; + + if (!cp) { + var rect = this.getBoundingRect(); + cp = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + } + else { + cp = [cp[0], cp[1]]; + } + /** + * @type {Array.} + */ + this.center = cp; +} + +Region.prototype = { + + constructor: Region, + + properties: null, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function () { + var rect = this._rect; + if (rect) { + return rect; + } + + var MAX_NUMBER = Number.MAX_VALUE; + var min$$1 = [MAX_NUMBER, MAX_NUMBER]; + var max$$1 = [-MAX_NUMBER, -MAX_NUMBER]; + var min2 = []; + var max2 = []; + var geometries = this.geometries; + for (var i = 0; i < geometries.length; i++) { + // Only support polygon + if (geometries[i].type !== 'polygon') { + continue; + } + // Doesn't consider hole + var exterior = geometries[i].exterior; + fromPoints(exterior, min2, max2); + min(min$$1, min$$1, min2); + max(max$$1, max$$1, max2); + } + // No data + if (i === 0) { + min$$1[0] = min$$1[1] = max$$1[0] = max$$1[1] = 0; + } + + return (this._rect = new BoundingRect( + min$$1[0], min$$1[1], max$$1[0] - min$$1[0], max$$1[1] - min$$1[1] + )); + }, + + /** + * @param {} coord + * @return {boolean} + */ + contain: function (coord) { + var rect = this.getBoundingRect(); + var geometries = this.geometries; + if (!rect.contain(coord[0], coord[1])) { + return false; + } + loopGeo: for (var i = 0, len$$1 = geometries.length; i < len$$1; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + if (contain$1(exterior, coord[0], coord[1])) { + // Not in the region if point is in the hole. + for (var k = 0; k < (interiors ? interiors.length : 0); k++) { + if (contain$1(interiors[k])) { + continue loopGeo; + } + } + return true; + } + } + return false; + }, + + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + var aspect = rect.width / rect.height; + if (!width) { + width = aspect * height; + } + else if (!height) { + height = width / aspect; + } + var target = new BoundingRect(x, y, width, height); + var transform = rect.calculateTransform(target); + var geometries = this.geometries; + for (var i = 0; i < geometries.length; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + for (var p = 0; p < exterior.length; p++) { + applyTransform(exterior[p], exterior[p], transform); + } + for (var h = 0; h < (interiors ? interiors.length : 0); h++) { + for (var p = 0; p < interiors[h].length; p++) { + applyTransform(interiors[h][p], interiors[h][p], transform); + } + } + } + rect = this._rect; + rect.copy(target); + // Update center + this.center = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + }, + + cloneShallow: function (name) { + name == null && (name = this.name); + var newRegion = new Region(name, this.geometries, this.center); + newRegion._rect = this._rect; + newRegion.transformTo = null; // Simply avoid to be called. + return newRegion; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Parse and decode geo json + * @module echarts/coord/geo/parseGeoJson + */ + +function decode(json) { + if (!json.UTF8Encoding) { + return json; + } + var encodeScale = json.UTF8Scale; + if (encodeScale == null) { + encodeScale = 1024; + } + + var features = json.features; + + for (var f = 0; f < features.length; f++) { + var feature = features[f]; + var geometry = feature.geometry; + var coordinates = geometry.coordinates; + var encodeOffsets = geometry.encodeOffsets; + + for (var c = 0; c < coordinates.length; c++) { + var coordinate = coordinates[c]; + + if (geometry.type === 'Polygon') { + coordinates[c] = decodePolygon( + coordinate, + encodeOffsets[c], + encodeScale + ); + } + else if (geometry.type === 'MultiPolygon') { + for (var c2 = 0; c2 < coordinate.length; c2++) { + var polygon = coordinate[c2]; + coordinate[c2] = decodePolygon( + polygon, + encodeOffsets[c][c2], + encodeScale + ); + } + } + } + } + // Has been decoded + json.UTF8Encoding = false; + return json; +} + +function decodePolygon(coordinate, encodeOffsets, encodeScale) { + var result = []; + var prevX = encodeOffsets[0]; + var prevY = encodeOffsets[1]; + + for (var i = 0; i < coordinate.length; i += 2) { + var x = coordinate.charCodeAt(i) - 64; + var y = coordinate.charCodeAt(i + 1) - 64; + // ZigZag decoding + x = (x >> 1) ^ (-(x & 1)); + y = (y >> 1) ^ (-(y & 1)); + // Delta deocding + x += prevX; + y += prevY; + + prevX = x; + prevY = y; + // Dequantize + result.push([x / encodeScale, y / encodeScale]); + } + + return result; +} + +/** + * @alias module:echarts/coord/geo/parseGeoJson + * @param {Object} geoJson + * @return {module:zrender/container/Group} + */ +var parseGeoJson$1 = function (geoJson) { + + decode(geoJson); + + return map(filter(geoJson.features, function (featureObj) { + // Output of mapshaper may have geometry null + return featureObj.geometry + && featureObj.properties + && featureObj.geometry.coordinates.length > 0; + }), function (featureObj) { + var properties = featureObj.properties; + var geo = featureObj.geometry; + + var coordinates = geo.coordinates; + + var geometries = []; + if (geo.type === 'Polygon') { + geometries.push({ + type: 'polygon', + // According to the GeoJSON specification. + // First must be exterior, and the rest are all interior(holes). + exterior: coordinates[0], + interiors: coordinates.slice(1) + }); + } + if (geo.type === 'MultiPolygon') { + each$1(coordinates, function (item) { + if (item[0]) { + geometries.push({ + type: 'polygon', + exterior: item[0], + interiors: item.slice(1) + }); + } + }); + } + + var region = new Region( + properties.name, + geometries, + properties.cp + ); + region.properties = properties; + return region; + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$6 = makeInner(); + +/** + * @param {module:echats/coord/Axis} axis + * @return {Object} { + * labels: [{ + * formattedLabel: string, + * rawLabel: string, + * tickValue: number + * }, ...], + * labelCategoryInterval: number + * } + */ +function createAxisLabels(axis) { + // Only ordinal scale support tick interval + return axis.type === 'category' + ? makeCategoryLabels(axis) + : makeRealNumberLabels(axis); +} + +/** + * @param {module:echats/coord/Axis} axis + * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea. + * @return {Object} { + * ticks: Array. + * tickCategoryInterval: number + * } + */ +function createAxisTicks(axis, tickModel) { + // Only ordinal scale support tick interval + return axis.type === 'category' + ? makeCategoryTicks(axis, tickModel) + : {ticks: axis.scale.getTicks()}; +} + +function makeCategoryLabels(axis) { + var labelModel = axis.getLabelModel(); + var result = makeCategoryLabelsActually(axis, labelModel); + + return (!labelModel.get('show') || axis.scale.isBlank()) + ? {labels: [], labelCategoryInterval: result.labelCategoryInterval} + : result; +} + +function makeCategoryLabelsActually(axis, labelModel) { + var labelsCache = getListCache(axis, 'labels'); + var optionLabelInterval = getOptionCategoryInterval(labelModel); + var result = listCacheGet(labelsCache, optionLabelInterval); + + if (result) { + return result; + } + + var labels; + var numericLabelInterval; + + if (isFunction$1(optionLabelInterval)) { + labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval); + } + else { + numericLabelInterval = optionLabelInterval === 'auto' + ? makeAutoCategoryInterval(axis) : optionLabelInterval; + labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval); + } + + // Cache to avoid calling interval function repeatly. + return listCacheSet(labelsCache, optionLabelInterval, { + labels: labels, labelCategoryInterval: numericLabelInterval + }); +} + +function makeCategoryTicks(axis, tickModel) { + var ticksCache = getListCache(axis, 'ticks'); + var optionTickInterval = getOptionCategoryInterval(tickModel); + var result = listCacheGet(ticksCache, optionTickInterval); + + if (result) { + return result; + } + + var ticks; + var tickCategoryInterval; + + // Optimize for the case that large category data and no label displayed, + // we should not return all ticks. + if (!tickModel.get('show') || axis.scale.isBlank()) { + ticks = []; + } + + if (isFunction$1(optionTickInterval)) { + ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true); + } + // Always use label interval by default despite label show. Consider this + // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows + // labels. `splitLine` and `axisTick` should be consistent in this case. + else if (optionTickInterval === 'auto') { + var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel()); + tickCategoryInterval = labelsResult.labelCategoryInterval; + ticks = map(labelsResult.labels, function (labelItem) { + return labelItem.tickValue; + }); + } + else { + tickCategoryInterval = optionTickInterval; + ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true); + } + + // Cache to avoid calling interval function repeatly. + return listCacheSet(ticksCache, optionTickInterval, { + ticks: ticks, tickCategoryInterval: tickCategoryInterval + }); +} + +function makeRealNumberLabels(axis) { + var ticks = axis.scale.getTicks(); + var labelFormatter = makeLabelFormatter(axis); + return { + labels: map(ticks, function (tickValue, idx) { + return { + formattedLabel: labelFormatter(tickValue, idx), + rawLabel: axis.scale.getLabel(tickValue), + tickValue: tickValue + }; + }) + }; +} + +// Large category data calculation is performence sensitive, and ticks and label +// probably be fetched by multiple times. So we cache the result. +// axis is created each time during a ec process, so we do not need to clear cache. +function getListCache(axis, prop) { + // Because key can be funciton, and cache size always be small, we use array cache. + return inner$6(axis)[prop] || (inner$6(axis)[prop] = []); +} + +function listCacheGet(cache, key) { + for (var i = 0; i < cache.length; i++) { + if (cache[i].key === key) { + return cache[i].value; + } + } +} + +function listCacheSet(cache, key, value) { + cache.push({key: key, value: value}); + return value; +} + +function makeAutoCategoryInterval(axis) { + var result = inner$6(axis).autoInterval; + return result != null + ? result + : (inner$6(axis).autoInterval = axis.calculateCategoryInterval()); +} + +/** + * Calculate interval for category axis ticks and labels. + * To get precise result, at least one of `getRotate` and `isHorizontal` + * should be implemented in axis. + */ +function calculateCategoryInterval(axis) { + var params = fetchAutoCategoryIntervalCalculationParams(axis); + var labelFormatter = makeLabelFormatter(axis); + var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI; + + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); + // Providing this method is for optimization: + // avoid generating a long array by `getTicks` + // in large category data case. + var tickCount = ordinalScale.count(); + + if (ordinalExtent[1] - ordinalExtent[0] < 1) { + return 0; + } + + var step = 1; + // Simple optimization. Empirical value: tick count should less than 40. + if (tickCount > 40) { + step = Math.max(1, Math.floor(tickCount / 40)); + } + var tickValue = ordinalExtent[0]; + var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); + var unitW = Math.abs(unitSpan * Math.cos(rotation)); + var unitH = Math.abs(unitSpan * Math.sin(rotation)); + + var maxW = 0; + var maxH = 0; + + // Caution: Performance sensitive for large category data. + // Consider dataZoom, we should make appropriate step to avoid O(n) loop. + for (; tickValue <= ordinalExtent[1]; tickValue += step) { + var width = 0; + var height = 0; + + // Not precise, do not consider align and vertical align + // and each distance from axis line yet. + var rect = getBoundingRect( + labelFormatter(tickValue), params.font, 'center', 'top' + ); + // Magic number + width = rect.width * 1.3; + height = rect.height * 1.3; + + // Min size, void long loop. + maxW = Math.max(maxW, width, 7); + maxH = Math.max(maxH, height, 7); + } + + var dw = maxW / unitW; + var dh = maxH / unitH; + // 0/0 is NaN, 1/0 is Infinity. + isNaN(dw) && (dw = Infinity); + isNaN(dh) && (dh = Infinity); + var interval = Math.max(0, Math.floor(Math.min(dw, dh))); + + var cache = inner$6(axis.model); + var lastAutoInterval = cache.lastAutoInterval; + var lastTickCount = cache.lastTickCount; + + // Use cache to keep interval stable while moving zoom window, + // otherwise the calculated interval might jitter when the zoom + // window size is close to the interval-changing size. + if (lastAutoInterval != null + && lastTickCount != null + && Math.abs(lastAutoInterval - interval) <= 1 + && Math.abs(lastTickCount - tickCount) <= 1 + // Always choose the bigger one, otherwise the critical + // point is not the same when zooming in or zooming out. + && lastAutoInterval > interval + ) { + interval = lastAutoInterval; + } + // Only update cache if cache not used, otherwise the + // changing of interval is too insensitive. + else { + cache.lastTickCount = tickCount; + cache.lastAutoInterval = interval; + } + + return interval; +} + +function fetchAutoCategoryIntervalCalculationParams(axis) { + var labelModel = axis.getLabelModel(); + return { + axisRotate: axis.getRotate + ? axis.getRotate() + : (axis.isHorizontal && !axis.isHorizontal()) + ? 90 + : 0, + labelRotate: labelModel.get('rotate') || 0, + font: labelModel.getFont() + }; +} + +function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { + var labelFormatter = makeLabelFormatter(axis); + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); + var labelModel = axis.getLabelModel(); + var result = []; + + // TODO: axisType: ordinalTime, pick the tick from each month/day/year/... + + var step = Math.max((categoryInterval || 0) + 1, 1); + var startTick = ordinalExtent[0]; + var tickCount = ordinalScale.count(); + + // Calculate start tick based on zero if possible to keep label consistent + // while zooming and moving while interval > 0. Otherwise the selection + // of displayable ticks and symbols probably keep changing. + // 3 is empirical value. + if (startTick !== 0 && step > 1 && tickCount / step > 2) { + startTick = Math.round(Math.ceil(startTick / step) * step); + } + + // (1) Only add min max label here but leave overlap checking + // to render stage, which also ensure the returned list + // suitable for splitLine and splitArea rendering. + // (2) Scales except category always contain min max label so + // do not need to perform this process. + var showMinMax = { + min: labelModel.get('showMinLabel'), + max: labelModel.get('showMaxLabel') + }; + + if (showMinMax.min && startTick !== ordinalExtent[0]) { + addItem(ordinalExtent[0]); + } + + // Optimize: avoid generating large array by `ordinalScale.getTicks()`. + var tickValue = startTick; + for (; tickValue <= ordinalExtent[1]; tickValue += step) { + addItem(tickValue); + } + + if (showMinMax.max && tickValue !== ordinalExtent[1]) { + addItem(ordinalExtent[1]); + } + + function addItem(tVal) { + result.push(onlyTick + ? tVal + : { + formattedLabel: labelFormatter(tVal), + rawLabel: ordinalScale.getLabel(tVal), + tickValue: tVal + } + ); + } + + return result; +} + +// When interval is function, the result `false` means ignore the tick. +// It is time consuming for large category data. +function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) { + var ordinalScale = axis.scale; + var labelFormatter = makeLabelFormatter(axis); + var result = []; + + each$1(ordinalScale.getTicks(), function (tickValue) { + var rawLabel = ordinalScale.getLabel(tickValue); + if (categoryInterval(tickValue, rawLabel)) { + result.push(onlyTick + ? tickValue + : { + formattedLabel: labelFormatter(tickValue), + rawLabel: rawLabel, + tickValue: tickValue + } + ); + } + }); + + return result; +} + +// Can be null|'auto'|number|function +function getOptionCategoryInterval(model) { + var interval = model.get('interval'); + return interval == null ? 'auto' : interval; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var NORMALIZED_EXTENT = [0, 1]; + +/** + * Base class of Axis. + * @constructor + */ +var Axis = function (dim, scale, extent) { + + /** + * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'. + * @type {string} + */ + this.dim = dim; + + /** + * Axis scale + * @type {module:echarts/coord/scale/*} + */ + this.scale = scale; + + /** + * @type {Array.} + * @private + */ + this._extent = extent || [0, 0]; + + /** + * @type {boolean} + */ + this.inverse = false; + + /** + * Usually true when axis has a ordinal scale + * @type {boolean} + */ + this.onBand = false; +}; + +Axis.prototype = { + + constructor: Axis, + + /** + * If axis extent contain given coord + * @param {number} coord + * @return {boolean} + */ + contain: function (coord) { + var extent = this._extent; + var min = Math.min(extent[0], extent[1]); + var max = Math.max(extent[0], extent[1]); + return coord >= min && coord <= max; + }, + + /** + * If axis extent contain given data + * @param {number} data + * @return {boolean} + */ + containData: function (data) { + return this.contain(this.dataToCoord(data)); + }, + + /** + * Get coord extent. + * @return {Array.} + */ + getExtent: function () { + return this._extent.slice(); + }, + + /** + * Get precision used for formatting + * @param {Array.} [dataExtent] + * @return {number} + */ + getPixelPrecision: function (dataExtent) { + return getPixelPrecision( + dataExtent || this.scale.getExtent(), + this._extent + ); + }, + + /** + * Set coord extent + * @param {number} start + * @param {number} end + */ + setExtent: function (start, end) { + var extent = this._extent; + extent[0] = start; + extent[1] = end; + }, + + /** + * Convert data to coord. Data is the rank if it has an ordinal scale + * @param {number} data + * @param {boolean} clamp + * @return {number} + */ + dataToCoord: function (data, clamp) { + var extent = this._extent; + var scale = this.scale; + data = scale.normalize(data); + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + return linearMap(data, NORMALIZED_EXTENT, extent, clamp); + }, + + /** + * Convert coord to data. Data is the rank if it has an ordinal scale + * @param {number} coord + * @param {boolean} clamp + * @return {number} + */ + coordToData: function (coord, clamp) { + var extent = this._extent; + var scale = this.scale; + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp); + + return this.scale.scale(t); + }, + + /** + * Convert pixel point to data in axis + * @param {Array.} point + * @param {boolean} clamp + * @return {number} data + */ + pointToData: function (point, clamp) { + // Should be implemented in derived class if necessary. + }, + + /** + * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`, + * `axis.getTicksCoords` considers `onBand`, which is used by + * `boundaryGap:true` of category axis and splitLine and splitArea. + * @param {Object} [opt] + * @param {number} [opt.tickModel=axis.model.getModel('axisTick')] + * @param {boolean} [opt.clamp] If `true`, the first and the last + * tick must be at the axis end points. Otherwise, clip ticks + * that outside the axis extent. + * @return {Array.} [{ + * coord: ..., + * tickValue: ... + * }, ...] + */ + getTicksCoords: function (opt) { + opt = opt || {}; + + var tickModel = opt.tickModel || this.getTickModel(); + + var result = createAxisTicks(this, tickModel); + var ticks = result.ticks; + + var ticksCoords = map(ticks, function (tickValue) { + return { + coord: this.dataToCoord(tickValue), + tickValue: tickValue + }; + }, this); + + var alignWithLabel = tickModel.get('alignWithLabel'); + fixOnBandTicksCoords( + this, ticksCoords, result.tickCategoryInterval, alignWithLabel, opt.clamp + ); + + return ticksCoords; + }, + + /** + * @return {Array.} [{ + * formattedLabel: string, + * rawLabel: axis.scale.getLabel(tickValue) + * tickValue: number + * }, ...] + */ + getViewLabels: function () { + return createAxisLabels(this).labels; + }, + + /** + * @return {module:echarts/coord/model/Model} + */ + getLabelModel: function () { + return this.model.getModel('axisLabel'); + }, + + /** + * Notice here we only get the default tick model. For splitLine + * or splitArea, we should pass the splitLineModel or splitAreaModel + * manually when calling `getTicksCoords`. + * In GL, this method may be overrided to: + * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));` + * @return {module:echarts/coord/model/Model} + */ + getTickModel: function () { + return this.model.getModel('axisTick'); + }, + + /** + * Get width of band + * @return {number} + */ + getBandWidth: function () { + var axisExtent = this._extent; + var dataExtent = this.scale.getExtent(); + + var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0); + // Fix #2728, avoid NaN when only one data. + len === 0 && (len = 1); + + var size = Math.abs(axisExtent[1] - axisExtent[0]); + + return Math.abs(size) / len; + }, + + /** + * @abstract + * @return {boolean} Is horizontal + */ + isHorizontal: null, + + /** + * @abstract + * @return {number} Get axis rotate, by degree. + */ + getRotate: null, + + /** + * Only be called in category axis. + * Can be overrided, consider other axes like in 3D. + * @return {number} Auto interval for cateogry axis tick and label + */ + calculateCategoryInterval: function () { + return calculateCategoryInterval(this); + } + +}; + +function fixExtentWithBands(extent, nTick) { + var size = extent[1] - extent[0]; + var len = nTick; + var margin = size / len / 2; + extent[0] += margin; + extent[1] -= margin; +} + +// If axis has labels [1, 2, 3, 4]. Bands on the axis are +// |---1---|---2---|---3---|---4---|. +// So the displayed ticks and splitLine/splitArea should between +// each data item, otherwise cause misleading (e.g., split tow bars +// of a single data item when there are two bar series). +// Also consider if tickCategoryInterval > 0 and onBand, ticks and +// splitLine/spliteArea should layout appropriately corresponding +// to displayed labels. (So we should not use `getBandWidth` in this +// case). +function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWithLabel, clamp) { + var ticksLen = ticksCoords.length; + + if (!axis.onBand || alignWithLabel || !ticksLen) { + return; + } + + var axisExtent = axis.getExtent(); + var last; + if (ticksLen === 1) { + ticksCoords[0].coord = axisExtent[0]; + last = ticksCoords[1] = {coord: axisExtent[0]}; + } + else { + var shift = (ticksCoords[1].coord - ticksCoords[0].coord); + each$1(ticksCoords, function (ticksItem) { + ticksItem.coord -= shift / 2; + var tickCategoryInterval = tickCategoryInterval || 0; + // Avoid split a single data item when odd interval. + if (tickCategoryInterval % 2 > 0) { + ticksItem.coord -= shift / ((tickCategoryInterval + 1) * 2); + } + }); + last = {coord: ticksCoords[ticksLen - 1].coord + shift}; + ticksCoords.push(last); + } + + var inverse = axisExtent[0] > axisExtent[1]; + + if (littleThan(ticksCoords[0].coord, axisExtent[0])) { + clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift(); + } + if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) { + ticksCoords.unshift({coord: axisExtent[0]}); + } + if (littleThan(axisExtent[1], last.coord)) { + clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop(); + } + if (clamp && littleThan(last.coord, axisExtent[1])) { + ticksCoords.push({coord: axisExtent[1]}); + } + + function littleThan(a, b) { + return inverse ? a > b : a < b; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Do not mount those modules on 'src/echarts' for better tree shaking. + */ + +var parseGeoJson = parseGeoJson$1; + +var ecUtil = {}; +each$1( + [ + 'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter', + 'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction', + 'extend', 'defaults', 'clone', 'merge' + ], + function (name) { + ecUtil[name] = zrUtil[name]; + } +); +var graphic$1 = {}; +each$1( + [ + 'extendShape', 'extendPath', 'makePath', 'makeImage', + 'mergePath', 'resizePath', 'createIcon', + 'setHoverStyle', 'setLabelStyle', 'setTextStyle', 'setText', + 'getFont', 'updateProps', 'initProps', 'getTransform', + 'clipPointsByRect', 'clipRectByRect', + 'Group', + 'Image', + 'Text', + 'Circle', + 'Sector', + 'Ring', + 'Polygon', + 'Polyline', + 'Rect', + 'Line', + 'BezierCurve', + 'Arc', + 'IncrementalDisplayable', + 'CompoundPath', + 'LinearGradient', + 'RadialGradient', + 'BoundingRect' + ], + function (name) { + graphic$1[name] = graphic[name]; + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.line', + + dependencies: ['grid', 'polar'], + + getInitialData: function (option, ecModel) { + if (__DEV__) { + var coordSys = option.coordinateSystem; + if (coordSys !== 'polar' && coordSys !== 'cartesian2d') { + throw new Error('Line not support coordinateSystem besides cartesian and polar'); + } + } + return createListFromArray(this.getSource(), this); + }, + + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + // stack: null + // xAxisIndex: 0, + // yAxisIndex: 0, + + // polarIndex: 0, + + // If clip the overflow value + clipOverflow: true, + // cursor: null, + + label: { + position: 'top' + }, + // itemStyle: { + // }, + + lineStyle: { + width: 2, + type: 'solid' + }, + // areaStyle: { + // origin of areaStyle. Valid values: + // `'auto'/null/undefined`: from axisLine to data + // `'start'`: from min to data + // `'end'`: from data to max + // origin: 'auto' + // }, + // false, 'start', 'end', 'middle' + step: false, + + // Disabled if step is true + smooth: false, + smoothMonotone: null, + symbol: 'emptyCircle', + symbolSize: 4, + symbolRotate: null, + + showSymbol: true, + // `false`: follow the label interval strategy. + // `true`: show all symbols. + // `'auto'`: If possible, show all symbols, otherwise + // follow the label interval strategy. + showAllSymbol: 'auto', + + // Whether to connect break point. + connectNulls: false, + + // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'. + sampling: 'none', + + animationEasing: 'linear', + + // Disable progressive + progressive: 0, + hoverLayerThreshold: Infinity + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/data/List} data + * @param {number} dataIndex + * @return {string} label string. Not null/undefined + */ +function getDefaultLabel(data, dataIndex) { + var labelDims = data.mapDimension('defaultedLabel', true); + var len = labelDims.length; + + // Simple optimization (in lots of cases, label dims length is 1) + if (len === 1) { + return retrieveRawValue(data, dataIndex, labelDims[0]); + } + else if (len) { + var vals = []; + for (var i = 0; i < labelDims.length; i++) { + var val = retrieveRawValue(data, dataIndex, labelDims[i]); + vals.push(val); + } + return vals.join(' '); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/chart/helper/Symbol + */ + +/** + * @constructor + * @alias {module:echarts/chart/helper/Symbol} + * @param {module:echarts/data/List} data + * @param {number} idx + * @extends {module:zrender/graphic/Group} + */ +function SymbolClz$1(data, idx, seriesScope) { + Group.call(this); + this.updateData(data, idx, seriesScope); +} + +var symbolProto = SymbolClz$1.prototype; + +/** + * @public + * @static + * @param {module:echarts/data/List} data + * @param {number} dataIndex + * @return {Array.} [width, height] + */ +var getSymbolSize = SymbolClz$1.getSymbolSize = function (data, idx) { + var symbolSize = data.getItemVisual(idx, 'symbolSize'); + return symbolSize instanceof Array + ? symbolSize.slice() + : [+symbolSize, +symbolSize]; +}; + +function getScale(symbolSize) { + return [symbolSize[0] / 2, symbolSize[1] / 2]; +} + +function driftSymbol(dx, dy) { + this.parent.drift(dx, dy); +} + +symbolProto._createSymbol = function ( + symbolType, + data, + idx, + symbolSize, + keepAspect +) { + // Remove paths created before + this.removeAll(); + + var color = data.getItemVisual(idx, 'color'); + + // var symbolPath = createSymbol( + // symbolType, -0.5, -0.5, 1, 1, color + // ); + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4150. + var symbolPath = createSymbol( + symbolType, -1, -1, 2, 2, color, keepAspect + ); + + symbolPath.attr({ + z2: 100, + culling: true, + scale: getScale(symbolSize) + }); + // Rewrite drift method + symbolPath.drift = driftSymbol; + + this._symbolType = symbolType; + + this.add(symbolPath); +}; + +/** + * Stop animation + * @param {boolean} toLastFrame + */ +symbolProto.stopSymbolAnimation = function (toLastFrame) { + this.childAt(0).stopAnimation(toLastFrame); +}; + +/** + * FIXME: + * Caution: This method breaks the encapsulation of this module, + * but it indeed brings convenience. So do not use the method + * unless you detailedly know all the implements of `Symbol`, + * especially animation. + * + * Get symbol path element. + */ +symbolProto.getSymbolPath = function () { + return this.childAt(0); +}; + +/** + * Get scale(aka, current symbol size). + * Including the change caused by animation + */ +symbolProto.getScale = function () { + return this.childAt(0).scale; +}; + +/** + * Highlight symbol + */ +symbolProto.highlight = function () { + this.childAt(0).trigger('emphasis'); +}; + +/** + * Downplay symbol + */ +symbolProto.downplay = function () { + this.childAt(0).trigger('normal'); +}; + +/** + * @param {number} zlevel + * @param {number} z + */ +symbolProto.setZ = function (zlevel, z) { + var symbolPath = this.childAt(0); + symbolPath.zlevel = zlevel; + symbolPath.z = z; +}; + +symbolProto.setDraggable = function (draggable) { + var symbolPath = this.childAt(0); + symbolPath.draggable = draggable; + symbolPath.cursor = draggable ? 'move' : 'pointer'; +}; + +/** + * Update symbol properties + * @param {module:echarts/data/List} data + * @param {number} idx + * @param {Object} [seriesScope] + * @param {Object} [seriesScope.itemStyle] + * @param {Object} [seriesScope.hoverItemStyle] + * @param {Object} [seriesScope.symbolRotate] + * @param {Object} [seriesScope.symbolOffset] + * @param {module:echarts/model/Model} [seriesScope.labelModel] + * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel] + * @param {boolean} [seriesScope.hoverAnimation] + * @param {Object} [seriesScope.cursorStyle] + * @param {module:echarts/model/Model} [seriesScope.itemModel] + * @param {string} [seriesScope.symbolInnerColor] + * @param {Object} [seriesScope.fadeIn=false] + */ +symbolProto.updateData = function (data, idx, seriesScope) { + this.silent = false; + + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + var seriesModel = data.hostModel; + var symbolSize = getSymbolSize(data, idx); + var isInit = symbolType !== this._symbolType; + + if (isInit) { + var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect'); + this._createSymbol(symbolType, data, idx, symbolSize, keepAspect); + } + else { + var symbolPath = this.childAt(0); + symbolPath.silent = false; + updateProps(symbolPath, { + scale: getScale(symbolSize) + }, seriesModel, idx); + } + + this._updateCommon(data, idx, symbolSize, seriesScope); + + if (isInit) { + var symbolPath = this.childAt(0); + var fadeIn = seriesScope && seriesScope.fadeIn; + + var target = {scale: symbolPath.scale.slice()}; + fadeIn && (target.style = {opacity: symbolPath.style.opacity}); + + symbolPath.scale = [0, 0]; + fadeIn && (symbolPath.style.opacity = 0); + + initProps(symbolPath, target, seriesModel, idx); + } + + this._seriesModel = seriesModel; +}; + +// Update common properties +var normalStyleAccessPath = ['itemStyle']; +var emphasisStyleAccessPath = ['emphasis', 'itemStyle']; +var normalLabelAccessPath = ['label']; +var emphasisLabelAccessPath = ['emphasis', 'label']; + +/** + * @param {module:echarts/data/List} data + * @param {number} idx + * @param {Array.} symbolSize + * @param {Object} [seriesScope] + */ +symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) { + var symbolPath = this.childAt(0); + var seriesModel = data.hostModel; + var color = data.getItemVisual(idx, 'color'); + + // Reset style + if (symbolPath.type !== 'image') { + symbolPath.useStyle({ + strokeNoScale: true + }); + } + + var itemStyle = seriesScope && seriesScope.itemStyle; + var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle; + var symbolRotate = seriesScope && seriesScope.symbolRotate; + var symbolOffset = seriesScope && seriesScope.symbolOffset; + var labelModel = seriesScope && seriesScope.labelModel; + var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel; + var hoverAnimation = seriesScope && seriesScope.hoverAnimation; + var cursorStyle = seriesScope && seriesScope.cursorStyle; + + if (!seriesScope || data.hasItemOption) { + var itemModel = (seriesScope && seriesScope.itemModel) + ? seriesScope.itemModel : data.getItemModel(idx); + + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']); + hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle(); + + symbolRotate = itemModel.getShallow('symbolRotate'); + symbolOffset = itemModel.getShallow('symbolOffset'); + + labelModel = itemModel.getModel(normalLabelAccessPath); + hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath); + hoverAnimation = itemModel.getShallow('hoverAnimation'); + cursorStyle = itemModel.getShallow('cursor'); + } + else { + hoverItemStyle = extend({}, hoverItemStyle); + } + + var elStyle = symbolPath.style; + + symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0); + + if (symbolOffset) { + symbolPath.attr('position', [ + parsePercent$1(symbolOffset[0], symbolSize[0]), + parsePercent$1(symbolOffset[1], symbolSize[1]) + ]); + } + + cursorStyle && symbolPath.attr('cursor', cursorStyle); + + // PENDING setColor before setStyle!!! + symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor); + + symbolPath.setStyle(itemStyle); + + var opacity = data.getItemVisual(idx, 'opacity'); + if (opacity != null) { + elStyle.opacity = opacity; + } + + var liftZ = data.getItemVisual(idx, 'liftZ'); + var z2Origin = symbolPath.__z2Origin; + if (liftZ != null) { + if (z2Origin == null) { + symbolPath.__z2Origin = symbolPath.z2; + symbolPath.z2 += liftZ; + } + } + else if (z2Origin != null) { + symbolPath.z2 = z2Origin; + symbolPath.__z2Origin = null; + } + + var useNameLabel = seriesScope && seriesScope.useNameLabel; + + setLabelStyle( + elStyle, hoverItemStyle, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultText: getLabelDefaultText, + isRectText: true, + autoColor: color + } + ); + + // Do not execute util needed. + function getLabelDefaultText(idx, opt) { + return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx); + } + + symbolPath.off('mouseover') + .off('mouseout') + .off('emphasis') + .off('normal'); + + symbolPath.hoverStyle = hoverItemStyle; + + // FIXME + // Do not use symbol.trigger('emphasis'), but use symbol.highlight() instead. + setHoverStyle(symbolPath); + + symbolPath.__symbolOriginalScale = getScale(symbolSize); + + if (hoverAnimation && seriesModel.isAnimationEnabled()) { + // Note: consider `off`, should use static function here. + symbolPath.on('mouseover', onMouseOver) + .on('mouseout', onMouseOut) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + } +}; + +function onMouseOver() { + // see comment in `graphic.isInEmphasis` + !isInEmphasis(this) && onEmphasis.call(this); +} + +function onMouseOut() { + // see comment in `graphic.isInEmphasis` + !isInEmphasis(this) && onNormal.call(this); +} + +function onEmphasis() { + // Do not support this hover animation util some scenario required. + // Animation can only be supported in hover layer when using `el.incremetal`. + if (this.incremental || this.useHoverLayer) { + return; + } + var scale = this.__symbolOriginalScale; + var ratio = scale[1] / scale[0]; + this.animateTo({ + scale: [ + Math.max(scale[0] * 1.1, scale[0] + 3), + Math.max(scale[1] * 1.1, scale[1] + 3 * ratio) + ] + }, 400, 'elasticOut'); +} + +function onNormal() { + if (this.incremental || this.useHoverLayer) { + return; + } + this.animateTo({ + scale: this.__symbolOriginalScale + }, 400, 'elasticOut'); +} + + +/** + * @param {Function} cb + * @param {Object} [opt] + * @param {Object} [opt.keepLabel=true] + */ +symbolProto.fadeOut = function (cb, opt) { + var symbolPath = this.childAt(0); + // Avoid mistaken hover when fading out + this.silent = symbolPath.silent = true; + // Not show text when animating + !(opt && opt.keepLabel) && (symbolPath.style.text = null); + + updateProps( + symbolPath, + { + style: {opacity: 0}, + scale: [0, 0] + }, + this._seriesModel, + this.dataIndex, + cb + ); +}; + +inherits(SymbolClz$1, Group); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/chart/helper/SymbolDraw + */ + +/** + * @constructor + * @alias module:echarts/chart/helper/SymbolDraw + * @param {module:zrender/graphic/Group} [symbolCtor] + */ +function SymbolDraw(symbolCtor) { + this.group = new Group(); + + this._symbolCtor = symbolCtor || SymbolClz$1; +} + +var symbolDrawProto = SymbolDraw.prototype; + +function symbolNeedsDraw(data, point, idx, opt) { + return point && !isNaN(point[0]) && !isNaN(point[1]) + && !(opt.isIgnore && opt.isIgnore(idx)) + // We do not set clipShape on group, because it will cut part of + // the symbol element shape. We use the same clip shape here as + // the line clip. + && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) + && data.getItemVisual(idx, 'symbol') !== 'none'; +} + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + * @param {Object} [opt] Or isIgnore + * @param {Function} [opt.isIgnore] + * @param {Object} [opt.clipShape] + */ +symbolDrawProto.updateData = function (data, opt) { + opt = normalizeUpdateOpt(opt); + + var group = this.group; + var seriesModel = data.hostModel; + var oldData = this._data; + var SymbolCtor = this._symbolCtor; + + var seriesScope = makeSeriesScope(data); + + // There is no oldLineData only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + if (!oldData) { + group.removeAll(); + } + + data.diff(oldData) + .add(function (newIdx) { + var point = data.getItemLayout(newIdx); + if (symbolNeedsDraw(data, point, newIdx, opt)) { + var symbolEl = new SymbolCtor(data, newIdx, seriesScope); + symbolEl.attr('position', point); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + var point = data.getItemLayout(newIdx); + if (!symbolNeedsDraw(data, point, newIdx, opt)) { + group.remove(symbolEl); + return; + } + if (!symbolEl) { + symbolEl = new SymbolCtor(data, newIdx); + symbolEl.attr('position', point); + } + else { + symbolEl.updateData(data, newIdx, seriesScope); + updateProps(symbolEl, { + position: point + }, seriesModel); + } + + // Add back + group.add(symbolEl); + + data.setItemGraphicEl(newIdx, symbolEl); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && el.fadeOut(function () { + group.remove(el); + }); + }) + .execute(); + + this._data = data; +}; + +symbolDrawProto.isPersistent = function () { + return true; +}; + +symbolDrawProto.updateLayout = function () { + var data = this._data; + if (data) { + // Not use animation + data.eachItemGraphicEl(function (el, idx) { + var point = data.getItemLayout(idx); + el.attr('position', point); + }); + } +}; + +symbolDrawProto.incrementalPrepareUpdate = function (data) { + this._seriesScope = makeSeriesScope(data); + this._data = null; + this.group.removeAll(); +}; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + * @param {Object} [opt] Or isIgnore + * @param {Function} [opt.isIgnore] + * @param {Object} [opt.clipShape] + */ +symbolDrawProto.incrementalUpdate = function (taskParams, data, opt) { + opt = normalizeUpdateOpt(opt); + + function updateIncrementalAndHover(el) { + if (!el.isGroup) { + el.incremental = el.useHoverLayer = true; + } + } + for (var idx = taskParams.start; idx < taskParams.end; idx++) { + var point = data.getItemLayout(idx); + if (symbolNeedsDraw(data, point, idx, opt)) { + var el = new this._symbolCtor(data, idx, this._seriesScope); + el.traverse(updateIncrementalAndHover); + el.attr('position', point); + this.group.add(el); + data.setItemGraphicEl(idx, el); + } + } +}; + +function normalizeUpdateOpt(opt) { + if (opt != null && !isObject$1(opt)) { + opt = {isIgnore: opt}; + } + return opt || {}; +} + +symbolDrawProto.remove = function (enableAnimation) { + var group = this.group; + var data = this._data; + // Incremental model do not have this._data. + if (data && enableAnimation) { + data.eachItemGraphicEl(function (el) { + el.fadeOut(function () { + group.remove(el); + }); + }); + } + else { + group.removeAll(); + } +}; + +function makeSeriesScope(data) { + var seriesModel = data.hostModel; + return { + itemStyle: seriesModel.getModel('itemStyle').getItemStyle(['color']), + hoverItemStyle: seriesModel.getModel('emphasis.itemStyle').getItemStyle(), + symbolRotate: seriesModel.get('symbolRotate'), + symbolOffset: seriesModel.get('symbolOffset'), + hoverAnimation: seriesModel.get('hoverAnimation'), + labelModel: seriesModel.getModel('label'), + hoverLabelModel: seriesModel.getModel('emphasis.label'), + cursorStyle: seriesModel.get('cursor') + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {Object} coordSys + * @param {module:echarts/data/List} data + * @param {string} valueOrigin lineSeries.option.areaStyle.origin + */ +function prepareDataCoordInfo(coordSys, data, valueOrigin) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var valueStart = getValueStart(valueAxis, valueOrigin); + + var baseAxisDim = baseAxis.dim; + var valueAxisDim = valueAxis.dim; + var valueDim = data.mapDimension(valueAxisDim); + var baseDim = data.mapDimension(baseAxisDim); + var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0; + + var dims = map(coordSys.dimensions, function (coordDim) { + return data.mapDimension(coordDim); + }); + + var stacked; + var stackResultDim = data.getCalculationInfo('stackResultDimension'); + if (stacked |= isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line + dims[0] = stackResultDim; + } + if (stacked |= isDimensionStacked(data, dims[1] /*, dims[0]*/)) { // jshint ignore:line + dims[1] = stackResultDim; + } + + return { + dataDimsForPoint: dims, + valueStart: valueStart, + valueAxisDim: valueAxisDim, + baseAxisDim: baseAxisDim, + stacked: !!stacked, + valueDim: valueDim, + baseDim: baseDim, + baseDataOffset: baseDataOffset, + stackedOverDimension: data.getCalculationInfo('stackedOverDimension') + }; +} + +function getValueStart(valueAxis, valueOrigin) { + var valueStart = 0; + var extent = valueAxis.scale.getExtent(); + + if (valueOrigin === 'start') { + valueStart = extent[0]; + } + else if (valueOrigin === 'end') { + valueStart = extent[1]; + } + // auto + else { + // Both positive + if (extent[0] > 0) { + valueStart = extent[0]; + } + // Both negative + else if (extent[1] < 0) { + valueStart = extent[1]; + } + // If is one positive, and one negative, onZero shall be true + } + + return valueStart; +} + +function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) { + var value = NaN; + if (dataCoordInfo.stacked) { + value = data.get(data.getCalculationInfo('stackedOverDimension'), idx); + } + if (isNaN(value)) { + value = dataCoordInfo.valueStart; + } + + var baseDataOffset = dataCoordInfo.baseDataOffset; + var stackedData = []; + stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx); + stackedData[1 - baseDataOffset] = value; + + return coordSys.dataToPoint(stackedData); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// var arrayDiff = require('zrender/src/core/arrayDiff'); +// 'zrender/src/core/arrayDiff' has been used before, but it did +// not do well in performance when roam with fixed dataZoom window. + +// function convertToIntId(newIdList, oldIdList) { +// // Generate int id instead of string id. +// // Compare string maybe slow in score function of arrDiff + +// // Assume id in idList are all unique +// var idIndicesMap = {}; +// var idx = 0; +// for (var i = 0; i < newIdList.length; i++) { +// idIndicesMap[newIdList[i]] = idx; +// newIdList[i] = idx++; +// } +// for (var i = 0; i < oldIdList.length; i++) { +// var oldId = oldIdList[i]; +// // Same with newIdList +// if (idIndicesMap[oldId]) { +// oldIdList[i] = idIndicesMap[oldId]; +// } +// else { +// oldIdList[i] = idx++; +// } +// } +// } + +function diffData(oldData, newData) { + var diffResult = []; + + newData.diff(oldData) + .add(function (idx) { + diffResult.push({cmd: '+', idx: idx}); + }) + .update(function (newIdx, oldIdx) { + diffResult.push({cmd: '=', idx: oldIdx, idx1: newIdx}); + }) + .remove(function (idx) { + diffResult.push({cmd: '-', idx: idx}); + }) + .execute(); + + return diffResult; +} + +var lineAnimationDiff = function ( + oldData, newData, + oldStackedOnPoints, newStackedOnPoints, + oldCoordSys, newCoordSys, + oldValueOrigin, newValueOrigin +) { + var diff = diffData(oldData, newData); + + // var newIdList = newData.mapArray(newData.getId); + // var oldIdList = oldData.mapArray(oldData.getId); + + // convertToIntId(newIdList, oldIdList); + + // // FIXME One data ? + // diff = arrayDiff(oldIdList, newIdList); + + var currPoints = []; + var nextPoints = []; + // Points for stacking base line + var currStackedPoints = []; + var nextStackedPoints = []; + + var status = []; + var sortedIndices = []; + var rawIndices = []; + + var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin); + var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin); + + for (var i = 0; i < diff.length; i++) { + var diffItem = diff[i]; + var pointAdded = true; + + // FIXME, animation is not so perfect when dataZoom window moves fast + // Which is in case remvoing or add more than one data in the tail or head + switch (diffItem.cmd) { + case '=': + var currentPt = oldData.getItemLayout(diffItem.idx); + var nextPt = newData.getItemLayout(diffItem.idx1); + // If previous data is NaN, use next point directly + if (isNaN(currentPt[0]) || isNaN(currentPt[1])) { + currentPt = nextPt.slice(); + } + currPoints.push(currentPt); + nextPoints.push(nextPt); + + currStackedPoints.push(oldStackedOnPoints[diffItem.idx]); + nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]); + + rawIndices.push(newData.getRawIndex(diffItem.idx1)); + break; + case '+': + var idx = diffItem.idx; + currPoints.push( + oldCoordSys.dataToPoint([ + newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx), + newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx) + ]) + ); + + nextPoints.push(newData.getItemLayout(idx).slice()); + + currStackedPoints.push( + getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx) + ); + nextStackedPoints.push(newStackedOnPoints[idx]); + + rawIndices.push(newData.getRawIndex(idx)); + break; + case '-': + var idx = diffItem.idx; + var rawIndex = oldData.getRawIndex(idx); + // Data is replaced. In the case of dynamic data queue + // FIXME FIXME FIXME + if (rawIndex !== idx) { + currPoints.push(oldData.getItemLayout(idx)); + nextPoints.push(newCoordSys.dataToPoint([ + oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx), + oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx) + ])); + + currStackedPoints.push(oldStackedOnPoints[idx]); + nextStackedPoints.push( + getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx) + ); + + rawIndices.push(rawIndex); + } + else { + pointAdded = false; + } + } + + // Original indices + if (pointAdded) { + status.push(diffItem); + sortedIndices.push(sortedIndices.length); + } + } + + // Diff result may be crossed if all items are changed + // Sort by data index + sortedIndices.sort(function (a, b) { + return rawIndices[a] - rawIndices[b]; + }); + + var sortedCurrPoints = []; + var sortedNextPoints = []; + + var sortedCurrStackedPoints = []; + var sortedNextStackedPoints = []; + + var sortedStatus = []; + for (var i = 0; i < sortedIndices.length; i++) { + var idx = sortedIndices[i]; + sortedCurrPoints[i] = currPoints[idx]; + sortedNextPoints[i] = nextPoints[idx]; + + sortedCurrStackedPoints[i] = currStackedPoints[idx]; + sortedNextStackedPoints[i] = nextStackedPoints[idx]; + + sortedStatus[i] = status[idx]; + } + + return { + current: sortedCurrPoints, + next: sortedNextPoints, + + stackedOnCurrent: sortedCurrStackedPoints, + stackedOnNext: sortedNextStackedPoints, + + status: sortedStatus + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Poly path support NaN point + +var vec2Min = min; +var vec2Max = max; + +var scaleAndAdd$1 = scaleAndAdd; +var v2Copy = copy; + +// Temporary variable +var v = []; +var cp0 = []; +var cp1 = []; + +function isPointNull(p) { + return isNaN(p[0]) || isNaN(p[1]); +} + +function drawSegment( + ctx, points, start, segLen, allLen, + dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls +) { + // if (smoothMonotone == null) { + // if (isMono(points, 'x')) { + // return drawMono(ctx, points, start, segLen, allLen, + // dir, smoothMin, smoothMax, smooth, 'x', connectNulls); + // } + // else if (isMono(points, 'y')) { + // return drawMono(ctx, points, start, segLen, allLen, + // dir, smoothMin, smoothMax, smooth, 'y', connectNulls); + // } + // else { + // return drawNonMono.apply(this, arguments); + // } + // } + // else if (smoothMonotone !== 'none' && isMono(points, smoothMonotone)) { + // return drawMono.apply(this, arguments); + // } + // else { + // return drawNonMono.apply(this, arguments); + // } + if (smoothMonotone === 'none' || !smoothMonotone) { + return drawNonMono.apply(this, arguments); + } + else { + return drawMono.apply(this, arguments); + } +} + +/** + * Check if points is in monotone. + * + * @param {number[][]} points Array of points which is in [x, y] form + * @param {string} smoothMonotone 'x', 'y', or 'none', stating for which + * dimension that is checking. + * If is 'none', `drawNonMono` should be + * called. + * If is undefined, either being monotone + * in 'x' or 'y' will call `drawMono`. + */ +// function isMono(points, smoothMonotone) { +// if (points.length <= 1) { +// return true; +// } + +// var dim = smoothMonotone === 'x' ? 0 : 1; +// var last = points[0][dim]; +// var lastDiff = 0; +// for (var i = 1; i < points.length; ++i) { +// var diff = points[i][dim] - last; +// if (!isNaN(diff) && !isNaN(lastDiff) +// && diff !== 0 && lastDiff !== 0 +// && ((diff >= 0) !== (lastDiff >= 0)) +// ) { +// return false; +// } +// if (!isNaN(diff) && diff !== 0) { +// lastDiff = diff; +// last = points[i][dim]; +// } +// } +// return true; +// } + +/** + * Draw smoothed line in monotone, in which only vertical or horizontal bezier + * control points will be used. This should be used when points are monotone + * either in x or y dimension. + */ +function drawMono( + ctx, points, start, segLen, allLen, + dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls +) { + var prevIdx = 0; + var idx = start; + for (var k = 0; k < segLen; k++) { + var p = points[idx]; + if (idx >= allLen || idx < 0) { + break; + } + if (isPointNull(p)) { + if (connectNulls) { + idx += dir; + continue; + } + break; + } + + if (idx === start) { + ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]); + } + else { + if (smooth > 0) { + var prevP = points[prevIdx]; + var dim = smoothMonotone === 'y' ? 1 : 0; + + // Length of control point to p, either in x or y, but not both + var ctrlLen = (p[dim] - prevP[dim]) * smooth; + + v2Copy(cp0, prevP); + cp0[dim] = prevP[dim] + ctrlLen; + + v2Copy(cp1, p); + cp1[dim] = p[dim] - ctrlLen; + + ctx.bezierCurveTo( + cp0[0], cp0[1], + cp1[0], cp1[1], + p[0], p[1] + ); + } + else { + ctx.lineTo(p[0], p[1]); + } + } + + prevIdx = idx; + idx += dir; + } + + return k; +} + +/** + * Draw smoothed line in non-monotone, in may cause undesired curve in extreme + * situations. This should be used when points are non-monotone neither in x or + * y dimension. + */ +function drawNonMono( + ctx, points, start, segLen, allLen, + dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls +) { + var prevIdx = 0; + var idx = start; + for (var k = 0; k < segLen; k++) { + var p = points[idx]; + if (idx >= allLen || idx < 0) { + break; + } + if (isPointNull(p)) { + if (connectNulls) { + idx += dir; + continue; + } + break; + } + + if (idx === start) { + ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]); + v2Copy(cp0, p); + } + else { + if (smooth > 0) { + var nextIdx = idx + dir; + var nextP = points[nextIdx]; + if (connectNulls) { + // Find next point not null + while (nextP && isPointNull(points[nextIdx])) { + nextIdx += dir; + nextP = points[nextIdx]; + } + } + + var ratioNextSeg = 0.5; + var prevP = points[prevIdx]; + var nextP = points[nextIdx]; + // Last point + if (!nextP || isPointNull(nextP)) { + v2Copy(cp1, p); + } + else { + // If next data is null in not connect case + if (isPointNull(nextP) && !connectNulls) { + nextP = p; + } + + sub(v, nextP, prevP); + + var lenPrevSeg; + var lenNextSeg; + if (smoothMonotone === 'x' || smoothMonotone === 'y') { + var dim = smoothMonotone === 'x' ? 0 : 1; + lenPrevSeg = Math.abs(p[dim] - prevP[dim]); + lenNextSeg = Math.abs(p[dim] - nextP[dim]); + } + else { + lenPrevSeg = dist(p, prevP); + lenNextSeg = dist(p, nextP); + } + + // Use ratio of seg length + ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg); + + scaleAndAdd$1(cp1, p, v, -smooth * (1 - ratioNextSeg)); + } + // Smooth constraint + vec2Min(cp0, cp0, smoothMax); + vec2Max(cp0, cp0, smoothMin); + vec2Min(cp1, cp1, smoothMax); + vec2Max(cp1, cp1, smoothMin); + + ctx.bezierCurveTo( + cp0[0], cp0[1], + cp1[0], cp1[1], + p[0], p[1] + ); + // cp0 of next segment + scaleAndAdd$1(cp0, p, v, smooth * ratioNextSeg); + } + else { + ctx.lineTo(p[0], p[1]); + } + } + + prevIdx = idx; + idx += dir; + } + + return k; +} + +function getBoundingBox(points, smoothConstraint) { + var ptMin = [Infinity, Infinity]; + var ptMax = [-Infinity, -Infinity]; + if (smoothConstraint) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + if (pt[0] < ptMin[0]) { + ptMin[0] = pt[0]; + } + if (pt[1] < ptMin[1]) { + ptMin[1] = pt[1]; + } + if (pt[0] > ptMax[0]) { + ptMax[0] = pt[0]; + } + if (pt[1] > ptMax[1]) { + ptMax[1] = pt[1]; + } + } + } + return { + min: smoothConstraint ? ptMin : ptMax, + max: smoothConstraint ? ptMax : ptMin + }; +} + +var Polyline$1 = Path.extend({ + + type: 'ec-polyline', + + shape: { + points: [], + + smooth: 0, + + smoothConstraint: true, + + smoothMonotone: null, + + connectNulls: false + }, + + style: { + fill: null, + + stroke: '#000' + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + var points = shape.points; + + var i = 0; + var len$$1 = points.length; + + var result = getBoundingBox(points, shape.smoothConstraint); + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len$$1 > 0; len$$1--) { + if (!isPointNull(points[len$$1 - 1])) { + break; + } + } + for (; i < len$$1; i++) { + if (!isPointNull(points[i])) { + break; + } + } + } + while (i < len$$1) { + i += drawSegment( + ctx, points, i, len$$1, len$$1, + 1, result.min, result.max, shape.smooth, + shape.smoothMonotone, shape.connectNulls + ) + 1; + } + } +}); + +var Polygon$1 = Path.extend({ + + type: 'ec-polygon', + + shape: { + points: [], + + // Offset between stacked base points and points + stackedOnPoints: [], + + smooth: 0, + + stackedOnSmooth: 0, + + smoothConstraint: true, + + smoothMonotone: null, + + connectNulls: false + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + var points = shape.points; + var stackedOnPoints = shape.stackedOnPoints; + + var i = 0; + var len$$1 = points.length; + var smoothMonotone = shape.smoothMonotone; + var bbox = getBoundingBox(points, shape.smoothConstraint); + var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint); + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len$$1 > 0; len$$1--) { + if (!isPointNull(points[len$$1 - 1])) { + break; + } + } + for (; i < len$$1; i++) { + if (!isPointNull(points[i])) { + break; + } + } + } + while (i < len$$1) { + var k = drawSegment( + ctx, points, i, len$$1, len$$1, + 1, bbox.min, bbox.max, shape.smooth, + smoothMonotone, shape.connectNulls + ); + drawSegment( + ctx, stackedOnPoints, i + k - 1, k, len$$1, + -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth, + smoothMonotone, shape.connectNulls + ); + i += k + 1; + + ctx.closePath(); + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME step not support polar + +function isPointsSame(points1, points2) { + if (points1.length !== points2.length) { + return; + } + for (var i = 0; i < points1.length; i++) { + var p1 = points1[i]; + var p2 = points2[i]; + if (p1[0] !== p2[0] || p1[1] !== p2[1]) { + return; + } + } + return true; +} + +function getSmooth(smooth) { + return typeof (smooth) === 'number' ? smooth : (smooth ? 0.5 : 0); +} + +function getAxisExtentWithGap(axis) { + var extent = axis.getGlobalExtent(); + if (axis.onBand) { + // Remove extra 1px to avoid line miter in clipped edge + var halfBandWidth = axis.getBandWidth() / 2 - 1; + var dir = extent[1] > extent[0] ? 1 : -1; + extent[0] += dir * halfBandWidth; + extent[1] -= dir * halfBandWidth; + } + return extent; +} + +/** + * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys + * @param {module:echarts/data/List} data + * @param {Object} dataCoordInfo + * @param {Array.>} points + */ +function getStackedOnPoints(coordSys, data, dataCoordInfo) { + if (!dataCoordInfo.valueDim) { + return []; + } + + var points = []; + for (var idx = 0, len = data.count(); idx < len; idx++) { + points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx)); + } + + return points; +} + +function createGridClipShape(cartesian, hasAnimation, forSymbol, seriesModel) { + var xExtent = getAxisExtentWithGap(cartesian.getAxis('x')); + var yExtent = getAxisExtentWithGap(cartesian.getAxis('y')); + var isHorizontal = cartesian.getBaseAxis().isHorizontal(); + + var x = Math.min(xExtent[0], xExtent[1]); + var y = Math.min(yExtent[0], yExtent[1]); + var width = Math.max(xExtent[0], xExtent[1]) - x; + var height = Math.max(yExtent[0], yExtent[1]) - y; + + // Avoid float number rounding error for symbol on the edge of axis extent. + // See #7913 and `test/dataZoom-clip.html`. + if (forSymbol) { + x -= 0.5; + width += 0.5; + y -= 0.5; + height += 0.5; + } + else { + var lineWidth = seriesModel.get('lineStyle.width') || 2; + // Expand clip shape to avoid clipping when line value exceeds axis + var expandSize = seriesModel.get('clipOverflow') ? lineWidth / 2 : Math.max(width, height); + if (isHorizontal) { + y -= expandSize; + height += expandSize * 2; + } + else { + x -= expandSize; + width += expandSize * 2; + } + } + + var clipPath = new Rect({ + shape: { + x: x, + y: y, + width: width, + height: height + } + }); + + if (hasAnimation) { + clipPath.shape[isHorizontal ? 'width' : 'height'] = 0; + initProps(clipPath, { + shape: { + width: width, + height: height + } + }, seriesModel); + } + + return clipPath; +} + +function createPolarClipShape(polar, hasAnimation, forSymbol, seriesModel) { + var angleAxis = polar.getAngleAxis(); + var radiusAxis = polar.getRadiusAxis(); + + var radiusExtent = radiusAxis.getExtent().slice(); + radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse(); + var angleExtent = angleAxis.getExtent(); + + var RADIAN = Math.PI / 180; + + // Avoid float number rounding error for symbol on the edge of axis extent. + if (forSymbol) { + radiusExtent[0] -= 0.5; + radiusExtent[1] += 0.5; + } + + var clipPath = new Sector({ + shape: { + cx: round$1(polar.cx, 1), + cy: round$1(polar.cy, 1), + r0: round$1(radiusExtent[0], 1), + r: round$1(radiusExtent[1], 1), + startAngle: -angleExtent[0] * RADIAN, + endAngle: -angleExtent[1] * RADIAN, + clockwise: angleAxis.inverse + } + }); + + if (hasAnimation) { + clipPath.shape.endAngle = -angleExtent[0] * RADIAN; + initProps(clipPath, { + shape: { + endAngle: -angleExtent[1] * RADIAN + } + }, seriesModel); + } + + return clipPath; +} + +function createClipShape(coordSys, hasAnimation, forSymbol, seriesModel) { + return coordSys.type === 'polar' + ? createPolarClipShape(coordSys, hasAnimation, forSymbol, seriesModel) + : createGridClipShape(coordSys, hasAnimation, forSymbol, seriesModel); +} + +function turnPointsIntoStep(points, coordSys, stepTurnAt) { + var baseAxis = coordSys.getBaseAxis(); + var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1; + + var stepPoints = []; + for (var i = 0; i < points.length - 1; i++) { + var nextPt = points[i + 1]; + var pt = points[i]; + stepPoints.push(pt); + + var stepPt = []; + switch (stepTurnAt) { + case 'end': + stepPt[baseIndex] = nextPt[baseIndex]; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + // default is start + stepPoints.push(stepPt); + break; + case 'middle': + // default is start + var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2; + var stepPt2 = []; + stepPt[baseIndex] = stepPt2[baseIndex] = middle; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + stepPt2[1 - baseIndex] = nextPt[1 - baseIndex]; + stepPoints.push(stepPt); + stepPoints.push(stepPt2); + break; + default: + stepPt[baseIndex] = pt[baseIndex]; + stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; + // default is start + stepPoints.push(stepPt); + } + } + // Last points + points[i] && stepPoints.push(points[i]); + return stepPoints; +} + +function getVisualGradient(data, coordSys) { + var visualMetaList = data.getVisual('visualMeta'); + if (!visualMetaList || !visualMetaList.length || !data.count()) { + // When data.count() is 0, gradient range can not be calculated. + return; + } + + if (coordSys.type !== 'cartesian2d') { + if (__DEV__) { + console.warn('Visual map on line style is only supported on cartesian2d.'); + } + return; + } + + var coordDim; + var visualMeta; + + for (var i = visualMetaList.length - 1; i >= 0; i--) { + var dimIndex = visualMetaList[i].dimension; + var dimName = data.dimensions[dimIndex]; + var dimInfo = data.getDimensionInfo(dimName); + coordDim = dimInfo && dimInfo.coordDim; + // Can only be x or y + if (coordDim === 'x' || coordDim === 'y') { + visualMeta = visualMetaList[i]; + break; + } + } + + if (!visualMeta) { + if (__DEV__) { + console.warn('Visual map on line style only support x or y dimension.'); + } + return; + } + + // If the area to be rendered is bigger than area defined by LinearGradient, + // the canvas spec prescribes that the color of the first stop and the last + // stop should be used. But if two stops are added at offset 0, in effect + // browsers use the color of the second stop to render area outside + // LinearGradient. So we can only infinitesimally extend area defined in + // LinearGradient to render `outerColors`. + + var axis = coordSys.getAxis(coordDim); + + // dataToCoor mapping may not be linear, but must be monotonic. + var colorStops = map(visualMeta.stops, function (stop) { + return { + coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)), + color: stop.color + }; + }); + var stopLen = colorStops.length; + var outerColors = visualMeta.outerColors.slice(); + + if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) { + colorStops.reverse(); + outerColors.reverse(); + } + + var tinyExtent = 10; // Arbitrary value: 10px + var minCoord = colorStops[0].coord - tinyExtent; + var maxCoord = colorStops[stopLen - 1].coord + tinyExtent; + var coordSpan = maxCoord - minCoord; + + if (coordSpan < 1e-3) { + return 'transparent'; + } + + each$1(colorStops, function (stop) { + stop.offset = (stop.coord - minCoord) / coordSpan; + }); + colorStops.push({ + offset: stopLen ? colorStops[stopLen - 1].offset : 0.5, + color: outerColors[1] || 'transparent' + }); + colorStops.unshift({ // notice colorStops.length have been changed. + offset: stopLen ? colorStops[0].offset : 0.5, + color: outerColors[0] || 'transparent' + }); + + // zrUtil.each(colorStops, function (colorStop) { + // // Make sure each offset has rounded px to avoid not sharp edge + // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start); + // }); + + var gradient = new LinearGradient(0, 0, 0, 0, colorStops, true); + gradient[coordDim] = minCoord; + gradient[coordDim + '2'] = maxCoord; + + return gradient; +} + +function getIsIgnoreFunc(seriesModel, data, coordSys) { + var showAllSymbol = seriesModel.get('showAllSymbol'); + var isAuto = showAllSymbol === 'auto'; + + if (showAllSymbol && !isAuto) { + return; + } + + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + if (!categoryAxis) { + return; + } + + // Note that category label interval strategy might bring some weird effect + // in some scenario: users may wonder why some of the symbols are not + // displayed. So we show all symbols as possible as we can. + if (isAuto + // Simplify the logic, do not determine label overlap here. + && canShowAllSymbolForCategory(categoryAxis, data) + ) { + return; + } + + // Otherwise follow the label interval strategy on category axis. + var categoryDataDim = data.mapDimension(categoryAxis.dim); + var labelMap = {}; + + each$1(categoryAxis.getViewLabels(), function (labelItem) { + labelMap[labelItem.tickValue] = 1; + }); + + return function (dataIndex) { + return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex)); + }; +} + +function canShowAllSymbolForCategory(categoryAxis, data) { + // In mose cases, line is monotonous on category axis, and the label size + // is close with each other. So we check the symbol size and some of the + // label size alone with the category axis to estimate whether all symbol + // can be shown without overlap. + var axisExtent = categoryAxis.getExtent(); + var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count(); + isNaN(availSize) && (availSize = 0); // 0/0 is NaN. + + // Sampling some points, max 5. + var dataLen = data.count(); + var step = Math.max(1, Math.round(dataLen / 5)); + for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) { + if (SymbolClz$1.getSymbolSize( + data, dataIndex + // Only for cartesian, where `isHorizontal` exists. + )[categoryAxis.isHorizontal() ? 1 : 0] + // Empirical number + * 1.5 > availSize + ) { + return false; + } + } + + return true; +} + +Chart.extend({ + + type: 'line', + + init: function () { + var lineGroup = new Group(); + + var symbolDraw = new SymbolDraw(); + this.group.add(symbolDraw.group); + + this._symbolDraw = symbolDraw; + this._lineGroup = lineGroup; + }, + + render: function (seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var group = this.group; + var data = seriesModel.getData(); + var lineStyleModel = seriesModel.getModel('lineStyle'); + var areaStyleModel = seriesModel.getModel('areaStyle'); + + var points = data.mapArray(data.getItemLayout); + + var isCoordSysPolar = coordSys.type === 'polar'; + var prevCoordSys = this._coordSys; + + var symbolDraw = this._symbolDraw; + var polyline = this._polyline; + var polygon = this._polygon; + + var lineGroup = this._lineGroup; + + var hasAnimation = seriesModel.get('animation'); + + var isAreaChart = !areaStyleModel.isEmpty(); + + var valueOrigin = areaStyleModel.get('origin'); + var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin); + + var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo); + + var showSymbol = seriesModel.get('showSymbol'); + + var isIgnoreFunc = showSymbol && !isCoordSysPolar + && getIsIgnoreFunc(seriesModel, data, coordSys); + + // Remove temporary symbols + var oldData = this._data; + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); + + // Remove previous created symbols if showSymbol changed to false + if (!showSymbol) { + symbolDraw.remove(); + } + + group.add(lineGroup); + + // FIXME step not support polar + var step = !isCoordSysPolar && seriesModel.get('step'); + // Initialization animation or coordinate system changed + if ( + !(polyline && prevCoordSys.type === coordSys.type && step === this._step) + ) { + showSymbol && symbolDraw.updateData(data, { + isIgnore: isIgnoreFunc, + clipShape: createClipShape(coordSys, false, true, seriesModel) + }); + + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + + polyline = this._newPolyline(points, coordSys, hasAnimation); + if (isAreaChart) { + polygon = this._newPolygon( + points, stackedOnPoints, + coordSys, hasAnimation + ); + } + lineGroup.setClipPath(createClipShape(coordSys, true, false, seriesModel)); + } + else { + if (isAreaChart && !polygon) { + // If areaStyle is added + polygon = this._newPolygon( + points, stackedOnPoints, + coordSys, hasAnimation + ); + } + else if (polygon && !isAreaChart) { + // If areaStyle is removed + lineGroup.remove(polygon); + polygon = this._polygon = null; + } + + // Update clipPath + lineGroup.setClipPath(createClipShape(coordSys, false, false, seriesModel)); + + // Always update, or it is wrong in the case turning on legend + // because points are not changed + showSymbol && symbolDraw.updateData(data, { + isIgnore: isIgnoreFunc, + clipShape: createClipShape(coordSys, false, true, seriesModel) + }); + + // Stop symbol animation and sync with line points + // FIXME performance? + data.eachItemGraphicEl(function (el) { + el.stopAnimation(true); + }); + + // In the case data zoom triggerred refreshing frequently + // Data may not change if line has a category axis. So it should animate nothing + if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) + || !isPointsSame(this._points, points) + ) { + if (hasAnimation) { + this._updateAnimation( + data, stackedOnPoints, coordSys, api, step, valueOrigin + ); + } + else { + // Not do it in update with animation + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + + polyline.setShape({ + points: points + }); + polygon && polygon.setShape({ + points: points, + stackedOnPoints: stackedOnPoints + }); + } + } + } + + var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color'); + + polyline.useStyle(defaults( + // Use color in lineStyle first + lineStyleModel.getLineStyle(), + { + fill: 'none', + stroke: visualColor, + lineJoin: 'bevel' + } + )); + + var smooth = seriesModel.get('smooth'); + smooth = getSmooth(seriesModel.get('smooth')); + polyline.setShape({ + smooth: smooth, + smoothMonotone: seriesModel.get('smoothMonotone'), + connectNulls: seriesModel.get('connectNulls') + }); + + if (polygon) { + var stackedOnSeries = data.getCalculationInfo('stackedOnSeries'); + var stackedOnSmooth = 0; + + polygon.useStyle(defaults( + areaStyleModel.getAreaStyle(), + { + fill: visualColor, + opacity: 0.7, + lineJoin: 'bevel' + } + )); + + if (stackedOnSeries) { + stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth')); + } + + polygon.setShape({ + smooth: smooth, + stackedOnSmooth: stackedOnSmooth, + smoothMonotone: seriesModel.get('smoothMonotone'), + connectNulls: seriesModel.get('connectNulls') + }); + } + + this._data = data; + // Save the coordinate system for transition animation when data changed + this._coordSys = coordSys; + this._stackedOnPoints = stackedOnPoints; + this._points = points; + this._step = step; + this._valueOrigin = valueOrigin; + }, + + dispose: function () {}, + + highlight: function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + + if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) { + var symbol = data.getItemGraphicEl(dataIndex); + if (!symbol) { + // Create a temporary symbol if it is not exists + var pt = data.getItemLayout(dataIndex); + if (!pt) { + // Null data + return; + } + symbol = new SymbolClz$1(data, dataIndex); + symbol.position = pt; + symbol.setZ( + seriesModel.get('zlevel'), + seriesModel.get('z') + ); + symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]); + symbol.__temp = true; + data.setItemGraphicEl(dataIndex, symbol); + + // Stop scale animation + symbol.stopSymbolAnimation(true); + + this.group.add(symbol); + } + symbol.highlight(); + } + else { + // Highlight whole series + Chart.prototype.highlight.call( + this, seriesModel, ecModel, api, payload + ); + } + }, + + downplay: function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + if (dataIndex != null && dataIndex >= 0) { + var symbol = data.getItemGraphicEl(dataIndex); + if (symbol) { + if (symbol.__temp) { + data.setItemGraphicEl(dataIndex, null); + this.group.remove(symbol); + } + else { + symbol.downplay(); + } + } + } + else { + // FIXME + // can not downplay completely. + // Downplay whole series + Chart.prototype.downplay.call( + this, seriesModel, ecModel, api, payload + ); + } + }, + + /** + * @param {module:zrender/container/Group} group + * @param {Array.>} points + * @private + */ + _newPolyline: function (points) { + var polyline = this._polyline; + // Remove previous created polyline + if (polyline) { + this._lineGroup.remove(polyline); + } + + polyline = new Polyline$1({ + shape: { + points: points + }, + silent: true, + z2: 10 + }); + + this._lineGroup.add(polyline); + + this._polyline = polyline; + + return polyline; + }, + + /** + * @param {module:zrender/container/Group} group + * @param {Array.>} stackedOnPoints + * @param {Array.>} points + * @private + */ + _newPolygon: function (points, stackedOnPoints) { + var polygon = this._polygon; + // Remove previous created polygon + if (polygon) { + this._lineGroup.remove(polygon); + } + + polygon = new Polygon$1({ + shape: { + points: points, + stackedOnPoints: stackedOnPoints + }, + silent: true + }); + + this._lineGroup.add(polygon); + + this._polygon = polygon; + return polygon; + }, + + /** + * @private + */ + // FIXME Two value axis + _updateAnimation: function (data, stackedOnPoints, coordSys, api, step, valueOrigin) { + var polyline = this._polyline; + var polygon = this._polygon; + var seriesModel = data.hostModel; + + var diff = lineAnimationDiff( + this._data, data, + this._stackedOnPoints, stackedOnPoints, + this._coordSys, coordSys, + this._valueOrigin, valueOrigin + ); + + var current = diff.current; + var stackedOnCurrent = diff.stackedOnCurrent; + var next = diff.next; + var stackedOnNext = diff.stackedOnNext; + if (step) { + // TODO If stacked series is not step + current = turnPointsIntoStep(diff.current, coordSys, step); + stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step); + next = turnPointsIntoStep(diff.next, coordSys, step); + stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step); + } + // `diff.current` is subset of `current` (which should be ensured by + // turnPointsIntoStep), so points in `__points` can be updated when + // points in `current` are update during animation. + polyline.shape.__points = diff.current; + polyline.shape.points = current; + + updateProps(polyline, { + shape: { + points: next + } + }, seriesModel); + + if (polygon) { + polygon.setShape({ + points: current, + stackedOnPoints: stackedOnCurrent + }); + updateProps(polygon, { + shape: { + points: next, + stackedOnPoints: stackedOnNext + } + }, seriesModel); + } + + var updatedDataInfo = []; + var diffStatus = diff.status; + + for (var i = 0; i < diffStatus.length; i++) { + var cmd = diffStatus[i].cmd; + if (cmd === '=') { + var el = data.getItemGraphicEl(diffStatus[i].idx1); + if (el) { + updatedDataInfo.push({ + el: el, + ptIdx: i // Index of points + }); + } + } + } + + if (polyline.animators && polyline.animators.length) { + polyline.animators[0].during(function () { + for (var i = 0; i < updatedDataInfo.length; i++) { + var el = updatedDataInfo[i].el; + el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]); + } + }); + } + }, + + remove: function (ecModel) { + var group = this.group; + var oldData = this._data; + this._lineGroup.removeAll(); + this._symbolDraw.remove(true); + // Remove temporary created elements when highlighting + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); + + this._polyline + = this._polygon + = this._coordSys + = this._points + = this._stackedOnPoints + = this._data = null; + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var visualSymbol = function (seriesType, defaultSymbolType, legendSymbol) { + // Encoding visual for all series include which is filtered for legend drawing + return { + seriesType: seriesType, + + // For legend. + performRawSeries: true, + + reset: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var symbolType = seriesModel.get('symbol') || defaultSymbolType; + var symbolSize = seriesModel.get('symbolSize'); + var keepAspect = seriesModel.get('symbolKeepAspect'); + + data.setVisual({ + legendSymbol: legendSymbol || symbolType, + symbol: symbolType, + symbolSize: symbolSize, + symbolKeepAspect: keepAspect + }); + + // Only visible series has each data be visual encoded + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var hasCallback = typeof symbolSize === 'function'; + + function dataEach(data, idx) { + if (typeof symbolSize === 'function') { + var rawValue = seriesModel.getRawValue(idx); + // FIXME + var params = seriesModel.getDataParams(idx); + data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params)); + } + + if (data.hasItemOption) { + var itemModel = data.getItemModel(idx); + var itemSymbolType = itemModel.getShallow('symbol', true); + var itemSymbolSize = itemModel.getShallow('symbolSize', + true); + var itemSymbolKeepAspect + = itemModel.getShallow('symbolKeepAspect', true); + + // If has item symbol + if (itemSymbolType != null) { + data.setItemVisual(idx, 'symbol', itemSymbolType); + } + if (itemSymbolSize != null) { + // PENDING Transform symbolSize ? + data.setItemVisual(idx, 'symbolSize', itemSymbolSize); + } + if (itemSymbolKeepAspect != null) { + data.setItemVisual(idx, 'symbolKeepAspect', + itemSymbolKeepAspect); + } + } + } + + return { dataEach: (data.hasItemOption || hasCallback) ? dataEach : null }; + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float32Array */ + +var pointsLayout = function (seriesType) { + return { + seriesType: seriesType, + + plan: createRenderPlanner(), + + reset: function (seriesModel) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + var pipelineContext = seriesModel.pipelineContext; + var isLargeRender = pipelineContext.large; + + if (!coordSys) { + return; + } + + var dims = map(coordSys.dimensions, function (dim) { + return data.mapDimension(dim); + }).slice(0, 2); + var dimLen = dims.length; + + var stackResultDim = data.getCalculationInfo('stackResultDimension'); + if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) { + dims[0] = stackResultDim; + } + if (isDimensionStacked(data, dims[1] /*, dims[0]*/)) { + dims[1] = stackResultDim; + } + + function progress(params, data) { + var segCount = params.end - params.start; + var points = isLargeRender && new Float32Array(segCount * dimLen); + + for (var i = params.start, offset = 0, tmpIn = [], tmpOut = []; i < params.end; i++) { + var point; + + if (dimLen === 1) { + var x = data.get(dims[0], i); + point = !isNaN(x) && coordSys.dataToPoint(x, null, tmpOut); + } + else { + var x = tmpIn[0] = data.get(dims[0], i); + var y = tmpIn[1] = data.get(dims[1], i); + // Also {Array.}, not undefined to avoid if...else... statement + point = !isNaN(x) && !isNaN(y) && coordSys.dataToPoint(tmpIn, null, tmpOut); + } + + if (isLargeRender) { + points[offset++] = point ? point[0] : NaN; + points[offset++] = point ? point[1] : NaN; + } + else { + data.setItemLayout(i, (point && point.slice()) || [NaN, NaN]); + } + } + + isLargeRender && data.setLayout('symbolPoints', points); + } + + return dimLen && {progress: progress}; + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var samplers = { + average: function (frame) { + var sum = 0; + var count = 0; + for (var i = 0; i < frame.length; i++) { + if (!isNaN(frame[i])) { + sum += frame[i]; + count++; + } + } + // Return NaN if count is 0 + return count === 0 ? NaN : sum / count; + }, + sum: function (frame) { + var sum = 0; + for (var i = 0; i < frame.length; i++) { + // Ignore NaN + sum += frame[i] || 0; + } + return sum; + }, + max: function (frame) { + var max = -Infinity; + for (var i = 0; i < frame.length; i++) { + frame[i] > max && (max = frame[i]); + } + // NaN will cause illegal axis extent. + return isFinite(max) ? max : NaN; + }, + min: function (frame) { + var min = Infinity; + for (var i = 0; i < frame.length; i++) { + frame[i] < min && (min = frame[i]); + } + // NaN will cause illegal axis extent. + return isFinite(min) ? min : NaN; + }, + // TODO + // Median + nearest: function (frame) { + return frame[0]; + } +}; + +var indexSampler = function (frame, value) { + return Math.round(frame.length / 2); +}; + +var dataSample = function (seriesType) { + return { + + seriesType: seriesType, + + modifyOutputEnd: true, + + reset: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var sampling = seriesModel.get('sampling'); + var coordSys = seriesModel.coordinateSystem; + // Only cartesian2d support down sampling + if (coordSys.type === 'cartesian2d' && sampling) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var extent = baseAxis.getExtent(); + // Coordinste system has been resized + var size = extent[1] - extent[0]; + var rate = Math.round(data.count() / size); + if (rate > 1) { + var sampler; + if (typeof sampling === 'string') { + sampler = samplers[sampling]; + } + else if (typeof sampling === 'function') { + sampler = sampling; + } + if (sampler) { + // Only support sample the first dim mapped from value axis. + seriesModel.setData(data.downSample( + data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler + )); + } + } + } + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Cartesian coordinate system + * @module echarts/coord/Cartesian + * + */ + +function dimAxisMapper(dim) { + return this._axes[dim]; +} + +/** + * @alias module:echarts/coord/Cartesian + * @constructor + */ +var Cartesian = function (name) { + this._axes = {}; + + this._dimList = []; + + /** + * @type {string} + */ + this.name = name || ''; +}; + +Cartesian.prototype = { + + constructor: Cartesian, + + type: 'cartesian', + + /** + * Get axis + * @param {number|string} dim + * @return {module:echarts/coord/Cartesian~Axis} + */ + getAxis: function (dim) { + return this._axes[dim]; + }, + + /** + * Get axes list + * @return {Array.} + */ + getAxes: function () { + return map(this._dimList, dimAxisMapper, this); + }, + + /** + * Get axes list by given scale type + */ + getAxesByScale: function (scaleType) { + scaleType = scaleType.toLowerCase(); + return filter( + this.getAxes(), + function (axis) { + return axis.scale.type === scaleType; + } + ); + }, + + /** + * Add axis + * @param {module:echarts/coord/Cartesian.Axis} + */ + addAxis: function (axis) { + var dim = axis.dim; + + this._axes[dim] = axis; + + this._dimList.push(dim); + }, + + /** + * Convert data to coord in nd space + * @param {Array.|Object.} val + * @return {Array.|Object.} + */ + dataToCoord: function (val) { + return this._dataCoordConvert(val, 'dataToCoord'); + }, + + /** + * Convert coord in nd space to data + * @param {Array.|Object.} val + * @return {Array.|Object.} + */ + coordToData: function (val) { + return this._dataCoordConvert(val, 'coordToData'); + }, + + _dataCoordConvert: function (input, method) { + var dimList = this._dimList; + + var output = input instanceof Array ? [] : {}; + + for (var i = 0; i < dimList.length; i++) { + var dim = dimList[i]; + var axis = this._axes[dim]; + + output[dim] = axis[method](input[dim]); + } + + return output; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +function Cartesian2D(name) { + + Cartesian.call(this, name); +} + +Cartesian2D.prototype = { + + constructor: Cartesian2D, + + type: 'cartesian2d', + + /** + * @type {Array.} + * @readOnly + */ + dimensions: ['x', 'y'], + + /** + * Base axis will be used on stacking. + * + * @return {module:echarts/coord/cartesian/Axis2D} + */ + getBaseAxis: function () { + return this.getAxesByScale('ordinal')[0] + || this.getAxesByScale('time')[0] + || this.getAxis('x'); + }, + + /** + * If contain point + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var axisX = this.getAxis('x'); + var axisY = this.getAxis('y'); + return axisX.contain(axisX.toLocalCoord(point[0])) + && axisY.contain(axisY.toLocalCoord(point[1])); + }, + + /** + * If contain data + * @param {Array.} data + * @return {boolean} + */ + containData: function (data) { + return this.getAxis('x').containData(data[0]) + && this.getAxis('y').containData(data[1]); + }, + + /** + * @param {Array.} data + * @param {Array.} out + * @return {Array.} + */ + dataToPoint: function (data, reserved, out) { + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + out = out || []; + out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(data[0])); + out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(data[1])); + return out; + }, + + /** + * @param {Array.} data + * @param {Array.} out + * @return {Array.} + */ + clampData: function (data, out) { + var xScale = this.getAxis('x').scale; + var yScale = this.getAxis('y').scale; + var xAxisExtent = xScale.getExtent(); + var yAxisExtent = yScale.getExtent(); + var x = xScale.parse(data[0]); + var y = yScale.parse(data[1]); + out = out || []; + out[0] = Math.min( + Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), + Math.max(xAxisExtent[0], xAxisExtent[1]) + ); + out[1] = Math.min( + Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), + Math.max(yAxisExtent[0], yAxisExtent[1]) + ); + + return out; + }, + + /** + * @param {Array.} point + * @param {Array.} out + * @return {Array.} + */ + pointToData: function (point, out) { + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + out = out || []; + out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0])); + out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1])); + return out; + }, + + /** + * Get other axis + * @param {module:echarts/coord/cartesian/Axis2D} axis + */ + getOtherAxis: function (axis) { + return this.getAxis(axis.dim === 'x' ? 'y' : 'x'); + } + +}; + +inherits(Cartesian2D, Cartesian); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Extend axis 2d + * @constructor module:echarts/coord/cartesian/Axis2D + * @extends {module:echarts/coord/cartesian/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var Axis2D = function (dim, scale, coordExtent, axisType, position) { + Axis.call(this, dim, scale, coordExtent); + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * Axis position + * - 'top' + * - 'bottom' + * - 'left' + * - 'right' + */ + this.position = position || 'bottom'; +}; + +Axis2D.prototype = { + + constructor: Axis2D, + + /** + * Index of axis, can be used as key + */ + index: 0, + + /** + * Implemented in . + * @return {Array.} + * If not on zero of other axis, return null/undefined. + * If no axes, return an empty array. + */ + getAxesOnZeroOf: null, + + /** + * Axis model + * @param {module:echarts/coord/cartesian/AxisModel} + */ + model: null, + + isHorizontal: function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + }, + + /** + * Each item cooresponds to this.getExtent(), which + * means globalExtent[0] may greater than globalExtent[1], + * unless `asc` is input. + * + * @param {boolean} [asc] + * @return {Array.} + */ + getGlobalExtent: function (asc) { + var ret = this.getExtent(); + ret[0] = this.toGlobalCoord(ret[0]); + ret[1] = this.toGlobalCoord(ret[1]); + asc && ret[0] > ret[1] && ret.reverse(); + return ret; + }, + + getOtherAxis: function () { + this.grid.getOtherAxis(); + }, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp); + }, + + /** + * Transform global coord to local coord, + * i.e. var localCoord = axis.toLocalCoord(80); + * designate by module:echarts/coord/cartesian/Grid. + * @type {Function} + */ + toLocalCoord: null, + + /** + * Transform global coord to local coord, + * i.e. var globalCoord = axis.toLocalCoord(40); + * designate by module:echarts/coord/cartesian/Grid. + * @type {Function} + */ + toGlobalCoord: null + +}; + +inherits(Axis2D, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var defaultOption = { + show: true, + zlevel: 0, + z: 0, + // Inverse the axis. + inverse: false, + + // Axis name displayed. + name: '', + // 'start' | 'middle' | 'end' + nameLocation: 'end', + // By degree. By defualt auto rotate by nameLocation. + nameRotate: null, + nameTruncate: { + maxWidth: null, + ellipsis: '...', + placeholder: '.' + }, + // Use global text style by default. + nameTextStyle: {}, + // The gap between axisName and axisLine. + nameGap: 15, + + // Default `false` to support tooltip. + silent: false, + // Default `false` to avoid legacy user event listener fail. + triggerEvent: false, + + tooltip: { + show: false + }, + + axisPointer: {}, + + axisLine: { + show: true, + onZero: true, + onZeroAxisIndex: null, + lineStyle: { + color: '#333', + width: 1, + type: 'solid' + }, + // The arrow at both ends the the axis. + symbol: ['none', 'none'], + symbolSize: [10, 15] + }, + axisTick: { + show: true, + // Whether axisTick is inside the grid or outside the grid. + inside: false, + // The length of axisTick. + length: 5, + lineStyle: { + width: 1 + } + }, + axisLabel: { + show: true, + // Whether axisLabel is inside the grid or outside the grid. + inside: false, + rotate: 0, + // true | false | null/undefined (auto) + showMinLabel: null, + // true | false | null/undefined (auto) + showMaxLabel: null, + margin: 8, + // formatter: null, + fontSize: 12 + }, + splitLine: { + show: true, + lineStyle: { + color: ['#ccc'], + width: 1, + type: 'solid' + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'] + } + } +}; + +var axisDefault = {}; + +axisDefault.categoryAxis = merge({ + // The gap at both ends of the axis. For categoryAxis, boolean. + boundaryGap: true, + // Set false to faster category collection. + // Only usefull in the case like: category is + // ['2012-01-01', '2012-01-02', ...], where the input + // data has been ensured not duplicate and is large data. + // null means "auto": + // if axis.data provided, do not deduplication, + // else do deduplication. + deduplication: null, + // splitArea: { + // show: false + // }, + splitLine: { + show: false + }, + axisTick: { + // If tick is align with label when boundaryGap is true + alignWithLabel: false, + interval: 'auto' + }, + axisLabel: { + interval: 'auto' + } +}, defaultOption); + +axisDefault.valueAxis = merge({ + // The gap at both ends of the axis. For value axis, [GAP, GAP], where + // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`) + boundaryGap: [0, 0], + + // TODO + // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60] + + // Min value of the axis. can be: + // + a number + // + 'dataMin': use the min value in data. + // + null/undefined: auto decide min value (consider pretty look and boundaryGap). + // min: null, + + // Max value of the axis. can be: + // + a number + // + 'dataMax': use the max value in data. + // + null/undefined: auto decide max value (consider pretty look and boundaryGap). + // max: null, + + // Readonly prop, specifies start value of the range when using data zoom. + // rangeStart: null + + // Readonly prop, specifies end value of the range when using data zoom. + // rangeEnd: null + + // Optional value can be: + // + `false`: always include value 0. + // + `true`: the extent do not consider value 0. + // scale: false, + + // AxisTick and axisLabel and splitLine are caculated based on splitNumber. + splitNumber: 5 + + // Interval specifies the span of the ticks is mandatorily. + // interval: null + + // Specify min interval when auto calculate tick interval. + // minInterval: null + + // Specify max interval when auto calculate tick interval. + // maxInterval: null + +}, defaultOption); + +axisDefault.timeAxis = defaults({ + scale: true, + min: 'dataMin', + max: 'dataMax' +}, axisDefault.valueAxis); + +axisDefault.logAxis = defaults({ + scale: true, + logBase: 10 +}, axisDefault.valueAxis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME axisType is fixed ? +var AXIS_TYPES = ['value', 'category', 'time', 'log']; + +/** + * Generate sub axis model class + * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel' + * @param {module:echarts/model/Component} BaseAxisModelClass + * @param {Function} axisTypeDefaulter + * @param {Object} [extraDefaultOption] + */ +var axisModelCreator = function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) { + + each$1(AXIS_TYPES, function (axisType) { + + BaseAxisModelClass.extend({ + + /** + * @readOnly + */ + type: axisName + 'Axis.' + axisType, + + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(axisType + 'Axis')); + merge(option, this.getDefaultOption()); + + option.type = axisTypeDefaulter(axisName, option); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + /** + * @override + */ + optionUpdated: function () { + var thisOption = this.option; + if (thisOption.type === 'category') { + this.__ordinalMeta = OrdinalMeta.createByAxisModel(this); + } + }, + + /** + * Should not be called before all of 'getInitailData' finished. + * Because categories are collected during initializing data. + */ + getCategories: function (rawData) { + var option = this.option; + // FIXME + // warning if called before all of 'getInitailData' finished. + if (option.type === 'category') { + if (rawData) { + return option.data; + } + return this.__ordinalMeta.categories; + } + }, + + getOrdinalMeta: function () { + return this.__ordinalMeta; + }, + + defaultOption: mergeAll( + [ + {}, + axisDefault[axisType + 'Axis'], + extraDefaultOption + ], + true + ) + }); + }); + + ComponentModel.registerSubTypeDefaulter( + axisName + 'Axis', + curry(axisTypeDefaulter, axisName) + ); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AxisModel = ComponentModel.extend({ + + type: 'cartesian2dAxis', + + /** + * @type {module:echarts/coord/cartesian/Axis2D} + */ + axis: null, + + /** + * @override + */ + init: function () { + AxisModel.superApply(this, 'init', arguments); + this.resetRange(); + }, + + /** + * @override + */ + mergeOption: function () { + AxisModel.superApply(this, 'mergeOption', arguments); + this.resetRange(); + }, + + /** + * @override + */ + restoreData: function () { + AxisModel.superApply(this, 'restoreData', arguments); + this.resetRange(); + }, + + /** + * @override + * @return {module:echarts/model/Component} + */ + getCoordSysModel: function () { + return this.ecModel.queryComponents({ + mainType: 'grid', + index: this.option.gridIndex, + id: this.option.gridId + })[0]; + } + +}); + +function getAxisType(axisDim, option) { + // Default axis with data is category axis + return option.type || (option.data ? 'category' : 'value'); +} + +merge(AxisModel.prototype, axisModelCommonMixin); + +var extraOption = { + // gridIndex: 0, + // gridId: '', + + // Offset is for multiple axis on the same position + offset: 0 +}; + +axisModelCreator('x', AxisModel, getAxisType, extraOption); +axisModelCreator('y', AxisModel, getAxisType, extraOption); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Grid 是在有直角坐标系的时候必须要存在的 +// 所以这里也要被 Cartesian2D 依赖 + +ComponentModel.extend({ + + type: 'grid', + + dependencies: ['xAxis', 'yAxis'], + + layoutMode: 'box', + + /** + * @type {module:echarts/coord/cartesian/Grid} + */ + coordinateSystem: null, + + defaultOption: { + show: false, + zlevel: 0, + z: 0, + left: '10%', + top: 60, + right: '10%', + bottom: 60, + // If grid size contain label + containLabel: false, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 1, + borderColor: '#ccc' + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Grid is a region which contains at most 4 cartesian systems + * + * TODO Default cartesian + */ + +// Depends on GridModel, AxisModel, which performs preprocess. +/** + * Check if the axis is used in the specified grid + * @inner + */ +function isAxisUsedInTheGrid(axisModel, gridModel, ecModel) { + return axisModel.getCoordSysModel() === gridModel; +} + +function Grid(gridModel, ecModel, api) { + /** + * @type {Object.} + * @private + */ + this._coordsMap = {}; + + /** + * @type {Array.} + * @private + */ + this._coordsList = []; + + /** + * @type {Object.} + * @private + */ + this._axesMap = {}; + + /** + * @type {Array.} + * @private + */ + this._axesList = []; + + this._initCartesian(gridModel, ecModel, api); + + this.model = gridModel; +} + +var gridProto = Grid.prototype; + +gridProto.type = 'grid'; + +gridProto.axisPointerEnabled = true; + +gridProto.getRect = function () { + return this._rect; +}; + +gridProto.update = function (ecModel, api) { + + var axesMap = this._axesMap; + + this._updateScale(ecModel, this.model); + + each$1(axesMap.x, function (xAxis) { + niceScaleExtent(xAxis.scale, xAxis.model); + }); + each$1(axesMap.y, function (yAxis) { + niceScaleExtent(yAxis.scale, yAxis.model); + }); + + // Key: axisDim_axisIndex, value: boolean, whether onZero target. + var onZeroRecords = {}; + + each$1(axesMap.x, function (xAxis) { + fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords); + }); + each$1(axesMap.y, function (yAxis) { + fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords); + }); + + // Resize again if containLabel is enabled + // FIXME It may cause getting wrong grid size in data processing stage + this.resize(this.model, api); +}; + +function fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) { + + axis.getAxesOnZeroOf = function () { + // TODO: onZero of multiple axes. + return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : []; + }; + + // onZero can not be enabled in these two situations: + // 1. When any other axis is a category axis. + // 2. When no axis is cross 0 point. + var otherAxes = axesMap[otherAxisDim]; + + var otherAxisOnZeroOf; + var axisModel = axis.model; + var onZero = axisModel.get('axisLine.onZero'); + var onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex'); + + if (!onZero) { + return; + } + + // If target axis is specified. + if (onZeroAxisIndex != null) { + if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) { + otherAxisOnZeroOf = otherAxes[onZeroAxisIndex]; + } + } + else { + // Find the first available other axis. + for (var idx in otherAxes) { + if (otherAxes.hasOwnProperty(idx) + && canOnZeroToAxis(otherAxes[idx]) + // Consider that two Y axes on one value axis, + // if both onZero, the two Y axes overlap. + && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])] + ) { + otherAxisOnZeroOf = otherAxes[idx]; + break; + } + } + } + + if (otherAxisOnZeroOf) { + onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true; + } + + function getOnZeroRecordKey(axis) { + return axis.dim + '_' + axis.index; + } +} + +function canOnZeroToAxis(axis) { + return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis); +} + +/** + * Resize the grid + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @param {module:echarts/ExtensionAPI} api + */ +gridProto.resize = function (gridModel, api, ignoreContainLabel) { + + var gridRect = getLayoutRect( + gridModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + + this._rect = gridRect; + + var axesList = this._axesList; + + adjustAxes(); + + // Minus label size + if (!ignoreContainLabel && gridModel.get('containLabel')) { + each$1(axesList, function (axis) { + if (!axis.model.get('axisLabel.inside')) { + var labelUnionRect = estimateLabelUnionRect(axis); + if (labelUnionRect) { + var dim = axis.isHorizontal() ? 'height' : 'width'; + var margin = axis.model.get('axisLabel.margin'); + gridRect[dim] -= labelUnionRect[dim] + margin; + if (axis.position === 'top') { + gridRect.y += labelUnionRect.height + margin; + } + else if (axis.position === 'left') { + gridRect.x += labelUnionRect.width + margin; + } + } + } + }); + + adjustAxes(); + } + + function adjustAxes() { + each$1(axesList, function (axis) { + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(extent[idx], extent[1 - idx]); + updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y); + }); + } +}; + +/** + * @param {string} axisType + * @param {number} [axisIndex] + */ +gridProto.getAxis = function (axisType, axisIndex) { + var axesMapOnDim = this._axesMap[axisType]; + if (axesMapOnDim != null) { + if (axisIndex == null) { + // Find first axis + for (var name in axesMapOnDim) { + if (axesMapOnDim.hasOwnProperty(name)) { + return axesMapOnDim[name]; + } + } + } + return axesMapOnDim[axisIndex]; + } +}; + +/** + * @return {Array.} + */ +gridProto.getAxes = function () { + return this._axesList.slice(); +}; + +/** + * Usage: + * grid.getCartesian(xAxisIndex, yAxisIndex); + * grid.getCartesian(xAxisIndex); + * grid.getCartesian(null, yAxisIndex); + * grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...}); + * + * @param {number|Object} [xAxisIndex] + * @param {number} [yAxisIndex] + */ +gridProto.getCartesian = function (xAxisIndex, yAxisIndex) { + if (xAxisIndex != null && yAxisIndex != null) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + return this._coordsMap[key]; + } + + if (isObject$1(xAxisIndex)) { + yAxisIndex = xAxisIndex.yAxisIndex; + xAxisIndex = xAxisIndex.xAxisIndex; + } + // When only xAxisIndex or yAxisIndex given, find its first cartesian. + for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) { + if (coordList[i].getAxis('x').index === xAxisIndex + || coordList[i].getAxis('y').index === yAxisIndex + ) { + return coordList[i]; + } + } +}; + +gridProto.getCartesians = function () { + return this._coordsList.slice(); +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.convertToPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(ecModel, finder); + + return target.cartesian + ? target.cartesian.dataToPoint(value) + : target.axis + ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) + : null; +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.convertFromPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(ecModel, finder); + + return target.cartesian + ? target.cartesian.pointToData(value) + : target.axis + ? target.axis.coordToData(target.axis.toLocalCoord(value)) + : null; +}; + +/** + * @inner + */ +gridProto._findConvertTarget = function (ecModel, finder) { + var seriesModel = finder.seriesModel; + var xAxisModel = finder.xAxisModel + || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]); + var yAxisModel = finder.yAxisModel + || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]); + var gridModel = finder.gridModel; + var coordsList = this._coordsList; + var cartesian; + var axis; + + if (seriesModel) { + cartesian = seriesModel.coordinateSystem; + indexOf(coordsList, cartesian) < 0 && (cartesian = null); + } + else if (xAxisModel && yAxisModel) { + cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); + } + else if (xAxisModel) { + axis = this.getAxis('x', xAxisModel.componentIndex); + } + else if (yAxisModel) { + axis = this.getAxis('y', yAxisModel.componentIndex); + } + // Lowest priority. + else if (gridModel) { + var grid = gridModel.coordinateSystem; + if (grid === this) { + cartesian = this._coordsList[0]; + } + } + + return {cartesian: cartesian, axis: axis}; +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.containPoint = function (point) { + var coord = this._coordsList[0]; + if (coord) { + return coord.containPoint(point); + } +}; + +/** + * Initialize cartesian coordinate systems + * @private + */ +gridProto._initCartesian = function (gridModel, ecModel, api) { + var axisPositionUsed = { + left: false, + right: false, + top: false, + bottom: false + }; + + var axesMap = { + x: {}, + y: {} + }; + var axesCount = { + x: 0, + y: 0 + }; + + /// Create axis + ecModel.eachComponent('xAxis', createAxisCreator('x'), this); + ecModel.eachComponent('yAxis', createAxisCreator('y'), this); + + if (!axesCount.x || !axesCount.y) { + // Roll back when there no either x or y axis + this._axesMap = {}; + this._axesList = []; + return; + } + + this._axesMap = axesMap; + + /// Create cartesian2d + each$1(axesMap.x, function (xAxis, xAxisIndex) { + each$1(axesMap.y, function (yAxis, yAxisIndex) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + var cartesian = new Cartesian2D(key); + + cartesian.grid = this; + cartesian.model = gridModel; + + this._coordsMap[key] = cartesian; + this._coordsList.push(cartesian); + + cartesian.addAxis(xAxis); + cartesian.addAxis(yAxis); + }, this); + }, this); + + function createAxisCreator(axisType) { + return function (axisModel, idx) { + if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) { + return; + } + + var axisPosition = axisModel.get('position'); + if (axisType === 'x') { + // Fix position + if (axisPosition !== 'top' && axisPosition !== 'bottom') { + // Default bottom of X + axisPosition = 'bottom'; + if (axisPositionUsed[axisPosition]) { + axisPosition = axisPosition === 'top' ? 'bottom' : 'top'; + } + } + } + else { + // Fix position + if (axisPosition !== 'left' && axisPosition !== 'right') { + // Default left of Y + axisPosition = 'left'; + if (axisPositionUsed[axisPosition]) { + axisPosition = axisPosition === 'left' ? 'right' : 'left'; + } + } + } + axisPositionUsed[axisPosition] = true; + + var axis = new Axis2D( + axisType, createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisPosition + ); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + + // Inject axis into axisModel + axisModel.axis = axis; + + // Inject axisModel into axis + axis.model = axisModel; + + // Inject grid info axis + axis.grid = this; + + // Index of axis, can be used as key + axis.index = idx; + + this._axesList.push(axis); + + axesMap[axisType][idx] = axis; + axesCount[axisType]++; + }; + } +}; + +/** + * Update cartesian properties from series + * @param {module:echarts/model/Option} option + * @private + */ +gridProto._updateScale = function (ecModel, gridModel) { + // Reset scale + each$1(this._axesList, function (axis) { + axis.scale.setExtent(Infinity, -Infinity); + }); + ecModel.eachSeries(function (seriesModel) { + if (isCartesian2D(seriesModel)) { + var axesModels = findAxesModels(seriesModel, ecModel); + var xAxisModel = axesModels[0]; + var yAxisModel = axesModels[1]; + + if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel) + || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel) + ) { + return; + } + + var cartesian = this.getCartesian( + xAxisModel.componentIndex, yAxisModel.componentIndex + ); + var data = seriesModel.getData(); + var xAxis = cartesian.getAxis('x'); + var yAxis = cartesian.getAxis('y'); + + if (data.type === 'list') { + unionExtent(data, xAxis, seriesModel); + unionExtent(data, yAxis, seriesModel); + } + } + }, this); + + function unionExtent(data, axis, seriesModel) { + each$1(data.mapDimension(axis.dim, true), function (dim) { + axis.scale.unionExtentFromData( + // For example, the extent of the orginal dimension + // is [0.1, 0.5], the extent of the `stackResultDimension` + // is [7, 9], the final extent should not include [0.1, 0.5]. + data, getStackedDimension(data, dim) + ); + }); + } +}; + +/** + * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined + * @return {Object} {baseAxes: [], otherAxes: []} + */ +gridProto.getTooltipAxes = function (dim) { + var baseAxes = []; + var otherAxes = []; + + each$1(this.getCartesians(), function (cartesian) { + var baseAxis = (dim != null && dim !== 'auto') + ? cartesian.getAxis(dim) : cartesian.getBaseAxis(); + var otherAxis = cartesian.getOtherAxis(baseAxis); + indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis); + indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis); + }); + + return {baseAxes: baseAxes, otherAxes: otherAxes}; +}; + +/** + * @inner + */ +function updateAxisTransform(axis, coordBase) { + var axisExtent = axis.getExtent(); + var axisExtentSum = axisExtent[0] + axisExtent[1]; + + // Fast transform + axis.toGlobalCoord = axis.dim === 'x' + ? function (coord) { + return coord + coordBase; + } + : function (coord) { + return axisExtentSum - coord + coordBase; + }; + axis.toLocalCoord = axis.dim === 'x' + ? function (coord) { + return coord - coordBase; + } + : function (coord) { + return axisExtentSum - coord + coordBase; + }; +} + +var axesTypes = ['xAxis', 'yAxis']; +/** + * @inner + */ +function findAxesModels(seriesModel, ecModel) { + return map(axesTypes, function (axisType) { + var axisModel = seriesModel.getReferringComponents(axisType)[0]; + + if (__DEV__) { + if (!axisModel) { + throw new Error(axisType + ' "' + retrieve( + seriesModel.get(axisType + 'Index'), + seriesModel.get(axisType + 'Id'), + 0 + ) + '" not found'); + } + } + return axisModel; + }); +} + +/** + * @inner + */ +function isCartesian2D(seriesModel) { + return seriesModel.get('coordinateSystem') === 'cartesian2d'; +} + +Grid.create = function (ecModel, api) { + var grids = []; + ecModel.eachComponent('grid', function (gridModel, idx) { + var grid = new Grid(gridModel, ecModel, api); + grid.name = 'grid_' + idx; + // dataSampling requires axis extent, so resize + // should be performed in create stage. + grid.resize(gridModel, api, true); + + gridModel.coordinateSystem = grid; + + grids.push(grid); + }); + + // Inject the coordinateSystems into seriesModel + ecModel.eachSeries(function (seriesModel) { + if (!isCartesian2D(seriesModel)) { + return; + } + + var axesModels = findAxesModels(seriesModel, ecModel); + var xAxisModel = axesModels[0]; + var yAxisModel = axesModels[1]; + + var gridModel = xAxisModel.getCoordSysModel(); + + if (__DEV__) { + if (!gridModel) { + throw new Error( + 'Grid "' + retrieve( + xAxisModel.get('gridIndex'), + xAxisModel.get('gridId'), + 0 + ) + '" not found' + ); + } + if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) { + throw new Error('xAxis and yAxis must use the same grid'); + } + } + + var grid = gridModel.coordinateSystem; + + seriesModel.coordinateSystem = grid.getCartesian( + xAxisModel.componentIndex, yAxisModel.componentIndex + ); + }); + + return grids; +}; + +// For deciding which dimensions to use when creating list data +Grid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions; + +CoordinateSystemManager.register('cartesian2d', Grid); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PI$2 = Math.PI; + +function makeAxisEventDataBase(axisModel) { + var eventData = { + componentType: axisModel.mainType, + componentIndex: axisModel.componentIndex + }; + eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex; + return eventData; +} + +/** + * A final axis is translated and rotated from a "standard axis". + * So opt.position and opt.rotation is required. + * + * A standard axis is and axis from [0, 0] to [0, axisExtent[1]], + * for example: (0, 0) ------------> (0, 50) + * + * nameDirection or tickDirection or labelDirection is 1 means tick + * or label is below the standard axis, whereas is -1 means above + * the standard axis. labelOffset means offset between label and axis, + * which is useful when 'onZero', where axisLabel is in the grid and + * label in outside grid. + * + * Tips: like always, + * positive rotation represents anticlockwise, and negative rotation + * represents clockwise. + * The direction of position coordinate is the same as the direction + * of screen coordinate. + * + * Do not need to consider axis 'inverse', which is auto processed by + * axis extent. + * + * @param {module:zrender/container/Group} group + * @param {Object} axisModel + * @param {Object} opt Standard axis parameters. + * @param {Array.} opt.position [x, y] + * @param {number} opt.rotation by radian + * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'. + * @param {number} [opt.tickDirection=1] 1 or -1 + * @param {number} [opt.labelDirection=1] 1 or -1 + * @param {number} [opt.labelOffset=0] Usefull when onZero. + * @param {string} [opt.axisLabelShow] default get from axisModel. + * @param {string} [opt.axisName] default get from axisModel. + * @param {number} [opt.axisNameAvailableWidth] + * @param {number} [opt.labelRotate] by degree, default get from axisModel. + * @param {number} [opt.strokeContainThreshold] Default label interval when label + * @param {number} [opt.nameTruncateMaxWidth] + */ +var AxisBuilder = function (axisModel, opt) { + + /** + * @readOnly + */ + this.opt = opt; + + /** + * @readOnly + */ + this.axisModel = axisModel; + + // Default value + defaults( + opt, + { + labelOffset: 0, + nameDirection: 1, + tickDirection: 1, + labelDirection: 1, + silent: true + } + ); + + /** + * @readOnly + */ + this.group = new Group(); + + // FIXME Not use a seperate text group? + var dumbGroup = new Group({ + position: opt.position.slice(), + rotation: opt.rotation + }); + + // this.group.add(dumbGroup); + // this._dumbGroup = dumbGroup; + + dumbGroup.updateTransform(); + this._transform = dumbGroup.transform; + + this._dumbGroup = dumbGroup; +}; + +AxisBuilder.prototype = { + + constructor: AxisBuilder, + + hasBuilder: function (name) { + return !!builders[name]; + }, + + add: function (name) { + builders[name].call(this); + }, + + getGroup: function () { + return this.group; + } + +}; + +var builders = { + + /** + * @private + */ + axisLine: function () { + var opt = this.opt; + var axisModel = this.axisModel; + + if (!axisModel.get('axisLine.show')) { + return; + } + + var extent = this.axisModel.axis.getExtent(); + + var matrix = this._transform; + var pt1 = [extent[0], 0]; + var pt2 = [extent[1], 0]; + if (matrix) { + applyTransform(pt1, pt1, matrix); + applyTransform(pt2, pt2, matrix); + } + + var lineStyle = extend( + { + lineCap: 'round' + }, + axisModel.getModel('axisLine.lineStyle').getLineStyle() + ); + + this.group.add(new Line(subPixelOptimizeLine({ + // Id for animation + anid: 'line', + + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: lineStyle, + strokeContainThreshold: opt.strokeContainThreshold || 5, + silent: true, + z2: 1 + }))); + + var arrows = axisModel.get('axisLine.symbol'); + var arrowSize = axisModel.get('axisLine.symbolSize'); + + var arrowOffset = axisModel.get('axisLine.symbolOffset') || 0; + if (typeof arrowOffset === 'number') { + arrowOffset = [arrowOffset, arrowOffset]; + } + + if (arrows != null) { + if (typeof arrows === 'string') { + // Use the same arrow for start and end point + arrows = [arrows, arrows]; + } + if (typeof arrowSize === 'string' + || typeof arrowSize === 'number' + ) { + // Use the same size for width and height + arrowSize = [arrowSize, arrowSize]; + } + + var symbolWidth = arrowSize[0]; + var symbolHeight = arrowSize[1]; + + each$1([{ + rotate: opt.rotation + Math.PI / 2, + offset: arrowOffset[0], + r: 0 + }, { + rotate: opt.rotation - Math.PI / 2, + offset: arrowOffset[1], + r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0]) + + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1])) + }], function (point, index) { + if (arrows[index] !== 'none' && arrows[index] != null) { + var symbol = createSymbol( + arrows[index], + -symbolWidth / 2, + -symbolHeight / 2, + symbolWidth, + symbolHeight, + lineStyle.stroke, + true + ); + + // Calculate arrow position with offset + var r = point.r + point.offset; + var pos = [ + pt1[0] + r * Math.cos(opt.rotation), + pt1[1] - r * Math.sin(opt.rotation) + ]; + + symbol.attr({ + rotation: point.rotate, + position: pos, + silent: true + }); + this.group.add(symbol); + } + }, this); + } + }, + + /** + * @private + */ + axisTickLabel: function () { + var axisModel = this.axisModel; + var opt = this.opt; + + var tickEls = buildAxisTick(this, axisModel, opt); + var labelEls = buildAxisLabel(this, axisModel, opt); + + fixMinMaxLabelShow(axisModel, labelEls, tickEls); + }, + + /** + * @private + */ + axisName: function () { + var opt = this.opt; + var axisModel = this.axisModel; + var name = retrieve(opt.axisName, axisModel.get('name')); + + if (!name) { + return; + } + + var nameLocation = axisModel.get('nameLocation'); + var nameDirection = opt.nameDirection; + var textStyleModel = axisModel.getModel('nameTextStyle'); + var gap = axisModel.get('nameGap') || 0; + + var extent = this.axisModel.axis.getExtent(); + var gapSignal = extent[0] > extent[1] ? -1 : 1; + var pos = [ + nameLocation === 'start' + ? extent[0] - gapSignal * gap + : nameLocation === 'end' + ? extent[1] + gapSignal * gap + : (extent[0] + extent[1]) / 2, // 'middle' + // Reuse labelOffset. + isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0 + ]; + + var labelLayout; + + var nameRotation = axisModel.get('nameRotate'); + if (nameRotation != null) { + nameRotation = nameRotation * PI$2 / 180; // To radian. + } + + var axisNameAvailableWidth; + + if (isNameLocationCenter(nameLocation)) { + labelLayout = innerTextLayout( + opt.rotation, + nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis. + nameDirection + ); + } + else { + labelLayout = endTextLayout( + opt, nameLocation, nameRotation || 0, extent + ); + + axisNameAvailableWidth = opt.axisNameAvailableWidth; + if (axisNameAvailableWidth != null) { + axisNameAvailableWidth = Math.abs( + axisNameAvailableWidth / Math.sin(labelLayout.rotation) + ); + !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null); + } + } + + var textFont = textStyleModel.getFont(); + + var truncateOpt = axisModel.get('nameTruncate', true) || {}; + var ellipsis = truncateOpt.ellipsis; + var maxWidth = retrieve( + opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth + ); + // FIXME + // truncate rich text? (consider performance) + var truncatedText = (ellipsis != null && maxWidth != null) + ? truncateText$1( + name, maxWidth, textFont, ellipsis, + {minChar: 2, placeholder: truncateOpt.placeholder} + ) + : name; + + var tooltipOpt = axisModel.get('tooltip', true); + + var mainType = axisModel.mainType; + var formatterParams = { + componentType: mainType, + name: name, + $vars: ['name'] + }; + formatterParams[mainType + 'Index'] = axisModel.componentIndex; + + var textEl = new Text({ + // Id for animation + anid: 'name', + + __fullText: name, + __truncatedText: truncatedText, + + position: pos, + rotation: labelLayout.rotation, + silent: isSilent(axisModel), + z2: 1, + tooltip: (tooltipOpt && tooltipOpt.show) + ? extend({ + content: name, + formatter: function () { + return name; + }, + formatterParams: formatterParams + }, tooltipOpt) + : null + }); + + setTextStyle(textEl.style, textStyleModel, { + text: truncatedText, + textFont: textFont, + textFill: textStyleModel.getTextColor() + || axisModel.get('axisLine.lineStyle.color'), + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.textVerticalAlign + }); + + if (axisModel.get('triggerEvent')) { + textEl.eventData = makeAxisEventDataBase(axisModel); + textEl.eventData.targetType = 'axisName'; + textEl.eventData.name = name; + } + + // FIXME + this._dumbGroup.add(textEl); + textEl.updateTransform(); + + this.group.add(textEl); + + textEl.decomposeTransform(); + } + +}; + +/** + * @public + * @static + * @param {Object} opt + * @param {number} axisRotation in radian + * @param {number} textRotation in radian + * @param {number} direction + * @return {Object} { + * rotation, // according to axis + * textAlign, + * textVerticalAlign + * } + */ +var innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) { + var rotationDiff = remRadian(textRotation - axisRotation); + var textAlign; + var textVerticalAlign; + + if (isRadianAroundZero(rotationDiff)) { // Label is parallel with axis line. + textVerticalAlign = direction > 0 ? 'top' : 'bottom'; + textAlign = 'center'; + } + else if (isRadianAroundZero(rotationDiff - PI$2)) { // Label is inverse parallel with axis line. + textVerticalAlign = direction > 0 ? 'bottom' : 'top'; + textAlign = 'center'; + } + else { + textVerticalAlign = 'middle'; + + if (rotationDiff > 0 && rotationDiff < PI$2) { + textAlign = direction > 0 ? 'right' : 'left'; + } + else { + textAlign = direction > 0 ? 'left' : 'right'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +}; + +function endTextLayout(opt, textPosition, textRotate, extent) { + var rotationDiff = remRadian(textRotate - opt.rotation); + var textAlign; + var textVerticalAlign; + var inverse = extent[0] > extent[1]; + var onLeft = (textPosition === 'start' && !inverse) + || (textPosition !== 'start' && inverse); + + if (isRadianAroundZero(rotationDiff - PI$2 / 2)) { + textVerticalAlign = onLeft ? 'bottom' : 'top'; + textAlign = 'center'; + } + else if (isRadianAroundZero(rotationDiff - PI$2 * 1.5)) { + textVerticalAlign = onLeft ? 'top' : 'bottom'; + textAlign = 'center'; + } + else { + textVerticalAlign = 'middle'; + if (rotationDiff < PI$2 * 1.5 && rotationDiff > PI$2 / 2) { + textAlign = onLeft ? 'left' : 'right'; + } + else { + textAlign = onLeft ? 'right' : 'left'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +function isSilent(axisModel) { + var tooltipOpt = axisModel.get('tooltip'); + return axisModel.get('silent') + // Consider mouse cursor, add these restrictions. + || !( + axisModel.get('triggerEvent') || (tooltipOpt && tooltipOpt.show) + ); +} + +function fixMinMaxLabelShow(axisModel, labelEls, tickEls) { + // If min or max are user set, we need to check + // If the tick on min(max) are overlap on their neighbour tick + // If they are overlapped, we need to hide the min(max) tick label + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + // FIXME + // Have not consider onBand yet, where tick els is more than label els. + + labelEls = labelEls || []; + tickEls = tickEls || []; + + var firstLabel = labelEls[0]; + var nextLabel = labelEls[1]; + var lastLabel = labelEls[labelEls.length - 1]; + var prevLabel = labelEls[labelEls.length - 2]; + + var firstTick = tickEls[0]; + var nextTick = tickEls[1]; + var lastTick = tickEls[tickEls.length - 1]; + var prevTick = tickEls[tickEls.length - 2]; + + if (showMinLabel === false) { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } + else if (isTwoLabelOverlapped(firstLabel, nextLabel)) { + if (showMinLabel) { + ignoreEl(nextLabel); + ignoreEl(nextTick); + } + else { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } + } + + if (showMaxLabel === false) { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } + else if (isTwoLabelOverlapped(prevLabel, lastLabel)) { + if (showMaxLabel) { + ignoreEl(prevLabel); + ignoreEl(prevTick); + } + else { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } + } +} + +function ignoreEl(el) { + el && (el.ignore = true); +} + +function isTwoLabelOverlapped(current, next, labelLayout) { + // current and next has the same rotation. + var firstRect = current && current.getBoundingRect().clone(); + var nextRect = next && next.getBoundingRect().clone(); + + if (!firstRect || !nextRect) { + return; + } + + // When checking intersect of two rotated labels, we use mRotationBack + // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`. + var mRotationBack = identity([]); + rotate(mRotationBack, mRotationBack, -current.rotation); + + firstRect.applyTransform(mul$1([], mRotationBack, current.getLocalTransform())); + nextRect.applyTransform(mul$1([], mRotationBack, next.getLocalTransform())); + + return firstRect.intersect(nextRect); +} + +function isNameLocationCenter(nameLocation) { + return nameLocation === 'middle' || nameLocation === 'center'; +} + +function buildAxisTick(axisBuilder, axisModel, opt) { + var axis = axisModel.axis; + + if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) { + return; + } + + var tickModel = axisModel.getModel('axisTick'); + + var lineStyleModel = tickModel.getModel('lineStyle'); + var tickLen = tickModel.get('length'); + + var ticksCoords = axis.getTicksCoords(); + + var pt1 = []; + var pt2 = []; + var matrix = axisBuilder._transform; + + var tickEls = []; + + for (var i = 0; i < ticksCoords.length; i++) { + var tickCoord = ticksCoords[i].coord; + + pt1[0] = tickCoord; + pt1[1] = 0; + pt2[0] = tickCoord; + pt2[1] = opt.tickDirection * tickLen; + + if (matrix) { + applyTransform(pt1, pt1, matrix); + applyTransform(pt2, pt2, matrix); + } + // Tick line, Not use group transform to have better line draw + var tickEl = new Line(subPixelOptimizeLine({ + // Id for animation + anid: 'tick_' + ticksCoords[i].tickValue, + + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: defaults( + lineStyleModel.getLineStyle(), + { + stroke: axisModel.get('axisLine.lineStyle.color') + } + ), + z2: 2, + silent: true + })); + axisBuilder.group.add(tickEl); + tickEls.push(tickEl); + } + + return tickEls; +} + +function buildAxisLabel(axisBuilder, axisModel, opt) { + var axis = axisModel.axis; + var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show')); + + if (!show || axis.scale.isBlank()) { + return; + } + + var labelModel = axisModel.getModel('axisLabel'); + var labelMargin = labelModel.get('margin'); + var labels = axis.getViewLabels(); + + // Special label rotate. + var labelRotation = ( + retrieve(opt.labelRotate, labelModel.get('rotate')) || 0 + ) * PI$2 / 180; + + var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection); + var rawCategoryData = axisModel.getCategories(true); + + var labelEls = []; + var silent = isSilent(axisModel); + var triggerEvent = axisModel.get('triggerEvent'); + + each$1(labels, function (labelItem, index) { + var tickValue = labelItem.tickValue; + var formattedLabel = labelItem.formattedLabel; + var rawLabel = labelItem.rawLabel; + + var itemLabelModel = labelModel; + if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) { + itemLabelModel = new Model( + rawCategoryData[tickValue].textStyle, labelModel, axisModel.ecModel + ); + } + + var textColor = itemLabelModel.getTextColor() + || axisModel.get('axisLine.lineStyle.color'); + + var tickCoord = axis.dataToCoord(tickValue); + var pos = [ + tickCoord, + opt.labelOffset + opt.labelDirection * labelMargin + ]; + + var textEl = new Text({ + // Id for animation + anid: 'label_' + tickValue, + position: pos, + rotation: labelLayout.rotation, + silent: silent, + z2: 10 + }); + + setTextStyle(textEl.style, itemLabelModel, { + text: formattedLabel, + textAlign: itemLabelModel.getShallow('align', true) + || labelLayout.textAlign, + textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true) + || itemLabelModel.getShallow('baseline', true) + || labelLayout.textVerticalAlign, + textFill: typeof textColor === 'function' + ? textColor( + // (1) In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + // (2) Compatible with previous version, which always use formatted label as + // input. But in interval scale the formatted label is like '223,445', which + // maked user repalce ','. So we modify it to return original val but remain + // it as 'string' to avoid error in replacing. + axis.type === 'category' + ? rawLabel + : axis.type === 'value' + ? tickValue + '' + : tickValue, + index + ) + : textColor + }); + + // Pack data for mouse event + if (triggerEvent) { + textEl.eventData = makeAxisEventDataBase(axisModel); + textEl.eventData.targetType = 'axisLabel'; + textEl.eventData.value = rawLabel; + } + + // FIXME + axisBuilder._dumbGroup.add(textEl); + textEl.updateTransform(); + + labelEls.push(textEl); + axisBuilder.group.add(textEl); + + textEl.decomposeTransform(); + + }); + + return labelEls; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$6 = each$1; +var curry$1 = curry; + +// Build axisPointerModel, mergin tooltip.axisPointer model for each axis. +// allAxesInfo should be updated when setOption performed. +function collect(ecModel, api) { + var result = { + /** + * key: makeKey(axis.model) + * value: { + * axis, + * coordSys, + * axisPointerModel, + * triggerTooltip, + * involveSeries, + * snap, + * seriesModels, + * seriesDataCount + * } + */ + axesInfo: {}, + seriesInvolved: false, + /** + * key: makeKey(coordSys.model) + * value: Object: key makeKey(axis.model), value: axisInfo + */ + coordSysAxesInfo: {}, + coordSysMap: {} + }; + + collectAxesInfo(result, ecModel, api); + + // Check seriesInvolved for performance, in case too many series in some chart. + result.seriesInvolved && collectSeriesInfo(result, ecModel); + + return result; +} + +function collectAxesInfo(result, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var globalAxisPointerModel = ecModel.getComponent('axisPointer'); + // links can only be set on global. + var linksOption = globalAxisPointerModel.get('link', true) || []; + var linkGroups = []; + + // Collect axes info. + each$6(api.getCoordinateSystems(), function (coordSys) { + // Some coordinate system do not support axes, like geo. + if (!coordSys.axisPointerEnabled) { + return; + } + + var coordSysKey = makeKey(coordSys.model); + var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {}; + result.coordSysMap[coordSysKey] = coordSys; + + // Set tooltip (like 'cross') is a convienent way to show axisPointer + // for user. So we enable seting tooltip on coordSys model. + var coordSysModel = coordSys.model; + var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel); + + each$6(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null)); + + // If axis tooltip used, choose tooltip axis for each coordSys. + // Notice this case: coordSys is `grid` but not `cartesian2D` here. + if (coordSys.getTooltipAxes + && globalTooltipModel + // If tooltip.showContent is set as false, tooltip will not + // show but axisPointer will show as normal. + && baseTooltipModel.get('show') + ) { + // Compatible with previous logic. But series.tooltip.trigger: 'axis' + // or series.data[n].tooltip.trigger: 'axis' are not support any more. + var triggerAxis = baseTooltipModel.get('trigger') === 'axis'; + var cross = baseTooltipModel.get('axisPointer.type') === 'cross'; + var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis')); + if (triggerAxis || cross) { + each$6(tooltipAxes.baseAxes, curry$1( + saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis + )); + } + if (cross) { + each$6(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, 'cross', false)); + } + } + + // fromTooltip: true | false | 'cross' + // triggerTooltip: true | false | null + function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) { + var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel); + + var axisPointerShow = axisPointerModel.get('show'); + if (!axisPointerShow || ( + axisPointerShow === 'auto' + && !fromTooltip + && !isHandleTrigger(axisPointerModel) + )) { + return; + } + + if (triggerTooltip == null) { + triggerTooltip = axisPointerModel.get('triggerTooltip'); + } + + axisPointerModel = fromTooltip + ? makeAxisPointerModel( + axis, baseTooltipModel, globalAxisPointerModel, ecModel, + fromTooltip, triggerTooltip + ) + : axisPointerModel; + + var snap = axisPointerModel.get('snap'); + var key = makeKey(axis.model); + var involveSeries = triggerTooltip || snap || axis.type === 'category'; + + // If result.axesInfo[key] exist, override it (tooltip has higher priority). + var axisInfo = result.axesInfo[key] = { + key: key, + axis: axis, + coordSys: coordSys, + axisPointerModel: axisPointerModel, + triggerTooltip: triggerTooltip, + involveSeries: involveSeries, + snap: snap, + useHandle: isHandleTrigger(axisPointerModel), + seriesModels: [] + }; + axesInfoInCoordSys[key] = axisInfo; + result.seriesInvolved |= involveSeries; + + var groupIndex = getLinkGroupIndex(linksOption, axis); + if (groupIndex != null) { + var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {axesInfo: {}}); + linkGroup.axesInfo[key] = axisInfo; + linkGroup.mapper = linksOption[groupIndex].mapper; + axisInfo.linkGroup = linkGroup; + } + } + }); +} + +function makeAxisPointerModel( + axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip +) { + var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer'); + var volatileOption = {}; + + each$6( + [ + 'type', 'snap', 'lineStyle', 'shadowStyle', 'label', + 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z' + ], + function (field) { + volatileOption[field] = clone(tooltipAxisPointerModel.get(field)); + } + ); + + // category axis do not auto snap, otherwise some tick that do not + // has value can not be hovered. value/time/log axis default snap if + // triggered from tooltip and trigger tooltip. + volatileOption.snap = axis.type !== 'category' && !!triggerTooltip; + + // Compatibel with previous behavior, tooltip axis do not show label by default. + // Only these properties can be overrided from tooltip to axisPointer. + if (tooltipAxisPointerModel.get('type') === 'cross') { + volatileOption.type = 'line'; + } + var labelOption = volatileOption.label || (volatileOption.label = {}); + // Follow the convention, do not show label when triggered by tooltip by default. + labelOption.show == null && (labelOption.show = false); + + if (fromTooltip === 'cross') { + // When 'cross', both axes show labels. + var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get('label.show'); + labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true; + // If triggerTooltip, this is a base axis, which should better not use cross style + // (cross style is dashed by default) + if (!triggerTooltip) { + var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle'); + crossStyle && defaults(labelOption, crossStyle.textStyle); + } + } + + return axis.model.getModel( + 'axisPointer', + new Model(volatileOption, globalAxisPointerModel, ecModel) + ); +} + +function collectSeriesInfo(result, ecModel) { + // Prepare data for axis trigger + ecModel.eachSeries(function (seriesModel) { + + // Notice this case: this coordSys is `cartesian2D` but not `grid`. + var coordSys = seriesModel.coordinateSystem; + var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true); + var seriesTooltipShow = seriesModel.get('tooltip.show', true); + if (!coordSys + || seriesTooltipTrigger === 'none' + || seriesTooltipTrigger === false + || seriesTooltipTrigger === 'item' + || seriesTooltipShow === false + || seriesModel.get('axisPointer.show', true) === false + ) { + return; + } + + each$6(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) { + var axis = axisInfo.axis; + if (coordSys.getAxis(axis.dim) === axis) { + axisInfo.seriesModels.push(seriesModel); + axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0); + axisInfo.seriesDataCount += seriesModel.getData().count(); + } + }); + + }, this); +} + +/** + * For example: + * { + * axisPointer: { + * links: [{ + * xAxisIndex: [2, 4], + * yAxisIndex: 'all' + * }, { + * xAxisId: ['a5', 'a7'], + * xAxisName: 'xxx' + * }] + * } + * } + */ +function getLinkGroupIndex(linksOption, axis) { + var axisModel = axis.model; + var dim = axis.dim; + for (var i = 0; i < linksOption.length; i++) { + var linkOption = linksOption[i] || {}; + if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) + || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) + || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name) + ) { + return i; + } + } +} + +function checkPropInLink(linkPropValue, axisPropValue) { + return linkPropValue === 'all' + || (isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0) + || linkPropValue === axisPropValue; +} + +function fixValue(axisModel) { + var axisInfo = getAxisInfo(axisModel); + if (!axisInfo) { + return; + } + + var axisPointerModel = axisInfo.axisPointerModel; + var scale = axisInfo.axis.scale; + var option = axisPointerModel.option; + var status = axisPointerModel.get('status'); + var value = axisPointerModel.get('value'); + + // Parse init value for category and time axis. + if (value != null) { + value = scale.parse(value); + } + + var useHandle = isHandleTrigger(axisPointerModel); + // If `handle` used, `axisPointer` will always be displayed, so value + // and status should be initialized. + if (status == null) { + option.status = useHandle ? 'show' : 'hide'; + } + + var extent = scale.getExtent().slice(); + extent[0] > extent[1] && extent.reverse(); + + if (// Pick a value on axis when initializing. + value == null + // If both `handle` and `dataZoom` are used, value may be out of axis extent, + // where we should re-pick a value to keep `handle` displaying normally. + || value > extent[1] + ) { + // Make handle displayed on the end of the axis when init, which looks better. + value = extent[1]; + } + if (value < extent[0]) { + value = extent[0]; + } + + option.value = value; + + if (useHandle) { + option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show'; + } +} + +function getAxisInfo(axisModel) { + var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo; + return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)]; +} + +function getAxisPointerModel(axisModel) { + var axisInfo = getAxisInfo(axisModel); + return axisInfo && axisInfo.axisPointerModel; +} + +function isHandleTrigger(axisPointerModel) { + return !!axisPointerModel.get('handle.show'); +} + +/** + * @param {module:echarts/model/Model} model + * @return {string} unique key + */ +function makeKey(model) { + return model.type + '||' + model.id; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Base class of AxisView. + */ +var AxisView = extendComponentView({ + + type: 'axis', + + /** + * @private + */ + _axisPointer: null, + + /** + * @protected + * @type {string} + */ + axisPointerClass: null, + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + // FIXME + // This process should proformed after coordinate systems updated + // (axis scale updated), and should be performed each time update. + // So put it here temporarily, although it is not appropriate to + // put a model-writing procedure in `view`. + this.axisPointerClass && fixValue(axisModel); + + AxisView.superApply(this, 'render', arguments); + + updateAxisPointer(this, axisModel, ecModel, api, payload, true); + }, + + /** + * Action handler. + * @public + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + updateAxisPointer: function (axisModel, ecModel, api, payload, force) { + updateAxisPointer(this, axisModel, ecModel, api, payload, false); + }, + + /** + * @override + */ + remove: function (ecModel, api) { + var axisPointer = this._axisPointer; + axisPointer && axisPointer.remove(api); + AxisView.superApply(this, 'remove', arguments); + }, + + /** + * @override + */ + dispose: function (ecModel, api) { + disposeAxisPointer(this, api); + AxisView.superApply(this, 'dispose', arguments); + } + +}); + +function updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) { + var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass); + if (!Clazz) { + return; + } + var axisPointerModel = getAxisPointerModel(axisModel); + axisPointerModel + ? (axisView._axisPointer || (axisView._axisPointer = new Clazz())) + .render(axisModel, axisPointerModel, api, forceRender) + : disposeAxisPointer(axisView, api); +} + +function disposeAxisPointer(axisView, ecModel, api) { + var axisPointer = axisView._axisPointer; + axisPointer && axisPointer.dispose(ecModel, api); + axisView._axisPointer = null; +} + +var axisPointerClazz = []; + +AxisView.registerAxisPointerClass = function (type, clazz) { + if (__DEV__) { + if (axisPointerClazz[type]) { + throw new Error('axisPointer ' + type + ' exists'); + } + } + axisPointerClazz[type] = clazz; +}; + +AxisView.getAxisPointerClass = function (type) { + return type && axisPointerClazz[type]; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Can only be called after coordinate system creation stage. + * (Can be called before coordinate system update stage). + * + * @param {Object} opt {labelInside} + * @return {Object} { + * position, rotation, labelDirection, labelOffset, + * tickDirection, labelRotate, z2 + * } + */ +function layout$1(gridModel, axisModel, opt) { + opt = opt || {}; + var grid = gridModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0]; + + var rawAxisPosition = axis.position; + var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition; + var axisDim = axis.dim; + + var rect = grid.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2}; + var axisOffset = axisModel.get('offset') || 0; + + var posBound = axisDim === 'x' + ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] + : [rectBound[0] - axisOffset, rectBound[1] + axisOffset]; + + if (otherAxisOnZeroOf) { + var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0)); + posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]); + } + + // Axis position + layout.position = [ + axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], + axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3] + ]; + + // Axis rotation + layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1); + + // Tick and label direction, x y is axisDim + var dirMap = {top: -1, bottom: 1, left: -1, right: 1}; + + layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition]; + layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0; + + if (axisModel.get('axisTick.inside')) { + layout.tickDirection = -layout.tickDirection; + } + if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) { + layout.labelDirection = -layout.labelDirection; + } + + // Special label rotation + var labelRotate = axisModel.get('axisLabel.rotate'); + layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate; + + // Over splitLine and splitArea + layout.z2 = 1; + + return layout; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var axisBuilderAttrs = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; +var selfBuilderAttrs = [ + 'splitArea', 'splitLine' +]; + +// function getAlignWithLabel(model, axisModel) { +// var alignWithLabel = model.get('alignWithLabel'); +// if (alignWithLabel === 'auto') { +// alignWithLabel = axisModel.get('axisTick.alignWithLabel'); +// } +// return alignWithLabel; +// } + +var CartesianAxisView = AxisView.extend({ + + type: 'cartesianAxis', + + axisPointerClass: 'CartesianAxisPointer', + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + + this.group.removeAll(); + + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var gridModel = axisModel.getCoordSysModel(); + + var layout = layout$1(gridModel, axisModel); + + var axisBuilder = new AxisBuilder(axisModel, layout); + + each$1(axisBuilderAttrs, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + each$1(selfBuilderAttrs, function (name) { + if (axisModel.get(name + '.show')) { + this['_' + name](axisModel, gridModel); + } + }, this); + + groupTransition(oldAxisGroup, this._axisGroup, axisModel); + + CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload); + }, + + remove: function () { + this._splitAreaColors = null; + }, + + /** + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @private + */ + _splitLine: function (axisModel, gridModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + + lineColors = isArray(lineColors) ? lineColors : [lineColors]; + + var gridRect = gridModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + + var lineCount = 0; + + var ticksCoords = axis.getTicksCoords({ + tickModel: splitLineModel + }); + + var p1 = []; + var p2 = []; + + // Simple optimization + // Batching the lines if color are the same + var lineStyle = lineStyleModel.getLineStyle(); + for (var i = 0; i < ticksCoords.length; i++) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } + else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + + var colorIndex = (lineCount++) % lineColors.length; + var tickValue = ticksCoords[i].tickValue; + this._axisGroup.add(new Line(subPixelOptimizeLine({ + anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null, + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: defaults({ + stroke: lineColors[colorIndex] + }, lineStyle), + silent: true + }))); + } + }, + + /** + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @private + */ + _splitArea: function (axisModel, gridModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitAreaModel = axisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + + var gridRect = gridModel.coordinateSystem.getRect(); + + var ticksCoords = axis.getTicksCoords({ + tickModel: splitAreaModel, + clamp: true + }); + + if (!ticksCoords.length) { + return; + } + + // For Making appropriate splitArea animation, the color and anid + // should be corresponding to previous one if possible. + var areaColorsLen = areaColors.length; + var lastSplitAreaColors = this._splitAreaColors; + var newSplitAreaColors = createHashMap(); + var colorIndex = 0; + if (lastSplitAreaColors) { + for (var i = 0; i < ticksCoords.length; i++) { + var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue); + if (cIndex != null) { + colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen; + break; + } + } + } + + var prev = axis.toGlobalCoord(ticksCoords[0].coord); + + var areaStyle = areaStyleModel.getAreaStyle(); + areaColors = isArray(areaColors) ? areaColors : [areaColors]; + + for (var i = 1; i < ticksCoords.length; i++) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + + var x; + var y; + var width; + var height; + if (axis.isHorizontal()) { + x = prev; + y = gridRect.y; + width = tickCoord - x; + height = gridRect.height; + prev = x + width; + } + else { + x = gridRect.x; + y = prev; + width = gridRect.width; + height = tickCoord - y; + prev = y + height; + } + + var tickValue = ticksCoords[i - 1].tickValue; + tickValue != null && newSplitAreaColors.set(tickValue, colorIndex); + + this._axisGroup.add(new Rect({ + anid: tickValue != null ? 'area_' + tickValue : null, + shape: { + x: x, + y: y, + width: width, + height: height + }, + style: defaults({ + fill: areaColors[colorIndex] + }, areaStyle), + silent: true + })); + + colorIndex = (colorIndex + 1) % areaColorsLen; + } + + this._splitAreaColors = newSplitAreaColors; + } +}); + +CartesianAxisView.extend({ + type: 'xAxis' +}); +CartesianAxisView.extend({ + type: 'yAxis' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Grid view +extendComponentView({ + + type: 'grid', + + render: function (gridModel, ecModel) { + this.group.removeAll(); + if (gridModel.get('show')) { + this.group.add(new Rect({ + shape: gridModel.coordinateSystem.getRect(), + style: defaults({ + fill: gridModel.get('backgroundColor') + }, gridModel.getItemStyle()), + silent: true, + z2: -1 + })); + } + } + +}); + +registerPreprocessor(function (option) { + // Only create grid when need + if (option.xAxis && option.yAxis && !option.grid) { + option.grid = {}; + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// In case developer forget to include grid component +registerVisual(visualSymbol('line', 'circle', 'line')); +registerLayout(pointsLayout('line')); + +// Down sample after filter +registerProcessor( + PRIORITY.PROCESSOR.STATISTIC, + dataSample('line') +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var BaseBarSeries = SeriesModel.extend({ + + type: 'series.__base_bar__', + + getInitialData: function (option, ecModel) { + return createListFromArray(this.getSource(), this); + }, + + getMarkerPosition: function (value) { + var coordSys = this.coordinateSystem; + if (coordSys) { + // PENDING if clamp ? + var pt = coordSys.dataToPoint(coordSys.clampData(value)); + var data = this.getData(); + var offset = data.getLayout('offset'); + var size = data.getLayout('size'); + var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1; + pt[offsetIndex] += offset + size / 2; + return pt; + } + return [NaN, NaN]; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + // stack: null + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // 最小高度改为0 + barMinHeight: 0, + // 最小角度为0,仅对极坐标系下的柱状图有效 + barMinAngle: 0, + // cursor: null, + + large: false, + largeThreshold: 400, + progressive: 3e3, + progressiveChunkMode: 'mod', + + // barMaxWidth: null, + // 默认自适应 + // barWidth: null, + // 柱间距离,默认为柱形宽度的30%,可设固定值 + // barGap: '30%', + // 类目间柱形距离,默认为类目间距的20%,可设固定值 + // barCategoryGap: '20%', + // label: { + // show: false + // }, + itemStyle: {}, + emphasis: {} + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +BaseBarSeries.extend({ + + type: 'series.bar', + + dependencies: ['grid', 'polar'], + + brushSelector: 'rect', + + /** + * @override + */ + getProgressive: function () { + // Do not support progressive in normal mode. + return this.get('large') + ? this.get('progressive') + : false; + }, + + /** + * @override + */ + getProgressiveThreshold: function () { + // Do not support progressive in normal mode. + var progressiveThreshold = this.get('progressiveThreshold'); + var largeThreshold = this.get('largeThreshold'); + if (largeThreshold > progressiveThreshold) { + progressiveThreshold = largeThreshold; + } + return progressiveThreshold; + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function setLabel( + normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside +) { + var labelModel = itemModel.getModel('label'); + var hoverLabelModel = itemModel.getModel('emphasis.label'); + + setLabelStyle( + normalStyle, hoverStyle, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: dataIndex, + defaultText: getDefaultLabel(seriesModel.getData(), dataIndex), + isRectText: true, + autoColor: color + } + ); + + fixPosition(normalStyle); + fixPosition(hoverStyle); +} + +function fixPosition(style, labelPositionOutside) { + if (style.textPosition === 'outside') { + style.textPosition = labelPositionOutside; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var getBarItemStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['stroke', 'borderColor'], + ['lineWidth', 'borderWidth'], + // Compatitable with 2 + ['stroke', 'barBorderColor'], + ['lineWidth', 'barBorderWidth'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] + ] +); + +var barItemStyle = { + getBarItemStyle: function (excludes) { + var style = getBarItemStyle(this, excludes); + if (this.getBorderLineDash) { + var lineDash = this.getBorderLineDash(); + lineDash && (style.lineDash = lineDash); + } + return style; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'barBorderWidth']; + +// FIXME +// Just for compatible with ec2. +extend(Model.prototype, barItemStyle); + +extendChartView({ + + type: 'bar', + + render: function (seriesModel, ecModel, api) { + this._updateDrawMode(seriesModel); + + var coordinateSystemType = seriesModel.get('coordinateSystem'); + + if (coordinateSystemType === 'cartesian2d' + || coordinateSystemType === 'polar' + ) { + this._isLargeDraw + ? this._renderLarge(seriesModel, ecModel, api) + : this._renderNormal(seriesModel, ecModel, api); + } + else if (__DEV__) { + console.warn('Only cartesian2d and polar supported for bar.'); + } + + return this.group; + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + this._clear(); + this._updateDrawMode(seriesModel); + }, + + incrementalRender: function (params, seriesModel, ecModel, api) { + // Do not support progressive in normal mode. + this._incrementalRenderLarge(params, seriesModel); + }, + + _updateDrawMode: function (seriesModel) { + var isLargeDraw = seriesModel.pipelineContext.large; + if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) { + this._isLargeDraw = isLargeDraw; + this._clear(); + } + }, + + _renderNormal: function (seriesModel, ecModel, api) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + + var coord = seriesModel.coordinateSystem; + var baseAxis = coord.getBaseAxis(); + var isHorizontalOrRadial; + + if (coord.type === 'cartesian2d') { + isHorizontalOrRadial = baseAxis.isHorizontal(); + } + else if (coord.type === 'polar') { + isHorizontalOrRadial = baseAxis.dim === 'angle'; + } + + var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null; + + data.diff(oldData) + .add(function (dataIndex) { + if (!data.hasValue(dataIndex)) { + return; + } + + var itemModel = data.getItemModel(dataIndex); + var layout = getLayout[coord.type](data, dataIndex, itemModel); + var el = elementCreator[coord.type]( + data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel + ); + data.setItemGraphicEl(dataIndex, el); + group.add(el); + + updateStyle( + el, data, dataIndex, itemModel, layout, + seriesModel, isHorizontalOrRadial, coord.type === 'polar' + ); + }) + .update(function (newIndex, oldIndex) { + var el = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex)) { + group.remove(el); + return; + } + + var itemModel = data.getItemModel(newIndex); + var layout = getLayout[coord.type](data, newIndex, itemModel); + + if (el) { + updateProps(el, {shape: layout}, animationModel, newIndex); + } + else { + el = elementCreator[coord.type]( + data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true + ); + } + + data.setItemGraphicEl(newIndex, el); + // Add back + group.add(el); + + updateStyle( + el, data, newIndex, itemModel, layout, + seriesModel, isHorizontalOrRadial, coord.type === 'polar' + ); + }) + .remove(function (dataIndex) { + var el = oldData.getItemGraphicEl(dataIndex); + if (coord.type === 'cartesian2d') { + el && removeRect(dataIndex, animationModel, el); + } + else { + el && removeSector(dataIndex, animationModel, el); + } + }) + .execute(); + + this._data = data; + }, + + _renderLarge: function (seriesModel, ecModel, api) { + this._clear(); + createLarge(seriesModel, this.group); + }, + + _incrementalRenderLarge: function (params, seriesModel) { + createLarge(seriesModel, this.group, true); + }, + + dispose: noop, + + remove: function (ecModel) { + this._clear(ecModel); + }, + + _clear: function (ecModel) { + var group = this.group; + var data = this._data; + if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) { + data.eachItemGraphicEl(function (el) { + if (el.type === 'sector') { + removeSector(el.dataIndex, ecModel, el); + } + else { + removeRect(el.dataIndex, ecModel, el); + } + }); + } + else { + group.removeAll(); + } + this._data = null; + } + +}); + +var elementCreator = { + + cartesian2d: function ( + data, dataIndex, itemModel, layout, isHorizontal, + animationModel, isUpdate + ) { + var rect = new Rect({shape: extend({}, layout)}); + + // Animation + if (animationModel) { + var rectShape = rect.shape; + var animateProperty = isHorizontal ? 'height' : 'width'; + var animateTarget = {}; + rectShape[animateProperty] = 0; + animateTarget[animateProperty] = layout[animateProperty]; + graphic[isUpdate ? 'updateProps' : 'initProps'](rect, { + shape: animateTarget + }, animationModel, dataIndex); + } + + return rect; + }, + + polar: function ( + data, dataIndex, itemModel, layout, isRadial, + animationModel, isUpdate + ) { + // Keep the same logic with bar in catesion: use end value to control + // direction. Notice that if clockwise is true (by default), the sector + // will always draw clockwisely, no matter whether endAngle is greater + // or less than startAngle. + var clockwise = layout.startAngle < layout.endAngle; + var sector = new Sector({ + shape: defaults({clockwise: clockwise}, layout) + }); + + // Animation + if (animationModel) { + var sectorShape = sector.shape; + var animateProperty = isRadial ? 'r' : 'endAngle'; + var animateTarget = {}; + sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle; + animateTarget[animateProperty] = layout[animateProperty]; + graphic[isUpdate ? 'updateProps' : 'initProps'](sector, { + shape: animateTarget + }, animationModel, dataIndex); + } + + return sector; + } +}; + +function removeRect(dataIndex, animationModel, el) { + // Not show text when animating + el.style.text = null; + updateProps(el, { + shape: { + width: 0 + } + }, animationModel, dataIndex, function () { + el.parent && el.parent.remove(el); + }); +} + +function removeSector(dataIndex, animationModel, el) { + // Not show text when animating + el.style.text = null; + updateProps(el, { + shape: { + r: el.shape.r0 + } + }, animationModel, dataIndex, function () { + el.parent && el.parent.remove(el); + }); +} + +var getLayout = { + cartesian2d: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + var fixedLineWidth = getLineWidth(itemModel, layout); + + // fix layout with lineWidth + var signX = layout.width > 0 ? 1 : -1; + var signY = layout.height > 0 ? 1 : -1; + return { + x: layout.x + signX * fixedLineWidth / 2, + y: layout.y + signY * fixedLineWidth / 2, + width: layout.width - signX * fixedLineWidth, + height: layout.height - signY * fixedLineWidth + }; + }, + + polar: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + return { + cx: layout.cx, + cy: layout.cy, + r0: layout.r0, + r: layout.r, + startAngle: layout.startAngle, + endAngle: layout.endAngle + }; + } +}; + +function updateStyle( + el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar +) { + var color = data.getItemVisual(dataIndex, 'color'); + var opacity = data.getItemVisual(dataIndex, 'opacity'); + var itemStyleModel = itemModel.getModel('itemStyle'); + var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle(); + + if (!isPolar) { + el.setShape('r', itemStyleModel.get('barBorderRadius') || 0); + } + + el.useStyle(defaults( + { + fill: color, + opacity: opacity + }, + itemStyleModel.getBarItemStyle() + )); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && el.attr('cursor', cursorStyle); + + var labelPositionOutside = isHorizontal + ? (layout.height > 0 ? 'bottom' : 'top') + : (layout.width > 0 ? 'left' : 'right'); + + if (!isPolar) { + setLabel( + el.style, hoverStyle, itemModel, color, + seriesModel, dataIndex, labelPositionOutside + ); + } + + setHoverStyle(el, hoverStyle); +} + +// In case width or height are too small. +function getLineWidth(itemModel, rawLayout) { + var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0; + return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height)); +} + + +var LargePath = Path.extend({ + + type: 'largeBar', + + shape: {points: []}, + + buildPath: function (ctx, shape) { + // Drawing lines is more efficient than drawing + // a whole line or drawing rects. + var points = shape.points; + var startPoint = this.__startPoint; + var valueIdx = this.__valueIdx; + + for (var i = 0; i < points.length; i += 2) { + startPoint[this.__valueIdx] = points[i + valueIdx]; + ctx.moveTo(startPoint[0], startPoint[1]); + ctx.lineTo(points[i], points[i + 1]); + } + } +}); + +function createLarge(seriesModel, group, incremental) { + // TODO support polar + var data = seriesModel.getData(); + var startPoint = []; + var valueIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0; + startPoint[1 - valueIdx] = data.getLayout('valueAxisStart'); + + var el = new LargePath({ + shape: {points: data.getLayout('largePoints')}, + incremental: !!incremental, + __startPoint: startPoint, + __valueIdx: valueIdx + }); + group.add(el); + setLargeStyle(el, seriesModel, data); +} + +function setLargeStyle(el, seriesModel, data) { + var borderColor = data.getVisual('borderColor') || data.getVisual('color'); + var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']); + + el.useStyle(itemStyle); + el.style.fill = null; + el.style.stroke = borderColor; + el.style.lineWidth = data.getLayout('barWidth'); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// In case developer forget to include grid component +registerLayout(curry(layout, 'bar')); +// Should after normal bar layout, otherwise it is blocked by normal bar layout. +registerLayout(largeLayout); + +registerVisual({ + seriesType: 'bar', + reset: function (seriesModel) { + // Visual coding for legend + seriesModel.getData().setVisual('legendSymbol', 'roundRect'); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +/** + * [Usage]: + * (1) + * createListSimply(seriesModel, ['value']); + * (2) + * createListSimply(seriesModel, { + * coordDimensions: ['value'], + * dimensionsCount: 5 + * }); + * + * @param {module:echarts/model/Series} seriesModel + * @param {Object|Array.} opt opt or coordDimensions + * The options in opt, see `echarts/data/helper/createDimensions` + * @param {Array.} [nameList] + * @return {module:echarts/data/List} + */ +var createListSimply = function (seriesModel, opt, nameList) { + opt = isArray(opt) && {coordDimensions: opt} || extend({}, opt); + + var source = seriesModel.getSource(); + + var dimensionsInfo = createDimensions(source, opt); + + var list = new List(dimensionsInfo, seriesModel); + list.initData(source, nameList); + + return list; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Data selectable mixin for chart series. + * To eanble data select, option of series must have `selectedMode`. + * And each data item will use `selected` to toggle itself selected status + */ + +var selectableMixin = { + + /** + * @param {Array.} targetList [{name, value, selected}, ...] + * If targetList is an array, it should like [{name: ..., value: ...}, ...]. + * If targetList is a "List", it must have coordDim: 'value' dimension and name. + */ + updateSelectedMap: function (targetList) { + this._targetList = isArray(targetList) ? targetList.slice() : []; + + this._selectTargetMap = reduce(targetList || [], function (targetMap, target) { + targetMap.set(target.name, target); + return targetMap; + }, createHashMap()); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + // PENGING If selectedMode is null ? + select: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + var selectedMode = this.get('selectedMode'); + if (selectedMode === 'single') { + this._selectTargetMap.each(function (target) { + target.selected = false; + }); + } + target && (target.selected = true); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + unSelect: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + // var selectedMode = this.get('selectedMode'); + // selectedMode !== 'single' && target && (target.selected = false); + target && (target.selected = false); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + toggleSelected: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + if (target != null) { + this[target.selected ? 'unSelect' : 'select'](name, id); + return target.selected; + } + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + isSelected: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + return target && target.selected; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PieSeries = extendSeriesModel({ + + type: 'series.pie', + + // Overwrite + init: function (option) { + PieSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + + this.updateSelectedMap(this._createSelectableList()); + + this._defaultLabelLine(option); + }, + + // Overwrite + mergeOption: function (newOption) { + PieSeries.superCall(this, 'mergeOption', newOption); + + this.updateSelectedMap(this._createSelectableList()); + }, + + getInitialData: function (option, ecModel) { + return createListSimply(this, ['value']); + }, + + _createSelectableList: function () { + var data = this.getRawData(); + var valueDim = data.mapDimension('value'); + var targetList = []; + for (var i = 0, len = data.count(); i < len; i++) { + targetList.push({ + name: data.getName(i), + value: data.get(valueDim, i), + selected: retrieveRawAttr(data, i, 'selected') + }); + } + return targetList; + }, + + // Overwrite + getDataParams: function (dataIndex) { + var data = this.getData(); + var params = PieSeries.superCall(this, 'getDataParams', dataIndex); + // FIXME toFixed? + + var valueList = []; + data.each(data.mapDimension('value'), function (value) { + valueList.push(value); + }); + + params.percent = getPercentWithPrecision( + valueList, + dataIndex, + data.hostModel.get('percentPrecision') + ); + + params.$vars.push('percent'); + return params; + }, + + _defaultLabelLine: function (option) { + // Extend labelLine emphasis + defaultEmphasis(option, 'labelLine', ['show']); + + var labelLineNormalOpt = option.labelLine; + var labelLineEmphasisOpt = option.emphasis.labelLine; + // Not show label line if `label.normal.show = false` + labelLineNormalOpt.show = labelLineNormalOpt.show + && option.label.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show + && option.emphasis.label.show; + }, + + defaultOption: { + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // 默认全局居中 + center: ['50%', '50%'], + radius: [0, '75%'], + // 默认顺时针 + clockwise: true, + startAngle: 90, + // 最小角度改为0 + minAngle: 0, + // 选中时扇区偏移量 + selectedOffset: 10, + // 高亮扇区偏移量 + hoverOffset: 10, + + // If use strategy to avoid label overlapping + avoidLabelOverlap: true, + // 选择模式,默认关闭,可选single,multiple + // selectedMode: false, + // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积) + // roseType: null, + + percentPrecision: 2, + + // If still show when all data zero. + stillShowZeroSum: true, + + // cursor: null, + + label: { + // If rotate around circle + rotate: false, + show: true, + // 'outer', 'inside', 'center' + position: 'outer' + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + // 默认使用全局文本样式,详见TEXTSTYLE + // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数 + }, + // Enabled when label.normal.position is 'outer' + labelLine: { + show: true, + // 引导线两段中的第一段长度 + length: 15, + // 引导线两段中的第二段长度 + length2: 15, + smooth: false, + lineStyle: { + // color: 各异, + width: 1, + type: 'solid' + } + }, + itemStyle: { + borderWidth: 1 + }, + + // Animation type canbe expansion, scale + animationType: 'expansion', + + animationEasing: 'cubicOut' + } +}); + +mixin(PieSeries, selectableMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/model/Series} seriesModel + * @param {boolean} hasAnimation + * @inner + */ +function updateDataSelected(uid, seriesModel, hasAnimation, api) { + var data = seriesModel.getData(); + var dataIndex = this.dataIndex; + var name = data.getName(dataIndex); + var selectedOffset = seriesModel.get('selectedOffset'); + + api.dispatchAction({ + type: 'pieToggleSelect', + from: uid, + name: name, + seriesId: seriesModel.id + }); + + data.each(function (idx) { + toggleItemSelected( + data.getItemGraphicEl(idx), + data.getItemLayout(idx), + seriesModel.isSelected(data.getName(idx)), + selectedOffset, + hasAnimation + ); + }); +} + +/** + * @param {module:zrender/graphic/Sector} el + * @param {Object} layout + * @param {boolean} isSelected + * @param {number} selectedOffset + * @param {boolean} hasAnimation + * @inner + */ +function toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) { + var midAngle = (layout.startAngle + layout.endAngle) / 2; + + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + + var offset = isSelected ? selectedOffset : 0; + var position = [dx * offset, dy * offset]; + + hasAnimation + // animateTo will stop revious animation like update transition + ? el.animate() + .when(200, { + position: position + }) + .start('bounceOut') + : el.attr('position', position); +} + +/** + * Piece of pie including Sector, Label, LabelLine + * @constructor + * @extends {module:zrender/graphic/Group} + */ +function PiePiece(data, idx) { + + Group.call(this); + + var sector = new Sector({ + z2: 2 + }); + var polyline = new Polyline(); + var text = new Text(); + this.add(sector); + this.add(polyline); + this.add(text); + + this.updateData(data, idx, true); + + // Hover to change label and labelLine + function onEmphasis() { + polyline.ignore = polyline.hoverIgnore; + text.ignore = text.hoverIgnore; + } + function onNormal() { + polyline.ignore = polyline.normalIgnore; + text.ignore = text.normalIgnore; + } + this.on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('mouseover', onEmphasis) + .on('mouseout', onNormal); +} + +var piePieceProto = PiePiece.prototype; + +piePieceProto.updateData = function (data, idx, firstCreate) { + + var sector = this.childAt(0); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var sectorShape = extend({}, layout); + sectorShape.label = null; + + if (firstCreate) { + sector.setShape(sectorShape); + + var animationType = seriesModel.getShallow('animationType'); + if (animationType === 'scale') { + sector.shape.r = layout.r0; + initProps(sector, { + shape: { + r: layout.r + } + }, seriesModel, idx); + } + // Expansion + else { + sector.shape.endAngle = layout.startAngle; + updateProps(sector, { + shape: { + endAngle: layout.endAngle + } + }, seriesModel, idx); + } + + } + else { + updateProps(sector, { + shape: sectorShape + }, seriesModel, idx); + } + + // Update common style + var visualColor = data.getItemVisual(idx, 'color'); + + sector.useStyle( + defaults( + { + lineJoin: 'bevel', + fill: visualColor + }, + itemModel.getModel('itemStyle').getItemStyle() + ) + ); + sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle(); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && sector.attr('cursor', cursorStyle); + + // Toggle selected + toggleItemSelected( + this, + data.getItemLayout(idx), + seriesModel.isSelected(null, idx), + seriesModel.get('selectedOffset'), + seriesModel.get('animation') + ); + + function onEmphasis() { + // Sector may has animation of updating data. Force to move to the last frame + // Or it may stopped on the wrong shape + sector.stopAnimation(true); + sector.animateTo({ + shape: { + r: layout.r + seriesModel.get('hoverOffset') + } + }, 300, 'elasticOut'); + } + function onNormal() { + sector.stopAnimation(true); + sector.animateTo({ + shape: { + r: layout.r + } + }, 300, 'elasticOut'); + } + sector.off('mouseover').off('mouseout').off('emphasis').off('normal'); + if (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled()) { + sector + .on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + } + + this._updateLabel(data, idx); + + setHoverStyle(this); +}; + +piePieceProto._updateLabel = function (data, idx) { + + var labelLine = this.childAt(1); + var labelText = this.childAt(2); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var labelLayout = layout.label; + var visualColor = data.getItemVisual(idx, 'color'); + + updateProps(labelLine, { + shape: { + points: labelLayout.linePoints || [ + [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y] + ] + } + }, seriesModel, idx); + + updateProps(labelText, { + style: { + x: labelLayout.x, + y: labelLayout.y + } + }, seriesModel, idx); + labelText.attr({ + rotation: labelLayout.rotation, + origin: [labelLayout.x, labelLayout.y], + z2: 10 + }); + + var labelModel = itemModel.getModel('label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + var labelLineModel = itemModel.getModel('labelLine'); + var labelLineHoverModel = itemModel.getModel('emphasis.labelLine'); + var visualColor = data.getItemVisual(idx, 'color'); + + setLabelStyle( + labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + defaultText: data.getName(idx), + autoColor: visualColor, + useInsideStyle: !!labelLayout.inside + }, + { + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.verticalAlign, + opacity: data.getItemVisual(idx, 'opacity') + } + ); + + labelText.ignore = labelText.normalIgnore = !labelModel.get('show'); + labelText.hoverIgnore = !labelHoverModel.get('show'); + + labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show'); + labelLine.hoverIgnore = !labelLineHoverModel.get('show'); + + // Default use item visual color + labelLine.setStyle({ + stroke: visualColor, + opacity: data.getItemVisual(idx, 'opacity') + }); + labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle()); + + labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle(); + + var smooth = labelLineModel.get('smooth'); + if (smooth && smooth === true) { + smooth = 0.4; + } + labelLine.setShape({ + smooth: smooth + }); +}; + +inherits(PiePiece, Group); + + +// Pie view +var PieView = Chart.extend({ + + type: 'pie', + + init: function () { + var sectorGroup = new Group(); + this._sectorGroup = sectorGroup; + }, + + render: function (seriesModel, ecModel, api, payload) { + if (payload && (payload.from === this.uid)) { + return; + } + + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + + var hasAnimation = ecModel.get('animation'); + var isFirstRender = !oldData; + var animationType = seriesModel.get('animationType'); + + var onSectorClick = curry( + updateDataSelected, this.uid, seriesModel, hasAnimation, api + ); + + var selectedMode = seriesModel.get('selectedMode'); + + data.diff(oldData) + .add(function (idx) { + var piePiece = new PiePiece(data, idx); + // Default expansion animation + if (isFirstRender && animationType !== 'scale') { + piePiece.eachChild(function (child) { + child.stopAnimation(true); + }); + } + + selectedMode && piePiece.on('click', onSectorClick); + + data.setItemGraphicEl(idx, piePiece); + + group.add(piePiece); + }) + .update(function (newIdx, oldIdx) { + var piePiece = oldData.getItemGraphicEl(oldIdx); + + piePiece.updateData(data, newIdx); + + piePiece.off('click'); + selectedMode && piePiece.on('click', onSectorClick); + group.add(piePiece); + data.setItemGraphicEl(newIdx, piePiece); + }) + .remove(function (idx) { + var piePiece = oldData.getItemGraphicEl(idx); + group.remove(piePiece); + }) + .execute(); + + if ( + hasAnimation && isFirstRender && data.count() > 0 + // Default expansion animation + && animationType !== 'scale' + ) { + var shape = data.getItemLayout(0); + var r = Math.max(api.getWidth(), api.getHeight()) / 2; + + var removeClipPath = bind(group.removeClipPath, group); + group.setClipPath(this._createClipPath( + shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel + )); + } + else { + // clipPath is used in first-time animation, so remove it when otherwise. See: #8994 + group.removeClipPath(); + } + + this._data = data; + }, + + dispose: function () {}, + + _createClipPath: function ( + cx, cy, r, startAngle, clockwise, cb, seriesModel + ) { + var clipPath = new Sector({ + shape: { + cx: cx, + cy: cy, + r0: 0, + r: r, + startAngle: startAngle, + endAngle: startAngle, + clockwise: clockwise + } + }); + + initProps(clipPath, { + shape: { + endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2 + } + }, seriesModel, cb); + + return clipPath; + }, + + /** + * @implement + */ + containPoint: function (point, seriesModel) { + var data = seriesModel.getData(); + var itemLayout = data.getItemLayout(0); + if (itemLayout) { + var dx = point[0] - itemLayout.cx; + var dy = point[1] - itemLayout.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + return radius <= itemLayout.r && radius >= itemLayout.r0; + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var createDataSelectAction = function (seriesType, actionInfos) { + each$1(actionInfos, function (actionInfo) { + actionInfo.update = 'updateView'; + /** + * @payload + * @property {string} seriesName + * @property {string} name + */ + registerAction(actionInfo, function (payload, ecModel) { + var selected = {}; + ecModel.eachComponent( + {mainType: 'series', subType: seriesType, query: payload}, + function (seriesModel) { + if (seriesModel[actionInfo.method]) { + seriesModel[actionInfo.method]( + payload.name, + payload.dataIndex + ); + } + var data = seriesModel.getData(); + // Create selected map + data.each(function (idx) { + var name = data.getName(idx); + selected[name] = seriesModel.isSelected(name) + || false; + }); + } + ); + return { + name: payload.name, + selected: selected + }; + }); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Pick color from palette for each data item. +// Applicable for charts that require applying color palette +// in data level (like pie, funnel, chord). +var dataColor = function (seriesType) { + return { + getTargetSeries: function (ecModel) { + // Pie and funnel may use diferrent scope + var paletteScope = {}; + var seiresModelMap = createHashMap(); + + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + seriesModel.__paletteScope = paletteScope; + seiresModelMap.set(seriesModel.uid, seriesModel); + }); + + return seiresModelMap; + }, + reset: function (seriesModel, ecModel) { + var dataAll = seriesModel.getRawData(); + var idxMap = {}; + var data = seriesModel.getData(); + + data.each(function (idx) { + var rawIdx = data.getRawIndex(idx); + idxMap[rawIdx] = idx; + }); + + dataAll.each(function (rawIdx) { + var filteredIdx = idxMap[rawIdx]; + + // If series.itemStyle.normal.color is a function. itemVisual may be encoded + var singleDataColor = filteredIdx != null + && data.getItemVisual(filteredIdx, 'color', true); + + if (!singleDataColor) { + // FIXME Performance + var itemModel = dataAll.getItemModel(rawIdx); + + var color = itemModel.get('itemStyle.color') + || seriesModel.getColorFromPalette( + dataAll.getName(rawIdx) || (rawIdx + ''), seriesModel.__paletteScope, + dataAll.count() + ); + // Legend may use the visual info in data before processed + dataAll.setItemVisual(rawIdx, 'color', color); + + // Data is not filtered + if (filteredIdx != null) { + data.setItemVisual(filteredIdx, 'color', color); + } + } + else { + // Set data all color for legend + dataAll.setItemVisual(rawIdx, 'color', singleDataColor); + } + }); + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME emphasis label position is not same with normal label position + +function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) { + list.sort(function (a, b) { + return a.y - b.y; + }); + + // 压 + function shiftDown(start, end, delta, dir) { + for (var j = start; j < end; j++) { + list[j].y += delta; + if (j > start + && j + 1 < end + && list[j + 1].y > list[j].y + list[j].height + ) { + shiftUp(j, delta / 2); + return; + } + } + + shiftUp(end - 1, delta / 2); + } + + // 弹 + function shiftUp(end, delta) { + for (var j = end; j >= 0; j--) { + list[j].y -= delta; + if (j > 0 + && list[j].y > list[j - 1].y + list[j - 1].height + ) { + break; + } + } + } + + function changeX(list, isDownList, cx, cy, r, dir) { + var lastDeltaX = dir > 0 + ? isDownList // 右侧 + ? Number.MAX_VALUE // 下 + : 0 // 上 + : isDownList // 左侧 + ? Number.MAX_VALUE // 下 + : 0; // 上 + + for (var i = 0, l = list.length; i < l; i++) { + // Not change x for center label + if (list[i].position === 'center') { + continue; + } + var deltaY = Math.abs(list[i].y - cy); + var length = list[i].len; + var length2 = list[i].len2; + var deltaX = (deltaY < r + length) + ? Math.sqrt( + (r + length + length2) * (r + length + length2) + - deltaY * deltaY + ) + : Math.abs(list[i].x - cx); + if (isDownList && deltaX >= lastDeltaX) { + // 右下,左下 + deltaX = lastDeltaX - 10; + } + if (!isDownList && deltaX <= lastDeltaX) { + // 右上,左上 + deltaX = lastDeltaX + 10; + } + + list[i].x = cx + deltaX * dir; + lastDeltaX = deltaX; + } + } + + var lastY = 0; + var delta; + var len = list.length; + var upList = []; + var downList = []; + for (var i = 0; i < len; i++) { + delta = list[i].y - lastY; + if (delta < 0) { + shiftDown(i, len, -delta, dir); + } + lastY = list[i].y + list[i].height; + } + if (viewHeight - lastY < 0) { + shiftUp(len - 1, lastY - viewHeight); + } + for (var i = 0; i < len; i++) { + if (list[i].y >= cy) { + downList.push(list[i]); + } + else { + upList.push(list[i]); + } + } + changeX(upList, false, cx, cy, r, dir); + changeX(downList, true, cx, cy, r, dir); +} + +function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) { + var leftList = []; + var rightList = []; + for (var i = 0; i < labelLayoutList.length; i++) { + if (labelLayoutList[i].x < cx) { + leftList.push(labelLayoutList[i]); + } + else { + rightList.push(labelLayoutList[i]); + } + } + + adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight); + adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight); + + for (var i = 0; i < labelLayoutList.length; i++) { + var linePoints = labelLayoutList[i].linePoints; + if (linePoints) { + var dist = linePoints[1][0] - linePoints[2][0]; + if (labelLayoutList[i].x < cx) { + linePoints[2][0] = labelLayoutList[i].x + 3; + } + else { + linePoints[2][0] = labelLayoutList[i].x - 3; + } + linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y; + linePoints[1][0] = linePoints[2][0] + dist; + } + } +} + +var labelLayout = function (seriesModel, r, viewWidth, viewHeight) { + var data = seriesModel.getData(); + var labelLayoutList = []; + var cx; + var cy; + var hasLabelRotate = false; + + data.each(function (idx) { + var layout = data.getItemLayout(idx); + + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label'); + // Use position in normal or emphasis + var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position'); + + var labelLineModel = itemModel.getModel('labelLine'); + var labelLineLen = labelLineModel.get('length'); + var labelLineLen2 = labelLineModel.get('length2'); + + var midAngle = (layout.startAngle + layout.endAngle) / 2; + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + + var textX; + var textY; + var linePoints; + var textAlign; + + cx = layout.cx; + cy = layout.cy; + + var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner'; + if (labelPosition === 'center') { + textX = layout.cx; + textY = layout.cy; + textAlign = 'center'; + } + else { + var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx; + var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy; + + textX = x1 + dx * 3; + textY = y1 + dy * 3; + + if (!isLabelInside) { + // For roseType + var x2 = x1 + dx * (labelLineLen + r - layout.r); + var y2 = y1 + dy * (labelLineLen + r - layout.r); + var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2); + var y3 = y2; + + textX = x3 + (dx < 0 ? -5 : 5); + textY = y3; + linePoints = [[x1, y1], [x2, y2], [x3, y3]]; + } + + textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right'); + } + var font = labelModel.getFont(); + + var labelRotate = labelModel.get('rotate') + ? (dx < 0 ? -midAngle + Math.PI : -midAngle) : 0; + var text = seriesModel.getFormattedLabel(idx, 'normal') + || data.getName(idx); + var textRect = getBoundingRect( + text, font, textAlign, 'top' + ); + hasLabelRotate = !!labelRotate; + layout.label = { + x: textX, + y: textY, + position: labelPosition, + height: textRect.height, + len: labelLineLen, + len2: labelLineLen2, + linePoints: linePoints, + textAlign: textAlign, + verticalAlign: 'middle', + rotation: labelRotate, + inside: isLabelInside + }; + + // Not layout the inside label + if (!isLabelInside) { + labelLayoutList.push(layout.label); + } + }); + if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) { + avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var PI2$4 = Math.PI * 2; +var RADIAN = Math.PI / 180; + +var pieLayout = function (seriesType, ecModel, api, payload) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + + var center = seriesModel.get('center'); + var radius = seriesModel.get('radius'); + + if (!isArray(radius)) { + radius = [0, radius]; + } + if (!isArray(center)) { + center = [center, center]; + } + + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], width); + var cy = parsePercent$1(center[1], height); + var r0 = parsePercent$1(radius[0], size / 2); + var r = parsePercent$1(radius[1], size / 2); + + var startAngle = -seriesModel.get('startAngle') * RADIAN; + + var minAngle = seriesModel.get('minAngle') * RADIAN; + + var validDataCount = 0; + data.each(valueDim, function (value) { + !isNaN(value) && validDataCount++; + }); + + var sum = data.getSum(valueDim); + // Sum may be 0 + var unitRadian = Math.PI / (sum || validDataCount) * 2; + + var clockwise = seriesModel.get('clockwise'); + + var roseType = seriesModel.get('roseType'); + var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); + + // [0...max] + var extent = data.getDataExtent(valueDim); + extent[0] = 0; + + // In the case some sector angle is smaller than minAngle + var restAngle = PI2$4; + var valueSumLargerThanMinAngle = 0; + + var currentAngle = startAngle; + var dir = clockwise ? 1 : -1; + + data.each(valueDim, function (value, idx) { + var angle; + if (isNaN(value)) { + data.setItemLayout(idx, { + angle: NaN, + startAngle: NaN, + endAngle: NaN, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType + ? NaN + : r + }); + return; + } + + // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样? + if (roseType !== 'area') { + angle = (sum === 0 && stillShowZeroSum) + ? unitRadian : (value * unitRadian); + } + else { + angle = PI2$4 / validDataCount; + } + + if (angle < minAngle) { + angle = minAngle; + restAngle -= minAngle; + } + else { + valueSumLargerThanMinAngle += value; + } + + var endAngle = currentAngle + dir * angle; + data.setItemLayout(idx, { + angle: angle, + startAngle: currentAngle, + endAngle: endAngle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType + ? linearMap(value, extent, [r0, r]) + : r + }); + + currentAngle = endAngle; + }); + + // Some sector is constrained by minAngle + // Rest sectors needs recalculate angle + if (restAngle < PI2$4 && validDataCount) { + // Average the angle if rest angle is not enough after all angles is + // Constrained by minAngle + if (restAngle <= 1e-3) { + var angle = PI2$4 / validDataCount; + data.each(valueDim, function (value, idx) { + if (!isNaN(value)) { + var layout = data.getItemLayout(idx); + layout.angle = angle; + layout.startAngle = startAngle + dir * idx * angle; + layout.endAngle = startAngle + dir * (idx + 1) * angle; + } + }); + } + else { + unitRadian = restAngle / valueSumLargerThanMinAngle; + currentAngle = startAngle; + data.each(valueDim, function (value, idx) { + if (!isNaN(value)) { + var layout = data.getItemLayout(idx); + var angle = layout.angle === minAngle + ? minAngle : value * unitRadian; + layout.startAngle = currentAngle; + layout.endAngle = currentAngle + dir * angle; + currentAngle += dir * angle; + } + }); + } + } + + labelLayout(seriesModel, r, width, height); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var dataFilter = function (seriesType) { + return { + seriesType: seriesType, + reset: function (seriesModel, ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (!legendModels || !legendModels.length) { + return; + } + var data = seriesModel.getData(); + data.filterSelf(function (idx) { + var name = data.getName(idx); + // If in any legend component the status is not selected. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(name)) { + return false; + } + } + return true; + }); + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +createDataSelectAction('pie', [{ + type: 'pieToggleSelect', + event: 'pieselectchanged', + method: 'toggleSelected' +}, { + type: 'pieSelect', + event: 'pieselected', + method: 'select' +}, { + type: 'pieUnSelect', + event: 'pieunselected', + method: 'unSelect' +}]); + +registerVisual(dataColor('pie')); +registerLayout(curry(pieLayout, 'pie')); +registerProcessor(dataFilter('pie')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.scatter', + + dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'], + + getInitialData: function (option, ecModel) { + return createListFromArray(this.getSource(), this); + }, + + brushSelector: 'point', + + getProgressive: function () { + var progressive = this.option.progressive; + if (progressive == null) { + // PENDING + return this.option.large ? 5e3 : this.get('progressive'); + } + return progressive; + }, + + getProgressiveThreshold: function () { + var progressiveThreshold = this.option.progressiveThreshold; + if (progressiveThreshold == null) { + // PENDING + return this.option.large ? 1e4 : this.get('progressiveThreshold'); + } + return progressiveThreshold; + }, + + defaultOption: { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // symbol: null, // 图形类型 + symbolSize: 10, // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + // symbolRotate: null, // 图形旋转控制 + + large: false, + // Available when large is true + largeThreshold: 2000, + // cursor: null, + + // label: { + // show: false + // distance: 5, + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为 + // 'inside'|'left'|'right'|'top'|'bottom' + // 默认使用全局文本样式,详见TEXTSTYLE + // }, + itemStyle: { + opacity: 0.8 + // color: 各异 + } + + // progressive: null + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float32Array */ + +// TODO Batch by color + +var BOOST_SIZE_THRESHOLD = 4; + +var LargeSymbolPath = extendShape({ + + shape: { + points: null + }, + + symbolProxy: null, + + buildPath: function (path, shape) { + var points = shape.points; + var size = shape.size; + + var symbolProxy = this.symbolProxy; + var symbolProxyShape = symbolProxy.shape; + var ctx = path.getContext ? path.getContext() : path; + var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD; + + // Do draw in afterBrush. + if (canBoost) { + return; + } + + for (var i = 0; i < points.length;) { + var x = points[i++]; + var y = points[i++]; + + if (isNaN(x) || isNaN(y)) { + continue; + } + + symbolProxyShape.x = x - size[0] / 2; + symbolProxyShape.y = y - size[1] / 2; + symbolProxyShape.width = size[0]; + symbolProxyShape.height = size[1]; + + symbolProxy.buildPath(path, symbolProxyShape, true); + } + }, + + afterBrush: function (ctx) { + var shape = this.shape; + var points = shape.points; + var size = shape.size; + var canBoost = size[0] < BOOST_SIZE_THRESHOLD; + + if (!canBoost) { + return; + } + + this.setTransform(ctx); + // PENDING If style or other canvas status changed? + for (var i = 0; i < points.length;) { + var x = points[i++]; + var y = points[i++]; + if (isNaN(x) || isNaN(y)) { + continue; + } + // fillRect is faster than building a rect path and draw. + // And it support light globalCompositeOperation. + ctx.fillRect( + x - size[0] / 2, y - size[1] / 2, + size[0], size[1] + ); + } + + this.restoreTransform(ctx); + }, + + findDataIndex: function (x, y) { + // TODO ??? + // Consider transform + + var shape = this.shape; + var points = shape.points; + var size = shape.size; + + var w = Math.max(size[0], 4); + var h = Math.max(size[1], 4); + + // Not consider transform + // Treat each element as a rect + // top down traverse + for (var idx = points.length / 2 - 1; idx >= 0; idx--) { + var i = idx * 2; + var x0 = points[i] - w / 2; + var y0 = points[i + 1] - h / 2; + if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) { + return idx; + } + } + + return -1; + } +}); + +function LargeSymbolDraw() { + this.group = new Group(); +} + +var largeSymbolProto = LargeSymbolDraw.prototype; + +largeSymbolProto.isPersistent = function () { + return !this._incremental; +}; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + */ +largeSymbolProto.updateData = function (data) { + this.group.removeAll(); + var symbolEl = new LargeSymbolPath({ + rectHover: true, + cursor: 'default' + }); + + symbolEl.setShape({ + points: data.getLayout('symbolPoints') + }); + this._setCommon(symbolEl, data); + this.group.add(symbolEl); + + this._incremental = null; +}; + +largeSymbolProto.updateLayout = function (data) { + if (this._incremental) { + return; + } + + var points = data.getLayout('symbolPoints'); + this.group.eachChild(function (child) { + if (child.startIndex != null) { + var len = (child.endIndex - child.startIndex) * 2; + var byteOffset = child.startIndex * 4 * 2; + points = new Float32Array(points.buffer, byteOffset, len); + } + child.setShape('points', points); + }); +}; + +largeSymbolProto.incrementalPrepareUpdate = function (data) { + this.group.removeAll(); + + this._clearIncremental(); + // Only use incremental displayables when data amount is larger than 2 million. + // PENDING Incremental data? + if (data.count() > 2e6) { + if (!this._incremental) { + this._incremental = new IncrementalDisplayble({ + silent: true + }); + } + this.group.add(this._incremental); + } + else { + this._incremental = null; + } +}; + +largeSymbolProto.incrementalUpdate = function (taskParams, data) { + var symbolEl; + if (this._incremental) { + symbolEl = new LargeSymbolPath(); + this._incremental.addDisplayable(symbolEl, true); + } + else { + symbolEl = new LargeSymbolPath({ + rectHover: true, + cursor: 'default', + startIndex: taskParams.start, + endIndex: taskParams.end + }); + symbolEl.incremental = true; + this.group.add(symbolEl); + } + + symbolEl.setShape({ + points: data.getLayout('symbolPoints') + }); + this._setCommon(symbolEl, data, !!this._incremental); +}; + +largeSymbolProto._setCommon = function (symbolEl, data, isIncremental) { + var hostModel = data.hostModel; + + // TODO + // if (data.hasItemVisual.symbolSize) { + // // TODO typed array? + // symbolEl.setShape('sizes', data.mapArray( + // function (idx) { + // var size = data.getItemVisual(idx, 'symbolSize'); + // return (size instanceof Array) ? size : [size, size]; + // } + // )); + // } + // else { + var size = data.getVisual('symbolSize'); + symbolEl.setShape('size', (size instanceof Array) ? size : [size, size]); + // } + + // Create symbolProxy to build path for each data + symbolEl.symbolProxy = createSymbol( + data.getVisual('symbol'), 0, 0, 0, 0 + ); + // Use symbolProxy setColor method + symbolEl.setColor = symbolEl.symbolProxy.setColor; + + var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD; + symbolEl.useStyle( + // Draw shadow when doing fillRect is extremely slow. + hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color']) + ); + + var visualColor = data.getVisual('color'); + if (visualColor) { + symbolEl.setColor(visualColor); + } + + if (!isIncremental) { + // Enable tooltip + // PENDING May have performance issue when path is extremely large + symbolEl.seriesIndex = hostModel.seriesIndex; + symbolEl.on('mousemove', function (e) { + symbolEl.dataIndex = null; + var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY); + if (dataIndex >= 0) { + // Provide dataIndex for tooltip + symbolEl.dataIndex = dataIndex + (symbolEl.startIndex || 0); + } + }); + } +}; + +largeSymbolProto.remove = function () { + this._clearIncremental(); + this._incremental = null; + this.group.removeAll(); +}; + +largeSymbolProto._clearIncremental = function () { + var incremental = this._incremental; + if (incremental) { + incremental.clearDisplaybles(); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendChartView({ + + type: 'scatter', + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var symbolDraw = this._updateSymbolDraw(data, seriesModel); + symbolDraw.updateData(data); + + this._finished = true; + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var symbolDraw = this._updateSymbolDraw(data, seriesModel); + + symbolDraw.incrementalPrepareUpdate(data); + + this._finished = false; + }, + + incrementalRender: function (taskParams, seriesModel, ecModel) { + this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData()); + + this._finished = taskParams.end === seriesModel.getData().count(); + }, + + updateTransform: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + // Must mark group dirty and make sure the incremental layer will be cleared + // PENDING + this.group.dirty(); + + if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) { + return { + update: true + }; + } + else { + var res = pointsLayout().reset(seriesModel); + if (res.progress) { + res.progress({ start: 0, end: data.count() }, data); + } + + this._symbolDraw.updateLayout(data); + } + }, + + _updateSymbolDraw: function (data, seriesModel) { + var symbolDraw = this._symbolDraw; + var pipelineContext = seriesModel.pipelineContext; + var isLargeDraw = pipelineContext.large; + + if (!symbolDraw || isLargeDraw !== this._isLargeDraw) { + symbolDraw && symbolDraw.remove(); + symbolDraw = this._symbolDraw = isLargeDraw + ? new LargeSymbolDraw() + : new SymbolDraw(); + this._isLargeDraw = isLargeDraw; + this.group.removeAll(); + } + + this.group.add(symbolDraw.group); + + return symbolDraw; + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(true); + this._symbolDraw = null; + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// import * as zrUtil from 'zrender/src/core/util'; + +// In case developer forget to include grid component +registerVisual(visualSymbol('scatter', 'circle')); +registerLayout(pointsLayout('scatter')); + +// echarts.registerProcessor(function (ecModel, api) { +// ecModel.eachSeriesByType('scatter', function (seriesModel) { +// var data = seriesModel.getData(); +// var coordSys = seriesModel.coordinateSystem; +// if (coordSys.type !== 'geo') { +// return; +// } +// var startPt = coordSys.pointToData([0, 0]); +// var endPt = coordSys.pointToData([api.getWidth(), api.getHeight()]); + +// var dims = zrUtil.map(coordSys.dimensions, function (dim) { +// return data.mapDimension(dim); +// }); +// var range = {}; +// range[dims[0]] = [Math.min(startPt[0], endPt[0]), Math.max(startPt[0], endPt[0])]; +// range[dims[1]] = [Math.min(startPt[1], endPt[1]), Math.max(startPt[1], endPt[1])]; + +// data.selectRange(range); +// }); +// }); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function IndicatorAxis(dim, scale, radiusExtent) { + Axis.call(this, dim, scale, radiusExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'value'; + + this.angle = 0; + + /** + * Indicator name + * @type {string} + */ + this.name = ''; + /** + * @type {module:echarts/model/Model} + */ + this.model; +} + +inherits(IndicatorAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO clockwise + +function Radar(radarModel, ecModel, api) { + + this._model = radarModel; + /** + * Radar dimensions + * @type {Array.} + */ + this.dimensions = []; + + this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) { + var dim = 'indicator_' + idx; + var indicatorAxis = new IndicatorAxis(dim, new IntervalScale()); + indicatorAxis.name = indicatorModel.get('name'); + // Inject model and axis + indicatorAxis.model = indicatorModel; + indicatorModel.axis = indicatorAxis; + this.dimensions.push(dim); + return indicatorAxis; + }, this); + + this.resize(radarModel, api); + + /** + * @type {number} + * @readOnly + */ + this.cx; + /** + * @type {number} + * @readOnly + */ + this.cy; + /** + * @type {number} + * @readOnly + */ + this.r; + /** + * @type {number} + * @readOnly + */ + this.r0; + /** + * @type {number} + * @readOnly + */ + this.startAngle; +} + +Radar.prototype.getIndicatorAxes = function () { + return this._indicatorAxes; +}; + +Radar.prototype.dataToPoint = function (value, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + + return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex); +}; + +Radar.prototype.coordToPoint = function (coord, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + var angle = indicatorAxis.angle; + var x = this.cx + coord * Math.cos(angle); + var y = this.cy - coord * Math.sin(angle); + return [x, y]; +}; + +Radar.prototype.pointToData = function (pt) { + var dx = pt[0] - this.cx; + var dy = pt[1] - this.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + + var radian = Math.atan2(-dy, dx); + + // Find the closest angle + // FIXME index can calculated directly + var minRadianDiff = Infinity; + var closestAxis; + var closestAxisIdx = -1; + for (var i = 0; i < this._indicatorAxes.length; i++) { + var indicatorAxis = this._indicatorAxes[i]; + var diff = Math.abs(radian - indicatorAxis.angle); + if (diff < minRadianDiff) { + closestAxis = indicatorAxis; + closestAxisIdx = i; + minRadianDiff = diff; + } + } + + return [closestAxisIdx, +(closestAxis && closestAxis.coodToData(radius))]; +}; + +Radar.prototype.resize = function (radarModel, api) { + var center = radarModel.get('center'); + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + var viewSize = Math.min(viewWidth, viewHeight) / 2; + this.cx = parsePercent$1(center[0], viewWidth); + this.cy = parsePercent$1(center[1], viewHeight); + + this.startAngle = radarModel.get('startAngle') * Math.PI / 180; + + // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']` + var radius = radarModel.get('radius'); + if (typeof radius === 'string' || typeof radius === 'number') { + radius = [0, radius]; + } + this.r0 = parsePercent$1(radius[0], viewSize); + this.r = parsePercent$1(radius[1], viewSize); + + each$1(this._indicatorAxes, function (indicatorAxis, idx) { + indicatorAxis.setExtent(this.r0, this.r); + var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length); + // Normalize to [-PI, PI] + angle = Math.atan2(Math.sin(angle), Math.cos(angle)); + indicatorAxis.angle = angle; + }, this); +}; + +Radar.prototype.update = function (ecModel, api) { + var indicatorAxes = this._indicatorAxes; + var radarModel = this._model; + each$1(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.setExtent(Infinity, -Infinity); + }); + ecModel.eachSeriesByType('radar', function (radarSeries, idx) { + if (radarSeries.get('coordinateSystem') !== 'radar' + || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel + ) { + return; + } + var data = radarSeries.getData(); + each$1(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim)); + }); + }, this); + + var splitNumber = radarModel.get('splitNumber'); + + function increaseInterval(interval) { + var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10)); + // Increase interval + var f = interval / exp10; + if (f === 2) { + f = 5; + } + else { // f is 2 or 5 + f *= 2; + } + return f * exp10; + } + // Force all the axis fixing the maxSplitNumber. + each$1(indicatorAxes, function (indicatorAxis, idx) { + var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model); + niceScaleExtent(indicatorAxis.scale, indicatorAxis.model); + + var axisModel = indicatorAxis.model; + var scale = indicatorAxis.scale; + var fixedMin = axisModel.getMin(); + var fixedMax = axisModel.getMax(); + var interval = scale.getInterval(); + + if (fixedMin != null && fixedMax != null) { + // User set min, max, divide to get new interval + scale.setExtent(+fixedMin, +fixedMax); + scale.setInterval( + (fixedMax - fixedMin) / splitNumber + ); + } + else if (fixedMin != null) { + var max; + // User set min, expand extent on the other side + do { + max = fixedMin + interval * splitNumber; + scale.setExtent(+fixedMin, max); + // Interval must been set after extent + // FIXME + scale.setInterval(interval); + + interval = increaseInterval(interval); + } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])); + } + else if (fixedMax != null) { + var min; + // User set min, expand extent on the other side + do { + min = fixedMax - interval * splitNumber; + scale.setExtent(min, +fixedMax); + scale.setInterval(interval); + interval = increaseInterval(interval); + } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])); + } + else { + var nicedSplitNumber = scale.getTicks().length - 1; + if (nicedSplitNumber > splitNumber) { + interval = increaseInterval(interval); + } + // PENDING + var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval; + var halfSplitNumber = Math.round(splitNumber / 2); + scale.setExtent( + round$1(center - halfSplitNumber * interval), + round$1(center + (splitNumber - halfSplitNumber) * interval) + ); + scale.setInterval(interval); + } + }); +}; + +/** + * Radar dimensions is based on the data + * @type {Array} + */ +Radar.dimensions = []; + +Radar.create = function (ecModel, api) { + var radarList = []; + ecModel.eachComponent('radar', function (radarModel) { + var radar = new Radar(radarModel, ecModel, api); + radarList.push(radar); + radarModel.coordinateSystem = radar; + }); + ecModel.eachSeriesByType('radar', function (radarSeries) { + if (radarSeries.get('coordinateSystem') === 'radar') { + // Inject coordinate system + radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0]; + } + }); + return radarList; +}; + +CoordinateSystemManager.register('radar', Radar); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var valueAxisDefault = axisDefault.valueAxis; + +function defaultsShow(opt, show) { + return defaults({ + show: show + }, opt); +} + +var RadarModel = extendComponentModel({ + + type: 'radar', + + optionUpdated: function () { + var boundaryGap = this.get('boundaryGap'); + var splitNumber = this.get('splitNumber'); + var scale = this.get('scale'); + var axisLine = this.get('axisLine'); + var axisTick = this.get('axisTick'); + var axisLabel = this.get('axisLabel'); + var nameTextStyle = this.get('name'); + var showName = this.get('name.show'); + var nameFormatter = this.get('name.formatter'); + var nameGap = this.get('nameGap'); + var triggerEvent = this.get('triggerEvent'); + + var indicatorModels = map(this.get('indicator') || [], function (indicatorOpt) { + // PENDING + if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) { + indicatorOpt.min = 0; + } + else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) { + indicatorOpt.max = 0; + } + var iNameTextStyle = nameTextStyle; + if (indicatorOpt.color != null) { + iNameTextStyle = defaults({color: indicatorOpt.color}, nameTextStyle); + } + // Use same configuration + indicatorOpt = merge(clone(indicatorOpt), { + boundaryGap: boundaryGap, + splitNumber: splitNumber, + scale: scale, + axisLine: axisLine, + axisTick: axisTick, + axisLabel: axisLabel, + // Competitable with 2 and use text + name: indicatorOpt.text, + nameLocation: 'end', + nameGap: nameGap, + // min: 0, + nameTextStyle: iNameTextStyle, + triggerEvent: triggerEvent + }, false); + if (!showName) { + indicatorOpt.name = ''; + } + if (typeof nameFormatter === 'string') { + var indName = indicatorOpt.name; + indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : ''); + } + else if (typeof nameFormatter === 'function') { + indicatorOpt.name = nameFormatter( + indicatorOpt.name, indicatorOpt + ); + } + var model = extend( + new Model(indicatorOpt, null, this.ecModel), + axisModelCommonMixin + ); + + // For triggerEvent. + model.mainType = 'radar'; + model.componentIndex = this.componentIndex; + + return model; + }, this); + + this.getIndicatorModels = function () { + return indicatorModels; + }; + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + center: ['50%', '50%'], + + radius: '75%', + + startAngle: 90, + + name: { + show: true + // formatter: null + // textStyle: {} + }, + + boundaryGap: [0, 0], + + splitNumber: 5, + + nameGap: 15, + + scale: false, + + // Polygon or circle + shape: 'polygon', + + axisLine: merge( + { + lineStyle: { + color: '#bbb' + } + }, + valueAxisDefault.axisLine + ), + axisLabel: defaultsShow(valueAxisDefault.axisLabel, false), + axisTick: defaultsShow(valueAxisDefault.axisTick, false), + splitLine: defaultsShow(valueAxisDefault.splitLine, true), + splitArea: defaultsShow(valueAxisDefault.splitArea, true), + + // {text, min, max} + indicator: [] + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var axisBuilderAttrs$1 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; + +extendComponentView({ + + type: 'radar', + + render: function (radarModel, ecModel, api) { + var group = this.group; + group.removeAll(); + + this._buildAxes(radarModel); + this._buildSplitLineAndArea(radarModel); + }, + + _buildAxes: function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + var axisBuilders = map(indicatorAxes, function (indicatorAxis) { + var axisBuilder = new AxisBuilder(indicatorAxis.model, { + position: [radar.cx, radar.cy], + rotation: indicatorAxis.angle, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1 + }); + return axisBuilder; + }); + + each$1(axisBuilders, function (axisBuilder) { + each$1(axisBuilderAttrs$1, axisBuilder.add, axisBuilder); + this.group.add(axisBuilder.getGroup()); + }, this); + }, + + _buildSplitLineAndArea: function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + if (!indicatorAxes.length) { + return; + } + var shape = radarModel.get('shape'); + var splitLineModel = radarModel.getModel('splitLine'); + var splitAreaModel = radarModel.getModel('splitArea'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + + var showSplitLine = splitLineModel.get('show'); + var showSplitArea = splitAreaModel.get('show'); + var splitLineColors = lineStyleModel.get('color'); + var splitAreaColors = areaStyleModel.get('color'); + + splitLineColors = isArray(splitLineColors) ? splitLineColors : [splitLineColors]; + splitAreaColors = isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors]; + + var splitLines = []; + var splitAreas = []; + + function getColorIndex(areaOrLine, areaOrLineColorList, idx) { + var colorIndex = idx % areaOrLineColorList.length; + areaOrLine[colorIndex] = areaOrLine[colorIndex] || []; + return colorIndex; + } + + if (shape === 'circle') { + var ticksRadius = indicatorAxes[0].getTicksCoords(); + var cx = radar.cx; + var cy = radar.cy; + for (var i = 0; i < ticksRadius.length; i++) { + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColors, i); + splitLines[colorIndex].push(new Circle({ + shape: { + cx: cx, + cy: cy, + r: ticksRadius[i].coord + } + })); + } + if (showSplitArea && i < ticksRadius.length - 1) { + var colorIndex = getColorIndex(splitAreas, splitAreaColors, i); + splitAreas[colorIndex].push(new Ring({ + shape: { + cx: cx, + cy: cy, + r0: ticksRadius[i].coord, + r: ticksRadius[i + 1].coord + } + })); + } + } + } + // Polyyon + else { + var realSplitNumber; + var axesTicksPoints = map(indicatorAxes, function (indicatorAxis, idx) { + var ticksCoords = indicatorAxis.getTicksCoords(); + realSplitNumber = realSplitNumber == null + ? ticksCoords.length - 1 + : Math.min(ticksCoords.length - 1, realSplitNumber); + return map(ticksCoords, function (tickCoord) { + return radar.coordToPoint(tickCoord.coord, idx); + }); + }); + + var prevPoints = []; + for (var i = 0; i <= realSplitNumber; i++) { + var points = []; + for (var j = 0; j < indicatorAxes.length; j++) { + points.push(axesTicksPoints[j][i]); + } + // Close + if (points[0]) { + points.push(points[0].slice()); + } + else { + if (__DEV__) { + console.error('Can\'t draw value axis ' + i); + } + } + + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColors, i); + splitLines[colorIndex].push(new Polyline({ + shape: { + points: points + } + })); + } + if (showSplitArea && prevPoints) { + var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1); + splitAreas[colorIndex].push(new Polygon({ + shape: { + points: points.concat(prevPoints) + } + })); + } + prevPoints = points.slice().reverse(); + } + } + + var lineStyle = lineStyleModel.getLineStyle(); + var areaStyle = areaStyleModel.getAreaStyle(); + // Add splitArea before splitLine + each$1(splitAreas, function (splitAreas, idx) { + this.group.add(mergePath( + splitAreas, { + style: defaults({ + stroke: 'none', + fill: splitAreaColors[idx % splitAreaColors.length] + }, areaStyle), + silent: true + } + )); + }, this); + + each$1(splitLines, function (splitLines, idx) { + this.group.add(mergePath( + splitLines, { + style: defaults({ + fill: 'none', + stroke: splitLineColors[idx % splitLineColors.length] + }, lineStyle), + silent: true + } + )); + }, this); + + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var RadarSeries = SeriesModel.extend({ + + type: 'series.radar', + + dependencies: ['radar'], + + + // Overwrite + init: function (option) { + RadarSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + }, + + getInitialData: function (option, ecModel) { + return createListSimply(this, { + generateCoord: 'indicator_', + generateCoordCount: Infinity + }); + }, + + formatTooltip: function (dataIndex) { + var data = this.getData(); + var coordSys = this.coordinateSystem; + var indicatorAxes = coordSys.getIndicatorAxes(); + var name = this.getData().getName(dataIndex); + return encodeHTML(name === '' ? this.name : name) + '
    ' + + map(indicatorAxes, function (axis, idx) { + var val = data.get(data.mapDimension(axis.dim), dataIndex); + return encodeHTML(axis.name + ' : ' + val); + }).join('
    '); + }, + + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: 'radar', + legendHoverLink: true, + radarIndex: 0, + lineStyle: { + width: 2, + type: 'solid' + }, + label: { + position: 'top' + }, + // areaStyle: { + // }, + // itemStyle: {} + symbol: 'emptyCircle', + symbolSize: 4 + // symbolRotate: null + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function normalizeSymbolSize(symbolSize) { + if (!isArray(symbolSize)) { + symbolSize = [+symbolSize, +symbolSize]; + } + return symbolSize; +} + +extendChartView({ + + type: 'radar', + + render: function (seriesModel, ecModel, api) { + var polar = seriesModel.coordinateSystem; + var group = this.group; + + var data = seriesModel.getData(); + var oldData = this._data; + + function createSymbol$$1(data, idx) { + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + var color = data.getItemVisual(idx, 'color'); + if (symbolType === 'none') { + return; + } + var symbolSize = normalizeSymbolSize( + data.getItemVisual(idx, 'symbolSize') + ); + var symbolPath = createSymbol( + symbolType, -1, -1, 2, 2, color + ); + symbolPath.attr({ + style: { + strokeNoScale: true + }, + z2: 100, + scale: [symbolSize[0] / 2, symbolSize[1] / 2] + }); + return symbolPath; + } + + function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) { + // Simply rerender all + symbolGroup.removeAll(); + for (var i = 0; i < newPoints.length - 1; i++) { + var symbolPath = createSymbol$$1(data, idx); + if (symbolPath) { + symbolPath.__dimIdx = i; + if (oldPoints[i]) { + symbolPath.attr('position', oldPoints[i]); + graphic[isInit ? 'initProps' : 'updateProps']( + symbolPath, { + position: newPoints[i] + }, seriesModel, idx + ); + } + else { + symbolPath.attr('position', newPoints[i]); + } + symbolGroup.add(symbolPath); + } + } + } + + function getInitialPoints(points) { + return map(points, function (pt) { + return [polar.cx, polar.cy]; + }); + } + data.diff(oldData) + .add(function (idx) { + var points = data.getItemLayout(idx); + if (!points) { + return; + } + var polygon = new Polygon(); + var polyline = new Polyline(); + var target = { + shape: { + points: points + } + }; + polygon.shape.points = getInitialPoints(points); + polyline.shape.points = getInitialPoints(points); + initProps(polygon, target, seriesModel, idx); + initProps(polyline, target, seriesModel, idx); + + var itemGroup = new Group(); + var symbolGroup = new Group(); + itemGroup.add(polyline); + itemGroup.add(polygon); + itemGroup.add(symbolGroup); + + updateSymbols( + polyline.shape.points, points, symbolGroup, data, idx, true + ); + + data.setItemGraphicEl(idx, itemGroup); + }) + .update(function (newIdx, oldIdx) { + var itemGroup = oldData.getItemGraphicEl(oldIdx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); + var target = { + shape: { + points: data.getItemLayout(newIdx) + } + }; + if (!target.shape.points) { + return; + } + updateSymbols( + polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false + ); + + updateProps(polyline, target, seriesModel); + updateProps(polygon, target, seriesModel); + + data.setItemGraphicEl(newIdx, itemGroup); + }) + .remove(function (idx) { + group.remove(oldData.getItemGraphicEl(idx)); + }) + .execute(); + + data.eachItemGraphicEl(function (itemGroup, idx) { + var itemModel = data.getItemModel(idx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); + var color = data.getItemVisual(idx, 'color'); + + group.add(itemGroup); + + polyline.useStyle( + defaults( + itemModel.getModel('lineStyle').getLineStyle(), + { + fill: 'none', + stroke: color + } + ) + ); + polyline.hoverStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle(); + + var areaStyleModel = itemModel.getModel('areaStyle'); + var hoverAreaStyleModel = itemModel.getModel('emphasis.areaStyle'); + var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty(); + var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty(); + + hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore; + polygon.ignore = polygonIgnore; + + polygon.useStyle( + defaults( + areaStyleModel.getAreaStyle(), + { + fill: color, + opacity: 0.7 + } + ) + ); + polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle(); + + var itemStyle = itemModel.getModel('itemStyle').getItemStyle(['color']); + var itemHoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle(); + var labelModel = itemModel.getModel('label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + symbolGroup.eachChild(function (symbolPath) { + symbolPath.setStyle(itemStyle); + symbolPath.hoverStyle = clone(itemHoverStyle); + + setLabelStyle( + symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + labelDimIndex: symbolPath.__dimIdx, + defaultText: data.get(data.dimensions[symbolPath.__dimIdx], idx), + autoColor: color, + isRectText: true + } + ); + }); + + function onEmphasis() { + polygon.attr('ignore', hoverPolygonIgnore); + } + + function onNormal() { + polygon.attr('ignore', polygonIgnore); + } + + itemGroup.off('mouseover').off('mouseout').off('normal').off('emphasis'); + itemGroup.on('emphasis', onEmphasis) + .on('mouseover', onEmphasis) + .on('normal', onNormal) + .on('mouseout', onNormal); + + setHoverStyle(itemGroup); + }); + + this._data = data; + }, + + remove: function () { + this.group.removeAll(); + this._data = null; + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var radarLayout = function (ecModel) { + ecModel.eachSeriesByType('radar', function (seriesModel) { + var data = seriesModel.getData(); + var points = []; + var coordSys = seriesModel.coordinateSystem; + if (!coordSys) { + return; + } + + function pointsConverter(val, idx) { + points[idx] = points[idx] || []; + points[idx][i] = coordSys.dataToPoint(val, i); + } + var axes = coordSys.getIndicatorAxes(); + for (var i = 0; i < axes.length; i++) { + data.each(data.mapDimension(axes[i].dim), pointsConverter); + } + + data.each(function (idx) { + // Close polygon + points[idx][0] && points[idx].push(points[idx][0].slice()); + data.setItemLayout(idx, points[idx]); + }); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Backward compat for radar chart in 2 +var backwardCompat$1 = function (option) { + var polarOptArr = option.polar; + if (polarOptArr) { + if (!isArray(polarOptArr)) { + polarOptArr = [polarOptArr]; + } + var polarNotRadar = []; + each$1(polarOptArr, function (polarOpt, idx) { + if (polarOpt.indicator) { + if (polarOpt.type && !polarOpt.shape) { + polarOpt.shape = polarOpt.type; + } + option.radar = option.radar || []; + if (!isArray(option.radar)) { + option.radar = [option.radar]; + } + option.radar.push(polarOpt); + } + else { + polarNotRadar.push(polarOpt); + } + }); + option.polar = polarNotRadar; + } + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) { + seriesOpt.radarIndex = seriesOpt.polarIndex; + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +// Must use radar component +registerVisual(dataColor('radar')); +registerVisual(visualSymbol('radar', 'circle')); +registerLayout(radarLayout); +registerProcessor(dataFilter('radar')); +registerPreprocessor(backwardCompat$1); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Simple view coordinate system + * Mapping given x, y to transformd view x, y + */ + +var v2ApplyTransform$1 = applyTransform; + +// Dummy transform node +function TransformDummy() { + Transformable.call(this); +} +mixin(TransformDummy, Transformable); + +function View(name) { + /** + * @type {string} + */ + this.name = name; + + /** + * @type {Object} + */ + this.zoomLimit; + + Transformable.call(this); + + this._roamTransformable = new TransformDummy(); + + this._rawTransformable = new TransformDummy(); + + this._center; + this._zoom; +} + +View.prototype = { + + constructor: View, + + type: 'view', + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['x', 'y'], + + /** + * Set bounding rect + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + + // PENDING to getRect + setBoundingRect: function (x, y, width, height) { + this._rect = new BoundingRect(x, y, width, height); + return this._rect; + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + // PENDING to getRect + getBoundingRect: function () { + return this._rect; + }, + + /** + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + setViewRect: function (x, y, width, height) { + this.transformTo(x, y, width, height); + this._viewRect = new BoundingRect(x, y, width, height); + }, + + /** + * Transformed to particular position and size + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + var rawTransform = this._rawTransformable; + + rawTransform.transform = rect.calculateTransform( + new BoundingRect(x, y, width, height) + ); + + rawTransform.decomposeTransform(); + + this._updateTransform(); + }, + + /** + * Set center of view + * @param {Array.} [centerCoord] + */ + setCenter: function (centerCoord) { + if (!centerCoord) { + return; + } + this._center = centerCoord; + + this._updateCenterAndZoom(); + }, + + /** + * @param {number} zoom + */ + setZoom: function (zoom) { + zoom = zoom || 1; + + var zoomLimit = this.zoomLimit; + if (zoomLimit) { + if (zoomLimit.max != null) { + zoom = Math.min(zoomLimit.max, zoom); + } + if (zoomLimit.min != null) { + zoom = Math.max(zoomLimit.min, zoom); + } + } + this._zoom = zoom; + + this._updateCenterAndZoom(); + }, + + /** + * Get default center without roam + */ + getDefaultCenter: function () { + // Rect before any transform + var rawRect = this.getBoundingRect(); + var cx = rawRect.x + rawRect.width / 2; + var cy = rawRect.y + rawRect.height / 2; + + return [cx, cy]; + }, + + getCenter: function () { + return this._center || this.getDefaultCenter(); + }, + + getZoom: function () { + return this._zoom || 1; + }, + + /** + * @return {Array.} data + * @param {boolean} noRoam + * @param {Array.} [out] + * @return {Array.} + */ + dataToPoint: function (data, noRoam, out) { + var transform = noRoam ? this._rawTransform : this.transform; + out = out || []; + return transform + ? v2ApplyTransform$1(out, data, transform) + : copy(out, data); + }, + + /** + * Convert a (x, y) point to (lon, lat) data + * @param {Array.} point + * @return {Array.} + */ + pointToData: function (point) { + var invTransform = this.invTransform; + return invTransform + ? v2ApplyTransform$1([], point, invTransform) + : [point[0], point[1]]; + }, + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + convertToPixel: curry(doConvert$1, 'dataToPoint'), + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + convertFromPixel: curry(doConvert$1, 'pointToData'), + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + containPoint: function (point) { + return this.getViewRectAfterRoam().contain(point[0], point[1]); + } + + /** + * @return {number} + */ + // getScalarScale: function () { + // // Use determinant square root of transform to mutiply scalar + // var m = this.transform; + // var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1])); + // return det; + // } +}; + +mixin(View, Transformable); + +function doConvert$1(methodName, ecModel, finder, value) { + var seriesModel = finder.seriesModel; + var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph. + return coordSys === this ? coordSys[methodName](value) : null; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Fix for 南海诸岛 + +var geoCoord = [126, 25]; + +var points$1 = [ + [[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7], + [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]], + [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], + [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], + [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], + [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], + [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], + [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], + [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], + [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], + [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], + [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], + [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], + [1, 92.4], [1, 3.5], [0, 3.5]] +]; + +for (var i$1 = 0; i$1 < points$1.length; i$1++) { + for (var k = 0; k < points$1[i$1].length; k++) { + points$1[i$1][k][0] /= 10.5; + points$1[i$1][k][1] /= -10.5 / 0.75; + + points$1[i$1][k][0] += geoCoord[0]; + points$1[i$1][k][1] += geoCoord[1]; + } +} + +var fixNanhai = function (mapType, regions) { + if (mapType === 'china') { + regions.push(new Region( + '南海诸岛', + map(points$1, function (exterior) { + return { + type: 'polygon', + exterior: exterior + }; + }), geoCoord + )); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var coordsOffsetMap = { + '南海诸岛': [32, 80], + // 全国 + '广东': [0, -10], + '香港': [10, 5], + '澳门': [-10, 10], + //'北京': [-10, 0], + '天津': [5, 5] +}; + +var fixTextCoord = function (mapType, region) { + if (mapType === 'china') { + var coordFix = coordsOffsetMap[region.name]; + if (coordFix) { + var cp = region.center; + cp[0] += coordFix[0] / 10.5; + cp[1] += -coordFix[1] / (10.5 / 0.75); + } + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var geoCoordMap = { + 'Russia': [100, 60], + 'United States': [-99, 38], + 'United States of America': [-99, 38] +}; + +var fixGeoCoord = function (mapType, region) { + if (mapType === 'world') { + var geoCoord = geoCoordMap[region.name]; + if (geoCoord) { + var cp = region.center; + cp[0] = geoCoord[0]; + cp[1] = geoCoord[1]; + } + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Fix for 钓鱼岛 + +// var Region = require('../Region'); +// var zrUtil = require('zrender/src/core/util'); + +// var geoCoord = [126, 25]; + +var points$2 = [ + [ + [123.45165252685547, 25.73527164402261], + [123.49731445312499, 25.73527164402261], + [123.49731445312499, 25.750734064600884], + [123.45165252685547, 25.750734064600884], + [123.45165252685547, 25.73527164402261] + ] +]; + +var fixDiaoyuIsland = function (mapType, region) { + if (mapType === 'china' && region.name === '台湾') { + region.geometries.push({ + type: 'polygon', + exterior: points$2[0] + }); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Built-in GEO fixer. +var inner$7 = makeInner(); + +var geoJSONLoader = { + + /** + * @param {string} mapName + * @param {Object} mapRecord {specialAreas, geoJSON} + * @return {Object} {regions, boundingRect} + */ + load: function (mapName, mapRecord) { + + var parsed = inner$7(mapRecord).parsed; + + if (parsed) { + return parsed; + } + + var specialAreas = mapRecord.specialAreas || {}; + var geoJSON = mapRecord.geoJSON; + var regions; + + // https://jsperf.com/try-catch-performance-overhead + try { + regions = geoJSON ? parseGeoJson$1(geoJSON) : []; + } + catch (e) { + throw new Error('Invalid geoJson format\n' + e.message); + } + + each$1(regions, function (region) { + var regionName = region.name; + + fixTextCoord(mapName, region); + fixGeoCoord(mapName, region); + fixDiaoyuIsland(mapName, region); + + // Some area like Alaska in USA map needs to be tansformed + // to look better + var specialArea = specialAreas[regionName]; + if (specialArea) { + region.transformTo( + specialArea.left, specialArea.top, specialArea.width, specialArea.height + ); + } + }); + + fixNanhai(mapName, regions); + + return (inner$7(mapRecord).parsed = { + regions: regions, + boundingRect: getBoundingRect$1(regions) + }); + } +}; + +function getBoundingRect$1(regions) { + var rect; + for (var i = 0; i < regions.length; i++) { + var regionRect = regions[i].getBoundingRect(); + rect = rect || regionRect.clone(); + rect.union(regionRect); + } + return rect; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$8 = makeInner(); + +var geoSVGLoader = { + + /** + * @param {string} mapName + * @param {Object} mapRecord {specialAreas, geoJSON} + * @return {Object} {root, boundingRect} + */ + load: function (mapName, mapRecord) { + var originRoot = inner$8(mapRecord).originRoot; + if (originRoot) { + return { + root: originRoot, + boundingRect: inner$8(mapRecord).boundingRect + }; + } + + var graphic = buildGraphic(mapRecord); + + inner$8(mapRecord).originRoot = graphic.root; + inner$8(mapRecord).boundingRect = graphic.boundingRect; + + return graphic; + }, + + makeGraphic: function (mapName, mapRecord, hostKey) { + // For performance consideration (in large SVG), graphic only maked + // when necessary and reuse them according to hostKey. + var field = inner$8(mapRecord); + var rootMap = field.rootMap || (field.rootMap = createHashMap()); + + var root = rootMap.get(hostKey); + if (root) { + return root; + } + + var originRoot = field.originRoot; + var boundingRect = field.boundingRect; + + // For performance, if originRoot is not used by a view, + // assign it to a view, but not reproduce graphic elements. + if (!field.originRootHostKey) { + field.originRootHostKey = hostKey; + root = originRoot; + } + else { + root = buildGraphic(mapRecord, boundingRect).root; + } + + return rootMap.set(hostKey, root); + }, + + removeGraphic: function (mapName, mapRecord, hostKey) { + var field = inner$8(mapRecord); + var rootMap = field.rootMap; + rootMap && rootMap.removeKey(hostKey); + if (hostKey === field.originRootHostKey) { + field.originRootHostKey = null; + } + } +}; + +function buildGraphic(mapRecord, boundingRect) { + var svgXML = mapRecord.svgXML; + var result; + var root; + + try { + result = svgXML && parseSVG(svgXML, { + ignoreViewBox: true, + ignoreRootClip: true + }) || {}; + root = result.root; + assert$1(root != null); + } + catch (e) { + throw new Error('Invalid svg format\n' + e.message); + } + + var svgWidth = result.width; + var svgHeight = result.height; + var viewBoxRect = result.viewBoxRect; + + if (!boundingRect) { + boundingRect = (svgWidth == null || svgHeight == null) + // If svg width / height not specified, calculate + // bounding rect as the width / height + ? root.getBoundingRect() + : new BoundingRect(0, 0, 0, 0); + + if (svgWidth != null) { + boundingRect.width = svgWidth; + } + if (svgHeight != null) { + boundingRect.height = svgHeight; + } + } + + if (viewBoxRect) { + var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect.width, boundingRect.height); + var elRoot = root; + root = new Group(); + root.add(elRoot); + elRoot.scale = viewBoxTransform.scale; + elRoot.position = viewBoxTransform.position; + } + + root.setClipPath(new Rect({ + shape: boundingRect.plain() + })); + + return { + root: root, + boundingRect: boundingRect + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var loaders = { + geoJSON: geoJSONLoader, + svg: geoSVGLoader +}; + +var geoSourceManager = { + + /** + * @param {string} mapName + * @param {Object} nameMap + * @return {Object} source {regions, regionsMap, nameCoordMap, boundingRect} + */ + load: function (mapName, nameMap) { + var regions = []; + var regionsMap = createHashMap(); + var nameCoordMap = createHashMap(); + var boundingRect; + var mapRecords = retrieveMap(mapName); + + each$1(mapRecords, function (record) { + var singleSource = loaders[record.type].load(mapName, record); + + each$1(singleSource.regions, function (region) { + var regionName = region.name; + + // Try use the alias in geoNameMap + if (nameMap && nameMap.hasOwnProperty(regionName)) { + region = region.cloneShallow(regionName = nameMap[regionName]); + } + + regions.push(region); + regionsMap.set(regionName, region); + nameCoordMap.set(regionName, region.center); + }); + + var rect = singleSource.boundingRect; + if (rect) { + boundingRect + ? boundingRect.union(rect) + : (boundingRect = rect.clone()); + } + }); + + return { + regions: regions, + regionsMap: regionsMap, + nameCoordMap: nameCoordMap, + // FIXME Always return new ? + boundingRect: boundingRect || new BoundingRect(0, 0, 0, 0) + }; + }, + + /** + * @param {string} mapName + * @param {string} hostKey For cache. + * @return {Array.} Roots. + */ + makeGraphic: makeInvoker('makeGraphic'), + + /** + * @param {string} mapName + * @param {string} hostKey For cache. + */ + removeGraphic: makeInvoker('removeGraphic') +}; + +function makeInvoker(methodName) { + return function (mapName, hostKey) { + var mapRecords = retrieveMap(mapName); + var results = []; + + each$1(mapRecords, function (record) { + var method = loaders[record.type][methodName]; + method && results.push(method(mapName, record, hostKey)); + }); + + return results; + }; +} + +function mapNotExistsError(mapName) { + if (__DEV__) { + console.error( + 'Map ' + mapName + ' not exists. You can download map file on http://echarts.baidu.com/download-map.html' + ); + } +} + +function retrieveMap(mapName) { + var mapRecords = mapDataStorage.retrieveMap(mapName) || []; + + if (__DEV__) { + if (!mapRecords.length) { + mapNotExistsError(mapName); + } + } + + return mapRecords; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * [Geo description] + * For backward compatibility, the orginal interface: + * `name, map, geoJson, specialAreas, nameMap` is kept. + * + * @param {string|Object} name + * @param {string} map Map type + * Specify the positioned areas by left, top, width, height + * @param {Object.} [nameMap] + * Specify name alias + * @param {boolean} [invertLongitute=true] + */ +function Geo(name, map$$1, nameMap, invertLongitute) { + + View.call(this, name); + + /** + * Map type + * @type {string} + */ + this.map = map$$1; + + var source = geoSourceManager.load(map$$1, nameMap); + + this._nameCoordMap = source.nameCoordMap; + this._regionsMap = source.nameCoordMap; + this._invertLongitute = invertLongitute == null ? true : invertLongitute; + + /** + * @readOnly + */ + this.regions = source.regions; + + /** + * @type {module:zrender/src/core/BoundingRect} + */ + this._rect = source.boundingRect; +} + +Geo.prototype = { + + constructor: Geo, + + type: 'geo', + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['lng', 'lat'], + + /** + * If contain given lng,lat coord + * @param {Array.} + * @readOnly + */ + containCoord: function (coord) { + var regions = this.regions; + for (var i = 0; i < regions.length; i++) { + if (regions[i].contain(coord)) { + return true; + } + } + return false; + }, + + /** + * @override + */ + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + var invertLongitute = this._invertLongitute; + + rect = rect.clone(); + + if (invertLongitute) { + // Longitute is inverted + rect.y = -rect.y - rect.height; + } + + var rawTransformable = this._rawTransformable; + + rawTransformable.transform = rect.calculateTransform( + new BoundingRect(x, y, width, height) + ); + + rawTransformable.decomposeTransform(); + + if (invertLongitute) { + var scale = rawTransformable.scale; + scale[1] = -scale[1]; + } + + rawTransformable.updateTransform(); + + this._updateTransform(); + }, + + /** + * @param {string} name + * @return {module:echarts/coord/geo/Region} + */ + getRegion: function (name) { + return this._regionsMap.get(name); + }, + + getRegionByCoord: function (coord) { + var regions = this.regions; + for (var i = 0; i < regions.length; i++) { + if (regions[i].contain(coord)) { + return regions[i]; + } + } + }, + + /** + * Add geoCoord for indexing by name + * @param {string} name + * @param {Array.} geoCoord + */ + addGeoCoord: function (name, geoCoord) { + this._nameCoordMap.set(name, geoCoord); + }, + + /** + * Get geoCoord by name + * @param {string} name + * @return {Array.} + */ + getGeoCoord: function (name) { + return this._nameCoordMap.get(name); + }, + + /** + * @override + */ + getBoundingRect: function () { + return this._rect; + }, + + /** + * @param {string|Array.} data + * @param {boolean} noRoam + * @param {Array.} [out] + * @return {Array.} + */ + dataToPoint: function (data, noRoam, out) { + if (typeof data === 'string') { + // Map area name to geoCoord + data = this.getGeoCoord(data); + } + if (data) { + return View.prototype.dataToPoint.call(this, data, noRoam, out); + } + }, + + /** + * @override + */ + convertToPixel: curry(doConvert, 'dataToPoint'), + + /** + * @override + */ + convertFromPixel: curry(doConvert, 'pointToData') + +}; + +mixin(Geo, View); + +function doConvert(methodName, ecModel, finder, value) { + var geoModel = finder.geoModel; + var seriesModel = finder.seriesModel; + + var coordSys = geoModel + ? geoModel.coordinateSystem + : seriesModel + ? ( + seriesModel.coordinateSystem // For map. + || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem + ) + : null; + + return coordSys === this ? coordSys[methodName](value) : null; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Resize method bound to the geo + * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel + * @param {module:echarts/ExtensionAPI} api + */ +function resizeGeo(geoModel, api) { + + var boundingCoords = geoModel.get('boundingCoords'); + if (boundingCoords != null) { + var leftTop = boundingCoords[0]; + var rightBottom = boundingCoords[1]; + if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) { + if (__DEV__) { + console.error('Invalid boundingCoords'); + } + } + else { + this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]); + } + } + + var rect = this.getBoundingRect(); + + var boxLayoutOption; + + var center = geoModel.get('layoutCenter'); + var size = geoModel.get('layoutSize'); + + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + + var aspect = rect.width / rect.height * this.aspectScale; + + var useCenterAndSize = false; + + if (center && size) { + center = [ + parsePercent$1(center[0], viewWidth), + parsePercent$1(center[1], viewHeight) + ]; + size = parsePercent$1(size, Math.min(viewWidth, viewHeight)); + + if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) { + useCenterAndSize = true; + } + else { + if (__DEV__) { + console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.'); + } + } + } + + var viewRect; + if (useCenterAndSize) { + var viewRect = {}; + if (aspect > 1) { + // Width is same with size + viewRect.width = size; + viewRect.height = size / aspect; + } + else { + viewRect.height = size; + viewRect.width = size * aspect; + } + viewRect.y = center[1] - viewRect.height / 2; + viewRect.x = center[0] - viewRect.width / 2; + } + else { + // Use left/top/width/height + boxLayoutOption = geoModel.getBoxLayoutParams(); + + // 0.75 rate + boxLayoutOption.aspect = aspect; + + viewRect = getLayoutRect(boxLayoutOption, { + width: viewWidth, + height: viewHeight + }); + } + + this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height); + + this.setCenter(geoModel.get('center')); + this.setZoom(geoModel.get('zoom')); +} + +/** + * @param {module:echarts/coord/Geo} geo + * @param {module:echarts/model/Model} model + * @inner + */ +function setGeoCoords(geo, model) { + each$1(model.get('geoCoord'), function (geoCoord, name) { + geo.addGeoCoord(name, geoCoord); + }); +} + +var geoCreator = { + + // For deciding which dimensions to use when creating list data + dimensions: Geo.prototype.dimensions, + + create: function (ecModel, api) { + var geoList = []; + + // FIXME Create each time may be slow + ecModel.eachComponent('geo', function (geoModel, idx) { + var name = geoModel.get('map'); + + var aspectScale = geoModel.get('aspectScale'); + var invertLongitute = true; + var mapRecords = mapDataStorage.retrieveMap(name); + if (mapRecords && mapRecords[0] && mapRecords[0].type === 'svg') { + aspectScale == null && (aspectScale = 1); + invertLongitute = false; + } + else { + aspectScale == null && (aspectScale = 0.75); + } + + var geo = new Geo(name + idx, name, geoModel.get('nameMap'), invertLongitute); + + geo.aspectScale = aspectScale; + geo.zoomLimit = geoModel.get('scaleLimit'); + geoList.push(geo); + + setGeoCoords(geo, geoModel); + + geoModel.coordinateSystem = geo; + geo.model = geoModel; + + // Inject resize method + geo.resize = resizeGeo; + + geo.resize(geoModel, api); + }); + + ecModel.eachSeries(function (seriesModel) { + var coordSys = seriesModel.get('coordinateSystem'); + if (coordSys === 'geo') { + var geoIndex = seriesModel.get('geoIndex') || 0; + seriesModel.coordinateSystem = geoList[geoIndex]; + } + }); + + // If has map series + var mapModelGroupBySeries = {}; + + ecModel.eachSeriesByType('map', function (seriesModel) { + if (!seriesModel.getHostGeoModel()) { + var mapType = seriesModel.getMapType(); + mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || []; + mapModelGroupBySeries[mapType].push(seriesModel); + } + }); + + each$1(mapModelGroupBySeries, function (mapSeries, mapType) { + var nameMapList = map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('nameMap'); + }); + var geo = new Geo(mapType, mapType, mergeAll(nameMapList)); + + geo.zoomLimit = retrieve.apply(null, map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('scaleLimit'); + })); + geoList.push(geo); + + // Inject resize method + geo.resize = resizeGeo; + geo.aspectScale = mapSeries[0].get('aspectScale'); + + geo.resize(mapSeries[0], api); + + each$1(mapSeries, function (singleMapSeries) { + singleMapSeries.coordinateSystem = geo; + + setGeoCoords(geo, singleMapSeries); + }); + }); + + return geoList; + }, + + /** + * Fill given regions array + * @param {Array.} originRegionArr + * @param {string} mapName + * @param {Object} [nameMap] + * @return {Array} + */ + getFilledRegions: function (originRegionArr, mapName, nameMap) { + // Not use the original + var regionsArr = (originRegionArr || []).slice(); + + var dataNameMap = createHashMap(); + for (var i = 0; i < regionsArr.length; i++) { + dataNameMap.set(regionsArr[i].name, regionsArr[i]); + } + + var source = geoSourceManager.load(mapName, nameMap); + each$1(source.regions, function (region) { + var name = region.name; + !dataNameMap.get(name) && regionsArr.push({name: name}); + }); + + return regionsArr; + } +}; + +registerCoordinateSystem('geo', geoCreator); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var MapSeries = SeriesModel.extend({ + + type: 'series.map', + + dependencies: ['geo'], + + layoutMode: 'box', + + /** + * Only first map series of same mapType will drawMap + * @type {boolean} + */ + needsDrawMap: false, + + /** + * Group of all map series with same mapType + * @type {boolean} + */ + seriesGroup: [], + + init: function (option) { + + // this._fillOption(option, this.getMapType()); + // this.option = option; + + MapSeries.superApply(this, 'init', arguments); + + this.updateSelectedMap(this._createSelectableList()); + }, + + getInitialData: function (option) { + return createListSimply(this, ['value']); + }, + + mergeOption: function (newOption) { + // this._fillOption(newOption, this.getMapType()); + + MapSeries.superApply(this, 'mergeOption', arguments); + + this.updateSelectedMap(this._createSelectableList()); + }, + + _createSelectableList: function () { + var data = this.getRawData(); + var valueDim = data.mapDimension('value'); + var targetList = []; + for (var i = 0, len = data.count(); i < len; i++) { + targetList.push({ + name: data.getName(i), + value: data.get(valueDim, i), + selected: retrieveRawAttr(data, i, 'selected') + }); + } + + targetList = geoCreator.getFilledRegions(targetList, this.getMapType(), this.option.nameMap); + + return targetList; + }, + + /** + * If no host geo model, return null, which means using a + * inner exclusive geo model. + */ + getHostGeoModel: function () { + var geoIndex = this.option.geoIndex; + return geoIndex != null + ? this.dependentModels.geo[geoIndex] + : null; + }, + + getMapType: function () { + return (this.getHostGeoModel() || this).option.map; + }, + + _fillOption: function (option, mapName) { + // Shallow clone + // option = zrUtil.extend({}, option); + + // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap); + + // return option; + }, + + getRawValue: function (dataIndex) { + // Use value stored in data instead because it is calculated from multiple series + // FIXME Provide all value of multiple series ? + var data = this.getData(); + return data.get(data.mapDimension('value'), dataIndex); + }, + + /** + * Get model of region + * @param {string} name + * @return {module:echarts/model/Model} + */ + getRegionModel: function (regionName) { + var data = this.getData(); + return data.getItemModel(data.indexOfName(regionName)); + }, + + /** + * Map tooltip formatter + * + * @param {number} dataIndex + */ + formatTooltip: function (dataIndex) { + // FIXME orignalData and data is a bit confusing + var data = this.getData(); + var formattedValue = addCommas(this.getRawValue(dataIndex)); + var name = data.getName(dataIndex); + + var seriesGroup = this.seriesGroup; + var seriesNames = []; + for (var i = 0; i < seriesGroup.length; i++) { + var otherIndex = seriesGroup[i].originalData.indexOfName(name); + var valueDim = data.mapDimension('value'); + if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) { + seriesNames.push( + encodeHTML(seriesGroup[i].name) + ); + } + } + + return seriesNames.join(', ') + '
    ' + + encodeHTML(name + ' : ' + formattedValue); + }, + + /** + * @implement + */ + getTooltipPosition: function (dataIndex) { + if (dataIndex != null) { + var name = this.getData().getName(dataIndex); + var geo = this.coordinateSystem; + var region = geo.getRegion(name); + + return region && geo.dataToPoint(region.center); + } + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + }, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 2, + + coordinateSystem: 'geo', + + // map should be explicitly specified since ec3. + map: '', + + // If `geoIndex` is not specified, a exclusive geo will be + // created. Otherwise use the specified geo component, and + // `map` and `mapType` are ignored. + // geoIndex: 0, + + // 'center' | 'left' | 'right' | 'x%' | {number} + left: 'center', + // 'center' | 'top' | 'bottom' | 'x%' | {number} + top: 'center', + // right + // bottom + // width: + // height + + // Aspect is width / height. Inited to be geoJson bbox aspect + // This parameter is used for scale this aspect + aspectScale: 0.75, + + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + + + // 数值合并方式,默认加和,可选为: + // 'sum' | 'average' | 'max' | 'min' + // mapValueCalculation: 'sum', + // 地图数值计算结果小数精度 + // mapValuePrecision: 0, + + + // 显示图例颜色标识(系列标识的小圆点),图例开启时有效 + showLegendSymbol: true, + // 选择模式,默认关闭,可选single,multiple + // selectedMode: false, + dataRangeHoverLink: true, + // 是否开启缩放及漫游模式 + // roam: false, + + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ], + // higher priority than center and zoom + boundingCoords: null, + + // Default on center of map + center: null, + + zoom: 1, + + scaleLimit: null, + + label: { + show: false, + color: '#000' + }, + // scaleLimit: null, + itemStyle: { + borderWidth: 0.5, + borderColor: '#444', + areaColor: '#eee' + }, + + emphasis: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + areaColor: 'rgba(255,215,0,0.8)' + } + } + } + +}); + +mixin(MapSeries, selectableMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var ATTR = '\0_ec_interaction_mutex'; + +function take(zr, resourceKey, userKey) { + var store = getStore(zr); + store[resourceKey] = userKey; +} + +function release(zr, resourceKey, userKey) { + var store = getStore(zr); + var uKey = store[resourceKey]; + + if (uKey === userKey) { + store[resourceKey] = null; + } +} + +function isTaken(zr, resourceKey) { + return !!getStore(zr)[resourceKey]; +} + +function getStore(zr) { + return zr[ATTR] || (zr[ATTR] = {}); +} + +/** + * payload: { + * type: 'takeGlobalCursor', + * key: 'dataZoomSelect', or 'brush', or ..., + * If no userKey, release global cursor. + * } + */ +registerAction( + {type: 'takeGlobalCursor', event: 'globalCursorTaken', update: 'update'}, + function () {} +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @alias module:echarts/component/helper/RoamController + * @constructor + * @mixin {module:zrender/mixin/Eventful} + * + * @param {module:zrender/zrender~ZRender} zr + */ +function RoamController(zr) { + + /** + * @type {Function} + */ + this.pointerChecker; + + /** + * @type {module:zrender} + */ + this._zr = zr; + + /** + * @type {Object} + */ + this._opt = {}; + + // Avoid two roamController bind the same handler + var bind$$1 = bind; + var mousedownHandler = bind$$1(mousedown, this); + var mousemoveHandler = bind$$1(mousemove, this); + var mouseupHandler = bind$$1(mouseup, this); + var mousewheelHandler = bind$$1(mousewheel, this); + var pinchHandler = bind$$1(pinch, this); + + Eventful.call(this); + + /** + * @param {Function} pointerChecker + * input: x, y + * output: boolean + */ + this.setPointerChecker = function (pointerChecker) { + this.pointerChecker = pointerChecker; + }; + + /** + * Notice: only enable needed types. For example, if 'zoom' + * is not needed, 'zoom' should not be enabled, otherwise + * default mousewheel behaviour (scroll page) will be disabled. + * + * @param {boolean|string} [controlType=true] Specify the control type, + * which can be null/undefined or true/false + * or 'pan/move' or 'zoom'/'scale' + * @param {Object} [opt] + * @param {Object} [opt.zoomOnMouseWheel=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'. + * @param {Object} [opt.moveOnMouseMove=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'. + * @param {Object} [opt.moveOnMouseWheel=false] The value can be: true / false / 'shift' / 'ctrl' / 'alt'. + * @param {Object} [opt.preventDefaultMouseMove=true] When pan. + */ + this.enable = function (controlType, opt) { + + // Disable previous first + this.disable(); + + this._opt = defaults(clone(opt) || {}, { + zoomOnMouseWheel: true, + moveOnMouseMove: true, + // By default, wheel do not trigger move. + moveOnMouseWheel: false, + preventDefaultMouseMove: true + }); + + if (controlType == null) { + controlType = true; + } + + if (controlType === true || (controlType === 'move' || controlType === 'pan')) { + zr.on('mousedown', mousedownHandler); + zr.on('mousemove', mousemoveHandler); + zr.on('mouseup', mouseupHandler); + } + if (controlType === true || (controlType === 'scale' || controlType === 'zoom')) { + zr.on('mousewheel', mousewheelHandler); + zr.on('pinch', pinchHandler); + } + }; + + this.disable = function () { + zr.off('mousedown', mousedownHandler); + zr.off('mousemove', mousemoveHandler); + zr.off('mouseup', mouseupHandler); + zr.off('mousewheel', mousewheelHandler); + zr.off('pinch', pinchHandler); + }; + + this.dispose = this.disable; + + this.isDragging = function () { + return this._dragging; + }; + + this.isPinching = function () { + return this._pinching; + }; +} + +mixin(RoamController, Eventful); + + +function mousedown(e) { + if (notLeftMouse(e) + || (e.target && e.target.draggable) + ) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; + + // Only check on mosedown, but not mousemove. + // Mouse can be out of target when mouse moving. + if (this.pointerChecker && this.pointerChecker(e, x, y)) { + this._x = x; + this._y = y; + this._dragging = true; + } +} + +function mousemove(e) { + if (notLeftMouse(e) + || !isAvailableBehavior('moveOnMouseMove', e, this._opt) + || !this._dragging + || e.gestureEvent === 'pinch' + || isTaken(this._zr, 'globalPan') + ) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; + + var oldX = this._x; + var oldY = this._y; + + var dx = x - oldX; + var dy = y - oldY; + + this._x = x; + this._y = y; + + this._opt.preventDefaultMouseMove && stop(e.event); + + trigger(this, 'pan', 'moveOnMouseMove', e, { + dx: dx, dy: dy, oldX: oldX, oldY: oldY, newX: x, newY: y + }); +} + +function mouseup(e) { + if (!notLeftMouse(e)) { + this._dragging = false; + } +} + +function mousewheel(e) { + var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt); + var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt); + var wheelDelta = e.wheelDelta; + var absWheelDeltaDelta = Math.abs(wheelDelta); + var originX = e.offsetX; + var originY = e.offsetY; + + // wheelDelta maybe -0 in chrome mac. + if (wheelDelta === 0 || (!shouldZoom && !shouldMove)) { + return; + } + + // If both `shouldZoom` and `shouldMove` is true, trigger + // their event both, and the final behavior is determined + // by event listener themselves. + + if (shouldZoom) { + // Convenience: + // Mac and VM Windows on Mac: scroll up: zoom out. + // Windows: scroll up: zoom in. + + // FIXME: Should do more test in different environment. + // wheelDelta is too complicated in difference nvironment + // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel), + // although it has been normallized by zrender. + // wheelDelta of mouse wheel is bigger than touch pad. + var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1; + var scale = wheelDelta > 0 ? factor : 1 / factor; + checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, { + scale: scale, originX: originX, originY: originY + }); + } + + if (shouldMove) { + // FIXME: Should do more test in different environment. + var absDelta = Math.abs(wheelDelta); + // wheelDelta of mouse wheel is bigger than touch pad. + var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05); + checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, { + scrollDelta: scrollDelta, originX: originX, originY: originY + }); + } +} + +function pinch(e) { + if (isTaken(this._zr, 'globalPan')) { + return; + } + var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1; + checkPointerAndTrigger(this, 'zoom', null, e, { + scale: scale, originX: e.pinchX, originY: e.pinchY + }); +} + +function checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) { + if (controller.pointerChecker + && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY) + ) { + // When mouse is out of roamController rect, + // default befavoius should not be be disabled, otherwise + // page sliding is disabled, contrary to expectation. + stop(e.event); + + trigger(controller, eventName, behaviorToCheck, e, contollerEvent); + } +} + +function trigger(controller, eventName, behaviorToCheck, e, contollerEvent) { + // Also provide behavior checker for event listener, for some case that + // multiple components share one listener. + contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e); + controller.trigger(eventName, contollerEvent); +} + +// settings: { +// zoomOnMouseWheel +// moveOnMouseMove +// moveOnMouseWheel +// } +// The value can be: true / false / 'shift' / 'ctrl' / 'alt'. +function isAvailableBehavior(behaviorToCheck, e, settings) { + var setting = settings[behaviorToCheck]; + return !behaviorToCheck || ( + setting && (!isString(setting) || e.event[setting + 'Key']) + ); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +/** + * For geo and graph. + * + * @param {Object} controllerHost + * @param {module:zrender/Element} controllerHost.target + */ +function updateViewOnPan(controllerHost, dx, dy) { + var target = controllerHost.target; + var pos = target.position; + pos[0] += dx; + pos[1] += dy; + target.dirty(); +} + +/** + * For geo and graph. + * + * @param {Object} controllerHost + * @param {module:zrender/Element} controllerHost.target + * @param {number} controllerHost.zoom + * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2} + */ +function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) { + var target = controllerHost.target; + var zoomLimit = controllerHost.zoomLimit; + var pos = target.position; + var scale = target.scale; + + var newZoom = controllerHost.zoom = controllerHost.zoom || 1; + newZoom *= zoomDelta; + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + newZoom = Math.max( + Math.min(zoomMax, newZoom), + zoomMin + ); + } + var zoomScale = newZoom / controllerHost.zoom; + controllerHost.zoom = newZoom; + // Keep the mouse center when scaling + pos[0] -= (zoomX - pos[0]) * (zoomScale - 1); + pos[1] -= (zoomY - pos[1]) * (zoomScale - 1); + scale[0] *= zoomScale; + scale[1] *= zoomScale; + + target.dirty(); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var IRRELEVANT_EXCLUDES = {'axisPointer': 1, 'tooltip': 1, 'brush': 1}; + +/** + * Avoid that: mouse click on a elements that is over geo or graph, + * but roam is triggered. + */ +function onIrrelevantElement(e, api, targetCoordSysModel) { + var model = api.getComponentByElement(e.topTarget); + // If model is axisModel, it works only if it is injected with coordinateSystem. + var coordSys = model && model.coordinateSystem; + return model + && model !== targetCoordSysModel + && !IRRELEVANT_EXCLUDES[model.mainType] + && (coordSys && coordSys.model !== targetCoordSysModel); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function getFixedItemStyle(model, scale) { + var itemStyle = model.getItemStyle(); + var areaColor = model.get('areaColor'); + + // If user want the color not to be changed when hover, + // they should both set areaColor and color to be null. + if (areaColor != null) { + itemStyle.fill = areaColor; + } + + return itemStyle; +} + +function updateMapSelectHandler(mapDraw, mapOrGeoModel, regionsGroup, api, fromView) { + regionsGroup.off('click'); + regionsGroup.off('mousedown'); + + if (mapOrGeoModel.get('selectedMode')) { + + regionsGroup.on('mousedown', function () { + mapDraw._mouseDownFlag = true; + }); + + regionsGroup.on('click', function (e) { + if (!mapDraw._mouseDownFlag) { + return; + } + mapDraw._mouseDownFlag = false; + + var el = e.target; + while (!el.__regions) { + el = el.parent; + } + if (!el) { + return; + } + + var action = { + type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect', + batch: map(el.__regions, function (region) { + return { + name: region.name, + from: fromView.uid + }; + }) + }; + action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id; + + api.dispatchAction(action); + + updateMapSelected(mapOrGeoModel, regionsGroup); + }); + } +} + +function updateMapSelected(mapOrGeoModel, regionsGroup) { + // FIXME + regionsGroup.eachChild(function (otherRegionEl) { + each$1(otherRegionEl.__regions, function (region) { + otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal'); + }); + }); +} + +/** + * @alias module:echarts/component/helper/MapDraw + * @param {module:echarts/ExtensionAPI} api + * @param {boolean} updateGroup + */ +function MapDraw(api, updateGroup) { + + var group = new Group(); + + /** + * @type {string} + * @private + */ + this.uid = getUID('ec_map_draw'); + + /** + * @type {module:echarts/component/helper/RoamController} + * @private + */ + this._controller = new RoamController(api.getZr()); + + /** + * @type {Object} {target, zoom, zoomLimit} + * @private + */ + this._controllerHost = {target: updateGroup ? group : null}; + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = group; + + /** + * @type {boolean} + * @private + */ + this._updateGroup = updateGroup; + + /** + * This flag is used to make sure that only one among + * `pan`, `zoom`, `click` can occurs, otherwise 'selected' + * action may be triggered when `pan`, which is unexpected. + * @type {booelan} + */ + this._mouseDownFlag; + + /** + * @type {string} + */ + this._mapName; + + /** + * @type {boolean} + */ + this._initialized; + + /** + * @type {module:zrender/container/Group} + */ + group.add(this._regionsGroup = new Group()); + + /** + * @type {module:zrender/container/Group} + */ + group.add(this._backgroundGroup = new Group()); +} + +MapDraw.prototype = { + + constructor: MapDraw, + + draw: function (mapOrGeoModel, ecModel, api, fromView, payload) { + + var isGeo = mapOrGeoModel.mainType === 'geo'; + + // Map series has data. GEO model that controlled by map series + // will be assigned with map data. Other GEO model has no data. + var data = mapOrGeoModel.getData && mapOrGeoModel.getData(); + isGeo && ecModel.eachComponent({mainType: 'series', subType: 'map'}, function (mapSeries) { + if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) { + data = mapSeries.getData(); + } + }); + + var geo = mapOrGeoModel.coordinateSystem; + + this._updateBackground(geo); + + var regionsGroup = this._regionsGroup; + var group = this.group; + + var scale = geo.scale; + var transform = { + position: geo.position, + scale: scale + }; + + // No animation when first draw or in action + if (!regionsGroup.childAt(0) || payload) { + group.attr(transform); + } + else { + updateProps(group, transform, mapOrGeoModel); + } + + regionsGroup.removeAll(); + + var itemStyleAccessPath = ['itemStyle']; + var hoverItemStyleAccessPath = ['emphasis', 'itemStyle']; + var labelAccessPath = ['label']; + var hoverLabelAccessPath = ['emphasis', 'label']; + var nameMap = createHashMap(); + + each$1(geo.regions, function (region) { + + // Consider in GeoJson properties.name may be duplicated, for example, + // there is multiple region named "United Kindom" or "France" (so many + // colonies). And it is not appropriate to merge them in geo, which + // will make them share the same label and bring trouble in label + // location calculation. + var regionGroup = nameMap.get(region.name) + || nameMap.set(region.name, new Group()); + + var compoundPath = new CompoundPath({ + shape: { + paths: [] + } + }); + regionGroup.add(compoundPath); + + var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel; + + var itemStyleModel = regionModel.getModel(itemStyleAccessPath); + var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath); + var itemStyle = getFixedItemStyle(itemStyleModel, scale); + var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale); + + var labelModel = regionModel.getModel(labelAccessPath); + var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath); + + var dataIdx; + // Use the itemStyle in data if has data + if (data) { + dataIdx = data.indexOfName(region.name); + // Only visual color of each item will be used. It can be encoded by dataRange + // But visual color of series is used in symbol drawing + // + // Visual color for each series is for the symbol draw + var visualColor = data.getItemVisual(dataIdx, 'color', true); + if (visualColor) { + itemStyle.fill = visualColor; + } + } + + each$1(region.geometries, function (geometry) { + if (geometry.type !== 'polygon') { + return; + } + compoundPath.shape.paths.push(new Polygon({ + shape: { + points: geometry.exterior + } + })); + + for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); i++) { + compoundPath.shape.paths.push(new Polygon({ + shape: { + points: geometry.interiors[i] + } + })); + } + }); + + compoundPath.setStyle(itemStyle); + compoundPath.style.strokeNoScale = true; + compoundPath.culling = true; + // Label + var showLabel = labelModel.get('show'); + var hoverShowLabel = hoverLabelModel.get('show'); + + var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx)); + var itemLayout = data && data.getItemLayout(dataIdx); + // In the following cases label will be drawn + // 1. In map series and data value is NaN + // 2. In geo component + // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout + if ( + (isGeo || isDataNaN && (showLabel || hoverShowLabel)) + || (itemLayout && itemLayout.showLabel) + ) { + var query = !isGeo ? dataIdx : region.name; + var labelFetcher; + + // Consider dataIdx not found. + if (!data || dataIdx >= 0) { + labelFetcher = mapOrGeoModel; + } + + var textEl = new Text({ + position: region.center.slice(), + scale: [1 / scale[0], 1 / scale[1]], + z2: 10, + silent: true + }); + + setLabelStyle( + textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel, + { + labelFetcher: labelFetcher, + labelDataIndex: query, + defaultText: region.name, + useInsideStyle: false + }, + { + textAlign: 'center', + textVerticalAlign: 'middle' + } + ); + + regionGroup.add(textEl); + } + + // setItemGraphicEl, setHoverStyle after all polygons and labels + // are added to the rigionGroup + if (data) { + data.setItemGraphicEl(dataIdx, regionGroup); + } + else { + var regionModel = mapOrGeoModel.getRegionModel(region.name); + // Package custom mouse event for geo component + compoundPath.eventData = { + componentType: 'geo', + componentIndex: mapOrGeoModel.componentIndex, + geoIndex: mapOrGeoModel.componentIndex, + name: region.name, + region: (regionModel && regionModel.option) || {} + }; + } + + var groupRegions = regionGroup.__regions || (regionGroup.__regions = []); + groupRegions.push(region); + + setHoverStyle( + regionGroup, + hoverItemStyle, + {hoverSilentOnTouch: !!mapOrGeoModel.get('selectedMode')} + ); + + regionsGroup.add(regionGroup); + }); + + this._updateController(mapOrGeoModel, ecModel, api); + + updateMapSelectHandler(this, mapOrGeoModel, regionsGroup, api, fromView); + + updateMapSelected(mapOrGeoModel, regionsGroup); + }, + + remove: function () { + this._regionsGroup.removeAll(); + this._backgroundGroup.removeAll(); + this._controller.dispose(); + this._mapName && geoSourceManager.removeGraphic(this._mapName, this.uid); + this._mapName = null; + this._controllerHost = {}; + }, + + _updateBackground: function (geo) { + var mapName = geo.map; + + if (this._mapName !== mapName) { + each$1(geoSourceManager.makeGraphic(mapName, this.uid), function (root) { + this._backgroundGroup.add(root); + }, this); + } + + this._mapName = mapName; + }, + + _updateController: function (mapOrGeoModel, ecModel, api) { + var geo = mapOrGeoModel.coordinateSystem; + var controller = this._controller; + var controllerHost = this._controllerHost; + + controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit'); + controllerHost.zoom = geo.getZoom(); + + // roamType is will be set default true if it is null + controller.enable(mapOrGeoModel.get('roam') || false); + var mainType = mapOrGeoModel.mainType; + + function makeActionBase() { + var action = { + type: 'geoRoam', + componentType: mainType + }; + action[mainType + 'Id'] = mapOrGeoModel.id; + return action; + } + + controller.off('pan').on('pan', function (e) { + this._mouseDownFlag = false; + + updateViewOnPan(controllerHost, e.dx, e.dy); + + api.dispatchAction(extend(makeActionBase(), { + dx: e.dx, + dy: e.dy + })); + }, this); + + controller.off('zoom').on('zoom', function (e) { + this._mouseDownFlag = false; + + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + + api.dispatchAction(extend(makeActionBase(), { + zoom: e.scale, + originX: e.originX, + originY: e.originY + })); + + if (this._updateGroup) { + var scale = this.group.scale; + this._regionsGroup.traverse(function (el) { + if (el.type === 'text') { + el.attr('scale', [1 / scale[0], 1 / scale[1]]); + } + }); + } + }, this); + + controller.setPointerChecker(function (e, x, y) { + return geo.getViewRectAfterRoam().contain(x, y) + && !onIrrelevantElement(e, api, mapOrGeoModel); + }); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendChartView({ + + type: 'map', + + render: function (mapModel, ecModel, api, payload) { + // Not render if it is an toggleSelect action from self + if (payload && payload.type === 'mapToggleSelect' + && payload.from === this.uid + ) { + return; + } + + var group = this.group; + group.removeAll(); + + if (mapModel.getHostGeoModel()) { + return; + } + + // Not update map if it is an roam action from self + if (!(payload && payload.type === 'geoRoam' + && payload.componentType === 'series' + && payload.seriesId === mapModel.id + ) + ) { + if (mapModel.needsDrawMap) { + var mapDraw = this._mapDraw || new MapDraw(api, true); + group.add(mapDraw.group); + + mapDraw.draw(mapModel, ecModel, api, this, payload); + + this._mapDraw = mapDraw; + } + else { + // Remove drawed map + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + } + } + else { + var mapDraw = this._mapDraw; + mapDraw && group.add(mapDraw.group); + } + + mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') + && this._renderSymbols(mapModel, ecModel, api); + }, + + remove: function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + this.group.removeAll(); + }, + + dispose: function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + }, + + _renderSymbols: function (mapModel, ecModel, api) { + var originalData = mapModel.originalData; + var group = this.group; + + originalData.each(originalData.mapDimension('value'), function (value, idx) { + if (isNaN(value)) { + return; + } + + var layout = originalData.getItemLayout(idx); + + if (!layout || !layout.point) { + // Not exists in map + return; + } + + var point = layout.point; + var offset = layout.offset; + + var circle = new Circle({ + style: { + // Because the special of map draw. + // Which needs statistic of multiple series and draw on one map. + // And each series also need a symbol with legend color + // + // Layout and visual are put one the different data + fill: mapModel.getData().getVisual('color') + }, + shape: { + cx: point[0] + offset * 9, + cy: point[1], + r: 3 + }, + silent: true, + // Do not overlap the first series, on which labels are displayed. + z2: !offset ? 10 : 8 + }); + + // First data on the same region + if (!offset) { + var fullData = mapModel.mainSeries.getData(); + var name = originalData.getName(idx); + + var fullIndex = fullData.indexOfName(name); + + var itemModel = originalData.getItemModel(idx); + var labelModel = itemModel.getModel('label'); + var hoverLabelModel = itemModel.getModel('emphasis.label'); + + var polygonGroups = fullData.getItemGraphicEl(fullIndex); + + var normalText = retrieve2( + mapModel.getFormattedLabel(idx, 'normal'), + name + ); + var emphasisText = retrieve2( + mapModel.getFormattedLabel(idx, 'emphasis'), + normalText + ); + + var onEmphasis = function () { + var hoverStyle = setTextStyle({}, hoverLabelModel, { + text: hoverLabelModel.get('show') ? emphasisText : null + }, {isRectText: true, useInsideStyle: false}, true); + circle.style.extendFrom(hoverStyle); + // Make label upper than others if overlaps. + circle.__mapOriginalZ2 = circle.z2; + circle.z2 += 1; + }; + + var onNormal = function () { + setTextStyle(circle.style, labelModel, { + text: labelModel.get('show') ? normalText : null, + textPosition: labelModel.getShallow('position') || 'bottom' + }, {isRectText: true, useInsideStyle: false}); + + if (circle.__mapOriginalZ2 != null) { + circle.z2 = circle.__mapOriginalZ2; + circle.__mapOriginalZ2 = null; + } + }; + + polygonGroups.on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + + onNormal(); + } + + group.add(circle); + }); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/coord/View} view + * @param {Object} payload + * @param {Object} [zoomLimit] + */ +function updateCenterAndZoom( + view, payload, zoomLimit +) { + var previousZoom = view.getZoom(); + var center = view.getCenter(); + var zoom = payload.zoom; + + var point = view.dataToPoint(center); + + if (payload.dx != null && payload.dy != null) { + point[0] -= payload.dx; + point[1] -= payload.dy; + + var center = view.pointToData(point); + view.setCenter(center); + } + if (zoom != null) { + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + zoom = Math.max( + Math.min(previousZoom * zoom, zoomMax), + zoomMin + ) / previousZoom; + } + + // Zoom on given point(originX, originY) + view.scale[0] *= zoom; + view.scale[1] *= zoom; + var position = view.position; + var fixX = (payload.originX - position[0]) * (zoom - 1); + var fixY = (payload.originY - position[1]) * (zoom - 1); + + position[0] -= fixX; + position[1] -= fixY; + + view.updateTransform(); + // Get the new center + var center = view.pointToData(point); + view.setCenter(center); + view.setZoom(zoom * previousZoom); + } + + return { + center: view.getCenter(), + zoom: view.getZoom() + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @payload + * @property {string} [componentType=series] + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ +registerAction({ + type: 'geoRoam', + event: 'geoRoam', + update: 'updateTransform' +}, function (payload, ecModel) { + var componentType = payload.componentType || 'series'; + + ecModel.eachComponent( + { mainType: componentType, query: payload }, + function (componentModel) { + var geo = componentModel.coordinateSystem; + if (geo.type !== 'geo') { + return; + } + + var res = updateCenterAndZoom( + geo, payload, componentModel.get('scaleLimit') + ); + + componentModel.setCenter + && componentModel.setCenter(res.center); + + componentModel.setZoom + && componentModel.setZoom(res.zoom); + + // All map series with same `map` use the same geo coordinate system + // So the center and zoom must be in sync. Include the series not selected by legend + if (componentType === 'series') { + each$1(componentModel.seriesGroup, function (seriesModel) { + seriesModel.setCenter(res.center); + seriesModel.setZoom(res.zoom); + }); + } + } + ); +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var mapSymbolLayout = function (ecModel) { + + var processedMapType = {}; + + ecModel.eachSeriesByType('map', function (mapSeries) { + var mapType = mapSeries.getMapType(); + if (mapSeries.getHostGeoModel() || processedMapType[mapType]) { + return; + } + + var mapSymbolOffsets = {}; + + each$1(mapSeries.seriesGroup, function (subMapSeries) { + var geo = subMapSeries.coordinateSystem; + var data = subMapSeries.originalData; + if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) { + data.each(data.mapDimension('value'), function (value, idx) { + var name = data.getName(idx); + var region = geo.getRegion(name); + + // If input series.data is [11, 22, '-'/null/undefined, 44], + // it will be filled with NaN: [11, 22, NaN, 44] and NaN will + // not be drawn. So here must validate if value is NaN. + if (!region || isNaN(value)) { + return; + } + + var offset = mapSymbolOffsets[name] || 0; + + var point = geo.dataToPoint(region.center); + + mapSymbolOffsets[name] = offset + 1; + + data.setItemLayout(idx, { + point: point, + offset: offset + }); + }); + } + }); + + // Show label of those region not has legendSymbol(which is offset 0) + var data = mapSeries.getData(); + data.each(function (idx) { + var name = data.getName(idx); + var layout = data.getItemLayout(idx) || {}; + layout.showLabel = !mapSymbolOffsets[name]; + data.setItemLayout(idx, layout); + }); + + processedMapType[mapType] = true; + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var mapVisual = function (ecModel) { + ecModel.eachSeriesByType('map', function (seriesModel) { + var colorList = seriesModel.get('color'); + var itemStyleModel = seriesModel.getModel('itemStyle'); + + var areaColor = itemStyleModel.get('areaColor'); + var color = itemStyleModel.get('color') + || colorList[seriesModel.seriesIndex % colorList.length]; + + seriesModel.getData().setVisual({ + 'areaColor': areaColor, + 'color': color + }); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME 公用? +/** + * @param {Array.} datas + * @param {string} statisticType 'average' 'sum' + * @inner + */ +function dataStatistics(datas, statisticType) { + var dataNameMap = {}; + + each$1(datas, function (data) { + data.each(data.mapDimension('value'), function (value, idx) { + // Add prefix to avoid conflict with Object.prototype. + var mapKey = 'ec-' + data.getName(idx); + dataNameMap[mapKey] = dataNameMap[mapKey] || []; + if (!isNaN(value)) { + dataNameMap[mapKey].push(value); + } + }); + }); + + return datas[0].map(datas[0].mapDimension('value'), function (value, idx) { + var mapKey = 'ec-' + datas[0].getName(idx); + var sum = 0; + var min = Infinity; + var max = -Infinity; + var len = dataNameMap[mapKey].length; + for (var i = 0; i < len; i++) { + min = Math.min(min, dataNameMap[mapKey][i]); + max = Math.max(max, dataNameMap[mapKey][i]); + sum += dataNameMap[mapKey][i]; + } + var result; + if (statisticType === 'min') { + result = min; + } + else if (statisticType === 'max') { + result = max; + } + else if (statisticType === 'average') { + result = sum / len; + } + else { + result = sum; + } + return len === 0 ? NaN : result; + }); +} + +var mapDataStatistic = function (ecModel) { + var seriesGroups = {}; + ecModel.eachSeriesByType('map', function (seriesModel) { + var hostGeoModel = seriesModel.getHostGeoModel(); + var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType(); + (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel); + }); + + each$1(seriesGroups, function (seriesList, key) { + var data = dataStatistics( + map(seriesList, function (seriesModel) { + return seriesModel.getData(); + }), + seriesList[0].get('mapValueCalculation') + ); + + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].originalData = seriesList[i].getData(); + } + + // FIXME Put where? + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].seriesGroup = seriesList; + seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel(); + + seriesList[i].setData(data.cloneShallow()); + seriesList[i].mainSeries = seriesList[0]; + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var backwardCompat$2 = function (option) { + // Save geoCoord + var mapSeries = []; + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'map') { + mapSeries.push(seriesOpt); + seriesOpt.map = seriesOpt.map || seriesOpt.mapType; + // Put x, y, width, height, x2, y2 in the top level + defaults(seriesOpt, seriesOpt.mapLocation); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerLayout(mapSymbolLayout); +registerVisual(mapVisual); +registerProcessor(PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic); +registerPreprocessor(backwardCompat$2); + +createDataSelectAction('map', [{ + type: 'mapToggleSelect', + event: 'mapselectchanged', + method: 'toggleSelected' +}, { + type: 'mapSelect', + event: 'mapselected', + method: 'select' +}, { + type: 'mapUnSelect', + event: 'mapunselected', + method: 'unSelect' +}]); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Link lists and struct (graph or tree) + */ + +var each$7 = each$1; + +var DATAS = '\0__link_datas'; +var MAIN_DATA = '\0__link_mainData'; + +// Caution: +// In most case, either list or its shallow clones (see list.cloneShallow) +// is active in echarts process. So considering heap memory consumption, +// we do not clone tree or graph, but share them among list and its shallow clones. +// But in some rare case, we have to keep old list (like do animation in chart). So +// please take care that both the old list and the new list share the same tree/graph. + +/** + * @param {Object} opt + * @param {module:echarts/data/List} opt.mainData + * @param {Object} [opt.struct] For example, instance of Graph or Tree. + * @param {string} [opt.structAttr] designation: list[structAttr] = struct; + * @param {Object} [opt.datas] {dataType: data}, + * like: {node: nodeList, edge: edgeList}. + * Should contain mainData. + * @param {Object} [opt.datasAttr] {dataType: attr}, + * designation: struct[datasAttr[dataType]] = list; + */ +function linkList(opt) { + var mainData = opt.mainData; + var datas = opt.datas; + + if (!datas) { + datas = {main: mainData}; + opt.datasAttr = {main: 'data'}; + } + opt.datas = opt.mainData = null; + + linkAll(mainData, datas, opt); + + // Porxy data original methods. + each$7(datas, function (data) { + each$7(mainData.TRANSFERABLE_METHODS, function (methodName) { + data.wrapMethod(methodName, curry(transferInjection, opt)); + }); + + }); + + // Beyond transfer, additional features should be added to `cloneShallow`. + mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt)); + + // Only mainData trigger change, because struct.update may trigger + // another changable methods, which may bring about dead lock. + each$7(mainData.CHANGABLE_METHODS, function (methodName) { + mainData.wrapMethod(methodName, curry(changeInjection, opt)); + }); + + // Make sure datas contains mainData. + assert$1(datas[mainData.dataType] === mainData); +} + +function transferInjection(opt, res) { + if (isMainData(this)) { + // Transfer datas to new main data. + var datas = extend({}, this[DATAS]); + datas[this.dataType] = res; + linkAll(res, datas, opt); + } + else { + // Modify the reference in main data to point newData. + linkSingle(res, this.dataType, this[MAIN_DATA], opt); + } + return res; +} + +function changeInjection(opt, res) { + opt.struct && opt.struct.update(this); + return res; +} + +function cloneShallowInjection(opt, res) { + // cloneShallow, which brings about some fragilities, may be inappropriate + // to be exposed as an API. So for implementation simplicity we can make + // the restriction that cloneShallow of not-mainData should not be invoked + // outside, but only be invoked here. + each$7(res[DATAS], function (data, dataType) { + data !== res && linkSingle(data.cloneShallow(), dataType, res, opt); + }); + return res; +} + +/** + * Supplement method to List. + * + * @public + * @param {string} [dataType] If not specified, return mainData. + * @return {module:echarts/data/List} + */ +function getLinkedData(dataType) { + var mainData = this[MAIN_DATA]; + return (dataType == null || mainData == null) + ? mainData + : mainData[DATAS][dataType]; +} + +function isMainData(data) { + return data[MAIN_DATA] === data; +} + +function linkAll(mainData, datas, opt) { + mainData[DATAS] = {}; + each$7(datas, function (data, dataType) { + linkSingle(data, dataType, mainData, opt); + }); +} + +function linkSingle(data, dataType, mainData, opt) { + mainData[DATAS][dataType] = data; + data[MAIN_DATA] = mainData; + data.dataType = dataType; + + if (opt.struct) { + data[opt.structAttr] = opt.struct; + opt.struct[opt.datasAttr[dataType]] = data; + } + + // Supplement method. + data.getLinkedData = getLinkedData; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Tree data structure + * + * @module echarts/data/Tree + */ + +/** + * @constructor module:echarts/data/Tree~TreeNode + * @param {string} name + * @param {module:echarts/data/Tree} hostTree + */ +var TreeNode = function (name, hostTree) { + /** + * @type {string} + */ + this.name = name || ''; + + /** + * Depth of node + * + * @type {number} + * @readOnly + */ + this.depth = 0; + + /** + * Height of the subtree rooted at this node. + * @type {number} + * @readOnly + */ + this.height = 0; + + /** + * @type {module:echarts/data/Tree~TreeNode} + * @readOnly + */ + this.parentNode = null; + + /** + * Reference to list item. + * Do not persistent dataIndex outside, + * besause it may be changed by list. + * If dataIndex -1, + * this node is logical deleted (filtered) in list. + * + * @type {Object} + * @readOnly + */ + this.dataIndex = -1; + + /** + * @type {Array.} + * @readOnly + */ + this.children = []; + + /** + * @type {Array.} + * @pubilc + */ + this.viewChildren = []; + + /** + * @type {moduel:echarts/data/Tree} + * @readOnly + */ + this.hostTree = hostTree; +}; + +TreeNode.prototype = { + + constructor: TreeNode, + + /** + * The node is removed. + * @return {boolean} is removed. + */ + isRemoved: function () { + return this.dataIndex < 0; + }, + + /** + * Travel this subtree (include this node). + * Usage: + * node.eachNode(function () { ... }); // preorder + * node.eachNode('preorder', function () { ... }); // preorder + * node.eachNode('postorder', function () { ... }); // postorder + * node.eachNode( + * {order: 'postorder', attr: 'viewChildren'}, + * function () { ... } + * ); // postorder + * + * @param {(Object|string)} options If string, means order. + * @param {string=} options.order 'preorder' or 'postorder' + * @param {string=} options.attr 'children' or 'viewChildren' + * @param {Function} cb If in preorder and return false, + * its subtree will not be visited. + * @param {Object} [context] + */ + eachNode: function (options, cb, context) { + if (typeof options === 'function') { + context = cb; + cb = options; + options = null; + } + + options = options || {}; + if (isString(options)) { + options = {order: options}; + } + + var order = options.order || 'preorder'; + var children = this[options.attr || 'children']; + + var suppressVisitSub; + order === 'preorder' && (suppressVisitSub = cb.call(context, this)); + + for (var i = 0; !suppressVisitSub && i < children.length; i++) { + children[i].eachNode(options, cb, context); + } + + order === 'postorder' && cb.call(context, this); + }, + + /** + * Update depth and height of this subtree. + * + * @param {number} depth + */ + updateDepthAndHeight: function (depth) { + var height = 0; + this.depth = depth; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.updateDepthAndHeight(depth + 1); + if (child.height > height) { + height = child.height; + } + } + this.height = height + 1; + }, + + /** + * @param {string} id + * @return {module:echarts/data/Tree~TreeNode} + */ + getNodeById: function (id) { + if (this.getId() === id) { + return this; + } + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].getNodeById(id); + if (res) { + return res; + } + } + }, + + /** + * @param {module:echarts/data/Tree~TreeNode} node + * @return {boolean} + */ + contains: function (node) { + if (node === this) { + return true; + } + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].contains(node); + if (res) { + return res; + } + } + }, + + /** + * @param {boolean} includeSelf Default false. + * @return {Array.} order: [root, child, grandchild, ...] + */ + getAncestors: function (includeSelf) { + var ancestors = []; + var node = includeSelf ? this : this.parentNode; + while (node) { + ancestors.push(node); + node = node.parentNode; + } + ancestors.reverse(); + return ancestors; + }, + + /** + * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3 + * @return {number} Value. + */ + getValue: function (dimension) { + var data = this.hostTree.data; + return data.get(data.getDimension(dimension || 'value'), this.dataIndex); + }, + + /** + * @param {Object} layout + * @param {boolean=} [merge=false] + */ + setLayout: function (layout, merge$$1) { + this.dataIndex >= 0 + && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge$$1); + }, + + /** + * @return {Object} layout + */ + getLayout: function () { + return this.hostTree.data.getItemLayout(this.dataIndex); + }, + + /** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ + getModel: function (path) { + if (this.dataIndex < 0) { + return; + } + var hostTree = this.hostTree; + var itemModel = hostTree.data.getItemModel(this.dataIndex); + var levelModel = this.getLevelModel(); + var leavesModel; + if (!levelModel && (this.children.length === 0 || (this.children.length !== 0 && this.isExpand === false))) { + leavesModel = this.getLeavesModel(); + } + return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path)); + }, + + /** + * @return {module:echarts/model/Model} + */ + getLevelModel: function () { + return (this.hostTree.levelModels || [])[this.depth]; + }, + + /** + * @return {module:echarts/model/Model} + */ + getLeavesModel: function () { + return this.hostTree.leavesModel; + }, + + /** + * @example + * setItemVisual('color', color); + * setItemVisual({ + * 'color': color + * }); + */ + setVisual: function (key, value) { + this.dataIndex >= 0 + && this.hostTree.data.setItemVisual(this.dataIndex, key, value); + }, + + /** + * Get item visual + */ + getVisual: function (key, ignoreParent) { + return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent); + }, + + /** + * @public + * @return {number} + */ + getRawIndex: function () { + return this.hostTree.data.getRawIndex(this.dataIndex); + }, + + /** + * @public + * @return {string} + */ + getId: function () { + return this.hostTree.data.getId(this.dataIndex); + }, + + /** + * if this is an ancestor of another node + * + * @public + * @param {TreeNode} node another node + * @return {boolean} if is ancestor + */ + isAncestorOf: function (node) { + var parent = node.parentNode; + while (parent) { + if (parent === this) { + return true; + } + parent = parent.parentNode; + } + return false; + }, + + /** + * if this is an descendant of another node + * + * @public + * @param {TreeNode} node another node + * @return {boolean} if is descendant + */ + isDescendantOf: function (node) { + return node !== this && node.isAncestorOf(this); + } +}; + +/** + * @constructor + * @alias module:echarts/data/Tree + * @param {module:echarts/model/Model} hostModel + * @param {Array.} levelOptions + * @param {Object} leavesOption + */ +function Tree(hostModel, levelOptions, leavesOption) { + /** + * @type {module:echarts/data/Tree~TreeNode} + * @readOnly + */ + this.root; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.data; + + /** + * Index of each item is the same as the raw index of coresponding list item. + * @private + * @type {Array.} treeOptions.levels + * @param {Array.} treeOptions.leaves + * @return module:echarts/data/Tree + */ +Tree.createTree = function (dataRoot, hostModel, treeOptions) { + + var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves); + var listData = []; + var dimMax = 1; + + buildHierarchy(dataRoot); + + function buildHierarchy(dataNode, parentNode) { + var value = dataNode.value; + dimMax = Math.max(dimMax, isArray(value) ? value.length : 1); + + listData.push(dataNode); + + var node = new TreeNode(dataNode.name, tree); + parentNode + ? addChild(node, parentNode) + : (tree.root = node); + + tree._nodes.push(node); + + var children = dataNode.children; + if (children) { + for (var i = 0; i < children.length; i++) { + buildHierarchy(children[i], node); + } + } + } + + tree.root.updateDepthAndHeight(0); + + var dimensionsInfo = createDimensions(listData, { + coordDimensions: ['value'], + dimensionsCount: dimMax + }); + + var list = new List(dimensionsInfo, hostModel); + list.initData(listData); + + linkList({ + mainData: list, + struct: tree, + structAttr: 'tree' + }); + + tree.update(); + + return tree; +}; + +/** + * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote, + * so this function is not ready and not necessary to be public. + * + * @param {(module:echarts/data/Tree~TreeNode|Object)} child + */ +function addChild(child, node) { + var children = node.children; + if (child.parentNode === node) { + return; + } + + children.push(child); + child.parentNode = node; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Create data struct and define tree view's series model + * @author Deqing Li(annong035@gmail.com) + */ + +SeriesModel.extend({ + + type: 'series.tree', + + layoutInfo: null, + + // can support the position parameters 'left', 'top','right','bottom', 'width', + // 'height' in the setOption() with 'merge' mode normal. + layoutMode: 'box', + + /** + * Init a tree data structure from data in option series + * @param {Object} option the object used to config echarts view + * @return {module:echarts/data/List} storage initial data + */ + getInitialData: function (option) { + + //create an virtual root + var root = {name: option.name, children: option.data}; + + var leaves = option.leaves || {}; + + var treeOption = {}; + + treeOption.leaves = leaves; + + var tree = Tree.createTree(root, this, treeOption); + + var treeDepth = 0; + + tree.eachNode('preorder', function (node) { + if (node.depth > treeDepth) { + treeDepth = node.depth; + } + }); + + var expandAndCollapse = option.expandAndCollapse; + var expandTreeDepth = (expandAndCollapse && option.initialTreeDepth >= 0) + ? option.initialTreeDepth : treeDepth; + + tree.root.eachNode('preorder', function (node) { + var item = node.hostTree.data.getRawDataItem(node.dataIndex); + // Add item.collapsed != null, because users can collapse node original in the series.data. + node.isExpand = (item && item.collapsed != null) + ? !item.collapsed + : node.depth <= expandTreeDepth; + }); + + return tree.data; + }, + + /** + * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'. + * @returns {string} orient + */ + getOrient: function () { + var orient = this.get('orient'); + if (orient === 'horizontal') { + orient = 'LR'; + } + else if (orient === 'vertical') { + orient = 'TB'; + } + return orient; + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + }, + + /** + * @override + * @param {number} dataIndex + */ + formatTooltip: function (dataIndex) { + var tree = this.getData().tree; + var realRoot = tree.root.children[0]; + var node = tree.getNodeByDataIndex(dataIndex); + var value = node.getValue(); + var name = node.name; + while (node && (node !== realRoot)) { + name = node.parentNode.name + '.' + name; + node = node.parentNode; + } + return encodeHTML(name + ( + (isNaN(value) || value == null) ? '' : ' : ' + value + )); + }, + + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: 'view', + + // the position of the whole view + left: '12%', + top: '12%', + right: '12%', + bottom: '12%', + + // the layout of the tree, two value can be selected, 'orthogonal' or 'radial' + layout: 'orthogonal', + + roam: false, // true | false | 'move' | 'scale', see module:component/helper/RoamController. + // Symbol size scale ratio in roam + nodeScaleRatio: 0.4, + + // Default on center of graph + center: null, + + zoom: 1, + + // The orient of orthoginal layout, can be setted to 'LR', 'TB', 'RL', 'BT'. + // and the backward compatibility configuration 'horizontal = LR', 'vertical = TB'. + orient: 'LR', + + symbol: 'emptyCircle', + + symbolSize: 7, + + expandAndCollapse: true, + + initialTreeDepth: 2, + + lineStyle: { + color: '#ccc', + width: 1.5, + curveness: 0.5 + }, + + itemStyle: { + color: 'lightsteelblue', + borderColor: '#c23531', + borderWidth: 1.5 + }, + + label: { + show: true, + color: '#555' + }, + + leaves: { + label: { + show: true + } + }, + + animationEasing: 'linear', + + animationDuration: 700, + + animationDurationUpdate: 1000 + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* The tree layout implementation references to d3.js +* (https://github.com/d3/d3-hierarchy). The use of the source +* code of this file is also subject to the terms and consitions +* of its license (BSD-3Clause, see ). +*/ + +/** + * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing + * the tree. + * @see https://github.com/d3/d3-hierarchy + */ + +/** + * Initialize all computational message for following algorithm + * @param {module:echarts/data/Tree~TreeNode} root The virtual root of the tree + */ +function init$2(root) { + root.hierNode = { + defaultAncestor: null, + ancestor: root, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: 0, + thread: null + }; + + var nodes = [root]; + var node; + var children; + + while (node = nodes.pop()) { // jshint ignore:line + children = node.children; + if (node.isExpand && children.length) { + var n = children.length; + for (var i = n - 1; i >= 0; i--) { + var child = children[i]; + child.hierNode = { + defaultAncestor: null, + ancestor: child, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: i, + thread: null + }; + nodes.push(child); + } + } + } +} + +/** + * Computes a preliminary x coordinate for node. Before that, this function is + * applied recursively to the children of node, as well as the function + * apportion(). After spacing out the children by calling executeShifts(), the + * node is placed to the midpoint of its outermost children. + * @param {module:echarts/data/Tree~TreeNode} node + * @param {Function} separation + */ +function firstWalk(node, separation) { + var children = node.isExpand ? node.children : []; + var siblings = node.parentNode.children; + var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null; + if (children.length) { + executeShifts(node); + var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2; + if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + node.hierNode.modifier = node.hierNode.prelim - midPoint; + } + else { + node.hierNode.prelim = midPoint; + } + } + else if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + } + node.parentNode.hierNode.defaultAncestor = apportion( + node, + subtreeW, + node.parentNode.hierNode.defaultAncestor || siblings[0], + separation + ); +} + + +/** + * Computes all real x-coordinates by summing up the modifiers recursively. + * @param {module:echarts/data/Tree~TreeNode} node + */ +function secondWalk(node) { + var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier; + node.setLayout({x: nodeX}, true); + node.hierNode.modifier += node.parentNode.hierNode.modifier; +} + + +function separation(cb) { + return arguments.length ? cb : defaultSeparation; +} + +/** + * Transform the common coordinate to radial coordinate + * @param {number} x + * @param {number} y + * @return {Object} + */ +function radialCoordinate(x, y) { + var radialCoor = {}; + x -= Math.PI / 2; + radialCoor.x = y * Math.cos(x); + radialCoor.y = y * Math.sin(x); + return radialCoor; +} + +/** + * Get the layout position of the whole view + * @param {module:echarts/model/Series} seriesModel the model object of sankey series + * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call + * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view + */ +function getViewRect(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +/** + * All other shifts, applied to the smaller subtrees between w- and w+, are + * performed by this function. + * @param {module:echarts/data/Tree~TreeNode} node + */ +function executeShifts(node) { + var children = node.children; + var n = children.length; + var shift = 0; + var change = 0; + while (--n >= 0) { + var child = children[n]; + child.hierNode.prelim += shift; + child.hierNode.modifier += shift; + change += child.hierNode.change; + shift += child.hierNode.shift + change; + } +} + +/** + * The core of the algorithm. Here, a new subtree is combined with the + * previous subtrees. Threads are used to traverse the inside and outside + * contours of the left and right subtree up to the highest common level. + * Whenever two nodes of the inside contours conflict, we compute the left + * one of the greatest uncommon ancestors using the function nextAncestor() + * and call moveSubtree() to shift the subtree and prepare the shifts of + * smaller subtrees. Finally, we add a new thread (if necessary). + * @param {module:echarts/data/Tree~TreeNode} subtreeV + * @param {module:echarts/data/Tree~TreeNode} subtreeW + * @param {module:echarts/data/Tree~TreeNode} ancestor + * @param {Function} separation + * @return {module:echarts/data/Tree~TreeNode} + */ +function apportion(subtreeV, subtreeW, ancestor, separation) { + + if (subtreeW) { + var nodeOutRight = subtreeV; + var nodeInRight = subtreeV; + var nodeOutLeft = nodeInRight.parentNode.children[0]; + var nodeInLeft = subtreeW; + + var sumOutRight = nodeOutRight.hierNode.modifier; + var sumInRight = nodeInRight.hierNode.modifier; + var sumOutLeft = nodeOutLeft.hierNode.modifier; + var sumInLeft = nodeInLeft.hierNode.modifier; + + while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) { + nodeOutRight = nextRight(nodeOutRight); + nodeOutLeft = nextLeft(nodeOutLeft); + nodeOutRight.hierNode.ancestor = subtreeV; + var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim + - sumInRight + separation(nodeInLeft, nodeInRight); + if (shift > 0) { + moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift); + sumInRight += shift; + sumOutRight += shift; + } + sumInLeft += nodeInLeft.hierNode.modifier; + sumInRight += nodeInRight.hierNode.modifier; + sumOutRight += nodeOutRight.hierNode.modifier; + sumOutLeft += nodeOutLeft.hierNode.modifier; + } + if (nodeInLeft && !nextRight(nodeOutRight)) { + nodeOutRight.hierNode.thread = nodeInLeft; + nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight; + + } + if (nodeInRight && !nextLeft(nodeOutLeft)) { + nodeOutLeft.hierNode.thread = nodeInRight; + nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft; + ancestor = subtreeV; + } + } + return ancestor; +} + +/** + * This function is used to traverse the right contour of a subtree. + * It returns the rightmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + * @param {module:echarts/data/Tree~TreeNode} node + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextRight(node) { + var children = node.children; + return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread; +} + +/** + * This function is used to traverse the left contour of a subtree (or a subforest). + * It returns the leftmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + * @param {module:echarts/data/Tree~TreeNode} node + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextLeft(node) { + var children = node.children; + return children.length && node.isExpand ? children[0] : node.hierNode.thread; +} + +/** + * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor. + * Otherwise, returns the specified ancestor. + * @param {module:echarts/data/Tree~TreeNode} nodeInLeft + * @param {module:echarts/data/Tree~TreeNode} node + * @param {module:echarts/data/Tree~TreeNode} ancestor + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextAncestor(nodeInLeft, node, ancestor) { + return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode + ? nodeInLeft.hierNode.ancestor : ancestor; +} + +/** + * Shifts the current subtree rooted at wr. This is done by increasing prelim(w+) and modifier(w+) by shift. + * @param {module:echarts/data/Tree~TreeNode} wl + * @param {module:echarts/data/Tree~TreeNode} wr + * @param {number} shift [description] + */ +function moveSubtree(wl, wr, shift) { + var change = shift / (wr.hierNode.i - wl.hierNode.i); + wr.hierNode.change -= change; + wr.hierNode.shift += shift; + wr.hierNode.modifier += shift; + wr.hierNode.prelim += shift; + wl.hierNode.change += change; +} + +function defaultSeparation(node1, node2) { + return node1.parentNode === node2.parentNode ? 1 : 2; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file This file used to draw tree view. + * @author Deqing Li(annong035@gmail.com) + */ + +extendChartView({ + + type: 'tree', + + /** + * Init the chart + * @override + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + init: function (ecModel, api) { + + /** + * @private + * @type {module:echarts/data/Tree} + */ + this._oldTree; + + /** + * @private + * @type {module:zrender/container/Group} + */ + this._mainGroup = new Group(); + + /** + * @private + * @type {module:echarts/componet/helper/RoamController} + */ + this._controller = new RoamController(api.getZr()); + + this._controllerHost = {target: this.group}; + + this.group.add(this._mainGroup); + }, + + render: function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + + var layoutInfo = seriesModel.layoutInfo; + + var group = this._mainGroup; + + var layout = seriesModel.get('layout'); + + if (layout === 'radial') { + group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]); + } + else { + group.attr('position', [layoutInfo.x, layoutInfo.y]); + } + + this._updateViewCoordSys(seriesModel); + this._updateController(seriesModel, ecModel, api); + + var oldData = this._data; + + var seriesScope = { + expandAndCollapse: seriesModel.get('expandAndCollapse'), + layout: layout, + orient: seriesModel.getOrient(), + curvature: seriesModel.get('lineStyle.curveness'), + symbolRotate: seriesModel.get('symbolRotate'), + symbolOffset: seriesModel.get('symbolOffset'), + hoverAnimation: seriesModel.get('hoverAnimation'), + useNameLabel: true, + fadeIn: true + }; + + data.diff(oldData) + .add(function (newIdx) { + if (symbolNeedsDraw$1(data, newIdx)) { + // Create node and edge + updateNode(data, newIdx, null, group, seriesModel, seriesScope); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + if (!symbolNeedsDraw$1(data, newIdx)) { + symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope); + return; + } + // Update node and edge + updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope); + }) + .remove(function (oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + // When remove a collapsed node of subtree, since the collapsed + // node haven't been initialized with a symbol element, + // you can't found it's symbol element through index. + // so if we want to remove the symbol element we should insure + // that the symbol element is not null. + if (symbolEl) { + removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope); + } + }) + .execute(); + + this._nodeScaleRatio = seriesModel.get('nodeScaleRatio'); + + this._updateNodeAndLinkScale(seriesModel); + + if (seriesScope.expandAndCollapse === true) { + data.eachItemGraphicEl(function (el, dataIndex) { + el.off('click').on('click', function () { + api.dispatchAction({ + type: 'treeExpandAndCollapse', + seriesId: seriesModel.id, + dataIndex: dataIndex + }); + }); + }); + } + this._data = data; + }, + + _updateViewCoordSys: function (seriesModel) { + var data = seriesModel.getData(); + var points = []; + data.each(function (idx) { + var layout = data.getItemLayout(idx); + if (layout && !isNaN(layout.x) && !isNaN(layout.y)) { + points.push([+layout.x, +layout.y]); + } + }); + var min = []; + var max = []; + fromPoints(points, min, max); + // If width or height is 0 + if (max[0] - min[0] === 0) { + max[0] += 1; + min[0] -= 1; + } + if (max[1] - min[1] === 0) { + max[1] += 1; + min[1] -= 1; + } + + var viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + + viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); + + viewCoordSys.setCenter(seriesModel.get('center')); + viewCoordSys.setZoom(seriesModel.get('zoom')); + + // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group + this.group.attr({ + position: viewCoordSys.position, + scale: viewCoordSys.scale + }); + + this._viewCoordSys = viewCoordSys; + }, + + _updateController: function (seriesModel, ecModel, api) { + var controller = this._controller; + var controllerHost = this._controllerHost; + var group = this.group; + controller.setPointerChecker(function (e, x, y) { + var rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) + && !onIrrelevantElement(e, api, seriesModel); + }); + + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + + controller + .off('pan') + .off('zoom') + .on('pan', function (e) { + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'treeRoam', + dx: e.dx, + dy: e.dy + }); + }, this) + .on('zoom', function (e) { + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'treeRoam', + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + this._updateNodeAndLinkScale(seriesModel); + }, this); + }, + + _updateNodeAndLinkScale: function (seriesModel) { + var data = seriesModel.getData(); + + var nodeScale = this._getNodeGlobalScale(seriesModel); + var invScale = [nodeScale, nodeScale]; + + data.eachItemGraphicEl(function (el, idx) { + el.attr('scale', invScale); + }); + }, + + _getNodeGlobalScale: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type !== 'view') { + return 1; + } + + var nodeScaleRatio = this._nodeScaleRatio; + + var groupScale = coordSys.scale; + var groupZoom = (groupScale && groupScale[0]) || 1; + // Scale node when zoom changes + var roamZoom = coordSys.getZoom(); + var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1; + + return nodeScale / groupZoom; + }, + + dispose: function () { + this._controller && this._controller.dispose(); + this._controllerHost = {}; + }, + + remove: function () { + this._mainGroup.removeAll(); + this._data = null; + } + +}); + +function symbolNeedsDraw$1(data, dataIndex) { + var layout = data.getItemLayout(dataIndex); + + return layout + && !isNaN(layout.x) && !isNaN(layout.y) + && data.getItemVisual(dataIndex, 'symbol') !== 'none'; +} + +function getTreeNodeStyle(node, itemModel, seriesScope) { + seriesScope.itemModel = itemModel; + seriesScope.itemStyle = itemModel.getModel('itemStyle').getItemStyle(); + seriesScope.hoverItemStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle(); + seriesScope.lineStyle = itemModel.getModel('lineStyle').getLineStyle(); + seriesScope.labelModel = itemModel.getModel('label'); + seriesScope.hoverLabelModel = itemModel.getModel('emphasis.label'); + + if (node.isExpand === false && node.children.length !== 0) { + seriesScope.symbolInnerColor = seriesScope.itemStyle.fill; + } + else { + seriesScope.symbolInnerColor = '#fff'; + } + + return seriesScope; +} + +function updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) { + var isInit = !symbolEl; + var node = data.tree.getNodeByDataIndex(dataIndex); + var itemModel = node.getModel(); + var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope); + var virtualRoot = data.tree.root; + + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex); + var sourceLayout = source.getLayout(); + var sourceOldLayout = sourceSymbolEl + ? { + x: sourceSymbolEl.position[0], + y: sourceSymbolEl.position[1], + rawX: sourceSymbolEl.__radialOldRawX, + rawY: sourceSymbolEl.__radialOldRawY + } + : sourceLayout; + var targetLayout = node.getLayout(); + + if (isInit) { + symbolEl = new SymbolClz$1(data, dataIndex, seriesScope); + symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]); + } + else { + symbolEl.updateData(data, dataIndex, seriesScope); + } + + symbolEl.__radialOldRawX = symbolEl.__radialRawX; + symbolEl.__radialOldRawY = symbolEl.__radialRawY; + symbolEl.__radialRawX = targetLayout.rawX; + symbolEl.__radialRawY = targetLayout.rawY; + + group.add(symbolEl); + data.setItemGraphicEl(dataIndex, symbolEl); + updateProps(symbolEl, { + position: [targetLayout.x, targetLayout.y] + }, seriesModel); + + var symbolPath = symbolEl.getSymbolPath(); + + if (seriesScope.layout === 'radial') { + var realRoot = virtualRoot.children[0]; + var rootLayout = realRoot.getLayout(); + var length = realRoot.children.length; + var rad; + var isLeft; + + if (targetLayout.x === rootLayout.x && node.isExpand === true) { + var center = {}; + center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2; + center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2; + rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + isLeft = center.x < rootLayout.x; + if (isLeft) { + rad = rad - Math.PI; + } + } + else { + rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + if (node.children.length === 0 || (node.children.length !== 0 && node.isExpand === false)) { + isLeft = targetLayout.x < rootLayout.x; + if (isLeft) { + rad = rad - Math.PI; + } + } + else { + isLeft = targetLayout.x > rootLayout.x; + if (!isLeft) { + rad = rad - Math.PI; + } + } + } + + var textPosition = isLeft ? 'left' : 'right'; + symbolPath.setStyle({ + textPosition: textPosition, + textRotation: -rad, + textOrigin: 'center', + verticalAlign: 'middle' + }); + } + + if (node.parentNode && node.parentNode !== virtualRoot) { + var edge = symbolEl.__edge; + if (!edge) { + edge = symbolEl.__edge = new BezierCurve({ + shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout), + style: defaults({opacity: 0, strokeNoScale: true}, seriesScope.lineStyle) + }); + } + + updateProps(edge, { + shape: getEdgeShape(seriesScope, sourceLayout, targetLayout), + style: {opacity: 1} + }, seriesModel); + + group.add(edge); + } +} + +function removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) { + var node = data.tree.getNodeByDataIndex(dataIndex); + var virtualRoot = data.tree.root; + var itemModel = node.getModel(); + var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope); + + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceLayout; + while (sourceLayout = source.getLayout(), sourceLayout == null) { + source = source.parentNode === virtualRoot ? source : source.parentNode || source; + } + + updateProps(symbolEl, { + position: [sourceLayout.x + 1, sourceLayout.y + 1] + }, seriesModel, function () { + group.remove(symbolEl); + data.setItemGraphicEl(dataIndex, null); + }); + + symbolEl.fadeOut(null, {keepLabel: true}); + + var edge = symbolEl.__edge; + if (edge) { + updateProps(edge, { + shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout), + style: { + opacity: 0 + } + }, seriesModel, function () { + group.remove(edge); + }); + } +} + +function getEdgeShape(seriesScope, sourceLayout, targetLayout) { + var cpx1; + var cpy1; + var cpx2; + var cpy2; + var orient = seriesScope.orient; + var x1; + var x2; + var y1; + var y2; + + if (seriesScope.layout === 'radial') { + x1 = sourceLayout.rawX; + y1 = sourceLayout.rawY; + x2 = targetLayout.rawX; + y2 = targetLayout.rawY; + + var radialCoor1 = radialCoordinate(x1, y1); + var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature); + var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature); + var radialCoor4 = radialCoordinate(x2, y2); + + return { + x1: radialCoor1.x, + y1: radialCoor1.y, + x2: radialCoor4.x, + y2: radialCoor4.y, + cpx1: radialCoor2.x, + cpy1: radialCoor2.y, + cpx2: radialCoor3.x, + cpy2: radialCoor3.y + }; + } + else { + x1 = sourceLayout.x; + y1 = sourceLayout.y; + x2 = targetLayout.x; + y2 = targetLayout.y; + + if (orient === 'LR' || orient === 'RL') { + cpx1 = x1 + (x2 - x1) * seriesScope.curvature; + cpy1 = y1; + cpx2 = x2 + (x1 - x2) * seriesScope.curvature; + cpy2 = y2; + } + if (orient === 'TB' || orient === 'BT') { + cpx1 = x1; + cpy1 = y1 + (y2 - y1) * seriesScope.curvature; + cpx2 = x2; + cpy2 = y2 + (y1 - y2) * seriesScope.curvature; + } + } + + return { + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }; + +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Register the actions of the tree + * @author Deqing Li(annong035@gmail.com) + */ + +registerAction({ + type: 'treeExpandAndCollapse', + event: 'treeExpandAndCollapse', + update: 'update' +}, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) { + var dataIndex = payload.dataIndex; + var tree = seriesModel.getData().tree; + var node = tree.getNodeByDataIndex(dataIndex); + node.isExpand = !node.isExpand; + + }); +}); + +registerAction({ + type: 'treeRoam', + event: 'treeRoam', + // Here we set 'none' instead of 'update', because roam action + // just need to update the transform matrix without having to recalculate + // the layout. So don't need to go through the whole update process, such + // as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on. + update: 'none' +}, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var res = updateCenterAndZoom(coordSys, payload); + + seriesModel.setCenter + && seriesModel.setCenter(res.center); + + seriesModel.setZoom + && seriesModel.setZoom(res.zoom); + }); +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +/** + * Traverse the tree from bottom to top and do something + * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree + * @param {Function} callback + */ +function eachAfter(root, callback, separation) { + var nodes = [root]; + var next = []; + var node; + + while (node = nodes.pop()) { // jshint ignore:line + next.push(node); + if (node.isExpand) { + var children = node.children; + if (children.length) { + for (var i = 0; i < children.length; i++) { + nodes.push(children[i]); + } + } + } + } + + while (node = next.pop()) { // jshint ignore:line + callback(node, separation); + } +} + +/** + * Traverse the tree from top to bottom and do something + * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree + * @param {Function} callback + */ +function eachBefore(root, callback) { + var nodes = [root]; + var node; + while (node = nodes.pop()) { // jshint ignore:line + callback(node); + if (node.isExpand) { + var children = node.children; + if (children.length) { + for (var i = children.length - 1; i >= 0; i--) { + nodes.push(children[i]); + } + } + } + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var treeLayout = function (ecModel, api) { + ecModel.eachSeriesByType('tree', function (seriesModel) { + commonLayout(seriesModel, api); + }); +}; + +function commonLayout(seriesModel, api) { + var layoutInfo = getViewRect(seriesModel, api); + seriesModel.layoutInfo = layoutInfo; + var layout = seriesModel.get('layout'); + var width = 0; + var height = 0; + var separation$$1 = null; + + if (layout === 'radial') { + width = 2 * Math.PI; + height = Math.min(layoutInfo.height, layoutInfo.width) / 2; + separation$$1 = separation(function (node1, node2) { + return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth; + }); + } + else { + width = layoutInfo.width; + height = layoutInfo.height; + separation$$1 = separation(); + } + + var virtualRoot = seriesModel.getData().tree.root; + var realRoot = virtualRoot.children[0]; + + if (realRoot) { + init$2(virtualRoot); + eachAfter(realRoot, firstWalk, separation$$1); + virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim; + eachBefore(realRoot, secondWalk); + + var left = realRoot; + var right = realRoot; + var bottom = realRoot; + eachBefore(realRoot, function (node) { + var x = node.getLayout().x; + if (x < left.getLayout().x) { + left = node; + } + if (x > right.getLayout().x) { + right = node; + } + if (node.depth > bottom.depth) { + bottom = node; + } + }); + + var delta = left === right ? 1 : separation$$1(left, right) / 2; + var tx = delta - left.getLayout().x; + var kx = 0; + var ky = 0; + var coorX = 0; + var coorY = 0; + if (layout === 'radial') { + kx = width / (right.getLayout().x + delta + tx); + // here we use (node.depth - 1), bucause the real root's depth is 1 + ky = height / ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorX = (node.getLayout().x + tx) * kx; + coorY = (node.depth - 1) * ky; + var finalCoor = radialCoordinate(coorX, coorY); + node.setLayout({x: finalCoor.x, y: finalCoor.y, rawX: coorX, rawY: coorY}, true); + }); + } + else { + var orient = seriesModel.getOrient(); + if (orient === 'RL' || orient === 'LR') { + ky = height / (right.getLayout().x + delta + tx); + kx = width / ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorY = (node.getLayout().x + tx) * ky; + coorX = orient === 'LR' + ? (node.depth - 1) * kx + : width - (node.depth - 1) * kx; + node.setLayout({x: coorX, y: coorY}, true); + }); + } + else if (orient === 'TB' || orient === 'BT') { + kx = width / (right.getLayout().x + delta + tx); + ky = height / ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorX = (node.getLayout().x + tx) * kx; + coorY = orient === 'TB' + ? (node.depth - 1) * ky + : height - (node.depth - 1) * ky; + node.setLayout({x: coorX, y: coorY}, true); + }); + } + } + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(visualSymbol('tree', 'circle')); +registerLayout(treeLayout); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) { + if (payload && indexOf(validPayloadTypes, payload.type) >= 0) { + var root = seriesModel.getData().tree.root; + var targetNode = payload.targetNode; + + if (typeof targetNode === 'string') { + targetNode = root.getNodeById(targetNode); + } + + if (targetNode && root.contains(targetNode)) { + return {node: targetNode}; + } + + var targetNodeId = payload.targetNodeId; + if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) { + return {node: targetNode}; + } + } +} + +// Not includes the given node at the last item. +function getPathToRoot(node) { + var path = []; + while (node) { + node = node.parentNode; + node && path.push(node); + } + return path.reverse(); +} + +function aboveViewRoot(viewRoot, node) { + var viewPath = getPathToRoot(viewRoot); + return indexOf(viewPath, node) >= 0; +} + +// From root to the input node (the input node will be included). +function wrapTreePathInfo(node, seriesModel) { + var treePathInfo = []; + + while (node) { + var nodeDataIndex = node.dataIndex; + treePathInfo.push({ + name: node.name, + dataIndex: nodeDataIndex, + value: seriesModel.getRawValue(nodeDataIndex) + }); + node = node.parentNode; + } + + treePathInfo.reverse(); + + return treePathInfo; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.treemap', + + layoutMode: 'box', + + dependencies: ['grid', 'polar'], + + /** + * @type {module:echarts/data/Tree~Node} + */ + _viewRoot: null, + + defaultOption: { + // Disable progressive rendering + progressive: 0, + hoverLayerThreshold: Infinity, + // center: ['50%', '50%'], // not supported in ec3. + // size: ['80%', '80%'], // deprecated, compatible with ec2. + left: 'center', + top: 'middle', + right: null, + bottom: null, + width: '80%', + height: '80%', + sort: true, // Can be null or false or true + // (order by desc default, asc not supported yet (strange effect)) + clipWindow: 'origin', // Size of clipped window when zooming. 'origin' or 'fullscreen' + squareRatio: 0.5 * (1 + Math.sqrt(5)), // golden ratio + leafDepth: null, // Nodes on depth from root are regarded as leaves. + // Count from zero (zero represents only view root). + drillDownIcon: '▶', // Use html character temporarily because it is complicated + // to align specialized icon. ▷▶❒❐▼✚ + + zoomToNodeRatio: 0.32 * 0.32, // Be effective when using zoomToNode. Specify the proportion of the + // target node area in the view area. + roam: true, // true, false, 'scale' or 'zoom', 'move'. + nodeClick: 'zoomToNode', // Leaf node click behaviour: 'zoomToNode', 'link', false. + // If leafDepth is set and clicking a node which has children but + // be on left depth, the behaviour would be changing root. Otherwise + // use behavious defined above. + animation: true, + animationDurationUpdate: 900, + animationEasing: 'quinticInOut', + breadcrumb: { + show: true, + height: 22, + left: 'center', + top: 'bottom', + // right + // bottom + emptyItemWidth: 25, // Width of empty node. + itemStyle: { + color: 'rgba(0,0,0,0.7)', //'#5793f3', + borderColor: 'rgba(255,255,255,0.7)', + borderWidth: 1, + shadowColor: 'rgba(150,150,150,1)', + shadowBlur: 3, + shadowOffsetX: 0, + shadowOffsetY: 0, + textStyle: { + color: '#fff' + } + }, + emphasis: { + textStyle: {} + } + }, + label: { + show: true, + // Do not use textDistance, for ellipsis rect just the same as treemap node rect. + distance: 0, + padding: 5, + position: 'inside', // Can be [5, '5%'] or position stirng like 'insideTopLeft', ... + // formatter: null, + color: '#fff', + ellipsis: true + // align + // verticalAlign + }, + upperLabel: { // Label when node is parent. + show: false, + position: [0, '50%'], + height: 20, + // formatter: null, + color: '#fff', + ellipsis: true, + // align: null, + verticalAlign: 'middle' + }, + itemStyle: { + color: null, // Can be 'none' if not necessary. + colorAlpha: null, // Can be 'none' if not necessary. + colorSaturation: null, // Can be 'none' if not necessary. + borderWidth: 0, + gapWidth: 0, + borderColor: '#fff', + borderColorSaturation: null // If specified, borderColor will be ineffective, and the + // border color is evaluated by color of current node and + // borderColorSaturation. + }, + emphasis: { + upperLabel: { + show: true, + position: [0, '50%'], + color: '#fff', + ellipsis: true, + verticalAlign: 'middle' + } + }, + + visualDimension: 0, // Can be 0, 1, 2, 3. + visualMin: null, + visualMax: null, + + color: [], // + treemapSeries.color should not be modified. Please only modified + // level[n].color (if necessary). + // + Specify color list of each level. level[0].color would be global + // color list if not specified. (see method `setDefault`). + // + But set as a empty array to forbid fetch color from global palette + // when using nodeModel.get('color'), otherwise nodes on deep level + // will always has color palette set and are not able to inherit color + // from parent node. + // + TreemapSeries.color can not be set as 'none', otherwise effect + // legend color fetching (see seriesColor.js). + colorAlpha: null, // Array. Specify color alpha range of each level, like [0.2, 0.8] + colorSaturation: null, // Array. Specify color saturation of each level, like [0.2, 0.5] + colorMappingBy: 'index', // 'value' or 'index' or 'id'. + visibleMin: 10, // If area less than this threshold (unit: pixel^2), node will not + // be rendered. Only works when sort is 'asc' or 'desc'. + childrenVisibleMin: null, // If area of a node less than this threshold (unit: pixel^2), + // grandchildren will not show. + // Why grandchildren? If not grandchildren but children, + // some siblings show children and some not, + // the appearance may be mess and not consistent, + levels: [] // Each item: { + // visibleMin, itemStyle, visualDimension, label + // } + // data: { + // value: [], + // children: [], + // link: 'http://xxx.xxx.xxx', + // target: 'blank' or 'self' + // } + }, + + /** + * @override + */ + getInitialData: function (option, ecModel) { + // Create a virtual root. + var root = {name: option.name, children: option.data}; + + completeTreeValue(root); + + var levels = option.levels || []; + + levels = option.levels = setDefault(levels, ecModel); + + var treeOption = {}; + + treeOption.levels = levels; + + // Make sure always a new tree is created when setOption, + // in TreemapView, we check whether oldTree === newTree + // to choose mappings approach among old shapes and new shapes. + return Tree.createTree(root, this, treeOption).data; + }, + + optionUpdated: function () { + this.resetViewRoot(); + }, + + /** + * @override + * @param {number} dataIndex + * @param {boolean} [mutipleSeries=false] + */ + formatTooltip: function (dataIndex) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var formattedValue = isArray(value) + ? addCommas(value[0]) : addCommas(value); + var name = data.getName(dataIndex); + + return encodeHTML(name + ': ' + formattedValue); + }, + + /** + * Add tree path to tooltip param + * + * @override + * @param {number} dataIndex + * @return {Object} + */ + getDataParams: function (dataIndex) { + var params = SeriesModel.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treePathInfo = wrapTreePathInfo(node, this); + + return params; + }, + + /** + * @public + * @param {Object} layoutInfo { + * x: containerGroup x + * y: containerGroup y + * width: containerGroup width + * height: containerGroup height + * } + */ + setLayoutInfo: function (layoutInfo) { + /** + * @readOnly + * @type {Object} + */ + this.layoutInfo = this.layoutInfo || {}; + extend(this.layoutInfo, layoutInfo); + }, + + /** + * @param {string} id + * @return {number} index + */ + mapIdToIndex: function (id) { + // A feature is implemented: + // index is monotone increasing with the sequence of + // input id at the first time. + // This feature can make sure that each data item and its + // mapped color have the same index between data list and + // color list at the beginning, which is useful for user + // to adjust data-color mapping. + + /** + * @private + * @type {Object} + */ + var idIndexMap = this._idIndexMap; + + if (!idIndexMap) { + idIndexMap = this._idIndexMap = createHashMap(); + /** + * @private + * @type {number} + */ + this._idIndexMapCount = 0; + } + + var index = idIndexMap.get(id); + if (index == null) { + idIndexMap.set(id, index = this._idIndexMapCount++); + } + + return index; + }, + + getViewRoot: function () { + return this._viewRoot; + }, + + /** + * @param {module:echarts/data/Tree~Node} [viewRoot] + */ + resetViewRoot: function (viewRoot) { + viewRoot + ? (this._viewRoot = viewRoot) + : (viewRoot = this._viewRoot); + + var root = this.getRawData().tree.root; + + if (!viewRoot + || (viewRoot !== root && !root.contains(viewRoot)) + ) { + this._viewRoot = root; + } + } +}); + +/** + * @param {Object} dataNode + */ +function completeTreeValue(dataNode) { + // Postorder travel tree. + // If value of none-leaf node is not set, + // calculate it by suming up the value of all children. + var sum = 0; + + each$1(dataNode.children, function (child) { + + completeTreeValue(child); + + var childValue = child.value; + isArray(childValue) && (childValue = childValue[0]); + + sum += childValue; + }); + + var thisValue = dataNode.value; + if (isArray(thisValue)) { + thisValue = thisValue[0]; + } + + if (thisValue == null || isNaN(thisValue)) { + thisValue = sum; + } + // Value should not less than 0. + if (thisValue < 0) { + thisValue = 0; + } + + isArray(dataNode.value) + ? (dataNode.value[0] = thisValue) + : (dataNode.value = thisValue); +} + +/** + * set default to level configuration + */ +function setDefault(levels, ecModel) { + var globalColorList = ecModel.get('color'); + + if (!globalColorList) { + return; + } + + levels = levels || []; + var hasColorDefine; + each$1(levels, function (levelDefine) { + var model = new Model(levelDefine); + var modelColor = model.get('color'); + + if (model.get('itemStyle.color') + || (modelColor && modelColor !== 'none') + ) { + hasColorDefine = true; + } + }); + + if (!hasColorDefine) { + var level0 = levels[0] || (levels[0] = {}); + level0.color = globalColorList.slice(); + } + + return levels; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var TEXT_PADDING = 8; +var ITEM_GAP = 8; +var ARRAY_LENGTH = 5; + +function Breadcrumb(containerGroup) { + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group = new Group(); + + containerGroup.add(this.group); +} + +Breadcrumb.prototype = { + + constructor: Breadcrumb, + + render: function (seriesModel, api, targetNode, onSelect) { + var model = seriesModel.getModel('breadcrumb'); + var thisGroup = this.group; + + thisGroup.removeAll(); + + if (!model.get('show') || !targetNode) { + return; + } + + var normalStyleModel = model.getModel('itemStyle'); + // var emphasisStyleModel = model.getModel('emphasis.itemStyle'); + var textStyleModel = normalStyleModel.getModel('textStyle'); + + var layoutParam = { + pos: { + left: model.get('left'), + right: model.get('right'), + top: model.get('top'), + bottom: model.get('bottom') + }, + box: { + width: api.getWidth(), + height: api.getHeight() + }, + emptyItemWidth: model.get('emptyItemWidth'), + totalWidth: 0, + renderList: [] + }; + + this._prepare(targetNode, layoutParam, textStyleModel); + this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect); + + positionElement(thisGroup, layoutParam.pos, layoutParam.box); + }, + + /** + * Prepare render list and total width + * @private + */ + _prepare: function (targetNode, layoutParam, textStyleModel) { + for (var node = targetNode; node; node = node.parentNode) { + var text = node.getModel().get('name'); + var textRect = textStyleModel.getTextRect(text); + var itemWidth = Math.max( + textRect.width + TEXT_PADDING * 2, + layoutParam.emptyItemWidth + ); + layoutParam.totalWidth += itemWidth + ITEM_GAP; + layoutParam.renderList.push({node: node, text: text, width: itemWidth}); + } + }, + + /** + * @private + */ + _renderContent: function ( + seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect + ) { + // Start rendering. + var lastX = 0; + var emptyItemWidth = layoutParam.emptyItemWidth; + var height = seriesModel.get('breadcrumb.height'); + var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box); + var totalWidth = layoutParam.totalWidth; + var renderList = layoutParam.renderList; + + for (var i = renderList.length - 1; i >= 0; i--) { + var item = renderList[i]; + var itemNode = item.node; + var itemWidth = item.width; + var text = item.text; + + // Hdie text and shorten width if necessary. + if (totalWidth > availableSize.width) { + totalWidth -= itemWidth - emptyItemWidth; + itemWidth = emptyItemWidth; + text = null; + } + + var el = new Polygon({ + shape: { + points: makeItemPoints( + lastX, 0, itemWidth, height, + i === renderList.length - 1, i === 0 + ) + }, + style: defaults( + normalStyleModel.getItemStyle(), + { + lineJoin: 'bevel', + text: text, + textFill: textStyleModel.getTextColor(), + textFont: textStyleModel.getFont() + } + ), + z: 10, + onclick: curry(onSelect, itemNode) + }); + this.group.add(el); + + packEventData(el, seriesModel, itemNode); + + lastX += itemWidth + ITEM_GAP; + } + }, + + /** + * @override + */ + remove: function () { + this.group.removeAll(); + } +}; + +function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) { + var points = [ + [head ? x : x - ARRAY_LENGTH, y], + [x + itemWidth, y], + [x + itemWidth, y + itemHeight], + [head ? x : x - ARRAY_LENGTH, y + itemHeight] + ]; + !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]); + !head && points.push([x, y + itemHeight / 2]); + return points; +} + +// Package custom mouse event. +function packEventData(el, seriesModel, itemNode) { + el.eventData = { + componentType: 'series', + componentSubType: 'treemap', + componentIndex: seriesModel.componentIndex, + seriesIndex: seriesModel.componentIndex, + seriesName: seriesModel.name, + seriesType: 'treemap', + selfType: 'breadcrumb', // Distinguish with click event on treemap node. + nodeData: { + dataIndex: itemNode && itemNode.dataIndex, + name: itemNode && itemNode.name + }, + treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel) + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {number} [time=500] Time in ms + * @param {string} [easing='linear'] + * @param {number} [delay=0] + * @param {Function} [callback] + * + * @example + * // Animate position + * animation + * .createWrap() + * .add(el1, {position: [10, 10]}) + * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400) + * .done(function () { // done }) + * .start('cubicOut'); + */ +function createWrap() { + + var storage = []; + var elExistsMap = {}; + var doneCallback; + + return { + + /** + * Caution: a el can only be added once, otherwise 'done' + * might not be called. This method checks this (by el.id), + * suppresses adding and returns false when existing el found. + * + * @param {modele:zrender/Element} el + * @param {Object} target + * @param {number} [time=500] + * @param {number} [delay=0] + * @param {string} [easing='linear'] + * @return {boolean} Whether adding succeeded. + * + * @example + * add(el, target, time, delay, easing); + * add(el, target, time, easing); + * add(el, target, time); + * add(el, target); + */ + add: function (el, target, time, delay, easing) { + if (isString(delay)) { + easing = delay; + delay = 0; + } + + if (elExistsMap[el.id]) { + return false; + } + elExistsMap[el.id] = 1; + + storage.push( + {el: el, target: target, time: time, delay: delay, easing: easing} + ); + + return true; + }, + + /** + * Only execute when animation finished. Will not execute when any + * of 'stop' or 'stopAnimation' called. + * + * @param {Function} callback + */ + done: function (callback) { + doneCallback = callback; + return this; + }, + + /** + * Will stop exist animation firstly. + */ + start: function () { + var count = storage.length; + + for (var i = 0, len = storage.length; i < len; i++) { + var item = storage[i]; + item.el.animateTo(item.target, item.time, item.delay, item.easing, done); + } + + return this; + + function done() { + count--; + if (!count) { + storage.length = 0; + elExistsMap = {}; + doneCallback && doneCallback(); + } + } + } + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var bind$1 = bind; +var Group$2 = Group; +var Rect$1 = Rect; +var each$8 = each$1; + +var DRAG_THRESHOLD = 3; +var PATH_LABEL_NOAMAL = ['label']; +var PATH_LABEL_EMPHASIS = ['emphasis', 'label']; +var PATH_UPPERLABEL_NORMAL = ['upperLabel']; +var PATH_UPPERLABEL_EMPHASIS = ['emphasis', 'upperLabel']; +var Z_BASE = 10; // Should bigger than every z. +var Z_BG = 1; +var Z_CONTENT = 2; + +var getItemStyleEmphasis = makeStyleMapper([ + ['fill', 'color'], + // `borderColor` and `borderWidth` has been occupied, + // so use `stroke` to indicate the stroke of the rect. + ['stroke', 'strokeColor'], + ['lineWidth', 'strokeWidth'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] +]); +var getItemStyleNormal = function (model) { + // Normal style props should include emphasis style props. + var itemStyle = getItemStyleEmphasis(model); + // Clear styles set by emphasis. + itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null; + return itemStyle; +}; + +extendChartView({ + + type: 'treemap', + + /** + * @override + */ + init: function (o, api) { + + /** + * @private + * @type {module:zrender/container/Group} + */ + this._containerGroup; + + /** + * @private + * @type {Object.>} + */ + this._storage = createStorage(); + + /** + * @private + * @type {module:echarts/data/Tree} + */ + this._oldTree; + + /** + * @private + * @type {module:echarts/chart/treemap/Breadcrumb} + */ + this._breadcrumb; + + /** + * @private + * @type {module:echarts/component/helper/RoamController} + */ + this._controller; + + /** + * 'ready', 'animating' + * @private + */ + this._state = 'ready'; + }, + + /** + * @override + */ + render: function (seriesModel, ecModel, api, payload) { + + var models = ecModel.findComponents({ + mainType: 'series', subType: 'treemap', query: payload + }); + if (indexOf(models, seriesModel) < 0) { + return; + } + + this.seriesModel = seriesModel; + this.api = api; + this.ecModel = ecModel; + + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, seriesModel); + var payloadType = payload && payload.type; + var layoutInfo = seriesModel.layoutInfo; + var isInit = !this._oldTree; + var thisStorage = this._storage; + + // Mark new root when action is treemapRootToNode. + var reRoot = (payloadType === 'treemapRootToNode' && targetInfo && thisStorage) + ? { + rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()], + direction: payload.direction + } + : null; + + var containerGroup = this._giveContainerGroup(layoutInfo); + + var renderResult = this._doRender(containerGroup, seriesModel, reRoot); + ( + !isInit && ( + !payloadType + || payloadType === 'treemapZoomToNode' + || payloadType === 'treemapRootToNode' + ) + ) + ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) + : renderResult.renderFinally(); + + this._resetController(api); + + this._renderBreadcrumb(seriesModel, api, targetInfo); + }, + + /** + * @private + */ + _giveContainerGroup: function (layoutInfo) { + var containerGroup = this._containerGroup; + if (!containerGroup) { + // FIXME + // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。 + containerGroup = this._containerGroup = new Group$2(); + this._initEvents(containerGroup); + this.group.add(containerGroup); + } + containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]); + + return containerGroup; + }, + + /** + * @private + */ + _doRender: function (containerGroup, seriesModel, reRoot) { + var thisTree = seriesModel.getData().tree; + var oldTree = this._oldTree; + + // Clear last shape records. + var lastsForAnimation = createStorage(); + var thisStorage = createStorage(); + var oldStorage = this._storage; + var willInvisibleEls = []; + var doRenderNode = curry( + renderNode, seriesModel, + thisStorage, oldStorage, reRoot, + lastsForAnimation, willInvisibleEls + ); + + // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow), + // the oldTree is actually losted, so we can not find all of the old graphic + // elements from tree. So we use this stragegy: make element storage, move + // from old storage to new storage, clear old storage. + + dualTravel( + thisTree.root ? [thisTree.root] : [], + (oldTree && oldTree.root) ? [oldTree.root] : [], + containerGroup, + thisTree === oldTree || !oldTree, + 0 + ); + + // Process all removing. + var willDeleteEls = clearStorage(oldStorage); + + this._oldTree = thisTree; + this._storage = thisStorage; + + return { + lastsForAnimation: lastsForAnimation, + willDeleteEls: willDeleteEls, + renderFinally: renderFinally + }; + + function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) { + // When 'render' is triggered by action, + // 'this' and 'old' may be the same tree, + // we use rawIndex in that case. + if (sameTree) { + oldViewChildren = thisViewChildren; + each$8(thisViewChildren, function (child, index) { + !child.isRemoved() && processNode(index, index); + }); + } + // Diff hierarchically (diff only in each subtree, but not whole). + // because, consistency of view is important. + else { + (new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey)) + .add(processNode) + .update(processNode) + .remove(curry(processNode, null)) + .execute(); + } + + function getKey(node) { + // Identify by name or raw index. + return node.getId(); + } + + function processNode(newIndex, oldIndex) { + var thisNode = newIndex != null ? thisViewChildren[newIndex] : null; + var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null; + + var group = doRenderNode(thisNode, oldNode, parentGroup, depth); + + group && dualTravel( + thisNode && thisNode.viewChildren || [], + oldNode && oldNode.viewChildren || [], + group, + sameTree, + depth + 1 + ); + } + } + + function clearStorage(storage) { + var willDeleteEls = createStorage(); + storage && each$8(storage, function (store, storageName) { + var delEls = willDeleteEls[storageName]; + each$8(store, function (el) { + el && (delEls.push(el), el.__tmWillDelete = 1); + }); + }); + return willDeleteEls; + } + + function renderFinally() { + each$8(willDeleteEls, function (els) { + each$8(els, function (el) { + el.parent && el.parent.remove(el); + }); + }); + each$8(willInvisibleEls, function (el) { + el.invisible = true; + // Setting invisible is for optimizing, so no need to set dirty, + // just mark as invisible. + el.dirty(); + }); + } + }, + + /** + * @private + */ + _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) { + if (!seriesModel.get('animation')) { + return; + } + + var duration = seriesModel.get('animationDurationUpdate'); + var easing = seriesModel.get('animationEasing'); + var animationWrap = createWrap(); + + // Make delete animations. + each$8(renderResult.willDeleteEls, function (store, storageName) { + each$8(store, function (el, rawIndex) { + if (el.invisible) { + return; + } + + var parent = el.parent; // Always has parent, and parent is nodeGroup. + var target; + + if (reRoot && reRoot.direction === 'drillDown') { + target = parent === reRoot.rootNodeGroup + // This is the content element of view root. + // Only `content` will enter this branch, because + // `background` and `nodeGroup` will not be deleted. + ? { + shape: { + x: 0, + y: 0, + width: parent.__tmNodeWidth, + height: parent.__tmNodeHeight + }, + style: { + opacity: 0 + } + } + // Others. + : {style: {opacity: 0}}; + } + else { + var targetX = 0; + var targetY = 0; + + if (!parent.__tmWillDelete) { + // Let node animate to right-bottom corner, cooperating with fadeout, + // which is appropriate for user understanding. + // Divided by 2 for reRoot rolling up effect. + targetX = parent.__tmNodeWidth / 2; + targetY = parent.__tmNodeHeight / 2; + } + + target = storageName === 'nodeGroup' + ? {position: [targetX, targetY], style: {opacity: 0}} + : { + shape: {x: targetX, y: targetY, width: 0, height: 0}, + style: {opacity: 0} + }; + } + + target && animationWrap.add(el, target, duration, easing); + }); + }); + + // Make other animations + each$8(this._storage, function (store, storageName) { + each$8(store, function (el, rawIndex) { + var last = renderResult.lastsForAnimation[storageName][rawIndex]; + var target = {}; + + if (!last) { + return; + } + + if (storageName === 'nodeGroup') { + if (last.old) { + target.position = el.position.slice(); + el.attr('position', last.old); + } + } + else { + if (last.old) { + target.shape = extend({}, el.shape); + el.setShape(last.old); + } + + if (last.fadein) { + el.setStyle('opacity', 0); + target.style = {opacity: 1}; + } + // When animation is stopped for succedent animation starting, + // el.style.opacity might not be 1 + else if (el.style.opacity !== 1) { + target.style = {opacity: 1}; + } + } + + animationWrap.add(el, target, duration, easing); + }); + }, this); + + this._state = 'animating'; + + animationWrap + .done(bind$1(function () { + this._state = 'ready'; + renderResult.renderFinally(); + }, this)) + .start(); + }, + + /** + * @private + */ + _resetController: function (api) { + var controller = this._controller; + + // Init controller. + if (!controller) { + controller = this._controller = new RoamController(api.getZr()); + controller.enable(this.seriesModel.get('roam')); + controller.on('pan', bind$1(this._onPan, this)); + controller.on('zoom', bind$1(this._onZoom, this)); + } + + var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight()); + controller.setPointerChecker(function (e, x, y) { + return rect.contain(x, y); + }); + }, + + /** + * @private + */ + _clearController: function () { + var controller = this._controller; + if (controller) { + controller.dispose(); + controller = null; + } + }, + + /** + * @private + */ + _onPan: function (e) { + if (this._state !== 'animating' + && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD) + ) { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + this.api.dispatchAction({ + type: 'treemapMove', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rootLayout.x + e.dx, y: rootLayout.y + e.dy, + width: rootLayout.width, height: rootLayout.height + } + }); + } + }, + + /** + * @private + */ + _onZoom: function (e) { + var mouseX = e.originX; + var mouseY = e.originY; + + if (this._state !== 'animating') { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + var rect = new BoundingRect( + rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height + ); + var layoutInfo = this.seriesModel.layoutInfo; + + // Transform mouse coord from global to containerGroup. + mouseX -= layoutInfo.x; + mouseY -= layoutInfo.y; + + // Scale root bounding rect. + var m = create$1(); + translate(m, m, [-mouseX, -mouseY]); + scale$1(m, m, [e.scale, e.scale]); + translate(m, m, [mouseX, mouseY]); + + rect.applyTransform(m); + + this.api.dispatchAction({ + type: 'treemapRender', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rect.x, y: rect.y, + width: rect.width, height: rect.height + } + }); + } + }, + + /** + * @private + */ + _initEvents: function (containerGroup) { + containerGroup.on('click', function (e) { + if (this._state !== 'ready') { + return; + } + + var nodeClick = this.seriesModel.get('nodeClick', true); + + if (!nodeClick) { + return; + } + + var targetInfo = this.findTarget(e.offsetX, e.offsetY); + + if (!targetInfo) { + return; + } + + var node = targetInfo.node; + if (node.getLayout().isLeafRoot) { + this._rootToNode(targetInfo); + } + else { + if (nodeClick === 'zoomToNode') { + this._zoomToNode(targetInfo); + } + else if (nodeClick === 'link') { + var itemModel = node.hostTree.data.getItemModel(node.dataIndex); + var link = itemModel.get('link', true); + var linkTarget = itemModel.get('target', true) || 'blank'; + link && window.open(link, linkTarget); + } + } + + }, this); + }, + + /** + * @private + */ + _renderBreadcrumb: function (seriesModel, api, targetInfo) { + if (!targetInfo) { + targetInfo = seriesModel.get('leafDepth', true) != null + ? {node: seriesModel.getViewRoot()} + // FIXME + // better way? + // Find breadcrumb tail on center of containerGroup. + : this.findTarget(api.getWidth() / 2, api.getHeight() / 2); + + if (!targetInfo) { + targetInfo = {node: seriesModel.getData().tree.root}; + } + } + + (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))) + .render(seriesModel, api, targetInfo.node, bind$1(onSelect, this)); + + function onSelect(node) { + if (this._state !== 'animating') { + aboveViewRoot(seriesModel.getViewRoot(), node) + ? this._rootToNode({node: node}) + : this._zoomToNode({node: node}); + } + } + }, + + /** + * @override + */ + remove: function () { + this._clearController(); + this._containerGroup && this._containerGroup.removeAll(); + this._storage = createStorage(); + this._state = 'ready'; + this._breadcrumb && this._breadcrumb.remove(); + }, + + dispose: function () { + this._clearController(); + }, + + /** + * @private + */ + _zoomToNode: function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapZoomToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }, + + /** + * @private + */ + _rootToNode: function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapRootToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }, + + /** + * @public + * @param {number} x Global coord x. + * @param {number} y Global coord y. + * @return {Object} info If not found, return undefined; + * @return {number} info.node Target node. + * @return {number} info.offsetX x refer to target node. + * @return {number} info.offsetY y refer to target node. + */ + findTarget: function (x, y) { + var targetInfo; + var viewRoot = this.seriesModel.getViewRoot(); + + viewRoot.eachNode({attr: 'viewChildren', order: 'preorder'}, function (node) { + var bgEl = this._storage.background[node.getRawIndex()]; + // If invisible, there might be no element. + if (bgEl) { + var point = bgEl.transformCoordToLocal(x, y); + var shape = bgEl.shape; + + // For performance consideration, dont use 'getBoundingRect'. + if (shape.x <= point[0] + && point[0] <= shape.x + shape.width + && shape.y <= point[1] + && point[1] <= shape.y + shape.height + ) { + targetInfo = {node: node, offsetX: point[0], offsetY: point[1]}; + } + else { + return false; // Suppress visit subtree. + } + } + }, this); + + return targetInfo; + } + +}); + +/** + * @inner + */ +function createStorage() { + return {nodeGroup: [], background: [], content: []}; +} + +/** + * @inner + * @return Return undefined means do not travel further. + */ +function renderNode( + seriesModel, thisStorage, oldStorage, reRoot, + lastsForAnimation, willInvisibleEls, + thisNode, oldNode, parentGroup, depth +) { + // Whether under viewRoot. + if (!thisNode) { + // Deleting nodes will be performed finally. This method just find + // element from old storage, or create new element, set them to new + // storage, and set styles. + return; + } + + // ------------------------------------------------------------------- + // Start of closure variables available in "Procedures in renderNode". + + var thisLayout = thisNode.getLayout(); + + if (!thisLayout || !thisLayout.isInView) { + return; + } + + var thisWidth = thisLayout.width; + var thisHeight = thisLayout.height; + var borderWidth = thisLayout.borderWidth; + var thisInvisible = thisLayout.invisible; + + var thisRawIndex = thisNode.getRawIndex(); + var oldRawIndex = oldNode && oldNode.getRawIndex(); + + var thisViewChildren = thisNode.viewChildren; + var upperHeight = thisLayout.upperHeight; + var isParent = thisViewChildren && thisViewChildren.length; + var itemStyleNormalModel = thisNode.getModel('itemStyle'); + var itemStyleEmphasisModel = thisNode.getModel('emphasis.itemStyle'); + + // End of closure ariables available in "Procedures in renderNode". + // ----------------------------------------------------------------- + + // Node group + var group = giveGraphic('nodeGroup', Group$2); + + if (!group) { + return; + } + + parentGroup.add(group); + // x,y are not set when el is above view root. + group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]); + group.__tmNodeWidth = thisWidth; + group.__tmNodeHeight = thisHeight; + + if (thisLayout.isAboveViewRoot) { + return group; + } + + // Background + var bg = giveGraphic('background', Rect$1, depth, Z_BG); + bg && renderBackground(group, bg, isParent && thisLayout.upperHeight); + + // No children, render content. + if (!isParent) { + var content = giveGraphic('content', Rect$1, depth, Z_CONTENT); + content && renderContent(group, content); + } + + return group; + + // ---------------------------- + // | Procedures in renderNode | + // ---------------------------- + + function renderBackground(group, bg, useUpperLabel) { + // For tooltip. + bg.dataIndex = thisNode.dataIndex; + bg.seriesIndex = seriesModel.seriesIndex; + + bg.setShape({x: 0, y: 0, width: thisWidth, height: thisHeight}); + var visualBorderColor = thisNode.getVisual('borderColor', true); + var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor'); + + updateStyle(bg, function () { + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualBorderColor; + var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel); + emphasisStyle.fill = emphasisBorderColor; + + if (useUpperLabel) { + var upperLabelWidth = thisWidth - 2 * borderWidth; + + prepareText( + normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight, + {x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight} + ); + } + // For old bg. + else { + normalStyle.text = emphasisStyle.text = null; + } + + bg.setStyle(normalStyle); + setHoverStyle(bg, emphasisStyle); + }); + + group.add(bg); + } + + function renderContent(group, content) { + // For tooltip. + content.dataIndex = thisNode.dataIndex; + content.seriesIndex = seriesModel.seriesIndex; + + var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0); + var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0); + + content.culling = true; + content.setShape({ + x: borderWidth, + y: borderWidth, + width: contentWidth, + height: contentHeight + }); + + var visualColor = thisNode.getVisual('color', true); + updateStyle(content, function () { + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualColor; + var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel); + + prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight); + + content.setStyle(normalStyle); + setHoverStyle(content, emphasisStyle); + }); + + group.add(content); + } + + function updateStyle(element, cb) { + if (!thisInvisible) { + // If invisible, do not set visual, otherwise the element will + // change immediately before animation. We think it is OK to + // remain its origin color when moving out of the view window. + cb(); + + if (!element.__tmWillVisible) { + element.invisible = false; + } + } + else { + // Delay invisible setting utill animation finished, + // avoid element vanish suddenly before animation. + !element.invisible && willInvisibleEls.push(element); + } + } + + function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) { + var nodeModel = thisNode.getModel(); + var text = retrieve( + seriesModel.getFormattedLabel( + thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label' + ), + nodeModel.get('name') + ); + if (!upperLabelRect && thisLayout.isLeafRoot) { + var iconChar = seriesModel.get('drillDownIcon', true); + text = iconChar ? iconChar + ' ' + text : text; + } + + var normalLabelModel = nodeModel.getModel( + upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL + ); + var emphasisLabelModel = nodeModel.getModel( + upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS + ); + + var isShow = normalLabelModel.getShallow('show'); + + setLabelStyle( + normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel, + { + defaultText: isShow ? text : null, + autoColor: visualColor, + isRectText: true + } + ); + + upperLabelRect && (normalStyle.textRect = clone(upperLabelRect)); + + normalStyle.truncate = (isShow && normalLabelModel.get('ellipsis')) + ? { + outerWidth: width, + outerHeight: height, + minChar: 2 + } + : null; + } + + function giveGraphic(storageName, Ctor, depth, z) { + var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex]; + var lasts = lastsForAnimation[storageName]; + + if (element) { + // Remove from oldStorage + oldStorage[storageName][oldRawIndex] = null; + prepareAnimationWhenHasOld(lasts, element, storageName); + } + // If invisible and no old element, do not create new element (for optimizing). + else if (!thisInvisible) { + element = new Ctor({z: calculateZ(depth, z)}); + element.__tmDepth = depth; + element.__tmStorageName = storageName; + prepareAnimationWhenNoOld(lasts, element, storageName); + } + + // Set to thisStorage + return (thisStorage[storageName][thisRawIndex] = element); + } + + function prepareAnimationWhenHasOld(lasts, element, storageName) { + var lastCfg = lasts[thisRawIndex] = {}; + lastCfg.old = storageName === 'nodeGroup' + ? element.position.slice() + : extend({}, element.shape); + } + + // If a element is new, we need to find the animation start point carefully, + // otherwise it will looks strange when 'zoomToNode'. + function prepareAnimationWhenNoOld(lasts, element, storageName) { + var lastCfg = lasts[thisRawIndex] = {}; + var parentNode = thisNode.parentNode; + + if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) { + var parentOldX = 0; + var parentOldY = 0; + + // New nodes appear from right-bottom corner in 'zoomToNode' animation. + // For convenience, get old bounding rect from background. + var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()]; + if (!reRoot && parentOldBg && parentOldBg.old) { + parentOldX = parentOldBg.old.width; + parentOldY = parentOldBg.old.height; + } + + // When no parent old shape found, its parent is new too, + // so we can just use {x:0, y:0}. + lastCfg.old = storageName === 'nodeGroup' + ? [0, parentOldY] + : {x: parentOldX, y: parentOldY, width: 0, height: 0}; + } + + // Fade in, user can be aware that these nodes are new. + lastCfg.fadein = storageName !== 'nodeGroup'; + } +} + +// We can not set all backgroud with the same z, Because the behaviour of +// drill down and roll up differ background creation sequence from tree +// hierarchy sequence, which cause that lowser background element overlap +// upper ones. So we calculate z based on depth. +// Moreover, we try to shrink down z interval to [0, 1] to avoid that +// treemap with large z overlaps other components. +function calculateZ(depth, zInLevel) { + var zb = depth * Z_BASE + zInLevel; + return (zb - 1) / zb; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Treemap action + */ + +var noop$1 = function () {}; + +var actionTypes = [ + 'treemapZoomToNode', + 'treemapRender', + 'treemapMove' +]; + +for (var i$2 = 0; i$2 < actionTypes.length; i$2++) { + registerAction({type: actionTypes[i$2], update: 'updateView'}, noop$1); +} + +registerAction( + {type: 'treemapRootToNode', update: 'updateView'}, + function (payload, ecModel) { + + ecModel.eachComponent( + {mainType: 'series', subType: 'treemap', query: payload}, + handleRootToNode + ); + + function handleRootToNode(model, index) { + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, model); + + if (targetInfo) { + var originViewRoot = model.getViewRoot(); + if (originViewRoot) { + payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) + ? 'rollUp' : 'drillDown'; + } + model.resetViewRoot(targetInfo.node); + } + } + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$9 = each$1; +var isObject$5 = isObject$1; + +var CATEGORY_DEFAULT_VISUAL_INDEX = -1; + +/** + * @param {Object} option + * @param {string} [option.type] See visualHandlers. + * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed' + * @param {Array.=} [option.dataExtent] [minExtent, maxExtent], + * required when mappingMethod is 'linear' + * @param {Array.=} [option.pieceList] [ + * {value: someValue}, + * {interval: [min1, max1], visual: {...}}, + * {interval: [min2, max2]} + * ], + * required when mappingMethod is 'piecewise'. + * Visual for only each piece can be specified. + * @param {Array.=} [option.categories] ['cate1', 'cate2'] + * required when mappingMethod is 'category'. + * If no option.categories, categories is set + * as [0, 1, 2, ...]. + * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'. + * @param {(Array|Object|*)} [option.visual] Visual data. + * when mappingMethod is 'category', + * visual data can be array or object + * (like: {cate1: '#222', none: '#fff'}) + * or primary types (which represents + * defualt category visual), otherwise visual + * can be array or primary (which will be + * normalized to array). + * + */ +var VisualMapping = function (option) { + var mappingMethod = option.mappingMethod; + var visualType = option.type; + + /** + * @readOnly + * @type {Object} + */ + var thisOption = this.option = clone(option); + + /** + * @readOnly + * @type {string} + */ + this.type = visualType; + + /** + * @readOnly + * @type {string} + */ + this.mappingMethod = mappingMethod; + + /** + * @private + * @type {Function} + */ + this._normalizeData = normalizers[mappingMethod]; + + var visualHandler = visualHandlers[visualType]; + + /** + * @public + * @type {Function} + */ + this.applyVisual = visualHandler.applyVisual; + + /** + * @public + * @type {Function} + */ + this.getColorMapper = visualHandler.getColorMapper; + + /** + * @private + * @type {Function} + */ + this._doMap = visualHandler._doMap[mappingMethod]; + + if (mappingMethod === 'piecewise') { + normalizeVisualRange(thisOption); + preprocessForPiecewise(thisOption); + } + else if (mappingMethod === 'category') { + thisOption.categories + ? preprocessForSpecifiedCategory(thisOption) + // categories is ordinal when thisOption.categories not specified, + // which need no more preprocess except normalize visual. + : normalizeVisualRange(thisOption, true); + } + else { // mappingMethod === 'linear' or 'fixed' + assert$1(mappingMethod !== 'linear' || thisOption.dataExtent); + normalizeVisualRange(thisOption); + } +}; + +VisualMapping.prototype = { + + constructor: VisualMapping, + + mapValueToVisual: function (value) { + var normalized = this._normalizeData(value); + return this._doMap(normalized, value); + }, + + getNormalizer: function () { + return bind(this._normalizeData, this); + } +}; + +var visualHandlers = VisualMapping.visualHandlers = { + + color: { + + applyVisual: makeApplyVisual('color'), + + /** + * Create a mapper function + * @return {Function} + */ + getColorMapper: function () { + var thisOption = this.option; + + return bind( + thisOption.mappingMethod === 'category' + ? function (value, isNormalized) { + !isNormalized && (value = this._normalizeData(value)); + return doMapCategory.call(this, value); + } + : function (value, isNormalized, out) { + // If output rgb array + // which will be much faster and useful in pixel manipulation + var returnRGBArray = !!out; + !isNormalized && (value = this._normalizeData(value)); + out = fastLerp(value, thisOption.parsedVisual, out); + return returnRGBArray ? out : stringify(out, 'rgba'); + }, + this + ); + }, + + _doMap: { + linear: function (normalized) { + return stringify( + fastLerp(normalized, this.option.parsedVisual), + 'rgba' + ); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = stringify( + fastLerp(normalized, this.option.parsedVisual), + 'rgba' + ); + } + return result; + }, + fixed: doMapFixed + } + }, + + colorHue: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, value); + }), + + colorSaturation: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, null, value); + }), + + colorLightness: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, null, null, value); + }), + + colorAlpha: makePartialColorVisualHandler(function (color, value) { + return modifyAlpha(color, value); + }), + + opacity: { + applyVisual: makeApplyVisual('opacity'), + _doMap: makeDoMap([0, 1]) + }, + + liftZ: { + applyVisual: makeApplyVisual('liftZ'), + _doMap: { + linear: doMapFixed, + category: doMapFixed, + piecewise: doMapFixed, + fixed: doMapFixed + } + }, + + symbol: { + applyVisual: function (value, getter, setter) { + var symbolCfg = this.mapValueToVisual(value); + if (isString(symbolCfg)) { + setter('symbol', symbolCfg); + } + else if (isObject$5(symbolCfg)) { + for (var name in symbolCfg) { + if (symbolCfg.hasOwnProperty(name)) { + setter(name, symbolCfg[name]); + } + } + } + }, + _doMap: { + linear: doMapToArray, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = doMapToArray.call(this, normalized); + } + return result; + }, + fixed: doMapFixed + } + }, + + symbolSize: { + applyVisual: makeApplyVisual('symbolSize'), + _doMap: makeDoMap([0, 1]) + } +}; + + +function preprocessForPiecewise(thisOption) { + var pieceList = thisOption.pieceList; + thisOption.hasSpecialVisual = false; + + each$1(pieceList, function (piece, index) { + piece.originIndex = index; + // piece.visual is "result visual value" but not + // a visual range, so it does not need to be normalized. + if (piece.visual != null) { + thisOption.hasSpecialVisual = true; + } + }); +} + +function preprocessForSpecifiedCategory(thisOption) { + // Hash categories. + var categories = thisOption.categories; + var visual = thisOption.visual; + + var categoryMap = thisOption.categoryMap = {}; + each$9(categories, function (cate, index) { + categoryMap[cate] = index; + }); + + // Process visual map input. + if (!isArray(visual)) { + var visualArr = []; + + if (isObject$1(visual)) { + each$9(visual, function (v, cate) { + var index = categoryMap[cate]; + visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v; + }); + } + else { // Is primary type, represents default visual. + visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual; + } + + visual = setVisualToOption(thisOption, visualArr); + } + + // Remove categories that has no visual, + // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX. + for (var i = categories.length - 1; i >= 0; i--) { + if (visual[i] == null) { + delete categoryMap[categories[i]]; + categories.pop(); + } + } +} + +function normalizeVisualRange(thisOption, isCategory) { + var visual = thisOption.visual; + var visualArr = []; + + if (isObject$1(visual)) { + each$9(visual, function (v) { + visualArr.push(v); + }); + } + else if (visual != null) { + visualArr.push(visual); + } + + var doNotNeedPair = {color: 1, symbol: 1}; + + if (!isCategory + && visualArr.length === 1 + && !doNotNeedPair.hasOwnProperty(thisOption.type) + ) { + // Do not care visualArr.length === 0, which is illegal. + visualArr[1] = visualArr[0]; + } + + setVisualToOption(thisOption, visualArr); +} + +function makePartialColorVisualHandler(applyValue) { + return { + applyVisual: function (value, getter, setter) { + value = this.mapValueToVisual(value); + // Must not be array value + setter('color', applyValue(getter('color'), value)); + }, + _doMap: makeDoMap([0, 1]) + }; +} + +function doMapToArray(normalized) { + var visual = this.option.visual; + return visual[ + Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true)) + ] || {}; +} + +function makeApplyVisual(visualType) { + return function (value, getter, setter) { + setter(visualType, this.mapValueToVisual(value)); + }; +} + +function doMapCategory(normalized) { + var visual = this.option.visual; + return visual[ + (this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX) + ? normalized % visual.length + : normalized + ]; +} + +function doMapFixed() { + return this.option.visual[0]; +} + +function makeDoMap(sourceExtent) { + return { + linear: function (normalized) { + return linearMap(normalized, sourceExtent, this.option.visual, true); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = linearMap(normalized, sourceExtent, this.option.visual, true); + } + return result; + }, + fixed: doMapFixed + }; +} + +function getSpecifiedVisual(value) { + var thisOption = this.option; + var pieceList = thisOption.pieceList; + if (thisOption.hasSpecialVisual) { + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList); + var piece = pieceList[pieceIndex]; + if (piece && piece.visual) { + return piece.visual[this.type]; + } + } +} + +function setVisualToOption(thisOption, visualArr) { + thisOption.visual = visualArr; + if (thisOption.type === 'color') { + thisOption.parsedVisual = map(visualArr, function (item) { + return parse(item); + }); + } + return visualArr; +} + + +/** + * Normalizers by mapping methods. + */ +var normalizers = { + + linear: function (value) { + return linearMap(value, this.option.dataExtent, [0, 1], true); + }, + + piecewise: function (value) { + var pieceList = this.option.pieceList; + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true); + if (pieceIndex != null) { + return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true); + } + }, + + category: function (value) { + var index = this.option.categories + ? this.option.categoryMap[value] + : value; // ordinal + return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index; + }, + + fixed: noop +}; + + + +/** + * List available visual types. + * + * @public + * @return {Array.} + */ +VisualMapping.listVisualTypes = function () { + var visualTypes = []; + each$1(visualHandlers, function (handler, key) { + visualTypes.push(key); + }); + return visualTypes; +}; + +/** + * @public + */ +VisualMapping.addVisualHandler = function (name, handler) { + visualHandlers[name] = handler; +}; + +/** + * @public + */ +VisualMapping.isValidType = function (visualType) { + return visualHandlers.hasOwnProperty(visualType); +}; + +/** + * Convinent method. + * Visual can be Object or Array or primary type. + * + * @public + */ +VisualMapping.eachVisual = function (visual, callback, context) { + if (isObject$1(visual)) { + each$1(visual, callback, context); + } + else { + callback.call(context, visual); + } +}; + +VisualMapping.mapVisual = function (visual, callback, context) { + var isPrimary; + var newVisual = isArray(visual) + ? [] + : isObject$1(visual) + ? {} + : (isPrimary = true, null); + + VisualMapping.eachVisual(visual, function (v, key) { + var newVal = callback.call(context, v, key); + isPrimary ? (newVisual = newVal) : (newVisual[key] = newVal); + }); + return newVisual; +}; + +/** + * @public + * @param {Object} obj + * @return {Object} new object containers visual values. + * If no visuals, return null. + */ +VisualMapping.retrieveVisuals = function (obj) { + var ret = {}; + var hasVisual; + + obj && each$9(visualHandlers, function (h, visualType) { + if (obj.hasOwnProperty(visualType)) { + ret[visualType] = obj[visualType]; + hasVisual = true; + } + }); + + return hasVisual ? ret : null; +}; + +/** + * Give order to visual types, considering colorSaturation, colorAlpha depends on color. + * + * @public + * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...} + * IF Array, like: ['color', 'symbol', 'colorSaturation'] + * @return {Array.} Sorted visual types. + */ +VisualMapping.prepareVisualTypes = function (visualTypes) { + if (isObject$5(visualTypes)) { + var types = []; + each$9(visualTypes, function (item, type) { + types.push(type); + }); + visualTypes = types; + } + else if (isArray(visualTypes)) { + visualTypes = visualTypes.slice(); + } + else { + return []; + } + + visualTypes.sort(function (type1, type2) { + // color should be front of colorSaturation, colorAlpha, ... + // symbol and symbolSize do not matter. + return (type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0) + ? 1 : -1; + }); + + return visualTypes; +}; + +/** + * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'. + * Other visuals are only depends on themself. + * + * @public + * @param {string} visualType1 + * @param {string} visualType2 + * @return {boolean} + */ +VisualMapping.dependsOn = function (visualType1, visualType2) { + return visualType2 === 'color' + ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) + : visualType1 === visualType2; +}; + +/** + * @param {number} value + * @param {Array.} pieceList [{value: ..., interval: [min, max]}, ...] + * Always from small to big. + * @param {boolean} [findClosestWhenOutside=false] + * @return {number} index + */ +VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) { + var possibleI; + var abs = Infinity; + + // value has the higher priority. + for (var i = 0, len = pieceList.length; i < len; i++) { + var pieceValue = pieceList[i].value; + if (pieceValue != null) { + if (pieceValue === value + // FIXME + // It is supposed to compare value according to value type of dimension, + // but currently value type can exactly be string or number. + // Compromise for numeric-like string (like '12'), especially + // in the case that visualMap.categories is ['22', '33']. + || (typeof pieceValue === 'string' && pieceValue === value + '') + ) { + return i; + } + findClosestWhenOutside && updatePossible(pieceValue, i); + } + } + + for (var i = 0, len = pieceList.length; i < len; i++) { + var piece = pieceList[i]; + var interval = piece.interval; + var close = piece.close; + + if (interval) { + if (interval[0] === -Infinity) { + if (littleThan(close[1], value, interval[1])) { + return i; + } + } + else if (interval[1] === Infinity) { + if (littleThan(close[0], interval[0], value)) { + return i; + } + } + else if ( + littleThan(close[0], interval[0], value) + && littleThan(close[1], value, interval[1]) + ) { + return i; + } + findClosestWhenOutside && updatePossible(interval[0], i); + findClosestWhenOutside && updatePossible(interval[1], i); + } + } + + if (findClosestWhenOutside) { + return value === Infinity + ? pieceList.length - 1 + : value === -Infinity + ? 0 + : possibleI; + } + + function updatePossible(val, index) { + var newAbs = Math.abs(val - value); + if (newAbs < abs) { + abs = newAbs; + possibleI = index; + } + } + +}; + +function littleThan(close, a, b) { + return close ? a <= b : a < b; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var isArray$2 = isArray; + +var ITEM_STYLE_NORMAL = 'itemStyle'; + +var treemapVisual = { + seriesType: 'treemap', + reset: function (seriesModel, ecModel, api, payload) { + var tree = seriesModel.getData().tree; + var root = tree.root; + var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL); + + if (root.isRemoved()) { + return; + } + + var levelItemStyles = map(tree.levelModels, function (levelModel) { + return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null; + }); + + travelTree( + root, // Visual should calculate from tree root but not view root. + {}, + levelItemStyles, + seriesItemStyleModel, + seriesModel.getViewRoot().getAncestors(), + seriesModel + ); + } +}; + +function travelTree( + node, designatedVisual, levelItemStyles, seriesItemStyleModel, + viewRootAncestors, seriesModel +) { + var nodeModel = node.getModel(); + var nodeLayout = node.getLayout(); + + // Optimize + if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) { + return; + } + + var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL); + var levelItemStyle = levelItemStyles[node.depth]; + var visuals = buildVisuals( + nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel + ); + + // calculate border color + var borderColor = nodeItemStyleModel.get('borderColor'); + var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation'); + var thisNodeColor; + if (borderColorSaturation != null) { + // For performance, do not always execute 'calculateColor'. + thisNodeColor = calculateColor(visuals, node); + borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor); + } + node.setVisual('borderColor', borderColor); + + var viewChildren = node.viewChildren; + if (!viewChildren || !viewChildren.length) { + thisNodeColor = calculateColor(visuals, node); + // Apply visual to this node. + node.setVisual('color', thisNodeColor); + } + else { + var mapping = buildVisualMapping( + node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren + ); + + // Designate visual to children. + each$1(viewChildren, function (child, index) { + // If higher than viewRoot, only ancestors of viewRoot is needed to visit. + if (child.depth >= viewRootAncestors.length + || child === viewRootAncestors[child.depth] + ) { + var childVisual = mapVisual$1( + nodeModel, visuals, child, index, mapping, seriesModel + ); + travelTree( + child, childVisual, levelItemStyles, seriesItemStyleModel, + viewRootAncestors, seriesModel + ); + } + }); + } +} + +function buildVisuals( + nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel +) { + var visuals = extend({}, designatedVisual); + + each$1(['color', 'colorAlpha', 'colorSaturation'], function (visualName) { + // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel + var val = nodeItemStyleModel.get(visualName, true); // Ignore parent + val == null && levelItemStyle && (val = levelItemStyle[visualName]); + val == null && (val = designatedVisual[visualName]); + val == null && (val = seriesItemStyleModel.get(visualName)); + + val != null && (visuals[visualName] = val); + }); + + return visuals; +} + +function calculateColor(visuals) { + var color = getValueVisualDefine(visuals, 'color'); + + if (color) { + var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha'); + var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation'); + if (colorSaturation) { + color = modifyHSL(color, null, null, colorSaturation); + } + if (colorAlpha) { + color = modifyAlpha(color, colorAlpha); + } + + return color; + } +} + +function calculateBorderColor(borderColorSaturation, thisNodeColor) { + return thisNodeColor != null + ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) + : null; +} + +function getValueVisualDefine(visuals, name) { + var value = visuals[name]; + if (value != null && value !== 'none') { + return value; + } +} + +function buildVisualMapping( + node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren +) { + if (!viewChildren || !viewChildren.length) { + return; + } + + var rangeVisual = getRangeVisual(nodeModel, 'color') + || ( + visuals.color != null + && visuals.color !== 'none' + && ( + getRangeVisual(nodeModel, 'colorAlpha') + || getRangeVisual(nodeModel, 'colorSaturation') + ) + ); + + if (!rangeVisual) { + return; + } + + var visualMin = nodeModel.get('visualMin'); + var visualMax = nodeModel.get('visualMax'); + var dataExtent = nodeLayout.dataExtent.slice(); + visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin); + visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax); + + var colorMappingBy = nodeModel.get('colorMappingBy'); + var opt = { + type: rangeVisual.name, + dataExtent: dataExtent, + visual: rangeVisual.range + }; + if (opt.type === 'color' + && (colorMappingBy === 'index' || colorMappingBy === 'id') + ) { + opt.mappingMethod = 'category'; + opt.loop = true; + // categories is ordinal, so do not set opt.categories. + } + else { + opt.mappingMethod = 'linear'; + } + + var mapping = new VisualMapping(opt); + mapping.__drColorMappingBy = colorMappingBy; + + return mapping; +} + +// Notice: If we dont have the attribute 'colorRange', but only use +// attribute 'color' to represent both concepts of 'colorRange' and 'color', +// (It means 'colorRange' when 'color' is Array, means 'color' when not array), +// this problem will be encountered: +// If a level-1 node dont have children, and its siblings has children, +// and colorRange is set on level-1, then the node can not be colored. +// So we separate 'colorRange' and 'color' to different attributes. +function getRangeVisual(nodeModel, name) { + // 'colorRange', 'colorARange', 'colorSRange'. + // If not exsits on this node, fetch from levels and series. + var range = nodeModel.get(name); + return (isArray$2(range) && range.length) ? {name: name, range: range} : null; +} + +function mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) { + var childVisuals = extend({}, visuals); + + if (mapping) { + var mappingType = mapping.type; + var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy; + var value = colorMappingBy === 'index' + ? index + : colorMappingBy === 'id' + ? seriesModel.mapIdToIndex(child.getId()) + : child.getValue(nodeModel.get('visualDimension')); + + childVisuals[mappingType] = mapping.mapValueToVisual(value); + } + + return childVisuals; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* The treemap layout implementation references to the treemap +* layout of d3.js (d3/src/layout/treemap.js in v3). The use of +* the source code of this file is also subject to the terms +* and consitions of its license (BSD-3Clause, see +* ). +*/ + +var mathMax$4 = Math.max; +var mathMin$4 = Math.min; +var retrieveValue = retrieve; +var each$10 = each$1; + +var PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth']; +var PATH_GAP_WIDTH = ['itemStyle', 'gapWidth']; +var PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show']; +var PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height']; + +/** + * @public + */ +var treemapLayout = { + seriesType: 'treemap', + reset: function (seriesModel, ecModel, api, payload) { + // Layout result in each node: + // {x, y, width, height, area, borderWidth} + var ecWidth = api.getWidth(); + var ecHeight = api.getHeight(); + var seriesOption = seriesModel.option; + + var layoutInfo = getLayoutRect( + seriesModel.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + var size = seriesOption.size || []; // Compatible with ec2. + var containerWidth = parsePercent$1( + retrieveValue(layoutInfo.width, size[0]), + ecWidth + ); + var containerHeight = parsePercent$1( + retrieveValue(layoutInfo.height, size[1]), + ecHeight + ); + + // Fetch payload info. + var payloadType = payload && payload.type; + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, seriesModel); + var rootRect = (payloadType === 'treemapRender' || payloadType === 'treemapMove') + ? payload.rootRect : null; + var viewRoot = seriesModel.getViewRoot(); + var viewAbovePath = getPathToRoot(viewRoot); + + if (payloadType !== 'treemapMove') { + var rootSize = payloadType === 'treemapZoomToNode' + ? estimateRootSize( + seriesModel, targetInfo, viewRoot, containerWidth, containerHeight + ) + : rootRect + ? [rootRect.width, rootRect.height] + : [containerWidth, containerHeight]; + + var sort = seriesOption.sort; + if (sort && sort !== 'asc' && sort !== 'desc') { + sort = 'desc'; + } + var options = { + squareRatio: seriesOption.squareRatio, + sort: sort, + leafDepth: seriesOption.leafDepth + }; + + // layout should be cleared because using updateView but not update. + viewRoot.hostTree.clearLayouts(); + + // TODO + // optimize: if out of view clip, do not layout. + // But take care that if do not render node out of view clip, + // how to calculate start po + + var viewRootLayout = { + x: 0, y: 0, + width: rootSize[0], height: rootSize[1], + area: rootSize[0] * rootSize[1] + }; + viewRoot.setLayout(viewRootLayout); + + squarify(viewRoot, options, false, 0); + // Supplement layout. + var viewRootLayout = viewRoot.getLayout(); + each$10(viewAbovePath, function (node, index) { + var childValue = (viewAbovePath[index + 1] || viewRoot).getValue(); + node.setLayout(extend( + {dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0}, + viewRootLayout + )); + }); + } + + var treeRoot = seriesModel.getData().tree.root; + + treeRoot.setLayout( + calculateRootPosition(layoutInfo, rootRect, targetInfo), + true + ); + + seriesModel.setLayoutInfo(layoutInfo); + + // FIXME + // 现在没有clip功能,暂时取ec高宽。 + prunning( + treeRoot, + // Transform to base element coordinate system. + new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), + viewAbovePath, + viewRoot, + 0 + ); + } +}; + +/** + * Layout treemap with squarify algorithm. + * @see https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf + * The implementation references to the treemap layout of d3.js. + * See the license statement at the head of this file. + * + * @protected + * @param {module:echarts/data/Tree~TreeNode} node + * @param {Object} options + * @param {string} options.sort 'asc' or 'desc' + * @param {number} options.squareRatio + * @param {boolean} hideChildren + * @param {number} depth + */ +function squarify(node, options, hideChildren, depth) { + var width; + var height; + + if (node.isRemoved()) { + return; + } + + var thisLayout = node.getLayout(); + width = thisLayout.width; + height = thisLayout.height; + + // Considering border and gap + var nodeModel = node.getModel(); + var borderWidth = nodeModel.get(PATH_BORDER_WIDTH); + var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2; + var upperLabelHeight = getUpperLabelHeight(nodeModel); + var upperHeight = Math.max(borderWidth, upperLabelHeight); + var layoutOffset = borderWidth - halfGapWidth; + var layoutOffsetUpper = upperHeight - halfGapWidth; + var nodeModel = node.getModel(); + + node.setLayout({ + borderWidth: borderWidth, + upperHeight: upperHeight, + upperLabelHeight: upperLabelHeight + }, true); + + width = mathMax$4(width - 2 * layoutOffset, 0); + height = mathMax$4(height - layoutOffset - layoutOffsetUpper, 0); + + var totalArea = width * height; + var viewChildren = initChildren( + node, nodeModel, totalArea, options, hideChildren, depth + ); + + if (!viewChildren.length) { + return; + } + + var rect = {x: layoutOffset, y: layoutOffsetUpper, width: width, height: height}; + var rowFixedLength = mathMin$4(width, height); + var best = Infinity; // the best row score so far + var row = []; + row.area = 0; + + for (var i = 0, len = viewChildren.length; i < len;) { + var child = viewChildren[i]; + + row.push(child); + row.area += child.getLayout().area; + var score = worst(row, rowFixedLength, options.squareRatio); + + // continue with this orientation + if (score <= best) { + i++; + best = score; + } + // abort, and try a different orientation + else { + row.area -= row.pop().getLayout().area; + position(row, rowFixedLength, rect, halfGapWidth, false); + rowFixedLength = mathMin$4(rect.width, rect.height); + row.length = row.area = 0; + best = Infinity; + } + } + + if (row.length) { + position(row, rowFixedLength, rect, halfGapWidth, true); + } + + if (!hideChildren) { + var childrenVisibleMin = nodeModel.get('childrenVisibleMin'); + if (childrenVisibleMin != null && totalArea < childrenVisibleMin) { + hideChildren = true; + } + } + + for (var i = 0, len = viewChildren.length; i < len; i++) { + squarify(viewChildren[i], options, hideChildren, depth + 1); + } +} + +/** + * Set area to each child, and calculate data extent for visual coding. + */ +function initChildren(node, nodeModel, totalArea, options, hideChildren, depth) { + var viewChildren = node.children || []; + var orderBy = options.sort; + orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null); + + var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; + + // leafDepth has higher priority. + if (hideChildren && !overLeafDepth) { + return (node.viewChildren = []); + } + + // Sort children, order by desc. + viewChildren = filter(viewChildren, function (child) { + return !child.isRemoved(); + }); + + sort$1(viewChildren, orderBy); + + var info = statistic(nodeModel, viewChildren, orderBy); + + if (info.sum === 0) { + return (node.viewChildren = []); + } + + info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren); + + if (info.sum === 0) { + return (node.viewChildren = []); + } + + // Set area to each child. + for (var i = 0, len = viewChildren.length; i < len; i++) { + var area = viewChildren[i].getValue() / info.sum * totalArea; + // Do not use setLayout({...}, true), because it is needed to clear last layout. + viewChildren[i].setLayout({area: area}); + } + + if (overLeafDepth) { + viewChildren.length && node.setLayout({isLeafRoot: true}, true); + viewChildren.length = 0; + } + + node.viewChildren = viewChildren; + node.setLayout({dataExtent: info.dataExtent}, true); + + return viewChildren; +} + +/** + * Consider 'visibleMin'. Modify viewChildren and get new sum. + */ +function filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) { + + // visibleMin is not supported yet when no option.sort. + if (!orderBy) { + return sum; + } + + var visibleMin = nodeModel.get('visibleMin'); + var len = orderedChildren.length; + var deletePoint = len; + + // Always travel from little value to big value. + for (var i = len - 1; i >= 0; i--) { + var value = orderedChildren[ + orderBy === 'asc' ? len - i - 1 : i + ].getValue(); + + if (value / sum * totalArea < visibleMin) { + deletePoint = i; + sum -= value; + } + } + + orderBy === 'asc' + ? orderedChildren.splice(0, len - deletePoint) + : orderedChildren.splice(deletePoint, len - deletePoint); + + return sum; +} + +/** + * Sort + */ +function sort$1(viewChildren, orderBy) { + if (orderBy) { + viewChildren.sort(function (a, b) { + var diff = orderBy === 'asc' + ? a.getValue() - b.getValue() : b.getValue() - a.getValue(); + return diff === 0 + ? (orderBy === 'asc' + ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex + ) + : diff; + }); + } + return viewChildren; +} + +/** + * Statistic + */ +function statistic(nodeModel, children, orderBy) { + // Calculate sum. + var sum = 0; + for (var i = 0, len = children.length; i < len; i++) { + sum += children[i].getValue(); + } + + // Statistic data extent for latter visual coding. + // Notice: data extent should be calculate based on raw children + // but not filtered view children, otherwise visual mapping will not + // be stable when zoom (where children is filtered by visibleMin). + + var dimension = nodeModel.get('visualDimension'); + var dataExtent; + + // The same as area dimension. + if (!children || !children.length) { + dataExtent = [NaN, NaN]; + } + else if (dimension === 'value' && orderBy) { + dataExtent = [ + children[children.length - 1].getValue(), + children[0].getValue() + ]; + orderBy === 'asc' && dataExtent.reverse(); + } + // Other dimension. + else { + var dataExtent = [Infinity, -Infinity]; + each$10(children, function (child) { + var value = child.getValue(dimension); + value < dataExtent[0] && (dataExtent[0] = value); + value > dataExtent[1] && (dataExtent[1] = value); + }); + } + + return {sum: sum, dataExtent: dataExtent}; +} + +/** + * Computes the score for the specified row, + * as the worst aspect ratio. + */ +function worst(row, rowFixedLength, ratio) { + var areaMax = 0; + var areaMin = Infinity; + + for (var i = 0, area, len = row.length; i < len; i++) { + area = row[i].getLayout().area; + if (area) { + area < areaMin && (areaMin = area); + area > areaMax && (areaMax = area); + } + } + + var squareArea = row.area * row.area; + var f = rowFixedLength * rowFixedLength * ratio; + + return squareArea + ? mathMax$4( + (f * areaMax) / squareArea, + squareArea / (f * areaMin) + ) + : Infinity; +} + +/** + * Positions the specified row of nodes. Modifies `rect`. + */ +function position(row, rowFixedLength, rect, halfGapWidth, flush) { + // When rowFixedLength === rect.width, + // it is horizontal subdivision, + // rowFixedLength is the width of the subdivision, + // rowOtherLength is the height of the subdivision, + // and nodes will be positioned from left to right. + + // wh[idx0WhenH] means: when horizontal, + // wh[idx0WhenH] => wh[0] => 'width'. + // xy[idx1WhenH] => xy[1] => 'y'. + var idx0WhenH = rowFixedLength === rect.width ? 0 : 1; + var idx1WhenH = 1 - idx0WhenH; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + + var last = rect[xy[idx0WhenH]]; + var rowOtherLength = rowFixedLength + ? row.area / rowFixedLength : 0; + + if (flush || rowOtherLength > rect[wh[idx1WhenH]]) { + rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow + } + for (var i = 0, rowLen = row.length; i < rowLen; i++) { + var node = row[i]; + var nodeLayout = {}; + var step = rowOtherLength + ? node.getLayout().area / rowOtherLength : 0; + + var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$4(rowOtherLength - 2 * halfGapWidth, 0); + + // We use Math.max/min to avoid negative width/height when considering gap width. + var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last; + var modWH = (i === rowLen - 1 || remain < step) ? remain : step; + var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$4(modWH - 2 * halfGapWidth, 0); + + nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$4(halfGapWidth, wh1 / 2); + nodeLayout[xy[idx0WhenH]] = last + mathMin$4(halfGapWidth, wh0 / 2); + + last += modWH; + node.setLayout(nodeLayout, true); + } + + rect[xy[idx1WhenH]] += rowOtherLength; + rect[wh[idx1WhenH]] -= rowOtherLength; +} + +// Return [containerWidth, containerHeight] as defualt. +function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) { + // If targetInfo.node exists, we zoom to the node, + // so estimate whold width and heigth by target node. + var currNode = (targetInfo || {}).node; + var defaultSize = [containerWidth, containerHeight]; + + if (!currNode || currNode === viewRoot) { + return defaultSize; + } + + var parent; + var viewArea = containerWidth * containerHeight; + var area = viewArea * seriesModel.option.zoomToNodeRatio; + + while (parent = currNode.parentNode) { // jshint ignore:line + var sum = 0; + var siblings = parent.children; + + for (var i = 0, len = siblings.length; i < len; i++) { + sum += siblings[i].getValue(); + } + var currNodeValue = currNode.getValue(); + if (currNodeValue === 0) { + return defaultSize; + } + area *= sum / currNodeValue; + + // Considering border, suppose aspect ratio is 1. + var parentModel = parent.getModel(); + var borderWidth = parentModel.get(PATH_BORDER_WIDTH); + var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth)); + area += 4 * borderWidth * borderWidth + + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5); + + area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER); + + currNode = parent; + } + + area < viewArea && (area = viewArea); + var scale = Math.pow(area / viewArea, 0.5); + + return [containerWidth * scale, containerHeight * scale]; +} + +// Root postion base on coord of containerGroup +function calculateRootPosition(layoutInfo, rootRect, targetInfo) { + if (rootRect) { + return {x: rootRect.x, y: rootRect.y}; + } + + var defaultPosition = {x: 0, y: 0}; + if (!targetInfo) { + return defaultPosition; + } + + // If targetInfo is fetched by 'retrieveTargetInfo', + // old tree and new tree are the same tree, + // so the node still exists and we can visit it. + + var targetNode = targetInfo.node; + var layout = targetNode.getLayout(); + + if (!layout) { + return defaultPosition; + } + + // Transform coord from local to container. + var targetCenter = [layout.width / 2, layout.height / 2]; + var node = targetNode; + while (node) { + var nodeLayout = node.getLayout(); + targetCenter[0] += nodeLayout.x; + targetCenter[1] += nodeLayout.y; + node = node.parentNode; + } + + return { + x: layoutInfo.width / 2 - targetCenter[0], + y: layoutInfo.height / 2 - targetCenter[1] + }; +} + +// Mark nodes visible for prunning when visual coding and rendering. +// Prunning depends on layout and root position, so we have to do it after layout. +function prunning(node, clipRect, viewAbovePath, viewRoot, depth) { + var nodeLayout = node.getLayout(); + var nodeInViewAbovePath = viewAbovePath[depth]; + var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node; + + if ( + (nodeInViewAbovePath && !isAboveViewRoot) + || (depth === viewAbovePath.length && node !== viewRoot) + ) { + return; + } + + node.setLayout({ + // isInView means: viewRoot sub tree + viewAbovePath + isInView: true, + // invisible only means: outside view clip so that the node can not + // see but still layout for animation preparation but not render. + invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout), + isAboveViewRoot: isAboveViewRoot + }, true); + + // Transform to child coordinate. + var childClipRect = new BoundingRect( + clipRect.x - nodeLayout.x, + clipRect.y - nodeLayout.y, + clipRect.width, + clipRect.height + ); + + each$10(node.viewChildren || [], function (child) { + prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1); + }); +} + +function getUpperLabelHeight(model) { + return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(treemapVisual); +registerLayout(treemapLayout); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Graph data structure + * + * @module echarts/data/Graph + * @author Yi Shen(https://www.github.com/pissang) + */ + +// id may be function name of Object, add a prefix to avoid this problem. +function generateNodeKey(id) { + return '_EC_' + id; +} +/** + * @alias module:echarts/data/Graph + * @constructor + * @param {boolean} directed + */ +var Graph = function (directed) { + /** + * 是否是有向图 + * @type {boolean} + * @private + */ + this._directed = directed || false; + + /** + * @type {Array.} + * @readOnly + */ + this.nodes = []; + + /** + * @type {Array.} + * @readOnly + */ + this.edges = []; + + /** + * @type {Object.} + * @private + */ + this._nodesMap = {}; + /** + * @type {Object.} + * @private + */ + this._edgesMap = {}; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.data; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.edgeData; +}; + +var graphProto = Graph.prototype; +/** + * @type {string} + */ +graphProto.type = 'graph'; + +/** + * If is directed graph + * @return {boolean} + */ +graphProto.isDirected = function () { + return this._directed; +}; + +/** + * Add a new node + * @param {string} id + * @param {number} [dataIndex] + */ +graphProto.addNode = function (id, dataIndex) { + id = id || ('' + dataIndex); + + var nodesMap = this._nodesMap; + + if (nodesMap[generateNodeKey(id)]) { + if (__DEV__) { + console.error('Graph nodes have duplicate name or id'); + } + return; + } + + var node = new Node(id, dataIndex); + node.hostGraph = this; + + this.nodes.push(node); + + nodesMap[generateNodeKey(id)] = node; + return node; +}; + +/** + * Get node by data index + * @param {number} dataIndex + * @return {module:echarts/data/Graph~Node} + */ +graphProto.getNodeByIndex = function (dataIndex) { + var rawIdx = this.data.getRawIndex(dataIndex); + return this.nodes[rawIdx]; +}; +/** + * Get node by id + * @param {string} id + * @return {module:echarts/data/Graph.Node} + */ +graphProto.getNodeById = function (id) { + return this._nodesMap[generateNodeKey(id)]; +}; + +/** + * Add a new edge + * @param {number|string|module:echarts/data/Graph.Node} n1 + * @param {number|string|module:echarts/data/Graph.Node} n2 + * @param {number} [dataIndex=-1] + * @return {module:echarts/data/Graph.Edge} + */ +graphProto.addEdge = function (n1, n2, dataIndex) { + var nodesMap = this._nodesMap; + var edgesMap = this._edgesMap; + + // PNEDING + if (typeof n1 === 'number') { + n1 = this.nodes[n1]; + } + if (typeof n2 === 'number') { + n2 = this.nodes[n2]; + } + + if (!Node.isInstance(n1)) { + n1 = nodesMap[generateNodeKey(n1)]; + } + if (!Node.isInstance(n2)) { + n2 = nodesMap[generateNodeKey(n2)]; + } + if (!n1 || !n2) { + return; + } + + var key = n1.id + '-' + n2.id; + // PENDING + if (edgesMap[key]) { + return; + } + + var edge = new Edge(n1, n2, dataIndex); + edge.hostGraph = this; + + if (this._directed) { + n1.outEdges.push(edge); + n2.inEdges.push(edge); + } + n1.edges.push(edge); + if (n1 !== n2) { + n2.edges.push(edge); + } + + this.edges.push(edge); + edgesMap[key] = edge; + + return edge; +}; + +/** + * Get edge by data index + * @param {number} dataIndex + * @return {module:echarts/data/Graph~Node} + */ +graphProto.getEdgeByIndex = function (dataIndex) { + var rawIdx = this.edgeData.getRawIndex(dataIndex); + return this.edges[rawIdx]; +}; +/** + * Get edge by two linked nodes + * @param {module:echarts/data/Graph.Node|string} n1 + * @param {module:echarts/data/Graph.Node|string} n2 + * @return {module:echarts/data/Graph.Edge} + */ +graphProto.getEdge = function (n1, n2) { + if (Node.isInstance(n1)) { + n1 = n1.id; + } + if (Node.isInstance(n2)) { + n2 = n2.id; + } + + var edgesMap = this._edgesMap; + + if (this._directed) { + return edgesMap[n1 + '-' + n2]; + } + else { + return edgesMap[n1 + '-' + n2] + || edgesMap[n2 + '-' + n1]; + } +}; + +/** + * Iterate all nodes + * @param {Function} cb + * @param {*} [context] + */ +graphProto.eachNode = function (cb, context) { + var nodes = this.nodes; + var len = nodes.length; + for (var i = 0; i < len; i++) { + if (nodes[i].dataIndex >= 0) { + cb.call(context, nodes[i], i); + } + } +}; + +/** + * Iterate all edges + * @param {Function} cb + * @param {*} [context] + */ +graphProto.eachEdge = function (cb, context) { + var edges = this.edges; + var len = edges.length; + for (var i = 0; i < len; i++) { + if (edges[i].dataIndex >= 0 + && edges[i].node1.dataIndex >= 0 + && edges[i].node2.dataIndex >= 0 + ) { + cb.call(context, edges[i], i); + } + } +}; + +/** + * Breadth first traverse + * @param {Function} cb + * @param {module:echarts/data/Graph.Node} startNode + * @param {string} [direction='none'] 'none'|'in'|'out' + * @param {*} [context] + */ +graphProto.breadthFirstTraverse = function ( + cb, startNode, direction, context +) { + if (!Node.isInstance(startNode)) { + startNode = this._nodesMap[generateNodeKey(startNode)]; + } + if (!startNode) { + return; + } + + var edgeType = direction === 'out' + ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges'); + + for (var i = 0; i < this.nodes.length; i++) { + this.nodes[i].__visited = false; + } + + if (cb.call(context, startNode, null)) { + return; + } + + var queue = [startNode]; + while (queue.length) { + var currentNode = queue.shift(); + var edges = currentNode[edgeType]; + + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + var otherNode = e.node1 === currentNode + ? e.node2 : e.node1; + if (!otherNode.__visited) { + if (cb.call(context, otherNode, currentNode)) { + // Stop traversing + return; + } + queue.push(otherNode); + otherNode.__visited = true; + } + } + } +}; + +// TODO +// graphProto.depthFirstTraverse = function ( +// cb, startNode, direction, context +// ) { + +// }; + +// Filter update +graphProto.update = function () { + var data = this.data; + var edgeData = this.edgeData; + var nodes = this.nodes; + var edges = this.edges; + + for (var i = 0, len = nodes.length; i < len; i++) { + nodes[i].dataIndex = -1; + } + for (var i = 0, len = data.count(); i < len; i++) { + nodes[data.getRawIndex(i)].dataIndex = i; + } + + edgeData.filterSelf(function (idx) { + var edge = edges[edgeData.getRawIndex(idx)]; + return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0; + }); + + // Update edge + for (var i = 0, len = edges.length; i < len; i++) { + edges[i].dataIndex = -1; + } + for (var i = 0, len = edgeData.count(); i < len; i++) { + edges[edgeData.getRawIndex(i)].dataIndex = i; + } +}; + +/** + * @return {module:echarts/data/Graph} + */ +graphProto.clone = function () { + var graph = new Graph(this._directed); + var nodes = this.nodes; + var edges = this.edges; + for (var i = 0; i < nodes.length; i++) { + graph.addNode(nodes[i].id, nodes[i].dataIndex); + } + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + graph.addEdge(e.node1.id, e.node2.id, e.dataIndex); + } + return graph; +}; + + +/** + * @alias module:echarts/data/Graph.Node + */ +function Node(id, dataIndex) { + /** + * @type {string} + */ + this.id = id == null ? '' : id; + + /** + * @type {Array.} + */ + this.inEdges = []; + /** + * @type {Array.} + */ + this.outEdges = []; + /** + * @type {Array.} + */ + this.edges = []; + /** + * @type {module:echarts/data/Graph} + */ + this.hostGraph; + + /** + * @type {number} + */ + this.dataIndex = dataIndex == null ? -1 : dataIndex; +} + +Node.prototype = { + + constructor: Node, + + /** + * @return {number} + */ + degree: function () { + return this.edges.length; + }, + + /** + * @return {number} + */ + inDegree: function () { + return this.inEdges.length; + }, + + /** + * @return {number} + */ + outDegree: function () { + return this.outEdges.length; + }, + + /** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ + getModel: function (path) { + if (this.dataIndex < 0) { + return; + } + var graph = this.hostGraph; + var itemModel = graph.data.getItemModel(this.dataIndex); + + return itemModel.getModel(path); + } +}; + +/** + * 图边 + * @alias module:echarts/data/Graph.Edge + * @param {module:echarts/data/Graph.Node} n1 + * @param {module:echarts/data/Graph.Node} n2 + * @param {number} [dataIndex=-1] + */ +function Edge(n1, n2, dataIndex) { + + /** + * 节点1,如果是有向图则为源节点 + * @type {module:echarts/data/Graph.Node} + */ + this.node1 = n1; + + /** + * 节点2,如果是有向图则为目标节点 + * @type {module:echarts/data/Graph.Node} + */ + this.node2 = n2; + + this.dataIndex = dataIndex == null ? -1 : dataIndex; +} + +/** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ +Edge.prototype.getModel = function (path) { + if (this.dataIndex < 0) { + return; + } + var graph = this.hostGraph; + var itemModel = graph.edgeData.getItemModel(this.dataIndex); + + return itemModel.getModel(path); +}; + +var createGraphDataProxyMixin = function (hostName, dataName) { + return { + /** + * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'. + * @return {number} + */ + getValue: function (dimension) { + var data = this[hostName][dataName]; + return data.get(data.getDimension(dimension || 'value'), this.dataIndex); + }, + + /** + * @param {Object|string} key + * @param {*} [value] + */ + setVisual: function (key, value) { + this.dataIndex >= 0 + && this[hostName][dataName].setItemVisual(this.dataIndex, key, value); + }, + + /** + * @param {string} key + * @return {boolean} + */ + getVisual: function (key, ignoreParent) { + return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent); + }, + + /** + * @param {Object} layout + * @return {boolean} [merge=false] + */ + setLayout: function (layout, merge$$1) { + this.dataIndex >= 0 + && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge$$1); + }, + + /** + * @return {Object} + */ + getLayout: function () { + return this[hostName][dataName].getItemLayout(this.dataIndex); + }, + + /** + * @return {module:zrender/Element} + */ + getGraphicEl: function () { + return this[hostName][dataName].getItemGraphicEl(this.dataIndex); + }, + + /** + * @return {number} + */ + getRawIndex: function () { + return this[hostName][dataName].getRawIndex(this.dataIndex); + } + }; +}; + +mixin(Node, createGraphDataProxyMixin('hostGraph', 'data')); +mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData')); + +Graph.Node = Node; +Graph.Edge = Edge; + +enableClassCheck(Node); +enableClassCheck(Edge); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var createGraphFromNodeEdge = function (nodes, edges, seriesModel, directed, beforeLink) { + // ??? TODO + // support dataset? + var graph = new Graph(directed); + for (var i = 0; i < nodes.length; i++) { + graph.addNode(retrieve( + // Id, name, dataIndex + nodes[i].id, nodes[i].name, i + ), i); + } + + var linkNameList = []; + var validEdges = []; + var linkCount = 0; + for (var i = 0; i < edges.length; i++) { + var link = edges[i]; + var source = link.source; + var target = link.target; + // addEdge may fail when source or target not exists + if (graph.addEdge(source, target, linkCount)) { + validEdges.push(link); + linkNameList.push(retrieve(link.id, source + ' > ' + target)); + linkCount++; + } + } + + var coordSys = seriesModel.get('coordinateSystem'); + var nodeData; + if (coordSys === 'cartesian2d' || coordSys === 'polar') { + nodeData = createListFromArray(nodes, seriesModel); + } + else { + var coordSysCtor = CoordinateSystemManager.get(coordSys); + var coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view') + ? (coordSysCtor.dimensions || []) : []; + // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs + // `value` dimension, but graph need `value` dimension. It's better to + // uniform this behavior. + if (indexOf(coordDimensions, 'value') < 0) { + coordDimensions.concat(['value']); + } + + var dimensionNames = createDimensions(nodes, { + coordDimensions: coordDimensions + }); + nodeData = new List(dimensionNames, seriesModel); + nodeData.initData(nodes); + } + + var edgeData = new List(['value'], seriesModel); + edgeData.initData(validEdges, linkNameList); + + beforeLink && beforeLink(nodeData, edgeData); + + linkList({ + mainData: nodeData, + struct: graph, + structAttr: 'graph', + datas: {node: nodeData, edge: edgeData}, + datasAttr: {node: 'data', edge: 'edgeData'} + }); + + // Update dataIndex of nodes and edges because invalid edge may be removed + graph.update(); + + return graph; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var GraphSeries = extendSeriesModel({ + + type: 'series.graph', + + init: function (option) { + GraphSeries.superApply(this, 'init', arguments); + + // Provide data for legend select + this.legendDataProvider = function () { + return this._categoriesData; + }; + + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }, + + mergeOption: function (option) { + GraphSeries.superApply(this, 'mergeOption', arguments); + + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }, + + mergeDefaultAndTheme: function (option) { + GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments); + defaultEmphasis(option, ['edgeLabel'], ['show']); + }, + + getInitialData: function (option, ecModel) { + var edges = option.edges || option.links || []; + var nodes = option.data || option.nodes || []; + var self = this; + + if (nodes && edges) { + return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data; + } + + function beforeLink(nodeData, edgeData) { + // Overwrite nodeData.getItemModel to + nodeData.wrapMethod('getItemModel', function (model) { + var categoriesModels = self._categoriesModels; + var categoryIdx = model.getShallow('category'); + var categoryModel = categoriesModels[categoryIdx]; + if (categoryModel) { + categoryModel.parentModel = model.parentModel; + model.parentModel = categoryModel; + } + return model; + }); + + var edgeLabelModel = self.getModel('edgeLabel'); + // For option `edgeLabel` can be found by label.xxx.xxx on item mode. + var fakeSeriesModel = new Model( + {label: edgeLabelModel.option}, + edgeLabelModel.parentModel, + ecModel + ); + var emphasisEdgeLabelModel = self.getModel('emphasis.edgeLabel'); + var emphasisFakeSeriesModel = new Model( + {emphasis: {label: emphasisEdgeLabelModel.option}}, + emphasisEdgeLabelModel.parentModel, + ecModel + ); + + edgeData.wrapMethod('getItemModel', function (model) { + model.customizeGetParent(edgeGetParent); + return model; + }); + + function edgeGetParent(path) { + path = this.parsePath(path); + return (path && path[0] === 'label') + ? fakeSeriesModel + : (path && path[0] === 'emphasis' && path[1] === 'label') + ? emphasisFakeSeriesModel + : this.parentModel; + } + } + }, + + /** + * @return {module:echarts/data/Graph} + */ + getGraph: function () { + return this.getData().graph; + }, + + /** + * @return {module:echarts/data/List} + */ + getEdgeData: function () { + return this.getGraph().edgeData; + }, + + /** + * @return {module:echarts/data/List} + */ + getCategoriesData: function () { + return this._categoriesData; + }, + + /** + * @override + */ + formatTooltip: function (dataIndex, multipleSeries, dataType) { + if (dataType === 'edge') { + var nodeData = this.getData(); + var params = this.getDataParams(dataIndex, dataType); + var edge = nodeData.graph.getEdgeByIndex(dataIndex); + var sourceName = nodeData.getName(edge.node1.dataIndex); + var targetName = nodeData.getName(edge.node2.dataIndex); + + var html = []; + sourceName != null && html.push(sourceName); + targetName != null && html.push(targetName); + html = encodeHTML(html.join(' > ')); + + if (params.value) { + html += ' : ' + encodeHTML(params.value); + } + return html; + } + else { // dataType === 'node' or empty + return GraphSeries.superApply(this, 'formatTooltip', arguments); + } + }, + + _updateCategoriesData: function () { + var categories = map(this.option.categories || [], function (category) { + // Data must has value + return category.value != null ? category : extend({ + value: 0 + }, category); + }); + var categoriesData = new List(['value'], this); + categoriesData.initData(categories); + + this._categoriesData = categoriesData; + + this._categoriesModels = categoriesData.mapArray(function (idx) { + return categoriesData.getItemModel(idx, true); + }); + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + }, + + isAnimationEnabled: function () { + return GraphSeries.superCall(this, 'isAnimationEnabled') + // Not enable animation when do force layout + && !(this.get('layout') === 'force' && this.get('force.layoutAnimation')); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'view', + + // Default option for all coordinate systems + // xAxisIndex: 0, + // yAxisIndex: 0, + // polarIndex: 0, + // geoIndex: 0, + + legendHoverLink: true, + + hoverAnimation: true, + + layout: null, + + focusNodeAdjacency: false, + + // Configuration of circular layout + circular: { + rotateLabel: false + }, + // Configuration of force directed layout + force: { + initLayout: null, + // Node repulsion. Can be an array to represent range. + repulsion: [0, 50], + gravity: 0.1, + + // Edge length. Can be an array to represent range. + edgeLength: 30, + + layoutAnimation: true + }, + + left: 'center', + top: 'center', + // right: null, + // bottom: null, + // width: '80%', + // height: '80%', + + symbol: 'circle', + symbolSize: 10, + + edgeSymbol: ['none', 'none'], + edgeSymbolSize: 10, + edgeLabel: { + position: 'middle' + }, + + draggable: false, + + roam: false, + + // Default on center of graph + center: null, + + zoom: 1, + // Symbol size scale ratio in roam + nodeScaleRatio: 0.6, + // cursor: null, + + // categories: [], + + // data: [] + // Or + // nodes: [] + // + // links: [] + // Or + // edges: [] + + label: { + show: false, + formatter: '{b}' + }, + + itemStyle: {}, + + lineStyle: { + color: '#aaa', + width: 1, + curveness: 0, + opacity: 0.5 + }, + emphasis: { + label: { + show: true + } + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Line path for bezier and straight line draw + */ + +var straightLineProto = Line.prototype; +var bezierCurveProto = BezierCurve.prototype; + +function isLine(shape) { + return isNaN(+shape.cpx1) || isNaN(+shape.cpy1); +} + +var LinePath = extendShape({ + + type: 'ec-line', + + style: { + stroke: '#000', + fill: null + }, + + shape: { + x1: 0, + y1: 0, + x2: 0, + y2: 0, + percent: 1, + cpx1: null, + cpy1: null + }, + + buildPath: function (ctx, shape) { + (isLine(shape) ? straightLineProto : bezierCurveProto).buildPath(ctx, shape); + }, + + pointAt: function (t) { + return isLine(this.shape) + ? straightLineProto.pointAt.call(this, t) + : bezierCurveProto.pointAt.call(this, t); + }, + + tangentAt: function (t) { + var shape = this.shape; + var p = isLine(shape) + ? [shape.x2 - shape.x1, shape.y2 - shape.y1] + : bezierCurveProto.tangentAt.call(this, t); + return normalize(p, p); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/chart/helper/Line + */ + +var SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol']; + +function makeSymbolTypeKey(symbolCategory) { + return '_' + symbolCategory + 'Type'; +} +/** + * @inner + */ +function createSymbol$1(name, lineData, idx) { + var color = lineData.getItemVisual(idx, 'color'); + var symbolType = lineData.getItemVisual(idx, name); + var symbolSize = lineData.getItemVisual(idx, name + 'Size'); + + if (!symbolType || symbolType === 'none') { + return; + } + + if (!isArray(symbolSize)) { + symbolSize = [symbolSize, symbolSize]; + } + var symbolPath = createSymbol( + symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2, + symbolSize[0], symbolSize[1], color + ); + + symbolPath.name = name; + + return symbolPath; +} + +function createLine(points) { + var line = new LinePath({ + name: 'line' + }); + setLinePoints(line.shape, points); + return line; +} + +function setLinePoints(targetShape, points) { + var p1 = points[0]; + var p2 = points[1]; + var cp1 = points[2]; + targetShape.x1 = p1[0]; + targetShape.y1 = p1[1]; + targetShape.x2 = p2[0]; + targetShape.y2 = p2[1]; + targetShape.percent = 1; + + if (cp1) { + targetShape.cpx1 = cp1[0]; + targetShape.cpy1 = cp1[1]; + } + else { + targetShape.cpx1 = NaN; + targetShape.cpy1 = NaN; + } +} + +function updateSymbolAndLabelBeforeLineUpdate() { + var lineGroup = this; + var symbolFrom = lineGroup.childOfName('fromSymbol'); + var symbolTo = lineGroup.childOfName('toSymbol'); + var label = lineGroup.childOfName('label'); + // Quick reject + if (!symbolFrom && !symbolTo && label.ignore) { + return; + } + + var invScale = 1; + var parentNode = this.parent; + while (parentNode) { + if (parentNode.scale) { + invScale /= parentNode.scale[0]; + } + parentNode = parentNode.parent; + } + + var line = lineGroup.childOfName('line'); + // If line not changed + // FIXME Parent scale changed + if (!this.__dirty && !line.__dirty) { + return; + } + + var percent = line.shape.percent; + var fromPos = line.pointAt(0); + var toPos = line.pointAt(percent); + + var d = sub([], toPos, fromPos); + normalize(d, d); + + if (symbolFrom) { + symbolFrom.attr('position', fromPos); + var tangent = line.tangentAt(0); + symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2( + tangent[1], tangent[0] + )); + symbolFrom.attr('scale', [invScale * percent, invScale * percent]); + } + if (symbolTo) { + symbolTo.attr('position', toPos); + var tangent = line.tangentAt(1); + symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2( + tangent[1], tangent[0] + )); + symbolTo.attr('scale', [invScale * percent, invScale * percent]); + } + + if (!label.ignore) { + label.attr('position', toPos); + + var textPosition; + var textAlign; + var textVerticalAlign; + + var distance$$1 = 5 * invScale; + // End + if (label.__position === 'end') { + textPosition = [d[0] * distance$$1 + toPos[0], d[1] * distance$$1 + toPos[1]]; + textAlign = d[0] > 0.8 ? 'left' : (d[0] < -0.8 ? 'right' : 'center'); + textVerticalAlign = d[1] > 0.8 ? 'top' : (d[1] < -0.8 ? 'bottom' : 'middle'); + } + // Middle + else if (label.__position === 'middle') { + var halfPercent = percent / 2; + var tangent = line.tangentAt(halfPercent); + var n = [tangent[1], -tangent[0]]; + var cp = line.pointAt(halfPercent); + if (n[1] > 0) { + n[0] = -n[0]; + n[1] = -n[1]; + } + textPosition = [cp[0] + n[0] * distance$$1, cp[1] + n[1] * distance$$1]; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + var rotation = -Math.atan2(tangent[1], tangent[0]); + if (toPos[0] < fromPos[0]) { + rotation = Math.PI + rotation; + } + label.attr('rotation', rotation); + } + // Start + else { + textPosition = [-d[0] * distance$$1 + fromPos[0], -d[1] * distance$$1 + fromPos[1]]; + textAlign = d[0] > 0.8 ? 'right' : (d[0] < -0.8 ? 'left' : 'center'); + textVerticalAlign = d[1] > 0.8 ? 'bottom' : (d[1] < -0.8 ? 'top' : 'middle'); + } + label.attr({ + style: { + // Use the user specified text align and baseline first + textVerticalAlign: label.__verticalAlign || textVerticalAlign, + textAlign: label.__textAlign || textAlign + }, + position: textPosition, + scale: [invScale, invScale] + }); + } +} + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Line} + */ +function Line$1(lineData, idx, seriesScope) { + Group.call(this); + + this._createLine(lineData, idx, seriesScope); +} + +var lineProto = Line$1.prototype; + +// Update symbol position and rotation +lineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate; + +lineProto._createLine = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var linePoints = lineData.getItemLayout(idx); + + var line = createLine(linePoints); + line.shape.percent = 0; + initProps(line, { + shape: { + percent: 1 + } + }, seriesModel, idx); + + this.add(line); + + var label = new Text({ + name: 'label' + }); + this.add(label); + + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = createSymbol$1(symbolCategory, lineData, idx); + // symbols must added after line to make sure + // it will be updated after line#update. + // Or symbol position and rotation update in line#beforeUpdate will be one frame slow + this.add(symbol); + this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory); + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +lineProto.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childOfName('line'); + var linePoints = lineData.getItemLayout(idx); + var target = { + shape: {} + }; + setLinePoints(target.shape, linePoints); + updateProps(line, target, seriesModel, idx); + + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbolType = lineData.getItemVisual(idx, symbolCategory); + var key = makeSymbolTypeKey(symbolCategory); + // Symbol changed + if (this[key] !== symbolType) { + this.remove(this.childOfName(symbolCategory)); + var symbol = createSymbol$1(symbolCategory, lineData, idx); + this.add(symbol); + } + this[key] = symbolType; + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +lineProto._updateCommonStl = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childOfName('line'); + + var lineStyle = seriesScope && seriesScope.lineStyle; + var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle; + var labelModel = seriesScope && seriesScope.labelModel; + var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel; + + // Optimization for large dataset + if (!seriesScope || lineData.hasItemOption) { + var itemModel = lineData.getItemModel(idx); + + lineStyle = itemModel.getModel('lineStyle').getLineStyle(); + hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle(); + + labelModel = itemModel.getModel('label'); + hoverLabelModel = itemModel.getModel('emphasis.label'); + } + + var visualColor = lineData.getItemVisual(idx, 'color'); + var visualOpacity = retrieve3( + lineData.getItemVisual(idx, 'opacity'), + lineStyle.opacity, + 1 + ); + + line.useStyle(defaults( + { + strokeNoScale: true, + fill: 'none', + stroke: visualColor, + opacity: visualOpacity + }, + lineStyle + )); + line.hoverStyle = hoverLineStyle; + + // Update symbol + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = this.childOfName(symbolCategory); + if (symbol) { + symbol.setColor(visualColor); + symbol.setStyle({ + opacity: visualOpacity + }); + } + }, this); + + var showLabel = labelModel.getShallow('show'); + var hoverShowLabel = hoverLabelModel.getShallow('show'); + + var label = this.childOfName('label'); + var defaultLabelColor; + var baseText; + + // FIXME: the logic below probably should be merged to `graphic.setLabelStyle`. + if (showLabel || hoverShowLabel) { + defaultLabelColor = visualColor || '#000'; + + baseText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType); + if (baseText == null) { + var rawVal = seriesModel.getRawValue(idx); + baseText = rawVal == null + ? lineData.getName(idx) + : isFinite(rawVal) + ? round$1(rawVal) + : rawVal; + } + } + var normalText = showLabel ? baseText : null; + var emphasisText = hoverShowLabel + ? retrieve2( + seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType), + baseText + ) + : null; + + var labelStyle = label.style; + + // Always set `textStyle` even if `normalStyle.text` is null, because default + // values have to be set on `normalStyle`. + if (normalText != null || emphasisText != null) { + setTextStyle(label.style, labelModel, { + text: normalText + }, { + autoColor: defaultLabelColor + }); + + label.__textAlign = labelStyle.textAlign; + label.__verticalAlign = labelStyle.textVerticalAlign; + // 'start', 'middle', 'end' + label.__position = labelModel.get('position') || 'middle'; + } + + if (emphasisText != null) { + // Only these properties supported in this emphasis style here. + label.hoverStyle = { + text: emphasisText, + textFill: hoverLabelModel.getTextColor(true), + // For merging hover style to normal style, do not use + // `hoverLabelModel.getFont()` here. + fontStyle: hoverLabelModel.getShallow('fontStyle'), + fontWeight: hoverLabelModel.getShallow('fontWeight'), + fontSize: hoverLabelModel.getShallow('fontSize'), + fontFamily: hoverLabelModel.getShallow('fontFamily') + }; + } + else { + label.hoverStyle = { + text: null + }; + } + + label.ignore = !showLabel && !hoverShowLabel; + + setHoverStyle(this); +}; + +lineProto.highlight = function () { + this.trigger('emphasis'); +}; + +lineProto.downplay = function () { + this.trigger('normal'); +}; + +lineProto.updateLayout = function (lineData, idx) { + this.setLinePoints(lineData.getItemLayout(idx)); +}; + +lineProto.setLinePoints = function (points) { + var linePath = this.childOfName('line'); + setLinePoints(linePath.shape, points); + linePath.dirty(); +}; + +inherits(Line$1, Group); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/chart/helper/LineDraw + */ + +// import IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable'; + +/** + * @alias module:echarts/component/marker/LineDraw + * @constructor + */ +function LineDraw(ctor) { + this._ctor = ctor || Line$1; + + this.group = new Group(); +} + +var lineDrawProto = LineDraw.prototype; + +lineDrawProto.isPersistent = function () { + return true; +}; + +/** + * @param {module:echarts/data/List} lineData + */ +lineDrawProto.updateData = function (lineData) { + var lineDraw = this; + var group = lineDraw.group; + + var oldLineData = lineDraw._lineData; + lineDraw._lineData = lineData; + + // There is no oldLineData only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + if (!oldLineData) { + group.removeAll(); + } + + var seriesScope = makeSeriesScope$1(lineData); + + lineData.diff(oldLineData) + .add(function (idx) { + doAdd(lineDraw, lineData, idx, seriesScope); + }) + .update(function (newIdx, oldIdx) { + doUpdate(lineDraw, oldLineData, lineData, oldIdx, newIdx, seriesScope); + }) + .remove(function (idx) { + group.remove(oldLineData.getItemGraphicEl(idx)); + }) + .execute(); +}; + +function doAdd(lineDraw, lineData, idx, seriesScope) { + var itemLayout = lineData.getItemLayout(idx); + + if (!lineNeedsDraw(itemLayout)) { + return; + } + + var el = new lineDraw._ctor(lineData, idx, seriesScope); + lineData.setItemGraphicEl(idx, el); + lineDraw.group.add(el); +} + +function doUpdate(lineDraw, oldLineData, newLineData, oldIdx, newIdx, seriesScope) { + var itemEl = oldLineData.getItemGraphicEl(oldIdx); + + if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) { + lineDraw.group.remove(itemEl); + return; + } + + if (!itemEl) { + itemEl = new lineDraw._ctor(newLineData, newIdx, seriesScope); + } + else { + itemEl.updateData(newLineData, newIdx, seriesScope); + } + + newLineData.setItemGraphicEl(newIdx, itemEl); + + lineDraw.group.add(itemEl); +} + +lineDrawProto.updateLayout = function () { + var lineData = this._lineData; + + // Do not support update layout in incremental mode. + if (!lineData) { + return; + } + + lineData.eachItemGraphicEl(function (el, idx) { + el.updateLayout(lineData, idx); + }, this); +}; + +lineDrawProto.incrementalPrepareUpdate = function (lineData) { + this._seriesScope = makeSeriesScope$1(lineData); + this._lineData = null; + this.group.removeAll(); +}; + +lineDrawProto.incrementalUpdate = function (taskParams, lineData) { + function updateIncrementalAndHover(el) { + if (!el.isGroup) { + el.incremental = el.useHoverLayer = true; + } + } + + for (var idx = taskParams.start; idx < taskParams.end; idx++) { + var itemLayout = lineData.getItemLayout(idx); + + if (lineNeedsDraw(itemLayout)) { + var el = new this._ctor(lineData, idx, this._seriesScope); + el.traverse(updateIncrementalAndHover); + + this.group.add(el); + lineData.setItemGraphicEl(idx, el); + } + } +}; + +function makeSeriesScope$1(lineData) { + var hostModel = lineData.hostModel; + return { + lineStyle: hostModel.getModel('lineStyle').getLineStyle(), + hoverLineStyle: hostModel.getModel('emphasis.lineStyle').getLineStyle(), + labelModel: hostModel.getModel('label'), + hoverLabelModel: hostModel.getModel('emphasis.label') + }; +} + +lineDrawProto.remove = function () { + this._clearIncremental(); + this._incremental = null; + this.group.removeAll(); +}; + +lineDrawProto._clearIncremental = function () { + var incremental = this._incremental; + if (incremental) { + incremental.clearDisplaybles(); + } +}; + +function isPointNaN(pt) { + return isNaN(pt[0]) || isNaN(pt[1]); +} + +function lineNeedsDraw(pts) { + return !isPointNaN(pts[0]) && !isPointNaN(pts[1]); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var v1 = []; +var v2 = []; +var v3 = []; +var quadraticAt$1 = quadraticAt; +var v2DistSquare = distSquare; +var mathAbs$1 = Math.abs; +function intersectCurveCircle(curvePoints, center, radius) { + var p0 = curvePoints[0]; + var p1 = curvePoints[1]; + var p2 = curvePoints[2]; + + var d = Infinity; + var t; + var radiusSquare = radius * radius; + var interval = 0.1; + + for (var _t = 0.1; _t <= 0.9; _t += 0.1) { + v1[0] = quadraticAt$1(p0[0], p1[0], p2[0], _t); + v1[1] = quadraticAt$1(p0[1], p1[1], p2[1], _t); + var diff = mathAbs$1(v2DistSquare(v1, center) - radiusSquare); + if (diff < d) { + d = diff; + t = _t; + } + } + + // Assume the segment is monotone,Find root through Bisection method + // At most 32 iteration + for (var i = 0; i < 32; i++) { + // var prev = t - interval; + var next = t + interval; + // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev); + // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev); + v2[0] = quadraticAt$1(p0[0], p1[0], p2[0], t); + v2[1] = quadraticAt$1(p0[1], p1[1], p2[1], t); + v3[0] = quadraticAt$1(p0[0], p1[0], p2[0], next); + v3[1] = quadraticAt$1(p0[1], p1[1], p2[1], next); + + var diff = v2DistSquare(v2, center) - radiusSquare; + if (mathAbs$1(diff) < 1e-2) { + break; + } + + // var prevDiff = v2DistSquare(v1, center) - radiusSquare; + var nextDiff = v2DistSquare(v3, center) - radiusSquare; + + interval /= 2; + if (diff < 0) { + if (nextDiff >= 0) { + t = t + interval; + } + else { + t = t - interval; + } + } + else { + if (nextDiff >= 0) { + t = t - interval; + } + else { + t = t + interval; + } + } + } + + return t; +} + +// Adjust edge to avoid +var adjustEdge = function (graph, scale$$1) { + var tmp0 = []; + var quadraticSubdivide$$1 = quadraticSubdivide; + var pts = [[], [], []]; + var pts2 = [[], []]; + var v = []; + scale$$1 /= 2; + + function getSymbolSize(node) { + var symbolSize = node.getVisual('symbolSize'); + if (symbolSize instanceof Array) { + symbolSize = (symbolSize[0] + symbolSize[1]) / 2; + } + return symbolSize; + } + graph.eachEdge(function (edge, idx) { + var linePoints = edge.getLayout(); + var fromSymbol = edge.getVisual('fromSymbol'); + var toSymbol = edge.getVisual('toSymbol'); + + if (!linePoints.__original) { + linePoints.__original = [ + clone$1(linePoints[0]), + clone$1(linePoints[1]) + ]; + if (linePoints[2]) { + linePoints.__original.push(clone$1(linePoints[2])); + } + } + var originalPoints = linePoints.__original; + // Quadratic curve + if (linePoints[2] != null) { + copy(pts[0], originalPoints[0]); + copy(pts[1], originalPoints[2]); + copy(pts[2], originalPoints[1]); + if (fromSymbol && fromSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node1); + + var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale$$1); + // Subdivide and get the second + quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[0][0] = tmp0[3]; + pts[1][0] = tmp0[4]; + quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[0][1] = tmp0[3]; + pts[1][1] = tmp0[4]; + } + if (toSymbol && toSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node2); + + var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale$$1); + // Subdivide and get the first + quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[1][0] = tmp0[1]; + pts[2][0] = tmp0[2]; + quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[1][1] = tmp0[1]; + pts[2][1] = tmp0[2]; + } + // Copy back to layout + copy(linePoints[0], pts[0]); + copy(linePoints[1], pts[2]); + copy(linePoints[2], pts[1]); + } + // Line + else { + copy(pts2[0], originalPoints[0]); + copy(pts2[1], originalPoints[1]); + + sub(v, pts2[1], pts2[0]); + normalize(v, v); + if (fromSymbol && fromSymbol !== 'none') { + + var symbolSize = getSymbolSize(edge.node1); + + scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale$$1); + } + if (toSymbol && toSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node2); + + scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale$$1); + } + copy(linePoints[0], pts2[0]); + copy(linePoints[1], pts2[1]); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var nodeOpacityPath = ['itemStyle', 'opacity']; +var lineOpacityPath = ['lineStyle', 'opacity']; + +function getItemOpacity(item, opacityPath) { + return item.getVisual('opacity') || item.getModel().get(opacityPath); +} + +function fadeOutItem(item, opacityPath, opacityRatio) { + var el = item.getGraphicEl(); + + var opacity = getItemOpacity(item, opacityPath); + if (opacityRatio != null) { + opacity == null && (opacity = 1); + opacity *= opacityRatio; + } + + el.downplay && el.downplay(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +function fadeInItem(item, opacityPath) { + var opacity = getItemOpacity(item, opacityPath); + var el = item.getGraphicEl(); + + el.highlight && el.highlight(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +extendChartView({ + + type: 'graph', + + init: function (ecModel, api) { + var symbolDraw = new SymbolDraw(); + var lineDraw = new LineDraw(); + var group = this.group; + + this._controller = new RoamController(api.getZr()); + this._controllerHost = {target: group}; + + group.add(symbolDraw.group); + group.add(lineDraw.group); + + this._symbolDraw = symbolDraw; + this._lineDraw = lineDraw; + + this._firstRender = true; + }, + + render: function (seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + + this._model = seriesModel; + this._nodeScaleRatio = seriesModel.get('nodeScaleRatio'); + + var symbolDraw = this._symbolDraw; + var lineDraw = this._lineDraw; + + var group = this.group; + + if (coordSys.type === 'view') { + var groupNewProp = { + position: coordSys.position, + scale: coordSys.scale + }; + if (this._firstRender) { + group.attr(groupNewProp); + } + else { + updateProps(group, groupNewProp, seriesModel); + } + } + // Fix edge contact point with node + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + + var data = seriesModel.getData(); + symbolDraw.updateData(data); + + var edgeData = seriesModel.getEdgeData(); + lineDraw.updateData(edgeData); + + this._updateNodeAndLinkScale(); + + this._updateController(seriesModel, ecModel, api); + + clearTimeout(this._layoutTimeout); + var forceLayout = seriesModel.forceLayout; + var layoutAnimation = seriesModel.get('force.layoutAnimation'); + if (forceLayout) { + this._startForceLayoutIteration(forceLayout, layoutAnimation); + } + + data.eachItemGraphicEl(function (el, idx) { + var itemModel = data.getItemModel(idx); + // Update draggable + el.off('drag').off('dragend'); + var draggable = itemModel.get('draggable'); + if (draggable) { + el.on('drag', function () { + if (forceLayout) { + forceLayout.warmUp(); + !this._layouting + && this._startForceLayoutIteration(forceLayout, layoutAnimation); + forceLayout.setFixed(idx); + // Write position back to layout + data.setItemLayout(idx, el.position); + } + }, this).on('dragend', function () { + if (forceLayout) { + forceLayout.setUnfixed(idx); + } + }, this); + } + el.setDraggable(draggable && forceLayout); + + el.off('mouseover', el.__focusNodeAdjacency); + el.off('mouseout', el.__unfocusNodeAdjacency); + + if (itemModel.get('focusNodeAdjacency')) { + el.on('mouseover', el.__focusNodeAdjacency = function () { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + dataIndex: el.dataIndex + }); + }); + el.on('mouseout', el.__unfocusNodeAdjacency = function () { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + }); + + } + + }, this); + + data.graph.eachEdge(function (edge) { + var el = edge.getGraphicEl(); + + el.off('mouseover', el.__focusNodeAdjacency); + el.off('mouseout', el.__unfocusNodeAdjacency); + + if (edge.getModel().get('focusNodeAdjacency')) { + el.on('mouseover', el.__focusNodeAdjacency = function () { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + edgeDataIndex: edge.dataIndex + }); + }); + el.on('mouseout', el.__unfocusNodeAdjacency = function () { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + }); + } + }); + + var circularRotateLabel = seriesModel.get('layout') === 'circular' + && seriesModel.get('circular.rotateLabel'); + var cx = data.getLayout('cx'); + var cy = data.getLayout('cy'); + data.eachItemGraphicEl(function (el, idx) { + var symbolPath = el.getSymbolPath(); + if (circularRotateLabel) { + var pos = data.getItemLayout(idx); + var rad = Math.atan2(pos[1] - cy, pos[0] - cx); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + var isLeft = pos[0] < cx; + if (isLeft) { + rad = rad - Math.PI; + } + var textPosition = isLeft ? 'left' : 'right'; + symbolPath.setStyle({ + textRotation: -rad, + textPosition: textPosition, + textOrigin: 'center' + }); + symbolPath.hoverStyle && (symbolPath.hoverStyle.textPosition = textPosition); + } + else { + symbolPath.setStyle({ + textRotation: 0 + }); + } + }); + + this._firstRender = false; + }, + + dispose: function () { + this._controller && this._controller.dispose(); + this._controllerHost = {}; + }, + + focusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var data = this._model.getData(); + var graph = data.graph; + var dataIndex = payload.dataIndex; + var edgeDataIndex = payload.edgeDataIndex; + + var node = graph.getNodeByIndex(dataIndex); + var edge = graph.getEdgeByIndex(edgeDataIndex); + + if (!node && !edge) { + return; + } + + graph.eachNode(function (node) { + fadeOutItem(node, nodeOpacityPath, 0.1); + }); + graph.eachEdge(function (edge) { + fadeOutItem(edge, lineOpacityPath, 0.1); + }); + + if (node) { + fadeInItem(node, nodeOpacityPath); + each$1(node.edges, function (adjacentEdge) { + if (adjacentEdge.dataIndex < 0) { + return; + } + fadeInItem(adjacentEdge, lineOpacityPath); + fadeInItem(adjacentEdge.node1, nodeOpacityPath); + fadeInItem(adjacentEdge.node2, nodeOpacityPath); + }); + } + if (edge) { + fadeInItem(edge, lineOpacityPath); + fadeInItem(edge.node1, nodeOpacityPath); + fadeInItem(edge.node2, nodeOpacityPath); + } + }, + + unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var graph = this._model.getData().graph; + + graph.eachNode(function (node) { + fadeOutItem(node, nodeOpacityPath); + }); + graph.eachEdge(function (edge) { + fadeOutItem(edge, lineOpacityPath); + }); + }, + + _startForceLayoutIteration: function (forceLayout, layoutAnimation) { + var self = this; + (function step() { + forceLayout.step(function (stopped) { + self.updateLayout(self._model); + (self._layouting = !stopped) && ( + layoutAnimation + ? (self._layoutTimeout = setTimeout(step, 16)) + : step() + ); + }); + })(); + }, + + _updateController: function (seriesModel, ecModel, api) { + var controller = this._controller; + var controllerHost = this._controllerHost; + var group = this.group; + + controller.setPointerChecker(function (e, x, y) { + var rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) + && !onIrrelevantElement(e, api, seriesModel); + }); + + if (seriesModel.coordinateSystem.type !== 'view') { + controller.disable(); + return; + } + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + + controller + .off('pan') + .off('zoom') + .on('pan', function (e) { + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + dx: e.dx, + dy: e.dy + }); + }) + .on('zoom', function (e) { + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + this._updateNodeAndLinkScale(); + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + this._lineDraw.updateLayout(); + }, this); + }, + + _updateNodeAndLinkScale: function () { + var seriesModel = this._model; + var data = seriesModel.getData(); + + var nodeScale = this._getNodeGlobalScale(seriesModel); + var invScale = [nodeScale, nodeScale]; + + data.eachItemGraphicEl(function (el, idx) { + el.attr('scale', invScale); + }); + }, + + _getNodeGlobalScale: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type !== 'view') { + return 1; + } + + var nodeScaleRatio = this._nodeScaleRatio; + + var groupScale = coordSys.scale; + var groupZoom = (groupScale && groupScale[0]) || 1; + // Scale node when zoom changes + var roamZoom = coordSys.getZoom(); + var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1; + + return nodeScale / groupZoom; + }, + + updateLayout: function (seriesModel) { + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + + this._symbolDraw.updateLayout(); + this._lineDraw.updateLayout(); + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(); + this._lineDraw && this._lineDraw.remove(); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @payload + * @property {number} [seriesIndex] + * @property {string} [seriesId] + * @property {string} [seriesName] + * @property {number} [dataIndex] + */ +registerAction({ + type: 'focusNodeAdjacency', + event: 'focusNodeAdjacency', + update: 'series:focusNodeAdjacency' +}, function () {}); + +/** + * @payload + * @property {number} [seriesIndex] + * @property {string} [seriesId] + * @property {string} [seriesName] + */ +registerAction({ + type: 'unfocusNodeAdjacency', + event: 'unfocusNodeAdjacency', + update: 'series:unfocusNodeAdjacency' +}, function () {}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var actionInfo = { + type: 'graphRoam', + event: 'graphRoam', + update: 'none' +}; + +/** + * @payload + * @property {string} name Series name + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ +registerAction(actionInfo, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', query: payload}, function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + var res = updateCenterAndZoom(coordSys, payload); + + seriesModel.setCenter + && seriesModel.setCenter(res.center); + + seriesModel.setZoom + && seriesModel.setZoom(res.zoom); + }); +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var categoryFilter = function (ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (!legendModels || !legendModels.length) { + return; + } + ecModel.eachSeriesByType('graph', function (graphSeries) { + var categoriesData = graphSeries.getCategoriesData(); + var graph = graphSeries.getGraph(); + var data = graph.data; + + var categoryNames = categoriesData.mapArray(categoriesData.getName); + + data.filterSelf(function (idx) { + var model = data.getItemModel(idx); + var category = model.getShallow('category'); + if (category != null) { + if (typeof category === 'number') { + category = categoryNames[category]; + } + // If in any legend component the status is not selected. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(category)) { + return false; + } + } + } + return true; + }); + }, this); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var categoryVisual = function (ecModel) { + + var paletteScope = {}; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var categoriesData = seriesModel.getCategoriesData(); + var data = seriesModel.getData(); + + var categoryNameIdxMap = {}; + + categoriesData.each(function (idx) { + var name = categoriesData.getName(idx); + // Add prefix to avoid conflict with Object.prototype. + categoryNameIdxMap['ec-' + name] = idx; + + var itemModel = categoriesData.getItemModel(idx); + var color = itemModel.get('itemStyle.color') + || seriesModel.getColorFromPalette(name, paletteScope); + categoriesData.setItemVisual(idx, 'color', color); + }); + + // Assign category color to visual + if (categoriesData.count()) { + data.each(function (idx) { + var model = data.getItemModel(idx); + var category = model.getShallow('category'); + if (category != null) { + if (typeof category === 'string') { + category = categoryNameIdxMap['ec-' + category]; + } + if (!data.getItemVisual(idx, 'color', true)) { + data.setItemVisual( + idx, 'color', + categoriesData.getItemVisual(category, 'color') + ); + } + } + }); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +function normalize$1(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + return a; +} + +var edgeVisual = function (ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var graph = seriesModel.getGraph(); + var edgeData = seriesModel.getEdgeData(); + var symbolType = normalize$1(seriesModel.get('edgeSymbol')); + var symbolSize = normalize$1(seriesModel.get('edgeSymbolSize')); + + var colorQuery = 'lineStyle.color'.split('.'); + var opacityQuery = 'lineStyle.opacity'.split('.'); + + edgeData.setVisual('fromSymbol', symbolType && symbolType[0]); + edgeData.setVisual('toSymbol', symbolType && symbolType[1]); + edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + edgeData.setVisual('color', seriesModel.get(colorQuery)); + edgeData.setVisual('opacity', seriesModel.get(opacityQuery)); + + edgeData.each(function (idx) { + var itemModel = edgeData.getItemModel(idx); + var edge = graph.getEdgeByIndex(idx); + var symbolType = normalize$1(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$1(itemModel.getShallow('symbolSize', true)); + // Edge visual must after node visual + var color = itemModel.get(colorQuery); + var opacity = itemModel.get(opacityQuery); + switch (color) { + case 'source': + color = edge.node1.getVisual('color'); + break; + case 'target': + color = edge.node2.getVisual('color'); + break; + } + + symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]); + symbolType[1] && edge.setVisual('toSymbol', symbolType[1]); + symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]); + symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]); + + edge.setVisual('color', color); + edge.setVisual('opacity', opacity); + }); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function simpleLayout$1(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + var graph = seriesModel.getGraph(); + + graph.eachNode(function (node) { + var model = node.getModel(); + node.setLayout([+model.get('x'), +model.get('y')]); + }); + + simpleLayoutEdge(graph); +} + +function simpleLayoutEdge(graph) { + graph.eachEdge(function (edge) { + var curveness = edge.getModel().get('lineStyle.curveness') || 0; + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var points = [p1, p2]; + if (+curveness) { + points.push([ + (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, + (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness + ]); + } + edge.setLayout(points); + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var simpleLayout = function (ecModel, api) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var layout = seriesModel.get('layout'); + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + var data = seriesModel.getData(); + + var dimensions = []; + each$1(coordSys.dimensions, function (coordDim) { + dimensions = dimensions.concat(data.mapDimension(coordDim, true)); + }); + + for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) { + var value = []; + var hasValue = false; + for (var i = 0; i < dimensions.length; i++) { + var val = data.get(dimensions[i], dataIndex); + if (!isNaN(val)) { + hasValue = true; + } + value.push(val); + } + if (hasValue) { + data.setItemLayout(dataIndex, coordSys.dataToPoint(value)); + } + else { + // Also {Array.}, not undefined to avoid if...else... statement + data.setItemLayout(dataIndex, [NaN, NaN]); + } + } + + simpleLayoutEdge(data.graph); + } + else if (!layout || layout === 'none') { + simpleLayout$1(seriesModel); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function circularLayout$1(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + + var rect = coordSys.getBoundingRect(); + + var nodeData = seriesModel.getData(); + var graph = nodeData.graph; + + var angle = 0; + var sum = nodeData.getSum('value'); + var unitAngle = Math.PI * 2 / (sum || nodeData.count()); + + var cx = rect.width / 2 + rect.x; + var cy = rect.height / 2 + rect.y; + + var r = Math.min(rect.width, rect.height) / 2; + + graph.eachNode(function (node) { + var value = node.getValue('value'); + + angle += unitAngle * (sum ? value : 1) / 2; + + node.setLayout([ + r * Math.cos(angle) + cx, + r * Math.sin(angle) + cy + ]); + + angle += unitAngle * (sum ? value : 1) / 2; + }); + + nodeData.setLayout({ + cx: cx, + cy: cy + }); + + graph.eachEdge(function (edge) { + var curveness = edge.getModel().get('lineStyle.curveness') || 0; + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var cp1; + var x12 = (p1[0] + p2[0]) / 2; + var y12 = (p1[1] + p2[1]) / 2; + if (+curveness) { + curveness *= 3; + cp1 = [ + cx * curveness + x12 * (1 - curveness), + cy * curveness + y12 * (1 - curveness) + ]; + } + edge.setLayout([p1, p2, cp1]); + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var circularLayout = function (ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + if (seriesModel.get('layout') === 'circular') { + circularLayout$1(seriesModel); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* The layout implementation references to d3.js. The use of +* the source code of this file is also subject to the terms +* and consitions of its license (BSD-3Clause, see +* ). +*/ + +var scaleAndAdd$2 = scaleAndAdd; + +// function adjacentNode(n, e) { +// return e.n1 === n ? e.n2 : e.n1; +// } + +function forceLayout$1(nodes, edges, opts) { + var rect = opts.rect; + var width = rect.width; + var height = rect.height; + var center = [rect.x + width / 2, rect.y + height / 2]; + // var scale = opts.scale || 1; + var gravity = opts.gravity == null ? 0.1 : opts.gravity; + + // for (var i = 0; i < edges.length; i++) { + // var e = edges[i]; + // var n1 = e.n1; + // var n2 = e.n2; + // n1.edges = n1.edges || []; + // n2.edges = n2.edges || []; + // n1.edges.push(e); + // n2.edges.push(e); + // } + // Init position + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + if (!n.p) { + // Use the position from first adjecent node with defined position + // Or use a random position + // From d3 + // if (n.edges) { + // var j = -1; + // while (++j < n.edges.length) { + // var e = n.edges[j]; + // var other = adjacentNode(n, e); + // if (other.p) { + // n.p = vec2.clone(other.p); + // break; + // } + // } + // } + // if (!n.p) { + n.p = create( + width * (Math.random() - 0.5) + center[0], + height * (Math.random() - 0.5) + center[1] + ); + // } + } + n.pp = clone$1(n.p); + n.edges = null; + } + + // Formula in 'Graph Drawing by Force-directed Placement' + // var k = scale * Math.sqrt(width * height / nodes.length); + // var k2 = k * k; + + var friction = 0.6; + + return { + warmUp: function () { + friction = 0.5; + }, + + setFixed: function (idx) { + nodes[idx].fixed = true; + }, + + setUnfixed: function (idx) { + nodes[idx].fixed = false; + }, + + step: function (cb) { + var v12 = []; + var nLen = nodes.length; + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + var n1 = e.n1; + var n2 = e.n2; + + sub(v12, n2.p, n1.p); + var d = len(v12) - e.d; + var w = n2.w / (n1.w + n2.w); + + if (isNaN(w)) { + w = 0; + } + + normalize(v12, v12); + + !n1.fixed && scaleAndAdd$2(n1.p, n1.p, v12, w * d * friction); + !n2.fixed && scaleAndAdd$2(n2.p, n2.p, v12, -(1 - w) * d * friction); + } + // Gravity + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + if (!n.fixed) { + sub(v12, center, n.p); + // var d = vec2.len(v12); + // vec2.scale(v12, v12, 1 / d); + // var gravityFactor = gravity; + scaleAndAdd$2(n.p, n.p, v12, gravity * friction); + } + } + + // Repulsive + // PENDING + for (var i = 0; i < nLen; i++) { + var n1 = nodes[i]; + for (var j = i + 1; j < nLen; j++) { + var n2 = nodes[j]; + sub(v12, n2.p, n1.p); + var d = len(v12); + if (d === 0) { + // Random repulse + set(v12, Math.random() - 0.5, Math.random() - 0.5); + d = 1; + } + var repFact = (n1.rep + n2.rep) / d / d; + !n1.fixed && scaleAndAdd$2(n1.pp, n1.pp, v12, repFact); + !n2.fixed && scaleAndAdd$2(n2.pp, n2.pp, v12, -repFact); + } + } + var v = []; + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + if (!n.fixed) { + sub(v, n.p, n.pp); + scaleAndAdd$2(n.p, n.p, v, friction); + copy(n.pp, n.p); + } + } + + friction = friction * 0.992; + + cb && cb(nodes, edges, friction < 0.01); + } + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var forceLayout = function (ecModel) { + ecModel.eachSeriesByType('graph', function (graphSeries) { + var coordSys = graphSeries.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + if (graphSeries.get('layout') === 'force') { + var preservedPoints = graphSeries.preservedPoints || {}; + var graph = graphSeries.getGraph(); + var nodeData = graph.data; + var edgeData = graph.edgeData; + var forceModel = graphSeries.getModel('force'); + var initLayout = forceModel.get('initLayout'); + if (graphSeries.preservedPoints) { + nodeData.each(function (idx) { + var id = nodeData.getId(idx); + nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]); + }); + } + else if (!initLayout || initLayout === 'none') { + simpleLayout$1(graphSeries); + } + else if (initLayout === 'circular') { + circularLayout$1(graphSeries); + } + + var nodeDataExtent = nodeData.getDataExtent('value'); + var edgeDataExtent = edgeData.getDataExtent('value'); + // var edgeDataExtent = edgeData.getDataExtent('value'); + var repulsion = forceModel.get('repulsion'); + var edgeLength = forceModel.get('edgeLength'); + if (!isArray(repulsion)) { + repulsion = [repulsion, repulsion]; + } + if (!isArray(edgeLength)) { + edgeLength = [edgeLength, edgeLength]; + } + // Larger value has smaller length + edgeLength = [edgeLength[1], edgeLength[0]]; + + var nodes = nodeData.mapArray('value', function (value, idx) { + var point = nodeData.getItemLayout(idx); + var rep = linearMap(value, nodeDataExtent, repulsion); + if (isNaN(rep)) { + rep = (repulsion[0] + repulsion[1]) / 2; + } + return { + w: rep, + rep: rep, + fixed: nodeData.getItemModel(idx).get('fixed'), + p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point + }; + }); + var edges = edgeData.mapArray('value', function (value, idx) { + var edge = graph.getEdgeByIndex(idx); + var d = linearMap(value, edgeDataExtent, edgeLength); + if (isNaN(d)) { + d = (edgeLength[0] + edgeLength[1]) / 2; + } + return { + n1: nodes[edge.node1.dataIndex], + n2: nodes[edge.node2.dataIndex], + d: d, + curveness: edge.getModel().get('lineStyle.curveness') || 0 + }; + }); + + var coordSys = graphSeries.coordinateSystem; + var rect = coordSys.getBoundingRect(); + var forceInstance = forceLayout$1(nodes, edges, { + rect: rect, + gravity: forceModel.get('gravity') + }); + var oldStep = forceInstance.step; + forceInstance.step = function (cb) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].fixed) { + // Write back to layout instance + copy(nodes[i].p, graph.getNodeByIndex(i).getLayout()); + } + } + oldStep(function (nodes, edges, stopped) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (!nodes[i].fixed) { + graph.getNodeByIndex(i).setLayout(nodes[i].p); + } + preservedPoints[nodeData.getId(i)] = nodes[i].p; + } + for (var i = 0, l = edges.length; i < l; i++) { + var e = edges[i]; + var edge = graph.getEdgeByIndex(i); + var p1 = e.n1.p; + var p2 = e.n2.p; + var points = edge.getLayout(); + points = points ? points.slice() : []; + points[0] = points[0] || []; + points[1] = points[1] || []; + copy(points[0], p1); + copy(points[1], p2); + if (+e.curveness) { + points[2] = [ + (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, + (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness + ]; + } + edge.setLayout(points); + } + // Update layout + + cb && cb(stopped); + }); + }; + graphSeries.forceLayout = forceInstance; + graphSeries.preservedPoints = preservedPoints; + + // Step to get the layout + forceInstance.step(); + } + else { + // Remove prev injected forceLayout instance + graphSeries.forceLayout = null; + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME Where to create the simple view coordinate system +function getViewRect$1(seriesModel, api, aspect) { + var option = seriesModel.getBoxLayoutParams(); + option.aspect = aspect; + return getLayoutRect(option, { + width: api.getWidth(), + height: api.getHeight() + }); +} + +var createView = function (ecModel, api) { + var viewList = []; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var coordSysType = seriesModel.get('coordinateSystem'); + if (!coordSysType || coordSysType === 'view') { + + var data = seriesModel.getData(); + var positions = data.mapArray(function (idx) { + var itemModel = data.getItemModel(idx); + return [+itemModel.get('x'), +itemModel.get('y')]; + }); + + var min = []; + var max = []; + + fromPoints(positions, min, max); + + // If width or height is 0 + if (max[0] - min[0] === 0) { + max[0] += 1; + min[0] -= 1; + } + if (max[1] - min[1] === 0) { + max[1] += 1; + min[1] -= 1; + } + var aspect = (max[0] - min[0]) / (max[1] - min[1]); + // FIXME If get view rect after data processed? + var viewRect = getViewRect$1(seriesModel, api, aspect); + // Position may be NaN, use view rect instead + if (isNaN(aspect)) { + min = [viewRect.x, viewRect.y]; + max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height]; + } + + var bbWidth = max[0] - min[0]; + var bbHeight = max[1] - min[1]; + + var viewWidth = viewRect.width; + var viewHeight = viewRect.height; + + var viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + + viewCoordSys.setBoundingRect( + min[0], min[1], bbWidth, bbHeight + ); + viewCoordSys.setViewRect( + viewRect.x, viewRect.y, viewWidth, viewHeight + ); + + // Update roam info + viewCoordSys.setCenter(seriesModel.get('center')); + viewCoordSys.setZoom(seriesModel.get('zoom')); + + viewList.push(viewCoordSys); + } + }); + + return viewList; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerProcessor(categoryFilter); + +registerVisual(visualSymbol('graph', 'circle', null)); +registerVisual(categoryVisual); +registerVisual(edgeVisual); + +registerLayout(simpleLayout); +registerLayout(circularLayout); +registerLayout(forceLayout); + +// Graph view coordinate system +registerCoordinateSystem('graphView', { + create: createView +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var GaugeSeries = SeriesModel.extend({ + + type: 'series.gauge', + + getInitialData: function (option, ecModel) { + var dataOpt = option.data || []; + if (!isArray(dataOpt)) { + dataOpt = [dataOpt]; + } + option.data = dataOpt; + return createListSimply(this, ['value']); + }, + + defaultOption: { + zlevel: 0, + z: 2, + // 默认全局居中 + center: ['50%', '50%'], + legendHoverLink: true, + radius: '75%', + startAngle: 225, + endAngle: -45, + clockwise: true, + // 最小值 + min: 0, + // 最大值 + max: 100, + // 分割段数,默认为10 + splitNumber: 10, + // 坐标轴线 + axisLine: { + // 默认显示,属性show控制显示与否 + show: true, + lineStyle: { // 属性lineStyle控制线条样式 + color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']], + width: 30 + } + }, + // 分隔线 + splitLine: { + // 默认显示,属性show控制显示与否 + show: true, + // 属性length控制线长 + length: 30, + // 属性lineStyle(详见lineStyle)控制线条样式 + lineStyle: { + color: '#eee', + width: 2, + type: 'solid' + } + }, + // 坐标轴小标记 + axisTick: { + // 属性show控制显示与否,默认不显示 + show: true, + // 每份split细分多少段 + splitNumber: 5, + // 属性length控制线长 + length: 8, + // 属性lineStyle控制线条样式 + lineStyle: { + color: '#eee', + width: 1, + type: 'solid' + } + }, + axisLabel: { + show: true, + distance: 5, + // formatter: null, + color: 'auto' + }, + pointer: { + show: true, + length: '80%', + width: 8 + }, + itemStyle: { + color: 'auto' + }, + title: { + show: true, + // x, y,单位px + offsetCenter: [0, '-40%'], + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#333', + fontSize: 15 + }, + detail: { + show: true, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + borderColor: '#ccc', + width: 100, + height: null, // self-adaption + padding: [5, 10], + // x, y,单位px + offsetCenter: [0, '40%'], + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: 'auto', + fontSize: 30 + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PointerPath = Path.extend({ + + type: 'echartsGaugePointer', + + shape: { + angle: 0, + + width: 10, + + r: 10, + + x: 0, + + y: 0 + }, + + buildPath: function (ctx, shape) { + var mathCos = Math.cos; + var mathSin = Math.sin; + + var r = shape.r; + var width = shape.width; + var angle = shape.angle; + var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2); + var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2); + + angle = shape.angle - Math.PI / 2; + ctx.moveTo(x, y); + ctx.lineTo( + shape.x + mathCos(angle) * width, + shape.y + mathSin(angle) * width + ); + ctx.lineTo( + shape.x + mathCos(shape.angle) * r, + shape.y + mathSin(shape.angle) * r + ); + ctx.lineTo( + shape.x - mathCos(angle) * width, + shape.y - mathSin(angle) * width + ); + ctx.lineTo(x, y); + return; + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function parsePosition(seriesModel, api) { + var center = seriesModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], api.getWidth()); + var cy = parsePercent$1(center[1], api.getHeight()); + var r = parsePercent$1(seriesModel.get('radius'), size / 2); + + return { + cx: cx, + cy: cy, + r: r + }; +} + +function formatLabel(label, labelFormatter) { + if (labelFormatter) { + if (typeof labelFormatter === 'string') { + label = labelFormatter.replace('{value}', label != null ? label : ''); + } + else if (typeof labelFormatter === 'function') { + label = labelFormatter(label); + } + } + + return label; +} + +var PI2$5 = Math.PI * 2; + +var GaugeView = Chart.extend({ + + type: 'gauge', + + render: function (seriesModel, ecModel, api) { + + this.group.removeAll(); + + var colorList = seriesModel.get('axisLine.lineStyle.color'); + var posInfo = parsePosition(seriesModel, api); + + this._renderMain( + seriesModel, ecModel, api, colorList, posInfo + ); + }, + + dispose: function () {}, + + _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) { + var group = this.group; + + var axisLineModel = seriesModel.getModel('axisLine'); + var lineStyleModel = axisLineModel.getModel('lineStyle'); + + var clockwise = seriesModel.get('clockwise'); + var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI; + var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI; + + var angleRangeSpan = (endAngle - startAngle) % PI2$5; + + var prevEndAngle = startAngle; + var axisLineWidth = lineStyleModel.get('width'); + + for (var i = 0; i < colorList.length; i++) { + // Clamp + var percent = Math.min(Math.max(colorList[i][0], 0), 1); + var endAngle = startAngle + angleRangeSpan * percent; + var sector = new Sector({ + shape: { + startAngle: prevEndAngle, + endAngle: endAngle, + cx: posInfo.cx, + cy: posInfo.cy, + clockwise: clockwise, + r0: posInfo.r - axisLineWidth, + r: posInfo.r + }, + silent: true + }); + + sector.setStyle({ + fill: colorList[i][1] + }); + + sector.setStyle(lineStyleModel.getLineStyle( + // Because we use sector to simulate arc + // so the properties for stroking are useless + ['color', 'borderWidth', 'borderColor'] + )); + + group.add(sector); + + prevEndAngle = endAngle; + } + + var getColor = function (percent) { + // Less than 0 + if (percent <= 0) { + return colorList[0][1]; + } + for (var i = 0; i < colorList.length; i++) { + if (colorList[i][0] >= percent + && (i === 0 ? 0 : colorList[i - 1][0]) < percent + ) { + return colorList[i][1]; + } + } + // More than 1 + return colorList[i - 1][1]; + }; + + if (!clockwise) { + var tmp = startAngle; + startAngle = endAngle; + endAngle = tmp; + } + + this._renderTicks( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ); + + this._renderPointer( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ); + + this._renderTitle( + seriesModel, ecModel, api, getColor, posInfo + ); + this._renderDetail( + seriesModel, ecModel, api, getColor, posInfo + ); + }, + + _renderTicks: function ( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ) { + var group = this.group; + var cx = posInfo.cx; + var cy = posInfo.cy; + var r = posInfo.r; + + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + + var splitLineModel = seriesModel.getModel('splitLine'); + var tickModel = seriesModel.getModel('axisTick'); + var labelModel = seriesModel.getModel('axisLabel'); + + var splitNumber = seriesModel.get('splitNumber'); + var subSplitNumber = tickModel.get('splitNumber'); + + var splitLineLen = parsePercent$1( + splitLineModel.get('length'), r + ); + var tickLen = parsePercent$1( + tickModel.get('length'), r + ); + + var angle = startAngle; + var step = (endAngle - startAngle) / splitNumber; + var subStep = step / subSplitNumber; + + var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle(); + var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle(); + + for (var i = 0; i <= splitNumber; i++) { + var unitX = Math.cos(angle); + var unitY = Math.sin(angle); + // Split line + if (splitLineModel.get('show')) { + var splitLine = new Line({ + shape: { + x1: unitX * r + cx, + y1: unitY * r + cy, + x2: unitX * (r - splitLineLen) + cx, + y2: unitY * (r - splitLineLen) + cy + }, + style: splitLineStyle, + silent: true + }); + if (splitLineStyle.stroke === 'auto') { + splitLine.setStyle({ + stroke: getColor(i / splitNumber) + }); + } + + group.add(splitLine); + } + + // Label + if (labelModel.get('show')) { + var label = formatLabel( + round$1(i / splitNumber * (maxVal - minVal) + minVal), + labelModel.get('formatter') + ); + var distance = labelModel.get('distance'); + var autoColor = getColor(i / splitNumber); + + group.add(new Text({ + style: setTextStyle({}, labelModel, { + text: label, + x: unitX * (r - splitLineLen - distance) + cx, + y: unitY * (r - splitLineLen - distance) + cy, + textVerticalAlign: unitY < -0.4 ? 'top' : (unitY > 0.4 ? 'bottom' : 'middle'), + textAlign: unitX < -0.4 ? 'left' : (unitX > 0.4 ? 'right' : 'center') + }, {autoColor: autoColor}), + silent: true + })); + } + + // Axis tick + if (tickModel.get('show') && i !== splitNumber) { + for (var j = 0; j <= subSplitNumber; j++) { + var unitX = Math.cos(angle); + var unitY = Math.sin(angle); + var tickLine = new Line({ + shape: { + x1: unitX * r + cx, + y1: unitY * r + cy, + x2: unitX * (r - tickLen) + cx, + y2: unitY * (r - tickLen) + cy + }, + silent: true, + style: tickLineStyle + }); + + if (tickLineStyle.stroke === 'auto') { + tickLine.setStyle({ + stroke: getColor((i + j / subSplitNumber) / splitNumber) + }); + } + + group.add(tickLine); + angle += subStep; + } + angle -= subStep; + } + else { + angle += step; + } + } + }, + + _renderPointer: function ( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ) { + + var group = this.group; + var oldData = this._data; + + if (!seriesModel.get('pointer.show')) { + // Remove old element + oldData && oldData.eachItemGraphicEl(function (el) { + group.remove(el); + }); + return; + } + + var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')]; + var angleExtent = [startAngle, endAngle]; + + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + + data.diff(oldData) + .add(function (idx) { + var pointer = new PointerPath({ + shape: { + angle: startAngle + } + }); + + initProps(pointer, { + shape: { + angle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true) + } + }, seriesModel); + + group.add(pointer); + data.setItemGraphicEl(idx, pointer); + }) + .update(function (newIdx, oldIdx) { + var pointer = oldData.getItemGraphicEl(oldIdx); + + updateProps(pointer, { + shape: { + angle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true) + } + }, seriesModel); + + group.add(pointer); + data.setItemGraphicEl(newIdx, pointer); + }) + .remove(function (idx) { + var pointer = oldData.getItemGraphicEl(idx); + group.remove(pointer); + }) + .execute(); + + data.eachItemGraphicEl(function (pointer, idx) { + var itemModel = data.getItemModel(idx); + var pointerModel = itemModel.getModel('pointer'); + + pointer.setShape({ + x: posInfo.cx, + y: posInfo.cy, + width: parsePercent$1( + pointerModel.get('width'), posInfo.r + ), + r: parsePercent$1(pointerModel.get('length'), posInfo.r) + }); + + pointer.useStyle(itemModel.getModel('itemStyle').getItemStyle()); + + if (pointer.style.fill === 'auto') { + pointer.setStyle('fill', getColor( + linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true) + )); + } + + setHoverStyle( + pointer, itemModel.getModel('emphasis.itemStyle').getItemStyle() + ); + }); + + this._data = data; + }, + + _renderTitle: function ( + seriesModel, ecModel, api, getColor, posInfo + ) { + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var titleModel = seriesModel.getModel('title'); + if (titleModel.get('show')) { + var offsetCenter = titleModel.get('offsetCenter'); + var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r); + var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r); + + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + var value = seriesModel.getData().get(valueDim, 0); + var autoColor = getColor( + linearMap(value, [minVal, maxVal], [0, 1], true) + ); + + this.group.add(new Text({ + silent: true, + style: setTextStyle({}, titleModel, { + x: x, + y: y, + // FIXME First data name ? + text: data.getName(0), + textAlign: 'center', + textVerticalAlign: 'middle' + }, {autoColor: autoColor, forceRich: true}) + })); + } + }, + + _renderDetail: function ( + seriesModel, ecModel, api, getColor, posInfo + ) { + var detailModel = seriesModel.getModel('detail'); + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + if (detailModel.get('show')) { + var offsetCenter = detailModel.get('offsetCenter'); + var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r); + var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r); + var width = parsePercent$1(detailModel.get('width'), posInfo.r); + var height = parsePercent$1(detailModel.get('height'), posInfo.r); + var data = seriesModel.getData(); + var value = data.get(data.mapDimension('value'), 0); + var autoColor = getColor( + linearMap(value, [minVal, maxVal], [0, 1], true) + ); + + this.group.add(new Text({ + silent: true, + style: setTextStyle({}, detailModel, { + x: x, + y: y, + text: formatLabel( + // FIXME First data name ? + value, detailModel.get('formatter') + ), + textWidth: isNaN(width) ? null : width, + textHeight: isNaN(height) ? null : height, + textAlign: 'center', + textVerticalAlign: 'middle' + }, {autoColor: autoColor, forceRich: true}) + })); + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var FunnelSeries = extendSeriesModel({ + + type: 'series.funnel', + + init: function (option) { + FunnelSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + // Extend labelLine emphasis + this._defaultLabelLine(option); + }, + + getInitialData: function (option, ecModel) { + return createListSimply(this, ['value']); + }, + + _defaultLabelLine: function (option) { + // Extend labelLine emphasis + defaultEmphasis(option, 'labelLine', ['show']); + + var labelLineNormalOpt = option.labelLine; + var labelLineEmphasisOpt = option.emphasis.labelLine; + // Not show label line if `label.normal.show = false` + labelLineNormalOpt.show = labelLineNormalOpt.show + && option.label.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show + && option.emphasis.label.show; + }, + + // Overwrite + getDataParams: function (dataIndex) { + var data = this.getData(); + var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex); + var valueDim = data.mapDimension('value'); + var sum = data.getSum(valueDim); + // Percent is 0 if sum is 0 + params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2); + + params.$vars.push('percent'); + return params; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + legendHoverLink: true, + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + + // 默认取数据最小最大值 + // min: 0, + // max: 100, + minSize: '0%', + maxSize: '100%', + sort: 'descending', // 'ascending', 'descending' + gap: 0, + funnelAlign: 'center', + label: { + show: true, + position: 'outer' + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + }, + labelLine: { + show: true, + length: 20, + lineStyle: { + // color: 各异, + width: 1, + type: 'solid' + } + }, + itemStyle: { + // color: 各异, + borderColor: '#fff', + borderWidth: 1 + }, + emphasis: { + label: { + show: true + } + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Piece of pie including Sector, Label, LabelLine + * @constructor + * @extends {module:zrender/graphic/Group} + */ +function FunnelPiece(data, idx) { + + Group.call(this); + + var polygon = new Polygon(); + var labelLine = new Polyline(); + var text = new Text(); + this.add(polygon); + this.add(labelLine); + this.add(text); + + this.updateData(data, idx, true); + + // Hover to change label and labelLine + function onEmphasis() { + labelLine.ignore = labelLine.hoverIgnore; + text.ignore = text.hoverIgnore; + } + function onNormal() { + labelLine.ignore = labelLine.normalIgnore; + text.ignore = text.normalIgnore; + } + this.on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('mouseover', onEmphasis) + .on('mouseout', onNormal); +} + +var funnelPieceProto = FunnelPiece.prototype; + +var opacityAccessPath = ['itemStyle', 'opacity']; +funnelPieceProto.updateData = function (data, idx, firstCreate) { + + var polygon = this.childAt(0); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var opacity = data.getItemModel(idx).get(opacityAccessPath); + opacity = opacity == null ? 1 : opacity; + + // Reset style + polygon.useStyle({}); + + if (firstCreate) { + polygon.setShape({ + points: layout.points + }); + polygon.setStyle({opacity: 0}); + initProps(polygon, { + style: { + opacity: opacity + } + }, seriesModel, idx); + } + else { + updateProps(polygon, { + style: { + opacity: opacity + }, + shape: { + points: layout.points + } + }, seriesModel, idx); + } + + // Update common style + var itemStyleModel = itemModel.getModel('itemStyle'); + var visualColor = data.getItemVisual(idx, 'color'); + + polygon.setStyle( + defaults( + { + lineJoin: 'round', + fill: visualColor + }, + itemStyleModel.getItemStyle(['opacity']) + ) + ); + polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle(); + + this._updateLabel(data, idx); + + setHoverStyle(this); +}; + +funnelPieceProto._updateLabel = function (data, idx) { + + var labelLine = this.childAt(1); + var labelText = this.childAt(2); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var labelLayout = layout.label; + var visualColor = data.getItemVisual(idx, 'color'); + + updateProps(labelLine, { + shape: { + points: labelLayout.linePoints || labelLayout.linePoints + } + }, seriesModel, idx); + + updateProps(labelText, { + style: { + x: labelLayout.x, + y: labelLayout.y + } + }, seriesModel, idx); + labelText.attr({ + rotation: labelLayout.rotation, + origin: [labelLayout.x, labelLayout.y], + z2: 10 + }); + + var labelModel = itemModel.getModel('label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + var labelLineModel = itemModel.getModel('labelLine'); + var labelLineHoverModel = itemModel.getModel('emphasis.labelLine'); + var visualColor = data.getItemVisual(idx, 'color'); + + setLabelStyle( + labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + defaultText: data.getName(idx), + autoColor: visualColor, + useInsideStyle: !!labelLayout.inside + }, + { + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.verticalAlign + } + ); + + labelText.ignore = labelText.normalIgnore = !labelModel.get('show'); + labelText.hoverIgnore = !labelHoverModel.get('show'); + + labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show'); + labelLine.hoverIgnore = !labelLineHoverModel.get('show'); + + // Default use item visual color + labelLine.setStyle({ + stroke: visualColor + }); + labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle()); + + labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle(); +}; + +inherits(FunnelPiece, Group); + + +var FunnelView = Chart.extend({ + + type: 'funnel', + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var oldData = this._data; + + var group = this.group; + + data.diff(oldData) + .add(function (idx) { + var funnelPiece = new FunnelPiece(data, idx); + + data.setItemGraphicEl(idx, funnelPiece); + + group.add(funnelPiece); + }) + .update(function (newIdx, oldIdx) { + var piePiece = oldData.getItemGraphicEl(oldIdx); + + piePiece.updateData(data, newIdx); + + group.add(piePiece); + data.setItemGraphicEl(newIdx, piePiece); + }) + .remove(function (idx) { + var piePiece = oldData.getItemGraphicEl(idx); + group.remove(piePiece); + }) + .execute(); + + this._data = data; + }, + + remove: function () { + this.group.removeAll(); + this._data = null; + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function getViewRect$2(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +function getSortedIndices(data, sort) { + var valueDim = data.mapDimension('value'); + var valueArr = data.mapArray(valueDim, function (val) { + return val; + }); + var indices = []; + var isAscending = sort === 'ascending'; + for (var i = 0, len = data.count(); i < len; i++) { + indices[i] = i; + } + + // Add custom sortable function & none sortable opetion by "options.sort" + if (typeof sort === 'function') { + indices.sort(sort); + } + else if (sort !== 'none') { + indices.sort(function (a, b) { + return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a]; + }); + } + return indices; +} + +function labelLayout$1(data) { + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label'); + var labelPosition = labelModel.get('position'); + + var labelLineModel = itemModel.getModel('labelLine'); + + var layout = data.getItemLayout(idx); + var points = layout.points; + + var isLabelInside = labelPosition === 'inner' + || labelPosition === 'inside' || labelPosition === 'center'; + + var textAlign; + var textX; + var textY; + var linePoints; + + if (isLabelInside) { + textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4; + textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4; + textAlign = 'center'; + linePoints = [ + [textX, textY], [textX, textY] + ]; + } + else { + var x1; + var y1; + var x2; + var labelLineLen = labelLineModel.get('length'); + if (labelPosition === 'left') { + // Left side + x1 = (points[3][0] + points[0][0]) / 2; + y1 = (points[3][1] + points[0][1]) / 2; + x2 = x1 - labelLineLen; + textX = x2 - 5; + textAlign = 'right'; + } + else { + // Right side + x1 = (points[1][0] + points[2][0]) / 2; + y1 = (points[1][1] + points[2][1]) / 2; + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'left'; + } + var y2 = y1; + + linePoints = [[x1, y1], [x2, y2]]; + textY = y2; + } + + layout.label = { + linePoints: linePoints, + x: textX, + y: textY, + verticalAlign: 'middle', + textAlign: textAlign, + inside: isLabelInside + }; + }); +} + +var funnelLayout = function (ecModel, api, payload) { + ecModel.eachSeriesByType('funnel', function (seriesModel) { + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var sort = seriesModel.get('sort'); + var viewRect = getViewRect$2(seriesModel, api); + var indices = getSortedIndices(data, sort); + + var sizeExtent = [ + parsePercent$1(seriesModel.get('minSize'), viewRect.width), + parsePercent$1(seriesModel.get('maxSize'), viewRect.width) + ]; + var dataExtent = data.getDataExtent(valueDim); + var min = seriesModel.get('min'); + var max = seriesModel.get('max'); + if (min == null) { + min = Math.min(dataExtent[0], 0); + } + if (max == null) { + max = dataExtent[1]; + } + + var funnelAlign = seriesModel.get('funnelAlign'); + var gap = seriesModel.get('gap'); + var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count(); + + var y = viewRect.y; + + var getLinePoints = function (idx, offY) { + // End point index is data.count() and we assign it 0 + var val = data.get(valueDim, idx) || 0; + var itemWidth = linearMap(val, [min, max], sizeExtent, true); + var x0; + switch (funnelAlign) { + case 'left': + x0 = viewRect.x; + break; + case 'center': + x0 = viewRect.x + (viewRect.width - itemWidth) / 2; + break; + case 'right': + x0 = viewRect.x + viewRect.width - itemWidth; + break; + } + return [ + [x0, offY], + [x0 + itemWidth, offY] + ]; + }; + + if (sort === 'ascending') { + // From bottom to top + itemHeight = -itemHeight; + gap = -gap; + y += viewRect.height; + indices = indices.reverse(); + } + + for (var i = 0; i < indices.length; i++) { + var idx = indices[i]; + var nextIdx = indices[i + 1]; + + var itemModel = data.getItemModel(idx); + var height = itemModel.get('itemStyle.height'); + if (height == null) { + height = itemHeight; + } + else { + height = parsePercent$1(height, viewRect.height); + if (sort === 'ascending') { + height = -height; + } + } + + var start = getLinePoints(idx, y); + var end = getLinePoints(nextIdx, y + height); + + y += height + gap; + + data.setItemLayout(idx, { + points: start.concat(end.slice().reverse()) + }); + } + + labelLayout$1(data); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(dataColor('funnel')); +registerLayout(funnelLayout); +registerProcessor(dataFilter('funnel')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var parallelPreprocessor = function (option) { + createParallelIfNeeded(option); + mergeAxisOptionFromParallel(option); +}; + +/** + * Create a parallel coordinate if not exists. + * @inner + */ +function createParallelIfNeeded(option) { + if (option.parallel) { + return; + } + + var hasParallelSeries = false; + + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'parallel') { + hasParallelSeries = true; + } + }); + + if (hasParallelSeries) { + option.parallel = [{}]; + } +} + +/** + * Merge aixs definition from parallel option (if exists) to axis option. + * @inner + */ +function mergeAxisOptionFromParallel(option) { + var axes = normalizeToArray(option.parallelAxis); + + each$1(axes, function (axisOption) { + if (!isObject$1(axisOption)) { + return; + } + + var parallelIndex = axisOption.parallelIndex || 0; + var parallelOption = normalizeToArray(option.parallel)[parallelIndex]; + + if (parallelOption && parallelOption.parallelAxisDefault) { + merge(axisOption, parallelOption.parallelAxisDefault, false); + } + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @constructor module:echarts/coord/parallel/ParallelAxis + * @extends {module:echarts/coord/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + */ +var ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * @type {number} + * @readOnly + */ + this.axisIndex = axisIndex; +}; + +ParallelAxis.prototype = { + + constructor: ParallelAxis, + + /** + * Axis model + * @param {module:echarts/coord/parallel/AxisModel} + */ + model: null, + + /** + * @override + */ + isHorizontal: function () { + return this.coordinateSystem.getModel().get('layout') !== 'horizontal'; + } + +}; + +inherits(ParallelAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Calculate slider move result. + * Usage: + * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as + * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`. + * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`. + * + * @param {number} delta Move length. + * @param {Array.} handleEnds handleEnds[0] can be bigger then handleEnds[1]. + * handleEnds will be modified in this method. + * @param {Array.} extent handleEnds is restricted by extent. + * extent[0] should less or equals than extent[1]. + * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds, + * where the input minSpan and maxSpan will not work. + * @param {number} [minSpan] The range of dataZoom can not be smaller than that. + * If not set, handle0 and cross handle1. If set as a non-negative + * number (including `0`), handles will push each other when reaching + * the minSpan. + * @param {number} [maxSpan] The range of dataZoom can not be larger than that. + * @return {Array.} The input handleEnds. + */ +var sliderMove = function (delta, handleEnds, extent, handleIndex, minSpan, maxSpan) { + // Normalize firstly. + handleEnds[0] = restrict$1(handleEnds[0], extent); + handleEnds[1] = restrict$1(handleEnds[1], extent); + + delta = delta || 0; + + var extentSpan = extent[1] - extent[0]; + + // Notice maxSpan and minSpan can be null/undefined. + if (minSpan != null) { + minSpan = restrict$1(minSpan, [0, extentSpan]); + } + if (maxSpan != null) { + maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0); + } + if (handleIndex === 'all') { + minSpan = maxSpan = Math.abs(handleEnds[1] - handleEnds[0]); + handleIndex = 0; + } + + var originalDistSign = getSpanSign(handleEnds, handleIndex); + + handleEnds[handleIndex] += delta; + + // Restrict in extent. + var extentMinSpan = minSpan || 0; + var realExtent = extent.slice(); + originalDistSign.sign < 0 ? (realExtent[0] += extentMinSpan) : (realExtent[1] -= extentMinSpan); + handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent); + + // Expand span. + var currDistSign = getSpanSign(handleEnds, handleIndex); + if (minSpan != null && ( + currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan + )) { + // If minSpan exists, 'cross' is forbinden. + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan; + } + + // Shrink span. + var currDistSign = getSpanSign(handleEnds, handleIndex); + if (maxSpan != null && currDistSign.span > maxSpan) { + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan; + } + + return handleEnds; +}; + +function getSpanSign(handleEnds, handleIndex) { + var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; + // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0] + // is at left of handleEnds[1] for non-cross case. + return {span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1}; +} + +function restrict$1(value, extend) { + return Math.min(extend[1], Math.max(extend[0], value)); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Parallel Coordinates + * + */ + +var each$11 = each$1; +var mathMin$5 = Math.min; +var mathMax$5 = Math.max; +var mathFloor$2 = Math.floor; +var mathCeil$2 = Math.ceil; +var round$2 = round$1; + +var PI$3 = Math.PI; + +function Parallel(parallelModel, ecModel, api) { + + /** + * key: dimension + * @type {Object.} + * @private + */ + this._axesMap = createHashMap(); + + /** + * key: dimension + * value: {position: [], rotation, } + * @type {Object.} + * @private + */ + this._axesLayout = {}; + + /** + * Always follow axis order. + * @type {Array.} + * @readOnly + */ + this.dimensions = parallelModel.dimensions; + + /** + * @type {module:zrender/core/BoundingRect} + */ + this._rect; + + /** + * @type {module:echarts/coord/parallel/ParallelModel} + */ + this._model = parallelModel; + + this._init(parallelModel, ecModel, api); +} + +Parallel.prototype = { + + type: 'parallel', + + constructor: Parallel, + + /** + * Initialize cartesian coordinate systems + * @private + */ + _init: function (parallelModel, ecModel, api) { + + var dimensions = parallelModel.dimensions; + var parallelAxisIndex = parallelModel.parallelAxisIndex; + + each$11(dimensions, function (dim, idx) { + + var axisIndex = parallelAxisIndex[idx]; + var axisModel = ecModel.getComponent('parallelAxis', axisIndex); + + var axis = this._axesMap.set(dim, new ParallelAxis( + dim, + createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisIndex + )); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + + // Injection + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = axisModel.coordinateSystem = this; + + }, this); + }, + + /** + * Update axis scale after data processed + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + update: function (ecModel, api) { + this._updateAxesFromSeries(this._model, ecModel); + }, + + /** + * @override + */ + containPoint: function (point) { + var layoutInfo = this._makeLayoutInfo(); + var axisBase = layoutInfo.axisBase; + var layoutBase = layoutInfo.layoutBase; + var pixelDimIndex = layoutInfo.pixelDimIndex; + var pAxis = point[1 - pixelDimIndex]; + var pLayout = point[pixelDimIndex]; + + return pAxis >= axisBase + && pAxis <= axisBase + layoutInfo.axisLength + && pLayout >= layoutBase + && pLayout <= layoutBase + layoutInfo.layoutLength; + }, + + getModel: function () { + return this._model; + }, + + /** + * Update properties from series + * @private + */ + _updateAxesFromSeries: function (parallelModel, ecModel) { + ecModel.eachSeries(function (seriesModel) { + + if (!parallelModel.contains(seriesModel, ecModel)) { + return; + } + + var data = seriesModel.getData(); + + each$11(this.dimensions, function (dim) { + var axis = this._axesMap.get(dim); + axis.scale.unionExtentFromData(data, data.mapDimension(dim)); + niceScaleExtent(axis.scale, axis.model); + }, this); + }, this); + }, + + /** + * Resize the parallel coordinate system. + * @param {module:echarts/coord/parallel/ParallelModel} parallelModel + * @param {module:echarts/ExtensionAPI} api + */ + resize: function (parallelModel, api) { + this._rect = getLayoutRect( + parallelModel.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + this._layoutAxes(); + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getRect: function () { + return this._rect; + }, + + /** + * @private + */ + _makeLayoutInfo: function () { + var parallelModel = this._model; + var rect = this._rect; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + var layout = parallelModel.get('layout'); + var pixelDimIndex = layout === 'horizontal' ? 0 : 1; + var layoutLength = rect[wh[pixelDimIndex]]; + var layoutExtent = [0, layoutLength]; + var axisCount = this.dimensions.length; + + var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent); + var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]); + var axisExpandable = parallelModel.get('axisExpandable') + && axisCount > 3 + && axisCount > axisExpandCount + && axisExpandCount > 1 + && axisExpandWidth > 0 + && layoutLength > 0; + + // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength], + // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow), + // where collapsed axes should be overlapped. + var axisExpandWindow = parallelModel.get('axisExpandWindow'); + var winSize; + if (!axisExpandWindow) { + winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent); + var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor$2(axisCount / 2); + axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2]; + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } + else { + winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent); + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } + + var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); + // Avoid axisCollapseWidth is too small. + axisCollapseWidth < 3 && (axisCollapseWidth = 0); + + // Find the first and last indices > ewin[0] and < ewin[1]. + var winInnerIndices = [ + mathFloor$2(round$2(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, + mathCeil$2(round$2(axisExpandWindow[1] / axisExpandWidth, 1)) - 1 + ]; + + // Pos in ec coordinates. + var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0]; + + return { + layout: layout, + pixelDimIndex: pixelDimIndex, + layoutBase: rect[xy[pixelDimIndex]], + layoutLength: layoutLength, + axisBase: rect[xy[1 - pixelDimIndex]], + axisLength: rect[wh[1 - pixelDimIndex]], + axisExpandable: axisExpandable, + axisExpandWidth: axisExpandWidth, + axisCollapseWidth: axisCollapseWidth, + axisExpandWindow: axisExpandWindow, + axisCount: axisCount, + winInnerIndices: winInnerIndices, + axisExpandWindow0Pos: axisExpandWindow0Pos + }; + }, + + /** + * @private + */ + _layoutAxes: function () { + var rect = this._rect; + var axes = this._axesMap; + var dimensions = this.dimensions; + var layoutInfo = this._makeLayoutInfo(); + var layout = layoutInfo.layout; + + axes.each(function (axis) { + var axisExtent = [0, layoutInfo.axisLength]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(axisExtent[idx], axisExtent[1 - idx]); + }); + + each$11(dimensions, function (dim, idx) { + var posInfo = (layoutInfo.axisExpandable + ? layoutAxisWithExpand : layoutAxisWithoutExpand + )(idx, layoutInfo); + + var positionTable = { + horizontal: { + x: posInfo.position, + y: layoutInfo.axisLength + }, + vertical: { + x: 0, + y: posInfo.position + } + }; + var rotationTable = { + horizontal: PI$3 / 2, + vertical: 0 + }; + + var position = [ + positionTable[layout].x + rect.x, + positionTable[layout].y + rect.y + ]; + + var rotation = rotationTable[layout]; + var transform = create$1(); + rotate(transform, transform, rotation); + translate(transform, transform, position); + + // TODO + // tick等排布信息。 + + // TODO + // 根据axis order 更新 dimensions顺序。 + + this._axesLayout[dim] = { + position: position, + rotation: rotation, + transform: transform, + axisNameAvailableWidth: posInfo.axisNameAvailableWidth, + axisLabelShow: posInfo.axisLabelShow, + nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth, + tickDirection: 1, + labelDirection: 1 + }; + }, this); + }, + + /** + * Get axis by dim. + * @param {string} dim + * @return {module:echarts/coord/parallel/ParallelAxis} [description] + */ + getAxis: function (dim) { + return this._axesMap.get(dim); + }, + + /** + * Convert a dim value of a single item of series data to Point. + * @param {*} value + * @param {string} dim + * @return {Array} + */ + dataToPoint: function (value, dim) { + return this.axisCoordToPoint( + this._axesMap.get(dim).dataToCoord(value), + dim + ); + }, + + /** + * Travel data for one time, get activeState of each data item. + * @param {module:echarts/data/List} data + * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal' + * {number} dataIndex + * @param {number} [start=0] the start dataIndex that travel from. + * @param {number} [end=data.count()] the next dataIndex of the last dataIndex will be travel. + */ + eachActiveState: function (data, callback, start, end) { + start == null && (start = 0); + end == null && (end = data.count()); + + var axesMap = this._axesMap; + var dimensions = this.dimensions; + var dataDimensions = []; + var axisModels = []; + + each$1(dimensions, function (axisDim) { + dataDimensions.push(data.mapDimension(axisDim)); + axisModels.push(axesMap.get(axisDim).model); + }); + + var hasActiveSet = this.hasAxisBrushed(); + + for (var dataIndex = start; dataIndex < end; dataIndex++) { + var activeState; + + if (!hasActiveSet) { + activeState = 'normal'; + } + else { + activeState = 'active'; + var values = data.getValues(dataDimensions, dataIndex); + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + var state = axisModels[j].getActiveState(values[j]); + + if (state === 'inactive') { + activeState = 'inactive'; + break; + } + } + } + + callback(activeState, dataIndex); + } + }, + + /** + * Whether has any activeSet. + * @return {boolean} + */ + hasAxisBrushed: function () { + var dimensions = this.dimensions; + var axesMap = this._axesMap; + var hasActiveSet = false; + + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') { + hasActiveSet = true; + } + } + + return hasActiveSet; + }, + + /** + * Convert coords of each axis to Point. + * Return point. For example: [10, 20] + * @param {Array.} coords + * @param {string} dim + * @return {Array.} + */ + axisCoordToPoint: function (coord, dim) { + var axisLayout = this._axesLayout[dim]; + return applyTransform$1([coord, 0], axisLayout.transform); + }, + + /** + * Get axis layout. + */ + getAxisLayout: function (dim) { + return clone(this._axesLayout[dim]); + }, + + /** + * @param {Array.} point + * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}. + */ + getSlidedAxisExpandWindow: function (point) { + var layoutInfo = this._makeLayoutInfo(); + var pixelDimIndex = layoutInfo.pixelDimIndex; + var axisExpandWindow = layoutInfo.axisExpandWindow.slice(); + var winSize = axisExpandWindow[1] - axisExpandWindow[0]; + var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)]; + + // Out of the area of coordinate system. + if (!this.containPoint(point)) { + return {behavior: 'none', axisExpandWindow: axisExpandWindow}; + } + + // Conver the point from global to expand coordinates. + var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; + + // For dragging operation convenience, the window should not be + // slided when mouse is the center area of the window. + var delta; + var behavior = 'slide'; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + var triggerArea = this._model.get('axisExpandSlideTriggerArea'); + // But consider touch device, jump is necessary. + var useJump = triggerArea[0] != null; + + if (axisCollapseWidth) { + if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) { + behavior = 'jump'; + delta = pointCoord - winSize * triggerArea[2]; + } + else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) { + behavior = 'jump'; + delta = pointCoord - winSize * (1 - triggerArea[2]); + } + else { + (delta = pointCoord - winSize * triggerArea[1]) >= 0 + && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 + && (delta = 0); + } + delta *= layoutInfo.axisExpandWidth / axisCollapseWidth; + delta + ? sliderMove(delta, axisExpandWindow, extent, 'all') + // Avoid nonsense triger on mousemove. + : (behavior = 'none'); + } + // When screen is too narrow, make it visible and slidable, although it is hard to interact. + else { + var winSize = axisExpandWindow[1] - axisExpandWindow[0]; + var pos = extent[1] * pointCoord / winSize; + axisExpandWindow = [mathMax$5(0, pos - winSize / 2)]; + axisExpandWindow[1] = mathMin$5(extent[1], axisExpandWindow[0] + winSize); + axisExpandWindow[0] = axisExpandWindow[1] - winSize; + } + + return { + axisExpandWindow: axisExpandWindow, + behavior: behavior + }; + } +}; + +function restrict(len, extent) { + return mathMin$5(mathMax$5(len, extent[0]), extent[1]); +} + +function layoutAxisWithoutExpand(axisIndex, layoutInfo) { + var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1); + return { + position: step * axisIndex, + axisNameAvailableWidth: step, + axisLabelShow: true + }; +} + +function layoutAxisWithExpand(axisIndex, layoutInfo) { + var layoutLength = layoutInfo.layoutLength; + var axisExpandWidth = layoutInfo.axisExpandWidth; + var axisCount = layoutInfo.axisCount; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + var winInnerIndices = layoutInfo.winInnerIndices; + + var position; + var axisNameAvailableWidth = axisCollapseWidth; + var axisLabelShow = false; + var nameTruncateMaxWidth; + + if (axisIndex < winInnerIndices[0]) { + position = axisIndex * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } + else if (axisIndex <= winInnerIndices[1]) { + position = layoutInfo.axisExpandWindow0Pos + + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0]; + axisNameAvailableWidth = axisExpandWidth; + axisLabelShow = true; + } + else { + position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } + + return { + position: position, + axisNameAvailableWidth: axisNameAvailableWidth, + axisLabelShow: axisLabelShow, + nameTruncateMaxWidth: nameTruncateMaxWidth + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Parallel coordinate system creater. + */ + +function create$2(ecModel, api) { + var coordSysList = []; + + ecModel.eachComponent('parallel', function (parallelModel, idx) { + var coordSys = new Parallel(parallelModel, ecModel, api); + + coordSys.name = 'parallel_' + idx; + coordSys.resize(parallelModel, api); + + parallelModel.coordinateSystem = coordSys; + coordSys.model = parallelModel; + + coordSysList.push(coordSys); + }); + + // Inject the coordinateSystems into seriesModel + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'parallel') { + var parallelModel = ecModel.queryComponents({ + mainType: 'parallel', + index: seriesModel.get('parallelIndex'), + id: seriesModel.get('parallelId') + })[0]; + seriesModel.coordinateSystem = parallelModel.coordinateSystem; + } + }); + + return coordSysList; +} + +CoordinateSystemManager.register('parallel', {create: create$2}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AxisModel$2 = ComponentModel.extend({ + + type: 'baseParallelAxis', + + /** + * @type {module:echarts/coord/parallel/Axis} + */ + axis: null, + + /** + * @type {Array.} + * @readOnly + */ + activeIntervals: [], + + /** + * @return {Object} + */ + getAreaSelectStyle: function () { + return makeStyleMapper( + [ + ['fill', 'color'], + ['lineWidth', 'borderWidth'], + ['stroke', 'borderColor'], + ['width', 'width'], + ['opacity', 'opacity'] + ] + )(this.getModel('areaSelectStyle')); + }, + + /** + * The code of this feature is put on AxisModel but not ParallelAxis, + * because axisModel can be alive after echarts updating but instance of + * ParallelAxis having been disposed. this._activeInterval should be kept + * when action dispatched (i.e. legend click). + * + * @param {Array.>} intervals interval.length === 0 + * means set all active. + * @public + */ + setActiveIntervals: function (intervals) { + var activeIntervals = this.activeIntervals = clone(intervals); + + // Normalize + if (activeIntervals) { + for (var i = activeIntervals.length - 1; i >= 0; i--) { + asc(activeIntervals[i]); + } + } + }, + + /** + * @param {number|string} [value] When attempting to detect 'no activeIntervals set', + * value can not be input. + * @return {string} 'normal': no activeIntervals set, + * 'active', + * 'inactive'. + * @public + */ + getActiveState: function (value) { + var activeIntervals = this.activeIntervals; + + if (!activeIntervals.length) { + return 'normal'; + } + + if (value == null || isNaN(value)) { + return 'inactive'; + } + + // Simple optimization + if (activeIntervals.length === 1) { + var interval = activeIntervals[0]; + if (interval[0] <= value && value <= interval[1]) { + return 'active'; + } + } + else { + for (var i = 0, len = activeIntervals.length; i < len; i++) { + if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) { + return 'active'; + } + } + } + + return 'inactive'; + } + +}); + +var defaultOption$1 = { + + type: 'value', + + /** + * @type {Array.} + */ + dim: null, // 0, 1, 2, ... + + // parallelIndex: null, + + areaSelectStyle: { + width: 20, + borderWidth: 1, + borderColor: 'rgba(160,197,232)', + color: 'rgba(160,197,232)', + opacity: 0.3 + }, + + realtime: true, // Whether realtime update view when select. + + z: 10 +}; + +merge(AxisModel$2.prototype, axisModelCommonMixin); + +function getAxisType$1(axisName, option) { + return option.type || (option.data ? 'category' : 'value'); +} + +axisModelCreator('parallel', AxisModel$2, getAxisType$1, defaultOption$1); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +ComponentModel.extend({ + + type: 'parallel', + + dependencies: ['parallelAxis'], + + /** + * @type {module:echarts/coord/parallel/Parallel} + */ + coordinateSystem: null, + + /** + * Each item like: 'dim0', 'dim1', 'dim2', ... + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * Coresponding to dimensions. + * @type {Array.} + * @readOnly + */ + parallelAxisIndex: null, + + layoutMode: 'box', + + defaultOption: { + zlevel: 0, + z: 0, + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + + layout: 'horizontal', // 'horizontal' or 'vertical' + + // FIXME + // naming? + axisExpandable: false, + axisExpandCenter: null, + axisExpandCount: 0, + axisExpandWidth: 50, // FIXME '10%' ? + axisExpandRate: 17, + axisExpandDebounce: 50, + // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full. + // Do not doc to user until necessary. + axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4], + axisExpandTriggerOn: 'click', // 'mousemove' or 'click' + + parallelAxisDefault: null + }, + + /** + * @override + */ + init: function () { + ComponentModel.prototype.init.apply(this, arguments); + + this.mergeOption({}); + }, + + /** + * @override + */ + mergeOption: function (newOption) { + var thisOption = this.option; + + newOption && merge(thisOption, newOption, true); + + this._initDimensions(); + }, + + /** + * Whether series or axis is in this coordinate system. + * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model + * @param {module:echarts/model/Global} ecModel + */ + contains: function (model, ecModel) { + var parallelIndex = model.get('parallelIndex'); + return parallelIndex != null + && ecModel.getComponent('parallel', parallelIndex) === this; + }, + + setAxisExpand: function (opt) { + each$1( + ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], + function (name) { + if (opt.hasOwnProperty(name)) { + this.option[name] = opt[name]; + } + }, + this + ); + }, + + /** + * @private + */ + _initDimensions: function () { + var dimensions = this.dimensions = []; + var parallelAxisIndex = this.parallelAxisIndex = []; + + var axisModels = filter(this.dependentModels.parallelAxis, function (axisModel) { + // Can not use this.contains here, because + // initialization has not been completed yet. + return (axisModel.get('parallelIndex') || 0) === this.componentIndex; + }, this); + + each$1(axisModels, function (axisModel) { + dimensions.push('dim' + axisModel.get('dim')); + parallelAxisIndex.push(axisModel.componentIndex); + }); + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @payload + * @property {string} parallelAxisId + * @property {Array.>} intervals + */ +var actionInfo$1 = { + type: 'axisAreaSelect', + event: 'axisAreaSelected' + // update: 'updateVisual' +}; + +registerAction(actionInfo$1, function (payload, ecModel) { + ecModel.eachComponent( + {mainType: 'parallelAxis', query: payload}, + function (parallelAxisModel) { + parallelAxisModel.axis.model.setActiveIntervals(payload.intervals); + } + ); +}); + +/** + * @payload + */ +registerAction('parallelAxisExpand', function (payload, ecModel) { + ecModel.eachComponent( + {mainType: 'parallel', query: payload}, + function (parallelModel) { + parallelModel.setAxisExpand(payload); + } + ); + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var curry$2 = curry; +var each$12 = each$1; +var map$2 = map; +var mathMin$6 = Math.min; +var mathMax$6 = Math.max; +var mathPow$2 = Math.pow; + +var COVER_Z = 10000; +var UNSELECT_THRESHOLD = 6; +var MIN_RESIZE_LINE_WIDTH = 6; +var MUTEX_RESOURCE_KEY = 'globalPan'; + +var DIRECTION_MAP = { + w: [0, 0], + e: [0, 1], + n: [1, 0], + s: [1, 1] +}; +var CURSOR_MAP = { + w: 'ew', + e: 'ew', + n: 'ns', + s: 'ns', + ne: 'nesw', + sw: 'nesw', + nw: 'nwse', + se: 'nwse' +}; +var DEFAULT_BRUSH_OPT = { + brushStyle: { + lineWidth: 2, + stroke: 'rgba(0,0,0,0.3)', + fill: 'rgba(0,0,0,0.1)' + }, + transformable: true, + brushMode: 'single', + removeOnClick: false +}; + +var baseUID = 0; + +/** + * @alias module:echarts/component/helper/BrushController + * @constructor + * @mixin {module:zrender/mixin/Eventful} + * @event module:echarts/component/helper/BrushController#brush + * params: + * areas: Array., coord relates to container group, + * If no container specified, to global. + * opt { + * isEnd: boolean, + * removeOnClick: boolean + * } + * + * @param {module:zrender/zrender~ZRender} zr + */ +function BrushController(zr) { + + if (__DEV__) { + assert$1(zr); + } + + Eventful.call(this); + + /** + * @type {module:zrender/zrender~ZRender} + * @private + */ + this._zr = zr; + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * Only for drawing (after enabledBrush). + * 'line', 'rect', 'polygon' or false + * If passing false/null/undefined, disable brush. + * If passing 'auto', determined by panel.defaultBrushType + * @private + * @type {string} + */ + this._brushType; + + /** + * Only for drawing (after enabledBrush). + * + * @private + * @type {Object} + */ + this._brushOption; + + /** + * @private + * @type {Object} + */ + this._panels; + + /** + * @private + * @type {Array.} + */ + this._track = []; + + /** + * @private + * @type {boolean} + */ + this._dragging; + + /** + * @private + * @type {Array} + */ + this._covers = []; + + /** + * @private + * @type {moudule:zrender/container/Group} + */ + this._creatingCover; + + /** + * `true` means global panel + * @private + * @type {module:zrender/container/Group|boolean} + */ + this._creatingPanel; + + /** + * @private + * @type {boolean} + */ + this._enableGlobalPan; + + /** + * @private + * @type {boolean} + */ + if (__DEV__) { + this._mounted; + } + + /** + * @private + * @type {string} + */ + this._uid = 'brushController_' + baseUID++; + + /** + * @private + * @type {Object} + */ + this._handlers = {}; + each$12(mouseHandlers, function (handler, eventName) { + this._handlers[eventName] = bind(handler, this); + }, this); +} + +BrushController.prototype = { + + constructor: BrushController, + + /** + * If set to null/undefined/false, select disabled. + * @param {Object} brushOption + * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false + * If passing false/null/undefined, disable brush. + * If passing 'auto', determined by panel.defaultBrushType. + * ('auto' can not be used in global panel) + * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple' + * @param {boolean} [brushOption.transformable=true] + * @param {boolean} [brushOption.removeOnClick=false] + * @param {Object} [brushOption.brushStyle] + * @param {number} [brushOption.brushStyle.width] + * @param {number} [brushOption.brushStyle.lineWidth] + * @param {string} [brushOption.brushStyle.stroke] + * @param {string} [brushOption.brushStyle.fill] + * @param {number} [brushOption.z] + */ + enableBrush: function (brushOption) { + if (__DEV__) { + assert$1(this._mounted); + } + + this._brushType && doDisableBrush(this); + brushOption.brushType && doEnableBrush(this, brushOption); + + return this; + }, + + /** + * @param {Array.} panelOpts If not pass, it is global brush. + * Each items: { + * panelId, // mandatory. + * clipPath, // mandatory. function. + * isTargetByCursor, // mandatory. function. + * defaultBrushType, // optional, only used when brushType is 'auto'. + * getLinearBrushOtherExtent, // optional. function. + * } + */ + setPanels: function (panelOpts) { + if (panelOpts && panelOpts.length) { + var panels = this._panels = {}; + each$1(panelOpts, function (panelOpts) { + panels[panelOpts.panelId] = clone(panelOpts); + }); + } + else { + this._panels = null; + } + return this; + }, + + /** + * @param {Object} [opt] + * @return {boolean} [opt.enableGlobalPan=false] + */ + mount: function (opt) { + opt = opt || {}; + + if (__DEV__) { + this._mounted = true; // should be at first. + } + + this._enableGlobalPan = opt.enableGlobalPan; + + var thisGroup = this.group; + this._zr.add(thisGroup); + + thisGroup.attr({ + position: opt.position || [0, 0], + rotation: opt.rotation || 0, + scale: opt.scale || [1, 1] + }); + this._transform = thisGroup.getLocalTransform(); + + return this; + }, + + eachCover: function (cb, context) { + each$12(this._covers, cb, context); + }, + + /** + * Update covers. + * @param {Array.} brushOptionList Like: + * [ + * {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable}, + * {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]}, + * ... + * ] + * `brushType` is required in each cover info. (can not be 'auto') + * `id` is not mandatory. + * `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default. + * If brushOptionList is null/undefined, all covers removed. + */ + updateCovers: function (brushOptionList) { + if (__DEV__) { + assert$1(this._mounted); + } + + brushOptionList = map(brushOptionList, function (brushOption) { + return merge(clone(DEFAULT_BRUSH_OPT), brushOption, true); + }); + + var tmpIdPrefix = '\0-brush-index-'; + var oldCovers = this._covers; + var newCovers = this._covers = []; + var controller = this; + var creatingCover = this._creatingCover; + + (new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey)) + .add(addOrUpdate) + .update(addOrUpdate) + .remove(remove) + .execute(); + + return this; + + function getKey(brushOption, index) { + return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + + '-' + brushOption.brushType; + } + + function oldGetKey(cover, index) { + return getKey(cover.__brushOption, index); + } + + function addOrUpdate(newIndex, oldIndex) { + var newBrushOption = brushOptionList[newIndex]; + // Consider setOption in event listener of brushSelect, + // where updating cover when creating should be forbiden. + if (oldIndex != null && oldCovers[oldIndex] === creatingCover) { + newCovers[newIndex] = oldCovers[oldIndex]; + } + else { + var cover = newCovers[newIndex] = oldIndex != null + ? ( + oldCovers[oldIndex].__brushOption = newBrushOption, + oldCovers[oldIndex] + ) + : endCreating(controller, createCover(controller, newBrushOption)); + updateCoverAfterCreation(controller, cover); + } + } + + function remove(oldIndex) { + if (oldCovers[oldIndex] !== creatingCover) { + controller.group.remove(oldCovers[oldIndex]); + } + } + }, + + unmount: function () { + if (__DEV__) { + if (!this._mounted) { + return; + } + } + + this.enableBrush(false); + + // container may 'removeAll' outside. + clearCovers(this); + this._zr.remove(this.group); + + if (__DEV__) { + this._mounted = false; // should be at last. + } + + return this; + }, + + dispose: function () { + this.unmount(); + this.off(); + } +}; + +mixin(BrushController, Eventful); + +function doEnableBrush(controller, brushOption) { + var zr = controller._zr; + + // Consider roam, which takes globalPan too. + if (!controller._enableGlobalPan) { + take(zr, MUTEX_RESOURCE_KEY, controller._uid); + } + + each$12(controller._handlers, function (handler, eventName) { + zr.on(eventName, handler); + }); + + controller._brushType = brushOption.brushType; + controller._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true); +} + +function doDisableBrush(controller) { + var zr = controller._zr; + + release(zr, MUTEX_RESOURCE_KEY, controller._uid); + + each$12(controller._handlers, function (handler, eventName) { + zr.off(eventName, handler); + }); + + controller._brushType = controller._brushOption = null; +} + +function createCover(controller, brushOption) { + var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption); + cover.__brushOption = brushOption; + updateZ$1(cover, brushOption); + controller.group.add(cover); + return cover; +} + +function endCreating(controller, creatingCover) { + var coverRenderer = getCoverRenderer(creatingCover); + if (coverRenderer.endCreating) { + coverRenderer.endCreating(controller, creatingCover); + updateZ$1(creatingCover, creatingCover.__brushOption); + } + return creatingCover; +} + +function updateCoverShape(controller, cover) { + var brushOption = cover.__brushOption; + getCoverRenderer(cover).updateCoverShape( + controller, cover, brushOption.range, brushOption + ); +} + +function updateZ$1(cover, brushOption) { + var z = brushOption.z; + z == null && (z = COVER_Z); + cover.traverse(function (el) { + el.z = z; + el.z2 = z; // Consider in given container. + }); +} + +function updateCoverAfterCreation(controller, cover) { + getCoverRenderer(cover).updateCommon(controller, cover); + updateCoverShape(controller, cover); +} + +function getCoverRenderer(cover) { + return coverRenderers[cover.__brushOption.brushType]; +} + +// return target panel or `true` (means global panel) +function getPanelByPoint(controller, e, localCursorPoint) { + var panels = controller._panels; + if (!panels) { + return true; // Global panel + } + var panel; + var transform = controller._transform; + each$12(panels, function (pn) { + pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn); + }); + return panel; +} + +// Return a panel or true +function getPanelByCover(controller, cover) { + var panels = controller._panels; + if (!panels) { + return true; // Global panel + } + var panelId = cover.__brushOption.panelId; + // User may give cover without coord sys info, + // which is then treated as global panel. + return panelId != null ? panels[panelId] : true; +} + +function clearCovers(controller) { + var covers = controller._covers; + var originalLength = covers.length; + each$12(covers, function (cover) { + controller.group.remove(cover); + }, controller); + covers.length = 0; + + return !!originalLength; +} + +function trigger$1(controller, opt) { + var areas = map$2(controller._covers, function (cover) { + var brushOption = cover.__brushOption; + var range = clone(brushOption.range); + return { + brushType: brushOption.brushType, + panelId: brushOption.panelId, + range: range + }; + }); + + controller.trigger('brush', areas, { + isEnd: !!opt.isEnd, + removeOnClick: !!opt.removeOnClick + }); +} + +function shouldShowCover(controller) { + var track = controller._track; + + if (!track.length) { + return false; + } + + var p2 = track[track.length - 1]; + var p1 = track[0]; + var dx = p2[0] - p1[0]; + var dy = p2[1] - p1[1]; + var dist = mathPow$2(dx * dx + dy * dy, 0.5); + + return dist > UNSELECT_THRESHOLD; +} + +function getTrackEnds(track) { + var tail = track.length - 1; + tail < 0 && (tail = 0); + return [track[0], track[tail]]; +} + +function createBaseRectCover(doDrift, controller, brushOption, edgeNames) { + var cover = new Group(); + + cover.add(new Rect({ + name: 'main', + style: makeStyle(brushOption), + silent: true, + draggable: true, + cursor: 'move', + drift: curry$2(doDrift, controller, cover, 'nswe'), + ondragend: curry$2(trigger$1, controller, {isEnd: true}) + })); + + each$12( + edgeNames, + function (name) { + cover.add(new Rect({ + name: name, + style: {opacity: 0}, + draggable: true, + silent: true, + invisible: true, + drift: curry$2(doDrift, controller, cover, name), + ondragend: curry$2(trigger$1, controller, {isEnd: true}) + })); + } + ); + + return cover; +} + +function updateBaseRect(controller, cover, localRange, brushOption) { + var lineWidth = brushOption.brushStyle.lineWidth || 0; + var handleSize = mathMax$6(lineWidth, MIN_RESIZE_LINE_WIDTH); + var x = localRange[0][0]; + var y = localRange[1][0]; + var xa = x - lineWidth / 2; + var ya = y - lineWidth / 2; + var x2 = localRange[0][1]; + var y2 = localRange[1][1]; + var x2a = x2 - handleSize + lineWidth / 2; + var y2a = y2 - handleSize + lineWidth / 2; + var width = x2 - x; + var height = y2 - y; + var widtha = width + lineWidth; + var heighta = height + lineWidth; + + updateRectShape(controller, cover, 'main', x, y, width, height); + + if (brushOption.transformable) { + updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta); + updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta); + updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize); + updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize); + + updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize); + updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize); + } +} + +function updateCommon(controller, cover) { + var brushOption = cover.__brushOption; + var transformable = brushOption.transformable; + + var mainEl = cover.childAt(0); + mainEl.useStyle(makeStyle(brushOption)); + mainEl.attr({ + silent: !transformable, + cursor: transformable ? 'move' : 'default' + }); + + each$12( + ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'], + function (name) { + var el = cover.childOfName(name); + var globalDir = getGlobalDirection(controller, name); + + el && el.attr({ + silent: !transformable, + invisible: !transformable, + cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null + }); + } + ); +} + +function updateRectShape(controller, cover, name, x, y, w, h) { + var el = cover.childOfName(name); + el && el.setShape(pointsToRect( + clipByPanel(controller, cover, [[x, y], [x + w, y + h]]) + )); +} + +function makeStyle(brushOption) { + return defaults({strokeNoScale: true}, brushOption.brushStyle); +} + +function formatRectRange(x, y, x2, y2) { + var min = [mathMin$6(x, x2), mathMin$6(y, y2)]; + var max = [mathMax$6(x, x2), mathMax$6(y, y2)]; + + return [ + [min[0], max[0]], // x range + [min[1], max[1]] // y range + ]; +} + +function getTransform$1(controller) { + return getTransform(controller.group); +} + +function getGlobalDirection(controller, localDirection) { + if (localDirection.length > 1) { + localDirection = localDirection.split(''); + var globalDir = [ + getGlobalDirection(controller, localDirection[0]), + getGlobalDirection(controller, localDirection[1]) + ]; + (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse(); + return globalDir.join(''); + } + else { + var map$$1 = {w: 'left', e: 'right', n: 'top', s: 'bottom'}; + var inverseMap = {left: 'w', right: 'e', top: 'n', bottom: 's'}; + var globalDir = transformDirection( + map$$1[localDirection], getTransform$1(controller) + ); + return inverseMap[globalDir]; + } +} + +function driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) { + var brushOption = cover.__brushOption; + var rectRange = toRectRange(brushOption.range); + var localDelta = toLocalDelta(controller, dx, dy); + + each$12(name.split(''), function (namePart) { + var ind = DIRECTION_MAP[namePart]; + rectRange[ind[0]][ind[1]] += localDelta[ind[0]]; + }); + + brushOption.range = fromRectRange(formatRectRange( + rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1] + )); + + updateCoverAfterCreation(controller, cover); + trigger$1(controller, {isEnd: false}); +} + +function driftPolygon(controller, cover, dx, dy, e) { + var range = cover.__brushOption.range; + var localDelta = toLocalDelta(controller, dx, dy); + + each$12(range, function (point) { + point[0] += localDelta[0]; + point[1] += localDelta[1]; + }); + + updateCoverAfterCreation(controller, cover); + trigger$1(controller, {isEnd: false}); +} + +function toLocalDelta(controller, dx, dy) { + var thisGroup = controller.group; + var localD = thisGroup.transformCoordToLocal(dx, dy); + var localZero = thisGroup.transformCoordToLocal(0, 0); + + return [localD[0] - localZero[0], localD[1] - localZero[1]]; +} + +function clipByPanel(controller, cover, data) { + var panel = getPanelByCover(controller, cover); + + return (panel && panel !== true) + ? panel.clipPath(data, controller._transform) + : clone(data); +} + +function pointsToRect(points) { + var xmin = mathMin$6(points[0][0], points[1][0]); + var ymin = mathMin$6(points[0][1], points[1][1]); + var xmax = mathMax$6(points[0][0], points[1][0]); + var ymax = mathMax$6(points[0][1], points[1][1]); + + return { + x: xmin, + y: ymin, + width: xmax - xmin, + height: ymax - ymin + }; +} + +function resetCursor(controller, e, localCursorPoint) { + // Check active + if (!controller._brushType) { + return; + } + + var zr = controller._zr; + var covers = controller._covers; + var currPanel = getPanelByPoint(controller, e, localCursorPoint); + + // Check whether in covers. + if (!controller._dragging) { + for (var i = 0; i < covers.length; i++) { + var brushOption = covers[i].__brushOption; + if (currPanel + && (currPanel === true || brushOption.panelId === currPanel.panelId) + && coverRenderers[brushOption.brushType].contain( + covers[i], localCursorPoint[0], localCursorPoint[1] + ) + ) { + // Use cursor style set on cover. + return; + } + } + } + + currPanel && zr.setCursorStyle('crosshair'); +} + +function preventDefault(e) { + var rawE = e.event; + rawE.preventDefault && rawE.preventDefault(); +} + +function mainShapeContain(cover, x, y) { + return cover.childOfName('main').contain(x, y); +} + +function updateCoverByMouse(controller, e, localCursorPoint, isEnd) { + var creatingCover = controller._creatingCover; + var panel = controller._creatingPanel; + var thisBrushOption = controller._brushOption; + var eventParams; + + controller._track.push(localCursorPoint.slice()); + + if (shouldShowCover(controller) || creatingCover) { + + if (panel && !creatingCover) { + thisBrushOption.brushMode === 'single' && clearCovers(controller); + var brushOption = clone(thisBrushOption); + brushOption.brushType = determineBrushType(brushOption.brushType, panel); + brushOption.panelId = panel === true ? null : panel.panelId; + creatingCover = controller._creatingCover = createCover(controller, brushOption); + controller._covers.push(creatingCover); + } + + if (creatingCover) { + var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)]; + var coverBrushOption = creatingCover.__brushOption; + + coverBrushOption.range = coverRenderer.getCreatingRange( + clipByPanel(controller, creatingCover, controller._track) + ); + + if (isEnd) { + endCreating(controller, creatingCover); + coverRenderer.updateCommon(controller, creatingCover); + } + + updateCoverShape(controller, creatingCover); + + eventParams = {isEnd: isEnd}; + } + } + else if ( + isEnd + && thisBrushOption.brushMode === 'single' + && thisBrushOption.removeOnClick + ) { + // Help user to remove covers easily, only by a tiny drag, in 'single' mode. + // But a single click do not clear covers, because user may have casual + // clicks (for example, click on other component and do not expect covers + // disappear). + // Only some cover removed, trigger action, but not every click trigger action. + if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) { + eventParams = {isEnd: isEnd, removeOnClick: true}; + } + } + + return eventParams; +} + +function determineBrushType(brushType, panel) { + if (brushType === 'auto') { + if (__DEV__) { + assert$1( + panel && panel.defaultBrushType, + 'MUST have defaultBrushType when brushType is "atuo"' + ); + } + return panel.defaultBrushType; + } + return brushType; +} + +var mouseHandlers = { + + mousedown: function (e) { + if (this._dragging) { + // In case some browser do not support globalOut, + // and release mose out side the browser. + handleDragEnd.call(this, e); + } + else if (!e.target || !e.target.draggable) { + + preventDefault(e); + + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + + this._creatingCover = null; + var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint); + + if (panel) { + this._dragging = true; + this._track = [localCursorPoint.slice()]; + } + } + }, + + mousemove: function (e) { + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + + resetCursor(this, e, localCursorPoint); + + if (this._dragging) { + + preventDefault(e); + + var eventParams = updateCoverByMouse(this, e, localCursorPoint, false); + + eventParams && trigger$1(this, eventParams); + } + }, + + mouseup: handleDragEnd //, + + // FIXME + // in tooltip, globalout should not be triggered. + // globalout: handleDragEnd +}; + +function handleDragEnd(e) { + if (this._dragging) { + + preventDefault(e); + + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + var eventParams = updateCoverByMouse(this, e, localCursorPoint, true); + + this._dragging = false; + this._track = []; + this._creatingCover = null; + + // trigger event shoule be at final, after procedure will be nested. + eventParams && trigger$1(this, eventParams); + } +} + +/** + * key: brushType + * @type {Object} + */ +var coverRenderers = { + + lineX: getLineRenderer(0), + + lineY: getLineRenderer(1), + + rect: { + createCover: function (controller, brushOption) { + return createBaseRectCover( + curry$2( + driftRect, + function (range) { + return range; + }, + function (range) { + return range; + } + ), + controller, + brushOption, + ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'] + ); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + updateBaseRect(controller, cover, localRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }, + + polygon: { + createCover: function (controller, brushOption) { + var cover = new Group(); + + // Do not use graphic.Polygon because graphic.Polyline do not close the + // border of the shape when drawing, which is a better experience for user. + cover.add(new Polyline({ + name: 'main', + style: makeStyle(brushOption), + silent: true + })); + + return cover; + }, + getCreatingRange: function (localTrack) { + return localTrack; + }, + endCreating: function (controller, cover) { + cover.remove(cover.childAt(0)); + // Use graphic.Polygon close the shape. + cover.add(new Polygon({ + name: 'main', + draggable: true, + drift: curry$2(driftPolygon, controller, cover), + ondragend: curry$2(trigger$1, controller, {isEnd: true}) + })); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + cover.childAt(0).setShape({ + points: clipByPanel(controller, cover, localRange) + }); + }, + updateCommon: updateCommon, + contain: mainShapeContain + } +}; + +function getLineRenderer(xyIndex) { + return { + createCover: function (controller, brushOption) { + return createBaseRectCover( + curry$2( + driftRect, + function (range) { + var rectRange = [range, [0, 100]]; + xyIndex && rectRange.reverse(); + return rectRange; + }, + function (rectRange) { + return rectRange[xyIndex]; + } + ), + controller, + brushOption, + [['w', 'e'], ['n', 's']][xyIndex] + ); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + var min = mathMin$6(ends[0][xyIndex], ends[1][xyIndex]); + var max = mathMax$6(ends[0][xyIndex], ends[1][xyIndex]); + + return [min, max]; + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + var otherExtent; + // If brushWidth not specified, fit the panel. + var panel = getPanelByCover(controller, cover); + if (panel !== true && panel.getLinearBrushOtherExtent) { + otherExtent = panel.getLinearBrushOtherExtent( + xyIndex, controller._transform + ); + } + else { + var zr = controller._zr; + otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]]; + } + var rectRange = [localRange, otherExtent]; + xyIndex && rectRange.reverse(); + + updateBaseRect(controller, cover, rectRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function makeRectPanelClipPath(rect) { + rect = normalizeRect(rect); + return function (localPoints, transform) { + return clipPointsByRect(localPoints, rect); + }; +} + +function makeLinearBrushOtherExtent(rect, specifiedXYIndex) { + rect = normalizeRect(rect); + return function (xyIndex) { + var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex; + var brushWidth = idx ? rect.width : rect.height; + var base = idx ? rect.x : rect.y; + return [base, base + (brushWidth || 0)]; + }; +} + +function makeRectIsTargetByCursor(rect, api, targetModel) { + rect = normalizeRect(rect); + return function (e, localCursorPoint, transform) { + return rect.contain(localCursorPoint[0], localCursorPoint[1]) + && !onIrrelevantElement(e, api, targetModel); + }; +} + +// Consider width/height is negative. +function normalizeRect(rect) { + return BoundingRect.create(rect); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var elementList = ['axisLine', 'axisTickLabel', 'axisName']; + +var AxisView$2 = extendComponentView({ + + type: 'parallelAxis', + + /** + * @override + */ + init: function (ecModel, api) { + AxisView$2.superApply(this, 'init', arguments); + + /** + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)); + }, + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + if (fromAxisAreaSelect(axisModel, ecModel, payload)) { + return; + } + + this.axisModel = axisModel; + this.api = api; + + this.group.removeAll(); + + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var coordSysModel = getCoordSysModel(axisModel, ecModel); + var coordSys = coordSysModel.coordinateSystem; + + var areaSelectStyle = axisModel.getAreaSelectStyle(); + var areaWidth = areaSelectStyle.width; + + var dim = axisModel.axis.dim; + var axisLayout = coordSys.getAxisLayout(dim); + + var builderOpt = extend( + {strokeContainThreshold: areaWidth}, + axisLayout + ); + + var axisBuilder = new AxisBuilder(axisModel, builderOpt); + + each$1(elementList, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + this._refreshBrushController( + builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api + ); + + var animationModel = (payload && payload.animation === false) ? null : axisModel; + groupTransition(oldAxisGroup, this._axisGroup, animationModel); + }, + + // /** + // * @override + // */ + // updateVisual: function (axisModel, ecModel, api, payload) { + // this._brushController && this._brushController + // .updateCovers(getCoverInfoList(axisModel)); + // }, + + _refreshBrushController: function ( + builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api + ) { + // After filtering, axis may change, select area needs to be update. + var extent = axisModel.axis.getExtent(); + var extentLen = extent[1] - extent[0]; + var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value. + + // width/height might be negative, which will be + // normalized in BoundingRect. + var rect = BoundingRect.create({ + x: extent[0], + y: -areaWidth / 2, + width: extentLen, + height: areaWidth + }); + rect.x -= extra; + rect.width += 2 * extra; + + this._brushController + .mount({ + enableGlobalPan: true, + rotation: builderOpt.rotation, + position: builderOpt.position + }) + .setPanels([{ + panelId: 'pl', + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0) + }]) + .enableBrush({ + brushType: 'lineX', + brushStyle: areaSelectStyle, + removeOnClick: true + }) + .updateCovers(getCoverInfoList(axisModel)); + }, + + _onBrush: function (coverInfoList, opt) { + // Do not cache these object, because the mey be changed. + var axisModel = this.axisModel; + var axis = axisModel.axis; + var intervals = map(coverInfoList, function (coverInfo) { + return [ + axis.coordToData(coverInfo.range[0], true), + axis.coordToData(coverInfo.range[1], true) + ]; + }); + + // If realtime is true, action is not dispatched on drag end, because + // the drag end emits the same params with the last drag move event, + // and may have some delay when using touch pad. + if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) { // jshint ignore:line + this.api.dispatchAction({ + type: 'axisAreaSelect', + parallelAxisId: axisModel.id, + intervals: intervals + }); + } + }, + + /** + * @override + */ + dispose: function () { + this._brushController.dispose(); + } +}); + +function fromAxisAreaSelect(axisModel, ecModel, payload) { + return payload + && payload.type === 'axisAreaSelect' + && ecModel.findComponents( + {mainType: 'parallelAxis', query: payload} + )[0] === axisModel; +} + +function getCoverInfoList(axisModel) { + var axis = axisModel.axis; + return map(axisModel.activeIntervals, function (interval) { + return { + brushType: 'lineX', + panelId: 'pl', + range: [ + axis.dataToCoord(interval[0], true), + axis.dataToCoord(interval[1], true) + ] + }; + }); +} + +function getCoordSysModel(axisModel, ecModel) { + return ecModel.getComponent( + 'parallel', axisModel.get('parallelIndex') + ); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var CLICK_THRESHOLD = 5; // > 4 + +// Parallel view +extendComponentView({ + type: 'parallel', + + render: function (parallelModel, ecModel, api) { + this._model = parallelModel; + this._api = api; + + if (!this._handlers) { + this._handlers = {}; + each$1(handlers, function (handler, eventName) { + api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this)); + }, this); + } + + createOrUpdate( + this, + '_throttledDispatchExpand', + parallelModel.get('axisExpandRate'), + 'fixRate' + ); + }, + + dispose: function (ecModel, api) { + each$1(this._handlers, function (handler, eventName) { + api.getZr().off(eventName, handler); + }); + this._handlers = null; + }, + + /** + * @param {Object} [opt] If null, cancle the last action triggering for debounce. + */ + _throttledDispatchExpand: function (opt) { + this._dispatchExpand(opt); + }, + + _dispatchExpand: function (opt) { + opt && this._api.dispatchAction( + extend({type: 'parallelAxisExpand'}, opt) + ); + } + +}); + +var handlers = { + + mousedown: function (e) { + if (checkTrigger(this, 'click')) { + this._mouseDownPoint = [e.offsetX, e.offsetY]; + } + }, + + mouseup: function (e) { + var mouseDownPoint = this._mouseDownPoint; + + if (checkTrigger(this, 'click') && mouseDownPoint) { + var point = [e.offsetX, e.offsetY]; + var dist = Math.pow(mouseDownPoint[0] - point[0], 2) + + Math.pow(mouseDownPoint[1] - point[1], 2); + + if (dist > CLICK_THRESHOLD) { + return; + } + + var result = this._model.coordinateSystem.getSlidedAxisExpandWindow( + [e.offsetX, e.offsetY] + ); + + result.behavior !== 'none' && this._dispatchExpand({ + axisExpandWindow: result.axisExpandWindow + }); + } + + this._mouseDownPoint = null; + }, + + mousemove: function (e) { + // Should do nothing when brushing. + if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) { + return; + } + var model = this._model; + var result = model.coordinateSystem.getSlidedAxisExpandWindow( + [e.offsetX, e.offsetY] + ); + + var behavior = result.behavior; + behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce')); + this._throttledDispatchExpand( + behavior === 'none' + ? null // Cancle the last trigger, in case that mouse slide out of the area quickly. + : { + axisExpandWindow: result.axisExpandWindow, + // Jumping uses animation, and sliding suppresses animation. + animation: behavior === 'jump' ? null : false + } + ); + } +}; + +function checkTrigger(view, triggerOn) { + var model = view._model; + return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn; +} + +registerPreprocessor(parallelPreprocessor); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.parallel', + + dependencies: ['parallel'], + + visualColorAccessPath: 'lineStyle.color', + + getInitialData: function (option, ecModel) { + var source = this.getSource(); + + setEncodeAndDimensions(source, this); + + return createListFromArray(source, this); + }, + + /** + * User can get data raw indices on 'axisAreaSelected' event received. + * + * @public + * @param {string} activeState 'active' or 'inactive' or 'normal' + * @return {Array.} Raw indices + */ + getRawIndicesByActiveState: function (activeState) { + var coordSys = this.coordinateSystem; + var data = this.getData(); + var indices = []; + + coordSys.eachActiveState(data, function (theActiveState, dataIndex) { + if (activeState === theActiveState) { + indices.push(data.getRawIndex(dataIndex)); + } + }); + + return indices; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + + coordinateSystem: 'parallel', + parallelIndex: 0, + + label: { + show: false + }, + + inactiveOpacity: 0.05, + activeOpacity: 1, + + lineStyle: { + width: 1, + opacity: 0.45, + type: 'solid' + }, + emphasis: { + label: { + show: false + } + }, + + progressive: 500, + smooth: false, // true | false | number + + animationEasing: 'linear' + } +}); + +function setEncodeAndDimensions(source, seriesModel) { + // The mapping of parallelAxis dimension to data dimension can + // be specified in parallelAxis.option.dim. For example, if + // parallelAxis.option.dim is 'dim3', it mapping to the third + // dimension of data. But `data.encode` has higher priority. + // Moreover, parallelModel.dimension should not be regarded as data + // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6']; + + if (source.encodeDefine) { + return; + } + + var parallelModel = seriesModel.ecModel.getComponent( + 'parallel', seriesModel.get('parallelIndex') + ); + if (!parallelModel) { + return; + } + + var encodeDefine = source.encodeDefine = createHashMap(); + each$1(parallelModel.dimensions, function (axisDim) { + var dataDimIndex = convertDimNameToNumber(axisDim); + encodeDefine.set(axisDim, dataDimIndex); + }); +} + +function convertDimNameToNumber(dimName) { + return +dimName.replace('dim', ''); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var DEFAULT_SMOOTH = 0.3; + +var ParallelView = Chart.extend({ + + type: 'parallel', + + init: function () { + + /** + * @type {module:zrender/container/Group} + * @private + */ + this._dataGroup = new Group(); + + this.group.add(this._dataGroup); + + /** + * @type {module:echarts/data/List} + */ + this._data; + + /** + * @type {boolean} + */ + this._initialized; + }, + + /** + * @override + */ + render: function (seriesModel, ecModel, api, payload) { + var dataGroup = this._dataGroup; + var data = seriesModel.getData(); + var oldData = this._data; + var coordSys = seriesModel.coordinateSystem; + var dimensions = coordSys.dimensions; + var seriesScope = makeSeriesScope$2(seriesModel); + + data.diff(oldData) + .add(add) + .update(update) + .remove(remove) + .execute(); + + function add(newDataIndex) { + var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys); + updateElCommon(line, data, newDataIndex, seriesScope); + } + + function update(newDataIndex, oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + var points = createLinePoints(data, newDataIndex, dimensions, coordSys); + data.setItemGraphicEl(newDataIndex, line); + var animationModel = (payload && payload.animation === false) ? null : seriesModel; + updateProps(line, {shape: {points: points}}, animationModel, newDataIndex); + + updateElCommon(line, data, newDataIndex, seriesScope); + } + + function remove(oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + dataGroup.remove(line); + } + + // First create + if (!this._initialized) { + this._initialized = true; + var clipPath = createGridClipShape$1( + coordSys, seriesModel, function () { + // Callback will be invoked immediately if there is no animation + setTimeout(function () { + dataGroup.removeClipPath(); + }); + } + ); + dataGroup.setClipPath(clipPath); + } + + this._data = data; + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + this._initialized = true; + this._data = null; + this._dataGroup.removeAll(); + }, + + incrementalRender: function (taskParams, seriesModel, ecModel) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + var dimensions = coordSys.dimensions; + var seriesScope = makeSeriesScope$2(seriesModel); + + for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) { + var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys); + line.incremental = true; + updateElCommon(line, data, dataIndex, seriesScope); + } + }, + + dispose: function () {}, + + // _renderForProgressive: function (seriesModel) { + // var dataGroup = this._dataGroup; + // var data = seriesModel.getData(); + // var oldData = this._data; + // var coordSys = seriesModel.coordinateSystem; + // var dimensions = coordSys.dimensions; + // var option = seriesModel.option; + // var progressive = option.progressive; + // var smooth = option.smooth ? SMOOTH : null; + + // // In progressive animation is disabled, so use simple data diff, + // // which effects performance less. + // // (Typically performance for data with length 7000+ like: + // // simpleDiff: 60ms, addEl: 184ms, + // // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit)) + // if (simpleDiff(oldData, data, dimensions)) { + // dataGroup.removeAll(); + // data.each(function (dataIndex) { + // addEl(data, dataGroup, dataIndex, dimensions, coordSys); + // }); + // } + + // updateElCommon(data, progressive, smooth); + + // // Consider switch between progressive and not. + // data.__plProgressive = true; + // this._data = data; + // }, + + /** + * @override + */ + remove: function () { + this._dataGroup && this._dataGroup.removeAll(); + this._data = null; + } +}); + +function createGridClipShape$1(coordSys, seriesModel, cb) { + var parallelModel = coordSys.model; + var rect = coordSys.getRect(); + var rectEl = new Rect({ + shape: { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + } + }); + + var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height'; + rectEl.setShape(dim, 0); + initProps(rectEl, { + shape: { + width: rect.width, + height: rect.height + } + }, seriesModel, cb); + return rectEl; +} + +function createLinePoints(data, dataIndex, dimensions, coordSys) { + var points = []; + for (var i = 0; i < dimensions.length; i++) { + var dimName = dimensions[i]; + var value = data.get(data.mapDimension(dimName), dataIndex); + if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) { + points.push(coordSys.dataToPoint(value, dimName)); + } + } + return points; +} + +function addEl(data, dataGroup, dataIndex, dimensions, coordSys) { + var points = createLinePoints(data, dataIndex, dimensions, coordSys); + var line = new Polyline({ + shape: {points: points}, + silent: true, + z2: 10 + }); + dataGroup.add(line); + data.setItemGraphicEl(dataIndex, line); + return line; +} + +function makeSeriesScope$2(seriesModel) { + var smooth = seriesModel.get('smooth', true); + smooth === true && (smooth = DEFAULT_SMOOTH); + return { + lineStyle: seriesModel.getModel('lineStyle').getLineStyle(), + smooth: smooth != null ? smooth : DEFAULT_SMOOTH + }; +} + +function updateElCommon(el, data, dataIndex, seriesScope) { + var lineStyle = seriesScope.lineStyle; + + if (data.hasItemOption) { + var lineStyleModel = data.getItemModel(dataIndex).getModel('lineStyle'); + lineStyle = lineStyleModel.getLineStyle(); + } + + el.useStyle(lineStyle); + + var elStyle = el.style; + elStyle.fill = null; + // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor. + elStyle.stroke = data.getItemVisual(dataIndex, 'color'); + // lineStyle.opacity have been set to itemVisual in parallelVisual. + elStyle.opacity = data.getItemVisual(dataIndex, 'opacity'); + + seriesScope.smooth && (el.shape.smooth = seriesScope.smooth); +} + +// function simpleDiff(oldData, newData, dimensions) { +// var oldLen; +// if (!oldData +// || !oldData.__plProgressive +// || (oldLen = oldData.count()) !== newData.count() +// ) { +// return true; +// } + +// var dimLen = dimensions.length; +// for (var i = 0; i < oldLen; i++) { +// for (var j = 0; j < dimLen; j++) { +// if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) { +// return true; +// } +// } +// } + +// return false; +// } + +// FIXME +// 公用方法? +function isEmptyValue(val, axisType) { + return axisType === 'category' + ? val == null + : (val == null || isNaN(val)); // axisType === 'value' +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var opacityAccessPath$1 = ['lineStyle', 'normal', 'opacity']; + +var parallelVisual = { + + seriesType: 'parallel', + + reset: function (seriesModel, ecModel, api) { + + var itemStyleModel = seriesModel.getModel('itemStyle'); + var lineStyleModel = seriesModel.getModel('lineStyle'); + var globalColors = ecModel.get('color'); + + var color = lineStyleModel.get('color') + || itemStyleModel.get('color') + || globalColors[seriesModel.seriesIndex % globalColors.length]; + var inactiveOpacity = seriesModel.get('inactiveOpacity'); + var activeOpacity = seriesModel.get('activeOpacity'); + var lineStyle = seriesModel.getModel('lineStyle').getLineStyle(); + + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + + var opacityMap = { + normal: lineStyle.opacity, + active: activeOpacity, + inactive: inactiveOpacity + }; + + data.setVisual('color', color); + + function progress(params, data) { + coordSys.eachActiveState(data, function (activeState, dataIndex) { + var opacity = opacityMap[activeState]; + if (activeState === 'normal' && data.hasItemOption) { + var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath$1, true); + itemOpacity != null && (opacity = itemOpacity); + } + data.setItemVisual(dataIndex, 'opacity', opacity); + }, params.start, params.end); + } + + return {progress: progress}; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(parallelVisual); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Get initial data and define sankey view's series model + * @author Deqing Li(annong035@gmail.com) + */ + +var SankeySeries = SeriesModel.extend({ + + type: 'series.sankey', + + layoutInfo: null, + + /** + * Init a graph data structure from data in option series + * + * @param {Object} option the object used to config echarts view + * @return {module:echarts/data/List} storage initial data + */ + getInitialData: function (option) { + var links = option.edges || option.links; + var nodes = option.data || option.nodes; + if (nodes && links) { + var graph = createGraphFromNodeEdge(nodes, links, this, true); + return graph.data; + } + }, + + setNodePosition: function (dataIndex, localPosition) { + var dataItem = this.option.data[dataIndex]; + dataItem.localX = localPosition[0]; + dataItem.localY = localPosition[1]; + }, + + /** + * Return the graphic data structure + * + * @return {module:echarts/data/Graph} graphic data structure + */ + getGraph: function () { + return this.getData().graph; + }, + + /** + * Get edge data of graphic data structure + * + * @return {module:echarts/data/List} data structure of list + */ + getEdgeData: function () { + return this.getGraph().edgeData; + }, + + /** + * @override + */ + formatTooltip: function (dataIndex, multipleSeries, dataType) { + // dataType === 'node' or empty do not show tooltip by default + if (dataType === 'edge') { + var params = this.getDataParams(dataIndex, dataType); + var rawDataOpt = params.data; + var html = rawDataOpt.source + ' -- ' + rawDataOpt.target; + if (params.value) { + html += ' : ' + params.value; + } + return encodeHTML(html); + } + + return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries); + }, + + optionUpdated: function () { + var option = this.option; + if (option.focusNodeAdjacency === true) { + option.focusNodeAdjacency = 'allEdges'; + } + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'view', + + layout: null, + + // The position of the whole view + left: '5%', + top: '5%', + right: '20%', + bottom: '5%', + + // Value can be 'vertical' + orient: 'horizontal', + + // The dx of the node + nodeWidth: 20, + + // The vertical distance between two nodes + nodeGap: 8, + + // Control if the node can move or not + draggable: true, + + // Value can be 'inEdges', 'outEdges', 'allEdges', true (the same as 'allEdges'). + focusNodeAdjacency: false, + + // The number of iterations to change the position of the node + layoutIterations: 32, + + label: { + show: true, + position: 'right', + color: '#000', + fontSize: 12 + }, + + itemStyle: { + borderWidth: 1, + borderColor: '#333' + }, + + lineStyle: { + color: '#314656', + opacity: 0.2, + curveness: 0.5 + }, + + emphasis: { + label: { + show: true + }, + lineStyle: { + opacity: 0.6 + } + }, + + animationEasing: 'linear', + + animationDuration: 1000 + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file The file used to draw sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var nodeOpacityPath$1 = ['itemStyle', 'opacity']; +var lineOpacityPath$1 = ['lineStyle', 'opacity']; + +function getItemOpacity$1(item, opacityPath) { + return item.getVisual('opacity') || item.getModel().get(opacityPath); +} + +function fadeOutItem$1(item, opacityPath, opacityRatio) { + var el = item.getGraphicEl(); + + var opacity = getItemOpacity$1(item, opacityPath); + if (opacityRatio != null) { + opacity == null && (opacity = 1); + opacity *= opacityRatio; + } + + el.downplay && el.downplay(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +function fadeInItem$1(item, opacityPath) { + var opacity = getItemOpacity$1(item, opacityPath); + var el = item.getGraphicEl(); + + el.highlight && el.highlight(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +var SankeyShape = extendShape({ + shape: { + x1: 0, y1: 0, + x2: 0, y2: 0, + cpx1: 0, cpy1: 0, + cpx2: 0, cpy2: 0, + extent: 0, + orient: '' + }, + + buildPath: function (ctx, shape) { + var extent = shape.extent; + var orient = shape.orient; + if (orient === 'vertical') { + ctx.moveTo(shape.x1, shape.y1); + ctx.bezierCurveTo( + shape.cpx1, shape.cpy1, + shape.cpx2, shape.cpy2, + shape.x2, shape.y2 + ); + ctx.lineTo(shape.x2 + extent, shape.y2); + ctx.bezierCurveTo( + shape.cpx2 + extent, shape.cpy2, + shape.cpx1 + extent, shape.cpy1, + shape.x1 + extent, shape.y1 + ); + } + else { + ctx.moveTo(shape.x1, shape.y1); + ctx.bezierCurveTo( + shape.cpx1, shape.cpy1, + shape.cpx2, shape.cpy2, + shape.x2, shape.y2 + ); + ctx.lineTo(shape.x2, shape.y2 + extent); + ctx.bezierCurveTo( + shape.cpx2, shape.cpy2 + extent, + shape.cpx1, shape.cpy1 + extent, + shape.x1, shape.y1 + extent + ); + } + ctx.closePath(); + } +}); + +extendChartView({ + + type: 'sankey', + + /** + * @private + * @type {module:echarts/chart/sankey/SankeySeries} + */ + _model: null, + + /** + * @private + * @type {boolean} + */ + _focusAdjacencyDisabled: false, + + render: function (seriesModel, ecModel, api) { + var sankeyView = this; + var graph = seriesModel.getGraph(); + var group = this.group; + var layoutInfo = seriesModel.layoutInfo; + // view width + var width = layoutInfo.width; + // view height + var height = layoutInfo.height; + var nodeData = seriesModel.getData(); + var edgeData = seriesModel.getData('edge'); + var orient = seriesModel.get('orient'); + + this._model = seriesModel; + + group.removeAll(); + + group.attr('position', [layoutInfo.x, layoutInfo.y]); + + // generate a bezire Curve for each edge + graph.eachEdge(function (edge) { + var curve = new SankeyShape(); + curve.dataIndex = edge.dataIndex; + curve.seriesIndex = seriesModel.seriesIndex; + curve.dataType = 'edge'; + var lineStyleModel = edge.getModel('lineStyle'); + var curvature = lineStyleModel.get('curveness'); + var n1Layout = edge.node1.getLayout(); + var node1Model = edge.node1.getModel(); + var dragX1 = node1Model.get('localX'); + var dragY1 = node1Model.get('localY'); + var n2Layout = edge.node2.getLayout(); + var node2Model = edge.node2.getModel(); + var dragX2 = node2Model.get('localX'); + var dragY2 = node2Model.get('localY'); + var edgeLayout = edge.getLayout(); + var x1; + var y1; + var x2; + var y2; + var cpx1; + var cpy1; + var cpx2; + var cpy2; + + curve.shape.extent = Math.max(1, edgeLayout.dy); + curve.shape.orient = orient; + + if (orient === 'vertical') { + x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy; + y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy; + x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty; + y2 = dragY2 != null ? dragY2 * height : n2Layout.y; + cpx1 = x1; + cpy1 = y1 * (1 - curvature) + y2 * curvature; + cpx2 = x2; + cpy2 = y1 * curvature + y2 * (1 - curvature); + } + else { + x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx; + y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy; + x2 = dragX2 != null ? dragX2 * width : n2Layout.x; + y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty; + cpx1 = x1 * (1 - curvature) + x2 * curvature; + cpy1 = y1; + cpx2 = x1 * curvature + x2 * (1 - curvature); + cpy2 = y2; + } + + curve.setShape({ + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }); + + curve.setStyle(lineStyleModel.getItemStyle()); + // Special color, use source node color or target node color + switch (curve.style.fill) { + case 'source': + curve.style.fill = edge.node1.getVisual('color'); + break; + case 'target': + curve.style.fill = edge.node2.getVisual('color'); + break; + } + + setHoverStyle(curve, edge.getModel('emphasis.lineStyle').getItemStyle()); + + group.add(curve); + + edgeData.setItemGraphicEl(edge.dataIndex, curve); + }); + + // Generate a rect for each node + graph.eachNode(function (node) { + var layout = node.getLayout(); + var itemModel = node.getModel(); + var dragX = itemModel.get('localX'); + var dragY = itemModel.get('localY'); + var labelModel = itemModel.getModel('label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + + var rect = new Rect({ + shape: { + x: dragX != null ? dragX * width : layout.x, + y: dragY != null ? dragY * height : layout.y, + width: layout.dx, + height: layout.dy + }, + style: itemModel.getModel('itemStyle').getItemStyle() + }); + + var hoverStyle = node.getModel('emphasis.itemStyle').getItemStyle(); + + setLabelStyle( + rect.style, hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: seriesModel, + labelDataIndex: node.dataIndex, + defaultText: node.id, + isRectText: true + } + ); + + rect.setStyle('fill', node.getVisual('color')); + + setHoverStyle(rect, hoverStyle); + + group.add(rect); + + nodeData.setItemGraphicEl(node.dataIndex, rect); + + rect.dataType = 'node'; + }); + + nodeData.eachItemGraphicEl(function (el, dataIndex) { + var itemModel = nodeData.getItemModel(dataIndex); + if (itemModel.get('draggable')) { + el.drift = function (dx, dy) { + sankeyView._focusAdjacencyDisabled = true; + this.shape.x += dx; + this.shape.y += dy; + this.dirty(); + api.dispatchAction({ + type: 'dragNode', + seriesId: seriesModel.id, + dataIndex: nodeData.getRawIndex(dataIndex), + localX: this.shape.x / width, + localY: this.shape.y / height + }); + }; + el.ondragend = function () { + sankeyView._focusAdjacencyDisabled = false; + }; + el.draggable = true; + el.cursor = 'move'; + } + + if (itemModel.get('focusNodeAdjacency')) { + el.off('mouseover').on('mouseover', function () { + if (!sankeyView._focusAdjacencyDisabled) { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + dataIndex: el.dataIndex + }); + } + }); + el.off('mouseout').on('mouseout', function () { + if (!sankeyView._focusAdjacencyDisabled) { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + } + }); + } + }); + + edgeData.eachItemGraphicEl(function (el, dataIndex) { + var edgeModel = edgeData.getItemModel(dataIndex); + if (edgeModel.get('focusNodeAdjacency')) { + el.off('mouseover').on('mouseover', function () { + if (!sankeyView._focusAdjacencyDisabled) { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + edgeDataIndex: el.dataIndex + }); + } + }); + el.off('mouseout').on('mouseout', function () { + if (!sankeyView._focusAdjacencyDisabled) { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + } + }); + } + }); + + if (!this._data && seriesModel.get('animation')) { + group.setClipPath(createGridClipShape$2(group.getBoundingRect(), seriesModel, function () { + group.removeClipPath(); + })); + } + + this._data = seriesModel.getData(); + }, + + dispose: function () {}, + + focusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var data = this._model.getData(); + var graph = data.graph; + var dataIndex = payload.dataIndex; + var itemModel = data.getItemModel(dataIndex); + var edgeDataIndex = payload.edgeDataIndex; + + if (dataIndex == null && edgeDataIndex == null) { + return; + } + var node = graph.getNodeByIndex(dataIndex); + var edge = graph.getEdgeByIndex(edgeDataIndex); + + graph.eachNode(function (node) { + fadeOutItem$1(node, nodeOpacityPath$1, 0.1); + }); + graph.eachEdge(function (edge) { + fadeOutItem$1(edge, lineOpacityPath$1, 0.1); + }); + + if (node) { + fadeInItem$1(node, nodeOpacityPath$1); + var focusNodeAdj = itemModel.get('focusNodeAdjacency'); + if (focusNodeAdj === 'outEdges') { + each$1(node.outEdges, function (edge) { + if (edge.dataIndex < 0) { + return; + } + fadeInItem$1(edge, lineOpacityPath$1); + fadeInItem$1(edge.node2, nodeOpacityPath$1); + }); + } + else if (focusNodeAdj === 'inEdges') { + each$1(node.inEdges, function (edge) { + if (edge.dataIndex < 0) { + return; + } + fadeInItem$1(edge, lineOpacityPath$1); + fadeInItem$1(edge.node1, nodeOpacityPath$1); + }); + } + else if (focusNodeAdj === 'allEdges') { + each$1(node.edges, function (edge) { + if (edge.dataIndex < 0) { + return; + } + fadeInItem$1(edge, lineOpacityPath$1); + fadeInItem$1(edge.node1, nodeOpacityPath$1); + fadeInItem$1(edge.node2, nodeOpacityPath$1); + }); + } + } + if (edge) { + fadeInItem$1(edge, lineOpacityPath$1); + fadeInItem$1(edge.node1, nodeOpacityPath$1); + fadeInItem$1(edge.node2, nodeOpacityPath$1); + } + }, + + unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var graph = this._model.getGraph(); + + graph.eachNode(function (node) { + fadeOutItem$1(node, nodeOpacityPath$1); + }); + graph.eachEdge(function (edge) { + fadeOutItem$1(edge, lineOpacityPath$1); + }); + } +}); + +// Add animation to the view +function createGridClipShape$2(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + width: rect.width + 20, + height: rect.height + 20 + } + }, seriesModel, cb); + + return rectEl; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file The interactive action of sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +registerAction({ + type: 'dragNode', + event: 'dragNode', + // here can only use 'update' now, other value is not support in echarts. + update: 'update' +}, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', subType: 'sankey', query: payload}, function (seriesModel) { + seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]); + }); +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* The implementation references to d3.js. The use of the source +* code of this file is also subject to the terms and consitions +* of its license (BSD-3Clause, see ). +*/ + + +/** + * nest helper used to group by the array. + * can specified the keys and sort the keys. + */ +function nest() { + + var keysFunction = []; + var sortKeysFunction = []; + + /** + * map an Array into the mapObject. + * @param {Array} array + * @param {number} depth + */ + function map$$1(array, depth) { + if (depth >= keysFunction.length) { + return array; + } + var i = -1; + var n = array.length; + var keyFunction = keysFunction[depth++]; + var mapObject = {}; + var valuesByKey = {}; + + while (++i < n) { + var keyValue = keyFunction(array[i]); + var values = valuesByKey[keyValue]; + + if (values) { + values.push(array[i]); + } + else { + valuesByKey[keyValue] = [array[i]]; + } + } + + each$1(valuesByKey, function (value, key) { + mapObject[key] = map$$1(value, depth); + }); + + return mapObject; + } + + /** + * transform the Map Object to multidimensional Array + * @param {Object} map + * @param {number} depth + */ + function entriesMap(mapObject, depth) { + if (depth >= keysFunction.length) { + return mapObject; + } + var array = []; + var sortKeyFunction = sortKeysFunction[depth++]; + + each$1(mapObject, function (value, key) { + array.push({ + key: key, values: entriesMap(value, depth) + }); + }); + + if (sortKeyFunction) { + return array.sort(function (a, b) { + return sortKeyFunction(a.key, b.key); + }); + } + + return array; + } + + return { + /** + * specified the key to groupby the arrays. + * users can specified one more keys. + * @param {Function} d + */ + key: function (d) { + keysFunction.push(d); + return this; + }, + + /** + * specified the comparator to sort the keys + * @param {Function} order + */ + sortKeys: function (order) { + sortKeysFunction[keysFunction.length - 1] = order; + return this; + }, + + /** + * the array to be grouped by. + * @param {Array} array + */ + entries: function (array) { + return entriesMap(map$$1(array, 0), 0); + } + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file The layout algorithm of sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var sankeyLayout = function (ecModel, api, payload) { + + ecModel.eachSeriesByType('sankey', function (seriesModel) { + + var nodeWidth = seriesModel.get('nodeWidth'); + var nodeGap = seriesModel.get('nodeGap'); + + var layoutInfo = getViewRect$3(seriesModel, api); + + seriesModel.layoutInfo = layoutInfo; + + var width = layoutInfo.width; + var height = layoutInfo.height; + + var graph = seriesModel.getGraph(); + + var nodes = graph.nodes; + var edges = graph.edges; + + computeNodeValues(nodes); + + var filteredNodes = filter(nodes, function (node) { + return node.getLayout().value === 0; + }); + + var iterations = filteredNodes.length !== 0 + ? 0 : seriesModel.get('layoutIterations'); + + var orient = seriesModel.get('orient'); + + layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient); + }); +}; + +/** + * Get the layout position of the whole view + * + * @param {module:echarts/model/Series} seriesModel the model object of sankey series + * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call + * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view + */ +function getViewRect$3(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient) { + computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient); + computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient); + computeEdgeDepths(nodes, orient); +} + +/** + * Compute the value of each node by summing the associated edge's value + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + */ +function computeNodeValues(nodes) { + each$1(nodes, function (node) { + var value1 = sum(node.outEdges, getEdgeValue); + var value2 = sum(node.inEdges, getEdgeValue); + var value = Math.max(value1, value2); + node.setLayout({value: value}, true); + }); +} + +/** + * Compute the x-position for each node. + * + * Here we use Kahn algorithm to detect cycle when we traverse + * the node to computer the initial x position. + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} nodeWidth the dx of the node + * @param {number} width the whole width of the area to draw the view + */ +function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient) { + // Used to mark whether the edge is deleted. if it is deleted, + // the value is 0, otherwise it is 1. + var remainEdges = []; + + // Storage each node's indegree. + var indegreeArr = []; + + //Used to storage the node with indegree is equal to 0. + var zeroIndegrees = []; + + var nextNode = []; + var x = 0; + var kx = 0; + + for (var i = 0; i < edges.length; i++) { + remainEdges[i] = 1; + } + + for (i = 0; i < nodes.length; i++) { + indegreeArr[i] = nodes[i].inEdges.length; + if (indegreeArr[i] === 0) { + zeroIndegrees.push(nodes[i]); + } + } + + while (zeroIndegrees.length) { + for (var idx = 0; idx < zeroIndegrees.length; idx++) { + var node = zeroIndegrees[idx]; + if (orient === 'vertical') { + node.setLayout({y: x}, true); + node.setLayout({dy: nodeWidth}, true); + } + else { + node.setLayout({x: x}, true); + node.setLayout({dx: nodeWidth}, true); + } + for (var oidx = 0; oidx < node.outEdges.length; oidx++) { + var edge = node.outEdges[oidx]; + var indexEdge = edges.indexOf(edge); + remainEdges[indexEdge] = 0; + var targetNode = edge.node2; + var nodeIndex = nodes.indexOf(targetNode); + if (--indegreeArr[nodeIndex] === 0) { + nextNode.push(targetNode); + } + } + } + ++x; + zeroIndegrees = nextNode; + nextNode = []; + } + + for (i = 0; i < remainEdges.length; i++) { + if (__DEV__) { + if (remainEdges[i] === 1) { + throw new Error('Sankey is a DAG, the original data has cycle!'); + } + } + } + + moveSinksRight(nodes, x, orient); + + if (orient === 'vertical') { + kx = (height - nodeWidth) / (x - 1); + } + else { + kx = (width - nodeWidth) / (x - 1); + } + scaleNodeBreadths(nodes, kx, orient); +} + +/** + * All the node without outEgdes are assigned maximum x-position and + * be aligned in the last column. + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} x value (x-1) use to assign to node without outEdges + * as x-position + */ +function moveSinksRight(nodes, x, orient) { + each$1(nodes, function (node) { + if (!node.outEdges.length) { + if (orient === 'vertical') { + node.setLayout({y: x - 1}, true); + } + else { + node.setLayout({x: x - 1}, true); + } + } + }); +} + +/** + * Scale node x-position to the width + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} kx multiple used to scale nodes + */ +function scaleNodeBreadths(nodes, kx, orient) { + each$1(nodes, function (node) { + if (orient === 'vertical') { + var nodeY = node.getLayout().y * kx; + node.setLayout({y: nodeY}, true); + } + else { + var nodeX = node.getLayout().x * kx; + node.setLayout({x: nodeX}, true); + } + }); +} + +/** + * Using Gauss-Seidel iterations method to compute the node depth(y-position) + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {module:echarts/data/Graph~Edge} edges edge of sankey view + * @param {number} height the whole height of the area to draw the view + * @param {number} nodeGap the vertical distance between two nodes + * in the same column. + * @param {number} iterations the number of iterations for the algorithm + */ +function computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) { + var nodesByBreadth = nest() + .key(getKeyFunction(orient)) + .sortKeys(function (a, b) { + return a - b; + }) + .entries(nodes) + .map(function (d) { + return d.values; + }); + + initializeNodeDepth(nodes, nodesByBreadth, edges, height, width, nodeGap, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + + for (var alpha = 1; iterations > 0; iterations--) { + // 0.99 is a experience parameter, ensure that each iterations of + // changes as small as possible. + alpha *= 0.99; + relaxRightToLeft(nodesByBreadth, alpha, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + relaxLeftToRight(nodesByBreadth, alpha, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + } +} + +function getKeyFunction(orient) { + if (orient === 'vertical') { + return function (d) { + return d.getLayout().y; + }; + } + return function (d) { + return d.getLayout().x; + }; +} + +/** + * Compute the original y-position for each node + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the nodes x-position. + * @param {module:echarts/data/Graph~Edge} edges edge of sankey view + * @param {number} height the whole height of the area to draw the view + * @param {number} nodeGap the vertical distance between two nodes + */ +function initializeNodeDepth(nodes, nodesByBreadth, edges, height, width, nodeGap, orient) { + var kyArray = []; + each$1(nodesByBreadth, function (nodes) { + var n = nodes.length; + var sum = 0; + var ky = 0; + each$1(nodes, function (node) { + sum += node.getLayout().value; + }); + if (orient === 'vertical') { + ky = (width - (n - 1) * nodeGap) / sum; + } + else { + ky = (height - (n - 1) * nodeGap) / sum; + } + kyArray.push(ky); + }); + + kyArray.sort(function (a, b) { + return a - b; + }); + var ky0 = kyArray[0]; + + each$1(nodesByBreadth, function (nodes) { + each$1(nodes, function (node, i) { + var nodeDy = node.getLayout().value * ky0; + if (orient === 'vertical') { + node.setLayout({x: i}, true); + node.setLayout({dx: nodeDy}, true); + } + else { + node.setLayout({y: i}, true); + node.setLayout({dy: nodeDy}, true); + } + + }); + }); + + each$1(edges, function (edge) { + var edgeDy = +edge.getValue() * ky0; + edge.setLayout({dy: edgeDy}, true); + }); +} + +/** + * Resolve the collision of initialized depth (y-position) + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the nodes x-position. + * @param {number} nodeGap the vertical distance between two nodes + * @param {number} height the whole height of the area to draw the view + */ +function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) { + each$1(nodesByBreadth, function (nodes) { + var node; + var dy; + var y0 = 0; + var n = nodes.length; + var i; + + if (orient === 'vertical') { + var nodeX; + nodes.sort(function (a, b) { + return a.getLayout().x - b.getLayout().x; + }); + for (i = 0; i < n; i++) { + node = nodes[i]; + dy = y0 - node.getLayout().x; + if (dy > 0) { + nodeX = node.getLayout().x + dy; + node.setLayout({x: nodeX}, true); + } + y0 = node.getLayout().x + node.getLayout().dx + nodeGap; + } + // If the bottommost node goes outside the bounds, push it back up + dy = y0 - nodeGap - width; + if (dy > 0) { + nodeX = node.getLayout().x - dy; + node.setLayout({x: nodeX}, true); + y0 = nodeX; + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.getLayout().x + node.getLayout().dx + nodeGap - y0; + if (dy > 0) { + nodeX = node.getLayout().x - dy; + node.setLayout({x: nodeX}, true); + } + y0 = node.getLayout().x; + } + } + } + else { + var nodeY; + nodes.sort(function (a, b) { + return a.getLayout().y - b.getLayout().y; + }); + for (i = 0; i < n; i++) { + node = nodes[i]; + dy = y0 - node.getLayout().y; + if (dy > 0) { + nodeY = node.getLayout().y + dy; + node.setLayout({y: nodeY}, true); + } + y0 = node.getLayout().y + node.getLayout().dy + nodeGap; + } + // If the bottommost node goes outside the bounds, push it back up + dy = y0 - nodeGap - height; + if (dy > 0) { + nodeY = node.getLayout().y - dy; + node.setLayout({y: nodeY}, true); + y0 = nodeY; + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.getLayout().y + node.getLayout().dy + nodeGap - y0; + if (dy > 0) { + nodeY = node.getLayout().y - dy; + node.setLayout({y: nodeY}, true); + } + y0 = node.getLayout().y; + } + } + } + }); +} + +/** + * Change the y-position of the nodes, except most the right side nodes + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the node x-position. + * @param {number} alpha parameter used to adjust the nodes y-position + */ +function relaxRightToLeft(nodesByBreadth, alpha, orient) { + each$1(nodesByBreadth.slice().reverse(), function (nodes) { + each$1(nodes, function (node) { + if (node.outEdges.length) { + var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue, orient); + if (orient === 'vertical') { + var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha; + node.setLayout({x: nodeX}, true); + } + else { + var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha; + node.setLayout({y: nodeY}, true); + } + } + }); + }); +} + +function weightedTarget(edge, orient) { + return center$1(edge.node2, orient) * edge.getValue(); +} + +function weightedSource(edge, orient) { + return center$1(edge.node1, orient) * edge.getValue(); +} + +function center$1(node, orient) { + if (orient === 'vertical') { + return node.getLayout().x + node.getLayout().dx / 2; + } + return node.getLayout().y + node.getLayout().dy / 2; +} + +function getEdgeValue(edge) { + return edge.getValue(); +} + +function sum(array, f, orient) { + var sum = 0; + var len = array.length; + var i = -1; + while (++i < len) { + var value = +f.call(array, array[i], orient); + if (!isNaN(value)) { + sum += value; + } + } + return sum; +} + +/** + * Change the y-position of the nodes, except most the left side nodes + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the node x-position. + * @param {number} alpha parameter used to adjust the nodes y-position + */ +function relaxLeftToRight(nodesByBreadth, alpha, orient) { + each$1(nodesByBreadth, function (nodes) { + each$1(nodes, function (node) { + if (node.inEdges.length) { + var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue, orient); + if (orient === 'vertical') { + var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha; + node.setLayout({x: nodeX}, true); + } + else { + var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha; + node.setLayout({y: nodeY}, true); + } + } + }); + }); +} + +/** + * Compute the depth(y-position) of each edge + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + */ +function computeEdgeDepths(nodes, orient) { + each$1(nodes, function (node) { + if (orient === 'vertical') { + node.outEdges.sort(function (a, b) { + return a.node2.getLayout().x - b.node2.getLayout().x; + }); + node.inEdges.sort(function (a, b) { + return a.node1.getLayout().x - b.node1.getLayout().x; + }); + } + else { + node.outEdges.sort(function (a, b) { + return a.node2.getLayout().y - b.node2.getLayout().y; + }); + node.inEdges.sort(function (a, b) { + return a.node1.getLayout().y - b.node1.getLayout().y; + }); + } + }); + each$1(nodes, function (node) { + var sy = 0; + var ty = 0; + each$1(node.outEdges, function (edge) { + edge.setLayout({sy: sy}, true); + sy += edge.getLayout().dy; + }); + each$1(node.inEdges, function (edge) { + edge.setLayout({ty: ty}, true); + ty += edge.getLayout().dy; + }); + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Visual encoding for sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var sankeyVisual = function (ecModel, payload) { + ecModel.eachSeriesByType('sankey', function (seriesModel) { + var graph = seriesModel.getGraph(); + var nodes = graph.nodes; + if (nodes.length) { + var minValue = Infinity; + var maxValue = -Infinity; + each$1(nodes, function (node) { + var nodeValue = node.getLayout().value; + if (nodeValue < minValue) { + minValue = nodeValue; + } + if (nodeValue > maxValue) { + maxValue = nodeValue; + } + }); + + each$1(nodes, function (node) { + var mapping = new VisualMapping({ + type: 'color', + mappingMethod: 'linear', + dataExtent: [minValue, maxValue], + visual: seriesModel.get('color') + }); + + var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value); + node.setVisual('color', mapValueToColor); + // If set itemStyle.normal.color + var itemModel = node.getModel(); + var customColor = itemModel.get('itemStyle.color'); + if (customColor != null) { + node.setVisual('color', customColor); + } + }); + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerLayout(sankeyLayout); +registerVisual(sankeyVisual); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var seriesModelMixin = { + + /** + * @private + * @type {string} + */ + _baseAxisDim: null, + + /** + * @override + */ + getInitialData: function (option, ecModel) { + // When both types of xAxis and yAxis are 'value', layout is + // needed to be specified by user. Otherwise, layout can be + // judged by which axis is category. + + var ordinalMeta; + + var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex')); + var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex')); + var xAxisType = xAxisModel.get('type'); + var yAxisType = yAxisModel.get('type'); + var addOrdinal; + + // FIXME + // 考虑时间轴 + + if (xAxisType === 'category') { + option.layout = 'horizontal'; + ordinalMeta = xAxisModel.getOrdinalMeta(); + addOrdinal = true; + } + else if (yAxisType === 'category') { + option.layout = 'vertical'; + ordinalMeta = yAxisModel.getOrdinalMeta(); + addOrdinal = true; + } + else { + option.layout = option.layout || 'horizontal'; + } + + var coordDims = ['x', 'y']; + var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1; + var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex]; + var otherAxisDim = coordDims[1 - baseAxisDimIndex]; + var axisModels = [xAxisModel, yAxisModel]; + var baseAxisType = axisModels[baseAxisDimIndex].get('type'); + var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type'); + var data = option.data; + + // ??? FIXME make a stage to perform data transfrom. + // MUST create a new data, consider setOption({}) again. + if (data && addOrdinal) { + var newOptionData = []; + each$1(data, function (item, index) { + var newItem; + if (item.value && isArray(item.value)) { + newItem = item.value.slice(); + item.value.unshift(index); + } + else if (isArray(item)) { + newItem = item.slice(); + item.unshift(index); + } + else { + newItem = item; + } + newOptionData.push(newItem); + }); + option.data = newOptionData; + } + + var defaultValueDimensions = this.defaultValueDimensions; + + return createListSimply( + this, + { + coordDimensions: [{ + name: baseAxisDim, + type: getDimensionTypeByAxis(baseAxisType), + ordinalMeta: ordinalMeta, + otherDims: { + tooltip: false, + itemName: 0 + }, + dimsDef: ['base'] + }, { + name: otherAxisDim, + type: getDimensionTypeByAxis(otherAxisType), + dimsDef: defaultValueDimensions.slice() + }], + dimensionsCount: defaultValueDimensions.length + 1 + } + ); + }, + + /** + * If horizontal, base axis is x, otherwise y. + * @override + */ + getBaseAxis: function () { + var dim = this._baseAxisDim; + return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis; + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var BoxplotSeries = SeriesModel.extend({ + + type: 'series.boxplot', + + dependencies: ['xAxis', 'yAxis', 'grid'], + + // TODO + // box width represents group size, so dimension should have 'size'. + + /** + * @see + * The meanings of 'min' and 'max' depend on user, + * and echarts do not need to know it. + * @readOnly + */ + defaultValueDimensions: [ + {name: 'min', defaultTooltip: true}, + {name: 'Q1', defaultTooltip: true}, + {name: 'median', defaultTooltip: true}, + {name: 'Q3', defaultTooltip: true}, + {name: 'max', defaultTooltip: true} + ], + + /** + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * @override + */ + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + + // xAxisIndex: 0, + // yAxisIndex: 0, + + layout: null, // 'horizontal' or 'vertical' + boxWidth: [7, 50], // [min, max] can be percent of band width. + + itemStyle: { + color: '#fff', + borderWidth: 1 + }, + + emphasis: { + itemStyle: { + borderWidth: 2, + shadowBlur: 5, + shadowOffsetX: 2, + shadowOffsetY: 2, + shadowColor: 'rgba(0,0,0,0.4)' + } + }, + + animationEasing: 'elasticOut', + animationDuration: 800 + } +}); + +mixin(BoxplotSeries, seriesModelMixin, true); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Update common properties +var NORMAL_ITEM_STYLE_PATH = ['itemStyle']; +var EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle']; + +var BoxplotView = Chart.extend({ + + type: 'boxplot', + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var group = this.group; + var oldData = this._data; + + // There is no old data only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + if (!this._data) { + group.removeAll(); + } + + var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0; + + data.diff(oldData) + .add(function (newIdx) { + if (data.hasValue(newIdx)) { + var itemLayout = data.getItemLayout(newIdx); + var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + + // Empty data + if (!data.hasValue(newIdx)) { + group.remove(symbolEl); + return; + } + + var itemLayout = data.getItemLayout(newIdx); + if (!symbolEl) { + symbolEl = createNormalBox(itemLayout, data, newIdx, constDim); + } + else { + updateNormalBoxData(itemLayout, symbolEl, data, newIdx); + } + + group.add(symbolEl); + + data.setItemGraphicEl(newIdx, symbolEl); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }) + .execute(); + + this._data = data; + }, + + remove: function (ecModel) { + var group = this.group; + var data = this._data; + this._data = null; + data && data.eachItemGraphicEl(function (el) { + el && group.remove(el); + }); + }, + + dispose: noop + +}); + + +var BoxPath = Path.extend({ + + type: 'boxplotBoxPath', + + shape: {}, + + buildPath: function (ctx, shape) { + var ends = shape.points; + + var i = 0; + ctx.moveTo(ends[i][0], ends[i][1]); + i++; + for (; i < 4; i++) { + ctx.lineTo(ends[i][0], ends[i][1]); + } + ctx.closePath(); + + for (; i < ends.length; i++) { + ctx.moveTo(ends[i][0], ends[i][1]); + i++; + ctx.lineTo(ends[i][0], ends[i][1]); + } + } +}); + + +function createNormalBox(itemLayout, data, dataIndex, constDim, isInit) { + var ends = itemLayout.ends; + + var el = new BoxPath({ + shape: { + points: isInit + ? transInit(ends, constDim, itemLayout) + : ends + } + }); + + updateNormalBoxData(itemLayout, el, data, dataIndex, isInit); + + return el; +} + +function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) { + var seriesModel = data.hostModel; + var updateMethod = graphic[isInit ? 'initProps' : 'updateProps']; + + updateMethod( + el, + {shape: {points: itemLayout.ends}}, + seriesModel, + dataIndex + ); + + var itemModel = data.getItemModel(dataIndex); + var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH); + var borderColor = data.getItemVisual(dataIndex, 'color'); + + // Exclude borderColor. + var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']); + itemStyle.stroke = borderColor; + itemStyle.strokeNoScale = true; + el.useStyle(itemStyle); + + el.z2 = 100; + + var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle(); + setHoverStyle(el, hoverStyle); +} + +function transInit(points, dim, itemLayout) { + return map(points, function (point) { + point = point.slice(); + point[dim] = itemLayout.initBaseline; + return point; + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var borderColorQuery = ['itemStyle', 'borderColor']; + +var boxplotVisual = function (ecModel, api) { + + var globalColors = ecModel.get('color'); + + ecModel.eachRawSeriesByType('boxplot', function (seriesModel) { + + var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length]; + var data = seriesModel.getData(); + + data.setVisual({ + legendSymbol: 'roundRect', + // Use name 'color' but not 'borderColor' for legend usage and + // visual coding from other component like dataRange. + color: seriesModel.get(borderColorQuery) || defaulColor + }); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + data.setItemVisual( + idx, + {color: itemModel.get(borderColorQuery, true)} + ); + }); + } + }); + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$13 = each$1; + +var boxplotLayout = function (ecModel) { + + var groupResult = groupSeriesByAxis(ecModel); + + each$13(groupResult, function (groupItem) { + var seriesModels = groupItem.seriesModels; + + if (!seriesModels.length) { + return; + } + + calculateBase(groupItem); + + each$13(seriesModels, function (seriesModel, idx) { + layoutSingleSeries( + seriesModel, + groupItem.boxOffsetList[idx], + groupItem.boxWidthList[idx] + ); + }); + }); +}; + +/** + * Group series by axis. + */ +function groupSeriesByAxis(ecModel) { + var result = []; + var axisList = []; + + ecModel.eachSeriesByType('boxplot', function (seriesModel) { + var baseAxis = seriesModel.getBaseAxis(); + var idx = indexOf(axisList, baseAxis); + + if (idx < 0) { + idx = axisList.length; + axisList[idx] = baseAxis; + result[idx] = {axis: baseAxis, seriesModels: []}; + } + + result[idx].seriesModels.push(seriesModel); + }); + + return result; +} + +/** + * Calculate offset and box width for each series. + */ +function calculateBase(groupItem) { + var extent; + var baseAxis = groupItem.axis; + var seriesModels = groupItem.seriesModels; + var seriesCount = seriesModels.length; + + var boxWidthList = groupItem.boxWidthList = []; + var boxOffsetList = groupItem.boxOffsetList = []; + var boundList = []; + + var bandWidth; + if (baseAxis.type === 'category') { + bandWidth = baseAxis.getBandWidth(); + } + else { + var maxDataCount = 0; + each$13(seriesModels, function (seriesModel) { + maxDataCount = Math.max(maxDataCount, seriesModel.getData().count()); + }); + extent = baseAxis.getExtent(), + Math.abs(extent[1] - extent[0]) / maxDataCount; + } + + each$13(seriesModels, function (seriesModel) { + var boxWidthBound = seriesModel.get('boxWidth'); + if (!isArray(boxWidthBound)) { + boxWidthBound = [boxWidthBound, boxWidthBound]; + } + boundList.push([ + parsePercent$1(boxWidthBound[0], bandWidth) || 0, + parsePercent$1(boxWidthBound[1], bandWidth) || 0 + ]); + }); + + var availableWidth = bandWidth * 0.8 - 2; + var boxGap = availableWidth / seriesCount * 0.3; + var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount; + var base = boxWidth / 2 - availableWidth / 2; + + each$13(seriesModels, function (seriesModel, idx) { + boxOffsetList.push(base); + base += boxGap + boxWidth; + + boxWidthList.push( + Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]) + ); + }); +} + +/** + * Calculate points location for each series. + */ +function layoutSingleSeries(seriesModel, offset, boxWidth) { + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var halfWidth = boxWidth / 2; + var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1; + var vDimIdx = 1 - cDimIdx; + var coordDims = ['x', 'y']; + var cDim = data.mapDimension(coordDims[cDimIdx]); + var vDims = data.mapDimension(coordDims[vDimIdx], true); + + if (cDim == null || vDims.length < 5) { + return; + } + + for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) { + var axisDimVal = data.get(cDim, dataIndex); + + var median = getPoint(axisDimVal, vDims[2], dataIndex); + var end1 = getPoint(axisDimVal, vDims[0], dataIndex); + var end2 = getPoint(axisDimVal, vDims[1], dataIndex); + var end4 = getPoint(axisDimVal, vDims[3], dataIndex); + var end5 = getPoint(axisDimVal, vDims[4], dataIndex); + + var ends = []; + addBodyEnd(ends, end2, 0); + addBodyEnd(ends, end4, 1); + + ends.push(end1, end2, end5, end4); + layEndLine(ends, end1); + layEndLine(ends, end5); + layEndLine(ends, median); + + data.setItemLayout(dataIndex, { + initBaseline: median[vDimIdx], + ends: ends + }); + } + + function getPoint(axisDimVal, dimIdx, dataIndex) { + var val = data.get(dimIdx, dataIndex); + var p = []; + p[cDimIdx] = axisDimVal; + p[vDimIdx] = val; + var point; + if (isNaN(axisDimVal) || isNaN(val)) { + point = [NaN, NaN]; + } + else { + point = coordSys.dataToPoint(p); + point[cDimIdx] += offset; + } + return point; + } + + function addBodyEnd(ends, point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + point1[cDimIdx] += halfWidth; + point2[cDimIdx] -= halfWidth; + start + ? ends.push(point1, point2) + : ends.push(point2, point1); + } + + function layEndLine(ends, endCenter) { + var from = endCenter.slice(); + var to = endCenter.slice(); + from[cDimIdx] -= halfWidth; + to[cDimIdx] += halfWidth; + ends.push(from, to); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(boxplotVisual); +registerLayout(boxplotLayout); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var CandlestickSeries = SeriesModel.extend({ + + type: 'series.candlestick', + + dependencies: ['xAxis', 'yAxis', 'grid'], + + /** + * @readOnly + */ + defaultValueDimensions: [ + {name: 'open', defaultTooltip: true}, + {name: 'close', defaultTooltip: true}, + {name: 'lowest', defaultTooltip: true}, + {name: 'highest', defaultTooltip: true} + ], + + /** + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * @override + */ + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + + // xAxisIndex: 0, + // yAxisIndex: 0, + + layout: null, // 'horizontal' or 'vertical' + + itemStyle: { + color: '#c23531', // 阳线 positive + color0: '#314656', // 阴线 negative '#c23531', '#314656' + borderWidth: 1, + // FIXME + // ec2中使用的是lineStyle.color 和 lineStyle.color0 + borderColor: '#c23531', + borderColor0: '#314656' + }, + + emphasis: { + itemStyle: { + borderWidth: 2 + } + }, + + barMaxWidth: null, + barMinWidth: null, + barWidth: null, + + large: true, + largeThreshold: 600, + + progressive: 3e3, + progressiveThreshold: 1e4, + progressiveChunkMode: 'mod', + + animationUpdate: false, + animationEasing: 'linear', + animationDuration: 300 + }, + + /** + * Get dimension for shadow in dataZoom + * @return {string} dimension name + */ + getShadowDim: function () { + return 'open'; + }, + + brushSelector: function (dataIndex, data, selectors) { + var itemLayout = data.getItemLayout(dataIndex); + return itemLayout && selectors.rect(itemLayout.brushRect); + } + +}); + +mixin(CandlestickSeries, seriesModelMixin, true); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var NORMAL_ITEM_STYLE_PATH$1 = ['itemStyle']; +var EMPHASIS_ITEM_STYLE_PATH$1 = ['emphasis', 'itemStyle']; +var SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0']; + + +var CandlestickView = Chart.extend({ + + type: 'candlestick', + + render: function (seriesModel, ecModel, api) { + this._updateDrawMode(seriesModel); + + this._isLargeDraw + ? this._renderLarge(seriesModel) + : this._renderNormal(seriesModel); + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + this._clear(); + this._updateDrawMode(seriesModel); + }, + + incrementalRender: function (params, seriesModel, ecModel, api) { + this._isLargeDraw + ? this._incrementalRenderLarge(params, seriesModel) + : this._incrementalRenderNormal(params, seriesModel); + }, + + _updateDrawMode: function (seriesModel) { + var isLargeDraw = seriesModel.pipelineContext.large; + if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) { + this._isLargeDraw = isLargeDraw; + this._clear(); + } + }, + + _renderNormal: function (seriesModel) { + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + var isSimpleBox = data.getLayout('isSimpleBox'); + + // There is no old data only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + if (!this._data) { + group.removeAll(); + } + + data.diff(oldData) + .add(function (newIdx) { + if (data.hasValue(newIdx)) { + var el; + + var itemLayout = data.getItemLayout(newIdx); + el = createNormalBox$1(itemLayout, newIdx, true); + initProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx); + + setBoxCommon(el, data, newIdx, isSimpleBox); + + group.add(el); + data.setItemGraphicEl(newIdx, el); + } + }) + .update(function (newIdx, oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + + // Empty data + if (!data.hasValue(newIdx)) { + group.remove(el); + return; + } + + var itemLayout = data.getItemLayout(newIdx); + if (!el) { + el = createNormalBox$1(itemLayout, newIdx); + } + else { + updateProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx); + } + + setBoxCommon(el, data, newIdx, isSimpleBox); + + group.add(el); + data.setItemGraphicEl(newIdx, el); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }) + .execute(); + + this._data = data; + }, + + _renderLarge: function (seriesModel) { + this._clear(); + createLarge$1(seriesModel, this.group); + }, + + _incrementalRenderNormal: function (params, seriesModel) { + var data = seriesModel.getData(); + var isSimpleBox = data.getLayout('isSimpleBox'); + + var dataIndex; + while ((dataIndex = params.next()) != null) { + var el; + + var itemLayout = data.getItemLayout(dataIndex); + el = createNormalBox$1(itemLayout, dataIndex); + setBoxCommon(el, data, dataIndex, isSimpleBox); + + el.incremental = true; + this.group.add(el); + } + }, + + _incrementalRenderLarge: function (params, seriesModel) { + createLarge$1(seriesModel, this.group, true); + }, + + remove: function (ecModel) { + this._clear(); + }, + + _clear: function () { + this.group.removeAll(); + this._data = null; + }, + + dispose: noop + +}); + + +var NormalBoxPath = Path.extend({ + + type: 'normalCandlestickBox', + + shape: {}, + + buildPath: function (ctx, shape) { + var ends = shape.points; + + if (this.__simpleBox) { + ctx.moveTo(ends[4][0], ends[4][1]); + ctx.lineTo(ends[6][0], ends[6][1]); + } + else { + ctx.moveTo(ends[0][0], ends[0][1]); + ctx.lineTo(ends[1][0], ends[1][1]); + ctx.lineTo(ends[2][0], ends[2][1]); + ctx.lineTo(ends[3][0], ends[3][1]); + ctx.closePath(); + + ctx.moveTo(ends[4][0], ends[4][1]); + ctx.lineTo(ends[5][0], ends[5][1]); + ctx.moveTo(ends[6][0], ends[6][1]); + ctx.lineTo(ends[7][0], ends[7][1]); + } + } +}); + +function createNormalBox$1(itemLayout, dataIndex, isInit) { + var ends = itemLayout.ends; + return new NormalBoxPath({ + shape: { + points: isInit + ? transInit$1(ends, itemLayout) + : ends + }, + z2: 100 + }); +} + +function setBoxCommon(el, data, dataIndex, isSimpleBox) { + var itemModel = data.getItemModel(dataIndex); + var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH$1); + var color = data.getItemVisual(dataIndex, 'color'); + var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color; + + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS); + + el.useStyle(itemStyle); + el.style.strokeNoScale = true; + el.style.fill = color; + el.style.stroke = borderColor; + + el.__simpleBox = isSimpleBox; + + var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH$1).getItemStyle(); + setHoverStyle(el, hoverStyle); +} + +function transInit$1(points, itemLayout) { + return map(points, function (point) { + point = point.slice(); + point[1] = itemLayout.initBaseline; + return point; + }); +} + + + +var LargeBoxPath = Path.extend({ + + type: 'largeCandlestickBox', + + shape: {}, + + buildPath: function (ctx, shape) { + // Drawing lines is more efficient than drawing + // a whole line or drawing rects. + var points = shape.points; + for (var i = 0; i < points.length;) { + if (this.__sign === points[i++]) { + var x = points[i++]; + ctx.moveTo(x, points[i++]); + ctx.lineTo(x, points[i++]); + } + else { + i += 3; + } + } + } +}); + +function createLarge$1(seriesModel, group, incremental) { + var data = seriesModel.getData(); + var largePoints = data.getLayout('largePoints'); + + var elP = new LargeBoxPath({ + shape: {points: largePoints}, + __sign: 1 + }); + group.add(elP); + var elN = new LargeBoxPath({ + shape: {points: largePoints}, + __sign: -1 + }); + group.add(elN); + + setLargeStyle$1(1, elP, seriesModel, data); + setLargeStyle$1(-1, elN, seriesModel, data); + + if (incremental) { + elP.incremental = true; + elN.incremental = true; + } +} + +function setLargeStyle$1(sign, el, seriesModel, data) { + var suffix = sign > 0 ? 'P' : 'N'; + var borderColor = data.getVisual('borderColor' + suffix) + || data.getVisual('color' + suffix); + + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + var itemStyle = seriesModel.getModel(NORMAL_ITEM_STYLE_PATH$1).getItemStyle(SKIP_PROPS); + + el.useStyle(itemStyle); + el.style.fill = null; + el.style.stroke = borderColor; + // No different + // el.style.lineWidth = .5; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var preprocessor = function (option) { + if (!option || !isArray(option.series)) { + return; + } + + // Translate 'k' to 'candlestick'. + each$1(option.series, function (seriesItem) { + if (isObject$1(seriesItem) && seriesItem.type === 'k') { + seriesItem.type = 'candlestick'; + } + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var positiveBorderColorQuery = ['itemStyle', 'borderColor']; +var negativeBorderColorQuery = ['itemStyle', 'borderColor0']; +var positiveColorQuery = ['itemStyle', 'color']; +var negativeColorQuery = ['itemStyle', 'color0']; + +var candlestickVisual = { + + seriesType: 'candlestick', + + plan: createRenderPlanner(), + + // For legend. + performRawSeries: true, + + reset: function (seriesModel, ecModel) { + + var data = seriesModel.getData(); + var isLargeRender = seriesModel.pipelineContext.large; + + data.setVisual({ + legendSymbol: 'roundRect', + colorP: getColor(1, seriesModel), + colorN: getColor(-1, seriesModel), + borderColorP: getBorderColor(1, seriesModel), + borderColorN: getBorderColor(-1, seriesModel) + }); + + // Only visible series has each data be visual encoded + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + return !isLargeRender && {progress: progress}; + + + function progress(params, data) { + var dataIndex; + while ((dataIndex = params.next()) != null) { + var itemModel = data.getItemModel(dataIndex); + var sign = data.getItemLayout(dataIndex).sign; + + data.setItemVisual( + dataIndex, + { + color: getColor(sign, itemModel), + borderColor: getBorderColor(sign, itemModel) + } + ); + } + } + + function getColor(sign, model) { + return model.get( + sign > 0 ? positiveColorQuery : negativeColorQuery + ); + } + + function getBorderColor(sign, model) { + return model.get( + sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery + ); + } + + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float32Array */ + +var LargeArr$1 = typeof Float32Array !== 'undefined' ? Float32Array : Array; + +var candlestickLayout = { + + seriesType: 'candlestick', + + plan: createRenderPlanner(), + + reset: function (seriesModel) { + + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var candleWidth = calculateCandleWidth(seriesModel, data); + var cDimIdx = 0; + var vDimIdx = 1; + var coordDims = ['x', 'y']; + var cDim = data.mapDimension(coordDims[cDimIdx]); + var vDims = data.mapDimension(coordDims[vDimIdx], true); + var openDim = vDims[0]; + var closeDim = vDims[1]; + var lowestDim = vDims[2]; + var highestDim = vDims[3]; + + data.setLayout({ + candleWidth: candleWidth, + // The value is experimented visually. + isSimpleBox: candleWidth <= 1.3 + }); + + if (cDim == null || vDims.length < 4) { + return; + } + + return { + progress: seriesModel.pipelineContext.large + ? largeProgress : normalProgress + }; + + function normalProgress(params, data) { + var dataIndex; + while ((dataIndex = params.next()) != null) { + + var axisDimVal = data.get(cDim, dataIndex); + var openVal = data.get(openDim, dataIndex); + var closeVal = data.get(closeDim, dataIndex); + var lowestVal = data.get(lowestDim, dataIndex); + var highestVal = data.get(highestDim, dataIndex); + + var ocLow = Math.min(openVal, closeVal); + var ocHigh = Math.max(openVal, closeVal); + + var ocLowPoint = getPoint(ocLow, axisDimVal); + var ocHighPoint = getPoint(ocHigh, axisDimVal); + var lowestPoint = getPoint(lowestVal, axisDimVal); + var highestPoint = getPoint(highestVal, axisDimVal); + + var ends = []; + addBodyEnd(ends, ocHighPoint, 0); + addBodyEnd(ends, ocLowPoint, 1); + + ends.push( + subPixelOptimizePoint(highestPoint), + subPixelOptimizePoint(ocHighPoint), + subPixelOptimizePoint(lowestPoint), + subPixelOptimizePoint(ocLowPoint) + ); + + data.setItemLayout(dataIndex, { + sign: getSign(data, dataIndex, openVal, closeVal, closeDim), + initBaseline: openVal > closeVal + ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], // open point. + ends: ends, + brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal) + }); + } + + function getPoint(val, axisDimVal) { + var p = []; + p[cDimIdx] = axisDimVal; + p[vDimIdx] = val; + return (isNaN(axisDimVal) || isNaN(val)) + ? [NaN, NaN] + : coordSys.dataToPoint(p); + } + + function addBodyEnd(ends, point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + + point1[cDimIdx] = subPixelOptimize( + point1[cDimIdx] + candleWidth / 2, 1, false + ); + point2[cDimIdx] = subPixelOptimize( + point2[cDimIdx] - candleWidth / 2, 1, true + ); + + start + ? ends.push(point1, point2) + : ends.push(point2, point1); + } + + function makeBrushRect(lowestVal, highestVal, axisDimVal) { + var pmin = getPoint(lowestVal, axisDimVal); + var pmax = getPoint(highestVal, axisDimVal); + + pmin[cDimIdx] -= candleWidth / 2; + pmax[cDimIdx] -= candleWidth / 2; + + return { + x: pmin[0], + y: pmin[1], + width: vDimIdx ? candleWidth : pmax[0] - pmin[0], + height: vDimIdx ? pmax[1] - pmin[1] : candleWidth + }; + } + + function subPixelOptimizePoint(point) { + point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1); + return point; + } + } + + function largeProgress(params, data) { + // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...] + var points = new LargeArr$1(params.count * 5); + var offset = 0; + var point; + var tmpIn = []; + var tmpOut = []; + var dataIndex; + + while ((dataIndex = params.next()) != null) { + var axisDimVal = data.get(cDim, dataIndex); + var openVal = data.get(openDim, dataIndex); + var closeVal = data.get(closeDim, dataIndex); + var lowestVal = data.get(lowestDim, dataIndex); + var highestVal = data.get(highestDim, dataIndex); + + if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) { + points[offset++] = NaN; + offset += 4; + continue; + } + + points[offset++] = getSign(data, dataIndex, openVal, closeVal, closeDim); + + tmpIn[cDimIdx] = axisDimVal; + + tmpIn[vDimIdx] = lowestVal; + point = coordSys.dataToPoint(tmpIn, null, tmpOut); + points[offset++] = point ? point[0] : NaN; + points[offset++] = point ? point[1] : NaN; + tmpIn[vDimIdx] = highestVal; + point = coordSys.dataToPoint(tmpIn, null, tmpOut); + points[offset++] = point ? point[1] : NaN; + } + + data.setLayout('largePoints', points); + } + } +}; + +function getSign(data, dataIndex, openVal, closeVal, closeDim) { + var sign; + if (openVal > closeVal) { + sign = -1; + } + else if (openVal < closeVal) { + sign = 1; + } + else { + sign = dataIndex > 0 + // If close === open, compare with close of last record + ? (data.get(closeDim, dataIndex - 1) <= closeVal ? 1 : -1) + // No record of previous, set to be positive + : 1; + } + + return sign; +} + +function calculateCandleWidth(seriesModel, data) { + var baseAxis = seriesModel.getBaseAxis(); + var extent; + + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : ( + extent = baseAxis.getExtent(), + Math.abs(extent[1] - extent[0]) / data.count() + ); + + var barMaxWidth = parsePercent$1( + retrieve2(seriesModel.get('barMaxWidth'), bandWidth), + bandWidth + ); + var barMinWidth = parsePercent$1( + retrieve2(seriesModel.get('barMinWidth'), 1), + bandWidth + ); + var barWidth = seriesModel.get('barWidth'); + + return barWidth != null + ? parsePercent$1(barWidth, bandWidth) + // Put max outer to ensure bar visible in spite of overlap. + : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerPreprocessor(preprocessor); +registerVisual(candlestickVisual); +registerLayout(candlestickLayout); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.effectScatter', + + dependencies: ['grid', 'polar'], + + getInitialData: function (option, ecModel) { + return createListFromArray(this.getSource(), this); + }, + + brushSelector: 'point', + + defaultOption: { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + + effectType: 'ripple', + + progressive: 0, + + // When to show the effect, option: 'render'|'emphasis' + showEffectOn: 'render', + + // Ripple effect config + rippleEffect: { + period: 4, + // Scale of ripple + scale: 2.5, + // Brush type can be fill or stroke + brushType: 'fill' + }, + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // symbol: null, // 图形类型 + symbolSize: 10 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + // symbolRotate: null, // 图形旋转控制 + + // large: false, + // Available when large is true + // largeThreshold: 2000, + + // itemStyle: { + // opacity: 1 + // } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Symbol with ripple effect + * @module echarts/chart/helper/EffectSymbol + */ + +var EFFECT_RIPPLE_NUMBER = 3; + +function normalizeSymbolSize$1(symbolSize) { + if (!isArray(symbolSize)) { + symbolSize = [+symbolSize, +symbolSize]; + } + return symbolSize; +} + +function updateRipplePath(rippleGroup, effectCfg) { + rippleGroup.eachChild(function (ripplePath) { + ripplePath.attr({ + z: effectCfg.z, + zlevel: effectCfg.zlevel, + style: { + stroke: effectCfg.brushType === 'stroke' ? effectCfg.color : null, + fill: effectCfg.brushType === 'fill' ? effectCfg.color : null + } + }); + }); +} +/** + * @constructor + * @param {module:echarts/data/List} data + * @param {number} idx + * @extends {module:zrender/graphic/Group} + */ +function EffectSymbol(data, idx) { + Group.call(this); + + var symbol = new SymbolClz$1(data, idx); + var rippleGroup = new Group(); + this.add(symbol); + this.add(rippleGroup); + + rippleGroup.beforeUpdate = function () { + this.attr(symbol.getScale()); + }; + this.updateData(data, idx); +} + +var effectSymbolProto = EffectSymbol.prototype; + +effectSymbolProto.stopEffectAnimation = function () { + this.childAt(1).removeAll(); +}; + +effectSymbolProto.startEffectAnimation = function (effectCfg) { + var symbolType = effectCfg.symbolType; + var color = effectCfg.color; + var rippleGroup = this.childAt(1); + + for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) { + // var ripplePath = createSymbol( + // symbolType, -0.5, -0.5, 1, 1, color + // ); + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4136. + var ripplePath = createSymbol( + symbolType, -1, -1, 2, 2, color + ); + ripplePath.attr({ + style: { + strokeNoScale: true + }, + z2: 99, + silent: true, + scale: [0.5, 0.5] + }); + + var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset; + // TODO Configurable effectCfg.period + ripplePath.animate('', true) + .when(effectCfg.period, { + scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2] + }) + .delay(delay) + .start(); + ripplePath.animateStyle(true) + .when(effectCfg.period, { + opacity: 0 + }) + .delay(delay) + .start(); + + rippleGroup.add(ripplePath); + } + + updateRipplePath(rippleGroup, effectCfg); +}; + +/** + * Update effect symbol + */ +effectSymbolProto.updateEffectAnimation = function (effectCfg) { + var oldEffectCfg = this._effectCfg; + var rippleGroup = this.childAt(1); + + // Must reinitialize effect if following configuration changed + var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale']; + for (var i = 0; i < DIFFICULT_PROPS.length; i++) { + var propName = DIFFICULT_PROPS[i]; + if (oldEffectCfg[propName] !== effectCfg[propName]) { + this.stopEffectAnimation(); + this.startEffectAnimation(effectCfg); + return; + } + } + + updateRipplePath(rippleGroup, effectCfg); +}; + +/** + * Highlight symbol + */ +effectSymbolProto.highlight = function () { + this.trigger('emphasis'); +}; + +/** + * Downplay symbol + */ +effectSymbolProto.downplay = function () { + this.trigger('normal'); +}; + +/** + * Update symbol properties + * @param {module:echarts/data/List} data + * @param {number} idx + */ +effectSymbolProto.updateData = function (data, idx) { + var seriesModel = data.hostModel; + + this.childAt(0).updateData(data, idx); + + var rippleGroup = this.childAt(1); + var itemModel = data.getItemModel(idx); + var symbolType = data.getItemVisual(idx, 'symbol'); + var symbolSize = normalizeSymbolSize$1(data.getItemVisual(idx, 'symbolSize')); + var color = data.getItemVisual(idx, 'color'); + + rippleGroup.attr('scale', symbolSize); + + rippleGroup.traverse(function (ripplePath) { + ripplePath.attr({ + fill: color + }); + }); + + var symbolOffset = itemModel.getShallow('symbolOffset'); + if (symbolOffset) { + var pos = rippleGroup.position; + pos[0] = parsePercent$1(symbolOffset[0], symbolSize[0]); + pos[1] = parsePercent$1(symbolOffset[1], symbolSize[1]); + } + rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0; + + var effectCfg = {}; + + effectCfg.showEffectOn = seriesModel.get('showEffectOn'); + effectCfg.rippleScale = itemModel.get('rippleEffect.scale'); + effectCfg.brushType = itemModel.get('rippleEffect.brushType'); + effectCfg.period = itemModel.get('rippleEffect.period') * 1000; + effectCfg.effectOffset = idx / data.count(); + effectCfg.z = itemModel.getShallow('z') || 0; + effectCfg.zlevel = itemModel.getShallow('zlevel') || 0; + effectCfg.symbolType = symbolType; + effectCfg.color = color; + + this.off('mouseover').off('mouseout').off('emphasis').off('normal'); + + if (effectCfg.showEffectOn === 'render') { + this._effectCfg + ? this.updateEffectAnimation(effectCfg) + : this.startEffectAnimation(effectCfg); + + this._effectCfg = effectCfg; + } + else { + // Not keep old effect config + this._effectCfg = null; + + this.stopEffectAnimation(); + var symbol = this.childAt(0); + var onEmphasis = function () { + symbol.highlight(); + if (effectCfg.showEffectOn !== 'render') { + this.startEffectAnimation(effectCfg); + } + }; + var onNormal = function () { + symbol.downplay(); + if (effectCfg.showEffectOn !== 'render') { + this.stopEffectAnimation(); + } + }; + this.on('mouseover', onEmphasis, this) + .on('mouseout', onNormal, this) + .on('emphasis', onEmphasis, this) + .on('normal', onNormal, this); + } + + this._effectCfg = effectCfg; +}; + +effectSymbolProto.fadeOut = function (cb) { + this.off('mouseover').off('mouseout').off('emphasis').off('normal'); + cb && cb(); +}; + +inherits(EffectSymbol, Group); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendChartView({ + + type: 'effectScatter', + + init: function () { + this._symbolDraw = new SymbolDraw(EffectSymbol); + }, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var effectSymbolDraw = this._symbolDraw; + effectSymbolDraw.updateData(data); + this.group.add(effectSymbolDraw.group); + }, + + updateTransform: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + this.group.dirty(); + + var res = pointsLayout().reset(seriesModel); + if (res.progress) { + res.progress({ start: 0, end: data.count() }, data); + } + + this._symbolDraw.updateLayout(data); + }, + + _updateGroupTransform: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.getRoamTransform) { + this.group.transform = clone$2(coordSys.getRoamTransform()); + this.group.decomposeTransform(); + } + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(api); + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(visualSymbol('effectScatter', 'circle')); +registerLayout(pointsLayout('effectScatter')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Uint32Array, Float64Array, Float32Array */ + +var Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array; +var Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array; + +function compatEc2(seriesOpt) { + var data = seriesOpt.data; + if (data && data[0] && data[0][0] && data[0][0].coord) { + if (__DEV__) { + console.warn('Lines data configuration has been changed to' + + ' { coords:[[1,2],[2,3]] }'); + } + seriesOpt.data = map(data, function (itemOpt) { + var coords = [ + itemOpt[0].coord, itemOpt[1].coord + ]; + var target = { + coords: coords + }; + if (itemOpt[0].name) { + target.fromName = itemOpt[0].name; + } + if (itemOpt[1].name) { + target.toName = itemOpt[1].name; + } + return mergeAll([target, itemOpt[0], itemOpt[1]]); + }); + } +} + +var LinesSeries = SeriesModel.extend({ + + type: 'series.lines', + + dependencies: ['grid', 'polar'], + + visualColorAccessPath: 'lineStyle.color', + + init: function (option) { + // The input data may be null/undefined. + option.data = option.data || []; + + // Not using preprocessor because mergeOption may not have series.type + compatEc2(option); + + var result = this._processFlatCoordsArray(option.data); + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + if (result.flatCoords) { + option.data = new Float32Array(result.count); + } + + LinesSeries.superApply(this, 'init', arguments); + }, + + mergeOption: function (option) { + // The input data may be null/undefined. + option.data = option.data || []; + + compatEc2(option); + + if (option.data) { + // Only update when have option data to merge. + var result = this._processFlatCoordsArray(option.data); + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + if (result.flatCoords) { + option.data = new Float32Array(result.count); + } + } + + LinesSeries.superApply(this, 'mergeOption', arguments); + }, + + appendData: function (params) { + var result = this._processFlatCoordsArray(params.data); + if (result.flatCoords) { + if (!this._flatCoords) { + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + } + else { + this._flatCoords = concatArray(this._flatCoords, result.flatCoords); + this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset); + } + params.data = new Float32Array(result.count); + } + + this.getRawData().appendData(params.data); + }, + + _getCoordsFromItemModel: function (idx) { + var itemModel = this.getData().getItemModel(idx); + var coords = (itemModel.option instanceof Array) + ? itemModel.option : itemModel.getShallow('coords'); + + if (__DEV__) { + if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) { + throw new Error( + 'Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.' + ); + } + } + return coords; + }, + + getLineCoordsCount: function (idx) { + if (this._flatCoordsOffset) { + return this._flatCoordsOffset[idx * 2 + 1]; + } + else { + return this._getCoordsFromItemModel(idx).length; + } + }, + + getLineCoords: function (idx, out) { + if (this._flatCoordsOffset) { + var offset = this._flatCoordsOffset[idx * 2]; + var len = this._flatCoordsOffset[idx * 2 + 1]; + for (var i = 0; i < len; i++) { + out[i] = out[i] || []; + out[i][0] = this._flatCoords[offset + i * 2]; + out[i][1] = this._flatCoords[offset + i * 2 + 1]; + } + return len; + } + else { + var coords = this._getCoordsFromItemModel(idx); + for (var i = 0; i < coords.length; i++) { + out[i] = out[i] || []; + out[i][0] = coords[i][0]; + out[i][1] = coords[i][1]; + } + return coords.length; + } + }, + + _processFlatCoordsArray: function (data) { + var startOffset = 0; + if (this._flatCoords) { + startOffset = this._flatCoords.length; + } + // Stored as a typed array. In format + // Points Count(2) | x | y | x | y | Points Count(3) | x | y | x | y | x | y | + if (typeof data[0] === 'number') { + var len = data.length; + // Store offset and len of each segment + var coordsOffsetAndLenStorage = new Uint32Arr(len); + var coordsStorage = new Float64Arr(len); + var coordsCursor = 0; + var offsetCursor = 0; + var dataCount = 0; + for (var i = 0; i < len;) { + dataCount++; + var count = data[i++]; + // Offset + coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset; + // Len + coordsOffsetAndLenStorage[offsetCursor++] = count; + for (var k = 0; k < count; k++) { + var x = data[i++]; + var y = data[i++]; + coordsStorage[coordsCursor++] = x; + coordsStorage[coordsCursor++] = y; + + if (i > len) { + if (__DEV__) { + throw new Error('Invalid data format.'); + } + } + } + } + + return { + flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor), + flatCoords: coordsStorage, + count: dataCount + }; + } + + return { + flatCoordsOffset: null, + flatCoords: null, + count: data.length + }; + }, + + getInitialData: function (option, ecModel) { + if (__DEV__) { + var CoordSys = CoordinateSystemManager.get(option.coordinateSystem); + if (!CoordSys) { + throw new Error('Unkown coordinate system ' + option.coordinateSystem); + } + } + + var lineData = new List(['value'], this); + lineData.hasItemOption = false; + + lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) { + // dataItem is simply coords + if (dataItem instanceof Array) { + return NaN; + } + else { + lineData.hasItemOption = true; + var value = dataItem.value; + if (value != null) { + return value instanceof Array ? value[dimIndex] : value; + } + } + }); + + return lineData; + }, + + formatTooltip: function (dataIndex) { + var data = this.getData(); + var itemModel = data.getItemModel(dataIndex); + var name = itemModel.get('name'); + if (name) { + return name; + } + var fromName = itemModel.get('fromName'); + var toName = itemModel.get('toName'); + var html = []; + fromName != null && html.push(fromName); + toName != null && html.push(toName); + + return encodeHTML(html.join(' > ')); + }, + + preventIncremental: function () { + return !!this.get('effect.show'); + }, + + getProgressive: function () { + var progressive = this.option.progressive; + if (progressive == null) { + return this.option.large ? 1e4 : this.get('progressive'); + } + return progressive; + }, + + getProgressiveThreshold: function () { + var progressiveThreshold = this.option.progressiveThreshold; + if (progressiveThreshold == null) { + return this.option.large ? 2e4 : this.get('progressiveThreshold'); + } + return progressiveThreshold; + }, + + defaultOption: { + coordinateSystem: 'geo', + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // Cartesian coordinate system + xAxisIndex: 0, + yAxisIndex: 0, + + symbol: ['none', 'none'], + symbolSize: [10, 10], + // Geo coordinate system + geoIndex: 0, + + effect: { + show: false, + period: 4, + // Animation delay. support callback + // delay: 0, + // If move with constant speed px/sec + // period will be ignored if this property is > 0, + constantSpeed: 0, + symbol: 'circle', + symbolSize: 3, + loop: true, + // Length of trail, 0 - 1 + trailLength: 0.2 + // Same with lineStyle.color + // color + }, + + large: false, + // Available when large is true + largeThreshold: 2000, + + // If lines are polyline + // polyline not support curveness, label, animation + polyline: false, + + label: { + show: false, + position: 'end' + // distance: 5, + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + }, + + lineStyle: { + opacity: 0.5 + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Provide effect for line + * @module echarts/chart/helper/EffectLine + */ + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Line} + */ +function EffectLine(lineData, idx, seriesScope) { + Group.call(this); + + this.add(this.createLine(lineData, idx, seriesScope)); + + this._updateEffectSymbol(lineData, idx); +} + +var effectLineProto = EffectLine.prototype; + +effectLineProto.createLine = function (lineData, idx, seriesScope) { + return new Line$1(lineData, idx, seriesScope); +}; + +effectLineProto._updateEffectSymbol = function (lineData, idx) { + var itemModel = lineData.getItemModel(idx); + var effectModel = itemModel.getModel('effect'); + var size = effectModel.get('symbolSize'); + var symbolType = effectModel.get('symbol'); + if (!isArray(size)) { + size = [size, size]; + } + var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color'); + var symbol = this.childAt(1); + + if (this._symbolType !== symbolType) { + // Remove previous + this.remove(symbol); + + symbol = createSymbol( + symbolType, -0.5, -0.5, 1, 1, color + ); + symbol.z2 = 100; + symbol.culling = true; + + this.add(symbol); + } + + // Symbol may be removed if loop is false + if (!symbol) { + return; + } + + // Shadow color is same with color in default + symbol.setStyle('shadowColor', color); + symbol.setStyle(effectModel.getItemStyle(['color'])); + + symbol.attr('scale', size); + + symbol.setColor(color); + symbol.attr('scale', size); + + this._symbolType = symbolType; + + this._updateEffectAnimation(lineData, effectModel, idx); +}; + +effectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) { + + var symbol = this.childAt(1); + if (!symbol) { + return; + } + + var self = this; + + var points = lineData.getItemLayout(idx); + + var period = effectModel.get('period') * 1000; + var loop = effectModel.get('loop'); + var constantSpeed = effectModel.get('constantSpeed'); + var delayExpr = retrieve(effectModel.get('delay'), function (idx) { + return idx / lineData.count() * period / 3; + }); + var isDelayFunc = typeof delayExpr === 'function'; + + // Ignore when updating + symbol.ignore = true; + + this.updateAnimationPoints(symbol, points); + + if (constantSpeed > 0) { + period = this.getLineLength(symbol) / constantSpeed * 1000; + } + + if (period !== this._period || loop !== this._loop) { + + symbol.stopAnimation(); + + var delay = delayExpr; + if (isDelayFunc) { + delay = delayExpr(idx); + } + if (symbol.__t > 0) { + delay = -period * symbol.__t; + } + symbol.__t = 0; + var animator = symbol.animate('', loop) + .when(period, { + __t: 1 + }) + .delay(delay) + .during(function () { + self.updateSymbolPosition(symbol); + }); + if (!loop) { + animator.done(function () { + self.remove(symbol); + }); + } + animator.start(); + } + + this._period = period; + this._loop = loop; +}; + +effectLineProto.getLineLength = function (symbol) { + // Not so accurate + return (dist(symbol.__p1, symbol.__cp1) + + dist(symbol.__cp1, symbol.__p2)); +}; + +effectLineProto.updateAnimationPoints = function (symbol, points) { + symbol.__p1 = points[0]; + symbol.__p2 = points[1]; + symbol.__cp1 = points[2] || [ + (points[0][0] + points[1][0]) / 2, + (points[0][1] + points[1][1]) / 2 + ]; +}; + +effectLineProto.updateData = function (lineData, idx, seriesScope) { + this.childAt(0).updateData(lineData, idx, seriesScope); + this._updateEffectSymbol(lineData, idx); +}; + +effectLineProto.updateSymbolPosition = function (symbol) { + var p1 = symbol.__p1; + var p2 = symbol.__p2; + var cp1 = symbol.__cp1; + var t = symbol.__t; + var pos = symbol.position; + var quadraticAt$$1 = quadraticAt; + var quadraticDerivativeAt$$1 = quadraticDerivativeAt; + pos[0] = quadraticAt$$1(p1[0], cp1[0], p2[0], t); + pos[1] = quadraticAt$$1(p1[1], cp1[1], p2[1], t); + + // Tangent + var tx = quadraticDerivativeAt$$1(p1[0], cp1[0], p2[0], t); + var ty = quadraticDerivativeAt$$1(p1[1], cp1[1], p2[1], t); + + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; + + symbol.ignore = false; +}; + + +effectLineProto.updateLayout = function (lineData, idx) { + this.childAt(0).updateLayout(lineData, idx); + + var effectModel = lineData.getItemModel(idx).getModel('effect'); + this._updateEffectAnimation(lineData, effectModel, idx); +}; + +inherits(EffectLine, Group); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/chart/helper/Line + */ + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Polyline} + */ +function Polyline$2(lineData, idx, seriesScope) { + Group.call(this); + + this._createPolyline(lineData, idx, seriesScope); +} + +var polylineProto = Polyline$2.prototype; + +polylineProto._createPolyline = function (lineData, idx, seriesScope) { + // var seriesModel = lineData.hostModel; + var points = lineData.getItemLayout(idx); + + var line = new Polyline({ + shape: { + points: points + } + }); + + this.add(line); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +polylineProto.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childAt(0); + var target = { + shape: { + points: lineData.getItemLayout(idx) + } + }; + updateProps(line, target, seriesModel, idx); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +polylineProto._updateCommonStl = function (lineData, idx, seriesScope) { + var line = this.childAt(0); + var itemModel = lineData.getItemModel(idx); + + var visualColor = lineData.getItemVisual(idx, 'color'); + + var lineStyle = seriesScope && seriesScope.lineStyle; + var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle; + + if (!seriesScope || lineData.hasItemOption) { + lineStyle = itemModel.getModel('lineStyle').getLineStyle(); + hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle(); + } + line.useStyle(defaults( + { + strokeNoScale: true, + fill: 'none', + stroke: visualColor + }, + lineStyle + )); + line.hoverStyle = hoverLineStyle; + + setHoverStyle(this); +}; + +polylineProto.updateLayout = function (lineData, idx) { + var polyline = this.childAt(0); + polyline.setShape('points', lineData.getItemLayout(idx)); +}; + +inherits(Polyline$2, Group); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Provide effect for line + * @module echarts/chart/helper/EffectLine + */ + +/** + * @constructor + * @extends {module:echarts/chart/helper/EffectLine} + * @alias {module:echarts/chart/helper/Polyline} + */ +function EffectPolyline(lineData, idx, seriesScope) { + EffectLine.call(this, lineData, idx, seriesScope); + this._lastFrame = 0; + this._lastFramePercent = 0; +} + +var effectPolylineProto = EffectPolyline.prototype; + +// Overwrite +effectPolylineProto.createLine = function (lineData, idx, seriesScope) { + return new Polyline$2(lineData, idx, seriesScope); +}; + +// Overwrite +effectPolylineProto.updateAnimationPoints = function (symbol, points) { + this._points = points; + var accLenArr = [0]; + var len$$1 = 0; + for (var i = 1; i < points.length; i++) { + var p1 = points[i - 1]; + var p2 = points[i]; + len$$1 += dist(p1, p2); + accLenArr.push(len$$1); + } + if (len$$1 === 0) { + return; + } + + for (var i = 0; i < accLenArr.length; i++) { + accLenArr[i] /= len$$1; + } + this._offsets = accLenArr; + this._length = len$$1; +}; + +// Overwrite +effectPolylineProto.getLineLength = function (symbol) { + return this._length; +}; + +// Overwrite +effectPolylineProto.updateSymbolPosition = function (symbol) { + var t = symbol.__t; + var points = this._points; + var offsets = this._offsets; + var len$$1 = points.length; + + if (!offsets) { + // Has length 0 + return; + } + + var lastFrame = this._lastFrame; + var frame; + + if (t < this._lastFramePercent) { + // Start from the next frame + // PENDING start from lastFrame ? + var start = Math.min(lastFrame + 1, len$$1 - 1); + for (frame = start; frame >= 0; frame--) { + if (offsets[frame] <= t) { + break; + } + } + // PENDING really need to do this ? + frame = Math.min(frame, len$$1 - 2); + } + else { + for (var frame = lastFrame; frame < len$$1; frame++) { + if (offsets[frame] > t) { + break; + } + } + frame = Math.min(frame - 1, len$$1 - 2); + } + + lerp( + symbol.position, points[frame], points[frame + 1], + (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]) + ); + + var tx = points[frame + 1][0] - points[frame][0]; + var ty = points[frame + 1][1] - points[frame][1]; + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; + + this._lastFrame = frame; + this._lastFramePercent = t; + + symbol.ignore = false; +}; + +inherits(EffectPolyline, EffectLine); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO Batch by color + +var LargeLineShape = extendShape({ + + shape: { + polyline: false, + curveness: 0, + segs: [] + }, + + buildPath: function (path, shape) { + var segs = shape.segs; + var curveness = shape.curveness; + + if (shape.polyline) { + for (var i = 0; i < segs.length;) { + var count = segs[i++]; + if (count > 0) { + path.moveTo(segs[i++], segs[i++]); + for (var k = 1; k < count; k++) { + path.lineTo(segs[i++], segs[i++]); + } + } + } + } + else { + for (var i = 0; i < segs.length;) { + var x0 = segs[i++]; + var y0 = segs[i++]; + var x1 = segs[i++]; + var y1 = segs[i++]; + path.moveTo(x0, y0); + if (curveness > 0) { + var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness; + var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness; + path.quadraticCurveTo(x2, y2, x1, y1); + } + else { + path.lineTo(x1, y1); + } + } + } + }, + + findDataIndex: function (x, y) { + + var shape = this.shape; + var segs = shape.segs; + var curveness = shape.curveness; + + if (shape.polyline) { + var dataIndex = 0; + for (var i = 0; i < segs.length;) { + var count = segs[i++]; + if (count > 0) { + var x0 = segs[i++]; + var y0 = segs[i++]; + for (var k = 1; k < count; k++) { + var x1 = segs[i++]; + var y1 = segs[i++]; + if (containStroke$1(x0, y0, x1, y1)) { + return dataIndex; + } + } + } + + dataIndex++; + } + } + else { + var dataIndex = 0; + for (var i = 0; i < segs.length;) { + var x0 = segs[i++]; + var y0 = segs[i++]; + var x1 = segs[i++]; + var y1 = segs[i++]; + if (curveness > 0) { + var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness; + var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness; + + if (containStroke$3(x0, y0, x2, y2, x1, y1)) { + return dataIndex; + } + } + else { + if (containStroke$1(x0, y0, x1, y1)) { + return dataIndex; + } + } + + dataIndex++; + } + } + + return -1; + } +}); + +function LargeLineDraw() { + this.group = new Group(); +} + +var largeLineProto = LargeLineDraw.prototype; + +largeLineProto.isPersistent = function () { + return !this._incremental; +}; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + */ +largeLineProto.updateData = function (data) { + this.group.removeAll(); + + var lineEl = new LargeLineShape({ + rectHover: true, + cursor: 'default' + }); + lineEl.setShape({ + segs: data.getLayout('linesPoints') + }); + + this._setCommon(lineEl, data); + + // Add back + this.group.add(lineEl); + + this._incremental = null; +}; + +/** + * @override + */ +largeLineProto.incrementalPrepareUpdate = function (data) { + this.group.removeAll(); + + this._clearIncremental(); + + if (data.count() > 5e5) { + if (!this._incremental) { + this._incremental = new IncrementalDisplayble({ + silent: true + }); + } + this.group.add(this._incremental); + } + else { + this._incremental = null; + } +}; + +/** + * @override + */ +largeLineProto.incrementalUpdate = function (taskParams, data) { + var lineEl = new LargeLineShape(); + lineEl.setShape({ + segs: data.getLayout('linesPoints') + }); + + this._setCommon(lineEl, data, !!this._incremental); + + if (!this._incremental) { + lineEl.rectHover = true; + lineEl.cursor = 'default'; + lineEl.__startIndex = taskParams.start; + this.group.add(lineEl); + } + else { + this._incremental.addDisplayable(lineEl, true); + } +}; + +/** + * @override + */ +largeLineProto.remove = function () { + this._clearIncremental(); + this._incremental = null; + this.group.removeAll(); +}; + +largeLineProto._setCommon = function (lineEl, data, isIncremental) { + var hostModel = data.hostModel; + + lineEl.setShape({ + polyline: hostModel.get('polyline'), + curveness: hostModel.get('lineStyle.curveness') + }); + + lineEl.useStyle( + hostModel.getModel('lineStyle').getLineStyle() + ); + lineEl.style.strokeNoScale = true; + + var visualColor = data.getVisual('color'); + if (visualColor) { + lineEl.setStyle('stroke', visualColor); + } + lineEl.setStyle('fill'); + + if (!isIncremental) { + // Enable tooltip + // PENDING May have performance issue when path is extremely large + lineEl.seriesIndex = hostModel.seriesIndex; + lineEl.on('mousemove', function (e) { + lineEl.dataIndex = null; + var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY); + if (dataIndex > 0) { + // Provide dataIndex for tooltip + lineEl.dataIndex = dataIndex + lineEl.__startIndex; + } + }); + } +}; + +largeLineProto._clearIncremental = function () { + var incremental = this._incremental; + if (incremental) { + incremental.clearDisplaybles(); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Float32Array */ + +var linesLayout = { + seriesType: 'lines', + + plan: createRenderPlanner(), + + reset: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var isPolyline = seriesModel.get('polyline'); + var isLarge = seriesModel.pipelineContext.large; + + function progress(params, lineData) { + var lineCoords = []; + if (isLarge) { + var points; + var segCount = params.end - params.start; + if (isPolyline) { + var totalCoordsCount = 0; + for (var i = params.start; i < params.end; i++) { + totalCoordsCount += seriesModel.getLineCoordsCount(i); + } + points = new Float32Array(segCount + totalCoordsCount * 2); + } + else { + points = new Float32Array(segCount * 4); + } + + var offset = 0; + var pt = []; + for (var i = params.start; i < params.end; i++) { + var len = seriesModel.getLineCoords(i, lineCoords); + if (isPolyline) { + points[offset++] = len; + } + for (var k = 0; k < len; k++) { + pt = coordSys.dataToPoint(lineCoords[k], false, pt); + points[offset++] = pt[0]; + points[offset++] = pt[1]; + } + } + + lineData.setLayout('linesPoints', points); + } + else { + for (var i = params.start; i < params.end; i++) { + var itemModel = lineData.getItemModel(i); + var len = seriesModel.getLineCoords(i, lineCoords); + + var pts = []; + if (isPolyline) { + for (var j = 0; j < len; j++) { + pts.push(coordSys.dataToPoint(lineCoords[j])); + } + } + else { + pts[0] = coordSys.dataToPoint(lineCoords[0]); + pts[1] = coordSys.dataToPoint(lineCoords[1]); + + var curveness = itemModel.get('lineStyle.curveness'); + if (+curveness) { + pts[2] = [ + (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, + (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness + ]; + } + } + lineData.setItemLayout(i, pts); + } + } + } + + return { progress: progress }; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendChartView({ + + type: 'lines', + + init: function () {}, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var lineDraw = this._updateLineDraw(data, seriesModel); + + var zlevel = seriesModel.get('zlevel'); + var trailLength = seriesModel.get('effect.trailLength'); + + var zr = api.getZr(); + // Avoid the drag cause ghost shadow + // FIXME Better way ? + // SVG doesn't support + var isSvg = zr.painter.getType() === 'svg'; + if (!isSvg) { + zr.painter.getLayer(zlevel).clear(true); + } + // Config layer with motion blur + if (this._lastZlevel != null && !isSvg) { + zr.configLayer(this._lastZlevel, { + motionBlur: false + }); + } + if (this._showEffect(seriesModel) && trailLength) { + if (__DEV__) { + var notInIndividual = false; + ecModel.eachSeries(function (otherSeriesModel) { + if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) { + notInIndividual = true; + } + }); + notInIndividual && console.warn('Lines with trail effect should have an individual zlevel'); + } + + if (!isSvg) { + zr.configLayer(zlevel, { + motionBlur: true, + lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0) + }); + } + } + + lineDraw.updateData(data); + + this._lastZlevel = zlevel; + + this._finished = true; + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var lineDraw = this._updateLineDraw(data, seriesModel); + + lineDraw.incrementalPrepareUpdate(data); + + this._clearLayer(api); + + this._finished = false; + }, + + incrementalRender: function (taskParams, seriesModel, ecModel) { + this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData()); + + this._finished = taskParams.end === seriesModel.getData().count(); + }, + + updateTransform: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var pipelineContext = seriesModel.pipelineContext; + + if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) { + // TODO Don't have to do update in large mode. Only do it when there are millions of data. + return { + update: true + }; + } + else { + // TODO Use same logic with ScatterView. + // Manually update layout + var res = linesLayout.reset(seriesModel); + if (res.progress) { + res.progress({ start: 0, end: data.count() }, data); + } + this._lineDraw.updateLayout(); + this._clearLayer(api); + } + }, + + _updateLineDraw: function (data, seriesModel) { + var lineDraw = this._lineDraw; + var hasEffect = this._showEffect(seriesModel); + var isPolyline = !!seriesModel.get('polyline'); + var pipelineContext = seriesModel.pipelineContext; + var isLargeDraw = pipelineContext.large; + + if (__DEV__) { + if (hasEffect && isLargeDraw) { + console.warn('Large lines not support effect'); + } + } + if (!lineDraw + || hasEffect !== this._hasEffet + || isPolyline !== this._isPolyline + || isLargeDraw !== this._isLargeDraw + ) { + if (lineDraw) { + lineDraw.remove(); + } + lineDraw = this._lineDraw = isLargeDraw + ? new LargeLineDraw() + : new LineDraw( + isPolyline + ? (hasEffect ? EffectPolyline : Polyline$2) + : (hasEffect ? EffectLine : Line$1) + ); + this._hasEffet = hasEffect; + this._isPolyline = isPolyline; + this._isLargeDraw = isLargeDraw; + this.group.removeAll(); + } + + this.group.add(lineDraw.group); + + return lineDraw; + }, + + _showEffect: function (seriesModel) { + return !!seriesModel.get('effect.show'); + }, + + _clearLayer: function (api) { + // Not use motion when dragging or zooming + var zr = api.getZr(); + var isSvg = zr.painter.getType() === 'svg'; + if (!isSvg && this._lastZlevel != null) { + zr.painter.getLayer(this._lastZlevel).clear(true); + } + }, + + remove: function (ecModel, api) { + this._lineDraw && this._lineDraw.remove(); + this._lineDraw = null; + // Clear motion when lineDraw is removed + this._clearLayer(api); + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +function normalize$2(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + return a; +} + +var opacityQuery = 'lineStyle.opacity'.split('.'); + +var linesVisual = { + seriesType: 'lines', + reset: function (seriesModel, ecModel, api) { + var symbolType = normalize$2(seriesModel.get('symbol')); + var symbolSize = normalize$2(seriesModel.get('symbolSize')); + var data = seriesModel.getData(); + + data.setVisual('fromSymbol', symbolType && symbolType[0]); + data.setVisual('toSymbol', symbolType && symbolType[1]); + data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + data.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + data.setVisual('opacity', seriesModel.get(opacityQuery)); + + function dataEach(data, idx) { + var itemModel = data.getItemModel(idx); + var symbolType = normalize$2(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$2(itemModel.getShallow('symbolSize', true)); + var opacity = itemModel.get(opacityQuery); + + symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]); + symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]); + symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]); + symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]); + + data.setItemVisual(idx, 'opacity', opacity); + } + + return {dataEach: data.hasItemOption ? dataEach : null}; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerLayout(linesLayout); +registerVisual(linesVisual); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + type: 'series.heatmap', + + getInitialData: function (option, ecModel) { + return createListFromArray(this.getSource(), this, { + generateCoord: 'value' + }); + }, + + preventIncremental: function () { + var coordSysCreator = CoordinateSystemManager.get(this.get('coordinateSystem')); + if (coordSysCreator && coordSysCreator.dimensions) { + return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat'; + } + }, + + defaultOption: { + + // Cartesian2D or geo + coordinateSystem: 'cartesian2d', + + zlevel: 0, + + z: 2, + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Geo coordinate system + geoIndex: 0, + + blurSize: 30, + + pointSize: 20, + + maxOpacity: 1, + + minOpacity: 0 + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Uint8ClampedArray */ + +/** + * @file defines echarts Heatmap Chart + * @author Ovilia (me@zhangwenli.com) + * Inspired by https://github.com/mourner/simpleheat + * + * @module + */ + +var GRADIENT_LEVELS = 256; + +/** + * Heatmap Chart + * + * @class + */ +function Heatmap() { + var canvas = createCanvas(); + this.canvas = canvas; + + this.blurSize = 30; + this.pointSize = 20; + + this.maxOpacity = 1; + this.minOpacity = 0; + + this._gradientPixels = {}; +} + +Heatmap.prototype = { + /** + * Renders Heatmap and returns the rendered canvas + * @param {Array} data array of data, each has x, y, value + * @param {number} width canvas width + * @param {number} height canvas height + */ + update: function (data, width, height, normalize, colorFunc, isInRange) { + var brush = this._getBrush(); + var gradientInRange = this._getGradient(data, colorFunc, 'inRange'); + var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange'); + var r = this.pointSize + this.blurSize; + + var canvas = this.canvas; + var ctx = canvas.getContext('2d'); + var len = data.length; + canvas.width = width; + canvas.height = height; + for (var i = 0; i < len; ++i) { + var p = data[i]; + var x = p[0]; + var y = p[1]; + var value = p[2]; + + // calculate alpha using value + var alpha = normalize(value); + + // draw with the circle brush with alpha + ctx.globalAlpha = alpha; + ctx.drawImage(brush, x - r, y - r); + } + + if (!canvas.width || !canvas.height) { + // Avoid "Uncaught DOMException: Failed to execute 'getImageData' on + // 'CanvasRenderingContext2D': The source height is 0." + return canvas; + } + + // colorize the canvas using alpha value and set with gradient + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + + var pixels = imageData.data; + var offset = 0; + var pixelLen = pixels.length; + var minOpacity = this.minOpacity; + var maxOpacity = this.maxOpacity; + var diffOpacity = maxOpacity - minOpacity; + + while (offset < pixelLen) { + var alpha = pixels[offset + 3] / 256; + var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4; + // Simple optimize to ignore the empty data + if (alpha > 0) { + var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; + // Any alpha > 0 will be mapped to [minOpacity, maxOpacity] + alpha > 0 && (alpha = alpha * diffOpacity + minOpacity); + pixels[offset++] = gradient[gradientOffset]; + pixels[offset++] = gradient[gradientOffset + 1]; + pixels[offset++] = gradient[gradientOffset + 2]; + pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256; + } + else { + offset += 4; + } + } + ctx.putImageData(imageData, 0, 0); + + return canvas; + }, + + /** + * get canvas of a black circle brush used for canvas to draw later + * @private + * @returns {Object} circle brush canvas + */ + _getBrush: function () { + var brushCanvas = this._brushCanvas || (this._brushCanvas = createCanvas()); + // set brush size + var r = this.pointSize + this.blurSize; + var d = r * 2; + brushCanvas.width = d; + brushCanvas.height = d; + + var ctx = brushCanvas.getContext('2d'); + ctx.clearRect(0, 0, d, d); + + // in order to render shadow without the distinct circle, + // draw the distinct circle in an invisible place, + // and use shadowOffset to draw shadow in the center of the canvas + ctx.shadowOffsetX = d; + ctx.shadowBlur = this.blurSize; + // draw the shadow in black, and use alpha and shadow blur to generate + // color in color map + ctx.shadowColor = '#000'; + + // draw circle in the left to the canvas + ctx.beginPath(); + ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true); + ctx.closePath(); + ctx.fill(); + return brushCanvas; + }, + + /** + * get gradient color map + * @private + */ + _getGradient: function (data, colorFunc, state) { + var gradientPixels = this._gradientPixels; + var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4)); + var color = [0, 0, 0, 0]; + var off = 0; + for (var i = 0; i < 256; i++) { + colorFunc[state](i / 255, true, color); + pixelsSingleState[off++] = color[0]; + pixelsSingleState[off++] = color[1]; + pixelsSingleState[off++] = color[2]; + pixelsSingleState[off++] = color[3]; + } + return pixelsSingleState; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function getIsInPiecewiseRange(dataExtent, pieceList, selected) { + var dataSpan = dataExtent[1] - dataExtent[0]; + pieceList = map(pieceList, function (piece) { + return { + interval: [ + (piece.interval[0] - dataExtent[0]) / dataSpan, + (piece.interval[1] - dataExtent[0]) / dataSpan + ] + }; + }); + var len = pieceList.length; + var lastIndex = 0; + + return function (val) { + // Try to find in the location of the last found + for (var i = lastIndex; i < len; i++) { + var interval = pieceList[i].interval; + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + if (i === len) { // Not found, back interation + for (var i = lastIndex - 1; i >= 0; i--) { + var interval = pieceList[i].interval; + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + } + return i >= 0 && i < len && selected[i]; + }; +} + +function getIsInContinuousRange(dataExtent, range) { + var dataSpan = dataExtent[1] - dataExtent[0]; + range = [ + (range[0] - dataExtent[0]) / dataSpan, + (range[1] - dataExtent[0]) / dataSpan + ]; + return function (val) { + return val >= range[0] && val <= range[1]; + }; +} + +function isGeoCoordSys(coordSys) { + var dimensions = coordSys.dimensions; + // Not use coorSys.type === 'geo' because coordSys maybe extended + return dimensions[0] === 'lng' && dimensions[1] === 'lat'; +} + +extendChartView({ + + type: 'heatmap', + + render: function (seriesModel, ecModel, api) { + var visualMapOfThisSeries; + ecModel.eachComponent('visualMap', function (visualMap) { + visualMap.eachTargetSeries(function (targetSeries) { + if (targetSeries === seriesModel) { + visualMapOfThisSeries = visualMap; + } + }); + }); + + if (__DEV__) { + if (!visualMapOfThisSeries) { + throw new Error('Heatmap must use with visualMap'); + } + } + + this.group.removeAll(); + + this._incrementalDisplayable = null; + + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') { + this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count()); + } + else if (isGeoCoordSys(coordSys)) { + this._renderOnGeo( + coordSys, seriesModel, visualMapOfThisSeries, api + ); + } + }, + + incrementalPrepareRender: function (seriesModel, ecModel, api) { + this.group.removeAll(); + }, + + incrementalRender: function (params, seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys) { + this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true); + } + }, + + _renderOnCartesianAndCalendar: function (seriesModel, api, start, end, incremental) { + + var coordSys = seriesModel.coordinateSystem; + var width; + var height; + + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + + if (__DEV__) { + if (!(xAxis.type === 'category' && yAxis.type === 'category')) { + throw new Error('Heatmap on cartesian must have two category axes'); + } + if (!(xAxis.onBand && yAxis.onBand)) { + throw new Error('Heatmap on cartesian must have two axes with boundaryGap true'); + } + } + + width = xAxis.getBandWidth(); + height = yAxis.getBandWidth(); + } + + var group = this.group; + var data = seriesModel.getData(); + + var itemStyleQuery = 'itemStyle'; + var hoverItemStyleQuery = 'emphasis.itemStyle'; + var labelQuery = 'label'; + var hoverLabelQuery = 'emphasis.label'; + var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']); + var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle(); + var labelModel = seriesModel.getModel(labelQuery); + var hoverLabelModel = seriesModel.getModel(hoverLabelQuery); + var coordSysType = coordSys.type; + + + var dataDims = coordSysType === 'cartesian2d' + ? [ + data.mapDimension('x'), + data.mapDimension('y'), + data.mapDimension('value') + ] + : [ + data.mapDimension('time'), + data.mapDimension('value') + ]; + + for (var idx = start; idx < end; idx++) { + var rect; + + if (coordSysType === 'cartesian2d') { + // Ignore empty data + if (isNaN(data.get(dataDims[2], idx))) { + continue; + } + + var point = coordSys.dataToPoint([ + data.get(dataDims[0], idx), + data.get(dataDims[1], idx) + ]); + + rect = new Rect({ + shape: { + x: point[0] - width / 2, + y: point[1] - height / 2, + width: width, + height: height + }, + style: { + fill: data.getItemVisual(idx, 'color'), + opacity: data.getItemVisual(idx, 'opacity') + } + }); + } + else { + // Ignore empty data + if (isNaN(data.get(dataDims[1], idx))) { + continue; + } + + rect = new Rect({ + z2: 1, + shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape, + style: { + fill: data.getItemVisual(idx, 'color'), + opacity: data.getItemVisual(idx, 'opacity') + } + }); + } + + var itemModel = data.getItemModel(idx); + + // Optimization for large datset + if (data.hasItemOption) { + style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']); + hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle(); + labelModel = itemModel.getModel(labelQuery); + hoverLabelModel = itemModel.getModel(hoverLabelQuery); + } + + var rawValue = seriesModel.getRawValue(idx); + var defaultText = '-'; + if (rawValue && rawValue[2] != null) { + defaultText = rawValue[2]; + } + + setLabelStyle( + style, hoverStl, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultText: defaultText, + isRectText: true + } + ); + + rect.setStyle(style); + setHoverStyle(rect, data.hasItemOption ? hoverStl : extend({}, hoverStl)); + + rect.incremental = incremental; + // PENDING + if (incremental) { + // Rect must use hover layer if it's incremental. + rect.useHoverLayer = true; + } + + group.add(rect); + data.setItemGraphicEl(idx, rect); + } + }, + + _renderOnGeo: function (geo, seriesModel, visualMapModel, api) { + var inRangeVisuals = visualMapModel.targetVisuals.inRange; + var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; + // if (!visualMapping) { + // throw new Error('Data range must have color visuals'); + // } + + var data = seriesModel.getData(); + var hmLayer = this._hmLayer || (this._hmLayer || new Heatmap()); + hmLayer.blurSize = seriesModel.get('blurSize'); + hmLayer.pointSize = seriesModel.get('pointSize'); + hmLayer.minOpacity = seriesModel.get('minOpacity'); + hmLayer.maxOpacity = seriesModel.get('maxOpacity'); + + var rect = geo.getViewRect().clone(); + var roamTransform = geo.getRoamTransform(); + rect.applyTransform(roamTransform); + + // Clamp on viewport + var x = Math.max(rect.x, 0); + var y = Math.max(rect.y, 0); + var x2 = Math.min(rect.width + rect.x, api.getWidth()); + var y2 = Math.min(rect.height + rect.y, api.getHeight()); + var width = x2 - x; + var height = y2 - y; + + var dims = [ + data.mapDimension('lng'), + data.mapDimension('lat'), + data.mapDimension('value') + ]; + + var points = data.mapArray(dims, function (lng, lat, value) { + var pt = geo.dataToPoint([lng, lat]); + pt[0] -= x; + pt[1] -= y; + pt.push(value); + return pt; + }); + + var dataExtent = visualMapModel.getExtent(); + var isInRange = visualMapModel.type === 'visualMap.continuous' + ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) + : getIsInPiecewiseRange( + dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected + ); + + hmLayer.update( + points, width, height, + inRangeVisuals.color.getNormalizer(), + { + inRange: inRangeVisuals.color.getColorMapper(), + outOfRange: outOfRangeVisuals.color.getColorMapper() + }, + isInRange + ); + var img = new ZImage({ + style: { + width: width, + height: height, + x: x, + y: y, + image: hmLayer.canvas + }, + silent: true + }); + this.group.add(img); + }, + + dispose: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PictorialBarSeries = BaseBarSeries.extend({ + + type: 'series.pictorialBar', + + dependencies: ['grid'], + + defaultOption: { + symbol: 'circle', // Customized bar shape + symbolSize: null, // Can be ['100%', '100%'], null means auto. + symbolRotate: null, + + symbolPosition: null, // 'start' or 'end' or 'center', null means auto. + symbolOffset: null, + symbolMargin: null, // start margin and end margin. Can be a number or a percent string. + // Auto margin by defualt. + symbolRepeat: false, // false/null/undefined, means no repeat. + // Can be true, means auto calculate repeat times and cut by data. + // Can be a number, specifies repeat times, and do not cut by data. + // Can be 'fixed', means auto calculate repeat times but do not cut by data. + symbolRepeatDirection: 'end', // 'end' means from 'start' to 'end'. + + symbolClip: false, + symbolBoundingData: null, // Can be 60 or -40 or [-40, 60] + symbolPatternSize: 400, // 400 * 400 px + + barGap: '-100%', // In most case, overlap is needed. + + // z can be set in data item, which is z2 actually. + + // Disable progressive + progressive: 0, + hoverAnimation: false // Open only when needed. + }, + + getInitialData: function (option) { + // Disable stack. + option.stack = null; + return PictorialBarSeries.superApply(this, 'getInitialData', arguments); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var BAR_BORDER_WIDTH_QUERY$1 = ['itemStyle', 'borderWidth']; + +// index: +isHorizontal +var LAYOUT_ATTRS = [ + {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']}, + {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']} +]; + +var pathForLineWidth = new Circle(); + +var BarView$1 = extendChartView({ + + type: 'pictorialBar', + + render: function (seriesModel, ecModel, api) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var isHorizontal = !!baseAxis.isHorizontal(); + var coordSysRect = cartesian.grid.getRect(); + + var opt = { + ecSize: {width: api.getWidth(), height: api.getHeight()}, + seriesModel: seriesModel, + coordSys: cartesian, + coordSysExtent: [ + [coordSysRect.x, coordSysRect.x + coordSysRect.width], + [coordSysRect.y, coordSysRect.y + coordSysRect.height] + ], + isHorizontal: isHorizontal, + valueDim: LAYOUT_ATTRS[+isHorizontal], + categoryDim: LAYOUT_ATTRS[1 - isHorizontal] + }; + + data.diff(oldData) + .add(function (dataIndex) { + if (!data.hasValue(dataIndex)) { + return; + } + + var itemModel = getItemModel(data, dataIndex); + var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt); + + var bar = createBar(data, opt, symbolMeta); + + data.setItemGraphicEl(dataIndex, bar); + group.add(bar); + + updateCommon$1(bar, opt, symbolMeta); + }) + .update(function (newIndex, oldIndex) { + var bar = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex)) { + group.remove(bar); + return; + } + + var itemModel = getItemModel(data, newIndex); + var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt); + + var pictorialShapeStr = getShapeStr(data, symbolMeta); + if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) { + group.remove(bar); + data.setItemGraphicEl(newIndex, null); + bar = null; + } + + if (bar) { + updateBar(bar, opt, symbolMeta); + } + else { + bar = createBar(data, opt, symbolMeta, true); + } + + data.setItemGraphicEl(newIndex, bar); + bar.__pictorialSymbolMeta = symbolMeta; + // Add back + group.add(bar); + + updateCommon$1(bar, opt, symbolMeta); + }) + .remove(function (dataIndex) { + var bar = oldData.getItemGraphicEl(dataIndex); + bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar); + }) + .execute(); + + this._data = data; + + return this.group; + }, + + dispose: noop, + + remove: function (ecModel, api) { + var group = this.group; + var data = this._data; + if (ecModel.get('animation')) { + if (data) { + data.eachItemGraphicEl(function (bar) { + removeBar(data, bar.dataIndex, ecModel, bar); + }); + } + } + else { + group.removeAll(); + } + } +}); + + +// Set or calculate default value about symbol, and calculate layout info. +function getSymbolMeta(data, dataIndex, itemModel, opt) { + var layout = data.getItemLayout(dataIndex); + var symbolRepeat = itemModel.get('symbolRepeat'); + var symbolClip = itemModel.get('symbolClip'); + var symbolPosition = itemModel.get('symbolPosition') || 'start'; + var symbolRotate = itemModel.get('symbolRotate'); + var rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + var symbolPatternSize = itemModel.get('symbolPatternSize') || 2; + var isAnimationEnabled = itemModel.isAnimationEnabled(); + + var symbolMeta = { + dataIndex: dataIndex, + layout: layout, + itemModel: itemModel, + symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle', + color: data.getItemVisual(dataIndex, 'color'), + symbolClip: symbolClip, + symbolRepeat: symbolRepeat, + symbolRepeatDirection: itemModel.get('symbolRepeatDirection'), + symbolPatternSize: symbolPatternSize, + rotation: rotation, + animationModel: isAnimationEnabled ? itemModel : null, + hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'), + z2: itemModel.getShallow('z', true) || 0 + }; + + prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta); + + prepareSymbolSize( + data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, + symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta + ); + + prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta); + + var symbolSize = symbolMeta.symbolSize; + var symbolOffset = itemModel.get('symbolOffset'); + if (isArray(symbolOffset)) { + symbolOffset = [ + parsePercent$1(symbolOffset[0], symbolSize[0]), + parsePercent$1(symbolOffset[1], symbolSize[1]) + ]; + } + + prepareLayoutInfo( + itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, + symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, + opt, symbolMeta + ); + + return symbolMeta; +} + +// bar length can be negative. +function prepareBarLength(itemModel, symbolRepeat, layout, opt, output) { + var valueDim = opt.valueDim; + var symbolBoundingData = itemModel.get('symbolBoundingData'); + var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis()); + var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)); + var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0); + var boundingLength; + + if (isArray(symbolBoundingData)) { + var symbolBoundingExtent = [ + convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, + convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx + ]; + symbolBoundingExtent[1] < symbolBoundingExtent[0] && (symbolBoundingExtent.reverse()); + boundingLength = symbolBoundingExtent[pxSignIdx]; + } + else if (symbolBoundingData != null) { + boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx; + } + else if (symbolRepeat) { + boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx; + } + else { + boundingLength = layout[valueDim.wh]; + } + + output.boundingLength = boundingLength; + + if (symbolRepeat) { + output.repeatCutLength = layout[valueDim.wh]; + } + + output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0; +} + +function convertToCoordOnAxis(axis, value) { + return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value))); +} + +// Support ['100%', '100%'] +function prepareSymbolSize( + data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, + pxSign, symbolPatternSize, opt, output +) { + var valueDim = opt.valueDim; + var categoryDim = opt.categoryDim; + var categorySize = Math.abs(layout[categoryDim.wh]); + + var symbolSize = data.getItemVisual(dataIndex, 'symbolSize'); + if (isArray(symbolSize)) { + symbolSize = symbolSize.slice(); + } + else { + if (symbolSize == null) { + symbolSize = '100%'; + } + symbolSize = [symbolSize, symbolSize]; + } + + // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is + // to complicated to calculate real percent value if considering scaled lineWidth. + // So the actual size will bigger than layout size if lineWidth is bigger than zero, + // which can be tolerated in pictorial chart. + + symbolSize[categoryDim.index] = parsePercent$1( + symbolSize[categoryDim.index], + categorySize + ); + symbolSize[valueDim.index] = parsePercent$1( + symbolSize[valueDim.index], + symbolRepeat ? categorySize : Math.abs(boundingLength) + ); + + output.symbolSize = symbolSize; + + // If x or y is less than zero, show reversed shape. + var symbolScale = output.symbolScale = [ + symbolSize[0] / symbolPatternSize, + symbolSize[1] / symbolPatternSize + ]; + // Follow convention, 'right' and 'top' is the normal scale. + symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign; +} + +function prepareLineWidth(itemModel, symbolScale, rotation, opt, output) { + // In symbols are drawn with scale, so do not need to care about the case that width + // or height are too small. But symbol use strokeNoScale, where acture lineWidth should + // be calculated. + var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY$1) || 0; + + if (valueLineWidth) { + pathForLineWidth.attr({ + scale: symbolScale.slice(), + rotation: rotation + }); + pathForLineWidth.updateTransform(); + valueLineWidth /= pathForLineWidth.getLineScale(); + valueLineWidth *= symbolScale[opt.valueDim.index]; + } + + output.valueLineWidth = valueLineWidth; +} + +function prepareLayoutInfo( + itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, + symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output +) { + var categoryDim = opt.categoryDim; + var valueDim = opt.valueDim; + var pxSign = output.pxSign; + + var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0); + var pathLen = unitLength; + + // Note: rotation will not effect the layout of symbols, because user may + // want symbols to rotate on its center, which should not be translated + // when rotating. + + if (symbolRepeat) { + var absBoundingLength = Math.abs(boundingLength); + + var symbolMargin = retrieve(itemModel.get('symbolMargin'), '15%') + ''; + var hasEndGap = false; + if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) { + hasEndGap = true; + symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1); + } + symbolMargin = parsePercent$1(symbolMargin, symbolSize[valueDim.index]); + + var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0); + + // When symbol margin is less than 0, margin at both ends will be subtracted + // to ensure that all of the symbols will not be overflow the given area. + var endFix = hasEndGap ? 0 : symbolMargin * 2; + + // Both final repeatTimes and final symbolMargin area calculated based on + // boundingLength. + var repeatSpecified = isNumeric(symbolRepeat); + var repeatTimes = repeatSpecified + ? symbolRepeat + : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); + + // Adjust calculate margin, to ensure each symbol is displayed + // entirely in the given layout area. + var mDiff = absBoundingLength - repeatTimes * unitLength; + symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1); + uLenWithMargin = unitLength + symbolMargin * 2; + endFix = hasEndGap ? 0 : symbolMargin * 2; + + // Update repeatTimes when not all symbol will be shown. + if (!repeatSpecified && symbolRepeat !== 'fixed') { + repeatTimes = repeatCutLength + ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) + : 0; + } + + pathLen = repeatTimes * uLenWithMargin - endFix; + output.repeatTimes = repeatTimes; + output.symbolMargin = symbolMargin; + } + + var sizeFix = pxSign * (pathLen / 2); + var pathPosition = output.pathPosition = []; + pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2; + pathPosition[valueDim.index] = symbolPosition === 'start' + ? sizeFix + : symbolPosition === 'end' + ? boundingLength - sizeFix + : boundingLength / 2; // 'center' + if (symbolOffset) { + pathPosition[0] += symbolOffset[0]; + pathPosition[1] += symbolOffset[1]; + } + + var bundlePosition = output.bundlePosition = []; + bundlePosition[categoryDim.index] = layout[categoryDim.xy]; + bundlePosition[valueDim.index] = layout[valueDim.xy]; + + var barRectShape = output.barRectShape = extend({}, layout); + barRectShape[valueDim.wh] = pxSign * Math.max( + Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix) + ); + barRectShape[categoryDim.wh] = layout[categoryDim.wh]; + + var clipShape = output.clipShape = {}; + // Consider that symbol may be overflow layout rect. + clipShape[categoryDim.xy] = -layout[categoryDim.xy]; + clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh]; + clipShape[valueDim.xy] = 0; + clipShape[valueDim.wh] = layout[valueDim.wh]; +} + +function createPath(symbolMeta) { + var symbolPatternSize = symbolMeta.symbolPatternSize; + var path = createSymbol( + // Consider texture img, make a big size. + symbolMeta.symbolType, + -symbolPatternSize / 2, + -symbolPatternSize / 2, + symbolPatternSize, + symbolPatternSize, + symbolMeta.color + ); + path.attr({ + culling: true + }); + path.type !== 'image' && path.setStyle({ + strokeNoScale: true + }); + + return path; +} + +function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var symbolSize = symbolMeta.symbolSize; + var valueLineWidth = symbolMeta.valueLineWidth; + var pathPosition = symbolMeta.pathPosition; + var valueDim = opt.valueDim; + var repeatTimes = symbolMeta.repeatTimes || 0; + + var index = 0; + var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2; + + eachPath(bar, function (path) { + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + if (index < repeatTimes) { + updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate); + } + else { + updateAttr(path, null, {scale: [0, 0]}, symbolMeta, isUpdate, function () { + bundle.remove(path); + }); + } + + updateHoverAnimation(path, symbolMeta); + + index++; + }); + + for (; index < repeatTimes; index++) { + var path = createPath(symbolMeta); + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + bundle.add(path); + + var target = makeTarget(index); + + updateAttr( + path, + { + position: target.position, + scale: [0, 0] + }, + { + scale: target.scale, + rotation: target.rotation + }, + symbolMeta, + isUpdate + ); + + // FIXME + // If all emphasis/normal through action. + path + .on('mouseover', onMouseOver) + .on('mouseout', onMouseOut); + + updateHoverAnimation(path, symbolMeta); + } + + function makeTarget(index) { + var position = pathPosition.slice(); + // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index + // Otherwise: i = index; + var pxSign = symbolMeta.pxSign; + var i = index; + if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) { + i = repeatTimes - 1 - index; + } + position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index]; + + return { + position: position, + scale: symbolMeta.symbolScale.slice(), + rotation: symbolMeta.rotation + }; + } + + function onMouseOver() { + eachPath(bar, function (path) { + path.trigger('emphasis'); + }); + } + + function onMouseOut() { + eachPath(bar, function (path) { + path.trigger('normal'); + }); + } +} + +function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var mainPath = bar.__pictorialMainPath; + + if (!mainPath) { + mainPath = bar.__pictorialMainPath = createPath(symbolMeta); + bundle.add(mainPath); + + updateAttr( + mainPath, + { + position: symbolMeta.pathPosition.slice(), + scale: [0, 0], + rotation: symbolMeta.rotation + }, + { + scale: symbolMeta.symbolScale.slice() + }, + symbolMeta, + isUpdate + ); + + mainPath + .on('mouseover', onMouseOver) + .on('mouseout', onMouseOut); + } + else { + updateAttr( + mainPath, + null, + { + position: symbolMeta.pathPosition.slice(), + scale: symbolMeta.symbolScale.slice(), + rotation: symbolMeta.rotation + }, + symbolMeta, + isUpdate + ); + } + + updateHoverAnimation(mainPath, symbolMeta); + + function onMouseOver() { + this.trigger('emphasis'); + } + + function onMouseOut() { + this.trigger('normal'); + } +} + +// bar rect is used for label. +function createOrUpdateBarRect(bar, symbolMeta, isUpdate) { + var rectShape = extend({}, symbolMeta.barRectShape); + + var barRect = bar.__pictorialBarRect; + if (!barRect) { + barRect = bar.__pictorialBarRect = new Rect({ + z2: 2, + shape: rectShape, + silent: true, + style: { + stroke: 'transparent', + fill: 'transparent', + lineWidth: 0 + } + }); + + bar.add(barRect); + } + else { + updateAttr(barRect, null, {shape: rectShape}, symbolMeta, isUpdate); + } +} + +function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) { + // If not clip, symbol will be remove and rebuilt. + if (symbolMeta.symbolClip) { + var clipPath = bar.__pictorialClipPath; + var clipShape = extend({}, symbolMeta.clipShape); + var valueDim = opt.valueDim; + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + + if (clipPath) { + updateProps( + clipPath, {shape: clipShape}, animationModel, dataIndex + ); + } + else { + clipShape[valueDim.wh] = 0; + clipPath = new Rect({shape: clipShape}); + bar.__pictorialBundle.setClipPath(clipPath); + bar.__pictorialClipPath = clipPath; + + var target = {}; + target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh]; + + graphic[isUpdate ? 'updateProps' : 'initProps']( + clipPath, {shape: target}, animationModel, dataIndex + ); + } + } +} + +function getItemModel(data, dataIndex) { + var itemModel = data.getItemModel(dataIndex); + itemModel.getAnimationDelayParams = getAnimationDelayParams; + itemModel.isAnimationEnabled = isAnimationEnabled; + return itemModel; +} + +function getAnimationDelayParams(path) { + // The order is the same as the z-order, see `symbolRepeatDiretion`. + return { + index: path.__pictorialAnimationIndex, + count: path.__pictorialRepeatTimes + }; +} + +function isAnimationEnabled() { + // `animation` prop can be set on itemModel in pictorial bar chart. + return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation'); +} + +function updateHoverAnimation(path, symbolMeta) { + path.off('emphasis').off('normal'); + + var scale = symbolMeta.symbolScale.slice(); + + symbolMeta.hoverAnimation && path + .on('emphasis', function () { + this.animateTo({ + scale: [scale[0] * 1.1, scale[1] * 1.1] + }, 400, 'elasticOut'); + }) + .on('normal', function () { + this.animateTo({ + scale: scale.slice() + }, 400, 'elasticOut'); + }); +} + +function createBar(data, opt, symbolMeta, isUpdate) { + // bar is the main element for each data. + var bar = new Group(); + // bundle is used for location and clip. + var bundle = new Group(); + bar.add(bundle); + bar.__pictorialBundle = bundle; + bundle.attr('position', symbolMeta.bundlePosition.slice()); + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta); + } + else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta); + } + + createOrUpdateBarRect(bar, symbolMeta, isUpdate); + + createOrUpdateClip(bar, opt, symbolMeta, isUpdate); + + bar.__pictorialShapeStr = getShapeStr(data, symbolMeta); + bar.__pictorialSymbolMeta = symbolMeta; + + return bar; +} + +function updateBar(bar, opt, symbolMeta) { + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + var bundle = bar.__pictorialBundle; + + updateProps( + bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex + ); + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true); + } + else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta, true); + } + + createOrUpdateBarRect(bar, symbolMeta, true); + + createOrUpdateClip(bar, opt, symbolMeta, true); +} + +function removeBar(data, dataIndex, animationModel, bar) { + // Not show text when animating + var labelRect = bar.__pictorialBarRect; + labelRect && (labelRect.style.text = null); + + var pathes = []; + eachPath(bar, function (path) { + pathes.push(path); + }); + bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); + + // I do not find proper remove animation for clip yet. + bar.__pictorialClipPath && (animationModel = null); + + each$1(pathes, function (path) { + updateProps( + path, {scale: [0, 0]}, animationModel, dataIndex, + function () { + bar.parent && bar.parent.remove(bar); + } + ); + }); + + data.setItemGraphicEl(dataIndex, null); +} + +function getShapeStr(data, symbolMeta) { + return [ + data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', + !!symbolMeta.symbolRepeat, + !!symbolMeta.symbolClip + ].join(':'); +} + +function eachPath(bar, cb, context) { + // Do not use Group#eachChild, because it do not support remove. + each$1(bar.__pictorialBundle.children(), function (el) { + el !== bar.__pictorialBarRect && cb.call(context, el); + }); +} + +function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) { + immediateAttrs && el.attr(immediateAttrs); + // when symbolCip used, only clip path has init animation, otherwise it would be weird effect. + if (symbolMeta.symbolClip && !isUpdate) { + animationAttrs && el.attr(animationAttrs); + } + else { + animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps']( + el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb + ); + } +} + +function updateCommon$1(bar, opt, symbolMeta) { + var color = symbolMeta.color; + var dataIndex = symbolMeta.dataIndex; + var itemModel = symbolMeta.itemModel; + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']); + var hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle(); + var cursorStyle = itemModel.getShallow('cursor'); + + eachPath(bar, function (path) { + // PENDING setColor should be before setStyle!!! + path.setColor(color); + path.setStyle(defaults( + { + fill: color, + opacity: symbolMeta.opacity + }, + normalStyle + )); + setHoverStyle(path, hoverStyle); + + cursorStyle && (path.cursor = cursorStyle); + path.z2 = symbolMeta.z2; + }); + + var barRectHoverStyle = {}; + var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)]; + var barRect = bar.__pictorialBarRect; + + setLabel( + barRect.style, barRectHoverStyle, itemModel, + color, opt.seriesModel, dataIndex, barPositionOutside + ); + + setHoverStyle(barRect, barRectHoverStyle); +} + +function toIntTimes(times) { + var roundedTimes = Math.round(times); + // Escapse accurate error + return Math.abs(times - roundedTimes) < 1e-4 + ? roundedTimes + : Math.ceil(times); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// In case developer forget to include grid component +registerLayout(curry( + layout, 'pictorialBar' +)); +registerVisual(visualSymbol('pictorialBar', 'roundRect')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @constructor module:echarts/coord/single/SingleAxis + * @extends {module:echarts/coord/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var SingleAxis = function (dim, scale, coordExtent, axisType, position) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * Axis position + * - 'top' + * - 'bottom' + * - 'left' + * - 'right' + * @type {string} + */ + this.position = position || 'bottom'; + + /** + * Axis orient + * - 'horizontal' + * - 'vertical' + * @type {[type]} + */ + this.orient = null; + +}; + +SingleAxis.prototype = { + + constructor: SingleAxis, + + /** + * Axis model + * @type {module:echarts/coord/single/AxisModel} + */ + model: null, + + /** + * Judge the orient of the axis. + * @return {boolean} + */ + isHorizontal: function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + + }, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.coordinateSystem.pointToData(point, clamp)[0]; + }, + + /** + * Convert the local coord(processed by dataToCoord()) + * to global coord(concrete pixel coord). + * designated by module:echarts/coord/single/Single. + * @type {Function} + */ + toGlobalCoord: null, + + /** + * Convert the global coord to local coord. + * designated by module:echarts/coord/single/Single. + * @type {Function} + */ + toLocalCoord: null + +}; + +inherits(SingleAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Single coordinates system. + */ + +/** + * Create a single coordinates system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ +function Single(axisModel, ecModel, api) { + + /** + * @type {string} + * @readOnly + */ + this.dimension = 'single'; + + /** + * Add it just for draw tooltip. + * + * @type {Array.} + * @readOnly + */ + this.dimensions = ['single']; + + /** + * @private + * @type {module:echarts/coord/single/SingleAxis}. + */ + this._axis = null; + + /** + * @private + * @type {module:zrender/core/BoundingRect} + */ + this._rect; + + this._init(axisModel, ecModel, api); + + /** + * @type {module:echarts/coord/single/AxisModel} + */ + this.model = axisModel; +} + +Single.prototype = { + + type: 'singleAxis', + + axisPointerEnabled: true, + + constructor: Single, + + /** + * Initialize single coordinate system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @private + */ + _init: function (axisModel, ecModel, api) { + + var dim = this.dimension; + + var axis = new SingleAxis( + dim, + createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisModel.get('position') + ); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + axis.orient = axisModel.get('orient'); + + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = this; + this._axis = axis; + }, + + /** + * Update axis scale after data processed + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + update: function (ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === this) { + var data = seriesModel.getData(); + each$1(data.mapDimension(this.dimension, true), function (dim) { + this._axis.scale.unionExtentFromData(data, dim); + }, this); + niceScaleExtent(this._axis.scale, this._axis.model); + } + }, this); + }, + + /** + * Resize the single coordinate system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/ExtensionAPI} api + */ + resize: function (axisModel, api) { + this._rect = getLayoutRect( + { + left: axisModel.get('left'), + top: axisModel.get('top'), + right: axisModel.get('right'), + bottom: axisModel.get('bottom'), + width: axisModel.get('width'), + height: axisModel.get('height') + }, + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + this._adjustAxis(); + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getRect: function () { + return this._rect; + }, + + /** + * @private + */ + _adjustAxis: function () { + + var rect = this._rect; + var axis = this._axis; + + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, rect.width] : [0, rect.height]; + var idx = axis.reverse ? 1 : 0; + + axis.setExtent(extent[idx], extent[1 - idx]); + + this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y); + + }, + + /** + * @param {module:echarts/coord/single/SingleAxis} axis + * @param {number} coordBase + */ + _updateAxisTransform: function (axis, coordBase) { + + var axisExtent = axis.getExtent(); + var extentSum = axisExtent[0] + axisExtent[1]; + var isHorizontal = axis.isHorizontal(); + + axis.toGlobalCoord = isHorizontal + ? function (coord) { + return coord + coordBase; + } + : function (coord) { + return extentSum - coord + coordBase; + }; + + axis.toLocalCoord = isHorizontal + ? function (coord) { + return coord - coordBase; + } + : function (coord) { + return extentSum - coord + coordBase; + }; + }, + + /** + * Get axis. + * + * @return {module:echarts/coord/single/SingleAxis} + */ + getAxis: function () { + return this._axis; + }, + + /** + * Get axis, add it just for draw tooltip. + * + * @return {[type]} [description] + */ + getBaseAxis: function () { + return this._axis; + }, + + /** + * @return {Array.} + */ + getAxes: function () { + return [this._axis]; + }, + + /** + * @return {Object} {baseAxes: [], otherAxes: []} + */ + getTooltipAxes: function () { + return {baseAxes: [this.getAxis()]}; + }, + + /** + * If contain point. + * + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var rect = this.getRect(); + var axis = this.getAxis(); + var orient = axis.orient; + if (orient === 'horizontal') { + return axis.contain(axis.toLocalCoord(point[0])) + && (point[1] >= rect.y && point[1] <= (rect.y + rect.height)); + } + else { + return axis.contain(axis.toLocalCoord(point[1])) + && (point[0] >= rect.y && point[0] <= (rect.y + rect.height)); + } + }, + + /** + * @param {Array.} point + * @return {Array.} + */ + pointToData: function (point) { + var axis = this.getAxis(); + return [axis.coordToData(axis.toLocalCoord( + point[axis.orient === 'horizontal' ? 0 : 1] + ))]; + }, + + /** + * Convert the series data to concrete point. + * + * @param {number|Array.} val + * @return {Array.} + */ + dataToPoint: function (val) { + var axis = this.getAxis(); + var rect = this.getRect(); + var pt = []; + var idx = axis.orient === 'horizontal' ? 0 : 1; + + if (val instanceof Array) { + val = val[0]; + } + + pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val)); + pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2); + return pt; + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Single coordinate system creator. + */ + +/** + * Create single coordinate system and inject it into seriesModel. + * + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @return {Array.} + */ +function create$3(ecModel, api) { + var singles = []; + + ecModel.eachComponent('singleAxis', function (axisModel, idx) { + + var single = new Single(axisModel, ecModel, api); + single.name = 'single_' + idx; + single.resize(axisModel, api); + axisModel.coordinateSystem = single; + singles.push(single); + + }); + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'singleAxis') { + var singleAxisModel = ecModel.queryComponents({ + mainType: 'singleAxis', + index: seriesModel.get('singleAxisIndex'), + id: seriesModel.get('singleAxisId') + })[0]; + seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem; + } + }); + + return singles; +} + +CoordinateSystemManager.register('single', { + create: create$3, + dimensions: Single.prototype.dimensions +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {Object} opt {labelInside} + * @return {Object} { + * position, rotation, labelDirection, labelOffset, + * tickDirection, labelRotate, z2 + * } + */ +function layout$2(axisModel, opt) { + opt = opt || {}; + var single = axisModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + + var axisPosition = axis.position; + var orient = axis.orient; + + var rect = single.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + + var positionMap = { + horizontal: {top: rectBound[2], bottom: rectBound[3]}, + vertical: {left: rectBound[0], right: rectBound[1]} + }; + + layout.position = [ + orient === 'vertical' + ? positionMap.vertical[axisPosition] + : rectBound[0], + orient === 'horizontal' + ? positionMap.horizontal[axisPosition] + : rectBound[3] + ]; + + var r = {horizontal: 0, vertical: 1}; + layout.rotation = Math.PI / 2 * r[orient]; + + var directionMap = {top: -1, bottom: 1, right: 1, left: -1}; + + layout.labelDirection = layout.tickDirection + = layout.nameDirection + = directionMap[axisPosition]; + + if (axisModel.get('axisTick.inside')) { + layout.tickDirection = -layout.tickDirection; + } + + if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) { + layout.labelDirection = -layout.labelDirection; + } + + var labelRotation = opt.rotate; + labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate')); + layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation; + + layout.z2 = 1; + + return layout; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var axisBuilderAttrs$2 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; + +var selfBuilderAttr = 'splitLine'; + +var SingleAxisView = AxisView.extend({ + + type: 'singleAxis', + + axisPointerClass: 'SingleAxisPointer', + + render: function (axisModel, ecModel, api, payload) { + + var group = this.group; + + group.removeAll(); + + var layout = layout$2(axisModel); + + var axisBuilder = new AxisBuilder(axisModel, layout); + + each$1(axisBuilderAttrs$2, axisBuilder.add, axisBuilder); + + group.add(axisBuilder.getGroup()); + + if (axisModel.get(selfBuilderAttr + '.show')) { + this['_' + selfBuilderAttr](axisModel); + } + + SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload); + }, + + _splitLine: function (axisModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineWidth = lineStyleModel.get('width'); + var lineColors = lineStyleModel.get('color'); + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var gridRect = axisModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + + var splitLines = []; + var lineCount = 0; + + var ticksCoords = axis.getTicksCoords({ + tickModel: splitLineModel + }); + + var p1 = []; + var p2 = []; + + for (var i = 0; i < ticksCoords.length; ++i) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } + else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line( + subPixelOptimizeLine({ + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: { + lineWidth: lineWidth + }, + silent: true + }))); + } + + for (var i = 0; i < splitLines.length; ++i) { + this.group.add(mergePath(splitLines[i], { + style: { + stroke: lineColors[i % lineColors.length], + lineDash: lineStyleModel.getLineDash(lineWidth), + lineWidth: lineWidth + }, + silent: true + })); + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AxisModel$4 = ComponentModel.extend({ + + type: 'singleAxis', + + layoutMode: 'box', + + /** + * @type {module:echarts/coord/single/SingleAxis} + */ + axis: null, + + /** + * @type {module:echarts/coord/single/Single} + */ + coordinateSystem: null, + + /** + * @override + */ + getCoordSysModel: function () { + return this; + } + +}); + +var defaultOption$2 = { + + left: '5%', + top: '5%', + right: '5%', + bottom: '5%', + + type: 'value', + + position: 'bottom', + + orient: 'horizontal', + + axisLine: { + show: true, + lineStyle: { + width: 2, + type: 'solid' + } + }, + + // Single coordinate system and single axis is the, + // which is used as the parent tooltip model. + // same model, so we set default tooltip show as true. + tooltip: { + show: true + }, + + axisTick: { + show: true, + length: 6, + lineStyle: { + width: 2 + } + }, + + axisLabel: { + show: true, + interval: 'auto' + }, + + splitLine: { + show: true, + lineStyle: { + type: 'dashed', + opacity: 0.2 + } + } +}; + +function getAxisType$2(axisName, option) { + return option.type || (option.data ? 'category' : 'value'); +} + +merge(AxisModel$4.prototype, axisModelCommonMixin); + +axisModelCreator('single', AxisModel$4, getAxisType$2, defaultOption$2); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside} + * @param {module:echarts/model/Global} ecModel + * @return {Object} {point: [x, y], el: ...} point Will not be null. + */ +var findPointFromSeries = function (finder, ecModel) { + var point = []; + var seriesIndex = finder.seriesIndex; + var seriesModel; + if (seriesIndex == null || !( + seriesModel = ecModel.getSeriesByIndex(seriesIndex) + )) { + return {point: []}; + } + + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, finder); + if (dataIndex == null || dataIndex < 0 || isArray(dataIndex)) { + return {point: []}; + } + + var el = data.getItemGraphicEl(dataIndex); + var coordSys = seriesModel.coordinateSystem; + + if (seriesModel.getTooltipPosition) { + point = seriesModel.getTooltipPosition(dataIndex) || []; + } + else if (coordSys && coordSys.dataToPoint) { + point = coordSys.dataToPoint( + data.getValues( + map(coordSys.dimensions, function (dim) { + return data.mapDimension(dim); + }), dataIndex, true + ) + ) || []; + } + else if (el) { + // Use graphic bounding rect + var rect = el.getBoundingRect().clone(); + rect.applyTransform(el.transform); + point = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + } + + return {point: point, el: el}; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$14 = each$1; +var curry$3 = curry; +var inner$9 = makeInner(); + +/** + * Basic logic: check all axis, if they do not demand show/highlight, + * then hide/downplay them. + * + * @param {Object} coordSysAxesInfo + * @param {Object} payload + * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave' + * @param {Array.} [payload.x] x and y, which are mandatory, specify a point to + * trigger axisPointer and tooltip. + * @param {Array.} [payload.y] x and y, which are mandatory, specify a point to + * trigger axisPointer and tooltip. + * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes. + * @param {Object} [payload.dataIndex] finder, restrict target axes. + * @param {Object} [payload.axesInfo] finder, restrict target axes. + * [{ + * axisDim: 'x'|'y'|'angle'|..., + * axisIndex: ..., + * value: ... + * }, ...] + * @param {Function} [payload.dispatchAction] + * @param {Object} [payload.tooltipOption] + * @param {Object|Array.|Function} [payload.position] Tooltip position, + * which can be specified in dispatchAction + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @return {Object} content of event obj for echarts.connect. + */ +var axisTrigger = function (payload, ecModel, api) { + var currTrigger = payload.currTrigger; + var point = [payload.x, payload.y]; + var finder = payload; + var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api); + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; + + // Pending + // See #6121. But we are not able to reproduce it yet. + if (!coordSysAxesInfo) { + return; + } + + if (illegalPoint(point)) { + // Used in the default behavior of `connection`: use the sample seriesIndex + // and dataIndex. And also used in the tooltipView trigger. + point = findPointFromSeries({ + seriesIndex: finder.seriesIndex, + // Do not use dataIndexInside from other ec instance. + // FIXME: auto detect it? + dataIndex: finder.dataIndex + }, ecModel).point; + } + var isIllegalPoint = illegalPoint(point); + + // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}). + // Notice: In this case, it is difficult to get the `point` (which is necessary to show + // tooltip, so if point is not given, we just use the point found by sample seriesIndex + // and dataIndex. + var inputAxesInfo = finder.axesInfo; + + var axesInfo = coordSysAxesInfo.axesInfo; + var shouldHide = currTrigger === 'leave' || illegalPoint(point); + var outputFinder = {}; + + var showValueMap = {}; + var dataByCoordSys = {list: [], map: {}}; + var updaters = { + showPointer: curry$3(showPointer, showValueMap), + showTooltip: curry$3(showTooltip, dataByCoordSys) + }; + + // Process for triggered axes. + each$14(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) { + // If a point given, it must be contained by the coordinate system. + var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point); + + each$14(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) { + var axis = axisInfo.axis; + var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); + // If no inputAxesInfo, no axis is restricted. + if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) { + var val = inputAxisInfo && inputAxisInfo.value; + if (val == null && !isIllegalPoint) { + val = axis.pointToData(point); + } + val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder); + } + }); + }); + + // Process for linked axes. + var linkTriggers = {}; + each$14(axesInfo, function (tarAxisInfo, tarKey) { + var linkGroup = tarAxisInfo.linkGroup; + + // If axis has been triggered in the previous stage, it should not be triggered by link. + if (linkGroup && !showValueMap[tarKey]) { + each$14(linkGroup.axesInfo, function (srcAxisInfo, srcKey) { + var srcValItem = showValueMap[srcKey]; + // If srcValItem exist, source axis is triggered, so link to target axis. + if (srcAxisInfo !== tarAxisInfo && srcValItem) { + var val = srcValItem.value; + linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper( + val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo) + ))); + linkTriggers[tarAxisInfo.key] = val; + } + }); + } + }); + each$14(linkTriggers, function (val, tarKey) { + processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder); + }); + + updateModelActually(showValueMap, axesInfo, outputFinder); + dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction); + dispatchHighDownActually(axesInfo, dispatchAction, api); + + return outputFinder; +}; + +function processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) { + var axis = axisInfo.axis; + + if (axis.scale.isBlank() || !axis.containData(newValue)) { + return; + } + + if (!axisInfo.involveSeries) { + updaters.showPointer(axisInfo, newValue); + return; + } + + // Heavy calculation. So put it after axis.containData checking. + var payloadInfo = buildPayloadsBySeries(newValue, axisInfo); + var payloadBatch = payloadInfo.payloadBatch; + var snapToValue = payloadInfo.snapToValue; + + // Fill content of event obj for echarts.connect. + // By defualt use the first involved series data as a sample to connect. + if (payloadBatch[0] && outputFinder.seriesIndex == null) { + extend(outputFinder, payloadBatch[0]); + } + + // If no linkSource input, this process is for collecting link + // target, where snap should not be accepted. + if (!dontSnap && axisInfo.snap) { + if (axis.containData(snapToValue) && snapToValue != null) { + newValue = snapToValue; + } + } + + updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder); + // Tooltip should always be snapToValue, otherwise there will be + // incorrect "axis value ~ series value" mapping displayed in tooltip. + updaters.showTooltip(axisInfo, payloadInfo, snapToValue); +} + +function buildPayloadsBySeries(value, axisInfo) { + var axis = axisInfo.axis; + var dim = axis.dim; + var snapToValue = value; + var payloadBatch = []; + var minDist = Number.MAX_VALUE; + var minDiff = -1; + + each$14(axisInfo.seriesModels, function (series, idx) { + var dataDim = series.getData().mapDimension(dim, true); + var seriesNestestValue; + var dataIndices; + + if (series.getAxisTooltipData) { + var result = series.getAxisTooltipData(dataDim, value, axis); + dataIndices = result.dataIndices; + seriesNestestValue = result.nestestValue; + } + else { + dataIndices = series.getData().indicesOfNearest( + dataDim[0], + value, + // Add a threshold to avoid find the wrong dataIndex + // when data length is not same. + // false, + axis.type === 'category' ? 0.5 : null + ); + if (!dataIndices.length) { + return; + } + seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]); + } + + if (seriesNestestValue == null || !isFinite(seriesNestestValue)) { + return; + } + + var diff = value - seriesNestestValue; + var dist = Math.abs(diff); + // Consider category case + if (dist <= minDist) { + if (dist < minDist || (diff >= 0 && minDiff < 0)) { + minDist = dist; + minDiff = diff; + snapToValue = seriesNestestValue; + payloadBatch.length = 0; + } + each$14(dataIndices, function (dataIndex) { + payloadBatch.push({ + seriesIndex: series.seriesIndex, + dataIndexInside: dataIndex, + dataIndex: series.getData().getRawIndex(dataIndex) + }); + }); + } + }); + + return { + payloadBatch: payloadBatch, + snapToValue: snapToValue + }; +} + +function showPointer(showValueMap, axisInfo, value, payloadBatch) { + showValueMap[axisInfo.key] = {value: value, payloadBatch: payloadBatch}; +} + +function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) { + var payloadBatch = payloadInfo.payloadBatch; + var axis = axisInfo.axis; + var axisModel = axis.model; + var axisPointerModel = axisInfo.axisPointerModel; + + // If no data, do not create anything in dataByCoordSys, + // whose length will be used to judge whether dispatch action. + if (!axisInfo.triggerTooltip || !payloadBatch.length) { + return; + } + + var coordSysModel = axisInfo.coordSys.model; + var coordSysKey = makeKey(coordSysModel); + var coordSysItem = dataByCoordSys.map[coordSysKey]; + if (!coordSysItem) { + coordSysItem = dataByCoordSys.map[coordSysKey] = { + coordSysId: coordSysModel.id, + coordSysIndex: coordSysModel.componentIndex, + coordSysType: coordSysModel.type, + coordSysMainType: coordSysModel.mainType, + dataByAxis: [] + }; + dataByCoordSys.list.push(coordSysItem); + } + + coordSysItem.dataByAxis.push({ + axisDim: axis.dim, + axisIndex: axisModel.componentIndex, + axisType: axisModel.type, + axisId: axisModel.id, + value: value, + // Caustion: viewHelper.getValueLabel is actually on "view stage", which + // depends that all models have been updated. So it should not be performed + // here. Considering axisPointerModel used here is volatile, which is hard + // to be retrieve in TooltipView, we prepare parameters here. + valueLabelOpt: { + precision: axisPointerModel.get('label.precision'), + formatter: axisPointerModel.get('label.formatter') + }, + seriesDataIndices: payloadBatch.slice() + }); +} + +function updateModelActually(showValueMap, axesInfo, outputFinder) { + var outputAxesInfo = outputFinder.axesInfo = []; + // Basic logic: If no 'show' required, 'hide' this axisPointer. + each$14(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + var valItem = showValueMap[key]; + + if (valItem) { + !axisInfo.useHandle && (option.status = 'show'); + option.value = valItem.value; + // For label formatter param and highlight. + option.seriesDataIndices = (valItem.payloadBatch || []).slice(); + } + // When always show (e.g., handle used), remain + // original value and status. + else { + // If hide, value still need to be set, consider + // click legend to toggle axis blank. + !axisInfo.useHandle && (option.status = 'hide'); + } + + // If status is 'hide', should be no info in payload. + option.status === 'show' && outputAxesInfo.push({ + axisDim: axisInfo.axis.dim, + axisIndex: axisInfo.axis.model.componentIndex, + value: option.value + }); + }); +} + +function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) { + // Basic logic: If no showTip required, hideTip will be dispatched. + if (illegalPoint(point) || !dataByCoordSys.list.length) { + dispatchAction({type: 'hideTip'}); + return; + } + + // In most case only one axis (or event one series is used). It is + // convinient to fetch payload.seriesIndex and payload.dataIndex + // dirtectly. So put the first seriesIndex and dataIndex of the first + // axis on the payload. + var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; + + dispatchAction({ + type: 'showTip', + escapeConnect: true, + x: point[0], + y: point[1], + tooltipOption: payload.tooltipOption, + position: payload.position, + dataIndexInside: sampleItem.dataIndexInside, + dataIndex: sampleItem.dataIndex, + seriesIndex: sampleItem.seriesIndex, + dataByCoordSys: dataByCoordSys.list + }); +} + +function dispatchHighDownActually(axesInfo, dispatchAction, api) { + // FIXME + // highlight status modification shoule be a stage of main process? + // (Consider confilct (e.g., legend and axisPointer) and setOption) + + var zr = api.getZr(); + var highDownKey = 'axisPointerLastHighlights'; + var lastHighlights = inner$9(zr)[highDownKey] || {}; + var newHighlights = inner$9(zr)[highDownKey] = {}; + + // Update highlight/downplay status according to axisPointer model. + // Build hash map and remove duplicate incidentally. + each$14(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + option.status === 'show' && each$14(option.seriesDataIndices, function (batchItem) { + var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex; + newHighlights[key] = batchItem; + }); + }); + + // Diff. + var toHighlight = []; + var toDownplay = []; + each$1(lastHighlights, function (batchItem, key) { + !newHighlights[key] && toDownplay.push(batchItem); + }); + each$1(newHighlights, function (batchItem, key) { + !lastHighlights[key] && toHighlight.push(batchItem); + }); + + toDownplay.length && api.dispatchAction({ + type: 'downplay', escapeConnect: true, batch: toDownplay + }); + toHighlight.length && api.dispatchAction({ + type: 'highlight', escapeConnect: true, batch: toHighlight + }); +} + +function findInputAxisInfo(inputAxesInfo, axisInfo) { + for (var i = 0; i < (inputAxesInfo || []).length; i++) { + var inputAxisInfo = inputAxesInfo[i]; + if (axisInfo.axis.dim === inputAxisInfo.axisDim + && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex + ) { + return inputAxisInfo; + } + } +} + +function makeMapperParam(axisInfo) { + var axisModel = axisInfo.axis.model; + var item = {}; + var dim = item.axisDim = axisInfo.axis.dim; + item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex; + item.axisName = item[dim + 'AxisName'] = axisModel.name; + item.axisId = item[dim + 'AxisId'] = axisModel.id; + return item; +} + +function illegalPoint(point) { + return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AxisPointerModel = extendComponentModel({ + + type: 'axisPointer', + + coordSysAxesInfo: null, + + defaultOption: { + // 'auto' means that show when triggered by tooltip or handle. + show: 'auto', + // 'click' | 'mousemove' | 'none' + triggerOn: null, // set default in AxisPonterView.js + + zlevel: 0, + z: 50, + + type: 'line', // 'line' 'shadow' 'cross' 'none'. + // axispointer triggered by tootip determine snap automatically, + // see `modelHelper`. + snap: false, + triggerTooltip: true, + + value: null, + status: null, // Init value depends on whether handle is used. + + // [group0, group1, ...] + // Each group can be: { + // mapper: function () {}, + // singleTooltip: 'multiple', // 'multiple' or 'single' + // xAxisId: ..., + // yAxisName: ..., + // angleAxisIndex: ... + // } + // mapper: can be ignored. + // input: {axisInfo, value} + // output: {axisInfo, value} + link: [], + + // Do not set 'auto' here, otherwise global animation: false + // will not effect at this axispointer. + animation: null, + animationDurationUpdate: 200, + + lineStyle: { + color: '#aaa', + width: 1, + type: 'solid' + }, + + shadowStyle: { + color: 'rgba(150,150,150,0.3)' + }, + + label: { + show: true, + formatter: null, // string | Function + precision: 'auto', // Or a number like 0, 1, 2 ... + margin: 3, + color: '#fff', + padding: [5, 7, 5, 7], + backgroundColor: 'auto', // default: axis line color + borderColor: null, + borderWidth: 0, + shadowBlur: 3, + shadowColor: '#aaa' + // Considering applicability, common style should + // better not have shadowOffset. + // shadowOffsetX: 0, + // shadowOffsetY: 2 + }, + + handle: { + show: false, + /* eslint-disable */ + icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line + /* eslint-enable */ + size: 45, + // handle margin is from symbol center to axis, which is stable when circular move. + margin: 50, + // color: '#1b8bbd' + // color: '#2f4554' + color: '#333', + shadowBlur: 3, + shadowColor: '#aaa', + shadowOffsetX: 0, + shadowOffsetY: 2, + + // For mobile performance + throttle: 40 + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$10 = makeInner(); +var each$15 = each$1; + +/** + * @param {string} key + * @param {module:echarts/ExtensionAPI} api + * @param {Function} handler + * param: {string} currTrigger + * param: {Array.} point + */ +function register(key, api, handler) { + if (env$1.node) { + return; + } + + var zr = api.getZr(); + inner$10(zr).records || (inner$10(zr).records = {}); + + initGlobalListeners(zr, api); + + var record = inner$10(zr).records[key] || (inner$10(zr).records[key] = {}); + record.handler = handler; +} + +function initGlobalListeners(zr, api) { + if (inner$10(zr).initialized) { + return; + } + + inner$10(zr).initialized = true; + + useHandler('click', curry(doEnter, 'click')); + useHandler('mousemove', curry(doEnter, 'mousemove')); + // useHandler('mouseout', onLeave); + useHandler('globalout', onLeave); + + function useHandler(eventType, cb) { + zr.on(eventType, function (e) { + var dis = makeDispatchAction(api); + + each$15(inner$10(zr).records, function (record) { + record && cb(record, e, dis.dispatchAction); + }); + + dispatchTooltipFinally(dis.pendings, api); + }); + } +} + +function dispatchTooltipFinally(pendings, api) { + var showLen = pendings.showTip.length; + var hideLen = pendings.hideTip.length; + + var actuallyPayload; + if (showLen) { + actuallyPayload = pendings.showTip[showLen - 1]; + } + else if (hideLen) { + actuallyPayload = pendings.hideTip[hideLen - 1]; + } + if (actuallyPayload) { + actuallyPayload.dispatchAction = null; + api.dispatchAction(actuallyPayload); + } +} + +function onLeave(record, e, dispatchAction) { + record.handler('leave', null, dispatchAction); +} + +function doEnter(currTrigger, record, e, dispatchAction) { + record.handler(currTrigger, e, dispatchAction); +} + +function makeDispatchAction(api) { + var pendings = { + showTip: [], + hideTip: [] + }; + // FIXME + // better approach? + // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip, + // which may be conflict, (axisPointer call showTip but tooltip call hideTip); + // So we have to add "final stage" to merge those dispatched actions. + var dispatchAction = function (payload) { + var pendingList = pendings[payload.type]; + if (pendingList) { + pendingList.push(payload); + } + else { + payload.dispatchAction = dispatchAction; + api.dispatchAction(payload); + } + }; + + return { + dispatchAction: dispatchAction, + pendings: pendings + }; +} + +/** + * @param {string} key + * @param {module:echarts/ExtensionAPI} api + */ +function unregister(key, api) { + if (env$1.node) { + return; + } + var zr = api.getZr(); + var record = (inner$10(zr).records || {})[key]; + if (record) { + inner$10(zr).records[key] = null; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AxisPointerView = extendComponentView({ + + type: 'axisPointer', + + render: function (globalAxisPointerModel, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var triggerOn = globalAxisPointerModel.get('triggerOn') + || (globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click'); + + // Register global listener in AxisPointerView to enable + // AxisPointerView to be independent to Tooltip. + register( + 'axisPointer', + api, + function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none' + && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0) + ) { + dispatchAction({ + type: 'updateAxisPointer', + currTrigger: currTrigger, + x: e && e.offsetX, + y: e && e.offsetY + }); + } + } + ); + }, + + /** + * @override + */ + remove: function (ecModel, api) { + unregister(api.getZr(), 'axisPointer'); + AxisPointerView.superApply(this._model, 'remove', arguments); + }, + + /** + * @override + */ + dispose: function (ecModel, api) { + unregister('axisPointer', api); + AxisPointerView.superApply(this._model, 'dispose', arguments); + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$11 = makeInner(); +var clone$4 = clone; +var bind$2 = bind; + +/** + * Base axis pointer class in 2D. + * Implemenents {module:echarts/component/axis/IAxisPointer}. + */ +function BaseAxisPointer() { +} + +BaseAxisPointer.prototype = { + + /** + * @private + */ + _group: null, + + /** + * @private + */ + _lastGraphicKey: null, + + /** + * @private + */ + _handle: null, + + /** + * @private + */ + _dragging: false, + + /** + * @private + */ + _lastValue: null, + + /** + * @private + */ + _lastStatus: null, + + /** + * @private + */ + _payloadInfo: null, + + /** + * In px, arbitrary value. Do not set too small, + * no animation is ok for most cases. + * @protected + */ + animationThreshold: 15, + + /** + * @implement + */ + render: function (axisModel, axisPointerModel, api, forceRender) { + var value = axisPointerModel.get('value'); + var status = axisPointerModel.get('status'); + + // Bind them to `this`, not in closure, otherwise they will not + // be replaced when user calling setOption in not merge mode. + this._axisModel = axisModel; + this._axisPointerModel = axisPointerModel; + this._api = api; + + // Optimize: `render` will be called repeatly during mouse move. + // So it is power consuming if performing `render` each time, + // especially on mobile device. + if (!forceRender + && this._lastValue === value + && this._lastStatus === status + ) { + return; + } + this._lastValue = value; + this._lastStatus = status; + + var group = this._group; + var handle = this._handle; + + if (!status || status === 'hide') { + // Do not clear here, for animation better. + group && group.hide(); + handle && handle.hide(); + return; + } + group && group.show(); + handle && handle.show(); + + // Otherwise status is 'show' + var elOption = {}; + this.makeElOption(elOption, value, axisModel, axisPointerModel, api); + + // Enable change axis pointer type. + var graphicKey = elOption.graphicKey; + if (graphicKey !== this._lastGraphicKey) { + this.clear(api); + } + this._lastGraphicKey = graphicKey; + + var moveAnimation = this._moveAnimation + = this.determineAnimation(axisModel, axisPointerModel); + + if (!group) { + group = this._group = new Group(); + this.createPointerEl(group, elOption, axisModel, axisPointerModel); + this.createLabelEl(group, elOption, axisModel, axisPointerModel); + api.getZr().add(group); + } + else { + var doUpdateProps = curry(updateProps$1, axisPointerModel, moveAnimation); + this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel); + this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel); + } + + updateMandatoryProps(group, axisPointerModel, true); + + this._renderHandle(value); + }, + + /** + * @implement + */ + remove: function (api) { + this.clear(api); + }, + + /** + * @implement + */ + dispose: function (api) { + this.clear(api); + }, + + /** + * @protected + */ + determineAnimation: function (axisModel, axisPointerModel) { + var animation = axisPointerModel.get('animation'); + var axis = axisModel.axis; + var isCategoryAxis = axis.type === 'category'; + var useSnap = axisPointerModel.get('snap'); + + // Value axis without snap always do not snap. + if (!useSnap && !isCategoryAxis) { + return false; + } + + if (animation === 'auto' || animation == null) { + var animationThreshold = this.animationThreshold; + if (isCategoryAxis && axis.getBandWidth() > animationThreshold) { + return true; + } + + // It is important to auto animation when snap used. Consider if there is + // a dataZoom, animation will be disabled when too many points exist, while + // it will be enabled for better visual effect when little points exist. + if (useSnap) { + var seriesDataCount = getAxisInfo(axisModel).seriesDataCount; + var axisExtent = axis.getExtent(); + // Approximate band width + return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold; + } + + return false; + } + + return animation === true; + }, + + /** + * add {pointer, label, graphicKey} to elOption + * @protected + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + // Shoule be implemenented by sub-class. + }, + + /** + * @protected + */ + createPointerEl: function (group, elOption, axisModel, axisPointerModel) { + var pointerOption = elOption.pointer; + if (pointerOption) { + var pointerEl = inner$11(group).pointerEl = new graphic[pointerOption.type]( + clone$4(elOption.pointer) + ); + group.add(pointerEl); + } + }, + + /** + * @protected + */ + createLabelEl: function (group, elOption, axisModel, axisPointerModel) { + if (elOption.label) { + var labelEl = inner$11(group).labelEl = new Rect( + clone$4(elOption.label) + ); + + group.add(labelEl); + updateLabelShowHide(labelEl, axisPointerModel); + } + }, + + /** + * @protected + */ + updatePointerEl: function (group, elOption, updateProps$$1) { + var pointerEl = inner$11(group).pointerEl; + if (pointerEl) { + pointerEl.setStyle(elOption.pointer.style); + updateProps$$1(pointerEl, {shape: elOption.pointer.shape}); + } + }, + + /** + * @protected + */ + updateLabelEl: function (group, elOption, updateProps$$1, axisPointerModel) { + var labelEl = inner$11(group).labelEl; + if (labelEl) { + labelEl.setStyle(elOption.label.style); + updateProps$$1(labelEl, { + // Consider text length change in vertical axis, animation should + // be used on shape, otherwise the effect will be weird. + shape: elOption.label.shape, + position: elOption.label.position + }); + + updateLabelShowHide(labelEl, axisPointerModel); + } + }, + + /** + * @private + */ + _renderHandle: function (value) { + if (this._dragging || !this.updateHandleTransform) { + return; + } + + var axisPointerModel = this._axisPointerModel; + var zr = this._api.getZr(); + var handle = this._handle; + var handleModel = axisPointerModel.getModel('handle'); + + var status = axisPointerModel.get('status'); + if (!handleModel.get('show') || !status || status === 'hide') { + handle && zr.remove(handle); + this._handle = null; + return; + } + + var isInit; + if (!this._handle) { + isInit = true; + handle = this._handle = createIcon( + handleModel.get('icon'), + { + cursor: 'move', + draggable: true, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + onmousedown: bind$2(this._onHandleDragMove, this, 0, 0), + drift: bind$2(this._onHandleDragMove, this), + ondragend: bind$2(this._onHandleDragEnd, this) + } + ); + zr.add(handle); + } + + updateMandatoryProps(handle, axisPointerModel, false); + + // update style + var includeStyles = [ + 'color', 'borderColor', 'borderWidth', 'opacity', + 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY' + ]; + handle.setStyle(handleModel.getItemStyle(null, includeStyles)); + + // update position + var handleSize = handleModel.get('size'); + if (!isArray(handleSize)) { + handleSize = [handleSize, handleSize]; + } + handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]); + + createOrUpdate( + this, + '_doDispatchAxisPointer', + handleModel.get('throttle') || 0, + 'fixRate' + ); + + this._moveHandleToValue(value, isInit); + }, + + /** + * @private + */ + _moveHandleToValue: function (value, isInit) { + updateProps$1( + this._axisPointerModel, + !isInit && this._moveAnimation, + this._handle, + getHandleTransProps(this.getHandleTransform( + value, this._axisModel, this._axisPointerModel + )) + ); + }, + + /** + * @private + */ + _onHandleDragMove: function (dx, dy) { + var handle = this._handle; + if (!handle) { + return; + } + + this._dragging = true; + + // Persistent for throttle. + var trans = this.updateHandleTransform( + getHandleTransProps(handle), + [dx, dy], + this._axisModel, + this._axisPointerModel + ); + this._payloadInfo = trans; + + handle.stopAnimation(); + handle.attr(getHandleTransProps(trans)); + inner$11(handle).lastProp = null; + + this._doDispatchAxisPointer(); + }, + + /** + * Throttled method. + * @private + */ + _doDispatchAxisPointer: function () { + var handle = this._handle; + if (!handle) { + return; + } + + var payloadInfo = this._payloadInfo; + var axisModel = this._axisModel; + this._api.dispatchAction({ + type: 'updateAxisPointer', + x: payloadInfo.cursorPoint[0], + y: payloadInfo.cursorPoint[1], + tooltipOption: payloadInfo.tooltipOption, + axesInfo: [{ + axisDim: axisModel.axis.dim, + axisIndex: axisModel.componentIndex + }] + }); + }, + + /** + * @private + */ + _onHandleDragEnd: function (moveAnimation) { + this._dragging = false; + var handle = this._handle; + if (!handle) { + return; + } + + var value = this._axisPointerModel.get('value'); + // Consider snap or categroy axis, handle may be not consistent with + // axisPointer. So move handle to align the exact value position when + // drag ended. + this._moveHandleToValue(value); + + // For the effect: tooltip will be shown when finger holding on handle + // button, and will be hidden after finger left handle button. + this._api.dispatchAction({ + type: 'hideTip' + }); + }, + + /** + * Should be implemenented by sub-class if support `handle`. + * @protected + * @param {number} value + * @param {module:echarts/model/Model} axisModel + * @param {module:echarts/model/Model} axisPointerModel + * @return {Object} {position: [x, y], rotation: 0} + */ + getHandleTransform: null, + + /** + * * Should be implemenented by sub-class if support `handle`. + * @protected + * @param {Object} transform {position, rotation} + * @param {Array.} delta [dx, dy] + * @param {module:echarts/model/Model} axisModel + * @param {module:echarts/model/Model} axisPointerModel + * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]} + */ + updateHandleTransform: null, + + /** + * @private + */ + clear: function (api) { + this._lastValue = null; + this._lastStatus = null; + + var zr = api.getZr(); + var group = this._group; + var handle = this._handle; + if (zr && group) { + this._lastGraphicKey = null; + group && zr.remove(group); + handle && zr.remove(handle); + this._group = null; + this._handle = null; + this._payloadInfo = null; + } + }, + + /** + * @protected + */ + doClear: function () { + // Implemented by sub-class if necessary. + }, + + /** + * @protected + * @param {Array.} xy + * @param {Array.} wh + * @param {number} [xDimIndex=0] or 1 + */ + buildLabel: function (xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; + } +}; + +BaseAxisPointer.prototype.constructor = BaseAxisPointer; + + +function updateProps$1(animationModel, moveAnimation, el, props) { + // Animation optimize. + if (!propsEqual(inner$11(el).lastProp, props)) { + inner$11(el).lastProp = props; + moveAnimation + ? updateProps(el, props, animationModel) + : (el.stopAnimation(), el.attr(props)); + } +} + +function propsEqual(lastProps, newProps) { + if (isObject$1(lastProps) && isObject$1(newProps)) { + var equals = true; + each$1(newProps, function (item, key) { + equals = equals && propsEqual(lastProps[key], item); + }); + return !!equals; + } + else { + return lastProps === newProps; + } +} + +function updateLabelShowHide(labelEl, axisPointerModel) { + labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide'](); +} + +function getHandleTransProps(trans) { + return { + position: trans.position.slice(), + rotation: trans.rotation || 0 + }; +} + +function updateMandatoryProps(group, axisPointerModel, silent) { + var z = axisPointerModel.get('z'); + var zlevel = axisPointerModel.get('zlevel'); + + group && group.traverse(function (el) { + if (el.type !== 'group') { + z != null && (el.z = z); + zlevel != null && (el.zlevel = zlevel); + el.silent = silent; + } + }); +} + +enableClassExtend(BaseAxisPointer); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/model/Model} axisPointerModel + */ +function buildElStyle(axisPointerModel) { + var axisPointerType = axisPointerModel.get('type'); + var styleModel = axisPointerModel.getModel(axisPointerType + 'Style'); + var style; + if (axisPointerType === 'line') { + style = styleModel.getLineStyle(); + style.fill = null; + } + else if (axisPointerType === 'shadow') { + style = styleModel.getAreaStyle(); + style.stroke = null; + } + return style; +} + +/** + * @param {Function} labelPos {align, verticalAlign, position} + */ +function buildLabelElOption( + elOption, axisModel, axisPointerModel, api, labelPos +) { + var value = axisPointerModel.get('value'); + var text = getValueLabel( + value, axisModel.axis, axisModel.ecModel, + axisPointerModel.get('seriesDataIndices'), + { + precision: axisPointerModel.get('label.precision'), + formatter: axisPointerModel.get('label.formatter') + } + ); + var labelModel = axisPointerModel.getModel('label'); + var paddings = normalizeCssArray$1(labelModel.get('padding') || 0); + + var font = labelModel.getFont(); + var textRect = getBoundingRect(text, font); + + var position = labelPos.position; + var width = textRect.width + paddings[1] + paddings[3]; + var height = textRect.height + paddings[0] + paddings[2]; + + // Adjust by align. + var align = labelPos.align; + align === 'right' && (position[0] -= width); + align === 'center' && (position[0] -= width / 2); + var verticalAlign = labelPos.verticalAlign; + verticalAlign === 'bottom' && (position[1] -= height); + verticalAlign === 'middle' && (position[1] -= height / 2); + + // Not overflow ec container + confineInContainer(position, width, height, api); + + var bgColor = labelModel.get('backgroundColor'); + if (!bgColor || bgColor === 'auto') { + bgColor = axisModel.get('axisLine.lineStyle.color'); + } + + elOption.label = { + shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')}, + position: position.slice(), + // TODO: rich + style: { + text: text, + textFont: font, + textFill: labelModel.getTextColor(), + textPosition: 'inside', + fill: bgColor, + stroke: labelModel.get('borderColor') || 'transparent', + lineWidth: labelModel.get('borderWidth') || 0, + shadowBlur: labelModel.get('shadowBlur'), + shadowColor: labelModel.get('shadowColor'), + shadowOffsetX: labelModel.get('shadowOffsetX'), + shadowOffsetY: labelModel.get('shadowOffsetY') + }, + // Lable should be over axisPointer. + z2: 10 + }; +} + +// Do not overflow ec container +function confineInContainer(position, width, height, api) { + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + position[0] = Math.min(position[0] + width, viewWidth) - width; + position[1] = Math.min(position[1] + height, viewHeight) - height; + position[0] = Math.max(position[0], 0); + position[1] = Math.max(position[1], 0); +} + +/** + * @param {number} value + * @param {module:echarts/coord/Axis} axis + * @param {module:echarts/model/Global} ecModel + * @param {Object} opt + * @param {Array.} seriesDataIndices + * @param {number|string} opt.precision 'auto' or a number + * @param {string|Function} opt.formatter label formatter + */ +function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) { + value = axis.scale.parse(value); + var text = axis.scale.getLabel( + // If `precision` is set, width can be fixed (like '12.00500'), which + // helps to debounce when when moving label. + value, {precision: opt.precision} + ); + var formatter = opt.formatter; + + if (formatter) { + var params = { + value: getAxisRawValue(axis, value), + seriesData: [] + }; + each$1(seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var dataParams = series && series.getDataParams(dataIndex); + dataParams && params.seriesData.push(dataParams); + }); + + if (isString(formatter)) { + text = formatter.replace('{value}', text); + } + else if (isFunction$1(formatter)) { + text = formatter(params); + } + } + + return text; +} + +/** + * @param {module:echarts/coord/Axis} axis + * @param {number} value + * @param {Object} layoutInfo { + * rotation, position, labelOffset, labelDirection, labelMargin + * } + */ +function getTransformedPosition(axis, value, layoutInfo) { + var transform = create$1(); + rotate(transform, transform, layoutInfo.rotation); + translate(transform, transform, layoutInfo.position); + + return applyTransform$1([ + axis.dataToCoord(value), + (layoutInfo.labelOffset || 0) + + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0) + ], transform); +} + +function buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api +) { + var textLayout = AxisBuilder.innerTextLayout( + layoutInfo.rotation, 0, layoutInfo.labelDirection + ); + layoutInfo.labelMargin = axisPointerModel.get('label.margin'); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + align: textLayout.textAlign, + verticalAlign: textLayout.textVerticalAlign + }); +} + +/** + * @param {Array.} p1 + * @param {Array.} p2 + * @param {number} [xDimIndex=0] or 1 + */ +function makeLineShape(p1, p2, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x1: p1[xDimIndex], + y1: p1[1 - xDimIndex], + x2: p2[xDimIndex], + y2: p2[1 - xDimIndex] + }; +} + +/** + * @param {Array.} xy + * @param {Array.} wh + * @param {number} [xDimIndex=0] or 1 + */ +function makeRectShape(xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; +} + +function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) { + return { + cx: cx, + cy: cy, + r0: r0, + r: r, + startAngle: startAngle, + endAngle: endAngle, + clockwise: true + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var CartesianAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisPointerType = axisPointerModel.get('type'); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true)); + + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder[axisPointerType]( + axis, pixelValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout$1(grid.model, axisModel); + buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api + ); + }, + + /** + * @override + */ + getHandleTransform: function (value, axisModel, axisPointerModel) { + var layoutInfo = layout$1(axisModel.axis.grid.model, axisModel, { + labelInside: false + }); + layoutInfo.labelMargin = axisPointerModel.get('handle.margin'); + return { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }, + + /** + * @override + */ + updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisExtent = axis.getGlobalExtent(true); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var dimIndex = axis.dim === 'x' ? 0 : 1; + + var currPosition = transform.position; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; + + // Make tooltip do not overlap axisPointer and in the middle of the grid. + var tooltipOptions = [{verticalAlign: 'middle'}, {align: 'center'}]; + + return { + position: currPosition, + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: tooltipOptions[dimIndex] + }; + } + +}); + +function getCartesian(grid, axis) { + var opt = {}; + opt[axis.dim + 'AxisIndex'] = axis.index; + return grid.getCartesian(opt); +} + +var pointerShapeBuilder = { + + line: function (axis, pixelValue, otherExtent, elStyle) { + var targetShape = makeLineShape( + [pixelValue, otherExtent[0]], + [pixelValue, otherExtent[1]], + getAxisDimIndex(axis) + ); + subPixelOptimizeLine({ + shape: targetShape, + style: elStyle + }); + return { + type: 'Line', + shape: targetShape + }; + }, + + shadow: function (axis, pixelValue, otherExtent, elStyle) { + var bandWidth = Math.max(1, axis.getBandWidth()); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape( + [pixelValue - bandWidth / 2, otherExtent[0]], + [bandWidth, span], + getAxisDimIndex(axis) + ) + }; + } +}; + +function getAxisDimIndex(axis) { + return axis.dim === 'x' ? 0 : 1; +} + +AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// CartesianAxisPointer is not supposed to be required here. But consider +// echarts.simple.js and online build tooltip, which only require gridSimple, +// CartesianAxisPointer should be able to required somewhere. +registerPreprocessor(function (option) { + // Always has a global axisPointerModel for default setting. + if (option) { + (!option.axisPointer || option.axisPointer.length === 0) + && (option.axisPointer = {}); + + var link = option.axisPointer.link; + // Normalize to array to avoid object mergin. But if link + // is not set, remain null/undefined, otherwise it will + // override existent link setting. + if (link && !isArray(link)) { + option.axisPointer.link = [link]; + } + } +}); + +// This process should proformed after coordinate systems created +// and series data processed. So put it on statistic processing stage. +registerProcessor(PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) { + // Build axisPointerModel, mergin tooltip.axisPointer model for each axis. + // allAxesInfo should be updated when setOption performed. + ecModel.getComponent('axisPointer').coordSysAxesInfo + = collect(ecModel, api); +}); + +// Broadcast to all views. +registerAction({ + type: 'updateAxisPointer', + event: 'updateAxisPointer', + update: ':updateAxisPointer' +}, axisTrigger); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var XY = ['x', 'y']; +var WH = ['width', 'height']; + +var SingleAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis)); + var pixelValue = coordSys.dataToPoint(value)[0]; + + var axisPointerType = axisPointerModel.get('type'); + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$1[axisPointerType]( + axis, pixelValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout$2(axisModel); + buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api + ); + }, + + /** + * @override + */ + getHandleTransform: function (value, axisModel, axisPointerModel) { + var layoutInfo = layout$2(axisModel, {labelInside: false}); + layoutInfo.labelMargin = axisPointerModel.get('handle.margin'); + return { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }, + + /** + * @override + */ + updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var dimIndex = getPointDimIndex(axis); + var axisExtent = getGlobalExtent(coordSys, dimIndex); + var currPosition = transform.position; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex); + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; + + return { + position: currPosition, + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: { + verticalAlign: 'middle' + } + }; + } +}); + +var pointerShapeBuilder$1 = { + + line: function (axis, pixelValue, otherExtent, elStyle) { + var targetShape = makeLineShape( + [pixelValue, otherExtent[0]], + [pixelValue, otherExtent[1]], + getPointDimIndex(axis) + ); + subPixelOptimizeLine({ + shape: targetShape, + style: elStyle + }); + return { + type: 'Line', + shape: targetShape + }; + }, + + shadow: function (axis, pixelValue, otherExtent, elStyle) { + var bandWidth = axis.getBandWidth(); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape( + [pixelValue - bandWidth / 2, otherExtent[0]], + [bandWidth, span], + getPointDimIndex(axis) + ) + }; + } +}; + +function getPointDimIndex(axis) { + return axis.isHorizontal() ? 0 : 1; +} + +function getGlobalExtent(coordSys, dimIndex) { + var rect = coordSys.getRect(); + return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]]; +} + +AxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentView({ + type: 'single' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Define the themeRiver view's series model + * @author Deqing Li(annong035@gmail.com) + */ + +var DATA_NAME_INDEX = 2; + +var ThemeRiverSeries = SeriesModel.extend({ + + type: 'series.themeRiver', + + dependencies: ['singleAxis'], + + /** + * @readOnly + * @type {module:zrender/core/util#HashMap} + */ + nameMap: null, + + /** + * @override + */ + init: function (option) { + // eslint-disable-next-line + ThemeRiverSeries.superApply(this, 'init', arguments); + + // Put this function here is for the sake of consistency of code style. + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + }, + + /** + * If there is no value of a certain point in the time for some event,set it value to 0. + * + * @param {Array} data initial data in the option + * @return {Array} + */ + fixData: function (data) { + var rawDataLength = data.length; + + // grouped data by name + var dataByName = nest() + .key(function (dataItem) { + return dataItem[2]; + }) + .entries(data); + + // data group in each layer + var layData = map(dataByName, function (d) { + return { + name: d.key, + dataList: d.values + }; + }); + + var layerNum = layData.length; + var largestLayer = -1; + var index = -1; + for (var i = 0; i < layerNum; ++i) { + var len = layData[i].dataList.length; + if (len > largestLayer) { + largestLayer = len; + index = i; + } + } + + for (var k = 0; k < layerNum; ++k) { + if (k === index) { + continue; + } + var name = layData[k].name; + for (var j = 0; j < largestLayer; ++j) { + var timeValue = layData[index].dataList[j][0]; + var length = layData[k].dataList.length; + var keyIndex = -1; + for (var l = 0; l < length; ++l) { + var value = layData[k].dataList[l][0]; + if (value === timeValue) { + keyIndex = l; + break; + } + } + if (keyIndex === -1) { + data[rawDataLength] = []; + data[rawDataLength][0] = timeValue; + data[rawDataLength][1] = 0; + data[rawDataLength][2] = name; + rawDataLength++; + + } + } + } + return data; + }, + + /** + * @override + * @param {Object} option the initial option that user gived + * @param {module:echarts/model/Model} ecModel the model object for themeRiver option + * @return {module:echarts/data/List} + */ + getInitialData: function (option, ecModel) { + + var singleAxisModel = ecModel.queryComponents({ + mainType: 'singleAxis', + index: this.get('singleAxisIndex'), + id: this.get('singleAxisId') + })[0]; + + var axisType = singleAxisModel.get('type'); + + // filter the data item with the value of label is undefined + var filterData = filter(option.data, function (dataItem) { + return dataItem[2] !== undefined; + }); + + // ??? TODO design a stage to transfer data for themeRiver and lines? + var data = this.fixData(filterData || []); + var nameList = []; + var nameMap = this.nameMap = createHashMap(); + var count = 0; + + for (var i = 0; i < data.length; ++i) { + nameList.push(data[i][DATA_NAME_INDEX]); + if (!nameMap.get(data[i][DATA_NAME_INDEX])) { + nameMap.set(data[i][DATA_NAME_INDEX], count); + count++; + } + } + + var dimensionsInfo = createDimensions(data, { + coordDimensions: ['single'], + dimensionsDefine: [ + { + name: 'time', + type: getDimensionTypeByAxis(axisType) + }, + { + name: 'value', + type: 'float' + }, + { + name: 'name', + type: 'ordinal' + } + ], + encodeDefine: { + single: 0, + value: 1, + itemName: 2 + } + }); + + var list = new List(dimensionsInfo, this); + list.initData(data); + + return list; + }, + + /** + * The raw data is divided into multiple layers and each layer + * has same name. + * + * @return {Array.>} + */ + getLayerSeries: function () { + var data = this.getData(); + var lenCount = data.count(); + var indexArr = []; + + for (var i = 0; i < lenCount; ++i) { + indexArr[i] = i; + } + // data group by name + var dataByName = nest() + .key(function (index) { + return data.get('name', index); + }) + .entries(indexArr); + + var layerSeries = map(dataByName, function (d) { + return { + name: d.key, + indices: d.values + }; + }); + + var timeDim = data.mapDimension('single'); + + for (var j = 0; j < layerSeries.length; ++j) { + layerSeries[j].indices.sort(comparer); + } + + function comparer(index1, index2) { + return data.get(timeDim, index1) - data.get(timeDim, index2); + } + + return layerSeries; + }, + + /** + * Get data indices for show tooltip content + * + * @param {Array.|string} dim single coordinate dimension + * @param {number} value axis value + * @param {module:echarts/coord/single/SingleAxis} baseAxis single Axis used + * the themeRiver. + * @return {Object} {dataIndices, nestestValue} + */ + getAxisTooltipData: function (dim, value, baseAxis) { + if (!isArray(dim)) { + dim = dim ? [dim] : []; + } + + var data = this.getData(); + var layerSeries = this.getLayerSeries(); + var indices = []; + var layerNum = layerSeries.length; + var nestestValue; + + for (var i = 0; i < layerNum; ++i) { + var minDist = Number.MAX_VALUE; + var nearestIdx = -1; + var pointNum = layerSeries[i].indices.length; + for (var j = 0; j < pointNum; ++j) { + var theValue = data.get(dim[0], layerSeries[i].indices[j]); + var dist = Math.abs(theValue - value); + if (dist <= minDist) { + nestestValue = theValue; + minDist = dist; + nearestIdx = layerSeries[i].indices[j]; + } + } + indices.push(nearestIdx); + } + + return {dataIndices: indices, nestestValue: nestestValue}; + }, + + /** + * @override + * @param {number} dataIndex index of data + */ + formatTooltip: function (dataIndex) { + var data = this.getData(); + var htmlName = data.getName(dataIndex); + var htmlValue = data.get(data.mapDimension('value'), dataIndex); + if (isNaN(htmlValue) || htmlValue == null) { + htmlValue = '-'; + } + return encodeHTML(htmlName + ' : ' + htmlValue); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'singleAxis', + + // gap in axis's orthogonal orientation + boundaryGap: ['10%', '10%'], + + // legendHoverLink: true, + + singleAxisIndex: 0, + + animationEasing: 'linear', + + label: { + margin: 4, + show: true, + position: 'left', + color: '#000', + fontSize: 11 + }, + + emphasis: { + label: { + show: true + } + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file The file used to draw themeRiver view + * @author Deqing Li(annong035@gmail.com) + */ + +extendChartView({ + + type: 'themeRiver', + + init: function () { + this._layers = []; + }, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var group = this.group; + + var layerSeries = seriesModel.getLayerSeries(); + + var layoutInfo = data.getLayout('layoutInfo'); + var rect = layoutInfo.rect; + var boundaryGap = layoutInfo.boundaryGap; + + group.attr('position', [0, rect.y + boundaryGap[0]]); + + function keyGetter(item) { + return item.name; + } + var dataDiffer = new DataDiffer( + this._layersSeries || [], layerSeries, + keyGetter, keyGetter + ); + + var newLayersGroups = {}; + + dataDiffer + .add(bind(process, this, 'add')) + .update(bind(process, this, 'update')) + .remove(bind(process, this, 'remove')) + .execute(); + + function process(status, idx, oldIdx) { + var oldLayersGroups = this._layers; + if (status === 'remove') { + group.remove(oldLayersGroups[idx]); + return; + } + var points0 = []; + var points1 = []; + var color; + var indices = layerSeries[idx].indices; + for (var j = 0; j < indices.length; j++) { + var layout = data.getItemLayout(indices[j]); + var x = layout.x; + var y0 = layout.y0; + var y = layout.y; + + points0.push([x, y0]); + points1.push([x, y0 + y]); + + color = data.getItemVisual(indices[j], 'color'); + } + + var polygon; + var text; + var textLayout = data.getItemLayout(indices[0]); + var itemModel = data.getItemModel(indices[j - 1]); + var labelModel = itemModel.getModel('label'); + var margin = labelModel.get('margin'); + if (status === 'add') { + var layerGroup = newLayersGroups[idx] = new Group(); + polygon = new Polygon$1({ + shape: { + points: points0, + stackedOnPoints: points1, + smooth: 0.4, + stackedOnSmooth: 0.4, + smoothConstraint: false + }, + z2: 0 + }); + text = new Text({ + style: { + x: textLayout.x - margin, + y: textLayout.y0 + textLayout.y / 2 + } + }); + layerGroup.add(polygon); + layerGroup.add(text); + group.add(layerGroup); + + polygon.setClipPath(createGridClipShape$3(polygon.getBoundingRect(), seriesModel, function () { + polygon.removeClipPath(); + })); + } + else { + var layerGroup = oldLayersGroups[oldIdx]; + polygon = layerGroup.childAt(0); + text = layerGroup.childAt(1); + group.add(layerGroup); + + newLayersGroups[idx] = layerGroup; + + updateProps(polygon, { + shape: { + points: points0, + stackedOnPoints: points1 + } + }, seriesModel); + + updateProps(text, { + style: { + x: textLayout.x - margin, + y: textLayout.y0 + textLayout.y / 2 + } + }, seriesModel); + } + + var hoverItemStyleModel = itemModel.getModel('emphasis.itemStyle'); + var itemStyleModel = itemModel.getModel('itemStyle'); + + setTextStyle(text.style, labelModel, { + text: labelModel.get('show') + ? seriesModel.getFormattedLabel(indices[j - 1], 'normal') + || data.getName(indices[j - 1]) + : null, + textVerticalAlign: 'middle' + }); + + polygon.setStyle(extend({ + fill: color + }, itemStyleModel.getItemStyle(['color']))); + + setHoverStyle(polygon, hoverItemStyleModel.getItemStyle()); + } + + this._layersSeries = layerSeries; + this._layers = newLayersGroups; + }, + + dispose: function () {} +}); + +// add animation to the view +function createGridClipShape$3(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + width: rect.width + 20, + height: rect.height + 20 + } + }, seriesModel, cb); + + return rectEl; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Using layout algorithm transform the raw data to layout information. + * @author Deqing Li(annong035@gmail.com) + */ + +var themeRiverLayout = function (ecModel, api) { + + ecModel.eachSeriesByType('themeRiver', function (seriesModel) { + + var data = seriesModel.getData(); + + var single = seriesModel.coordinateSystem; + + var layoutInfo = {}; + + // use the axis boundingRect for view + var rect = single.getRect(); + + layoutInfo.rect = rect; + + var boundaryGap = seriesModel.get('boundaryGap'); + + var axis = single.getAxis(); + + layoutInfo.boundaryGap = boundaryGap; + + if (axis.orient === 'horizontal') { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.height); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.height); + var height = rect.height - boundaryGap[0] - boundaryGap[1]; + themeRiverLayout$1(data, seriesModel, height); + } + else { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.width); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.width); + var width = rect.width - boundaryGap[0] - boundaryGap[1]; + themeRiverLayout$1(data, seriesModel, width); + } + + data.setLayout('layoutInfo', layoutInfo); + }); +}; + +/** + * The layout information about themeriver + * + * @param {module:echarts/data/List} data data in the series + * @param {module:echarts/model/Series} seriesModel the model object of themeRiver series + * @param {number} height value used to compute every series height + */ +function themeRiverLayout$1(data, seriesModel, height) { + if (!data.count()) { + return; + } + var coordSys = seriesModel.coordinateSystem; + // the data in each layer are organized into a series. + var layerSeries = seriesModel.getLayerSeries(); + + // the points in each layer. + var timeDim = data.mapDimension('single'); + var valueDim = data.mapDimension('value'); + var layerPoints = map(layerSeries, function (singleLayer) { + return map(singleLayer.indices, function (idx) { + var pt = coordSys.dataToPoint(data.get(timeDim, idx)); + pt[1] = data.get(valueDim, idx); + return pt; + }); + }); + + var base = computeBaseline(layerPoints); + var baseLine = base.y0; + var ky = height / base.max; + + // set layout information for each item. + var n = layerSeries.length; + var m = layerSeries[0].indices.length; + var baseY0; + for (var j = 0; j < m; ++j) { + baseY0 = baseLine[j] * ky; + data.setItemLayout(layerSeries[0].indices[j], { + layerIndex: 0, + x: layerPoints[0][j][0], + y0: baseY0, + y: layerPoints[0][j][1] * ky + }); + for (var i = 1; i < n; ++i) { + baseY0 += layerPoints[i - 1][j][1] * ky; + data.setItemLayout(layerSeries[i].indices[j], { + layerIndex: i, + x: layerPoints[i][j][0], + y0: baseY0, + y: layerPoints[i][j][1] * ky + }); + } + } +} + +/** + * Compute the baseLine of the rawdata + * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics + * + * @param {Array.} data the points in each layer + * @return {Object} + */ +function computeBaseline(data) { + var layerNum = data.length; + var pointNum = data[0].length; + var sums = []; + var y0 = []; + var max = 0; + var temp; + var base = {}; + + for (var i = 0; i < pointNum; ++i) { + for (var j = 0, temp = 0; j < layerNum; ++j) { + temp += data[j][i][1]; + } + if (temp > max) { + max = temp; + } + sums.push(temp); + } + + for (var k = 0; k < pointNum; ++k) { + y0[k] = (max - sums[k]) / 2; + } + max = 0; + + for (var l = 0; l < pointNum; ++l) { + var sum = sums[l] + y0[l]; + if (sum > max) { + max = sum; + } + } + base.y0 = y0; + base.max = max; + + return base; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Visual encoding for themeRiver view + * @author Deqing Li(annong035@gmail.com) + */ + +var themeRiverVisual = function (ecModel) { + ecModel.eachSeriesByType('themeRiver', function (seriesModel) { + var data = seriesModel.getData(); + var rawData = seriesModel.getRawData(); + var colorList = seriesModel.get('color'); + var idxMap = createHashMap(); + + data.each(function (idx) { + idxMap.set(data.getRawIndex(idx), idx); + }); + + rawData.each(function (rawIndex) { + var name = rawData.getName(rawIndex); + var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length]; + + rawData.setItemVisual(rawIndex, 'color', color); + + var idx = idxMap.get(rawIndex); + + if (idx != null) { + data.setItemVisual(idx, 'color', color); + } + }); + }); +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerLayout(themeRiverLayout); +registerVisual(themeRiverVisual); +registerProcessor(dataFilter('themeRiver')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +SeriesModel.extend({ + + type: 'series.sunburst', + + /** + * @type {module:echarts/data/Tree~Node} + */ + _viewRoot: null, + + getInitialData: function (option, ecModel) { + // Create a virtual root. + var root = { name: option.name, children: option.data }; + + completeTreeValue$1(root); + + var levels = option.levels || []; + + // levels = option.levels = setDefault(levels, ecModel); + + var treeOption = {}; + + treeOption.levels = levels; + + // Make sure always a new tree is created when setOption, + // in TreemapView, we check whether oldTree === newTree + // to choose mappings approach among old shapes and new shapes. + return Tree.createTree(root, this, treeOption).data; + }, + + optionUpdated: function () { + this.resetViewRoot(); + }, + + /* + * @override + */ + getDataParams: function (dataIndex) { + var params = SeriesModel.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treePathInfo = wrapTreePathInfo(node, this); + + return params; + }, + + defaultOption: { + zlevel: 0, + z: 2, + + // 默认全局居中 + center: ['50%', '50%'], + radius: [0, '75%'], + // 默认顺时针 + clockwise: true, + startAngle: 90, + // 最小角度改为0 + minAngle: 0, + + percentPrecision: 2, + + // If still show when all data zero. + stillShowZeroSum: true, + + // Policy of highlighting pieces when hover on one + // Valid values: 'none' (for not downplay others), 'descendant', + // 'ancestor', 'self' + highlightPolicy: 'descendant', + + // 'rootToNode', 'link', or false + nodeClick: 'rootToNode', + + renderLabelForZeroData: false, + + label: { + // could be: 'radial', 'tangential', or 'none' + rotate: 'radial', + show: true, + opacity: 1, + // 'left' is for inner side of inside, and 'right' is for outter + // side for inside + align: 'center', + position: 'inside', + distance: 5, + silent: true, + emphasis: {} + }, + itemStyle: { + borderWidth: 1, + borderColor: 'white', + borderType: 'solid', + shadowBlur: 0, + shadowColor: 'rgba(0, 0, 0, 0.2)', + shadowOffsetX: 0, + shadowOffsetY: 0, + opacity: 1, + emphasis: {}, + highlight: { + opacity: 1 + }, + downplay: { + opacity: 0.9 + } + }, + + // Animation type canbe expansion, scale + animationType: 'expansion', + animationDuration: 1000, + animationDurationUpdate: 500, + animationEasing: 'cubicOut', + + data: [], + + levels: [], + + /** + * Sort order. + * + * Valid values: 'desc', 'asc', null, or callback function. + * 'desc' and 'asc' for descend and ascendant order; + * null for not sorting; + * example of callback function: + * function(nodeA, nodeB) { + * return nodeA.getValue() - nodeB.getValue(); + * } + */ + sort: 'desc' + }, + + getViewRoot: function () { + return this._viewRoot; + }, + + /** + * @param {module:echarts/data/Tree~Node} [viewRoot] + */ + resetViewRoot: function (viewRoot) { + viewRoot + ? (this._viewRoot = viewRoot) + : (viewRoot = this._viewRoot); + + var root = this.getRawData().tree.root; + + if (!viewRoot + || (viewRoot !== root && !root.contains(viewRoot)) + ) { + this._viewRoot = root; + } + } +}); + + + +/** + * @param {Object} dataNode + */ +function completeTreeValue$1(dataNode) { + // Postorder travel tree. + // If value of none-leaf node is not set, + // calculate it by suming up the value of all children. + var sum = 0; + + each$1(dataNode.children, function (child) { + + completeTreeValue$1(child); + + var childValue = child.value; + isArray(childValue) && (childValue = childValue[0]); + + sum += childValue; + }); + + var thisValue = dataNode.value; + if (isArray(thisValue)) { + thisValue = thisValue[0]; + } + + if (thisValue == null || isNaN(thisValue)) { + thisValue = sum; + } + // Value should not less than 0. + if (thisValue < 0) { + thisValue = 0; + } + + isArray(dataNode.value) + ? (dataNode.value[0] = thisValue) + : (dataNode.value = thisValue); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var NodeHighlightPolicy = { + NONE: 'none', // not downplay others + DESCENDANT: 'descendant', + ANCESTOR: 'ancestor', + SELF: 'self' +}; + +var DEFAULT_SECTOR_Z = 2; +var DEFAULT_TEXT_Z = 4; + +/** + * Sunburstce of Sunburst including Sector, Label, LabelLine + * @constructor + * @extends {module:zrender/graphic/Group} + */ +function SunburstPiece(node, seriesModel, ecModel) { + + Group.call(this); + + var sector = new Sector({ + z2: DEFAULT_SECTOR_Z + }); + sector.seriesIndex = seriesModel.seriesIndex; + + var text = new Text({ + z2: DEFAULT_TEXT_Z, + silent: node.getModel('label').get('silent') + }); + this.add(sector); + this.add(text); + + this.updateData(true, node, 'normal', seriesModel, ecModel); + + // Hover to change label and labelLine + function onEmphasis() { + text.ignore = text.hoverIgnore; + } + function onNormal() { + text.ignore = text.normalIgnore; + } + this.on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('mouseover', onEmphasis) + .on('mouseout', onNormal); +} + +var SunburstPieceProto = SunburstPiece.prototype; + +SunburstPieceProto.updateData = function ( + firstCreate, + node, + state, + seriesModel, + ecModel +) { + this.node = node; + node.piece = this; + + seriesModel = seriesModel || this._seriesModel; + ecModel = ecModel || this._ecModel; + + var sector = this.childAt(0); + sector.dataIndex = node.dataIndex; + + var itemModel = node.getModel(); + var layout = node.getLayout(); + if (!layout) { + console.log(node.getLayout()); + } + var sectorShape = extend({}, layout); + sectorShape.label = null; + + var visualColor = getNodeColor(node, seriesModel, ecModel); + + var normalStyle = itemModel.getModel('itemStyle').getItemStyle(); + var style; + if (state === 'normal') { + style = normalStyle; + } + else { + var stateStyle = itemModel.getModel(state + '.itemStyle') + .getItemStyle(); + style = merge(stateStyle, normalStyle); + } + style = defaults( + { + lineJoin: 'bevel', + fill: style.fill || visualColor + }, + style + ); + + if (firstCreate) { + sector.setShape(sectorShape); + sector.shape.r = layout.r0; + updateProps( + sector, + { + shape: { + r: layout.r + } + }, + seriesModel, + node.dataIndex + ); + sector.useStyle(style); + } + else if (typeof style.fill === 'object' && style.fill.type + || typeof sector.style.fill === 'object' && sector.style.fill.type + ) { + // Disable animation for gradient since no interpolation method + // is supported for gradient + updateProps(sector, { + shape: sectorShape + }, seriesModel); + sector.useStyle(style); + } + else { + updateProps(sector, { + shape: sectorShape, + style: style + }, seriesModel); + } + + this._updateLabel(seriesModel, visualColor, state); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && sector.attr('cursor', cursorStyle); + + if (firstCreate) { + var highlightPolicy = seriesModel.getShallow('highlightPolicy'); + this._initEvents(sector, node, seriesModel, highlightPolicy); + } + + this._seriesModel = seriesModel || this._seriesModel; + this._ecModel = ecModel || this._ecModel; +}; + +SunburstPieceProto.onEmphasis = function (highlightPolicy) { + var that = this; + this.node.hostTree.root.eachNode(function (n) { + if (n.piece) { + if (that.node === n) { + n.piece.updateData(false, n, 'emphasis'); + } + else if (isNodeHighlighted(n, that.node, highlightPolicy)) { + n.piece.childAt(0).trigger('highlight'); + } + else if (highlightPolicy !== NodeHighlightPolicy.NONE) { + n.piece.childAt(0).trigger('downplay'); + } + } + }); +}; + +SunburstPieceProto.onNormal = function () { + this.node.hostTree.root.eachNode(function (n) { + if (n.piece) { + n.piece.updateData(false, n, 'normal'); + } + }); +}; + +SunburstPieceProto.onHighlight = function () { + this.updateData(false, this.node, 'highlight'); +}; + +SunburstPieceProto.onDownplay = function () { + this.updateData(false, this.node, 'downplay'); +}; + +SunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) { + var itemModel = this.node.getModel(); + var normalModel = itemModel.getModel('label'); + var labelModel = state === 'normal' || state === 'emphasis' + ? normalModel + : itemModel.getModel(state + '.label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + + var text = retrieve( + seriesModel.getFormattedLabel( + this.node.dataIndex, 'normal', null, null, 'label' + ), + this.node.name + ); + if (getLabelAttr('show') === false) { + text = ''; + } + + var layout = this.node.getLayout(); + var labelMinAngle = labelModel.get('minAngle'); + if (labelMinAngle == null) { + labelMinAngle = normalModel.get('minAngle'); + } + labelMinAngle = labelMinAngle / 180 * Math.PI; + var angle = layout.endAngle - layout.startAngle; + if (labelMinAngle != null && Math.abs(angle) < labelMinAngle) { + // Not displaying text when angle is too small + text = ''; + } + + var label = this.childAt(1); + + setLabelStyle( + label.style, label.hoverStyle || {}, normalModel, labelHoverModel, + { + defaultText: labelModel.getShallow('show') ? text : null, + autoColor: visualColor, + useInsideStyle: true + } + ); + + var midAngle = (layout.startAngle + layout.endAngle) / 2; + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + + var r; + var labelPosition = getLabelAttr('position'); + var labelPadding = getLabelAttr('distance') || 0; + var textAlign = getLabelAttr('align'); + if (labelPosition === 'outside') { + r = layout.r + labelPadding; + textAlign = midAngle > Math.PI / 2 ? 'right' : 'left'; + } + else { + if (!textAlign || textAlign === 'center') { + r = (layout.r + layout.r0) / 2; + textAlign = 'center'; + } + else if (textAlign === 'left') { + r = layout.r0 + labelPadding; + if (midAngle > Math.PI / 2) { + textAlign = 'right'; + } + } + else if (textAlign === 'right') { + r = layout.r - labelPadding; + if (midAngle > Math.PI / 2) { + textAlign = 'left'; + } + } + } + + label.attr('style', { + text: text, + textAlign: textAlign, + textVerticalAlign: getLabelAttr('verticalAlign') || 'middle', + opacity: getLabelAttr('opacity') + }); + + var textX = r * dx + layout.cx; + var textY = r * dy + layout.cy; + label.attr('position', [textX, textY]); + + var rotateType = getLabelAttr('rotate'); + var rotate = 0; + if (rotateType === 'radial') { + rotate = -midAngle; + if (rotate < -Math.PI / 2) { + rotate += Math.PI; + } + } + else if (rotateType === 'tangential') { + rotate = Math.PI / 2 - midAngle; + if (rotate > Math.PI / 2) { + rotate -= Math.PI; + } + else if (rotate < -Math.PI / 2) { + rotate += Math.PI; + } + } else if (typeof rotateType === 'number') { + rotate = rotateType * Math.PI / 180; + } + label.attr('rotation', rotate); + + function getLabelAttr(name) { + var stateAttr = labelModel.get(name); + if (stateAttr == null) { + return normalModel.get(name); + } + else { + return stateAttr; + } + } +}; + +SunburstPieceProto._initEvents = function ( + sector, + node, + seriesModel, + highlightPolicy +) { + sector.off('mouseover').off('mouseout').off('emphasis').off('normal'); + + var that = this; + var onEmphasis = function () { + that.onEmphasis(highlightPolicy); + }; + var onNormal = function () { + that.onNormal(); + }; + var onDownplay = function () { + that.onDownplay(); + }; + var onHighlight = function () { + that.onHighlight(); + }; + + if (seriesModel.isAnimationEnabled()) { + sector + .on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('downplay', onDownplay) + .on('highlight', onHighlight); + } +}; + +inherits(SunburstPiece, Group); + +/** + * Get node color + * + * @param {TreeNode} node the node to get color + * @param {module:echarts/model/Series} seriesModel series + * @param {module:echarts/model/Global} ecModel echarts defaults + */ +function getNodeColor(node, seriesModel, ecModel) { + // Color from visualMap + var visualColor = node.getVisual('color'); + var visualMetaList = node.getVisual('visualMeta'); + if (!visualMetaList || visualMetaList.length === 0) { + // Use first-generation color if has no visualMap + visualColor = null; + } + + // Self color or level color + var color = node.getModel('itemStyle').get('color'); + if (color) { + return color; + } + else if (visualColor) { + // Color mapping + return visualColor; + } + else if (node.depth === 0) { + // Virtual root node + return ecModel.option.color[0]; + } + else { + // First-generation color + var length = ecModel.option.color.length; + color = ecModel.option.color[getRootId(node) % length]; + } + return color; +} + +/** + * Get index of root in sorted order + * + * @param {TreeNode} node current node + * @return {number} index in root + */ +function getRootId(node) { + var ancestor = node; + while (ancestor.depth > 1) { + ancestor = ancestor.parentNode; + } + + var virtualRoot = node.getAncestors()[0]; + return indexOf(virtualRoot.children, ancestor); +} + +function isNodeHighlighted(node, activeNode, policy) { + if (policy === NodeHighlightPolicy.NONE) { + return false; + } + else if (policy === NodeHighlightPolicy.SELF) { + return node === activeNode; + } + else if (policy === NodeHighlightPolicy.ANCESTOR) { + return node === activeNode || node.isAncestorOf(activeNode); + } + else { + return node === activeNode || node.isDescendantOf(activeNode); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var ROOT_TO_NODE_ACTION = 'sunburstRootToNode'; + +var SunburstView = Chart.extend({ + + type: 'sunburst', + + init: function () { + }, + + render: function (seriesModel, ecModel, api, payload) { + var that = this; + + this.seriesModel = seriesModel; + this.api = api; + this.ecModel = ecModel; + + var data = seriesModel.getData(); + var virtualRoot = data.tree.root; + + var newRoot = seriesModel.getViewRoot(); + + var group = this.group; + + var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData'); + + var newChildren = []; + newRoot.eachNode(function (node) { + newChildren.push(node); + }); + var oldChildren = this._oldChildren || []; + + dualTravel(newChildren, oldChildren); + + renderRollUp(virtualRoot, newRoot); + + if (payload && payload.highlight && payload.highlight.piece) { + var highlightPolicy = seriesModel.getShallow('highlightPolicy'); + payload.highlight.piece.onEmphasis(highlightPolicy); + } + else if (payload && payload.unhighlight) { + var piece = this.virtualPiece; + if (!piece && virtualRoot.children.length) { + piece = virtualRoot.children[0].piece; + } + if (piece) { + piece.onNormal(); + } + } + + this._initEvents(); + + this._oldChildren = newChildren; + + function dualTravel(newChildren, oldChildren) { + if (newChildren.length === 0 && oldChildren.length === 0) { + return; + } + + new DataDiffer(oldChildren, newChildren, getKey, getKey) + .add(processNode) + .update(processNode) + .remove(curry(processNode, null)) + .execute(); + + function getKey(node) { + return node.getId(); + } + + function processNode(newId, oldId) { + var newNode = newId == null ? null : newChildren[newId]; + var oldNode = oldId == null ? null : oldChildren[oldId]; + + doRenderNode(newNode, oldNode); + } + } + + function doRenderNode(newNode, oldNode) { + if (!renderLabelForZeroData && newNode && !newNode.getValue()) { + // Not render data with value 0 + newNode = null; + } + + if (newNode !== virtualRoot && oldNode !== virtualRoot) { + if (oldNode && oldNode.piece) { + if (newNode) { + // Update + oldNode.piece.updateData( + false, newNode, 'normal', seriesModel, ecModel); + + // For tooltip + data.setItemGraphicEl(newNode.dataIndex, oldNode.piece); + } + else { + // Remove + removeNode(oldNode); + } + } + else if (newNode) { + // Add + var piece = new SunburstPiece( + newNode, + seriesModel, + ecModel + ); + group.add(piece); + + // For tooltip + data.setItemGraphicEl(newNode.dataIndex, piece); + } + } + } + + function removeNode(node) { + if (!node) { + return; + } + + if (node.piece) { + group.remove(node.piece); + node.piece = null; + } + } + + function renderRollUp(virtualRoot, viewRoot) { + if (viewRoot.depth > 0) { + // Render + if (that.virtualPiece) { + // Update + that.virtualPiece.updateData( + false, virtualRoot, 'normal', seriesModel, ecModel); + } + else { + // Add + that.virtualPiece = new SunburstPiece( + virtualRoot, + seriesModel, + ecModel + ); + group.add(that.virtualPiece); + } + + if (viewRoot.piece._onclickEvent) { + viewRoot.piece.off('click', viewRoot.piece._onclickEvent); + } + var event = function (e) { + that._rootToNode(viewRoot.parentNode); + }; + viewRoot.piece._onclickEvent = event; + that.virtualPiece.on('click', event); + } + else if (that.virtualPiece) { + // Remove + group.remove(that.virtualPiece); + that.virtualPiece = null; + } + } + }, + + dispose: function () { + }, + + /** + * @private + */ + _initEvents: function () { + var that = this; + + var event = function (e) { + var targetFound = false; + var viewRoot = that.seriesModel.getViewRoot(); + viewRoot.eachNode(function (node) { + if (!targetFound + && node.piece && node.piece.childAt(0) === e.target + ) { + var nodeClick = node.getModel().get('nodeClick'); + if (nodeClick === 'rootToNode') { + that._rootToNode(node); + } + else if (nodeClick === 'link') { + var itemModel = node.getModel(); + var link = itemModel.get('link'); + if (link) { + var linkTarget = itemModel.get('target', true) + || '_blank'; + window.open(link, linkTarget); + } + } + targetFound = true; + } + }); + }; + + if (this.group._onclickEvent) { + this.group.off('click', this.group._onclickEvent); + } + this.group.on('click', event); + this.group._onclickEvent = event; + }, + + /** + * @private + */ + _rootToNode: function (node) { + if (node !== this.seriesModel.getViewRoot()) { + this.api.dispatchAction({ + type: ROOT_TO_NODE_ACTION, + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: node + }); + } + }, + + /** + * @implement + */ + containPoint: function (point, seriesModel) { + var treeRoot = seriesModel.getData(); + var itemLayout = treeRoot.getItemLayout(0); + if (itemLayout) { + var dx = point[0] - itemLayout.cx; + var dy = point[1] - itemLayout.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + return radius <= itemLayout.r && radius >= itemLayout.r0; + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Sunburst action + */ + +var ROOT_TO_NODE_ACTION$1 = 'sunburstRootToNode'; + +registerAction( + {type: ROOT_TO_NODE_ACTION$1, update: 'updateView'}, + function (payload, ecModel) { + + ecModel.eachComponent( + {mainType: 'series', subType: 'sunburst', query: payload}, + handleRootToNode + ); + + function handleRootToNode(model, index) { + var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION$1], model); + + if (targetInfo) { + var originViewRoot = model.getViewRoot(); + if (originViewRoot) { + payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) + ? 'rollUp' : 'drillDown'; + } + model.resetViewRoot(targetInfo.node); + } + } + } +); + + +var HIGHLIGHT_ACTION = 'sunburstHighlight'; + +registerAction( + {type: HIGHLIGHT_ACTION, update: 'updateView'}, + function (payload, ecModel) { + + ecModel.eachComponent( + {mainType: 'series', subType: 'sunburst', query: payload}, + handleHighlight + ); + + function handleHighlight(model, index) { + var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model); + + if (targetInfo) { + payload.highlight = targetInfo.node; + } + } + } +); + + +var UNHIGHLIGHT_ACTION = 'sunburstUnhighlight'; + +registerAction( + {type: UNHIGHLIGHT_ACTION, update: 'updateView'}, + function (payload, ecModel) { + + ecModel.eachComponent( + {mainType: 'series', subType: 'sunburst', query: payload}, + handleUnhighlight + ); + + function handleUnhighlight(model, index) { + payload.unhighlight = true; + } + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var RADIAN$1 = Math.PI / 180; + +var sunburstLayout = function (seriesType, ecModel, api, payload) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var center = seriesModel.get('center'); + var radius = seriesModel.get('radius'); + + if (!isArray(radius)) { + radius = [0, radius]; + } + if (!isArray(center)) { + center = [center, center]; + } + + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], width); + var cy = parsePercent$1(center[1], height); + var r0 = parsePercent$1(radius[0], size / 2); + var r = parsePercent$1(radius[1], size / 2); + + var startAngle = -seriesModel.get('startAngle') * RADIAN$1; + var minAngle = seriesModel.get('minAngle') * RADIAN$1; + + var virtualRoot = seriesModel.getData().tree.root; + var treeRoot = seriesModel.getViewRoot(); + var rootDepth = treeRoot.depth; + + var sort = seriesModel.get('sort'); + if (sort != null) { + initChildren$1(treeRoot, sort); + } + + var validDataCount = 0; + each$1(treeRoot.children, function (child) { + !isNaN(child.getValue()) && validDataCount++; + }); + + var sum = treeRoot.getValue(); + // Sum may be 0 + var unitRadian = Math.PI / (sum || validDataCount) * 2; + + var renderRollupNode = treeRoot.depth > 0; + var levels = treeRoot.height - (renderRollupNode ? -1 : 1); + var rPerLevel = (r - r0) / (levels || 1); + + var clockwise = seriesModel.get('clockwise'); + + var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); + + // In the case some sector angle is smaller than minAngle + var dir = clockwise ? 1 : -1; + + /** + * Render a tree + * @return increased angle + */ + var renderNode = function (node, startAngle) { + if (!node) { + return; + } + + var endAngle = startAngle; + + // Render self + if (node !== virtualRoot) { + // Tree node is virtual, so it doesn't need to be drawn + var value = node.getValue(); + + var angle = (sum === 0 && stillShowZeroSum) + ? unitRadian : (value * unitRadian); + if (angle < minAngle) { + angle = minAngle; + + } + else { + + } + + endAngle = startAngle + dir * angle; + + var depth = node.depth - rootDepth + - (renderRollupNode ? -1 : 1); + var rStart = r0 + rPerLevel * depth; + var rEnd = r0 + rPerLevel * (depth + 1); + + var itemModel = node.getModel(); + if (itemModel.get('r0') != null) { + rStart = parsePercent$1(itemModel.get('r0'), size / 2); + } + if (itemModel.get('r') != null) { + rEnd = parsePercent$1(itemModel.get('r'), size / 2); + } + + node.setLayout({ + angle: angle, + startAngle: startAngle, + endAngle: endAngle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: rStart, + r: rEnd + }); + } + + // Render children + if (node.children && node.children.length) { + // currentAngle = startAngle; + var siblingAngle = 0; + each$1(node.children, function (node) { + siblingAngle += renderNode(node, startAngle + siblingAngle); + }); + } + + return endAngle - startAngle; + }; + + // Virtual root node for roll up + if (renderRollupNode) { + var rStart = r0; + var rEnd = r0 + rPerLevel; + + var angle = Math.PI * 2; + virtualRoot.setLayout({ + angle: angle, + startAngle: startAngle, + endAngle: startAngle + angle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: rStart, + r: rEnd + }); + } + + renderNode(treeRoot, startAngle); + }); +}; + +/** + * Init node children by order and update visual + * + * @param {TreeNode} node root node + * @param {boolean} isAsc if is in ascendant order + */ +function initChildren$1(node, isAsc) { + var children = node.children || []; + + node.children = sort$2(children, isAsc); + + // Init children recursively + if (children.length) { + each$1(node.children, function (child) { + initChildren$1(child, isAsc); + }); + } +} + +/** + * Sort children nodes + * + * @param {TreeNode[]} children children of node to be sorted + * @param {string | function | null} sort sort method + * See SunburstSeries.js for details. + */ +function sort$2(children, sortOrder) { + if (typeof sortOrder === 'function') { + return children.sort(sortOrder); + } + else { + var isAsc = sortOrder === 'asc'; + return children.sort(function (a, b) { + var diff = (a.getValue() - b.getValue()) * (isAsc ? 1 : -1); + return diff === 0 + ? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1) + : diff; + }); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerVisual(curry(dataColor, 'sunburst')); +registerLayout(curry(sunburstLayout, 'sunburst')); +registerProcessor(curry(dataFilter, 'sunburst')); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function dataToCoordSize(dataSize, dataItem) { + // dataItem is necessary in log axis. + dataItem = dataItem || [0, 0]; + return map(['x', 'y'], function (dim, dimIdx) { + var axis = this.getAxis(dim); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + return axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); + }, this); +} + +var prepareCartesian2d = function (coordSys) { + var rect = coordSys.grid.getRect(); + return { + coordSys: { + // The name exposed to user is always 'cartesian2d' but not 'grid'. + type: 'cartesian2d', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: function (data) { + // do not provide "out" param + return coordSys.dataToPoint(data); + }, + size: bind(dataToCoordSize, coordSys) + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function dataToCoordSize$1(dataSize, dataItem) { + dataItem = dataItem || [0, 0]; + return map([0, 1], function (dimIdx) { + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var p1 = []; + var p2 = []; + p1[dimIdx] = val - halfSize; + p2[dimIdx] = val + halfSize; + p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx]; + return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]); + }, this); +} + +var prepareGeo = function (coordSys) { + var rect = coordSys.getBoundingRect(); + return { + coordSys: { + type: 'geo', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + zoom: coordSys.getZoom() + }, + api: { + coord: function (data) { + // do not provide "out" and noRoam param, + // Compatible with this usage: + // echarts.util.map(item.points, api.coord) + return coordSys.dataToPoint(data); + }, + size: bind(dataToCoordSize$1, coordSys) + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function dataToCoordSize$2(dataSize, dataItem) { + // dataItem is necessary in log axis. + var axis = this.getAxis(); + var val = dataItem instanceof Array ? dataItem[0] : dataItem; + var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2; + return axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); +} + +var prepareSingleAxis = function (coordSys) { + var rect = coordSys.getRect(); + + return { + coordSys: { + type: 'singleAxis', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: function (val) { + // do not provide "out" param + return coordSys.dataToPoint(val); + }, + size: bind(dataToCoordSize$2, coordSys) + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function dataToCoordSize$3(dataSize, dataItem) { + // dataItem is necessary in log axis. + return map(['Radius', 'Angle'], function (dim, dimIdx) { + var axis = this['get' + dim + 'Axis'](); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var method = 'dataTo' + dim; + + var result = axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize)); + + if (dim === 'Angle') { + result = result * Math.PI / 180; + } + + return result; + + }, this); +} + +var preparePolar = function (coordSys) { + var radiusAxis = coordSys.getRadiusAxis(); + var angleAxis = coordSys.getAngleAxis(); + var radius = radiusAxis.getExtent(); + radius[0] > radius[1] && radius.reverse(); + + return { + coordSys: { + type: 'polar', + cx: coordSys.cx, + cy: coordSys.cy, + r: radius[1], + r0: radius[0] + }, + api: { + coord: bind(function (data) { + var radius = radiusAxis.dataToRadius(data[0]); + var angle = angleAxis.dataToAngle(data[1]); + var coord = coordSys.coordToPoint([radius, angle]); + coord.push(radius, angle * Math.PI / 180); + return coord; + }), + size: bind(dataToCoordSize$3, coordSys) + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var prepareCalendar = function (coordSys) { + var rect = coordSys.getRect(); + var rangeInfo = coordSys.getRangeInfo(); + + return { + coordSys: { + type: 'calendar', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + cellWidth: coordSys.getCellWidth(), + cellHeight: coordSys.getCellHeight(), + rangeInfo: { + start: rangeInfo.start, + end: rangeInfo.end, + weeks: rangeInfo.weeks, + dayCount: rangeInfo.allDay + } + }, + api: { + coord: function (data, clamp) { + return coordSys.dataToPoint(data, clamp); + } + } + }; +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var ITEM_STYLE_NORMAL_PATH = ['itemStyle']; +var ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle']; +var LABEL_NORMAL = ['label']; +var LABEL_EMPHASIS = ['emphasis', 'label']; +// Use prefix to avoid index to be the same as el.name, +// which will cause weird udpate animation. +var GROUP_DIFF_PREFIX = 'e\0\0'; + +/** + * To reduce total package size of each coordinate systems, the modules `prepareCustom` + * of each coordinate systems are not required by each coordinate systems directly, but + * required by the module `custom`. + * + * prepareInfoForCustomSeries {Function}: optional + * @return {Object} {coordSys: {...}, api: { + * coord: function (data, clamp) {}, // return point in global. + * size: function (dataSize, dataItem) {} // return size of each axis in coordSys. + * }} + */ +var prepareCustoms = { + cartesian2d: prepareCartesian2d, + geo: prepareGeo, + singleAxis: prepareSingleAxis, + polar: preparePolar, + calendar: prepareCalendar +}; + + +// ------ +// Model +// ------ + +SeriesModel.extend({ + + type: 'series.custom', + + dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'], + + defaultOption: { + coordinateSystem: 'cartesian2d', // Can be set as 'none' + zlevel: 0, + z: 2, + legendHoverLink: true, + + useTransform: true + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // label: {} + // itemStyle: {} + }, + + /** + * @override + */ + getInitialData: function (option, ecModel) { + return createListFromArray(this.getSource(), this); + }, + + /** + * @override + */ + getDataParams: function (dataIndex, dataType, el) { + var params = SeriesModel.prototype.getDataParams.apply(this, arguments); + el && (params.info = el.info); + return params; + } +}); + +// ----- +// View +// ----- + +Chart.extend({ + + type: 'custom', + + /** + * @private + * @type {module:echarts/data/List} + */ + _data: null, + + /** + * @override + */ + render: function (customSeries, ecModel, api, payload) { + var oldData = this._data; + var data = customSeries.getData(); + var group = this.group; + var renderItem = makeRenderItem(customSeries, data, ecModel, api); + + // By default, merge mode is applied. In most cases, custom series is + // used in the scenario that data amount is not large but graphic elements + // is complicated, where merge mode is probably necessary for optimization. + // For example, reuse graphic elements and only update the transform when + // roam or data zoom according to `actionType`. + data.diff(oldData) + .add(function (newIdx) { + createOrUpdate$1( + null, newIdx, renderItem(newIdx, payload), customSeries, group, data + ); + }) + .update(function (newIdx, oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + createOrUpdate$1( + el, newIdx, renderItem(newIdx, payload), customSeries, group, data + ); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }) + .execute(); + + this._data = data; + }, + + incrementalPrepareRender: function (customSeries, ecModel, api) { + this.group.removeAll(); + this._data = null; + }, + + incrementalRender: function (params, customSeries, ecModel, api, payload) { + var data = customSeries.getData(); + var renderItem = makeRenderItem(customSeries, data, ecModel, api); + function setIncrementalAndHoverLayer(el) { + if (!el.isGroup) { + el.incremental = true; + el.useHoverLayer = true; + } + } + for (var idx = params.start; idx < params.end; idx++) { + var el = createOrUpdate$1(null, idx, renderItem(idx, payload), customSeries, this.group, data); + el.traverse(setIncrementalAndHoverLayer); + } + }, + + /** + * @override + */ + dispose: noop, + + /** + * @override + */ + filterForExposedEvent: function (eventType, query, targetEl, packedEvent) { + var elementName = query.element; + if (elementName == null || targetEl.name === elementName) { + return true; + } + + // Enable to give a name on a group made by `renderItem`, and listen + // events that triggerd by its descendents. + while ((targetEl = targetEl.parent) && targetEl !== this.group) { + if (targetEl.name === elementName) { + return true; + } + } + + return false; + } +}); + + +function createEl(elOption) { + var graphicType = elOption.type; + var el; + + if (graphicType === 'path') { + var shape = elOption.shape; + // Using pathRect brings convenience to users sacle svg path. + var pathRect = (shape.width != null && shape.height != null) + ? { + x: shape.x || 0, + y: shape.y || 0, + width: shape.width, + height: shape.height + } + : null; + var pathData = getPathData(shape); + // Path is also used for icon, so layout 'center' by default. + el = makePath(pathData, null, pathRect, shape.layout || 'center'); + el.__customPathData = pathData; + } + else if (graphicType === 'image') { + el = new ZImage({}); + el.__customImagePath = elOption.style.image; + } + else if (graphicType === 'text') { + el = new Text({}); + el.__customText = elOption.style.text; + } + else { + var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)]; + + if (__DEV__) { + assert$1(Clz, 'graphic type "' + graphicType + '" can not be found.'); + } + + el = new Clz(); + } + + el.__customGraphicType = graphicType; + el.name = elOption.name; + + return el; +} + +function updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot) { + var transitionProps = {}; + var elOptionStyle = elOption.style || {}; + + elOption.shape && (transitionProps.shape = clone(elOption.shape)); + elOption.position && (transitionProps.position = elOption.position.slice()); + elOption.scale && (transitionProps.scale = elOption.scale.slice()); + elOption.origin && (transitionProps.origin = elOption.origin.slice()); + elOption.rotation && (transitionProps.rotation = elOption.rotation); + + if (el.type === 'image' && elOption.style) { + var targetStyle = transitionProps.style = {}; + each$1(['x', 'y', 'width', 'height'], function (prop) { + prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit); + }); + } + + if (el.type === 'text' && elOption.style) { + var targetStyle = transitionProps.style = {}; + each$1(['x', 'y'], function (prop) { + prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit); + }); + // Compatible with previous: both support + // textFill and fill, textStroke and stroke in 'text' element. + !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && ( + elOptionStyle.textFill = elOptionStyle.fill + ); + !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && ( + elOptionStyle.textStroke = elOptionStyle.stroke + ); + } + + if (el.type !== 'group') { + el.useStyle(elOptionStyle); + + // Init animation. + if (isInit) { + el.style.opacity = 0; + var targetOpacity = elOptionStyle.opacity; + targetOpacity == null && (targetOpacity = 1); + initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex); + } + } + + if (isInit) { + el.attr(transitionProps); + } + else { + updateProps(el, transitionProps, animatableModel, dataIndex); + } + + // Merge by default. + // z2 must not be null/undefined, otherwise sort error may occur. + elOption.hasOwnProperty('z2') && el.attr('z2', elOption.z2 || 0); + elOption.hasOwnProperty('silent') && el.attr('silent', elOption.silent); + elOption.hasOwnProperty('invisible') && el.attr('invisible', elOption.invisible); + elOption.hasOwnProperty('ignore') && el.attr('ignore', elOption.ignore); + // `elOption.info` enables user to mount some info on + // elements and use them in event handlers. + // Update them only when user specified, otherwise, remain. + elOption.hasOwnProperty('info') && el.attr('info', elOption.info); + + // If `elOption.styleEmphasis` is `false`, remove hover style. The + // logic is ensured by `graphicUtil.setElementHoverStyle`. + var styleEmphasis = elOption.styleEmphasis; + var disableStyleEmphasis = styleEmphasis === false; + if (!( + // Try to escapse setting hover style for performance. + (el.__cusHasEmphStl && styleEmphasis == null) + || (!el.__cusHasEmphStl && disableStyleEmphasis) + )) { + // Should not use graphicUtil.setHoverStyle, since the styleEmphasis + // should not be share by group and its descendants. + setElementHoverStyle(el, styleEmphasis); + el.__cusHasEmphStl = !disableStyleEmphasis; + } + isRoot && setAsHoverStyleTrigger(el, !disableStyleEmphasis); +} + +function prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) { + if (elOptionStyle[prop] != null && !isInit) { + targetStyle[prop] = elOptionStyle[prop]; + elOptionStyle[prop] = oldElStyle[prop]; + } +} + +function makeRenderItem(customSeries, data, ecModel, api) { + var renderItem = customSeries.get('renderItem'); + var coordSys = customSeries.coordinateSystem; + var prepareResult = {}; + + if (coordSys) { + if (__DEV__) { + assert$1(renderItem, 'series.render is required.'); + assert$1( + coordSys.prepareCustoms || prepareCustoms[coordSys.type], + 'This coordSys does not support custom series.' + ); + } + + prepareResult = coordSys.prepareCustoms + ? coordSys.prepareCustoms() + : prepareCustoms[coordSys.type](coordSys); + } + + var userAPI = defaults({ + getWidth: api.getWidth, + getHeight: api.getHeight, + getZr: api.getZr, + getDevicePixelRatio: api.getDevicePixelRatio, + value: value, + style: style, + styleEmphasis: styleEmphasis, + visual: visual, + barLayout: barLayout, + currentSeriesIndices: currentSeriesIndices, + font: font + }, prepareResult.api || {}); + + var userParams = { + // The life cycle of context: current round of rendering. + // The global life cycle is probably not necessary, because + // user can store global status by themselves. + context: {}, + seriesId: customSeries.id, + seriesName: customSeries.name, + seriesIndex: customSeries.seriesIndex, + coordSys: prepareResult.coordSys, + dataInsideLength: data.count(), + encode: wrapEncodeDef(customSeries.getData()) + }; + + // Do not support call `api` asynchronously without dataIndexInside input. + var currDataIndexInside; + var currDirty = true; + var currItemModel; + var currLabelNormalModel; + var currLabelEmphasisModel; + var currVisualColor; + + return function (dataIndexInside, payload) { + currDataIndexInside = dataIndexInside; + currDirty = true; + + return renderItem && renderItem( + defaults({ + dataIndexInside: dataIndexInside, + dataIndex: data.getRawIndex(dataIndexInside), + // Can be used for optimization when zoom or roam. + actionType: payload ? payload.type : null + }, userParams), + userAPI + ); + }; + + // Do not update cache until api called. + function updateCache(dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + if (currDirty) { + currItemModel = data.getItemModel(dataIndexInside); + currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL); + currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS); + currVisualColor = data.getItemVisual(dataIndexInside, 'color'); + + currDirty = false; + } + } + + /** + * @public + * @param {number|string} dim + * @param {number} [dataIndexInside=currDataIndexInside] + * @return {number|string} value + */ + function value(dim, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + return data.get(data.getDimension(dim || 0), dataIndexInside); + } + + /** + * By default, `visual` is applied to style (to support visualMap). + * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`, + * it can be implemented as: + * `api.style({stroke: api.visual('color'), fill: null})`; + * @public + * @param {Object} [extra] + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function style(extra, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + updateCache(dataIndexInside); + + var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle(); + + currVisualColor != null && (itemStyle.fill = currVisualColor); + var opacity = data.getItemVisual(dataIndexInside, 'opacity'); + opacity != null && (itemStyle.opacity = opacity); + + setTextStyle(itemStyle, currLabelNormalModel, null, { + autoColor: currVisualColor, + isRectText: true + }); + + itemStyle.text = currLabelNormalModel.getShallow('show') + ? retrieve2( + customSeries.getFormattedLabel(dataIndexInside, 'normal'), + getDefaultLabel(data, dataIndexInside) + ) + : null; + + extra && extend(itemStyle, extra); + return itemStyle; + } + + /** + * @public + * @param {Object} [extra] + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function styleEmphasis(extra, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + updateCache(dataIndexInside); + + var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle(); + + setTextStyle(itemStyle, currLabelEmphasisModel, null, { + isRectText: true + }, true); + + itemStyle.text = currLabelEmphasisModel.getShallow('show') + ? retrieve3( + customSeries.getFormattedLabel(dataIndexInside, 'emphasis'), + customSeries.getFormattedLabel(dataIndexInside, 'normal'), + getDefaultLabel(data, dataIndexInside) + ) + : null; + + extra && extend(itemStyle, extra); + return itemStyle; + } + + /** + * @public + * @param {string} visualType + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function visual(visualType, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + return data.getItemVisual(dataIndexInside, visualType); + } + + /** + * @public + * @param {number} opt.count Positive interger. + * @param {number} [opt.barWidth] + * @param {number} [opt.barMaxWidth] + * @param {number} [opt.barGap] + * @param {number} [opt.barCategoryGap] + * @return {Object} {width, offset, offsetCenter} is not support, return undefined. + */ + function barLayout(opt) { + if (coordSys.getBaseAxis) { + var baseAxis = coordSys.getBaseAxis(); + return getLayoutOnAxis(defaults({axis: baseAxis}, opt), api); + } + } + + /** + * @public + * @return {Array.} + */ + function currentSeriesIndices() { + return ecModel.getCurrentSeriesIndices(); + } + + /** + * @public + * @param {Object} opt + * @param {string} [opt.fontStyle] + * @param {number} [opt.fontWeight] + * @param {number} [opt.fontSize] + * @param {string} [opt.fontFamily] + * @return {string} font string + */ + function font(opt) { + return getFont(opt, ecModel); + } +} + +function wrapEncodeDef(data) { + var encodeDef = {}; + each$1(data.dimensions, function (dimName, dataDimIndex) { + var dimInfo = data.getDimensionInfo(dimName); + if (!dimInfo.isExtraCoord) { + var coordDim = dimInfo.coordDim; + var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || []; + dataDims[dimInfo.coordDimIndex] = dataDimIndex; + } + }); + return encodeDef; +} + +function createOrUpdate$1(el, dataIndex, elOption, animatableModel, group, data) { + el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, true); + el && data.setItemGraphicEl(dataIndex, el); + + return el; +} + +function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, isRoot) { + + // [Rule] + // By default, follow merge mode. + // (It probably brings benifit for performance in some cases of large data, where + // user program can be optimized to that only updated props needed to be re-calculated, + // or according to `actionType` some calculation can be skipped.) + // If `renderItem` returns `null`/`undefined`/`false`, remove the previous el if existing. + // (It seems that violate the "merge" principle, but most of users probably intuitively + // regard "return;" as "show nothing element whatever", so make a exception to meet the + // most cases.) + + var simplyRemove = !elOption; // `null`/`undefined`/`false` + elOption = elOption || {}; + var elOptionType = elOption.type; + var elOptionShape = elOption.shape; + var elOptionStyle = elOption.style; + + if (el && ( + simplyRemove + // || elOption.$merge === false + // If `elOptionType` is `null`, follow the merge principle. + || (elOptionType != null + && elOptionType !== el.__customGraphicType + ) + || (elOptionType === 'path' + && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== el.__customPathData + ) + || (elOptionType === 'image' + && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== el.__customImagePath + ) + // FIXME test and remove this restriction? + || (elOptionType === 'text' + && hasOwn(elOptionShape, 'text') && elOptionStyle.text !== el.__customText + ) + )) { + group.remove(el); + el = null; + } + + // `elOption.type` is undefined when `renderItem` returns nothing. + if (simplyRemove) { + return; + } + + var isInit = !el; + !el && (el = createEl(elOption)); + updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot); + + if (elOptionType === 'group') { + mergeChildren(el, dataIndex, elOption, animatableModel, data); + } + + // Always add whatever already added to ensure sequence. + group.add(el); + + return el; +} + +// Usage: +// (1) By default, `elOption.$mergeChildren` is `'byIndex'`, which indicates that +// the existing children will not be removed, and enables the feature that +// update some of the props of some of the children simply by construct +// the returned children of `renderItem` like: +// `var children = group.children = []; children[3] = {opacity: 0.5};` +// (2) If `elOption.$mergeChildren` is `'byName'`, add/update/remove children +// by child.name. But that might be lower performance. +// (3) If `elOption.$mergeChildren` is `false`, the existing children will be +// replaced totally. +// (4) If `!elOption.children`, following the "merge" principle, nothing will happen. +// +// For implementation simpleness, do not provide a direct way to remove sinlge +// child (otherwise the total indicies of the children array have to be modified). +// User can remove a single child by set its `ignore` as `true` or replace +// it by another element, where its `$merge` can be set as `true` if necessary. +function mergeChildren(el, dataIndex, elOption, animatableModel, data) { + var newChildren = elOption.children; + var newLen = newChildren ? newChildren.length : 0; + var mergeChildren = elOption.$mergeChildren; + // `diffChildrenByName` has been deprecated. + var byName = mergeChildren === 'byName' || elOption.diffChildrenByName; + var notMerge = mergeChildren === false; + + // For better performance on roam update, only enter if necessary. + if (!newLen && !byName && !notMerge) { + return; + } + + if (byName) { + diffGroupChildren({ + oldChildren: el.children() || [], + newChildren: newChildren || [], + dataIndex: dataIndex, + animatableModel: animatableModel, + group: el, + data: data + }); + return; + } + + notMerge && el.removeAll(); + + // Mapping children of a group simply by index, which + // might be better performance. + var index = 0; + for (; index < newLen; index++) { + newChildren[index] && doCreateOrUpdate( + el.childAt(index), + dataIndex, + newChildren[index], + animatableModel, + el, + data + ); + } + if (__DEV__) { + assert$1( + !notMerge || el.childCount() === index, + 'MUST NOT contain empty item in children array when `group.$mergeChildren` is `false`.' + ); + } +} + +function diffGroupChildren(context) { + (new DataDiffer( + context.oldChildren, + context.newChildren, + getKey, + getKey, + context + )) + .add(processAddUpdate) + .update(processAddUpdate) + .remove(processRemove) + .execute(); +} + +function getKey(item, idx) { + var name = item && item.name; + return name != null ? name : GROUP_DIFF_PREFIX + idx; +} + +function processAddUpdate(newIndex, oldIndex) { + var context = this.context; + var childOption = newIndex != null ? context.newChildren[newIndex] : null; + var child = oldIndex != null ? context.oldChildren[oldIndex] : null; + + doCreateOrUpdate( + child, + context.dataIndex, + childOption, + context.animatableModel, + context.group, + context.data + ); +} + +function processRemove(oldIndex) { + var context = this.context; + var child = context.oldChildren[oldIndex]; + child && context.group.remove(child); +} + +function getPathData(shape) { + // "d" follows the SVG convention. + return shape && (shape.pathData || shape.d); +} + +function hasOwnPathData(shape) { + return shape && (shape.hasOwnProperty('pathData') || shape.hasOwnProperty('d')); +} + +function hasOwn(host, prop) { + return host && host.hasOwnProperty(prop); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// ------------- +// Preprocessor +// ------------- + +registerPreprocessor(function (option) { + var graphicOption = option.graphic; + + // Convert + // {graphic: [{left: 10, type: 'circle'}, ...]} + // or + // {graphic: {left: 10, type: 'circle'}} + // to + // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]} + if (isArray(graphicOption)) { + if (!graphicOption[0] || !graphicOption[0].elements) { + option.graphic = [{elements: graphicOption}]; + } + else { + // Only one graphic instance can be instantiated. (We dont + // want that too many views are created in echarts._viewMap) + option.graphic = [option.graphic[0]]; + } + } + else if (graphicOption && !graphicOption.elements) { + option.graphic = [{elements: [graphicOption]}]; + } +}); + +// ------ +// Model +// ------ + +var GraphicModel = extendComponentModel({ + + type: 'graphic', + + defaultOption: { + + // Extra properties for each elements: + // + // left/right/top/bottom: (like 12, '22%', 'center', default undefined) + // If left/rigth is set, shape.x/shape.cx/position will not be used. + // If top/bottom is set, shape.y/shape.cy/position will not be used. + // This mechanism is useful when you want to position a group/element + // against the right side or the center of this container. + // + // width/height: (can only be pixel value, default 0) + // Only be used to specify contianer(group) size, if needed. And + // can not be percentage value (like '33%'). See the reason in the + // layout algorithm below. + // + // bounding: (enum: 'all' (default) | 'raw') + // Specify how to calculate boundingRect when locating. + // 'all': Get uioned and transformed boundingRect + // from both itself and its descendants. + // This mode simplies confining a group of elements in the bounding + // of their ancester container (e.g., using 'right: 0'). + // 'raw': Only use the boundingRect of itself and before transformed. + // This mode is similar to css behavior, which is useful when you + // want an element to be able to overflow its container. (Consider + // a rotated circle needs to be located in a corner.) + // info: custom info. enables user to mount some info on elements and use them + // in event handlers. Update them only when user specified, otherwise, remain. + + // Note: elements is always behind its ancestors in this elements array. + elements: [], + parentId: null + }, + + /** + * Save el options for the sake of the performance (only update modified graphics). + * The order is the same as those in option. (ancesters -> descendants) + * + * @private + * @type {Array.} + */ + _elOptionsToUpdate: null, + + /** + * @override + */ + mergeOption: function (option) { + // Prevent default merge to elements + var elements = this.option.elements; + this.option.elements = null; + + GraphicModel.superApply(this, 'mergeOption', arguments); + + this.option.elements = elements; + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + var newList = (isInit ? thisOption : newOption).elements; + var existList = thisOption.elements = isInit ? [] : thisOption.elements; + + var flattenedList = []; + this._flatten(newList, flattenedList); + + var mappingResult = mappingToExists(existList, flattenedList); + makeIdAndName(mappingResult); + + // Clear elOptionsToUpdate + var elOptionsToUpdate = this._elOptionsToUpdate = []; + + each$1(mappingResult, function (resultItem, index) { + var newElOption = resultItem.option; + + if (__DEV__) { + assert$1( + isObject$1(newElOption) || resultItem.exist, + 'Empty graphic option definition' + ); + } + + if (!newElOption) { + return; + } + + elOptionsToUpdate.push(newElOption); + + setKeyInfoToNewElOption(resultItem, newElOption); + + mergeNewElOptionToExist(existList, index, newElOption); + + setLayoutInfoToExist(existList[index], newElOption); + + }, this); + + // Clean + for (var i = existList.length - 1; i >= 0; i--) { + if (existList[i] == null) { + existList.splice(i, 1); + } + else { + // $action should be volatile, otherwise option gotten from + // `getOption` will contain unexpected $action. + delete existList[i].$action; + } + } + }, + + /** + * Convert + * [{ + * type: 'group', + * id: 'xx', + * children: [{type: 'circle'}, {type: 'polygon'}] + * }] + * to + * [ + * {type: 'group', id: 'xx'}, + * {type: 'circle', parentId: 'xx'}, + * {type: 'polygon', parentId: 'xx'} + * ] + * + * @private + * @param {Array.} optionList option list + * @param {Array.} result result of flatten + * @param {Object} parentOption parent option + */ + _flatten: function (optionList, result, parentOption) { + each$1(optionList, function (option) { + if (!option) { + return; + } + + if (parentOption) { + option.parentOption = parentOption; + } + + result.push(option); + + var children = option.children; + if (option.type === 'group' && children) { + this._flatten(children, result, option); + } + // Deleting for JSON output, and for not affecting group creation. + delete option.children; + }, this); + }, + + // FIXME + // Pass to view using payload? setOption has a payload? + useElOptionsToUpdate: function () { + var els = this._elOptionsToUpdate; + // Clear to avoid render duplicately when zooming. + this._elOptionsToUpdate = null; + return els; + } +}); + +// ----- +// View +// ----- + +extendComponentView({ + + type: 'graphic', + + /** + * @override + */ + init: function (ecModel, api) { + + /** + * @private + * @type {module:zrender/core/util.HashMap} + */ + this._elMap = createHashMap(); + + /** + * @private + * @type {module:echarts/graphic/GraphicModel} + */ + this._lastGraphicModel; + }, + + /** + * @override + */ + render: function (graphicModel, ecModel, api) { + + // Having leveraged between use cases and algorithm complexity, a very + // simple layout mechanism is used: + // The size(width/height) can be determined by itself or its parent (not + // implemented yet), but can not by its children. (Top-down travel) + // The location(x/y) can be determined by the bounding rect of itself + // (can including its descendants or not) and the size of its parent. + // (Bottom-up travel) + + // When `chart.clear()` or `chart.setOption({...}, true)` with the same id, + // view will be reused. + if (graphicModel !== this._lastGraphicModel) { + this._clear(); + } + this._lastGraphicModel = graphicModel; + + this._updateElements(graphicModel); + this._relocate(graphicModel, api); + }, + + /** + * Update graphic elements. + * + * @private + * @param {Object} graphicModel graphic model + */ + _updateElements: function (graphicModel) { + var elOptionsToUpdate = graphicModel.useElOptionsToUpdate(); + + if (!elOptionsToUpdate) { + return; + } + + var elMap = this._elMap; + var rootGroup = this.group; + + // Top-down tranverse to assign graphic settings to each elements. + each$1(elOptionsToUpdate, function (elOption) { + var $action = elOption.$action; + var id = elOption.id; + var existEl = elMap.get(id); + var parentId = elOption.parentId; + var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup; + + var elOptionStyle = elOption.style; + if (elOption.type === 'text' && elOptionStyle) { + // In top/bottom mode, textVerticalAlign should not be used, which cause + // inaccurately locating. + if (elOption.hv && elOption.hv[1]) { + elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null; + } + + // Compatible with previous setting: both support fill and textFill, + // stroke and textStroke. + !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && ( + elOptionStyle.textFill = elOptionStyle.fill + ); + !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && ( + elOptionStyle.textStroke = elOptionStyle.stroke + ); + } + + // Remove unnecessary props to avoid potential problems. + var elOptionCleaned = getCleanedElOption(elOption); + + // For simple, do not support parent change, otherwise reorder is needed. + if (__DEV__) { + existEl && assert$1( + targetElParent === existEl.parent, + 'Changing parent is not supported.' + ); + } + + if (!$action || $action === 'merge') { + existEl + ? existEl.attr(elOptionCleaned) + : createEl$1(id, targetElParent, elOptionCleaned, elMap); + } + else if ($action === 'replace') { + removeEl(existEl, elMap); + createEl$1(id, targetElParent, elOptionCleaned, elMap); + } + else if ($action === 'remove') { + removeEl(existEl, elMap); + } + + var el = elMap.get(id); + if (el) { + el.__ecGraphicWidth = elOption.width; + el.__ecGraphicHeight = elOption.height; + setEventData(el, graphicModel, elOption); + } + }); + }, + + /** + * Locate graphic elements. + * + * @private + * @param {Object} graphicModel graphic model + * @param {module:echarts/ExtensionAPI} api extension API + */ + _relocate: function (graphicModel, api) { + var elOptions = graphicModel.option.elements; + var rootGroup = this.group; + var elMap = this._elMap; + + // Bottom-up tranvese all elements (consider ec resize) to locate elements. + for (var i = elOptions.length - 1; i >= 0; i--) { + var elOption = elOptions[i]; + var el = elMap.get(elOption.id); + + if (!el) { + continue; + } + + var parentEl = el.parent; + var containerInfo = parentEl === rootGroup + ? { + width: api.getWidth(), + height: api.getHeight() + } + : { // Like 'position:absolut' in css, default 0. + width: parentEl.__ecGraphicWidth || 0, + height: parentEl.__ecGraphicHeight || 0 + }; + + positionElement( + el, elOption, containerInfo, null, + {hv: elOption.hv, boundingMode: elOption.bounding} + ); + } + }, + + /** + * Clear all elements. + * + * @private + */ + _clear: function () { + var elMap = this._elMap; + elMap.each(function (el) { + removeEl(el, elMap); + }); + this._elMap = createHashMap(); + }, + + /** + * @override + */ + dispose: function () { + this._clear(); + } +}); + +function createEl$1(id, targetElParent, elOption, elMap) { + var graphicType = elOption.type; + + if (__DEV__) { + assert$1(graphicType, 'graphic type MUST be set'); + } + + var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)]; + + if (__DEV__) { + assert$1(Clz, 'graphic type can not be found'); + } + + var el = new Clz(elOption); + targetElParent.add(el); + elMap.set(id, el); + el.__ecGraphicId = id; +} + +function removeEl(existEl, elMap) { + var existElParent = existEl && existEl.parent; + if (existElParent) { + existEl.type === 'group' && existEl.traverse(function (el) { + removeEl(el, elMap); + }); + elMap.removeKey(existEl.__ecGraphicId); + existElParent.remove(existEl); + } +} + +// Remove unnecessary props to avoid potential problems. +function getCleanedElOption(elOption) { + elOption = extend({}, elOption); + each$1( + ['id', 'parentId', '$action', 'hv', 'bounding'].concat(LOCATION_PARAMS), + function (name) { + delete elOption[name]; + } + ); + return elOption; +} + +function isSetLoc(obj, props) { + var isSet; + each$1(props, function (prop) { + obj[prop] != null && obj[prop] !== 'auto' && (isSet = true); + }); + return isSet; +} + +function setKeyInfoToNewElOption(resultItem, newElOption) { + var existElOption = resultItem.exist; + + // Set id and type after id assigned. + newElOption.id = resultItem.keyInfo.id; + !newElOption.type && existElOption && (newElOption.type = existElOption.type); + + // Set parent id if not specified + if (newElOption.parentId == null) { + var newElParentOption = newElOption.parentOption; + if (newElParentOption) { + newElOption.parentId = newElParentOption.id; + } + else if (existElOption) { + newElOption.parentId = existElOption.parentId; + } + } + + // Clear + newElOption.parentOption = null; +} + +function mergeNewElOptionToExist(existList, index, newElOption) { + // Update existing options, for `getOption` feature. + var newElOptCopy = extend({}, newElOption); + var existElOption = existList[index]; + + var $action = newElOption.$action || 'merge'; + if ($action === 'merge') { + if (existElOption) { + + if (__DEV__) { + var newType = newElOption.type; + assert$1( + !newType || existElOption.type === newType, + 'Please set $action: "replace" to change `type`' + ); + } + + // We can ensure that newElOptCopy and existElOption are not + // the same object, so `merge` will not change newElOptCopy. + merge(existElOption, newElOptCopy, true); + // Rigid body, use ignoreSize. + mergeLayoutParam(existElOption, newElOptCopy, {ignoreSize: true}); + // Will be used in render. + copyLayoutParams(newElOption, existElOption); + } + else { + existList[index] = newElOptCopy; + } + } + else if ($action === 'replace') { + existList[index] = newElOptCopy; + } + else if ($action === 'remove') { + // null will be cleaned later. + existElOption && (existList[index] = null); + } +} + +function setLayoutInfoToExist(existItem, newElOption) { + if (!existItem) { + return; + } + existItem.hv = newElOption.hv = [ + // Rigid body, dont care `width`. + isSetLoc(newElOption, ['left', 'right']), + // Rigid body, dont care `height`. + isSetLoc(newElOption, ['top', 'bottom']) + ]; + // Give default group size. Otherwise layout error may occur. + if (existItem.type === 'group') { + existItem.width == null && (existItem.width = newElOption.width = 0); + existItem.height == null && (existItem.height = newElOption.height = 0); + } +} + +function setEventData(el, graphicModel, elOption) { + var eventData = el.eventData; + // Simple optimize for large amount of elements that no need event. + if (!el.silent && !el.ignore && !eventData) { + eventData = el.eventData = { + componentType: 'graphic', + componentIndex: graphicModel.componentIndex, + name: el.name + }; + } + + // `elOption.info` enables user to mount some info on + // elements and use them in event handlers. + if (eventData) { + eventData.info = el.info; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var LegendModel = extendComponentModel({ + + type: 'legend.plain', + + dependencies: ['series'], + + layoutMode: { + type: 'box', + // legend.width/height are maxWidth/maxHeight actually, + // whereas realy width/height is calculated by its content. + // (Setting {left: 10, right: 10} does not make sense). + // So consider the case: + // `setOption({legend: {left: 10});` + // then `setOption({legend: {right: 10});` + // The previous `left` should be cleared by setting `ignoreSize`. + ignoreSize: true + }, + + init: function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + + option.selected = option.selected || {}; + }, + + mergeOption: function (option) { + LegendModel.superCall(this, 'mergeOption', option); + }, + + optionUpdated: function () { + this._updateData(this.ecModel); + + var legendData = this._data; + + // If selectedMode is single, try to select one + if (legendData[0] && this.get('selectedMode') === 'single') { + var hasSelected = false; + // If has any selected in option.selected + for (var i = 0; i < legendData.length; i++) { + var name = legendData[i].get('name'); + if (this.isSelected(name)) { + // Force to unselect others + this.select(name); + hasSelected = true; + break; + } + } + // Try select the first if selectedMode is single + !hasSelected && this.select(legendData[0].get('name')); + } + }, + + _updateData: function (ecModel) { + var potentialData = []; + var availableNames = []; + + ecModel.eachRawSeries(function (seriesModel) { + var seriesName = seriesModel.name; + availableNames.push(seriesName); + var isPotential; + + if (seriesModel.legendDataProvider) { + var data = seriesModel.legendDataProvider(); + var names = data.mapArray(data.getName); + + if (!ecModel.isSeriesFiltered(seriesModel)) { + availableNames = availableNames.concat(names); + } + + if (names.length) { + potentialData = potentialData.concat(names); + } + else { + isPotential = true; + } + } + else { + isPotential = true; + } + + if (isPotential && isNameSpecified(seriesModel)) { + potentialData.push(seriesModel.name); + } + }); + + /** + * @type {Array.} + * @private + */ + this._availableNames = availableNames; + + // If legend.data not specified in option, use availableNames as data, + // which is convinient for user preparing option. + var rawData = this.get('data') || potentialData; + + var legendData = map(rawData, function (dataItem) { + // Can be string or number + if (typeof dataItem === 'string' || typeof dataItem === 'number') { + dataItem = { + name: dataItem + }; + } + return new Model(dataItem, this, this.ecModel); + }, this); + + /** + * @type {Array.} + * @private + */ + this._data = legendData; + }, + + /** + * @return {Array.} + */ + getData: function () { + return this._data; + }, + + /** + * @param {string} name + */ + select: function (name) { + var selected = this.option.selected; + var selectedMode = this.get('selectedMode'); + if (selectedMode === 'single') { + var data = this._data; + each$1(data, function (dataItem) { + selected[dataItem.get('name')] = false; + }); + } + selected[name] = true; + }, + + /** + * @param {string} name + */ + unSelect: function (name) { + if (this.get('selectedMode') !== 'single') { + this.option.selected[name] = false; + } + }, + + /** + * @param {string} name + */ + toggleSelected: function (name) { + var selected = this.option.selected; + // Default is true + if (!selected.hasOwnProperty(name)) { + selected[name] = true; + } + this[selected[name] ? 'unSelect' : 'select'](name); + }, + + /** + * @param {string} name + */ + isSelected: function (name) { + var selected = this.option.selected; + return !(selected.hasOwnProperty(name) && !selected[name]) + && indexOf(this._availableNames, name) >= 0; + }, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 4, + show: true, + + // 布局方式,默认为水平布局,可选为: + // 'horizontal' | 'vertical' + orient: 'horizontal', + + left: 'center', + // right: 'center', + + top: 0, + // bottom: null, + + // 水平对齐 + // 'auto' | 'left' | 'right' + // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐 + align: 'auto', + + backgroundColor: 'rgba(0,0,0,0)', + // 图例边框颜色 + borderColor: '#ccc', + borderRadius: 0, + // 图例边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + // 图例内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + // 各个item之间的间隔,单位px,默认为10, + // 横向布局时为水平间隔,纵向布局时为纵向间隔 + itemGap: 10, + // 图例图形宽度 + itemWidth: 25, + // 图例图形高度 + itemHeight: 14, + + // 图例关闭时候的颜色 + inactiveColor: '#ccc', + + textStyle: { + // 图例文字颜色 + color: '#333' + }, + // formatter: '', + // 选择模式,默认开启图例开关 + selectedMode: true, + // 配置默认选中状态,可配合LEGEND.SELECTED事件做动态数据载入 + // selected: null, + // 图例内容(详见legend.data,数组中每一项代表一个item + // data: [], + + // Tooltip 相关配置 + tooltip: { + show: false + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function legendSelectActionHandler(methodName, payload, ecModel) { + var selectedMap = {}; + var isToggleSelect = methodName === 'toggleSelected'; + var isSelected; + // Update all legend components + ecModel.eachComponent('legend', function (legendModel) { + if (isToggleSelect && isSelected != null) { + // Force other legend has same selected status + // Or the first is toggled to true and other are toggled to false + // In the case one legend has some item unSelected in option. And if other legend + // doesn't has the item, they will assume it is selected. + legendModel[isSelected ? 'select' : 'unSelect'](payload.name); + } + else { + legendModel[methodName](payload.name); + isSelected = legendModel.isSelected(payload.name); + } + var legendData = legendModel.getData(); + each$1(legendData, function (model) { + var name = model.get('name'); + // Wrap element + if (name === '\n' || name === '') { + return; + } + var isItemSelected = legendModel.isSelected(name); + if (selectedMap.hasOwnProperty(name)) { + // Unselected if any legend is unselected + selectedMap[name] = selectedMap[name] && isItemSelected; + } + else { + selectedMap[name] = isItemSelected; + } + }); + }); + // Return the event explicitly + return { + name: payload.name, + selected: selectedMap + }; +} +/** + * @event legendToggleSelect + * @type {Object} + * @property {string} type 'legendToggleSelect' + * @property {string} [from] + * @property {string} name Series name or data item name + */ +registerAction( + 'legendToggleSelect', 'legendselectchanged', + curry(legendSelectActionHandler, 'toggleSelected') +); + +/** + * @event legendSelect + * @type {Object} + * @property {string} type 'legendSelect' + * @property {string} name Series name or data item name + */ +registerAction( + 'legendSelect', 'legendselected', + curry(legendSelectActionHandler, 'select') +); + +/** + * @event legendUnSelect + * @type {Object} + * @property {string} type 'legendUnSelect' + * @property {string} name Series name or data item name + */ +registerAction( + 'legendUnSelect', 'legendunselected', + curry(legendSelectActionHandler, 'unSelect') +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Layout list like component. + * It will box layout each items in group of component and then position the whole group in the viewport + * @param {module:zrender/group/Group} group + * @param {module:echarts/model/Component} componentModel + * @param {module:echarts/ExtensionAPI} + */ +function layout$3(group, componentModel, api) { + var boxLayoutParams = componentModel.getBoxLayoutParams(); + var padding = componentModel.get('padding'); + var viewportSize = {width: api.getWidth(), height: api.getHeight()}; + + var rect = getLayoutRect( + boxLayoutParams, + viewportSize, + padding + ); + + box( + componentModel.get('orient'), + group, + componentModel.get('itemGap'), + rect.width, + rect.height + ); + + positionElement( + group, + boxLayoutParams, + viewportSize, + padding + ); +} + +function makeBackground(rect, componentModel) { + var padding = normalizeCssArray$1( + componentModel.get('padding') + ); + var style = componentModel.getItemStyle(['color', 'opacity']); + style.fill = componentModel.get('backgroundColor'); + var rect = new Rect({ + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[1] + padding[3], + height: rect.height + padding[0] + padding[2], + r: componentModel.get('borderRadius') + }, + style: style, + silent: true, + z2: -1 + }); + // FIXME + // `subPixelOptimizeRect` may bring some gap between edge of viewpart + // and background rect when setting like `left: 0`, `top: 0`. + // graphic.subPixelOptimizeRect(rect); + + return rect; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var curry$4 = curry; +var each$16 = each$1; +var Group$3 = Group; + +var LegendView = extendComponentView({ + + type: 'legend.plain', + + newlineDisabled: false, + + /** + * @override + */ + init: function () { + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._contentGroup = new Group$3()); + + /** + * @private + * @type {module:zrender/Element} + */ + this._backgroundEl; + }, + + /** + * @protected + */ + getContentGroup: function () { + return this._contentGroup; + }, + + /** + * @override + */ + render: function (legendModel, ecModel, api) { + + this.resetInner(); + + if (!legendModel.get('show', true)) { + return; + } + + var itemAlign = legendModel.get('align'); + if (!itemAlign || itemAlign === 'auto') { + itemAlign = ( + legendModel.get('left') === 'right' + && legendModel.get('orient') === 'vertical' + ) ? 'right' : 'left'; + } + + this.renderInner(itemAlign, legendModel, ecModel, api); + + // Perform layout. + var positionInfo = legendModel.getBoxLayoutParams(); + var viewportSize = {width: api.getWidth(), height: api.getHeight()}; + var padding = legendModel.get('padding'); + + var maxSize = getLayoutRect(positionInfo, viewportSize, padding); + var mainRect = this.layoutInner(legendModel, itemAlign, maxSize); + + // Place mainGroup, based on the calculated `mainRect`. + var layoutRect = getLayoutRect( + defaults({width: mainRect.width, height: mainRect.height}, positionInfo), + viewportSize, + padding + ); + this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]); + + // Render background after group is layout. + this.group.add( + this._backgroundEl = makeBackground(mainRect, legendModel) + ); + }, + + /** + * @protected + */ + resetInner: function () { + this.getContentGroup().removeAll(); + this._backgroundEl && this.group.remove(this._backgroundEl); + }, + + /** + * @protected + */ + renderInner: function (itemAlign, legendModel, ecModel, api) { + var contentGroup = this.getContentGroup(); + var legendDrawnMap = createHashMap(); + var selectMode = legendModel.get('selectedMode'); + + var excludeSeriesId = []; + ecModel.eachRawSeries(function (seriesModel) { + !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id); + }); + + each$16(legendModel.getData(), function (itemModel, dataIndex) { + var name = itemModel.get('name'); + + // Use empty string or \n as a newline string + if (!this.newlineDisabled && (name === '' || name === '\n')) { + contentGroup.add(new Group$3({ + newline: true + })); + return; + } + + // Representitive series. + var seriesModel = ecModel.getSeriesByName(name)[0]; + + if (legendDrawnMap.get(name)) { + // Have been drawed + return; + } + + // Series legend + if (seriesModel) { + var data = seriesModel.getData(); + var color = data.getVisual('color'); + + // If color is a callback function + if (typeof color === 'function') { + // Use the first data + color = color(seriesModel.getDataParams(0)); + } + + // Using rect symbol defaultly + var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect'; + var symbolType = data.getVisual('symbol'); + + var itemGroup = this._createItem( + name, dataIndex, itemModel, legendModel, + legendSymbolType, symbolType, + itemAlign, color, + selectMode + ); + + itemGroup.on('click', curry$4(dispatchSelectAction, name, api)) + .on('mouseover', curry$4(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId)) + .on('mouseout', curry$4(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId)); + + legendDrawnMap.set(name, true); + } + else { + // Data legend of pie, funnel + ecModel.eachRawSeries(function (seriesModel) { + // In case multiple series has same data name + if (legendDrawnMap.get(name)) { + return; + } + + if (seriesModel.legendDataProvider) { + var data = seriesModel.legendDataProvider(); + var idx = data.indexOfName(name); + if (idx < 0) { + return; + } + + var color = data.getItemVisual(idx, 'color'); + + var legendSymbolType = 'roundRect'; + + var itemGroup = this._createItem( + name, dataIndex, itemModel, legendModel, + legendSymbolType, null, + itemAlign, color, + selectMode + ); + + // FIXME: consider different series has items with the same name. + itemGroup.on('click', curry$4(dispatchSelectAction, name, api)) + // Should not specify the series name, consider legend controls + // more than one pie series. + .on('mouseover', curry$4(dispatchHighlightAction, null, name, api, excludeSeriesId)) + .on('mouseout', curry$4(dispatchDownplayAction, null, name, api, excludeSeriesId)); + + legendDrawnMap.set(name, true); + } + + }, this); + } + + if (__DEV__) { + if (!legendDrawnMap.get(name)) { + console.warn( + name + ' series not exists. Legend data should be same with series name or data name.' + ); + } + } + }, this); + }, + + _createItem: function ( + name, dataIndex, itemModel, legendModel, + legendSymbolType, symbolType, + itemAlign, color, selectMode + ) { + var itemWidth = legendModel.get('itemWidth'); + var itemHeight = legendModel.get('itemHeight'); + var inactiveColor = legendModel.get('inactiveColor'); + var symbolKeepAspect = legendModel.get('symbolKeepAspect'); + + var isSelected = legendModel.isSelected(name); + var itemGroup = new Group$3(); + + var textStyleModel = itemModel.getModel('textStyle'); + + var itemIcon = itemModel.get('icon'); + + var tooltipModel = itemModel.getModel('tooltip'); + var legendGlobalTooltipModel = tooltipModel.parentModel; + + // Use user given icon first + legendSymbolType = itemIcon || legendSymbolType; + itemGroup.add(createSymbol( + legendSymbolType, + 0, + 0, + itemWidth, + itemHeight, + isSelected ? color : inactiveColor, + // symbolKeepAspect default true for legend + symbolKeepAspect == null ? true : symbolKeepAspect + )); + + // Compose symbols + // PENDING + if (!itemIcon && symbolType + // At least show one symbol, can't be all none + && ((symbolType !== legendSymbolType) || symbolType === 'none') + ) { + var size = itemHeight * 0.8; + if (symbolType === 'none') { + symbolType = 'circle'; + } + // Put symbol in the center + itemGroup.add(createSymbol( + symbolType, + (itemWidth - size) / 2, + (itemHeight - size) / 2, + size, + size, + isSelected ? color : inactiveColor, + // symbolKeepAspect default true for legend + symbolKeepAspect == null ? true : symbolKeepAspect + )); + } + + var textX = itemAlign === 'left' ? itemWidth + 5 : -5; + var textAlign = itemAlign; + + var formatter = legendModel.get('formatter'); + var content = name; + if (typeof formatter === 'string' && formatter) { + content = formatter.replace('{name}', name != null ? name : ''); + } + else if (typeof formatter === 'function') { + content = formatter(name); + } + + itemGroup.add(new Text({ + style: setTextStyle({}, textStyleModel, { + text: content, + x: textX, + y: itemHeight / 2, + textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor, + textAlign: textAlign, + textVerticalAlign: 'middle' + }) + })); + + // Add a invisible rect to increase the area of mouse hover + var hitRect = new Rect({ + shape: itemGroup.getBoundingRect(), + invisible: true, + tooltip: tooltipModel.get('show') ? extend({ + content: name, + // Defaul formatter + formatter: legendGlobalTooltipModel.get('formatter', true) || function () { + return name; + }, + formatterParams: { + componentType: 'legend', + legendIndex: legendModel.componentIndex, + name: name, + $vars: ['name'] + } + }, tooltipModel.option) : null + }); + itemGroup.add(hitRect); + + itemGroup.eachChild(function (child) { + child.silent = true; + }); + + hitRect.silent = !selectMode; + + this.getContentGroup().add(itemGroup); + + setHoverStyle(itemGroup); + + itemGroup.__legendDataIndex = dataIndex; + + return itemGroup; + }, + + /** + * @protected + */ + layoutInner: function (legendModel, itemAlign, maxSize) { + var contentGroup = this.getContentGroup(); + + // Place items in contentGroup. + box( + legendModel.get('orient'), + contentGroup, + legendModel.get('itemGap'), + maxSize.width, + maxSize.height + ); + + var contentRect = contentGroup.getBoundingRect(); + contentGroup.attr('position', [-contentRect.x, -contentRect.y]); + + return this.group.getBoundingRect(); + } + +}); + +function dispatchSelectAction(name, api) { + api.dispatchAction({ + type: 'legendToggleSelect', + name: name + }); +} + +function dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) { + // If element hover will move to a hoverLayer. + var el = api.getZr().storage.getDisplayList()[0]; + if (!(el && el.useHoverLayer)) { + api.dispatchAction({ + type: 'highlight', + seriesName: seriesName, + name: dataName, + excludeSeriesId: excludeSeriesId + }); + } +} + +function dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) { + // If element hover will move to a hoverLayer. + var el = api.getZr().storage.getDisplayList()[0]; + if (!(el && el.useHoverLayer)) { + api.dispatchAction({ + type: 'downplay', + seriesName: seriesName, + name: dataName, + excludeSeriesId: excludeSeriesId + }); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var legendFilter = function (ecModel) { + + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (legendModels && legendModels.length) { + ecModel.filterSeries(function (series) { + // If in any legend component the status is not selected. + // Because in legend series is assumed selected when it is not in the legend data. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(series.name)) { + return false; + } + } + return true; + }); + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +// Do not contain scrollable legend, for sake of file size. + +// Series Filter +registerProcessor(legendFilter); + +ComponentModel.registerSubTypeDefaulter('legend', function () { + // Default 'plain' when no type specified. + return 'plain'; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var ScrollableLegendModel = LegendModel.extend({ + + type: 'legend.scroll', + + /** + * @param {number} scrollDataIndex + */ + setScrollDataIndex: function (scrollDataIndex) { + this.option.scrollDataIndex = scrollDataIndex; + }, + + defaultOption: { + scrollDataIndex: 0, + pageButtonItemGap: 5, + pageButtonGap: null, + pageButtonPosition: 'end', // 'start' or 'end' + pageFormatter: '{current}/{total}', // If null/undefined, do not show page. + pageIcons: { + horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'], + vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z'] + }, + pageIconColor: '#2f4554', + pageIconInactiveColor: '#aaa', + pageIconSize: 15, // Can be [10, 3], which represents [width, height] + pageTextStyle: { + color: '#333' + }, + + animationDurationUpdate: 800 + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel, extraOpt) { + var inputPositionParams = getLayoutParams(option); + + ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt); + + mergeAndNormalizeLayoutParams(this, option, inputPositionParams); + }, + + /** + * @override + */ + mergeOption: function (option, extraOpt) { + ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt); + + mergeAndNormalizeLayoutParams(this, this.option, option); + }, + + getOrient: function () { + return this.get('orient') === 'vertical' + ? {index: 1, name: 'vertical'} + : {index: 0, name: 'horizontal'}; + } + +}); + +// Do not `ignoreSize` to enable setting {left: 10, right: 10}. +function mergeAndNormalizeLayoutParams(legendModel, target, raw) { + var orient = legendModel.getOrient(); + var ignoreSize = [1, 1]; + ignoreSize[orient.index] = 0; + mergeLayoutParam(target, raw, { + type: 'box', ignoreSize: ignoreSize + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Separate legend and scrollable legend to reduce package size. + */ + +var Group$4 = Group; + +var WH$1 = ['width', 'height']; +var XY$1 = ['x', 'y']; + +var ScrollableLegendView = LegendView.extend({ + + type: 'legend.scroll', + + newlineDisabled: true, + + init: function () { + + ScrollableLegendView.superCall(this, 'init'); + + /** + * @private + * @type {number} For `scroll`. + */ + this._currentIndex = 0; + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._containerGroup = new Group$4()); + this._containerGroup.add(this.getContentGroup()); + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._controllerGroup = new Group$4()); + + /** + * + * @private + */ + this._showController; + }, + + /** + * @override + */ + resetInner: function () { + ScrollableLegendView.superCall(this, 'resetInner'); + + this._controllerGroup.removeAll(); + this._containerGroup.removeClipPath(); + this._containerGroup.__rectSize = null; + }, + + /** + * @override + */ + renderInner: function (itemAlign, legendModel, ecModel, api) { + var me = this; + + // Render content items. + ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api); + + var controllerGroup = this._controllerGroup; + + var pageIconSize = legendModel.get('pageIconSize', true); + if (!isArray(pageIconSize)) { + pageIconSize = [pageIconSize, pageIconSize]; + } + + createPageButton('pagePrev', 0); + + var pageTextStyleModel = legendModel.getModel('pageTextStyle'); + controllerGroup.add(new Text({ + name: 'pageText', + style: { + textFill: pageTextStyleModel.getTextColor(), + font: pageTextStyleModel.getFont(), + textVerticalAlign: 'middle', + textAlign: 'center' + }, + silent: true + })); + + createPageButton('pageNext', 1); + + function createPageButton(name, iconIdx) { + var pageDataIndexName = name + 'DataIndex'; + var icon = createIcon( + legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], + { + // Buttons will be created in each render, so we do not need + // to worry about avoiding using legendModel kept in scope. + onclick: bind( + me._pageGo, me, pageDataIndexName, legendModel, api + ) + }, + { + x: -pageIconSize[0] / 2, + y: -pageIconSize[1] / 2, + width: pageIconSize[0], + height: pageIconSize[1] + } + ); + icon.name = name; + controllerGroup.add(icon); + } + }, + + /** + * @override + */ + layoutInner: function (legendModel, itemAlign, maxSize) { + var contentGroup = this.getContentGroup(); + var containerGroup = this._containerGroup; + var controllerGroup = this._controllerGroup; + + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var hw = WH$1[1 - orientIdx]; + var yx = XY$1[1 - orientIdx]; + + // Place items in contentGroup. + box( + legendModel.get('orient'), + contentGroup, + legendModel.get('itemGap'), + !orientIdx ? null : maxSize.width, + orientIdx ? null : maxSize.height + ); + + box( + // Buttons in controller are layout always horizontally. + 'horizontal', + controllerGroup, + legendModel.get('pageButtonItemGap', true) + ); + + var contentRect = contentGroup.getBoundingRect(); + var controllerRect = controllerGroup.getBoundingRect(); + var showController = this._showController = contentRect[wh] > maxSize[wh]; + + var contentPos = [-contentRect.x, -contentRect.y]; + // Remain contentPos when scroll animation perfroming. + contentPos[orientIdx] = contentGroup.position[orientIdx]; + + // Layout container group based on 0. + var containerPos = [0, 0]; + var controllerPos = [-controllerRect.x, -controllerRect.y]; + var pageButtonGap = retrieve2( + legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true) + ); + + // Place containerGroup and controllerGroup and contentGroup. + if (showController) { + var pageButtonPosition = legendModel.get('pageButtonPosition', true); + // controller is on the right / bottom. + if (pageButtonPosition === 'end') { + controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh]; + } + // controller is on the left / top. + else { + containerPos[orientIdx] += controllerRect[wh] + pageButtonGap; + } + } + + // Always align controller to content as 'middle'. + controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2; + + contentGroup.attr('position', contentPos); + containerGroup.attr('position', containerPos); + controllerGroup.attr('position', controllerPos); + + // Calculate `mainRect` and set `clipPath`. + // mainRect should not be calculated by `this.group.getBoundingRect()` + // for sake of the overflow. + var mainRect = this.group.getBoundingRect(); + var mainRect = {x: 0, y: 0}; + // Consider content may be overflow (should be clipped). + mainRect[wh] = showController ? maxSize[wh] : contentRect[wh]; + mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); + // `containerRect[yx] + containerPos[1 - orientIdx]` is 0. + mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]); + + containerGroup.__rectSize = maxSize[wh]; + if (showController) { + var clipShape = {x: 0, y: 0}; + clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0); + clipShape[hw] = mainRect[hw]; + containerGroup.setClipPath(new Rect({shape: clipShape})); + // Consider content may be larger than container, container rect + // can not be obtained from `containerGroup.getBoundingRect()`. + containerGroup.__rectSize = clipShape[wh]; + } + else { + // Do not remove or ignore controller. Keep them set as place holders. + controllerGroup.eachChild(function (child) { + child.attr({invisible: true, silent: true}); + }); + } + + // Content translate animation. + var pageInfo = this._getPageInfo(legendModel); + pageInfo.pageIndex != null && updateProps( + contentGroup, + {position: pageInfo.contentPosition}, + // When switch from "show controller" to "not show controller", view should be + // updated immediately without animation, otherwise causes weird efffect. + showController ? legendModel : false + ); + + this._updatePageInfoView(legendModel, pageInfo); + + return mainRect; + }, + + _pageGo: function (to, legendModel, api) { + var scrollDataIndex = this._getPageInfo(legendModel)[to]; + + scrollDataIndex != null && api.dispatchAction({ + type: 'legendScroll', + scrollDataIndex: scrollDataIndex, + legendId: legendModel.id + }); + }, + + _updatePageInfoView: function (legendModel, pageInfo) { + var controllerGroup = this._controllerGroup; + + each$1(['pagePrev', 'pageNext'], function (name) { + var canJump = pageInfo[name + 'DataIndex'] != null; + var icon = controllerGroup.childOfName(name); + if (icon) { + icon.setStyle( + 'fill', + canJump + ? legendModel.get('pageIconColor', true) + : legendModel.get('pageIconInactiveColor', true) + ); + icon.cursor = canJump ? 'pointer' : 'default'; + } + }); + + var pageText = controllerGroup.childOfName('pageText'); + var pageFormatter = legendModel.get('pageFormatter'); + var pageIndex = pageInfo.pageIndex; + var current = pageIndex != null ? pageIndex + 1 : 0; + var total = pageInfo.pageCount; + + pageText && pageFormatter && pageText.setStyle( + 'text', + isString(pageFormatter) + ? pageFormatter.replace('{current}', current).replace('{total}', total) + : pageFormatter({current: current, total: total}) + ); + }, + + /** + * @param {module:echarts/model/Model} legendModel + * @return {Object} { + * contentPosition: Array., null when data item not found. + * pageIndex: number, null when data item not found. + * pageCount: number, always be a number, can be 0. + * pagePrevDataIndex: number, null when no next page. + * pageNextDataIndex: number, null when no previous page. + * } + */ + _getPageInfo: function (legendModel) { + // Align left or top by the current dataIndex. + var currDataIndex = legendModel.get('scrollDataIndex', true); + var contentGroup = this.getContentGroup(); + var contentRect = contentGroup.getBoundingRect(); + var containerRectSize = this._containerGroup.__rectSize; + + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var hw = WH$1[1 - orientIdx]; + var xy = XY$1[orientIdx]; + var contentPos = contentGroup.position.slice(); + + var pageIndex; + var pagePrevDataIndex; + var pageNextDataIndex; + + var targetItemGroup; + if (this._showController) { + contentGroup.eachChild(function (child) { + if (child.__legendDataIndex === currDataIndex) { + targetItemGroup = child; + } + }); + } + else { + targetItemGroup = contentGroup.childAt(0); + } + + var pageCount = containerRectSize ? Math.ceil(contentRect[wh] / containerRectSize) : 0; + + if (targetItemGroup) { + var itemRect = targetItemGroup.getBoundingRect(); + var itemLoc = targetItemGroup.position[orientIdx] + itemRect[xy]; + contentPos[orientIdx] = -itemLoc - contentRect[xy]; + pageIndex = Math.floor( + pageCount * (itemLoc + itemRect[xy] + containerRectSize / 2) / contentRect[wh] + ); + pageIndex = (contentRect[wh] && pageCount) + ? Math.max(0, Math.min(pageCount - 1, pageIndex)) + : -1; + + var winRect = {x: 0, y: 0}; + winRect[wh] = containerRectSize; + winRect[hw] = contentRect[hw]; + winRect[xy] = -contentPos[orientIdx] - contentRect[xy]; + + var startIdx; + var children = contentGroup.children(); + + contentGroup.eachChild(function (child, index) { + var itemRect = getItemRect(child); + + if (itemRect.intersect(winRect)) { + startIdx == null && (startIdx = index); + // It is user-friendly that the last item shown in the + // current window is shown at the begining of next window. + pageNextDataIndex = child.__legendDataIndex; + } + + // If the last item is shown entirely, no next page. + if (index === children.length - 1 + && itemRect[xy] + itemRect[wh] <= winRect[xy] + winRect[wh] + ) { + pageNextDataIndex = null; + } + }); + + // Always align based on the left/top most item, so the left/top most + // item in the previous window is needed to be found here. + if (startIdx != null) { + var startItem = children[startIdx]; + var startRect = getItemRect(startItem); + winRect[xy] = startRect[xy] + startRect[wh] - winRect[wh]; + + // If the first item is shown entirely, no previous page. + if (startIdx <= 0 && startRect[xy] >= winRect[xy]) { + pagePrevDataIndex = null; + } + else { + while (startIdx > 0 && getItemRect(children[startIdx - 1]).intersect(winRect)) { + startIdx--; + } + pagePrevDataIndex = children[startIdx].__legendDataIndex; + } + } + } + + return { + contentPosition: contentPos, + pageIndex: pageIndex, + pageCount: pageCount, + pagePrevDataIndex: pagePrevDataIndex, + pageNextDataIndex: pageNextDataIndex + }; + + function getItemRect(el) { + var itemRect = el.getBoundingRect().clone(); + itemRect[xy] += el.position[orientIdx]; + return itemRect; + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @event legendScroll + * @type {Object} + * @property {string} type 'legendScroll' + * @property {string} scrollDataIndex + */ +registerAction( + 'legendScroll', 'legendscroll', + function (payload, ecModel) { + var scrollDataIndex = payload.scrollDataIndex; + + scrollDataIndex != null && ecModel.eachComponent( + {mainType: 'legend', subType: 'scroll', query: payload}, + function (legendModel) { + legendModel.setScrollDataIndex(scrollDataIndex); + } + ); + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Legend component entry file8 + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentModel({ + + type: 'tooltip', + + dependencies: ['axisPointer'], + + defaultOption: { + zlevel: 0, + + z: 60, + + show: true, + + // tooltip主体内容 + showContent: true, + + // 'trigger' only works on coordinate system. + // 'item' | 'axis' | 'none' + trigger: 'item', + + // 'click' | 'mousemove' | 'none' + triggerOn: 'mousemove|click', + + alwaysShowContent: false, + + displayMode: 'single', // 'single' | 'multipleByCoordSys' + + renderMode: 'auto', // 'auto' | 'html' | 'richText' + // 'auto': use html by default, and use non-html if `document` is not defined + // 'html': use html for tooltip + // 'richText': use canvas, svg, and etc. for tooltip + + // 位置 {Array} | {Function} + // position: null + // Consider triggered from axisPointer handle, verticalAlign should be 'middle' + // align: null, + // verticalAlign: null, + + // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。 + confine: false, + + // 内容格式器:{string}(Template) ¦ {Function} + // formatter: null + + showDelay: 0, + + // 隐藏延迟,单位ms + hideDelay: 100, + + // 动画变换时间,单位s + transitionDuration: 0.4, + + enterable: false, + + // 提示背景颜色,默认为透明度为0.7的黑色 + backgroundColor: 'rgba(50,50,50,0.7)', + + // 提示边框颜色 + borderColor: '#333', + + // 提示边框圆角,单位px,默认为4 + borderRadius: 4, + + // 提示边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + + // 提示内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + + // Extra css text + extraCssText: '', + + // 坐标轴指示器,坐标轴触发有效 + axisPointer: { + // 默认为直线 + // 可选为:'line' | 'shadow' | 'cross' + type: 'line', + + // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选 + // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto' + // 默认 'auto',会选择类型为 category 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴 + // 极坐标系会默认选择 angle 轴 + axis: 'auto', + + animation: 'auto', + animationDurationUpdate: 200, + animationEasingUpdate: 'exponentialOut', + + crossStyle: { + color: '#999', + width: 1, + type: 'dashed', + + // TODO formatter + textStyle: {} + } + + // lineStyle and shadowStyle should not be specified here, + // otherwise it will always override those styles on option.axisPointer. + }, + textStyle: { + color: '#fff', + fontSize: 14 + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$18 = each$1; +var toCamelCase$1 = toCamelCase; + +var vendors = ['', '-webkit-', '-moz-', '-o-']; + +var gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;'; + +/** + * @param {number} duration + * @return {string} + * @inner + */ +function assembleTransition(duration) { + var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)'; + var transitionText = 'left ' + duration + 's ' + transitionCurve + ',' + + 'top ' + duration + 's ' + transitionCurve; + return map(vendors, function (vendorPrefix) { + return vendorPrefix + 'transition:' + transitionText; + }).join(';'); +} + +/** + * @param {Object} textStyle + * @return {string} + * @inner + */ +function assembleFont(textStyleModel) { + var cssText = []; + + var fontSize = textStyleModel.get('fontSize'); + var color = textStyleModel.getTextColor(); + + color && cssText.push('color:' + color); + + cssText.push('font:' + textStyleModel.getFont()); + + fontSize + && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px'); + + each$18(['decoration', 'align'], function (name) { + var val = textStyleModel.get(name); + val && cssText.push('text-' + name + ':' + val); + }); + + return cssText.join(';'); +} + +/** + * @param {Object} tooltipModel + * @return {string} + * @inner + */ +function assembleCssText(tooltipModel) { + + var cssText = []; + + var transitionDuration = tooltipModel.get('transitionDuration'); + var backgroundColor = tooltipModel.get('backgroundColor'); + var textStyleModel = tooltipModel.getModel('textStyle'); + var padding = tooltipModel.get('padding'); + + // Animation transition. Do not animate when transitionDuration is 0. + transitionDuration + && cssText.push(assembleTransition(transitionDuration)); + + if (backgroundColor) { + if (env$1.canvasSupported) { + cssText.push('background-Color:' + backgroundColor); + } + else { + // for ie + cssText.push( + 'background-Color:#' + toHex(backgroundColor) + ); + cssText.push('filter:alpha(opacity=70)'); + } + } + + // Border style + each$18(['width', 'color', 'radius'], function (name) { + var borderName = 'border-' + name; + var camelCase = toCamelCase$1(borderName); + var val = tooltipModel.get(camelCase); + val != null + && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px')); + }); + + // Text style + cssText.push(assembleFont(textStyleModel)); + + // Padding + if (padding != null) { + cssText.push('padding:' + normalizeCssArray$1(padding).join('px ') + 'px'); + } + + return cssText.join(';') + ';'; +} + +/** + * @alias module:echarts/component/tooltip/TooltipContent + * @constructor + */ +function TooltipContent(container, api) { + if (env$1.wxa) { + return null; + } + + var el = document.createElement('div'); + var zr = this._zr = api.getZr(); + + this.el = el; + + this._x = api.getWidth() / 2; + this._y = api.getHeight() / 2; + + container.appendChild(el); + + this._container = container; + + this._show = false; + + /** + * @private + */ + this._hideTimeout; + + var self = this; + el.onmouseenter = function () { + // clear the timeout in hideLater and keep showing tooltip + if (self._enterable) { + clearTimeout(self._hideTimeout); + self._show = true; + } + self._inContent = true; + }; + el.onmousemove = function (e) { + e = e || window.event; + if (!self._enterable) { + // Try trigger zrender event to avoid mouse + // in and out shape too frequently + var handler = zr.handler; + normalizeEvent(container, e, true); + handler.dispatch('mousemove', e); + } + }; + el.onmouseleave = function () { + if (self._enterable) { + if (self._show) { + self.hideLater(self._hideDelay); + } + } + self._inContent = false; + }; +} + +TooltipContent.prototype = { + + constructor: TooltipContent, + + /** + * @private + * @type {boolean} + */ + _enterable: true, + + /** + * Update when tooltip is rendered + */ + update: function () { + // FIXME + // Move this logic to ec main? + var container = this._container; + var stl = container.currentStyle + || document.defaultView.getComputedStyle(container); + var domStyle = container.style; + if (domStyle.position !== 'absolute' && stl.position !== 'absolute') { + domStyle.position = 'relative'; + } + // Hide the tooltip + // PENDING + // this.hide(); + }, + + show: function (tooltipModel) { + clearTimeout(this._hideTimeout); + var el = this.el; + + el.style.cssText = gCssText + assembleCssText(tooltipModel) + // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore + + ';left:' + this._x + 'px;top:' + this._y + 'px;' + + (tooltipModel.get('extraCssText') || ''); + + el.style.display = el.innerHTML ? 'block' : 'none'; + + // If mouse occsionally move over the tooltip, a mouseout event will be + // triggered by canvas, and cuase some unexpectable result like dragging + // stop, "unfocusAdjacency". Here `pointer-events: none` is used to solve + // it. Although it is not suppored by IE8~IE10, fortunately it is a rare + // scenario. + el.style.pointerEvents = this._enterable ? 'auto' : 'none'; + + this._show = true; + }, + + setContent: function (content) { + this.el.innerHTML = content == null ? '' : content; + }, + + setEnterable: function (enterable) { + this._enterable = enterable; + }, + + getSize: function () { + var el = this.el; + return [el.clientWidth, el.clientHeight]; + }, + + moveTo: function (x, y) { + // xy should be based on canvas root. But tooltipContent is + // the sibling of canvas root. So padding of ec container + // should be considered here. + var zr = this._zr; + var viewportRootOffset; + if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) { + x += viewportRootOffset.offsetLeft; + y += viewportRootOffset.offsetTop; + } + + var style = this.el.style; + style.left = x + 'px'; + style.top = y + 'px'; + + this._x = x; + this._y = y; + }, + + hide: function () { + this.el.style.display = 'none'; + this._show = false; + }, + + hideLater: function (time) { + if (this._show && !(this._inContent && this._enterable)) { + if (time) { + this._hideDelay = time; + // Set show false to avoid invoke hideLater mutiple times + this._show = false; + this._hideTimeout = setTimeout(bind(this.hide, this), time); + } + else { + this.hide(); + } + } + }, + + isShow: function () { + return this._show; + }, + + getOuterSize: function () { + var width = this.el.clientWidth; + var height = this.el.clientHeight; + + // Consider browser compatibility. + // IE8 does not support getComputedStyle. + if (document.defaultView && document.defaultView.getComputedStyle) { + var stl = document.defaultView.getComputedStyle(this.el); + if (stl) { + width += parseInt(stl.paddingLeft, 10) + parseInt(stl.paddingRight, 10) + + parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10); + height += parseInt(stl.paddingTop, 10) + parseInt(stl.paddingBottom, 10) + + parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10); + } + } + + return {width: width, height: height}; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// import Group from 'zrender/src/container/Group'; +/** + * @alias module:echarts/component/tooltip/TooltipRichContent + * @constructor + */ +function TooltipRichContent(api) { + + this._zr = api.getZr(); + + this._show = false; + + /** + * @private + */ + this._hideTimeout; +} + +TooltipRichContent.prototype = { + + constructor: TooltipRichContent, + + /** + * @private + * @type {boolean} + */ + _enterable: true, + + /** + * Update when tooltip is rendered + */ + update: function () { + // noop + }, + + show: function (tooltipModel) { + if (this._hideTimeout) { + clearTimeout(this._hideTimeout); + } + + this.el.attr('show', true); + this._show = true; + }, + + /** + * Set tooltip content + * + * @param {string} content rich text string of content + * @param {Object} markerRich rich text style + * @param {Object} tooltipModel tooltip model + */ + setContent: function (content, markerRich, tooltipModel) { + if (this.el) { + this._zr.remove(this.el); + } + + var markers = {}; + var text = content; + var prefix = '{marker'; + var suffix = '|}'; + var startId = text.indexOf(prefix); + while (startId >= 0) { + var endId = text.indexOf(suffix); + var name = text.substr(startId + prefix.length, endId - startId - prefix.length); + if (name.indexOf('sub') > -1) { + markers['marker' + name] = { + textWidth: 4, + textHeight: 4, + textBorderRadius: 2, + textBackgroundColor: markerRich[name], + // TODO: textOffset is not implemented for rich text + textOffset: [3, 0] + }; + } + else { + markers['marker' + name] = { + textWidth: 10, + textHeight: 10, + textBorderRadius: 5, + textBackgroundColor: markerRich[name] + }; + } + + text = text.substr(endId + 1); + startId = text.indexOf('{marker'); + } + + this.el = new Text({ + style: { + rich: markers, + text: content, + textLineHeight: 20, + textBackgroundColor: tooltipModel.get('backgroundColor'), + textBorderRadius: tooltipModel.get('borderRadius'), + textFill: tooltipModel.get('textStyle.color'), + textPadding: tooltipModel.get('padding') + }, + z: tooltipModel.get('z') + }); + this._zr.add(this.el); + + var self = this; + this.el.on('mouseover', function () { + // clear the timeout in hideLater and keep showing tooltip + if (self._enterable) { + clearTimeout(self._hideTimeout); + self._show = true; + } + self._inContent = true; + }); + this.el.on('mouseout', function () { + if (self._enterable) { + if (self._show) { + self.hideLater(self._hideDelay); + } + } + self._inContent = false; + }); + }, + + setEnterable: function (enterable) { + this._enterable = enterable; + }, + + getSize: function () { + var bounding = this.el.getBoundingRect(); + return [bounding.width, bounding.height]; + }, + + moveTo: function (x, y) { + if (this.el) { + this.el.attr('position', [x, y]); + } + }, + + hide: function () { + this.el.hide(); + this._show = false; + }, + + hideLater: function (time) { + if (this._show && !(this._inContent && this._enterable)) { + if (time) { + this._hideDelay = time; + // Set show false to avoid invoke hideLater mutiple times + this._show = false; + this._hideTimeout = setTimeout(bind(this.hide, this), time); + } + else { + this.hide(); + } + } + }, + + isShow: function () { + return this._show; + }, + + getOuterSize: function () { + return this.getSize(); + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var bind$3 = bind; +var each$17 = each$1; +var parsePercent$2 = parsePercent$1; + +var proxyRect = new Rect({ + shape: {x: -1, y: -1, width: 2, height: 2} +}); + +extendComponentView({ + + type: 'tooltip', + + init: function (ecModel, api) { + if (env$1.node) { + return; + } + + var tooltipModel = ecModel.getComponent('tooltip'); + var renderMode = tooltipModel.get('renderMode'); + this._renderMode = getTooltipRenderMode(renderMode); + + var tooltipContent; + if (this._renderMode === 'html') { + tooltipContent = new TooltipContent(api.getDom(), api); + this._newLine = '
    '; + } + else { + tooltipContent = new TooltipRichContent(api); + this._newLine = '\n'; + } + + this._tooltipContent = tooltipContent; + }, + + render: function (tooltipModel, ecModel, api) { + if (env$1.node) { + return; + } + + // Reset + this.group.removeAll(); + + /** + * @private + * @type {module:echarts/component/tooltip/TooltipModel} + */ + this._tooltipModel = tooltipModel; + + /** + * @private + * @type {module:echarts/model/Global} + */ + this._ecModel = ecModel; + + /** + * @private + * @type {module:echarts/ExtensionAPI} + */ + this._api = api; + + /** + * Should be cleaned when render. + * @private + * @type {Array.>} + */ + this._lastDataByCoordSys = null; + + /** + * @private + * @type {boolean} + */ + this._alwaysShowContent = tooltipModel.get('alwaysShowContent'); + + var tooltipContent = this._tooltipContent; + tooltipContent.update(); + tooltipContent.setEnterable(tooltipModel.get('enterable')); + + this._initGlobalListener(); + + this._keepShow(); + }, + + _initGlobalListener: function () { + var tooltipModel = this._tooltipModel; + var triggerOn = tooltipModel.get('triggerOn'); + + register( + 'itemTooltip', + this._api, + bind$3(function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none') { + if (triggerOn.indexOf(currTrigger) >= 0) { + this._tryShow(e, dispatchAction); + } + else if (currTrigger === 'leave') { + this._hide(dispatchAction); + } + } + }, this) + ); + }, + + _keepShow: function () { + var tooltipModel = this._tooltipModel; + var ecModel = this._ecModel; + var api = this._api; + + // Try to keep the tooltip show when refreshing + if (this._lastX != null + && this._lastY != null + // When user is willing to control tooltip totally using API, + // self.manuallyShowTip({x, y}) might cause tooltip hide, + // which is not expected. + && tooltipModel.get('triggerOn') !== 'none' + ) { + var self = this; + clearTimeout(this._refreshUpdateTimeout); + this._refreshUpdateTimeout = setTimeout(function () { + // Show tip next tick after other charts are rendered + // In case highlight action has wrong result + // FIXME + self.manuallyShowTip(tooltipModel, ecModel, api, { + x: self._lastX, + y: self._lastY + }); + }); + } + }, + + /** + * Show tip manually by + * dispatchAction({ + * type: 'showTip', + * x: 10, + * y: 10 + * }); + * Or + * dispatchAction({ + * type: 'showTip', + * seriesIndex: 0, + * dataIndex or dataIndexInside or name + * }); + * + * TODO Batch + */ + manuallyShowTip: function (tooltipModel, ecModel, api, payload) { + if (payload.from === this.uid || env$1.node) { + return; + } + + var dispatchAction = makeDispatchAction$1(payload, api); + + // Reset ticket + this._ticket = ''; + + // When triggered from axisPointer. + var dataByCoordSys = payload.dataByCoordSys; + + if (payload.tooltip && payload.x != null && payload.y != null) { + var el = proxyRect; + el.position = [payload.x, payload.y]; + el.update(); + el.tooltip = payload.tooltip; + // Manually show tooltip while view is not using zrender elements. + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + target: el + }, dispatchAction); + } + else if (dataByCoordSys) { + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + event: {}, + dataByCoordSys: payload.dataByCoordSys, + tooltipOption: payload.tooltipOption + }, dispatchAction); + } + else if (payload.seriesIndex != null) { + + if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) { + return; + } + + var pointInfo = findPointFromSeries(payload, ecModel); + var cx = pointInfo.point[0]; + var cy = pointInfo.point[1]; + if (cx != null && cy != null) { + this._tryShow({ + offsetX: cx, + offsetY: cy, + position: payload.position, + target: pointInfo.el, + event: {} + }, dispatchAction); + } + } + else if (payload.x != null && payload.y != null) { + // FIXME + // should wrap dispatchAction like `axisPointer/globalListener` ? + api.dispatchAction({ + type: 'updateAxisPointer', + x: payload.x, + y: payload.y + }); + + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + target: api.getZr().findHover(payload.x, payload.y).target, + event: {} + }, dispatchAction); + } + }, + + manuallyHideTip: function (tooltipModel, ecModel, api, payload) { + var tooltipContent = this._tooltipContent; + + if (!this._alwaysShowContent && this._tooltipModel) { + tooltipContent.hideLater(this._tooltipModel.get('hideDelay')); + } + + this._lastX = this._lastY = null; + + if (payload.from !== this.uid) { + this._hide(makeDispatchAction$1(payload, api)); + } + }, + + // Be compatible with previous design, that is, when tooltip.type is 'axis' and + // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer + // and tooltip. + _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) { + var seriesIndex = payload.seriesIndex; + var dataIndex = payload.dataIndex; + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; + + if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) { + return; + } + + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + if (!seriesModel) { + return; + } + + var data = seriesModel.getData(); + var tooltipModel = buildTooltipModel([ + data.getItemModel(dataIndex), + seriesModel, + (seriesModel.coordinateSystem || {}).model, + tooltipModel + ]); + + if (tooltipModel.get('trigger') !== 'axis') { + return; + } + + api.dispatchAction({ + type: 'updateAxisPointer', + seriesIndex: seriesIndex, + dataIndex: dataIndex, + position: payload.position + }); + + return true; + }, + + _tryShow: function (e, dispatchAction) { + var el = e.target; + var tooltipModel = this._tooltipModel; + + if (!tooltipModel) { + return; + } + + // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed + this._lastX = e.offsetX; + this._lastY = e.offsetY; + + var dataByCoordSys = e.dataByCoordSys; + if (dataByCoordSys && dataByCoordSys.length) { + this._showAxisTooltip(dataByCoordSys, e); + } + // Always show item tooltip if mouse is on the element with dataIndex + else if (el && el.dataIndex != null) { + this._lastDataByCoordSys = null; + this._showSeriesItemTooltip(e, el, dispatchAction); + } + // Tooltip provided directly. Like legend. + else if (el && el.tooltip) { + this._lastDataByCoordSys = null; + this._showComponentItemTooltip(e, el, dispatchAction); + } + else { + this._lastDataByCoordSys = null; + this._hide(dispatchAction); + } + }, + + _showOrMove: function (tooltipModel, cb) { + // showDelay is used in this case: tooltip.enterable is set + // as true. User intent to move mouse into tooltip and click + // something. `showDelay` makes it easyer to enter the content + // but tooltip do not move immediately. + var delay = tooltipModel.get('showDelay'); + cb = bind(cb, this); + clearTimeout(this._showTimout); + delay > 0 + ? (this._showTimout = setTimeout(cb, delay)) + : cb(); + }, + + _showAxisTooltip: function (dataByCoordSys, e) { + var ecModel = this._ecModel; + var globalTooltipModel = this._tooltipModel; + var point = [e.offsetX, e.offsetY]; + var singleDefaultHTML = []; + var singleParamsList = []; + var singleTooltipModel = buildTooltipModel([ + e.tooltipOption, + globalTooltipModel + ]); + + var renderMode = this._renderMode; + var newLine = this._newLine; + + var markers = {}; + + each$17(dataByCoordSys, function (itemCoordSys) { + // var coordParamList = []; + // var coordDefaultHTML = []; + // var coordTooltipModel = buildTooltipModel([ + // e.tooltipOption, + // itemCoordSys.tooltipOption, + // ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex), + // globalTooltipModel + // ]); + // var displayMode = coordTooltipModel.get('displayMode'); + // var paramsList = displayMode === 'single' ? singleParamsList : []; + + each$17(itemCoordSys.dataByAxis, function (item) { + var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex); + var axisValue = item.value; + var seriesDefaultHTML = []; + + if (!axisModel || axisValue == null) { + return; + } + + var valueLabel = getValueLabel( + axisValue, axisModel.axis, ecModel, + item.seriesDataIndices, + item.valueLabelOpt + ); + + each$1(item.seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var dataParams = series && series.getDataParams(dataIndex); + dataParams.axisDim = item.axisDim; + dataParams.axisIndex = item.axisIndex; + dataParams.axisType = item.axisType; + dataParams.axisId = item.axisId; + dataParams.axisValue = getAxisRawValue(axisModel.axis, axisValue); + dataParams.axisValueLabel = valueLabel; + + if (dataParams) { + singleParamsList.push(dataParams); + var seriesTooltip = series.formatTooltip(dataIndex, true, null, renderMode); + + var html; + if (isObject$1(seriesTooltip)) { + html = seriesTooltip.html; + var newMarkers = seriesTooltip.markers; + merge(markers, newMarkers); + } + else { + html = seriesTooltip; + } + seriesDefaultHTML.push(html); + } + }); + + // Default tooltip content + // FIXME + // (1) shold be the first data which has name? + // (2) themeRiver, firstDataIndex is array, and first line is unnecessary. + var firstLine = valueLabel; + if (renderMode !== 'html') { + singleDefaultHTML.push(seriesDefaultHTML.join(newLine)); + } + else { + singleDefaultHTML.push( + (firstLine ? encodeHTML(firstLine) + newLine : '') + + seriesDefaultHTML.join(newLine) + ); + } + }); + }, this); + + // In most case, the second axis is shown upper than the first one. + singleDefaultHTML.reverse(); + singleDefaultHTML = singleDefaultHTML.join(this._newLine + this._newLine); + + var positionExpr = e.position; + this._showOrMove(singleTooltipModel, function () { + if (this._updateContentNotChangedOnAxis(dataByCoordSys)) { + this._updatePosition( + singleTooltipModel, + positionExpr, + point[0], point[1], + this._tooltipContent, + singleParamsList + ); + } + else { + this._showTooltipContent( + singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(), + point[0], point[1], positionExpr, undefined, markers + ); + } + }); + + // Do not trigger events here, because this branch only be entered + // from dispatchAction. + }, + + _showSeriesItemTooltip: function (e, el, dispatchAction) { + var ecModel = this._ecModel; + // Use dataModel in element if possible + // Used when mouseover on a element like markPoint or edge + // In which case, the data is not main data in series. + var seriesIndex = el.seriesIndex; + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + + // For example, graph link. + var dataModel = el.dataModel || seriesModel; + var dataIndex = el.dataIndex; + var dataType = el.dataType; + var data = dataModel.getData(); + + var tooltipModel = buildTooltipModel([ + data.getItemModel(dataIndex), + dataModel, + seriesModel && (seriesModel.coordinateSystem || {}).model, + this._tooltipModel + ]); + + var tooltipTrigger = tooltipModel.get('trigger'); + if (tooltipTrigger != null && tooltipTrigger !== 'item') { + return; + } + + var params = dataModel.getDataParams(dataIndex, dataType); + var seriesTooltip = dataModel.formatTooltip(dataIndex, false, dataType, this._renderMode); + var defaultHtml; + var markers; + if (isObject$1(seriesTooltip)) { + defaultHtml = seriesTooltip.html; + markers = seriesTooltip.markers; + } + else { + defaultHtml = seriesTooltip; + markers = null; + } + + var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex; + + this._showOrMove(tooltipModel, function () { + this._showTooltipContent( + tooltipModel, defaultHtml, params, asyncTicket, + e.offsetX, e.offsetY, e.position, e.target, markers + ); + }); + + // FIXME + // duplicated showtip if manuallyShowTip is called from dispatchAction. + dispatchAction({ + type: 'showTip', + dataIndexInside: dataIndex, + dataIndex: data.getRawIndex(dataIndex), + seriesIndex: seriesIndex, + from: this.uid + }); + }, + + _showComponentItemTooltip: function (e, el, dispatchAction) { + var tooltipOpt = el.tooltip; + if (typeof tooltipOpt === 'string') { + var content = tooltipOpt; + tooltipOpt = { + content: content, + // Fixed formatter + formatter: content + }; + } + var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel); + var defaultHtml = subTooltipModel.get('content'); + var asyncTicket = Math.random(); + + // Do not check whether `trigger` is 'none' here, because `trigger` + // only works on cooridinate system. In fact, we have not found case + // that requires setting `trigger` nothing on component yet. + + this._showOrMove(subTooltipModel, function () { + this._showTooltipContent( + subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {}, + asyncTicket, e.offsetX, e.offsetY, e.position, el + ); + }); + + // If not dispatch showTip, tip may be hide triggered by axis. + dispatchAction({ + type: 'showTip', + from: this.uid + }); + }, + + _showTooltipContent: function ( + tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markers + ) { + // Reset ticket + this._ticket = ''; + + if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) { + return; + } + + var tooltipContent = this._tooltipContent; + + var formatter = tooltipModel.get('formatter'); + positionExpr = positionExpr || tooltipModel.get('position'); + var html = defaultHtml; + + if (formatter && typeof formatter === 'string') { + html = formatTpl(formatter, params, true); + } + else if (typeof formatter === 'function') { + var callback = bind$3(function (cbTicket, html) { + if (cbTicket === this._ticket) { + tooltipContent.setContent(html, markers, tooltipModel); + this._updatePosition( + tooltipModel, positionExpr, x, y, tooltipContent, params, el + ); + } + }, this); + this._ticket = asyncTicket; + html = formatter(params, asyncTicket, callback); + } + + tooltipContent.setContent(html, markers, tooltipModel); + tooltipContent.show(tooltipModel); + + this._updatePosition( + tooltipModel, positionExpr, x, y, tooltipContent, params, el + ); + }, + + /** + * @param {string|Function|Array.|Object} positionExpr + * @param {number} x Mouse x + * @param {number} y Mouse y + * @param {boolean} confine Whether confine tooltip content in view rect. + * @param {Object|} params + * @param {module:zrender/Element} el target element + * @param {module:echarts/ExtensionAPI} api + * @return {Array.} + */ + _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) { + var viewWidth = this._api.getWidth(); + var viewHeight = this._api.getHeight(); + positionExpr = positionExpr || tooltipModel.get('position'); + + var contentSize = content.getSize(); + var align = tooltipModel.get('align'); + var vAlign = tooltipModel.get('verticalAlign'); + var rect = el && el.getBoundingRect().clone(); + el && rect.applyTransform(el.transform); + + if (typeof positionExpr === 'function') { + // Callback of position can be an array or a string specify the position + positionExpr = positionExpr([x, y], params, content.el, rect, { + viewSize: [viewWidth, viewHeight], + contentSize: contentSize.slice() + }); + } + + if (isArray(positionExpr)) { + x = parsePercent$2(positionExpr[0], viewWidth); + y = parsePercent$2(positionExpr[1], viewHeight); + } + else if (isObject$1(positionExpr)) { + positionExpr.width = contentSize[0]; + positionExpr.height = contentSize[1]; + var layoutRect = getLayoutRect( + positionExpr, {width: viewWidth, height: viewHeight} + ); + x = layoutRect.x; + y = layoutRect.y; + align = null; + // When positionExpr is left/top/right/bottom, + // align and verticalAlign will not work. + vAlign = null; + } + // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element + else if (typeof positionExpr === 'string' && el) { + var pos = calcTooltipPosition( + positionExpr, rect, contentSize + ); + x = pos[0]; + y = pos[1]; + } + else { + var pos = refixTooltipPosition( + x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20 + ); + x = pos[0]; + y = pos[1]; + } + + align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0); + vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0); + + if (tooltipModel.get('confine')) { + var pos = confineTooltipPosition( + x, y, content, viewWidth, viewHeight + ); + x = pos[0]; + y = pos[1]; + } + + content.moveTo(x, y); + }, + + // FIXME + // Should we remove this but leave this to user? + _updateContentNotChangedOnAxis: function (dataByCoordSys) { + var lastCoordSys = this._lastDataByCoordSys; + var contentNotChanged = !!lastCoordSys + && lastCoordSys.length === dataByCoordSys.length; + + contentNotChanged && each$17(lastCoordSys, function (lastItemCoordSys, indexCoordSys) { + var lastDataByAxis = lastItemCoordSys.dataByAxis || {}; + var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {}; + var thisDataByAxis = thisItemCoordSys.dataByAxis || []; + contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length; + + contentNotChanged && each$17(lastDataByAxis, function (lastItem, indexAxis) { + var thisItem = thisDataByAxis[indexAxis] || {}; + var lastIndices = lastItem.seriesDataIndices || []; + var newIndices = thisItem.seriesDataIndices || []; + + contentNotChanged + &= lastItem.value === thisItem.value + && lastItem.axisType === thisItem.axisType + && lastItem.axisId === thisItem.axisId + && lastIndices.length === newIndices.length; + + contentNotChanged && each$17(lastIndices, function (lastIdxItem, j) { + var newIdxItem = newIndices[j]; + contentNotChanged + &= lastIdxItem.seriesIndex === newIdxItem.seriesIndex + && lastIdxItem.dataIndex === newIdxItem.dataIndex; + }); + }); + }); + + this._lastDataByCoordSys = dataByCoordSys; + + return !!contentNotChanged; + }, + + _hide: function (dispatchAction) { + // Do not directly hideLater here, because this behavior may be prevented + // in dispatchAction when showTip is dispatched. + + // FIXME + // duplicated hideTip if manuallyHideTip is called from dispatchAction. + this._lastDataByCoordSys = null; + dispatchAction({ + type: 'hideTip', + from: this.uid + }); + }, + + dispose: function (ecModel, api) { + if (env$1.node) { + return; + } + this._tooltipContent.hide(); + unregister('itemTooltip', api); + } +}); + + +/** + * @param {Array.} modelCascade + * From top to bottom. (the last one should be globalTooltipModel); + */ +function buildTooltipModel(modelCascade) { + var resultModel = modelCascade.pop(); + while (modelCascade.length) { + var tooltipOpt = modelCascade.pop(); + if (tooltipOpt) { + if (Model.isInstance(tooltipOpt)) { + tooltipOpt = tooltipOpt.get('tooltip', true); + } + // In each data item tooltip can be simply write: + // { + // value: 10, + // tooltip: 'Something you need to know' + // } + if (typeof tooltipOpt === 'string') { + tooltipOpt = {formatter: tooltipOpt}; + } + resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel); + } + } + return resultModel; +} + +function makeDispatchAction$1(payload, api) { + return payload.dispatchAction || bind(api.dispatchAction, api); +} + +function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) { + var size = content.getOuterSize(); + var width = size.width; + var height = size.height; + + if (gapH != null) { + if (x + width + gapH > viewWidth) { + x -= width + gapH; + } + else { + x += gapH; + } + } + if (gapV != null) { + if (y + height + gapV > viewHeight) { + y -= height + gapV; + } + else { + y += gapV; + } + } + return [x, y]; +} + +function confineTooltipPosition(x, y, content, viewWidth, viewHeight) { + var size = content.getOuterSize(); + var width = size.width; + var height = size.height; + + x = Math.min(x + width, viewWidth) - width; + y = Math.min(y + height, viewHeight) - height; + x = Math.max(x, 0); + y = Math.max(y, 0); + + return [x, y]; +} + +function calcTooltipPosition(position, rect, contentSize) { + var domWidth = contentSize[0]; + var domHeight = contentSize[1]; + var gap = 5; + var x = 0; + var y = 0; + var rectWidth = rect.width; + var rectHeight = rect.height; + switch (position) { + case 'inside': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + case 'top': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y - domHeight - gap; + break; + case 'bottom': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight + gap; + break; + case 'left': + x = rect.x - domWidth - gap; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + case 'right': + x = rect.x + rectWidth + gap; + y = rect.y + rectHeight / 2 - domHeight / 2; + } + return [x, y]; +} + +function isCenterAlign(align) { + return align === 'center' || align === 'middle'; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// FIXME Better way to pack data in graphic element + +/** + * @action + * @property {string} type + * @property {number} seriesIndex + * @property {number} dataIndex + * @property {number} [x] + * @property {number} [y] + */ +registerAction( + { + type: 'showTip', + event: 'showTip', + update: 'tooltip:manuallyShowTip' + }, + // noop + function () {} +); + +registerAction( + { + type: 'hideTip', + event: 'hideTip', + update: 'tooltip:manuallyHideTip' + }, + // noop + function () {} +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function getSeriesStackId$1(seriesModel) { + return seriesModel.get('stack') + || '__ec_stack_' + seriesModel.seriesIndex; +} + +function getAxisKey$1(axis) { + return axis.dim; +} + +/** + * @param {string} seriesType + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ +function barLayoutPolar(seriesType, ecModel, api) { + + // FIXME + // Revert becuase it brings bar progressive bug. + // The complete fix will be added in the next version. + var width = api.getWidth(); + var height = api.getHeight(); + + var lastStackCoords = {}; + + var barWidthAndOffset = calRadialBar( + filter( + ecModel.getSeriesByType(seriesType), + function (seriesModel) { + return !ecModel.isSeriesFiltered(seriesModel) + && seriesModel.coordinateSystem + && seriesModel.coordinateSystem.type === 'polar'; + } + ) + ); + + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + // Check series coordinate, do layout for polar only + if (seriesModel.coordinateSystem.type !== 'polar') { + return; + } + + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + var baseAxis = polar.getBaseAxis(); + + var stackId = getSeriesStackId$1(seriesModel); + var columnLayoutInfo + = barWidthAndOffset[getAxisKey$1(baseAxis)][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = polar.getOtherAxis(baseAxis); + + var cx = seriesModel.coordinateSystem.cx; + var cy = seriesModel.coordinateSystem.cy; + + var barMinHeight = seriesModel.get('barMinHeight') || 0; + var barMinAngle = seriesModel.get('barMinAngle') || 0; + + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + + var valueDim = data.mapDimension(valueAxis.dim); + var baseDim = data.mapDimension(baseAxis.dim); + var stacked = isDimensionStacked(data, valueDim /*, baseDim*/); + + var valueAxisStart = valueAxis.getExtent()[0]; + + for (var idx = 0, len = data.count(); idx < len; idx++) { + var value = data.get(valueDim, idx); + var baseValue = data.get(baseDim, idx); + + if (isNaN(value)) { + continue; + } + + var sign = value >= 0 ? 'p' : 'n'; + var baseCoord = valueAxisStart; + + // Because of the barMinHeight, we can not use the value in + // stackResultDimension directly. + // Only ordinal axis can be stacked. + if (stacked) { + if (!lastStackCoords[stackId][baseValue]) { + lastStackCoords[stackId][baseValue] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + } + // Should also consider #4243 + baseCoord = lastStackCoords[stackId][baseValue][sign]; + } + + var r0; + var r; + var startAngle; + var endAngle; + + // radial sector + if (valueAxis.dim === 'radius') { + var radiusSpan = valueAxis.dataToRadius(value) - valueAxisStart; + var angle = baseAxis.dataToAngle(baseValue); + + if (Math.abs(radiusSpan) < barMinHeight) { + radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight; + } + + r0 = baseCoord; + r = baseCoord + radiusSpan; + startAngle = angle - columnOffset; + endAngle = startAngle - columnWidth; + + stacked && (lastStackCoords[stackId][baseValue][sign] = r); + } + // tangential sector + else { + // angleAxis must be clamped. + var angleSpan = valueAxis.dataToAngle(value, true) - valueAxisStart; + var radius = baseAxis.dataToRadius(baseValue); + + if (Math.abs(angleSpan) < barMinAngle) { + angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle; + } + + r0 = radius + columnOffset; + r = r0 + columnWidth; + startAngle = baseCoord; + endAngle = baseCoord + angleSpan; + + // if the previous stack is at the end of the ring, + // add a round to differentiate it from origin + // var extent = angleAxis.getExtent(); + // var stackCoord = angle; + // if (stackCoord === extent[0] && value > 0) { + // stackCoord = extent[1]; + // } + // else if (stackCoord === extent[1] && value < 0) { + // stackCoord = extent[0]; + // } + stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle); + } + + data.setItemLayout(idx, { + cx: cx, + cy: cy, + r0: r0, + r: r, + // Consider that positive angle is anti-clockwise, + // while positive radian of sector is clockwise + startAngle: -startAngle * Math.PI / 180, + endAngle: -endAngle * Math.PI / 180 + }); + + } + + }, this); + +} + +/** + * Calculate bar width and offset for radial bar charts + */ +function calRadialBar(barSeries, api) { + // Columns info on each category axis. Key is polar name + var columnsMap = {}; + + each$1(barSeries, function (seriesModel, idx) { + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + + var baseAxis = polar.getBaseAxis(); + + var axisExtent = baseAxis.getExtent(); + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count()); + + var columnsOnAxis = columnsMap[getAxisKey$1(baseAxis)] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: '20%', + gap: '30%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[getAxisKey$1(baseAxis)] = columnsOnAxis; + + var stackId = getSeriesStackId$1(seriesModel); + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; + + var barWidth = parsePercent$1( + seriesModel.get('barWidth'), + bandWidth + ); + var barMaxWidth = parsePercent$1( + seriesModel.get('barMaxWidth'), + bandWidth + ); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + + if (barWidth && !stacks[stackId].width) { + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + stacks[stackId].width = barWidth; + columnsOnAxis.remainedWidth -= barWidth; + } + + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + (barGap != null) && (columnsOnAxis.gap = barGap); + (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap); + }); + + + var result = {}; + + each$1(columnsMap, function (columnsOnAxis, coordSysName) { + + result[coordSysName] = {}; + + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + // Find if any auto calculated bar exceeded maxBarWidth + each$1(stacks, function (column, stack) { + var maxWidth = column.maxWidth; + if (maxWidth && maxWidth < autoWidth) { + maxWidth = Math.min(maxWidth, remainedWidth); + if (column.width) { + maxWidth = Math.min(maxWidth, column.width); + } + remainedWidth -= maxWidth; + column.width = maxWidth; + autoWidthCount--; + } + }); + + // Recalculate width again + autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + var widthSum = 0; + var lastColumn; + each$1(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each$1(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + offset: offset, + width: column.width + }; + + offset += column.width * (1 + barGapPercent); + }); + }); + + return result; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function RadiusAxis(scale, radiusExtent) { + + Axis.call(this, 'radius', scale, radiusExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'category'; +} + +RadiusAxis.prototype = { + + constructor: RadiusAxis, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }, + + dataToRadius: Axis.prototype.dataToCoord, + + radiusToData: Axis.prototype.coordToData +}; + +inherits(RadiusAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var inner$12 = makeInner(); + +function AngleAxis(scale, angleExtent) { + + angleExtent = angleExtent || [0, 360]; + + Axis.call(this, 'angle', scale, angleExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'category'; +} + +AngleAxis.prototype = { + + constructor: AngleAxis, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }, + + dataToAngle: Axis.prototype.dataToCoord, + + angleToData: Axis.prototype.coordToData, + + /** + * Only be called in category axis. + * Angle axis uses text height to decide interval + * + * @override + * @return {number} Auto interval for cateogry axis tick and label + */ + calculateCategoryInterval: function () { + var axis = this; + var labelModel = axis.getLabelModel(); + + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); + // Providing this method is for optimization: + // avoid generating a long array by `getTicks` + // in large category data case. + var tickCount = ordinalScale.count(); + + if (ordinalExtent[1] - ordinalExtent[0] < 1) { + return 0; + } + + var tickValue = ordinalExtent[0]; + var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); + var unitH = Math.abs(unitSpan); + + // Not precise, just use height as text width + // and each distance from axis line yet. + var rect = getBoundingRect( + tickValue, labelModel.getFont(), 'center', 'top' + ); + var maxH = Math.max(rect.height, 7); + + var dh = maxH / unitH; + // 0/0 is NaN, 1/0 is Infinity. + isNaN(dh) && (dh = Infinity); + var interval = Math.max(0, Math.floor(dh)); + + var cache = inner$12(axis.model); + var lastAutoInterval = cache.lastAutoInterval; + var lastTickCount = cache.lastTickCount; + + // Use cache to keep interval stable while moving zoom window, + // otherwise the calculated interval might jitter when the zoom + // window size is close to the interval-changing size. + if (lastAutoInterval != null + && lastTickCount != null + && Math.abs(lastAutoInterval - interval) <= 1 + && Math.abs(lastTickCount - tickCount) <= 1 + // Always choose the bigger one, otherwise the critical + // point is not the same when zooming in or zooming out. + && lastAutoInterval > interval + ) { + interval = lastAutoInterval; + } + // Only update cache if cache not used, otherwise the + // changing of interval is too insensitive. + else { + cache.lastTickCount = tickCount; + cache.lastAutoInterval = interval; + } + + return interval; + } +}; + +inherits(AngleAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @module echarts/coord/polar/Polar + */ + +/** + * @alias {module:echarts/coord/polar/Polar} + * @constructor + * @param {string} name + */ +var Polar = function (name) { + + /** + * @type {string} + */ + this.name = name || ''; + + /** + * x of polar center + * @type {number} + */ + this.cx = 0; + + /** + * y of polar center + * @type {number} + */ + this.cy = 0; + + /** + * @type {module:echarts/coord/polar/RadiusAxis} + * @private + */ + this._radiusAxis = new RadiusAxis(); + + /** + * @type {module:echarts/coord/polar/AngleAxis} + * @private + */ + this._angleAxis = new AngleAxis(); + + this._radiusAxis.polar = this._angleAxis.polar = this; +}; + +Polar.prototype = { + + type: 'polar', + + axisPointerEnabled: true, + + constructor: Polar, + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['radius', 'angle'], + + /** + * @type {module:echarts/coord/PolarModel} + */ + model: null, + + /** + * If contain coord + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var coord = this.pointToCoord(point); + return this._radiusAxis.contain(coord[0]) + && this._angleAxis.contain(coord[1]); + }, + + /** + * If contain data + * @param {Array.} data + * @return {boolean} + */ + containData: function (data) { + return this._radiusAxis.containData(data[0]) + && this._angleAxis.containData(data[1]); + }, + + /** + * @param {string} dim + * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + getAxis: function (dim) { + return this['_' + dim + 'Axis']; + }, + + /** + * @return {Array.} + */ + getAxes: function () { + return [this._radiusAxis, this._angleAxis]; + }, + + /** + * Get axes by type of scale + * @param {string} scaleType + * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + getAxesByScale: function (scaleType) { + var axes = []; + var angleAxis = this._angleAxis; + var radiusAxis = this._radiusAxis; + angleAxis.scale.type === scaleType && axes.push(angleAxis); + radiusAxis.scale.type === scaleType && axes.push(radiusAxis); + + return axes; + }, + + /** + * @return {module:echarts/coord/polar/AngleAxis} + */ + getAngleAxis: function () { + return this._angleAxis; + }, + + /** + * @return {module:echarts/coord/polar/RadiusAxis} + */ + getRadiusAxis: function () { + return this._radiusAxis; + }, + + /** + * @param {module:echarts/coord/polar/Axis} + * @return {module:echarts/coord/polar/Axis} + */ + getOtherAxis: function (axis) { + var angleAxis = this._angleAxis; + return axis === angleAxis ? this._radiusAxis : angleAxis; + }, + + /** + * Base axis will be used on stacking. + * + * @return {module:echarts/coord/polar/Axis} + */ + getBaseAxis: function () { + return this.getAxesByScale('ordinal')[0] + || this.getAxesByScale('time')[0] + || this.getAngleAxis(); + }, + + /** + * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined + * @return {Object} {baseAxes: [], otherAxes: []} + */ + getTooltipAxes: function (dim) { + var baseAxis = (dim != null && dim !== 'auto') + ? this.getAxis(dim) : this.getBaseAxis(); + return { + baseAxes: [baseAxis], + otherAxes: [this.getOtherAxis(baseAxis)] + }; + }, + + /** + * Convert a single data item to (x, y) point. + * Parameter data is an array which the first element is radius and the second is angle + * @param {Array.} data + * @param {boolean} [clamp=false] + * @return {Array.} + */ + dataToPoint: function (data, clamp) { + return this.coordToPoint([ + this._radiusAxis.dataToRadius(data[0], clamp), + this._angleAxis.dataToAngle(data[1], clamp) + ]); + }, + + /** + * Convert a (x, y) point to data + * @param {Array.} point + * @param {boolean} [clamp=false] + * @return {Array.} + */ + pointToData: function (point, clamp) { + var coord = this.pointToCoord(point); + return [ + this._radiusAxis.radiusToData(coord[0], clamp), + this._angleAxis.angleToData(coord[1], clamp) + ]; + }, + + /** + * Convert a (x, y) point to (radius, angle) coord + * @param {Array.} point + * @return {Array.} + */ + pointToCoord: function (point) { + var dx = point[0] - this.cx; + var dy = point[1] - this.cy; + var angleAxis = this.getAngleAxis(); + var extent = angleAxis.getExtent(); + var minAngle = Math.min(extent[0], extent[1]); + var maxAngle = Math.max(extent[0], extent[1]); + // Fix fixed extent in polarCreator + // FIXME + angleAxis.inverse + ? (minAngle = maxAngle - 360) + : (maxAngle = minAngle + 360); + + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + + var radian = Math.atan2(-dy, dx) / Math.PI * 180; + + // move to angleExtent + var dir = radian < minAngle ? 1 : -1; + while (radian < minAngle || radian > maxAngle) { + radian += dir * 360; + } + + return [radius, radian]; + }, + + /** + * Convert a (radius, angle) coord to (x, y) point + * @param {Array.} coord + * @return {Array.} + */ + coordToPoint: function (coord) { + var radius = coord[0]; + var radian = coord[1] / 180 * Math.PI; + var x = Math.cos(radian) * radius + this.cx; + // Inverse the y + var y = -Math.sin(radian) * radius + this.cy; + + return [x, y]; + } + +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PolarAxisModel = ComponentModel.extend({ + + type: 'polarAxis', + + /** + * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + axis: null, + + /** + * @override + */ + getCoordSysModel: function () { + return this.ecModel.queryComponents({ + mainType: 'polar', + index: this.option.polarIndex, + id: this.option.polarId + })[0]; + } + +}); + +merge(PolarAxisModel.prototype, axisModelCommonMixin); + +var polarAxisDefaultExtendedOption = { + angle: { + // polarIndex: 0, + // polarId: '', + + startAngle: 90, + + clockwise: true, + + splitNumber: 12, + + axisLabel: { + rotate: false + } + }, + radius: { + // polarIndex: 0, + // polarId: '', + + splitNumber: 5 + } +}; + +function getAxisType$3(axisDim, option) { + // Default axis with data is category axis + return option.type || (option.data ? 'category' : 'value'); +} + +axisModelCreator('angle', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.angle); +axisModelCreator('radius', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.radius); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentModel({ + + type: 'polar', + + dependencies: ['polarAxis', 'angleAxis'], + + /** + * @type {module:echarts/coord/polar/Polar} + */ + coordinateSystem: null, + + /** + * @param {string} axisType + * @return {module:echarts/coord/polar/AxisModel} + */ + findAxisModel: function (axisType) { + var foundAxisModel; + var ecModel = this.ecModel; + + ecModel.eachComponent(axisType, function (axisModel) { + if (axisModel.getCoordSysModel() === this) { + foundAxisModel = axisModel; + } + }, this); + return foundAxisModel; + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + center: ['50%', '50%'], + + radius: '80%' + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO Axis scale + +/** + * Resize method bound to the polar + * @param {module:echarts/coord/polar/PolarModel} polarModel + * @param {module:echarts/ExtensionAPI} api + */ +function resizePolar(polar, polarModel, api) { + var center = polarModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + + polar.cx = parsePercent$1(center[0], width); + polar.cy = parsePercent$1(center[1], height); + + var radiusAxis = polar.getRadiusAxis(); + var size = Math.min(width, height) / 2; + var radius = parsePercent$1(polarModel.get('radius'), size); + radiusAxis.inverse + ? radiusAxis.setExtent(radius, 0) + : radiusAxis.setExtent(0, radius); +} + +/** + * Update polar + */ +function updatePolarScale(ecModel, api) { + var polar = this; + var angleAxis = polar.getAngleAxis(); + var radiusAxis = polar.getRadiusAxis(); + // Reset scale + angleAxis.scale.setExtent(Infinity, -Infinity); + radiusAxis.scale.setExtent(Infinity, -Infinity); + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === polar) { + var data = seriesModel.getData(); + each$1(data.mapDimension('radius', true), function (dim) { + radiusAxis.scale.unionExtentFromData( + data, getStackedDimension(data, dim) + ); + }); + each$1(data.mapDimension('angle', true), function (dim) { + angleAxis.scale.unionExtentFromData( + data, getStackedDimension(data, dim) + ); + }); + } + }); + + niceScaleExtent(angleAxis.scale, angleAxis.model); + niceScaleExtent(radiusAxis.scale, radiusAxis.model); + + // Fix extent of category angle axis + if (angleAxis.type === 'category' && !angleAxis.onBand) { + var extent = angleAxis.getExtent(); + var diff = 360 / angleAxis.scale.count(); + angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff); + angleAxis.setExtent(extent[0], extent[1]); + } +} + +/** + * Set common axis properties + * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + * @param {module:echarts/coord/polar/AxisModel} + * @inner + */ +function setAxis(axis, axisModel) { + axis.type = axisModel.get('type'); + axis.scale = createScaleByModel(axisModel); + axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category'; + axis.inverse = axisModel.get('inverse'); + + if (axisModel.mainType === 'angleAxis') { + axis.inverse ^= axisModel.get('clockwise'); + var startAngle = axisModel.get('startAngle'); + axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360)); + } + + // Inject axis instance + axisModel.axis = axis; + axis.model = axisModel; +} + + +var polarCreator = { + + dimensions: Polar.prototype.dimensions, + + create: function (ecModel, api) { + var polarList = []; + ecModel.eachComponent('polar', function (polarModel, idx) { + var polar = new Polar(idx); + // Inject resize and update method + polar.update = updatePolarScale; + + var radiusAxis = polar.getRadiusAxis(); + var angleAxis = polar.getAngleAxis(); + + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + + setAxis(radiusAxis, radiusAxisModel); + setAxis(angleAxis, angleAxisModel); + + resizePolar(polar, polarModel, api); + + polarList.push(polar); + + polarModel.coordinateSystem = polar; + polar.model = polarModel; + }); + // Inject coordinateSystem to series + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'polar') { + var polarModel = ecModel.queryComponents({ + mainType: 'polar', + index: seriesModel.get('polarIndex'), + id: seriesModel.get('polarId') + })[0]; + + if (__DEV__) { + if (!polarModel) { + throw new Error( + 'Polar "' + retrieve( + seriesModel.get('polarIndex'), + seriesModel.get('polarId'), + 0 + ) + '" not found' + ); + } + } + seriesModel.coordinateSystem = polarModel.coordinateSystem; + } + }); + + return polarList; + } +}; + +CoordinateSystemManager.register('polar', polarCreator); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var elementList$1 = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea']; + +function getAxisLineShape(polar, rExtent, angle) { + rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse()); + var start = polar.coordToPoint([rExtent[0], angle]); + var end = polar.coordToPoint([rExtent[1], angle]); + + return { + x1: start[0], + y1: start[1], + x2: end[0], + y2: end[1] + }; +} + +function getRadiusIdx(polar) { + var radiusAxis = polar.getRadiusAxis(); + return radiusAxis.inverse ? 0 : 1; +} + +// Remove the last tick which will overlap the first tick +function fixAngleOverlap(list) { + var firstItem = list[0]; + var lastItem = list[list.length - 1]; + if (firstItem + && lastItem + && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4 + ) { + list.pop(); + } +} + +AxisView.extend({ + + type: 'angleAxis', + + axisPointerClass: 'PolarAxisPointer', + + render: function (angleAxisModel, ecModel) { + this.group.removeAll(); + if (!angleAxisModel.get('show')) { + return; + } + + var angleAxis = angleAxisModel.axis; + var polar = angleAxis.polar; + var radiusExtent = polar.getRadiusAxis().getExtent(); + + var ticksAngles = angleAxis.getTicksCoords(); + var labels = map(angleAxis.getViewLabels(), function (labelItem) { + var labelItem = clone(labelItem); + labelItem.coord = angleAxis.dataToCoord(labelItem.tickValue); + return labelItem; + }); + + fixAngleOverlap(labels); + fixAngleOverlap(ticksAngles); + + each$1(elementList$1, function (name) { + if (angleAxisModel.get(name + '.show') + && (!angleAxis.scale.isBlank() || name === 'axisLine') + ) { + this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent, labels); + } + }, this); + }, + + /** + * @private + */ + _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle'); + + var circle = new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: radiusExtent[getRadiusIdx(polar)] + }, + style: lineStyleModel.getLineStyle(), + z2: 1, + silent: true + }); + circle.style.fill = null; + + this.group.add(circle); + }, + + /** + * @private + */ + _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var tickModel = angleAxisModel.getModel('axisTick'); + + var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length'); + var radius = radiusExtent[getRadiusIdx(polar)]; + + var lines = map(ticksAngles, function (tickAngleItem) { + return new Line({ + shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord) + }); + }); + this.group.add(mergePath( + lines, { + style: defaults( + tickModel.getModel('lineStyle').getLineStyle(), + { + stroke: angleAxisModel.get('axisLine.lineStyle.color') + } + ) + } + )); + }, + + /** + * @private + */ + _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent, labels) { + var rawCategoryData = angleAxisModel.getCategories(true); + + var commonLabelModel = angleAxisModel.getModel('axisLabel'); + + var labelMargin = commonLabelModel.get('margin'); + + // Use length of ticksAngles because it may remove the last tick to avoid overlapping + each$1(labels, function (labelItem, idx) { + var labelModel = commonLabelModel; + var tickValue = labelItem.tickValue; + + var r = radiusExtent[getRadiusIdx(polar)]; + var p = polar.coordToPoint([r + labelMargin, labelItem.coord]); + var cx = polar.cx; + var cy = polar.cy; + + var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 + ? 'center' : (p[0] > cx ? 'left' : 'right'); + var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 + ? 'middle' : (p[1] > cy ? 'top' : 'bottom'); + + if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) { + labelModel = new Model( + rawCategoryData[tickValue].textStyle, commonLabelModel, commonLabelModel.ecModel + ); + } + + var textEl = new Text({silent: true}); + this.group.add(textEl); + setTextStyle(textEl.style, labelModel, { + x: p[0], + y: p[1], + textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'), + text: labelItem.formattedLabel, + textAlign: labelTextAlign, + textVerticalAlign: labelTextVerticalAlign + }); + }, this); + }, + + /** + * @private + */ + _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var splitLineModel = angleAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var splitLines = []; + + for (var i = 0; i < ticksAngles.length; i++) { + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line({ + shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord) + })); + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitLines.length; i++) { + this.group.add(mergePath(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length] + }, lineStyleModel.getLineStyle()), + silent: true, + z: angleAxisModel.get('z') + })); + } + }, + + /** + * @private + */ + _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + if (!ticksAngles.length) { + return; + } + + var splitAreaModel = angleAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + + var splitAreas = []; + + var RADIAN = Math.PI / 180; + var prevAngle = -ticksAngles[0].coord * RADIAN; + var r0 = Math.min(radiusExtent[0], radiusExtent[1]); + var r1 = Math.max(radiusExtent[0], radiusExtent[1]); + + var clockwise = angleAxisModel.get('clockwise'); + + for (var i = 1; i < ticksAngles.length; i++) { + var colorIndex = (lineCount++) % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: r0, + r: r1, + startAngle: prevAngle, + endAngle: -ticksAngles[i].coord * RADIAN, + clockwise: clockwise + }, + silent: true + })); + prevAngle = -ticksAngles[i].coord * RADIAN; + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitAreas.length; i++) { + this.group.add(mergePath(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var axisBuilderAttrs$3 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; +var selfBuilderAttrs$1 = [ + 'splitLine', 'splitArea' +]; + +AxisView.extend({ + + type: 'radiusAxis', + + axisPointerClass: 'PolarAxisPointer', + + render: function (radiusAxisModel, ecModel) { + this.group.removeAll(); + if (!radiusAxisModel.get('show')) { + return; + } + var radiusAxis = radiusAxisModel.axis; + var polar = radiusAxis.polar; + var angleAxis = polar.getAngleAxis(); + var ticksCoords = radiusAxis.getTicksCoords(); + var axisAngle = angleAxis.getExtent()[0]; + var radiusExtent = radiusAxis.getExtent(); + + var layout = layoutAxis(polar, radiusAxisModel, axisAngle); + var axisBuilder = new AxisBuilder(radiusAxisModel, layout); + each$1(axisBuilderAttrs$3, axisBuilder.add, axisBuilder); + this.group.add(axisBuilder.getGroup()); + + each$1(selfBuilderAttrs$1, function (name) { + if (radiusAxisModel.get(name + '.show') && !radiusAxis.scale.isBlank()) { + this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords); + } + }, this); + }, + + /** + * @private + */ + _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + var splitLineModel = radiusAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var splitLines = []; + + for (var i = 0; i < ticksCoords.length; i++) { + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: ticksCoords[i].coord + }, + silent: true + })); + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitLines.length; i++) { + this.group.add(mergePath(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length], + fill: null + }, lineStyleModel.getLineStyle()), + silent: true + })); + } + }, + + /** + * @private + */ + _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + if (!ticksCoords.length) { + return; + } + + var splitAreaModel = radiusAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + + var splitAreas = []; + + var prevRadius = ticksCoords[0].coord; + for (var i = 1; i < ticksCoords.length; i++) { + var colorIndex = (lineCount++) % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: prevRadius, + r: ticksCoords[i].coord, + startAngle: 0, + endAngle: Math.PI * 2 + }, + silent: true + })); + prevRadius = ticksCoords[i].coord; + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitAreas.length; i++) { + this.group.add(mergePath(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } +}); + +/** + * @inner + */ +function layoutAxis(polar, radiusAxisModel, axisAngle) { + return { + position: [polar.cx, polar.cy], + rotation: axisAngle / 180 * Math.PI, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1, + labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'), + // Over splitLine and splitArea + z2: 1 + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PolarAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + + if (axis.dim === 'angle') { + this.animationThreshold = Math.PI / 18; + } + + var polar = axis.polar; + var otherAxis = polar.getOtherAxis(axis); + var otherExtent = otherAxis.getExtent(); + + var coordValue; + coordValue = axis['dataTo' + capitalFirst(axis.dim)](value); + + var axisPointerType = axisPointerModel.get('type'); + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$2[axisPointerType]( + axis, polar, coordValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var labelMargin = axisPointerModel.get('label.margin'); + var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos); + } + + // Do not support handle, utill any user requires it. + +}); + +function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) { + var axis = axisModel.axis; + var coord = axis.dataToCoord(value); + var axisAngle = polar.getAngleAxis().getExtent()[0]; + axisAngle = axisAngle / 180 * Math.PI; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var position; + var align; + var verticalAlign; + + if (axis.dim === 'radius') { + var transform = create$1(); + rotate(transform, transform, axisAngle); + translate(transform, transform, [polar.cx, polar.cy]); + position = applyTransform$1([coord, -labelMargin], transform); + + var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0; + var labelLayout = AxisBuilder.innerTextLayout( + axisAngle, labelRotation * Math.PI / 180, -1 + ); + align = labelLayout.textAlign; + verticalAlign = labelLayout.textVerticalAlign; + } + else { // angle axis + var r = radiusExtent[1]; + position = polar.coordToPoint([r + labelMargin, coord]); + var cx = polar.cx; + var cy = polar.cy; + align = Math.abs(position[0] - cx) / r < 0.3 + ? 'center' : (position[0] > cx ? 'left' : 'right'); + verticalAlign = Math.abs(position[1] - cy) / r < 0.3 + ? 'middle' : (position[1] > cy ? 'top' : 'bottom'); + } + + return { + position: position, + align: align, + verticalAlign: verticalAlign + }; +} + + +var pointerShapeBuilder$2 = { + + line: function (axis, polar, coordValue, otherExtent, elStyle) { + return axis.dim === 'angle' + ? { + type: 'Line', + shape: makeLineShape( + polar.coordToPoint([otherExtent[0], coordValue]), + polar.coordToPoint([otherExtent[1], coordValue]) + ) + } + : { + type: 'Circle', + shape: { + cx: polar.cx, + cy: polar.cy, + r: coordValue + } + }; + }, + + shadow: function (axis, polar, coordValue, otherExtent, elStyle) { + var bandWidth = Math.max(1, axis.getBandWidth()); + var radian = Math.PI / 180; + + return axis.dim === 'angle' + ? { + type: 'Sector', + shape: makeSectorShape( + polar.cx, polar.cy, + otherExtent[0], otherExtent[1], + // In ECharts y is negative if angle is positive + (-coordValue - bandWidth / 2) * radian, + (-coordValue + bandWidth / 2) * radian + ) + } + : { + type: 'Sector', + shape: makeSectorShape( + polar.cx, polar.cy, + coordValue - bandWidth / 2, + coordValue + bandWidth / 2, + 0, Math.PI * 2 + ) + }; + } +}; + +AxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// For reducing size of echarts.min, barLayoutPolar is required by polar. +registerLayout(curry(barLayoutPolar, 'bar')); + +// Polar view +extendComponentView({ + type: 'polar' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var GeoModel = ComponentModel.extend({ + + type: 'geo', + + /** + * @type {module:echarts/coord/geo/Geo} + */ + coordinateSystem: null, + + layoutMode: 'box', + + init: function (option) { + ComponentModel.prototype.init.apply(this, arguments); + + // Default label emphasis `show` + defaultEmphasis(option, 'label', ['show']); + }, + + optionUpdated: function () { + var option = this.option; + var self = this; + + option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap); + + this._optionModelMap = reduce(option.regions || [], function (optionModelMap, regionOpt) { + if (regionOpt.name) { + optionModelMap.set(regionOpt.name, new Model(regionOpt, self)); + } + return optionModelMap; + }, createHashMap()); + + this.updateSelectedMap(option.regions); + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + show: true, + + left: 'center', + + top: 'center', + + + // width:, + // height:, + // right + // bottom + + // Aspect is width / height. Inited to be geoJson bbox aspect + // This parameter is used for scale this aspect + // If svg used, aspectScale is 1 by default. + // aspectScale: 0.75, + aspectScale: null, + + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + + silent: false, + + // Map type + map: '', + + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ] + boundingCoords: null, + + // Default on center of map + center: null, + + zoom: 1, + + scaleLimit: null, + + // selectedMode: false + + label: { + show: false, + color: '#000' + }, + + itemStyle: { + // color: 各异, + borderWidth: 0.5, + borderColor: '#444', + color: '#eee' + }, + + emphasis: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + color: 'rgba(255,215,0,0.8)' + } + }, + + regions: [] + }, + + /** + * Get model of region + * @param {string} name + * @return {module:echarts/model/Model} + */ + getRegionModel: function (name) { + return this._optionModelMap.get(name) || new Model(null, this, this.ecModel); + }, + + /** + * Format label + * @param {string} name Region name + * @param {string} [status='normal'] 'normal' or 'emphasis' + * @return {string} + */ + getFormattedLabel: function (name, status) { + var regionModel = this.getRegionModel(name); + var formatter = regionModel.get('label.' + status + '.formatter'); + var params = { + name: name + }; + if (typeof formatter === 'function') { + params.status = status; + return formatter(params); + } + else if (typeof formatter === 'string') { + return formatter.replace('{a}', name != null ? name : ''); + } + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + } +}); + +mixin(GeoModel, selectableMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentView({ + + type: 'geo', + + init: function (ecModel, api) { + var mapDraw = new MapDraw(api, true); + this._mapDraw = mapDraw; + + this.group.add(mapDraw.group); + }, + + render: function (geoModel, ecModel, api, payload) { + // Not render if it is an toggleSelect action from self + if (payload && payload.type === 'geoToggleSelect' + && payload.from === this.uid + ) { + return; + } + + var mapDraw = this._mapDraw; + if (geoModel.get('show')) { + mapDraw.draw(geoModel, ecModel, api, this, payload); + } + else { + this._mapDraw.group.removeAll(); + } + + this.group.silent = geoModel.get('silent'); + }, + + dispose: function () { + this._mapDraw && this._mapDraw.remove(); + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function makeAction(method, actionInfo) { + actionInfo.update = 'updateView'; + registerAction(actionInfo, function (payload, ecModel) { + var selected = {}; + + ecModel.eachComponent( + { mainType: 'geo', query: payload}, + function (geoModel) { + geoModel[method](payload.name); + var geo = geoModel.coordinateSystem; + each$1(geo.regions, function (region) { + selected[region.name] = geoModel.isSelected(region.name) || false; + }); + } + ); + + return { + selected: selected, + name: payload.name + }; + }); +} + +makeAction('toggleSelected', { + type: 'geoToggleSelect', + event: 'geoselectchanged' +}); +makeAction('select', { + type: 'geoSelect', + event: 'geoselected' +}); +makeAction('unSelect', { + type: 'geoUnSelect', + event: 'geounselected' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear']; + +var preprocessor$1 = function (option, isNew) { + var brushComponents = option && option.brush; + if (!isArray(brushComponents)) { + brushComponents = brushComponents ? [brushComponents] : []; + } + + if (!brushComponents.length) { + return; + } + + var brushComponentSpecifiedBtns = []; + + each$1(brushComponents, function (brushOpt) { + var tbs = brushOpt.hasOwnProperty('toolbox') + ? brushOpt.toolbox : []; + + if (tbs instanceof Array) { + brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs); + } + }); + + var toolbox = option && option.toolbox; + + if (isArray(toolbox)) { + toolbox = toolbox[0]; + } + if (!toolbox) { + toolbox = {feature: {}}; + option.toolbox = [toolbox]; + } + + var toolboxFeature = (toolbox.feature || (toolbox.feature = {})); + var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {}); + var brushTypes = toolboxBrush.type || (toolboxBrush.type = []); + + brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns); + + removeDuplicate(brushTypes); + + if (isNew && !brushTypes.length) { + brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS); + } +}; + +function removeDuplicate(arr) { + var map$$1 = {}; + each$1(arr, function (val) { + map$$1[val] = 1; + }); + arr.length = 0; + each$1(map$$1, function (flag, val) { + arr.push(val); + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Visual solution, for consistent option specification. + */ + +var each$19 = each$1; + +function hasKeys(obj) { + if (obj) { + for (var name in obj) { + if (obj.hasOwnProperty(name)) { + return true; + } + } + } +} + +/** + * @param {Object} option + * @param {Array.} stateList + * @param {Function} [supplementVisualOption] + * @return {Object} visualMappings > + */ +function createVisualMappings(option, stateList, supplementVisualOption) { + var visualMappings = {}; + + each$19(stateList, function (state) { + var mappings = visualMappings[state] = createMappings(); + + each$19(option[state], function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + var mappingOption = { + type: visualType, + visual: visualData + }; + supplementVisualOption && supplementVisualOption(mappingOption, state); + mappings[visualType] = new VisualMapping(mappingOption); + + // Prepare a alpha for opacity, for some case that opacity + // is not supported, such as rendering using gradient color. + if (visualType === 'opacity') { + mappingOption = clone(mappingOption); + mappingOption.type = 'colorAlpha'; + mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption); + } + }); + }); + + return visualMappings; + + function createMappings() { + var Creater = function () {}; + // Make sure hidden fields will not be visited by + // object iteration (with hasOwnProperty checking). + Creater.prototype.__hidden = Creater.prototype; + var obj = new Creater(); + return obj; + } +} + +/** + * @param {Object} thisOption + * @param {Object} newOption + * @param {Array.} keys + */ +function replaceVisualOption(thisOption, newOption, keys) { + // Visual attributes merge is not supported, otherwise it + // brings overcomplicated merge logic. See #2853. So if + // newOption has anyone of these keys, all of these keys + // will be reset. Otherwise, all keys remain. + var has; + each$1(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + has = true; + } + }); + has && each$1(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + thisOption[key] = clone(newOption[key]); + } + else { + delete thisOption[key]; + } + }); +} + +/** + * @param {Array.} stateList + * @param {Object} visualMappings > + * @param {module:echarts/data/List} list + * @param {Function} getValueState param: valueOrIndex, return: state. + * @param {object} [scope] Scope for getValueState + * @param {string} [dimension] Concrete dimension, if used. + */ +// ???! handle brush? +function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) { + var visualTypesMap = {}; + each$1(stateList, function (state) { + var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]); + visualTypesMap[state] = visualTypes; + }); + + var dataIndex; + + function getVisual(key) { + return data.getItemVisual(dataIndex, key); + } + + function setVisual(key, value) { + data.setItemVisual(dataIndex, key, value); + } + + if (dimension == null) { + data.each(eachItem); + } + else { + data.each([dimension], eachItem); + } + + function eachItem(valueOrIndex, index) { + dataIndex = dimension == null ? valueOrIndex : index; + + var rawDataItem = data.getRawDataItem(dataIndex); + // Consider performance + if (rawDataItem && rawDataItem.visualMap === false) { + return; + } + + var valueState = getValueState.call(scope, valueOrIndex); + var mappings = visualMappings[valueState]; + var visualTypes = visualTypesMap[valueState]; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + mappings[type] && mappings[type].applyVisual( + valueOrIndex, getVisual, setVisual + ); + } + } +} + +/** + * @param {module:echarts/data/List} data + * @param {Array.} stateList + * @param {Object} visualMappings > + * @param {Function} getValueState param: valueOrIndex, return: state. + * @param {number} [dim] dimension or dimension index. + */ +function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) { + var visualTypesMap = {}; + each$1(stateList, function (state) { + var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]); + visualTypesMap[state] = visualTypes; + }); + + function progress(params, data) { + if (dim != null) { + dim = data.getDimension(dim); + } + + function getVisual(key) { + return data.getItemVisual(dataIndex, key); + } + + function setVisual(key, value) { + data.setItemVisual(dataIndex, key, value); + } + + var dataIndex; + while ((dataIndex = params.next()) != null) { + var rawDataItem = data.getRawDataItem(dataIndex); + + // Consider performance + if (rawDataItem && rawDataItem.visualMap === false) { + return; + } + + var value = dim != null + ? data.get(dim, dataIndex, true) + : dataIndex; + + var valueState = getValueState(value); + var mappings = visualMappings[valueState]; + var visualTypes = visualTypesMap[valueState]; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual); + } + } + } + + return {progress: progress}; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Key of the first level is brushType: `line`, `rect`, `polygon`. +// Key of the second level is chart element type: `point`, `rect`. +// See moudule:echarts/component/helper/BrushController +// function param: +// {Object} itemLayout fetch from data.getItemLayout(dataIndex) +// {Object} selectors {point: selector, rect: selector, ...} +// {Object} area {range: [[], [], ..], boudingRect} +// function return: +// {boolean} Whether in the given brush. +var selector = { + lineX: getLineSelectors(0), + lineY: getLineSelectors(1), + rect: { + point: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.intersect(itemLayout); + } + }, + polygon: { + point: function (itemLayout, selectors, area) { + return itemLayout + && area.boundingRect.contain(itemLayout[0], itemLayout[1]) + && contain$1(area.range, itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + var points = area.range; + + if (!itemLayout || points.length <= 1) { + return false; + } + + var x = itemLayout.x; + var y = itemLayout.y; + var width = itemLayout.width; + var height = itemLayout.height; + var p = points[0]; + + if (contain$1(points, x, y) + || contain$1(points, x + width, y) + || contain$1(points, x, y + height) + || contain$1(points, x + width, y + height) + || BoundingRect.create(itemLayout).contain(p[0], p[1]) + || lineIntersectPolygon(x, y, x + width, y, points) + || lineIntersectPolygon(x, y, x, y + height, points) + || lineIntersectPolygon(x + width, y, x + width, y + height, points) + || lineIntersectPolygon(x, y + height, x + width, y + height, points) + ) { + return true; + } + } + } +}; + +function getLineSelectors(xyIndex) { + var xy = ['x', 'y']; + var wh = ['width', 'height']; + + return { + point: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var p = itemLayout[xyIndex]; + return inLineRange(p, range); + } + }, + rect: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var layoutRange = [ + itemLayout[xy[xyIndex]], + itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]] + ]; + layoutRange[1] < layoutRange[0] && layoutRange.reverse(); + return inLineRange(layoutRange[0], range) + || inLineRange(layoutRange[1], range) + || inLineRange(range[0], layoutRange) + || inLineRange(range[1], layoutRange); + } + } + }; +} + +function inLineRange(p, range) { + return range[0] <= p && p <= range[1]; +} + +function lineIntersectPolygon(lx, ly, l2x, l2y, points) { + for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) { + var p = points[i]; + if (lineIntersect(lx, ly, l2x, l2y, p[0], p[1], p2[0], p2[1])) { + return true; + } + p2 = p; + } +} + +// Code from with some fix. +// See +function lineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { + var delta = determinant(a2x - a1x, b1x - b2x, a2y - a1y, b1y - b2y); + if (nearZero(delta)) { // parallel + return false; + } + var namenda = determinant(b1x - a1x, b1x - b2x, b1y - a1y, b1y - b2y) / delta; + if (namenda < 0 || namenda > 1) { + return false; + } + var miu = determinant(a2x - a1x, b1x - a1x, a2y - a1y, b1y - a1y) / delta; + if (miu < 0 || miu > 1) { + return false; + } + return true; +} + +function nearZero(val) { + return val <= (1e-6) && val >= -(1e-6); +} + +function determinant(v1, v2, v3, v4) { + return v1 * v4 - v2 * v3; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$20 = each$1; +var indexOf$1 = indexOf; +var curry$5 = curry; + +var COORD_CONVERTS = ['dataToPoint', 'pointToData']; + +// FIXME +// how to genarialize to more coordinate systems. +var INCLUDE_FINDER_MAIN_TYPES = [ + 'grid', 'xAxis', 'yAxis', 'geo', 'graph', + 'polar', 'radiusAxis', 'angleAxis', 'bmap' +]; + +/** + * [option in constructor]: + * { + * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder. + * } + * + * + * [targetInfo]: + * + * There can be multiple axes in a single targetInfo. Consider the case + * of `grid` component, a targetInfo represents a grid which contains one or more + * cartesian and one or more axes. And consider the case of parallel system, + * which has multiple axes in a coordinate system. + * Can be { + * panelId: ..., + * coordSys: , + * coordSyses: all cartesians. + * gridModel: + * xAxes: correspond to coordSyses on index + * yAxes: correspond to coordSyses on index + * } + * or { + * panelId: ..., + * coordSys: + * coordSyses: [] + * geoModel: + * } + * + * + * [panelOpt]: + * + * Make from targetInfo. Input to BrushController. + * { + * panelId: ..., + * rect: ... + * } + * + * + * [area]: + * + * Generated by BrushController or user input. + * { + * panelId: Used to locate coordInfo directly. If user inpput, no panelId. + * brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y'). + * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder. + * range: pixel range. + * coordRange: representitive coord range (the first one of coordRanges). + * coordRanges: coord ranges, used in multiple cartesian in one grid. + * } + */ + +/** + * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid + * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]} + * @param {module:echarts/model/Global} ecModel + * @param {Object} [opt] + * @param {Array.} [opt.include] include coordinate system types. + */ +function BrushTargetManager(option, ecModel, opt) { + /** + * @private + * @type {Array.} + */ + var targetInfoList = this._targetInfoList = []; + var info = {}; + var foundCpts = parseFinder$1(ecModel, option); + + each$20(targetInfoBuilders, function (builder, type) { + if (!opt || !opt.include || indexOf$1(opt.include, type) >= 0) { + builder(foundCpts, targetInfoList, info); + } + }); +} + +var proto$2 = BrushTargetManager.prototype; + +proto$2.setOutputRanges = function (areas, ecModel) { + this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + (area.coordRanges || (area.coordRanges = [])).push(coordRange); + // area.coordRange is the first of area.coordRanges + if (!area.coordRange) { + area.coordRange = coordRange; + // In 'category' axis, coord to pixel is not reversible, so we can not + // rebuild range by coordRange accrately, which may bring trouble when + // brushing only one item. So we use __rangeOffset to rebuilding range + // by coordRange. And this it only used in brush component so it is no + // need to be adapted to coordRanges. + var result = coordConvert[area.brushType](0, coordSys, coordRange); + area.__rangeOffset = { + offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]), + xyMinMax: result.xyMinMax + }; + } + }); +}; + +proto$2.matchOutputRanges = function (areas, ecModel, cb) { + each$20(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if (targetInfo && targetInfo !== true) { + each$1( + targetInfo.coordSyses, + function (coordSys) { + var result = coordConvert[area.brushType](1, coordSys, area.range); + cb(area, result.values, coordSys, ecModel); + } + ); + } + }, this); +}; + +proto$2.setInputRanges = function (areas, ecModel) { + each$20(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if (__DEV__) { + assert$1( + !targetInfo || targetInfo === true || area.coordRange, + 'coordRange must be specified when coord index specified.' + ); + assert$1( + !targetInfo || targetInfo !== true || area.range, + 'range must be specified in global brush.' + ); + } + + area.range = area.range || []; + + // convert coordRange to global range and set panelId. + if (targetInfo && targetInfo !== true) { + area.panelId = targetInfo.panelId; + // (1) area.range shoule always be calculate from coordRange but does + // not keep its original value, for the sake of the dataZoom scenario, + // where area.coordRange remains unchanged but area.range may be changed. + // (2) Only support converting one coordRange to pixel range in brush + // component. So do not consider `coordRanges`. + // (3) About __rangeOffset, see comment above. + var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange); + var rangeOffset = area.__rangeOffset; + area.range = rangeOffset + ? diffProcessor[area.brushType]( + result.values, + rangeOffset.offset, + getScales(result.xyMinMax, rangeOffset.xyMinMax) + ) + : result.values; + } + }, this); +}; + +proto$2.makePanelOpts = function (api, getDefaultBrushType) { + return map(this._targetInfoList, function (targetInfo) { + var rect = targetInfo.getPanelRect(); + return { + panelId: targetInfo.panelId, + defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo), + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor( + rect, api, targetInfo.coordSysModel + ), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect) + }; + }); +}; + +proto$2.controlSeries = function (area, seriesModel, ecModel) { + // Check whether area is bound in coord, and series do not belong to that coord. + // If do not do this check, some brush (like lineX) will controll all axes. + var targetInfo = this.findTargetInfo(area, ecModel); + return targetInfo === true || ( + targetInfo && indexOf$1(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0 + ); +}; + +/** + * If return Object, a coord found. + * If reutrn true, global found. + * Otherwise nothing found. + * + * @param {Object} area + * @param {Array} targetInfoList + * @return {Object|boolean} + */ +proto$2.findTargetInfo = function (area, ecModel) { + var targetInfoList = this._targetInfoList; + var foundCpts = parseFinder$1(ecModel, area); + + for (var i = 0; i < targetInfoList.length; i++) { + var targetInfo = targetInfoList[i]; + var areaPanelId = area.panelId; + if (areaPanelId) { + if (targetInfo.panelId === areaPanelId) { + return targetInfo; + } + } + else { + for (var i = 0; i < targetInfoMatchers.length; i++) { + if (targetInfoMatchers[i](foundCpts, targetInfo)) { + return targetInfo; + } + } + } + } + + return true; +}; + +function formatMinMax(minMax) { + minMax[0] > minMax[1] && minMax.reverse(); + return minMax; +} + +function parseFinder$1(ecModel, option) { + return parseFinder( + ecModel, option, {includeMainTypes: INCLUDE_FINDER_MAIN_TYPES} + ); +} + +var targetInfoBuilders = { + + grid: function (foundCpts, targetInfoList) { + var xAxisModels = foundCpts.xAxisModels; + var yAxisModels = foundCpts.yAxisModels; + var gridModels = foundCpts.gridModels; + // Remove duplicated. + var gridModelMap = createHashMap(); + var xAxesHas = {}; + var yAxesHas = {}; + + if (!xAxisModels && !yAxisModels && !gridModels) { + return; + } + + each$20(xAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + }); + each$20(yAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + yAxesHas[gridModel.id] = true; + }); + each$20(gridModels, function (gridModel) { + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + yAxesHas[gridModel.id] = true; + }); + + gridModelMap.each(function (gridModel) { + var grid = gridModel.coordinateSystem; + var cartesians = []; + + each$20(grid.getCartesians(), function (cartesian, index) { + if (indexOf$1(xAxisModels, cartesian.getAxis('x').model) >= 0 + || indexOf$1(yAxisModels, cartesian.getAxis('y').model) >= 0 + ) { + cartesians.push(cartesian); + } + }); + targetInfoList.push({ + panelId: 'grid--' + gridModel.id, + gridModel: gridModel, + coordSysModel: gridModel, + // Use the first one as the representitive coordSys. + coordSys: cartesians[0], + coordSyses: cartesians, + getPanelRect: panelRectBuilder.grid, + xAxisDeclared: xAxesHas[gridModel.id], + yAxisDeclared: yAxesHas[gridModel.id] + }); + }); + }, + + geo: function (foundCpts, targetInfoList) { + each$20(foundCpts.geoModels, function (geoModel) { + var coordSys = geoModel.coordinateSystem; + targetInfoList.push({ + panelId: 'geo--' + geoModel.id, + geoModel: geoModel, + coordSysModel: geoModel, + coordSys: coordSys, + coordSyses: [coordSys], + getPanelRect: panelRectBuilder.geo + }); + }); + } +}; + +var targetInfoMatchers = [ + + // grid + function (foundCpts, targetInfo) { + var xAxisModel = foundCpts.xAxisModel; + var yAxisModel = foundCpts.yAxisModel; + var gridModel = foundCpts.gridModel; + + !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model); + !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model); + + return gridModel && gridModel === targetInfo.gridModel; + }, + + // geo + function (foundCpts, targetInfo) { + var geoModel = foundCpts.geoModel; + return geoModel && geoModel === targetInfo.geoModel; + } +]; + +var panelRectBuilder = { + + grid: function () { + // grid is not Transformable. + return this.coordSys.grid.getRect().clone(); + }, + + geo: function () { + var coordSys = this.coordSys; + var rect = coordSys.getBoundingRect().clone(); + // geo roam and zoom transform + rect.applyTransform(getTransform(coordSys)); + return rect; + } +}; + +var coordConvert = { + + lineX: curry$5(axisConvert, 0), + + lineY: curry$5(axisConvert, 1), + + rect: function (to, coordSys, rangeOrCoordRange) { + var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]); + var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]); + var values = [ + formatMinMax([xminymin[0], xmaxymax[0]]), + formatMinMax([xminymin[1], xmaxymax[1]]) + ]; + return {values: values, xyMinMax: values}; + }, + + polygon: function (to, coordSys, rangeOrCoordRange) { + var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]]; + var values = map(rangeOrCoordRange, function (item) { + var p = coordSys[COORD_CONVERTS[to]](item); + xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]); + xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]); + xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]); + xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]); + return p; + }); + return {values: values, xyMinMax: xyMinMax}; + } +}; + +function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) { + if (__DEV__) { + assert$1( + coordSys.type === 'cartesian2d', + 'lineX/lineY brush is available only in cartesian2d.' + ); + } + + var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]); + var values = formatMinMax(map([0, 1], function (i) { + return to + ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i])) + : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i])); + })); + var xyMinMax = []; + xyMinMax[axisNameIndex] = values; + xyMinMax[1 - axisNameIndex] = [NaN, NaN]; + + return {values: values, xyMinMax: xyMinMax}; +} + +var diffProcessor = { + lineX: curry$5(axisDiffProcessor, 0), + + lineY: curry$5(axisDiffProcessor, 1), + + rect: function (values, refer, scales) { + return [ + [values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], + [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]] + ]; + }, + + polygon: function (values, refer, scales) { + return map(values, function (item, idx) { + return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]]; + }); + } +}; + +function axisDiffProcessor(axisNameIndex, values, refer, scales) { + return [ + values[0] - scales[axisNameIndex] * refer[0], + values[1] - scales[axisNameIndex] * refer[1] + ]; +} + +// We have to process scale caused by dataZoom manually, +// although it might be not accurate. +function getScales(xyMinMaxCurr, xyMinMaxOrigin) { + var sizeCurr = getSize(xyMinMaxCurr); + var sizeOrigin = getSize(xyMinMaxOrigin); + var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]]; + isNaN(scales[0]) && (scales[0] = 1); + isNaN(scales[1]) && (scales[1] = 1); + return scales; +} + +function getSize(xyMinMax) { + return xyMinMax + ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] + : [NaN, NaN]; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var STATE_LIST = ['inBrush', 'outOfBrush']; +var DISPATCH_METHOD = '__ecBrushSelect'; +var DISPATCH_FLAG = '__ecInBrushSelectEvent'; +var PRIORITY_BRUSH = PRIORITY.VISUAL.BRUSH; + +/** + * Layout for visual, the priority higher than other layout, and before brush visual. + */ +registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) { + ecModel.eachComponent({mainType: 'brush'}, function (brushModel) { + + payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption( + payload.key === 'brush' ? payload.brushOption : {brushType: false} + ); + + var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel); + + brushTargetManager.setInputRanges(brushModel.areas, ecModel); + }); +}); + +/** + * Register the visual encoding if this modules required. + */ +registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) { + + var brushSelected = []; + var throttleType; + var throttleDelay; + + ecModel.eachComponent({mainType: 'brush'}, function (brushModel, brushIndex) { + + var thisBrushSelected = { + brushId: brushModel.id, + brushIndex: brushIndex, + brushName: brushModel.name, + areas: clone(brushModel.areas), + selected: [] + }; + // Every brush component exists in event params, convenient + // for user to find by index. + brushSelected.push(thisBrushSelected); + + var brushOption = brushModel.option; + var brushLink = brushOption.brushLink; + var linkedSeriesMap = []; + var selectedDataIndexForLink = []; + var rangeInfoBySeries = []; + var hasBrushExists = 0; + + if (!brushIndex) { // Only the first throttle setting works. + throttleType = brushOption.throttleType; + throttleDelay = brushOption.throttleDelay; + } + + // Add boundingRect and selectors to range. + var areas = map(brushModel.areas, function (area) { + return bindSelector( + defaults( + {boundingRect: boundingRectBuilders[area.brushType](area)}, + area + ) + ); + }); + + var visualMappings = createVisualMappings( + brushModel.option, STATE_LIST, function (mappingOption) { + mappingOption.mappingMethod = 'fixed'; + } + ); + + isArray(brushLink) && each$1(brushLink, function (seriesIndex) { + linkedSeriesMap[seriesIndex] = 1; + }); + + function linkOthers(seriesIndex) { + return brushLink === 'all' || linkedSeriesMap[seriesIndex]; + } + + // If no supported brush or no brush on the series, + // all visuals should be in original state. + function brushed(rangeInfoList) { + return !!rangeInfoList.length; + } + + /** + * Logic for each series: (If the logic has to be modified one day, do it carefully!) + * + * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers ) => StepA: ┬record, ┬ StepB: ┬visualByRecord. + * !brushed┘ ├hasBrushExist ┤ └nothing,┘ ├visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( !brushed && ┬hasBrushExist ┬ && linkOthers ) => StepA: nothing, StepB: ┬visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( brushed ┬ && !linkOthers ) => StepA: nothing, StepB: ┬visualByCheck. + * !brushed┘ └nothing. + * ( !brushed && !linkOthers ) => StepA: nothing, StepB: nothing. + */ + + // Step A + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var rangeInfoList = rangeInfoBySeries[seriesIndex] = []; + + seriesModel.subType === 'parallel' + ? stepAParallel(seriesModel, seriesIndex, rangeInfoList) + : stepAOthers(seriesModel, seriesIndex, rangeInfoList); + }); + + function stepAParallel(seriesModel, seriesIndex) { + var coordSys = seriesModel.coordinateSystem; + hasBrushExists |= coordSys.hasAxisBrushed(); + + linkOthers(seriesIndex) && coordSys.eachActiveState( + seriesModel.getData(), + function (activeState, dataIndex) { + activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1); + } + ); + } + + function stepAOthers(seriesModel, seriesIndex, rangeInfoList) { + var selectorsByBrushType = getSelectorsByBrushType(seriesModel); + if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) { + return; + } + + each$1(areas, function (area) { + selectorsByBrushType[area.brushType] + && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) + && rangeInfoList.push(area); + hasBrushExists |= brushed(rangeInfoList); + }); + + if (linkOthers(seriesIndex) && brushed(rangeInfoList)) { + var data = seriesModel.getData(); + data.each(function (dataIndex) { + if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) { + selectedDataIndexForLink[dataIndex] = 1; + } + }); + } + } + + // Step B + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var seriesBrushSelected = { + seriesId: seriesModel.id, + seriesIndex: seriesIndex, + seriesName: seriesModel.name, + dataIndex: [] + }; + // Every series exists in event params, convenient + // for user to find series by seriesIndex. + thisBrushSelected.selected.push(seriesBrushSelected); + + var selectorsByBrushType = getSelectorsByBrushType(seriesModel); + var rangeInfoList = rangeInfoBySeries[seriesIndex]; + + var data = seriesModel.getData(); + var getValueState = linkOthers(seriesIndex) + ? function (dataIndex) { + return selectedDataIndexForLink[dataIndex] + ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') + : 'outOfBrush'; + } + : function (dataIndex) { + return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) + ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') + : 'outOfBrush'; + }; + + // If no supported brush or no brush, all visuals are in original state. + (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) + && applyVisual( + STATE_LIST, visualMappings, data, getValueState + ); + }); + + }); + + dispatchAction(api, throttleType, throttleDelay, brushSelected, payload); +}); + +function dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) { + // This event will not be triggered when `setOpion`, otherwise dead lock may + // triggered when do `setOption` in event listener, which we do not find + // satisfactory way to solve yet. Some considered resolutions: + // (a) Diff with prevoius selected data ant only trigger event when changed. + // But store previous data and diff precisely (i.e., not only by dataIndex, but + // also detect value changes in selected data) might bring complexity or fragility. + // (b) Use spectial param like `silent` to suppress event triggering. + // But such kind of volatile param may be weird in `setOption`. + if (!payload) { + return; + } + + var zr = api.getZr(); + if (zr[DISPATCH_FLAG]) { + return; + } + + if (!zr[DISPATCH_METHOD]) { + zr[DISPATCH_METHOD] = doDispatch; + } + + var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType); + + fn(api, brushSelected); +} + +function doDispatch(api, brushSelected) { + if (!api.isDisposed()) { + var zr = api.getZr(); + zr[DISPATCH_FLAG] = true; + api.dispatchAction({ + type: 'brushSelect', + batch: brushSelected + }); + zr[DISPATCH_FLAG] = false; + } +} + +function checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) { + for (var i = 0, len = rangeInfoList.length; i < len; i++) { + var area = rangeInfoList[i]; + if (selectorsByBrushType[area.brushType]( + dataIndex, data, area.selectors, area + )) { + return true; + } + } +} + +function getSelectorsByBrushType(seriesModel) { + var brushSelector = seriesModel.brushSelector; + if (isString(brushSelector)) { + var sels = []; + each$1(selector, function (selectorsByElementType, brushType) { + sels[brushType] = function (dataIndex, data, selectors, area) { + var itemLayout = data.getItemLayout(dataIndex); + return selectorsByElementType[brushSelector](itemLayout, selectors, area); + }; + }); + return sels; + } + else if (isFunction$1(brushSelector)) { + var bSelector = {}; + each$1(selector, function (sel, brushType) { + bSelector[brushType] = brushSelector; + }); + return bSelector; + } + return brushSelector; +} + +function brushModelNotControll(brushModel, seriesIndex) { + var seriesIndices = brushModel.option.seriesIndex; + return seriesIndices != null + && seriesIndices !== 'all' + && ( + isArray(seriesIndices) + ? indexOf(seriesIndices, seriesIndex) < 0 + : seriesIndex !== seriesIndices + ); +} + +function bindSelector(area) { + var selectors = area.selectors = {}; + each$1(selector[area.brushType], function (selFn, elType) { + // Do not use function binding or curry for performance. + selectors[elType] = function (itemLayout) { + return selFn(itemLayout, selectors, area); + }; + }); + return area; +} + +var boundingRectBuilders = { + + lineX: noop, + + lineY: noop, + + rect: function (area) { + return getBoundingRectFromMinMax(area.range); + }, + + polygon: function (area) { + var minMax; + var range = area.range; + + for (var i = 0, len = range.length; i < len; i++) { + minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]]; + var rg = range[i]; + rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]); + rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]); + rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]); + rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]); + } + + return minMax && getBoundingRectFromMinMax(minMax); + } +}; + +function getBoundingRectFromMinMax(minMax) { + return new BoundingRect( + minMax[0][0], + minMax[1][0], + minMax[0][1] - minMax[0][0], + minMax[1][1] - minMax[1][0] + ); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd']; + +var BrushModel = extendComponentModel({ + + type: 'brush', + + dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'], + + /** + * @protected + */ + defaultOption: { + // inBrush: null, + // outOfBrush: null, + toolbox: null, // Default value see preprocessor. + brushLink: null, // Series indices array, broadcast using dataIndex. + // or 'all', which means all series. 'none' or null means no series. + seriesIndex: 'all', // seriesIndex array, specify series controlled by this brush component. + geoIndex: null, // + xAxisIndex: null, + yAxisIndex: null, + + brushType: 'rect', // Default brushType, see BrushController. + brushMode: 'single', // Default brushMode, 'single' or 'multiple' + transformable: true, // Default transformable. + brushStyle: { // Default brushStyle + borderWidth: 1, + color: 'rgba(120,140,180,0.3)', + borderColor: 'rgba(120,140,180,0.8)' + }, + + throttleType: 'fixRate', // Throttle in brushSelected event. 'fixRate' or 'debounce'. + // If null, no throttle. Valid only in the first brush component + throttleDelay: 0, // Unit: ms, 0 means every event will be triggered. + + // FIXME + // 试验效果 + removeOnClick: true, + + z: 10000 + }, + + /** + * @readOnly + * @type {Array.} + */ + areas: [], + + /** + * Current activated brush type. + * If null, brush is inactived. + * see module:echarts/component/helper/BrushController + * @readOnly + * @type {string} + */ + brushType: null, + + /** + * Current brush opt. + * see module:echarts/component/helper/BrushController + * @readOnly + * @type {Object} + */ + brushOption: {}, + + /** + * @readOnly + * @type {Array.} + */ + coordInfoList: [], + + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + + !isInit && replaceVisualOption( + thisOption, newOption, ['inBrush', 'outOfBrush'] + ); + + var inBrush = thisOption.inBrush = thisOption.inBrush || {}; + // Always give default visual, consider setOption at the second time. + thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR}; + + if (!inBrush.hasOwnProperty('liftZ')) { + // Bigger than the highlight z lift, otherwise it will + // be effected by the highlight z when brush. + inBrush.liftZ = 5; + } + }, + + /** + * If ranges is null/undefined, range state remain. + * + * @param {Array.} [ranges] + */ + setAreas: function (areas) { + if (__DEV__) { + assert$1(isArray(areas)); + each$1(areas, function (area) { + assert$1(area.brushType, 'Illegal areas'); + }); + } + + // If ranges is null/undefined, range state remain. + // This helps user to dispatchAction({type: 'brush'}) with no areas + // set but just want to get the current brush select info from a `brush` event. + if (!areas) { + return; + } + + this.areas = map(areas, function (area) { + return generateBrushOption(this.option, area); + }, this); + }, + + /** + * see module:echarts/component/helper/BrushController + * @param {Object} brushOption + */ + setBrushOption: function (brushOption) { + this.brushOption = generateBrushOption(this.option, brushOption); + this.brushType = this.brushOption.brushType; + } + +}); + +function generateBrushOption(option, brushOption) { + return merge( + { + brushType: option.brushType, + brushMode: option.brushMode, + transformable: option.transformable, + brushStyle: new Model(option.brushStyle).getItemStyle(), + removeOnClick: option.removeOnClick, + z: option.z + }, + brushOption, + true + ); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentView({ + + type: 'brush', + + init: function (ecModel, api) { + + /** + * @readOnly + * @type {module:echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @readOnly + * @type {module:echarts/ExtensionAPI} + */ + this.api = api; + + /** + * @readOnly + * @type {module:echarts/component/brush/BrushModel} + */ + this.model; + + /** + * @private + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)) + .mount(); + }, + + /** + * @override + */ + render: function (brushModel) { + this.model = brushModel; + return updateController.apply(this, arguments); + }, + + /** + * @override + */ + updateTransform: updateController, + + /** + * @override + */ + updateView: updateController, + + // /** + // * @override + // */ + // updateLayout: updateController, + + // /** + // * @override + // */ + // updateVisual: updateController, + + /** + * @override + */ + dispose: function () { + this._brushController.dispose(); + }, + + /** + * @private + */ + _onBrush: function (areas, opt) { + var modelId = this.model.id; + + this.model.brushTargetManager.setOutputRanges(areas, this.ecModel); + + // Action is not dispatched on drag end, because the drag end + // emits the same params with the last drag move event, and + // may have some delay when using touch pad, which makes + // animation not smooth (when using debounce). + (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({ + type: 'brush', + brushId: modelId, + areas: clone(areas), + $from: modelId + }); + } + +}); + +function updateController(brushModel, ecModel, api, payload) { + // Do not update controller when drawing. + (!payload || payload.$from !== brushModel.id) && this._brushController + .setPanels(brushModel.brushTargetManager.makePanelOpts(api)) + .enableBrush(brushModel.brushOption) + .updateCovers(brushModel.areas.slice()); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * payload: { + * brushIndex: number, or, + * brushId: string, or, + * brushName: string, + * globalRanges: Array + * } + */ +registerAction( + {type: 'brush', event: 'brush' /*, update: 'updateView' */}, + function (payload, ecModel) { + ecModel.eachComponent({mainType: 'brush', query: payload}, function (brushModel) { + brushModel.setAreas(payload.areas); + }); + } +); + +/** + * payload: { + * brushComponents: [ + * { + * brushId, + * brushIndex, + * brushName, + * series: [ + * { + * seriesId, + * seriesIndex, + * seriesName, + * rawIndices: [21, 34, ...] + * }, + * ... + * ] + * }, + * ... + * ] + * } + */ +registerAction( + {type: 'brushSelect', event: 'brushSelected', update: 'none'}, + function () {} +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +var features = {}; + +function register$1(name, ctor) { + features[name] = ctor; +} + +function get$1(name) { + return features[name]; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var brushLang = lang.toolbox.brush; + +function Brush(model, ecModel, api) { + this.model = model; + this.ecModel = ecModel; + this.api = api; + + /** + * @private + * @type {string} + */ + this._brushType; + + /** + * @private + * @type {string} + */ + this._brushMode; +} + +Brush.defaultOption = { + show: true, + type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'], + icon: { + /* eslint-disable */ + rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line + polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line + lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line + lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line + keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line + clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line + /* eslint-enable */ + }, + // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear` + title: clone(brushLang.title) +}; + +var proto$3 = Brush.prototype; + +// proto.updateLayout = function (featureModel, ecModel, api) { +/* eslint-disable */ +proto$3.render = +/* eslint-enable */ +proto$3.updateView = function (featureModel, ecModel, api) { + var brushType; + var brushMode; + var isBrushed; + + ecModel.eachComponent({mainType: 'brush'}, function (brushModel) { + brushType = brushModel.brushType; + brushMode = brushModel.brushOption.brushMode || 'single'; + isBrushed |= brushModel.areas.length; + }); + this._brushType = brushType; + this._brushMode = brushMode; + + each$1(featureModel.get('type', true), function (type) { + featureModel.setIconStatus( + type, + ( + type === 'keep' + ? brushMode === 'multiple' + : type === 'clear' + ? isBrushed + : type === brushType + ) ? 'emphasis' : 'normal' + ); + }); +}; + +proto$3.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon', true); + var icons = {}; + each$1(model.get('type', true), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; +}; + +proto$3.onclick = function (ecModel, api, type) { + var brushType = this._brushType; + var brushMode = this._brushMode; + + if (type === 'clear') { + // Trigger parallel action firstly + api.dispatchAction({ + type: 'axisAreaSelect', + intervals: [] + }); + + api.dispatchAction({ + type: 'brush', + command: 'clear', + // Clear all areas of all brush components. + areas: [] + }); + } + else { + api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'brush', + brushOption: { + brushType: type === 'keep' + ? brushType + : (brushType === type ? false : type), + brushMode: type === 'keep' + ? (brushMode === 'multiple' ? 'single' : 'multiple') + : brushMode + } + }); + } +}; + +register$1('brush', Brush); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Brush component entry + */ + +registerPreprocessor(preprocessor$1); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// (24*60*60*1000) +var PROXIMATE_ONE_DAY = 86400000; + +/** + * Calendar + * + * @constructor + * + * @param {Object} calendarModel calendarModel + * @param {Object} ecModel ecModel + * @param {Object} api api + */ +function Calendar(calendarModel, ecModel, api) { + this._model = calendarModel; +} + +Calendar.prototype = { + + constructor: Calendar, + + type: 'calendar', + + dimensions: ['time', 'value'], + + // Required in createListFromData + getDimensionsInfo: function () { + return [{name: 'time', type: 'time'}, 'value']; + }, + + getRangeInfo: function () { + return this._rangeInfo; + }, + + getModel: function () { + return this._model; + }, + + getRect: function () { + return this._rect; + }, + + getCellWidth: function () { + return this._sw; + }, + + getCellHeight: function () { + return this._sh; + }, + + getOrient: function () { + return this._orient; + }, + + /** + * getFirstDayOfWeek + * + * @example + * 0 : start at Sunday + * 1 : start at Monday + * + * @return {number} + */ + getFirstDayOfWeek: function () { + return this._firstDayOfWeek; + }, + + /** + * get date info + * + * @param {string|number} date date + * @return {Object} + * { + * y: string, local full year, eg., '1940', + * m: string, local month, from '01' ot '12', + * d: string, local date, from '01' to '31' (if exists), + * day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6, + * time: timestamp, + * formatedDate: string, yyyy-MM-dd, + * date: original date object. + * } + */ + getDateInfo: function (date) { + + date = parseDate(date); + + var y = date.getFullYear(); + + var m = date.getMonth() + 1; + m = m < 10 ? '0' + m : m; + + var d = date.getDate(); + d = d < 10 ? '0' + d : d; + + var day = date.getDay(); + + day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7); + + return { + y: y, + m: m, + d: d, + day: day, + time: date.getTime(), + formatedDate: y + '-' + m + '-' + d, + date: date + }; + }, + + getNextNDay: function (date, n) { + n = n || 0; + if (n === 0) { + return this.getDateInfo(date); + } + + date = new Date(this.getDateInfo(date).time); + date.setDate(date.getDate() + n); + + return this.getDateInfo(date); + }, + + update: function (ecModel, api) { + + this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay'); + this._orient = this._model.get('orient'); + this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0; + + + this._rangeInfo = this._getRangeInfo(this._initRangeOption()); + var weeks = this._rangeInfo.weeks || 1; + var whNames = ['width', 'height']; + var cellSize = this._model.get('cellSize').slice(); + var layoutParams = this._model.getBoxLayoutParams(); + var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks]; + + each$1([0, 1], function (idx) { + if (cellSizeSpecified(cellSize, idx)) { + layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx]; + } + }); + + var whGlobal = { + width: api.getWidth(), + height: api.getHeight() + }; + var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal); + + each$1([0, 1], function (idx) { + if (!cellSizeSpecified(cellSize, idx)) { + cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx]; + } + }); + + function cellSizeSpecified(cellSize, idx) { + return cellSize[idx] != null && cellSize[idx] !== 'auto'; + } + + this._sw = cellSize[0]; + this._sh = cellSize[1]; + }, + + + /** + * Convert a time data(time, value) item to (x, y) point. + * + * @override + * @param {Array|number} data data + * @param {boolean} [clamp=true] out of range + * @return {Array} point + */ + dataToPoint: function (data, clamp) { + isArray(data) && (data = data[0]); + clamp == null && (clamp = true); + + var dayInfo = this.getDateInfo(data); + var range = this._rangeInfo; + var date = dayInfo.formatedDate; + + // if not in range return [NaN, NaN] + if (clamp && !( + dayInfo.time >= range.start.time + && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY + )) { + return [NaN, NaN]; + } + + var week = dayInfo.day; + var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek; + + if (this._orient === 'vertical') { + return [ + this._rect.x + week * this._sw + this._sw / 2, + this._rect.y + nthWeek * this._sh + this._sh / 2 + ]; + + } + + return [ + this._rect.x + nthWeek * this._sw + this._sw / 2, + this._rect.y + week * this._sh + this._sh / 2 + ]; + + }, + + /** + * Convert a (x, y) point to time data + * + * @override + * @param {string} point point + * @return {string} data + */ + pointToData: function (point) { + + var date = this.pointToDate(point); + + return date && date.time; + }, + + /** + * Convert a time date item to (x, y) four point. + * + * @param {Array} data date[0] is date + * @param {boolean} [clamp=true] out of range + * @return {Object} point + */ + dataToRect: function (data, clamp) { + var point = this.dataToPoint(data, clamp); + + return { + contentShape: { + x: point[0] - (this._sw - this._lineWidth) / 2, + y: point[1] - (this._sh - this._lineWidth) / 2, + width: this._sw - this._lineWidth, + height: this._sh - this._lineWidth + }, + + center: point, + + tl: [ + point[0] - this._sw / 2, + point[1] - this._sh / 2 + ], + + tr: [ + point[0] + this._sw / 2, + point[1] - this._sh / 2 + ], + + br: [ + point[0] + this._sw / 2, + point[1] + this._sh / 2 + ], + + bl: [ + point[0] - this._sw / 2, + point[1] + this._sh / 2 + ] + + }; + }, + + /** + * Convert a (x, y) point to time date + * + * @param {Array} point point + * @return {Object} date + */ + pointToDate: function (point) { + var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1; + var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1; + var range = this._rangeInfo.range; + + if (this._orient === 'vertical') { + return this._getDateByWeeksAndDay(nthY, nthX - 1, range); + } + + return this._getDateByWeeksAndDay(nthX, nthY - 1, range); + }, + + /** + * @inheritDoc + */ + convertToPixel: curry(doConvert$2, 'dataToPoint'), + + /** + * @inheritDoc + */ + convertFromPixel: curry(doConvert$2, 'pointToData'), + + /** + * initRange + * + * @private + * @return {Array} [start, end] + */ + _initRangeOption: function () { + var range = this._model.get('range'); + + var rg = range; + + if (isArray(rg) && rg.length === 1) { + rg = rg[0]; + } + + if (/^\d{4}$/.test(rg)) { + range = [rg + '-01-01', rg + '-12-31']; + } + + if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) { + + var start = this.getDateInfo(rg); + var firstDay = start.date; + firstDay.setMonth(firstDay.getMonth() + 1); + + var end = this.getNextNDay(firstDay, -1); + range = [start.formatedDate, end.formatedDate]; + } + + if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) { + range = [rg, rg]; + } + + var tmp = this._getRangeInfo(range); + + if (tmp.start.time > tmp.end.time) { + range.reverse(); + } + + return range; + }, + + /** + * range info + * + * @private + * @param {Array} range range ['2017-01-01', '2017-07-08'] + * If range[0] > range[1], they will not be reversed. + * @return {Object} obj + */ + _getRangeInfo: function (range) { + range = [ + this.getDateInfo(range[0]), + this.getDateInfo(range[1]) + ]; + + var reversed; + if (range[0].time > range[1].time) { + reversed = true; + range.reverse(); + } + + var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY) + - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1; + + // Consider case: + // Firstly set system timezone as "Time Zone: America/Toronto", + // ``` + // var first = new Date(1478412000000 - 3600 * 1000 * 2.5); + // var second = new Date(1478412000000); + // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1; + // ``` + // will get wrong result because of DST. So we should fix it. + var date = new Date(range[0].time); + var startDateNum = date.getDate(); + var endDateNum = range[1].date.getDate(); + date.setDate(startDateNum + allDay - 1); + // The bias can not over a month, so just compare date. + if (date.getDate() !== endDateNum) { + var sign = date.getTime() - range[1].time > 0 ? 1 : -1; + while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) { + allDay -= sign; + date.setDate(startDateNum + allDay - 1); + } + } + + var weeks = Math.floor((allDay + range[0].day + 6) / 7); + var nthWeek = reversed ? -weeks + 1 : weeks - 1; + + reversed && range.reverse(); + + return { + range: [range[0].formatedDate, range[1].formatedDate], + start: range[0], + end: range[1], + allDay: allDay, + weeks: weeks, + // From 0. + nthWeek: nthWeek, + fweek: range[0].day, + lweek: range[1].day + }; + }, + + /** + * get date by nthWeeks and week day in range + * + * @private + * @param {number} nthWeek the week + * @param {number} day the week day + * @param {Array} range [d1, d2] + * @return {Object} + */ + _getDateByWeeksAndDay: function (nthWeek, day, range) { + var rangeInfo = this._getRangeInfo(range); + + if (nthWeek > rangeInfo.weeks + || (nthWeek === 0 && day < rangeInfo.fweek) + || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) + ) { + return false; + } + + var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day; + var date = new Date(rangeInfo.start.time); + date.setDate(rangeInfo.start.d + nthDay); + + return this.getDateInfo(date); + } +}; + +Calendar.dimensions = Calendar.prototype.dimensions; + +Calendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo; + +Calendar.create = function (ecModel, api) { + var calendarList = []; + + ecModel.eachComponent('calendar', function (calendarModel) { + var calendar = new Calendar(calendarModel, ecModel, api); + calendarList.push(calendar); + calendarModel.coordinateSystem = calendar; + }); + + ecModel.eachSeries(function (calendarSeries) { + if (calendarSeries.get('coordinateSystem') === 'calendar') { + // Inject coordinate system + calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0]; + } + }); + return calendarList; +}; + +function doConvert$2(methodName, ecModel, finder, value) { + var calendarModel = finder.calendarModel; + var seriesModel = finder.seriesModel; + + var coordSys = calendarModel + ? calendarModel.coordinateSystem + : seriesModel + ? seriesModel.coordinateSystem + : null; + + return coordSys === this ? coordSys[methodName](value) : null; +} + +CoordinateSystemManager.register('calendar', Calendar); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var CalendarModel = ComponentModel.extend({ + + type: 'calendar', + + /** + * @type {module:echarts/coord/calendar/Calendar} + */ + coordinateSystem: null, + + defaultOption: { + zlevel: 0, + z: 2, + left: 80, + top: 60, + + cellSize: 20, + + // horizontal vertical + orient: 'horizontal', + + // month separate line style + splitLine: { + show: true, + lineStyle: { + color: '#000', + width: 1, + type: 'solid' + } + }, + + // rect style temporarily unused emphasis + itemStyle: { + color: '#fff', + borderWidth: 1, + borderColor: '#ccc' + }, + + // week text style + dayLabel: { + show: true, + + // a week first day + firstDay: 0, + + // start end + position: 'start', + margin: '50%', // 50% of cellSize + nameMap: 'en', + color: '#000' + }, + + // month text style + monthLabel: { + show: true, + + // start end + position: 'start', + margin: 5, + + // center or left + align: 'center', + + // cn en [] + nameMap: 'en', + formatter: null, + color: '#000' + }, + + // year text style + yearLabel: { + show: true, + + // top bottom left right + position: null, + margin: 30, + formatter: null, + color: '#ccc', + fontFamily: 'sans-serif', + fontWeight: 'bolder', + fontSize: 20 + } + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel, extraOpt) { + var inputPositionParams = getLayoutParams(option); + + CalendarModel.superApply(this, 'init', arguments); + + mergeAndNormalizeLayoutParams$1(option, inputPositionParams); + }, + + /** + * @override + */ + mergeOption: function (option, extraOpt) { + CalendarModel.superApply(this, 'mergeOption', arguments); + + mergeAndNormalizeLayoutParams$1(this.option, option); + } +}); + +function mergeAndNormalizeLayoutParams$1(target, raw) { + // Normalize cellSize + var cellSize = target.cellSize; + + if (!isArray(cellSize)) { + cellSize = target.cellSize = [cellSize, cellSize]; + } + else if (cellSize.length === 1) { + cellSize[1] = cellSize[0]; + } + + var ignoreSize = map([0, 1], function (hvIdx) { + // If user have set `width` or both `left` and `right`, cellSize + // will be automatically set to 'auto', otherwise the default + // setting of cellSize will make `width` setting not work. + if (sizeCalculable(raw, hvIdx)) { + cellSize[hvIdx] = 'auto'; + } + return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto'; + }); + + mergeLayoutParam(target, raw, { + type: 'box', ignoreSize: ignoreSize + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var MONTH_TEXT = { + EN: [ + 'Jan', 'Feb', 'Mar', + 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec' + ], + CN: [ + '一月', '二月', '三月', + '四月', '五月', '六月', + '七月', '八月', '九月', + '十月', '十一月', '十二月' + ] +}; + +var WEEK_TEXT = { + EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + CN: ['日', '一', '二', '三', '四', '五', '六'] +}; + +extendComponentView({ + + type: 'calendar', + + /** + * top/left line points + * @private + */ + _tlpoints: null, + + /** + * bottom/right line points + * @private + */ + _blpoints: null, + + /** + * first day of month + * @private + */ + _firstDayOfMonth: null, + + /** + * first day point of month + * @private + */ + _firstDayPoints: null, + + render: function (calendarModel, ecModel, api) { + + var group = this.group; + + group.removeAll(); + + var coordSys = calendarModel.coordinateSystem; + + // range info + var rangeData = coordSys.getRangeInfo(); + var orient = coordSys.getOrient(); + + this._renderDayRect(calendarModel, rangeData, group); + + // _renderLines must be called prior to following function + this._renderLines(calendarModel, rangeData, orient, group); + + this._renderYearText(calendarModel, rangeData, orient, group); + + this._renderMonthText(calendarModel, orient, group); + + this._renderWeekText(calendarModel, rangeData, orient, group); + }, + + // render day rect + _renderDayRect: function (calendarModel, rangeData, group) { + var coordSys = calendarModel.coordinateSystem; + var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle(); + var sw = coordSys.getCellWidth(); + var sh = coordSys.getCellHeight(); + + for (var i = rangeData.start.time; + i <= rangeData.end.time; + i = coordSys.getNextNDay(i, 1).time + ) { + + var point = coordSys.dataToRect([i], false).tl; + + // every rect + var rect = new Rect({ + shape: { + x: point[0], + y: point[1], + width: sw, + height: sh + }, + cursor: 'default', + style: itemRectStyleModel + }); + + group.add(rect); + } + + }, + + // render separate line + _renderLines: function (calendarModel, rangeData, orient, group) { + + var self = this; + + var coordSys = calendarModel.coordinateSystem; + + var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle(); + var show = calendarModel.get('splitLine.show'); + + var lineWidth = lineStyleModel.lineWidth; + + this._tlpoints = []; + this._blpoints = []; + this._firstDayOfMonth = []; + this._firstDayPoints = []; + + + var firstDay = rangeData.start; + + for (var i = 0; firstDay.time <= rangeData.end.time; i++) { + addPoints(firstDay.formatedDate); + + if (i === 0) { + firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m); + } + + var date = firstDay.date; + date.setMonth(date.getMonth() + 1); + firstDay = coordSys.getDateInfo(date); + } + + addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate); + + function addPoints(date) { + + self._firstDayOfMonth.push(coordSys.getDateInfo(date)); + self._firstDayPoints.push(coordSys.dataToRect([date], false).tl); + + var points = self._getLinePointsOfOneWeek(calendarModel, date, orient); + + self._tlpoints.push(points[0]); + self._blpoints.push(points[points.length - 1]); + + show && self._drawSplitline(points, lineStyleModel, group); + } + + + // render top/left line + show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); + + // render bottom/right line + show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group); + + }, + + // get points at both ends + _getEdgesPoints: function (points, lineWidth, orient) { + var rs = [points[0].slice(), points[points.length - 1].slice()]; + var idx = orient === 'horizontal' ? 0 : 1; + + // both ends of the line are extend half lineWidth + rs[0][idx] = rs[0][idx] - lineWidth / 2; + rs[1][idx] = rs[1][idx] + lineWidth / 2; + + return rs; + }, + + // render split line + _drawSplitline: function (points, lineStyleModel, group) { + + var poyline = new Polyline({ + z2: 20, + shape: { + points: points + }, + style: lineStyleModel + }); + + group.add(poyline); + }, + + // render month line of one week points + _getLinePointsOfOneWeek: function (calendarModel, date, orient) { + + var coordSys = calendarModel.coordinateSystem; + date = coordSys.getDateInfo(date); + + var points = []; + + for (var i = 0; i < 7; i++) { + + var tmpD = coordSys.getNextNDay(date.time, i); + var point = coordSys.dataToRect([tmpD.time], false); + + points[2 * tmpD.day] = point.tl; + points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr']; + } + + return points; + + }, + + _formatterLabel: function (formatter, params) { + + if (typeof formatter === 'string' && formatter) { + return formatTplSimple(formatter, params); + } + + if (typeof formatter === 'function') { + return formatter(params); + } + + return params.nameMap; + + }, + + _yearTextPositionControl: function (textEl, point, orient, position, margin) { + + point = point.slice(); + var aligns = ['center', 'bottom']; + + if (position === 'bottom') { + point[1] += margin; + aligns = ['center', 'top']; + } + else if (position === 'left') { + point[0] -= margin; + } + else if (position === 'right') { + point[0] += margin; + aligns = ['center', 'top']; + } + else { // top + point[1] -= margin; + } + + var rotate = 0; + if (position === 'left' || position === 'right') { + rotate = Math.PI / 2; + } + + return { + rotation: rotate, + position: point, + style: { + textAlign: aligns[0], + textVerticalAlign: aligns[1] + } + }; + }, + + // render year + _renderYearText: function (calendarModel, rangeData, orient, group) { + var yearLabel = calendarModel.getModel('yearLabel'); + + if (!yearLabel.get('show')) { + return; + } + + var margin = yearLabel.get('margin'); + var pos = yearLabel.get('position'); + + if (!pos) { + pos = orient !== 'horizontal' ? 'top' : 'left'; + } + + var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]]; + var xc = (points[0][0] + points[1][0]) / 2; + var yc = (points[0][1] + points[1][1]) / 2; + + var idx = orient === 'horizontal' ? 0 : 1; + + var posPoints = { + top: [xc, points[idx][1]], + bottom: [xc, points[1 - idx][1]], + left: [points[1 - idx][0], yc], + right: [points[idx][0], yc] + }; + + var name = rangeData.start.y; + + if (+rangeData.end.y > +rangeData.start.y) { + name = name + '-' + rangeData.end.y; + } + + var formatter = yearLabel.get('formatter'); + + var params = { + start: rangeData.start.y, + end: rangeData.end.y, + nameMap: name + }; + + var content = this._formatterLabel(formatter, params); + + var yearText = new Text({z2: 30}); + setTextStyle(yearText.style, yearLabel, {text: content}), + yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin)); + + group.add(yearText); + }, + + _monthTextPositionControl: function (point, isCenter, orient, position, margin) { + var align = 'left'; + var vAlign = 'top'; + var x = point[0]; + var y = point[1]; + + if (orient === 'horizontal') { + y = y + margin; + + if (isCenter) { + align = 'center'; + } + + if (position === 'start') { + vAlign = 'bottom'; + } + } + else { + x = x + margin; + + if (isCenter) { + vAlign = 'middle'; + } + + if (position === 'start') { + align = 'right'; + } + } + + return { + x: x, + y: y, + textAlign: align, + textVerticalAlign: vAlign + }; + }, + + // render month and year text + _renderMonthText: function (calendarModel, orient, group) { + var monthLabel = calendarModel.getModel('monthLabel'); + + if (!monthLabel.get('show')) { + return; + } + + var nameMap = monthLabel.get('nameMap'); + var margin = monthLabel.get('margin'); + var pos = monthLabel.get('position'); + var align = monthLabel.get('align'); + + var termPoints = [this._tlpoints, this._blpoints]; + + if (isString(nameMap)) { + nameMap = MONTH_TEXT[nameMap.toUpperCase()] || []; + } + + var idx = pos === 'start' ? 0 : 1; + var axis = orient === 'horizontal' ? 0 : 1; + margin = pos === 'start' ? -margin : margin; + var isCenter = (align === 'center'); + + for (var i = 0; i < termPoints[idx].length - 1; i++) { + + var tmp = termPoints[idx][i].slice(); + var firstDay = this._firstDayOfMonth[i]; + + if (isCenter) { + var firstDayPoints = this._firstDayPoints[i]; + tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2; + } + + var formatter = monthLabel.get('formatter'); + var name = nameMap[+firstDay.m - 1]; + var params = { + yyyy: firstDay.y, + yy: (firstDay.y + '').slice(2), + MM: firstDay.m, + M: +firstDay.m, + nameMap: name + }; + + var content = this._formatterLabel(formatter, params); + + var monthText = new Text({z2: 30}); + extend( + setTextStyle(monthText.style, monthLabel, {text: content}), + this._monthTextPositionControl(tmp, isCenter, orient, pos, margin) + ); + + group.add(monthText); + } + }, + + _weekTextPositionControl: function (point, orient, position, margin, cellSize) { + var align = 'center'; + var vAlign = 'middle'; + var x = point[0]; + var y = point[1]; + var isStart = position === 'start'; + + if (orient === 'horizontal') { + x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2; + align = isStart ? 'right' : 'left'; + } + else { + y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2; + vAlign = isStart ? 'bottom' : 'top'; + } + + return { + x: x, + y: y, + textAlign: align, + textVerticalAlign: vAlign + }; + }, + + // render weeks + _renderWeekText: function (calendarModel, rangeData, orient, group) { + var dayLabel = calendarModel.getModel('dayLabel'); + + if (!dayLabel.get('show')) { + return; + } + + var coordSys = calendarModel.coordinateSystem; + var pos = dayLabel.get('position'); + var nameMap = dayLabel.get('nameMap'); + var margin = dayLabel.get('margin'); + var firstDayOfWeek = coordSys.getFirstDayOfWeek(); + + if (isString(nameMap)) { + nameMap = WEEK_TEXT[nameMap.toUpperCase()] || []; + } + + var start = coordSys.getNextNDay( + rangeData.end.time, (7 - rangeData.lweek) + ).time; + + var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()]; + margin = parsePercent$1(margin, cellSize[orient === 'horizontal' ? 0 : 1]); + + if (pos === 'start') { + start = coordSys.getNextNDay( + rangeData.start.time, -(7 + rangeData.fweek) + ).time; + margin = -margin; + } + + for (var i = 0; i < 7; i++) { + + var tmpD = coordSys.getNextNDay(start, i); + var point = coordSys.dataToRect([tmpD.time], false).center; + var day = i; + day = Math.abs((i + firstDayOfWeek) % 7); + var weekText = new Text({z2: 30}); + + extend( + setTextStyle(weekText.style, dayLabel, {text: nameMap[day]}), + this._weekTextPositionControl(point, orient, pos, margin, cellSize) + ); + group.add(weekText); + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file calendar.js + * @author dxh + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Model +extendComponentModel({ + + type: 'title', + + layoutMode: {type: 'box', ignoreSize: true}, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 6, + show: true, + + text: '', + // 超链接跳转 + // link: null, + // 仅支持self | blank + target: 'blank', + subtext: '', + + // 超链接跳转 + // sublink: null, + // 仅支持self | blank + subtarget: 'blank', + + // 'center' ¦ 'left' ¦ 'right' + // ¦ {number}(x坐标,单位px) + left: 0, + // 'top' ¦ 'bottom' ¦ 'center' + // ¦ {number}(y坐标,单位px) + top: 0, + + // 水平对齐 + // 'auto' | 'left' | 'right' | 'center' + // 默认根据 left 的位置判断是左对齐还是右对齐 + // textAlign: null + // + // 垂直对齐 + // 'auto' | 'top' | 'bottom' | 'middle' + // 默认根据 top 位置判断是上对齐还是下对齐 + // textBaseline: null + + backgroundColor: 'rgba(0,0,0,0)', + + // 标题边框颜色 + borderColor: '#ccc', + + // 标题边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + + // 标题内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + + // 主副标题纵向间隔,单位px,默认为10, + itemGap: 10, + textStyle: { + fontSize: 18, + fontWeight: 'bolder', + color: '#333' + }, + subtextStyle: { + color: '#aaa' + } + } +}); + +// View +extendComponentView({ + + type: 'title', + + render: function (titleModel, ecModel, api) { + this.group.removeAll(); + + if (!titleModel.get('show')) { + return; + } + + var group = this.group; + + var textStyleModel = titleModel.getModel('textStyle'); + var subtextStyleModel = titleModel.getModel('subtextStyle'); + + var textAlign = titleModel.get('textAlign'); + var textBaseline = titleModel.get('textBaseline'); + + var textEl = new Text({ + style: setTextStyle({}, textStyleModel, { + text: titleModel.get('text'), + textFill: textStyleModel.getTextColor() + }, {disableBox: true}), + z2: 10 + }); + + var textRect = textEl.getBoundingRect(); + + var subText = titleModel.get('subtext'); + var subTextEl = new Text({ + style: setTextStyle({}, subtextStyleModel, { + text: subText, + textFill: subtextStyleModel.getTextColor(), + y: textRect.height + titleModel.get('itemGap'), + textVerticalAlign: 'top' + }, {disableBox: true}), + z2: 10 + }); + + var link = titleModel.get('link'); + var sublink = titleModel.get('sublink'); + var triggerEvent = titleModel.get('triggerEvent', true); + + textEl.silent = !link && !triggerEvent; + subTextEl.silent = !sublink && !triggerEvent; + + if (link) { + textEl.on('click', function () { + window.open(link, '_' + titleModel.get('target')); + }); + } + if (sublink) { + subTextEl.on('click', function () { + window.open(sublink, '_' + titleModel.get('subtarget')); + }); + } + + textEl.eventData = subTextEl.eventData = triggerEvent + ? { + componentType: 'title', + componentIndex: titleModel.componentIndex + } + : null; + + group.add(textEl); + subText && group.add(subTextEl); + // If no subText, but add subTextEl, there will be an empty line. + + var groupRect = group.getBoundingRect(); + var layoutOption = titleModel.getBoxLayoutParams(); + layoutOption.width = groupRect.width; + layoutOption.height = groupRect.height; + var layoutRect = getLayoutRect( + layoutOption, { + width: api.getWidth(), + height: api.getHeight() + }, titleModel.get('padding') + ); + // Adjust text align based on position + if (!textAlign) { + // Align left if title is on the left. center and right is same + textAlign = titleModel.get('left') || titleModel.get('right'); + if (textAlign === 'middle') { + textAlign = 'center'; + } + // Adjust layout by text align + if (textAlign === 'right') { + layoutRect.x += layoutRect.width; + } + else if (textAlign === 'center') { + layoutRect.x += layoutRect.width / 2; + } + } + if (!textBaseline) { + textBaseline = titleModel.get('top') || titleModel.get('bottom'); + if (textBaseline === 'center') { + textBaseline = 'middle'; + } + if (textBaseline === 'bottom') { + layoutRect.y += layoutRect.height; + } + else if (textBaseline === 'middle') { + layoutRect.y += layoutRect.height / 2; + } + + textBaseline = textBaseline || 'top'; + } + + group.attr('position', [layoutRect.x, layoutRect.y]); + var alignStyle = { + textAlign: textAlign, + textVerticalAlign: textBaseline + }; + textEl.setStyle(alignStyle); + subTextEl.setStyle(alignStyle); + + // Render background + // Get groupRect again because textAlign has been changed + groupRect = group.getBoundingRect(); + var padding = layoutRect.margin; + var style = titleModel.getItemStyle(['color', 'opacity']); + style.fill = titleModel.get('backgroundColor'); + var rect = new Rect({ + shape: { + x: groupRect.x - padding[3], + y: groupRect.y - padding[0], + width: groupRect.width + padding[1] + padding[3], + height: groupRect.height + padding[0] + padding[2], + r: titleModel.get('borderRadius') + }, + style: style, + silent: true + }); + subPixelOptimizeRect(rect); + + group.add(rect); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +ComponentModel.registerSubTypeDefaulter('dataZoom', function () { + // Default 'slider' when no type specified. + return 'slider'; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single']; +// Supported coords. +var COORDS = ['cartesian2d', 'polar', 'singleAxis']; + +/** + * @param {string} coordType + * @return {boolean} + */ +function isCoordSupported(coordType) { + return indexOf(COORDS, coordType) >= 0; +} + +/** + * Create "each" method to iterate names. + * + * @pubilc + * @param {Array.} names + * @param {Array.=} attrs + * @return {Function} + */ +function createNameEach(names, attrs) { + names = names.slice(); + var capitalNames = map(names, capitalFirst); + attrs = (attrs || []).slice(); + var capitalAttrs = map(attrs, capitalFirst); + + return function (callback, context) { + each$1(names, function (name, index) { + var nameObj = {name: name, capital: capitalNames[index]}; + + for (var j = 0; j < attrs.length; j++) { + nameObj[attrs[j]] = name + capitalAttrs[j]; + } + + callback.call(context, nameObj); + }); + }; +} + +/** + * Iterate each dimension name. + * + * @public + * @param {Function} callback The parameter is like: + * { + * name: 'angle', + * capital: 'Angle', + * axis: 'angleAxis', + * axisIndex: 'angleAixs', + * index: 'angleIndex' + * } + * @param {Object} context + */ +var eachAxisDim$1 = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']); + +/** + * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'. + * dataZoomModels and 'links' make up one or more graphics. + * This function finds the graphic where the source dataZoomModel is in. + * + * @public + * @param {Function} forEachNode Node iterator. + * @param {Function} forEachEdgeType edgeType iterator + * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id. + * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}} + */ +function createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) { + + return function (sourceNode) { + var result = { + nodes: [], + records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean). + }; + + forEachEdgeType(function (edgeType) { + result.records[edgeType.name] = {}; + }); + + if (!sourceNode) { + return result; + } + + absorb(sourceNode, result); + + var existsLink; + do { + existsLink = false; + forEachNode(processSingleNode); + } + while (existsLink); + + function processSingleNode(node) { + if (!isNodeAbsorded(node, result) && isLinked(node, result)) { + absorb(node, result); + existsLink = true; + } + } + + return result; + }; + + function isNodeAbsorded(node, result) { + return indexOf(result.nodes, node) >= 0; + } + + function isLinked(node, result) { + var hasLink = false; + forEachEdgeType(function (edgeType) { + each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) { + result.records[edgeType.name][edgeId] && (hasLink = true); + }); + }); + return hasLink; + } + + function absorb(node, result) { + result.nodes.push(node); + forEachEdgeType(function (edgeType) { + each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) { + result.records[edgeType.name][edgeId] = true; + }); + }); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$22 = each$1; +var asc$1 = asc; + +/** + * Operate single axis. + * One axis can only operated by one axis operator. + * Different dataZoomModels may be defined to operate the same axis. + * (i.e. 'inside' data zoom and 'slider' data zoom components) + * So dataZoomModels share one axisProxy in that case. + * + * @class + */ +var AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) { + + /** + * @private + * @type {string} + */ + this._dimName = dimName; + + /** + * @private + */ + this._axisIndex = axisIndex; + + /** + * @private + * @type {Array.} + */ + this._valueWindow; + + /** + * @private + * @type {Array.} + */ + this._percentWindow; + + /** + * @private + * @type {Array.} + */ + this._dataExtent; + + /** + * {minSpan, maxSpan, minValueSpan, maxValueSpan} + * @private + * @type {Object} + */ + this._minMaxSpan; + + /** + * @readOnly + * @type {module: echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @private + * @type {module: echarts/component/dataZoom/DataZoomModel} + */ + this._dataZoomModel = dataZoomModel; + + // /** + // * @readOnly + // * @private + // */ + // this.hasSeriesStacked; +}; + +AxisProxy.prototype = { + + constructor: AxisProxy, + + /** + * Whether the axisProxy is hosted by dataZoomModel. + * + * @public + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + * @return {boolean} + */ + hostedBy: function (dataZoomModel) { + return this._dataZoomModel === dataZoomModel; + }, + + /** + * @return {Array.} Value can only be NaN or finite value. + */ + getDataValueWindow: function () { + return this._valueWindow.slice(); + }, + + /** + * @return {Array.} + */ + getDataPercentWindow: function () { + return this._percentWindow.slice(); + }, + + /** + * @public + * @param {number} axisIndex + * @return {Array} seriesModels + */ + getTargetSeriesModels: function () { + var seriesModels = []; + var ecModel = this.ecModel; + + ecModel.eachSeries(function (seriesModel) { + if (isCoordSupported(seriesModel.get('coordinateSystem'))) { + var dimName = this._dimName; + var axisModel = ecModel.queryComponents({ + mainType: dimName + 'Axis', + index: seriesModel.get(dimName + 'AxisIndex'), + id: seriesModel.get(dimName + 'AxisId') + })[0]; + if (this._axisIndex === (axisModel && axisModel.componentIndex)) { + seriesModels.push(seriesModel); + } + } + }, this); + + return seriesModels; + }, + + getAxisModel: function () { + return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex); + }, + + getOtherAxisModel: function () { + var axisDim = this._dimName; + var ecModel = this.ecModel; + var axisModel = this.getAxisModel(); + var isCartesian = axisDim === 'x' || axisDim === 'y'; + var otherAxisDim; + var coordSysIndexName; + if (isCartesian) { + coordSysIndexName = 'gridIndex'; + otherAxisDim = axisDim === 'x' ? 'y' : 'x'; + } + else { + coordSysIndexName = 'polarIndex'; + otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle'; + } + var foundOtherAxisModel; + ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) { + if ((otherAxisModel.get(coordSysIndexName) || 0) + === (axisModel.get(coordSysIndexName) || 0) + ) { + foundOtherAxisModel = otherAxisModel; + } + }); + return foundOtherAxisModel; + }, + + getMinMaxSpan: function () { + return clone(this._minMaxSpan); + }, + + /** + * Only calculate by given range and this._dataExtent, do not change anything. + * + * @param {Object} opt + * @param {number} [opt.start] + * @param {number} [opt.end] + * @param {number} [opt.startValue] + * @param {number} [opt.endValue] + */ + calculateDataWindow: function (opt) { + var dataExtent = this._dataExtent; + var axisModel = this.getAxisModel(); + var scale = axisModel.axis.scale; + var rangePropMode = this._dataZoomModel.getRangePropMode(); + var percentExtent = [0, 100]; + var percentWindow = [ + opt.start, + opt.end + ]; + var valueWindow = []; + + each$22(['startValue', 'endValue'], function (prop) { + valueWindow.push(opt[prop] != null ? scale.parse(opt[prop]) : null); + }); + + // Normalize bound. + each$22([0, 1], function (idx) { + var boundValue = valueWindow[idx]; + var boundPercent = percentWindow[idx]; + + // Notice: dataZoom is based either on `percentProp` ('start', 'end') or + // on `valueProp` ('startValue', 'endValue'). The former one is suitable + // for cases that a dataZoom component controls multiple axes with different + // unit or extent, and the latter one is suitable for accurate zoom by pixel + // (e.g., in dataZoomSelect). `valueProp` can be calculated from `percentProp`, + // but it is awkward that `percentProp` can not be obtained from `valueProp` + // accurately (because all of values that are overflow the `dataExtent` will + // be calculated to percent '100%'). So we have to use + // `dataZoom.getRangePropMode()` to mark which prop is used. + // `rangePropMode` is updated only when setOption or dispatchAction, otherwise + // it remains its original value. + + if (rangePropMode[idx] === 'percent') { + if (boundPercent == null) { + boundPercent = percentExtent[idx]; + } + // Use scale.parse to math round for category or time axis. + boundValue = scale.parse(linearMap( + boundPercent, percentExtent, dataExtent, true + )); + } + else { + // Calculating `percent` from `value` may be not accurate, because + // This calculation can not be inversed, because all of values that + // are overflow the `dataExtent` will be calculated to percent '100%' + boundPercent = linearMap( + boundValue, dataExtent, percentExtent, true + ); + } + + // valueWindow[idx] = round(boundValue); + // percentWindow[idx] = round(boundPercent); + valueWindow[idx] = boundValue; + percentWindow[idx] = boundPercent; + }); + + return { + valueWindow: asc$1(valueWindow), + percentWindow: asc$1(percentWindow) + }; + }, + + /** + * Notice: reset should not be called before series.restoreData() called, + * so it is recommanded to be called in "process stage" but not "model init + * stage". + * + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + reset: function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + var targetSeries = this.getTargetSeriesModels(); + // Culculate data window and data extent, and record them. + this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries); + + // this.hasSeriesStacked = false; + // each(targetSeries, function (series) { + // var data = series.getData(); + // var dataDim = data.mapDimension(this._dimName); + // var stackedDimension = data.getCalculationInfo('stackedDimension'); + // if (stackedDimension && stackedDimension === dataDim) { + // this.hasSeriesStacked = true; + // } + // }, this); + + var dataWindow = this.calculateDataWindow(dataZoomModel.option); + + this._valueWindow = dataWindow.valueWindow; + this._percentWindow = dataWindow.percentWindow; + + setMinMaxSpan(this); + + // Update axis setting then. + setAxisModel(this); + }, + + /** + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + restore: function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + this._valueWindow = this._percentWindow = null; + setAxisModel(this, true); + }, + + /** + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + filterData: function (dataZoomModel, api) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + var axisDim = this._dimName; + var seriesModels = this.getTargetSeriesModels(); + var filterMode = dataZoomModel.get('filterMode'); + var valueWindow = this._valueWindow; + + if (filterMode === 'none') { + return; + } + + // FIXME + // Toolbox may has dataZoom injected. And if there are stacked bar chart + // with NaN data, NaN will be filtered and stack will be wrong. + // So we need to force the mode to be set empty. + // In fect, it is not a big deal that do not support filterMode-'filter' + // when using toolbox#dataZoom, utill tooltip#dataZoom support "single axis + // selection" some day, which might need "adapt to data extent on the + // otherAxis", which is disabled by filterMode-'empty'. + // But currently, stack has been fixed to based on value but not index, + // so this is not an issue any more. + // var otherAxisModel = this.getOtherAxisModel(); + // if (dataZoomModel.get('$fromToolbox') + // && otherAxisModel + // && otherAxisModel.hasSeriesStacked + // ) { + // filterMode = 'empty'; + // } + + // TODO + // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet. + + each$22(seriesModels, function (seriesModel) { + var seriesData = seriesModel.getData(); + var dataDims = seriesData.mapDimension(axisDim, true); + + if (!dataDims.length) { + return; + } + + if (filterMode === 'weakFilter') { + seriesData.filterSelf(function (dataIndex) { + var leftOut; + var rightOut; + var hasValue; + for (var i = 0; i < dataDims.length; i++) { + var value = seriesData.get(dataDims[i], dataIndex); + var thisHasValue = !isNaN(value); + var thisLeftOut = value < valueWindow[0]; + var thisRightOut = value > valueWindow[1]; + if (thisHasValue && !thisLeftOut && !thisRightOut) { + return true; + } + thisHasValue && (hasValue = true); + thisLeftOut && (leftOut = true); + thisRightOut && (rightOut = true); + } + // If both left out and right out, do not filter. + return hasValue && leftOut && rightOut; + }); + } + else { + each$22(dataDims, function (dim) { + if (filterMode === 'empty') { + seriesModel.setData( + seriesData.map(dim, function (value) { + return !isInWindow(value) ? NaN : value; + }) + ); + } + else { + var range = {}; + range[dim] = valueWindow; + + // console.time('select'); + seriesData.selectRange(range); + // console.timeEnd('select'); + } + }); + } + + each$22(dataDims, function (dim) { + seriesData.setApproximateExtent(valueWindow, dim); + }); + }); + + function isInWindow(value) { + return value >= valueWindow[0] && value <= valueWindow[1]; + } + } +}; + +function calculateDataExtent(axisProxy, axisDim, seriesModels) { + var dataExtent = [Infinity, -Infinity]; + + each$22(seriesModels, function (seriesModel) { + var seriesData = seriesModel.getData(); + if (seriesData) { + each$22(seriesData.mapDimension(axisDim, true), function (dim) { + var seriesExtent = seriesData.getApproximateExtent(dim); + seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]); + seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]); + }); + } + }); + + if (dataExtent[1] < dataExtent[0]) { + dataExtent = [NaN, NaN]; + } + + // It is important to get "consistent" extent when more then one axes is + // controlled by a `dataZoom`, otherwise those axes will not be synchronized + // when zooming. But it is difficult to know what is "consistent", considering + // axes have different type or even different meanings (For example, two + // time axes are used to compare data of the same date in different years). + // So basically dataZoom just obtains extent by series.data (in category axis + // extent can be obtained from axis.data). + // Nevertheless, user can set min/max/scale on axes to make extent of axes + // consistent. + fixExtentByAxis(axisProxy, dataExtent); + + return dataExtent; +} + +function fixExtentByAxis(axisProxy, dataExtent) { + var axisModel = axisProxy.getAxisModel(); + var min = axisModel.getMin(true); + + // For category axis, if min/max/scale are not set, extent is determined + // by axis.data by default. + var isCategoryAxis = axisModel.get('type') === 'category'; + var axisDataLen = isCategoryAxis && axisModel.getCategories().length; + + if (min != null && min !== 'dataMin' && typeof min !== 'function') { + dataExtent[0] = min; + } + else if (isCategoryAxis) { + dataExtent[0] = axisDataLen > 0 ? 0 : NaN; + } + + var max = axisModel.getMax(true); + if (max != null && max !== 'dataMax' && typeof max !== 'function') { + dataExtent[1] = max; + } + else if (isCategoryAxis) { + dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN; + } + + if (!axisModel.get('scale', true)) { + dataExtent[0] > 0 && (dataExtent[0] = 0); + dataExtent[1] < 0 && (dataExtent[1] = 0); + } + + // For value axis, if min/max/scale are not set, we just use the extent obtained + // by series data, which may be a little different from the extent calculated by + // `axisHelper.getScaleExtent`. But the different just affects the experience a + // little when zooming. So it will not be fixed until some users require it strongly. + + return dataExtent; +} + +function setAxisModel(axisProxy, isRestore) { + var axisModel = axisProxy.getAxisModel(); + + var percentWindow = axisProxy._percentWindow; + var valueWindow = axisProxy._valueWindow; + + if (!percentWindow) { + return; + } + + // [0, 500]: arbitrary value, guess axis extent. + var precision = getPixelPrecision(valueWindow, [0, 500]); + precision = Math.min(precision, 20); + // isRestore or isFull + var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100); + + axisModel.setRange( + useOrigin ? null : +valueWindow[0].toFixed(precision), + useOrigin ? null : +valueWindow[1].toFixed(precision) + ); +} + +function setMinMaxSpan(axisProxy) { + var minMaxSpan = axisProxy._minMaxSpan = {}; + var dataZoomModel = axisProxy._dataZoomModel; + + each$22(['min', 'max'], function (minMax) { + minMaxSpan[minMax + 'Span'] = dataZoomModel.get(minMax + 'Span'); + + // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan + var valueSpan = dataZoomModel.get(minMax + 'ValueSpan'); + + if (valueSpan != null) { + minMaxSpan[minMax + 'ValueSpan'] = valueSpan; + valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan); + + if (valueSpan != null) { + var dataExtent = axisProxy._dataExtent; + minMaxSpan[minMax + 'Span'] = linearMap( + dataExtent[0] + valueSpan, dataExtent, [0, 100], true + ); + } + } + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$21 = each$1; +var eachAxisDim = eachAxisDim$1; + +var DataZoomModel = extendComponentModel({ + + type: 'dataZoom', + + dependencies: [ + 'xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series' + ], + + /** + * @protected + */ + defaultOption: { + zlevel: 0, + z: 4, // Higher than normal component (z: 2). + orient: null, // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'. + xAxisIndex: null, // Default the first horizontal category axis. + yAxisIndex: null, // Default the first vertical category axis. + + filterMode: 'filter', // Possible values: 'filter' or 'empty' or 'weakFilter'. + // 'filter': data items which are out of window will be removed. This option is + // applicable when filtering outliers. For each data item, it will be + // filtered if one of the relevant dimensions is out of the window. + // 'weakFilter': data items which are out of window will be removed. This option + // is applicable when filtering outliers. For each data item, it will be + // filtered only if all of the relevant dimensions are out of the same + // side of the window. + // 'empty': data items which are out of window will be set to empty. + // This option is applicable when user should not neglect + // that there are some data items out of window. + // 'none': Do not filter. + // Taking line chart as an example, line will be broken in + // the filtered points when filterModel is set to 'empty', but + // be connected when set to 'filter'. + + throttle: null, // Dispatch action by the fixed rate, avoid frequency. + // default 100. Do not throttle when use null/undefined. + // If animation === true and animationDurationUpdate > 0, + // default value is 100, otherwise 20. + start: 0, // Start percent. 0 ~ 100 + end: 100, // End percent. 0 ~ 100 + startValue: null, // Start value. If startValue specified, start is ignored. + endValue: null, // End value. If endValue specified, end is ignored. + minSpan: null, // 0 ~ 100 + maxSpan: null, // 0 ~ 100 + minValueSpan: null, // The range of dataZoom can not be smaller than that. + maxValueSpan: null, // The range of dataZoom can not be larger than that. + rangeMode: null // Array, can be 'value' or 'percent'. + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel) { + + /** + * key like x_0, y_1 + * @private + * @type {Object} + */ + this._dataIntervalByAxis = {}; + + /** + * @private + */ + this._dataInfo = {}; + + /** + * key like x_0, y_1 + * @private + */ + this._axisProxies = {}; + + /** + * @readOnly + */ + this.textStyleModel; + + /** + * @private + */ + this._autoThrottle = true; + + /** + * 'percent' or 'value' + * @private + */ + this._rangePropMode = ['percent', 'percent']; + + var rawOption = retrieveRaw(option); + + this.mergeDefaultAndTheme(option, ecModel); + + this.doInit(rawOption); + }, + + /** + * @override + */ + mergeOption: function (newOption) { + var rawOption = retrieveRaw(newOption); + + //FIX #2591 + merge(this.option, newOption, true); + + this.doInit(rawOption); + }, + + /** + * @protected + */ + doInit: function (rawOption) { + var thisOption = this.option; + + // Disable realtime view update if canvas is not supported. + if (!env$1.canvasSupported) { + thisOption.realtime = false; + } + + this._setDefaultThrottle(rawOption); + + updateRangeUse(this, rawOption); + + each$21([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + // start/end has higher priority over startValue/endValue if they + // both set, but we should make chart.setOption({endValue: 1000}) + // effective, rather than chart.setOption({endValue: 1000, end: null}). + if (this._rangePropMode[index] === 'value') { + thisOption[names[0]] = null; + } + // Otherwise do nothing and use the merge result. + }, this); + + this.textStyleModel = this.getModel('textStyle'); + + this._resetTarget(); + + this._giveAxisProxies(); + }, + + /** + * @private + */ + _giveAxisProxies: function () { + var axisProxies = this._axisProxies; + + this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) { + var axisModel = this.dependentModels[dimNames.axis][axisIndex]; + + // If exists, share axisProxy with other dataZoomModels. + var axisProxy = axisModel.__dzAxisProxy || ( + // Use the first dataZoomModel as the main model of axisProxy. + axisModel.__dzAxisProxy = new AxisProxy( + dimNames.name, axisIndex, this, ecModel + ) + ); + // FIXME + // dispose __dzAxisProxy + + axisProxies[dimNames.name + '_' + axisIndex] = axisProxy; + }, this); + }, + + /** + * @private + */ + _resetTarget: function () { + var thisOption = this.option; + + var autoMode = this._judgeAutoMode(); + + eachAxisDim(function (dimNames) { + var axisIndexName = dimNames.axisIndex; + thisOption[axisIndexName] = normalizeToArray( + thisOption[axisIndexName] + ); + }, this); + + if (autoMode === 'axisIndex') { + this._autoSetAxisIndex(); + } + else if (autoMode === 'orient') { + this._autoSetOrient(); + } + }, + + /** + * @private + */ + _judgeAutoMode: function () { + // Auto set only works for setOption at the first time. + // The following is user's reponsibility. So using merged + // option is OK. + var thisOption = this.option; + + var hasIndexSpecified = false; + eachAxisDim(function (dimNames) { + // When user set axisIndex as a empty array, we think that user specify axisIndex + // but do not want use auto mode. Because empty array may be encountered when + // some error occured. + if (thisOption[dimNames.axisIndex] != null) { + hasIndexSpecified = true; + } + }, this); + + var orient = thisOption.orient; + + if (orient == null && hasIndexSpecified) { + return 'orient'; + } + else if (!hasIndexSpecified) { + if (orient == null) { + thisOption.orient = 'horizontal'; + } + return 'axisIndex'; + } + }, + + /** + * @private + */ + _autoSetAxisIndex: function () { + var autoAxisIndex = true; + var orient = this.get('orient', true); + var thisOption = this.option; + var dependentModels = this.dependentModels; + + if (autoAxisIndex) { + // Find axis that parallel to dataZoom as default. + var dimName = orient === 'vertical' ? 'y' : 'x'; + + if (dependentModels[dimName + 'Axis'].length) { + thisOption[dimName + 'AxisIndex'] = [0]; + autoAxisIndex = false; + } + else { + each$21(dependentModels.singleAxis, function (singleAxisModel) { + if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) { + thisOption.singleAxisIndex = [singleAxisModel.componentIndex]; + autoAxisIndex = false; + } + }); + } + } + + if (autoAxisIndex) { + // Find the first category axis as default. (consider polar) + eachAxisDim(function (dimNames) { + if (!autoAxisIndex) { + return; + } + var axisIndices = []; + var axisModels = this.dependentModels[dimNames.axis]; + if (axisModels.length && !axisIndices.length) { + for (var i = 0, len = axisModels.length; i < len; i++) { + if (axisModels[i].get('type') === 'category') { + axisIndices.push(i); + } + } + } + thisOption[dimNames.axisIndex] = axisIndices; + if (axisIndices.length) { + autoAxisIndex = false; + } + }, this); + } + + if (autoAxisIndex) { + // FIXME + // 这里是兼容ec2的写法(没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制), + // 但是实际是否需要Grid.js#getScaleByOption来判断(考虑time,log等axis type)? + + // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified, + // dataZoom component auto adopts series that reference to + // both xAxis and yAxis which type is 'value'. + this.ecModel.eachSeries(function (seriesModel) { + if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) { + eachAxisDim(function (dimNames) { + var axisIndices = thisOption[dimNames.axisIndex]; + + var axisIndex = seriesModel.get(dimNames.axisIndex); + var axisId = seriesModel.get(dimNames.axisId); + + var axisModel = seriesModel.ecModel.queryComponents({ + mainType: dimNames.axis, + index: axisIndex, + id: axisId + })[0]; + + if (__DEV__) { + if (!axisModel) { + throw new Error( + dimNames.axis + ' "' + retrieve( + axisIndex, + axisId, + 0 + ) + '" not found' + ); + } + } + axisIndex = axisModel.componentIndex; + + if (indexOf(axisIndices, axisIndex) < 0) { + axisIndices.push(axisIndex); + } + }); + } + }, this); + } + }, + + /** + * @private + */ + _autoSetOrient: function () { + var dim; + + // Find the first axis + this.eachTargetAxis(function (dimNames) { + !dim && (dim = dimNames.name); + }, this); + + this.option.orient = dim === 'y' ? 'vertical' : 'horizontal'; + }, + + /** + * @private + */ + _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) { + // FIXME + // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。 + // 例如series.type === scatter时。 + + var is = true; + eachAxisDim(function (dimNames) { + var seriesAxisIndex = seriesModel.get(dimNames.axisIndex); + var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex]; + + if (!axisModel || axisModel.get('type') !== axisType) { + is = false; + } + }, this); + return is; + }, + + /** + * @private + */ + _setDefaultThrottle: function (rawOption) { + // When first time user set throttle, auto throttle ends. + if (rawOption.hasOwnProperty('throttle')) { + this._autoThrottle = false; + } + if (this._autoThrottle) { + var globalOption = this.ecModel.option; + this.option.throttle + = (globalOption.animation && globalOption.animationDurationUpdate > 0) + ? 100 : 20; + } + }, + + /** + * @public + */ + getFirstTargetAxisModel: function () { + var firstAxisModel; + eachAxisDim(function (dimNames) { + if (firstAxisModel == null) { + var indices = this.get(dimNames.axisIndex); + if (indices.length) { + firstAxisModel = this.dependentModels[dimNames.axis][indices[0]]; + } + } + }, this); + + return firstAxisModel; + }, + + /** + * @public + * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel + */ + eachTargetAxis: function (callback, context) { + var ecModel = this.ecModel; + eachAxisDim(function (dimNames) { + each$21( + this.get(dimNames.axisIndex), + function (axisIndex) { + callback.call(context, dimNames, axisIndex, this, ecModel); + }, + this + ); + }, this); + }, + + /** + * @param {string} dimName + * @param {number} axisIndex + * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined. + */ + getAxisProxy: function (dimName, axisIndex) { + return this._axisProxies[dimName + '_' + axisIndex]; + }, + + /** + * @param {string} dimName + * @param {number} axisIndex + * @return {module:echarts/model/Model} If not found, return null/undefined. + */ + getAxisModel: function (dimName, axisIndex) { + var axisProxy = this.getAxisProxy(dimName, axisIndex); + return axisProxy && axisProxy.getAxisModel(); + }, + + /** + * If not specified, set to undefined. + * + * @public + * @param {Object} opt + * @param {number} [opt.start] + * @param {number} [opt.end] + * @param {number} [opt.startValue] + * @param {number} [opt.endValue] + * @param {boolean} [ignoreUpdateRangeUsg=false] + */ + setRawRange: function (opt, ignoreUpdateRangeUsg) { + var option = this.option; + each$21([['start', 'startValue'], ['end', 'endValue']], function (names) { + // If only one of 'start' and 'startValue' is not null/undefined, the other + // should be cleared, which enable clear the option. + // If both of them are not set, keep option with the original value, which + // enable use only set start but not set end when calling `dispatchAction`. + // The same as 'end' and 'endValue'. + if (opt[names[0]] != null || opt[names[1]] != null) { + option[names[0]] = opt[names[0]]; + option[names[1]] = opt[names[1]]; + } + }, this); + + !ignoreUpdateRangeUsg && updateRangeUse(this, opt); + }, + + /** + * @public + * @return {Array.} [startPercent, endPercent] + */ + getPercentRange: function () { + var axisProxy = this.findRepresentativeAxisProxy(); + if (axisProxy) { + return axisProxy.getDataPercentWindow(); + } + }, + + /** + * @public + * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0); + * + * @param {string} [axisDimName] + * @param {number} [axisIndex] + * @return {Array.} [startValue, endValue] value can only be '-' or finite number. + */ + getValueRange: function (axisDimName, axisIndex) { + if (axisDimName == null && axisIndex == null) { + var axisProxy = this.findRepresentativeAxisProxy(); + if (axisProxy) { + return axisProxy.getDataValueWindow(); + } + } + else { + return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow(); + } + }, + + /** + * @public + * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy + * corresponding to the axisModel + * @return {module:echarts/component/dataZoom/AxisProxy} + */ + findRepresentativeAxisProxy: function (axisModel) { + if (axisModel) { + return axisModel.__dzAxisProxy; + } + + // Find the first hosted axisProxy + var axisProxies = this._axisProxies; + for (var key in axisProxies) { + if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) { + return axisProxies[key]; + } + } + + // If no hosted axis find not hosted axisProxy. + // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis, + // and the option.start or option.end settings are different. The percentRange + // should follow axisProxy. + // (We encounter this problem in toolbox data zoom.) + for (var key in axisProxies) { + if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) { + return axisProxies[key]; + } + } + }, + + /** + * @return {Array.} + */ + getRangePropMode: function () { + return this._rangePropMode.slice(); + } + +}); + +function retrieveRaw(option) { + var ret = {}; + each$21( + ['start', 'end', 'startValue', 'endValue', 'throttle'], + function (name) { + option.hasOwnProperty(name) && (ret[name] = option[name]); + } + ); + return ret; +} + +function updateRangeUse(dataZoomModel, rawOption) { + var rangePropMode = dataZoomModel._rangePropMode; + var rangeModeInOption = dataZoomModel.get('rangeMode'); + + each$21([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + var percentSpecified = rawOption[names[0]] != null; + var valueSpecified = rawOption[names[1]] != null; + if (percentSpecified && !valueSpecified) { + rangePropMode[index] = 'percent'; + } + else if (!percentSpecified && valueSpecified) { + rangePropMode[index] = 'value'; + } + else if (rangeModeInOption) { + rangePropMode[index] = rangeModeInOption[index]; + } + else if (percentSpecified) { // percentSpecified && valueSpecified + rangePropMode[index] = 'percent'; + } + // else remain its original setting. + }); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var DataZoomView = Component.extend({ + + type: 'dataZoom', + + render: function (dataZoomModel, ecModel, api, payload) { + this.dataZoomModel = dataZoomModel; + this.ecModel = ecModel; + this.api = api; + }, + + /** + * Find the first target coordinate system. + * + * @protected + * @return {Object} { + * grid: [ + * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1}, + * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0}, + * ... + * ], // cartesians must not be null/undefined. + * polar: [ + * {model: coord0, axisModels: [axis4], coordIndex: 0}, + * ... + * ], // polars must not be null/undefined. + * singleAxis: [ + * {model: coord0, axisModels: [], coordIndex: 0} + * ] + */ + getTargetCoordInfo: function () { + var dataZoomModel = this.dataZoomModel; + var ecModel = this.ecModel; + var coordSysLists = {}; + + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) { + var axisModel = ecModel.getComponent(dimNames.axis, axisIndex); + if (axisModel) { + var coordModel = axisModel.getCoordSysModel(); + coordModel && save( + coordModel, + axisModel, + coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []), + coordModel.componentIndex + ); + } + }, this); + + function save(coordModel, axisModel, store, coordIndex) { + var item; + for (var i = 0; i < store.length; i++) { + if (store[i].model === coordModel) { + item = store[i]; + break; + } + } + if (!item) { + store.push(item = { + model: coordModel, axisModels: [], coordIndex: coordIndex + }); + } + item.axisModels.push(axisModel); + } + + return coordSysLists; + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var SliderZoomModel = DataZoomModel.extend({ + + type: 'dataZoom.slider', + + layoutMode: 'box', + + /** + * @protected + */ + defaultOption: { + show: true, + + // ph => placeholder. Using placehoder here because + // deault value can only be drived in view stage. + right: 'ph', // Default align to grid rect. + top: 'ph', // Default align to grid rect. + width: 'ph', // Default align to grid rect. + height: 'ph', // Default align to grid rect. + left: null, // Default align to grid rect. + bottom: null, // Default align to grid rect. + + backgroundColor: 'rgba(47,69,84,0)', // Background of slider zoom component. + // dataBackgroundColor: '#ddd', // Background coor of data shadow and border of box, + // highest priority, remain for compatibility of + // previous version, but not recommended any more. + dataBackground: { + lineStyle: { + color: '#2f4554', + width: 0.5, + opacity: 0.3 + }, + areaStyle: { + color: 'rgba(47,69,84,0.3)', + opacity: 0.3 + } + }, + borderColor: '#ddd', // border color of the box. For compatibility, + // if dataBackgroundColor is set, borderColor + // is ignored. + + fillerColor: 'rgba(167,183,204,0.4)', // Color of selected area. + // handleColor: 'rgba(89,170,216,0.95)', // Color of handle. + // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z', + /* eslint-disable */ + handleIcon: 'M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z', + /* eslint-enable */ + // Percent of the slider height + handleSize: '100%', + + handleStyle: { + color: '#a7b7cc' + }, + + labelPrecision: null, + labelFormatter: null, + showDetail: true, + showDataShadow: 'auto', // Default auto decision. + realtime: true, + zoomLock: false, // Whether disable zoom. + textStyle: { + color: '#333' + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var Rect$2 = Rect; +var linearMap$1 = linearMap; +var asc$2 = asc; +var bind$4 = bind; +var each$23 = each$1; + +// Constants +var DEFAULT_LOCATION_EDGE_GAP = 7; +var DEFAULT_FRAME_BORDER_WIDTH = 1; +var DEFAULT_FILLER_SIZE = 30; +var HORIZONTAL = 'horizontal'; +var VERTICAL = 'vertical'; +var LABEL_GAP = 5; +var SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter']; + +var SliderZoomView = DataZoomView.extend({ + + type: 'dataZoom.slider', + + init: function (ecModel, api) { + + /** + * @private + * @type {Object} + */ + this._displayables = {}; + + /** + * @private + * @type {string} + */ + this._orient; + + /** + * [0, 100] + * @private + */ + this._range; + + /** + * [coord of the first handle, coord of the second handle] + * @private + */ + this._handleEnds; + + /** + * [length, thick] + * @private + * @type {Array.} + */ + this._size; + + /** + * @private + * @type {number} + */ + this._handleWidth; + + /** + * @private + * @type {number} + */ + this._handleHeight; + + /** + * @private + */ + this._location; + + /** + * @private + */ + this._dragging; + + /** + * @private + */ + this._dataShadowInfo; + + this.api = api; + }, + + /** + * @override + */ + render: function (dataZoomModel, ecModel, api, payload) { + SliderZoomView.superApply(this, 'render', arguments); + + createOrUpdate( + this, + '_dispatchZoomAction', + this.dataZoomModel.get('throttle'), + 'fixRate' + ); + + this._orient = dataZoomModel.get('orient'); + + if (this.dataZoomModel.get('show') === false) { + this.group.removeAll(); + return; + } + + // Notice: this._resetInterval() should not be executed when payload.type + // is 'dataZoom', origin this._range should be maintained, otherwise 'pan' + // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction, + if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) { + this._buildView(); + } + + this._updateView(); + }, + + /** + * @override + */ + remove: function () { + SliderZoomView.superApply(this, 'remove', arguments); + clear(this, '_dispatchZoomAction'); + }, + + /** + * @override + */ + dispose: function () { + SliderZoomView.superApply(this, 'dispose', arguments); + clear(this, '_dispatchZoomAction'); + }, + + _buildView: function () { + var thisGroup = this.group; + + thisGroup.removeAll(); + + this._resetLocation(); + this._resetInterval(); + + var barGroup = this._displayables.barGroup = new Group(); + + this._renderBackground(); + + this._renderHandle(); + + this._renderDataShadow(); + + thisGroup.add(barGroup); + + this._positionGroup(); + }, + + /** + * @private + */ + _resetLocation: function () { + var dataZoomModel = this.dataZoomModel; + var api = this.api; + + // If some of x/y/width/height are not specified, + // auto-adapt according to target grid. + var coordRect = this._findCoordRect(); + var ecSize = {width: api.getWidth(), height: api.getHeight()}; + // Default align by coordinate system rect. + var positionInfo = this._orient === HORIZONTAL + ? { + // Why using 'right', because right should be used in vertical, + // and it is better to be consistent for dealing with position param merge. + right: ecSize.width - coordRect.x - coordRect.width, + top: (ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP), + width: coordRect.width, + height: DEFAULT_FILLER_SIZE + } + : { // vertical + right: DEFAULT_LOCATION_EDGE_GAP, + top: coordRect.y, + width: DEFAULT_FILLER_SIZE, + height: coordRect.height + }; + + // Do not write back to option and replace value 'ph', because + // the 'ph' value should be recalculated when resize. + var layoutParams = getLayoutParams(dataZoomModel.option); + + // Replace the placeholder value. + each$1(['right', 'top', 'width', 'height'], function (name) { + if (layoutParams[name] === 'ph') { + layoutParams[name] = positionInfo[name]; + } + }); + + var layoutRect = getLayoutRect( + layoutParams, + ecSize, + dataZoomModel.padding + ); + + this._location = {x: layoutRect.x, y: layoutRect.y}; + this._size = [layoutRect.width, layoutRect.height]; + this._orient === VERTICAL && this._size.reverse(); + }, + + /** + * @private + */ + _positionGroup: function () { + var thisGroup = this.group; + var location = this._location; + var orient = this._orient; + + // Just use the first axis to determine mapping. + var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel(); + var inverse = targetAxisModel && targetAxisModel.get('inverse'); + + var barGroup = this._displayables.barGroup; + var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; + + // Transform barGroup. + barGroup.attr( + (orient === HORIZONTAL && !inverse) + ? {scale: otherAxisInverse ? [1, 1] : [1, -1]} + : (orient === HORIZONTAL && inverse) + ? {scale: otherAxisInverse ? [-1, 1] : [-1, -1]} + : (orient === VERTICAL && !inverse) + ? {scale: otherAxisInverse ? [1, -1] : [1, 1], rotation: Math.PI / 2} + // Dont use Math.PI, considering shadow direction. + : {scale: otherAxisInverse ? [-1, -1] : [-1, 1], rotation: Math.PI / 2} + ); + + // Position barGroup + var rect = thisGroup.getBoundingRect([barGroup]); + thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]); + }, + + /** + * @private + */ + _getViewExtent: function () { + return [0, this._size[0]]; + }, + + _renderBackground: function () { + var dataZoomModel = this.dataZoomModel; + var size = this._size; + var barGroup = this._displayables.barGroup; + + barGroup.add(new Rect$2({ + silent: true, + shape: { + x: 0, y: 0, width: size[0], height: size[1] + }, + style: { + fill: dataZoomModel.get('backgroundColor') + }, + z2: -40 + })); + + // Click panel, over shadow, below handles. + barGroup.add(new Rect$2({ + shape: { + x: 0, y: 0, width: size[0], height: size[1] + }, + style: { + fill: 'transparent' + }, + z2: 0, + onclick: bind(this._onClickPanelClick, this) + })); + }, + + _renderDataShadow: function () { + var info = this._dataShadowInfo = this._prepareDataShadowInfo(); + + if (!info) { + return; + } + + var size = this._size; + var seriesModel = info.series; + var data = seriesModel.getRawData(); + + var otherDim = seriesModel.getShadowDim + ? seriesModel.getShadowDim() // @see candlestick + : info.otherDim; + + if (otherDim == null) { + return; + } + + var otherDataExtent = data.getDataExtent(otherDim); + // Nice extent. + var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3; + otherDataExtent = [ + otherDataExtent[0] - otherOffset, + otherDataExtent[1] + otherOffset + ]; + var otherShadowExtent = [0, size[1]]; + + var thisShadowExtent = [0, size[0]]; + + var areaPoints = [[size[0], 0], [0, 0]]; + var linePoints = []; + var step = thisShadowExtent[1] / (data.count() - 1); + var thisCoord = 0; + + // Optimize for large data shadow + var stride = Math.round(data.count() / size[0]); + var lastIsEmpty; + data.each([otherDim], function (value, index) { + if (stride > 0 && (index % stride)) { + thisCoord += step; + return; + } + + // FIXME + // Should consider axis.min/axis.max when drawing dataShadow. + + // FIXME + // 应该使用统一的空判断?还是在list里进行空判断? + var isEmpty = value == null || isNaN(value) || value === ''; + // See #4235. + var otherCoord = isEmpty + ? 0 : linearMap$1(value, otherDataExtent, otherShadowExtent, true); + + // Attempt to draw data shadow precisely when there are empty value. + if (isEmpty && !lastIsEmpty && index) { + areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]); + linePoints.push([linePoints[linePoints.length - 1][0], 0]); + } + else if (!isEmpty && lastIsEmpty) { + areaPoints.push([thisCoord, 0]); + linePoints.push([thisCoord, 0]); + } + + areaPoints.push([thisCoord, otherCoord]); + linePoints.push([thisCoord, otherCoord]); + + thisCoord += step; + lastIsEmpty = isEmpty; + }); + + var dataZoomModel = this.dataZoomModel; + // var dataBackgroundModel = dataZoomModel.getModel('dataBackground'); + this._displayables.barGroup.add(new Polygon({ + shape: {points: areaPoints}, + style: defaults( + {fill: dataZoomModel.get('dataBackgroundColor')}, + dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle() + ), + silent: true, + z2: -20 + })); + this._displayables.barGroup.add(new Polyline({ + shape: {points: linePoints}, + style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(), + silent: true, + z2: -19 + })); + }, + + _prepareDataShadowInfo: function () { + var dataZoomModel = this.dataZoomModel; + var showDataShadow = dataZoomModel.get('showDataShadow'); + + if (showDataShadow === false) { + return; + } + + // Find a representative series. + var result; + var ecModel = this.ecModel; + + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) { + var seriesModels = dataZoomModel + .getAxisProxy(dimNames.name, axisIndex) + .getTargetSeriesModels(); + + each$1(seriesModels, function (seriesModel) { + if (result) { + return; + } + + if (showDataShadow !== true && indexOf( + SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type') + ) < 0 + ) { + return; + } + + var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis; + var otherDim = getOtherDim(dimNames.name); + var otherAxisInverse; + var coordSys = seriesModel.coordinateSystem; + + if (otherDim != null && coordSys.getOtherAxis) { + otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse; + } + + otherDim = seriesModel.getData().mapDimension(otherDim); + + result = { + thisAxis: thisAxis, + series: seriesModel, + thisDim: dimNames.name, + otherDim: otherDim, + otherAxisInverse: otherAxisInverse + }; + + }, this); + + }, this); + + return result; + }, + + _renderHandle: function () { + var displaybles = this._displayables; + var handles = displaybles.handles = []; + var handleLabels = displaybles.handleLabels = []; + var barGroup = this._displayables.barGroup; + var size = this._size; + var dataZoomModel = this.dataZoomModel; + + barGroup.add(displaybles.filler = new Rect$2({ + draggable: true, + cursor: getCursor(this._orient), + drift: bind$4(this._onDragMove, this, 'all'), + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragstart: bind$4(this._showDataInfo, this, true), + ondragend: bind$4(this._onDragEnd, this), + onmouseover: bind$4(this._showDataInfo, this, true), + onmouseout: bind$4(this._showDataInfo, this, false), + style: { + fill: dataZoomModel.get('fillerColor'), + textPosition: 'inside' + } + })); + + // Frame border. + barGroup.add(new Rect$2(subPixelOptimizeRect({ + silent: true, + shape: { + x: 0, + y: 0, + width: size[0], + height: size[1] + }, + style: { + stroke: dataZoomModel.get('dataBackgroundColor') + || dataZoomModel.get('borderColor'), + lineWidth: DEFAULT_FRAME_BORDER_WIDTH, + fill: 'rgba(0,0,0,0)' + } + }))); + + each$23([0, 1], function (handleIndex) { + var path = createIcon( + dataZoomModel.get('handleIcon'), + { + cursor: getCursor(this._orient), + draggable: true, + drift: bind$4(this._onDragMove, this, handleIndex), + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: bind$4(this._onDragEnd, this), + onmouseover: bind$4(this._showDataInfo, this, true), + onmouseout: bind$4(this._showDataInfo, this, false) + }, + {x: -1, y: 0, width: 2, height: 2} + ); + + var bRect = path.getBoundingRect(); + this._handleHeight = parsePercent$1(dataZoomModel.get('handleSize'), this._size[1]); + this._handleWidth = bRect.width / bRect.height * this._handleHeight; + + path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle()); + var handleColor = dataZoomModel.get('handleColor'); + // Compatitable with previous version + if (handleColor != null) { + path.style.fill = handleColor; + } + + barGroup.add(handles[handleIndex] = path); + + var textStyleModel = dataZoomModel.textStyleModel; + + this.group.add( + handleLabels[handleIndex] = new Text({ + silent: true, + invisible: true, + style: { + x: 0, y: 0, text: '', + textVerticalAlign: 'middle', + textAlign: 'center', + textFill: textStyleModel.getTextColor(), + textFont: textStyleModel.getFont() + }, + z2: 10 + })); + + }, this); + }, + + /** + * @private + */ + _resetInterval: function () { + var range = this._range = this.dataZoomModel.getPercentRange(); + var viewExtent = this._getViewExtent(); + + this._handleEnds = [ + linearMap$1(range[0], [0, 100], viewExtent, true), + linearMap$1(range[1], [0, 100], viewExtent, true) + ]; + }, + + /** + * @private + * @param {(number|string)} handleIndex 0 or 1 or 'all' + * @param {number} delta + * @return {boolean} changed + */ + _updateInterval: function (handleIndex, delta) { + var dataZoomModel = this.dataZoomModel; + var handleEnds = this._handleEnds; + var viewExtend = this._getViewExtent(); + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + var percentExtent = [0, 100]; + + sliderMove( + delta, + handleEnds, + viewExtend, + dataZoomModel.get('zoomLock') ? 'all' : handleIndex, + minMaxSpan.minSpan != null + ? linearMap$1(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, + minMaxSpan.maxSpan != null + ? linearMap$1(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null + ); + + var lastRange = this._range; + var range = this._range = asc$2([ + linearMap$1(handleEnds[0], viewExtend, percentExtent, true), + linearMap$1(handleEnds[1], viewExtend, percentExtent, true) + ]); + + return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1]; + }, + + /** + * @private + */ + _updateView: function (nonRealtime) { + var displaybles = this._displayables; + var handleEnds = this._handleEnds; + var handleInterval = asc$2(handleEnds.slice()); + var size = this._size; + + each$23([0, 1], function (handleIndex) { + // Handles + var handle = displaybles.handles[handleIndex]; + var handleHeight = this._handleHeight; + handle.attr({ + scale: [handleHeight / 2, handleHeight / 2], + position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2] + }); + }, this); + + // Filler + displaybles.filler.setShape({ + x: handleInterval[0], + y: 0, + width: handleInterval[1] - handleInterval[0], + height: size[1] + }); + + this._updateDataInfo(nonRealtime); + }, + + /** + * @private + */ + _updateDataInfo: function (nonRealtime) { + var dataZoomModel = this.dataZoomModel; + var displaybles = this._displayables; + var handleLabels = displaybles.handleLabels; + var orient = this._orient; + var labelTexts = ['', '']; + + // FIXME + // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter) + if (dataZoomModel.get('showDetail')) { + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + + if (axisProxy) { + var axis = axisProxy.getAxisModel().axis; + var range = this._range; + + var dataInterval = nonRealtime + // See #4434, data and axis are not processed and reset yet in non-realtime mode. + ? axisProxy.calculateDataWindow({ + start: range[0], end: range[1] + }).valueWindow + : axisProxy.getDataValueWindow(); + + labelTexts = [ + this._formatLabel(dataInterval[0], axis), + this._formatLabel(dataInterval[1], axis) + ]; + } + } + + var orderedHandleEnds = asc$2(this._handleEnds.slice()); + + setLabel.call(this, 0); + setLabel.call(this, 1); + + function setLabel(handleIndex) { + // Label + // Text should not transform by barGroup. + // Ignore handlers transform + var barTransform = getTransform( + displaybles.handles[handleIndex].parent, this.group + ); + var direction = transformDirection( + handleIndex === 0 ? 'right' : 'left', barTransform + ); + var offset = this._handleWidth / 2 + LABEL_GAP; + var textPoint = applyTransform$1( + [ + orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), + this._size[1] / 2 + ], + barTransform + ); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction, + textAlign: orient === HORIZONTAL ? direction : 'center', + text: labelTexts[handleIndex] + }); + } + }, + + /** + * @private + */ + _formatLabel: function (value, axis) { + var dataZoomModel = this.dataZoomModel; + var labelFormatter = dataZoomModel.get('labelFormatter'); + + var labelPrecision = dataZoomModel.get('labelPrecision'); + if (labelPrecision == null || labelPrecision === 'auto') { + labelPrecision = axis.getPixelPrecision(); + } + + var valueStr = (value == null || isNaN(value)) + ? '' + // FIXME Glue code + : (axis.type === 'category' || axis.type === 'time') + ? axis.scale.getLabel(Math.round(value)) + // param of toFixed should less then 20. + : value.toFixed(Math.min(labelPrecision, 20)); + + return isFunction$1(labelFormatter) + ? labelFormatter(value, valueStr) + : isString(labelFormatter) + ? labelFormatter.replace('{value}', valueStr) + : valueStr; + }, + + /** + * @private + * @param {boolean} showOrHide true: show, false: hide + */ + _showDataInfo: function (showOrHide) { + // Always show when drgging. + showOrHide = this._dragging || showOrHide; + + var handleLabels = this._displayables.handleLabels; + handleLabels[0].attr('invisible', !showOrHide); + handleLabels[1].attr('invisible', !showOrHide); + }, + + _onDragMove: function (handleIndex, dx, dy) { + this._dragging = true; + + // Transform dx, dy to bar coordination. + var barTransform = this._displayables.barGroup.getLocalTransform(); + var vertex = applyTransform$1([dx, dy], barTransform, true); + + var changed = this._updateInterval(handleIndex, vertex[0]); + + var realtime = this.dataZoomModel.get('realtime'); + + this._updateView(!realtime); + + // Avoid dispatch dataZoom repeatly but range not changed, + // which cause bad visual effect when progressive enabled. + changed && realtime && this._dispatchZoomAction(); + }, + + _onDragEnd: function () { + this._dragging = false; + this._showDataInfo(false); + + // While in realtime mode and stream mode, dispatch action when + // drag end will cause the whole view rerender, which is unnecessary. + var realtime = this.dataZoomModel.get('realtime'); + !realtime && this._dispatchZoomAction(); + }, + + _onClickPanelClick: function (e) { + var size = this._size; + var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY); + + if (localPoint[0] < 0 || localPoint[0] > size[0] + || localPoint[1] < 0 || localPoint[1] > size[1] + ) { + return; + } + + var handleEnds = this._handleEnds; + var center = (handleEnds[0] + handleEnds[1]) / 2; + + var changed = this._updateInterval('all', localPoint[0] - center); + this._updateView(); + changed && this._dispatchZoomAction(); + }, + + /** + * This action will be throttled. + * @private + */ + _dispatchZoomAction: function () { + var range = this._range; + + this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + dataZoomId: this.dataZoomModel.id, + start: range[0], + end: range[1] + }); + }, + + /** + * @private + */ + _findCoordRect: function () { + // Find the grid coresponding to the first axis referred by dataZoom. + var rect; + each$23(this.getTargetCoordInfo(), function (coordInfoList) { + if (!rect && coordInfoList.length) { + var coordSys = coordInfoList[0].model.coordinateSystem; + rect = coordSys.getRect && coordSys.getRect(); + } + }); + if (!rect) { + var width = this.api.getWidth(); + var height = this.api.getHeight(); + rect = { + x: width * 0.2, + y: height * 0.2, + width: width * 0.6, + height: height * 0.6 + }; + } + + return rect; + } + +}); + +function getOtherDim(thisDim) { + // FIXME + // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好 + var map$$1 = {x: 'y', y: 'x', radius: 'angle', angle: 'radius'}; + return map$$1[thisDim]; +} + +function getCursor(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +DataZoomModel.extend({ + + type: 'dataZoom.inside', + + /** + * @protected + */ + defaultOption: { + disabled: false, // Whether disable this inside zoom. + zoomLock: false, // Whether disable zoom but only pan. + zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. + moveOnMouseMove: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. + moveOnMouseWheel: false, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. + preventDefaultMouseMove: true + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Only create one roam controller for each coordinate system. +// one roam controller might be refered by two inside data zoom +// components (for example, one for x and one for y). When user +// pan or zoom, only dispatch one action for those data zoom +// components. + +var ATTR$1 = '\0_ec_dataZoom_roams'; + + +/** + * @public + * @param {module:echarts/ExtensionAPI} api + * @param {Object} dataZoomInfo + * @param {string} dataZoomInfo.coordId + * @param {Function} dataZoomInfo.containsPoint + * @param {Array.} dataZoomInfo.allCoordIds + * @param {string} dataZoomInfo.dataZoomId + * @param {Object} dataZoomInfo.getRange + * @param {Function} dataZoomInfo.getRange.pan + * @param {Function} dataZoomInfo.getRange.zoom + * @param {Function} dataZoomInfo.getRange.scrollMove + * @param {boolean} dataZoomInfo.dataZoomModel + */ +function register$2(api, dataZoomInfo) { + var store = giveStore(api); + var theDataZoomId = dataZoomInfo.dataZoomId; + var theCoordId = dataZoomInfo.coordId; + + // Do clean when a dataZoom changes its target coordnate system. + // Avoid memory leak, dispose all not-used-registered. + each$1(store, function (record, coordId) { + var dataZoomInfos = record.dataZoomInfos; + if (dataZoomInfos[theDataZoomId] + && indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0 + ) { + delete dataZoomInfos[theDataZoomId]; + record.count--; + } + }); + + cleanStore(store); + + var record = store[theCoordId]; + // Create if needed. + if (!record) { + record = store[theCoordId] = { + coordId: theCoordId, + dataZoomInfos: {}, + count: 0 + }; + record.controller = createController(api, record); + record.dispatchAction = curry(dispatchAction$1, api); + } + + // Update reference of dataZoom. + !(record.dataZoomInfos[theDataZoomId]) && record.count++; + record.dataZoomInfos[theDataZoomId] = dataZoomInfo; + + var controllerParams = mergeControllerParams(record.dataZoomInfos); + record.controller.enable(controllerParams.controlType, controllerParams.opt); + + // Consider resize, area should be always updated. + record.controller.setPointerChecker(dataZoomInfo.containsPoint); + + // Update throttle. + createOrUpdate( + record, + 'dispatchAction', + dataZoomInfo.dataZoomModel.get('throttle', true), + 'fixRate' + ); +} + +/** + * @public + * @param {module:echarts/ExtensionAPI} api + * @param {string} dataZoomId + */ +function unregister$1(api, dataZoomId) { + var store = giveStore(api); + + each$1(store, function (record) { + record.controller.dispose(); + var dataZoomInfos = record.dataZoomInfos; + if (dataZoomInfos[dataZoomId]) { + delete dataZoomInfos[dataZoomId]; + record.count--; + } + }); + + cleanStore(store); +} + +/** + * @public + */ +function generateCoordId(coordModel) { + return coordModel.type + '\0_' + coordModel.id; +} + +/** + * Key: coordId, value: {dataZoomInfos: [], count, controller} + * @type {Array.} + */ +function giveStore(api) { + // Mount store on zrender instance, so that we do not + // need to worry about dispose. + var zr = api.getZr(); + return zr[ATTR$1] || (zr[ATTR$1] = {}); +} + +function createController(api, newRecord) { + var controller = new RoamController(api.getZr()); + + each$1(['pan', 'zoom', 'scrollMove'], function (eventName) { + controller.on(eventName, function (event) { + var batch = []; + + each$1(newRecord.dataZoomInfos, function (info) { + // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove, + // moveOnMouseWheel, ...) enabled. + if (!event.isAvailableBehavior(info.dataZoomModel.option)) { + return; + } + + var method = (info.getRange || {})[eventName]; + var range = method && method(newRecord.controller, event); + + !info.dataZoomModel.get('disabled', true) && range && batch.push({ + dataZoomId: info.dataZoomId, + start: range[0], + end: range[1] + }); + }); + + batch.length && newRecord.dispatchAction(batch); + }); + }); + + return controller; +} + +function cleanStore(store) { + each$1(store, function (record, coordId) { + if (!record.count) { + record.controller.dispose(); + delete store[coordId]; + } + }); +} + +/** + * This action will be throttled. + */ +function dispatchAction$1(api, batch) { + api.dispatchAction({ + type: 'dataZoom', + batch: batch + }); +} + +/** + * Merge roamController settings when multiple dataZooms share one roamController. + */ +function mergeControllerParams(dataZoomInfos) { + var controlType; + // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated + // as string, it is probably revert to reserved word by compress tool. See #7411. + var prefix = 'type_'; + var typePriority = { + 'type_true': 2, + 'type_move': 1, + 'type_false': 0, + 'type_undefined': -1 + }; + var preventDefaultMouseMove = true; + + each$1(dataZoomInfos, function (dataZoomInfo) { + var dataZoomModel = dataZoomInfo.dataZoomModel; + var oneType = dataZoomModel.get('disabled', true) + ? false + : dataZoomModel.get('zoomLock', true) + ? 'move' + : true; + if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) { + controlType = oneType; + } + + // Prevent default move event by default. If one false, do not prevent. Otherwise + // users may be confused why it does not work when multiple insideZooms exist. + preventDefaultMouseMove &= dataZoomModel.get('preventDefaultMouseMove', true); + }); + + return { + controlType: controlType, + opt: { + // RoamController will enable all of these functionalities, + // and the final behavior is determined by its event listener + // provided by each inside zoom. + zoomOnMouseWheel: true, + moveOnMouseMove: true, + moveOnMouseWheel: true, + preventDefaultMouseMove: !!preventDefaultMouseMove + } + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var bind$5 = bind; + +var InsideZoomView = DataZoomView.extend({ + + type: 'dataZoom.inside', + + /** + * @override + */ + init: function (ecModel, api) { + /** + * 'throttle' is used in this.dispatchAction, so we save range + * to avoid missing some 'pan' info. + * @private + * @type {Array.} + */ + this._range; + }, + + /** + * @override + */ + render: function (dataZoomModel, ecModel, api, payload) { + InsideZoomView.superApply(this, 'render', arguments); + + // Hance the `throttle` util ensures to preserve command order, + // here simply updating range all the time will not cause missing + // any of the the roam change. + this._range = dataZoomModel.getPercentRange(); + + // Reset controllers. + each$1(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) { + + var allCoordIds = map(coordInfoList, function (coordInfo) { + return generateCoordId(coordInfo.model); + }); + + each$1(coordInfoList, function (coordInfo) { + var coordModel = coordInfo.model; + + var getRange = {}; + each$1(['pan', 'zoom', 'scrollMove'], function (eventName) { + getRange[eventName] = bind$5(roamHandlers[eventName], this, coordInfo, coordSysName); + }, this); + + register$2( + api, + { + coordId: generateCoordId(coordModel), + allCoordIds: allCoordIds, + containsPoint: function (e, x, y) { + return coordModel.coordinateSystem.containPoint([x, y]); + }, + dataZoomId: dataZoomModel.id, + dataZoomModel: dataZoomModel, + getRange: getRange + } + ); + }, this); + + }, this); + }, + + /** + * @override + */ + dispose: function () { + unregister$1(this.api, this.dataZoomModel.id); + InsideZoomView.superApply(this, 'dispose', arguments); + this._range = null; + } + +}); + +var roamHandlers = { + + /** + * @this {module:echarts/component/dataZoom/InsideZoomView} + */ + zoom: function (coordInfo, coordSysName, controller, e) { + var lastRange = this._range; + var range = lastRange.slice(); + + // Calculate transform by the first axis. + var axisModel = coordInfo.axisModels[0]; + if (!axisModel) { + return; + } + + var directionInfo = getDirectionInfo[coordSysName]( + null, [e.originX, e.originY], axisModel, controller, coordInfo + ); + var percentPoint = ( + directionInfo.signal > 0 + ? (directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel) + : (directionInfo.pixel - directionInfo.pixelStart) + ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0]; + + var scale = Math.max(1 / e.scale, 0); + range[0] = (range[0] - percentPoint) * scale + percentPoint; + range[1] = (range[1] - percentPoint) * scale + percentPoint; + + // Restrict range. + var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + + sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan); + + this._range = range; + + if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) { + return range; + } + }, + + /** + * @this {module:echarts/component/dataZoom/InsideZoomView} + */ + pan: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) { + var directionInfo = getDirectionInfo[coordSysName]( + [e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordInfo + ); + + return directionInfo.signal + * (range[1] - range[0]) + * directionInfo.pixel / directionInfo.pixelLength; + }), + + /** + * @this {module:echarts/component/dataZoom/InsideZoomView} + */ + scrollMove: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) { + var directionInfo = getDirectionInfo[coordSysName]( + [0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordInfo + ); + return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta; + }) +}; + +function makeMover(getPercentDelta) { + return function (coordInfo, coordSysName, controller, e) { + var lastRange = this._range; + var range = lastRange.slice(); + + // Calculate transform by the first axis. + var axisModel = coordInfo.axisModels[0]; + if (!axisModel) { + return; + } + + var percentDelta = getPercentDelta( + range, axisModel, coordInfo, coordSysName, controller, e + ); + + sliderMove(percentDelta, range, [0, 100], 'all'); + + this._range = range; + + if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) { + return range; + } + }; +} + +var getDirectionInfo = { + + grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var ret = {}; + var rect = coordInfo.model.coordinateSystem.getRect(); + oldPoint = oldPoint || [0, 0]; + + if (axis.dim === 'x') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } + else { // axis.dim === 'y' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + + polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var ret = {}; + var polar = coordInfo.model.coordinateSystem; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var angleExtent = polar.getAngleAxis().getExtent(); + + oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0]; + newPoint = polar.pointToCoord(newPoint); + + if (axisModel.mainType === 'radiusAxis') { + ret.pixel = newPoint[0] - oldPoint[0]; + // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]); + // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]); + ret.pixelLength = radiusExtent[1] - radiusExtent[0]; + ret.pixelStart = radiusExtent[0]; + ret.signal = axis.inverse ? 1 : -1; + } + else { // 'angleAxis' + ret.pixel = newPoint[1] - oldPoint[1]; + // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]); + // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]); + ret.pixelLength = angleExtent[1] - angleExtent[0]; + ret.pixelStart = angleExtent[0]; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + + singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var rect = coordInfo.model.coordinateSystem.getRect(); + var ret = {}; + + oldPoint = oldPoint || [0, 0]; + + if (axis.orient === 'horizontal') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } + else { // 'vertical' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerProcessor({ + + // `dataZoomProcessor` will only be performed in needed series. Consider if + // there is a line series and a pie series, it is better not to update the + // line series if only pie series is needed to be updated. + getTargetSeries: function (ecModel) { + var seriesModelMap = createHashMap(); + + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) { + var axisProxy = dataZoomModel.getAxisProxy(dimNames.name, axisIndex); + each$1(axisProxy.getTargetSeriesModels(), function (seriesModel) { + seriesModelMap.set(seriesModel.uid, seriesModel); + }); + }); + }); + + return seriesModelMap; + }, + + modifyOutputEnd: true, + + // Consider appendData, where filter should be performed. Because data process is + // in block mode currently, it is not need to worry about that the overallProgress + // execute every frame. + overallReset: function (ecModel, api) { + + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // We calculate window and reset axis here but not in model + // init stage and not after action dispatch handler, because + // reset should be called after seriesData.restoreData. + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) { + dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel, api); + }); + + // Caution: data zoom filtering is order sensitive when using + // percent range and no min/max/scale set on axis. + // For example, we have dataZoom definition: + // [ + // {xAxisIndex: 0, start: 30, end: 70}, + // {yAxisIndex: 0, start: 20, end: 80} + // ] + // In this case, [20, 80] of y-dataZoom should be based on data + // that have filtered by x-dataZoom using range of [30, 70], + // but should not be based on full raw data. Thus sliding + // x-dataZoom will change both ranges of xAxis and yAxis, + // while sliding y-dataZoom will only change the range of yAxis. + // So we should filter x-axis after reset x-axis immediately, + // and then reset y-axis and filter y-axis. + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) { + dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel, api); + }); + }); + + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // Fullfill all of the range props so that user + // is able to get them from chart.getOption(). + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + var percentRange = axisProxy.getDataPercentWindow(); + var valueRange = axisProxy.getDataValueWindow(); + + dataZoomModel.setRawRange({ + start: percentRange[0], + end: percentRange[1], + startValue: valueRange[0], + endValue: valueRange[1] + }, true); + }); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerAction('dataZoom', function (payload, ecModel) { + + var linkedNodesFinder = createLinkedNodesFinder( + bind(ecModel.eachComponent, ecModel, 'dataZoom'), + eachAxisDim$1, + function (model, dimNames) { + return model.get(dimNames.axisIndex); + } + ); + + var effectedModels = []; + + ecModel.eachComponent( + {mainType: 'dataZoom', query: payload}, + function (model, index) { + effectedModels.push.apply( + effectedModels, linkedNodesFinder(model).nodes + ); + } + ); + + each$1(effectedModels, function (dataZoomModel, index) { + dataZoomModel.setRawRange({ + start: payload.start, + end: payload.end, + startValue: payload.startValue, + endValue: payload.endValue + }); + }); + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * DataZoom component entry + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$24 = each$1; + +var preprocessor$2 = function (option) { + var visualMap = option && option.visualMap; + + if (!isArray(visualMap)) { + visualMap = visualMap ? [visualMap] : []; + } + + each$24(visualMap, function (opt) { + if (!opt) { + return; + } + + // rename splitList to pieces + if (has$1(opt, 'splitList') && !has$1(opt, 'pieces')) { + opt.pieces = opt.splitList; + delete opt.splitList; + } + + var pieces = opt.pieces; + if (pieces && isArray(pieces)) { + each$24(pieces, function (piece) { + if (isObject$1(piece)) { + if (has$1(piece, 'start') && !has$1(piece, 'min')) { + piece.min = piece.start; + } + if (has$1(piece, 'end') && !has$1(piece, 'max')) { + piece.max = piece.end; + } + } + }); + } + }); +}; + +function has$1(obj, name) { + return obj && obj.hasOwnProperty && obj.hasOwnProperty(name); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +ComponentModel.registerSubTypeDefaulter('visualMap', function (option) { + // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used. + return ( + !option.categories + && ( + !( + option.pieces + ? option.pieces.length > 0 + : option.splitNumber > 0 + ) + || option.calculable + ) + ) + ? 'continuous' : 'piecewise'; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var VISUAL_PRIORITY = PRIORITY.VISUAL.COMPONENT; + +registerVisual(VISUAL_PRIORITY, { + createOnAllSeries: true, + reset: function (seriesModel, ecModel) { + var resetDefines = []; + ecModel.eachComponent('visualMap', function (visualMapModel) { + var pipelineContext = seriesModel.pipelineContext; + if (!visualMapModel.isTargetSeries(seriesModel) + || (pipelineContext && pipelineContext.large) + ) { + return; + } + + resetDefines.push(incrementalApplyVisual( + visualMapModel.stateList, + visualMapModel.targetVisuals, + bind(visualMapModel.getValueState, visualMapModel), + visualMapModel.getDataDimension(seriesModel.getData()) + )); + }); + + return resetDefines; + } +}); + +// Only support color. +registerVisual(VISUAL_PRIORITY, { + createOnAllSeries: true, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + var visualMetaList = []; + + ecModel.eachComponent('visualMap', function (visualMapModel) { + if (visualMapModel.isTargetSeries(seriesModel)) { + var visualMeta = visualMapModel.getVisualMeta( + bind(getColorVisual, null, seriesModel, visualMapModel) + ) || {stops: [], outerColors: []}; + + var concreteDim = visualMapModel.getDataDimension(data); + var dimInfo = data.getDimensionInfo(concreteDim); + if (dimInfo != null) { + // visualMeta.dimension should be dimension index, but not concrete dimension. + visualMeta.dimension = dimInfo.index; + visualMetaList.push(visualMeta); + } + } + }); + + // console.log(JSON.stringify(visualMetaList.map(a => a.stops))); + seriesModel.getData().setVisual('visualMeta', visualMetaList); + } +}); + +// FIXME +// performance and export for heatmap? +// value can be Infinity or -Infinity +function getColorVisual(seriesModel, visualMapModel, value, valueState) { + var mappings = visualMapModel.targetVisuals[valueState]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + var resultVisual = { + color: seriesModel.getData().getVisual('color') // default color. + }; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + var mapping = mappings[ + type === 'opacity' ? '__alphaForOpacity' : type + ]; + mapping && mapping.applyVisual(value, getVisual, setVisual); + } + + return resultVisual.color; + + function getVisual(key) { + return resultVisual[key]; + } + + function setVisual(key, value) { + resultVisual[key] = value; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @file Visual mapping. + */ + +var visualDefault = { + + /** + * @public + */ + get: function (visualType, key, isCategory) { + var value = clone( + (defaultOption$3[visualType] || {})[key] + ); + + return isCategory + ? (isArray(value) ? value[value.length - 1] : value) + : value; + } + +}; + +var defaultOption$3 = { + + color: { + active: ['#006edd', '#e0ffff'], + inactive: ['rgba(0,0,0,0)'] + }, + + colorHue: { + active: [0, 360], + inactive: [0, 0] + }, + + colorSaturation: { + active: [0.3, 1], + inactive: [0, 0] + }, + + colorLightness: { + active: [0.9, 0.5], + inactive: [0, 0] + }, + + colorAlpha: { + active: [0.3, 1], + inactive: [0, 0] + }, + + opacity: { + active: [0.3, 1], + inactive: [0, 0] + }, + + symbol: { + active: ['circle', 'roundRect', 'diamond'], + inactive: ['none'] + }, + + symbolSize: { + active: [10, 50], + inactive: [0, 0] + } +}; + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var mapVisual$2 = VisualMapping.mapVisual; +var eachVisual = VisualMapping.eachVisual; +var isArray$3 = isArray; +var each$25 = each$1; +var asc$3 = asc; +var linearMap$2 = linearMap; +var noop$2 = noop; + +var VisualMapModel = extendComponentModel({ + + type: 'visualMap', + + dependencies: ['series'], + + /** + * @readOnly + * @type {Array.} + */ + stateList: ['inRange', 'outOfRange'], + + /** + * @readOnly + * @type {Array.} + */ + replacableOptionKeys: [ + 'inRange', 'outOfRange', 'target', 'controller', 'color' + ], + + /** + * [lowerBound, upperBound] + * + * @readOnly + * @type {Array.} + */ + dataBound: [-Infinity, Infinity], + + /** + * @readOnly + * @type {string|Object} + */ + layoutMode: {type: 'box', ignoreSize: true}, + + /** + * @protected + */ + defaultOption: { + show: true, + + zlevel: 0, + z: 4, + + seriesIndex: 'all', // 'all' or null/undefined: all series. + // A number or an array of number: the specified series. + + // set min: 0, max: 200, only for campatible with ec2. + // In fact min max should not have default value. + min: 0, // min value, must specified if pieces is not specified. + max: 200, // max value, must specified if pieces is not specified. + + dimension: null, + inRange: null, // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha', + // 'symbol', 'symbolSize' + outOfRange: null, // 'color', 'colorHue', 'colorSaturation', + // 'colorLightness', 'colorAlpha', + // 'symbol', 'symbolSize' + + left: 0, // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px) + right: null, // The same as left. + top: null, // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px) + bottom: 0, // The same as top. + + itemWidth: null, + itemHeight: null, + inverse: false, + orient: 'vertical', // 'horizontal' ¦ 'vertical' + + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', // 值域边框颜色 + contentColor: '#5793f3', + inactiveColor: '#aaa', + borderWidth: 0, // 值域边框线宽,单位px,默认为0(无边框) + padding: 5, // 值域内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + textGap: 10, // + precision: 0, // 小数精度,默认为0,无小数点 + color: null, //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange) + + formatter: null, + text: null, // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值 + textStyle: { + color: '#333' // 值域文字颜色 + } + }, + + /** + * @protected + */ + init: function (option, parentModel, ecModel) { + + /** + * @private + * @type {Array.} + */ + this._dataExtent; + + /** + * @readOnly + */ + this.targetVisuals = {}; + + /** + * @readOnly + */ + this.controllerVisuals = {}; + + /** + * @readOnly + */ + this.textStyleModel; + + /** + * [width, height] + * @readOnly + * @type {Array.} + */ + this.itemSize; + + this.mergeDefaultAndTheme(option, ecModel); + }, + + /** + * @protected + */ + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + + // FIXME + // necessary? + // Disable realtime view update if canvas is not supported. + if (!env$1.canvasSupported) { + thisOption.realtime = false; + } + + !isInit && replaceVisualOption( + thisOption, newOption, this.replacableOptionKeys + ); + + this.textStyleModel = this.getModel('textStyle'); + + this.resetItemSize(); + + this.completeVisualOption(); + }, + + /** + * @protected + */ + resetVisual: function (supplementVisualOption) { + var stateList = this.stateList; + supplementVisualOption = bind(supplementVisualOption, this); + + this.controllerVisuals = createVisualMappings( + this.option.controller, stateList, supplementVisualOption + ); + this.targetVisuals = createVisualMappings( + this.option.target, stateList, supplementVisualOption + ); + }, + + /** + * @protected + * @return {Array.} An array of series indices. + */ + getTargetSeriesIndices: function () { + var optionSeriesIndex = this.option.seriesIndex; + var seriesIndices = []; + + if (optionSeriesIndex == null || optionSeriesIndex === 'all') { + this.ecModel.eachSeries(function (seriesModel, index) { + seriesIndices.push(index); + }); + } + else { + seriesIndices = normalizeToArray(optionSeriesIndex); + } + + return seriesIndices; + }, + + /** + * @public + */ + eachTargetSeries: function (callback, context) { + each$1(this.getTargetSeriesIndices(), function (seriesIndex) { + callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex)); + }, this); + }, + + /** + * @pubilc + */ + isTargetSeries: function (seriesModel) { + var is = false; + this.eachTargetSeries(function (model) { + model === seriesModel && (is = true); + }); + return is; + }, + + /** + * @example + * this.formatValueText(someVal); // format single numeric value to text. + * this.formatValueText(someVal, true); // format single category value to text. + * this.formatValueText([min, max]); // format numeric min-max to text. + * this.formatValueText([this.dataBound[0], max]); // using data lower bound. + * this.formatValueText([min, this.dataBound[1]]); // using data upper bound. + * + * @param {number|Array.} value Real value, or this.dataBound[0 or 1]. + * @param {boolean} [isCategory=false] Only available when value is number. + * @param {Array.} edgeSymbols Open-close symbol when value is interval. + * @return {string} + * @protected + */ + formatValueText: function (value, isCategory, edgeSymbols) { + var option = this.option; + var precision = option.precision; + var dataBound = this.dataBound; + var formatter = option.formatter; + var isMinMax; + var textValue; + edgeSymbols = edgeSymbols || ['<', '>']; + + if (isArray(value)) { + value = value.slice(); + isMinMax = true; + } + + textValue = isCategory + ? value + : (isMinMax + ? [toFixed(value[0]), toFixed(value[1])] + : toFixed(value) + ); + + if (isString(formatter)) { + return formatter + .replace('{value}', isMinMax ? textValue[0] : textValue) + .replace('{value2}', isMinMax ? textValue[1] : textValue); + } + else if (isFunction$1(formatter)) { + return isMinMax + ? formatter(value[0], value[1]) + : formatter(value); + } + + if (isMinMax) { + if (value[0] === dataBound[0]) { + return edgeSymbols[0] + ' ' + textValue[1]; + } + else if (value[1] === dataBound[1]) { + return edgeSymbols[1] + ' ' + textValue[0]; + } + else { + return textValue[0] + ' - ' + textValue[1]; + } + } + else { // Format single value (includes category case). + return textValue; + } + + function toFixed(val) { + return val === dataBound[0] + ? 'min' + : val === dataBound[1] + ? 'max' + : (+val).toFixed(Math.min(precision, 20)); + } + }, + + /** + * @protected + */ + resetExtent: function () { + var thisOption = this.option; + + // Can not calculate data extent by data here. + // Because series and data may be modified in processing stage. + // So we do not support the feature "auto min/max". + + var extent = asc$3([thisOption.min, thisOption.max]); + + this._dataExtent = extent; + }, + + /** + * @public + * @param {module:echarts/data/List} list + * @return {string} Concrete dimention. If return null/undefined, + * no dimension used. + */ + getDataDimension: function (list) { + var optDim = this.option.dimension; + var listDimensions = list.dimensions; + if (optDim == null && !listDimensions.length) { + return; + } + + if (optDim != null) { + return list.getDimension(optDim); + } + + var dimNames = list.dimensions; + for (var i = dimNames.length - 1; i >= 0; i--) { + var dimName = dimNames[i]; + var dimInfo = list.getDimensionInfo(dimName); + if (!dimInfo.isCalculationCoord) { + return dimName; + } + } + }, + + /** + * @public + * @override + */ + getExtent: function () { + return this._dataExtent.slice(); + }, + + /** + * @protected + */ + completeVisualOption: function () { + var ecModel = this.ecModel; + var thisOption = this.option; + var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange}; + + var target = thisOption.target || (thisOption.target = {}); + var controller = thisOption.controller || (thisOption.controller = {}); + + merge(target, base); // Do not override + merge(controller, base); // Do not override + + var isCategory = this.isCategory(); + + completeSingle.call(this, target); + completeSingle.call(this, controller); + completeInactive.call(this, target, 'inRange', 'outOfRange'); + // completeInactive.call(this, target, 'outOfRange', 'inRange'); + completeController.call(this, controller); + + function completeSingle(base) { + // Compatible with ec2 dataRange.color. + // The mapping order of dataRange.color is: [high value, ..., low value] + // whereas inRange.color and outOfRange.color is [low value, ..., high value] + // Notice: ec2 has no inverse. + if (isArray$3(thisOption.color) + // If there has been inRange: {symbol: ...}, adding color is a mistake. + // So adding color only when no inRange defined. + && !base.inRange + ) { + base.inRange = {color: thisOption.color.slice().reverse()}; + } + + // Compatible with previous logic, always give a defautl color, otherwise + // simple config with no inRange and outOfRange will not work. + // Originally we use visualMap.color as the default color, but setOption at + // the second time the default color will be erased. So we change to use + // constant DEFAULT_COLOR. + // If user do not want the defualt color, set inRange: {color: null}. + base.inRange = base.inRange || {color: ecModel.get('gradientColor')}; + + // If using shortcut like: {inRange: 'symbol'}, complete default value. + each$25(this.stateList, function (state) { + var visualType = base[state]; + + if (isString(visualType)) { + var defa = visualDefault.get(visualType, 'active', isCategory); + if (defa) { + base[state] = {}; + base[state][visualType] = defa; + } + else { + // Mark as not specified. + delete base[state]; + } + } + }, this); + } + + function completeInactive(base, stateExist, stateAbsent) { + var optExist = base[stateExist]; + var optAbsent = base[stateAbsent]; + + if (optExist && !optAbsent) { + optAbsent = base[stateAbsent] = {}; + each$25(optExist, function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + + var defa = visualDefault.get(visualType, 'inactive', isCategory); + + if (defa != null) { + optAbsent[visualType] = defa; + + // Compatibable with ec2: + // Only inactive color to rgba(0,0,0,0) can not + // make label transparent, so use opacity also. + if (visualType === 'color' + && !optAbsent.hasOwnProperty('opacity') + && !optAbsent.hasOwnProperty('colorAlpha') + ) { + optAbsent.opacity = [0, 0]; + } + } + }); + } + } + + function completeController(controller) { + var symbolExists = (controller.inRange || {}).symbol + || (controller.outOfRange || {}).symbol; + var symbolSizeExists = (controller.inRange || {}).symbolSize + || (controller.outOfRange || {}).symbolSize; + var inactiveColor = this.get('inactiveColor'); + + each$25(this.stateList, function (state) { + + var itemSize = this.itemSize; + var visuals = controller[state]; + + // Set inactive color for controller if no other color + // attr (like colorAlpha) specified. + if (!visuals) { + visuals = controller[state] = { + color: isCategory ? inactiveColor : [inactiveColor] + }; + } + + // Consistent symbol and symbolSize if not specified. + if (visuals.symbol == null) { + visuals.symbol = symbolExists + && clone(symbolExists) + || (isCategory ? 'roundRect' : ['roundRect']); + } + if (visuals.symbolSize == null) { + visuals.symbolSize = symbolSizeExists + && clone(symbolSizeExists) + || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]); + } + + // Filter square and none. + visuals.symbol = mapVisual$2(visuals.symbol, function (symbol) { + return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol; + }); + + // Normalize symbolSize + var symbolSize = visuals.symbolSize; + + if (symbolSize != null) { + var max = -Infinity; + // symbolSize can be object when categories defined. + eachVisual(symbolSize, function (value) { + value > max && (max = value); + }); + visuals.symbolSize = mapVisual$2(symbolSize, function (value) { + return linearMap$2(value, [0, max], [0, itemSize[0]], true); + }); + } + + }, this); + } + }, + + /** + * @protected + */ + resetItemSize: function () { + this.itemSize = [ + parseFloat(this.get('itemWidth')), + parseFloat(this.get('itemHeight')) + ]; + }, + + /** + * @public + */ + isCategory: function () { + return !!this.option.categories; + }, + + /** + * @public + * @abstract + */ + setSelected: noop$2, + + /** + * @public + * @abstract + * @param {*|module:echarts/data/List} valueOrData + * @param {number} dataIndex + * @return {string} state See this.stateList + */ + getValueState: noop$2, + + /** + * FIXME + * Do not publish to thirt-part-dev temporarily + * util the interface is stable. (Should it return + * a function but not visual meta?) + * + * @pubilc + * @abstract + * @param {Function} getColorVisual + * params: value, valueState + * return: color + * @return {Object} visualMeta + * should includes {stops, outerColors} + * outerColor means [colorBeyondMinValue, colorBeyondMaxValue] + */ + getVisualMeta: noop$2 + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Constant +var DEFAULT_BAR_BOUND = [20, 140]; + +var ContinuousModel = VisualMapModel.extend({ + + type: 'visualMap.continuous', + + /** + * @protected + */ + defaultOption: { + align: 'auto', // 'auto', 'left', 'right', 'top', 'bottom' + calculable: false, // This prop effect default component type determine, + // See echarts/component/visualMap/typeDefaulter. + range: null, // selected range. In default case `range` is [min, max] + // and can auto change along with modification of min max, + // util use specifid a range. + realtime: true, // Whether realtime update. + itemHeight: null, // The length of the range control edge. + itemWidth: null, // The length of the other side. + hoverLink: true, // Enable hover highlight. + hoverLinkDataSize: null, // The size of hovered data. + hoverLinkOnHandle: null // Whether trigger hoverLink when hover handle. + // If not specified, follow the value of `realtime`. + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + ContinuousModel.superApply(this, 'optionUpdated', arguments); + + this.resetExtent(); + + this.resetVisual(function (mappingOption) { + mappingOption.mappingMethod = 'linear'; + mappingOption.dataExtent = this.getExtent(); + }); + + this._resetRange(); + }, + + /** + * @protected + * @override + */ + resetItemSize: function () { + ContinuousModel.superApply(this, 'resetItemSize', arguments); + + var itemSize = this.itemSize; + + this._orient === 'horizontal' && itemSize.reverse(); + + (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]); + (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]); + }, + + /** + * @private + */ + _resetRange: function () { + var dataExtent = this.getExtent(); + var range = this.option.range; + + if (!range || range.auto) { + // `range` should always be array (so we dont use other + // value like 'auto') for user-friend. (consider getOption). + dataExtent.auto = 1; + this.option.range = dataExtent; + } + else if (isArray(range)) { + if (range[0] > range[1]) { + range.reverse(); + } + range[0] = Math.max(range[0], dataExtent[0]); + range[1] = Math.min(range[1], dataExtent[1]); + } + }, + + /** + * @protected + * @override + */ + completeVisualOption: function () { + VisualMapModel.prototype.completeVisualOption.apply(this, arguments); + + each$1(this.stateList, function (state) { + var symbolSize = this.option.controller[state].symbolSize; + if (symbolSize && symbolSize[0] !== symbolSize[1]) { + symbolSize[0] = 0; // For good looking. + } + }, this); + }, + + /** + * @override + */ + setSelected: function (selected) { + this.option.range = selected.slice(); + this._resetRange(); + }, + + /** + * @public + */ + getSelected: function () { + var dataExtent = this.getExtent(); + + var dataInterval = asc( + (this.get('range') || []).slice() + ); + + // Clamp + dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]); + dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]); + dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]); + dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]); + + return dataInterval; + }, + + /** + * @override + */ + getValueState: function (value) { + var range = this.option.range; + var dataExtent = this.getExtent(); + + // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'. + // range[1] is processed likewise. + return ( + (range[0] <= dataExtent[0] || range[0] <= value) + && (range[1] >= dataExtent[1] || value <= range[1]) + ) ? 'inRange' : 'outOfRange'; + }, + + /** + * @params {Array.} range target value: range[0] <= value && value <= range[1] + * @return {Array.} [{seriesId, dataIndices: >}, ...] + */ + findTargetDataIndices: function (range) { + var result = []; + + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + + data.each(this.getDataDimension(data), function (value, dataIndex) { + range[0] <= value && value <= range[1] && dataIndices.push(dataIndex); + }, this); + + result.push({seriesId: seriesModel.id, dataIndex: dataIndices}); + }, this); + + return result; + }, + + /** + * @implement + */ + getVisualMeta: function (getColorVisual) { + var oVals = getColorStopValues(this, 'outOfRange', this.getExtent()); + var iVals = getColorStopValues(this, 'inRange', this.option.range.slice()); + var stops = []; + + function setStop(value, valueState) { + stops.push({ + value: value, + color: getColorVisual(value, valueState) + }); + } + + // Format to: outOfRange -- inRange -- outOfRange. + var iIdx = 0; + var oIdx = 0; + var iLen = iVals.length; + var oLen = oVals.length; + + for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) { + // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored. + if (oVals[oIdx] < iVals[iIdx]) { + setStop(oVals[oIdx], 'outOfRange'); + } + } + for (var first = 1; iIdx < iLen; iIdx++, first = 0) { + // If range is full, value beyond min, max will be clamped. + // make a singularity + first && stops.length && setStop(iVals[iIdx], 'outOfRange'); + setStop(iVals[iIdx], 'inRange'); + } + for (var first = 1; oIdx < oLen; oIdx++) { + if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) { + // make a singularity + if (first) { + stops.length && setStop(stops[stops.length - 1].value, 'outOfRange'); + first = 0; + } + setStop(oVals[oIdx], 'outOfRange'); + } + } + + var stopsLen = stops.length; + + return { + stops: stops, + outerColors: [ + stopsLen ? stops[0].color : 'transparent', + stopsLen ? stops[stopsLen - 1].color : 'transparent' + ] + }; + } + +}); + +function getColorStopValues(visualMapModel, valueState, dataExtent) { + if (dataExtent[0] === dataExtent[1]) { + return dataExtent.slice(); + } + + // When using colorHue mapping, it is not linear color any more. + // Moreover, canvas gradient seems not to be accurate linear. + // FIXME + // Should be arbitrary value 100? or based on pixel size? + var count = 200; + var step = (dataExtent[1] - dataExtent[0]) / count; + + var value = dataExtent[0]; + var stopValues = []; + for (var i = 0; i <= count && value < dataExtent[1]; i++) { + stopValues.push(value); + value += step; + } + stopValues.push(dataExtent[1]); + + return stopValues; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var VisualMapView = extendComponentView({ + + type: 'visualMap', + + /** + * @readOnly + * @type {Object} + */ + autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1}, + + init: function (ecModel, api) { + /** + * @readOnly + * @type {module:echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @readOnly + * @type {module:echarts/ExtensionAPI} + */ + this.api = api; + + /** + * @readOnly + * @type {module:echarts/component/visualMap/visualMapModel} + */ + this.visualMapModel; + }, + + /** + * @protected + */ + render: function (visualMapModel, ecModel, api, payload) { + this.visualMapModel = visualMapModel; + + if (visualMapModel.get('show') === false) { + this.group.removeAll(); + return; + } + + this.doRender.apply(this, arguments); + }, + + /** + * @protected + */ + renderBackground: function (group) { + var visualMapModel = this.visualMapModel; + var padding = normalizeCssArray$1(visualMapModel.get('padding') || 0); + var rect = group.getBoundingRect(); + + group.add(new Rect({ + z2: -1, // Lay background rect on the lowest layer. + silent: true, + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[3] + padding[1], + height: rect.height + padding[0] + padding[2] + }, + style: { + fill: visualMapModel.get('backgroundColor'), + stroke: visualMapModel.get('borderColor'), + lineWidth: visualMapModel.get('borderWidth') + } + })); + }, + + /** + * @protected + * @param {number} targetValue can be Infinity or -Infinity + * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize' + * @param {Object} [opts] + * @param {string=} [opts.forceState] Specify state, instead of using getValueState method. + * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget. + * @return {*} Visual value. + */ + getControllerVisual: function (targetValue, visualCluster, opts) { + opts = opts || {}; + + var forceState = opts.forceState; + var visualMapModel = this.visualMapModel; + var visualObj = {}; + + // Default values. + if (visualCluster === 'symbol') { + visualObj.symbol = visualMapModel.get('itemSymbol'); + } + if (visualCluster === 'color') { + var defaultColor = visualMapModel.get('contentColor'); + visualObj.color = defaultColor; + } + + function getter(key) { + return visualObj[key]; + } + + function setter(key, value) { + visualObj[key] = value; + } + + var mappings = visualMapModel.controllerVisuals[ + forceState || visualMapModel.getValueState(targetValue) + ]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + + each$1(visualTypes, function (type) { + var visualMapping = mappings[type]; + if (opts.convertOpacityToAlpha && type === 'opacity') { + type = 'colorAlpha'; + visualMapping = mappings.__alphaForOpacity; + } + if (VisualMapping.dependsOn(type, visualCluster)) { + visualMapping && visualMapping.applyVisual( + targetValue, getter, setter + ); + } + }); + + return visualObj[visualCluster]; + }, + + /** + * @protected + */ + positionGroup: function (group) { + var model = this.visualMapModel; + var api = this.api; + + positionElement( + group, + model.getBoxLayoutParams(), + {width: api.getWidth(), height: api.getHeight()} + ); + }, + + /** + * @protected + * @abstract + */ + doRender: noop + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\ + * @param {module:echarts/ExtensionAPI} api + * @param {Array.} itemSize always [short, long] + * @return {string} 'left' or 'right' or 'top' or 'bottom' + */ +function getItemAlign(visualMapModel, api, itemSize) { + var modelOption = visualMapModel.option; + var itemAlign = modelOption.align; + + if (itemAlign != null && itemAlign !== 'auto') { + return itemAlign; + } + + // Auto decision align. + var ecSize = {width: api.getWidth(), height: api.getHeight()}; + var realIndex = modelOption.orient === 'horizontal' ? 1 : 0; + + var paramsSet = [ + ['left', 'right', 'width'], + ['top', 'bottom', 'height'] + ]; + var reals = paramsSet[realIndex]; + var fakeValue = [0, null, 10]; + + var layoutInput = {}; + for (var i = 0; i < 3; i++) { + layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i]; + layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]]; + } + + var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex]; + var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding); + + return reals[ + (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 + < ecSize[rParam[1]] * 0.5 ? 0 : 1 + ]; +} + +/** + * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and + * dataIndexInside means filtered index. + */ +function convertDataIndex(batch) { + each$1(batch || [], function (batchItem) { + if (batch.dataIndex != null) { + batch.dataIndexInside = batch.dataIndex; + batch.dataIndex = null; + } + }); + return batch; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var linearMap$3 = linearMap; +var each$26 = each$1; +var mathMin$7 = Math.min; +var mathMax$7 = Math.max; + +// Arbitrary value +var HOVER_LINK_SIZE = 12; +var HOVER_LINK_OUT = 6; + +// Notice: +// Any "interval" should be by the order of [low, high]. +// "handle0" (handleIndex === 0) maps to +// low data value: this._dataInterval[0] and has low coord. +// "handle1" (handleIndex === 1) maps to +// high data value: this._dataInterval[1] and has high coord. +// The logic of transform is implemented in this._createBarGroup. + +var ContinuousView = VisualMapView.extend({ + + type: 'visualMap.continuous', + + /** + * @override + */ + init: function () { + + ContinuousView.superApply(this, 'init', arguments); + + /** + * @private + */ + this._shapes = {}; + + /** + * @private + */ + this._dataInterval = []; + + /** + * @private + */ + this._handleEnds = []; + + /** + * @private + */ + this._orient; + + /** + * @private + */ + this._useHandle; + + /** + * @private + */ + this._hoverLinkDataIndices = []; + + /** + * @private + */ + this._dragging; + + /** + * @private + */ + this._hovering; + }, + + /** + * @protected + * @override + */ + doRender: function (visualMapModel, ecModel, api, payload) { + if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) { + this._buildView(); + } + }, + + /** + * @private + */ + _buildView: function () { + this.group.removeAll(); + + var visualMapModel = this.visualMapModel; + var thisGroup = this.group; + + this._orient = visualMapModel.get('orient'); + this._useHandle = visualMapModel.get('calculable'); + + this._resetInterval(); + + this._renderBar(thisGroup); + + var dataRangeText = visualMapModel.get('text'); + this._renderEndsText(thisGroup, dataRangeText, 0); + this._renderEndsText(thisGroup, dataRangeText, 1); + + // Do this for background size calculation. + this._updateView(true); + + // After updating view, inner shapes is built completely, + // and then background can be rendered. + this.renderBackground(thisGroup); + + // Real update view + this._updateView(); + + this._enableHoverLinkToSeries(); + this._enableHoverLinkFromSeries(); + + this.positionGroup(thisGroup); + }, + + /** + * @private + */ + _renderEndsText: function (group, dataRangeText, endsIndex) { + if (!dataRangeText) { + return; + } + + // Compatible with ec2, text[0] map to high value, text[1] map low value. + var text = dataRangeText[1 - endsIndex]; + text = text != null ? text + '' : ''; + + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var itemSize = visualMapModel.itemSize; + + var barGroup = this._shapes.barGroup; + var position = this._applyTransform( + [ + itemSize[0] / 2, + endsIndex === 0 ? -textGap : itemSize[1] + textGap + ], + barGroup + ); + var align = this._applyTransform( + endsIndex === 0 ? 'bottom' : 'top', + barGroup + ); + var orient = this._orient; + var textStyleModel = this.visualMapModel.textStyleModel; + + this.group.add(new Text({ + style: { + x: position[0], + y: position[1], + textVerticalAlign: orient === 'horizontal' ? 'middle' : align, + textAlign: orient === 'horizontal' ? align : 'center', + text: text, + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + })); + }, + + /** + * @private + */ + _renderBar: function (targetGroup) { + var visualMapModel = this.visualMapModel; + var shapes = this._shapes; + var itemSize = visualMapModel.itemSize; + var orient = this._orient; + var useHandle = this._useHandle; + var itemAlign = getItemAlign(visualMapModel, this.api, itemSize); + var barGroup = shapes.barGroup = this._createBarGroup(itemAlign); + + // Bar + barGroup.add(shapes.outOfRange = createPolygon()); + barGroup.add(shapes.inRange = createPolygon( + null, + useHandle ? getCursor$1(this._orient) : null, + bind(this._dragHandle, this, 'all', false), + bind(this._dragHandle, this, 'all', true) + )); + + var textRect = visualMapModel.textStyleModel.getTextRect('国'); + var textSize = mathMax$7(textRect.width, textRect.height); + + // Handle + if (useHandle) { + shapes.handleThumbs = []; + shapes.handleLabels = []; + shapes.handleLabelPoints = []; + + this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign); + this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign); + } + + this._createIndicator(barGroup, itemSize, textSize, orient); + + targetGroup.add(barGroup); + }, + + /** + * @private + */ + _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) { + var onDrift = bind(this._dragHandle, this, handleIndex, false); + var onDragEnd = bind(this._dragHandle, this, handleIndex, true); + var handleThumb = createPolygon( + createHandlePoints(handleIndex, textSize), + getCursor$1(this._orient), + onDrift, + onDragEnd + ); + handleThumb.position[0] = itemSize[0]; + barGroup.add(handleThumb); + + // Text is always horizontal layout but should not be effected by + // transform (orient/inverse). So label is built separately but not + // use zrender/graphic/helper/RectText, and is located based on view + // group (according to handleLabelPoint) but not barGroup. + var textStyleModel = this.visualMapModel.textStyleModel; + var handleLabel = new Text({ + draggable: true, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd, + style: { + x: 0, y: 0, text: '', + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + }); + this.group.add(handleLabel); + + var handleLabelPoint = [ + orient === 'horizontal' + ? textSize / 2 + : textSize * 1.5, + orient === 'horizontal' + ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5)) + : (handleIndex === 0 ? -textSize / 2 : textSize / 2) + ]; + + var shapes = this._shapes; + shapes.handleThumbs[handleIndex] = handleThumb; + shapes.handleLabelPoints[handleIndex] = handleLabelPoint; + shapes.handleLabels[handleIndex] = handleLabel; + }, + + /** + * @private + */ + _createIndicator: function (barGroup, itemSize, textSize, orient) { + var indicator = createPolygon([[0, 0]], 'move'); + indicator.position[0] = itemSize[0]; + indicator.attr({invisible: true, silent: true}); + barGroup.add(indicator); + + var textStyleModel = this.visualMapModel.textStyleModel; + var indicatorLabel = new Text({ + silent: true, + invisible: true, + style: { + x: 0, y: 0, text: '', + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + }); + this.group.add(indicatorLabel); + + var indicatorLabelPoint = [ + orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3, + 0 + ]; + + var shapes = this._shapes; + shapes.indicator = indicator; + shapes.indicatorLabel = indicatorLabel; + shapes.indicatorLabelPoint = indicatorLabelPoint; + }, + + /** + * @private + */ + _dragHandle: function (handleIndex, isEnd, dx, dy) { + if (!this._useHandle) { + return; + } + + this._dragging = !isEnd; + + if (!isEnd) { + // Transform dx, dy to bar coordination. + var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true); + this._updateInterval(handleIndex, vertex[1]); + + // Considering realtime, update view should be executed + // before dispatch action. + this._updateView(); + } + + // dragEnd do not dispatch action when realtime. + if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: this._dataInterval.slice() + }); + } + + if (isEnd) { + !this._hovering && this._clearHoverLinkToSeries(); + } + else if (useHoverLinkOnHandle(this.visualMapModel)) { + this._doHoverLinkToSeries(this._handleEnds[handleIndex], false); + } + }, + + /** + * @private + */ + _resetInterval: function () { + var visualMapModel = this.visualMapModel; + + var dataInterval = this._dataInterval = visualMapModel.getSelected(); + var dataExtent = visualMapModel.getExtent(); + var sizeExtent = [0, visualMapModel.itemSize[1]]; + + this._handleEnds = [ + linearMap$3(dataInterval[0], dataExtent, sizeExtent, true), + linearMap$3(dataInterval[1], dataExtent, sizeExtent, true) + ]; + }, + + /** + * @private + * @param {(number|string)} handleIndex 0 or 1 or 'all' + * @param {number} dx + * @param {number} dy + */ + _updateInterval: function (handleIndex, delta) { + delta = delta || 0; + var visualMapModel = this.visualMapModel; + var handleEnds = this._handleEnds; + var sizeExtent = [0, visualMapModel.itemSize[1]]; + + sliderMove( + delta, + handleEnds, + sizeExtent, + handleIndex, + // cross is forbiden + 0 + ); + + var dataExtent = visualMapModel.getExtent(); + // Update data interval. + this._dataInterval = [ + linearMap$3(handleEnds[0], sizeExtent, dataExtent, true), + linearMap$3(handleEnds[1], sizeExtent, dataExtent, true) + ]; + }, + + /** + * @private + */ + _updateView: function (forSketch) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var shapes = this._shapes; + + var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]]; + var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds; + + var visualInRange = this._createBarVisual( + this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange' + ); + var visualOutOfRange = this._createBarVisual( + dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange' + ); + + shapes.inRange + .setStyle({ + fill: visualInRange.barColor, + opacity: visualInRange.opacity + }) + .setShape('points', visualInRange.barPoints); + shapes.outOfRange + .setStyle({ + fill: visualOutOfRange.barColor, + opacity: visualOutOfRange.opacity + }) + .setShape('points', visualOutOfRange.barPoints); + + this._updateHandle(inRangeHandleEnds, visualInRange); + }, + + /** + * @private + */ + _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) { + var opts = { + forceState: forceState, + convertOpacityToAlpha: true + }; + var colorStops = this._makeColorGradient(dataInterval, opts); + + var symbolSizes = [ + this.getControllerVisual(dataInterval[0], 'symbolSize', opts), + this.getControllerVisual(dataInterval[1], 'symbolSize', opts) + ]; + var barPoints = this._createBarPoints(handleEnds, symbolSizes); + + return { + barColor: new LinearGradient(0, 0, 0, 1, colorStops), + barPoints: barPoints, + handlesColor: [ + colorStops[0].color, + colorStops[colorStops.length - 1].color + ] + }; + }, + + /** + * @private + */ + _makeColorGradient: function (dataInterval, opts) { + // Considering colorHue, which is not linear, so we have to sample + // to calculate gradient color stops, but not only caculate head + // and tail. + var sampleNumber = 100; // Arbitrary value. + var colorStops = []; + var step = (dataInterval[1] - dataInterval[0]) / sampleNumber; + + colorStops.push({ + color: this.getControllerVisual(dataInterval[0], 'color', opts), + offset: 0 + }); + + for (var i = 1; i < sampleNumber; i++) { + var currValue = dataInterval[0] + step * i; + if (currValue > dataInterval[1]) { + break; + } + colorStops.push({ + color: this.getControllerVisual(currValue, 'color', opts), + offset: i / sampleNumber + }); + } + + colorStops.push({ + color: this.getControllerVisual(dataInterval[1], 'color', opts), + offset: 1 + }); + + return colorStops; + }, + + /** + * @private + */ + _createBarPoints: function (handleEnds, symbolSizes) { + var itemSize = this.visualMapModel.itemSize; + + return [ + [itemSize[0] - symbolSizes[0], handleEnds[0]], + [itemSize[0], handleEnds[0]], + [itemSize[0], handleEnds[1]], + [itemSize[0] - symbolSizes[1], handleEnds[1]] + ]; + }, + + /** + * @private + */ + _createBarGroup: function (itemAlign) { + var orient = this._orient; + var inverse = this.visualMapModel.get('inverse'); + + return new Group( + (orient === 'horizontal' && !inverse) + ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2} + : (orient === 'horizontal' && inverse) + ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2} + : (orient === 'vertical' && !inverse) + ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]} + : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]} + ); + }, + + /** + * @private + */ + _updateHandle: function (handleEnds, visualInRange) { + if (!this._useHandle) { + return; + } + + var shapes = this._shapes; + var visualMapModel = this.visualMapModel; + var handleThumbs = shapes.handleThumbs; + var handleLabels = shapes.handleLabels; + + each$26([0, 1], function (handleIndex) { + var handleThumb = handleThumbs[handleIndex]; + handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]); + handleThumb.position[1] = handleEnds[handleIndex]; + + // Update handle label position. + var textPoint = applyTransform$1( + shapes.handleLabelPoints[handleIndex], + getTransform(handleThumb, this.group) + ); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + text: visualMapModel.formatValueText(this._dataInterval[handleIndex]), + textVerticalAlign: 'middle', + textAlign: this._applyTransform( + this._orient === 'horizontal' + ? (handleIndex === 0 ? 'bottom' : 'top') + : 'left', + shapes.barGroup + ) + }); + }, this); + }, + + /** + * @private + * @param {number} cursorValue + * @param {number} textValue + * @param {string} [rangeSymbol] + * @param {number} [halfHoverLinkSize] + */ + _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var itemSize = visualMapModel.itemSize; + var sizeExtent = [0, itemSize[1]]; + var pos = linearMap$3(cursorValue, dataExtent, sizeExtent, true); + + var shapes = this._shapes; + var indicator = shapes.indicator; + if (!indicator) { + return; + } + + indicator.position[1] = pos; + indicator.attr('invisible', false); + indicator.setShape('points', createIndicatorPoints( + !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1] + )); + + var opts = {convertOpacityToAlpha: true}; + var color = this.getControllerVisual(cursorValue, 'color', opts); + indicator.setStyle('fill', color); + + // Update handle label position. + var textPoint = applyTransform$1( + shapes.indicatorLabelPoint, + getTransform(indicator, this.group) + ); + + var indicatorLabel = shapes.indicatorLabel; + indicatorLabel.attr('invisible', false); + var align = this._applyTransform('left', shapes.barGroup); + var orient = this._orient; + indicatorLabel.setStyle({ + text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue), + textVerticalAlign: orient === 'horizontal' ? align : 'middle', + textAlign: orient === 'horizontal' ? 'center' : align, + x: textPoint[0], + y: textPoint[1] + }); + }, + + /** + * @private + */ + _enableHoverLinkToSeries: function () { + var self = this; + this._shapes.barGroup + + .on('mousemove', function (e) { + self._hovering = true; + + if (!self._dragging) { + var itemSize = self.visualMapModel.itemSize; + var pos = self._applyTransform( + [e.offsetX, e.offsetY], self._shapes.barGroup, true, true + ); + // For hover link show when hover handle, which might be + // below or upper than sizeExtent. + pos[1] = mathMin$7(mathMax$7(0, pos[1]), itemSize[1]); + self._doHoverLinkToSeries( + pos[1], + 0 <= pos[0] && pos[0] <= itemSize[0] + ); + } + }) + + .on('mouseout', function () { + // When mouse is out of handle, hoverLink still need + // to be displayed when realtime is set as false. + self._hovering = false; + !self._dragging && self._clearHoverLinkToSeries(); + }); + }, + + /** + * @private + */ + _enableHoverLinkFromSeries: function () { + var zr = this.api.getZr(); + + if (this.visualMapModel.option.hoverLink) { + zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this); + zr.on('mouseout', this._hideIndicator, this); + } + else { + this._clearHoverLinkFromSeries(); + } + }, + + /** + * @private + */ + _doHoverLinkToSeries: function (cursorPos, hoverOnBar) { + var visualMapModel = this.visualMapModel; + var itemSize = visualMapModel.itemSize; + + if (!visualMapModel.option.hoverLink) { + return; + } + + var sizeExtent = [0, itemSize[1]]; + var dataExtent = visualMapModel.getExtent(); + + // For hover link show when hover handle, which might be below or upper than sizeExtent. + cursorPos = mathMin$7(mathMax$7(sizeExtent[0], cursorPos), sizeExtent[1]); + + var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent); + var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize]; + var cursorValue = linearMap$3(cursorPos, sizeExtent, dataExtent, true); + var valueRange = [ + linearMap$3(hoverRange[0], sizeExtent, dataExtent, true), + linearMap$3(hoverRange[1], sizeExtent, dataExtent, true) + ]; + // Consider data range is out of visualMap range, see test/visualMap-continuous.html, + // where china and india has very large population. + hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity); + hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); + + // Do not show indicator when mouse is over handle, + // otherwise labels overlap, especially when dragging. + if (hoverOnBar) { + if (valueRange[0] === -Infinity) { + this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize); + } + else if (valueRange[1] === Infinity) { + this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize); + } + else { + this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize); + } + } + + // When realtime is set as false, handles, which are in barGroup, + // also trigger hoverLink, which help user to realize where they + // focus on when dragging. (see test/heatmap-large.html) + // When realtime is set as true, highlight will not show when hover + // handle, because the label on handle, which displays a exact value + // but not range, might mislead users. + var oldBatch = this._hoverLinkDataIndices; + var newBatch = []; + if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) { + newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange); + } + + var resultBatches = compressBatches(oldBatch, newBatch); + + this._dispatchHighDown('downplay', convertDataIndex(resultBatches[0])); + this._dispatchHighDown('highlight', convertDataIndex(resultBatches[1])); + }, + + /** + * @private + */ + _hoverLinkFromSeriesMouseOver: function (e) { + var el = e.target; + var visualMapModel = this.visualMapModel; + + if (!el || el.dataIndex == null) { + return; + } + + var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex); + + if (!visualMapModel.isTargetSeries(dataModel)) { + return; + } + + var data = dataModel.getData(el.dataType); + var value = data.get(visualMapModel.getDataDimension(data), el.dataIndex, true); + + if (!isNaN(value)) { + this._showIndicator(value, value); + } + }, + + /** + * @private + */ + _hideIndicator: function () { + var shapes = this._shapes; + shapes.indicator && shapes.indicator.attr('invisible', true); + shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true); + }, + + /** + * @private + */ + _clearHoverLinkToSeries: function () { + this._hideIndicator(); + + var indices = this._hoverLinkDataIndices; + this._dispatchHighDown('downplay', convertDataIndex(indices)); + + indices.length = 0; + }, + + /** + * @private + */ + _clearHoverLinkFromSeries: function () { + this._hideIndicator(); + + var zr = this.api.getZr(); + zr.off('mouseover', this._hoverLinkFromSeriesMouseOver); + zr.off('mouseout', this._hideIndicator); + }, + + /** + * @private + */ + _applyTransform: function (vertex, element, inverse, global) { + var transform = getTransform(element, global ? null : this.group); + + return graphic[ + isArray(vertex) ? 'applyTransform' : 'transformDirection' + ](vertex, transform, inverse); + }, + + /** + * @private + */ + _dispatchHighDown: function (type, batch) { + batch && batch.length && this.api.dispatchAction({ + type: type, + batch: batch + }); + }, + + /** + * @override + */ + dispose: function () { + this._clearHoverLinkFromSeries(); + this._clearHoverLinkToSeries(); + }, + + /** + * @override + */ + remove: function () { + this._clearHoverLinkFromSeries(); + this._clearHoverLinkToSeries(); + } + +}); + +function createPolygon(points, cursor, onDrift, onDragEnd) { + return new Polygon({ + shape: {points: points}, + draggable: !!onDrift, + cursor: cursor, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd + }); +} + +function createHandlePoints(handleIndex, textSize) { + return handleIndex === 0 + ? [[0, 0], [textSize, 0], [textSize, -textSize]] + : [[0, 0], [textSize, 0], [textSize, textSize]]; +} + +function createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) { + return isRange + ? [ // indicate range + [0, -mathMin$7(halfHoverLinkSize, mathMax$7(pos, 0))], + [HOVER_LINK_OUT, 0], + [0, mathMin$7(halfHoverLinkSize, mathMax$7(extentMax - pos, 0))] + ] + : [ // indicate single value + [0, 0], [5, -5], [5, 5] + ]; +} + +function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) { + var halfHoverLinkSize = HOVER_LINK_SIZE / 2; + var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize'); + if (hoverLinkDataSize) { + halfHoverLinkSize = linearMap$3(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2; + } + return halfHoverLinkSize; +} + +function useHoverLinkOnHandle(visualMapModel) { + var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle'); + return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle); +} + +function getCursor$1(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var actionInfo$2 = { + type: 'selectDataRange', + event: 'dataRangeSelected', + // FIXME use updateView appears wrong + update: 'update' +}; + +registerAction(actionInfo$2, function (payload, ecModel) { + + ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) { + model.setSelected(payload.selected); + }); + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$2); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PiecewiseModel = VisualMapModel.extend({ + + type: 'visualMap.piecewise', + + /** + * Order Rule: + * + * option.categories / option.pieces / option.text / option.selected: + * If !option.inverse, + * Order when vertical: ['top', ..., 'bottom']. + * Order when horizontal: ['left', ..., 'right']. + * If option.inverse, the meaning of + * the order should be reversed. + * + * this._pieceList: + * The order is always [low, ..., high]. + * + * Mapping from location to low-high: + * If !option.inverse + * When vertical, top is high. + * When horizontal, right is high. + * If option.inverse, reverse. + */ + + /** + * @protected + */ + defaultOption: { + selected: null, // Object. If not specified, means selected. + // When pieces and splitNumber: {'0': true, '5': true} + // When categories: {'cate1': false, 'cate3': true} + // When selected === false, means all unselected. + + minOpen: false, // Whether include values that smaller than `min`. + maxOpen: false, // Whether include values that bigger than `max`. + + align: 'auto', // 'auto', 'left', 'right' + itemWidth: 20, // When put the controller vertically, it is the length of + // horizontal side of each item. Otherwise, vertical side. + itemHeight: 14, // When put the controller vertically, it is the length of + // vertical side of each item. Otherwise, horizontal side. + itemSymbol: 'roundRect', + pieceList: null, // Each item is Object, with some of those attrs: + // {min, max, lt, gt, lte, gte, value, + // color, colorSaturation, colorAlpha, opacity, + // symbol, symbolSize}, which customize the range or visual + // coding of the certain piece. Besides, see "Order Rule". + categories: null, // category names, like: ['some1', 'some2', 'some3']. + // Attr min/max are ignored when categories set. See "Order Rule" + splitNumber: 5, // If set to 5, auto split five pieces equally. + // If set to 0 and component type not set, component type will be + // determined as "continuous". (It is less reasonable but for ec2 + // compatibility, see echarts/component/visualMap/typeDefaulter) + selectedMode: 'multiple', // Can be 'multiple' or 'single'. + itemGap: 10, // The gap between two items, in px. + hoverLink: true, // Enable hover highlight. + + showLabel: null // By default, when text is used, label will hide (the logic + // is remained for compatibility reason) + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + PiecewiseModel.superApply(this, 'optionUpdated', arguments); + + /** + * The order is always [low, ..., high]. + * [{text: string, interval: Array.}, ...] + * @private + * @type {Array.} + */ + this._pieceList = []; + + this.resetExtent(); + + /** + * 'pieces', 'categories', 'splitNumber' + * @type {string} + */ + var mode = this._mode = this._determineMode(); + + resetMethods[this._mode].call(this); + + this._resetSelected(newOption, isInit); + + var categories = this.option.categories; + + this.resetVisual(function (mappingOption, state) { + if (mode === 'categories') { + mappingOption.mappingMethod = 'category'; + mappingOption.categories = clone(categories); + } + else { + mappingOption.dataExtent = this.getExtent(); + mappingOption.mappingMethod = 'piecewise'; + mappingOption.pieceList = map(this._pieceList, function (piece) { + var piece = clone(piece); + if (state !== 'inRange') { + // FIXME + // outOfRange do not support special visual in pieces. + piece.visual = null; + } + return piece; + }); + } + }); + }, + + /** + * @protected + * @override + */ + completeVisualOption: function () { + // Consider this case: + // visualMap: { + // pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}] + // } + // where no inRange/outOfRange set but only pieces. So we should make + // default inRange/outOfRange for this case, otherwise visuals that only + // appear in `pieces` will not be taken into account in visual encoding. + + var option = this.option; + var visualTypesInPieces = {}; + var visualTypes = VisualMapping.listVisualTypes(); + var isCategory = this.isCategory(); + + each$1(option.pieces, function (piece) { + each$1(visualTypes, function (visualType) { + if (piece.hasOwnProperty(visualType)) { + visualTypesInPieces[visualType] = 1; + } + }); + }); + + each$1(visualTypesInPieces, function (v, visualType) { + var exists = 0; + each$1(this.stateList, function (state) { + exists |= has(option, state, visualType) + || has(option.target, state, visualType); + }, this); + + !exists && each$1(this.stateList, function (state) { + (option[state] || (option[state] = {}))[visualType] = visualDefault.get( + visualType, state === 'inRange' ? 'active' : 'inactive', isCategory + ); + }); + }, this); + + function has(obj, state, visualType) { + return obj && obj[state] && ( + isObject$1(obj[state]) + ? obj[state].hasOwnProperty(visualType) + : obj[state] === visualType // e.g., inRange: 'symbol' + ); + } + + VisualMapModel.prototype.completeVisualOption.apply(this, arguments); + }, + + _resetSelected: function (newOption, isInit) { + var thisOption = this.option; + var pieceList = this._pieceList; + + // Selected do not merge but all override. + var selected = (isInit ? thisOption : newOption).selected || {}; + thisOption.selected = selected; + + // Consider 'not specified' means true. + each$1(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + if (!selected.hasOwnProperty(key)) { + selected[key] = true; + } + }, this); + + if (thisOption.selectedMode === 'single') { + // Ensure there is only one selected. + var hasSel = false; + + each$1(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + if (selected[key]) { + hasSel + ? (selected[key] = false) + : (hasSel = true); + } + }, this); + } + // thisOption.selectedMode === 'multiple', default: all selected. + }, + + /** + * @public + */ + getSelectedMapKey: function (piece) { + return this._mode === 'categories' + ? piece.value + '' : piece.index + ''; + }, + + /** + * @public + */ + getPieceList: function () { + return this._pieceList; + }, + + /** + * @private + * @return {string} + */ + _determineMode: function () { + var option = this.option; + + return option.pieces && option.pieces.length > 0 + ? 'pieces' + : this.option.categories + ? 'categories' + : 'splitNumber'; + }, + + /** + * @public + * @override + */ + setSelected: function (selected) { + this.option.selected = clone(selected); + }, + + /** + * @public + * @override + */ + getValueState: function (value) { + var index = VisualMapping.findPieceIndex(value, this._pieceList); + + return index != null + ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])] + ? 'inRange' : 'outOfRange' + ) + : 'outOfRange'; + }, + + /** + * @public + * @params {number} pieceIndex piece index in visualMapModel.getPieceList() + * @return {Array.} [{seriesId, dataIndices: >}, ...] + */ + findTargetDataIndices: function (pieceIndex) { + var result = []; + + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + + data.each(this.getDataDimension(data), function (value, dataIndex) { + // Should always base on model pieceList, because it is order sensitive. + var pIdx = VisualMapping.findPieceIndex(value, this._pieceList); + pIdx === pieceIndex && dataIndices.push(dataIndex); + }, this); + + result.push({seriesId: seriesModel.id, dataIndex: dataIndices}); + }, this); + + return result; + }, + + /** + * @private + * @param {Object} piece piece.value or piece.interval is required. + * @return {number} Can be Infinity or -Infinity + */ + getRepresentValue: function (piece) { + var representValue; + if (this.isCategory()) { + representValue = piece.value; + } + else { + if (piece.value != null) { + representValue = piece.value; + } + else { + var pieceInterval = piece.interval || []; + representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity) + ? 0 + : (pieceInterval[0] + pieceInterval[1]) / 2; + } + } + return representValue; + }, + + getVisualMeta: function (getColorVisual) { + // Do not support category. (category axis is ordinal, numerical) + if (this.isCategory()) { + return; + } + + var stops = []; + var outerColors = []; + var visualMapModel = this; + + function setStop(interval, valueState) { + var representValue = visualMapModel.getRepresentValue({interval: interval}); + if (!valueState) { + valueState = visualMapModel.getValueState(representValue); + } + var color = getColorVisual(representValue, valueState); + if (interval[0] === -Infinity) { + outerColors[0] = color; + } + else if (interval[1] === Infinity) { + outerColors[1] = color; + } + else { + stops.push( + {value: interval[0], color: color}, + {value: interval[1], color: color} + ); + } + } + + // Suplement + var pieceList = this._pieceList.slice(); + if (!pieceList.length) { + pieceList.push({interval: [-Infinity, Infinity]}); + } + else { + var edge = pieceList[0].interval[0]; + edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]}); + edge = pieceList[pieceList.length - 1].interval[1]; + edge !== Infinity && pieceList.push({interval: [edge, Infinity]}); + } + + var curr = -Infinity; + each$1(pieceList, function (piece) { + var interval = piece.interval; + if (interval) { + // Fulfill gap. + interval[0] > curr && setStop([curr, interval[0]], 'outOfRange'); + setStop(interval.slice()); + curr = interval[1]; + } + }, this); + + return {stops: stops, outerColors: outerColors}; + } + +}); + +/** + * Key is this._mode + * @type {Object} + * @this {module:echarts/component/viusalMap/PiecewiseMode} + */ +var resetMethods = { + + splitNumber: function () { + var thisOption = this.option; + var pieceList = this._pieceList; + var precision = Math.min(thisOption.precision, 20); + var dataExtent = this.getExtent(); + var splitNumber = thisOption.splitNumber; + splitNumber = Math.max(parseInt(splitNumber, 10), 1); + thisOption.splitNumber = splitNumber; + + var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; + // Precision auto-adaption + while (+splitStep.toFixed(precision) !== splitStep && precision < 5) { + precision++; + } + thisOption.precision = precision; + splitStep = +splitStep.toFixed(precision); + + var index = 0; + + if (thisOption.minOpen) { + pieceList.push({ + index: index++, + interval: [-Infinity, dataExtent[0]], + close: [0, 0] + }); + } + + for ( + var curr = dataExtent[0], len = index + splitNumber; + index < len; + curr += splitStep + ) { + var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep); + + pieceList.push({ + index: index++, + interval: [curr, max], + close: [1, 1] + }); + } + + if (thisOption.maxOpen) { + pieceList.push({ + index: index++, + interval: [dataExtent[1], Infinity], + close: [0, 0] + }); + } + + reformIntervals(pieceList); + + each$1(pieceList, function (piece) { + piece.text = this.formatValueText(piece.interval); + }, this); + }, + + categories: function () { + var thisOption = this.option; + each$1(thisOption.categories, function (cate) { + // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。 + // 是否改一致。 + this._pieceList.push({ + text: this.formatValueText(cate, true), + value: cate + }); + }, this); + + // See "Order Rule". + normalizeReverse(thisOption, this._pieceList); + }, + + pieces: function () { + var thisOption = this.option; + var pieceList = this._pieceList; + + each$1(thisOption.pieces, function (pieceListItem, index) { + + if (!isObject$1(pieceListItem)) { + pieceListItem = {value: pieceListItem}; + } + + var item = {text: '', index: index}; + + if (pieceListItem.label != null) { + item.text = pieceListItem.label; + } + + if (pieceListItem.hasOwnProperty('value')) { + var value = item.value = pieceListItem.value; + item.interval = [value, value]; + item.close = [1, 1]; + } + else { + // `min` `max` is legacy option. + // `lt` `gt` `lte` `gte` is recommanded. + var interval = item.interval = []; + var close = item.close = [0, 0]; + + var closeList = [1, 0, 1]; + var infinityList = [-Infinity, Infinity]; + + var useMinMax = []; + for (var lg = 0; lg < 2; lg++) { + var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg]; + for (var i = 0; i < 3 && interval[lg] == null; i++) { + interval[lg] = pieceListItem[names[i]]; + close[lg] = closeList[i]; + useMinMax[lg] = i === 2; + } + interval[lg] == null && (interval[lg] = infinityList[lg]); + } + useMinMax[0] && interval[1] === Infinity && (close[0] = 0); + useMinMax[1] && interval[0] === -Infinity && (close[1] = 0); + + if (__DEV__) { + if (interval[0] > interval[1]) { + console.warn( + 'Piece ' + index + 'is illegal: ' + interval + + ' lower bound should not greater then uppper bound.' + ); + } + } + + if (interval[0] === interval[1] && close[0] && close[1]) { + // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}], + // we use value to lift the priority when min === max + item.value = interval[0]; + } + } + + item.visual = VisualMapping.retrieveVisuals(pieceListItem); + + pieceList.push(item); + + }, this); + + // See "Order Rule". + normalizeReverse(thisOption, pieceList); + // Only pieces + reformIntervals(pieceList); + + each$1(pieceList, function (piece) { + var close = piece.close; + var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]]; + piece.text = piece.text || this.formatValueText( + piece.value != null ? piece.value : piece.interval, + false, + edgeSymbols + ); + }, this); + } +}; + +function normalizeReverse(thisOption, pieceList) { + var inverse = thisOption.inverse; + if (thisOption.orient === 'vertical' ? !inverse : inverse) { + pieceList.reverse(); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var PiecewiseVisualMapView = VisualMapView.extend({ + + type: 'visualMap.piecewise', + + /** + * @protected + * @override + */ + doRender: function () { + var thisGroup = this.group; + + thisGroup.removeAll(); + + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var textStyleModel = visualMapModel.textStyleModel; + var textFont = textStyleModel.getFont(); + var textFill = textStyleModel.getTextColor(); + var itemAlign = this._getItemAlign(); + var itemSize = visualMapModel.itemSize; + var viewData = this._getViewData(); + var endsText = viewData.endsText; + var showLabel = retrieve(visualMapModel.get('showLabel', true), !endsText); + + endsText && this._renderEndsText( + thisGroup, endsText[0], itemSize, showLabel, itemAlign + ); + + each$1(viewData.viewPieceList, renderItem, this); + + endsText && this._renderEndsText( + thisGroup, endsText[1], itemSize, showLabel, itemAlign + ); + + box( + visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap') + ); + + this.renderBackground(thisGroup); + + this.positionGroup(thisGroup); + + function renderItem(item) { + var piece = item.piece; + + var itemGroup = new Group(); + itemGroup.onclick = bind(this._onItemClick, this, piece); + + this._enableHoverLink(itemGroup, item.indexInModelPieceList); + + var representValue = visualMapModel.getRepresentValue(piece); + + this._createItemSymbol( + itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]] + ); + + if (showLabel) { + var visualState = this.visualMapModel.getValueState(representValue); + + itemGroup.add(new Text({ + style: { + x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap, + y: itemSize[1] / 2, + text: piece.text, + textVerticalAlign: 'middle', + textAlign: itemAlign, + textFont: textFont, + textFill: textFill, + opacity: visualState === 'outOfRange' ? 0.5 : 1 + } + })); + } + + thisGroup.add(itemGroup); + } + }, + + /** + * @private + */ + _enableHoverLink: function (itemGroup, pieceIndex) { + itemGroup + .on('mouseover', bind(onHoverLink, this, 'highlight')) + .on('mouseout', bind(onHoverLink, this, 'downplay')); + + function onHoverLink(method) { + var visualMapModel = this.visualMapModel; + + visualMapModel.option.hoverLink && this.api.dispatchAction({ + type: method, + batch: convertDataIndex( + visualMapModel.findTargetDataIndices(pieceIndex) + ) + }); + } + }, + + /** + * @private + */ + _getItemAlign: function () { + var visualMapModel = this.visualMapModel; + var modelOption = visualMapModel.option; + + if (modelOption.orient === 'vertical') { + return getItemAlign( + visualMapModel, this.api, visualMapModel.itemSize + ); + } + else { // horizontal, most case left unless specifying right. + var align = modelOption.align; + if (!align || align === 'auto') { + align = 'left'; + } + return align; + } + }, + + /** + * @private + */ + _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) { + if (!text) { + return; + } + + var itemGroup = new Group(); + var textStyleModel = this.visualMapModel.textStyleModel; + + itemGroup.add(new Text({ + style: { + x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2, + y: itemSize[1] / 2, + textVerticalAlign: 'middle', + textAlign: showLabel ? itemAlign : 'center', + text: text, + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + })); + + group.add(itemGroup); + }, + + /** + * @private + * @return {Object} {peiceList, endsText} The order is the same as screen pixel order. + */ + _getViewData: function () { + var visualMapModel = this.visualMapModel; + + var viewPieceList = map(visualMapModel.getPieceList(), function (piece, index) { + return {piece: piece, indexInModelPieceList: index}; + }); + var endsText = visualMapModel.get('text'); + + // Consider orient and inverse. + var orient = visualMapModel.get('orient'); + var inverse = visualMapModel.get('inverse'); + + // Order of model pieceList is always [low, ..., high] + if (orient === 'horizontal' ? inverse : !inverse) { + viewPieceList.reverse(); + } + // Origin order of endsText is [high, low] + else if (endsText) { + endsText = endsText.slice().reverse(); + } + + return {viewPieceList: viewPieceList, endsText: endsText}; + }, + + /** + * @private + */ + _createItemSymbol: function (group, representValue, shapeParam) { + group.add(createSymbol( + this.getControllerVisual(representValue, 'symbol'), + shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], + this.getControllerVisual(representValue, 'color') + )); + }, + + /** + * @private + */ + _onItemClick: function (piece) { + var visualMapModel = this.visualMapModel; + var option = visualMapModel.option; + var selected = clone(option.selected); + var newKey = visualMapModel.getSelectedMapKey(piece); + + if (option.selectedMode === 'single') { + selected[newKey] = true; + each$1(selected, function (o, key) { + selected[key] = key === newKey; + }); + } + else { + selected[newKey] = !selected[newKey]; + } + + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: selected + }); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$2); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * visualMap component entry + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var addCommas$1 = addCommas; +var encodeHTML$1 = encodeHTML; + +function fillLabel(opt) { + defaultEmphasis(opt, 'label', ['show']); +} +var MarkerModel = extendComponentModel({ + + type: 'marker', + + dependencies: ['series', 'grid', 'polar', 'geo'], + + /** + * @overrite + */ + init: function (option, parentModel, ecModel, extraOpt) { + + if (__DEV__) { + if (this.type === 'marker') { + throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.'); + } + } + this.mergeDefaultAndTheme(option, ecModel); + this.mergeOption(option, ecModel, extraOpt.createdBySelf, true); + }, + + /** + * @return {boolean} + */ + isAnimationEnabled: function () { + if (env$1.node) { + return false; + } + + var hostSeries = this.__hostSeries; + return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled(); + }, + + mergeOption: function (newOpt, ecModel, createdBySelf, isInit) { + var MarkerModel = this.constructor; + var modelPropName = this.mainType + 'Model'; + if (!createdBySelf) { + ecModel.eachSeries(function (seriesModel) { + + var markerOpt = seriesModel.get(this.mainType, true); + + var markerModel = seriesModel[modelPropName]; + if (!markerOpt || !markerOpt.data) { + seriesModel[modelPropName] = null; + return; + } + if (!markerModel) { + if (isInit) { + // Default label emphasis `position` and `show` + fillLabel(markerOpt); + } + each$1(markerOpt.data, function (item) { + // FIXME Overwrite fillLabel method ? + if (item instanceof Array) { + fillLabel(item[0]); + fillLabel(item[1]); + } + else { + fillLabel(item); + } + }); + + markerModel = new MarkerModel( + markerOpt, this, ecModel + ); + + extend(markerModel, { + mainType: this.mainType, + // Use the same series index and name + seriesIndex: seriesModel.seriesIndex, + name: seriesModel.name, + createdBySelf: true + }); + + markerModel.__hostSeries = seriesModel; + } + else { + markerModel.mergeOption(markerOpt, ecModel, true); + } + seriesModel[modelPropName] = markerModel; + }, this); + } + }, + + formatTooltip: function (dataIndex) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var formattedValue = isArray(value) + ? map(value, addCommas$1).join(', ') : addCommas$1(value); + var name = data.getName(dataIndex); + var html = encodeHTML$1(this.name); + if (value != null || name) { + html += '
    '; + } + if (name) { + html += encodeHTML$1(name); + if (value != null) { + html += ' : '; + } + } + if (value != null) { + html += encodeHTML$1(formattedValue); + } + return html; + }, + + getData: function () { + return this._data; + }, + + setData: function (data) { + this._data = data; + } +}); + +mixin(MarkerModel, dataFormatMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +MarkerModel.extend({ + + type: 'markPoint', + + defaultOption: { + zlevel: 0, + z: 5, + symbol: 'pin', + symbolSize: 50, + //symbolRotate: 0, + //symbolOffset: [0, 0] + tooltip: { + trigger: 'item' + }, + label: { + show: true, + position: 'inside' + }, + itemStyle: { + borderWidth: 2 + }, + emphasis: { + label: { + show: true + } + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var indexOf$2 = indexOf; + +function hasXOrY(item) { + return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y))); +} + +function hasXAndY(item) { + return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y)); +} + +// Make it simple, do not visit all stacked value to count precision. +// function getPrecision(data, valueAxisDim, dataIndex) { +// var precision = -1; +// var stackedDim = data.mapDimension(valueAxisDim); +// do { +// precision = Math.max( +// numberUtil.getPrecision(data.get(stackedDim, dataIndex)), +// precision +// ); +// var stackedOnSeries = data.getCalculationInfo('stackedOnSeries'); +// if (stackedOnSeries) { +// var byValue = data.get(data.getCalculationInfo('stackedByDimension'), dataIndex); +// data = stackedOnSeries.getData(); +// dataIndex = data.indexOf(data.getCalculationInfo('stackedByDimension'), byValue); +// stackedDim = data.getCalculationInfo('stackedDimension'); +// } +// else { +// data = null; +// } +// } while (data); + +// return precision; +// } + +function markerTypeCalculatorWithExtent( + mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex +) { + var coordArr = []; + + var stacked = isDimensionStacked(data, targetDataDim /*, otherDataDim*/); + var calcDataDim = stacked + ? data.getCalculationInfo('stackResultDimension') + : targetDataDim; + + var value = numCalculate(data, calcDataDim, mlType); + + var dataIndex = data.indicesOfNearest(calcDataDim, value)[0]; + coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex); + coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex); + + // Make it simple, do not visit all stacked value to count precision. + var precision = getPrecision(data.get(targetDataDim, dataIndex)); + precision = Math.min(precision, 20); + if (precision >= 0) { + coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision); + } + + return coordArr; +} + +var curry$6 = curry; +// TODO Specified percent +var markerTypeCalculator = { + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + min: curry$6(markerTypeCalculatorWithExtent, 'min'), + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + max: curry$6(markerTypeCalculatorWithExtent, 'max'), + + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + average: curry$6(markerTypeCalculatorWithExtent, 'average') +}; + +/** + * Transform markPoint data item to format used in List by do the following + * 1. Calculate statistic like `max`, `min`, `average` + * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/coord/*} [coordSys] + * @param {Object} item + * @return {Object} + */ +function dataTransform(seriesModel, item) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + + // 1. If not specify the position with pixel directly + // 2. If `coord` is not a data array. Which uses `xAxis`, + // `yAxis` to specify the coord on each dimension + + // parseFloat first because item.x and item.y can be percent string like '20%' + if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) { + var dims = coordSys.dimensions; + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); + + // Clone the option + // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value + item = clone(item); + + if (item.type + && markerTypeCalculator[item.type] + && axisInfo.baseAxis && axisInfo.valueAxis + ) { + var otherCoordIndex = indexOf$2(dims, axisInfo.baseAxis.dim); + var targetCoordIndex = indexOf$2(dims, axisInfo.valueAxis.dim); + + item.coord = markerTypeCalculator[item.type]( + data, axisInfo.baseDataDim, axisInfo.valueDataDim, + otherCoordIndex, targetCoordIndex + ); + // Force to use the value of calculated value. + item.value = item.coord[targetCoordIndex]; + } + else { + // FIXME Only has one of xAxis and yAxis. + var coord = [ + item.xAxis != null ? item.xAxis : item.radiusAxis, + item.yAxis != null ? item.yAxis : item.angleAxis + ]; + // Each coord support max, min, average + for (var i = 0; i < 2; i++) { + if (markerTypeCalculator[coord[i]]) { + coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]); + } + } + item.coord = coord; + } + } + return item; +} + +function getAxisInfo$1(item, data, coordSys, seriesModel) { + var ret = {}; + + if (item.valueIndex != null || item.valueDim != null) { + ret.valueDataDim = item.valueIndex != null + ? data.getDimension(item.valueIndex) : item.valueDim; + ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim)); + ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis); + ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); + } + else { + ret.baseAxis = seriesModel.getBaseAxis(); + ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis); + ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); + ret.valueDataDim = data.mapDimension(ret.valueAxis.dim); + } + + return ret; +} + +function dataDimToCoordDim(seriesModel, dataDim) { + var data = seriesModel.getData(); + var dimensions = data.dimensions; + dataDim = data.getDimension(dataDim); + for (var i = 0; i < dimensions.length; i++) { + var dimItem = data.getDimensionInfo(dimensions[i]); + if (dimItem.name === dataDim) { + return dimItem.coordDim; + } + } +} + +/** + * Filter data which is out of coordinateSystem range + * [dataFilter description] + * @param {module:echarts/coord/*} [coordSys] + * @param {Object} item + * @return {boolean} + */ +function dataFilter$1(coordSys, item) { + // Alwalys return true if there is no coordSys + return (coordSys && coordSys.containData && item.coord && !hasXOrY(item)) + ? coordSys.containData(item.coord) : true; +} + +function dimValueGetter(item, dimName, dataIndex, dimIndex) { + // x, y, radius, angle + if (dimIndex < 2) { + return item.coord && item.coord[dimIndex]; + } + return item.value; +} + +function numCalculate(data, valueDataDim, type) { + if (type === 'average') { + var sum = 0; + var count = 0; + data.each(valueDataDim, function (val, idx) { + if (!isNaN(val)) { + sum += val; + count++; + } + }); + return sum / count; + } + else if (type === 'median') { + return data.getMedian(valueDataDim); + } + else { + // max & min + return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0]; + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var MarkerView = extendComponentView({ + + type: 'marker', + + init: function () { + /** + * Markline grouped by series + * @private + * @type {module:zrender/core/util.HashMap} + */ + this.markerGroupMap = createHashMap(); + }, + + render: function (markerModel, ecModel, api) { + var markerGroupMap = this.markerGroupMap; + markerGroupMap.each(function (item) { + item.__keep = false; + }); + + var markerModelKey = this.type + 'Model'; + ecModel.eachSeries(function (seriesModel) { + var markerModel = seriesModel[markerModelKey]; + markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api); + }, this); + + markerGroupMap.each(function (item) { + !item.__keep && this.group.remove(item.group); + }, this); + }, + + renderSeries: function () {} +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +function updateMarkerLayout(mpData, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + // Chart like bar may have there own marker positioning logic + else if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + mpData.getValues(mpData.dimensions, idx) + ); + } + else if (coordSys) { + var x = mpData.get(coordSys.dimensions[0], idx); + var y = mpData.get(coordSys.dimensions[1], idx); + point = coordSys.dataToPoint([x, y]); + + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + + mpData.setItemLayout(idx, point); + }); +} + +MarkerView.extend({ + + type: 'markPoint', + + // updateLayout: function (markPointModel, ecModel, api) { + // ecModel.eachSeries(function (seriesModel) { + // var mpModel = seriesModel.markPointModel; + // if (mpModel) { + // updateMarkerLayout(mpModel.getData(), seriesModel, api); + // this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel); + // } + // }, this); + // }, + + updateTransform: function (markPointModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mpModel = seriesModel.markPointModel; + if (mpModel) { + updateMarkerLayout(mpModel.getData(), seriesModel, api); + this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel); + } + }, this); + }, + + renderSeries: function (seriesModel, mpModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + + var symbolDrawMap = this.markerGroupMap; + var symbolDraw = symbolDrawMap.get(seriesId) + || symbolDrawMap.set(seriesId, new SymbolDraw()); + + var mpData = createList$1(coordSys, seriesModel, mpModel); + + // FIXME + mpModel.setData(mpData); + + updateMarkerLayout(mpModel.getData(), seriesModel, api); + + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var symbolSize = itemModel.getShallow('symbolSize'); + if (typeof symbolSize === 'function') { + // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据? + symbolSize = symbolSize( + mpModel.getRawValue(idx), mpModel.getDataParams(idx) + ); + } + mpData.setItemVisual(idx, { + symbolSize: symbolSize, + color: itemModel.get('itemStyle.color') + || seriesData.getVisual('color'), + symbol: itemModel.getShallow('symbol') + }); + }); + + // TODO Text are wrong + symbolDraw.updateData(mpData); + this.group.add(symbolDraw.group); + + // Set host model for tooltip + // FIXME + mpData.eachItemGraphicEl(function (el) { + el.traverse(function (child) { + child.dataModel = mpModel; + }); + }); + + symbolDraw.__keep = true; + + symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} [coordSys] + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$1(coordSys, seriesModel, mpModel) { + var coordDimsInfos; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo( + seriesModel.getData().mapDimension(coordDim) + ) || {}; + // In map series data don't have lng and lat dimension. Fallback to same with coordSys + return defaults({name: coordDim}, info); + }); + } + else { + coordDimsInfos = [{ + name: 'value', + type: 'float' + }]; + } + + var mpData = new List(coordDimsInfos, mpModel); + var dataOpt = map(mpModel.get('data'), curry( + dataTransform, seriesModel + )); + if (coordSys) { + dataOpt = filter( + dataOpt, curry(dataFilter$1, coordSys) + ); + } + + mpData.initData(dataOpt, null, + coordSys ? dimValueGetter : function (item) { + return item.value; + } + ); + + return mpData; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// HINT Markpoint can't be used too much +registerPreprocessor(function (opt) { + // Make sure markPoint component is enabled + opt.markPoint = opt.markPoint || {}; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +MarkerModel.extend({ + + type: 'markLine', + + defaultOption: { + zlevel: 0, + z: 5, + + symbol: ['circle', 'arrow'], + symbolSize: [8, 16], + + //symbolRotate: 0, + + precision: 2, + tooltip: { + trigger: 'item' + }, + label: { + show: true, + position: 'end' + }, + lineStyle: { + type: 'dashed' + }, + emphasis: { + label: { + show: true + }, + lineStyle: { + width: 3 + } + }, + animationEasing: 'linear' + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var markLineTransform = function (seriesModel, coordSys, mlModel, item) { + var data = seriesModel.getData(); + // Special type markLine like 'min', 'max', 'average', 'median' + var mlType = item.type; + + if (!isArray(item) + && ( + mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median' + // In case + // data: [{ + // yAxis: 10 + // }] + || (item.xAxis != null || item.yAxis != null) + ) + ) { + var valueAxis; + var valueDataDim; + var value; + + if (item.yAxis != null || item.xAxis != null) { + valueDataDim = item.yAxis != null ? 'y' : 'x'; + valueAxis = coordSys.getAxis(valueDataDim); + + value = retrieve(item.yAxis, item.xAxis); + } + else { + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); + valueDataDim = axisInfo.valueDataDim; + valueAxis = axisInfo.valueAxis; + value = numCalculate(data, valueDataDim, mlType); + } + var valueIndex = valueDataDim === 'x' ? 0 : 1; + var baseIndex = 1 - valueIndex; + + var mlFrom = clone(item); + var mlTo = {}; + + mlFrom.type = null; + + mlFrom.coord = []; + mlTo.coord = []; + mlFrom.coord[baseIndex] = -Infinity; + mlTo.coord[baseIndex] = Infinity; + + var precision = mlModel.get('precision'); + if (precision >= 0 && typeof value === 'number') { + value = +value.toFixed(Math.min(precision, 20)); + } + + mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value; + + item = [mlFrom, mlTo, { // Extra option for tooltip and label + type: mlType, + valueIndex: item.valueIndex, + // Force to use the value of calculated value. + value: value + }]; + } + + item = [ + dataTransform(seriesModel, item[0]), + dataTransform(seriesModel, item[1]), + extend({}, item[2]) + ]; + + // Avoid line data type is extended by from(to) data type + item[2].type = item[2].type || ''; + + // Merge from option and to option into line option + merge(item[2], item[0]); + merge(item[2], item[1]); + + return item; +}; + +function isInifinity(val) { + return !isNaN(val) && !isFinite(val); +} + +// If a markLine has one dim +function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + var dimName = coordSys.dimensions[dimIndex]; + return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]) + && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]); +} + +function markLineFilter(coordSys, item) { + if (coordSys.type === 'cartesian2d') { + var fromCoord = item[0].coord; + var toCoord = item[1].coord; + // In case + // { + // markLine: { + // data: [{ yAxis: 2 }] + // } + // } + if ( + fromCoord && toCoord + && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) + || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys)) + ) { + return true; + } + } + return dataFilter$1(coordSys, item[0]) + && dataFilter$1(coordSys, item[1]); +} + +function updateSingleMarkerEndLayout( + data, idx, isFrom, seriesModel, api +) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + data.getValues(data.dimensions, idx) + ); + } + else { + var dims = coordSys.dimensions; + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + point = coordSys.dataToPoint([x, y]); + } + // Expand line to the edge of grid if value on one axis is Inifnity + // In case + // markLine: { + // data: [{ + // yAxis: 2 + // // or + // type: 'average' + // }] + // } + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var dims = coordSys.dimensions; + if (isInifinity(data.get(dims[0], idx))) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]); + } + else if (isInifinity(data.get(dims[1], idx))) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]); + } + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + data.setItemLayout(idx, point); +} + +MarkerView.extend({ + + type: 'markLine', + + // updateLayout: function (markLineModel, ecModel, api) { + // ecModel.eachSeries(function (seriesModel) { + // var mlModel = seriesModel.markLineModel; + // if (mlModel) { + // var mlData = mlModel.getData(); + // var fromData = mlModel.__from; + // var toData = mlModel.__to; + // // Update visual and layout of from symbol and to symbol + // fromData.each(function (idx) { + // updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api); + // updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api); + // }); + // // Update layout of line + // mlData.each(function (idx) { + // mlData.setItemLayout(idx, [ + // fromData.getItemLayout(idx), + // toData.getItemLayout(idx) + // ]); + // }); + + // this.markerGroupMap.get(seriesModel.id).updateLayout(); + + // } + // }, this); + // }, + + updateTransform: function (markLineModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mlModel = seriesModel.markLineModel; + if (mlModel) { + var mlData = mlModel.getData(); + var fromData = mlModel.__from; + var toData = mlModel.__to; + // Update visual and layout of from symbol and to symbol + fromData.each(function (idx) { + updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api); + updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api); + }); + // Update layout of line + mlData.each(function (idx) { + mlData.setItemLayout(idx, [ + fromData.getItemLayout(idx), + toData.getItemLayout(idx) + ]); + }); + + this.markerGroupMap.get(seriesModel.id).updateLayout(); + + } + }, this); + }, + + renderSeries: function (seriesModel, mlModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + + var lineDrawMap = this.markerGroupMap; + var lineDraw = lineDrawMap.get(seriesId) + || lineDrawMap.set(seriesId, new LineDraw()); + this.group.add(lineDraw.group); + + var mlData = createList$2(coordSys, seriesModel, mlModel); + + var fromData = mlData.from; + var toData = mlData.to; + var lineData = mlData.line; + + mlModel.__from = fromData; + mlModel.__to = toData; + // Line data for tooltip and formatter + mlModel.setData(lineData); + + var symbolType = mlModel.get('symbol'); + var symbolSize = mlModel.get('symbolSize'); + if (!isArray(symbolType)) { + symbolType = [symbolType, symbolType]; + } + if (typeof symbolSize === 'number') { + symbolSize = [symbolSize, symbolSize]; + } + + // Update visual and layout of from symbol and to symbol + mlData.from.each(function (idx) { + updateDataVisualAndLayout(fromData, idx, true); + updateDataVisualAndLayout(toData, idx, false); + }); + + // Update visual and layout of line + lineData.each(function (idx) { + var lineColor = lineData.getItemModel(idx).get('lineStyle.color'); + lineData.setItemVisual(idx, { + color: lineColor || fromData.getItemVisual(idx, 'color') + }); + lineData.setItemLayout(idx, [ + fromData.getItemLayout(idx), + toData.getItemLayout(idx) + ]); + + lineData.setItemVisual(idx, { + 'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'), + 'fromSymbol': fromData.getItemVisual(idx, 'symbol'), + 'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'), + 'toSymbol': toData.getItemVisual(idx, 'symbol') + }); + }); + + lineDraw.updateData(lineData); + + // Set host model for tooltip + // FIXME + mlData.line.eachItemGraphicEl(function (el, idx) { + el.traverse(function (child) { + child.dataModel = mlModel; + }); + }); + + function updateDataVisualAndLayout(data, idx, isFrom) { + var itemModel = data.getItemModel(idx); + + updateSingleMarkerEndLayout( + data, idx, isFrom, seriesModel, api + ); + + data.setItemVisual(idx, { + symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1], + symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1], + color: itemModel.get('itemStyle.color') || seriesData.getVisual('color') + }); + } + + lineDraw.__keep = true; + + lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} coordSys + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$2(coordSys, seriesModel, mlModel) { + + var coordDimsInfos; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo( + seriesModel.getData().mapDimension(coordDim) + ) || {}; + // In map series data don't have lng and lat dimension. Fallback to same with coordSys + return defaults({name: coordDim}, info); + }); + } + else { + coordDimsInfos = [{ + name: 'value', + type: 'float' + }]; + } + + var fromData = new List(coordDimsInfos, mlModel); + var toData = new List(coordDimsInfos, mlModel); + // No dimensions + var lineData = new List([], mlModel); + + var optData = map(mlModel.get('data'), curry( + markLineTransform, seriesModel, coordSys, mlModel + )); + if (coordSys) { + optData = filter( + optData, curry(markLineFilter, coordSys) + ); + } + var dimValueGetter$$1 = coordSys ? dimValueGetter : function (item) { + return item.value; + }; + fromData.initData( + map(optData, function (item) { + return item[0]; + }), + null, + dimValueGetter$$1 + ); + toData.initData( + map(optData, function (item) { + return item[1]; + }), + null, + dimValueGetter$$1 + ); + lineData.initData( + map(optData, function (item) { + return item[2]; + }) + ); + lineData.hasItemOption = true; + + return { + from: fromData, + to: toData, + line: lineData + }; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerPreprocessor(function (opt) { + // Make sure markLine component is enabled + opt.markLine = opt.markLine || {}; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +MarkerModel.extend({ + + type: 'markArea', + + defaultOption: { + zlevel: 0, + // PENDING + z: 1, + tooltip: { + trigger: 'item' + }, + // markArea should fixed on the coordinate system + animation: false, + label: { + show: true, + position: 'top' + }, + itemStyle: { + // color and borderColor default to use color from series + // color: 'auto' + // borderColor: 'auto' + borderWidth: 0 + }, + + emphasis: { + label: { + show: true, + position: 'top' + } + } + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// TODO Better on polar + +var markAreaTransform = function (seriesModel, coordSys, maModel, item) { + var lt = dataTransform(seriesModel, item[0]); + var rb = dataTransform(seriesModel, item[1]); + var retrieve$$1 = retrieve; + + // FIXME make sure lt is less than rb + var ltCoord = lt.coord; + var rbCoord = rb.coord; + ltCoord[0] = retrieve$$1(ltCoord[0], -Infinity); + ltCoord[1] = retrieve$$1(ltCoord[1], -Infinity); + + rbCoord[0] = retrieve$$1(rbCoord[0], Infinity); + rbCoord[1] = retrieve$$1(rbCoord[1], Infinity); + + // Merge option into one + var result = mergeAll([{}, lt, rb]); + + result.coord = [ + lt.coord, rb.coord + ]; + result.x0 = lt.x; + result.y0 = lt.y; + result.x1 = rb.x; + result.y1 = rb.y; + return result; +}; + +function isInifinity$1(val) { + return !isNaN(val) && !isFinite(val); +} + +// If a markArea has one dim +function ifMarkLineHasOnlyDim$1(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + return isInifinity$1(fromCoord[otherDimIndex]) && isInifinity$1(toCoord[otherDimIndex]); +} + +function markAreaFilter(coordSys, item) { + var fromCoord = item.coord[0]; + var toCoord = item.coord[1]; + if (coordSys.type === 'cartesian2d') { + // In case + // { + // markArea: { + // data: [{ yAxis: 2 }] + // } + // } + if ( + fromCoord && toCoord + && (ifMarkLineHasOnlyDim$1(1, fromCoord, toCoord, coordSys) + || ifMarkLineHasOnlyDim$1(0, fromCoord, toCoord, coordSys)) + ) { + return true; + } + } + return dataFilter$1(coordSys, { + coord: fromCoord, + x: item.x0, + y: item.y0 + }) + || dataFilter$1(coordSys, { + coord: toCoord, + x: item.x1, + y: item.y1 + }); +} + +// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0'] +function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + + var point; + var xPx = parsePercent$1(itemModel.get(dims[0]), api.getWidth()); + var yPx = parsePercent$1(itemModel.get(dims[1]), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + data.getValues(dims, idx) + ); + } + else { + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + var pt = [x, y]; + coordSys.clampData && coordSys.clampData(pt, pt); + point = coordSys.dataToPoint(pt, true); + } + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + if (isInifinity$1(x)) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]); + } + else if (isInifinity$1(y)) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]); + } + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + return point; +} + +var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']]; + +MarkerView.extend({ + + type: 'markArea', + + // updateLayout: function (markAreaModel, ecModel, api) { + // ecModel.eachSeries(function (seriesModel) { + // var maModel = seriesModel.markAreaModel; + // if (maModel) { + // var areaData = maModel.getData(); + // areaData.each(function (idx) { + // var points = zrUtil.map(dimPermutations, function (dim) { + // return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + // }); + // // Layout + // areaData.setItemLayout(idx, points); + // var el = areaData.getItemGraphicEl(idx); + // el.setShape('points', points); + // }); + // } + // }, this); + // }, + + updateTransform: function (markAreaModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var maModel = seriesModel.markAreaModel; + if (maModel) { + var areaData = maModel.getData(); + areaData.each(function (idx) { + var points = map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + }); + // Layout + areaData.setItemLayout(idx, points); + var el = areaData.getItemGraphicEl(idx); + el.setShape('points', points); + }); + } + }, this); + }, + + renderSeries: function (seriesModel, maModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + + var areaGroupMap = this.markerGroupMap; + var polygonGroup = areaGroupMap.get(seriesId) + || areaGroupMap.set(seriesId, {group: new Group()}); + + this.group.add(polygonGroup.group); + polygonGroup.__keep = true; + + var areaData = createList$3(coordSys, seriesModel, maModel); + + // Line data for tooltip and formatter + maModel.setData(areaData); + + // Update visual and layout of line + areaData.each(function (idx) { + // Layout + areaData.setItemLayout(idx, map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + })); + + // Visual + areaData.setItemVisual(idx, { + color: seriesData.getVisual('color') + }); + }); + + + areaData.diff(polygonGroup.__data) + .add(function (idx) { + var polygon = new Polygon({ + shape: { + points: areaData.getItemLayout(idx) + } + }); + areaData.setItemGraphicEl(idx, polygon); + polygonGroup.group.add(polygon); + }) + .update(function (newIdx, oldIdx) { + var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx); + updateProps(polygon, { + shape: { + points: areaData.getItemLayout(newIdx) + } + }, maModel, newIdx); + polygonGroup.group.add(polygon); + areaData.setItemGraphicEl(newIdx, polygon); + }) + .remove(function (idx) { + var polygon = polygonGroup.__data.getItemGraphicEl(idx); + polygonGroup.group.remove(polygon); + }) + .execute(); + + areaData.eachItemGraphicEl(function (polygon, idx) { + var itemModel = areaData.getItemModel(idx); + var labelModel = itemModel.getModel('label'); + var labelHoverModel = itemModel.getModel('emphasis.label'); + var color = areaData.getItemVisual(idx, 'color'); + polygon.useStyle( + defaults( + itemModel.getModel('itemStyle').getItemStyle(), + { + fill: modifyAlpha(color, 0.4), + stroke: color + } + ) + ); + + polygon.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle(); + + setLabelStyle( + polygon.style, polygon.hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: maModel, + labelDataIndex: idx, + defaultText: areaData.getName(idx) || '', + isRectText: true, + autoColor: color + } + ); + + setHoverStyle(polygon, {}); + + polygon.dataModel = maModel; + }); + + polygonGroup.__data = areaData; + + polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} coordSys + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$3(coordSys, seriesModel, maModel) { + + var coordDimsInfos; + var areaData; + var dims = ['x0', 'y0', 'x1', 'y1']; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var data = seriesModel.getData(); + var info = data.getDimensionInfo( + data.mapDimension(coordDim) + ) || {}; + // In map series data don't have lng and lat dimension. Fallback to same with coordSys + return defaults({name: coordDim}, info); + }); + areaData = new List(map(dims, function (dim, idx) { + return { + name: dim, + type: coordDimsInfos[idx % 2].type + }; + }), maModel); + } + else { + coordDimsInfos = [{ + name: 'value', + type: 'float' + }]; + areaData = new List(coordDimsInfos, maModel); + } + + var optData = map(maModel.get('data'), curry( + markAreaTransform, seriesModel, coordSys, maModel + )); + if (coordSys) { + optData = filter( + optData, curry(markAreaFilter, coordSys) + ); + } + + var dimValueGetter$$1 = coordSys ? function (item, dimName, dataIndex, dimIndex) { + return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2]; + } : function (item) { + return item.value; + }; + areaData.initData(optData, null, dimValueGetter$$1); + areaData.hasItemOption = true; + return areaData; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerPreprocessor(function (opt) { + // Make sure markArea component is enabled + opt.markArea = opt.markArea || {}; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var preprocessor$3 = function (option) { + var timelineOpt = option && option.timeline; + + if (!isArray(timelineOpt)) { + timelineOpt = timelineOpt ? [timelineOpt] : []; + } + + each$1(timelineOpt, function (opt) { + if (!opt) { + return; + } + + compatibleEC2(opt); + }); +}; + +function compatibleEC2(opt) { + var type = opt.type; + + var ec2Types = {'number': 'value', 'time': 'time'}; + + // Compatible with ec2 + if (ec2Types[type]) { + opt.axisType = ec2Types[type]; + delete opt.type; + } + + transferItem(opt); + + if (has$2(opt, 'controlPosition')) { + var controlStyle = opt.controlStyle || (opt.controlStyle = {}); + if (!has$2(controlStyle, 'position')) { + controlStyle.position = opt.controlPosition; + } + if (controlStyle.position === 'none' && !has$2(controlStyle, 'show')) { + controlStyle.show = false; + delete controlStyle.position; + } + delete opt.controlPosition; + } + + each$1(opt.data || [], function (dataItem) { + if (isObject$1(dataItem) && !isArray(dataItem)) { + if (!has$2(dataItem, 'value') && has$2(dataItem, 'name')) { + // In ec2, using name as value. + dataItem.value = dataItem.name; + } + transferItem(dataItem); + } + }); +} + +function transferItem(opt) { + var itemStyle = opt.itemStyle || (opt.itemStyle = {}); + + var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); + + // Transfer label out + var label = opt.label || (opt.label || {}); + var labelNormal = label.normal || (label.normal = {}); + var excludeLabelAttr = {normal: 1, emphasis: 1}; + + each$1(label, function (value, name) { + if (!excludeLabelAttr[name] && !has$2(labelNormal, name)) { + labelNormal[name] = value; + } + }); + + if (itemStyleEmphasis.label && !has$2(label, 'emphasis')) { + label.emphasis = itemStyleEmphasis.label; + delete itemStyleEmphasis.label; + } +} + +function has$2(obj, attr) { + return obj.hasOwnProperty(attr); +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +ComponentModel.registerSubTypeDefaulter('timeline', function () { + // Only slider now. + return 'slider'; +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +registerAction( + + {type: 'timelineChange', event: 'timelineChanged', update: 'prepareAndUpdate'}, + + function (payload, ecModel) { + + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel && payload.currentIndex != null) { + timelineModel.setCurrentIndex(payload.currentIndex); + + if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) { + timelineModel.setPlayState(false); + } + } + + // Set normalized currentIndex to payload. + ecModel.resetOption('timeline'); + + return defaults({ + currentIndex: timelineModel.option.currentIndex + }, payload); + } +); + +registerAction( + + {type: 'timelinePlayChange', event: 'timelinePlayChanged', update: 'update'}, + + function (payload, ecModel) { + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel && payload.playState != null) { + timelineModel.setPlayState(payload.playState); + } + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var TimelineModel = ComponentModel.extend({ + + type: 'timeline', + + layoutMode: 'box', + + /** + * @protected + */ + defaultOption: { + + zlevel: 0, // 一级层叠 + z: 4, // 二级层叠 + show: true, + + axisType: 'time', // 模式是时间类型,支持 value, category + + realtime: true, + + left: '20%', + top: null, + right: '20%', + bottom: 0, + width: null, + height: 40, + padding: 5, + + controlPosition: 'left', // 'left' 'right' 'top' 'bottom' 'none' + autoPlay: false, + rewind: false, // 反向播放 + loop: true, + playInterval: 2000, // 播放时间间隔,单位ms + + currentIndex: 0, + + itemStyle: {}, + label: { + color: '#000' + }, + + data: [] + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel) { + + /** + * @private + * @type {module:echarts/data/List} + */ + this._data; + + /** + * @private + * @type {Array.} + */ + this._names; + + this.mergeDefaultAndTheme(option, ecModel); + this._initData(); + }, + + /** + * @override + */ + mergeOption: function (option) { + TimelineModel.superApply(this, 'mergeOption', arguments); + this._initData(); + }, + + /** + * @param {number} [currentIndex] + */ + setCurrentIndex: function (currentIndex) { + if (currentIndex == null) { + currentIndex = this.option.currentIndex; + } + var count = this._data.count(); + + if (this.option.loop) { + currentIndex = (currentIndex % count + count) % count; + } + else { + currentIndex >= count && (currentIndex = count - 1); + currentIndex < 0 && (currentIndex = 0); + } + + this.option.currentIndex = currentIndex; + }, + + /** + * @return {number} currentIndex + */ + getCurrentIndex: function () { + return this.option.currentIndex; + }, + + /** + * @return {boolean} + */ + isIndexMax: function () { + return this.getCurrentIndex() >= this._data.count() - 1; + }, + + /** + * @param {boolean} state true: play, false: stop + */ + setPlayState: function (state) { + this.option.autoPlay = !!state; + }, + + /** + * @return {boolean} true: play, false: stop + */ + getPlayState: function () { + return !!this.option.autoPlay; + }, + + /** + * @private + */ + _initData: function () { + var thisOption = this.option; + var dataArr = thisOption.data || []; + var axisType = thisOption.axisType; + var names = this._names = []; + + if (axisType === 'category') { + var idxArr = []; + each$1(dataArr, function (item, index) { + var value = getDataItemValue(item); + var newItem; + + if (isObject$1(item)) { + newItem = clone(item); + newItem.value = index; + } + else { + newItem = index; + } + + idxArr.push(newItem); + + if (!isString(value) && (value == null || isNaN(value))) { + value = ''; + } + + names.push(value + ''); + }); + dataArr = idxArr; + } + + var dimType = ({category: 'ordinal', time: 'time'})[axisType] || 'number'; + + var data = this._data = new List([{name: 'value', type: dimType}], this); + + data.initData(dataArr, names); + }, + + getData: function () { + return this._data; + }, + + /** + * @public + * @return {Array.} categoreis + */ + getCategories: function () { + if (this.get('axisType') === 'category') { + return this._names.slice(); + } + } + +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var SliderTimelineModel = TimelineModel.extend({ + + type: 'timeline.slider', + + /** + * @protected + */ + defaultOption: { + + backgroundColor: 'rgba(0,0,0,0)', // 时间轴背景颜色 + borderColor: '#ccc', // 时间轴边框颜色 + borderWidth: 0, // 时间轴边框线宽,单位px,默认为0(无边框) + + orient: 'horizontal', // 'vertical' + inverse: false, + + tooltip: { // boolean or Object + trigger: 'item' // data item may also have tootip attr. + }, + + symbol: 'emptyCircle', + symbolSize: 10, + + lineStyle: { + show: true, + width: 2, + color: '#304654' + }, + label: { // 文本标签 + position: 'auto', // auto left right top bottom + // When using number, label position is not + // restricted by viewRect. + // positive: right/bottom, negative: left/top + show: true, + interval: 'auto', + rotate: 0, + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#304654' + }, + itemStyle: { + color: '#304654', + borderWidth: 1 + }, + + checkpointStyle: { + symbol: 'circle', + symbolSize: 13, + color: '#c23531', + borderWidth: 5, + borderColor: 'rgba(194,53,49, 0.5)', + animation: true, + animationDuration: 300, + animationEasing: 'quinticInOut' + }, + + controlStyle: { + show: true, + showPlayBtn: true, + showPrevBtn: true, + showNextBtn: true, + itemSize: 22, + itemGap: 12, + position: 'left', // 'left' 'right' 'top' 'bottom' + playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z', // jshint ignore:line + stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z', // jshint ignore:line + nextIcon: 'path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z', // jshint ignore:line + prevIcon: 'path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z', // jshint ignore:line + + color: '#304654', + borderColor: '#304654', + borderWidth: 1 + }, + + emphasis: { + label: { + show: true, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#c23531' + }, + + itemStyle: { + color: '#c23531' + }, + + controlStyle: { + color: '#c23531', + borderColor: '#c23531', + borderWidth: 2 + } + }, + data: [] + } + +}); + +mixin(SliderTimelineModel, dataFormatMixin); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var TimelineView = Component.extend({ + type: 'timeline' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * Extend axis 2d + * @constructor module:echarts/coord/cartesian/Axis2D + * @extends {module:echarts/coord/cartesian/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var TimelineAxis = function (dim, scale, coordExtent, axisType) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * Axis model + * @param {module:echarts/component/TimelineModel} + */ + this.model = null; +}; + +TimelineAxis.prototype = { + + constructor: TimelineAxis, + + /** + * @override + */ + getLabelModel: function () { + return this.model.getModel('label'); + }, + + /** + * @override + */ + isHorizontal: function () { + return this.model.get('orient') === 'horizontal'; + } + +}; + +inherits(TimelineAxis, Axis); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var bind$6 = bind; +var each$27 = each$1; + +var PI$4 = Math.PI; + +TimelineView.extend({ + + type: 'timeline.slider', + + init: function (ecModel, api) { + + this.api = api; + + /** + * @private + * @type {module:echarts/component/timeline/TimelineAxis} + */ + this._axis; + + /** + * @private + * @type {module:zrender/core/BoundingRect} + */ + this._viewRect; + + /** + * @type {number} + */ + this._timer; + + /** + * @type {module:zrender/Element} + */ + this._currentPointer; + + /** + * @type {module:zrender/container/Group} + */ + this._mainGroup; + + /** + * @type {module:zrender/container/Group} + */ + this._labelGroup; + }, + + /** + * @override + */ + render: function (timelineModel, ecModel, api, payload) { + this.model = timelineModel; + this.api = api; + this.ecModel = ecModel; + + this.group.removeAll(); + + if (timelineModel.get('show', true)) { + + var layoutInfo = this._layout(timelineModel, api); + var mainGroup = this._createGroup('mainGroup'); + var labelGroup = this._createGroup('labelGroup'); + + /** + * @private + * @type {module:echarts/component/timeline/TimelineAxis} + */ + var axis = this._axis = this._createAxis(layoutInfo, timelineModel); + + timelineModel.formatTooltip = function (dataIndex) { + return encodeHTML(axis.scale.getLabel(dataIndex)); + }; + + each$27( + ['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], + function (name) { + this['_render' + name](layoutInfo, mainGroup, axis, timelineModel); + }, + this + ); + + this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel); + this._position(layoutInfo, timelineModel); + } + + this._doPlayStop(); + }, + + /** + * @override + */ + remove: function () { + this._clearTimer(); + this.group.removeAll(); + }, + + /** + * @override + */ + dispose: function () { + this._clearTimer(); + }, + + _layout: function (timelineModel, api) { + var labelPosOpt = timelineModel.get('label.position'); + var orient = timelineModel.get('orient'); + var viewRect = getViewRect$4(timelineModel, api); + // Auto label offset. + if (labelPosOpt == null || labelPosOpt === 'auto') { + labelPosOpt = orient === 'horizontal' + ? ((viewRect.y + viewRect.height / 2) < api.getHeight() / 2 ? '-' : '+') + : ((viewRect.x + viewRect.width / 2) < api.getWidth() / 2 ? '+' : '-'); + } + else if (isNaN(labelPosOpt)) { + labelPosOpt = ({ + horizontal: {top: '-', bottom: '+'}, + vertical: {left: '-', right: '+'} + })[orient][labelPosOpt]; + } + + var labelAlignMap = { + horizontal: 'center', + vertical: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'left' : 'right' + }; + + var labelBaselineMap = { + horizontal: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'top' : 'bottom', + vertical: 'middle' + }; + var rotationMap = { + horizontal: 0, + vertical: PI$4 / 2 + }; + + // Position + var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width; + + var controlModel = timelineModel.getModel('controlStyle'); + var showControl = controlModel.get('show', true); + var controlSize = showControl ? controlModel.get('itemSize') : 0; + var controlGap = showControl ? controlModel.get('itemGap') : 0; + var sizePlusGap = controlSize + controlGap; + + // Special label rotate. + var labelRotation = timelineModel.get('label.rotate') || 0; + labelRotation = labelRotation * PI$4 / 180; // To radian. + + var playPosition; + var prevBtnPosition; + var nextBtnPosition; + var axisExtent; + var controlPosition = controlModel.get('position', true); + var showPlayBtn = showControl && controlModel.get('showPlayBtn', true); + var showPrevBtn = showControl && controlModel.get('showPrevBtn', true); + var showNextBtn = showControl && controlModel.get('showNextBtn', true); + var xLeft = 0; + var xRight = mainLength; + + // position[0] means left, position[1] means middle. + if (controlPosition === 'left' || controlPosition === 'bottom') { + showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap); + showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } + else { // 'top' 'right' + showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } + axisExtent = [xLeft, xRight]; + + if (timelineModel.get('inverse')) { + axisExtent.reverse(); + } + + return { + viewRect: viewRect, + mainLength: mainLength, + orient: orient, + + rotation: rotationMap[orient], + labelRotation: labelRotation, + labelPosOpt: labelPosOpt, + labelAlign: timelineModel.get('label.align') || labelAlignMap[orient], + labelBaseline: timelineModel.get('label.verticalAlign') + || timelineModel.get('label.baseline') + || labelBaselineMap[orient], + + // Based on mainGroup. + playPosition: playPosition, + prevBtnPosition: prevBtnPosition, + nextBtnPosition: nextBtnPosition, + axisExtent: axisExtent, + + controlSize: controlSize, + controlGap: controlGap + }; + }, + + _position: function (layoutInfo, timelineModel) { + // Position is be called finally, because bounding rect is needed for + // adapt content to fill viewRect (auto adapt offset). + + // Timeline may be not all in the viewRect when 'offset' is specified + // as a number, because it is more appropriate that label aligns at + // 'offset' but not the other edge defined by viewRect. + + var mainGroup = this._mainGroup; + var labelGroup = this._labelGroup; + + var viewRect = layoutInfo.viewRect; + if (layoutInfo.orient === 'vertical') { + // transform to horizontal, inverse rotate by left-top point. + var m = create$1(); + var rotateOriginX = viewRect.x; + var rotateOriginY = viewRect.y + viewRect.height; + translate(m, m, [-rotateOriginX, -rotateOriginY]); + rotate(m, m, -PI$4 / 2); + translate(m, m, [rotateOriginX, rotateOriginY]); + viewRect = viewRect.clone(); + viewRect.applyTransform(m); + } + + var viewBound = getBound(viewRect); + var mainBound = getBound(mainGroup.getBoundingRect()); + var labelBound = getBound(labelGroup.getBoundingRect()); + + var mainPosition = mainGroup.position; + var labelsPosition = labelGroup.position; + + labelsPosition[0] = mainPosition[0] = viewBound[0][0]; + + var labelPosOpt = layoutInfo.labelPosOpt; + + if (isNaN(labelPosOpt)) { // '+' or '-' + var mainBoundIdx = labelPosOpt === '+' ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx); + } + else { + var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + labelsPosition[1] = mainPosition[1] + labelPosOpt; + } + + mainGroup.attr('position', mainPosition); + labelGroup.attr('position', labelsPosition); + mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation; + + setOrigin(mainGroup); + setOrigin(labelGroup); + + function setOrigin(targetGroup) { + var pos = targetGroup.position; + targetGroup.origin = [ + viewBound[0][0] - pos[0], + viewBound[1][0] - pos[1] + ]; + } + + function getBound(rect) { + // [[xmin, xmax], [ymin, ymax]] + return [ + [rect.x, rect.x + rect.width], + [rect.y, rect.y + rect.height] + ]; + } + + function toBound(fromPos, from, to, dimIdx, boundIdx) { + fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx]; + } + }, + + _createAxis: function (layoutInfo, timelineModel) { + var data = timelineModel.getData(); + var axisType = timelineModel.get('axisType'); + + var scale = createScaleByModel(timelineModel, axisType); + + // Customize scale. The `tickValue` is `dataIndex`. + scale.getTicks = function () { + return data.mapArray(['value'], function (value) { + return value; + }); + }; + + var dataExtent = data.getDataExtent('value'); + scale.setExtent(dataExtent[0], dataExtent[1]); + scale.niceTicks(); + + var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType); + axis.model = timelineModel; + + return axis; + }, + + _createGroup: function (name) { + var newGroup = this['_' + name] = new Group(); + this.group.add(newGroup); + return newGroup; + }, + + _renderAxisLine: function (layoutInfo, group, axis, timelineModel) { + var axisExtent = axis.getExtent(); + + if (!timelineModel.get('lineStyle.show')) { + return; + } + + group.add(new Line({ + shape: { + x1: axisExtent[0], y1: 0, + x2: axisExtent[1], y2: 0 + }, + style: extend( + {lineCap: 'round'}, + timelineModel.getModel('lineStyle').getLineStyle() + ), + silent: true, + z2: 1 + })); + }, + + /** + * @private + */ + _renderAxisTick: function (layoutInfo, group, axis, timelineModel) { + var data = timelineModel.getData(); + // Show all ticks, despite ignoring strategy. + var ticks = axis.scale.getTicks(); + + // The value is dataIndex, see the costomized scale. + each$27(ticks, function (value) { + var tickCoord = axis.dataToCoord(value); + var itemModel = data.getItemModel(value); + var itemStyleModel = itemModel.getModel('itemStyle'); + var hoverStyleModel = itemModel.getModel('emphasis.itemStyle'); + var symbolOpt = { + position: [tickCoord, 0], + onclick: bind$6(this._changeTimeline, this, value) + }; + var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt); + setHoverStyle(el, hoverStyleModel.getItemStyle()); + + if (itemModel.get('tooltip')) { + el.dataIndex = value; + el.dataModel = timelineModel; + } + else { + el.dataIndex = el.dataModel = null; + } + + }, this); + }, + + /** + * @private + */ + _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) { + var labelModel = axis.getLabelModel(); + + if (!labelModel.get('show')) { + return; + } + + var data = timelineModel.getData(); + var labels = axis.getViewLabels(); + + each$27(labels, function (labelItem) { + // The tickValue is dataIndex, see the costomized scale. + var dataIndex = labelItem.tickValue; + + var itemModel = data.getItemModel(dataIndex); + var normalLabelModel = itemModel.getModel('label'); + var hoverLabelModel = itemModel.getModel('emphasis.label'); + var tickCoord = axis.dataToCoord(labelItem.tickValue); + var textEl = new Text({ + position: [tickCoord, 0], + rotation: layoutInfo.labelRotation - layoutInfo.rotation, + onclick: bind$6(this._changeTimeline, this, dataIndex), + silent: false + }); + setTextStyle(textEl.style, normalLabelModel, { + text: labelItem.formattedLabel, + textAlign: layoutInfo.labelAlign, + textVerticalAlign: layoutInfo.labelBaseline + }); + + group.add(textEl); + setHoverStyle( + textEl, setTextStyle({}, hoverLabelModel) + ); + + }, this); + }, + + /** + * @private + */ + _renderControl: function (layoutInfo, group, axis, timelineModel) { + var controlSize = layoutInfo.controlSize; + var rotation = layoutInfo.rotation; + + var itemStyle = timelineModel.getModel('controlStyle').getItemStyle(); + var hoverStyle = timelineModel.getModel('emphasis.controlStyle').getItemStyle(); + var rect = [0, -controlSize / 2, controlSize, controlSize]; + var playState = timelineModel.getPlayState(); + var inverse = timelineModel.get('inverse', true); + + makeBtn( + layoutInfo.nextBtnPosition, + 'controlStyle.nextIcon', + bind$6(this._changeTimeline, this, inverse ? '-' : '+') + ); + makeBtn( + layoutInfo.prevBtnPosition, + 'controlStyle.prevIcon', + bind$6(this._changeTimeline, this, inverse ? '+' : '-') + ); + makeBtn( + layoutInfo.playPosition, + 'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'), + bind$6(this._handlePlayClick, this, !playState), + true + ); + + function makeBtn(position, iconPath, onclick, willRotate) { + if (!position) { + return; + } + var opt = { + position: position, + origin: [controlSize / 2, 0], + rotation: willRotate ? -rotation : 0, + rectHover: true, + style: itemStyle, + onclick: onclick + }; + var btn = makeIcon(timelineModel, iconPath, rect, opt); + group.add(btn); + setHoverStyle(btn, hoverStyle); + } + }, + + _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) { + var data = timelineModel.getData(); + var currentIndex = timelineModel.getCurrentIndex(); + var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle'); + var me = this; + + var callback = { + onCreate: function (pointer) { + pointer.draggable = true; + pointer.drift = bind$6(me._handlePointerDrag, me); + pointer.ondragend = bind$6(me._handlePointerDragend, me); + pointerMoveTo(pointer, currentIndex, axis, timelineModel, true); + }, + onUpdate: function (pointer) { + pointerMoveTo(pointer, currentIndex, axis, timelineModel); + } + }; + + // Reuse when exists, for animation and drag. + this._currentPointer = giveSymbol( + pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback + ); + }, + + _handlePlayClick: function (nextState) { + this._clearTimer(); + this.api.dispatchAction({ + type: 'timelinePlayChange', + playState: nextState, + from: this.uid + }); + }, + + _handlePointerDrag: function (dx, dy, e) { + this._clearTimer(); + this._pointerChangeTimeline([e.offsetX, e.offsetY]); + }, + + _handlePointerDragend: function (e) { + this._pointerChangeTimeline([e.offsetX, e.offsetY], true); + }, + + _pointerChangeTimeline: function (mousePos, trigger) { + var toCoord = this._toAxisCoord(mousePos)[0]; + + var axis = this._axis; + var axisExtent = asc(axis.getExtent().slice()); + + toCoord > axisExtent[1] && (toCoord = axisExtent[1]); + toCoord < axisExtent[0] && (toCoord = axisExtent[0]); + + this._currentPointer.position[0] = toCoord; + this._currentPointer.dirty(); + + var targetDataIndex = this._findNearestTick(toCoord); + var timelineModel = this.model; + + if (trigger || ( + targetDataIndex !== timelineModel.getCurrentIndex() + && timelineModel.get('realtime') + )) { + this._changeTimeline(targetDataIndex); + } + }, + + _doPlayStop: function () { + this._clearTimer(); + + if (this.model.getPlayState()) { + this._timer = setTimeout( + bind$6(handleFrame, this), + this.model.get('playInterval') + ); + } + + function handleFrame() { + // Do not cache + var timelineModel = this.model; + this._changeTimeline( + timelineModel.getCurrentIndex() + + (timelineModel.get('rewind', true) ? -1 : 1) + ); + } + }, + + _toAxisCoord: function (vertex) { + var trans = this._mainGroup.getLocalTransform(); + return applyTransform$1(vertex, trans, true); + }, + + _findNearestTick: function (axisCoord) { + var data = this.model.getData(); + var dist = Infinity; + var targetDataIndex; + var axis = this._axis; + + data.each(['value'], function (value, dataIndex) { + var coord = axis.dataToCoord(value); + var d = Math.abs(coord - axisCoord); + if (d < dist) { + dist = d; + targetDataIndex = dataIndex; + } + }); + + return targetDataIndex; + }, + + _clearTimer: function () { + if (this._timer) { + clearTimeout(this._timer); + this._timer = null; + } + }, + + _changeTimeline: function (nextIndex) { + var currentIndex = this.model.getCurrentIndex(); + + if (nextIndex === '+') { + nextIndex = currentIndex + 1; + } + else if (nextIndex === '-') { + nextIndex = currentIndex - 1; + } + + this.api.dispatchAction({ + type: 'timelineChange', + currentIndex: nextIndex, + from: this.uid + }); + } + +}); + +function getViewRect$4(model, api) { + return getLayoutRect( + model.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + }, + model.get('padding') + ); +} + +function makeIcon(timelineModel, objPath, rect, opts) { + var icon = makePath( + timelineModel.get(objPath).replace(/^path:\/\//, ''), + clone(opts || {}), + new BoundingRect(rect[0], rect[1], rect[2], rect[3]), + 'center' + ); + + return icon; +} + +/** + * Create symbol or update symbol + * opt: basic position and event handlers + */ +function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) { + var color = itemStyleModel.get('color'); + + if (!symbol) { + var symbolType = hostModel.get('symbol'); + symbol = createSymbol(symbolType, -1, -1, 2, 2, color); + symbol.setStyle('strokeNoScale', true); + group.add(symbol); + callback && callback.onCreate(symbol); + } + else { + symbol.setColor(color); + group.add(symbol); // Group may be new, also need to add. + callback && callback.onUpdate(symbol); + } + + // Style + var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']); + symbol.setStyle(itemStyle); + + // Transform and events. + opt = merge({ + rectHover: true, + z2: 100 + }, opt, true); + + var symbolSize = hostModel.get('symbolSize'); + symbolSize = symbolSize instanceof Array + ? symbolSize.slice() + : [+symbolSize, +symbolSize]; + symbolSize[0] /= 2; + symbolSize[1] /= 2; + opt.scale = symbolSize; + + var symbolOffset = hostModel.get('symbolOffset'); + if (symbolOffset) { + var pos = opt.position = opt.position || [0, 0]; + pos[0] += parsePercent$1(symbolOffset[0], symbolSize[0]); + pos[1] += parsePercent$1(symbolOffset[1], symbolSize[1]); + } + + var symbolRotate = hostModel.get('symbolRotate'); + opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + + symbol.attr(opt); + + // FIXME + // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed, + // getBoundingRect will return wrong result. + // (This is supposed to be resolved in zrender, but it is a little difficult to + // leverage performance and auto updateTransform) + // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol. + symbol.updateTransform(); + + return symbol; +} + +function pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) { + if (pointer.dragging) { + return; + } + + var pointerModel = timelineModel.getModel('checkpointStyle'); + var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex)); + + if (noAnimation || !pointerModel.get('animation', true)) { + pointer.attr({position: [toCoord, 0]}); + } + else { + pointer.stopAnimation(true); + pointer.animateTo( + {position: [toCoord, 0]}, + pointerModel.get('animationDuration', true), + pointerModel.get('animationEasing', true) + ); + } +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$3); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var ToolboxModel = extendComponentModel({ + + type: 'toolbox', + + layoutMode: { + type: 'box', + ignoreSize: true + }, + + optionUpdated: function () { + ToolboxModel.superApply(this, 'optionUpdated', arguments); + + each$1(this.option.feature, function (featureOpt, featureName) { + var Feature = get$1(featureName); + Feature && merge(featureOpt, Feature.defaultOption); + }); + }, + + defaultOption: { + + show: true, + + z: 6, + + zlevel: 0, + + orient: 'horizontal', + + left: 'right', + + top: 'top', + + // right + // bottom + + backgroundColor: 'transparent', + + borderColor: '#ccc', + + borderRadius: 0, + + borderWidth: 0, + + padding: 5, + + itemSize: 15, + + itemGap: 8, + + showTitle: true, + + iconStyle: { + borderColor: '#666', + color: 'none' + }, + emphasis: { + iconStyle: { + borderColor: '#3E98C5' + } + } + // textStyle: {}, + + // feature + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +extendComponentView({ + + type: 'toolbox', + + render: function (toolboxModel, ecModel, api, payload) { + var group = this.group; + group.removeAll(); + + if (!toolboxModel.get('show')) { + return; + } + + var itemSize = +toolboxModel.get('itemSize'); + var featureOpts = toolboxModel.get('feature') || {}; + var features = this._features || (this._features = {}); + + var featureNames = []; + each$1(featureOpts, function (opt, name) { + featureNames.push(name); + }); + + (new DataDiffer(this._featureNames || [], featureNames)) + .add(processFeature) + .update(processFeature) + .remove(curry(processFeature, null)) + .execute(); + + // Keep for diff. + this._featureNames = featureNames; + + function processFeature(newIndex, oldIndex) { + var featureName = featureNames[newIndex]; + var oldName = featureNames[oldIndex]; + var featureOpt = featureOpts[featureName]; + var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel); + var feature; + + if (featureName && !oldName) { // Create + if (isUserFeatureName(featureName)) { + feature = { + model: featureModel, + onclick: featureModel.option.onclick, + featureName: featureName + }; + } + else { + var Feature = get$1(featureName); + if (!Feature) { + return; + } + feature = new Feature(featureModel, ecModel, api); + } + features[featureName] = feature; + } + else { + feature = features[oldName]; + // If feature does not exsit. + if (!feature) { + return; + } + feature.model = featureModel; + feature.ecModel = ecModel; + feature.api = api; + } + + if (!featureName && oldName) { + feature.dispose && feature.dispose(ecModel, api); + return; + } + + if (!featureModel.get('show') || feature.unusable) { + feature.remove && feature.remove(ecModel, api); + return; + } + + createIconPaths(featureModel, feature, featureName); + + featureModel.setIconStatus = function (iconName, status) { + var option = this.option; + var iconPaths = this.iconPaths; + option.iconStatus = option.iconStatus || {}; + option.iconStatus[iconName] = status; + // FIXME + iconPaths[iconName] && iconPaths[iconName].trigger(status); + }; + + if (feature.render) { + feature.render(featureModel, ecModel, api, payload); + } + } + + function createIconPaths(featureModel, feature, featureName) { + var iconStyleModel = featureModel.getModel('iconStyle'); + var iconStyleEmphasisModel = featureModel.getModel('emphasis.iconStyle'); + + // If one feature has mutiple icon. they are orginaized as + // { + // icon: { + // foo: '', + // bar: '' + // }, + // title: { + // foo: '', + // bar: '' + // } + // } + var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon'); + var titles = featureModel.get('title') || {}; + if (typeof icons === 'string') { + var icon = icons; + var title = titles; + icons = {}; + titles = {}; + icons[featureName] = icon; + titles[featureName] = title; + } + var iconPaths = featureModel.iconPaths = {}; + each$1(icons, function (iconStr, iconName) { + var path = createIcon( + iconStr, + {}, + { + x: -itemSize / 2, + y: -itemSize / 2, + width: itemSize, + height: itemSize + } + ); + path.setStyle(iconStyleModel.getItemStyle()); + path.hoverStyle = iconStyleEmphasisModel.getItemStyle(); + + setHoverStyle(path); + + if (toolboxModel.get('showTitle')) { + path.__title = titles[iconName]; + path.on('mouseover', function () { + // Should not reuse above hoverStyle, which might be modified. + var hoverStyle = iconStyleEmphasisModel.getItemStyle(); + path.setStyle({ + text: titles[iconName], + textPosition: hoverStyle.textPosition || 'bottom', + textFill: hoverStyle.fill || hoverStyle.stroke || '#000', + textAlign: hoverStyle.textAlign || 'center' + }); + }) + .on('mouseout', function () { + path.setStyle({ + textFill: null + }); + }); + } + path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal'); + + group.add(path); + path.on('click', bind( + feature.onclick, feature, ecModel, api, iconName + )); + + iconPaths[iconName] = path; + }); + } + + layout$3(group, toolboxModel, api); + // Render background after group is layout + // FIXME + group.add(makeBackground(group.getBoundingRect(), toolboxModel)); + + // Adjust icon title positions to avoid them out of screen + group.eachChild(function (icon) { + var titleText = icon.__title; + var hoverStyle = icon.hoverStyle; + // May be background element + if (hoverStyle && titleText) { + var rect = getBoundingRect( + titleText, makeFont(hoverStyle) + ); + var offsetX = icon.position[0] + group.position[0]; + var offsetY = icon.position[1] + group.position[1] + itemSize; + + var needPutOnTop = false; + if (offsetY + rect.height > api.getHeight()) { + hoverStyle.textPosition = 'top'; + needPutOnTop = true; + } + var topOffset = needPutOnTop ? (-5 - rect.height) : (itemSize + 8); + if (offsetX + rect.width / 2 > api.getWidth()) { + hoverStyle.textPosition = ['100%', topOffset]; + hoverStyle.textAlign = 'right'; + } + else if (offsetX - rect.width / 2 < 0) { + hoverStyle.textPosition = [0, topOffset]; + hoverStyle.textAlign = 'left'; + } + } + }); + }, + + updateView: function (toolboxModel, ecModel, api, payload) { + each$1(this._features, function (feature) { + feature.updateView && feature.updateView(feature.model, ecModel, api, payload); + }); + }, + + // updateLayout: function (toolboxModel, ecModel, api, payload) { + // zrUtil.each(this._features, function (feature) { + // feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload); + // }); + // }, + + remove: function (ecModel, api) { + each$1(this._features, function (feature) { + feature.remove && feature.remove(ecModel, api); + }); + this.group.removeAll(); + }, + + dispose: function (ecModel, api) { + each$1(this._features, function (feature) { + feature.dispose && feature.dispose(ecModel, api); + }); + } +}); + +function isUserFeatureName(featureName) { + return featureName.indexOf('my') === 0; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/* global Uint8Array */ + +var saveAsImageLang = lang.toolbox.saveAsImage; + +function SaveAsImage(model) { + this.model = model; +} + +SaveAsImage.defaultOption = { + show: true, + icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0', + title: saveAsImageLang.title, + type: 'png', + // Default use option.backgroundColor + // backgroundColor: '#fff', + name: '', + excludeComponents: ['toolbox'], + pixelRatio: 1, + lang: saveAsImageLang.lang.slice() +}; + +SaveAsImage.prototype.unusable = !env$1.canvasSupported; + +var proto$4 = SaveAsImage.prototype; + +proto$4.onclick = function (ecModel, api) { + var model = this.model; + var title = model.get('name') || ecModel.get('title.0.text') || 'echarts'; + var $a = document.createElement('a'); + var type = model.get('type', true) || 'png'; + $a.download = title + '.' + type; + $a.target = '_blank'; + var url = api.getConnectedDataURL({ + type: type, + backgroundColor: model.get('backgroundColor', true) + || ecModel.get('backgroundColor') || '#fff', + excludeComponents: model.get('excludeComponents'), + pixelRatio: model.get('pixelRatio') + }); + $a.href = url; + // Chrome and Firefox + if (typeof MouseEvent === 'function' && !env$1.browser.ie && !env$1.browser.edge) { + var evt = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: false + }); + $a.dispatchEvent(evt); + } + // IE + else { + if (window.navigator.msSaveOrOpenBlob) { + var bstr = atob(url.split(',')[1]); + var n = bstr.length; + var u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + var blob = new Blob([u8arr]); + window.navigator.msSaveOrOpenBlob(blob, title + '.' + type); + } + else { + var lang$$1 = model.get('lang'); + var html = '' + + '' + + '' + + ''; + var tab = window.open(); + tab.document.write(html); + } + } +}; + +register$1( + 'saveAsImage', SaveAsImage +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var magicTypeLang = lang.toolbox.magicType; + +function MagicType(model) { + this.model = model; +} + +MagicType.defaultOption = { + show: true, + type: [], + // Icon group + icon: { + /* eslint-disable */ + line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4', + bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7', + stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z', // jshint ignore:line + tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z' + /* eslint-enable */ + }, + // `line`, `bar`, `stack`, `tiled` + title: clone(magicTypeLang.title), + option: {}, + seriesIndex: {} +}; + +var proto$5 = MagicType.prototype; + +proto$5.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon'); + var icons = {}; + each$1(model.get('type'), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; +}; + +var seriesOptGenreator = { + 'line': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'bar') { + return merge({ + id: seriesId, + type: 'line', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get('option.line') || {}, true); + } + }, + 'bar': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line') { + return merge({ + id: seriesId, + type: 'bar', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get('option.bar') || {}, true); + } + }, + 'stack': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line' || seriesType === 'bar') { + return merge({ + id: seriesId, + stack: '__ec_magicType_stack__' + }, model.get('option.stack') || {}, true); + } + }, + 'tiled': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line' || seriesType === 'bar') { + return merge({ + id: seriesId, + stack: '' + }, model.get('option.tiled') || {}, true); + } + } +}; + +var radioTypes = [ + ['line', 'bar'], + ['stack', 'tiled'] +]; + +proto$5.onclick = function (ecModel, api, type) { + var model = this.model; + var seriesIndex = model.get('seriesIndex.' + type); + // Not supported magicType + if (!seriesOptGenreator[type]) { + return; + } + var newOption = { + series: [] + }; + var generateNewSeriesTypes = function (seriesModel) { + var seriesType = seriesModel.subType; + var seriesId = seriesModel.id; + var newSeriesOpt = seriesOptGenreator[type]( + seriesType, seriesId, seriesModel, model + ); + if (newSeriesOpt) { + // PENDING If merge original option? + defaults(newSeriesOpt, seriesModel.option); + newOption.series.push(newSeriesOpt); + } + // Modify boundaryGap + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) { + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + if (categoryAxis) { + var axisDim = categoryAxis.dim; + var axisType = axisDim + 'Axis'; + var axisModel = ecModel.queryComponents({ + mainType: axisType, + index: seriesModel.get(name + 'Index'), + id: seriesModel.get(name + 'Id') + })[0]; + var axisIndex = axisModel.componentIndex; + + newOption[axisType] = newOption[axisType] || []; + for (var i = 0; i <= axisIndex; i++) { + newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {}; + } + newOption[axisType][axisIndex].boundaryGap = type === 'bar'; + } + } + }; + + each$1(radioTypes, function (radio) { + if (indexOf(radio, type) >= 0) { + each$1(radio, function (item) { + model.setIconStatus(item, 'normal'); + }); + } + }); + + model.setIconStatus(type, 'emphasis'); + + ecModel.eachComponent( + { + mainType: 'series', + query: seriesIndex == null ? null : { + seriesIndex: seriesIndex + } + }, generateNewSeriesTypes + ); + api.dispatchAction({ + type: 'changeMagicType', + currentType: type, + newOption: newOption + }); +}; + +registerAction({ + type: 'changeMagicType', + event: 'magicTypeChanged', + update: 'prepareAndUpdate' +}, function (payload, ecModel) { + ecModel.mergeOption(payload.newOption); +}); + +register$1('magicType', MagicType); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var dataViewLang = lang.toolbox.dataView; + +var BLOCK_SPLITER = new Array(60).join('-'); +var ITEM_SPLITER = '\t'; +/** + * Group series into two types + * 1. on category axis, like line, bar + * 2. others, like scatter, pie + * @param {module:echarts/model/Global} ecModel + * @return {Object} + * @inner + */ +function groupSeries(ecModel) { + var seriesGroupByCategoryAxis = {}; + var otherSeries = []; + var meta = []; + ecModel.eachRawSeries(function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) { + var baseAxis = coordSys.getBaseAxis(); + if (baseAxis.type === 'category') { + var key = baseAxis.dim + '_' + baseAxis.index; + if (!seriesGroupByCategoryAxis[key]) { + seriesGroupByCategoryAxis[key] = { + categoryAxis: baseAxis, + valueAxis: coordSys.getOtherAxis(baseAxis), + series: [] + }; + meta.push({ + axisDim: baseAxis.dim, + axisIndex: baseAxis.index + }); + } + seriesGroupByCategoryAxis[key].series.push(seriesModel); + } + else { + otherSeries.push(seriesModel); + } + } + else { + otherSeries.push(seriesModel); + } + }); + + return { + seriesGroupByCategoryAxis: seriesGroupByCategoryAxis, + other: otherSeries, + meta: meta + }; +} + +/** + * Assemble content of series on cateogory axis + * @param {Array.} series + * @return {string} + * @inner + */ +function assembleSeriesWithCategoryAxis(series) { + var tables = []; + each$1(series, function (group, key) { + var categoryAxis = group.categoryAxis; + var valueAxis = group.valueAxis; + var valueAxisDim = valueAxis.dim; + + var headers = [' '].concat(map(group.series, function (series) { + return series.name; + })); + var columns = [categoryAxis.model.getCategories()]; + each$1(group.series, function (series) { + columns.push(series.getRawData().mapArray(valueAxisDim, function (val) { + return val; + })); + }); + // Assemble table content + var lines = [headers.join(ITEM_SPLITER)]; + for (var i = 0; i < columns[0].length; i++) { + var items = []; + for (var j = 0; j < columns.length; j++) { + items.push(columns[j][i]); + } + lines.push(items.join(ITEM_SPLITER)); + } + tables.push(lines.join('\n')); + }); + return tables.join('\n\n' + BLOCK_SPLITER + '\n\n'); +} + +/** + * Assemble content of other series + * @param {Array.} series + * @return {string} + * @inner + */ +function assembleOtherSeries(series) { + return map(series, function (series) { + var data = series.getRawData(); + var lines = [series.name]; + var vals = []; + data.each(data.dimensions, function () { + var argLen = arguments.length; + var dataIndex = arguments[argLen - 1]; + var name = data.getName(dataIndex); + for (var i = 0; i < argLen - 1; i++) { + vals[i] = arguments[i]; + } + lines.push((name ? (name + ITEM_SPLITER) : '') + vals.join(ITEM_SPLITER)); + }); + return lines.join('\n'); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'); +} + +/** + * @param {module:echarts/model/Global} + * @return {Object} + * @inner + */ +function getContentFromModel(ecModel) { + + var result = groupSeries(ecModel); + + return { + value: filter([ + assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), + assembleOtherSeries(result.other) + ], function (str) { + return str.replace(/[\n\t\s]/g, ''); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'), + + meta: result.meta + }; +} + + +function trim$1(str) { + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); +} +/** + * If a block is tsv format + */ +function isTSVFormat(block) { + // Simple method to find out if a block is tsv format + var firstLine = block.slice(0, block.indexOf('\n')); + if (firstLine.indexOf(ITEM_SPLITER) >= 0) { + return true; + } +} + +var itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g'); +/** + * @param {string} tsv + * @return {Object} + */ +function parseTSVContents(tsv) { + var tsvLines = tsv.split(/\n+/g); + var headers = trim$1(tsvLines.shift()).split(itemSplitRegex); + + var categories = []; + var series = map(headers, function (header) { + return { + name: header, + data: [] + }; + }); + for (var i = 0; i < tsvLines.length; i++) { + var items = trim$1(tsvLines[i]).split(itemSplitRegex); + categories.push(items.shift()); + for (var j = 0; j < items.length; j++) { + series[j] && (series[j].data[i] = items[j]); + } + } + return { + series: series, + categories: categories + }; +} + +/** + * @param {string} str + * @return {Array.} + * @inner + */ +function parseListContents(str) { + var lines = str.split(/\n+/g); + var seriesName = trim$1(lines.shift()); + + var data = []; + for (var i = 0; i < lines.length; i++) { + var items = trim$1(lines[i]).split(itemSplitRegex); + var name = ''; + var value; + var hasName = false; + if (isNaN(items[0])) { // First item is name + hasName = true; + name = items[0]; + items = items.slice(1); + data[i] = { + name: name, + value: [] + }; + value = data[i].value; + } + else { + value = data[i] = []; + } + for (var j = 0; j < items.length; j++) { + value.push(+items[j]); + } + if (value.length === 1) { + hasName ? (data[i].value = value[0]) : (data[i] = value[0]); + } + } + + return { + name: seriesName, + data: data + }; +} + +/** + * @param {string} str + * @param {Array.} blockMetaList + * @return {Object} + * @inner + */ +function parseContents(str, blockMetaList) { + var blocks = str.split(new RegExp('\n*' + BLOCK_SPLITER + '\n*', 'g')); + var newOption = { + series: [] + }; + each$1(blocks, function (block, idx) { + if (isTSVFormat(block)) { + var result = parseTSVContents(block); + var blockMeta = blockMetaList[idx]; + var axisKey = blockMeta.axisDim + 'Axis'; + + if (blockMeta) { + newOption[axisKey] = newOption[axisKey] || []; + newOption[axisKey][blockMeta.axisIndex] = { + data: result.categories + }; + newOption.series = newOption.series.concat(result.series); + } + } + else { + var result = parseListContents(block); + newOption.series.push(result); + } + }); + return newOption; +} + +/** + * @alias {module:echarts/component/toolbox/feature/DataView} + * @constructor + * @param {module:echarts/model/Model} model + */ +function DataView(model) { + + this._dom = null; + + this.model = model; +} + +DataView.defaultOption = { + show: true, + readOnly: false, + optionToContent: null, + contentToOption: null, + + icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28', + title: clone(dataViewLang.title), + lang: clone(dataViewLang.lang), + backgroundColor: '#fff', + textColor: '#000', + textareaColor: '#fff', + textareaBorderColor: '#333', + buttonColor: '#c23531', + buttonTextColor: '#fff' +}; + +DataView.prototype.onclick = function (ecModel, api) { + var container = api.getDom(); + var model = this.model; + if (this._dom) { + container.removeChild(this._dom); + } + var root = document.createElement('div'); + root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;'; + root.style.backgroundColor = model.get('backgroundColor') || '#fff'; + + // Create elements + var header = document.createElement('h4'); + var lang$$1 = model.get('lang') || []; + header.innerHTML = lang$$1[0] || model.get('title'); + header.style.cssText = 'margin: 10px 20px;'; + header.style.color = model.get('textColor'); + + var viewMain = document.createElement('div'); + var textarea = document.createElement('textarea'); + viewMain.style.cssText = 'display:block;width:100%;overflow:auto;'; + + var optionToContent = model.get('optionToContent'); + var contentToOption = model.get('contentToOption'); + var result = getContentFromModel(ecModel); + if (typeof optionToContent === 'function') { + var htmlOrDom = optionToContent(api.getOption()); + if (typeof htmlOrDom === 'string') { + viewMain.innerHTML = htmlOrDom; + } + else if (isDom(htmlOrDom)) { + viewMain.appendChild(htmlOrDom); + } + } + else { + // Use default textarea + viewMain.appendChild(textarea); + textarea.readOnly = model.get('readOnly'); + textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;'; + textarea.style.color = model.get('textColor'); + textarea.style.borderColor = model.get('textareaBorderColor'); + textarea.style.backgroundColor = model.get('textareaColor'); + textarea.value = result.value; + } + + var blockMetaList = result.meta; + + var buttonContainer = document.createElement('div'); + buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;'; + + var buttonStyle = 'float:right;margin-right:20px;border:none;' + + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px'; + var closeButton = document.createElement('div'); + var refreshButton = document.createElement('div'); + + buttonStyle += ';background-color:' + model.get('buttonColor'); + buttonStyle += ';color:' + model.get('buttonTextColor'); + + var self = this; + + function close() { + container.removeChild(root); + self._dom = null; + } + addEventListener(closeButton, 'click', close); + + addEventListener(refreshButton, 'click', function () { + var newOption; + try { + if (typeof contentToOption === 'function') { + newOption = contentToOption(viewMain, api.getOption()); + } + else { + newOption = parseContents(textarea.value, blockMetaList); + } + } + catch (e) { + close(); + throw new Error('Data view format error ' + e); + } + if (newOption) { + api.dispatchAction({ + type: 'changeDataView', + newOption: newOption + }); + } + + close(); + }); + + closeButton.innerHTML = lang$$1[1]; + refreshButton.innerHTML = lang$$1[2]; + refreshButton.style.cssText = buttonStyle; + closeButton.style.cssText = buttonStyle; + + !model.get('readOnly') && buttonContainer.appendChild(refreshButton); + buttonContainer.appendChild(closeButton); + + // http://stackoverflow.com/questions/6637341/use-tab-to-indent-in-textarea + addEventListener(textarea, 'keydown', function (e) { + if ((e.keyCode || e.which) === 9) { + // get caret position/selection + var val = this.value; + var start = this.selectionStart; + var end = this.selectionEnd; + + // set textarea value to: text before caret + tab + text after caret + this.value = val.substring(0, start) + ITEM_SPLITER + val.substring(end); + + // put caret at right position again + this.selectionStart = this.selectionEnd = start + 1; + + // prevent the focus lose + stop(e); + } + }); + + root.appendChild(header); + root.appendChild(viewMain); + root.appendChild(buttonContainer); + + viewMain.style.height = (container.clientHeight - 80) + 'px'; + + container.appendChild(root); + this._dom = root; +}; + +DataView.prototype.remove = function (ecModel, api) { + this._dom && api.getDom().removeChild(this._dom); +}; + +DataView.prototype.dispose = function (ecModel, api) { + this.remove(ecModel, api); +}; + +/** + * @inner + */ +function tryMergeDataOption(newData, originalData) { + return map(newData, function (newVal, idx) { + var original = originalData && originalData[idx]; + if (isObject$1(original) && !isArray(original)) { + if (isObject$1(newVal) && !isArray(newVal)) { + newVal = newVal.value; + } + // Original data has option + return defaults({ + value: newVal + }, original); + } + else { + return newVal; + } + }); +} + +register$1('dataView', DataView); + +registerAction({ + type: 'changeDataView', + event: 'dataViewChanged', + update: 'prepareAndUpdate' +}, function (payload, ecModel) { + var newSeriesOptList = []; + each$1(payload.newOption.series, function (seriesOpt) { + var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0]; + if (!seriesModel) { + // New created series + // Geuss the series type + newSeriesOptList.push(extend({ + // Default is scatter + type: 'scatter' + }, seriesOpt)); + } + else { + var originalData = seriesModel.get('data'); + newSeriesOptList.push({ + name: seriesOpt.name, + data: tryMergeDataOption(seriesOpt.data, originalData) + }); + } + }); + + ecModel.mergeOption(defaults({ + series: newSeriesOptList + }, payload.newOption)); +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var each$29 = each$1; + +var ATTR$2 = '\0_ec_hist_store'; + +/** + * @param {module:echarts/model/Global} ecModel + * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]} + */ +function push(ecModel, newSnapshot) { + var store = giveStore$1(ecModel); + + // If previous dataZoom can not be found, + // complete an range with current range. + each$29(newSnapshot, function (batchItem, dataZoomId) { + var i = store.length - 1; + for (; i >= 0; i--) { + var snapshot = store[i]; + if (snapshot[dataZoomId]) { + break; + } + } + if (i < 0) { + // No origin range set, create one by current range. + var dataZoomModel = ecModel.queryComponents( + {mainType: 'dataZoom', subType: 'select', id: dataZoomId} + )[0]; + if (dataZoomModel) { + var percentRange = dataZoomModel.getPercentRange(); + store[0][dataZoomId] = { + dataZoomId: dataZoomId, + start: percentRange[0], + end: percentRange[1] + }; + } + } + }); + + store.push(newSnapshot); +} + +/** + * @param {module:echarts/model/Global} ecModel + * @return {Object} snapshot + */ +function pop(ecModel) { + var store = giveStore$1(ecModel); + var head = store[store.length - 1]; + store.length > 1 && store.pop(); + + // Find top for all dataZoom. + var snapshot = {}; + each$29(head, function (batchItem, dataZoomId) { + for (var i = store.length - 1; i >= 0; i--) { + var batchItem = store[i][dataZoomId]; + if (batchItem) { + snapshot[dataZoomId] = batchItem; + break; + } + } + }); + + return snapshot; +} + +/** + * @param {module:echarts/model/Global} ecModel + */ +function clear$1(ecModel) { + ecModel[ATTR$2] = null; +} + +/** + * @param {module:echarts/model/Global} ecModel + * @return {number} records. always >= 1. + */ +function count(ecModel) { + return giveStore$1(ecModel).length; +} + +/** + * [{key: dataZoomId, value: {dataZoomId, range}}, ...] + * History length of each dataZoom may be different. + * this._history[0] is used to store origin range. + * @type {Array.} + */ +function giveStore$1(ecModel) { + var store = ecModel[ATTR$2]; + if (!store) { + store = ecModel[ATTR$2] = [{}]; + } + return store; +} + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +DataZoomModel.extend({ + type: 'dataZoom.select' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +DataZoomView.extend({ + type: 'dataZoom.select' +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +/** + * DataZoom component entry + */ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Use dataZoomSelect +var dataZoomLang = lang.toolbox.dataZoom; +var each$28 = each$1; + +// Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId +var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_'; + +function DataZoom(model, ecModel, api) { + + /** + * @private + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)) + .mount(); + + /** + * @private + * @type {boolean} + */ + this._isZoomActive; +} + +DataZoom.defaultOption = { + show: true, + // Icon group + icon: { + zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1', + back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26' + }, + // `zoom`, `back` + title: clone(dataZoomLang.title) +}; + +var proto$6 = DataZoom.prototype; + +proto$6.render = function (featureModel, ecModel, api, payload) { + this.model = featureModel; + this.ecModel = ecModel; + this.api = api; + + updateZoomBtnStatus(featureModel, ecModel, this, payload, api); + updateBackBtnStatus(featureModel, ecModel); +}; + +proto$6.onclick = function (ecModel, api, type) { + handlers$1[type].call(this); +}; + +proto$6.remove = function (ecModel, api) { + this._brushController.unmount(); +}; + +proto$6.dispose = function (ecModel, api) { + this._brushController.dispose(); +}; + +/** + * @private + */ +var handlers$1 = { + + zoom: function () { + var nextActive = !this._isZoomActive; + + this.api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'dataZoomSelect', + dataZoomSelectActive: nextActive + }); + }, + + back: function () { + this._dispatchZoomAction(pop(this.ecModel)); + } +}; + +/** + * @private + */ +proto$6._onBrush = function (areas, opt) { + if (!opt.isEnd || !areas.length) { + return; + } + var snapshot = {}; + var ecModel = this.ecModel; + + this._brushController.updateCovers([]); // remove cover + + var brushTargetManager = new BrushTargetManager( + retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']} + ); + brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + if (coordSys.type !== 'cartesian2d') { + return; + } + + var brushType = area.brushType; + if (brushType === 'rect') { + setBatch('x', coordSys, coordRange[0]); + setBatch('y', coordSys, coordRange[1]); + } + else { + setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange); + } + }); + + push(ecModel, snapshot); + + this._dispatchZoomAction(snapshot); + + function setBatch(dimName, coordSys, minMax) { + var axis = coordSys.getAxis(dimName); + var axisModel = axis.model; + var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); + + // Restrict range. + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan(); + if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) { + minMax = sliderMove( + 0, minMax.slice(), axis.scale.getExtent(), 0, + minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan + ); + } + + dataZoomModel && (snapshot[dataZoomModel.id] = { + dataZoomId: dataZoomModel.id, + startValue: minMax[0], + endValue: minMax[1] + }); + } + + function findDataZoom(dimName, axisModel, ecModel) { + var found; + ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) { + var has = dzModel.getAxisModel(dimName, axisModel.componentIndex); + has && (found = dzModel); + }); + return found; + } +}; + +/** + * @private + */ +proto$6._dispatchZoomAction = function (snapshot) { + var batch = []; + + // Convert from hash map to array. + each$28(snapshot, function (batchItem, dataZoomId) { + batch.push(clone(batchItem)); + }); + + batch.length && this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + batch: batch + }); +}; + +function retrieveAxisSetting(option) { + var setting = {}; + // Compatible with previous setting: null => all axis, false => no axis. + each$1(['xAxisIndex', 'yAxisIndex'], function (name) { + setting[name] = option[name]; + setting[name] == null && (setting[name] = 'all'); + (setting[name] === false || setting[name] === 'none') && (setting[name] = []); + }); + return setting; +} + +function updateBackBtnStatus(featureModel, ecModel) { + featureModel.setIconStatus( + 'back', + count(ecModel) > 1 ? 'emphasis' : 'normal' + ); +} + +function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) { + var zoomActive = view._isZoomActive; + + if (payload && payload.type === 'takeGlobalCursor') { + zoomActive = payload.key === 'dataZoomSelect' + ? payload.dataZoomSelectActive : false; + } + + view._isZoomActive = zoomActive; + + featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal'); + + var brushTargetManager = new BrushTargetManager( + retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']} + ); + + view._brushController + .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) { + return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared) + ? 'lineX' + : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared) + ? 'lineY' + : 'rect'; + })) + .enableBrush( + zoomActive + ? { + brushType: 'auto', + brushStyle: { + // FIXME user customized? + lineWidth: 0, + fill: 'rgba(0,0,0,0.2)' + } + } + : false + ); +} + + +register$1('dataZoom', DataZoom); + + +// Create special dataZoom option for select +// FIXME consider the case of merge option, where axes options are not exists. +registerPreprocessor(function (option) { + if (!option) { + return; + } + + var dataZoomOpts = option.dataZoom || (option.dataZoom = []); + if (!isArray(dataZoomOpts)) { + option.dataZoom = dataZoomOpts = [dataZoomOpts]; + } + + var toolboxOpt = option.toolbox; + if (toolboxOpt) { + // Assume there is only one toolbox + if (isArray(toolboxOpt)) { + toolboxOpt = toolboxOpt[0]; + } + + if (toolboxOpt && toolboxOpt.feature) { + var dataZoomOpt = toolboxOpt.feature.dataZoom; + // FIXME: If add dataZoom when setOption in merge mode, + // no axis info to be added. See `test/dataZoom-extreme.html` + addForAxis('xAxis', dataZoomOpt); + addForAxis('yAxis', dataZoomOpt); + } + } + + function addForAxis(axisName, dataZoomOpt) { + if (!dataZoomOpt) { + return; + } + + // Try not to modify model, because it is not merged yet. + var axisIndicesName = axisName + 'Index'; + var givenAxisIndices = dataZoomOpt[axisIndicesName]; + if (givenAxisIndices != null + && givenAxisIndices !== 'all' + && !isArray(givenAxisIndices) + ) { + givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices]; + } + + forEachComponent(axisName, function (axisOpt, axisIndex) { + if (givenAxisIndices != null + && givenAxisIndices !== 'all' + && indexOf(givenAxisIndices, axisIndex) === -1 + ) { + return; + } + var newOpt = { + type: 'select', + $fromToolbox: true, + // Id for merge mapping. + id: DATA_ZOOM_ID_BASE + axisName + axisIndex + }; + // FIXME + // Only support one axis now. + newOpt[axisIndicesName] = axisIndex; + dataZoomOpts.push(newOpt); + }); + } + + function forEachComponent(mainType, cb) { + var opts = option[mainType]; + if (!isArray(opts)) { + opts = opts ? [opts] : []; + } + each$28(opts, cb); + } +}); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var restoreLang = lang.toolbox.restore; + +function Restore(model) { + this.model = model; +} + +Restore.defaultOption = { + show: true, + /* eslint-disable */ + icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5', + /* eslint-enable */ + title: restoreLang.title +}; + +var proto$7 = Restore.prototype; + +proto$7.onclick = function (ecModel, api, type) { + clear$1(ecModel); + + api.dispatchAction({ + type: 'restore', + from: this.uid + }); +}; + +register$1('restore', Restore); + +registerAction( + {type: 'restore', event: 'restore', update: 'prepareAndUpdate'}, + function (payload, ecModel) { + ecModel.resetOption('recreate'); + } +); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +var urn = 'urn:schemas-microsoft-com:vml'; +var win = typeof window === 'undefined' ? null : window; + +var vmlInited = false; + +var doc = win && win.document; + +function createNode(tagName) { + return doCreateNode(tagName); +} + +// Avoid assign to an exported variable, for transforming to cjs. +var doCreateNode; + +if (doc && !env$1.canvasSupported) { + try { + !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn); + doCreateNode = function (tagName) { + return doc.createElement(''); + }; + } + catch (e) { + doCreateNode = function (tagName) { + return doc.createElement('<' + tagName + ' xmlns="' + urn + '" class="zrvml">'); + }; + } +} + +// From raphael +function initVML() { + if (vmlInited || !doc) { + return; + } + vmlInited = true; + + var styleSheets = doc.styleSheets; + if (styleSheets.length < 31) { + doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)'); + } + else { + // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx + styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)'); + } +} + +// http://www.w3.org/TR/NOTE-VML +// TODO Use proxy like svg instead of overwrite brush methods + +var CMD$3 = PathProxy.CMD; +var round$3 = Math.round; +var sqrt = Math.sqrt; +var abs$1 = Math.abs; +var cos = Math.cos; +var sin = Math.sin; +var mathMax$8 = Math.max; + +if (!env$1.canvasSupported) { + + var comma = ','; + var imageTransformPrefix = 'progid:DXImageTransform.Microsoft'; + + var Z = 21600; + var Z2 = Z / 2; + + var ZLEVEL_BASE = 100000; + var Z_BASE$1 = 1000; + + var initRootElStyle = function (el) { + el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;'; + el.coordsize = Z + ',' + Z; + el.coordorigin = '0,0'; + }; + + var encodeHtmlAttribute = function (s) { + return String(s).replace(/&/g, '&').replace(/"/g, '"'); + }; + + var rgb2Str = function (r, g, b) { + return 'rgb(' + [r, g, b].join(',') + ')'; + }; + + var append = function (parent, child) { + if (child && parent && child.parentNode !== parent) { + parent.appendChild(child); + } + }; + + var remove = function (parent, child) { + if (child && parent && child.parentNode === parent) { + parent.removeChild(child); + } + }; + + var getZIndex = function (zlevel, z, z2) { + // z 的取值范围为 [0, 1000] + return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE$1 + z2; + }; + + var parsePercent$3 = function (value, maxValue) { + if (typeof value === 'string') { + if (value.lastIndexOf('%') >= 0) { + return parseFloat(value) / 100 * maxValue; + } + return parseFloat(value); + } + return value; + }; + + /*************************************************** + * PATH + **************************************************/ + + var setColorAndOpacity = function (el, color, opacity) { + var colorArr = parse(color); + opacity = +opacity; + if (isNaN(opacity)) { + opacity = 1; + } + if (colorArr) { + el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]); + el.opacity = opacity * colorArr[3]; + } + }; + + var getColorAndAlpha = function (color) { + var colorArr = parse(color); + return [ + rgb2Str(colorArr[0], colorArr[1], colorArr[2]), + colorArr[3] + ]; + }; + + var updateFillNode = function (el, style, zrEl) { + // TODO pattern + var fill = style.fill; + if (fill != null) { + // Modified from excanvas + if (fill instanceof Gradient) { + var gradientType; + var angle = 0; + var focus = [0, 0]; + // additional offset + var shift = 0; + // scale factor for offset + var expansion = 1; + var rect = zrEl.getBoundingRect(); + var rectWidth = rect.width; + var rectHeight = rect.height; + if (fill.type === 'linear') { + gradientType = 'gradient'; + var transform = zrEl.transform; + var p0 = [fill.x * rectWidth, fill.y * rectHeight]; + var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight]; + if (transform) { + applyTransform(p0, p0, transform); + applyTransform(p1, p1, transform); + } + var dx = p1[0] - p0[0]; + var dy = p1[1] - p0[1]; + angle = Math.atan2(dx, dy) * 180 / Math.PI; + // The angle should be a non-negative number. + if (angle < 0) { + angle += 360; + } + + // Very small angles produce an unexpected result because they are + // converted to a scientific notation string. + if (angle < 1e-6) { + angle = 0; + } + } + else { + gradientType = 'gradientradial'; + var p0 = [fill.x * rectWidth, fill.y * rectHeight]; + var transform = zrEl.transform; + var scale$$1 = zrEl.scale; + var width = rectWidth; + var height = rectHeight; + focus = [ + // Percent in bounding rect + (p0[0] - rect.x) / width, + (p0[1] - rect.y) / height + ]; + if (transform) { + applyTransform(p0, p0, transform); + } + + width /= scale$$1[0] * Z; + height /= scale$$1[1] * Z; + var dimension = mathMax$8(width, height); + shift = 2 * 0 / dimension; + expansion = 2 * fill.r / dimension - shift; + } + + // We need to sort the color stops in ascending order by offset, + // otherwise IE won't interpret it correctly. + var stops = fill.colorStops.slice(); + stops.sort(function(cs1, cs2) { + return cs1.offset - cs2.offset; + }); + + var length$$1 = stops.length; + // Color and alpha list of first and last stop + var colorAndAlphaList = []; + var colors = []; + for (var i = 0; i < length$$1; i++) { + var stop = stops[i]; + var colorAndAlpha = getColorAndAlpha(stop.color); + colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]); + if (i === 0 || i === length$$1 - 1) { + colorAndAlphaList.push(colorAndAlpha); + } + } + + if (length$$1 >= 2) { + var color1 = colorAndAlphaList[0][0]; + var color2 = colorAndAlphaList[1][0]; + var opacity1 = colorAndAlphaList[0][1] * style.opacity; + var opacity2 = colorAndAlphaList[1][1] * style.opacity; + + el.type = gradientType; + el.method = 'none'; + el.focus = '100%'; + el.angle = angle; + el.color = color1; + el.color2 = color2; + el.colors = colors.join(','); + // When colors attribute is used, the meanings of opacity and o:opacity2 + // are reversed. + el.opacity = opacity2; + // FIXME g_o_:opacity ? + el.opacity2 = opacity1; + } + if (gradientType === 'radial') { + el.focusposition = focus.join(','); + } + } + else { + // FIXME Change from Gradient fill to color fill + setColorAndOpacity(el, fill, style.opacity); + } + } + }; + + var updateStrokeNode = function (el, style) { + // if (style.lineJoin != null) { + // el.joinstyle = style.lineJoin; + // } + // if (style.miterLimit != null) { + // el.miterlimit = style.miterLimit * Z; + // } + // if (style.lineCap != null) { + // el.endcap = style.lineCap; + // } + if (style.lineDash != null) { + el.dashstyle = style.lineDash.join(' '); + } + if (style.stroke != null && !(style.stroke instanceof Gradient)) { + setColorAndOpacity(el, style.stroke, style.opacity); + } + }; + + var updateFillAndStroke = function (vmlEl, type, style, zrEl) { + var isFill = type == 'fill'; + var el = vmlEl.getElementsByTagName(type)[0]; + // Stroke must have lineWidth + if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) { + vmlEl[isFill ? 'filled' : 'stroked'] = 'true'; + // FIXME Remove before updating, or set `colors` will throw error + if (style[type] instanceof Gradient) { + remove(vmlEl, el); + } + if (!el) { + el = createNode(type); + } + + isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style); + append(vmlEl, el); + } + else { + vmlEl[isFill ? 'filled' : 'stroked'] = 'false'; + remove(vmlEl, el); + } + }; + + var points$3 = [[], [], []]; + var pathDataToString = function (path, m) { + var M = CMD$3.M; + var C = CMD$3.C; + var L = CMD$3.L; + var A = CMD$3.A; + var Q = CMD$3.Q; + + var str = []; + var nPoint; + var cmdStr; + var cmd; + var i; + var xi; + var yi; + var data = path.data; + var dataLength = path.len(); + for (i = 0; i < dataLength;) { + cmd = data[i++]; + cmdStr = ''; + nPoint = 0; + switch (cmd) { + case M: + cmdStr = ' m '; + nPoint = 1; + xi = data[i++]; + yi = data[i++]; + points$3[0][0] = xi; + points$3[0][1] = yi; + break; + case L: + cmdStr = ' l '; + nPoint = 1; + xi = data[i++]; + yi = data[i++]; + points$3[0][0] = xi; + points$3[0][1] = yi; + break; + case Q: + case C: + cmdStr = ' c '; + nPoint = 3; + var x1 = data[i++]; + var y1 = data[i++]; + var x2 = data[i++]; + var y2 = data[i++]; + var x3; + var y3; + if (cmd === Q) { + // Convert quadratic to cubic using degree elevation + x3 = x2; + y3 = y2; + x2 = (x2 + 2 * x1) / 3; + y2 = (y2 + 2 * y1) / 3; + x1 = (xi + 2 * x1) / 3; + y1 = (yi + 2 * y1) / 3; + } + else { + x3 = data[i++]; + y3 = data[i++]; + } + points$3[0][0] = x1; + points$3[0][1] = y1; + points$3[1][0] = x2; + points$3[1][1] = y2; + points$3[2][0] = x3; + points$3[2][1] = y3; + + xi = x3; + yi = y3; + break; + case A: + var x = 0; + var y = 0; + var sx = 1; + var sy = 1; + var angle = 0; + if (m) { + // Extract SRT from matrix + x = m[4]; + y = m[5]; + sx = sqrt(m[0] * m[0] + m[1] * m[1]); + sy = sqrt(m[2] * m[2] + m[3] * m[3]); + angle = Math.atan2(-m[1] / sy, m[0] / sx); + } + + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++] + angle; + var endAngle = data[i++] + startAngle + angle; + // FIXME + // var psi = data[i++]; + i++; + var clockwise = data[i++]; + + var x0 = cx + cos(startAngle) * rx; + var y0 = cy + sin(startAngle) * ry; + + var x1 = cx + cos(endAngle) * rx; + var y1 = cy + sin(endAngle) * ry; + + var type = clockwise ? ' wa ' : ' at '; + if (Math.abs(x0 - x1) < 1e-4) { + // IE won't render arches drawn counter clockwise if x0 == x1. + if (Math.abs(endAngle - startAngle) > 1e-2) { + // Offset x0 by 1/80 of a pixel. Use something + // that can be represented in binary + if (clockwise) { + x0 += 270 / Z; + } + } + else { + // Avoid case draw full circle + if (Math.abs(y0 - cy) < 1e-4) { + if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) { + y1 -= 270 / Z; + } + else { + y1 += 270 / Z; + } + } + else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) { + x1 += 270 / Z; + } + else { + x1 -= 270 / Z; + } + } + } + str.push( + type, + round$3(((cx - rx) * sx + x) * Z - Z2), comma, + round$3(((cy - ry) * sy + y) * Z - Z2), comma, + round$3(((cx + rx) * sx + x) * Z - Z2), comma, + round$3(((cy + ry) * sy + y) * Z - Z2), comma, + round$3((x0 * sx + x) * Z - Z2), comma, + round$3((y0 * sy + y) * Z - Z2), comma, + round$3((x1 * sx + x) * Z - Z2), comma, + round$3((y1 * sy + y) * Z - Z2) + ); + + xi = x1; + yi = y1; + break; + case CMD$3.R: + var p0 = points$3[0]; + var p1 = points$3[1]; + // x0, y0 + p0[0] = data[i++]; + p0[1] = data[i++]; + // x1, y1 + p1[0] = p0[0] + data[i++]; + p1[1] = p0[1] + data[i++]; + + if (m) { + applyTransform(p0, p0, m); + applyTransform(p1, p1, m); + } + + p0[0] = round$3(p0[0] * Z - Z2); + p1[0] = round$3(p1[0] * Z - Z2); + p0[1] = round$3(p0[1] * Z - Z2); + p1[1] = round$3(p1[1] * Z - Z2); + str.push( + // x0, y0 + ' m ', p0[0], comma, p0[1], + // x1, y0 + ' l ', p1[0], comma, p0[1], + // x1, y1 + ' l ', p1[0], comma, p1[1], + // x0, y1 + ' l ', p0[0], comma, p1[1] + ); + break; + case CMD$3.Z: + // FIXME Update xi, yi + str.push(' x '); + } + + if (nPoint > 0) { + str.push(cmdStr); + for (var k = 0; k < nPoint; k++) { + var p = points$3[k]; + + m && applyTransform(p, p, m); + // 不 round 会非常慢 + str.push( + round$3(p[0] * Z - Z2), comma, round$3(p[1] * Z - Z2), + k < nPoint - 1 ? comma : '' + ); + } + } + } + + return str.join(''); + }; + + // Rewrite the original path method + Path.prototype.brushVML = function (vmlRoot) { + var style = this.style; + + var vmlEl = this._vmlEl; + if (!vmlEl) { + vmlEl = createNode('shape'); + initRootElStyle(vmlEl); + + this._vmlEl = vmlEl; + } + + updateFillAndStroke(vmlEl, 'fill', style, this); + updateFillAndStroke(vmlEl, 'stroke', style, this); + + var m = this.transform; + var needTransform = m != null; + var strokeEl = vmlEl.getElementsByTagName('stroke')[0]; + if (strokeEl) { + var lineWidth = style.lineWidth; + // Get the line scale. + // Determinant of this.m_ means how much the area is enlarged by the + // transformation. So its square root can be used as a scale factor + // for width. + if (needTransform && !style.strokeNoScale) { + var det = m[0] * m[3] - m[1] * m[2]; + lineWidth *= sqrt(abs$1(det)); + } + strokeEl.weight = lineWidth + 'px'; + } + + var path = this.path || (this.path = new PathProxy()); + if (this.__dirtyPath) { + path.beginPath(); + this.buildPath(path, this.shape); + path.toStatic(); + this.__dirtyPath = false; + } + + vmlEl.path = pathDataToString(path, this.transform); + + vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Append to root + append(vmlRoot, vmlEl); + + // Text + if (style.text != null) { + this.drawRectText(vmlRoot, this.getBoundingRect()); + } + else { + this.removeRectText(vmlRoot); + } + }; + + Path.prototype.onRemove = function (vmlRoot) { + remove(vmlRoot, this._vmlEl); + this.removeRectText(vmlRoot); + }; + + Path.prototype.onAdd = function (vmlRoot) { + append(vmlRoot, this._vmlEl); + this.appendRectText(vmlRoot); + }; + + /*************************************************** + * IMAGE + **************************************************/ + var isImage = function (img) { + // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错 + return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG'; + // return img instanceof Image; + }; + + // Rewrite the original path method + ZImage.prototype.brushVML = function (vmlRoot) { + var style = this.style; + var image = style.image; + + // Image original width, height + var ow; + var oh; + + if (isImage(image)) { + var src = image.src; + if (src === this._imageSrc) { + ow = this._imageWidth; + oh = this._imageHeight; + } + else { + var imageRuntimeStyle = image.runtimeStyle; + var oldRuntimeWidth = imageRuntimeStyle.width; + var oldRuntimeHeight = imageRuntimeStyle.height; + imageRuntimeStyle.width = 'auto'; + imageRuntimeStyle.height = 'auto'; + + // get the original size + ow = image.width; + oh = image.height; + + // and remove overides + imageRuntimeStyle.width = oldRuntimeWidth; + imageRuntimeStyle.height = oldRuntimeHeight; + + // Caching image original width, height and src + this._imageSrc = src; + this._imageWidth = ow; + this._imageHeight = oh; + } + image = src; + } + else { + if (image === this._imageSrc) { + ow = this._imageWidth; + oh = this._imageHeight; + } + } + if (!image) { + return; + } + + var x = style.x || 0; + var y = style.y || 0; + + var dw = style.width; + var dh = style.height; + + var sw = style.sWidth; + var sh = style.sHeight; + var sx = style.sx || 0; + var sy = style.sy || 0; + + var hasCrop = sw && sh; + + var vmlEl = this._vmlEl; + if (!vmlEl) { + // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。 + // vmlEl = vmlCore.createNode('group'); + vmlEl = doc.createElement('div'); + initRootElStyle(vmlEl); + + this._vmlEl = vmlEl; + } + + var vmlElStyle = vmlEl.style; + var hasRotation = false; + var m; + var scaleX = 1; + var scaleY = 1; + if (this.transform) { + m = this.transform; + scaleX = sqrt(m[0] * m[0] + m[1] * m[1]); + scaleY = sqrt(m[2] * m[2] + m[3] * m[3]); + + hasRotation = m[1] || m[2]; + } + if (hasRotation) { + // If filters are necessary (rotation exists), create them + // filters are bog-slow, so only create them if abbsolutely necessary + // The following check doesn't account for skews (which don't exist + // in the canvas spec (yet) anyway. + // From excanvas + var p0 = [x, y]; + var p1 = [x + dw, y]; + var p2 = [x, y + dh]; + var p3 = [x + dw, y + dh]; + applyTransform(p0, p0, m); + applyTransform(p1, p1, m); + applyTransform(p2, p2, m); + applyTransform(p3, p3, m); + + var maxX = mathMax$8(p0[0], p1[0], p2[0], p3[0]); + var maxY = mathMax$8(p0[1], p1[1], p2[1], p3[1]); + + var transformFilter = []; + transformFilter.push('M11=', m[0] / scaleX, comma, + 'M12=', m[2] / scaleY, comma, + 'M21=', m[1] / scaleX, comma, + 'M22=', m[3] / scaleY, comma, + 'Dx=', round$3(x * scaleX + m[4]), comma, + 'Dy=', round$3(y * scaleY + m[5])); + + vmlElStyle.padding = '0 ' + round$3(maxX) + 'px ' + round$3(maxY) + 'px 0'; + // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用 + vmlElStyle.filter = imageTransformPrefix + '.Matrix(' + + transformFilter.join('') + ', SizingMethod=clip)'; + + } + else { + if (m) { + x = x * scaleX + m[4]; + y = y * scaleY + m[5]; + } + vmlElStyle.filter = ''; + vmlElStyle.left = round$3(x) + 'px'; + vmlElStyle.top = round$3(y) + 'px'; + } + + var imageEl = this._imageEl; + var cropEl = this._cropEl; + + if (!imageEl) { + imageEl = doc.createElement('div'); + this._imageEl = imageEl; + } + var imageELStyle = imageEl.style; + if (hasCrop) { + // Needs know image original width and height + if (! (ow && oh)) { + var tmpImage = new Image(); + var self = this; + tmpImage.onload = function () { + tmpImage.onload = null; + ow = tmpImage.width; + oh = tmpImage.height; + // Adjust image width and height to fit the ratio destinationSize / sourceSize + imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px'; + imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px'; + + // Caching image original width, height and src + self._imageWidth = ow; + self._imageHeight = oh; + self._imageSrc = image; + }; + tmpImage.src = image; + } + else { + imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px'; + imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px'; + } + + if (! cropEl) { + cropEl = doc.createElement('div'); + cropEl.style.overflow = 'hidden'; + this._cropEl = cropEl; + } + var cropElStyle = cropEl.style; + cropElStyle.width = round$3((dw + sx * dw / sw) * scaleX); + cropElStyle.height = round$3((dh + sy * dh / sh) * scaleY); + cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx=' + + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')'; + + if (! cropEl.parentNode) { + vmlEl.appendChild(cropEl); + } + if (imageEl.parentNode != cropEl) { + cropEl.appendChild(imageEl); + } + } + else { + imageELStyle.width = round$3(scaleX * dw) + 'px'; + imageELStyle.height = round$3(scaleY * dh) + 'px'; + + vmlEl.appendChild(imageEl); + + if (cropEl && cropEl.parentNode) { + vmlEl.removeChild(cropEl); + this._cropEl = null; + } + } + + var filterStr = ''; + var alpha = style.opacity; + if (alpha < 1) { + filterStr += '.Alpha(opacity=' + round$3(alpha * 100) + ') '; + } + filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)'; + + imageELStyle.filter = filterStr; + + vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Append to root + append(vmlRoot, vmlEl); + + // Text + if (style.text != null) { + this.drawRectText(vmlRoot, this.getBoundingRect()); + } + }; + + ZImage.prototype.onRemove = function (vmlRoot) { + remove(vmlRoot, this._vmlEl); + + this._vmlEl = null; + this._cropEl = null; + this._imageEl = null; + + this.removeRectText(vmlRoot); + }; + + ZImage.prototype.onAdd = function (vmlRoot) { + append(vmlRoot, this._vmlEl); + this.appendRectText(vmlRoot); + }; + + + /*************************************************** + * TEXT + **************************************************/ + + var DEFAULT_STYLE_NORMAL = 'normal'; + + var fontStyleCache = {}; + var fontStyleCacheCount = 0; + var MAX_FONT_CACHE_SIZE = 100; + var fontEl = document.createElement('div'); + + var getFontStyle = function (fontString) { + var fontStyle = fontStyleCache[fontString]; + if (!fontStyle) { + // Clear cache + if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) { + fontStyleCacheCount = 0; + fontStyleCache = {}; + } + + var style = fontEl.style; + var fontFamily; + try { + style.font = fontString; + fontFamily = style.fontFamily.split(',')[0]; + } + catch (e) { + } + + fontStyle = { + style: style.fontStyle || DEFAULT_STYLE_NORMAL, + variant: style.fontVariant || DEFAULT_STYLE_NORMAL, + weight: style.fontWeight || DEFAULT_STYLE_NORMAL, + size: parseFloat(style.fontSize || 12) | 0, + family: fontFamily || 'Microsoft YaHei' + }; + + fontStyleCache[fontString] = fontStyle; + fontStyleCacheCount++; + } + return fontStyle; + }; + + var textMeasureEl; + // Overwrite measure text method + $override$1('measureText', function (text, textFont) { + var doc$$1 = doc; + if (!textMeasureEl) { + textMeasureEl = doc$$1.createElement('div'); + textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;' + + 'padding:0;margin:0;border:none;white-space:pre;'; + doc.body.appendChild(textMeasureEl); + } + + try { + textMeasureEl.style.font = textFont; + } catch (ex) { + // Ignore failures to set to invalid font. + } + textMeasureEl.innerHTML = ''; + // Don't use innerHTML or innerText because they allow markup/whitespace. + textMeasureEl.appendChild(doc$$1.createTextNode(text)); + return { + width: textMeasureEl.offsetWidth + }; + }); + + var tmpRect$2 = new BoundingRect(); + + var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) { + + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + // Convert to string + text != null && (text += ''); + if (!text) { + return; + } + + // Convert rich text to plain text. Rich text is not supported in + // IE8-, but tags in rich text template will be removed. + if (style.rich) { + var contentBlock = parseRichText(text, style); + text = []; + for (var i = 0; i < contentBlock.lines.length; i++) { + var tokens = contentBlock.lines[i].tokens; + var textLine = []; + for (var j = 0; j < tokens.length; j++) { + textLine.push(tokens[j].text); + } + text.push(textLine.join('')); + } + text = text.join('\n'); + } + + var x; + var y; + var align = style.textAlign; + var verticalAlign = style.textVerticalAlign; + + var fontStyle = getFontStyle(style.font); + // FIXME encodeHtmlAttribute ? + var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' ' + + fontStyle.size + 'px "' + fontStyle.family + '"'; + + textRect = textRect || getBoundingRect(text, font, align, verticalAlign); + + // Transform rect to view space + var m = this.transform; + // Ignore transform for text in other element + if (m && !fromTextEl) { + tmpRect$2.copy(rect); + tmpRect$2.applyTransform(m); + rect = tmpRect$2; + } + + if (!fromTextEl) { + var textPosition = style.textPosition; + var distance$$1 = style.textDistance; + // Text position represented by coord + if (textPosition instanceof Array) { + x = rect.x + parsePercent$3(textPosition[0], rect.width); + y = rect.y + parsePercent$3(textPosition[1], rect.height); + + align = align || 'left'; + } + else { + var res = adjustTextPositionOnRect( + textPosition, rect, distance$$1 + ); + x = res.x; + y = res.y; + + // Default align and baseline when has textPosition + align = align || res.textAlign; + verticalAlign = verticalAlign || res.textVerticalAlign; + } + } + else { + x = rect.x; + y = rect.y; + } + + x = adjustTextX(x, textRect.width, align); + y = adjustTextY(y, textRect.height, verticalAlign); + + // Force baseline 'middle' + y += textRect.height / 2; + + // var fontSize = fontStyle.size; + // 1.75 is an arbitrary number, as there is no info about the text baseline + // switch (baseline) { + // case 'hanging': + // case 'top': + // y += fontSize / 1.75; + // break; + // case 'middle': + // break; + // default: + // // case null: + // // case 'alphabetic': + // // case 'ideographic': + // // case 'bottom': + // y -= fontSize / 2.25; + // break; + // } + + // switch (align) { + // case 'left': + // break; + // case 'center': + // x -= textRect.width / 2; + // break; + // case 'right': + // x -= textRect.width; + // break; + // case 'end': + // align = elementStyle.direction == 'ltr' ? 'right' : 'left'; + // break; + // case 'start': + // align = elementStyle.direction == 'rtl' ? 'right' : 'left'; + // break; + // default: + // align = 'left'; + // } + + var createNode$$1 = createNode; + + var textVmlEl = this._textVmlEl; + var pathEl; + var textPathEl; + var skewEl; + if (!textVmlEl) { + textVmlEl = createNode$$1('line'); + pathEl = createNode$$1('path'); + textPathEl = createNode$$1('textpath'); + skewEl = createNode$$1('skew'); + + // FIXME Why here is not cammel case + // Align 'center' seems wrong + textPathEl.style['v-text-align'] = 'left'; + + initRootElStyle(textVmlEl); + + pathEl.textpathok = true; + textPathEl.on = true; + + textVmlEl.from = '0 0'; + textVmlEl.to = '1000 0.05'; + + append(textVmlEl, skewEl); + append(textVmlEl, pathEl); + append(textVmlEl, textPathEl); + + this._textVmlEl = textVmlEl; + } + else { + // 这里是在前面 appendChild 保证顺序的前提下 + skewEl = textVmlEl.firstChild; + pathEl = skewEl.nextSibling; + textPathEl = pathEl.nextSibling; + } + + var coords = [x, y]; + var textVmlElStyle = textVmlEl.style; + // Ignore transform for text in other element + if (m && fromTextEl) { + applyTransform(coords, coords, m); + + skewEl.on = true; + + skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma + + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0'; + + // Text position + skewEl.offset = (round$3(coords[0]) || 0) + ',' + (round$3(coords[1]) || 0); + // Left top point as origin + skewEl.origin = '0 0'; + + textVmlElStyle.left = '0px'; + textVmlElStyle.top = '0px'; + } + else { + skewEl.on = false; + textVmlElStyle.left = round$3(x) + 'px'; + textVmlElStyle.top = round$3(y) + 'px'; + } + + textPathEl.string = encodeHtmlAttribute(text); + // TODO + try { + textPathEl.style.font = font; + } + // Error font format + catch (e) {} + + updateFillAndStroke(textVmlEl, 'fill', { + fill: style.textFill, + opacity: style.opacity + }, this); + updateFillAndStroke(textVmlEl, 'stroke', { + stroke: style.textStroke, + opacity: style.opacity, + lineDash: style.lineDash + }, this); + + textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Attached to root + append(vmlRoot, textVmlEl); + }; + + var removeRectText = function (vmlRoot) { + remove(vmlRoot, this._textVmlEl); + this._textVmlEl = null; + }; + + var appendRectText = function (vmlRoot) { + append(vmlRoot, this._textVmlEl); + }; + + var list = [RectText, Displayable, ZImage, Path, Text]; + + // In case Displayable has been mixed in RectText + for (var i$3 = 0; i$3 < list.length; i$3++) { + var proto$8 = list[i$3].prototype; + proto$8.drawRectText = drawRectText; + proto$8.removeRectText = removeRectText; + proto$8.appendRectText = appendRectText; + } + + Text.prototype.brushVML = function (vmlRoot) { + var style = this.style; + if (style.text != null) { + this.drawRectText(vmlRoot, { + x: style.x || 0, y: style.y || 0, + width: 0, height: 0 + }, this.getBoundingRect(), true); + } + else { + this.removeRectText(vmlRoot); + } + }; + + Text.prototype.onRemove = function (vmlRoot) { + this.removeRectText(vmlRoot); + }; + + Text.prototype.onAdd = function (vmlRoot) { + this.appendRectText(vmlRoot); + }; +} + +/** + * VML Painter. + * + * @module zrender/vml/Painter + */ + +function parseInt10$1(val) { + return parseInt(val, 10); +} + +/** + * @alias module:zrender/vml/Painter + */ +function VMLPainter(root, storage) { + + initVML(); + + this.root = root; + + this.storage = storage; + + var vmlViewport = document.createElement('div'); + + var vmlRoot = document.createElement('div'); + + vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;'; + + vmlRoot.style.cssText = 'position:absolute;left:0;top:0;'; + + root.appendChild(vmlViewport); + + this._vmlRoot = vmlRoot; + this._vmlViewport = vmlViewport; + + this.resize(); + + // Modify storage + var oldDelFromStorage = storage.delFromStorage; + var oldAddToStorage = storage.addToStorage; + storage.delFromStorage = function (el) { + oldDelFromStorage.call(storage, el); + + if (el) { + el.onRemove && el.onRemove(vmlRoot); + } + }; + + storage.addToStorage = function (el) { + // Displayable already has a vml node + el.onAdd && el.onAdd(vmlRoot); + + oldAddToStorage.call(storage, el); + }; + + this._firstPaint = true; +} + +VMLPainter.prototype = { + + constructor: VMLPainter, + + getType: function () { + return 'vml'; + }, + + /** + * @return {HTMLDivElement} + */ + getViewportRoot: function () { + return this._vmlViewport; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + /** + * 刷新 + */ + refresh: function () { + + var list = this.storage.getDisplayList(true, true); + + this._paintList(list); + }, + + _paintList: function (list) { + var vmlRoot = this._vmlRoot; + for (var i = 0; i < list.length; i++) { + var el = list[i]; + if (el.invisible || el.ignore) { + if (!el.__alreadyNotVisible) { + el.onRemove(vmlRoot); + } + // Set as already invisible + el.__alreadyNotVisible = true; + } + else { + if (el.__alreadyNotVisible) { + el.onAdd(vmlRoot); + } + el.__alreadyNotVisible = false; + if (el.__dirty) { + el.beforeBrush && el.beforeBrush(); + (el.brushVML || el.brush).call(el, vmlRoot); + el.afterBrush && el.afterBrush(); + } + } + el.__dirty = false; + } + + if (this._firstPaint) { + // Detached from document at first time + // to avoid page refreshing too many times + + // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变 + this._vmlViewport.appendChild(vmlRoot); + this._firstPaint = false; + } + }, + + resize: function (width, height) { + var width = width == null ? this._getWidth() : width; + var height = height == null ? this._getHeight() : height; + + if (this._width != width || this._height != height) { + this._width = width; + this._height = height; + + var vmlViewportStyle = this._vmlViewport.style; + vmlViewportStyle.width = width + 'px'; + vmlViewportStyle.height = height + 'px'; + } + }, + + dispose: function () { + this.root.innerHTML = ''; + + this._vmlRoot = + this._vmlViewport = + this.storage = null; + }, + + getWidth: function () { + return this._width; + }, + + getHeight: function () { + return this._height; + }, + + clear: function () { + if (this._vmlViewport) { + this.root.removeChild(this._vmlViewport); + } + }, + + _getWidth: function () { + var root = this.root; + var stl = root.currentStyle; + + return ((root.clientWidth || parseInt10$1(stl.width)) + - parseInt10$1(stl.paddingLeft) + - parseInt10$1(stl.paddingRight)) | 0; + }, + + _getHeight: function () { + var root = this.root; + var stl = root.currentStyle; + + return ((root.clientHeight || parseInt10$1(stl.height)) + - parseInt10$1(stl.paddingTop) + - parseInt10$1(stl.paddingBottom)) | 0; + } +}; + +// Not supported methods +function createMethodNotSupport(method) { + return function () { + zrLog('In IE8.0 VML mode painter not support method "' + method + '"'); + }; +} + +// Unsupported methods +each$1([ + 'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', + 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage' +], function (name) { + VMLPainter.prototype[name] = createMethodNotSupport(name); +}); + +registerPainter('vml', VMLPainter); + +var svgURI = 'http://www.w3.org/2000/svg'; + +function createElement(name) { + return document.createElementNS(svgURI, name); +} + +// TODO +// 1. shadow +// 2. Image: sx, sy, sw, sh + +var CMD$4 = PathProxy.CMD; +var arrayJoin = Array.prototype.join; + +var NONE = 'none'; +var mathRound = Math.round; +var mathSin$3 = Math.sin; +var mathCos$3 = Math.cos; +var PI$5 = Math.PI; +var PI2$7 = Math.PI * 2; +var degree = 180 / PI$5; + +var EPSILON$4 = 1e-4; + +function round4(val) { + return mathRound(val * 1e4) / 1e4; +} + +function isAroundZero$1(val) { + return val < EPSILON$4 && val > -EPSILON$4; +} + +function pathHasFill(style, isText) { + var fill = isText ? style.textFill : style.fill; + return fill != null && fill !== NONE; +} + +function pathHasStroke(style, isText) { + var stroke = isText ? style.textStroke : style.stroke; + return stroke != null && stroke !== NONE; +} + +function setTransform(svgEl, m) { + if (m) { + attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')'); + } +} + +function attr(el, key, val) { + if (!val || val.type !== 'linear' && val.type !== 'radial') { + // Don't set attribute for gradient, since it need new dom nodes + if (typeof val === 'string' && val.indexOf('NaN') > -1) { + console.log(val); + } + el.setAttribute(key, val); + } +} + +function attrXLink(el, key, val) { + el.setAttributeNS('http://www.w3.org/1999/xlink', key, val); +} + +function bindStyle(svgEl, style, isText, el) { + if (pathHasFill(style, isText)) { + var fill = isText ? style.textFill : style.fill; + fill = fill === 'transparent' ? NONE : fill; + + /** + * FIXME: + * This is a temporary fix for Chrome's clipping bug + * that happens when a clip-path is referring another one. + * This fix should be used before Chrome's bug is fixed. + * For an element that has clip-path, and fill is none, + * set it to be "rgba(0, 0, 0, 0.002)" will hide the element. + * Otherwise, it will show black fill color. + * 0.002 is used because this won't work for alpha values smaller + * than 0.002. + * + * See + * https://bugs.chromium.org/p/chromium/issues/detail?id=659790 + * for more information. + */ + if (svgEl.getAttribute('clip-path') !== 'none' && fill === NONE) { + fill = 'rgba(0, 0, 0, 0.002)'; + } + + attr(svgEl, 'fill', fill); + attr(svgEl, 'fill-opacity', style.fillOpacity != null ? style.fillOpacity * style.opacity : style.opacity); + } + else { + attr(svgEl, 'fill', NONE); + } + + if (pathHasStroke(style, isText)) { + var stroke = isText ? style.textStroke : style.stroke; + stroke = stroke === 'transparent' ? NONE : stroke; + attr(svgEl, 'stroke', stroke); + var strokeWidth = isText + ? style.textStrokeWidth + : style.lineWidth; + var strokeScale = !isText && style.strokeNoScale + ? el.getLineScale() + : 1; + attr(svgEl, 'stroke-width', strokeWidth / strokeScale); + // stroke then fill for text; fill then stroke for others + attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill'); + attr(svgEl, 'stroke-opacity', style.strokeOpacity != null ? style.strokeOpacity : style.opacity); + var lineDash = style.lineDash; + if (lineDash) { + attr(svgEl, 'stroke-dasharray', style.lineDash.join(',')); + attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0)); + } + else { + attr(svgEl, 'stroke-dasharray', ''); + } + + // PENDING + style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap); + style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin); + style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit); + } + else { + attr(svgEl, 'stroke', NONE); + } +} + +/*************************************************** + * PATH + **************************************************/ +function pathDataToString$1(path) { + var str = []; + var data = path.data; + var dataLength = path.len(); + for (var i = 0; i < dataLength;) { + var cmd = data[i++]; + var cmdStr = ''; + var nData = 0; + switch (cmd) { + case CMD$4.M: + cmdStr = 'M'; + nData = 2; + break; + case CMD$4.L: + cmdStr = 'L'; + nData = 2; + break; + case CMD$4.Q: + cmdStr = 'Q'; + nData = 4; + break; + case CMD$4.C: + cmdStr = 'C'; + nData = 6; + break; + case CMD$4.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; + var psi = data[i++]; + var clockwise = data[i++]; + + var dThetaPositive = Math.abs(dTheta); + var isCircle = isAroundZero$1(dThetaPositive - PI2$7) + && !isAroundZero$1(dThetaPositive); + + var large = false; + if (dThetaPositive >= PI2$7) { + large = true; + } + else if (isAroundZero$1(dThetaPositive)) { + large = false; + } + else { + large = (dTheta > -PI$5 && dTheta < 0 || dTheta > PI$5) + === !!clockwise; + } + + var x0 = round4(cx + rx * mathCos$3(theta)); + var y0 = round4(cy + ry * mathSin$3(theta)); + + // It will not draw if start point and end point are exactly the same + // We need to shift the end point with a small value + // FIXME A better way to draw circle ? + if (isCircle) { + if (clockwise) { + dTheta = PI2$7 - 1e-4; + } + else { + dTheta = -PI2$7 + 1e-4; + } + + large = true; + + if (i === 9) { + // Move to (x0, y0) only when CMD.A comes at the + // first position of a shape. + // For instance, when drawing a ring, CMD.A comes + // after CMD.M, so it's unnecessary to move to + // (x0, y0). + str.push('M', x0, y0); + } + } + + var x = round4(cx + rx * mathCos$3(theta + dTheta)); + var y = round4(cy + ry * mathSin$3(theta + dTheta)); + + // FIXME Ellipse + str.push('A', round4(rx), round4(ry), + mathRound(psi * degree), +large, +clockwise, x, y); + break; + case CMD$4.Z: + cmdStr = 'Z'; + break; + case CMD$4.R: + var x = round4(data[i++]); + var y = round4(data[i++]); + var w = round4(data[i++]); + var h = round4(data[i++]); + str.push( + 'M', x, y, + 'L', x + w, y, + 'L', x + w, y + h, + 'L', x, y + h, + 'L', x, y + ); + break; + } + cmdStr && str.push(cmdStr); + for (var j = 0; j < nData; j++) { + // PENDING With scale + str.push(round4(data[i++])); + } + } + return str.join(' '); +} + +var svgPath = {}; +svgPath.brush = function (el) { + var style = el.style; + + var svgEl = el.__svgEl; + if (!svgEl) { + svgEl = createElement('path'); + el.__svgEl = svgEl; + } + + if (!el.path) { + el.createPathProxy(); + } + var path = el.path; + + if (el.__dirtyPath) { + path.beginPath(); + el.buildPath(path, el.shape); + el.__dirtyPath = false; + + var pathStr = pathDataToString$1(path); + if (pathStr.indexOf('NaN') < 0) { + // Ignore illegal path, which may happen such in out-of-range + // data in Calendar series. + attr(svgEl, 'd', pathStr); + } + } + + bindStyle(svgEl, style, false, el); + setTransform(svgEl, el.transform); + + if (style.text != null) { + svgTextDrawRectText(el, el.getBoundingRect()); + } +}; + +/*************************************************** + * IMAGE + **************************************************/ +var svgImage = {}; +svgImage.brush = function (el) { + var style = el.style; + var image = style.image; + + if (image instanceof HTMLImageElement) { + var src = image.src; + image = src; + } + if (! image) { + return; + } + + var x = style.x || 0; + var y = style.y || 0; + + var dw = style.width; + var dh = style.height; + + var svgEl = el.__svgEl; + if (! svgEl) { + svgEl = createElement('image'); + el.__svgEl = svgEl; + } + + if (image !== el.__imageSrc) { + attrXLink(svgEl, 'href', image); + // Caching image src + el.__imageSrc = image; + } + + attr(svgEl, 'width', dw); + attr(svgEl, 'height', dh); + + attr(svgEl, 'x', x); + attr(svgEl, 'y', y); + + setTransform(svgEl, el.transform); + + if (style.text != null) { + svgTextDrawRectText(el, el.getBoundingRect()); + } +}; + +/*************************************************** + * TEXT + **************************************************/ +var svgText = {}; +var tmpRect$3 = new BoundingRect(); + +var svgTextDrawRectText = function (el, rect, textRect) { + var style = el.style; + + el.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + // Convert to string + if (text == null) { + // Draw no text only when text is set to null, but not '' + return; + } + else { + text += ''; + } + + var textSvgEl = el.__textSvgEl; + if (! textSvgEl) { + textSvgEl = createElement('text'); + el.__textSvgEl = textSvgEl; + } + + var x; + var y; + var textPosition = style.textPosition; + var distance = style.textDistance; + var align = style.textAlign || 'left'; + + if (typeof style.fontSize === 'number') { + style.fontSize += 'px'; + } + var font = style.font + || [ + style.fontStyle || '', + style.fontWeight || '', + style.fontSize || '', + style.fontFamily || '' + ].join(' ') + || DEFAULT_FONT; + + var verticalAlign = getVerticalAlignForSvg(style.textVerticalAlign); + + textRect = getBoundingRect(text, font, align, + verticalAlign); + + var lineHeight = textRect.lineHeight; + // Text position represented by coord + if (textPosition instanceof Array) { + x = rect.x + textPosition[0]; + y = rect.y + textPosition[1]; + } + else { + var newPos = adjustTextPositionOnRect( + textPosition, rect, distance + ); + x = newPos.x; + y = newPos.y; + verticalAlign = getVerticalAlignForSvg(newPos.textVerticalAlign); + align = newPos.textAlign; + } + + attr(textSvgEl, 'alignment-baseline', verticalAlign); + + if (font) { + textSvgEl.style.font = font; + } + + var textPadding = style.textPadding; + + // Make baseline top + attr(textSvgEl, 'x', x); + attr(textSvgEl, 'y', y); + + bindStyle(textSvgEl, style, true, el); + if (el instanceof Text || el.style.transformText) { + // Transform text with element + setTransform(textSvgEl, el.transform); + } + else { + if (el.transform) { + tmpRect$3.copy(rect); + tmpRect$3.applyTransform(el.transform); + rect = tmpRect$3; + } + else { + var pos = el.transformCoordToGlobal(rect.x, rect.y); + rect.x = pos[0]; + rect.y = pos[1]; + el.transform = identity(create$1()); + } + + // Text rotation, but no element transform + var origin = style.textOrigin; + if (origin === 'center') { + x = textRect.width / 2 + x; + y = textRect.height / 2 + y; + } + else if (origin) { + x = origin[0] + x; + y = origin[1] + y; + } + var rotate$$1 = -style.textRotation || 0; + var transform = create$1(); + // Apply textRotate to element matrix + rotate(transform, transform, rotate$$1); + + var pos = [el.transform[4], el.transform[5]]; + translate(transform, transform, pos); + setTransform(textSvgEl, transform); + } + + var textLines = text.split('\n'); + var nTextLines = textLines.length; + var textAnchor = align; + // PENDING + if (textAnchor === 'left') { + textAnchor = 'start'; + textPadding && (x += textPadding[3]); + } + else if (textAnchor === 'right') { + textAnchor = 'end'; + textPadding && (x -= textPadding[1]); + } + else if (textAnchor === 'center') { + textAnchor = 'middle'; + textPadding && (x += (textPadding[3] - textPadding[1]) / 2); + } + + var dy = 0; + if (verticalAlign === 'after-edge') { + dy = -textRect.height + lineHeight; + textPadding && (dy -= textPadding[2]); + } + else if (verticalAlign === 'middle') { + dy = (-textRect.height + lineHeight) / 2; + textPadding && (y += (textPadding[0] - textPadding[2]) / 2); + } + else { + textPadding && (dy += textPadding[0]); + } + + // Font may affect position of each tspan elements + if (el.__text !== text || el.__textFont !== font) { + var tspanList = el.__tspanList || []; + el.__tspanList = tspanList; + for (var i = 0; i < nTextLines; i++) { + // Using cached tspan elements + var tspan = tspanList[i]; + if (! tspan) { + tspan = tspanList[i] = createElement('tspan'); + textSvgEl.appendChild(tspan); + attr(tspan, 'alignment-baseline', verticalAlign); + attr(tspan, 'text-anchor', textAnchor); + } + else { + tspan.innerHTML = ''; + } + attr(tspan, 'x', x); + attr(tspan, 'y', y + i * lineHeight + dy); + tspan.appendChild(document.createTextNode(textLines[i])); + } + // Remove unsed tspan elements + for (; i < tspanList.length; i++) { + textSvgEl.removeChild(tspanList[i]); + } + tspanList.length = nTextLines; + + el.__text = text; + el.__textFont = font; + } + else if (el.__tspanList.length) { + // Update span x and y + var len = el.__tspanList.length; + for (var i = 0; i < len; ++i) { + var tspan = el.__tspanList[i]; + if (tspan) { + attr(tspan, 'x', x); + attr(tspan, 'y', y + i * lineHeight + dy); + } + } + } +}; + +function getVerticalAlignForSvg(verticalAlign) { + if (verticalAlign === 'middle') { + return 'middle'; + } + else if (verticalAlign === 'bottom') { + return 'after-edge'; + } + else { + return 'hanging'; + } +} + +svgText.drawRectText = svgTextDrawRectText; + +svgText.brush = function (el) { + var style = el.style; + if (style.text != null) { + // 强制设置 textPosition + style.textPosition = [0, 0]; + svgTextDrawRectText(el, { + x: style.x || 0, y: style.y || 0, + width: 0, height: 0 + }, el.getBoundingRect()); + } +}; + +// Myers' Diff Algorithm +// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js + +function Diff() {} + +Diff.prototype = { + diff: function (oldArr, newArr, equals) { + if (!equals) { + equals = function (a, b) { + return a === b; + }; + } + this.equals = equals; + + var self = this; + + oldArr = oldArr.slice(); + newArr = newArr.slice(); + // Allow subclasses to massage the input prior to running + var newLen = newArr.length; + var oldLen = oldArr.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ newPos: -1, components: [] }]; + + // Seed editLength = 0, i.e. the content starts with the same values + var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0); + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + var indices = []; + for (var i = 0; i < newArr.length; i++) { + indices.push(i); + } + // Identity per the equality and tokenizer + return [{ + indices: indices, count: newArr.length + }]; + } + + // Main worker method. checks all permutations of a given edit length for acceptance. + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath; + var addPath = bestPath[diagonalPath - 1]; + var removePath = bestPath[diagonalPath + 1]; + var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen; + var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } + + // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } + else { + basePath = addPath; // No need to clone, we've pulled it from the list + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath); + + // If we have hit the end of both strings, then we are done + if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + return buildValues(self, basePath.components, newArr, oldArr); + } + else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } + + while (editLength <= maxEditLength) { + var ret = execEditLength(); + if (ret) { + return ret; + } + } + }, + + pushComponent: function (components, added, removed) { + var last = components[components.length - 1]; + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = {count: last.count + 1, added: added, removed: removed }; + } + else { + components.push({count: 1, added: added, removed: removed }); + } + }, + extractCommon: function (basePath, newArr, oldArr, diagonalPath) { + var newLen = newArr.length; + var oldLen = oldArr.length; + var newPos = basePath.newPos; + var oldPos = newPos - diagonalPath; + var commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({count: commonCount}); + } + + basePath.newPos = newPos; + return oldPos; + }, + tokenize: function (value) { + return value.slice(); + }, + join: function (value) { + return value.slice(); + } +}; + +function buildValues(diff, components, newArr, oldArr) { + var componentPos = 0; + var componentLen = components.length; + var newPos = 0; + var oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + if (!component.removed) { + var indices = []; + for (var i = newPos; i < newPos + component.count; i++) { + indices.push(i); + } + component.indices = indices; + newPos += component.count; + // Common case + if (!component.added) { + oldPos += component.count; + } + } + else { + var indices = []; + for (var i = oldPos; i < oldPos + component.count; i++) { + indices.push(i); + } + component.indices = indices; + oldPos += component.count; + } + } + + return components; +} + +function clonePath(path) { + return { newPos: path.newPos, components: path.components.slice(0) }; +} + +var arrayDiff = new Diff(); + +var arrayDiff$1 = function (oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); +}; + +/** + * @file Manages elements that can be defined in in SVG, + * e.g., gradients, clip path, etc. + * @author Zhang Wenli + */ + +var MARK_UNUSED = '0'; +var MARK_USED = '1'; + +/** + * Manages elements that can be defined in in SVG, + * e.g., gradients, clip path, etc. + * + * @class + * @param {number} zrId zrender instance id + * @param {SVGElement} svgRoot root of SVG document + * @param {string|string[]} tagNames possible tag names + * @param {string} markLabel label name to make if the element + * is used + */ +function Definable( + zrId, + svgRoot, + tagNames, + markLabel, + domName +) { + this._zrId = zrId; + this._svgRoot = svgRoot; + this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames; + this._markLabel = markLabel; + this._domName = domName || '_dom'; + + this.nextId = 0; +} + + +Definable.prototype.createElement = createElement; + + +/** + * Get the tag for svgRoot; optionally creates one if not exists. + * + * @param {boolean} isForceCreating if need to create when not exists + * @return {SVGDefsElement} SVG element, null if it doesn't + * exist and isForceCreating is false + */ +Definable.prototype.getDefs = function (isForceCreating) { + var svgRoot = this._svgRoot; + var defs = this._svgRoot.getElementsByTagName('defs'); + if (defs.length === 0) { + // Not exist + if (isForceCreating) { + defs = svgRoot.insertBefore( + this.createElement('defs'), // Create new tag + svgRoot.firstChild // Insert in the front of svg + ); + if (!defs.contains) { + // IE doesn't support contains method + defs.contains = function (el) { + var children = defs.children; + if (!children) { + return false; + } + for (var i = children.length - 1; i >= 0; --i) { + if (children[i] === el) { + return true; + } + } + return false; + }; + } + return defs; + } + else { + return null; + } + } + else { + return defs[0]; + } +}; + + +/** + * Update DOM element if necessary. + * + * @param {Object|string} element style element. e.g., for gradient, + * it may be '#ccc' or {type: 'linear', ...} + * @param {Function|undefined} onUpdate update callback + */ +Definable.prototype.update = function (element, onUpdate) { + if (!element) { + return; + } + + var defs = this.getDefs(false); + if (element[this._domName] && defs.contains(element[this._domName])) { + // Update DOM + if (typeof onUpdate === 'function') { + onUpdate(element); + } + } + else { + // No previous dom, create new + var dom = this.add(element); + if (dom) { + element[this._domName] = dom; + } + } +}; + + +/** + * Add gradient dom to defs + * + * @param {SVGElement} dom DOM to be added to + */ +Definable.prototype.addDom = function (dom) { + var defs = this.getDefs(true); + defs.appendChild(dom); +}; + + +/** + * Remove DOM of a given element. + * + * @param {SVGElement} element element to remove dom + */ +Definable.prototype.removeDom = function (element) { + var defs = this.getDefs(false); + if (defs && element[this._domName]) { + defs.removeChild(element[this._domName]); + element[this._domName] = null; + } +}; + + +/** + * Get DOMs of this element. + * + * @return {HTMLDomElement} doms of this defineable elements in + */ +Definable.prototype.getDoms = function () { + var defs = this.getDefs(false); + if (!defs) { + // No dom when defs is not defined + return []; + } + + var doms = []; + each$1(this._tagNames, function (tagName) { + var tags = defs.getElementsByTagName(tagName); + // Note that tags is HTMLCollection, which is array-like + // rather than real array. + // So `doms.concat(tags)` add tags as one object. + doms = doms.concat([].slice.call(tags)); + }); + + return doms; +}; + + +/** + * Mark DOMs to be unused before painting, and clear unused ones at the end + * of the painting. + */ +Definable.prototype.markAllUnused = function () { + var doms = this.getDoms(); + var that = this; + each$1(doms, function (dom) { + dom[that._markLabel] = MARK_UNUSED; + }); +}; + + +/** + * Mark a single DOM to be used. + * + * @param {SVGElement} dom DOM to mark + */ +Definable.prototype.markUsed = function (dom) { + if (dom) { + dom[this._markLabel] = MARK_USED; + } +}; + + +/** + * Remove unused DOMs defined in + */ +Definable.prototype.removeUnused = function () { + var defs = this.getDefs(false); + if (!defs) { + // Nothing to remove + return; + } + + var doms = this.getDoms(); + var that = this; + each$1(doms, function (dom) { + if (dom[that._markLabel] !== MARK_USED) { + // Remove gradient + defs.removeChild(dom); + } + }); +}; + + +/** + * Get SVG proxy. + * + * @param {Displayable} displayable displayable element + * @return {Path|Image|Text} svg proxy of given element + */ +Definable.prototype.getSvgProxy = function (displayable) { + if (displayable instanceof Path) { + return svgPath; + } + else if (displayable instanceof ZImage) { + return svgImage; + } + else if (displayable instanceof Text) { + return svgText; + } + else { + return svgPath; + } +}; + + +/** + * Get text SVG element. + * + * @param {Displayable} displayable displayable element + * @return {SVGElement} SVG element of text + */ +Definable.prototype.getTextSvgElement = function (displayable) { + return displayable.__textSvgEl; +}; + + +/** + * Get SVG element. + * + * @param {Displayable} displayable displayable element + * @return {SVGElement} SVG element + */ +Definable.prototype.getSvgElement = function (displayable) { + return displayable.__svgEl; +}; + +/** + * @file Manages SVG gradient elements. + * @author Zhang Wenli + */ + +/** + * Manages SVG gradient elements. + * + * @class + * @extends Definable + * @param {number} zrId zrender instance id + * @param {SVGElement} svgRoot root of SVG document + */ +function GradientManager(zrId, svgRoot) { + Definable.call( + this, + zrId, + svgRoot, + ['linearGradient', 'radialGradient'], + '__gradient_in_use__' + ); +} + + +inherits(GradientManager, Definable); + + +/** + * Create new gradient DOM for fill or stroke if not exist, + * but will not update gradient if exists. + * + * @param {SvgElement} svgElement SVG element to paint + * @param {Displayable} displayable zrender displayable element + */ +GradientManager.prototype.addWithoutUpdate = function ( + svgElement, + displayable +) { + if (displayable && displayable.style) { + var that = this; + each$1(['fill', 'stroke'], function (fillOrStroke) { + if (displayable.style[fillOrStroke] + && (displayable.style[fillOrStroke].type === 'linear' + || displayable.style[fillOrStroke].type === 'radial') + ) { + var gradient = displayable.style[fillOrStroke]; + var defs = that.getDefs(true); + + // Create dom in if not exists + var dom; + if (gradient._dom) { + // Gradient exists + dom = gradient._dom; + if (!defs.contains(gradient._dom)) { + // _dom is no longer in defs, recreate + that.addDom(dom); + } + } + else { + // New dom + dom = that.add(gradient); + } + + that.markUsed(displayable); + + var id = dom.getAttribute('id'); + svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')'); + } + }); + } +}; + + +/** + * Add a new gradient tag in + * + * @param {Gradient} gradient zr gradient instance + * @return {SVGLinearGradientElement | SVGRadialGradientElement} + * created DOM + */ +GradientManager.prototype.add = function (gradient) { + var dom; + if (gradient.type === 'linear') { + dom = this.createElement('linearGradient'); + } + else if (gradient.type === 'radial') { + dom = this.createElement('radialGradient'); + } + else { + zrLog('Illegal gradient type.'); + return null; + } + + // Set dom id with gradient id, since each gradient instance + // will have no more than one dom element. + // id may exists before for those dirty elements, in which case + // id should remain the same, and other attributes should be + // updated. + gradient.id = gradient.id || this.nextId++; + dom.setAttribute('id', 'zr' + this._zrId + + '-gradient-' + gradient.id); + + this.updateDom(gradient, dom); + this.addDom(dom); + + return dom; +}; + + +/** + * Update gradient. + * + * @param {Gradient} gradient zr gradient instance + */ +GradientManager.prototype.update = function (gradient) { + var that = this; + Definable.prototype.update.call(this, gradient, function () { + var type = gradient.type; + var tagName = gradient._dom.tagName; + if (type === 'linear' && tagName === 'linearGradient' + || type === 'radial' && tagName === 'radialGradient' + ) { + // Gradient type is not changed, update gradient + that.updateDom(gradient, gradient._dom); + } + else { + // Remove and re-create if type is changed + that.removeDom(gradient); + that.add(gradient); + } + }); +}; + + +/** + * Update gradient dom + * + * @param {Gradient} gradient zr gradient instance + * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom + * DOM to update + */ +GradientManager.prototype.updateDom = function (gradient, dom) { + if (gradient.type === 'linear') { + dom.setAttribute('x1', gradient.x); + dom.setAttribute('y1', gradient.y); + dom.setAttribute('x2', gradient.x2); + dom.setAttribute('y2', gradient.y2); + } + else if (gradient.type === 'radial') { + dom.setAttribute('cx', gradient.x); + dom.setAttribute('cy', gradient.y); + dom.setAttribute('r', gradient.r); + } + else { + zrLog('Illegal gradient type.'); + return; + } + + if (gradient.global) { + // x1, x2, y1, y2 in range of 0 to canvas width or height + dom.setAttribute('gradientUnits', 'userSpaceOnUse'); + } + else { + // x1, x2, y1, y2 in range of 0 to 1 + dom.setAttribute('gradientUnits', 'objectBoundingBox'); + } + + // Remove color stops if exists + dom.innerHTML = ''; + + // Add color stops + var colors = gradient.colorStops; + for (var i = 0, len = colors.length; i < len; ++i) { + var stop = this.createElement('stop'); + stop.setAttribute('offset', colors[i].offset * 100 + '%'); + stop.setAttribute('stop-color', colors[i].color); + dom.appendChild(stop); + } + + // Store dom element in gradient, to avoid creating multiple + // dom instances for the same gradient element + gradient._dom = dom; +}; + +/** + * Mark a single gradient to be used + * + * @param {Displayable} displayable displayable element + */ +GradientManager.prototype.markUsed = function (displayable) { + if (displayable.style) { + var gradient = displayable.style.fill; + if (gradient && gradient._dom) { + Definable.prototype.markUsed.call(this, gradient._dom); + } + + gradient = displayable.style.stroke; + if (gradient && gradient._dom) { + Definable.prototype.markUsed.call(this, gradient._dom); + } + } +}; + +/** + * @file Manages SVG clipPath elements. + * @author Zhang Wenli + */ + +/** + * Manages SVG clipPath elements. + * + * @class + * @extends Definable + * @param {number} zrId zrender instance id + * @param {SVGElement} svgRoot root of SVG document + */ +function ClippathManager(zrId, svgRoot) { + Definable.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__'); +} + + +inherits(ClippathManager, Definable); + + +/** + * Update clipPath. + * + * @param {Displayable} displayable displayable element + */ +ClippathManager.prototype.update = function (displayable) { + var svgEl = this.getSvgElement(displayable); + if (svgEl) { + this.updateDom(svgEl, displayable.__clipPaths, false); + } + + var textEl = this.getTextSvgElement(displayable); + if (textEl) { + // Make another clipPath for text, since it's transform + // matrix is not the same with svgElement + this.updateDom(textEl, displayable.__clipPaths, true); + } + + this.markUsed(displayable); +}; + + +/** + * Create an SVGElement of displayable and create a of its + * clipPath + * + * @param {Displayable} parentEl parent element + * @param {ClipPath[]} clipPaths clipPaths of parent element + * @param {boolean} isText if parent element is Text + */ +ClippathManager.prototype.updateDom = function ( + parentEl, + clipPaths, + isText +) { + if (clipPaths && clipPaths.length > 0) { + // Has clipPath, create with the first clipPath + var defs = this.getDefs(true); + var clipPath = clipPaths[0]; + var clipPathEl; + var id; + + var dom = isText ? '_textDom' : '_dom'; + + if (clipPath[dom]) { + // Use a dom that is already in + id = clipPath[dom].getAttribute('id'); + clipPathEl = clipPath[dom]; + + // Use a dom that is already in + if (!defs.contains(clipPathEl)) { + // This happens when set old clipPath that has + // been previously removed + defs.appendChild(clipPathEl); + } + } + else { + // New + id = 'zr' + this._zrId + '-clip-' + this.nextId; + ++this.nextId; + clipPathEl = this.createElement('clipPath'); + clipPathEl.setAttribute('id', id); + defs.appendChild(clipPathEl); + + clipPath[dom] = clipPathEl; + } + + // Build path and add to + var svgProxy = this.getSvgProxy(clipPath); + if (clipPath.transform + && clipPath.parent.invTransform + && !isText + ) { + /** + * If a clipPath has a parent with transform, the transform + * of parent should not be considered when setting transform + * of clipPath. So we need to transform back from parent's + * transform, which is done by multiplying parent's inverse + * transform. + */ + // Store old transform + var transform = Array.prototype.slice.call( + clipPath.transform + ); + + // Transform back from parent, and brush path + mul$1( + clipPath.transform, + clipPath.parent.invTransform, + clipPath.transform + ); + svgProxy.brush(clipPath); + + // Set back transform of clipPath + clipPath.transform = transform; + } + else { + svgProxy.brush(clipPath); + } + + var pathEl = this.getSvgElement(clipPath); + + clipPathEl.innerHTML = ''; + /** + * Use `cloneNode()` here to appendChild to multiple parents, + * which may happend when Text and other shapes are using the same + * clipPath. Since Text will create an extra clipPath DOM due to + * different transform rules. + */ + clipPathEl.appendChild(pathEl.cloneNode()); + + parentEl.setAttribute('clip-path', 'url(#' + id + ')'); + + if (clipPaths.length > 1) { + // Make the other clipPaths recursively + this.updateDom(clipPathEl, clipPaths.slice(1), isText); + } + } + else { + // No clipPath + if (parentEl) { + parentEl.setAttribute('clip-path', 'none'); + } + } +}; + +/** + * Mark a single clipPath to be used + * + * @param {Displayable} displayable displayable element + */ +ClippathManager.prototype.markUsed = function (displayable) { + var that = this; + if (displayable.__clipPaths && displayable.__clipPaths.length > 0) { + each$1(displayable.__clipPaths, function (clipPath) { + if (clipPath._dom) { + Definable.prototype.markUsed.call(that, clipPath._dom); + } + if (clipPath._textDom) { + Definable.prototype.markUsed.call(that, clipPath._textDom); + } + }); + } +}; + +/** + * @file Manages SVG shadow elements. + * @author Zhang Wenli + */ + +/** + * Manages SVG shadow elements. + * + * @class + * @extends Definable + * @param {number} zrId zrender instance id + * @param {SVGElement} svgRoot root of SVG document + */ +function ShadowManager(zrId, svgRoot) { + Definable.call( + this, + zrId, + svgRoot, + ['filter'], + '__filter_in_use__', + '_shadowDom' + ); +} + + +inherits(ShadowManager, Definable); + + +/** + * Create new shadow DOM for fill or stroke if not exist, + * but will not update shadow if exists. + * + * @param {SvgElement} svgElement SVG element to paint + * @param {Displayable} displayable zrender displayable element + */ +ShadowManager.prototype.addWithoutUpdate = function ( + svgElement, + displayable +) { + if (displayable && hasShadow(displayable.style)) { + var style = displayable.style; + + // Create dom in if not exists + var dom; + if (style._shadowDom) { + // Gradient exists + dom = style._shadowDom; + + var defs = this.getDefs(true); + if (!defs.contains(style._shadowDom)) { + // _shadowDom is no longer in defs, recreate + this.addDom(dom); + } + } + else { + // New dom + dom = this.add(displayable); + } + + this.markUsed(displayable); + + var id = dom.getAttribute('id'); + svgElement.style.filter = 'url(#' + id + ')'; + } +}; + + +/** + * Add a new shadow tag in + * + * @param {Displayable} displayable zrender displayable element + * @return {SVGFilterElement} created DOM + */ +ShadowManager.prototype.add = function (displayable) { + var dom = this.createElement('filter'); + var style = displayable.style; + + // Set dom id with shadow id, since each shadow instance + // will have no more than one dom element. + // id may exists before for those dirty elements, in which case + // id should remain the same, and other attributes should be + // updated. + style._shadowDomId = style._shadowDomId || this.nextId++; + dom.setAttribute('id', 'zr' + this._zrId + + '-shadow-' + style._shadowDomId); + + this.updateDom(displayable, dom); + this.addDom(dom); + + return dom; +}; + + +/** + * Update shadow. + * + * @param {Displayable} displayable zrender displayable element + */ +ShadowManager.prototype.update = function (svgElement, displayable) { + var style = displayable.style; + if (hasShadow(style)) { + var that = this; + Definable.prototype.update.call(this, displayable, function (style) { + that.updateDom(displayable, style._shadowDom); + }); + } + else { + // Remove shadow + this.remove(svgElement, style); + } +}; + + +/** + * Remove DOM and clear parent filter + */ +ShadowManager.prototype.remove = function (svgElement, style) { + if (style._shadowDomId != null) { + this.removeDom(style); + svgElement.style.filter = ''; + } +}; + + +/** + * Update shadow dom + * + * @param {Displayable} displayable zrender displayable element + * @param {SVGFilterElement} dom DOM to update + */ +ShadowManager.prototype.updateDom = function (displayable, dom) { + var domChild = dom.getElementsByTagName('feDropShadow'); + if (domChild.length === 0) { + domChild = this.createElement('feDropShadow'); + } + else { + domChild = domChild[0]; + } + + var style = displayable.style; + var scaleX = displayable.scale ? (displayable.scale[0] || 1) : 1; + var scaleY = displayable.scale ? (displayable.scale[1] || 1) : 1; + + // TODO: textBoxShadowBlur is not supported yet + var offsetX, offsetY, blur, color; + if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) { + offsetX = style.shadowOffsetX || 0; + offsetY = style.shadowOffsetY || 0; + blur = style.shadowBlur; + color = style.shadowColor; + } + else if (style.textShadowBlur) { + offsetX = style.textShadowOffsetX || 0; + offsetY = style.textShadowOffsetY || 0; + blur = style.textShadowBlur; + color = style.textShadowColor; + } + else { + // Remove shadow + this.removeDom(dom, style); + return; + } + + domChild.setAttribute('dx', offsetX / scaleX); + domChild.setAttribute('dy', offsetY / scaleY); + domChild.setAttribute('flood-color', color); + + // Divide by two here so that it looks the same as in canvas + // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur + var stdDx = blur / 2 / scaleX; + var stdDy = blur / 2 / scaleY; + var stdDeviation = stdDx + ' ' + stdDy; + domChild.setAttribute('stdDeviation', stdDeviation); + + // Fix filter clipping problem + dom.setAttribute('x', '-100%'); + dom.setAttribute('y', '-100%'); + dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%'); + dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%'); + + dom.appendChild(domChild); + + // Store dom element in shadow, to avoid creating multiple + // dom instances for the same shadow element + style._shadowDom = dom; +}; + +/** + * Mark a single shadow to be used + * + * @param {Displayable} displayable displayable element + */ +ShadowManager.prototype.markUsed = function (displayable) { + var style = displayable.style; + if (style && style._shadowDom) { + Definable.prototype.markUsed.call(this, style._shadowDom); + } +}; + +function hasShadow(style) { + // TODO: textBoxShadowBlur is not supported yet + return style + && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY + || style.textShadowBlur || style.textShadowOffsetX + || style.textShadowOffsetY); +} + +/** + * SVG Painter + * @module zrender/svg/Painter + */ + +function parseInt10$2(val) { + return parseInt(val, 10); +} + +function getSvgProxy(el) { + if (el instanceof Path) { + return svgPath; + } + else if (el instanceof ZImage) { + return svgImage; + } + else if (el instanceof Text) { + return svgText; + } + else { + return svgPath; + } +} + +function checkParentAvailable(parent, child) { + return child && parent && child.parentNode !== parent; +} + +function insertAfter(parent, child, prevSibling) { + if (checkParentAvailable(parent, child) && prevSibling) { + var nextSibling = prevSibling.nextSibling; + nextSibling ? parent.insertBefore(child, nextSibling) + : parent.appendChild(child); + } +} + +function prepend(parent, child) { + if (checkParentAvailable(parent, child)) { + var firstChild = parent.firstChild; + firstChild ? parent.insertBefore(child, firstChild) + : parent.appendChild(child); + } +} + +function remove$1(parent, child) { + if (child && parent && child.parentNode === parent) { + parent.removeChild(child); + } +} + +function getTextSvgElement(displayable) { + return displayable.__textSvgEl; +} + +function getSvgElement(displayable) { + return displayable.__svgEl; +} + +/** + * @alias module:zrender/svg/Painter + * @constructor + * @param {HTMLElement} root 绘图容器 + * @param {module:zrender/Storage} storage + * @param {Object} opts + */ +var SVGPainter = function (root, storage, opts, zrId) { + + this.root = root; + this.storage = storage; + this._opts = opts = extend({}, opts || {}); + + var svgRoot = createElement('svg'); + svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + svgRoot.setAttribute('version', '1.1'); + svgRoot.setAttribute('baseProfile', 'full'); + svgRoot.style.cssText = 'user-select:none;position:absolute;left:0;top:0;'; + + this.gradientManager = new GradientManager(zrId, svgRoot); + this.clipPathManager = new ClippathManager(zrId, svgRoot); + this.shadowManager = new ShadowManager(zrId, svgRoot); + + var viewport = document.createElement('div'); + viewport.style.cssText = 'overflow:hidden;position:relative'; + + this._svgRoot = svgRoot; + this._viewport = viewport; + + root.appendChild(viewport); + viewport.appendChild(svgRoot); + + this.resize(opts.width, opts.height); + + this._visibleList = []; +}; + +SVGPainter.prototype = { + + constructor: SVGPainter, + + getType: function () { + return 'svg'; + }, + + getViewportRoot: function () { + return this._viewport; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + refresh: function () { + + var list = this.storage.getDisplayList(true); + + this._paintList(list); + }, + + setBackgroundColor: function (backgroundColor) { + // TODO gradient + this._viewport.style.background = backgroundColor; + }, + + _paintList: function (list) { + this.gradientManager.markAllUnused(); + this.clipPathManager.markAllUnused(); + this.shadowManager.markAllUnused(); + + var svgRoot = this._svgRoot; + var visibleList = this._visibleList; + var listLen = list.length; + + var newVisibleList = []; + var i; + for (i = 0; i < listLen; i++) { + var displayable = list[i]; + var svgProxy = getSvgProxy(displayable); + var svgElement = getSvgElement(displayable) + || getTextSvgElement(displayable); + if (!displayable.invisible) { + if (displayable.__dirty) { + svgProxy && svgProxy.brush(displayable); + + // Update clipPath + this.clipPathManager.update(displayable); + + // Update gradient and shadow + if (displayable.style) { + this.gradientManager + .update(displayable.style.fill); + this.gradientManager + .update(displayable.style.stroke); + + this.shadowManager + .update(svgElement, displayable); + } + + displayable.__dirty = false; + } + newVisibleList.push(displayable); + } + } + + var diff = arrayDiff$1(visibleList, newVisibleList); + var prevSvgElement; + + // First do remove, in case element moved to the head and do remove + // after add + for (i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.removed) { + for (var k = 0; k < item.count; k++) { + var displayable = visibleList[item.indices[k]]; + var svgElement = getSvgElement(displayable); + var textSvgElement = getTextSvgElement(displayable); + remove$1(svgRoot, svgElement); + remove$1(svgRoot, textSvgElement); + } + } + } + for (i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.added) { + for (var k = 0; k < item.count; k++) { + var displayable = newVisibleList[item.indices[k]]; + var svgElement = getSvgElement(displayable); + var textSvgElement = getTextSvgElement(displayable); + prevSvgElement + ? insertAfter(svgRoot, svgElement, prevSvgElement) + : prepend(svgRoot, svgElement); + if (svgElement) { + insertAfter(svgRoot, textSvgElement, svgElement); + } + else if (prevSvgElement) { + insertAfter( + svgRoot, textSvgElement, prevSvgElement + ); + } + else { + prepend(svgRoot, textSvgElement); + } + // Insert text + insertAfter(svgRoot, textSvgElement, svgElement); + prevSvgElement = textSvgElement || svgElement + || prevSvgElement; + + this.gradientManager + .addWithoutUpdate(svgElement, displayable); + this.shadowManager + .addWithoutUpdate(prevSvgElement, displayable); + this.clipPathManager.markUsed(displayable); + } + } + else if (!item.removed) { + for (var k = 0; k < item.count; k++) { + var displayable = newVisibleList[item.indices[k]]; + prevSvgElement + = svgElement + = getTextSvgElement(displayable) + || getSvgElement(displayable) + || prevSvgElement; + + this.gradientManager.markUsed(displayable); + this.gradientManager + .addWithoutUpdate(svgElement, displayable); + + this.shadowManager.markUsed(displayable); + this.shadowManager + .addWithoutUpdate(svgElement, displayable); + + this.clipPathManager.markUsed(displayable); + } + } + } + + this.gradientManager.removeUnused(); + this.clipPathManager.removeUnused(); + this.shadowManager.removeUnused(); + + this._visibleList = newVisibleList; + }, + + _getDefs: function (isForceCreating) { + var svgRoot = this._svgRoot; + var defs = this._svgRoot.getElementsByTagName('defs'); + if (defs.length === 0) { + // Not exist + if (isForceCreating) { + var defs = svgRoot.insertBefore( + createElement('defs'), // Create new tag + svgRoot.firstChild // Insert in the front of svg + ); + if (!defs.contains) { + // IE doesn't support contains method + defs.contains = function (el) { + var children = defs.children; + if (!children) { + return false; + } + for (var i = children.length - 1; i >= 0; --i) { + if (children[i] === el) { + return true; + } + } + return false; + }; + } + return defs; + } + else { + return null; + } + } + else { + return defs[0]; + } + }, + + resize: function (width, height) { + var viewport = this._viewport; + // FIXME Why ? + viewport.style.display = 'none'; + + // Save input w/h + var opts = this._opts; + width != null && (opts.width = width); + height != null && (opts.height = height); + + width = this._getSize(0); + height = this._getSize(1); + + viewport.style.display = ''; + + if (this._width !== width || this._height !== height) { + this._width = width; + this._height = height; + + var viewportStyle = viewport.style; + viewportStyle.width = width + 'px'; + viewportStyle.height = height + 'px'; + + var svgRoot = this._svgRoot; + // Set width by 'svgRoot.width = width' is invalid + svgRoot.setAttribute('width', width); + svgRoot.setAttribute('height', height); + } + }, + + /** + * 获取绘图区域宽度 + */ + getWidth: function () { + return this._width; + }, + + /** + * 获取绘图区域高度 + */ + getHeight: function () { + return this._height; + }, + + _getSize: function (whIdx) { + var opts = this._opts; + var wh = ['width', 'height'][whIdx]; + var cwh = ['clientWidth', 'clientHeight'][whIdx]; + var plt = ['paddingLeft', 'paddingTop'][whIdx]; + var prb = ['paddingRight', 'paddingBottom'][whIdx]; + + if (opts[wh] != null && opts[wh] !== 'auto') { + return parseFloat(opts[wh]); + } + + var root = this.root; + // IE8 does not support getComputedStyle, but it use VML. + var stl = document.defaultView.getComputedStyle(root); + + return ( + (root[cwh] || parseInt10$2(stl[wh]) || parseInt10$2(root.style[wh])) + - (parseInt10$2(stl[plt]) || 0) + - (parseInt10$2(stl[prb]) || 0) + ) | 0; + }, + + dispose: function () { + this.root.innerHTML = ''; + + this._svgRoot + = this._viewport + = this.storage + = null; + }, + + clear: function () { + if (this._viewport) { + this.root.removeChild(this._viewport); + } + }, + + pathToDataUrl: function () { + this.refresh(); + var html = this._svgRoot.outerHTML; + return 'data:image/svg+xml;charset=UTF-8,' + html; + } +}; + +// Not supported methods +function createMethodNotSupport$1(method) { + return function () { + zrLog('In SVG mode painter not support method "' + method + '"'); + }; +} + +// Unsuppoted methods +each$1([ + 'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', + 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', + 'toDataURL', 'pathToImage' +], function (name) { + SVGPainter.prototype[name] = createMethodNotSupport$1(name); +}); + +registerPainter('svg', SVGPainter); + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +// Import all charts and components + +exports.version = version; +exports.dependencies = dependencies; +exports.PRIORITY = PRIORITY; +exports.init = init; +exports.connect = connect; +exports.disConnect = disConnect; +exports.disconnect = disconnect; +exports.dispose = dispose; +exports.getInstanceByDom = getInstanceByDom; +exports.getInstanceById = getInstanceById; +exports.registerTheme = registerTheme; +exports.registerPreprocessor = registerPreprocessor; +exports.registerProcessor = registerProcessor; +exports.registerPostUpdate = registerPostUpdate; +exports.registerAction = registerAction; +exports.registerCoordinateSystem = registerCoordinateSystem; +exports.getCoordinateSystemDimensions = getCoordinateSystemDimensions; +exports.registerLayout = registerLayout; +exports.registerVisual = registerVisual; +exports.registerLoading = registerLoading; +exports.extendComponentModel = extendComponentModel; +exports.extendComponentView = extendComponentView; +exports.extendSeriesModel = extendSeriesModel; +exports.extendChartView = extendChartView; +exports.setCanvasCreator = setCanvasCreator; +exports.registerMap = registerMap; +exports.getMap = getMap; +exports.dataTool = dataTool; +exports.zrender = zrender; +exports.number = number; +exports.format = format; +exports.throttle = throttle; +exports.helper = helper; +exports.matrix = matrix; +exports.vector = vector; +exports.color = color; +exports.parseGeoJSON = parseGeoJson$1; +exports.parseGeoJson = parseGeoJson; +exports.util = ecUtil; +exports.graphic = graphic$1; +exports.List = List; +exports.Model = Model; +exports.Axis = Axis; +exports.env = env$1; + +}))); +//# sourceMappingURL=echarts.js.map diff --git a/public/lib/echarts/echarts.min.js b/public/lib/echarts/echarts.min.js new file mode 100644 index 0000000..93c11b3 --- /dev/null +++ b/public/lib/echarts/echarts.min.js @@ -0,0 +1,22 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";function e(t,e){"createCanvas"===t&&(q_=null),j_[t]=e}function i(t){if(null==t||"object"!=typeof t)return t;var e=t,n=G_.call(t);if("[object Array]"===n){if(!O(t)){e=[];for(var o=0,a=t.length;o=0){var o="touchend"!=n?e.targetTouches[0]:e.changedTouches[0];o&&rt(t,o,e,i)}else rt(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&sw.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function ut(t,e,i){rw?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function ht(t,e,i){rw?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}function ct(t){return t.which>1}function dt(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:ft}}function ft(t){lw(this.event)}function pt(){}function gt(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n,o=t;o;){if(o.clipPath&&!o.clipPath.contain(e,i))return!1;o.silent&&(n=!0),o=o.parent}return!n||uw}return!1}function mt(){var t=new dw(6);return vt(t),t}function vt(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function yt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function xt(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],a=e[0]*i[2]+e[2]*i[3],r=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=a,t[3]=r,t[4]=s,t[5]=l,t}function _t(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t}function wt(t,e,i){var n=e[0],o=e[2],a=e[4],r=e[1],s=e[3],l=e[5],u=Math.sin(i),h=Math.cos(i);return t[0]=n*h+r*u,t[1]=-n*u+r*h,t[2]=o*h+s*u,t[3]=-o*u+h*s,t[4]=h*a+u*l,t[5]=h*l-u*a,t}function bt(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t}function St(t,e){var i=e[0],n=e[2],o=e[4],a=e[1],r=e[3],s=e[5],l=i*r-a*n;return l?(l=1/l,t[0]=r*l,t[1]=-a*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-r*o)*l,t[5]=(a*o-i*s)*l,t):null}function Mt(t){var e=mt();return yt(e,t),e}function It(t){return t>gw||t<-gw}function Tt(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function At(t){return(t=Math.round(t))<0?0:t>255?255:t}function Dt(t){return(t=Math.round(t))<0?0:t>360?360:t}function Ct(t){return t<0?0:t>1?1:t}function Lt(t){return At(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function kt(t){return Ct(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function Pt(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function Nt(t,e,i){return t+(e-t)*i}function Ot(t,e,i,n,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=o,t}function Et(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Rt(t,e){Cw&&Et(Cw,e),Cw=Dw.put(t,Cw||e.slice())}function zt(t,e){if(t){e=e||[];var i=Dw.get(t);if(i)return Et(e,i);var n=(t+="").replace(/ /g,"").toLowerCase();if(n in Aw)return Et(e,Aw[n]),Rt(t,e),e;if("#"!==n.charAt(0)){var o=n.indexOf("("),a=n.indexOf(")");if(-1!==o&&a+1===n.length){var r=n.substr(0,o),s=n.substr(o+1,a-(o+1)).split(","),l=1;switch(r){case"rgba":if(4!==s.length)return void Ot(e,0,0,0,1);l=kt(s.pop());case"rgb":return 3!==s.length?void Ot(e,0,0,0,1):(Ot(e,Lt(s[0]),Lt(s[1]),Lt(s[2]),l),Rt(t,e),e);case"hsla":return 4!==s.length?void Ot(e,0,0,0,1):(s[3]=kt(s[3]),Bt(s,e),Rt(t,e),e);case"hsl":return 3!==s.length?void Ot(e,0,0,0,1):(Bt(s,e),Rt(t,e),e);default:return}}Ot(e,0,0,0,1)}else{if(4===n.length)return(u=parseInt(n.substr(1),16))>=0&&u<=4095?(Ot(e,(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1),Rt(t,e),e):void Ot(e,0,0,0,1);if(7===n.length){var u=parseInt(n.substr(1),16);return u>=0&&u<=16777215?(Ot(e,(16711680&u)>>16,(65280&u)>>8,255&u,1),Rt(t,e),e):void Ot(e,0,0,0,1)}}}}function Bt(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=kt(t[1]),o=kt(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return e=e||[],Ot(e,At(255*Pt(r,a,i+1/3)),At(255*Pt(r,a,i)),At(255*Pt(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Vt(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,a=t[2]/255,r=Math.min(n,o,a),s=Math.max(n,o,a),l=s-r,u=(s+r)/2;if(0===l)e=0,i=0;else{i=u<.5?l/(s+r):l/(2-s-r);var h=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+h-d:a===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,u];return null!=t[3]&&f.push(t[3]),f}}function Gt(t,e){var i=zt(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,i[n]>255?i[n]=255:t[n]<0&&(i[n]=0);return Xt(i,4===i.length?"rgba":"rgb")}}function Ft(t){var e=zt(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Wt(t,e,i){if(e&&e.length&&t>=0&&t<=1){i=i||[];var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=e[o],s=e[a],l=n-o;return i[0]=At(Nt(r[0],s[0],l)),i[1]=At(Nt(r[1],s[1],l)),i[2]=At(Nt(r[2],s[2],l)),i[3]=Ct(Nt(r[3],s[3],l)),i}}function Ht(t,e,i){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=zt(e[o]),s=zt(e[a]),l=n-o,u=Xt([At(Nt(r[0],s[0],l)),At(Nt(r[1],s[1],l)),At(Nt(r[2],s[2],l)),Ct(Nt(r[3],s[3],l))],"rgba");return i?{color:u,leftIndex:o,rightIndex:a,value:n}:u}}function Zt(t,e,i,n){if(t=zt(t))return t=Vt(t),null!=e&&(t[0]=Dt(e)),null!=i&&(t[1]=kt(i)),null!=n&&(t[2]=kt(n)),Xt(Bt(t),"rgba")}function Ut(t,e){if((t=zt(t))&&null!=e)return t[3]=Ct(e),Xt(t,"rgba")}function Xt(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}function jt(t,e){return t[e]}function Yt(t,e,i){t[e]=i}function qt(t,e,i){return(e-t)*i+t}function Kt(t,e,i){return i>.5?e:t}function $t(t,e,i,n,o){var a=t.length;if(1==o)for(s=0;so)t.length=o;else for(r=n;r=0&&!(m[i]<=e);i--);i=Math.min(i,u-2)}else{for(i=L;ie);i++);i=Math.min(i-1,u-2)}L=i,k=e;var n=m[i+1]-m[i];if(0!==n)if(I=(e-m[i])/n,l)if(A=v[i],T=v[0===i?i:i-1],D=v[i>u-2?u-1:i+1],C=v[i>u-3?u-1:i+2],d)te(T,A,D,C,I,I*I,I*I*I,r(t,o),g);else{if(f)a=te(T,A,D,C,I,I*I,I*I*I,P,1),a=ne(P);else{if(p)return Kt(A,D,I);a=ee(T,A,D,C,I,I*I,I*I*I)}s(t,o,a)}else if(d)$t(v[i],v[i+1],I,r(t,o),g);else{var a;if(f)$t(v[i],v[i+1],I,P,1),a=ne(P);else{if(p)return Kt(v[i],v[i+1],I);a=qt(v[i],v[i+1],I)}s(t,o,a)}},ondestroy:i});return e&&"spline"!==e&&(N.easing=e),N}}}function re(t,e,i,n,o,a,r,s){_(n)?(a=o,o=n,n=0):x(o)?(a=o,o="linear",n=0):x(n)?(a=n,n=0):x(i)?(a=i,i=500):i||(i=500),t.stopAnimation(),se(t,"",t,e,i,n,s);var l=t.animators.slice(),u=l.length;u||a&&a();for(var h=0;h0&&t.animate(e,!1).when(null==o?500:o,s).delay(a||0)}function le(t,e,i,n){if(e){var o={};o[e]={},o[e][i]=n,t.attr(o)}else t.attr(i,n)}function ue(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function he(t){for(var e=0;t>=Uw;)e|=1&t,t>>=1;return t+e}function ce(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o=0;)o++;return o-e}function de(t,e,i){for(i--;e>>1])<0?l=a:s=a+1;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=r}}function pe(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])>0){for(s=n-o;l0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}else{for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}for(r++;r>>1);a(t,e[i+h])>0?r=h+1:l=h}return l}function ge(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])<0){for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}else{for(s=n-o;l=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}for(r++;r>>1);a(t,e[i+h])<0?l=h:r=h+1}return l}function me(t,e){function i(i){var s=a[i],u=r[i],h=a[i+1],c=r[i+1];r[i]=u+c,i===l-3&&(a[i+1]=a[i+2],r[i+1]=r[i+2]),l--;var d=ge(t[h],t,s,u,0,e);s+=d,0!==(u-=d)&&0!==(c=pe(t[s+u-1],t,h,c,c-1,e))&&(u<=c?n(s,u,h,c):o(s,u,h,c))}function n(i,n,o,a){var r=0;for(r=0;r=Xw||f>=Xw);if(p)break;g<0&&(g=0),g+=2}if((s=g)<1&&(s=1),1===n){for(r=0;r=0;r--)t[f+r]=t[d+r];if(0===n){v=!0;break}}if(t[c--]=u[h--],1==--a){v=!0;break}if(0!=(m=a-pe(t[l],u,0,a,a-1,e))){for(a-=m,f=(c-=m)+1,d=(h-=m)+1,r=0;r=Xw||m>=Xw);if(v)break;p<0&&(p=0),p+=2}if((s=p)<1&&(s=1),1===a){for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else{if(0===a)throw new Error;for(d=c-(a-1),r=0;r=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else for(d=c-(a-1),r=0;r1;){var t=l-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;i(t)}},this.forceMergeRuns=function(){for(;l>1;){var t=l-2;t>0&&r[t-1]s&&(l=s),fe(t,i,i+l,i+a,e),a=l}r.pushRun(i,a),r.mergeRuns(),o-=a,i+=a}while(0!==o);r.forceMergeRuns()}}function ye(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function xe(t,e,i){var n=null==e.x?0:e.x,o=null==e.x2?1:e.x2,a=null==e.y?0:e.y,r=null==e.y2?0:e.y2;return e.global||(n=n*i.width+i.x,o=o*i.width+i.x,a=a*i.height+i.y,r=r*i.height+i.y),n=isNaN(n)?0:n,o=isNaN(o)?1:o,a=isNaN(a)?0:a,r=isNaN(r)?0:r,t.createLinearGradient(n,a,o,r)}function _e(t,e,i){var n=i.width,o=i.height,a=Math.min(n,o),r=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;return e.global||(r=r*n+i.x,s=s*o+i.y,l*=a),t.createRadialGradient(r,s,0,r,s,l)}function we(){return!1}function be(t,e,i){var n=Y_(),o=e.getWidth(),a=e.getHeight(),r=n.style;return r&&(r.position="absolute",r.left=0,r.top=0,r.width=o+"px",r.height=a+"px",n.setAttribute("data-zr-dom-id",t)),n.width=o*i,n.height=a*i,n}function Se(t){if("string"==typeof t){var e=ob.get(t);return e&&e.image}return t}function Me(t,e,i,n,o){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=ob.get(t),r={hostEl:i,cb:n,cbPayload:o};return a?!Te(e=a.image)&&a.pending.push(r):(!e&&(e=new Image),e.onload=e.onerror=Ie,ob.put(t,e.__cachedImgObj={image:e,pending:[r]}),e.src=e.__zrImageSrc=t),e}return t}return e}function Ie(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;esb&&(rb=0,ab={}),rb++,ab[i]=o,o}function De(t,e,i,n,o,a,r){return a?Le(t,e,i,n,o,a,r):Ce(t,e,i,n,o,r)}function Ce(t,e,i,n,o,a){var r=Ge(t,e,o,a),s=Ae(t,e);o&&(s+=o[1]+o[3]);var l=r.outerHeight,u=new ue(ke(0,s,i),Pe(0,l,n),s,l);return u.lineHeight=r.lineHeight,u}function Le(t,e,i,n,o,a,r){var s=Fe(t,{rich:a,truncate:r,font:e,textAlign:i,textPadding:o}),l=s.outerWidth,u=s.outerHeight;return new ue(ke(0,l,i),Pe(0,u,n),l,u)}function ke(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function Pe(t,e,i){return"middle"===i?t-=e/2:"bottom"===i&&(t-=e),t}function Ne(t,e,i){var n=e.x,o=e.y,a=e.height,r=e.width,s=a/2,l="left",u="top";switch(t){case"left":n-=i,o+=s,l="right",u="middle";break;case"right":n+=i+r,o+=s,u="middle";break;case"top":n+=r/2,o-=i,l="center",u="bottom";break;case"bottom":n+=r/2,o+=a+i,l="center";break;case"inside":n+=r/2,o+=s,l="center",u="middle";break;case"insideLeft":n+=i,o+=s,u="middle";break;case"insideRight":n+=r-i,o+=s,l="right",u="middle";break;case"insideTop":n+=r/2,o+=i,l="center";break;case"insideBottom":n+=r/2,o+=a-i,l="center",u="bottom";break;case"insideTopLeft":n+=i,o+=i;break;case"insideTopRight":n+=r-i,o+=i,l="right";break;case"insideBottomLeft":n+=i,o+=a-i,u="bottom";break;case"insideBottomRight":n+=r-i,o+=a-i,l="right",u="bottom"}return{x:n,y:o,textAlign:l,textVerticalAlign:u}}function Oe(t,e,i,n,o){if(!e)return"";var a=(t+"").split("\n");o=Ee(e,i,n,o);for(var r=0,s=a.length;r=r;l++)s-=r;var u=Ae(i);return u>s&&(i="",u=0),s=t-u,n.ellipsis=i,n.ellipsisWidth=u,n.contentWidth=s,n.containerWidth=t,n}function Re(t,e){var i=e.containerWidth,n=e.font,o=e.contentWidth;if(!i)return"";var a=Ae(t,n);if(a<=i)return t;for(var r=0;;r++){if(a<=o||r>=e.maxIterations){t+=e.ellipsis;break}var s=0===r?ze(t,o,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*o/a):0;a=Ae(t=t.substr(0,s),n)}return""===t&&(t=e.placeholder),t}function ze(t,e,i,n){for(var o=0,a=0,r=t.length;al)t="",a=[];else if(null!=u)for(var h=Ee(u-(i?i[1]+i[3]:0),e,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),c=0,d=a.length;co&&We(i,t.substring(o,a)),We(i,n[2],n[1]),o=lb.lastIndex}of)return{lines:[],width:0,height:0};k.textWidth=Ae(k.text,_);var b=y.textWidth,S=null==b||"auto"===b;if("string"==typeof b&&"%"===b.charAt(b.length-1))k.percentWidth=b,u.push(k),b=0;else{if(S){b=k.textWidth;var M=y.textBackgroundColor,I=M&&M.image;I&&Te(I=Se(I))&&(b=Math.max(b,I.width*w/I.height))}var T=x?x[1]+x[3]:0;b+=T;var C=null!=d?d-m:null;null!=C&&Cl&&(i*=l/(c=i+n),n*=l/c),o+a>l&&(o*=l/(c=o+a),a*=l/c),n+o>u&&(n*=u/(c=n+o),o*=u/c),i+a>u&&(i*=u/(c=i+a),a*=u/c),t.moveTo(r+i,s),t.lineTo(r+l-n,s),0!==n&&t.arc(r+l-n,s+n,n,-Math.PI/2,0),t.lineTo(r+l,s+u-o),0!==o&&t.arc(r+l-o,s+u-o,o,0,Math.PI/2),t.lineTo(r+a,s+u),0!==a&&t.arc(r+a,s+u-a,a,Math.PI/2,Math.PI),t.lineTo(r,s+i),0!==i&&t.arc(r+i,s+i,i,Math.PI,1.5*Math.PI)}function Ue(t){return Xe(t),d(t.rich,Xe),t}function Xe(t){if(t){t.font=He(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||cb[e]?e:"left";var i=t.textVerticalAlign||t.textBaseline;"center"===i&&(i="middle"),t.textVerticalAlign=null==i||db[i]?i:"top",t.textPadding&&(t.textPadding=L(t.textPadding))}}function je(t,e,i,n,o,a){n.rich?qe(t,e,i,n,o):Ye(t,e,i,n,o,a)}function Ye(t,e,i,n,o,a){var r=a&&a.style,s=r&&"text"===a.type,l=n.font||ub;s&&l===(r.font||ub)||(e.font=l);var u=t.__computedFont;t.__styleFont!==l&&(t.__styleFont=l,u=t.__computedFont=e.font);var h=n.textPadding,c=t.__textCotentBlock;c&&!t.__dirtyText||(c=t.__textCotentBlock=Ge(i,u,h,n.truncate));var d=c.outerHeight,f=c.lines,p=c.lineHeight,g=ii(d,n,o),m=g.baseX,v=g.baseY,y=g.textAlign||"left",x=g.textVerticalAlign;$e(e,n,o,m,v);var _=Pe(v,d,x),w=m,b=_,S=Qe(n);if(S||h){var M=Ae(i,u);h&&(M+=h[1]+h[3]);var I=ke(m,M,y);S&&ti(t,e,n,I,_,M,d),h&&(w=si(m,y,h),b+=h[0])}e.textAlign=y,e.textBaseline="middle";for(R=0;R=0&&"right"===(_=b[C]).textAlign;)Je(t,e,_,n,M,v,D,"right"),I-=_.width,D-=_.width,C--;for(A+=(a-(A-m)-(y-D)-I)/2;T<=C;)Je(t,e,_=b[T],n,M,v,A+_.width/2,"center"),A+=_.width,T++;v+=M}}function $e(t,e,i,n,o){if(i&&e.textRotation){var a=e.textOrigin;"center"===a?(n=i.width/2+i.x,o=i.height/2+i.y):a&&(n=a[0]+i.x,o=a[1]+i.y),t.translate(n,o),t.rotate(-e.textRotation),t.translate(-n,-o)}}function Je(t,e,i,n,o,a,r,s){var l=n.rich[i.styleName]||{};l.text=i.text;var u=i.textVerticalAlign,h=a+o/2;"top"===u?h=a+i.height/2:"bottom"===u&&(h=a+o-i.height/2),!i.isLineHolder&&Qe(l)&&ti(t,e,l,"right"===s?r-i.width:"center"===s?r-i.width/2:r,h-i.height/2,i.width,i.height);var c=i.textPadding;c&&(r=si(r,s,c),h-=i.height/2-c[2]-i.textHeight/2),ni(e,"shadowBlur",D(l.textShadowBlur,n.textShadowBlur,0)),ni(e,"shadowColor",l.textShadowColor||n.textShadowColor||"transparent"),ni(e,"shadowOffsetX",D(l.textShadowOffsetX,n.textShadowOffsetX,0)),ni(e,"shadowOffsetY",D(l.textShadowOffsetY,n.textShadowOffsetY,0)),ni(e,"textAlign",s),ni(e,"textBaseline","middle"),ni(e,"font",i.font||ub);var d=oi(l.textStroke||n.textStroke,p),f=ai(l.textFill||n.textFill),p=A(l.textStrokeWidth,n.textStrokeWidth);d&&(ni(e,"lineWidth",p),ni(e,"strokeStyle",d),e.strokeText(i.text,r,h)),f&&(ni(e,"fillStyle",f),e.fillText(i.text,r,h))}function Qe(t){return t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor}function ti(t,e,i,n,o,a,r){var s=i.textBackgroundColor,l=i.textBorderWidth,u=i.textBorderColor,h=_(s);if(ni(e,"shadowBlur",i.textBoxShadowBlur||0),ni(e,"shadowColor",i.textBoxShadowColor||"transparent"),ni(e,"shadowOffsetX",i.textBoxShadowOffsetX||0),ni(e,"shadowOffsetY",i.textBoxShadowOffsetY||0),h||l&&u){e.beginPath();var c=i.textBorderRadius;c?Ze(e,{x:n,y:o,width:a,height:r,r:c}):e.rect(n,o,a,r),e.closePath()}if(h)if(ni(e,"fillStyle",s),null!=i.fillOpacity){f=e.globalAlpha;e.globalAlpha=i.fillOpacity*i.opacity,e.fill(),e.globalAlpha=f}else e.fill();else if(x(s))ni(e,"fillStyle",s(i)),e.fill();else if(w(s)){var d=s.image;(d=Me(d,null,t,ei,s))&&Te(d)&&e.drawImage(d,n,o,a,r)}if(l&&u)if(ni(e,"lineWidth",l),ni(e,"strokeStyle",u),null!=i.strokeOpacity){var f=e.globalAlpha;e.globalAlpha=i.strokeOpacity*i.opacity,e.stroke(),e.globalAlpha=f}else e.stroke()}function ei(t,e){e.image=t}function ii(t,e,i){var n=e.x||0,o=e.y||0,a=e.textAlign,r=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+ri(s[0],i.width),o=i.y+ri(s[1],i.height);else{var l=Ne(s,i,e.textDistance);n=l.x,o=l.y,a=a||l.textAlign,r=r||l.textVerticalAlign}var u=e.textOffset;u&&(n+=u[0],o+=u[1])}return{baseX:n,baseY:o,textAlign:a,textVerticalAlign:r}}function ni(t,e,i){return t[e]=qw(t,e,i),t[e]}function oi(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function ai(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function ri(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function si(t,e,i){return"right"===e?t-i[1]:"center"===e?t+i[3]/2-i[1]/2:t+i[3]}function li(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function ui(t){t=t||{},Gw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new $w(t.style,this),this._rect=null,this.__clipPaths=[]}function hi(t){ui.call(this,t)}function ci(t){return parseInt(t,10)}function di(t){return!!t&&(!!t.__builtin__||"function"==typeof t.resize&&"function"==typeof t.refresh)}function fi(t,e,i){return mb.copy(t.getBoundingRect()),t.transform&&mb.applyTransform(t.transform),vb.width=e,vb.height=i,!mb.intersect(vb)}function pi(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i=i.length&&i.push({option:t})}}),i}function Ni(t){var e=R();Nb(t,function(t,i){var n=t.exist;n&&e.set(n.id,t)}),Nb(t,function(t,i){var n=t.option;k(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Nb(t,function(t,i){var n=t.exist,o=t.option,a=t.keyInfo;if(Ob(o)){if(a.name=null!=o.name?o.name+"":n?n.name:Rb+i,n)a.id=n.id;else if(null!=o.id)a.id=o.id+"";else{var r=0;do{a.id="\0"+a.name+"\0"+r++}while(e.get(a.id))}e.set(a.id,t)}})}function Oi(t){var e=t.name;return!(!e||!e.indexOf(Rb))}function Ei(t){return Ob(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Ri(t,e){function i(t,e,i){for(var n=0,o=t.length;n-qb&&tqb||t<-qb}function Qi(t,e,i,n,o){var a=1-o;return a*a*(a*t+3*o*e)+o*o*(o*n+3*a*i)}function tn(t,e,i,n,o){var a=1-o;return 3*(((e-t)*a+2*(i-e)*o)*a+(n-i)*o*o)}function en(t,e,i,n,o,a){var r=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),u=t-o,h=s*s-3*r*l,c=s*l-9*r*u,d=l*l-3*s*u,f=0;if($i(h)&&$i(c))$i(s)?a[0]=0:(M=-l/s)>=0&&M<=1&&(a[f++]=M);else{var p=c*c-4*h*d;if($i(p)){var g=c/h,m=-g/2;(M=-s/r+g)>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m)}else if(p>0){var v=Yb(p),y=h*s+1.5*r*(-c+v),x=h*s+1.5*r*(-c-v);(M=(-s-((y=y<0?-jb(-y,Jb):jb(y,Jb))+(x=x<0?-jb(-x,Jb):jb(x,Jb))))/(3*r))>=0&&M<=1&&(a[f++]=M)}else{var _=(2*h*s-3*r*c)/(2*Yb(h*h*h)),w=Math.acos(_)/3,b=Yb(h),S=Math.cos(w),M=(-s-2*b*S)/(3*r),m=(-s+b*(S+$b*Math.sin(w)))/(3*r),I=(-s+b*(S-$b*Math.sin(w)))/(3*r);M>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m),I>=0&&I<=1&&(a[f++]=I)}}return f}function nn(t,e,i,n,o){var a=6*i-12*e+6*t,r=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if($i(r))Ji(a)&&(c=-s/a)>=0&&c<=1&&(o[l++]=c);else{var u=a*a-4*r*s;if($i(u))o[0]=-a/(2*r);else if(u>0){var h=Yb(u),c=(-a+h)/(2*r),d=(-a-h)/(2*r);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function on(t,e,i,n,o,a){var r=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,u=(s-r)*o+r,h=(l-s)*o+s,c=(h-u)*o+u;a[0]=t,a[1]=r,a[2]=u,a[3]=c,a[4]=c,a[5]=h,a[6]=l,a[7]=n}function an(t,e,i,n,o,a,r,s,l,u,h){var c,d,f,p,g,m=.005,v=1/0;Qb[0]=l,Qb[1]=u;for(var y=0;y<1;y+=.05)tS[0]=Qi(t,i,o,r,y),tS[1]=Qi(e,n,a,s,y),(p=iw(Qb,tS))=0&&p=0&&c<=1&&(o[l++]=c);else{var u=r*r-4*a*s;if($i(u))(c=-r/(2*a))>=0&&c<=1&&(o[l++]=c);else if(u>0){var h=Yb(u),c=(-r+h)/(2*a),d=(-r-h)/(2*a);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function un(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function hn(t,e,i,n,o){var a=(e-t)*n+t,r=(i-e)*n+e,s=(r-a)*n+a;o[0]=t,o[1]=a,o[2]=s,o[3]=s,o[4]=r,o[5]=i}function cn(t,e,i,n,o,a,r,s,l){var u,h=.005,c=1/0;Qb[0]=r,Qb[1]=s;for(var d=0;d<1;d+=.05)tS[0]=rn(t,i,o,d),tS[1]=rn(e,n,a,d),(m=iw(Qb,tS))=0&&m1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(sS[0]=aS(o)*i+t,sS[1]=oS(o)*n+e,lS[0]=aS(a)*i+t,lS[1]=oS(a)*n+e,u(s,sS,lS),h(l,sS,lS),(o%=rS)<0&&(o+=rS),(a%=rS)<0&&(a+=rS),o>a&&!r?a+=rS:oo&&(uS[0]=aS(f)*i+t,uS[1]=oS(f)*n+e,u(s,uS,s),h(l,uS,l))}function vn(t,e,i,n,o,a,r){if(0===o)return!1;var s=o,l=0,u=t;if(r>e+s&&r>n+s||rt+s&&a>i+s||ae+c&&h>n+c&&h>a+c&&h>s+c||ht+c&&u>i+c&&u>o+c&&u>r+c||ue+u&&l>n+u&&l>a+u||lt+u&&s>i+u&&s>o+u||si||h+uo&&(o+=TS);var d=Math.atan2(l,s);return d<0&&(d+=TS),d>=n&&d<=o||d+TS>=n&&d+TS<=o}function bn(t,e,i,n,o,a){if(a>e&&a>n||ao?r:0}function Sn(t,e){return Math.abs(t-e)e&&u>n&&u>a&&u>s||u1&&Mn(),c=Qi(e,n,a,s,kS[0]),p>1&&(d=Qi(e,n,a,s,kS[1]))),2==p?me&&s>n&&s>a||s=0&&u<=1){for(var h=0,c=rn(e,n,a,u),d=0;di||s<-i)return 0;u=Math.sqrt(i*i-s*s);LS[0]=-u,LS[1]=u;var l=Math.abs(n-o);if(l<1e-4)return 0;if(l%DS<1e-4){n=0,o=DS;p=a?1:-1;return r>=LS[0]+t&&r<=LS[1]+t?p:0}if(a){var u=n;n=_n(o),o=_n(u)}else n=_n(n),o=_n(o);n>o&&(o+=DS);for(var h=0,c=0;c<2;c++){var d=LS[c];if(d+t>r){var f=Math.atan2(s,d),p=a?1:-1;f<0&&(f=DS+f),(f>=n&&f<=o||f+DS>=n&&f+DS<=o)&&(f>Math.PI/2&&f<1.5*Math.PI&&(p=-p),h+=p)}}return h}function Dn(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,u=0,h=0;h1&&(i||(a+=bn(r,s,l,u,n,o))),1==h&&(l=r=t[h],u=s=t[h+1]),c){case AS.M:r=l=t[h++],s=u=t[h++];break;case AS.L:if(i){if(vn(r,s,t[h],t[h+1],e,n,o))return!0}else a+=bn(r,s,t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case AS.C:if(i){if(yn(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=In(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case AS.Q:if(i){if(xn(r,s,t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=Tn(r,s,t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case AS.A:var d=t[h++],f=t[h++],p=t[h++],g=t[h++],m=t[h++],v=t[h++],y=(t[h++],1-t[h++]),x=Math.cos(m)*p+d,_=Math.sin(m)*g+f;h>1?a+=bn(r,s,x,_,n,o):(l=x,u=_);var w=(n-d)*g/p+d;if(i){if(wn(d,f,g,m,m+v,y,e,w,o))return!0}else a+=An(d,f,g,m,m+v,y,w,o);r=Math.cos(m+v)*p+d,s=Math.sin(m+v)*g+f;break;case AS.R:l=r=t[h++],u=s=t[h++];var x=l+t[h++],_=u+t[h++];if(i){if(vn(l,u,x,u,e,n,o)||vn(x,u,x,_,e,n,o)||vn(x,_,l,_,e,n,o)||vn(l,_,l,u,e,n,o))return!0}else a+=bn(x,u,x,_,n,o),a+=bn(l,_,l,u,n,o);break;case AS.Z:if(i){if(vn(r,s,l,u,e,n,o))return!0}else a+=bn(r,s,l,u,n,o);r=l,s=u}}return i||Sn(s,u)||(a+=bn(r,s,l,u,n,o)||0),0!==a}function Cn(t,e,i){return Dn(t,0,!1,e,i)}function Ln(t,e,i,n){return Dn(t,e,!0,i,n)}function kn(t){ui.call(this,t),this.path=null}function Pn(t,e,i,n,o,a,r,s,l,u,h){var c=l*(HS/180),d=WS(c)*(t-i)/2+FS(c)*(e-n)/2,f=-1*FS(c)*(t-i)/2+WS(c)*(e-n)/2,p=d*d/(r*r)+f*f/(s*s);p>1&&(r*=GS(p),s*=GS(p));var g=(o===a?-1:1)*GS((r*r*(s*s)-r*r*(f*f)-s*s*(d*d))/(r*r*(f*f)+s*s*(d*d)))||0,m=g*r*f/s,v=g*-s*d/r,y=(t+i)/2+WS(c)*m-FS(c)*v,x=(e+n)/2+FS(c)*m+WS(c)*v,_=XS([1,0],[(d-m)/r,(f-v)/s]),w=[(d-m)/r,(f-v)/s],b=[(-1*d-m)/r,(-1*f-v)/s],S=XS(w,b);US(w,b)<=-1&&(S=HS),US(w,b)>=1&&(S=0),0===a&&S>0&&(S-=2*HS),1===a&&S<0&&(S+=2*HS),h.addData(u,y,x,r,s,_,S,c,a)}function Nn(t){if(!t)return new MS;for(var e,i=0,n=0,o=i,a=n,r=new MS,s=MS.CMD,l=t.match(jS),u=0;u=2){if(o&&"spline"!==o){var a=iM(n,o,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var r=n.length,s=0;s<(i?r:r-1);s++){var l=a[2*s],u=a[2*s+1],h=n[(s+1)%r];t.bezierCurveTo(l[0],l[1],u[0],u[1],h[0],h[1])}}else{"spline"===o&&(n=eM(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;s=0)?(i={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill="#fff",null==t.textStroke&&(t.textStroke=a,null==t.textStrokeWidth&&(t.textStrokeWidth=2))):null!=a&&(i={textFill:null},t.textFill=a),i&&(t.insideRollback=i)}}function xo(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function _o(t,e){var i=e||e.getModel("textStyle");return P([t.fontStyle||i&&i.getShallow("fontStyle")||"",t.fontWeight||i&&i.getShallow("fontWeight")||"",(t.fontSize||i&&i.getShallow("fontSize")||12)+"px",t.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" "))}function wo(t,e,i,n,o,a){if("function"==typeof o&&(a=o,o=null),n&&n.isAnimationEnabled()){var r=t?"Update":"",s=n.getShallow("animationDuration"+r),l=n.getShallow("animationEasing"+r),u=n.getShallow("animationDelay"+r);"function"==typeof u&&(u=u(o,n.getAnimationDelayParams?n.getAnimationDelayParams(e,o):null)),"function"==typeof s&&(s=s(o)),s>0?e.animateTo(i,s,u||0,l,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function bo(t,e,i,n,o){wo(!0,t,e,i,n,o)}function So(t,e,i,n,o){wo(!1,t,e,i,n,o)}function Mo(t,e){for(var i=vt([]);t&&t!==e;)xt(i,t.getLocalTransform(),i),t=t.parent;return i}function Io(t,e,i){return e&&!c(e)&&(e=mw.getLocalTransform(e)),i&&(e=St([],e)),Q([],t,e)}function To(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return a=Io(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function Ao(t,e,i,n){function o(t){var e={position:F(t.position),rotation:t.rotation};return t.shape&&(e.shape=a({},t.shape)),e}if(t&&e){var r=function(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=r[t.anid];if(e){var n=o(t);t.attr(o(e)),bo(t,n,i,t.dataIndex)}}})}}function Do(t,e){return f(t,function(t){var i=t[0];i=mM(i,e.x),i=vM(i,e.x+e.width);var n=t[1];return n=mM(n,e.y),n=vM(n,e.y+e.height),[i,n]})}function Co(t,e,i){var n=(e=a({rectHover:!0},e)).style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(n.image=t.slice(8),r(n,i),new hi(e)):Wn(t.replace("path://",""),e,i,"center")}function Lo(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function ko(t,e,i){for(var n=0;n0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Ro(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?Oo(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function zo(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Bo(t){return t.sort(function(t,e){return t-e}),t}function Vo(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Go(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var o=e.indexOf(".");return o<0?0:e.length-1-o}function Fo(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),r=Math.min(Math.max(-o+a,0),20);return isFinite(r)?r:20}function Wo(t,e,i){if(!t[e])return 0;var n=p(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var o=Math.pow(10,i),a=f(t,function(t){return(isNaN(t)?0:t)/n*o*100}),r=100*o,s=f(a,function(t){return Math.floor(t)}),l=p(s,function(t,e){return t+e},0),u=f(a,function(t,e){return t-s[e]});lh&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/o}function Ho(t){var e=2*Math.PI;return(t%e+e)%e}function Zo(t){return t>-LM&&t=-20?+t.toFixed(n<0?-n:0):t}function qo(t){function e(t,i,n){return t.interval[n]=0}function $o(t){return isNaN(t)?"-":(t=(t+"").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function Jo(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function Qo(t){return null==t?"":(t+"").replace(EM,function(t,e){return RM[e]})}function ta(t,e,i){y(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:i}}:""}function na(t,e){return t+="","0000".substr(0,e-t.length)+t}function oa(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Uo(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),u=n["get"+o+"Minutes"](),h=n["get"+o+"Seconds"](),c=n["get"+o+"Milliseconds"]();return t=t.replace("MM",na(r,2)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",na(s,2)).replace("d",s).replace("hh",na(l,2)).replace("h",l).replace("mm",na(u,2)).replace("m",u).replace("ss",na(h,2)).replace("s",h).replace("SSS",na(c,3))}function aa(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function ra(t,e,i,n,o){var a=0,r=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var m=f.width+(g?-g.x+f.x:0);(h=a+m)>n||l.newline?(a=0,h=m,r+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);(c=r+v)>o||l.newline?(a+=s+i,r=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=r,"horizontal"===t?a=h+i:r=c+i)})}function sa(t,e,i){var n=e.width,o=e.height,a=Ro(t.x,n),r=Ro(t.y,o),s=Ro(t.x2,n),l=Ro(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=OM(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}function la(t,e,i){i=OM(i||0);var n=e.width,o=e.height,a=Ro(t.left,n),r=Ro(t.top,o),s=Ro(t.right,n),l=Ro(t.bottom,o),u=Ro(t.width,n),h=Ro(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-a),isNaN(h)&&(h=o-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(f>n/o?u=.8*n:h=.8*o),isNaN(u)&&(u=f*h),isNaN(h)&&(h=u/f)),isNaN(a)&&(a=n-s-u-d),isNaN(r)&&(r=o-l-h-c),t.left||t.right){case"center":a=n/2-u/2-i[3];break;case"right":a=n-u-d}switch(t.top||t.bottom){case"middle":case"center":r=o/2-h/2-i[0];break;case"bottom":r=o-h-c}a=a||0,r=r||0,isNaN(u)&&(u=n-d-a-(s||0)),isNaN(h)&&(h=o-c-r-(l||0));var p=new ue(a+i[3],r+i[0],u,h);return p.margin=i,p}function ua(t,e,i,n,o){var a=!o||!o.hv||o.hv[0],s=!o||!o.hv||o.hv[1],l=o&&o.boundingMode||"all";if(a||s){var u;if("raw"===l)u="group"===t.type?new ue(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(u=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(u=u.clone()).applyTransform(h)}e=la(r({width:u.width,height:u.height},e),i,n);var c=t.position,d=a?e.x-u.x:0,f=s?e.y-u.y:0;t.attr("position","raw"===l?[d,f]:[c[0]+d,c[1]+f])}}function ha(t,e){return null!=t[ZM[e][0]]||null!=t[ZM[e][1]]&&null!=t[ZM[e][2]]}function ca(t,e,i){function n(i,n){var r={},l=0,u={},h=0;if(WM(i,function(e){u[e]=t[e]}),WM(i,function(t){o(e,t)&&(r[t]=u[t]=e[t]),a(r,t)&&l++,a(u,t)&&h++}),s[n])return a(e,i[1])?u[i[2]]=null:a(e,i[2])&&(u[i[1]]=null),u;if(2!==h&&l){if(l>=2)return r;for(var c=0;ce)return t[n];return t[i-1]}function ga(t){var e=t.get("coordinateSystem"),i={coordSysName:e,coordSysDims:[],axisMap:R(),categoryAxisMap:R()},n=QM[e];if(n)return n(t,i,i.axisMap,i.categoryAxisMap),i}function ma(t){return"category"===t.get("type")}function va(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===nI?{}:[]),this.sourceFormat=t.sourceFormat||oI,this.seriesLayoutBy=t.seriesLayoutBy||rI,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&R(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}function ya(t){var e=t.option.source,i=oI;if(S(e))i=aI;else if(y(e)){0===e.length&&(i=eI);for(var n=0,o=e.length;n=e:"max"===i?t<=e:t===e}function Ha(t,e){return t.join(",")===e.join(",")}function Za(t,e){fI(e=e||{},function(e,i){if(null!=e){var n=t[i];if(YM.hasClass(i)){e=Di(e);var o=Pi(n=Di(n),e);t[i]=gI(o,function(t){return t.option&&t.exist?mI(t.exist,t.option,!0):t.exist||t.option})}else t[i]=mI(n,e,!0)}})}function Ua(t){var e=t&&t.itemStyle;if(e)for(var i=0,o=_I.length;i=0;p--){var g=t[p];if(s||(d=g.data.rawIndexOf(g.stackedByDimension,c)),d>=0){var m=g.data.getByRawIndex(g.stackResultDimension,d);if(h>=0&&m>0||h<=0&&m<0){h+=m,f=m;break}}}return n[0]=h,n[1]=f,n});r.hostModel.setData(l),e.data=l})}function nr(t,e){va.isInstance(t)||(t=va.seriesDataToSource(t)),this._source=t;var i=this._data=t.data,n=t.sourceFormat;n===aI&&(this._offset=0,this._dimSize=e,this._data=i),a(this,TI[n===eI?n+"_"+t.seriesLayoutBy:n])}function or(){return this._data.length}function ar(t){return this._data[t]}function rr(t){for(var e=0;ee.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function wr(t,e){d(t.CHANGABLE_METHODS,function(i){t.wrapMethod(i,v(br,e))})}function br(t){var e=Sr(t);e&&e.setOutputEnd(this.count())}function Sr(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var o=n.agentStubMap;o&&(n=o.get(t.uid))}return n}}function Mr(){this.group=new Zw,this.uid=No("viewChart"),this.renderTask=dr({plan:Ar,reset:Dr}),this.renderTask.context={view:this}}function Ir(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i=0?n():c=setTimeout(n,-a),u=o};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function Lr(t,e,i,n){var o=t[e];if(o){var a=o[WI]||o,r=o[ZI];if(o[HI]!==i||r!==n){if(null==i||!n)return t[e]=a;(o=t[e]=Cr(a,i,"debounce"===n))[WI]=a,o[ZI]=n,o[HI]=i}return o}}function kr(t,e){var i=t[e];i&&i[WI]&&(t[e]=i[WI])}function Pr(t,e,i,n){this.ecInstance=t,this.api=e,this.unfinished;var i=this._dataProcessorHandlers=i.slice(),n=this._visualHandlers=n.slice();this._allHandlers=i.concat(n),this._stageTaskMap=R()}function Nr(t,e,i,n,o){function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}o=o||{};var r;d(e,function(e,s){if(!o.visualType||o.visualType===e.visualType){var l=t._stageTaskMap.get(e.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,d=h.agentStubMap;d.each(function(t){a(o,t)&&(t.dirty(),c=!0)}),c&&h.dirty(),KI(h,n);var f=t.getPerformArgs(h,o.block);d.each(function(t){t.perform(f)}),r|=h.perform(f)}else u&&u.each(function(s,l){a(o,s)&&s.dirty();var u=t.getPerformArgs(s,o.block);u.skip=!e.performRawSeries&&i.isSeriesFiltered(s.context.model),KI(s,n),r|=s.perform(u)})}}),t.unfinished|=r}function Or(t,e,i,n,o){function a(i){var a=i.uid,s=r.get(a)||r.set(a,dr({plan:Gr,reset:Fr,count:Hr}));s.context={model:i,ecModel:n,api:o,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},Zr(t,i,s)}var r=i.seriesTaskMap||(i.seriesTaskMap=R()),s=e.seriesType,l=e.getTargetSeries;e.createOnAllSeries?n.eachRawSeries(a):s?n.eachRawSeriesByType(s,a):l&&l(n,o).each(a);var u=t._pipelineMap;r.each(function(t,e){u.get(e)||(t.dispose(),r.removeKey(e))})}function Er(t,e,i,n,o){function a(e){var i=e.uid,n=s.get(i);n||(n=s.set(i,dr({reset:zr,onDirty:Vr})),r.dirty()),n.context={model:e,overallProgress:h,modifyOutputEnd:c},n.agent=r,n.__block=h,Zr(t,e,n)}var r=i.overallTask=i.overallTask||dr({reset:Rr});r.context={ecModel:n,api:o,overallReset:e.overallReset,scheduler:t};var s=r.agentStubMap=r.agentStubMap||R(),l=e.seriesType,u=e.getTargetSeries,h=!0,c=e.modifyOutputEnd;l?n.eachRawSeriesByType(l,a):u?u(n,o).each(a):(h=!1,d(n.getSeries(),a));var f=t._pipelineMap;s.each(function(t,e){f.get(e)||(t.dispose(),r.dirty(),s.removeKey(e))})}function Rr(t){t.overallReset(t.ecModel,t.api,t.payload)}function zr(t,e){return t.overallProgress&&Br}function Br(){this.agent.dirty(),this.getDownstream().dirty()}function Vr(){this.agent&&this.agent.dirty()}function Gr(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Fr(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Di(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?f(e,function(t,e){return Wr(e)}):$I}function Wr(t){return function(e,i){var n=i.data,o=i.resetDefines[t];if(o&&o.dataEach)for(var a=e.start;a0?parseInt(n,10)/100:n?parseFloat(n):0;var o=i.getAttribute("stop-color")||"#000000";e.addColorStop(n,o)}i=i.nextSibling}}function Kr(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),r(e.__inheritedStyle,t.__inheritedStyle))}function $r(t){for(var e=P(t).split(rT),i=[],n=0;n0;a-=2){var r=o[a],s=o[a-1];switch(n=n||mt(),s){case"translate":r=P(r).split(rT),_t(n,n,[parseFloat(r[0]),parseFloat(r[1]||0)]);break;case"scale":r=P(r).split(rT),bt(n,n,[parseFloat(r[0]),parseFloat(r[1]||r[0])]);break;case"rotate":r=P(r).split(rT),wt(n,n,parseFloat(r[0]));break;case"skew":r=P(r).split(rT),console.warn("Skew transform is not supported yet");break;case"matrix":r=P(r).split(rT);n[0]=parseFloat(r[0]),n[1]=parseFloat(r[1]),n[2]=parseFloat(r[2]),n[3]=parseFloat(r[3]),n[4]=parseFloat(r[4]),n[5]=parseFloat(r[5])}}}e.setLocalTransform(n)}function es(t){var e=t.getAttribute("style"),i={};if(!e)return i;var n={};dT.lastIndex=0;for(var o;null!=(o=dT.exec(e));)n[o[1]]=o[2];for(var a in uT)uT.hasOwnProperty(a)&&null!=n[a]&&(i[uT[a]]=n[a]);return i}function is(t,e,i){var n=e/t.width,o=i/t.height,a=Math.min(n,o);return{scale:[a,a],position:[-(t.x+t.width/2)*a+e/2,-(t.y+t.height/2)*a+i/2]}}function ns(t,e){return(new Yr).parse(t,e)}function os(t){return function(e,i,n){e=e&&e.toLowerCase(),aw.prototype[t].call(this,e,i,n)}}function as(){aw.call(this)}function rs(t,e,n){function o(t,e){return t.__prio-e.__prio}n=n||{},"string"==typeof e&&(e=BT[e]),this.id,this.group,this._dom=t;var a=this._zr=Ii(t,{renderer:n.renderer||"canvas",devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=Cr(m(a.flush,a),17),(e=i(e))&&MI(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new Ba;var r=this._api=Ms(this);ve(zT,o),ve(OT,o),this._scheduler=new Pr(this,r,OT,zT),aw.call(this,this._ecEventProcessor=new Is),this._messageCenter=new as,this._initEvents(),this.resize=m(this.resize,this),this._pendingActions=[],a.animation.on("frame",this._onframe,this),ps(a,this),N(this)}function ss(t,e,i){var n,o=this._model,a=this._coordSysMgr.getCoordinateSystems();e=Vi(o,e);for(var r=0;re.get("hoverLayerThreshold")&&!z_.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function bs(t,e){var i=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.style.blend!==i&&t.setStyle("blend",i),t.eachPendingDisplayable&&t.eachPendingDisplayable(function(t){t.setStyle("blend",i)})})}function Ss(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function Ms(t){var e=t._coordSysMgr;return a(new za(t),{getCoordinateSystems:m(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Is(){this.eventInfo}function Ts(t){function e(t,e){for(var n=0;n65535?$T:JT}function qs(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function Ks(t,e){d(QT.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods,d(tA,function(n){t[n]=i(e[n])}),t._calculationInfo=a(e._calculationInfo)}function $s(t){var e=t._invertedIndicesMap;d(e,function(i,n){var o=t._dimensionInfos[n].ordinalMeta;if(o){i=e[n]=new $T(o.categories.length);for(a=0;a=0?this._indices[t]:-1}function el(t,e){var i=t._idList[e];return null==i&&(i=Js(t,t._idDimIdx,e)),null==i&&(i=qT+e),i}function il(t){return y(t)||(t=[t]),t}function nl(t,e){var i=t.dimensions,n=new eA(f(i,t.getDimensionInfo,t),t.hostModel);Ks(n,t);for(var o=n._storage={},a=t._storage,r=0;r=0?(o[s]=ol(a[s]),n._rawExtent[s]=al(),n._extent[s]=null):o[s]=a[s])}return n}function ol(t){for(var e=new Array(t.length),i=0;in&&(r=o.interval=n);var s=o.intervalPrecision=_l(r);return bl(o.niceTickExtent=[lA(Math.ceil(t[0]/r)*r,s),lA(Math.floor(t[1]/r)*r,s)],t),o}function _l(t){return Go(t)+2}function wl(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function bl(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),wl(t,0,e),wl(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Sl(t,e,i,n){var o=[];if(!t)return o;e[0]1e4)return[];return e[1]>(o.length?o[o.length-1]:i[1])&&o.push(e[1]),o}function Ml(t){return t.get("stack")||cA+t.seriesIndex}function Il(t){return t.dim+t.index}function Tl(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),o=0;o=0?"p":"n",b=m;p&&(o[r][_]||(o[r][_]={p:m,n:m}),b=o[r][_][w]);var S,M,I,T;if(g)S=b,M=(A=i.dataToPoint([x,_]))[1]+l,I=A[0]-m,T=u,Math.abs(I)a[1]?(n=a[1],o=a[0]):(n=a[0],o=a[1]);var r=e.toGlobalCoord(e.dataToCoord(0));return ro&&(r=o),r}function El(t,e){return SA(t,bA(e))}function Rl(t,e){var i,n,o,a=t.type,r=e.getMin(),s=e.getMax(),l=null!=r,u=null!=s,h=t.getExtent();"ordinal"===a?i=e.getCategories().length:(y(n=e.get("boundaryGap"))||(n=[n||0,n||0]),"boolean"==typeof n[0]&&(n=[0,0]),n[0]=Ro(n[0],1),n[1]=Ro(n[1],1),o=h[1]-h[0]||Math.abs(h[0])),null==r&&(r="ordinal"===a?i?0:NaN:h[0]-n[0]*o),null==s&&(s="ordinal"===a?i?i-1:NaN:h[1]+n[1]*o),"dataMin"===r?r=h[0]:"function"==typeof r&&(r=r({min:h[0],max:h[1]})),"dataMax"===s?s=h[1]:"function"==typeof s&&(s=s({min:h[0],max:h[1]})),(null==r||!isFinite(r))&&(r=NaN),(null==s||!isFinite(s))&&(s=NaN),t.setBlank(I(r)||I(s)||"ordinal"===a&&!t.getOrdinalMeta().categories.length),e.getNeedCrossZero()&&(r>0&&s>0&&!l&&(r=0),r<0&&s<0&&!u&&(s=0));var c=e.ecModel;if(c&&"time"===a){var f,p=Al("bar",c);if(d(p,function(t){f|=t.getBaseAxis()===e.axis}),f){var g=Dl(p),m=zl(r,s,e,g);r=m.min,s=m.max}}return[r,s]}function zl(t,e,i,n){var o=i.axis.getExtent(),a=o[1]-o[0],r=Ll(n,i.axis);if(void 0===r)return{min:t,max:e};var s=1/0;d(r,function(t){s=Math.min(t.offset,s)});var l=-1/0;d(r,function(t){l=Math.max(t.offset+t.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/a)-h;return e+=c*(l/u),t-=c*(s/u),{min:t,max:e}}function Bl(t,e){var i=Rl(t,e),n=null!=e.getMin(),o=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var r=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:o,minInterval:"interval"===r||"time"===r?e.get("minInterval"):null,maxInterval:"interval"===r||"time"===r?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function Vl(t,e){if(e=e||t.get("type"))switch(e){case"category":return new sA(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new hA;default:return(gl.getClass(e)||hA).create(t)}}function Gl(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)}function Fl(t){var e=t.getLabelModel().get("formatter"),i="category"===t.type?t.scale.getExtent()[0]:null;return"string"==typeof e?e=function(e){return function(i){return i=t.scale.getLabel(i),e.replace("{value}",null!=i?i:"")}}(e):"function"==typeof e?function(n,o){return null!=i&&(o=n-i),e(Wl(t,n),o)}:function(e){return t.scale.getLabel(e)}}function Wl(t,e){return"category"===t.type?t.scale.getLabel(e):e}function Hl(t){var e=t.model,i=t.scale;if(e.get("axisLabel.show")&&!i.isBlank()){var n,o,a="category"===t.type,r=i.getExtent();o=a?i.count():(n=i.getTicks()).length;var s,l=t.getLabelModel(),u=Fl(t),h=1;o>40&&(h=Math.ceil(o/40));for(var c=0;c>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}function Jl(t){return"category"===t.type?tu(t):nu(t)}function Ql(t,e){return"category"===t.type?iu(t,e):{ticks:t.scale.getTicks()}}function tu(t){var e=t.getLabelModel(),i=eu(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:i.labelCategoryInterval}:i}function eu(t,e){var i=ou(t,"labels"),n=du(e),o=au(i,n);if(o)return o;var a,r;return a=x(n)?cu(t,n):hu(t,r="auto"===n?su(t):n),ru(i,n,{labels:a,labelCategoryInterval:r})}function iu(t,e){var i=ou(t,"ticks"),n=du(e),o=au(i,n);if(o)return o;var a,r;if(e.get("show")&&!t.scale.isBlank()||(a=[]),x(n))a=cu(t,n,!0);else if("auto"===n){var s=eu(t,t.getLabelModel());r=s.labelCategoryInterval,a=f(s.labels,function(t){return t.tickValue})}else a=hu(t,r=n,!0);return ru(i,n,{ticks:a,tickCategoryInterval:r})}function nu(t){var e=t.scale.getTicks(),i=Fl(t);return{labels:f(e,function(e,n){return{formattedLabel:i(e,n),rawLabel:t.scale.getLabel(e),tickValue:e}})}}function ou(t,e){return FA(t)[e]||(FA(t)[e]=[])}function au(t,e){for(var i=0;i40&&(s=Math.max(1,Math.floor(r/40)));for(var l=a[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(n)),c=Math.abs(u*Math.sin(n)),d=0,f=0;l<=a[1];l+=s){var p=0,g=0,m=De(i(l),e.font,"center","top");p=1.3*m.width,g=1.3*m.height,d=Math.max(d,p,7),f=Math.max(f,g,7)}var v=d/h,y=f/c;isNaN(v)&&(v=1/0),isNaN(y)&&(y=1/0);var x=Math.max(0,Math.floor(Math.min(v,y))),_=FA(t.model),w=_.lastAutoInterval,b=_.lastTickCount;return null!=w&&null!=b&&Math.abs(w-x)<=1&&Math.abs(b-r)<=1&&w>x?x=w:(_.lastTickCount=r,_.lastAutoInterval=x),x}function uu(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function hu(t,e,i){function n(t){l.push(i?t:{formattedLabel:o(t),rawLabel:a.getLabel(t),tickValue:t})}var o=Fl(t),a=t.scale,r=a.getExtent(),s=t.getLabelModel(),l=[],u=Math.max((e||0)+1,1),h=r[0],c=a.count();0!==h&&u>1&&c/u>2&&(h=Math.round(Math.ceil(h/u)*u));var d={min:s.get("showMinLabel"),max:s.get("showMaxLabel")};d.min&&h!==r[0]&&n(r[0]);for(var f=h;f<=r[1];f+=u)n(f);return d.max&&f!==r[1]&&n(r[1]),l}function cu(t,e,i){var n=t.scale,o=Fl(t),a=[];return d(n.getTicks(),function(t){var r=n.getLabel(t);e(t,r)&&a.push(i?t:{formattedLabel:o(t),rawLabel:r,tickValue:t})}),a}function du(t){var e=t.get("interval");return null==e?"auto":e}function fu(t,e){var i=(t[1]-t[0])/e/2;t[0]+=i,t[1]-=i}function pu(t,e,i,n,o){function a(t,e){return h?t>e:t0&&(t.coord-=u/(2*(e+1)))}),s={coord:e[r-1].coord+u},e.push(s)}var h=l[0]>l[1];a(e[0].coord,l[0])&&(o?e[0].coord=l[0]:e.shift()),o&&a(l[0],e[0].coord)&&e.unshift({coord:l[0]}),a(l[1],s.coord)&&(o?s.coord=l[1]:e.pop()),o&&a(s.coord,l[1])&&e.push({coord:l[1]})}}function gu(t,e){var i=t.mapDimension("defaultedLabel",!0),n=i.length;if(1===n)return hr(t,e,i[0]);if(n){for(var o=[],a=0;a0?i=n[0]:n[1]<0&&(i=n[1]),i}function Cu(t,e,i,n){var o=NaN;t.stacked&&(o=i.get(i.getCalculationInfo("stackedOverDimension"),n)),isNaN(o)&&(o=t.valueStart);var a=t.baseDataOffset,r=[];return r[a]=i.get(t.baseDim,n),r[1-a]=o,e.dataToPoint(r)}function Lu(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}function ku(t){return isNaN(t[0])||isNaN(t[1])}function Pu(t,e,i,n,o,a,r,s,l,u,h){return"none"!==u&&u?Nu.apply(this,arguments):Ou.apply(this,arguments)}function Nu(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(ku(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]);else if(l>0){var g=e[c],m="y"===u?1:0,v=(p[m]-g[m])*l;oD(rD,g),rD[m]=g[m]+v,oD(sD,p),sD[m]=p[m]-v,t.bezierCurveTo(rD[0],rD[1],sD[0],sD[1],p[0],p[1])}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Ou(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(ku(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]),oD(rD,p);else if(l>0){var g=d+a,m=e[g];if(h)for(;m&&ku(e[g]);)m=e[g+=a];var v=.5,y=e[c];if(!(m=e[g])||ku(m))oD(sD,p);else{ku(m)&&!h&&(m=p),U(aD,m,y);var x,_;if("x"===u||"y"===u){var w="x"===u?0:1;x=Math.abs(p[w]-y[w]),_=Math.abs(p[w]-m[w])}else x=ew(p,y),_=ew(p,m);nD(sD,p,aD,-l*(1-(v=_/(_+x))))}eD(rD,rD,s),iD(rD,rD,r),eD(sD,sD,s),iD(sD,sD,r),t.bezierCurveTo(rD[0],rD[1],sD[0],sD[1],p[0],p[1]),nD(rD,p,aD,l*v)}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Eu(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var o=0;on[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function Ru(t,e){if(t.length===e.length){for(var i=0;ie[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function Vu(t,e,i){if(!i.valueDim)return[];for(var n=[],o=0,a=e.count();oa[1]&&a.reverse();var r=o.getExtent(),s=Math.PI/180;i&&(a[0]-=.5,a[1]+=.5);var l=new QS({shape:{cx:zo(t.cx,1),cy:zo(t.cy,1),r0:zo(a[0],1),r:zo(a[1],1),startAngle:-r[0]*s,endAngle:-r[1]*s,clockwise:o.inverse}});return e&&(l.shape.endAngle=-r[0]*s,So(l,{shape:{endAngle:-r[1]*s}},n)),l}function Wu(t,e,i,n){return"polar"===t.type?Fu(t,e,i,n):Gu(t,e,i,n)}function Hu(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,a=[],r=0;r=0;a--){var r=i[a].dimension,s=t.dimensions[r],l=t.getDimensionInfo(s);if("x"===(n=l&&l.coordDim)||"y"===n){o=i[a];break}}if(o){var u=e.getAxis(n),h=f(o.stops,function(t){return{coord:u.toGlobalCoord(u.dataToCoord(t.value)),color:t.color}}),c=h.length,p=o.outerColors.slice();c&&h[0].coord>h[c-1].coord&&(h.reverse(),p.reverse());var g=h[0].coord-10,m=h[c-1].coord+10,v=m-g;if(v<.001)return"transparent";d(h,function(t){t.offset=(t.coord-g)/v}),h.push({offset:c?h[c-1].offset:.5,color:p[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:p[0]||"transparent"});var y=new dM(0,0,0,0,h,!0);return y[n]=g,y[n+"2"]=m,y}}}function Uu(t,e,i){var n=t.get("showAllSymbol"),o="auto"===n;if(!n||o){var a=i.getAxesByScale("ordinal")[0];if(a&&(!o||!Xu(a,e))){var r=e.mapDimension(a.dim),s={};return d(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}function Xu(t,e){var i=t.getExtent(),n=Math.abs(i[1]-i[0])/t.scale.count();isNaN(n)&&(n=0);for(var o=e.count(),a=Math.max(1,Math.round(o/5)),r=0;rn)return!1;return!0}function ju(t){return this._axes[t]}function Yu(t){pD.call(this,t)}function qu(t,e){return e.type||(e.data?"category":"value")}function Ku(t,e,i){return t.getCoordSysModel()===e}function $u(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}function Ju(t,e,i,n){function o(t){return t.dim+"_"+t.index}i.getAxesOnZeroOf=function(){return a?[a]:[]};var a,r=t[e],s=i.model,l=s.get("axisLine.onZero"),u=s.get("axisLine.onZeroAxisIndex");if(l){if(null!=u)Qu(r[u])&&(a=r[u]);else for(var h in r)if(r.hasOwnProperty(h)&&Qu(r[h])&&!n[o(r[h])]){a=r[h];break}a&&(n[o(a)]=!0)}}function Qu(t){return t&&"category"!==t.type&&"time"!==t.type&&Gl(t)}function th(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function eh(t,e){return f(SD,function(e){return t.getReferringComponents(e)[0]})}function ih(t){return"cartesian2d"===t.get("coordinateSystem")}function nh(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e}function oh(t,e,i,n){var o,a,r=Ho(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return Zo(r-MD/2)?(a=l?"bottom":"top",o="center"):Zo(r-1.5*MD)?(a=l?"top":"bottom",o="center"):(a="middle",o=r<1.5*MD&&r>MD/2?l?"left":"right":l?"right":"left"),{rotation:r,textAlign:o,textVerticalAlign:a}}function ah(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}function rh(t,e,i){var n=t.get("axisLabel.showMinLabel"),o=t.get("axisLabel.showMaxLabel");e=e||[],i=i||[];var a=e[0],r=e[1],s=e[e.length-1],l=e[e.length-2],u=i[0],h=i[1],c=i[i.length-1],d=i[i.length-2];!1===n?(sh(a),sh(u)):lh(a,r)&&(n?(sh(r),sh(h)):(sh(a),sh(u))),!1===o?(sh(s),sh(c)):lh(l,s)&&(o?(sh(l),sh(d)):(sh(s),sh(c)))}function sh(t){t&&(t.ignore=!0)}function lh(t,e,i){var n=t&&t.getBoundingRect().clone(),o=e&&e.getBoundingRect().clone();if(n&&o){var a=vt([]);return wt(a,a,-t.rotation),n.applyTransform(xt([],a,t.getLocalTransform())),o.applyTransform(xt([],a,e.getLocalTransform())),n.intersect(o)}}function uh(t){return"middle"===t||"center"===t}function hh(t,e,i){var n=e.axis;if(e.get("axisTick.show")&&!n.scale.isBlank()){for(var o=e.getModel("axisTick"),a=o.getModel("lineStyle"),s=o.get("length"),l=n.getTicksCoords(),u=[],h=[],c=t._transform,d=[],f=0;f=0||t===e}function yh(t){var e=xh(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,o=i.option,a=i.get("status"),r=i.get("value");null!=r&&(r=n.parse(r));var s=wh(i);null==a&&(o.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r0?"bottom":"top":o.width>0?"left":"right";l||Th(t.style,d,n,u,a,i,p),uo(t,d)}function kh(t,e){var i=t.get(BD)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function Ph(t,e,i){var n=t.getData(),o=[],a=n.getLayout("valueAxisHorizontal")?1:0;o[1-a]=n.getLayout("valueAxisStart");var r=new FD({shape:{points:n.getLayout("largePoints")},incremental:!!i,__startPoint:o,__valueIdx:a});e.add(r),Nh(r,t,n)}function Nh(t,e,i){var n=i.getVisual("borderColor")||i.getVisual("color"),o=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(o),t.style.fill=null,t.style.stroke=n,t.style.lineWidth=i.getLayout("barWidth")}function Oh(t,e,i,n){var o=e.getData(),a=this.dataIndex,r=o.getName(a),s=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:r,seriesId:e.id}),o.each(function(t){Eh(o.getItemGraphicEl(t),o.getItemLayout(t),e.isSelected(o.getName(t)),s,i)})}function Eh(t,e,i,n,o){var a=(e.startAngle+e.endAngle)/2,r=Math.cos(a),s=Math.sin(a),l=i?n:0,u=[r*l,s*l];o?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function Rh(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}Zw.call(this);var o=new QS({z2:2}),a=new oM,r=new qS;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function zh(t,e,i,n,o,a,r){function s(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function l(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=r&&(d=r-10),!e&&d<=r&&(d=r+10),t[s].x=i+d*a,r=d}}t.sort(function(t,e){return t.y-e.y});for(var u,h=0,c=t.length,d=[],f=[],p=0;pe&&a+1t[a].y+t[a].height)return void s(a,n/2);s(i-1,n/2)}(p,c,-u),h=t[p].y+t[p].height;r-h<0&&s(c-1,h-r);for(p=0;p=i?f.push(t[p]):d.push(t[p]);l(d,!1,e,i,n,o),l(f,!0,e,i,n,o)}function Bh(t,e,i,n,o,a){for(var r=[],s=[],l=0;l1?(f.width=l,f.height=l/c):(f.height=l,f.width=l*c),f.y=s[1]-f.height/2,f.x=s[0]-f.width/2}else(a=t.getBoxLayoutParams()).aspect=c,f=la(a,{width:u,height:h});this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function tc(t,e){d(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}function ec(t,e,i){oc(t)[e]=i}function ic(t,e,i){var n=oc(t);n[e]===i&&(n[e]=null)}function nc(t,e){return!!oc(t)[e]}function oc(t){return t[bC]||(t[bC]={})}function ac(t){this.pointerChecker,this._zr=t,this._opt={};var e=m,n=e(rc,this),o=e(sc,this),a=e(lc,this),s=e(uc,this),l=e(hc,this);aw.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(e,u){this.disable(),this._opt=r(i(u)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==e&&(e=!0),!0!==e&&"move"!==e&&"pan"!==e||(t.on("mousedown",n),t.on("mousemove",o),t.on("mouseup",a)),!0!==e&&"scale"!==e&&"zoom"!==e||(t.on("mousewheel",s),t.on("pinch",l))},this.disable=function(){t.off("mousedown",n),t.off("mousemove",o),t.off("mouseup",a),t.off("mousewheel",s),t.off("pinch",l)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function rc(t){if(!(ct(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function sc(t){if(!ct(t)&&fc("moveOnMouseMove",t,this._opt)&&this._dragging&&"pinch"!==t.gestureEvent&&!nc(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,a=e-n,r=i-o;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&lw(t.event),dc(this,"pan","moveOnMouseMove",t,{dx:a,dy:r,oldX:n,oldY:o,newX:e,newY:i})}}function lc(t){ct(t)||(this._dragging=!1)}function uc(t){var e=fc("zoomOnMouseWheel",t,this._opt),i=fc("moveOnMouseWheel",t,this._opt),n=t.wheelDelta,o=Math.abs(n),a=t.offsetX,r=t.offsetY;if(0!==n&&(e||i)){if(e){var s=o>3?1.4:o>1?1.2:1.1;cc(this,"zoom","zoomOnMouseWheel",t,{scale:n>0?s:1/s,originX:a,originY:r})}if(i){var l=Math.abs(n);cc(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(n>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:a,originY:r})}}}function hc(t){nc(this._zr,"globalPan")||cc(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY})}function cc(t,e,i,n,o){t.pointerChecker&&t.pointerChecker(n,o.originX,o.originY)&&(lw(n.event),dc(t,e,i,n,o))}function dc(t,e,i,n,o){o.isAvailableBehavior=m(fc,null,i,n),t.trigger(e,o)}function fc(t,e,i){var n=i[t];return!t||n&&(!_(n)||e.event[n+"Key"])}function pc(t,e,i){var n=t.target,o=n.position;o[0]+=e,o[1]+=i,n.dirty()}function gc(t,e,i,n){var o=t.target,a=t.zoomLimit,r=o.position,s=o.scale,l=t.zoom=t.zoom||1;if(l*=e,a){var u=a.min||0,h=a.max||1/0;l=Math.max(Math.min(h,l),u)}var c=l/t.zoom;t.zoom=l,r[0]-=(i-r[0])*(c-1),r[1]-=(n-r[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}function mc(t,e,i){var n=e.getComponentByElement(t.topTarget),o=n&&n.coordinateSystem;return n&&n!==i&&!SC[n.mainType]&&o&&o.model!==i}function vc(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(i.fill=n),i}function yc(t,e,i,n,o){i.off("click"),i.off("mousedown"),e.get("selectedMode")&&(i.on("mousedown",function(){t._mouseDownFlag=!0}),i.on("click",function(a){if(t._mouseDownFlag){t._mouseDownFlag=!1;for(var r=a.target;!r.__regions;)r=r.parent;if(r){var s={type:("geo"===e.mainType?"geo":"map")+"ToggleSelect",batch:f(r.__regions,function(t){return{name:t.name,from:o.uid}})};s[e.mainType+"Id"]=e.id,n.dispatchAction(s),xc(e,i)}}}))}function xc(t,e){e.eachChild(function(e){d(e.__regions,function(i){e.trigger(t.isSelected(i.name)?"emphasis":"normal")})})}function _c(t,e){var i=new Zw;this.uid=No("ec_map_draw"),this._controller=new ac(t.getZr()),this._controllerHost={target:e?i:null},this.group=i,this._updateGroup=e,this._mouseDownFlag,this._mapName,this._initialized,i.add(this._regionsGroup=new Zw),i.add(this._backgroundGroup=new Zw)}function wc(t,e,i){var n=t.getZoom(),o=t.getCenter(),a=e.zoom,r=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){r[0]-=e.dx,r[1]-=e.dy;o=t.pointToData(r);t.setCenter(o)}if(null!=a){if(i){var s=i.min||0,l=i.max||1/0;a=Math.max(Math.min(n*a,l),s)/n}t.scale[0]*=a,t.scale[1]*=a;var u=t.position,h=(e.originX-u[0])*(a-1),c=(e.originY-u[1])*(a-1);u[0]-=h,u[1]-=c,t.updateTransform();o=t.pointToData(r);t.setCenter(o),t.setZoom(a*n)}return{center:t.getCenter(),zoom:t.getZoom()}}function bc(t,e){var i={};return d(t,function(t){t.each(t.mapDimension("value"),function(e,n){var o="ec-"+t.getName(n);i[o]=i[o]||[],isNaN(e)||i[o].push(e)})}),t[0].map(t[0].mapDimension("value"),function(n,o){for(var a="ec-"+t[0].getName(o),r=0,s=1/0,l=-1/0,u=i[a].length,h=0;h=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},n.push(a)}}function Oc(t,e){var i=t.isExpand?t.children:[],n=t.parentNode.children,o=t.hierNode.i?n[t.hierNode.i-1]:null;if(i.length){Vc(t);var a=(i[0].hierNode.prelim+i[i.length-1].hierNode.prelim)/2;o?(t.hierNode.prelim=o.hierNode.prelim+e(t,o),t.hierNode.modifier=t.hierNode.prelim-a):t.hierNode.prelim=a}else o&&(t.hierNode.prelim=o.hierNode.prelim+e(t,o));t.parentNode.hierNode.defaultAncestor=Gc(t,o,t.parentNode.hierNode.defaultAncestor||n[0],e)}function Ec(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function Rc(t){return arguments.length?t:Uc}function zc(t,e){var i={};return t-=Math.PI/2,i.x=e*Math.cos(t),i.y=e*Math.sin(t),i}function Bc(t,e){return la(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Vc(t){for(var e=t.children,i=e.length,n=0,o=0;--i>=0;){var a=e[i];a.hierNode.prelim+=n,a.hierNode.modifier+=n,o+=a.hierNode.change,n+=a.hierNode.shift+o}}function Gc(t,e,i,n){if(e){for(var o=t,a=t,r=a.parentNode.children[0],s=e,l=o.hierNode.modifier,u=a.hierNode.modifier,h=r.hierNode.modifier,c=s.hierNode.modifier;s=Fc(s),a=Wc(a),s&&a;){o=Fc(o),r=Wc(r),o.hierNode.ancestor=t;var d=s.hierNode.prelim+c-a.hierNode.prelim-u+n(s,a);d>0&&(Zc(Hc(s,t,i),t,d),u+=d,l+=d),c+=s.hierNode.modifier,u+=a.hierNode.modifier,l+=o.hierNode.modifier,h+=r.hierNode.modifier}s&&!Fc(o)&&(o.hierNode.thread=s,o.hierNode.modifier+=c-l),a&&!Wc(r)&&(r.hierNode.thread=a,r.hierNode.modifier+=u-h,i=t)}return i}function Fc(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function Wc(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function Hc(t,e,i){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:i}function Zc(t,e,i){var n=i/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=n,e.hierNode.shift+=i,e.hierNode.modifier+=i,e.hierNode.prelim+=i,t.hierNode.change+=n}function Uc(t,e){return t.parentNode===e.parentNode?1:2}function Xc(t,e){var i=t.getItemLayout(e);return i&&!isNaN(i.x)&&!isNaN(i.y)&&"none"!==t.getItemVisual(e,"symbol")}function jc(t,e,i){return i.itemModel=e,i.itemStyle=e.getModel("itemStyle").getItemStyle(),i.hoverItemStyle=e.getModel("emphasis.itemStyle").getItemStyle(),i.lineStyle=e.getModel("lineStyle").getLineStyle(),i.labelModel=e.getModel("label"),i.hoverLabelModel=e.getModel("emphasis.label"),!1===t.isExpand&&0!==t.children.length?i.symbolInnerColor=i.itemStyle.fill:i.symbolInnerColor="#fff",i}function Yc(t,e,i,n,o,a){var s=!i,l=t.tree.getNodeByDataIndex(e),a=jc(l,l.getModel(),a),u=t.tree.root,h=l.parentNode===u?l:l.parentNode||l,c=t.getItemGraphicEl(h.dataIndex),d=h.getLayout(),f=c?{x:c.position[0],y:c.position[1],rawX:c.__radialOldRawX,rawY:c.__radialOldRawY}:d,p=l.getLayout();s?(i=new mu(t,e,a)).attr("position",[f.x,f.y]):i.updateData(t,e,a),i.__radialOldRawX=i.__radialRawX,i.__radialOldRawY=i.__radialRawY,i.__radialRawX=p.rawX,i.__radialRawY=p.rawY,n.add(i),t.setItemGraphicEl(e,i),bo(i,{position:[p.x,p.y]},o);var g=i.getSymbolPath();if("radial"===a.layout){var m,v,y=u.children[0],x=y.getLayout(),_=y.children.length;if(p.x===x.x&&!0===l.isExpand){var w={};w.x=(y.children[0].getLayout().x+y.children[_-1].getLayout().x)/2,w.y=(y.children[0].getLayout().y+y.children[_-1].getLayout().y)/2,(m=Math.atan2(w.y-x.y,w.x-x.x))<0&&(m=2*Math.PI+m),(v=w.xx.x)||(m-=Math.PI);var b=v?"left":"right";g.setStyle({textPosition:b,textRotation:-m,textOrigin:"center",verticalAlign:"middle"})}if(l.parentNode&&l.parentNode!==u){var S=i.__edge;S||(S=i.__edge=new lM({shape:Kc(a,f,f),style:r({opacity:0,strokeNoScale:!0},a.lineStyle)})),bo(S,{shape:Kc(a,d,p),style:{opacity:1}},o),n.add(S)}}function qc(t,e,i,n,o,a){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,a=jc(s,s.getModel(),a),u=s.parentNode===l?s:s.parentNode||s;null==(r=u.getLayout());)u=u.parentNode===l?u:u.parentNode||u;bo(i,{position:[r.x+1,r.y+1]},o,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var h=i.__edge;h&&bo(h,{shape:Kc(a,r,r),style:{opacity:0}},o,function(){n.remove(h)})}function Kc(t,e,i){var n,o,a,r,s,l,u,h,c=t.orient;if("radial"===t.layout){s=e.rawX,u=e.rawY,l=i.rawX,h=i.rawY;var d=zc(s,u),f=zc(s,u+(h-u)*t.curvature),p=zc(l,h+(u-h)*t.curvature),g=zc(l,h);return{x1:d.x,y1:d.y,x2:g.x,y2:g.y,cpx1:f.x,cpy1:f.y,cpx2:p.x,cpy2:p.y}}return s=e.x,u=e.y,l=i.x,h=i.y,"LR"!==c&&"RL"!==c||(n=s+(l-s)*t.curvature,o=u,a=l+(s-l)*t.curvature,r=h),"TB"!==c&&"BT"!==c||(n=s,o=u+(h-u)*t.curvature,a=l,r=h+(u-h)*t.curvature),{x1:s,y1:u,x2:l,y2:h,cpx1:n,cpy1:o,cpx2:a,cpy2:r}}function $c(t,e,i){for(var n,o=[t],a=[];n=o.pop();)if(a.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;s=0;a--)n.push(o[a])}}function Qc(t,e){var i=Bc(t,e);t.layoutInfo=i;var n=t.get("layout"),o=0,a=0,r=null;"radial"===n?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,r=Rc(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,r=Rc());var s=t.getData().tree.root,l=s.children[0];if(l){Nc(s),$c(l,Oc,r),s.hierNode.modifier=-l.hierNode.prelim,Jc(l,Ec);var u=l,h=l,c=l;Jc(l,function(t){var e=t.getLayout().x;eh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Jc(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=zc(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=a/(h.getLayout().x+d+f),p=o/(c.depth-1||1),Jc(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:o-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Jc(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:a-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}function td(t,e,i){if(t&&l(e,t.type)>=0){var n=i.getData().tree.root,o=t.targetNode;if("string"==typeof o&&(o=n.getNodeById(o)),o&&n.contains(o))return{node:o};var a=t.targetNodeId;if(null!=a&&(o=n.getNodeById(a)))return{node:o}}}function ed(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function id(t,e){return l(ed(t),e)>=0}function nd(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}function od(t){var e=0;d(t.children,function(t){od(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function ad(t,e){var i=e.get("color");if(i){var n;return d(t=t||[],function(t){var e=new Lo(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),n||((t[0]||(t[0]={})).color=i.slice()),t}}function rd(t){this.group=new Zw,t.add(this.group)}function sd(t,e,i,n,o,a){var r=[[o?t:t-DC,e],[t+i,e],[t+i,e+n],[o?t:t-DC,e+n]];return!a&&r.splice(2,0,[t+i+DC,e+n/2]),!o&&r.push([t,e+n/2]),r}function ld(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&nd(i,e)}}function ud(){var t,e=[],i={};return{add:function(t,n,o,a,r){return _(a)&&(r=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:o,delay:a,easing:r}),!0)},done:function(e){return t=e,this},start:function(){for(var n=e.length,o=0,a=e.length;o=0;a--)null==i[a]&&(delete n[e[a]],e.pop())}function pd(t,e){var i=t.visual,n=[];w(i)?ZC(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),bd(t,n)}function gd(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:_d([0,1])}}function md(t){var e=this.option.visual;return e[Math.round(Eo(t,[0,1],[0,e.length-1],!0))]||{}}function vd(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function yd(t){var e=this.option.visual;return e[this.option.loop&&t!==XC?t%e.length:t]}function xd(){return this.option.visual[0]}function _d(t){return{linear:function(e){return Eo(e,t,this.option.visual,!0)},category:yd,piecewise:function(e,i){var n=wd.call(this,i);return null==n&&(n=Eo(e,t,this.option.visual,!0)),n},fixed:xd}}function wd(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=i[jC.findPieceIndex(t,i)];if(n&&n.visual)return n.visual[this.type]}}function bd(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=f(e,function(t){return zt(t)})),e}function Sd(t,e,i){return t?e<=i:e=o.length||t===o[t.depth])&&Md(t,kd(r,h,t,e,g,a),i,n,o,a)})}else l=Td(h),t.setVisual("color",l)}}function Id(t,e,i,n){var o=a({},e);return d(["color","colorAlpha","colorSaturation"],function(a){var r=t.get(a,!0);null==r&&i&&(r=i[a]),null==r&&(r=e[a]),null==r&&(r=n.get(a)),null!=r&&(o[a]=r)}),o}function Td(t){var e=Dd(t,"color");if(e){var i=Dd(t,"colorAlpha"),n=Dd(t,"colorSaturation");return n&&(e=Zt(e,null,null,n)),i&&(e=Ut(e,i)),e}}function Ad(t,e){return null!=e?Zt(e,null,null,t):null}function Dd(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function Cd(t,e,i,n,o,a){if(a&&a.length){var r=Ld(e,"color")||null!=o.color&&"none"!==o.color&&(Ld(e,"colorAlpha")||Ld(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new jC(c);return d.__drColorMappingBy=h,d}}}function Ld(t,e){var i=t.get(e);return KC(i)&&i.length?{name:e,range:i}:null}function kd(t,e,i,n,o,r){var s=a({},e);if(o){var l=o.type,u="color"===l&&o.__drColorMappingBy,h="index"===u?n:"id"===u?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));s[l]=o.mapValueToVisual(h)}return s}function Pd(t,e,i,n){var o,a;if(!t.isRemoved()){var r=t.getLayout();o=r.width,a=r.height;var s=(f=t.getModel()).get(nL),l=f.get(oL)/2,u=Wd(f),h=Math.max(s,u),c=s-l,d=h-l,f=t.getModel();t.setLayout({borderWidth:s,upperHeight:h,upperLabelHeight:u},!0);var p=(o=QC(o-2*c,0))*(a=QC(a-c-d,0)),g=Nd(t,f,p,e,i,n);if(g.length){var m={x:c,y:d,width:o,height:a},v=tL(o,a),y=1/0,x=[];x.area=0;for(var _=0,w=g.length;_=0;l--){var u=o["asc"===n?r-l-1:l].getValue();u/i*es[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}function zd(t,e,i){for(var n,o=0,a=1/0,r=0,s=t.length;ro&&(o=n));var l=t.area*t.area,u=e*e*i;return l?QC(u*o/l,l/(u*a)):1/0}function Bd(t,e,i,n,o){var a=e===i.width?0:1,r=1-a,s=["x","y"],l=["width","height"],u=i[s[a]],h=e?t.area/e:0;(o||h>i[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;ckM&&(u=kM),a=s}u=0?n+=u:n-=u:p>=0?n-=u:n+=u}return n}function rf(t,e){return t.getVisual("opacity")||t.getModel().get(e)}function sf(t,e,i){var n=t.getGraphicEl(),o=rf(t,e);null!=i&&(null==o&&(o=1),o*=i),n.downplay&&n.downplay(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",o)})}function lf(t,e){var i=rf(t,e),n=t.getGraphicEl();n.highlight&&n.highlight(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",i)})}function uf(t){return t instanceof Array||(t=[t,t]),t}function hf(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),cf(i)}}function cf(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.curveness")||0,i=F(t.node1.getLayout()),n=F(t.node2.getLayout()),o=[i,n];+e&&o.push([(i[0]+n[0])/2-(i[1]-n[1])*e,(i[1]+n[1])/2-(n[0]-i[0])*e]),t.setLayout(o)})}function df(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),n=t.getData(),o=n.graph,a=0,r=n.getSum("value"),s=2*Math.PI/(r||n.count()),l=i.width/2+i.x,u=i.height/2+i.y,h=Math.min(i.width,i.height)/2;o.eachNode(function(t){var e=t.getValue("value");a+=s*(r?e:1)/2,t.setLayout([h*Math.cos(a)+l,h*Math.sin(a)+u]),a+=s*(r?e:1)/2}),n.setLayout({cx:l,cy:u}),o.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.curveness")||0,n=F(t.node1.getLayout()),o=F(t.node2.getLayout()),a=(n[0]+o[0])/2,r=(n[1]+o[1])/2;+i&&(e=[l*(i*=3)+a*(1-i),u*i+r*(1-i)]),t.setLayout([n,o,e])})}}function ff(t,e,i){for(var n=i.rect,o=n.width,a=n.height,r=[n.x+o/2,n.y+a/2],s=null==i.gravity?.1:i.gravity,l=0;l0?-1:i<0?1:e?-1:1}}function Mf(t,e){return Math.min(e[1],Math.max(e[0],t))}function If(t,e,i){this._axesMap=R(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}function Tf(t,e){return zL(BL(t,e[0]),e[1])}function Af(t,e){var i=e.layoutLength/(e.axisCount-1);return{position:i*t,axisNameAvailableWidth:i,axisLabelShow:!0}}function Df(t,e){var i,n,o=e.layoutLength,a=e.axisExpandWidth,r=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,h=!1;return tJL}function Hf(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function Zf(t,e,i,n){var o=new Zw;return o.add(new aM({name:"main",style:Yf(i),silent:!0,draggable:!0,cursor:"move",drift:UL(t,e,o,"nswe"),ondragend:UL(Ff,e,{isEnd:!0})})),XL(n,function(i){o.add(new aM({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:UL(t,e,o,i),ondragend:UL(Ff,e,{isEnd:!0})}))}),o}function Uf(t,e,i,n){var o=n.brushStyle.lineWidth||0,a=qL(o,QL),r=i[0][0],s=i[1][0],l=r-o/2,u=s-o/2,h=i[0][1],c=i[1][1],d=h-a+o/2,f=c-a+o/2,p=h-r,g=c-s,m=p+o,v=g+o;jf(t,e,"main",r,s,p,g),n.transformable&&(jf(t,e,"w",l,u,a,v),jf(t,e,"e",d,u,a,v),jf(t,e,"n",l,u,m,a),jf(t,e,"s",l,f,m,a),jf(t,e,"nw",l,u,a,a),jf(t,e,"ne",d,u,a,a),jf(t,e,"sw",l,f,a,a),jf(t,e,"se",d,f,a,a))}function Xf(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(Yf(i)),o.attr({silent:!n,cursor:n?"move":"default"}),XL(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),a=$f(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?ik[a]+"-resize":null})})}function jf(t,e,i,n,o,a,r){var s=e.childOfName(i);s&&s.setShape(ip(ep(t,e,[[n,o],[n+a,o+r]])))}function Yf(t){return r({strokeNoScale:!0},t.brushStyle)}function qf(t,e,i,n){var o=[YL(t,i),YL(e,n)],a=[qL(t,i),qL(e,n)];return[[o[0],a[0]],[o[1],a[1]]]}function Kf(t){return Mo(t.group)}function $f(t,e){if(e.length>1)return("e"===(n=[$f(t,(e=e.split(""))[0]),$f(t,e[1])])[0]||"w"===n[0])&&n.reverse(),n.join("");var i={left:"w",right:"e",top:"n",bottom:"s"},n=To({w:"left",e:"right",n:"top",s:"bottom"}[e],Kf(t));return i[n]}function Jf(t,e,i,n,o,a,r,s){var l=n.__brushOption,u=t(l.range),h=tp(i,a,r);XL(o.split(""),function(t){var e=ek[t];u[e[0]][e[1]]+=h[e[0]]}),l.range=e(qf(u[0][0],u[1][0],u[0][1],u[1][1])),Rf(i,n),Ff(i,{isEnd:!1})}function Qf(t,e,i,n,o){var a=e.__brushOption.range,r=tp(t,i,n);XL(a,function(t){t[0]+=r[0],t[1]+=r[1]}),Rf(t,e),Ff(t,{isEnd:!1})}function tp(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),a=n.transformCoordToLocal(0,0);return[o[0]-a[0],o[1]-a[1]]}function ep(t,e,n){var o=Vf(t,e);return o&&!0!==o?o.clipPath(n,t._transform):i(n)}function ip(t){var e=YL(t[0][0],t[1][0]),i=YL(t[0][1],t[1][1]);return{x:e,y:i,width:qL(t[0][0],t[1][0])-e,height:qL(t[0][1],t[1][1])-i}}function np(t,e,i){if(t._brushType){var n=t._zr,o=t._covers,a=Bf(t,e,i);if(!t._dragging)for(var r=0;r=i.length)return e;for(var o=-1,a=e.length,r=i[n++],s={},l={};++o=i.length)return t;var a=[],r=n[o++];return d(t,function(t,i){a.push({key:i,values:e(t,o)})}),r?a.sort(function(t,e){return r(t.key,e.key)}):a}var i=[],n=[];return{key:function(t){return i.push(t),this},sortKeys:function(t){return n[i.length-1]=t,this},entries:function(i){return e(t(i,0),0)}}}function kp(t,e){return la(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Pp(t,e,i,n,o,a,r,s){Op(t,e,i,o,a,s),zp(t,e,a,o,n,r,s),Yp(t,s)}function Np(t){d(t,function(t){var e=Xp(t.outEdges,Up),i=Xp(t.inEdges,Up),n=Math.max(e,i);t.setLayout({value:n},!0)})}function Op(t,e,i,n,o,a){for(var r=[],s=[],l=[],u=[],h=0,c=0;c0;a--)Fp(s,l*=.99,r),Gp(s,o,i,n,r),jp(s,l,r),Gp(s,o,i,n,r)}function Bp(t){return"vertical"===t?function(t){return t.getLayout().y}:function(t){return t.getLayout().x}}function Vp(t,e,i,n,o,a,r){var s=[];d(e,function(t){var e=t.length,i=0,l=0;d(t,function(t){i+=t.getLayout().value}),l="vertical"===r?(o-(e-1)*a)/i:(n-(e-1)*a)/i,s.push(l)}),s.sort(function(t,e){return t-e});var l=s[0];d(e,function(t){d(t,function(t,e){var i=t.getLayout().value*l;"vertical"===r?(t.setLayout({x:e},!0),t.setLayout({dx:i},!0)):(t.setLayout({y:e},!0),t.setLayout({dy:i},!0))})}),d(i,function(t){var e=+t.getValue()*l;t.setLayout({dy:e},!0)})}function Gp(t,e,i,n,o){d(t,function(t){var a,r,s,l=0,u=t.length;if("vertical"===o){var h;for(t.sort(function(t,e){return t.getLayout().x-e.getLayout().x}),s=0;s0&&(h=a.getLayout().x+r,a.setLayout({x:h},!0)),l=a.getLayout().x+a.getLayout().dx+e;if((r=l-e-n)>0)for(h=a.getLayout().x-r,a.setLayout({x:h},!0),l=h,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().x+a.getLayout().dx+e-l)>0&&(h=a.getLayout().x-r,a.setLayout({x:h},!0)),l=a.getLayout().x}else{var c;for(t.sort(function(t,e){return t.getLayout().y-e.getLayout().y}),s=0;s0&&(c=a.getLayout().y+r,a.setLayout({y:c},!0)),l=a.getLayout().y+a.getLayout().dy+e;if((r=l-e-i)>0)for(c=a.getLayout().y-r,a.setLayout({y:c},!0),l=c,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().y+a.getLayout().dy+e-l)>0&&(c=a.getLayout().y-r,a.setLayout({y:c},!0)),l=a.getLayout().y}})}function Fp(t,e,i){d(t.slice().reverse(),function(t){d(t,function(t){if(t.outEdges.length){var n=Xp(t.outEdges,Wp,i)/Xp(t.outEdges,Up,i);if("vertical"===i){var o=t.getLayout().x+(n-Zp(t,i))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(n-Zp(t,i))*e;t.setLayout({y:a},!0)}}})})}function Wp(t,e){return Zp(t.node2,e)*t.getValue()}function Hp(t,e){return Zp(t.node1,e)*t.getValue()}function Zp(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function Up(t){return t.getValue()}function Xp(t,e,i){for(var n=0,o=t.length,a=-1;++a0?"P":"N",a=n.getVisual("borderColor"+o)||n.getVisual("color"+o),r=i.getModel(bk).getItemStyle(Mk);e.useStyle(r),e.style.fill=null,e.style.stroke=a}function rg(t,e,i,n,o){return i>n?-1:i0?t.get(o,e-1)<=n?1:-1:1}function sg(t,e){var i,n=t.getBaseAxis(),o="category"===n.type?n.getBandWidth():(i=n.getExtent(),Math.abs(i[1]-i[0])/e.count()),a=Ro(A(t.get("barMaxWidth"),o),o),r=Ro(A(t.get("barMinWidth"),1),o),s=t.get("barWidth");return null!=s?Ro(s,o):Math.max(Math.min(o/2,a),r)}function lg(t){return y(t)||(t=[+t,+t]),t}function ug(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function hg(t,e){Zw.call(this);var i=new mu(t,e),n=new Zw;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}function cg(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=f(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),o([e,t[0],t[1]])}))}function dg(t,e,i){Zw.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}function fg(t,e,i){Zw.call(this),this._createPolyline(t,e,i)}function pg(t,e,i){dg.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}function gg(){this.group=new Zw}function mg(t){return t instanceof Array||(t=[t,t]),t}function vg(){var t=Y_();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}function yg(t,e,i){var n=t[1]-t[0],o=(e=f(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}})).length,a=0;return function(t){for(n=a;n=0;n--){var r=e[n].interval;if(r[0]<=t&&t<=r[1]){a=n;break}}return n>=0&&n=e[0]&&t<=e[1]}}function _g(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}function wg(t,e,i,n){var o=t.getItemLayout(e),a=i.get("symbolRepeat"),r=i.get("symbolClip"),s=i.get("symbolPosition")||"start",l=(i.get("symbolRotate")||0)*Math.PI/180||0,u=i.get("symbolPatternSize")||2,h=i.isAnimationEnabled(),c={dataIndex:e,layout:o,itemModel:i,symbolType:t.getItemVisual(e,"symbol")||"circle",color:t.getItemVisual(e,"color"),symbolClip:r,symbolRepeat:a,symbolRepeatDirection:i.get("symbolRepeatDirection"),symbolPatternSize:u,rotation:l,animationModel:h?i:null,hoverAnimation:h&&i.get("hoverAnimation"),z2:i.getShallow("z",!0)||0};bg(i,a,o,n,c),Mg(t,e,o,a,r,c.boundingLength,c.pxSign,u,n,c),Ig(i,c.symbolScale,l,n,c);var d=c.symbolSize,f=i.get("symbolOffset");return y(f)&&(f=[Ro(f[0],d[0]),Ro(f[1],d[1])]),Tg(i,d,o,a,r,f,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,n,c),c}function bg(t,e,i,n,o){var a,r=n.valueDim,s=t.get("symbolBoundingData"),l=n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),u=l.toGlobalCoord(l.dataToCoord(0)),h=1-+(i[r.wh]<=0);if(y(s)){var c=[Sg(l,s[0])-u,Sg(l,s[1])-u];c[1]0?1:a<0?-1:0}function Sg(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function Mg(t,e,i,n,o,a,r,s,l,u){var h=l.valueDim,c=l.categoryDim,d=Math.abs(i[c.wh]),f=t.getItemVisual(e,"symbolSize");y(f)?f=f.slice():(null==f&&(f="100%"),f=[f,f]),f[c.index]=Ro(f[c.index],d),f[h.index]=Ro(f[h.index],n?d:Math.abs(a)),u.symbolSize=f,(u.symbolScale=[f[0]/s,f[1]/s])[h.index]*=(l.isHorizontal?-1:1)*r}function Ig(t,e,i,n,o){var a=t.get(jk)||0;a&&(qk.attr({scale:e.slice(),rotation:i}),qk.updateTransform(),a/=qk.getLineScale(),a*=e[n.valueDim.index]),o.valueLineWidth=a}function Tg(t,e,i,n,o,r,s,l,u,h,c,d){var f=c.categoryDim,p=c.valueDim,g=d.pxSign,m=Math.max(e[p.index]+l,0),v=m;if(n){var y=Math.abs(u),x=T(t.get("symbolMargin"),"15%")+"",_=!1;x.lastIndexOf("!")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=Ro(x,e[p.index]);var w=Math.max(m+2*x,0),b=_?0:2*x,S=Ko(n),M=S?n:Hg((y+b)/w);w=m+2*(x=(y-M*m)/2/(_?M:M-1)),b=_?0:2*x,S||"fixed"===n||(M=h?Hg((Math.abs(h)+b)/w):0),v=M*w-b,d.repeatTimes=M,d.symbolMargin=x}var I=g*(v/2),A=d.pathPosition=[];A[f.index]=i[f.wh]/2,A[p.index]="start"===s?I:"end"===s?u-I:u/2,r&&(A[0]+=r[0],A[1]+=r[1]);var D=d.bundlePosition=[];D[f.index]=i[f.xy],D[p.index]=i[p.xy];var C=d.barRectShape=a({},i);C[p.wh]=g*Math.max(Math.abs(i[p.wh]),Math.abs(A[p.index]+I)),C[f.wh]=i[f.wh];var L=d.clipShape={};L[f.xy]=-i[f.xy],L[f.wh]=c.ecSize[f.wh],L[p.xy]=0,L[p.wh]=i[p.wh]}function Ag(t){var e=t.symbolPatternSize,i=Xl(t.symbolType,-e/2,-e/2,e,e,t.color);return i.attr({culling:!0}),"image"!==i.type&&i.setStyle({strokeNoScale:!0}),i}function Dg(t,e,i,n){function o(t){var e=l.slice(),n=i.pxSign,o=t;return("start"===i.symbolRepeatDirection?n>0:n<0)&&(o=h-1-t),e[u.index]=d*(o-h/2+.5)+l[u.index],{position:e,scale:i.symbolScale.slice(),rotation:i.rotation}}var a=t.__pictorialBundle,r=i.symbolSize,s=i.valueLineWidth,l=i.pathPosition,u=e.valueDim,h=i.repeatTimes||0,c=0,d=r[e.valueDim.index]+s+2*i.symbolMargin;for(Gg(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=h,c0)],d=t.__pictorialBarRect;Th(d.style,h,a,n,e.seriesModel,o,c),uo(d,h)}function Hg(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}function Zg(t,e,i){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(t,e,i),this.model=t}function Ug(t,e){e=e||{};var i=t.coordinateSystem,n=t.axis,o={},a=n.position,r=n.orient,s=i.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],u={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};o.position=["vertical"===r?u.vertical[a]:l[0],"horizontal"===r?u.horizontal[a]:l[3]];var h={horizontal:0,vertical:1};o.rotation=Math.PI/2*h[r];var c={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=c[a],t.get("axisTick.inside")&&(o.tickDirection=-o.tickDirection),T(e.labelInside,t.get("axisLabel.inside"))&&(o.labelDirection=-o.labelDirection);var d=e.rotate;return null==d&&(d=t.get("axisLabel.rotate")),o.labelRotation="top"===a?-d:d,o.z2=1,o}function Xg(t,e,i,n,o){var r=t.axis;if(!r.scale.isBlank()&&r.containData(e))if(t.involveSeries){var s=jg(e,t),l=s.payloadBatch,u=s.snapToValue;l[0]&&null==o.seriesIndex&&a(o,l[0]),!n&&t.snap&&r.containData(u)&&null!=u&&(e=u),i.showPointer(t,e,l,o),i.showTooltip(t,s,u)}else i.showPointer(t,e)}function jg(t,e){var i=e.axis,n=i.dim,o=t,a=[],r=Number.MAX_VALUE,s=-1;return iP(e.seriesModels,function(e,l){var u,h,c=e.getData().mapDimension(n,!0);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(c,t,i);h=d.dataIndices,u=d.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===i.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var f=t-u,p=Math.abs(f);p<=r&&((p=0&&s<0)&&(r=p,s=f,o=u,a.length=0),iP(h,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:o}}function Yg(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function qg(t,e,i,n){var o=i.payloadBatch,a=e.axis,r=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&o.length){var l=e.coordSys.model,u=bh(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:a.dim,axisIndex:r.componentIndex,axisType:r.type,axisId:r.id,value:n,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:o.slice()})}}function Kg(t,e,i){var n=i.axesInfo=[];iP(e,function(e,i){var o=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(o.status="show"),o.value=a.value,o.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(o.status="hide"),"show"===o.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:o.value})})}function $g(t,e,i,n){if(!em(e)&&t.list.length){var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}else n({type:"hideTip"})}function Jg(t,e,i){var n=i.getZr(),o=oP(n).axisPointerLastHighlights||{},a=oP(n).axisPointerLastHighlights={};iP(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&iP(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t})});var r=[],s=[];d(o,function(t,e){!a[e]&&s.push(t)}),d(a,function(t,e){!o[e]&&r.push(t)}),s.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:s}),r.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:r})}function Qg(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function tm(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+"AxisIndex"]=e.componentIndex,i.axisName=i[n+"AxisName"]=e.name,i.axisId=i[n+"AxisId"]=e.id,i}function em(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function im(t,e,i){if(!z_.node){var n=e.getZr();aP(n).records||(aP(n).records={}),nm(n,e),(aP(n).records[t]||(aP(n).records[t]={})).handler=i}}function nm(t,e){function i(i,n){t.on(i,function(i){var o=sm(e);rP(aP(t).records,function(t){t&&n(t,i,o.dispatchAction)}),om(o.pendings,e)})}aP(t).initialized||(aP(t).initialized=!0,i("click",v(rm,"click")),i("mousemove",v(rm,"mousemove")),i("globalout",am))}function om(t,e){var i,n=t.showTip.length,o=t.hideTip.length;n?i=t.showTip[n-1]:o&&(i=t.hideTip[o-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function am(t,e,i){t.handler("leave",null,i)}function rm(t,e,i,n){e.handler(t,i,n)}function sm(t){var e={showTip:[],hideTip:[]},i=function(n){var o=e[n.type];o?o.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function lm(t,e){if(!z_.node){var i=e.getZr();(aP(i).records||{})[t]&&(aP(i).records[t]=null)}}function um(){}function hm(t,e,i,n){cm(lP(i).lastProp,n)||(lP(i).lastProp=n,e?bo(i,n,t):(i.stopAnimation(),i.attr(n)))}function cm(t,e){if(w(t)&&w(e)){var i=!0;return d(e,function(e,n){i=i&&cm(t[n],e)}),!!i}return t===e}function dm(t,e){t[e.get("label.show")?"show":"hide"]()}function fm(t){return{position:t.position.slice(),rotation:t.rotation||0}}function pm(t,e,i){var n=e.get("z"),o=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=o&&(t.zlevel=o),t.silent=i)})}function gm(t){var e,i=t.get("type"),n=t.getModel(i+"Style");return"line"===i?(e=n.getLineStyle()).fill=null:"shadow"===i&&((e=n.getAreaStyle()).stroke=null),e}function mm(t,e,i,n,o){var a=ym(i.get("value"),e.axis,e.ecModel,i.get("seriesDataIndices"),{precision:i.get("label.precision"),formatter:i.get("label.formatter")}),r=i.getModel("label"),s=OM(r.get("padding")||0),l=r.getFont(),u=De(a,l),h=o.position,c=u.width+s[1]+s[3],d=u.height+s[0]+s[2],f=o.align;"right"===f&&(h[0]-=c),"center"===f&&(h[0]-=c/2);var p=o.verticalAlign;"bottom"===p&&(h[1]-=d),"middle"===p&&(h[1]-=d/2),vm(h,c,d,n);var g=r.get("backgroundColor");g&&"auto"!==g||(g=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:c,height:d,r:r.get("borderRadius")},position:h.slice(),style:{text:a,textFont:l,textFill:r.getTextColor(),textPosition:"inside",fill:g,stroke:r.get("borderColor")||"transparent",lineWidth:r.get("borderWidth")||0,shadowBlur:r.get("shadowBlur"),shadowColor:r.get("shadowColor"),shadowOffsetX:r.get("shadowOffsetX"),shadowOffsetY:r.get("shadowOffsetY")},z2:10}}function vm(t,e,i,n){var o=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,o)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function ym(t,e,i,n,o){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:o.precision}),r=o.formatter;if(r){var s={value:Wl(e,t),seriesData:[]};d(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,o=e&&e.getDataParams(n);o&&s.seriesData.push(o)}),_(r)?a=r.replace("{value}",a):x(r)&&(a=r(s))}return a}function xm(t,e,i){var n=mt();return wt(n,n,i.rotation),_t(n,n,i.position),Io([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function _m(t,e,i,n,o,a){var r=ID.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=o.get("label.margin"),mm(e,n,o,a,{position:xm(n.axis,t,i),align:r.textAlign,verticalAlign:r.textVerticalAlign})}function wm(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function bm(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function Sm(t,e,i,n,o,a){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:a,clockwise:!0}}function Mm(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}function Im(t){return"x"===t.dim?0:1}function Tm(t){return t.isHorizontal()?0:1}function Am(t,e){var i=t.getRect();return[i[fP[e]],i[fP[e]]+i[pP[e]]]}function Dm(t,e,i){var n=new aM({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return So(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function Cm(t,e,i){if(t.count())for(var n,o=e.coordinateSystem,a=e.getLayerSeries(),r=t.mapDimension("single"),s=t.mapDimension("value"),l=f(a,function(e){return f(e.indices,function(e){var i=o.dataToPoint(t.get(r,e));return i[1]=t.get(s,e),i})}),u=Lm(l),h=u.y0,c=i/u.max,d=a.length,p=a[0].indices.length,g=0;ga&&(a=u),n.push(u)}for(var h=0;ha&&(a=d)}return r.y0=o,r.max=a,r}function km(t){var e=0;d(t.children,function(t){km(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function Pm(t,e,i){function n(){r.ignore=r.hoverIgnore}function o(){r.ignore=r.normalIgnore}Zw.call(this);var a=new QS({z2:xP});a.seriesIndex=e.seriesIndex;var r=new qS({z2:_P,silent:t.getModel("label").get("silent")});this.add(a),this.add(r),this.updateData(!0,t,"normal",e,i),this.on("emphasis",n).on("normal",o).on("mouseover",n).on("mouseout",o)}function Nm(t,e,i){var n=t.getVisual("color"),o=t.getVisual("visualMeta");o&&0!==o.length||(n=null);var a=t.getModel("itemStyle").get("color");if(a)return a;if(n)return n;if(0===t.depth)return i.option.color[0];var r=i.option.color.length;return a=i.option.color[Om(t)%r]}function Om(t){for(var e=t;e.depth>1;)e=e.parentNode;return l(t.getAncestors()[0].children,e)}function Em(t,e,i){return i!==yP.NONE&&(i===yP.SELF?t===e:i===yP.ANCESTOR?t===e||t.isAncestorOf(e):t===e||t.isDescendantOf(e))}function Rm(t,e){var i=t.children||[];t.children=zm(i,e),i.length&&d(t.children,function(t){Rm(t,e)})}function zm(t,e){if("function"==typeof e)return t.sort(e);var i="asc"===e;return t.sort(function(t,e){var n=(t.getValue()-e.getValue())*(i?1:-1);return 0===n?(t.dataIndex-e.dataIndex)*(i?-1:1):n})}function Bm(t,e){return e=e||[0,0],f(["x","y"],function(i,n){var o=this.getAxis(i),a=e[n],r=t[n]/2;return"category"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-r)-o.dataToCoord(a+r))},this)}function Vm(t,e){return e=e||[0,0],f([0,1],function(i){var n=e[i],o=t[i]/2,a=[],r=[];return a[i]=n-o,r[i]=n+o,a[1-i]=r[1-i]=e[1-i],Math.abs(this.dataToPoint(a)[i]-this.dataToPoint(r)[i])},this)}function Gm(t,e){var i=this.getAxis(),n=e instanceof Array?e[0]:e,o=(t instanceof Array?t[0]:t)/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))}function Fm(t,e){return f(["Radius","Angle"],function(i,n){var o=this["get"+i+"Axis"](),a=e[n],r=t[n]/2,s="dataTo"+i,l="category"===o.type?o.getBandWidth():Math.abs(o[s](a-r)-o[s](a+r));return"Angle"===i&&(l=l*Math.PI/180),l},this)}function Wm(t){var e,i=t.type;if("path"===i){var n=t.shape,o=null!=n.width&&null!=n.height?{x:n.x||0,y:n.y||0,width:n.width,height:n.height}:null,a=tv(n);(e=Wn(a,null,o,n.layout||"center")).__customPathData=a}else"image"===i?(e=new hi({})).__customImagePath=t.style.image:"text"===i?(e=new qS({})).__customText=t.style.text:e=new(0,bM[i.charAt(0).toUpperCase()+i.slice(1)]);return e.__customGraphicType=i,e.name=t.name,e}function Hm(t,e,n,o,a,r,s){var l={},u=n.style||{};if(n.shape&&(l.shape=i(n.shape)),n.position&&(l.position=n.position.slice()),n.scale&&(l.scale=n.scale.slice()),n.origin&&(l.origin=n.origin.slice()),n.rotation&&(l.rotation=n.rotation),"image"===t.type&&n.style){h=l.style={};d(["x","y","width","height"],function(e){Zm(e,h,u,t.style,r)})}if("text"===t.type&&n.style){var h=l.style={};d(["x","y"],function(e){Zm(e,h,u,t.style,r)}),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke)}if("group"!==t.type&&(t.useStyle(u),r)){t.style.opacity=0;var c=u.opacity;null==c&&(c=1),So(t,{style:{opacity:c}},o,e)}r?t.attr(l):bo(t,l,o,e),n.hasOwnProperty("z2")&&t.attr("z2",n.z2||0),n.hasOwnProperty("silent")&&t.attr("silent",n.silent),n.hasOwnProperty("invisible")&&t.attr("invisible",n.invisible),n.hasOwnProperty("ignore")&&t.attr("ignore",n.ignore),n.hasOwnProperty("info")&&t.attr("info",n.info);var f=n.styleEmphasis,p=!1===f;t.__cusHasEmphStl&&null==f||!t.__cusHasEmphStl&&p||(no(t,f),t.__cusHasEmphStl=!p),s&&ho(t,!p)}function Zm(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function Um(t,e,i,n){function o(t){null==t&&(t=h),v&&(c=e.getItemModel(t),d=c.getModel(AP),f=c.getModel(DP),p=e.getItemVisual(t,"color"),v=!1)}var s=t.get("renderItem"),l=t.coordinateSystem,u={};l&&(u=l.prepareCustoms?l.prepareCustoms():LP[l.type](l));var h,c,d,f,p,g=r({getWidth:n.getWidth,getHeight:n.getHeight,getZr:n.getZr,getDevicePixelRatio:n.getDevicePixelRatio,value:function(t,i){return null==i&&(i=h),e.get(e.getDimension(t||0),i)},style:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(IP).getItemStyle();null!=p&&(r.fill=p);var s=e.getItemVisual(n,"opacity");return null!=s&&(r.opacity=s),fo(r,d,null,{autoColor:p,isRectText:!0}),r.text=d.getShallow("show")?A(t.getFormattedLabel(n,"normal"),gu(e,n)):null,i&&a(r,i),r},styleEmphasis:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(TP).getItemStyle();return fo(r,f,null,{isRectText:!0},!0),r.text=f.getShallow("show")?D(t.getFormattedLabel(n,"emphasis"),t.getFormattedLabel(n,"normal"),gu(e,n)):null,i&&a(r,i),r},visual:function(t,i){return null==i&&(i=h),e.getItemVisual(i,t)},barLayout:function(t){if(l.getBaseAxis)return Tl(r({axis:l.getBaseAxis()},t),n)},currentSeriesIndices:function(){return i.getCurrentSeriesIndices()},font:function(t){return _o(t,i)}},u.api||{}),m={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:u.coordSys,dataInsideLength:e.count(),encode:Xm(t.getData())},v=!0;return function(t,i){return h=t,v=!0,s&&s(r({dataIndexInside:t,dataIndex:e.getRawIndex(t),actionType:i?i.type:null},m),g)}}function Xm(t){var e={};return d(t.dimensions,function(i,n){var o=t.getDimensionInfo(i);if(!o.isExtraCoord){var a=o.coordDim;(e[a]=e[a]||[])[o.coordDimIndex]=n}}),e}function jm(t,e,i,n,o,a){return(t=Ym(t,e,i,n,o,a,!0))&&a.setItemGraphicEl(e,t),t}function Ym(t,e,i,n,o,a,r){var s=!i,l=(i=i||{}).type,u=i.shape,h=i.style;if(t&&(s||null!=l&&l!==t.__customGraphicType||"path"===l&&ev(u)&&tv(u)!==t.__customPathData||"image"===l&&iv(h,"image")&&h.image!==t.__customImagePath||"text"===l&&iv(u,"text")&&h.text!==t.__customText)&&(o.remove(t),t=null),!s){var c=!t;return!t&&(t=Wm(i)),Hm(t,e,i,n,a,c,r),"group"===l&&qm(t,e,i,n,a),o.add(t),t}}function qm(t,e,i,n,o){var a=i.children,r=a?a.length:0,s=i.$mergeChildren,l="byName"===s||i.diffChildrenByName,u=!1===s;if(r||l||u)if(l)Km({oldChildren:t.children()||[],newChildren:a||[],dataIndex:e,animatableModel:n,group:t,data:o});else{u&&t.removeAll();for(var h=0;hn?t-=l+a:t+=a),null!=r&&(e+u+r>o?e-=u+r:e+=r),[t,e]}function Tv(t,e,i,n,o){var a=i.getOuterSize(),r=a.width,s=a.height;return t=Math.min(t+r,n)-r,e=Math.min(e+s,o)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Av(t,e,i){var n=i[0],o=i[1],a=0,r=0,s=e.width,l=e.height;switch(t){case"inside":a=e.x+s/2-n/2,r=e.y+l/2-o/2;break;case"top":a=e.x+s/2-n/2,r=e.y-o-5;break;case"bottom":a=e.x+s/2-n/2,r=e.y+l+5;break;case"left":a=e.x-n-5,r=e.y+l/2-o/2;break;case"right":a=e.x+s+5,r=e.y+l/2-o/2}return[a,r]}function Dv(t){return"center"===t||"middle"===t}function Cv(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function Lv(t){return t.dim}function kv(t,e){var i={};d(t,function(t,e){var n=t.getData(),o=t.coordinateSystem.getBaseAxis(),a=o.getExtent(),r="category"===o.type?o.getBandWidth():Math.abs(a[1]-a[0])/n.count(),s=i[Lv(o)]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},l=s.stacks;i[Lv(o)]=s;var u=Cv(t);l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var h=Ro(t.get("barWidth"),r),c=Ro(t.get("barMaxWidth"),r),d=t.get("barGap"),f=t.get("barCategoryGap");h&&!l[u].width&&(h=Math.min(s.remainedWidth,h),l[u].width=h,s.remainedWidth-=h),c&&(l[u].maxWidth=c),null!=d&&(s.gap=d),null!=f&&(s.categoryGap=f)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Ro(t.categoryGap,o),r=Ro(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,u=(s-a)/(l+(l-1)*r);u=Math.max(u,0),d(i,function(t,e){var i=t.maxWidth;i&&ie[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function Vv(t){return t.getRadiusAxis().inverse?0:1}function Gv(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}function Fv(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotate:e.getModel("axisLabel").get("rotate"),z2:1}}function Wv(t,e,i,n,o){var a=e.axis,r=a.dataToCoord(t),s=n.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,h,c=n.getRadiusAxis().getExtent();if("radius"===a.dim){var d=mt();wt(d,d,s),_t(d,d,[n.cx,n.cy]),l=Io([r,-o],d);var f=e.getModel("axisLabel").get("rotate")||0,p=ID.innerTextLayout(s,f*Math.PI/180,-1);u=p.textAlign,h=p.textVerticalAlign}else{var g=c[1];l=n.coordToPoint([g+o,r]);var m=n.cx,v=n.cy;u=Math.abs(l[0]-m)/g<.3?"center":l[0]>m?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}function Hv(t,e){e.update="updateView",Ps(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name),d(i.coordinateSystem.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}function Zv(t){var e={};d(t,function(t){e[t]=1}),t.length=0,d(e,function(e,i){t.push(i)})}function Uv(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function Xv(t,e,n){function o(){var t=function(){};return t.prototype.__hidden=t.prototype,new t}var a={};return rN(e,function(e){var r=a[e]=o();rN(t[e],function(t,o){if(jC.isValidType(o)){var a={type:o,visual:t};n&&n(a,e),r[o]=new jC(a),"opacity"===o&&((a=i(a)).type="colorAlpha",r.__hidden.__alphaForOpacity=new jC(a))}})}),a}function jv(t,e,n){var o;d(n,function(t){e.hasOwnProperty(t)&&Uv(e[t])&&(o=!0)}),o&&d(n,function(n){e.hasOwnProperty(n)&&Uv(e[n])?t[n]=i(e[n]):delete t[n]})}function Yv(t,e,i,n,o,a){function r(t){return i.getItemVisual(h,t)}function s(t,e){i.setItemVisual(h,t,e)}function l(t,l){h=null==a?t:l;var c=i.getRawDataItem(h);if(!c||!1!==c.visualMap)for(var d=n.call(o,t),f=e[d],p=u[d],g=0,m=p.length;g1)return!1;var h=ey(i-t,o-t,n-e,a-e)/l;return!(h<0||h>1)}function ty(t){return t<=1e-6&&t>=-1e-6}function ey(t,e,i,n){return t*n-e*i}function iy(t,e,i){var n=this._targetInfoList=[],o={},a=oy(e,t);lN(pN,function(t,e){(!i||!i.include||uN(i.include,e)>=0)&&t(a,n,o)})}function ny(t){return t[0]>t[1]&&t.reverse(),t}function oy(t,e){return Vi(t,e,{includeMainTypes:dN})}function ay(t,e,i,n){var o=i.getAxis(["x","y"][t]),a=ny(f([0,1],function(t){return e?o.coordToData(o.toLocalCoord(n[t])):o.toGlobalCoord(o.dataToCoord(n[t]))})),r=[];return r[t]=a,r[1-t]=[NaN,NaN],{values:a,xyMinMax:r}}function ry(t,e,i,n){return[e[0]-n[t]*i[0],e[1]-n[t]*i[1]]}function sy(t,e){var i=ly(t),n=ly(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}function ly(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}function uy(t,e,i,n,o){if(o){var a=t.getZr();a[wN]||(a[_N]||(a[_N]=hy),Lr(a,_N,i,e)(t,n))}}function hy(t,e){if(!t.isDisposed()){var i=t.getZr();i[wN]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[wN]=!1}}function cy(t,e,i,n){for(var o=0,a=e.length;o=0}function Iy(t,e,i){function n(t,e){return l(e.nodes,t)>=0}function o(t,n){var o=!1;return e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]&&(o=!0)})}),o}function a(t,n){n.nodes.push(t),e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){var r={nodes:[],records:{}};if(e(function(t){r.records[t.name]={}}),!i)return r;a(i,r);var s;do{s=!1,t(function(t){!n(t,r)&&o(t,r)&&(a(t,r),s=!0)})}while(s);return r}}function Ty(t,e,i){var n=[1/0,-1/0];return NN(i,function(t){var i=t.getData();i&&NN(i.mapDimension(e,!0),function(t){var e=i.getApproximateExtent(t);e[0]n[1]&&(n[1]=e[1])})}),n[1]0?0:NaN);var r=i.getMax(!0);return null!=r&&"dataMax"!==r&&"function"!=typeof r?e[1]=r:o&&(e[1]=a>0?a-1:NaN),i.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function Dy(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var a=Fo(o,[0,500]);a=Math.min(a,20);var r=e||0===n[0]&&100===n[1];i.setRange(r?null:+o[0].toFixed(a),r?null:+o[1].toFixed(a))}}function Cy(t){var e=t._minMaxSpan={},i=t._dataZoomModel;NN(["min","max"],function(n){e[n+"Span"]=i.get(n+"Span");var o=i.get(n+"ValueSpan");if(null!=o&&(e[n+"ValueSpan"]=o,null!=(o=t.getAxisModel().axis.scale.parse(o)))){var a=t._dataExtent;e[n+"Span"]=Eo(a[0]+o,a,[0,100],!0)}})}function Ly(t){var e={};return RN(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function ky(t,e){var i=t._rangePropMode,n=t.get("rangeMode");RN([["start","startValue"],["end","endValue"]],function(t,o){var a=null!=e[t[0]],r=null!=e[t[1]];a&&!r?i[o]="percent":!a&&r?i[o]="value":n?i[o]=n[o]:a&&(i[o]="percent")})}function Py(t){return{x:"y",y:"x",radius:"angle",angle:"radius"}[t]}function Ny(t){return"vertical"===t?"ns-resize":"ew-resize"}function Oy(t,e){var i=zy(t),n=e.dataZoomId,o=e.coordId;d(i,function(t,i){var a=t.dataZoomInfos;a[n]&&l(e.allCoordIds,o)<0&&(delete a[n],t.count--)}),Vy(i);var a=i[o];a||((a=i[o]={coordId:o,dataZoomInfos:{},count:0}).controller=By(t,a),a.dispatchAction=v(Gy,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var r=Fy(a.dataZoomInfos);a.controller.enable(r.controlType,r.opt),a.controller.setPointerChecker(e.containsPoint),Lr(a,"dispatchAction",e.dataZoomModel.get("throttle",!0),"fixRate")}function Ey(t,e){var i=zy(t);d(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),Vy(i)}function Ry(t){return t.type+"\0_"+t.id}function zy(t){var e=t.getZr();return e[qN]||(e[qN]={})}function By(t,e){var i=new ac(t.getZr());return d(["pan","zoom","scrollMove"],function(t){i.on(t,function(i){var n=[];d(e.dataZoomInfos,function(o){if(i.isAvailableBehavior(o.dataZoomModel.option)){var a=(o.getRange||{})[t],r=a&&a(e.controller,i);!o.dataZoomModel.get("disabled",!0)&&r&&n.push({dataZoomId:o.dataZoomId,start:r[0],end:r[1]})}}),n.length&&e.dispatchAction(n)})}),i}function Vy(t){d(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function Gy(t,e){t.dispatchAction({type:"dataZoom",batch:e})}function Fy(t){var e,i={type_true:2,type_move:1,type_false:0,type_undefined:-1},n=!0;return d(t,function(t){var o=t.dataZoomModel,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i["type_"+a]>i["type_"+e]&&(e=a),n&=o.get("preventDefaultMouseMove",!0)}),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!n}}}function Wy(t){return function(e,i,n,o){var a=this._range,r=a.slice(),s=e.axisModels[0];if(s){var l=t(r,s,e,i,n,o);return EL(l,r,[0,100],"all"),this._range=r,a[0]!==r[0]||a[1]!==r[1]?r:void 0}}}function Hy(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}function Zy(t,e,i,n){for(var o=e.targetVisuals[n],a=jC.prepareVisualTypes(o),r={color:t.getData().getVisual("color")},s=0,l=a.length;s=0&&(r[a]=+r[a].toFixed(h)),r}function ax(t,e){var n=t.getData(),o=t.coordinateSystem;if(e&&!nx(e)&&!y(e.coord)&&o){var a=o.dimensions,r=rx(e,n,o,t);if((e=i(e)).type&&LO[e.type]&&r.baseAxis&&r.valueAxis){var s=DO(a,r.baseAxis.dim),l=DO(a,r.valueAxis.dim);e.coord=LO[e.type](n,r.baseDataDim,r.valueDataDim,s,l),e.value=e.coord[l]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)LO[u[h]]&&(u[h]=hx(n,n.mapDimension(a[h]),u[h]));e.coord=u}}return e}function rx(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(sx(n,o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim)):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim),o.valueDataDim=e.mapDimension(o.valueAxis.dim)),o}function sx(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var o=0;o=0)return!0}function Gx(t){for(var e=t.split(/\n+/g),i=[],n=f(Bx(e.shift()).split(KO),function(t){return{name:t,data:[]}}),o=0;o=0&&!i[o][n];o--);if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var r=a.getPercentRange();i[0][n]={dataZoomId:n,start:r[0],end:r[1]}}}}),i.push(e)}function Xx(t){var e=qx(t),i=e[e.length-1];e.length>1&&e.pop();var n={};return $O(i,function(t,i){for(var o=e.length-1;o>=0;o--)if(t=e[o][i]){n[i]=t;break}}),n}function jx(t){t[JO]=null}function Yx(t){return qx(t).length}function qx(t){var e=t[JO];return e||(e=t[JO]=[{}]),e}function Kx(t,e,i){(this._brushController=new Cf(i.getZr())).on("brush",m(this._onBrush,this)).mount(),this._isZoomActive}function $x(t){var e={};return d(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(!1===e[i]||"none"===e[i])&&(e[i]=[])}),e}function Jx(t,e){t.setIconStatus("back",Yx(e)>1?"emphasis":"normal")}function Qx(t,e,i,n,o){var a=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(a="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=a,t.setIconStatus("zoom",a?"emphasis":"normal");var r=new iy($x(t.option),e,{include:["grid"]});i._brushController.setPanels(r.makePanelOpts(o,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"})).enableBrush(!!a&&{brushType:"auto",brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}function t_(t){this.model=t}function e_(t){return aE(t)}function i_(){if(!lE&&uE){lE=!0;var t=uE.styleSheets;t.length<31?uE.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}function n_(t){return parseInt(t,10)}function o_(t,e){i_(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){o.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t)},this._firstPaint=!0}function a_(t){return function(){Bw('In IE8.0 VML mode painter not support method "'+t+'"')}}function r_(t){return document.createElementNS(HE,t)}function s_(t){return jE(1e4*t)/1e4}function l_(t){return t-QE}function u_(t,e){var i=e?t.textFill:t.fill;return null!=i&&i!==XE}function h_(t,e){var i=e?t.textStroke:t.stroke;return null!=i&&i!==XE}function c_(t,e){e&&d_(t,"transform","matrix("+UE.call(e,",")+")")}function d_(t,e,i){(!i||"linear"!==i.type&&"radial"!==i.type)&&("string"==typeof i&&i.indexOf("NaN")>-1&&console.log(i),t.setAttribute(e,i))}function f_(t,e,i){t.setAttributeNS("http://www.w3.org/1999/xlink",e,i)}function p_(t,e,i,n){if(u_(e,i)){var o=i?e.textFill:e.fill;o="transparent"===o?XE:o,"none"!==t.getAttribute("clip-path")&&o===XE&&(o="rgba(0, 0, 0, 0.002)"),d_(t,"fill",o),d_(t,"fill-opacity",null!=e.fillOpacity?e.fillOpacity*e.opacity:e.opacity)}else d_(t,"fill",XE);if(h_(e,i)){var a=i?e.textStroke:e.stroke;d_(t,"stroke",a="transparent"===a?XE:a),d_(t,"stroke-width",(i?e.textStrokeWidth:e.lineWidth)/(!i&&e.strokeNoScale?n.getLineScale():1)),d_(t,"paint-order",i?"stroke":"fill"),d_(t,"stroke-opacity",null!=e.strokeOpacity?e.strokeOpacity:e.opacity),e.lineDash?(d_(t,"stroke-dasharray",e.lineDash.join(",")),d_(t,"stroke-dashoffset",jE(e.lineDashOffset||0))):d_(t,"stroke-dasharray",""),e.lineCap&&d_(t,"stroke-linecap",e.lineCap),e.lineJoin&&d_(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&d_(t,"stroke-miterlimit",e.miterLimit)}else d_(t,"stroke",XE)}function g_(t){for(var e=[],i=t.data,n=t.len(),o=0;o=$E||!l_(g)&&(d>-KE&&d<0||d>KE)==!!p;var y=s_(s+u*qE(c)),x=s_(l+h*YE(c));m&&(d=p?$E-1e-4:1e-4-$E,v=!0,9===o&&e.push("M",y,x));var _=s_(s+u*qE(c+d)),w=s_(l+h*YE(c+d));e.push("A",s_(u),s_(h),jE(f*JE),+v,+p,_,w);break;case ZE.Z:a="Z";break;case ZE.R:var _=s_(i[o++]),w=s_(i[o++]),b=s_(i[o++]),S=s_(i[o++]);e.push("M",_,w,"L",_+b,w,"L",_+b,w+S,"L",_,w+S,"L",_,w)}a&&e.push(a);for(var M=0;M=11),domSupported:"undefined"!=typeof document}}(navigator.userAgent),B_={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},V_={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},G_=Object.prototype.toString,F_=Array.prototype,W_=F_.forEach,H_=F_.filter,Z_=F_.slice,U_=F_.map,X_=F_.reduce,j_={},Y_=function(){return j_.createCanvas()};j_.createCanvas=function(){return document.createElement("canvas")};var q_,K_="__ec_primitive__";E.prototype={constructor:E,get:function(t){return this.data.hasOwnProperty(t)?this.data[t]:null},set:function(t,e){return this.data[t]=e},each:function(t,e){void 0!==e&&(t=m(t,e));for(var i in this.data)this.data.hasOwnProperty(i)&&t(this.data[i],i)},removeKey:function(t){delete this.data[t]}};var $_=(Object.freeze||Object)({$override:e,clone:i,merge:n,mergeAll:o,extend:a,defaults:r,createCanvas:Y_,getContext:s,indexOf:l,inherits:u,mixin:h,isArrayLike:c,each:d,map:f,reduce:p,filter:g,find:function(t,e,i){if(t&&e)for(var n=0,o=t.length;n3&&(n=ow.call(n,1));for(var a=e.length,r=0;r4&&(n=ow.call(n,1,n.length-1));for(var a=n[n.length-1],r=e.length,s=0;s=0;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=gt(n[a],t,e))&&(!o.topTarget&&(o.topTarget=n[a]),r!==uw)){o.target=n[a];break}}return o}},d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){cw.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if("mousedown"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if("mouseup"===t)this._upEl=n;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||ew(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),h(cw,aw),h(cw,it);var dw="undefined"==typeof Float32Array?Array:Float32Array,fw=(Object.freeze||Object)({create:mt,identity:vt,copy:yt,mul:xt,translate:_t,rotate:wt,scale:bt,invert:St,clone:Mt}),pw=vt,gw=5e-5,mw=function(t){(t=t||{}).position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},vw=mw.prototype;vw.transform=null,vw.needLocalTransform=function(){return It(this.rotation)||It(this.position[0])||It(this.position[1])||It(this.scale[0]-1)||It(this.scale[1]-1)};var yw=[];vw.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;if(i||e){n=n||mt(),i?this.getLocalTransform(n):pw(n),e&&(i?xt(n,t.transform,n):yt(n,t.transform)),this.transform=n;var o=this.globalScaleRatio;if(null!=o&&1!==o){this.getGlobalScale(yw);var a=yw[0]<0?-1:1,r=yw[1]<0?-1:1,s=((yw[0]-a)*o+a)/yw[0]||0,l=((yw[1]-r)*o+r)/yw[1]||0;n[0]*=s,n[1]*=s,n[2]*=l,n[3]*=l}this.invTransform=this.invTransform||mt(),St(this.invTransform,n)}else n&&pw(n)},vw.getLocalTransform=function(t){return mw.getLocalTransform(this,t)},vw.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},vw.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var xw=[],_w=mt();vw.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],i=t[2]*t[2]+t[3]*t[3],n=this.position,o=this.scale;It(e-1)&&(e=Math.sqrt(e)),It(i-1)&&(i=Math.sqrt(i)),t[0]<0&&(e=-e),t[3]<0&&(i=-i),n[0]=t[4],n[1]=t[5],o[0]=e,o[1]=i,this.rotation=Math.atan2(-t[1]/i,t[0]/e)}},vw.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(xt(xw,t.invTransform,e),e=xw);var i=this.origin;i&&(i[0]||i[1])&&(_w[4]=i[0],_w[5]=i[1],xt(xw,e,_w),xw[4]-=i[0],xw[5]-=i[1],e=xw),this.setLocalTransform(e)}},vw.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},vw.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&Q(i,i,n),i},vw.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&Q(i,i,n),i},mw.getLocalTransform=function(t,e){pw(e=e||[]);var i=t.origin,n=t.scale||[1,1],o=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),bt(e,e,n),o&&wt(e,e,o),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var ww={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-ww.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*ww.bounceIn(2*t):.5*ww.bounceOut(2*t-1)+.5}};Tt.prototype={constructor:Tt,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)this._pausedTime+=e;else{var i=(t-this._startTime-this._pausedTime)/this._life;if(!(i<0)){i=Math.min(i,1);var n=this.easing,o="string"==typeof n?ww[n]:n,a="function"==typeof o?o(i):i;return this.fire("frame",a),1==i?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){this[t="on"+t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var bw=function(){this.head=null,this.tail=null,this._len=0},Sw=bw.prototype;Sw.insert=function(t){var e=new Mw(t);return this.insertEntry(e),e},Sw.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Sw.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Sw.len=function(){return this._len},Sw.clear=function(){this.head=this.tail=null,this._len=0};var Mw=function(t){this.value=t,this.next,this.prev},Iw=function(t){this._list=new bw,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Tw=Iw.prototype;Tw.put=function(t,e){var i=this._list,n=this._map,o=null;if(null==n[t]){var a=i.len(),r=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],o=s.value,this._lastRemovedEntry=s}r?r.value=e:r=new Mw(e),r.key=t,i.insertEntry(r),n[t]=r}return o},Tw.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},Tw.clear=function(){this._list.clear(),this._map={}};var Aw={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},Dw=new Iw(20),Cw=null,Lw=Wt,kw=Ht,Pw=(Object.freeze||Object)({parse:zt,lift:Gt,toHex:Ft,fastLerp:Wt,fastMapToColor:Lw,lerp:Ht,mapToColor:kw,modifyHSL:Zt,modifyAlpha:Ut,stringify:Xt}),Nw=Array.prototype.slice,Ow=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||jt,this._setter=n||Yt,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Ow.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:ie(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new ue(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},ue.create=function(t){return new ue(t.x,t.y,t.width,t.height)};var Zw=function(t){t=t||{},Gw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};Zw.prototype={constructor:Zw,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof Zw&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,o=l(n,t);return o<0?this:(n.splice(o,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof Zw&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e=0&&(this.delFromStorage(t),this._roots.splice(o,1),t instanceof Zw&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:ye};var Yw={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1},qw=function(t,e,i){return Yw.hasOwnProperty(e)?i*=t.dpr:i},Kw=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],$w=function(t){this.extendFrom(t,!1)};$w.prototype={constructor:$w,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){for(var n=this,o=i&&i.style,a=!o,r=0;r0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||!0!==e&&(!1===e?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n=("radial"===e.type?_e:xe)(t,e,i),o=e.colorStops,a=0;a=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i15)break}s.__drawIndex=m,s.__drawIndex0&&t>n[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Bw("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n0?.01:0),this._needsManuallyCompositing),a.__builtin__||Bw("ZLevel "+s+" has been used by unkown layer "+a.id),a!==i&&(a.__used=!0,a.__startIndex!==o&&(a.__dirty=!0),a.__startIndex=o,a.incremental?a.__drawIndex=-1:a.__drawIndex=o,e(o),i=a),r.__dirty&&(a.__dirty=!0,a.incremental&&a.__drawIndex<0&&(a.__drawIndex=o))}e(o),this.eachBuiltinLayer(function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?n(i[t],e,!0):i[t]=e;for(var o=0;o=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i1&&n&&n.length>1){var a=vi(n)/vi(o);!isFinite(a)&&(a=1),e.pinchScale=a;var r=yi(n);return e.pinchX=r[0],e.pinchY=r[1],{type:"pinch",target:t[0].target,event:e}}}}},bb=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Sb=["touchstart","touchend","touchmove"],Mb={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},Ib=f(bb,function(t){var e=t.replace("mouse","pointer");return Mb[e]?e:t}),Tb={mousemove:function(t){t=lt(this.dom,t),this.trigger("mousemove",t)},mouseout:function(t){var e=(t=lt(this.dom,t)).toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger("mouseout",t)},touchstart:function(t){(t=lt(this.dom,t)).zrByTouch=!0,this._lastTouchMoment=new Date,_i(this,t,"start"),Tb.mousemove.call(this,t),Tb.mousedown.call(this,t),wi(this)},touchmove:function(t){(t=lt(this.dom,t)).zrByTouch=!0,_i(this,t,"change"),Tb.mousemove.call(this,t),wi(this)},touchend:function(t){(t=lt(this.dom,t)).zrByTouch=!0,_i(this,t,"end"),Tb.mouseup.call(this,t),+new Date-this._lastTouchMoment<300&&Tb.click.call(this,t),wi(this)},pointerdown:function(t){Tb.mousedown.call(this,t)},pointermove:function(t){bi(t)||Tb.mousemove.call(this,t)},pointerup:function(t){Tb.mouseup.call(this,t)},pointerout:function(t){bi(t)||Tb.mouseout.call(this,t)}};d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){Tb[t]=function(e){e=lt(this.dom,e),this.trigger(t,e)}});var Ab=Mi.prototype;Ab.dispose=function(){for(var t=bb.concat(Sb),e=0;e=0||n&&l(n,r)<0)){var s=e.getShallow(r);null!=s&&(o[t[a][0]]=s)}}return o}},Hb=Wb([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),Zb={getLineStyle:function(t){var e=Hb(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}},Ub=Wb([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),Xb={getAreaStyle:function(t,e){return Ub(this,t,e)}},jb=Math.pow,Yb=Math.sqrt,qb=1e-8,Kb=1e-4,$b=Yb(3),Jb=1/3,Qb=V(),tS=V(),eS=V(),iS=Math.min,nS=Math.max,oS=Math.sin,aS=Math.cos,rS=2*Math.PI,sS=V(),lS=V(),uS=V(),hS=[],cS=[],dS={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},fS=[],pS=[],gS=[],mS=[],vS=Math.min,yS=Math.max,xS=Math.cos,_S=Math.sin,wS=Math.sqrt,bS=Math.abs,SS="undefined"!=typeof Float32Array,MS=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};MS.prototype={constructor:MS,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=bS(1/Rw/t)||0,this._uy=bS(1/Rw/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(dS.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=bS(t-this._xi)>this._ux||bS(e-this._yi)>this._uy||this._len<5;return this.addData(dS.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(dS.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(dS.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(dS.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=xS(o)*i+t,this._yi=_S(o)*i+e,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(dS.R,t,e,i,n),this},closePath:function(){this.addData(dS.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;i0&&f<=t||h<0&&f>=t||0==h&&(c>0&&p<=e||c<0&&p>=e);)f+=h*(i=r[n=this._dashIdx]),p+=c*i,this._dashIdx=(n+1)%g,h>0&&fl||c>0&&pu||s[n%2?"moveTo":"lineTo"](h>=0?vS(f,t):yS(f,t),c>=0?vS(p,e):yS(p,e));h=f-t,c=p-e,this._dashOffset=-wS(h*h+c*c)},_dashedBezierTo:function(t,e,i,n,o,a){var r,s,l,u,h,c=this._dashSum,d=this._dashOffset,f=this._lineDash,p=this._ctx,g=this._xi,m=this._yi,v=Qi,y=0,x=this._dashIdx,_=f.length,w=0;for(d<0&&(d=c+d),d%=c,r=0;r<1;r+=.1)s=v(g,t,i,o,r+.1)-v(g,t,i,o,r),l=v(m,e,n,a,r+.1)-v(m,e,n,a,r),y+=wS(s*s+l*l);for(;x<_&&!((w+=f[x])>d);x++);for(r=(w-d)/y;r<=1;)u=v(g,t,i,o,r),h=v(m,e,n,a,r),x%2?p.moveTo(u,h):p.lineTo(u,h),r+=f[x]/y,x=(x+1)%_;x%2!=0&&p.lineTo(o,a),s=o-u,l=a-h,this._dashOffset=-wS(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var o=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,SS&&(this.data=new Float32Array(t)))},getBoundingRect:function(){fS[0]=fS[1]=gS[0]=gS[1]=Number.MAX_VALUE,pS[0]=pS[1]=mS[0]=mS[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,o=0,a=0;al||bS(r-o)>u||c===h-1)&&(t.lineTo(a,r),n=a,o=r);break;case dS.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case dS.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case dS.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=g>m?g:m,b=g>m?1:g/m,S=g>m?m/g:1,M=v+y;Math.abs(g-m)>.001?(t.translate(f,p),t.rotate(x),t.scale(b,S),t.arc(0,0,w,v,M,1-_),t.scale(1/b,1/S),t.rotate(-x),t.translate(-f,-p)):t.arc(f,p,w,v,M,1-_),1==c&&(e=xS(v)*g+f,i=_S(v)*m+p),n=xS(M)*g+f,o=_S(M)*m+p;break;case dS.R:e=n=s[c],i=o=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case dS.Z:t.closePath(),n=e,o=i}}}},MS.CMD=dS;var IS=2*Math.PI,TS=2*Math.PI,AS=MS.CMD,DS=2*Math.PI,CS=1e-4,LS=[-1,-1,-1],kS=[-1,-1],PS=eb.prototype.getCanvasPattern,NS=Math.abs,OS=new MS(!0);kn.prototype={constructor:kn,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path||OS,o=i.hasStroke(),a=i.hasFill(),r=i.fill,s=i.stroke,l=a&&!!r.colorStops,u=o&&!!s.colorStops,h=a&&!!r.image,c=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,r,d)),u&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:h&&(t.fillStyle=PS.call(r,t)),u?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=PS.call(s,t));var f=i.lineDash,p=i.lineDashOffset,g=!!t.setLineDash,m=this.getGlobalScale();if(n.setScale(m[0],m[1]),this.__dirtyPath||f&&!g&&o?(n.beginPath(t),f&&!g&&(n.setLineDash(f),n.setLineDashOffset(p)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a)if(null!=i.fillOpacity){v=t.globalAlpha;t.globalAlpha=i.fillOpacity*i.opacity,n.fill(t),t.globalAlpha=v}else n.fill(t);if(f&&g&&(t.setLineDash(f),t.lineDashOffset=p),o)if(null!=i.strokeOpacity){var v=t.globalAlpha;t.globalAlpha=i.strokeOpacity*i.opacity,n.stroke(t),t.globalAlpha=v}else n.stroke(t);f&&g&&t.setLineDash([]),null!=i.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))},buildPath:function(t,e,i){},createPathProxy:function(){this.path=new MS},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new MS),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var a=e.lineWidth,r=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),r>1e-10&&(o.width+=a/r,o.height+=a/r,o.x-=a/r/2,o.y-=a/r/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(o.hasStroke()){var r=o.lineWidth,s=o.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(o.hasFill()||(r=Math.max(r,this.strokeContainThreshold)),Ln(a,r/s,t,e)))return!0}if(o.hasFill())return Cn(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):ui.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(w(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&NS(t[0]-1)>1e-10&&NS(t[3]-1)>1e-10?Math.sqrt(NS(t[0]*t[3]-t[2]*t[1])):1}},kn.extend=function(t){var e=function(e){kn.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var o in i)!n.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(n[o]=i[o])}t.init&&t.init.call(this,e)};u(e,kn);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},u(kn,ui);var ES=MS.CMD,RS=[[],[],[]],zS=Math.sqrt,BS=Math.atan2,VS=function(t,e){var i,n,o,a,r,s,l=t.data,u=ES.M,h=ES.C,c=ES.L,d=ES.R,f=ES.A,p=ES.Q;for(o=0,a=0;o=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var o=0;oi-2?i-1:c+1],u=t[c>i-3?i-1:c+2]);var p=d*d,g=d*p;n.push([zn(s[0],f[0],l[0],u[0],d,p,g),zn(s[1],f[1],l[1],u[1],d,p,g)])}return n},iM=function(t,e,i,n){var o,a,r,s,l=[],u=[],h=[],c=[];if(n){r=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;d=i&&a>=o)return{x:i,y:o,width:n-i,height:a-o}},createIcon:Co,Group:Zw,Image:hi,Text:qS,Circle:KS,Sector:QS,Ring:tM,Polygon:nM,Polyline:oM,Rect:aM,Line:rM,BezierCurve:lM,Arc:uM,IncrementalDisplayable:Gn,CompoundPath:hM,LinearGradient:dM,RadialGradient:fM,BoundingRect:ue}),SM=["textStyle","color"],MM={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(SM):null)},getFont:function(){return _o({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return De(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("rich"),this.getShallow("truncateText"))}},IM=Wb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),TM={getItemStyle:function(t,e){var i=IM(this,t,e),n=this.getBorderLineDash();return n&&(i.lineDash=n),i},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}},AM=h,DM=Bi();Lo.prototype={constructor:Lo,init:null,mergeOption:function(t){n(this.option,t,!0)},get:function(t,e){return null==t?this.option:ko(this.option,this.parsePath(t),!e&&Po(this,t))},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=!e&&Po(this,t);return null==n&&o&&(n=o.getShallow(t)),n},getModel:function(t,e){var i,n=null==t?this.option:ko(this.option,t=this.parsePath(t));return e=e||(i=Po(this,t))&&i.getModel(t),new Lo(n,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){return new(0,this.constructor)(i(this.option))},setReadOnly:function(t){},parsePath:function(t){return"string"==typeof t&&(t=t.split(".")),t},customizeGetParent:function(t){DM(this).getParent=t},isAnimationEnabled:function(){if(!z_.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},Xi(Lo),ji(Lo),AM(Lo,Zb),AM(Lo,Xb),AM(Lo,MM),AM(Lo,TM);var CM=0,LM=1e-4,kM=9007199254740991,PM=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,NM=(Object.freeze||Object)({linearMap:Eo,parsePercent:Ro,round:zo,asc:Bo,getPrecision:Vo,getPrecisionSafe:Go,getPixelPrecision:Fo,getPercentWithPrecision:Wo,MAX_SAFE_INTEGER:kM,remRadian:Ho,isRadianAroundZero:Zo,parseDate:Uo,quantity:Xo,nice:Yo,quantile:function(t,e){var i=(t.length-1)*e+1,n=Math.floor(i),o=+t[n-1],a=i-n;return a?o+a*(t[n]-o):o},reformIntervals:qo,isNumeric:Ko}),OM=L,EM=/([&<>"'])/g,RM={"&":"&","<":"<",">":">",'"':""","'":"'"},zM=["a","b","c","d","e","f","g"],BM=function(t,e){return"{"+t+(null==e?"":e)+"}"},VM=Oe,GM=De,FM=(Object.freeze||Object)({addCommas:$o,toCamelCase:Jo,normalizeCssArray:OM,encodeHTML:Qo,formatTpl:ta,formatTplSimple:ea,getTooltipMarker:ia,formatTime:oa,capitalFirst:aa,truncateText:VM,getTextRect:GM}),WM=d,HM=["left","right","top","bottom","width","height"],ZM=[["width","left","right"],["height","top","bottom"]],UM=ra,XM=(v(ra,"vertical"),v(ra,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),jM=Bi(),YM=Lo.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){Lo.call(this,t,e,i,n),this.uid=No("ec_cpt_model")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?da(t):{};n(t,e.getTheme().get(this.mainType)),n(t,this.getDefaultOption()),i&&ca(t,o,i)},mergeOption:function(t,e){n(this.option,t,!0);var i=this.layoutMode;i&&ca(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){var t=jM(this);if(!t.defaultOption){for(var e=[],i=this.constructor;i;){var o=i.prototype.defaultOption;o&&e.push(o),i=i.superClass}for(var a={},r=e.length-1;r>=0;r--)a=n(a,e[r],!0);t.defaultOption=a}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});Ki(YM,{registerWhenExtend:!0}),function(t){var e={};t.registerSubTypeDefaulter=function(t,i){t=Zi(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=Zi(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o}}(YM),function(t,e){function i(t){var i={},a=[];return d(t,function(r){var s=n(i,r),u=o(s.originalDeps=e(r),t);s.entryCount=u.length,0===s.entryCount&&a.push(r),d(u,function(t){l(s.predecessor,t)<0&&s.predecessor.push(t);var e=n(i,t);l(e.successor,t)<0&&e.successor.push(r)})}),{graph:i,noEntryList:a}}function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var i=[];return d(t,function(t){l(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,o){function a(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}if(t.length){var r=i(e),s=r.graph,l=r.noEntryList,u={};for(d(t,function(t){u[t]=!0});l.length;){var h=l.pop(),c=s[h],f=!!u[h];f&&(n.call(o,h,c.originalDeps.slice()),delete u[h]),d(c.successor,f?function(t){u[t]=!0,a(t)}:a)}d(u,function(){throw new Error("Circle dependency may exists")})}}}(YM,function(t){var e=[];return d(YM.getClassesByMainType(t),function(t){e=e.concat(t.prototype.dependencies||[])}),e=f(e,function(t){return Zi(t).main}),"dataset"!==t&&l(e,"dataset")<=0&&e.unshift("dataset"),e}),h(YM,XM);var qM="";"undefined"!=typeof navigator&&(qM=navigator.platform||"");var KM={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:qM.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},$M=Bi(),JM={clearColorPalette:function(){$M(this).colorIdx=0,$M(this).colorNameMap={}},getColorFromPalette:function(t,e,i){var n=$M(e=e||this),o=n.colorIdx||0,a=n.colorNameMap=n.colorNameMap||{};if(a.hasOwnProperty(t))return a[t];var r=Di(this.get("color",!0)),s=this.get("colorLayer",!0),l=null!=i&&s?pa(s,i):r;if((l=l||r)&&l.length){var u=l[o];return t&&(a[t]=u),n.colorIdx=(o+1)%l.length,u}}},QM={cartesian2d:function(t,e,i,n){var o=t.getReferringComponents("xAxis")[0],a=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],i.set("x",o),i.set("y",a),ma(o)&&(n.set("x",o),e.firstCategoryDimIndex=0),ma(a)&&(n.set("y",a),e.firstCategoryDimIndex=1)},singleAxis:function(t,e,i,n){var o=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],i.set("single",o),ma(o)&&(n.set("single",o),e.firstCategoryDimIndex=0)},polar:function(t,e,i,n){var o=t.getReferringComponents("polar")[0],a=o.findAxisModel("radiusAxis"),r=o.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],i.set("radius",a),i.set("angle",r),ma(a)&&(n.set("radius",a),e.firstCategoryDimIndex=0),ma(r)&&(n.set("angle",r),e.firstCategoryDimIndex=1)},geo:function(t,e,i,n){e.coordSysDims=["lng","lat"]},parallel:function(t,e,i,n){var o=t.ecModel,a=o.getComponent("parallel",t.get("parallelIndex")),r=e.coordSysDims=a.dimensions.slice();d(a.parallelAxisIndex,function(t,a){var s=o.getComponent("parallelAxis",t),l=r[a];i.set(l,s),ma(s)&&null==e.firstCategoryDimIndex&&(n.set(l,s),e.firstCategoryDimIndex=a)})}},tI="original",eI="arrayRows",iI="objectRows",nI="keyedColumns",oI="unknown",aI="typedArray",rI="column",sI="row";va.seriesDataToSource=function(t){return new va({data:t,sourceFormat:S(t)?aI:tI,fromDataset:!1})},ji(va);var lI=Bi(),uI="\0_ec_inner",hI=Lo.extend({init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new Lo(i),this._optionManager=n},setOption:function(t,e){k(!(uI in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):Pa.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(this.mergeOption(o),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&d(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){var e=this.option,o=this._componentsMap,r=[];_a(this),d(t,function(t,o){null!=t&&(YM.hasClass(o)?o&&r.push(o):e[o]=null==e[o]?i(t):n(e[o],t,!0))}),YM.topologicalTravel(r,YM.getAllClassMainTypes(),function(i,n){var r=Di(t[i]),s=Pi(o.get(i),r);Ni(s),d(s,function(t,e){var n=t.option;w(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=Oa(i,n,t.exist))});var l=Na(o,n);e[i]=[],o.set(i,[]),d(s,function(t,n){var r=t.exist,s=t.option;if(k(w(s)||r,"Empty component definition"),s){var u=YM.getClass(i,t.keyInfo.subType,!0);if(r&&r instanceof u)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var h=a({dependentModels:l,componentIndex:n},t.keyInfo);a(r=new u(s,this,this,h),h),r.init(s,this,this,h),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);o.get(i)[n]=r,e[i][n]=r.option},this),"series"===i&&Ea(this,o.get("series"))},this),this._seriesIndicesMap=R(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=i(this.option);return d(t,function(e,i){if(YM.hasClass(i)){for(var n=(e=Di(e)).length-1;n>=0;n--)Ei(e[n])&&e.splice(n,1);t[i]=e}}),delete t[uI],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var r;if(null!=i)y(i)||(i=[i]),r=g(f(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=y(n);r=g(a,function(t){return s&&l(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var u=y(o);r=g(a,function(t){return u&&l(o,t.name)>=0||!u&&t.name===o})}else r=a.slice();return Ra(r,t)},findComponents:function(t){var e=t.query,i=t.mainType,n=function(t){var e=i+"Index",n=i+"Id",o=i+"Name";return!t||null==t[e]&&null==t[n]&&null==t[o]?null:{mainType:i,index:t[e],id:t[n],name:t[o]}}(e);return function(e){return t.filter?g(e,t.filter):e}(Ra(n?this.queryComponents(n):this._componentsMap.get(i),t))},eachComponent:function(t,e,i){var n=this._componentsMap;"function"==typeof t?(i=e,e=t,n.each(function(t,n){d(t,function(t,o){e.call(i,n,t,o)})})):_(t)?d(n.get(t),e,i):w(t)&&d(this.findComponents(t),e,i)},getSeriesByName:function(t){return g(this._componentsMap.get("series"),function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){return g(this._componentsMap.get("series"),function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){d(this._seriesIndices,function(i){var n=this._componentsMap.get("series")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){d(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,i){d(this._seriesIndices,function(n){var o=this._componentsMap.get("series")[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return d(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){Ea(this,g(this._componentsMap.get("series"),t,e))},restoreData:function(t){var e=this._componentsMap;Ea(this,e.get("series"));var i=[];e.each(function(t,e){i.push(e)}),YM.topologicalTravel(i,YM.getAllClassMainTypes(),function(i,n){d(e.get(i),function(e){("series"!==i||!La(e,t))&&e.restoreData()})})}});h(hI,JM);var cI=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],dI={};Ba.prototype={constructor:Ba,create:function(t,e){var i=[];d(dI,function(n,o){var a=n.create(t,e);i=i.concat(a||[])}),this._coordinateSystems=i},update:function(t,e){d(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},Ba.register=function(t,e){dI[t]=e},Ba.get=function(t){return dI[t]};var fI=d,pI=i,gI=f,mI=n,vI=/^(min|max)?(.+)$/;Va.prototype={constructor:Va,setOption:function(t,e){t&&d(Di(t.series),function(t){t&&t.data&&S(t.data)&&N(t.data)}),t=pI(t,!0);var i=this._optionBackup,n=Ga.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(Za(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=gI(e.timelineOptions,pI),this._mediaList=gI(e.mediaList,pI),this._mediaDefault=pI(e.mediaDefault),this._currentMediaIndices=[],pI(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=pI(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],r=[];if(!n.length&&!o)return r;for(var s=0,l=n.length;s=1)&&(t=1),t}var i=this._upstream,n=t&&t.skip;if(this._dirty&&i){var o=this.context;o.data=o.outputData=i.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var r=e(this._modBy),s=this._modDataCount||0,l=e(t&&t.modBy),u=t&&t.modDataCount||0;r===l&&s===u||(a="reset");var h;(this._dirty||"reset"===a)&&(this._dirty=!1,h=gr(this,n)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=i?i._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,f=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!n&&(h||d=i?null:t1&&a>0?e:t}};return s}();kI.dirty=function(){this._dirty=!0,this._onDirty&&this._onDirty(this.context)},kI.unfinished=function(){return this._progress&&this._dueIndex":"\n",s="richText"===n,l={},u=0,h=this.getData(),c=h.mapDimension("defaultedTooltip",!0),f=c.length,g=this.getRawValue(t),m=y(g),v=h.getItemVisual(t,"color");w(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var x=(f>1||m&&!f?function(i){function o(t,i){var o=h.getDimensionInfo(i);if(o&&!1!==o.otherDims.tooltip){var c=o.type,d="sub"+a.seriesIndex+"at"+u,p=ia({color:v,type:"subItem",renderMode:n,markerId:d}),g="string"==typeof p?p:p.content,m=(r?g+Qo(o.displayName||"-")+": ":"")+Qo("ordinal"===c?t+"":"time"===c?e?"":oa("yyyy/MM/dd hh:mm:ss",t):$o(t));m&&f.push(m),s&&(l[d]=v,++u)}}var r=p(i,function(t,e,i){var n=h.getDimensionInfo(i);return t|=n&&!1!==n.tooltip&&null!=n.displayName},0),f=[];c.length?d(c,function(e){o(hr(h,t,e),e)}):d(i,o);var g=r?s?"\n":"
    ":"",m=g+f.join(g||", ");return{renderMode:n,content:m,style:l}}(g):o(f?hr(h,t,c[0]):m?g[0]:g)).content,_=a.seriesIndex+"at"+u,b=ia({color:v,type:"item",renderMode:n,markerId:_});l[_]=v,++u;var S=h.getName(t),M=this.name;Oi(this)||(M=""),M=M?Qo(M)+(e?": ":r):"";var I="string"==typeof b?b:b.content;return{html:e?I+M+x:M+I+(S?Qo(S)+": "+x:x),markers:l}},isAnimationEnabled:function(){if(z_.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,o=JM.getColorFromPalette.call(this,t,e,i);return o||(o=n.getColorFromPalette(t,e,i)),o},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});h(OI,LI),h(OI,JM);var EI=function(){this.group=new Zw,this.uid=No("viewComponent")};EI.prototype={constructor:EI,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var RI=EI.prototype;RI.updateView=RI.updateLayout=RI.updateVisual=function(t,e,i,n){},Xi(EI),Ki(EI,{registerWhenExtend:!0});var zI=function(){var t=Bi();return function(e){var i=t(e),n=e.pipelineContext,o=i.large,a=i.progressiveRender,r=i.large=n.large,s=i.progressiveRender=n.progressiveRender;return!!(o^r||a^s)&&"reset"}},BI=Bi(),VI=zI();Mr.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Tr(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Tr(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var GI=Mr.prototype;GI.updateView=GI.updateLayout=GI.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},Xi(Mr),Ki(Mr,{registerWhenExtend:!0}),Mr.markUpdateMethod=function(t,e){BI(t).updateMethod=e};var FI={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},WI="\0__throttleOriginMethod",HI="\0__throttleRate",ZI="\0__throttleType",UI={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var i=t.getData(),n=(t.visualColorAccessPath||"itemStyle.color").split("."),o=t.get(n)||t.getColorFromPalette(t.name,null,e.getSeriesCount());if(i.setVisual("color",o),!e.isSeriesFiltered(t)){"function"!=typeof o||o instanceof cM||i.each(function(e){i.setItemVisual(e,"color",o(t.getDataParams(e)))});return{dataEach:i.hasItemOption?function(t,e){var i=t.getItemModel(e).get(n,!0);null!=i&&t.setItemVisual(e,"color",i)}:null}}}},XI={toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},jI=function(t,e){function i(t,e){if("string"!=typeof t)return t;var i=t;return d(e,function(t,e){i=i.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),i}function n(t){var e=a.get(t);if(null==e){for(var i=t.split("."),n=XI.aria,o=0;o1?"series.multiple.prefix":"series.single.prefix"),{seriesCount:r}),e.eachSeries(function(t,e){if(e1?"multiple":"single")+".";a=i(a=n(s?u+"withName":u+"withoutName"),{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:o(t.subType)});var c=t.getData();window.data=c,c.count()>l?a+=i(n("data.partialData"),{displayCnt:l}):a+=n("data.allData");for(var d=[],p=0;pi.blockIndex?i.step:null,a=n&&n.modDataCount;return{step:o,modBy:null!=a?Math.ceil(a/o):null,modDataCount:a}}},qI.getPipeline=function(t){return this._pipelineMap.get(t)},qI.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),o=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,a=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:o,modDataCount:r,large:a}},qI.restorePipelines=function(t){var e=this,i=e._pipelineMap=R();t.eachSeries(function(t){var n=t.getProgressive(),o=t.uid;i.set(o,{id:o,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:n&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(n||700),count:0}),Zr(e,t,t.dataTask)})},qI.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),i=this.api;d(this._allHandlers,function(n){var o=t.get(n.uid)||t.set(n.uid,[]);n.reset&&Or(this,n,o,e,i),n.overallReset&&Er(this,n,o,e,i)},this)},qI.prepareView=function(t,e,i,n){var o=t.renderTask,a=o.context;a.model=e,a.ecModel=i,a.api=n,o.__block=!t.incrementalPrepareRender,Zr(this,e,o)},qI.performDataProcessorTasks=function(t,e){Nr(this,this._dataProcessorHandlers,t,e,{block:!0})},qI.performVisualTasks=function(t,e,i){Nr(this,this._visualHandlers,t,e,i)},qI.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},qI.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var KI=qI.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},$I=Wr(0);Pr.wrapStageHandler=function(t,e){return x(t)&&(t={overallReset:t,seriesType:Ur(t)}),t.uid=No("stageHandler"),e&&(t.visualType=e),t};var JI,QI={},tT={};Xr(QI,hI),Xr(tT,za),QI.eachSeriesByType=QI.eachRawSeriesByType=function(t){JI=t},QI.eachComponent=function(t){"series"===t.mainType&&t.subType&&(JI=t.subType)};var eT=["#37A2DA","#32C5E9","#67E0E3","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#E062AE","#E690D1","#e7bcf3","#9d96f5","#8378EA","#96BFFF"],iT={color:eT,colorLayer:[["#37A2DA","#ffd85c","#fd7b5f"],["#37A2DA","#67E0E3","#FFDB5C","#ff9f7f","#E062AE","#9d96f5"],["#37A2DA","#32C5E9","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#e7bcf3","#8378EA","#96BFFF"],eT]},nT=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],oT={color:nT,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:"#eee"},crossStyle:{color:"#eee"}}},legend:{textStyle:{color:"#eee"}},textStyle:{color:"#eee"},title:{textStyle:{color:"#eee"}},toolbox:{iconStyle:{normal:{borderColor:"#eee"}}},dataZoom:{textStyle:{color:"#eee"}},visualMap:{textStyle:{color:"#eee"}},timeline:{lineStyle:{color:"#eee"},itemStyle:{normal:{color:nT[1]}},label:{normal:{textStyle:{color:"#eee"}}},controlStyle:{normal:{color:"#eee",borderColor:"#eee"}}},timeAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},logAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},valueAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},categoryAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},line:{symbol:"circle"},graph:{color:nT},gauge:{title:{textStyle:{color:"#eee"}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};oT.categoryAxis.splitLine.show=!1,YM.extend({type:"dataset",defaultOption:{seriesLayoutBy:rI,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){ya(this)}}),EI.extend({type:"dataset"});var aT=kn.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(t,e){var i=.5522848,n=e.cx,o=e.cy,a=e.rx,r=e.ry,s=a*i,l=r*i;t.moveTo(n-a,o),t.bezierCurveTo(n-a,o-l,n-s,o-r,n,o-r),t.bezierCurveTo(n+s,o-r,n+a,o-l,n+a,o),t.bezierCurveTo(n+a,o+l,n+s,o+r,n,o+r),t.bezierCurveTo(n-s,o+r,n-a,o+l,n-a,o),t.closePath()}}),rT=/[\s,]+/;Yr.prototype.parse=function(t,e){e=e||{};var i=jr(t);if(!i)throw new Error("Illegal svg");var n=new Zw;this._root=n;var o=i.getAttribute("viewBox")||"",a=parseFloat(i.getAttribute("width")||e.width),r=parseFloat(i.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(r)&&(r=null),Jr(i,n,null,!0);for(var s=i.firstChild;s;)this._parseNode(s,n),s=s.nextSibling;var l,u;if(o){var h=P(o).split(rT);h.length>=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=r&&(u=is(l,a,r),!e.ignoreViewBox)){var c=n;(n=new Zw).add(c),c.scale=u.scale.slice(),c.position=u.position.slice()}return e.ignoreRootClip||null==a||null==r||n.setClipPath(new aM({shape:{x:0,y:0,width:a,height:r}})),{root:n,width:a,height:r,viewBoxRect:l,viewBoxTransform:u}},Yr.prototype._parseNode=function(t,e){var i=t.nodeName.toLowerCase();"defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0);var n;if(this._isDefine){if(r=lT[i]){var o=r.call(this,t),a=t.getAttribute("id");a&&(this._defs[a]=o)}}else{var r=sT[i];r&&(n=r.call(this,t,e),e.add(n))}for(var s=t.firstChild;s;)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},Yr.prototype._parseText=function(t,e){if(1===t.nodeType){var i=t.getAttribute("dx")||0,n=t.getAttribute("dy")||0;this._textX+=parseFloat(i),this._textY+=parseFloat(n)}var o=new qS({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});Kr(e,o),Jr(t,o,this._defs);var a=o.style.fontSize;a&&a<9&&(o.style.fontSize=9,o.scale=o.scale||[1,1],o.scale[0]*=a/9,o.scale[1]*=a/9);var r=o.getBoundingRect();return this._textX+=r.width,e.add(o),o};var sT={g:function(t,e){var i=new Zw;return Kr(e,i),Jr(t,i,this._defs),i},rect:function(t,e){var i=new aM;return Kr(e,i),Jr(t,i,this._defs),i.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),i},circle:function(t,e){var i=new KS;return Kr(e,i),Jr(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),i},line:function(t,e){var i=new rM;return Kr(e,i),Jr(t,i,this._defs),i.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),i},ellipse:function(t,e){var i=new aT;return Kr(e,i),Jr(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),i},polygon:function(t,e){var i=t.getAttribute("points");i&&(i=$r(i));var n=new nM({shape:{points:i||[]}});return Kr(e,n),Jr(t,n,this._defs),n},polyline:function(t,e){var i=new kn;Kr(e,i),Jr(t,i,this._defs);var n=t.getAttribute("points");return n&&(n=$r(n)),new oM({shape:{points:n||[]}})},image:function(t,e){var i=new hi;return Kr(e,i),Jr(t,i,this._defs),i.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),i},text:function(t,e){var i=t.getAttribute("x")||0,n=t.getAttribute("y")||0,o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(i)+parseFloat(o),this._textY=parseFloat(n)+parseFloat(a);var r=new Zw;return Kr(e,r),Jr(t,r,this._defs),r},tspan:function(t,e){var i=t.getAttribute("x"),n=t.getAttribute("y");null!=i&&(this._textX=parseFloat(i)),null!=n&&(this._textY=parseFloat(n));var o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,r=new Zw;return Kr(e,r),Jr(t,r,this._defs),this._textX+=o,this._textY+=a,r},path:function(t,e){var i=En(t.getAttribute("d")||"");return Kr(e,i),Jr(t,i,this._defs),i}},lT={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),i=parseInt(t.getAttribute("y1")||0,10),n=parseInt(t.getAttribute("x2")||10,10),o=parseInt(t.getAttribute("y2")||0,10),a=new dM(e,i,n,o);return qr(t,a),a},radialgradient:function(t){}},uT={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-align":"textAlign","alignment-baseline":"textBaseline"},hT=/url\(\s*#(.*?)\)/,cT=/(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,dT=/([^\s:;]+)\s*:\s*([^:;]+)/g,fT=R(),pT={registerMap:function(t,e,i){var n;return y(e)?n=e:e.svg?n=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),n=[{type:"geoJSON",source:e,specialAreas:i}]),d(n,function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON"),(0,gT[e])(t)}),fT.set(t,n)},retrieveMap:function(t){return fT.get(t)}},gT={geoJSON:function(t){var e=t.source;t.geoJSON=_(e)?"undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=jr(t.source)}},mT=k,vT=d,yT=x,xT=w,_T=YM.parseClassType,wT={zrender:"4.0.5"},bT=1e3,ST=1e3,MT=3e3,IT={PROCESSOR:{FILTER:bT,STATISTIC:5e3},VISUAL:{LAYOUT:ST,GLOBAL:2e3,CHART:MT,COMPONENT:4e3,BRUSH:5e3}},TT="__flagInMainProcess",AT="__optionUpdated",DT=/^[a-zA-Z0-9_]+$/;as.prototype.on=os("on"),as.prototype.off=os("off"),as.prototype.one=os("one"),h(as,aw);var CT=rs.prototype;CT._onframe=function(){if(!this._disposed){var t=this._scheduler;if(this[AT]){var e=this[AT].silent;this[TT]=!0,ls(this),LT.update.call(this),this[TT]=!1,this[AT]=!1,ds.call(this,e),fs.call(this,e)}else if(t.unfinished){var i=1,n=this._model;this._api;t.unfinished=!1;do{var o=+new Date;t.performSeriesTasks(n),t.performDataProcessorTasks(n),hs(this,n),t.performVisualTasks(n),xs(this,this._model,0,"remain"),i-=+new Date-o}while(i>0&&t.unfinished);t.unfinished||this._zr.flush()}}},CT.getDom=function(){return this._dom},CT.getZr=function(){return this._zr},CT.setOption=function(t,e,i){var n;if(xT(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[TT]=!0,!this._model||e){var o=new Va(this._api),a=this._theme,r=this._model=new hI(null,null,a,o);r.scheduler=this._scheduler,r.init(null,null,a,o)}this._model.setOption(t,ET),i?(this[AT]={silent:n},this[TT]=!1):(ls(this),LT.update.call(this),this._zr.flush(),this[AT]=!1,this[TT]=!1,ds.call(this,n),fs.call(this,n))},CT.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},CT.getModel=function(){return this._model},CT.getOption=function(){return this._model&&this._model.getOption()},CT.getWidth=function(){return this._zr.getWidth()},CT.getHeight=function(){return this._zr.getHeight()},CT.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},CT.getRenderedCanvas=function(t){if(z_.canvasSupported)return(t=t||{}).pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor"),this._zr.painter.getRenderedCanvas(t)},CT.getSvgDataUrl=function(){if(z_.svgSupported){var t=this._zr;return d(t.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),t.painter.pathToDataUrl()}},CT.getDataURL=function(t){var e=(t=t||{}).excludeComponents,i=this._model,n=[],o=this;vT(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return vT(n,function(t){t.group.ignore=!1}),a},CT.getConnectedDataURL=function(t){if(z_.canvasSupported){var e=this.group,n=Math.min,o=Math.max;if(FT[e]){var a=1/0,r=1/0,s=-1/0,l=-1/0,u=[],h=t&&t.pixelRatio||1;d(GT,function(h,c){if(h.group===e){var d=h.getRenderedCanvas(i(t)),f=h.getDom().getBoundingClientRect();a=n(f.left,a),r=n(f.top,r),s=o(f.right,s),l=o(f.bottom,l),u.push({dom:d,left:f.left,top:f.top})}});var c=(s*=h)-(a*=h),f=(l*=h)-(r*=h),p=Y_();p.width=c,p.height=f;var g=Ii(p);return vT(u,function(t){var e=new hi({style:{x:t.left*h-a,y:t.top*h-r,image:t.dom}});g.add(e)}),g.refreshImmediately(),p.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},CT.convertToPixel=v(ss,"convertToPixel"),CT.convertFromPixel=v(ss,"convertFromPixel"),CT.containPixel=function(t,e){var i;return t=Vi(this._model,t),d(t,function(t,n){n.indexOf("Models")>=0&&d(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},CT.getVisual=function(t,e){var i=(t=Vi(this._model,t,{defaultMainType:"series"})).seriesModel.getData(),n=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},CT.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},CT.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var LT={prepareAndUpdate:function(t){ls(this),LT.update.call(this,t)},update:function(t){var e=this._model,i=this._api,n=this._zr,o=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),o.create(e,i),a.performDataProcessorTasks(e,t),hs(this,e),o.update(e,i),ms(e),a.performVisualTasks(e,t),vs(this,e,i,t);var r=e.get("backgroundColor")||"transparent";if(z_.canvasSupported)n.setBackgroundColor(r);else{var s=zt(r);r=Xt(s,"rgb"),0===s[3]&&(r="transparent")}_s(e,i)}},updateTransform:function(t){var e=this._model,i=this,n=this._api;if(e){var o=[];e.eachComponent(function(a,r){var s=i.getViewOfComponentModel(r);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(r,e,n,t);l&&l.update&&o.push(s)}else o.push(s)});var a=R();e.eachSeries(function(o){var r=i._chartsMap[o.__viewId];if(r.updateTransform){var s=r.updateTransform(o,e,n,t);s&&s.update&&a.set(o.uid,1)}else a.set(o.uid,1)}),ms(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),xs(i,e,0,t,a),_s(e,this._api)}},updateView:function(t){var e=this._model;e&&(Mr.markUpdateMethod(t,"updateView"),ms(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),vs(this,this._model,this._api,t),_s(e,this._api))},updateVisual:function(t){LT.update.call(this,t)},updateLayout:function(t){LT.update.call(this,t)}};CT.resize=function(t){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[TT]=!0,i&&ls(this),LT.update.call(this),this[TT]=!1,ds.call(this,n),fs.call(this,n)}},CT.showLoading=function(t,e){if(xT(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),VT[t]){var i=VT[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},CT.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},CT.makeActionFromEvent=function(t){var e=a({},t);return e.type=NT[t.type],e},CT.dispatchAction=function(t,e){xT(e)||(e={silent:!!e}),PT[t.type]&&this._model&&(this[TT]?this._pendingActions.push(t):(cs.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&z_.browser.weChat&&this._throttledZrFlush(),ds.call(this,e.silent),fs.call(this,e.silent)))},CT.appendData=function(t){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0},CT.on=os("on"),CT.off=os("off"),CT.one=os("one");var kT=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];CT._initEvents=function(){vT(kT,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType,o)||{}}else o&&o.eventData&&(i=a({},o.eventData));if(i){var s=i.componentType,l=i.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=i.seriesIndex);var u=s&&null!=l&&n.getComponent(s,l),h=u&&this["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];i.event=e,i.type=t,this._ecEventProcessor.eventInfo={targetEl:o,packedEvent:i,model:u,view:h},this.trigger(t,i)}},this)},this),vT(NT,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},CT.isDisposed=function(){return this._disposed},CT.clear=function(){this.setOption({series:[]},!0)},CT.dispose=function(){if(!this._disposed){this._disposed=!0,Fi(this.getDom(),ZT,"");var t=this._api,e=this._model;vT(this._componentsViews,function(i){i.dispose(e,t)}),vT(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete GT[this.id]}},h(rs,aw),Is.prototype={constructor:Is,normalizeQuery:function(t){var e={},i={},n={};if(_(t)){var o=_T(t);e.mainType=o.main||null,e.subType=o.sub||null}else{var a=["Index","Name","Id"],r={name:1,dataIndex:1,dataType:1};d(t,function(t,o){for(var s=!1,l=0;l0&&h===o.length-u.length){var c=o.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}r.hasOwnProperty(o)&&(i[o]=t,s=!0),s||(n[o]=t)})}return{cptQuery:e,dataQuery:i,otherQuery:n}},filter:function(t,e,i){function n(t,e,i,n){return null==t[i]||e[n||i]===t[i]}var o=this.eventInfo;if(!o)return!0;var a=o.targetEl,r=o.packedEvent,s=o.model,l=o.view;if(!s||!l)return!0;var u=e.cptQuery,h=e.dataQuery;return n(u,s,"mainType")&&n(u,s,"subType")&&n(u,s,"index","componentIndex")&&n(u,s,"name")&&n(u,s,"id")&&n(h,r,"name")&&n(h,r,"dataIndex")&&n(h,r,"dataType")&&(!l.filterForExposedEvent||l.filterForExposedEvent(t,e.otherQuery,a,r))},afterTrigger:function(){this.eventInfo=null}};var PT={},NT={},OT=[],ET=[],RT=[],zT=[],BT={},VT={},GT={},FT={},WT=new Date-0,HT=new Date-0,ZT="_echarts_instance_",UT=As;Es(2e3,UI),Ls(MI),ks(5e3,function(t){var e=R();t.eachSeries(function(t){var i=t.get("stack");if(i){var n=e.get(i)||e.set(i,[]),o=t.getData(),a={stackResultDimension:o.getCalculationInfo("stackResultDimension"),stackedOverDimension:o.getCalculationInfo("stackedOverDimension"),stackedDimension:o.getCalculationInfo("stackedDimension"),stackedByDimension:o.getCalculationInfo("stackedByDimension"),isStackedByIndex:o.getCalculationInfo("isStackedByIndex"),data:o,seriesModel:t};if(!a.stackedDimension||!a.isStackedByIndex&&!a.stackedByDimension)return;n.length&&o.setCalculationInfo("stackedOnSeries",n[n.length-1].seriesModel),n.push(a)}}),e.each(ir)}),zs("default",function(t,e){r(e=e||{},{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new aM({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new uM({shape:{startAngle:-YI/2,endAngle:-YI/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),o=new aM({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*YI/2}).start("circularInOut"),n.animateShape(!0).when(1e3,{startAngle:3*YI/2}).delay(300).start("circularInOut");var a=new Zw;return a.add(n),a.add(o),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var r=n.shape.r;o.setShape({x:e-r,y:a-r,width:2*r,height:2*r}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a}),Ps({type:"highlight",event:"highlight",update:"highlight"},B),Ps({type:"downplay",event:"downplay",update:"downplay"},B),Cs("light",iT),Cs("dark",oT);var XT={};Hs.prototype={constructor:Hs,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t=this._old,e=this._new,i={},n=[],o=[];for(Zs(t,{},n,"_oldKeyGetter",this),Zs(e,i,o,"_newKeyGetter",this),a=0;a=e)){for(var i,n=this._chunkSize,o=this._rawData,a=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=f-1,g=0;gC[1]&&(C[1]=D)}if(!o.pure){var L=u[b];if(w&&null==L)if(null!=w.name)u[b]=L=w.name;else if(null!=i){var k=r[i],P=a[k][S];if(P){L=P[M];var N=l[k].ordinalMeta;N&&N.categories.length&&(L=N.categories[L])}}var O=null==w?null:w.id;null==O&&null!=L&&(d[L]=d[L]||0,O=L,d[L]>0&&(O+="__ec__"+d[L]),d[L]++),null!=O&&(h[b]=O)}}!o.persistent&&o.clean&&o.clean(),this._rawCount=this._count=e,this._extent={},$s(this)}},iA.count=function(){return this._count},iA.getIndices=function(){var t=this._indices;if(t){var e=t.constructor,i=this._count;if(e===Array){n=new e(i);for(o=0;o=0&&e=0&&ea&&(a=s)}return i=[o,a],this._extent[t]=i,i},iA.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},iA.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},iA.getCalculationInfo=function(t){return this._calculationInfo[t]},iA.setCalculationInfo=function(t,e){YT(t)?a(this._calculationInfo,t):this._calculationInfo[t]=e},iA.getSum=function(t){var e=0;if(this._storage[t])for(var i=0,n=this.count();i=this._rawCount||t<0)return-1;var e=this._indices,i=e[t];if(null!=i&&it))return a;o=a-1}}return-1},iA.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var o=Number.MAX_VALUE,a=-1,r=0,s=this.count();r=0&&a<0)&&(o=u,a=l,n.length=0),n.push(r))}return n},iA.getRawIndex=Qs,iA.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],i=0;i=l&&w<=u||isNaN(w))&&(a[r++]=c),c++;h=!0}else if(2===n){for(var d=this._storage[s],v=this._storage[e[1]],y=t[e[1]][0],x=t[e[1]][1],f=0;f=l&&w<=u||isNaN(w))&&(b>=y&&b<=x||isNaN(b))&&(a[r++]=c),c++}h=!0}}if(!h)if(1===n)for(m=0;m=l&&w<=u||isNaN(w))&&(a[r++]=M)}else for(m=0;mt[I][1])&&(S=!1)}S&&(a[r++]=this.getRawIndex(m))}return rb[1]&&(b[1]=w)}}}return o},iA.downSample=function(t,e,i,n){for(var o=nl(this,[t]),a=o._storage,r=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=o._rawExtent[t],d=new(Ys(this))(u),f=0,p=0;pu-p&&(s=u-p,r.length=s);for(var g=0;gc[1]&&(c[1]=x),d[f++]=_}return o._count=f,o._indices=d,o.getRawIndex=tl,o},iA.getItemModel=function(t){var e=this.hostModel;return new Lo(this.getRawDataItem(t),e,e&&e.ecModel)},iA.diff=function(t){var e=this;return new Hs(t?t.getIndices():[],this.getIndices(),function(e){return el(t,e)},function(t){return el(e,t)})},iA.getVisual=function(t){var e=this._visual;return e&&e[t]},iA.setVisual=function(t,e){if(YT(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},iA.setLayout=function(t,e){if(YT(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},iA.getLayout=function(t){return this._layout[t]},iA.getItemLayout=function(t){return this._itemLayouts[t]},iA.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?a(this._itemLayouts[t]||{},e):e},iA.clearItemLayouts=function(){this._itemLayouts.length=0},iA.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},iA.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},o=this.hasItemVisual;if(this._itemVisuals[t]=n,YT(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],o[a]=!0);else n[e]=i,o[e]=!0},iA.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var nA=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};iA.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(nA,e)),this._graphicEls[t]=e},iA.getItemGraphicEl=function(t){return this._graphicEls[t]},iA.eachItemGraphicEl=function(t,e){d(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},iA.cloneShallow=function(t){if(!t){var e=f(this.dimensions,this.getDimensionInfo,this);t=new eA(e,this.hostModel)}if(t._storage=this._storage,Ks(t,this),this._indices){var i=this._indices.constructor;t._indices=new i(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?tl:Qs,t},iA.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(C(arguments)))})},iA.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],iA.CHANGABLE_METHODS=["filterSelf","selectRange"];var oA=function(t,e){return e=e||{},rl(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})};gl.prototype.parse=function(t){return t},gl.prototype.getSetting=function(t){return this._setting[t]},gl.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},gl.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},gl.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},gl.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},gl.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},gl.prototype.getExtent=function(){return this._extent.slice()},gl.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},gl.prototype.isBlank=function(){return this._isBlank},gl.prototype.setBlank=function(t){this._isBlank=t},gl.prototype.getLabel=null,Xi(gl),Ki(gl,{registerWhenExtend:!0}),ml.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&f(i,yl);return new ml({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var aA=ml.prototype;aA.getOrdinal=function(t){return vl(this).get(t)},aA.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=vl(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var rA=gl.prototype,sA=gl.extend({type:"ordinal",init:function(t,e){t&&!y(t)||(t=new ml({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),rA.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return rA.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(rA.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:B,niceExtent:B});sA.create=function(){return new sA};var lA=zo,uA=zo,hA=gl.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),hA.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=_l(t)},getTicks:function(){return Sl(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getLabel:function(t,e){if(null==t)return"";var i=e&&e.precision;return null==i?i=Go(t)||0:"auto"===i&&(i=this._intervalPrecision),t=uA(t,i,!0),$o(t)},niceTicks:function(t,e,i){t=t||5;var n=this._extent,o=n[1]-n[0];if(isFinite(o)){o<0&&(o=-o,n.reverse());var a=xl(n,t,e,i);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var i=e[0];t.fixMax?e[0]-=i/2:(e[1]+=i/2,e[0]-=i/2)}else e[1]=1;var n=e[1]-e[0];isFinite(n)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var o=this._interval;t.fixMin||(e[0]=uA(Math.floor(e[0]/o)*o)),t.fixMax||(e[1]=uA(Math.ceil(e[1]/o)*o))}});hA.create=function(){return new hA};var cA="__ec_stack_",dA="undefined"!=typeof Float32Array?Float32Array:Array,fA={seriesType:"bar",plan:zI(),reset:function(t){if(Pl(t)&&Nl(t)){var e=t.getData(),i=t.coordinateSystem,n=i.getBaseAxis(),o=i.getOtherAxis(n),a=e.mapDimension(o.dim),r=e.mapDimension(n.dim),s=o.isHorizontal(),l=s?0:1,u=Ll(Dl([t]),n,t).width;return u>.5||(u=.5),{progress:function(t,e){for(var n,h=new dA(2*t.count),c=[],d=[],f=0;null!=(n=t.next());)d[l]=e.get(a,n),d[1-l]=e.get(r,n),c=i.dataToPoint(d,null,c),h[f++]=c[0],h[f++]=c[1];e.setLayout({largePoints:h,barWidth:u,valueAxisStart:Ol(0,o),valueAxisHorizontal:s})}}}}},pA=hA.prototype,gA=Math.ceil,mA=Math.floor,vA=function(t,e,i,n){for(;i>>1;t[o][1]i&&(a=i);var r=xA.length,s=vA(xA,a,0,r),l=xA[Math.min(s,r-1)],u=l[1];"year"===l[0]&&(u*=Yo(o/u/t,!0));var h=this.getSetting("useUTC")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,c=[Math.round(gA((n[0]-h)/u)*u+h),Math.round(mA((n[1]-h)/u)*u+h)];bl(c,n),this._stepLvl=l,this._interval=u,this._niceExtent=c},parse:function(t){return+Uo(t)}});d(["contain","normalize"],function(t){yA.prototype[t]=function(e){return pA[t].call(this,this.parse(e))}});var xA=[["hh:mm:ss",1e3],["hh:mm:ss",5e3],["hh:mm:ss",1e4],["hh:mm:ss",15e3],["hh:mm:ss",3e4],["hh:mm\nMM-dd",6e4],["hh:mm\nMM-dd",3e5],["hh:mm\nMM-dd",6e5],["hh:mm\nMM-dd",9e5],["hh:mm\nMM-dd",18e5],["hh:mm\nMM-dd",36e5],["hh:mm\nMM-dd",72e5],["hh:mm\nMM-dd",216e5],["hh:mm\nMM-dd",432e5],["MM-dd\nyyyy",864e5],["MM-dd\nyyyy",1728e5],["MM-dd\nyyyy",2592e5],["MM-dd\nyyyy",3456e5],["MM-dd\nyyyy",432e6],["MM-dd\nyyyy",5184e5],["week",6048e5],["MM-dd\nyyyy",864e6],["week",12096e5],["week",18144e5],["month",26784e5],["week",36288e5],["month",53568e5],["week",6048e6],["quarter",8208e6],["month",107136e5],["month",13392e6],["half-year",16416e6],["month",214272e5],["month",26784e6],["year",32832e6]];yA.create=function(t){return new yA({useUTC:t.ecModel.get("useUTC")})};var _A=gl.prototype,wA=hA.prototype,bA=Go,SA=zo,MA=Math.floor,IA=Math.ceil,TA=Math.pow,AA=Math.log,DA=gl.extend({type:"log",base:10,$constructor:function(){gl.apply(this,arguments),this._originalScale=new hA},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return f(wA.getTicks.call(this),function(n){var o=zo(TA(this.base,n));return o=n===e[0]&&t.__fixMin?El(o,i[0]):o,o=n===e[1]&&t.__fixMax?El(o,i[1]):o},this)},getLabel:wA.getLabel,scale:function(t){return t=_A.scale.call(this,t),TA(this.base,t)},setExtent:function(t,e){var i=this.base;t=AA(t)/AA(i),e=AA(e)/AA(i),wA.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=_A.getExtent.call(this);e[0]=TA(t,e[0]),e[1]=TA(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=El(e[0],n[0])),i.__fixMax&&(e[1]=El(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=AA(t[0])/AA(e),t[1]=AA(t[1])/AA(e),_A.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=Xo(i);for(t/i*n<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var o=[zo(IA(e[0]/n)*n),zo(MA(e[1]/n)*n)];this._interval=n,this._niceExtent=o}},niceExtent:function(t){wA.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});d(["contain","normalize"],function(t){DA.prototype[t]=function(e){return e=AA(e)/AA(this.base),_A[t].call(this,e)}}),DA.create=function(){return new DA};var CA={getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&"dataMin"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&"dataMax"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},getCoordSysModel:B,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},LA=Fn({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n+a),t.lineTo(i-o,n+a),t.closePath()}}),kA=Fn({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.lineTo(i-o,n),t.closePath()}}),PA=Fn({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,a=Math.max(o,e.height),r=o/2,s=r*r/(a-r),l=n-a+r+s,u=Math.asin(s/r),h=Math.cos(u)*r,c=Math.sin(u),d=Math.cos(u),f=.6*r,p=.7*r;t.moveTo(i-h,l+s),t.arc(i,l,r,Math.PI-u,2*Math.PI+u),t.bezierCurveTo(i+h-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-h+c*f,l+s+d*f,i-h,l+s),t.closePath()}}),NA=Fn({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,a=e.y,r=n/3*2;t.moveTo(o,a),t.lineTo(o+r,a+i),t.lineTo(o,a+i/4*3),t.lineTo(o-r,a+i),t.lineTo(o,a),t.closePath()}}),OA={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var a=Math.min(i,n);o.x=t,o.y=e,o.width=a,o.height=a},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},EA={};d({line:rM,rect:aM,roundRect:aM,square:aM,circle:KS,diamond:kA,pin:PA,arrow:NA,triangle:LA},function(t,e){EA[e]=new t});var RA=Fn({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style;"pin"===this.shape.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=EA[n];"none"!==e.symbolType&&(o||(o=EA[n="rect"]),OA[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),zA={isDimensionStacked:hl,enableDataStack:ul,getStackedDimension:cl},BA=(Object.freeze||Object)({createList:function(t){return dl(t.getSource(),t)},getLayoutRect:la,dataStack:zA,createScale:function(t,e){var i=e;Lo.isInstance(e)||h(i=new Lo(e),CA);var n=Vl(i);return n.setExtent(t[0],t[1]),Bl(n,i),n},mixinAxisModelCommonMethods:function(t){h(t,CA)},completeDimensions:rl,createDimensions:oA,createSymbol:Xl}),VA=1e-8;ql.prototype={constructor:ql,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;s0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,o=[];"Polygon"===i.type&&o.push({type:"polygon",exterior:n[0],interiors:n.slice(1)}),"MultiPolygon"===i.type&&d(n,function(t){t[0]&&o.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new ql(e.name,o,e.cp);return a.properties=e,a})},FA=Bi(),WA=[0,1],HA=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};HA.prototype={constructor:HA,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return Fo(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&"ordinal"===n.type&&fu(i=i.slice(),n.count()),Eo(t,WA,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&"ordinal"===n.type&&fu(i=i.slice(),n.count());var o=Eo(t,i,WA,e);return this.scale.scale(o)},pointToData:function(t,e){},getTicksCoords:function(t){var e=(t=t||{}).tickModel||this.getTickModel(),i=Ql(this,e),n=f(i.ticks,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this),o=e.get("alignWithLabel");return pu(this,n,i.tickCategoryInterval,o,t.clamp),n},getViewLabels:function(){return Jl(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return lu(this)}};var ZA=GA,UA={};d(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){UA[t]=$_[t]});var XA={};d(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],function(t){XA[t]=bM[t]}),OI.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return dl(this.getSource(),this)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});var jA=mu.prototype,YA=mu.getSymbolSize=function(t,e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array?i.slice():[+i,+i]};jA._createSymbol=function(t,e,i,n,o){this.removeAll();var a=Xl(t,-1,-1,2,2,e.getItemVisual(i,"color"),o);a.attr({z2:100,culling:!0,scale:vu(n)}),a.drift=yu,this._symbolType=t,this.add(a)},jA.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},jA.getSymbolPath=function(){return this.childAt(0)},jA.getScale=function(){return this.childAt(0).scale},jA.highlight=function(){this.childAt(0).trigger("emphasis")},jA.downplay=function(){this.childAt(0).trigger("normal")},jA.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},jA.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},jA.updateData=function(t,e,i){this.silent=!1;var n=t.getItemVisual(e,"symbol")||"circle",o=t.hostModel,a=YA(t,e),r=n!==this._symbolType;if(r){var s=t.getItemVisual(e,"symbolKeepAspect");this._createSymbol(n,t,e,a,s)}else(l=this.childAt(0)).silent=!1,bo(l,{scale:vu(a)},o,e);if(this._updateCommon(t,e,a,i),r){var l=this.childAt(0),u=i&&i.fadeIn,h={scale:l.scale.slice()};u&&(h.style={opacity:l.style.opacity}),l.scale=[0,0],u&&(l.style.opacity=0),So(l,h,o,e)}this._seriesModel=o};var qA=["itemStyle"],KA=["emphasis","itemStyle"],$A=["label"],JA=["emphasis","label"];jA._updateCommon=function(t,e,i,n){var o=this.childAt(0),r=t.hostModel,s=t.getItemVisual(e,"color");"image"!==o.type&&o.useStyle({strokeNoScale:!0});var l=n&&n.itemStyle,u=n&&n.hoverItemStyle,h=n&&n.symbolRotate,c=n&&n.symbolOffset,d=n&&n.labelModel,f=n&&n.hoverLabelModel,p=n&&n.hoverAnimation,g=n&&n.cursorStyle;if(!n||t.hasItemOption){var m=n&&n.itemModel?n.itemModel:t.getItemModel(e);l=m.getModel(qA).getItemStyle(["color"]),u=m.getModel(KA).getItemStyle(),h=m.getShallow("symbolRotate"),c=m.getShallow("symbolOffset"),d=m.getModel($A),f=m.getModel(JA),p=m.getShallow("hoverAnimation"),g=m.getShallow("cursor")}else u=a({},u);var v=o.style;o.attr("rotation",(h||0)*Math.PI/180||0),c&&o.attr("position",[Ro(c[0],i[0]),Ro(c[1],i[1])]),g&&o.attr("cursor",g),o.setColor(s,n&&n.symbolInnerColor),o.setStyle(l);var y=t.getItemVisual(e,"opacity");null!=y&&(v.opacity=y);var x=t.getItemVisual(e,"liftZ"),_=o.__z2Origin;null!=x?null==_&&(o.__z2Origin=o.z2,o.z2+=x):null!=_&&(o.z2=_,o.__z2Origin=null);var w=n&&n.useNameLabel;co(v,u,d,f,{labelFetcher:r,labelDataIndex:e,defaultText:function(e,i){return w?t.getName(e):gu(t,e)},isRectText:!0,autoColor:s}),o.off("mouseover").off("mouseout").off("emphasis").off("normal"),o.hoverStyle=u,uo(o),o.__symbolOriginalScale=vu(i),p&&r.isAnimationEnabled()&&o.on("mouseover",xu).on("mouseout",_u).on("emphasis",wu).on("normal",bu)},jA.fadeOut=function(t,e){var i=this.childAt(0);this.silent=i.silent=!0,!(e&&e.keepLabel)&&(i.style.text=null),bo(i,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},u(mu,Zw);var QA=Su.prototype;QA.updateData=function(t,e){e=Iu(e);var i=this.group,n=t.hostModel,o=this._data,a=this._symbolCtor,r=Tu(t);o||i.removeAll(),t.diff(o).add(function(n){var o=t.getItemLayout(n);if(Mu(t,o,n,e)){var s=new a(t,n,r);s.attr("position",o),t.setItemGraphicEl(n,s),i.add(s)}}).update(function(s,l){var u=o.getItemGraphicEl(l),h=t.getItemLayout(s);Mu(t,h,s,e)?(u?(u.updateData(t,s,r),bo(u,{position:h},n)):(u=new a(t,s)).attr("position",h),i.add(u),t.setItemGraphicEl(s,u)):i.remove(u)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},QA.isPersistent=function(){return!0},QA.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},QA.incrementalPrepareUpdate=function(t){this._seriesScope=Tu(t),this._data=null,this.group.removeAll()},QA.incrementalUpdate=function(t,e,i){i=Iu(i);for(var n=t.start;n0&&ku(i[o-1]);o--);for(;n0&&ku(i[a-1]);a--);for(;o=0){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;(r=new mu(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Mr.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=zi(o,n);if(null!=a&&a>=0){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else Mr.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new lD({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new uD({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_updateAnimation:function(t,e,i,n,o,a){var r=this._polyline,s=this._polygon,l=t.hostModel,u=tD(this._data,t,this._stackedOnPoints,e,this._coordSys,i,this._valueOrigin,a),h=u.current,c=u.stackedOnCurrent,d=u.next,f=u.stackedOnNext;o&&(h=Hu(u.current,i,o),c=Hu(u.stackedOnCurrent,i,o),d=Hu(u.next,i,o),f=Hu(u.stackedOnNext,i,o)),r.shape.__points=u.current,r.shape.points=h,bo(r,{shape:{points:d}},l),s&&(s.setShape({points:h,stackedOnPoints:c}),bo(s,{shape:{points:d,stackedOnPoints:f}},l));for(var p=[],g=u.status,m=0;me&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},u(gD,HA);var mD={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},vD={};vD.categoryAxis=n({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},mD),vD.valueAxis=n({boundaryGap:[0,0],splitNumber:5},mD),vD.timeAxis=r({scale:!0,min:"dataMin",max:"dataMax"},vD.valueAxis),vD.logAxis=r({scale:!0,logBase:10},vD.valueAxis);var yD=["value","category","time","log"],xD=function(t,e,i,a){d(yD,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,o){var a=this.layoutMode,s=a?da(e):{};n(e,o.getTheme().get(r+"Axis")),n(e,this.getDefaultOption()),e.type=i(t,e),a&&ca(e,s,a)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=ml.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:o([{},vD[r+"Axis"],a],!0)})}),YM.registerSubTypeDefaulter(t+"Axis",v(i,t))},_D=YM.extend({type:"cartesian2dAxis",axis:null,init:function(){_D.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){_D.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){_D.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});n(_D.prototype,CA);var wD={offset:0};xD("x",_D,qu,wD),xD("y",_D,qu,wD),YM.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var bD=$u.prototype;bD.type="grid",bD.axisPointerEnabled=!0,bD.getRect=function(){return this._rect},bD.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),d(i.x,function(t){Bl(t.scale,t.model)}),d(i.y,function(t){Bl(t.scale,t.model)});var n={};d(i.x,function(t){Ju(i,"y",t,n)}),d(i.y,function(t){Ju(i,"x",t,n)}),this.resize(this.model,e)},bD.resize=function(t,e,i){function n(){d(a,function(t){var e=t.isHorizontal(),i=e?[0,o.width]:[0,o.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),th(t,e?o.x:o.y)})}var o=la(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;n(),!i&&t.get("containLabel")&&(d(a,function(t){if(!t.model.get("axisLabel.inside")){var e=Hl(t);if(e){var i=t.isHorizontal()?"height":"width",n=t.model.get("axisLabel.margin");o[i]-=e[i]+n,"top"===t.position?o.y+=e.height+n:"left"===t.position&&(o.x+=e.width+n)}}}),n())},bD.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},bD.getAxes=function(){return this._axesList.slice()},bD.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}w(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,o=this._coordsList;nu[1]?-1:1,c=["start"===o?u[0]-h*l:"end"===o?u[1]+h*l:(u[0]+u[1])/2,uh(o)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*MD/180);var f;uh(o)?n=AD(t.rotation,null!=d?d:t.rotation,r):(n=oh(t,o,d||0,u),null!=(f=t.axisNameAvailableWidth)&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var p=s.getFont(),g=e.get("nameTruncate",!0)||{},m=g.ellipsis,v=T(t.nameTruncateMaxWidth,g.maxWidth,f),y=null!=m&&null!=v?VM(i,v,p,m,{minChar:2,placeholder:g.placeholder}):i,x=e.get("tooltip",!0),_=e.mainType,w={componentType:_,name:i,$vars:["name"]};w[_+"Index"]=e.componentIndex;var b=new qS({anid:"name",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:ah(e),z2:1,tooltip:x&&x.show?a({content:i,formatter:function(){return i},formatterParams:w},x):null});fo(b.style,s,{text:y,textFont:p,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get("triggerEvent")&&(b.eventData=nh(e),b.eventData.targetType="axisName",b.eventData.name=i),this._dumbGroup.add(b),b.updateTransform(),this.group.add(b),b.decomposeTransform()}}},AD=ID.innerTextLayout=function(t,e,i){var n,o,a=Ho(e-t);return Zo(a)?(o=i>0?"top":"bottom",n="center"):Zo(a-MD)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=a>0&&a0?"right":"left":i>0?"left":"right"),{rotation:a,textAlign:n,textVerticalAlign:o}},DD=d,CD=v,LD=Vs({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&yh(t),LD.superApply(this,"render",arguments),Sh(this,t,0,i,0,!0)},updateAxisPointer:function(t,e,i,n,o){Sh(this,t,0,i,0,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),LD.superApply(this,"remove",arguments)},dispose:function(t,e){Mh(this,e),LD.superApply(this,"dispose",arguments)}}),kD=[];LD.registerAxisPointerClass=function(t,e){kD[t]=e},LD.getAxisPointerClass=function(t){return t&&kD[t]};var PD=["axisLine","axisTickLabel","axisName"],ND=["splitArea","splitLine"],OD=LD.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,i,n){this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new Zw,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),r=Ih(a,t),s=new ID(t,r);d(PD,s.add,s),this._axisGroup.add(s.getGroup()),d(ND,function(e){t.get(e+".show")&&this["_"+e](t,a)},this),Ao(o,this._axisGroup,t),OD.superCall(this,"render",t,e,i,n)}},remove:function(){this._splitAreaColors=null},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel("splitLine"),o=n.getModel("lineStyle"),a=o.get("color");a=y(a)?a:[a];for(var s=e.coordinateSystem.getRect(),l=i.isHorizontal(),u=0,h=i.getTicksCoords({tickModel:n}),c=[],d=[],f=o.getLineStyle(),p=0;p1){var c;"string"==typeof o?c=dD[o]:"function"==typeof o&&(c=o),c&&t.setData(n.downSample(n.mapDimension(s.dim),1/h,c,fD))}}}}}("line"));var ED=OI.extend({type:"series.__base_bar__",getInitialData:function(t,e){return dl(this.getSource(),this)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(e.clampData(t)),n=this.getData(),o=n.getLayout("offset"),a=n.getLayout("size");return i[e.getBaseAxis().isHorizontal()?0:1]+=o+a/2,i}return[NaN,NaN]},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",itemStyle:{},emphasis:{}}});ED.extend({type:"series.bar",dependencies:["grid","polar"],brushSelector:"rect",getProgressive:function(){return!!this.get("large")&&this.get("progressive")},getProgressiveThreshold:function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t}});var RD=Wb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),zD={getBarItemStyle:function(t){var e=RD(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}},BD=["itemStyle","barBorderWidth"];a(Lo.prototype,zD),Fs({type:"bar",render:function(t,e,i){this._updateDrawMode(t);var n=t.get("coordinateSystem");return"cartesian2d"!==n&&"polar"!==n||(this._isLargeDraw?this._renderLarge(t,e,i):this._renderNormal(t,e,i)),this.group},incrementalPrepareRender:function(t,e,i){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e,i,n){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t,e,i){var n,o=this.group,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.getBaseAxis();"cartesian2d"===s.type?n=l.isHorizontal():"polar"===s.type&&(n="angle"===l.dim);var u=t.isAnimationEnabled()?t:null;a.diff(r).add(function(e){if(a.hasValue(e)){var i=a.getItemModel(e),r=GD[s.type](a,e,i),l=VD[s.type](a,e,i,r,n,u);a.setItemGraphicEl(e,l),o.add(l),Lh(l,a,e,i,r,t,n,"polar"===s.type)}}).update(function(e,i){var l=r.getItemGraphicEl(i);if(a.hasValue(e)){var h=a.getItemModel(e),c=GD[s.type](a,e,h);l?bo(l,{shape:c},u,e):l=VD[s.type](a,e,h,c,n,u,!0),a.setItemGraphicEl(e,l),o.add(l),Lh(l,a,e,h,c,t,n,"polar"===s.type)}else o.remove(l)}).remove(function(t){var e=r.getItemGraphicEl(t);"cartesian2d"===s.type?e&&Dh(t,u,e):e&&Ch(t,u,e)}).execute(),this._data=a},_renderLarge:function(t,e,i){this._clear(),Ph(t,this.group)},_incrementalRenderLarge:function(t,e){Ph(e,this.group,!0)},dispose:B,remove:function(t){this._clear(t)},_clear:function(t){var e=this.group,i=this._data;t&&t.get("animation")&&i&&!this._isLargeDraw?i.eachItemGraphicEl(function(e){"sector"===e.type?Ch(e.dataIndex,t,e):Dh(e.dataIndex,t,e)}):e.removeAll(),this._data=null}});var VD={cartesian2d:function(t,e,i,n,o,r,s){var l=new aM({shape:a({},n)});if(r){var u=l.shape,h=o?"height":"width",c={};u[h]=0,c[h]=n[h],bM[s?"updateProps":"initProps"](l,{shape:c},r,e)}return l},polar:function(t,e,i,n,o,a,s){var l=n.startAngle0?1:-1,r=n.height>0?1:-1;return{x:n.x+a*o/2,y:n.y+r*o/2,width:n.width-a*o,height:n.height-r*o}},polar:function(t,e,i){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}},FD=kn.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var i=e.points,n=this.__startPoint,o=this.__valueIdx,a=0;a0&&"scale"!==u){var d=o.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,p=m(r.removeClipPath,r);r.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,p,t))}else r.removeClipPath();this._data=o}},dispose:function(){},_createClipPath:function(t,e,i,n,o,a,r){var s=new QS({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return So(s,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},r,a),s},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var XD=function(t,e){d(e,function(e){e.update="updateView",Ps(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})},jD=function(t){return{getTargetSeries:function(e){var i={},n=R();return e.eachSeriesByType(t,function(t){t.__paletteScope=i,n.set(t.uid,t)}),n},reset:function(t,e){var i=t.getRawData(),n={},o=t.getData();o.each(function(t){var e=o.getRawIndex(t);n[e]=t}),i.each(function(e){var a=n[e],r=null!=a&&o.getItemVisual(a,"color",!0);if(r)i.setItemVisual(e,"color",r);else{var s=i.getItemModel(e).get("itemStyle.color")||t.getColorFromPalette(i.getName(e)||e+"",t.__paletteScope,i.count());i.setItemVisual(e,"color",s),null!=a&&o.setItemVisual(a,"color",s)}})}}},YD=function(t,e,i,n){var o,a,r=t.getData(),s=[],l=!1;r.each(function(i){var n,u,h,c,d=r.getItemLayout(i),f=r.getItemModel(i),p=f.getModel("label"),g=p.get("position")||f.get("emphasis.label.position"),m=f.getModel("labelLine"),v=m.get("length"),y=m.get("length2"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),w=Math.sin(x);o=d.cx,a=d.cy;var b="inside"===g||"inner"===g;if("center"===g)n=d.cx,u=d.cy,c="center";else{var S=(b?(d.r+d.r0)/2*_:d.r*_)+o,M=(b?(d.r+d.r0)/2*w:d.r*w)+a;if(n=S+3*_,u=M+3*w,!b){var I=S+_*(v+e-d.r),T=M+w*(v+e-d.r),A=I+(_<0?-1:1)*y,D=T;n=A+(_<0?-5:5),u=D,h=[[S,M],[I,T],[A,D]]}c=b?"center":_>0?"left":"right"}var C=p.getFont(),L=p.get("rotate")?_<0?-x+Math.PI:-x:0,k=De(t.getFormattedLabel(i,"normal")||r.getName(i),C,c,"top");l=!!L,d.label={x:n,y:u,position:g,height:k.height,len:v,len2:y,linePoints:h,textAlign:c,verticalAlign:"middle",rotation:L,inside:b},b||s.push(d.label)}),!l&&t.get("avoidLabelOverlap")&&Bh(s,o,a,e,i,n)},qD=2*Math.PI,KD=Math.PI/180,$D=function(t){return{seriesType:t,reset:function(t,e){var i=e.findComponents({mainType:"legend"});if(i&&i.length){var n=t.getData();n.filterSelf(function(t){for(var e=n.getName(t),o=0;o=0;s--){var l=2*s,u=n[l]-a/2,h=n[l+1]-r/2;if(t>=u&&e>=h&&t<=u+a&&e<=h+r)return s}return-1}}),QD=Vh.prototype;QD.isPersistent=function(){return!this._incremental},QD.updateData=function(t){this.group.removeAll();var e=new JD({rectHover:!0,cursor:"default"});e.setShape({points:t.getLayout("symbolPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},QD.updateLayout=function(t){if(!this._incremental){var e=t.getLayout("symbolPoints");this.group.eachChild(function(t){if(null!=t.startIndex){var i=2*(t.endIndex-t.startIndex),n=4*t.startIndex*2;e=new Float32Array(e.buffer,n,i)}t.setShape("points",e)})}},QD.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>2e6?(this._incremental||(this._incremental=new Gn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},QD.incrementalUpdate=function(t,e){var i;this._incremental?(i=new JD,this._incremental.addDisplayable(i,!0)):((i=new JD({rectHover:!0,cursor:"default",startIndex:t.start,endIndex:t.end})).incremental=!0,this.group.add(i)),i.setShape({points:e.getLayout("symbolPoints")}),this._setCommon(i,e,!!this._incremental)},QD._setCommon=function(t,e,i){var n=e.hostModel,o=e.getVisual("symbolSize");t.setShape("size",o instanceof Array?o:[o,o]),t.symbolProxy=Xl(e.getVisual("symbol"),0,0,0,0),t.setColor=t.symbolProxy.setColor;var a=t.shape.size[0]<4;t.useStyle(n.getModel("itemStyle").getItemStyle(a?["color","shadowBlur","shadowColor"]:["color"]));var r=e.getVisual("color");r&&t.setColor(r),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>=0&&(t.dataIndex=i+(t.startIndex||0))}))},QD.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},QD._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()},Fs({type:"scatter",render:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).updateData(n),this._finished=!0},incrementalPrepareRender:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).incrementalPrepareUpdate(n),this._finished=!1},incrementalRender:function(t,e,i){this._symbolDraw.incrementalUpdate(t,e.getData()),this._finished=t.end===e.getData().count()},updateTransform:function(t,e,i){var n=t.getData();if(this.group.dirty(),!this._finished||n.count()>1e4||!this._symbolDraw.isPersistent())return{update:!0};var o=cD().reset(t);o.progress&&o.progress({start:0,end:n.count()},n),this._symbolDraw.updateLayout(n)},_updateSymbolDraw:function(t,e){var i=this._symbolDraw,n=e.pipelineContext.large;return i&&n===this._isLargeDraw||(i&&i.remove(),i=this._symbolDraw=n?new Vh:new Su,this._isLargeDraw=n,this.group.removeAll()),this.group.add(i.group),i},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},dispose:function(){}}),Es(hD("scatter","circle")),Os(cD("scatter")),u(Gh,HA),Fh.prototype.getIndicatorAxes=function(){return this._indicatorAxes},Fh.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},Fh.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e].angle;return[this.cx+t*Math.cos(i),this.cy-t*Math.sin(i)]},Fh.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,a=Math.atan2(-i,e),r=1/0,s=-1,l=0;ln[0]&&isFinite(c)&&isFinite(n[0]))}else{r.getTicks().length-1>a&&(u=i(u));var d=Math.round((n[0]+n[1])/2/u)*u,f=Math.round(a/2);r.setExtent(zo(d-f*u),zo(d+(a-f)*u)),r.setInterval(u)}})},Fh.dimensions=[],Fh.create=function(t,e){var i=[];return t.eachComponent("radar",function(n){var o=new Fh(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},Ba.register("radar",Fh);var tC=vD.valueAxis,eC=(Bs({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),o=this.get("scale"),s=this.get("axisLine"),l=this.get("axisTick"),u=this.get("axisLabel"),h=this.get("name"),c=this.get("name.show"),d=this.get("name.formatter"),p=this.get("nameGap"),g=this.get("triggerEvent"),m=f(this.get("indicator")||[],function(f){null!=f.max&&f.max>0&&!f.min?f.min=0:null!=f.min&&f.min<0&&!f.max&&(f.max=0);var m=h;if(null!=f.color&&(m=r({color:f.color},h)),f=n(i(f),{boundaryGap:t,splitNumber:e,scale:o,axisLine:s,axisTick:l,axisLabel:u,name:f.text,nameLocation:"end",nameGap:p,nameTextStyle:m,triggerEvent:g},!1),c||(f.name=""),"string"==typeof d){var v=f.name;f.name=d.replace("{value}",null!=v?v:"")}else"function"==typeof d&&(f.name=d(f.name,f));var y=a(new Lo(f,null,this.ecModel),CA);return y.mainType="radar",y.componentIndex=this.componentIndex,y},this);this.getIndicatorModels=function(){return m}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:n({lineStyle:{color:"#bbb"}},tC.axisLine),axisLabel:Wh(tC.axisLabel,!1),axisTick:Wh(tC.axisTick,!1),splitLine:Wh(tC.splitLine,!0),splitArea:Wh(tC.splitArea,!0),indicator:[]}}),["axisLine","axisTickLabel","axisName"]);Vs({type:"radar",render:function(t,e,i){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem;d(f(e.getIndicatorAxes(),function(t){return new ID(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){d(eC,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=i.getIndicatorAxes();if(n.length){var o=t.get("shape"),a=t.getModel("splitLine"),s=t.getModel("splitArea"),l=a.getModel("lineStyle"),u=s.getModel("areaStyle"),h=a.get("show"),c=s.get("show"),p=l.get("color"),g=u.get("color");p=y(p)?p:[p],g=y(g)?g:[g];var m=[],v=[];if("circle"===o)for(var x=n[0].getTicksCoords(),_=i.cx,w=i.cy,b=0;b"+f(i,function(i,n){var o=e.get(e.mapDimension(i.dim),t);return Qo(i.name+" : "+o)}).join("
    ")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{width:2,type:"solid"},label:{position:"top"},symbol:"emptyCircle",symbolSize:4}});Fs({type:"radar",render:function(t,e,n){function o(t,e){var i=t.getItemVisual(e,"symbol")||"circle",n=t.getItemVisual(e,"color");if("none"!==i){var o=Hh(t.getItemVisual(e,"symbolSize")),a=Xl(i,-1,-1,2,2,n);return a.attr({style:{strokeNoScale:!0},z2:100,scale:[o[0]/2,o[1]/2]}),a}}function a(e,i,n,a,r,s){n.removeAll();for(var l=0;l"+Qo(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}}}});h(wC,HD);var bC="\0_ec_interaction_mutex";Ps({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),h(ac,aw);var SC={axisPointer:1,tooltip:1,brush:1};_c.prototype={constructor:_c,draw:function(t,e,i,n,o){var a="geo"===t.mainType,r=t.getData&&t.getData();a&&e.eachComponent({mainType:"series",subType:"map"},function(e){r||e.getHostGeoModel()!==t||(r=e.getData())});var s=t.coordinateSystem;this._updateBackground(s);var l=this._regionsGroup,u=this.group,h=s.scale,c={position:s.position,scale:h};!l.childAt(0)||o?u.attr(c):bo(u,c,t),l.removeAll();var f=["itemStyle"],p=["emphasis","itemStyle"],g=["label"],m=["emphasis","label"],v=R();d(s.regions,function(e){var i=v.get(e.name)||v.set(e.name,new Zw),n=new hM({shape:{paths:[]}});i.add(n);var o,s=(C=t.getRegionModel(e.name)||t).getModel(f),u=C.getModel(p),c=vc(s),y=vc(u),x=C.getModel(g),_=C.getModel(m);if(r){o=r.indexOfName(e.name);var w=r.getItemVisual(o,"color",!0);w&&(c.fill=w)}d(e.geometries,function(t){if("polygon"===t.type){n.shape.paths.push(new nM({shape:{points:t.exterior}}));for(var e=0;e<(t.interiors?t.interiors.length:0);e++)n.shape.paths.push(new nM({shape:{points:t.interiors[e]}}))}}),n.setStyle(c),n.style.strokeNoScale=!0,n.culling=!0;var b=x.get("show"),S=_.get("show"),M=r&&isNaN(r.get(r.mapDimension("value"),o)),I=r&&r.getItemLayout(o);if(a||M&&(b||S)||I&&I.showLabel){var T,A=a?e.name:o;(!r||o>=0)&&(T=t);var D=new qS({position:e.center.slice(),scale:[1/h[0],1/h[1]],z2:10,silent:!0});co(D.style,D.hoverStyle={},x,_,{labelFetcher:T,labelDataIndex:A,defaultText:e.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),i.add(D)}if(r)r.setItemGraphicEl(o,i);else{var C=t.getRegionModel(e.name);n.eventData={componentType:"geo",componentIndex:t.componentIndex,geoIndex:t.componentIndex,name:e.name,region:C&&C.option||{}}}(i.__regions||(i.__regions=[])).push(e),uo(i,y,{hoverSilentOnTouch:!!t.get("selectedMode")}),l.add(i)}),this._updateController(t,e,i),yc(this,t,l,i,n),xc(t,l)},remove:function(){this._regionsGroup.removeAll(),this._backgroundGroup.removeAll(),this._controller.dispose(),this._mapName&&xC.removeGraphic(this._mapName,this.uid),this._mapName=null,this._controllerHost={}},_updateBackground:function(t){var e=t.map;this._mapName!==e&&d(xC.makeGraphic(e,this.uid),function(t){this._backgroundGroup.add(t)},this),this._mapName=e},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:l};return e[l+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller,s=this._controllerHost;s.zoomLimit=t.get("scaleLimit"),s.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var l=t.mainType;r.off("pan").on("pan",function(t){this._mouseDownFlag=!1,pc(s,t.dx,t.dy),i.dispatchAction(a(n(),{dx:t.dx,dy:t.dy}))},this),r.off("zoom").on("zoom",function(t){if(this._mouseDownFlag=!1,gc(s,t.scale,t.originX,t.originY),i.dispatchAction(a(n(),{zoom:t.scale,originX:t.originX,originY:t.originY})),this._updateGroup){var e=this.group.scale;this._regionsGroup.traverse(function(t){"text"===t.type&&t.attr("scale",[1/e[0],1/e[1]])})}},this),r.setPointerChecker(function(e,n,a){return o.getViewRectAfterRoam().contain(n,a)&&!mc(e,i,t)})}},Fs({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var o=this.group;if(o.removeAll(),!t.getHostGeoModel()){if(n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id)(a=this._mapDraw)&&o.add(a.group);else if(t.needsDrawMap){var a=this._mapDraw||new _c(i,!0);o.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var n=t.originalData,o=this.group;n.each(n.mapDimension("value"),function(e,i){if(!isNaN(e)){var a=n.getItemLayout(i);if(a&&a.point){var r=a.point,s=a.offset,l=new KS({style:{fill:t.getData().getVisual("color")},shape:{cx:r[0]+9*s,cy:r[1],r:3},silent:!0,z2:s?8:10});if(!s){var u=t.mainSeries.getData(),h=n.getName(i),c=u.indexOfName(h),d=n.getItemModel(i),f=d.getModel("label"),p=d.getModel("emphasis.label"),g=u.getItemGraphicEl(c),m=A(t.getFormattedLabel(i,"normal"),h),v=A(t.getFormattedLabel(i,"emphasis"),m),y=function(){var t=fo({},p,{text:p.get("show")?v:null},{isRectText:!0,useInsideStyle:!1},!0);l.style.extendFrom(t),l.__mapOriginalZ2=l.z2,l.z2+=1},x=function(){fo(l.style,f,{text:f.get("show")?m:null,textPosition:f.getShallow("position")||"bottom"},{isRectText:!0,useInsideStyle:!1}),null!=l.__mapOriginalZ2&&(l.z2=l.__mapOriginalZ2,l.__mapOriginalZ2=null)};g.on("mouseover",y).on("mouseout",x).on("emphasis",y).on("normal",x),x()}o.add(l)}}})}}),Ps({type:"geoRoam",event:"geoRoam",update:"updateTransform"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var n=e.coordinateSystem;if("geo"===n.type){var o=wc(n,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),"series"===i&&d(e.seriesGroup,function(t){t.setCenter(o.center),t.setZoom(o.zoom)})}})});Os(function(t){var e={};t.eachSeriesByType("map",function(i){var n=i.getMapType();if(!i.getHostGeoModel()&&!e[n]){var o={};d(i.seriesGroup,function(e){var i=e.coordinateSystem,n=e.originalData;e.get("showLegendSymbol")&&t.getComponent("legend")&&n.each(n.mapDimension("value"),function(t,e){var a=n.getName(e),r=i.getRegion(a);if(r&&!isNaN(t)){var s=o[a]||0,l=i.dataToPoint(r.center);o[a]=s+1,n.setItemLayout(e,{point:l,offset:s})}})});var a=i.getData();a.each(function(t){var e=a.getName(t),i=a.getItemLayout(t)||{};i.showLabel=!o[e],a.setItemLayout(t,i)}),e[n]=!0}})}),Es(function(t){t.eachSeriesByType("map",function(t){var e=t.get("color"),i=t.getModel("itemStyle"),n=i.get("areaColor"),o=i.get("color")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:n,color:o})})}),ks(IT.PROCESSOR.STATISTIC,function(t){var e={};t.eachSeriesByType("map",function(t){var i=t.getHostGeoModel(),n=i?"o"+i.id:"i"+t.getMapType();(e[n]=e[n]||[]).push(t)}),d(e,function(t,e){for(var i=bc(f(t,function(t){return t.getData()}),t[0].get("mapValueCalculation")),n=0;ne&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e,i=this.hostTree,n=i.data.getItemModel(this.dataIndex),o=this.getLevelModel();return o||0!==this.children.length&&(0===this.children.length||!1!==this.isExpand)||(e=this.getLeavesModel()),n.getModel(t,(o||e||i.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},getLeavesModel:function(){return this.hostTree.leavesModel},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)},isAncestorOf:function(t){for(var e=t.parentNode;e;){if(e===this)return!0;e=e.parentNode}return!1},isDescendantOf:function(t){return t!==this&&t.isAncestorOf(this)}},kc.prototype={constructor:kc,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;ia&&(a=t.depth)});var r=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return Qo(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}}),Fs({type:"tree",init:function(t,e){this._oldTree,this._mainGroup=new Zw,this._controller=new ac(e.getZr()),this._controllerHost={target:this.group},this.group.add(this._mainGroup)},render:function(t,e,i,n){var o=t.getData(),a=t.layoutInfo,r=this._mainGroup,s=t.get("layout");"radial"===s?r.attr("position",[a.x+a.width/2,a.y+a.height/2]):r.attr("position",[a.x,a.y]),this._updateViewCoordSys(t),this._updateController(t,e,i);var l=this._data,u={expandAndCollapse:t.get("expandAndCollapse"),layout:s,orient:t.getOrient(),curvature:t.get("lineStyle.curveness"),symbolRotate:t.get("symbolRotate"),symbolOffset:t.get("symbolOffset"),hoverAnimation:t.get("hoverAnimation"),useNameLabel:!0,fadeIn:!0};o.diff(l).add(function(e){Xc(o,e)&&Yc(o,e,null,r,t,u)}).update(function(e,i){var n=l.getItemGraphicEl(i);Xc(o,e)?Yc(o,e,n,r,t,u):n&&qc(l,i,n,r,t,u)}).remove(function(e){var i=l.getItemGraphicEl(e);i&&qc(l,e,i,r,t,u)}).execute(),this._nodeScaleRatio=t.get("nodeScaleRatio"),this._updateNodeAndLinkScale(t),!0===u.expandAndCollapse&&o.eachItemGraphicEl(function(e,n){e.off("click").on("click",function(){i.dispatchAction({type:"treeExpandAndCollapse",seriesId:t.id,dataIndex:n})})}),this._data=o},_updateViewCoordSys:function(t){var e=t.getData(),i=[];e.each(function(t){var n=e.getItemLayout(t);!n||isNaN(n.x)||isNaN(n.y)||i.push([+n.x,+n.y])});var n=[],o=[];dn(i,n,o),o[0]-n[0]==0&&(o[0]+=1,n[0]-=1),o[1]-n[1]==0&&(o[1]+=1,n[1]-=1);var a=t.coordinateSystem=new Uh;a.zoomLimit=t.get("scaleLimit"),a.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1]),a.setCenter(t.get("center")),a.setZoom(t.get("zoom")),this.group.attr({position:a.position,scale:a.scale}),this._viewCoordSys=a},_updateController:function(t,e,i){var n=this._controller,o=this._controllerHost,a=this.group;n.setPointerChecker(function(e,n,o){var r=a.getBoundingRect();return r.applyTransform(a.transform),r.contain(n,o)&&!mc(e,i,t)}),n.enable(t.get("roam")),o.zoomLimit=t.get("scaleLimit"),o.zoom=t.coordinateSystem.getZoom(),n.off("pan").off("zoom").on("pan",function(e){pc(o,e.dx,e.dy),i.dispatchAction({seriesId:t.id,type:"treeRoam",dx:e.dx,dy:e.dy})},this).on("zoom",function(e){gc(o,e.scale,e.originX,e.originY),i.dispatchAction({seriesId:t.id,type:"treeRoam",zoom:e.scale,originX:e.originX,originY:e.originY}),this._updateNodeAndLinkScale(t)},this)},_updateNodeAndLinkScale:function(t){var e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1;return((e.getZoom()-1)*i+1)/o},dispose:function(){this._controller&&this._controller.dispose(),this._controllerHost={}},remove:function(){this._mainGroup.removeAll(),this._data=null}}),Ps({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=t.dataIndex,n=e.getData().tree.getNodeByDataIndex(i);n.isExpand=!n.isExpand})}),Ps({type:"treeRoam",event:"treeRoam",update:"none"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=wc(e.coordinateSystem,t);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)})});Es(hD("tree","circle")),Os(function(t,e){t.eachSeriesByType("tree",function(t){Qc(t,e)})}),OI.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};od(i);var n=t.levels||[];n=t.levels=ad(n,e);var o={};return o.levels=n,kc.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=$o(y(i)?i[0]:i);return Qo(e.getName(t)+": "+n)},getDataParams:function(t){var e=OI.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=nd(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},a(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=R(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var DC=5;rd.prototype={constructor:rd,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),ua(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a=0,s=e.emptyItemWidth,l=t.get("breadcrumb.height"),u=sa(e.pos,e.box),h=e.totalWidth,c=e.renderList,d=c.length-1;d>=0;d--){var f=c[d],p=f.node,g=f.width,m=f.text;h>u.width&&(h-=g-s,g=s,m=null);var y=new nM({shape:{points:sd(a,0,g,l,d===c.length-1,0===d)},style:r(i.getItemStyle(),{lineJoin:"bevel",text:m,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:v(o,p)});this.group.add(y),ld(y,t,p),a+=g+8}},remove:function(){this.group.removeAll()}};var CC=m,LC=Zw,kC=aM,PC=d,NC=["label"],OC=["emphasis","label"],EC=["upperLabel"],RC=["emphasis","upperLabel"],zC=10,BC=1,VC=2,GC=Wb([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),FC=function(t){var e=GC(t);return e.stroke=e.fill=e.lineWidth=null,e};Fs({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(l(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=td(n,["treemapZoomToNode","treemapRootToNode"],t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,u=this._storage,h="treemapRootToNode"===a&&o&&u?{rootNodeGroup:u.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,c=this._giveContainerGroup(r),d=this._doRender(c,t,h);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?d.renderFinally():this._doAnimation(c,d,t,h),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new LC,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function n(t,e,i,o,a){function r(t){return t.getId()}function s(r,s){var l=null!=r?t[r]:null,u=null!=s?e[s]:null,c=h(l,u,i,a);c&&n(l&&l.viewChildren||[],u&&u.viewChildren||[],c,o,a+1)}o?(e=t,PC(t,function(t,e){!t.isRemoved()&&s(e,e)})):new Hs(e,t,r,r).add(s).update(s).remove(v(s,null)).execute()}var o=e.getData().tree,a=this._oldTree,r={nodeGroup:[],background:[],content:[]},s={nodeGroup:[],background:[],content:[]},l=this._storage,u=[],h=v(hd,e,s,l,i,r,u);n(o.root?[o.root]:[],a&&a.root?[a.root]:[],t,o===a||!a,0);var c=function(t){var e={nodeGroup:[],background:[],content:[]};return t&&PC(t,function(t,i){var n=e[i];PC(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}(l);return this._oldTree=o,this._storage=s,{lastsForAnimation:r,willDeleteEls:c,renderFinally:function(){PC(c,function(t){PC(t,function(t){t.parent&&t.parent.remove(t)})}),PC(u,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=ud();PC(e.willDeleteEls,function(t,e){PC(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,h=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,h=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[u,h],style:{opacity:0}}:{shape:{x:u,y:h,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),PC(this._storage,function(t,i){PC(t,function(t,n){var l=e.lastsForAnimation[i][n],u={};l&&("nodeGroup"===i?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=a({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,r))})},this),this._state="animating",s.done(CC(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||((e=this._controller=new ac(t.getZr())).enable(this.seriesModel.get("roam")),e.on("pan",CC(this._onPan,this)),e.on("zoom",CC(this._onZoom,this)));var i=new ue(0,0,t.getWidth(),t.getHeight());e.setPointerChecker(function(t,e,n){return i.contain(e,n)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t){if("animating"!==this._state&&(Math.abs(t.dx)>3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var i=e.getLayout();if(!i)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:i.x+t.dx,y:i.y+t.dy,width:i.width,height:i.height}})}},_onZoom:function(t){var e=t.originX,i=t.originY;if("animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var a=new ue(o.x,o.y,o.width,o.height),r=this.seriesModel.layoutInfo;e-=r.x,i-=r.y;var s=mt();_t(s,s,[-e,-i]),bt(s,s,[t.scale,t.scale]),_t(s,s,[e,i]),a.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:a.x,y:a.y,width:a.width,height:a.height}})}},_initEvents:function(t){t.on("click",function(t){if("ready"===this._state){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),a=o.get("link",!0),r=o.get("target",!0)||"blank";a&&window.open(a,r)}}}}},this)},_renderBreadcrumb:function(t,e,i){i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(i={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new rd(this.group))).render(t,e,i.node,CC(function(e){"animating"!==this._state&&(id(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))},this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var a=o.transformCoordToLocal(t,e),r=o.shape;if(!(r.x<=a[0]&&a[0]<=r.x+r.width&&r.y<=a[1]&&a[1]<=r.y+r.height))return!1;i={node:n,offsetX:a[0],offsetY:a[1]}}},this),i}});for(var WC=["treemapZoomToNode","treemapRender","treemapMove"],HC=0;HC=0&&t.call(e,i[o],o)},uL.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},uL.breadthFirstTraverse=function(t,e,i,n){if(Zd.isInstance(e)||(e=this._nodesMap[Hd(e)]),e){for(var o="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a=0&&i.node2.dataIndex>=0});for(var o=0,a=n.length;o=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};h(Zd,hL("hostGraph","data")),h(Ud,hL("hostGraph","edgeData")),lL.Node=Zd,lL.Edge=Ud,ji(Zd),ji(Ud);var cL=function(t,e,i,n,o){for(var a=new lL(n),r=0;r "+f)),h++)}var p,g=i.get("coordinateSystem");if("cartesian2d"===g||"polar"===g)p=dl(t,i);else{var m=Ba.get(g),v=m&&"view"!==m.type?m.dimensions||[]:[];l(v,"value")<0&&v.concat(["value"]);var y=oA(t,{coordDimensions:v});(p=new eA(y,i)).initData(t)}var x=new eA(["value"],i);return x.initData(u,s),o&&o(p,x),Sc({mainData:p,struct:a,structAttr:"graph",datas:{node:p,edge:x},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a},dL=Gs({type:"series.graph",init:function(t){dL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){dL.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){dL.superApply(this,"mergeDefaultAndTheme",arguments),Ci(t,["edgeLabel"],["show"])},getInitialData:function(t,e){var i=t.edges||t.links||[],n=t.data||t.nodes||[],o=this;if(n&&i)return cL(n,i,this,!0,function(t,i){function n(t){return(t=this.parsePath(t))&&"label"===t[0]?r:t&&"emphasis"===t[0]&&"label"===t[1]?l:this.parentModel}t.wrapMethod("getItemModel",function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var a=o.getModel("edgeLabel"),r=new Lo({label:a.option},a.parentModel,e),s=o.getModel("emphasis.edgeLabel"),l=new Lo({emphasis:{label:s.option}},s.parentModel,e);i.wrapMethod("getItemModel",function(t){return t.customizeGetParent(n),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=Qo(l.join(" > ")),o.value&&(l+=" : "+Qo(o.value)),l}return dL.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=f(this.option.categories||[],function(t){return null!=t.value?t:a({value:0},t)}),e=new eA(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return dL.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle"},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{label:{show:!0}}}}),fL=rM.prototype,pL=lM.prototype,gL=Fn({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(Xd(e)?fL:pL).buildPath(t,e)},pointAt:function(t){return Xd(this.shape)?fL.pointAt.call(this,t):pL.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=Xd(e)?[e.x2-e.x1,e.y2-e.y1]:pL.tangentAt.call(this,t);return q(i,i)}}),mL=["fromSymbol","toSymbol"],vL=$d.prototype;vL.beforeUpdate=function(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,a=this.parent;a;)a.scale&&(o/=a.scale[0]),a=a.parent;var r=t.childOfName("line");if(this.__dirty||r.__dirty){var s=r.shape.percent,l=r.pointAt(0),u=r.pointAt(s),h=U([],u,l);if(q(h,h),e&&(e.attr("position",l),c=r.tangentAt(0),e.attr("rotation",Math.PI/2-Math.atan2(c[1],c[0])),e.attr("scale",[o*s,o*s])),i){i.attr("position",u);var c=r.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",u);var d,f,p,g=5*o;if("end"===n.__position)d=[h[0]*g+u[0],h[1]*g+u[1]],f=h[0]>.8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var m=s/2,v=[(c=r.tangentAt(m))[1],-c[0]],y=r.pointAt(m);v[1]>0&&(v[0]=-v[0],v[1]=-v[1]),d=[y[0]+v[0]*g,y[1]+v[1]*g],f="center",p="bottom";var x=-Math.atan2(c[1],c[0]);u[0].8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||p,textAlign:n.__textAlign||f},position:d,scale:[o,o]})}}}},vL._createLine=function(t,e,i){var n=t.hostModel,o=qd(t.getItemLayout(e));o.shape.percent=0,So(o,{shape:{percent:1}},n,e),this.add(o);var a=new qS({name:"label"});this.add(a),d(mL,function(i){var n=Yd(i,t,e);this.add(n),this[jd(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},vL.updateData=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=t.getItemLayout(e),r={shape:{}};Kd(r.shape,a),bo(o,r,n,e),d(mL,function(i){var n=t.getItemVisual(e,i),o=jd(i);if(this[o]!==n){this.remove(this.childOfName(i));var a=Yd(i,t,e);this.add(a)}this[o]=n},this),this._updateCommonStl(t,e,i)},vL._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=i&&i.lineStyle,s=i&&i.hoverLineStyle,l=i&&i.labelModel,u=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var h=t.getItemModel(e);a=h.getModel("lineStyle").getLineStyle(),s=h.getModel("emphasis.lineStyle").getLineStyle(),l=h.getModel("label"),u=h.getModel("emphasis.label")}var c=t.getItemVisual(e,"color"),f=D(t.getItemVisual(e,"opacity"),a.opacity,1);o.useStyle(r({strokeNoScale:!0,fill:"none",stroke:c,opacity:f},a)),o.hoverStyle=s,d(mL,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:f}))},this);var p,g,m=l.getShallow("show"),v=u.getShallow("show"),y=this.childOfName("label");if((m||v)&&(p=c||"#000",null==(g=n.getFormattedLabel(e,"normal",t.dataType)))){var x=n.getRawValue(e);g=null==x?t.getName(e):isFinite(x)?zo(x):x}var _=m?g:null,w=v?A(n.getFormattedLabel(e,"emphasis",t.dataType),g):null,b=y.style;null==_&&null==w||(fo(y.style,l,{text:_},{autoColor:p}),y.__textAlign=b.textAlign,y.__verticalAlign=b.textVerticalAlign,y.__position=l.get("position")||"middle"),y.hoverStyle=null!=w?{text:w,textFill:u.getTextColor(!0),fontStyle:u.getShallow("fontStyle"),fontWeight:u.getShallow("fontWeight"),fontSize:u.getShallow("fontSize"),fontFamily:u.getShallow("fontFamily")}:{text:null},y.ignore=!m&&!v,uo(this)},vL.highlight=function(){this.trigger("emphasis")},vL.downplay=function(){this.trigger("normal")},vL.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},vL.setLinePoints=function(t){var e=this.childOfName("line");Kd(e.shape,t),e.dirty()},u($d,Zw);var yL=Jd.prototype;yL.isPersistent=function(){return!0},yL.updateData=function(t){var e=this,i=e.group,n=e._lineData;e._lineData=t,n||i.removeAll();var o=ef(t);t.diff(n).add(function(i){Qd(e,t,i,o)}).update(function(i,a){tf(e,n,t,a,i,o)}).remove(function(t){i.remove(n.getItemGraphicEl(t))}).execute()},yL.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},yL.incrementalPrepareUpdate=function(t){this._seriesScope=ef(t),this._lineData=null,this.group.removeAll()},yL.incrementalUpdate=function(t,e){for(var i=t.start;i=o/3?1:2),l=e.y-n(r)*a*(a>=o/3?1:2);r=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(r)*a,e.y+n(r)*a),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(r)*a,e.y-n(r)*a),t.lineTo(s,l)}}),LL=2*Math.PI,kL=(Mr.extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var n=t.get("axisLine.lineStyle.color"),o=gf(t,i);this._renderMain(t,e,i,n,o)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var a=this.group,r=t.getModel("axisLine").getModel("lineStyle"),s=t.get("clockwise"),l=-t.get("startAngle")/180*Math.PI,u=-t.get("endAngle")/180*Math.PI,h=(u-l)%LL,c=l,d=r.get("width"),f=0;f=t&&(0===e?0:n[e-1][0]).4?"bottom":"middle",textAlign:A<-.4?"left":A>.4?"right":"center"},{autoColor:P}),silent:!0}))}if(g.get("show")&&T!==v){for(var N=0;N<=y;N++){var A=Math.cos(w),D=Math.sin(w),O=new rM({shape:{x1:A*c+u,y1:D*c+h,x2:A*(c-_)+u,y2:D*(c-_)+h},silent:!0,style:I});"auto"===I.stroke&&O.setStyle({stroke:n((T+N/y)/v)}),l.add(O),w+=S}w-=S}else w+=b}},_renderPointer:function(t,e,i,n,o,a,r,s){var l=this.group,u=this._data;if(t.get("pointer.show")){var h=[+t.get("min"),+t.get("max")],c=[a,r],d=t.getData(),f=d.mapDimension("value");d.diff(u).add(function(e){var i=new CL({shape:{angle:a}});So(i,{shape:{angle:Eo(d.get(f,e),h,c,!0)}},t),l.add(i),d.setItemGraphicEl(e,i)}).update(function(e,i){var n=u.getItemGraphicEl(i);bo(n,{shape:{angle:Eo(d.get(f,e),h,c,!0)}},t),l.add(n),d.setItemGraphicEl(e,n)}).remove(function(t){var e=u.getItemGraphicEl(t);l.remove(e)}).execute(),d.eachItemGraphicEl(function(t,e){var i=d.getItemModel(e),a=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:Ro(a.get("width"),o.r),r:Ro(a.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n(Eo(d.get(f,e),h,[0,1],!0))),uo(t,i.getModel("emphasis.itemStyle").getItemStyle())}),this._data=d}else u&&u.eachItemGraphicEl(function(t){l.remove(t)})},_renderTitle:function(t,e,i,n,o){var a=t.getData(),r=a.mapDimension("value"),s=t.getModel("title");if(s.get("show")){var l=s.get("offsetCenter"),u=o.cx+Ro(l[0],o.r),h=o.cy+Ro(l[1],o.r),c=+t.get("min"),d=+t.get("max"),f=n(Eo(t.getData().get(r,0),[c,d],[0,1],!0));this.group.add(new qS({silent:!0,style:fo({},s,{x:u,y:h,text:a.getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:f,forceRich:!0})}))}},_renderDetail:function(t,e,i,n,o){var a=t.getModel("detail"),r=+t.get("min"),s=+t.get("max");if(a.get("show")){var l=a.get("offsetCenter"),u=o.cx+Ro(l[0],o.r),h=o.cy+Ro(l[1],o.r),c=Ro(a.get("width"),o.r),d=Ro(a.get("height"),o.r),f=t.getData(),p=f.get(f.mapDimension("value"),0),g=n(Eo(p,[r,s],[0,1],!0));this.group.add(new qS({silent:!0,style:fo({},a,{x:u,y:h,text:mf(p,a.get("formatter")),textWidth:isNaN(c)?null:c,textHeight:isNaN(d)?null:d,textAlign:"center",textVerticalAlign:"middle"},{autoColor:g,forceRich:!0})}))}}}),Gs({type:"series.funnel",init:function(t){kL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this._defaultLabelLine(t)},getInitialData:function(t,e){return WD(this,["value"])},_defaultLabelLine:function(t){Ci(t,"labelLine",["show"]);var e=t.labelLine,i=t.emphasis.labelLine;e.show=e.show&&t.label.show,i.show=i.show&&t.emphasis.label.show},getDataParams:function(t){var e=this.getData(),i=kL.superCall(this,"getDataParams",t),n=e.mapDimension("value"),o=e.getSum(n);return i.percent=o?+(e.get(n,t)/o*100).toFixed(2):0,i.$vars.push("percent"),i},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}}}})),PL=vf.prototype,NL=["itemStyle","opacity"];PL.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=t.getItemModel(e).get(NL);l=null==l?1:l,n.useStyle({}),i?(n.setShape({points:s.points}),n.setStyle({opacity:0}),So(n,{style:{opacity:l}},o,e)):bo(n,{style:{opacity:l},shape:{points:s.points}},o,e);var u=a.getModel("itemStyle"),h=t.getItemVisual(e,"color");n.setStyle(r({lineJoin:"round",fill:h},u.getItemStyle(["opacity"]))),n.hoverStyle=u.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),uo(this)},PL._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,"color");bo(i,{shape:{points:r.linePoints||r.linePoints}},o,e),bo(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel("label"),u=a.getModel("emphasis.label"),h=a.getModel("labelLine"),c=a.getModel("emphasis.labelLine"),s=t.getItemVisual(e,"color");co(n.style,n.hoverStyle={},l,u,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign}),n.ignore=n.normalIgnore=!l.get("show"),n.hoverIgnore=!u.get("show"),i.ignore=i.normalIgnore=!h.get("show"),i.hoverIgnore=!c.get("show"),i.setStyle({stroke:s}),i.setStyle(h.getModel("lineStyle").getLineStyle()),i.hoverStyle=c.getModel("lineStyle").getLineStyle()},u(vf,Zw);Mr.extend({type:"funnel",render:function(t,e,i){var n=t.getData(),o=this._data,a=this.group;n.diff(o).add(function(t){var e=new vf(n,t);n.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=o.getItemGraphicEl(e);i.updateData(n,t),a.add(i),n.setItemGraphicEl(t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=n},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});Es(jD("funnel")),Os(function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),n=i.mapDimension("value"),o=t.get("sort"),a=yf(t,e),r=xf(i,o),s=[Ro(t.get("minSize"),a.width),Ro(t.get("maxSize"),a.width)],l=i.getDataExtent(n),u=t.get("min"),h=t.get("max");null==u&&(u=Math.min(l[0],0)),null==h&&(h=l[1]);var c=t.get("funnelAlign"),d=t.get("gap"),f=(a.height-d*(i.count()-1))/i.count(),p=a.y,g=function(t,e){var o,r=Eo(i.get(n,t)||0,[u,h],s,!0);switch(c){case"left":o=a.x;break;case"center":o=a.x+(a.width-r)/2;break;case"right":o=a.x+a.width-r}return[[o,e],[o+r,e]]};"ascending"===o&&(f=-f,d=-d,p+=a.height,r=r.reverse());for(var m=0;ma&&(e[1-n]=e[n]+h.sign*a),e},RL=d,zL=Math.min,BL=Math.max,VL=Math.floor,GL=Math.ceil,FL=zo,WL=Math.PI;If.prototype={type:"parallel",constructor:If,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;RL(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),r=this._axesMap.set(t,new OL(t,Vl(a),[0,0],a.get("type"),n)),s="category"===r.type;r.onBand=s&&a.get("boundaryGap"),r.inverse=a.get("inverse"),a.axis=r,r.model=a,r.coordinateSystem=a.coordinateSystem=this},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},containPoint:function(t){var e=this._makeLayoutInfo(),i=e.axisBase,n=e.layoutBase,o=e.pixelDimIndex,a=t[1-o],r=t[o];return a>=i&&a<=i+e.axisLength&&r>=n&&r<=n+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();RL(this.dimensions,function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(n,n.mapDimension(t)),Bl(e.scale,e.model)},this)}},this)},resize:function(t,e){this._rect=la(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,i=this._rect,n=["x","y"],o=["width","height"],a=e.get("layout"),r="horizontal"===a?0:1,s=i[o[r]],l=[0,s],u=this.dimensions.length,h=Tf(e.get("axisExpandWidth"),l),c=Tf(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>c&&c>1&&h>0&&s>0,f=e.get("axisExpandWindow");f?(t=Tf(f[1]-f[0],l),f[1]=f[0]+t):(t=Tf(h*(c-1),l),(f=[h*(e.get("axisExpandCenter")||VL(u/2))-t/2])[1]=f[0]+t);var p=(s-t)/(u-c);p<3&&(p=0);var g=[VL(FL(f[0]/h,1))+1,GL(FL(f[1]/h,1))-1],m=p/h*f[0];return{layout:a,pixelDimIndex:r,layoutBase:i[n[r]],layoutLength:s,axisBase:i[n[1-r]],axisLength:i[o[1-r]],axisExpandable:d,axisExpandWidth:h,axisCollapseWidth:p,axisExpandWindow:f,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:m}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,i=this.dimensions,n=this._makeLayoutInfo(),o=n.layout;e.each(function(t){var e=[0,n.axisLength],i=t.inverse?1:0;t.setExtent(e[i],e[1-i])}),RL(i,function(e,i){var a=(n.axisExpandable?Df:Af)(i,n),r={horizontal:{x:a.position,y:n.axisLength},vertical:{x:0,y:a.position}},s={horizontal:WL/2,vertical:0},l=[r[o].x+t.x,r[o].y+t.y],u=s[o],h=mt();wt(h,h,u),_t(h,h,l),this._axesLayout[e]={position:l,rotation:u,transform:h,axisNameAvailableWidth:a.axisNameAvailableWidth,axisLabelShow:a.axisLabelShow,nameTruncateMaxWidth:a.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,i,n){null==i&&(i=0),null==n&&(n=t.count());var o=this._axesMap,a=this.dimensions,r=[],s=[];d(a,function(e){r.push(t.mapDimension(e)),s.push(o.get(e).model)});for(var l=this.hasAxisBrushed(),u=i;uo*(1-h[0])?(l="jump",r=s-o*(1-h[2])):(r=s-o*h[1])>=0&&(r=s-o*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?EL(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[BL(0,a[1]*s/o-o/2)])[1]=zL(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},Ba.register("parallel",{create:function(t,e){var i=[];return t.eachComponent("parallel",function(n,o){var a=new If(n,t,e);a.name="parallel_"+o,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}});var HL=YM.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return Wb([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=i(t);if(e)for(var n=e.length-1;n>=0;n--)Bo(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,o=e.length;n5)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==n.behavior&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&vp(this,"mousemove")){var e=this._model,i=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),n=i.behavior;"jump"===n&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===n?null:{axisExpandWindow:i.axisExpandWindow,animation:"jump"===n&&null})}}};Ls(function(t){wf(t),bf(t)}),OI.extend({type:"series.parallel",dependencies:["parallel"],visualColorAccessPath:"lineStyle.color",getInitialData:function(t,e){var i=this.getSource();return yp(i,this),dl(i,this)},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{show:!1},inactiveOpacity:.05,activeOpacity:1,lineStyle:{width:1,opacity:.45,type:"solid"},emphasis:{label:{show:!1}},progressive:500,smooth:!1,animationEasing:"linear"}});var hk=.3,ck=(Mr.extend({type:"parallel",init:function(){this._dataGroup=new Zw,this.group.add(this._dataGroup),this._data,this._initialized},render:function(t,e,i,n){var o=this._dataGroup,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.dimensions,u=Sp(t);if(a.diff(r).add(function(t){Mp(bp(a,o,t,l,s),a,t,u)}).update(function(e,i){var o=r.getItemGraphicEl(i),h=wp(a,e,l,s);a.setItemGraphicEl(e,o),bo(o,{shape:{points:h}},n&&!1===n.animation?null:t,e),Mp(o,a,e,u)}).remove(function(t){var e=r.getItemGraphicEl(t);o.remove(e)}).execute(),!this._initialized){this._initialized=!0;var h=_p(s,t,function(){setTimeout(function(){o.removeClipPath()})});o.setClipPath(h)}this._data=a},incrementalPrepareRender:function(t,e,i){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},incrementalRender:function(t,e,i){for(var n=e.getData(),o=e.coordinateSystem,a=o.dimensions,r=Sp(e),s=t.start;sn&&(n=e)}),d(e,function(e){var o=new jC({type:"color",mappingMethod:"linear",dataExtent:[i,n],visual:t.get("color")}).mapValueToVisual(e.getLayout().value);e.setVisual("color",o);var a=e.getModel().get("itemStyle.color");null!=a&&e.setVisual("color",a)})}})});var mk={_baseAxisDim:null,getInitialData:function(t,e){var i,n,o=e.getComponent("xAxis",this.get("xAxisIndex")),a=e.getComponent("yAxis",this.get("yAxisIndex")),r=o.get("type"),s=a.get("type");"category"===r?(t.layout="horizontal",i=o.getOrdinalMeta(),n=!0):"category"===s?(t.layout="vertical",i=a.getOrdinalMeta(),n=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,h=this._baseAxisDim=l[u],c=l[1-u],f=[o,a],p=f[u].get("type"),g=f[1-u].get("type"),m=t.data;if(m&&n){var v=[];d(m,function(t,e){var i;t.value&&y(t.value)?(i=t.value.slice(),t.value.unshift(e)):y(t)?(i=t.slice(),t.unshift(e)):i=t,v.push(i)}),t.data=v}var x=this.defaultValueDimensions;return WD(this,{coordDimensions:[{name:h,type:Xs(p),ordinalMeta:i,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:c,type:Xs(g),dimsDef:x.slice()}],dimensionsCount:x.length+1})},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}};h(OI.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}}),mk,!0);var vk=["itemStyle"],yk=["emphasis","itemStyle"],xk=(Mr.extend({type:"boxplot",render:function(t,e,i){var n=t.getData(),o=this.group,a=this._data;this._data||o.removeAll();var r="horizontal"===t.get("layout")?1:0;n.diff(a).add(function(t){if(n.hasValue(t)){var e=qp(n.getItemLayout(t),n,t,r,!0);n.setItemGraphicEl(t,e),o.add(e)}}).update(function(t,e){var i=a.getItemGraphicEl(e);if(n.hasValue(t)){var s=n.getItemLayout(t);i?Kp(s,i,n,t):i=qp(s,n,t,r),o.add(i),n.setItemGraphicEl(t,i)}else o.remove(i)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&o.remove(e)}).execute(),this._data=n},remove:function(t){var e=this.group,i=this._data;this._data=null,i&&i.eachItemGraphicEl(function(t){t&&e.remove(t)})},dispose:B}),kn.extend({type:"boxplotBoxPath",shape:{},buildPath:function(t,e){var i=e.points,n=0;for(t.moveTo(i[n][0],i[n][1]),n++;n<4;n++)t.lineTo(i[n][0],i[n][1]);for(t.closePath();n0?Ck:Lk)}function n(t,e){return e.get(t>0?Ak:Dk)}var o=t.getData(),a=t.pipelineContext.large;if(o.setVisual({legendSymbol:"roundRect",colorP:i(1,t),colorN:i(-1,t),borderColorP:n(1,t),borderColorN:n(-1,t)}),!e.isSeriesFiltered(t))return!a&&{progress:function(t,e){for(var o;null!=(o=t.next());){var a=e.getItemModel(o),r=e.getItemLayout(o).sign;e.setItemVisual(o,{color:i(r,a),borderColor:n(r,a)})}}}}},Pk="undefined"!=typeof Float32Array?Float32Array:Array,Nk={seriesType:"candlestick",plan:zI(),reset:function(t){var e=t.coordinateSystem,i=t.getData(),n=sg(t,i),o=0,a=1,r=["x","y"],s=i.mapDimension(r[o]),l=i.mapDimension(r[a],!0),u=l[0],h=l[1],c=l[2],d=l[3];if(i.setLayout({candleWidth:n,isSimpleBox:n<=1.3}),!(null==s||l.length<4))return{progress:t.pipelineContext.large?function(t,i){for(var n,r,l=new Pk(5*t.count),f=0,p=[],g=[];null!=(r=t.next());){var m=i.get(s,r),v=i.get(u,r),y=i.get(h,r),x=i.get(c,r),_=i.get(d,r);isNaN(m)||isNaN(x)||isNaN(_)?(l[f++]=NaN,f+=4):(l[f++]=rg(i,r,v,y,h),p[o]=m,p[a]=x,n=e.dataToPoint(p,null,g),l[f++]=n?n[0]:NaN,l[f++]=n?n[1]:NaN,p[a]=_,n=e.dataToPoint(p,null,g),l[f++]=n?n[1]:NaN)}i.setLayout("largePoints",l)}:function(t,i){function r(t,i){var n=[];return n[o]=i,n[a]=t,isNaN(i)||isNaN(t)?[NaN,NaN]:e.dataToPoint(n)}function l(t,e,i){var a=e.slice(),r=e.slice();a[o]=Yn(a[o]+n/2,1,!1),r[o]=Yn(r[o]-n/2,1,!0),i?t.push(a,r):t.push(r,a)}function f(t){return t[o]=Yn(t[o],1),t}for(var p;null!=(p=t.next());){var g=i.get(s,p),m=i.get(u,p),v=i.get(h,p),y=i.get(c,p),x=i.get(d,p),_=Math.min(m,v),w=Math.max(m,v),b=r(_,g),S=r(w,g),M=r(y,g),I=r(x,g),T=[];l(T,S,0),l(T,b,1),T.push(f(I),f(S),f(M),f(b)),i.setItemLayout(p,{sign:rg(i,p,m,v,h),initBaseline:m>v?S[a]:b[a],ends:T,brushRect:function(t,e,i){var s=r(t,i),l=r(e,i);return s[o]-=n/2,l[o]-=n/2,{x:s[0],y:s[1],width:a?n:l[0]-s[0],height:a?l[1]-s[1]:n}}(y,x,g)})}}}}};Ls(function(t){t&&y(t.series)&&d(t.series,function(t){w(t)&&"k"===t.type&&(t.type="candlestick")})}),Es(kk),Os(Nk),OI.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){return dl(this.getSource(),this)},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}});var Ok=hg.prototype;Ok.stopEffectAnimation=function(){this.childAt(1).removeAll()},Ok.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),o=0;o<3;o++){var a=Xl(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var r=-o/3*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(r).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(r).start(),n.add(a)}ug(n,t)},Ok.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],o=0;o "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}}),Bk=dg.prototype;Bk.createLine=function(t,e,i){return new $d(t,e,i)},Bk._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");y(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=Xl(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._updateEffectAnimation(t,i,e))},Bk._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,a=t.getItemLayout(i),r=1e3*e.get("period"),s=e.get("loop"),l=e.get("constantSpeed"),u=T(e.get("delay"),function(e){return e/t.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,a),l>0&&(r=this.getLineLength(n)/l*1e3),r!==this._period||s!==this._loop){n.stopAnimation();var c=u;h&&(c=u(i)),n.__t>0&&(c=-r*n.__t),n.__t=0;var d=n.animate("",s).when(r,{__t:1}).delay(c).during(function(){o.updateSymbolPosition(n)});s||d.done(function(){o.remove(n)}),d.start()}this._period=r,this._loop=s}},Bk.getLineLength=function(t){return ew(t.__p1,t.__cp1)+ew(t.__cp1,t.__p2)},Bk.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},Bk.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},Bk.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,a=t.position,r=rn,s=sn;a[0]=r(e[0],n[0],i[0],o),a[1]=r(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),u=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(u,l)-Math.PI/2,t.ignore=!1},Bk.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},u(dg,Zw);var Vk=fg.prototype;Vk._createPolyline=function(t,e,i){var n=t.getItemLayout(e),o=new oM({shape:{points:n}});this.add(o),this._updateCommonStl(t,e,i)},Vk.updateData=function(t,e,i){var n=t.hostModel;bo(this.childAt(0),{shape:{points:t.getItemLayout(e)}},n,e),this._updateCommonStl(t,e,i)},Vk._updateCommonStl=function(t,e,i){var n=this.childAt(0),o=t.getItemModel(e),a=t.getItemVisual(e,"color"),s=i&&i.lineStyle,l=i&&i.hoverLineStyle;i&&!t.hasItemOption||(s=o.getModel("lineStyle").getLineStyle(),l=o.getModel("emphasis.lineStyle").getLineStyle()),n.useStyle(r({strokeNoScale:!0,fill:"none",stroke:a},s)),n.hoverStyle=l,uo(this)},Vk.updateLayout=function(t,e){this.childAt(0).setShape("points",t.getItemLayout(e))},u(fg,Zw);var Gk=pg.prototype;Gk.createLine=function(t,e,i){return new fg(t,e,i)},Gk.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;re);r++);r=Math.min(r-1,o-2)}J(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},u(pg,dg);var Fk=Fn({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(r=0;r0){t.moveTo(i[r++],i[r++]);for(var a=1;a0){var c=(s+u)/2-(l-h)*n,d=(l+h)/2-(u-s)*n;t.quadraticCurveTo(c,d,u,h)}else t.lineTo(u,h)}},findDataIndex:function(t,e){var i=this.shape,n=i.segs,o=i.curveness;if(i.polyline)for(var a=0,r=0;r0)for(var l=n[r++],u=n[r++],h=1;h0){if(xn(l,u,(l+c)/2-(u-d)*o,(u+d)/2-(c-l)*o,c,d))return a}else if(vn(l,u,c,d))return a;a++}return-1}}),Wk=gg.prototype;Wk.isPersistent=function(){return!this._incremental},Wk.updateData=function(t){this.group.removeAll();var e=new Fk({rectHover:!0,cursor:"default"});e.setShape({segs:t.getLayout("linesPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},Wk.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>5e5?(this._incremental||(this._incremental=new Gn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},Wk.incrementalUpdate=function(t,e){var i=new Fk;i.setShape({segs:e.getLayout("linesPoints")}),this._setCommon(i,e,!!this._incremental),this._incremental?this._incremental.addDisplayable(i,!0):(i.rectHover=!0,i.cursor="default",i.__startIndex=t.start,this.group.add(i))},Wk.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},Wk._setCommon=function(t,e,i){var n=e.hostModel;t.setShape({polyline:n.get("polyline"),curveness:n.get("lineStyle.curveness")}),t.useStyle(n.getModel("lineStyle").getLineStyle()),t.style.strokeNoScale=!0;var o=e.getVisual("color");o&&t.setStyle("stroke",o),t.setStyle("fill"),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>0&&(t.dataIndex=i+t.__startIndex)}))},Wk._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()};var Hk={seriesType:"lines",plan:zI(),reset:function(t){var e=t.coordinateSystem,i=t.get("polyline"),n=t.pipelineContext.large;return{progress:function(o,a){var r=[];if(n){var s,l=o.end-o.start;if(i){for(var u=0,h=o.start;h0){var I=a(v)?s:l;v>0&&(v=v*S+b),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(y,0,0),h},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=Y_()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),a=[0,0,0,0],r=0,s=0;s<256;s++)e[i](s/255,!0,a),o[r++]=a[0],o[r++]=a[1],o[r++]=a[2],o[r++]=a[3];return o}},Fs({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll(),this._incrementalDisplayable=null;var o=t.coordinateSystem;"cartesian2d"===o.type||"calendar"===o.type?this._renderOnCartesianAndCalendar(t,i,0,t.getData().count()):_g(o)&&this._renderOnGeo(o,t,n,i)},incrementalPrepareRender:function(t,e,i){this.group.removeAll()},incrementalRender:function(t,e,i,n){e.coordinateSystem&&this._renderOnCartesianAndCalendar(e,n,t.start,t.end,!0)},_renderOnCartesianAndCalendar:function(t,e,i,n,o){var r,s,l=t.coordinateSystem;if("cartesian2d"===l.type){var u=l.getAxis("x"),h=l.getAxis("y");r=u.getBandWidth(),s=h.getBandWidth()}for(var c=this.group,d=t.getData(),f=t.getModel("itemStyle").getItemStyle(["color"]),p=t.getModel("emphasis.itemStyle").getItemStyle(),g=t.getModel("label"),m=t.getModel("emphasis.label"),v=l.type,y="cartesian2d"===v?[d.mapDimension("x"),d.mapDimension("y"),d.mapDimension("value")]:[d.mapDimension("time"),d.mapDimension("value")],x=i;x=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},Ba.register("single",{create:function(t,e){var i=[];return t.eachComponent("singleAxis",function(n,o){var a=new Zg(n,t,e);a.name="single_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i&&i.coordinateSystem}}),i},dimensions:Zg.prototype.dimensions});var $k=["axisLine","axisTickLabel","axisName"],Jk=LD.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,i,n){var o=this.group;o.removeAll();var a=Ug(t),r=new ID(t,a);d($k,r.add,r),o.add(r.getGroup()),t.get("splitLine.show")&&this._splitLine(t),Jk.superCall(this,"render",t,e,i,n)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),o=n.get("width"),a=n.get("color");a=a instanceof Array?a:[a];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;f=0)&&i({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){lm(e.getZr(),"axisPointer"),sP.superApply(this._model,"remove",arguments)},dispose:function(t,e){lm("axisPointer",e),sP.superApply(this._model,"dispose",arguments)}}),lP=Bi(),uP=i,hP=m;(um.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var o=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==o||this._lastStatus!==a){this._lastValue=o,this._lastStatus=a;var r=this._group,s=this._handle;if(!a||"hide"===a)return r&&r.hide(),void(s&&s.hide());r&&r.show(),s&&s.show();var l={};this.makeElOption(l,o,t,e,i);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=u;var h=this._moveAnimation=this.determineAnimation(t,e);if(r){var c=v(hm,e,h);this.updatePointerEl(r,l,c,e),this.updateLabelEl(r,l,c,e)}else r=this._group=new Zw,this.createPointerEl(r,l,t,e),this.createLabelEl(r,l,t,e),i.getZr().add(r);pm(r,e,!0),this._renderHandle(o)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get("animation"),n=t.axis,o="category"===n.type,a=e.get("snap");if(!a&&!o)return!1;if("auto"===i||null==i){var r=this.animationThreshold;if(o&&n.getBandWidth()>r)return!0;if(a){var s=xh(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1}return!0===i},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=lP(t).pointerEl=new bM[o.type](uP(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=lP(t).labelEl=new aM(uP(e.label));t.add(o),dm(o,n)}},updatePointerEl:function(t,e,i){var n=lP(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=lP(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),dm(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,o=e.getModel("handle"),a=e.get("status");if(!o.get("show")||!a||"hide"===a)return n&&i.remove(n),void(this._handle=null);var r;this._handle||(r=!0,n=this._handle=Co(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){lw(t.event)},onmousedown:hP(this._onHandleDragMove,this,0,0),drift:hP(this._onHandleDragMove,this),ondragend:hP(this._onHandleDragEnd,this)}),i.add(n)),pm(n,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];n.setStyle(o.getItemStyle(null,s));var l=o.get("size");y(l)||(l=[l,l]),n.attr("scale",[l[0]/2,l[1]/2]),Lr(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,r)}},_moveHandleToValue:function(t,e){hm(this._axisPointerModel,!e&&this._moveAnimation,this._handle,fm(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(fm(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(fm(n)),lP(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=um,Xi(um);var cP=um.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=Mm(r,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=gm(n),c=dP[s](a,u,l,h);c.style=h,t.graphicKey=c.type,t.pointer=c}_m(e,t,Ih(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=Ih(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:xm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=Mm(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];var d=[{verticalAlign:"middle"},{align:"center"}];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:d[l]}}}),dP={line:function(t,e,i,n){var o=wm([e,i[0]],[e,i[1]],Im(t));return Xn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=Math.max(1,t.getBandWidth()),a=i[1]-i[0];return{type:"Rect",shape:bm([e-o/2,i[0]],[o,a],Im(t))}}};LD.registerAxisPointerClass("CartesianAxisPointer",cP),Ls(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!y(e)&&(t.axisPointer.link=[e])}}),ks(IT.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=dh(t,e)}),Ps({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,o=[t.x,t.y],a=t,r=t.dispatchAction||m(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){em(o)&&(o=eP({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=em(o),u=a.axesInfo,h=s.axesInfo,c="leave"===n||em(o),d={},f={},p={list:[],map:{}},g={showPointer:nP(Yg,f),showTooltip:nP(qg,p)};iP(s.coordSysMap,function(t,e){var i=l||t.containPoint(o);iP(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,a=Qg(u,t);if(!c&&i&&(!u||a)){var r=a&&a.value;null!=r||l||(r=n.pointToData(o)),null!=r&&Xg(t,r,g,!1,d)}})});var v={};return iP(h,function(t,e){var i=t.linkGroup;i&&!f[e]&&iP(i.axesInfo,function(e,n){var o=f[n];if(e!==t&&o){var a=o.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,tm(e),tm(t)))),v[t.key]=a}})}),iP(v,function(t,e){Xg(h[e],t,g,!0,d)}),Kg(f,h,d),$g(p,o,t,r),Jg(h,0,i),d}});var fP=["x","y"],pP=["width","height"],gP=um.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=Am(r,1-Tm(a)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=gm(n),c=mP[u](a,l,s,h);c.style=h,t.graphicKey=c.type,t.pointer=c}_m(e,t,Ug(i),i,n,o)},getHandleTransform:function(t,e,i){var n=Ug(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:xm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=Tm(o),s=Am(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=Am(a,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),mP={line:function(t,e,i,n){var o=wm([e,i[0]],[e,i[1]],Tm(t));return Xn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:bm([e-o/2,i[0]],[o,a],Tm(t))}}};LD.registerAxisPointerClass("SingleAxisPointer",gP),Vs({type:"single"});var vP=OI.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){vP.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){for(var e=t.length,i=f(Lp().key(function(t){return t[2]}).entries(t),function(t){return{name:t.key,dataList:t.values}}),n=i.length,o=-1,a=-1,r=0;ro&&(o=s,a=r)}for(var l=0;lMath.PI/2?"right":"left"):x&&"center"!==x?"left"===x?(f=u.r0+y,p>Math.PI/2&&(x="right")):"right"===x&&(f=u.r-y,p>Math.PI/2&&(x="left")):(f=(u.r+u.r0)/2,x="center"),d.attr("style",{text:l,textAlign:x,textVerticalAlign:n("verticalAlign")||"middle",opacity:n("opacity")});var _=f*g+u.cx,w=f*m+u.cy;d.attr("position",[_,w]);var b=n("rotate"),S=0;"radial"===b?(S=-p)<-Math.PI/2&&(S+=Math.PI):"tangential"===b?(S=Math.PI/2-p)>Math.PI/2?S-=Math.PI:S<-Math.PI/2&&(S+=Math.PI):"number"==typeof b&&(S=b*Math.PI/180),d.attr("rotation",S)},wP._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");var o=this,a=function(){o.onEmphasis(n)},r=function(){o.onNormal()};i.isAnimationEnabled()&&t.on("mouseover",a).on("mouseout",r).on("emphasis",a).on("normal",r).on("downplay",function(){o.onDownplay()}).on("highlight",function(){o.onHighlight()})},u(Pm,Zw);Mr.extend({type:"sunburst",init:function(){},render:function(t,e,i,n){function o(i,n){if(c||!i||i.getValue()||(i=null),i!==l&&n!==l)if(n&&n.piece)i?(n.piece.updateData(!1,i,"normal",t,e),s.setItemGraphicEl(i.dataIndex,n.piece)):a(n);else if(i){var o=new Pm(i,t,e);h.add(o),s.setItemGraphicEl(i.dataIndex,o)}}function a(t){t&&t.piece&&(h.remove(t.piece),t.piece=null)}var r=this;this.seriesModel=t,this.api=i,this.ecModel=e;var s=t.getData(),l=s.tree.root,u=t.getViewRoot(),h=this.group,c=t.get("renderLabelForZeroData"),d=[];u.eachNode(function(t){d.push(t)});var f=this._oldChildren||[];if(function(t,e){function i(t){return t.getId()}function n(i,n){o(null==i?null:t[i],null==n?null:e[n])}0===t.length&&0===e.length||new Hs(e,t,i,i).add(n).update(n).remove(v(n,null)).execute()}(d,f),function(i,n){if(n.depth>0){r.virtualPiece?r.virtualPiece.updateData(!1,i,"normal",t,e):(r.virtualPiece=new Pm(i,t,e),h.add(r.virtualPiece)),n.piece._onclickEvent&&n.piece.off("click",n.piece._onclickEvent);var o=function(t){r._rootToNode(n.parentNode)};n.piece._onclickEvent=o,r.virtualPiece.on("click",o)}else r.virtualPiece&&(h.remove(r.virtualPiece),r.virtualPiece=null)}(l,u),n&&n.highlight&&n.highlight.piece){var p=t.getShallow("highlightPolicy");n.highlight.piece.onEmphasis(p)}else if(n&&n.unhighlight){var g=this.virtualPiece;!g&&l.children.length&&(g=l.children[0].piece),g&&g.onNormal()}this._initEvents(),this._oldChildren=d},dispose:function(){},_initEvents:function(){var t=this,e=function(e){var i=!1;t.seriesModel.getViewRoot().eachNode(function(n){if(!i&&n.piece&&n.piece.childAt(0)===e.target){var o=n.getModel().get("nodeClick");if("rootToNode"===o)t._rootToNode(n);else if("link"===o){var a=n.getModel(),r=a.get("link");if(r){var s=a.get("target",!0)||"_blank";window.open(r,s)}}i=!0}})};this.group._onclickEvent&&this.group.off("click",this.group._onclickEvent),this.group.on("click",e),this.group._onclickEvent=e},_rootToNode:function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:"sunburstRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var bP="sunburstRootToNode";Ps({type:bP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=td(t,[bP],e);if(n){var o=e.getViewRoot();o&&(t.direction=id(o,n.node)?"rollUp":"drillDown"),e.resetViewRoot(n.node)}})});var SP="sunburstHighlight";Ps({type:SP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=td(t,[SP],e);n&&(t.highlight=n.node)})});Ps({type:"sunburstUnhighlight",update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){t.unhighlight=!0})});var MP=Math.PI/180;Es(v(jD,"sunburst")),Os(v(function(t,e,i,n){e.eachSeriesByType(t,function(t){var e=t.get("center"),n=t.get("radius");y(n)||(n=[0,n]),y(e)||(e=[e,e]);var o=i.getWidth(),a=i.getHeight(),r=Math.min(o,a),s=Ro(e[0],o),l=Ro(e[1],a),u=Ro(n[0],r/2),h=Ro(n[1],r/2),c=-t.get("startAngle")*MP,f=t.get("minAngle")*MP,p=t.getData().tree.root,g=t.getViewRoot(),m=g.depth,v=t.get("sort");null!=v&&Rm(g,v);var x=0;d(g.children,function(t){!isNaN(t.getValue())&&x++});var _=g.getValue(),w=Math.PI/(_||x)*2,b=g.depth>0,S=g.height-(b?-1:1),M=(h-u)/(S||1),I=t.get("clockwise"),T=t.get("stillShowZeroSum"),A=I?1:-1,D=function(t,e){if(t){var i=e;if(t!==p){var n=t.getValue(),o=0===_&&T?w:n*w;on[1]&&n.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:m(function(n){var o=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),r=t.coordToPoint([o,a]);return r.push(o,a*Math.PI/180),r}),size:m(Fm,t)}}},calendar:function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:function(e,i){return t.dataToPoint(e,i)}}}}};OI.extend({type:"series.custom",dependencies:["grid","polar","geo","singleAxis","calendar"],defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,useTransform:!0},getInitialData:function(t,e){return dl(this.getSource(),this)},getDataParams:function(t,e,i){var n=OI.prototype.getDataParams.apply(this,arguments);return i&&(n.info=i.info),n}}),Mr.extend({type:"custom",_data:null,render:function(t,e,i,n){var o=this._data,a=t.getData(),r=this.group,s=Um(t,a,e,i);a.diff(o).add(function(e){jm(null,e,s(e,n),t,r,a)}).update(function(e,i){jm(o.getItemGraphicEl(i),e,s(e,n),t,r,a)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)}).execute(),this._data=a},incrementalPrepareRender:function(t,e,i){this.group.removeAll(),this._data=null},incrementalRender:function(t,e,i,n,o){for(var a=e.getData(),r=Um(e,a,i,n),s=t.start;s=0;l--)null==o[l]?o.splice(l,1):delete o[l].$action},_flatten:function(t,e,i){d(t,function(t){if(t){i&&(t.parentOption=i),e.push(t);var n=t.children;"group"===t.type&&n&&this._flatten(n,e,t),delete t.children}},this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});Vs({type:"graphic",init:function(t,e){this._elMap=R(),this._lastGraphicModel},render:function(t,e,i){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t),this._relocate(t,i)},_updateElements:function(t){var e=t.useElOptionsToUpdate();if(e){var i=this._elMap,n=this.group;d(e,function(e){var o=e.$action,a=e.id,r=i.get(a),s=e.parentId,l=null!=s?i.get(s):n,u=e.style;"text"===e.type&&u&&(e.hv&&e.hv[1]&&(u.textVerticalAlign=u.textBaseline=null),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke));var h=av(e);o&&"merge"!==o?"replace"===o?(ov(r,i),nv(a,l,h,i)):"remove"===o&&ov(r,i):r?r.attr(h):nv(a,l,h,i);var c=i.get(a);c&&(c.__ecGraphicWidth=e.width,c.__ecGraphicHeight=e.height,hv(c,t))})}},_relocate:function(t,e){for(var i=t.option.elements,n=this.group,o=this._elMap,a=i.length-1;a>=0;a--){var r=i[a],s=o.get(r.id);if(s){var l=s.parent;ua(s,r,l===n?{width:e.getWidth(),height:e.getHeight()}:{width:l.__ecGraphicWidth||0,height:l.__ecGraphicHeight||0},null,{hv:r.hv,boundingMode:r.bounding})}}},_clear:function(){var t=this._elMap;t.each(function(e){ov(e,t)}),this._elMap=R()},dispose:function(){this._clear()}});var PP=Bs({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){PP.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});Ps("legendToggleSelect","legendselectchanged",v(cv,"toggleSelected")),Ps("legendSelect","legendselected",v(cv,"select")),Ps("legendUnSelect","legendunselected",v(cv,"unSelect"));var NP=v,OP=d,EP=Zw,RP=Vs({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new EP),this._backgroundEl},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){if(this.resetInner(),t.get("show",!0)){var n=t.get("align");n&&"auto"!==n||(n="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left"),this.renderInner(n,t,e,i);var o=t.getBoxLayoutParams(),a={width:i.getWidth(),height:i.getHeight()},s=t.get("padding"),l=la(o,a,s),u=this.layoutInner(t,n,l),h=la(r({width:u.width,height:u.height},o),a,s);this.group.attr("position",[h.x-u.x,h.y-u.y]),this.group.add(this._backgroundEl=fv(u,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var o=this.getContentGroup(),a=R(),r=e.get("selectedMode"),s=[];i.eachRawSeries(function(t){!t.get("legendHoverLink")&&s.push(t.id)}),OP(e.getData(),function(l,u){var h=l.get("name");if(this.newlineDisabled||""!==h&&"\n"!==h){var c=i.getSeriesByName(h)[0];if(!a.get(h))if(c){var d=c.getData(),f=d.getVisual("color");"function"==typeof f&&(f=f(c.getDataParams(0)));var p=d.getVisual("legendSymbol")||"roundRect",g=d.getVisual("symbol");this._createItem(h,u,l,e,p,g,t,f,r).on("click",NP(pv,h,n)).on("mouseover",NP(gv,c.name,null,n,s)).on("mouseout",NP(mv,c.name,null,n,s)),a.set(h,!0)}else i.eachRawSeries(function(i){if(!a.get(h)&&i.legendDataProvider){var o=i.legendDataProvider(),c=o.indexOfName(h);if(c<0)return;var d=o.getItemVisual(c,"color");this._createItem(h,u,l,e,"roundRect",null,t,d,r).on("click",NP(pv,h,n)).on("mouseover",NP(gv,null,h,n,s)).on("mouseout",NP(mv,null,h,n,s)),a.set(h,!0)}},this)}else o.add(new EP({newline:!0}))},this)},_createItem:function(t,e,i,n,o,r,s,l,u){var h=n.get("itemWidth"),c=n.get("itemHeight"),d=n.get("inactiveColor"),f=n.get("symbolKeepAspect"),p=n.isSelected(t),g=new EP,m=i.getModel("textStyle"),v=i.get("icon"),y=i.getModel("tooltip"),x=y.parentModel;if(o=v||o,g.add(Xl(o,0,0,h,c,p?l:d,null==f||f)),!v&&r&&(r!==o||"none"===r)){var _=.8*c;"none"===r&&(r="circle"),g.add(Xl(r,(h-_)/2,(c-_)/2,_,_,p?l:d,null==f||f))}var w="left"===s?h+5:-5,b=s,S=n.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",null!=t?t:""):"function"==typeof S&&(M=S(t)),g.add(new qS({style:fo({},m,{text:M,x:w,y:c/2,textFill:p?m.getTextColor():d,textAlign:b,textVerticalAlign:"middle"})}));var I=new aM({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?a({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:n.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!u,this.getContentGroup().add(g),uo(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();UM(t.get("orient"),n,t.get("itemGap"),i.width,i.height);var o=n.getBoundingRect();return n.attr("position",[-o.x,-o.y]),this.group.getBoundingRect()}});ks(function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;ii[s],f=[-h.x,-h.y];f[r]=n.position[r];var p=[0,0],g=[-c.x,-c.y],m=A(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?g[r]+=i[s]-c[s]:p[r]+=c[s]+m),g[1-r]+=h[l]/2-c[l]/2,n.attr("position",f),o.attr("position",p),a.attr("position",g);var v=this.group.getBoundingRect();if((v={x:0,y:0})[s]=d?i[s]:h[s],v[l]=Math.max(h[l],c[l]),v[u]=Math.min(0,c[u]+g[1-r]),o.__rectSize=i[s],d){var y={x:0,y:0};y[s]=Math.max(i[s]-c[s]-m,0),y[l]=v[l],o.setClipPath(new aM({shape:y})),o.__rectSize=y[s]}else a.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&bo(n,{position:x.contentPosition},!!d&&t),this._updatePageInfoView(t,x),v},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;d(["pagePrev","pageNext"],function(n){var o=null!=e[n+"DataIndex"],a=i.childOfName(n);a&&(a.setStyle("fill",o?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=o?"pointer":"default")});var n=i.childOfName("pageText"),o=t.get("pageFormatter"),a=e.pageIndex,r=null!=a?a+1:0,s=e.pageCount;n&&o&&n.setStyle("text",_(o)?o.replace("{current}",r).replace("{total}",s):o({current:r,total:s}))},_getPageInfo:function(t){function e(t){var e=t.getBoundingRect().clone();return e[f]+=t.position[h],e}var i,n,o,a,r=t.get("scrollDataIndex",!0),s=this.getContentGroup(),l=s.getBoundingRect(),u=this._containerGroup.__rectSize,h=t.getOrient().index,c=VP[h],d=VP[1-h],f=GP[h],p=s.position.slice();this._showController?s.eachChild(function(t){t.__legendDataIndex===r&&(a=t)}):a=s.childAt(0);var g=u?Math.ceil(l[c]/u):0;if(a){var m=a.getBoundingRect(),v=a.position[h]+m[f];p[h]=-v-l[f],i=Math.floor(g*(v+m[f]+u/2)/l[c]),i=l[c]&&g?Math.max(0,Math.min(g-1,i)):-1;var y={x:0,y:0};y[c]=u,y[d]=l[d],y[f]=-p[h]-l[f];var x,_=s.children();if(s.eachChild(function(t,i){var n=e(t);n.intersect(y)&&(null==x&&(x=i),o=t.__legendDataIndex),i===_.length-1&&n[f]+n[c]<=y[f]+y[c]&&(o=null)}),null!=x){var w=e(_[x]);if(y[f]=w[f]+w[c]-y[c],x<=0&&w[f]>=y[f])n=null;else{for(;x>0&&e(_[x-1]).intersect(y);)x--;n=_[x].__legendDataIndex}}}return{contentPosition:p,pageIndex:i,pageCount:g,pagePrevDataIndex:n,pageNextDataIndex:o}}});Ps("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})}),Bs({type:"tooltip",dependencies:["axisPointer"],defaultOption:{zlevel:0,z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#fff",fontSize:14}}});var WP=d,HP=Jo,ZP=["","-webkit-","-moz-","-o-"];wv.prototype={constructor:wv,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==e.position&&(i.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;"+_v(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",e.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var i,n=this._zr;n&&n.painter&&(i=n.painter.getViewportRootOffset())&&(t+=i.offsetLeft,e+=i.offsetTop);var o=this.el.style;o.left=t+"px",o.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){var t=this.el.clientWidth,e=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var i=document.defaultView.getComputedStyle(this.el);i&&(t+=parseInt(i.paddingLeft,10)+parseInt(i.paddingRight,10)+parseInt(i.borderLeftWidth,10)+parseInt(i.borderRightWidth,10),e+=parseInt(i.paddingTop,10)+parseInt(i.paddingBottom,10)+parseInt(i.borderTopWidth,10)+parseInt(i.borderBottomWidth,10))}return{width:t,height:e}}},bv.prototype={constructor:bv,_enterable:!0,update:function(){},show:function(t){this._hideTimeout&&clearTimeout(this._hideTimeout),this.el.attr("show",!0),this._show=!0},setContent:function(t,e,i){this.el&&this._zr.remove(this.el);for(var n={},o=t,a=o.indexOf("{marker");a>=0;){var r=o.indexOf("|}"),s=o.substr(a+"{marker".length,r-a-"{marker".length);s.indexOf("sub")>-1?n["marker"+s]={textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[s],textOffset:[3,0]}:n["marker"+s]={textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[s]},a=(o=o.substr(r+1)).indexOf("{marker")}this.el=new qS({style:{rich:n,text:t,textLineHeight:20,textBackgroundColor:i.get("backgroundColor"),textBorderRadius:i.get("borderRadius"),textFill:i.get("textStyle.color"),textPadding:i.get("padding")},z:i.get("z")}),this._zr.add(this.el);var l=this;this.el.on("mouseover",function(){l._enterable&&(clearTimeout(l._hideTimeout),l._show=!0),l._inContent=!0}),this.el.on("mouseout",function(){l._enterable&&l._show&&l.hideLater(l._hideDelay),l._inContent=!1})},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){this.el&&this.el.attr("position",[t,e])},hide:function(){this.el.hide(),this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){return this.getSize()}};var UP=m,XP=d,jP=Ro,YP=new aM({shape:{x:-1,y:-1,width:2,height:2}});Vs({type:"tooltip",init:function(t,e){if(!z_.node){var i=t.getComponent("tooltip").get("renderMode");this._renderMode=Hi(i);var n;"html"===this._renderMode?(n=new wv(e.getDom(),e),this._newLine="
    "):(n=new bv(e),this._newLine="\n"),this._tooltipContent=n}},render:function(t,e,i){if(!z_.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var n=this._tooltipContent;n.update(),n.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel.get("triggerOn");im("itemTooltip",this._api,UP(function(e,i,n){"none"!==t&&(t.indexOf(e)>=0?this._tryShow(i,n):"leave"===e&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!z_.node){var o=Mv(n,i);this._ticket="";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var r=YP;r.position=[n.x,n.y],r.update(),r.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:r},o)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},o);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=eP(n,e),l=s.point[0],u=s.point[1];null!=l&&null!=u&&this._tryShow({offsetX:l,offsetY:u,position:n.position,target:s.el,event:{}},o)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:"updateAxisPointer",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},o))}},manuallyHideTip:function(t,e,i,n){var o=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(Mv(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var o=n.seriesIndex,a=n.dataIndex,r=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=o&&null!=a&&null!=r){var s=e.getSeriesByIndex(o);if(s&&"axis"===(t=Sv([s.getData().getItemModel(a),s,(s.coordinateSystem||{}).model,t])).get("trigger"))return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:a,position:n.position}),!0}},_tryShow:function(t,e){var i=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var n=t.dataByCoordSys;n&&n.length?this._showAxisTooltip(n,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get("showDelay");e=m(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,o=this._tooltipModel,a=[e.offsetX,e.offsetY],r=[],s=[],l=Sv([e.tooltipOption,o]),u=this._renderMode,h=this._newLine,c={};XP(t,function(t){XP(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+"Axis",t.axisIndex),o=t.value,a=[];if(e&&null!=o){var l=ym(o,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);d(t.seriesDataIndices,function(r){var h=i.getSeriesByIndex(r.seriesIndex),d=r.dataIndexInside,f=h&&h.getDataParams(d);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=Wl(e.axis,o),f.axisValueLabel=l,f){s.push(f);var p,g=h.formatTooltip(d,!0,null,u);if(w(g)){p=g.html;var m=g.markers;n(c,m)}else p=g;a.push(p)}});var f=l;"html"!==u?r.push(a.join(h)):r.push((f?Qo(f)+h:"")+a.join(h))}})},this),r.reverse(),r=r.join(this._newLine+this._newLine);var f=e.position;this._showOrMove(l,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(l,f,a[0],a[1],this._tooltipContent,s):this._showTooltipContent(l,r,s,Math.random(),a[0],a[1],f,void 0,c)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,o=e.seriesIndex,a=n.getSeriesByIndex(o),r=e.dataModel||a,s=e.dataIndex,l=e.dataType,u=r.getData(),h=Sv([u.getItemModel(s),r,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=h.get("trigger");if(null==c||"item"===c){var d,f,p=r.getDataParams(s,l),g=r.formatTooltip(s,!1,l,this._renderMode);w(g)?(d=g.html,f=g.markers):(d=g,f=null);var m="item_"+r.name+"_"+s;this._showOrMove(h,function(){this._showTooltipContent(h,d,p,m,t.offsetX,t.offsetY,t.position,t.target,f)}),i({type:"showTip",dataIndexInside:s,dataIndex:u.getRawIndex(s),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if("string"==typeof n){var o=n;n={content:o,formatter:o}}var a=new Lo(n,this._tooltipModel,this._ecModel),r=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,r,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,i,n,o,a,r,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent,h=t.get("formatter");r=r||t.get("position");var c=e;if(h&&"string"==typeof h)c=ta(h,i,!0);else if("function"==typeof h){var d=UP(function(e,n){e===this._ticket&&(u.setContent(n,l,t),this._updatePosition(t,r,o,a,u,i,s))},this);this._ticket=n,c=h(i,n,d)}u.setContent(c,l,t),u.show(t),this._updatePosition(t,r,o,a,u,i,s)}},_updatePosition:function(t,e,i,n,o,a,r){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=o.getSize(),h=t.get("align"),c=t.get("verticalAlign"),d=r&&r.getBoundingRect().clone();if(r&&d.applyTransform(r.transform),"function"==typeof e&&(e=e([i,n],a,o.el,d,{viewSize:[s,l],contentSize:u.slice()})),y(e))i=jP(e[0],s),n=jP(e[1],l);else if(w(e)){e.width=u[0],e.height=u[1];var f=la(e,{width:s,height:l});i=f.x,n=f.y,h=null,c=null}else"string"==typeof e&&r?(i=(p=Av(e,d,u))[0],n=p[1]):(i=(p=Iv(i,n,o,s,l,h?null:20,c?null:20))[0],n=p[1]);if(h&&(i-=Dv(h)?u[0]/2:"right"===h?u[0]:0),c&&(n-=Dv(c)?u[1]/2:"bottom"===c?u[1]:0),t.get("confine")){var p=Tv(i,n,o,s,l);i=p[0],n=p[1]}o.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&XP(e,function(e,n){var o=e.dataByAxis||{},a=(t[n]||{}).dataByAxis||[];(i&=o.length===a.length)&&XP(o,function(t,e){var n=a[e]||{},o=t.seriesDataIndices||[],r=n.seriesDataIndices||[];(i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&o.length===r.length)&&XP(o,function(t,e){var n=r[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){z_.node||(this._tooltipContent.hide(),lm("itemTooltip",e))}}),Ps({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),Ps({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){}),Pv.prototype={constructor:Pv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToRadius:HA.prototype.dataToCoord,radiusToData:HA.prototype.coordToData},u(Pv,HA);var qP=Bi();Nv.prototype={constructor:Nv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToAngle:HA.prototype.dataToCoord,angleToData:HA.prototype.coordToData,calculateCategoryInterval:function(){var t=this,e=t.getLabelModel(),i=t.scale,n=i.getExtent(),o=i.count();if(n[1]-n[0]<1)return 0;var a=n[0],r=t.dataToCoord(a+1)-t.dataToCoord(a),s=Math.abs(r),l=De(a,e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var h=Math.max(0,Math.floor(u)),c=qP(t.model),d=c.lastAutoInterval,f=c.lastTickCount;return null!=d&&null!=f&&Math.abs(d-h)<=1&&Math.abs(f-o)<=1&&d>h?h=d:(c.lastTickCount=o,c.lastAutoInterval=h),h}},u(Nv,HA);var KP=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new Pv,this._angleAxis=new Nv,this._radiusAxis.polar=this._angleAxis.polar=this};KP.prototype={type:"polar",axisPointerEnabled:!0,constructor:KP,dimensions:["radius","angle"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),a=Math.min(o[0],o[1]),r=Math.max(o[0],o[1]);n.inverse?a=r-360:r=a+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,u=lr;)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI;return[Math.cos(i)*e+this.cx,-Math.sin(i)*e+this.cy]}};var $P=YM.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});n($P.prototype,CA);var JP={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};xD("angle",$P,Ov,JP.angle),xD("radius",$P,Ov,JP.radius),Bs({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}});var QP={dimensions:KP.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,n){var o=new KP(n);o.update=Rv;var a=o.getRadiusAxis(),r=o.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");zv(a,s),zv(r,l),Ev(o,t,e),i.push(o),t.coordinateSystem=o,o.model=t}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};Ba.register("polar",QP);var tN=["axisLine","axisLabel","axisTick","splitLine","splitArea"];LD.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,o=n.polar,a=o.getRadiusAxis().getExtent(),r=n.getTicksCoords(),s=f(n.getViewLabels(),function(t){return(t=i(t)).coord=n.dataToCoord(t.tickValue),t});Gv(s),Gv(r),d(tN,function(e){!t.get(e+".show")||n.scale.isBlank()&&"axisLine"!==e||this["_"+e](t,o,r,a,s)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new KS({shape:{cx:e.cx,cy:e.cy,r:n[Vv(e)]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n){var o=t.getModel("axisTick"),a=(o.get("inside")?-1:1)*o.get("length"),s=n[Vv(e)],l=f(i,function(t){return new rM({shape:Bv(e,[s,s+a],t.coord)})});this.group.add(xM(l,{style:r(o.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n,o){var a=t.getCategories(!0),r=t.getModel("axisLabel"),s=r.get("margin");d(o,function(i,o){var l=r,u=i.tickValue,h=n[Vv(e)],c=e.coordToPoint([h+s,i.coord]),d=e.cx,f=e.cy,p=Math.abs(c[0]-d)/h<.3?"center":c[0]>d?"left":"right",g=Math.abs(c[1]-f)/h<.3?"middle":c[1]>f?"top":"bottom";a&&a[u]&&a[u].textStyle&&(l=new Lo(a[u].textStyle,r,r.ecModel));var m=new qS({silent:!0});this.group.add(m),fo(m.style,l,{x:c[0],y:c[1],textFill:l.getTextColor()||t.get("axisLine.lineStyle.color"),text:i.formattedLabel,textAlign:p,textVerticalAlign:g})},this)},_splitLine:function(t,e,i,n){var o=t.getModel("splitLine").getModel("lineStyle"),a=o.get("color"),s=0;a=a instanceof Array?a:[a];for(var l=[],u=0;u=0?"p":"n",M=y;v&&(n[r][b]||(n[r][b]={p:y,n:y}),M=n[r][b][S]);var I,T,A,D;if("radius"===h.dim){var C=h.dataToRadius(w)-y,L=a.dataToAngle(b);Math.abs(C)=0},fN.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=oy(e,t),o=0;o=0||uN(n,t.getAxis("y").model)>=0)&&a.push(t)}),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:a[0],coordSyses:a,getPanelRect:mN.grid,xAxisDeclared:r[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){lN(t.geoModels,function(t){var i=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:i,coordSyses:[i],getPanelRect:mN.geo})})}},gN=[function(t,e){var i=t.xAxisModel,n=t.yAxisModel,o=t.gridModel;return!o&&i&&(o=i.axis.grid.model),!o&&n&&(o=n.axis.grid.model),o&&o===e.gridModel},function(t,e){var i=t.geoModel;return i&&i===e.geoModel}],mN={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Mo(t)),e}},vN={lineX:hN(ay,0),lineY:hN(ay,1),rect:function(t,e,i){var n=e[cN[t]]([i[0][0],i[1][0]]),o=e[cN[t]]([i[0][1],i[1][1]]),a=[ny([n[0],o[0]]),ny([n[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,i){var n=[[1/0,-1/0],[1/0,-1/0]];return{values:f(i,function(i){var o=e[cN[t]](i);return n[0][0]=Math.min(n[0][0],o[0]),n[1][0]=Math.min(n[1][0],o[1]),n[0][1]=Math.max(n[0][1],o[0]),n[1][1]=Math.max(n[1][1],o[1]),o}),xyMinMax:n}}},yN={lineX:hN(ry,0),lineY:hN(ry,1),rect:function(t,e,i){return[[t[0][0]-i[0]*e[0][0],t[0][1]-i[0]*e[0][1]],[t[1][0]-i[1]*e[1][0],t[1][1]-i[1]*e[1][1]]]},polygon:function(t,e,i){return f(t,function(t,n){return[t[0]-i[0]*e[n][0],t[1]-i[1]*e[n][1]]})}},xN=["inBrush","outOfBrush"],_N="__ecBrushSelect",wN="__ecInBrushSelectEvent",bN=IT.VISUAL.BRUSH;Os(bN,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),(e.brushTargetManager=new iy(e.option,t)).setInputRanges(e.areas,t)})}),Es(bN,function(t,e,n){var o,a,s=[];t.eachComponent({mainType:"brush"},function(e,n){function l(t){return"all"===m||v[t]}function u(t){return!!t.length}function h(t,e){var i=t.coordinateSystem;w|=i.hasAxisBrushed(),l(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(x[e]=1)})}function c(i,n,o){var a=dy(i);if(a&&!fy(e,n)&&(d(b,function(n){a[n.brushType]&&e.brushTargetManager.controlSeries(n,i,t)&&o.push(n),w|=u(o)}),l(n)&&u(o))){var r=i.getData();r.each(function(t){cy(a,o,r,t)&&(x[t]=1)})}}var p={brushId:e.id,brushIndex:n,brushName:e.name,areas:i(e.areas),selected:[]};s.push(p);var g=e.option,m=g.brushLink,v=[],x=[],_=[],w=0;n||(o=g.throttleType,a=g.throttleDelay);var b=f(e.areas,function(t){return py(r({boundingRect:SN[t.brushType](t)},t))}),S=Xv(e.option,xN,function(t){t.mappingMethod="fixed"});y(m)&&d(m,function(t){v[t]=1}),t.eachSeries(function(t,e){var i=_[e]=[];"parallel"===t.subType?h(t,e):c(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};p.selected.push(i);var n=dy(t),o=_[e],a=t.getData(),r=l(e)?function(t){return x[t]?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return cy(n,o,a,t)?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"};(l(e)?w:u(o))&&Yv(xN,S,a,r)})}),uy(e,o,a,s,n)});var SN={lineX:B,lineY:B,rect:function(t){return gy(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&gy(e)}},MN=["#ddd"];Bs({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&jv(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:MN},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=f(t,function(t){return my(this.option,t)},this))},setBrushOption:function(t){this.brushOption=my(this.option,t),this.brushType=this.brushOption.brushType}});Vs({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Cf(e.getZr())).on("brush",m(this._onBrush,this)).mount()},render:function(t){return this.model=t,vy.apply(this,arguments)},updateTransform:vy,updateView:vy,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:i(t),$from:n})}}),Ps({type:"brush",event:"brush"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),Ps({type:"brushSelect",event:"brushSelected",update:"none"},function(){});var IN={},TN=XI.toolbox.brush;_y.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:i(TN.title)};var AN=_y.prototype;AN.render=AN.updateView=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,d(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},AN.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return d(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},AN.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},yy("brush",_y),Ls(function(t,e){var i=t&&t.brush;if(y(i)||(i=i?[i]:[]),i.length){var n=[];d(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;y(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),Zv(s),e&&!s.length&&s.push.apply(s,aN)}});wy.prototype={constructor:wy,type:"calendar",dimensions:["time","value"],getDimensionsInfo:function(){return[{name:"time",type:"time"},"value"]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){var e=(t=Uo(t)).getFullYear(),i=t.getMonth()+1;i=i<10?"0"+i:i;var n=t.getDate();n=n<10?"0"+n:n;var o=t.getDay();return o=Math.abs((o+7-this.getFirstDayOfWeek())%7),{y:e,m:i,d:n,day:o,time:t.getTime(),formatedDate:e+"-"+i+"-"+n,date:t}},getNextNDay:function(t,e){return 0===(e=e||0)?this.getDateInfo(t):((t=new Date(this.getDateInfo(t).time)).setDate(t.getDate()+e),this.getDateInfo(t))},update:function(t,e){function i(t,e){return null!=t[e]&&"auto"!==t[e]}this._firstDayOfWeek=+this._model.getModel("dayLabel").get("firstDay"),this._orient=this._model.get("orient"),this._lineWidth=this._model.getModel("itemStyle").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=["width","height"],a=this._model.get("cellSize").slice(),r=this._model.getBoxLayoutParams(),s="horizontal"===this._orient?[n,7]:[7,n];d([0,1],function(t){i(a,t)&&(r[o[t]]=a[t]*s[t])});var l={width:e.getWidth(),height:e.getHeight()},u=this._rect=la(r,l);d([0,1],function(t){i(a,t)||(a[t]=u[o[t]]/s[t])}),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){y(t)&&(t=t[0]),null==e&&(e=!0);var i=this.getDateInfo(t),n=this._rangeInfo,o=i.formatedDate;if(e&&!(i.time>=n.start.time&&i.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=n.getTime()-t[1].time>0?1:-1;n.getDate()!==a&&(n.getTime()-t[1].time)*r>0;)i-=r,n.setDate(o+i-1);var s=Math.floor((i+t[0].day+6)/7),l=e?1-s:s-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:i,weeks:s,nthWeek:l,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,i){var n=this._getRangeInfo(i);if(t>n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},wy.dimensions=wy.prototype.dimensions,wy.getDimensionsInfo=wy.prototype.getDimensionsInfo,wy.create=function(t,e){var i=[];return t.eachComponent("calendar",function(n){var o=new wy(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])}),i},Ba.register("calendar",wy);var DN=YM.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=da(t);DN.superApply(this,"init",arguments),Sy(t,o)},mergeOption:function(t,e){DN.superApply(this,"mergeOption",arguments),Sy(this.option,t)}}),CN={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},LN={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};Vs({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new aM({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(u)}},_renderLines:function(t,e,i,n){function o(e){a._firstDayOfMonth.push(r.getDateInfo(e)),a._firstDayPoints.push(r.dataToRect([e],!1).tl);var o=a._getLinePointsOfOneWeek(t,e,i);a._tlpoints.push(o[0]),a._blpoints.push(o[o.length-1]),l&&a._drawSplitline(o,s,n)}var a=this,r=t.coordinateSystem,s=t.getModel("splitLine.lineStyle").getLineStyle(),l=t.get("splitLine.show"),u=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var h=e.start,c=0;h.time<=e.end.time;c++){o(h.formatedDate),0===c&&(h=r.getDateInfo(e.start.y+"-"+e.start.m));var d=h.date;d.setMonth(d.getMonth()+1),h=r.getDateInfo(d)}o(r.getNextNDay(e.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,u,i),s,n),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,u,i),s,n)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new oM({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?ea(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r||(r="horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new qS({z2:30});fo(m.style,o,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),r=n.get("margin"),s=n.get("position"),l=n.get("align"),u=[this._tlpoints,this._blpoints];_(o)&&(o=CN[o.toUpperCase()]||[]);var h="start"===s?0:1,c="horizontal"===e?0:1;r="start"===s?-r:r;for(var d="center"===l,f=0;f=r[0]&&t<=r[1]}if(t===this._dataZoomModel){var n=this._dimName,o=this.getTargetSeriesModels(),a=t.get("filterMode"),r=this._valueWindow;"none"!==a&&NN(o,function(t){var e=t.getData(),o=e.mapDimension(n,!0);o.length&&("weakFilter"===a?e.filterSelf(function(t){for(var i,n,a,s=0;sr[1];if(u&&!h&&!c)return!0;u&&(a=!0),h&&(i=!0),c&&(n=!0)}return a&&i&&n}):NN(o,function(n){if("empty"===a)t.setData(e.map(n,function(t){return i(t)?t:NaN}));else{var o={};o[n]=r,e.selectRange(o)}}),NN(o,function(t){e.setApproximateExtent(r,t)}))})}}};var RN=d,zN=PN,BN=Bs({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=Ly(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=Ly(t);n(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;z_.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),ky(this,t),RN([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var a=this.dependentModels[e.axis][i],r=a.__dzAxisProxy||(a.__dzAxisProxy=new EN(e.name,i,this,o));t[e.name+"_"+i]=r},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();zN(function(e){var i=e.axisIndex;t[i]=Di(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;zN(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option,n=this.dependentModels;if(t){var o="vertical"===e?"y":"x";n[o+"Axis"].length?(i[o+"AxisIndex"]=[0],t=!1):RN(n.singleAxis,function(n){t&&n.get("orient",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&zN(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var a=0,r=o.length;a0?100:20}},getFirstTargetAxisModel:function(){var t;return zN(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;zN(function(n){RN(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;RN([["start","startValue"],["end","endValue"]],function(e){null==t[e[0]]&&null==t[e[1]]||(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&ky(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),VN=EI.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var o,a=0;a0&&e%g)p+=f;else{var i=null==t||isNaN(t)||""===t,n=i?0:FN(t,a,u,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([p,0]),d.push([p,0])),c.push([p,n]),d.push([p,n]),p+=f,l=i}});var m=this.dataZoomModel;this._displayables.barGroup.add(new nM({shape:{points:c},style:r({fill:m.get("dataBackgroundColor")},m.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new oM({shape:{points:d},style:m.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var i,n=this.ecModel;return t.eachTargetAxis(function(o,a){d(t.getAxisProxy(o.name,a).getTargetSeriesModels(),function(t){if(!(i||!0!==e&&l(jN,t.get("type"))<0)){var r,s=n.getComponent(o.axis,a).axis,u=Py(o.name),h=t.coordinateSystem;null!=u&&h.getOtherAxis&&(r=h.getOtherAxis(s).inverse),u=t.getData().mapDimension(u),i={thisAxis:s,series:t,thisDim:o.name,otherDim:u,otherAxisInverse:r}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new GN({draggable:!0,cursor:Ny(this._orient),drift:HN(this._onDragMove,this,"all"),onmousemove:function(t){lw(t.event)},ondragstart:HN(this._showDataInfo,this,!0),ondragend:HN(this._onDragEnd,this),onmouseover:HN(this._showDataInfo,this,!0),onmouseout:HN(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new GN(jn({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}}))),ZN([0,1],function(t){var o=Co(a.get("handleIcon"),{cursor:Ny(this._orient),draggable:!0,drift:HN(this._onDragMove,this,t),onmousemove:function(t){lw(t.event)},ondragend:HN(this._onDragEnd,this),onmouseover:HN(this._showDataInfo,this,!0),onmouseout:HN(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),r=o.getBoundingRect();this._handleHeight=Ro(a.get("handleSize"),this._size[1]),this._handleWidth=r.width/r.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var s=a.get("handleColor");null!=s&&(o.style.fill=s),n.add(e[t]=o);var l=a.textStyleModel;this.group.add(i[t]=new qS({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[FN(t[0],[0,100],e,!0),FN(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,o=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),r=[0,100];EL(e,n,o,i.get("zoomLock")?"all":t,null!=a.minSpan?FN(a.minSpan,r,o,!0):null,null!=a.maxSpan?FN(a.maxSpan,r,o,!0):null);var s=this._range,l=this._range=WN([FN(n[0],o,r,!0),FN(n[1],o,r,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=WN(i.slice()),o=this._size;ZN([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],o[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:o[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=Mo(n.handles[t].parent,this.group),i=To(0===t?"right":"left",e),s=this._handleWidth/2+XN,l=Io([c[t]+(0===t?-s:s),this._size[1]/2],e);o[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===UN?"middle":i,textAlign:a===UN?i:"center",text:r[t]})}var i=this.dataZoomModel,n=this._displayables,o=n.handleLabels,a=this._orient,r=["",""];if(i.get("showDetail")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,u=this._range,h=t?s.calculateDataWindow({start:u[0],end:u[1]}).valueWindow:s.getDataValueWindow();r=[this._formatLabel(h[0],l),this._formatLabel(h[1],l)]}}var c=WN(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),o=i.get("labelPrecision");null!=o&&"auto"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return x(n)?n(t,a):_(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=Io([e,i],this._displayables.barGroup.getLocalTransform(),!0),o=this._updateInterval(t,n[0]),a=this.dataZoomModel.get("realtime");this._updateView(!a),o&&a&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),!this.dataZoomModel.get("realtime")&&this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-o);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(ZN(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});BN.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var qN="\0_ec_dataZoom_roams",KN=m,$N=VN.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){$N.superApply(this,"render",arguments),this._range=t.getPercentRange(),d(this.getTargetCoordInfo(),function(e,n){var o=f(e,function(t){return Ry(t.model)});d(e,function(e){var a=e.model,r={};d(["pan","zoom","scrollMove"],function(t){r[t]=KN(JN[t],this,e,n)},this),Oy(i,{coordId:Ry(a),allCoordIds:o,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,dataZoomModel:t,getRange:r})},this)},this)},dispose:function(){Ey(this.api,this.dataZoomModel.id),$N.superApply(this,"dispose",arguments),this._range=null}}),JN={zoom:function(t,e,i,n){var o=this._range,a=o.slice(),r=t.axisModels[0];if(r){var s=QN[e](null,[n.originX,n.originY],r,i,t),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(a[1]-a[0])+a[0],u=Math.max(1/n.scale,0);a[0]=(a[0]-l)*u+l,a[1]=(a[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return EL(0,a,[0,100],0,h.minSpan,h.maxSpan),this._range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}},pan:Wy(function(t,e,i,n,o,a){var r=QN[n]([a.oldX,a.oldY],[a.newX,a.newY],e,o,i);return r.signal*(t[1]-t[0])*r.pixel/r.pixelLength}),scrollMove:Wy(function(t,e,i,n,o,a){return QN[n]([0,0],[a.scrollDelta,a.scrollDelta],e,o,i).signal*(t[1]-t[0])*a.scrollDelta})},QN={grid:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===a.dim?(r.pixel=e[0]-t[0],r.pixelLength=s.width,r.pixelStart=s.x,r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=s.height,r.pixelStart=s.y,r.signal=a.inverse?-1:1),r},polar:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(r.pixel=e[0]-t[0],r.pixelLength=l[1]-l[0],r.pixelStart=l[0],r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=u[1]-u[0],r.pixelStart=u[0],r.signal=a.inverse?-1:1),r},singleAxis:function(t,e,i,n,o){var a=i.axis,r=o.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=r.width,s.pixelStart=r.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=r.height,s.pixelStart=r.y,s.signal=a.inverse?-1:1),s}};ks({getTargetSeries:function(t){var e=R();return t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){d(n.getAxisProxy(t.name,i).getTargetSeriesModels(),function(t){e.set(t.uid,t)})})}),e},modifyOutputEnd:!0,overallReset:function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).reset(n,e)}),t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).filterData(n,e)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}}),Ps("dataZoom",function(t,e){var i=Iy(m(e.eachComponent,e,"dataZoom"),PN,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){n.push.apply(n,i(t).nodes)}),d(n,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var tO=d,eO=function(t){var e=t&&t.visualMap;y(e)||(e=e?[e]:[]),tO(e,function(t){if(t){Hy(t,"splitList")&&!Hy(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&y(e)&&tO(e,function(t){w(t)&&(Hy(t,"start")&&!Hy(t,"min")&&(t.min=t.start),Hy(t,"end")&&!Hy(t,"max")&&(t.max=t.end))})}})};YM.registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"});var iO=IT.VISUAL.COMPONENT;Es(iO,{createOnAllSeries:!0,reset:function(t,e){var i=[];return e.eachComponent("visualMap",function(e){var n=t.pipelineContext;!e.isTargetSeries(t)||n&&n.large||i.push(qv(e.stateList,e.targetVisuals,m(e.getValueState,e),e.getDataDimension(t.getData())))}),i}}),Es(iO,{createOnAllSeries:!0,reset:function(t,e){var i=t.getData(),n=[];e.eachComponent("visualMap",function(e){if(e.isTargetSeries(t)){var o=e.getVisualMeta(m(Zy,null,t,e))||{stops:[],outerColors:[]},a=e.getDataDimension(i),r=i.getDimensionInfo(a);null!=r&&(o.dimension=r.index,n.push(o))}}),t.getData().setVisual("visualMeta",n)}});var nO={get:function(t,e,n){var o=i((oO[t]||{})[e]);return n&&y(o)?o[o.length-1]:o}},oO={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},aO=jC.mapVisual,rO=jC.eachVisual,sO=y,lO=d,uO=Bo,hO=Eo,cO=B,dO=Bs({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-1/0,1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;z_.canvasSupported||(i.realtime=!1),!e&&jv(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=m(t,this),this.controllerVisuals=Xv(this.option.controller,e,t),this.targetVisuals=Xv(this.option.target,e,t)},getTargetSeriesIndices:function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries(function(t,i){e.push(i)}):e=Di(t),e},eachTargetSeries:function(t,e){d(this.getTargetSeriesIndices(),function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===l[0]?"min":t===l[1]?"max":(+t).toFixed(Math.min(s,20))}var o,a,r=this.option,s=r.precision,l=this.dataBound,u=r.formatter;return i=i||["<",">"],y(t)&&(t=t.slice(),o=!0),a=e?t:o?[n(t[0]),n(t[1])]:n(t),_(u)?u.replace("{value}",o?a[0]:a).replace("{value2}",o?a[1]:a):x(u)?o?u(t[0],t[1]):u(t):o?t[0]===l[0]?i[0]+" "+a[1]:t[1]===l[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=uO([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,o=n.length-1;o>=0;o--){var a=n[o];if(!t.getDimensionInfo(a).isCalculationCoord)return a}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){sO(o.color)&&!t.inRange&&(t.inRange={color:o.color.slice().reverse()}),t.inRange=t.inRange||{color:e.get("gradientColor")},lO(this.stateList,function(e){var i=t[e];if(_(i)){var n=nO.get(i,"active",l);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}var e=this.ecModel,o=this.option,a={inRange:o.inRange,outOfRange:o.outOfRange},r=o.target||(o.target={}),s=o.controller||(o.controller={});n(r,a),n(s,a);var l=this.isCategory();t.call(this,r),t.call(this,s),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},lO(n,function(t,e){if(jC.isValidType(e)){var i=nO.get(e,"inactive",l);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,r,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,o=this.get("inactiveColor");lO(this.stateList,function(a){var r=this.itemSize,s=t[a];s||(s=t[a]={color:l?o:[o]}),null==s.symbol&&(s.symbol=e&&i(e)||(l?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=n&&i(n)||(l?r[0]:[r[0],r[0]])),s.symbol=aO(s.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var u=s.symbolSize;if(null!=u){var h=-1/0;rO(u,function(t){t>h&&(h=t)}),s.symbolSize=aO(u,function(t){return hO(t,[0,h],[0,r[0]],!0)})}},this)}.call(this,s)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:cO,getValueState:cO,getVisualMeta:cO}),fO=[20,140],pO=dO.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){pO.superApply(this,"optionUpdated",arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){pO.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=fO[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=fO[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){dO.prototype.completeVisualOption.apply(this,arguments),d(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Bo((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getVisualMeta:function(t){function e(e,i){o.push({value:e,color:t(e,i)})}for(var i=Uy(0,0,this.getExtent()),n=Uy(0,0,this.option.range.slice()),o=[],a=0,r=0,s=n.length,l=i.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new Zw("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,a=i.handleLabels;vO([0,1],function(r){var s=o[r];s.setStyle("fill",e.handlesColor[r]),s.position[1]=t[r];var l=Io(i.handleLabelPoints[r],Mo(s,this.group));a[r].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[r]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===r?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=mO(t,a,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",Ky(!!i,n,l,r[1]));var c={convertOpacityToAlpha:!0},d=this.getControllerVisual(t,"color",c);h.setStyle("fill",d);var f=Io(u.indicatorLabelPoint,Mo(h,this.group)),p=u.indicatorLabel;p.attr("invisible",!1);var g=this._applyTransform("left",u.barGroup),m=this._orient;p.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===m?g:"middle",textAlign:"horizontal"===m?"center":g,x:f[0],y:f[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=yO(xO(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=yO(xO(o[0],t),o[1]);var r=$y(i,a,o),s=[t-r,t+r],l=mO(t,o,a,!0),u=[mO(s[0],o,a,!0),mO(s[1],o,a,!0)];s[0]o[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",r):u[1]===1/0?this._showIndicator(l,u[0],"> ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||Jy(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=Ri(h,c);this._dispatchHighDown("downplay",jy(d[0])),this._dispatchHighDown("highlight",jy(d[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,i=this.visualMapModel;if(e&&null!=e.dataIndex){var n=this.ecModel.getSeriesByIndex(e.seriesIndex);if(i.isTargetSeries(n)){var o=n.getData(e.dataType),a=o.get(i.getDataDimension(o),e.dataIndex,!0);isNaN(a)||this._showIndicator(a,a)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",jy(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=Mo(e,n?null:this.group);return bM[y(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});Ps({type:"selectDataRange",event:"dataRangeSelected",update:"update"},function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})}),Ls(eO);var SO=dO.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0,showLabel:null},optionUpdated:function(t,e){SO.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetExtent();var n=this._mode=this._determineMode();MO[this._mode].call(this),this._resetSelected(t,e);var o=this.option.categories;this.resetVisual(function(t,e){"categories"===n?(t.mappingMethod="category",t.categories=i(o)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=f(this._pieceList,function(t){var t=i(t);return"inRange"!==e&&(t.visual=null),t}))})},completeVisualOption:function(){function t(t,e,i){return t&&t[e]&&(w(t[e])?t[e].hasOwnProperty(i):t[e]===i)}var e=this.option,i={},n=jC.listVisualTypes(),o=this.isCategory();d(e.pieces,function(t){d(n,function(e){t.hasOwnProperty(e)&&(i[e]=1)})}),d(i,function(i,n){var a=0;d(this.stateList,function(i){a|=t(e,i,n)||t(e.target,i,n)},this),!a&&d(this.stateList,function(t){(e[t]||(e[t]={}))[n]=nO.get(n,"inRange"===t?"active":"inactive",o)})},this),dO.prototype.completeVisualOption.apply(this,arguments)},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,d(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var a=!1;d(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(a?o[i]=!1:a=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=i(t)},getValueState:function(t){var e=jC.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){jC.findPieceIndex(e,this._pieceList)===t&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=i[0]===-1/0&&i[1]===1/0?0:(i[0]+i[1])/2}return e},getVisualMeta:function(t){function e(e,a){var r=o.getRepresentValue({interval:e});a||(a=o.getValueState(r));var s=t(r,a);e[0]===-1/0?n[0]=s:e[1]===1/0?n[1]=s:i.push({value:e[0],color:s},{value:e[1],color:s})}if(!this.isCategory()){var i=[],n=[],o=this,a=this._pieceList.slice();if(a.length){var r=a[0].interval[0];r!==-1/0&&a.unshift({interval:[-1/0,r]}),(r=a[a.length-1].interval[1])!==1/0&&a.push({interval:[r,1/0]})}else a.push({interval:[-1/0,1/0]});var s=-1/0;return d(a,function(t){var i=t.interval;i&&(i[0]>s&&e([s,i[0]],"outOfRange"),e(i.slice()),s=i[1])},this),{stops:i,outerColors:n}}}}),MO={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};gO.extend({type:"visualMap.piecewise",doRender:function(){var t=this.group;t.removeAll();var e=this.visualMapModel,i=e.get("textGap"),n=e.textStyleModel,o=n.getFont(),a=n.getTextColor(),r=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,h=T(e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,h,r),d(l.viewPieceList,function(n){var l=n.piece,u=new Zw;u.onclick=m(this._onItemClick,this,l),this._enableHoverLink(u,n.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(u,c,[0,0,s[0],s[1]]),h){var d=this.visualMapModel.getValueState(c);u.add(new qS({style:{x:"right"===r?-i:s[0]+i,y:s[1]/2,text:l.text,textVerticalAlign:"middle",textAlign:r,textFont:o,textFill:a,opacity:"outOfRange"===d?.5:1}}))}t.add(u)},this),u&&this._renderEndsText(t,u[1],s,h,r),UM(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:jy(i.findTargetDataIndices(e))})}t.on("mouseover",m(i,this,"highlight")).on("mouseout",m(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return Xy(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new Zw,r=this.visualMapModel.textStyleModel;a.add(new qS({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=f(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(Xl(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,n=e.option,o=i(n.selected),a=e.getSelectedMapKey(t);"single"===n.selectedMode?(o[a]=!0,d(o,function(t,e){o[e]=e===a})):o[a]=!o[a],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}});Ls(eO);var IO=$o,TO=Qo,AO=Bs({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(z_.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var o=this.constructor,r=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType,!0),s=t[r];i&&i.data?(s?s.mergeOption(i,e,!0):(n&&ex(i),d(i.data,function(t){t instanceof Array?(ex(t[0]),ex(t[1])):ex(t)}),a(s=new o(i,this,e),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[r]=s):t[r]=null},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=y(i)?f(i,IO).join(", "):IO(i),o=e.getName(t),a=TO(this.name);return(null!=i||o)&&(a+="
    "),o&&(a+=TO(o),null!=i&&(a+=" : ")),null!=i&&(a+=TO(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});h(AO,LI),AO.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var DO=l,CO=v,LO={min:CO(ox,"min"),max:CO(ox,"max"),average:CO(ox,"average")},kO=Vs({type:"marker",init:function(){this.markerGroupMap=R()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var o=this.type+"Model";e.eachSeries(function(t){var n=t[o];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});kO.extend({type:"markPoint",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(cx(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,r=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new Su),u=dx(o,t,e);e.setData(u),cx(e.getData(),t,n),u.each(function(t){var i=u.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),u.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.color")||r.getVisual("color"),symbol:i.getShallow("symbol")})}),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),l.__keep=!0,l.group.silent=e.get("silent")||t.get("silent")}}),Ls(function(t){t.markPoint=t.markPoint||{}}),AO.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end"},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"}});var PO=function(t,e,o,r){var s=t.getData(),l=r.type;if(!y(r)&&("min"===l||"max"===l||"average"===l||"median"===l||null!=r.xAxis||null!=r.yAxis)){var u,h;if(null!=r.yAxis||null!=r.xAxis)u=null!=r.yAxis?"y":"x",e.getAxis(u),h=T(r.yAxis,r.xAxis);else{var c=rx(r,s,e,t);u=c.valueDataDim,c.valueAxis,h=hx(s,u,l)}var d="x"===u?0:1,f=1-d,p=i(r),g={};p.type=null,p.coord=[],g.coord=[],p.coord[f]=-1/0,g.coord[f]=1/0;var m=o.get("precision");m>=0&&"number"==typeof h&&(h=+h.toFixed(Math.min(m,20))),p.coord[d]=g.coord[d]=h,r=[p,g,{type:l,valueIndex:r.valueIndex,value:h}]}return r=[ax(t,r[0]),ax(t,r[1]),a({},r[2])],r[2].type=r[2].type||"",n(r[2],r[0]),n(r[2],r[1]),r};kO.extend({type:"markLine",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,a=e.__to;o.each(function(e){mx(o,e,!0,t,i),mx(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var a=e.getItemModel(i);mx(e,i,o,t,n),e.setItemVisual(i,{symbolSize:a.get("symbolSize")||g[o?0:1],symbol:a.get("symbol",!0)||p[o?0:1],color:a.get("itemStyle.color")||s.getVisual("color")})}var a=t.coordinateSystem,r=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(r)||l.set(r,new Jd);this.group.add(u.group);var h=vx(a,t,e),c=h.from,d=h.to,f=h.line;e.__from=c,e.__to=d,e.setData(f);var p=e.get("symbol"),g=e.get("symbolSize");y(p)||(p=[p,p]),"number"==typeof g&&(g=[g,g]),h.from.each(function(t){o(c,t,!0),o(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get("lineStyle.color");f.setItemVisual(t,{color:e||c.getItemVisual(t,"color")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolSize:d.getItemVisual(t,"symbolSize"),toSymbol:d.getItemVisual(t,"symbol")})}),u.updateData(f),h.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),u.__keep=!0,u.group.silent=e.get("silent")||t.get("silent")}}),Ls(function(t){t.markLine=t.markLine||{}}),AO.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}}});var NO=function(t,e,i,n){var a=ax(t,n[0]),r=ax(t,n[1]),s=T,l=a.coord,u=r.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),u[0]=s(u[0],1/0),u[1]=s(u[1],1/0);var h=o([{},a,r]);return h.coord=[a.coord,r.coord],h.x0=a.x,h.y0=a.y,h.x1=r.x,h.y1=r.y,h},OO=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];kO.extend({type:"markArea",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=f(OO,function(o){return bx(n,e,o,t,i)});n.setItemLayout(e,o),n.getItemGraphicEl(e).setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(a)||l.set(a,{group:new Zw});this.group.add(u.group),u.__keep=!0;var h=Sx(o,t,e);e.setData(h),h.each(function(e){h.setItemLayout(e,f(OO,function(i){return bx(h,e,i,t,n)})),h.setItemVisual(e,{color:s.getVisual("color")})}),h.diff(u.__data).add(function(t){var e=new nM({shape:{points:h.getItemLayout(t)}});h.setItemGraphicEl(t,e),u.group.add(e)}).update(function(t,i){var n=u.__data.getItemGraphicEl(i);bo(n,{shape:{points:h.getItemLayout(t)}},e,t),u.group.add(n),h.setItemGraphicEl(t,n)}).remove(function(t){var e=u.__data.getItemGraphicEl(t);u.group.remove(e)}).execute(),h.eachItemGraphicEl(function(t,i){var n=h.getItemModel(i),o=n.getModel("label"),a=n.getModel("emphasis.label"),s=h.getItemVisual(i,"color");t.useStyle(r(n.getModel("itemStyle").getItemStyle(),{fill:Ut(s,.4),stroke:s})),t.hoverStyle=n.getModel("emphasis.itemStyle").getItemStyle(),co(t.style,t.hoverStyle,o,a,{labelFetcher:e,labelDataIndex:i,defaultText:h.getName(i)||"",isRectText:!0,autoColor:s}),uo(t,{}),t.dataModel=e}),u.__data=h,u.group.silent=e.get("silent")||t.get("silent")}}),Ls(function(t){t.markArea=t.markArea||{}});YM.registerSubTypeDefaulter("timeline",function(){return"slider"}),Ps({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),r({currentIndex:i.option.currentIndex},t)}),Ps({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var EO=YM.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){EO.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],n=t.axisType,o=this._names=[];if("category"===n){var a=[];d(e,function(t,e){var n,r=Li(t);w(t)?(n=i(t)).value=e:n=e,a.push(n),_(r)||null!=r&&!isNaN(r)||(r=""),o.push(r+"")}),e=a}var r={category:"ordinal",time:"time"}[n]||"number";(this._data=new eA([{name:"value",type:r}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});h(EO.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),LI);var RO=EI.extend({type:"timeline"}),zO=function(t,e,i,n){HA.call(this,t,e,i),this.type=n||"value",this.model=null};zO.prototype={constructor:zO,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},u(zO,HA);var BO=m,VO=d,GO=Math.PI;RO.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return Qo(s.scale.getLabel(t))},VO(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,a,s,t)},this),this._renderAxisLabel(o,r,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),o=Ax(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2=0||"+"===i?"left":"right"},r={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},s={horizontal:0,vertical:GO/2},l="vertical"===n?o.height:o.width,u=t.getModel("controlStyle"),h=u.get("show",!0),c=h?u.get("itemSize"):0,d=h?u.get("itemGap"):0,f=c+d,p=t.get("label.rotate")||0;p=p*GO/180;var g,m,v,y,x=u.get("position",!0),_=h&&u.get("showPlayBtn",!0),w=h&&u.get("showPrevBtn",!0),b=h&&u.get("showNextBtn",!0),S=0,M=l;return"left"===x||"bottom"===x?(_&&(g=[0,0],S+=f),w&&(m=[S,0],S+=f),b&&(v=[M-c,0],M-=f)):(_&&(g=[M-c,0],M-=f),w&&(m=[0,0],S+=f),b&&(v=[M-c,0],M-=f)),y=[S,M],t.get("inverse")&&y.reverse(),{viewRect:o,mainLength:l,orient:n,rotation:s[n],labelRotation:p,labelPosOpt:i,labelAlign:t.get("label.align")||a[n],labelBaseline:t.get("label.verticalAlign")||t.get("label.baseline")||r[n],playPosition:g,prevBtnPosition:m,nextBtnPosition:v,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var a=this._mainGroup,r=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=mt(),u=s.x,h=s.y+s.height;_t(l,l,[-u,-h]),wt(l,l,-GO/2),_t(l,l,[u,h]),(s=s.clone()).applyTransform(l)}var c=n(s),d=n(a.getBoundingRect()),f=n(r.getBoundingRect()),p=a.position,g=r.position;g[0]=p[0]=c[0][0];var m=t.labelPosOpt;if(isNaN(m))o(p,d,c,1,v="+"===m?0:1),o(g,f,c,1,1-v);else{var v=m>=0?0:1;o(p,d,c,1,v),g[1]=p[1]+m}a.attr("position",p),r.attr("position",g),a.rotation=r.rotation=t.rotation,i(a),i(r)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=Vl(e,n);o.getTicks=function(){return i.mapArray(["value"],function(t){return t})};var a=i.getDataExtent("value");o.setExtent(a[0],a[1]),o.niceTicks();var r=new zO("value",o,t.axisExtent,n);return r.model=e,r},_createGroup:function(t){var e=this["_"+t]=new Zw;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new rM({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:a({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();VO(a,function(t){var a=i.dataToCoord(t),r=o.getItemModel(t),s=r.getModel("itemStyle"),l=r.getModel("emphasis.itemStyle"),u={position:[a,0],onclick:BO(this._changeTimeline,this,t)},h=Cx(r,s,e,u);uo(h,l.getItemStyle()),r.get("tooltip")?(h.dataIndex=t,h.dataModel=n):h.dataIndex=h.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){if(i.getLabelModel().get("show")){var o=n.getData(),a=i.getViewLabels();VO(a,function(n){var a=n.tickValue,r=o.getItemModel(a),s=r.getModel("label"),l=r.getModel("emphasis.label"),u=i.dataToCoord(n.tickValue),h=new qS({position:[u,0],rotation:t.labelRotation-t.rotation,onclick:BO(this._changeTimeline,this,a),silent:!1});fo(h.style,s,{text:n.formattedLabel,textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(h),uo(h,fo({},l))},this)}},_renderControl:function(t,e,i,n){function o(t,i,o,h){if(t){var c=Dx(n,i,u,{position:t,origin:[a/2,0],rotation:h?-r:0,rectHover:!0,style:s,onclick:o});e.add(c),uo(c,l)}}var a=t.controlSize,r=t.rotation,s=n.getModel("controlStyle").getItemStyle(),l=n.getModel("emphasis.controlStyle").getItemStyle(),u=[0,-a/2,a,a],h=n.getPlayState(),c=n.get("inverse",!0);o(t.nextBtnPosition,"controlStyle.nextIcon",BO(this._changeTimeline,this,c?"-":"+")),o(t.prevBtnPosition,"controlStyle.prevIcon",BO(this._changeTimeline,this,c?"+":"-")),o(t.playPosition,"controlStyle."+(h?"stopIcon":"playIcon"),BO(this._handlePlayClick,this,!h),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),a=n.getCurrentIndex(),r=o.getItemModel(a).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=BO(s._handlePointerDrag,s),t.ondragend=BO(s._handlePointerDragend,s),Lx(t,a,i,n,!0)},onUpdate:function(t){Lx(t,a,i,n)}};this._currentPointer=Cx(r,r,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=Bo(this._axis.getExtent().slice());i>n[1]&&(i=n[1]),ii.getHeight()&&(n.textPosition="top",l=!0);var u=l?-5-o.height:s+8;a+o.width/2>i.getWidth()?(n.textPosition=["100%",u],n.textAlign="right"):a-o.width/2<0&&(n.textPosition=[0,u],n.textAlign="left")}})}},updateView:function(t,e,i,n){d(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(t,e){d(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){d(this._features,function(i){i.dispose&&i.dispose(t,e)})}});var WO=XI.toolbox.saveAsImage;Px.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:WO.title,type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:WO.lang.slice()},Px.prototype.unusable=!z_.canvasSupported,Px.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),a=i.get("type",!0)||"png";o.download=n+"."+a,o.target="_blank";var r=e.getConnectedDataURL({type:a,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=r,"function"!=typeof MouseEvent||z_.browser.ie||z_.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var s=atob(r.split(",")[1]),l=s.length,u=new Uint8Array(l);l--;)u[l]=s.charCodeAt(l);var h=new Blob([u]);window.navigator.msSaveOrOpenBlob(h,n+"."+a)}else{var c=i.get("lang"),d='';window.open().document.write(d)}else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(f)}},yy("saveAsImage",Px);var HO=XI.toolbox.magicType;Nx.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:i(HO.title),option:{},seriesIndex:{}};var ZO=Nx.prototype;ZO.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return d(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var UO={line:function(t,e,i,o){if("bar"===t)return n({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.line")||{},!0)},bar:function(t,e,i,o){if("line"===t)return n({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.bar")||{},!0)},stack:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:"__ec_magicType_stack__"},o.get("option.stack")||{},!0)},tiled:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:""},o.get("option.tiled")||{},!0)}},XO=[["line","bar"],["stack","tiled"]];ZO.onclick=function(t,e,i){var n=this.model,o=n.get("seriesIndex."+i);if(UO[i]){var a={series:[]};d(XO,function(t){l(t,i)>=0&&d(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},function(e){var o=e.subType,s=e.id,l=UO[i](o,s,e,n);l&&(r(l,e.option),a.series.push(l));var u=e.coordinateSystem;if(u&&"cartesian2d"===u.type&&("line"===i||"bar"===i)){var h=u.getAxesByScale("ordinal")[0];if(h){var c=h.dim+"Axis",d=t.queryComponents({mainType:c,index:e.get(name+"Index"),id:e.get(name+"Id")})[0].componentIndex;a[c]=a[c]||[];for(var f=0;f<=d;f++)a[c][d]=a[c][d]||{};a[c][d].boundaryGap="bar"===i}}}),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:a})}},Ps({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),yy("magicType",Nx);var jO=XI.toolbox.dataView,YO=new Array(60).join("-"),qO="\t",KO=new RegExp("["+qO+"]+","g");Hx.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:i(jO.title),lang:i(jO.lang),backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},Hx.prototype.onclick=function(t,e){function i(){n.removeChild(a),x._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var a=document.createElement("div");a.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",a.style.backgroundColor=o.get("backgroundColor")||"#fff";var r=document.createElement("h4"),s=o.get("lang")||[];r.innerHTML=s[0]||o.get("title"),r.style.cssText="margin: 10px 20px;",r.style.color=o.get("textColor");var l=document.createElement("div"),u=document.createElement("textarea");l.style.cssText="display:block;width:100%;overflow:auto;";var h=o.get("optionToContent"),c=o.get("contentToOption"),d=zx(t);if("function"==typeof h){var f=h(e.getOption());"string"==typeof f?l.innerHTML=f:M(f)&&l.appendChild(f)}else l.appendChild(u),u.readOnly=o.get("readOnly"),u.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",u.style.color=o.get("textColor"),u.style.borderColor=o.get("textareaBorderColor"),u.style.backgroundColor=o.get("textareaColor"),u.value=d.value;var p=d.meta,g=document.createElement("div");g.style.cssText="position:absolute;bottom:0;left:0;right:0;";var m="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",v=document.createElement("div"),y=document.createElement("div");m+=";background-color:"+o.get("buttonColor"),m+=";color:"+o.get("buttonTextColor");var x=this;ut(v,"click",i),ut(y,"click",function(){var t;try{t="function"==typeof c?c(l,e.getOption()):Wx(u.value,p)}catch(t){throw i(),new Error("Data view format error "+t)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),v.innerHTML=s[1],y.innerHTML=s[2],y.style.cssText=m,v.style.cssText=m,!o.get("readOnly")&&g.appendChild(y),g.appendChild(v),ut(u,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+qO+e.substring(n),this.selectionStart=this.selectionEnd=i+1,lw(t)}}),a.appendChild(r),a.appendChild(l),a.appendChild(g),l.style.height=n.clientHeight-80+"px",n.appendChild(a),this._dom=a},Hx.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},Hx.prototype.dispose=function(t,e){this.remove(t,e)},yy("dataView",Hx),Ps({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];d(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:Zx(t.data,o)})}else i.push(a({type:"scatter"},t))}),e.mergeOption(r({series:i},t.newOption))});var $O=d,JO="\0_ec_hist_store";BN.extend({type:"dataZoom.select"}),VN.extend({type:"dataZoom.select"});var QO=XI.toolbox.dataZoom,tE=d,eE="\0_ec_\0toolbox-dataZoom_";Kx.defaultOption={show:!0,icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:i(QO.title)};var iE=Kx.prototype;iE.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,Qx(t,e,this,n,i),Jx(t,e)},iE.onclick=function(t,e,i){nE[i].call(this)},iE.remove=function(t,e){this._brushController.unmount()},iE.dispose=function(t,e){this._brushController.dispose()};var nE={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(Xx(this.ecModel))}};iE._onBrush=function(t,e){function i(t,e,i){var r=e.getAxis(t),s=r.model,l=n(t,s,a),u=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==u.minValueSpan&&null==u.maxValueSpan||(i=EL(0,i.slice(),r.scale.getExtent(),0,u.minValueSpan,u.maxValueSpan)),l&&(o[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(i){i.getAxisModel(t,e.componentIndex)&&(n=i)}),n}if(e.isEnd&&t.length){var o={},a=this.ecModel;this._brushController.updateCovers([]),new iy($x(this.model.option),a,{include:["grid"]}).matchOutputRanges(t,a,function(t,e,n){if("cartesian2d"===n.type){var o=t.brushType;"rect"===o?(i("x",n,e[0]),i("y",n,e[1])):i({lineX:"x",lineY:"y"}[o],n,e)}}),Ux(a,o),this._dispatchZoomAction(o)}},iE._dispatchZoomAction=function(t){var e=[];tE(t,function(t,n){e.push(i(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},yy("dataZoom",Kx),Ls(function(t){function e(t,e){if(e){var o=t+"Index",a=e[o];null==a||"all"===a||y(a)||(a=!1===a||"none"===a?[]:[a]),i(t,function(e,i){if(null==a||"all"===a||-1!==l(a,i)){var r={type:"select",$fromToolbox:!0,id:eE+t+i};r[o]=i,n.push(r)}})}}function i(e,i){var n=t[e];y(n)||(n=n?[n]:[]),tE(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);y(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(y(o)&&(o=o[0]),o&&o.feature)){var a=o.feature.dataZoom;e("xAxis",a),e("yAxis",a)}}});var oE=XI.toolbox.restore;t_.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:oE.title},t_.prototype.onclick=function(t,e,i){jx(t),e.dispatchAction({type:"restore",from:this.uid})},yy("restore",t_),Ps({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")});var aE,rE="urn:schemas-microsoft-com:vml",sE="undefined"==typeof window?null:window,lE=!1,uE=sE&&sE.document;if(uE&&!z_.canvasSupported)try{!uE.namespaces.zrvml&&uE.namespaces.add("zrvml",rE),aE=function(t){return uE.createElement("')}}catch(t){aE=function(t){return uE.createElement("<"+t+' xmlns="'+rE+'" class="zrvml">')}}var hE=MS.CMD,cE=Math.round,dE=Math.sqrt,fE=Math.abs,pE=Math.cos,gE=Math.sin,mE=Math.max;if(!z_.canvasSupported){var vE=21600,yE=vE/2,xE=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=vE+","+vE,t.coordorigin="0,0"},_E=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},wE=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},bE=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},SE=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},ME=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},IE=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},TE=function(t,e,i){var n=zt(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=wE(n[0],n[1],n[2]),t.opacity=i*n[3])},AE=function(t){var e=zt(t);return[wE(e[0],e[1],e[2]),e[3]]},DE=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof cM){var o,a=0,r=[0,0],s=0,l=1,u=i.getBoundingRect(),h=u.width,c=u.height;if("linear"===n.type){o="gradient";var d=i.transform,f=[n.x*h,n.y*c],p=[n.x2*h,n.y2*c];d&&(Q(f,f,d),Q(p,p,d));var g=p[0]-f[0],m=p[1]-f[1];(a=180*Math.atan2(g,m)/Math.PI)<0&&(a+=360),a<1e-6&&(a=0)}else{o="gradientradial";var f=[n.x*h,n.y*c],d=i.transform,v=i.scale,y=h,x=c;r=[(f[0]-u.x)/y,(f[1]-u.y)/x],d&&Q(f,f,d),y/=v[0]*vE,x/=v[1]*vE;var _=mE(y,x);s=0/_,l=2*n.r/_-s}var w=n.colorStops.slice();w.sort(function(t,e){return t.offset-e.offset});for(var b=w.length,S=[],M=[],I=0;I=2){var D=S[0][0],C=S[1][0],L=S[0][1]*e.opacity,k=S[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=a,t.color=D,t.color2=C,t.colors=M.join(","),t.opacity=k,t.opacity2=L}"radial"===o&&(t.focusposition=r.join(","))}else TE(t,n,e.opacity)},CE=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof cM||TE(t,e.stroke,e.opacity)},LE=function(t,e,i,n){var o="fill"==e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof cM&&SE(t,a),a||(a=e_(e)),o?DE(a,i,n):CE(a,i),bE(t,a)):(t[o?"filled":"stroked"]="false",SE(t,a))},kE=[[],[],[]],PE=function(t,e){var i,n,o,a,r,s,l=hE.M,u=hE.C,h=hE.L,c=hE.A,d=hE.Q,f=[],p=t.data,g=t.len();for(a=0;a.01?N&&(O+=.0125):Math.abs(E-D)<1e-4?N&&OA?x-=.0125:x+=.0125:N&&ED?y+=.0125:y-=.0125),f.push(R,cE(((A-C)*M+b)*vE-yE),",",cE(((D-L)*I+S)*vE-yE),",",cE(((A+C)*M+b)*vE-yE),",",cE(((D+L)*I+S)*vE-yE),",",cE((O*M+b)*vE-yE),",",cE((E*I+S)*vE-yE),",",cE((y*M+b)*vE-yE),",",cE((x*I+S)*vE-yE)),r=y,s=x;break;case hE.R:var z=kE[0],B=kE[1];z[0]=p[a++],z[1]=p[a++],B[0]=z[0]+p[a++],B[1]=z[1]+p[a++],e&&(Q(z,z,e),Q(B,B,e)),z[0]=cE(z[0]*vE-yE),B[0]=cE(B[0]*vE-yE),z[1]=cE(z[1]*vE-yE),B[1]=cE(B[1]*vE-yE),f.push(" m ",z[0],",",z[1]," l ",B[0],",",z[1]," l ",B[0],",",B[1]," l ",z[0],",",B[1]);break;case hE.Z:f.push(" x ")}if(i>0){f.push(n);for(var V=0;V100&&(RE=0,EE={});var i,n=zE.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(t){}e={style:n.fontStyle||"normal",variant:n.fontVariant||"normal",weight:n.fontWeight||"normal",size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},EE[t]=e,RE++}return e};!function(t,e){hb[t]=e}("measureText",function(t,e){var i=uE;OE||((OE=i.createElement("div")).style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",uE.body.appendChild(OE));try{OE.style.font=e}catch(t){}return OE.innerHTML="",OE.appendChild(i.createTextNode(t)),{width:OE.offsetWidth}});for(var VE=new ue,GE=[gb,ui,hi,kn,qS],FE=0;FE=o&&u+1>=a){for(var h=[],c=0;c=o&&c+1>=a)return y_(0,s.components);l[i]=s}else l[i]=void 0}r++}();if(d)return d}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},__.prototype.update=function(t,e){if(t){var i=this.getDefs(!1);if(t[this._domName]&&i.contains(t[this._domName]))"function"==typeof e&&e(t);else{var n=this.add(t);n&&(t[this._domName]=n)}}},__.prototype.addDom=function(t){this.getDefs(!0).appendChild(t)},__.prototype.removeDom=function(t){var e=this.getDefs(!1);e&&t[this._domName]&&(e.removeChild(t[this._domName]),t[this._domName]=null)},__.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return d(this._tagNames,function(i){var n=t.getElementsByTagName(i);e=e.concat([].slice.call(n))}),e},__.prototype.markAllUnused=function(){var t=this;d(this.getDoms(),function(e){e[t._markLabel]="0"})},__.prototype.markUsed=function(t){t&&(t[this._markLabel]="1")},__.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this;d(this.getDoms(),function(i){"1"!==i[e._markLabel]&&t.removeChild(i)})}},__.prototype.getSvgProxy=function(t){return t instanceof kn?tR:t instanceof hi?eR:t instanceof qS?iR:tR},__.prototype.getTextSvgElement=function(t){return t.__textSvgEl},__.prototype.getSvgElement=function(t){return t.__svgEl},u(w_,__),w_.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var i=this;d(["fill","stroke"],function(n){if(e.style[n]&&("linear"===e.style[n].type||"radial"===e.style[n].type)){var o,a=e.style[n],r=i.getDefs(!0);a._dom?(o=a._dom,r.contains(a._dom)||i.addDom(o)):o=i.add(a),i.markUsed(e);var s=o.getAttribute("id");t.setAttribute(n,"url(#"+s+")")}})}},w_.prototype.add=function(t){var e;if("linear"===t.type)e=this.createElement("linearGradient");else{if("radial"!==t.type)return Bw("Illegal gradient type."),null;e=this.createElement("radialGradient")}return t.id=t.id||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-gradient-"+t.id),this.updateDom(t,e),this.addDom(e),e},w_.prototype.update=function(t){var e=this;__.prototype.update.call(this,t,function(){var i=t.type,n=t._dom.tagName;"linear"===i&&"linearGradient"===n||"radial"===i&&"radialGradient"===n?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))})},w_.prototype.updateDom=function(t,e){if("linear"===t.type)e.setAttribute("x1",t.x),e.setAttribute("y1",t.y),e.setAttribute("x2",t.x2),e.setAttribute("y2",t.y2);else{if("radial"!==t.type)return void Bw("Illegal gradient type.");e.setAttribute("cx",t.x),e.setAttribute("cy",t.y),e.setAttribute("r",t.r)}t.global?e.setAttribute("gradientUnits","userSpaceOnUse"):e.setAttribute("gradientUnits","objectBoundingBox"),e.innerHTML="";for(var i=t.colorStops,n=0,o=i.length;n0){var n,o,a=this.getDefs(!0),r=e[0],s=i?"_textDom":"_dom";r[s]?(o=r[s].getAttribute("id"),n=r[s],a.contains(n)||a.appendChild(n)):(o="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,(n=this.createElement("clipPath")).setAttribute("id",o),a.appendChild(n),r[s]=n);var l=this.getSvgProxy(r);if(r.transform&&r.parent.invTransform&&!i){var u=Array.prototype.slice.call(r.transform);xt(r.transform,r.parent.invTransform,r.transform),l.brush(r),r.transform=u}else l.brush(r);var h=this.getSvgElement(r);n.innerHTML="",n.appendChild(h.cloneNode()),t.setAttribute("clip-path","url(#"+o+")"),e.length>1&&this.updateDom(n,e.slice(1),i)}else t&&t.setAttribute("clip-path","none")},b_.prototype.markUsed=function(t){var e=this;t.__clipPaths&&t.__clipPaths.length>0&&d(t.__clipPaths,function(t){t._dom&&__.prototype.markUsed.call(e,t._dom),t._textDom&&__.prototype.markUsed.call(e,t._textDom)})},u(S_,__),S_.prototype.addWithoutUpdate=function(t,e){if(e&&M_(e.style)){var i,n=e.style;n._shadowDom?(i=n._shadowDom,this.getDefs(!0).contains(n._shadowDom)||this.addDom(i)):i=this.add(e),this.markUsed(e);var o=i.getAttribute("id");t.style.filter="url(#"+o+")"}},S_.prototype.add=function(t){var e=this.createElement("filter"),i=t.style;return i._shadowDomId=i._shadowDomId||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-shadow-"+i._shadowDomId),this.updateDom(t,e),this.addDom(e),e},S_.prototype.update=function(t,e){var i=e.style;if(M_(i)){var n=this;__.prototype.update.call(this,e,function(t){n.updateDom(e,t._shadowDom)})}else this.remove(t,i)},S_.prototype.remove=function(t,e){null!=e._shadowDomId&&(this.removeDom(e),t.style.filter="")},S_.prototype.updateDom=function(t,e){var i=e.getElementsByTagName("feDropShadow");i=0===i.length?this.createElement("feDropShadow"):i[0];var n,o,a,r,s=t.style,l=t.scale?t.scale[0]||1:1,u=t.scale?t.scale[1]||1:1;if(s.shadowBlur||s.shadowOffsetX||s.shadowOffsetY)n=s.shadowOffsetX||0,o=s.shadowOffsetY||0,a=s.shadowBlur,r=s.shadowColor;else{if(!s.textShadowBlur)return void this.removeDom(e,s);n=s.textShadowOffsetX||0,o=s.textShadowOffsetY||0,a=s.textShadowBlur,r=s.textShadowColor}i.setAttribute("dx",n/l),i.setAttribute("dy",o/u),i.setAttribute("flood-color",r);var h=a/2/l+" "+a/2/u;i.setAttribute("stdDeviation",h),e.setAttribute("x","-100%"),e.setAttribute("y","-100%"),e.setAttribute("width",Math.ceil(a/2*200)+"%"),e.setAttribute("height",Math.ceil(a/2*200)+"%"),e.appendChild(i),s._shadowDom=e},S_.prototype.markUsed=function(t){var e=t.style;e&&e._shadowDom&&__.prototype.markUsed.call(this,e._shadowDom)};var sR=function(t,e,i,n){this.root=t,this.storage=e,this._opts=i=a({},i||{});var o=r_("svg");o.setAttribute("xmlns","http://www.w3.org/2000/svg"),o.setAttribute("version","1.1"),o.setAttribute("baseProfile","full"),o.style.cssText="user-select:none;position:absolute;left:0;top:0;",this.gradientManager=new w_(n,o),this.clipPathManager=new b_(n,o),this.shadowManager=new S_(n,o);var r=document.createElement("div");r.style.cssText="overflow:hidden;position:relative",this._svgRoot=o,this._viewport=r,t.appendChild(r),r.appendChild(o),this.resize(i.width,i.height),this._visibleList=[]};sR.prototype={constructor:sR,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},setBackgroundColor:function(t){this._viewport.style.background=t},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused(),this.shadowManager.markAllUnused();var e,i=this._svgRoot,n=this._visibleList,o=t.length,a=[];for(e=0;e=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},resize:function(t,e){var i=this._viewport;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!==t||this._height!==e){this._width=t,this._height=e;var o=i.style;o.width=t+"px",o.height=e+"px";var a=this._svgRoot;a.setAttribute("width",t),a.setAttribute("height",e)}},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=["width","height"][t],n=["clientWidth","clientHeight"][t],o=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[i]&&"auto"!==e[i])return parseFloat(e[i]);var r=this.root,s=document.defaultView.getComputedStyle(r);return(r[n]||I_(s[i])||I_(r.style[i]))-(I_(s[o])||0)-(I_(s[a])||0)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},pathToDataUrl:function(){return this.refresh(),"data:image/svg+xml;charset=UTF-8,"+this._svgRoot.outerHTML}},d(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],function(t){sR.prototype[t]=N_(t)}),Ti("svg",sR),t.version="4.2.0",t.dependencies=wT,t.PRIORITY=IT,t.init=function(t,e,i){var n=Ds(t);if(n)return n;var o=new rs(t,e,i);return o.id="ec_"+WT++,GT[o.id]=o,Fi(t,ZT,o.id),Ts(o),o},t.connect=function(t){if(y(t)){var e=t;t=null,vT(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+HT++,vT(e,function(e){e.group=t})}return FT[t]=!0,t},t.disConnect=As,t.disconnect=UT,t.dispose=function(t){"string"==typeof t?t=GT[t]:t instanceof rs||(t=Ds(t)),t instanceof rs&&!t.isDisposed()&&t.dispose()},t.getInstanceByDom=Ds,t.getInstanceById=function(t){return GT[t]},t.registerTheme=Cs,t.registerPreprocessor=Ls,t.registerProcessor=ks,t.registerPostUpdate=function(t){RT.push(t)},t.registerAction=Ps,t.registerCoordinateSystem=Ns,t.getCoordinateSystemDimensions=function(t){var e=Ba.get(t);if(e)return e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice()},t.registerLayout=Os,t.registerVisual=Es,t.registerLoading=zs,t.extendComponentModel=Bs,t.extendComponentView=Vs,t.extendSeriesModel=Gs,t.extendChartView=Fs,t.setCanvasCreator=function(t){e("createCanvas",t)},t.registerMap=function(t,e,i){pT.registerMap(t,e,i)},t.getMap=function(t){var e=pT.retrieveMap(t);return e&&e[0]&&{geoJson:e[0].geoJSON,specialAreas:e[0].specialAreas}},t.dataTool=XT,t.zrender=Pb,t.number=NM,t.format=FM,t.throttle=Cr,t.helper=BA,t.matrix=fw,t.vector=nw,t.color=Pw,t.parseGeoJSON=GA,t.parseGeoJson=ZA,t.util=UA,t.graphic=XA,t.List=eA,t.Model=Lo,t.Axis=HA,t.env=z_}); diff --git a/public/lib/fonts/font-awesome/README.md b/public/lib/fonts/font-awesome/README.md new file mode 100644 index 0000000..44f050c --- /dev/null +++ b/public/lib/fonts/font-awesome/README.md @@ -0,0 +1,13 @@ +#font-awesome Font Awesome 是一整套包含 585 个象形矢量图标的字体库 + + +github地址:https://github.com/FortAwesome/Font-Awesome +官方网站:https://fontawesome.com/ +中文网站:http://fontawesome.dashgame.com/ + + +本地版本: 4.7.0 +更新日期: + +介绍: + 不需要 JavaScript,由 CSS 控制,可完全控制图标的大小和颜色样式 diff --git a/public/lib/fonts/font-awesome/_doc/all.html b/public/lib/fonts/font-awesome/_doc/all.html new file mode 100644 index 0000000..40db0f5 --- /dev/null +++ b/public/lib/fonts/font-awesome/_doc/all.html @@ -0,0 +1,2077 @@ + + + + + font-awesome 图标大全 + + + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + + +
    + + + +
    + + +
    + + + +
    + +
    + + +
    + +
    + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + +
    + +
    + + +
    +
      +
    • 所有标志图标都分别是其所有者的注册商标。
    • +
    • 使用这些商标并不代表Font Awesome拥有它们。
    • +
    • 商标只应用在被提及相应的公司或产品时使用。
    • +
    + +
    + +
    +

    特别注意!

    + Adblock Plus 插件会通过设置“Remove Social Media Buttons”来移除 Font Awesome 的这些标志图标。 + 然而我们并不会用一些特殊方法来强行显示。如果您认为这是一个错误,请 + 向 Adblock Plus 报告这个问题。 + 在Adblock Plus修复这个问题之前,您需要自行修改这些图标的类名来解决这个问题。 + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + +
    + + + + diff --git a/public/lib/fonts/font-awesome/_doc/style/site.css b/public/lib/fonts/font-awesome/_doc/style/site.css new file mode 100644 index 0000000..74dc7d5 --- /dev/null +++ b/public/lib/fonts/font-awesome/_doc/style/site.css @@ -0,0 +1,8532 @@ + +html { + font-family: 'microsoft yahei', 'Helvetica','simhei','simsun','sans-serif'; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + padding: 10px; + width: 98%; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + + audio:not([controls]) { + display: none; + height: 0; + } + +[hidden], +template { + display: none; +} + +a { + background: transparent; +} + + a:active, + a:hover { + outline: 0; + } + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + + button[disabled], + html input[disabled] { + cursor: default; + } + + button::-moz-focus-inner, + input::-moz-focus-inner { + border: 0; + padding: 0; + } + +input { + line-height: normal; +} + + input[type="checkbox"], + input[type="radio"] { + box-sizing: border-box; + padding: 0; + } + + input[type="number"]::-webkit-inner-spin-button, + input[type="number"]::-webkit-outer-spin-button { + height: auto; + } + + input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + } + + input[type="search"]::-webkit-search-cancel-button, + input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + select { + background: #fff !important; + } + + .navbar { + display: none; + } + + .table td, + .table th { + background-color: #fff !important; + } + + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + } + + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url("http://fontawesome.io/assets/fonts/glyphicons-halflings-regular.eot"); + src: url("http://fontawesome.io/assets/fonts/glyphicons-halflings-regular.eot?#iefix") format('embedded-opentype'), url("http://fontawesome.io/assets/fonts/glyphicons-halflings-regular.woff") format('woff'), url("http://fontawesome.io/assets/fonts/glyphicons-halflings-regular.ttf") format('truetype'), url("http://fontawesome.io/assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-lock:before { + content: "\e033"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-bookmark:before { + content: "\e044"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-camera:before { + content: "\e046"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-fire:before { + content: "\e104"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-calendar:before { + content: "\e109"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-bell:before { + content: "\e123"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-wrench:before { + content: "\e136"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-briefcase:before { + content: "\e139"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-paperclip:before { + content: "\e142"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-pushpin:before { + content: "\e146"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + + *:before, + *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #21b384; + text-decoration: none; +} + + a:hover, + a:focus { + color: #198764; + text-decoration: underline; + } + + a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; + } + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + + h1 small, + h2 small, + h3 small, + h4 small, + h5 small, + h6 small, + .h1 small, + .h2 small, + .h3 small, + .h4 small, + .h5 small, + .h6 small, + h1 .small, + h2 .small, + h3 .small, + h4 .small, + h5 .small, + h6 .small, + .h1 .small, + .h2 .small, + .h3 .small, + .h4 .small, + .h5 .small, + .h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; + } + +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} + + h1 small, + .h1 small, + h2 small, + .h2 small, + h3 small, + .h3 small, + h1 .small, + .h1 .small, + h2 .small, + .h2 .small, + h3 .small, + .h3 .small { + font-size: 65%; + } + +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} + + h4 small, + .h4 small, + h5 small, + .h5 small, + h6 small, + .h6 small, + h4 .small, + .h4 .small, + h5 .small, + .h5 .small, + h6 .small, + .h6 .small { + font-size: 75%; + } + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small, +.small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-nowrap { + white-space: nowrap; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-muted { + color: #777777; +} + +.text-primary { + color: #428bca; +} + +a.text-primary:hover { + color: #3071a9; +} + +.text-success { + color: #1d9d74; +} + +a.text-success:hover { + color: #157254; +} + +.text-info { + color: #007dbc; +} + +a.text-info:hover { + color: #005b89; +} + +.text-warning { + color: #8a6d3b; +} + +a.text-warning:hover { + color: #66512c; +} + +.text-danger { + color: #a94442; +} + +a.text-danger:hover { + color: #843534; +} + +.bg-primary { + color: #fff; + background-color: #428bca; +} + +a.bg-primary:hover { + background-color: #3071a9; +} + +.bg-success { + background-color: #f1f9f7; +} + +a.bg-success:hover { + background-color: #ceeae1; +} + +.bg-info { + background-color: #f0f9ff; +} + +a.bg-info:hover { + background-color: #bde5ff; +} + +.bg-warning { + background-color: #fcf8e3; +} + +a.bg-warning:hover { + background-color: #f7ecb5; +} + +.bg-danger { + background-color: #f2dede; +} + +a.bg-danger:hover { + background-color: #e4b9b9; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + + ul ul, + ol ul, + ul ol, + ol ol { + margin-bottom: 0; + } + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + + .list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; + } + +dl { + margin-top: 0; + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.42857143; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .dl-horizontal dd { + margin-left: 180px; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} + + blockquote p:last-child, + blockquote ul:last-child, + blockquote ol:last-child { + margin-bottom: 0; + } + + blockquote footer, + blockquote small, + blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; + } + + blockquote footer:before, + blockquote small:before, + blockquote .small:before { + content: '\2014 \00A0'; + } + + .blockquote-reverse, + blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; + } + + .blockquote-reverse footer:before, + blockquote.pull-right footer:before, + .blockquote-reverse small:before, + blockquote.pull-right small:before, + .blockquote-reverse .small:before, + blockquote.pull-right .small:before { + content: ''; + } + + .blockquote-reverse footer:after, + blockquote.pull-right footer:after, + .blockquote-reverse small:after, + blockquote.pull-right small:after, + .blockquote-reverse .small:after, + blockquote.pull-right .small:after { + content: '\00A0 \2014'; + } + + blockquote:before, + blockquote:after { + content: ""; + } + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} + + kbd kbd { + padding: 0; + font-size: 100%; + box-shadow: none; + } + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #eeeeee; + border-radius: 4px; +} + + pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +@media (min-width: 768px) { + .container { + width: 750px; + } +} + +@media (min-width: 992px) { + .container { + width: 970px; + } +} + +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} + +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.row { + margin-left: -15px; + margin-right: -15px; +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-11 { + width: 91.66666667%; +} + +.col-xs-10 { + width: 83.33333333%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-8 { + width: 66.66666667%; +} + +.col-xs-7 { + width: 58.33333333%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-5 { + width: 41.66666667%; +} + +.col-xs-4 { + width: 33.33333333%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-2 { + width: 16.66666667%; +} + +.col-xs-1 { + width: 8.33333333%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-pull-11 { + right: 91.66666667%; +} + +.col-xs-pull-10 { + right: 83.33333333%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-8 { + right: 66.66666667%; +} + +.col-xs-pull-7 { + right: 58.33333333%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-5 { + right: 41.66666667%; +} + +.col-xs-pull-4 { + right: 33.33333333%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-2 { + right: 16.66666667%; +} + +.col-xs-pull-1 { + right: 8.33333333%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-push-11 { + left: 91.66666667%; +} + +.col-xs-push-10 { + left: 83.33333333%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-8 { + left: 66.66666667%; +} + +.col-xs-push-7 { + left: 58.33333333%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-5 { + left: 41.66666667%; +} + +.col-xs-push-4 { + left: 33.33333333%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-2 { + left: 16.66666667%; +} + +.col-xs-push-1 { + left: 8.33333333%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +.col-xs-offset-11 { + margin-left: 91.66666667%; +} + +.col-xs-offset-10 { + margin-left: 83.33333333%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-8 { + margin-left: 66.66666667%; +} + +.col-xs-offset-7 { + margin-left: 58.33333333%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-5 { + margin-left: 41.66666667%; +} + +.col-xs-offset-4 { + margin-left: 33.33333333%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-2 { + margin-left: 16.66666667%; +} + +.col-xs-offset-1 { + margin-left: 8.33333333%; +} + +.col-xs-offset-0 { + margin-left: 0%; +} + +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + + .col-sm-12 { + width: 100%; + } + + .col-sm-11 { + width: 91.66666667%; + } + + .col-sm-10 { + width: 83.33333333%; + } + + .col-sm-9 { + width: 75%; + } + + .col-sm-8 { + width: 66.66666667%; + } + + .col-sm-7 { + width: 58.33333333%; + } + + .col-sm-6 { + width: 50%; + } + + .col-sm-5 { + width: 41.66666667%; + } + + .col-sm-4 { + width: 33.33333333%; + } + + .col-sm-3 { + width: 25%; + } + + .col-sm-2 { + width: 16.66666667%; + } + + .col-sm-1 { + width: 8.33333333%; + } + + .col-sm-pull-12 { + right: 100%; + } + + .col-sm-pull-11 { + right: 91.66666667%; + } + + .col-sm-pull-10 { + right: 83.33333333%; + } + + .col-sm-pull-9 { + right: 75%; + } + + .col-sm-pull-8 { + right: 66.66666667%; + } + + .col-sm-pull-7 { + right: 58.33333333%; + } + + .col-sm-pull-6 { + right: 50%; + } + + .col-sm-pull-5 { + right: 41.66666667%; + } + + .col-sm-pull-4 { + right: 33.33333333%; + } + + .col-sm-pull-3 { + right: 25%; + } + + .col-sm-pull-2 { + right: 16.66666667%; + } + + .col-sm-pull-1 { + right: 8.33333333%; + } + + .col-sm-pull-0 { + right: auto; + } + + .col-sm-push-12 { + left: 100%; + } + + .col-sm-push-11 { + left: 91.66666667%; + } + + .col-sm-push-10 { + left: 83.33333333%; + } + + .col-sm-push-9 { + left: 75%; + } + + .col-sm-push-8 { + left: 66.66666667%; + } + + .col-sm-push-7 { + left: 58.33333333%; + } + + .col-sm-push-6 { + left: 50%; + } + + .col-sm-push-5 { + left: 41.66666667%; + } + + .col-sm-push-4 { + left: 33.33333333%; + } + + .col-sm-push-3 { + left: 25%; + } + + .col-sm-push-2 { + left: 16.66666667%; + } + + .col-sm-push-1 { + left: 8.33333333%; + } + + .col-sm-push-0 { + left: auto; + } + + .col-sm-offset-12 { + margin-left: 100%; + } + + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + + .col-sm-offset-9 { + margin-left: 75%; + } + + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + + .col-sm-offset-6 { + margin-left: 50%; + } + + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + + .col-sm-offset-3 { + margin-left: 25%; + } + + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + + .col-sm-offset-0 { + margin-left: 0%; + } +} + +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + + .col-md-12 { + width: 100%; + } + + .col-md-11 { + width: 91.66666667%; + } + + .col-md-10 { + width: 83.33333333%; + } + + .col-md-9 { + width: 75%; + } + + .col-md-8 { + width: 66.66666667%; + } + + .col-md-7 { + width: 58.33333333%; + } + + .col-md-6 { + width: 50%; + } + + .col-md-5 { + width: 41.66666667%; + } + + .col-md-4 { + width: 33.33333333%; + } + + .col-md-3 { + width: 25%; + } + + .col-md-2 { + width: 16.66666667%; + } + + .col-md-1 { + width: 8.33333333%; + } + + .col-md-pull-12 { + right: 100%; + } + + .col-md-pull-11 { + right: 91.66666667%; + } + + .col-md-pull-10 { + right: 83.33333333%; + } + + .col-md-pull-9 { + right: 75%; + } + + .col-md-pull-8 { + right: 66.66666667%; + } + + .col-md-pull-7 { + right: 58.33333333%; + } + + .col-md-pull-6 { + right: 50%; + } + + .col-md-pull-5 { + right: 41.66666667%; + } + + .col-md-pull-4 { + right: 33.33333333%; + } + + .col-md-pull-3 { + right: 25%; + } + + .col-md-pull-2 { + right: 16.66666667%; + } + + .col-md-pull-1 { + right: 8.33333333%; + } + + .col-md-pull-0 { + right: auto; + } + + .col-md-push-12 { + left: 100%; + } + + .col-md-push-11 { + left: 91.66666667%; + } + + .col-md-push-10 { + left: 83.33333333%; + } + + .col-md-push-9 { + left: 75%; + } + + .col-md-push-8 { + left: 66.66666667%; + } + + .col-md-push-7 { + left: 58.33333333%; + } + + .col-md-push-6 { + left: 50%; + } + + .col-md-push-5 { + left: 41.66666667%; + } + + .col-md-push-4 { + left: 33.33333333%; + } + + .col-md-push-3 { + left: 25%; + } + + .col-md-push-2 { + left: 16.66666667%; + } + + .col-md-push-1 { + left: 8.33333333%; + } + + .col-md-push-0 { + left: auto; + } + + .col-md-offset-12 { + margin-left: 100%; + } + + .col-md-offset-11 { + margin-left: 91.66666667%; + } + + .col-md-offset-10 { + margin-left: 83.33333333%; + } + + .col-md-offset-9 { + margin-left: 75%; + } + + .col-md-offset-8 { + margin-left: 66.66666667%; + } + + .col-md-offset-7 { + margin-left: 58.33333333%; + } + + .col-md-offset-6 { + margin-left: 50%; + } + + .col-md-offset-5 { + margin-left: 41.66666667%; + } + + .col-md-offset-4 { + margin-left: 33.33333333%; + } + + .col-md-offset-3 { + margin-left: 25%; + } + + .col-md-offset-2 { + margin-left: 16.66666667%; + } + + .col-md-offset-1 { + margin-left: 8.33333333%; + } + + .col-md-offset-0 { + margin-left: 0%; + } +} + +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + + .col-lg-12 { + width: 100%; + } + + .col-lg-11 { + width: 91.66666667%; + } + + .col-lg-10 { + width: 83.33333333%; + } + + .col-lg-9 { + width: 75%; + } + + .col-lg-8 { + width: 66.66666667%; + } + + .col-lg-7 { + width: 58.33333333%; + } + + .col-lg-6 { + width: 50%; + } + + .col-lg-5 { + width: 41.66666667%; + } + + .col-lg-4 { + width: 33.33333333%; + } + + .col-lg-3 { + width: 25%; + } + + .col-lg-2 { + width: 16.66666667%; + } + + .col-lg-1 { + width: 8.33333333%; + } + + .col-lg-pull-12 { + right: 100%; + } + + .col-lg-pull-11 { + right: 91.66666667%; + } + + .col-lg-pull-10 { + right: 83.33333333%; + } + + .col-lg-pull-9 { + right: 75%; + } + + .col-lg-pull-8 { + right: 66.66666667%; + } + + .col-lg-pull-7 { + right: 58.33333333%; + } + + .col-lg-pull-6 { + right: 50%; + } + + .col-lg-pull-5 { + right: 41.66666667%; + } + + .col-lg-pull-4 { + right: 33.33333333%; + } + + .col-lg-pull-3 { + right: 25%; + } + + .col-lg-pull-2 { + right: 16.66666667%; + } + + .col-lg-pull-1 { + right: 8.33333333%; + } + + .col-lg-pull-0 { + right: auto; + } + + .col-lg-push-12 { + left: 100%; + } + + .col-lg-push-11 { + left: 91.66666667%; + } + + .col-lg-push-10 { + left: 83.33333333%; + } + + .col-lg-push-9 { + left: 75%; + } + + .col-lg-push-8 { + left: 66.66666667%; + } + + .col-lg-push-7 { + left: 58.33333333%; + } + + .col-lg-push-6 { + left: 50%; + } + + .col-lg-push-5 { + left: 41.66666667%; + } + + .col-lg-push-4 { + left: 33.33333333%; + } + + .col-lg-push-3 { + left: 25%; + } + + .col-lg-push-2 { + left: 16.66666667%; + } + + .col-lg-push-1 { + left: 8.33333333%; + } + + .col-lg-push-0 { + left: auto; + } + + .col-lg-offset-12 { + margin-left: 100%; + } + + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + + .col-lg-offset-9 { + margin-left: 75%; + } + + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + + .col-lg-offset-6 { + margin-left: 50%; + } + + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + + .col-lg-offset-3 { + margin-left: 25%; + } + + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + + .col-lg-offset-0 { + margin-left: 0%; + } +} + +table { + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + + .table > thead > tr > th, + .table > tbody > tr > th, + .table > tfoot > tr > th, + .table > thead > tr > td, + .table > tbody > tr > td, + .table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; + } + + .table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; + } + + .table > caption + thead > tr:first-child > th, + .table > colgroup + thead > tr:first-child > th, + .table > thead:first-child > tr:first-child > th, + .table > caption + thead > tr:first-child > td, + .table > colgroup + thead > tr:first-child > td, + .table > thead:first-child > tr:first-child > td { + border-top: 0; + } + + .table > tbody + tbody { + border-top: 2px solid #dddddd; + } + + .table .table { + background-color: #ffffff; + } + +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + + .table-bordered > thead > tr > th, + .table-bordered > tbody > tr > th, + .table-bordered > tfoot > tr > th, + .table-bordered > thead > tr > td, + .table-bordered > tbody > tr > td, + .table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; + } + + .table-bordered > thead > tr > th, + .table-bordered > thead > tr > td { + border-bottom-width: 2px; + } + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} + +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #f1f9f7; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #e0f1ec; +} + +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #f0f9ff; +} + +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #d7efff; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} + +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + -webkit-overflow-scrolling: touch; + } + + .table-responsive > .table { + margin-bottom: 0; + } + + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + + .table-responsive > .table-bordered { + border: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} + +input[type="file"] { + display: block; +} + +input[type="range"] { + display: block; + width: 100%; +} + +select[multiple], +select[size] { + height: auto; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} + + .form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + } + + .form-control::-moz-placeholder { + color: #777777; + opacity: 1; + } + + .form-control:-ms-input-placeholder { + color: #777777; + } + + .form-control::-webkit-input-placeholder { + color: #777777; + } + + .form-control[disabled], + .form-control[readonly], + fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; + } + +textarea.form-control { + height: auto; +} + +input[type="search"] { + -webkit-appearance: none; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 34px; + line-height: 1.42857143 \0; +} + + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + position: relative; + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; +} + + .radio label, + .checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } + + .radio input[type="radio"], + .radio-inline input[type="radio"], + .checkbox input[type="checkbox"], + .checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; + } + + .radio + .radio, + .checkbox + .checkbox { + margin-top: -5px; + } + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + + .radio-inline + .radio-inline, + .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; + } + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} + +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} + +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} + + .form-control-static.input-lg, + .form-control-static.input-sm { + padding-left: 0; + padding-right: 0; + } + +.input-sm, +.form-horizontal .form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} + +.input-lg, +.form-horizontal .form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 46px; + line-height: 46px; +} + +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} + +.has-feedback { + position: relative; +} + + .has-feedback .form-control { + padding-right: 42.5px; + } + +.form-control-feedback { + position: absolute; + top: 25px; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; +} + +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} + +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #1d9d74; +} + +.has-success .form-control { + border-color: #1d9d74; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + + .has-success .form-control:focus { + border-color: #157254; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #44dcab; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #44dcab; + } + +.has-success .input-group-addon { + color: #1d9d74; + border-color: #1d9d74; + background-color: #f1f9f7; +} + +.has-success .form-control-feedback { + color: #1d9d74; +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} + +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + + .has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + } + +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} + +.has-warning .form-control-feedback { + color: #8a6d3b; +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} + +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + + .has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + } + +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} + +.has-error .form-control-feedback { + color: #a94442; +} + +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + + .form-inline .input-group > .form-control { + width: 100%; + } + + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} + +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} + +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} + +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} + +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} + +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + .btn:focus, + .btn:active:focus, + .btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; + } + + .btn:hover, + .btn:focus { + color: #333333; + text-decoration: none; + } + + .btn:active, + .btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + } + + .btn.disabled, + .btn[disabled], + fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + } + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + + .btn-default:hover, + .btn-default:focus, + .btn-default:active, + .btn-default.active, + .open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; + } + + .btn-default:active, + .btn-default.active, + .open > .dropdown-toggle.btn-default { + background-image: none; + } + + .btn-default.disabled, + .btn-default[disabled], + fieldset[disabled] .btn-default, + .btn-default.disabled:hover, + .btn-default[disabled]:hover, + fieldset[disabled] .btn-default:hover, + .btn-default.disabled:focus, + .btn-default[disabled]:focus, + fieldset[disabled] .btn-default:focus, + .btn-default.disabled:active, + .btn-default[disabled]:active, + fieldset[disabled] .btn-default:active, + .btn-default.disabled.active, + .btn-default[disabled].active, + fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; + } + + .btn-default .badge { + color: #ffffff; + background-color: #333333; + } + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + + .btn-primary:hover, + .btn-primary:focus, + .btn-primary:active, + .btn-primary.active, + .open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3071a9; + border-color: #285e8e; + } + + .btn-primary:active, + .btn-primary.active, + .open > .dropdown-toggle.btn-primary { + background-image: none; + } + + .btn-primary.disabled, + .btn-primary[disabled], + fieldset[disabled] .btn-primary, + .btn-primary.disabled:hover, + .btn-primary[disabled]:hover, + fieldset[disabled] .btn-primary:hover, + .btn-primary.disabled:focus, + .btn-primary[disabled]:focus, + fieldset[disabled] .btn-primary:focus, + .btn-primary.disabled:active, + .btn-primary[disabled]:active, + fieldset[disabled] .btn-primary:active, + .btn-primary.disabled.active, + .btn-primary[disabled].active, + fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; + } + + .btn-primary .badge { + color: #428bca; + background-color: #ffffff; + } + +.btn-success { + color: #ffffff; + background-color: #61ba9e; + border-color: #4fb393; +} + + .btn-success:hover, + .btn-success:focus, + .btn-success:active, + .btn-success.active, + .open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #46a285; + border-color: #3b8970; + } + + .btn-success:active, + .btn-success.active, + .open > .dropdown-toggle.btn-success { + background-image: none; + } + + .btn-success.disabled, + .btn-success[disabled], + fieldset[disabled] .btn-success, + .btn-success.disabled:hover, + .btn-success[disabled]:hover, + fieldset[disabled] .btn-success:hover, + .btn-success.disabled:focus, + .btn-success[disabled]:focus, + fieldset[disabled] .btn-success:focus, + .btn-success.disabled:active, + .btn-success[disabled]:active, + fieldset[disabled] .btn-success:active, + .btn-success.disabled.active, + .btn-success[disabled].active, + fieldset[disabled] .btn-success.active { + background-color: #61ba9e; + border-color: #4fb393; + } + + .btn-success .badge { + color: #61ba9e; + background-color: #ffffff; + } + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + + .btn-info:hover, + .btn-info:focus, + .btn-info:active, + .btn-info.active, + .open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; + } + + .btn-info:active, + .btn-info.active, + .open > .dropdown-toggle.btn-info { + background-image: none; + } + + .btn-info.disabled, + .btn-info[disabled], + fieldset[disabled] .btn-info, + .btn-info.disabled:hover, + .btn-info[disabled]:hover, + fieldset[disabled] .btn-info:hover, + .btn-info.disabled:focus, + .btn-info[disabled]:focus, + fieldset[disabled] .btn-info:focus, + .btn-info.disabled:active, + .btn-info[disabled]:active, + fieldset[disabled] .btn-info:active, + .btn-info.disabled.active, + .btn-info[disabled].active, + fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; + } + + .btn-info .badge { + color: #5bc0de; + background-color: #ffffff; + } + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + + .btn-warning:hover, + .btn-warning:focus, + .btn-warning:active, + .btn-warning.active, + .open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; + } + + .btn-warning:active, + .btn-warning.active, + .open > .dropdown-toggle.btn-warning { + background-image: none; + } + + .btn-warning.disabled, + .btn-warning[disabled], + fieldset[disabled] .btn-warning, + .btn-warning.disabled:hover, + .btn-warning[disabled]:hover, + fieldset[disabled] .btn-warning:hover, + .btn-warning.disabled:focus, + .btn-warning[disabled]:focus, + fieldset[disabled] .btn-warning:focus, + .btn-warning.disabled:active, + .btn-warning[disabled]:active, + fieldset[disabled] .btn-warning:active, + .btn-warning.disabled.active, + .btn-warning[disabled].active, + fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; + } + + .btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; + } + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + + .btn-danger:hover, + .btn-danger:focus, + .btn-danger:active, + .btn-danger.active, + .open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; + } + + .btn-danger:active, + .btn-danger.active, + .open > .dropdown-toggle.btn-danger { + background-image: none; + } + + .btn-danger.disabled, + .btn-danger[disabled], + fieldset[disabled] .btn-danger, + .btn-danger.disabled:hover, + .btn-danger[disabled]:hover, + fieldset[disabled] .btn-danger:hover, + .btn-danger.disabled:focus, + .btn-danger[disabled]:focus, + fieldset[disabled] .btn-danger:focus, + .btn-danger.disabled:active, + .btn-danger[disabled]:active, + fieldset[disabled] .btn-danger:active, + .btn-danger.disabled.active, + .btn-danger[disabled].active, + fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; + } + + .btn-danger .badge { + color: #d9534f; + background-color: #ffffff; + } + +.btn-link { + color: #21b384; + font-weight: normal; + cursor: pointer; + border-radius: 0; +} + + .btn-link, + .btn-link:active, + .btn-link[disabled], + fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + } + + .btn-link, + .btn-link:hover, + .btn-link:focus, + .btn-link:active { + border-color: transparent; + } + + .btn-link:hover, + .btn-link:focus { + color: #198764; + text-decoration: underline; + background-color: transparent; + } + + .btn-link[disabled]:hover, + fieldset[disabled] .btn-link:hover, + .btn-link[disabled]:focus, + fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; + } + +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; +} + + .btn-block + .btn-block { + margin-top: 5px; + } + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + + .fade.in { + opacity: 1; + } + +.collapse { + display: none; +} + + .collapse.in { + display: block; + } + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + + .dropdown-menu.pull-right { + right: 0; + left: auto; + } + + .dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + } + + .dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; + } + + .dropdown-menu > li > a:hover, + .dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; + } + + .dropdown-menu > .active > a, + .dropdown-menu > .active > a:hover, + .dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #1d9d74; + } + + .dropdown-menu > .disabled > a, + .dropdown-menu > .disabled > a:hover, + .dropdown-menu > .disabled > a:focus { + color: #777777; + } + + .dropdown-menu > .disabled > a:hover, + .dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; + } + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-menu-right { + left: auto; + right: 0; +} + +.dropdown-menu-left { + left: 0; + right: auto; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + float: left; + } + + .btn-group > .btn:hover, + .btn-group-vertical > .btn:hover, + .btn-group > .btn:focus, + .btn-group-vertical > .btn:focus, + .btn-group > .btn:active, + .btn-group-vertical > .btn:active, + .btn-group > .btn.active, + .btn-group-vertical > .btn.active { + z-index: 2; + } + + .btn-group > .btn:focus, + .btn-group-vertical > .btn:focus { + outline: 0; + } + + .btn-group .btn + .btn, + .btn-group .btn + .btn-group, + .btn-group .btn-group + .btn, + .btn-group .btn-group + .btn-group { + margin-left: -1px; + } + +.btn-toolbar { + margin-left: -5px; +} + + .btn-toolbar .btn-group, + .btn-toolbar .input-group { + float: left; + } + + .btn-toolbar > .btn, + .btn-toolbar > .btn-group, + .btn-toolbar > .input-group { + margin-left: 5px; + } + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + + .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + + .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; + } + + .btn-group > .btn-group:first-child > .btn:last-child, + .btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + + .btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + + .btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; + } + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + + .btn-group-vertical > .btn-group > .btn { + float: none; + } + + .btn-group-vertical > .btn + .btn, + .btn-group-vertical > .btn + .btn-group, + .btn-group-vertical > .btn-group + .btn, + .btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } + + .btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; + } + + .btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; + } + + .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; + } + + .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, + .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; + } + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} + + .btn-group-justified > .btn, + .btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + + .btn-group-justified > .btn-group .btn { + width: 100%; + } + + .btn-group-justified > .btn-group .dropdown-menu { + left: auto; + } + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + + .input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; + } + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + + .input-group-addon:not(:first-child):not(:last-child), + .input-group-btn:not(:first-child):not(:last-child), + .input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; + } + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + + .input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; + } + + .input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; + } + + .input-group-addon input[type="radio"], + .input-group-addon input[type="checkbox"] { + margin-top: 0; + } + + .input-group .form-control:first-child, + .input-group-addon:first-child, + .input-group-btn:first-child > .btn, + .input-group-btn:first-child > .btn-group > .btn, + .input-group-btn:first-child > .dropdown-toggle, + .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), + .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + + .input-group-addon:first-child { + border-right: 0; + } + + .input-group .form-control:last-child, + .input-group-addon:last-child, + .input-group-btn:last-child > .btn, + .input-group-btn:last-child > .btn-group > .btn, + .input-group-btn:last-child > .dropdown-toggle, + .input-group-btn:first-child > .btn:not(:first-child), + .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + + .input-group-addon:last-child { + border-left: 0; + } + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + + .input-group-btn > .btn { + position: relative; + } + + .input-group-btn > .btn + .btn { + margin-left: -1px; + } + + .input-group-btn > .btn:hover, + .input-group-btn > .btn:focus, + .input-group-btn > .btn:active { + z-index: 2; + } + + .input-group-btn:first-child > .btn, + .input-group-btn:first-child > .btn-group { + margin-right: -1px; + } + + .input-group-btn:last-child > .btn, + .input-group-btn:last-child > .btn-group { + margin-left: -1px; + } + +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} + + .nav > li { + position: relative; + display: block; + } + + .nav > li > a { + position: relative; + display: block; + padding: 10px 15px; + } + + .nav > li > a:hover, + .nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; + } + + .nav > li.disabled > a { + color: #777777; + } + + .nav > li.disabled > a:hover, + .nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; + } + + .nav .open > a, + .nav .open > a:hover, + .nav .open > a:focus { + background-color: #eeeeee; + border-color: #21b384; + } + + .nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + } + + .nav > li > a > img { + max-width: none; + } + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + + .nav-tabs > li { + float: left; + margin-bottom: -1px; + } + + .nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; + } + + .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; + } + + .nav-tabs > li.active > a, + .nav-tabs > li.active > a:hover, + .nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; + } + + .nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; + } + + .nav-tabs.nav-justified > li { + float: none; + } + + .nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; + } + + .nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} + +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} + +.nav-pills > li { + float: left; +} + + .nav-pills > li > a { + border-radius: 4px; + } + + .nav-pills > li + li { + margin-left: 2px; + } + + .nav-pills > li.active > a, + .nav-pills > li.active > a:hover, + .nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #1d9d74; + } + +.nav-stacked > li { + float: none; +} + + .nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; + } + +.nav-justified { + width: 100%; +} + + .nav-justified > li { + float: none; + } + + .nav-justified > li > a { + text-align: center; + margin-bottom: 5px; + } + + .nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + + .nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; + } + + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; + } + +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + min-height: 40px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + + .navbar-collapse.in { + overflow-y: auto; + } + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + + .navbar-collapse.in { + overflow-y: visible; + } + + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} + +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} + +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} + +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +.navbar-brand { + float: left; + padding: 10px 15px; + font-size: 18px; + line-height: 20px; + height: 40px; +} + + .navbar-brand:hover, + .navbar-brand:focus { + text-decoration: none; + } + +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 3px; + margin-bottom: 3px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} + + .navbar-toggle:focus { + outline: 0; + } + + .navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; + } + + .navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; + } + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 5px -15px; +} + + .navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; + } + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + + .navbar-nav > li { + float: left; + } + + .navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + } + + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + + .navbar-right { + float: right !important; + } +} + +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 3px; + margin-bottom: 3px; +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + + .navbar-form .input-group > .form-control { + width: 100%; + } + + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-btn { + margin-top: 3px; + margin-bottom: 3px; +} + + .navbar-btn.btn-sm { + margin-top: 5px; + margin-bottom: 5px; + } + + .navbar-btn.btn-xs { + margin-top: 9px; + margin-bottom: 9px; + } + +.navbar-text { + margin-top: 10px; + margin-bottom: 10px; +} + +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } + + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + + .navbar-default .navbar-brand { + color: #777777; + } + + .navbar-default .navbar-brand:hover, + .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; + } + + .navbar-default .navbar-text { + color: #777777; + } + + .navbar-default .navbar-nav > li > a { + color: #777777; + } + + .navbar-default .navbar-nav > li > a:hover, + .navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; + } + + .navbar-default .navbar-nav > .active > a, + .navbar-default .navbar-nav > .active > a:hover, + .navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + + .navbar-default .navbar-nav > .disabled > a, + .navbar-default .navbar-nav > .disabled > a:hover, + .navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } + + .navbar-default .navbar-toggle { + border-color: #dddddd; + } + + .navbar-default .navbar-toggle:hover, + .navbar-default .navbar-toggle:focus { + background-color: #dddddd; + } + + .navbar-default .navbar-toggle .icon-bar { + background-color: #888888; + } + + .navbar-default .navbar-collapse, + .navbar-default .navbar-form { + border-color: #e7e7e7; + } + + .navbar-default .navbar-nav > .open > a, + .navbar-default .navbar-nav > .open > a:hover, + .navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; + } + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + + .navbar-default .navbar-link:hover { + color: #333333; + } + +.navbar-default .btn-link { + color: #777777; +} + + .navbar-default .btn-link:hover, + .navbar-default .btn-link:focus { + color: #333333; + } + + .navbar-default .btn-link[disabled]:hover, + fieldset[disabled] .navbar-default .btn-link:hover, + .navbar-default .btn-link[disabled]:focus, + fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; + } + +.navbar-inverse { + background-color: #1d9d74; + border-color: #1b926c; +} + + .navbar-inverse .navbar-brand { + color: #ffffff; + } + + .navbar-inverse .navbar-brand:hover, + .navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; + } + + .navbar-inverse .navbar-text { + color: #8eceba; + } + + .navbar-inverse .navbar-nav > li > a { + color: #b0ddce; + } + + .navbar-inverse .navbar-nav > li > a:hover, + .navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; + } + + .navbar-inverse .navbar-nav > .active > a, + .navbar-inverse .navbar-nav > .active > a:hover, + .navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #1b926c; + } + + .navbar-inverse .navbar-nav > .disabled > a, + .navbar-inverse .navbar-nav > .disabled > a:hover, + .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; + } + + .navbar-inverse .navbar-toggle { + border-color: #c7e7dc; + } + + .navbar-inverse .navbar-toggle:hover, + .navbar-inverse .navbar-toggle:focus { + background-color: #ffffff; + } + + .navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; + } + + .navbar-inverse .navbar-collapse, + .navbar-inverse .navbar-form { + border-color: #177f5e; + } + + .navbar-inverse .navbar-nav > .open > a, + .navbar-inverse .navbar-nav > .open > a:hover, + .navbar-inverse .navbar-nav > .open > a:focus { + background-color: #1b926c; + color: #ffffff; + } + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #1b926c; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #1b926c; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #b0ddce; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #1b926c; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #b0ddce; +} + + .navbar-inverse .navbar-link:hover { + color: #ffffff; + } + +.navbar-inverse .btn-link { + color: #b0ddce; +} + + .navbar-inverse .btn-link:hover, + .navbar-inverse .btn-link:focus { + color: #ffffff; + } + + .navbar-inverse .btn-link[disabled]:hover, + fieldset[disabled] .navbar-inverse .btn-link:hover, + .navbar-inverse .btn-link[disabled]:focus, + fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; + } + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + + .breadcrumb > li { + display: inline-block; + } + + .breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; + } + + .breadcrumb > .active { + color: #777777; + } + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + + .pagination > li { + display: inline; + } + + .pagination > li > a, + .pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #21b384; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; + } + + .pagination > li:first-child > a, + .pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; + } + + .pagination > li:last-child > a, + .pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; + } + + .pagination > li > a:hover, + .pagination > li > span:hover, + .pagination > li > a:focus, + .pagination > li > span:focus { + color: #198764; + background-color: #eeeeee; + border-color: #dddddd; + } + + .pagination > .active > a, + .pagination > .active > span, + .pagination > .active > a:hover, + .pagination > .active > span:hover, + .pagination > .active > a:focus, + .pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; + cursor: default; + } + + .pagination > .disabled > span, + .pagination > .disabled > span:hover, + .pagination > .disabled > span:focus, + .pagination > .disabled > a, + .pagination > .disabled > a:hover, + .pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; + } + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} + + .pager li { + display: inline; + } + + .pager li > a, + .pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; + } + + .pager li > a:hover, + .pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; + } + + .pager .next > a, + .pager .next > span { + float: right; + } + + .pager .previous > a, + .pager .previous > span { + float: left; + } + + .pager .disabled > a, + .pager .disabled > a:hover, + .pager .disabled > a:focus, + .pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; + } + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.btn .label { + position: relative; + top: -1px; +} + +.label-default { + background-color: #777777; +} + + .label-default[href]:hover, + .label-default[href]:focus { + background-color: #5e5e5e; + } + +.label-primary { + background-color: #428bca; +} + + .label-primary[href]:hover, + .label-primary[href]:focus { + background-color: #3071a9; + } + +.label-success { + background-color: #61ba9e; +} + + .label-success[href]:hover, + .label-success[href]:focus { + background-color: #46a285; + } + +.label-info { + background-color: #5bc0de; +} + + .label-info[href]:hover, + .label-info[href]:focus { + background-color: #31b0d5; + } + +.label-warning { + background-color: #f0ad4e; +} + + .label-warning[href]:hover, + .label-warning[href]:focus { + background-color: #ec971f; + } + +.label-danger { + background-color: #d9534f; +} + + .label-danger[href]:hover, + .label-danger[href]:focus { + background-color: #c9302c; + } + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} + + .badge:empty { + display: none; + } + +.btn .badge { + position: relative; + top: -1px; +} + +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #21b384; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: #ffffff; + background-color: #1d9d74; +} + + .jumbotron h1, + .jumbotron .h1 { + color: inherit; + } + + .jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; + } + + .jumbotron > hr { + border-top-color: #157254; + } + +.container .jumbotron { + border-radius: 6px; +} + +.jumbotron .container { + max-width: 100%; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + + .thumbnail > img, + .thumbnail a > img { + margin-left: auto; + margin-right: auto; + } + +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #21b384; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + + .alert h4 { + margin-top: 0; + color: inherit; + } + + .alert .alert-link { + font-weight: bold; + } + + .alert > p, + .alert > ul { + margin-bottom: 0; + } + + .alert > p + p { + margin-top: 5px; + } + +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} + + .alert-dismissable .close, + .alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } + +.alert-success { + background-color: #f1f9f7; + border-color: #e0f1e9; + color: #1d9d74; +} + + .alert-success hr { + border-top-color: #ceeadc; + } + + .alert-success .alert-link { + color: #157254; + } + +.alert-info { + background-color: #f0f9ff; + border-color: #ccf3ff; + color: #007dbc; +} + + .alert-info hr { + border-top-color: #b3edff; + } + + .alert-info .alert-link { + color: #005b89; + } + +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} + + .alert-warning hr { + border-top-color: #f7e1b5; + } + + .alert-warning .alert-link { + color: #66512c; + } + +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} + + .alert-danger hr { + border-top-color: #e4b9c0; + } + + .alert-danger .alert-link { + color: #843534; + } + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + + to { + background-position: 0 0; + } +} + +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar[aria-valuenow="1"], +.progress-bar[aria-valuenow="2"] { + min-width: 30px; +} + +.progress-bar[aria-valuenow="0"] { + color: #777777; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; +} + +.progress-bar-success { + background-color: #61ba9e; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + + .media, + .media .media { + margin-top: 15px; + } + + .media:first-child { + margin-top: 0; + } + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + margin-bottom: 20px; + padding-left: 0; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + + .list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + } + + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + } + + .list-group-item > .badge { + float: right; + } + + .list-group-item > .badge + .badge { + margin-right: 5px; + } + +a.list-group-item { + color: #555555; +} + + a.list-group-item .list-group-item-heading { + color: #333333; + } + + a.list-group-item:hover, + a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; + } + +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; +} + + .list-group-item.disabled .list-group-item-heading, + .list-group-item.disabled:hover .list-group-item-heading, + .list-group-item.disabled:focus .list-group-item-heading { + color: inherit; + } + + .list-group-item.disabled .list-group-item-text, + .list-group-item.disabled:hover .list-group-item-text, + .list-group-item.disabled:focus .list-group-item-text { + color: #777777; + } + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #1d9d74; + border-color: #1d9d74; +} + + .list-group-item.active .list-group-item-heading, + .list-group-item.active:hover .list-group-item-heading, + .list-group-item.active:focus .list-group-item-heading, + .list-group-item.active .list-group-item-heading > small, + .list-group-item.active:hover .list-group-item-heading > small, + .list-group-item.active:focus .list-group-item-heading > small, + .list-group-item.active .list-group-item-heading > .small, + .list-group-item.active:hover .list-group-item-heading > .small, + .list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; + } + + .list-group-item.active .list-group-item-text, + .list-group-item.active:hover .list-group-item-text, + .list-group-item.active:focus .list-group-item-text { + color: #9aecd2; + } + +.list-group-item-success { + color: #1d9d74; + background-color: #f1f9f7; +} + +a.list-group-item-success { + color: #1d9d74; +} + + a.list-group-item-success .list-group-item-heading { + color: inherit; + } + + a.list-group-item-success:hover, + a.list-group-item-success:focus { + color: #1d9d74; + background-color: #e0f1ec; + } + + a.list-group-item-success.active, + a.list-group-item-success.active:hover, + a.list-group-item-success.active:focus { + color: #fff; + background-color: #1d9d74; + border-color: #1d9d74; + } + +.list-group-item-info { + color: #007dbc; + background-color: #f0f9ff; +} + +a.list-group-item-info { + color: #007dbc; +} + + a.list-group-item-info .list-group-item-heading { + color: inherit; + } + + a.list-group-item-info:hover, + a.list-group-item-info:focus { + color: #007dbc; + background-color: #d7efff; + } + + a.list-group-item-info.active, + a.list-group-item-info.active:hover, + a.list-group-item-info.active:focus { + color: #fff; + background-color: #007dbc; + border-color: #007dbc; + } + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning { + color: #8a6d3b; +} + + a.list-group-item-warning .list-group-item-heading { + color: inherit; + } + + a.list-group-item-warning:hover, + a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; + } + + a.list-group-item-warning.active, + a.list-group-item-warning.active:hover, + a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; + } + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger { + color: #a94442; +} + + a.list-group-item-danger .list-group-item-heading { + color: inherit; + } + + a.list-group-item-danger:hover, + a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; + } + + a.list-group-item-danger.active, + a.list-group-item-danger.active:hover, + a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; + } + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + + .panel-heading > .dropdown .dropdown-toggle { + color: inherit; + } + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} + + .panel-title > a { + color: inherit; + } + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel > .list-group { + margin-bottom: 0; +} + + .panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; + } + + .panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + + .panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.list-group + .panel-footer { + border-top-width: 0; +} + +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} + + .panel > .table:first-child, + .panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + + .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, + .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, + .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, + .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, + .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, + .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, + .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, + .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; + } + + .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, + .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, + .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, + .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, + .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, + .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, + .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, + .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; + } + + .panel > .table:last-child, + .panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + + .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, + .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, + .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, + .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, + .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, + .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, + .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, + .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; + } + + .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, + .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, + .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, + .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, + .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, + .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, + .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, + .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; + } + +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #dddddd; +} + +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} + +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} + + .panel > .table-bordered > thead > tr > th:first-child, + .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, + .panel > .table-bordered > tbody > tr > th:first-child, + .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, + .panel > .table-bordered > tfoot > tr > th:first-child, + .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .panel > .table-bordered > thead > tr > td:first-child, + .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, + .panel > .table-bordered > tbody > tr > td:first-child, + .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, + .panel > .table-bordered > tfoot > tr > td:first-child, + .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .panel > .table-bordered > thead > tr > th:last-child, + .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, + .panel > .table-bordered > tbody > tr > th:last-child, + .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, + .panel > .table-bordered > tfoot > tr > th:last-child, + .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .panel > .table-bordered > thead > tr > td:last-child, + .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, + .panel > .table-bordered > tbody > tr > td:last-child, + .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, + .panel > .table-bordered > tfoot > tr > td:last-child, + .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .panel > .table-bordered > thead > tr:first-child > td, + .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, + .panel > .table-bordered > tbody > tr:first-child > td, + .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, + .panel > .table-bordered > thead > tr:first-child > th, + .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, + .panel > .table-bordered > tbody > tr:first-child > th, + .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; + } + + .panel > .table-bordered > tbody > tr:last-child > td, + .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, + .panel > .table-bordered > tfoot > tr:last-child > td, + .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, + .panel > .table-bordered > tbody > tr:last-child > th, + .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, + .panel > .table-bordered > tfoot > tr:last-child > th, + .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; + } + +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} + +.panel-group { + margin-bottom: 20px; +} + + .panel-group .panel { + margin-bottom: 0; + border-radius: 4px; + } + + .panel-group .panel + .panel { + margin-top: 5px; + } + + .panel-group .panel-heading { + border-bottom: 0; + } + + .panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #dddddd; + } + + .panel-group .panel-footer { + border-top: 0; + } + + .panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; + } + +.panel-default { + border-color: #dddddd; +} + + .panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; + } + + .panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; + } + + .panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; + } + + .panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; + } + +.panel-primary { + border-color: #428bca; +} + + .panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; + } + + .panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; + } + + .panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #ffffff; + } + + .panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; + } + +.panel-success { + border-color: #e0f1e9; +} + + .panel-success > .panel-heading { + color: #1d9d74; + background-color: #f1f9f7; + border-color: #e0f1e9; + } + + .panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #e0f1e9; + } + + .panel-success > .panel-heading .badge { + color: #f1f9f7; + background-color: #1d9d74; + } + + .panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #e0f1e9; + } + +.panel-info { + border-color: #ccf3ff; +} + + .panel-info > .panel-heading { + color: #007dbc; + background-color: #f0f9ff; + border-color: #ccf3ff; + } + + .panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ccf3ff; + } + + .panel-info > .panel-heading .badge { + color: #f0f9ff; + background-color: #007dbc; + } + + .panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ccf3ff; + } + +.panel-warning { + border-color: #faebcc; +} + + .panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; + } + + .panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; + } + + .panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; + } + + .panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; + } + +.panel-danger { + border-color: #ebccd1; +} + + .panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; + } + + .panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; + } + + .panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; + } + + .panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; + } + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} + + .embed-responsive .embed-responsive-item, + .embed-responsive iframe, + .embed-responsive embed, + .embed-responsive object { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; + } + + .embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; + } + + .embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; + } + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + + .well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); + } + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + + .close:hover, + .close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); + } + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} + + .modal.fade .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + } + + .modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + + .modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); + } + + .modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); + } + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} + + .modal-header .close { + margin-top: -2px; + } + +.modal-title { + margin: 0; + line-height: 1.42857143; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + + .modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; + } + + .modal-footer .btn-group .btn + .btn { + margin-left: -1px; + } + + .modal-footer .btn-block + .btn-block { + margin-left: 0; + } + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + + .modal-sm { + width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} + + .tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); + } + + .tooltip.top { + margin-top: -3px; + padding: 5px 0; + } + + .tooltip.right { + margin-left: 3px; + padding: 0 5px; + } + + .tooltip.bottom { + margin-top: 3px; + padding: 5px 0; + } + + .tooltip.left { + margin-left: -3px; + padding: 0 5px; + } + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} + +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #ffffff; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} + + .popover.top { + margin-top: -10px; + } + + .popover.right { + margin-left: 10px; + } + + .popover.bottom { + margin-top: 10px; + } + + .popover.left { + margin-left: -10px; + } + +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover > .arrow { + border-width: 11px; +} + + .popover > .arrow:after { + border-width: 10px; + content: ""; + } + +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} + + .popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; + } + +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} + + .popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; + } + +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} + + .popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; + } + +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} + + .popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; + } + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} + + .carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; + } + + .carousel-inner > .item > img, + .carousel-inner > .item > a > img { + line-height: 1; + } + + .carousel-inner > .active, + .carousel-inner > .next, + .carousel-inner > .prev { + display: block; + } + + .carousel-inner > .active { + left: 0; + } + + .carousel-inner > .next, + .carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; + } + + .carousel-inner > .next { + left: 100%; + } + + .carousel-inner > .prev { + left: -100%; + } + + .carousel-inner > .next.left, + .carousel-inner > .prev.right { + left: 0; + } + + .carousel-inner > .active.left { + left: -100%; + } + + .carousel-inner > .active.right { + left: 100%; + } + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 30px; + color: #157254; + text-align: center; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + + .carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + } + + .carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + } + + .carousel-control:hover, + .carousel-control:focus { + outline: 0; + color: #157254; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); + } + + .carousel-control .icon-prev, + .carousel-control .icon-next, + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + } + + .carousel-control .icon-prev, + .carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + + .carousel-control .icon-next, + .carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + } + + .carousel-control .icon-prev:before { + content: '\2039'; + } + + .carousel-control .icon-next:before { + content: '\203a'; + } + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} + + .carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + } + + .carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; + } + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + + .carousel-caption .btn { + text-shadow: none; + } + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} + +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +@-ms-viewport { + width: device-width; +} + +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + + table.visible-xs { + display: table; + } + + tr.visible-xs { + display: table-row !important; + } + + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + + table.visible-sm { + display: table; + } + + tr.visible-sm { + display: table-row !important; + } + + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + + table.visible-md { + display: table; + } + + tr.visible-md { + display: table-row !important; + } + + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + + table.visible-lg { + display: table; + } + + tr.visible-lg { + display: table-row !important; + } + + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + + table.visible-print { + display: table; + } + + tr.visible-print { + display: table-row !important; + } + + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} + +.navbar { + margin-bottom: 0; +} + +.navbar-inverse { + background-color: #1fa67a; +} + +.navbar-brand { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, sans-serif; + font-weight: 300; + font-size: 20px; +} + + .navbar-brand .fa-flag { + padding-right: 3px; + } + +.navbar-nav > li > a { + padding: 11px 10px 9px; +} + +.navbar-nav > li.dropdown-split-right > a { + padding-left: 7px; +} + +.navbar-nav > li.dropdown-split-left > a { + padding-right: 0; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #1b926c; +} + +.navbar-inverse .navbar-toggle { + color: #ffffff; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); + padding: 4px 10px; + margin-top: 5px; + margin-bottom: 5px; +} + + .navbar-inverse .navbar-toggle:hover { + background-color: #f4faf8; + border-color: #f4faf8; + color: #1d9d74; + text-shadow: 0 -1px 0 #ffffff; + } + +.navbar-nav.navbar-right:last-child { + margin-right: -10px; +} + +.btn { + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +.btn-default { + text-shadow: 0 1px 0 #fff; +} + +.btn-primary, +.btn-success, +.btn-warning, +.btn-danger, +.btn-info { + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); +} + +.jumbotron { + background-color: #1fa67a; + border-top: 1px solid #34a782; + border-bottom: 1px solid #1b926c; + margin-bottom: 0; + padding: 50px 0 40px; +} + + .jumbotron, + .jumbotron h1 { + color: #ffffff; + } + + .jumbotron h1 { + font-size: 80px; + letter-spacing: -2px; + line-height: 1; + text-shadow: 4px 3px 0px #1d9d74, 9px 8px 0px rgba(0, 0, 0, 0.15); + margin: 0 0 15px; + } + + .jumbotron p { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + color: #c7e7dc; + margin-top: 15px; + margin-bottom: 15px; + font-size: 24px; + line-height: 1.3; + font-weight: lighter; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); + } + +.jumbotron-icon { + padding: 30px 0 25px; + background-color: #eeeeee; + color: #222222; + border-bottom-color: #d1d1d1; + border-top-color: #f7f7f7; +} + + .jumbotron-icon, + .jumbotron-icon h1 { + text-shadow: 0 1px 0 #fff; + } + + .jumbotron-icon h1 { + color: #222222; + font-size: 30px; + margin-top: 22px; + } + + .jumbotron-icon h1 small { + letter-spacing: normal; + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + font-size: 14px; + margin-left: 20px; + } + + .jumbotron-icon .info-icons { + font-size: 14px; + } + + .jumbotron-icon .info-details { + float: left; + } + + .jumbotron-icon .info-details p { + margin: 25px 0; + font-weight: bold; + } + + .jumbotron-icon .info-details .dl-horizontal dt { + width: 80px; + } + + .jumbotron-icon .info-details .dl-horizontal dd { + margin-left: 95px; + } + + .jumbotron-icon .fa-2 { + font-size: 2em; + } + + .jumbotron-icon .fa-3 { + font-size: 4em; + } + + .jumbotron-icon .fa-4 { + font-size: 7em; + } + + .jumbotron-icon .fa-5 { + font-size: 12em; + } + + .jumbotron-icon .fa-6 { + font-size: 20em; + } + + .jumbotron-icon .fa-1, + .jumbotron-icon .fa-2, + .jumbotron-icon .fa-3, + .jumbotron-icon .fa-4, + .jumbotron-icon .fa-5, + .jumbotron-icon .fa-6 { + margin-right: 0.07142857em; + } + +.well-transparent { + background-color: transparent; +} + +.small-caps { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; +} + +#social-buttons { + padding: 22px 0 17px; + text-align: center; + background-color: #f5f5f5; + border-top: 1px solid #fff; + border-bottom: 1px solid #eee; +} + + #social-buttons ul.list-inline { + margin-bottom: 0; + } + +#icon-carousel { + margin-top: 5px; + font-size: 220px; + text-align: center; + line-height: 240px; + text-shadow: 0 2px 0 rgba(0, 0, 0, 0.15); +} + +.carousel-control { + top: 230px; + width: 30px; + height: 30px; + border-width: 0; + font-size: 30px; + line-height: 25px; + left: 114px; +} + + .carousel-control.right { + left: auto; + right: 114px; + } + + .carousel-control.right, + .carousel-control.left { + background-image: none; + filter: none; + } + +.jumbotron-carousel { + padding-top: 40px; +} + + .jumbotron-carousel .btn { + margin-top: 22px; + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + font-size: 24px; + padding: 17px 30px; + color: #ffffff; + border-color: #c7e7dc; + background-color: transparent; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); + } + + .jumbotron-carousel .btn:hover { + background-color: #f4faf8; + border-color: #f4faf8; + color: #1d9d74; + text-shadow: 0 -1px 0 #ffffff; + } + + .jumbotron-carousel .shameless-self-promotion { + margin-top: 22px; + font-size: 14px; + line-height: 1.42857143; + color: #a5d8c7; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); + } + + .jumbotron-carousel .shameless-self-promotion a { + color: #d2ebe3; + border-bottom: dotted 1px #8eceba; + } + + .jumbotron-carousel .shameless-self-promotion a:hover { + color: #ffffff; + text-decoration: none; + border-bottom: solid 1px #ffffff; + } + +.stripe-ad { + margin-bottom: 22px; +} + + .stripe-ad .lead { + padding-top: 5px; + } + +.fontawesome-icon-list { + margin-top: 22px; +} + + .fontawesome-icon-list .fa-hover a { + display: block; + color: #222222; + line-height: 32px; + height: 32px; + padding-left: 10px; + border-radius: 4px; + } + + .fontawesome-icon-list .fa-hover a .fa { + width: 32px; + font-size: 14px; + display: inline-block; + text-align: right; + margin-right: 10px; + } + + .fontawesome-icon-list .fa-hover a:hover { + background-color: #1d9d74; + color: #ffffff; + text-decoration: none; + } + + .fontawesome-icon-list .fa-hover a:hover .fa { + font-size: 28px; + vertical-align: -6px; + } + + .fontawesome-icon-list .fa-hover a:hover .text-muted { + color: #bbe2d5; + } + +.feature-list .col-md-4 { + margin-bottom: 22px; +} + +.feature-list h4 .fa:before { + vertical-align: -10%; + font-size: 28px; + display: inline-block; + width: 1.07142857em; + text-align: center; + margin-right: 5px; +} + +.rating { + unicode-bidi: bidi-override; + direction: rtl; + font-size: 30px; +} + + .rating span.star { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + display: inline-block; + } + + .rating span.star:hover { + cursor: pointer; + } + + .rating span.star:before { + content: "\f006"; + padding-right: 5px; + color: #777777; + } + + .rating span.star:hover:before, + .rating span.star:hover ~ span.star:before { + content: "\f005"; + color: #e3cf7a; + } + +#footer { + background-color: #1fa67a; + border-top: 1px solid #1b926c; + color: #a5d8c7; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); +} + + #footer a { + color: #d2ebe3; + border-bottom: dotted 1px #a5d8c7; + } + + #footer a:hover { + color: #ffffff; + text-decoration: none; + border-bottom: solid 1px #ffffff; + } + + #footer .container { + padding-top: 40px; + } + + #footer .project { + margin-top: 10px; + } + +html, +body { + height: 100%; +} + +#wrap { + min-height: 100%; + height: auto !important; + height: 100%; +} + +#wrap { + margin: 0 auto -251px; + /*padding: 0 0 311px;*/ +} + +#footer { + height: 185px; +} + +.padding-none { + padding: 0px !important; +} + +.padding { + padding: 10px !important; +} + +.padding-sm { + padding: 5px !important; +} + +.padding-lg { + padding: 22px !important; +} + +.padding-top-none { + padding-top: 0px !important; +} + +.padding-top { + padding-top: 10px !important; +} + +.padding-top-sm { + padding-top: 5px !important; +} + +.padding-top-lg { + padding-top: 22px !important; +} + +.padding-right-none { + padding-right: 0px !important; +} + +.padding-right { + padding-right: 10px !important; +} + +.padding-right-sm { + padding-right: 5px !important; +} + +.padding-right-lg { + padding-right: 22px !important; +} + +.padding-bottom-none { + padding-bottom: 0px !important; +} + +.padding-bottom { + padding-bottom: 10px !important; +} + +.padding-bottom-sm { + padding-bottom: 5px !important; +} + +.padding-bottom-lg { + padding-bottom: 22px !important; +} + +.padding-left-none { + padding-left: 0px !important; +} + +.padding-left { + padding-left: 10px !important; +} + +.padding-left-sm { + padding-left: 5px !important; +} + +.padding-left-lg { + padding-left: 22px !important; +} + +.margin-none { + margin: 0px !important; +} + +.margin { + margin: 10px !important; +} + +.margin-sm { + margin: 5px !important; +} + +.margin-lg { + margin: 22px !important; +} + +.margin-top-none { + margin-top: 0px !important; +} + +.margin-top { + margin-top: 10px !important; +} + +.margin-top-lg { + margin-top: 22px !important; +} + +.margin-top-sm { + margin-top: 5px !important; +} + +.margin-right-none { + margin-right: 0px !important; +} + +.margin-right { + margin-right: 10px !important; +} + +.margin-right-lg { + margin-right: 22px !important; +} + +.margin-right-sm { + margin-right: 5px !important; +} + +.margin-bottom-none { + margin-bottom: 0px !important; +} + +.margin-bottom { + margin-bottom: 10px !important; +} + +.margin-bottom-lg { + margin-bottom: 22px !important; +} + +.margin-bottom-sm { + margin-bottom: 5px !important; +} + +.margin-left-none { + margin-left: 0px !important; +} + +.margin-left { + margin-left: 10px !important; +} + +.margin-left-lg { + margin-left: 22px !important; +} + +.margin-left-sm { + margin-left: 5px !important; +} + +.border-left-none { + border-left: none !important; +} + +.border-right-none { + border-right: none !important; +} + +.border-bottom-none { + border-bottom: none !important; +} + +.border-top-none { + border-top: none !important; +} + +.display-block { + display: block; +} + +.no-underline:hover { + text-decoration: none; +} + +.clickable { + cursor: pointer; +} + +.strong { + font-weight: bold; +} + +.em { + font-style: italic; +} + +.small { + font-size: 85%; +} + +.no-link { + color: #333333; +} + +.text-sans-serif { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; +} + +.text-ellipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-default { + font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, 'sans-serif'; + font-size: 14px; + line-height: 1.42857143; + font-weight: normal; +} + +.text-hilite { + color: #21b384; +} + + .text-hilite:hover { + color: #198764; + text-decoration: underline; + } + +.text-strike { + text-decoration: line-through; +} + +.text-upper { + text-transform: uppercase; +} + +.text-lower { + text-transform: lowercase; +} + +.jumbotron, +#footer { + position: relative; +} + + .jumbotron:after, + .navbar-inverse:after, + #footer:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: .15; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAABGdBTUEAALGPC/xhBQAAAaRQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMalYaAAAAIx0Uk5TlhaTG6WwoBqyCx6sopscnacgq5cfmR2UkZwhlY4li5IjIiYpjYmQJ4iPJIyHhooog4WBfoSCKyx9gCotf3wuMjEwezN6L3l4NnI1dXd0djc4NHNwOXFvO2o8bjptPWw+aD9mQGtEZWlnQUJDRmNiZEVfYWBLXVxIV0lHTk9KXlJWWFlVVFtNTFpTUVCkyaWwAAAfsklEQVQYGQXBg6JsWYIg0Bh7WlVdVjrz5bN17Ygbto5t2977p3utXhseb5cOkcQlMSvlwcK1KN+kXuZFtaw8UKWGHiFOjR+F43DFHF/nyis8PMwvzc7QdS2qjnykhpWRQjtpLDpQTFUQhrP972J3uIwc3/WaHJF73IT3EHONyQqnTVQIxOGvt7JaF3K5XOM7dyDI1VQv1c0xv3T0lzAQ86iJX3cdkg41x1QCweVIKUGI1bm1XhO1cR+L/oaFys6joNLUSBbURm9bwK9yySmu+6MqCJ24VqSu5NofdmOlOGCp1ci5Ob8EObh89le18MLgAWbH/9ZUCR47kyJmcIUArlxGN2Ugzj/bN6fR9qJeC61niRtk516BTEF7QdOmB60uSSfTQ0TwrYLTiq/CFPBE+2AKf2eiGYkrWyQy44z/1CRs35oHxM4U8tBPNVTAGu4X0dq/5tcZs2TlDO7VVRolsSLyzO9t/aNh2FVvlJJQfLpVr0/qY6o37q0Yo3PxdGKWsibL6V8HxMcYGUev9C5qlrp/cDR1Llr8F8r4oToXReV3Rt8KA32bZwZ/4+38bTq5nqTPOmBjNJ8QK8KWQK8uxdyoNFxrle3Snen1ioqasN3qh+JNVdbGiid0Sbl2/TKfJQ+/cQuOMKw4mtKRN9TBhR1RtF67xTGJGQ8DnuKCq9mhpJgLJWqg9VfSb49kr3W0+DWjGaSSw0vQaapjdCyJoHEQykmbfVGDR90u41jAHpbuNfywT+mt6XpgJFeH4i4U0xRxm6Zu/rHSQv/+9+sG4rSnLJ2zrm75c33ohrzas+eJeBA8D2DBSWPsVGOIq5AsfEzUuNWD52wCbXh2XQyZENdvxrWzzCQk04N7slLfLyj+QZfCsixMS05gcNQwxfJZlkBiPZgC7zhVCjMOtV4weO994s/mVikag3ZnelFcdKVUb2kWMoJ1075OTiv4Wq/wlvvAnMFCN6Ic7MIujcr8b/NDQpaGbX78QR/GUFaTeQIK3OGkm9yxClW8FZvGsXs1Tpcz5WtNSdlDZbV6nglu6YZIfXoucMX99Me+/mYqMBEm4X2YhzRrhMbdL2i7YhttHXwOqWSb55ITmIXscoZzj76Kfa8rrZ0Ay/vhUKErGPfKlBRSyJfcWIidwlfoKnAevyxpUGpikcWZqnz6nDvZIxjGULjGmV+E5QscXHwX4I6MYHYsbEJgxPY6I3Y865Wwfl00a6TQHNPNF2d3k1Ztql4EciNK8/SVIf1+7sxkj5RM23h3nipnfF4U3X62c7VIVQk/twKoDTVwWB+nvlfLCa1bj3J+V3gn6SRqj4EqWOtwjYebhAph8NjHX+Db9mq75Hofkv9fsnrmLc+Cxthn1njneZNPdgfO4hnRGppVsqT/tAn2le397e3fN9E9ovzlL9e5DhdsFPACnKb5gYEZ7zDbrH5EufdFxxs/yxqX+DlXmmMq1HrLKs/z5H/pKj3NLfzhuHCCqg8liB0+vNGn7Sf+tChHoxPOP4cu/362qAtC0kNra8dVyzLP4Mgpf/Y3yAOeb5IyqSMRCXy3+mN2v9Flta4Yn1vBXimEZV/V1I3fRlU8Ed0q0/LQaNn2DOJlB45M5X0aajILyO0k9FJZA2o5ie+V1VwDGdgFebF1vrlT4ry4zQcedHIKBXkeVhsvkxsT8jW97S073GTf22Wm2yBN2TRDVaEldhl15MfHpDOllhIavGPJ+OB5Yje71SlEkGVz/6VEBT+fV9lFh9Od2xxK+a5ry0lU3yjQtcRPiCDSF0smi6c9ZDqbZso6afHA8L3Apl0LJJ7whAq3tY6+ZwkxYArATbCsYfe8U+9KNLtlW98Mbacuu7NR6NhOFzOcQKsA55FD15JuR7xsCCmuI7IO7qlDjxlLRmy02bpLxfoBncftvmGHUu6SYDOK+srqYwklx5dIjqUroTweFRrmQZZGiE5Z2eK2iXy/rD8d/+l5kcylD0Yht2mrdNmqDdgKURofrZWefrnJsVQsWnL48VGOY+AhZTf3qJpc6qhxYWyCNHrLCMnqPBgMulqj5CjaGH4/VajHzFIOK18eaVcu0XC/Cp148YVasVmi4zO9rTMjKhSAZmVvZ3l7bBVVvuQI0rP6XTudT24ZBVosD5PrR8nFMVEKPIJ/3K0qvq3TlG7ZFqkfWccRrGr7t5nGZleYH69t+yLaBKwEj7LtTHZRJkiDN9Kdt0J6BlOZeZh71maSHj4FikgDqcRmsUOsy3ZJhqFehZjNYgrd8utMC3KjYCOTICBQ7MQUILu3aDdxeVFOCNpVUcIX76jEKN9nSWYQ2PNTN3vdC8Qydo/dEWRi6OqW1ZxTNcYrgpeb09MHTZ3njxofDbBQtb6SDnL99QtwslhXy8jqLD8STMoTsbYdTxWwqSXJVmTAp0rZComyl7i6QY6a0iOaVIeBh0Zga4TzYmHN4hYY3Yw2jrNMdLya+rhdUHXkyJnXVfW+qQqbKCq7P8jbs82yX+OrVvKc31RBNPv6WNUiq32h13InyQrUcnlty4rTA3Z6N2nkK6NR+E91Q9tCtg19amUtZFPlF+GzJHj3Ew5TnswP6sFQNo0NK9aPNB1nBpGGRALr1PiN10oUIWfvVgXc1Mgd9ehTEh2MqiwtF1rvq9WMhZAeGx9okMJrWfPEkGkbpAuM6zRXEjcr/DY111+hvsdjXEawhkkcy6n0/z3urraN3gBE1+q2epXs+WTbTVMz44yqw/YZKBq8C2uT74W6H5MlaNZN6ibfZ8W+UCpSoaVl51TVo414nslTf5d3RC23QXov+keW33UzjztU0XFwjWAPrjZOQ1JrePpttq2T2AA89Yh+sVGtqmvPzoOm9+Adb2M1qAP0WHIcSPwkVkM+/pIqwZcWoI69l0UOo8LB2g7t9Tv3Vi3fMNdkZOWthWeVAe17/l9qUvWn60ZQm62fZtZLuVx+hCVRthL+Muadnt9VW91Zog+XeQXDQvNayj+JWgMDO1FMA104HNr7p4YZTs65g+PmYTMPSOMgWw44DVJF2qYv5WXfMCjj3WDXPSTC4rFsuyYfT3Y7Sl2YZaNoveCawhtnnR9MrfXS7GgTxLHrQvfndBk8GyTdKDDRZcYQiv1iL0nQ1tXtbUFxQdDySZRaEXYN+BtDeFt48raTnC6v7lrJqqyqTCuptqGjxv1el2eOOi/XUl6HVeXfyDZfJYVzWUbBIgpC6g1gaxgSIwqLpsJoYfnCGOyVg+ElTZfY98e7Tqq+P/DVpOqcZcIpbR5vfDLd3d5slkyodpDL7nuWrYcvdCOVeeXLg8n73rhuW+NaKOS4UjXHaaiSoW9e2RcL9fMnGvJck56aF3WAWOs8XWFVh3VQKBbG9PisEjmoWyy+ydXEtkmvwFu1nSFzuicrZbJT/1HCg5w3+MwWFFwyjbH26I0Tc6NJ20OXqEZKkeWjb2ceG7s0HTZ8Z0mLpEZhM9tZV5kEsM1macd4p47U9p1ppbLDpX57NPLlo5D0Bls7cNTPNpOgaxuD3cd/M0Mh0qrBFyPyqZd9o4FpHjQZpzhq0NXN3MtayO1duT3th/CC3ZY5cXnH7JWsKY15pFX4i8DeLuJ7PeJ3VhXtvKnS88Lvihto5BF0I2Dw2QF05HazFyxddvOH95draC9Ykfxr7uYyLKO62Yq//rYbCFYJjwJ3F7GHQiuOjAtJjbvk9ZQ1oiOKQCplBUtFjgodM07PqXd2/i6uujasmXTUNkE2NoESofFpdQxYC1Cla/hR0KjrrPqldoN8RJnjYvcQ3nmFATeVQ8c3L10K3u9RoVb2RbBCuIpLOe4Kb/xFdsSbtidaxfTO1O/L3Sqgp1HSiTHIVpKZZUX6hvnMXVSBV7hamutlu/VMikQ//HUi9+FWkpfJ8p6uxmJV1Cr/cJ5btknmghJbOTG35fUVXlgpzeyEpleuvU4/3iED30sCQ94PfrhPHSflunakZn2HKhh6HizLefn3ksOyCze6BfSwav6BgHi7AQtekhN2VGL+b09tw8jI+oqMcNDZTTxdPSd/qOafWHjS+9rmka+VpmC1rKOyCZwI9R/exB3NpeX/2XdjwY2ZQ7NuvrhXthcFxmfKlB+d6PiFVTcLfCmFo/jYDgKnDvYGaCYl49g1vCOHEPslDZJ4S30oux6cYQgox+mbtaaQsK2SomOSjYu0cGl2d1hQDmvNMy35ofp5SAQlS1Jd3XjWY+S/TKg2dD652JYjItaMg3m35fMdsSu7u01d123Z/kmxGTJlesmqCFxXn6n8bpcFEsE8EhwV2Yf7yjRqjC3moDUzr7yJVjnkE/vLgjJsKTPh1rltI75F72/xirBylLxyJS573DJZ6ThJQSuTokUK33+ItnXPCkoBVaJb3+FDw8OurIrjm5qbXq21n3zfRP3IOJJ3asbzU9/FVElp2KRUY4mCA5894qXzDj4qmXPgknUbcQcHzZmbom2ybBmqNZfav7Yw7RWGjFoRy4V1EYK2pXmE1pKUpokwPVCspoACXvIHRbtHNe2mbrCFvIOB437CUsaxk/ejf/2/mN9WtqfGfEWWgzQimpaDGsZXQl03cXTg6rL3zIy8K7FQaMOg0BjcA1H039QE5dJSLFV27t0XaDn9YX9QixC4puw9PEUTtpMf28y6DA3ol/xVQborN+2YnKxgg+Pawk+n/7ZOG7SCkyba5D0n5/Jnnk/HkV2wRWwfwYt3YTuxkn1pzvJMBGxM04w/3taOPYu9ff2DJZ7fBZXuHoO8DUCXJjtdeuDW8kqoxduypFa7MXAm1yPiUkrD1WB4HPaeJ7kp1Y5naGEgOKioLDM/IA19kxzSPPWkue8f9MYb8zfKzFKrKHSMhcQGAoQFMUyk9WvyYG6sBtzvw4EUnmPr2ze3bDztQONFUg0lO1LL3g80L0KtpPP4nK+xIo7q4NMozilxiwQGY1zc5T50ilRjMju+A1/r7N0wofxC2H1uMD11+L4hZyeP5/9u6nIjX20amyz05d2B2ueHcW757vJ3xHlv/D4z0AW4w99+VSop2VnZUtFAURmUMn0r4ofoHg+3bKoaKQlOK7rBfRavPwf17Gem8/ysQynXTvuQ2JdobPfnokPR/l1z/2Wf5PdiIMRJoMDeJfKNwMiU6JoKdHGzs9Qm1U34BbEx5GwUuXvmj5/CWu4gPB0xFyko4BhGVFtbfF12WKx+Bv/9mPhc48MA5Ll6jE72OVON6vFlxoXr268rtmB6MtprC39GGm6UdYcMCK6P4j/9mBKuY+60Yrs/0W/dztduFSdN932r3ej6dqG+uao23pd4kbIEGjsQfjPzn39k/VI2D/cL46Gv49v/mb8CuwwKftmT7rIQrXhXDmusMzvYlHGqz1wDg3/+aP0r5/kAWAvXPm4O0TJ4FcLZYkXYtrkOHXFDxSklG01Mj+rV0nqdQs7rAptbGcUg3Vd32tfQfp0Bmu9V7Gs8aUUxT8FwUeTV/kPu/dLJVVOzlO+Rqc18lknhD4NFHjasnIOpVobONhqTVRHV6p4efQDB9jYBlXZ9XBxfaYStOVhYFKoZFoeJ5yU8/rRXSQEGbQYWwgTGKvy4v072XqWo2ryFSudx8Of3J4sBmo8gP3fDhoClaNnATI9erIzx6h0H0gbbBxOc1fQs2DpwmPgF0RTxW4WKC5KzpVLrSedYV6rQvmqYWXIdMhH0z/LM9GOTAi0wvbKJLQJ7p4b3gUuzh3dpwG0s2GKH89Rso4NXRMmkfMRZbuRQQK0gDAt9G6TfZ+3Bp0lylA3Vspcw8syxSV+3qwSh6RUNbjxNkbiv/wyU1Y/JC/aPOv/4OL8gjarztqbD3dNTO0E5GUuCGiRSbl810vV1qt2I/FIUjxn2UTqdp0RNw1YH4mGeSGUvva6ZLsuiKm/2m4Of2nkHUSjM89JYXpEAOM/XElkoJIZFWHPVCfwTJPIgiremFnfDDp+YXfd4EO+PpbNZPhnV07oypat/Iiu7L9uauJoksdSrwq7RynZ9VhjA8qvaOR+X0n5d/+XsfNyyxy/7/xxfIlXjiPxV0t1IFLzcK12n4iu21d+JGX0kR+heWRNCVY2hQ1ZyYR4OyNmpXXzatE1zb4gF0fvVfoNVF9Z3lPOPT5KcVEFhbLTs5KEdoORurGYcYp+9O0Sv4peGU6MQT3lGk38+LDqyKeLSfD/5x2b/LxvWLnbQMk0sLHkGgtdh5we1knMAr1tJ7Xmry7uVyvWfLHA9hZ0WTwSf3aINPZp7TrN8y5tMUmxNxhRCPHDfJmI+H4fJDtRwWKAtKZNGE3pyEjNZ61NmmcqWhQtYsmKZutGyrXAJQ7uXFrv8A8Na47oObg0/216aUz0AwZ3i5vnj9nOOfTuXedNP9FVUrpsH82+2mIq/GiFU4jH4qaFxyTaVTACM2fongb/ErQE1tyNvtKtDO9U+h4nZw0JOrTdysbvDiLnHacLBrC+FV3mYvf1nGNYqBDjJJOaZZdWwZZUX2jVWKp05ttKzRs6Q/wJpsitdOTGsGrdvSQ3e1cqt081eSdeVjVLN4wUV9KQqEbISaTopru4VW8qlRhPPp/R0qtGqPsDl/gYkYodqgicd1Y2IG/jXx1hyvZuSX2htu1KtZkDe1XVDgQjuRPebUB/IqJUWTXcq8KHvAKtn+G3DtgilAZfNJl+tHDE1uXSeTPmohUluVGFf5FWnTty8+GnrRi7X5S7qLgrow2x+ZN8WMr2GlJh5XrKQbtYomRw/Y+a9+fGWd8QkeFr4jz1C3dsO0mqO7lnZgo04WGVpcXY3HPApZXmfrC8qt8iT5g128NLAjfXQgMKvbcMbfTQax0Q0WtUV75+Wvu5ELodhF2+7SyjyoRjFj2gfJCmm9KokrA4J08dqVLeEUdiVIzEczC8tRDzbe27Wr67tB0zRuwokD6n+lo0vjhpo9nYFuKX5QuILNjFor7zZ5lGHzhp42l/Y3b+7UDSjZBuUTZpJPcxS8qs1P1eZo0ZMAa8tj/IXvBPkxzpZa7Lg/oN5NFkt5j2zwaIms84KiohaPnKE49NWzLTTvXi3szrbiY3EPHn4c6ciJsqnljA4xldB39K9sBcFzyBC5BKIVxFE6/rRaWrWi4ykIjZuEajL68gw85TWyFZ9ilbvzuNCJ5QaIZ6nCfstuZ8d97umloSvnJFffD8zk1mq3afkh4GkjzwYfE3BEuvR3oUmX1S4HyStriBxrobRijsIJvMBeJau9P1a3YWaVQI0hg6o10CTO+TRl28syU/dkYd81f7chuBI3aJNSpTfyaNTUu7mqwVMim5yJ4B91os3hndehiP2C1HMwJufLt+a3ut8CoUZ9W350oljULvbX1SyYPg2FSDHsF5+ld8buR1ceDmHLfRdZBgdQLzXE/E+iZsTK5GCT1xXiIpINMXmp5jvpTdoOcxVrzCizDkX9aJTlgAhHXEoU0h5oTedbdEWb3nVh9IeP/0AC616ro5MZjDBPgNmWaM//qe0Fmv0kloLPk28i3+7XO36Yp1kGdPm+denVt7D6RHxBmlUU36IabbxluBRFktte0s7lvWV2pk3Z2GYelWbIsGfvL9zhEM0zt7lM9lcyEb4Y5zqUdRtPrdboKeub9KhECkje3rrnXN1wVCFdi71VnuwqaNcuLEsR5cwsYtosVHauaXUSaCYzr7grb9p4cv3wXP4Ak/q/Z8v/dQlrpXiO1oNJ9e8zrQfcDIXM81pXQdHMkPSBZCpnSq1yb1+ZeylXsPw/cPD6xvHWsNgCXERB0rafOt6bt7t7IHU1g5Lf5fk8QXNrXio6/9vGq9oHxQeEF2qXVbSt10EPKi82YYRY9LXYw2QqV+oyUI6dSFUKZj1DnbzRXG3hkSYHPQjKaOorUsdBw8tW+XMbg7uG8zxd3cW4NQsF3Ug7uNGL5jc+gN6HpqWeRy6WSdsVnt65uWAiwNlWDL7JPgZjcPkhf+r4B57qpmc3gnOzozM5k/TVTwL2tIS418X5eUmciP66sabjF6EPJp+b4kejrZVkp+0cYVIhE96dcJX0GNdTZbtJI8goUVh67KZ39WB1lVZBD9uHL/Xucfio79U7DDi5BPvF0SK40gvEG4+d4vB82CnWk08ccuYr6V2ls8RQ4Ac7hzfFSpa5daMZG8let59pIBSPNHuRkyp2sTZewClY9f9jym9AU/QXpW4dZqU2e1cR8LwEYndfWM2hV5P1tlcbn8+mQRFUpDZ96CV/6hK9J90Z6ElMzdfEnzV5LUTWEXWrUsAiOumitThkuAxC+77LOlkhkJpM9/rcRJi7GMOCeOBU4cdBp4FuSxbKZ6DzNaz+YPanyUuY8yDsu0sNoh16K44T0j7dHZxCysOds1J8M3qwNJ6mB0AJRBz5lUgji8b5/NBEym7aHpw2prPunQRckfDRvSY8VerSzZllUEXrA4BUk6DTG85VVAJvK22afONWEBlMFtBjHsO1DHFDYb+291tslhzU1IQxbasB8vIAI9MzCAX9Wo5vOipHaHWRtcQR/lAWsoafPINiFNEIhyTG5toHS3i0rY1FC9P61VnR9bV0G3dbplbV65cxSwC+bZtkyA3y5dv6PxtuymlhAlsd6vdcTVsi9TrVXI28pG9nZwsQXcs/WIa750ilhUxMkNm2XXs2Y8O2v+o51qiXQ8Vv+zjD3XmZfrdRs4kwuVXSCXTbver95vmOschGSrUhBnvAB/VuF6Rxa7ptXi5OBx00hflKonHi5RaPdDpJSzF7StHdcpnrDbtt9J4lww5VeECPhLsMBGq9+m95ASpFaMLNkTcxxQwqfq8VYLjeg3jwnY16YZORWRfN1bPK7SnsEmGESNQCrr7yJDEko7el9cgSMIgTUqhxFt3o95UWZiaWg1btxpFKEvqLQBoiIKcFnC3zczCbIagrlzX7fLURO2v6X4GA587rPDetvOLyCqHc6Yww2YcbG8X1aRYVCfVMdzTzM2aRqSZtnI4Lv6zdUKusbp9gf7h19TUZD/AC6JpJCaqSwF0H2roiTO0P/mWtiH/4L/rbj58rYnl9Gsv9H1vXia6XCd7sY0jzjtrKBCrH2aRSnDDsGMMfYcY7UN78avbBbqwS1IYgbij4IPq450Ud02hBFAeYVIFf/Q1Bc72B2LXn16OdipfhaXc9mItqdhEK0WxXZOVXzK+wYRPSMb1jLU10wVa10gPbIc6Owau5zKkr1e2GzZdB/+2VjJWV0PTYMIR7eL7YXuu1CEWsrFsDECmWYZbCshJ1JP0jmqobSRAcgDMHfJkOzZD95dq7ZQpS30XAImJ6qzslN1f/o7aHOrsWCaBSPjBnndHrK7f8hIfdHVk47rpfezvqrfOIyQ4HoXG0/tMrcVcjHsZOvHXnZ/V5XPQgDgMHoS0MKBbeC+MyVguwzkjy1XeDkT23uwOoTSrqpdKs2Nf/whUpvNKXrZnt5v3//UA6dPJCgtxOyrtD50ZfGfOoaEcpxTWO0lvX0zEzV2+n1i+GESda1iAZRuLgKCFVfckTh+9xi3T5g46wshk+iKR1Tre9pOFuQ8w72Q8qdj4L9ul5ePuljWHFw8qz8YM80cOorQlBLLWg8UBcMnP7Ndq9/Ug4kYWr2JzlO7atGkwbyGhSZU4QdMxydoa00Ze1MaVE2JadrtSJwGsfbrl7F0Y2YT3GdwMi3anTMMtD10ldys0b8Oovu1Fqi+Qj2yAOJaPRZrVepMVCBGVimkM8x6KArsu/Pd+ReLvS9df2OoJPffNwNaUB7Mfq7Etv9h3eZWiPjlAOSpaOBzn5KbuRZ3ZzqLQE42wZz6S3dr53KAOZtD5Cd/eLvpktUmePrphRxe2WuUL+62ySxKiWNQxAJHT5xXOU0eVDl2fHyoj0dV1nQn0l1EEKDH9cOs8z2bCA4w/n7EcleleT7aJTcV6jCmO8CO57r7fU/NJ6c8NM9WwMI8zstNVEuThtf0UcFVHiLKslx6uBcnkOHy2zLC4i+XyXOA/ez91G/M+W6f01br6VRU+/qWTIr1b7HsuXNnq2sBkpmnsA6EjYtGV6zrI6yxKyk3Ddqpbu447FTtDN0zrTE3B8L54PhXyB9aqTr3C52OtchdowMax3Uo2Q5370vt0vtCzojBTRwM9/eO0UGQRO5YHq1Nb2s9BlEHNRQ/oRtPKu/CiYBecIle1FAvZ8NUYkDy28ZHoEi/R9ZOGgvmju1FqX/M5P49uDWoPfJP6Js3uDX06qdeqZPaqzYPv73ztSe1eScFg9kCE4cMd+4WoYgTDQqPgExPNYqmSPLiKPn+LlnDT2V16zFKVDCBpzx+htzmWVhSXNTDJB9UHcmbYVqE8UFXwObMJvifnjDL9WOGaWeRsW4UEh0hHNvbvJm3/IKzF1WmWwsJMxer4kvnzWxBGmzkfzjIb/NDxCbcLuC6bujbJ41O0dVqhlY73zQoEjqHnsEQekqKzejcmAHEiEkHz7zsgatb0kH3pmoPgEk0St2AmKYip3MFk9V5Nm7q47sj8T8mIOTjTRt2LLBDp9UVFdI7Pa+p1ozeChH3WIQcar05/j8d2FhZqz1Q3kYMGQiHbLV2i1HEfw6qprmjfyGk+MI9Z3sjM2H+lg2a+q6V79RBx4qZeQi8xXOWnMsfu2tqxyqUuecL3+5ijd0F3Ff+14xx3RJSreZz2JOvYVjeyWLyCdnAp5AKRPLu/FWi9PgLhsQ9ja3bphs0nCimW6GkXEz6XFfbeFMTZxczcBwg4aQz7qDTLsv1s0VzZV+089PVDpMBF7LutaT32frEKnZSzEG40dq62Huqh8NyDBIXJv8tOa31DuRLhk7Byn+j9MByMC7Jd5EtzvXCksA0etm6TbcaQX2RzojFLZpiFebI8qMVyxaddkrvkzv4Pt7iFz9PXmP4AAAAASUVORK5CYII=); + background-image: none\9; + } + + .jumbotron .container, + .navbar-inverse .container, + #footer .container { + position: relative; + z-index: 2; + } + +.jumbotron-icon:after { + opacity: .1; +} + +.black-tie { + background-color: #222222; + color: #fff; + padding: 30px 0; +} + + .black-tie .tagline { + font-weight: 200; + font-size: 21px; + line-height: 45px; + } + +#fusionads { + float: right; + width: 300px; + margin-left: 30px; +} + + #fusionads .fusion-img { + float: left; + padding-right: 10px; + } + + #fusionads .fusion-poweredby { + color: #777777; + margin-top: 2px; + font-size: 12px; + display: block; + } + +.vertical-ad #fusionads { + float: none; + width: 130px; + margin-left: 0; +} + + .vertical-ad #fusionads .fusion-img { + float: none; + display: block; + padding-right: 0; + padding-bottom: 10px; + } + +div.bsap { + margin-bottom: 20px; +} + + div.bsap a { + display: inline-block !important; + border-bottom: inherit !important; + } + + div.bsap a.adhere { + background: inherit !important; + border: 1px solid #ccc !important; + } + + div.bsap a.adhere:hover { + background: #198563 !important; + } + +@media (min-width: 1200px) { + #icon-carousel { + font-size: 240px; + line-height: 260px; + margin-top: 22px; + } + + .carousel-control { + top: 245px; + width: 30px; + height: 30px; + font-size: 40px; + line-height: 35px; + left: 143px; + } + + .carousel-control.right { + right: 143px; + } + + .jumbotron-ad { + padding: 50px 0; + } + + .jumbotron-ad h1 { + margin-top: 25px; + font-size: 90px; + } + + .jumbotron-ad p { + font-size: 28px; + margin: 35px 0 20px; + } + + .jumbotron-carousel { + padding: 50px 0; + } + + .jumbotron-carousel h1 { + font-size: 100px; + } + + .jumbotron-carousel p { + font-size: 32px; + margin: 20px 0; + } + + .jumbotron-carousel .btn-large { + font-size: 30px; + padding: 21px 35px; + } + + .stripe-ad .lead { + padding-top: 0; + } + + .lead { + font-size: 26px; + line-height: 36px; + } + + .black-tie .tagline { + font-size: 24px; + line-height: 45px; + } + + .hide-lg { + display: none; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hide-md { + display: none; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + #icon-carousel { + font-size: 200px; + line-height: 220px; + } + + .carousel-control { + top: 210px; + width: 30px; + height: 30px; + left: 78px; + } + + .carousel-control.right { + right: 78px; + } + + .jumbotron-carousel { + padding: 50px 0; + } + + .jumbotron-carousel h1 { + font-size: 65px; + } + + .jumbotron-carousel p { + font-size: 23px; + } + + .jumbotron-carousel .shameless-self-promotion { + font-size: 12px; + } + + .jumbotron-ad p { + font-size: 24px; + } + + .jumbotron-icon h1 small { + display: block; + margin-top: 15px; + margin-left: 0; + line-height: 20px; + } + + .stripe-ad .lead { + margin: 0; + padding-top: 0; + font-size: 19px; + } + + .black-tie .tagline { + font-size: 18px; + line-height: 22px; + } + + #wrap { + margin: 0 auto -271px; + padding: 0 0 331px; + } + + #footer { + height: 185px; + } + + .hide-sm { + display: none; + } +} + +@media (max-width: 767px) { + #icon-carousel { + font-size: 180px; + line-height: 200px; + width: 280px; + margin: 30px auto 0; + } + + .carousel-control { + top: 40%; + width: 44px; + height: 44px; + font-size: 44px; + line-height: 44px; + left: -7px; + } + + .carousel-control.right { + right: -7px; + } + + .jumbotron-carousel h1 { + font-size: 58px; + } + + .jumbotron-carousel p { + font-size: 24px; + } + + .jumbotron-carousel .btn-large { + font-size: 20px; + padding: 14px 26px; + } + + .jumbotron-carousel .shameless-self-promotion { + font-size: 12px; + } + + .jumbotron-ad h1 { + font-size: 39px; + } + + .jumbotron-ad p { + font-size: 20px; + margin-bottom: 20px; + } + + .jumbotron-icon .fa-1, + .jumbotron-icon .fa-2, + .jumbotron-icon .fa-3, + .jumbotron-icon .fa-4, + .jumbotron-icon .fa-5, + .jumbotron-icon .fa-6 { + margin-right: 0; + } + + .jumbotron-icon .fa-6 { + font-size: 16em; + } + + .jumbotron-icon h1 small { + display: block; + margin-top: 15px; + margin-left: 0; + line-height: 20px; + } + + .stripe-ad .lead { + margin-top: 22px; + padding: 0; + } + + #fusionads { + float: none; + display: block; + margin-left: 0; + } + + #fusionads:before, + #fusionads:after { + content: " "; + display: table; + } + + #fusionads:after { + clear: both; + } + + #fusionads:before, + #fusionads:after { + content: " "; + display: table; + } + + #fusionads:after { + clear: both; + } + + .vertical-ad #fusionads { + width: 300px; + } + + .vertical-ad #fusionads .fusion-img { + float: left; + padding-right: 10px; + } + + .black-tie .tagline { + font-size: 18px; + line-height: 22px; + margin-bottom: 15px; + } + + #wrap { + margin: 0 auto -331px; + padding: 0 0 391px; + } + + #footer { + height: 185px; + } + + .hide-xs { + display: none; + } +} + +/*gsgundam modified*/ +::selection { + background-color: #ec494e; + color: #FFF; +} + +::-moz-selection { + background-color: #ec494e; + color: #FFF; +} + +.dashgame { + margin-top: 8px; +} + +.baidushare { + margin: 12px auto 0; +} + + .baidushare .bdsharebuttonbox { + margin-left: 10px !important; + } diff --git a/public/lib/fonts/font-awesome/css/font-awesome.min.css b/public/lib/fonts/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/public/lib/fonts/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/public/lib/fonts/font-awesome/fonts/FontAwesome.otf b/public/lib/fonts/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000..401ec0f Binary files /dev/null and b/public/lib/fonts/font-awesome/fonts/FontAwesome.otf differ diff --git a/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.eot b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.eot differ diff --git a/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.svg b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.ttf b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.ttf differ diff --git a/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff differ diff --git a/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff2 b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/public/lib/fonts/font-awesome/fonts/fontawesome-webfont.woff2 differ diff --git a/public/lib/fonts/marsgis/demo.css b/public/lib/fonts/marsgis/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/public/lib/fonts/marsgis/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/public/lib/fonts/marsgis/demo_index.html b/public/lib/fonts/marsgis/demo_index.html new file mode 100644 index 0000000..337d21b --- /dev/null +++ b/public/lib/fonts/marsgis/demo_index.html @@ -0,0 +1,1550 @@ + + + + + IconFont Demo + + + + + + + + + + + +
    +

    + +
    +
    +
      + +
    • + +
      circle
      +
      &#xe600;
      +
    • + +
    • + +
      视角书签
      +
      &#xe626;
      +
    • + +
    • + +
      方量分析
      +
      &#xe624;
      +
    • + +
    • + +
      工具栏
      +
      &#xe627;
      +
    • + +
    • + +
      _高度差
      +
      &#xe628;
      +
    • + +
    • + +
      空间距离
      +
      &#xe629;
      +
    • + +
    • + +
      面积
      +
      &#xe62a;
      +
    • + +
    • + +
      角度测量
      +
      &#xe62b;
      +
    • + +
    • + +
      +
      &#xe62c;
      +
    • + +
    • + +
      模型剖切
      +
      &#xe62d;
      +
    • + +
    • + +
      模型压平
      +
      &#xe62e;
      +
    • + +
    • + +
      全屏
      +
      &#xe630;
      +
    • + +
    • + +
      剖面
      +
      &#xe631;
      +
    • + +
    • + +
      模型裁剪
      +
      &#xe632;
      +
    • + +
    • + +
      日照分析
      +
      &#xe633;
      +
    • + +
    • + +
      日期
      +
      &#xe636;
      +
    • + +
    • + +
      分享
      +
      &#xe637;
      +
    • + +
    • + +
      素材库
      +
      &#xe638;
      +
    • + +
    • + +
      三角测量
      +
      &#xe63a;
      +
    • + +
    • + +
      _mars_text
      +
      &#xe63f;
      +
    • + +
    • + +
      一键关闭
      +
      &#xe641;
      +
    • + +
    • + +
      比例尺
      +
      &#xe649;
      +
    • + +
    • + +
      坐标测量
      +
      &#xe64a;
      +
    • + +
    • + +
      贴地距离
      +
      &#xe64c;
      +
    • + +
    • + +
      地形展示
      +
      &#xe64d;
      +
    • + +
    • + +
      叠加
      +
      &#xe64f;
      +
    • + +
    • + +
      poi搜索
      +
      &#xe650;
      +
    • + +
    • + +
      通视分析
      +
      &#xe651;
      +
    • + +
    • + +
      导航球
      +
      &#xe653;
      +
    • + +
    • + +
      快捷键
      +
      &#xe656;
      +
    • + +
    • + +
      二三位切换
      +
      &#xe657;
      +
    • + +
    • + +
      坐标定位
      +
      &#xe659;
      +
    • + +
    • + +
      地图纠错
      +
      &#xe65a;
      +
    • + +
    • + +
      底图
      +
      &#xe65b;
      +
    • + +
    • + +
      飞行漫游
      +
      &#xe65d;
      +
    • + +
    • + +
      定位
      +
      &#xe65e;
      +
    • + +
    • + +
      点标记
      +
      &#xe660;
      +
    • + +
    • + +
      贴地矩形
      +
      &#xe661;
      +
    • + +
    • + +
      地图输出
      +
      &#xe662;
      +
    • + +
    • + +
      贴地面
      +
      &#xe663;
      +
    • + +
    • + +
      线
      +
      &#xe664;
      +
    • + +
    • + +
      +
      &#xe666;
      +
    • + +
    • + +
      图上量算
      +
      &#xe668;
      +
    • + +
    • + +
      图层
      +
      &#xe669;
      +
    • + +
    • + +
      上下
      +
      &#xe66a;
      +
    • + +
    • + +
      图上标绘
      +
      &#xe66b;
      +
    • + +
    • + +
      批量单体化
      +
      &#xe66d;
      +
    • + +
    • + +
      分析工具
      +
      &#xe65c;
      +
    • + +
    • + +
      规划方案比选
      +
      &#xe66e;
      +
    • + +
    • + +
      全景数据分析
      +
      &#xe66f;
      +
    • + +
    • + +
      模型新增
      +
      &#xe670;
      +
    • + +
    • + +
      扩散模型
      +
      &#xe671;
      +
    • + +
    • + +
      连通性分析
      +
      &#xe672;
      +
    • + +
    • + +
      数据转换
      +
      &#xe673;
      +
    • + +
    • + +
      缓冲分析
      +
      &#xe674;
      +
    • + +
    • + +
      叠置分析
      +
      &#xe675;
      +
    • + +
    • + +
      分屏对比
      +
      &#xe667;
      +
    • + +
    • + +
      空间分析
      +
      &#xe676;
      +
    • + +
    • + +
      可视域
      +
      &#xe677;
      +
    • + +
    • + +
      模型开挖
      +
      &#xe67a;
      +
    • + +
    +
    +

    Unicode 引用

    +
    + +

    Unicode 是字体在网页端最原始的应用方式,特点是:

    +
      +
    • 兼容性最好,支持 IE6+,及所有现代浏览器。
    • +
    • 支持按字体的方式去动态调整图标大小,颜色等等。
    • +
    • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
    • +
    +
    +

    注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

    +
    +

    Unicode 使用步骤如下:

    +

    第一步:拷贝项目下面生成的 @font-face

    +
    @font-face {
    +  font-family: 'marsgis';
    +  src: url('iconfont.eot');
    +  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
    +      url('iconfont.woff2') format('woff2'),
    +      url('iconfont.woff') format('woff'),
    +      url('iconfont.ttf') format('truetype'),
    +      url('iconfont.svg#marsgis') format('svg');
    +}
    +
    +

    第二步:定义使用 iconfont 的样式

    +
    .marsgis {
    +  font-family: "marsgis" !important;
    +  font-size: 16px;
    +  font-style: normal;
    +  -webkit-font-smoothing: antialiased;
    +  -moz-osx-font-smoothing: grayscale;
    +}
    +
    +

    第三步:挑选相应图标并获取字体编码,应用于页面

    +
    +<span class="marsgis">&#x33;</span>
    +
    +
    +

    "marsgis" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

    +
    +
    +
    +
    +
      + +
    • + +
      + circle +
      +
      .marsgis-circle1 +
      +
    • + +
    • + +
      + 视角书签 +
      +
      .marsgis-sjsq +
      +
    • + +
    • + +
      + 方量分析 +
      +
      .marsgis-flfx +
      +
    • + +
    • + +
      + 工具栏 +
      +
      .marsgis-gjl +
      +
    • + +
    • + +
      + _高度差 +
      +
      .marsgis-gdc +
      +
    • + +
    • + +
      + 空间距离 +
      +
      .marsgis-kjjl +
      +
    • + +
    • + +
      + 面积 +
      +
      .marsgis-area +
      +
    • + +
    • + +
      + 角度测量 +
      +
      .marsgis-jdcl +
      +
    • + +
    • + +
      + 面 +
      +
      .marsgis-mian +
      +
    • + +
    • + +
      + 模型剖切 +
      +
      .marsgis-mxpq +
      +
    • + +
    • + +
      + 模型压平 +
      +
      .marsgis-mxyp +
      +
    • + +
    • + +
      + 全屏 +
      +
      .marsgis-qp +
      +
    • + +
    • + +
      + 剖面 +
      +
      .marsgis-pm +
      +
    • + +
    • + +
      + 模型裁剪 +
      +
      .marsgis-mxcj +
      +
    • + +
    • + +
      + 日照分析 +
      +
      .marsgis-rzfx +
      +
    • + +
    • + +
      + 日期 +
      +
      .marsgis-riqi +
      +
    • + +
    • + +
      + 分享 +
      +
      .marsgis-share +
      +
    • + +
    • + +
      + 素材库 +
      +
      .marsgis-sck +
      +
    • + +
    • + +
      + 三角测量 +
      +
      .marsgis-sanjiao +
      +
    • + +
    • + +
      + _mars_text +
      +
      .marsgis-text +
      +
    • + +
    • + +
      + 一键关闭 +
      +
      .marsgis-yjgb +
      +
    • + +
    • + +
      + 比例尺 +
      +
      .marsgis-bilic +
      +
    • + +
    • + +
      + 坐标测量 +
      +
      .marsgis-zbcl +
      +
    • + +
    • + +
      + 贴地距离 +
      +
      .marsgis-_mars_dtjl +
      +
    • + +
    • + +
      + 地形展示 +
      +
      .marsgis-dxzs +
      +
    • + +
    • + +
      + 叠加 +
      +
      .marsgis-diejia +
      +
    • + +
    • + +
      + poi搜索 +
      +
      .marsgis-ss +
      +
    • + +
    • + +
      + 通视分析 +
      +
      .marsgis-tshifx +
      +
    • + +
    • + +
      + 导航球 +
      +
      .marsgis-dhq +
      +
    • + +
    • + +
      + 快捷键 +
      +
      .marsgis-kjj +
      +
    • + +
    • + +
      + 二三位切换 +
      +
      .marsgis-eswqh +
      +
    • + +
    • + +
      + 坐标定位 +
      +
      .marsgis-zbdw +
      +
    • + +
    • + +
      + 地图纠错 +
      +
      .marsgis-edit +
      +
    • + +
    • + +
      + 底图 +
      +
      .marsgis-map +
      +
    • + +
    • + +
      + 飞行漫游 +
      +
      .marsgis-fxmy +
      +
    • + +
    • + +
      + 定位 +
      +
      .marsgis-dingwei +
      +
    • + +
    • + +
      + 点标记 +
      +
      .marsgis-marker +
      +
    • + +
    • + +
      + 贴地矩形 +
      +
      .marsgis-extent +
      +
    • + +
    • + +
      + 地图输出 +
      +
      .marsgis-print +
      +
    • + +
    • + +
      + 贴地面 +
      +
      .marsgis-polygon +
      +
    • + +
    • + +
      + 线 +
      +
      .marsgis-polyline +
      +
    • + +
    • + +
      + 圆 +
      +
      .marsgis-circle +
      +
    • + +
    • + +
      + 图上量算 +
      +
      .marsgis-tsls +
      +
    • + +
    • + +
      + 图层 +
      +
      .marsgis-tc +
      +
    • + +
    • + +
      + 上下 +
      +
      .marsgis-updown +
      +
    • + +
    • + +
      + 图上标绘 +
      +
      .marsgis-tsbh +
      +
    • + +
    • + +
      + 批量单体化 +
      +
      .marsgis-dth +
      +
    • + +
    • + +
      + 分析工具 +
      +
      .marsgis-fxgj +
      +
    • + +
    • + +
      + 规划方案比选 +
      +
      .marsgis-ghfadb +
      +
    • + +
    • + +
      + 全景数据分析 +
      +
      .marsgis-qjsjdb +
      +
    • + +
    • + +
      + 模型新增 +
      +
      .marsgis-mxxz +
      +
    • + +
    • + +
      + 扩散模型 +
      +
      .marsgis-ksmx +
      +
    • + +
    • + +
      + 连通性分析 +
      +
      .marsgis-ltxfx +
      +
    • + +
    • + +
      + 数据转换 +
      +
      .marsgis-sjzh +
      +
    • + +
    • + +
      + 缓冲分析 +
      +
      .marsgis-hcfx +
      +
    • + +
    • + +
      + 叠置分析 +
      +
      .marsgis-dzfx +
      +
    • + +
    • + +
      + 分屏对比 +
      +
      .marsgis-jldb +
      +
    • + +
    • + +
      + 空间分析 +
      +
      .marsgis-kjfx +
      +
    • + +
    • + +
      + 可视域 +
      +
      .marsgis-keshiyu +
      +
    • + +
    • + +
      + 模型开挖 +
      +
      .marsgis-moxingkaiwa +
      +
    • + +
    +
    +

    font-class 引用

    +
    + +

    font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

    +

    与 Unicode 使用方式相比,具有如下特点:

    +
      +
    • 兼容性良好,支持 IE8+,及所有现代浏览器。
    • +
    • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
    • +
    • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
    • +
    • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
    • +
    +

    使用步骤如下:

    +

    第一步:引入项目下面生成的 fontclass 代码:

    +
    <link rel="stylesheet" href="./iconfont.css">
    +
    +

    第二步:挑选相应图标并获取类名,应用于页面:

    +
    <span class="marsgis marsgis-xxx"></span>
    +
    +
    +

    " + marsgis" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

    +
    +
    +
    +
    +
      + +
    • + +
      circle
      +
      #marsgis-circle1
      +
    • + +
    • + +
      视角书签
      +
      #marsgis-sjsq
      +
    • + +
    • + +
      方量分析
      +
      #marsgis-flfx
      +
    • + +
    • + +
      工具栏
      +
      #marsgis-gjl
      +
    • + +
    • + +
      _高度差
      +
      #marsgis-gdc
      +
    • + +
    • + +
      空间距离
      +
      #marsgis-kjjl
      +
    • + +
    • + +
      面积
      +
      #marsgis-area
      +
    • + +
    • + +
      角度测量
      +
      #marsgis-jdcl
      +
    • + +
    • + +
      +
      #marsgis-mian
      +
    • + +
    • + +
      模型剖切
      +
      #marsgis-mxpq
      +
    • + +
    • + +
      模型压平
      +
      #marsgis-mxyp
      +
    • + +
    • + +
      全屏
      +
      #marsgis-qp
      +
    • + +
    • + +
      剖面
      +
      #marsgis-pm
      +
    • + +
    • + +
      模型裁剪
      +
      #marsgis-mxcj
      +
    • + +
    • + +
      日照分析
      +
      #marsgis-rzfx
      +
    • + +
    • + +
      日期
      +
      #marsgis-riqi
      +
    • + +
    • + +
      分享
      +
      #marsgis-share
      +
    • + +
    • + +
      素材库
      +
      #marsgis-sck
      +
    • + +
    • + +
      三角测量
      +
      #marsgis-sanjiao
      +
    • + +
    • + +
      _mars_text
      +
      #marsgis-text
      +
    • + +
    • + +
      一键关闭
      +
      #marsgis-yjgb
      +
    • + +
    • + +
      比例尺
      +
      #marsgis-bilic
      +
    • + +
    • + +
      坐标测量
      +
      #marsgis-zbcl
      +
    • + +
    • + +
      贴地距离
      +
      #marsgis-_mars_dtjl
      +
    • + +
    • + +
      地形展示
      +
      #marsgis-dxzs
      +
    • + +
    • + +
      叠加
      +
      #marsgis-diejia
      +
    • + +
    • + +
      poi搜索
      +
      #marsgis-ss
      +
    • + +
    • + +
      通视分析
      +
      #marsgis-tshifx
      +
    • + +
    • + +
      导航球
      +
      #marsgis-dhq
      +
    • + +
    • + +
      快捷键
      +
      #marsgis-kjj
      +
    • + +
    • + +
      二三位切换
      +
      #marsgis-eswqh
      +
    • + +
    • + +
      坐标定位
      +
      #marsgis-zbdw
      +
    • + +
    • + +
      地图纠错
      +
      #marsgis-edit
      +
    • + +
    • + +
      底图
      +
      #marsgis-map
      +
    • + +
    • + +
      飞行漫游
      +
      #marsgis-fxmy
      +
    • + +
    • + +
      定位
      +
      #marsgis-dingwei
      +
    • + +
    • + +
      点标记
      +
      #marsgis-marker
      +
    • + +
    • + +
      贴地矩形
      +
      #marsgis-extent
      +
    • + +
    • + +
      地图输出
      +
      #marsgis-print
      +
    • + +
    • + +
      贴地面
      +
      #marsgis-polygon
      +
    • + +
    • + +
      线
      +
      #marsgis-polyline
      +
    • + +
    • + +
      +
      #marsgis-circle
      +
    • + +
    • + +
      图上量算
      +
      #marsgis-tsls
      +
    • + +
    • + +
      图层
      +
      #marsgis-tc
      +
    • + +
    • + +
      上下
      +
      #marsgis-updown
      +
    • + +
    • + +
      图上标绘
      +
      #marsgis-tsbh
      +
    • + +
    • + +
      批量单体化
      +
      #marsgis-dth
      +
    • + +
    • + +
      分析工具
      +
      #marsgis-fxgj
      +
    • + +
    • + +
      规划方案比选
      +
      #marsgis-ghfadb
      +
    • + +
    • + +
      全景数据分析
      +
      #marsgis-qjsjdb
      +
    • + +
    • + +
      模型新增
      +
      #marsgis-mxxz
      +
    • + +
    • + +
      扩散模型
      +
      #marsgis-ksmx
      +
    • + +
    • + +
      连通性分析
      +
      #marsgis-ltxfx
      +
    • + +
    • + +
      数据转换
      +
      #marsgis-sjzh
      +
    • + +
    • + +
      缓冲分析
      +
      #marsgis-hcfx
      +
    • + +
    • + +
      叠置分析
      +
      #marsgis-dzfx
      +
    • + +
    • + +
      分屏对比
      +
      #marsgis-jldb
      +
    • + +
    • + +
      空间分析
      +
      #marsgis-kjfx
      +
    • + +
    • + +
      可视域
      +
      #marsgis-keshiyu
      +
    • + +
    • + +
      模型开挖
      +
      #marsgis-moxingkaiwa
      +
    • + +
    +
    +

    Symbol 引用

    +
    + +

    这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

    +
      +
    • 支持多色图标了,不再受单色限制。
    • +
    • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
    • +
    • 兼容性较差,支持 IE9+,及现代浏览器。
    • +
    • 浏览器渲染 SVG 的性能一般,还不如 png。
    • +
    +

    使用步骤如下:

    +

    第一步:引入项目下面生成的 symbol 代码:

    +
    <script src="./iconfont.js"></script>
    +
    +

    第二步:加入通用 CSS 代码(引入一次就行):

    +
    <style>
    +.icon {
    +  width: 1em;
    +  height: 1em;
    +  vertical-align: -0.15em;
    +  fill: currentColor;
    +  overflow: hidden;
    +}
    +</style>
    +
    +

    第三步:挑选相应图标并获取类名,应用于页面:

    +
    <svg class="icon" aria-hidden="true">
    +  <use xlink:href="#icon-xxx"></use>
    +</svg>
    +
    +
    +
    + +
    +
    + + + diff --git a/public/lib/fonts/marsgis/iconfont.css b/public/lib/fonts/marsgis/iconfont.css new file mode 100644 index 0000000..889e1d3 --- /dev/null +++ b/public/lib/fonts/marsgis/iconfont.css @@ -0,0 +1,257 @@ +@font-face {font-family: "marsgis"; + src: url('iconfont.eot?t=1578623101532'); /* IE9 */ + src: url('iconfont.eot?t=1578623101532#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAACVoAAsAAAAAQjQAACUaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCKMgrqZNN8ATYCJAOBdAt8AAQgBYRhB4NxG4U1ZQRsHABkb77doigblET2/1+THjJWxtxfZbSsMrVWj1f77WZKJl+FDvOGGlcbH8JkuPLNq4eYdMQPb6twQ6SVPo223w+1S0CTQCrQwT/iiiiwrC8IMcxQyqSAH/s275+ZYHaETkmUQCmE0pYBALcmMUS61WwhgZSGhBYgha7SgpSaSmjSqig1VCHCQaAH5KiWFiQiCEgNnMLhFaHbTyxYsGP9U1Qs9Yr3cpRT25Gswo4gLjhHAL97tbzadayCKXaR9ZG+0pdsBUiWA9e8ynhvwwUAAm47wKiZAI3ECMXNzWILrpvMyWQRwrTZbE4yyg4g1/mi+6k2K7hnc+fdEB8lrKi/DFkTob/0l+jMnMaAMd/IqkSQq/9Kmg/8j+jZ72gETGJaU/N0wBBA22vL/MLdpxiDUGky4xNfbYaDBZZS9+qoXtLjowbx/6aW1Np7vktpvk1H9fpPOiBhOIDMjOVdjcZN1jW5ZFfrS9FVjUviuVIaygUtTALDwiT7irRVumqnetM77ziAhQXxDmAQvRdAYaBkyrjQOjgoeRKAtg4OY86AbO+Q0iNFQERFwt9h556dgUVda4HmMxZNYc8nGxhn5rHRpHRhzhOHuIAoY8wMAhdQxGMj/IH/5Lsf/8cQgIlIAs+ef/72HS/QP2fV2ZMRIOs7O5jBFJ4xzWQyy2MAZE2fCUuyPhg0MLnVFxb9AtngcuHGG5+/jUKFi7ZZqmxypS8zy5wdp1v9BAp+YJRYiaS27uhzYZi+zLp6+98qIOK7rr8Im0iVwv8xLyQoLCIqJi4hKSUtIysnr6CopKyiqqauoamlraOrp29gaG9kbGJqZm5h6WFlbWNr5+Do5Ozi6ubu6eXNKADWL8PkBSvfCMDAIBCYIgiYEAxMEwLMEArMEgbMEQ7MEwEsEAksEgUsEQMsEwusEAesEg+skQSskwxskAJskgZskQ1skwvsUArsUgbsUQHsUwk4oApwSFXgiGrAMTWAE2oDp9QBzqgHnFMfuKABcElD4D2NgCsaA9c0BW5oBtzSHLijBXBPS+CB1sAjbYAftAWeaAc80x54oQPwSifgHZ2BD3QBPtIV+EQ34DPdgS/0AL7SE/hGL+A7vYGf9AF+0X8db+B3OMo/YDyArN9kp6J0EPq81QgUxUzTWjhVQ3n2smGLEp7wWOt4P2+yinqEInwWFBC0hVmUJOyCE45kRLWghnpsytF0u6l0By4k1UjUUgL3SF8ZdjrYLMtEVT9xEtxyFLqMOPR6IgyKQNVjd0bCZDqZ4MWlFHlhCPVlabG24jllCyzeSNjsTQ6TSnZC8VjSNluvmfxXrKxo8/E+JeQP2SOk2yrKSYLptRgOUShkLOVMlgzb9XSDD4QQMYZMenSYe2CF6GJIJpscqyw21IRedSCQmY5IlkgjfOkIzySRgTIrzEqpYxGNQK/fwypjFW5Uc4VzocRqqFpp18XY+paKddIJviZU1BBposfHxAU0PfKj09luGTlvaWq0rLCxjcY4VuWQRWLMsVKOPuKbwhJRGXyTh9+V/lep92WFdxGKCEJxafCUviP17HOiIjSG3q6E90LK3pUH8VDlPXlbGlD7i29kl/NANt7dVRp53EdDkMmlaYsgQbiAgED30o1OjdCTHC4ACcFEQVCmxcNlIaH41yPTi7qigb4mL1PpdGSLoSQtkem7V/A0Fmgsj3CCIDNUlZ33+6q0m38uM/PzIyG6uvj6++krXsSlKeNcQOGaPWWxPzQZJqEO64vO1CVnuhiujo/rmoktYqiwomWqaWXCYtA3KNSBLJAlodBcyYvTMFERND+m6kANdEgc/QrwygGF4YOdkj/XKt7VdAp1YmouCVpx44Ca1DMJ0zjDFtuYCKKn4zBkaUAYTvAeu4nrrjM7jxIdKEEwgEbtvHtgE0+nAI2gukPKLUk0WBORjAZ83ThLZY6EHom5JtZLM9VknTEykJpIzlAGSE7XA0ibYxSQ53yagsh1CueR2CNxkzsc57MpeMCopgDLNEpzM5Gmt6J0Rx51hNOeCwU6qIUUcAqAemYAJiwBfdR02loWgx3DT1rMw9ixLZZYtYMKckqWgNOgwN/IoFaH5nidNolNwfQeWYU0AXYKh+M5em1rLc9SGCdjD1XwXouEQpDLzLAfUdcYHLnUQsKJOA6ZnGMHAQXzCAYqYswQuq16BdVgkAWqIeBA2gaxgnJiHhYFybhkvBeOBjMkFmY5+taNtKkVfIRHKgVkUkWqyTc7RkWMTQ0ycFN1qZ3UKTaBzXg5l197AUTxdJFaAo+AMIUglHGTzh6X+kNG8Zfy52p+9M9N3+dahXWHylT0zLRlyNirKx1XpFDDN9QCsPKXDYggU6rIdplVddTnEHabQ3fUjJMTFgdRtVZQwDFOcJM7JdONcR1R6J5t35BXj2fRCZc9cyn/MjaP63eM6NLZw3G5+GVH8hZd9whhyv4aHokO6RqF3o6fjy1acc39P8vGsa4VhET4H8KLfF6O7b2ZUp2gobb0duFzr23e3fTEbnb85VUXWIqPEjWVFtXlbOS429OjUI+GQ8QArhJF+30DpWmUDp8sdofnJGlqhDPCsSYxbJvpFWOd7Wr2JwdIEJDZ5MwojSjNL6jnJUoEBSQ2CXN7MLjsKFy2nw7pBtHH62J5/1FV2AIrQ00DV67S6+cMTCX/UWYqpBQmTgyZV5+Gyay9gXrvpvHl/6aPrpCpm8fwesUpJsuzXmLGMzrsy2+xBjcFSWSGE/xF/Vo9osw0FuPVWljSfI3plvxksiono1D14oBmtOw8HWDv2TtFDY6BEGKLHAoh3tEygLZ8ixa2qcZAE2+MnipZYPSJUpdOhng7mHbr7iLoO4f5ymJGZ6ab5JlWxNupAXjqtJTIk/h9TzQfNNOhJ+KUU3MWkoEjcN1reE2ozd3K/zBiAyWBrsVpEnW2oPeHZRHwG85fylMj9uosnvwbGLhbev/7EnfRDTsUdPoYa3V2TTCG/9j6K4B2fbzZ2LOlUtsmzHpDmLVT3e4Hh4MhX/QcHw5XyFRzSS3ei2sZSKHKGI1yD51RilSWcDGHkgaCY5gl+Q6cvvgTU8dVQGXQTEYQFiVIqnNJpDg2oZJF8zcSHCyn2GWgTHMt8fnIaKs+upi2ExO4nRkgvijQsXcnL6Tgnw4P3j5VzAsLuDWL9qnSVUfq8AN32U1F0VUy7b1dc881V+YMOUs7zP4U2QuIL9z2lEZXGHqLwWu/YV+ZwIG5u0nVP3+M9jYkfcPdidN8sadMBHv2jNmWy84x4m/eEYHV9vcd1Rb5L9abvdC66h4HT075nzKyL6UDz0Cx7e/wSSCL1pYYirvzwkQwbW+dxKrv1hOaPMokU8gM8x1pthbXUg6yfUNqG9OuS0GIaqa1l9PuIFwPX+kQodbto2W3d3cSlgO2Gm1bcLUYVUK/xNlxaCjLifhKyMHKwJUL9YqLu0Y9jzjS5pqp7/F2R6duvpdc95Tsldh3FkL64khvzXDXZ/HDNemRnBaOTay877XR3sU5Z+XKY2EgV/pbFxTApv7xdx30ntEazrur7izpizj9byC1FzCEwbbW3yIzVG6tumMrnZc8XLEV0n0tDNzDS1OH69MPxx5KFeKXPy2yOaFXHQFyhqS3SAn2HYkgDD0FCadwtcbVZhqce16rS4CT1QVWvsnFkBb+MP9OYLZwpkMvA9uP+Scc8OK0EtdYU2JOxHG8iF/EHBslfuFL7ovnLPtClUHzBG9O1RZebzRN17VqaK83bTlQWnVp1ztIqAWkHHtGsTVl8eSezbEYSXCj1lBx3XKJZp+UcqRbV2tqVavjRv+U+6MK2ZxbHNEW/61OWa7PGsiOteWX394lcfNXvvvdZY3nLrr1jE76lo+S04yzqSTctOhzDP6qQ7zFXYtOlhUuKMJm0c0en/NkyRUbXBzRTHptbDF53zjhVxbu/qLoOWEPhWlN6DKyazHa02Ir55oJXv0Y9kAiOkfacDGqZmvK/WvAmxYFQZW0z1jyVlA4W1nYZO2GQ2l9ouziWGhwWmhxVpze/WOpVinaSVkrqlOLjXoE0qJaIpWgy1oHre7cvXJceNBdVxsSM6qnBR85qvddjTfOQNo54yhHc9Md1Y97/sqCd8Ar4wqDfkktAn5tS9Z7l+bTxaoFtgfL1fGQr4Tc+Cibd48A0nC67+MR8JxJNXVHF9BYuxIiGg/HuGZsXgxEthGNwkVRDM6FNDlX0GGb14JsU9LgN4edwqcZH9/y/r4/1/81+88vTihGd2C0S8z1Bq4vSj/49KQcvVINtUt8Li36eg0+FAYCretbY1fLUqV2qFKunizLNek86DmUK5JKDIVjTgeqGEXv8oCcpRaJmtt9gK2WNEZNNMfUkklsjRItotnX0uyLqq1djM6AKXjqUq8eXsqdv6zcZHWfXBE18Eooe+u0V8R5ZIqYAX8IQDyWsyCzXP5uqoePG4ii1mrOPbYQ4TxBm8NO+b2DmhsHRJz/M1Qz2iHSA9XCe5SxXavFT+A4CGAQE7VyBE69+mTR80hYQBLFmdkCWZxgOs2zQtYK/tCeE4idRZCWIxhmvRIe0O+g3Vw2htMyaqsAQ8N/vlqu1MrVWqUcGnspCCGPv+lR97nSXQCDGkG5XoXK99xnjQFDU8I8PXCntd5pBGoKhU5LXww6jRFu6EXYUPZRa6RxYigPXPlRnY2gSCn4sDbzsiPdWF3GGGcpWtFwgVLMSVxSi0O56Z36qdc+4c+Lsf2RfA5inL9X6TBY30d7dvOcIx3X7r7Qfxxcolo/LFCTSdArjMUnoZQytif47uLqfQjRa58CE9PbE8wEI2pDry0ZnGbL97qa+tDP4LWudfuymHjYecDpBNj35oZMjLqnX/bEvfVVOB4/wSTgQGdQEC9UdlrEFvAojiELu/OqKP2I0NRDtD5o+39OzkXGD23/yS/w21n0i9JPSd+PE8qsTPuXsZjgfmv5xFt36c3ugYvFmiz6Rod/3e83Aa1QlQbONI//OhH87sd+gp9a4sy88FVwEIouoq+KEc38gXBeeCs9lLn4dXb4HUL8wpqOGVf1SeGXEP3hQa/7d4i+Lnwe42Mp8luJgkU/NjBhsv4hWEGP1rvq882/R+zffjv3R8R+sfmTeqr2GMPj66VfuD5okAEBTocJSCEJIiJ4dAsVpWTDRIQQhcfgyuhrhuYlSISQkpgEJ2+NiBigTSIKpliHby7cbLp1YlyzdmjemT2F1XXcsg6Mg6FGT+9A64AkEDhotKjw7tSmLpW7VQ0Om5co8NW3BElNt25p6tw7emii+aSVVbS1uvpGs1XaoGKhydo6wmpK4RExeXNzz5qwqWLRc7E5Onqo2jqsZRDS5jceplL3YPX0ZLQcUOyQ09U6TfSwPvOYJnWqOhhrwK1W3UWZTNS4UO6eGGy2ta0/jSIIinK6YrAZsp3PgXfvhlFyKgb96FMEvotjweG0yHhJ0EFZDpSH9pZXuIp7S7YiQZ1otL2zfZSGs0Y005kVjRpO0KYwGEXjxt2cl0/79fED3c23SW8bwisqwhec3y/MxyvDr4UNYF4Lr7y7jxdOQBYKiwclq9nfhWq5KhkU7w5EXCRFtkW461PcKWyK26dP/0tMqqsHJclgOIxf6O2x6b/IqOTkAd/fqYM+6symNFpkd7uU+oCaNmojaXyvIqqUxqBraVT+ydrtb7bXvB0ZriwdHX7bnZGU7CagvVY9ZATqwUhMTLQvjeYbXaYmRBZo+ObQFarlWZhuIh/rOAiETQeFoPH8jZFxn/vXVQ10iA5e3uNisNmTUp417KTZBBVTT9KKac2aGzKHdyQsBFVtrCpsLyzUI6wSWsiq94CwqrdKADIV9iB+dffLceYh0sskn/H3KvJL0iHiUR9NteZLnB4n63BawvGruqv4sMAcqlKNg/s5D4d3ftf73nk4c5gZiABuXiouhuTFPJ68CCoqWu3poSrL422Fyo1vOzqo/r4Samcn5TczkySTxoZG4yTj0ARugsIq0gNY2l9nE8+zq7XZI+BJNi9sRlbxcdGyjdDgAfzqyH9v3/3xm+Izv1FYWjjFrl1+dza1nNxZxqdoZqbowNJSBJtMZvvtS3LLiMfhHWDF7t1+d8VzRU4C34LSU6dLWx4+DGOTSOww4NJppPNYK6fpdewGvwjXwjPLhLe6b0dG4tDOOZzInShvHS406O4SG3bVmRw7S26099dawQGjMl2cTHdVV6b3DiPDvpXJNHgrKygmD/tOT5b4HTtxsqVVozuXtaPJMAlYpjELCn73PrhwR+Kdwt69R3qJDcHPXwTfOHjjRnBtrR55587gBw+CgctC7Gf3+9hizCRGnnjf/TNvXmeFfjF57yyZ6EQABmEjkdx90cPdI8SjHV1+ZyU8tfSIxYWMj9F0FNOf45+tDp2JEFyshwX4Z3SNpmnbKYu8MCk1lZAYLiOmplPDnBAtpP7x/tLX+0pfAVcOj6jdaN6g3TUzc5mj5tyfme2CG8wbYAKs+v86uFGb46ZN0G4wb9XunJm5z1UujxVd2g36qARWSD+IEw1ZojaceF3X7MzUVc+DSKsFEyEVjfkpMm/UBtactXUNC4c13++qKuRyLEfr924U2O9K3HUkxjhP5pyd+332+I2OI13HNb5dLSn9UHTxZIzxgeh01GJPc+Jua3B5LUcs5iIOcY0DG6phIxxfMWf3EravH5tziX3Z9xU6YT2B1tXxogbeK/vfXr3Umd82nbo6+sRa3MFSFcmRFEvmGnPJMfPwT1QMLkN1qZXhwDhkLSYcRJCJRkOu4cAl1qj3ox+zSbEktrEDOZbsQP0spkyak6Nh0zzmiQxuaYFDkYFB/9YejoXC83LDiEG5ubGw3DwRysubs5o/ZOhYCslh4MDrmMJNrlr4WLdC2hqHWM4b+BjM1ZdRozjR1DJKOkeKC+BN0qvpk9aTGtUak+8Px1OjOVGA2/90gCuAaYE6TI0CDu+lxCXdWf204Ok6FW9YMje8NvwXTfIqAnQFBA4Lf5oec7U7IdIh2v3q1ASuhYYSCV25NgOEEPXS1h9O8bVa7wM2JUA+kLiicOWtlHgc5WsTQ0MXFsQIagDc6+nMXAq7d4NpU2HTWJ/N3Mo8b1fx+NdBv//8BvkhGWq9g6zz1VOUCuZU9UKPrl/MSPzrGe32R9rH2/Amnv8bfx4UDxzG+Cl1dSlKpdnZs2ZK2hjjws6df5w7dwEc7fZWQBOBFbzZWV7VanTEahXFVQEFmFXAe4LTW+Ho8uIEGOV/HBwN+O4pDEntFSzM2xQnhn3ghDjAs3q4XcJwT2mkwW993sLtMJfyrzN2P3TSYOPGziWTJfO2ERevKHaRV5Gqib5k95ZzkmR+6l9n0Si9nbAqe4s/kZ4upUod0tHotpHhfApwAl6zsgjsHCZS1i8T0y/chBC4sxb3m1YU+o6gYi3CNAjR1XlBFlM6yJHkqDYi1ZBKbMvKIuhI0KH/IIveny4grDGgkQqqNxHXGNLIqVn5RO1ZoHwxOYKi2Qxcr9uxgsvKQlhh7N/kFMwqL2MFs8N+YYdbsbw0mHFTCKustHvhv0x2ipjCNCErvHMf8eyZ/VK+8LSPRWOydHOOoinWz095tlnp7xd79vby9z9wNrXz10952xZz158rtzPYVtmF8hwKnN91iZkCqYAZcUTZ8fqRCCFTyhSIO4l7n698HxHwzikoig17LE4lFWLVFLVmobub1iB1UMvNrRB7iBrEKIOal2mq0aKa4DotN/fPXtIphw2jOTXcGuCemGuel3b94q8n9X3tTz/39WxvzaL5fZ2rZUU9z9ufuIbvUa3Uf6yj/1yX54Htg4DJM+8p52mXKZdp5/csmH2RdREOdKqKmSkuibYTmPPoRu7eRY4i3dDuAG8xQNiPHimFjx6FQyk7MSAIoZSCOB6Da6JHuXABsmXbRp8S4FZ9sUfX3zfp36Ng326Qw4t1J2i3auPHAvSUtRIB6If27gTbkqLddQPG9MacTnkkJ3o6ZEuuG9kaeUr2zCcmTOvb6gcX15/sbO0SdXdxbbliG6DvtllnHWzdA6wajJQ3ak9OaDeddzpvaDk1apczTKfQ/77JU5b97z8zKk0NuTMnJtYg1Alw9Qgn4Lc7KLOcgTMIhPcZ4BjQaefO8v363NJNnMHxvT54YU/dzqpddT14kViZwRTG0oNOKGkhgm19+w2slBlivOhEEa3C+aITeGELx+7+suCxC5X17zMYe6AcowcLY+0sDfb38WXaIRkZe+77+gUyG+fbTreTHey4VQoSdkBpz3uZ4SYk5PrHuQfrxAp9hcYvxz02hLaNnx0Wlr1NoIF38F7OCBDhxWN+sek2Gb8sObksO0QzHHyE+ICYZd5msQgfH73sPS1yj1WeyAjoqSv/tj6NsQy3E+bCMWWce11PAJJ6Qhk7b5kOgUH0QHhv2tmovqi1tCX2a1/kuchfXtQu1yYFeP2jCZidBUzoz5rwBqtj8bYB4RFQrFegXxxgPehm6281+NOgX6CXwRkDy6/sred9cJlaQHkvPfbiBT63QUHwh6bQZW9yD9n5xeriZkvqIVm8AKveiaDXz4PP3uWpOu7RmsP2EvT7z/X5efDYlV6q456tm2AW7MXv9xPg5z29YrTFQzPXDdeIvWPWz3+4KjKnS/hCw9DFV//jJAkM7ekSvbOLCRe3M6wy/ZRoUE6Qn1U2zv7IDqIACcLHSDRuK1Gh8ipMic9ZEZGoscpOL6W/VZZB+L8E/nywkhqf80ZEpF7dpIwT+9RmxV1nKZFgIv/edpxV1rL84vGP8xs9Y9ql8x+mh7XFXjH+4Se/0CX2r86Wc/l0yd93ln48xwDue5buhfArsfGlpfFYFT/kXvA9nioOW1aKjXdnumPjysoec69nro/HlpY5VPL+3pKaWhhZ4Z43Rqd5VNyYJq3wcI+KKgTehjt39PY2N385qXu9tXzDbd7BeWvxEBw6WZXqbwxYg/AxKsxD3Pa3VfYophX7UKvgbaW9ENgxv1fW4h5iGrEoa/2whmqD0I0sFNvwruIK3lUx7YD3BhfoMukGgpXnyo9++ts8c3IzaH2BV3WOqPA4VbQKl2bBOiqbOOPQoB9nJ+aWJyWVc5uFRlBuudhOP771tMP4tlFs63lnbctva/51hZejBR8EOlkmBwYmW241ZOjSnALjPChSqCPU4bjB2kUAYmIggaMcEAD+tg0+iHOINRMKzeKgAMsItsTTf/GQQNB40zOgvNtWkcDfwSxWKBx7aqGAh9SQQvsclm1ursmmnUMUanUVXLkhgbKl+7oJ2Oljn5rf46NM7XnxCSL80UYMI27WG0FsvkuAkNs9P/T6+P7osxOYXO/espniCFw7vbgUEYVLFpEJ6o/bL/gvv/QpABdy8glqwl18yRzQNmZcZmyRbQwICMIQiHh2SFzNetItTmcFYfBxtPM/xiUG2AiZPQtjaBxDQmKin1x90vgk3S/yNeIYcY0cFoDbz2Cv6e9Gvy8dmzaq7ngpHr97LNvcuhoOPbow+mNbwv89WG0bcP/wXS/2avDkluHW/w3fTMQ+/mIwHknn+K16R6Q/dyGDCL57HqfUySMZMpRGbhI9ZjnhM7sO5MYNpB3pIN+BHNmiobQT7ggCNtRE5ELplASKHModjfh5GpLPnNKhutW9IT4SnWqdUEK2JpH4LcjEjvesS6JLrCvswGRfvkgJyMviIbCecegq1qVGCnAN+aqZ/2MnbX5ZuTr9VTnw5Us0sHhhc6jjHEPZD75+jfp7burf7KnoioX9J4Y7KrJkwmp/OgEe74H9KN2FxzlkYDmfqI7BNvvAxee75nDY0Gow5F5mvnz3wTYOD7h2za1ZEbkT8h+6ZZcYkOIgJMHRbs+2KMbReo/c6SJfSvUDUHAm/7MHyNbXkiylaLV9YioiwyIVj6G2T5sf3zs+umTbca1xG7JepMLk45CYJ/5hSQJcaUl7HxKb2/toJt9zxKrd5PML+uoKugpKKZTSluchLS0rriRk/uef57HrJxFFTvGkSjlSque6jS5qmqmUXWSaRgOufLXYVCn2C+nW+dSd2H0qPmLfHsJNtDBEo0biFUzIv0YiJ7B9vYZ25TJuxwdskHnxzxnVwnXwVaPQETXhJ7x6ZPQ4uwb2z8Y5lmBEjf+JoMZFzqCAJzhjXAPVQ9eNw3g8FFm3p1ZqV9i+7enLejwgyKdP2VdB0MKNR8+L7As78nsPaqDveaHnDbZLh79iwOcBNCuWIFcV08l0+eDUQqqfY3KaHBXSi0pV1WJm+1YEgkedD0iJOUWkSD9j5Hg5pssQlav+ZP+CZGovevZmN5DeMQpsCFMyqZAhRF3wY59EAM8xx5Gbwd6Ldkb6/sGU8e4xybABzIJk5shZ1uMb9HVkLxKFzWJRtCyJ1AUihWRAJa4DPwh/ADDu7DkcBvwRbnZaeEt4W+CXjGpJI9FRvDV2V3r7qKZC4a0IG6qieoW3k1fS5NyWHlgW+hUZPsuj1bwb5a/w0FelFxqhKvy2+uZWfleYMkBsxwcHZ85qWh6P0+vpu+UkKdSK2xzzAB2yWwn0t67NHTPWoPhTAvC3zKH51hL5Cyqx37VWyO1o+ca9soOiQ0pFHwzYl2gE4Od/n15Cx+0emJ8n1BR2KV7bN1N0/r+cVIPL0NhZ23zF9KLdUmc/9gQwuL2FCPQBcYvC38tPsXMnXUjfeWKEbAAIvwx/5H88vJsHovz19ctL44EcLc20MGlYmkIvZRbWJbkpPiwOGCSGml2zhHm3fP59ZUQRSqowdU9eUbiScKIbdfohPNH/eFB2gXRmL3Cfu+hRoXP0443reKyZ4PnZTTgqgnSGUHd0SMeP+OxbtId4MTE8iIabwLlhX1oOvHcvnOOGycIiMDsp92IcBcfFSc36C6Wi0VGvjfbAW11JRIQ2/+JycByYzwQXotkgjZMGXCHYFURyIkFwqE54Bt84WpaYULDvwH595z91NNlVfQkpwkx71e9sK3zIv/mlu49j5mpWmutETov0H3/YAKI4UYANIS0iPjVgh3OFX77bnaTsx96gOIYZ2eeYkBKRwVf9tqhKfCXPMvYtZ5grTOeqJfG6fI0LF3U0aVayQ/NMOXMyPj56UayJA+oJ5rz0MCYzQz7BbGBOyOtaEv9In2CW4SVunYjfNMEaP25tWI2pKJNPYQMpOw04s+yhVRkj6dMz2qhvSbpbNMmcAA7dg8rlF0rlixf2e9+xWA7vmq15x84dTObl8f6dPQtkzVhVWe2zfezj76rnlcjKSOD8sRAC5Rfaby20L7bfnk+jufS49bofTbjrPRDv3Rvgstk+xznevS8hzw20r5DxGEORVMQIkiJdP3ejoXhcfokanKpVsxNKgz4hFLF03yBhe0gH6Q0Q8kD66QLUM/Dn6EwA5c1CDsFPjXza5MUQZWYKGRKjNh8jESMjM2RGROgpYtSfCT5O/fMrOoZOfvt2FwU9Ee+2xLJSDMo8PfPXx8fZ5FfZbLuUlcX+5PSJ3RoePjkRVBcwj8UMBxRvnJgPj2jIyM7IylrKXx+WKFvNzqJxohLVHtXPZ9bXJysL2AJHtYm6sXHceFxa2FkkJosxmFnzFp8uHTJOOlMuWcbvJkcZt/X1qo2lxkO9veNk4L36LP4NVk83i3hBaVbi33q7U4hNYa4aGtF7EhGm5kCsFxH0nmqGXlC5vxsAACCz8GuZJc0wb1CaRXi6CaEPdKTMVJm3yrFn4A+6p83hMEHYDEqeZtUAgMzBAVBHaJBN8xIyGDx1Bv4VIVitzr6yiS2E0POQuZnApnnSKkNkojEpO1NkFfoMScbJRdfEbd19HBbm+slU+hdgJLSHyCRMp/bp6oOZObgnX4alupo+0DnNLDXJyszokl2aUgJ2hM6cdgGxRf5l/vHAsaCYri1kjy+a+B/wD7vnBVWQlqsKFCAKAIAmgNOKEAC/upcld0Mf+p6p5+PvKoDjDrjdE7wHxhYMAMC9HAbAPwEGaOChm1I60iSkWEpeSHCUISFRjoRGrWdpADywn4UBWOAxCwfWAuH4eKANcgECIFQLAGANqmezIEACQxIcPSkh0fMSGl2cpQHo4NksDCCBf2bhQBSEDYgH5lACTrQGgkDx+c53MietcenhonWD/QvMHESDieiSP6jHnDhrYxdb/QkJmrrPYzFvT9J83XLkUU7nBiFkfm3ZgaSnLVF5p22lrA6eFjmeHmogCBSf9vD+KHPSfvRw0brB2bpfYOZwvxX2VqjeP2Co5fnx16cXvvTJksxWTTD6Ao03ejE0xxu2HPmHUQYEuCLzwqYOVkt6sgpWeX9Ge9Oy7Mm6VByaFADb8Ty6yQDQICgOTyB+O4x/BHxRoNKmA0IwgmI4QVI0w3K8IBJLpDK5QqlSa7Q6vcFoMlusNrvD6XJ7vD7/vJ8UbDLAq3TXK9NBb1fjwtUoybxzgYmu48eckoFFFInFrdTl4F4uVVqJGz/pWDv0xhpWHLqVfT2uXfpbF8mhyIxgI7Y7Mw0TBpTsmGR4+O9Vxr8i3YLajj4qBEHh0vtI3WLxprL1WjQ3QF+rlQ+vVgYK6RpFYXqL+01hMivgmIvpoY0F2CHRUBrm2reSw25yuiMrAyYY6+fHqId+ITnOReU17XKTvSqyuXkYNxqrhZrG6robuE6PbwfzHXMItNWM7+6wzMq1quzUXODz3unt5qGy3D4/xrwZU+kFruIE') format('woff2'), + url('iconfont.woff?t=1578623101532') format('woff'), + url('iconfont.ttf?t=1578623101532') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1578623101532#marsgis') format('svg'); /* iOS 4.1- */ +} + +.marsgis { + font-family: "marsgis" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.marsgis-circle1:before { + content: "\e600"; +} + +.marsgis-sjsq:before { + content: "\e626"; +} + +.marsgis-flfx:before { + content: "\e624"; +} + +.marsgis-gjl:before { + content: "\e627"; +} + +.marsgis-gdc:before { + content: "\e628"; +} + +.marsgis-kjjl:before { + content: "\e629"; +} + +.marsgis-area:before { + content: "\e62a"; +} + +.marsgis-jdcl:before { + content: "\e62b"; +} + +.marsgis-mian:before { + content: "\e62c"; +} + +.marsgis-mxpq:before { + content: "\e62d"; +} + +.marsgis-mxyp:before { + content: "\e62e"; +} + +.marsgis-qp:before { + content: "\e630"; +} + +.marsgis-pm:before { + content: "\e631"; +} + +.marsgis-mxcj:before { + content: "\e632"; +} + +.marsgis-rzfx:before { + content: "\e633"; +} + +.marsgis-riqi:before { + content: "\e636"; +} + +.marsgis-share:before { + content: "\e637"; +} + +.marsgis-sck:before { + content: "\e638"; +} + +.marsgis-sanjiao:before { + content: "\e63a"; +} + +.marsgis-text:before { + content: "\e63f"; +} + +.marsgis-yjgb:before { + content: "\e641"; +} + +.marsgis-bilic:before { + content: "\e649"; +} + +.marsgis-zbcl:before { + content: "\e64a"; +} + +.marsgis-_mars_dtjl:before { + content: "\e64c"; +} + +.marsgis-dxzs:before { + content: "\e64d"; +} + +.marsgis-diejia:before { + content: "\e64f"; +} + +.marsgis-ss:before { + content: "\e650"; +} + +.marsgis-tshifx:before { + content: "\e651"; +} + +.marsgis-dhq:before { + content: "\e653"; +} + +.marsgis-kjj:before { + content: "\e656"; +} + +.marsgis-eswqh:before { + content: "\e657"; +} + +.marsgis-zbdw:before { + content: "\e659"; +} + +.marsgis-edit:before { + content: "\e65a"; +} + +.marsgis-map:before { + content: "\e65b"; +} + +.marsgis-fxmy:before { + content: "\e65d"; +} + +.marsgis-dingwei:before { + content: "\e65e"; +} + +.marsgis-marker:before { + content: "\e660"; +} + +.marsgis-extent:before { + content: "\e661"; +} + +.marsgis-print:before { + content: "\e662"; +} + +.marsgis-polygon:before { + content: "\e663"; +} + +.marsgis-polyline:before { + content: "\e664"; +} + +.marsgis-circle:before { + content: "\e666"; +} + +.marsgis-tsls:before { + content: "\e668"; +} + +.marsgis-tc:before { + content: "\e669"; +} + +.marsgis-updown:before { + content: "\e66a"; +} + +.marsgis-tsbh:before { + content: "\e66b"; +} + +.marsgis-dth:before { + content: "\e66d"; +} + +.marsgis-fxgj:before { + content: "\e65c"; +} + +.marsgis-ghfadb:before { + content: "\e66e"; +} + +.marsgis-qjsjdb:before { + content: "\e66f"; +} + +.marsgis-mxxz:before { + content: "\e670"; +} + +.marsgis-ksmx:before { + content: "\e671"; +} + +.marsgis-ltxfx:before { + content: "\e672"; +} + +.marsgis-sjzh:before { + content: "\e673"; +} + +.marsgis-hcfx:before { + content: "\e674"; +} + +.marsgis-dzfx:before { + content: "\e675"; +} + +.marsgis-jldb:before { + content: "\e667"; +} + +.marsgis-kjfx:before { + content: "\e676"; +} + +.marsgis-keshiyu:before { + content: "\e677"; +} + +.marsgis-moxingkaiwa:before { + content: "\e67a"; +} + diff --git a/public/lib/fonts/marsgis/iconfont.eot b/public/lib/fonts/marsgis/iconfont.eot new file mode 100644 index 0000000..4e3a030 Binary files /dev/null and b/public/lib/fonts/marsgis/iconfont.eot differ diff --git a/public/lib/fonts/marsgis/iconfont.js b/public/lib/fonts/marsgis/iconfont.js new file mode 100644 index 0000000..6104229 --- /dev/null +++ b/public/lib/fonts/marsgis/iconfont.js @@ -0,0 +1 @@ +!function(a){var c,z='',h=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(h&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var h=function(){document.removeEventListener("DOMContentLoaded",h,!1),c()};document.addEventListener("DOMContentLoaded",h,!1)}else document.attachEvent&&(l=c,s=a.document,v=!1,(z=function(){try{s.documentElement.doScroll("left")}catch(c){return void setTimeout(z,50)}m()})(),s.onreadystatechange=function(){"complete"==s.readyState&&(s.onreadystatechange=null,m())});function m(){v||(v=!0,l())}var l,s,v,z}(function(){var c,h,m,l,s,v;(c=document.createElement("div")).innerHTML=z,z=null,(h=c.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",m=h,(l=document.body).firstChild?(s=m,(v=l.firstChild).parentNode.insertBefore(s,v)):l.appendChild(m))})}(window); \ No newline at end of file diff --git a/public/lib/fonts/marsgis/iconfont.json b/public/lib/fonts/marsgis/iconfont.json new file mode 100644 index 0000000..d0ab018 --- /dev/null +++ b/public/lib/fonts/marsgis/iconfont.json @@ -0,0 +1,429 @@ +{ + "id": "887615", + "name": "marsgis", + "font_family": "marsgis", + "css_prefix_text": "marsgis-", + "description": "火星科技marsgis地图相关字体图标库", + "glyphs": [ + { + "icon_id": "7277986", + "name": "circle", + "font_class": "circle1", + "unicode": "e600", + "unicode_decimal": 58880 + }, + { + "icon_id": "12590699", + "name": "视角书签", + "font_class": "sjsq", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "12590923", + "name": "方量分析", + "font_class": "flfx", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "12590925", + "name": "工具栏", + "font_class": "gjl", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "12590926", + "name": "_高度差", + "font_class": "gdc", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "12590927", + "name": "空间距离", + "font_class": "kjjl", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "12590928", + "name": "面积", + "font_class": "area", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "12590929", + "name": "角度测量", + "font_class": "jdcl", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "12590930", + "name": "面", + "font_class": "mian", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "12590931", + "name": "模型剖切", + "font_class": "mxpq", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "12590932", + "name": "模型压平", + "font_class": "mxyp", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "12590934", + "name": "全屏", + "font_class": "qp", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "12590935", + "name": "剖面", + "font_class": "pm", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "12590936", + "name": "模型裁剪", + "font_class": "mxcj", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "12590937", + "name": "日照分析", + "font_class": "rzfx", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "12590940", + "name": "日期", + "font_class": "riqi", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "12590941", + "name": "分享", + "font_class": "share", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "12590942", + "name": "素材库", + "font_class": "sck", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "12590944", + "name": "三角测量", + "font_class": "sanjiao", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "12590949", + "name": "_mars_text", + "font_class": "text", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "12590951", + "name": "一键关闭", + "font_class": "yjgb", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "12590959", + "name": "比例尺", + "font_class": "bilic", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "12590960", + "name": "坐标测量", + "font_class": "zbcl", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "12590962", + "name": "贴地距离", + "font_class": "_mars_dtjl", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "12590963", + "name": "地形展示", + "font_class": "dxzs", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "12590965", + "name": "叠加", + "font_class": "diejia", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "12590966", + "name": "poi搜索", + "font_class": "ss", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "12590967", + "name": "通视分析", + "font_class": "tshifx", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "12590969", + "name": "导航球", + "font_class": "dhq", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "12590972", + "name": "快捷键", + "font_class": "kjj", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "12590973", + "name": "二三位切换", + "font_class": "eswqh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "12593745", + "name": "坐标定位", + "font_class": "zbdw", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "12593746", + "name": "地图纠错", + "font_class": "edit", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "12593747", + "name": "底图", + "font_class": "map", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "12593750", + "name": "飞行漫游", + "font_class": "fxmy", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "12593751", + "name": "定位", + "font_class": "dingwei", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "12593753", + "name": "点标记", + "font_class": "marker", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "12593754", + "name": "贴地矩形", + "font_class": "extent", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "12593755", + "name": "地图输出", + "font_class": "print", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "12593756", + "name": "贴地面", + "font_class": "polygon", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "12593757", + "name": "线", + "font_class": "polyline", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "12593759", + "name": "圆", + "font_class": "circle", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "12593761", + "name": "图上量算", + "font_class": "tsls", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "12593762", + "name": "图层", + "font_class": "tc", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "12593763", + "name": "上下", + "font_class": "updown", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "12593764", + "name": "图上标绘", + "font_class": "tsbh", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "12593886", + "name": "批量单体化", + "font_class": "dth", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "12594315", + "name": "分析工具", + "font_class": "fxgj", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "12594813", + "name": "规划方案比选", + "font_class": "ghfadb", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "12594825", + "name": "全景数据分析", + "font_class": "qjsjdb", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "12595035", + "name": "模型新增", + "font_class": "mxxz", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "12596189", + "name": "扩散模型", + "font_class": "ksmx", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "12596190", + "name": "连通性分析", + "font_class": "ltxfx", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "12596191", + "name": "数据转换", + "font_class": "sjzh", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "12596192", + "name": "缓冲分析", + "font_class": "hcfx", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "12596650", + "name": "叠置分析", + "font_class": "dzfx", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "12596824", + "name": "分屏对比", + "font_class": "jldb", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "12596986", + "name": "空间分析", + "font_class": "kjfx", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "12597162", + "name": "可视域", + "font_class": "keshiyu", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "12625154", + "name": "模型开挖", + "font_class": "moxingkaiwa", + "unicode": "e67a", + "unicode_decimal": 59002 + } + ] +} diff --git a/public/lib/fonts/marsgis/iconfont.svg b/public/lib/fonts/marsgis/iconfont.svg new file mode 100644 index 0000000..74fc84a --- /dev/null +++ b/public/lib/fonts/marsgis/iconfont.svg @@ -0,0 +1,206 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/lib/fonts/marsgis/iconfont.ttf b/public/lib/fonts/marsgis/iconfont.ttf new file mode 100644 index 0000000..4c4d2ee Binary files /dev/null and b/public/lib/fonts/marsgis/iconfont.ttf differ diff --git a/public/lib/fonts/marsgis/iconfont.woff b/public/lib/fonts/marsgis/iconfont.woff new file mode 100644 index 0000000..6c5c663 Binary files /dev/null and b/public/lib/fonts/marsgis/iconfont.woff differ diff --git a/public/lib/fonts/marsgis/iconfont.woff2 b/public/lib/fonts/marsgis/iconfont.woff2 new file mode 100644 index 0000000..71d835d Binary files /dev/null and b/public/lib/fonts/marsgis/iconfont.woff2 differ diff --git a/public/lib/fonts/web-icons/web-icons.css b/public/lib/fonts/web-icons/web-icons.css new file mode 100644 index 0000000..94c3c94 --- /dev/null +++ b/public/lib/fonts/web-icons/web-icons.css @@ -0,0 +1,539 @@ +/** + * UI v1.1.0 + * Copyright 2017-2018 Muyao + * Licensed under the Muyao License 1.0 + */ +@font-face { + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + + src: url("web-icons.eot?v=.2.3"); + src: url("web-icons.eot?#iefix&v=.2.3") format("embedded-opentype"), url("web-icons.woff2?v=.2.3") format("woff2"), url("web-icons.woff?v=.2.3") format("woff"), url("web-icons.ttf?v=.2.3") format("truetype"), url("web-icons.svg?v=.2.3#web-icons") format("svg"); +} +[class^="wb-"], [class*=" wb-"] { + position: relative; + display: inline-block; + font-family: "Web Icons"; + font-style: normal; + font-weight: normal; + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + + text-rendering: auto; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.wb-dashboard:before { + content: "\f101"; +} +.wb-inbox:before { + content: "\f102"; +} +.wb-cloud:before { + content: "\f103"; +} +.wb-bell:before { + content: "\f104"; +} +.wb-book:before { + content: "\f105"; +} +.wb-bookmark:before { + content: "\f106"; +} +.wb-tag:before { + content: "\f107"; +} +.wb-library:before { + content: "\f108"; +} +.wb-share:before { + content: "\f109"; +} +.wb-reply:before { + content: "\f10a"; +} +.wb-refresh:before { + content: "\f10b"; +} +.wb-move:before { + content: "\f10c"; +} +.wb-chat:before { + content: "\f10d"; +} +.wb-chat-working:before { + content: "\f10e"; +} +.wb-chat-text:before { + content: "\f10f"; +} +.wb-chat-group:before { + content: "\f110"; +} +.wb-envelope:before { + content: "\f111"; +} +.wb-envelope-open:before { + content: "\f112"; +} +.wb-user:before { + content: "\f113"; +} +.wb-user-circle:before { + content: "\f114"; +} +.wb-users:before { + content: "\f115"; +} +.wb-user-add:before { + content: "\f116"; +} +.wb-grid-9:before { + content: "\f117"; +} +.wb-grid-4:before { + content: "\f118"; +} +.wb-menu:before { + content: "\f119"; +} +.wb-layout:before { + content: "\f11a"; +} +.wb-fullscreen:before { + content: "\f11b"; +} +.wb-fullscreen-exit:before { + content: "\f11c"; +} +.wb-expand:before { + content: "\f11d"; +} +.wb-contract:before { + content: "\f11e"; +} +.wb-arrow-expand:before { + content: "\f11f"; +} +.wb-arrow-shrink:before { + content: "\f120"; +} +.wb-desktop:before { + content: "\f121"; +} +.wb-mobile:before { + content: "\f122"; +} +.wb-signal:before { + content: "\f123"; +} +.wb-power:before { + content: "\f124"; +} +.wb-more-horizontal:before { + content: "\f125"; +} +.wb-more-vertical:before { + content: "\f126"; +} +.wb-globe:before { + content: "\f127"; +} +.wb-map:before { + content: "\f128"; +} +.wb-flag:before { + content: "\f129"; +} +.wb-pie-chart:before { + content: "\f12a"; +} +.wb-stats-bars:before { + content: "\f12b"; +} +.wb-pluse:before { + content: "\f12c"; +} +.wb-home:before { + content: "\f12d"; +} +.wb-shopping-cart:before { + content: "\f12e"; +} +.wb-payment:before { + content: "\f12f"; +} +.wb-briefcase:before { + content: "\f130"; +} +.wb-search:before { + content: "\f131"; +} +.wb-zoom-in:before { + content: "\f132"; +} +.wb-zoom-out:before { + content: "\f133"; +} +.wb-download:before { + content: "\f134"; +} +.wb-upload:before { + content: "\f135"; +} +.wb-sort-asc:before { + content: "\f136"; +} +.wb-sort-des:before { + content: "\f137"; +} +.wb-graph-up:before { + content: "\f138"; +} +.wb-graph-down:before { + content: "\f139"; +} +.wb-replay:before { + content: "\f13a"; +} +.wb-edit:before { + content: "\f13b"; +} +.wb-pencil:before { + content: "\f13c"; +} +.wb-rubber:before { + content: "\f13d"; +} +.wb-crop:before { + content: "\f13e"; +} +.wb-eye:before { + content: "\f13f"; +} +.wb-eye-close:before { + content: "\f140"; +} +.wb-image:before { + content: "\f141"; +} +.wb-gallery:before { + content: "\f142"; +} +.wb-video:before { + content: "\f143"; +} +.wb-camera:before { + content: "\f144"; +} +.wb-folder:before { + content: "\f145"; +} +.wb-clipboard:before { + content: "\f146"; +} +.wb-order:before { + content: "\f147"; +} +.wb-file:before { + content: "\f148"; +} +.wb-copy:before { + content: "\f149"; +} +.wb-add-file:before { + content: "\f14a"; +} +.wb-print:before { + content: "\f14b"; +} +.wb-calendar:before { + content: "\f14c"; +} +.wb-time:before { + content: "\f14d"; +} +.wb-trash:before { + content: "\f14e"; +} +.wb-plugin:before { + content: "\f14f"; +} +.wb-extension:before { + content: "\f150"; +} +.wb-memory:before { + content: "\f151"; +} +.wb-settings:before { + content: "\f152"; +} +.wb-scissor:before { + content: "\f153"; +} +.wb-wrench:before { + content: "\f154"; +} +.wb-hammer:before { + content: "\f155"; +} +.wb-lock:before { + content: "\f156"; +} +.wb-unlock:before { + content: "\f157"; +} +.wb-volume-low:before { + content: "\f158"; +} +.wb-volume-high:before { + content: "\f159"; +} +.wb-volume-off:before { + content: "\f15a"; +} +.wb-pause:before { + content: "\f15b"; +} +.wb-play:before { + content: "\f15c"; +} +.wb-stop:before { + content: "\f15d"; +} +.wb-musical:before { + content: "\f15e"; +} +.wb-random:before { + content: "\f15f"; +} +.wb-reload:before { + content: "\f160"; +} +.wb-loop:before { + content: "\f161"; +} +.wb-text:before { + content: "\f162"; +} +.wb-bold:before { + content: "\f163"; +} +.wb-italic:before { + content: "\f164"; +} +.wb-underline:before { + content: "\f165"; +} +.wb-format-clear:before { + content: "\f166"; +} +.wb-text-type:before { + content: "\f167"; +} +.wb-table:before { + content: "\f168"; +} +.wb-attach-file:before { + content: "\f169"; +} +.wb-paperclip:before { + content: "\f16a"; +} +.wb-link-intact:before { + content: "\f16b"; +} +.wb-link:before { + content: "\f16c"; +} +.wb-link-broken:before { + content: "\f16d"; +} +.wb-indent-increase:before { + content: "\f16e"; +} +.wb-indent-decrease:before { + content: "\f16f"; +} +.wb-align-justify:before { + content: "\f170"; +} +.wb-align-left:before { + content: "\f171"; +} +.wb-align-center:before { + content: "\f172"; +} +.wb-align-right:before { + content: "\f173"; +} +.wb-list-numbered:before { + content: "\f174"; +} +.wb-list-bulleted:before { + content: "\f175"; +} +.wb-list:before { + content: "\f176"; +} +.wb-emoticon:before { + content: "\f177"; +} +.wb-quote-right:before { + content: "\f178"; +} +.wb-code:before { + content: "\f179"; +} +.wb-code-working:before { + content: "\f17a"; +} +.wb-code-unfold:before { + content: "\f17b"; +} +.wb-chevron-right:before { + content: "\f17c"; +} +.wb-chevron-left:before { + content: "\f17d"; +} +.wb-chevron-left-mini:before { + content: "\f17e"; +} +.wb-chevron-right-mini:before { + content: "\f17f"; +} +.wb-chevron-up:before { + content: "\f180"; +} +.wb-chevron-down:before { + content: "\f181"; +} +.wb-chevron-up-mini:before { + content: "\f182"; +} +.wb-chevron-down-mini:before { + content: "\f183"; +} +.wb-arrow-left:before { + content: "\f184"; +} +.wb-arrow-right:before { + content: "\f185"; +} +.wb-arrow-up:before { + content: "\f186"; +} +.wb-arrow-down:before { + content: "\f187"; +} +.wb-dropdown:before { + content: "\f188"; +} +.wb-dropup:before { + content: "\f189"; +} +.wb-dropright:before { + content: "\f18a"; +} +.wb-dropleft:before { + content: "\f18b"; +} +.wb-sort-vertical:before { + content: "\f18c"; +} +.wb-triangle-left:before { + content: "\f18d"; +} +.wb-triangle-right:before { + content: "\f18e"; +} +.wb-triangle-down:before { + content: "\f18f"; +} +.wb-triangle-up:before { + content: "\f190"; +} +.wb-check-circle:before { + content: "\f191"; +} +.wb-check:before { + content: "\f192"; +} +.wb-check-mini:before { + content: "\f193"; +} +.wb-close:before { + content: "\f194"; +} +.wb-close-mini:before { + content: "\f195"; +} +.wb-plus-circle:before { + content: "\f196"; +} +.wb-plus:before { + content: "\f197"; +} +.wb-minus-circle:before { + content: "\f198"; +} +.wb-minus:before { + content: "\f199"; +} +.wb-alert-circle:before { + content: "\f19a"; +} +.wb-alert:before { + content: "\f19b"; +} +.wb-help-circle:before { + content: "\f19c"; +} +.wb-help:before { + content: "\f19d"; +} +.wb-info-circle:before { + content: "\f19e"; +} +.wb-info:before { + content: "\f19f"; +} +.wb-warning:before { + content: "\f1a0"; +} +.wb-heart:before { + content: "\f1a1"; +} +.wb-heart-outline:before { + content: "\f1a2"; +} +.wb-star:before { + content: "\f1a3"; +} +.wb-star-half:before { + content: "\f1a4"; +} +.wb-star-outline:before { + content: "\f1a5"; +} +.wb-thumb-up:before { + content: "\f1a6"; +} +.wb-thumb-down:before { + content: "\f1a7"; +} +.wb-small-point:before { + content: "\f1a8"; +} +.wb-medium-point:before { + content: "\f1a9"; +} +.wb-large-point:before { + content: "\f1aa"; +} \ No newline at end of file diff --git a/public/lib/fonts/web-icons/web-icons.eot b/public/lib/fonts/web-icons/web-icons.eot new file mode 100644 index 0000000..a84a254 Binary files /dev/null and b/public/lib/fonts/web-icons/web-icons.eot differ diff --git a/public/lib/fonts/web-icons/web-icons.svg b/public/lib/fonts/web-icons/web-icons.svg new file mode 100644 index 0000000..c8b0ea2 --- /dev/null +++ b/public/lib/fonts/web-icons/web-icons.svg @@ -0,0 +1,463 @@ + + + + +Created by FontForge 20120731 at Thu Feb 25 19:14:59 2016 + By kaptinlin,,, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/lib/fonts/web-icons/web-icons.ttf b/public/lib/fonts/web-icons/web-icons.ttf new file mode 100644 index 0000000..7626bfa Binary files /dev/null and b/public/lib/fonts/web-icons/web-icons.ttf differ diff --git a/public/lib/fonts/web-icons/web-icons.woff b/public/lib/fonts/web-icons/web-icons.woff new file mode 100644 index 0000000..7594dc0 Binary files /dev/null and b/public/lib/fonts/web-icons/web-icons.woff differ diff --git a/public/lib/fonts/web-icons/web-icons.woff2 b/public/lib/fonts/web-icons/web-icons.woff2 new file mode 100644 index 0000000..a0195f9 Binary files /dev/null and b/public/lib/fonts/web-icons/web-icons.woff2 differ diff --git a/public/lib/hao/README.md b/public/lib/hao/README.md new file mode 100644 index 0000000..e6ce9ea --- /dev/null +++ b/public/lib/hao/README.md @@ -0,0 +1,9 @@ +#hao 木遥常用js的静态方法类库 + + +github地址:https://github.com/muyao1987/haoutil +作者:木遥,微信: http://marsgis.cn/weixin.html + + +介绍: + 该目录是木遥个人开发的js类库目录 diff --git a/public/lib/hao/haoutil-src.js b/public/lib/hao/haoutil-src.js new file mode 100644 index 0000000..ae9bc99 --- /dev/null +++ b/public/lib/hao/haoutil-src.js @@ -0,0 +1,867 @@ +/** +* JS常用静态方法类库 +* 源码地址:https://github.com/muyao1987/haoutil +* 版本信息:v2.5.1 +* 编译日期:2020-6-11 15:26:11 +* 版权所有:Copyright by 火星科技 木遥 http://marsgis.cn +*/ +var haoutil = haoutil || {}; + +haoutil.version = "2.4"; +haoutil.name = "木遥 通用常用JS方法类库"; +haoutil.author = "木遥 , 微信: http://marsgis.cn/weixin.html"; +haoutil.update = "2020-1-2"; +haoutil.website ='https://github.com/muyao1987/haoutil' + + + + +haoutil.msg = function (msg) { + if(haoutil.isutil.isNull(msg)){ + msg = "未知"; + } + else{ + if(typeof msg == 'object'){ + msg = JSON.stringify(msg); + } + } + if (window.toastr)//此方法需要引用toastr + toastr.info(msg); + else if (window.layer) + layer.msg(msg);//此方法需要引用layer.js + else + alert(msg); +}; +haoutil.tip = haoutil.msg; + +haoutil.oneMsg = function (msg, key) { + if (!haoutil.storage.get(key)) { + haoutil.msg(msg); + haoutil.storage.add(key, true); + } +} + +haoutil.alert = function (msg, title) { + if(haoutil.isutil.isNull(msg)){ + msg = "未知"; + } + else{ + if(typeof msg == 'object'){ + msg = JSON.stringify(msg); + } + } + if (window.layer)//此方法需要引用layer.js + layer.alert(msg, { + title: title || '提示', + skin: 'layui-layer-lan layer-mars-dialog', + closeBtn: 0, + anim: 0 + }); + else + alert(msg); +}; + +haoutil.loading = { + index: -1, + show: function (param) { + this.close(); + + if (window.NProgress) {//此方法需要引用NProgress + param = param || {}; + if (param.color) { + param.template = '
    '; + } + else { + param.template = '
    '; + } + + NProgress.configure(param); + NProgress.start(); + } + else if (window.layer) {//此方法需要引用layer.js + this.index = layer.load(2, { shade: [0.3, '#000000'] }); + } + }, + hide: function () { + this.close(); + }, + close: function () { + if (window.NProgress) { + NProgress.done(true); + } + else if (window.layer) { + if (this.index != -1) + layer.close(this.index); + this.index = -1; + } + } +}; +/* 2017-11-6 10:15:31 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +//js原生对象扩展 + + +//标识是否扩展数组对象 +if (!window.noArrayPrototype) { + //扩展array数组方法,不要用for(var i in arr)来循环数组 + Array.prototype.indexOf = Array.prototype.indexOf || function (val) { + for (var i = 0; i < this.length; i++) { + if (this[i] == val) return i; + } + return -1; + }; + Array.prototype.remove = Array.prototype.remove || function (val) { + for (var i = 0; i < this.length; i++) { + if (this[i] == val) { + this.splice(i, 1); + break; + } + } + }; + Array.prototype.insert = Array.prototype.insert || function (item, index) { + if (index == null) index = 0; + this.splice(index, 0, item); + }; +} + + + +String.prototype.startsWith = String.prototype.startsWith || function (str) { + return this.slice(0, str.length) == str; +}; +//判断当前字符串是否以str结束 +String.prototype.endsWith = String.prototype.endsWith || function (str) { + return this.slice(-str.length) == str; +}; +String.prototype.replaceAll = String.prototype.replaceAll || function (oldstring, newstring) { + return this.replace(new RegExp(oldstring, "gm"), newstring); +} + +/** + * 对Date的扩展,将 Date 转化为指定格式的String + * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符 + * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) + * + * (new Date()).format("yyyy-MM-dd HH:mm:ss") ==> 2017-01-09 08:35:26 + * (new Date()).format("yyyy-M-d HH:mm:ss") ==> 2017-1-9 08:35:26 + * (new Date()).format("yyyy-M-d h:m:s.S") ==> 2016-7-2 8:9:4.18 + * (new Date()).format("yyyy-MM-dd hh:mm:ss.S") ==> 2016-07-02 08:09:04.423 + * (new Date()).format("yyyy-MM-dd E HH:mm:ss") ==> 2016-03-10 二 20:09:04 + * (new Date()).format("yyyy-MM-dd EE hh:mm:ss") ==> 2016-03-10 周二 08:09:04 + * (new Date()).format("yyyy-MM-dd EEE hh:mm:ss") ==> 2016-03-10 星期二 08:09:04 + */ +Date.prototype.format = function (fmt) { + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时 + "H+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + var week = { + "0": "\u65e5", + "1": "\u4e00", + "2": "\u4e8c", + "3": "\u4e09", + "4": "\u56db", + "5": "\u4e94", + "6": "\u516d" + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + } + if (/(E+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[this.getDay() + ""]); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + } + } + return fmt; +}; +/* 2017-12-8 09:39:39 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.color = (function () { + // "颜色 相关操作类"; + //============内部私有属性及方法============ + + + //随机颜色 + function random() { + return '#' + + + (function (color) { + + return (color += '0123456789abcdef'[Math.floor(Math.random() * 16)]) && (color.length == 6) ? color : arguments.callee(color); + + })(''); + } + + + //===========对外公开的属性及方法========= + return { + random: random + }; +})(); +/* 2017-10-10 13:32:56 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.cookie = (function () { + //"cookie 相关操作类"; + //============内部私有属性及方法============ + var _isH5Mobile; + function isH5Mobile(value) { + _isH5Mobile = value; + } + + //添加cookie + function add(name, value, days) { + + //判断是否设置过期时间,0代表关闭浏览器时失效 + var date; + if (days > 0) { + date = new Date(); + date.setTime(date.getTime + days * 24 * 60 * 60 * 1000); //单位是天后失效 + } + else { + date = new Date(0x7fffffff * 1e3); + } + var cookieString = name + "=" + escape(value) + "; expires=" + date.toGMTString(); + + if (_isH5Mobile && window['plus'] != null) { + plus.navigator.setCookie(name, cookieString); + } else { + document.cookie = cookieString; + } + } + + //获取cookie + function get(name) { + var strCookie + if (_isH5Mobile && window['plus'] != null) { + strCookie = plus.navigator.getCookie(name); + if (strCookie == null) return null; + + } else { + strCookie = document.cookie; + } + + + var arrCookie = strCookie.split("; "); + for (var i = 0; i < arrCookie.length; i++) { + var arr = arrCookie[i].split("="); + if (arr[0] == name) { + return unescape(arr[1]); + } + } + return null; + } + + //删除cookie + function del(name) { + if (_isH5Mobile && window['plus'] != null) { + plus.navigator.removeCookie(name); + } + else { + var date = new Date(); + date.setTime(date.getTime() - 10000); //设定一个过去的时间即可 + document.cookie = name + "=v; expires=" + date.toGMTString(); + } + } + + //===========对外公开的属性及方法========= + return { + isH5Mobile: isH5Mobile, + add: add, + get: get, + del: del + }; +})(); + +/* 2017-8-31 17:26:30 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.file = (function () { + //"文件 相关操作类"; + //============内部私有属性及方法============ + + function _download(fileName, blob) { + var aLink = document.createElement('a'); + aLink.download = fileName; + aLink.href = URL.createObjectURL(blob); + document.body.appendChild(aLink); + aLink.click(); + document.body.removeChild(aLink); + } + + + //下载保存文件 + function downloadFile(fileName, string) { + var blob = new Blob([string]); + _download(fileName, blob); + } + + + //下载导出图片 + function downloadImage(name, canvas) { + var base64 = canvas.toDataURL("image/png"); + var blob = base64Img2Blob(base64); + _download(name + '.png', blob); + } + + //下载导出图片 + function downloadBase64Image(name, base64) { + var blob = base64Img2Blob(base64); + _download(name + '.png', blob); + } + + + function base64Img2Blob(code) { + var parts = code.split(';base64,'); + var contentType = parts[0].split(':')[1]; + var raw = window.atob(parts[1]); + var rawLength = raw.length; + + var uInt8Array = new Uint8Array(rawLength); + for (var i = 0; i < rawLength; ++i) { + uInt8Array[i] = raw.charCodeAt(i); + } + return new Blob([uInt8Array], { type: contentType }); + } + + + //===========对外公开的属性及方法========= + return { + download: _download, + downloadFile: downloadFile, + downloadImage: downloadImage, + downloadBase64Image: downloadBase64Image, + base64Img2Blob: base64Img2Blob + }; +})(); +/* 2017-12-5 13:38:32 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.isutil = (function () { + // "判断 相关操作类"; + + //============内部私有属性及方法============ + function isArray(obj) { + if (typeof Array.isArray === "function") { + return Array.isArray(obj); + } else { + return Object.prototype.toString.call(obj) === "[object Array]"; + } + } + + function isString(str) { + return (typeof str == 'string') && str.constructor == String; + } + + function isNumber(obj) { + return (typeof obj == 'number') && obj.constructor == Number; + } + + function isDate(obj) { + return (typeof obj == 'object') && obj.constructor == Date; + } + + function isFunction(obj) { + return (typeof obj == 'function') && obj.constructor == Function; + } + + function isObject(obj) { + return (typeof obj == 'object') && obj.constructor == Object; + } + + + + function isNull(value) { + if (value == null) return true; + if (isString(value) && value == "") return true; + if (isNumber(value) && isNaN(value)) return true; + + return false; + } + + function isNotNull(value) { + return !isNull(value); + } + + //===========对外公开的属性及方法========= + return { + isNull: isNull, + isNotNull: isNotNull, + isArray: isArray, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isFunction: isFunction, + isObject: isObject + }; +})(); +/* 2017-8-10 13:50:49 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.math = (function () { + // "数学 相关操作类"; + //============内部私有属性及方法============ + + + function random(min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); + } + + + //随机数组中随机取1个元素 + function getArrayRandomOne(arr) { + var n = random(0, arr.length - 1); + return arr[n]; + } + + //补零padLeft0 + function padLeft0(numStr, len) { + numStr = String(numStr); + var len = numStr.length; + while (len < n) { + numStr = "0" + numStr; + len++; + } + return numStr; + } + + //===========对外公开的属性及方法========= + return { + getArrayRandomOne: getArrayRandomOne, + random: random, + padLeft0: padLeft0 + }; +})(); +haoutil.storage = (function () { + //"localStorage 相关操作类"; + var _storage; + + //添加 + function add(name, data) { + _storage = window.localStorage; + if (_storage == null) return; + _storage.setItem(name, data); + } + + //获取cookie + function get(name) { + _storage = window.localStorage; + if (_storage == null) return; + var data = _storage.getItem(name); + return data; + } + function del(name) { + _storage = window.localStorage; + if (_storage == null) return; + _storage.removeItem(name); + } + + //===========对外公开的属性及方法========= + return { + add: add, + get: get, + del: del + }; +})(); + +/* 2017-10-27 08:39:39 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.str = (function () { + // "字符串 相关操作类"; + //============内部私有属性及方法============ + + + //判断字符是否是中文字符 + function isChinese(s) { + var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; + if (!patrn.exec(s)) { + return false; + } else { + return true; + } + } + + + /** 单位换算,格式化显示长度 */ + function formatLength(val, unit) { + if (val == null) return ""; + val = Number(val); + + if (unit == null || unit == "auto") { + if (val < 1000) + unit = "m"; + else + unit = "km"; + } + + var valstr = ""; + switch (unit) { + default: + case "m": + valstr = val.toFixed(2) + '米'; + break; + case "km": + valstr = (val * 0.001).toFixed(2) + '公里'; + break; + case "mile": + valstr = (val * 0.00054).toFixed(2) + '海里'; + break; + case "zhang": + valstr = (val * 0.3).toFixed(2) + '丈'; + break; + } + return valstr; + } + + + + + /** 进行单位换算,格式化显示面积 */ + function formatArea(val, unit) { + if (val == null) return ""; + val = Number(val); + + if (unit == null || unit == "auto") { + if (val < 1000000) + unit = "m"; + else + unit = "km"; + } + + var valstr = ""; + switch (unit) { + default: + case "m": + valstr = val.toFixed(2) + '平方米'; + break; + case "km": + valstr = (val / 1000000).toFixed(2) + '平方公里'; + break; + case "mu": + valstr = (val * 0.0015).toFixed(2) + '亩'; + break; + case "ha": + valstr = (val * 0.0001).toFixed(2) + '公顷'; + break; + } + + return valstr; + } + + + //格式化时间 + function formatTime(strtime) { + var numtime = Number(strtime); + + if (strtime < 60) + return strtime.toFixed(0) + "秒"; + else if (strtime >= 60 && strtime < 3600) { + var miao = Math.floor(strtime % 60); + return Math.floor(strtime / 60) + "分钟" + (miao != 0 ? (miao + "秒") : ""); + } + else { + strtime = Math.floor(strtime / 60); //秒转分钟 + return Math.floor(strtime / 60) + "小时" + Math.floor(strtime % 60) + "分钟"; + } + } + + + + var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); //索引表 + + /** +    * @description 将二进制序列转换为Base64编码 +    * @param {String} +    * @return {String} +    */ + function binToBase64(bitString) { + var result = ""; + var tail = bitString.length % 6; + var bitStringTemp1 = bitString.substr(0, bitString.length - tail); + var bitStringTemp2 = bitString.substr(bitString.length - tail, tail); + for (var i = 0; i < bitStringTemp1.length; i += 6) { + var index = parseInt(bitStringTemp1.substr(i, 6), 2); + result += code[index]; + } + bitStringTemp2 += new Array(7 - tail).join("0"); + if (tail) { + result += code[parseInt(bitStringTemp2, 2)]; + result += new Array((6 - tail) / 2 + 1).join("="); + } + return result; + } + + /** +    * @description 将base64编码转换为二进制序列 +    * @param {String} +    * @return {String} +    */ + function base64ToBin(str) { + var bitString = ""; + var tail = 0; + for (var i = 0; i < str.length; i++) { + if (str[i] != "=") { + var decode = code.indexOf(str[i]).toString(2); + bitString += (new Array(7 - decode.length)).join("0") + decode; + } else { + tail++; + } + } + return bitString.substr(0, bitString.length - tail * 2); + } + + /** +    * @description 将字符转换为二进制序列 +    * @param {String} str +    * @return {String}  +    */ + function stringToBin(str) { + var result = ""; + for (var i = 0; i < str.length; i++) { + var charCode = str.charCodeAt(i).toString(2); + result += (new Array(9 - charCode.length).join("0") + charCode); + } + return result; + } + + /** +    * @description 将二进制序列转换为字符串 +    * @param {String} Bin +    */ + function BinToStr(Bin) { + var result = ""; + for (var i = 0; i < Bin.length; i += 8) { + result += String.fromCharCode(parseInt(Bin.substr(i, 8), 2)); + } + return result; + } + function base64(str) { + return binToBase64(stringToBin(str)); + } + + function decodeBase64(str) { + return BinToStr(base64ToBin(str)); + } + + //===========对外公开的属性及方法========= + return { + isChinese: isChinese, + formatLength: formatLength, + formatArea: formatArea, + formatTime: formatTime, + base64: base64, + decodeBase64: decodeBase64 + + }; + +})(); +/* 2017-10-27 08:31:05 | 修改 木遥(微信: http://marsgis.cn/weixin.html) */ +haoutil.system = (function () { + // 系统级 或 浏览器 相关操作类"; + //============内部私有属性及方法============ + + //url参数获取 + function getRequest(target) { + var theRequest = new Object(); + try {//屏蔽跨域时报错 + target = target || window; + var url = target.location.search; //获取url中"?"符后的字串 + if (url.indexOf("?") != -1) { + var str = url.substr(1); + var strs = str.split("&"); + for (var i = 0; i < strs.length; i++) { + theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]); + } + } + } catch (e) { } + return theRequest; + } + function getRequestByName(name, defval, target) { + try { + target = target || window; + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = target.location.search.substr(1).match(reg); + if (r != null) return decodeURI(r[2]); + + } catch (e) { } + return defval; + } + + function getWindowSize() { + if (typeof window.innerWidth != 'undefined') { + return { + width: window.innerWidth, + height: window.innerHeight + } + } else { + return { + width: document.documentElement.clientWidth, + height: document.documentElement.clientHeight + } + } + } + + //获取浏览器类型及版本 + function getExplorerInfo() { + var explorer = window.navigator.userAgent.toLowerCase(); + //ie + if (explorer.indexOf("msie") >= 0) { + var ver = Number(explorer.match(/msie ([\d]+)/)[1]); + return { type: "IE", version: ver }; + } + //firefox + else if (explorer.indexOf("firefox") >= 0) { + var ver = Number(explorer.match(/firefox\/([\d]+)/)[1]); + return { type: "Firefox", version: ver }; + } + //Chrome + else if (explorer.indexOf("chrome") >= 0) { + var ver = Number(explorer.match(/chrome\/([\d]+)/)[1]); + return { type: "Chrome", version: ver }; + } + //Opera + else if (explorer.indexOf("opera") >= 0) { + var ver = Number(explorer.match(/opera.([\d]+)/)[1]); + return { type: "Opera", version: ver }; + } + //Safari + else if (explorer.indexOf("Safari") >= 0) { + var ver = Number(explorer.match(/version\/([\d]+)/)[1]); + return { type: "Safari", version: ver }; + } + return { type: explorer, version: -1 }; + } + + + //浏览器 + function isPCBroswer() { + var sUserAgent = navigator.userAgent.toLowerCase(); + + var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; + var bIsIphoneOs = sUserAgent.match(/iphone/i) == "iphone"; + var bIsMidp = sUserAgent.match(/midp/i) == "midp"; + var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; + var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb"; + var bIsAndroid = sUserAgent.match(/android/i) == "android"; + var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce"; + var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile"; + if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) { + return false; + } else { + return true; + } + } + + + function clone(obj, removeKeys, level) { + if (level == null) level = 9; //避免死循环,拷贝的层级最大深度 + if (removeKeys == null) removeKeys = ["_layer"]; + + if (null == obj || "object" != typeof obj) return obj; + + // Handle Date + if (haoutil.isutil.isDate(obj)) { + var copy = new Date(); + copy.setTime(obj.getTime()); + return copy; + } + + // Handle Array + if (haoutil.isutil.isArray(obj) && level >= 0) { + var copy = []; + for (var i = 0, len = obj.length; i < len; ++i) { + copy[i] = clone(obj[i], removeKeys, level - 1); + } + return copy; + } + + // Handle Object + if (typeof obj === 'object' && level >= 0) { + try { + var copy = {}; + for (var attr in obj) { + if (typeof attr === 'function') continue; + if (removeKeys.indexOf(attr) != -1) continue; + + if (obj.hasOwnProperty(attr)) + copy[attr] = clone(obj[attr], removeKeys, level - 1); + } + return copy; + } + catch (e) { console.log(e); } + } + return obj; + } + + function jsonp(url, data, callback) { + var jsonp = function (url, data, callback) { + var fnSuffix = Math.random().toString().replace('.', ''); + var cbFuncName = 'my_json_cb_' + fnSuffix; + // 不推荐 + window[cbFuncName] = callback; + var querystring = url.indexOf('?') == -1 ? '?' : '&'; + for (var key in data) { + querystring += key + '=' + data[key] + '&'; + } + querystring += 'callback=' + cbFuncName; + var scriptElement = document.createElement('script'); + scriptElement.src = url + querystring; + document.body.appendChild(scriptElement); + }; + window.$jsonp = jsonp; + } + + //公共方法 + function getHtml(url, callback) { + $.ajax({ + url: url, + type: "GET", + dataType: 'html', + timeout: 0, //永不超时 + success: function (data) { + callback(data); + } + }); + } + + var nHead = document.head || document.getElementsByTagName('head')[0]; + // loadCss 用于载入css资源 + function loadCss(url, async) { + var node = document.createElement('link'); + node.rel = 'stylesheet'; + node.async = async; + node.href = url; + nHead.appendChild(node); + } + + // loadJs 用于载入js资源 + function loadJs(url, async) { + var node = document.createElement('script'); + node.charset = 'utf-8'; + node.async = async; + node.src = url; + nHead.appendChild(node); + } + + var cssExpr = new RegExp('\\.css'); + function loadResource(url, async) { + if (cssExpr.test(url)) { + loadCss(url, async); + } else { + loadJs(url, async); + } + } + + //===========对外公开的属性及方法========= + return { + getRequest: getRequest, + getRequestByName: getRequestByName, + getExplorerInfo: getExplorerInfo, + isPCBroswer: isPCBroswer, + clone: clone, + jsonp: jsonp, + getWindowSize: getWindowSize, + getHtml: getHtml, + loadCss: loadCss, + loadJs: loadJs, + loadResource: loadResource + }; +})(); \ No newline at end of file diff --git a/public/lib/hao/haoutil.js b/public/lib/hao/haoutil.js new file mode 100644 index 0000000..7a91c07 --- /dev/null +++ b/public/lib/hao/haoutil.js @@ -0,0 +1,8 @@ +/** +* JS常用静态方法类库 +* 源码地址:https://github.com/muyao1987/haoutil +* 版本信息:v2.5.1 +* 编译日期:2020-6-11 15:26:11 +* 版权所有:Copyright by 火星科技 木遥 http://marsgis.cn +*/ +var haoutil=haoutil||{};haoutil.version="2.4",haoutil.name="木遥 通用常用JS方法类库",haoutil.author="木遥 , 微信: http://marsgis.cn/weixin.html",haoutil.update="2020-1-2",haoutil.website="https://github.com/muyao1987/haoutil",haoutil.msg=function(t){haoutil.isutil.isNull(t)?t="未知":"object"==typeof t&&(t=JSON.stringify(t)),window.toastr?toastr.info(t):window.layer?layer.msg(t):alert(t)},haoutil.tip=haoutil.msg,haoutil.oneMsg=function(t,e){haoutil.storage.get(e)||(haoutil.msg(t),haoutil.storage.add(e,!0))},haoutil.alert=function(t,e){haoutil.isutil.isNull(t)?t="未知":"object"==typeof t&&(t=JSON.stringify(t)),window.layer?layer.alert(t,{title:e||"提示",skin:"layui-layer-lan layer-mars-dialog",closeBtn:0,anim:0}):alert(t)},haoutil.loading={index:-1,show:function(t){this.close(),window.NProgress?((t=t||{}).color?t.template='
    ':t.template='
    ',NProgress.configure(t),NProgress.start()):window.layer&&(this.index=layer.load(2,{shade:[.3,"#000000"]}))},hide:function(){this.close()},close:function(){window.NProgress?NProgress.done(!0):window.layer&&(-1!=this.index&&layer.close(this.index),this.index=-1)}},window.noArrayPrototype||(Array.prototype.indexOf=Array.prototype.indexOf||function(t){for(var e=0;e/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
    ":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
    ",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\that\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}}); diff --git a/public/lib/highlight/styles/default.css b/public/lib/highlight/styles/default.css new file mode 100644 index 0000000..f1bfade --- /dev/null +++ b/public/lib/highlight/styles/default.css @@ -0,0 +1,99 @@ +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; +} + + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #444; +} + +.hljs-comment { + color: #888888; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; +} + + +/* User color: hue: 0 */ + +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; +} + + +/* Language color: hue: 90; */ + +.hljs-literal { + color: #78A960; +} + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; +} + + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/public/lib/highlight/styles/foundation.css b/public/lib/highlight/styles/foundation.css new file mode 100644 index 0000000..f1fe64b --- /dev/null +++ b/public/lib/highlight/styles/foundation.css @@ -0,0 +1,88 @@ +/* +Description: Foundation 4 docs style for highlight.js +Author: Dan Allen +Website: http://foundation.zurb.com/docs/ +Version: 1.0 +Date: 2013-04-02 +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #eee; color: black; +} + +.hljs-link, +.hljs-emphasis, +.hljs-attribute, +.hljs-addition { + color: #070; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong, +.hljs-string, +.hljs-deletion { + color: #d14; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-quote, +.hljs-comment { + color: #998; + font-style: italic; +} + +.hljs-section, +.hljs-title { + color: #900; +} + +.hljs-class .hljs-title, +.hljs-type { + color: #458; +} + +.hljs-variable, +.hljs-template-variable { + color: #336699; +} + +.hljs-bullet { + color: #997700; +} + +.hljs-meta { + color: #3344bb; +} + +.hljs-code, +.hljs-number, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag { + color: #099; +} + +.hljs-regexp { + background-color: #fff0ff; + color: #880088; +} + +.hljs-symbol { + color: #990073; +} + +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #007700; +} diff --git a/public/lib/highlight/styles/github-gist.css b/public/lib/highlight/styles/github-gist.css new file mode 100644 index 0000000..155f0b9 --- /dev/null +++ b/public/lib/highlight/styles/github-gist.css @@ -0,0 +1,71 @@ +/** + * GitHub Gist Theme + * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro + */ + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/public/lib/highlight/styles/github.css b/public/lib/highlight/styles/github.css new file mode 100644 index 0000000..791932b --- /dev/null +++ b/public/lib/highlight/styles/github.css @@ -0,0 +1,99 @@ +/* + +github.com style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: #008080; +} + +.hljs-string, +.hljs-doctag { + color: #d14; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #900; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: #009926; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/public/lib/highlight/styles/vs2015.css b/public/lib/highlight/styles/vs2015.css new file mode 100644 index 0000000..d1d9be3 --- /dev/null +++ b/public/lib/highlight/styles/vs2015.css @@ -0,0 +1,115 @@ +/* + * Visual Studio 2015 dark style + * Author: Nicolas LLOBERA + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #1E1E1E; + color: #DCDCDC; +} + +.hljs-keyword, +.hljs-literal, +.hljs-symbol, +.hljs-name { + color: #569CD6; +} +.hljs-link { + color: #569CD6; + text-decoration: underline; +} + +.hljs-built_in, +.hljs-type { + color: #4EC9B0; +} + +.hljs-number, +.hljs-class { + color: #B8D7A3; +} + +.hljs-string, +.hljs-meta-string { + color: #D69D85; +} + +.hljs-regexp, +.hljs-template-tag { + color: #9A5334; +} + +.hljs-subst, +.hljs-function, +.hljs-title, +.hljs-params, +.hljs-formula { + color: #DCDCDC; +} + +.hljs-comment, +.hljs-quote { + color: #57A64A; + font-style: italic; +} + +.hljs-doctag { + color: #608B4E; +} + +.hljs-meta, +.hljs-meta-keyword, +.hljs-tag { + color: #9B9B9B; +} + +.hljs-variable, +.hljs-template-variable { + color: #BD63C5; +} + +.hljs-attr, +.hljs-attribute, +.hljs-builtin-name { + color: #9CDCFE; +} + +.hljs-section { + color: gold; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +/*.hljs-code { + font-family:'Monospace'; +}*/ + +.hljs-bullet, +.hljs-selector-tag, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #D7BA7D; +} + +.hljs-addition { + background-color: #144212; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #600; + display: inline-block; + width: 100%; +} diff --git a/public/lib/include-lib.js b/public/lib/include-lib.js new file mode 100644 index 0000000..e1136b1 --- /dev/null +++ b/public/lib/include-lib.js @@ -0,0 +1,224 @@ +/* 修改 木遥(微信: http://marsgis.cn/weixin.html ) */ +// 第三方类库加载管理js,方便切换lib +/* eslint-disable */ +; (function () { + var r = new RegExp('(^|(.*?\\/))(include-lib.js)(\\?|$)'), + s = document.getElementsByTagName('script'), + targetScript + for (var i = 0; i < s.length; i++) { + var src = s[i].getAttribute('src') + if (src) { + var m = src.match(r) + if (m) { + targetScript = s[i] + break + } + } + } + + // cssExpr 用于判断资源是否是css + var cssExpr = new RegExp('\\.css') + + function inputLibs(list) { + if (list == null || list.length === 0) { + return + } + + for (var i = 0, len = list.length; i < len; i++) { + var url = list[i] + if (cssExpr.test(url)) { + var css = '' + document.writeln(css) + } else { + var script = ' + + + + + + + + + + + + + + +
    +
    + + +
    +

    jQuery MiniColors

    +

    + Now with Bootstrap 3 support! +

    +

    + A project by A Beautiful Site, + originally developed for Surreal CMS. +

    +
    + + +

    Contents

    + + + +

    Download

    +

    + This project is on GitHub. Feel free to post bug reports, feature requests, and code + improvements on the official project page. +

    +

    + Download on GitHub +

    + + +

    Demos

    +

    + This is the main demo page, which uses Bootstrap 3, + but this plugin works without Bootstrap as well. +

    +

    + View Demo Without Bootstrap +

    +

    + Toggle LTR/RTL +

    + + +

    Control Types

    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +

    Input Modes

    +
    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + + +

    Positions

    +
    +

    + Valid positions include bottom left, bottom right, top + left, and top right. +

    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    + + +

    RGB(A)

    +
    +
    +
    +
    + +
    + + + RGB input can be assigned by setting the format option + to rgb. + +
    +
    +
    +
    + +
    + + + RGBA input can be assigned by setting the format + option to rgb and opacity option to + true. + +
    +
    +
    +
    + + +

    …and more!

    +
    +
    +
    +
    + +
    + + + Opacity can be assigned by including the data-opacity + attribute or by setting the opacity option to + true. + +
    +
    +
    +
    + +
    + + + CSS-wide keywords can be assigned by setting the keywords + option to a comma-separated list of valid keywords: transparent, + initial, inherit. + +
    +
    +
    +
    +
    +
    + +
    + + + This field has a default value assigned to it, so it will never be empty. + +
    +
    +
    +
    + +
    + + + This field will always be uppercase. + +
    +
    +
    +
    +
    +
    + +
    + + + + +
    + + Example using Bootstrap's input groups. + +
    +
    +
    +
    + +
    + Color + + + + +
    + + Input group example with addon. + +
    +
    +
    +
    +
    +
    + +
    + + + Example with swatches. + +
    +
    +
    +
    + +
    + + + Example with swatches and opacity. + +
    +
    +
    +
    + + +

    API

    + + +

    Instantiation

    +

    + Instantiate like any other jQuery plugin: +

    +
    $('INPUT.minicolors').minicolors(settings);
    + + +

    Settings

    + +

    + Default settings are as follows: +

    +
    +$.minicolors = {
    +  defaults: {
    +    animationSpeed: 50,
    +    animationEasing: 'swing',
    +    change: null,
    +    changeDelay: 0,
    +    control: 'hue',
    +    defaultValue: '',
    +    format: 'hex',
    +    hide: null,
    +    hideSpeed: 100,
    +    inline: false,
    +    keywords: '',
    +    letterCase: 'lowercase',
    +    opacity: false,
    +    position: 'bottom left',
    +    show: null,
    +    showSpeed: 100,
    +    theme: 'default',
    +    swatches: []
    +  }
    +};
    +
    +

    + For convenience, you can change default settings globally by assigning new values: +

    +
    +$.minicolors.defaults.changeDelay = 200;
    +
    +

    + To change multiple properties at once, use $.extend(): +

    +
    +$.minicolors.defaults = $.extend($.minicolors.defaults, {
    +  changeDelay: 200,
    +  letterCase: 'uppercase',
    +  theme: 'bootstrap'
    +});
    +
    +

    + Note: Changing default settings will not affect controls that + are already initialized. +

    + +
    +
    animationSpeed
    +
    +

    + The animation speed of the sliders when the user taps or clicks a new color. Set to + 0 for no animation. +

    +
    + +
    animationEasing
    +
    +

    + The easing to use when animating the sliders. +

    +
    + +
    changeDelay
    +
    +

    + The time, in milliseconds, to defer the change event from firing while + the user makes a selection. This is useful for preventing the change event + from firing frequently as the user drags the color picker around. +

    +

    + The default value is 0 (no delay). If your change callback + features something resource-intensive (such as an AJAX request), you’ll probably want + to set this to at least 200. +

    +
    + +
    control
    +
    +

    + Determines the type of control. Valid options are hue, brightness, + saturation, and wheel. +

    +
    + +
    defaultValue
    +
    +

    + To force a default color, set this to a valid hex string. When the user clears the + control, it will revert to this color. +

    +
    + +
    format
    +
    +

    + The format miniColors should use. Valid options are hex and + rgb. +

    +
    + +
    hideSpeed & showSpeed
    +
    +

    + The speed at which to hide and show the color picker. +

    +
    + +
    inline
    +
    +

    + Set to true to force the color picker to appear inline. +

    +
    + +
    keywords
    +
    +

    + A comma-separated list of keywords that the control should accept (e.g. inherit, + transparent, initial). By default, no keywords are allowed. +

    +
    + +
    letterCase
    +
    +

    + Determines the letter case of the hex code value. Valid options are uppercase + or lowercase. +

    +
    + +
    opacity
    +
    +

    + Set to true to enable the opacity slider. (Use the input element's + data-opacity attribute to set a preset value.) +

    +
    + +
    position
    +
    +

    + Sets the position of the dropdown. Valid options are bottom left, + bottom right, top left, and top right. +

    +

    + The swatchPosition setting has been removed in version 2.1. The position + of the swatch is now determined by position. +

    +
    + +
    theme
    +
    +

    + A string containing the name of the custom theme to be applied. In your CSS, prefix + your selectors like this: +

    +
    +.minicolors-theme-yourThemeName { ... }
    +
    +

    + If you are using the default theme, you will probably need to adjust the swatch + styles depending on your existing stylesheet rules. Version 2.1 removes as much + styling on the input element as possible, which means it’s up to + you to adjust your CSS to make sure the swatch aligns properly. +

    +

    + To adjust the swatch, override these styles: +

    +
    +.minicolors-theme-default .minicolors-swatch {
    +  top: 5px;
    +  left: 5px;
    +  width: 18px;
    +  height: 18px;
    +}
    +.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
    +  left: auto;
    +  right: 5px;
    +}
    +
    +
    + + +
    swatches
    +
    +

    + An array containing one or more strings of hex colors that will show up under the main + color grid. +

    +

    + Alternatively, this can be an array of { name, color } objects where + name is a human-readable color name and color is a hex code. + In this case, the name will be used to set the swatch's title attribute. +

    +
    + + + +

    Methods

    +

    Use this syntax for calling methods:

    +
    $(selector).minicolors('method', [data]);
    +
    +
    create
    +
    +

    + Initializes the control for all items matching your selector. This is the default + method, so data may be passed in as the only argument. +

    +

    + To set a preset color value, populate the value attribute of the original + input element. +

    +
    + +
    destroy
    +
    +

    + Returns the input element to its original, uninitialized state. +

    +
    + +
    hide
    +
    +

    + Hides the color picker. +

    +
    + +
    show
    +
    +

    + Shows the color picker. +

    +
    + +
    opacity
    +
    +

    + Gets or sets a control's opacity level. To use this method as a setter, pass data in + as a value between 0 and 1. (You can also obtain this value by checking the input + element's data-opacity attribute.) +

    +

    + To set a preset opacity value, populate the data-opacity attribute of the + original input element. +

    +
    + +
    rgbObject
    +
    +

    + Returns an object containing red, green, blue, and alpha properties that correspond to + the control's current value. Example: +

    +
    { r: 0, g: 82, b: 148, a: 0.75 }
    +
    + +
    rgbString & rgbaString
    +
    +

    + Returns an RGB or RGBA string suitable for use in your CSS. Examples: +

    +
    +rgb(0, 82, 148)
    +rgba(0, 82, 148, .75)
    +
    +
    + +
    settings
    +
    +

    + Gets or sets a control's settings. If new settings are passed in, the control will + destroy and re-initialize itself with any new settings overriding the old ones. +

    +
    + +
    value
    +
    +

    + Gets or sets a control's color value. To use this method as a setter, pass + in a color string or an object (ex: {color: '#fc0', opacity: .5}). +

    +
    +
    + + +

    Events

    +
    +
    change
    +
    +

    Fires when the value of the color picker changes. The this keyword will reference the original input element. +

    +$(selector).minicolors({
    +  change: function(value, opacity) {
    +    console.log(value + ' - ' + opacity);
    +  }
    +});
    +
    +

    + Warning! This event will fire a lot when the user drags the + color picker around. Use the changeDelay setting to reduce its + frequency. +

    +
    + +
    hide
    +
    +

    + Fires when the color picker is hidden. The this keyword will reference + the original input element. +

    +
    +$(selector).minicolors({
    +  hide: function() {
    +  console.log('Hide event triggered!');
    +  }
    +});
    +
    +
    + +
    show
    +
    +

    + Fires when the color picker is shown. The this keyword will reference + the original input element. +

    +
    +$(selector).minicolors({
    +  show: function() {
    +    console.log('Show event triggered!');
    +  }
    +});
    +
    +
    +
    + +

    License

    +

    + Licensed under the MIT license, + same as jQuery. +

    +

    + ©2013 A Beautiful Site, LLC. +

    +
    + + + diff --git a/public/lib/jquery/minicolors/jquery.minicolors.css b/public/lib/jquery/minicolors/jquery.minicolors.css new file mode 100644 index 0000000..05621f9 --- /dev/null +++ b/public/lib/jquery/minicolors/jquery.minicolors.css @@ -0,0 +1,432 @@ +.minicolors { + position: relative; +} + +.minicolors-sprite { + background-image: url(jquery.minicolors.png); +} + +.minicolors-swatch { + position: absolute; + vertical-align: middle; + background-position: -80px 0; + border: solid 1px #ccc; + cursor: text; + padding: 0; + margin: 0; + display: inline-block; +} + +.minicolors-swatch-color { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.minicolors input[type=hidden] + .minicolors-swatch { + width: 28px; + position: static; + cursor: pointer; +} + +.minicolors input[type=hidden][disabled] + .minicolors-swatch { + cursor: default; +} + +/* Panel */ +.minicolors-panel { + position: absolute; + width: 173px; + background: white; + border: solid 1px #CCC; + box-shadow: 0 0 20px rgba(0, 0, 0, .2); + z-index: 99999; + box-sizing: content-box; + display: none; +} + +.minicolors-panel.minicolors-visible { + display: block; +} + +/* Panel positioning */ +.minicolors-position-top .minicolors-panel { + top: -154px; +} + +.minicolors-position-right .minicolors-panel { + right: 0; +} + +.minicolors-position-bottom .minicolors-panel { + top: auto; +} + +.minicolors-position-left .minicolors-panel { + left: 0; +} + +.minicolors-with-opacity .minicolors-panel { + width: 194px; +} + +.minicolors .minicolors-grid { + position: relative; + top: 1px; + left: 1px; /* LTR */ + width: 150px; + height: 150px; + margin-bottom: 2px; + background-position: -120px 0; + cursor: crosshair; +} +[dir=rtl] .minicolors .minicolors-grid { + right: 1px; +} + +.minicolors .minicolors-grid-inner { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; +} + +.minicolors-slider-saturation .minicolors-grid { + background-position: -420px 0; +} + +.minicolors-slider-saturation .minicolors-grid-inner { + background-position: -270px 0; + background-image: inherit; +} + +.minicolors-slider-brightness .minicolors-grid { + background-position: -570px 0; +} + +.minicolors-slider-brightness .minicolors-grid-inner { + background-color: black; +} + +.minicolors-slider-wheel .minicolors-grid { + background-position: -720px 0; +} + +.minicolors-slider, +.minicolors-opacity-slider { + position: absolute; + top: 1px; + left: 152px; /* LTR */ + width: 20px; + height: 150px; + background-color: white; + background-position: 0 0; + cursor: row-resize; +} +[dir=rtl] .minicolors-slider, +[dir=rtl] .minicolors-opacity-slider { + right: 152px; +} + +.minicolors-slider-saturation .minicolors-slider { + background-position: -60px 0; +} + +.minicolors-slider-brightness .minicolors-slider { + background-position: -20px 0; +} + +.minicolors-slider-wheel .minicolors-slider { + background-position: -20px 0; +} + +.minicolors-opacity-slider { + left: 173px; /* LTR */ + background-position: -40px 0; + display: none; +} +[dir=rtl] .minicolors-opacity-slider { + right: 173px; +} + +.minicolors-with-opacity .minicolors-opacity-slider { + display: block; +} + +/* Pickers */ +.minicolors-grid .minicolors-picker { + position: absolute; + top: 70px; + left: 70px; + width: 12px; + height: 12px; + border: solid 1px black; + border-radius: 10px; + margin-top: -6px; + margin-left: -6px; + background: none; +} + +.minicolors-grid .minicolors-picker > div { + position: absolute; + top: 0; + left: 0; + width: 8px; + height: 8px; + border-radius: 8px; + border: solid 2px white; + box-sizing: content-box; +} + +.minicolors-picker { + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 2px; + background: white; + border: solid 1px black; + margin-top: -2px; + box-sizing: content-box; +} + +/* Swatches */ +.minicolors-swatches, +.minicolors-swatches li { + margin: 5px 0 3px 5px; /* LTR */ + padding: 0; + list-style: none; + overflow: hidden; +} +[dir=rtl] .minicolors-swatches, +[dir=rtl] .minicolors-swatches li { + margin: 5px 5px 3px 0; +} + +.minicolors-swatches .minicolors-swatch { + position: relative; + float: left; /* LTR */ + cursor: pointer; + margin:0 4px 0 0; /* LTR */ +} +[dir=rtl] .minicolors-swatches .minicolors-swatch { + float: right; + margin:0 0 0 4px; +} + +.minicolors-with-opacity .minicolors-swatches .minicolors-swatch { + margin-right: 7px; /* LTR */ +} +[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch { + margin-right: 0; + margin-left: 7px; +} + +.minicolors-swatch.selected { + border-color: #000; +} + +/* Inline controls */ +.minicolors-inline { + display: inline-block; +} + +.minicolors-inline .minicolors-input { + display: none !important; +} + +.minicolors-inline .minicolors-panel { + position: relative; + top: auto; + left: auto; /* LTR */ + box-shadow: none; + z-index: auto; + display: inline-block; +} +[dir=rtl] .minicolors-inline .minicolors-panel { + right: auto; +} + +/* Default theme */ +.minicolors-theme-default .minicolors-swatch { + top: 2px; + left: 2px; /* LTR */ + width: 18px; + height: 18px; +} +[dir=rtl] .minicolors-theme-default .minicolors-swatch { + right: 2px; +} +.minicolors-theme-default .minicolors-swatches .minicolors-swatch { + margin-bottom: 2px; + top: 0; + left: 0; /* LTR */ + width: 18px; + height: 18px; +} +[dir=rtl] .minicolors-theme-default .minicolors-swatches .minicolors-swatch { + right: 0; +} +.minicolors-theme-default.minicolors-position-right .minicolors-swatch { + left: auto; /* LTR */ + right: 3px; /* LTR */ +} +[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-swatch { + right: auto; + left: 3px; +} +.minicolors-theme-default.minicolors { + width: auto; + display: inline-block; +} +.minicolors-theme-default .minicolors-input { + height: 20px; + width: auto; + display: inline-block; + padding-left: 26px; /* LTR */ +} +[dir=rtl] .minicolors-theme-default .minicolors-input { + text-align: right; + unicode-bidi: plaintext; + padding-left: 1px; + padding-right: 26px; +} +.minicolors-theme-default.minicolors-position-right .minicolors-input { + padding-right: 26px; /* LTR */ + padding-left: inherit; /* LTR */ +} +[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-input { + padding-right: inherit; + padding-left: 26px; +} + +/* Bootstrap theme */ +.minicolors-theme-bootstrap .minicolors-swatch { + z-index: 2; + top: 3px; + left: 3px; /* LTR */ + width: 28px; + height: 28px; + border-radius: 3px; +} +[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch { + right: 3px; +} +.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch { + margin-bottom: 2px; + top: 0; + left: 0; /* LTR */ + width: 20px; + height: 20px; +} +[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch { + right: 0; +} +.minicolors-theme-bootstrap .minicolors-swatch-color { + border-radius: inherit; +} +.minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch { + left: auto; /* LTR */ + right: 3px; /* LTR */ +} +[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left > .minicolors-swatch { + right: auto; + left: 3px; +} +.minicolors-theme-bootstrap .minicolors-input { + float: none; + padding-left: 44px; /* LTR */ +} +[dir=rtl] .minicolors-theme-bootstrap .minicolors-input { + text-align: right; + unicode-bidi: plaintext; + padding-left: 12px; + padding-right: 44px; +} +.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input { + padding-right: 44px; /* LTR */ + padding-left: 12px; /* LTR */ +} +[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input { + padding-right: 12px; + padding-left: 44px; +} +.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch { + top: 4px; + left: 4px; /* LTR */ + width: 37px; + height: 37px; + border-radius: 5px; +} +[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch { + right: 4px; +} +.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch { + width: 24px; + height: 24px; +} +.minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch { + width: 18px; + height: 18px; +} +.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input { + border-top-left-radius: 0; /* LTR */ + border-bottom-left-radius: 0; /* LTR */ +} +[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input { + border-radius: 4px; +} +[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +/* bootstrap input-group rtl override */ +[dir=rtl] .input-group .form-control, +[dir=rtl] .input-group-addon, +[dir=rtl] .input-group-btn > .btn, +[dir=rtl] .input-group-btn > .btn-group > .btn, +[dir=rtl] .input-group-btn > .dropdown-toggle { + border: 1px solid #ccc; + border-radius: 4px; +} +[dir=rtl] .input-group .form-control:first-child, +[dir=rtl] .input-group-addon:first-child, +[dir=rtl] .input-group-btn:first-child > .btn, +[dir=rtl] .input-group-btn:first-child > .btn-group > .btn, +[dir=rtl] .input-group-btn:first-child > .dropdown-toggle, +[dir=rtl] .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +[dir=rtl] .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: 0; +} +[dir=rtl] .input-group .form-control:last-child, +[dir=rtl] .input-group-addon:last-child, +[dir=rtl] .input-group-btn:last-child > .btn, +[dir=rtl] .input-group-btn:last-child > .btn-group > .btn, +[dir=rtl] .input-group-btn:last-child > .dropdown-toggle, +[dir=rtl] .input-group-btn:first-child > .btn:not(:first-child), +[dir=rtl] .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +/* Semantic Ui theme */ +.minicolors-theme-semanticui .minicolors-swatch { + top: 0; + left: 0; /* LTR */ + padding: 18px; +} +[dir=rtl] .minicolors-theme-semanticui .minicolors-swatch { + right: 0; +} +.minicolors-theme-semanticui input { + text-indent: 30px; +} diff --git a/public/lib/jquery/minicolors/jquery.minicolors.js b/public/lib/jquery/minicolors/jquery.minicolors.js new file mode 100644 index 0000000..b3ac3b6 --- /dev/null +++ b/public/lib/jquery/minicolors/jquery.minicolors.js @@ -0,0 +1,1127 @@ +// +// jQuery MiniColors: A tiny color picker built on jQuery +// +// Developed by Cory LaViska for A Beautiful Site, LLC +// +// Licensed under the MIT license: http://opensource.org/licenses/MIT +// +(function (factory) { + if(typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if(typeof exports === 'object') { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + 'use strict'; + + // Defaults + $.minicolors = { + defaults: { + animationSpeed: 50, + animationEasing: 'swing', + change: null, + changeDelay: 0, + control: 'hue', + defaultValue: '', + format: 'hex', + hide: null, + hideSpeed: 100, + inline: false, + keywords: '', + letterCase: 'lowercase', + opacity: false, + position: 'bottom', + show: null, + showSpeed: 100, + theme: 'default', + swatches: [] + } + }; + + // Public methods + $.extend($.fn, { + minicolors: function(method, data) { + + switch(method) { + // Destroy the control + case 'destroy': + $(this).each(function() { + destroy($(this)); + }); + return $(this); + + // Hide the color picker + case 'hide': + hide(); + return $(this); + + // Get/set opacity + case 'opacity': + // Getter + if(data === undefined) { + // Getter + return $(this).attr('data-opacity'); + } else { + // Setter + $(this).each(function() { + updateFromInput($(this).attr('data-opacity', data)); + }); + } + return $(this); + + // Get an RGB(A) object based on the current color/opacity + case 'rgbObject': + return rgbObject($(this), method === 'rgbaObject'); + + // Get an RGB(A) string based on the current color/opacity + case 'rgbString': + case 'rgbaString': + return rgbString($(this), method === 'rgbaString'); + + // Get/set settings on the fly + case 'settings': + if(data === undefined) { + return $(this).data('minicolors-settings'); + } else { + // Setter + $(this).each(function() { + var settings = $(this).data('minicolors-settings') || {}; + destroy($(this)); + $(this).minicolors($.extend(true, settings, data)); + }); + } + return $(this); + + // Show the color picker + case 'show': + show($(this).eq(0)); + return $(this); + + // Get/set the hex color value + case 'value': + if(data === undefined) { + // Getter + return $(this).val(); + } else { + // Setter + $(this).each(function() { + if(typeof(data) === 'object' && data !== null) { + if(data.opacity !== undefined) { + $(this).attr('data-opacity', keepWithin(data.opacity, 0, 1)); + } + if(data.color) { + $(this).val(data.color); + } + } else { + $(this).val(data); + } + updateFromInput($(this)); + }); + } + return $(this); + + // Initializes the control + default: + if(method !== 'create') data = method; + $(this).each(function() { + init($(this), data); + }); + return $(this); + + } + + } + }); + + // Initialize input elements + function init(input, settings) { + var minicolors = $('
    '); + var defaults = $.minicolors.defaults; + var name; + var size; + var swatches; + var swatch; + var swatchString; + var panel; + var i; + + // Do nothing if already initialized + if(input.data('minicolors-initialized')) return; + + // Handle settings + settings = $.extend(true, {}, defaults, settings); + + // The wrapper + minicolors + .addClass('minicolors-theme-' + settings.theme) + .toggleClass('minicolors-with-opacity', settings.opacity); + + // Custom positioning + if(settings.position !== undefined) { + $.each(settings.position.split(' '), function() { + minicolors.addClass('minicolors-position-' + this); + }); + } + + // Input size + if(settings.format === 'rgb') { + size = settings.opacity ? '25' : '20'; + } else { + size = settings.keywords ? '11' : '7'; + } + + // The input + input + .addClass('minicolors-input') + .data('minicolors-initialized', false) + .data('minicolors-settings', settings) + .prop('size', size) + .wrap(minicolors) + .after( + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + ); + + // The swatch + if(!settings.inline) { + input.after(''); + input.next('.minicolors-input-swatch').on('click', function(event) { + event.preventDefault(); + input.trigger('focus'); + }); + } + + // Prevent text selection in IE + panel = input.parent().find('.minicolors-panel'); + panel.on('selectstart', function() { return false; }).end(); + + // Swatches + if(settings.swatches && settings.swatches.length !== 0) { + panel.addClass('minicolors-with-swatches'); + swatches = $('
      ') + .appendTo(panel); + for(i = 0; i < settings.swatches.length; ++i) { + // allow for custom objects as swatches + if($.type(settings.swatches[i]) === 'object') { + name = settings.swatches[i].name; + swatch = settings.swatches[i].color; + } else { + name = ''; + swatch = settings.swatches[i]; + } + swatchString = swatch; + swatch = isRgb(swatch) ? parseRgb(swatch, true) : hex2rgb(parseHex(swatch, true)); + $('
    • ') + .appendTo(swatches) + .data('swatch-color', swatchString) + .find('.minicolors-swatch-color') + .css({ + backgroundColor: rgb2hex(swatch), + opacity: String(swatch.a) + }); + settings.swatches[i] = swatch; + } + } + + // Inline controls + if(settings.inline) input.parent().addClass('minicolors-inline'); + + updateFromInput(input, false); + + input.data('minicolors-initialized', true); + } + + // Returns the input back to its original state + function destroy(input) { + var minicolors = input.parent(); + + // Revert the input element + input + .removeData('minicolors-initialized') + .removeData('minicolors-settings') + .removeProp('size') + .removeClass('minicolors-input'); + + // Remove the wrap and destroy whatever remains + minicolors.before(input).remove(); + } + + // Shows the specified dropdown panel + function show(input) { + var minicolors = input.parent(); + var panel = minicolors.find('.minicolors-panel'); + var settings = input.data('minicolors-settings'); + + // Do nothing if uninitialized, disabled, inline, or already open + if( + !input.data('minicolors-initialized') || + input.prop('disabled') || + minicolors.hasClass('minicolors-inline') || + minicolors.hasClass('minicolors-focus') + ) return; + + hide(); + + minicolors.addClass('minicolors-focus'); + if (panel.animate) { + panel + .stop(true, true) + .fadeIn(settings.showSpeed, function () { + if (settings.show) settings.show.call(input.get(0)); + }); + } else { + panel.show(); + if (settings.show) settings.show.call(input.get(0)); + } + } + + // Hides all dropdown panels + function hide() { + $('.minicolors-focus').each(function() { + var minicolors = $(this); + var input = minicolors.find('.minicolors-input'); + var panel = minicolors.find('.minicolors-panel'); + var settings = input.data('minicolors-settings'); + + if (panel.animate) { + panel.fadeOut(settings.hideSpeed, function () { + if (settings.hide) settings.hide.call(input.get(0)); + minicolors.removeClass('minicolors-focus'); + }); + } else { + panel.hide(); + if (settings.hide) settings.hide.call(input.get(0)); + minicolors.removeClass('minicolors-focus'); + } + }); + } + + // Moves the selected picker + function move(target, event, animate) { + var input = target.parents('.minicolors').find('.minicolors-input'); + var settings = input.data('minicolors-settings'); + var picker = target.find('[class$=-picker]'); + var offsetX = target.offset().left; + var offsetY = target.offset().top; + var x = Math.round(event.pageX - offsetX); + var y = Math.round(event.pageY - offsetY); + var duration = animate ? settings.animationSpeed : 0; + var wx, wy, r, phi, styles; + + // Touch support + if(event.originalEvent.changedTouches) { + x = event.originalEvent.changedTouches[0].pageX - offsetX; + y = event.originalEvent.changedTouches[0].pageY - offsetY; + } + + // Constrain picker to its container + if(x < 0) x = 0; + if(y < 0) y = 0; + if(x > target.width()) x = target.width(); + if(y > target.height()) y = target.height(); + + // Constrain color wheel values to the wheel + if(target.parent().is('.minicolors-slider-wheel') && picker.parent().is('.minicolors-grid')) { + wx = 75 - x; + wy = 75 - y; + r = Math.sqrt(wx * wx + wy * wy); + phi = Math.atan2(wy, wx); + if(phi < 0) phi += Math.PI * 2; + if(r > 75) { + r = 75; + x = 75 - (75 * Math.cos(phi)); + y = 75 - (75 * Math.sin(phi)); + } + x = Math.round(x); + y = Math.round(y); + } + + // Move the picker + styles = { + top: y + 'px' + }; + if(target.is('.minicolors-grid')) { + styles.left = x + 'px'; + } + if (picker.animate) { + picker + .stop(true) + .animate(styles, duration, settings.animationEasing, function() { + updateFromControl(input, target); + }); + } else { + picker + .css(styles); + updateFromControl(input, target); + } + } + + // Sets the input based on the color picker values + function updateFromControl(input, target) { + + function getCoords(picker, container) { + var left, top; + if(!picker.length || !container) return null; + left = picker.offset().left; + top = picker.offset().top; + + return { + x: left - container.offset().left + (picker.outerWidth() / 2), + y: top - container.offset().top + (picker.outerHeight() / 2) + }; + } + + var hue, saturation, brightness, x, y, r, phi; + var hex = input.val(); + var opacity = input.attr('data-opacity'); + + // Helpful references + var minicolors = input.parent(); + var settings = input.data('minicolors-settings'); + var swatch = minicolors.find('.minicolors-input-swatch'); + + // Panel objects + var grid = minicolors.find('.minicolors-grid'); + var slider = minicolors.find('.minicolors-slider'); + var opacitySlider = minicolors.find('.minicolors-opacity-slider'); + + // Picker objects + var gridPicker = grid.find('[class$=-picker]'); + var sliderPicker = slider.find('[class$=-picker]'); + var opacityPicker = opacitySlider.find('[class$=-picker]'); + + // Picker positions + var gridPos = getCoords(gridPicker, grid); + var sliderPos = getCoords(sliderPicker, slider); + var opacityPos = getCoords(opacityPicker, opacitySlider); + + // Handle colors + if(target.is('.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider')) { + + // Determine HSB values + switch(settings.control) { + case 'wheel': + // Calculate hue, saturation, and brightness + x = (grid.width() / 2) - gridPos.x; + y = (grid.height() / 2) - gridPos.y; + r = Math.sqrt(x * x + y * y); + phi = Math.atan2(y, x); + if(phi < 0) phi += Math.PI * 2; + if(r > 75) { + r = 75; + gridPos.x = 69 - (75 * Math.cos(phi)); + gridPos.y = 69 - (75 * Math.sin(phi)); + } + saturation = keepWithin(r / 0.75, 0, 100); + hue = keepWithin(phi * 180 / Math.PI, 0, 360); + brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); + break; + + case 'saturation': + // Calculate hue, saturation, and brightness + hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360); + saturation = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: brightness })); + minicolors.find('.minicolors-grid-inner').css('opacity', saturation / 100); + break; + + case 'brightness': + // Calculate hue, saturation, and brightness + hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360); + saturation = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); + minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (brightness / 100)); + break; + + default: + // Calculate hue, saturation, and brightness + hue = keepWithin(360 - parseInt(sliderPos.y * (360 / slider.height()), 10), 0, 360); + saturation = keepWithin(Math.floor(gridPos.x * (100 / grid.width())), 0, 100); + brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); + hex = hsb2hex({ + h: hue, + s: saturation, + b: brightness + }); + + // Update UI + grid.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: 100 })); + break; + } + + // Handle opacity + if(settings.opacity) { + opacity = parseFloat(1 - (opacityPos.y / opacitySlider.height())).toFixed(2); + } else { + opacity = 1; + } + + updateInput(input, hex, opacity); + } + else { + // Set swatch color + swatch.find('span').css({ + backgroundColor: hex, + opacity: String(opacity) + }); + + // Handle change event + doChange(input, hex, opacity); + } + } + + // Sets the value of the input and does the appropriate conversions + // to respect settings, also updates the swatch + function updateInput(input, value, opacity) { + var rgb; + + // Helpful references + var minicolors = input.parent(); + var settings = input.data('minicolors-settings'); + var swatch = minicolors.find('.minicolors-input-swatch'); + + if(settings.opacity) input.attr('data-opacity', opacity); + + // Set color string + if(settings.format === 'rgb') { + // Returns RGB(A) string + + // Checks for input format and does the conversion + if(isRgb(value)) { + rgb = parseRgb(value, true); + } + else { + rgb = hex2rgb(parseHex(value, true)); + } + + opacity = input.attr('data-opacity') === '' ? 1 : keepWithin(parseFloat(input.attr('data-opacity')).toFixed(2), 0, 1); + if(isNaN(opacity) || !settings.opacity) opacity = 1; + + if(input.minicolors('rgbObject').a <= 1 && rgb && settings.opacity) { + // Set RGBA string if alpha + value = 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')'; + } else { + // Set RGB string (alpha = 1) + value = 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')'; + } + } else { + // Returns hex color + + // Checks for input format and does the conversion + if(isRgb(value)) { + value = rgbString2hex(value); + } + + value = convertCase(value, settings.letterCase); + } + + // Update value from picker + input.val(value); + + // Set swatch color + swatch.find('span').css({ + backgroundColor: value, + opacity: String(opacity) + }); + + // Handle change event + doChange(input, value, opacity); + } + + // Sets the color picker values from the input + function updateFromInput(input, preserveInputValue) { + var hex, hsb, opacity, keywords, alpha, value, x, y, r, phi; + + // Helpful references + var minicolors = input.parent(); + var settings = input.data('minicolors-settings'); + var swatch = minicolors.find('.minicolors-input-swatch'); + + // Panel objects + var grid = minicolors.find('.minicolors-grid'); + var slider = minicolors.find('.minicolors-slider'); + var opacitySlider = minicolors.find('.minicolors-opacity-slider'); + + // Picker objects + var gridPicker = grid.find('[class$=-picker]'); + var sliderPicker = slider.find('[class$=-picker]'); + var opacityPicker = opacitySlider.find('[class$=-picker]'); + + // Determine hex/HSB values + if(isRgb(input.val())) { + // If input value is a rgb(a) string, convert it to hex color and update opacity + hex = rgbString2hex(input.val()); + alpha = keepWithin(parseFloat(getAlpha(input.val())).toFixed(2), 0, 1); + if(alpha) { + input.attr('data-opacity', alpha); + } + } else { + hex = convertCase(parseHex(input.val(), true), settings.letterCase); + } + + if(!hex){ + hex = convertCase(parseInput(settings.defaultValue, true), settings.letterCase); + } + hsb = hex2hsb(hex); + + // Get array of lowercase keywords + keywords = !settings.keywords ? [] : $.map(settings.keywords.split(','), function(a) { + return $.trim(a.toLowerCase()); + }); + + // Set color string + if(input.val() !== '' && $.inArray(input.val().toLowerCase(), keywords) > -1) { + value = convertCase(input.val()); + } else { + value = isRgb(input.val()) ? parseRgb(input.val()) : hex; + } + + // Update input value + if(!preserveInputValue) input.val(value); + + // Determine opacity value + if(settings.opacity) { + // Get from data-opacity attribute and keep within 0-1 range + opacity = input.attr('data-opacity') === '' ? 1 : keepWithin(parseFloat(input.attr('data-opacity')).toFixed(2), 0, 1); + if(isNaN(opacity)) opacity = 1; + input.attr('data-opacity', opacity); + swatch.find('span').css('opacity', String(opacity)); + + // Set opacity picker position + y = keepWithin(opacitySlider.height() - (opacitySlider.height() * opacity), 0, opacitySlider.height()); + opacityPicker.css('top', y + 'px'); + } + + // Set opacity to zero if input value is transparent + if(input.val().toLowerCase() === 'transparent') { + swatch.find('span').css('opacity', String(0)); + } + + // Update swatch + swatch.find('span').css('backgroundColor', hex); + + // Determine picker locations + switch(settings.control) { + case 'wheel': + // Set grid position + r = keepWithin(Math.ceil(hsb.s * 0.75), 0, grid.height() / 2); + phi = hsb.h * Math.PI / 180; + x = keepWithin(75 - Math.cos(phi) * r, 0, grid.width()); + y = keepWithin(75 - Math.sin(phi) * r, 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = 150 - (hsb.b / (100 / grid.height())); + if(hex === '') y = 0; + sliderPicker.css('top', y + 'px'); + + // Update panel color + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); + break; + + case 'saturation': + // Set grid position + x = keepWithin((5 * hsb.h) / 12, 0, 150); + y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.s * (slider.height() / 100)), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: hsb.b })); + minicolors.find('.minicolors-grid-inner').css('opacity', hsb.s / 100); + break; + + case 'brightness': + // Set grid position + x = keepWithin((5 * hsb.h) / 12, 0, 150); + y = keepWithin(grid.height() - Math.ceil(hsb.s / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.b * (slider.height() / 100)), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update UI + slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); + minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (hsb.b / 100)); + break; + + default: + // Set grid position + x = keepWithin(Math.ceil(hsb.s / (100 / grid.width())), 0, grid.width()); + y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); + gridPicker.css({ + top: y + 'px', + left: x + 'px' + }); + + // Set slider position + y = keepWithin(slider.height() - (hsb.h / (360 / slider.height())), 0, slider.height()); + sliderPicker.css('top', y + 'px'); + + // Update panel color + grid.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: 100 })); + break; + } + + // Fire change event, but only if minicolors is fully initialized + if(input.data('minicolors-initialized')) { + doChange(input, value, opacity); + } + } + + // Runs the change and changeDelay callbacks + function doChange(input, value, opacity) { + var settings = input.data('minicolors-settings'); + var lastChange = input.data('minicolors-lastChange'); + var obj, sel, i; + + // Only run if it actually changed + if(!lastChange || lastChange.value !== value || lastChange.opacity !== opacity) { + + // Remember last-changed value + input.data('minicolors-lastChange', { + value: value, + opacity: opacity + }); + + // Check and select applicable swatch + if(settings.swatches && settings.swatches.length !== 0) { + if(!isRgb(value)) { + obj = hex2rgb(value); + } + else { + obj = parseRgb(value, true); + } + sel = -1; + for(i = 0; i < settings.swatches.length; ++i) { + if(obj.r === settings.swatches[i].r && obj.g === settings.swatches[i].g && obj.b === settings.swatches[i].b && obj.a === settings.swatches[i].a) { + sel = i; + break; + } + } + + input.parent().find('.minicolors-swatches .minicolors-swatch').removeClass('selected'); + if(sel !== -1) { + input.parent().find('.minicolors-swatches .minicolors-swatch').eq(i).addClass('selected'); + } + } + + // Fire change event + if(settings.change) { + if(settings.changeDelay) { + // Call after a delay + clearTimeout(input.data('minicolors-changeTimeout')); + input.data('minicolors-changeTimeout', setTimeout(function() { + settings.change.call(input.get(0), value, opacity); + }, settings.changeDelay)); + } else { + // Call immediately + settings.change.call(input.get(0), value, opacity); + } + } + input.trigger('change').trigger('input'); + } + } + + // Generates an RGB(A) object based on the input's value + function rgbObject(input) { + var rgb, + opacity = $(input).attr('data-opacity'); + if( isRgb($(input).val()) ) { + rgb = parseRgb($(input).val(), true); + } else { + var hex = parseHex($(input).val(), true); + rgb = hex2rgb(hex); + } + if( !rgb ) return null; + if( opacity !== undefined ) $.extend(rgb, { a: parseFloat(opacity) }); + return rgb; + } + + // Generates an RGB(A) string based on the input's value + function rgbString(input, alpha) { + var rgb, + opacity = $(input).attr('data-opacity'); + if( isRgb($(input).val()) ) { + rgb = parseRgb($(input).val(), true); + } else { + var hex = parseHex($(input).val(), true); + rgb = hex2rgb(hex); + } + if( !rgb ) return null; + if( opacity === undefined ) opacity = 1; + if( alpha ) { + return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')'; + } else { + return 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')'; + } + } + + // Converts to the letter case specified in settings + function convertCase(string, letterCase) { + return letterCase === 'uppercase' ? string.toUpperCase() : string.toLowerCase(); + } + + // Parses a string and returns a valid hex string when possible + function parseHex(string, expand) { + string = string.replace(/^#/g, ''); + if(!string.match(/^[A-F0-9]{3,6}/ig)) return ''; + if(string.length !== 3 && string.length !== 6) return ''; + if(string.length === 3 && expand) { + string = string[0] + string[0] + string[1] + string[1] + string[2] + string[2]; + } + return '#' + string; + } + + // Parses a string and returns a valid RGB(A) string when possible + function parseRgb(string, obj) { + var values = string.replace(/[^\d,.]/g, ''); + var rgba = values.split(','); + + rgba[0] = keepWithin(parseInt(rgba[0], 10), 0, 255); + rgba[1] = keepWithin(parseInt(rgba[1], 10), 0, 255); + rgba[2] = keepWithin(parseInt(rgba[2], 10), 0, 255); + if(rgba[3] !== undefined) { + rgba[3] = keepWithin(parseFloat(rgba[3], 10), 0, 1); + } + + // Return RGBA object + if( obj ) { + if (rgba[3] !== undefined) { + return { + r: rgba[0], + g: rgba[1], + b: rgba[2], + a: rgba[3] + }; + } else { + return { + r: rgba[0], + g: rgba[1], + b: rgba[2] + }; + } + } + + // Return RGBA string + if(typeof(rgba[3]) !== 'undefined' && rgba[3] <= 1) { + return 'rgba(' + rgba[0] + ', ' + rgba[1] + ', ' + rgba[2] + ', ' + rgba[3] + ')'; + } else { + return 'rgb(' + rgba[0] + ', ' + rgba[1] + ', ' + rgba[2] + ')'; + } + + } + + // Parses a string and returns a valid color string when possible + function parseInput(string, expand) { + if(isRgb(string)) { + // Returns a valid rgb(a) string + return parseRgb(string); + } else { + return parseHex(string, expand); + } + } + + // Keeps value within min and max + function keepWithin(value, min, max) { + if(value < min) value = min; + if(value > max) value = max; + return value; + } + + // Checks if a string is a valid RGB(A) string + function isRgb(string) { + var rgb = string.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); + return (rgb && rgb.length === 4) ? true : false; + } + + // Function to get alpha from a RGB(A) string + function getAlpha(rgba) { + rgba = rgba.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i); + return (rgba && rgba.length === 6) ? rgba[4] : '1'; + } + + // Converts an HSB object to an RGB object + function hsb2rgb(hsb) { + var rgb = {}; + var h = Math.round(hsb.h); + var s = Math.round(hsb.s * 255 / 100); + var v = Math.round(hsb.b * 255 / 100); + if(s === 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + var t1 = v; + var t2 = (255 - s) * v / 255; + var t3 = (t1 - t2) * (h % 60) / 60; + if(h === 360) h = 0; + if(h < 60) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; } + else if(h < 120) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; } + else if(h < 180) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; } + else if(h < 240) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; } + else if(h < 300) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; } + else if(h < 360) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; } + else { rgb.r = 0; rgb.g = 0; rgb.b = 0; } + } + return { + r: Math.round(rgb.r), + g: Math.round(rgb.g), + b: Math.round(rgb.b) + }; + } + + // Converts an RGB string to a hex string + function rgbString2hex(rgb){ + rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); + return (rgb && rgb.length === 4) ? '#' + + ('0' + parseInt(rgb[1],10).toString(16)).slice(-2) + + ('0' + parseInt(rgb[2],10).toString(16)).slice(-2) + + ('0' + parseInt(rgb[3],10).toString(16)).slice(-2) : ''; + } + + // Converts an RGB object to a hex string + function rgb2hex(rgb) { + var hex = [ + rgb.r.toString(16), + rgb.g.toString(16), + rgb.b.toString(16) + ]; + $.each(hex, function(nr, val) { + if(val.length === 1) hex[nr] = '0' + val; + }); + return '#' + hex.join(''); + } + + // Converts an HSB object to a hex string + function hsb2hex(hsb) { + return rgb2hex(hsb2rgb(hsb)); + } + + // Converts a hex string to an HSB object + function hex2hsb(hex) { + var hsb = rgb2hsb(hex2rgb(hex)); + if(hsb.s === 0) hsb.h = 360; + return hsb; + } + + // Converts an RGB object to an HSB object + function rgb2hsb(rgb) { + var hsb = { h: 0, s: 0, b: 0 }; + var min = Math.min(rgb.r, rgb.g, rgb.b); + var max = Math.max(rgb.r, rgb.g, rgb.b); + var delta = max - min; + hsb.b = max; + hsb.s = max !== 0 ? 255 * delta / max : 0; + if(hsb.s !== 0) { + if(rgb.r === max) { + hsb.h = (rgb.g - rgb.b) / delta; + } else if(rgb.g === max) { + hsb.h = 2 + (rgb.b - rgb.r) / delta; + } else { + hsb.h = 4 + (rgb.r - rgb.g) / delta; + } + } else { + hsb.h = -1; + } + hsb.h *= 60; + if(hsb.h < 0) { + hsb.h += 360; + } + hsb.s *= 100/255; + hsb.b *= 100/255; + return hsb; + } + + // Converts a hex string to an RGB object + function hex2rgb(hex) { + hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + return { + r: hex >> 16, + g: (hex & 0x00FF00) >> 8, + b: (hex & 0x0000FF) + }; + } + + // Handle events + $([document]) + // Hide on clicks outside of the control + .on('mousedown.minicolors touchstart.minicolors', function(event) { + if(!$(event.target).parents().add(event.target).hasClass('minicolors')) { + hide(); + } + }) + // Start moving + .on('mousedown.minicolors touchstart.minicolors', '.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider', function(event) { + var target = $(this); + event.preventDefault(); + $(event.delegateTarget).data('minicolors-target', target); + move(target, event, true); + }) + // Move pickers + .on('mousemove.minicolors touchmove.minicolors', function(event) { + var target = $(event.delegateTarget).data('minicolors-target'); + if(target) move(target, event); + }) + // Stop moving + .on('mouseup.minicolors touchend.minicolors', function() { + $(this).removeData('minicolors-target'); + }) + // Selected a swatch + .on('click.minicolors', '.minicolors-swatches li', function(event) { + event.preventDefault(); + var target = $(this), input = target.parents('.minicolors').find('.minicolors-input'), color = target.data('swatch-color'); + updateInput(input, color, getAlpha(color)); + updateFromInput(input); + }) + // Show panel when swatch is clicked + .on('mousedown.minicolors touchstart.minicolors', '.minicolors-input-swatch', function(event) { + var input = $(this).parent().find('.minicolors-input'); + event.preventDefault(); + show(input); + }) + // Show on focus + .on('focus.minicolors', '.minicolors-input', function() { + var input = $(this); + if(!input.data('minicolors-initialized')) return; + show(input); + }) + // Update value on blur + .on('blur.minicolors', '.minicolors-input', function() { + var input = $(this); + var settings = input.data('minicolors-settings'); + var keywords; + var hex; + var rgba; + var swatchOpacity; + var value; + + if(!input.data('minicolors-initialized')) return; + + // Get array of lowercase keywords + keywords = !settings.keywords ? [] : $.map(settings.keywords.split(','), function(a) { + return $.trim(a.toLowerCase()); + }); + + // Set color string + if(input.val() !== '' && $.inArray(input.val().toLowerCase(), keywords) > -1) { + value = input.val(); + } else { + // Get RGBA values for easy conversion + if(isRgb(input.val())) { + rgba = parseRgb(input.val(), true); + } else { + hex = parseHex(input.val(), true); + rgba = hex ? hex2rgb(hex) : null; + } + + // Convert to format + if(rgba === null) { + value = settings.defaultValue; + } else if(settings.format === 'rgb') { + value = settings.opacity ? + parseRgb('rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + input.attr('data-opacity') + ')') : + parseRgb('rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')'); + } else { + value = rgb2hex(rgba); + } + } + + // Update swatch opacity + swatchOpacity = settings.opacity ? input.attr('data-opacity') : 1; + if(value.toLowerCase() === 'transparent') swatchOpacity = 0; + input + .closest('.minicolors') + .find('.minicolors-input-swatch > span') + .css('opacity', String(swatchOpacity)); + + // Set input value + input.val(value); + + // Is it blank? + if(input.val() === '') input.val(parseInput(settings.defaultValue, true)); + + // Adjust case + input.val(convertCase(input.val(), settings.letterCase)); + + }) + // Handle keypresses + .on('keydown.minicolors', '.minicolors-input', function(event) { + var input = $(this); + if(!input.data('minicolors-initialized')) return; + switch(event.which) { + case 9: // tab + hide(); + break; + case 13: // enter + case 27: // esc + hide(); + input.blur(); + break; + } + }) + // Update on keyup + .on('keyup.minicolors', '.minicolors-input', function() { + var input = $(this); + if(!input.data('minicolors-initialized')) return; + updateFromInput(input, true); + }) + // Update on paste + .on('paste.minicolors', '.minicolors-input', function() { + var input = $(this); + if(!input.data('minicolors-initialized')) return; + setTimeout(function() { + updateFromInput(input, true); + }, 1); + }); +})); diff --git a/public/lib/jquery/minicolors/jquery.minicolors.min.js b/public/lib/jquery/minicolors/jquery.minicolors.min.js new file mode 100644 index 0000000..36fe0b3 --- /dev/null +++ b/public/lib/jquery/minicolors/jquery.minicolors.min.js @@ -0,0 +1,8 @@ +// +// jQuery MiniColors: A tiny color picker built on jQuery +// +// Developed by Cory LaViska for A Beautiful Site, LLC +// +// Licensed under the MIT license: http://opensource.org/licenses/MIT +// +!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(C){"use strict";function o(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function s(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(a(),t.addClass("minicolors-focus"),o.animate?o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}):(o.show(),s.show&&s.show.call(i.get(0))))}function a(){C(".minicolors-focus").each(function(){var i=C(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),s=t.data("minicolors-settings");o.animate?o.fadeOut(s.hideSpeed,function(){s.hide&&s.hide.call(t.get(0)),i.removeClass("minicolors-focus")}):(o.hide(),s.hide&&s.hide.call(t.get(0)),i.removeClass("minicolors-focus"))})}function n(i,t,o){var s,a,n,r,e,c=i.parents(".minicolors").find(".minicolors-input"),l=c.data("minicolors-settings"),h=i.find("[class$=-picker]"),d=i.offset().left,p=i.offset().top,u=Math.round(t.pageX-d),g=Math.round(t.pageY-p),m=o?l.animationSpeed:0;t.originalEvent.changedTouches&&(u=t.originalEvent.changedTouches[0].pageX-d,g=t.originalEvent.changedTouches[0].pageY-p),u<0&&(u=0),g<0&&(g=0),u>i.width()&&(u=i.width()),g>i.height()&&(g=i.height()),i.parent().is(".minicolors-slider-wheel")&&h.parent().is(".minicolors-grid")&&(s=75-u,a=75-g,n=Math.sqrt(s*s+a*a),(r=Math.atan2(a,s))<0&&(r+=2*Math.PI),75>16,g:(65280&i)>>8,b:255&i}}C.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom",show:null,showSpeed:100,theme:"default",swatches:[]}},C.extend(C.fn,{minicolors:function(i,t){switch(i){case"destroy":return C(this).each(function(){o(C(this))}),C(this);case"hide":return a(),C(this);case"opacity":return void 0===t?C(this).attr("data-opacity"):(C(this).each(function(){d(C(this).attr("data-opacity",t))}),C(this));case"rgbObject":return function(i){var t,o=C(i).attr("data-opacity");{var s;t=T(C(i).val())?I(C(i).val(),!0):(s=M(C(i).val(),!0),L(s))}if(!t)return null;void 0!==o&&C.extend(t,{a:parseFloat(o)});return t}(C(this));case"rgbString":case"rgbaString":return function(i,t){var o,s=C(i).attr("data-opacity");{var a;o=T(C(i).val())?I(C(i).val(),!0):(a=M(C(i).val(),!0),L(a))}if(!o)return null;void 0===s&&(s=1);return t?"rgba("+o.r+", "+o.g+", "+o.b+", "+parseFloat(s)+")":"rgb("+o.r+", "+o.g+", "+o.b+")"}(C(this),"rgbaString"===i);case"settings":return void 0===t?C(this).data("minicolors-settings"):(C(this).each(function(){var i=C(this).data("minicolors-settings")||{};o(C(this)),C(this).minicolors(C.extend(!0,i,t))}),C(this));case"show":return s(C(this).eq(0)),C(this);case"value":return void 0===t?C(this).val():(C(this).each(function(){"object"==typeof t&&null!==t?(void 0!==t.opacity&&C(this).attr("data-opacity",F(t.opacity,0,1)),t.color&&C(this).val(t.color)):C(this).val(t),d(C(this))}),C(this));default:return"create"!==i&&(t=i),C(this).each(function(){!function(t,i){var o,s,a,n,r,e,c,l=C('
      '),h=C.minicolors.defaults;if(t.data("minicolors-initialized"))return;i=C.extend(!0,{},h,i),l.addClass("minicolors-theme-"+i.theme).toggleClass("minicolors-with-opacity",i.opacity),void 0!==i.position&&C.each(i.position.split(" "),function(){l.addClass("minicolors-position-"+this)});s="rgb"===i.format?i.opacity?"25":"20":i.keywords?"11":"7";t.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",i).prop("size",s).wrap(l).after('
      '),i.inline||(t.after(''),t.next(".minicolors-input-swatch").on("click",function(i){i.preventDefault(),t.trigger("focus")}));if((e=t.parent().find(".minicolors-panel")).on("selectstart",function(){return!1}).end(),i.swatches&&0!==i.swatches.length)for(e.addClass("minicolors-with-swatches"),a=C('
        ').appendTo(e),c=0;c').appendTo(a).data("swatch-color",r).find(".minicolors-swatch-color").css({backgroundColor:p(n),opacity:String(n.a)}),i.swatches[c]=n;i.inline&&t.parent().addClass("minicolors-inline");d(t,!1),t.data("minicolors-initialized",!0)}(C(this),t)}),C(this)}}}),C([document]).on("mousedown.minicolors touchstart.minicolors",function(i){C(i.target).parents().add(i.target).hasClass("minicolors")||a()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=C(this);i.preventDefault(),C(i.delegateTarget).data("minicolors-target",t),n(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=C(i.delegateTarget).data("minicolors-target");t&&n(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){C(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(i){i.preventDefault();var t=C(this),o=t.parents(".minicolors").find(".minicolors-input"),s=t.data("swatch-color");x(o,s,D(s)),d(o)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(i){var t=C(this).parent().find(".minicolors-input");i.preventDefault(),s(t)}).on("focus.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&s(i)}).on("blur.minicolors",".minicolors-input",function(){var i,t,o,s,a,n=C(this),r=n.data("minicolors-settings");n.data("minicolors-initialized")&&(i=r.keywords?C.map(r.keywords.split(","),function(i){return C.trim(i.toLowerCase())}):[],a=""!==n.val()&&-1 span").css("opacity",String(s)),n.val(a),""===n.val()&&n.val(z(r.defaultValue,!0)),n.val(k(n.val(),r.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=C(this);if(t.data("minicolors-initialized"))switch(i.which){case 9:a();break;case 13:case 27:a(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&d(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=C(this);i.data("minicolors-initialized")&&setTimeout(function(){d(i,!0)},1)})}); \ No newline at end of file diff --git a/public/lib/jquery/minicolors/jquery.minicolors.png b/public/lib/jquery/minicolors/jquery.minicolors.png new file mode 100644 index 0000000..bccc201 Binary files /dev/null and b/public/lib/jquery/minicolors/jquery.minicolors.png differ diff --git a/public/lib/jquery/range/range.css b/public/lib/jquery/range/range.css new file mode 100644 index 0000000..8a4b824 --- /dev/null +++ b/public/lib/jquery/range/range.css @@ -0,0 +1,41 @@ +input[type=range] { + -webkit-appearance: none; + /*margin-left: 10px;*/ + display: initial; + border-radius: 5px; + /*这个属性设置使填充进度条时的图形为圆角*/ + background: -webkit-linear-gradient(#059CFA, #059CFA) no-repeat; + background-size: 0% 100%; + padding: 0px; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: 6px; + border-radius: 5px; + /*将轨道设为圆角的*/ + box-shadow: 0 1px 1px #def3f8, inset 0 .125em .125em #0d1112; + /*轨道内置阴影效果*/ +} + +input[type=range]:focus { + outline: none; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + height: 10px; + width: 10px; + margin-top: -2px; + /*使滑块超出轨道部分的偏移量相等*/ + background: #ffffff; + border-radius: 50%; + /*外观设置为圆形*/ + border: solid 0.125em rgba(205, 224, 230, 0.5); + /*设置边框*/ + box-shadow: 0 .125em .125em #3b4547; + /*添加底部阴影*/ +} \ No newline at end of file diff --git a/public/lib/jquery/range/range.js b/public/lib/jquery/range/range.js new file mode 100644 index 0000000..b37c26e --- /dev/null +++ b/public/lib/jquery/range/range.js @@ -0,0 +1,41 @@ +$.fn.range = function (cfg) { + cfg = cfg || {}; + + var $input = $(this); + + if (cfg.hasOwnProperty('min')) + $input.attr('min', cfg.min); + + if (cfg.hasOwnProperty('max')) + $input.attr('max', cfg.max); + + if (cfg.hasOwnProperty('step')) + $input.attr('step', cfg.step); + + if (cfg.hasOwnProperty('value')) + $input.val(cfg.value); + + function changeHandler(e) { + var max = Number($input.attr('max')); + var min = Number($input.attr('min')); + + var thisval = Number($input.val()); + + var bfb = Math.floor((thisval - min) * 100 / (max - min)); + $input.css('background-size', bfb + '% 100%'); + $input.attr('title', thisval); + + if (e && cfg.hasOwnProperty('onChange') && e.type !== "change")//IE下去掉 e.type !== "change" + cfg.onChange(thisval, bfb); + + return $input; + } + + + $input.change(changeHandler); + $input.on('input propertychange', changeHandler); + + changeHandler(); + + return this; +}; \ No newline at end of file diff --git a/public/lib/jquery/scrollTo/jquery.scrollTo.min.js b/public/lib/jquery/scrollTo/jquery.scrollTo.min.js new file mode 100644 index 0000000..65a020d --- /dev/null +++ b/public/lib/jquery/scrollTo/jquery.scrollTo.min.js @@ -0,0 +1,7 @@ +/** + * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1 0 && tId.length == 0) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + } + } + // event to node + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "switchNode" : + var isParent = data.nodeIsParent(setting, node); + if (!isParent) { + nodeEventType = ""; + } else if (tools.eqs(event.type, "click") + || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) { + nodeEventCallback = handler.onSwitchNode; + } else { + nodeEventType = ""; + } + break; + case "clickNode" : + nodeEventCallback = handler.onClickNode; + break; + } + } + // event to zTree + switch (treeEventType) { + case "mousedown" : + treeEventCallback = handler.onZTreeMousedown; + break; + case "mouseup" : + treeEventCallback = handler.onZTreeMouseup; + break; + case "dblclick" : + treeEventCallback = handler.onZTreeDblclick; + break; + case "contextmenu" : + treeEventCallback = handler.onZTreeContextmenu; + break; + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of core + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var r = data.getRoot(setting), + children = data.nodeChildren(setting, n); + n.level = level; + n.tId = setting.treeId + "_" + (++r.zId); + n.parentTId = parentNode ? parentNode.tId : null; + n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open; + var isParent = data.nodeIsParent(setting, n); + if (tools.isArray(children)) { + data.nodeIsParent(setting, n, true); + n.zAsync = true; + } else { + isParent = data.nodeIsParent(setting, n, isParent); + n.open = (isParent && !setting.async.enable) ? n.open : false; + n.zAsync = !isParent; + } + n.isFirstNode = isFirstNode; + n.isLastNode = isLastNode; + n.getParentNode = function () { + return data.getNodeCache(setting, n.parentTId); + }; + n.getPreNode = function () { + return data.getPreNode(setting, n); + }; + n.getNextNode = function () { + return data.getNextNode(setting, n); + }; + n.getIndex = function () { + return data.getNodeIndex(setting, n); + }; + n.getPath = function () { + return data.getNodePath(setting, n); + }; + n.isAjaxing = false; + data.fixPIdKeyValue(setting, n); + }, + _init = { + bind: [_bindEvent], + unbind: [_unbindEvent], + caches: [_initCache], + nodes: [_initNode], + proxys: [_eventProxy], + roots: [_initRoot], + beforeA: [], + afterA: [], + innerBeforeA: [], + innerAfterA: [], + zTreeTools: [] + }, + //method of operate data + data = { + addNodeCache: function (setting, node) { + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node; + }, + getNodeCacheId: function (tId) { + return tId.substring(tId.lastIndexOf("_") + 1); + }, + addAfterA: function (afterA) { + _init.afterA.push(afterA); + }, + addBeforeA: function (beforeA) { + _init.beforeA.push(beforeA); + }, + addInnerAfterA: function (innerAfterA) { + _init.innerAfterA.push(innerAfterA); + }, + addInnerBeforeA: function (innerBeforeA) { + _init.innerBeforeA.push(innerBeforeA); + }, + addInitBind: function (bindEvent) { + _init.bind.push(bindEvent); + }, + addInitUnBind: function (unbindEvent) { + _init.unbind.push(unbindEvent); + }, + addInitCache: function (initCache) { + _init.caches.push(initCache); + }, + addInitNode: function (initNode) { + _init.nodes.push(initNode); + }, + addInitProxy: function (initProxy, isFirst) { + if (!!isFirst) { + _init.proxys.splice(0, 0, initProxy); + } else { + _init.proxys.push(initProxy); + } + }, + addInitRoot: function (initRoot) { + _init.roots.push(initRoot); + }, + addNodesData: function (setting, parentNode, index, nodes) { + var children = data.nodeChildren(setting, parentNode), params; + if (!children) { + children = data.nodeChildren(setting, parentNode, []); + index = -1; + } else if (index >= children.length) { + index = -1; + } + + if (children.length > 0 && index === 0) { + children[0].isFirstNode = false; + view.setNodeLineIcos(setting, children[0]); + } else if (children.length > 0 && index < 0) { + children[children.length - 1].isLastNode = false; + view.setNodeLineIcos(setting, children[children.length - 1]); + } + data.nodeIsParent(setting, parentNode, true); + + if (index < 0) { + data.nodeChildren(setting, parentNode, children.concat(nodes)); + } else { + params = [index, 0].concat(nodes); + children.splice.apply(children, params); + } + }, + addSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + if (!data.isSelectedNode(setting, node)) { + root.curSelectedList.push(node); + } + }, + addCreatedNode: function (setting, node) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + root.createdNodes.push(node); + } + }, + addZTreeTools: function (zTreeTools) { + _init.zTreeTools.push(zTreeTools); + }, + exSetting: function (s) { + $.extend(true, _setting, s); + }, + fixPIdKeyValue: function (setting, node) { + if (setting.data.simpleData.enable) { + node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId; + } + }, + getAfterA: function (setting, node, array) { + for (var i = 0, j = _init.afterA.length; i < j; i++) { + _init.afterA[i].apply(this, arguments); + } + }, + getBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.beforeA.length; i < j; i++) { + _init.beforeA[i].apply(this, arguments); + } + }, + getInnerAfterA: function (setting, node, array) { + for (var i = 0, j = _init.innerAfterA.length; i < j; i++) { + _init.innerAfterA[i].apply(this, arguments); + } + }, + getInnerBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) { + _init.innerBeforeA[i].apply(this, arguments); + } + }, + getCache: function (setting) { + return caches[setting.treeId]; + }, + getNodeIndex: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return i; + } + } + return -1; + }, + getNextNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return (i == l ? null : children[i + 1]); + } + } + return null; + }, + getNodeByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return null; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + return nodes[i]; + } + var children = data.nodeChildren(setting, node); + var tmp = data.getNodeByParam(setting, children, key, value); + if (tmp) return tmp; + } + return null; + }, + getNodeCache: function (setting, tId) { + if (!tId) return null; + var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)]; + return n ? n : null; + }, + getNodePath: function (setting, node) { + if (!node) return null; + + var path; + if (node.parentTId) { + path = node.getParentNode().getPath(); + } else { + path = []; + } + + if (path) { + path.push(node); + } + + return path; + }, + getNodes: function (setting) { + return data.nodeChildren(setting, data.getRoot(setting)); + }, + getNodesByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParam(setting, children, key, value)); + } + return result; + }, + getNodesByParamFuzzy: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + value = value.toLowerCase(); + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value)); + } + return result; + }, + getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) { + if (!nodes) return (isSingle ? null : []); + var result = isSingle ? null : []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (tools.apply(filter, [node, invokeParam], false)) { + if (isSingle) { + return node; + } + result.push(node); + } + var children = data.nodeChildren(setting, node); + var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam); + if (isSingle && !!tmpResult) { + return tmpResult; + } + result = isSingle ? tmpResult : result.concat(tmpResult); + } + return result; + }, + getPreNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] === node) { + return (i == 0 ? null : children[i - 1]); + } + } + return null; + }, + getRoot: function (setting) { + return setting ? roots[setting.treeId] : null; + }, + getRoots: function () { + return roots; + }, + getSetting: function (treeId) { + return settings[treeId]; + }, + getSettings: function () { + return settings; + }, + getZTreeTools: function (treeId) { + var r = this.getRoot(this.getSetting(treeId)); + return r ? r.treeTools : null; + }, + initCache: function (setting) { + for (var i = 0, j = _init.caches.length; i < j; i++) { + _init.caches[i].apply(this, arguments); + } + }, + initNode: function (setting, level, node, parentNode, preNode, nextNode) { + for (var i = 0, j = _init.nodes.length; i < j; i++) { + _init.nodes[i].apply(this, arguments); + } + }, + initRoot: function (setting) { + for (var i = 0, j = _init.roots.length; i < j; i++) { + _init.roots[i].apply(this, arguments); + } + }, + isSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i]) return true; + } + return false; + }, + nodeChildren: function (setting, node, newChildren) { + if (!node) { + return null; + } + var key = setting.data.key.children; + if (typeof newChildren !== 'undefined') { + node[key] = newChildren; + } + return node[key]; + }, + nodeIsParent: function (setting, node, newIsParent) { + if (!node) { + return false; + } + var key = setting.data.key.isParent; + if (typeof newIsParent !== 'undefined') { + if (typeof newIsParent === "string") { + newIsParent = tools.eqs(newIsParent, "true"); + } + newIsParent = !!newIsParent; + node[key] = newIsParent; + } else if (typeof node[key] == "string"){ + node[key] = tools.eqs(node[key], "true"); + } else { + node[key] = !!node[key]; + } + return node[key]; + }, + nodeName: function (setting, node, newName) { + var key = setting.data.key.name; + if (typeof newName !== 'undefined') { + node[key] = newName; + } + return "" + node[key]; + }, + nodeTitle: function (setting, node) { + var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title; + return "" + node[t]; + }, + removeNodeCache: function (setting, node) { + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + } + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null; + }, + removeSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) { + root.curSelectedList.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]); + i--; + j--; + } + } + }, + setCache: function (setting, cache) { + caches[setting.treeId] = cache; + }, + setRoot: function (setting, root) { + roots[setting.treeId] = root; + }, + setZTreeTools: function (setting, zTreeTools) { + for (var i = 0, j = _init.zTreeTools.length; i < j; i++) { + _init.zTreeTools[i].apply(this, arguments); + } + }, + transformToArrayFormat: function (setting, nodes) { + if (!nodes) return []; + var r = []; + if (tools.isArray(nodes)) { + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + _do(node); + } + } else { + _do(nodes); + } + return r; + + function _do(_node) { + r.push(_node); + var children = data.nodeChildren(setting, _node); + if (children) { + r = r.concat(data.transformToArrayFormat(setting, children)); + } + } + }, + transformTozTreeFormat: function (setting, sNodes) { + var i, l, + key = setting.data.simpleData.idKey, + parentKey = setting.data.simpleData.pIdKey; + if (!key || key == "" || !sNodes) return []; + + if (tools.isArray(sNodes)) { + var r = []; + var tmpMap = {}; + for (i = 0, l = sNodes.length; i < l; i++) { + tmpMap[sNodes[i][key]] = sNodes[i]; + } + for (i = 0, l = sNodes.length; i < l; i++) { + var p = tmpMap[sNodes[i][parentKey]]; + if (p && sNodes[i][key] != sNodes[i][parentKey]) { + var children = data.nodeChildren(setting, p); + if (!children) { + children = data.nodeChildren(setting, p, []); + } + children.push(sNodes[i]); + } else { + r.push(sNodes[i]); + } + } + return r; + } else { + return [sNodes]; + } + } + }, + //method of event proxy + event = { + bindEvent: function (setting) { + for (var i = 0, j = _init.bind.length; i < j; i++) { + _init.bind[i].apply(this, arguments); + } + }, + unbindEvent: function (setting) { + for (var i = 0, j = _init.unbind.length; i < j; i++) { + _init.unbind[i].apply(this, arguments); + } + }, + bindTree: function (setting) { + var eventParam = { + treeId: setting.treeId + }, + o = setting.treeObj; + if (!setting.view.txtSelectedEnable) { + // for can't select text + o.bind('selectstart', handler.onSelectStart).css({ + "-moz-user-select": "-moz-none" + }); + } + o.bind('click', eventParam, event.proxy); + o.bind('dblclick', eventParam, event.proxy); + o.bind('mouseover', eventParam, event.proxy); + o.bind('mouseout', eventParam, event.proxy); + o.bind('mousedown', eventParam, event.proxy); + o.bind('mouseup', eventParam, event.proxy); + o.bind('contextmenu', eventParam, event.proxy); + }, + unbindTree: function (setting) { + var o = setting.treeObj; + o.unbind('selectstart', handler.onSelectStart) + .unbind('click', event.proxy) + .unbind('dblclick', event.proxy) + .unbind('mouseover', event.proxy) + .unbind('mouseout', event.proxy) + .unbind('mousedown', event.proxy) + .unbind('mouseup', event.proxy) + .unbind('contextmenu', event.proxy); + }, + doProxy: function (e) { + var results = []; + for (var i = 0, j = _init.proxys.length; i < j; i++) { + var proxyResult = _init.proxys[i].apply(this, arguments); + results.push(proxyResult); + if (proxyResult.stop) { + break; + } + } + return results; + }, + proxy: function (e) { + var setting = data.getSetting(e.data.treeId); + if (!tools.uCanDo(setting, e)) return true; + var results = event.doProxy(e), + r = true, x = false; + for (var i = 0, l = results.length; i < l; i++) { + var proxyResult = results[i]; + if (proxyResult.nodeEventCallback) { + x = true; + r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + if (proxyResult.treeEventCallback) { + x = true; + r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + } + return r; + } + }, + //method of event handler + handler = { + onSwitchNode: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (node.open) { + if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } else { + if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } + return true; + }, + onClickNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1; + if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true; + if (clickFlag === 0) { + view.cancelPreSelectedNode(setting, node); + } else { + view.selectNode(setting, node, clickFlag === 2); + } + setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]); + return true; + }, + onZTreeMousedown: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]); + } + return true; + }, + onZTreeMouseup: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]); + } + return true; + }, + onZTreeDblclick: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]); + } + return true; + }, + onZTreeContextmenu: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]); + } + return (typeof setting.callback.onRightClick) != "function"; + }, + onSelectStart: function (e) { + var n = e.originalEvent.srcElement.nodeName.toLowerCase(); + return (n === "input" || n === "textarea"); + } + }, + //method of tools for zTree + tools = { + apply: function (fun, param, defaultValue) { + if ((typeof fun) == "function") { + return fun.apply(zt, param ? param : []); + } + return defaultValue; + }, + canAsync: function (setting, node) { + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0))); + }, + clone: function (obj) { + if (obj === null) return null; + var o = tools.isArray(obj) ? [] : {}; + for (var i in obj) { + o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]); + } + return o; + }, + eqs: function (str1, str2) { + return str1.toLowerCase() === str2.toLowerCase(); + }, + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === "[object Array]"; + }, + isElement: function (o) { + return ( + typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2 + o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" + ); + }, + $: function (node, exp, setting) { + if (!!exp && typeof exp != "string") { + setting = exp; + exp = ""; + } + if (typeof node == "string") { + return $(node, setting ? setting.treeObj.get(0).ownerDocument : null); + } else { + return $("#" + node.tId + exp, setting ? setting.treeObj : null); + } + }, + getMDom: function (setting, curDom, targetExpr) { + if (!curDom) return null; + while (curDom && curDom.id !== setting.treeId) { + for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) { + if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) { + return curDom; + } + } + curDom = curDom.parentNode; + } + return null; + }, + getNodeMainDom: function (target) { + return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0)); + }, + isChildOrSelf: function (dom, parentId) { + return ($(dom).closest("#" + parentId).length > 0); + }, + uCanDo: function (setting, e) { + return true; + } + }, + //method of operate ztree dom + view = { + addNodes: function (setting, parentNode, index, newNodes, isSilent) { + var isParent = data.nodeIsParent(setting, parentNode); + if (setting.data.keep.leaf && parentNode && !isParent) { + return; + } + if (!tools.isArray(newNodes)) { + newNodes = [newNodes]; + } + if (setting.data.simpleData.enable) { + newNodes = data.transformTozTreeFormat(setting, newNodes); + } + if (parentNode) { + var target_switchObj = $$(parentNode, consts.id.SWITCH, setting), + target_icoObj = $$(parentNode, consts.id.ICON, setting), + target_ulObj = $$(parentNode, consts.id.UL, setting); + + if (!parentNode.open) { + view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE); + view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE); + parentNode.open = false; + target_ulObj.css({ + "display": "none" + }); + } + + data.addNodesData(setting, parentNode, index, newNodes); + view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index); + if (!isSilent) { + view.expandCollapseParentNode(setting, parentNode, true); + } + } else { + data.addNodesData(setting, data.getRoot(setting), index, newNodes); + view.createNodes(setting, 0, newNodes, null, index); + } + }, + appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + if (!nodes) return []; + var html = []; + + var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting), + tmpPChild = data.nodeChildren(setting, tmpPNode), + isFirstNode, isLastNode; + + if (!tmpPChild || index >= tmpPChild.length - nodes.length) { + index = -1; + } + + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (initFlag) { + isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0)); + isLastNode = (index < 0 && i == (nodes.length - 1)); + data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag); + data.addNodeCache(setting, node); + } + var isParent = data.nodeIsParent(setting, node); + + var childHtml = []; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + //make child html first, because checkType + childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open); + } + if (openFlag) { + view.makeDOMNodeMainBefore(html, setting, node); + view.makeDOMNodeLine(html, setting, node); + data.getBeforeA(setting, node, html); + view.makeDOMNodeNameBefore(html, setting, node); + data.getInnerBeforeA(setting, node, html); + view.makeDOMNodeIcon(html, setting, node); + data.getInnerAfterA(setting, node, html); + view.makeDOMNodeNameAfter(html, setting, node); + data.getAfterA(setting, node, html); + if (isParent && node.open) { + view.makeUlHtml(setting, node, html, childHtml.join('')); + } + view.makeDOMNodeMainAfter(html, setting, node); + data.addCreatedNode(setting, node); + } + } + return html; + }, + appendParentULDom: function (setting, node) { + var html = [], + nObj = $$(node, setting); + if (!nObj.get(0) && !!node.parentTId) { + view.appendParentULDom(setting, node.getParentNode()); + nObj = $$(node, setting); + } + var ulObj = $$(node, consts.id.UL, setting); + if (ulObj.get(0)) { + ulObj.remove(); + } + var children = data.nodeChildren(setting, node), + childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true); + view.makeUlHtml(setting, node, html, childHtml.join('')); + nObj.append(html.join('')); + }, + asyncNode: function (setting, node, isSilent, callback) { + var i, l; + var isParent = data.nodeIsParent(setting, node); + if (node && !isParent) { + tools.apply(callback); + return false; + } else if (node && node.isAjaxing) { + return false; + } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) { + tools.apply(callback); + return false; + } + if (node) { + node.isAjaxing = true; + var icoObj = $$(node, consts.id.ICON, setting); + icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING}); + } + + var tmpParam = {}; + var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam); + for (i = 0, l = autoParam.length; node && i < l; i++) { + var pKey = autoParam[i].split("="), spKey = pKey; + if (pKey.length > 1) { + spKey = pKey[1]; + pKey = pKey[0]; + } + tmpParam[spKey] = node[pKey]; + } + var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam); + if (tools.isArray(otherParam)) { + for (i = 0, l = otherParam.length; i < l; i += 2) { + tmpParam[otherParam[i]] = otherParam[i + 1]; + } + } else { + for (var p in otherParam) { + tmpParam[p] = otherParam[p]; + } + } + + var _tmpV = data.getRoot(setting)._ver; + $.ajax({ + contentType: setting.async.contentType, + cache: false, + type: setting.async.type, + url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url), + data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam, + dataType: setting.async.dataType, + headers: setting.async.headers, + xhrFields: setting.async.xhrFields, + success: function (msg) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + var newNodes = []; + try { + if (!msg || msg.length == 0) { + newNodes = []; + } else if (typeof msg == "string") { + newNodes = eval("(" + msg + ")"); + } else { + newNodes = msg; + } + } catch (err) { + newNodes = msg; + } + + if (node) { + node.isAjaxing = null; + node.zAsync = true; + } + view.setNodeLineIcos(setting, node); + if (newNodes && newNodes !== "") { + newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes); + view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent); + } else { + view.addNodes(setting, node, -1, [], !!isSilent); + } + setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]); + tools.apply(callback); + }, + error: function (XMLHttpRequest, textStatus, errorThrown) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + if (node) node.isAjaxing = null; + view.setNodeLineIcos(setting, node); + setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]); + } + }); + return true; + }, + cancelPreSelectedNode: function (setting, node, excludeNode) { + var list = data.getRoot(setting).curSelectedList, + i, n; + for (i = list.length - 1; i >= 0; i--) { + n = list[i]; + if (node === n || (!node && (!excludeNode || excludeNode !== n))) { + $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED); + if (node) { + data.removeSelectedNode(setting, node); + break; + } else { + list.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]); + } + } + } + }, + createNodeCallback: function (setting) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + while (root.createdNodes.length > 0) { + var node = root.createdNodes.shift(); + tools.apply(setting.view.addDiyDom, [setting.treeId, node]); + if (!!setting.callback.onNodeCreated) { + setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]); + } + } + } + }, + createNodes: function (setting, level, nodes, parentNode, index) { + if (!nodes || nodes.length == 0) return; + var root = data.getRoot(setting), + openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0); + root.createdNodes = []; + var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag), + parentObj, nextObj; + + if (!parentNode) { + parentObj = setting.treeObj; + //setting.treeObj.append(zTreeHtml.join('')); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + if (ulObj.get(0)) { + parentObj = ulObj; + //ulObj.append(zTreeHtml.join('')); + } + } + if (parentObj) { + if (index >= 0) { + nextObj = parentObj.children()[index]; + } + if (index >= 0 && nextObj) { + $(nextObj).before(zTreeHtml.join('')); + } else { + parentObj.append(zTreeHtml.join('')); + } + } + + view.createNodeCallback(setting); + }, + destroy: function (setting) { + if (!setting) return; + data.initCache(setting); + data.initRoot(setting); + event.unbindTree(setting); + event.unbindEvent(setting); + setting.treeObj.empty(); + delete settings[setting.treeId]; + }, + expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting); + var tmpCb, _callback; + if (!node) { + tools.apply(callback, []); + return; + } + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + if (root.expandTriggerFlag) { + _callback = callback; + tmpCb = function () { + if (_callback) _callback(); + if (node.open) { + setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]); + } else { + setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]); + } + }; + callback = tmpCb; + root.expandTriggerFlag = false; + } + if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) { + view.appendParentULDom(setting, node); + view.createNodeCallback(setting); + } + if (node.open == expandFlag) { + tools.apply(callback, []); + return; + } + var ulObj = $$(node, consts.id.UL, setting), + switchObj = $$(node, consts.id.SWITCH, setting), + icoObj = $$(node, consts.id.ICON, setting); + + if (isParent) { + node.open = !node.open; + if (node.iconOpen && node.iconClose) { + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + } + + if (node.open) { + view.replaceSwitchClass(node, switchObj, consts.folder.OPEN); + view.replaceIcoClass(node, icoObj, consts.folder.OPEN); + if (animateFlag == false || setting.view.expandSpeed == "") { + ulObj.show(); + tools.apply(callback, []); + } else { + if (children && children.length > 0) { + ulObj.slideDown(setting.view.expandSpeed, callback); + } else { + ulObj.show(); + tools.apply(callback, []); + } + } + } else { + view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE); + view.replaceIcoClass(node, icoObj, consts.folder.CLOSE); + if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) { + ulObj.hide(); + tools.apply(callback, []); + } else { + ulObj.slideUp(setting.view.expandSpeed, callback); + } + } + } else { + tools.apply(callback, []); + } + }, + expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) { + if (!node) return; + if (!node.parentTId) { + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + return; + } else { + view.expandCollapseNode(setting, node, expandFlag, animateFlag); + } + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback); + } + }, + expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting), + treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root), + selfAnimateSign = (node) ? false : animateFlag, + expandTriggerFlag = data.getRoot(setting).expandTriggerFlag; + data.getRoot(setting).expandTriggerFlag = false; + if (treeNodes) { + for (var i = 0, l = treeNodes.length; i < l; i++) { + if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign); + } + } + data.getRoot(setting).expandTriggerFlag = expandTriggerFlag; + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + }, + isSelectedNode: function (setting, node) { + if (!node) { + return false; + } + var list = data.getRoot(setting).curSelectedList, + i; + for (i = list.length - 1; i >= 0; i--) { + if (node === list[i]) { + return true; + } + } + return false; + }, + makeDOMNodeIcon: function (html, setting, node) { + var nameStr = data.nodeName(setting, node), + name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(//g, '>'); + html.push("", name, ""); + }, + makeDOMNodeLine: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainBefore: function (html, setting, node) { + html.push("
      • "); + }, + makeDOMNodeNameAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeNameBefore: function (html, setting, node) { + var title = data.nodeTitle(setting, node), + url = view.makeNodeUrl(setting, node), + fontcss = view.makeNodeFontCss(setting, node), + nodeClasses = view.makeNodeClasses(setting, node), + fontStyle = []; + for (var f in fontcss) { + fontStyle.push(f, ":", fontcss[f], ";"); + } + html.push(" 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''), + "'"); + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) { + html.push("title='", title.replace(/'/g, "'").replace(//g, '>'), "'"); + } + html.push(">"); + }, + makeNodeFontCss: function (setting, node) { + var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss); + return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {}; + }, + makeNodeClasses: function (setting, node) { + var classes = tools.apply(setting.view.nodeClasses, [setting.treeId, node], setting.view.nodeClasses); + return (classes && (typeof classes !== "function")) ? classes : {add:[], remove:[]}; + }, + makeNodeIcoClass: function (setting, node) { + var icoCss = ["ico"]; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0]; + if (isParent) { + icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + icoCss.push(consts.folder.DOCU); + } + } + return consts.className.BUTTON + " " + icoCss.join('_'); + }, + makeNodeIcoStyle: function (setting, node) { + var icoStyle = []; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon]; + if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;"); + if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) { + icoStyle.push("display:none;"); + } + } + return icoStyle.join(''); + }, + makeNodeLineClass: function (setting, node) { + var lineClass = []; + if (setting.view.showLine) { + if (node.level == 0 && node.isFirstNode && node.isLastNode) { + lineClass.push(consts.line.ROOT); + } else if (node.level == 0 && node.isFirstNode) { + lineClass.push(consts.line.ROOTS); + } else if (node.isLastNode) { + lineClass.push(consts.line.BOTTOM); + } else { + lineClass.push(consts.line.CENTER); + } + } else { + lineClass.push(consts.line.NOLINE); + } + if (data.nodeIsParent(setting, node)) { + lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + lineClass.push(consts.folder.DOCU); + } + return view.makeNodeLineClassEx(node) + lineClass.join('_'); + }, + makeNodeLineClassEx: function (node) { + return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " "; + }, + makeNodeTarget: function (node) { + return (node.target || "_blank"); + }, + makeNodeUrl: function (setting, node) { + var urlKey = setting.data.key.url; + return node[urlKey] ? node[urlKey] : null; + }, + makeUlHtml: function (setting, node, html, content) { + html.push("
          "); + html.push(content); + html.push("
        "); + }, + makeUlLineClass: function (setting, node) { + return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : ""); + }, + removeChildNodes: function (setting, node) { + if (!node) return; + var nodes = data.nodeChildren(setting, node); + if (!nodes) return; + + for (var i = 0, l = nodes.length; i < l; i++) { + data.removeNodeCache(setting, nodes[i]); + } + data.removeSelectedNode(setting); + delete node[setting.data.key.children]; + + if (!setting.data.keep.parent) { + data.nodeIsParent(setting, node, false); + node.open = false; + var tmp_switchObj = $$(node, consts.id.SWITCH, setting), + tmp_icoObj = $$(node, consts.id.ICON, setting); + view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU); + $$(node, consts.id.UL, setting).remove(); + } else { + $$(node, consts.id.UL, setting).empty(); + } + }, + scrollIntoView: function (setting, dom) { + if (!dom) { + return; + } + // support IE 7 / 8 + if (typeof Element === 'undefined' || typeof HTMLElement === 'undefined') { + var contRect = setting.treeObj.get(0).getBoundingClientRect(), + findMeRect = dom.getBoundingClientRect(); + if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom + || findMeRect.right > contRect.right || findMeRect.left < contRect.left) { + dom.scrollIntoView(); + } + return; + } + // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e + if (!Element.prototype.scrollIntoViewIfNeeded) { + Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) { + "use strict"; + + function makeRange(start, length) { + return {"start": start, "length": length, "end": start + length}; + } + + function coverRange(inner, outer) { + if ( + false === centerIfNeeded || + (outer.start < inner.end && inner.start < outer.end) + ) { + return Math.max( + inner.end - outer.length, + Math.min(outer.start, inner.start) + ); + } + return (inner.start + inner.end - outer.length) / 2; + } + + function makePoint(x, y) { + return { + "x": x, + "y": y, + "translate": function translate(dX, dY) { + return makePoint(x + dX, y + dY); + } + }; + } + + function absolute(elem, pt) { + while (elem) { + pt = pt.translate(elem.offsetLeft, elem.offsetTop); + elem = elem.offsetParent; + } + return pt; + } + + var target = absolute(this, makePoint(0, 0)), + extent = makePoint(this.offsetWidth, this.offsetHeight), + elem = this.parentNode, + origin; + + while (elem instanceof HTMLElement) { + // Apply desired scroll amount. + origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop)); + elem.scrollLeft = coverRange( + makeRange(target.x - origin.x, extent.x), + makeRange(elem.scrollLeft, elem.clientWidth) + ); + elem.scrollTop = coverRange( + makeRange(target.y - origin.y, extent.y), + makeRange(elem.scrollTop, elem.clientHeight) + ); + + // Determine actual scroll amount by reading back scroll properties. + target = target.translate(-elem.scrollLeft, -elem.scrollTop); + elem = elem.parentNode; + } + }; + } + dom.scrollIntoViewIfNeeded(); + }, + setFirstNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[0].isFirstNode = true; + } + }, + setLastNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[children.length - 1].isLastNode = true; + } + }, + removeNode: function (setting, node) { + var root = data.getRoot(setting), + parentNode = (node.parentTId) ? node.getParentNode() : root; + + node.isFirstNode = false; + node.isLastNode = false; + node.getPreNode = function () { + return null; + }; + node.getNextNode = function () { + return null; + }; + + if (!data.getNodeCache(setting, node.tId)) { + return; + } + + $$(node, setting).remove(); + data.removeNodeCache(setting, node); + data.removeSelectedNode(setting, node); + + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].tId == node.tId) { + children.splice(i, 1); + break; + } + } + view.setFirstNode(setting, parentNode); + view.setLastNode(setting, parentNode); + + var tmp_ulObj, tmp_switchObj, tmp_icoObj, + childLength = children.length; + + //repair nodes old parent + if (!setting.data.keep.parent && childLength == 0) { + //old parentNode has no child nodes + data.nodeIsParent(setting, parentNode, false); + parentNode.open = false; + delete parentNode[setting.data.key.children]; + tmp_ulObj = $$(parentNode, consts.id.UL, setting); + tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting); + tmp_icoObj = $$(parentNode, consts.id.ICON, setting); + view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (setting.view.showLine && childLength > 0) { + //old parentNode has child nodes + var newLast = children[childLength - 1]; + tmp_ulObj = $$(newLast, consts.id.UL, setting); + tmp_switchObj = $$(newLast, consts.id.SWITCH, setting); + tmp_icoObj = $$(newLast, consts.id.ICON, setting); + if (parentNode == root) { + if (children.length == 1) { + //node was root, and ztree has only one root after move node + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT); + } else { + var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting); + view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS); + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + } else { + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + tmp_ulObj.removeClass(consts.line.LINE); + } + }, + replaceIcoClass: function (node, obj, newName) { + if (!obj || node.isAjaxing) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[tmpList.length - 1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + }, + replaceSwitchClass: function (node, obj, newName) { + if (!obj) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.line.ROOT: + case consts.line.ROOTS: + case consts.line.CENTER: + case consts.line.BOTTOM: + case consts.line.NOLINE: + tmpList[0] = view.makeNodeLineClassEx(node) + newName; + break; + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + if (newName !== consts.folder.DOCU) { + obj.removeAttr("disabled"); + } else { + obj.attr("disabled", "disabled"); + } + }, + selectNode: function (setting, node, addFlag) { + if (!addFlag) { + view.cancelPreSelectedNode(setting, null, node); + } + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED); + data.addSelectedNode(setting, node); + setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]); + }, + setNodeFontCss: function (setting, treeNode) { + var aObj = $$(treeNode, consts.id.A, setting), + fontCss = view.makeNodeFontCss(setting, treeNode); + if (fontCss) { + aObj.css(fontCss); + } + }, + setNodeClasses: function (setting, treeNode) { + var aObj = $$(treeNode, consts.id.A, setting), + classes = view.makeNodeClasses(setting, treeNode); + if ('add' in classes && classes.add.length) { + aObj.addClass(classes.add.join(' ')); + } + if ('remove' in classes && classes.remove.length) { + aObj.removeClass(classes.remove.join(' ')); + } + }, + setNodeLineIcos: function (setting, node) { + if (!node) return; + var switchObj = $$(node, consts.id.SWITCH, setting), + ulObj = $$(node, consts.id.UL, setting), + icoObj = $$(node, consts.id.ICON, setting), + ulLine = view.makeUlLineClass(setting, node); + if (ulLine.length == 0) { + ulObj.removeClass(consts.line.LINE); + } else { + ulObj.addClass(ulLine); + } + switchObj.attr("class", view.makeNodeLineClass(setting, node)); + if (data.nodeIsParent(setting, node)) { + switchObj.removeAttr("disabled"); + } else { + switchObj.attr("disabled", "disabled"); + } + icoObj.removeAttr("style"); + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + icoObj.attr("class", view.makeNodeIcoClass(setting, node)); + }, + setNodeName: function (setting, node) { + var title = data.nodeTitle(setting, node), + nObj = $$(node, consts.id.SPAN, setting); + nObj.empty(); + if (setting.view.nameIsHTML) { + nObj.html(data.nodeName(setting, node)); + } else { + nObj.text(data.nodeName(setting, node)); + } + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("title", !title ? "" : title); + } + }, + setNodeTarget: function (setting, node) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("target", view.makeNodeTarget(node)); + }, + setNodeUrl: function (setting, node) { + var aObj = $$(node, consts.id.A, setting), + url = view.makeNodeUrl(setting, node); + if (url == null || url.length == 0) { + aObj.removeAttr("href"); + } else { + aObj.attr("href", url); + } + }, + switchNode: function (setting, node) { + if (node.open || !tools.canAsync(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + } else if (setting.async.enable) { + if (!view.asyncNode(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + return; + } + } else if (node) { + view.expandCollapseNode(setting, node, !node.open); + } + } + }; + // zTree defind + $.fn.zTree = { + consts: _consts, + _z: { + tools: tools, + view: view, + event: event, + data: data + }, + getZTreeObj: function (treeId) { + var o = data.getZTreeTools(treeId); + return o ? o : null; + }, + destroy: function (treeId) { + if (!!treeId && treeId.length > 0) { + view.destroy(data.getSetting(treeId)); + } else { + for (var s in settings) { + view.destroy(settings[s]); + } + } + }, + init: function (obj, zSetting, zNodes) { + var setting = tools.clone(_setting); + $.extend(true, setting, zSetting); + setting.treeId = obj.attr("id"); + setting.treeObj = obj; + setting.treeObj.empty(); + settings[setting.treeId] = setting; + //For some older browser,(e.g., ie6) + if (typeof document.body.style.maxHeight === "undefined") { + setting.view.expandSpeed = ""; + } + data.initRoot(setting); + var root = data.getRoot(setting); + zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : []; + if (setting.data.simpleData.enable) { + data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes)); + } else { + data.nodeChildren(setting, root, zNodes); + } + + data.initCache(setting); + event.unbindTree(setting); + event.bindTree(setting); + event.unbindEvent(setting); + event.bindEvent(setting); + + var zTreeTools = { + setting: setting, + addNodes: function (parentNode, index, newNodes, isSilent) { + if (!parentNode) parentNode = null; + var isParent = data.nodeIsParent(setting, parentNode); + if (parentNode && !isParent && setting.data.keep.leaf) return null; + + var i = parseInt(index, 10); + if (isNaN(i)) { + isSilent = !!newNodes; + newNodes = index; + index = -1; + } else { + index = i; + } + if (!newNodes) return null; + + + var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]); + + function addCallback() { + view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true)); + } + + if (tools.canAsync(setting, parentNode)) { + view.asyncNode(setting, parentNode, isSilent, addCallback); + } else { + addCallback(); + } + return xNewNodes; + }, + cancelSelectedNode: function (node) { + view.cancelPreSelectedNode(setting, node); + }, + destroy: function () { + view.destroy(setting); + }, + expandAll: function (expandFlag) { + expandFlag = !!expandFlag; + view.expandCollapseSonNode(setting, null, expandFlag, true); + return expandFlag; + }, + expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) { + if (!node || !data.nodeIsParent(setting, node)) return null; + if (expandFlag !== true && expandFlag !== false) { + expandFlag = !node.open; + } + callbackFlag = !!callbackFlag; + + if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) { + return null; + } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) { + return null; + } + if (expandFlag && node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false); + } + if (expandFlag === node.open && !sonSign) { + return null; + } + + data.getRoot(setting).expandTriggerFlag = callbackFlag; + if (!tools.canAsync(setting, node) && sonSign) { + view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus); + } else { + node.open = !expandFlag; + view.switchNode(this.setting, node); + showNodeFocus(); + } + return expandFlag; + + function showNodeFocus() { + var a = $$(node, setting).get(0); + if (a && focus !== false) { + view.scrollIntoView(setting, a); + } + } + }, + getNodes: function () { + return data.getNodes(setting); + }, + getNodeByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodeByTId: function (tId) { + return data.getNodeCache(setting, tId); + }, + getNodesByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByParamFuzzy: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) { + isSingle = !!isSingle; + if (!filter || (typeof filter != "function")) return (isSingle ? null : []); + return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam); + }, + getNodeIndex: function (node) { + if (!node) return null; + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] == node) return i; + } + return -1; + }, + getSelectedNodes: function () { + var r = [], list = data.getRoot(setting).curSelectedList; + for (var i = 0, l = list.length; i < l; i++) { + r.push(list[i]); + } + return r; + }, + isSelectedNode: function (node) { + return data.isSelectedNode(setting, node); + }, + reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) { + var promise = new Promise(function (resolve, reject) { + try { + zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () { + resolve(parentNode); + }); + } catch (e) { + reject(e); + } + }); + return promise; + }, + reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) { + if (!this.setting.async.enable) return; + var isRoot = !parentNode; + if (isRoot) { + parentNode = data.getRoot(setting); + } + if (reloadType == "refresh") { + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children ? children.length : 0; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + data.removeSelectedNode(setting); + data.nodeChildren(setting, parentNode, []); + if (isRoot) { + this.setting.treeObj.empty(); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + ulObj.empty(); + } + } + view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback); + }, + refresh: function () { + this.setting.treeObj.empty(); + var root = data.getRoot(setting), + nodes = data.nodeChildren(setting, root); + data.initRoot(setting); + data.nodeChildren(setting, root, nodes); + data.initCache(setting); + view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1); + }, + removeChildNodes: function (node) { + if (!node) return null; + var nodes = data.nodeChildren(setting, node); + view.removeChildNodes(setting, node); + return nodes ? nodes : null; + }, + removeNode: function (node, callbackFlag) { + if (!node) return; + callbackFlag = !!callbackFlag; + if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return; + view.removeNode(setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + } + }, + selectNode: function (node, addFlag, isSilent) { + if (!node) return; + if (tools.uCanDo(setting)) { + addFlag = setting.view.selectedMulti && addFlag; + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus); + } else if (!isSilent) { + try { + $$(node, setting).focus().blur(); + } catch (e) { + } + } + view.selectNode(setting, node, addFlag); + } + + function showNodeFocus() { + if (isSilent) { + return; + } + var a = $$(node, setting).get(0); + view.scrollIntoView(setting, a); + } + }, + transformTozTreeNodes: function (simpleNodes) { + return data.transformTozTreeFormat(setting, simpleNodes); + }, + transformToArray: function (nodes) { + return data.transformToArrayFormat(setting, nodes); + }, + updateNode: function (node, checkTypeFlag) { + if (!node) return; + var nObj = $$(node, setting); + if (nObj.get(0) && tools.uCanDo(setting)) { + view.setNodeName(setting, node); + view.setNodeTarget(setting, node); + view.setNodeUrl(setting, node); + view.setNodeLineIcos(setting, node); + view.setNodeFontCss(setting, node); + view.setNodeClasses(setting, node); + } + } + }; + root.treeTools = zTreeTools; + data.setZTreeTools(setting, zTreeTools); + var children = data.nodeChildren(setting, root); + if (children && children.length > 0) { + view.createNodes(setting, 0, children, null, -1); + } else if (setting.async.enable && setting.async.url && setting.async.url !== '') { + view.asyncNode(setting); + } + return zTreeTools; + } + }; + + var zt = $.fn.zTree, + $$ = tools.$, + consts = zt.consts; +})(jQuery); +/* + * JQuery zTree excheck + * v3.5.44 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * Date: 2020-04-29 + */ + +(function ($) { + //default consts of excheck + var _consts = { + event: { + CHECK: "ztree_check" + }, + id: { + CHECK: "_check" + }, + checkbox: { + STYLE: "checkbox", + DEFAULT: "chk", + DISABLED: "disable", + FALSE: "false", + TRUE: "true", + FULL: "full", + PART: "part", + FOCUS: "focus" + }, + radio: { + STYLE: "radio", + TYPE_ALL: "all", + TYPE_LEVEL: "level" + } + }, + //default setting of excheck + _setting = { + check: { + enable: false, + autoCheckTrigger: false, + chkStyle: _consts.checkbox.STYLE, + nocheckInherit: false, + chkDisabledInherit: false, + radioType: _consts.radio.TYPE_LEVEL, + chkboxType: { + "Y": "ps", + "N": "ps" + } + }, + data: { + key: { + checked: "checked" + } + }, + callback: { + beforeCheck: null, + onCheck: null + } + }, + //default root of excheck + _initRoot = function (setting) { + var r = data.getRoot(setting); + r.radioCheckedList = []; + }, + //default cache of excheck + _initCache = function (treeId) { + }, + //default bind event of excheck + _bindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.bind(c.CHECK, function (event, srcEvent, treeId, node) { + event.srcEvent = srcEvent; + tools.apply(setting.callback.onCheck, [event, treeId, node]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.unbind(c.CHECK); + }, + //default event proxy of excheck + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null; + + if (tools.eqs(e.type, "mouseover")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoverCheck"; + } + } else if (tools.eqs(e.type, "mouseout")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoutCheck"; + } + } else if (tools.eqs(e.type, "click")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "checkNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "checkNode" : + nodeEventCallback = _handler.onCheckNode; + break; + case "mouseoverCheck" : + nodeEventCallback = _handler.onMouseoverCheck; + break; + case "mouseoutCheck" : + nodeEventCallback = _handler.onMouseoutCheck; + break; + } + } + var proxyResult = { + stop: nodeEventType === "checkNode", + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of excheck + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var checked = data.nodeChecked(setting, n); + n.checkedOld = checked; + if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true"); + n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); + if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true"); + n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled); + if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true"); + n.halfCheck = !!n.halfCheck; + n.check_Child_State = -1; + n.check_Focus = false; + n.getCheckStatus = function () { + return data.getCheckStatus(setting, n); + }; + + if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) { + var r = data.getRoot(setting); + r.radioCheckedList.push(n); + } + }, + //add dom for check + _beforeA = function (setting, node, html) { + if (setting.check.enable) { + data.makeChkFlag(setting, node); + html.push(""); + } + }, + //update zTreeObj, add method of check + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) { + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) return; + if (checked !== true && checked !== false) { + checked = !nodeChecked; + } + callbackFlag = !!callbackFlag; + + if (nodeChecked === checked && !checkTypeFlag) { + return; + } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) { + return; + } + if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) { + data.nodeChecked(setting, node, checked); + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]); + } + } + } + + zTreeTools.checkAllNodes = function (checked) { + view.repairAllChk(this.setting, !!checked); + } + + zTreeTools.getCheckedNodes = function (checked) { + checked = (checked !== false); + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeCheckedNodes(this.setting, children, checked); + } + + zTreeTools.getChangeCheckedNodes = function () { + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeChangeCheckedNodes(this.setting, children); + } + + zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) { + disabled = !!disabled; + inheritParent = !!inheritParent; + inheritChildren = !!inheritChildren; + view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren); + view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent); + } + + var _updateNode = zTreeTools.updateNode; + zTreeTools.updateNode = function (node, checkTypeFlag) { + if (_updateNode) _updateNode.apply(zTreeTools, arguments); + if (!node || !this.setting.check.enable) return; + var nObj = $$(node, this.setting); + if (nObj.get(0) && tools.uCanDo(this.setting)) { + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + } + } + }, + //method of operate data + _data = { + getRadioCheckedList: function (setting) { + var checkedList = data.getRoot(setting).radioCheckedList; + for (var i = 0, j = checkedList.length; i < j; i++) { + if (!data.getNodeCache(setting, checkedList[i].tId)) { + checkedList.splice(i, 1); + i--; + j--; + } + } + return checkedList; + }, + getCheckStatus: function (setting, node) { + if (!setting.check.enable || node.nocheck || node.chkDisabled) return null; + var checked = data.nodeChecked(setting, node), + r = { + checked: checked, + half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0))) + }; + return r; + }, + getTreeCheckedNodes: function (setting, nodes, checked, results) { + if (!nodes) return []; + var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL); + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) { + results.push(node); + if (onlyOne) { + break; + } + } + data.getTreeCheckedNodes(setting, children, checked, results); + if (onlyOne && results.length > 0) { + break; + } + } + return results; + }, + getTreeChangeCheckedNodes: function (setting, nodes, results) { + if (!nodes) return []; + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) { + results.push(node); + } + data.getTreeChangeCheckedNodes(setting, children, results); + } + return results; + }, + makeChkFlag: function (setting, node) { + if (!node) return; + var chkFlag = -1; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var cNode = children[i]; + var nodeChecked = data.nodeChecked(setting, cNode); + var tmp = -1; + if (setting.check.chkStyle == consts.radio.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 2; + } else if (nodeChecked) { + tmp = 2; + } else { + tmp = cNode.check_Child_State > 0 ? 2 : 0; + } + if (tmp == 2) { + chkFlag = 2; + break; + } else if (tmp == 0) { + chkFlag = 0; + } + } else if (setting.check.chkStyle == consts.checkbox.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 1; + } else if (nodeChecked) { + tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1; + } else { + tmp = (cNode.check_Child_State > 0) ? 1 : 0; + } + if (tmp === 1) { + chkFlag = 1; + break; + } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) { + chkFlag = 1; + break; + } else if (chkFlag === 2 && tmp > -1 && tmp < 2) { + chkFlag = 1; + break; + } else if (tmp > -1) { + chkFlag = tmp; + } + } + } + } + node.check_Child_State = chkFlag; + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onCheckNode: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true; + var nodeChecked = data.nodeChecked(setting, node); + data.nodeChecked(setting, node, !nodeChecked); + view.checkNodeRelation(setting, node); + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + view.repairParentChkClassWithSelf(setting, node); + setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]); + return true; + }, + onMouseoverCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = true; + view.setChkClass(setting, checkObj, node); + return true; + }, + onMouseoutCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = false; + view.setChkClass(setting, checkObj, node); + return true; + } + }, + //method of tools for zTree + _tools = {}, + //method of operate ztree dom + _view = { + checkNodeRelation: function (setting, node) { + var pNode, i, l, + r = consts.radio; + var nodeChecked = data.nodeChecked(setting, node); + if (setting.check.chkStyle == r.STYLE) { + var checkedList = data.getRadioCheckedList(setting); + if (nodeChecked) { + if (setting.check.radioType == r.TYPE_ALL) { + for (i = checkedList.length - 1; i >= 0; i--) { + pNode = checkedList[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + checkedList.splice(i, 1); + + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + if (pNode.parentTId != node.parentTId) { + view.repairParentChkClassWithSelf(setting, pNode); + } + } + } + checkedList.push(node); + } else { + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (i = 0, l = children.length; i < l; i++) { + pNode = children[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + } + } + } + } else if (setting.check.radioType == r.TYPE_ALL) { + for (i = 0, l = checkedList.length; i < l; i++) { + if (node == checkedList[i]) { + checkedList.splice(i, 1); + break; + } + } + } + + } else { + var children = data.nodeChildren(setting, node); + if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, true); + } + if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, false); + } + if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, true); + } + if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, false); + } + } + }, + makeChkClass: function (setting, node) { + var c = consts.checkbox, r = consts.radio, + fullStyle = ""; + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) { + fullStyle = c.DISABLED; + } else if (node.halfCheck) { + fullStyle = c.PART; + } else if (setting.check.chkStyle == r.STYLE) { + fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART; + } else { + fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART); + } + var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle; + chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName; + return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName; + }, + repairAllChk: function (setting, checked) { + if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) { + var root = data.getRoot(setting); + var children = data.nodeChildren(setting, root); + for (var i = 0, l = children.length; i < l; i++) { + var node = children[i]; + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, checked); + } + view.setSonNodeCheckBox(setting, node, checked); + } + } + }, + repairChkClass: function (setting, node) { + if (!node) return; + data.makeChkFlag(setting, node); + if (node.nocheck !== true) { + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + } + }, + repairParentChkClass: function (setting, node) { + if (!node || !node.parentTId) return; + var pNode = node.getParentNode(); + view.repairChkClass(setting, pNode); + view.repairParentChkClass(setting, pNode); + }, + repairParentChkClassWithSelf: function (setting, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + view.repairParentChkClass(setting, children[0]); + } else { + view.repairParentChkClass(setting, node); + } + }, + repairSonChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + var children = data.nodeChildren(setting, node); + if (children && inherit) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit); + } + } + }, + repairParentChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled && inherit) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit); + }, + setChkClass: function (setting, obj, node) { + if (!obj) return; + if (node.nocheck === true) { + obj.hide(); + } else { + obj.show(); + } + obj.attr('class', view.makeChkClass(setting, node)); + }, + setParentNodeCheckBox: function (setting, node, value, srcNode) { + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + data.makeChkFlag(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + if (node.parentTId) { + var pSign = true; + if (!value) { + var pNodes = data.nodeChildren(setting, node.getParentNode()); + for (var i = 0, l = pNodes.length; i < l; i++) { + var pNode = pNodes[i]; + var nodeChecked = data.nodeChecked(setting, pNode); + if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked) + || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) { + pSign = false; + break; + } + } + } + if (pSign) { + view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode); + } + } + }, + setSonNodeCheckBox: function (setting, node, value, srcNode) { + if (!node) return; + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + + var hasDisable = false; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.setSonNodeCheckBox(setting, sNode, value, srcNode); + if (sNode.chkDisabled === true) hasDisable = true; + } + } + + if (node != data.getRoot(setting) && node.chkDisabled !== true) { + if (hasDisable && node.nocheck !== true) { + data.makeChkFlag(setting, node); + } + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1; + } else { + node.check_Child_State = -1; + } + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.nodeChecked = function (setting, node, newChecked) { + if (!node) { + return false; + } + var key = setting.data.key.checked; + if (typeof newChecked !== 'undefined') { + if (typeof newChecked === "string") { + newChecked = tools.eqs(newChecked, "true"); + } + newChecked = !!newChecked; + node[key] = newChecked; + } else if (typeof node[key] == "string"){ + node[key] = tools.eqs(node[key], "true"); + } else { + node[key] = !!node[key]; + } + return node[key]; + }; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy, true); + data.addInitRoot(_initRoot); + data.addBeforeA(_beforeA); + data.addZTreeTools(_zTreeTools); + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) _createNodes.apply(view, arguments); + if (!nodes) return; + view.repairParentChkClassWithSelf(setting, parentNode); + } + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var parentNode = node.getParentNode(); + if (_removeNode) _removeNode.apply(view, arguments); + if (!node || !parentNode) return; + view.repairChkClass(setting, parentNode); + view.repairParentChkClass(setting, parentNode); + } + + var _appendNodes = view.appendNodes; + view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + var html = ""; + if (_appendNodes) { + html = _appendNodes.apply(view, arguments); + } + if (parentNode) { + data.makeChkFlag(setting, parentNode); + } + return html; + } +})(jQuery); +/* + * JQuery zTree exedit + * v3.5.44 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * Date: 2020-04-29 + */ + +(function ($) { + //default consts of exedit + var _consts = { + event: { + DRAG: "ztree_drag", + DROP: "ztree_drop", + RENAME: "ztree_rename", + DRAGMOVE: "ztree_dragmove" + }, + id: { + EDIT: "_edit", + INPUT: "_input", + REMOVE: "_remove" + }, + move: { + TYPE_INNER: "inner", + TYPE_PREV: "prev", + TYPE_NEXT: "next" + }, + node: { + CURSELECTED_EDIT: "curSelectedNode_Edit", + TMPTARGET_TREE: "tmpTargetzTree", + TMPTARGET_NODE: "tmpTargetNode" + } + }, + //default setting of exedit + _setting = { + edit: { + enable: false, + editNameSelectAll: false, + showRemoveBtn: true, + showRenameBtn: true, + removeTitle: "remove", + renameTitle: "rename", + drag: { + autoExpandTrigger: false, + isCopy: true, + isMove: true, + prev: true, + next: true, + inner: true, + minMoveSize: 5, + borderMax: 10, + borderMin: -5, + maxShowNodeNum: 5, + autoOpenTime: 500 + } + }, + view: { + addHoverDom: null, + removeHoverDom: null + }, + callback: { + beforeDrag: null, + beforeDragOpen: null, + beforeDrop: null, + beforeEditName: null, + beforeRename: null, + onDrag: null, + onDragMove: null, + onDrop: null, + onRename: null + } + }, + //default root of exedit + _initRoot = function (setting) { + var r = data.getRoot(setting), rs = data.getRoots(); + r.curEditNode = null; + r.curEditInput = null; + r.curHoverNode = null; + r.dragFlag = 0; + r.dragNodeShowBefore = []; + r.dragMaskList = new Array(); + rs.showHoverDom = true; + }, + //default cache of exedit + _initCache = function (treeId) { + }, + //default bind event of exedit + _bindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) { + tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]); + }); + + o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) { + tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.unbind(c.RENAME); + o.unbind(c.DRAG); + o.unbind(c.DRAGMOVE); + o.unbind(c.DROP); + }, + //default event proxy of exedit + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + relatedTarget = e.relatedTarget, + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null, + tmp = null; + + if (tools.eqs(e.type, "mouseover")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "hoverOverNode"; + } + } else if (tools.eqs(e.type, "mouseout")) { + tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (!tmp) { + tId = "remove"; + nodeEventType = "hoverOutNode"; + } + } else if (tools.eqs(e.type, "mousedown")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "mousedownNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "mousedownNode" : + nodeEventCallback = _handler.onMousedownNode; + break; + case "hoverOverNode" : + nodeEventCallback = _handler.onHoverOverNode; + break; + case "hoverOutNode" : + nodeEventCallback = _handler.onHoverOutNode; + break; + } + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of exedit + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + n.isHover = false; + n.editNameFlag = false; + }, + //update zTreeObj, add method of edit + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.cancelEditName = function (newName) { + var root = data.getRoot(this.setting); + if (!root.curEditNode) return; + view.cancelCurEditNode(this.setting, newName ? newName : null, true); + } + zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) { + if (!node) return null; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null; + var _this = this, + newNode = tools.clone(node); + if (!targetNode) { + targetNode = null; + moveType = consts.move.TYPE_INNER; + } + if (moveType == consts.move.TYPE_INNER) { + function copyCallback() { + view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent); + } + + if (tools.canAsync(this.setting, targetNode)) { + view.asyncNode(this.setting, targetNode, isSilent, copyCallback); + } else { + copyCallback(); + } + } else { + view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent); + view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent); + } + return newNode; + } + zTreeTools.editName = function (node) { + if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return; + if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true); + view.editNode(this.setting, node) + } + zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) { + if (!node) return node; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) { + return null; + } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) { + return null; + } else if (!targetNode) { + targetNode = null; + } + var _this = this; + + function moveCallback() { + view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent); + } + + if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) { + view.asyncNode(this.setting, targetNode, isSilent, moveCallback); + } else { + moveCallback(); + } + return node; + } + zTreeTools.setEditable = function (editable) { + this.setting.edit.enable = editable; + return this.refresh(); + } + }, + //method of operate data + _data = { + setSonNodeLevel: function (setting, parentNode, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + node.level = (parentNode) ? parentNode.level + 1 : 0; + if (!children) return; + for (var i = 0, l = children.length; i < l; i++) { + if (children[i]) data.setSonNodeLevel(setting, node, children[i]); + } + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onHoverOverNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode != node) { + _handler.onHoverOutNode(event); + } + root.curHoverNode = node; + view.addHoverDom(setting, node); + }, + onHoverOutNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) { + view.removeTreeDom(setting, root.curHoverNode); + root.curHoverNode = null; + } + }, + onMousedownNode: function (eventMouseDown, _node) { + var i, l, + setting = data.getSetting(eventMouseDown.data.treeId), + root = data.getRoot(setting), roots = data.getRoots(); + //right click can't drag & drop + if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true; + + //input of edit node name can't drag & drop + var target = eventMouseDown.target, + _nodes = data.getRoot(setting).curSelectedList, + nodes = []; + if (!data.isSelectedNode(setting, _node)) { + nodes = [_node]; + } else { + for (i = 0, l = _nodes.length; i < l; i++) { + if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) { + return true; + } + nodes.push(_nodes[i]); + if (nodes[0].parentTId !== _nodes[i].parentTId) { + nodes = [_node]; + break; + } + } + } + + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + + var doc = $(setting.treeObj.get(0).ownerDocument), + body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget, + isOtherTree = false, + targetSetting = setting, + sourceSetting = setting, + preNode, nextNode, + preTmpTargetNodeId = null, + preTmpMoveType = null, + tmpTargetNodeId = null, + moveType = consts.move.TYPE_INNER, + mouseDownX = eventMouseDown.clientX, + mouseDownY = eventMouseDown.clientY, + startTime = (new Date()).getTime(); + + if (tools.uCanDo(setting)) { + doc.bind("mousemove", _docMouseMove); + } + + function _docMouseMove(event) { + //avoid start drag after click node + if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize + && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) { + return true; + } + var i, l, tmpNode, tmpDom, tmpNodes; + body.css("cursor", "pointer"); + + if (root.dragFlag == 0) { + if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) { + _docMouseUp(event); + return true; + } + + for (i = 0, l = nodes.length; i < l; i++) { + if (i == 0) { + root.dragNodeShowBefore = []; + } + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + root.dragNodeShowBefore[tmpNode.tId] = true; + } else { + root.dragNodeShowBefore[tmpNode.tId] = false; + } + } + + root.dragFlag = 1; + roots.showHoverDom = false; + tools.showIfameMask(setting, true); + + //sort + var isOrder = true, lastIndex = -1; + if (nodes.length > 1) { + var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting); + tmpNodes = []; + for (i = 0, l = pNodes.length; i < l; i++) { + if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) { + if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) { + isOrder = false; + } + tmpNodes.push(pNodes[i]); + lastIndex = i; + } + if (nodes.length === tmpNodes.length) { + nodes = tmpNodes; + break; + } + } + } + if (isOrder) { + preNode = nodes[0].getPreNode(); + nextNode = nodes[nodes.length - 1].getNextNode(); + } + + //set node in selected + curNode = $$("
          ", setting); + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + tmpNode.editNameFlag = false; + view.selectNode(setting, tmpNode, i > 0); + view.removeTreeDom(setting, tmpNode); + + if (i > setting.edit.drag.maxShowNodeNum - 1) { + continue; + } + + tmpDom = $$("
        • ", setting); + tmpDom.append($$(tmpNode, consts.id.A, setting).clone()); + tmpDom.css("padding", "0"); + tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED); + curNode.append(tmpDom); + if (i == setting.edit.drag.maxShowNodeNum - 1) { + tmpDom = $$("
        • ...
        • ", setting); + curNode.append(tmpDom); + } + } + curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp"); + curNode.addClass(setting.treeObj.attr("class")); + curNode.appendTo(body); + + tmpArrow = $$("", setting); + tmpArrow.attr("id", "zTreeMove_arrow_tmp"); + tmpArrow.appendTo(body); + + setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]); + } + + if (root.dragFlag == 1) { + if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) { + var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget); + event.target = (xT.length > 0) ? xT.get(0) : event.target; + } else if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tmpTarget = null; + tmpTargetNodeId = null; + + //judge drag & drop in multi ztree + isOtherTree = false; + targetSetting = setting; + var settings = data.getSettings(); + for (var s in settings) { + if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId + && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) { + isOtherTree = true; + targetSetting = settings[s]; + } + } + + var docScrollTop = doc.scrollTop(), + docScrollLeft = doc.scrollLeft(), + treeOffset = targetSetting.treeObj.offset(), + scrollHeight = targetSetting.treeObj.get(0).scrollHeight, + scrollWidth = targetSetting.treeObj.get(0).scrollWidth, + dTop = (event.clientY + docScrollTop - treeOffset.top), + dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop), + dLeft = (event.clientX + docScrollLeft - treeOffset.left), + dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft), + isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin), + isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin), + isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin), + isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin), + isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin, + isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0), + isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight), + isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0), + isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth); + + if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //get node
        • dom + var targetObj = event.target; + while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) { + targetObj = targetObj.parentNode; + } + + var canMove = true; + //don't move to self or children of self + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (targetObj.id === tmpNode.tId) { + canMove = false; + break; + } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) { + canMove = false; + break; + } + } + if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) { + tmpTarget = $(targetObj); + tmpTargetNodeId = targetObj.id; + } + } + + //the mouse must be in zTree + tmpNode = nodes[0]; + if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //judge mouse move in root of ztree + if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) { + tmpTarget = targetSetting.treeObj; + } + //auto scroll top + if (isTop) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10); + } else if (isBottom) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10); + } + if (isLeft) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10); + } else if (isRight) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10); + } + //auto scroll left + if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left); + } + } + + curNode.css({ + "top": (event.clientY + docScrollTop + 3) + "px", + "left": (event.clientX + docScrollLeft + 3) + "px" + }); + + var dX = 0; + var dY = 0; + if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) { + var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId), + isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy), + isPrev = !!(preNode && tmpTargetNodeId === preNode.tId), + isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId), + isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId), + canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev), + canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next), + canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner); + + function clearMove() { + tmpTarget = null; + tmpTargetNodeId = ""; + moveType = consts.move.TYPE_INNER; + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null + } + } + + if (!canPrev && !canNext && !canInner) { + clearMove(); + } else { + var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget), + tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()), + tmpTop = tmpTargetA.offset().top, + tmpLeft = tmpTargetA.offset().left, + prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1, + nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1, + dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height(); + + if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) { + dX = 1 - tmpArrow.width(); + dY = tmpTop - tmpArrow.height() / 2; + moveType = consts.move.TYPE_PREV; + } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) { + dX = 1 - tmpArrow.width(); + dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2); + moveType = consts.move.TYPE_NEXT; + } else if (canInner) { + dX = 5 - tmpArrow.width(); + dY = tmpTop; + moveType = consts.move.TYPE_INNER; + } else { + clearMove(); + } + + if (tmpTarget) { + tmpArrow.css({ + "display": "block", + "top": dY + "px", + "left": (tmpLeft + dX) + "px" + }); + tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType); + + if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) { + startTime = (new Date()).getTime(); + } + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) { + var startTimer = true; + if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) { + startTimer = false; + } + if (startTimer) { + window.zTreeMoveTimer = setTimeout(function () { + if (moveType != consts.move.TYPE_INNER) return; + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime + && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) { + view.switchNode(targetSetting, tmpTargetNode); + if (targetSetting.edit.drag.autoExpandTrigger) { + targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]); + } + } + }, targetSetting.edit.drag.autoOpenTime + 50); + window.zTreeMoveTargetNodeTId = tmpTargetNode.tId; + } + } + } + } + } else { + moveType = consts.move.TYPE_INNER; + if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) { + tmpTarget.addClass(consts.node.TMPTARGET_TREE); + } else { + tmpTarget = null; + } + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + } + preTmpTargetNodeId = tmpTargetNodeId; + preTmpMoveType = moveType; + + setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]); + } + return false; + } + + doc.bind("mouseup", _docMouseUp); + + function _docMouseUp(event) { + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + preTmpTargetNodeId = null; + preTmpMoveType = null; + doc.unbind("mousemove", _docMouseMove); + doc.unbind("mouseup", _docMouseUp); + doc.unbind("selectstart", _docSelect); + body.css("cursor", ""); + if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tools.showIfameMask(setting, false); + + roots.showHoverDom = true; + if (root.dragFlag == 0) return; + root.dragFlag = 0; + + var i, l, tmpNode; + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + delete root.dragNodeShowBefore[tmpNode.tId]; + } + } + + if (curNode) curNode.remove(); + if (tmpArrow) tmpArrow.remove(); + + var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy); + if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) { + tmpTarget = null; + } + if (tmpTarget) { + var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId); + if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) { + view.selectNodes(sourceSetting, nodes); + return; + } + var newNodes = isCopy ? tools.clone(nodes) : nodes; + + function dropCallback() { + if (isOtherTree) { + if (!isCopy) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.removeNode(setting, nodes[i]); + } + } + if (moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } + } else { + if (isCopy && moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else if (isCopy) { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } else { + if (moveType != consts.move.TYPE_NEXT) { + for (i = 0, l = newNodes.length; i < l; i++) { + view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false); + } + } else { + for (i = -1, l = newNodes.length - 1; i < l; l--) { + view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false); + } + } + } + } + view.selectNodes(targetSetting, newNodes); + + var a = $$(newNodes[0], setting).get(0); + view.scrollIntoView(setting, a); + + setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]); + } + + if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) { + view.asyncNode(targetSetting, dragTargetNode, false, dropCallback); + } else { + dropCallback(); + } + + } else { + view.selectNodes(sourceSetting, nodes); + setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]); + } + } + + doc.bind("selectstart", _docSelect); + + function _docSelect() { + return false; + } + + // 2018-03-30 FireFox has fixed this issue. + //Avoid FireFox's Bug + //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error. + // if(eventMouseDown.preventDefault) { + // eventMouseDown.preventDefault(); + // } + return true; + } + }, + //method of tools for zTree + _tools = { + getAbs: function (obj) { + var oRect = obj.getBoundingClientRect(), + scrollTop = document.body.scrollTop + document.documentElement.scrollTop, + scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft; + return [oRect.left + scrollLeft, oRect.top + scrollTop]; + }, + inputFocus: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + tools.setCursorPosition(inputObj.get(0), inputObj.val().length); + } + }, + inputSelect: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + inputObj.select(); + } + }, + setCursorPosition: function (obj, pos) { + if (obj.setSelectionRange) { + obj.focus(); + obj.setSelectionRange(pos, pos); + } else if (obj.createTextRange) { + var range = obj.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } + }, + showIfameMask: function (setting, showSign) { + var root = data.getRoot(setting); + //clear full mask + while (root.dragMaskList.length > 0) { + root.dragMaskList[0].remove(); + root.dragMaskList.shift(); + } + if (showSign) { + //show mask + var iframeList = $$("iframe", setting); + for (var i = 0, l = iframeList.length; i < l; i++) { + var obj = iframeList.get(i), + r = tools.getAbs(obj), + dragMask = $$("
          ", setting); + dragMask.appendTo($$("body", setting)); + root.dragMaskList.push(dragMask); + } + } + } + }, + //method of operate ztree dom + _view = { + addEditBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + editStr = ""; + aObj.append(editStr); + + $$(node, consts.id.EDIT, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false; + view.editNode(setting, node); + return false; + } + ).show(); + }, + addRemoveBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + removeStr = ""; + aObj.append(removeStr); + + $$(node, consts.id.REMOVE, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false; + view.removeNode(setting, node); + setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + return false; + } + ).bind('mousedown', + function (eventMouseDown) { + return true; + } + ).show(); + }, + addHoverDom: function (setting, node) { + if (data.getRoots().showHoverDom) { + node.isHover = true; + if (setting.edit.enable) { + view.addEditBtn(setting, node); + view.addRemoveBtn(setting, node); + } + tools.apply(setting.view.addHoverDom, [setting.treeId, node]); + } + }, + cancelCurEditNode: function (setting, forceName, isCancel) { + var root = data.getRoot(setting), + node = root.curEditNode; + + if (node) { + var inputObj = root.curEditInput, + newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val()); + if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) { + return false; + } + data.nodeName(setting, node, newName); + var aObj = $$(node, consts.id.A, setting); + aObj.removeClass(consts.node.CURSELECTED_EDIT); + inputObj.unbind(); + view.setNodeName(setting, node); + node.editNameFlag = false; + root.curEditNode = null; + root.curEditInput = null; + view.selectNode(setting, node, false); + setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]); + } + root.noSelection = true; + return true; + }, + editNode: function (setting, node) { + var root = data.getRoot(setting); + view.editNodeBlur = false; + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + setTimeout(function () { + tools.inputFocus(root.curEditInput); + }, 0); + return; + } + node.editNameFlag = true; + view.removeTreeDom(setting, node); + view.cancelCurEditNode(setting); + view.selectNode(setting, node, false); + $$(node, consts.id.SPAN, setting).html(""); + var inputObj = $$(node, consts.id.INPUT, setting); + inputObj.attr("value", data.nodeName(setting, node)); + if (setting.edit.editNameSelectAll) { + tools.inputSelect(inputObj); + } else { + tools.inputFocus(inputObj); + } + + inputObj.bind('blur', function (event) { + if (!view.editNodeBlur) { + view.cancelCurEditNode(setting); + } + }).bind('keydown', function (event) { + if (event.keyCode == "13") { + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + } else if (event.keyCode == "27") { + view.cancelCurEditNode(setting, null, true); + } + }).bind('click', function (event) { + return false; + }).bind('dblclick', function (event) { + return false; + }); + + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT); + root.curEditInput = inputObj; + root.noSelection = false; + root.curEditNode = node; + }, + moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) { + var root = data.getRoot(setting); + if (targetNode == node) return; + if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return; + var oldParentNode = (node.parentTId ? node.getParentNode() : root), + targetNodeIsRoot = (targetNode === null || targetNode == root); + if (targetNodeIsRoot && targetNode === null) targetNode = root; + if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER; + var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root); + + if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) { + moveType = consts.move.TYPE_INNER; + } + + if (moveType == consts.move.TYPE_INNER) { + if (targetNodeIsRoot) { + //parentTId of root node is null + node.parentTId = null; + } else { + if (!data.nodeIsParent(setting, targetNode)) { + data.nodeIsParent(setting, targetNode, true); + targetNode.open = !!targetNode.open; + view.setNodeLineIcos(setting, targetNode); + } + node.parentTId = targetNode.tId; + } + } + + //move node Dom + var targetObj, target_ulObj; + if (targetNodeIsRoot) { + targetObj = setting.treeObj; + target_ulObj = targetObj; + } else { + if (!isSilent && moveType == consts.move.TYPE_INNER) { + view.expandCollapseNode(setting, targetNode, true, false); + } else if (!isSilent) { + view.expandCollapseNode(setting, targetNode.getParentNode(), true, false); + } + targetObj = $$(targetNode, setting); + target_ulObj = $$(targetNode, consts.id.UL, setting); + if (!!targetObj.get(0) && !target_ulObj.get(0)) { + var ulstr = []; + view.makeUlHtml(setting, targetNode, ulstr, ''); + targetObj.append(ulstr.join('')); + } + target_ulObj = $$(targetNode, consts.id.UL, setting); + } + var nodeDom = $$(node, setting); + if (!nodeDom.get(0)) { + nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join(''); + } else if (!targetObj.get(0)) { + nodeDom.remove(); + } + if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) { + target_ulObj.append(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) { + targetObj.before(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) { + targetObj.after(nodeDom); + } + + //repair the data after move + var i, l, + tmpSrcIndex = -1, + tmpTargetIndex = 0, + oldNeighbor = null, + newNeighbor = null, + oldLevel = node.level; + var oldChildren = data.nodeChildren(setting, oldParentNode); + var targetParentChildren = data.nodeChildren(setting, targetParentNode); + var targetChildren = data.nodeChildren(setting, targetNode); + if (node.isFirstNode) { + tmpSrcIndex = 0; + if (oldChildren.length > 1) { + oldNeighbor = oldChildren[1]; + oldNeighbor.isFirstNode = true; + } + } else if (node.isLastNode) { + tmpSrcIndex = oldChildren.length - 1; + oldNeighbor = oldChildren[tmpSrcIndex - 1]; + oldNeighbor.isLastNode = true; + } else { + for (i = 0, l = oldChildren.length; i < l; i++) { + if (oldChildren[i].tId == node.tId) { + tmpSrcIndex = i; + break; + } + } + } + if (tmpSrcIndex >= 0) { + oldChildren.splice(tmpSrcIndex, 1); + } + if (moveType != consts.move.TYPE_INNER) { + for (i = 0, l = targetParentChildren.length; i < l; i++) { + if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i; + } + } + if (moveType == consts.move.TYPE_INNER) { + if (!targetChildren) { + targetChildren = data.nodeChildren(setting, targetNode, []); + } + if (targetChildren.length > 0) { + newNeighbor = targetChildren[targetChildren.length - 1]; + newNeighbor.isLastNode = false; + } + targetChildren.splice(targetChildren.length, 0, node); + node.isLastNode = true; + node.isFirstNode = (targetChildren.length == 1); + } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + newNeighbor = targetNode; + newNeighbor.isFirstNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = true; + node.isLastNode = false; + + } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + newNeighbor = targetNode; + newNeighbor.isLastNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = true; + + } else { + if (moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + } else { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + } + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = false; + } + data.fixPIdKeyValue(setting, node); + data.setSonNodeLevel(setting, node.getParentNode(), node); + + //repair node what been moved + view.setNodeLineIcos(setting, node); + view.repairNodeLevelClass(setting, node, oldLevel); + + //repair node's old parentNode dom + if (!setting.data.keep.parent && oldChildren.length < 1) { + //old parentNode has no child nodes + data.nodeIsParent(setting, oldParentNode, false); + oldParentNode.open = false; + var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting), + tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting), + tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting); + view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (oldNeighbor) { + //old neigbor node + view.setNodeLineIcos(setting, oldNeighbor); + } + + //new neigbor node + if (newNeighbor) { + view.setNodeLineIcos(setting, newNeighbor); + } + + //repair checkbox / radio + if (!!setting.check && setting.check.enable && view.repairChkClass) { + view.repairChkClass(setting, oldParentNode); + view.repairParentChkClassWithSelf(setting, oldParentNode); + if (oldParentNode != node.parent) + view.repairParentChkClassWithSelf(setting, node); + } + + //expand parents after move + if (!isSilent) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag); + } + }, + removeEditBtn: function (setting, node) { + $$(node, consts.id.EDIT, setting).unbind().remove(); + }, + removeRemoveBtn: function (setting, node) { + $$(node, consts.id.REMOVE, setting).unbind().remove(); + }, + removeTreeDom: function (setting, node) { + node.isHover = false; + view.removeEditBtn(setting, node); + view.removeRemoveBtn(setting, node); + tools.apply(setting.view.removeHoverDom, [setting.treeId, node]); + }, + repairNodeLevelClass: function (setting, node, oldLevel) { + if (oldLevel === node.level) return; + var liObj = $$(node, setting), + aObj = $$(node, consts.id.A, setting), + ulObj = $$(node, consts.id.UL, setting), + oldClass = consts.className.LEVEL + oldLevel, + newClass = consts.className.LEVEL + node.level; + liObj.removeClass(oldClass); + liObj.addClass(newClass); + aObj.removeClass(oldClass); + aObj.addClass(newClass); + ulObj.removeClass(oldClass); + ulObj.addClass(newClass); + }, + selectNodes: function (setting, nodes) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.selectNode(setting, nodes[i], i > 0); + } + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy); + data.addInitRoot(_initRoot); + data.addZTreeTools(_zTreeTools); + + var _cancelPreSelectedNode = view.cancelPreSelectedNode; + view.cancelPreSelectedNode = function (setting, node) { + var list = data.getRoot(setting).curSelectedList; + for (var i = 0, j = list.length; i < j; i++) { + if (!node || node === list[i]) { + view.removeTreeDom(setting, list[i]); + if (node) break; + } + } + if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments); + } + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) { + _createNodes.apply(view, arguments); + } + if (!nodes) return; + if (view.repairParentChkClassWithSelf) { + view.repairParentChkClassWithSelf(setting, parentNode); + } + } + + var _makeNodeUrl = view.makeNodeUrl; + view.makeNodeUrl = function (setting, node) { + return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments)); + } + + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var root = data.getRoot(setting); + if (root.curEditNode === node) root.curEditNode = null; + if (_removeNode) { + _removeNode.apply(view, arguments); + } + } + + var _selectNode = view.selectNode; + view.selectNode = function (setting, node, addFlag) { + var root = data.getRoot(setting); + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + return false; + } + if (_selectNode) _selectNode.apply(view, arguments); + view.addHoverDom(setting, node); + return true; + } + + var _uCanDo = tools.uCanDo; + tools.uCanDo = function (setting, e) { + var root = data.getRoot(setting); + if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) { + return true; + } + if (root.curEditNode) { + view.editNodeBlur = false; + root.curEditInput.focus(); + } + return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true); + } +})(jQuery); \ No newline at end of file diff --git a/public/lib/jquery/ztree/js/jquery.ztree.all.min.js b/public/lib/jquery/ztree/js/jquery.ztree.all.min.js new file mode 100644 index 0000000..99abd68 --- /dev/null +++ b/public/lib/jquery/ztree/js/jquery.ztree.all.min.js @@ -0,0 +1,15 @@ +/* + * JQuery zTree core + * v3.5.44 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * Date: 2020-04-29 + */ +!function($){var settings={},roots={},caches={},_consts={className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_setting={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nodeClasses:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},_initRoot=function(e){var t=data.getRoot(e);t||(t={},data.setRoot(e,t)),data.nodeChildren(e,t,[]),t.expandTriggerFlag=!1,t.curSelectedList=[],t.noSelection=!0,t.createdNodes=[],t.zId=0,t._ver=(new Date).getTime()},_initCache=function(e){var t=data.getCache(e);t||(t={},data.setCache(e,t)),t.nodes=[],t.doms=[]},_bindEvent=function(d){var e=d.treeObj,t=consts.event;e.bind(t.NODECREATED,function(e,t,n){tools.apply(d.callback.onNodeCreated,[e,t,n])}),e.bind(t.CLICK,function(e,t,n,o,a){tools.apply(d.callback.onClick,[t,n,o,a])}),e.bind(t.EXPAND,function(e,t,n){tools.apply(d.callback.onExpand,[e,t,n])}),e.bind(t.COLLAPSE,function(e,t,n){tools.apply(d.callback.onCollapse,[e,t,n])}),e.bind(t.ASYNC_SUCCESS,function(e,t,n,o){tools.apply(d.callback.onAsyncSuccess,[e,t,n,o])}),e.bind(t.ASYNC_ERROR,function(e,t,n,o,a,r){tools.apply(d.callback.onAsyncError,[e,t,n,o,a,r])}),e.bind(t.REMOVE,function(e,t,n){tools.apply(d.callback.onRemove,[e,t,n])}),e.bind(t.SELECTED,function(e,t,n){tools.apply(d.callback.onSelected,[t,n])}),e.bind(t.UNSELECTED,function(e,t,n){tools.apply(d.callback.onUnSelected,[t,n])})},_unbindEvent=function(e){var t=e.treeObj,n=consts.event;t.unbind(n.NODECREATED).unbind(n.CLICK).unbind(n.EXPAND).unbind(n.COLLAPSE).unbind(n.ASYNC_SUCCESS).unbind(n.ASYNC_ERROR).unbind(n.REMOVE).unbind(n.SELECTED).unbind(n.UNSELECTED)},_eventProxy=function(e){var t=e.target,n=data.getSetting(e.data.treeId),o="",a=null,r="",d="",i=null,s=null,l=null;if(tools.eqs(e.type,"mousedown")?d="mousedown":tools.eqs(e.type,"mouseup")?d="mouseup":tools.eqs(e.type,"contextmenu")?d="contextmenu":tools.eqs(e.type,"click")?tools.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+consts.id.SWITCH)?(o=tools.getNodeMainDom(t).id,r="switchNode"):(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="clickNode"):tools.eqs(e.type,"dblclick")&&(d="dblclick",(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="switchNode")),0=r.length&&(n=-1):(r=data.nodeChildren(e,t,[]),n=-1),0=u.length-n.length)&&(a=-1);for(var p=0,f=n.length;p/g,">");e.push("",a,"")},makeDOMNodeLine:function(e,t,n){e.push("")},makeDOMNodeMainAfter:function(e,t,n){e.push("
        • ")},makeDOMNodeMainBefore:function(e,t,n){e.push("
        • ")},makeDOMNodeNameAfter:function(e,t,n){e.push("")},makeDOMNodeNameBefore:function(e,t,n){var o=data.nodeTitle(t,n),a=view.makeNodeUrl(t,n),r=view.makeNodeFontCss(t,n),d=view.makeNodeClasses(t,n),i=[];for(var s in r)i.push(s,":",r[s],";");e.push("/g,">"),"'"),e.push(">")},makeNodeFontCss:function(e,t){var n=tools.apply(e.view.fontCss,[e.treeId,t],e.view.fontCss);return n&&"function"!=typeof n?n:{}},makeNodeClasses:function(e,t){var n=tools.apply(e.view.nodeClasses,[e.treeId,t],e.view.nodeClasses);return n&&"function"!=typeof n?n:{add:[],remove:[]}},makeNodeIcoClass:function(e,t){var n=["ico"];if(!t.isAjaxing){var o=data.nodeIsParent(e,t);n[0]=(t.iconSkin?t.iconSkin+"_":"")+n[0],o?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU)}return consts.className.BUTTON+" "+n.join("_")},makeNodeIcoStyle:function(e,t){var n=[];if(!t.isAjaxing){var o=data.nodeIsParent(e,t)&&t.iconOpen&&t.iconClose?t.open?t.iconOpen:t.iconClose:t[e.data.key.icon];o&&n.push("background:url(",o,") 0 0 no-repeat;"),0!=e.view.showIcon&&tools.apply(e.view.showIcon,[e.treeId,t],!0)||n.push("display:none;")}return n.join("")},makeNodeLineClass:function(e,t){var n=[];return e.view.showLine?0==t.level&&t.isFirstNode&&t.isLastNode?n.push(consts.line.ROOT):0==t.level&&t.isFirstNode?n.push(consts.line.ROOTS):t.isLastNode?n.push(consts.line.BOTTOM):n.push(consts.line.CENTER):n.push(consts.line.NOLINE),data.nodeIsParent(e,t)?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU),view.makeNodeLineClassEx(t)+n.join("_")},makeNodeLineClassEx:function(e){return consts.className.BUTTON+" "+consts.className.LEVEL+e.level+" "+consts.className.SWITCH+" "},makeNodeTarget:function(e){return e.target||"_blank"},makeNodeUrl:function(e,t){var n=e.data.key.url;return t[n]?t[n]:null},makeUlHtml:function(e,t,n,o){n.push("
            "),n.push(o),n.push("
          ")},makeUlLineClass:function(e,t){return e.view.showLine&&!t.isLastNode?consts.line.LINE:""},removeChildNodes:function(e,t){if(t){var n=data.nodeChildren(e,t);if(n){for(var o=0,a=n.length;on.bottom||o.right>n.right||o.left
        • ",Z)).append(Pe(d,he.id.A,Z).clone()),r.css("padding","0"),r.children("#"+d.tId+he.id.A).removeClass(he.node.CURSELECTED),te.append(r),t==Z.edit.drag.maxShowNodeNum-1&&(r=Pe("
        • ...
        • ",Z),te.append(r)));te.attr("id",ee[0].tId+he.id.UL+"_tmp"),te.addClass(Z.treeObj.attr("class")),te.appendTo(ie),(oe=Pe("",Z)).attr("id","zTreeMove_arrow_tmp"),oe.appendTo(ie),Z.treeObj.trigger(he.event.DRAG,[e,Z.treeId,ee])}if(1==$.dragFlag){if(de&&oe.attr("id")==e.target.id&&ue&&e.clientX+ae.scrollLeft()+2>fe("#"+ue+he.id.A,de).offset().left){var s=fe("#"+ue+he.id.A,de);e.target=0Z.edit.drag.borderMin,b=fZ.edit.drag.borderMin,R=EZ.edit.drag.borderMin,P=IZ.edit.drag.borderMin,C=T>Z.edit.drag.borderMin&&f>Z.edit.drag.borderMin&&E>Z.edit.drag.borderMin&&I>Z.edit.drag.borderMin,w=h&&se.treeObj.scrollTop()<=0,M=b&&se.treeObj.scrollTop()+se.treeObj.height()+10>=m,_=R&&se.treeObj.scrollLeft()<=0,O=P&&se.treeObj.scrollLeft()+se.treeObj.width()+10>=p;if(e.target&&Ie.isChildOrSelf(e.target,se.treeId)){for(var D=e.target;D&&D.tagName&&!Ie.eqs(D.tagName,"li")&&D.id!=se.treeId;)D=D.parentNode;var y=!0;for(t=0,o=ee.length;tse.edit.drag.autoOpenTime&&Ie.apply(se.callback.beforeDragOpen,[se.treeId,A],!0)&&(be.switchNode(se,A),se.edit.drag.autoExpandTrigger&&se.treeObj.trigger(he.event.EXPAND,[se.treeId,A]))},se.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId)}}else F()}else ge=he.move.TYPE_INNER,de&&Ie.apply(se.edit.drag.inner,[se.treeId,ee,null],!!se.edit.drag.inner)?de.addClass(he.node.TMPTARGET_TREE):de=null,oe.css({display:"none"}),window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null);ce=ue,Ne=ge,Z.treeObj.trigger(he.event.DRAGMOVE,[e,Z.treeId,ee])}return!1}function Te(d){if(window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null),Ne=ce=null,ae.unbind("mousemove",s),ae.unbind("mouseup",Te),ae.unbind("selectstart",c),ie.css("cursor",""),de&&(de.removeClass(he.node.TMPTARGET_TREE),ue&&fe("#"+ue+he.id.A,de).removeClass(he.node.TMPTARGET_NODE+"_"+he.move.TYPE_PREV).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_NEXT).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_INNER)),Ie.showIfameMask(Z,!1),J.showHoverDom=!0,0!=$.dragFlag){var e,t,o;for(e=$.dragFlag=0,t=ee.length;e
          ",e);l.appendTo(Pe("body",e)),o.dragMaskList.push(l)}}},view:{addEditBtn:function(e,t){if(!(t.editNameFlag||0